<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />



<meta name="date" content="2022-01-24" />

<title>COVID-19, Infection, Death, and Mobility</title>

<script src="data:application/javascript;base64,Ly8gUGFuZG9jIDIuOSBhZGRzIGF0dHJpYnV0ZXMgb24gYm90aCBoZWFkZXIgYW5kIGRpdi4gV2UgcmVtb3ZlIHRoZSBmb3JtZXIgKHRvCi8vIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgYmVoYXZpb3Igb2YgUGFuZG9jIDwgMi44KS4KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKGUpIHsKICB2YXIgaHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJkaXYuc2VjdGlvbltjbGFzcyo9J2xldmVsJ10gPiA6Zmlyc3QtY2hpbGQiKTsKICB2YXIgaSwgaCwgYTsKICBmb3IgKGkgPSAwOyBpIDwgaHMubGVuZ3RoOyBpKyspIHsKICAgIGggPSBoc1tpXTsKICAgIGlmICghL15oWzEtNl0kL2kudGVzdChoLnRhZ05hbWUpKSBjb250aW51ZTsgIC8vIGl0IHNob3VsZCBiZSBhIGhlYWRlciBoMS1oNgogICAgYSA9IGguYXR0cmlidXRlczsKICAgIHdoaWxlIChhLmxlbmd0aCA+IDApIGgucmVtb3ZlQXR0cmlidXRlKGFbMF0ubmFtZSk7CiAgfQp9KTsK"></script>
<script src="data:application/javascript;base64,LyohIGpRdWVyeSB2My42LjAgfCAoYykgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLwohZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZS5kb2N1bWVudD90KGUsITApOmZ1bmN0aW9uKGUpe2lmKCFlLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiB0KGUpfTp0KGUpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihDLGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1bXSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZixzPXQuc2xpY2UsZz10LmZsYXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZmxhdC5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gdC5jb25jYXQuYXBwbHkoW10sZSl9LHU9dC5wdXNoLGk9dC5pbmRleE9mLG49e30sbz1uLnRvU3RyaW5nLHY9bi5oYXNPd25Qcm9wZXJ0eSxhPXYudG9TdHJpbmcsbD1hLmNhbGwoT2JqZWN0KSx5PXt9LG09ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJiJudW1iZXIiIT10eXBlb2YgZS5ub2RlVHlwZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUuaXRlbX0seD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZT09PWUud2luZG93fSxFPUMuZG9jdW1lbnQsYz17dHlwZTohMCxzcmM6ITAsbm9uY2U6ITAsbm9Nb2R1bGU6ITB9O2Z1bmN0aW9uIGIoZSx0LG4pe3ZhciByLGksbz0obj1ufHxFKS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtpZihvLnRleHQ9ZSx0KWZvcihyIGluIGMpKGk9dFtyXXx8dC5nZXRBdHRyaWJ1dGUmJnQuZ2V0QXR0cmlidXRlKHIpKSYmby5zZXRBdHRyaWJ1dGUocixpKTtuLmhlYWQuYXBwZW5kQ2hpbGQobykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKX1mdW5jdGlvbiB3KGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9uW28uY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfXZhciBmPSIzLjYuMCIsUz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgUy5mbi5pbml0KGUsdCl9O2Z1bmN0aW9uIHAoZSl7dmFyIHQ9ISFlJiYibGVuZ3RoImluIGUmJmUubGVuZ3RoLG49dyhlKTtyZXR1cm4hbShlKSYmIXgoZSkmJigiYXJyYXkiPT09bnx8MD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmMDx0JiZ0LTEgaW4gZSl9Uy5mbj1TLnByb3RvdHlwZT17anF1ZXJ5OmYsY29uc3RydWN0b3I6UyxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHMuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3MuY2FsbCh0aGlzKTplPDA/dGhpc1tlK3RoaXMubGVuZ3RoXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9Uy5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFMuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMubWFwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCxlKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2socy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxldmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMuZ3JlcCh0aGlzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQrMSklMn0pKX0sb2RkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMuZ3JlcCh0aGlzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQlMn0pKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsbj0rZSsoZTwwP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKDA8PW4mJm48dD9bdGhpc1tuXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6dSxzb3J0OnQuc29ydCxzcGxpY2U6dC5zcGxpY2V9LFMuZXh0ZW5kPVMuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxvLGE9YXJndW1lbnRzWzBdfHx7fSxzPTEsdT1hcmd1bWVudHMubGVuZ3RoLGw9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIGEmJihsPWEsYT1hcmd1bWVudHNbc118fHt9LHMrKyksIm9iamVjdCI9PXR5cGVvZiBhfHxtKGEpfHwoYT17fSkscz09PXUmJihhPXRoaXMscy0tKTtzPHU7cysrKWlmKG51bGwhPShlPWFyZ3VtZW50c1tzXSkpZm9yKHQgaW4gZSlyPWVbdF0sIl9fcHJvdG9fXyIhPT10JiZhIT09ciYmKGwmJnImJihTLmlzUGxhaW5PYmplY3Qocil8fChpPUFycmF5LmlzQXJyYXkocikpKT8obj1hW3RdLG89aSYmIUFycmF5LmlzQXJyYXkobik/W106aXx8Uy5pc1BsYWluT2JqZWN0KG4pP246e30saT0hMSxhW3RdPVMuZXh0ZW5kKGwsbyxyKSk6dm9pZCAwIT09ciYmKGFbdF09cikpO3JldHVybiBhfSxTLmV4dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisoZitNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0sbm9vcDpmdW5jdGlvbigpe30saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiEoIWV8fCJbb2JqZWN0IE9iamVjdF0iIT09by5jYWxsKGUpKSYmKCEodD1yKGUpKXx8ImZ1bmN0aW9uIj09dHlwZW9mKG49di5jYWxsKHQsImNvbnN0cnVjdG9yIikmJnQuY29uc3RydWN0b3IpJiZhLmNhbGwobik9PT1sKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUsdCxuKXtiKGUse25vbmNlOnQmJnQubm9uY2V9LG4pfSxlYWNoOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wO2lmKHAoZSkpe2ZvcihuPWUubGVuZ3RoO3I8bjtyKyspaWYoITE9PT10LmNhbGwoZVtyXSxyLGVbcl0pKWJyZWFrfWVsc2UgZm9yKHIgaW4gZSlpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWs7cmV0dXJuIGV9LG1ha2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuPXR8fFtdO3JldHVybiBudWxsIT1lJiYocChPYmplY3QoZSkpP1MubWVyZ2Uobiwic3RyaW5nIj09dHlwZW9mIGU/W2VdOmUpOnUuY2FsbChuLGUpKSxufSxpbkFycmF5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09dD8tMTppLmNhbGwodCxlLG4pfSxtZXJnZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0rdC5sZW5ndGgscj0wLGk9ZS5sZW5ndGg7cjxuO3IrKyllW2krK109dFtyXTtyZXR1cm4gZS5sZW5ndGg9aSxlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9W10saT0wLG89ZS5sZW5ndGgsYT0hbjtpPG87aSsrKSF0KGVbaV0saSkhPT1hJiZyLnB1c2goZVtpXSk7cmV0dXJuIHJ9LG1hcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPTAsYT1bXTtpZihwKGUpKWZvcihyPWUubGVuZ3RoO288cjtvKyspbnVsbCE9KGk9dChlW29dLG8sbikpJiZhLnB1c2goaSk7ZWxzZSBmb3IobyBpbiBlKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmYS5wdXNoKGkpO3JldHVybiBnKGEpfSxndWlkOjEsc3VwcG9ydDp5fSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFMuZm5bU3ltYm9sLml0ZXJhdG9yXT10W1N5bWJvbC5pdGVyYXRvcl0pLFMuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtuWyJbb2JqZWN0ICIrdCsiXSJdPXQudG9Mb3dlckNhc2UoKX0pO3ZhciBkPWZ1bmN0aW9uKG4pe3ZhciBlLGQsYixvLGksaCxmLGcsdyx1LGwsVCxDLGEsRSx2LHMsYyx5LFM9InNpenpsZSIrMSpuZXcgRGF0ZSxwPW4uZG9jdW1lbnQsaz0wLHI9MCxtPXVlKCkseD11ZSgpLEE9dWUoKSxOPXVlKCksaj1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dCYmKGw9ITApLDB9LEQ9e30uaGFzT3duUHJvcGVydHksdD1bXSxxPXQucG9wLEw9dC5wdXNoLEg9dC5wdXNoLE89dC5zbGljZSxQPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfSxSPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTT0iW1xceDIwXFx0XFxyXFxuXFxmXSIsST0iKD86XFxcXFtcXGRhLWZBLUZdezEsNn0iK00rIj98XFxcXFteXFxyXFxuXFxmXXxbXFx3LV18W15cMC1cXHg3Zl0pKyIsVz0iXFxbIitNKyIqKCIrSSsiKSg/OiIrTSsiKihbKl4kfCF+XT89KSIrTSsiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiK0krIikpfCkiK00rIipcXF0iLEY9IjooIitJKyIpKD86XFwoKCgnKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IitXKyIpKil8LiopXFwpfCkiLEI9bmV3IFJlZ0V4cChNKyIrIiwiZyIpLCQ9bmV3IFJlZ0V4cCgiXiIrTSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitNKyIrJCIsImciKSxfPW5ldyBSZWdFeHAoIl4iK00rIiosIitNKyIqIiksej1uZXcgUmVnRXhwKCJeIitNKyIqKFs+K35dfCIrTSsiKSIrTSsiKiIpLFU9bmV3IFJlZ0V4cChNKyJ8PiIpLFg9bmV3IFJlZ0V4cChGKSxWPW5ldyBSZWdFeHAoIl4iK0krIiQiKSxHPXtJRDpuZXcgUmVnRXhwKCJeIygiK0krIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrSSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrSSsifFsqXSkiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK1cpLFBTRVVETzpuZXcgUmVnRXhwKCJeIitGKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK00rIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK00rIiooPzooWystXXwpIitNKyIqKFxcZCspfCkpIitNKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86IitSKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTSsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitNKyIqKCg/Oi1cXGQpP1xcZCopIitNKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxZPS9IVE1MJC9pLFE9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxKPS9eaFxkJC9pLEs9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLFo9L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxlZT0vWyt+XS8sdGU9bmV3IFJlZ0V4cCgiXFxcXFtcXGRhLWZBLUZdezEsNn0iK00rIj98XFxcXChbXlxcclxcblxcZl0pIiwiZyIpLG5lPWZ1bmN0aW9uKGUsdCl7dmFyIG49IjB4IitlLnNsaWNlKDEpLTY1NTM2O3JldHVybiB0fHwobjwwP1N0cmluZy5mcm9tQ2hhckNvZGUobis2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZShuPj4xMHw1NTI5NiwxMDIzJm58NTYzMjApKX0scmU9LyhbXDAtXHgxZlx4N2ZdfF4tP1xkKXxeLSR8W15cMC1ceDFmXHg3Zi1cdUZGRkZcdy1dL2csaWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iXDAiPT09ZT8iXHVmZmZkIjplLnNsaWNlKDAsLTEpKyJcXCIrZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KSsiICI6IlxcIitlfSxvZT1mdW5jdGlvbigpe1QoKX0sYWU9YmUoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLmRpc2FibGVkJiYiZmllbGRzZXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e0guYXBwbHkodD1PLmNhbGwocC5jaGlsZE5vZGVzKSxwLmNoaWxkTm9kZXMpLHRbcC5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7SD17YXBwbHk6dC5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtMLmFwcGx5KGUsTy5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gc2UodCxlLG4scil7dmFyIGksbyxhLHMsdSxsLGMsZj1lJiZlLm93bmVyRG9jdW1lbnQscD1lP2Uubm9kZVR5cGU6OTtpZihuPW58fFtdLCJzdHJpbmciIT10eXBlb2YgdHx8IXR8fDEhPT1wJiY5IT09cCYmMTEhPT1wKXJldHVybiBuO2lmKCFyJiYoVChlKSxlPWV8fEMsRSkpe2lmKDExIT09cCYmKHU9Wi5leGVjKHQpKSlpZihpPXVbMV0pe2lmKDk9PT1wKXtpZighKGE9ZS5nZXRFbGVtZW50QnlJZChpKSkpcmV0dXJuIG47aWYoYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2UgaWYoZiYmKGE9Zi5nZXRFbGVtZW50QnlJZChpKSkmJnkoZSxhKSYmYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2V7aWYodVsyXSlyZXR1cm4gSC5hcHBseShuLGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodCkpLG47aWYoKGk9dVszXSkmJmQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBILmFwcGx5KG4sZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGkpKSxufWlmKGQucXNhJiYhTlt0KyIgIl0mJighdnx8IXYudGVzdCh0KSkmJigxIT09cHx8Im9iamVjdCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKXtpZihjPXQsZj1lLDE9PT1wJiYoVS50ZXN0KHQpfHx6LnRlc3QodCkpKXsoZj1lZS50ZXN0KHQpJiZ5ZShlLnBhcmVudE5vZGUpfHxlKT09PWUmJmQuc2NvcGV8fCgocz1lLmdldEF0dHJpYnV0ZSgiaWQiKSk/cz1zLnJlcGxhY2UocmUsaWUpOmUuc2V0QXR0cmlidXRlKCJpZCIscz1TKSksbz0obD1oKHQpKS5sZW5ndGg7d2hpbGUoby0tKWxbb109KHM/IiMiK3M6IjpzY29wZSIpKyIgIit4ZShsW29dKTtjPWwuam9pbigiLCIpfXRyeXtyZXR1cm4gSC5hcHBseShuLGYucXVlcnlTZWxlY3RvckFsbChjKSksbn1jYXRjaChlKXtOKHQsITApfWZpbmFsbHl7cz09PVMmJmUucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGcodC5yZXBsYWNlKCQsIiQxIiksZSxuLHIpfWZ1bmN0aW9uIHVlKCl7dmFyIHI9W107cmV0dXJuIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gci5wdXNoKHQrIiAiKT5iLmNhY2hlTGVuZ3RoJiZkZWxldGUgZVtyLnNoaWZ0KCldLGVbdCsiICJdPW59fWZ1bmN0aW9uIGxlKGUpe3JldHVybiBlW1NdPSEwLGV9ZnVuY3Rpb24gY2UoZSl7dmFyIHQ9Qy5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpO3RyeXtyZXR1cm4hIWUodCl9Y2F0Y2goZSl7cmV0dXJuITF9ZmluYWxseXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9fWZ1bmN0aW9uIGZlKGUsdCl7dmFyIG49ZS5zcGxpdCgifCIpLHI9bi5sZW5ndGg7d2hpbGUoci0tKWIuYXR0ckhhbmRsZVtuW3JdXT10fWZ1bmN0aW9uIHBlKGUsdCl7dmFyIG49dCYmZSxyPW4mJjE9PT1lLm5vZGVUeXBlJiYxPT09dC5ub2RlVHlwZSYmZS5zb3VyY2VJbmRleC10LnNvdXJjZUluZGV4O2lmKHIpcmV0dXJuIHI7aWYobil3aGlsZShuPW4ubmV4dFNpYmxpbmcpaWYobj09PXQpcmV0dXJuLTE7cmV0dXJuIGU/MTotMX1mdW5jdGlvbiBkZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmZS50eXBlPT09dH19ZnVuY3Rpb24gaGUobil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PXR8fCJidXR0b24iPT09dCkmJmUudHlwZT09PW59fWZ1bmN0aW9uIGdlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4iZm9ybSJpbiBlP2UucGFyZW50Tm9kZSYmITE9PT1lLmRpc2FibGVkPyJsYWJlbCJpbiBlPyJsYWJlbCJpbiBlLnBhcmVudE5vZGU/ZS5wYXJlbnROb2RlLmRpc2FibGVkPT09dDplLmRpc2FibGVkPT09dDplLmlzRGlzYWJsZWQ9PT10fHxlLmlzRGlzYWJsZWQhPT0hdCYmYWUoZSk9PT10OmUuZGlzYWJsZWQ9PT10OiJsYWJlbCJpbiBlJiZlLmRpc2FibGVkPT09dH19ZnVuY3Rpb24gdmUoYSl7cmV0dXJuIGxlKGZ1bmN0aW9uKG8pe3JldHVybiBvPStvLGxlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKFtdLGUubGVuZ3RoLG8pLGk9ci5sZW5ndGg7d2hpbGUoaS0tKWVbbj1yW2ldXSYmKGVbbl09ISh0W25dPWVbbl0pKX0pfSl9ZnVuY3Rpb24geWUoZSl7cmV0dXJuIGUmJiJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSYmZX1mb3IoZSBpbiBkPXNlLnN1cHBvcnQ9e30saT1zZS5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLm5hbWVzcGFjZVVSSSxuPWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4hWS50ZXN0KHR8fG4mJm4ubm9kZU5hbWV8fCJIVE1MIil9LFQ9c2Uuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWU/ZS5vd25lckRvY3VtZW50fHxlOnA7cmV0dXJuIHIhPUMmJjk9PT1yLm5vZGVUeXBlJiZyLmRvY3VtZW50RWxlbWVudCYmKGE9KEM9cikuZG9jdW1lbnRFbGVtZW50LEU9IWkoQykscCE9QyYmKG49Qy5kZWZhdWx0VmlldykmJm4udG9wIT09biYmKG4uYWRkRXZlbnRMaXN0ZW5lcj9uLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsb2UsITEpOm4uYXR0YWNoRXZlbnQmJm4uYXR0YWNoRXZlbnQoIm9udW5sb2FkIixvZSkpLGQuc2NvcGU9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoZSkuYXBwZW5kQ2hpbGQoQy5jcmVhdGVFbGVtZW50KCJkaXYiKSksInVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwmJiFlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpzY29wZSBmaWVsZHNldCBkaXYiKS5sZW5ndGh9KSxkLmF0dHJpYnV0ZXM9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NOYW1lPSJpIiwhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksZC5nZXRFbGVtZW50c0J5VGFnTmFtZT1jZShmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBlbmRDaGlsZChDLmNyZWF0ZUNvbW1lbnQoIiIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1LLnRlc3QoQy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxkLmdldEJ5SWQ9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoZSkuaWQ9UywhQy5nZXRFbGVtZW50c0J5TmFtZXx8IUMuZ2V0RWxlbWVudHNCeU5hbWUoUykubGVuZ3RofSksZC5nZXRCeUlkPyhiLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImlkIik9PT10fX0sYi5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRCeUlkJiZFKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuP1tuXTpbXX19KTooYi5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIG49ZS5yZXBsYWNlKHRlLG5lKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUmJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gdCYmdC52YWx1ZT09PW59fSxiLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJkUpe3ZhciBuLHIsaSxvPXQuZ2V0RWxlbWVudEJ5SWQoZSk7aWYobyl7aWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dO2k9dC5nZXRFbGVtZW50c0J5TmFtZShlKSxyPTA7d2hpbGUobz1pW3IrK10paWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dfXJldHVybltdfX0pLGIuZmluZC5UQUc9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZT90LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOmQucXNhP3QucXVlcnlTZWxlY3RvckFsbChlKTp2b2lkIDB9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LGIuZmluZC5DTEFTUz1kLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJkUpcmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0scz1bXSx2PVtdLChkLnFzYT1LLnRlc3QoQy5xdWVyeVNlbGVjdG9yQWxsKSkmJihjZShmdW5jdGlvbihlKXt2YXIgdDthLmFwcGVuZENoaWxkKGUpLmlubmVySFRNTD0iPGEgaWQ9JyIrUysiJz48L2E+PHNlbGVjdCBpZD0nIitTKyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnYucHVzaCgiWypeJF09IitNKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHYucHVzaCgiXFxbIitNKyIqKD86dmFsdWV8IitSKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrUysiLV0iKS5sZW5ndGh8fHYucHVzaCgifj0iKSwodD1DLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnNldEF0dHJpYnV0ZSgibmFtZSIsIiIpLGUuYXBwZW5kQ2hpbGQodCksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT0nJ10iKS5sZW5ndGh8fHYucHVzaCgiXFxbIitNKyIqbmFtZSIrTSsiKj0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHYucHVzaCgiOmNoZWNrZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIitTKyIrKiIpLmxlbmd0aHx8di5wdXNoKCIuIy4rWyt+XSIpLGUucXVlcnlTZWxlY3RvckFsbCgiXFxcZiIpLHYucHVzaCgiW1xcclxcblxcZl0iKX0pLGNlKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD4iO3ZhciB0PUMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTt0LnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGUuYXBwZW5kQ2hpbGQodCkuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGUucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnYucHVzaCgibmFtZSIrTSsiKlsqXiR8IX5dPz0iKSwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCYmdi5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGEuYXBwZW5kQ2hpbGQoZSkuZGlzYWJsZWQ9ITAsMiE9PWUucXVlcnlTZWxlY3RvckFsbCgiOmRpc2FibGVkIikubGVuZ3RoJiZ2LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4Iiksdi5wdXNoKCIsLio6Iil9KSksKGQubWF0Y2hlc1NlbGVjdG9yPUsudGVzdChjPWEubWF0Y2hlc3x8YS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLm9NYXRjaGVzU2VsZWN0b3J8fGEubXNNYXRjaGVzU2VsZWN0b3IpKSYmY2UoZnVuY3Rpb24oZSl7ZC5kaXNjb25uZWN0ZWRNYXRjaD1jLmNhbGwoZSwiKiIpLGMuY2FsbChlLCJbcyE9JyddOngiKSxzLnB1c2goIiE9IixGKX0pLHY9di5sZW5ndGgmJm5ldyBSZWdFeHAodi5qb2luKCJ8IikpLHM9cy5sZW5ndGgmJm5ldyBSZWdFeHAocy5qb2luKCJ8IikpLHQ9Sy50ZXN0KGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24pLHk9dHx8Sy50ZXN0KGEuY29udGFpbnMpP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU/ZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodCl3aGlsZSh0PXQucGFyZW50Tm9kZSlpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0saj10P2Z1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGw9ITAsMDt2YXIgbj0hZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gbnx8KDEmKG49KGUub3duZXJEb2N1bWVudHx8ZSk9PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6MSl8fCFkLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PW4/ZT09Q3x8ZS5vd25lckRvY3VtZW50PT1wJiZ5KHAsZSk/LTE6dD09Q3x8dC5vd25lckRvY3VtZW50PT1wJiZ5KHAsdCk/MTp1P1AodSxlKS1QKHUsdCk6MDo0Jm4/LTE6MSl9OmZ1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGw9ITAsMDt2YXIgbixyPTAsaT1lLnBhcmVudE5vZGUsbz10LnBhcmVudE5vZGUsYT1bZV0scz1bdF07aWYoIWl8fCFvKXJldHVybiBlPT1DPy0xOnQ9PUM/MTppPy0xOm8/MTp1P1AodSxlKS1QKHUsdCk6MDtpZihpPT09bylyZXR1cm4gcGUoZSx0KTtuPWU7d2hpbGUobj1uLnBhcmVudE5vZGUpYS51bnNoaWZ0KG4pO249dDt3aGlsZShuPW4ucGFyZW50Tm9kZSlzLnVuc2hpZnQobik7d2hpbGUoYVtyXT09PXNbcl0pcisrO3JldHVybiByP3BlKGFbcl0sc1tyXSk6YVtyXT09cD8tMTpzW3JdPT1wPzE6MH0pLEN9LHNlLm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc2UoZSxudWxsLG51bGwsdCl9LHNlLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKFQoZSksZC5tYXRjaGVzU2VsZWN0b3ImJkUmJiFOW3QrIiAiXSYmKCFzfHwhcy50ZXN0KHQpKSYmKCF2fHwhdi50ZXN0KHQpKSl0cnl7dmFyIG49Yy5jYWxsKGUsdCk7aWYobnx8ZC5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBufWNhdGNoKGUpe04odCwhMCl9cmV0dXJuIDA8c2UodCxDLG51bGwsW2VdKS5sZW5ndGh9LHNlLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8ZSkhPUMmJlQoZSkseShlLHQpfSxzZS5hdHRyPWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPUMmJlQoZSk7dmFyIG49Yi5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0scj1uJiZELmNhbGwoYi5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/bihlLHQsIUUpOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09cj9yOmQuYXR0cmlidXRlc3x8IUU/ZS5nZXRBdHRyaWJ1dGUodCk6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1ZTpudWxsfSxzZS5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGUrIiIpLnJlcGxhY2UocmUsaWUpfSxzZS5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LHNlLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPTAsaT0wO2lmKGw9IWQuZGV0ZWN0RHVwbGljYXRlcyx1PSFkLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KGopLGwpe3doaWxlKHQ9ZVtpKytdKXQ9PT1lW2ldJiYocj1uLnB1c2goaSkpO3doaWxlKHItLSllLnNwbGljZShuW3JdLDEpfXJldHVybiB1PW51bGwsZX0sbz1zZS5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZigxPT09aXx8OT09PWl8fDExPT09aSl7aWYoInN0cmluZyI9PXR5cGVvZiBlLnRleHRDb250ZW50KXJldHVybiBlLnRleHRDb250ZW50O2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1vKGUpfWVsc2UgaWYoMz09PWl8fDQ9PT1pKXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKHQ9ZVtyKytdKW4rPW8odCk7cmV0dXJuIG59LChiPXNlLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOmxlLG1hdGNoOkcsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOnsiPiI6e2RpcjoicGFyZW50Tm9kZSIsZmlyc3Q6ITB9LCIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0ucmVwbGFjZSh0ZSxuZSksZVszXT0oZVszXXx8ZVs0XXx8ZVs1XXx8IiIpLnJlcGxhY2UodGUsbmUpLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxzZS5lcnJvcihlWzBdKSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVdPSsoZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZzZS5lcnJvcihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXTtyZXR1cm4gRy5DSElMRC50ZXN0KGVbMF0pP251bGw6KGVbM10/ZVsyXT1lWzRdfHxlWzVdfHwiIjpuJiZYLnRlc3QobikmJih0PWgobiwhMCkpJiYodD1uLmluZGV4T2YoIikiLG4ubGVuZ3RoLXQpLW4ubGVuZ3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHRlLG5lKS50b0xvd2VyQ2FzZSgpO3JldHVybiIqIj09PWU/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXR9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1tW2UrIiAiXTtyZXR1cm4gdHx8KHQ9bmV3IFJlZ0V4cCgiKF58IitNKyIpIitlKyIoIitNKyJ8JCkiKSkmJm0oZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHwidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24obixyLGkpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1zZS5hdHRyKGUsbik7cmV0dXJuIG51bGw9PXQ/IiE9Ij09PXI6IXJ8fCh0Kz0iIiwiPSI9PT1yP3Q9PT1pOiIhPSI9PT1yP3QhPT1pOiJePSI9PT1yP2kmJjA9PT10LmluZGV4T2YoaSk6Iio9Ij09PXI/aSYmLTE8dC5pbmRleE9mKGkpOiIkPSI9PT1yP2kmJnQuc2xpY2UoLWkubGVuZ3RoKT09PWk6In49Ij09PXI/LTE8KCIgIit0LnJlcGxhY2UoQiwiICIpKyIgIikuaW5kZXhPZihpKToifD0iPT09ciYmKHQ9PT1pfHx0LnNsaWNlKDAsaS5sZW5ndGgrMSk9PT1pKyItIikpfX0sQ0hJTEQ6ZnVuY3Rpb24oaCxlLHQsZyx2KXt2YXIgeT0ibnRoIiE9PWguc2xpY2UoMCwzKSxtPSJsYXN0IiE9PWguc2xpY2UoLTQpLHg9Im9mLXR5cGUiPT09ZTtyZXR1cm4gMT09PWcmJjA9PT12P2Z1bmN0aW9uKGUpe3JldHVybiEhZS5wYXJlbnROb2RlfTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9eSE9PW0/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixjPWUucGFyZW50Tm9kZSxmPXgmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxwPSFuJiYheCxkPSExO2lmKGMpe2lmKHkpe3doaWxlKGwpe2E9ZTt3aGlsZShhPWFbbF0paWYoeD9hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1mOjE9PT1hLm5vZGVUeXBlKXJldHVybiExO3U9bD0ib25seSI9PT1oJiYhdSYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZih1PVttP2MuZmlyc3RDaGlsZDpjLmxhc3RDaGlsZF0sbSYmcCl7ZD0ocz0ocj0oaT0obz0oYT1jKVtTXXx8KGFbU109e30pKVthLnVuaXF1ZUlEXXx8KG9bYS51bmlxdWVJRF09e30pKVtoXXx8W10pWzBdPT09ayYmclsxXSkmJnJbMl0sYT1zJiZjLmNoaWxkTm9kZXNbc107d2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoMT09PWEubm9kZVR5cGUmJisrZCYmYT09PWUpe2lbaF09W2sscyxkXTticmVha319ZWxzZSBpZihwJiYoZD1zPShyPShpPShvPShhPWUpW1NdfHwoYVtTXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdfHxbXSlbMF09PT1rJiZyWzFdKSwhMT09PWQpd2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoKHg/YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZjoxPT09YS5ub2RlVHlwZSkmJisrZCYmKHAmJigoaT0obz1hW1NdfHwoYVtTXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdPVtrLGRdKSxhPT09ZSkpYnJlYWs7cmV0dXJuKGQtPXYpPT09Z3x8ZCVnPT0wJiYwPD1kL2d9fX0sUFNFVURPOmZ1bmN0aW9uKGUsbyl7dmFyIHQsYT1iLnBzZXVkb3NbZV18fGIuc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiBhW1NdP2Eobyk6MTxhLmxlbmd0aD8odD1bZSxlLCIiLG9dLGIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP2xlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKGUsbyksaT1yLmxlbmd0aDt3aGlsZShpLS0pZVtuPVAoZSxyW2ldKV09ISh0W25dPXJbaV0pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSwwLHQpfSk6YX19LHBzZXVkb3M6e25vdDpsZShmdW5jdGlvbihlKXt2YXIgcj1bXSxpPVtdLHM9ZihlLnJlcGxhY2UoJCwiJDEiKSk7cmV0dXJuIHNbU10/bGUoZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1zKGUsbnVsbCxyLFtdKSxhPWUubGVuZ3RoO3doaWxlKGEtLSkoaT1vW2FdKSYmKGVbYV09ISh0W2FdPWkpKX0pOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gclswXT1lLHMocixudWxsLG4saSksclswXT1udWxsLCFpLnBvcCgpfX0pLGhhczpsZShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA8c2UodCxlKS5sZW5ndGh9fSksY29udGFpbnM6bGUoZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKHRlLG5lKSxmdW5jdGlvbihlKXtyZXR1cm4tMTwoZS50ZXh0Q29udGVudHx8byhlKSkuaW5kZXhPZih0KX19KSxsYW5nOmxlKGZ1bmN0aW9uKG4pe3JldHVybiBWLnRlc3Qobnx8IiIpfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIituKSxuPW4ucmVwbGFjZSh0ZSxuZSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihlKXt2YXIgdDtkb3tpZih0PUU/ZS5sYW5nOmUuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxlLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybih0PXQudG9Mb3dlckNhc2UoKSk9PT1ufHwwPT09dC5pbmRleE9mKG4rIi0iKX13aGlsZSgoZT1lLnBhcmVudE5vZGUpJiYxPT09ZS5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGUpe3ZhciB0PW4ubG9jYXRpb24mJm4ubG9jYXRpb24uaGFzaDtyZXR1cm4gdCYmdC5zbGljZSgxKT09PWUuaWR9LHJvb3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1hfSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZT09PUMuYWN0aXZlRWxlbWVudCYmKCFDLmhhc0ZvY3VzfHxDLmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFiSW5kZXgpfSxlbmFibGVkOmdlKCExKSxkaXNhYmxlZDpnZSghMCksY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsITA9PT1lLnNlbGVjdGVkfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWIucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBKLnRlc3QoZS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBRLnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PXQudG9Mb3dlckNhc2UoKSl9LGZpcnN0OnZlKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDp2ZShmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6dmUoZnVuY3Rpb24oZSx0LG4pe3JldHVybltuPDA/bit0Om5dfSksZXZlbjp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OnZlKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDp0PG4/dDpuOzA8PS0tcjspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6dmUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0pLnBzZXVkb3MubnRoPWIucHNldWRvcy5lcSx7cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pYi5wc2V1ZG9zW2VdPWRlKGUpO2ZvcihlIGlue3N1Ym1pdDohMCxyZXNldDohMH0pYi5wc2V1ZG9zW2VdPWhlKGUpO2Z1bmN0aW9uIG1lKCl7fWZ1bmN0aW9uIHhlKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjt0PG47dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24gYmUocyxlLHQpe3ZhciB1PWUuZGlyLGw9ZS5uZXh0LGM9bHx8dSxmPXQmJiJwYXJlbnROb2RlIj09PWMscD1yKys7cmV0dXJuIGUuZmlyc3Q/ZnVuY3Rpb24oZSx0LG4pe3doaWxlKGU9ZVt1XSlpZigxPT09ZS5ub2RlVHlwZXx8ZilyZXR1cm4gcyhlLHQsbik7cmV0dXJuITF9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT1bayxwXTtpZihuKXt3aGlsZShlPWVbdV0paWYoKDE9PT1lLm5vZGVUeXBlfHxmKSYmcyhlLHQsbikpcmV0dXJuITB9ZWxzZSB3aGlsZShlPWVbdV0paWYoMT09PWUubm9kZVR5cGV8fGYpaWYoaT0obz1lW1NdfHwoZVtTXT17fSkpW2UudW5pcXVlSURdfHwob1tlLnVuaXF1ZUlEXT17fSksbCYmbD09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSllPWVbdV18fGU7ZWxzZXtpZigocj1pW2NdKSYmclswXT09PWsmJnJbMV09PT1wKXJldHVybiBhWzJdPXJbMl07aWYoKGlbY109YSlbMl09cyhlLHQsbikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHdlKGkpe3JldHVybiAxPGkubGVuZ3RoP2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1pLmxlbmd0aDt3aGlsZShyLS0paWYoIWlbcl0oZSx0LG4pKXJldHVybiExO3JldHVybiEwfTppWzBdfWZ1bmN0aW9uIFRlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGE9W10scz0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O3M8dTtzKyspKG89ZVtzXSkmJihuJiYhbihvLHIsaSl8fChhLnB1c2gobyksbCYmdC5wdXNoKHMpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQ2UoZCxoLGcsdix5LGUpe3JldHVybiB2JiYhdltTXSYmKHY9Q2UodikpLHkmJiF5W1NdJiYoeT1DZSh5LGUpKSxsZShmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscz1bXSx1PVtdLGw9dC5sZW5ndGgsYz1lfHxmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7cisrKXNlKGUsdFtyXSxuKTtyZXR1cm4gbn0oaHx8IioiLG4ubm9kZVR5cGU/W25dOm4sW10pLGY9IWR8fCFlJiZoP2M6VGUoYyxzLGQsbixyKSxwPWc/eXx8KGU/ZDpsfHx2KT9bXTp0OmY7aWYoZyYmZyhmLHAsbixyKSx2KXtpPVRlKHAsdSksdihpLFtdLG4sciksbz1pLmxlbmd0aDt3aGlsZShvLS0pKGE9aVtvXSkmJihwW3Vbb11dPSEoZlt1W29dXT1hKSl9aWYoZSl7aWYoeXx8ZCl7aWYoeSl7aT1bXSxvPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmaS5wdXNoKGZbb109YSk7eShudWxsLHA9W10saSxyKX1vPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmLTE8KGk9eT9QKGUsYSk6c1tvXSkmJihlW2ldPSEodFtpXT1hKSl9fWVsc2UgcD1UZShwPT09dD9wLnNwbGljZShsLHAubGVuZ3RoKTpwKSx5P3kobnVsbCx0LHAscik6SC5hcHBseSh0LHApfSl9ZnVuY3Rpb24gRWUoZSl7Zm9yKHZhciBpLHQsbixyPWUubGVuZ3RoLG89Yi5yZWxhdGl2ZVtlWzBdLnR5cGVdLGE9b3x8Yi5yZWxhdGl2ZVsiICJdLHM9bz8xOjAsdT1iZShmdW5jdGlvbihlKXtyZXR1cm4gZT09PWl9LGEsITApLGw9YmUoZnVuY3Rpb24oZSl7cmV0dXJuLTE8UChpLGUpfSxhLCEwKSxjPVtmdW5jdGlvbihlLHQsbil7dmFyIHI9IW8mJihufHx0IT09dyl8fCgoaT10KS5ub2RlVHlwZT91KGUsdCxuKTpsKGUsdCxuKSk7cmV0dXJuIGk9bnVsbCxyfV07czxyO3MrKylpZih0PWIucmVsYXRpdmVbZVtzXS50eXBlXSljPVtiZSh3ZShjKSx0KV07ZWxzZXtpZigodD1iLmZpbHRlcltlW3NdLnR5cGVdLmFwcGx5KG51bGwsZVtzXS5tYXRjaGVzKSlbU10pe2ZvcihuPSsrcztuPHI7bisrKWlmKGIucmVsYXRpdmVbZVtuXS50eXBlXSlicmVhaztyZXR1cm4gQ2UoMTxzJiZ3ZShjKSwxPHMmJnhlKGUuc2xpY2UoMCxzLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09ZVtzLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoJCwiJDEiKSx0LHM8biYmRWUoZS5zbGljZShzLG4pKSxuPHImJkVlKGU9ZS5zbGljZShuKSksbjxyJiZ4ZShlKSl9Yy5wdXNoKHQpfXJldHVybiB3ZShjKX1yZXR1cm4gbWUucHJvdG90eXBlPWIuZmlsdGVycz1iLnBzZXVkb3MsYi5zZXRGaWx0ZXJzPW5ldyBtZSxoPXNlLnRva2VuaXplPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLHUsbD14W2UrIiAiXTtpZihsKXJldHVybiB0PzA6bC5zbGljZSgwKTthPWUscz1bXSx1PWIucHJlRmlsdGVyO3doaWxlKGEpe2ZvcihvIGluIG4mJiEocj1fLmV4ZWMoYSkpfHwociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHMucHVzaChpPVtdKSksbj0hMSwocj16LmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksaS5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKCQsIiAiKX0pLGE9YS5zbGljZShuLmxlbmd0aCkpLGIuZmlsdGVyKSEocj1HW29dLmV4ZWMoYSkpfHx1W29dJiYhKHI9dVtvXShyKSl8fChuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpvLG1hdGNoZXM6cn0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P2EubGVuZ3RoOmE/c2UuZXJyb3IoZSk6eChlLHMpLnNsaWNlKDApfSxmPXNlLmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbix2LHksbSx4LHIsaT1bXSxvPVtdLGE9QVtlKyIgIl07aWYoIWEpe3R8fCh0PWgoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKShhPUVlKHRbbl0pKVtTXT9pLnB1c2goYSk6by5wdXNoKGEpOyhhPUEoZSwodj1vLG09MDwoeT1pKS5sZW5ndGgseD0wPHYubGVuZ3RoLHI9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdT0wLGw9IjAiLGM9ZSYmW10sZj1bXSxwPXcsZD1lfHx4JiZiLmZpbmQuVEFHKCIqIixpKSxoPWsrPW51bGw9PXA/MTpNYXRoLnJhbmRvbSgpfHwuMSxnPWQubGVuZ3RoO2ZvcihpJiYodz10PT1DfHx0fHxpKTtsIT09ZyYmbnVsbCE9KG89ZFtsXSk7bCsrKXtpZih4JiZvKXthPTAsdHx8by5vd25lckRvY3VtZW50PT1DfHwoVChvKSxuPSFFKTt3aGlsZShzPXZbYSsrXSlpZihzKG8sdHx8QyxuKSl7ci5wdXNoKG8pO2JyZWFrfWkmJihrPWgpfW0mJigobz0hcyYmbykmJnUtLSxlJiZjLnB1c2gobykpfWlmKHUrPWwsbSYmbCE9PXUpe2E9MDt3aGlsZShzPXlbYSsrXSlzKGMsZix0LG4pO2lmKGUpe2lmKDA8dSl3aGlsZShsLS0pY1tsXXx8ZltsXXx8KGZbbF09cS5jYWxsKHIpKTtmPVRlKGYpfUguYXBwbHkocixmKSxpJiYhZSYmMDxmLmxlbmd0aCYmMTx1K3kubGVuZ3RoJiZzZS51bmlxdWVTb3J0KHIpfXJldHVybiBpJiYoaz1oLHc9cCksY30sbT9sZShyKTpyKSkpLnNlbGVjdG9yPWV9cmV0dXJuIGF9LGc9c2Uuc2VsZWN0PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZSxjPSFyJiZoKGU9bC5zZWxlY3Rvcnx8ZSk7aWYobj1ufHxbXSwxPT09Yy5sZW5ndGgpe2lmKDI8KG89Y1swXT1jWzBdLnNsaWNlKDApKS5sZW5ndGgmJiJJRCI9PT0oYT1vWzBdKS50eXBlJiY5PT09dC5ub2RlVHlwZSYmRSYmYi5yZWxhdGl2ZVtvWzFdLnR5cGVdKXtpZighKHQ9KGIuZmluZC5JRChhLm1hdGNoZXNbMF0ucmVwbGFjZSh0ZSxuZSksdCl8fFtdKVswXSkpcmV0dXJuIG47bCYmKHQ9dC5wYXJlbnROb2RlKSxlPWUuc2xpY2Uoby5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9aT1HLm5lZWRzQ29udGV4dC50ZXN0KGUpPzA6by5sZW5ndGg7d2hpbGUoaS0tKXtpZihhPW9baV0sYi5yZWxhdGl2ZVtzPWEudHlwZV0pYnJlYWs7aWYoKHU9Yi5maW5kW3NdKSYmKHI9dShhLm1hdGNoZXNbMF0ucmVwbGFjZSh0ZSxuZSksZWUudGVzdChvWzBdLnR5cGUpJiZ5ZSh0LnBhcmVudE5vZGUpfHx0KSkpe2lmKG8uc3BsaWNlKGksMSksIShlPXIubGVuZ3RoJiZ4ZShvKSkpcmV0dXJuIEguYXBwbHkobixyKSxuO2JyZWFrfX19cmV0dXJuKGx8fGYoZSxjKSkocix0LCFFLG4sIXR8fGVlLnRlc3QoZSkmJnllKHQucGFyZW50Tm9kZSl8fHQpLG59LGQuc29ydFN0YWJsZT1TLnNwbGl0KCIiKS5zb3J0KGopLmpvaW4oIiIpPT09UyxkLmRldGVjdER1cGxpY2F0ZXM9ISFsLFQoKSxkLnNvcnREZXRhY2hlZD1jZShmdW5jdGlvbihlKXtyZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKEMuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKSl9KSxjZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxmZSgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuKXJldHVybiBlLmdldEF0dHJpYnV0ZSh0LCJ0eXBlIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksZC5hdHRyaWJ1dGVzJiZjZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxmZSgidmFsdWUiLGZ1bmN0aW9uKGUsdCxuKXtpZighbiYmImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gZS5kZWZhdWx0VmFsdWV9KSxjZShmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8ZmUoUixmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoIW4pcmV0dXJuITA9PT1lW3RdP3QudG9Mb3dlckNhc2UoKToocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOm51bGx9KSxzZX0oQyk7Uy5maW5kPWQsUy5leHByPWQuc2VsZWN0b3JzLFMuZXhwclsiOiJdPVMuZXhwci5wc2V1ZG9zLFMudW5pcXVlU29ydD1TLnVuaXF1ZT1kLnVuaXF1ZVNvcnQsUy50ZXh0PWQuZ2V0VGV4dCxTLmlzWE1MRG9jPWQuaXNYTUwsUy5jb250YWlucz1kLmNvbnRhaW5zLFMuZXNjYXBlU2VsZWN0b3I9ZC5lc2NhcGU7dmFyIGg9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdLGk9dm9pZCAwIT09bjt3aGlsZSgoZT1lW3RdKSYmOSE9PWUubm9kZVR5cGUpaWYoMT09PWUubm9kZVR5cGUpe2lmKGkmJlMoZSkuaXMobikpYnJlYWs7ci5wdXNoKGUpfXJldHVybiByfSxUPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufSxrPVMuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7ZnVuY3Rpb24gQShlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9dmFyIE49L148KFthLXpdW15cL1wwPjpceDIwXHRcclxuXGZdKilbXHgyMFx0XHJcblxmXSpcLz8+KD86PFwvXDE+fCkkL2k7ZnVuY3Rpb24gaihlLG4scil7cmV0dXJuIG0obik/Uy5ncmVwKGUsZnVuY3Rpb24oZSx0KXtyZXR1cm4hIW4uY2FsbChlLHQsZSkhPT1yfSk6bi5ub2RlVHlwZT9TLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PW4hPT1yfSk6InN0cmluZyIhPXR5cGVvZiBuP1MuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybi0xPGkuY2FsbChuLGUpIT09cn0pOlMuZmlsdGVyKG4sZSxyKX1TLmZpbHRlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09PXQubGVuZ3RoJiYxPT09ci5ub2RlVHlwZT9TLmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsZSk/W3JdOltdOlMuZmluZC5tYXRjaGVzKGUsUy5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpfSxTLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcy5sZW5ndGgsaT10aGlzO2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gdGhpcy5wdXNoU3RhY2soUyhlKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3Q8cjt0KyspaWYoUy5jb250YWlucyhpW3RdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihuPXRoaXMucHVzaFN0YWNrKFtdKSx0PTA7dDxyO3QrKylTLmZpbmQoZSxpW3RdLG4pO3JldHVybiAxPHI/Uy51bmlxdWVTb3J0KG4pOm59LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhaih0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmay50ZXN0KGUpP1MoZSk6ZXx8W10sITEpLmxlbmd0aH19KTt2YXIgRCxxPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKykpJC87KFMuZm4uaW5pdD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZighZSlyZXR1cm4gdGhpcztpZihuPW58fEQsInN0cmluZyI9PXR5cGVvZiBlKXtpZighKHI9IjwiPT09ZVswXSYmIj4iPT09ZVtlLmxlbmd0aC0xXSYmMzw9ZS5sZW5ndGg/W251bGwsZSxudWxsXTpxLmV4ZWMoZSkpfHwhclsxXSYmdClyZXR1cm4hdHx8dC5qcXVlcnk/KHR8fG4pLmZpbmQoZSk6dGhpcy5jb25zdHJ1Y3Rvcih0KS5maW5kKGUpO2lmKHJbMV0pe2lmKHQ9dCBpbnN0YW5jZW9mIFM/dFswXTp0LFMubWVyZ2UodGhpcyxTLnBhcnNlSFRNTChyWzFdLHQmJnQubm9kZVR5cGU/dC5vd25lckRvY3VtZW50fHx0OkUsITApKSxOLnRlc3QoclsxXSkmJlMuaXNQbGFpbk9iamVjdCh0KSlmb3IociBpbiB0KW0odGhpc1tyXSk/dGhpc1tyXSh0W3JdKTp0aGlzLmF0dHIocix0W3JdKTtyZXR1cm4gdGhpc31yZXR1cm4oaT1FLmdldEVsZW1lbnRCeUlkKHJbMl0pKSYmKHRoaXNbMF09aSx0aGlzLmxlbmd0aD0xKSx0aGlzfXJldHVybiBlLm5vZGVUeXBlPyh0aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTptKGUpP3ZvaWQgMCE9PW4ucmVhZHk/bi5yZWFkeShlKTplKFMpOlMubWFrZUFycmF5KGUsdGhpcyl9KS5wcm90b3R5cGU9Uy5mbixEPVMoRSk7dmFyIEw9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sSD17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmdW5jdGlvbiBPKGUsdCl7d2hpbGUoKGU9ZVt0XSkmJjEhPT1lLm5vZGVUeXBlKTtyZXR1cm4gZX1TLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGUpe3ZhciB0PVMoZSx0aGlzKSxuPXQubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bjtlKyspaWYoUy5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9InN0cmluZyIhPXR5cGVvZiBlJiZTKGUpO2lmKCFrLnRlc3QoZSkpZm9yKDtyPGk7cisrKWZvcihuPXRoaXNbcl07biYmbiE9PXQ7bj1uLnBhcmVudE5vZGUpaWYobi5ub2RlVHlwZTwxMSYmKGE/LTE8YS5pbmRleChuKToxPT09bi5ub2RlVHlwZSYmUy5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7by5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjaygxPG8ubGVuZ3RoP1MudW5pcXVlU29ydChvKTpvKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP2kuY2FsbChTKGUpLHRoaXNbMF0pOmkuY2FsbCh0aGlzLGUuanF1ZXJ5P2VbMF06ZSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy51bmlxdWVTb3J0KFMubWVyZ2UodGhpcy5nZXQoKSxTKGUsdCkpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pLFMuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmMTEhPT10Lm5vZGVUeXBlP3Q6bnVsbH0scGFyZW50czpmdW5jdGlvbihlKXtyZXR1cm4gaChlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGgoZSwicGFyZW50Tm9kZSIsbil9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE8oZSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihlKXtyZXR1cm4gTyhlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gaChlLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBoKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBoKGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaChlLCJwcmV2aW91c1NpYmxpbmciLG4pfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4gVCgoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIFQoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUuY29udGVudERvY3VtZW50JiZyKGUuY29udGVudERvY3VtZW50KT9lLmNvbnRlbnREb2N1bWVudDooQShlLCJ0ZW1wbGF0ZSIpJiYoZT1lLmNvbnRlbnR8fGUpLFMubWVyZ2UoW10sZS5jaGlsZE5vZGVzKSl9fSxmdW5jdGlvbihyLGkpe1MuZm5bcl09ZnVuY3Rpb24oZSx0KXt2YXIgbj1TLm1hcCh0aGlzLGksZSk7cmV0dXJuIlVudGlsIiE9PXIuc2xpY2UoLTUpJiYodD1lKSx0JiYic3RyaW5nIj09dHlwZW9mIHQmJihuPVMuZmlsdGVyKHQsbikpLDE8dGhpcy5sZW5ndGgmJihIW3JdfHxTLnVuaXF1ZVNvcnQobiksTC50ZXN0KHIpJiZuLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2sobil9fSk7dmFyIFA9L1teXHgyMFx0XHJcblxmXSsvZztmdW5jdGlvbiBSKGUpe3JldHVybiBlfWZ1bmN0aW9uIE0oZSl7dGhyb3cgZX1mdW5jdGlvbiBJKGUsdCxuLHIpe3ZhciBpO3RyeXtlJiZtKGk9ZS5wcm9taXNlKT9pLmNhbGwoZSkuZG9uZSh0KS5mYWlsKG4pOmUmJm0oaT1lLnRoZW4pP2kuY2FsbChlLHQsbik6dC5hcHBseSh2b2lkIDAsW2VdLnNsaWNlKHIpKX1jYXRjaChlKXtuLmFwcGx5KHZvaWQgMCxbZV0pfX1TLkNhbGxiYWNrcz1mdW5jdGlvbihyKXt2YXIgZSxuO3I9InN0cmluZyI9PXR5cGVvZiByPyhlPXIsbj17fSxTLmVhY2goZS5tYXRjaChQKXx8W10sZnVuY3Rpb24oZSx0KXtuW3RdPSEwfSksbik6Uy5leHRlbmQoe30scik7dmFyIGksdCxvLGEscz1bXSx1PVtdLGw9LTEsYz1mdW5jdGlvbigpe2ZvcihhPWF8fHIub25jZSxvPWk9ITA7dS5sZW5ndGg7bD0tMSl7dD11LnNoaWZ0KCk7d2hpbGUoKytsPHMubGVuZ3RoKSExPT09c1tsXS5hcHBseSh0WzBdLHRbMV0pJiZyLnN0b3BPbkZhbHNlJiYobD1zLmxlbmd0aCx0PSExKX1yLm1lbW9yeXx8KHQ9ITEpLGk9ITEsYSYmKHM9dD9bXToiIil9LGY9e2FkZDpmdW5jdGlvbigpe3JldHVybiBzJiYodCYmIWkmJihsPXMubGVuZ3RoLTEsdS5wdXNoKHQpKSxmdW5jdGlvbiBuKGUpe1MuZWFjaChlLGZ1bmN0aW9uKGUsdCl7bSh0KT9yLnVuaXF1ZSYmZi5oYXModCl8fHMucHVzaCh0KTp0JiZ0Lmxlbmd0aCYmInN0cmluZyIhPT13KHQpJiZuKHQpfSl9KGFyZ3VtZW50cyksdCYmIWkmJmMoKSksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIFMuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oZSx0KXt2YXIgbjt3aGlsZSgtMTwobj1TLmluQXJyYXkodCxzLG4pKSlzLnNwbGljZShuLDEpLG48PWwmJmwtLX0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZT8tMTxTLmluQXJyYXkoZSxzKTowPHMubGVuZ3RofSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBzJiYocz1bXSksdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBhPXU9W10scz10PSIiLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIXN9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYT11PVtdLHR8fGl8fChzPXQ9IiIpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiEhYX0sZmlyZVdpdGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXx8KHQ9W2UsKHQ9dHx8W10pLnNsaWNlP3Quc2xpY2UoKTp0XSx1LnB1c2godCksaXx8YygpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGYuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFvfX07cmV0dXJuIGZ9LFMuZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgbz1bWyJub3RpZnkiLCJwcm9ncmVzcyIsUy5DYWxsYmFja3MoIm1lbW9yeSIpLFMuQ2FsbGJhY2tzKCJtZW1vcnkiKSwyXSxbInJlc29sdmUiLCJkb25lIixTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwwLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsUy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksUy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksMSwicmVqZWN0ZWQiXV0saT0icGVuZGluZyIsYT17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIHMuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSwiY2F0Y2giOmZ1bmN0aW9uKGUpe3JldHVybiBhLnRoZW4obnVsbCxlKX0scGlwZTpmdW5jdGlvbigpe3ZhciBpPWFyZ3VtZW50cztyZXR1cm4gUy5EZWZlcnJlZChmdW5jdGlvbihyKXtTLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPW0oaVt0WzRdXSkmJmlbdFs0XV07c1t0WzFdXShmdW5jdGlvbigpe3ZhciBlPW4mJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJm0oZS5wcm9taXNlKT9lLnByb21pc2UoKS5wcm9ncmVzcyhyLm5vdGlmeSkuZG9uZShyLnJlc29sdmUpLmZhaWwoci5yZWplY3QpOnJbdFswXSsiV2l0aCJdKHRoaXMsbj9bZV06YXJndW1lbnRzKX0pfSksaT1udWxsfSkucHJvbWlzZSgpfSx0aGVuOmZ1bmN0aW9uKHQsbixyKXt2YXIgdT0wO2Z1bmN0aW9uIGwoaSxvLGEscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcyxyPWFyZ3VtZW50cyxlPWZ1bmN0aW9uKCl7dmFyIGUsdDtpZighKGk8dSkpe2lmKChlPWEuYXBwbHkobixyKSk9PT1vLnByb21pc2UoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb24iKTt0PWUmJigib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSYmZS50aGVuLG0odCk/cz90LmNhbGwoZSxsKHUsbyxSLHMpLGwodSxvLE0scykpOih1KyssdC5jYWxsKGUsbCh1LG8sUixzKSxsKHUsbyxNLHMpLGwodSxvLFIsby5ub3RpZnlXaXRoKSkpOihhIT09UiYmKG49dm9pZCAwLHI9W2VdKSwoc3x8by5yZXNvbHZlV2l0aCkobixyKSl9fSx0PXM/ZTpmdW5jdGlvbigpe3RyeXtlKCl9Y2F0Y2goZSl7Uy5EZWZlcnJlZC5leGNlcHRpb25Ib29rJiZTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soZSx0LnN0YWNrVHJhY2UpLHU8PWkrMSYmKGEhPT1NJiYobj12b2lkIDAscj1bZV0pLG8ucmVqZWN0V2l0aChuLHIpKX19O2k/dCgpOihTLkRlZmVycmVkLmdldFN0YWNrSG9vayYmKHQuc3RhY2tUcmFjZT1TLkRlZmVycmVkLmdldFN0YWNrSG9vaygpKSxDLnNldFRpbWVvdXQodCkpfX1yZXR1cm4gUy5EZWZlcnJlZChmdW5jdGlvbihlKXtvWzBdWzNdLmFkZChsKDAsZSxtKHIpP3I6UixlLm5vdGlmeVdpdGgpKSxvWzFdWzNdLmFkZChsKDAsZSxtKHQpP3Q6UikpLG9bMl1bM10uYWRkKGwoMCxlLG0obik/bjpNKSl9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU/Uy5leHRlbmQoZSxhKTphfX0scz17fTtyZXR1cm4gUy5lYWNoKG8sZnVuY3Rpb24oZSx0KXt2YXIgbj10WzJdLHI9dFs1XTthW3RbMV1dPW4uYWRkLHImJm4uYWRkKGZ1bmN0aW9uKCl7aT1yfSxvWzMtZV1bMl0uZGlzYWJsZSxvWzMtZV1bM10uZGlzYWJsZSxvWzBdWzJdLmxvY2ssb1swXVszXS5sb2NrKSxuLmFkZCh0WzNdLmZpcmUpLHNbdFswXV09ZnVuY3Rpb24oKXtyZXR1cm4gc1t0WzBdKyJXaXRoIl0odGhpcz09PXM/dm9pZCAwOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxzW3RbMF0rIldpdGgiXT1uLmZpcmVXaXRofSksYS5wcm9taXNlKHMpLGUmJmUuY2FsbChzLHMpLHN9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aCx0PW4scj1BcnJheSh0KSxpPXMuY2FsbChhcmd1bWVudHMpLG89Uy5EZWZlcnJlZCgpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JbdF09dGhpcyxpW3RdPTE8YXJndW1lbnRzLmxlbmd0aD9zLmNhbGwoYXJndW1lbnRzKTplLC0tbnx8by5yZXNvbHZlV2l0aChyLGkpfX07aWYobjw9MSYmKEkoZSxvLmRvbmUoYSh0KSkucmVzb2x2ZSxvLnJlamVjdCwhbiksInBlbmRpbmciPT09by5zdGF0ZSgpfHxtKGlbdF0mJmlbdF0udGhlbikpKXJldHVybiBvLnRoZW4oKTt3aGlsZSh0LS0pSShpW3RdLGEodCksby5yZWplY3QpO3JldHVybiBvLnByb21pc2UoKX19KTt2YXIgVz0vXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2s9ZnVuY3Rpb24oZSx0KXtDLmNvbnNvbGUmJkMuY29uc29sZS53YXJuJiZlJiZXLnRlc3QoZS5uYW1lKSYmQy5jb25zb2xlLndhcm4oImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246ICIrZS5tZXNzYWdlLGUuc3RhY2ssdCl9LFMucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24oZSl7Qy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfTt2YXIgRj1TLkRlZmVycmVkKCk7ZnVuY3Rpb24gQigpe0UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiksQy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixCKSxTLnJlYWR5KCl9Uy5mbi5yZWFkeT1mdW5jdGlvbihlKXtyZXR1cm4gRi50aGVuKGUpWyJjYXRjaCJdKGZ1bmN0aW9uKGUpe1MucmVhZHlFeGNlcHRpb24oZSl9KSx0aGlzfSxTLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxyZWFkeTpmdW5jdGlvbihlKXsoITA9PT1lPy0tUy5yZWFkeVdhaXQ6Uy5pc1JlYWR5KXx8KFMuaXNSZWFkeT0hMCkhPT1lJiYwPC0tUy5yZWFkeVdhaXR8fEYucmVzb2x2ZVdpdGgoRSxbU10pfX0pLFMucmVhZHkudGhlbj1GLnRoZW4sImNvbXBsZXRlIj09PUUucmVhZHlTdGF0ZXx8ImxvYWRpbmciIT09RS5yZWFkeVN0YXRlJiYhRS5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/Qy5zZXRUaW1lb3V0KFMucmVhZHkpOihFLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEIpLEMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsQikpO3ZhciAkPWZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPTAsdT1lLmxlbmd0aCxsPW51bGw9PW47aWYoIm9iamVjdCI9PT13KG4pKWZvcihzIGluIGk9ITAsbikkKGUsdCxzLG5bc10sITAsbyxhKTtlbHNlIGlmKHZvaWQgMCE9PXImJihpPSEwLG0ocil8fChhPSEwKSxsJiYoYT8odC5jYWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNhbGwoUyhlKSxuKX0pKSx0KSlmb3IoO3M8dTtzKyspdChlW3NdLG4sYT9yOnIuY2FsbChlW3NdLHMsdChlW3NdLG4pKSk7cmV0dXJuIGk/ZTpsP3QuY2FsbChlKTp1P3QoZVswXSxuKTpvfSxfPS9eLW1zLS8sej0vLShbYS16XSkvZztmdW5jdGlvbiBVKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBYKGUpe3JldHVybiBlLnJlcGxhY2UoXywibXMtIikucmVwbGFjZSh6LFUpfXZhciBWPWZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZXx8OT09PWUubm9kZVR5cGV8fCErZS5ub2RlVHlwZX07ZnVuY3Rpb24gRygpe3RoaXMuZXhwYW5kbz1TLmV4cGFuZG8rRy51aWQrK31HLnVpZD0xLEcucHJvdG90eXBlPXtjYWNoZTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHR8fCh0PXt9LFYoZSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT10Ok9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHRoaXMuZXhwYW5kbyx7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSkpLHR9LHNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT10aGlzLmNhY2hlKGUpO2lmKCJzdHJpbmciPT10eXBlb2YgdClpW1godCldPW47ZWxzZSBmb3IociBpbiB0KWlbWChyKV09dFtyXTtyZXR1cm4gaX0sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5jYWNoZShlKTplW3RoaXMuZXhwYW5kb10mJmVbdGhpcy5leHBhbmRvXVtYKHQpXX0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dHx8dCYmInN0cmluZyI9PXR5cGVvZiB0JiZ2b2lkIDA9PT1uP3RoaXMuZ2V0KGUsdCk6KHRoaXMuc2V0KGUsdCxuKSx2b2lkIDAhPT1uP246dCl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZVt0aGlzLmV4cGFuZG9dO2lmKHZvaWQgMCE9PXIpe2lmKHZvaWQgMCE9PXQpe249KHQ9QXJyYXkuaXNBcnJheSh0KT90Lm1hcChYKToodD1YKHQpKWluIHI/W3RdOnQubWF0Y2goUCl8fFtdKS5sZW5ndGg7d2hpbGUobi0tKWRlbGV0ZSByW3Rbbl1dfSh2b2lkIDA9PT10fHxTLmlzRW1wdHlPYmplY3QocikpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dm9pZCAwOmRlbGV0ZSBlW3RoaXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHZvaWQgMCE9PXQmJiFTLmlzRW1wdHlPYmplY3QodCl9fTt2YXIgWT1uZXcgRyxRPW5ldyBHLEo9L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxLPS9bQS1aXS9nO2Z1bmN0aW9uIFooZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09biYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShLLCItJCYiKS50b0xvd2VyQ2FzZSgpLCJzdHJpbmciPT10eXBlb2Yobj1lLmdldEF0dHJpYnV0ZShyKSkpe3RyeXtuPSJ0cnVlIj09PShpPW4pfHwiZmFsc2UiIT09aSYmKCJudWxsIj09PWk/bnVsbDppPT09K2krIiI/K2k6Si50ZXN0KGkpP0pTT04ucGFyc2UoaSk6aSl9Y2F0Y2goZSl7fVEuc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufVMuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBRLmhhc0RhdGEoZSl8fFkuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFEuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1EucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gWS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1kucmVtb3ZlKGUsdCl9fSksUy5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24obixlKXt2YXIgdCxyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PW4pe2lmKHRoaXMubGVuZ3RoJiYoaT1RLmdldChvKSwxPT09by5ub2RlVHlwZSYmIVkuZ2V0KG8sImhhc0RhdGFBdHRycyIpKSl7dD1hLmxlbmd0aDt3aGlsZSh0LS0pYVt0XSYmMD09PShyPWFbdF0ubmFtZSkuaW5kZXhPZigiZGF0YS0iKSYmKHI9WChyLnNsaWNlKDUpKSxaKG8scixpW3JdKSk7WS5zZXQobywiaGFzRGF0YUF0dHJzIiwhMCl9cmV0dXJuIGl9cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuP3RoaXMuZWFjaChmdW5jdGlvbigpe1Euc2V0KHRoaXMsbil9KTokKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ7aWYobyYmdm9pZCAwPT09ZSlyZXR1cm4gdm9pZCAwIT09KHQ9US5nZXQobyxuKSk/dDp2b2lkIDAhPT0odD1aKG8sbikpP3Q6dm9pZCAwO3RoaXMuZWFjaChmdW5jdGlvbigpe1Euc2V0KHRoaXMsbixlKX0pfSxudWxsLGUsMTxhcmd1bWVudHMubGVuZ3RoLG51bGwsITApfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtRLnJlbW92ZSh0aGlzLGUpfSl9fSksUy5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZihlKXJldHVybiB0PSh0fHwiZngiKSsicXVldWUiLHI9WS5nZXQoZSx0KSxuJiYoIXJ8fEFycmF5LmlzQXJyYXkobik/cj1ZLmFjY2VzcyhlLHQsUy5tYWtlQXJyYXkobikpOnIucHVzaChuKSkscnx8W119LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0PXR8fCJmeCI7dmFyIG49Uy5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCksbz1TLl9xdWV1ZUhvb2tzKGUsdCk7ImlucHJvZ3Jlc3MiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksaSYmKCJmeCI9PT10JiZuLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLGZ1bmN0aW9uKCl7Uy5kZXF1ZXVlKGUsdCl9LG8pKSwhciYmbyYmby5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCsicXVldWVIb29rcyI7cmV0dXJuIFkuZ2V0KGUsbil8fFkuYWNjZXNzKGUsbix7ZW1wdHk6Uy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7WS5yZW1vdmUoZSxbdCsicXVldWUiLG5dKX0pfSl9fSksUy5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKHQsbil7dmFyIGU9MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJihuPXQsdD0iZngiLGUtLSksYXJndW1lbnRzLmxlbmd0aDxlP1MucXVldWUodGhpc1swXSx0KTp2b2lkIDA9PT1uP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9Uy5xdWV1ZSh0aGlzLHQsbik7Uy5fcXVldWVIb29rcyh0aGlzLHQpLCJmeCI9PT10JiYiaW5wcm9ncmVzcyIhPT1lWzBdJiZTLmRlcXVldWUodGhpcyx0KX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtTLmRlcXVldWUodGhpcyxlKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9Uy5EZWZlcnJlZCgpLG89dGhpcyxhPXRoaXMubGVuZ3RoLHM9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLGU9ZXx8ImZ4Ijt3aGlsZShhLS0pKG49WS5nZXQob1thXSxlKyJxdWV1ZUhvb2tzIikpJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKHMpKTtyZXR1cm4gcygpLGkucHJvbWlzZSh0KX19KTt2YXIgZWU9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsdGU9bmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK2VlKyIpKFthLXolXSopJCIsImkiKSxuZT1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLHJlPUUuZG9jdW1lbnRFbGVtZW50LGllPWZ1bmN0aW9uKGUpe3JldHVybiBTLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKX0sb2U9e2NvbXBvc2VkOiEwfTtyZS5nZXRSb290Tm9kZSYmKGllPWZ1bmN0aW9uKGUpe3JldHVybiBTLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8ZS5nZXRSb290Tm9kZShvZSk9PT1lLm93bmVyRG9jdW1lbnR9KTt2YXIgYWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ibm9uZSI9PT0oZT10fHxlKS5zdHlsZS5kaXNwbGF5fHwiIj09PWUuc3R5bGUuZGlzcGxheSYmaWUoZSkmJiJub25lIj09PVMuY3NzKGUsImRpc3BsYXkiKX07ZnVuY3Rpb24gc2UoZSx0LG4scil7dmFyIGksbyxhPTIwLHM9cj9mdW5jdGlvbigpe3JldHVybiByLmN1cigpfTpmdW5jdGlvbigpe3JldHVybiBTLmNzcyhlLHQsIiIpfSx1PXMoKSxsPW4mJm5bM118fChTLmNzc051bWJlclt0XT8iIjoicHgiKSxjPWUubm9kZVR5cGUmJihTLmNzc051bWJlclt0XXx8InB4IiE9PWwmJit1KSYmdGUuZXhlYyhTLmNzcyhlLHQpKTtpZihjJiZjWzNdIT09bCl7dS89MixsPWx8fGNbM10sYz0rdXx8MTt3aGlsZShhLS0pUy5zdHlsZShlLHQsYytsKSwoMS1vKSooMS0obz1zKCkvdXx8LjUpKTw9MCYmKGE9MCksYy89bztjKj0yLFMuc3R5bGUoZSx0LGMrbCksbj1ufHxbXX1yZXR1cm4gbiYmKGM9K2N8fCt1fHwwLGk9blsxXT9jKyhuWzFdKzEpKm5bMl06K25bMl0sciYmKHIudW5pdD1sLHIuc3RhcnQ9YyxyLmVuZD1pKSksaX12YXIgdWU9e307ZnVuY3Rpb24gbGUoZSx0KXtmb3IodmFyIG4scixpLG8sYSxzLHUsbD1bXSxjPTAsZj1lLmxlbmd0aDtjPGY7YysrKShyPWVbY10pLnN0eWxlJiYobj1yLnN0eWxlLmRpc3BsYXksdD8oIm5vbmUiPT09biYmKGxbY109WS5nZXQociwiZGlzcGxheSIpfHxudWxsLGxbY118fChyLnN0eWxlLmRpc3BsYXk9IiIpKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmYWUocikmJihsW2NdPSh1PWE9bz12b2lkIDAsYT0oaT1yKS5vd25lckRvY3VtZW50LHM9aS5ub2RlTmFtZSwodT11ZVtzXSl8fChvPWEuYm9keS5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQocykpLHU9Uy5jc3MobywiZGlzcGxheSIpLG8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSwibm9uZSI9PT11JiYodT0iYmxvY2siKSx1ZVtzXT11KSkpKToibm9uZSIhPT1uJiYobFtjXT0ibm9uZSIsWS5zZXQociwiZGlzcGxheSIsbikpKTtmb3IoYz0wO2M8ZjtjKyspbnVsbCE9bFtjXSYmKGVbY10uc3R5bGUuZGlzcGxheT1sW2NdKTtyZXR1cm4gZX1TLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBsZSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBsZSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXthZSh0aGlzKT9TKHRoaXMpLnNob3coKTpTKHRoaXMpLmhpZGUoKX0pfX0pO3ZhciBjZSxmZSxwZT0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSxkZT0vPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKikvaSxoZT0vXiR8Xm1vZHVsZSR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2k7Y2U9RS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuYXBwZW5kQ2hpbGQoRS5jcmVhdGVFbGVtZW50KCJkaXYiKSksKGZlPUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSxmZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIiksZmUuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLGNlLmFwcGVuZENoaWxkKGZlKSx5LmNoZWNrQ2xvbmU9Y2UuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGNlLmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIseS5ub0Nsb25lQ2hlY2tlZD0hIWNlLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZSxjZS5pbm5lckhUTUw9IjxvcHRpb24+PC9vcHRpb24+Iix5Lm9wdGlvbj0hIWNlLmxhc3RDaGlsZDt2YXIgZ2U9e3RoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtmdW5jdGlvbiB2ZShlLHQpe3ZhciBuO3JldHVybiBuPSJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fCIqIik6InVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W10sdm9pZCAwPT09dHx8dCYmQShlLHQpP1MubWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24geWUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspWS5zZXQoZVtuXSwiZ2xvYmFsRXZhbCIsIXR8fFkuZ2V0KHRbbl0sImdsb2JhbEV2YWwiKSl9Z2UudGJvZHk9Z2UudGZvb3Q9Z2UuY29sZ3JvdXA9Z2UuY2FwdGlvbj1nZS50aGVhZCxnZS50aD1nZS50ZCx5Lm9wdGlvbnx8KGdlLm9wdGdyb3VwPWdlLm9wdGlvbj1bMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdKTt2YXIgbWU9Lzx8JiM/XHcrOy87ZnVuY3Rpb24geGUoZSx0LG4scixpKXtmb3IodmFyIG8sYSxzLHUsbCxjLGY9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscD1bXSxkPTAsaD1lLmxlbmd0aDtkPGg7ZCsrKWlmKChvPWVbZF0pfHwwPT09bylpZigib2JqZWN0Ij09PXcobykpUy5tZXJnZShwLG8ubm9kZVR5cGU/W29dOm8pO2Vsc2UgaWYobWUudGVzdChvKSl7YT1hfHxmLmFwcGVuZENoaWxkKHQuY3JlYXRlRWxlbWVudCgiZGl2IikpLHM9KGRlLmV4ZWMobyl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksdT1nZVtzXXx8Z2UuX2RlZmF1bHQsYS5pbm5lckhUTUw9dVsxXStTLmh0bWxQcmVmaWx0ZXIobykrdVsyXSxjPXVbMF07d2hpbGUoYy0tKWE9YS5sYXN0Q2hpbGQ7Uy5tZXJnZShwLGEuY2hpbGROb2RlcyksKGE9Zi5maXJzdENoaWxkKS50ZXh0Q29udGVudD0iIn1lbHNlIHAucHVzaCh0LmNyZWF0ZVRleHROb2RlKG8pKTtmLnRleHRDb250ZW50PSIiLGQ9MDt3aGlsZShvPXBbZCsrXSlpZihyJiYtMTxTLmluQXJyYXkobyxyKSlpJiZpLnB1c2gobyk7ZWxzZSBpZihsPWllKG8pLGE9dmUoZi5hcHBlbmRDaGlsZChvKSwic2NyaXB0IiksbCYmeWUoYSksbil7Yz0wO3doaWxlKG89YVtjKytdKWhlLnRlc3Qoby50eXBlfHwiIikmJm4ucHVzaChvKX1yZXR1cm4gZn12YXIgYmU9L14oW14uXSopKD86XC4oLispfCkvO2Z1bmN0aW9uIHdlKCl7cmV0dXJuITB9ZnVuY3Rpb24gVGUoKXtyZXR1cm4hMX1mdW5jdGlvbiBDZShlLHQpe3JldHVybiBlPT09ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIEUuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fSgpPT0oImZvY3VzIj09PXQpfWZ1bmN0aW9uIEVlKGUsdCxuLHIsaSxvKXt2YXIgYSxzO2lmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKHMgaW4ic3RyaW5nIiE9dHlwZW9mIG4mJihyPXJ8fG4sbj12b2lkIDApLHQpRWUoZSxzLG4scix0W3NdLG8pO3JldHVybiBlfWlmKG51bGw9PXImJm51bGw9PWk/KGk9bixyPW49dm9pZCAwKTpudWxsPT1pJiYoInN0cmluZyI9PXR5cGVvZiBuPyhpPXIscj12b2lkIDApOihpPXIscj1uLG49dm9pZCAwKSksITE9PT1pKWk9VGU7ZWxzZSBpZighaSlyZXR1cm4gZTtyZXR1cm4gMT09PW8mJihhPWksKGk9ZnVuY3Rpb24oZSl7cmV0dXJuIFMoKS5vZmYoZSksYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KS5ndWlkPWEuZ3VpZHx8KGEuZ3VpZD1TLmd1aWQrKykpLGUuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQuYWRkKHRoaXMsdCxpLHIsbil9KX1mdW5jdGlvbiBTZShlLGksbyl7bz8oWS5zZXQoZSxpLCExKSxTLmV2ZW50LmFkZChlLGkse25hbWVzcGFjZTohMSxoYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1ZLmdldCh0aGlzLGkpO2lmKDEmZS5pc1RyaWdnZXImJnRoaXNbaV0pe2lmKHIubGVuZ3RoKShTLmV2ZW50LnNwZWNpYWxbaV18fHt9KS5kZWxlZ2F0ZVR5cGUmJmUuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihyPXMuY2FsbChhcmd1bWVudHMpLFkuc2V0KHRoaXMsaSxyKSx0PW8odGhpcyxpKSx0aGlzW2ldKCksciE9PShuPVkuZ2V0KHRoaXMsaSkpfHx0P1kuc2V0KHRoaXMsaSwhMSk6bj17fSxyIT09bilyZXR1cm4gZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCksbiYmbi52YWx1ZX1lbHNlIHIubGVuZ3RoJiYoWS5zZXQodGhpcyxpLHt2YWx1ZTpTLmV2ZW50LnRyaWdnZXIoUy5leHRlbmQoclswXSxTLkV2ZW50LnByb3RvdHlwZSksci5zbGljZSgxKSx0aGlzKX0pLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfX0pKTp2b2lkIDA9PT1ZLmdldChlLGkpJiZTLmV2ZW50LmFkZChlLGksd2UpfVMuZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHY9WS5nZXQodCk7aWYoVih0KSl7bi5oYW5kbGVyJiYobj0obz1uKS5oYW5kbGVyLGk9by5zZWxlY3RvciksaSYmUy5maW5kLm1hdGNoZXNTZWxlY3RvcihyZSxpKSxuLmd1aWR8fChuLmd1aWQ9Uy5ndWlkKyspLCh1PXYuZXZlbnRzKXx8KHU9di5ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSksKGE9di5oYW5kbGUpfHwoYT12LmhhbmRsZT1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFMmJlMuZXZlbnQudHJpZ2dlcmVkIT09ZS50eXBlP1MuZXZlbnQuZGlzcGF0Y2guYXBwbHkodCxhcmd1bWVudHMpOnZvaWQgMH0pLGw9KGU9KGV8fCIiKS5tYXRjaChQKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlkPWc9KHM9YmUuZXhlYyhlW2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkJiYoZj1TLmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KGk/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGQsZj1TLmV2ZW50LnNwZWNpYWxbZF18fHt9LGM9Uy5leHRlbmQoe3R5cGU6ZCxvcmlnVHlwZTpnLGRhdGE6cixoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6aSxuZWVkc0NvbnRleHQ6aSYmUy5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGkpLG5hbWVzcGFjZTpoLmpvaW4oIi4iKX0sbyksKHA9dVtkXSl8fCgocD11W2RdPVtdKS5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmITEhPT1mLnNldHVwLmNhbGwodCxyLGgsYSl8fHQuYWRkRXZlbnRMaXN0ZW5lciYmdC5hZGRFdmVudExpc3RlbmVyKGQsYSkpLGYuYWRkJiYoZi5hZGQuY2FsbCh0LGMpLGMuaGFuZGxlci5ndWlkfHwoYy5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksaT9wLnNwbGljZShwLmRlbGVnYXRlQ291bnQrKywwLGMpOnAucHVzaChjKSxTLmV2ZW50Lmdsb2JhbFtkXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHY9WS5oYXNEYXRhKGUpJiZZLmdldChlKTtpZih2JiYodT12LmV2ZW50cykpe2w9KHQ9KHR8fCIiKS5tYXRjaChQKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlpZihkPWc9KHM9YmUuZXhlYyh0W2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkKXtmPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30scD11W2Q9KHI/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGRdfHxbXSxzPXNbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksYT1vPXAubGVuZ3RoO3doaWxlKG8tLSljPXBbb10sIWkmJmchPT1jLm9yaWdUeXBlfHxuJiZuLmd1aWQhPT1jLmd1aWR8fHMmJiFzLnRlc3QoYy5uYW1lc3BhY2UpfHxyJiZyIT09Yy5zZWxlY3RvciYmKCIqKiIhPT1yfHwhYy5zZWxlY3Rvcil8fChwLnNwbGljZShvLDEpLGMuc2VsZWN0b3ImJnAuZGVsZWdhdGVDb3VudC0tLGYucmVtb3ZlJiZmLnJlbW92ZS5jYWxsKGUsYykpO2EmJiFwLmxlbmd0aCYmKGYudGVhcmRvd24mJiExIT09Zi50ZWFyZG93bi5jYWxsKGUsaCx2LmhhbmRsZSl8fFMucmVtb3ZlRXZlbnQoZSxkLHYuaGFuZGxlKSxkZWxldGUgdVtkXSl9ZWxzZSBmb3IoZCBpbiB1KVMuZXZlbnQucmVtb3ZlKGUsZCt0W2xdLG4sciwhMCk7Uy5pc0VtcHR5T2JqZWN0KHUpJiZZLnJlbW92ZShlLCJoYW5kbGUgZXZlbnRzIil9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksdT1TLmV2ZW50LmZpeChlKSxsPShZLmdldCh0aGlzLCJldmVudHMiKXx8T2JqZWN0LmNyZWF0ZShudWxsKSlbdS50eXBlXXx8W10sYz1TLmV2ZW50LnNwZWNpYWxbdS50eXBlXXx8e307Zm9yKHNbMF09dSx0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylzW3RdPWFyZ3VtZW50c1t0XTtpZih1LmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWMucHJlRGlzcGF0Y2h8fCExIT09Yy5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsdSkpe2E9Uy5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsdSxsKSx0PTA7d2hpbGUoKGk9YVt0KytdKSYmIXUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7dS5jdXJyZW50VGFyZ2V0PWkuZWxlbSxuPTA7d2hpbGUoKG89aS5oYW5kbGVyc1tuKytdKSYmIXUuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSl1LnJuYW1lc3BhY2UmJiExIT09by5uYW1lc3BhY2UmJiF1LnJuYW1lc3BhY2UudGVzdChvLm5hbWVzcGFjZSl8fCh1LmhhbmRsZU9iaj1vLHUuZGF0YT1vLmRhdGEsdm9pZCAwIT09KHI9KChTLmV2ZW50LnNwZWNpYWxbby5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fG8uaGFuZGxlcikuYXBwbHkoaS5lbGVtLHMpKSYmITE9PT0odS5yZXN1bHQ9cikmJih1LnByZXZlbnREZWZhdWx0KCksdS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBjLnBvc3REaXNwYXRjaCYmYy5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLHUpLHUucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHM9W10sdT10LmRlbGVnYXRlQ291bnQsbD1lLnRhcmdldDtpZih1JiZsLm5vZGVUeXBlJiYhKCJjbGljayI9PT1lLnR5cGUmJjE8PWUuYnV0dG9uKSlmb3IoO2whPT10aGlzO2w9bC5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1sLm5vZGVUeXBlJiYoImNsaWNrIiE9PWUudHlwZXx8ITAhPT1sLmRpc2FibGVkKSl7Zm9yKG89W10sYT17fSxuPTA7bjx1O24rKyl2b2lkIDA9PT1hW2k9KHI9dFtuXSkuc2VsZWN0b3IrIiAiXSYmKGFbaV09ci5uZWVkc0NvbnRleHQ/LTE8UyhpLHRoaXMpLmluZGV4KGwpOlMuZmluZChpLHRoaXMsbnVsbCxbbF0pLmxlbmd0aCksYVtpXSYmby5wdXNoKHIpO28ubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczpvfSl9cmV0dXJuIGw9dGhpcyx1PHQubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczp0LnNsaWNlKHUpfSksc30sYWRkUHJvcDpmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLkV2ZW50LnByb3RvdHlwZSx0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6bShlKT9mdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gZSh0aGlzLm9yaWdpbmFsRXZlbnQpfTpmdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50W3RdfSxzZXQ6ZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pfX0pfSxmaXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbUy5leHBhbmRvXT9lOm5ldyBTLkV2ZW50KGUpfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sY2xpY2s6e3NldHVwOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXN8fGU7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZTZSh0LCJjbGljayIsd2UpLCExfSx0cmlnZ2VyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXN8fGU7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZTZSh0LCJjbGljayIpLCEwfSxfZGVmYXVsdDpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtyZXR1cm4gcGUudGVzdCh0LnR5cGUpJiZ0LmNsaWNrJiZBKHQsImlucHV0IikmJlkuZ2V0KHQsImNsaWNrIil8fEEodCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5yZXN1bHQmJmUub3JpZ2luYWxFdmVudCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX19LFMucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9LFMuRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBTLkV2ZW50KSlyZXR1cm4gbmV3IFMuRXZlbnQoZSx0KTtlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1lLmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09ZS5yZXR1cm5WYWx1ZT93ZTpUZSx0aGlzLnRhcmdldD1lLnRhcmdldCYmMz09PWUudGFyZ2V0Lm5vZGVUeXBlP2UudGFyZ2V0LnBhcmVudE5vZGU6ZS50YXJnZXQsdGhpcy5jdXJyZW50VGFyZ2V0PWUuY3VycmVudFRhcmdldCx0aGlzLnJlbGF0ZWRUYXJnZXQ9ZS5yZWxhdGVkVGFyZ2V0KTp0aGlzLnR5cGU9ZSx0JiZTLmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxEYXRlLm5vdygpLHRoaXNbUy5leHBhbmRvXT0hMH0sUy5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlMuRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOlRlLGlzUHJvcGFnYXRpb25TdG9wcGVkOlRlLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOlRlLGlzU2ltdWxhdGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPXdlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXdlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD13ZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sUy5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLCJjaGFyIjohMCxjb2RlOiEwLGNoYXJDb2RlOiEwLGtleTohMCxrZXlDb2RlOiEwLGJ1dHRvbjohMCxidXR0b25zOiEwLGNsaWVudFg6ITAsY2xpZW50WTohMCxvZmZzZXRYOiEwLG9mZnNldFk6ITAscG9pbnRlcklkOiEwLHBvaW50ZXJUeXBlOiEwLHNjcmVlblg6ITAsc2NyZWVuWTohMCx0YXJnZXRUb3VjaGVzOiEwLHRvRWxlbWVudDohMCx0b3VjaGVzOiEwLHdoaWNoOiEwfSxTLmV2ZW50LmFkZFByb3ApLFMuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXtTLmV2ZW50LnNwZWNpYWxbZV09e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIFNlKHRoaXMsZSxDZSksITF9LHRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gU2UodGhpcyxlKSwhMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZGVsZWdhdGVUeXBlOnR9fSksUy5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihlLGkpe1MuZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOmksYmluZFR5cGU6aSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLnJlbGF0ZWRUYXJnZXQscj1lLmhhbmRsZU9iajtyZXR1cm4gbiYmKG49PT10aGlzfHxTLmNvbnRhaW5zKHRoaXMsbikpfHwoZS50eXBlPXIub3JpZ1R5cGUsdD1yLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT1pKSx0fX19KSxTLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIEVlKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gRWUodGhpcyxlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosUyhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZSsiLiIrci5uYW1lc3BhY2U6ci5vcmlnVHlwZSxyLnNlbGVjdG9yLHIuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihpIGluIGUpdGhpcy5vZmYoaSx0LGVbaV0pO3JldHVybiB0aGlzfXJldHVybiExIT09dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49VGUpLHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSk7dmFyIGtlPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLEFlPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLE5lPS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZztmdW5jdGlvbiBqZShlLHQpe3JldHVybiBBKGUsInRhYmxlIikmJkEoMTEhPT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLCJ0ciIpJiZTKGUpLmNoaWxkcmVuKCJ0Ym9keSIpWzBdfHxlfWZ1bmN0aW9uIERlKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gcWUoZSl7cmV0dXJuInRydWUvIj09PShlLnR5cGV8fCIiKS5zbGljZSgwLDUpP2UudHlwZT1lLnR5cGUuc2xpY2UoNSk6ZS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxlfWZ1bmN0aW9uIExlKGUsdCl7dmFyIG4scixpLG8sYSxzO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihZLmhhc0RhdGEoZSkmJihzPVkuZ2V0KGUpLmV2ZW50cykpZm9yKGkgaW4gWS5yZW1vdmUodCwiaGFuZGxlIGV2ZW50cyIpLHMpZm9yKG49MCxyPXNbaV0ubGVuZ3RoO248cjtuKyspUy5ldmVudC5hZGQodCxpLHNbaV1bbl0pO1EuaGFzRGF0YShlKSYmKG89US5hY2Nlc3MoZSksYT1TLmV4dGVuZCh7fSxvKSxRLnNldCh0LGEpKX19ZnVuY3Rpb24gSGUobixyLGksbyl7cj1nKHIpO3ZhciBlLHQsYSxzLHUsbCxjPTAsZj1uLmxlbmd0aCxwPWYtMSxkPXJbMF0saD1tKGQpO2lmKGh8fDE8ZiYmInN0cmluZyI9PXR5cGVvZiBkJiYheS5jaGVja0Nsb25lJiZBZS50ZXN0KGQpKXJldHVybiBuLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bi5lcShlKTtoJiYoclswXT1kLmNhbGwodGhpcyxlLHQuaHRtbCgpKSksSGUodCxyLGksbyl9KTtpZihmJiYodD0oZT14ZShyLG5bMF0ub3duZXJEb2N1bWVudCwhMSxuLG8pKS5maXJzdENoaWxkLDE9PT1lLmNoaWxkTm9kZXMubGVuZ3RoJiYoZT10KSx0fHxvKSl7Zm9yKHM9KGE9Uy5tYXAodmUoZSwic2NyaXB0IiksRGUpKS5sZW5ndGg7YzxmO2MrKyl1PWUsYyE9PXAmJih1PVMuY2xvbmUodSwhMCwhMCkscyYmUy5tZXJnZShhLHZlKHUsInNjcmlwdCIpKSksaS5jYWxsKG5bY10sdSxjKTtpZihzKWZvcihsPWFbYS5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxTLm1hcChhLHFlKSxjPTA7YzxzO2MrKyl1PWFbY10saGUudGVzdCh1LnR5cGV8fCIiKSYmIVkuYWNjZXNzKHUsImdsb2JhbEV2YWwiKSYmUy5jb250YWlucyhsLHUpJiYodS5zcmMmJiJtb2R1bGUiIT09KHUudHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk/Uy5fZXZhbFVybCYmIXUubm9Nb2R1bGUmJlMuX2V2YWxVcmwodS5zcmMse25vbmNlOnUubm9uY2V8fHUuZ2V0QXR0cmlidXRlKCJub25jZSIpfSxsKTpiKHUudGV4dENvbnRlbnQucmVwbGFjZShOZSwiIiksdSxsKSl9cmV0dXJuIG59ZnVuY3Rpb24gT2UoZSx0LG4pe2Zvcih2YXIgcixpPXQ/Uy5maWx0ZXIodCxlKTplLG89MDtudWxsIT0ocj1pW29dKTtvKyspbnx8MSE9PXIubm9kZVR5cGV8fFMuY2xlYW5EYXRhKHZlKHIpKSxyLnBhcmVudE5vZGUmJihuJiZpZShyKSYmeWUodmUociwic2NyaXB0IikpLHIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKSk7cmV0dXJuIGV9Uy5leHRlbmQoe2h0bWxQcmVmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGNsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjPWUuY2xvbmVOb2RlKCEwKSxmPWllKGUpO2lmKCEoeS5ub0Nsb25lQ2hlY2tlZHx8MSE9PWUubm9kZVR5cGUmJjExIT09ZS5ub2RlVHlwZXx8Uy5pc1hNTERvYyhlKSkpZm9yKGE9dmUoYykscj0wLGk9KG89dmUoZSkpLmxlbmd0aDtyPGk7cisrKXM9b1tyXSx1PWFbcl0sdm9pZCAwLCJpbnB1dCI9PT0obD11Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiZwZS50ZXN0KHMudHlwZSk/dS5jaGVja2VkPXMuY2hlY2tlZDoiaW5wdXQiIT09bCYmInRleHRhcmVhIiE9PWx8fCh1LmRlZmF1bHRWYWx1ZT1zLmRlZmF1bHRWYWx1ZSk7aWYodClpZihuKWZvcihvPW98fHZlKGUpLGE9YXx8dmUoYykscj0wLGk9by5sZW5ndGg7cjxpO3IrKylMZShvW3JdLGFbcl0pO2Vsc2UgTGUoZSxjKTtyZXR1cm4gMDwoYT12ZShjLCJzY3JpcHQiKSkubGVuZ3RoJiZ5ZShhLCFmJiZ2ZShlLCJzY3JpcHQiKSksY30sY2xlYW5EYXRhOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsaT1TLmV2ZW50LnNwZWNpYWwsbz0wO3ZvaWQgMCE9PShuPWVbb10pO28rKylpZihWKG4pKXtpZih0PW5bWS5leHBhbmRvXSl7aWYodC5ldmVudHMpZm9yKHIgaW4gdC5ldmVudHMpaVtyXT9TLmV2ZW50LnJlbW92ZShuLHIpOlMucmVtb3ZlRXZlbnQobixyLHQuaGFuZGxlKTtuW1kuZXhwYW5kb109dm9pZCAwfW5bUS5leHBhbmRvXSYmKG5bUS5leHBhbmRvXT12b2lkIDApfX19KSxTLmZuLmV4dGVuZCh7ZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiBPZSh0aGlzLGUsITApfSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIE9lKHRoaXMsZSl9LHRleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuICQodGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9TLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8KHRoaXMudGV4dENvbnRlbnQ9ZSl9KX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gSGUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fGplKHRoaXMsZSkuYXBwZW5kQ2hpbGQoZSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiBIZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9amUodGhpcyxlKTt0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiBIZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiBIZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKX0pfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PTA7bnVsbCE9KGU9dGhpc1t0XSk7dCsrKTE9PT1lLm5vZGVUeXBlJiYoUy5jbGVhbkRhdGEodmUoZSwhMSkpLGUudGV4dENvbnRlbnQ9IiIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWUmJmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBTLmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXXx8e30sbj0wLHI9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09ZSYmMT09PXQubm9kZVR5cGUpcmV0dXJuIHQuaW5uZXJIVE1MO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmIWtlLnRlc3QoZSkmJiFnZVsoZGUuZXhlYyhlKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2U9Uy5odG1sUHJlZmlsdGVyKGUpO3RyeXtmb3IoO248cjtuKyspMT09PSh0PXRoaXNbbl18fHt9KS5ub2RlVHlwZSYmKFMuY2xlYW5EYXRhKHZlKHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goZSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIG49W107cmV0dXJuIEhlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtTLmluQXJyYXkodGhpcyxuKTwwJiYoUy5jbGVhbkRhdGEodmUodGhpcykpLHQmJnQucmVwbGFjZUNoaWxkKGUsdGhpcykpfSxuKX19KSxTLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLGEpe1MuZm5bZV09ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49W10scj1TKGUpLGk9ci5sZW5ndGgtMSxvPTA7bzw9aTtvKyspdD1vPT09aT90aGlzOnRoaXMuY2xvbmUoITApLFMocltvXSlbYV0odCksdS5hcHBseShuLHQuZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgUGU9bmV3IFJlZ0V4cCgiXigiK2VlKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksUmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O3JldHVybiB0JiZ0Lm9wZW5lcnx8KHQ9QyksdC5nZXRDb21wdXRlZFN0eWxlKGUpfSxNZT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXt9O2ZvcihpIGluIHQpb1tpXT1lLnN0eWxlW2ldLGUuc3R5bGVbaV09dFtpXTtmb3IoaSBpbiByPW4uY2FsbChlKSx0KWUuc3R5bGVbaV09b1tpXTtyZXR1cm4gcn0sSWU9bmV3IFJlZ0V4cChuZS5qb2luKCJ8IiksImkiKTtmdW5jdGlvbiBXZShlLHQsbil7dmFyIHIsaSxvLGEscz1lLnN0eWxlO3JldHVybihuPW58fFJlKGUpKSYmKCIiIT09KGE9bi5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxuW3RdKXx8aWUoZSl8fChhPVMuc3R5bGUoZSx0KSksIXkucGl4ZWxCb3hTdHlsZXMoKSYmUGUudGVzdChhKSYmSWUudGVzdCh0KSYmKHI9cy53aWR0aCxpPXMubWluV2lkdGgsbz1zLm1heFdpZHRoLHMubWluV2lkdGg9cy5tYXhXaWR0aD1zLndpZHRoPWEsYT1uLndpZHRoLHMud2lkdGg9cixzLm1pbldpZHRoPWkscy5tYXhXaWR0aD1vKSksdm9pZCAwIT09YT9hKyIiOmF9ZnVuY3Rpb24gRmUoZSx0KXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7aWYoIWUoKSlyZXR1cm4odGhpcy5nZXQ9dCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2RlbGV0ZSB0aGlzLmdldH19fSFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtpZihsKXt1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjAiLGwuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NjAlO3RvcDoxJSIscmUuYXBwZW5kQ2hpbGQodSkuYXBwZW5kQ2hpbGQobCk7dmFyIGU9Qy5nZXRDb21wdXRlZFN0eWxlKGwpO249IjElIiE9PWUudG9wLHM9MTI9PT10KGUubWFyZ2luTGVmdCksbC5zdHlsZS5yaWdodD0iNjAlIixvPTM2PT09dChlLnJpZ2h0KSxyPTM2PT09dChlLndpZHRoKSxsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaT0xMj09PXQobC5vZmZzZXRXaWR0aC8zKSxyZS5yZW1vdmVDaGlsZCh1KSxsPW51bGx9fWZ1bmN0aW9uIHQoZSl7cmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChlKSl9dmFyIG4scixpLG8sYSxzLHU9RS5jcmVhdGVFbGVtZW50KCJkaXYiKSxsPUUuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5zdHlsZSYmKGwuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixsLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIseS5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWwuc3R5bGUuYmFja2dyb3VuZENsaXAsUy5leHRlbmQoeSx7Ym94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLHJ9LHBpeGVsQm94U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxvfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxufSxyZWxpYWJsZU1hcmdpbkxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLHN9LHNjcm9sbGJveFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLGl9LHJlbGlhYmxlVHJEaW1lbnNpb25zOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7cmV0dXJuIG51bGw9PWEmJihlPUUuY3JlYXRlRWxlbWVudCgidGFibGUiKSx0PUUuY3JlYXRlRWxlbWVudCgidHIiKSxuPUUuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZSIsdC5zdHlsZS5jc3NUZXh0PSJib3JkZXI6MXB4IHNvbGlkIix0LnN0eWxlLmhlaWdodD0iMXB4IixuLnN0eWxlLmhlaWdodD0iOXB4IixuLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixyZS5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZCh0KS5hcHBlbmRDaGlsZChuKSxyPUMuZ2V0Q29tcHV0ZWRTdHlsZSh0KSxhPXBhcnNlSW50KHIuaGVpZ2h0LDEwKStwYXJzZUludChyLmJvcmRlclRvcFdpZHRoLDEwKStwYXJzZUludChyLmJvcmRlckJvdHRvbVdpZHRoLDEwKT09PXQub2Zmc2V0SGVpZ2h0LHJlLnJlbW92ZUNoaWxkKGUpKSxhfX0pKX0oKTt2YXIgQmU9WyJXZWJraXQiLCJNb3oiLCJtcyJdLCRlPUUuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsX2U9e307ZnVuY3Rpb24gemUoZSl7dmFyIHQ9Uy5jc3NQcm9wc1tlXXx8X2VbZV07cmV0dXJuIHR8fChlIGluICRlP2U6X2VbZV09ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj1CZS5sZW5ndGg7d2hpbGUobi0tKWlmKChlPUJlW25dK3QpaW4gJGUpcmV0dXJuIGV9KGUpfHxlKX12YXIgVWU9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFhlPS9eLS0vLFZlPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxHZT17bGV0dGVyU3BhY2luZzoiMCIsZm9udFdlaWdodDoiNDAwIn07ZnVuY3Rpb24gWWUoZSx0LG4pe3ZhciByPXRlLmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgoMCxyWzJdLShufHwwKSkrKHJbM118fCJweCIpOnR9ZnVuY3Rpb24gUWUoZSx0LG4scixpLG8pe3ZhciBhPSJ3aWR0aCI9PT10PzE6MCxzPTAsdT0wO2lmKG49PT0ocj8iYm9yZGVyIjoiY29udGVudCIpKXJldHVybiAwO2Zvcig7YTw0O2ErPTIpIm1hcmdpbiI9PT1uJiYodSs9Uy5jc3MoZSxuK25lW2FdLCEwLGkpKSxyPygiY29udGVudCI9PT1uJiYodS09Uy5jc3MoZSwicGFkZGluZyIrbmVbYV0sITAsaSkpLCJtYXJnaW4iIT09biYmKHUtPVMuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKSkpOih1Kz1TLmNzcyhlLCJwYWRkaW5nIituZVthXSwhMCxpKSwicGFkZGluZyIhPT1uP3UrPVMuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKTpzKz1TLmNzcyhlLCJib3JkZXIiK25lW2FdKyJXaWR0aCIsITAsaSkpO3JldHVybiFyJiYwPD1vJiYodSs9TWF0aC5tYXgoMCxNYXRoLmNlaWwoZVsib2Zmc2V0Iit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tby11LXMtLjUpKXx8MCksdX1mdW5jdGlvbiBKZShlLHQsbil7dmFyIHI9UmUoZSksaT0oIXkuYm94U2l6aW5nUmVsaWFibGUoKXx8bikmJiJib3JkZXItYm94Ij09PVMuY3NzKGUsImJveFNpemluZyIsITEsciksbz1pLGE9V2UoZSx0LHIpLHM9Im9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7aWYoUGUudGVzdChhKSl7aWYoIW4pcmV0dXJuIGE7YT0iYXV0byJ9cmV0dXJuKCF5LmJveFNpemluZ1JlbGlhYmxlKCkmJml8fCF5LnJlbGlhYmxlVHJEaW1lbnNpb25zKCkmJkEoZSwidHIiKXx8ImF1dG8iPT09YXx8IXBhcnNlRmxvYXQoYSkmJiJpbmxpbmUiPT09Uy5jc3MoZSwiZGlzcGxheSIsITEscikpJiZlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiYoaT0iYm9yZGVyLWJveCI9PT1TLmNzcyhlLCJib3hTaXppbmciLCExLHIpLChvPXMgaW4gZSkmJihhPWVbc10pKSwoYT1wYXJzZUZsb2F0KGEpfHwwKStRZShlLHQsbnx8KGk/ImJvcmRlciI6ImNvbnRlbnQiKSxvLHIsYSkrInB4In1mdW5jdGlvbiBLZShlLHQsbixyLGkpe3JldHVybiBuZXcgS2UucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX1TLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPVdlKGUsIm9wYWNpdHkiKTtyZXR1cm4iIj09PW4/IjEiOm59fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGdyaWRBcmVhOiEwLGdyaWRDb2x1bW46ITAsZ3JpZENvbHVtbkVuZDohMCxncmlkQ29sdW1uU3RhcnQ6ITAsZ3JpZFJvdzohMCxncmlkUm93RW5kOiEwLGdyaWRSb3dTdGFydDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnt9LHN0eWxlOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUmJjMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmZS5zdHlsZSl7dmFyIGksbyxhLHM9WCh0KSx1PVhlLnRlc3QodCksbD1lLnN0eWxlO2lmKHV8fCh0PXplKHMpKSxhPVMuY3NzSG9va3NbdF18fFMuY3NzSG9va3Nbc10sdm9pZCAwPT09bilyZXR1cm4gYSYmImdldCJpbiBhJiZ2b2lkIDAhPT0oaT1hLmdldChlLCExLHIpKT9pOmxbdF07InN0cmluZyI9PT0obz10eXBlb2YgbikmJihpPXRlLmV4ZWMobikpJiZpWzFdJiYobj1zZShlLHQsaSksbz0ibnVtYmVyIiksbnVsbCE9biYmbj09biYmKCJudW1iZXIiIT09b3x8dXx8KG4rPWkmJmlbM118fChTLmNzc051bWJlcltzXT8iIjoicHgiKSkseS5jbGVhckNsb25lU3R5bGV8fCIiIT09bnx8MCE9PXQuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwobFt0XT0iaW5oZXJpdCIpLGEmJiJzZXQiaW4gYSYmdm9pZCAwPT09KG49YS5zZXQoZSxuLHIpKXx8KHU/bC5zZXRQcm9wZXJ0eSh0LG4pOmxbdF09bikpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzPVgodCk7cmV0dXJuIFhlLnRlc3QodCl8fCh0PXplKHMpKSwoYT1TLmNzc0hvb2tzW3RdfHxTLmNzc0hvb2tzW3NdKSYmImdldCJpbiBhJiYoaT1hLmdldChlLCEwLG4pKSx2b2lkIDA9PT1pJiYoaT1XZShlLHQscikpLCJub3JtYWwiPT09aSYmdCBpbiBHZSYmKGk9R2VbdF0pLCIiPT09bnx8bj8obz1wYXJzZUZsb2F0KGkpLCEwPT09bnx8aXNGaW5pdGUobyk/b3x8MDppKTppfX0pLFMuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oZSx1KXtTLmNzc0hvb2tzW3VdPXtnZXQ6ZnVuY3Rpb24oZSx0LG4pe2lmKHQpcmV0dXJuIVVlLnRlc3QoUy5jc3MoZSwiZGlzcGxheSIpKXx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCYmZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD9KZShlLHUsbik6TWUoZSxWZSxmdW5jdGlvbigpe3JldHVybiBKZShlLHUsbil9KX0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPVJlKGUpLG89IXkuc2Nyb2xsYm94U2l6ZSgpJiYiYWJzb2x1dGUiPT09aS5wb3NpdGlvbixhPShvfHxuKSYmImJvcmRlci1ib3giPT09Uy5jc3MoZSwiYm94U2l6aW5nIiwhMSxpKSxzPW4/UWUoZSx1LG4sYSxpKTowO3JldHVybiBhJiZvJiYocy09TWF0aC5jZWlsKGVbIm9mZnNldCIrdVswXS50b1VwcGVyQ2FzZSgpK3Uuc2xpY2UoMSldLXBhcnNlRmxvYXQoaVt1XSktUWUoZSx1LCJib3JkZXIiLCExLGkpLS41KSkscyYmKHI9dGUuZXhlYyh0KSkmJiJweCIhPT0oclszXXx8InB4IikmJihlLnN0eWxlW3VdPXQsdD1TLmNzcyhlLHUpKSxZZSgwLHQscyl9fX0pLFMuY3NzSG9va3MubWFyZ2luTGVmdD1GZSh5LnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuKHBhcnNlRmxvYXQoV2UoZSwibWFyZ2luTGVmdCIpKXx8ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LU1lKGUse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCJ9KSxTLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihpLG8pe1MuY3NzSG9va3NbaStvXT17ZXhwYW5kOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49e30scj0ic3RyaW5nIj09dHlwZW9mIGU/ZS5zcGxpdCgiICIpOltlXTt0PDQ7dCsrKW5baStuZVt0XStvXT1yW3RdfHxyW3QtMl18fHJbMF07cmV0dXJuIG59fSwibWFyZ2luIiE9PWkmJihTLmNzc0hvb2tzW2krb10uc2V0PVllKX0pLFMuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30sYT0wO2lmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPVJlKGUpLGk9dC5sZW5ndGg7YTxpO2ErKylvW3RbYV1dPVMuY3NzKGUsdFthXSwhMSxyKTtyZXR1cm4gb31yZXR1cm4gdm9pZCAwIT09bj9TLnN0eWxlKGUsdCxuKTpTLmNzcyhlLHQpfSxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX19KSwoKFMuVHdlZW49S2UpLnByb3RvdHlwZT17Y29uc3RydWN0b3I6S2UsaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8Uy5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fChTLmNzc051bWJlcltuXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9S2UucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOktlLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPUtlLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9dD1TLmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz10PWUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6S2UucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0pLmluaXQucHJvdG90eXBlPUtlLnByb3RvdHlwZSwoS2UucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiAxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsIT1lLmVsZW1bZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW2UucHJvcF0/ZS5lbGVtW2UucHJvcF06KHQ9Uy5jc3MoZS5lbGVtLGUucHJvcCwiIikpJiYiYXV0byIhPT10P3Q6MH0sc2V0OmZ1bmN0aW9uKGUpe1MuZnguc3RlcFtlLnByb3BdP1MuZnguc3RlcFtlLnByb3BdKGUpOjEhPT1lLmVsZW0ubm9kZVR5cGV8fCFTLmNzc0hvb2tzW2UucHJvcF0mJm51bGw9PWUuZWxlbS5zdHlsZVt6ZShlLnByb3ApXT9lLmVsZW1bZS5wcm9wXT1lLm5vdzpTLnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KX19fSkuc2Nyb2xsVG9wPUtlLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19LFMuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6InN3aW5nIn0sUy5meD1LZS5wcm90b3R5cGUuaW5pdCxTLmZ4LnN0ZXA9e307dmFyIFplLGV0LHR0LG50LHJ0PS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxpdD0vcXVldWVIb29rcyQvO2Z1bmN0aW9uIG90KCl7ZXQmJighMT09PUUuaGlkZGVuJiZDLnJlcXVlc3RBbmltYXRpb25GcmFtZT9DLnJlcXVlc3RBbmltYXRpb25GcmFtZShvdCk6Qy5zZXRUaW1lb3V0KG90LFMuZnguaW50ZXJ2YWwpLFMuZngudGljaygpKX1mdW5jdGlvbiBhdCgpe3JldHVybiBDLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtaZT12b2lkIDB9KSxaZT1EYXRlLm5vdygpfWZ1bmN0aW9uIHN0KGUsdCl7dmFyIG4scj0wLGk9e2hlaWdodDplfTtmb3IodD10PzE6MDtyPDQ7cis9Mi10KWlbIm1hcmdpbiIrKG49bmVbcl0pXT1pWyJwYWRkaW5nIituXT1lO3JldHVybiB0JiYoaS5vcGFjaXR5PWkud2lkdGg9ZSksaX1mdW5jdGlvbiB1dChlLHQsbil7Zm9yKHZhciByLGk9KGx0LnR3ZWVuZXJzW3RdfHxbXSkuY29uY2F0KGx0LnR3ZWVuZXJzWyIqIl0pLG89MCxhPWkubGVuZ3RoO288YTtvKyspaWYocj1pW29dLmNhbGwobix0LGUpKXJldHVybiByfWZ1bmN0aW9uIGx0KG8sZSx0KXt2YXIgbixhLHI9MCxpPWx0LnByZWZpbHRlcnMubGVuZ3RoLHM9Uy5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVsZW19KSx1PWZ1bmN0aW9uKCl7aWYoYSlyZXR1cm4hMTtmb3IodmFyIGU9WmV8fGF0KCksdD1NYXRoLm1heCgwLGwuc3RhcnRUaW1lK2wuZHVyYXRpb24tZSksbj0xLSh0L2wuZHVyYXRpb258fDApLHI9MCxpPWwudHdlZW5zLmxlbmd0aDtyPGk7cisrKWwudHdlZW5zW3JdLnJ1bihuKTtyZXR1cm4gcy5ub3RpZnlXaXRoKG8sW2wsbix0XSksbjwxJiZpP3Q6KGl8fHMubm90aWZ5V2l0aChvLFtsLDEsMF0pLHMucmVzb2x2ZVdpdGgobyxbbF0pLCExKX0sbD1zLnByb21pc2Uoe2VsZW06byxwcm9wczpTLmV4dGVuZCh7fSxlKSxvcHRzOlMuZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9LGVhc2luZzpTLmVhc2luZy5fZGVmYXVsdH0sdCksb3JpZ2luYWxQcm9wZXJ0aWVzOmUsb3JpZ2luYWxPcHRpb25zOnQsc3RhcnRUaW1lOlplfHxhdCgpLGR1cmF0aW9uOnQuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGUsdCl7dmFyIG49Uy5Ud2VlbihvLGwub3B0cyxlLHQsbC5vcHRzLnNwZWNpYWxFYXNpbmdbZV18fGwub3B0cy5lYXNpbmcpO3JldHVybiBsLnR3ZWVucy5wdXNoKG4pLG59LHN0b3A6ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWU/bC50d2VlbnMubGVuZ3RoOjA7aWYoYSlyZXR1cm4gdGhpcztmb3IoYT0hMDt0PG47dCsrKWwudHdlZW5zW3RdLnJ1bigxKTtyZXR1cm4gZT8ocy5ub3RpZnlXaXRoKG8sW2wsMSwwXSkscy5yZXNvbHZlV2l0aChvLFtsLGVdKSk6cy5yZWplY3RXaXRoKG8sW2wsZV0pLHRoaXN9fSksYz1sLnByb3BzO2ZvcighZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhO2ZvcihuIGluIGUpaWYoaT10W3I9WChuKV0sbz1lW25dLEFycmF5LmlzQXJyYXkobykmJihpPW9bMV0sbz1lW25dPW9bMF0pLG4hPT1yJiYoZVtyXT1vLGRlbGV0ZSBlW25dKSwoYT1TLmNzc0hvb2tzW3JdKSYmImV4cGFuZCJpbiBhKWZvcihuIGluIG89YS5leHBhbmQobyksZGVsZXRlIGVbcl0sbyluIGluIGV8fChlW25dPW9bbl0sdFtuXT1pKTtlbHNlIHRbcl09aX0oYyxsLm9wdHMuc3BlY2lhbEVhc2luZyk7cjxpO3IrKylpZihuPWx0LnByZWZpbHRlcnNbcl0uY2FsbChsLG8sYyxsLm9wdHMpKXJldHVybiBtKG4uc3RvcCkmJihTLl9xdWV1ZUhvb2tzKGwuZWxlbSxsLm9wdHMucXVldWUpLnN0b3A9bi5zdG9wLmJpbmQobikpLG47cmV0dXJuIFMubWFwKGMsdXQsbCksbShsLm9wdHMuc3RhcnQpJiZsLm9wdHMuc3RhcnQuY2FsbChvLGwpLGwucHJvZ3Jlc3MobC5vcHRzLnByb2dyZXNzKS5kb25lKGwub3B0cy5kb25lLGwub3B0cy5jb21wbGV0ZSkuZmFpbChsLm9wdHMuZmFpbCkuYWx3YXlzKGwub3B0cy5hbHdheXMpLFMuZngudGltZXIoUy5leHRlbmQodSx7ZWxlbTpvLGFuaW06bCxxdWV1ZTpsLm9wdHMucXVldWV9KSksbH1TLkFuaW1hdGlvbj1TLmV4dGVuZChsdCx7dHdlZW5lcnM6eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCk7cmV0dXJuIHNlKG4uZWxlbSxlLHRlLmV4ZWModCksbiksbn1dfSx0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7bShlKT8odD1lLGU9WyIqIl0pOmU9ZS5tYXRjaChQKTtmb3IodmFyIG4scj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluPWVbcl0sbHQudHdlZW5lcnNbbl09bHQudHdlZW5lcnNbbl18fFtdLGx0LnR3ZWVuZXJzW25dLnVuc2hpZnQodCl9LHByZWZpbHRlcnM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjLGY9IndpZHRoImluIHR8fCJoZWlnaHQiaW4gdCxwPXRoaXMsZD17fSxoPWUuc3R5bGUsZz1lLm5vZGVUeXBlJiZhZShlKSx2PVkuZ2V0KGUsImZ4c2hvdyIpO2ZvcihyIGluIG4ucXVldWV8fChudWxsPT0oYT1TLl9xdWV1ZUhvb2tzKGUsImZ4IikpLnVucXVldWVkJiYoYS51bnF1ZXVlZD0wLHM9YS5lbXB0eS5maXJlLGEuZW1wdHkuZmlyZT1mdW5jdGlvbigpe2EudW5xdWV1ZWR8fHMoKX0pLGEudW5xdWV1ZWQrKyxwLmFsd2F5cyhmdW5jdGlvbigpe3AuYWx3YXlzKGZ1bmN0aW9uKCl7YS51bnF1ZXVlZC0tLFMucXVldWUoZSwiZngiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSksdClpZihpPXRbcl0scnQudGVzdChpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHwidG9nZ2xlIj09PWksaT09PShnPyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1pfHwhdnx8dm9pZCAwPT09dltyXSljb250aW51ZTtnPSEwfWRbcl09diYmdltyXXx8Uy5zdHlsZShlLHIpfWlmKCh1PSFTLmlzRW1wdHlPYmplY3QodCkpfHwhUy5pc0VtcHR5T2JqZWN0KGQpKWZvcihyIGluIGYmJjE9PT1lLm5vZGVUeXBlJiYobi5vdmVyZmxvdz1baC5vdmVyZmxvdyxoLm92ZXJmbG93WCxoLm92ZXJmbG93WV0sbnVsbD09KGw9diYmdi5kaXNwbGF5KSYmKGw9WS5nZXQoZSwiZGlzcGxheSIpKSwibm9uZSI9PT0oYz1TLmNzcyhlLCJkaXNwbGF5IikpJiYobD9jPWw6KGxlKFtlXSwhMCksbD1lLnN0eWxlLmRpc3BsYXl8fGwsYz1TLmNzcyhlLCJkaXNwbGF5IiksbGUoW2VdKSkpLCgiaW5saW5lIj09PWN8fCJpbmxpbmUtYmxvY2siPT09YyYmbnVsbCE9bCkmJiJub25lIj09PVMuY3NzKGUsImZsb2F0IikmJih1fHwocC5kb25lKGZ1bmN0aW9uKCl7aC5kaXNwbGF5PWx9KSxudWxsPT1sJiYoYz1oLmRpc3BsYXksbD0ibm9uZSI9PT1jPyIiOmMpKSxoLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxuLm92ZXJmbG93JiYoaC5vdmVyZmxvdz0iaGlkZGVuIixwLmFsd2F5cyhmdW5jdGlvbigpe2gub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxoLm92ZXJmbG93WD1uLm92ZXJmbG93WzFdLGgub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSksdT0hMSxkKXV8fCh2PyJoaWRkZW4iaW4gdiYmKGc9di5oaWRkZW4pOnY9WS5hY2Nlc3MoZSwiZnhzaG93Iix7ZGlzcGxheTpsfSksbyYmKHYuaGlkZGVuPSFnKSxnJiZsZShbZV0sITApLHAuZG9uZShmdW5jdGlvbigpe2ZvcihyIGluIGd8fGxlKFtlXSksWS5yZW1vdmUoZSwiZnhzaG93IiksZClTLnN0eWxlKGUscixkW3JdKX0pKSx1PXV0KGc/dltyXTowLHIscCksciBpbiB2fHwodltyXT11LnN0YXJ0LGcmJih1LmVuZD11LnN0YXJ0LHUuc3RhcnQ9MCkpfV0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9sdC5wcmVmaWx0ZXJzLnVuc2hpZnQoZSk6bHQucHJlZmlsdGVycy5wdXNoKGUpfX0pLFMuc3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUmJiJvYmplY3QiPT10eXBlb2YgZT9TLmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fG0oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIW0odCkmJnR9O3JldHVybiBTLmZ4Lm9mZj9yLmR1cmF0aW9uPTA6Im51bWJlciIhPXR5cGVvZiByLmR1cmF0aW9uJiYoci5kdXJhdGlvbiBpbiBTLmZ4LnNwZWVkcz9yLmR1cmF0aW9uPVMuZnguc3BlZWRzW3IuZHVyYXRpb25dOnIuZHVyYXRpb249Uy5meC5zcGVlZHMuX2RlZmF1bHQpLG51bGwhPXIucXVldWUmJiEwIT09ci5xdWV1ZXx8KHIucXVldWU9ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bShyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmUy5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LFMuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKGFlKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1TLmlzRW1wdHlPYmplY3QodCksbz1TLnNwZWVkKGUsbixyKSxhPWZ1bmN0aW9uKCl7dmFyIGU9bHQodGhpcyxTLmV4dGVuZCh7fSx0KSxvKTsoaXx8WS5nZXQodGhpcywiZmluaXNoIikpJiZlLnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxpfHwhMT09PW8ucXVldWU/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbihpLGUsbyl7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChvKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBpJiYobz1lLGU9aSxpPXZvaWQgMCksZSYmdGhpcy5xdWV1ZShpfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT0hMCx0PW51bGwhPWkmJmkrInF1ZXVlSG9va3MiLG49Uy50aW1lcnMscj1ZLmdldCh0aGlzKTtpZih0KXJbdF0mJnJbdF0uc3RvcCYmYShyW3RdKTtlbHNlIGZvcih0IGluIHIpclt0XSYmclt0XS5zdG9wJiZpdC50ZXN0KHQpJiZhKHJbdF0pO2Zvcih0PW4ubGVuZ3RoO3QtLTspblt0XS5lbGVtIT09dGhpc3x8bnVsbCE9aSYmblt0XS5xdWV1ZSE9PWl8fChuW3RdLmFuaW0uc3RvcChvKSxlPSExLG4uc3BsaWNlKHQsMSkpOyFlJiZvfHxTLmRlcXVldWUodGhpcyxpKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuITEhPT1hJiYoYT1hfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0PVkuZ2V0KHRoaXMpLG49dFthKyJxdWV1ZSJdLHI9dFthKyJxdWV1ZUhvb2tzIl0saT1TLnRpbWVycyxvPW4/bi5sZW5ndGg6MDtmb3IodC5maW5pc2g9ITAsUy5xdWV1ZSh0aGlzLGEsW10pLHImJnIuc3RvcCYmci5zdG9wLmNhbGwodGhpcywhMCksZT1pLmxlbmd0aDtlLS07KWlbZV0uZWxlbT09PXRoaXMmJmlbZV0ucXVldWU9PT1hJiYoaVtlXS5hbmltLnN0b3AoITApLGkuc3BsaWNlKGUsMSkpO2ZvcihlPTA7ZTxvO2UrKyluW2VdJiZuW2VdLmZpbmlzaCYmbltlXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgdC5maW5pc2h9KX19KSxTLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUscil7dmFyIGk9Uy5mbltyXTtTLmZuW3JdPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT10eXBlb2YgZT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoc3QociwhMCksZSx0LG4pfX0pLFMuZWFjaCh7c2xpZGVEb3duOnN0KCJzaG93Iiksc2xpZGVVcDpzdCgiaGlkZSIpLHNsaWRlVG9nZ2xlOnN0KCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGUscil7Uy5mbltlXT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuYW5pbWF0ZShyLGUsdCxuKX19KSxTLnRpbWVycz1bXSxTLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PTAsbj1TLnRpbWVycztmb3IoWmU9RGF0ZS5ub3coKTt0PG4ubGVuZ3RoO3QrKykoZT1uW3RdKSgpfHxuW3RdIT09ZXx8bi5zcGxpY2UodC0tLDEpO24ubGVuZ3RofHxTLmZ4LnN0b3AoKSxaZT12b2lkIDB9LFMuZngudGltZXI9ZnVuY3Rpb24oZSl7Uy50aW1lcnMucHVzaChlKSxTLmZ4LnN0YXJ0KCl9LFMuZnguaW50ZXJ2YWw9MTMsUy5meC5zdGFydD1mdW5jdGlvbigpe2V0fHwoZXQ9ITAsb3QoKSl9LFMuZnguc3RvcD1mdW5jdGlvbigpe2V0PW51bGx9LFMuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LFMuZm4uZGVsYXk9ZnVuY3Rpb24ocixlKXtyZXR1cm4gcj1TLmZ4JiZTLmZ4LnNwZWVkc1tyXXx8cixlPWV8fCJmeCIsdGhpcy5xdWV1ZShlLGZ1bmN0aW9uKGUsdCl7dmFyIG49Qy5zZXRUaW1lb3V0KGUscik7dC5zdG9wPWZ1bmN0aW9uKCl7Qy5jbGVhclRpbWVvdXQobil9fSl9LHR0PUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxudD1FLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLmFwcGVuZENoaWxkKEUuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLHR0LnR5cGU9ImNoZWNrYm94Iix5LmNoZWNrT249IiIhPT10dC52YWx1ZSx5Lm9wdFNlbGVjdGVkPW50LnNlbGVjdGVkLCh0dD1FLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnZhbHVlPSJ0Iix0dC50eXBlPSJyYWRpbyIseS5yYWRpb1ZhbHVlPSJ0Ij09PXR0LnZhbHVlO3ZhciBjdCxmdD1TLmV4cHIuYXR0ckhhbmRsZTtTLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiAkKHRoaXMsUy5hdHRyLGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtTLnJlbW92ZUF0dHIodGhpcyxlKX0pfX0pLFMuZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZS5nZXRBdHRyaWJ1dGU/Uy5wcm9wKGUsdCxuKTooMT09PW8mJlMuaXNYTUxEb2MoZSl8fChpPVMuYXR0ckhvb2tzW3QudG9Mb3dlckNhc2UoKV18fChTLmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP2N0OnZvaWQgMCkpLHZvaWQgMCE9PW4/bnVsbD09PW4/dm9pZCBTLnJlbW92ZUF0dHIoZSx0KTppJiYic2V0ImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjooZS5zZXRBdHRyaWJ1dGUodCxuKyIiKSxuKTppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOm51bGw9PShyPVMuZmluZC5hdHRyKGUsdCkpP3ZvaWQgMDpyKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZigheS5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmQShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXQmJnQubWF0Y2goUCk7aWYoaSYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1pW3IrK10pZS5yZW1vdmVBdHRyaWJ1dGUobil9fSksY3Q9e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuITE9PT10P1MucmVtb3ZlQXR0cihlLG4pOmUuc2V0QXR0cmlidXRlKG4sbiksbn19LFMuZWFjaChTLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihlLHQpe3ZhciBhPWZ0W3RdfHxTLmZpbmQuYXR0cjtmdFt0XT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4gbnx8KGk9ZnRbb10sZnRbb109cixyPW51bGwhPWEoZSx0LG4pP286bnVsbCxmdFtvXT1pKSxyfX0pO3ZhciBwdD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGR0PS9eKD86YXxhcmVhKSQvaTtmdW5jdGlvbiBodChlKXtyZXR1cm4oZS5tYXRjaChQKXx8W10pLmpvaW4oIiAiKX1mdW5jdGlvbiBndChlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIn1mdW5jdGlvbiB2dChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOiJzdHJpbmciPT10eXBlb2YgZSYmZS5tYXRjaChQKXx8W119Uy5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLFMucHJvcCxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbUy5wcm9wRml4W2VdfHxlXX0pfX0pLFMuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiAxPT09byYmUy5pc1hNTERvYyhlKXx8KHQ9Uy5wcm9wRml4W3RdfHx0LGk9Uy5wcm9wSG9va3NbdF0pLHZvaWQgMCE9PW4/aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVMuZmluZC5hdHRyKGUsInRhYmluZGV4Iik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6cHQudGVzdChlLm5vZGVOYW1lKXx8ZHQudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9fSkseS5vcHRTZWxlY3RlZHx8KFMucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7dCYmKHQuc2VsZWN0ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX19KSxTLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe1MucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxTLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHMsdT0wO2lmKG0odCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLmFkZENsYXNzKHQuY2FsbCh0aGlzLGUsZ3QodGhpcykpKX0pO2lmKChlPXZ0KHQpKS5sZW5ndGgpd2hpbGUobj10aGlzW3UrK10paWYoaT1ndChuKSxyPTE9PT1uLm5vZGVUeXBlJiYiICIraHQoaSkrIiAiKXthPTA7d2hpbGUobz1lW2ErK10pci5pbmRleE9mKCIgIitvKyIgIik8MCYmKHIrPW8rIiAiKTtpIT09KHM9aHQocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvLGEscyx1PTA7aWYobSh0KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe1ModGhpcykucmVtb3ZlQ2xhc3ModC5jYWxsKHRoaXMsZSxndCh0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cigiY2xhc3MiLCIiKTtpZigoZT12dCh0KSkubGVuZ3RoKXdoaWxlKG49dGhpc1t1KytdKWlmKGk9Z3Qobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK2h0KGkpKyIgIil7YT0wO3doaWxlKG89ZVthKytdKXdoaWxlKC0xPHIuaW5kZXhPZigiICIrbysiICIpKXI9ci5yZXBsYWNlKCIgIitvKyIgIiwiICIpO2khPT0ocz1odChyKSkmJm4uc2V0QXR0cmlidXRlKCJjbGFzcyIscyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGksdCl7dmFyIG89dHlwZW9mIGksYT0ic3RyaW5nIj09PW98fEFycmF5LmlzQXJyYXkoaSk7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmYT90P3RoaXMuYWRkQ2xhc3MoaSk6dGhpcy5yZW1vdmVDbGFzcyhpKTptKGkpP3RoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLnRvZ2dsZUNsYXNzKGkuY2FsbCh0aGlzLGUsZ3QodGhpcyksdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0LG4scjtpZihhKXt0PTAsbj1TKHRoaXMpLHI9dnQoaSk7d2hpbGUoZT1yW3QrK10pbi5oYXNDbGFzcyhlKT9uLnJlbW92ZUNsYXNzKGUpOm4uYWRkQ2xhc3MoZSl9ZWxzZSB2b2lkIDAhPT1pJiYiYm9vbGVhbiIhPT1vfHwoKGU9Z3QodGhpcykpJiZZLnNldCh0aGlzLCJfX2NsYXNzTmFtZV9fIixlKSx0aGlzLnNldEF0dHJpYnV0ZSYmdGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNzIixlfHwhMT09PWk/IiI6WS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO3Q9IiAiK2UrIiAiO3doaWxlKG49dGhpc1tyKytdKWlmKDE9PT1uLm5vZGVUeXBlJiYtMTwoIiAiK2h0KGd0KG4pKSsiICIpLmluZGV4T2YodCkpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIHl0PS9cci9nO1MuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24obil7dmFyIHIsZSxpLHQ9dGhpc1swXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1tKG4pLHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgdDsxPT09dGhpcy5ub2RlVHlwZSYmKG51bGw9PSh0PWk/bi5jYWxsKHRoaXMsZSxTKHRoaXMpLnZhbCgpKTpuKT90PSIiOiJudW1iZXIiPT10eXBlb2YgdD90Kz0iIjpBcnJheS5pc0FycmF5KHQpJiYodD1TLm1hcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksKHI9Uy52YWxIb29rc1t0aGlzLnR5cGVdfHxTLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYic2V0ImluIHImJnZvaWQgMCE9PXIuc2V0KHRoaXMsdCwidmFsdWUiKXx8KHRoaXMudmFsdWU9dCkpfSkpOnQ/KHI9Uy52YWxIb29rc1t0LnR5cGVdfHxTLnZhbEhvb2tzW3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYiZ2V0ImluIHImJnZvaWQgMCE9PShlPXIuZ2V0KHQsInZhbHVlIikpP2U6InN0cmluZyI9PXR5cGVvZihlPXQudmFsdWUpP2UucmVwbGFjZSh5dCwiIik6bnVsbD09ZT8iIjplOnZvaWQgMH19KSxTLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVMuZmluZC5hdHRyKGUsInZhbHVlIik7cmV0dXJuIG51bGwhPXQ/dDpodChTLnRleHQoZSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9ZS5vcHRpb25zLG89ZS5zZWxlY3RlZEluZGV4LGE9InNlbGVjdC1vbmUiPT09ZS50eXBlLHM9YT9udWxsOltdLHU9YT9vKzE6aS5sZW5ndGg7Zm9yKHI9bzwwP3U6YT9vOjA7cjx1O3IrKylpZigoKG49aVtyXSkuc2VsZWN0ZWR8fHI9PT1vKSYmIW4uZGlzYWJsZWQmJighbi5wYXJlbnROb2RlLmRpc2FibGVkfHwhQShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PVMobikudmFsKCksYSlyZXR1cm4gdDtzLnB1c2godCl9cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz1TLm1ha2VBcnJheSh0KSxhPWkubGVuZ3RoO3doaWxlKGEtLSkoKHI9aVthXSkuc2VsZWN0ZWQ9LTE8Uy5pbkFycmF5KFMudmFsSG9va3Mub3B0aW9uLmdldChyKSxvKSkmJihuPSEwKTtyZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksb319fX0pLFMuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe1MudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD0tMTxTLmluQXJyYXkoUyhlKS52YWwoKSx0KX19LHkuY2hlY2tPbnx8KFMudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KSx5LmZvY3VzaW49Im9uZm9jdXNpbiJpbiBDO3ZhciBtdD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8seHQ9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX07Uy5leHRlbmQoUy5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGwsYyxmLHA9W258fEVdLGQ9di5jYWxsKGUsInR5cGUiKT9lLnR5cGU6ZSxoPXYuY2FsbChlLCJuYW1lc3BhY2UiKT9lLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKG89Zj1hPW49bnx8RSwzIT09bi5ub2RlVHlwZSYmOCE9PW4ubm9kZVR5cGUmJiFtdC50ZXN0KGQrUy5ldmVudC50cmlnZ2VyZWQpJiYoLTE8ZC5pbmRleE9mKCIuIikmJihkPShoPWQuc3BsaXQoIi4iKSkuc2hpZnQoKSxoLnNvcnQoKSksdT1kLmluZGV4T2YoIjoiKTwwJiYib24iK2QsKGU9ZVtTLmV4cGFuZG9dP2U6bmV3IFMuRXZlbnQoZCwib2JqZWN0Ij09dHlwZW9mIGUmJmUpKS5pc1RyaWdnZXI9cj8yOjMsZS5uYW1lc3BhY2U9aC5qb2luKCIuIiksZS5ybmFtZXNwYWNlPWUubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxlLnJlc3VsdD12b2lkIDAsZS50YXJnZXR8fChlLnRhcmdldD1uKSx0PW51bGw9PXQ/W2VdOlMubWFrZUFycmF5KHQsW2VdKSxjPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30scnx8IWMudHJpZ2dlcnx8ITEhPT1jLnRyaWdnZXIuYXBwbHkobix0KSkpe2lmKCFyJiYhYy5ub0J1YmJsZSYmIXgobikpe2ZvcihzPWMuZGVsZWdhdGVUeXBlfHxkLG10LnRlc3QocytkKXx8KG89by5wYXJlbnROb2RlKTtvO289by5wYXJlbnROb2RlKXAucHVzaChvKSxhPW87YT09PShuLm93bmVyRG9jdW1lbnR8fEUpJiZwLnB1c2goYS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3d8fEMpfWk9MDt3aGlsZSgobz1wW2krK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWY9byxlLnR5cGU9MTxpP3M6Yy5iaW5kVHlwZXx8ZCwobD0oWS5nZXQobywiZXZlbnRzIil8fE9iamVjdC5jcmVhdGUobnVsbCkpW2UudHlwZV0mJlkuZ2V0KG8sImhhbmRsZSIpKSYmbC5hcHBseShvLHQpLChsPXUmJm9bdV0pJiZsLmFwcGx5JiZWKG8pJiYoZS5yZXN1bHQ9bC5hcHBseShvLHQpLCExPT09ZS5yZXN1bHQmJmUucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGUudHlwZT1kLHJ8fGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fGMuX2RlZmF1bHQmJiExIT09Yy5fZGVmYXVsdC5hcHBseShwLnBvcCgpLHQpfHwhVihuKXx8dSYmbShuW2RdKSYmIXgobikmJigoYT1uW3VdKSYmKG5bdV09bnVsbCksUy5ldmVudC50cmlnZ2VyZWQ9ZCxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmYuYWRkRXZlbnRMaXN0ZW5lcihkLHh0KSxuW2RdKCksZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZmLnJlbW92ZUV2ZW50TGlzdGVuZXIoZCx4dCksUy5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLGEmJihuW3VdPWEpKSxlLnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1TLmV4dGVuZChuZXcgUy5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITB9KTtTLmV2ZW50LnRyaWdnZXIocixudWxsLHQpfX0pLFMuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzWzBdO2lmKG4pcmV0dXJuIFMuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCl9fSkseS5mb2N1c2lufHxTLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7Uy5ldmVudC5zaW11bGF0ZShyLGUudGFyZ2V0LFMuZXZlbnQuZml4KGUpKX07Uy5ldmVudC5zcGVjaWFsW3JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcy5kb2N1bWVudHx8dGhpcyx0PVkuYWNjZXNzKGUscik7dHx8ZS5hZGRFdmVudExpc3RlbmVyKG4saSwhMCksWS5hY2Nlc3MoZSxyLCh0fHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMuZG9jdW1lbnR8fHRoaXMsdD1ZLmFjY2VzcyhlLHIpLTE7dD9ZLmFjY2VzcyhlLHIsdCk6KGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGksITApLFkucmVtb3ZlKGUscikpfX19KTt2YXIgYnQ9Qy5sb2NhdGlvbix3dD17Z3VpZDpEYXRlLm5vdygpfSxUdD0vXD8vO1MucGFyc2VYTUw9ZnVuY3Rpb24oZSl7dmFyIHQsbjtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsO3RyeXt0PShuZXcgQy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhlLCJ0ZXh0L3htbCIpfWNhdGNoKGUpe31yZXR1cm4gbj10JiZ0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpWzBdLHQmJiFufHxTLmVycm9yKCJJbnZhbGlkIFhNTDogIisobj9TLm1hcChuLmNoaWxkTm9kZXMsZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dENvbnRlbnR9KS5qb2luKCJcbiIpOmUpKSx0fTt2YXIgQ3Q9L1xbXF0kLyxFdD0vXHI/XG4vZyxTdD0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksa3Q9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIEF0KG4sZSxyLGkpe3ZhciB0O2lmKEFycmF5LmlzQXJyYXkoZSkpUy5lYWNoKGUsZnVuY3Rpb24oZSx0KXtyfHxDdC50ZXN0KG4pP2kobix0KTpBdChuKyJbIisoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10P2U6IiIpKyJdIix0LHIsaSl9KTtlbHNlIGlmKHJ8fCJvYmplY3QiIT09dyhlKSlpKG4sZSk7ZWxzZSBmb3IodCBpbiBlKUF0KG4rIlsiK3QrIl0iLGVbdF0scixpKX1TLnBhcmFtPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPWZ1bmN0aW9uKGUsdCl7dmFyIG49bSh0KT90KCk6dDtyW3IubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1uPyIiOm4pfTtpZihudWxsPT1lKXJldHVybiIiO2lmKEFycmF5LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhUy5pc1BsYWluT2JqZWN0KGUpKVMuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpQXQobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbigiJiIpfSxTLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIFMucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT1TLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT9TLm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFTKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYma3QudGVzdCh0aGlzLm5vZGVOYW1lKSYmIVN0LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFwZS50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPVModGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4pP1MubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShFdCwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2UoRXQsIlxyXG4iKX19KS5nZXQoKX19KTt2YXIgTnQ9LyUyMC9nLGp0PS8jLiokLyxEdD0vKFs/Jl0pXz1bXiZdKi8scXQ9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxMdD0vXig/OkdFVHxIRUFEKSQvLEh0PS9eXC9cLy8sT3Q9e30sUHQ9e30sUnQ9IiovIi5jb25jYXQoIioiKSxNdD1FLmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiBJdChvKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iKiIpO3ZhciBuLHI9MCxpPWUudG9Mb3dlckNhc2UoKS5tYXRjaChQKXx8W107aWYobSh0KSl3aGlsZShuPWlbcisrXSkiKyI9PT1uWzBdPyhuPW4uc2xpY2UoMSl8fCIqIiwob1tuXT1vW25dfHxbXSkudW5zaGlmdCh0KSk6KG9bbl09b1tuXXx8W10pLnB1c2godCl9fWZ1bmN0aW9uIFd0KHQsaSxvLGEpe3ZhciBzPXt9LHU9dD09PVB0O2Z1bmN0aW9uIGwoZSl7dmFyIHI7cmV0dXJuIHNbZV09ITAsUy5lYWNoKHRbZV18fFtdLGZ1bmN0aW9uKGUsdCl7dmFyIG49dChpLG8sYSk7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBufHx1fHxzW25dP3U/IShyPW4pOnZvaWQgMDooaS5kYXRhVHlwZXMudW5zaGlmdChuKSxsKG4pLCExKX0pLHJ9cmV0dXJuIGwoaS5kYXRhVHlwZXNbMF0pfHwhc1siKiJdJiZsKCIqIil9ZnVuY3Rpb24gRnQoZSx0KXt2YXIgbixyLGk9Uy5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihuIGluIHQpdm9pZCAwIT09dFtuXSYmKChpW25dP2U6cnx8KHI9e30pKVtuXT10W25dKTtyZXR1cm4gciYmUy5leHRlbmQoITAsZSxyKSxlfU10LmhyZWY9YnQuaHJlZixTLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6YnQuaHJlZix0eXBlOiJHRVQiLGlzTG9jYWw6L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8udGVzdChidC5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpSdCx0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDovXGJ4bWxcYi8saHRtbDovXGJodG1sLyxqc29uOi9cYmpzb25cYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpKU09OLnBhcnNlLCJ0ZXh0IHhtbCI6Uy5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/RnQoRnQoZSxTLmFqYXhTZXR0aW5ncyksdCk6RnQoUy5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6SXQoT3QpLGFqYXhUcmFuc3BvcnQ6SXQoUHQpLGFqYXg6ZnVuY3Rpb24oZSx0KXsib2JqZWN0Ij09dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLHQ9dHx8e307dmFyIGMsZixwLG4sZCxyLGgsZyxpLG8sdj1TLmFqYXhTZXR1cCh7fSx0KSx5PXYuY29udGV4dHx8dixtPXYuY29udGV4dCYmKHkubm9kZVR5cGV8fHkuanF1ZXJ5KT9TKHkpOlMuZXZlbnQseD1TLkRlZmVycmVkKCksYj1TLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSx3PXYuc3RhdHVzQ29kZXx8e30sYT17fSxzPXt9LHU9ImNhbmNlbGVkIixUPXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoaCl7aWYoIW4pe249e307d2hpbGUodD1xdC5leGVjKHApKW5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl09KG5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl18fFtdKS5jb25jYXQodFsyXSl9dD1uW2UudG9Mb3dlckNhc2UoKSsiICJdfXJldHVybiBudWxsPT10P251bGw6dC5qb2luKCIsICIpfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gaD9wOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09aCYmKGU9c1tlLnRvTG93ZXJDYXNlKCldPXNbZS50b0xvd2VyQ2FzZSgpXXx8ZSxhW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWgmJih2Lm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihoKVQuYWx3YXlzKGVbVC5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpd1t0XT1bd1t0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8dTtyZXR1cm4gYyYmYy5hYm9ydCh0KSxsKDAsdCksdGhpc319O2lmKHgucHJvbWlzZShUKSx2LnVybD0oKGV8fHYudXJsfHxidC5ocmVmKSsiIikucmVwbGFjZShIdCxidC5wcm90b2NvbCsiLy8iKSx2LnR5cGU9dC5tZXRob2R8fHQudHlwZXx8di5tZXRob2R8fHYudHlwZSx2LmRhdGFUeXBlcz0odi5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKFApfHxbIiJdLG51bGw9PXYuY3Jvc3NEb21haW4pe3I9RS5jcmVhdGVFbGVtZW50KCJhIik7dHJ5e3IuaHJlZj12LnVybCxyLmhyZWY9ci5ocmVmLHYuY3Jvc3NEb21haW49TXQucHJvdG9jb2wrIi8vIitNdC5ob3N0IT1yLnByb3RvY29sKyIvLyIrci5ob3N0fWNhdGNoKGUpe3YuY3Jvc3NEb21haW49ITB9fWlmKHYuZGF0YSYmdi5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiB2LmRhdGEmJih2LmRhdGE9Uy5wYXJhbSh2LmRhdGEsdi50cmFkaXRpb25hbCkpLFd0KE90LHYsdCxUKSxoKXJldHVybiBUO2ZvcihpIGluKGc9Uy5ldmVudCYmdi5nbG9iYWwpJiYwPT1TLmFjdGl2ZSsrJiZTLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLHYudHlwZT12LnR5cGUudG9VcHBlckNhc2UoKSx2Lmhhc0NvbnRlbnQ9IUx0LnRlc3Qodi50eXBlKSxmPXYudXJsLnJlcGxhY2UoanQsIiIpLHYuaGFzQ29udGVudD92LmRhdGEmJnYucHJvY2Vzc0RhdGEmJjA9PT0odi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiYodi5kYXRhPXYuZGF0YS5yZXBsYWNlKE50LCIrIikpOihvPXYudXJsLnNsaWNlKGYubGVuZ3RoKSx2LmRhdGEmJih2LnByb2Nlc3NEYXRhfHwic3RyaW5nIj09dHlwZW9mIHYuZGF0YSkmJihmKz0oVHQudGVzdChmKT8iJiI6Ij8iKSt2LmRhdGEsZGVsZXRlIHYuZGF0YSksITE9PT12LmNhY2hlJiYoZj1mLnJlcGxhY2UoRHQsIiQxIiksbz0oVHQudGVzdChmKT8iJiI6Ij8iKSsiXz0iK3d0Lmd1aWQrKytvKSx2LnVybD1mK28pLHYuaWZNb2RpZmllZCYmKFMubGFzdE1vZGlmaWVkW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixTLmxhc3RNb2RpZmllZFtmXSksUy5ldGFnW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLFMuZXRhZ1tmXSkpLCh2LmRhdGEmJnYuaGFzQ29udGVudCYmITEhPT12LmNvbnRlbnRUeXBlfHx0LmNvbnRlbnRUeXBlKSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHYuY29udGVudFR5cGUpLFQuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0Iix2LmRhdGFUeXBlc1swXSYmdi5hY2NlcHRzW3YuZGF0YVR5cGVzWzBdXT92LmFjY2VwdHNbdi5kYXRhVHlwZXNbMF1dKygiKiIhPT12LmRhdGFUeXBlc1swXT8iLCAiK1J0KyI7IHE9MC4wMSI6IiIpOnYuYWNjZXB0c1siKiJdKSx2LmhlYWRlcnMpVC5zZXRSZXF1ZXN0SGVhZGVyKGksdi5oZWFkZXJzW2ldKTtpZih2LmJlZm9yZVNlbmQmJighMT09PXYuYmVmb3JlU2VuZC5jYWxsKHksVCx2KXx8aCkpcmV0dXJuIFQuYWJvcnQoKTtpZih1PSJhYm9ydCIsYi5hZGQodi5jb21wbGV0ZSksVC5kb25lKHYuc3VjY2VzcyksVC5mYWlsKHYuZXJyb3IpLGM9V3QoUHQsdix0LFQpKXtpZihULnJlYWR5U3RhdGU9MSxnJiZtLnRyaWdnZXIoImFqYXhTZW5kIixbVCx2XSksaClyZXR1cm4gVDt2LmFzeW5jJiYwPHYudGltZW91dCYmKGQ9Qy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5hYm9ydCgidGltZW91dCIpfSx2LnRpbWVvdXQpKTt0cnl7aD0hMSxjLnNlbmQoYSxsKX1jYXRjaChlKXtpZihoKXRocm93IGU7bCgtMSxlKX19ZWxzZSBsKC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlvbiBsKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD10O2h8fChoPSEwLGQmJkMuY2xlYXJUaW1lb3V0KGQpLGM9dm9pZCAwLHA9cnx8IiIsVC5yZWFkeVN0YXRlPTA8ZT80OjAsaT0yMDA8PWUmJmU8MzAwfHwzMDQ9PT1lLG4mJihzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzPWUuY29udGVudHMsdT1lLmRhdGFUeXBlczt3aGlsZSgiKiI9PT11WzBdKXUuc2hpZnQoKSx2b2lkIDA9PT1yJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7aWYocilmb3IoaSBpbiBzKWlmKHNbaV0mJnNbaV0udGVzdChyKSl7dS51bnNoaWZ0KGkpO2JyZWFrfWlmKHVbMF1pbiBuKW89dVswXTtlbHNle2ZvcihpIGluIG4pe2lmKCF1WzBdfHxlLmNvbnZlcnRlcnNbaSsiICIrdVswXV0pe289aTticmVha31hfHwoYT1pKX1vPW98fGF9aWYobylyZXR1cm4gbyE9PXVbMF0mJnUudW5zaGlmdChvKSxuW29dfSh2LFQsbikpLCFpJiYtMTxTLmluQXJyYXkoInNjcmlwdCIsdi5kYXRhVHlwZXMpJiZTLmluQXJyYXkoImpzb24iLHYuZGF0YVR5cGVzKTwwJiYodi5jb252ZXJ0ZXJzWyJ0ZXh0IHNjcmlwdCJdPWZ1bmN0aW9uKCl7fSkscz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrIiAiK29dfHxsWyIqICIrb10pKWZvcihpIGluIGwpaWYoKHM9aS5zcGxpdCgiICIpKVsxXT09PW8mJihhPWxbdSsiICIrc1swXV18fGxbIiogIitzWzBdXSkpeyEwPT09YT9hPWxbaV06ITAhPT1sW2ldJiYobz1zWzBdLGMudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fSh2LHMsVCxpKSxpPyh2LmlmTW9kaWZpZWQmJigodT1ULmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikpJiYoUy5sYXN0TW9kaWZpZWRbZl09dSksKHU9VC5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpKSYmKFMuZXRhZ1tmXT11KSksMjA0PT09ZXx8IkhFQUQiPT09di50eXBlP2w9Im5vY29udGVudCI6MzA0PT09ZT9sPSJub3Rtb2RpZmllZCI6KGw9cy5zdGF0ZSxvPXMuZGF0YSxpPSEoYT1zLmVycm9yKSkpOihhPWwsIWUmJmx8fChsPSJlcnJvciIsZTwwJiYoZT0wKSkpLFQuc3RhdHVzPWUsVC5zdGF0dXNUZXh0PSh0fHxsKSsiIixpP3gucmVzb2x2ZVdpdGgoeSxbbyxsLFRdKTp4LnJlamVjdFdpdGgoeSxbVCxsLGFdKSxULnN0YXR1c0NvZGUodyksdz12b2lkIDAsZyYmbS50cmlnZ2VyKGk/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbVCx2LGk/bzphXSksYi5maXJlV2l0aCh5LFtULGxdKSxnJiYobS50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtULHZdKSwtLVMuYWN0aXZlfHxTLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gVH0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFMuZ2V0KGUsdCxuLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiBTLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19KSxTLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSxpKXtTW2ldPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBtKHQpJiYocj1yfHxuLG49dCx0PXZvaWQgMCksUy5hamF4KFMuZXh0ZW5kKHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6cixkYXRhOnQsc3VjY2VzczpufSxTLmlzUGxhaW5PYmplY3QoZSkmJmUpKX19KSxTLmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZS5oZWFkZXJzKSJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpJiYoZS5jb250ZW50VHlwZT1lLmhlYWRlcnNbdF18fCIiKX0pLFMuX2V2YWxVcmw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBTLmFqYXgoe3VybDplLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsY2FjaGU6ITAsYXN5bmM6ITEsZ2xvYmFsOiExLGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oKXt9fSxkYXRhRmlsdGVyOmZ1bmN0aW9uKGUpe1MuZ2xvYmFsRXZhbChlLHQsbil9fSl9LFMuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzWzBdJiYobShlKSYmKGU9ZS5jYWxsKHRoaXNbMF0pKSx0PVMoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKG4pe3JldHVybiBtKG4pP3RoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBJbm5lcihuLmNhbGwodGhpcyxlKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1TKHRoaXMpLHQ9ZS5jb250ZW50cygpO3QubGVuZ3RoP3Qud3JhcEFsbChuKTplLmFwcGVuZChuKX0pfSx3cmFwOmZ1bmN0aW9uKHQpe3ZhciBuPW0odCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBBbGwobj90LmNhbGwodGhpcyxlKTp0KX0pfSx1bndyYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50KGUpLm5vdCgiYm9keSIpLmVhY2goZnVuY3Rpb24oKXtTKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLFMuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hUy5leHByLnBzZXVkb3MudmlzaWJsZShlKX0sUy5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LFMuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEMuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIEJ0PXswOjIwMCwxMjIzOjIwNH0sJHQ9Uy5hamF4U2V0dGluZ3MueGhyKCk7eS5jb3JzPSEhJHQmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gJHQseS5hamF4PSR0PSEhJHQsUy5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGkpe3ZhciBvLGE7aWYoeS5jb3JzfHwkdCYmIWkuY3Jvc3NEb21haW4pcmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkueGhyKCk7aWYoci5vcGVuKGkudHlwZSxpLnVybCxpLmFzeW5jLGkudXNlcm5hbWUsaS5wYXNzd29yZCksaS54aHJGaWVsZHMpZm9yKG4gaW4gaS54aHJGaWVsZHMpcltuXT1pLnhockZpZWxkc1tuXTtmb3IobiBpbiBpLm1pbWVUeXBlJiZyLm92ZXJyaWRlTWltZVR5cGUmJnIub3ZlcnJpZGVNaW1lVHlwZShpLm1pbWVUeXBlKSxpLmNyb3NzRG9tYWlufHxlWyJYLVJlcXVlc3RlZC1XaXRoIl18fChlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0IiksZSlyLnNldFJlcXVlc3RIZWFkZXIobixlW25dKTtvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe28mJihvPWE9ci5vbmxvYWQ9ci5vbmVycm9yPXIub25hYm9ydD1yLm9udGltZW91dD1yLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT1lP3IuYWJvcnQoKToiZXJyb3IiPT09ZT8ibnVtYmVyIiE9dHlwZW9mIHIuc3RhdHVzP3QoMCwiZXJyb3IiKTp0KHIuc3RhdHVzLHIuc3RhdHVzVGV4dCk6dChCdFtyLnN0YXR1c118fHIuc3RhdHVzLHIuc3RhdHVzVGV4dCwidGV4dCIhPT0oci5yZXNwb25zZVR5cGV8fCJ0ZXh0Iil8fCJzdHJpbmciIT10eXBlb2Ygci5yZXNwb25zZVRleHQ/e2JpbmFyeTpyLnJlc3BvbnNlfTp7dGV4dDpyLnJlc3BvbnNlVGV4dH0sci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sci5vbmxvYWQ9bygpLGE9ci5vbmVycm9yPXIub250aW1lb3V0PW8oImVycm9yIiksdm9pZCAwIT09ci5vbmFib3J0P3Iub25hYm9ydD1hOnIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXIucmVhZHlTdGF0ZSYmQy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7byYmYSgpfSl9LG89bygiYWJvcnQiKTt0cnl7ci5zZW5kKGkuaGFzQ29udGVudCYmaS5kYXRhfHxudWxsKX1jYXRjaChlKXtpZihvKXRocm93IGV9fSxhYm9ydDpmdW5jdGlvbigpe28mJm8oKX19fSksUy5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe2UuY3Jvc3NEb21haW4mJihlLmNvbnRlbnRzLnNjcmlwdD0hMSl9KSxTLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xiKD86amF2YXxlY21hKXNjcmlwdFxiL30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4gUy5nbG9iYWxFdmFsKGUpLGV9fX0pLFMuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSxTLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24obil7dmFyIHIsaTtpZihuLmNyb3NzRG9tYWlufHxuLnNjcmlwdEF0dHJzKXJldHVybntzZW5kOmZ1bmN0aW9uKGUsdCl7cj1TKCI8c2NyaXB0PiIpLmF0dHIobi5zY3JpcHRBdHRyc3x8e30pLnByb3Aoe2NoYXJzZXQ6bi5zY3JpcHRDaGFyc2V0LHNyYzpuLnVybH0pLm9uKCJsb2FkIGVycm9yIixpPWZ1bmN0aW9uKGUpe3IucmVtb3ZlKCksaT1udWxsLGUmJnQoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxFLmhlYWQuYXBwZW5kQ2hpbGQoclswXSl9LGFib3J0OmZ1bmN0aW9uKCl7aSYmaSgpfX19KTt2YXIgX3QsenQ9W10sVXQ9Lyg9KVw/KD89JnwkKXxcP1w/LztTLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9enQucG9wKCl8fFMuZXhwYW5kbysiXyIrd3QuZ3VpZCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksUy5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9ITEhPT1lLmpzb25wJiYoVXQudGVzdChlLnVybCk/InVybCI6InN0cmluZyI9PXR5cGVvZiBlLmRhdGEmJjA9PT0oZS5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZVdC50ZXN0KGUuZGF0YSkmJiJkYXRhIik7aWYoYXx8Impzb25wIj09PWUuZGF0YVR5cGVzWzBdKXJldHVybiByPWUuanNvbnBDYWxsYmFjaz1tKGUuanNvbnBDYWxsYmFjayk/ZS5qc29ucENhbGxiYWNrKCk6ZS5qc29ucENhbGxiYWNrLGE/ZVthXT1lW2FdLnJlcGxhY2UoVXQsIiQxIityKTohMSE9PWUuanNvbnAmJihlLnVybCs9KFR0LnRlc3QoZS51cmwpPyImIjoiPyIpK2UuanNvbnArIj0iK3IpLGUuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBvfHxTLmVycm9yKHIrIiB3YXMgbm90IGNhbGxlZCIpLG9bMF19LGUuZGF0YVR5cGVzWzBdPSJqc29uIixpPUNbcl0sQ1tyXT1mdW5jdGlvbigpe289YXJndW1lbnRzfSxuLmFsd2F5cyhmdW5jdGlvbigpe3ZvaWQgMD09PWk/UyhDKS5yZW1vdmVQcm9wKHIpOkNbcl09aSxlW3JdJiYoZS5qc29ucENhbGxiYWNrPXQuanNvbnBDYWxsYmFjayx6dC5wdXNoKHIpKSxvJiZtKGkpJiZpKG9bMF0pLG89aT12b2lkIDB9KSwic2NyaXB0In0pLHkuY3JlYXRlSFRNTERvY3VtZW50PSgoX3Q9RS5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHkpLmlubmVySFRNTD0iPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT4iLDI9PT1fdC5jaGlsZE5vZGVzLmxlbmd0aCksUy5wYXJzZUhUTUw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9bXTooImJvb2xlYW4iPT10eXBlb2YgdCYmKG49dCx0PSExKSx0fHwoeS5jcmVhdGVIVE1MRG9jdW1lbnQ/KChyPSh0PUUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSkuY3JlYXRlRWxlbWVudCgiYmFzZSIpKS5ocmVmPUUubG9jYXRpb24uaHJlZix0LmhlYWQuYXBwZW5kQ2hpbGQocikpOnQ9RSksbz0hbiYmW10sKGk9Ti5leGVjKGUpKT9bdC5jcmVhdGVFbGVtZW50KGlbMV0pXTooaT14ZShbZV0sdCxvKSxvJiZvLmxlbmd0aCYmUyhvKS5yZW1vdmUoKSxTLm1lcmdlKFtdLGkuY2hpbGROb2RlcykpKTt2YXIgcixpLG99LFMuZm4ubG9hZD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9dGhpcyxzPWUuaW5kZXhPZigiICIpO3JldHVybi0xPHMmJihyPWh0KGUuc2xpY2UocykpLGU9ZS5zbGljZSgwLHMpKSxtKHQpPyhuPXQsdD12b2lkIDApOnQmJiJvYmplY3QiPT10eXBlb2YgdCYmKGk9IlBPU1QiKSwwPGEubGVuZ3RoJiZTLmFqYXgoe3VybDplLHR5cGU6aXx8IkdFVCIsZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMsYS5odG1sKHI/UygiPGRpdj4iKS5hcHBlbmQoUy5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5hbHdheXMobiYmZnVuY3Rpb24oZSx0KXthLmVhY2goZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSl9KSx0aGlzfSxTLmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbih0KXtyZXR1cm4gUy5ncmVwKFMudGltZXJzLGZ1bmN0aW9uKGUpe3JldHVybiB0PT09ZS5lbGVtfSkubGVuZ3RofSxTLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbD1TLmNzcyhlLCJwb3NpdGlvbiIpLGM9UyhlKSxmPXt9OyJzdGF0aWMiPT09bCYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIikscz1jLm9mZnNldCgpLG89Uy5jc3MoZSwidG9wIiksdT1TLmNzcyhlLCJsZWZ0IiksKCJhYnNvbHV0ZSI9PT1sfHwiZml4ZWQiPT09bCkmJi0xPChvK3UpLmluZGV4T2YoImF1dG8iKT8oYT0ocj1jLnBvc2l0aW9uKCkpLnRvcCxpPXIubGVmdCk6KGE9cGFyc2VGbG9hdChvKXx8MCxpPXBhcnNlRmxvYXQodSl8fDApLG0odCkmJih0PXQuY2FsbChlLG4sUy5leHRlbmQoe30scykpKSxudWxsIT10LnRvcCYmKGYudG9wPXQudG9wLXMudG9wK2EpLG51bGwhPXQubGVmdCYmKGYubGVmdD10LmxlZnQtcy5sZWZ0K2kpLCJ1c2luZyJpbiB0P3QudXNpbmcuY2FsbChlLGYpOmMuY3NzKGYpfX0sUy5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe1Mub2Zmc2V0LnNldE9mZnNldCh0aGlzLHQsZSl9KTt2YXIgZSxuLHI9dGhpc1swXTtyZXR1cm4gcj9yLmdldENsaWVudFJlY3RzKCkubGVuZ3RoPyhlPXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcse3RvcDplLnRvcCtuLnBhZ2VZT2Zmc2V0LGxlZnQ6ZS5sZWZ0K24ucGFnZVhPZmZzZXR9KTp7dG9wOjAsbGVmdDowfTp2b2lkIDB9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGUsdCxuLHI9dGhpc1swXSxpPXt0b3A6MCxsZWZ0OjB9O2lmKCJmaXhlZCI9PT1TLmNzcyhyLCJwb3NpdGlvbiIpKXQ9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlbHNle3Q9dGhpcy5vZmZzZXQoKSxuPXIub3duZXJEb2N1bWVudCxlPXIub2Zmc2V0UGFyZW50fHxuLmRvY3VtZW50RWxlbWVudDt3aGlsZShlJiYoZT09PW4uYm9keXx8ZT09PW4uZG9jdW1lbnRFbGVtZW50KSYmInN0YXRpYyI9PT1TLmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5wYXJlbnROb2RlO2UmJmUhPT1yJiYxPT09ZS5ub2RlVHlwZSYmKChpPVMoZSkub2Zmc2V0KCkpLnRvcCs9Uy5jc3MoZSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxpLmxlZnQrPVMuY3NzKGUsImJvcmRlckxlZnRXaWR0aCIsITApKX1yZXR1cm57dG9wOnQudG9wLWkudG9wLVMuY3NzKHIsIm1hcmdpblRvcCIsITApLGxlZnQ6dC5sZWZ0LWkubGVmdC1TLmNzcyhyLCJtYXJnaW5MZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQ7d2hpbGUoZSYmInN0YXRpYyI9PT1TLmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fHJlfSl9fSksUy5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKHQsaSl7dmFyIG89InBhZ2VZT2Zmc2V0Ij09PWk7Uy5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gJCh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZih4KGUpP3I9ZTo5PT09ZS5ub2RlVHlwZSYmKHI9ZS5kZWZhdWx0Vmlldyksdm9pZCAwPT09bilyZXR1cm4gcj9yW2ldOmVbdF07cj9yLnNjcm9sbFRvKG8/ci5wYWdlWE9mZnNldDpuLG8/bjpyLnBhZ2VZT2Zmc2V0KTplW3RdPW59LHQsZSxhcmd1bWVudHMubGVuZ3RoKX19KSxTLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSxuKXtTLmNzc0hvb2tzW25dPUZlKHkucGl4ZWxQb3NpdGlvbixmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuIHQ9V2UoZSxuKSxQZS50ZXN0KHQpP1MoZSkucG9zaXRpb24oKVtuXSsicHgiOnR9KX0pLFMuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEscyl7Uy5lYWNoKHtwYWRkaW5nOiJpbm5lciIrYSxjb250ZW50OnMsIiI6Im91dGVyIithfSxmdW5jdGlvbihyLG8pe1MuZm5bb109ZnVuY3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoJiYocnx8ImJvb2xlYW4iIT10eXBlb2YgZSksaT1yfHwoITA9PT1lfHwhMD09PXQ/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiB4KGUpPzA9PT1vLmluZGV4T2YoIm91dGVyIik/ZVsiaW5uZXIiK2FdOmUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2FdOjk9PT1lLm5vZGVUeXBlPyhyPWUuZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KGUuYm9keVsic2Nyb2xsIithXSxyWyJzY3JvbGwiK2FdLGUuYm9keVsib2Zmc2V0IithXSxyWyJvZmZzZXQiK2FdLHJbImNsaWVudCIrYV0pKTp2b2lkIDA9PT1uP1MuY3NzKGUsdCxpKTpTLnN0eWxlKGUsdCxuLGkpfSxzLG4/ZTp2b2lkIDAsbil9fSl9KSxTLmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxmdW5jdGlvbihlLHQpe1MuZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSxTLmZuLmV4dGVuZCh7YmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCl9LGRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKHQsZSxuLHIpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoZSwiKioiKTp0aGlzLm9mZih0LGV8fCIqKiIsbil9LGhvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLFMuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLG4pe1MuZm5bbl09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMDxhcmd1bWVudHMubGVuZ3RoP3RoaXMub24obixudWxsLGUsdCk6dGhpcy50cmlnZ2VyKG4pfX0pO3ZhciBYdD0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2c7Uy5wcm94eT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtpZigic3RyaW5nIj09dHlwZW9mIHQmJihuPWVbdF0sdD1lLGU9biksbShlKSlyZXR1cm4gcj1zLmNhbGwoYXJndW1lbnRzLDIpLChpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodHx8dGhpcyxyLmNvbmNhdChzLmNhbGwoYXJndW1lbnRzKSkpfSkuZ3VpZD1lLmd1aWQ9ZS5ndWlkfHxTLmd1aWQrKyxpfSxTLmhvbGRSZWFkeT1mdW5jdGlvbihlKXtlP1MucmVhZHlXYWl0Kys6Uy5yZWFkeSghMCl9LFMuaXNBcnJheT1BcnJheS5pc0FycmF5LFMucGFyc2VKU09OPUpTT04ucGFyc2UsUy5ub2RlTmFtZT1BLFMuaXNGdW5jdGlvbj1tLFMuaXNXaW5kb3c9eCxTLmNhbWVsQ2FzZT1YLFMudHlwZT13LFMubm93PURhdGUubm93LFMuaXNOdW1lcmljPWZ1bmN0aW9uKGUpe3ZhciB0PVMudHlwZShlKTtyZXR1cm4oIm51bWJlciI9PT10fHwic3RyaW5nIj09PXQpJiYhaXNOYU4oZS1wYXJzZUZsb2F0KGUpKX0sUy50cmltPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKFh0LCIiKX0sImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KTt2YXIgVnQ9Qy5qUXVlcnksR3Q9Qy4kO3JldHVybiBTLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIEMuJD09PVMmJihDLiQ9R3QpLGUmJkMualF1ZXJ5PT09UyYmKEMualF1ZXJ5PVZ0KSxTfSwidW5kZWZpbmVkIj09dHlwZW9mIGUmJihDLmpRdWVyeT1DLiQ9UyksU30pOwo="></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link href="data:text/css,html%7Bfont%2Dfamily%3Asans%2Dserif%3B%2Dwebkit%2Dtext%2Dsize%2Dadjust%3A100%25%3B%2Dms%2Dtext%2Dsize%2Dadjust%3A100%25%7Dbody%7Bmargin%3A0%7Darticle%2Caside%2Cdetails%2Cfigcaption%2Cfigure%2Cfooter%2Cheader%2Chgroup%2Cmain%2Cmenu%2Cnav%2Csection%2Csummary%7Bdisplay%3Ablock%7Daudio%2Ccanvas%2Cprogress%2Cvideo%7Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Abaseline%7Daudio%3Anot%28%5Bcontrols%5D%29%7Bdisplay%3Anone%3Bheight%3A0%7D%5Bhidden%5D%2Ctemplate%7Bdisplay%3Anone%7Da%7Bbackground%2Dcolor%3Atransparent%7Da%3Aactive%2Ca%3Ahover%7Boutline%3A0%7Dabbr%5Btitle%5D%7Bborder%2Dbottom%3A1px%20dotted%7Db%2Cstrong%7Bfont%2Dweight%3A700%7Ddfn%7Bfont%2Dstyle%3Aitalic%7Dh1%7Bmargin%3A%2E67em%200%3Bfont%2Dsize%3A2em%7Dmark%7Bcolor%3A%23000%3Bbackground%3A%23ff0%7Dsmall%7Bfont%2Dsize%3A80%25%7Dsub%2Csup%7Bposition%3Arelative%3Bfont%2Dsize%3A75%25%3Bline%2Dheight%3A0%3Bvertical%2Dalign%3Abaseline%7Dsup%7Btop%3A%2D%2E5em%7Dsub%7Bbottom%3A%2D%2E25em%7Dimg%7Bborder%3A0%7Dsvg%3Anot%28%3Aroot%29%7Boverflow%3Ahidden%7Dfigure%7Bmargin%3A1em%2040px%7Dhr%7Bheight%3A0%3B%2Dwebkit%2Dbox%2Dsizing%3Acontent%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Acontent%2Dbox%3Bbox%2Dsizing%3Acontent%2Dbox%7Dpre%7Boverflow%3Aauto%7Dcode%2Ckbd%2Cpre%2Csamp%7Bfont%2Dfamily%3Amonospace%2Cmonospace%3Bfont%2Dsize%3A1em%7Dbutton%2Cinput%2Coptgroup%2Cselect%2Ctextarea%7Bmargin%3A0%3Bfont%3Ainherit%3Bcolor%3Ainherit%7Dbutton%7Boverflow%3Avisible%7Dbutton%2Cselect%7Btext%2Dtransform%3Anone%7Dbutton%2Chtml%20input%5Btype%3Dbutton%5D%2Cinput%5Btype%3Dreset%5D%2Cinput%5Btype%3Dsubmit%5D%7B%2Dwebkit%2Dappearance%3Abutton%3Bcursor%3Apointer%7Dbutton%5Bdisabled%5D%2Chtml%20input%5Bdisabled%5D%7Bcursor%3Adefault%7Dbutton%3A%3A%2Dmoz%2Dfocus%2Dinner%2Cinput%3A%3A%2Dmoz%2Dfocus%2Dinner%7Bpadding%3A0%3Bborder%3A0%7Dinput%7Bline%2Dheight%3Anormal%7Dinput%5Btype%3Dcheckbox%5D%2Cinput%5Btype%3Dradio%5D%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%3Bpadding%3A0%7Dinput%5Btype%3Dnumber%5D%3A%3A%2Dwebkit%2Dinner%2Dspin%2Dbutton%2Cinput%5Btype%3Dnumber%5D%3A%3A%2Dwebkit%2Douter%2Dspin%2Dbutton%7Bheight%3Aauto%7Dinput%5Btype%3Dsearch%5D%7B%2Dwebkit%2Dbox%2Dsizing%3Acontent%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Acontent%2Dbox%3Bbox%2Dsizing%3Acontent%2Dbox%3B%2Dwebkit%2Dappearance%3Atextfield%7Dinput%5Btype%3Dsearch%5D%3A%3A%2Dwebkit%2Dsearch%2Dcancel%2Dbutton%2Cinput%5Btype%3Dsearch%5D%3A%3A%2Dwebkit%2Dsearch%2Ddecoration%7B%2Dwebkit%2Dappearance%3Anone%7Dfieldset%7Bpadding%3A%2E35em%20%2E625em%20%2E75em%3Bmargin%3A0%202px%3Bborder%3A1px%20solid%20silver%7Dlegend%7Bpadding%3A0%3Bborder%3A0%7Dtextarea%7Boverflow%3Aauto%7Doptgroup%7Bfont%2Dweight%3A700%7Dtable%7Bborder%2Dspacing%3A0%3Bborder%2Dcollapse%3Acollapse%7Dtd%2Cth%7Bpadding%3A0%7D%40media%20print%7B%2A%2C%3Aafter%2C%3Abefore%7Bcolor%3A%23000%21important%3Btext%2Dshadow%3Anone%21important%3Bbackground%3A0%200%21important%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%21important%3Bbox%2Dshadow%3Anone%21important%7Da%2Ca%3Avisited%7Btext%2Ddecoration%3Aunderline%7Da%5Bhref%5D%3Aafter%7Bcontent%3A%22%20%28%22%20attr%28href%29%20%22%29%22%7Dabbr%5Btitle%5D%3Aafter%7Bcontent%3A%22%20%28%22%20attr%28title%29%20%22%29%22%7Da%5Bhref%5E%3D%22javascript%3A%22%5D%3Aafter%2Ca%5Bhref%5E%3D%22%23%22%5D%3Aafter%7Bcontent%3A%22%22%7Dblockquote%2Cpre%7Bborder%3A1px%20solid%20%23999%3Bpage%2Dbreak%2Dinside%3Aavoid%7Dthead%7Bdisplay%3Atable%2Dheader%2Dgroup%7Dimg%2Ctr%7Bpage%2Dbreak%2Dinside%3Aavoid%7Dimg%7Bmax%2Dwidth%3A100%25%21important%7Dh2%2Ch3%2Cp%7Borphans%3A3%3Bwidows%3A3%7Dh2%2Ch3%7Bpage%2Dbreak%2Dafter%3Aavoid%7D%2Enavbar%7Bdisplay%3Anone%7D%2Ebtn%3E%2Ecaret%2C%2Edropup%3E%2Ebtn%3E%2Ecaret%7Bborder%2Dtop%2Dcolor%3A%23000%21important%7D%2Elabel%7Bborder%3A1px%20solid%20%23000%7D%2Etable%7Bborder%2Dcollapse%3Acollapse%21important%7D%2Etable%20td%2C%2Etable%20th%7Bbackground%2Dcolor%3A%23fff%21important%7D%2Etable%2Dbordered%20td%2C%2Etable%2Dbordered%20th%7Bborder%3A1px%20solid%20%23ddd%21important%7D%7D%40font%2Dface%7Bfont%2Dfamily%3A%27Glyphicons%20Halflings%27%3Bsrc%3Aurl%28data%3Aapplication%2Fvnd%2Ems%2Dfontobject%3Bbase64%2Cn04AAEFNAAACAAIABAAAAAAABQAAAAAAAAABAJABAAAEAExQAAAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAJxJ%2FLAAAAAAAAAAAAAAAAAAAAAAAACgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAAAADgBSAGUAZwB1AGwAYQByAAAAeABWAGUAcgBzAGkAbwBuACAAMQAuADAAMAA5ADsAUABTACAAMAAwADEALgAwADAAOQA7AGgAbwB0AGMAbwBuAHYAIAAxAC4AMAAuADcAMAA7AG0AYQBrAGUAbwB0AGYALgBsAGkAYgAyAC4ANQAuADUAOAAzADIAOQAAADgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzACAAUgBlAGcAdQBsAGEAcgAAAAAAQlNHUAAAAAAAAAAAAAAAAAAAAAADAKncAE0TAE0ZAEbuFM3pjM%2FSEdmjKHUbyow8ATBE40IvWA3vTu8LiABDQ%2BpexwUMcm1SMnNryctQSiI1K5ZnbOlXKmnVV5YvRe6RnNMFNCOs1KNVpn6yZhCJkRtVRNzEufeIq7HgSrcx4S8h%2Fv4vnrrKc6oCNxmSk2uKlZQHBii6iKFoH0746ThvkO1kJHlxjrkxs%2BLWORaDQBEtiYJIR5IB9Bi1UyL4Rmr0BNigNkMzlKQmnofBHviqVzUxwdMb3NdCn69hy%2BpRYVKGVS%2F1tnsqv4LL7wCCPZZAZPT4aCShHjHJVNuXbmMrY5LeQaGnvAkXlVrJgKRAUdFjrWEah9XebPeQMj7KS7DIBAFt8ycgC5PLGUOHSE3ErGZCiViNLL5ZARfywnCoZaKQCu6NuFX42AEeKtKUGnr%2FCm2Cy8tpFhBPMW5Fxi4Qm4TkDWh4IWFDClhU2hRWosUWqcKLlgyXB%2BlSHaWaHiWlBAR8SeSgSPCQxdVQgzUixWKSTrIQEbU94viDctkvX%2BVSjJuUmV8L4CXShI11esnp0pjWNZIyxKHS4wVQ2ime1P4RnhvGw0aDN1OLAXGERsB7buFpFGGBAre4QEQR0HOIO5oYH305G%2BKspT%2FFupEGGafCCwxSe6ZUa%2B073rXHnNdVXE6eWvibUS27XtRzkH838mYLMBmYysZTM0EM3A1fbpCBYFccN1B%2FEnCYu%2FTgCGmr7bMh8GfYL%2BBfcLvB0gRagC09w9elfldaIy%2FhNCBLRgBgtCC7jAF63wLSMAfbfAlEggYU0bUA7ACCJmTDpEmJtI78w4%2FBO7dN7JR7J7ZvbYaUbaILSQsRBiF3HGk5fEg6p9unwLvn98r%2BvnsV%2B372uf1xBLq4qU%2F45fTuqaAP%2BpssmCCCTF0mhEow8ZXZOS8D7Q85JsxZ%2BAzok7B7O%2Ff6J8AzYBySZQB%2FQHYUSA%2BEeQhEWiS6AIQzgcsDiER4MjgMBAWDV4AgQ3g1eBgIdweCQmCjJEMkJ%2BPKRWyFHHmg1Wi%2F6xzUgA0LREoKJChwnQa9B%2B5RQZRB3IlBlkAnxyQNaANwHMowzlYSMCBgnbpzvqpl0iTJNCQidDI9ZrSYNIRBhHtUa5YHMHxyGEik9hDE0AKj72AbTCaxtHPUaKZdAZSnQTyjGqGLsmBStCejApUhg4uBMU6mATujEl%2BKdDPbI6Ag4vLr%2BhjY6lbjBeoLKnZl0UZgRX8gTySOeynZVz1wOq7e1hFGYIq%2BMhrGxDLak0PrwYzSXtcuyhXEhwOYofiW%2BEcI%2Fjw8P6IY6ed%2BetAbuqKp5QIapT77LnAe505lMuqL79a0ut4rWexzFttsOsLDy7zvtQzcq3U1qabe7tB0wHWVXji%2BzDbo8x8HyIRUbXnwUcklFv51fvTymiV%2BMXLSmGH9d9%2BaXpD5X6lao41anWGig7IwIdnoBY2ht%2FpO9mClLo4NdXHAsefqWUKlXJkbqPOFhMoR4aiA1BXqhRNbB2Xwi%2B7u%2FjpAoOpKJ0UX24EsrzMfHXViakCNcKjBxuQX8BO0ZqjJ3xXzf%2B61t2VXOSgJ8xu65QKgtN6FibPmPYsXbJRHHqbgATcSZxBqGiDiU4NNNsYBsKD0MIP%2FOfKnlk%2FLkaid%2FO2NbKeuQrwOB2Gq3YHyr6ALgzym5wIBnsdC1ZkoBFZSQXChZvlesPqvK2c5oHHT3Q65jYpNxnQcGF0EHbvYqoFw60WNlXIHQF2HQB7zD6lWjZ9rVqUKBXUT6hrkZOle0RFYII0V5ZYGl1JAP0Ud1fZZMvSomBzJ710j4Me8mjQDwEre5Uv2wQfk1ifDwb5ksuJQQ3xt423lbuQjvoIQByQrNDh1JxGFkOdlJvu%2FgFtuW0wR4cgd%2BZKesSV7QkNE2kw6AV4hoIuC02LGmTomyf8PiO6CZzOTLTPQ%2BHW06H%2Btx%2BbQ8LmDYg1pTFrp2oJXgkZTyeRJZM0C8aE2LpFrNVDuhARsN543%2FFV6klQ6Tv1OoZGXLv0igKrl%2FCmJxRmX7JJbJ998VSIPQRyDBICzl4JJlYHbdql30NvYcOuZ7a10uWRrgoieOdgIm4rlq6vNOQBuqESLbXG5lzdJGHw2m0sDYmODXbYGTfSTGRKpssTO95fothJCjUGQgEL4yKoGAF%2F0SrpUDNn8CBgBcSDQByAeNkCXp4S4Ro2Xh4OeaGRgR66PVOsU8bc6TR5%2FxTcn4IVMLOkXSWiXxkZQCbvKfmoAvQaKjO3EDKwkwqHChCDEM5loQRPd5ACBki1TjF772oaQhQbQ5C0lcWXPFOzrfsDGUXGrpxasbG4iab6eByaQkQfm0VFlP0ZsDkvvqCL6QXMUwCjdMx1ZOyKhTJ7a1GWAdOUcJ8RSejxNVyGs31OKMyRyBVoZFjqIkmKlLQ5eHMeEL4MkUf23cQ%2F1SgRCJ1dk4UdBT7OoyuNgLs0oCd8RnrEIb6QdMxT2QjD4zMrJkfgx5aDMcA4orsTtKCqWb%2FVeyceqa5OGSmB28YwH4rFbkQaLoUN8OQQYnD3w2eXpI4ScQfbCUZiJ4yMOIKLyyTc7BQ4uXUw6Ee6%2FxM%2B4Y67ngNBknxIPwuppgIhFcwJyr6EIj%2BLzNj%2FmfR2vhhRlx0BILZoAYruF0caWQ7YxO66UmeguDREAFHYuC7HJviRgVO6ruJH59h%2FC%2FPkgSle8xNzZJULLWq9JMDTE2fjGE146a1Us6PZDGYle6ldWRqn%2FpdpgHKNGrGIdkRK%2BKPETT9nKT6kLyDI8xd9A1FgWmXWRAIHwZ37WyZHOVyCadJEmMVz0MadMjDrPho%2BEIochkVC2xgGiwwsQ6DMv2P7UXqT4x7CdcYGId2BJQQa85EQKmCmwcRejQ9Bm4oATENFPkxPXILHpMPUyWTI5rjNOsIlmEeMbcOCEqInpXACYQ9DDxmFo9vcmsDblcMtg4tqBerNngkIKaFJmrQAPnq1dEzsMXcwjcHdfdCibcAxxA%2Bq%2Fj9m3LM%2FO7WJka4tSidVCjsvo2lQ%2F2ewyoYyXwAYyr2PlRoR5MpgVmSUIrM3PQxXPbgjBOaDQFIyFMJvx3Pc5RSYj12ySVF9fwFPQu2e2KWVoL9q3Ayv3IzpGHUdvdPdrNUdicjsTQ2ISy7QU3DrEytIjvbzJnAkmANXjAFERA0MUoPF3%2F5KFmW14bBNOhwircYgMqoDpUMcDtCmBE82QM2YtdjVLB4kBuKho%2FbcwQdeboqfQartuU3CsCf%2BcXkgYAqp%2F0Ee3RorAZt0AvvOCSI4JICIlGlsV0bsSid%2FNIEALAAzb6HAgyWHBps6xAOwkJIGcB82CxRQq4sJf3FzA70A%2BTRqcqjEMETCoez3mkPcpnoALs0ugJY8kQwrC%2BJE5ik3w9rzrvDRjAQnqgEVvdGrNwlanR0SOKWzxOJOvLJhcd8Cl4AshACUkv9czdMkJCVQSQhp6kp7StAlpVRpK0t0SW6LHeBJnE2QchB5Ccu8kxRghZXGIgZIiSj7gEKMJDClcnX6hgoqJMwiQDigIXg3ioFLCgDgjPtYHYpsF5EiA4kcnN18MZtOrY866dEQAb0FB34OGKHGZQjwW%2FWDHA60cYFaI%2FPjpzquUqdaYGcIq%2BmLez3WLFFCtNBN2QJcrlcoELgiPku5R5dSlJFaCEqEZle1AQzAKC%2B1SotMcBNyQUFuRHRF6OlimSBgjZeTBCwLyc6A%2BP%2FoFRchXTz5ADknYJHxzrJ5pGuIKRQISU6WyKTBBjD8WozmVYWIsto1AS5rxzKlvJu4E%2FvwOiKxRtCWsDM%2BeTHUrmwrCK5BIfMzGkD%2B0Fk5LzBs0jMYXktNDblB06LMNJ09U8pzSLmo14MS0OMjcdrZ31pyQqxJJpRImlSvfYAK8inkYU52QY2FPEVsjoWewpwhRp5yAuNpkqhdb7ku9Seefl2D0B8SMTFD90xi4CSOwwZy9IKkpMtI3FmFUg3%2FkFutpQGNc3pCR7gvC4sgwbupDu3DyEN%2BW6YGLNM21jpB49irxy9BSlHrVDlnihGKHwPrbVFtc%2Bh1rVQKZduxIyojccZIIcOCmhEnC7UkY68WXKQgLi2JCDQkQWJRQuk60hZp0D3rtCTINSeY9Ej2kIKYfGxwOs4j9qMM7fYZiipzgcf7TamnehqdhsiMiCawXnz4xAbyCkLAx5EGbo3Ax1u3dUIKnTxIaxwQTHehPl3V491H0%2BbC5zgpGz7Io%2BmjdhKlPJ01EeMpM7UsRJMi1nGjmJg35i6bQBAAxjO%2FENJubU2mg3ONySEoWklCwdABETcs7ck3jgiuU9pcKKpbgn%2B3YlzV1FzIkB6pmEDOSSyDfPPlQskznctFji0kpgZjW5RZe6x9kYT4KJcXg0bNiCyif%2BpZACCyRMmYsfiKmN9tSO65F0R2OO6ytlEhY5Sj6uRKfFxw0ijJaAx%2Fk3QgnAFSq27%2F2i4GEBA%2BUvTJKK%2F9eISNvG46Em5RZfjTYLdeD8kdXHyrwId%2FDQZUaMCY4gGbke2C8vfjgV%2FY9kkRQOJIn%2FxM9INZSpiBnqX0Q9GlQPpPKAyO5y%2BW5NMPSRdBCUlmuxl40ZfMCnf2Cp044uI9WLFtCi4YVxKjuRCOBWIb4XbIsGdbo4qtMQnNOQz4XDSui7W%2FN6l54qOynCqD3DpWQ%2BmpD7C40D8BZEWGJX3tlAaZBMj1yjvDYKwCJBa201u6nBKE5UE%2B7QSEhCwrXfbRZylAaAkplhBWX50dumrElePyNMRYUrC99UmcSSNgImhFhDI4BXjMtiqkgizUGCrZ8iwFxU6fQ8GEHCFdLewwxYWxgScAYMdMLmcZR6b7rZl95eQVDGVoUKcRMM1ixXQtXNkBETZkVVPg8LoSrdetHzkuM7DjZRHP02tCxA1fmkXKF3VzfN1pc1cv%2F8lbTIkkYpqKM9VOhp65ktYk%2BQ46myFWBapDfyWUCnsnI00QTBQmuFjMZTcd0V2NQ768Fhpby04k2IzNR1wKabuGJqYWwSly6ocMFGTeeI%2BejsWDYgEvr66QgqdcIbFYDNgsm0x9UHY6SCd5%2B7tpsLpKdvhahIDyYmEJQCqMqtCF6UlrE5GXRmbu%2Bvtm3BFSxI6ND6UxIE7GsGMgWqghXxSnaRJuGFveTcK5ZVSPJyjUxe1dKgI6kNF7EZhIZs8y8FVqwEfbM0Xk2ltORVDKZZM40SD3qQoQe0orJEKwPfZwm3YPqwixhUMOndis6MhbmfvLBKjC8sKKIZKbJk8L11oNkCQzCgvjhyyEiQSuJcgCQSG4Mocfgc0Hkwcjal1UNgP0CBPikYqBIk9tONv4kLtBswH07vUCjEaHiFGlLf8MgXKzSgjp2HolRRccAOh0ILHz9qlGgIFkwAnzHJRjWFhlA7ROwINyB5HFj59PRZHFor6voq7l23EPNRwdWhgawqbivLSjRA4htEYUFkjESu67icTg5S0aW1sOkCiIysfJ9UnIWevOOLGpepcBxy1wEhd2WI3AZg7sr9WBmHWyasxMcvY%2FiOmsLtHSWNUWEGk9hScMPShasUA1AcHOtRZlqMeQ0OzYS9vQvYUjOLrzP07BUAFikcJNMi7gIxEw4pL1G54TcmmmoAQ5s7TGWErJZ2Io4yQ0ljRYhL8H5e62oDtLF8aDpnIvZ5R3GWJyAugdiiJW9hQAVTsnCBHhwu7rkBlBX6r3b7ejEY0k5GGeyKv66v%2B6dg7mcJTrWHbtMywbedYqCQ0FPwoytmSWsL8WTtChZCKKzEF7vP6De4x2BJkkniMgSdWhbeBSLtJZR9CTHetK1xb34AYIJ37OegYIoPVbXgJ%2FqDQK%2BbfCtxQRVKQu77WzOoM6SGL7MaZwCGJVk46aImai9fmam%2BWpHG%2B0BtQPWUgZ7RIAlPq6lkECUhZQ2gqWkMYKcYMYaIc4gYCDFHYa2d1nzp3%2BJ1eCBay8IYZ0wQRKGAqvCuZ%2FUgbQPyllosq%2BXtfKIZOzmeJqRazpmmoP%2F76YfkjzV2NlXTDSBYB04SVlNQsFTbGPk1t%2FI4Jktu0XSgifO2ozFOiwd%2F0SssJDn0dn4xqk4GDTTKX73%2FwQyBLdqgJ%2BWx6AQaba3BA9CKEzjtQYIfAsiYamapq80LAamYjinlKXUkxdpIDk0puXUEYzSalfRibAeDAKpNiqQ0FTwoxuGYzRnisyTotdVTclis1LHRQCy%2FqqL8oUaQzWRxilq5Mi0IJGtMY02cGLD69vGjkj3p6pGePKI8bkBv5evq8SjjyU04vJR2cQXQwSJyoinDsUJHCQ50jrFTT7yRdbdYQMB3MYCb6uBzJ9ewhXYPAIZSXfeEQBZZ3GPN3Nbhh%2FwkvAJLXnQMdi5NYYZ5GHE400GS5rXkOZSQsdZgIbzRnF9ueLnsfQ47wHAsirITnTlkCcuWWIUhJSbpM3wWhXNHvt2xUsKKMpdBSbJnBMcihkoDqAd1Zml%2FR4yrzow1Q2A5G%2Bkzo%2FRhRxQS2lCSDRV8LlYLBOOoo1bF4jwJAwKMK1tWLHlu9i0j4Ig8qVm6wE1DxXwAwQwsaBWUg2pOOol2dHxyt6npwJEdLDDVYyRc2D0HbcbLUJQj8gPevQBUBOUHXPrsAPBERICpnYESeu2OHotpXQxRGlCCtLdIsu23MhZVEoJg8Qumj%2FUMMc34IBqTKLDTp76WzL%2FdMjCxK7MjhiGjeYAC%2Fkj%2FjY%2FRde7hpSM1xChrog6yZ7OWTuD56xBJnGFE%2BpT2ElSyCnJcwVzCjkqeNLfMEJqKW0G7OFIp0G%2B9mh50I9o8k1tpCY0xYqFNIALgIfc2me4n1bmJnRZ89oepgLPT0NTMLNZsvSCZAc3TXaNB07vail36%2FdBySis4m9%2FDR8izaLJW6bWCkVgm5T%2Bius3ZXq4xI%2BGnbveLbdRwF2mNtsrE0JjYc1AXknCOrLSu7Te%2Fr4dPYMCl5qtiHNTn%2BTPbh1jCBHH%2BdMJNhwNgs3nT%2BOhQoQ0vYif56BMG6WowAcHR3DjQolxLzyVekHj00PBAaW7IIAF1EF%2BuRIWyXjQMAs2chdpaKPNaB%2BkSezYt0%2BCA04sOg5vx8Fr7Ofa9sUv87h7SLAUFSzbetCCZ9pmyLt6l6%2FTzoA1%2FZBG9bIUVHLAbi%2FkdBFgYGyGwRQGBpkqCEg2ah9UD6EedEcEL3j4y0BQQCiExEnocA3SZboh%2Bepgd3YsOkHskZwPuQ5OoyA0fTA5AXrHcUOQF%2BzkJHIA7PwCDk1gGVmGUZSSoPhNf%2BTklauz98QofOlCIQ%2FtCD4dosHYPqtPCXB3agggQQIqQJsSkB%2Bqn0rkQ1toJjON%2FOtCIB9RYv3PqRA4C4U68ZMlZn6BdgEvi2ziU%2BTQ6NIw3ej%2BAtDwMGEZk7e2IjxUWKdAxyaw9OCwSmeADTPPleyk6UhGDNXQb%2B%2BW6Uk4q6F7%2Frg6WVTo82IoCxSIsFDrav4EPHphD3u4hR53WKVvYZUwNCCeM4PMBWzK%2BEfIthZOkuAwPo5C5jgoZgn6dUdvx5rIDmd58cXXdKNfw3l%2BwM2UjgrDJeQHhbD7HW2QDoZMCujgIUkk5Fg8VCsdyjOtnGRx8wgKRPZN5dR0zPUyfGZFVihbFRniXZFOZGKPnEQzU3AnD1KfR6weHW2XS6KbPJxUkOTZsAB9vTVp3Le1F8q5l%2BDMcLiIq78jxAImD2pGFw0VHfRatScGlK6SMu8leTmhUSMy8Uhdd6xBiH3Gdman4tjQGLboJfqz6fL2WKHTmrfsKZRYX6BTDjDldKMosaSTLdQS7oDisJNqAUhw1PfTlnacCO8vl8706Km1FROgLDmudzxg%2BEWTiArtHgLsRrAXYWdB0NmToNCJdKm0KWycZQqb%2BMw76Qy29iQ5up%2FX7oyw8QZ75kP5F6iJAJz6KCmqxz8fEa%2FxnsMYcIO%2FvEkGRuMckhr4rIeLrKaXnmIzlNLxbFspOphkcnJdnz%2FChp%2FVlpj2P7jJQmQRwGnltkTV5dbF9fE3%2FfxoSqTROgq9wFUlbuYzYcasE0ouzBo%2BdDCDzxKAfhbAZYxQiHrLzV2iVexnDX%2FQnT1fsT%2Fxuhu1ui5qIytgbGmRoQkeQooO8eJNNZsf0iALur8QxZFH0nCMnjerYQqG1pIfjyVZWxhVRznmmfLG00BcBWJE6hzQWRyFknuJnXuk8A5FRDCulwrWASSNoBtR%2BCtGdkPwYN2o7DOw%2FVGlCZPusRBFXODQdUM5zeHDIVuAJBLqbO%2Ff9Qua%2BpDqEPk230Sob9lEZ8BHiCorjVghuI0lI4JDgHGRDD%2FprQ84B1pVGkIpVUAHCG%2Biz3Bn3qm2AVrYcYWhock4jso5%2BJ7HfHVj4WMIQdGctq3psBCVVzupQOEioBGA2Bk%2BUILT7%2BVoX5mdxxA5fS42gISQVi%2FHTzrgMxu0fY6hE1ocUwwbsbWcezrY2n6S8%2F6cxXkOH4prpmPuFoikTzY7T85C4T2XYlbxLglSv2uLCgFv8Quk%2FwdesUdWPeHYIH0R729JIisN9Apdd4eB10aqwXrPt%2BSu9mA8k8n1sjMwnfsfF2j3jMUzXepSHmZ%2FBfqXvzgUNQQWOXO8YEuFBh4QTYCkOAPxywpYu1VxiDyJmKVcmJPGWk%2Fgc3Pov02StyYDahwmzw3E1gYC9wkupyWfDqDSUMpCTH5e5N8B%2F%2FlHiMuIkTNw4USHrJU67bjXGqNav6PBuQSoqTxc8avHoGmvqNtXzIaoyMIQIiiUHIM64cXieouplhNYln7qgc4wBVAYR104kO%2BCvKqsg4yIUlFNThVUAKZxZt1XA34h3TCUUiXVkZ0w8Hh2R0Z5L0b4LZvPd%2Fp1gi%2F07h8qfwHrByuSxglc9cI4QIg2oqvC%2Fqm0i7tjPLTgDhoWTAKDO2ONW5oe%2B%2FeKB9vZB8K6C25yCZ9RFVMnb6NRdRjyVK57CHHSkJBfnM2%2Fj4ODUwRkqrtBBCrDsDpt8jhZdXoy%2F1BCqw3sSGhgGGy0a5Jw6BP%2FTExoCmNFYjZl248A0osgPyGEmRA%2BfAsqPVaNAfytu0vuQJ7rk3J4kTDTR2AlCHJ5cls26opZM4w3jMULh2YXKpcqGBtuleAlOZnaZGbD6DHzMd6i2oFeJ8z9XYmalg1Szd%2FocZDc1C7Y6vcALJz2lYnTXiWEr2wawtoR4g3jvWUU2Ngjd1cewtFzEvM1NiHZPeLlIXFbBPawxNgMwwAlyNSuGF3zizVeOoC9bag1qRAQKQE%2FEZBWC2J8mnXAN2aTBboZ7HewnObE8CwROudZHmUM5oZ%2FUgd%2FJZQK8lvAm43uDRAbyW8gZ%2BZGq0EVerVGUKUSm%2FIdn8AQHdR4m7bue88WBwft9mSCeMOt1ncBwziOmJYI2ZR7ewNMPiCugmSsE4EyQ%2BQATJG6qORMGd4snEzc6B4shPIo4G1T7PgSm8PY5eUkPdF8JZ0VBtadbHXoJgnEhZQaODPj2gpODKJY5Yp4DOsLBFxWbvXN755KWylJm%2BoOd4zEL9Hpubuy2gyyfxh8oEfFutnYWdfB8PdESLWYvSqbElP9qo3u6KTmkhoacDauMNNjj0oy40DFV7Ql0aZj77xfGl7TJNHnIwgqOkenruYYNo6h724%2BzUQ7%2BvkCpZB%2BpGA562hYQiDxHVWOq0oDQl%2FQsoiY%2BcuI7iWq%2FZIBtHcXJ7kks%2Bh2fCNUPA82BzjnqktNts%2BRLdk1VSu%2BtqEn7QZCCsvEqk6FkfiOYkrsw092J8jsfIuEKypNjLxrKA9kiA19mxBD2suxQKCzwXGws7kEJvlhUiV9tArLIdZW0IORcxEzdzKmjtFhsjKy%2F44XYXdI5noQoRcvjZ1RMPACRqYg2V1%2BOwOepcOknRLLFdYgTkT5UApt%2FJhLM3jeFYprZV%2BZow2g8fP%2BU68hkKFWJj2yBbKqsrp25xkZX1DAjUw52IMYWaOhab8Kp05VrdNftqwRrymWF4OQSjbdfzmRZirK8FMJELEgER2PHjEAN9pGfLhCUiTJFbd5LBkOBMaxLr%2FA1SY9dXFz4RjzoU9ExfJCmx%2FI9FKEGT3n2cmzl2X42L3Jh%2BAbQq6sA%2BSs1kitoa4TAYgKHaoybHUDJ51oETdeI%2F9ThSmjWGkyLi5QAGWhL0BG1UsTyRGRJOldKBrYJeB8ljLJHfATWTEQBXBDnQexOHTB%2BUn44zExFE4vLytcu5NwpWrUxO%2F0ZICUGM7hGABXym0V6ZvDST0E370St9MIWQOTWngeoQHUTdCJUP04spMBMS8LSker9cReVQkULFDIZDFPrhTzBl6sed9wcZQTbL%2BBDqMyaN3RJPh%2Fanbx%2BIv%2BqgQdAa3M9Z5JmvYlh4qop%2BHo1F1W5gbOE9YKLgAnWytXElU4G8GtW47lhgFE6gaSs%2Bgs37sFvi0PPVvA5dnCBgILTwoKd%2F%2BDoL9F6inlM7H4rOTzD79KJgKlZO%2FZgt22UsKhrAaXU5ZcLrAglTVKJEmNJvORGN1vqrcfSMizfpsgbIe9zno%2BgBoKVXgIL%2FVI8dB1O5o%2FR3Suez%2FgD7M781ShjKpIIORM%2FnxG%2BjjhhgPwsn2IoXsPGPqYHXA63zJ07M2GPEykQwJBYLK808qYxuIew4frk52nhCsnCYmXiR6CuapvE1IwRB4%2FQftDbEn%2BAucIr1oxrLabRj9q4ae0%2BfXkHnteAJwXRbVkR0mctVSwEbqhJiMSZUp9DNbEDMmjX22m3ABpkrPQQTP3S1sib5pD2VRKRd%2BeNAjLYyT0hGrdjWJZy24OYXRoWQAIhGBZRxuBFMjjZQhpgrWo8SiFYbojcHO8V5DyscJpLTHyx9Fimassyo5U6WNtquUMYgccaHY5amgR3PQzq3ToNM5ABnoB9kuxsebqmYZm0R9qxJbFXCQ1UPyFIbxoUraTJFDpCk0Wk9GaYJKz%2F6oHwEP0Q14lMtlddQsOAU9zlYdMVHiT7RQP3XCmWYDcHCGbVRHGnHuwzScA0BaSBOGkz3lM8CArjrBsyEoV6Ys4qgDK3ykQQPZ3hCRGNXQTNNXbEb6tDiTDLKOyMzRhCFT%2BmAUmiYbV3YQVqFVp9dorv%2BTsLeCykS2b5yyu8AV7IS9cxcL8z4Kfwp%2BxJyYLv1OsxQCZwTB4a8BZ%2F5EdxTBJthApqyfd9u3ifr%2FWILTqq5VqgwMT9SOxbSGWLQJUUWCVi4k9tho9nEsbUh7U6NUsLmkYFXOhZ0kmamaJLRNJzSj%2Fqn4Mso6zb6iLLBXoaZ6AqeWCjHQm2lztnejYYM2eubnpBdKVLORZhudH3JF1waBJKA9%2BW8EhMj3Kzf0L4vi4k6RoHh3Z5YgmSZmk6ns4fjScjAoL8GoOECgqgYEBYUGFVO4FUv4%2FYtowhEmTs0vrvlD%2FCrisnoBNDAcUi%2FteY7OctFlmARQzjOItrrlKuPO6E2Ox93L4O%2F4DcgV%2FdZ7qR3VBwVQxP1GCieA4RIpweYJ5FoYrHxqRBdJjnqbsikA2Ictbb8vE1GYIo9dacK0REgDX4smy6GAkxlH1yCGGsk%2BtgiDhNKuKu3yNrMdxafmKTF632F8Vx4BNK57GvlFisrkjN9WDAtjsWA0ENT2e2nETUb%2Fn7qwhvGnrHuf5bX6Vh%2Fn3xffU3PeHdR%2BFA92i6ufT3AlyAREoNDh6chiMWTvjKjHDeRhOa9YkOQRq1vQXEMppAQVwHCuIcV2g5rBn6GmZZpTR7vnSD6ZmhdSl176gqKTXu5E%2BYbfL0adwNtHP7dT7t7b46DVZIkzaRJOM%2BS6KcrzYVg%2BT3wSRFRQashjfU18NutrKa%2F7PXbtuJvpIjbgPeqd%2BpjmRw6YKpnANFSQcpzTZgpSNJ6J7uiagAbir%2F8tNXJ%2FOsOnRh6iuIexxrmkIneAgz8QoLmiaJ8sLQrELVK2yn3wOHp57BAZJhDZjTBzyoRAuuZ4eoxHruY1pSb7qq79cIeAdOwin4GdgMeIMHeG%2BFZWYaiUQQyC5b50zKjYw97dFjAeY2I4Bnl105Iku1y0lMA1ZHolLx19uZnRdILcXKlZGQx%2FGdEqSsMRU1BIrFqRcV1qQOOHyxOLXEGcbRtAEsuAC2V4K3p5mFJ22IDWaEkk9ttf5Izb2LkD1MnrSwztXmmD%2FQi%2FEmVEFBfiKGmftsPwVaIoZanlKndMZsIBOskFYpDOq3QUs9aSbAAtL5Dbokus2G4%2FasthNMK5UQKCOhU97oaOYNGsTah%2BjfCKsZnTRn5TbhFX8ghg8CBYt%2FBjeYYYUrtUZ5jVij%2Fop7V5SsbA4mYTOwZ46hqdpbB6Qvq3AS2HHNkC15pTDIcDNGsMPXaBidXYPHc6PJAkRh29Vx8KcgX46LoUQBhRM%2B3SW6Opll%2FwgxxsPgKJKzr5QCmwkUxNbeg6Wj34SUnEzOemSuvS2OetRCO8Tyy%2BQbSKVJcqkia%2BGvDefFwMOmgnD7h81TUtMn%2BmRpyJJ349HhAnoWFTejhpYTL9G8N2nVg1qkXBeoS9Nw2fB27t7trm7d%2FQK7Cr4uoCeOQ7%2F8JfKT77KiDzLImESHw%2F0wf73QeHu74hxv7uihi4fTX%2BXEwAyQG3264dwv17aJ5N335Vt9sdrAXhPOAv8JFvzqyYXwfx8WYJaef1gMl98JRFyl5Mv5Uo%2FoVH5ww5OzLFsiTPDns7fS6EURSSWd%2F92BxMYQ8sBaH%2Bj%2BwthQPdVgDGpTfi%2BJQIWMD8xKqULliRH01rTeyF8x8q%2FGBEEEBrAJMPf25UQwi0b8tmqRXY7kIvNkzrkvRWLnxoGYEJsz8u4oOyMp8cHyaybb1HdMCaLApUE%2B%2F7xLIZGP6H9xuSEXp1zLIdjk5nBaMuV%2FyTDRRP8Y2ww5RO6d2D94o%2B6ucWIqUAvgHIHXhZsmDhjVLczmZ3ca0Cb3PpKwt2UtHVQ0BgFJsqqTsnzZPlKahRUkEu4qmkJt%2Bkqdae76ViWe3STan69yaF9%2BfESD2lcQshLHWVu4ovItXxO69bqC5p1nZLvI8NdQB9s9UNaJGlQ5mG947ipdDA0eTIw%2FA1zEdjWquIsQXXGIVEH0thC5M%2BW9pZe7IhAVnPJkYCCXN5a32HjN6nsvokEqRS44tGIs7s2LVTvcrHAF%2BRVmI8L4HUYk4x%2B67AxSMJKqCg8zrGOgvK9kNMdDrNiUtSWuHFpC8%2Fp5qIQrEo%2FH%2B1l%2F0cAwQ2nKmpWxKcMIuHY44Y6DlkpO48tRuUGBWT0FyHwSKO72Ud%2BtJUfdaZ4CWNijzZtlRa8%2BCkmO%2FEwHYfPZFU%2FhzjFWH7vnzHRMo%2BaF9u8qHSAiEkA2HjoNQPEwHsDKOt6hOoK3Ce%2F%2B%2F9boMWDa44I6FrQhdgS7OnNaSzwxWKZMcyHi6LN4WC6sSj0qm2PSOGBTvDs%2FGWJS6SwEN%2FULwpb4LQo9fYjUfSXRwZkynUazlSpvX9e%2BG2zor8l%2BYaMxSEomDdLHGcD6YVQPegTaA74H8%2BV4WvJkFUrjMLGLlvSZQWvi8%2FQA7yzQ8GPno%2F%2F5SJHRP%2FOqKObPCo81s%2F%2B6WgLqykYpGAgQZhVDEBPXWgU%2FWzFZjKUhSFInufPRiMAUULC6T11yL45ZrRoB4DzOyJShKXaAJIBS9wzLYIoCEcJKQW8GVCx4fihqJ6mshBUXSw3wWVj3grrHQlGNGhIDNNzsxQ3M%2BGWn6ASobIWC%2BLbYOC6UpahVO13Zs2zOzZC8z7FmA05JhUGyBsF4tsG0drcggIFzgg%2Fkpf3%2BCnAXKiMgIE8Jk%2FMhpkc8DUJEUzDSnWlQFme3d0sHZDrg7LavtsEX3cHwjCYA17pMTfx8Ajw9hHscN67hyo%2BRJQ4458RmPywXykkVcW688oVUrQhahpPRvTWPnuI0B%2BSkQu7dCyvLRyFYlC1LG1gRCIvn3rwQeINzZQC2KXq31FaR9UmVV2QeGVqBHjmE%2BVMd3b1fhCynD0pQNhCG6%2FWCDbKPyE7NRQzL3BzQAJ0g09aUzcQA6mUp9iZFK6Sbp%2FYbHjo%2B%2B7%2FWj8S4YNa%2BZdqAw1hDrKWFXv9%2BzaXpf8ZTDSbiqsxnwN%2FCzK5tPkOr4tRh2kY3Bn9JtalbIOI4b3F7F1vPQMfoDcdxMS8CW9m%2FNCW%2FHILTUVWQIPiD0j1A6bo8vsv6P1hCESl2abrSJWDrq5sSzUpwoxaCU9FtJyYH4QFMxDBpkkBR6kn0LMPO%2B5EJ7Z6bCiRoPedRZ%2FP0SSdii7ZnPAtVwwHUidcdyspwncz5uq6vvm4IEDbJVLUFCn%2FLvIHfooUBTkFO130FC7CmmcrKdgDJcid9mvVzsDSibOoXtIf9k6ABle3PmIxejodc4aob0QKS432srrCMndbfD454q52V01G4q913mC5HOsTzWF4h2No1av1VbcUgWAqyoZl%2B11PoFYnNv2HwAODeNRkHj%2B8SF1fcvVBu6MrehHAZK1Gm69ICcTKizykHgGFx7QdowTVAsYEF2tVc0Z6wLryz2FI1sc5By2znJAAmINndoJiB4sfPdPrTC8RnkW7KRCwxC6YvXg5ahMlQuMpoCSXjOlBy0Kij%2BbsCYPbGp8BdCBiLmLSAkEQRaieWo1SYvZIKJGj9Ur%2FeWHjiB7SOVdqMAVmpBvfRiebsFjger7DC%2B8kRFGtNrTrnnGD2GAJb8rQCWkUPYHhwXsjNBSkE6lGWUj5QNhK0DMNM2l%2BkXRZ0KLZaGsFSIdQz%2FHXDxf3%2FTE30%2BDgBKWGWdxElyLccJfEpjsnszECNoDGZpdwdRgCixeg9L4EPhH%2BRptvRMVRaahu4cySjS3P5wxAUCPkmn%2BrhyASpmiTaiDeggaIxYBmtLZDDhiWIJaBgzfCsAGUF1Q1SFZYyXDt9skCaxJsxK2Ms65dmdp5WAZyxik%2FzbrTQk5KmgxCg%2Ff45L0jywebOWUYFJQAJia7XzCV0x89rpp%2Ff3AVWhSPyTanqmik2SkD8A3Ml4NhIGLAjBXtPShwKYfi2eXtrDuKLk4QlSyTw1ftXgwqA2jUuopDl%2B5tfUWZNwBpEPXghzbBggYCw%2Fdhy0ntds2yeHCDKkF%2FYxQjNIL%2FF%2F37jLPHCKBO9ibwYCmuxImIo0ijV2Wbg3kSN2psoe8IsABv3RNFaF9uMyCtCYtqcD%2BqNOhwMlfARQUdJ2tUX%2BMNJqOwIciWalZsmEjt07tfa8ma4cji9sqz%2BQ9hWfmMoKEbIHPOQORbhQRHIsrTYlnVTNvcq1imqmmPDdVDkJgRcTgB8Sb6epCQVmFZe%2BjGDiNJQLWnfx%2BdrTKYjm0G8yH0ZAGMWzEJhUEQ4Maimgf%2Fbkvo8PLVBsZl152y5S8%2BHRDfZIMCbYZ1WDp4yrdchOJw8k6R%2B%2F2pHmydK4NIK2PHdFPHtoLmHxRDwLFb7eB%2BM4zNZcB9NrAgjVyzLM7xyYSY13ykWfIEEd2n5%2FiYp3ZdrCf7fL%2Ben%2BsIJu2W7E30MrAgZBD1rAAbZHPgeAMtKCg3NpSpYQUDWJu9bT3V7tOKv%2BNRiJc8JAKqqgCA%2FPNRBR7ChpiEulyQApMK1AyqcWnpSOmYh6yLiWkGJ2mklCSPIqN7UypWj3dGi5MvsHQ87MrB4VFgypJaFriaHivwcHIpmyi5LhNqtem4q0n8awM19Qk8BOS0EsqGscuuydYsIGsbT5GHnERUiMpKJl4ON7qjB4fEqlGN%2FhCky89232UQCiaeWpDYCJINXjT6xl4Gc7DxRCtgV0i1ma4RgWLsNtnEBRQFqZggCLiuyEydmFd7WlogpkCw5G1x4ft2psm3KAREwVwr1Gzl6RT7FDAqpVal34ewVm3VH4qn5mjGj%2BbYL1NgfLNeXDwtmYSpwzbruDKpTjOdgiIHDVQSb5%2FzBgSMbHLkxWWgghIh9QTFSDILixVwg0Eg1puooBiHAt7DzwJ7m8i8%2Fi%2BjHvKf0QDnnHVkVTIqMvIQImOrzCJwhSR7qYB5gSwL6aWL9hERHCZc4G2%2BJrpgHNB8eCCmcIWIQ6rSdyPCyftXkDlErUkHafHRlkOIjxGbAktz75bnh50dU7YHk%2BMz7wwstg6RFZb%2BTZuSOx1qqP5C66c0mptQmzIC2dlpte7vZrauAMm%2F7RfBYkGtXWGiaWTtwvAQiq2oD4YixPLXE2khB2FRaNRDTk%2B9sZ6K74Ia9VntCpN4BhJGJMT4Z5c5FhSepRCRWmBXqx%2BwhVZC4me4saDs2iNqXMuCl6iAZflH8fscC1sTsy4PHeC%2BXYuqMBMUun5YezKbRKmEPwuK%2BCLzijPEQgfhahQswBBLfg%2FGBgBiI4QwAqzJkkyYAWtjzSg2ILgMAgqxYfwERRo3zruBL9WOryUArSD8sQOcD7fvIODJxKFS615KFPsb68USBEPPj1orNzFY2xoTtNBVTyzBhPbhFH0PI5AtlJBl2aSgNPYzxYLw7XTDBDinmVoENwiGzmngrMo8OmnRP0Z0i0Zrln9DDFcnmOoBZjABaQIbPOJYZGqX%2BRCMlDDbElcjaROLDoualmUIQ88Kekk3iM4OQrADcxi3rJguS4MOIBIgKgXrjd1WkbCdqxJk%2F4efRIFsavZA7KvvJQqp3Iid5Z0NFc5aiMRzGN3vrpBzaMy4JYde3wr96PjN90AYOIbyp6T4zj8LoE66OGcX1Ef4Z3KoWLAUF4BTg7ug%2FAbkG5UNQXAMkQezujSHeir2uTThgd3gpyzDrbnEdDRH2W7U6PeRvBX1ZFMP5RM%2BZu6UUZZD8hDPHldVWntTCNk7To8IeOW9yn2wx0gmurwqC60AOde4r3ETi5pVMSDK8wxhoGAoEX9NLWHIR33VbrbMveii2jAJlrxwytTHbWNu8Y4N8vCCyZjAX%2FpcsfwXbLze2%2BD%2Bu33OGBoJyAAL3jn3RuEcdp5If8O%2Ba4NKWvxOTyDltG0IWoHhwVGe7dKkCWFT%2B%2Btm%2BhaBCikRUUMrMhYKZJKYoVuv%2FbsJzO8DwfVIInQq3g3BYypiz8baogH3r3GwqCwFtZnz4xMjAVOYnyOi5HWbFA8n0qz1OjSpHWFzpQOpvkNETZBGpxN8ybhtqV%2FDMUxd9uFZmBfKXMCn%2FSqkWJyKPnT6lq%2B4zBZni6fYRByJn6OK%2BOgPBGRAJluwGSk4wxjOOzyce%2FPKODwRlsgrVkdcsEiYrqYdXo0Er2GXi2GQZd0tNJT6c9pK1EEJG1zgDJBoTVuCXGAU8BKTvCO%2FcEQ1Wjk3Zzuy90JX4m3O5IlxVFhYkSUwuQB2up7jhvkm%2BbddRQu5F9s0XftGEJ9JSuSk%2BZachCbdU45fEqbugzTIUokwoAKvpUQF%2FCvLbWW5BNQFqFkJg2f30E%2F48StNe5QwBg8zz3YAJ82FZoXBxXSv4QDooDo79NixyglO9AembuBcx5Re3CwOKTHebOPhkmFC7wNaWtoBhFuV4AkEuJ0J%2B1pT0tLkvFVZaNzfhs%2FKd3%2BA9YsImlO4XK4vpCo%2FelHQi%2F9gkFg07xxnuXLt21unCIpDV%2BbbRxb7FC6nWYTsMFF8%2B1LUg4JFjVt3vqbuhHmDKbgQ4e%2BRGizRiO8ky05LQGMdL2IKLSNar0kNG7lHJMaXr5mLdG3nykgj6vB%2FKVijd1ARWkFEf3yiUw1v%2FWaQivVUpIDdSNrrKbjO5NPnxz6qTTGgYg03HgPhDrCFyYZTi3XQw3HXCva39mpLNFtz8AiEhxAJHpWX13gCTAwgm9YTvMeiqetdNQv6IU0hH0G%2BZManTqDLPjyrOse7WiiwOJCG%2BJ0pZYULhN8NILulmYYvmVcV2MjAfA39sGKqGdjpiPo86fecg65UPyXDIAOyOkCx5NQsLeD4gGVjTVDwOHWkbbBW0GeNjDkcSOn2Nq4cEssP54t9D749A7M1AIOBl0Fi0sSO5v3P7LCBrM6ZwFY6kp2FX6AcbGUdybnfChHPyu6WlRZ2Fwv9YM0RMI7kISRgR8HpQSJJOyTfXj%2F6gQKuihPtiUtlCQVPohUgzfezTg8o1b3n9pNZeco1QucaoXe40Fa5JYhqdTspFmxGtW9h5ezLFZs3j%2FN46f%2BS2rjYNC2JySXrnSAFhvAkz9a5L3pza8eYKHNoPrvBRESpxYPJdKVUxBE39nJ1chrAFpy4MMkf0qKgYALctGg1DQI1kIymyeS2AJNT4X240d3IFQb%2F0jQbaHJ2YRK8A%2Bls6WMhWmpCXYG5jqapGs5%2FeOJErxi2%2F2KWVHiPellTgh%2FfNl%2F2KYPKb7DUcAg%2BmCOPQFCiU9Mq%2FWLcU1xxC8aLePFZZlE%2BPCLzf7ey46INWRw2kcXySR9FDgByXzfxiNKwDFbUSMMhALPFSedyjEVM5442GZ4hTrsAEvZxIieSHGSgkwFh%2FnFNdrrFD4tBH4Il7fW6ur4J8Xaz7RW9jgtuPEXQsYk7gcMs2neu3zJwTyUerHKSh1iTBkj2YJh1SSOZL5pLuQbFFAvyO4k1Hxg2h99MTC6cTUkbONQIAnEfGsGkNFWRbuRyyaEZInM5pij73EA9rPIUfU4XoqQpHT9THZkW%2BoKFLvpyvTBMM69tN1Ydwv1LIEhHsC%2BueVG%2Bw%2BkyCPsvV3erRikcscHjZCkccx6VrBkBRusTDDd8847GA7p2Ucy0y0HdSRN6YIBciYa4vuXcAZbQAuSEmzw%2BH%2FAuOx%2BaH%2BtBL88H57D0MsqyiZxhOEQkF%2F8DR1d2hSPMj%2FsNOa5rxcUnBgH8ictv2J%2Bcb4BA4v3MCShdZ2vtK30vAwkobnEWh7rsSyhmos3WC93Gn9C4nnAd%2FPjMMtQfyDNZsOPd6XcAsnBE%2FmRHtHEyJMzJfZFLE9OvQa0i9kUmToJ0ZxknTgdl%2FXPV8xoh0K7wNHHsnBdvFH3sv52lU7UFteseLG%2FVanIvcwycVA7%2BBE1Ulyb20BvwUWZcMTKhaCcmY3ROpvonVMV4N7yBXTL7IDtHzQ4CCcqF66LjF3xUqgErKzolLyCG6Kb7irP%2FMVTCCwGRxfrPGpMMGvPLgJ881PHMNMIO09T5ig7AzZTX%2F5PLlwnJLDAPfuHynSGhV4tPqR3gJ4kg4c06c%2FF1AcjGytKm2Yb5jwMotF7vro4YDLWlnMIpmPg36NgAZsGA0W1spfLSue4xxat0Gdwd0lqDBOgIaMANykwwDKejt5YaNtJYIkrSgu0KjIg0pznY0SCd1qlC6R19g97UrWDoYJGlrvCE05J%2F5wkjpkre727p5PTRX5FGrSBIfJqhJE%2FIS876PaHFkx9pGTH3oaY3jJRvLX9Iy3Edoar7cFvJqyUlOhAEiOSAyYgVEGkzHdug%2BoRHIEOXAExMiTSKU9A6nmRC8mp8iYhwWdP2U%2F5EkFAdPrZw03YA3gSyNUtMZeh7dDCu8pF5x0VORCTgKp07ehy7NZqKTpIC4UJJ89lnboyAfy5OyXzXtuDRbtAFjZRSyGFTpFrXwkpjSLIQIG3N0Vj4BtzK3wdlkBJrO18MNsgseR4BysJilI0wI6ZahLhBFA0XBmV8d4LUzEcNVb0xbLjLTETYN8OEVqNxkt10W614dd1FlFFVTIgB7%2FBQQp1sWlNolpIu4ekxUTBV7NmxOFKEBmmN%2BnA7pvF78%2FRII5ZHA09OAiE%2F66MF6HQ%2BqVEJCHxwymukkNvzqHEh52dULPbVasfQMgTDyBZzx4007YiKdBuUauQOt27Gmy8ISclPmEUCIcuLbkb1mzQSqIa3iE0PJh7UMYQbkpe%2BhXjTJKdldyt2mVPwywoODGJtBV1lJTgMsuSQBlDMwhEKIfrvsxGQjHPCEfNfMAY2oxvyKcKPUbQySkKG6tj9AQyEW3Q5rpaDJ5Sns9ScLKeizPRbvWYAw4bXkrZdmB7CQopCH8NAmqbuciZChHN8lVGaDbCnmddnqO1PQ4ieMYfcSiBE5zzMz%2BJV%2F4eyzrzTEShvqSGzgWimkNxLvUj86iAwcZuIkqdB0VaIB7wncLRmzHkiUQpPBIXbDDLHBlq7vp9xwuC9AiNkIptAYlG7Biyuk8ILdynuUM1cHWJgeB%2BK3wBP%2FineogxkvBNNQ4AkW0hvpBOQGFfeptF2YTR75MexYDUy7Q%2F9uocGsx41O4IZhViw%2F2FvAEuGO5g2kyXBUijAggWM08bRhXg5ijgMwDJy40QeY%2FcQpUDZiIzmvskQpO5G1zyGZA8WByjIQU4jRoFJt56behxtHUUE%2Fom7Rj2psYXGmq3llVOCgGYKNMo4pzwntITtapDqjvQtqpjaJwjHmDzSVGLxMt12gEXAdLi%2FcaHSM3FPRGRf7dB7YC%2BcD2ho6oL2zGDCkjlf%2FDFoQVl8GS%2F56wur3rdV6ggtzZW60MRB3g%2BU1W8o8cvqIpMkctiGVMzXUFI7FacFLrgtdz4mTEr4aRAaQ2AFQaNeG7GX0yOJgMRYFziXdJf24kg%2FgBQIZMG%2FYcPEllRTVNoDYR6oSJ8wQNLuihfw81UpiKPm714bZX1KYjcXJdfclCUOOpvTxr9AAJevTY4HK%2FG7F3mUc3GOAKqh60zM0v34v%2BELyhJZqhkaMA8UMMOU90f8RKEJFj7EqepBVwsRiLbwMo1J2zrE2UYJnsgIAscDmjPjnzI8a719Wxp757wqmSJBjXowhc46QN4RwKIxqEE6E5218OeK7RfcpGjWG1jD7qND%2B%2FGTk6M56Ig4yMsU6LUW1EWE%2BfIYycVV1thldSlbP6ltdC01y3KUfkobkt2q01YYMmxpKRvh1Z48uNKzP%2FIoRIZ%2FF6buOymSnW8gICitpJjKWBscSb9JJKaWkvEkqinAJ2kowKoqkqZftRqfRQlLtKoqvTRDi2vg%2FRrPD%2Fd3a09J8JhGZlEkOM6znTsoMCsuvTmywxTCDhw5dd0GJOHCMPbsj3QLkTE3MInsZsimDQ3HkvthT7U9VA4s6G07sID0FW4SHJmRGwCl%2BMu4xf0ezqeXD2PtPDnwMPo86sbwDV%2B9PWcgFcARUVYm3hrFQrHcgMElFGbSM2A1zUYA3baWfheJp2AINmTJLuoyYD%2FOwA4a6V0ChBN97E8YtDBerUECv0u0TlxR5yhJCXvJxgyM73Bb6pyq0jTFJDZ4p1Am1SA6sh8nADd1hAcGBMfq4d%2FUfwnmBqe0Jun1n1LzrgKuZMAnxA3NtCN7Klf4BH%2B14B7ibBmgt0TGUafVzI4uKlpF7v8NmgNjg90D6QE3tbx8AjSAC%2BOA1YJvclyPKgT27QpIEgVYpbPYGBsnyCNrGz9XUsCHkW1QAHgL2STZk12QGqmvAB0NFteERkvBIH7INDsNW9KKaAYyDMdBEMzJiWaJHZALqDxQDWRntumSDPcplyFiI1oDpT8wbwe01AHhW6%2BvAUUBoGhY3CT2tgwehdPqU%2F4Q7ZLYvhRl%2FogOvR9O2%2BwkkPKW5vCTjD2fHRYXONCoIl4Jh1bZY0ZE1O94mMGn%2FdFSWBWzQ%2FVYk%2BGezi46RgiDv3EshoTmMSlioUK6MQEN8qeyK6FRninyX8ZPeUWjjbMJChn0n%2FyJvrq5bh5UcCAcBYSafTFg7p0jDgrXo2QWLb3WpSOET%2FHh4oSadBTvyDo10IufLzxiMLAnbZ1vcUmj3w7BQuIXjEZXifwukVxrGa9j%2BDXfpi12m1RbzYLg9J2wFergEwOxFyD0%2FJstNK06ZN2XdZSGWxcJODpQHOq4iKqjqkJUmPu1VczL5xTGUfCgLEYyNBCCbMBFT%2FcUP6pE%2FmujnHsSDeWxMbhrNilS5MyYR0nJyzanWXBeVcEQrRIhQeJA6Xt4f2eQESNeLwmC10WJVHqwx8SSyrtAAjpGjidcj1E2FYN0LObUcFQhafUKTiGmHWRHGsFCB%2BHEXgrzJEB5bp0QiF8ZHh11nFX8AboTD0PS4O1LqF8XBks2MpjsQnwKHF6HgaKCVLJtcr0XjqFMRGfKv8tmmykhLRzu%2BvqQ02%2BKpJBjaLt9ye1Ab%2BBbEBhy4EVdIJDrL2naV0o4wU8YZ2Lq04FG1mWCKC%2BUwkXOoAjneU%2FxHplMQo2cXUlrVNqJYczgYlaOEczVCs%2FOCgkyvLmTmdaBJc1iBLuKwmr6qtRnhowngsDxhzKFAi02tf8bmET8BO27ovJKF1plJwm3b0JpMh38%2BxsrXXg7U74QUM8ZCIMOpXujHntKdaRtsgyEZl5MClMVMMMZkZLNxH9%2Bb8fH6%2Bb8Lev30A9TuEVj9CqAdmwAAHBPbfOBFEATAPZ2CS0OH1Pj%2F0Q7PFUcC8hDrxESWdfgFRm%2B7vvWbkEppHB4T%2F1ApWnlTIqQwjcPl0VgS1yHSmD0OdsCVST8CQVwuiew1Y%2Bg3QGFjNMzwRB2DSsAk26cmA8lp2wIU4p93AUBiUHFGOxOajAqD7Gm6NezNDjYzwLOaSXRBYcWipTSONHjUDXCY4mMI8XoVCR%2FRrs%2FJLKXgEx%2BqkmeDlFOD1%2FyTQNDClRuiUyKYCllfMiQiyFkmuTz2vLsBNyRW%2Bxz%2B5FElFxWB28VjYIGZ0Yd%2B5wIjkcoMaggxswbT0pCmckRAErbRlIlcOGdBo4djTNO8FAgQ%2BlT6vPS60BwTRSUAM3ddkEAZiwtEyArrkiDRnS7LJ%2B2hwbzd2YDQagSgACpsovmjil5wfPuXq3GuH0CyE7FK3M4FgRaFoIkaodORrPx1%2BJpI9psyNYIFuJogZa0%2F1AhOWdlHQxdAgbwacsHqPZo8u%2FngAH2GmaTdhYnBfSDbBfh8CHq6Bx5bttP2%2BRdM%2BMAaYaZ0Y%2FADkbNCZuAyAVQa2OcXOeICmDn9Q%2FeFkDeFQg5MgHEDXq%2FtVjj%2Bjtd26nhaaolWxs1ixSUgOBwrDhRIGOLyOVk2%2FBc0UxvseQCO2pQ2i%2BKrfhu%2FWeBovNb5dJxQtJRUDv2mCwYVpNl2efQM9xQHnK0JwLYt%2FU0Wf%2BphiA4uw8G91slC832pmOTCAoZXohg1fewCZqLBhkOUBofBWpMPsqg7XEXgPfAlDo2U5WXjtFdS87PIqClCK5nW6adCeXPkUiTGx0emOIDQqw1yFYGHEVx20xKjJVYe0O8iLmnQr3FA9nSIQilUKtJ4ZAdcTm7%2BExseJauyqo30hs%2B1qSW211A1SFAOUgDlCGq7eTIcMAeyZkV1SQJ4j%2Fe1Smbq4HcjqgFbLAGLyKxlMDMgZavK5NAYH19Olz3la%2FQCTiVelFnU6O%2FGCvykqS%2FwZJDhKN9gBtSOp%2F1SP5VRgJcoVj%2Bkmf2wBgv4gjrgARBWiURYx8xENV3bEVUAAWWD3dYDKAIWk5opaCFCMR5ZjJExiCAw7gYiSZ2rkyTce4eNMY3lfGn%2B8p6%2BvBckGlKEXnA6Eota69OxDO9oOsJoy28BXOR0UoXNRaJD5ceKdlWMJlOFzDdZNpc05tkMGQtqeNF2lttZqNco1VtwXgRstLSQ6tSPChgqtGV5h2DcDReIQadaNRR6AsAYKL5gSFsCJMgfsaZ7DpKh8mg8Wz8V7H%2BgDnLuMxaWEIUPevIbClgap4dqmVWSrPgVYCzAoZHIa5z2Ocx1D%2FGvDOEqMOKLrMefWIbSWHZ6jbgA8qVBhYNHpx0P%2BjAgN5TB3haSifDcApp6yymEi6Ij%2FGsEpDYUgcHATJUYDUAmC1SCkJ4cuZXSAP2DEpQsGUjQmKJfJOvlC2x%2FpChkOyLW7KEoMYc5FDC4v2FGqSoRWiLsbPCiyg1U5yiHZVm1XLkHMMZL11%2Fyxyw0UnGig3MFdZklN5FI%2FqiT65T%2BjOXOdO7XbgWurOAZR6Cv9uu1cm5LjkXX4xi6mWn5r5NjBS0gTliHhMZI2WNqSiSphEtiCAwnafS11JhseDGHYQ5%2BbqWiAYiAv6Jsf79%2FVUs4cIl%2Bn6%2BWOjcgB%2F2l5TreoAV2717JzZbQIR0W1cl%2FdEqCy5kJ3ZSIHuU0vBoHooEpiHeQWVkkkOqRX27eD1FWw4BfO9CJDdKoSogQi3hAAwsPRFrN5RbX7bqLdBJ9JYMohWrgJKHSjVl1sy2xAG0E3sNyO0oCbSGOxCNBRRXTXenYKuwAoDLfnDcQaCwehUOIDiHAu5m5hMpKeKM4sIo3vxACakIxKoH2YWF2QM84e6F5C5hJU4g8uxuFOlAYnqtwxmHyNEawLW%2FPhoawJDrGAP0JYWHgAVUByo%2FbGdiv2T2EMg8gsS14%2FrAdzlOYazFE7w4OzxeKiWdm3nSOnQRRKXSlVo8HEAbBfyJMKqoq%2BSCcTSx5NDtbFwNlh8VhjGGDu7JG5%2FTAGAvniQSSUog0pNzTim8Owc6QTuSKSTXlQqwV3eiEnklS3LeSXYPXGK2VgeZBqNcHG6tZHvA3vTINhV0ELuQdp3t1y9%2BogD8Kk%2FW7QoRN1UWPqM4%2BxdygkFDPLoTaumKReKiLWoPHOfY54m3qPx4c%2B4pgY3MRKKbljG8w4wvz8pxk3AqKsy4GMAkAtmRjRMsCxbb4Q2Ds0Ia9ci8cMT6DmsJG00XaHCIS%2Bo3F8YVVeikw13w%2BOEDaCYYhC0ZE54kA4jpjruBr5STWeqQG6M74HHL6TZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gPeHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EmEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh6e%2BXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%2BpT0KYV5dGtknU64JhabdqcVQbGZiAxQAnvN1u70y1AnmvOSPgLI6uB4AuDGhmAu3ATkJSw7OtS%2F2ToPjqkaq62%2F7WFG8advGlRRqxB9diP07JrXowKR9tpRa%2BjGJ91zxNTT1h8I2PcSfoUPtd7NejVoH03EUcqSBuFZPkMZhegHyo2ZAITovmm3zAIdGFWxoNNORiMRShgwdYwFzkPw5PA4a5MIIQpmq%2Bnsp3YMuXt%2FGkXxLx%2FP6%2BZJS0lFyz4MunC3eWSGE8xlCQrKvhKUPXr0hjpAN9ZK4PfEDrPMfMbGNWcHDzjA7ngMxTPnT7GMHar%2BgMQQ3NwHCv4zH4BIMYvzsdiERi6gebRmerTsVwZJTRsL8dkZgxgRxmpbgRcud%2BYlCIRpPwHShlUSwuipZnx9QCsEWziVazdDeKSYU5CF7UVPAhLer3CgJOQXl%2Fzh575R5rsrmRnKAzq4POFdgbYBuEviM4%2BLVC15ssLNFghbTtHWerS1hDt5s4qkLUha%2FqpZXhWh1C6lTQAqCNQnaDjS7UGFBC6wTu8yFnKJnExCnAs3Ok9yj5KpfZESQ4lTy5pTGTnkAUpxI%2ByjEldJfSo4y0QhG4i4IwkRFGcjWY8%2BEzgYYJUK7BXQksLxAww%2FYYWBMhJILB9e8ePEJ4OP7z%2B4%2FwOQDl64iOYDp26DaONPxpKtBxq%2FaTzRGarm3VkPYTLJKx6Z%2FMw2YbBGseJhPMwhhNswrIkyvV2BYzrvZbxLpKwcWJhYmFtVZ%2BlPEq91FzVp1HlQY1bZVLqeNR9SAUn6n0E28k%2FUuGkNpP1DBI5ch%2FEehZfjUQ9aE41NhETExoPT2gGQz0IhWJbEOvTQ4wgcXCHHFBhewYUiFHuhRSAUVmEHeCRQHQkXGFwkAgyzREJCVN7TRnTon36Zw3tPhx4EALwNdwDv%2BJ41YSP4B2CQqz0EFgARZ4ESgBHQgROwAVn9GTI%2BHYexTUevLUeta4%2FDqKrbMVS%2BYqb8hUwYCrlgKtmAq1YCrFgKrd4qpXiqZcKn1oqdWipjYKpWwVPVYqW6xUpVipKqFR3QKjagVEtAqHpxUMTitsnFaJOKx2cVhswq35RVpyiq9lFVNIKnOQVMkgqtYxVNxiqQjFS7GKlSIVIsQqPIhUWwioigFQ%2B%2BKkN8VHr49HDw9Ebo9EDo9DTo9Crg9BDg9%2FWx7gWx7YWwlobYrOGxWPNisAaAHEyALpkAVDIAeWAArsABVXACYuAD5cAF6wAKFQAQqgAbVAAsoAAlQAUaYAfkwAvogBWQACOgAD9AAHSAAKT4GUdMiOvFngBTwCn2AZ7Dv6B6k%2F90B8%2ByRnkV144AIBoAMTQATGgAjNAA4YABgwABZgB%2FmQCwyAVlwCguASlwCEuAQFwB4uAMlwBYuAJlQAUVAAhUD2KgdpUDaJgaRMDFJgX5MC1JgWJEAokQCWRAHxEAWkQBMRADpEAMkQAYROAEecC484DRpwBDTnwNOdw05tjTmiNOYwtswhYFwLA7BYG4LA2BYGOLAwRYFuLAsxYFQJAohIEyJAMwkAwiQC0JAJgkAeiQBkJAFokAPCQA0JABwcD4Dgc4cDdDgaYcDIDgYgUC6CgWgUClCgUYUAVBQBOFAEYMALgwAgDA9QYAdIn8AZzeBB2L5EcWrenUT1KXienEsuJJ7x5U8XlTjc1NVzUyXFTGb1LlpUtWlTDIjqwE4LsagowoCi2gJLKAkpoBgJQNpAIhNqaEoneI6kiiqQ6Go%2Fn6j0cS%2Ba2gEU8gIHJ%2BBwfgZX4GL%2BBd%2FgW34FZ%2BBS%2FgUH4FN6BTegTvoEv6BJegRnYEF2A79gOvYDl2BdEjCkqkGtwXp0LNToIskOTXzh%2FF062yJ7AAAAEDAWAAABWhJ%2BKPEIJgBFxMVP7w2QJBGHASQnOBKXKFIdUK4igKA9IEaYJg%29%3Bsrc%3Aurl%28data%3Aapplication%2Fvnd%2Ems%2Dfontobject%3Bbase64%2Cn04AAEFNAAACAAIABAAAAAAABQAAAAAAAAABAJABAAAEAExQAAAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAJxJ%2FLAAAAAAAAAAAAAAAAAAAAAAAACgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAAAADgBSAGUAZwB1AGwAYQByAAAAeABWAGUAcgBzAGkAbwBuACAAMQAuADAAMAA5ADsAUABTACAAMAAwADEALgAwADAAOQA7AGgAbwB0AGMAbwBuAHYAIAAxAC4AMAAuADcAMAA7AG0AYQBrAGUAbwB0AGYALgBsAGkAYgAyAC4ANQAuADUAOAAzADIAOQAAADgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzACAAUgBlAGcAdQBsAGEAcgAAAAAAQlNHUAAAAAAAAAAAAAAAAAAAAAADAKncAE0TAE0ZAEbuFM3pjM%2FSEdmjKHUbyow8ATBE40IvWA3vTu8LiABDQ%2BpexwUMcm1SMnNryctQSiI1K5ZnbOlXKmnVV5YvRe6RnNMFNCOs1KNVpn6yZhCJkRtVRNzEufeIq7HgSrcx4S8h%2Fv4vnrrKc6oCNxmSk2uKlZQHBii6iKFoH0746ThvkO1kJHlxjrkxs%2BLWORaDQBEtiYJIR5IB9Bi1UyL4Rmr0BNigNkMzlKQmnofBHviqVzUxwdMb3NdCn69hy%2BpRYVKGVS%2F1tnsqv4LL7wCCPZZAZPT4aCShHjHJVNuXbmMrY5LeQaGnvAkXlVrJgKRAUdFjrWEah9XebPeQMj7KS7DIBAFt8ycgC5PLGUOHSE3ErGZCiViNLL5ZARfywnCoZaKQCu6NuFX42AEeKtKUGnr%2FCm2Cy8tpFhBPMW5Fxi4Qm4TkDWh4IWFDClhU2hRWosUWqcKLlgyXB%2BlSHaWaHiWlBAR8SeSgSPCQxdVQgzUixWKSTrIQEbU94viDctkvX%2BVSjJuUmV8L4CXShI11esnp0pjWNZIyxKHS4wVQ2ime1P4RnhvGw0aDN1OLAXGERsB7buFpFGGBAre4QEQR0HOIO5oYH305G%2BKspT%2FFupEGGafCCwxSe6ZUa%2B073rXHnNdVXE6eWvibUS27XtRzkH838mYLMBmYysZTM0EM3A1fbpCBYFccN1B%2FEnCYu%2FTgCGmr7bMh8GfYL%2BBfcLvB0gRagC09w9elfldaIy%2FhNCBLRgBgtCC7jAF63wLSMAfbfAlEggYU0bUA7ACCJmTDpEmJtI78w4%2FBO7dN7JR7J7ZvbYaUbaILSQsRBiF3HGk5fEg6p9unwLvn98r%2BvnsV%2B372uf1xBLq4qU%2F45fTuqaAP%2BpssmCCCTF0mhEow8ZXZOS8D7Q85JsxZ%2BAzok7B7O%2Ff6J8AzYBySZQB%2FQHYUSA%2BEeQhEWiS6AIQzgcsDiER4MjgMBAWDV4AgQ3g1eBgIdweCQmCjJEMkJ%2BPKRWyFHHmg1Wi%2F6xzUgA0LREoKJChwnQa9B%2B5RQZRB3IlBlkAnxyQNaANwHMowzlYSMCBgnbpzvqpl0iTJNCQidDI9ZrSYNIRBhHtUa5YHMHxyGEik9hDE0AKj72AbTCaxtHPUaKZdAZSnQTyjGqGLsmBStCejApUhg4uBMU6mATujEl%2BKdDPbI6Ag4vLr%2BhjY6lbjBeoLKnZl0UZgRX8gTySOeynZVz1wOq7e1hFGYIq%2BMhrGxDLak0PrwYzSXtcuyhXEhwOYofiW%2BEcI%2Fjw8P6IY6ed%2BetAbuqKp5QIapT77LnAe505lMuqL79a0ut4rWexzFttsOsLDy7zvtQzcq3U1qabe7tB0wHWVXji%2BzDbo8x8HyIRUbXnwUcklFv51fvTymiV%2BMXLSmGH9d9%2BaXpD5X6lao41anWGig7IwIdnoBY2ht%2FpO9mClLo4NdXHAsefqWUKlXJkbqPOFhMoR4aiA1BXqhRNbB2Xwi%2B7u%2FjpAoOpKJ0UX24EsrzMfHXViakCNcKjBxuQX8BO0ZqjJ3xXzf%2B61t2VXOSgJ8xu65QKgtN6FibPmPYsXbJRHHqbgATcSZxBqGiDiU4NNNsYBsKD0MIP%2FOfKnlk%2FLkaid%2FO2NbKeuQrwOB2Gq3YHyr6ALgzym5wIBnsdC1ZkoBFZSQXChZvlesPqvK2c5oHHT3Q65jYpNxnQcGF0EHbvYqoFw60WNlXIHQF2HQB7zD6lWjZ9rVqUKBXUT6hrkZOle0RFYII0V5ZYGl1JAP0Ud1fZZMvSomBzJ710j4Me8mjQDwEre5Uv2wQfk1ifDwb5ksuJQQ3xt423lbuQjvoIQByQrNDh1JxGFkOdlJvu%2FgFtuW0wR4cgd%2BZKesSV7QkNE2kw6AV4hoIuC02LGmTomyf8PiO6CZzOTLTPQ%2BHW06H%2Btx%2BbQ8LmDYg1pTFrp2oJXgkZTyeRJZM0C8aE2LpFrNVDuhARsN543%2FFV6klQ6Tv1OoZGXLv0igKrl%2FCmJxRmX7JJbJ998VSIPQRyDBICzl4JJlYHbdql30NvYcOuZ7a10uWRrgoieOdgIm4rlq6vNOQBuqESLbXG5lzdJGHw2m0sDYmODXbYGTfSTGRKpssTO95fothJCjUGQgEL4yKoGAF%2F0SrpUDNn8CBgBcSDQByAeNkCXp4S4Ro2Xh4OeaGRgR66PVOsU8bc6TR5%2FxTcn4IVMLOkXSWiXxkZQCbvKfmoAvQaKjO3EDKwkwqHChCDEM5loQRPd5ACBki1TjF772oaQhQbQ5C0lcWXPFOzrfsDGUXGrpxasbG4iab6eByaQkQfm0VFlP0ZsDkvvqCL6QXMUwCjdMx1ZOyKhTJ7a1GWAdOUcJ8RSejxNVyGs31OKMyRyBVoZFjqIkmKlLQ5eHMeEL4MkUf23cQ%2F1SgRCJ1dk4UdBT7OoyuNgLs0oCd8RnrEIb6QdMxT2QjD4zMrJkfgx5aDMcA4orsTtKCqWb%2FVeyceqa5OGSmB28YwH4rFbkQaLoUN8OQQYnD3w2eXpI4ScQfbCUZiJ4yMOIKLyyTc7BQ4uXUw6Ee6%2FxM%2B4Y67ngNBknxIPwuppgIhFcwJyr6EIj%2BLzNj%2FmfR2vhhRlx0BILZoAYruF0caWQ7YxO66UmeguDREAFHYuC7HJviRgVO6ruJH59h%2FC%2FPkgSle8xNzZJULLWq9JMDTE2fjGE146a1Us6PZDGYle6ldWRqn%2FpdpgHKNGrGIdkRK%2BKPETT9nKT6kLyDI8xd9A1FgWmXWRAIHwZ37WyZHOVyCadJEmMVz0MadMjDrPho%2BEIochkVC2xgGiwwsQ6DMv2P7UXqT4x7CdcYGId2BJQQa85EQKmCmwcRejQ9Bm4oATENFPkxPXILHpMPUyWTI5rjNOsIlmEeMbcOCEqInpXACYQ9DDxmFo9vcmsDblcMtg4tqBerNngkIKaFJmrQAPnq1dEzsMXcwjcHdfdCibcAxxA%2Bq%2Fj9m3LM%2FO7WJka4tSidVCjsvo2lQ%2F2ewyoYyXwAYyr2PlRoR5MpgVmSUIrM3PQxXPbgjBOaDQFIyFMJvx3Pc5RSYj12ySVF9fwFPQu2e2KWVoL9q3Ayv3IzpGHUdvdPdrNUdicjsTQ2ISy7QU3DrEytIjvbzJnAkmANXjAFERA0MUoPF3%2F5KFmW14bBNOhwircYgMqoDpUMcDtCmBE82QM2YtdjVLB4kBuKho%2FbcwQdeboqfQartuU3CsCf%2BcXkgYAqp%2F0Ee3RorAZt0AvvOCSI4JICIlGlsV0bsSid%2FNIEALAAzb6HAgyWHBps6xAOwkJIGcB82CxRQq4sJf3FzA70A%2BTRqcqjEMETCoez3mkPcpnoALs0ugJY8kQwrC%2BJE5ik3w9rzrvDRjAQnqgEVvdGrNwlanR0SOKWzxOJOvLJhcd8Cl4AshACUkv9czdMkJCVQSQhp6kp7StAlpVRpK0t0SW6LHeBJnE2QchB5Ccu8kxRghZXGIgZIiSj7gEKMJDClcnX6hgoqJMwiQDigIXg3ioFLCgDgjPtYHYpsF5EiA4kcnN18MZtOrY866dEQAb0FB34OGKHGZQjwW%2FWDHA60cYFaI%2FPjpzquUqdaYGcIq%2BmLez3WLFFCtNBN2QJcrlcoELgiPku5R5dSlJFaCEqEZle1AQzAKC%2B1SotMcBNyQUFuRHRF6OlimSBgjZeTBCwLyc6A%2BP%2FoFRchXTz5ADknYJHxzrJ5pGuIKRQISU6WyKTBBjD8WozmVYWIsto1AS5rxzKlvJu4E%2FvwOiKxRtCWsDM%2BeTHUrmwrCK5BIfMzGkD%2B0Fk5LzBs0jMYXktNDblB06LMNJ09U8pzSLmo14MS0OMjcdrZ31pyQqxJJpRImlSvfYAK8inkYU52QY2FPEVsjoWewpwhRp5yAuNpkqhdb7ku9Seefl2D0B8SMTFD90xi4CSOwwZy9IKkpMtI3FmFUg3%2FkFutpQGNc3pCR7gvC4sgwbupDu3DyEN%2BW6YGLNM21jpB49irxy9BSlHrVDlnihGKHwPrbVFtc%2Bh1rVQKZduxIyojccZIIcOCmhEnC7UkY68WXKQgLi2JCDQkQWJRQuk60hZp0D3rtCTINSeY9Ej2kIKYfGxwOs4j9qMM7fYZiipzgcf7TamnehqdhsiMiCawXnz4xAbyCkLAx5EGbo3Ax1u3dUIKnTxIaxwQTHehPl3V491H0%2BbC5zgpGz7Io%2BmjdhKlPJ01EeMpM7UsRJMi1nGjmJg35i6bQBAAxjO%2FENJubU2mg3ONySEoWklCwdABETcs7ck3jgiuU9pcKKpbgn%2B3YlzV1FzIkB6pmEDOSSyDfPPlQskznctFji0kpgZjW5RZe6x9kYT4KJcXg0bNiCyif%2BpZACCyRMmYsfiKmN9tSO65F0R2OO6ytlEhY5Sj6uRKfFxw0ijJaAx%2Fk3QgnAFSq27%2F2i4GEBA%2BUvTJKK%2F9eISNvG46Em5RZfjTYLdeD8kdXHyrwId%2FDQZUaMCY4gGbke2C8vfjgV%2FY9kkRQOJIn%2FxM9INZSpiBnqX0Q9GlQPpPKAyO5y%2BW5NMPSRdBCUlmuxl40ZfMCnf2Cp044uI9WLFtCi4YVxKjuRCOBWIb4XbIsGdbo4qtMQnNOQz4XDSui7W%2FN6l54qOynCqD3DpWQ%2BmpD7C40D8BZEWGJX3tlAaZBMj1yjvDYKwCJBa201u6nBKE5UE%2B7QSEhCwrXfbRZylAaAkplhBWX50dumrElePyNMRYUrC99UmcSSNgImhFhDI4BXjMtiqkgizUGCrZ8iwFxU6fQ8GEHCFdLewwxYWxgScAYMdMLmcZR6b7rZl95eQVDGVoUKcRMM1ixXQtXNkBETZkVVPg8LoSrdetHzkuM7DjZRHP02tCxA1fmkXKF3VzfN1pc1cv%2F8lbTIkkYpqKM9VOhp65ktYk%2BQ46myFWBapDfyWUCnsnI00QTBQmuFjMZTcd0V2NQ768Fhpby04k2IzNR1wKabuGJqYWwSly6ocMFGTeeI%2BejsWDYgEvr66QgqdcIbFYDNgsm0x9UHY6SCd5%2B7tpsLpKdvhahIDyYmEJQCqMqtCF6UlrE5GXRmbu%2Bvtm3BFSxI6ND6UxIE7GsGMgWqghXxSnaRJuGFveTcK5ZVSPJyjUxe1dKgI6kNF7EZhIZs8y8FVqwEfbM0Xk2ltORVDKZZM40SD3qQoQe0orJEKwPfZwm3YPqwixhUMOndis6MhbmfvLBKjC8sKKIZKbJk8L11oNkCQzCgvjhyyEiQSuJcgCQSG4Mocfgc0Hkwcjal1UNgP0CBPikYqBIk9tONv4kLtBswH07vUCjEaHiFGlLf8MgXKzSgjp2HolRRccAOh0ILHz9qlGgIFkwAnzHJRjWFhlA7ROwINyB5HFj59PRZHFor6voq7l23EPNRwdWhgawqbivLSjRA4htEYUFkjESu67icTg5S0aW1sOkCiIysfJ9UnIWevOOLGpepcBxy1wEhd2WI3AZg7sr9WBmHWyasxMcvY%2FiOmsLtHSWNUWEGk9hScMPShasUA1AcHOtRZlqMeQ0OzYS9vQvYUjOLrzP07BUAFikcJNMi7gIxEw4pL1G54TcmmmoAQ5s7TGWErJZ2Io4yQ0ljRYhL8H5e62oDtLF8aDpnIvZ5R3GWJyAugdiiJW9hQAVTsnCBHhwu7rkBlBX6r3b7ejEY0k5GGeyKv66v%2B6dg7mcJTrWHbtMywbedYqCQ0FPwoytmSWsL8WTtChZCKKzEF7vP6De4x2BJkkniMgSdWhbeBSLtJZR9CTHetK1xb34AYIJ37OegYIoPVbXgJ%2FqDQK%2BbfCtxQRVKQu77WzOoM6SGL7MaZwCGJVk46aImai9fmam%2BWpHG%2B0BtQPWUgZ7RIAlPq6lkECUhZQ2gqWkMYKcYMYaIc4gYCDFHYa2d1nzp3%2BJ1eCBay8IYZ0wQRKGAqvCuZ%2FUgbQPyllosq%2BXtfKIZOzmeJqRazpmmoP%2F76YfkjzV2NlXTDSBYB04SVlNQsFTbGPk1t%2FI4Jktu0XSgifO2ozFOiwd%2F0SssJDn0dn4xqk4GDTTKX73%2FwQyBLdqgJ%2BWx6AQaba3BA9CKEzjtQYIfAsiYamapq80LAamYjinlKXUkxdpIDk0puXUEYzSalfRibAeDAKpNiqQ0FTwoxuGYzRnisyTotdVTclis1LHRQCy%2FqqL8oUaQzWRxilq5Mi0IJGtMY02cGLD69vGjkj3p6pGePKI8bkBv5evq8SjjyU04vJR2cQXQwSJyoinDsUJHCQ50jrFTT7yRdbdYQMB3MYCb6uBzJ9ewhXYPAIZSXfeEQBZZ3GPN3Nbhh%2FwkvAJLXnQMdi5NYYZ5GHE400GS5rXkOZSQsdZgIbzRnF9ueLnsfQ47wHAsirITnTlkCcuWWIUhJSbpM3wWhXNHvt2xUsKKMpdBSbJnBMcihkoDqAd1Zml%2FR4yrzow1Q2A5G%2Bkzo%2FRhRxQS2lCSDRV8LlYLBOOoo1bF4jwJAwKMK1tWLHlu9i0j4Ig8qVm6wE1DxXwAwQwsaBWUg2pOOol2dHxyt6npwJEdLDDVYyRc2D0HbcbLUJQj8gPevQBUBOUHXPrsAPBERICpnYESeu2OHotpXQxRGlCCtLdIsu23MhZVEoJg8Qumj%2FUMMc34IBqTKLDTp76WzL%2FdMjCxK7MjhiGjeYAC%2Fkj%2FjY%2FRde7hpSM1xChrog6yZ7OWTuD56xBJnGFE%2BpT2ElSyCnJcwVzCjkqeNLfMEJqKW0G7OFIp0G%2B9mh50I9o8k1tpCY0xYqFNIALgIfc2me4n1bmJnRZ89oepgLPT0NTMLNZsvSCZAc3TXaNB07vail36%2FdBySis4m9%2FDR8izaLJW6bWCkVgm5T%2Bius3ZXq4xI%2BGnbveLbdRwF2mNtsrE0JjYc1AXknCOrLSu7Te%2Fr4dPYMCl5qtiHNTn%2BTPbh1jCBHH%2BdMJNhwNgs3nT%2BOhQoQ0vYif56BMG6WowAcHR3DjQolxLzyVekHj00PBAaW7IIAF1EF%2BuRIWyXjQMAs2chdpaKPNaB%2BkSezYt0%2BCA04sOg5vx8Fr7Ofa9sUv87h7SLAUFSzbetCCZ9pmyLt6l6%2FTzoA1%2FZBG9bIUVHLAbi%2FkdBFgYGyGwRQGBpkqCEg2ah9UD6EedEcEL3j4y0BQQCiExEnocA3SZboh%2Bepgd3YsOkHskZwPuQ5OoyA0fTA5AXrHcUOQF%2BzkJHIA7PwCDk1gGVmGUZSSoPhNf%2BTklauz98QofOlCIQ%2FtCD4dosHYPqtPCXB3agggQQIqQJsSkB%2Bqn0rkQ1toJjON%2FOtCIB9RYv3PqRA4C4U68ZMlZn6BdgEvi2ziU%2BTQ6NIw3ej%2BAtDwMGEZk7e2IjxUWKdAxyaw9OCwSmeADTPPleyk6UhGDNXQb%2B%2BW6Uk4q6F7%2Frg6WVTo82IoCxSIsFDrav4EPHphD3u4hR53WKVvYZUwNCCeM4PMBWzK%2BEfIthZOkuAwPo5C5jgoZgn6dUdvx5rIDmd58cXXdKNfw3l%2BwM2UjgrDJeQHhbD7HW2QDoZMCujgIUkk5Fg8VCsdyjOtnGRx8wgKRPZN5dR0zPUyfGZFVihbFRniXZFOZGKPnEQzU3AnD1KfR6weHW2XS6KbPJxUkOTZsAB9vTVp3Le1F8q5l%2BDMcLiIq78jxAImD2pGFw0VHfRatScGlK6SMu8leTmhUSMy8Uhdd6xBiH3Gdman4tjQGLboJfqz6fL2WKHTmrfsKZRYX6BTDjDldKMosaSTLdQS7oDisJNqAUhw1PfTlnacCO8vl8706Km1FROgLDmudzxg%2BEWTiArtHgLsRrAXYWdB0NmToNCJdKm0KWycZQqb%2BMw76Qy29iQ5up%2FX7oyw8QZ75kP5F6iJAJz6KCmqxz8fEa%2FxnsMYcIO%2FvEkGRuMckhr4rIeLrKaXnmIzlNLxbFspOphkcnJdnz%2FChp%2FVlpj2P7jJQmQRwGnltkTV5dbF9fE3%2FfxoSqTROgq9wFUlbuYzYcasE0ouzBo%2BdDCDzxKAfhbAZYxQiHrLzV2iVexnDX%2FQnT1fsT%2Fxuhu1ui5qIytgbGmRoQkeQooO8eJNNZsf0iALur8QxZFH0nCMnjerYQqG1pIfjyVZWxhVRznmmfLG00BcBWJE6hzQWRyFknuJnXuk8A5FRDCulwrWASSNoBtR%2BCtGdkPwYN2o7DOw%2FVGlCZPusRBFXODQdUM5zeHDIVuAJBLqbO%2Ff9Qua%2BpDqEPk230Sob9lEZ8BHiCorjVghuI0lI4JDgHGRDD%2FprQ84B1pVGkIpVUAHCG%2Biz3Bn3qm2AVrYcYWhock4jso5%2BJ7HfHVj4WMIQdGctq3psBCVVzupQOEioBGA2Bk%2BUILT7%2BVoX5mdxxA5fS42gISQVi%2FHTzrgMxu0fY6hE1ocUwwbsbWcezrY2n6S8%2F6cxXkOH4prpmPuFoikTzY7T85C4T2XYlbxLglSv2uLCgFv8Quk%2FwdesUdWPeHYIH0R729JIisN9Apdd4eB10aqwXrPt%2BSu9mA8k8n1sjMwnfsfF2j3jMUzXepSHmZ%2FBfqXvzgUNQQWOXO8YEuFBh4QTYCkOAPxywpYu1VxiDyJmKVcmJPGWk%2Fgc3Pov02StyYDahwmzw3E1gYC9wkupyWfDqDSUMpCTH5e5N8B%2F%2FlHiMuIkTNw4USHrJU67bjXGqNav6PBuQSoqTxc8avHoGmvqNtXzIaoyMIQIiiUHIM64cXieouplhNYln7qgc4wBVAYR104kO%2BCvKqsg4yIUlFNThVUAKZxZt1XA34h3TCUUiXVkZ0w8Hh2R0Z5L0b4LZvPd%2Fp1gi%2F07h8qfwHrByuSxglc9cI4QIg2oqvC%2Fqm0i7tjPLTgDhoWTAKDO2ONW5oe%2B%2FeKB9vZB8K6C25yCZ9RFVMnb6NRdRjyVK57CHHSkJBfnM2%2Fj4ODUwRkqrtBBCrDsDpt8jhZdXoy%2F1BCqw3sSGhgGGy0a5Jw6BP%2FTExoCmNFYjZl248A0osgPyGEmRA%2BfAsqPVaNAfytu0vuQJ7rk3J4kTDTR2AlCHJ5cls26opZM4w3jMULh2YXKpcqGBtuleAlOZnaZGbD6DHzMd6i2oFeJ8z9XYmalg1Szd%2FocZDc1C7Y6vcALJz2lYnTXiWEr2wawtoR4g3jvWUU2Ngjd1cewtFzEvM1NiHZPeLlIXFbBPawxNgMwwAlyNSuGF3zizVeOoC9bag1qRAQKQE%2FEZBWC2J8mnXAN2aTBboZ7HewnObE8CwROudZHmUM5oZ%2FUgd%2FJZQK8lvAm43uDRAbyW8gZ%2BZGq0EVerVGUKUSm%2FIdn8AQHdR4m7bue88WBwft9mSCeMOt1ncBwziOmJYI2ZR7ewNMPiCugmSsE4EyQ%2BQATJG6qORMGd4snEzc6B4shPIo4G1T7PgSm8PY5eUkPdF8JZ0VBtadbHXoJgnEhZQaODPj2gpODKJY5Yp4DOsLBFxWbvXN755KWylJm%2BoOd4zEL9Hpubuy2gyyfxh8oEfFutnYWdfB8PdESLWYvSqbElP9qo3u6KTmkhoacDauMNNjj0oy40DFV7Ql0aZj77xfGl7TJNHnIwgqOkenruYYNo6h724%2BzUQ7%2BvkCpZB%2BpGA562hYQiDxHVWOq0oDQl%2FQsoiY%2BcuI7iWq%2FZIBtHcXJ7kks%2Bh2fCNUPA82BzjnqktNts%2BRLdk1VSu%2BtqEn7QZCCsvEqk6FkfiOYkrsw092J8jsfIuEKypNjLxrKA9kiA19mxBD2suxQKCzwXGws7kEJvlhUiV9tArLIdZW0IORcxEzdzKmjtFhsjKy%2F44XYXdI5noQoRcvjZ1RMPACRqYg2V1%2BOwOepcOknRLLFdYgTkT5UApt%2FJhLM3jeFYprZV%2BZow2g8fP%2BU68hkKFWJj2yBbKqsrp25xkZX1DAjUw52IMYWaOhab8Kp05VrdNftqwRrymWF4OQSjbdfzmRZirK8FMJELEgER2PHjEAN9pGfLhCUiTJFbd5LBkOBMaxLr%2FA1SY9dXFz4RjzoU9ExfJCmx%2FI9FKEGT3n2cmzl2X42L3Jh%2BAbQq6sA%2BSs1kitoa4TAYgKHaoybHUDJ51oETdeI%2F9ThSmjWGkyLi5QAGWhL0BG1UsTyRGRJOldKBrYJeB8ljLJHfATWTEQBXBDnQexOHTB%2BUn44zExFE4vLytcu5NwpWrUxO%2F0ZICUGM7hGABXym0V6ZvDST0E370St9MIWQOTWngeoQHUTdCJUP04spMBMS8LSker9cReVQkULFDIZDFPrhTzBl6sed9wcZQTbL%2BBDqMyaN3RJPh%2Fanbx%2BIv%2BqgQdAa3M9Z5JmvYlh4qop%2BHo1F1W5gbOE9YKLgAnWytXElU4G8GtW47lhgFE6gaSs%2Bgs37sFvi0PPVvA5dnCBgILTwoKd%2F%2BDoL9F6inlM7H4rOTzD79KJgKlZO%2FZgt22UsKhrAaXU5ZcLrAglTVKJEmNJvORGN1vqrcfSMizfpsgbIe9zno%2BgBoKVXgIL%2FVI8dB1O5o%2FR3Suez%2FgD7M781ShjKpIIORM%2FnxG%2BjjhhgPwsn2IoXsPGPqYHXA63zJ07M2GPEykQwJBYLK808qYxuIew4frk52nhCsnCYmXiR6CuapvE1IwRB4%2FQftDbEn%2BAucIr1oxrLabRj9q4ae0%2BfXkHnteAJwXRbVkR0mctVSwEbqhJiMSZUp9DNbEDMmjX22m3ABpkrPQQTP3S1sib5pD2VRKRd%2BeNAjLYyT0hGrdjWJZy24OYXRoWQAIhGBZRxuBFMjjZQhpgrWo8SiFYbojcHO8V5DyscJpLTHyx9Fimassyo5U6WNtquUMYgccaHY5amgR3PQzq3ToNM5ABnoB9kuxsebqmYZm0R9qxJbFXCQ1UPyFIbxoUraTJFDpCk0Wk9GaYJKz%2F6oHwEP0Q14lMtlddQsOAU9zlYdMVHiT7RQP3XCmWYDcHCGbVRHGnHuwzScA0BaSBOGkz3lM8CArjrBsyEoV6Ys4qgDK3ykQQPZ3hCRGNXQTNNXbEb6tDiTDLKOyMzRhCFT%2BmAUmiYbV3YQVqFVp9dorv%2BTsLeCykS2b5yyu8AV7IS9cxcL8z4Kfwp%2BxJyYLv1OsxQCZwTB4a8BZ%2F5EdxTBJthApqyfd9u3ifr%2FWILTqq5VqgwMT9SOxbSGWLQJUUWCVi4k9tho9nEsbUh7U6NUsLmkYFXOhZ0kmamaJLRNJzSj%2Fqn4Mso6zb6iLLBXoaZ6AqeWCjHQm2lztnejYYM2eubnpBdKVLORZhudH3JF1waBJKA9%2BW8EhMj3Kzf0L4vi4k6RoHh3Z5YgmSZmk6ns4fjScjAoL8GoOECgqgYEBYUGFVO4FUv4%2FYtowhEmTs0vrvlD%2FCrisnoBNDAcUi%2FteY7OctFlmARQzjOItrrlKuPO6E2Ox93L4O%2F4DcgV%2FdZ7qR3VBwVQxP1GCieA4RIpweYJ5FoYrHxqRBdJjnqbsikA2Ictbb8vE1GYIo9dacK0REgDX4smy6GAkxlH1yCGGsk%2BtgiDhNKuKu3yNrMdxafmKTF632F8Vx4BNK57GvlFisrkjN9WDAtjsWA0ENT2e2nETUb%2Fn7qwhvGnrHuf5bX6Vh%2Fn3xffU3PeHdR%2BFA92i6ufT3AlyAREoNDh6chiMWTvjKjHDeRhOa9YkOQRq1vQXEMppAQVwHCuIcV2g5rBn6GmZZpTR7vnSD6ZmhdSl176gqKTXu5E%2BYbfL0adwNtHP7dT7t7b46DVZIkzaRJOM%2BS6KcrzYVg%2BT3wSRFRQashjfU18NutrKa%2F7PXbtuJvpIjbgPeqd%2BpjmRw6YKpnANFSQcpzTZgpSNJ6J7uiagAbir%2F8tNXJ%2FOsOnRh6iuIexxrmkIneAgz8QoLmiaJ8sLQrELVK2yn3wOHp57BAZJhDZjTBzyoRAuuZ4eoxHruY1pSb7qq79cIeAdOwin4GdgMeIMHeG%2BFZWYaiUQQyC5b50zKjYw97dFjAeY2I4Bnl105Iku1y0lMA1ZHolLx19uZnRdILcXKlZGQx%2FGdEqSsMRU1BIrFqRcV1qQOOHyxOLXEGcbRtAEsuAC2V4K3p5mFJ22IDWaEkk9ttf5Izb2LkD1MnrSwztXmmD%2FQi%2FEmVEFBfiKGmftsPwVaIoZanlKndMZsIBOskFYpDOq3QUs9aSbAAtL5Dbokus2G4%2FasthNMK5UQKCOhU97oaOYNGsTah%2BjfCKsZnTRn5TbhFX8ghg8CBYt%2FBjeYYYUrtUZ5jVij%2Fop7V5SsbA4mYTOwZ46hqdpbB6Qvq3AS2HHNkC15pTDIcDNGsMPXaBidXYPHc6PJAkRh29Vx8KcgX46LoUQBhRM%2B3SW6Opll%2FwgxxsPgKJKzr5QCmwkUxNbeg6Wj34SUnEzOemSuvS2OetRCO8Tyy%2BQbSKVJcqkia%2BGvDefFwMOmgnD7h81TUtMn%2BmRpyJJ349HhAnoWFTejhpYTL9G8N2nVg1qkXBeoS9Nw2fB27t7trm7d%2FQK7Cr4uoCeOQ7%2F8JfKT77KiDzLImESHw%2F0wf73QeHu74hxv7uihi4fTX%2BXEwAyQG3264dwv17aJ5N335Vt9sdrAXhPOAv8JFvzqyYXwfx8WYJaef1gMl98JRFyl5Mv5Uo%2FoVH5ww5OzLFsiTPDns7fS6EURSSWd%2F92BxMYQ8sBaH%2Bj%2BwthQPdVgDGpTfi%2BJQIWMD8xKqULliRH01rTeyF8x8q%2FGBEEEBrAJMPf25UQwi0b8tmqRXY7kIvNkzrkvRWLnxoGYEJsz8u4oOyMp8cHyaybb1HdMCaLApUE%2B%2F7xLIZGP6H9xuSEXp1zLIdjk5nBaMuV%2FyTDRRP8Y2ww5RO6d2D94o%2B6ucWIqUAvgHIHXhZsmDhjVLczmZ3ca0Cb3PpKwt2UtHVQ0BgFJsqqTsnzZPlKahRUkEu4qmkJt%2Bkqdae76ViWe3STan69yaF9%2BfESD2lcQshLHWVu4ovItXxO69bqC5p1nZLvI8NdQB9s9UNaJGlQ5mG947ipdDA0eTIw%2FA1zEdjWquIsQXXGIVEH0thC5M%2BW9pZe7IhAVnPJkYCCXN5a32HjN6nsvokEqRS44tGIs7s2LVTvcrHAF%2BRVmI8L4HUYk4x%2B67AxSMJKqCg8zrGOgvK9kNMdDrNiUtSWuHFpC8%2Fp5qIQrEo%2FH%2B1l%2F0cAwQ2nKmpWxKcMIuHY44Y6DlkpO48tRuUGBWT0FyHwSKO72Ud%2BtJUfdaZ4CWNijzZtlRa8%2BCkmO%2FEwHYfPZFU%2FhzjFWH7vnzHRMo%2BaF9u8qHSAiEkA2HjoNQPEwHsDKOt6hOoK3Ce%2F%2B%2F9boMWDa44I6FrQhdgS7OnNaSzwxWKZMcyHi6LN4WC6sSj0qm2PSOGBTvDs%2FGWJS6SwEN%2FULwpb4LQo9fYjUfSXRwZkynUazlSpvX9e%2BG2zor8l%2BYaMxSEomDdLHGcD6YVQPegTaA74H8%2BV4WvJkFUrjMLGLlvSZQWvi8%2FQA7yzQ8GPno%2F%2F5SJHRP%2FOqKObPCo81s%2F%2B6WgLqykYpGAgQZhVDEBPXWgU%2FWzFZjKUhSFInufPRiMAUULC6T11yL45ZrRoB4DzOyJShKXaAJIBS9wzLYIoCEcJKQW8GVCx4fihqJ6mshBUXSw3wWVj3grrHQlGNGhIDNNzsxQ3M%2BGWn6ASobIWC%2BLbYOC6UpahVO13Zs2zOzZC8z7FmA05JhUGyBsF4tsG0drcggIFzgg%2Fkpf3%2BCnAXKiMgIE8Jk%2FMhpkc8DUJEUzDSnWlQFme3d0sHZDrg7LavtsEX3cHwjCYA17pMTfx8Ajw9hHscN67hyo%2BRJQ4458RmPywXykkVcW688oVUrQhahpPRvTWPnuI0B%2BSkQu7dCyvLRyFYlC1LG1gRCIvn3rwQeINzZQC2KXq31FaR9UmVV2QeGVqBHjmE%2BVMd3b1fhCynD0pQNhCG6%2FWCDbKPyE7NRQzL3BzQAJ0g09aUzcQA6mUp9iZFK6Sbp%2FYbHjo%2B%2B7%2FWj8S4YNa%2BZdqAw1hDrKWFXv9%2BzaXpf8ZTDSbiqsxnwN%2FCzK5tPkOr4tRh2kY3Bn9JtalbIOI4b3F7F1vPQMfoDcdxMS8CW9m%2FNCW%2FHILTUVWQIPiD0j1A6bo8vsv6P1hCESl2abrSJWDrq5sSzUpwoxaCU9FtJyYH4QFMxDBpkkBR6kn0LMPO%2B5EJ7Z6bCiRoPedRZ%2FP0SSdii7ZnPAtVwwHUidcdyspwncz5uq6vvm4IEDbJVLUFCn%2FLvIHfooUBTkFO130FC7CmmcrKdgDJcid9mvVzsDSibOoXtIf9k6ABle3PmIxejodc4aob0QKS432srrCMndbfD454q52V01G4q913mC5HOsTzWF4h2No1av1VbcUgWAqyoZl%2B11PoFYnNv2HwAODeNRkHj%2B8SF1fcvVBu6MrehHAZK1Gm69ICcTKizykHgGFx7QdowTVAsYEF2tVc0Z6wLryz2FI1sc5By2znJAAmINndoJiB4sfPdPrTC8RnkW7KRCwxC6YvXg5ahMlQuMpoCSXjOlBy0Kij%2BbsCYPbGp8BdCBiLmLSAkEQRaieWo1SYvZIKJGj9Ur%2FeWHjiB7SOVdqMAVmpBvfRiebsFjger7DC%2B8kRFGtNrTrnnGD2GAJb8rQCWkUPYHhwXsjNBSkE6lGWUj5QNhK0DMNM2l%2BkXRZ0KLZaGsFSIdQz%2FHXDxf3%2FTE30%2BDgBKWGWdxElyLccJfEpjsnszECNoDGZpdwdRgCixeg9L4EPhH%2BRptvRMVRaahu4cySjS3P5wxAUCPkmn%2BrhyASpmiTaiDeggaIxYBmtLZDDhiWIJaBgzfCsAGUF1Q1SFZYyXDt9skCaxJsxK2Ms65dmdp5WAZyxik%2FzbrTQk5KmgxCg%2Ff45L0jywebOWUYFJQAJia7XzCV0x89rpp%2Ff3AVWhSPyTanqmik2SkD8A3Ml4NhIGLAjBXtPShwKYfi2eXtrDuKLk4QlSyTw1ftXgwqA2jUuopDl%2B5tfUWZNwBpEPXghzbBggYCw%2Fdhy0ntds2yeHCDKkF%2FYxQjNIL%2FF%2F37jLPHCKBO9ibwYCmuxImIo0ijV2Wbg3kSN2psoe8IsABv3RNFaF9uMyCtCYtqcD%2BqNOhwMlfARQUdJ2tUX%2BMNJqOwIciWalZsmEjt07tfa8ma4cji9sqz%2BQ9hWfmMoKEbIHPOQORbhQRHIsrTYlnVTNvcq1imqmmPDdVDkJgRcTgB8Sb6epCQVmFZe%2BjGDiNJQLWnfx%2BdrTKYjm0G8yH0ZAGMWzEJhUEQ4Maimgf%2Fbkvo8PLVBsZl152y5S8%2BHRDfZIMCbYZ1WDp4yrdchOJw8k6R%2B%2F2pHmydK4NIK2PHdFPHtoLmHxRDwLFb7eB%2BM4zNZcB9NrAgjVyzLM7xyYSY13ykWfIEEd2n5%2FiYp3ZdrCf7fL%2Ben%2BsIJu2W7E30MrAgZBD1rAAbZHPgeAMtKCg3NpSpYQUDWJu9bT3V7tOKv%2BNRiJc8JAKqqgCA%2FPNRBR7ChpiEulyQApMK1AyqcWnpSOmYh6yLiWkGJ2mklCSPIqN7UypWj3dGi5MvsHQ87MrB4VFgypJaFriaHivwcHIpmyi5LhNqtem4q0n8awM19Qk8BOS0EsqGscuuydYsIGsbT5GHnERUiMpKJl4ON7qjB4fEqlGN%2FhCky89232UQCiaeWpDYCJINXjT6xl4Gc7DxRCtgV0i1ma4RgWLsNtnEBRQFqZggCLiuyEydmFd7WlogpkCw5G1x4ft2psm3KAREwVwr1Gzl6RT7FDAqpVal34ewVm3VH4qn5mjGj%2BbYL1NgfLNeXDwtmYSpwzbruDKpTjOdgiIHDVQSb5%2FzBgSMbHLkxWWgghIh9QTFSDILixVwg0Eg1puooBiHAt7DzwJ7m8i8%2Fi%2BjHvKf0QDnnHVkVTIqMvIQImOrzCJwhSR7qYB5gSwL6aWL9hERHCZc4G2%2BJrpgHNB8eCCmcIWIQ6rSdyPCyftXkDlErUkHafHRlkOIjxGbAktz75bnh50dU7YHk%2BMz7wwstg6RFZb%2BTZuSOx1qqP5C66c0mptQmzIC2dlpte7vZrauAMm%2F7RfBYkGtXWGiaWTtwvAQiq2oD4YixPLXE2khB2FRaNRDTk%2B9sZ6K74Ia9VntCpN4BhJGJMT4Z5c5FhSepRCRWmBXqx%2BwhVZC4me4saDs2iNqXMuCl6iAZflH8fscC1sTsy4PHeC%2BXYuqMBMUun5YezKbRKmEPwuK%2BCLzijPEQgfhahQswBBLfg%2FGBgBiI4QwAqzJkkyYAWtjzSg2ILgMAgqxYfwERRo3zruBL9WOryUArSD8sQOcD7fvIODJxKFS615KFPsb68USBEPPj1orNzFY2xoTtNBVTyzBhPbhFH0PI5AtlJBl2aSgNPYzxYLw7XTDBDinmVoENwiGzmngrMo8OmnRP0Z0i0Zrln9DDFcnmOoBZjABaQIbPOJYZGqX%2BRCMlDDbElcjaROLDoualmUIQ88Kekk3iM4OQrADcxi3rJguS4MOIBIgKgXrjd1WkbCdqxJk%2F4efRIFsavZA7KvvJQqp3Iid5Z0NFc5aiMRzGN3vrpBzaMy4JYde3wr96PjN90AYOIbyp6T4zj8LoE66OGcX1Ef4Z3KoWLAUF4BTg7ug%2FAbkG5UNQXAMkQezujSHeir2uTThgd3gpyzDrbnEdDRH2W7U6PeRvBX1ZFMP5RM%2BZu6UUZZD8hDPHldVWntTCNk7To8IeOW9yn2wx0gmurwqC60AOde4r3ETi5pVMSDK8wxhoGAoEX9NLWHIR33VbrbMveii2jAJlrxwytTHbWNu8Y4N8vCCyZjAX%2FpcsfwXbLze2%2BD%2Bu33OGBoJyAAL3jn3RuEcdp5If8O%2Ba4NKWvxOTyDltG0IWoHhwVGe7dKkCWFT%2B%2Btm%2BhaBCikRUUMrMhYKZJKYoVuv%2FbsJzO8DwfVIInQq3g3BYypiz8baogH3r3GwqCwFtZnz4xMjAVOYnyOi5HWbFA8n0qz1OjSpHWFzpQOpvkNETZBGpxN8ybhtqV%2FDMUxd9uFZmBfKXMCn%2FSqkWJyKPnT6lq%2B4zBZni6fYRByJn6OK%2BOgPBGRAJluwGSk4wxjOOzyce%2FPKODwRlsgrVkdcsEiYrqYdXo0Er2GXi2GQZd0tNJT6c9pK1EEJG1zgDJBoTVuCXGAU8BKTvCO%2FcEQ1Wjk3Zzuy90JX4m3O5IlxVFhYkSUwuQB2up7jhvkm%2BbddRQu5F9s0XftGEJ9JSuSk%2BZachCbdU45fEqbugzTIUokwoAKvpUQF%2FCvLbWW5BNQFqFkJg2f30E%2F48StNe5QwBg8zz3YAJ82FZoXBxXSv4QDooDo79NixyglO9AembuBcx5Re3CwOKTHebOPhkmFC7wNaWtoBhFuV4AkEuJ0J%2B1pT0tLkvFVZaNzfhs%2FKd3%2BA9YsImlO4XK4vpCo%2FelHQi%2F9gkFg07xxnuXLt21unCIpDV%2BbbRxb7FC6nWYTsMFF8%2B1LUg4JFjVt3vqbuhHmDKbgQ4e%2BRGizRiO8ky05LQGMdL2IKLSNar0kNG7lHJMaXr5mLdG3nykgj6vB%2FKVijd1ARWkFEf3yiUw1v%2FWaQivVUpIDdSNrrKbjO5NPnxz6qTTGgYg03HgPhDrCFyYZTi3XQw3HXCva39mpLNFtz8AiEhxAJHpWX13gCTAwgm9YTvMeiqetdNQv6IU0hH0G%2BZManTqDLPjyrOse7WiiwOJCG%2BJ0pZYULhN8NILulmYYvmVcV2MjAfA39sGKqGdjpiPo86fecg65UPyXDIAOyOkCx5NQsLeD4gGVjTVDwOHWkbbBW0GeNjDkcSOn2Nq4cEssP54t9D749A7M1AIOBl0Fi0sSO5v3P7LCBrM6ZwFY6kp2FX6AcbGUdybnfChHPyu6WlRZ2Fwv9YM0RMI7kISRgR8HpQSJJOyTfXj%2F6gQKuihPtiUtlCQVPohUgzfezTg8o1b3n9pNZeco1QucaoXe40Fa5JYhqdTspFmxGtW9h5ezLFZs3j%2FN46f%2BS2rjYNC2JySXrnSAFhvAkz9a5L3pza8eYKHNoPrvBRESpxYPJdKVUxBE39nJ1chrAFpy4MMkf0qKgYALctGg1DQI1kIymyeS2AJNT4X240d3IFQb%2F0jQbaHJ2YRK8A%2Bls6WMhWmpCXYG5jqapGs5%2FeOJErxi2%2F2KWVHiPellTgh%2FfNl%2F2KYPKb7DUcAg%2BmCOPQFCiU9Mq%2FWLcU1xxC8aLePFZZlE%2BPCLzf7ey46INWRw2kcXySR9FDgByXzfxiNKwDFbUSMMhALPFSedyjEVM5442GZ4hTrsAEvZxIieSHGSgkwFh%2FnFNdrrFD4tBH4Il7fW6ur4J8Xaz7RW9jgtuPEXQsYk7gcMs2neu3zJwTyUerHKSh1iTBkj2YJh1SSOZL5pLuQbFFAvyO4k1Hxg2h99MTC6cTUkbONQIAnEfGsGkNFWRbuRyyaEZInM5pij73EA9rPIUfU4XoqQpHT9THZkW%2BoKFLvpyvTBMM69tN1Ydwv1LIEhHsC%2BueVG%2Bw%2BkyCPsvV3erRikcscHjZCkccx6VrBkBRusTDDd8847GA7p2Ucy0y0HdSRN6YIBciYa4vuXcAZbQAuSEmzw%2BH%2FAuOx%2BaH%2BtBL88H57D0MsqyiZxhOEQkF%2F8DR1d2hSPMj%2FsNOa5rxcUnBgH8ictv2J%2Bcb4BA4v3MCShdZ2vtK30vAwkobnEWh7rsSyhmos3WC93Gn9C4nnAd%2FPjMMtQfyDNZsOPd6XcAsnBE%2FmRHtHEyJMzJfZFLE9OvQa0i9kUmToJ0ZxknTgdl%2FXPV8xoh0K7wNHHsnBdvFH3sv52lU7UFteseLG%2FVanIvcwycVA7%2BBE1Ulyb20BvwUWZcMTKhaCcmY3ROpvonVMV4N7yBXTL7IDtHzQ4CCcqF66LjF3xUqgErKzolLyCG6Kb7irP%2FMVTCCwGRxfrPGpMMGvPLgJ881PHMNMIO09T5ig7AzZTX%2F5PLlwnJLDAPfuHynSGhV4tPqR3gJ4kg4c06c%2FF1AcjGytKm2Yb5jwMotF7vro4YDLWlnMIpmPg36NgAZsGA0W1spfLSue4xxat0Gdwd0lqDBOgIaMANykwwDKejt5YaNtJYIkrSgu0KjIg0pznY0SCd1qlC6R19g97UrWDoYJGlrvCE05J%2F5wkjpkre727p5PTRX5FGrSBIfJqhJE%2FIS876PaHFkx9pGTH3oaY3jJRvLX9Iy3Edoar7cFvJqyUlOhAEiOSAyYgVEGkzHdug%2BoRHIEOXAExMiTSKU9A6nmRC8mp8iYhwWdP2U%2F5EkFAdPrZw03YA3gSyNUtMZeh7dDCu8pF5x0VORCTgKp07ehy7NZqKTpIC4UJJ89lnboyAfy5OyXzXtuDRbtAFjZRSyGFTpFrXwkpjSLIQIG3N0Vj4BtzK3wdlkBJrO18MNsgseR4BysJilI0wI6ZahLhBFA0XBmV8d4LUzEcNVb0xbLjLTETYN8OEVqNxkt10W614dd1FlFFVTIgB7%2FBQQp1sWlNolpIu4ekxUTBV7NmxOFKEBmmN%2BnA7pvF78%2FRII5ZHA09OAiE%2F66MF6HQ%2BqVEJCHxwymukkNvzqHEh52dULPbVasfQMgTDyBZzx4007YiKdBuUauQOt27Gmy8ISclPmEUCIcuLbkb1mzQSqIa3iE0PJh7UMYQbkpe%2BhXjTJKdldyt2mVPwywoODGJtBV1lJTgMsuSQBlDMwhEKIfrvsxGQjHPCEfNfMAY2oxvyKcKPUbQySkKG6tj9AQyEW3Q5rpaDJ5Sns9ScLKeizPRbvWYAw4bXkrZdmB7CQopCH8NAmqbuciZChHN8lVGaDbCnmddnqO1PQ4ieMYfcSiBE5zzMz%2BJV%2F4eyzrzTEShvqSGzgWimkNxLvUj86iAwcZuIkqdB0VaIB7wncLRmzHkiUQpPBIXbDDLHBlq7vp9xwuC9AiNkIptAYlG7Biyuk8ILdynuUM1cHWJgeB%2BK3wBP%2FineogxkvBNNQ4AkW0hvpBOQGFfeptF2YTR75MexYDUy7Q%2F9uocGsx41O4IZhViw%2F2FvAEuGO5g2kyXBUijAggWM08bRhXg5ijgMwDJy40QeY%2FcQpUDZiIzmvskQpO5G1zyGZA8WByjIQU4jRoFJt56behxtHUUE%2Fom7Rj2psYXGmq3llVOCgGYKNMo4pzwntITtapDqjvQtqpjaJwjHmDzSVGLxMt12gEXAdLi%2FcaHSM3FPRGRf7dB7YC%2BcD2ho6oL2zGDCkjlf%2FDFoQVl8GS%2F56wur3rdV6ggtzZW60MRB3g%2BU1W8o8cvqIpMkctiGVMzXUFI7FacFLrgtdz4mTEr4aRAaQ2AFQaNeG7GX0yOJgMRYFziXdJf24kg%2FgBQIZMG%2FYcPEllRTVNoDYR6oSJ8wQNLuihfw81UpiKPm714bZX1KYjcXJdfclCUOOpvTxr9AAJevTY4HK%2FG7F3mUc3GOAKqh60zM0v34v%2BELyhJZqhkaMA8UMMOU90f8RKEJFj7EqepBVwsRiLbwMo1J2zrE2UYJnsgIAscDmjPjnzI8a719Wxp757wqmSJBjXowhc46QN4RwKIxqEE6E5218OeK7RfcpGjWG1jD7qND%2B%2FGTk6M56Ig4yMsU6LUW1EWE%2BfIYycVV1thldSlbP6ltdC01y3KUfkobkt2q01YYMmxpKRvh1Z48uNKzP%2FIoRIZ%2FF6buOymSnW8gICitpJjKWBscSb9JJKaWkvEkqinAJ2kowKoqkqZftRqfRQlLtKoqvTRDi2vg%2FRrPD%2Fd3a09J8JhGZlEkOM6znTsoMCsuvTmywxTCDhw5dd0GJOHCMPbsj3QLkTE3MInsZsimDQ3HkvthT7U9VA4s6G07sID0FW4SHJmRGwCl%2BMu4xf0ezqeXD2PtPDnwMPo86sbwDV%2B9PWcgFcARUVYm3hrFQrHcgMElFGbSM2A1zUYA3baWfheJp2AINmTJLuoyYD%2FOwA4a6V0ChBN97E8YtDBerUECv0u0TlxR5yhJCXvJxgyM73Bb6pyq0jTFJDZ4p1Am1SA6sh8nADd1hAcGBMfq4d%2FUfwnmBqe0Jun1n1LzrgKuZMAnxA3NtCN7Klf4BH%2B14B7ibBmgt0TGUafVzI4uKlpF7v8NmgNjg90D6QE3tbx8AjSAC%2BOA1YJvclyPKgT27QpIEgVYpbPYGBsnyCNrGz9XUsCHkW1QAHgL2STZk12QGqmvAB0NFteERkvBIH7INDsNW9KKaAYyDMdBEMzJiWaJHZALqDxQDWRntumSDPcplyFiI1oDpT8wbwe01AHhW6%2BvAUUBoGhY3CT2tgwehdPqU%2F4Q7ZLYvhRl%2FogOvR9O2%2BwkkPKW5vCTjD2fHRYXONCoIl4Jh1bZY0ZE1O94mMGn%2FdFSWBWzQ%2FVYk%2BGezi46RgiDv3EshoTmMSlioUK6MQEN8qeyK6FRninyX8ZPeUWjjbMJChn0n%2FyJvrq5bh5UcCAcBYSafTFg7p0jDgrXo2QWLb3WpSOET%2FHh4oSadBTvyDo10IufLzxiMLAnbZ1vcUmj3w7BQuIXjEZXifwukVxrGa9j%2BDXfpi12m1RbzYLg9J2wFergEwOxFyD0%2FJstNK06ZN2XdZSGWxcJODpQHOq4iKqjqkJUmPu1VczL5xTGUfCgLEYyNBCCbMBFT%2FcUP6pE%2FmujnHsSDeWxMbhrNilS5MyYR0nJyzanWXBeVcEQrRIhQeJA6Xt4f2eQESNeLwmC10WJVHqwx8SSyrtAAjpGjidcj1E2FYN0LObUcFQhafUKTiGmHWRHGsFCB%2BHEXgrzJEB5bp0QiF8ZHh11nFX8AboTD0PS4O1LqF8XBks2MpjsQnwKHF6HgaKCVLJtcr0XjqFMRGfKv8tmmykhLRzu%2BvqQ02%2BKpJBjaLt9ye1Ab%2BBbEBhy4EVdIJDrL2naV0o4wU8YZ2Lq04FG1mWCKC%2BUwkXOoAjneU%2FxHplMQo2cXUlrVNqJYczgYlaOEczVCs%2FOCgkyvLmTmdaBJc1iBLuKwmr6qtRnhowngsDxhzKFAi02tf8bmET8BO27ovJKF1plJwm3b0JpMh38%2BxsrXXg7U74QUM8ZCIMOpXujHntKdaRtsgyEZl5MClMVMMMZkZLNxH9%2Bb8fH6%2Bb8Lev30A9TuEVj9CqAdmwAAHBPbfOBFEATAPZ2CS0OH1Pj%2F0Q7PFUcC8hDrxESWdfgFRm%2B7vvWbkEppHB4T%2F1ApWnlTIqQwjcPl0VgS1yHSmD0OdsCVST8CQVwuiew1Y%2Bg3QGFjNMzwRB2DSsAk26cmA8lp2wIU4p93AUBiUHFGOxOajAqD7Gm6NezNDjYzwLOaSXRBYcWipTSONHjUDXCY4mMI8XoVCR%2FRrs%2FJLKXgEx%2BqkmeDlFOD1%2FyTQNDClRuiUyKYCllfMiQiyFkmuTz2vLsBNyRW%2Bxz%2B5FElFxWB28VjYIGZ0Yd%2B5wIjkcoMaggxswbT0pCmckRAErbRlIlcOGdBo4djTNO8FAgQ%2BlT6vPS60BwTRSUAM3ddkEAZiwtEyArrkiDRnS7LJ%2B2hwbzd2YDQagSgACpsovmjil5wfPuXq3GuH0CyE7FK3M4FgRaFoIkaodORrPx1%2BJpI9psyNYIFuJogZa0%2F1AhOWdlHQxdAgbwacsHqPZo8u%2FngAH2GmaTdhYnBfSDbBfh8CHq6Bx5bttP2%2BRdM%2BMAaYaZ0Y%2FADkbNCZuAyAVQa2OcXOeICmDn9Q%2FeFkDeFQg5MgHEDXq%2FtVjj%2Bjtd26nhaaolWxs1ixSUgOBwrDhRIGOLyOVk2%2FBc0UxvseQCO2pQ2i%2BKrfhu%2FWeBovNb5dJxQtJRUDv2mCwYVpNl2efQM9xQHnK0JwLYt%2FU0Wf%2BphiA4uw8G91slC832pmOTCAoZXohg1fewCZqLBhkOUBofBWpMPsqg7XEXgPfAlDo2U5WXjtFdS87PIqClCK5nW6adCeXPkUiTGx0emOIDQqw1yFYGHEVx20xKjJVYe0O8iLmnQr3FA9nSIQilUKtJ4ZAdcTm7%2BExseJauyqo30hs%2B1qSW211A1SFAOUgDlCGq7eTIcMAeyZkV1SQJ4j%2Fe1Smbq4HcjqgFbLAGLyKxlMDMgZavK5NAYH19Olz3la%2FQCTiVelFnU6O%2FGCvykqS%2FwZJDhKN9gBtSOp%2F1SP5VRgJcoVj%2Bkmf2wBgv4gjrgARBWiURYx8xENV3bEVUAAWWD3dYDKAIWk5opaCFCMR5ZjJExiCAw7gYiSZ2rkyTce4eNMY3lfGn%2B8p6%2BvBckGlKEXnA6Eota69OxDO9oOsJoy28BXOR0UoXNRaJD5ceKdlWMJlOFzDdZNpc05tkMGQtqeNF2lttZqNco1VtwXgRstLSQ6tSPChgqtGV5h2DcDReIQadaNRR6AsAYKL5gSFsCJMgfsaZ7DpKh8mg8Wz8V7H%2BgDnLuMxaWEIUPevIbClgap4dqmVWSrPgVYCzAoZHIa5z2Ocx1D%2FGvDOEqMOKLrMefWIbSWHZ6jbgA8qVBhYNHpx0P%2BjAgN5TB3haSifDcApp6yymEi6Ij%2FGsEpDYUgcHATJUYDUAmC1SCkJ4cuZXSAP2DEpQsGUjQmKJfJOvlC2x%2FpChkOyLW7KEoMYc5FDC4v2FGqSoRWiLsbPCiyg1U5yiHZVm1XLkHMMZL11%2Fyxyw0UnGig3MFdZklN5FI%2FqiT65T%2BjOXOdO7XbgWurOAZR6Cv9uu1cm5LjkXX4xi6mWn5r5NjBS0gTliHhMZI2WNqSiSphEtiCAwnafS11JhseDGHYQ5%2BbqWiAYiAv6Jsf79%2FVUs4cIl%2Bn6%2BWOjcgB%2F2l5TreoAV2717JzZbQIR0W1cl%2FdEqCy5kJ3ZSIHuU0vBoHooEpiHeQWVkkkOqRX27eD1FWw4BfO9CJDdKoSogQi3hAAwsPRFrN5RbX7bqLdBJ9JYMohWrgJKHSjVl1sy2xAG0E3sNyO0oCbSGOxCNBRRXTXenYKuwAoDLfnDcQaCwehUOIDiHAu5m5hMpKeKM4sIo3vxACakIxKoH2YWF2QM84e6F5C5hJU4g8uxuFOlAYnqtwxmHyNEawLW%2FPhoawJDrGAP0JYWHgAVUByo%2FbGdiv2T2EMg8gsS14%2FrAdzlOYazFE7w4OzxeKiWdm3nSOnQRRKXSlVo8HEAbBfyJMKqoq%2BSCcTSx5NDtbFwNlh8VhjGGDu7JG5%2FTAGAvniQSSUog0pNzTim8Owc6QTuSKSTXlQqwV3eiEnklS3LeSXYPXGK2VgeZBqNcHG6tZHvA3vTINhV0ELuQdp3t1y9%2BogD8Kk%2FW7QoRN1UWPqM4%2BxdygkFDPLoTaumKReKiLWoPHOfY54m3qPx4c%2B4pgY3MRKKbljG8w4wvz8pxk3AqKsy4GMAkAtmRjRMsCxbb4Q2Ds0Ia9ci8cMT6DmsJG00XaHCIS%2Bo3F8YVVeikw13w%2BOEDaCYYhC0ZE54kA4jpjruBr5STWeqQG6M74HHL6TZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gPeHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EmEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh6e%2BXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%2BpT0KYV5dGtknU64JhabdqcVQbGZiAxQAnvN1u70y1AnmvOSPgLI6uB4AuDGhmAu3ATkJSw7OtS%2F2ToPjqkaq62%2F7WFG8advGlRRqxB9diP07JrXowKR9tpRa%2BjGJ91zxNTT1h8I2PcSfoUPtd7NejVoH03EUcqSBuFZPkMZhegHyo2ZAITovmm3zAIdGFWxoNNORiMRShgwdYwFzkPw5PA4a5MIIQpmq%2Bnsp3YMuXt%2FGkXxLx%2FP6%2BZJS0lFyz4MunC3eWSGE8xlCQrKvhKUPXr0hjpAN9ZK4PfEDrPMfMbGNWcHDzjA7ngMxTPnT7GMHar%2BgMQQ3NwHCv4zH4BIMYvzsdiERi6gebRmerTsVwZJTRsL8dkZgxgRxmpbgRcud%2BYlCIRpPwHShlUSwuipZnx9QCsEWziVazdDeKSYU5CF7UVPAhLer3CgJOQXl%2Fzh575R5rsrmRnKAzq4POFdgbYBuEviM4%2BLVC15ssLNFghbTtHWerS1hDt5s4qkLUha%2FqpZXhWh1C6lTQAqCNQnaDjS7UGFBC6wTu8yFnKJnExCnAs3Ok9yj5KpfZESQ4lTy5pTGTnkAUpxI%2ByjEldJfSo4y0QhG4i4IwkRFGcjWY8%2BEzgYYJUK7BXQksLxAww%2FYYWBMhJILB9e8ePEJ4OP7z%2B4%2FwOQDl64iOYDp26DaONPxpKtBxq%2FaTzRGarm3VkPYTLJKx6Z%2FMw2YbBGseJhPMwhhNswrIkyvV2BYzrvZbxLpKwcWJhYmFtVZ%2BlPEq91FzVp1HlQY1bZVLqeNR9SAUn6n0E28k%2FUuGkNpP1DBI5ch%2FEehZfjUQ9aE41NhETExoPT2gGQz0IhWJbEOvTQ4wgcXCHHFBhewYUiFHuhRSAUVmEHeCRQHQkXGFwkAgyzREJCVN7TRnTon36Zw3tPhx4EALwNdwDv%2BJ41YSP4B2CQqz0EFgARZ4ESgBHQgROwAVn9GTI%2BHYexTUevLUeta4%2FDqKrbMVS%2BYqb8hUwYCrlgKtmAq1YCrFgKrd4qpXiqZcKn1oqdWipjYKpWwVPVYqW6xUpVipKqFR3QKjagVEtAqHpxUMTitsnFaJOKx2cVhswq35RVpyiq9lFVNIKnOQVMkgqtYxVNxiqQjFS7GKlSIVIsQqPIhUWwioigFQ%2B%2BKkN8VHr49HDw9Ebo9EDo9DTo9Crg9BDg9%2FWx7gWx7YWwlobYrOGxWPNisAaAHEyALpkAVDIAeWAArsABVXACYuAD5cAF6wAKFQAQqgAbVAAsoAAlQAUaYAfkwAvogBWQACOgAD9AAHSAAKT4GUdMiOvFngBTwCn2AZ7Dv6B6k%2F90B8%2ByRnkV144AIBoAMTQATGgAjNAA4YABgwABZgB%2FmQCwyAVlwCguASlwCEuAQFwB4uAMlwBYuAJlQAUVAAhUD2KgdpUDaJgaRMDFJgX5MC1JgWJEAokQCWRAHxEAWkQBMRADpEAMkQAYROAEecC484DRpwBDTnwNOdw05tjTmiNOYwtswhYFwLA7BYG4LA2BYGOLAwRYFuLAsxYFQJAohIEyJAMwkAwiQC0JAJgkAeiQBkJAFokAPCQA0JABwcD4Dgc4cDdDgaYcDIDgYgUC6CgWgUClCgUYUAVBQBOFAEYMALgwAgDA9QYAdIn8AZzeBB2L5EcWrenUT1KXienEsuJJ7x5U8XlTjc1NVzUyXFTGb1LlpUtWlTDIjqwE4LsagowoCi2gJLKAkpoBgJQNpAIhNqaEoneI6kiiqQ6Go%2Fn6j0cS%2Ba2gEU8gIHJ%2BBwfgZX4GL%2BBd%2FgW34FZ%2BBS%2FgUH4FN6BTegTvoEv6BJegRnYEF2A79gOvYDl2BdEjCkqkGtwXp0LNToIskOTXzh%2FF062yJ7AAAAEDAWAAABWhJ%2BKPEIJgBFxMVP7w2QJBGHASQnOBKXKFIdUK4igKA9IEaYJg%29%20format%28%27embedded%2Dopentype%27%29%2Curl%28data%3Aapplication%2Ffont%2Dwoff%3Bbase64%2Cd09GRgABAAAAAFuAAA8AAAAAsVwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABWAAAABwAAAAcbSqX3EdERUYAAAF0AAAAHwAAACABRAAET1MvMgAAAZQAAABFAAAAYGe5a4ljbWFwAAAB3AAAAsAAAAZy2q3jgWN2dCAAAAScAAAABAAAAAQAKAL4Z2FzcAAABKAAAAAIAAAACP%2F%2FAANnbHlmAAAEqAAATRcAAJSkfV3Cb2hlYWQAAFHAAAAANAAAADYFTS%2FYaGhlYQAAUfQAAAAcAAAAJApEBBFobXR4AABSEAAAAU8AAAN00scgYGxvY2EAAFNgAAACJwAAAjBv%2B5XObWF4cAAAVYgAAAAgAAAAIAFqANhuYW1lAABVqAAAAZ4AAAOisyygm3Bvc3QAAFdIAAAELQAACtG6o%2BU1d2ViZgAAW3gAAAAGAAAABsMYVFAAAAABAAAAAMw9os8AAAAA0HaBdQAAAADQdnOXeNpjYGRgYOADYgkGEGBiYGRgZBQDkixgHgMABUgASgB42mNgZulmnMDAysDCzMN0gYGBIQpCMy5hMGLaAeQDpRCACYkd6h3ux%2BDAoPD%2FP%2FOB%2FwJAdSIM1UBhRiQlCgyMADGWCwwAAAB42u2UP2hTQRzHf5ekaVPExv6JjW3fvTQ0sa3QLA5xylBLgyBx0gzSWEUaXbIoBBQyCQGHLqXUqYNdtIIgIg5FHJxEtwqtpbnfaV1E1KFaSvX5vVwGEbW6OPngk8%2FvvXfv7pt3v4SImojIDw6BViKxRgIVBaZwVdSv%2BxvXA%2BIuzqcog2cOkkvDNE8Lbqs74k64i%2B5Sf3u8Z2AnIRLbyVCyTflVSEXVoEqrrMqrgiqqsqqqWQ5xlAc5zWOc5TwXucxVnuE5HdQhHdFRHdNJndZZndeFLc%2FzsKJLQ%2FWV6BcrCdWkwspVKZVROaw0qUqqoqZZcJhdTnGGxznHBS5xhad5VhNWCuturBTXKZ3RObuS98pb9c57k6ql9rp2v1as5deb1r6s9q1GV2IrHSt73T631424YXzjgPwqt%2BRn%2BVG%2BlRvyirwsS%2FKCPCfPytPypDwhj8mjctRZd9acF86y89x55jxxHjkPnXstXfbt%2FpNjj%2FnwXW%2BcHa6%2FSYvZ7yEwbDYazDcIgoUGzY3h2HtqgUcs1AFPWKgTXrRQF7xkoQhRf7uF9hPFeyzUTTSwY6EoUUJY6AC8bSGMS4Ys1Au3WaiPSGGsMtkdGH2rzJgYHAaYjxIwQqtB1CnYkEZ9BM6ALOpROAfyqI%2FDBQudgidBETXuqRIooz4DV0AV9UV4GsyivkTEyMMmw1UYGdhkuAYjA5sMGMvIwCbDDRgZeAz1TXgcmDy3YeRhk%2BcOjCxsMjyAkYFNhscwMrDJ8BQ2886gXoaRhedQvyTSkDZ7uA6HLLQBI5vGntAbGHugTc53cMxC7%2BE4SKL%2BACOzNpk3YWTWJid%2BiRo5NXIKM3fBItAPW55FdJLY3FeHBDr90606JCIU9Jk%2BMs3%2FY%2F8L8jUq3y79bJ%2F0%2F%2BROoP4v9v%2F4%2Fmj%2Bi7HBXUd0%2FelU6IHfHt8Aj9EPGAAoAvgAAAAB%2F%2F8AAnjaxb0JfBvVtTA%2BdxaN1hltI1m2ZVuSJVneLVlSHCdy9oTEWchqtrBEJRAgCYEsQNhC2EsbWmpI2dqkQBoSYgKlpaQthVL0yusrpW77aEubfq%2Fly%2BujvJampSTW5Dvnzmi1E%2Bjr%2F%2F3%2BXmbu3Llz77nnbuece865DMu0MAy5jGtiOEZkOp8lTNeUwyLP%2FDH%2BrEH41ZTDHAtB5lkOowWMPiwayNiUwwTjE46AI5xwhFrINPXYn%2F7ENY0dbWHfZAiTZbL8ID%2FInAd5xz2NpIH4STpDGonHIJNE3OP1KG4ISaSNeBuITAyRLgIxoiEUhFAnmUpEiXSRSGqAQEw0kuyFUIb0k2gnGSApyBFi0il2SI5YLGb5MdFjXCey4mNHzQ7WwLGEdZiPPgYR64we8THZHAt%2BwnT84D%2Fx8YTpGPgheKH4CMEDVF9xBOIeP3EbQgGH29BGgpGkIxCMTCW9qUTA0Zsir%2BQUP1mt%2BP2KusevwIO6Bx%2FIaj8%2FOD5O0VNrZW2EsqZBWbO1skRiEKE0DdlKKaSVO5VAuRpqk8VQJAqY7ydxaK44YJvrO2EWjOoDBoFYzQbDNkON%2BUbiKoRkywMWWf1j4bEY2iIY1AeMgvmEz%2FkVo9v4FSc%2FaMZMrFbjl4zWLL0%2BY5FlyzNlEVYDudJohg8gPUP7kcB%2Fmn%2BG6cd%2B5PV4Q72dXCgocWJADBgUuDTwiXiGSyZo14HOEQ2lE6k0XDIEusexDzZOMXwt1Dutz%2BtqmxTvlskNWXXUQIbhaurum9GrePqm9Yaeabjkiqf%2BbUvzDOvb2Y1E%2BEX2DnemcTP%2FzLcuu7xjQXdAtjR0Lo5n4%2FHs%2FGtntMlysHt%2B29NXbH6se%2F%2FWbFcyu%2Br28H0MwzI30DYeYTLMXIA2EG8QlHpAsyS0EfEToR0a3utIxFPJ3kiIHCCrZ66b0e2xEmL1dM9YN%2FMwS5p01N5jMX%2FBLKt%2F1R83l0LyC29M6%2BiYxo%2FUNg%2FEF7c2WyyW5tYl8WnhWg2%2FhyySbD5UhnDyS7OcU0dnrFw%2BDfGdI7v4QfYIIzOMq9hFtY55gmvC7jZ2FK7sEdrn6IXBuucYhjsGdQ8z0yEbWkkczjjsE5hNAIZrPx2zOLZDmKNXcXtg7EMqidAEEWg%2BSJCBBNwxvxJfc%2FbZa%2BKKf%2BxoKZybnq5vaqpPTye7CiF%2BZFjxZ8%2F7Qij0hfOG%2FcowPA1rT1l4ymWnrKmxxqfErTVrpgwPlz1kC%2BOy8NMDz6c%2BIO38K%2Fx0xkPnLW8Kx6qGAoQdL%2BTD9V9rb%2B%2Fctn%2F%2Ftrxz8dUrZrD%2Fzk%2FferF0cNt1BzctmX2FZPXt%2FjnFCQNz4Ah%2FiKllGiCMs1w5Lkg0kiEwj6VTXCDKsX9rMpnvIj9pcDecXAIXMnqn2dTUbN6w0XQ9ue6FV%2FnnXCH7S3lPWGltVcLsH75ub3ab7A8M28caNrIeOr3o5Q0yFsYL80xaa0EY%2FUEczV7icUMY5pnelAkmUAXmHYjvFWFGxuqlSaow3OM%2B%2FiYY7%2Fl%2FhVELF4EjRqNR%2FbvRbOY%2BDUGzGR%2FOh3EqmE%2FugIQQguGt%2FeMYz%2F%2BL0cimjeZfQDI3phXMbMQsqH%2BCjwVz%2Fhf4idHovgVmB8gLvjbicDcC%2FNypP536E%2F9N%2FpuMibExdohBmNwyiaZdJGoigos7GpF222xrfnZhML%2F7Z%2BylaqP63Hr%2Bm7bdUkQ6%2F2cXqdfmvwixY%2Bs2ksXFeXcE%2BiX0Z%2BIow76DBNgjJ7TOdUK18iPsPflfQD%2BDPsZG2Aj9VmKMMJ4fYRrhIaxhTDR0Elh2vA6h%2FAE6xUb29mj3sjmL72petXjejPy%2Boel60M99tFduCI59N3221xe7apOvxs6aHs7vab1IqY2tv7q2xsHeHGml%2FcV06u%2F8S%2FxTjJ%2BJYc0bWEX0ukW6YmIbGkJRMdjJ9mYIH5QIdJF4hvRGyK7cC7ctImQRcUET99fGXOoft35GYLMQu%2Bg2smnkgZUrH8AL%2F9Si217IssJ916nv14ZrJrvdxLkQvrvtBcjgPC0NXOicO8Qf4mcxPqh3hgUw3DDfdvLJXngg7N3dN2zbPJSaed3OfZnMU7dvmznp3C3bruO%2BNmue0LFsy7S%2B6265%2BfCKFYdvvuW6vmlblnUI8xCXp37CrOZv4B9gauDBlYp7adcUXB5DNCwYImlXOJJKkAdvExXxVvKEYnCo%2B3eIskP9qrrfIYs71CccBjfXRC52udTHHdaP1A1ui%2FVvH1otbrLrpNXBsGX5B89QghDyimlvNB2KfkxZ5C9%2Fem3%2Bd1%2Bd%2F%2FIfFp2%2B2Oxn%2Fs%2B9n%2F79p39S3s8idN6g0yZObwJOgKUpNB3GyU0Ls0PbRzIRq4lcarLKOJBkLRzJQD4j2090XrbA7DW8K3jNF5hlGS5e4V2D17zgss4T20egOJte5iD0bReM9yjTxnQxCRj3c5kFzGJmGbNKmwGw39IJDJcXJZGMkaAB4jyJAKw0jt5IAuIE%2BA%2BU3cVAZZrq9zhDyBrU8oosuxcGNTzCKJfla7JjNVmuSb%2F%2BtuzN2H%2BX4vlB%2BPpdfMXXmuVsNiub1T34SFbjYw5itEvVi0K0Nt9pNJUMI7SLGRhf2xipfCYf8z5OdlGKayOucFeVPeS%2Fdbo3lBrbSMmwUiQN5%2Fed7g0Ds1s17IuZC5kNzM3MZ6EWCa0DtekdJfAxz%2BR%2FOX28sND7yRMTBcf%2B%2Bs8mQCQWHya4qBv%2FufeMoWyslPA9DtMxUknxkH%2FyfTnm2CMYzs%2BCq3r7PxY%2FMXomrvTEsRpfEGHa%2BWN8E1AHjElb7d06ddA7oK%2F%2B5Mdsv9EtPms0jv0Z5kf1FqPxWdFtfFr0kHfgDX0Y%2B5PRSG7RUj0tQr7rmfX8DH4G5W28kKeJLtmQsQkuwMP1pk16EV4sl7vrMJATfyUWo%2FGwEco4rh4XFQgaiUX9qxZHrMQqKnz%2Fc2d8b9TysYrAuXpP%2FRf%2FGr8b1qwwc5a%2BeuLa6S6sneNXToG2XrEJi4R5SGs8Sq2S3d97bsfCRaTdaLwKClRHt37mkudvXbjwVrLhuYeGhh56bvfQkHpk2CwvwClqgWwuBfndC3c8dwmstj81KkagcUgbfPY8Zje0W%2F82VPWJHmSq6pP8hPWpotc%2FEexDOK3qU%2BwngPhOCiO9MJRm8TJefjelrzoKnG2Bn%2B1NCUmPE4gHFmBN9jrTigRIpsACrc9Gstg58ULkp9467%2BGf%2FeFnD5%2F31lNrt2967dhrm7bzI%2BVT5m%2BfzKhvf2MzpICEm79Bopkn07lt1762adNr127LwVqQLdJ5%2BlpQDcvHPQtVY5knhYrK6q8%2FJsiP6EuhGZdFdaNszjvpqvc%2BPI0CdjN0AXsFOC3ZfALDJwr4q2Xq%2BGF%2BGNbsxUg5NLLIEXi8otcDQcUts0D8eQ1iVDRAMBTsYiNdRIxE09EIBJO9A2xqgERTaW86BUFn0OD2xFO97FAgFhF6OoQ7prYt4XwSeUgQHiJyDbeke9IdQntciLQ1FlJMaYcUNvZBg%2BFB1ubjlnRNvl3o6IEU2w7fdNPhm%2Fhh%2BFLysUu6%2B%2BDLHkOkrSHYEjH0tEPe7WdD3uyDgvAgK%2Fm4szFFR7ch0toUgBTdWHr7EpaWru6%2B6dmbbnqWEbV2EtxAsXiZAPTtGPSbHsotI2leoM8TePEqgSQprs7AGFf8kuOkPdZPXGb55POAW1d%2FjLST9v5YflasP6v%2FCO7%2BGNAPC2BMZWmsOjp2NNbfHwMCJD%2BLPVL%2BD%2FOYlWEEI%2F9jpPddOFkB5d1GSuKZYggmCCd7JUxD7EXAzxyirYnNDLdDZoFdx14kivkvGc3579Jm36reTTvDgBnaO6vzyQ6chQmlsMoIkIQ2%2BbBDWBud1Va4pcCn8CPqxlh%2FfgtG8IPaPH8C5wk6%2FnZDv69jurV5QhtwE0x2iqOsj9Mx8B9%2F0EaUdiPfOYYDCi%2Fq9jhWRuupMDEU0%2BCtX0sDFxv07T%2FK5niBPqN9%2BtQjgEc31NGCXFeMcCEuQBIc%2FBK4CO78u7EPYvl3yaEfK3vcb6qP1R2tI7vUjVDDUdKubsSrNjYKY1qBEa2P50SJoaXiksIoLiCwnxS6EBuBde87botNfdEWwYvF%2FR0%2Fu5yCqhGeEOR2ynSeyXjt6ka7neyye8kryBSWE52y%2BRBgogrXPZ8E1yIHoHIFUM%2BAbJhE7lbMtt8ApL%2BxmZW7PwbjAO0fAVoXQOuiSP%2FksIVdFZ0aulsamKUzwPZ%2FNYDMJRBPCxsBqLzqHyneXF6Ej9HlIFo7%2Bpg%2BjUb3unRmGpstGkm6etOuDBGA5wCMefp1gTHcdZlvPBXlOslvYTp1cd8UjYLVd%2FJ5awNrIOKLnIt9MD9qdrKrWCvA6ALm3QV9VrsPm60Q7%2BRHJHP%2B2hqfugo%2FMvI2H%2Fmqr4b9tFnKSRY1Y5Ek80Nm%2FWIhr1ikKnxGz9TWXrokf9xwujfvcOTtNTWnxd0F37Y2W79tteBqZ4G5qLCuomw%2BnSr28QESCRVLTyYKILGJOPfcnaIFOsewhRdvv%2BrWa%2FWih0vlbX6Zb75T5C0qNKVFvH1QL%2FvazSWgC2s6oWXXIuUxQelKiJbowuJDQViatLmLijg9CQBMg8WiPgiw3LEeYRmm5f%2BXdnvkDnxLLjMLxtvX74C3OlwPQqx4xwIdpPx38LrlDphiyWUWHWKAzzxurS%2FxTo%2BP5wGFak62ap1PVFFN4v%2Fy%2BxuR39WnIO7lsWfwgVsK17wxrs9K8ltIKuhkw7f%2F6dhK6gQokFKhWX3urrjk%2FrnI0pgfpGMeuQIUaEM7%2BGF5q2iMkCaMQwxxOzcvU0eXbsnS9XknXvP7Gtw5dwPXlFu2ecvSHEZgNDsU6x%2FGdXBYXyOQjzZReSedeEPY6nEv9gJR4oBQJtFO6Kd0fwC6BO4LNHDeBujB6dSNcUQC9zIv2LnAzGk99bUDrdFY%2B9yGFQtEo0GQPNv6vS2drj4%2B1jHbv3aJSMUWP%2BQTZrmbNTjU8wyG%2FiXNNpskybLcJ3CiTF5Ir%2BJYzmJwE0mSVhlxbtbmvweB3ulB6Til5UuUZydpgiFVeobhU0WaBqpJ198d%2B%2FXeNRTZ9%2F1OPfG7%2B2hwzd5W3D%2BhmyjsRcUg%2F%2BCavb%2B%2BVh2ls3L7zT%2FetOnHNxeerv313vzLVqPai4nJv%2BK1FC6040%2F4udw7sAb3laSg0XCkAAs0npBO6VJabS4Elk%2FU%2BD4gTXW%2Bj0wnrMlqNamq4tMIYB87tE10i0FR3LZNhJsb7%2FR561btmes8YBCRkhYNByRtKd55mqTas9FYhJnbRGHuOh3M4QTdgQSqmgRxuzGdSvZGcbMxNQGk5C3ebLjoXIOFM4l%2BWKHmLTJwRv9E8GWJ6dYvf%2FFmEyEGr%2Bgyrr1p5zrgkz0Cw2j94Hv8Jdx7dIVegBSNtgsqGsRQEYiIBoXwD0LNvQ5d7s5Z00QzwNhqZA0b%2BtMG1tQq5nd84uq8R0zPvX35G8uRaze4jcOHzz0w1%2BQ2BIRvf6J6Kgatnrbiem%2BCFvAxfkrndzD9MFPP1GWTUHclpASUkCNAQkpCCcCgDSUDAhDZ%2BCuEkgn8J7i9nMA7pA4lISappxILKfAeSAbIcSDuN2bJcfZILqeO5rLs0MnngSHYRdrHjmaz7JEsEPw51ZqDJDmUIOZIe34WaQeegNsJn1qz8AIpT3yCjyEih%2FxELkuJ0lEMYTLVCiWpo5oYMleMH6USyYJcD%2BuOe%2BkWKpn1Qns34iyYDjkSLvgnZXcgVQNeqINXr48m3iS7cjm8tedyY0f1QvTnHHdsrKby%2F%2BSSbPY8%2FNH6vpl%2FEsq3Ae4ZU1HC44KFiI9o7CEgab%2FRqHbj7s5KAg06s39ZP%2FzxI%2FmVuF%2FTbTSy%2B3Fb8If9%2Fcv7%2Bwt91yy8RfP1QXtW5RzQn7qIiZyuFM5QfJ5E9uVnqT85TanFx0lkP3ukBAMprvsRyi%2FC8NAJL1xbIIirSvnSj4O5netb4JxmNANHPssHAcHMHsFRgEug816gDBeMbdfiuRcghqYcm0%2BXxx%2F5IAEtN3fqFF3LzAXqwoT0PN0OVTNqxo8sxMkd5Ig6k79Zk7VxxX6gMLOZFQgvpW2RrMW1D0BDihaXQ9wVRoBxPLfpknmkeMtoB%2FqM9cRc9IqmMD2XUmdZ7GSRKPUZvChf8BoykriM2MnKYbOHX8R7cLdNCxSFFVQqoYswnlWtlFS2mNkhswVpZiQW1J%2FUKFfipHGlUkM6UKBhMz1istELIHJLMSctu3ugzfaVSOjKvUgc%2FTHK4Sdg2Wscz69leKIkkrwuuWiOe9yGYKQXRumkC3qbRcMwrvhjNXgdZk3RxAUEhuSPvn3nnd%2B%2BU%2F3vlVOmrJzCD8JLxV1OHRjrZifbcFDOuRNTGqdgQm1tSNJ2OcQ04YiEXuxtII1ECSQRoQGYioEsgCfchB4ghAtw7FfJre4WZ9hkVi9MtjuWqtdNDlpMrfEG9fOT6q21okg%2Be4As38MfGquNt7oUws6Ysarj1%2FefE%2Byst86YUVNvDdts3Pv5c8m%2FaP0C%2Bf8%2FQb%2BIMnGq09BgwN01oIOAnAdagI8mBSrqk1gxTDUBOtk2ousEtBH2z4Ir2d3f6k8PXXVlt2qN9RODxRuoJT%2Fv27wm09jRYVc%2Fe%2B%2Biyx2tyzJb%2Fn3J0htXP87eSsQaf2Ly0s6Zmxela88REy1cf4273mI3iXNJ7KxrZibOm9xm6rl4fqy%2Ft27smU8tOfdW2ucBzg2UfmOIVyLIl3kpYlwphDISTXJXsctmiDtN7fNV6zelgxwnWxsVr83Aj%2FS5ki1jL%2Fa0GC6%2B2L6Um%2BaoddlNFuj%2BbJ8mH%2FiaLh8I0%2FU51NspIEfq0dohwyFXKgm4NggwQ4rRhCOUFtxxo8XnitT4cnGfT93IS8FaT85XE3H5LMY4zIEPL1hw443wz%2B1UmhTJyJGxZzw%2BwsKkKZgUiVtKOKMEb2AKHTv61FNc01PQFwKnvsZ%2F9pPA4RKTASWahmh%2B8MxwzHxKy74IRn5LGRjsPUUwTu64UYNY38caqd7HKucZ%2FtHnODtENw%2F2UfHRMaq1UUPDJQ0OKkWCeet5fYOhII1VRz8%2B%2FElg5j4Gxur3J8o2PJ4rg%2B2d08T%2FfwEzSVbyZ9XPro95T477lRKqUSRXQnauHNsISAl27oWi6Fv9z48JMv8r%2FaMMj8onCP%2FDuDZOuN%2BGPPr%2F%2Bp7bx%2B7JlbYdppcNhzKU%2F1Px5aiaGDn%2Fs1iGMaBcleKUo%2Fv9rcxkZj7DBEKOfrayytXNLYiUdBY%2BpleQXdnscKlQcpzuWluxsieeyuXIK6SdxozitWyGOV3vOHHjguyCQ6fpIYy2JwvrQEF%2FQa9Pdf%2FQqOSqCiE%2FEE1%2FXIVKTc2tzWbHnimrEd%2BVyz311Ml3P0GVTj7PD5aDnsvCvH36alEaPMePcMegXs7x8igTu4B9v7G9vTHvhCu%2FkzIdx%2BBxC0ay9zRSvoS0F2lIxI%2BX7klU63I40gLQ3w5ep5na%2BSFnba3z5D64zv%2BQtM4n4ffG3tq4aNHGRfxgrXPMim%2B5487abL7xhdseIRn1KDl%2B7aINixdv0OD%2BJSPwKf5%2BxoP6aiTeQIDVlIhMcL1H5R9PYXvprs3fv2bO7MOplCmweuiq2JRZ1zz%2B9a%2Fv2PH1Hfz9236w%2BZrPXvWfAxlj4NLLHpq3c%2FPQ3uvmvbrjG7fe%2Bo2y%2FcLdtE6VUlXi0ASb1VLUBVSUWSU4HdvAraTyS8xzM8NxvxFkXV6pUVRiJwcgC5zEeht4rwcp7ki0k41G0qlQhG1Vzlq8alEmnFi58caB5Q9vn988MLhqyVlHvLEWjtQFeupdiocF%2FtkkOGPW2ibWaBTkeZ%2FdvPWazXfOnnvL6jkRXpi85sFzZt%2B55ZptW3bl1cCCHZPD06MhySha7UFzjcjbp8fOecFCirzAG%2FyVjBX6OFIaadSjQq1nNhyIe8tVbaaSdHlXIWKacMeuZA1uxS95zILhyrxAdsXTL6m7kNQlx2P9uZf2qhufePFFbpI6%2FOU0WcP99RrCsrwseVot5mtytpf6Y0gm9sdeyKnPQ7onyK4nXlR%2Frg7H95M1upzu89DH6pgUcikoiihJ6NJKmRxV1x%2BMJiOA3YwhDRQrWU0u%2F0rvq0VYXnyCwsLeTJYBq3dAtJDavuzyoVpzZ99Z0%2Ba0uoiFH%2FxcqgDR7rUFeOrUn6Cywb8ZeNMbhLV5ugP9l0zv9UN5b5mFkjzxUcpPJCn3V402pRxtJd2GrnLdhtVk9ZSZh9W91fCSH5B7ofxPiWL%2Bj3D%2FuwhBRdyAyozeZwvQzs79soi%2BBKSnafLviZCcfrpBpLyimfLfTyJtbyruIQKD01tUwJyKEo%2FybaxkSNFUMdMkhQoJyRBQFhnUkDQSXhTM%2B3NmY0EDM7ffLIjqWEGt8lCO6mLia3PukFnghosJD5p5SIho%2FVDkzQfLE%2BIrYoJXkD19pdP7OwG%2FvoIUtagiWiZ4PAFTHHlTVhRZ7dYmPar%2BNJ%2B8JhmR6DFK5DV1foHoLNO%2FpHrvZfmWZ15RQlwvoVDKhCWNK3CCch9lfFBuAqUgpFSShmNaPj%2Bi5%2B%2BWZfKeViJfW5HnUakVL4UCNVkA4%2BETfIqx4B5xSaP2L1yn0zn2ltPn4%2BOqZGmwwEVCaCSqG53ldtL1oLGAhdMLd09MpCCF6tD6ZnAZBY9hDaYsP0jzZ0j5ZjKsF4i1UmLuhbJMCnYJPt5VwFNvmZawXjEvLJqIH8STonZjq7BZ8gKgR20C9MDFqJAX1H64QW2NEup6qgzLP8cvppL%2FNNTOBTCJABOHeWoXzLhw4Wuy7gaBtjKr9kgKq8ZlRYBS32Lpxc8vIhpNDTfyNXWybMJbn2RyQ5EmWc2QF9wmSZ0KYCE%2BcPuYO6b15Uotj2Kd4MItLS7gtFbkTdrFND6pvEZqv5Yv7jXAus7Pg7avo7KDot50NX3CPkP%2BKps8J9%2F3mGQIteY%2FLGPC%2BL7872SPR2br5fy8MtKBMHedGuM28%2FMZmPJMrGgi3Gb1S%2BSi1%2FL%2FzrZwO9XH1ce%2Fz7ZQ1WSoY%2F%2BpMb5FT4ua0Wm%2BJf%2F298nFmChEQ%2BTi71est4mq9VYI6RsymoRJKYidElT2FGnDTZvqtfhGAFTbeqEw68GqtfmbVa%2F1IFO1%2FjdWr%2F8BDRRtQh9XNjubEm4aWVpVonpTGR7PVGc%2BKJNoBIWF7kYi4gUV3r1U6723i6TxUl3n3%2FtM27aZfKb7THiHW9VzFSwHJ05VfK6Ar7kaB0XgPPE0BSkSFKsBUpaLihEWoA9wBt8qirh2VSOkZwXEwyrxZ5jyt2rJmSo9gX7cg6jsEUGJU9z9xJPOEM3uQQxKgkh35DNATnVyrmJ3mbCNyIB%2Fyox4wH1bg2DwN7q9kov4pFqny8oSm3RQbGgJ1QQTs6ZMLilOVYJ9v6Wha3HcJ9jddsXp9YhGUXLXt%2FqMDnvLpPNTXfNa60z5%2FyjXQOMq%2BlNmwh5egpYrdfZQZV9rI47xlRkuyTjpzsmCBSWNkAXVoK8sgYWqQJWbo1RLo6QH0YW6pxqfCnRgkd%2BRiFjUQUQ7poIaYoakgXxwFd9BuuI38H1xBxXSFb%2FpBDIKQFn7YB3dB36l7sG1FLaKiBdp1KxLvfswap%2F30lnVESgNnvjbUoT6w9N%2BXoio0qcYOIM%2Bheg940YimsucQVvli9NEcft2UZwGQwLuilj1fFr1i3NP94X%2BPE7Hpvtj6lBJfJ4R6NvWiaL6MgzWHxiN66DExa%2BdAdAbMYX6HVF8A%2B7rjEZIXAVbDe7PVI9rmN69JOLV1DOSvRPxWNPZBZf%2FNf%2BNy65BhYxxxV%2B77XJ2wfQ389%2FIQPgajXbwMsuAz%2F0IaQcXJavKbRqR2IqyZruXjVC2%2Bhdee%2F5vdnYOedpmVtR3NGXldxSzDSIiBVpkGb9by89UpEPKrSLZmyFDzMab%2FwXl2CNe7s%2FqCtTvWgG5kpBmCBlSzDS%2Fr8N4uwBwohRW63JTS1y32f0TQsPfXVGEHQrV8%2FNCfiOUVirYcBbIeA2%2BiF68rQIo3B%2FS628vYESr79ehzS7Q9LEL9UXmik9XVHb1yBO3Ngvt5935%2Bk1efkV51mzzrM0LL3%2F20avnwMeKuWyOUZg2TasSqZ%2BKcZQiOn1Iu2Vh497ALUVZiCKt%2Fgh6IvTIj1ZLRjWAkpHKOKovNwp00eqPROiAbiNEKieXwMLcXhVJ1%2FuzmLP4tfxaHR59cBdJVG1kTAgl9ze9QKUEQ946Hkb%2BokJ5JRDyf54Axur1D%2BWS49cLr0tTPEu7UmXrxcSr3XNvumv4yXzInXKH4F7Tc7p17Zt%2Bt%2FqW2%2B93k063X7VW6lALxTY7i1nBXMxcxmzQbabxz%2BtJo%2BwijYaIGMNS8AoSMgAPt84DdHOoMPfjXhF%2BkuH1tZvuFQrRCN07xGcXRX9MYxYchDe5BcHj%2BZ4i%2B42WyPc8Xofi7bbZJN5nJLJ5qr6IqRtzqNlM17SpFsnkEyTWoABEjz4JXOQvzWYuwdnV5LNGOwTM5v9r4RpQ8ZXsYodks3o31JBlzbYtNotisnm22MxiwGFXam5oN1n0TA%2FhRvshvTSDwHff4nNzRo9Dum6PaJbMXzDz%2Bx%2BFkj4L4bFNBb1asqsgH7Dyh4DvbkPtf5yMDKzEwyoaESMSNS9P9gJVA3%2FRTlwoMwZvxECFWxIPNw9gi01nOHjP32esZTtmXHnxvZd8ZtakqQ7ekajbXetpNa6ocTVxJtY%2BuSe69OLz77zh5bDR3xjZMzUz6fxrz1nqrZGcHQHfPVefN%2BfiK86LeXj%2BSc5lPKy%2Bk%2FvCUI%2FDaLFYCWHr6nbXuILTIsb5imNKY%2FrCm28fSMxPhkN1XbNMNZGuqwOBhtTSxWuTk6bw0ZaG86b1hKddePOKuBvmiguYBn4T%2FyOqOyGRBt7bKUI1GjioBC8aUKwF7Q319UgcmtFGIzCJGBqwQij0ynDsfdFGc3TS3BlNfJ25xmzniMkpXXTPvCaD3ZaZvyzjmZdudBostmhb0ORZNN2sJBeed1HXkrUsywueQH%2BL0eCPxmsa5ZpgRJSDZ11yDv%2Bjmbd86vxZfc1WcZJ3UkMq1BOOOVtvu%2F%2BpB%2Ben186d3GTwWAw2jheaJs09%2F%2BLNfZft37DALyrNj1wABMuUKbODyTVnT%2FKYbJ3Tpq8IrNh92dkxOj5P%2FYpZx4%2FycyiVcDYdn4JbEoKdQi9054iBKsygLW46FRGxAb0NPNCm8BSNCPjoKcj6EAus4SuP3rB%2BcV99%2FeTF6294dA8%2BTK6v74MHVpYNRt%2FI30e8QGTOOdfGWzzxcy%2B87a7bLjw37rHw1nPzp0KyyRSeZO%2BQQhInt3dYgvycjrPOv%2BT8s1rptaP84VeywdWX2T4ysr0%2F7TLIs6%2Bx9zib56ye1dM9e%2FXsZmePY3NDs9zlnNVt4%2BWgHJbbz3Livg4P9WWgviOMm4kCRT6I8vw0NbUUEnFvOuFKoxQW1gTsvFirsF5pb7qTUCx4i7VmtToveaDxvK9uOaedVvPRpVOnNz0Q6bry7uiSdQ8t7Vy4JQKVS%2BXPplV2ts4bvCwZu%2BKzgITtxepaPRzWdpv74muvv6RO0SorX6cu%2FdqKn%2FXWnrtp%2FZragz13DUCl5myiFW2Ycvb0PtsXnU%2Btx8pvLFbUspLX68mdegwmOif%2FNPDONajTGoUh6tU56HBJCTBASVvNUB5VIiKpc9kd7kludodSFz7xQbiOmMk5dOYk56gzL6uaf7N8a6MQOHm0ae6snZpFDfuT3%2FjdYzjzwkXXIVHoXNuCfQslQZqBZjTsoHMqrkE4jaYdgkGz2ATOgB3cPkSukD01DnV3ttb1wx%2B6arPqbkcNAHoFPzKUUQ%2BqL0k97pjbZv1I%2FegC9zTFbrrlFpNdmea%2BgIgfWW3wqkcis8ky5FAcRd1If5nNZrl2FFpungc8wpoCl1BpQV%2FScS%2BzjlASyUTVv%2FAJ46gkJI4bHX4lTnloctxPZE1ckS3%2BjG2fKIjkQFyzuo8jvYQG1OrGvJPSTu%2FnSp9PHNTl4z5hK%2F8gtXVKF6gEKiglgcKiRlCESsQCV5QIlKWKpr34lt%2FwkSx%2FJCmP5%2FcBKQfl%2F5gd%2BrOS%2F%2Bp91%2F%2BYCg5CXK2W4M9fu%2B%2F6xxX%2BvnelVuldIDCG0VQTpU9Dw4pRfei%2B6zWx0MLie0gPbyrkmRU7OwT16JGeyXLHqOLqAfVN1GPlBzWtFNzj0TRTCjogtP1NjIvu5habN5Aoa1k66wGpqriVetJgiGdwDZtKhnN0y4n9sXYnsqGmZfDSR15%2B5NLBlhoDaedEm7sxmpqRija6ZEEg2EAnTiAC8IrmFbGz1q08P9PSkjl%2F5bqzYqT9hMmptEXDgTqP3Wiye%2BsD4Wir4jCeoHbbp5hRfpB7BakUIppIlPCD30dR1GtslDz8OsqbXmejFC%2Fv8wu5X2myq7SJ8Avzv9DFUJySf5uNvq4%2BTi7W9D%2FOZrLChdwxmPNiBRqVjnpK%2FaGxRCDspVYKAW9AN1JANoo8wP4BJUlGqdgw6m1qPQ2QW3%2BOfU5%2FieLS%2FNuKpDU3uf8bcAXyBal5jMR2NEAbPAZt0K3hvxHBEDlUxfIGcD%2BN2gNSNx36nfqlAYow0puatNpRz0e4W2oahKzQHsjf2c16ad%2F3t2KTtPobnX6D8C8pd0MDP%2BKx7wnXqGGlLQcvikMErm6TmfsuxJXbSAxqNjOogJLQBLiKEHAE%2BJGTS3JoEhTrz8%2FCB%2B5YlupJ58aOat8Kv4JvregxwcU5Cp8GFAFm1FyOfto6GS2m1NGTS6CPNKkbsTdCBlnN9onMho55BX8IJZtEQ35lk%2BhtwN5A0V3RCPoD%2FyXAcv6pAtbZczRUA64JmcUf4q7Q89ZHLeJVZ5D1Ps%2Ft%2B0iCT3AHVtZC7JDCXfR7OSb%2FXja5H3zQbZL1B%2BULX1BMTEk3AseSpmnKEK4T9ekMIidUCRQFfcbj7z8gNLvzF7mbhQN8h6ZbRset%2BnQWdS%2FZX3k7WpS8P9sfo0iGS64wV516pOhjI6TZ2dApgI5%2BLhxywYoWxKUrykKJsIoDsR4mSrCTg0egMPnLW%2F3Q5Nn8BZEuzqEI7HK3n0%2BzFmuO3TtWQ5WJoG9YqCD6Gc32SxnbnVPfsxvrFXK2dILl7bLthDp6glhcsfp4bYvbSmj%2FmQ94uBTw0E73x2jbNRCvC6VL6GCFDwU7eWQDcC5FY5s0slieRDwtAbRsbLXbaXAuu14e2OJw1dc6jQ3ZdY8v7rv2%2FBWZLqvFWVvvcmwZkK9f5jS4muO9yR5res4kfkRxhV03L1RfPOiPtYi8pd7jNEsOpyTwxpaY%2FyCZu%2FAmd5Or9uS3DYaeqVOhH7gZN%2F8I%2Fwi1fEuLXvyNivibjuKvN%2B1Nc01HF%2F3h%2Bef%2FsOhox8MPd5SFucPjorQwXT%2BytA8EmA5mamHNFDVhBI5pjZbQpugBNkO8MvRub8KVDKST1Wag7D3xlin1ZF7LFP%2F79nbvCXFOY%2BPUjrT7%2FotsPXXZ4exdPzuhZuL5LUXVAn7k7PbhG89uz3b41X01gbjP1xwlu5rrvvf9%2Bpbs6E%2FVu7Nk642%2FPYRaAiUBdrmO6CDTBLPQFA1ur0uXoBR1INDMkypKpoTqnSMx5GiEdTEaSHLs0Alvu%2F19%2F5QW9Rv1U1ridT22i%2B53pzumbs%2BXFFXYC%2B%2BCGsTj5JUT%2FGCgRt3n78i2n71FHG4%2Fu6X%2B%2B9%2Braya7os3ZbDmgWfXun44e%2Bu2NZKuGZ0HiF8M4TlMPR%2BEU6rPKRJ8wOU2RFUFLex3egEsz3YqEAq0cqhAAW19dBZIlVzR61tuIdTnpXH7l%2BuXrbjPUyep%2B8cl6aXKWhPHpDcXl9KiTWDNr4mBQc8Tq%2BNzK%2FOKSbsfl79o9G20R%2BbrBXYvUg0rLHhtrc4TN81TTOWSZ0gL1ZVlOYH2ery%2F7XVUjFMbzYpg7UswcqJPQwBd0LKLabJ8IaCr2otcjSkIrGwootKECaUd4XH1%2BSdazRrfddkBU98t1htvWrbjqSqjaCguxrffM%2F5zDCpBALUycmajhd%2BR6ww4SWafuZ5eU%2BtPid4lgd3gt%2Bb%2FY9rQoZNmiXYPXyRHbRs8zX%2Ff4WIFjWZJtUdSD55AP3xtXH%2BZipC0EqdBGDA4CoYEU6gRLGPU11QhkLTBiEYPiqOeQgwTCl9aok1Qr5pFf71qEeNxjy%2F8F0GoqYPv75Yh9j3x4DuJ%2BuEzHRpAq2lMqb%2BqfTdiq6kGtzfOWsv0c7lSeMXDHBDe1MT%2BLUgx0Pg%2Fp87u2UicdIvqQi8DkxhcUwUXCedMpb4NQjwY3npTmgsURJavLwCRyEcN2HfWsDVGfv%2Fu9ZUWUx%2BPYFueUKwaNvbtu%2BXps3eVWbN1GcgVrdMnWJ7WmJz9SD66EBidag0NF1Ukep0t5A7sFCWdhzvYwHv6L%2FBehXuHqfaBwBEU7hfVLcXvS4VQv%2BT%2FvaSIl7cbeMc7ekv9i8S3e1L5xxpvMGcu1EYPbKyCiijjGXcDKckm43PqU2qNWlXusZMiqF82cuVzolUHN9NNR0HZPxFPV9V0wLtvq%2Bk4DqOwVWDlzuQLVdqFiP08cRX7aRlBVfR8cb55bWe5LExnlcsDp1vAP8Q9BucPMk1Ulh4GnN0SAdxcNHv3q9ohx1Ati4S%2FtkWjIDe3hQdkUGrGRaFBiUdiTSkI41UkMuuQHP%2BEaSQYlPQTFWJF03BNPpTu5KFAdkWgDukzsZKMG0Q1TAQQglScOaP%2FdsZ8%2BfP75D%2F9Uu5Gs3FY%2F2SxPld0DHOciXI9gqjcEidXjE%2B3BLosy0OcX3T7O5g65ROGyzQ2BZs7WbZVnO5ydLe32hMwTQ4wnnKXW6XW5LAa7oaXOIHoUl0FgLQLH2by8wSTWeAx2Y5PDazK3BqZbeJZwXGPaYhX87ZNszoDdaRxotXO1nNlpdvAPFWHDm8PqEE0sZxDEqGzxisFNnuCWetPcGrObN0p23tTZwMuRVodSV8%2BLTrOV3eRvzjQZiSjaLYS1WEJe0kNsJlZu9LFun7%2B%2BwW4gRDRbaxw2nrOGm%2BxOj9cmtbp9ZqeTM1m8UXfQQCSTVSQox6pvtjot%2FFpHvIUjJovFEoYvHYV9C5Y%2FxN9OfcalvII37UEhTbTg%2FAQIaPb4Vz6j5u8%2FaViycMod%2FfkDcpu8QZbZoeBi%2FvbzP3XPsZvOubMtaPHkD9jt6%2BU2O7vqU%2F9C9SMvgrXpQNG%2FE0oJxun%2BCiElUa0IKQSUwERxOntKSV7ekcuh9VBZBBo3VUcB58ofKBHCwLyf9qFosz9Ibf8dGqwaBMjRig4SGOZ2UkWI7UiO9OfUPdxOYFApUZyfpY7mgEc5rtNGGk2H1lPhAk1Hp%2FVAMqQEHEUfEYkkUQq1JMdzsX7kklRrTrUi1wMcDjmu1YYfATj7Y%2BpGpPEBXuoQIj8rR9mgCl4C9yqmF7xnVWxGVniNqtpVmXBvQ6iwni5YQ8a1jYrXtc2J13HvgkvqWxuva1sbr%2BP2S5ceKGyBwDv2DbrToe1u6BkAJV7xnVLUaq0sJB8pFqcUIPi3yuwxi4JuLr%2BP30f3OkPQ72aO0xYo3%2FEsmO3QO5qEF8S0qQH0UsKXv0brnl9%2B8M7jF174%2BDsfvPOl1au%2FRL5%2F9DsbNnwHL2pHR1NTRxMZhJtHktOOxLxErPF6YlLvpC9YP73x%2B4ofw%2B3xVdrHcDE0dQQCmCRgvt9b35xINDf1CDcRSfJ%2BpYl%2BSf8YcurfmXP5F%2Fkj6J82jNsrkWiEuhVlgFfyNkB3S5MUzLhoNiwSCYcxQ7Ui4J0Xh7fmqRbaPa1tzujxkBRlsEHy0%2FOM4pYLPb7g9O6BQJN6l9zQ0OGyCaZz0vMTbHOzXfQ7a2tsterTcqxeInODoemdktw%2B1SbVhKwtW9ffe8VKadK0OVuC3bWzyKm5LeddsWTeorWyY9IMtUFutdu5g%2BRn533qkocdvLs2HmhU75br%2FMmWtD8zA3OP2t1ea636jEzqYxJZGAwFiDEd61oTsrRuW3%2F3pYNi3bS%2BRd%2BGjOfVpAPNd6y64Gsz1GaZleWIPoYL%2Fv9mTeQBENVEguiF1aC4YeXxFETw6QyPfn0m9g8IrMFAvKM1EI11DARnbqibHk%2FIojy5rSdgCyZi06y8sS024PeuO4MfwQ5Y9yKRZCqyYaF30vzeHlmUprR21tR0t0yz8KZY66zWuGvxVQB%2F36kP%2BK38t2Hu6NQ9SFJfw0AdpqPEK2qTMpf2VCqJwqPoJezTL824b8akoL%2Bx03nhh%2BoNo5e77psxg9Q5LzebIKD%2BfsY34f2MtB9fk9v5b8PT6tYrgv4kRPwd0q9z3gdJSJ0653KjCYPwCaR5aUY63eW48O%2Fkdo33yxX9wCiMv2QTrk8eGSI6Ag6moG9t2P%2FF7GRNlDjl0gw7pJ5aOXXqyqn8SENnXBmbSwUYLyqJjv3UmY1nKr4t80no0faXsaIEiF%2FBRaIBnItSce4OUif7W6Vm9T9H1X9Vj71BEm%2BRdmIJQST%2FZfVdudUvh9S%2FqqNvqT98g9SQ3lHibZY0mRVHooyDN%2FFHmTgzjdozKw28NwQ0hwN6BCoPKaEk3YtKwNhwRLXuk076CGoZNXDQcRwZvreTZY9EZi%2Bd0s4%2Bztv8iei04JQl6ZbDD2eHV7X4uHuFVfPrOmcs6m6Kr7hssr%2B1VZFcEZ%2FPdJkn1hOs8SXS%2FNFFgqt94PIZzZ3tdaL6Q5vo6piSzdy737pwsX1VyxUrF15iJ4uNkq%2Brbyg1Z%2BO8VsNC1UmcvORPRfxtPrfRwL2p%2FoA1eZp6Z%2FaGffoewaXcA%2FxBlKlQLfhQL%2FoPgBGP3qsA7IQS8qDVNswHKRSheDUvA3Q7MZoRcJMxlEygujn1QdyzfPfq3dEp%2FbXh5e5YXW2Ngfvza0ZF6UgFL%2FE0fTq4LBlvTE2qb%2FKuuzYSXVnjTfM1osvqMHVbm9950quIZlbqaL6YP7jk3kUtA0GnX2nvq53f3WoSsvEdDRnULgo2fN7lNZJgI8%2FVWi33c3bBZnGY05%2Bdm%2B3qc7fNmj4YGKLj2nfqFP%2Bg7jdDlxEV5XsJQZP6hYrS1l0VQr4c69Xueixp90gnZPmE5OF22j%2BSYEWHlZ0K%2FHgsh%2FZtsbh6h2DNRlvv6jJh9XaJaHCZDiUDKNTMkvb8vsqCyf3ZNdSmO0fa0Y4baJTtpbKzuVzeeSI7fCKr2Z0WypapnXJ4gnoWy3PoUIlIQ1TXdqhQJIXp9Wx5fYdpeWh2TY5D%2BYVyKd0jw3iumwi%2FBC3cEy4o83QlZnW79MrCgCjbhWXBlRZVVZZv4rIKpXC01HFlHdHLoeWVl6UVc%2FJ5uGm6CViW5mulYMk%2BHqNYr0AyUPivLg2oMs2MPqtuhHyRyiwvNJej1Br%2BfcLyoAyu8D9B7bgmzUqfFobF5nKnK4%2Bt8MPJkI%2FxHUNWk117jugWF%2BxazTAALQn6%2BUE9lhoI5ApGA%2FiuJOsrlNP28SVVuBVajXmircLel46w2bJS1Q0Ft0KDuikDFL%2F3pYrid1Q4FvofwRIo4R9h2ftSwc6jHAMqLcCql8YPHtlzGoByNXYN6v8hXnRaOhUvx0sVLCexwupGDR4NOYC7PePa5keIPACnuAdD7dEadRuTIiS6Lb7uskb381My5yjzF8lGCjBRqdwrWJCagfB3yCy7XT1i92hbcZ5Ci1FJkgYMDf6n%2BjspIsHFjJrTOdzSMuOa9DbDcj%2FnH9N9bIoGVgzHPWIQuFuYtaMRaq8eCKI0gEF6lPOZjBz3EEvaaxwSUT9U%2F8JbJZPJJLBLolH1La%2FRbF9AbC8JJjv%2FmMnssKjLRBJyqj9QXxNko0Ux%2FX79epfiXkm6fmKwF%2Fen1HLc6LxloXWKvGa5rVCVL83VuiPcDEX%2FK5pTXOxHfx6HHB0t2FI0qI2rCZFTrvPWU67zVuS%2FkTsLnc7IKhFg30e4FOkqNSfH5PtkmUy6Cpiv%2F36k2sbqCeCFNa%2BURpoY0sZoYmCgCr3qgZz6s8I0gP1bYiR%2BD79H56NOz0EVWCTy2%2FfffvSCCx59W7uRV9995eqrX8GLesOXNm360iZ%2BT%2FEl3uZqL%2BFyzSZ8XxpTiI%2FG0nkT4zznFZ0t4ipMz5v4q9ssqbdKUZt6u82knPCrt6PZwsnn0XySVnyPR1ZXAn72yx48bWJsu7apnI3Hy8bygUK5Js32qcytapqgmn95uexccj205vGgJ%2BeuOeG2SORmKZr%2FqKzcx9SFctMJdwMUFZDJITs7dnOp1EKZCxg304Cevyfya%2BvlKqv6aXK1qIj3imL%2BL6hL%2ByvUlFfE0VKZ7E8gBY3M%2F8VoJCFgizH1W6VyC76nH6b7jiibYVxUmVIEspry%2FLgZIlCeP11Z4zs%2FAwvVwtGFEut5S1JY4lfyT0N%2FevOLo%2BrUEgjcqc9IkGpQbv3iW7Co5b%2BKgjvpzYdH85PLcc4X21ouwEGl%2FS4qnUAvoSlXUUhR1eKr2VWFTB%2BGMl6FsiQsVD1R3urlAAIoSn7JQkmiVVCHSpCwDH%2FqPepXQ0Db77CJOAImohB%2BRPWr31ev5g%2FkE%2BzTa4lbvZo8xdWPffQu9yJTPCNB66s%2BzXoJt%2F0L6hSoCuBIoK8fnBGG87OoRckJpLqyWe4YbpGi50g0%2B3I3UD85Oa0fzubfoXxPLbW3FDWzigmyJeM0tQkax7PqTy80%2BUxfUHPlBZIRVNQ%2Bv0xRm8REKPoLmNr0%2BUo48v9GFbXPKylqQ2IKm00QddgyWGMROCTxdLB9nCY8P7j2DjlsV%2F%2Bmfr0C0r%2FNkeXbbpPlOTBBwT0mVz1zx9S%2FwJecBF9Wgv3p032iP2v4VSgfgW2G%2BHUEdEXU6iq4CtpLJfIN9XQG8dwa1VoO8XC2SrPDDyCOQptXgbcPvlAgBfxBoGwftQKeKFrNTASPt3pGGqDt%2FQRasn2kri%2BH6L80MJRsmVYJrAKyDItpJUy3%2F15WYIJqcJ9Q5N%2FLFJ4c3dc1URpWl9hW6mu50MUIelg4ucTPf15zs5DFo1c0VSp1tKB9jkwIyuM45kb%2BIP8gHed%2B6jO3v0KbIknzLy636E8KPTdCuUpB0wLo9JKnAO6pv0vS31EtBha%2FfJemkgLVVnd8KCk4qBTpQ5m7FbifBKrPJcq0pZAFVG%2FXbOFz%2BTcq2MLrcmV28Nmi%2FOHskh82bau0k8eWCaPijQPWQ5lUvslwVCfHkXBMIehqUgtDNLeauH1huvZTbYmw%2BluPjyWoNGEuxRLR7LK5fSyXFUyK7PURQv2v8D3XOt2NJ6liBbmPGOsakw1kbeOs%2B31Wm5qpH%2BiJWSzqdPr2O7zc2TmtnrzCig6bBd%2FvgQmzOlz0STWIlmZEQfupogOZFHUZ7EkUnMn0RrpIMqAgHRJAOjIJ3yGw1I%2FMAp9q9S3Q%2FclADNm1wEeO%2Bxbwg5OIYHZLY3ehG5lJk2xhco%2B6JWybpEVz2wrR6hZyD0QXZbeDVB%2BonmlimpkWprdAs4WEZDSQppsDlcdCBJJESIYFuAtUnC4GIF2C3Uu2Kv7L1bdz6FxtqxpG4TqQOqOUNAJ2HLvPWA2GgDy4O4vaDrtyl6P%2B1fAll%2BSyFcQ28GHqh7fvvf37udylf0fNwhzgz87Y%2Bcf5x9GnF6ygHu18sAbipWeF0YPBgp2GaKeQduxxdEr3SgbH1kvH7tvqSLhedomOvZyts2dw8acu3dY%2Ff%2BucuMtCuP%2Fe4zC4XnH3OLZ8ZuxTWxy8dJfU5dhDeKPSlJy5pn%2F%2B7u3XrJhmr9C5CuleGflGQocKnlAUaRKp0BAHV0ZwUt9VCqk6zYOgRIuMfePJzdmBdpPJ7%2F6B23%2Bf%2Bsp9NMDZevovvfYHG5dGPISQq1DojqNckchVrCcCYz%2FQ0hI0m3NKDRfkgsrnamo%2Bp0CAq1FyvC3a3Nak%2Fs5VX282x9Ufy3E39VAx6o7LpCvO2wK%2Bch9jNqpJCutcIOooKnYWtDK8gTRVYygRQfwgzKM5%2BjP2jOZdx3r32Py7rQUPOzAnoRs95NvRAR0qLGU11Taqu1bUYSzMcWjMEir067JQQHfIrLBHsrgv00%2FWavd8HRLMEEYFSW3HCSNQehnrHztKqHcDyo4VfZ6gPKCR%2BgufwA8GegxUEo4A%2Bgd0BASHiH6jYMLIsUdQJTs%2FC641KN4oCHWolCMLlMfIdtWKScjx7SM5LD9HnfmhrGI0S139UWfUnxgOXdJFW%2BAMcGjKr6eHAttHF5sUoeArYKDcxMSYcKA%2FxUDhPiEOEAPafSIUFArN0r24ynI91EPARDXvIDYyvqZaWeroBOUABQA%2FE%2BDXC7PWafDLQY2oiwpUEyj4RQtVlUp1GrM7In2p2A7VuiOW6otMiGOo5Mrp05ejVuTy6dNX%2Fk%2F7mybZQ0nUmfrbx3U4KueDnlHm5wdh8FFeKnoaKKh%2FTK18StOPhwG9Xo5mqXAxvw%2F79YQwwDR%2BnAKQQ4izVXioB84qcppWB7IqjU45z4CE17OvF1Dw%2BoTFqxtz8dxwtogBnF9MjIl%2Fin%2BK8s3hM9laIn0TiCbTAXL0T798bPXqx36p3chrv0O%2BGC9Xaj48Ecv8U8UEeBvUEsDlTepiU5OvlpeNGvpnKF0RvUooWhIjnx6GeBapXCQYTw9DNg6%2FOC3gZjp76oNTj9Kz6Jqobxb9NDqc08vcKReOpcsQV2K8InXFaXW3aI6Ofr1k48rp7CX7rx%2Bv1UKPsfvzQU0Kc83i2VdILmd2%2FyX55zT9luN2%2BCu4nKfwPcK%2FCvDVU%2BpHh8%2BLaldIf1fA5h3ndT6Fln9%2FW%2F9Ce1vndfvJtnPVO2xhm3qbafHVCN1X363UXHq9xuVD8OSD29Z8pZ5cZrern9cAdGW%2Fuib%2Fud%2BVK0L9a42r6C90kL8KzxwLQw9NkIQJL0ASU8M%2BVG0KsUdgdvpgP%2F6NqqP0%2FgHZFUfGEijZLHpiIgvV5%2FBltrj8Qd7XQd5p4P%2B7tJo30NMO6VGBwahSPMYiaaBYoLY6uEnciyhhh1Z%2FvvacG%2Frjpsvnpzs0B1Id6fmX8119l88XnOxe%2FuGrzzHcdu7UtY3%2B2vmXN5zUyj3ZcPl8p1sZSs6%2FnGXtwrV7Ka0XZdz83fwjjINpZWYw85lL8BRK4nGyIir2RiOsEyipuEcIakpGjWgBjLiHWOgj0Yi34gW1kKPxHt2Na5q%2Blwg1RdRSpFDNzosb44YJXnAfoEOpZW%2F%2F6u1lhYA6leevezbI26zNHO811M2dc5HFxpk4i1jPC0s21%2FBWW5DnPQbn2X1WK43%2FaM2n18DfSoybbNHijFpamzXI31eRibGUOxSu%2FlT96YZlq1Yt20DaSBuG6knw2eusHs5EPBfNmVvHKdaQzcDfz9ZsXmLDWGXy2U5OsYSsIn8CS12jQIyD12KKqZrLPy7mSPdICmd6WGHG8NDZkkHuE4h9TU8FpmUO%2FVjC%2FEinToFyoNDz2p9XD6g78WgQdPG7Z3R0T%2FZ5dTM9lsL8Ktek7szl2L%2BgQwGgwkZHc2g5Su7NvVqwGy2Ua4KSXUwt1X4PaM5paaEu6jQ5zVFyNabxvUksVt2T%2F4VeamYPlLtffdQsk%2B2sUTY%2FzDXl%2F05W53%2FBz9UK3p7LjapZ2ZxOm%2BUlZXrL3HHGqO8%2BwVroDaCTTnTxitMxmiAAYQzVJQH%2Bnj3oIHnPaN6Zq6sNSLjBl8tKgVr2mj%2F9CWi9dnKca8rBQBsd5R1tzVlgrl5pbnPw6kZclCr2CHxMnHohLz%2B3KRQokzALyeIKFU1TNCiayJdoHvDYe7K6mZLm8S3uJ9dojuaJ62%2FqN%2FtjQxnSnhnKPw%2BLNrLi8ZKyJ3x1YhiI1aNAtP6NzCGzYv3DmaGh%2FLvQZnt0evgIhTFV0kE%2FPYxAnOHhCQUZdCWY5JWJwMzlAGl1mpNbDU7yyGnhRMILsYhH3VRAijrPcBU8%2FCj1Y9NY6cnGVW0CjTLaz7E3epvaT%2FLtTV72Rs%2B0WVVmd0dz%2FMGTI5F0OsIviaqDlbbO5X6xT3PeXbXHRtf%2Fz%2Bfdka%2BeKPr8KF7IF4vBsT9MFPuPJMBTBMq9hQxXelQ%2Bbewnf18ap4Ib%2BmSMrtDU5zqlD8QANa5MBGh%2FOwOvSDfcV2d66mfEWsbGWmIz6nsyZDWQSmqmxDneYyvjHPmRXHZxeueyRGLZzvRioKnGto9nIPkibAJA16adcOZRQr1iAP3bUyBR7T4RgAWTKxhkCYFwshq%2B7iV9r0whk50cmRcTg4fy5x4OmmNkHndIA2%2BYuMbmE9dwGYB4KFTsvnDE6Ah47r%2FfE3AYI%2BoXADpkdlENcZ8OZEEf8FFGZNxMs6ZLpG3SUFLL7Q2kcFU%2FA%2FJsw%2BvWDa%2F7emewLaoeibaF1B9qUNnuqWK3%2BUfXYVL1v%2FomD15xxeDkPnXTOKSVcCbDGtOu0YQNpGAP7U1HU58UrqGu8xIbHtkQ3LVhb7Dx46ET3Ffcm1q0YcOizNmf3bC3VjWfAcpSv3MyTlgJ23FHQgmgvk%2Bgk8pL0mcCDOn08MDAQlf%2B%2FSlTZ1z12fnqntOhbOTL9%2FZdevbAPN%2Byby1f%2FuUtC%2Fixm8ZBo59LTXEW060hGrTDplNprWd58fwB%2Fb%2FE27BdS%2Fs7U%2BrGVCeQ46nzaw9QccnmZerGZZs3Yw9aVHt%2BKh6HN4ti6lxIhT%2FwahnZtWwzlY9QHQ2c79C%2BdxzvVDKy8GqKWQERO9YAKbpsDUTLdWV5dE8PVPjvj9pqw7ah%2FPFVtkit7aj6G5xY9mfJrCz1j1e0BcnPol4UjtrCdbahIVtd2HaURujnFJR8CuOuUUfhrGhgKKgjCYNSvCc1WKlEp8wHUaAYynFNyzZn%2B2MnYv36dbMDBTonl%2FT%2Fma5IKAyEGz%2B4eRnVtaX6tss2o34u8mWorFtuFgm4A6qK%2Fyp%2FgLEBVat5WnPDdKA574ubuFJ%2FIUfZ%2FY2Nt6mN%2BZNNTSTaeI56gKwkXerTe9DDHUw8%2FH35FY3nNN7GGuBKWhrV9ep%2B0k1WjNWVaHkW1yA%2BQHWNu8rtBw2a5YXuE40rs7%2FGA%2Bj09V3hA98yRnFPOGr8ltGlsFdD%2F7tRce3LH6Trcneuiy7K7J3khKu%2B3qUaXPWaX7T6%2FKfj9BX2eZq2XAcZT79u1ClJzUtHUqfqSMWBcZS43Ena0cUGLgpkKxB1QM%2B0Fxz10wgg6r5rltnFpH05pepUq3Y2HfYqeKRntmUFNz%2BXmcOs1H31U6cC6RTVLfCg7RNBF1UF2%2FwBgu0fFQtPEU1sSg3VcNsR7dWq3af87tUFn1l3ltXpaJxpNvtcZkH2WmMst3JqRpxUH%2BWC0E1qOGtP66s1MYv%2BVLu8%2FXFXvV%2FZbunYYBeVN64ls0ur6NzpV9xzlmQwB5qC4Tq70WC0tk8dWJXeHvkD0h9zJOM0vD86%2F1NJMaIAolctvlByferCsqOKDKceOfUu1PsmoFCamV5mCrMUOCi6V6FJosMF22AcrKJgQDVhfYh6tepp%2FlYgvnCEAbJQ1L0rOpajEmRcasMiPfxhgGoVo4rwreQpV6fUJHH2e8fa1s2c13Apl1b89a58ozdoap2sjgLN9uISl7P1DrulyeIkt0zr6JjWocoPOZsaXPb6jtqBblsgsaRre2xHi4nELm0MhG1%2Bx1SXwLpFi53b%2BaHRYo%2FIrbZtuWAKu5cSEXfybnnmUCaXGTpQr0xK2O2WWY76f%2BnAjNVf7nCZHU5XqIkTnpt6VtvsFlPXg1031g%2FVRdpkkyVpD7jnmax88QwDvg%2F66NnMRdRXTcGTmQc3cuINwN5IQqi0yzb%2BYFVHuVqI5s4ADfg5oE4ybDLd28mFSFmYvRoomsWXEdLU2Wl3GJy93ZNb%2Fd5gqmNaqJZSO1l6PVRy0nZIj%2F45EetjLguh1rLqR%2BSK0hO6NrsqcNX8zoUdjQYDJ7tb4os6%2Bi%2BY0qpY2AWlnLRDWdGFTfGY1gV0zNAtJ7pdo24se0D88AwLY%2FgZmE9iuP4V5v7CSR%2FRThaHLh%2BUeBkXwU6BC7lGOevK65udTv%2BtS%2FPfW7qj3ljTcj3b9OkbV85t8xsMj7Ddj7DGpthZKwKPvso%2Fc%2F1K9aLE12fMWLV1y1D9ua8lyJdWXr%2FbG%2BnoCFutf%2FmLILe39ITUV4igr3876fpX5g2zeB52sWnIL4fXHlgeUzOx5QfIvJQyrKQE9wHUqVq%2BPEaOrz0wVvNbJZVSfsuMzxN4l9PkedFzw9V5Dj%2BnzpgoT4ZxCxJfC5RWLc74YVHxKlExCYt0JAOMatREhHBSCAtSfod6x6Ls8HCWECLwXZ9nd5Dz1T24JUdWs6fU3%2B%2BfcnT49Qe%2BkBs%2BwdsMZgPXMp3U5S958snPP%2FEE7bvkOPCuTUDTUQ%2FUzirLhML9yPahoe1D5Fj5jWsaoveyP00PehdUAHk%2FseDVWsvDWXXXsyn%2F4wfpXc2V3%2FQxli3jl%2F5hj%2F83avSCfpTNxOEKLmTjxOEKuxgNlsQn0xgct724mhynupNW1Ph6o3RYS3%2F%2B2TJrzLlkFz%2Bip3qCHKf6eqW02QJLjBYuuj4sobhCWqa%2FYHGEHpcnumuWSOhxeaL7sOakNR6vvmo%2BYcfFA8UFXEPZf9UjyudIOyNwx%2Fi90DdsujS%2FFX2UAwvWSVK4NxaMhAGw3oowp%2Fuc8CTi7D2rBgZWwb%2F60faR7SPsEbjkXy4G0XaqhXPwe2cePjxjxuHD6ssQuR1fq6PF0E%2Bo2t1nePTn8TUmxz%2FA3crMoCc7egESuoTHYc7mYdg6etORoOhR7BBGD%2BqJopELrl4S6cJNRtEAsLP%2FOdvnJq0Wo0GolY2Et9VFB2Kf%2B4bZvVyxfOMz3WdFfSIryj6DwWghre7aQbdiDrkTL3A3vNDuDpk93HqXwam%2BbWmUJZfNn5ozKV5Pmmq8PF%2FjVY%2B2Tlk2M2RzSXKjmbQ4RZcQavEYrN%2F9rlXwtIQqzxQNMzPPfHYLvuPoO9TbT8bpGw5CQPGd%2BSyX%2FCyf0Vxjd2R9NmsunnXYa8xGHzn%2BsSfM5J0y0DZEXWWxkXjcR75KBLNLHi7XvX2G8VOrf4Ykg0AMdBESIpo7MgAfyakA6rkqpI6UjNs0px7cMV%2BD5BF49Tez1VGnYmq0WIijp985m4Sn2gJR9b07riPPFo97OYbUZbxJCpot7H%2FlpZBicglCPN7WOfJkcHqc3ElWqvvz%2F1E6bIQrG%2Btz6WkM1SM9FBTR7FSs8KyBBytSmNEoquJNFN5EQyTiCrnKDx1h58yxCepPHU5nxGoxEQeeOZi2m80DxNxncVhr6BmEfUarxejw%2BWSiHhWk19bSY7aKR5MsteblJpfTLtjimBouXsm3d3djjYM%2BwEW0El9dM%2FueVRWIsXwe43R7SgbVZqrnqoJ1X%2FkuF7pcgf8duv4q6vayV5U9zMV91GxO59UUjW8rHV6u799WzKMT7umRCXbYUKM%2BfoaCcwgaoqZUtmodV3p%2BX7akb4dnU9B9La38RPFUG2SCC90tVA4XwEFhyOpZZrUCsgWYHsczLFBBVGNtstoN1bw0Z%2BO4fYIbvZVt4EUcJEKOhHeincWqONw%2Bq6w5Go%2BWGOSR7LhKV%2BKBqbBPpfUvOf9QqkpDyVhBeyyZQGMsdA5FBUqvFMtUyGq9vjnsAJU4UcrxldP1CCaofyDkSAifoP5QwWx%2BSyUGxp75BzGAvtG7uQ38LehlyEQMeh0TeE6Bm7tYdXqdkt0uOb3kfYlNwmOdDyacOq%2FqlFo1v%2BPTmTi3E%2FglC9W11b34A22zmLzvb231Q0L2Bgg60OTW4YdstO%2BYOJnO38TtpH7zy9ymokWyA79qlVSn38HtpFlImFnhu3b4boNWXklOXV0Iwo7lQ1hrZyPFcwtjwFP7iEKSHSSJw509kh8kj6pr%2BH1jR7km9vcvqN9657vffefkv%2BfKxge1X%2B7RdjYUPIESN7gTvRkB%2FRMYtEkaVkdHApmdBPpnKmz0n1xSWFOyVIuLrinZwpoCRe6kyiVZoHX088F%2BUX4%2BWKS4iBTP0IWxGtZgOdMaV4KTayqHQF%2FVihBwTbgDXTCmKoOBJeNhwJMzEVjtjIFLuU38fPR7hqNG1JS7g%2FqRCuy3vmQ3W9Vu8qbVbP%2BSzazGRJH83MzP90Ck2m31mMjP8TiLn5uwD2Ugr2PFvPQjB5BnSJvQxGQZZEB%2BLopqzGzDbMmbkAPkZVJjeO5FzOSBKCgJze2ZS4Gemc9twrwY6u9H61iUQTcRvtdT9RW3tRxAWwFs2tcuJRnI6xjmBdWjbgFNRHMHiF1uHYBfUR%2Fut5Ug2jXAaT96%2B9RH%2FFToRwIzGbKmVJ1AZQnoabSB1yyIg7ByAridHApPMjyw0OiV6RjSbCuzwLAvFizBliWJua1tsuAgvNPbmljYbpt8lkWam7b3XZiOiKJskMOtmfScnsbPW208knwjuXrXK4Q1iKIgNyYXXDVT9C2Ye%2F78GQ5BEEXfFdde2RwauOysdJNL5AzCy84ard%2FnGAVN8alecnFdgu5Gbd5DJTL%2BhHZK0vApVy3OfU8XTSJg1TlssivsPYUlIqvn66PzrVTymCc4wgF6SDNR0pDf%2B9Gp%2BVnsUH5WtpHYsuhOaey8zdwLN47V8MTbm78g687%2BP3cx6tcAeNpjYGRgYGBk8s0%2FzBIfz2%2FzlUGeZQNQhOFCWfF0GP0%2F8P8c1jusIkAuBwMTSBQAYwQM6HjaY2BkYGAV%2Bd8KJgP%2FXWG9wwAUQQGLAYqPBl942n1TvUoDQRCe1VM8kWARjNrZGIurBAsRBIuA2vkAFsJiKTYW4guIjT5ARMgTxCLoA1hcb5OgDyGHrY7f7M65e8fpLF%2B%2B2W%2FnZ2eTmGfaIJi5I0qGDlZZcD51QzTTJirZPAI9JIwVA%2BwT8L5nOdMaV0AuMJ%2BicRHq8of6LSD18fzq8ds7xjpwBnQiSI9V5QVl6NwPvgM15NXn%2FAtWZyj3W0HjEXitOc%2FdIdbetPdFTZ%2BP6t%2BX7xU0%2Fk6GJtOe1%2FB3arN0%2Fpmz1J4UZc%2BD6ExwjD7vioeGd5HvhvU%2BR%2BDZcGZ6YBPNfAi0G97iBPwFXqph2cW8%2BD7kjMfwtinHb6kLb6Wygk3cZytSEoptGrlScdHtLPeri1JKueACMZfU1ViJG1Sq5E43dIt7SZZFl1zuRhb%2FGOs44xFVDbrJzB5tYs35OmaXTrEmkv0DajnMWQB42mNgYNCCwk0MLxheMPrhgUuY2JiUmOqY2pjWMD1hdmPOY%2B5hPsLCwWLEksSyiOUOawzrLrYiti%2FsCuxJ7Kc45DiSOPZxmnG2cG7jvMelweXDNYXrEbcBdxf3KR4OngheLd443g18fHwZfFv4NfiX8T8TEBIIEZggsEpQS7BMcJsQl5CFUI3QAWEp4RLhCyJaIldEbURXiJ4RYxEzE0sQ2yD2TzxIfJkEk4SeRJbENIkNEg8k%2FklqSGZITpE8InlL8p2UmVSG1A6pb9Jx0ltkjGSmyDySlZF1kc2RnSK7R%2FaZnJ5cmdwB%2BST5SwpuCvsUjRTLFHcoOShNU9qhzKespGyhXKV8SPmBCpOKgUqcyjSVR6omqgmqe9RE1OrUnqkHqO9R%2F6FholGgsUZzgeYZLTUtL60WbS7tKh0OnQydXTpvdGV0O3S%2F6Gnopekt0ruhz6fvpl%2Bnv0n%2Fh4GdQYvBJUMhwwTDdYYvjFSM4oxmGd0zVjK2M84w3mYiYZJgssLkkqmO6TzTF2Z2ZjVmd8ylzP3MJ5lfsRCwcLJoszhhyWXpZdlhecZKxirHapbVPesF1ndsJGwCbBbZ%2FLA1sn1jZ2XXY3fFXsM%2Bz36V%2FS8HD4cGh2OOTI51ThJOK5zeOUs4OzmXOS9wPuUi4JLgss7lm2uU6zY3NrcSty1u39zN3Mvct7l%2F8xDzMPLw88jyaPM44ynkaeEZ59niucqLyUvPKwgAn3OqOQAAAQAAARcApwARAAAAAAACAAAAAQABAAAAQAAuAAAAAHjarZK9TgJBEMf%2Fd6CRaAyRhMLqCgsbL4ciglTGRPEjSiSKlnLycXJ86CEniU%2FhM9jYWPgIFkYfwd6nsDD%2Bd1mBIIUx3mZnfzs3MzszuwDCeIYG8UUwQxmAFgxxPeeuyxrmcaNYxzTuFAewi0fFQSTxqXgM11pC8TgS2oPiCUS1d8Uh8ofiSczpYcVT5LjiCPlY8Qui%2BncOr7D02y6%2FBTCrP%2Fm%2Bb5bdTrPi2I26Z9qNGtbRQBMdXMJBGRW0YOCecxEWYoiTCvxrYBunqHPdoX2bLOyrMKlZg8thDETw5K7Itci1TXlGy0124QRZZLDFU%2FexhxztMozlosTpMH6ZPge0L%2BOKGnFKjJ4WRwppHPL0PP3SI2P9jLQwFOu3GRhDfkeyDo%2F%2FG7IHgzllZQxLdquvrdCyBVvat3seJlYo06gxapUxhU2JWnFygR03sSxnEkvcpf5Y5eibGq315TDp7fKWm8zbUVl71Aqq%2FZtNnlkWmLnQtno9ycvXYbA6W2pF3aKfCayyC0Ja7Fr%2FPW70%2FHO4YM0OKxFvzf0C1MyPjwAAeNpt1VWUU2cYRuHsgxenQt1d8%2F3JOUnqAyR1d%2FcCLQVKO22pu7tQd3d3d3d3d3cXmGzumrWy3pWLs%2FNdPDMpZaWu1783l1Lpf14MnfzO6FbqVupfGkD30iR60JNe9KYP09CXfvRnAAMZxGCGMG3pW6ZjemZgKDMyEzMzC7MyG7MzB3MyF3MzD%2FMyH%2FOzAAuyEAuzCIuyGIuzBGWCRIUqOQU16jRYkqVYmmVYluVYng6GMZwRNGmxAiuyEiuzCquyGquzBmuyFmuzDuuyHuuzARuyERuzCZuyGZuzBVuyFVuzDduyHdszklGMZgd2ZAw7MZZxjGdnJrALu9LJbuzOHkxkT%2FZib%2FZhX%2FZjfw7gQA7iYA7hUA7jcI7gSI7iaI7hWI7jeE7gRE7iZE5hEqdyGqdzBmdyFmdzDudyHudzARdyERdzCZdyGZdzBVdyFVdzDddyHddzAzdyEzdzC7dyG7dzB3dyF3dzD%2FdyH%2FfzAA%2FyEA%2FzCI%2FyGI%2FzBE%2FyFE%2FzDM%2FyHM%2FzAi%2FyEi%2FzCq%2FyGq%2FzBm%2FyFm%2FzDu%2FyHu%2FzAR%2FyER%2FzCZ%2FyGZ%2FzBV%2FyFV%2FzDd%2FyHd%2FzAz%2FyEz%2FzC7%2FyG7%2FzB3%2FyF3%2FzD%2F9mpYwsy7pl3bMeWc%2BsV9Y765NNk%2FXN%2BmX9swHZwGxQNjgb0nPkmInjR0V7Uq%2FOsaPL5Y7ylE3l8tQNN7kVt%2BrmbuHW3LrbcDvam1rtzVvdm50TxrU%2FDBvRtZUY1rV5a3jXFn550Wo%2FXDNWK3dFmh7X9LimxzU9qulRTY9qelTTo5rlKLt2wk7YiaprL%2ByFvbAX9pK9ZC%2FZS%2FaSvWQv2Uv2kr1kr2KvYq9ir2KvYq9ir2KvYq9ir2Kvaq9qr2qvaq9qr2qvaq9qr2qvai%2B3l9vL7eX2cnu5vdxebi%2B3l9sr7BV2CjuFncJOYaewU9gp7NTs1LyrZq9mr2avZq9mr2avZq9mr26vbq9ur26vbq9ur26vbq9ur26vYa9hr2GvYa9hr2GvYa%2FR7oXuQ%2Feh%2B2j%2FUU7e3C3cqc%2FV3fYdof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D92H7kP3ofvQfeg%2BdB%2B6D92H7kP3ofvQfRT29B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6j6nuG3Ya7U5q%2F0hN3nCTW3Grbu4Wrs%2FrP%2Bk%2F6T%2FpP%2Bk%2F6T%2FpP%2Bk%2B6T7pPek86TzpPOk86TzpOuk66TrpOuk66TrpOlWmPu%2F36zrpOuk66TrpOuk66TrpOvl%2FPek76TvpO%2Bk76TvpO%2Bk76TvpO%2Bk76TvpO7V9t%2BqtVs%2FOaOURU6bo6PgPt6rZbwAAAAABVFDDFwAA%29%20format%28%27woff%27%29%2Curl%28data%3Aapplication%2Ffont%2Dsfnt%3Bbase64%2CAAEAAAAPAIAAAwBwRkZUTW0ql9wAAAD8AAAAHEdERUYBRAAEAAABGAAAACBPUy8yZ7lriQAAATgAAABgY21hcNqt44EAAAGYAAAGcmN2dCAAKAL4AAAIDAAAAARnYXNw%2F%2F8AAwAACBAAAAAIZ2x5Zn1dwm8AAAgYAACUpGhlYWQFTS%2FYAACcvAAAADZoaGVhCkQEEQAAnPQAAAAkaG10eNLHIGAAAJ0YAAADdGxvY2Fv%2B5XOAACgjAAAAjBtYXhwAWoA2AAAorwAAAAgbmFtZbMsoJsAAKLcAAADonBvc3S6o%2BU1AACmgAAACtF3ZWJmwxhUUAAAsVQAAAAGAAAAAQAAAADMPaLPAAAAANB2gXUAAAAA0HZzlwABAAAADgAAABgAAAAAAAIAAQABARYAAQAEAAAAAgAAAAMEiwGQAAUABAMMAtAAAABaAwwC0AAAAaQAMgK4AAAAAAUAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAFVLV04AQAAg%2F%2F8DwP8QAAAFFAB7AAAAAQAAAAAAAAAAAAAAIAABAAAABQAAAAMAAAAsAAAACgAAAdwAAQAAAAAEaAADAAEAAAAsAAMACgAAAdwABAGwAAAAaABAAAUAKAAgACsAoAClIAogLyBfIKwgvSISIxsl%2FCYBJvonCScP4APgCeAZ4CngOeBJ4FngYOBp4HngieCX4QnhGeEp4TnhRuFJ4VnhaeF54YnhleGZ4gbiCeIW4hniIeIn4jniSeJZ4mD4%2F%2F%2F%2FAAAAIAAqAKAApSAAIC8gXyCsIL0iEiMbJfwmASb6JwknD%2BAB4AXgEOAg4DDgQOBQ4GDgYuBw4IDgkOEB4RDhIOEw4UDhSOFQ4WDhcOGA4ZDhl%2BIA4gniEOIY4iHiI%2BIw4kDiUOJg%2BP%2F%2F%2F%2F%2Fj%2F9r%2FZv9i4Ajf5N%2B132nfWd4F3P3aHdoZ2SHZE9kOIB0gHCAWIBAgCiAEH%2F4f%2BB%2F3H%2FEf6x%2FlH3wfdh9wH2ofZB9jH10fVx9RH0sfRR9EHt4e3B7WHtUezh7NHsUevx65HrMIFQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAACjAAAAAAAAAA1AAAAIAAAACAAAAADAAAAKgAAACsAAAAEAAAAoAAAAKAAAAAGAAAApQAAAKUAAAAHAAAgAAAAIAoAAAAIAAAgLwAAIC8AAAATAAAgXwAAIF8AAAAUAAAgrAAAIKwAAAAVAAAgvQAAIL0AAAAWAAAiEgAAIhIAAAAXAAAjGwAAIxsAAAAYAAAl%2FAAAJfwAAAAZAAAmAQAAJgEAAAAaAAAm%2BgAAJvoAAAAbAAAnCQAAJwkAAAAcAAAnDwAAJw8AAAAdAADgAQAA4AMAAAAeAADgBQAA4AkAAAAhAADgEAAA4BkAAAAmAADgIAAA4CkAAAAwAADgMAAA4DkAAAA6AADgQAAA4EkAAABEAADgUAAA4FkAAABOAADgYAAA4GAAAABYAADgYgAA4GkAAABZAADgcAAA4HkAAABhAADggAAA4IkAAABrAADgkAAA4JcAAAB1AADhAQAA4QkAAAB9AADhEAAA4RkAAACGAADhIAAA4SkAAACQAADhMAAA4TkAAACaAADhQAAA4UYAAACkAADhSAAA4UkAAACrAADhUAAA4VkAAACtAADhYAAA4WkAAAC3AADhcAAA4XkAAADBAADhgAAA4YkAAADLAADhkAAA4ZUAAADVAADhlwAA4ZkAAADbAADiAAAA4gYAAADeAADiCQAA4gkAAADlAADiEAAA4hYAAADmAADiGAAA4hkAAADtAADiIQAA4iEAAADvAADiIwAA4icAAADwAADiMAAA4jkAAAD1AADiQAAA4kkAAAD%2FAADiUAAA4lkAAAEJAADiYAAA4mAAAAETAAD4%2FwAA%2BP8AAAEUAAH1EQAB9REAAAEVAAH2qgAB9qoAAAEWAAYCCgAAAAABAAABAAAAAAAAAAAAAAAAAAAAAQACAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAEAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAL4AAAAAf%2F%2FAAIAAgAoAAABaAMgAAMABwAusQEALzyyBwQA7TKxBgXcPLIDAgDtMgCxAwAvPLIFBADtMrIHBgH8PLIBAgDtMjMRIRElMxEjKAFA%2Fujw8AMg%2FOAoAtAAAQBkAGQETARMAFsAAAEyFh8BHgEdATc%2BAR8BFgYPATMyFhcWFRQGDwEOASsBFx4BDwEGJi8BFRQGBwYjIiYvAS4BPQEHDgEvASY2PwEjIiYnJjU0Nj8BPgE7AScuAT8BNhYfATU0Njc2AlgPJgsLCg%2BeBxYIagcCB57gChECBgMCAQIRCuCeBwIHaggWB54PCikiDyYLCwoPngcWCGoHAgee4AoRAgYDAgECEQrgngcCB2oIFgeeDwopBEwDAgECEQrgngcCB2oIFgeeDwopIg8mCwsKD54HFghqBwIHnuAKEQIGAwIBAhEK4J4HAgdqCBYHng8KKSIPJgsLCg%2BeBxYIagcCB57gChECBgAAAAABAAAAAARMBEwAIwAAATMyFhURITIWHQEUBiMhERQGKwEiJjURISImPQE0NjMhETQ2AcLIFR0BXhUdHRX%2Boh0VyBUd%2FqIVHR0VAV4dBEwdFf6iHRXIFR3%2BohUdHRUBXh0VyBUdAV4VHQAAAAABAHAAAARABEwARQAAATMyFgcBBgchMhYPAQ4BKwEVITIWDwEOASsBFRQGKwEiJj0BISImPwE%2BATsBNSEiJj8BPgE7ASYnASY2OwEyHwEWMj8BNgM5%2BgoFCP6UBgUBDAoGBngGGAp9ARMKBgZ4BhgKfQ8LlAsP%2Fu0KBgZ4BhgKff7tCgYGeAYYCnYFBv6UCAUK%2BhkSpAgUCKQSBEwKCP6UBgwMCKAIDGQMCKAIDK4LDw8LrgwIoAgMZAwIoAgMDAYBbAgKEqQICKQSAAABAGQABQSMBK4AOwAAATIXFhcjNC4DIyIOAwchByEGFSEHIR4EMzI%2BAzUzBgcGIyInLgEnIzczNjcjNzM%2BATc2AujycDwGtSM0QDkXEys4MjAPAXtk%2FtQGAZZk%2FtQJMDlCNBUWOUA0I64eYmunznYkQgzZZHABBdpkhhQ%2BH3UErr1oaS1LMCEPCx4uTzJkMjJkSnRCKw8PIjBKK6trdZ4wqndkLzVkV4UljQAAAgB7AAAETASwAD4ARwAAASEyHgUVHAEVFA4FKwEHITIWDwEOASsBFRQGKwEiJj0BISImPwE%2BATsBNSEiJj8BPgE7ARE0NhcRMzI2NTQmIwGsAV5DakIwFgwBAQwWMEJqQ7ICASAKBgZ4BhgKigsKlQoP%2FvUKBgZ4BhgKdf71CgYGeAYYCnUPtstALS1ABLAaJD8yTyokCwsLJCpQMkAlGmQMCKAIDK8LDg8KrwwIoAgMZAwIoAgMAdsKD8j%2B1EJWVEAAAAEAyAGQBEwCvAAPAAATITIWHQEUBiMhIiY9ATQ2%2BgMgFR0dFfzgFR0dArwdFcgVHR0VyBUdAAAAAgDIAAAD6ASwACUAQQAAARUUBisBFRQGBx4BHQEzMhYdASE1NDY7ATU0NjcuAT0BIyImPQEXFRQWFx4BFAYHDgEdASE1NCYnLgE0Njc%2BAT0BA%2BgdFTJjUVFjMhUd%2FOAdFTJjUVFjMhUdyEE3HCAgHDdBAZBBNxwgIBw3QQSwlhUdZFuVIyOVW5YdFZaWFR2WW5UjI5VbZB0VlshkPGMYDDI8MgwYYzyWljxjGAwyPDIMGGM8ZAAAAAEAAAAAAAAAAAAAAAAxAAAB%2F%2FIBLATCBEEAFgAAATIWFzYzMhYVFAYjISImNTQ2NyY1NDYB9261LCwueKqqeP0ST3FVQgLYBEF3YQ6teHmtclBFaw4MGZnXAAAAAgAAAGQEsASvABoAHgAAAB4BDwEBMzIWHQEhNTQ2OwEBJyY%2BARYfATc2AyEnAwL2IAkKiAHTHhQe%2B1AeFB4B1IcKCSAkCm9wCXoBebbDBLMTIxC7%2FRYlFSoqFSUC6rcQJBQJEJSWEPwecAIWAAAAAAQAAABkBLAETAALABcAIwA3AAATITIWBwEGIicBJjYXARYUBwEGJjURNDYJATYWFREUBicBJjQHARYGIyEiJjcBNjIfARYyPwE2MhkEfgoFCP3MCBQI%2FcwIBQMBCAgI%2FvgICgoDjAEICAoKCP74CFwBbAgFCvuCCgUIAWwIFAikCBQIpAgUBEwKCP3JCAgCNwgK2v74CBQI%2FvgIBQoCJgoF%2FvABCAgFCv3aCgUIAQgIFID%2BlAgKCggBbAgIpAgIpAgAAAAD%2F%2FD%2F8AS6BLoACQANABAAAAAyHwEWFA8BJzcTAScJAQUTA%2BAmDpkNDWPWXyL9mdYCZv4f%2FrNuBLoNmQ4mDlzWYP50%2FZrWAmb8anABTwAAAAEAAAAABLAEsAAPAAABETMyFh0BITU0NjsBEQEhArz6FR384B0V%2Bv4MBLACiv3aHRUyMhUdAiYCJgAAAAEADgAIBEwEnAAfAAABJTYWFREUBgcGLgE2NzYXEQURFAYHBi4BNjc2FxE0NgFwAoUnMFNGT4gkV09IQv2oWEFPiCRXT0hCHQP5ow8eIvzBN1EXGSltchkYEAIJm%2F2iKmAVGilucRoYEQJ%2FJioAAAACAAn%2F%2BAS7BKcAHQApAAAAMh4CFQcXFAcBFgYPAQYiJwEGIycHIi4CND4BBCIOARQeATI%2BATQmAZDItoNOAQFOARMXARY7GikT%2Fu13jgUCZLaDTk6DAXKwlFZWlLCUVlYEp06DtmQCBY15%2Fu4aJRg6FBQBEk0BAU6Dtsi2g1tWlLCUVlaUsJQAAQBkAFgErwREABkAAAE%2BAh4CFRQOAwcuBDU0PgIeAQKJMHt4dVg2Q3mEqD4%2Bp4V4Qzhadnh5A7VESAUtU3ZAOXmAf7JVVbJ%2FgHk5QHZTLQVIAAAAAf%2FTAF4EewSUABgAAAETNjIXEyEyFgcFExYGJyUFBiY3EyUmNjMBl4MHFQeBAaUVBhH%2BqoIHDxH%2Bqf6qEQ8Hgv6lEQYUAyABYRMT%2Fp8RDPn%2BbxQLDPb3DAsUAZD7DBEAAv%2FTAF4EewSUABgAIgAAARM2MhcTITIWBwUTFgYnJQUGJjcTJSY2MwUjFwc3Fyc3IycBl4MHFQeBAaUVBhH%2BqoIHDxH%2Bqf6qEQ8Hgv6lEQYUAfPwxUrBw0rA6k4DIAFhExP%2BnxEM%2Bf5vFAsM9vcMCxQBkPsMEWSO4ouM5YzTAAABAAAAAASwBLAAJgAAATIWHQEUBiMVFBYXBR4BHQEUBiMhIiY9ATQ2NyU%2BAT0BIiY9ATQ2Alh8sD4mDAkBZgkMDwr7ggoPDAkBZgkMJj6wBLCwfPouaEsKFwbmBRcKXQoPDwpdChcF5gYXCktoLvp8sAAAAA0AAAAABLAETAAPABMAIwAnACsALwAzADcARwBLAE8AUwBXAAATITIWFREUBiMhIiY1ETQ2FxUzNSkBIgYVERQWMyEyNjURNCYzFTM1BRUzNSEVMzUFFTM1IRUzNQchIgYVERQWMyEyNjURNCYFFTM1IRUzNQUVMzUhFTM1GQR%2BCg8PCvuCCg8PVWQCo%2F3aCg8PCgImCg8Pc2T8GGQDIGT8GGQDIGTh%2FdoKDw8KAiYKDw%2F872QDIGT8GGQDIGQETA8K%2B%2BYKDw8KBBoKD2RkZA8K%2FqIKDw8KAV4KD2RkyGRkZGTIZGRkZGQPCv6iCg8PCgFeCg9kZGRkZMhkZGRkAAAEAAAAAARMBEwADwAfAC8APwAAEyEyFhURFAYjISImNRE0NikBMhYVERQGIyEiJjURNDYBITIWFREUBiMhIiY1ETQ2KQEyFhURFAYjISImNRE0NjIBkBUdHRX%2BcBUdHQJtAZAVHR0V%2FnAVHR39vQGQFR0dFf5wFR0dAm0BkBUdHRX%2BcBUdHQRMHRX%2BcBUdHRUBkBUdHRX%2BcBUdHRUBkBUd%2FagdFf5wFR0dFQGQFR0dFf5wFR0dFQGQFR0AAAkAAAAABEwETAAPAB8ALwA%2FAE8AXwBvAH8AjwAAEzMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYhMzIWHQEUBisBIiY9ATQ2ATMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYhMzIWHQEUBisBIiY9ATQ2ATMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYhMzIWHQEUBisBIiY9ATQ2MsgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR389cgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR389cgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR0ETB0VyBUdHRXIFR0dFcgVHR0VyBUdHRXIFR0dFcgVHf5wHRXIFR0dFcgVHR0VyBUdHRXIFR0dFcgVHR0VyBUd%2FnAdFcgVHR0VyBUdHRXIFR0dFcgVHR0VyBUdHRXIFR0ABgAAAAAEsARMAA8AHwAvAD8ATwBfAAATMzIWHQEUBisBIiY9ATQ2KQEyFh0BFAYjISImPQE0NgEzMhYdARQGKwEiJj0BNDYpATIWHQEUBiMhIiY9ATQ2ATMyFh0BFAYrASImPQE0NikBMhYdARQGIyEiJj0BNDYyyBUdHRXIFR0dAaUCvBUdHRX9RBUdHf6FyBUdHRXIFR0dAaUCvBUdHRX9RBUdHf6FyBUdHRXIFR0dAaUCvBUdHRX9RBUdHQRMHRXIFR0dFcgVHR0VyBUdHRXIFR3%2BcB0VyBUdHRXIFR0dFcgVHR0VyBUd%2FnAdFcgVHR0VyBUdHRXIFR0dFcgVHQAAAAABACYALAToBCAAFwAACQE2Mh8BFhQHAQYiJwEmND8BNjIfARYyAdECOwgUB7EICPzxBxUH%2FoAICLEHFAirBxYB3QI7CAixBxQI%2FPAICAGACBQHsQgIqwcAAQBuAG4EQgRCACMAAAEXFhQHCQEWFA8BBiInCQEGIi8BJjQ3CQEmND8BNjIXCQE2MgOIsggI%2FvUBCwgIsggVB%2F70%2FvQHFQiyCAgBC%2F71CAiyCBUHAQwBDAcVBDuzCBUH%2FvT%2B9AcVCLIICAEL%2FvUICLIIFQcBDAEMBxUIsggI%2FvUBDAcAAwAX%2F%2BsExQSZABkAJQBJAAAAMh4CFRQHARYUDwEGIicBBiMiLgI0PgEEIg4BFB4BMj4BNCYFMzIWHQEzMhYdARQGKwEVFAYrASImPQEjIiY9ATQ2OwE1NDYBmcSzgk1OASwICG0HFQj%2B1HeOYrSBTU2BAW%2BzmFhYmLOZWFj%2BvJYKD0sKDw8KSw8KlgoPSwoPDwpLDwSZTYKzYo15%2FtUIFQhsCAgBK01NgbTEs4JNWJmzmFhYmLOZIw8KSw8KlgoPSwoPDwpLDwqWCg9LCg8AAAMAF%2F%2FrBMUEmQAZACUANQAAADIeAhUUBwEWFA8BBiInAQYjIi4CND4BBCIOARQeATI%2BATQmBSEyFh0BFAYjISImPQE0NgGZxLOCTU4BLAgIbQcVCP7Ud45itIFNTYEBb7OYWFiYs5lYWP5YAV4KDw8K%2FqIKDw8EmU2Cs2KNef7VCBUIbAgIAStNTYG0xLOCTViZs5hYWJizmYcPCpYKDw8KlgoPAAAAAAIAFwAXBJkEsAAPAC0AAAEzMhYVERQGKwEiJjURNDYFNRYSFRQOAiIuAjU0EjcVDgEVFB4BMj4BNTQmAiZkFR0dFWQVHR0BD6fSW5vW6tabW9KnZ3xyxejFcnwEsB0V%2FnAVHR0VAZAVHeGmPv7ZuHXWm1tbm9Z1uAEnPqY3yHh0xXJyxXR4yAAEAGQAAASwBLAADwAfAC8APwAAATMyFhURFAYrASImNRE0NgEzMhYVERQGKwEiJjURNDYBMzIWFREUBisBIiY1ETQ2BTMyFh0BFAYrASImPQE0NgQBlgoPDwqWCg8P%2Ft6WCg8PCpYKDw%2F%2B3pYKDw8KlgoPD%2F7elgoPDwqWCg8PBLAPCvuCCg8PCgR%2BCg%2F%2BcA8K%2FRIKDw8KAu4KD%2F7UDwr%2BPgoPDwoBwgoPyA8K%2BgoPDwr6Cg8AAAAAAgAaABsElgSWAEcATwAAATIfAhYfATcWFwcXFh8CFhUUDwIGDwEXBgcnBwYPAgYjIi8CJi8BByYnNycmLwImNTQ%2FAjY%2FASc2Nxc3Nj8CNhIiBhQWMjY0AlghKSYFMS0Fhj0rUAMZDgGYBQWYAQ8YA1AwOIYFLDIFJisfISkmBTEtBYY8LFADGQ0ClwYGlwINGQNQLzqFBS0xBSYreLJ%2BfrJ%2BBJYFmAEOGQJQMDmGBSwxBiYrHiIoJgYxLAWGPSxRAxkOApcFBZcCDhkDUTA5hgUtMAYmKiAhKCYGMC0Fhj0sUAIZDgGYBf6ZfrF%2BfrEABwBkAAAEsAUUABMAFwAhACUAKQAtADEAAAEhMhYdASEyFh0BITU0NjMhNTQ2FxUhNQERFAYjISImNREXETMRMxEzETMRMxEzETMRAfQBLCk7ARMKD%2Fu0DwoBEzspASwBLDsp%2FUQpO2RkZGRkZGRkBRQ7KWQPCktLCg9kKTtkZGT%2B1PzgKTs7KQMgZP1EArz9RAK8%2FUQCvP1EArwAAQAMAAAFCATRAB8AABMBNjIXARYGKwERFAYrASImNREhERQGKwEiJjURIyImEgJsCBUHAmAIBQqvDwr6Cg%2F%2B1A8K%2BgoPrwoFAmoCYAcH%2FaAICv3BCg8PCgF3%2FokKDw8KAj8KAAIAZAAAA%2BgEsAARABcAAAERFBYzIREUBiMhIiY1ETQ2MwEjIiY9AQJYOykBLB0V%2FOAVHR0VA1L6FR0EsP5wKTv9dhUdHRUETBUd%2FnAdFfoAAwAXABcEmQSZAA8AGwAwAAAAMh4CFA4CIi4CND4BBCIOARQeATI%2BATQmBTMyFhURMzIWHQEUBisBIiY1ETQ2AePq1ptbW5vW6tabW1ubAb%2FoxXJyxejFcnL%2BfDIKD68KDw8K%2BgoPDwSZW5vW6tabW1ub1urWmztyxejFcnLF6MUNDwr%2B7Q8KMgoPDwoBXgoPAAAAAAL%2FnAAABRQEsAALAA8AACkBAyMDIQEzAzMDMwEDMwMFFP3mKfIp%2FeYBr9EVohTQ%2Fp4b4BsBkP5wBLD%2B1AEs%2FnD%2B1AEsAAAAAAIAZAAABLAEsAAVAC8AAAEzMhYVETMyFgcBBiInASY2OwERNDYBMzIWFREUBiMhIiY1ETQ2OwEyFh0BITU0NgImyBUdvxQLDf65DSYN%2FrkNCxS%2FHQJUMgoPDwr75goPDwoyCg8DhA8EsB0V%2Fj4XEP5wEBABkBAXAcIVHfzgDwr%2BogoPDwoBXgoPDwqvrwoPAAMAFwAXBJkEmQAPABsAMQAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgUzMhYVETMyFgcDBiInAyY2OwERNDYB4%2BrWm1tbm9bq1ptbW5sBv%2BjFcnLF6MVycv58lgoPiRUKDd8NJg3fDQoViQ8EmVub1urWm1tbm9bq1ps7csXoxXJyxejFDQ8K%2Fu0XEP7tEBABExAXARMKDwAAAAMAFwAXBJkEmQAPABsAMQAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JiUTFgYrAREUBisBIiY1ESMiJjcTNjIB4%2BrWm1tbm9bq1ptbW5sBv%2BjFcnLF6MVycv7n3w0KFYkPCpYKD4kVCg3fDSYEmVub1urWm1tbm9bq1ps7csXoxXJyxejFAf7tEBf%2B7QoPDwoBExcQARMQAAAAAAIAAAAABLAEsAAZADkAABMhMhYXExYVERQGBwYjISImJyY1EzQ3Ez4BBSEiBgcDBhY7ATIWHwEeATsBMjY%2FAT4BOwEyNicDLgHhAu4KEwO6BwgFDBn7tAweAgYBB7kDEwKX%2FdQKEgJXAgwKlgoTAiYCEwr6ChMCJgITCpYKDAJXAhIEsA4K%2FXQYGf5XDB4CBggEDRkBqRkYAowKDsgOC%2F4%2BCw4OCpgKDg4KmAoODgsBwgsOAAMAFwAXBJkEmQAPABsAJwAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgUXFhQPAQYmNRE0NgHj6tabW1ub1urWm1tbmwG%2F6MVycsXoxXJy%2Fov9ERH9EBgYBJlbm9bq1ptbW5vW6tabO3LF6MVycsXoxV2%2BDCQMvgwLFQGQFQsAAQAXABcEmQSwACgAAAE3NhYVERQGIyEiJj8BJiMiDgEUHgEyPgE1MxQOAiIuAjQ%2BAjMyA7OHBwsPCv6WCwQHhW2BdMVycsXoxXKWW5vW6tabW1ub1nXABCSHBwQL%2FpYKDwsHhUxyxejFcnLFdHXWm1tbm9bq1ptbAAAAAAIAFwABBJkEsAAaADUAAAE3NhYVERQGIyEiJj8BJiMiDgEVIzQ%2BAjMyEzMUDgIjIicHBiY1ETQ2MyEyFg8BFjMyPgEDs4cHCw8L%2FpcLBAeGboF0xXKWW5vWdcDrllub1nXAnIYHCw8LAWgKBQiFboJ0xXIEJIcHBAv%2BlwsPCweGS3LFdHXWm1v9v3XWm1t2hggFCgFoCw8LB4VMcsUAAAAKAGQAAASwBLAADwAfAC8APwBPAF8AbwB%2FAI8AnwAAEyEyFhURFAYjISImNRE0NgUhIgYVERQWMyEyNjURNCYFMzIWHQEUBisBIiY9ATQ2MyEyFh0BFAYjISImPQE0NgczMhYdARQGKwEiJj0BNDYzITIWHQEUBiMhIiY9ATQ2BzMyFh0BFAYrASImPQE0NjMhMhYdARQGIyEiJj0BNDYHMzIWHQEUBisBIiY9ATQ2MyEyFh0BFAYjISImPQE0Nn0EGgoPDwr75goPDwPA%2FK4KDw8KA1IKDw%2F9CDIKDw8KMgoPD9IBwgoPDwr%2BPgoPD74yCg8PCjIKDw%2FSAcIKDw8K%2Fj4KDw%2B%2BMgoPDwoyCg8P0gHCCg8PCv4%2BCg8PvjIKDw8KMgoPD9IBwgoPDwr%2BPgoPDwSwDwr7ggoPDwoEfgoPyA8K%2FK4KDw8KA1IKD2QPCjIKDw8KMgoPDwoyCg8PCjIKD8gPCjIKDw8KMgoPDwoyCg8PCjIKD8gPCjIKDw8KMgoPDwoyCg8PCjIKD8gPCjIKDw8KMgoPDwoyCg8PCjIKDwAAAAACAAAAAARMBLAAGQAjAAABNTQmIyEiBh0BIyIGFREUFjMhMjY1ETQmIyE1NDY7ATIWHQEDhHVT%2FtRSdmQpOzspA4QpOzsp%2FageFMgUHgMgyFN1dlLIOyn9qCk7OykCWCk7lhUdHRWWAAIAZAAABEwETAAJADcAABMzMhYVESMRNDYFMhcWFREUBw4DIyIuAScuAiMiBwYjIicmNRE%2BATc2HgMXHgIzMjc2fTIKD2QPA8AEBRADIUNAMRwaPyonKSxHHlVLBwgGBQ4WeDsXKC4TOQQpLUUdZ1AHBEwPCvvNBDMKDzACBhH%2BWwYGO1AkDQ0ODg8PDzkFAwcPAbY3VwMCAwsGFAEODg5XCAAAAwAAAAAEsASXACEAMQBBAAAAMh4CFREUBisBIiY1ETQuASAOARURFAYrASImNRE0PgEDMzIWFREUBisBIiY1ETQ2ITMyFhURFAYrASImNRE0NgHk6N6jYw8KMgoPjeT%2B%2BuSNDwoyCg9joyqgCAwMCKAIDAwCYKAIDAwIoAgMDASXY6PedP7UCg8PCgEsf9FyctF%2F%2FtQKDw8KASx03qP9wAwI%2FjQIDAwIAcwIDAwI%2FjQIDAwIAcwIDAAAAAACAAAA0wRHA90AFQA5AAABJTYWFREUBiclJisBIiY1ETQ2OwEyBTc2Mh8BFhQPARcWFA8BBiIvAQcGIi8BJjQ%2FAScmND8BNjIXAUEBAgkMDAn%2B%2FhUZ%2BgoPDwr6GQJYeAcUByIHB3h4BwciBxQHeHgHFAciBwd3dwcHIgcUBwMurAYHCv0SCgcGrA4PCgFeCg%2BEeAcHIgcUB3h4BxQHIgcHd3cHByIHFAd4eAcUByIICAAAAAACAAAA0wNyA90AFQAvAAABJTYWFREUBiclJisBIiY1ETQ2OwEyJTMWFxYVFAcGDwEiLwEuATc2NTQnJjY%2FATYBQQECCQwMCf7%2BFRn6Cg8PCvoZAdIECgZgWgYLAwkHHQcDBkhOBgMIHQcDLqwGBwr9EgoHBqwODwoBXgoPZAEJgaGafwkBAQYXBxMIZ36EaggUBxYFAAAAAAMAAADEBGID7AAbADEASwAAATMWFxYVFAYHBgcjIi8BLgE3NjU0JicmNj8BNgUlNhYVERQGJyUmKwEiJjURNDY7ATIlMxYXFhUUBwYPASIvAS4BNzY1NCcmNj8BNgPHAwsGh0RABwoDCQcqCAIGbzs3BgIJKgf9ggECCQwMCf7%2BFRn6Cg8PCvoZAdIECgZgWgYLAwkHHQcDBkhOBgMIHQcD7AEJs9lpy1QJAQYiBhQIlrJarEcJFAYhBb6sBgcK%2FRIKBwasDg8KAV4KD2QBCYGhmn8JAQEGFwcTCGd%2BhGoIFQYWBQAAAAANAAAAAASwBLAACQAVABkAHQAhACUALQA7AD8AQwBHAEsATwAAATMVIxUhFSMRIQEjFTMVIREjESM1IQURIREhESERBSM1MwUjNTMBMxEhETM1MwEzFSMVIzUjNTM1IzUhBREhEQcjNTMFIzUzASM1MwUhNSEB9GRk%2FnBkAfQCvMjI%2FtTIZAJY%2B7QBLAGQASz84GRkArxkZP1EyP4MyGQB9MhkyGRkyAEs%2FUQBLGRkZAOEZGT%2BDGRkAfT%2B1AEsA4RkZGQCWP4MZMgBLAEsyGT%2B1AEs%2FtQBLMhkZGT%2BDP4MAfRk%2FtRkZGRkyGTI%2FtQBLMhkZGT%2B1GRkZAAAAAAJAAAAAASwBLAAAwAHAAsADwATABcAGwAfACMAADcjETMTIxEzASMRMxMjETMBIxEzASE1IRcjNTMXIzUzBSM1M2RkZMhkZAGQyMjIZGQBLMjI%2FOD%2B1AEsyGRkyGRkASzIyMgD6PwYA%2Bj8GAPo%2FBgD6PwYA%2Bj7UGRkW1tbW1sAAAIAAAAKBKYEsAANABUAAAkBFhQHAQYiJwETNDYzBCYiBhQWMjYB9AKqCAj%2BMAgUCP1WAQ8KAUM7Uzs7UzsEsP1WCBQI%2FjAICAKqAdsKD807O1Q7OwAAAAADAAAACgXSBLAADQAZACEAAAkBFhQHAQYiJwETNDYzIQEWFAcBBiIvAQkBBCYiBhQWMjYB9AKqCAj%2BMAgUCP1WAQ8KAwYCqggI%2FjAIFAg4Aaj9RP7TO1M7O1M7BLD9VggUCP4wCAgCqgHbCg%2F9VggUCP4wCAg4AaoCvM07O1Q7OwAAAAABAGQAAASwBLAAJgAAASEyFREUDwEGJjURNCYjISIPAQYWMyEyFhURFAYjISImNRE0PwE2ASwDOUsSQAgKDwr9RBkSQAgFCgK8Cg8PCvyuCg8SixIEsEv8fBkSQAgFCgO2Cg8SQAgKDwr8SgoPDwoDzxkSixIAAAABAMj%2F%2FwRMBLAACgAAEyEyFhURCQERNDb6AyAVHf4%2B%2Fj4dBLAdFfuCAbz%2BQwR%2FFR0AAAAAAwAAAAAEsASwABUARQBVAAABISIGBwMGHwEeATMhMjY%2FATYnAy4BASMiBg8BDgEjISImLwEuASsBIgYVERQWOwEyNj0BNDYzITIWHQEUFjsBMjY1ETQmASEiBg8BBhYzITI2LwEuAQM2%2FkQLEAFOBw45BhcKAcIKFwY%2BDgdTARABVpYKFgROBBYK%2FdoKFgROBBYKlgoPDwqWCg8PCgLuCg8PCpYKDw%2F%2Bsf4MChMCJgILCgJYCgsCJgITBLAPCv7TGBVsCQwMCWwVGAEtCg%2F%2BcA0JnAkNDQmcCQ0PCv12Cg8PCpYKDw8KlgoPDwoCigoP%2FagOCpgKDg4KmAoOAAAAAAQAAABkBLAETAAdACEAKQAxAAABMzIeAh8BMzIWFREUBiMhIiY1ETQ2OwE%2BBAEVMzUEIgYUFjI2NCQyFhQGIiY0AfTIOF00JAcGlik7Oyn8GCk7OymWAgknM10ByGT%2Bz76Hh76H%2Fu9WPDxWPARMKTs7FRQ7Kf2oKTs7KQJYKTsIG0U1K%2F7UZGRGh76Hh74IPFY8PFYAAAAAAgA1AAAEsASvACAAIwAACQEWFx4BHwEVITUyNi8BIQYHBh4CMxUhNTY3PgE%2FAQEDIQMCqQGBFCgSJQkK%2Fl81LBFS%2Fnk6IgsJKjIe%2FpM4HAwaBwcBj6wBVKIEr%2FwaMioTFQECQkJXLd6RWSIuHAxCQhgcDCUNDQPu%2FVoByQAAAAADAGQAAAPwBLAAJwAyADsAAAEeBhUUDgMjITU%2BATURNC4EJzUFMh4CFRQOAgclMzI2NTQuAisBETMyNjU0JisBAvEFEzUwOyodN1htbDD%2BDCk7AQYLFyEaAdc5dWM%2BHy0tEP6Pi05pESpTPnbYUFJ9Xp8CgQEHGB0zOlIuQ3VONxpZBzMoAzsYFBwLEAkHRwEpSXNDM1s6KwkxYUopOzQb%2FK5lUFqBAAABAMgAAANvBLAAGQAAARcOAQcDBhYXFSE1NjcTNjQuBCcmJzUDbQJTQgeECSxK%2Fgy6Dq0DAw8MHxUXDQYEsDkTNSj8uTEoBmFhEFIDQBEaExAJCwYHAwI5AAAAAAL%2FtQAABRQEsAAlAC8AAAEjNC4FKwERFBYfARUhNTI%2BAzURIyIOBRUjESEFIxEzByczESM3BRQyCAsZEyYYGcgyGRn%2BcAQOIhoWyBkYJhMZCwgyA%2Bj7m0tLfX1LS30DhBUgFQ4IAwH8rhYZAQJkZAEFCRUOA1IBAwgOFSAVASzI%2FOCnpwMgpwACACH%2FtQSPBLAAJQAvAAABIzQuBSsBERQWHwEVITUyPgM1ESMiDgUVIxEhEwc1IRUnNxUhNQRMMggLGRMmGBnIMhkZ%2FnAEDiIaFsgZGCYTGQsIMgPoQ6f84KenAyADhBUgFQ4IAwH9dhYZAQJkZAEFCRUOAooBAwgOFSAVASz7gn1LS319S0sABAAAAAAEsARMAA8AHwAvAD8AABMhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2EyEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYyAlgVHR0V%2FagVHR0VA%2BgVHR0V%2FBgVHR0VAyAVHR0V%2FOAVHR0VBEwVHR0V%2B7QVHR0ETB0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0ABAAAAAAEsARMAA8AHwAvAD8AABMhMhYdARQGIyEiJj0BNDYDITIWHQEUBiMhIiY9ATQ2EyEyFh0BFAYjISImPQE0NgMhMhYdARQGIyEiJj0BNDb6ArwVHR0V%2FUQVHR2zBEwVHR0V%2B7QVHR3dArwVHR0V%2FUQVHR2zBEwVHR0V%2B7QVHR0ETB0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0ABAAAAAAEsARMAA8AHwAvAD8AAAE1NDYzITIWHQEUBiMhIiYBNTQ2MyEyFh0BFAYjISImEzU0NjMhMhYdARQGIyEiJgE1NDYzITIWHQEUBiMhIiYB9B0VAlgVHR0V%2FagVHf5wHRUD6BUdHRX8GBUdyB0VAyAVHR0V%2FOAVHf7UHRUETBUdHRX7tBUdA7ZkFR0dFWQVHR3%2B6WQVHR0VZBUdHf7pZBUdHRVkFR0d%2FulkFR0dFWQVHR0AAAQAAAAABLAETAAPAB8ALwA%2FAAATITIWHQEUBiMhIiY9ATQ2EyEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2MgRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dBEwdFWQVHR0VZBUd%2FtQdFWQVHR0VZBUd%2FtQdFWQVHR0VZBUd%2FtQdFWQVHR0VZBUdAAgAAAAABLAETAAPAB8ALwA%2FAE8AXwBvAH8AABMzMhYdARQGKwEiJj0BNDYpATIWHQEUBiMhIiY9ATQ2ATMyFh0BFAYrASImPQE0NikBMhYdARQGIyEiJj0BNDYBMzIWHQEUBisBIiY9ATQ2KQEyFh0BFAYjISImPQE0NgEzMhYdARQGKwEiJj0BNDYpATIWHQEUBiMhIiY9ATQ2MmQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR3%2B6WQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR3%2B6WQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR3%2B6WQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR0ETB0VZBUdHRVkFR0dFWQVHR0VZBUd%2FtQdFWQVHR0VZBUdHRVkFR0dFWQVHf7UHRVkFR0dFWQVHR0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0dFWQVHR0VZBUdAAAG%2F5wAAASwBEwAAwATACMAKgA6AEoAACEjETsCMhYdARQGKwEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2BQc1IzUzNQUhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2AZBkZJZkFR0dFWQVHR0VAfQVHR0V%2FgwVHR3%2B%2BqfIyAHCASwVHR0V%2FtQVHR0VAlgVHR0V%2FagVHR0ETB0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR36fUtkS68dFWQVHR0VZBUd%2FtQdFWQVHR0VZBUdAAAABgAAAAAFFARMAA8AEwAjACoAOgBKAAATMzIWHQEUBisBIiY9ATQ2ASMRMwEhMhYdARQGIyEiJj0BNDYFMxUjFSc3BSEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYyZBUdHRVkFR0dA2dkZPyuAfQVHR0V%2FgwVHR0EL8jIp6f75gEsFR0dFf7UFR0dFQJYFR0dFf2oFR0dBEwdFWQVHR0VZBUd%2B7QETP7UHRVkFR0dFWQVHchkS319rx0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0AAAAAAgAAAMgEsAPoAA8AEgAAEyEyFhURFAYjISImNRE0NgkCSwLuHywsH%2F0SHywsBIT%2B1AEsA%2BgsH%2F12HywsHwKKHyz9RAEsASwAAwAAAAAEsARMAA8AFwAfAAATITIWFREUBiMhIiY1ETQ2FxE3BScBExEEMhYUBiImNCwEWBIaGhL7qBIaGkr3ASpKASXs%2FNJwTk5wTgRMGhL8DBIaGhID9BIaZP0ftoOcAT7%2B4AH0dE5vT09vAAAAAAIA2wAFBDYEkQAWAB4AAAEyHgEVFAcOAQ8BLgQnJjU0PgIWIgYUFjI2NAKIdcZzRkWyNjYJIV5YbSk8RHOft7eCgreCBJF4ynVzj23pPz4IIWZomEiEdVijeUjDgriBgbgAAAACABcAFwSZBJkADwAXAAAAMh4CFA4CIi4CND4BAREiDgEUHgEB4%2BrWm1tbm9bq1ptbW5sBS3TFcnLFBJlbm9bq1ptbW5vW6tab%2FG8DVnLF6MVyAAACAHUAAwPfBQ8AGgA1AAABHgYVFA4DBy4DNTQ%2BBQMOAhceBBcWNj8BNiYnLgInJjc2IyYCKhVJT1dOPiUzVnB9P1SbfEokP0xXUEm8FykoAwEbITEcExUWAgYCCQkFEikMGiACCAgFD0iPdXdzdYdFR4BeRiYEBTpjl1lFh3ZzeHaQ%2Ff4hS4I6JUEnIw4IBwwQIgoYBwQQQSlZtgsBAAAAAwAAAAAEywRsAAwAKgAvAAABNz4CHgEXHgEPAiUhMhcHISIGFREUFjMhMjY9ATcRFAYjISImNRE0NgkBBzcBA%2BhsAgYUFR0OFgoFBmz9BQGQMje7%2FpApOzspAfQpO8i7o%2F5wpbm5Azj%2BlqE3AWMD9XMBAgIEDw4WKgsKc8gNuzsp%2FgwpOzsptsj%2BtKW5uaUBkKW5%2Ftf%2BljKqAWMAAgAAAAAEkwRMABsANgAAASEGByMiBhURFBYzITI2NTcVFAYjISImNRE0NgUBFhQHAQYmJzUmDgMHPgY3NT4BAV4BaaQ0wyk7OykB9Ck7yLml%2FnClubkCfwFTCAj%2BrAcLARo5ZFRYGgouOUlARioTAQsETJI2Oyn%2BDCk7OymZZ6W5uaUBkKW5G%2F7TBxUH%2Fs4GBAnLAQINFjAhO2JBNB0UBwHSCgUAAAAAAgAAAAAEnQRMAB0ANQAAASEyFwchIgYVERQWMyEyNj0BNxUUBiMhIiY1ETQ2CQE2Mh8BFhQHAQYiLwEmND8BNjIfARYyAV4BXjxDsv6jKTs7KQH0KTvIuaX%2BcKW5uQHKAYsHFQdlBwf97QcVB%2FgHB2UHFQdvCBQETBexOyn%2BDCk7OylFyNulubmlAZCluf4zAYsHB2UHFQf97AcH%2BAcVB2UHB28HAAAAAQAKAAoEpgSmADsAAAkBNjIXARYGKwEVMzU0NhcBFhQHAQYmPQEjFTMyFgcBBiInASY2OwE1IxUUBicBJjQ3ATYWHQEzNSMiJgE%2BAQgIFAgBBAcFCqrICggBCAgI%2FvgICsiqCgUH%2FvwIFAj%2B%2BAgFCq%2FICgj%2B%2BAgIAQgICsivCgUDlgEICAj%2B%2BAgKyK0KBAf%2B%2FAcVB%2F73BwQKrcgKCP74CAgBCAgKyK0KBAcBCQcVBwEEBwQKrcgKAAEAyAAAA4QETAAZAAATMzIWFREBNhYVERQGJwERFAYrASImNRE0NvpkFR0B0A8VFQ%2F%2BMB0VZBUdHQRMHRX%2BSgHFDggV%2FBgVCA4Bxf5KFR0dFQPoFR0AAAABAAAAAASwBEwAIwAAEzMyFhURATYWFREBNhYVERQGJwERFAYnAREUBisBIiY1ETQ2MmQVHQHQDxUB0A8VFQ%2F%2BMBUP%2FjAdFWQVHR0ETB0V%2FkoBxQ4IFf5KAcUOCBX8GBUIDgHF%2FkoVCA4Bxf5KFR0dFQPoFR0AAAABAJ0AGQSwBDMAFQAAAREUBicBERQGJwEmNDcBNhYVEQE2FgSwFQ%2F%2BMBUP%2FhQPDwHsDxUB0A8VBBr8GBUIDgHF%2FkoVCA4B4A4qDgHgDggV%2FkoBxQ4IAAAAAQDIABYEMwQ2AAsAABMBFhQHAQYmNRE0NvMDLhIS%2FNISGRkEMv4OCx4L%2Fg4LDhUD6BUOAAIAyABkA4QD6AAPAB8AABMzMhYVERQGKwEiJjURNDYhMzIWFREUBisBIiY1ETQ2%2BsgVHR0VyBUdHQGlyBUdHRXIFR0dA%2BgdFfzgFR0dFQMgFR0dFfzgFR0dFQMgFR0AAAEAyABkBEwD6AAPAAABERQGIyEiJjURNDYzITIWBEwdFfzgFR0dFQMgFR0DtvzgFR0dFQMgFR0dAAAAAAEAAAAZBBMEMwAVAAABETQ2FwEWFAcBBiY1EQEGJjURNDYXAfQVDwHsDw%2F%2BFA8V%2FjAPFRUPAmQBthUIDv4gDioO%2FiAOCBUBtv47DggVA%2BgVCA4AAAH%2F%2FgACBLMETwAjAAABNzIWFRMUBiMHIiY1AwEGJjUDAQYmNQM0NhcBAzQ2FwEDNDYEGGQUHgUdFWQVHQL%2BMQ4VAv4yDxUFFQ8B0gIVDwHSAh0ETgEdFfwYFR0BHRUBtf46DwkVAbX%2BOQ4JFAPoFQkP%2Fj4BthQJDv49AbYVHQAAAQEsAAAD6ARMABkAAAEzMhYVERQGKwEiJjURAQYmNRE0NhcBETQ2A1JkFR0dFWQVHf4wDxUVDwHQHQRMHRX8GBUdHRUBtv47DggVA%2BgVCA7%2BOwG2FR0AAAIAZADIBLAESAALABsAAAkBFgYjISImNwE2MgEhMhYdARQGIyEiJj0BNDYCrgH1DwkW%2B%2B4WCQ8B9Q8q%2FfcD6BUdHRX8GBUdHQQ5%2FeQPFhYPAhwP%2FUgdFWQVHR0VZBUdAAEAiP%2F8A3UESgAFAAAJAgcJAQN1%2FqABYMX92AIoA4T%2Bn%2F6fxgIoAiYAAAAAAQE7%2F%2FwEKARKAAUAAAkBJwkBNwQo%2FdnGAWH%2Bn8YCI%2F3ZxgFhAWHGAAIAFwAXBJkEmQAPADMAAAAyHgIUDgIiLgI0PgEFIyIGHQEjIgYdARQWOwEVFBY7ATI2PQEzMjY9ATQmKwE1NCYB4%2BrWm1tbm9bq1ptbW5sBfWQVHZYVHR0Vlh0VZBUdlhUdHRWWHQSZW5vW6tabW1ub1urWm7odFZYdFWQVHZYVHR0Vlh0VZBUdlhUdAAAAAAIAFwAXBJkEmQAPAB8AAAAyHgIUDgIiLgI0PgEBISIGHQEUFjMhMjY9ATQmAePq1ptbW5vW6tabW1ubAkX%2BDBUdHRUB9BUdHQSZW5vW6tabW1ub1urWm%2F5%2BHRVkFR0dFWQVHQACABcAFwSZBJkADwAzAAAAMh4CFA4CIi4CND4BBCIPAScmIg8BBhQfAQcGFB8BFjI%2FARcWMj8BNjQvATc2NC8BAePq1ptbW5vW6tabW1ubAeUZCXh4CRkJjQkJeHgJCY0JGQl4eAkZCY0JCXh4CQmNBJlbm9bq1ptbW5vW6tabrQl4eAkJjQkZCXh4CRkJjQkJeHgJCY0JGQl4eAkZCY0AAgAXABcEmQSZAA8AJAAAADIeAhQOAiIuAjQ%2BAQEnJiIPAQYUHwEWMjcBNjQvASYiBwHj6tabW1ub1urWm1tbmwEVVAcVCIsHB%2FIHFQcBdwcHiwcVBwSZW5vW6tabW1ub1urWm%2F4xVQcHiwgUCPEICAF3BxUIiwcHAAAAAAMAFwAXBJkEmQAPADsASwAAADIeAhQOAiIuAjQ%2BAQUiDgMVFDsBFjc%2BATMyFhUUBgciDgUHBhY7ATI%2BAzU0LgMTIyIGHQEUFjsBMjY9ATQmAePq1ptbW5vW6tabW1ubAT8dPEIyIRSDHgUGHR8UFw4TARkOGhITDAIBDQ6tBx4oIxgiM0Q8OpYKDw8KlgoPDwSZW5vW6tabW1ub1urWm5ELHi9PMhkFEBQQFRIXFgcIBw4UHCoZCBEQKDhcNi9IKhsJ%2FeMPCpYKDw8KlgoPAAADABcAFwSZBJkADwAfAD4AAAAyHgIUDgIiLgI0PgEFIyIGHQEUFjsBMjY9ATQmAyMiBh0BFBY7ARUjIgYdARQWMyEyNj0BNCYrARE0JgHj6tabW1ub1urWm1tbmwGWlgoPDwqWCg8PCvoKDw8KS0sKDw8KAV4KDw8KSw8EmVub1urWm1tbm9bq1ptWDwqWCg8PCpYKD%2F7UDwoyCg%2FIDwoyCg8PCjIKDwETCg8AAgAAAAAEsASwAC8AXwAAATMyFh0BHgEXMzIWHQEUBisBDgEHFRQGKwEiJj0BLgEnIyImPQE0NjsBPgE3NTQ2ExUUBisBIiY9AQ4BBzMyFh0BFAYrAR4BFzU0NjsBMhYdAT4BNyMiJj0BNDY7AS4BAg2WCg9nlxvCCg8PCsIbl2cPCpYKD2eXG8IKDw8KwhuXZw%2B5DwqWCg9EZheoCg8PCqgXZkQPCpYKD0RmF6gKDw8KqBdmBLAPCsIbl2cPCpYKD2eXG8IKDw8KwhuXZw8KlgoPZ5cbwgoP%2Fs2oCg8PCqgXZkQPCpYKD0RmF6gKDw8KqBdmRA8KlgoPRGYAAwAXABcEmQSZAA8AGwA%2FAAAAMh4CFA4CIi4CND4BBCIOARQeATI%2BATQmBxcWFA8BFxYUDwEGIi8BBwYiLwEmND8BJyY0PwE2Mh8BNzYyAePq1ptbW5vW6tabW1ubAb%2FoxXJyxejFcnKaQAcHfHwHB0AHFQd8fAcVB0AHB3x8BwdABxUHfHwHFQSZW5vW6tabW1ub1urWmztyxejFcnLF6MVaQAcVB3x8BxUHQAcHfHwHB0AHFQd8fAcVB0AHB3x8BwAAAAMAFwAXBJkEmQAPABsAMAAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgcXFhQHAQYiLwEmND8BNjIfATc2MgHj6tabW1ub1urWm1tbmwG%2F6MVycsXoxXJyg2oHB%2F7ACBQIyggIagcVB0%2FFBxUEmVub1urWm1tbm9bq1ps7csXoxXJyxejFfWoHFQf%2BvwcHywcVB2oICE%2FFBwAAAAMAFwAXBJkEmQAPABgAIQAAADIeAhQOAiIuAjQ%2BAQUiDgEVFBcBJhcBFjMyPgE1NAHj6tabW1ub1urWm1tbmwFLdMVyQQJLafX9uGhzdMVyBJlbm9bq1ptbW5vW6tabO3LFdHhpAktB0P24PnLFdHMAAAAAAQAXAFMEsAP5ABUAABMBNhYVESEyFh0BFAYjIREUBicBJjQnAgoQFwImFR0dFf3aFxD99hACRgGrDQoV%2Ft0dFcgVHf7dFQoNAasNJgAAAAABAAAAUwSZA%2FkAFQAACQEWFAcBBiY1ESEiJj0BNDYzIRE0NgJ%2FAgoQEP32EBf92hUdHRUCJhcD8f5VDSYN%2FlUNChUBIx0VyBUdASMVCgAAAAEAtwAABF0EmQAVAAAJARYGIyERFAYrASImNREhIiY3ATYyAqoBqw0KFf7dHRXIFR3%2B3RUKDQGrDSYEif32EBf92hUdHRUCJhcQAgoQAAAAAQC3ABcEXQSwABUAAAEzMhYVESEyFgcBBiInASY2MyERNDYCJsgVHQEjFQoN%2FlUNJg3%2BVQ0KFQEjHQSwHRX92hcQ%2FfYQEAIKEBcCJhUdAAABAAAAtwSZBF0AFwAACQEWFAcBBiY1EQ4DBz4ENxE0NgJ%2FAgoQEP32EBdesKWBJAUsW4fHfhcEVf5VDSYN%2FlUNChUBIwIkRHVNabGdcUYHAQYVCgACAAAAAASwBLAAFQArAAABITIWFREUBi8BBwYiLwEmND8BJyY2ASEiJjURNDYfATc2Mh8BFhQPARcWBgNSASwVHRUOXvkIFAhqBwf5Xg4I%2FiH%2B1BUdFQ5e%2BQgUCGoHB%2FleDggEsB0V%2FtQVCA5e%2BQcHaggUCPleDhX7UB0VASwVCA5e%2BQcHaggUCPleDhUAAAACAEkASQRnBGcAFQArAAABFxYUDwEXFgYjISImNRE0Nh8BNzYyASEyFhURFAYvAQcGIi8BJjQ%2FAScmNgP2agcH%2BV4OCBX%2B1BUdFQ5e%2BQgU%2FQwBLBUdFQ5e%2BQgUCGoHB%2FleDggEYGoIFAj5Xg4VHRUBLBUIDl75B%2F3xHRX%2B1BUIDl75BwdqCBQI%2BV4OFQAAAAADABcAFwSZBJkADwAfAC8AAAAyHgIUDgIiLgI0PgEFIyIGFxMeATsBMjY3EzYmAyMiBh0BFBY7ATI2PQE0JgHj6tabW1ub1urWm1tbmwGz0BQYBDoEIxQ2FCMEOgQYMZYKDw8KlgoPDwSZW5vW6tabW1ub1urWm7odFP7SFB0dFAEuFB3%2BDA8KlgoPDwqWCg8AAAAABQAAAAAEsASwAEkAVQBhAGgAbwAAATIWHwEWHwEWFxY3Nj8BNjc2MzIWHwEWHwIeATsBMhYdARQGKwEiBh0BIREjESE1NCYrASImPQE0NjsBMjY1ND8BNjc%2BBAUHBhY7ATI2LwEuAQUnJgYPAQYWOwEyNhMhIiY1ESkBERQGIyERAQQJFAUFFhbEFQ8dCAsmxBYXERUXMA0NDgQZCAEPCj0KDw8KMgoP%2FnDI%2FnAPCjIKDw8KPQsOCRkFDgIGFRYfAp2mBwQK2woKAzMDEP41sQgQAzMDCgrnCwMe%2FokKDwGQAlgPCv6JBLAEAgIKDXYNCxUJDRZ2DQoHIREQFRh7LAkLDwoyCg8PCq8BLP7UrwoPDwoyCg8GBQQwgBkUAwgWEQ55ogcKDgqVCgSqnQcECo8KDgr8cg8KAXf%2BiQoPAZAAAAAAAgAAAAwErwSmACsASQAAATYWFQYCDgQuAScmByYOAQ8BBiY1NDc%2BATc%2BAScuAT4BNz4GFyYGBw4BDwEOBAcOARY2Nz4CNz4DNz4BBI0IGgItQmxhi2KORDg9EQQRMxuZGhYqCFUYEyADCQIQOjEnUmFch3vAJQgdHyaiPT44XHRZUhcYDhItIRmKcVtGYWtbKRYEBKYDEwiy%2Ft3IlVgxEQgLCwwBAQIbG5kYEyJAJghKFRE8Hzdff4U%2FM0o1JSMbL0QJGCYvcSEhHjZST2c1ODwEJygeW0AxJUBff1UyFAABAF0AHgRyBM8ATwAAAQ4BHgQXLgc%2BATceAwYHDgQHBicmNzY3PgQuAScWDgMmJy4BJyY%2BBDcGHgM3PgEuAicmPgMCjScfCic4R0IgBBsKGAoQAwEJEg5gikggBhANPkpTPhZINx8SBgsNJysiCRZOQQoVNU1bYC9QZwICBAUWITsoCAYdJzIYHw8YIiYHDyJJYlkEz0OAZVxEOSQMBzgXOB42IzElKRIqg5Gnl0o3Z0c6IAYWCwYNAwQFIDhHXGF1OWiqb0sdBxUknF0XNTQ8PEUiNWNROBYJDS5AQVUhVZloUSkAAAAAA%2F%2FcAGoE1ARGABsAPwBRAAAAMh4FFA4FIi4FND4EBSYGFxYVFAYiJjU0NzYmBwYHDgEXHgQyPgM3NiYnJgUHDgEXFhcWNj8BNiYnJicuAQIGpJ17bk85HBw6T257naKde25POhwcOU9uewIPDwYIGbD4sBcIBw5GWg0ECxYyWl%2BDiINfWjIWCwQMWv3%2FIw8JCSU4EC0OIw4DDywtCyIERi1JXGJcSSpJXGJcSS0tSVxiXEkqSVxiXEncDwYTOT58sLB8OzcTBg9FcxAxEiRGXkQxMEVeRSQSMRF1HiQPLxJEMA0EDyIPJQ8sSRIEAAAABP%2FcAAAE1ASwABQAJwA7AEwAACEjNy4ENTQ%2BBTMyFzczEzceARUUDgMHNz4BNzYmJyYlBgcOARceBBc3LgE1NDc2JhcHDgEXFhcWNj8CJyYnLgECUJQfW6l2WSwcOU9ue51SPUEglCYvbIknUGqYUi5NdiYLBAw2%2FVFGWg0ECxIqSExoNSlrjxcIB3wjDwkJJTgQLQ4MFgMsLQsieBRhdHpiGxVJXGJcSS0Pef5StVXWNBpacm5jGq0xiD8SMRFGckVzEDESHjxRQTkNmhKnbjs3EwZwJA8vEkQwDQQPC1YELEkSBAAAAAP%2FngAABRIEqwALABgAKAAAJwE2FhcBFgYjISImJSE1NDY7ATIWHQEhAQczMhYPAQ4BKwEiJi8BJjZaAoIUOBQCghUbJfryJRsBCgFZDwqWCg8BWf5DaNAUGAQ6BCMUNhQjBDoEGGQEKh8FIfvgIEdEhEsKDw8KSwLT3x0U%2FBQdHRT8FB0AAAABAGQAFQSwBLAAKAAAADIWFREBHgEdARQGJyURFh0BFAYvAQcGJj0BNDcRBQYmPQE0NjcBETQCTHxYAWsPFhgR%2FplkGhPNzRMaZP6ZERgWDwFrBLBYPv6t%2FrsOMRQpFA0M%2Bf75XRRAFRAJgIAJEBVAFF0BB%2FkMDRQpFDEOAUUBUz4AAAARAAAAAARMBLAAHQAnACsALwAzADcAOwA%2FAEMARwBLAE8AUwBXAFsAXwBjAAABMzIWHQEzMhYdASE1NDY7ATU0NjsBMhYdASE1NDYBERQGIyEiJjURFxUzNTMVMzUzFTM1MxUzNTMVMzUFFTM1MxUzNTMVMzUzFTM1MxUzNQUVMzUzFTM1MxUzNTMVMzUzFTM1A1JkFR0yFR37tB0VMh0VZBUdAfQdAQ8dFfwYFR1kZGRkZGRkZGRk%2FHxkZGRkZGRkZGT8fGRkZGRkZGRkZASwHRUyHRWWlhUdMhUdHRUyMhUd%2FnD9EhUdHRUC7shkZGRkZGRkZGRkyGRkZGRkZGRkZGTIZGRkZGRkZGRkZAAAAAMAAAAZBXcElwAZACUANwAAARcWFA8BBiY9ASMBISImPQE0NjsBATM1NDYBBycjIiY9ATQ2MyEBFxYUDwEGJj0BIyc3FzM1NDYEb%2FkPD%2FkOFZ%2F9qP7dFR0dFdECWPEV%2FamNetEVHR0VASMDGvkPD%2FkOFfG1jXqfFQSN5g4qDuYOCBWW%2FagdFWQVHQJYlhUI%2FpiNeh0VZBUd%2Fk3mDioO5g4IFZa1jXqWFQgAAAABAAAAAASwBEwAEgAAEyEyFhURFAYjIQERIyImNRE0NmQD6Ck7Oyn9rP7QZCk7OwRMOyn9qCk7%2FtQBLDspAlgpOwAAAAMAZAAABEwEsAAJABMAPwAAEzMyFh0BITU0NiEzMhYdASE1NDYBERQOBSIuBTURIRUUFRwBHgYyPgYmNTQ9AZbIFR3%2B1B0C0cgVHf7UHQEPBhgoTGacwJxmTCgYBgEsAwcNFB8nNkI2Jx8TDwUFAQSwHRX6%2BhUdHRX6%2BhUd%2FnD%2B1ClJalZcPigoPlxWakkpASz6CRIVKyclIRsWEAgJEBccISUnKhURCPoAAAAB%2F%2F8A1ARMA8IABQAAAQcJAScBBEzG%2Fp%2F%2Bn8UCJwGbxwFh%2Fp%2FHAicAAQAAAO4ETQPcAAUAAAkCNwkBBE392v3ZxgFhAWEDFf3ZAifH%2Fp8BYQAAAAAC%2F1EAZAVfA%2BgAFAApAAABITIWFREzMhYPAQYiLwEmNjsBESElFxYGKwERIRchIiY1ESMiJj8BNjIBlALqFR2WFQgO5g4qDuYOCBWW%2FoP%2BHOYOCBWWAYHX%2FRIVHZYVCA7mDioD6B0V%2FdkVDvkPD%2FkOFQGRuPkOFf5wyB0VAiYVDvkPAAABAAYAAASeBLAAMAAAEzMyFh8BITIWBwMOASMhFyEyFhQGKwEVFAYiJj0BIRUUBiImPQEjIiYvAQMjIiY0NjheERwEJgOAGB4FZAUsIf2HMAIXFR0dFTIdKh3%2B1B0qHR8SHQYFyTYUHh4EsBYQoiUY%2FiUVK8gdKh0yFR0dFTIyFR0dFTIUCQoDwR0qHQAAAAACAAAAAASwBEwACwAPAAABFSE1MzQ2MyEyFhUFIREhBLD7UMg7KQEsKTv9RASw%2B1AD6GRkKTs7Kcj84AACAAAAAAXcBEwADAAQAAATAxEzNDYzITIWFSEVBQEhAcjIyDspASwqOgH0ASz%2B1PtQASwDIP5wAlgpOzspyGT9RAK8AAEBRQAAA2sErwAbAAABFxYGKwERMzIWDwEGIi8BJjY7AREjIiY%2FATYyAnvmDggVlpYVCA7mDioO5g4IFZaWFQgO5g4qBKD5DhX9pxUO%2BQ8P%2BQ4VAlkVDvkPAAAAAQABAUQErwNrABsAAAEXFhQPAQYmPQEhFRQGLwEmND8BNhYdASE1NDYDqPkODvkPFf2oFQ%2F5Dg75DxUCWBUDYOUPKQ%2FlDwkUl5cUCQ%2FlDykP5Q8JFZWVFQkAAAAEAAAAAASwBLAACQAZAB0AIQAAAQMuASMhIgYHAwUhIgYdARQWMyEyNj0BNCYFNTMVMzUzFQSRrAUkFP1gFCQFrAQt%2FBgpOzspA%2BgpOzv%2Bq2RkZAGQAtwXLSgV%2FR1kOylkKTs7KWQpO8hkZGRkAAAAA%2F%2BcAGQEsARMAAsAIwAxAAAAMhYVERQGIiY1ETQDJSMTFgYjIisBIiYnAj0BNDU0PgE7ASUBFSIuAz0BND4CNwRpKh0dKh1k%2FV0mLwMRFQUCVBQdBDcCCwzIAqP8GAQOIhoWFR0dCwRMHRX8rhUdHRUDUhX8mcj%2B7BAIHBUBUQ76AgQQDw36%2FtT6AQsTKRwyGigUDAEAAAACAEoAAARmBLAALAA1AAABMzIWDwEeARcTFzMyFhQGBw4EIyIuBC8BLgE0NjsBNxM%2BATcnJjYDFjMyNw4BIiYCKV4UEgYSU3oPP3YRExwaEggeZGqfTzl0XFU%2BLwwLEhocExF2Pw96UxIGEyQyNDUxDDdGOASwFRMlE39N%2FrmtHSkoBwQLHBYSCg4REg4FBAgoKR2tAUdNfhQgExr7vgYGMT09AAEAFAAUBJwEnAAXAAABNwcXBxcHFycHJwcnBzcnNyc3Jxc3FzcDIOBO6rS06k7gLZubLeBO6rS06k7gLZubA7JO4C2bmy3gTuq0tOpO4C2bmy3gTuq0tAADAAAAZASwBLAAIQAtAD0AAAEzMhYdAQchMhYdARQHAw4BKwEiJi8BIyImNRE0PwI%2BARcPAREzFzMTNSE3NQEzMhYVERQGKwEiJjURNDYCijIoPBwBSCg8He4QLBf6B0YfHz0tNxSRYA0xG2SWZIjW%2Bv4%2BMv12ZBUdHRVkFR0dBLBRLJZ9USxkLR3%2BqBghMhkZJCcBkCQbxMYcKGTU1f6JZAF3feGv%2FtQdFf4MFR0dFQH0FR0AAAAAAwAAAAAEsARMACAAMAA8AAABMzIWFxMWHQEUBiMhFh0BFAYrASImLwImNRE0NjsBNgUzMhYVERQGKwEiJjURNDYhByMRHwEzNSchNQMCWPoXLBDuHTwo%2FrgcPCgyGzENYJEUNy09fP3pZBUdHRVkFR0dAl%2BIZJZkMjIBwvoETCEY%2FqgdLWQsUXYHlixRKBzGxBskAZAnJGRkHRX%2BDBUdHRUB9BUdZP6J1dSv4X0BdwADAAAAZAUOBE8AGwA3AEcAAAElNh8BHgEPASEyFhQGKwEDDgEjISImNRE0NjcXERchEz4BOwEyNiYjISoDLgQnJj8BJwUzMhYVERQGKwEiJjURNDYBZAFrHxZuDQEMVAEuVGxuVGqDBhsP%2FqoHphwOOmQBJYMGGw%2FLFRMSFv44AgoCCQMHAwUDAQwRklb9T2QVHR0VZBUdHQNp5hAWcA0mD3lMkE7%2BrRUoog0CDRElCkj%2BCVkBUxUoMjIBAgIDBQIZFrdT5B0V%2FgwVHR0VAfQVHQAAAAP%2FnABkBLAETwAdADYARgAAAQUeBBURFAYjISImJwMjIiY0NjMhJyY2PwE2BxcWBw4FKgIjIRUzMhYXEyE3ESUFMzIWFREUBisBIiY1ETQ2AdsBbgIIFBANrAf%2Bqg8bBoNqVW1sVAEuVQsBDW4WSpIRDAIDBQMHAwkDCgH%2BJd0PHAaCASZq%2FqoCUGQVHR0VZBUdHQRP5gEFEBEXC%2F3zDaIoFQFTTpBMeQ8mDXAWrrcWGQIFAwICAWQoFf6tWQH37OQdFf4MFR0dFQH0FR0AAAADAGEAAARMBQ4AGwA3AEcAAAAyFh0BBR4BFREUBiMhIiYvAQMmPwE%2BAR8BETQXNTQmBhURHAMOBAcGLwEHEyE3ESUuAQMhMhYdARQGIyEiJj0BNDYB3pBOAVMVKKIN%2FfMRJQoJ5hAWcA0mD3nGMjIBAgIDBQIZFrdT7AH3Wf6tFSiWAfQVHR0V%2FgwVHR0FDm5UaoMGGw%2F%2BqgemHA4OAWsfFm4NAQxUAS5U1ssVExIW%2FjgCCgIJAwcDBQMBDBGSVv6tZAElgwYb%2FQsdFWQVHR0VZBUdAAP%2F%2FQAGA%2BgFFAAPAC0ASQAAASEyNj0BNCYjISIGHQEUFgEVFAYiJjURBwYmLwEmNxM%2BBDMhMhYVERQGBwEDFzc2Fx4FHAIVERQWNj0BNDY3JREnAV4B9BUdHRX%2BDBUdHQEPTpBMeQ8mDXAWEOYBBRARFwsCDQ2iKBX9iexTtxYZAgUDAgIBMjIoFQFTWQRMHRVkFR0dFWQVHfzmalRubFQBLlQMAQ1uFh8BawIIEw8Mpgf%2Bqg8bBgHP%2Fq1WkhEMAQMFAwcDCQIKAv44FhITFcsPGwaDASVkAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgEBJSYGHQEhIgYdARQWMyEVFBY3JTY0AeLs1ptbW5vW7NabW1ubAob%2B7RAX%2Fu0KDw8KARMXEAETEASaW5vW7NabW1ub1uzWm%2F453w0KFYkPCpYKD4kVCg3fDSYAAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgENAQYUFwUWNj0BITI2PQE0JiMhNTQmAeLs1ptbW5vW7NabW1ubASX%2B7RAQARMQFwETCg8PCv7tFwSaW5vW7NabW1ub1uzWm%2BjfDSYN3w0KFYkPCpYKD4kVCgAAAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgEBAyYiBwMGFjsBERQWOwEyNjURMzI2AeLs1ptbW5vW7NabW1ubAkvfDSYN3w0KFYkPCpYKD4kVCgSaW5vW7NabW1ub1uzWm%2F5AARMQEP7tEBf%2B7QoPDwoBExcAAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgEFIyIGFREjIgYXExYyNxM2JisBETQmAeLs1ptbW5vW7NabW1ubAZeWCg%2BJFQoN3w0mDd8NChWJDwSaW5vW7NabW1ub1uzWm7sPCv7tFxD%2B7RAQARMQFwETCg8AAAMAGAAYBJgEmAAPAJYApgAAADIeAhQOAiIuAjQ%2BASUOAwcGJgcOAQcGFgcOAQcGFgcUFgcyHgEXHgIXHgI3Fg4BFx4CFxQGFBcWNz4CNy4BJy4BJyIOAgcGJyY2NS4BJzYuAQYHBicmNzY3HgIXHgMfAT4CJyY%2BATc%2BAzcmNzIWMjY3LgMnND4CJiceAT8BNi4CJwYHFB4BFS4CJz4BNxYyPgEB5OjVm1xcm9Xo1ZtcXJsBZA8rHDoKDz0PFD8DAxMBAzEFCRwGIgEMFhkHECIvCxU%2FOR0HFBkDDRQjEwcFaHUeISQDDTAMD0UREi4oLBAzDwQBBikEAQMLGhIXExMLBhAGKBsGBxYVEwYFAgsFAwMNFwQGCQcYFgYQCCARFwkKKiFBCwQCAQMDHzcLDAUdLDgNEiEQEgg%2FKhADGgMKEgoRBJhcm9Xo1ZtcXJvV6NWbEQwRBwkCAwYFBycPCxcHInIWInYcCUcYChQECA4QBAkuHgQPJioRFRscBAcSCgwCch0kPiAIAQcHEAsBAgsLIxcBMQENCQIPHxkCFBkdHB4QBgEBBwoMGBENBAMMJSAQEhYXDQ4qFBkKEhIDCQsXJxQiBgEOCQwHAQ0DBAUcJAwSCwRnETIoAwEJCwsLJQcKDBEAAAAAAQAAAAIErwSFABYAAAE2FwUXNxYGBw4BJwEGIi8BJjQ3ASY2AvSkjv79kfsGUE08hjv9rA8rD28PDwJYIk8EhVxliuh%2BWYcrIgsW%2FawQEG4PKxACV2XJAAYAAABgBLAErAAPABMAIwAnADcAOwAAEyEyFh0BFAYjISImPQE0NgUjFTMFITIWHQEUBiMhIiY9ATQ2BSEVIQUhMhYdARQGIyEiJj0BNDYFIRUhZAPoKTs7KfwYKTs7BBHIyPwYA%2BgpOzsp%2FBgpOzsEEf4MAfT8GAPoKTs7KfwYKTs7BBH%2B1AEsBKw7KWQpOzspZCk7ZGTIOylkKTs7KWQpO2RkyDspZCk7OylkKTtkZAAAAAIAZAAABEwEsAALABEAABMhMhYUBiMhIiY0NgERBxEBIZYDhBUdHRX8fBUdHQI7yP6iA4QEsB0qHR0qHf1E%2FtTIAfQB9AAAAAMAAABkBLAEsAAXABsAJQAAATMyFh0BITIWFREhNSMVIRE0NjMhNTQ2FxUzNQEVFAYjISImPQEB9MgpOwEsKTv%2BDMj%2BDDspASw7KcgB9Dsp%2FBgpOwSwOylkOyn%2BcGRkAZApO2QpO2RkZP1EyCk7OynIAAAABAAAAAAEsASwABUAKwBBAFcAABMhMhYPARcWFA8BBiIvAQcGJjURNDYpATIWFREUBi8BBwYiLwEmND8BJyY2ARcWFA8BFxYGIyEiJjURNDYfATc2MgU3NhYVERQGIyEiJj8BJyY0PwE2MhcyASwVCA5exwcHaggUCMdeDhUdAzUBLBUdFQ5exwgUCGoHB8deDgj%2BL2oHB8deDggV%2FtQVHRUOXscIFALLXg4VHRX%2B1BUIDl7HBwdqCBQIBLAVDl7HCBQIagcHx14OCBUBLBUdHRX%2B1BUIDl7HBwdqCBQIx14OFf0maggUCMdeDhUdFQEsFQgOXscHzl4OCBX%2B1BUdFQ5exwgUCGoHBwAAAAYAAAAABKgEqAAPABsAIwA7AEMASwAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JiQyFhQGIiY0JDIWFAYjIicHFhUUBiImNTQ2PwImNTQEMhYUBiImNCQyFhQGIiY0Advy3Z9fX5%2Fd8t2gXl6gAcbgv29vv%2BC%2Fb2%2F%2BLS0gIC0gAUwtICAWDg83ETNIMykfegEJ%2FoctICAtIAIdLSAgLSAEqF%2Bf3fLdoF5eoN3y3Z9Xb7%2Fgv29vv%2BC%2FBiAtISEtICAtIQqRFxwkMzMkIDEFfgEODhekIC0gIC0gIC0gIC0AAf%2FYAFoEuQS8AFsAACUBNjc2JicmIyIOAwcABw4EFx4BMzI3ATYnLgEjIgcGBwEOASY0NwA3PgEzMhceARcWBgcOBgcGIyImJyY2NwE2NzYzMhceARcWBgcBDgEnLgECIgHVWwgHdl8WGSJBMD8hIP6IDx4eLRMNBQlZN0ozAiQkEAcdEhoYDRr%2Bqw8pHA4BRyIjQS4ODyw9DQ4YIwwod26La1YOOEBGdiIwGkQB%2F0coW2tQSE5nDxE4Qv4eDyoQEAOtAdZbZWKbEQQUGjIhH%2F6JDxsdNSg3HT5CMwIkJCcQFBcMGv6uDwEcKQ4BTSIjIQEINykvYyMLKnhuiWZMBxtAOU6%2BRAH%2FSBg3ISSGV121Qv4kDwIPDyYAAAACAGQAWASvBEQAGQBEAAABPgIeAhUUDgMHLgQ1ND4CHgEFIg4DIi4DIyIGFRQeAhcWFx4EMj4DNzY3PgQ1NCYCiTB7eHVYNkN5hKg%2BPqeFeEM4WnZ4eQEjIT8yLSohJyktPyJDbxtBMjMPBw86KzEhDSIzKUAMBAgrKT8dF2oDtURIBS1TdkA5eYB%2FslVVsn%2BAeTlAdlMtBUgtJjY1JiY1NiZvTRc4SjQxDwcOPCouGBgwKEALBAkpKkQqMhNPbQACADn%2F8gR3BL4AFwAuAAAAMh8BFhUUBg8BJi8BNycBFwcvASY0NwEDNxYfARYUBwEGIi8BJjQ%2FARYfAQcXAQKru0KNQjgiHR8uEl%2F3%2FnvUaRONQkIBGxJpCgmNQkL%2B5UK6Qo1CQjcdLhJf9wGFBL5CjUJeKmsiHTUuEl%2F4%2FnvUahKNQrpCARv%2BRmkICY1CukL%2B5UJCjUK7Qjc3LxFf%2BAGFAAAAAAMAyAAAA%2BgEsAARABUAHQAAADIeAhURFAYjISImNRE0PgEHESERACIGFBYyNjQCBqqaZDo7Kf2oKTs8Zj4CWP7%2FVj09Vj0EsB4uMhX8Ryk7OykDuRUzLar9RAK8%2FRY9Vj09VgABAAAAAASwBLAAFgAACQEWFAYiLwEBEScBBRMBJyEBJyY0NjIDhgEbDx0qDiT%2B6dT%2BzP7oywEz0gEsAQsjDx0qBKH%2B5g8qHQ8j%2FvX%2B1NL%2BzcsBGAE01AEXJA4qHQAAAAADAScAEQQJBOAAMgBAAEsAAAEVHgQXIy4DJxEXHgQVFAYHFSM1JicuASczHgEXEScuBDU0PgI3NRkBDgMVFB4DFxYXET4ENC4CArwmRVI8LAKfBA0dMydAIjxQNyiym2SWVygZA4sFV0obLkJOMCAyVWg6HSoqFQ4TJhkZCWgWKTEiGBkzNwTgTgUTLD9pQiQuLBsH%2Fs0NBxMtPGQ%2Bi6oMTU8QVyhrVk1iEAFPCA4ZLzlYNkZwSCoGTf4SARIEDh02Jh0rGRQIBgPQ%2FsoCCRYgNEM0JRkAAAABAGQAZgOUBK0ASgAAATIeARUjNC4CIyIGBwYVFB4BFxYXMxUjFgYHBgc%2BATM2FjMyNxcOAyMiLgEHDgEPASc%2BBTc%2BAScjNTMmJy4CPgE3NgIxVJlemSc8OxolVBQpGxoYBgPxxQgVFS02ImIWIIwiUzUyHzY4HCAXanQmJ1YYFzcEGAcTDBEJMAwk3aYXFQcKAg4tJGEErVCLTig%2FIhIdFSw5GkowKgkFZDKCHj4yCg8BIh6TExcIASIfBAMaDAuRAxAFDQsRCjePR2QvORQrREFMIVgAAAACABn%2F%2FwSXBLAADwAfAAABMzIWDwEGIi8BJjY7AREzBRcWBisBESMRIyImPwE2MgGQlhUIDuYOKg7mDggVlsgCF%2BYOCBWWyJYVCA7mDioBLBYO%2Bg8P%2Bg4WA4QQ%2BQ4V%2FHwDhBUO%2BQ8AAAQAGf%2F%2FA%2BgEsAAHABcAGwAlAAABIzUjFSMRIQEzMhYPAQYiLwEmNjsBETMFFTM1EwczFSE1NyM1IQPoZGRkASz9qJYVCA7mDioO5g4IFZbIAZFkY8jI%2FtTIyAEsArxkZAH0%2FHwWDvoPD%2FoOFgOEZMjI%2FRL6ZJb6ZAAAAAAEABn%2F%2FwPoBLAADwAZACEAJQAAATMyFg8BBiIvASY2OwERMwUHMxUhNTcjNSERIzUjFSMRIQcVMzUBkJYVCA7mDioO5g4IFZbIAljIyP7UyMgBLGRkZAEsx2QBLBYO%2Bg8P%2Bg4WA4SW%2BmSW%2BmT7UGRkAfRkyMgAAAAEABn%2F%2FwRMBLAADwAVABsAHwAAATMyFg8BBiIvASY2OwERMwEjESM1MxMjNSMRIQcVMzUBkJYVCA7mDioO5g4IFZbIAlhkZMhkZMgBLMdkASwWDvoPD%2FoOFgOE%2FgwBkGT7UGQBkGTIyAAAAAAEABn%2F%2FwRMBLAADwAVABkAHwAAATMyFg8BBiIvASY2OwERMwEjNSMRIQcVMzUDIxEjNTMBkJYVCA7mDioO5g4IFZbIArxkyAEsx2QBZGTIASwWDvoPD%2FoOFgOE%2FgxkAZBkyMj7tAGQZAAAAAAFABn%2F%2FwSwBLAADwATABcAGwAfAAABMzIWDwEGIi8BJjY7AREzBSM1MxMhNSETITUhEyE1IQGQlhUIDuYOKg7mDggVlsgB9MjIZP7UASxk%2FnABkGT%2BDAH0ASwWDvoPD%2FoOFgOEyMj%2BDMj%2BDMj%2BDMgABQAZ%2F%2F8EsASwAA8AEwAXABsAHwAAATMyFg8BBiIvASY2OwERMwUhNSEDITUhAyE1IQMjNTMBkJYVCA7mDioO5g4IFZbIAyD%2BDAH0ZP5wAZBk%2FtQBLGTIyAEsFg76Dw%2F6DhYDhMjI%2FgzI%2FgzI%2FgzIAAIAAAAABEwETAAPAB8AAAEhMhYVERQGIyEiJjURNDYFISIGFREUFjMhMjY1ETQmAV4BkKK8u6P%2BcKW5uQJn%2FgwpOzspAfQpOzsETLuj%2FnClubmlAZClucg7Kf4MKTs7KQH0KTsAAAAAAwAAAAAETARMAA8AHwArAAABITIWFREUBiMhIiY1ETQ2BSEiBhURFBYzITI2NRE0JgUXFhQPAQYmNRE0NgFeAZClubml%2FnCju7wCZP4MKTs7KQH0KTs7%2Fm%2F9ERH9EBgYBEy5pf5wpbm5pQGQo7vIOyn%2BDCk7OykB9Ck7gr4MJAy%2BDAsVAZAVCwAAAAADAAAAAARMBEwADwAfACsAAAEhMhYVERQGIyEiJjURNDYFISIGFREUFjMhMjY1ETQmBSEyFg8BBiIvASY2AV4BkKO7uaX%2BcKW5uQJn%2FgwpOzspAfQpOzv%2BFQGQFQsMvgwkDL4MCwRMvKL%2BcKW5uaUBkKO7yDsp%2FgwpOzspAfQpO8gYEP0REf0QGAAAAAMAAAAABEwETAAPAB8AKwAAASEyFhURFAYjISImNRE0NgUhIgYVERQWMyEyNjURNCYFFxYGIyEiJj8BNjIBXgGQpbm5pf5wo7u5Amf%2BDCk7OykB9Ck7O%2F77vgwLFf5wFQsMvgwkBEy5pf5wo7u8ogGQpbnIOyn%2BDCk7OykB9Ck7z%2F0QGBgQ%2FREAAAAAAgAAAAAFFARMAB8ANQAAASEyFhURFAYjISImPQE0NjMhMjY1ETQmIyEiJj0BNDYHARYUBwEGJj0BIyImPQE0NjsBNTQ2AiYBkKW5uaX%2BcBUdHRUBwik7Oyn%2BPhUdHb8BRBAQ%2FrwQFvoVHR0V%2BhYETLml%2FnCluR0VZBUdOykB9Ck7HRVkFR3p%2FuQOJg7%2B5A4KFZYdFcgVHZYVCgAAAQDZAAID1wSeACMAAAEXFgcGAgclMhYHIggBBwYrAScmNz4BPwEhIicmNzYANjc2MwMZCQgDA5gCASwYEQ4B%2Fvf%2B8wQMDgkJCQUCUCcn%2FtIXCAoQSwENuwUJEASeCQoRC%2F5TBwEjEv7K%2FsUFDwgLFQnlbm4TFRRWAS%2FTBhAAAAACAAAAAAT%2BBEwAHwA1AAABITIWHQEUBiMhIgYVERQWMyEyFh0BFAYjISImNRE0NgUBFhQHAQYmPQEjIiY9ATQ2OwE1NDYBXgGQFR0dFf4%2BKTs7KQHCFR0dFf5wpbm5AvEBRBAQ%2FrwQFvoVHR0V%2BhYETB0VZBUdOyn%2BDCk7HRVkFR25pQGQpbnp%2FuQOJg7%2B5A4KFZYdFcgVHZYVCgACAAAAAASwBLAAFQAxAAABITIWFREUBi8BAQYiLwEmNDcBJyY2ASMiBhURFBYzITI2PQE3ERQGIyEiJjURNDYzIQLuAZAVHRUObf7IDykPjQ8PAThtDgj%2B75wpOzspAfQpO8i7o%2F5wpbm5pQEsBLAdFf5wFQgObf7IDw%2BNDykPAThtDhX%2B1Dsp%2FgwpOzsplMj%2B1qW5uaUBkKW5AAADAA4ADgSiBKIADwAbACMAAAAyHgIUDgIiLgI0PgEEIg4BFB4BMj4BNCYEMhYUBiImNAHh7tmdXV2d2e7ZnV1dnQHD5sJxccLmwnFx%2FnugcnKgcgSiXZ3Z7tmdXV2d2e7ZnUdxwubCcXHC5sJzcqBycqAAAAMAAAAABEwEsAAVAB8AIwAAATMyFhURMzIWBwEGIicBJjY7ARE0NgEhMhYdASE1NDYFFTM1AcLIFR31FAoO%2FoEOJw3%2BhQ0JFfod%2FoUD6BUd%2B7QdA2dkBLAdFf6iFg%2F%2BVg8PAaoPFgFeFR38fB0V%2BvoVHWQyMgAAAAMAAAAABEwErAAVAB8AIwAACQEWBisBFRQGKwEiJj0BIyImNwE%2BAQEhMhYdASE1NDYFFTM1AkcBeg4KFfQiFsgUGPoUCw4Bfw4n%2FfkD6BUd%2B7QdA2dkBJ7%2BTQ8g%2BhQeHRX6IQ8BrxAC%2FH8dFfr6FR1kMjIAAwAAAAAETARLABQAHgAiAAAJATYyHwEWFAcBBiInASY0PwE2MhcDITIWHQEhNTQ2BRUzNQGMAXEHFQeLBwf98wcVB%2F7cBweLCBUH1APoFR37tB0DZ2QC0wFxBweLCBUH%2FfMICAEjCBQIiwcH%2FdIdFfr6FR1kMjIABAAAAAAETASbAAkAGQAjACcAABM3NjIfAQcnJjQFNzYWFQMOASMFIiY%2FASc3ASEyFh0BITU0NgUVMzWHjg4qDk3UTQ4CFtIOFQIBHRX9qxUIDtCa1P49A%2BgVHfu0HQNnZAP%2Fjg4OTdRMDyqa0g4IFf2pFB4BFQ7Qm9T9Oh0V%2BvoVHWQyMgAAAAQAAAAABEwEsAAPABkAIwAnAAABBR4BFRMUBi8BByc3JyY2EwcGIi8BJjQ%2FAQEhMhYdASE1NDYFFTM1AV4CVxQeARUO0JvUm9IOCMNMDyoOjg4OTf76A%2BgVHfu0HQNnZASwAgEdFf2rFQgO0JrUmtIOFf1QTQ4Ojg4qDk3%2BWB0V%2BvoVHWQyMgACAAT%2F7ASwBK8ABQAIAAAlCQERIQkBFQEEsP4d%2Fsb%2BcQSs%2FTMCq2cBFP5xAacDHPz55gO5AAAAAAIAAABkBEwEsAAVABkAAAERFAYrAREhESMiJjURNDY7AREhETMHIzUzBEwdFZb9RJYVHR0V%2BgH0ZMhkZAPo%2FK4VHQGQ%2FnAdFQPoFB7%2B1AEsyMgAAAMAAABFBN0EsAAWABoALwAAAQcBJyYiDwEhESMiJjURNDY7AREhETMHIzUzARcWFAcBBiIvASY0PwE2Mh8BATYyBEwC%2FtVfCRkJlf7IlhUdHRX6AfRkyGRkAbBqBwf%2BXAgUCMoICGoHFQdPASkHFQPolf7VXwkJk%2F5wHRUD6BQe%2FtQBLMjI%2Fc5qBxUH%2FlsHB8sHFQdqCAhPASkHAAMAAAANBQcEsAAWABoAPgAAAREHJy4BBwEhESMiJjURNDY7AREhETMHIzUzARcWFA8BFxYUDwEGIi8BBwYiLwEmND8BJyY0PwE2Mh8BNzYyBExnhg8lEP72%2FreWFR0dFfoB9GTIZGQB9kYPD4ODDw9GDykPg4MPKQ9GDw%2BDgw8PRg8pD4ODDykD6P7zZ4YPAw7%2B9v5wHRUD6BQe%2FtQBLMjI%2FYxGDykPg4MPKQ9GDw%2BDgw8PRg8pD4ODDykPRg8Pg4MPAAADAAAAFQSXBLAAFQAZAC8AAAERISIGHQEhESMiJjURNDY7AREhETMHIzUzEzMyFh0BMzIWDwEGIi8BJjY7ATU0NgRM%2FqIVHf4MlhUdHRX6AfRkyGRklmQVHZYVCA7mDioO5g4IFZYdA%2Bj%2B1B0Vlv5wHRUD6BQe%2FtQBLMjI%2FagdFfoVDuYODuYOFfoVHQAAAAADAAAAAASXBLAAFQAZAC8AAAERJyYiBwEhESMiJjURNDY7AREhETMHIzUzExcWBisBFRQGKwEiJj0BIyImPwE2MgRMpQ4qDv75%2Fm6WFR0dFfoB9GTIZGTr5g4IFZYdFWQVHZYVCA7mDioD6P5wpQ8P%2Fvf%2BcB0VA%2BgUHv7UASzIyP2F5Q8V%2BhQeHhT6FQ%2FlDwADAAAAyASwBEwACQATABcAABMhMhYdASE1NDYBERQGIyEiJjURExUhNTIETBUd%2B1AdBJMdFfu0FR1kAZAETB0VlpYVHf7U%2FdoVHR0VAib%2B1MjIAAAGAAMAfQStBJcADwAZAB0ALQAxADsAAAEXFhQPAQYmPQEhNSE1NDYBIyImPQE0NjsBFyM1MwE3NhYdASEVIRUUBi8BJjQFIzU7AjIWHQEUBisBA6f4Dg74DhX%2BcAGQFf0vMhUdHRUyyGRk%2FoL3DhUBkP5wFQ73DwOBZGRkMxQdHRQzBI3mDioO5g4IFZbIlhUI%2FoUdFWQVHcjI%2FcvmDggVlsiWFQgO5g4qecgdFWQVHQAAAAACAGQAAASwBLAAFgBRAAABJTYWFREUBisBIiY1ES4ENRE0NiUyFh8BERQOAg8BERQGKwEiJjURLgQ1ETQ%2BAzMyFh8BETMRPAE%2BAjMyFh8BETMRND4DA14BFBklHRXIFR0EDiIaFiX%2B4RYZAgEVHR0LCh0VyBUdBA4iGhYBBwoTDRQZAgNkBQkVDxcZAQFkAQUJFQQxdBIUH%2FuuFR0dFQGNAQgbHzUeAWcfRJEZDA3%2BPhw%2FMSkLC%2F5BFR0dFQG%2FBA8uLkAcAcICBxENCxkMDf6iAV4CBxENCxkMDf6iAV4CBxENCwABAGQAAASwBEwAMwAAARUiDgMVERQWHwEVITUyNjURIREUFjMVITUyPgM1ETQmLwE1IRUiBhURIRE0JiM1BLAEDiIaFjIZGf5wSxn%2BDBlL%2FnAEDiIaFjIZGQGQSxkB9BlLBEw4AQUKFA78iBYZAQI4OA0lAYr%2BdiUNODgBBQoUDgN4FhkBAjg4DSX%2BdgGKJQ04AAAABgAAAAAETARMAAwAHAAgACQAKAA0AAABITIWHQEjBTUnITchBSEyFhURFAYjISImNRE0NhcVITUBBTUlBRUhNQUVFAYjIQchJyE3MwKjAXcVHWn%2B2cj%2BcGQBd%2F4lASwpOzsp%2FtQpOzspASwCvP5wAZD8GAEsArwdFf6JZP6JZAGQyGkD6B0VlmJiyGTIOyn%2BDCk7OykB9Ck7ZMjI%2FveFo4XGyMhm%2BBUdZGTIAAEAEAAQBJ8EnwAmAAATNzYWHwEWBg8BHgEXNz4BHwEeAQ8BBiIuBicuBTcRohEuDosOBhF3ZvyNdxEzE8ATBxGjAw0uMUxPZWZ4O0p3RjITCwED76IRBhPCFDERdo78ZXYRBA6IDi8RogEECBUgNUNjO0qZfHNVQBAAAAACAAAAAASwBEwAIwBBAAAAMh4EHwEVFAYvAS4BPQEmIAcVFAYPAQYmPQE%2BBRIyHgIfARUBHgEdARQGIyEiJj0BNDY3ATU0PgIB%2FLimdWQ%2FLAkJHRTKFB2N%2FsKNHRTKFB0DDTE7ZnTKcFImFgEBAW0OFR0V%2B7QVHRUOAW0CFiYETBUhKCgiCgrIFRgDIgMiFZIYGJIVIgMiAxgVyAQNJyQrIP7kExwcCgoy%2FtEPMhTUFR0dFdQUMg8BLzIEDSEZAAADAAAAAASwBLAADQAdACcAAAEHIScRMxUzNTMVMzUzASEyFhQGKwEXITcjIiY0NgMhMhYdASE1NDYETMj9qMjIyMjIyPyuArwVHR0VDIn8SokMFR0dswRMFR37UB0CvMjIAfTIyMjI%2FOAdKh1kZB0qHf7UHRUyMhUdAAAAAwBkAAAEsARMAAkAEwAdAAABIyIGFREhETQmASMiBhURIRE0JgEhETQ2OwEyFhUCvGQpOwEsOwFnZCk7ASw7%2FRv%2B1DspZCk7BEw7KfwYA%2BgpO%2F7UOyn9RAK8KTv84AGQKTs7KQAAAAAF%2F5wAAASwBEwADwATAB8AJQApAAATITIWFREUBiMhIiY1ETQ2FxEhEQUjFTMRITUzNSMRIQURByMRMwcRMxHIArx8sLB8%2FUR8sLAYA4T%2BDMjI%2FtTIyAEsAZBkyMhkZARMsHz%2BDHywsHwB9HywyP1EArzIZP7UZGQBLGT%2B1GQB9GT%2B1AEsAAAABf%2BcAAAEsARMAA8AEwAfACUAKQAAEyEyFhURFAYjISImNRE0NhcRIREBIzUjFSMRMxUzNTMFEQcjETMHETMRyAK8fLCwfP1EfLCwGAOE%2FgxkZGRkZGQBkGTIyGRkBEywfP4MfLCwfAH0fLDI%2FUQCvP2oyMgB9MjIZP7UZAH0ZP7UASwABP%2BcAAAEsARMAA8AEwAbACMAABMhMhYVERQGIyEiJjURNDYXESERBSMRMxUhESEFIxEzFSERIcgCvHywsHz9RHywsBgDhP4MyMj%2B1AEsAZDIyP7UASwETLB8%2Fgx8sLB8AfR8sMj9RAK8yP7UZAH0ZP7UZAH0AAAABP%2BcAAAEsARMAA8AEwAWABkAABMhMhYVERQGIyEiJjURNDYXESERAS0BDQERyAK8fLCwfP1EfLCwGAOE%2Fgz%2B1AEsAZD%2B1ARMsHz%2BDHywsHwB9HywyP1EArz%2BDJaWlpYBLAAAAAX%2FnAAABLAETAAPABMAFwAgACkAABMhMhYVERQGIyEiJjURNDYXESERAyERIQcjIgYVFBY7AQERMzI2NTQmI8gCvHywsHz9RHywsBgDhGT9RAK8ZIImOTYpgv4Mgik2OSYETLB8%2Fgx8sLB8AfR8sMj9RAK8%2FagB9GRWQUFUASz%2B1FRBQVYAAAAF%2F5wAAASwBEwADwATAB8AJQApAAATITIWFREUBiMhIiY1ETQ2FxEhEQUjFTMRITUzNSMRIQEjESM1MwMjNTPIArx8sLB8%2FUR8sLAYA4T%2BDMjI%2FtTIyAEsAZBkZMjIZGQETLB8%2Fgx8sLB8AfR8sMj9RAK8yGT%2B1GRkASz%2BDAGQZP4MZAAG%2F5wAAASwBEwADwATABkAHwAjACcAABMhMhYVERQGIyEiJjURNDYXESERBTMRIREzASMRIzUzBRUzNQEjNTPIArx8sLB8%2FUR8sLAYA4T9RMj%2B1GQCWGRkyP2oZAEsZGQETLB8%2Fgx8sLB8AfR8sMj9RAK8yP5wAfT%2BDAGQZMjIyP7UZAAF%2F5wAAASwBEwADwATABwAIgAmAAATITIWFREUBiMhIiY1ETQ2FxEhEQEHIzU3NSM1IQEjESM1MwMjNTPIArx8sLB8%2FUR8sLAYA4T%2BDMdkx8gBLAGQZGTIx2RkBEywfP4MfLCwfAH0fLDI%2FUQCvP5wyDLIlmT%2BDAGQZP4MZAAAAAMACQAJBKcEpwAPABsAJQAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgchFSEVISc1NyEB4PDbnl5entvw255eXp4BxeTCcXHC5MJxcWz%2B1AEs%2FtRkZAEsBKdentvw255eXp7b8NueTHHC5MJxccLkwtDIZGTIZAAAAAAEAAkACQSnBKcADwAbACcAKwAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgcVBxcVIycjFSMRIQcVMzUB4PDbnl5entvw255eXp4BxeTCcXHC5MJxcWwyZGRklmQBLMjIBKdentvw255eXp7b8NueTHHC5MJxccLkwtBkMmQyZGQBkGRkZAAAAv%2Fy%2F50EwgRBACAANgAAATIWFzYzMhYUBisBNTQmIyEiBh0BIyImNTQ2NyY1ND4BEzMyFhURMzIWDwEGIi8BJjY7ARE0NgH3brUsLC54qqp4gB0V%2FtQVHd5QcFZBAmKqepYKD4kVCg3fDSYN3w0KFYkPBEF3YQ6t8a36FR0dFfpzT0VrDhMSZKpi%2FbMPCv7tFxD0EBD0EBcBEwoPAAAAAAL%2F8v%2BcBMMEQQAcADMAAAEyFhc2MzIWFxQGBwEmIgcBIyImNTQ2NyY1ND4BExcWBisBERQGKwEiJjURIyImNzY3NjIB9m62LCsueaoBeFr%2Bhg0lDf6DCU9xVkECYqnm3w0KFYkPCpYKD4kVCg3HGBMZBEF3YQ%2BteGOkHAFoEBD%2Bk3NPRWsOExNkqWP9kuQQF%2F7tCg8PCgETFxDMGBMAAAABAGQAAARMBG0AGAAAJTUhATMBMwkBMwEzASEVIyIGHQEhNTQmIwK8AZD%2B8qr%2B8qr%2B1P7Uqv7yqv7yAZAyFR0BkB0VZGQBLAEsAU3%2Bs%2F7U%2FtRkHRUyMhUdAAAAAAEAeQAABDcEmwAvAAABMhYXHgEVFAYHFhUUBiMiJxUyFh0BITU0NjM1BiMiJjU0Ny4BNTQ2MzIXNCY1NDYCWF6TGll7OzIJaUo3LRUd%2FtQdFS03SmkELzlpSgUSAqMEm3FZBoNaPWcfHRpKaR77HRUyMhUd%2Bx5pShIUFVg1SmkCAhAFdKMAAAAGACcAFASJBJwAEQAqAEIASgBiAHsAAAEWEgIHDgEiJicmAhI3PgEyFgUiBw4BBwYWHwEWMzI3Njc2Nz4BLwEmJyYXIgcOAQcGFh8BFjMyNz4BNz4BLwEmJyYWJiIGFBYyNjciBw4BBw4BHwEWFxYzMjc%2BATc2Ji8BJhciBwYHBgcOAR8BFhcWMzI3PgE3NiYvASYD8m9PT29T2dzZU29PT29T2dzZ%2Fj0EBHmxIgQNDCQDBBcGG0dGYAsNAwkDCwccBAVQdRgEDA0iBAQWBhJROQwMAwkDCwf5Y4xjY4xjVhYGElE6CwwDCQMLBwgEBVB1GAQNDCIEjRcGG0dGYAsNAwkDCwcIBAR5sSIEDQwkAwPyb%2F7V%2FtVvU1dXU28BKwErb1NXVxwBIrF5DBYDCQEWYEZHGwMVDCMNBgSRAhh1UA0WAwkBFTpREgMVCyMMBwT6Y2OMY2MVFTpREQQVCyMMBwQCGHVQDRYDCQEkFmBGRxsDFQwjDQYEASKxeQwWAwkBAAAABQBkAAAD6ASwAAwADwAWABwAIgAAASERIzUhFSERNDYzIQEjNQMzByczNTMDISImNREFFRQGKwECvAEstP6s%2FoQPCgI%2FASzIZKLU1KJktP51Cg8DhA8KwwMg%2FoTIyALzCg%2F%2B1Mj84NTUyP4MDwoBi8jDCg8AAAAABQBkAAAD6ASwAAkADAATABoAIQAAASERCQERNDYzIQEjNRMjFSM1IzcDISImPQEpARUUBisBNQK8ASz%2Bov3aDwoCPwEsyD6iZKLUqv6dCg8BfAIIDwqbAyD9%2BAFe%2FdoERwoP%2FtTI%2FHzIyNT%2BZA8KNzcKD1AAAAAAAwAAAAAEsAP0AAgAGQAfAAABIxUzFyERIzcFMzIeAhUhFSEDETM0PgIBMwMhASEEiqJkZP7UotT9EsgbGiEOASz9qMhkDiEaAnPw8PzgASwB9AMgyGQBLNTUBBErJGT%2BogHCJCsRBP5w%2FnAB9AAAAAMAAAAABEwETAAZADIAOQAAATMyFh0BMzIWHQEUBiMhIiY9ATQ2OwE1NDYFNTIWFREUBiMhIic3ARE0NjMVFBYzITI2AQc1IzUzNQKKZBUdMhUdHRX%2B1BUdHRUyHQFzKTs7Kf2oARP2%2Fro7KVg%2BASw%2BWP201MjIBEwdFTIdFWQVHR0VZBUdMhUd%2BpY7KfzgKTsE9gFGAUQpO5Y%2BWFj95tSiZKIAAwBkAAAEvARMABkANgA9AAABMzIWHQEzMhYdARQGIyEiJj0BNDY7ATU0NgU1MhYVESMRMxQOAiMhIiY1ETQ2MxUUFjMhMjYBBzUjNTM1AcJkFR0yFR0dFf7UFR0dFTIdAXMpO8jIDiEaG%2F2oKTs7KVg%2BASw%2BWAGc1MjIBEwdFTIdFWQVHR0VZBUdMhUd%2BpY7Kf4M%2FtQkKxEEOykDICk7lj5YWP3m1KJkogAAAAP%2FogAABRYE1AALABsAHwAACQEWBiMhIiY3ATYyEyMiBhcTHgE7ATI2NxM2JgMVMzUCkgJ9FyAs%2BwQsIBcCfRZARNAUGAQ6BCMUNhQjBDoEGODIBK37sCY3NyYEUCf%2BTB0U%2FtIUHR0UAS4UHf4MZGQAAAAACQAAAAAETARMAA8AHwAvAD8ATwBfAG8AfwCPAAABMzIWHQEUBisBIiY9ATQ2EzMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYBMzIWHQEUBisBIiY9ATQ2ITMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYBMzIWHQEUBisBIiY9ATQ2ITMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYBqfoKDw8K%2BgoPDwr6Cg8PCvoKDw8BmvoKDw8K%2BgoPD%2Fzq%2BgoPDwr6Cg8PAZr6Cg8PCvoKDw8BmvoKDw8K%2BgoPD%2Fzq%2BgoPDwr6Cg8PAZr6Cg8PCvoKDw8BmvoKDw8K%2BgoPDwRMDwqWCg8PCpYKD%2F7UDwqWCg8PCpYKDw8KlgoPDwqWCg%2F%2B1A8KlgoPDwqWCg8PCpYKDw8KlgoPDwqWCg8PCpYKD%2F7UDwqWCg8PCpYKDw8KlgoPDwqWCg8PCpYKDw8KlgoPAAAAAwAAAAAEsAUUABkAKQAzAAABMxUjFSEyFg8BBgchJi8BJjYzITUjNTM1MwEhMhYUBisBFyE3IyImNDYDITIWHQEhNTQ2ArxkZAFePjEcQiko%2FPwoKUIcMT4BXmRkyP4%2BArwVHR0VDIn8SooNFR0dswRMFR37UB0EsMhkTzeEUzMzU4Q3T2TIZPx8HSodZGQdKh3%2B1B0VMjIVHQAABAAAAAAEsAUUAAUAGQArADUAAAAyFhUjNAchFhUUByEyFg8BIScmNjMhJjU0AyEyFhQGKwEVBSElNSMiJjQ2AyEyFh0BITU0NgIwUDnCPAE6EgMBSCkHIq%2F9WrIiCikBSAOvArwVHR0VlgET%2FEoBE5YVHR2zBEwVHftQHQUUOykpjSUmCBEhFpGRFiERCCb%2BlR0qHcjIyMgdKh39qB0VMjIVHQAEAAAAAASwBJ0ABwAUACQALgAAADIWFAYiJjQTMzIWFRQXITY1NDYzASEyFhQGKwEXITcjIiY0NgMhMhYdASE1NDYCDZZqapZqty4iKyf%2BvCcrI%2F7NArwVHR0VDYr8SokMFR0dswRMFR37UB0EnWqWamqW%2Fus5Okxra0w6Of5yHSodZGQdKh3%2B1B0VMjIVHQAEAAAAAASwBRQADwAcACwANgAAATIeARUUBiImNTQ3FzcnNhMzMhYVFBchNjU0NjMBITIWFAYrARchNyMiJjQ2AyEyFh0BITU0NgJYL1szb5xvIpBvoyIfLiIrJ%2F68Jysj%2Fs0CvBUdHRUNivxKiQwVHR2zBEwVHftQHQUUa4s2Tm9vTj5Rj2%2BjGv4KOTpMa2tMOjn%2Bch0qHWRkHSod%2FtQdFTIyFR0AAAADAAAAAASwBRIAEgAiACwAAAEFFSEUHgMXIS4BNTQ%2BAjcBITIWFAYrARchNyMiJjQ2AyEyFh0BITU0NgJYASz%2B1CU%2FP00T%2Fe48PUJtj0r%2BogK8FR0dFQ2K%2FEqJDBUdHbMETBUd%2B1AdBLChizlmUT9IGVO9VFShdksE%2FH4dKh1kZB0qHf7UHRUyMhUdAAIAyAAAA%2BgFFAAPACkAAAAyFh0BHgEdASE1NDY3NTQDITIWFyMVMxUjFTMVIxUzFAYjISImNRE0NgIvUjsuNv5wNi5kAZA2XBqsyMjIyMh1U%2F5wU3V1BRQ7KU4aXDYyMjZcGk4p%2Fkc2LmRkZGRkU3V1UwGQU3UAAAMAZP%2F%2FBEwETAAPAC8AMwAAEyEyFhURFAYjISImNRE0NgMhMhYdARQGIyEXFhQGIi8BIQcGIiY0PwEhIiY9ATQ2BQchJ5YDhBUdHRX8fBUdHQQDtgoPDwr%2B5eANGiUNWP30Vw0mGg3g%2Ft8KDw8BqmQBRGQETB0V%2FgwVHR0VAfQVHf1EDwoyCg%2FgDSUbDVhYDRslDeAPCjIKD2RkZAAAAAAEAAAAAASwBEwAGQAjAC0ANwAAEyEyFh0BIzQmKwEiBhUjNCYrASIGFSM1NDYDITIWFREhETQ2ExUUBisBIiY9ASEVFAYrASImPQHIAyBTdWQ7KfopO2Q7KfopO2R1EQPoKTv7UDvxHRVkFR0D6B0VZBUdBEx1U8gpOzspKTs7KchTdf4MOyn%2B1AEsKTv%2BDDIVHR0VMjIVHR0VMgADAAEAAASpBKwADQARABsAAAkBFhQPASEBJjQ3ATYyCQMDITIWHQEhNTQ2AeACqh8fg%2F4f%2FfsgIAEnH1n%2BrAFWAS%2F%2Bq6IDIBUd%2FHwdBI39VR9ZH4MCBh9ZHwEoH%2F5u%2FqoBMAFV%2FBsdFTIyFR0AAAAAAgCPAAAEIQSwABcALwAAAQMuASMhIgYHAwYWMyEVFBYyNj0BMzI2AyE1NDY7ATU0NjsBETMRMzIWHQEzMhYVBCG9CCcV%2FnAVJwi9CBMVAnEdKh19FROo%2Fa0dFTIdFTDILxUdMhUdAocB%2BhMcHBP%2BBhMclhUdHRWWHP2MMhUdMhUdASz%2B1B0VMh0VAAAEAAAAAASwBLAADQAQAB8AIgAAASERFAYjIREBNTQ2MyEBIzUBIREUBiMhIiY1ETQ2MyEBIzUDhAEsDwr%2Bif7UDwoBdwEsyP2oASwPCv12Cg8PCgF3ASzIAyD9wQoPAk8BLFQKD%2F7UyP4M%2FcEKDw8KA7YKD%2F7UyAAC%2F5wAZAUUBEcARgBWAAABMzIeAhcWFxY2NzYnJjc%2BARYXFgcOASsBDgEPAQ4BKwEiJj8BBisBIicHDgErASImPwEmLwEuAT0BNDY7ATY3JyY2OwE2BSMiBh0BFBY7ATI2PQE0JgHkw0uOakkMEhEfQwoKGRMKBQ8XDCkCA1Y9Pgc4HCcDIhVkFRgDDDEqwxgpCwMiFWQVGAMaVCyfExwdFXwLLW8QBxXLdAFF%2BgoPDwr6Cg8PBEdBa4pJDgYKISAiJRsQCAYIDCw9P1c3fCbqFB0dFEYOCEAUHR0UnUplNQcmFTIVHVdPXw4TZV8PCjIKDw8KMgoPAAb%2FnP%2FmBRQEfgAJACQANAA8AFIAYgAAASU2Fh8BFgYPASUzMhYfASEyFh0BFAYHBQYmJyYjISImPQE0NhcjIgYdARQ7ATI2NTQmJyYEIgYUFjI2NAE3PgEeARceAT8BFxYGDwEGJi8BJjYlBwYfAR4BPwE2Jy4BJy4BAoEBpxMuDiAOAxCL%2FCtqQ0geZgM3FR0cE%2F0fFyIJKjr%2B1D5YWLlQExIqhhALIAsSAYBALS1ALf4PmBIgHhMQHC0aPzANITNQL3wpgigJASlmHyElDR0RPRMFAhQHCxADhPcICxAmDyoNeMgiNtQdFTIVJgeEBBQPQ1g%2ByD5YrBwVODMQEAtEERzJLUAtLUD%2B24ITChESEyMgAwWzPUkrRSgJL5cvfRxYGyYrDwkLNRAhFEgJDAQAAAAAAwBkAAAEOQSwAFEAYABvAAABMzIWHQEeARcWDgIPATIeBRUUDgUjFRQGKwEiJj0BIxUUBisBIiY9ASMiJj0BNDY7AREjIiY9ATQ2OwE1NDY7ATIWHQEzNTQ2AxUhMj4CNTc0LgMjARUhMj4CNTc0LgMjAnGWCg9PaAEBIC4uEBEGEjQwOiodFyI2LUAjGg8KlgoPZA8KlgoPrwoPDwpLSwoPDwqvDwqWCg9kD9cBBxwpEwsBAQsTKRz%2B%2BQFrHCkTCwEBCxMpHASwDwptIW1KLk0tHwYGAw8UKDJOLTtdPCoVCwJLCg8PCktLCg8PCksPCpYKDwJYDwqWCg9LCg8PCktLCg%2F%2B1MgVHR0LCgQOIhoW%2FnDIFR0dCwoEDiIaFgAAAwAEAAIEsASuABcAKQAsAAATITIWFREUBg8BDgEjISImJy4CNRE0NgQiDgQPARchNy4FAyMT1AMMVnokEhIdgVL9xFKCHAgYKHoCIIx9VkcrHQYGnAIwnAIIIClJVSGdwwSuelb%2BYDO3QkJXd3ZYHFrFMwGgVnqZFyYtLSUMDPPzBQ8sKDEj%2FsIBBQACAMgAAAOEBRQADwAZAAABMzIWFREUBiMhIiY1ETQ2ARUUBisBIiY9AQHblmesVCn%2BPilUrAFINhWWFTYFFKxn%2FgwpVFQpAfRnrPwY4RU2NhXhAAACAMgAAAOEBRQADwAZAAABMxQWMxEUBiMhIiY1ETQ2ARUUBisBIiY9AQHbYLOWVCn%2BPilUrAFINhWWFTYFFJaz%2FkIpVFQpAfRnrPwY4RU2NhXhAAACAAAAFAUOBBoAFAAaAAAJASUHFRcVJwc1NzU0Jj4CPwEnCQEFJTUFJQUO%2FYL%2Bhk5klpZkAQEBBQQvkwKCAVz%2Bov6iAV4BXgL%2F%2FuWqPOCWx5SVyJb6BA0GCgYDKEEBG%2F1ipqaTpaUAAAMAZAH0BLADIAAHAA8AFwAAEjIWFAYiJjQkMhYUBiImNCQyFhQGIiY0vHxYWHxYAeh8WFh8WAHofFhYfFgDIFh8WFh8WFh8WFh8WFh8WFh8AAAAAAMBkAAAArwETAAHAA8AFwAAADIWFAYiJjQSMhYUBiImNBIyFhQGIiY0Aeh8WFh8WFh8WFh8WFh8WFh8WARMWHxYWHz%2ByFh8WFh8%2FshYfFhYfAAAAAMAZABkBEwETAAPAB8ALwAAEyEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2fQO2Cg8PCvxKCg8PCgO2Cg8PCvxKCg8PCgO2Cg8PCvxKCg8PBEwPCpYKDw8KlgoP%2FnAPCpYKDw8KlgoP%2FnAPCpYKDw8KlgoPAAAABAAAAAAEsASwAA8AHwAvADMAAAEhMhYVERQGIyEiJjURNDYFISIGFREUFjMhMjY1ETQmBSEyFhURFAYjISImNRE0NhcVITUBXgH0ory7o%2F4Mpbm5Asv9qCk7OykCWCk7O%2F2xAfQVHR0V%2FgwVHR1HAZAEsLuj%2FgylubmlAfSlucg7Kf2oKTs7KQJYKTtkHRX%2B1BUdHRUBLBUdZMjIAAAAAAEAZABkBLAETAA7AAATITIWFAYrARUzMhYUBisBFTMyFhQGKwEVMzIWFAYjISImNDY7ATUjIiY0NjsBNSMiJjQ2OwE1IyImNDaWA%2BgVHR0VMjIVHR0VMjIVHR0VMjIVHR0V%2FBgVHR0VMjIVHR0VMjIVHR0VMjIVHR0ETB0qHcgdKh3IHSodyB0qHR0qHcgdKh3IHSodyB0qHQAAAAYBLAAFA%2BgEowAHAA0AEwAZAB8AKgAAAR4BBgcuATYBMhYVIiYlFAYjNDYBMhYVIiYlFAYjNDYDFRQGIiY9ARYzMgKKVz8%2FV1c%2FP%2F75fLB8sAK8sHyw%2FcB8sHywArywfLCwHSodKAMRBKNDsrJCQrKy%2FsCwfLB8fLB8sP7UsHywfHywfLD%2B05AVHR0VjgQAAAH%2FtQDIBJQDgQBCAAABNzYXAR4BBw4BKwEyFRQOBCsBIhE0NyYiBxYVECsBIi4DNTQzIyImJyY2NwE2HwEeAQ4BLwEHIScHBi4BNgLpRRkUASoLCAYFGg8IAQQNGyc%2FKZK4ChRUFQu4jjBJJxkHAgcPGQYGCAsBKhQaTBQVCiMUM7YDe7YsFCMKFgNuEwYS%2FtkLHw8OEw0dNkY4MhwBIBgXBAQYF%2F7gKjxTQyMNEw4PHwoBKBIHEwUjKBYGDMHBDAUWKCMAAAAAAgAAAAAEsASwACUAQwAAASM0LgUrAREUFh8BFSE1Mj4DNREjIg4FFSMRIQEjNC4DKwERFBYXMxUjNTI1ESMiDgMVIzUhBLAyCAsZEyYYGcgyGRn%2BcAQOIhoWyBkYJhMZCwgyA%2Bj9RBkIChgQEWQZDQzIMmQREBgKCBkB9AOEFSAVDggDAfyuFhkBAmRkAQUJFQ4DUgEDCA4VIBUBLP0SDxMKBQH%2BVwsNATIyGQGpAQUKEw%2BWAAAAAAMAAAAABEwErgAdACAAMAAAATUiJy4BLwEBIwEGBw4BDwEVITUiJj8BIRcWBiMVARsBARUUBiMhIiY9ATQ2MyEyFgPoGR4OFgUE%2Ft9F%2FtQSFQkfCwsBETE7EkUBJT0NISf%2B7IZ5AbEdFfwYFR0dFQPoFR0BLDIgDiIKCwLr%2FQ4jFQkTBQUyMisusKYiQTIBhwFW%2Fqr942QVHR0VZBUdHQADAAAAAASwBLAADwBHAEoAABMhMhYVERQGIyEiJjURNDYFIyIHAQYHBgcGHQEUFjMhMjY9ATQmIyInJj8BIRcWBwYjIgYdARQWMyEyNj0BNCYnIicmJyMBJhMjEzIETBUdHRX7tBUdHQJGRg0F%2FtUREhImDAsJAREIDAwINxAKCj8BCjkLEQwYCAwMCAE5CAwLCBEZGQ8B%2FuAFDsVnBLAdFfu0FR0dFQRMFR1SDP0PIBMSEAUNMggMDAgyCAwXDhmjmR8YEQwIMggMDAgyBwwBGRskAuwM%2FgUBCAAABAAAAAAEsASwAAMAEwAjACcAAAEhNSEFITIWFREUBiMhIiY1ETQ2KQEyFhURFAYjISImNRE0NhcRIREEsPtQBLD7ggGQFR0dFf5wFR0dAm0BkBUdHRX%2BcBUdHUcBLARMZMgdFfx8FR0dFQOEFR0dFf5wFR0dFQGQFR1k%2FtQBLAAEAAAAAASwBLAADwAfACMAJwAAEyEyFhURFAYjISImNRE0NgEhMhYVERQGIyEiJjURNDYXESEREyE1ITIBkBUdHRX%2BcBUdHQJtAZAVHR0V%2FnAVHR1HASzI%2B1AEsASwHRX8fBUdHRUDhBUd%2FgwdFf5wFR0dFQGQFR1k%2FtQBLP2oZAAAAAACAAAAZASwA%2BgAJwArAAATITIWFREzNTQ2MyEyFh0BMxUjFRQGIyEiJj0BIxEUBiMhIiY1ETQ2AREhETIBkBUdZB0VAZAVHWRkHRX%2BcBUdZB0V%2FnAVHR0CnwEsA%2BgdFf6ilhUdHRWWZJYVHR0Vlv6iFR0dFQMgFR3%2B1P7UASwAAAQAAAAABLAEsAADABMAFwAnAAAzIxEzFyEyFhURFAYjISImNRE0NhcRIREBITIWFREUBiMhIiY1ETQ2ZGRklgGQFR0dFf5wFR0dRwEs%2FqIDhBUdHRX8fBUdHQSwZB0V%2FnAVHR0VAZAVHWT%2B1AEs%2FgwdFf5wFR0dFQGQFR0AAAAAAgBkAAAETASwACcAKwAAATMyFhURFAYrARUhMhYVERQGIyEiJjURNDYzITUjIiY1ETQ2OwE1MwcRIRECWJYVHR0VlgHCFR0dFfx8FR0dFQFelhUdHRWWZMgBLARMHRX%2BcBUdZB0V%2FnAVHR0VAZAVHWQdFQGQFR1kyP7UASwAAAAEAAAAAASwBLAAAwATABcAJwAAISMRMwUhMhYVERQGIyEiJjURNDYXESERASEyFhURFAYjISImNRE0NgSwZGT9dgGQFR0dFf5wFR0dRwEs%2FK4DhBUdHRX8fBUdHQSwZB0V%2FnAVHR0VAZAVHWT%2B1AEs%2FgwdFf5wFR0dFQGQFR0AAAEBLAAwA28EgAAPAAAJAQYjIiY1ETQ2MzIXARYUA2H%2BEhcSDhAQDhIXAe4OAjX%2BEhcbGQPoGRsX%2FhIOKgAAAAABAUEAMgOEBH4ACwAACQE2FhURFAYnASY0AU8B7h0qKh3%2BEg4CewHuHREp%2FBgpER0B7g4qAAAAAAEAMgFBBH4DhAALAAATITIWBwEGIicBJjZkA%2BgpER3%2BEg4qDv4SHREDhCod%2FhIODgHuHSoAAAAAAQAyASwEfgNvAAsAAAkBFgYjISImNwE2MgJ7Ae4dESn8GCkRHQHuDioDYf4SHSoqHQHuDgAAAAACAAgAAASwBCgABgAKAAABFQE1LQE1ASE1IQK8%2FUwBnf5jBKj84AMgAuW2%2Fr3dwcHd%2B9jIAAAAAAIAAABkBLAEsAALADEAAAEjFTMVIREzNSM1IQEzND4FOwERFAYPARUhNSIuAzURMzIeBRUzESEEsMjI%2FtTIyAEs%2B1AyCAsZEyYYGWQyGRkBkAQOIhoWZBkYJhMZCwgy%2FOADhGRkASxkZP4MFSAVDggDAf3aFhkBAmRkAQUJFQ4CJgEDCA4VIBUBLAAAAgAAAAAETAPoACUAMQAAASM0LgUrAREUFh8BFSE1Mj4DNREjIg4FFSMRIQEjFTMVIREzNSM1IQMgMggLGRMmGBlkMhkZ%2FnAEDiIaFmQZGCYTGQsIMgMgASzIyP7UyMgBLAK8FSAVDggDAf3aFhkCAWRkAQUJFQ4CJgEDCA4VIBUBLPzgZGQBLGRkAAABAMgAZgNyBEoAEgAAATMyFgcJARYGKwEiJwEmNDcBNgK9oBAKDP4wAdAMChCgDQr%2BKQcHAdcKBEoWDP4w%2FjAMFgkB1wgUCAHXCQAAAQE%2BAGYD6ARKABIAAAEzMhcBFhQHAQYrASImNwkBJjYBU6ANCgHXBwf%2BKQoNoBAKDAHQ%2FjAMCgRKCf4pCBQI%2FikJFgwB0AHQDBYAAAEAZgDIBEoDcgASAAAAFh0BFAcBBiInASY9ATQ2FwkBBDQWCf4pCBQI%2FikJFgwB0AHQA3cKEKANCv4pBwcB1woNoBAKDP4wAdAAAAABAGYBPgRKA%2BgAEgAACQEWHQEUBicJAQYmPQE0NwE2MgJqAdcJFgz%2BMP4wDBYJAdcIFAPh%2FikKDaAQCgwB0P4wDAoQoA0KAdcHAAAAAgDZ%2F%2FkEPQSwAAUAOgAAARQGIzQ2BTMyFh8BNjc%2BAh4EBgcOBgcGIiYjIgYiJy4DLwEuAT4EHgEXJyY2A%2BiwfLD%2BVmQVJgdPBQsiKFAzRyorDwURAQQSFyozTSwNOkkLDkc3EDlfNyYHBw8GDyUqPjdGMR%2BTDA0EsHywfLDIHBPCAQIGBwcFDx81S21DBxlLR1xKQhEFBQcHGWt0bCQjP2hJNyATBwMGBcASGAAAAAACAMgAFQOEBLAAFgAaAAATITIWFREUBisBEQcGJjURIyImNRE0NhcVITX6AlgVHR0Vlv8TGpYVHR2rASwEsB0V%2FnAVHf4MsgkQFQKKHRUBkBUdZGRkAAAAAgDIABkETASwAA4AEgAAEyEyFhURBRElIREjETQ2ARU3NfoC7ic9%2FUQCWP1EZB8BDWQEsFEs%2FFt1A7Z9%2FBgEARc0%2FV1kFGQAAQAAAAECTW%2FDBF9fDzz1AB8EsAAAAADQdnOXAAAAANB2c5f%2FUf%2BcBdwFFAAAAAgAAgAAAAAAAAABAAAFFP%2BFAAAFFP9R%2FtQF3AABAAAAAAAAAAAAAAAAAAAAowG4ACgAAAAAAZAAAASwAAAEsABkBLAAAASwAAAEsABwAooAAAUUAAACigAABRQAAAGxAAABRQAAANgAAADYAAAAogAAAQQAAABIAAABBAAAAUUAAASwAGQEsAB7BLAAyASwAMgB9AAABLD%2F8gSwAAAEsAAABLD%2F8ASwAAAEsAAOBLAACQSwAGQEsP%2FTBLD%2F0wSwAAAEsAAABLAAAASwAAAEsAAABLAAJgSwAG4EsAAXBLAAFwSwABcEsABkBLAAGgSwAGQEsAAMBLAAZASwABcEsP%2BcBLAAZASwABcEsAAXBLAAAASwABcEsAAXBLAAFwSwAGQEsAAABLAAZASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAZASwAMgEsAAABLAAAASwADUEsABkBLAAyASw%2F7UEsAAhBLAAAASwAAAEsAAABLAAAASwAAAEsP%2BcBLAAAASwAAAEsAAABLAA2wSwABcEsAB1BLAAAASwAAAEsAAABLAACgSwAMgEsAAABLAAnQSwAMgEsADIBLAAyASwAAAEsP%2F%2BBLABLASwAGQEsACIBLABOwSwABcEsAAXBLAAFwSwABcEsAAXBLAAFwSwAAAEsAAXBLAAFwSwABcEsAAXBLAAAASwALcEsAC3BLAAAASwAAAEsABJBLAAFwSwAAAEsAAABLAAXQSw%2F9wEsP%2FcBLD%2FnwSwAGQEsAAABLAAAASwAAAEsABkBLD%2F%2FwSwAAAEsP9RBLAABgSwAAAEsAAABLABRQSwAAEEsAAABLD%2FnASwAEoEsAAUBLAAAASwAAAEsAAABLD%2FnASwAGEEsP%2F9BLAAFgSwABYEsAAWBLAAFgSwABgEsAAABMQAAASwAGQAAAAAAAD%2F2ABkADkAyAAAAScAZAAZABkAGQAZABkAGQAZAAAAAAAAAAAAAADZAAAAAAAOAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAMAZABkAAAAEAAAAAAAZP%2Bc%2F5z%2FnP%2Bc%2F5z%2FnP%2Bc%2F5wACQAJ%2F%2FL%2F8gBkAHkAJwBkAGQAAAAAAGT%2FogAAAAAAAAAAAAAAAADIAGQAAAABAI8AAP%2Bc%2F5wAZAAEAMgAyAAAAGQBkABkAAAAZAEs%2F7UAAAAAAAAAAAAAAAAAAABkAAABLAFBADIAMgAIAAAAAADIAT4AZgBmANkAyADIAAAAKgAqACoAKgCyAOgA6AFOAU4BTgFOAU4BTgFOAU4BTgFOAU4BTgFOAU4BpAIGAiICfgKGAqwC5ANGA24DjAPEBAgEMgRiBKIE3AVcBboGcgb0ByAHYgfKCB4IYgi%2BCTYJhAm2Cd4KKApMCpQK4gswC4oLygwIDFgNKg1eDbAODg5oDrQPKA%2BmD%2BYQEhBUEJAQqhEqEXYRthIKEjgSfBLAExoTdBPQFCoU1BU8FagVzBYEFjYWYBawFv4XUhemGAIYLhhqGJYYsBjgGP4ZKBloGZQZxBnaGe4aNhpoGrga9hteG7QcMhyUHOIdHB1EHWwdlB28HeYeLh52HsAfYh%2FSIEYgviEyIXYhuCJAIpYiuCMOIyIjOCN6I8Ij4CQCJDAkXiSWJOIlNCVgJbwmFCZ%2BJuYnUCe8J%2FgoNChwKKwpoCnMKiYqSiqEKworeiwILGgsuizsLRwtiC30LiguZi6iLtgvDi9GL34vsi%2F4MD4whDDSMRIxYDGuMegyJDJeMpoy3jMiMz4zaDO2NBg0YDSoNNI1LDWeNeg2PjZ8Ntw3GjdON5I31DgQOEI4hjjIOQo5SjmIOcw6HDpsOpo63jugO9w8GDxQPKI8%2BD0yPew%2BOj6MPtQ%2FKD9uP6o%2F%2BkBIQIBAxkECQX5CGEKoQu5DGENCQ3ZDoEPKRBBEYESuRPZFWkW2RgZGdEa0RvZHNkd2R7ZH9kgWSDJITkhqSIZIzEkSSThJXkmESapKAkouSlIAAQAAARcApwARAAAAAAACAAAAAQABAAAAQAAuAAAAAAAAABAAxgABAAAAAAATABIAAAADAAEECQAAAGoAEgADAAEECQABACgAfAADAAEECQACAA4ApAADAAEECQADAEwAsgADAAEECQAEADgA%2FgADAAEECQAFAHgBNgADAAEECQAGADYBrgADAAEECQAIABYB5AADAAEECQAJABYB%2BgADAAEECQALACQCEAADAAEECQAMACQCNAADAAEECQATACQCWAADAAEECQDIABYCfAADAAEECQDJADACkgADAAEECdkDABoCwnd3dy5nbHlwaGljb25zLmNvbQBDAG8AcAB5AHIAaQBnAGgAdAAgAKkAIAAyADAAMQA0ACAAYgB5ACAASgBhAG4AIABLAG8AdgBhAHIAaQBrAC4AIABBAGwAbAAgAHIAaQBnAGgAdABzACAAcgBlAHMAZQByAHYAZQBkAC4ARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAFIAZQBnAHUAbABhAHIAMQAuADAAMAA5ADsAVQBLAFcATgA7AEcATABZAFAASABJAEMATwBOAFMASABhAGwAZgBsAGkAbgBnAHMALQBSAGUAZwB1AGwAYQByAEcATABZAFAASABJAEMATwBOAFMAIABIAGEAbABmAGwAaQBuAGcAcwAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwADAAOQA7AFAAUwAgADAAMAAxAC4AMAAwADkAOwBoAG8AdABjAG8AbgB2ACAAMQAuADAALgA3ADAAOwBtAGEAawBlAG8AdABmAC4AbABpAGIAMgAuADUALgA1ADgAMwAyADkARwBMAFkAUABIAEkAQwBPAE4AUwBIAGEAbABmAGwAaQBuAGcAcwAtAFIAZQBnAHUAbABhAHIASgBhAG4AIABLAG8AdgBhAHIAaQBrAEoAYQBuACAASwBvAHYAYQByAGkAawB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQBXAGUAYgBmAG8AbgB0ACAAMQAuADAAVwBlAGQAIABPAGMAdAAgADIAOQAgADAANgA6ADMANgA6ADAANwAgADIAMAAxADQARgBvAG4AdAAgAFMAcQB1AGkAcgByAGUAbAAAAAIAAAAAAAD%2FtQAyAAAAAAAAAAAAAAAAAAAAAAAAAAABFwAAAQIBAwADAA0ADgEEAJYBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMA7wEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE%2BAT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG%2FAcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB%2BgH7AfwB%2FQH%2BAf8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgZnbHlwaDEGZ2x5cGgyB3VuaTAwQTAHdW5pMjAwMAd1bmkyMDAxB3VuaTIwMDIHdW5pMjAwMwd1bmkyMDA0B3VuaTIwMDUHdW5pMjAwNgd1bmkyMDA3B3VuaTIwMDgHdW5pMjAwOQd1bmkyMDBBB3VuaTIwMkYHdW5pMjA1RgRFdXJvB3VuaTIwQkQHdW5pMjMxQgd1bmkyNUZDB3VuaTI2MDEHdW5pMjZGQQd1bmkyNzA5B3VuaTI3MEYHdW5pRTAwMQd1bmlFMDAyB3VuaUUwMDMHdW5pRTAwNQd1bmlFMDA2B3VuaUUwMDcHdW5pRTAwOAd1bmlFMDA5B3VuaUUwMTAHdW5pRTAxMQd1bmlFMDEyB3VuaUUwMTMHdW5pRTAxNAd1bmlFMDE1B3VuaUUwMTYHdW5pRTAxNwd1bmlFMDE4B3VuaUUwMTkHdW5pRTAyMAd1bmlFMDIxB3VuaUUwMjIHdW5pRTAyMwd1bmlFMDI0B3VuaUUwMjUHdW5pRTAyNgd1bmlFMDI3B3VuaUUwMjgHdW5pRTAyOQd1bmlFMDMwB3VuaUUwMzEHdW5pRTAzMgd1bmlFMDMzB3VuaUUwMzQHdW5pRTAzNQd1bmlFMDM2B3VuaUUwMzcHdW5pRTAzOAd1bmlFMDM5B3VuaUUwNDAHdW5pRTA0MQd1bmlFMDQyB3VuaUUwNDMHdW5pRTA0NAd1bmlFMDQ1B3VuaUUwNDYHdW5pRTA0Nwd1bmlFMDQ4B3VuaUUwNDkHdW5pRTA1MAd1bmlFMDUxB3VuaUUwNTIHdW5pRTA1Mwd1bmlFMDU0B3VuaUUwNTUHdW5pRTA1Ngd1bmlFMDU3B3VuaUUwNTgHdW5pRTA1OQd1bmlFMDYwB3VuaUUwNjIHdW5pRTA2Mwd1bmlFMDY0B3VuaUUwNjUHdW5pRTA2Ngd1bmlFMDY3B3VuaUUwNjgHdW5pRTA2OQd1bmlFMDcwB3VuaUUwNzEHdW5pRTA3Mgd1bmlFMDczB3VuaUUwNzQHdW5pRTA3NQd1bmlFMDc2B3VuaUUwNzcHdW5pRTA3OAd1bmlFMDc5B3VuaUUwODAHdW5pRTA4MQd1bmlFMDgyB3VuaUUwODMHdW5pRTA4NAd1bmlFMDg1B3VuaUUwODYHdW5pRTA4Nwd1bmlFMDg4B3VuaUUwODkHdW5pRTA5MAd1bmlFMDkxB3VuaUUwOTIHdW5pRTA5Mwd1bmlFMDk0B3VuaUUwOTUHdW5pRTA5Ngd1bmlFMDk3B3VuaUUxMDEHdW5pRTEwMgd1bmlFMTAzB3VuaUUxMDQHdW5pRTEwNQd1bmlFMTA2B3VuaUUxMDcHdW5pRTEwOAd1bmlFMTA5B3VuaUUxMTAHdW5pRTExMQd1bmlFMTEyB3VuaUUxMTMHdW5pRTExNAd1bmlFMTE1B3VuaUUxMTYHdW5pRTExNwd1bmlFMTE4B3VuaUUxMTkHdW5pRTEyMAd1bmlFMTIxB3VuaUUxMjIHdW5pRTEyMwd1bmlFMTI0B3VuaUUxMjUHdW5pRTEyNgd1bmlFMTI3B3VuaUUxMjgHdW5pRTEyOQd1bmlFMTMwB3VuaUUxMzEHdW5pRTEzMgd1bmlFMTMzB3VuaUUxMzQHdW5pRTEzNQd1bmlFMTM2B3VuaUUxMzcHdW5pRTEzOAd1bmlFMTM5B3VuaUUxNDAHdW5pRTE0MQd1bmlFMTQyB3VuaUUxNDMHdW5pRTE0NAd1bmlFMTQ1B3VuaUUxNDYHdW5pRTE0OAd1bmlFMTQ5B3VuaUUxNTAHdW5pRTE1MQd1bmlFMTUyB3VuaUUxNTMHdW5pRTE1NAd1bmlFMTU1B3VuaUUxNTYHdW5pRTE1Nwd1bmlFMTU4B3VuaUUxNTkHdW5pRTE2MAd1bmlFMTYxB3VuaUUxNjIHdW5pRTE2Mwd1bmlFMTY0B3VuaUUxNjUHdW5pRTE2Ngd1bmlFMTY3B3VuaUUxNjgHdW5pRTE2OQd1bmlFMTcwB3VuaUUxNzEHdW5pRTE3Mgd1bmlFMTczB3VuaUUxNzQHdW5pRTE3NQd1bmlFMTc2B3VuaUUxNzcHdW5pRTE3OAd1bmlFMTc5B3VuaUUxODAHdW5pRTE4MQd1bmlFMTgyB3VuaUUxODMHdW5pRTE4NAd1bmlFMTg1B3VuaUUxODYHdW5pRTE4Nwd1bmlFMTg4B3VuaUUxODkHdW5pRTE5MAd1bmlFMTkxB3VuaUUxOTIHdW5pRTE5Mwd1bmlFMTk0B3VuaUUxOTUHdW5pRTE5Nwd1bmlFMTk4B3VuaUUxOTkHdW5pRTIwMAd1bmlFMjAxB3VuaUUyMDIHdW5pRTIwMwd1bmlFMjA0B3VuaUUyMDUHdW5pRTIwNgd1bmlFMjA5B3VuaUUyMTAHdW5pRTIxMQd1bmlFMjEyB3VuaUUyMTMHdW5pRTIxNAd1bmlFMjE1B3VuaUUyMTYHdW5pRTIxOAd1bmlFMjE5B3VuaUUyMjEHdW5pRTIyMwd1bmlFMjI0B3VuaUUyMjUHdW5pRTIyNgd1bmlFMjI3B3VuaUUyMzAHdW5pRTIzMQd1bmlFMjMyB3VuaUUyMzMHdW5pRTIzNAd1bmlFMjM1B3VuaUUyMzYHdW5pRTIzNwd1bmlFMjM4B3VuaUUyMzkHdW5pRTI0MAd1bmlFMjQxB3VuaUUyNDIHdW5pRTI0Mwd1bmlFMjQ0B3VuaUUyNDUHdW5pRTI0Ngd1bmlFMjQ3B3VuaUUyNDgHdW5pRTI0OQd1bmlFMjUwB3VuaUUyNTEHdW5pRTI1Mgd1bmlFMjUzB3VuaUUyNTQHdW5pRTI1NQd1bmlFMjU2B3VuaUUyNTcHdW5pRTI1OAd1bmlFMjU5B3VuaUUyNjAHdW5pRjhGRgZ1MUY1MTEGdTFGNkFBAAAAAAFUUMMXAAA%3D%29%20format%28%27truetype%27%29%2Curl%28data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI%2FPgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE%2BPC9tZXRhZGF0YT4KPGRlZnM%2BCjxmb250IGlkPSJnbHlwaGljb25zX2hhbGZsaW5nc3JlZ3VsYXIiIGhvcml6LWFkdi14PSIxMjAwIiA%2BCjxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxMjAwIiBhc2NlbnQ9Ijk2MCIgZGVzY2VudD0iLTI0MCIgLz4KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjUwMCIgLz4KPGdseXBoIGhvcml6LWFkdi14PSIwIiAvPgo8Z2x5cGggaG9yaXotYWR2LXg9IjQwMCIgLz4KPGdseXBoIHVuaWNvZGU9IiAiIC8%2BCjxnbHlwaCB1bmljb2RlPSIqIiBkPSJNNjAwIDExMDBxMTUgMCAzNCAtMS41dDMwIC0zLjVsMTEgLTFxMTAgLTIgMTcuNSAtMTAuNXQ3LjUgLTE4LjV2LTIyNGwxNTggMTU4cTcgNyAxOCA4dDE5IC02bDEwNiAtMTA2cTcgLTggNiAtMTl0LTggLTE4bC0xNTggLTE1OGgyMjRxMTAgMCAxOC41IC03LjV0MTAuNSAtMTcuNXE2IC00MSA2IC03NXEwIC0xNSAtMS41IC0zNHQtMy41IC0zMGwtMSAtMTFxLTIgLTEwIC0xMC41IC0xNy41dC0xOC41IC03LjVoLTIyNGwxNTggLTE1OCBxNyAtNyA4IC0xOHQtNiAtMTlsLTEwNiAtMTA2cS04IC03IC0xOSAtNnQtMTggOGwtMTU4IDE1OHYtMjI0cTAgLTEwIC03LjUgLTE4LjV0LTE3LjUgLTEwLjVxLTQxIC02IC03NSAtNnEtMTUgMCAtMzQgMS41dC0zMCAzLjVsLTExIDFxLTEwIDIgLTE3LjUgMTAuNXQtNy41IDE4LjV2MjI0bC0xNTggLTE1OHEtNyAtNyAtMTggLTh0LTE5IDZsLTEwNiAxMDZxLTcgOCAtNiAxOXQ4IDE4bDE1OCAxNThoLTIyNHEtMTAgMCAtMTguNSA3LjUgdC0xMC41IDE3LjVxLTYgNDEgLTYgNzVxMCAxNSAxLjUgMzR0My41IDMwbDEgMTFxMiAxMCAxMC41IDE3LjV0MTguNSA3LjVoMjI0bC0xNTggMTU4cS03IDcgLTggMTh0NiAxOWwxMDYgMTA2cTggNyAxOSA2dDE4IC04bDE1OCAtMTU4djIyNHEwIDEwIDcuNSAxOC41dDE3LjUgMTAuNXE0MSA2IDc1IDZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iKyIgZD0iTTQ1MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMzUwaDM1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zNTB2LTM1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYzNTBoLTM1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNSBoMzUwdjM1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4YTA7IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4YTU7IiBkPSJNODI1IDExMDBoMjUwcTEwIDAgMTIuNSAtNXQtNS41IC0xM2wtMzY0IC0zNjRxLTYgLTYgLTExIC0xOGgyNjhxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMjV2LTEwMGgyNzVxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMjV2LTE3NHEwIC0xMSAtNy41IC0xOC41dC0xOC41IC03LjVoLTE0OHEtMTEgMCAtMTguNSA3LjV0LTcuNSAxOC41djE3NCBoLTI3NXEtMTAgMCAtMTMgNnQzIDE0bDEyMCAxNjBxNiA4IDE4IDE0dDIyIDZoMTI1djEwMGgtMjc1cS0xMCAwIC0xMyA2dDMgMTRsMTIwIDE2MHE2IDggMTggMTR0MjIgNmgxMThxLTUgMTIgLTExIDE4bC0zNjQgMzY0cS04IDggLTUuNSAxM3QxMi41IDVoMjUwcTI1IDAgNDMgLTE4bDE2NCAtMTY0cTggLTggMTggLTh0MTggOGwxNjQgMTY0cTE4IDE4IDQzIDE4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDA7IiBob3Jpei1hZHYteD0iNjUwIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwMTsiIGhvcml6LWFkdi14PSIxMzAwIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwMjsiIGhvcml6LWFkdi14PSI2NTAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDAzOyIgaG9yaXotYWR2LXg9IjEzMDAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDA0OyIgaG9yaXotYWR2LXg9IjQzMyIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDU7IiBob3Jpei1hZHYteD0iMzI1IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwNjsiIGhvcml6LWFkdi14PSIyMTYiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDA3OyIgaG9yaXotYWR2LXg9IjIxNiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDg7IiBob3Jpei1hZHYteD0iMTYyIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwOTsiIGhvcml6LWFkdi14PSIyNjAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDBhOyIgaG9yaXotYWR2LXg9IjcyIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAyZjsiIGhvcml6LWFkdi14PSIyNjAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDVmOyIgaG9yaXotYWR2LXg9IjMyNSIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwYWM7IiBkPSJNNzQ0IDExOThxMjQyIDAgMzU0IC0xODlxNjAgLTEwNCA2NiAtMjA5aC0xODFxMCA0NSAtMTcuNSA4Mi41dC00My41IDYxLjV0LTU4IDQwLjV0LTYwLjUgMjR0LTUxLjUgNy41cS0xOSAwIC00MC41IC01LjV0LTQ5LjUgLTIwLjV0LTUzIC0zOHQtNDkgLTYyLjV0LTM5IC04OS41aDM3OWwtMTAwIC0xMDBoLTMwMHEtNiAtNTAgLTYgLTEwMGg0MDZsLTEwMCAtMTAwaC0zMDBxOSAtNzQgMzMgLTEzMnQ1Mi41IC05MXQ2MS41IC01NC41dDU5IC0yOSB0NDcgLTcuNXEyMiAwIDUwLjUgNy41dDYwLjUgMjQuNXQ1OCA0MXQ0My41IDYxdDE3LjUgODBoMTc0cS0zMCAtMTcxIC0xMjggLTI3OHEtMTA3IC0xMTcgLTI3NCAtMTE3cS0yMDYgMCAtMzI0IDE1OHEtMzYgNDggLTY5IDEzM3QtNDUgMjA0aC0yMTdsMTAwIDEwMGgxMTJxMSA0NyA2IDEwMGgtMjE4bDEwMCAxMDBoMTM0cTIwIDg3IDUxIDE1My41dDYyIDEwMy41cTExNyAxNDEgMjk3IDE0MXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMGJkOyIgZD0iTTQyOCAxMjAwaDM1MHE2NyAwIDEyMCAtMTN0ODYgLTMxdDU3IC00OS41dDM1IC01Ni41dDE3IC02NC41dDYuNSAtNjAuNXQwLjUgLTU3di0xNi41di0xNi41cTAgLTM2IC0wLjUgLTU3dC02LjUgLTYxdC0xNyAtNjV0LTM1IC01N3QtNTcgLTUwLjV0LTg2IC0zMS41dC0xMjAgLTEzaC0xNzhsLTIgLTEwMGgyODhxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMzh2LTE3NXEwIC0xMSAtNS41IC0xOCB0LTE1LjUgLTdoLTE0OXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE3NWgtMjY3cS0xMCAwIC0xMyA2dDMgMTRsMTIwIDE2MHE2IDggMTggMTR0MjIgNmgxMTd2MTAwaC0yNjdxLTEwIDAgLTEzIDZ0MyAxNGwxMjAgMTYwcTYgOCAxOCAxNHQyMiA2aDExN3Y0NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNjAwIDEwMDB2LTMwMGgyMDNxNjQgMCA4Ni41IDMzdDIyLjUgMTE5cTAgODQgLTIyLjUgMTE2dC04Ni41IDMyaC0yMDN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjIxMjsiIGQ9Ik0yNTAgNzAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjMxYjsiIGQ9Ik0xMDAwIDEyMDB2LTE1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTEwMHEwIC05MSAtNDkuNSAtMTY1LjV0LTEzMC41IC0xMDkuNXE4MSAtMzUgMTMwLjUgLTEwOS41dDQ5LjUgLTE2NS41di0xNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTE1MGgtODAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2MTUwcTAgOTEgNDkuNSAxNjUuNXQxMzAuNSAxMDkuNXEtODEgMzUgLTEzMC41IDEwOS41IHQtNDkuNSAxNjUuNXYxMDBoLTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxNTBoODAwek00MDAgMTAwMHYtMTAwcTAgLTYwIDMyLjUgLTEwOS41dDg3LjUgLTczLjVxMjggLTEyIDQ0IC0zN3QxNiAtNTV0LTE2IC01NXQtNDQgLTM3cS01NSAtMjQgLTg3LjUgLTczLjV0LTMyLjUgLTEwOS41di0xNTBoNDAwdjE1MHEwIDYwIC0zMi41IDEwOS41dC04Ny41IDczLjVxLTI4IDEyIC00NCAzN3QtMTYgNTV0MTYgNTV0NDQgMzcgcTU1IDI0IDg3LjUgNzMuNXQzMi41IDEwOS41djEwMGgtNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDI1ZmM7IiBob3Jpei1hZHYteD0iNTAwIiBkPSJNMCAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDI2MDE7IiBkPSJNNTAzIDEwODlxMTEwIDAgMjAwLjUgLTU5LjV0MTM0LjUgLTE1Ni41cTQ0IDE0IDkwIDE0cTEyMCAwIDIwNSAtODYuNXQ4NSAtMjA2LjVxMCAtMTIxIC04NSAtMjA3LjV0LTIwNSAtODYuNWgtNzUwcS03OSAwIC0xMzUuNSA1N3QtNTYuNSAxMzdxMCA2OSA0Mi41IDEyMi41dDEwOC41IDY3LjVxLTIgMTIgLTIgMzdxMCAxNTMgMTA4IDI2MC41dDI2MCAxMDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyNmZhOyIgZD0iTTc3NCAxMTkzLjVxMTYgLTkuNSAyMC41IC0yN3QtNS41IC0zMy41bC0xMzYgLTE4N2w0NjcgLTc0NmgzMHEyMCAwIDM1IC0xOC41dDE1IC0zOS41di00MmgtMTIwMHY0MnEwIDIxIDE1IDM5LjV0MzUgMTguNWgzMGw0NjggNzQ2bC0xMzUgMTgzcS0xMCAxNiAtNS41IDM0dDIwLjUgMjh0MzQgNS41dDI4IC0yMC41bDExMSAtMTQ4bDExMiAxNTBxOSAxNiAyNyAyMC41dDM0IC01ek02MDAgMjAwaDM3N2wtMTgyIDExMmwtMTk1IDUzNHYtNjQ2eiAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyNzA5OyIgZD0iTTI1IDExMDBoMTE1MHExMCAwIDEyLjUgLTV0LTUuNSAtMTNsLTU2NCAtNTY3cS04IC04IC0xOCAtOHQtMTggOGwtNTY0IDU2N3EtOCA4IC01LjUgMTN0MTIuNSA1ek0xOCA4ODJsMjY0IC0yNjRxOCAtOCA4IC0xOHQtOCAtMThsLTI2NCAtMjY0cS04IC04IC0xMyAtNS41dC01IDEyLjV2NTUwcTAgMTAgNSAxMi41dDEzIC01LjV6TTkxOCA2MThsMjY0IDI2NHE4IDggMTMgNS41dDUgLTEyLjV2LTU1MHEwIC0xMCAtNSAtMTIuNXQtMTMgNS41IGwtMjY0IDI2NHEtOCA4IC04IDE4dDggMTh6TTgxOCA0ODJsMzY0IC0zNjRxOCAtOCA1LjUgLTEzdC0xMi41IC01aC0xMTUwcS0xMCAwIC0xMi41IDV0NS41IDEzbDM2NCAzNjRxOCA4IDE4IDh0MTggLThsMTY0IC0xNjRxOCAtOCAxOCAtOHQxOCA4bDE2NCAxNjRxOCA4IDE4IDh0MTggLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjcwZjsiIGQ9Ik0xMDExIDEyMTBxMTkgMCAzMyAtMTNsMTUzIC0xNTNxMTMgLTE0IDEzIC0zM3QtMTMgLTMzbC05OSAtOTJsLTIxNCAyMTRsOTUgOTZxMTMgMTQgMzIgMTR6TTEwMTMgODAwbC02MTUgLTYxNGwtMjE0IDIxNGw2MTQgNjE0ek0zMTcgOTZsLTMzMyAtMTEybDExMCAzMzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMTsiIGQ9Ik03MDAgNjUwdi01NTBoMjUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtODAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyNTB2NTUwbC01MDAgNTUwaDEyMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMjsiIGQ9Ik0zNjggMTAxN2w2NDUgMTYzcTM5IDE1IDYzIDB0MjQgLTQ5di04MzFxMCAtNTUgLTQxLjUgLTk1LjV0LTExMS41IC02My41cS03OSAtMjUgLTE0NyAtNC41dC04NiA3NXQyNS41IDExMS41dDEyMi41IDgycTcyIDI0IDEzOCA4djUyMWwtNjAwIC0xNTV2LTYwNnEwIC00MiAtNDQgLTkwdC0xMDkgLTY5cS03OSAtMjYgLTE0NyAtNS41dC04NiA3NS41dDI1LjUgMTExLjV0MTIyLjUgODIuNXE3MiAyNCAxMzggN3Y2MzlxMCAzOCAxNC41IDU5IHQ1My41IDM0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDM7IiBkPSJNNTAwIDExOTFxMTAwIDAgMTkxIC0zOXQxNTYuNSAtMTA0LjV0MTA0LjUgLTE1Ni41dDM5IC0xOTFsLTEgLTJsMSAtNXEwIC0xNDEgLTc4IC0yNjJsMjc1IC0yNzRxMjMgLTI2IDIyLjUgLTQ0LjV0LTIyLjUgLTQyLjVsLTU5IC01OHEtMjYgLTIwIC00Ni41IC0yMHQtMzkuNSAyMGwtMjc1IDI3NHEtMTE5IC03NyAtMjYxIC03N2wtNSAxbC0yIC0xcS0xMDAgMCAtMTkxIDM5dC0xNTYuNSAxMDQuNXQtMTA0LjUgMTU2LjV0LTM5IDE5MSB0MzkgMTkxdDEwNC41IDE1Ni41dDE1Ni41IDEwNC41dDE5MSAzOXpNNTAwIDEwMjJxLTg4IDAgLTE2MiAtNDN0LTExNyAtMTE3dC00MyAtMTYydDQzIC0xNjJ0MTE3IC0xMTd0MTYyIC00M3QxNjIgNDN0MTE3IDExN3Q0MyAxNjJ0LTQzIDE2MnQtMTE3IDExN3QtMTYyIDQzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDU7IiBkPSJNNjQ5IDk0OXE0OCA2OCAxMDkuNSAxMDR0MTIxLjUgMzguNXQxMTguNSAtMjB0MTAyLjUgLTY0dDcxIC0xMDAuNXQyNyAtMTIzcTAgLTU3IC0zMy41IC0xMTcuNXQtOTQgLTEyNC41dC0xMjYuNSAtMTI3LjV0LTE1MCAtMTUyLjV0LTE0NiAtMTc0cS02MiA4NSAtMTQ1LjUgMTc0dC0xNTAgMTUyLjV0LTEyNi41IDEyNy41dC05My41IDEyNC41dC0zMy41IDExNy41cTAgNjQgMjggMTIzdDczIDEwMC41dDEwNCA2NHQxMTkgMjAgdDEyMC41IC0zOC41dDEwNC41IC0xMDR6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwNjsiIGQ9Ik00MDcgODAwbDEzMSAzNTNxNyAxOSAxNy41IDE5dDE3LjUgLTE5bDEyOSAtMzUzaDQyMXEyMSAwIDI0IC04LjV0LTE0IC0yMC41bC0zNDIgLTI0OWwxMzAgLTQwMXE3IC0yMCAtMC41IC0yNS41dC0yNC41IDYuNWwtMzQzIDI0NmwtMzQyIC0yNDdxLTE3IC0xMiAtMjQuNSAtNi41dC0wLjUgMjUuNWwxMzAgNDAwbC0zNDcgMjUxcS0xNyAxMiAtMTQgMjAuNXQyMyA4LjVoNDI5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDc7IiBkPSJNNDA3IDgwMGwxMzEgMzUzcTcgMTkgMTcuNSAxOXQxNy41IC0xOWwxMjkgLTM1M2g0MjFxMjEgMCAyNCAtOC41dC0xNCAtMjAuNWwtMzQyIC0yNDlsMTMwIC00MDFxNyAtMjAgLTAuNSAtMjUuNXQtMjQuNSA2LjVsLTM0MyAyNDZsLTM0MiAtMjQ3cS0xNyAtMTIgLTI0LjUgLTYuNXQtMC41IDI1LjVsMTMwIDQwMGwtMzQ3IDI1MXEtMTcgMTIgLTE0IDIwLjV0MjMgOC41aDQyOXpNNDc3IDcwMGgtMjQwbDE5NyAtMTQybC03NCAtMjI2IGwxOTMgMTM5bDE5NSAtMTQwbC03NCAyMjlsMTkyIDE0MGgtMjM0bC03OCAyMTF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwODsiIGQ9Ik02MDAgMTIwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTI1MHEwIC00NiAtMzEgLTk4dC02OSAtNTJ2LTc1cTAgLTEwIDYgLTIxLjV0MTUgLTE3LjVsMzU4IC0yMzBxOSAtNSAxNSAtMTYuNXQ2IC0yMS41di05M3EwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTExNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5M3EwIDEwIDYgMjEuNXQxNSAxNi41bDM1OCAyMzBxOSA2IDE1IDE3LjV0NiAyMS41djc1cS0zOCAwIC02OSA1MiB0LTMxIDk4djI1MHEwIDEyNCA4OCAyMTJ0MjEyIDg4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDk7IiBkPSJNMjUgMTEwMGgxMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTA1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTExNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxMDUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEwMCAxMDAwdi0xMDBoMTAwdjEwMGgtMTAwek04NzUgMTAwMGgtNTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMzUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoNTUwIHExMCAwIDE3LjUgNy41dDcuNSAxNy41djM1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6TTEwMDAgMTAwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwIDgwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwMCA4MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMDAgNjAwdi0xMDBoMTAwdjEwMGgtMTAwek04NzUgNTAwaC01NTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di0zNTBxMCAtMTAgNy41IC0xNy41IHQxNy41IC03LjVoNTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MzUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXpNMTAwIDQwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCAyMDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTA7IiBkPSJNNTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek02NTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCA1MDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMTsiIGQ9Ik01MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTEwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNODUwIDcwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAzMDBoMjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTg1MCAzMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41IHQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMjsiIGQ9Ik01MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAxMTAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNDUwIDcwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAzMDBoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMzsiIGQ9Ik00NjUgNDc3bDU3MSA1NzFxOCA4IDE4IDh0MTcgLThsMTc3IC0xNzdxOCAtNyA4IC0xN3QtOCAtMThsLTc4MyAtNzg0cS03IC04IC0xNy41IC04dC0xNy41IDhsLTM4NCAzODRxLTggOCAtOCAxOHQ4IDE3bDE3NyAxNzdxNyA4IDE3IDh0MTggLThsMTcxIC0xNzFxNyAtNyAxOCAtN3QxOCA3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTQ7IiBkPSJNOTA0IDEwODNsMTc4IC0xNzlxOCAtOCA4IC0xOC41dC04IC0xNy41bC0yNjcgLTI2OGwyNjcgLTI2OHE4IC03IDggLTE3LjV0LTggLTE4LjVsLTE3OCAtMTc4cS04IC04IC0xOC41IC04dC0xNy41IDhsLTI2OCAyNjdsLTI2OCAtMjY3cS03IC04IC0xNy41IC04dC0xOC41IDhsLTE3OCAxNzhxLTggOCAtOCAxOC41dDggMTcuNWwyNjcgMjY4bC0yNjcgMjY4cS04IDcgLTggMTcuNXQ4IDE4LjVsMTc4IDE3OHE4IDggMTguNSA4dDE3LjUgLTggbDI2OCAtMjY3bDI2OCAyNjhxNyA3IDE3LjUgN3QxOC41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTU7IiBkPSJNNTA3IDExNzdxOTggMCAxODcuNSAtMzguNXQxNTQuNSAtMTAzLjV0MTAzLjUgLTE1NC41dDM4LjUgLTE4Ny41cTAgLTE0MSAtNzggLTI2MmwzMDAgLTI5OXE4IC04IDggLTE4LjV0LTggLTE4LjVsLTEwOSAtMTA4cS03IC04IC0xNy41IC04dC0xOC41IDhsLTMwMCAyOTlxLTExOSAtNzcgLTI2MSAtNzdxLTk4IDAgLTE4OCAzOC41dC0xNTQuNSAxMDN0LTEwMyAxNTQuNXQtMzguNSAxODh0MzguNSAxODcuNXQxMDMgMTU0LjUgdDE1NC41IDEwMy41dDE4OCAzOC41ek01MDYuNSAxMDIzcS04OS41IDAgLTE2NS41IC00NHQtMTIwIC0xMjAuNXQtNDQgLTE2NnQ0NCAtMTY1LjV0MTIwIC0xMjB0MTY1LjUgLTQ0dDE2NiA0NHQxMjAuNSAxMjB0NDQgMTY1LjV0LTQ0IDE2NnQtMTIwLjUgMTIwLjV0LTE2NiA0NHpNNDI1IDkwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di03NWg3NXExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41IHQtMTcuNSAtNy41aC03NXYtNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY3NWgtNzVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWg3NXY3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTY7IiBkPSJNNTA3IDExNzdxOTggMCAxODcuNSAtMzguNXQxNTQuNSAtMTAzLjV0MTAzLjUgLTE1NC41dDM4LjUgLTE4Ny41cTAgLTE0MSAtNzggLTI2MmwzMDAgLTI5OXE4IC04IDggLTE4LjV0LTggLTE4LjVsLTEwOSAtMTA4cS03IC04IC0xNy41IC04dC0xOC41IDhsLTMwMCAyOTlxLTExOSAtNzcgLTI2MSAtNzdxLTk4IDAgLTE4OCAzOC41dC0xNTQuNSAxMDN0LTEwMyAxNTQuNXQtMzguNSAxODh0MzguNSAxODcuNXQxMDMgMTU0LjUgdDE1NC41IDEwMy41dDE4OCAzOC41ek01MDYuNSAxMDIzcS04OS41IDAgLTE2NS41IC00NHQtMTIwIC0xMjAuNXQtNDQgLTE2NnQ0NCAtMTY1LjV0MTIwIC0xMjB0MTY1LjUgLTQ0dDE2NiA0NHQxMjAuNSAxMjB0NDQgMTY1LjV0LTQ0IDE2NnQtMTIwLjUgMTIwLjV0LTE2NiA0NHpNMzI1IDgwMGgzNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0zNTBxLTEwIDAgLTE3LjUgNy41IHQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxNzsiIGQ9Ik01NTAgMTIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04MDAgOTc1djE2NnExNjcgLTYyIDI3MiAtMjA5LjV0MTA1IC0zMzEuNXEwIC0xMTcgLTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNSB0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHEwIDE4NCAxMDUgMzMxLjV0MjcyIDIwOS41di0xNjZxLTEwMyAtNTUgLTE2NSAtMTU1dC02MiAtMjIwcTAgLTExNiA1NyAtMjE0LjV0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXEwIDEyMCAtNjIgMjIwdC0xNjUgMTU1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTg7IiBkPSJNMTAyNSAxMjAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTExNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxMTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTcyNSA4MDBoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NzUwIHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek00MjUgNTAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTQ1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djQ1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek0xMjUgMzAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTI1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41IHYyNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDE5OyIgZD0iTTYwMCAxMTc0cTMzIDAgNzQgLTVsMzggLTE1Mmw1IC0xcTQ5IC0xNCA5NCAtMzlsNSAtMmwxMzQgODBxNjEgLTQ4IDEwNCAtMTA1bC04MCAtMTM0bDMgLTVxMjUgLTQ0IDM5IC05M2wxIC02bDE1MiAtMzhxNSAtNDMgNSAtNzNxMCAtMzQgLTUgLTc0bC0xNTIgLTM4bC0xIC02cS0xNSAtNDkgLTM5IC05M2wtMyAtNWw4MCAtMTM0cS00OCAtNjEgLTEwNCAtMTA1bC0xMzQgODFsLTUgLTNxLTQ0IC0yNSAtOTQgLTM5bC01IC0ybC0zOCAtMTUxIHEtNDMgLTUgLTc0IC01cS0zMyAwIC03NCA1bC0zOCAxNTFsLTUgMnEtNDkgMTQgLTk0IDM5bC01IDNsLTEzNCAtODFxLTYwIDQ4IC0xMDQgMTA1bDgwIDEzNGwtMyA1cS0yNSA0NSAtMzggOTNsLTIgNmwtMTUxIDM4cS02IDQyIC02IDc0cTAgMzMgNiA3M2wxNTEgMzhsMiA2cTEzIDQ4IDM4IDkzbDMgNWwtODAgMTM0cTQ3IDYxIDEwNSAxMDVsMTMzIC04MGw1IDJxNDUgMjUgOTQgMzlsNSAxbDM4IDE1MnE0MyA1IDc0IDV6TTYwMCA4MTUgcS04OSAwIC0xNTIgLTYzdC02MyAtMTUxLjV0NjMgLTE1MS41dDE1MiAtNjN0MTUyIDYzdDYzIDE1MS41dC02MyAxNTEuNXQtMTUyIDYzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMjA7IiBkPSJNNTAwIDEzMDBoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBoMjc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzVoLTExMDB2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNzV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNNTAwIDEyMDB2LTEwMGgzMDB2MTAwaC0zMDB6TTExMDAgOTAwdi04MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTcwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjUgdjgwMGg5MDB6TTMwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTUwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTcwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTkwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyMTsiIGQ9Ik0xOCA2MThsNjIwIDYwOHE4IDcgMTguNSA3dDE3LjUgLTdsNjA4IC02MDhxOCAtOCA1LjUgLTEzdC0xMi41IC01aC0xNzV2LTU3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM3NWgtMzAwdi0zNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1NzVoLTE3NXEtMTAgMCAtMTIuNSA1dDUuNSAxM3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDIyOyIgZD0iTTYwMCAxMjAwdi00MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDMwMHYtNjUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djExMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ1MHpNMTAwMCA4MDBoLTI1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMjM7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTYwMCAxMDI3cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjUgdDE1NS41IC0xNTUuNXQyMTQuNSAtNTd0MjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjV0LTU3IDIxNC41dC0xNTUuNSAxNTUuNXQtMjE0LjUgNTd6TTUyNSA5MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0yNzVoMTc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI0OyIgZD0iTTEzMDAgMGgtNTM4bC00MSA0MDBoLTI0MmwtNDEgLTQwMGgtNTM4bDQzMSAxMjAwaDIwOWwtMjEgLTMwMGgxNjJsLTIwIDMwMGgyMDh6TTUxNSA4MDBsLTI3IC0zMDBoMjI0bC0yNyAzMDBoLTE3MHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI1OyIgZD0iTTU1MCAxMjAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDUwaDE5MXEyMCAwIDI1LjUgLTExLjV0LTcuNSAtMjcuNWwtMzI3IC00MDBxLTEzIC0xNiAtMzIgLTE2dC0zMiAxNmwtMzI3IDQwMHEtMTMgMTYgLTcuNSAyNy41dDI1LjUgMTEuNWgxOTF2NDUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTEyNSA0MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0zNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41IGgtMTA1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTc1aDkwMHYxNzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI2OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek01MjUgOTAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTI3NWgxMzdxMjEgMCAyNiAtMTEuNXQtOCAtMjcuNWwtMjIzIC0yNzVxLTEzIC0xNiAtMzIgLTE2dC0zMiAxNmwtMjIzIDI3NXEtMTMgMTYgLTggMjcuNXQyNiAxMS41aDEzN3YyNzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNzsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNjAwIDEwMjdxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41dDU3IC0yMTQuNSB0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXQtNTcgMjE0LjV0LTE1NS41IDE1NS41dC0yMTQuNSA1N3pNNjMyIDkxNGwyMjMgLTI3NXExMyAtMTYgOCAtMjcuNXQtMjYgLTExLjVoLTEzN3YtMjc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2Mjc1aC0xMzdxLTIxIDAgLTI2IDExLjV0OCAyNy41bDIyMyAyNzVxMTMgMTYgMzIgMTYgdDMyIC0xNnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI4OyIgZD0iTTIyNSAxMjAwaDc1MHExMCAwIDE5LjUgLTd0MTIuNSAtMTdsMTg2IC02NTJxNyAtMjQgNyAtNDl2LTQyNXEwIC0xMiAtNCAtMjd0LTkgLTE3cS0xMiAtNiAtMzcgLTZoLTExMDBxLTEyIDAgLTI3IDR0LTE3IDhxLTYgMTMgLTYgMzhsMSA0MjVxMCAyNSA3IDQ5bDE4NSA2NTJxMyAxMCAxMi41IDE3dDE5LjUgN3pNODc4IDEwMDBoLTU1NnEtMTAgMCAtMTkgLTd0LTExIC0xOGwtODcgLTQ1MHEtMiAtMTEgNCAtMTh0MTYgLTdoMTUwIHExMCAwIDE5LjUgLTd0MTEuNSAtMTdsMzggLTE1MnEyIC0xMCAxMS41IC0xN3QxOS41IC03aDI1MHExMCAwIDE5LjUgN3QxMS41IDE3bDM4IDE1MnEyIDEwIDExLjUgMTd0MTkuNSA3aDE1MHExMCAwIDE2IDd0NCAxOGwtODcgNDUwcS0yIDExIC0xMSAxOHQtMTkgN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI5OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek01NDAgODIwbDI1MyAtMTkwcTE3IC0xMiAxNyAtMzB0LTE3IC0zMGwtMjUzIC0xOTBxLTE2IC0xMiAtMjggLTYuNXQtMTIgMjYuNXY0MDBxMCAyMSAxMiAyNi41dDI4IC02LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMDsiIGQ9Ik05NDcgMTA2MGwxMzUgMTM1cTcgNyAxMi41IDV0NS41IC0xM3YtMzYycTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMzYycS0xMSAwIC0xMyA1LjV0NSAxMi41bDEzMyAxMzNxLTEwOSA3NiAtMjM4IDc2cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjV0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNWgxNTBxMCAtMTE3IC00NS41IC0yMjQgdC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXExOTIgMCAzNDcgLTExN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDMxOyIgZD0iTTk0NyAxMDYwbDEzNSAxMzVxNyA3IDEyLjUgNXQ1LjUgLTEzdi0zNjFxMCAtMTEgLTcuNSAtMTguNXQtMTguNSAtNy41aC0zNjFxLTExIDAgLTEzIDUuNXQ1IDEyLjVsMTM0IDEzNHEtMTEwIDc1IC0yMzkgNzVxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41aC0xNTBxMCAxMTcgNDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXExOTIgMCAzNDcgLTExN3pNMTAyNyA2MDBoMTUwIHEwIC0xMTcgLTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41cS0xOTIgMCAtMzQ4IDExOGwtMTM0IC0xMzRxLTcgLTggLTEyLjUgLTUuNXQtNS41IDEyLjV2MzYwcTAgMTEgNy41IDE4LjV0MTguNSA3LjVoMzYwcTEwIDAgMTIuNSAtNS41dC01LjUgLTEyLjVsLTEzMyAtMTMzcTExMCAtNzYgMjQwIC03NnExMTYgMCAyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDMyOyIgZD0iTTEyNSAxMjAwaDEwNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTA1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djExNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMTA3NSAxMDAwaC04NTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di04NTBxMCAtMTAgNy41IC0xNy41dDE3LjUgLTcuNWg4NTBxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXY4NTAgcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXpNMzI1IDkwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01MjUgOTAwaDQ1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNDUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTAgcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTMyNSA3MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNTI1IDcwMGg0NTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTQ1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwIHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek0zMjUgNTAwaDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTUyNSA1MDBoNDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC00NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMzI1IDMwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01MjUgMzAwaDQ1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNDUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTAgcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMzsiIGQ9Ik05MDAgODAwdjIwMHEwIDgzIC01OC41IDE0MS41dC0xNDEuNSA1OC41aC0zMDBxLTgyIDAgLTE0MSAtNTl0LTU5IC0xNDF2LTIwMGgtMTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di02MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDkwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NjAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC0xMDB6TTQwMCA4MDB2MTUwcTAgMjEgMTUgMzUuNXQzNSAxNC41aDIwMCBxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNXYtMTUwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNDsiIGQ9Ik0xMjUgMTEwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTEwNzVoLTEwMHYxMDc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEwNzUgMTA1MnE0IDAgOSAtMnExNiAtNiAxNiAtMjN2LTQyMXEwIC02IC0zIC0xMnEtMzMgLTU5IC02Ni41IC05OXQtNjUuNSAtNTh0LTU2LjUgLTI0LjV0LTUyLjUgLTYuNXEtMjYgMCAtNTcuNSA2LjV0LTUyLjUgMTMuNXQtNjAgMjFxLTQxIDE1IC02MyAyMi41dC01Ny41IDE1dC02NS41IDcuNSBxLTg1IDAgLTE2MCAtNTdxLTcgLTUgLTE1IC01cS02IDAgLTExIDNxLTE0IDcgLTE0IDIydjQzOHEyMiA1NSA4MiA5OC41dDExOSA0Ni41cTIzIDIgNDMgMC41dDQzIC03dDMyLjUgLTguNXQzOCAtMTN0MzIuNSAtMTFxNDEgLTE0IDYzLjUgLTIxdDU3IC0xNHQ2My41IC03cTEwMyAwIDE4MyA4N3E3IDggMTggOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDM1OyIgZD0iTTYwMCAxMTc1cTExNiAwIDIyNyAtNDkuNXQxOTIuNSAtMTMxdDEzMSAtMTkyLjV0NDkuNSAtMjI3di0zMDBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djMwMHEwIDEyNyAtNzAuNSAyMzEuNXQtMTg0LjUgMTYxLjV0LTI0NSA1N3QtMjQ1IC01N3QtMTg0LjUgLTE2MS41dC03MC41IC0yMzEuNXYtMzAwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTAgcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MzAwcTAgMTE2IDQ5LjUgMjI3dDEzMSAxOTIuNXQxOTIuNSAxMzF0MjI3IDQ5LjV6TTIyMCA1MDBoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR2NDYwcTAgOCA2IDE0dDE0IDZ6TTgyMCA1MDBoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR2NDYwIHEwIDggNiAxNHQxNCA2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzY7IiBkPSJNMzIxIDgxNGwyNTggMTcycTkgNiAxNSAyLjV0NiAtMTMuNXYtNzUwcTAgLTEwIC02IC0xMy41dC0xNSAyLjVsLTI1OCAxNzJxLTIxIDE0IC00NiAxNGgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MzUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMjUwcTI1IDAgNDYgMTR6TTkwMCA2NjhsMTIwIDEyMHE3IDcgMTcgN3QxNyAtN2wzNCAtMzRxNyAtNyA3IC0xN3QtNyAtMTdsLTEyMCAtMTIwbDEyMCAtMTIwcTcgLTcgNyAtMTcgdC03IC0xN2wtMzQgLTM0cS03IC03IC0xNyAtN3QtMTcgN2wtMTIwIDExOWwtMTIwIC0xMTlxLTcgLTcgLTE3IC03dC0xNyA3bC0zNCAzNHEtNyA3IC03IDE3dDcgMTdsMTE5IDEyMGwtMTE5IDEyMHEtNyA3IC03IDE3dDcgMTdsMzQgMzRxNyA4IDE3IDh0MTcgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNzsiIGQ9Ik0zMjEgODE0bDI1OCAxNzJxOSA2IDE1IDIuNXQ2IC0xMy41di03NTBxMCAtMTAgLTYgLTEzLjV0LTE1IDIuNWwtMjU4IDE3MnEtMjEgMTQgLTQ2IDE0aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNTBxMjUgMCA0NiAxNHpNNzY2IDkwMGg0cTEwIC0xIDE2IC0xMHE5NiAtMTI5IDk2IC0yOTBxMCAtMTU0IC05MCAtMjgxcS02IC05IC0xNyAtMTBsLTMgLTFxLTkgMCAtMTYgNiBsLTI5IDIzcS03IDcgLTguNSAxNi41dDQuNSAxNy41cTcyIDEwMyA3MiAyMjlxMCAxMzIgLTc4IDIzOHEtNiA4IC00LjUgMTh0OS41IDE3bDI5IDIycTcgNSAxNSA1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzg7IiBkPSJNOTY3IDEwMDRoM3ExMSAtMSAxNyAtMTBxMTM1IC0xNzkgMTM1IC0zOTZxMCAtMTA1IC0zNCAtMjA2LjV0LTk4IC0xODUuNXEtNyAtOSAtMTcgLTEwaC0zcS05IDAgLTE2IDZsLTQyIDM0cS04IDYgLTkgMTZ0NSAxOHExMTEgMTUwIDExMSAzMjhxMCA5MCAtMjkuNSAxNzZ0LTg0LjUgMTU3cS02IDkgLTUgMTl0MTAgMTZsNDIgMzNxNyA1IDE1IDV6TTMyMSA4MTRsMjU4IDE3MnE5IDYgMTUgMi41dDYgLTEzLjV2LTc1MHEwIC0xMCAtNiAtMTMuNSB0LTE1IDIuNWwtMjU4IDE3MnEtMjEgMTQgLTQ2IDE0aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNTBxMjUgMCA0NiAxNHpNNzY2IDkwMGg0cTEwIC0xIDE2IC0xMHE5NiAtMTI5IDk2IC0yOTBxMCAtMTU0IC05MCAtMjgxcS02IC05IC0xNyAtMTBsLTMgLTFxLTkgMCAtMTYgNmwtMjkgMjNxLTcgNyAtOC41IDE2LjV0NC41IDE3LjVxNzIgMTAzIDcyIDIyOXEwIDEzMiAtNzggMjM4IHEtNiA4IC00LjUgMTguNXQ5LjUgMTYuNWwyOSAyMnE3IDUgMTUgNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDM5OyIgZD0iTTUwMCA5MDBoMTAwdi0xMDBoLTEwMHYtMTAwaC00MDB2LTEwMGgtMTAwdjYwMGg1MDB2LTMwMHpNMTIwMCA3MDBoLTIwMHYtMTAwaDIwMHYtMjAwaC0zMDB2MzAwaC0yMDB2MzAwaC0xMDB2MjAwaDYwMHYtNTAwek0xMDAgMTEwMHYtMzAwaDMwMHYzMDBoLTMwMHpNODAwIDExMDB2LTMwMGgzMDB2MzAwaC0zMDB6TTMwMCA5MDBoLTEwMHYxMDBoMTAwdi0xMDB6TTEwMDAgOTAwaC0xMDB2MTAwaDEwMHYtMTAwek0zMDAgNTAwaDIwMHYtNTAwIGgtNTAwdjUwMGgyMDB2MTAwaDEwMHYtMTAwek04MDAgMzAwaDIwMHYtMTAwaC0xMDB2LTEwMGgtMjAwdjEwMGgtMTAwdjEwMGgxMDB2MjAwaC0yMDB2MTAwaDMwMHYtMzAwek0xMDAgNDAwdi0zMDBoMzAwdjMwMGgtMzAwek0zMDAgMjAwaC0xMDB2MTAwaDEwMHYtMTAwek0xMjAwIDIwMGgtMTAwdjEwMGgxMDB2LTEwMHpNNzAwIDBoLTEwMHYxMDBoMTAwdi0xMDB6TTEyMDAgMGgtMzAwdjEwMGgzMDB2LTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQwOyIgZD0iTTEwMCAyMDBoLTEwMHYxMDAwaDEwMHYtMTAwMHpNMzAwIDIwMGgtMTAwdjEwMDBoMTAwdi0xMDAwek03MDAgMjAwaC0yMDB2MTAwMGgyMDB2LTEwMDB6TTkwMCAyMDBoLTEwMHYxMDAwaDEwMHYtMTAwMHpNMTIwMCAyMDBoLTIwMHYxMDAwaDIwMHYtMTAwMHpNNDAwIDBoLTMwMHYxMDBoMzAwdi0xMDB6TTYwMCAwaC0xMDB2OTFoMTAwdi05MXpNODAwIDBoLTEwMHY5MWgxMDB2LTkxek0xMTAwIDBoLTIwMHY5MWgyMDB2LTkxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNDE7IiBkPSJNNTAwIDEyMDBsNjgyIC02ODJxOCAtOCA4IC0xOHQtOCAtMThsLTQ2NCAtNDY0cS04IC04IC0xOCAtOHQtMTggOGwtNjgyIDY4MmwxIDQ3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDQ3NHpNMzE5LjUgMTAyNC41cS0yOS41IDI5LjUgLTcxIDI5LjV0LTcxIC0yOS41dC0yOS41IC03MS41dDI5LjUgLTcxLjV0NzEgLTI5LjV0NzEgMjkuNXQyOS41IDcxLjV0LTI5LjUgNzEuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQyOyIgZD0iTTUwMCAxMjAwbDY4MiAtNjgycTggLTggOCAtMTh0LTggLTE4bC00NjQgLTQ2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTY4MiA2ODJsMSA0NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWg0NzR6TTgwMCAxMjAwbDY4MiAtNjgycTggLTggOCAtMTh0LTggLTE4bC00NjQgLTQ2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTU2IDU2bDQyNCA0MjZsLTcwMCA3MDBoMTUwek0zMTkuNSAxMDI0LjVxLTI5LjUgMjkuNSAtNzEgMjkuNXQtNzEgLTI5LjUgdC0yOS41IC03MS41dDI5LjUgLTcxLjV0NzEgLTI5LjV0NzEgMjkuNXQyOS41IDcxLjV0LTI5LjUgNzEuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQzOyIgZD0iTTMwMCAxMjAwaDgyNXE3NSAwIDc1IC03NXYtOTAwcTAgLTI1IC0xOCAtNDNsLTY0IC02NHEtOCAtOCAtMTMgLTUuNXQtNSAxMi41djk1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjVoLTcwMHEtMjUgMCAtNDMgLTE4bC02NCAtNjRxLTggLTggLTUuNSAtMTN0MTIuNSAtNWg3MDBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di05NTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC04NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5NzUgcTAgMjUgMTggNDNsMTM5IDEzOXExOCAxOCA0MyAxOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQ0OyIgZD0iTTI1MCAxMjAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTE1MGwtNDUwIDQ0NGwtNDUwIC00NDV2MTE1MXEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NTsiIGQ9Ik04MjIgMTIwMGgtNDQ0cS0xMSAwIC0xOSAtNy41dC05IC0xNy41bC03OCAtMzAxcS03IC0yNCA3IC00NWw1NyAtMTA4cTYgLTkgMTcuNSAtMTV0MjEuNSAtNmg0NTBxMTAgMCAyMS41IDZ0MTcuNSAxNWw2MiAxMDhxMTQgMjEgNyA0NWwtODMgMzAxcS0xIDEwIC05IDE3LjV0LTE5IDcuNXpNMTE3NSA4MDBoLTE1MHEtMTAgMCAtMjEgLTYuNXQtMTUgLTE1LjVsLTc4IC0xNTZxLTQgLTkgLTE1IC0xNS41dC0yMSAtNi41aC01NTAgcS0xMCAwIC0yMSA2LjV0LTE1IDE1LjVsLTc4IDE1NnEtNCA5IC0xNSAxNS41dC0yMSA2LjVoLTE1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTY1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDc1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41IHQ3LjUgMTcuNXY2NTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41ek04NTAgMjAwaC01MDBxLTEwIDAgLTE5LjUgLTd0LTExLjUgLTE3bC0zOCAtMTUycS0yIC0xMCAzLjUgLTE3dDE1LjUgLTdoNjAwcTEwIDAgMTUuNSA3dDMuNSAxN2wtMzggMTUycS0yIDEwIC0xMS41IDE3dC0xOS41IDd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NjsiIGQ9Ik01MDAgMTEwMGgyMDBxNTYgMCAxMDIuNSAtMjAuNXQ3Mi41IC01MHQ0NCAtNTl0MjUgLTUwLjVsNiAtMjBoMTUwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di02MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTEwMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djYwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTUwcTIgOCA2LjUgMjEuNXQyNCA0OHQ0NSA2MXQ3MiA0OHQxMDIuNSAyMS41ek05MDAgODAwdi0xMDAgaDEwMHYxMDBoLTEwMHpNNjAwIDczMHEtOTUgMCAtMTYyLjUgLTY3LjV0LTY3LjUgLTE2Mi41dDY3LjUgLTE2Mi41dDE2Mi41IC02Ny41dDE2Mi41IDY3LjV0NjcuNSAxNjIuNXQtNjcuNSAxNjIuNXQtMTYyLjUgNjcuNXpNNjAwIDYwM3E0MyAwIDczIC0zMHQzMCAtNzN0LTMwIC03M3QtNzMgLTMwdC03MyAzMHQtMzAgNzN0MzAgNzN0NzMgMzB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NzsiIGQ9Ik02ODEgMTE5OWwzODUgLTk5OHEyMCAtNTAgNjAgLTkycTE4IC0xOSAzNi41IC0yOS41dDI3LjUgLTExLjVsMTAgLTJ2LTY2aC00MTd2NjZxNTMgMCA3NSA0My41dDUgODguNWwtODIgMjIyaC0zOTFxLTU4IC0xNDUgLTkyIC0yMzRxLTExIC0zNCAtNi41IC01N3QyNS41IC0zN3Q0NiAtMjB0NTUgLTZ2LTY2aC0zNjV2NjZxNTYgMjQgODQgNTJxMTIgMTIgMjUgMzAuNXQyMCAzMS41bDcgMTNsMzk5IDEwMDZoOTN6TTQxNiA1MjFoMzQwIGwtMTYyIDQ1N3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQ4OyIgZD0iTTc1MyA2NDFxNSAtMSAxNC41IC00LjV0MzYgLTE1LjV0NTAuNSAtMjYuNXQ1My41IC00MHQ1MC41IC01NC41dDM1LjUgLTcwdDE0LjUgLTg3cTAgLTY3IC0yNy41IC0xMjUuNXQtNzEuNSAtOTcuNXQtOTguNSAtNjYuNXQtMTA4LjUgLTQwLjV0LTEwMiAtMTNoLTUwMHY4OXE0MSA3IDcwLjUgMzIuNXQyOS41IDY1LjV2ODI3cTAgMjQgLTAuNSAzNHQtMy41IDI0dC04LjUgMTkuNXQtMTcgMTMuNXQtMjggMTIuNXQtNDIuNSAxMS41djcxIGw0NzEgLTFxNTcgMCAxMTUuNSAtMjAuNXQxMDggLTU3dDgwLjUgLTk0dDMxIC0xMjQuNXEwIC01MSAtMTUuNSAtOTYuNXQtMzggLTc0LjV0LTQ1IC01MC41dC0zOC41IC0zMC41ek00MDAgNzAwaDEzOXE3OCAwIDEzMC41IDQ4LjV0NTIuNSAxMjIuNXEwIDQxIC04LjUgNzAuNXQtMjkuNSA1NS41dC02Mi41IDM5LjV0LTEwMy41IDEzLjVoLTExOHYtMzUwek00MDAgMjAwaDIxNnE4MCAwIDEyMSA1MC41dDQxIDEzMC41cTAgOTAgLTYyLjUgMTU0LjUgdC0xNTYuNSA2NC41aC0xNTl2LTQwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQ5OyIgZD0iTTg3NyAxMjAwbDIgLTU3cS04MyAtMTkgLTExNiAtNDUuNXQtNDAgLTY2LjVsLTEzMiAtODM5cS05IC00OSAxMyAtNjl0OTYgLTI2di05N2gtNTAwdjk3cTE4NiAxNiAyMDAgOThsMTczIDgzMnEzIDE3IDMgMzB0LTEuNSAyMi41dC05IDE3LjV0LTEzLjUgMTIuNXQtMjEuNSAxMHQtMjYgOC41dC0zMy41IDEwcS0xMyAzIC0xOSA1djU3aDQyNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDUwOyIgZD0iTTEzMDAgOTAwaC01MHEwIDIxIC00IDM3dC05LjUgMjYuNXQtMTggMTcuNXQtMjIgMTF0LTI4LjUgNS41dC0zMSAydC0zNyAwLjVoLTIwMHYtODUwcTAgLTIyIDI1IC0zNC41dDUwIC0xMy41bDI1IC0ydi0xMDBoLTQwMHYxMDBxNCAwIDExIDAuNXQyNCAzdDMwIDd0MjQgMTV0MTEgMjQuNXY4NTBoLTIwMHEtMjUgMCAtMzcgLTAuNXQtMzEgLTJ0LTI4LjUgLTUuNXQtMjIgLTExdC0xOCAtMTcuNXQtOS41IC0yNi41dC00IC0zN2gtNTB2MzAwIGgxMDAwdi0zMDB6TTE3NSAxMDAwaC03NXYtODAwaDc1bC0xMjUgLTE2N2wtMTI1IDE2N2g3NXY4MDBoLTc1bDEyNSAxNjd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MTsiIGQ9Ik0xMTAwIDkwMGgtNTBxMCAyMSAtNCAzN3QtOS41IDI2LjV0LTE4IDE3LjV0LTIyIDExdC0yOC41IDUuNXQtMzEgMnQtMzcgMC41aC0yMDB2LTY1MHEwIC0yMiAyNSAtMzQuNXQ1MCAtMTMuNWwyNSAtMnYtMTAwaC00MDB2MTAwcTQgMCAxMSAwLjV0MjQgM3QzMCA3dDI0IDE1dDExIDI0LjV2NjUwaC0yMDBxLTI1IDAgLTM3IC0wLjV0LTMxIC0ydC0yOC41IC01LjV0LTIyIC0xMXQtMTggLTE3LjV0LTkuNSAtMjYuNXQtNCAtMzdoLTUwdjMwMCBoMTAwMHYtMzAwek0xMTY3IDUwbC0xNjcgLTEyNXY3NWgtODAwdi03NWwtMTY3IDEyNWwxNjcgMTI1di03NWg4MDB2NzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MjsiIGQ9Ik01MCAxMTAwaDYwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDgwMGgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA1MDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTgwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMjAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MzsiIGQ9Ik0yNTAgMTEwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMjUwIDUwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCAyMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDU0OyIgZD0iTTUwMCA5NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg2MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMTAwIDY1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0zMDAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTgwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTAgNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDU1OyIgZD0iTTUwIDExMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMjAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1NjsiIGQ9Ik01MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTM1MCAxMTAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMzUwIDgwMGg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTM1MCA1MDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zNTAgMjAwaDgwMCBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNTc7IiBkPSJNNDAwIDBoLTEwMHYxMTAwaDEwMHYtMTEwMHpNNTUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTUwIDgwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMjY3IDU1MGwtMTY3IC0xMjV2NzVoLTIwMHYxMDBoMjAwdjc1ek01NTAgNTAwaDMwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTU1MCAyMDBoNjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1ODsiIGQ9Ik01MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTkwMCAwaC0xMDB2MTEwMGgxMDB2LTExMDB6TTUwIDgwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTEwMCA2MDBoMjAwdi0xMDBoLTIwMHYtNzVsLTE2NyAxMjVsMTY3IDEyNXYtNzV6TTUwIDUwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCAyMDBoNjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1OTsiIGQ9Ik03NSAxMDAwaDc1MHEzMSAwIDUzIC0yMnQyMiAtNTN2LTY1MHEwIC0zMSAtMjIgLTUzdC01MyAtMjJoLTc1MHEtMzEgMCAtNTMgMjJ0LTIyIDUzdjY1MHEwIDMxIDIyIDUzdDUzIDIyek0xMjAwIDMwMGwtMzAwIDMwMGwzMDAgMzAwdi02MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2MDsiIGQ9Ik00NCAxMTAwaDExMTJxMTggMCAzMSAtMTN0MTMgLTMxdi0xMDEycTAgLTE4IC0xMyAtMzF0LTMxIC0xM2gtMTExMnEtMTggMCAtMzEgMTN0LTEzIDMxdjEwMTJxMCAxOCAxMyAzMXQzMSAxM3pNMTAwIDEwMDB2LTczN2wyNDcgMTgybDI5OCAtMTMxbC03NCAxNTZsMjkzIDMxOGwyMzYgLTI4OHY1MDBoLTEwMDB6TTM0MiA4ODRxNTYgMCA5NSAtMzl0MzkgLTk0LjV0LTM5IC05NXQtOTUgLTM5LjV0LTk1IDM5LjV0LTM5IDk1dDM5IDk0LjUgdDk1IDM5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjI7IiBkPSJNNjQ4IDExNjlxMTE3IDAgMjE2IC02MHQxNTYuNSAtMTYxdDU3LjUgLTIxOHEwIC0xMTUgLTcwIC0yNThxLTY5IC0xMDkgLTE1OCAtMjI1LjV0LTE0MyAtMTc5LjVsLTU0IC02MnEtOSA4IC0yNS41IDI0LjV0LTYzLjUgNjcuNXQtOTEgMTAzdC05OC41IDEyOHQtOTUuNSAxNDhxLTYwIDEzMiAtNjAgMjQ5cTAgODggMzQgMTY5LjV0OTEuNSAxNDJ0MTM3IDk2LjV0MTY2LjUgMzZ6TTY1Mi41IDk3NHEtOTEuNSAwIC0xNTYuNSAtNjUgdC02NSAtMTU3dDY1IC0xNTYuNXQxNTYuNSAtNjQuNXQxNTYuNSA2NC41dDY1IDE1Ni41dC02NSAxNTd0LTE1Ni41IDY1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjM7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTYwMCAxNzN2ODU0cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjUgdDE1NS41IC0xNTUuNXQyMTQuNSAtNTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2NDsiIGQ9Ik01NTQgMTI5NXEyMSAtNzIgNTcuNSAtMTQzLjV0NzYgLTEzMHQ4MyAtMTE4dDgyLjUgLTExN3Q3MCAtMTE2dDQ5LjUgLTEyNnQxOC41IC0xMzYuNXEwIC03MSAtMjUuNSAtMTM1dC02OC41IC0xMTF0LTk5IC04MnQtMTE4LjUgLTU0dC0xMjUuNSAtMjNxLTg0IDUgLTE2MS41IDM0dC0xMzkuNSA3OC41dC05OSAxMjV0LTM3IDE2NC41cTAgNjkgMTggMTM2LjV0NDkuNSAxMjYuNXQ2OS41IDExNi41dDgxLjUgMTE3LjV0ODMuNSAxMTkgdDc2LjUgMTMxdDU4LjUgMTQzek0zNDQgNzEwcS0yMyAtMzMgLTQzLjUgLTcwLjV0LTQwLjUgLTEwMi41dC0xNyAtMTIzcTEgLTM3IDE0LjUgLTY5LjV0MzAgLTUydDQxIC0zN3QzOC41IC0yNC41dDMzIC0xNXEyMSAtNyAzMiAtMXQxMyAyMmw2IDM0cTIgMTAgLTIuNSAyMnQtMTMuNSAxOXEtNSA0IC0xNCAxMnQtMjkuNSA0MC41dC0zMi41IDczLjVxLTI2IDg5IDYgMjcxcTIgMTEgLTYgMTFxLTggMSAtMTUgLTEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjU7IiBkPSJNMTAwMCAxMDEzbDEwOCAxMTVxMiAxIDUgMnQxMyAydDIwLjUgLTF0MjUgLTkuNXQyOC41IC0yMS41cTIyIC0yMiAyNyAtNDN0MCAtMzJsLTYgLTEwbC0xMDggLTExNXpNMzUwIDExMDBoNDAwcTUwIDAgMTA1IC0xM2wtMTg3IC0xODdoLTM2OHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djE4MmwyMDAgMjAwdi0zMzIgcTAgLTE2NSAtOTMuNSAtMjU3LjV0LTI1Ni41IC05Mi41aC00MDBxLTE2NSAwIC0yNTcuNSA5Mi41dC05Mi41IDI1Ny41djQwMHEwIDE2NSA5Mi41IDI1Ny41dDI1Ny41IDkyLjV6TTEwMDkgODAzbC0zNjIgLTM2MmwtMTYxIC01MGw1NSAxNzBsMzU1IDM1NXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDY2OyIgZD0iTTM1MCAxMTAwaDM2MXEtMTY0IC0xNDYgLTIxNiAtMjAwaC0xOTVxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNWwyMDAgMTUzdi0xMDNxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXogTTgyNCAxMDczbDMzOSAtMzAxcTggLTcgOCAtMTcuNXQtOCAtMTcuNWwtMzQwIC0zMDZxLTcgLTYgLTEyLjUgLTR0LTYuNSAxMXYyMDNxLTI2IDEgLTU0LjUgMHQtNzguNSAtNy41dC05MiAtMTcuNXQtODYgLTM1dC03MCAtNTdxMTAgNTkgMzMgMTA4dDUxLjUgODEuNXQ2NSA1OC41dDY4LjUgNDAuNXQ2NyAyNC41dDU2IDEzLjV0NDAgNC41djIxMHExIDEwIDYuNSAxMi41dDEzLjUgLTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDY3OyIgZD0iTTM1MCAxMTAwaDM1MHE2MCAwIDEyNyAtMjNsLTE3OCAtMTc3aC0zNDlxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY2OWwyMDAgMjAwdi0yMTlxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXogTTY0MyA2MzlsMzk1IDM5NXE3IDcgMTcuNSA3dDE3LjUgLTdsMTAxIC0xMDFxNyAtNyA3IC0xNy41dC03IC0xNy41bC01MzEgLTUzMnEtNyAtNyAtMTcuNSAtN3QtMTcuNSA3bC0yNDggMjQ4cS03IDcgLTcgMTcuNXQ3IDE3LjVsMTAxIDEwMXE3IDcgMTcuNSA3dDE3LjUgLTdsMTExIC0xMTFxOCAtNyAxOCAtN3QxOCA3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjg7IiBkPSJNMzE4IDkxOGwyNjQgMjY0cTggOCAxOCA4dDE4IC04bDI2MCAtMjY0cTcgLTggNC41IC0xM3QtMTIuNSAtNWgtMTcwdi0yMDBoMjAwdjE3M3EwIDEwIDUgMTJ0MTMgLTVsMjY0IC0yNjBxOCAtNyA4IC0xNy41dC04IC0xNy41bC0yNjQgLTI2NXEtOCAtNyAtMTMgLTV0LTUgMTJ2MTczaC0yMDB2LTIwMGgxNzBxMTAgMCAxMi41IC01dC00LjUgLTEzbC0yNjAgLTI2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTI2NCAyNjRxLTggOCAtNS41IDEzIHQxMi41IDVoMTc1djIwMGgtMjAwdi0xNzNxMCAtMTAgLTUgLTEydC0xMyA1bC0yNjQgMjY1cS04IDcgLTggMTcuNXQ4IDE3LjVsMjY0IDI2MHE4IDcgMTMgNXQ1IC0xMnYtMTczaDIwMHYyMDBoLTE3NXEtMTAgMCAtMTIuNSA1dDUuNSAxM3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDY5OyIgZD0iTTI1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDM4bDQ2NCA0NTNxMTUgMTQgMjUuNSAxMHQxMC41IC0yNXYtMTAwMHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ2NCA0NTN2LTQzOHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDcwOyIgZD0iTTUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MzhsNDY0IDQ1M3ExNSAxNCAyNS41IDEwdDEwLjUgLTI1di00MzhsNDY0IDQ1M3ExNSAxNCAyNS41IDEwdDEwLjUgLTI1di0xMDAwcTAgLTIxIC0xMC41IC0yNXQtMjUuNSAxMGwtNDY0IDQ1M3YtNDM4cTAgLTIxIC0xMC41IC0yNXQtMjUuNSAxMGwtNDY0IDQ1M3YtNDM4cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXYxMDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDcxOyIgZD0iTTEyMDAgMTA1MHYtMTAwMHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ2NCA0NTN2LTQzOHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ5MiA0ODBxLTE1IDE0IC0xNSAzNXQxNSAzNWw0OTIgNDgwcTE1IDE0IDI1LjUgMTB0MTAuNSAtMjV2LTQzOGw0NjQgNDUzcTE1IDE0IDI1LjUgMTB0MTAuNSAtMjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3MjsiIGQ9Ik0yNDMgMTA3NGw4MTQgLTQ5OHExOCAtMTEgMTggLTI2dC0xOCAtMjZsLTgxNCAtNDk4cS0xOCAtMTEgLTMwLjUgLTR0LTEyLjUgMjh2MTAwMHEwIDIxIDEyLjUgMjh0MzAuNSAtNHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDczOyIgZD0iTTI1MCAxMDAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtODAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCAxMDAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtODAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNzQ7IiBkPSJNMTEwMCA5NTB2LTgwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY4MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDc1OyIgZD0iTTUwMCA2MTJ2NDM4cTAgMjEgMTAuNSAyNXQyNS41IC0xMGw0OTIgLTQ4MHExNSAtMTQgMTUgLTM1dC0xNSAtMzVsLTQ5MiAtNDgwcS0xNSAtMTQgLTI1LjUgLTEwdC0xMC41IDI1djQzOGwtNDY0IC00NTNxLTE1IC0xNCAtMjUuNSAtMTB0LTEwLjUgMjV2MTAwMHEwIDIxIDEwLjUgMjV0MjUuNSAtMTB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NjsiIGQ9Ik0xMDQ4IDExMDJsMTAwIDFxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNWw1IC0xMDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41bC0xMDAgLTFxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41bC0yIDQzN2wtNDYzIC00NTRxLTE0IC0xNSAtMjQuNSAtMTAuNXQtMTAuNSAyNS41bC0yIDQzN2wtNDYyIC00NTVxLTE1IC0xNCAtMjUuNSAtOS41dC0xMC41IDI0LjVsLTUgMTAwMHEwIDIxIDEwLjUgMjUuNXQyNS41IC0xMC41bDQ2NiAtNDUwIGwtMiA0MzhxMCAyMCAxMC41IDI0LjV0MjUuNSAtOS41bDQ2NiAtNDUxbC0yIDQzOHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NzsiIGQ9Ik04NTAgMTEwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDM4bC00NjQgLTQ1M3EtMTUgLTE0IC0yNS41IC0xMHQtMTAuNSAyNXYxMDAwcTAgMjEgMTAuNSAyNXQyNS41IC0xMGw0NjQgLTQ1M3Y0MzhxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNzg7IiBkPSJNNjg2IDEwODFsNTAxIC01NDBxMTUgLTE1IDEwLjUgLTI2dC0yNi41IC0xMWgtMTA0MnEtMjIgMCAtMjYuNSAxMXQxMC41IDI2bDUwMSA1NDBxMTUgMTUgMzYgMTV0MzYgLTE1ek0xNTAgNDAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDc5OyIgZD0iTTg4NSA5MDBsLTM1MiAtMzUzbDM1MiAtMzUzbC0xOTcgLTE5OGwtNTUyIDU1Mmw1NTIgNTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODA7IiBkPSJNMTA2NCA1NDdsLTU1MSAtNTUxbC0xOTggMTk4bDM1MyAzNTNsLTM1MyAzNTNsMTk4IDE5OHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDgxOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02NTAgOTAwaC0xMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTE1MGgtMTUwIHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwcTAgLTIxIDE0LjUgLTM1LjV0MzUuNSAtMTQuNWgxNTB2LTE1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMTAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxNTBoMTUwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTE1MHYxNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4MjsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNODUwIDcwMGgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDBxMCAtMjEgMTQuNSAtMzUuNSB0MzUuNSAtMTQuNWg1MDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDgzOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek03NDEuNSA5MTNxLTEyLjUgMCAtMjEuNSAtOWwtMTIwIC0xMjBsLTEyMCAxMjBxLTkgOSAtMjEuNSA5IHQtMjEuNSAtOWwtMTQxIC0xNDFxLTkgLTkgLTkgLTIxLjV0OSAtMjEuNWwxMjAgLTEyMGwtMTIwIC0xMjBxLTkgLTkgLTkgLTIxLjV0OSAtMjEuNWwxNDEgLTE0MXE5IC05IDIxLjUgLTl0MjEuNSA5bDEyMCAxMjBsMTIwIC0xMjBxOSAtOSAyMS41IC05dDIxLjUgOWwxNDEgMTQxcTkgOSA5IDIxLjV0LTkgMjEuNWwtMTIwIDEyMGwxMjAgMTIwcTkgOSA5IDIxLjV0LTkgMjEuNWwtMTQxIDE0MXEtOSA5IC0yMS41IDl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NDsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNTQ2IDYyM2wtODQgODVxLTcgNyAtMTcuNSA3dC0xOC41IC03bC0xMzkgLTEzOXEtNyAtOCAtNyAtMTh0NyAtMTggbDI0MiAtMjQxcTcgLTggMTcuNSAtOHQxNy41IDhsMzc1IDM3NXE3IDcgNyAxNy41dC03IDE4LjVsLTEzOSAxMzlxLTcgNyAtMTcuNSA3dC0xNy41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODU7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTU4OCA5NDFxLTI5IDAgLTU5IC01LjV0LTYzIC0yMC41dC01OCAtMzguNXQtNDEuNSAtNjN0LTE2LjUgLTg5LjUgcTAgLTI1IDIwIC0yNWgxMzFxMzAgLTUgMzUgMTFxNiAyMCAyMC41IDI4dDQ1LjUgOHEyMCAwIDMxLjUgLTEwLjV0MTEuNSAtMjguNXEwIC0yMyAtNyAtMzR0LTI2IC0xOHEtMSAwIC0xMy41IC00dC0xOS41IC03LjV0LTIwIC0xMC41dC0yMiAtMTd0LTE4LjUgLTI0dC0xNS41IC0zNXQtOCAtNDZxLTEgLTggNS41IC0xNi41dDIwLjUgLTguNWgxNzNxNyAwIDIyIDh0MzUgMjh0MzcuNSA0OHQyOS41IDc0dDEyIDEwMHEwIDQ3IC0xNyA4MyB0LTQyLjUgNTd0LTU5LjUgMzQuNXQtNjQgMTh0LTU5IDQuNXpNNjc1IDQwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MTUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDg2OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02NzUgMTAwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNSB0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djE1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6TTY3NSA3MDBoLTI1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoNzV2LTIwMGgtNzVxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di01MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDM1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djUwcTAgMTAgLTcuNSAxNy41IHQtMTcuNSA3LjVoLTc1djI3NXEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NzsiIGQ9Ik01MjUgMTIwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xOTRxMTAzIC0yNyAxNzguNSAtMTAyLjV0MTAyLjUgLTE3OC41aDE5NHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE5NHEtMjcgLTEwMyAtMTAyLjUgLTE3OC41dC0xNzguNSAtMTAyLjV2LTE5NHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE5NCBxLTEwMyAyNyAtMTc4LjUgMTAyLjV0LTEwMi41IDE3OC41aC0xOTRxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxOTRxMjcgMTAzIDEwMi41IDE3OC41dDE3OC41IDEwMi41djE5NHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek03MDAgODkzdi0xNjhxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNjhxLTY4IC0yMyAtMTE5IC03NCB0LTc0IC0xMTloMTY4cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTY4cTIzIC02OCA3NCAtMTE5dDExOSAtNzR2MTY4cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTY4cTY4IDIzIDExOSA3NHQ3NCAxMTloLTE2OHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDE2OCBxLTIzIDY4IC03NCAxMTl0LTExOSA3NHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDg4OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek03NTkgODIzbDY0IC02NHE3IC03IDcgLTE3LjV0LTcgLTE3LjVsLTEyNCAtMTI0bDEyNCAtMTI0cTcgLTcgNyAtMTcuNXQtNyAtMTcuNWwtNjQgLTY0cS03IC03IC0xNy41IC03dC0xNy41IDdsLTEyNCAxMjRsLTEyNCAtMTI0cS03IC03IC0xNy41IC03dC0xNy41IDdsLTY0IDY0IHEtNyA3IC03IDE3LjV0NyAxNy41bDEyNCAxMjRsLTEyNCAxMjRxLTcgNyAtNyAxNy41dDcgMTcuNWw2NCA2NHE3IDcgMTcuNSA3dDE3LjUgLTdsMTI0IC0xMjRsMTI0IDEyNHE3IDcgMTcuNSA3dDE3LjUgLTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4OTsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNjAwIDEwMjdxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41dDU3IC0yMTQuNSB0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXQtNTcgMjE0LjV0LTE1NS41IDE1NS41dC0yMTQuNSA1N3pNNzgyIDc4OGwxMDYgLTEwNnE3IC03IDcgLTE3LjV0LTcgLTE3LjVsLTMyMCAtMzIxcS04IC03IC0xOCAtN3QtMTggN2wtMjAyIDIwM3EtOCA3IC04IDE3LjV0OCAxNy41bDEwNiAxMDZxNyA4IDE3LjUgOHQxNy41IC04bDc5IC03OWwxOTcgMTk3cTcgNyAxNy41IDd0MTcuNSAtN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDkwOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjVxMCAtMTIwIDY1IC0yMjUgbDU4NyA1ODdxLTEwNSA2NSAtMjI1IDY1ek05NjUgODE5bC01ODQgLTU4NHExMDQgLTYyIDIxOSAtNjJxMTE2IDAgMjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjVxMCAxMTUgLTYyIDIxOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDkxOyIgZD0iTTM5IDU4Mmw1MjIgNDI3cTE2IDEzIDI3LjUgOHQxMS41IC0yNnYtMjkxaDU1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC01NTB2LTI5MXEwIC0yMSAtMTEuNSAtMjZ0LTI3LjUgOGwtNTIyIDQyN3EtMTYgMTMgLTE2IDMydDE2IDMyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwOTI7IiBkPSJNNjM5IDEwMDlsNTIyIC00MjdxMTYgLTEzIDE2IC0zMnQtMTYgLTMybC01MjIgLTQyN3EtMTYgLTEzIC0yNy41IC04dC0xMS41IDI2djI5MWgtNTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDU1MHYyOTFxMCAyMSAxMS41IDI2dDI3LjUgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5MzsiIGQ9Ik02ODIgMTE2MWw0MjcgLTUyMnExMyAtMTYgOCAtMjcuNXQtMjYgLTExLjVoLTI5MXYtNTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djU1MGgtMjkxcS0yMSAwIC0yNiAxMS41dDggMjcuNWw0MjcgNTIycTEzIDE2IDMyIDE2dDMyIC0xNnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDk0OyIgZD0iTTU1MCAxMjAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTUwaDI5MXEyMSAwIDI2IC0xMS41dC04IC0yNy41bC00MjcgLTUyMnEtMTMgLTE2IC0zMiAtMTZ0LTMyIDE2bC00MjcgNTIycS0xMyAxNiAtOCAyNy41dDI2IDExLjVoMjkxdjU1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NTsiIGQ9Ik02MzkgMTEwOWw1MjIgLTQyN3ExNiAtMTMgMTYgLTMydC0xNiAtMzJsLTUyMiAtNDI3cS0xNiAtMTMgLTI3LjUgLTh0LTExLjUgMjZ2MjkxcS05NCAtMiAtMTgyIC0yMHQtMTcwLjUgLTUydC0xNDcgLTkyLjV0LTEwMC41IC0xMzUuNXE1IDEwNSAyNyAxOTMuNXQ2Ny41IDE2N3QxMTMgMTM1dDE2NyA5MS41dDIyNS41IDQydjI2MnEwIDIxIDExLjUgMjZ0MjcuNSAtOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDk2OyIgZD0iTTg1MCAxMjAwaDMwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMzAwcTAgLTIxIC0xMC41IC0yNXQtMjQuNSAxMGwtOTQgOTRsLTI0OSAtMjQ5cS04IC03IC0xOCAtN3QtMTggN2wtMTA2IDEwNnEtNyA4IC03IDE4dDcgMThsMjQ5IDI0OWwtOTQgOTRxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjV6TTM1MCAwaC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djMwMHEwIDIxIDEwLjUgMjV0MjQuNSAtMTBsOTQgLTk0bDI0OSAyNDkgcTggNyAxOCA3dDE4IC03bDEwNiAtMTA2cTcgLTggNyAtMTh0LTcgLTE4bC0yNDkgLTI0OWw5NCAtOTRxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDk3OyIgZD0iTTEwMTQgMTEyMGwxMDYgLTEwNnE3IC04IDcgLTE4dC03IC0xOGwtMjQ5IC0yNDlsOTQgLTk0cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTMwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MzAwcTAgMjEgMTAuNSAyNXQyNC41IC0xMGw5NCAtOTRsMjQ5IDI0OXE4IDcgMTggN3QxOCAtN3pNMjUwIDYwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTk0IDk0IGwtMjQ5IC0yNDlxLTggLTcgLTE4IC03dC0xOCA3bC0xMDYgMTA2cS03IDggLTcgMTh0NyAxOGwyNDkgMjQ5bC05NCA5NHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTAxOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek03MDQgOTAwaC0yMDhxLTIwIDAgLTMyIC0xNC41dC04IC0zNC41bDU4IC0zMDJxNCAtMjAgMjEuNSAtMzQuNSB0MzcuNSAtMTQuNWg1NHEyMCAwIDM3LjUgMTQuNXQyMS41IDM0LjVsNTggMzAycTQgMjAgLTggMzQuNXQtMzIgMTQuNXpNNjc1IDQwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MTUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTAyOyIgZD0iTTI2MCAxMjAwcTkgMCAxOSAtMnQxNSAtNGw1IC0ycTIyIC0xMCA0NCAtMjNsMTk2IC0xMThxMjEgLTEzIDM2IC0yNHEyOSAtMjEgMzcgLTEycTExIDEzIDQ5IDM1bDE5NiAxMThxMjIgMTMgNDUgMjNxMTcgNyAzOCA3cTIzIDAgNDcgLTE2LjV0MzcgLTMzLjVsMTMgLTE2cTE0IC0yMSAxOCAtNDVsMjUgLTEyM2w4IC00NHExIC05IDguNSAtMTQuNXQxNy41IC01LjVoNjFxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MCBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTE3NWgtNDAwdjMwMGgtMjAwdi0zMDBoLTQwMHYxNzVxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNjFxMTEgMCAxOCAzdDcgOHEwIDQgOSA1MmwyNSAxMjhxNSAyNSAxOSA0NXEyIDMgNSA3dDEzLjUgMTV0MjEuNSAxOS41dDI2LjUgMTUuNSB0MjkuNSA3ek05MTUgMTA3OWwtMTY2IC0xNjJxLTcgLTcgLTUgLTEydDEyIC01aDIxOXExMCAwIDE1IDd0MiAxN2wtNTEgMTQ5cS0zIDEwIC0xMSAxMnQtMTUgLTZ6TTQ2MyA5MTdsLTE3NyAxNTdxLTggNyAtMTYgNXQtMTEgLTEybC01MSAtMTQzcS0zIC0xMCAyIC0xN3QxNSAtN2gyMzFxMTEgMCAxMi41IDV0LTUuNSAxMnpNNTAwIDBoLTM3NXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM3NWg0MDB2LTQwMHpNMTEwMCA0MDB2LTM3NSBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0zNzV2NDAwaDQwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTAzOyIgZD0iTTExNjUgMTE5MHE4IDMgMjEgLTYuNXQxMyAtMTcuNXEtMiAtMTc4IC0yNC41IC0zMjMuNXQtNTUuNSAtMjQ1LjV0LTg3IC0xNzQuNXQtMTAyLjUgLTExOC41dC0xMTggLTY4LjV0LTExOC41IC0zM3QtMTIwIC00LjV0LTEwNSA5LjV0LTkwIDE2LjVxLTYxIDEyIC03OCAxMXEtNCAxIC0xMi41IDB0LTM0IC0xNC41dC01Mi41IC00MC41bC0xNTMgLTE1M3EtMjYgLTI0IC0zNyAtMTQuNXQtMTEgNDMuNXEwIDY0IDQyIDEwMnE4IDggNTAuNSA0NSB0NjYuNSA1OHExOSAxNyAzNSA0N3QxMyA2MXEtOSA1NSAtMTAgMTAyLjV0NyAxMTF0MzcgMTMwdDc4IDEyOS41cTM5IDUxIDgwIDg4dDg5LjUgNjMuNXQ5NC41IDQ1dDExMy41IDM2dDEyOSAzMXQxNTcuNSAzN3QxODIgNDcuNXpNMTExNiAxMDk4cS04IDkgLTIyLjUgLTN0LTQ1LjUgLTUwcS0zOCAtNDcgLTExOSAtMTAzLjV0LTE0MiAtODkuNWwtNjIgLTMzcS01NiAtMzAgLTEwMiAtNTd0LTEwNCAtNjh0LTEwMi41IC04MC41dC04NS41IC05MSB0LTY0IC0xMDQuNXEtMjQgLTU2IC0zMSAtODZ0MiAtMzJ0MzEuNSAxNy41dDU1LjUgNTkuNXEyNSAzMCA5NCA3NS41dDEyNS41IDc3LjV0MTQ3LjUgODFxNzAgMzcgMTE4LjUgNjl0MTAyIDc5LjV0OTkgMTExdDg2LjUgMTQ4LjVxMjIgNTAgMjQgNjB0LTYgMTl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNDsiIGQ9Ik02NTMgMTIzMXEtMzkgLTY3IC01NC41IC0xMzF0LTEwLjUgLTExNC41dDI0LjUgLTk2LjV0NDcuNSAtODB0NjMuNSAtNjIuNXQ2OC41IC00Ni41dDY1IC0zMHEtNCA3IC0xNy41IDM1dC0xOC41IDM5LjV0LTE3IDM5LjV0LTE3IDQzdC0xMyA0MnQtOS41IDQ0LjV0LTIgNDJ0NCA0M3QxMy41IDM5dDIzIDM4LjVxOTYgLTQyIDE2NSAtMTA3LjV0MTA1IC0xMzh0NTIgLTE1NnQxMyAtMTU5dC0xOSAtMTQ5LjVxLTEzIC01NSAtNDQgLTEwNi41IHQtNjggLTg3dC03OC41IC02NC41dC03Mi41IC00NXQtNTMgLTIycS03MiAtMjIgLTEyNyAtMTFxLTMxIDYgLTEzIDE5cTYgMyAxNyA3cTEzIDUgMzIuNSAyMXQ0MSA0NHQzOC41IDYzLjV0MjEuNSA4MS41dC02LjUgOTQuNXQtNTAgMTA3dC0xMDQgMTE1LjVxMTAgLTEwNCAtMC41IC0xODl0LTM3IC0xNDAuNXQtNjUgLTkzdC04NCAtNTJ0LTkzLjUgLTExdC05NSAyNC41cS04MCAzNiAtMTMxLjUgMTE0dC01My41IDE3MXEtMiAyMyAwIDQ5LjUgdDQuNSA1Mi41dDEzLjUgNTZ0MjcuNSA2MHQ0NiA2NC41dDY5LjUgNjguNXEtOCAtNTMgLTUgLTEwMi41dDE3LjUgLTkwdDM0IC02OC41dDQ0LjUgLTM5dDQ5IC0ycTMxIDEzIDM4LjUgMzZ0LTQuNSA1NXQtMjkgNjQuNXQtMzYgNzV0LTI2IDc1LjVxLTE1IDg1IDIgMTYxLjV0NTMuNSAxMjguNXQ4NS41IDkyLjV0OTMuNSA2MXQ4MS41IDI1LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNTsiIGQ9Ik02MDAgMTA5NHE4MiAwIDE2MC41IC0yMi41dDE0MCAtNTl0MTE2LjUgLTgyLjV0OTQuNSAtOTV0NjggLTk1dDQyLjUgLTgyLjV0MTQgLTU3LjV0LTE0IC01Ny41dC00MyAtODIuNXQtNjguNSAtOTV0LTk0LjUgLTk1dC0xMTYuNSAtODIuNXQtMTQwIC01OXQtMTU5LjUgLTIyLjV0LTE1OS41IDIyLjV0LTE0MCA1OXQtMTE2LjUgODIuNXQtOTQuNSA5NXQtNjguNSA5NXQtNDMgODIuNXQtMTQgNTcuNXQxNCA1Ny41dDQyLjUgODIuNXQ2OCA5NSB0OTQuNSA5NXQxMTYuNSA4Mi41dDE0MCA1OXQxNjAuNSAyMi41ek04ODggODI5cS0xNSAxNSAtMTggMTJ0NSAtMjJxMjUgLTU3IDI1IC0xMTlxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4dC0yMTIgODh0LTg4IDIxMnEwIDU5IDIzIDExNHE4IDE5IDQuNSAyMnQtMTcuNSAtMTJxLTcwIC02OSAtMTYwIC0xODRxLTEzIC0xNiAtMTUgLTQwLjV0OSAtNDIuNXEyMiAtMzYgNDcgLTcxdDcwIC04MnQ5Mi41IC04MXQxMTMgLTU4LjV0MTMzLjUgLTI0LjUgdDEzMy41IDI0dDExMyA1OC41dDkyLjUgODEuNXQ3MCA4MS41dDQ3IDcwLjVxMTEgMTggOSA0Mi41dC0xNCA0MS41cS05MCAxMTcgLTE2MyAxODl6TTQ0OCA3MjdsLTM1IC0zNnEtMTUgLTE1IC0xOS41IC0zOC41dDQuNSAtNDEuNXEzNyAtNjggOTMgLTExNnExNiAtMTMgMzguNSAtMTF0MzYuNSAxN2wzNSAzNHExNCAxNSAxMi41IDMzLjV0LTE2LjUgMzMuNXEtNDQgNDQgLTg5IDExN3EtMTEgMTggLTI4IDIwdC0zMiAtMTJ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNjsiIGQ9Ik01OTIgMGgtMTQ4bDMxIDEyMHEtOTEgMjAgLTE3NS41IDY4LjV0LTE0My41IDEwNi41dC0xMDMuNSAxMTl0LTY2LjUgMTEwdC0yMiA3NnEwIDIxIDE0IDU3LjV0NDIuNSA4Mi41dDY4IDk1dDk0LjUgOTV0MTE2LjUgODIuNXQxNDAgNTl0MTYwLjUgMjIuNXE2MSAwIDEyNiAtMTVsMzIgMTIxaDE0OHpNOTQ0IDc3MGw0NyAxODFxMTA4IC04NSAxNzYuNSAtMTkydDY4LjUgLTE1OXEwIC0yNiAtMTkuNSAtNzF0LTU5LjUgLTEwMnQtOTMgLTExMiB0LTEyOSAtMTA0LjV0LTE1OCAtNzUuNWw0NiAxNzNxNzcgNDkgMTM2IDExN3Q5NyAxMzFxMTEgMTggOSA0Mi41dC0xNCA0MS41cS01NCA3MCAtMTA3IDEzMHpNMzEwIDgyNHEtNzAgLTY5IC0xNjAgLTE4NHEtMTMgLTE2IC0xNSAtNDAuNXQ5IC00Mi41cTE4IC0zMCAzOSAtNjB0NTcgLTcwLjV0NzQgLTczdDkwIC02MXQxMDUgLTQxLjVsNDEgMTU0cS0xMDcgMTggLTE3OC41IDEwMS41dC03MS41IDE5My41cTAgNTkgMjMgMTE0cTggMTkgNC41IDIyIHQtMTcuNSAtMTJ6TTQ0OCA3MjdsLTM1IC0zNnEtMTUgLTE1IC0xOS41IC0zOC41dDQuNSAtNDEuNXEzNyAtNjggOTMgLTExNnExNiAtMTMgMzguNSAtMTF0MzYuNSAxN2wxMiAxMWwyMiA4NmwtMyA0cS00NCA0NCAtODkgMTE3cS0xMSAxOCAtMjggMjB0LTMyIC0xMnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTA3OyIgZD0iTS05MCAxMDBsNjQyIDEwNjZxMjAgMzEgNDggMjguNXQ0OCAtMzUuNWw2NDIgLTEwNTZxMjEgLTMyIDcuNSAtNjcuNXQtNTAuNSAtMzUuNWgtMTI5NHEtMzcgMCAtNTAuNSAzNHQ3LjUgNjZ6TTE1NSAyMDBoMzQ1djc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzVoMzQ1bC00NDUgNzIzek00OTYgNzAwaDIwOHEyMCAwIDMyIC0xNC41dDggLTM0LjVsLTU4IC0yNTIgcS00IC0yMCAtMjEuNSAtMzQuNXQtMzcuNSAtMTQuNWgtNTRxLTIwIDAgLTM3LjUgMTQuNXQtMjEuNSAzNC41bC01OCAyNTJxLTQgMjAgOCAzNC41dDMyIDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwODsiIGQ9Ik02NTAgMTIwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnYtMzM5bDM2MyAtMzI1cTE1IC0xNCAyNiAtMzguNXQxMSAtNDQuNXYtNDFxMCAtMjAgLTEyIC0yNi41dC0yOSA1LjVsLTM1OSAyNDl2LTI2M3ExMDAgLTkzIDEwMCAtMTEzdi02NHEwIC0yMSAtMTMgLTI5dC0zMiAxbC0yMDUgMTI4bC0yMDUgLTEyOHEtMTkgLTkgLTMyIC0xdC0xMyAyOXY2NHEwIDIwIDEwMCAxMTN2MjYzbC0zNTkgLTI0OXEtMTcgLTEyIC0yOSAtNS41dC0xMiAyNi41djQxIHEwIDIwIDExIDQ0LjV0MjYgMzguNWwzNjMgMzI1djMzOXEwIDYyIDQ0IDEwNnQxMDYgNDR6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwOTsiIGQ9Ik04NTAgMTIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaDUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoLTExMDB2MTUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGg1MDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMTAwIDgwMHYtNzUwcTAgLTIxIC0xNC41IC0zNS41IHQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NzUwaDExMDB6TTEwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTMwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTUwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTcwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTkwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTMwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTUwMCA0MDAgdi0xMDBoMTAwdjEwMGgtMTAwek03MDAgNDAwdi0xMDBoMTAwdjEwMGgtMTAwek05MDAgNDAwdi0xMDBoMTAwdjEwMGgtMTAwek0xMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek0zMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek01MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek03MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek05MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTA7IiBkPSJNMTEzNSAxMTY1bDI0OSAtMjMwcTE1IC0xNCAxNSAtMzV0LTE1IC0zNWwtMjQ5IC0yMzBxLTE0IC0xNCAtMjQuNSAtMTB0LTEwLjUgMjV2MTUwaC0xNTlsLTYwMCAtNjAwaC0yOTFxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjA5bDYwMCA2MDBoMjQxdjE1MHEwIDIxIDEwLjUgMjV0MjQuNSAtMTB6TTUyMiA4MTlsLTE0MSAtMTQxbC0xMjIgMTIyaC0yMDlxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDI5MXpNMTEzNSA1NjVsMjQ5IC0yMzBxMTUgLTE0IDE1IC0zNXQtMTUgLTM1bC0yNDkgLTIzMHEtMTQgLTE0IC0yNC41IC0xMHQtMTAuNSAyNXYxNTBoLTI0MWwtMTgxIDE4MWwxNDEgMTQxbDEyMiAtMTIyaDE1OXYxNTBxMCAyMSAxMC41IDI1dDI0LjUgLTEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTE7IiBkPSJNMTAwIDExMDBoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC01OTZsLTMwNCAtMzAwdjMwMGgtMTAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXY2MDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTI7IiBkPSJNMTUwIDEyMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yNTBoLTMwMHYyNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTIwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTI1MGgtMzAwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTExMDAgODAwdi0zMDBxMCAtNDEgLTMgLTc3LjV0LTE1IC04OS41dC0zMiAtOTZ0LTU4IC04OXQtODkgLTc3dC0xMjkgLTUxdC0xNzQgLTIwdC0xNzQgMjAgdC0xMjkgNTF0LTg5IDc3dC01OCA4OXQtMzIgOTZ0LTE1IDg5LjV0LTMgNzcuNXYzMDBoMzAwdi0yNTB2LTI3di00Mi41dDEuNSAtNDF0NSAtMzh0MTAgLTM1dDE2LjUgLTMwdDI1LjUgLTI0LjV0MzUgLTE5dDQ2LjUgLTEydDYwIC00dDYwIDQuNXQ0Ni41IDEyLjV0MzUgMTkuNXQyNSAyNS41dDE3IDMwLjV0MTAgMzV0NSAzOHQyIDQwLjV0LTAuNSA0MnYyNXYyNTBoMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTM7IiBkPSJNMTEwMCA0MTFsLTE5OCAtMTk5bC0zNTMgMzUzbC0zNTMgLTM1M2wtMTk3IDE5OWw1NTEgNTUxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTQ7IiBkPSJNMTEwMSA3ODlsLTU1MCAtNTUxbC01NTEgNTUxbDE5OCAxOTlsMzUzIC0zNTNsMzUzIDM1M3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTE1OyIgZD0iTTQwNCAxMDAwaDc0NnEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTUxaDE1MHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNWwtMjMwIC0yNDlxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI0OXEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNWgxNTB2NDAxaC0zODF6TTEzNSA5ODRsMjMwIC0yNDlxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNWgtMTUwdi00MDBoMzg1bDIxNSAtMjAwaC03NTBxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXY1NTBoLTE1MHEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIzMCAyNDlxMTQgMTUgMzUgMTV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTY7IiBkPSJNNTYgMTIwMGg5NHExNyAwIDMxIC0xMXQxOCAtMjdsMzggLTE2Mmg4OTZxMjQgMCAzOSAtMTguNXQxMCAtNDIuNWwtMTAwIC00NzVxLTUgLTIxIC0yNyAtNDIuNXQtNTUgLTIxLjVoLTYzM2w0OCAtMjAwaDUzNXEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41dC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MGgtMzAwdi01MCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjV0LTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaC0zMXEtMTggMCAtMzIuNSAxMHQtMjAuNSAxOWwtNSAxMGwtMjAxIDk2MWgtNTRxLTIwIDAgLTM1IDE0LjV0LTE1IDM1LjV0MTUgMzUuNXQzNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTc7IiBkPSJNMTIwMCAxMDAwdi0xMDBoLTEyMDB2MTAwaDIwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41aDUwMHpNMCA4MDBoMTIwMHYtODAwaC0xMjAwdjgwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTE4OyIgZD0iTTIwMCA4MDBsLTIwMCAtNDAwdjYwMGgyMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDMwMHE0MiAwIDcxIC0yOS41dDI5IC03MC41aDUwMHYtMjAwaC0xMDAwek0xNTAwIDcwMGwtMzAwIC03MDBoLTEyMDBsMzAwIDcwMGgxMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTk7IiBkPSJNNjM1IDExODRsMjMwIC0yNDlxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNWgtMTUwdi02MDFoMTUwcTIxIDAgMjUgLTEwLjV0LTEwIC0yNC41bC0yMzAgLTI0OXEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0yMzAgMjQ5cS0xNCAxNCAtMTAgMjQuNXQyNSAxMC41aDE1MHY2MDFoLTE1MHEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIzMCAyNDlxMTQgMTUgMzUgMTV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMjA7IiBkPSJNOTM2IDg2NGwyNDkgLTIyOXExNCAtMTUgMTQgLTM1LjV0LTE0IC0zNS41bC0yNDkgLTIyOXEtMTUgLTE1IC0yNS41IC0xMC41dC0xMC41IDI0LjV2MTUxaC02MDB2LTE1MXEwIC0yMCAtMTAuNSAtMjQuNXQtMjUuNSAxMC41bC0yNDkgMjI5cS0xNCAxNSAtMTQgMzUuNXQxNCAzNS41bDI0OSAyMjlxMTUgMTUgMjUuNSAxMC41dDEwLjUgLTI1LjV2LTE0OWg2MDB2MTQ5cTAgMjEgMTAuNSAyNS41dDI1LjUgLTEwLjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMTsiIGQ9Ik0xMTY5IDQwMGwtMTcyIDczMnEtNSAyMyAtMjMgNDUuNXQtMzggMjIuNWgtNjcycS0yMCAwIC0zOCAtMjB0LTIzIC00MWwtMTcyIC03MzloMTEzOHpNMTEwMCAzMDBoLTEwMDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTEwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoMTAwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41ek04MDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwIHpNMTAwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMjsiIGQ9Ik0xMTUwIDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTg1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNXQtMzUuNSAxNC41dC0xNC41IDM1LjV2ODUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTAwMCAyMDBsLTY3NSAyMDBoLTM4bDQ3IC0yNzZxMyAtMTYgLTUuNSAtMjB0LTI5LjUgLTRoLTdoLTg0cS0yMCAwIC0zNC41IDE0dC0xOC41IDM1cS01NSAzMzcgLTU1IDM1MXYyNTB2NnEwIDE2IDEgMjMuNXQ2LjUgMTQgdDE3LjUgNi41aDIwMGw2NzUgMjUwdi04NTB6TTAgNzUwdi0yNTBxLTQgMCAtMTEgMC41dC0yNCA2dC0zMCAxNXQtMjQgMzB0LTExIDQ4LjV2NTBxMCAyNiAxMC41IDQ2dDI1IDMwdDI5IDE2dDI1LjUgN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTIzOyIgZD0iTTU1MyAxMjAwaDk0cTIwIDAgMjkgLTEwLjV0MyAtMjkuNWwtMTggLTM3cTgzIC0xOSAxNDQgLTgyLjV0NzYgLTE0MC41bDYzIC0zMjdsMTE4IC0xNzNoMTdxMTkgMCAzMyAtMTQuNXQxNCAtMzV0LTEzIC00MC41dC0zMSAtMjdxLTggLTQgLTIzIC05LjV0LTY1IC0xOS41dC0xMDMgLTI1dC0xMzIuNSAtMjB0LTE1OC41IC05cS01NyAwIC0xMTUgNXQtMTA0IDEydC04OC41IDE1LjV0LTczLjUgMTcuNXQtNTQuNSAxNnQtMzUuNSAxMmwtMTEgNCBxLTE4IDggLTMxIDI4dC0xMyA0MC41dDE0IDM1dDMzIDE0LjVoMTdsMTE4IDE3M2w2MyAzMjdxMTUgNzcgNzYgMTQwdDE0NCA4M2wtMTggMzJxLTYgMTkgMy41IDMydDI4LjUgMTN6TTQ5OCAxMTBxNTAgLTYgMTAyIC02cTUzIDAgMTAyIDZxLTEyIC00OSAtMzkuNSAtNzkuNXQtNjIuNSAtMzAuNXQtNjMgMzAuNXQtMzkgNzkuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTI0OyIgZD0iTTgwMCA5NDZsMjI0IDc4bC03OCAtMjI0bDIzNCAtNDVsLTE4MCAtMTU1bDE4MCAtMTU1bC0yMzQgLTQ1bDc4IC0yMjRsLTIyNCA3OGwtNDUgLTIzNGwtMTU1IDE4MGwtMTU1IC0xODBsLTQ1IDIzNGwtMjI0IC03OGw3OCAyMjRsLTIzNCA0NWwxODAgMTU1bC0xODAgMTU1bDIzNCA0NWwtNzggMjI0bDIyNCAtNzhsNDUgMjM0bDE1NSAtMTgwbDE1NSAxODB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNTsiIGQ9Ik02NTAgMTIwMGg1MHE0MCAwIDcwIC00MC41dDMwIC04NC41di0xNTBsLTI4IC0xMjVoMzI4cTQwIDAgNzAgLTQwLjV0MzAgLTg0LjV2LTEwMHEwIC00NSAtMjkgLTc0bC0yMzggLTM0NHEtMTYgLTI0IC0zOCAtNDAuNXQtNDUgLTE2LjVoLTI1MHEtNyAwIC00MiAyNXQtNjYgNTBsLTMxIDI1aC02MXEtNDUgMCAtNzIuNSAxOHQtMjcuNSA1N3Y0MDBxMCAzNiAyMCA2M2wxNDUgMTk2bDk2IDE5OHExMyAyOCAzNy41IDQ4dDUxLjUgMjB6IE02NTAgMTEwMGwtMTAwIC0yMTJsLTE1MCAtMjEzdi0zNzVoMTAwbDEzNiAtMTAwaDIxNGwyNTAgMzc1djEyNWgtNDUwbDUwIDIyNXYxNzVoLTUwek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTI2OyIgZD0iTTYwMCAxMTAwaDI1MHEyMyAwIDQ1IC0xNi41dDM4IC00MC41bDIzOCAtMzQ0cTI5IC0yOSAyOSAtNzR2LTEwMHEwIC00NCAtMzAgLTg0LjV0LTcwIC00MC41aC0zMjhxMjggLTExOCAyOCAtMTI1di0xNTBxMCAtNDQgLTMwIC04NC41dC03MCAtNDAuNWgtNTBxLTI3IDAgLTUxLjUgMjB0LTM3LjUgNDhsLTk2IDE5OGwtMTQ1IDE5NnEtMjAgMjcgLTIwIDYzdjQwMHEwIDM5IDI3LjUgNTd0NzIuNSAxOGg2MXExMjQgMTAwIDEzOSAxMDB6IE01MCAxMDAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTYzNiAxMDAwbC0xMzYgLTEwMGgtMTAwdi0zNzVsMTUwIC0yMTNsMTAwIC0yMTJoNTB2MTc1bC01MCAyMjVoNDUwdjEyNWwtMjUwIDM3NWgtMjE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMjc7IiBkPSJNMzU2IDg3M2wzNjMgMjMwcTMxIDE2IDUzIC02bDExMCAtMTEycTEzIC0xMyAxMy41IC0zMnQtMTEuNSAtMzRsLTg0IC0xMjFoMzAycTg0IDAgMTM4IC0zOHQ1NCAtMTEwdC01NSAtMTExdC0xMzkgLTM5aC0xMDZsLTEzMSAtMzM5cS02IC0yMSAtMTkuNSAtNDF0LTI4LjUgLTIwaC0zNDJxLTcgMCAtOTAgODF0LTgzIDk0djUyNXEwIDE3IDE0IDM1LjV0MjggMjguNXpNNDAwIDc5MnYtNTAzbDEwMCAtODloMjkzbDEzMSAzMzkgcTYgMjEgMTkuNSA0MXQyOC41IDIwaDIwM3EyMSAwIDMwLjUgMjV0MC41IDUwdC0zMSAyNWgtNDU2aC03aC02aC01LjV0LTYgMC41dC01IDEuNXQtNSAydC00IDIuNXQtNCA0dC0yLjUgNC41cS0xMiAyNSA1IDQ3bDE0NiAxODNsLTg2IDgzek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NTAwIHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyODsiIGQ9Ik00NzUgMTEwM2wzNjYgLTIzMHEyIC0xIDYgLTMuNXQxNCAtMTAuNXQxOCAtMTYuNXQxNC41IC0yMHQ2LjUgLTIyLjV2LTUyNXEwIC0xMyAtODYgLTk0dC05MyAtODFoLTM0MnEtMTUgMCAtMjguNSAyMHQtMTkuNSA0MWwtMTMxIDMzOWgtMTA2cS04NSAwIC0xMzkuNSAzOXQtNTQuNSAxMTF0NTQgMTEwdDEzOCAzOGgzMDJsLTg1IDEyMXEtMTEgMTUgLTEwLjUgMzR0MTMuNSAzMmwxMTAgMTEycTIyIDIyIDUzIDZ6TTM3MCA5NDVsMTQ2IC0xODMgcTE3IC0yMiA1IC00N3EtMiAtMiAtMy41IC00LjV0LTQgLTR0LTQgLTIuNXQtNSAtMnQtNSAtMS41dC02IC0wLjVoLTZoLTYuNWgtNmgtNDc1di0xMDBoMjIxcTE1IDAgMjkgLTIwdDIwIC00MWwxMzAgLTMzOWgyOTRsMTA2IDg5djUwM2wtMzQyIDIzNnpNMTA1MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjUgdjUwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyOTsiIGQ9Ik01NTAgMTI5NHE3MiAwIDExMSAtNTV0MzkgLTEzOXYtMTA2bDMzOSAtMTMxcTIxIC02IDQxIC0xOS41dDIwIC0yOC41di0zNDJxMCAtNyAtODEgLTkwdC05NCAtODNoLTUyNXEtMTcgMCAtMzUuNSAxNHQtMjguNSAyOGwtOSAxNGwtMjMwIDM2M3EtMTYgMzEgNiA1M2wxMTIgMTEwcTEzIDEzIDMyIDEzLjV0MzQgLTExLjVsMTIxIC04NHYzMDJxMCA4NCAzOCAxMzh0MTEwIDU0ek02MDAgOTcydjIwM3EwIDIxIC0yNSAzMC41dC01MCAwLjUgdC0yNSAtMzF2LTQ1NnYtN3YtNnYtNS41dC0wLjUgLTZ0LTEuNSAtNXQtMiAtNXQtMi41IC00dC00IC00dC00LjUgLTIuNXEtMjUgLTEyIC00NyA1bC0xODMgMTQ2bC04MyAtODZsMjM2IC0zMzloNTAzbDg5IDEwMHYyOTNsLTMzOSAxMzFxLTIxIDYgLTQxIDE5LjV0LTIwIDI4LjV6TTQ1MCAyMDBoNTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTUwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMDsiIGQ9Ik0zNTAgMTEwMGg1MDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41ek02MDAgMzA2di0xMDZxMCAtODQgLTM5IC0xMzl0LTExMSAtNTV0LTExMCA1NHQtMzggMTM4djMwMmwtMTIxIC04NHEtMTUgLTEyIC0zNCAtMTEuNXQtMzIgMTMuNWwtMTEyIDExMCBxLTIyIDIyIC02IDUzbDIzMCAzNjNxMSAyIDMuNSA2dDEwLjUgMTMuNXQxNi41IDE3dDIwIDEzLjV0MjIuNSA2aDUyNXExMyAwIDk0IC04M3Q4MSAtOTB2LTM0MnEwIC0xNSAtMjAgLTI4LjV0LTQxIC0xOS41ek0zMDggOTAwbC0yMzYgLTMzOWw4MyAtODZsMTgzIDE0NnEyMiAxNyA0NyA1cTIgLTEgNC41IC0yLjV0NCAtNHQyLjUgLTR0MiAtNXQxLjUgLTV0MC41IC02di01LjV2LTZ2LTd2LTQ1NnEwIC0yMiAyNSAtMzF0NTAgMC41dDI1IDMwLjUgdjIwM3EwIDE1IDIwIDI4LjV0NDEgMTkuNWwzMzkgMTMxdjI5M2wtODkgMTAwaC01MDN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMTsiIGQ9Ik02MDAgMTE3OHExMTggMCAyMjUgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNXQtNDUuNSAtMjI1dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjUgLTQ1LjV0LTIyNSA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjV0NDUuNSAyMjV0MTIzIDE4NC41dDE4NC41IDEyM3QyMjUgNDUuNXpNOTE0IDYzMmwtMjc1IDIyM3EtMTYgMTMgLTI3LjUgOHQtMTEuNSAtMjZ2LTEzN2gtMjc1IHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTE1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDI3NXYtMTM3cTAgLTIxIDExLjUgLTI2dDI3LjUgOGwyNzUgMjIzcTE2IDEzIDE2IDMydC0xNiAzMnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTMyOyIgZD0iTTYwMCAxMTc4cTExOCAwIDIyNSAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI1dC00NS41IC0yMjV0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNSAtNDUuNXQtMjI1IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNXQ0NS41IDIyNXQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNSA0NS41ek01NjEgODU1bC0yNzUgLTIyM3EtMTYgLTEzIC0xNiAtMzJ0MTYgLTMybDI3NSAtMjIzcTE2IC0xMyAyNy41IC04IHQxMS41IDI2djEzN2gyNzVxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXYxNTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41aC0yNzV2MTM3cTAgMjEgLTExLjUgMjZ0LTI3LjUgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMzsiIGQ9Ik02MDAgMTE3OHExMTggMCAyMjUgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNXQtNDUuNSAtMjI1dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjUgLTQ1LjV0LTIyNSA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjV0NDUuNSAyMjV0MTIzIDE4NC41dDE4NC41IDEyM3QyMjUgNDUuNXpNODU1IDYzOWwtMjIzIDI3NXEtMTMgMTYgLTMyIDE2dC0zMiAtMTZsLTIyMyAtMjc1cS0xMyAtMTYgLTggLTI3LjUgdDI2IC0xMS41aDEzN3YtMjc1cTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2Mjc1aDEzN3EyMSAwIDI2IDExLjV0LTggMjcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTM0OyIgZD0iTTYwMCAxMTc4cTExOCAwIDIyNSAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI1dC00NS41IC0yMjV0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNSAtNDUuNXQtMjI1IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNXQ0NS41IDIyNXQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNSA0NS41ek02NzUgOTAwaC0xNTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di0yNzVoLTEzN3EtMjEgMCAtMjYgLTExLjUgdDggLTI3LjVsMjIzIC0yNzVxMTMgLTE2IDMyIC0xNnQzMiAxNmwyMjMgMjc1cTEzIDE2IDggMjcuNXQtMjYgMTEuNWgtMTM3djI3NXEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzNTsiIGQ9Ik02MDAgMTE3NnExMTYgMCAyMjIuNSAtNDZ0MTg0IC0xMjMuNXQxMjMuNSAtMTg0dDQ2IC0yMjIuNXQtNDYgLTIyMi41dC0xMjMuNSAtMTg0dC0xODQgLTEyMy41dC0yMjIuNSAtNDZ0LTIyMi41IDQ2dC0xODQgMTIzLjV0LTEyMy41IDE4NHQtNDYgMjIyLjV0NDYgMjIyLjV0MTIzLjUgMTg0dDE4NCAxMjMuNXQyMjIuNSA0NnpNNjI3IDExMDFxLTE1IC0xMiAtMzYuNSAtMjAuNXQtMzUuNSAtMTJ0LTQzIC04dC0zOSAtNi41IHEtMTUgLTMgLTQ1LjUgMHQtNDUuNSAtMnEtMjAgLTcgLTUxLjUgLTI2LjV0LTM0LjUgLTM0LjVxLTMgLTExIDYuNSAtMjIuNXQ4LjUgLTE4LjVxLTMgLTM0IC0yNy41IC05MXQtMjkuNSAtNzlxLTkgLTM0IDUgLTkzdDggLTg3cTAgLTkgMTcgLTQ0LjV0MTYgLTU5LjVxMTIgMCAyMyAtNXQyMy41IC0xNXQxOS41IC0xNHExNiAtOCAzMyAtMTV0NDAuNSAtMTV0MzQuNSAtMTJxMjEgLTkgNTIuNSAtMzJ0NjAgLTM4dDU3LjUgLTExIHE3IC0xNSAtMyAtMzR0LTIyLjUgLTQwdC05LjUgLTM4cTEzIC0yMSAyMyAtMzQuNXQyNy41IC0yNy41dDM2LjUgLTE4cTAgLTcgLTMuNSAtMTZ0LTMuNSAtMTR0NSAtMTdxMTA0IC0yIDIyMSAxMTJxMzAgMjkgNDYuNSA0N3QzNC41IDQ5dDIxIDYzcS0xMyA4IC0zNyA4LjV0LTM2IDcuNXEtMTUgNyAtNDkuNSAxNXQtNTEuNSAxOXEtMTggMCAtNDEgLTAuNXQtNDMgLTEuNXQtNDIgLTYuNXQtMzggLTE2LjVxLTUxIC0zNSAtNjYgLTEyIHEtNCAxIC0zLjUgMjUuNXQwLjUgMjUuNXEtNiAxMyAtMjYuNSAxNy41dC0yNC41IDYuNXExIDE1IC0wLjUgMzAuNXQtNyAyOHQtMTguNSAxMS41dC0zMSAtMjFxLTIzIC0yNSAtNDIgNHEtMTkgMjggLTggNThxNiAxNiAyMiAyMnE2IC0xIDI2IC0xLjV0MzMuNSAtNHQxOS41IC0xMy41cTcgLTEyIDE4IC0yNHQyMS41IC0yMC41dDIwIC0xNXQxNS41IC0xMC41bDUgLTNxMiAxMiA3LjUgMzAuNXQ4IDM0LjV0LTAuNSAzMnEtMyAxOCAzLjUgMjkgdDE4IDIyLjV0MTUuNSAyNC41cTYgMTQgMTAuNSAzNXQ4IDMxdDE1LjUgMjIuNXQzNCAyMi41cS02IDE4IDEwIDM2cTggMCAyNCAtMS41dDI0LjUgLTEuNXQyMCA0LjV0MjAuNSAxNS41cS0xMCAyMyAtMzEgNDIuNXQtMzcuNSAyOS41dC00OSAyN3QtNDMuNSAyM3EwIDEgMiA4dDMgMTEuNXQxLjUgMTAuNXQtMSA5LjV0LTQuNSA0LjVxMzEgLTEzIDU4LjUgLTE0LjV0MzguNSAyLjVsMTIgNXE1IDI4IC05LjUgNDZ0LTM2LjUgMjR0LTUwIDE1IHQtNDEgMjBxLTE4IC00IC0zNyAwek02MTMgOTk0cTAgLTE3IDggLTQydDE3IC00NXQ5IC0yM3EtOCAxIC0zOS41IDUuNXQtNTIuNSAxMHQtMzcgMTYuNXEzIDExIDE2IDI5LjV0MTYgMjUuNXExMCAtMTAgMTkgLTEwdDE0IDZ0MTMuNSAxNC41dDE2LjUgMTIuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTM2OyIgZD0iTTc1NiAxMTU3cTE2NCA5MiAzMDYgLTlsLTI1OSAtMTM4bDE0NSAtMjMybDI1MSAxMjZxNiAtODkgLTM0IC0xNTYuNXQtMTE3IC0xMTAuNXEtNjAgLTM0IC0xMjcgLTM5LjV0LTEyNiAxNi41bC01OTYgLTU5NnEtMTUgLTE2IC0zNi41IC0xNnQtMzYuNSAxNmwtMTExIDExMHEtMTUgMTUgLTE1IDM2LjV0MTUgMzcuNWw2MDAgNTk5cS0zNCAxMDEgNS41IDIwMS41dDEzNS41IDE1NC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzc7IiBob3Jpei1hZHYteD0iMTIyMCIgZD0iTTEwMCAxMTk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNMTEwMCAxMDk2aC0yMDB2LTEwMGgyMDB2MTAwek0xMDAgNzk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMCBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTExMDAgNjk2aC01MDB2LTEwMGg1MDB2MTAwek0xMDAgMzk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNMTEwMCAyOTZoLTMwMHYtMTAwaDMwMHYxMDB6ICIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzg7IiBkPSJNMTUwIDEyMDBoOTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41dC0xNC41IC0zNS41dC0zNS41IC0xNC41aC05MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTcwMCA1MDB2LTMwMGwtMjAwIC0yMDB2NTAwbC0zNTAgNTAwaDkwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTM5OyIgZD0iTTUwMCAxMjAwaDIwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwaDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNDAwaC01MDB2MTAwaC0yMDB2LTEwMGgtNTAwdjQwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwdjEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTUwMCAxMTAwdi0xMDBoMjAwdjEwMGgtMjAwek0xMjAwIDQwMHYtMjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwIHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MjAwaDEyMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MDsiIGQ9Ik01MCAxMjAwaDMwMHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNWwtOTQgLTk0bDE5OSAtMTk5cTcgLTggNyAtMTh0LTcgLTE4bC0xMDYgLTEwNnEtOCAtNyAtMTggLTd0LTE4IDdsLTE5OSAxOTlsLTk0IC05NHEtMTQgLTE0IC0yNC41IC0xMHQtMTAuNSAyNXYzMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTIwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTk0IDk0IGwtMTk5IC0xOTlxLTggLTcgLTE4IC03dC0xOCA3bC0xMDYgMTA2cS03IDggLTcgMTh0NyAxOGwxOTkgMTk5bC05NCA5NHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXpNMzY0IDQ3MGwxMDYgLTEwNnE3IC04IDcgLTE4dC03IC0xOGwtMTk5IC0xOTlsOTQgLTk0cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTMwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MzAwcTAgMjEgMTAuNSAyNXQyNC41IC0xMGw5NCAtOTRsMTk5IDE5OSBxOCA3IDE4IDd0MTggLTd6TTEwNzEgMjcxbDk0IDk0cTE0IDE0IDI0LjUgMTB0MTAuNSAtMjV2LTMwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0yNSAxMC41dDEwIDI0LjVsOTQgOTRsLTE5OSAxOTlxLTcgOCAtNyAxOHQ3IDE4bDEwNiAxMDZxOCA3IDE4IDd0MTggLTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MTsiIGQ9Ik01OTYgMTE5MnExMjEgMCAyMzEuNSAtNDcuNXQxOTAgLTEyN3QxMjcgLTE5MHQ0Ny41IC0yMzEuNXQtNDcuNSAtMjMxLjV0LTEyNyAtMTkwLjV0LTE5MCAtMTI3dC0yMzEuNSAtNDd0LTIzMS41IDQ3dC0xOTAuNSAxMjd0LTEyNyAxOTAuNXQtNDcgMjMxLjV0NDcgMjMxLjV0MTI3IDE5MHQxOTAuNSAxMjd0MjMxLjUgNDcuNXpNNTk2IDEwMTBxLTExMiAwIC0yMDcuNSAtNTUuNXQtMTUxIC0xNTF0LTU1LjUgLTIwNy41dDU1LjUgLTIwNy41IHQxNTEgLTE1MXQyMDcuNSAtNTUuNXQyMDcuNSA1NS41dDE1MSAxNTF0NTUuNSAyMDcuNXQtNTUuNSAyMDcuNXQtMTUxIDE1MXQtMjA3LjUgNTUuNXpNNDU0LjUgOTA1cTIyLjUgMCAzOC41IC0xNnQxNiAtMzguNXQtMTYgLTM5dC0zOC41IC0xNi41dC0zOC41IDE2LjV0LTE2IDM5dDE2IDM4LjV0MzguNSAxNnpNNzU0LjUgOTA1cTIyLjUgMCAzOC41IC0xNnQxNiAtMzguNXQtMTYgLTM5dC0zOCAtMTYuNXEtMTQgMCAtMjkgMTBsLTU1IC0xNDUgcTE3IC0yMyAxNyAtNTFxMCAtMzYgLTI1LjUgLTYxLjV0LTYxLjUgLTI1LjV0LTYxLjUgMjUuNXQtMjUuNSA2MS41cTAgMzIgMjAuNSA1Ni41dDUxLjUgMjkuNWwxMjIgMTI2bDEgMXEtOSAxNCAtOSAyOHEwIDIzIDE2IDM5dDM4LjUgMTZ6TTM0NS41IDcwOXEyMi41IDAgMzguNSAtMTZ0MTYgLTM4LjV0LTE2IC0zOC41dC0zOC41IC0xNnQtMzguNSAxNnQtMTYgMzguNXQxNiAzOC41dDM4LjUgMTZ6TTg1NC41IDcwOXEyMi41IDAgMzguNSAtMTYgdDE2IC0zOC41dC0xNiAtMzguNXQtMzguNSAtMTZ0LTM4LjUgMTZ0LTE2IDM4LjV0MTYgMzguNXQzOC41IDE2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDI7IiBkPSJNNTQ2IDE3M2w0NjkgNDcwcTkxIDkxIDk5IDE5MnE3IDk4IC01MiAxNzUuNXQtMTU0IDk0LjVxLTIyIDQgLTQ3IDRxLTM0IDAgLTY2LjUgLTEwdC01Ni41IC0yM3QtNTUuNSAtMzh0LTQ4IC00MS41dC00OC41IC00Ny41cS0zNzYgLTM3NSAtMzkxIC0zOTBxLTMwIC0yNyAtNDUgLTQxLjV0LTM3LjUgLTQxdC0zMiAtNDYuNXQtMTYgLTQ3LjV0LTEuNSAtNTYuNXE5IC02MiA1My41IC05NXQ5OS41IC0zM3E3NCAwIDEyNSA1MWw1NDggNTQ4IHEzNiAzNiAyMCA3NXEtNyAxNiAtMjEuNSAyNnQtMzIuNSAxMHEtMjYgMCAtNTAgLTIzcS0xMyAtMTIgLTM5IC0zOGwtMzQxIC0zMzhxLTE1IC0xNSAtMzUuNSAtMTUuNXQtMzQuNSAxMy41dC0xNCAzNC41dDE0IDM0LjVxMzI3IDMzMyAzNjEgMzY3cTM1IDM1IDY3LjUgNTEuNXQ3OC41IDE2LjVxMTQgMCAyOSAtMXE0NCAtOCA3NC41IC0zNS41dDQzLjUgLTY4LjVxMTQgLTQ3IDIgLTk2LjV0LTQ3IC04NC41cS0xMiAtMTEgLTMyIC0zMiB0LTc5LjUgLTgxdC0xMTQuNSAtMTE1dC0xMjQuNSAtMTIzLjV0LTEyMyAtMTE5LjV0LTk2LjUgLTg5dC01NyAtNDVxLTU2IC0yNyAtMTIwIC0yN3EtNzAgMCAtMTI5IDMydC05MyA4OXEtNDggNzggLTM1IDE3M3Q4MSAxNjNsNTExIDUxMXE3MSA3MiAxMTEgOTZxOTEgNTUgMTk4IDU1cTgwIDAgMTUyIC0zM3E3OCAtMzYgMTI5LjUgLTEwM3Q2Ni41IC0xNTRxMTcgLTkzIC0xMSAtMTgzLjV0LTk0IC0xNTYuNWwtNDgyIC00NzYgcS0xNSAtMTUgLTM2IC0xNnQtMzcgMTR0LTE3LjUgMzR0MTQuNSAzNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTQzOyIgZD0iTTY0OSA5NDlxNDggNjggMTA5LjUgMTA0dDEyMS41IDM4LjV0MTE4LjUgLTIwdDEwMi41IC02NHQ3MSAtMTAwLjV0MjcgLTEyM3EwIC01NyAtMzMuNSAtMTE3LjV0LTk0IC0xMjQuNXQtMTI2LjUgLTEyNy41dC0xNTAgLTE1Mi41dC0xNDYgLTE3NHEtNjIgODUgLTE0NS41IDE3NHQtMTUwIDE1Mi41dC0xMjYuNSAxMjcuNXQtOTMuNSAxMjQuNXQtMzMuNSAxMTcuNXEwIDY0IDI4IDEyM3Q3MyAxMDAuNXQxMDQgNjR0MTE5IDIwIHQxMjAuNSAtMzguNXQxMDQuNSAtMTA0ek04OTYgOTcycS0zMyAwIC02NC41IC0xOXQtNTYuNSAtNDZ0LTQ3LjUgLTUzLjV0LTQzLjUgLTQ1LjV0LTM3LjUgLTE5dC0zNiAxOXQtNDAgNDUuNXQtNDMgNTMuNXQtNTQgNDZ0LTY1LjUgMTlxLTY3IDAgLTEyMi41IC01NS41dC01NS41IC0xMzIuNXEwIC0yMyAxMy41IC01MXQ0NiAtNjV0NTcuNSAtNjN0NzYgLTc1bDIyIC0yMnExNSAtMTQgNDQgLTQ0dDUwLjUgLTUxdDQ2IC00NHQ0MSAtMzV0MjMgLTEyIHQyMy41IDEydDQyLjUgMzZ0NDYgNDR0NTIuNSA1MnQ0NCA0M3E0IDQgMTIgMTNxNDMgNDEgNjMuNSA2MnQ1MiA1NXQ0NiA1NXQyNiA0NnQxMS41IDQ0cTAgNzkgLTUzIDEzMy41dC0xMjAgNTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTQ0OyIgZD0iTTc3Ni41IDEyMTRxOTMuNSAwIDE1OS41IC02NmwxNDEgLTE0MXE2NiAtNjYgNjYgLTE2MHEwIC00MiAtMjggLTk1LjV0LTYyIC04Ny41bC0yOSAtMjlxLTMxIDUzIC03NyA5OWwtMTggMThsOTUgOTVsLTI0NyAyNDhsLTM4OSAtMzg5bDIxMiAtMjEybC0xMDUgLTEwNmwtMTkgMThsLTE0MSAxNDFxLTY2IDY2IC02NiAxNTl0NjYgMTU5bDI4MyAyODNxNjUgNjYgMTU4LjUgNjZ6TTYwMCA3MDZsMTA1IDEwNXExMCAtOCAxOSAtMTdsMTQxIC0xNDEgcTY2IC02NiA2NiAtMTU5dC02NiAtMTU5bC0yODMgLTI4M3EtNjYgLTY2IC0xNTkgLTY2dC0xNTkgNjZsLTE0MSAxNDFxLTY2IDY2IC02NiAxNTkuNXQ2NiAxNTkuNWw1NSA1NXEyOSAtNTUgNzUgLTEwMmwxOCAtMTdsLTk1IC05NWwyNDcgLTI0OGwzODkgMzg5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDU7IiBkPSJNNjAzIDEyMDBxODUgMCAxNjIgLTE1dDEyNyAtMzh0NzkgLTQ4dDI5IC00NnYtOTUzcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djk1M3EwIDIxIDMwIDQ2LjV0ODEgNDh0MTI5IDM3LjV0MTYzIDE1ek0zMDAgMTAwMHYtNzAwaDYwMHY3MDBoLTYwMHpNNjAwIDI1NHEtNDMgMCAtNzMuNSAtMzAuNXQtMzAuNSAtNzMuNXQzMC41IC03My41dDczLjUgLTMwLjV0NzMuNSAzMC41IHQzMC41IDczLjV0LTMwLjUgNzMuNXQtNzMuNSAzMC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDY7IiBkPSJNOTAyIDExODVsMjgzIC0yODJxMTUgLTE1IDE1IC0zNnQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNXQtMzUgMTVsLTM2IDM1bC0yNzkgLTI2N3YtMzAwbC0yMTIgMjEwbC0zMDggLTMwN2wtMjgwIC0yMDNsMjAzIDI4MGwzMDcgMzA4bC0yMTAgMjEyaDMwMGwyNjcgMjc5bC0zNSAzNnEtMTUgMTQgLTE1IDM1dDE0LjUgMzUuNXQzNS41IDE0LjV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDg7IiBkPSJNNzAwIDEyNDh2LTc4cTM4IC01IDcyLjUgLTE0LjV0NzUuNSAtMzEuNXQ3MSAtNTMuNXQ1MiAtODR0MjQgLTExOC41aC0xNTlxLTQgMzYgLTEwLjUgNTl0LTIxIDQ1dC00MCAzNS41dC02NC41IDIwLjV2LTMwN2w2NCAtMTNxMzQgLTcgNjQgLTE2LjV0NzAgLTMydDY3LjUgLTUyLjV0NDcuNSAtODB0MjAgLTExMnEwIC0xMzkgLTg5IC0yMjR0LTI0NCAtOTd2LTc3aC0xMDB2NzlxLTE1MCAxNiAtMjM3IDEwM3EtNDAgNDAgLTUyLjUgOTMuNSB0LTE1LjUgMTM5LjVoMTM5cTUgLTc3IDQ4LjUgLTEyNnQxMTcuNSAtNjV2MzM1bC0yNyA4cS00NiAxNCAtNzkgMjYuNXQtNzIgMzZ0LTYzIDUydC00MCA3Mi41dC0xNiA5OHEwIDcwIDI1IDEyNnQ2Ny41IDkydDk0LjUgNTd0MTEwIDI3djc3aDEwMHpNNjAwIDc1NHYyNzRxLTI5IC00IC01MCAtMTF0LTQyIC0yMS41dC0zMS41IC00MS41dC0xMC41IC02NXEwIC0yOSA3IC01MC41dDE2LjUgLTM0dDI4LjUgLTIyLjV0MzEuNSAtMTR0MzcuNSAtMTAgcTkgLTMgMTMgLTR6TTcwMCA1NDd2LTMxMHEyMiAyIDQyLjUgNi41dDQ1IDE1LjV0NDEuNSAyN3QyOSA0MnQxMiA1OS41dC0xMi41IDU5LjV0LTM4IDQ0LjV0LTUzIDMxdC02Ni41IDI0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0OTsiIGQ9Ik01NjEgMTE5N3E4NCAwIDE2MC41IC00MHQxMjMuNSAtMTA5LjV0NDcgLTE0Ny41aC0xNTNxMCA0MCAtMTkuNSA3MS41dC00OS41IDQ4LjV0LTU5LjUgMjZ0LTU1LjUgOXEtMzcgMCAtNzkgLTE0LjV0LTYyIC0zNS41cS00MSAtNDQgLTQxIC0xMDFxMCAtMjYgMTMuNSAtNjN0MjYuNSAtNjF0MzcgLTY2cTYgLTkgOSAtMTRoMjQxdi0xMDBoLTE5N3E4IC01MCAtMi41IC0xMTV0LTMxLjUgLTk1cS00NSAtNjIgLTk5IC0xMTIgcTM0IDEwIDgzIDE3LjV0NzEgNy41cTMyIDEgMTAyIC0xNnQxMDQgLTE3cTgzIDAgMTM2IDMwbDUwIC0xNDdxLTMxIC0xOSAtNTggLTMwLjV0LTU1IC0xNS41dC00MiAtNC41dC00NiAtMC41cS0yMyAwIC03NiAxN3QtMTExIDMyLjV0LTk2IDExLjVxLTM5IC0zIC04MiAtMTZ0LTY3IC0yNWwtMjMgLTExbC01NSAxNDVxNCAzIDE2IDExdDE1LjUgMTAuNXQxMyA5dDE1LjUgMTJ0MTQuNSAxNHQxNy41IDE4LjVxNDggNTUgNTQgMTI2LjUgdC0zMCAxNDIuNWgtMjIxdjEwMGgxNjZxLTIzIDQ3IC00NCAxMDRxLTcgMjAgLTEyIDQxLjV0LTYgNTUuNXQ2IDY2LjV0MjkuNSA3MC41dDU4LjUgNzFxOTcgODggMjYzIDg4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTA7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTkzNSAxMTg0bDIzMCAtMjQ5cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTE1MHYtOTAwaC0yMDB2OTAwaC0xNTBxLTIxIDAgLTI1IDEwLjV0MTAgMjQuNWwyMzAgMjQ5cTE0IDE1IDM1IDE1dDM1IC0xNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTUxOyIgZD0iTTEwMDAgNzAwaC0xMDB2MTAwaC0xMDB2LTEwMGgtMTAwdjUwMGgzMDB2LTUwMHpNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTgwMSAxMTAwdi0yMDBoMTAwdjIwMGgtMTAwek0xMDAwIDM1MGwtMjAwIC0yNTBoMjAwdi0xMDBoLTMwMHYxNTBsMjAwIDI1MGgtMjAwdjEwMGgzMDB2LTE1MHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1MjsiIGQ9Ik00MDAgMzAwaDE1MHEyMSAwIDI1IC0xMXQtMTAgLTI1bC0yMzAgLTI1MHEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0yMzAgMjUwcS0xNCAxNCAtMTAgMjV0MjUgMTFoMTUwdjkwMGgyMDB2LTkwMHpNMTAwMCAxMDUwbC0yMDAgLTI1MGgyMDB2LTEwMGgtMzAwdjE1MGwyMDAgMjUwaC0yMDB2MTAwaDMwMHYtMTUwek0xMDAwIDBoLTEwMHYxMDBoLTEwMHYtMTAwaC0xMDB2NTAwaDMwMHYtNTAwek04MDEgNDAwdi0yMDBoMTAwdjIwMGgtMTAweiAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTUzOyIgZD0iTTQwMCAzMDBoMTUwcTIxIDAgMjUgLTExdC0xMCAtMjVsLTIzMCAtMjUwcS0xNCAtMTUgLTM1IC0xNXQtMzUgMTVsLTIzMCAyNTBxLTE0IDE0IC0xMCAyNXQyNSAxMWgxNTB2OTAwaDIwMHYtOTAwek0xMDAwIDcwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNMTEwMCAwaC0xMDB2MTAwaC0yMDB2NDAwaDMwMHYtNTAwek05MDEgNDAwdi0yMDBoMTAwdjIwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTQ7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTExMDAgNzAwaC0xMDB2MTAwaC0yMDB2NDAwaDMwMHYtNTAwek05MDEgMTEwMHYtMjAwaDEwMHYyMDBoLTEwMHpNMTAwMCAwaC0xMDB2NDAwaC0xMDB2MTAwaDIwMHYtNTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTU7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTkwMCAxMDAwaC0yMDB2MjAwaDIwMHYtMjAwek0xMDAwIDcwMGgtMzAwdjIwMGgzMDB2LTIwMHpNMTEwMCA0MDBoLTQwMHYyMDBoNDAwdi0yMDB6TTEyMDAgMTAwaC01MDB2MjAwaDUwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTY7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTEyMDAgMTAwMGgtNTAwdjIwMGg1MDB2LTIwMHpNMTEwMCA3MDBoLTQwMHYyMDBoNDAwdi0yMDB6TTEwMDAgNDAwaC0zMDB2MjAwaDMwMHYtMjAwek05MDAgMTAwaC0yMDB2MjAwaDIwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTc7IiBkPSJNMzUwIDExMDBoNDAwcTE2MiAwIDI1NiAtOTMuNXQ5NCAtMjU2LjV2LTQwMHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNDAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY0MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41ek04MDAgOTAwaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNSB2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTg7IiBkPSJNMzUwIDExMDBoNDAwcTE2NSAwIDI1Ny41IC05Mi41dDkyLjUgLTI1Ny41di00MDBxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTYzIDAgLTI1Ni41IDkyLjV0LTkzLjUgMjU3LjV2NDAwcTAgMTYzIDk0IDI1Ni41dDI1NiA5My41ek04MDAgOTAwaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNSB2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41ek00NDAgNzcwbDI1MyAtMTkwcTE3IC0xMiAxNyAtMzB0LTE3IC0zMGwtMjUzIC0xOTBxLTE2IC0xMiAtMjggLTYuNXQtMTIgMjYuNXY0MDBxMCAyMSAxMiAyNi41dDI4IC02LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1OTsiIGQ9Ik0zNTAgMTEwMGg0MDBxMTYzIDAgMjU2LjUgLTk0dDkzLjUgLTI1NnYtNDAwcTAgLTE2NSAtOTIuNSAtMjU3LjV0LTI1Ny41IC05Mi41aC00MDBxLTE2NSAwIC0yNTcuNSA5Mi41dC05Mi41IDI1Ny41djQwMHEwIDE2MyA5Mi41IDI1Ni41dDI1Ny41IDkzLjV6TTgwMCA5MDBoLTUwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41IHY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjV6TTM1MCA3MDBoNDAwcTIxIDAgMjYuNSAtMTJ0LTYuNSAtMjhsLTE5MCAtMjUzcS0xMiAtMTcgLTMwIC0xN3QtMzAgMTdsLTE5MCAyNTNxLTEyIDE2IC02LjUgMjh0MjYuNSAxMnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTYwOyIgZD0iTTM1MCAxMTAwaDQwMHExNjUgMCAyNTcuNSAtOTIuNXQ5Mi41IC0yNTcuNXYtNDAwcTAgLTE2MyAtOTIuNSAtMjU2LjV0LTI1Ny41IC05My41aC00MDBxLTE2MyAwIC0yNTYuNSA5NHQtOTMuNSAyNTZ2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXpNODAwIDkwMGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjUgdjUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNNTgwIDY5M2wxOTAgLTI1M3ExMiAtMTYgNi41IC0yOHQtMjYuNSAtMTJoLTQwMHEtMjEgMCAtMjYuNSAxMnQ2LjUgMjhsMTkwIDI1M3ExMiAxNyAzMCAxN3QzMCAtMTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MTsiIGQ9Ik01NTAgMTEwMGg0MDBxMTY1IDAgMjU3LjUgLTkyLjV0OTIuNSAtMjU3LjV2LTQwMHEwIC0xNjUgLTkyLjUgLTI1Ny41dC0yNTcuNSAtOTIuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ1MHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC00NTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zMzggODY3bDMyNCAtMjg0cTE2IC0xNCAxNiAtMzN0LTE2IC0zM2wtMzI0IC0yODRxLTE2IC0xNCAtMjcgLTl0LTExIDI2djE1MGgtMjUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDI1MHYxNTBxMCAyMSAxMSAyNnQyNyAtOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTYyOyIgZD0iTTc5MyAxMTgybDkgLTlxOCAtMTAgNSAtMjdxLTMgLTExIC03OSAtMjI1LjV0LTc4IC0yMjEuNWwzMDAgMXEyNCAwIDMyLjUgLTE3LjV0LTUuNSAtMzUuNXEtMSAwIC0xMzMuNSAtMTU1dC0yNjcgLTMxMi41dC0xMzguNSAtMTYyLjVxLTEyIC0xNSAtMjYgLTE1aC05bC05IDhxLTkgMTEgLTQgMzJxMiA5IDQyIDEyMy41dDc5IDIyNC41bDM5IDExMGgtMzAycS0yMyAwIC0zMSAxOXEtMTAgMjEgNiA0MXE3NSA4NiAyMDkuNSAyMzcuNSB0MjI4IDI1N3Q5OC41IDExMS41cTkgMTYgMjUgMTZoOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTYzOyIgZD0iTTM1MCAxMTAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00NTBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNDUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwIHEwIDE2NSA5Mi41IDI1Ny41dDI1Ny41IDkyLjV6TTkzOCA4NjdsMzI0IC0yODRxMTYgLTE0IDE2IC0zM3QtMTYgLTMzbC0zMjQgLTI4NHEtMTYgLTE0IC0yNyAtOXQtMTEgMjZ2MTUwaC0yNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjUwdjE1MHEwIDIxIDExIDI2dDI3IC05eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjQ7IiBkPSJNNzUwIDEyMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTEwLjUgLTI1dC0yNC41IDEwbC0xMDkgMTA5bC0zMTIgLTMxMnEtMTUgLTE1IC0zNS41IC0xNXQtMzUuNSAxNWwtMTQxIDE0MXEtMTUgMTUgLTE1IDM1LjV0MTUgMzUuNWwzMTIgMzEybC0xMDkgMTA5cS0xNCAxNCAtMTAgMjQuNXQyNSAxMC41ek00NTYgOTAwaC0xNTZxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMCBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTQ4bDIwMCAyMDB2LTI5OHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNDAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY0MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41aDMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTY1OyIgZD0iTTYwMCAxMTg2cTExOSAwIDIyNy41IC00Ni41dDE4NyAtMTI1dDEyNSAtMTg3dDQ2LjUgLTIyNy41dC00Ni41IC0yMjcuNXQtMTI1IC0xODd0LTE4NyAtMTI1dC0yMjcuNSAtNDYuNXQtMjI3LjUgNDYuNXQtMTg3IDEyNXQtMTI1IDE4N3QtNDYuNSAyMjcuNXQ0Ni41IDIyNy41dDEyNSAxODd0MTg3IDEyNXQyMjcuNSA0Ni41ek02MDAgMTAyMnEtMTE1IDAgLTIxMiAtNTYuNXQtMTUzLjUgLTE1My41dC01Ni41IC0yMTJ0NTYuNSAtMjEyIHQxNTMuNSAtMTUzLjV0MjEyIC01Ni41dDIxMiA1Ni41dDE1My41IDE1My41dDU2LjUgMjEydC01Ni41IDIxMnQtMTUzLjUgMTUzLjV0LTIxMiA1Ni41ek02MDAgNzk0cTgwIDAgMTM3IC01N3Q1NyAtMTM3dC01NyAtMTM3dC0xMzcgLTU3dC0xMzcgNTd0LTU3IDEzN3Q1NyAxMzd0MTM3IDU3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjY7IiBkPSJNNDUwIDEyMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0zNTBoMjQ1cTIwIDAgMjUgLTExdC05IC0yNmwtMzgzIC00MjZxLTE0IC0xNSAtMzMuNSAtMTV0LTMyLjUgMTVsLTM3OSA0MjZxLTEzIDE1IC04LjUgMjZ0MjUuNSAxMWgyNTB2MzUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTI1MGgtMTEwMHYyNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiBNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE2NzsiIGQ9Ik01ODMgMTE4MmwzNzggLTQzNXExNCAtMTUgOSAtMzF0LTI2IC0xNmgtMjQ0di0yNTBxMCAtMjAgLTE3IC0zNXQtMzkgLTE1aC0yMDBxLTIwIDAgLTMyIDE0LjV0LTEyIDM1LjV2MjUwaC0yNTBxLTIwIDAgLTI1LjUgMTYuNXQ4LjUgMzEuNWwzODMgNDMxcTE0IDE2IDMzLjUgMTd0MzMuNSAtMTR6TTUwIDMwMGgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXogTTkwMCAyMDB2LTUwaDEwMHY1MGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjg7IiBkPSJNMzk2IDcyM2wzNjkgMzY5cTcgNyAxNy41IDd0MTcuNSAtN2wxMzkgLTEzOXE3IC04IDcgLTE4LjV0LTcgLTE3LjVsLTUyNSAtNTI1cS03IC04IC0xNy41IC04dC0xNy41IDhsLTI5MiAyOTFxLTcgOCAtNyAxOHQ3IDE4bDEzOSAxMzlxOCA3IDE4LjUgN3QxNy41IC03ek01MCAzMDBoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjUwaC0xMTAwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTkwMCAyMDB2LTUwaDEwMHY1MCBoLTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTY5OyIgZD0iTTEzNSAxMDIzbDE0MiAxNDJxMTQgMTQgMzUgMTR0MzUgLTE0bDc3IC03N2wtMjEyIC0yMTJsLTc3IDc2cS0xNCAxNSAtMTQgMzZ0MTQgMzV6TTY1NSA4NTVsMjEwIDIxMHExNCAxNCAyNC41IDEwdDEwLjUgLTI1bC0yIC01OTlxLTEgLTIwIC0xNS41IC0zNXQtMzUuNSAtMTVsLTU5NyAtMXEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIwOCAyMDhsLTE1NCAxNTVsMjEyIDIxMnpNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjUgdi0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MDsiIGQ9Ik0zNTAgMTIwMGw1OTkgLTJxMjAgLTEgMzUgLTE1LjV0MTUgLTM1LjVsMSAtNTk3cTAgLTIxIC0xMC41IC0yNXQtMjQuNSAxMGwtMjA4IDIwOGwtMTU1IC0xNTRsLTIxMiAyMTJsMTU1IDE1NGwtMjEwIDIxMHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXpNNTI0IDUxMmwtNzYgLTc3cS0xNSAtMTQgLTM2IC0xNHQtMzUgMTRsLTE0MiAxNDJxLTE0IDE0IC0xNCAzNXQxNCAzNWw3NyA3N3pNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41IHQxNC41IC0zNS41di0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MTsiIGQ9Ik0xMjAwIDEwM2wtNDgzIDI3NmwtMzE0IC0zOTl2NDIzaC0zOTlsMTE5NiA3OTZ2LTEwOTZ6TTQ4MyA0MjR2LTIzMGw2ODMgOTUzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzI7IiBkPSJNMTEwMCAxMDAwdi04NTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTE1MHY0MDBoLTcwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDB6TTcwMCAxMDAwaC0xMDB2MjAwaDEwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzM7IiBkPSJNMTEwMCAxMDAwbC0yIC0xNDlsLTI5OSAtMjk5bC05NSA5NXEtOSA5IC0yMS41IDl0LTIxLjUgLTlsLTE0OSAtMTQ3aC0zMTJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwek03MDAgMTAwMGgtMTAwdjIwMGgxMDB2LTIwMHpNMTEzMiA2MzhsMTA2IC0xMDZxNyAtNyA3IC0xNy41dC03IC0xNy41bC00MjAgLTQyMXEtOCAtNyAtMTggLTcgdC0xOCA3bC0yMDIgMjAzcS04IDcgLTggMTcuNXQ4IDE3LjVsMTA2IDEwNnE3IDggMTcuNSA4dDE3LjUgLThsNzkgLTc5bDI5NyAyOTdxNyA3IDE3LjUgN3QxNy41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzQ7IiBkPSJNMTEwMCAxMDAwdi0yNjlsLTEwMyAtMTAzbC0xMzQgMTM0cS0xNSAxNSAtMzMuNSAxNi41dC0zNC41IC0xMi41bC0yNjYgLTI2NmgtMzI5di00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMHpNNzAwIDEwMDBoLTEwMHYyMDBoMTAwdi0yMDB6TTEyMDIgNTcybDcwIC03MHExNSAtMTUgMTUgLTM1LjV0LTE1IC0zNS41bC0xMzEgLTEzMSBsMTMxIC0xMzFxMTUgLTE1IDE1IC0zNS41dC0xNSAtMzUuNWwtNzAgLTcwcS0xNSAtMTUgLTM1LjUgLTE1dC0zNS41IDE1bC0xMzEgMTMxbC0xMzEgLTEzMXEtMTUgLTE1IC0zNS41IC0xNXQtMzUuNSAxNWwtNzAgNzBxLTE1IDE1IC0xNSAzNS41dDE1IDM1LjVsMTMxIDEzMWwtMTMxIDEzMXEtMTUgMTUgLTE1IDM1LjV0MTUgMzUuNWw3MCA3MHExNSAxNSAzNS41IDE1dDM1LjUgLTE1bDEzMSAtMTMxbDEzMSAxMzFxMTUgMTUgMzUuNSAxNSB0MzUuNSAtMTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NTsiIGQ9Ik0xMTAwIDEwMDB2LTMwMGgtMzUwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xNTBoLTUwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDB6TTcwMCAxMDAwaC0xMDB2MjAwaDEwMHYtMjAwek04NTAgNjAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjUwaDE1MHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNSBsLTIzMCAtMjMwcS0xNCAtMTQgLTM1IC0xNHQtMzUgMTRsLTIzMCAyMzBxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjVoMTUwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NjsiIGQ9Ik0xMTAwIDEwMDB2LTQwMGwtMTY1IDE2NXEtMTQgMTUgLTM1IDE1dC0zNSAtMTVsLTI2MyAtMjY1aC00MDJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwek03MDAgMTAwMGgtMTAwdjIwMGgxMDB2LTIwMHpNOTM1IDU2NWwyMzAgLTIyOXExNCAtMTUgMTAgLTI1LjV0LTI1IC0xMC41aC0xNTB2LTI1MHEwIC0yMCAtMTQuNSAtMzUgdC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1djI1MGgtMTUwcS0yMSAwIC0yNSAxMC41dDEwIDI1LjVsMjMwIDIyOXExNCAxNSAzNSAxNXQzNSAtMTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NzsiIGQ9Ik01MCAxMTAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTE1MGgtMTIwMHYxNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMjAwIDgwMHYtNTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1NTBoMTIwMHpNMTAwIDUwMHYtMjAwaDQwMHYyMDBoLTQwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTc4OyIgZD0iTTkzNSAxMTY1bDI0OCAtMjMwcTE0IC0xNCAxNCAtMzV0LTE0IC0zNWwtMjQ4IC0yMzBxLTE0IC0xNCAtMjQuNSAtMTB0LTEwLjUgMjV2MTUwaC00MDB2MjAwaDQwMHYxNTBxMCAyMSAxMC41IDI1dDI0LjUgLTEwek0yMDAgODAwaC01MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHYtMjAwek00MDAgODAwaC0xMDB2MjAwaDEwMHYtMjAwek0xOCA0MzVsMjQ3IDIzMCBxMTQgMTQgMjQuNSAxMHQxMC41IC0yNXYtMTUwaDQwMHYtMjAwaC00MDB2LTE1MHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTI0NyAyMzBxLTE1IDE0IC0xNSAzNXQxNSAzNXpNOTAwIDMwMGgtMTAwdjIwMGgxMDB2LTIwMHpNMTAwMCA1MDBoNTFxMjAgMCAzNC41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzQuNSAtMTQuNWgtNTF2MjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzk7IiBkPSJNODYyIDEwNzNsMjc2IDExNnEyNSAxOCA0My41IDh0MTguNSAtNDF2LTExMDZxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2Mzk3cS00IDEgLTExIDV0LTI0IDE3LjV0LTMwIDI5dC0yNCA0MnQtMTEgNTYuNXYzNTlxMCAzMSAxOC41IDY1dDQzLjUgNTJ6TTU1MCAxMjAwcTIyIDAgMzQuNSAtMTIuNXQxNC41IC0yNC41bDEgLTEzdi00NTBxMCAtMjggLTEwLjUgLTU5LjUgdC0yNSAtNTZ0LTI5IC00NXQtMjUuNSAtMzEuNWwtMTAgLTExdi00NDdxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDQ3cS00IDQgLTExIDExLjV0LTI0IDMwLjV0LTMwIDQ2dC0yNCA1NXQtMTEgNjB2NDUwcTAgMiAwLjUgNS41dDQgMTJ0OC41IDE1dDE0LjUgMTJ0MjIuNSA1LjVxMjAgMCAzMi41IC0xMi41dDE0LjUgLTI0LjVsMyAtMTN2LTM1MGgxMDB2MzUwdjUuNXQyLjUgMTIgdDcgMTV0MTUgMTJ0MjUuNSA1LjVxMjMgMCAzNS41IC0xMi41dDEzLjUgLTI0LjVsMSAtMTN2LTM1MGgxMDB2MzUwcTAgMiAwLjUgNS41dDMgMTJ0NyAxNXQxNSAxMnQyNC41IDUuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTgwOyIgZD0iTTEyMDAgMTEwMHYtNTZxLTQgMCAtMTEgLTAuNXQtMjQgLTN0LTMwIC03LjV0LTI0IC0xNXQtMTEgLTI0di04ODhxMCAtMjIgMjUgLTM0LjV0NTAgLTEzLjVsMjUgLTJ2LTU2aC00MDB2NTZxNzUgMCA4Ny41IDYuNXQxMi41IDQzLjV2Mzk0aC01MDB2LTM5NHEwIC0zNyAxMi41IC00My41dDg3LjUgLTYuNXYtNTZoLTQwMHY1NnE0IDAgMTEgMC41dDI0IDN0MzAgNy41dDI0IDE1dDExIDI0djg4OHEwIDIyIC0yNSAzNC41dC01MCAxMy41IGwtMjUgMnY1Nmg0MDB2LTU2cS03NSAwIC04Ny41IC02LjV0LTEyLjUgLTQzLjV2LTM5NGg1MDB2Mzk0cTAgMzcgLTEyLjUgNDMuNXQtODcuNSA2LjV2NTZoNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODE7IiBkPSJNNjc1IDEwMDBoMzc1cTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoLTEwNWwtMjk1IC05OHY5OGwtMjAwIDIwMGgtNDAwbDEwMCAxMDBoMzc1ek0xMDAgOTAwaDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0zMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djUwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTEwMCA4MDB2LTIwMGgzMDB2MjAwIGgtMzAwek0xMTAwIDUzNWwtNDAwIC0xMzN2MTYzbDQwMCAxMzN2LTE2M3pNMTAwIDUwMHYtMjAwaDMwMHYyMDBoLTMwMHpNMTEwMCAzOTh2LTI0OHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzc1bC0xMDAgLTEwMGgtMzc1bC0xMDAgMTAwaDQwMGwyMDAgMjAwaDEwNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTgyOyIgZD0iTTE3IDEwMDdsMTYyIDE2MnExNyAxNyA0MCAxNHQzNyAtMjJsMTM5IC0xOTRxMTQgLTIwIDExIC00NC41dC0yMCAtNDEuNWwtMTE5IC0xMThxMTAyIC0xNDIgMjI4IC0yNjh0MjY3IC0yMjdsMTE5IDExOHExNyAxNyA0Mi41IDE5dDQ0LjUgLTEybDE5MiAtMTM2cTE5IC0xNCAyMi41IC0zNy41dC0xMy41IC00MC41bC0xNjMgLTE2MnEtMyAtMSAtOS41IC0xdC0yOS41IDJ0LTQ3LjUgNnQtNjIuNSAxNC41dC03Ny41IDI2LjV0LTkwIDQyLjUgdC0xMDEuNSA2MHQtMTExIDgzdC0xMTkgMTA4LjVxLTc0IDc0IC0xMzMuNSAxNTAuNXQtOTQuNSAxMzguNXQtNjAgMTE5LjV0LTM0LjUgMTAwdC0xNSA3NC41dC00LjUgNDh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MzsiIGQ9Ik02MDAgMTEwMHE5MiAwIDE3NSAtMTAuNXQxNDEuNSAtMjd0MTA4LjUgLTM2LjV0ODEuNSAtNDB0NTMuNSAtMzd0MzEgLTI3bDkgLTEwdi0yMDBxMCAtMjEgLTE0LjUgLTMzdC0zNC41IC05bC0yMDIgMzRxLTIwIDMgLTM0LjUgMjB0LTE0LjUgMzh2MTQ2cS0xNDEgMjQgLTMwMCAyNHQtMzAwIC0yNHYtMTQ2cTAgLTIxIC0xNC41IC0zOHQtMzQuNSAtMjBsLTIwMiAtMzRxLTIwIC0zIC0zNC41IDl0LTE0LjUgMzN2MjAwcTMgNCA5LjUgMTAuNSB0MzEgMjZ0NTQgMzcuNXQ4MC41IDM5LjV0MTA5IDM3LjV0MTQxIDI2LjV0MTc1IDEwLjV6TTYwMCA3OTVxNTYgMCA5NyAtOS41dDYwIC0yMy41dDMwIC0yOHQxMiAtMjRsMSAtMTB2LTUwbDM2NSAtMzAzcTE0IC0xNSAyNC41IC00MHQxMC41IC00NXYtMjEycTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMTJxMCAyMCAxMC41IDQ1dDI0LjUgNDBsMzY1IDMwM3Y1MCBxMCA0IDEgMTAuNXQxMiAyM3QzMCAyOXQ2MCAyMi41dDk3IDEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODQ7IiBkPSJNMTEwMCA3MDBsLTIwMCAtMjAwaC02MDBsLTIwMCAyMDB2NTAwaDIwMHYtMjAwaDIwMHYyMDBoMjAwdi0yMDBoMjAwdjIwMGgyMDB2LTUwMHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEybDEzNyAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNSB0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODU7IiBkPSJNNzAwIDExMDBoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtMTAwMGgzMDB2MTAwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNMTEwMCA4MDBoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNzAwaDMwMHY3MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjV6TTQwMCAwaC0zMDB2NDAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTQwMHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4NjsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDcwMGgtMjAwdi0xMDBoMjAwdi0zMDBoLTMwMHYxMDBoMjAwdjEwMGgtMjAwdjMwMGgzMDB2LTEwMHpNOTAwIDcwMHYtMzAwbC0xMDAgLTEwMGgtMjAwdjUwMGgyMDB6IE03MDAgNzAwdi0zMDBoMTAwdjMwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODc7IiBkPSJNMjAwIDExMDBoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODh6TTEwMCA5MDB2LTcwMGg5MDB2NzAwaC05MDB6TTUwMCAzMDBoLTEwMHYyMDBoLTEwMHYtMjAwaC0xMDB2NTAwaDEwMHYtMjAwaDEwMHYyMDBoMTAwdi01MDB6TTkwMCA3MDB2LTMwMGwtMTAwIC0xMDBoLTIwMHY1MDBoMjAweiBNNzAwIDcwMHYtMzAwaDEwMHYzMDBoLTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTg4OyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek01MDAgNzAwaC0yMDB2LTMwMGgyMDB2LTEwMGgtMzAwdjUwMGgzMDB2LTEwMHpNOTAwIDcwMGgtMjAwdi0zMDBoMjAwdi0xMDBoLTMwMHY1MDBoMzAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4OTsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDQwMGwtMzAwIDE1MGwzMDAgMTUwdi0zMDB6TTkwMCA1NTBsLTMwMCAtMTUwdjMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTkwOyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek05MDAgMzAwaC03MDB2NTAwaDcwMHYtNTAwek04MDAgNzAwaC0xMzBxLTM4IDAgLTY2LjUgLTQzdC0yOC41IC0xMDh0MjcgLTEwN3Q2OCAtNDJoMTMwdjMwMHpNMzAwIDcwMHYtMzAwIGgxMzBxNDEgMCA2OCA0MnQyNyAxMDd0LTI4LjUgMTA4dC02Ni41IDQzaC0xMzB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MTsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDcwMGgtMjAwdi0xMDBoMjAwdi0zMDBoLTMwMHYxMDBoMjAwdjEwMGgtMjAwdjMwMGgzMDB2LTEwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHogTTcwMCAzMDBoLTEwMHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MjsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNMzAwIDcwMGgyMDB2LTQwMGgtMzAwdjUwMGgxMDB2LTEwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNMzAwIDYwMHYtMjAwaDEwMHYyMDBoLTEwMHogTTcwMCAzMDBoLTEwMHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MzsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDUwMGwtMTk5IC0yMDBoLTEwMHY1MGwxOTkgMjAwdjE1MGgtMjAwdjEwMGgzMDB2LTMwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNNzAxIDMwMGgtMTAwIHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5NDsiIGQ9Ik02MDAgMTE5MXExMjAgMCAyMjkuNSAtNDd0MTg4LjUgLTEyNnQxMjYgLTE4OC41dDQ3IC0yMjkuNXQtNDcgLTIyOS41dC0xMjYgLTE4OC41dC0xODguNSAtMTI2dC0yMjkuNSAtNDd0LTIyOS41IDQ3dC0xODguNSAxMjZ0LTEyNiAxODguNXQtNDcgMjI5LjV0NDcgMjI5LjV0MTI2IDE4OC41dDE4OC41IDEyNnQyMjkuNSA0N3pNNjAwIDEwMjFxLTExNCAwIC0yMTEgLTU2LjV0LTE1My41IC0xNTMuNXQtNTYuNSAtMjExdDU2LjUgLTIxMSB0MTUzLjUgLTE1My41dDIxMSAtNTYuNXQyMTEgNTYuNXQxNTMuNSAxNTMuNXQ1Ni41IDIxMXQtNTYuNSAyMTF0LTE1My41IDE1My41dC0yMTEgNTYuNXpNODAwIDcwMGgtMzAwdi0yMDBoMzAwdi0xMDBoLTMwMGwtMTAwIDEwMHYyMDBsMTAwIDEwMGgzMDB2LTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTk1OyIgZD0iTTYwMCAxMTkxcTEyMCAwIDIyOS41IC00N3QxODguNSAtMTI2dDEyNiAtMTg4LjV0NDcgLTIyOS41dC00NyAtMjI5LjV0LTEyNiAtMTg4LjV0LTE4OC41IC0xMjZ0LTIyOS41IC00N3QtMjI5LjUgNDd0LTE4OC41IDEyNnQtMTI2IDE4OC41dC00NyAyMjkuNXQ0NyAyMjkuNXQxMjYgMTg4LjV0MTg4LjUgMTI2dDIyOS41IDQ3ek02MDAgMTAyMXEtMTE0IDAgLTIxMSAtNTYuNXQtMTUzLjUgLTE1My41dC01Ni41IC0yMTF0NTYuNSAtMjExIHQxNTMuNSAtMTUzLjV0MjExIC01Ni41dDIxMSA1Ni41dDE1My41IDE1My41dDU2LjUgMjExdC01Ni41IDIxMXQtMTUzLjUgMTUzLjV0LTIxMSA1Ni41ek04MDAgNzAwdi0xMDBsLTUwIC01MGwxMDAgLTEwMHYtNTBoLTEwMGwtMTAwIDEwMGgtMTUwdi0xMDBoLTEwMHY0MDBoMzAwek01MDAgNzAwdi0xMDBoMjAwdjEwMGgtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTc7IiBkPSJNNTAzIDEwODlxMTEwIDAgMjAwLjUgLTU5LjV0MTM0LjUgLTE1Ni41cTQ0IDE0IDkwIDE0cTEyMCAwIDIwNSAtODYuNXQ4NSAtMjA3dC04NSAtMjA3dC0yMDUgLTg2LjVoLTEyOHYyNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTMwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMjUwaC0yMjJxLTgwIDAgLTEzNiA1Ny41dC01NiAxMzYuNXEwIDY5IDQzIDEyMi41dDEwOCA2Ny41cS0yIDE5IC0yIDM3cTAgMTAwIDQ5IDE4NSB0MTM0IDEzNHQxODUgNDl6TTUyNSA1MDBoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMjc1aDEzN3EyMSAwIDI2IC0xMS41dC04IC0yNy41bC0yMjMgLTI0NHEtMTMgLTE2IC0zMiAtMTZ0LTMyIDE2bC0yMjMgMjQ0cS0xMyAxNiAtOCAyNy41dDI2IDExLjVoMTM3djI3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTg7IiBkPSJNNTAyIDEwODlxMTEwIDAgMjAxIC01OS41dDEzNSAtMTU2LjVxNDMgMTUgODkgMTVxMTIxIDAgMjA2IC04Ni41dDg2IC0yMDYuNXEwIC05OSAtNjAgLTE4MXQtMTUwIC0xMTBsLTM3OCAzNjBxLTEzIDE2IC0zMS41IDE2dC0zMS41IC0xNmwtMzgxIC0zNjVoLTlxLTc5IDAgLTEzNS41IDU3LjV0LTU2LjUgMTM2LjVxMCA2OSA0MyAxMjIuNXQxMDggNjcuNXEtMiAxOSAtMiAzOHEwIDEwMCA0OSAxODQuNXQxMzMuNSAxMzR0MTg0LjUgNDkuNXogTTYzMiA0NjdsMjIzIC0yMjhxMTMgLTE2IDggLTI3LjV0LTI2IC0xMS41aC0xMzd2LTI3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djI3NWgtMTM3cS0yMSAwIC0yNiAxMS41dDggMjcuNXExOTkgMjA0IDIyMyAyMjhxMTkgMTkgMzEuNSAxOXQzMi41IC0xOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTk5OyIgZD0iTTcwMCAxMDB2MTAwaDQwMGwtMjcwIDMwMGgxNzBsLTI3MCAzMDBoMTcwbC0zMDAgMzMzbC0zMDAgLTMzM2gxNzBsLTI3MCAtMzAwaDE3MGwtMjcwIC0zMDBoNDAwdi0xMDBoLTUwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di01MGg0MDB2NTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDA7IiBkPSJNNjAwIDExNzlxOTQgMCAxNjcuNSAtNTYuNXQ5OS41IC0xNDUuNXE4OSAtNiAxNTAuNSAtNzEuNXQ2MS41IC0xNTUuNXEwIC02MSAtMjkuNSAtMTEyLjV0LTc5LjUgLTgyLjVxOSAtMjkgOSAtNTVxMCAtNzQgLTUyLjUgLTEyNi41dC0xMjYuNSAtNTIuNXEtNTUgMCAtMTAwIDMwdi0yNTFxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaC0zMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41djI1MXEtNDUgLTMwIC0xMDAgLTMwIHEtNzQgMCAtMTI2LjUgNTIuNXQtNTIuNSAxMjYuNXEwIDE4IDQgMzhxLTQ3IDIxIC03NS41IDY1dC0yOC41IDk3cTAgNzQgNTIuNSAxMjYuNXQxMjYuNSA1Mi41cTUgMCAyMyAtMnEwIDIgLTEgMTB0LTEgMTNxMCAxMTYgODEuNSAxOTcuNXQxOTcuNSA4MS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDE7IiBkPSJNMTAxMCAxMDEwcTExMSAtMTExIDE1MC41IC0yNjAuNXQwIC0yOTl0LTE1MC41IC0yNjAuNXEtODMgLTgzIC0xOTEuNSAtMTI2LjV0LTIxOC41IC00My41dC0yMTguNSA0My41dC0xOTEuNSAxMjYuNXEtMTExIDExMSAtMTUwLjUgMjYwLjV0MCAyOTl0MTUwLjUgMjYwLjVxODMgODMgMTkxLjUgMTI2LjV0MjE4LjUgNDMuNXQyMTguNSAtNDMuNXQxOTEuNSAtMTI2LjV6TTQ3NiAxMDY1cS00IDAgLTggLTFxLTEyMSAtMzQgLTIwOS41IC0xMjIuNSB0LTEyMi41IC0yMDkuNXEtNCAtMTIgMi41IC0yM3QxOC41IC0xNGwzNiAtOXEzIC0xIDcgLTFxMjMgMCAyOSAyMnEyNyA5NiA5OCAxNjZxNzAgNzEgMTY2IDk4cTExIDMgMTcuNSAxMy41dDMuNSAyMi41bC05IDM1cS0zIDEzIC0xNCAxOXEtNyA0IC0xNSA0ek01MTIgOTIwcS00IDAgLTkgLTJxLTgwIC0yNCAtMTM4LjUgLTgyLjV0LTgyLjUgLTEzOC41cS00IC0xMyAyIC0yNHQxOSAtMTRsMzQgLTlxNCAtMSA4IC0xcTIyIDAgMjggMjEgcTE4IDU4IDU4LjUgOTguNXQ5Ny41IDU4LjVxMTIgMyAxOCAxMy41dDMgMjEuNWwtOSAzNXEtMyAxMiAtMTQgMTlxLTcgNCAtMTUgNHpNNzE5LjUgNzE5LjVxLTQ5LjUgNDkuNSAtMTE5LjUgNDkuNXQtMTE5LjUgLTQ5LjV0LTQ5LjUgLTExOS41dDQ5LjUgLTExOS41dDExOS41IC00OS41dDExOS41IDQ5LjV0NDkuNSAxMTkuNXQtNDkuNSAxMTkuNXpNODU1IDU1MXEtMjIgMCAtMjggLTIxcS0xOCAtNTggLTU4LjUgLTk4LjV0LTk4LjUgLTU3LjUgcS0xMSAtNCAtMTcgLTE0LjV0LTMgLTIxLjVsOSAtMzVxMyAtMTIgMTQgLTE5cTcgLTQgMTUgLTRxNCAwIDkgMnE4MCAyNCAxMzguNSA4Mi41dDgyLjUgMTM4LjVxNCAxMyAtMi41IDI0dC0xOC41IDE0bC0zNCA5cS00IDEgLTggMXpNMTAwMCA1MTVxLTIzIDAgLTI5IC0yMnEtMjcgLTk2IC05OCAtMTY2cS03MCAtNzEgLTE2NiAtOThxLTExIC0zIC0xNy41IC0xMy41dC0zLjUgLTIyLjVsOSAtMzVxMyAtMTMgMTQgLTE5cTcgLTQgMTUgLTQgcTQgMCA4IDFxMTIxIDM0IDIwOS41IDEyMi41dDEyMi41IDIwOS41cTQgMTIgLTIuNSAyM3QtMTguNSAxNGwtMzYgOXEtMyAxIC03IDF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwMjsiIGQ9Ik03MDAgODAwaDMwMHYtMzgwaC0xODB2MjAwaC0zNDB2LTIwMGgtMzgwdjc1NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDU3NXYtNDAwek0xMDAwIDkwMGgtMjAwdjIwMHpNNzAwIDMwMGgxNjJsLTIxMiAtMjEybC0yMTIgMjEyaDE2MnYyMDBoMTAwdi0yMDB6TTUyMCAwaC0zOTVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzOTV6TTEwMDAgMjIwdi0xOTVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xOTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwMzsiIGQ9Ik03MDAgODAwaDMwMHYtNTIwbC0zNTAgMzUwbC01NTAgLTU1MHYxMDk1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNTc1di00MDB6TTEwMDAgOTAwaC0yMDB2MjAwek04NjIgMjAwaC0xNjJ2LTIwMGgtMTAwdjIwMGgtMTYybDIxMiAyMTJ6TTQ4MCAwaC0zNTVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1NWgzODB2LTgwek0xMDAwIDgwdi01NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1NXY4MGgxODB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwNDsiIGQ9Ik0xMTYyIDgwMGgtMTYydi0yMDBoMTAwbDEwMCAtMTAwaC0zMDB2MzAwaC0xNjJsMjEyIDIxMnpNMjAwIDgwMGgyMDBxMjcgMCA0MCAtMnQyOS41IC0xMC41dDIzLjUgLTMwdDcgLTU3LjVoMzAwdi0xMDBoLTYwMGwtMjAwIC0zNTB2NDUwaDEwMHEwIDM2IDcgNTcuNXQyMy41IDMwdDI5LjUgMTAuNXQ0MCAyek04MDAgNDAwaDI0MGwtMjQwIC00MDBoLTgwMGwzMDAgNTAwaDUwMHYtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDU7IiBkPSJNNjUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMDAwIDg1MHYxNTBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTgwMCBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTYwMHEtMSAwIC0yMCA0bDI0NiAyNDZsLTMyNiAzMjZ2MzI0cTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXYtMTUwcTAgLTYyIDQ0IC0xMDZ0MTA2IC00NGgzMDBxNjIgMCAxMDYgNDR0NDQgMTA2ek00MTIgMjUwbC0yMTIgLTIxMnYxNjJoLTIwMHYxMDBoMjAwdjE2MnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjA2OyIgZD0iTTQ1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDUwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNODAwIDg1MHYxNTBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTUwMCBoLTIwMHYtMzAwaDIwMHEwIC0zNiAtNyAtNTcuNXQtMjMuNSAtMzB0LTI5LjUgLTEwLjV0LTQwIC0yaC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djgwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV2LTE1MHEwIC02MiA0NCAtMTA2dDEwNiAtNDRoMzAwcTYyIDAgMTA2IDQ0dDQ0IDEwNnpNMTIxMiAyNTBsLTIxMiAtMjEydjE2MmgtMjAwdjEwMGgyMDB2MTYyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDk7IiBkPSJNNjU4IDExOTdsNjM3IC0xMTA0cTIzIC0zOCA3IC02NS41dC02MCAtMjcuNWgtMTI3NnEtNDQgMCAtNjAgMjcuNXQ3IDY1LjVsNjM3IDExMDRxMjIgMzkgNTQgMzl0NTQgLTM5ek03MDQgODAwaC0yMDhxLTIwIDAgLTMyIC0xNC41dC04IC0zNC41bDU4IC0zMDJxNCAtMjAgMjEuNSAtMzQuNXQzNy41IC0xNC41aDU0cTIwIDAgMzcuNSAxNC41dDIxLjUgMzQuNWw1OCAzMDJxNCAyMCAtOCAzNC41dC0zMiAxNC41ek01MDAgMzAwdi0xMDBoMjAwIHYxMDBoLTIwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjEwOyIgZD0iTTQyNSAxMTAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek00MjUgODAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41IHQxNy41IDcuNXpNODI1IDgwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMjUgNTAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDI1IDUwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNODI1IDUwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNSB2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTI1IDIwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDI1IDIwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41IHQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTgyNSAyMDBoMjUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxMTsiIGQ9Ik03MDAgMTIwMGgxMDB2LTIwMGgtMTAwdi0xMDBoMzUwcTYyIDAgODYuNSAtMzkuNXQtMy41IC05NC41bC02NiAtMTMycS00MSAtODMgLTgxIC0xMzRoLTc3MnEtNDAgNTEgLTgxIDEzNGwtNjYgMTMycS0yOCA1NSAtMy41IDk0LjV0ODYuNSAzOS41aDM1MHYxMDBoLTEwMHYyMDBoMTAwdjEwMGgyMDB2LTEwMHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEybDEzNyAtMTAwIGgtOTUwbDEzOCAxMDBoLTEzcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41ek01MCAxMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMTI7IiBkPSJNNjAwIDEzMDBxNDAgMCA2OC41IC0yOS41dDI4LjUgLTcwLjVoLTE5NHEwIDQxIDI4LjUgNzAuNXQ2OC41IDI5LjV6TTQ0MyAxMTAwaDMxNHExOCAtMzcgMTggLTc1cTAgLTggLTMgLTI1aDMyOHE0MSAwIDQ0LjUgLTE2LjV0LTMwLjUgLTM4LjVsLTE3NSAtMTQ1aC02NzhsLTE3OCAxNDVxLTM0IDIyIC0yOSAzOC41dDQ2IDE2LjVoMzI4cS0zIDE3IC0zIDI1cTAgMzggMTggNzV6TTI1MCA3MDBoNzAwcTIxIDAgMzUuNSAtMTQuNSB0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTUwdi0yMDBsMjc1IC0yMDBoLTk1MGwyNzUgMjAwdjIwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41ek01MCAxMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMTM7IiBkPSJNNjAwIDExODFxNzUgMCAxMjggLTUzdDUzIC0xMjh0LTUzIC0xMjh0LTEyOCAtNTN0LTEyOCA1M3QtNTMgMTI4dDUzIDEyOHQxMjggNTN6TTYwMiA3OThoNDZxMzQgMCA1NS41IC0yOC41dDIxLjUgLTg2LjVxMCAtNzYgMzkgLTE4M2gtMzI0cTM5IDEwNyAzOSAxODNxMCA1OCAyMS41IDg2LjV0NTYuNSAyOC41aDQ1ek0yNTAgNDAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTMgbDEzOCAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNDsiIGQ9Ik02MDAgMTMwMHE0NyAwIDkyLjUgLTUzLjV0NzEgLTEyM3QyNS41IC0xMjMuNXEwIC03OCAtNTUuNSAtMTMzLjV0LTEzMy41IC01NS41dC0xMzMuNSA1NS41dC01NS41IDEzMy41cTAgNjIgMzQgMTQzbDE0NCAtMTQzbDExMSAxMTFsLTE2MyAxNjNxMzQgMjYgNjMgMjZ6TTYwMiA3OThoNDZxMzQgMCA1NS41IC0yOC41dDIxLjUgLTg2LjVxMCAtNzYgMzkgLTE4M2gtMzI0cTM5IDEwNyAzOSAxODNxMCA1OCAyMS41IDg2LjV0NTYuNSAyOC41aDQ1IHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEzbDEzOCAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNTsiIGQ9Ik02MDAgMTIwMGwzMDAgLTE2MXYtMTM5aC0zMDBxMCAtNTcgMTguNSAtMTA4dDUwIC05MS41dDYzIC03MnQ3MCAtNjcuNXQ1Ny41IC02MWgtNTMwcS02MCA4MyAtOTAuNSAxNzcuNXQtMzAuNSAxNzguNXQzMyAxNjQuNXQ4Ny41IDEzOS41dDEyNiA5Ni41dDE0NS41IDQxLjV2LTk4ek0yNTAgNDAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTNsMTM4IC0xMDBoLTk1MGwxMzcgMTAwIGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNjsiIGQ9Ik02MDAgMTMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNzhxNDYgLTI2IDczIC03MnQyNyAtMTAwdi01MGgtNDAwdjUwcTAgNTQgMjcgMTAwdDczIDcydjc4cTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNNDAwIDgwMGg0MDBxNTQgMCAxMDAgLTI3dDcyIC03M2gtMTcydi0xMDBoMjAwdi0xMDBoLTIwMHYtMTAwaDIwMHYtMTAwaC0yMDB2LTEwMGgyMDBxMCAtODMgLTU4LjUgLTE0MS41dC0xNDEuNSAtNTguNWgtNDAwIHEtODMgMCAtMTQxLjUgNTguNXQtNTguNSAxNDEuNXY0MDBxMCA4MyA1OC41IDE0MS41dDE0MS41IDU4LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxODsiIGQ9Ik0xNTAgMTEwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtOTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMjUgNDAwaDk1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjgzbDIyNCAtMjI0cTEzIC0xMyAxMyAtMzEuNXQtMTMgLTMyIHQtMzEuNSAtMTMuNXQtMzEuNSAxM2wtODggODhoLTUyNGwtODcgLTg4cS0xMyAtMTMgLTMyIC0xM3QtMzIgMTMuNXQtMTMgMzJ0MTMgMzEuNWwyMjQgMjI0aC0yODlxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01NDEgMzAwbC0xMDAgLTEwMGgzMjRsLTEwMCAxMDBoLTEyNHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjE5OyIgZD0iTTIwMCAxMTAwaDgwMHE4MyAwIDE0MS41IC01OC41dDU4LjUgLTE0MS41di0yMDBoLTEwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNWgtMjUwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41aC0xMDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTI1MHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNWgtMTAwdjIwMHEwIDgzIDU4LjUgMTQxLjV0MTQxLjUgNTguNXpNMTAwIDYwMGgxMDAwcTQxIDAgNzAuNSAtMjkuNSB0MjkuNSAtNzAuNXYtMzAwaC0xMjAwdjMwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTMwMCAxMDB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaDIwMHpNMTEwMCAxMDB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaDIwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjIxOyIgZD0iTTQ4MCAxMTY1bDY4MiAtNjgzcTMxIC0zMSAzMSAtNzUuNXQtMzEgLTc1LjVsLTEzMSAtMTMxaC00ODFsLTUxNyA1MThxLTMyIDMxIC0zMiA3NS41dDMyIDc1LjVsMjk1IDI5NnEzMSAzMSA3NS41IDMxdDc2LjUgLTMxek0xMDggNzk0bDM0MiAtMzQybDMwMyAzMDRsLTM0MSAzNDF6TTI1MCAxMDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtOTAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjIzOyIgZD0iTTEwNTcgNjQ3bC0xODkgNTA2cS04IDE5IC0yNy41IDMzdC00MC41IDE0aC00MDBxLTIxIDAgLTQwLjUgLTE0dC0yNy41IC0zM2wtMTg5IC01MDZxLTggLTE5IDEuNSAtMzN0MzAuNSAtMTRoNjI1di0xNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41dDM1LjUgMTQuNXQxNC41IDM1LjV2MTUwaDEyNXEyMSAwIDMwLjUgMTR0MS41IDMzek04OTcgMGgtNTk1djUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHY1MCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ4djMwMGgyMDB2LTMwMGg0N3EyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMjQ7IiBkPSJNOTAwIDgwMGgzMDB2LTU3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTM3NXY1OTFsLTMwMCAzMDB2ODRxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgzNzV2LTQwMHpNMTIwMCA5MDBoLTIwMHYyMDB6TTQwMCA2MDBoMzAwdi01NzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC02NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgzNzV2LTQwMHpNNzAwIDcwMGgtMjAwdjIwMHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIyNTsiIGQ9Ik00ODQgMTA5NWgxOTVxNzUgMCAxNDYgLTMyLjV0MTI0IC04NnQ4OS41IC0xMjIuNXQ0OC41IC0xNDJxMTggLTE0IDM1IC0yMHEzMSAtMTAgNjQuNSA2LjV0NDMuNSA0OC41cTEwIDM0IC0xNSA3MXEtMTkgMjcgLTkgNDNxNSA4IDEyLjUgMTF0MTkgLTF0MjMuNSAtMTZxNDEgLTQ0IDM5IC0xMDVxLTMgLTYzIC00NiAtMTA2LjV0LTEwNCAtNDMuNWgtNjJxLTcgLTU1IC0zNSAtMTE3dC01NiAtMTAwbC0zOSAtMjM0cS0zIC0yMCAtMjAgLTM0LjUgdC0zOCAtMTQuNWgtMTAwcS0yMSAwIC0zMyAxNC41dC05IDM0LjVsMTIgNzBxLTQ5IC0xNCAtOTEgLTE0aC0xOTVxLTI0IDAgLTY1IDhsLTExIC02NHEtMyAtMjAgLTIwIC0zNC41dC0zOCAtMTQuNWgtMTAwcS0yMSAwIC0zMyAxNC41dC05IDM0LjVsMjYgMTU3cS04NCA3NCAtMTI4IDE3NWwtMTU5IDUzcS0xOSA3IC0zMyAyNnQtMTQgNDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEyNHExMSA4NyA1NiAxNjZsLTExMSA5NSBxLTE2IDE0IC0xMi41IDIzLjV0MjQuNSA5LjVoMjAzcTExNiAxMDEgMjUwIDEwMXpNNjc1IDEwMDBoLTI1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMjUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2NTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMjY7IiBkPSJNNjQxIDkwMGw0MjMgMjQ3cTE5IDggNDIgMi41dDM3IC0yMS41bDMyIC0zOHExNCAtMTUgMTIuNSAtMzZ0LTE3LjUgLTM0bC0xMzkgLTEyMGgtMzkwek01MCAxMTAwaDEwNnE2NyAwIDEwMyAtMTd0NjYgLTcxbDEwMiAtMjEyaDgyM3EyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBxMCAtMjEgLTE0IC00MHQtMzMgLTI2bC03MzcgLTEzMnEtMjMgLTQgLTQwIDZ0LTI2IDI1cS00MiA2NyAtMTAwIDY3aC0zMDBxLTYyIDAgLTEwNiA0NCB0LTQ0IDEwNnYyMDBxMCA2MiA0NCAxMDZ0MTA2IDQ0ek0xNzMgOTI4aC04MHEtMTkgMCAtMjggLTE0dC05IC0zNXYtNTZxMCAtNTEgNDIgLTUxaDEzNHExNiAwIDIxLjUgOHQ1LjUgMjRxMCAxMSAtMTYgNDV0LTI3IDUxcS0xOCAyOCAtNDMgMjh6TTU1MCA3MjdxLTMyIDAgLTU0LjUgLTIyLjV0LTIyLjUgLTU0LjV0MjIuNSAtNTQuNXQ1NC41IC0yMi41dDU0LjUgMjIuNXQyMi41IDU0LjV0LTIyLjUgNTQuNXQtNTQuNSAyMi41ek0xMzAgMzg5IGwxNTIgMTMwcTE4IDE5IDM0IDI0dDMxIC0zLjV0MjQuNSAtMTcuNXQyNS41IC0yOHEyOCAtMzUgNTAuNSAtNTF0NDguNSAtMTNsNjMgNWw0OCAtMTc5cTEzIC02MSAtMy41IC05Ny41dC02Ny41IC03OS41bC04MCAtNjlxLTQ3IC00MCAtMTA5IC0zNS41dC0xMDMgNTEuNWwtMTMwIDE1MXEtNDAgNDcgLTM1LjUgMTA5LjV0NTEuNSAxMDIuNXpNMzgwIDM3N2wtMTAyIC04OHEtMzEgLTI3IDIgLTY1bDM3IC00M3ExMyAtMTUgMjcuNSAtMTkuNSB0MzEuNSA2LjVsNjEgNTNxMTkgMTYgMTQgNDlxLTIgMjAgLTEyIDU2dC0xNyA0NXEtMTEgMTIgLTE5IDE0dC0yMyAtOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjI3OyIgZD0iTTYyNSAxMjAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTEwOXE3OSAtMzMgMTMxIC04Ny41dDUzIC0xMjguNXExIC00NiAtMTUgLTg0LjV0LTM5IC02MXQtNDYgLTM4dC0zOSAtMjEuNWwtMTcgLTZxNiAwIDE1IC0xLjV0MzUgLTl0NTAgLTE3LjV0NTMgLTMwdDUwIC00NXQzNS41IC02NHQxNC41IC04NHEwIC01OSAtMTEuNSAtMTA1LjV0LTI4LjUgLTc2LjV0LTQ0IC01MXQtNDkuNSAtMzEuNXQtNTQuNSAtMTZ0LTQ5LjUgLTYuNSB0LTQzLjUgLTF2LTc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NzVoLTEwMHYtNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY3NWgtMTc1cS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNzV2NjAwaC03NXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxNzV2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di03NWgxMDB2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDAwIDkwMHYtMjAwaDI2M3EyOCAwIDQ4LjUgMTAuNXQzMCAyNXQxNSAyOXQ1LjUgMjUuNWwxIDEwcTAgNCAtMC41IDExdC02IDI0dC0xNSAzMHQtMzAgMjR0LTQ4LjUgMTFoLTI2M3pNNDAwIDUwMHYtMjAwaDM2M3EyOCAwIDQ4LjUgMTAuNSB0MzAgMjV0MTUgMjl0NS41IDI1LjVsMSAxMHEwIDQgLTAuNSAxMXQtNiAyNHQtMTUgMzB0LTMwIDI0dC00OC41IDExaC0zNjN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzMDsiIGQ9Ik0yMTIgMTE5OGg3ODBxODYgMCAxNDcgLTYxdDYxIC0xNDd2LTQxNnEwIC01MSAtMTggLTE0Mi41dC0zNiAtMTU3LjVsLTE4IC02NnEtMjkgLTg3IC05My41IC0xNDYuNXQtMTQ2LjUgLTU5LjVoLTU3MnEtODIgMCAtMTQ3IDU5dC05MyAxNDdxLTggMjggLTIwIDczdC0zMiAxNDMuNXQtMjAgMTQ5LjV2NDE2cTAgODYgNjEgMTQ3dDE0NyA2MXpNNjAwIDEwNDVxLTcwIDAgLTEzMi41IC0xMS41dC0xMDUuNSAtMzAuNXQtNzguNSAtNDEuNSB0LTU3IC00NXQtMzYgLTQxdC0yMC41IC0zMC41bC02IC0xMmwxNTYgLTI0M2g1NjBsMTU2IDI0M3EtMiA1IC02IDEyLjV0LTIwIDI5LjV0LTM2LjUgNDJ0LTU3IDQ0LjV0LTc5IDQydC0xMDUgMjkuNXQtMTMyLjUgMTJ6TTc2MiA3MDNoLTE1N2wxOTUgMjYxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzE7IiBkPSJNNDc1IDEzMDBoMTUwcTEwMyAwIDE4OSAtODZ0ODYgLTE4OXYtNTAwcTAgLTQxIC00MiAtODN0LTgzIC00MmgtNDUwcS00MSAwIC04MyA0MnQtNDIgODN2NTAwcTAgMTAzIDg2IDE4OXQxODkgODZ6TTcwMCAzMDB2LTIyNXEwIC0yMSAtMjcgLTQ4dC00OCAtMjdoLTE1MHEtMjEgMCAtNDggMjd0LTI3IDQ4djIyNWgzMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzMjsiIGQ9Ik00NzUgMTMwMGg5NnEwIC0xNTAgODkuNSAtMjM5LjV0MjM5LjUgLTg5LjV2LTQ0NnEwIC00MSAtNDIgLTgzdC04MyAtNDJoLTQ1MHEtNDEgMCAtODMgNDJ0LTQyIDgzdjUwMHEwIDEwMyA4NiAxODl0MTg5IDg2ek03MDAgMzAwdi0yMjVxMCAtMjEgLTI3IC00OHQtNDggLTI3aC0xNTBxLTIxIDAgLTQ4IDI3dC0yNyA0OHYyMjVoMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzM7IiBkPSJNMTI5NCA3NjdsLTYzOCAtMjgzbC0zNzggMTcwbC03OCAtNjB2LTIyNGwxMDAgLTE1MHYtMTk5bC0xNTAgMTQ4bC0xNTAgLTE0OXYyMDBsMTAwIDE1MHYyNTBxMCA0IC0wLjUgMTAuNXQwIDkuNXQxIDh0MyA4dDYuNSA2bDQ3IDQwbC0xNDcgNjVsNjQyIDI4M3pNMTAwMCAzODBsLTM1MCAtMTY2bC0zNTAgMTY2djE0N2wzNTAgLTE2NWwzNTAgMTY1di0xNDd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzNDsiIGQ9Ik0yNTAgODAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek02NTAgODAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek0xMDUwIDgwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnQtNDQgLTEwNnQtMTA2IC00NHQtMTA2IDQ0dC00NCAxMDZ0NDQgMTA2dDEwNiA0NHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjM1OyIgZD0iTTU1MCAxMTAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek01NTAgNzAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek01NTAgMzAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzY7IiBkPSJNMTI1IDExMDBoOTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtOTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEyNSA3MDBoOTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtOTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjUgdDE3LjUgNy41ek0xMjUgMzAwaDk1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTk1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzc7IiBkPSJNMzUwIDEyMDBoNTAwcTE2MiAwIDI1NiAtOTMuNXQ5NCAtMjU2LjV2LTUwMHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNTAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY1MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41ek05MDAgMTAwMGgtNjAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di02MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDYwMHE0MSAwIDcwLjUgMjkuNSB0MjkuNSA3MC41djYwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNMzUwIDkwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYzMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek00MDAgODAwdi0yMDBoNDAwdjIwMGgtNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzg7IiBkPSJNMTUwIDExMDBoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNSB0LTM1LjUgLTE0LjVoLTEwMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2MjAwaC01MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV0MTQuNSAzNS41dDM1LjUgMTQuNWg1MHYyMDBoLTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41aDUwdjIwMGgtNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzOTsiIGQ9Ik02NTAgMTE4N3E4NyAtNjcgMTE4LjUgLTE1NnQwIC0xNzh0LTExOC41IC0xNTVxLTg3IDY2IC0xMTguNSAxNTV0MCAxNzh0MTE4LjUgMTU2ek0zMDAgODAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAwIDgwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhxMCAxMjQgODggMjEydDIxMiA4OHpNMzAwIDUwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnogTTEwMDAgNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek03MDAgMTk5di0xNDRxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjV0LTM1LjUgMTQuNXQtMTQuNSAzNS41djE0MnE0MCAtNCA0MyAtNHExNyAwIDU3IDZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0MDsiIGQ9Ik03NDUgODc4bDY5IDE5cTI1IDYgNDUgLTEybDI5OCAtMjk1cTExIC0xMSAxNSAtMjYuNXQtMiAtMzAuNXEtNSAtMTQgLTE4IC0yMy41dC0yOCAtOS41aC04cTEgMCAxIC0xM3EwIC0yOSAtMiAtNTZ0LTguNSAtNjJ0LTIwIC02M3QtMzMgLTUzdC01MSAtMzl0LTcyLjUgLTE0aC0xNDZxLTE4NCAwIC0xODQgMjg4cTAgMjQgMTAgNDdxLTIwIDQgLTYyIDR0LTYzIC00cTExIC0yNCAxMSAtNDdxMCAtMjg4IC0xODQgLTI4OGgtMTQyIHEtNDggMCAtODQuNSAyMXQtNTYgNTF0LTMyIDcxLjV0LTE2IDc1dC0zLjUgNjguNXEwIDEzIDIgMTNoLTdxLTE1IDAgLTI3LjUgOS41dC0xOC41IDIzLjVxLTYgMTUgLTIgMzAuNXQxNSAyNS41bDI5OCAyOTZxMjAgMTggNDYgMTFsNzYgLTE5cTIwIC01IDMwLjUgLTIyLjV0NS41IC0zNy41dC0yMi41IC0zMXQtMzcuNSAtNWwtNTEgMTJsLTE4MiAtMTkzaDg5MWwtMTgyIDE5M2wtNDQgLTEycS0yMCAtNSAtMzcuNSA2dC0yMi41IDMxdDYgMzcuNSB0MzEgMjIuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQxOyIgZD0iTTEyMDAgOTAwaC01MHEwIDIxIC00IDM3dC05LjUgMjYuNXQtMTggMTcuNXQtMjIgMTF0LTI4LjUgNS41dC0zMSAydC0zNyAwLjVoLTIwMHYtODUwcTAgLTIyIDI1IC0zNC41dDUwIC0xMy41bDI1IC0ydi0xMDBoLTQwMHYxMDBxNCAwIDExIDAuNXQyNCAzdDMwIDd0MjQgMTV0MTEgMjQuNXY4NTBoLTIwMHEtMjUgMCAtMzcgLTAuNXQtMzEgLTJ0LTI4LjUgLTUuNXQtMjIgLTExdC0xOCAtMTcuNXQtOS41IC0yNi41dC00IC0zN2gtNTB2MzAwIGgxMDAwdi0zMDB6TTUwMCA0NTBoLTI1cTAgMTUgLTQgMjQuNXQtOSAxNC41dC0xNyA3LjV0LTIwIDN0LTI1IDAuNWgtMTAwdi00MjVxMCAtMTEgMTIuNSAtMTcuNXQyNS41IC03LjVoMTJ2LTUwaC0yMDB2NTBxNTAgMCA1MCAyNXY0MjVoLTEwMHEtMTcgMCAtMjUgLTAuNXQtMjAgLTN0LTE3IC03LjV0LTkgLTE0LjV0LTQgLTI0LjVoLTI1djE1MGg1MDB2LTE1MHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQyOyIgZD0iTTEwMDAgMzAwdjUwcS0yNSAwIC01NSAzMnEtMTQgMTQgLTI1IDMxdC0xNiAyN2wtNCAxMWwtMjg5IDc0N2gtNjlsLTMwMCAtNzU0cS0xOCAtMzUgLTM5IC01NnEtOSAtOSAtMjQuNSAtMTguNXQtMjYuNSAtMTQuNWwtMTEgLTV2LTUwaDI3M3Y1MHEtNDkgMCAtNzguNSAyMS41dC0xMS41IDY3LjVsNjkgMTc2aDI5M2w2MSAtMTY2cTEzIC0zNCAtMy41IC02Ni41dC01NS41IC0zMi41di01MGgzMTJ6TTQxMiA2OTFsMTM0IDM0MmwxMjEgLTM0MiBoLTI1NXpNMTEwMCAxNTB2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNDM7IiBkPSJNNTAgMTIwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNjExIDExMThoLTcwcS0xMyAwIC0xOCAtMTJsLTI5OSAtNzUzcS0xNyAtMzIgLTM1IC01MXEtMTggLTE4IC01NiAtMzRxLTEyIC01IC0xMiAtMTh2LTUwcTAgLTggNS41IC0xNHQxNC41IC02IGgyNzNxOCAwIDE0IDZ0NiAxNHY1MHEwIDggLTYgMTR0LTE0IDZxLTU1IDAgLTcxIDIzcS0xMCAxNCAwIDM5bDYzIDE2M2gyNjZsNTcgLTE1M3ExMSAtMzEgLTYgLTU1cS0xMiAtMTcgLTM2IC0xN3EtOCAwIC0xNCAtNnQtNiAtMTR2LTUwcTAgLTggNiAtMTR0MTQgLTZoMzEzcTggMCAxNCA2dDYgMTR2NTBxMCA3IC01LjUgMTN0LTEzLjUgN3EtMTcgMCAtNDIgMjVxLTI1IDI3IC00MCA2M2gtMWwtMjg4IDc0OHEtNSAxMiAtMTkgMTJ6TTYzOSA2MTEgaC0xOTdsMTAzIDI2NHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQ0OyIgZD0iTTEyMDAgMTEwMGgtMTIwMHYxMDBoMTIwMHYtMTAwek01MCAxMDAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtOTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djkwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCAxMDAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDAgcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek03MDAgOTAwdi0zMDBoMzAwdjMwMGgtMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNDU7IiBkPSJNNTAgMTIwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTkwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY5MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek02NTAgNzAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek03MDAgNjAwdi0zMDBoMzAwdjMwMGgtMzAwek0xMjAwIDBoLTEyMDB2MTAwaDEyMDB2LTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQ2OyIgZD0iTTUwIDEwMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0zNTBoMTAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoMTAwdi0xMDBoLTEwMHYtMTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djE1MGgtMTAwdi0zNTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTcwMCA3MDB2LTMwMGgzMDB2MzAwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0NzsiIGQ9Ik0xMDAgMGgtMTAwdjEyMDBoMTAwdi0xMjAwek0yNTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zMDAgMTAwMHYtMzAwaDMwMHYzMDBoLTMwMHpNMjUwIDUwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTkwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQ4OyIgZD0iTTYwMCAxMTAwaDE1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xNTB2LTEwMGg0NTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtOTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDM1MHYxMDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41IHQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTUwdjEwMGgxMDB2LTEwMHpNNDAwIDEwMDB2LTMwMGgzMDB2MzAwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0OTsiIGQ9Ik0xMjAwIDBoLTEwMHYxMjAwaDEwMHYtMTIwMHpNNTUwIDExMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNjAwIDEwMDB2LTMwMGgzMDB2MzAwaC0zMDB6TTUwIDUwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTkwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjUwOyIgZD0iTTg2NSA1NjVsLTQ5NCAtNDk0cS0yMyAtMjMgLTQxIC0yM3EtMTQgMCAtMjIgMTMuNXQtOCAzOC41djEwMDBxMCAyNSA4IDM4LjV0MjIgMTMuNXExOCAwIDQxIC0yM2w0OTQgLTQ5NHExNCAtMTQgMTQgLTM1dC0xNCAtMzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI1MTsiIGQ9Ik0zMzUgNjM1bDQ5NCA0OTRxMjkgMjkgNTAgMjAuNXQyMSAtNDkuNXYtMTAwMHEwIC00MSAtMjEgLTQ5LjV0LTUwIDIwLjVsLTQ5NCA0OTRxLTE0IDE0IC0xNCAzNXQxNCAzNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjUyOyIgZD0iTTEwMCA5MDBoMTAwMHE0MSAwIDQ5LjUgLTIxdC0yMC41IC01MGwtNDk0IC00OTRxLTE0IC0xNCAtMzUgLTE0dC0zNSAxNGwtNDk0IDQ5NHEtMjkgMjkgLTIwLjUgNTB0NDkuNSAyMXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjUzOyIgZD0iTTYzNSA4NjVsNDk0IC00OTRxMjkgLTI5IDIwLjUgLTUwdC00OS41IC0yMWgtMTAwMHEtNDEgMCAtNDkuNSAyMXQyMC41IDUwbDQ5NCA0OTRxMTQgMTQgMzUgMTR0MzUgLTE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNTQ7IiBkPSJNNzAwIDc0MXYtMTgybC02OTIgLTMyM3YyMjFsNDEzIDE5M2wtNDEzIDE5M3YyMjF6TTEyMDAgMGgtODAwdjIwMGg4MDB2LTIwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU1OyIgZD0iTTEyMDAgOTAwaC0yMDB2LTEwMGgyMDB2LTEwMGgtMzAwdjMwMGgyMDB2MTAwaC0yMDB2MTAwaDMwMHYtMzAwek0wIDcwMGg1MHEwIDIxIDQgMzd0OS41IDI2LjV0MTggMTcuNXQyMiAxMXQyOC41IDUuNXQzMSAydDM3IDAuNWgxMDB2LTU1MHEwIC0yMiAtMjUgLTM0LjV0LTUwIC0xMy41bC0yNSAtMnYtMTAwaDQwMHYxMDBxLTQgMCAtMTEgMC41dC0yNCAzdC0zMCA3dC0yNCAxNXQtMTEgMjQuNXY1NTBoMTAwcTI1IDAgMzcgLTAuNXQzMSAtMiB0MjguNSAtNS41dDIyIC0xMXQxOCAtMTcuNXQ5LjUgLTI2LjV0NCAtMzdoNTB2MzAwaC04MDB2LTMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU2OyIgZD0iTTgwMCA3MDBoLTUwcTAgMjEgLTQgMzd0LTkuNSAyNi41dC0xOCAxNy41dC0yMiAxMXQtMjguNSA1LjV0LTMxIDJ0LTM3IDAuNWgtMTAwdi01NTBxMCAtMjIgMjUgLTM0LjV0NTAgLTE0LjVsMjUgLTF2LTEwMGgtNDAwdjEwMHE0IDAgMTEgMC41dDI0IDN0MzAgN3QyNCAxNXQxMSAyNC41djU1MGgtMTAwcS0yNSAwIC0zNyAtMC41dC0zMSAtMnQtMjguNSAtNS41dC0yMiAtMTF0LTE4IC0xNy41dC05LjUgLTI2LjV0LTQgLTM3aC01MHYzMDAgaDgwMHYtMzAwek0xMTAwIDIwMGgtMjAwdi0xMDBoMjAwdi0xMDBoLTMwMHYzMDBoMjAwdjEwMGgtMjAwdjEwMGgzMDB2LTMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU3OyIgZD0iTTcwMSAxMDk4aDE2MHExNiAwIDIxIC0xMXQtNyAtMjNsLTQ2NCAtNDY0bDQ2NCAtNDY0cTEyIC0xMiA3IC0yM3QtMjEgLTExaC0xNjBxLTEzIDAgLTIzIDlsLTQ3MSA0NzFxLTcgOCAtNyAxOHQ3IDE4bDQ3MSA0NzFxMTAgOSAyMyA5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNTg7IiBkPSJNMzM5IDEwOThoMTYwcTEzIDAgMjMgLTlsNDcxIC00NzFxNyAtOCA3IC0xOHQtNyAtMThsLTQ3MSAtNDcxcS0xMCAtOSAtMjMgLTloLTE2MHEtMTYgMCAtMjEgMTF0NyAyM2w0NjQgNDY0bC00NjQgNDY0cS0xMiAxMiAtNyAyM3QyMSAxMXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU5OyIgZD0iTTEwODcgODgycTExIC01IDExIC0yMXYtMTYwcTAgLTEzIC05IC0yM2wtNDcxIC00NzFxLTggLTcgLTE4IC03dC0xOCA3bC00NzEgNDcxcS05IDEwIC05IDIzdjE2MHEwIDE2IDExIDIxdDIzIC03bDQ2NCAtNDY0bDQ2NCA0NjRxMTIgMTIgMjMgN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjYwOyIgZD0iTTYxOCA5OTNsNDcxIC00NzFxOSAtMTAgOSAtMjN2LTE2MHEwIC0xNiAtMTEgLTIxdC0yMyA3bC00NjQgNDY0bC00NjQgLTQ2NHEtMTIgLTEyIC0yMyAtN3QtMTEgMjF2MTYwcTAgMTMgOSAyM2w0NzEgNDcxcTggNyAxOCA3dDE4IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGY4ZmY7IiBkPSJNMTAwMCAxMjAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek00NTAgMTAwMGgxMDBxMjEgMCA0MCAtMTR0MjYgLTMzbDc5IC0xOTRxNSAxIDE2IDNxMzQgNiA1NCA5LjV0NjAgN3Q2NS41IDF0NjEgLTEwdDU2LjUgLTIzdDQyLjUgLTQydDI5IC02NHQ1IC05MnQtMTkuNSAtMTIxLjVxLTEgLTcgLTMgLTE5LjV0LTExIC01MHQtMjAuNSAtNzN0LTMyLjUgLTgxLjV0LTQ2LjUgLTgzdC02NCAtNzAgdC04Mi41IC01MHEtMTMgLTUgLTQyIC01dC02NS41IDIuNXQtNDcuNSAyLjVxLTE0IDAgLTQ5LjUgLTMuNXQtNjMgLTMuNXQtNDMuNSA3cS01NyAyNSAtMTA0LjUgNzguNXQtNzUgMTExLjV0LTQ2LjUgMTEydC0yNiA5MGwtNyAzNXEtMTUgNjMgLTE4IDExNXQ0LjUgODguNXQyNiA2NHQzOS41IDQzLjV0NTIgMjUuNXQ1OC41IDEzdDYyLjUgMnQ1OS41IC00LjV0NTUuNSAtOGwtMTQ3IDE5MnEtMTIgMTggLTUuNSAzMHQyNy41IDEyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDFmNTExOyIgZD0iTTI1MCAxMjAwaDYwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xNTB2LTUwMGwtMjU1IC0xNzhxLTE5IC05IC0zMiAtMXQtMTMgMjl2NjUwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQwMCAxMTAwdi0xMDBoMzAwdjEwMGgtMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDFmNmFhOyIgZD0iTTI1MCAxMjAwaDc1MHEzOSAwIDY5LjUgLTQwLjV0MzAuNSAtODQuNXYtOTMzbC03MDAgLTExN3Y5NTBsNjAwIDEyNWgtNzAwdi0xMDAwaC0xMDB2MTAyNXEwIDIzIDE1LjUgNDl0MzQuNSAyNnpNNTAwIDUyNXYtMTAwbDEwMCAyMHYxMDB6IiAvPgo8L2ZvbnQ%2BCjwvZGVmcz48L3N2Zz4g%29%20format%28%27svg%27%29%7D%2Eglyphicon%7Bposition%3Arelative%3Btop%3A1px%3Bdisplay%3Ainline%2Dblock%3Bfont%2Dfamily%3A%27Glyphicons%20Halflings%27%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%3B%2Dwebkit%2Dfont%2Dsmoothing%3Aantialiased%3B%2Dmoz%2Dosx%2Dfont%2Dsmoothing%3Agrayscale%7D%2Eglyphicon%2Dasterisk%3Abefore%7Bcontent%3A%22%5C2a%22%7D%2Eglyphicon%2Dplus%3Abefore%7Bcontent%3A%22%5C2b%22%7D%2Eglyphicon%2Deur%3Abefore%2C%2Eglyphicon%2Deuro%3Abefore%7Bcontent%3A%22%5C20ac%22%7D%2Eglyphicon%2Dminus%3Abefore%7Bcontent%3A%22%5C2212%22%7D%2Eglyphicon%2Dcloud%3Abefore%7Bcontent%3A%22%5C2601%22%7D%2Eglyphicon%2Denvelope%3Abefore%7Bcontent%3A%22%5C2709%22%7D%2Eglyphicon%2Dpencil%3Abefore%7Bcontent%3A%22%5C270f%22%7D%2Eglyphicon%2Dglass%3Abefore%7Bcontent%3A%22%5Ce001%22%7D%2Eglyphicon%2Dmusic%3Abefore%7Bcontent%3A%22%5Ce002%22%7D%2Eglyphicon%2Dsearch%3Abefore%7Bcontent%3A%22%5Ce003%22%7D%2Eglyphicon%2Dheart%3Abefore%7Bcontent%3A%22%5Ce005%22%7D%2Eglyphicon%2Dstar%3Abefore%7Bcontent%3A%22%5Ce006%22%7D%2Eglyphicon%2Dstar%2Dempty%3Abefore%7Bcontent%3A%22%5Ce007%22%7D%2Eglyphicon%2Duser%3Abefore%7Bcontent%3A%22%5Ce008%22%7D%2Eglyphicon%2Dfilm%3Abefore%7Bcontent%3A%22%5Ce009%22%7D%2Eglyphicon%2Dth%2Dlarge%3Abefore%7Bcontent%3A%22%5Ce010%22%7D%2Eglyphicon%2Dth%3Abefore%7Bcontent%3A%22%5Ce011%22%7D%2Eglyphicon%2Dth%2Dlist%3Abefore%7Bcontent%3A%22%5Ce012%22%7D%2Eglyphicon%2Dok%3Abefore%7Bcontent%3A%22%5Ce013%22%7D%2Eglyphicon%2Dremove%3Abefore%7Bcontent%3A%22%5Ce014%22%7D%2Eglyphicon%2Dzoom%2Din%3Abefore%7Bcontent%3A%22%5Ce015%22%7D%2Eglyphicon%2Dzoom%2Dout%3Abefore%7Bcontent%3A%22%5Ce016%22%7D%2Eglyphicon%2Doff%3Abefore%7Bcontent%3A%22%5Ce017%22%7D%2Eglyphicon%2Dsignal%3Abefore%7Bcontent%3A%22%5Ce018%22%7D%2Eglyphicon%2Dcog%3Abefore%7Bcontent%3A%22%5Ce019%22%7D%2Eglyphicon%2Dtrash%3Abefore%7Bcontent%3A%22%5Ce020%22%7D%2Eglyphicon%2Dhome%3Abefore%7Bcontent%3A%22%5Ce021%22%7D%2Eglyphicon%2Dfile%3Abefore%7Bcontent%3A%22%5Ce022%22%7D%2Eglyphicon%2Dtime%3Abefore%7Bcontent%3A%22%5Ce023%22%7D%2Eglyphicon%2Droad%3Abefore%7Bcontent%3A%22%5Ce024%22%7D%2Eglyphicon%2Ddownload%2Dalt%3Abefore%7Bcontent%3A%22%5Ce025%22%7D%2Eglyphicon%2Ddownload%3Abefore%7Bcontent%3A%22%5Ce026%22%7D%2Eglyphicon%2Dupload%3Abefore%7Bcontent%3A%22%5Ce027%22%7D%2Eglyphicon%2Dinbox%3Abefore%7Bcontent%3A%22%5Ce028%22%7D%2Eglyphicon%2Dplay%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce029%22%7D%2Eglyphicon%2Drepeat%3Abefore%7Bcontent%3A%22%5Ce030%22%7D%2Eglyphicon%2Drefresh%3Abefore%7Bcontent%3A%22%5Ce031%22%7D%2Eglyphicon%2Dlist%2Dalt%3Abefore%7Bcontent%3A%22%5Ce032%22%7D%2Eglyphicon%2Dlock%3Abefore%7Bcontent%3A%22%5Ce033%22%7D%2Eglyphicon%2Dflag%3Abefore%7Bcontent%3A%22%5Ce034%22%7D%2Eglyphicon%2Dheadphones%3Abefore%7Bcontent%3A%22%5Ce035%22%7D%2Eglyphicon%2Dvolume%2Doff%3Abefore%7Bcontent%3A%22%5Ce036%22%7D%2Eglyphicon%2Dvolume%2Ddown%3Abefore%7Bcontent%3A%22%5Ce037%22%7D%2Eglyphicon%2Dvolume%2Dup%3Abefore%7Bcontent%3A%22%5Ce038%22%7D%2Eglyphicon%2Dqrcode%3Abefore%7Bcontent%3A%22%5Ce039%22%7D%2Eglyphicon%2Dbarcode%3Abefore%7Bcontent%3A%22%5Ce040%22%7D%2Eglyphicon%2Dtag%3Abefore%7Bcontent%3A%22%5Ce041%22%7D%2Eglyphicon%2Dtags%3Abefore%7Bcontent%3A%22%5Ce042%22%7D%2Eglyphicon%2Dbook%3Abefore%7Bcontent%3A%22%5Ce043%22%7D%2Eglyphicon%2Dbookmark%3Abefore%7Bcontent%3A%22%5Ce044%22%7D%2Eglyphicon%2Dprint%3Abefore%7Bcontent%3A%22%5Ce045%22%7D%2Eglyphicon%2Dcamera%3Abefore%7Bcontent%3A%22%5Ce046%22%7D%2Eglyphicon%2Dfont%3Abefore%7Bcontent%3A%22%5Ce047%22%7D%2Eglyphicon%2Dbold%3Abefore%7Bcontent%3A%22%5Ce048%22%7D%2Eglyphicon%2Ditalic%3Abefore%7Bcontent%3A%22%5Ce049%22%7D%2Eglyphicon%2Dtext%2Dheight%3Abefore%7Bcontent%3A%22%5Ce050%22%7D%2Eglyphicon%2Dtext%2Dwidth%3Abefore%7Bcontent%3A%22%5Ce051%22%7D%2Eglyphicon%2Dalign%2Dleft%3Abefore%7Bcontent%3A%22%5Ce052%22%7D%2Eglyphicon%2Dalign%2Dcenter%3Abefore%7Bcontent%3A%22%5Ce053%22%7D%2Eglyphicon%2Dalign%2Dright%3Abefore%7Bcontent%3A%22%5Ce054%22%7D%2Eglyphicon%2Dalign%2Djustify%3Abefore%7Bcontent%3A%22%5Ce055%22%7D%2Eglyphicon%2Dlist%3Abefore%7Bcontent%3A%22%5Ce056%22%7D%2Eglyphicon%2Dindent%2Dleft%3Abefore%7Bcontent%3A%22%5Ce057%22%7D%2Eglyphicon%2Dindent%2Dright%3Abefore%7Bcontent%3A%22%5Ce058%22%7D%2Eglyphicon%2Dfacetime%2Dvideo%3Abefore%7Bcontent%3A%22%5Ce059%22%7D%2Eglyphicon%2Dpicture%3Abefore%7Bcontent%3A%22%5Ce060%22%7D%2Eglyphicon%2Dmap%2Dmarker%3Abefore%7Bcontent%3A%22%5Ce062%22%7D%2Eglyphicon%2Dadjust%3Abefore%7Bcontent%3A%22%5Ce063%22%7D%2Eglyphicon%2Dtint%3Abefore%7Bcontent%3A%22%5Ce064%22%7D%2Eglyphicon%2Dedit%3Abefore%7Bcontent%3A%22%5Ce065%22%7D%2Eglyphicon%2Dshare%3Abefore%7Bcontent%3A%22%5Ce066%22%7D%2Eglyphicon%2Dcheck%3Abefore%7Bcontent%3A%22%5Ce067%22%7D%2Eglyphicon%2Dmove%3Abefore%7Bcontent%3A%22%5Ce068%22%7D%2Eglyphicon%2Dstep%2Dbackward%3Abefore%7Bcontent%3A%22%5Ce069%22%7D%2Eglyphicon%2Dfast%2Dbackward%3Abefore%7Bcontent%3A%22%5Ce070%22%7D%2Eglyphicon%2Dbackward%3Abefore%7Bcontent%3A%22%5Ce071%22%7D%2Eglyphicon%2Dplay%3Abefore%7Bcontent%3A%22%5Ce072%22%7D%2Eglyphicon%2Dpause%3Abefore%7Bcontent%3A%22%5Ce073%22%7D%2Eglyphicon%2Dstop%3Abefore%7Bcontent%3A%22%5Ce074%22%7D%2Eglyphicon%2Dforward%3Abefore%7Bcontent%3A%22%5Ce075%22%7D%2Eglyphicon%2Dfast%2Dforward%3Abefore%7Bcontent%3A%22%5Ce076%22%7D%2Eglyphicon%2Dstep%2Dforward%3Abefore%7Bcontent%3A%22%5Ce077%22%7D%2Eglyphicon%2Deject%3Abefore%7Bcontent%3A%22%5Ce078%22%7D%2Eglyphicon%2Dchevron%2Dleft%3Abefore%7Bcontent%3A%22%5Ce079%22%7D%2Eglyphicon%2Dchevron%2Dright%3Abefore%7Bcontent%3A%22%5Ce080%22%7D%2Eglyphicon%2Dplus%2Dsign%3Abefore%7Bcontent%3A%22%5Ce081%22%7D%2Eglyphicon%2Dminus%2Dsign%3Abefore%7Bcontent%3A%22%5Ce082%22%7D%2Eglyphicon%2Dremove%2Dsign%3Abefore%7Bcontent%3A%22%5Ce083%22%7D%2Eglyphicon%2Dok%2Dsign%3Abefore%7Bcontent%3A%22%5Ce084%22%7D%2Eglyphicon%2Dquestion%2Dsign%3Abefore%7Bcontent%3A%22%5Ce085%22%7D%2Eglyphicon%2Dinfo%2Dsign%3Abefore%7Bcontent%3A%22%5Ce086%22%7D%2Eglyphicon%2Dscreenshot%3Abefore%7Bcontent%3A%22%5Ce087%22%7D%2Eglyphicon%2Dremove%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce088%22%7D%2Eglyphicon%2Dok%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce089%22%7D%2Eglyphicon%2Dban%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce090%22%7D%2Eglyphicon%2Darrow%2Dleft%3Abefore%7Bcontent%3A%22%5Ce091%22%7D%2Eglyphicon%2Darrow%2Dright%3Abefore%7Bcontent%3A%22%5Ce092%22%7D%2Eglyphicon%2Darrow%2Dup%3Abefore%7Bcontent%3A%22%5Ce093%22%7D%2Eglyphicon%2Darrow%2Ddown%3Abefore%7Bcontent%3A%22%5Ce094%22%7D%2Eglyphicon%2Dshare%2Dalt%3Abefore%7Bcontent%3A%22%5Ce095%22%7D%2Eglyphicon%2Dresize%2Dfull%3Abefore%7Bcontent%3A%22%5Ce096%22%7D%2Eglyphicon%2Dresize%2Dsmall%3Abefore%7Bcontent%3A%22%5Ce097%22%7D%2Eglyphicon%2Dexclamation%2Dsign%3Abefore%7Bcontent%3A%22%5Ce101%22%7D%2Eglyphicon%2Dgift%3Abefore%7Bcontent%3A%22%5Ce102%22%7D%2Eglyphicon%2Dleaf%3Abefore%7Bcontent%3A%22%5Ce103%22%7D%2Eglyphicon%2Dfire%3Abefore%7Bcontent%3A%22%5Ce104%22%7D%2Eglyphicon%2Deye%2Dopen%3Abefore%7Bcontent%3A%22%5Ce105%22%7D%2Eglyphicon%2Deye%2Dclose%3Abefore%7Bcontent%3A%22%5Ce106%22%7D%2Eglyphicon%2Dwarning%2Dsign%3Abefore%7Bcontent%3A%22%5Ce107%22%7D%2Eglyphicon%2Dplane%3Abefore%7Bcontent%3A%22%5Ce108%22%7D%2Eglyphicon%2Dcalendar%3Abefore%7Bcontent%3A%22%5Ce109%22%7D%2Eglyphicon%2Drandom%3Abefore%7Bcontent%3A%22%5Ce110%22%7D%2Eglyphicon%2Dcomment%3Abefore%7Bcontent%3A%22%5Ce111%22%7D%2Eglyphicon%2Dmagnet%3Abefore%7Bcontent%3A%22%5Ce112%22%7D%2Eglyphicon%2Dchevron%2Dup%3Abefore%7Bcontent%3A%22%5Ce113%22%7D%2Eglyphicon%2Dchevron%2Ddown%3Abefore%7Bcontent%3A%22%5Ce114%22%7D%2Eglyphicon%2Dretweet%3Abefore%7Bcontent%3A%22%5Ce115%22%7D%2Eglyphicon%2Dshopping%2Dcart%3Abefore%7Bcontent%3A%22%5Ce116%22%7D%2Eglyphicon%2Dfolder%2Dclose%3Abefore%7Bcontent%3A%22%5Ce117%22%7D%2Eglyphicon%2Dfolder%2Dopen%3Abefore%7Bcontent%3A%22%5Ce118%22%7D%2Eglyphicon%2Dresize%2Dvertical%3Abefore%7Bcontent%3A%22%5Ce119%22%7D%2Eglyphicon%2Dresize%2Dhorizontal%3Abefore%7Bcontent%3A%22%5Ce120%22%7D%2Eglyphicon%2Dhdd%3Abefore%7Bcontent%3A%22%5Ce121%22%7D%2Eglyphicon%2Dbullhorn%3Abefore%7Bcontent%3A%22%5Ce122%22%7D%2Eglyphicon%2Dbell%3Abefore%7Bcontent%3A%22%5Ce123%22%7D%2Eglyphicon%2Dcertificate%3Abefore%7Bcontent%3A%22%5Ce124%22%7D%2Eglyphicon%2Dthumbs%2Dup%3Abefore%7Bcontent%3A%22%5Ce125%22%7D%2Eglyphicon%2Dthumbs%2Ddown%3Abefore%7Bcontent%3A%22%5Ce126%22%7D%2Eglyphicon%2Dhand%2Dright%3Abefore%7Bcontent%3A%22%5Ce127%22%7D%2Eglyphicon%2Dhand%2Dleft%3Abefore%7Bcontent%3A%22%5Ce128%22%7D%2Eglyphicon%2Dhand%2Dup%3Abefore%7Bcontent%3A%22%5Ce129%22%7D%2Eglyphicon%2Dhand%2Ddown%3Abefore%7Bcontent%3A%22%5Ce130%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Dright%3Abefore%7Bcontent%3A%22%5Ce131%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Dleft%3Abefore%7Bcontent%3A%22%5Ce132%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Dup%3Abefore%7Bcontent%3A%22%5Ce133%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Ddown%3Abefore%7Bcontent%3A%22%5Ce134%22%7D%2Eglyphicon%2Dglobe%3Abefore%7Bcontent%3A%22%5Ce135%22%7D%2Eglyphicon%2Dwrench%3Abefore%7Bcontent%3A%22%5Ce136%22%7D%2Eglyphicon%2Dtasks%3Abefore%7Bcontent%3A%22%5Ce137%22%7D%2Eglyphicon%2Dfilter%3Abefore%7Bcontent%3A%22%5Ce138%22%7D%2Eglyphicon%2Dbriefcase%3Abefore%7Bcontent%3A%22%5Ce139%22%7D%2Eglyphicon%2Dfullscreen%3Abefore%7Bcontent%3A%22%5Ce140%22%7D%2Eglyphicon%2Ddashboard%3Abefore%7Bcontent%3A%22%5Ce141%22%7D%2Eglyphicon%2Dpaperclip%3Abefore%7Bcontent%3A%22%5Ce142%22%7D%2Eglyphicon%2Dheart%2Dempty%3Abefore%7Bcontent%3A%22%5Ce143%22%7D%2Eglyphicon%2Dlink%3Abefore%7Bcontent%3A%22%5Ce144%22%7D%2Eglyphicon%2Dphone%3Abefore%7Bcontent%3A%22%5Ce145%22%7D%2Eglyphicon%2Dpushpin%3Abefore%7Bcontent%3A%22%5Ce146%22%7D%2Eglyphicon%2Dusd%3Abefore%7Bcontent%3A%22%5Ce148%22%7D%2Eglyphicon%2Dgbp%3Abefore%7Bcontent%3A%22%5Ce149%22%7D%2Eglyphicon%2Dsort%3Abefore%7Bcontent%3A%22%5Ce150%22%7D%2Eglyphicon%2Dsort%2Dby%2Dalphabet%3Abefore%7Bcontent%3A%22%5Ce151%22%7D%2Eglyphicon%2Dsort%2Dby%2Dalphabet%2Dalt%3Abefore%7Bcontent%3A%22%5Ce152%22%7D%2Eglyphicon%2Dsort%2Dby%2Dorder%3Abefore%7Bcontent%3A%22%5Ce153%22%7D%2Eglyphicon%2Dsort%2Dby%2Dorder%2Dalt%3Abefore%7Bcontent%3A%22%5Ce154%22%7D%2Eglyphicon%2Dsort%2Dby%2Dattributes%3Abefore%7Bcontent%3A%22%5Ce155%22%7D%2Eglyphicon%2Dsort%2Dby%2Dattributes%2Dalt%3Abefore%7Bcontent%3A%22%5Ce156%22%7D%2Eglyphicon%2Dunchecked%3Abefore%7Bcontent%3A%22%5Ce157%22%7D%2Eglyphicon%2Dexpand%3Abefore%7Bcontent%3A%22%5Ce158%22%7D%2Eglyphicon%2Dcollapse%2Ddown%3Abefore%7Bcontent%3A%22%5Ce159%22%7D%2Eglyphicon%2Dcollapse%2Dup%3Abefore%7Bcontent%3A%22%5Ce160%22%7D%2Eglyphicon%2Dlog%2Din%3Abefore%7Bcontent%3A%22%5Ce161%22%7D%2Eglyphicon%2Dflash%3Abefore%7Bcontent%3A%22%5Ce162%22%7D%2Eglyphicon%2Dlog%2Dout%3Abefore%7Bcontent%3A%22%5Ce163%22%7D%2Eglyphicon%2Dnew%2Dwindow%3Abefore%7Bcontent%3A%22%5Ce164%22%7D%2Eglyphicon%2Drecord%3Abefore%7Bcontent%3A%22%5Ce165%22%7D%2Eglyphicon%2Dsave%3Abefore%7Bcontent%3A%22%5Ce166%22%7D%2Eglyphicon%2Dopen%3Abefore%7Bcontent%3A%22%5Ce167%22%7D%2Eglyphicon%2Dsaved%3Abefore%7Bcontent%3A%22%5Ce168%22%7D%2Eglyphicon%2Dimport%3Abefore%7Bcontent%3A%22%5Ce169%22%7D%2Eglyphicon%2Dexport%3Abefore%7Bcontent%3A%22%5Ce170%22%7D%2Eglyphicon%2Dsend%3Abefore%7Bcontent%3A%22%5Ce171%22%7D%2Eglyphicon%2Dfloppy%2Ddisk%3Abefore%7Bcontent%3A%22%5Ce172%22%7D%2Eglyphicon%2Dfloppy%2Dsaved%3Abefore%7Bcontent%3A%22%5Ce173%22%7D%2Eglyphicon%2Dfloppy%2Dremove%3Abefore%7Bcontent%3A%22%5Ce174%22%7D%2Eglyphicon%2Dfloppy%2Dsave%3Abefore%7Bcontent%3A%22%5Ce175%22%7D%2Eglyphicon%2Dfloppy%2Dopen%3Abefore%7Bcontent%3A%22%5Ce176%22%7D%2Eglyphicon%2Dcredit%2Dcard%3Abefore%7Bcontent%3A%22%5Ce177%22%7D%2Eglyphicon%2Dtransfer%3Abefore%7Bcontent%3A%22%5Ce178%22%7D%2Eglyphicon%2Dcutlery%3Abefore%7Bcontent%3A%22%5Ce179%22%7D%2Eglyphicon%2Dheader%3Abefore%7Bcontent%3A%22%5Ce180%22%7D%2Eglyphicon%2Dcompressed%3Abefore%7Bcontent%3A%22%5Ce181%22%7D%2Eglyphicon%2Dearphone%3Abefore%7Bcontent%3A%22%5Ce182%22%7D%2Eglyphicon%2Dphone%2Dalt%3Abefore%7Bcontent%3A%22%5Ce183%22%7D%2Eglyphicon%2Dtower%3Abefore%7Bcontent%3A%22%5Ce184%22%7D%2Eglyphicon%2Dstats%3Abefore%7Bcontent%3A%22%5Ce185%22%7D%2Eglyphicon%2Dsd%2Dvideo%3Abefore%7Bcontent%3A%22%5Ce186%22%7D%2Eglyphicon%2Dhd%2Dvideo%3Abefore%7Bcontent%3A%22%5Ce187%22%7D%2Eglyphicon%2Dsubtitles%3Abefore%7Bcontent%3A%22%5Ce188%22%7D%2Eglyphicon%2Dsound%2Dstereo%3Abefore%7Bcontent%3A%22%5Ce189%22%7D%2Eglyphicon%2Dsound%2Ddolby%3Abefore%7Bcontent%3A%22%5Ce190%22%7D%2Eglyphicon%2Dsound%2D5%2D1%3Abefore%7Bcontent%3A%22%5Ce191%22%7D%2Eglyphicon%2Dsound%2D6%2D1%3Abefore%7Bcontent%3A%22%5Ce192%22%7D%2Eglyphicon%2Dsound%2D7%2D1%3Abefore%7Bcontent%3A%22%5Ce193%22%7D%2Eglyphicon%2Dcopyright%2Dmark%3Abefore%7Bcontent%3A%22%5Ce194%22%7D%2Eglyphicon%2Dregistration%2Dmark%3Abefore%7Bcontent%3A%22%5Ce195%22%7D%2Eglyphicon%2Dcloud%2Ddownload%3Abefore%7Bcontent%3A%22%5Ce197%22%7D%2Eglyphicon%2Dcloud%2Dupload%3Abefore%7Bcontent%3A%22%5Ce198%22%7D%2Eglyphicon%2Dtree%2Dconifer%3Abefore%7Bcontent%3A%22%5Ce199%22%7D%2Eglyphicon%2Dtree%2Ddeciduous%3Abefore%7Bcontent%3A%22%5Ce200%22%7D%2Eglyphicon%2Dcd%3Abefore%7Bcontent%3A%22%5Ce201%22%7D%2Eglyphicon%2Dsave%2Dfile%3Abefore%7Bcontent%3A%22%5Ce202%22%7D%2Eglyphicon%2Dopen%2Dfile%3Abefore%7Bcontent%3A%22%5Ce203%22%7D%2Eglyphicon%2Dlevel%2Dup%3Abefore%7Bcontent%3A%22%5Ce204%22%7D%2Eglyphicon%2Dcopy%3Abefore%7Bcontent%3A%22%5Ce205%22%7D%2Eglyphicon%2Dpaste%3Abefore%7Bcontent%3A%22%5Ce206%22%7D%2Eglyphicon%2Dalert%3Abefore%7Bcontent%3A%22%5Ce209%22%7D%2Eglyphicon%2Dequalizer%3Abefore%7Bcontent%3A%22%5Ce210%22%7D%2Eglyphicon%2Dking%3Abefore%7Bcontent%3A%22%5Ce211%22%7D%2Eglyphicon%2Dqueen%3Abefore%7Bcontent%3A%22%5Ce212%22%7D%2Eglyphicon%2Dpawn%3Abefore%7Bcontent%3A%22%5Ce213%22%7D%2Eglyphicon%2Dbishop%3Abefore%7Bcontent%3A%22%5Ce214%22%7D%2Eglyphicon%2Dknight%3Abefore%7Bcontent%3A%22%5Ce215%22%7D%2Eglyphicon%2Dbaby%2Dformula%3Abefore%7Bcontent%3A%22%5Ce216%22%7D%2Eglyphicon%2Dtent%3Abefore%7Bcontent%3A%22%5C26fa%22%7D%2Eglyphicon%2Dblackboard%3Abefore%7Bcontent%3A%22%5Ce218%22%7D%2Eglyphicon%2Dbed%3Abefore%7Bcontent%3A%22%5Ce219%22%7D%2Eglyphicon%2Dapple%3Abefore%7Bcontent%3A%22%5Cf8ff%22%7D%2Eglyphicon%2Derase%3Abefore%7Bcontent%3A%22%5Ce221%22%7D%2Eglyphicon%2Dhourglass%3Abefore%7Bcontent%3A%22%5C231b%22%7D%2Eglyphicon%2Dlamp%3Abefore%7Bcontent%3A%22%5Ce223%22%7D%2Eglyphicon%2Dduplicate%3Abefore%7Bcontent%3A%22%5Ce224%22%7D%2Eglyphicon%2Dpiggy%2Dbank%3Abefore%7Bcontent%3A%22%5Ce225%22%7D%2Eglyphicon%2Dscissors%3Abefore%7Bcontent%3A%22%5Ce226%22%7D%2Eglyphicon%2Dbitcoin%3Abefore%7Bcontent%3A%22%5Ce227%22%7D%2Eglyphicon%2Dbtc%3Abefore%7Bcontent%3A%22%5Ce227%22%7D%2Eglyphicon%2Dxbt%3Abefore%7Bcontent%3A%22%5Ce227%22%7D%2Eglyphicon%2Dyen%3Abefore%7Bcontent%3A%22%5C00a5%22%7D%2Eglyphicon%2Djpy%3Abefore%7Bcontent%3A%22%5C00a5%22%7D%2Eglyphicon%2Druble%3Abefore%7Bcontent%3A%22%5C20bd%22%7D%2Eglyphicon%2Drub%3Abefore%7Bcontent%3A%22%5C20bd%22%7D%2Eglyphicon%2Dscale%3Abefore%7Bcontent%3A%22%5Ce230%22%7D%2Eglyphicon%2Dice%2Dlolly%3Abefore%7Bcontent%3A%22%5Ce231%22%7D%2Eglyphicon%2Dice%2Dlolly%2Dtasted%3Abefore%7Bcontent%3A%22%5Ce232%22%7D%2Eglyphicon%2Deducation%3Abefore%7Bcontent%3A%22%5Ce233%22%7D%2Eglyphicon%2Doption%2Dhorizontal%3Abefore%7Bcontent%3A%22%5Ce234%22%7D%2Eglyphicon%2Doption%2Dvertical%3Abefore%7Bcontent%3A%22%5Ce235%22%7D%2Eglyphicon%2Dmenu%2Dhamburger%3Abefore%7Bcontent%3A%22%5Ce236%22%7D%2Eglyphicon%2Dmodal%2Dwindow%3Abefore%7Bcontent%3A%22%5Ce237%22%7D%2Eglyphicon%2Doil%3Abefore%7Bcontent%3A%22%5Ce238%22%7D%2Eglyphicon%2Dgrain%3Abefore%7Bcontent%3A%22%5Ce239%22%7D%2Eglyphicon%2Dsunglasses%3Abefore%7Bcontent%3A%22%5Ce240%22%7D%2Eglyphicon%2Dtext%2Dsize%3Abefore%7Bcontent%3A%22%5Ce241%22%7D%2Eglyphicon%2Dtext%2Dcolor%3Abefore%7Bcontent%3A%22%5Ce242%22%7D%2Eglyphicon%2Dtext%2Dbackground%3Abefore%7Bcontent%3A%22%5Ce243%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dtop%3Abefore%7Bcontent%3A%22%5Ce244%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dbottom%3Abefore%7Bcontent%3A%22%5Ce245%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dhorizontal%3Abefore%7Bcontent%3A%22%5Ce246%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dleft%3Abefore%7Bcontent%3A%22%5Ce247%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dvertical%3Abefore%7Bcontent%3A%22%5Ce248%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dright%3Abefore%7Bcontent%3A%22%5Ce249%22%7D%2Eglyphicon%2Dtriangle%2Dright%3Abefore%7Bcontent%3A%22%5Ce250%22%7D%2Eglyphicon%2Dtriangle%2Dleft%3Abefore%7Bcontent%3A%22%5Ce251%22%7D%2Eglyphicon%2Dtriangle%2Dbottom%3Abefore%7Bcontent%3A%22%5Ce252%22%7D%2Eglyphicon%2Dtriangle%2Dtop%3Abefore%7Bcontent%3A%22%5Ce253%22%7D%2Eglyphicon%2Dconsole%3Abefore%7Bcontent%3A%22%5Ce254%22%7D%2Eglyphicon%2Dsuperscript%3Abefore%7Bcontent%3A%22%5Ce255%22%7D%2Eglyphicon%2Dsubscript%3Abefore%7Bcontent%3A%22%5Ce256%22%7D%2Eglyphicon%2Dmenu%2Dleft%3Abefore%7Bcontent%3A%22%5Ce257%22%7D%2Eglyphicon%2Dmenu%2Dright%3Abefore%7Bcontent%3A%22%5Ce258%22%7D%2Eglyphicon%2Dmenu%2Ddown%3Abefore%7Bcontent%3A%22%5Ce259%22%7D%2Eglyphicon%2Dmenu%2Dup%3Abefore%7Bcontent%3A%22%5Ce260%22%7D%2A%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%7D%3Aafter%2C%3Abefore%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%7Dhtml%7Bfont%2Dsize%3A10px%3B%2Dwebkit%2Dtap%2Dhighlight%2Dcolor%3Argba%280%2C0%2C0%2C0%29%7Dbody%7Bfont%2Dfamily%3A%22Helvetica%20Neue%22%2CHelvetica%2CArial%2Csans%2Dserif%3Bfont%2Dsize%3A14px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23fff%7Dbutton%2Cinput%2Cselect%2Ctextarea%7Bfont%2Dfamily%3Ainherit%3Bfont%2Dsize%3Ainherit%3Bline%2Dheight%3Ainherit%7Da%7Bcolor%3A%23337ab7%3Btext%2Ddecoration%3Anone%7Da%3Afocus%2Ca%3Ahover%7Bcolor%3A%2323527c%3Btext%2Ddecoration%3Aunderline%7Da%3Afocus%7Boutline%3Athin%20dotted%3Boutline%3A5px%20auto%20%2Dwebkit%2Dfocus%2Dring%2Dcolor%3Boutline%2Doffset%3A%2D2px%7Dfigure%7Bmargin%3A0%7Dimg%7Bvertical%2Dalign%3Amiddle%7D%2Ecarousel%2Dinner%3E%2Eitem%3Ea%3Eimg%2C%2Ecarousel%2Dinner%3E%2Eitem%3Eimg%2C%2Eimg%2Dresponsive%2C%2Ethumbnail%20a%3Eimg%2C%2Ethumbnail%3Eimg%7Bdisplay%3Ablock%3Bmax%2Dwidth%3A100%25%3Bheight%3Aauto%7D%2Eimg%2Drounded%7Bborder%2Dradius%3A6px%7D%2Eimg%2Dthumbnail%7Bdisplay%3Ainline%2Dblock%3Bmax%2Dwidth%3A100%25%3Bheight%3Aauto%3Bpadding%3A4px%3Bline%2Dheight%3A1%2E42857143%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dtransition%3Aall%20%2E2s%20ease%2Din%2Dout%3B%2Do%2Dtransition%3Aall%20%2E2s%20ease%2Din%2Dout%3Btransition%3Aall%20%2E2s%20ease%2Din%2Dout%7D%2Eimg%2Dcircle%7Bborder%2Dradius%3A50%25%7Dhr%7Bmargin%2Dtop%3A20px%3Bmargin%2Dbottom%3A20px%3Bborder%3A0%3Bborder%2Dtop%3A1px%20solid%20%23eee%7D%2Esr%2Donly%7Bposition%3Aabsolute%3Bwidth%3A1px%3Bheight%3A1px%3Bpadding%3A0%3Bmargin%3A%2D1px%3Boverflow%3Ahidden%3Bclip%3Arect%280%2C0%2C0%2C0%29%3Bborder%3A0%7D%2Esr%2Donly%2Dfocusable%3Aactive%2C%2Esr%2Donly%2Dfocusable%3Afocus%7Bposition%3Astatic%3Bwidth%3Aauto%3Bheight%3Aauto%3Bmargin%3A0%3Boverflow%3Avisible%3Bclip%3Aauto%7D%5Brole%3Dbutton%5D%7Bcursor%3Apointer%7D%2Eh1%2C%2Eh2%2C%2Eh3%2C%2Eh4%2C%2Eh5%2C%2Eh6%2Ch1%2Ch2%2Ch3%2Ch4%2Ch5%2Ch6%7Bfont%2Dfamily%3Ainherit%3Bfont%2Dweight%3A500%3Bline%2Dheight%3A1%2E1%3Bcolor%3Ainherit%7D%2Eh1%20%2Esmall%2C%2Eh1%20small%2C%2Eh2%20%2Esmall%2C%2Eh2%20small%2C%2Eh3%20%2Esmall%2C%2Eh3%20small%2C%2Eh4%20%2Esmall%2C%2Eh4%20small%2C%2Eh5%20%2Esmall%2C%2Eh5%20small%2C%2Eh6%20%2Esmall%2C%2Eh6%20small%2Ch1%20%2Esmall%2Ch1%20small%2Ch2%20%2Esmall%2Ch2%20small%2Ch3%20%2Esmall%2Ch3%20small%2Ch4%20%2Esmall%2Ch4%20small%2Ch5%20%2Esmall%2Ch5%20small%2Ch6%20%2Esmall%2Ch6%20small%7Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%3Bcolor%3A%23777%7D%2Eh1%2C%2Eh2%2C%2Eh3%2Ch1%2Ch2%2Ch3%7Bmargin%2Dtop%3A20px%3Bmargin%2Dbottom%3A10px%7D%2Eh1%20%2Esmall%2C%2Eh1%20small%2C%2Eh2%20%2Esmall%2C%2Eh2%20small%2C%2Eh3%20%2Esmall%2C%2Eh3%20small%2Ch1%20%2Esmall%2Ch1%20small%2Ch2%20%2Esmall%2Ch2%20small%2Ch3%20%2Esmall%2Ch3%20small%7Bfont%2Dsize%3A65%25%7D%2Eh4%2C%2Eh5%2C%2Eh6%2Ch4%2Ch5%2Ch6%7Bmargin%2Dtop%3A10px%3Bmargin%2Dbottom%3A10px%7D%2Eh4%20%2Esmall%2C%2Eh4%20small%2C%2Eh5%20%2Esmall%2C%2Eh5%20small%2C%2Eh6%20%2Esmall%2C%2Eh6%20small%2Ch4%20%2Esmall%2Ch4%20small%2Ch5%20%2Esmall%2Ch5%20small%2Ch6%20%2Esmall%2Ch6%20small%7Bfont%2Dsize%3A75%25%7D%2Eh1%2Ch1%7Bfont%2Dsize%3A36px%7D%2Eh2%2Ch2%7Bfont%2Dsize%3A30px%7D%2Eh3%2Ch3%7Bfont%2Dsize%3A24px%7D%2Eh4%2Ch4%7Bfont%2Dsize%3A18px%7D%2Eh5%2Ch5%7Bfont%2Dsize%3A14px%7D%2Eh6%2Ch6%7Bfont%2Dsize%3A12px%7Dp%7Bmargin%3A0%200%2010px%7D%2Elead%7Bmargin%2Dbottom%3A20px%3Bfont%2Dsize%3A16px%3Bfont%2Dweight%3A300%3Bline%2Dheight%3A1%2E4%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Elead%7Bfont%2Dsize%3A21px%7D%7D%2Esmall%2Csmall%7Bfont%2Dsize%3A85%25%7D%2Emark%2Cmark%7Bpadding%3A%2E2em%3Bbackground%2Dcolor%3A%23fcf8e3%7D%2Etext%2Dleft%7Btext%2Dalign%3Aleft%7D%2Etext%2Dright%7Btext%2Dalign%3Aright%7D%2Etext%2Dcenter%7Btext%2Dalign%3Acenter%7D%2Etext%2Djustify%7Btext%2Dalign%3Ajustify%7D%2Etext%2Dnowrap%7Bwhite%2Dspace%3Anowrap%7D%2Etext%2Dlowercase%7Btext%2Dtransform%3Alowercase%7D%2Etext%2Duppercase%7Btext%2Dtransform%3Auppercase%7D%2Etext%2Dcapitalize%7Btext%2Dtransform%3Acapitalize%7D%2Etext%2Dmuted%7Bcolor%3A%23777%7D%2Etext%2Dprimary%7Bcolor%3A%23337ab7%7Da%2Etext%2Dprimary%3Afocus%2Ca%2Etext%2Dprimary%3Ahover%7Bcolor%3A%23286090%7D%2Etext%2Dsuccess%7Bcolor%3A%233c763d%7Da%2Etext%2Dsuccess%3Afocus%2Ca%2Etext%2Dsuccess%3Ahover%7Bcolor%3A%232b542c%7D%2Etext%2Dinfo%7Bcolor%3A%2331708f%7Da%2Etext%2Dinfo%3Afocus%2Ca%2Etext%2Dinfo%3Ahover%7Bcolor%3A%23245269%7D%2Etext%2Dwarning%7Bcolor%3A%238a6d3b%7Da%2Etext%2Dwarning%3Afocus%2Ca%2Etext%2Dwarning%3Ahover%7Bcolor%3A%2366512c%7D%2Etext%2Ddanger%7Bcolor%3A%23a94442%7Da%2Etext%2Ddanger%3Afocus%2Ca%2Etext%2Ddanger%3Ahover%7Bcolor%3A%23843534%7D%2Ebg%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%7Da%2Ebg%2Dprimary%3Afocus%2Ca%2Ebg%2Dprimary%3Ahover%7Bbackground%2Dcolor%3A%23286090%7D%2Ebg%2Dsuccess%7Bbackground%2Dcolor%3A%23dff0d8%7Da%2Ebg%2Dsuccess%3Afocus%2Ca%2Ebg%2Dsuccess%3Ahover%7Bbackground%2Dcolor%3A%23c1e2b3%7D%2Ebg%2Dinfo%7Bbackground%2Dcolor%3A%23d9edf7%7Da%2Ebg%2Dinfo%3Afocus%2Ca%2Ebg%2Dinfo%3Ahover%7Bbackground%2Dcolor%3A%23afd9ee%7D%2Ebg%2Dwarning%7Bbackground%2Dcolor%3A%23fcf8e3%7Da%2Ebg%2Dwarning%3Afocus%2Ca%2Ebg%2Dwarning%3Ahover%7Bbackground%2Dcolor%3A%23f7ecb5%7D%2Ebg%2Ddanger%7Bbackground%2Dcolor%3A%23f2dede%7Da%2Ebg%2Ddanger%3Afocus%2Ca%2Ebg%2Ddanger%3Ahover%7Bbackground%2Dcolor%3A%23e4b9b9%7D%2Epage%2Dheader%7Bpadding%2Dbottom%3A9px%3Bmargin%3A40px%200%2020px%3Bborder%2Dbottom%3A1px%20solid%20%23eee%7Dol%2Cul%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A10px%7Dol%20ol%2Col%20ul%2Cul%20ol%2Cul%20ul%7Bmargin%2Dbottom%3A0%7D%2Elist%2Dunstyled%7Bpadding%2Dleft%3A0%3Blist%2Dstyle%3Anone%7D%2Elist%2Dinline%7Bpadding%2Dleft%3A0%3Bmargin%2Dleft%3A%2D5px%3Blist%2Dstyle%3Anone%7D%2Elist%2Dinline%3Eli%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dright%3A5px%3Bpadding%2Dleft%3A5px%7Ddl%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A20px%7Ddd%2Cdt%7Bline%2Dheight%3A1%2E42857143%7Ddt%7Bfont%2Dweight%3A700%7Ddd%7Bmargin%2Dleft%3A0%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Edl%2Dhorizontal%20dt%7Bfloat%3Aleft%3Bwidth%3A160px%3Boverflow%3Ahidden%3Bclear%3Aleft%3Btext%2Dalign%3Aright%3Btext%2Doverflow%3Aellipsis%3Bwhite%2Dspace%3Anowrap%7D%2Edl%2Dhorizontal%20dd%7Bmargin%2Dleft%3A180px%7D%7Dabbr%5Bdata%2Doriginal%2Dtitle%5D%2Cabbr%5Btitle%5D%7Bcursor%3Ahelp%3Bborder%2Dbottom%3A1px%20dotted%20%23777%7D%2Einitialism%7Bfont%2Dsize%3A90%25%3Btext%2Dtransform%3Auppercase%7Dblockquote%7Bpadding%3A10px%2020px%3Bmargin%3A0%200%2020px%3Bfont%2Dsize%3A17%2E5px%3Bborder%2Dleft%3A5px%20solid%20%23eee%7Dblockquote%20ol%3Alast%2Dchild%2Cblockquote%20p%3Alast%2Dchild%2Cblockquote%20ul%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%7Dblockquote%20%2Esmall%2Cblockquote%20footer%2Cblockquote%20small%7Bdisplay%3Ablock%3Bfont%2Dsize%3A80%25%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23777%7Dblockquote%20%2Esmall%3Abefore%2Cblockquote%20footer%3Abefore%2Cblockquote%20small%3Abefore%7Bcontent%3A%27%5C2014%20%5C00A0%27%7D%2Eblockquote%2Dreverse%2Cblockquote%2Epull%2Dright%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A0%3Btext%2Dalign%3Aright%3Bborder%2Dright%3A5px%20solid%20%23eee%3Bborder%2Dleft%3A0%7D%2Eblockquote%2Dreverse%20%2Esmall%3Abefore%2C%2Eblockquote%2Dreverse%20footer%3Abefore%2C%2Eblockquote%2Dreverse%20small%3Abefore%2Cblockquote%2Epull%2Dright%20%2Esmall%3Abefore%2Cblockquote%2Epull%2Dright%20footer%3Abefore%2Cblockquote%2Epull%2Dright%20small%3Abefore%7Bcontent%3A%27%27%7D%2Eblockquote%2Dreverse%20%2Esmall%3Aafter%2C%2Eblockquote%2Dreverse%20footer%3Aafter%2C%2Eblockquote%2Dreverse%20small%3Aafter%2Cblockquote%2Epull%2Dright%20%2Esmall%3Aafter%2Cblockquote%2Epull%2Dright%20footer%3Aafter%2Cblockquote%2Epull%2Dright%20small%3Aafter%7Bcontent%3A%27%5C00A0%20%5C2014%27%7Daddress%7Bmargin%2Dbottom%3A20px%3Bfont%2Dstyle%3Anormal%3Bline%2Dheight%3A1%2E42857143%7Dcode%2Ckbd%2Cpre%2Csamp%7Bfont%2Dfamily%3Amonospace%7Dcode%7Bpadding%3A2px%204px%3Bfont%2Dsize%3A90%25%3Bcolor%3A%23c7254e%3Bbackground%2Dcolor%3A%23f9f2f4%3Bborder%2Dradius%3A4px%7Dkbd%7Bpadding%3A2px%204px%3Bfont%2Dsize%3A90%25%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23333%3Bborder%2Dradius%3A3px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E25%29%3Bbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E25%29%7Dkbd%20kbd%7Bpadding%3A0%3Bfont%2Dsize%3A100%25%3Bfont%2Dweight%3A700%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7Dpre%7Bdisplay%3Ablock%3Bpadding%3A9%2E5px%3Bmargin%3A0%200%2010px%3Bfont%2Dsize%3A13px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23333%3Bword%2Dbreak%3Abreak%2Dall%3Bword%2Dwrap%3Abreak%2Dword%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%3A1px%20solid%20%23ccc%3Bborder%2Dradius%3A4px%7Dpre%20code%7Bpadding%3A0%3Bfont%2Dsize%3Ainherit%3Bcolor%3Ainherit%3Bwhite%2Dspace%3Apre%2Dwrap%3Bbackground%2Dcolor%3Atransparent%3Bborder%2Dradius%3A0%7D%2Epre%2Dscrollable%7Bmax%2Dheight%3A340px%3Boverflow%2Dy%3Ascroll%7D%2Econtainer%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Econtainer%7Bwidth%3A750px%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Econtainer%7Bwidth%3A970px%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Econtainer%7Bwidth%3A1170px%7D%7D%2Econtainer%2Dfluid%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%2Erow%7Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%2Ecol%2Dlg%2D1%2C%2Ecol%2Dlg%2D10%2C%2Ecol%2Dlg%2D11%2C%2Ecol%2Dlg%2D12%2C%2Ecol%2Dlg%2D2%2C%2Ecol%2Dlg%2D3%2C%2Ecol%2Dlg%2D4%2C%2Ecol%2Dlg%2D5%2C%2Ecol%2Dlg%2D6%2C%2Ecol%2Dlg%2D7%2C%2Ecol%2Dlg%2D8%2C%2Ecol%2Dlg%2D9%2C%2Ecol%2Dmd%2D1%2C%2Ecol%2Dmd%2D10%2C%2Ecol%2Dmd%2D11%2C%2Ecol%2Dmd%2D12%2C%2Ecol%2Dmd%2D2%2C%2Ecol%2Dmd%2D3%2C%2Ecol%2Dmd%2D4%2C%2Ecol%2Dmd%2D5%2C%2Ecol%2Dmd%2D6%2C%2Ecol%2Dmd%2D7%2C%2Ecol%2Dmd%2D8%2C%2Ecol%2Dmd%2D9%2C%2Ecol%2Dsm%2D1%2C%2Ecol%2Dsm%2D10%2C%2Ecol%2Dsm%2D11%2C%2Ecol%2Dsm%2D12%2C%2Ecol%2Dsm%2D2%2C%2Ecol%2Dsm%2D3%2C%2Ecol%2Dsm%2D4%2C%2Ecol%2Dsm%2D5%2C%2Ecol%2Dsm%2D6%2C%2Ecol%2Dsm%2D7%2C%2Ecol%2Dsm%2D8%2C%2Ecol%2Dsm%2D9%2C%2Ecol%2Dxs%2D1%2C%2Ecol%2Dxs%2D10%2C%2Ecol%2Dxs%2D11%2C%2Ecol%2Dxs%2D12%2C%2Ecol%2Dxs%2D2%2C%2Ecol%2Dxs%2D3%2C%2Ecol%2Dxs%2D4%2C%2Ecol%2Dxs%2D5%2C%2Ecol%2Dxs%2D6%2C%2Ecol%2Dxs%2D7%2C%2Ecol%2Dxs%2D8%2C%2Ecol%2Dxs%2D9%7Bposition%3Arelative%3Bmin%2Dheight%3A1px%3Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%7D%2Ecol%2Dxs%2D1%2C%2Ecol%2Dxs%2D10%2C%2Ecol%2Dxs%2D11%2C%2Ecol%2Dxs%2D12%2C%2Ecol%2Dxs%2D2%2C%2Ecol%2Dxs%2D3%2C%2Ecol%2Dxs%2D4%2C%2Ecol%2Dxs%2D5%2C%2Ecol%2Dxs%2D6%2C%2Ecol%2Dxs%2D7%2C%2Ecol%2Dxs%2D8%2C%2Ecol%2Dxs%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dxs%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dxs%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dxs%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dxs%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dxs%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dxs%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dxs%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dxs%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dxs%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dxs%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dxs%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dxs%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dxs%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dxs%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dxs%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dxs%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dxs%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dxs%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dxs%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dxs%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dxs%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dxs%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dxs%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dxs%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dxs%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dxs%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Ecol%2Dsm%2D1%2C%2Ecol%2Dsm%2D10%2C%2Ecol%2Dsm%2D11%2C%2Ecol%2Dsm%2D12%2C%2Ecol%2Dsm%2D2%2C%2Ecol%2Dsm%2D3%2C%2Ecol%2Dsm%2D4%2C%2Ecol%2Dsm%2D5%2C%2Ecol%2Dsm%2D6%2C%2Ecol%2Dsm%2D7%2C%2Ecol%2Dsm%2D8%2C%2Ecol%2Dsm%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dsm%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dsm%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dsm%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dsm%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dsm%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dsm%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dsm%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dsm%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dsm%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dsm%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dsm%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dsm%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dsm%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dsm%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dsm%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dsm%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dsm%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dsm%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dsm%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dsm%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dsm%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dsm%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dsm%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dsm%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dsm%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dsm%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Ecol%2Dmd%2D1%2C%2Ecol%2Dmd%2D10%2C%2Ecol%2Dmd%2D11%2C%2Ecol%2Dmd%2D12%2C%2Ecol%2Dmd%2D2%2C%2Ecol%2Dmd%2D3%2C%2Ecol%2Dmd%2D4%2C%2Ecol%2Dmd%2D5%2C%2Ecol%2Dmd%2D6%2C%2Ecol%2Dmd%2D7%2C%2Ecol%2Dmd%2D8%2C%2Ecol%2Dmd%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dmd%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dmd%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dmd%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dmd%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dmd%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dmd%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dmd%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dmd%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dmd%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dmd%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dmd%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dmd%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dmd%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dmd%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dmd%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dmd%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dmd%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dmd%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dmd%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dmd%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dmd%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dmd%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dmd%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dmd%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dmd%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dmd%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Ecol%2Dlg%2D1%2C%2Ecol%2Dlg%2D10%2C%2Ecol%2Dlg%2D11%2C%2Ecol%2Dlg%2D12%2C%2Ecol%2Dlg%2D2%2C%2Ecol%2Dlg%2D3%2C%2Ecol%2Dlg%2D4%2C%2Ecol%2Dlg%2D5%2C%2Ecol%2Dlg%2D6%2C%2Ecol%2Dlg%2D7%2C%2Ecol%2Dlg%2D8%2C%2Ecol%2Dlg%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dlg%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dlg%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dlg%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dlg%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dlg%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dlg%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dlg%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dlg%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dlg%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dlg%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dlg%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dlg%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dlg%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dlg%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dlg%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dlg%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dlg%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dlg%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dlg%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dlg%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dlg%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dlg%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dlg%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dlg%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dlg%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dlg%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%7Dtable%7Bbackground%2Dcolor%3Atransparent%7Dcaption%7Bpadding%2Dtop%3A8px%3Bpadding%2Dbottom%3A8px%3Bcolor%3A%23777%3Btext%2Dalign%3Aleft%7Dth%7B%7D%2Etable%7Bwidth%3A100%25%3Bmax%2Dwidth%3A100%25%3Bmargin%2Dbottom%3A20px%7D%2Etable%3Etbody%3Etr%3Etd%2C%2Etable%3Etbody%3Etr%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2C%2Etable%3Etfoot%3Etr%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2C%2Etable%3Ethead%3Etr%3Eth%7Bpadding%3A8px%3Bline%2Dheight%3A1%2E42857143%3Bvertical%2Dalign%3Atop%3Bborder%2Dtop%3A1px%20solid%20%23ddd%7D%2Etable%3Ethead%3Etr%3Eth%7Bvertical%2Dalign%3Abottom%3Bborder%2Dbottom%3A2px%20solid%20%23ddd%7D%2Etable%3Ecaption%2Bthead%3Etr%3Afirst%2Dchild%3Etd%2C%2Etable%3Ecaption%2Bthead%3Etr%3Afirst%2Dchild%3Eth%2C%2Etable%3Ecolgroup%2Bthead%3Etr%3Afirst%2Dchild%3Etd%2C%2Etable%3Ecolgroup%2Bthead%3Etr%3Afirst%2Dchild%3Eth%2C%2Etable%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%3Etd%2C%2Etable%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%3Eth%7Bborder%2Dtop%3A0%7D%2Etable%3Etbody%2Btbody%7Bborder%2Dtop%3A2px%20solid%20%23ddd%7D%2Etable%20%2Etable%7Bbackground%2Dcolor%3A%23fff%7D%2Etable%2Dcondensed%3Etbody%3Etr%3Etd%2C%2Etable%2Dcondensed%3Etbody%3Etr%3Eth%2C%2Etable%2Dcondensed%3Etfoot%3Etr%3Etd%2C%2Etable%2Dcondensed%3Etfoot%3Etr%3Eth%2C%2Etable%2Dcondensed%3Ethead%3Etr%3Etd%2C%2Etable%2Dcondensed%3Ethead%3Etr%3Eth%7Bpadding%3A5px%7D%2Etable%2Dbordered%7Bborder%3A1px%20solid%20%23ddd%7D%2Etable%2Dbordered%3Etbody%3Etr%3Etd%2C%2Etable%2Dbordered%3Etbody%3Etr%3Eth%2C%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%2C%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%2C%2Etable%2Dbordered%3Ethead%3Etr%3Etd%2C%2Etable%2Dbordered%3Ethead%3Etr%3Eth%7Bborder%3A1px%20solid%20%23ddd%7D%2Etable%2Dbordered%3Ethead%3Etr%3Etd%2C%2Etable%2Dbordered%3Ethead%3Etr%3Eth%7Bborder%2Dbottom%2Dwidth%3A2px%7D%2Etable%2Dstriped%3Etbody%3Etr%3Anth%2Dof%2Dtype%28odd%29%7Bbackground%2Dcolor%3A%23f9f9f9%7D%2Etable%2Dhover%3Etbody%3Etr%3Ahover%7Bbackground%2Dcolor%3A%23f5f5f5%7Dtable%20col%5Bclass%2A%3Dcol%2D%5D%7Bposition%3Astatic%3Bdisplay%3Atable%2Dcolumn%3Bfloat%3Anone%7Dtable%20td%5Bclass%2A%3Dcol%2D%5D%2Ctable%20th%5Bclass%2A%3Dcol%2D%5D%7Bposition%3Astatic%3Bdisplay%3Atable%2Dcell%3Bfloat%3Anone%7D%2Etable%3Etbody%3Etr%2Eactive%3Etd%2C%2Etable%3Etbody%3Etr%2Eactive%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Eactive%2C%2Etable%3Etbody%3Etr%3Eth%2Eactive%2C%2Etable%3Etfoot%3Etr%2Eactive%3Etd%2C%2Etable%3Etfoot%3Etr%2Eactive%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Eactive%2C%2Etable%3Etfoot%3Etr%3Eth%2Eactive%2C%2Etable%3Ethead%3Etr%2Eactive%3Etd%2C%2Etable%3Ethead%3Etr%2Eactive%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Eactive%2C%2Etable%3Ethead%3Etr%3Eth%2Eactive%7Bbackground%2Dcolor%3A%23f5f5f5%7D%2Etable%2Dhover%3Etbody%3Etr%2Eactive%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Eactive%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Eactive%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Eactive%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Eactive%3Ahover%7Bbackground%2Dcolor%3A%23e8e8e8%7D%2Etable%3Etbody%3Etr%2Esuccess%3Etd%2C%2Etable%3Etbody%3Etr%2Esuccess%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Esuccess%2C%2Etable%3Etbody%3Etr%3Eth%2Esuccess%2C%2Etable%3Etfoot%3Etr%2Esuccess%3Etd%2C%2Etable%3Etfoot%3Etr%2Esuccess%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Esuccess%2C%2Etable%3Etfoot%3Etr%3Eth%2Esuccess%2C%2Etable%3Ethead%3Etr%2Esuccess%3Etd%2C%2Etable%3Ethead%3Etr%2Esuccess%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Esuccess%2C%2Etable%3Ethead%3Etr%3Eth%2Esuccess%7Bbackground%2Dcolor%3A%23dff0d8%7D%2Etable%2Dhover%3Etbody%3Etr%2Esuccess%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Esuccess%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Esuccess%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Esuccess%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Esuccess%3Ahover%7Bbackground%2Dcolor%3A%23d0e9c6%7D%2Etable%3Etbody%3Etr%2Einfo%3Etd%2C%2Etable%3Etbody%3Etr%2Einfo%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Einfo%2C%2Etable%3Etbody%3Etr%3Eth%2Einfo%2C%2Etable%3Etfoot%3Etr%2Einfo%3Etd%2C%2Etable%3Etfoot%3Etr%2Einfo%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Einfo%2C%2Etable%3Etfoot%3Etr%3Eth%2Einfo%2C%2Etable%3Ethead%3Etr%2Einfo%3Etd%2C%2Etable%3Ethead%3Etr%2Einfo%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Einfo%2C%2Etable%3Ethead%3Etr%3Eth%2Einfo%7Bbackground%2Dcolor%3A%23d9edf7%7D%2Etable%2Dhover%3Etbody%3Etr%2Einfo%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Einfo%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Einfo%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Einfo%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Einfo%3Ahover%7Bbackground%2Dcolor%3A%23c4e3f3%7D%2Etable%3Etbody%3Etr%2Ewarning%3Etd%2C%2Etable%3Etbody%3Etr%2Ewarning%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Ewarning%2C%2Etable%3Etbody%3Etr%3Eth%2Ewarning%2C%2Etable%3Etfoot%3Etr%2Ewarning%3Etd%2C%2Etable%3Etfoot%3Etr%2Ewarning%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Ewarning%2C%2Etable%3Etfoot%3Etr%3Eth%2Ewarning%2C%2Etable%3Ethead%3Etr%2Ewarning%3Etd%2C%2Etable%3Ethead%3Etr%2Ewarning%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Ewarning%2C%2Etable%3Ethead%3Etr%3Eth%2Ewarning%7Bbackground%2Dcolor%3A%23fcf8e3%7D%2Etable%2Dhover%3Etbody%3Etr%2Ewarning%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Ewarning%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Ewarning%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Ewarning%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Ewarning%3Ahover%7Bbackground%2Dcolor%3A%23faf2cc%7D%2Etable%3Etbody%3Etr%2Edanger%3Etd%2C%2Etable%3Etbody%3Etr%2Edanger%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Edanger%2C%2Etable%3Etbody%3Etr%3Eth%2Edanger%2C%2Etable%3Etfoot%3Etr%2Edanger%3Etd%2C%2Etable%3Etfoot%3Etr%2Edanger%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Edanger%2C%2Etable%3Etfoot%3Etr%3Eth%2Edanger%2C%2Etable%3Ethead%3Etr%2Edanger%3Etd%2C%2Etable%3Ethead%3Etr%2Edanger%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Edanger%2C%2Etable%3Ethead%3Etr%3Eth%2Edanger%7Bbackground%2Dcolor%3A%23f2dede%7D%2Etable%2Dhover%3Etbody%3Etr%2Edanger%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Edanger%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Edanger%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Edanger%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Edanger%3Ahover%7Bbackground%2Dcolor%3A%23ebcccc%7D%2Etable%2Dresponsive%7Bmin%2Dheight%3A%2E01%25%3Boverflow%2Dx%3Aauto%7D%40media%20screen%20and%20%28max%2Dwidth%3A767px%29%7B%2Etable%2Dresponsive%7Bwidth%3A100%25%3Bmargin%2Dbottom%3A15px%3Boverflow%2Dy%3Ahidden%3B%2Dms%2Doverflow%2Dstyle%3A%2Dms%2Dautohiding%2Dscrollbar%3Bborder%3A1px%20solid%20%23ddd%7D%2Etable%2Dresponsive%3E%2Etable%7Bmargin%2Dbottom%3A0%7D%2Etable%2Dresponsive%3E%2Etable%3Etbody%3Etr%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%3Etbody%3Etr%3Eth%2C%2Etable%2Dresponsive%3E%2Etable%3Etfoot%3Etr%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%3Etfoot%3Etr%3Eth%2C%2Etable%2Dresponsive%3E%2Etable%3Ethead%3Etr%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%3Ethead%3Etr%3Eth%7Bwhite%2Dspace%3Anowrap%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%7Bborder%3A0%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Afirst%2Dchild%7Bborder%2Dleft%3A0%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Alast%2Dchild%7Bborder%2Dright%3A0%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Eth%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Eth%7Bborder%2Dbottom%3A0%7D%7Dfieldset%7Bmin%2Dwidth%3A0%3Bpadding%3A0%3Bmargin%3A0%3Bborder%3A0%7Dlegend%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bpadding%3A0%3Bmargin%2Dbottom%3A20px%3Bfont%2Dsize%3A21px%3Bline%2Dheight%3Ainherit%3Bcolor%3A%23333%3Bborder%3A0%3Bborder%2Dbottom%3A1px%20solid%20%23e5e5e5%7Dlabel%7Bdisplay%3Ainline%2Dblock%3Bmax%2Dwidth%3A100%25%3Bmargin%2Dbottom%3A5px%3Bfont%2Dweight%3A700%7Dinput%5Btype%3Dsearch%5D%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%7Dinput%5Btype%3Dcheckbox%5D%2Cinput%5Btype%3Dradio%5D%7Bmargin%3A4px%200%200%3Bmargin%2Dtop%3A1px%5C9%3Bline%2Dheight%3Anormal%7Dinput%5Btype%3Dfile%5D%7Bdisplay%3Ablock%7Dinput%5Btype%3Drange%5D%7Bdisplay%3Ablock%3Bwidth%3A100%25%7Dselect%5Bmultiple%5D%2Cselect%5Bsize%5D%7Bheight%3Aauto%7Dinput%5Btype%3Dfile%5D%3Afocus%2Cinput%5Btype%3Dcheckbox%5D%3Afocus%2Cinput%5Btype%3Dradio%5D%3Afocus%7Boutline%3Athin%20dotted%3Boutline%3A5px%20auto%20%2Dwebkit%2Dfocus%2Dring%2Dcolor%3Boutline%2Doffset%3A%2D2px%7Doutput%7Bdisplay%3Ablock%3Bpadding%2Dtop%3A7px%3Bfont%2Dsize%3A14px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23555%7D%2Eform%2Dcontrol%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bheight%3A34px%3Bpadding%3A6px%2012px%3Bfont%2Dsize%3A14px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dimage%3Anone%3Bborder%3A1px%20solid%20%23ccc%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3B%2Dwebkit%2Dtransition%3Aborder%2Dcolor%20ease%2Din%2Dout%20%2E15s%2C%2Dwebkit%2Dbox%2Dshadow%20ease%2Din%2Dout%20%2E15s%3B%2Do%2Dtransition%3Aborder%2Dcolor%20ease%2Din%2Dout%20%2E15s%2Cbox%2Dshadow%20ease%2Din%2Dout%20%2E15s%3Btransition%3Aborder%2Dcolor%20ease%2Din%2Dout%20%2E15s%2Cbox%2Dshadow%20ease%2Din%2Dout%20%2E15s%7D%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%2366afe9%3Boutline%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%208px%20rgba%28102%2C175%2C233%2C%2E6%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%208px%20rgba%28102%2C175%2C233%2C%2E6%29%7D%2Eform%2Dcontrol%3A%3A%2Dmoz%2Dplaceholder%7Bcolor%3A%23999%3Bopacity%3A1%7D%2Eform%2Dcontrol%3A%2Dms%2Dinput%2Dplaceholder%7Bcolor%3A%23999%7D%2Eform%2Dcontrol%3A%3A%2Dwebkit%2Dinput%2Dplaceholder%7Bcolor%3A%23999%7D%2Eform%2Dcontrol%5Bdisabled%5D%2C%2Eform%2Dcontrol%5Breadonly%5D%2Cfieldset%5Bdisabled%5D%20%2Eform%2Dcontrol%7Bbackground%2Dcolor%3A%23eee%3Bopacity%3A1%7D%2Eform%2Dcontrol%5Bdisabled%5D%2Cfieldset%5Bdisabled%5D%20%2Eform%2Dcontrol%7Bcursor%3Anot%2Dallowed%7Dtextarea%2Eform%2Dcontrol%7Bheight%3Aauto%7Dinput%5Btype%3Dsearch%5D%7B%2Dwebkit%2Dappearance%3Anone%7D%40media%20screen%20and%20%28%2Dwebkit%2Dmin%2Ddevice%2Dpixel%2Dratio%3A0%29%7Binput%5Btype%3Ddate%5D%2Eform%2Dcontrol%2Cinput%5Btype%3Dtime%5D%2Eform%2Dcontrol%2Cinput%5Btype%3Ddatetime%2Dlocal%5D%2Eform%2Dcontrol%2Cinput%5Btype%3Dmonth%5D%2Eform%2Dcontrol%7Bline%2Dheight%3A34px%7D%2Einput%2Dgroup%2Dsm%20input%5Btype%3Ddate%5D%2C%2Einput%2Dgroup%2Dsm%20input%5Btype%3Dtime%5D%2C%2Einput%2Dgroup%2Dsm%20input%5Btype%3Ddatetime%2Dlocal%5D%2C%2Einput%2Dgroup%2Dsm%20input%5Btype%3Dmonth%5D%2Cinput%5Btype%3Ddate%5D%2Einput%2Dsm%2Cinput%5Btype%3Dtime%5D%2Einput%2Dsm%2Cinput%5Btype%3Ddatetime%2Dlocal%5D%2Einput%2Dsm%2Cinput%5Btype%3Dmonth%5D%2Einput%2Dsm%7Bline%2Dheight%3A30px%7D%2Einput%2Dgroup%2Dlg%20input%5Btype%3Ddate%5D%2C%2Einput%2Dgroup%2Dlg%20input%5Btype%3Dtime%5D%2C%2Einput%2Dgroup%2Dlg%20input%5Btype%3Ddatetime%2Dlocal%5D%2C%2Einput%2Dgroup%2Dlg%20input%5Btype%3Dmonth%5D%2Cinput%5Btype%3Ddate%5D%2Einput%2Dlg%2Cinput%5Btype%3Dtime%5D%2Einput%2Dlg%2Cinput%5Btype%3Ddatetime%2Dlocal%5D%2Einput%2Dlg%2Cinput%5Btype%3Dmonth%5D%2Einput%2Dlg%7Bline%2Dheight%3A46px%7D%7D%2Eform%2Dgroup%7Bmargin%2Dbottom%3A15px%7D%2Echeckbox%2C%2Eradio%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bmargin%2Dtop%3A10px%3Bmargin%2Dbottom%3A10px%7D%2Echeckbox%20label%2C%2Eradio%20label%7Bmin%2Dheight%3A20px%3Bpadding%2Dleft%3A20px%3Bmargin%2Dbottom%3A0%3Bfont%2Dweight%3A400%3Bcursor%3Apointer%7D%2Echeckbox%20input%5Btype%3Dcheckbox%5D%2C%2Echeckbox%2Dinline%20input%5Btype%3Dcheckbox%5D%2C%2Eradio%20input%5Btype%3Dradio%5D%2C%2Eradio%2Dinline%20input%5Btype%3Dradio%5D%7Bposition%3Aabsolute%3Bmargin%2Dtop%3A4px%5C9%3Bmargin%2Dleft%3A%2D20px%7D%2Echeckbox%2B%2Echeckbox%2C%2Eradio%2B%2Eradio%7Bmargin%2Dtop%3A%2D5px%7D%2Echeckbox%2Dinline%2C%2Eradio%2Dinline%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%3Bpadding%2Dleft%3A20px%3Bmargin%2Dbottom%3A0%3Bfont%2Dweight%3A400%3Bvertical%2Dalign%3Amiddle%3Bcursor%3Apointer%7D%2Echeckbox%2Dinline%2B%2Echeckbox%2Dinline%2C%2Eradio%2Dinline%2B%2Eradio%2Dinline%7Bmargin%2Dtop%3A0%3Bmargin%2Dleft%3A10px%7Dfieldset%5Bdisabled%5D%20input%5Btype%3Dcheckbox%5D%2Cfieldset%5Bdisabled%5D%20input%5Btype%3Dradio%5D%2Cinput%5Btype%3Dcheckbox%5D%2Edisabled%2Cinput%5Btype%3Dcheckbox%5D%5Bdisabled%5D%2Cinput%5Btype%3Dradio%5D%2Edisabled%2Cinput%5Btype%3Dradio%5D%5Bdisabled%5D%7Bcursor%3Anot%2Dallowed%7D%2Echeckbox%2Dinline%2Edisabled%2C%2Eradio%2Dinline%2Edisabled%2Cfieldset%5Bdisabled%5D%20%2Echeckbox%2Dinline%2Cfieldset%5Bdisabled%5D%20%2Eradio%2Dinline%7Bcursor%3Anot%2Dallowed%7D%2Echeckbox%2Edisabled%20label%2C%2Eradio%2Edisabled%20label%2Cfieldset%5Bdisabled%5D%20%2Echeckbox%20label%2Cfieldset%5Bdisabled%5D%20%2Eradio%20label%7Bcursor%3Anot%2Dallowed%7D%2Eform%2Dcontrol%2Dstatic%7Bmin%2Dheight%3A34px%3Bpadding%2Dtop%3A7px%3Bpadding%2Dbottom%3A7px%3Bmargin%2Dbottom%3A0%7D%2Eform%2Dcontrol%2Dstatic%2Einput%2Dlg%2C%2Eform%2Dcontrol%2Dstatic%2Einput%2Dsm%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Einput%2Dsm%7Bheight%3A30px%3Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7Dselect%2Einput%2Dsm%7Bheight%3A30px%3Bline%2Dheight%3A30px%7Dselect%5Bmultiple%5D%2Einput%2Dsm%2Ctextarea%2Einput%2Dsm%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dsm%20%2Eform%2Dcontrol%7Bheight%3A30px%3Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7D%2Eform%2Dgroup%2Dsm%20select%2Eform%2Dcontrol%7Bheight%3A30px%3Bline%2Dheight%3A30px%7D%2Eform%2Dgroup%2Dsm%20select%5Bmultiple%5D%2Eform%2Dcontrol%2C%2Eform%2Dgroup%2Dsm%20textarea%2Eform%2Dcontrol%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dsm%20%2Eform%2Dcontrol%2Dstatic%7Bheight%3A30px%3Bmin%2Dheight%3A32px%3Bpadding%3A6px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%7D%2Einput%2Dlg%7Bheight%3A46px%3Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7Dselect%2Einput%2Dlg%7Bheight%3A46px%3Bline%2Dheight%3A46px%7Dselect%5Bmultiple%5D%2Einput%2Dlg%2Ctextarea%2Einput%2Dlg%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dlg%20%2Eform%2Dcontrol%7Bheight%3A46px%3Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7D%2Eform%2Dgroup%2Dlg%20select%2Eform%2Dcontrol%7Bheight%3A46px%3Bline%2Dheight%3A46px%7D%2Eform%2Dgroup%2Dlg%20select%5Bmultiple%5D%2Eform%2Dcontrol%2C%2Eform%2Dgroup%2Dlg%20textarea%2Eform%2Dcontrol%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dlg%20%2Eform%2Dcontrol%2Dstatic%7Bheight%3A46px%3Bmin%2Dheight%3A38px%3Bpadding%3A11px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%7D%2Ehas%2Dfeedback%7Bposition%3Arelative%7D%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%7Bpadding%2Dright%3A42%2E5px%7D%2Eform%2Dcontrol%2Dfeedback%7Bposition%3Aabsolute%3Btop%3A0%3Bright%3A0%3Bz%2Dindex%3A2%3Bdisplay%3Ablock%3Bwidth%3A34px%3Bheight%3A34px%3Bline%2Dheight%3A34px%3Btext%2Dalign%3Acenter%3Bpointer%2Devents%3Anone%7D%2Eform%2Dgroup%2Dlg%20%2Eform%2Dcontrol%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dgroup%2Dlg%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dlg%2B%2Eform%2Dcontrol%2Dfeedback%7Bwidth%3A46px%3Bheight%3A46px%3Bline%2Dheight%3A46px%7D%2Eform%2Dgroup%2Dsm%20%2Eform%2Dcontrol%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dgroup%2Dsm%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dsm%2B%2Eform%2Dcontrol%2Dfeedback%7Bwidth%3A30px%3Bheight%3A30px%3Bline%2Dheight%3A30px%7D%2Ehas%2Dsuccess%20%2Echeckbox%2C%2Ehas%2Dsuccess%20%2Echeckbox%2Dinline%2C%2Ehas%2Dsuccess%20%2Econtrol%2Dlabel%2C%2Ehas%2Dsuccess%20%2Ehelp%2Dblock%2C%2Ehas%2Dsuccess%20%2Eradio%2C%2Ehas%2Dsuccess%20%2Eradio%2Dinline%2C%2Ehas%2Dsuccess%2Echeckbox%20label%2C%2Ehas%2Dsuccess%2Echeckbox%2Dinline%20label%2C%2Ehas%2Dsuccess%2Eradio%20label%2C%2Ehas%2Dsuccess%2Eradio%2Dinline%20label%7Bcolor%3A%233c763d%7D%2Ehas%2Dsuccess%20%2Eform%2Dcontrol%7Bborder%2Dcolor%3A%233c763d%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%7D%2Ehas%2Dsuccess%20%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%232b542c%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%2367b168%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%2367b168%7D%2Ehas%2Dsuccess%20%2Einput%2Dgroup%2Daddon%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%3Bborder%2Dcolor%3A%233c763d%7D%2Ehas%2Dsuccess%20%2Eform%2Dcontrol%2Dfeedback%7Bcolor%3A%233c763d%7D%2Ehas%2Dwarning%20%2Echeckbox%2C%2Ehas%2Dwarning%20%2Echeckbox%2Dinline%2C%2Ehas%2Dwarning%20%2Econtrol%2Dlabel%2C%2Ehas%2Dwarning%20%2Ehelp%2Dblock%2C%2Ehas%2Dwarning%20%2Eradio%2C%2Ehas%2Dwarning%20%2Eradio%2Dinline%2C%2Ehas%2Dwarning%2Echeckbox%20label%2C%2Ehas%2Dwarning%2Echeckbox%2Dinline%20label%2C%2Ehas%2Dwarning%2Eradio%20label%2C%2Ehas%2Dwarning%2Eradio%2Dinline%20label%7Bcolor%3A%238a6d3b%7D%2Ehas%2Dwarning%20%2Eform%2Dcontrol%7Bborder%2Dcolor%3A%238a6d3b%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%7D%2Ehas%2Dwarning%20%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%2366512c%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23c0a16b%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23c0a16b%7D%2Ehas%2Dwarning%20%2Einput%2Dgroup%2Daddon%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%3Bborder%2Dcolor%3A%238a6d3b%7D%2Ehas%2Dwarning%20%2Eform%2Dcontrol%2Dfeedback%7Bcolor%3A%238a6d3b%7D%2Ehas%2Derror%20%2Echeckbox%2C%2Ehas%2Derror%20%2Echeckbox%2Dinline%2C%2Ehas%2Derror%20%2Econtrol%2Dlabel%2C%2Ehas%2Derror%20%2Ehelp%2Dblock%2C%2Ehas%2Derror%20%2Eradio%2C%2Ehas%2Derror%20%2Eradio%2Dinline%2C%2Ehas%2Derror%2Echeckbox%20label%2C%2Ehas%2Derror%2Echeckbox%2Dinline%20label%2C%2Ehas%2Derror%2Eradio%20label%2C%2Ehas%2Derror%2Eradio%2Dinline%20label%7Bcolor%3A%23a94442%7D%2Ehas%2Derror%20%2Eform%2Dcontrol%7Bborder%2Dcolor%3A%23a94442%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%7D%2Ehas%2Derror%20%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%23843534%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23ce8483%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23ce8483%7D%2Ehas%2Derror%20%2Einput%2Dgroup%2Daddon%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%3Bborder%2Dcolor%3A%23a94442%7D%2Ehas%2Derror%20%2Eform%2Dcontrol%2Dfeedback%7Bcolor%3A%23a94442%7D%2Ehas%2Dfeedback%20label%7E%2Eform%2Dcontrol%2Dfeedback%7Btop%3A25px%7D%2Ehas%2Dfeedback%20label%2Esr%2Donly%7E%2Eform%2Dcontrol%2Dfeedback%7Btop%3A0%7D%2Ehelp%2Dblock%7Bdisplay%3Ablock%3Bmargin%2Dtop%3A5px%3Bmargin%2Dbottom%3A10px%3Bcolor%3A%23737373%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dinline%20%2Eform%2Dgroup%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Eform%2Dcontrol%7Bdisplay%3Ainline%2Dblock%3Bwidth%3Aauto%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Eform%2Dcontrol%2Dstatic%7Bdisplay%3Ainline%2Dblock%7D%2Eform%2Dinline%20%2Einput%2Dgroup%7Bdisplay%3Ainline%2Dtable%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Einput%2Dgroup%20%2Eform%2Dcontrol%2C%2Eform%2Dinline%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Daddon%2C%2Eform%2Dinline%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Dbtn%7Bwidth%3Aauto%7D%2Eform%2Dinline%20%2Einput%2Dgroup%3E%2Eform%2Dcontrol%7Bwidth%3A100%25%7D%2Eform%2Dinline%20%2Econtrol%2Dlabel%7Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Echeckbox%2C%2Eform%2Dinline%20%2Eradio%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Echeckbox%20label%2C%2Eform%2Dinline%20%2Eradio%20label%7Bpadding%2Dleft%3A0%7D%2Eform%2Dinline%20%2Echeckbox%20input%5Btype%3Dcheckbox%5D%2C%2Eform%2Dinline%20%2Eradio%20input%5Btype%3Dradio%5D%7Bposition%3Arelative%3Bmargin%2Dleft%3A0%7D%2Eform%2Dinline%20%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%2Dfeedback%7Btop%3A0%7D%7D%2Eform%2Dhorizontal%20%2Echeckbox%2C%2Eform%2Dhorizontal%20%2Echeckbox%2Dinline%2C%2Eform%2Dhorizontal%20%2Eradio%2C%2Eform%2Dhorizontal%20%2Eradio%2Dinline%7Bpadding%2Dtop%3A7px%3Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%7D%2Eform%2Dhorizontal%20%2Echeckbox%2C%2Eform%2Dhorizontal%20%2Eradio%7Bmin%2Dheight%3A27px%7D%2Eform%2Dhorizontal%20%2Eform%2Dgroup%7Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dhorizontal%20%2Econtrol%2Dlabel%7Bpadding%2Dtop%3A7px%3Bmargin%2Dbottom%3A0%3Btext%2Dalign%3Aright%7D%7D%2Eform%2Dhorizontal%20%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%2Dfeedback%7Bright%3A15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dhorizontal%20%2Eform%2Dgroup%2Dlg%20%2Econtrol%2Dlabel%7Bpadding%2Dtop%3A14%2E33px%3Bfont%2Dsize%3A18px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dhorizontal%20%2Eform%2Dgroup%2Dsm%20%2Econtrol%2Dlabel%7Bpadding%2Dtop%3A6px%3Bfont%2Dsize%3A12px%7D%7D%2Ebtn%7Bdisplay%3Ainline%2Dblock%3Bpadding%3A6px%2012px%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A14px%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Amiddle%3B%2Dms%2Dtouch%2Daction%3Amanipulation%3Btouch%2Daction%3Amanipulation%3Bcursor%3Apointer%3B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dmoz%2Duser%2Dselect%3Anone%3B%2Dms%2Duser%2Dselect%3Anone%3Buser%2Dselect%3Anone%3Bbackground%2Dimage%3Anone%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%7D%2Ebtn%2Eactive%2Efocus%2C%2Ebtn%2Eactive%3Afocus%2C%2Ebtn%2Efocus%2C%2Ebtn%3Aactive%2Efocus%2C%2Ebtn%3Aactive%3Afocus%2C%2Ebtn%3Afocus%7Boutline%3Athin%20dotted%3Boutline%3A5px%20auto%20%2Dwebkit%2Dfocus%2Dring%2Dcolor%3Boutline%2Doffset%3A%2D2px%7D%2Ebtn%2Efocus%2C%2Ebtn%3Afocus%2C%2Ebtn%3Ahover%7Bcolor%3A%23333%3Btext%2Ddecoration%3Anone%7D%2Ebtn%2Eactive%2C%2Ebtn%3Aactive%7Bbackground%2Dimage%3Anone%3Boutline%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%3Bbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%7D%2Ebtn%2Edisabled%2C%2Ebtn%5Bdisabled%5D%2Cfieldset%5Bdisabled%5D%20%2Ebtn%7Bcursor%3Anot%2Dallowed%3Bfilter%3Aalpha%28opacity%3D65%29%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%3Bopacity%3A%2E65%7Da%2Ebtn%2Edisabled%2Cfieldset%5Bdisabled%5D%20a%2Ebtn%7Bpointer%2Devents%3Anone%7D%2Ebtn%2Ddefault%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23ccc%7D%2Ebtn%2Ddefault%2Efocus%2C%2Ebtn%2Ddefault%3Afocus%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23e6e6e6%3Bborder%2Dcolor%3A%238c8c8c%7D%2Ebtn%2Ddefault%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23e6e6e6%3Bborder%2Dcolor%3A%23adadad%7D%2Ebtn%2Ddefault%2Eactive%2C%2Ebtn%2Ddefault%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23e6e6e6%3Bborder%2Dcolor%3A%23adadad%7D%2Ebtn%2Ddefault%2Eactive%2Efocus%2C%2Ebtn%2Ddefault%2Eactive%3Afocus%2C%2Ebtn%2Ddefault%2Eactive%3Ahover%2C%2Ebtn%2Ddefault%3Aactive%2Efocus%2C%2Ebtn%2Ddefault%3Aactive%3Afocus%2C%2Ebtn%2Ddefault%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23d4d4d4%3Bborder%2Dcolor%3A%238c8c8c%7D%2Ebtn%2Ddefault%2Eactive%2C%2Ebtn%2Ddefault%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Ddefault%2Edisabled%2C%2Ebtn%2Ddefault%2Edisabled%2Eactive%2C%2Ebtn%2Ddefault%2Edisabled%2Efocus%2C%2Ebtn%2Ddefault%2Edisabled%3Aactive%2C%2Ebtn%2Ddefault%2Edisabled%3Afocus%2C%2Ebtn%2Ddefault%2Edisabled%3Ahover%2C%2Ebtn%2Ddefault%5Bdisabled%5D%2C%2Ebtn%2Ddefault%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Ddefault%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Ddefault%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Ddefault%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Ddefault%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%3Ahover%7Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23ccc%7D%2Ebtn%2Ddefault%20%2Ebadge%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23333%7D%2Ebtn%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%232e6da4%7D%2Ebtn%2Dprimary%2Efocus%2C%2Ebtn%2Dprimary%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23286090%3Bborder%2Dcolor%3A%23122b40%7D%2Ebtn%2Dprimary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23286090%3Bborder%2Dcolor%3A%23204d74%7D%2Ebtn%2Dprimary%2Eactive%2C%2Ebtn%2Dprimary%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23286090%3Bborder%2Dcolor%3A%23204d74%7D%2Ebtn%2Dprimary%2Eactive%2Efocus%2C%2Ebtn%2Dprimary%2Eactive%3Afocus%2C%2Ebtn%2Dprimary%2Eactive%3Ahover%2C%2Ebtn%2Dprimary%3Aactive%2Efocus%2C%2Ebtn%2Dprimary%3Aactive%3Afocus%2C%2Ebtn%2Dprimary%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23204d74%3Bborder%2Dcolor%3A%23122b40%7D%2Ebtn%2Dprimary%2Eactive%2C%2Ebtn%2Dprimary%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dprimary%2Edisabled%2C%2Ebtn%2Dprimary%2Edisabled%2Eactive%2C%2Ebtn%2Dprimary%2Edisabled%2Efocus%2C%2Ebtn%2Dprimary%2Edisabled%3Aactive%2C%2Ebtn%2Dprimary%2Edisabled%3Afocus%2C%2Ebtn%2Dprimary%2Edisabled%3Ahover%2C%2Ebtn%2Dprimary%5Bdisabled%5D%2C%2Ebtn%2Dprimary%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dprimary%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dprimary%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dprimary%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dprimary%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%3Ahover%7Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%232e6da4%7D%2Ebtn%2Dprimary%20%2Ebadge%7Bcolor%3A%23337ab7%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dsuccess%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%235cb85c%3Bborder%2Dcolor%3A%234cae4c%7D%2Ebtn%2Dsuccess%2Efocus%2C%2Ebtn%2Dsuccess%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23449d44%3Bborder%2Dcolor%3A%23255625%7D%2Ebtn%2Dsuccess%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23449d44%3Bborder%2Dcolor%3A%23398439%7D%2Ebtn%2Dsuccess%2Eactive%2C%2Ebtn%2Dsuccess%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23449d44%3Bborder%2Dcolor%3A%23398439%7D%2Ebtn%2Dsuccess%2Eactive%2Efocus%2C%2Ebtn%2Dsuccess%2Eactive%3Afocus%2C%2Ebtn%2Dsuccess%2Eactive%3Ahover%2C%2Ebtn%2Dsuccess%3Aactive%2Efocus%2C%2Ebtn%2Dsuccess%3Aactive%3Afocus%2C%2Ebtn%2Dsuccess%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23398439%3Bborder%2Dcolor%3A%23255625%7D%2Ebtn%2Dsuccess%2Eactive%2C%2Ebtn%2Dsuccess%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dsuccess%2Edisabled%2C%2Ebtn%2Dsuccess%2Edisabled%2Eactive%2C%2Ebtn%2Dsuccess%2Edisabled%2Efocus%2C%2Ebtn%2Dsuccess%2Edisabled%3Aactive%2C%2Ebtn%2Dsuccess%2Edisabled%3Afocus%2C%2Ebtn%2Dsuccess%2Edisabled%3Ahover%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%3Ahover%7Bbackground%2Dcolor%3A%235cb85c%3Bborder%2Dcolor%3A%234cae4c%7D%2Ebtn%2Dsuccess%20%2Ebadge%7Bcolor%3A%235cb85c%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dinfo%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%235bc0de%3Bborder%2Dcolor%3A%2346b8da%7D%2Ebtn%2Dinfo%2Efocus%2C%2Ebtn%2Dinfo%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331b0d5%3Bborder%2Dcolor%3A%231b6d85%7D%2Ebtn%2Dinfo%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331b0d5%3Bborder%2Dcolor%3A%23269abc%7D%2Ebtn%2Dinfo%2Eactive%2C%2Ebtn%2Dinfo%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331b0d5%3Bborder%2Dcolor%3A%23269abc%7D%2Ebtn%2Dinfo%2Eactive%2Efocus%2C%2Ebtn%2Dinfo%2Eactive%3Afocus%2C%2Ebtn%2Dinfo%2Eactive%3Ahover%2C%2Ebtn%2Dinfo%3Aactive%2Efocus%2C%2Ebtn%2Dinfo%3Aactive%3Afocus%2C%2Ebtn%2Dinfo%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23269abc%3Bborder%2Dcolor%3A%231b6d85%7D%2Ebtn%2Dinfo%2Eactive%2C%2Ebtn%2Dinfo%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dinfo%2Edisabled%2C%2Ebtn%2Dinfo%2Edisabled%2Eactive%2C%2Ebtn%2Dinfo%2Edisabled%2Efocus%2C%2Ebtn%2Dinfo%2Edisabled%3Aactive%2C%2Ebtn%2Dinfo%2Edisabled%3Afocus%2C%2Ebtn%2Dinfo%2Edisabled%3Ahover%2C%2Ebtn%2Dinfo%5Bdisabled%5D%2C%2Ebtn%2Dinfo%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dinfo%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dinfo%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dinfo%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dinfo%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%3Ahover%7Bbackground%2Dcolor%3A%235bc0de%3Bborder%2Dcolor%3A%2346b8da%7D%2Ebtn%2Dinfo%20%2Ebadge%7Bcolor%3A%235bc0de%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dwarning%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23f0ad4e%3Bborder%2Dcolor%3A%23eea236%7D%2Ebtn%2Dwarning%2Efocus%2C%2Ebtn%2Dwarning%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ec971f%3Bborder%2Dcolor%3A%23985f0d%7D%2Ebtn%2Dwarning%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ec971f%3Bborder%2Dcolor%3A%23d58512%7D%2Ebtn%2Dwarning%2Eactive%2C%2Ebtn%2Dwarning%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ec971f%3Bborder%2Dcolor%3A%23d58512%7D%2Ebtn%2Dwarning%2Eactive%2Efocus%2C%2Ebtn%2Dwarning%2Eactive%3Afocus%2C%2Ebtn%2Dwarning%2Eactive%3Ahover%2C%2Ebtn%2Dwarning%3Aactive%2Efocus%2C%2Ebtn%2Dwarning%3Aactive%3Afocus%2C%2Ebtn%2Dwarning%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23d58512%3Bborder%2Dcolor%3A%23985f0d%7D%2Ebtn%2Dwarning%2Eactive%2C%2Ebtn%2Dwarning%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dwarning%2Edisabled%2C%2Ebtn%2Dwarning%2Edisabled%2Eactive%2C%2Ebtn%2Dwarning%2Edisabled%2Efocus%2C%2Ebtn%2Dwarning%2Edisabled%3Aactive%2C%2Ebtn%2Dwarning%2Edisabled%3Afocus%2C%2Ebtn%2Dwarning%2Edisabled%3Ahover%2C%2Ebtn%2Dwarning%5Bdisabled%5D%2C%2Ebtn%2Dwarning%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dwarning%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dwarning%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dwarning%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dwarning%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%3Ahover%7Bbackground%2Dcolor%3A%23f0ad4e%3Bborder%2Dcolor%3A%23eea236%7D%2Ebtn%2Dwarning%20%2Ebadge%7Bcolor%3A%23f0ad4e%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Ddanger%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23d9534f%3Bborder%2Dcolor%3A%23d43f3a%7D%2Ebtn%2Ddanger%2Efocus%2C%2Ebtn%2Ddanger%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23c9302c%3Bborder%2Dcolor%3A%23761c19%7D%2Ebtn%2Ddanger%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23c9302c%3Bborder%2Dcolor%3A%23ac2925%7D%2Ebtn%2Ddanger%2Eactive%2C%2Ebtn%2Ddanger%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23c9302c%3Bborder%2Dcolor%3A%23ac2925%7D%2Ebtn%2Ddanger%2Eactive%2Efocus%2C%2Ebtn%2Ddanger%2Eactive%3Afocus%2C%2Ebtn%2Ddanger%2Eactive%3Ahover%2C%2Ebtn%2Ddanger%3Aactive%2Efocus%2C%2Ebtn%2Ddanger%3Aactive%3Afocus%2C%2Ebtn%2Ddanger%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ac2925%3Bborder%2Dcolor%3A%23761c19%7D%2Ebtn%2Ddanger%2Eactive%2C%2Ebtn%2Ddanger%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Ddanger%2Edisabled%2C%2Ebtn%2Ddanger%2Edisabled%2Eactive%2C%2Ebtn%2Ddanger%2Edisabled%2Efocus%2C%2Ebtn%2Ddanger%2Edisabled%3Aactive%2C%2Ebtn%2Ddanger%2Edisabled%3Afocus%2C%2Ebtn%2Ddanger%2Edisabled%3Ahover%2C%2Ebtn%2Ddanger%5Bdisabled%5D%2C%2Ebtn%2Ddanger%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Ddanger%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Ddanger%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Ddanger%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Ddanger%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%3Ahover%7Bbackground%2Dcolor%3A%23d9534f%3Bborder%2Dcolor%3A%23d43f3a%7D%2Ebtn%2Ddanger%20%2Ebadge%7Bcolor%3A%23d9534f%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dlink%7Bfont%2Dweight%3A400%3Bcolor%3A%23337ab7%3Bborder%2Dradius%3A0%7D%2Ebtn%2Dlink%2C%2Ebtn%2Dlink%2Eactive%2C%2Ebtn%2Dlink%3Aactive%2C%2Ebtn%2Dlink%5Bdisabled%5D%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dlink%7Bbackground%2Dcolor%3Atransparent%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Ebtn%2Dlink%2C%2Ebtn%2Dlink%3Aactive%2C%2Ebtn%2Dlink%3Afocus%2C%2Ebtn%2Dlink%3Ahover%7Bborder%2Dcolor%3Atransparent%7D%2Ebtn%2Dlink%3Afocus%2C%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%2323527c%3Btext%2Ddecoration%3Aunderline%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Dlink%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dlink%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dlink%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23777%3Btext%2Ddecoration%3Anone%7D%2Ebtn%2Dgroup%2Dlg%3E%2Ebtn%2C%2Ebtn%2Dlg%7Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7D%2Ebtn%2Dgroup%2Dsm%3E%2Ebtn%2C%2Ebtn%2Dsm%7Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7D%2Ebtn%2Dgroup%2Dxs%3E%2Ebtn%2C%2Ebtn%2Dxs%7Bpadding%3A1px%205px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7D%2Ebtn%2Dblock%7Bdisplay%3Ablock%3Bwidth%3A100%25%7D%2Ebtn%2Dblock%2B%2Ebtn%2Dblock%7Bmargin%2Dtop%3A5px%7Dinput%5Btype%3Dbutton%5D%2Ebtn%2Dblock%2Cinput%5Btype%3Dreset%5D%2Ebtn%2Dblock%2Cinput%5Btype%3Dsubmit%5D%2Ebtn%2Dblock%7Bwidth%3A100%25%7D%2Efade%7Bopacity%3A0%3B%2Dwebkit%2Dtransition%3Aopacity%20%2E15s%20linear%3B%2Do%2Dtransition%3Aopacity%20%2E15s%20linear%3Btransition%3Aopacity%20%2E15s%20linear%7D%2Efade%2Ein%7Bopacity%3A1%7D%2Ecollapse%7Bdisplay%3Anone%7D%2Ecollapse%2Ein%7Bdisplay%3Ablock%7Dtr%2Ecollapse%2Ein%7Bdisplay%3Atable%2Drow%7Dtbody%2Ecollapse%2Ein%7Bdisplay%3Atable%2Drow%2Dgroup%7D%2Ecollapsing%7Bposition%3Arelative%3Bheight%3A0%3Boverflow%3Ahidden%3B%2Dwebkit%2Dtransition%2Dtiming%2Dfunction%3Aease%3B%2Do%2Dtransition%2Dtiming%2Dfunction%3Aease%3Btransition%2Dtiming%2Dfunction%3Aease%3B%2Dwebkit%2Dtransition%2Dduration%3A%2E35s%3B%2Do%2Dtransition%2Dduration%3A%2E35s%3Btransition%2Dduration%3A%2E35s%3B%2Dwebkit%2Dtransition%2Dproperty%3Aheight%2Cvisibility%3B%2Do%2Dtransition%2Dproperty%3Aheight%2Cvisibility%3Btransition%2Dproperty%3Aheight%2Cvisibility%7D%2Ecaret%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A0%3Bheight%3A0%3Bmargin%2Dleft%3A2px%3Bvertical%2Dalign%3Amiddle%3Bborder%2Dtop%3A4px%20dashed%3Bborder%2Dtop%3A4px%20solid%5C9%3Bborder%2Dright%3A4px%20solid%20transparent%3Bborder%2Dleft%3A4px%20solid%20transparent%7D%2Edropdown%2C%2Edropup%7Bposition%3Arelative%7D%2Edropdown%2Dtoggle%3Afocus%7Boutline%3A0%7D%2Edropdown%2Dmenu%7Bposition%3Aabsolute%3Btop%3A100%25%3Bleft%3A0%3Bz%2Dindex%3A1000%3Bdisplay%3Anone%3Bfloat%3Aleft%3Bmin%2Dwidth%3A160px%3Bpadding%3A5px%200%3Bmargin%3A2px%200%200%3Bfont%2Dsize%3A14px%3Btext%2Dalign%3Aleft%3Blist%2Dstyle%3Anone%3Bbackground%2Dcolor%3A%23fff%3B%2Dwebkit%2Dbackground%2Dclip%3Apadding%2Dbox%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20%23ccc%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E15%29%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3A0%206px%2012px%20rgba%280%2C0%2C0%2C%2E175%29%3Bbox%2Dshadow%3A0%206px%2012px%20rgba%280%2C0%2C0%2C%2E175%29%7D%2Edropdown%2Dmenu%2Epull%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%2Edropdown%2Dmenu%20%2Edivider%7Bheight%3A1px%3Bmargin%3A9px%200%3Boverflow%3Ahidden%3Bbackground%2Dcolor%3A%23e5e5e5%7D%2Edropdown%2Dmenu%3Eli%3Ea%7Bdisplay%3Ablock%3Bpadding%3A3px%2020px%3Bclear%3Aboth%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23333%3Bwhite%2Dspace%3Anowrap%7D%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bcolor%3A%23262626%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23f5f5f5%7D%2Edropdown%2Dmenu%3E%2Eactive%3Ea%2C%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23337ab7%3Boutline%3A0%7D%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%2C%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23777%7D%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Btext%2Ddecoration%3Anone%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28enabled%3Dfalse%29%7D%2Eopen%3E%2Edropdown%2Dmenu%7Bdisplay%3Ablock%7D%2Eopen%3Ea%7Boutline%3A0%7D%2Edropdown%2Dmenu%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%2Edropdown%2Dmenu%2Dleft%7Bright%3Aauto%3Bleft%3A0%7D%2Edropdown%2Dheader%7Bdisplay%3Ablock%3Bpadding%3A3px%2020px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23777%3Bwhite%2Dspace%3Anowrap%7D%2Edropdown%2Dbackdrop%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A990%7D%2Epull%2Dright%3E%2Edropdown%2Dmenu%7Bright%3A0%3Bleft%3Aauto%7D%2Edropup%20%2Ecaret%2C%2Enavbar%2Dfixed%2Dbottom%20%2Edropdown%20%2Ecaret%7Bcontent%3A%22%22%3Bborder%2Dtop%3A0%3Bborder%2Dbottom%3A4px%20dashed%3Bborder%2Dbottom%3A4px%20solid%5C9%7D%2Edropup%20%2Edropdown%2Dmenu%2C%2Enavbar%2Dfixed%2Dbottom%20%2Edropdown%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bbottom%3A100%25%3Bmargin%2Dbottom%3A2px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dright%20%2Edropdown%2Dmenu%7Bright%3A0%3Bleft%3Aauto%7D%2Enavbar%2Dright%20%2Edropdown%2Dmenu%2Dleft%7Bright%3Aauto%3Bleft%3A0%7D%7D%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Amiddle%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2C%2Ebtn%2Dgroup%3E%2Ebtn%7Bposition%3Arelative%3Bfloat%3Aleft%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Eactive%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Aactive%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Afocus%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Ahover%2C%2Ebtn%2Dgroup%3E%2Ebtn%2Eactive%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Aactive%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Afocus%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Ahover%7Bz%2Dindex%3A2%7D%2Ebtn%2Dgroup%20%2Ebtn%2B%2Ebtn%2C%2Ebtn%2Dgroup%20%2Ebtn%2B%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%20%2Ebtn%2Dgroup%2B%2Ebtn%2C%2Ebtn%2Dgroup%20%2Ebtn%2Dgroup%2B%2Ebtn%2Dgroup%7Bmargin%2Dleft%3A%2D1px%7D%2Ebtn%2Dtoolbar%7Bmargin%2Dleft%3A%2D5px%7D%2Ebtn%2Dtoolbar%20%2Ebtn%2C%2Ebtn%2Dtoolbar%20%2Ebtn%2Dgroup%2C%2Ebtn%2Dtoolbar%20%2Einput%2Dgroup%7Bfloat%3Aleft%7D%2Ebtn%2Dtoolbar%3E%2Ebtn%2C%2Ebtn%2Dtoolbar%3E%2Ebtn%2Dgroup%2C%2Ebtn%2Dtoolbar%3E%2Einput%2Dgroup%7Bmargin%2Dleft%3A5px%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Afirst%2Dchild%7Bmargin%2Dleft%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%2C%2Ebtn%2Dgroup%3E%2Edropdown%2Dtoggle%3Anot%28%3Afirst%2Dchild%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%7Bfloat%3Aleft%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%3Alast%2Dchild%2C%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Edropdown%2Dtoggle%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%20%2Edropdown%2Dtoggle%3Aactive%2C%2Ebtn%2Dgroup%2Eopen%20%2Edropdown%2Dtoggle%7Boutline%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2B%2Edropdown%2Dtoggle%7Bpadding%2Dright%3A8px%3Bpadding%2Dleft%3A8px%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dlg%2B%2Edropdown%2Dtoggle%7Bpadding%2Dright%3A12px%3Bpadding%2Dleft%3A12px%7D%2Ebtn%2Dgroup%2Eopen%20%2Edropdown%2Dtoggle%7B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%3Bbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%7D%2Ebtn%2Dgroup%2Eopen%20%2Edropdown%2Dtoggle%2Ebtn%2Dlink%7B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Ebtn%20%2Ecaret%7Bmargin%2Dleft%3A0%7D%2Ebtn%2Dlg%20%2Ecaret%7Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Edropup%20%2Ebtn%2Dlg%20%2Ecaret%7Bborder%2Dwidth%3A0%205px%205px%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3E%2Ebtn%7Bdisplay%3Ablock%3Bfloat%3Anone%3Bwidth%3A100%25%3Bmax%2Dwidth%3A100%25%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3E%2Ebtn%7Bfloat%3Anone%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2B%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2B%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%2B%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%2B%2Ebtn%2Dgroup%7Bmargin%2Dtop%3A%2D1px%3Bmargin%2Dleft%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dtop%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A4px%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%3Alast%2Dchild%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Edropdown%2Dtoggle%7Bborder%2Dbottom%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Djustified%7Bdisplay%3Atable%3Bwidth%3A100%25%3Btable%2Dlayout%3Afixed%3Bborder%2Dcollapse%3Aseparate%7D%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2C%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2Dgroup%7Bdisplay%3Atable%2Dcell%3Bfloat%3Anone%3Bwidth%3A1%25%7D%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2Dgroup%20%2Ebtn%7Bwidth%3A100%25%7D%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2Dgroup%20%2Edropdown%2Dmenu%7Bleft%3Aauto%7D%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%20input%5Btype%3Dcheckbox%5D%2C%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%20input%5Btype%3Dradio%5D%2C%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%2Dgroup%3E%2Ebtn%20input%5Btype%3Dcheckbox%5D%2C%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%2Dgroup%3E%2Ebtn%20input%5Btype%3Dradio%5D%7Bposition%3Aabsolute%3Bclip%3Arect%280%2C0%2C0%2C0%29%3Bpointer%2Devents%3Anone%7D%2Einput%2Dgroup%7Bposition%3Arelative%3Bdisplay%3Atable%3Bborder%2Dcollapse%3Aseparate%7D%2Einput%2Dgroup%5Bclass%2A%3Dcol%2D%5D%7Bfloat%3Anone%3Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%7Bposition%3Arelative%3Bz%2Dindex%3A2%3Bfloat%3Aleft%3Bwidth%3A100%25%3Bmargin%2Dbottom%3A0%7D%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A46px%3Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7Dselect%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2Cselect%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2Cselect%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A46px%3Bline%2Dheight%3A46px%7Dselect%5Bmultiple%5D%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%2Ctextarea%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2Ctextarea%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2Ctextarea%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3Aauto%7D%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A30px%3Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7Dselect%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2Cselect%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2Cselect%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A30px%3Bline%2Dheight%3A30px%7Dselect%5Bmultiple%5D%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%2Ctextarea%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2Ctextarea%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2Ctextarea%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3Aauto%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dbtn%7Bdisplay%3Atable%2Dcell%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%2C%2Einput%2Dgroup%2Daddon%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%2C%2Einput%2Dgroup%2Dbtn%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dradius%3A0%7D%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dbtn%7Bwidth%3A1%25%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Amiddle%7D%2Einput%2Dgroup%2Daddon%7Bpadding%3A6px%2012px%3Bfont%2Dsize%3A14px%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%3Bcolor%3A%23555%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23eee%3Bborder%3A1px%20solid%20%23ccc%3Bborder%2Dradius%3A4px%7D%2Einput%2Dgroup%2Daddon%2Einput%2Dsm%7Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bborder%2Dradius%3A3px%7D%2Einput%2Dgroup%2Daddon%2Einput%2Dlg%7Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bborder%2Dradius%3A6px%7D%2Einput%2Dgroup%2Daddon%20input%5Btype%3Dcheckbox%5D%2C%2Einput%2Dgroup%2Daddon%20input%5Btype%3Dradio%5D%7Bmargin%2Dtop%3A0%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%3Afirst%2Dchild%2C%2Einput%2Dgroup%2Daddon%3Afirst%2Dchild%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2Dgroup%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Edropdown%2Dtoggle%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2Dgroup%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Einput%2Dgroup%2Daddon%3Afirst%2Dchild%7Bborder%2Dright%3A0%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%3Alast%2Dchild%2C%2Einput%2Dgroup%2Daddon%3Alast%2Dchild%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2Dgroup%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Edropdown%2Dtoggle%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Einput%2Dgroup%2Daddon%3Alast%2Dchild%7Bborder%2Dleft%3A0%7D%2Einput%2Dgroup%2Dbtn%7Bposition%3Arelative%3Bfont%2Dsize%3A0%3Bwhite%2Dspace%3Anowrap%7D%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bposition%3Arelative%7D%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%2B%2Ebtn%7Bmargin%2Dleft%3A%2D1px%7D%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%3Aactive%2C%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%3Afocus%2C%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%3Ahover%7Bz%2Dindex%3A2%7D%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2Dgroup%7Bmargin%2Dright%3A%2D1px%7D%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2Dgroup%7Bz%2Dindex%3A2%3Bmargin%2Dleft%3A%2D1px%7D%2Enav%7Bpadding%2Dleft%3A0%3Bmargin%2Dbottom%3A0%3Blist%2Dstyle%3Anone%7D%2Enav%3Eli%7Bposition%3Arelative%3Bdisplay%3Ablock%7D%2Enav%3Eli%3Ea%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bpadding%3A10px%2015px%7D%2Enav%3Eli%3Ea%3Afocus%2C%2Enav%3Eli%3Ea%3Ahover%7Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23eee%7D%2Enav%3Eli%2Edisabled%3Ea%7Bcolor%3A%23777%7D%2Enav%3Eli%2Edisabled%3Ea%3Afocus%2C%2Enav%3Eli%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23777%3Btext%2Ddecoration%3Anone%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3Atransparent%7D%2Enav%20%2Eopen%3Ea%2C%2Enav%20%2Eopen%3Ea%3Afocus%2C%2Enav%20%2Eopen%3Ea%3Ahover%7Bbackground%2Dcolor%3A%23eee%3Bborder%2Dcolor%3A%23337ab7%7D%2Enav%20%2Enav%2Ddivider%7Bheight%3A1px%3Bmargin%3A9px%200%3Boverflow%3Ahidden%3Bbackground%2Dcolor%3A%23e5e5e5%7D%2Enav%3Eli%3Ea%3Eimg%7Bmax%2Dwidth%3Anone%7D%2Enav%2Dtabs%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%7D%2Enav%2Dtabs%3Eli%7Bfloat%3Aleft%3Bmargin%2Dbottom%3A%2D1px%7D%2Enav%2Dtabs%3Eli%3Ea%7Bmargin%2Dright%3A2px%3Bline%2Dheight%3A1%2E42857143%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%204px%200%200%7D%2Enav%2Dtabs%3Eli%3Ea%3Ahover%7Bborder%2Dcolor%3A%23eee%20%23eee%20%23ddd%7D%2Enav%2Dtabs%3Eli%2Eactive%3Ea%2C%2Enav%2Dtabs%3Eli%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%3Eli%2Eactive%3Ea%3Ahover%7Bcolor%3A%23555%3Bcursor%3Adefault%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dbottom%2Dcolor%3Atransparent%7D%2Enav%2Dtabs%2Enav%2Djustified%7Bwidth%3A100%25%3Bborder%2Dbottom%3A0%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%7Bfloat%3Anone%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A5px%3Btext%2Dalign%3Acenter%7D%2Enav%2Dtabs%2Enav%2Djustified%3E%2Edropdown%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bleft%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Dtabs%2Enav%2Djustified%3Eli%7Bdisplay%3Atable%2Dcell%3Bwidth%3A1%25%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A0%7D%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dright%3A0%3Bborder%2Dradius%3A4px%7D%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%3A1px%20solid%20%23ddd%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%204px%200%200%7D%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%2Dbottom%2Dcolor%3A%23fff%7D%7D%2Enav%2Dpills%3Eli%7Bfloat%3Aleft%7D%2Enav%2Dpills%3Eli%3Ea%7Bborder%2Dradius%3A4px%7D%2Enav%2Dpills%3Eli%2Bli%7Bmargin%2Dleft%3A2px%7D%2Enav%2Dpills%3Eli%2Eactive%3Ea%2C%2Enav%2Dpills%3Eli%2Eactive%3Ea%3Afocus%2C%2Enav%2Dpills%3Eli%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%7D%2Enav%2Dstacked%3Eli%7Bfloat%3Anone%7D%2Enav%2Dstacked%3Eli%2Bli%7Bmargin%2Dtop%3A2px%3Bmargin%2Dleft%3A0%7D%2Enav%2Djustified%7Bwidth%3A100%25%7D%2Enav%2Djustified%3Eli%7Bfloat%3Anone%7D%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A5px%3Btext%2Dalign%3Acenter%7D%2Enav%2Djustified%3E%2Edropdown%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bleft%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Djustified%3Eli%7Bdisplay%3Atable%2Dcell%3Bwidth%3A1%25%7D%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A0%7D%7D%2Enav%2Dtabs%2Djustified%7Bborder%2Dbottom%3A0%7D%2Enav%2Dtabs%2Djustified%3Eli%3Ea%7Bmargin%2Dright%3A0%3Bborder%2Dradius%3A4px%7D%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%3A1px%20solid%20%23ddd%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Dtabs%2Djustified%3Eli%3Ea%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%204px%200%200%7D%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%2Dbottom%2Dcolor%3A%23fff%7D%7D%2Etab%2Dcontent%3E%2Etab%2Dpane%7Bdisplay%3Anone%7D%2Etab%2Dcontent%3E%2Eactive%7Bdisplay%3Ablock%7D%2Enav%2Dtabs%20%2Edropdown%2Dmenu%7Bmargin%2Dtop%3A%2D1px%3Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Enavbar%7Bposition%3Arelative%3Bmin%2Dheight%3A50px%3Bmargin%2Dbottom%3A20px%3Bborder%3A1px%20solid%20transparent%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%7Bborder%2Dradius%3A4px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dheader%7Bfloat%3Aleft%7D%7D%2Enavbar%2Dcollapse%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Boverflow%2Dx%3Avisible%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%3Bborder%2Dtop%3A1px%20solid%20transparent%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%3Bbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%7D%2Enavbar%2Dcollapse%2Ein%7Boverflow%2Dy%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dcollapse%7Bwidth%3Aauto%3Bborder%2Dtop%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Enavbar%2Dcollapse%2Ecollapse%7Bdisplay%3Ablock%21important%3Bheight%3Aauto%21important%3Bpadding%2Dbottom%3A0%3Boverflow%3Avisible%21important%7D%2Enavbar%2Dcollapse%2Ein%7Boverflow%2Dy%3Avisible%7D%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dfixed%2Dtop%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dstatic%2Dtop%20%2Enavbar%2Dcollapse%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%7D%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dfixed%2Dtop%20%2Enavbar%2Dcollapse%7Bmax%2Dheight%3A340px%7D%40media%20%28max%2Ddevice%2Dwidth%3A480px%29%20and%20%28orientation%3Alandscape%29%7B%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dfixed%2Dtop%20%2Enavbar%2Dcollapse%7Bmax%2Dheight%3A200px%7D%7D%2Econtainer%2Dfluid%3E%2Enavbar%2Dcollapse%2C%2Econtainer%2Dfluid%3E%2Enavbar%2Dheader%2C%2Econtainer%3E%2Enavbar%2Dcollapse%2C%2Econtainer%3E%2Enavbar%2Dheader%7Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Econtainer%2Dfluid%3E%2Enavbar%2Dcollapse%2C%2Econtainer%2Dfluid%3E%2Enavbar%2Dheader%2C%2Econtainer%3E%2Enavbar%2Dcollapse%2C%2Econtainer%3E%2Enavbar%2Dheader%7Bmargin%2Dright%3A0%3Bmargin%2Dleft%3A0%7D%7D%2Enavbar%2Dstatic%2Dtop%7Bz%2Dindex%3A1000%3Bborder%2Dwidth%3A0%200%201px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dstatic%2Dtop%7Bborder%2Dradius%3A0%7D%7D%2Enavbar%2Dfixed%2Dbottom%2C%2Enavbar%2Dfixed%2Dtop%7Bposition%3Afixed%3Bright%3A0%3Bleft%3A0%3Bz%2Dindex%3A1030%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dfixed%2Dbottom%2C%2Enavbar%2Dfixed%2Dtop%7Bborder%2Dradius%3A0%7D%7D%2Enavbar%2Dfixed%2Dtop%7Btop%3A0%3Bborder%2Dwidth%3A0%200%201px%7D%2Enavbar%2Dfixed%2Dbottom%7Bbottom%3A0%3Bmargin%2Dbottom%3A0%3Bborder%2Dwidth%3A1px%200%200%7D%2Enavbar%2Dbrand%7Bfloat%3Aleft%3Bheight%3A50px%3Bpadding%3A15px%2015px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A20px%7D%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Dbrand%3Ahover%7Btext%2Ddecoration%3Anone%7D%2Enavbar%2Dbrand%3Eimg%7Bdisplay%3Ablock%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%3E%2Econtainer%20%2Enavbar%2Dbrand%2C%2Enavbar%3E%2Econtainer%2Dfluid%20%2Enavbar%2Dbrand%7Bmargin%2Dleft%3A%2D15px%7D%7D%2Enavbar%2Dtoggle%7Bposition%3Arelative%3Bfloat%3Aright%3Bpadding%3A9px%2010px%3Bmargin%2Dtop%3A8px%3Bmargin%2Dright%3A15px%3Bmargin%2Dbottom%3A8px%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%7D%2Enavbar%2Dtoggle%3Afocus%7Boutline%3A0%7D%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%7Bdisplay%3Ablock%3Bwidth%3A22px%3Bheight%3A2px%3Bborder%2Dradius%3A1px%7D%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%2B%2Eicon%2Dbar%7Bmargin%2Dtop%3A4px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dtoggle%7Bdisplay%3Anone%7D%7D%2Enavbar%2Dnav%7Bmargin%3A7%2E5px%20%2D15px%7D%2Enavbar%2Dnav%3Eli%3Ea%7Bpadding%2Dtop%3A10px%3Bpadding%2Dbottom%3A10px%3Bline%2Dheight%3A20px%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%7Bposition%3Astatic%3Bfloat%3Anone%3Bwidth%3Aauto%3Bmargin%2Dtop%3A0%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%20%2Edropdown%2Dheader%2C%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bpadding%3A5px%2015px%205px%2025px%7D%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bline%2Dheight%3A20px%7D%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bbackground%2Dimage%3Anone%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dnav%7Bfloat%3Aleft%3Bmargin%3A0%7D%2Enavbar%2Dnav%3Eli%7Bfloat%3Aleft%7D%2Enavbar%2Dnav%3Eli%3Ea%7Bpadding%2Dtop%3A15px%3Bpadding%2Dbottom%3A15px%7D%7D%2Enavbar%2Dform%7Bpadding%3A10px%2015px%3Bmargin%2Dtop%3A8px%3Bmargin%2Dright%3A%2D15px%3Bmargin%2Dbottom%3A8px%3Bmargin%2Dleft%3A%2D15px%3Bborder%2Dtop%3A1px%20solid%20transparent%3Bborder%2Dbottom%3A1px%20solid%20transparent%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%2C0%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%3Bbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%2C0%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dform%20%2Eform%2Dgroup%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Eform%2Dcontrol%7Bdisplay%3Ainline%2Dblock%3Bwidth%3Aauto%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Eform%2Dcontrol%2Dstatic%7Bdisplay%3Ainline%2Dblock%7D%2Enavbar%2Dform%20%2Einput%2Dgroup%7Bdisplay%3Ainline%2Dtable%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Einput%2Dgroup%20%2Eform%2Dcontrol%2C%2Enavbar%2Dform%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Daddon%2C%2Enavbar%2Dform%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Dbtn%7Bwidth%3Aauto%7D%2Enavbar%2Dform%20%2Einput%2Dgroup%3E%2Eform%2Dcontrol%7Bwidth%3A100%25%7D%2Enavbar%2Dform%20%2Econtrol%2Dlabel%7Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Echeckbox%2C%2Enavbar%2Dform%20%2Eradio%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Echeckbox%20label%2C%2Enavbar%2Dform%20%2Eradio%20label%7Bpadding%2Dleft%3A0%7D%2Enavbar%2Dform%20%2Echeckbox%20input%5Btype%3Dcheckbox%5D%2C%2Enavbar%2Dform%20%2Eradio%20input%5Btype%3Dradio%5D%7Bposition%3Arelative%3Bmargin%2Dleft%3A0%7D%2Enavbar%2Dform%20%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%2Dfeedback%7Btop%3A0%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Dform%20%2Eform%2Dgroup%7Bmargin%2Dbottom%3A5px%7D%2Enavbar%2Dform%20%2Eform%2Dgroup%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dform%7Bwidth%3Aauto%3Bpadding%2Dtop%3A0%3Bpadding%2Dbottom%3A0%3Bmargin%2Dright%3A0%3Bmargin%2Dleft%3A0%3Bborder%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%7D%2Enavbar%2Dnav%3Eli%3E%2Edropdown%2Dmenu%7Bmargin%2Dtop%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dnav%3Eli%3E%2Edropdown%2Dmenu%7Bmargin%2Dbottom%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A4px%3Bborder%2Dtop%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Enavbar%2Dbtn%7Bmargin%2Dtop%3A8px%3Bmargin%2Dbottom%3A8px%7D%2Enavbar%2Dbtn%2Ebtn%2Dsm%7Bmargin%2Dtop%3A10px%3Bmargin%2Dbottom%3A10px%7D%2Enavbar%2Dbtn%2Ebtn%2Dxs%7Bmargin%2Dtop%3A14px%3Bmargin%2Dbottom%3A14px%7D%2Enavbar%2Dtext%7Bmargin%2Dtop%3A15px%3Bmargin%2Dbottom%3A15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dtext%7Bfloat%3Aleft%3Bmargin%2Dright%3A15px%3Bmargin%2Dleft%3A15px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dleft%7Bfloat%3Aleft%21important%7D%2Enavbar%2Dright%7Bfloat%3Aright%21important%3Bmargin%2Dright%3A%2D15px%7D%2Enavbar%2Dright%7E%2Enavbar%2Dright%7Bmargin%2Dright%3A0%7D%7D%2Enavbar%2Ddefault%7Bbackground%2Dcolor%3A%23f8f8f8%3Bborder%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dbrand%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dbrand%3Ahover%7Bcolor%3A%235e5e5e%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtext%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3Eli%3Ea%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3Eli%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3Eli%3Ea%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23ccc%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%7Bborder%2Dcolor%3A%23ddd%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%3Ahover%7Bbackground%2Dcolor%3A%23ddd%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%7Bbackground%2Dcolor%3A%23888%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dform%7Bborder%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Ahover%7Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23e7e7e7%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23ccc%3Bbackground%2Dcolor%3Atransparent%7D%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dlink%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dlink%3Ahover%7Bcolor%3A%23333%7D%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Afocus%2C%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23333%7D%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%5Bdisabled%5D%3Afocus%2C%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23ccc%7D%2Enavbar%2Dinverse%7Bbackground%2Dcolor%3A%23222%3Bborder%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dbrand%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dbrand%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtext%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3Eli%3Ea%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3Eli%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3Eli%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23444%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%7Bborder%2Dcolor%3A%23333%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%3Ahover%7Bbackground%2Dcolor%3A%23333%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%7Bbackground%2Dcolor%3A%23fff%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dform%7Bborder%2Dcolor%3A%23101010%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23080808%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edropdown%2Dheader%7Bborder%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%20%2Edivider%7Bbackground%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23444%3Bbackground%2Dcolor%3Atransparent%7D%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dlink%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dlink%3Ahover%7Bcolor%3A%23fff%7D%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Afocus%2C%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23fff%7D%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%5Bdisabled%5D%3Afocus%2C%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23444%7D%2Ebreadcrumb%7Bpadding%3A8px%2015px%3Bmargin%2Dbottom%3A20px%3Blist%2Dstyle%3Anone%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dradius%3A4px%7D%2Ebreadcrumb%3Eli%7Bdisplay%3Ainline%2Dblock%7D%2Ebreadcrumb%3Eli%2Bli%3Abefore%7Bpadding%3A0%205px%3Bcolor%3A%23ccc%3Bcontent%3A%22%2F%5C00a0%22%7D%2Ebreadcrumb%3E%2Eactive%7Bcolor%3A%23777%7D%2Epagination%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dleft%3A0%3Bmargin%3A20px%200%3Bborder%2Dradius%3A4px%7D%2Epagination%3Eli%7Bdisplay%3Ainline%7D%2Epagination%3Eli%3Ea%2C%2Epagination%3Eli%3Espan%7Bposition%3Arelative%3Bfloat%3Aleft%3Bpadding%3A6px%2012px%3Bmargin%2Dleft%3A%2D1px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23337ab7%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%7D%2Epagination%3Eli%3Afirst%2Dchild%3Ea%2C%2Epagination%3Eli%3Afirst%2Dchild%3Espan%7Bmargin%2Dleft%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A4px%3Bborder%2Dbottom%2Dleft%2Dradius%3A4px%7D%2Epagination%3Eli%3Alast%2Dchild%3Ea%2C%2Epagination%3Eli%3Alast%2Dchild%3Espan%7Bborder%2Dtop%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dright%2Dradius%3A4px%7D%2Epagination%3Eli%3Ea%3Afocus%2C%2Epagination%3Eli%3Ea%3Ahover%2C%2Epagination%3Eli%3Espan%3Afocus%2C%2Epagination%3Eli%3Espan%3Ahover%7Bz%2Dindex%3A3%3Bcolor%3A%2323527c%3Bbackground%2Dcolor%3A%23eee%3Bborder%2Dcolor%3A%23ddd%7D%2Epagination%3E%2Eactive%3Ea%2C%2Epagination%3E%2Eactive%3Ea%3Afocus%2C%2Epagination%3E%2Eactive%3Ea%3Ahover%2C%2Epagination%3E%2Eactive%3Espan%2C%2Epagination%3E%2Eactive%3Espan%3Afocus%2C%2Epagination%3E%2Eactive%3Espan%3Ahover%7Bz%2Dindex%3A2%3Bcolor%3A%23fff%3Bcursor%3Adefault%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%23337ab7%7D%2Epagination%3E%2Edisabled%3Ea%2C%2Epagination%3E%2Edisabled%3Ea%3Afocus%2C%2Epagination%3E%2Edisabled%3Ea%3Ahover%2C%2Epagination%3E%2Edisabled%3Espan%2C%2Epagination%3E%2Edisabled%3Espan%3Afocus%2C%2Epagination%3E%2Edisabled%3Espan%3Ahover%7Bcolor%3A%23777%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23ddd%7D%2Epagination%2Dlg%3Eli%3Ea%2C%2Epagination%2Dlg%3Eli%3Espan%7Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%7D%2Epagination%2Dlg%3Eli%3Afirst%2Dchild%3Ea%2C%2Epagination%2Dlg%3Eli%3Afirst%2Dchild%3Espan%7Bborder%2Dtop%2Dleft%2Dradius%3A6px%3Bborder%2Dbottom%2Dleft%2Dradius%3A6px%7D%2Epagination%2Dlg%3Eli%3Alast%2Dchild%3Ea%2C%2Epagination%2Dlg%3Eli%3Alast%2Dchild%3Espan%7Bborder%2Dtop%2Dright%2Dradius%3A6px%3Bborder%2Dbottom%2Dright%2Dradius%3A6px%7D%2Epagination%2Dsm%3Eli%3Ea%2C%2Epagination%2Dsm%3Eli%3Espan%7Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%7D%2Epagination%2Dsm%3Eli%3Afirst%2Dchild%3Ea%2C%2Epagination%2Dsm%3Eli%3Afirst%2Dchild%3Espan%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epagination%2Dsm%3Eli%3Alast%2Dchild%3Ea%2C%2Epagination%2Dsm%3Eli%3Alast%2Dchild%3Espan%7Bborder%2Dtop%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dright%2Dradius%3A3px%7D%2Epager%7Bpadding%2Dleft%3A0%3Bmargin%3A20px%200%3Btext%2Dalign%3Acenter%3Blist%2Dstyle%3Anone%7D%2Epager%20li%7Bdisplay%3Ainline%7D%2Epager%20li%3Ea%2C%2Epager%20li%3Espan%7Bdisplay%3Ainline%2Dblock%3Bpadding%3A5px%2014px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A15px%7D%2Epager%20li%3Ea%3Afocus%2C%2Epager%20li%3Ea%3Ahover%7Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23eee%7D%2Epager%20%2Enext%3Ea%2C%2Epager%20%2Enext%3Espan%7Bfloat%3Aright%7D%2Epager%20%2Eprevious%3Ea%2C%2Epager%20%2Eprevious%3Espan%7Bfloat%3Aleft%7D%2Epager%20%2Edisabled%3Ea%2C%2Epager%20%2Edisabled%3Ea%3Afocus%2C%2Epager%20%2Edisabled%3Ea%3Ahover%2C%2Epager%20%2Edisabled%3Espan%7Bcolor%3A%23777%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3A%23fff%7D%2Elabel%7Bdisplay%3Ainline%3Bpadding%3A%2E2em%20%2E6em%20%2E3em%3Bfont%2Dsize%3A75%25%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Abaseline%3Bborder%2Dradius%3A%2E25em%7Da%2Elabel%3Afocus%2Ca%2Elabel%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bcursor%3Apointer%7D%2Elabel%3Aempty%7Bdisplay%3Anone%7D%2Ebtn%20%2Elabel%7Bposition%3Arelative%3Btop%3A%2D1px%7D%2Elabel%2Ddefault%7Bbackground%2Dcolor%3A%23777%7D%2Elabel%2Ddefault%5Bhref%5D%3Afocus%2C%2Elabel%2Ddefault%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%235e5e5e%7D%2Elabel%2Dprimary%7Bbackground%2Dcolor%3A%23337ab7%7D%2Elabel%2Dprimary%5Bhref%5D%3Afocus%2C%2Elabel%2Dprimary%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23286090%7D%2Elabel%2Dsuccess%7Bbackground%2Dcolor%3A%235cb85c%7D%2Elabel%2Dsuccess%5Bhref%5D%3Afocus%2C%2Elabel%2Dsuccess%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23449d44%7D%2Elabel%2Dinfo%7Bbackground%2Dcolor%3A%235bc0de%7D%2Elabel%2Dinfo%5Bhref%5D%3Afocus%2C%2Elabel%2Dinfo%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%2331b0d5%7D%2Elabel%2Dwarning%7Bbackground%2Dcolor%3A%23f0ad4e%7D%2Elabel%2Dwarning%5Bhref%5D%3Afocus%2C%2Elabel%2Dwarning%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23ec971f%7D%2Elabel%2Ddanger%7Bbackground%2Dcolor%3A%23d9534f%7D%2Elabel%2Ddanger%5Bhref%5D%3Afocus%2C%2Elabel%2Ddanger%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23c9302c%7D%2Ebadge%7Bdisplay%3Ainline%2Dblock%3Bmin%2Dwidth%3A10px%3Bpadding%3A3px%207px%3Bfont%2Dsize%3A12px%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Amiddle%3Bbackground%2Dcolor%3A%23777%3Bborder%2Dradius%3A10px%7D%2Ebadge%3Aempty%7Bdisplay%3Anone%7D%2Ebtn%20%2Ebadge%7Bposition%3Arelative%3Btop%3A%2D1px%7D%2Ebtn%2Dgroup%2Dxs%3E%2Ebtn%20%2Ebadge%2C%2Ebtn%2Dxs%20%2Ebadge%7Btop%3A0%3Bpadding%3A1px%205px%7Da%2Ebadge%3Afocus%2Ca%2Ebadge%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bcursor%3Apointer%7D%2Elist%2Dgroup%2Ditem%2Eactive%3E%2Ebadge%2C%2Enav%2Dpills%3E%2Eactive%3Ea%3E%2Ebadge%7Bcolor%3A%23337ab7%3Bbackground%2Dcolor%3A%23fff%7D%2Elist%2Dgroup%2Ditem%3E%2Ebadge%7Bfloat%3Aright%7D%2Elist%2Dgroup%2Ditem%3E%2Ebadge%2B%2Ebadge%7Bmargin%2Dright%3A5px%7D%2Enav%2Dpills%3Eli%3Ea%3E%2Ebadge%7Bmargin%2Dleft%3A3px%7D%2Ejumbotron%7Bpadding%2Dtop%3A30px%3Bpadding%2Dbottom%3A30px%3Bmargin%2Dbottom%3A30px%3Bcolor%3Ainherit%3Bbackground%2Dcolor%3A%23eee%7D%2Ejumbotron%20%2Eh1%2C%2Ejumbotron%20h1%7Bcolor%3Ainherit%7D%2Ejumbotron%20p%7Bmargin%2Dbottom%3A15px%3Bfont%2Dsize%3A21px%3Bfont%2Dweight%3A200%7D%2Ejumbotron%3Ehr%7Bborder%2Dtop%2Dcolor%3A%23d5d5d5%7D%2Econtainer%20%2Ejumbotron%2C%2Econtainer%2Dfluid%20%2Ejumbotron%7Bborder%2Dradius%3A6px%7D%2Ejumbotron%20%2Econtainer%7Bmax%2Dwidth%3A100%25%7D%40media%20screen%20and%20%28min%2Dwidth%3A768px%29%7B%2Ejumbotron%7Bpadding%2Dtop%3A48px%3Bpadding%2Dbottom%3A48px%7D%2Econtainer%20%2Ejumbotron%2C%2Econtainer%2Dfluid%20%2Ejumbotron%7Bpadding%2Dright%3A60px%3Bpadding%2Dleft%3A60px%7D%2Ejumbotron%20%2Eh1%2C%2Ejumbotron%20h1%7Bfont%2Dsize%3A63px%7D%7D%2Ethumbnail%7Bdisplay%3Ablock%3Bpadding%3A4px%3Bmargin%2Dbottom%3A20px%3Bline%2Dheight%3A1%2E42857143%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dtransition%3Aborder%20%2E2s%20ease%2Din%2Dout%3B%2Do%2Dtransition%3Aborder%20%2E2s%20ease%2Din%2Dout%3Btransition%3Aborder%20%2E2s%20ease%2Din%2Dout%7D%2Ethumbnail%20a%3Eimg%2C%2Ethumbnail%3Eimg%7Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7Da%2Ethumbnail%2Eactive%2Ca%2Ethumbnail%3Afocus%2Ca%2Ethumbnail%3Ahover%7Bborder%2Dcolor%3A%23337ab7%7D%2Ethumbnail%20%2Ecaption%7Bpadding%3A9px%3Bcolor%3A%23333%7D%2Ealert%7Bpadding%3A15px%3Bmargin%2Dbottom%3A20px%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%7D%2Ealert%20h4%7Bmargin%2Dtop%3A0%3Bcolor%3Ainherit%7D%2Ealert%20%2Ealert%2Dlink%7Bfont%2Dweight%3A700%7D%2Ealert%3Ep%2C%2Ealert%3Eul%7Bmargin%2Dbottom%3A0%7D%2Ealert%3Ep%2Bp%7Bmargin%2Dtop%3A5px%7D%2Ealert%2Ddismissable%2C%2Ealert%2Ddismissible%7Bpadding%2Dright%3A35px%7D%2Ealert%2Ddismissable%20%2Eclose%2C%2Ealert%2Ddismissible%20%2Eclose%7Bposition%3Arelative%3Btop%3A%2D2px%3Bright%3A%2D21px%3Bcolor%3Ainherit%7D%2Ealert%2Dsuccess%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%3Bborder%2Dcolor%3A%23d6e9c6%7D%2Ealert%2Dsuccess%20hr%7Bborder%2Dtop%2Dcolor%3A%23c9e2b3%7D%2Ealert%2Dsuccess%20%2Ealert%2Dlink%7Bcolor%3A%232b542c%7D%2Ealert%2Dinfo%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23d9edf7%3Bborder%2Dcolor%3A%23bce8f1%7D%2Ealert%2Dinfo%20hr%7Bborder%2Dtop%2Dcolor%3A%23a6e1ec%7D%2Ealert%2Dinfo%20%2Ealert%2Dlink%7Bcolor%3A%23245269%7D%2Ealert%2Dwarning%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%3Bborder%2Dcolor%3A%23faebcc%7D%2Ealert%2Dwarning%20hr%7Bborder%2Dtop%2Dcolor%3A%23f7e1b5%7D%2Ealert%2Dwarning%20%2Ealert%2Dlink%7Bcolor%3A%2366512c%7D%2Ealert%2Ddanger%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%3Bborder%2Dcolor%3A%23ebccd1%7D%2Ealert%2Ddanger%20hr%7Bborder%2Dtop%2Dcolor%3A%23e4b9c0%7D%2Ealert%2Ddanger%20%2Ealert%2Dlink%7Bcolor%3A%23843534%7D%40%2Dwebkit%2Dkeyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A40px%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%40%2Do%2Dkeyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A40px%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%40keyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A40px%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%2Eprogress%7Bheight%3A20px%3Bmargin%2Dbottom%3A20px%3Boverflow%3Ahidden%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%202px%20rgba%280%2C0%2C0%2C%2E1%29%3Bbox%2Dshadow%3Ainset%200%201px%202px%20rgba%280%2C0%2C0%2C%2E1%29%7D%2Eprogress%2Dbar%7Bfloat%3Aleft%3Bwidth%3A0%3Bheight%3A100%25%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A20px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23337ab7%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E15%29%3Bbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E15%29%3B%2Dwebkit%2Dtransition%3Awidth%20%2E6s%20ease%3B%2Do%2Dtransition%3Awidth%20%2E6s%20ease%3Btransition%3Awidth%20%2E6s%20ease%7D%2Eprogress%2Dbar%2Dstriped%2C%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3B%2Dwebkit%2Dbackground%2Dsize%3A40px%2040px%3Bbackground%2Dsize%3A40px%2040px%7D%2Eprogress%2Dbar%2Eactive%2C%2Eprogress%2Eactive%20%2Eprogress%2Dbar%7B%2Dwebkit%2Danimation%3Aprogress%2Dbar%2Dstripes%202s%20linear%20infinite%3B%2Do%2Danimation%3Aprogress%2Dbar%2Dstripes%202s%20linear%20infinite%3Banimation%3Aprogress%2Dbar%2Dstripes%202s%20linear%20infinite%7D%2Eprogress%2Dbar%2Dsuccess%7Bbackground%2Dcolor%3A%235cb85c%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Dsuccess%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Eprogress%2Dbar%2Dinfo%7Bbackground%2Dcolor%3A%235bc0de%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Dinfo%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Eprogress%2Dbar%2Dwarning%7Bbackground%2Dcolor%3A%23f0ad4e%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Dwarning%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Eprogress%2Dbar%2Ddanger%7Bbackground%2Dcolor%3A%23d9534f%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Ddanger%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Emedia%7Bmargin%2Dtop%3A15px%7D%2Emedia%3Afirst%2Dchild%7Bmargin%2Dtop%3A0%7D%2Emedia%2C%2Emedia%2Dbody%7Boverflow%3Ahidden%3Bzoom%3A1%7D%2Emedia%2Dbody%7Bwidth%3A10000px%7D%2Emedia%2Dobject%7Bdisplay%3Ablock%7D%2Emedia%2Dobject%2Eimg%2Dthumbnail%7Bmax%2Dwidth%3Anone%7D%2Emedia%2Dright%2C%2Emedia%3E%2Epull%2Dright%7Bpadding%2Dleft%3A10px%7D%2Emedia%2Dleft%2C%2Emedia%3E%2Epull%2Dleft%7Bpadding%2Dright%3A10px%7D%2Emedia%2Dbody%2C%2Emedia%2Dleft%2C%2Emedia%2Dright%7Bdisplay%3Atable%2Dcell%3Bvertical%2Dalign%3Atop%7D%2Emedia%2Dmiddle%7Bvertical%2Dalign%3Amiddle%7D%2Emedia%2Dbottom%7Bvertical%2Dalign%3Abottom%7D%2Emedia%2Dheading%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A5px%7D%2Emedia%2Dlist%7Bpadding%2Dleft%3A0%3Blist%2Dstyle%3Anone%7D%2Elist%2Dgroup%7Bpadding%2Dleft%3A0%3Bmargin%2Dbottom%3A20px%7D%2Elist%2Dgroup%2Ditem%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bpadding%3A10px%2015px%3Bmargin%2Dbottom%3A%2D1px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%7D%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A4px%3Bborder%2Dtop%2Dright%2Dradius%3A4px%7D%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dleft%2Dradius%3A4px%7Da%2Elist%2Dgroup%2Ditem%2Cbutton%2Elist%2Dgroup%2Ditem%7Bcolor%3A%23555%7Da%2Elist%2Dgroup%2Ditem%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3A%23333%7Da%2Elist%2Dgroup%2Ditem%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%3Ahover%7Bcolor%3A%23555%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23f5f5f5%7Dbutton%2Elist%2Dgroup%2Ditem%7Bwidth%3A100%25%3Btext%2Dalign%3Aleft%7D%2Elist%2Dgroup%2Ditem%2Edisabled%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Ahover%7Bcolor%3A%23777%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3A%23eee%7D%2Elist%2Dgroup%2Ditem%2Edisabled%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7D%2Elist%2Dgroup%2Ditem%2Edisabled%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dtext%7Bcolor%3A%23777%7D%2Elist%2Dgroup%2Ditem%2Eactive%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%7Bz%2Dindex%3A2%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%23337ab7%7D%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dheading%3E%2Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dheading%3Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%3E%2Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%3Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%3E%2Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%3Esmall%7Bcolor%3Ainherit%7D%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dtext%7Bcolor%3A%23c7ddef%7D%2Elist%2Dgroup%2Ditem%2Dsuccess%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%7Bcolor%3A%233c763d%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dsuccess%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%3Ahover%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23d0e9c6%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%233c763d%3Bborder%2Dcolor%3A%233c763d%7D%2Elist%2Dgroup%2Ditem%2Dinfo%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23d9edf7%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%7Bcolor%3A%2331708f%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dinfo%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%3Ahover%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23c4e3f3%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331708f%3Bborder%2Dcolor%3A%2331708f%7D%2Elist%2Dgroup%2Ditem%2Dwarning%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%7Bcolor%3A%238a6d3b%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dwarning%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%3Ahover%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23faf2cc%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%238a6d3b%3Bborder%2Dcolor%3A%238a6d3b%7D%2Elist%2Dgroup%2Ditem%2Ddanger%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%7Bcolor%3A%23a94442%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Ddanger%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%3Ahover%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23ebcccc%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23a94442%3Bborder%2Dcolor%3A%23a94442%7D%2Elist%2Dgroup%2Ditem%2Dheading%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A5px%7D%2Elist%2Dgroup%2Ditem%2Dtext%7Bmargin%2Dbottom%3A0%3Bline%2Dheight%3A1%2E3%7D%2Epanel%7Bmargin%2Dbottom%3A20px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3A0%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%3Bbox%2Dshadow%3A0%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%7D%2Epanel%2Dbody%7Bpadding%3A15px%7D%2Epanel%2Dheading%7Bpadding%3A10px%2015px%3Bborder%2Dbottom%3A1px%20solid%20transparent%3Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%2Dheading%3E%2Edropdown%20%2Edropdown%2Dtoggle%7Bcolor%3Ainherit%7D%2Epanel%2Dtitle%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A16px%3Bcolor%3Ainherit%7D%2Epanel%2Dtitle%3E%2Esmall%2C%2Epanel%2Dtitle%3E%2Esmall%3Ea%2C%2Epanel%2Dtitle%3Ea%2C%2Epanel%2Dtitle%3Esmall%2C%2Epanel%2Dtitle%3Esmall%3Ea%7Bcolor%3Ainherit%7D%2Epanel%2Dfooter%7Bpadding%3A10px%2015px%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dtop%3A1px%20solid%20%23ddd%3Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Elist%2Dgroup%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%7Bmargin%2Dbottom%3A0%7D%2Epanel%3E%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%7Bborder%2Dwidth%3A1px%200%3Bborder%2Dradius%3A0%7D%2Epanel%3E%2Elist%2Dgroup%3Afirst%2Dchild%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%3Afirst%2Dchild%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Elist%2Dgroup%3Alast%2Dchild%20%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%3Alast%2Dchild%20%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bborder%2Dbottom%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Epanel%2Dheading%2B%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%2Dwidth%3A0%7D%2Elist%2Dgroup%2B%2Epanel%2Dfooter%7Bborder%2Dtop%2Dwidth%3A0%7D%2Epanel%3E%2Epanel%2Dcollapse%3E%2Etable%2C%2Epanel%3E%2Etable%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%7Bmargin%2Dbottom%3A0%7D%2Epanel%3E%2Epanel%2Dcollapse%3E%2Etable%20caption%2C%2Epanel%3E%2Etable%20caption%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%20caption%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%7Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%7Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%7Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%7Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%7Bborder%2Dbottom%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Epanel%2Dbody%2B%2Etable%2C%2Epanel%3E%2Epanel%2Dbody%2B%2Etable%2Dresponsive%2C%2Epanel%3E%2Etable%2B%2Epanel%2Dbody%2C%2Epanel%3E%2Etable%2Dresponsive%2B%2Epanel%2Dbody%7Bborder%2Dtop%3A1px%20solid%20%23ddd%7D%2Epanel%3E%2Etable%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%2C%2Epanel%3E%2Etable%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%7Bborder%2Dtop%3A0%7D%2Epanel%3E%2Etable%2Dbordered%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%7Bborder%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Afirst%2Dchild%7Bborder%2Dleft%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Alast%2Dchild%7Bborder%2Dright%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Eth%7Bborder%2Dbottom%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Eth%7Bborder%2Dbottom%3A0%7D%2Epanel%3E%2Etable%2Dresponsive%7Bmargin%2Dbottom%3A0%3Bborder%3A0%7D%2Epanel%2Dgroup%7Bmargin%2Dbottom%3A20px%7D%2Epanel%2Dgroup%20%2Epanel%7Bmargin%2Dbottom%3A0%3Bborder%2Dradius%3A4px%7D%2Epanel%2Dgroup%20%2Epanel%2B%2Epanel%7Bmargin%2Dtop%3A5px%7D%2Epanel%2Dgroup%20%2Epanel%2Dheading%7Bborder%2Dbottom%3A0%7D%2Epanel%2Dgroup%20%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%2C%2Epanel%2Dgroup%20%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%3A1px%20solid%20%23ddd%7D%2Epanel%2Dgroup%20%2Epanel%2Dfooter%7Bborder%2Dtop%3A0%7D%2Epanel%2Dgroup%20%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%20%2Epanel%2Dbody%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%7D%2Epanel%2Ddefault%7Bborder%2Dcolor%3A%23ddd%7D%2Epanel%2Ddefault%3E%2Epanel%2Dheading%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dcolor%3A%23ddd%7D%2Epanel%2Ddefault%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23ddd%7D%2Epanel%2Ddefault%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23f5f5f5%3Bbackground%2Dcolor%3A%23333%7D%2Epanel%2Ddefault%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23ddd%7D%2Epanel%2Dprimary%7Bborder%2Dcolor%3A%23337ab7%7D%2Epanel%2Dprimary%3E%2Epanel%2Dheading%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%23337ab7%7D%2Epanel%2Dprimary%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23337ab7%7D%2Epanel%2Dprimary%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23337ab7%3Bbackground%2Dcolor%3A%23fff%7D%2Epanel%2Dprimary%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23337ab7%7D%2Epanel%2Dsuccess%7Bborder%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dheading%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%3Bborder%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23dff0d8%3Bbackground%2Dcolor%3A%233c763d%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dinfo%7Bborder%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dinfo%3E%2Epanel%2Dheading%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23d9edf7%3Bborder%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dinfo%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dinfo%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23d9edf7%3Bbackground%2Dcolor%3A%2331708f%7D%2Epanel%2Dinfo%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dwarning%7Bborder%2Dcolor%3A%23faebcc%7D%2Epanel%2Dwarning%3E%2Epanel%2Dheading%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%3Bborder%2Dcolor%3A%23faebcc%7D%2Epanel%2Dwarning%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23faebcc%7D%2Epanel%2Dwarning%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23fcf8e3%3Bbackground%2Dcolor%3A%238a6d3b%7D%2Epanel%2Dwarning%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23faebcc%7D%2Epanel%2Ddanger%7Bborder%2Dcolor%3A%23ebccd1%7D%2Epanel%2Ddanger%3E%2Epanel%2Dheading%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%3Bborder%2Dcolor%3A%23ebccd1%7D%2Epanel%2Ddanger%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23ebccd1%7D%2Epanel%2Ddanger%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23f2dede%3Bbackground%2Dcolor%3A%23a94442%7D%2Epanel%2Ddanger%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23ebccd1%7D%2Eembed%2Dresponsive%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bheight%3A0%3Bpadding%3A0%3Boverflow%3Ahidden%7D%2Eembed%2Dresponsive%20%2Eembed%2Dresponsive%2Ditem%2C%2Eembed%2Dresponsive%20embed%2C%2Eembed%2Dresponsive%20iframe%2C%2Eembed%2Dresponsive%20object%2C%2Eembed%2Dresponsive%20video%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bleft%3A0%3Bwidth%3A100%25%3Bheight%3A100%25%3Bborder%3A0%7D%2Eembed%2Dresponsive%2D16by9%7Bpadding%2Dbottom%3A56%2E25%25%7D%2Eembed%2Dresponsive%2D4by3%7Bpadding%2Dbottom%3A75%25%7D%2Ewell%7Bmin%2Dheight%3A20px%3Bpadding%3A19px%3Bmargin%2Dbottom%3A20px%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%3A1px%20solid%20%23e3e3e3%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%7D%2Ewell%20blockquote%7Bborder%2Dcolor%3A%23ddd%3Bborder%2Dcolor%3Argba%280%2C0%2C0%2C%2E15%29%7D%2Ewell%2Dlg%7Bpadding%3A24px%3Bborder%2Dradius%3A6px%7D%2Ewell%2Dsm%7Bpadding%3A9px%3Bborder%2Dradius%3A3px%7D%2Eclose%7Bfloat%3Aright%3Bfont%2Dsize%3A21px%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Bcolor%3A%23000%3Btext%2Dshadow%3A0%201px%200%20%23fff%3Bfilter%3Aalpha%28opacity%3D20%29%3Bopacity%3A%2E2%7D%2Eclose%3Afocus%2C%2Eclose%3Ahover%7Bcolor%3A%23000%3Btext%2Ddecoration%3Anone%3Bcursor%3Apointer%3Bfilter%3Aalpha%28opacity%3D50%29%3Bopacity%3A%2E5%7Dbutton%2Eclose%7B%2Dwebkit%2Dappearance%3Anone%3Bpadding%3A0%3Bcursor%3Apointer%3Bbackground%3A0%200%3Bborder%3A0%7D%2Emodal%2Dopen%7Boverflow%3Ahidden%7D%2Emodal%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A1050%3Bdisplay%3Anone%3Boverflow%3Ahidden%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%3Boutline%3A0%7D%2Emodal%2Efade%20%2Emodal%2Ddialog%7B%2Dwebkit%2Dtransition%3A%2Dwebkit%2Dtransform%20%2E3s%20ease%2Dout%3B%2Do%2Dtransition%3A%2Do%2Dtransform%20%2E3s%20ease%2Dout%3Btransition%3Atransform%20%2E3s%20ease%2Dout%3B%2Dwebkit%2Dtransform%3Atranslate%280%2C%2D25%25%29%3B%2Dms%2Dtransform%3Atranslate%280%2C%2D25%25%29%3B%2Do%2Dtransform%3Atranslate%280%2C%2D25%25%29%3Btransform%3Atranslate%280%2C%2D25%25%29%7D%2Emodal%2Ein%20%2Emodal%2Ddialog%7B%2Dwebkit%2Dtransform%3Atranslate%280%2C0%29%3B%2Dms%2Dtransform%3Atranslate%280%2C0%29%3B%2Do%2Dtransform%3Atranslate%280%2C0%29%3Btransform%3Atranslate%280%2C0%29%7D%2Emodal%2Dopen%20%2Emodal%7Boverflow%2Dx%3Ahidden%3Boverflow%2Dy%3Aauto%7D%2Emodal%2Ddialog%7Bposition%3Arelative%3Bwidth%3Aauto%3Bmargin%3A10px%7D%2Emodal%2Dcontent%7Bposition%3Arelative%3Bbackground%2Dcolor%3A%23fff%3B%2Dwebkit%2Dbackground%2Dclip%3Apadding%2Dbox%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20%23999%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E2%29%3Bborder%2Dradius%3A6px%3Boutline%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3A0%203px%209px%20rgba%280%2C0%2C0%2C%2E5%29%3Bbox%2Dshadow%3A0%203px%209px%20rgba%280%2C0%2C0%2C%2E5%29%7D%2Emodal%2Dbackdrop%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A1040%3Bbackground%2Dcolor%3A%23000%7D%2Emodal%2Dbackdrop%2Efade%7Bfilter%3Aalpha%28opacity%3D0%29%3Bopacity%3A0%7D%2Emodal%2Dbackdrop%2Ein%7Bfilter%3Aalpha%28opacity%3D50%29%3Bopacity%3A%2E5%7D%2Emodal%2Dheader%7Bmin%2Dheight%3A16%2E43px%3Bpadding%3A15px%3Bborder%2Dbottom%3A1px%20solid%20%23e5e5e5%7D%2Emodal%2Dheader%20%2Eclose%7Bmargin%2Dtop%3A%2D2px%7D%2Emodal%2Dtitle%7Bmargin%3A0%3Bline%2Dheight%3A1%2E42857143%7D%2Emodal%2Dbody%7Bposition%3Arelative%3Bpadding%3A15px%7D%2Emodal%2Dfooter%7Bpadding%3A15px%3Btext%2Dalign%3Aright%3Bborder%2Dtop%3A1px%20solid%20%23e5e5e5%7D%2Emodal%2Dfooter%20%2Ebtn%2B%2Ebtn%7Bmargin%2Dbottom%3A0%3Bmargin%2Dleft%3A5px%7D%2Emodal%2Dfooter%20%2Ebtn%2Dgroup%20%2Ebtn%2B%2Ebtn%7Bmargin%2Dleft%3A%2D1px%7D%2Emodal%2Dfooter%20%2Ebtn%2Dblock%2B%2Ebtn%2Dblock%7Bmargin%2Dleft%3A0%7D%2Emodal%2Dscrollbar%2Dmeasure%7Bposition%3Aabsolute%3Btop%3A%2D9999px%3Bwidth%3A50px%3Bheight%3A50px%3Boverflow%3Ascroll%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Emodal%2Ddialog%7Bwidth%3A600px%3Bmargin%3A30px%20auto%7D%2Emodal%2Dcontent%7B%2Dwebkit%2Dbox%2Dshadow%3A0%205px%2015px%20rgba%280%2C0%2C0%2C%2E5%29%3Bbox%2Dshadow%3A0%205px%2015px%20rgba%280%2C0%2C0%2C%2E5%29%7D%2Emodal%2Dsm%7Bwidth%3A300px%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Emodal%2Dlg%7Bwidth%3A900px%7D%7D%2Etooltip%7Bposition%3Aabsolute%3Bz%2Dindex%3A1070%3Bdisplay%3Ablock%3Bfont%2Dfamily%3A%22Helvetica%20Neue%22%2CHelvetica%2CArial%2Csans%2Dserif%3Bfont%2Dsize%3A12px%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Btext%2Dalign%3Aleft%3Btext%2Dalign%3Astart%3Btext%2Ddecoration%3Anone%3Btext%2Dshadow%3Anone%3Btext%2Dtransform%3Anone%3Bletter%2Dspacing%3Anormal%3Bword%2Dbreak%3Anormal%3Bword%2Dspacing%3Anormal%3Bword%2Dwrap%3Anormal%3Bwhite%2Dspace%3Anormal%3Bfilter%3Aalpha%28opacity%3D0%29%3Bopacity%3A0%3Bline%2Dbreak%3Aauto%7D%2Etooltip%2Ein%7Bfilter%3Aalpha%28opacity%3D90%29%3Bopacity%3A%2E9%7D%2Etooltip%2Etop%7Bpadding%3A5px%200%3Bmargin%2Dtop%3A%2D3px%7D%2Etooltip%2Eright%7Bpadding%3A0%205px%3Bmargin%2Dleft%3A3px%7D%2Etooltip%2Ebottom%7Bpadding%3A5px%200%3Bmargin%2Dtop%3A3px%7D%2Etooltip%2Eleft%7Bpadding%3A0%205px%3Bmargin%2Dleft%3A%2D3px%7D%2Etooltip%2Dinner%7Bmax%2Dwidth%3A200px%3Bpadding%3A3px%208px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23000%3Bborder%2Dradius%3A4px%7D%2Etooltip%2Darrow%7Bposition%3Aabsolute%3Bwidth%3A0%3Bheight%3A0%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dstyle%3Asolid%7D%2Etooltip%2Etop%20%2Etooltip%2Darrow%7Bbottom%3A0%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dtop%2Dcolor%3A%23000%7D%2Etooltip%2Etop%2Dleft%20%2Etooltip%2Darrow%7Bright%3A5px%3Bbottom%3A0%3Bmargin%2Dbottom%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dtop%2Dcolor%3A%23000%7D%2Etooltip%2Etop%2Dright%20%2Etooltip%2Darrow%7Bbottom%3A0%3Bleft%3A5px%3Bmargin%2Dbottom%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dtop%2Dcolor%3A%23000%7D%2Etooltip%2Eright%20%2Etooltip%2Darrow%7Btop%3A50%25%3Bleft%3A0%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%205px%200%3Bborder%2Dright%2Dcolor%3A%23000%7D%2Etooltip%2Eleft%20%2Etooltip%2Darrow%7Btop%3A50%25%3Bright%3A0%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A5px%200%205px%205px%3Bborder%2Dleft%2Dcolor%3A%23000%7D%2Etooltip%2Ebottom%20%2Etooltip%2Darrow%7Btop%3A0%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D5px%3Bborder%2Dwidth%3A0%205px%205px%3Bborder%2Dbottom%2Dcolor%3A%23000%7D%2Etooltip%2Ebottom%2Dleft%20%2Etooltip%2Darrow%7Btop%3A0%3Bright%3A5px%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A0%205px%205px%3Bborder%2Dbottom%2Dcolor%3A%23000%7D%2Etooltip%2Ebottom%2Dright%20%2Etooltip%2Darrow%7Btop%3A0%3Bleft%3A5px%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A0%205px%205px%3Bborder%2Dbottom%2Dcolor%3A%23000%7D%2Epopover%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bz%2Dindex%3A1060%3Bdisplay%3Anone%3Bmax%2Dwidth%3A276px%3Bpadding%3A1px%3Bfont%2Dfamily%3A%22Helvetica%20Neue%22%2CHelvetica%2CArial%2Csans%2Dserif%3Bfont%2Dsize%3A14px%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Btext%2Dalign%3Aleft%3Btext%2Dalign%3Astart%3Btext%2Ddecoration%3Anone%3Btext%2Dshadow%3Anone%3Btext%2Dtransform%3Anone%3Bletter%2Dspacing%3Anormal%3Bword%2Dbreak%3Anormal%3Bword%2Dspacing%3Anormal%3Bword%2Dwrap%3Anormal%3Bwhite%2Dspace%3Anormal%3Bbackground%2Dcolor%3A%23fff%3B%2Dwebkit%2Dbackground%2Dclip%3Apadding%2Dbox%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20%23ccc%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E2%29%3Bborder%2Dradius%3A6px%3B%2Dwebkit%2Dbox%2Dshadow%3A0%205px%2010px%20rgba%280%2C0%2C0%2C%2E2%29%3Bbox%2Dshadow%3A0%205px%2010px%20rgba%280%2C0%2C0%2C%2E2%29%3Bline%2Dbreak%3Aauto%7D%2Epopover%2Etop%7Bmargin%2Dtop%3A%2D10px%7D%2Epopover%2Eright%7Bmargin%2Dleft%3A10px%7D%2Epopover%2Ebottom%7Bmargin%2Dtop%3A10px%7D%2Epopover%2Eleft%7Bmargin%2Dleft%3A%2D10px%7D%2Epopover%2Dtitle%7Bpadding%3A8px%2014px%3Bmargin%3A0%3Bfont%2Dsize%3A14px%3Bbackground%2Dcolor%3A%23f7f7f7%3Bborder%2Dbottom%3A1px%20solid%20%23ebebeb%3Bborder%2Dradius%3A5px%205px%200%200%7D%2Epopover%2Dcontent%7Bpadding%3A9px%2014px%7D%2Epopover%3E%2Earrow%2C%2Epopover%3E%2Earrow%3Aafter%7Bposition%3Aabsolute%3Bdisplay%3Ablock%3Bwidth%3A0%3Bheight%3A0%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dstyle%3Asolid%7D%2Epopover%3E%2Earrow%7Bborder%2Dwidth%3A11px%7D%2Epopover%3E%2Earrow%3Aafter%7Bcontent%3A%22%22%3Bborder%2Dwidth%3A10px%7D%2Epopover%2Etop%3E%2Earrow%7Bbottom%3A%2D11px%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D11px%3Bborder%2Dtop%2Dcolor%3A%23999%3Bborder%2Dtop%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Epopover%2Etop%3E%2Earrow%3Aafter%7Bbottom%3A1px%3Bmargin%2Dleft%3A%2D10px%3Bcontent%3A%22%20%22%3Bborder%2Dtop%2Dcolor%3A%23fff%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Epopover%2Eright%3E%2Earrow%7Btop%3A50%25%3Bleft%3A%2D11px%3Bmargin%2Dtop%3A%2D11px%3Bborder%2Dright%2Dcolor%3A%23999%3Bborder%2Dright%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%3Bborder%2Dleft%2Dwidth%3A0%7D%2Epopover%2Eright%3E%2Earrow%3Aafter%7Bbottom%3A%2D10px%3Bleft%3A1px%3Bcontent%3A%22%20%22%3Bborder%2Dright%2Dcolor%3A%23fff%3Bborder%2Dleft%2Dwidth%3A0%7D%2Epopover%2Ebottom%3E%2Earrow%7Btop%3A%2D11px%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D11px%3Bborder%2Dtop%2Dwidth%3A0%3Bborder%2Dbottom%2Dcolor%3A%23999%3Bborder%2Dbottom%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Epopover%2Ebottom%3E%2Earrow%3Aafter%7Btop%3A1px%3Bmargin%2Dleft%3A%2D10px%3Bcontent%3A%22%20%22%3Bborder%2Dtop%2Dwidth%3A0%3Bborder%2Dbottom%2Dcolor%3A%23fff%7D%2Epopover%2Eleft%3E%2Earrow%7Btop%3A50%25%3Bright%3A%2D11px%3Bmargin%2Dtop%3A%2D11px%3Bborder%2Dright%2Dwidth%3A0%3Bborder%2Dleft%2Dcolor%3A%23999%3Bborder%2Dleft%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Epopover%2Eleft%3E%2Earrow%3Aafter%7Bright%3A1px%3Bbottom%3A%2D10px%3Bcontent%3A%22%20%22%3Bborder%2Dright%2Dwidth%3A0%3Bborder%2Dleft%2Dcolor%3A%23fff%7D%2Ecarousel%7Bposition%3Arelative%7D%2Ecarousel%2Dinner%7Bposition%3Arelative%3Bwidth%3A100%25%3Boverflow%3Ahidden%7D%2Ecarousel%2Dinner%3E%2Eitem%7Bposition%3Arelative%3Bdisplay%3Anone%3B%2Dwebkit%2Dtransition%3A%2E6s%20ease%2Din%2Dout%20left%3B%2Do%2Dtransition%3A%2E6s%20ease%2Din%2Dout%20left%3Btransition%3A%2E6s%20ease%2Din%2Dout%20left%7D%2Ecarousel%2Dinner%3E%2Eitem%3Ea%3Eimg%2C%2Ecarousel%2Dinner%3E%2Eitem%3Eimg%7Bline%2Dheight%3A1%7D%40media%20all%20and%20%28transform%2D3d%29%2C%28%2Dwebkit%2Dtransform%2D3d%29%7B%2Ecarousel%2Dinner%3E%2Eitem%7B%2Dwebkit%2Dtransition%3A%2Dwebkit%2Dtransform%20%2E6s%20ease%2Din%2Dout%3B%2Do%2Dtransition%3A%2Do%2Dtransform%20%2E6s%20ease%2Din%2Dout%3Btransition%3Atransform%20%2E6s%20ease%2Din%2Dout%3B%2Dwebkit%2Dbackface%2Dvisibility%3Ahidden%3Bbackface%2Dvisibility%3Ahidden%3B%2Dwebkit%2Dperspective%3A1000px%3Bperspective%3A1000px%7D%2Ecarousel%2Dinner%3E%2Eitem%2Eactive%2Eright%2C%2Ecarousel%2Dinner%3E%2Eitem%2Enext%7Bleft%3A0%3B%2Dwebkit%2Dtransform%3Atranslate3d%28100%25%2C0%2C0%29%3Btransform%3Atranslate3d%28100%25%2C0%2C0%29%7D%2Ecarousel%2Dinner%3E%2Eitem%2Eactive%2Eleft%2C%2Ecarousel%2Dinner%3E%2Eitem%2Eprev%7Bleft%3A0%3B%2Dwebkit%2Dtransform%3Atranslate3d%28%2D100%25%2C0%2C0%29%3Btransform%3Atranslate3d%28%2D100%25%2C0%2C0%29%7D%2Ecarousel%2Dinner%3E%2Eitem%2Eactive%2C%2Ecarousel%2Dinner%3E%2Eitem%2Enext%2Eleft%2C%2Ecarousel%2Dinner%3E%2Eitem%2Eprev%2Eright%7Bleft%3A0%3B%2Dwebkit%2Dtransform%3Atranslate3d%280%2C0%2C0%29%3Btransform%3Atranslate3d%280%2C0%2C0%29%7D%7D%2Ecarousel%2Dinner%3E%2Eactive%2C%2Ecarousel%2Dinner%3E%2Enext%2C%2Ecarousel%2Dinner%3E%2Eprev%7Bdisplay%3Ablock%7D%2Ecarousel%2Dinner%3E%2Eactive%7Bleft%3A0%7D%2Ecarousel%2Dinner%3E%2Enext%2C%2Ecarousel%2Dinner%3E%2Eprev%7Bposition%3Aabsolute%3Btop%3A0%3Bwidth%3A100%25%7D%2Ecarousel%2Dinner%3E%2Enext%7Bleft%3A100%25%7D%2Ecarousel%2Dinner%3E%2Eprev%7Bleft%3A%2D100%25%7D%2Ecarousel%2Dinner%3E%2Enext%2Eleft%2C%2Ecarousel%2Dinner%3E%2Eprev%2Eright%7Bleft%3A0%7D%2Ecarousel%2Dinner%3E%2Eactive%2Eleft%7Bleft%3A%2D100%25%7D%2Ecarousel%2Dinner%3E%2Eactive%2Eright%7Bleft%3A100%25%7D%2Ecarousel%2Dcontrol%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bleft%3A0%3Bwidth%3A15%25%3Bfont%2Dsize%3A20px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Btext%2Dshadow%3A0%201px%202px%20rgba%280%2C0%2C0%2C%2E6%29%3Bfilter%3Aalpha%28opacity%3D50%29%3Bopacity%3A%2E5%7D%2Ecarousel%2Dcontrol%2Eleft%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E5%29%200%2Crgba%280%2C0%2C0%2C%2E0001%29%20100%25%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E5%29%200%2Crgba%280%2C0%2C0%2C%2E0001%29%20100%25%29%3Bbackground%2Dimage%3A%2Dwebkit%2Dgradient%28linear%2Cleft%20top%2Cright%20top%2Cfrom%28rgba%280%2C0%2C0%2C%2E5%29%29%2Cto%28rgba%280%2C0%2C0%2C%2E0001%29%29%29%3Bbackground%2Dimage%3Alinear%2Dgradient%28to%20right%2Crgba%280%2C0%2C0%2C%2E5%29%200%2Crgba%280%2C0%2C0%2C%2E0001%29%20100%25%29%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28startColorstr%3D%27%2380000000%27%2C%20endColorstr%3D%27%2300000000%27%2C%20GradientType%3D1%29%3Bbackground%2Drepeat%3Arepeat%2Dx%7D%2Ecarousel%2Dcontrol%2Eright%7Bright%3A0%3Bleft%3Aauto%3Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E0001%29%200%2Crgba%280%2C0%2C0%2C%2E5%29%20100%25%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E0001%29%200%2Crgba%280%2C0%2C0%2C%2E5%29%20100%25%29%3Bbackground%2Dimage%3A%2Dwebkit%2Dgradient%28linear%2Cleft%20top%2Cright%20top%2Cfrom%28rgba%280%2C0%2C0%2C%2E0001%29%29%2Cto%28rgba%280%2C0%2C0%2C%2E5%29%29%29%3Bbackground%2Dimage%3Alinear%2Dgradient%28to%20right%2Crgba%280%2C0%2C0%2C%2E0001%29%200%2Crgba%280%2C0%2C0%2C%2E5%29%20100%25%29%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28startColorstr%3D%27%2300000000%27%2C%20endColorstr%3D%27%2380000000%27%2C%20GradientType%3D1%29%3Bbackground%2Drepeat%3Arepeat%2Dx%7D%2Ecarousel%2Dcontrol%3Afocus%2C%2Ecarousel%2Dcontrol%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bfilter%3Aalpha%28opacity%3D90%29%3Boutline%3A0%3Bopacity%3A%2E9%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bposition%3Aabsolute%3Btop%3A50%25%3Bz%2Dindex%3A5%3Bdisplay%3Ainline%2Dblock%3Bmargin%2Dtop%3A%2D10px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bleft%3A50%25%3Bmargin%2Dleft%3A%2D10px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%7Bright%3A50%25%3Bmargin%2Dright%3A%2D10px%7D%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bwidth%3A20px%3Bheight%3A20px%3Bfont%2Dfamily%3Aserif%3Bline%2Dheight%3A1%7D%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%3Abefore%7Bcontent%3A%27%5C2039%27%7D%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%3Abefore%7Bcontent%3A%27%5C203a%27%7D%2Ecarousel%2Dindicators%7Bposition%3Aabsolute%3Bbottom%3A10px%3Bleft%3A50%25%3Bz%2Dindex%3A15%3Bwidth%3A60%25%3Bpadding%2Dleft%3A0%3Bmargin%2Dleft%3A%2D30%25%3Btext%2Dalign%3Acenter%3Blist%2Dstyle%3Anone%7D%2Ecarousel%2Dindicators%20li%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A10px%3Bheight%3A10px%3Bmargin%3A1px%3Btext%2Dindent%3A%2D999px%3Bcursor%3Apointer%3Bbackground%2Dcolor%3A%23000%5C9%3Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C0%29%3Bborder%3A1px%20solid%20%23fff%3Bborder%2Dradius%3A10px%7D%2Ecarousel%2Dindicators%20%2Eactive%7Bwidth%3A12px%3Bheight%3A12px%3Bmargin%3A0%3Bbackground%2Dcolor%3A%23fff%7D%2Ecarousel%2Dcaption%7Bposition%3Aabsolute%3Bright%3A15%25%3Bbottom%3A20px%3Bleft%3A15%25%3Bz%2Dindex%3A10%3Bpadding%2Dtop%3A20px%3Bpadding%2Dbottom%3A20px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Btext%2Dshadow%3A0%201px%202px%20rgba%280%2C0%2C0%2C%2E6%29%7D%2Ecarousel%2Dcaption%20%2Ebtn%7Btext%2Dshadow%3Anone%7D%40media%20screen%20and%20%28min%2Dwidth%3A768px%29%7B%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bwidth%3A30px%3Bheight%3A30px%3Bmargin%2Dtop%3A%2D15px%3Bfont%2Dsize%3A30px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bmargin%2Dleft%3A%2D15px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%7Bmargin%2Dright%3A%2D15px%7D%2Ecarousel%2Dcaption%7Bright%3A20%25%3Bleft%3A20%25%3Bpadding%2Dbottom%3A30px%7D%2Ecarousel%2Dindicators%7Bbottom%3A20px%7D%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Aafter%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Abefore%2C%2Ebtn%2Dtoolbar%3Aafter%2C%2Ebtn%2Dtoolbar%3Abefore%2C%2Eclearfix%3Aafter%2C%2Eclearfix%3Abefore%2C%2Econtainer%2Dfluid%3Aafter%2C%2Econtainer%2Dfluid%3Abefore%2C%2Econtainer%3Aafter%2C%2Econtainer%3Abefore%2C%2Edl%2Dhorizontal%20dd%3Aafter%2C%2Edl%2Dhorizontal%20dd%3Abefore%2C%2Eform%2Dhorizontal%20%2Eform%2Dgroup%3Aafter%2C%2Eform%2Dhorizontal%20%2Eform%2Dgroup%3Abefore%2C%2Emodal%2Dfooter%3Aafter%2C%2Emodal%2Dfooter%3Abefore%2C%2Enav%3Aafter%2C%2Enav%3Abefore%2C%2Enavbar%2Dcollapse%3Aafter%2C%2Enavbar%2Dcollapse%3Abefore%2C%2Enavbar%2Dheader%3Aafter%2C%2Enavbar%2Dheader%3Abefore%2C%2Enavbar%3Aafter%2C%2Enavbar%3Abefore%2C%2Epager%3Aafter%2C%2Epager%3Abefore%2C%2Epanel%2Dbody%3Aafter%2C%2Epanel%2Dbody%3Abefore%2C%2Erow%3Aafter%2C%2Erow%3Abefore%7Bdisplay%3Atable%3Bcontent%3A%22%20%22%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Aafter%2C%2Ebtn%2Dtoolbar%3Aafter%2C%2Eclearfix%3Aafter%2C%2Econtainer%2Dfluid%3Aafter%2C%2Econtainer%3Aafter%2C%2Edl%2Dhorizontal%20dd%3Aafter%2C%2Eform%2Dhorizontal%20%2Eform%2Dgroup%3Aafter%2C%2Emodal%2Dfooter%3Aafter%2C%2Enav%3Aafter%2C%2Enavbar%2Dcollapse%3Aafter%2C%2Enavbar%2Dheader%3Aafter%2C%2Enavbar%3Aafter%2C%2Epager%3Aafter%2C%2Epanel%2Dbody%3Aafter%2C%2Erow%3Aafter%7Bclear%3Aboth%7D%2Ecenter%2Dblock%7Bdisplay%3Ablock%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%2Epull%2Dright%7Bfloat%3Aright%21important%7D%2Epull%2Dleft%7Bfloat%3Aleft%21important%7D%2Ehide%7Bdisplay%3Anone%21important%7D%2Eshow%7Bdisplay%3Ablock%21important%7D%2Einvisible%7Bvisibility%3Ahidden%7D%2Etext%2Dhide%7Bfont%3A0%2F0%20a%3Bcolor%3Atransparent%3Btext%2Dshadow%3Anone%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%7D%2Ehidden%7Bdisplay%3Anone%21important%7D%2Eaffix%7Bposition%3Afixed%7D%40%2Dms%2Dviewport%7Bwidth%3Adevice%2Dwidth%7D%2Evisible%2Dlg%2C%2Evisible%2Dmd%2C%2Evisible%2Dsm%2C%2Evisible%2Dxs%7Bdisplay%3Anone%21important%7D%2Evisible%2Dlg%2Dblock%2C%2Evisible%2Dlg%2Dinline%2C%2Evisible%2Dlg%2Dinline%2Dblock%2C%2Evisible%2Dmd%2Dblock%2C%2Evisible%2Dmd%2Dinline%2C%2Evisible%2Dmd%2Dinline%2Dblock%2C%2Evisible%2Dsm%2Dblock%2C%2Evisible%2Dsm%2Dinline%2C%2Evisible%2Dsm%2Dinline%2Dblock%2C%2Evisible%2Dxs%2Dblock%2C%2Evisible%2Dxs%2Dinline%2C%2Evisible%2Dxs%2Dinline%2Dblock%7Bdisplay%3Anone%21important%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dxs%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dxs%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dxs%2Cth%2Evisible%2Dxs%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dsm%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dsm%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dsm%2Cth%2Evisible%2Dsm%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dmd%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dmd%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dmd%2Cth%2Evisible%2Dmd%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dlg%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dlg%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dlg%2Cth%2Evisible%2Dlg%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Ehidden%2Dxs%7Bdisplay%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Ehidden%2Dsm%7Bdisplay%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Ehidden%2Dmd%7Bdisplay%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Ehidden%2Dlg%7Bdisplay%3Anone%21important%7D%7D%2Evisible%2Dprint%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dprint%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dprint%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dprint%2Cth%2Evisible%2Dprint%7Bdisplay%3Atable%2Dcell%21important%7D%7D%2Evisible%2Dprint%2Dblock%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%2Evisible%2Dprint%2Dinline%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%2Evisible%2Dprint%2Dinline%2Dblock%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20print%7B%2Ehidden%2Dprint%7Bdisplay%3Anone%21important%7D%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,LyohCiAqIEJvb3RzdHJhcCB2My4zLjUgKGh0dHA6Ly9nZXRib290c3RyYXAuY29tKQogKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy4KICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqLwppZigidW5kZWZpbmVkIj09dHlwZW9mIGpRdWVyeSl0aHJvdyBuZXcgRXJyb3IoIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5Iik7K2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1hLmZuLmpxdWVyeS5zcGxpdCgiICIpWzBdLnNwbGl0KCIuIik7aWYoYlswXTwyJiZiWzFdPDl8fDE9PWJbMF0mJjk9PWJbMV0mJmJbMl08MSl0aHJvdyBuZXcgRXJyb3IoIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5IHZlcnNpb24gMS45LjEgb3IgaGlnaGVyIil9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYm9vdHN0cmFwIiksYj17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn07Zm9yKHZhciBjIGluIGIpaWYodm9pZCAwIT09YS5zdHlsZVtjXSlyZXR1cm57ZW5kOmJbY119O3JldHVybiExfWEuZm4uZW11bGF0ZVRyYW5zaXRpb25FbmQ9ZnVuY3Rpb24oYil7dmFyIGM9ITEsZD10aGlzO2EodGhpcykub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKCl7Yz0hMH0pO3ZhciBlPWZ1bmN0aW9uKCl7Y3x8YShkKS50cmlnZ2VyKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCl9O3JldHVybiBzZXRUaW1lb3V0KGUsYiksdGhpc30sYShmdW5jdGlvbigpe2Euc3VwcG9ydC50cmFuc2l0aW9uPWIoKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGEuZXZlbnQuc3BlY2lhbC5ic1RyYW5zaXRpb25FbmQ9e2JpbmRUeXBlOmEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxkZWxlZ2F0ZVR5cGU6YS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGhhbmRsZTpmdW5jdGlvbihiKXtyZXR1cm4gYShiLnRhcmdldCkuaXModGhpcyk/Yi5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGU9Yy5kYXRhKCJicy5hbGVydCIpO2V8fGMuZGF0YSgiYnMuYWxlcnQiLGU9bmV3IGQodGhpcykpLCJzdHJpbmciPT10eXBlb2YgYiYmZVtiXS5jYWxsKGMpfSl9dmFyIGM9J1tkYXRhLWRpc21pc3M9ImFsZXJ0Il0nLGQ9ZnVuY3Rpb24oYil7YShiKS5vbigiY2xpY2siLGMsdGhpcy5jbG9zZSl9O2QuVkVSU0lPTj0iMy4zLjUiLGQuVFJBTlNJVElPTl9EVVJBVElPTj0xNTAsZC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYygpe2cuZGV0YWNoKCkudHJpZ2dlcigiY2xvc2VkLmJzLmFsZXJ0IikucmVtb3ZlKCl9dmFyIGU9YSh0aGlzKSxmPWUuYXR0cigiZGF0YS10YXJnZXQiKTtmfHwoZj1lLmF0dHIoImhyZWYiKSxmPWYmJmYucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSk7dmFyIGc9YShmKTtiJiZiLnByZXZlbnREZWZhdWx0KCksZy5sZW5ndGh8fChnPWUuY2xvc2VzdCgiLmFsZXJ0IikpLGcudHJpZ2dlcihiPWEuRXZlbnQoImNsb3NlLmJzLmFsZXJ0IikpLGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fChnLnJlbW92ZUNsYXNzKCJpbiIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZnLmhhc0NsYXNzKCJmYWRlIik/Zy5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYykuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKTpjKCkpfTt2YXIgZT1hLmZuLmFsZXJ0O2EuZm4uYWxlcnQ9YixhLmZuLmFsZXJ0LkNvbnN0cnVjdG9yPWQsYS5mbi5hbGVydC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYWxlcnQ9ZSx0aGlzfSxhKGRvY3VtZW50KS5vbigiY2xpY2suYnMuYWxlcnQuZGF0YS1hcGkiLGMsZC5wcm90b3R5cGUuY2xvc2UpfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMuYnV0dG9uIiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKCJicy5idXR0b24iLGU9bmV3IGModGhpcyxmKSksInRvZ2dsZSI9PWI/ZS50b2dnbGUoKTpiJiZlLnNldFN0YXRlKGIpfSl9dmFyIGM9ZnVuY3Rpb24oYixkKXt0aGlzLiRlbGVtZW50PWEoYiksdGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZCksdGhpcy5pc0xvYWRpbmc9ITF9O2MuVkVSU0lPTj0iMy4zLjUiLGMuREVGQVVMVFM9e2xvYWRpbmdUZXh0OiJsb2FkaW5nLi4uIn0sYy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oYil7dmFyIGM9ImRpc2FibGVkIixkPXRoaXMuJGVsZW1lbnQsZT1kLmlzKCJpbnB1dCIpPyJ2YWwiOiJodG1sIixmPWQuZGF0YSgpO2IrPSJUZXh0IixudWxsPT1mLnJlc2V0VGV4dCYmZC5kYXRhKCJyZXNldFRleHQiLGRbZV0oKSksc2V0VGltZW91dChhLnByb3h5KGZ1bmN0aW9uKCl7ZFtlXShudWxsPT1mW2JdP3RoaXMub3B0aW9uc1tiXTpmW2JdKSwibG9hZGluZ1RleHQiPT1iPyh0aGlzLmlzTG9hZGluZz0hMCxkLmFkZENsYXNzKGMpLmF0dHIoYyxjKSk6dGhpcy5pc0xvYWRpbmcmJih0aGlzLmlzTG9hZGluZz0hMSxkLnJlbW92ZUNsYXNzKGMpLnJlbW92ZUF0dHIoYykpfSx0aGlzKSwwKX0sYy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dmFyIGE9ITAsYj10aGlzLiRlbGVtZW50LmNsb3Nlc3QoJ1tkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdJyk7aWYoYi5sZW5ndGgpe3ZhciBjPXRoaXMuJGVsZW1lbnQuZmluZCgiaW5wdXQiKTsicmFkaW8iPT1jLnByb3AoInR5cGUiKT8oYy5wcm9wKCJjaGVja2VkIikmJihhPSExKSxiLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWxlbWVudC5hZGRDbGFzcygiYWN0aXZlIikpOiJjaGVja2JveCI9PWMucHJvcCgidHlwZSIpJiYoYy5wcm9wKCJjaGVja2VkIikhPT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJhY3RpdmUiKSYmKGE9ITEpLHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoImFjdGl2ZSIpKSxjLnByb3AoImNoZWNrZWQiLHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImFjdGl2ZSIpKSxhJiZjLnRyaWdnZXIoImNoYW5nZSIpfWVsc2UgdGhpcy4kZWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJhY3RpdmUiKSksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcygiYWN0aXZlIil9O3ZhciBkPWEuZm4uYnV0dG9uO2EuZm4uYnV0dG9uPWIsYS5mbi5idXR0b24uQ29uc3RydWN0b3I9YyxhLmZuLmJ1dHRvbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYnV0dG9uPWQsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLmJ1dHRvbi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZV49ImJ1dHRvbiJdJyxmdW5jdGlvbihjKXt2YXIgZD1hKGMudGFyZ2V0KTtkLmhhc0NsYXNzKCJidG4iKXx8KGQ9ZC5jbG9zZXN0KCIuYnRuIikpLGIuY2FsbChkLCJ0b2dnbGUiKSxhKGMudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT0icmFkaW8iXScpfHxhKGMudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT0iY2hlY2tib3giXScpfHxjLnByZXZlbnREZWZhdWx0KCl9KS5vbigiZm9jdXMuYnMuYnV0dG9uLmRhdGEtYXBpIGJsdXIuYnMuYnV0dG9uLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXj0iYnV0dG9uIl0nLGZ1bmN0aW9uKGIpe2EoYi50YXJnZXQpLmNsb3Nlc3QoIi5idG4iKS50b2dnbGVDbGFzcygiZm9jdXMiLC9eZm9jdXMoaW4pPyQvLnRlc3QoYi50eXBlKSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLmNhcm91c2VsIiksZj1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQuZGF0YSgpLCJvYmplY3QiPT10eXBlb2YgYiYmYiksZz0ic3RyaW5nIj09dHlwZW9mIGI/YjpmLnNsaWRlO2V8fGQuZGF0YSgiYnMuY2Fyb3VzZWwiLGU9bmV3IGModGhpcyxmKSksIm51bWJlciI9PXR5cGVvZiBiP2UudG8oYik6Zz9lW2ddKCk6Zi5pbnRlcnZhbCYmZS5wYXVzZSgpLmN5Y2xlKCl9KX12YXIgYz1mdW5jdGlvbihiLGMpe3RoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLiRpbmRpY2F0b3JzPXRoaXMuJGVsZW1lbnQuZmluZCgiLmNhcm91c2VsLWluZGljYXRvcnMiKSx0aGlzLm9wdGlvbnM9Yyx0aGlzLnBhdXNlZD1udWxsLHRoaXMuc2xpZGluZz1udWxsLHRoaXMuaW50ZXJ2YWw9bnVsbCx0aGlzLiRhY3RpdmU9bnVsbCx0aGlzLiRpdGVtcz1udWxsLHRoaXMub3B0aW9ucy5rZXlib2FyZCYmdGhpcy4kZWxlbWVudC5vbigia2V5ZG93bi5icy5jYXJvdXNlbCIsYS5wcm94eSh0aGlzLmtleWRvd24sdGhpcykpLCJob3ZlciI9PXRoaXMub3B0aW9ucy5wYXVzZSYmISgib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkmJnRoaXMuJGVsZW1lbnQub24oIm1vdXNlZW50ZXIuYnMuY2Fyb3VzZWwiLGEucHJveHkodGhpcy5wYXVzZSx0aGlzKSkub24oIm1vdXNlbGVhdmUuYnMuY2Fyb3VzZWwiLGEucHJveHkodGhpcy5jeWNsZSx0aGlzKSl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuVFJBTlNJVElPTl9EVVJBVElPTj02MDAsYy5ERUZBVUxUUz17aW50ZXJ2YWw6NWUzLHBhdXNlOiJob3ZlciIsd3JhcDohMCxrZXlib2FyZDohMH0sYy5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihhKXtpZighL2lucHV0fHRleHRhcmVhL2kudGVzdChhLnRhcmdldC50YWdOYW1lKSl7c3dpdGNoKGEud2hpY2gpe2Nhc2UgMzc6dGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSAzOTp0aGlzLm5leHQoKTticmVhaztkZWZhdWx0OnJldHVybn1hLnByZXZlbnREZWZhdWx0KCl9fSxjLnByb3RvdHlwZS5jeWNsZT1mdW5jdGlvbihiKXtyZXR1cm4gYnx8KHRoaXMucGF1c2VkPSExKSx0aGlzLmludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChhLnByb3h5KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSxjLnByb3RvdHlwZS5nZXRJdGVtSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJGl0ZW1zPWEucGFyZW50KCkuY2hpbGRyZW4oIi5pdGVtIiksdGhpcy4kaXRlbXMuaW5kZXgoYXx8dGhpcy4kYWN0aXZlKX0sYy5wcm90b3R5cGUuZ2V0SXRlbUZvckRpcmVjdGlvbj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0SXRlbUluZGV4KGIpLGQ9InByZXYiPT1hJiYwPT09Y3x8Im5leHQiPT1hJiZjPT10aGlzLiRpdGVtcy5sZW5ndGgtMTtpZihkJiYhdGhpcy5vcHRpb25zLndyYXApcmV0dXJuIGI7dmFyIGU9InByZXYiPT1hPy0xOjEsZj0oYytlKSV0aGlzLiRpdGVtcy5sZW5ndGg7cmV0dXJuIHRoaXMuJGl0ZW1zLmVxKGYpfSxjLnByb3RvdHlwZS50bz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9dGhpcy5nZXRJdGVtSW5kZXgodGhpcy4kYWN0aXZlPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIikpO3JldHVybiBhPnRoaXMuJGl0ZW1zLmxlbmd0aC0xfHwwPmE/dm9pZCAwOnRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZSgic2xpZC5icy5jYXJvdXNlbCIsZnVuY3Rpb24oKXtiLnRvKGEpfSk6Yz09YT90aGlzLnBhdXNlKCkuY3ljbGUoKTp0aGlzLnNsaWRlKGE+Yz8ibmV4dCI6InByZXYiLHRoaXMuJGl0ZW1zLmVxKGEpKX0sYy5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oYil7cmV0dXJuIGJ8fCh0aGlzLnBhdXNlZD0hMCksdGhpcy4kZWxlbWVudC5maW5kKCIubmV4dCwgLnByZXYiKS5sZW5ndGgmJmEuc3VwcG9ydC50cmFuc2l0aW9uJiYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCksdGhpcy5jeWNsZSghMCkpLHRoaXMuaW50ZXJ2YWw9Y2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzfSxjLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpZGluZz92b2lkIDA6dGhpcy5zbGlkZSgibmV4dCIpfSxjLnByb3RvdHlwZS5wcmV2PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpZGluZz92b2lkIDA6dGhpcy5zbGlkZSgicHJldiIpfSxjLnByb3RvdHlwZS5zbGlkZT1mdW5jdGlvbihiLGQpe3ZhciBlPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIiksZj1kfHx0aGlzLmdldEl0ZW1Gb3JEaXJlY3Rpb24oYixlKSxnPXRoaXMuaW50ZXJ2YWwsaD0ibmV4dCI9PWI/ImxlZnQiOiJyaWdodCIsaT10aGlzO2lmKGYuaGFzQ2xhc3MoImFjdGl2ZSIpKXJldHVybiB0aGlzLnNsaWRpbmc9ITE7dmFyIGo9ZlswXSxrPWEuRXZlbnQoInNsaWRlLmJzLmNhcm91c2VsIix7cmVsYXRlZFRhcmdldDpqLGRpcmVjdGlvbjpofSk7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGspLCFrLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZih0aGlzLnNsaWRpbmc9ITAsZyYmdGhpcy5wYXVzZSgpLHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKXt0aGlzLiRpbmRpY2F0b3JzLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7dmFyIGw9YSh0aGlzLiRpbmRpY2F0b3JzLmNoaWxkcmVuKClbdGhpcy5nZXRJdGVtSW5kZXgoZildKTtsJiZsLmFkZENsYXNzKCJhY3RpdmUiKX12YXIgbT1hLkV2ZW50KCJzbGlkLmJzLmNhcm91c2VsIix7cmVsYXRlZFRhcmdldDpqLGRpcmVjdGlvbjpofSk7cmV0dXJuIGEuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJzbGlkZSIpPyhmLmFkZENsYXNzKGIpLGZbMF0ub2Zmc2V0V2lkdGgsZS5hZGRDbGFzcyhoKSxmLmFkZENsYXNzKGgpLGUub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKCl7Zi5yZW1vdmVDbGFzcyhbYixoXS5qb2luKCIgIikpLmFkZENsYXNzKCJhY3RpdmUiKSxlLnJlbW92ZUNsYXNzKFsiYWN0aXZlIixoXS5qb2luKCIgIikpLGkuc2xpZGluZz0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS4kZWxlbWVudC50cmlnZ2VyKG0pfSwwKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTikpOihlLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxmLmFkZENsYXNzKCJhY3RpdmUiKSx0aGlzLnNsaWRpbmc9ITEsdGhpcy4kZWxlbWVudC50cmlnZ2VyKG0pKSxnJiZ0aGlzLmN5Y2xlKCksdGhpc319O3ZhciBkPWEuZm4uY2Fyb3VzZWw7YS5mbi5jYXJvdXNlbD1iLGEuZm4uY2Fyb3VzZWwuQ29uc3RydWN0b3I9YyxhLmZuLmNhcm91c2VsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5jYXJvdXNlbD1kLHRoaXN9O3ZhciBlPWZ1bmN0aW9uKGMpe3ZhciBkLGU9YSh0aGlzKSxmPWEoZS5hdHRyKCJkYXRhLXRhcmdldCIpfHwoZD1lLmF0dHIoImhyZWYiKSkmJmQucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKSk7aWYoZi5oYXNDbGFzcygiY2Fyb3VzZWwiKSl7dmFyIGc9YS5leHRlbmQoe30sZi5kYXRhKCksZS5kYXRhKCkpLGg9ZS5hdHRyKCJkYXRhLXNsaWRlLXRvIik7aCYmKGcuaW50ZXJ2YWw9ITEpLGIuY2FsbChmLGcpLGgmJmYuZGF0YSgiYnMuY2Fyb3VzZWwiKS50byhoKSxjLnByZXZlbnREZWZhdWx0KCl9fTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMuY2Fyb3VzZWwuZGF0YS1hcGkiLCJbZGF0YS1zbGlkZV0iLGUpLm9uKCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaSIsIltkYXRhLXNsaWRlLXRvXSIsZSksYSh3aW5kb3cpLm9uKCJsb2FkIixmdW5jdGlvbigpe2EoJ1tkYXRhLXJpZGU9ImNhcm91c2VsIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKTtiLmNhbGwoYyxjLmRhdGEoKSl9KX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXt2YXIgYyxkPWIuYXR0cigiZGF0YS10YXJnZXQiKXx8KGM9Yi5hdHRyKCJocmVmIikpJiZjLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIik7cmV0dXJuIGEoZCl9ZnVuY3Rpb24gYyhiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxlPWMuZGF0YSgiYnMuY29sbGFwc2UiKSxmPWEuZXh0ZW5kKHt9LGQuREVGQVVMVFMsYy5kYXRhKCksIm9iamVjdCI9PXR5cGVvZiBiJiZiKTshZSYmZi50b2dnbGUmJi9zaG93fGhpZGUvLnRlc3QoYikmJihmLnRvZ2dsZT0hMSksZXx8Yy5kYXRhKCJicy5jb2xsYXBzZSIsZT1uZXcgZCh0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBkPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxkLkRFRkFVTFRTLGMpLHRoaXMuJHRyaWdnZXI9YSgnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2hyZWY9IiMnK2IuaWQrJyJdLFtkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtkYXRhLXRhcmdldD0iIycrYi5pZCsnIl0nKSx0aGlzLnRyYW5zaXRpb25pbmc9bnVsbCx0aGlzLm9wdGlvbnMucGFyZW50P3RoaXMuJHBhcmVudD10aGlzLmdldFBhcmVudCgpOnRoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuJGVsZW1lbnQsdGhpcy4kdHJpZ2dlciksdGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX07ZC5WRVJTSU9OPSIzLjMuNSIsZC5UUkFOU0lUSU9OX0RVUkFUSU9OPTM1MCxkLkRFRkFVTFRTPXt0b2dnbGU6ITB9LGQucHJvdG90eXBlLmRpbWVuc2lvbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoIndpZHRoIik7cmV0dXJuIGE/IndpZHRoIjoiaGVpZ2h0In0sZC5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJiF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJpbiIpKXt2YXIgYixlPXRoaXMuJHBhcmVudCYmdGhpcy4kcGFyZW50LmNoaWxkcmVuKCIucGFuZWwiKS5jaGlsZHJlbigiLmluLCAuY29sbGFwc2luZyIpO2lmKCEoZSYmZS5sZW5ndGgmJihiPWUuZGF0YSgiYnMuY29sbGFwc2UiKSxiJiZiLnRyYW5zaXRpb25pbmcpKSl7dmFyIGY9YS5FdmVudCgic2hvdy5icy5jb2xsYXBzZSIpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihmKSwhZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7ZSYmZS5sZW5ndGgmJihjLmNhbGwoZSwiaGlkZSIpLGJ8fGUuZGF0YSgiYnMuY29sbGFwc2UiLG51bGwpKTt2YXIgZz10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIikuYWRkQ2xhc3MoImNvbGxhcHNpbmciKVtnXSgwKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksdGhpcy4kdHJpZ2dlci5yZW1vdmVDbGFzcygiY29sbGFwc2VkIikuYXR0cigiYXJpYS1leHBhbmRlZCIsITApLHRoaXMudHJhbnNpdGlvbmluZz0xO3ZhciBoPWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiY29sbGFwc2luZyIpLmFkZENsYXNzKCJjb2xsYXBzZSBpbiIpW2ddKCIiKSx0aGlzLnRyYW5zaXRpb25pbmc9MCx0aGlzLiRlbGVtZW50LnRyaWdnZXIoInNob3duLmJzLmNvbGxhcHNlIil9O2lmKCFhLnN1cHBvcnQudHJhbnNpdGlvbilyZXR1cm4gaC5jYWxsKHRoaXMpO3ZhciBpPWEuY2FtZWxDYXNlKFsic2Nyb2xsIixnXS5qb2luKCItIikpO3RoaXMuJGVsZW1lbnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkoaCx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKVtnXSh0aGlzLiRlbGVtZW50WzBdW2ldKX19fX0sZC5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIikpe3ZhciBiPWEuRXZlbnQoImhpZGUuYnMuY29sbGFwc2UiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYiksIWIuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBjPXRoaXMuZGltZW5zaW9uKCk7dGhpcy4kZWxlbWVudFtjXSh0aGlzLiRlbGVtZW50W2NdKCkpWzBdLm9mZnNldEhlaWdodCx0aGlzLiRlbGVtZW50LmFkZENsYXNzKCJjb2xsYXBzaW5nIikucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIGluIikuYXR0cigiYXJpYS1leHBhbmRlZCIsITEpLHRoaXMuJHRyaWdnZXIuYWRkQ2xhc3MoImNvbGxhcHNlZCIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCExKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgZT1mdW5jdGlvbigpe3RoaXMudHJhbnNpdGlvbmluZz0wLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNpbmciKS5hZGRDbGFzcygiY29sbGFwc2UiKS50cmlnZ2VyKCJoaWRkZW4uYnMuY29sbGFwc2UiKX07cmV0dXJuIGEuc3VwcG9ydC50cmFuc2l0aW9uP3ZvaWQgdGhpcy4kZWxlbWVudFtjXSgwKS5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYS5wcm94eShlLHRoaXMpKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChkLlRSQU5TSVRJT05fRFVSQVRJT04pOmUuY2FsbCh0aGlzKX19fSxkLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIik/ImhpZGUiOiJzaG93Il0oKX0sZC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5vcHRpb25zLnBhcmVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2RhdGEtcGFyZW50PSInK3RoaXMub3B0aW9ucy5wYXJlbnQrJyJdJykuZWFjaChhLnByb3h5KGZ1bmN0aW9uKGMsZCl7dmFyIGU9YShkKTt0aGlzLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhiKGUpLGUpfSx0aGlzKSkuZW5kKCl9LGQucHJvdG90eXBlLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcz1mdW5jdGlvbihhLGIpe3ZhciBjPWEuaGFzQ2xhc3MoImluIik7YS5hdHRyKCJhcmlhLWV4cGFuZGVkIixjKSxiLnRvZ2dsZUNsYXNzKCJjb2xsYXBzZWQiLCFjKS5hdHRyKCJhcmlhLWV4cGFuZGVkIixjKX07dmFyIGU9YS5mbi5jb2xsYXBzZTthLmZuLmNvbGxhcHNlPWMsYS5mbi5jb2xsYXBzZS5Db25zdHJ1Y3Rvcj1kLGEuZm4uY29sbGFwc2Uubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmNvbGxhcHNlPWUsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLmNvbGxhcHNlLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdJyxmdW5jdGlvbihkKXt2YXIgZT1hKHRoaXMpO2UuYXR0cigiZGF0YS10YXJnZXQiKXx8ZC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBmPWIoZSksZz1mLmRhdGEoImJzLmNvbGxhcHNlIiksaD1nPyJ0b2dnbGUiOmUuZGF0YSgpO2MuY2FsbChmLGgpfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3ZhciBjPWIuYXR0cigiZGF0YS10YXJnZXQiKTtjfHwoYz1iLmF0dHIoImhyZWYiKSxjPWMmJi8jW0EtWmEtel0vLnRlc3QoYykmJmMucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSk7dmFyIGQ9YyYmYShjKTtyZXR1cm4gZCYmZC5sZW5ndGg/ZDpiLnBhcmVudCgpfWZ1bmN0aW9uIGMoYyl7YyYmMz09PWMud2hpY2h8fChhKGUpLnJlbW92ZSgpLGEoZikuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1iKGQpLGY9e3JlbGF0ZWRUYXJnZXQ6dGhpc307ZS5oYXNDbGFzcygib3BlbiIpJiYoYyYmImNsaWNrIj09Yy50eXBlJiYvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGMudGFyZ2V0LnRhZ05hbWUpJiZhLmNvbnRhaW5zKGVbMF0sYy50YXJnZXQpfHwoZS50cmlnZ2VyKGM9YS5FdmVudCgiaGlkZS5icy5kcm9wZG93biIsZikpLGMuaXNEZWZhdWx0UHJldmVudGVkKCl8fChkLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLGUucmVtb3ZlQ2xhc3MoIm9wZW4iKS50cmlnZ2VyKCJoaWRkZW4uYnMuZHJvcGRvd24iLGYpKSkpfSkpfWZ1bmN0aW9uIGQoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoImJzLmRyb3Bkb3duIik7ZHx8Yy5kYXRhKCJicy5kcm9wZG93biIsZD1uZXcgZyh0aGlzKSksInN0cmluZyI9PXR5cGVvZiBiJiZkW2JdLmNhbGwoYyl9KX12YXIgZT0iLmRyb3Bkb3duLWJhY2tkcm9wIixmPSdbZGF0YS10b2dnbGU9ImRyb3Bkb3duIl0nLGc9ZnVuY3Rpb24oYil7YShiKS5vbigiY2xpY2suYnMuZHJvcGRvd24iLHRoaXMudG9nZ2xlKX07Zy5WRVJTSU9OPSIzLjMuNSIsZy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGQpe3ZhciBlPWEodGhpcyk7aWYoIWUuaXMoIi5kaXNhYmxlZCwgOmRpc2FibGVkIikpe3ZhciBmPWIoZSksZz1mLmhhc0NsYXNzKCJvcGVuIik7aWYoYygpLCFnKXsib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmIWYuY2xvc2VzdCgiLm5hdmJhci1uYXYiKS5sZW5ndGgmJmEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmFkZENsYXNzKCJkcm9wZG93bi1iYWNrZHJvcCIpLmluc2VydEFmdGVyKGEodGhpcykpLm9uKCJjbGljayIsYyk7dmFyIGg9e3JlbGF0ZWRUYXJnZXQ6dGhpc307aWYoZi50cmlnZ2VyKGQ9YS5FdmVudCgic2hvdy5icy5kcm9wZG93biIsaCkpLGQuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO2UudHJpZ2dlcigiZm9jdXMiKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpLGYudG9nZ2xlQ2xhc3MoIm9wZW4iKS50cmlnZ2VyKCJzaG93bi5icy5kcm9wZG93biIsaCl9cmV0dXJuITF9fSxnLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKGMpe2lmKC8oMzh8NDB8Mjd8MzIpLy50ZXN0KGMud2hpY2gpJiYhL2lucHV0fHRleHRhcmVhL2kudGVzdChjLnRhcmdldC50YWdOYW1lKSl7dmFyIGQ9YSh0aGlzKTtpZihjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKSwhZC5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSl7dmFyIGU9YihkKSxnPWUuaGFzQ2xhc3MoIm9wZW4iKTtpZighZyYmMjchPWMud2hpY2h8fGcmJjI3PT1jLndoaWNoKXJldHVybiAyNz09Yy53aGljaCYmZS5maW5kKGYpLnRyaWdnZXIoImZvY3VzIiksZC50cmlnZ2VyKCJjbGljayIpO3ZhciBoPSIgbGk6bm90KC5kaXNhYmxlZCk6dmlzaWJsZSBhIixpPWUuZmluZCgiLmRyb3Bkb3duLW1lbnUiK2gpO2lmKGkubGVuZ3RoKXt2YXIgaj1pLmluZGV4KGMudGFyZ2V0KTszOD09Yy53aGljaCYmaj4wJiZqLS0sNDA9PWMud2hpY2gmJmo8aS5sZW5ndGgtMSYmaisrLH5qfHwoaj0wKSxpLmVxKGopLnRyaWdnZXIoImZvY3VzIil9fX19O3ZhciBoPWEuZm4uZHJvcGRvd247YS5mbi5kcm9wZG93bj1kLGEuZm4uZHJvcGRvd24uQ29uc3RydWN0b3I9ZyxhLmZuLmRyb3Bkb3duLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5kcm9wZG93bj1oLHRoaXN9LGEoZG9jdW1lbnQpLm9uKCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaSIsYykub24oImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpIiwiLmRyb3Bkb3duIGZvcm0iLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGkiLGYsZy5wcm90b3R5cGUudG9nZ2xlKS5vbigia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaSIsZixnLnByb3RvdHlwZS5rZXlkb3duKS5vbigia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaSIsIi5kcm9wZG93bi1tZW51IixnLnByb3RvdHlwZS5rZXlkb3duKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYixkKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzKSxmPWUuZGF0YSgiYnMubW9kYWwiKSxnPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZS5kYXRhKCksIm9iamVjdCI9PXR5cGVvZiBiJiZiKTtmfHxlLmRhdGEoImJzLm1vZGFsIixmPW5ldyBjKHRoaXMsZykpLCJzdHJpbmciPT10eXBlb2YgYj9mW2JdKGQpOmcuc2hvdyYmZi5zaG93KGQpfSl9dmFyIGM9ZnVuY3Rpb24oYixjKXt0aGlzLm9wdGlvbnM9Yyx0aGlzLiRib2R5PWEoZG9jdW1lbnQuYm9keSksdGhpcy4kZWxlbWVudD1hKGIpLHRoaXMuJGRpYWxvZz10aGlzLiRlbGVtZW50LmZpbmQoIi5tb2RhbC1kaWFsb2ciKSx0aGlzLiRiYWNrZHJvcD1udWxsLHRoaXMuaXNTaG93bj1udWxsLHRoaXMub3JpZ2luYWxCb2R5UGFkPW51bGwsdGhpcy5zY3JvbGxiYXJXaWR0aD0wLHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaz0hMSx0aGlzLm9wdGlvbnMucmVtb3RlJiZ0aGlzLiRlbGVtZW50LmZpbmQoIi5tb2RhbC1jb250ZW50IikubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlLGEucHJveHkoZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoImxvYWRlZC5icy5tb2RhbCIpfSx0aGlzKSl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuVFJBTlNJVElPTl9EVVJBVElPTj0zMDAsYy5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLkRFRkFVTFRTPXtiYWNrZHJvcDohMCxrZXlib2FyZDohMCxzaG93OiEwfSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3coYSl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oYil7dmFyIGQ9dGhpcyxlPWEuRXZlbnQoInNob3cuYnMubW9kYWwiLHtyZWxhdGVkVGFyZ2V0OmJ9KTt0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSksdGhpcy5pc1Nob3dufHxlLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy5pc1Nob3duPSEwLHRoaXMuY2hlY2tTY3JvbGxiYXIoKSx0aGlzLnNldFNjcm9sbGJhcigpLHRoaXMuJGJvZHkuYWRkQ2xhc3MoIm1vZGFsLW9wZW4iKSx0aGlzLmVzY2FwZSgpLHRoaXMucmVzaXplKCksdGhpcy4kZWxlbWVudC5vbigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIsJ1tkYXRhLWRpc21pc3M9Im1vZGFsIl0nLGEucHJveHkodGhpcy5oaWRlLHRoaXMpKSx0aGlzLiRkaWFsb2cub24oIm1vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsIixmdW5jdGlvbigpe2QuJGVsZW1lbnQub25lKCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwiLGZ1bmN0aW9uKGIpe2EoYi50YXJnZXQpLmlzKGQuJGVsZW1lbnQpJiYoZC5pZ25vcmVCYWNrZHJvcENsaWNrPSEwKX0pfSksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3ZhciBlPWEuc3VwcG9ydC50cmFuc2l0aW9uJiZkLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik7ZC4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGh8fGQuJGVsZW1lbnQuYXBwZW5kVG8oZC4kYm9keSksZC4kZWxlbWVudC5zaG93KCkuc2Nyb2xsVG9wKDApLGQuYWRqdXN0RGlhbG9nKCksZSYmZC4kZWxlbWVudFswXS5vZmZzZXRXaWR0aCxkLiRlbGVtZW50LmFkZENsYXNzKCJpbiIpLGQuZW5mb3JjZUZvY3VzKCk7dmFyIGY9YS5FdmVudCgic2hvd24uYnMubW9kYWwiLHtyZWxhdGVkVGFyZ2V0OmJ9KTtlP2QuJGRpYWxvZy5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZnVuY3Rpb24oKXtkLiRlbGVtZW50LnRyaWdnZXIoImZvY3VzIikudHJpZ2dlcihmKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6ZC4kZWxlbWVudC50cmlnZ2VyKCJmb2N1cyIpLnRyaWdnZXIoZil9KSl9LGMucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oYil7YiYmYi5wcmV2ZW50RGVmYXVsdCgpLGI9YS5FdmVudCgiaGlkZS5icy5tb2RhbCIpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihiKSx0aGlzLmlzU2hvd24mJiFiLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYodGhpcy5pc1Nob3duPSExLHRoaXMuZXNjYXBlKCksdGhpcy5yZXNpemUoKSxhKGRvY3VtZW50KS5vZmYoImZvY3VzaW4uYnMubW9kYWwiKSx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJpbiIpLm9mZigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIpLm9mZigibW91c2V1cC5kaXNtaXNzLmJzLm1vZGFsIiksdGhpcy4kZGlhbG9nLm9mZigibW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWwiKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuJGVsZW1lbnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkodGhpcy5oaWRlTW9kYWwsdGhpcykpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6dGhpcy5oaWRlTW9kYWwoKSl9LGMucHJvdG90eXBlLmVuZm9yY2VGb2N1cz1mdW5jdGlvbigpe2EoZG9jdW1lbnQpLm9mZigiZm9jdXNpbi5icy5tb2RhbCIpLm9uKCJmb2N1c2luLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGEpe3RoaXMuJGVsZW1lbnRbMF09PT1hLnRhcmdldHx8dGhpcy4kZWxlbWVudC5oYXMoYS50YXJnZXQpLmxlbmd0aHx8dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJmb2N1cyIpfSx0aGlzKSl9LGMucHJvdG90eXBlLmVzY2FwZT1mdW5jdGlvbigpe3RoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmtleWJvYXJkP3RoaXMuJGVsZW1lbnQub24oImtleWRvd24uZGlzbWlzcy5icy5tb2RhbCIsYS5wcm94eShmdW5jdGlvbihhKXsyNz09YS53aGljaCYmdGhpcy5oaWRlKCl9LHRoaXMpKTp0aGlzLmlzU2hvd258fHRoaXMuJGVsZW1lbnQub2ZmKCJrZXlkb3duLmRpc21pc3MuYnMubW9kYWwiKX0sYy5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5pc1Nob3duP2Eod2luZG93KS5vbigicmVzaXplLmJzLm1vZGFsIixhLnByb3h5KHRoaXMuaGFuZGxlVXBkYXRlLHRoaXMpKTphKHdpbmRvdykub2ZmKCJyZXNpemUuYnMubW9kYWwiKX0sYy5wcm90b3R5cGUuaGlkZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLiRlbGVtZW50LmhpZGUoKSx0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uKCl7YS4kYm9keS5yZW1vdmVDbGFzcygibW9kYWwtb3BlbiIpLGEucmVzZXRBZGp1c3RtZW50cygpLGEucmVzZXRTY3JvbGxiYXIoKSxhLiRlbGVtZW50LnRyaWdnZXIoImhpZGRlbi5icy5tb2RhbCIpfSl9LGMucHJvdG90eXBlLnJlbW92ZUJhY2tkcm9wPWZ1bmN0aW9uKCl7dGhpcy4kYmFja2Ryb3AmJnRoaXMuJGJhY2tkcm9wLnJlbW92ZSgpLHRoaXMuJGJhY2tkcm9wPW51bGx9LGMucHJvdG90eXBlLmJhY2tkcm9wPWZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMsZT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/ImZhZGUiOiIiO2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmJhY2tkcm9wKXt2YXIgZj1hLnN1cHBvcnQudHJhbnNpdGlvbiYmZTtpZih0aGlzLiRiYWNrZHJvcD1hKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5hZGRDbGFzcygibW9kYWwtYmFja2Ryb3AgIitlKS5hcHBlbmRUbyh0aGlzLiRib2R5KSx0aGlzLiRlbGVtZW50Lm9uKCJjbGljay5kaXNtaXNzLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s/dm9pZCh0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s9ITEpOnZvaWQoYS50YXJnZXQ9PT1hLmN1cnJlbnRUYXJnZXQmJigic3RhdGljIj09dGhpcy5vcHRpb25zLmJhY2tkcm9wP3RoaXMuJGVsZW1lbnRbMF0uZm9jdXMoKTp0aGlzLmhpZGUoKSkpfSx0aGlzKSksZiYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgsdGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoImluIiksIWIpcmV0dXJuO2Y/dGhpcy4kYmFja2Ryb3Aub25lKCJic1RyYW5zaXRpb25FbmQiLGIpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTik6YigpfWVsc2UgaWYoIXRoaXMuaXNTaG93biYmdGhpcy4kYmFja2Ryb3Ape3RoaXMuJGJhY2tkcm9wLnJlbW92ZUNsYXNzKCJpbiIpO3ZhciBnPWZ1bmN0aW9uKCl7ZC5yZW1vdmVCYWNrZHJvcCgpLGImJmIoKX07YS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT90aGlzLiRiYWNrZHJvcC5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZykuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OKTpnKCl9ZWxzZSBiJiZiKCl9LGMucHJvdG90eXBlLmhhbmRsZVVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuYWRqdXN0RGlhbG9nKCl9LGMucHJvdG90eXBlLmFkanVzdERpYWxvZz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0PmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7dGhpcy4kZWxlbWVudC5jc3Moe3BhZGRpbmdMZWZ0OiF0aGlzLmJvZHlJc092ZXJmbG93aW5nJiZhP3RoaXMuc2Nyb2xsYmFyV2lkdGg6IiIscGFkZGluZ1JpZ2h0OnRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJiFhP3RoaXMuc2Nyb2xsYmFyV2lkdGg6IiJ9KX0sYy5wcm90b3R5cGUucmVzZXRBZGp1c3RtZW50cz1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDoiIixwYWRkaW5nUmlnaHQ6IiJ9KX0sYy5wcm90b3R5cGUuY2hlY2tTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT13aW5kb3cuaW5uZXJXaWR0aDtpZighYSl7dmFyIGI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2E9Yi5yaWdodC1NYXRoLmFicyhiLmxlZnQpfXRoaXMuYm9keUlzT3ZlcmZsb3dpbmc9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDxhLHRoaXMuc2Nyb2xsYmFyV2lkdGg9dGhpcy5tZWFzdXJlU2Nyb2xsYmFyKCl9LGMucHJvdG90eXBlLnNldFNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciBhPXBhcnNlSW50KHRoaXMuJGJvZHkuY3NzKCJwYWRkaW5nLXJpZ2h0Iil8fDAsMTApO3RoaXMub3JpZ2luYWxCb2R5UGFkPWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0fHwiIix0aGlzLmJvZHlJc092ZXJmbG93aW5nJiZ0aGlzLiRib2R5LmNzcygicGFkZGluZy1yaWdodCIsYSt0aGlzLnNjcm9sbGJhcldpZHRoKX0sYy5wcm90b3R5cGUucmVzZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt0aGlzLiRib2R5LmNzcygicGFkZGluZy1yaWdodCIsdGhpcy5vcmlnaW5hbEJvZHlQYWQpfSxjLnByb3RvdHlwZS5tZWFzdXJlU2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5jbGFzc05hbWU9Im1vZGFsLXNjcm9sbGJhci1tZWFzdXJlIix0aGlzLiRib2R5LmFwcGVuZChhKTt2YXIgYj1hLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGg7cmV0dXJuIHRoaXMuJGJvZHlbMF0ucmVtb3ZlQ2hpbGQoYSksYn07dmFyIGQ9YS5mbi5tb2RhbDthLmZuLm1vZGFsPWIsYS5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj1jLGEuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLm1vZGFsPWQsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLm1vZGFsLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJtb2RhbCJdJyxmdW5jdGlvbihjKXt2YXIgZD1hKHRoaXMpLGU9ZC5hdHRyKCJocmVmIiksZj1hKGQuYXR0cigiZGF0YS10YXJnZXQiKXx8ZSYmZS5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKSxnPWYuZGF0YSgiYnMubW9kYWwiKT8idG9nZ2xlIjphLmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChlKSYmZX0sZi5kYXRhKCksZC5kYXRhKCkpO2QuaXMoImEiKSYmYy5wcmV2ZW50RGVmYXVsdCgpLGYub25lKCJzaG93LmJzLm1vZGFsIixmdW5jdGlvbihhKXthLmlzRGVmYXVsdFByZXZlbnRlZCgpfHxmLm9uZSgiaGlkZGVuLmJzLm1vZGFsIixmdW5jdGlvbigpe2QuaXMoIjp2aXNpYmxlIikmJmQudHJpZ2dlcigiZm9jdXMiKX0pfSksYi5jYWxsKGYsZyx0aGlzKX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMudG9vbHRpcCIpLGY9Im9iamVjdCI9PXR5cGVvZiBiJiZiOyhlfHwhL2Rlc3Ryb3l8aGlkZS8udGVzdChiKSkmJihlfHxkLmRhdGEoImJzLnRvb2x0aXAiLGU9bmV3IGModGhpcyxmKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCkpfSl9dmFyIGM9ZnVuY3Rpb24oYSxiKXt0aGlzLnR5cGU9bnVsbCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLmVuYWJsZWQ9bnVsbCx0aGlzLnRpbWVvdXQ9bnVsbCx0aGlzLmhvdmVyU3RhdGU9bnVsbCx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy5pblN0YXRlPW51bGwsdGhpcy5pbml0KCJ0b29sdGlwIixhLGIpfTtjLlZFUlNJT049IjMuMy41IixjLlRSQU5TSVRJT05fRFVSQVRJT049MTUwLGMuREVGQVVMVFM9e2FuaW1hdGlvbjohMCxwbGFjZW1lbnQ6InRvcCIsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InRvb2x0aXAiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiPjwvZGl2PjwvZGl2PicsdHJpZ2dlcjoiaG92ZXIgZm9jdXMiLHRpdGxlOiIiLGRlbGF5OjAsaHRtbDohMSxjb250YWluZXI6ITEsdmlld3BvcnQ6e3NlbGVjdG9yOiJib2R5IixwYWRkaW5nOjB9fSxjLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGIsYyxkKXtpZih0aGlzLmVuYWJsZWQ9ITAsdGhpcy50eXBlPWIsdGhpcy4kZWxlbWVudD1hKGMpLHRoaXMub3B0aW9ucz10aGlzLmdldE9wdGlvbnMoZCksdGhpcy4kdmlld3BvcnQ9dGhpcy5vcHRpb25zLnZpZXdwb3J0JiZhKGEuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMudmlld3BvcnQpP3RoaXMub3B0aW9ucy52aWV3cG9ydC5jYWxsKHRoaXMsdGhpcy4kZWxlbWVudCk6dGhpcy5vcHRpb25zLnZpZXdwb3J0LnNlbGVjdG9yfHx0aGlzLm9wdGlvbnMudmlld3BvcnQpLHRoaXMuaW5TdGF0ZT17Y2xpY2s6ITEsaG92ZXI6ITEsZm9jdXM6ITF9LHRoaXMuJGVsZW1lbnRbMF1pbnN0YW5jZW9mIGRvY3VtZW50LmNvbnN0cnVjdG9yJiYhdGhpcy5vcHRpb25zLnNlbGVjdG9yKXRocm93IG5ldyBFcnJvcigiYHNlbGVjdG9yYCBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBpbml0aWFsaXppbmcgIit0aGlzLnR5cGUrIiBvbiB0aGUgd2luZG93LmRvY3VtZW50IG9iamVjdCEiKTtmb3IodmFyIGU9dGhpcy5vcHRpb25zLnRyaWdnZXIuc3BsaXQoIiAiKSxmPWUubGVuZ3RoO2YtLTspe3ZhciBnPWVbZl07aWYoImNsaWNrIj09Zyl0aGlzLiRlbGVtZW50Lm9uKCJjbGljay4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSk7ZWxzZSBpZigibWFudWFsIiE9Zyl7dmFyIGg9ImhvdmVyIj09Zz8ibW91c2VlbnRlciI6ImZvY3VzaW4iLGk9ImhvdmVyIj09Zz8ibW91c2VsZWF2ZSI6ImZvY3Vzb3V0Ijt0aGlzLiRlbGVtZW50Lm9uKGgrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmVudGVyLHRoaXMpKSx0aGlzLiRlbGVtZW50Lm9uKGkrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKX19dGhpcy5vcHRpb25zLnNlbGVjdG9yP3RoaXMuX29wdGlvbnM9YS5leHRlbmQoe30sdGhpcy5vcHRpb25zLHt0cmlnZ2VyOiJtYW51YWwiLHNlbGVjdG9yOiIifSk6dGhpcy5maXhUaXRsZSgpfSxjLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBjLkRFRkFVTFRTfSxjLnByb3RvdHlwZS5nZXRPcHRpb25zPWZ1bmN0aW9uKGIpe3JldHVybiBiPWEuZXh0ZW5kKHt9LHRoaXMuZ2V0RGVmYXVsdHMoKSx0aGlzLiRlbGVtZW50LmRhdGEoKSxiKSxiLmRlbGF5JiYibnVtYmVyIj09dHlwZW9mIGIuZGVsYXkmJihiLmRlbGF5PXtzaG93OmIuZGVsYXksaGlkZTpiLmRlbGF5fSksYn0sYy5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGI9e30sYz10aGlzLmdldERlZmF1bHRzKCk7cmV0dXJuIHRoaXMuX29wdGlvbnMmJmEuZWFjaCh0aGlzLl9vcHRpb25zLGZ1bmN0aW9uKGEsZCl7Y1thXSE9ZCYmKGJbYV09ZCl9KSxifSxjLnByb3RvdHlwZS5lbnRlcj1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSk7cmV0dXJuIGN8fChjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGIuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSxhKGIuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsYykpLGIgaW5zdGFuY2VvZiBhLkV2ZW50JiYoYy5pblN0YXRlWyJmb2N1c2luIj09Yi50eXBlPyJmb2N1cyI6ImhvdmVyIl09ITApLGMudGlwKCkuaGFzQ2xhc3MoImluIil8fCJpbiI9PWMuaG92ZXJTdGF0ZT92b2lkKGMuaG92ZXJTdGF0ZT0iaW4iKTooY2xlYXJUaW1lb3V0KGMudGltZW91dCksYy5ob3ZlclN0YXRlPSJpbiIsYy5vcHRpb25zLmRlbGF5JiZjLm9wdGlvbnMuZGVsYXkuc2hvdz92b2lkKGMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ImluIj09Yy5ob3ZlclN0YXRlJiZjLnNob3coKX0sYy5vcHRpb25zLmRlbGF5LnNob3cpKTpjLnNob3coKSl9LGMucHJvdG90eXBlLmlzSW5TdGF0ZVRydWU9ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gdGhpcy5pblN0YXRlKWlmKHRoaXMuaW5TdGF0ZVthXSlyZXR1cm4hMDtyZXR1cm4hMX0sYy5wcm90b3R5cGUubGVhdmU9ZnVuY3Rpb24oYil7dmFyIGM9YiBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/YjphKGIuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUpO3JldHVybiBjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoImJzLiIrdGhpcy50eXBlLGMpKSxiIGluc3RhbmNlb2YgYS5FdmVudCYmKGMuaW5TdGF0ZVsiZm9jdXNvdXQiPT1iLnR5cGU/ImZvY3VzIjoiaG92ZXIiXT0hMSksYy5pc0luU3RhdGVUcnVlKCk/dm9pZCAwOihjbGVhclRpbWVvdXQoYy50aW1lb3V0KSxjLmhvdmVyU3RhdGU9Im91dCIsYy5vcHRpb25zLmRlbGF5JiZjLm9wdGlvbnMuZGVsYXkuaGlkZT92b2lkKGMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Im91dCI9PWMuaG92ZXJTdGF0ZSYmYy5oaWRlKCl9LGMub3B0aW9ucy5kZWxheS5oaWRlKSk6Yy5oaWRlKCkpfSxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9YS5FdmVudCgic2hvdy5icy4iK3RoaXMudHlwZSk7aWYodGhpcy5oYXNDb250ZW50KCkmJnRoaXMuZW5hYmxlZCl7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGIpO3ZhciBkPWEuY29udGFpbnModGhpcy4kZWxlbWVudFswXS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0aGlzLiRlbGVtZW50WzBdKTtpZihiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwhZClyZXR1cm47dmFyIGU9dGhpcyxmPXRoaXMudGlwKCksZz10aGlzLmdldFVJRCh0aGlzLnR5cGUpO3RoaXMuc2V0Q29udGVudCgpLGYuYXR0cigiaWQiLGcpLHRoaXMuJGVsZW1lbnQuYXR0cigiYXJpYS1kZXNjcmliZWRieSIsZyksdGhpcy5vcHRpb25zLmFuaW1hdGlvbiYmZi5hZGRDbGFzcygiZmFkZSIpO3ZhciBoPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50P3RoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlzLGZbMF0sdGhpcy4kZWxlbWVudFswXSk6dGhpcy5vcHRpb25zLnBsYWNlbWVudCxpPS9ccz9hdXRvP1xzPy9pLGo9aS50ZXN0KGgpO2omJihoPWgucmVwbGFjZShpLCIiKXx8InRvcCIpLGYuZGV0YWNoKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheToiYmxvY2sifSkuYWRkQ2xhc3MoaCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsdGhpcyksdGhpcy5vcHRpb25zLmNvbnRhaW5lcj9mLmFwcGVuZFRvKHRoaXMub3B0aW9ucy5jb250YWluZXIpOmYuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCksdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJpbnNlcnRlZC5icy4iK3RoaXMudHlwZSk7dmFyIGs9dGhpcy5nZXRQb3NpdGlvbigpLGw9ZlswXS5vZmZzZXRXaWR0aCxtPWZbMF0ub2Zmc2V0SGVpZ2h0O2lmKGope3ZhciBuPWgsbz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtoPSJib3R0b20iPT1oJiZrLmJvdHRvbSttPm8uYm90dG9tPyJ0b3AiOiJ0b3AiPT1oJiZrLnRvcC1tPG8udG9wPyJib3R0b20iOiJyaWdodCI9PWgmJmsucmlnaHQrbD5vLndpZHRoPyJsZWZ0IjoibGVmdCI9PWgmJmsubGVmdC1sPG8ubGVmdD8icmlnaHQiOmgsZi5yZW1vdmVDbGFzcyhuKS5hZGRDbGFzcyhoKX12YXIgcD10aGlzLmdldENhbGN1bGF0ZWRPZmZzZXQoaCxrLGwsbSk7dGhpcy5hcHBseVBsYWNlbWVudChwLGgpO3ZhciBxPWZ1bmN0aW9uKCl7dmFyIGE9ZS5ob3ZlclN0YXRlO2UuJGVsZW1lbnQudHJpZ2dlcigic2hvd24uYnMuIitlLnR5cGUpLGUuaG92ZXJTdGF0ZT1udWxsLCJvdXQiPT1hJiZlLmxlYXZlKGUpfTthLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kdGlwLmhhc0NsYXNzKCJmYWRlIik/Zi5vbmUoImJzVHJhbnNpdGlvbkVuZCIscSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTpxKCl9fSxjLnByb3RvdHlwZS5hcHBseVBsYWNlbWVudD1mdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMudGlwKCksZT1kWzBdLm9mZnNldFdpZHRoLGY9ZFswXS5vZmZzZXRIZWlnaHQsZz1wYXJzZUludChkLmNzcygibWFyZ2luLXRvcCIpLDEwKSxoPXBhcnNlSW50KGQuY3NzKCJtYXJnaW4tbGVmdCIpLDEwKTtpc05hTihnKSYmKGc9MCksaXNOYU4oaCkmJihoPTApLGIudG9wKz1nLGIubGVmdCs9aCxhLm9mZnNldC5zZXRPZmZzZXQoZFswXSxhLmV4dGVuZCh7dXNpbmc6ZnVuY3Rpb24oYSl7ZC5jc3Moe3RvcDpNYXRoLnJvdW5kKGEudG9wKSxsZWZ0Ok1hdGgucm91bmQoYS5sZWZ0KX0pfX0sYiksMCksZC5hZGRDbGFzcygiaW4iKTt2YXIgaT1kWzBdLm9mZnNldFdpZHRoLGo9ZFswXS5vZmZzZXRIZWlnaHQ7InRvcCI9PWMmJmohPWYmJihiLnRvcD1iLnRvcCtmLWopO3ZhciBrPXRoaXMuZ2V0Vmlld3BvcnRBZGp1c3RlZERlbHRhKGMsYixpLGopO2subGVmdD9iLmxlZnQrPWsubGVmdDpiLnRvcCs9ay50b3A7dmFyIGw9L3RvcHxib3R0b20vLnRlc3QoYyksbT1sPzIqay5sZWZ0LWUraToyKmsudG9wLWYraixuPWw/Im9mZnNldFdpZHRoIjoib2Zmc2V0SGVpZ2h0IjtkLm9mZnNldChiKSx0aGlzLnJlcGxhY2VBcnJvdyhtLGRbMF1bbl0sbCl9LGMucHJvdG90eXBlLnJlcGxhY2VBcnJvdz1mdW5jdGlvbihhLGIsYyl7dGhpcy5hcnJvdygpLmNzcyhjPyJsZWZ0IjoidG9wIiw1MCooMS1hL2IpKyIlIikuY3NzKGM/InRvcCI6ImxlZnQiLCIiKX0sYy5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMudGlwKCksYj10aGlzLmdldFRpdGxlKCk7YS5maW5kKCIudG9vbHRpcC1pbm5lciIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1sIjoidGV4dCJdKGIpLGEucmVtb3ZlQ2xhc3MoImZhZGUgaW4gdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0Iil9LGMucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZCgpeyJpbiIhPWUuaG92ZXJTdGF0ZSYmZi5kZXRhY2goKSxlLiRlbGVtZW50LnJlbW92ZUF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKS50cmlnZ2VyKCJoaWRkZW4uYnMuIitlLnR5cGUpLGImJmIoKX12YXIgZT10aGlzLGY9YSh0aGlzLiR0aXApLGc9YS5FdmVudCgiaGlkZS5icy4iK3RoaXMudHlwZSk7cmV0dXJuIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihnKSxnLmlzRGVmYXVsdFByZXZlbnRlZCgpP3ZvaWQgMDooZi5yZW1vdmVDbGFzcygiaW4iKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmZi5oYXNDbGFzcygiZmFkZSIpP2Yub25lKCJic1RyYW5zaXRpb25FbmQiLGQpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6ZCgpLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXMpfSxjLnByb3RvdHlwZS5maXhUaXRsZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQ7KGEuYXR0cigidGl0bGUiKXx8InN0cmluZyIhPXR5cGVvZiBhLmF0dHIoImRhdGEtb3JpZ2luYWwtdGl0bGUiKSkmJmEuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIsYS5hdHRyKCJ0aXRsZSIpfHwiIikuYXR0cigidGl0bGUiLCIiKX0sYy5wcm90b3R5cGUuaGFzQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGMucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKGIpe2I9Ynx8dGhpcy4kZWxlbWVudDt2YXIgYz1iWzBdLGQ9IkJPRFkiPT1jLnRhZ05hbWUsZT1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO251bGw9PWUud2lkdGgmJihlPWEuZXh0ZW5kKHt9LGUse3dpZHRoOmUucmlnaHQtZS5sZWZ0LGhlaWdodDplLmJvdHRvbS1lLnRvcH0pKTt2YXIgZj1kP3t0b3A6MCxsZWZ0OjB9OmIub2Zmc2V0KCksZz17c2Nyb2xsOmQ/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A6Yi5zY3JvbGxUb3AoKX0saD1kP3t3aWR0aDphKHdpbmRvdykud2lkdGgoKSxoZWlnaHQ6YSh3aW5kb3cpLmhlaWdodCgpfTpudWxsO3JldHVybiBhLmV4dGVuZCh7fSxlLGcsaCxmKX0sYy5wcm90b3R5cGUuZ2V0Q2FsY3VsYXRlZE9mZnNldD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4iYm90dG9tIj09YT97dG9wOmIudG9wK2IuaGVpZ2h0LGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OiJ0b3AiPT1hP3t0b3A6Yi50b3AtZCxsZWZ0OmIubGVmdCtiLndpZHRoLzItYy8yfToibGVmdCI9PWE/e3RvcDpiLnRvcCtiLmhlaWdodC8yLWQvMixsZWZ0OmIubGVmdC1jfTp7dG9wOmIudG9wK2IuaGVpZ2h0LzItZC8yLGxlZnQ6Yi5sZWZ0K2Iud2lkdGh9fSxjLnByb3RvdHlwZS5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGE9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9e3RvcDowLGxlZnQ6MH07aWYoIXRoaXMuJHZpZXdwb3J0KXJldHVybiBlO3ZhciBmPXRoaXMub3B0aW9ucy52aWV3cG9ydCYmdGhpcy5vcHRpb25zLnZpZXdwb3J0LnBhZGRpbmd8fDAsZz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtpZigvcmlnaHR8bGVmdC8udGVzdChhKSl7dmFyIGg9Yi50b3AtZi1nLnNjcm9sbCxpPWIudG9wK2YtZy5zY3JvbGwrZDtoPGcudG9wP2UudG9wPWcudG9wLWg6aT5nLnRvcCtnLmhlaWdodCYmKGUudG9wPWcudG9wK2cuaGVpZ2h0LWkpfWVsc2V7dmFyIGo9Yi5sZWZ0LWYsaz1iLmxlZnQrZitjO2o8Zy5sZWZ0P2UubGVmdD1nLmxlZnQtajprPmcucmlnaHQmJihlLmxlZnQ9Zy5sZWZ0K2cud2lkdGgtayl9cmV0dXJuIGV9LGMucHJvdG90eXBlLmdldFRpdGxlPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLiRlbGVtZW50LGM9dGhpcy5vcHRpb25zO3JldHVybiBhPWIuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpfHwoImZ1bmN0aW9uIj09dHlwZW9mIGMudGl0bGU/Yy50aXRsZS5jYWxsKGJbMF0pOmMudGl0bGUpfSxjLnByb3RvdHlwZS5nZXRVSUQ9ZnVuY3Rpb24oYSl7ZG8gYSs9fn4oMWU2Kk1hdGgucmFuZG9tKCkpO3doaWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKTtyZXR1cm4gYX0sYy5wcm90b3R5cGUudGlwPWZ1bmN0aW9uKCl7aWYoIXRoaXMuJHRpcCYmKHRoaXMuJHRpcD1hKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSksMSE9dGhpcy4kdGlwLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKHRoaXMudHlwZSsiIGB0ZW1wbGF0ZWAgb3B0aW9uIG11c3QgY29uc2lzdCBvZiBleGFjdGx5IDEgdG9wLWxldmVsIGVsZW1lbnQhIik7cmV0dXJuIHRoaXMuJHRpcH0sYy5wcm90b3R5cGUuYXJyb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZCgiLnRvb2x0aXAtYXJyb3ciKX0sYy5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSEwfSxjLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSExfSxjLnByb3RvdHlwZS50b2dnbGVFbmFibGVkPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSF0aGlzLmVuYWJsZWR9LGMucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihiKXt2YXIgYz10aGlzO2ImJihjPWEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSksY3x8KGM9bmV3IHRoaXMuY29uc3RydWN0b3IoYi5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLGEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSxjKSkpLGI/KGMuaW5TdGF0ZS5jbGljaz0hYy5pblN0YXRlLmNsaWNrLGMuaXNJblN0YXRlVHJ1ZSgpP2MuZW50ZXIoYyk6Yy5sZWF2ZShjKSk6Yy50aXAoKS5oYXNDbGFzcygiaW4iKT9jLmxlYXZlKGMpOmMuZW50ZXIoYyl9LGMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpLHRoaXMuaGlkZShmdW5jdGlvbigpe2EuJGVsZW1lbnQub2ZmKCIuIithLnR5cGUpLnJlbW92ZURhdGEoImJzLiIrYS50eXBlKSxhLiR0aXAmJmEuJHRpcC5kZXRhY2goKSxhLiR0aXA9bnVsbCxhLiRhcnJvdz1udWxsLGEuJHZpZXdwb3J0PW51bGx9KX07dmFyIGQ9YS5mbi50b29sdGlwO2EuZm4udG9vbHRpcD1iLGEuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvcj1jLGEuZm4udG9vbHRpcC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4udG9vbHRpcD1kLHRoaXN9fShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMucG9wb3ZlciIpLGY9Im9iamVjdCI9PXR5cGVvZiBiJiZiOyhlfHwhL2Rlc3Ryb3l8aGlkZS8udGVzdChiKSkmJihlfHxkLmRhdGEoImJzLnBvcG92ZXIiLGU9bmV3IGModGhpcyxmKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCkpfSl9dmFyIGM9ZnVuY3Rpb24oYSxiKXt0aGlzLmluaXQoInBvcG92ZXIiLGEsYil9O2lmKCFhLmZuLnRvb2x0aXApdGhyb3cgbmV3IEVycm9yKCJQb3BvdmVyIHJlcXVpcmVzIHRvb2x0aXAuanMiKTtjLlZFUlNJT049IjMuMy41IixjLkRFRkFVTFRTPWEuZXh0ZW5kKHt9LGEuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5ERUZBVUxUUyx7cGxhY2VtZW50OiJyaWdodCIsdHJpZ2dlcjoiY2xpY2siLGNvbnRlbnQ6IiIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InBvcG92ZXIiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj48aDMgY2xhc3M9InBvcG92ZXItdGl0bGUiPjwvaDM+PGRpdiBjbGFzcz0icG9wb3Zlci1jb250ZW50Ij48L2Rpdj48L2Rpdj4nfSksYy5wcm90b3R5cGU9YS5leHRlbmQoe30sYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yLnByb3RvdHlwZSksYy5wcm90b3R5cGUuY29uc3RydWN0b3I9YyxjLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBjLkRFRkFVTFRTfSxjLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50aXAoKSxiPXRoaXMuZ2V0VGl0bGUoKSxjPXRoaXMuZ2V0Q29udGVudCgpO2EuZmluZCgiLnBvcG92ZXItdGl0bGUiKVt0aGlzLm9wdGlvbnMuaHRtbD8iaHRtbCI6InRleHQiXShiKSxhLmZpbmQoIi5wb3BvdmVyLWNvbnRlbnQiKS5jaGlsZHJlbigpLmRldGFjaCgpLmVuZCgpW3RoaXMub3B0aW9ucy5odG1sPyJzdHJpbmciPT10eXBlb2YgYz8iaHRtbCI6ImFwcGVuZCI6InRleHQiXShjKSxhLnJlbW92ZUNsYXNzKCJmYWRlIHRvcCBib3R0b20gbGVmdCByaWdodCBpbiIpLGEuZmluZCgiLnBvcG92ZXItdGl0bGUiKS5odG1sKCl8fGEuZmluZCgiLnBvcG92ZXItdGl0bGUiKS5oaWRlKCl9LGMucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLmdldENvbnRlbnQoKX0sYy5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQsYj10aGlzLm9wdGlvbnM7cmV0dXJuIGEuYXR0cigiZGF0YS1jb250ZW50Iil8fCgiZnVuY3Rpb24iPT10eXBlb2YgYi5jb250ZW50P2IuY29udGVudC5jYWxsKGFbMF0pOmIuY29udGVudCl9LGMucHJvdG90eXBlLmFycm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFycm93PXRoaXMuJGFycm93fHx0aGlzLnRpcCgpLmZpbmQoIi5hcnJvdyIpfTt2YXIgZD1hLmZuLnBvcG92ZXI7YS5mbi5wb3BvdmVyPWIsYS5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPWMsYS5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5wb3BvdmVyPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGMsZCl7dGhpcy4kYm9keT1hKGRvY3VtZW50LmJvZHkpLHRoaXMuJHNjcm9sbEVsZW1lbnQ9YShhKGMpLmlzKGRvY3VtZW50LmJvZHkpP3dpbmRvdzpjKSx0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sYi5ERUZBVUxUUyxkKSx0aGlzLnNlbGVjdG9yPSh0aGlzLm9wdGlvbnMudGFyZ2V0fHwiIikrIiAubmF2IGxpID4gYSIsdGhpcy5vZmZzZXRzPVtdLHRoaXMudGFyZ2V0cz1bXSx0aGlzLmFjdGl2ZVRhcmdldD1udWxsLHRoaXMuc2Nyb2xsSGVpZ2h0PTAsdGhpcy4kc2Nyb2xsRWxlbWVudC5vbigic2Nyb2xsLmJzLnNjcm9sbHNweSIsYS5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcykpLHRoaXMucmVmcmVzaCgpLHRoaXMucHJvY2VzcygpfWZ1bmN0aW9uIGMoYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLnNjcm9sbHNweSIpLGY9Im9iamVjdCI9PXR5cGVvZiBjJiZjO2V8fGQuZGF0YSgiYnMuc2Nyb2xsc3B5IixlPW5ldyBiKHRoaXMsZikpLCJzdHJpbmciPT10eXBlb2YgYyYmZVtjXSgpfSl9Yi5WRVJTSU9OPSIzLjMuNSIsYi5ERUZBVUxUUz17b2Zmc2V0OjEwfSxiLnByb3RvdHlwZS5nZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2Nyb2xsRWxlbWVudFswXS5zY3JvbGxIZWlnaHR8fE1hdGgubWF4KHRoaXMuJGJvZHlbMF0uc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpfSxiLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPSJvZmZzZXQiLGQ9MDt0aGlzLm9mZnNldHM9W10sdGhpcy50YXJnZXRzPVtdLHRoaXMuc2Nyb2xsSGVpZ2h0PXRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCksYS5pc1dpbmRvdyh0aGlzLiRzY3JvbGxFbGVtZW50WzBdKXx8KGM9InBvc2l0aW9uIixkPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkpLHRoaXMuJGJvZHkuZmluZCh0aGlzLnNlbGVjdG9yKS5tYXAoZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpLGU9Yi5kYXRhKCJ0YXJnZXQiKXx8Yi5hdHRyKCJocmVmIiksZj0vXiMuLy50ZXN0KGUpJiZhKGUpO3JldHVybiBmJiZmLmxlbmd0aCYmZi5pcygiOnZpc2libGUiKSYmW1tmW2NdKCkudG9wK2QsZV1dfHxudWxsfSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhWzBdLWJbMF19KS5lYWNoKGZ1bmN0aW9uKCl7Yi5vZmZzZXRzLnB1c2godGhpc1swXSksYi50YXJnZXRzLnB1c2godGhpc1sxXSl9KX0sYi5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSt0aGlzLm9wdGlvbnMub2Zmc2V0LGM9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSxkPXRoaXMub3B0aW9ucy5vZmZzZXQrYy10aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpLGU9dGhpcy5vZmZzZXRzLGY9dGhpcy50YXJnZXRzLGc9dGhpcy5hY3RpdmVUYXJnZXQ7aWYodGhpcy5zY3JvbGxIZWlnaHQhPWMmJnRoaXMucmVmcmVzaCgpLGI+PWQpcmV0dXJuIGchPShhPWZbZi5sZW5ndGgtMV0pJiZ0aGlzLmFjdGl2YXRlKGEpO2lmKGcmJmI8ZVswXSlyZXR1cm4gdGhpcy5hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLmNsZWFyKCk7Zm9yKGE9ZS5sZW5ndGg7YS0tOylnIT1mW2FdJiZiPj1lW2FdJiYodm9pZCAwPT09ZVthKzFdfHxiPGVbYSsxXSkmJnRoaXMuYWN0aXZhdGUoZlthXSl9LGIucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGIpe3RoaXMuYWN0aXZlVGFyZ2V0PWIsdGhpcy5jbGVhcigpO3ZhciBjPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD0iJytiKyciXSwnK3RoaXMuc2VsZWN0b3IrJ1tocmVmPSInK2IrJyJdJyxkPWEoYykucGFyZW50cygibGkiKS5hZGRDbGFzcygiYWN0aXZlIik7ZC5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiYoZD1kLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpKSwKZC50cmlnZ2VyKCJhY3RpdmF0ZS5icy5zY3JvbGxzcHkiKX0sYi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXthKHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpfTt2YXIgZD1hLmZuLnNjcm9sbHNweTthLmZuLnNjcm9sbHNweT1jLGEuZm4uc2Nyb2xsc3B5LkNvbnN0cnVjdG9yPWIsYS5mbi5zY3JvbGxzcHkubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnNjcm9sbHNweT1kLHRoaXN9LGEod2luZG93KS5vbigibG9hZC5icy5zY3JvbGxzcHkuZGF0YS1hcGkiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PSJzY3JvbGwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpO2MuY2FsbChiLGIuZGF0YSgpKX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy50YWIiKTtlfHxkLmRhdGEoImJzLnRhYiIsZT1uZXcgYyh0aGlzKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgYz1mdW5jdGlvbihiKXt0aGlzLmVsZW1lbnQ9YShiKX07Yy5WRVJTSU9OPSIzLjMuNSIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LGM9Yi5jbG9zZXN0KCJ1bDpub3QoLmRyb3Bkb3duLW1lbnUpIiksZD1iLmRhdGEoInRhcmdldCIpO2lmKGR8fChkPWIuYXR0cigiaHJlZiIpLGQ9ZCYmZC5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpKSwhYi5wYXJlbnQoImxpIikuaGFzQ2xhc3MoImFjdGl2ZSIpKXt2YXIgZT1jLmZpbmQoIi5hY3RpdmU6bGFzdCBhIiksZj1hLkV2ZW50KCJoaWRlLmJzLnRhYiIse3JlbGF0ZWRUYXJnZXQ6YlswXX0pLGc9YS5FdmVudCgic2hvdy5icy50YWIiLHtyZWxhdGVkVGFyZ2V0OmVbMF19KTtpZihlLnRyaWdnZXIoZiksYi50cmlnZ2VyKGcpLCFnLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYhZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGg9YShkKTt0aGlzLmFjdGl2YXRlKGIuY2xvc2VzdCgibGkiKSxjKSx0aGlzLmFjdGl2YXRlKGgsaC5wYXJlbnQoKSxmdW5jdGlvbigpe2UudHJpZ2dlcih7dHlwZToiaGlkZGVuLmJzLnRhYiIscmVsYXRlZFRhcmdldDpiWzBdfSksYi50cmlnZ2VyKHt0eXBlOiJzaG93bi5icy50YWIiLHJlbGF0ZWRUYXJnZXQ6ZVswXX0pfSl9fX0sYy5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oYixkLGUpe2Z1bmN0aW9uIGYoKXtnLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5maW5kKCI+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5lbmQoKS5maW5kKCdbZGF0YS10b2dnbGU9InRhYiJdJykuYXR0cigiYXJpYS1leHBhbmRlZCIsITEpLGIuYWRkQ2xhc3MoImFjdGl2ZSIpLmZpbmQoJ1tkYXRhLXRvZ2dsZT0idGFiIl0nKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksaD8oYlswXS5vZmZzZXRXaWR0aCxiLmFkZENsYXNzKCJpbiIpKTpiLnJlbW92ZUNsYXNzKCJmYWRlIiksYi5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiZiLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpLmVuZCgpLmZpbmQoJ1tkYXRhLXRvZ2dsZT0idGFiIl0nKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksZSYmZSgpfXZhciBnPWQuZmluZCgiPiAuYWN0aXZlIiksaD1lJiZhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGcubGVuZ3RoJiZnLmhhc0NsYXNzKCJmYWRlIil8fCEhZC5maW5kKCI+IC5mYWRlIikubGVuZ3RoKTtnLmxlbmd0aCYmaD9nLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmYoKSxnLnJlbW92ZUNsYXNzKCJpbiIpfTt2YXIgZD1hLmZuLnRhYjthLmZuLnRhYj1iLGEuZm4udGFiLkNvbnN0cnVjdG9yPWMsYS5mbi50YWIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnRhYj1kLHRoaXN9O3ZhciBlPWZ1bmN0aW9uKGMpe2MucHJldmVudERlZmF1bHQoKSxiLmNhbGwoYSh0aGlzKSwic2hvdyIpfTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMudGFiLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJ0YWIiXScsZSkub24oImNsaWNrLmJzLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0icGlsbCJdJyxlKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLmFmZml4IiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKCJicy5hZmZpeCIsZT1uZXcgYyh0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBjPWZ1bmN0aW9uKGIsZCl7dGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZCksdGhpcy4kdGFyZ2V0PWEodGhpcy5vcHRpb25zLnRhcmdldCkub24oInNjcm9sbC5icy5hZmZpeC5kYXRhLWFwaSIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpLm9uKCJjbGljay5icy5hZmZpeC5kYXRhLWFwaSIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wLHRoaXMpKSx0aGlzLiRlbGVtZW50PWEoYiksdGhpcy5hZmZpeGVkPW51bGwsdGhpcy51bnBpbj1udWxsLHRoaXMucGlubmVkT2Zmc2V0PW51bGwsdGhpcy5jaGVja1Bvc2l0aW9uKCl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuUkVTRVQ9ImFmZml4IGFmZml4LXRvcCBhZmZpeC1ib3R0b20iLGMuREVGQVVMVFM9e29mZnNldDowLHRhcmdldDp3aW5kb3d9LGMucHJvdG90eXBlLmdldFN0YXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKSxmPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCksZz10aGlzLiR0YXJnZXQuaGVpZ2h0KCk7aWYobnVsbCE9YyYmInRvcCI9PXRoaXMuYWZmaXhlZClyZXR1cm4gYz5lPyJ0b3AiOiExO2lmKCJib3R0b20iPT10aGlzLmFmZml4ZWQpcmV0dXJuIG51bGwhPWM/ZSt0aGlzLnVucGluPD1mLnRvcD8hMToiYm90dG9tIjphLWQ+PWUrZz8hMToiYm90dG9tIjt2YXIgaD1udWxsPT10aGlzLmFmZml4ZWQsaT1oP2U6Zi50b3Asaj1oP2c6YjtyZXR1cm4gbnVsbCE9YyYmYz49ZT8idG9wIjpudWxsIT1kJiZpK2o+PWEtZD8iYm90dG9tIjohMX0sYy5wcm90b3R5cGUuZ2V0UGlubmVkT2Zmc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5waW5uZWRPZmZzZXQpcmV0dXJuIHRoaXMucGlubmVkT2Zmc2V0O3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoYy5SRVNFVCkuYWRkQ2xhc3MoImFmZml4Iik7dmFyIGE9dGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpLGI9dGhpcy4kZWxlbWVudC5vZmZzZXQoKTtyZXR1cm4gdGhpcy5waW5uZWRPZmZzZXQ9Yi50b3AtYX0sYy5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3A9ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGEucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpLDEpfSxjLnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uPWZ1bmN0aW9uKCl7aWYodGhpcy4kZWxlbWVudC5pcygiOnZpc2libGUiKSl7dmFyIGI9dGhpcy4kZWxlbWVudC5oZWlnaHQoKSxkPXRoaXMub3B0aW9ucy5vZmZzZXQsZT1kLnRvcCxmPWQuYm90dG9tLGc9TWF0aC5tYXgoYShkb2N1bWVudCkuaGVpZ2h0KCksYShkb2N1bWVudC5ib2R5KS5oZWlnaHQoKSk7Im9iamVjdCIhPXR5cGVvZiBkJiYoZj1lPWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZT1kLnRvcCh0aGlzLiRlbGVtZW50KSksImZ1bmN0aW9uIj09dHlwZW9mIGYmJihmPWQuYm90dG9tKHRoaXMuJGVsZW1lbnQpKTt2YXIgaD10aGlzLmdldFN0YXRlKGcsYixlLGYpO2lmKHRoaXMuYWZmaXhlZCE9aCl7bnVsbCE9dGhpcy51bnBpbiYmdGhpcy4kZWxlbWVudC5jc3MoInRvcCIsIiIpO3ZhciBpPSJhZmZpeCIrKGg/Ii0iK2g6IiIpLGo9YS5FdmVudChpKyIuYnMuYWZmaXgiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoaiksai5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5hZmZpeGVkPWgsdGhpcy51bnBpbj0iYm90dG9tIj09aD90aGlzLmdldFBpbm5lZE9mZnNldCgpOm51bGwsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhjLlJFU0VUKS5hZGRDbGFzcyhpKS50cmlnZ2VyKGkucmVwbGFjZSgiYWZmaXgiLCJhZmZpeGVkIikrIi5icy5hZmZpeCIpfSJib3R0b20iPT1oJiZ0aGlzLiRlbGVtZW50Lm9mZnNldCh7dG9wOmctYi1mfSl9fTt2YXIgZD1hLmZuLmFmZml4O2EuZm4uYWZmaXg9YixhLmZuLmFmZml4LkNvbnN0cnVjdG9yPWMsYS5mbi5hZmZpeC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYWZmaXg9ZCx0aGlzfSxhKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PSJhZmZpeCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoKTtkLm9mZnNldD1kLm9mZnNldHx8e30sbnVsbCE9ZC5vZmZzZXRCb3R0b20mJihkLm9mZnNldC5ib3R0b209ZC5vZmZzZXRCb3R0b20pLG51bGwhPWQub2Zmc2V0VG9wJiYoZC5vZmZzZXQudG9wPWQub2Zmc2V0VG9wKSxiLmNhbGwoYyxkKX0pfSl9KGpRdWVyeSk7"></script>
<script src="data:application/javascript;base64,LyoqCiogQHByZXNlcnZlIEhUTUw1IFNoaXYgMy43LjIgfCBAYWZhcmthcyBAamRhbHRvbiBAam9uX25lYWwgQHJlbSB8IE1JVC9HUEwyIExpY2Vuc2VkCiovCi8vIE9ubHkgcnVuIHRoaXMgY29kZSBpbiBJRSA4CmlmICghIXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKCJNU0lFIDgiKSkgewohZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7dmFyIGM9YS5jcmVhdGVFbGVtZW50KCJwIiksZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGEuZG9jdW1lbnRFbGVtZW50O3JldHVybiBjLmlubmVySFRNTD0ieDxzdHlsZT4iK2IrIjwvc3R5bGU+IixkLmluc2VydEJlZm9yZShjLmxhc3RDaGlsZCxkLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGQoKXt2YXIgYT10LmVsZW1lbnRzO3JldHVybiJzdHJpbmciPT10eXBlb2YgYT9hLnNwbGl0KCIgIik6YX1mdW5jdGlvbiBlKGEsYil7dmFyIGM9dC5lbGVtZW50czsic3RyaW5nIiE9dHlwZW9mIGMmJihjPWMuam9pbigiICIpKSwic3RyaW5nIiE9dHlwZW9mIGEmJihhPWEuam9pbigiICIpKSx0LmVsZW1lbnRzPWMrIiAiK2EsaihiKX1mdW5jdGlvbiBmKGEpe3ZhciBiPXNbYVtxXV07cmV0dXJuIGJ8fChiPXt9LHIrKyxhW3FdPXIsc1tyXT1iKSxifWZ1bmN0aW9uIGcoYSxjLGQpe2lmKGN8fChjPWIpLGwpcmV0dXJuIGMuY3JlYXRlRWxlbWVudChhKTtkfHwoZD1mKGMpKTt2YXIgZTtyZXR1cm4gZT1kLmNhY2hlW2FdP2QuY2FjaGVbYV0uY2xvbmVOb2RlKCk6cC50ZXN0KGEpPyhkLmNhY2hlW2FdPWQuY3JlYXRlRWxlbShhKSkuY2xvbmVOb2RlKCk6ZC5jcmVhdGVFbGVtKGEpLCFlLmNhbkhhdmVDaGlsZHJlbnx8by50ZXN0KGEpfHxlLnRhZ1Vybj9lOmQuZnJhZy5hcHBlbmRDaGlsZChlKX1mdW5jdGlvbiBoKGEsYyl7aWYoYXx8KGE9YiksbClyZXR1cm4gYS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yz1jfHxmKGEpO2Zvcih2YXIgZT1jLmZyYWcuY2xvbmVOb2RlKCksZz0wLGg9ZCgpLGk9aC5sZW5ndGg7aT5nO2crKyllLmNyZWF0ZUVsZW1lbnQoaFtnXSk7cmV0dXJuIGV9ZnVuY3Rpb24gaShhLGIpe2IuY2FjaGV8fChiLmNhY2hlPXt9LGIuY3JlYXRlRWxlbT1hLmNyZWF0ZUVsZW1lbnQsYi5jcmVhdGVGcmFnPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxiLmZyYWc9Yi5jcmVhdGVGcmFnKCkpLGEuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihjKXtyZXR1cm4gdC5zaGl2TWV0aG9kcz9nKGMsYSxiKTpiLmNyZWF0ZUVsZW0oYyl9LGEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudD1GdW5jdGlvbigiaCxmIiwicmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49Zi5jbG9uZU5vZGUoKSxjPW4uY3JlYXRlRWxlbWVudDtoLnNoaXZNZXRob2RzJiYoIitkKCkuam9pbigpLnJlcGxhY2UoL1tcd1wtOl0rL2csZnVuY3Rpb24oYSl7cmV0dXJuIGIuY3JlYXRlRWxlbShhKSxiLmZyYWcuY3JlYXRlRWxlbWVudChhKSwnYygiJythKyciKSd9KSsiKTtyZXR1cm4gbn0iKSh0LGIuZnJhZyl9ZnVuY3Rpb24gaihhKXthfHwoYT1iKTt2YXIgZD1mKGEpO3JldHVybiF0LnNoaXZDU1N8fGt8fGQuaGFzQ1NTfHwoZC5oYXNDU1M9ISFjKGEsImFydGljbGUsYXNpZGUsZGlhbG9nLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsaGdyb3VwLG1haW4sbmF2LHNlY3Rpb257ZGlzcGxheTpibG9ja31tYXJre2JhY2tncm91bmQ6I0ZGMDtjb2xvcjojMDAwfXRlbXBsYXRle2Rpc3BsYXk6bm9uZX0iKSksbHx8aShhLGQpLGF9dmFyIGssbCxtPSIzLjcuMiIsbj1hLmh0bWw1fHx7fSxvPS9ePHxeKD86YnV0dG9ufG1hcHxzZWxlY3R8dGV4dGFyZWF8b2JqZWN0fGlmcmFtZXxvcHRpb258b3B0Z3JvdXApJC9pLHA9L14oPzphfGJ8Y29kZXxkaXZ8ZmllbGRzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aXxsYWJlbHxsaXxvbHxwfHF8c3BhbnxzdHJvbmd8c3R5bGV8dGFibGV8dGJvZHl8dGR8dGh8dHJ8dWwpJC9pLHE9Il9odG1sNXNoaXYiLHI9MCxzPXt9OyFmdW5jdGlvbigpe3RyeXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImEiKTthLmlubmVySFRNTD0iPHh5ej48L3h5ej4iLGs9ImhpZGRlbiJpbiBhLGw9MT09YS5jaGlsZE5vZGVzLmxlbmd0aHx8ZnVuY3Rpb24oKXtiLmNyZWF0ZUVsZW1lbnQoImEiKTt2YXIgYT1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGEuY2xvbmVOb2RlfHwidW5kZWZpbmVkIj09dHlwZW9mIGEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudHx8InVuZGVmaW5lZCI9PXR5cGVvZiBhLmNyZWF0ZUVsZW1lbnR9KCl9Y2F0Y2goYyl7az0hMCxsPSEwfX0oKTt2YXIgdD17ZWxlbWVudHM6bi5lbGVtZW50c3x8ImFiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBiZGkgY2FudmFzIGRhdGEgZGF0YWxpc3QgZGV0YWlscyBkaWFsb2cgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFpbiBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcGljdHVyZSBwcm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGVtcGxhdGUgdGltZSB2aWRlbyIsdmVyc2lvbjptLHNoaXZDU1M6bi5zaGl2Q1NTIT09ITEsc3VwcG9ydHNVbmtub3duRWxlbWVudHM6bCxzaGl2TWV0aG9kczpuLnNoaXZNZXRob2RzIT09ITEsdHlwZToiZGVmYXVsdCIsc2hpdkRvY3VtZW50OmosY3JlYXRlRWxlbWVudDpnLGNyZWF0ZURvY3VtZW50RnJhZ21lbnQ6aCxhZGRFbGVtZW50czplfTthLmh0bWw1PXQsaihiKX0odGhpcyxkb2N1bWVudCk7Cn07Cg=="></script>
<script src="data:application/javascript;base64,LyohIFJlc3BvbmQuanMgdjEuNC4yOiBtaW4vbWF4LXdpZHRoIG1lZGlhIHF1ZXJ5IHBvbHlmaWxsICogQ29weXJpZ2h0IDIwMTMgU2NvdHQgSmVobAogKiBMaWNlbnNlZCB1bmRlciBodHRwczovL2dpdGh1Yi5jb20vc2NvdHRqZWhsL1Jlc3BvbmQvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVQKICogICovCgovLyBPbmx5IHJ1biB0aGlzIGNvZGUgaW4gSUUgOAppZiAoISF3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgiTVNJRSA4IikpIHsKIWZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjthLm1hdGNoTWVkaWE9YS5tYXRjaE1lZGlhfHxmdW5jdGlvbihhKXt2YXIgYixjPWEuZG9jdW1lbnRFbGVtZW50LGQ9Yy5maXJzdEVsZW1lbnRDaGlsZHx8Yy5maXJzdENoaWxkLGU9YS5jcmVhdGVFbGVtZW50KCJib2R5IiksZj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBmLmlkPSJtcS10ZXN0LTEiLGYuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7dG9wOi0xMDBlbSIsZS5zdHlsZS5iYWNrZ3JvdW5kPSJub25lIixlLmFwcGVuZENoaWxkKGYpLGZ1bmN0aW9uKGEpe3JldHVybiBmLmlubmVySFRNTD0nJnNoeTs8c3R5bGUgbWVkaWE9IicrYSsnIj4gI21xLXRlc3QtMSB7IHdpZHRoOiA0MnB4OyB9PC9zdHlsZT4nLGMuaW5zZXJ0QmVmb3JlKGUsZCksYj00Mj09PWYub2Zmc2V0V2lkdGgsYy5yZW1vdmVDaGlsZChlKSx7bWF0Y2hlczpiLG1lZGlhOmF9fX0oYS5kb2N1bWVudCl9KHRoaXMpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKCl7dSghMCl9dmFyIGM9e307YS5yZXNwb25kPWMsYy51cGRhdGU9ZnVuY3Rpb24oKXt9O3ZhciBkPVtdLGU9ZnVuY3Rpb24oKXt2YXIgYj0hMTt0cnl7Yj1uZXcgYS5YTUxIdHRwUmVxdWVzdH1jYXRjaChjKXtiPW5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGJ9fSgpLGY9ZnVuY3Rpb24oYSxiKXt2YXIgYz1lKCk7YyYmKGMub3BlbigiR0VUIixhLCEwKSxjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQhPT1jLnJlYWR5U3RhdGV8fDIwMCE9PWMuc3RhdHVzJiYzMDQhPT1jLnN0YXR1c3x8YihjLnJlc3BvbnNlVGV4dCl9LDQhPT1jLnJlYWR5U3RhdGUmJmMuc2VuZChudWxsKSl9O2lmKGMuYWpheD1mLGMucXVldWU9ZCxjLnJlZ2V4PXttZWRpYTovQG1lZGlhW15ce10rXHsoW15ce1x9XSpce1teXH1ce10qXH0pKy9naSxrZXlmcmFtZXM6L0AoPzpcLSg/Om98bW96fHdlYmtpdClcLSk/a2V5ZnJhbWVzW15ce10rXHsoPzpbXlx7XH1dKlx7W15cfVx7XSpcfSkrW15cfV0qXH0vZ2ksdXJsczovKHVybFwoKVsnIl0/KFteXC9cKSciXVteOlwpJyJdKylbJyJdPyhcKSkvZyxmaW5kU3R5bGVzOi9AbWVkaWEgKihbXlx7XSspXHsoW1xTXHNdKz8pJC8sb25seTovKG9ubHlccyspPyhbYS16QS1aXSspXHM/LyxtaW53Oi9cKFtcc10qbWluXC13aWR0aFxzKjpbXHNdKihbXHNdKlswLTlcLl0rKShweHxlbSlbXHNdKlwpLyxtYXh3Oi9cKFtcc10qbWF4XC13aWR0aFxzKjpbXHNdKihbXHNdKlswLTlcLl0rKShweHxlbSlbXHNdKlwpL30sYy5tZWRpYVF1ZXJpZXNTdXBwb3J0ZWQ9YS5tYXRjaE1lZGlhJiZudWxsIT09YS5tYXRjaE1lZGlhKCJvbmx5IGFsbCIpJiZhLm1hdGNoTWVkaWEoIm9ubHkgYWxsIikubWF0Y2hlcywhYy5tZWRpYVF1ZXJpZXNTdXBwb3J0ZWQpe3ZhciBnLGgsaSxqPWEuZG9jdW1lbnQsaz1qLmRvY3VtZW50RWxlbWVudCxsPVtdLG09W10sbj1bXSxvPXt9LHA9MzAscT1qLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGsscj1qLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJiYXNlIilbMF0scz1xLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIiksdD1mdW5jdGlvbigpe3ZhciBhLGI9ai5jcmVhdGVFbGVtZW50KCJkaXYiKSxjPWouYm9keSxkPWsuc3R5bGUuZm9udFNpemUsZT1jJiZjLnN0eWxlLmZvbnRTaXplLGY9ITE7cmV0dXJuIGIuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjFlbTt3aWR0aDoxZW0iLGN8fChjPWY9ai5jcmVhdGVFbGVtZW50KCJib2R5IiksYy5zdHlsZS5iYWNrZ3JvdW5kPSJub25lIiksay5zdHlsZS5mb250U2l6ZT0iMTAwJSIsYy5zdHlsZS5mb250U2l6ZT0iMTAwJSIsYy5hcHBlbmRDaGlsZChiKSxmJiZrLmluc2VydEJlZm9yZShjLGsuZmlyc3RDaGlsZCksYT1iLm9mZnNldFdpZHRoLGY/ay5yZW1vdmVDaGlsZChjKTpjLnJlbW92ZUNoaWxkKGIpLGsuc3R5bGUuZm9udFNpemU9ZCxlJiYoYy5zdHlsZS5mb250U2l6ZT1lKSxhPWk9cGFyc2VGbG9hdChhKX0sdT1mdW5jdGlvbihiKXt2YXIgYz0iY2xpZW50V2lkdGgiLGQ9a1tjXSxlPSJDU1MxQ29tcGF0Ij09PWouY29tcGF0TW9kZSYmZHx8ai5ib2R5W2NdfHxkLGY9e30sbz1zW3MubGVuZ3RoLTFdLHI9KG5ldyBEYXRlKS5nZXRUaW1lKCk7aWYoYiYmZyYmcD5yLWcpcmV0dXJuIGEuY2xlYXJUaW1lb3V0KGgpLGg9YS5zZXRUaW1lb3V0KHUscCksdm9pZCAwO2c9cjtmb3IodmFyIHYgaW4gbClpZihsLmhhc093blByb3BlcnR5KHYpKXt2YXIgdz1sW3ZdLHg9dy5taW53LHk9dy5tYXh3LHo9bnVsbD09PXgsQT1udWxsPT09eSxCPSJlbSI7eCYmKHg9cGFyc2VGbG9hdCh4KSooeC5pbmRleE9mKEIpPi0xP2l8fHQoKToxKSkseSYmKHk9cGFyc2VGbG9hdCh5KSooeS5pbmRleE9mKEIpPi0xP2l8fHQoKToxKSksdy5oYXNxdWVyeSYmKHomJkF8fCEoenx8ZT49eCl8fCEoQXx8eT49ZSkpfHwoZlt3Lm1lZGlhXXx8KGZbdy5tZWRpYV09W10pLGZbdy5tZWRpYV0ucHVzaChtW3cucnVsZXNdKSl9Zm9yKHZhciBDIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShDKSYmbltDXSYmbltDXS5wYXJlbnROb2RlPT09cSYmcS5yZW1vdmVDaGlsZChuW0NdKTtuLmxlbmd0aD0wO2Zvcih2YXIgRCBpbiBmKWlmKGYuaGFzT3duUHJvcGVydHkoRCkpe3ZhciBFPWouY3JlYXRlRWxlbWVudCgic3R5bGUiKSxGPWZbRF0uam9pbigiXG4iKTtFLnR5cGU9InRleHQvY3NzIixFLm1lZGlhPUQscS5pbnNlcnRCZWZvcmUoRSxvLm5leHRTaWJsaW5nKSxFLnN0eWxlU2hlZXQ/RS5zdHlsZVNoZWV0LmNzc1RleHQ9RjpFLmFwcGVuZENoaWxkKGouY3JlYXRlVGV4dE5vZGUoRikpLG4ucHVzaChFKX19LHY9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEucmVwbGFjZShjLnJlZ2V4LmtleWZyYW1lcywiIikubWF0Y2goYy5yZWdleC5tZWRpYSksZj1lJiZlLmxlbmd0aHx8MDtiPWIuc3Vic3RyaW5nKDAsYi5sYXN0SW5kZXhPZigiLyIpKTt2YXIgZz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKGMucmVnZXgudXJscywiJDEiK2IrIiQyJDMiKX0saD0hZiYmZDtiLmxlbmd0aCYmKGIrPSIvIiksaCYmKGY9MSk7Zm9yKHZhciBpPTA7Zj5pO2krKyl7dmFyIGosayxuLG87aD8oaj1kLG0ucHVzaChnKGEpKSk6KGo9ZVtpXS5tYXRjaChjLnJlZ2V4LmZpbmRTdHlsZXMpJiZSZWdFeHAuJDEsbS5wdXNoKFJlZ0V4cC4kMiYmZyhSZWdFeHAuJDIpKSksbj1qLnNwbGl0KCIsIiksbz1uLmxlbmd0aDtmb3IodmFyIHA9MDtvPnA7cCsrKWs9bltwXSxsLnB1c2goe21lZGlhOmsuc3BsaXQoIigiKVswXS5tYXRjaChjLnJlZ2V4Lm9ubHkpJiZSZWdFeHAuJDJ8fCJhbGwiLHJ1bGVzOm0ubGVuZ3RoLTEsaGFzcXVlcnk6ay5pbmRleE9mKCIoIik+LTEsbWludzprLm1hdGNoKGMucmVnZXgubWludykmJnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsoUmVnRXhwLiQyfHwiIiksbWF4dzprLm1hdGNoKGMucmVnZXgubWF4dykmJnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsoUmVnRXhwLiQyfHwiIil9KX11KCl9LHc9ZnVuY3Rpb24oKXtpZihkLmxlbmd0aCl7dmFyIGI9ZC5zaGlmdCgpO2YoYi5ocmVmLGZ1bmN0aW9uKGMpe3YoYyxiLmhyZWYsYi5tZWRpYSksb1tiLmhyZWZdPSEwLGEuc2V0VGltZW91dChmdW5jdGlvbigpe3coKX0sMCl9KX19LHg9ZnVuY3Rpb24oKXtmb3IodmFyIGI9MDtiPHMubGVuZ3RoO2IrKyl7dmFyIGM9c1tiXSxlPWMuaHJlZixmPWMubWVkaWEsZz1jLnJlbCYmInN0eWxlc2hlZXQiPT09Yy5yZWwudG9Mb3dlckNhc2UoKTtlJiZnJiYhb1tlXSYmKGMuc3R5bGVTaGVldCYmYy5zdHlsZVNoZWV0LnJhd0Nzc1RleHQ/KHYoYy5zdHlsZVNoZWV0LnJhd0Nzc1RleHQsZSxmKSxvW2VdPSEwKTooIS9eKFthLXpBLVo6XSpcL1wvKS8udGVzdChlKSYmIXJ8fGUucmVwbGFjZShSZWdFeHAuJDEsIiIpLnNwbGl0KCIvIilbMF09PT1hLmxvY2F0aW9uLmhvc3QpJiYoIi8vIj09PWUuc3Vic3RyaW5nKDAsMikmJihlPWEubG9jYXRpb24ucHJvdG9jb2wrZSksZC5wdXNoKHtocmVmOmUsbWVkaWE6Zn0pKSl9dygpfTt4KCksYy51cGRhdGU9eCxjLmdldEVtVmFsdWU9dCxhLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGIsITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9ucmVzaXplIixiKX19KHRoaXMpOwp9Owo="></script>
<style>h1 {font-size: 34px;}
       h1.title {font-size: 38px;}
       h2 {font-size: 30px;}
       h3 {font-size: 24px;}
       h4 {font-size: 18px;}
       h5 {font-size: 16px;}
       h6 {font-size: 12px;}
       code {color: inherit; background-color: rgba(0, 0, 0, 0.04);}
       pre:not([class]) { background-color: white }</style>
<script src="data:application/javascript;base64,LyohIGpRdWVyeSBVSSAtIHYxLjExLjQgLSAyMDE2LTAxLTA1CiogaHR0cDovL2pxdWVyeXVpLmNvbQoqIEluY2x1ZGVzOiBjb3JlLmpzLCB3aWRnZXQuanMsIG1vdXNlLmpzLCBwb3NpdGlvbi5qcywgZHJhZ2dhYmxlLmpzLCBkcm9wcGFibGUuanMsIHJlc2l6YWJsZS5qcywgc2VsZWN0YWJsZS5qcywgc29ydGFibGUuanMsIGFjY29yZGlvbi5qcywgYXV0b2NvbXBsZXRlLmpzLCBidXR0b24uanMsIGRpYWxvZy5qcywgbWVudS5qcywgcHJvZ3Jlc3NiYXIuanMsIHNlbGVjdG1lbnUuanMsIHNsaWRlci5qcywgc3Bpbm5lci5qcywgdGFicy5qcywgdG9vbHRpcC5qcywgZWZmZWN0LmpzLCBlZmZlY3QtYmxpbmQuanMsIGVmZmVjdC1ib3VuY2UuanMsIGVmZmVjdC1jbGlwLmpzLCBlZmZlY3QtZHJvcC5qcywgZWZmZWN0LWV4cGxvZGUuanMsIGVmZmVjdC1mYWRlLmpzLCBlZmZlY3QtZm9sZC5qcywgZWZmZWN0LWhpZ2hsaWdodC5qcywgZWZmZWN0LXB1ZmYuanMsIGVmZmVjdC1wdWxzYXRlLmpzLCBlZmZlY3Qtc2NhbGUuanMsIGVmZmVjdC1zaGFrZS5qcywgZWZmZWN0LXNpemUuanMsIGVmZmVjdC1zbGlkZS5qcywgZWZmZWN0LXRyYW5zZmVyLmpzCiogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqLwoKKGZ1bmN0aW9uKGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5Il0sZSk6ZShqUXVlcnkpfSkoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LHMpe3ZhciBuLGEsbyxyPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iYXJlYSI9PT1yPyhuPXQucGFyZW50Tm9kZSxhPW4ubmFtZSx0LmhyZWYmJmEmJiJtYXAiPT09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPyhvPWUoImltZ1t1c2VtYXA9JyMiK2ErIiddIilbMF0sISFvJiZpKG8pKTohMSk6KC9eKGlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvLnRlc3Qocik/IXQuZGlzYWJsZWQ6ImEiPT09cj90LmhyZWZ8fHM6cykmJmkodCl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZS5leHByLmZpbHRlcnMudmlzaWJsZSh0KSYmIWUodCkucGFyZW50cygpLmFkZEJhY2soKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4iaGlkZGVuIj09PWUuY3NzKHRoaXMsInZpc2liaWxpdHkiKX0pLmxlbmd0aH1mdW5jdGlvbiBzKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudC52YWwoKTtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9yZWZyZXNoKCksdCE9PXRoaXMuZWxlbWVudC52YWwoKSYmdGhpcy5fdHJpZ2dlcigiY2hhbmdlIil9fWUudWk9ZS51aXx8e30sZS5leHRlbmQoZS51aSx7dmVyc2lvbjoiMS4xMS40IixrZXlDb2RlOntCQUNLU1BBQ0U6OCxDT01NQToxODgsREVMRVRFOjQ2LERPV046NDAsRU5EOjM1LEVOVEVSOjEzLEVTQ0FQRToyNyxIT01FOjM2LExFRlQ6MzcsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEVSSU9EOjE5MCxSSUdIVDozOSxTUEFDRTozMixUQUI6OSxVUDozOH19KSxlLmZuLmV4dGVuZCh7c2Nyb2xsUGFyZW50OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuY3NzKCJwb3NpdGlvbiIpLHM9ImFic29sdXRlIj09PWksbj10Py8oYXV0b3xzY3JvbGx8aGlkZGVuKS86LyhhdXRvfHNjcm9sbCkvLGE9dGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gcyYmInN0YXRpYyI9PT10LmNzcygicG9zaXRpb24iKT8hMTpuLnRlc3QodC5jc3MoIm92ZXJmbG93IikrdC5jc3MoIm92ZXJmbG93LXkiKSt0LmNzcygib3ZlcmZsb3cteCIpKX0pLmVxKDApO3JldHVybiJmaXhlZCIhPT1pJiZhLmxlbmd0aD9hOmUodGhpc1swXS5vd25lckRvY3VtZW50fHxkb2N1bWVudCl9LHVuaXF1ZUlkOmZ1bmN0aW9uKCl7dmFyIGU9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5pZHx8KHRoaXMuaWQ9InVpLWlkLSIrICsrZSl9KX19KCkscmVtb3ZlVW5pcXVlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7L151aS1pZC1cZCskLy50ZXN0KHRoaXMuaWQpJiZlKHRoaXMpLnJlbW92ZUF0dHIoImlkIil9KX19KSxlLmV4dGVuZChlLmV4cHJbIjoiXSx7ZGF0YTplLmV4cHIuY3JlYXRlUHNldWRvP2UuZXhwci5jcmVhdGVQc2V1ZG8oZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiEhZS5kYXRhKGksdCl9fSk6ZnVuY3Rpb24odCxpLHMpe3JldHVybiEhZS5kYXRhKHQsc1szXSl9LGZvY3VzYWJsZTpmdW5jdGlvbihpKXtyZXR1cm4gdChpLCFpc05hTihlLmF0dHIoaSwidGFiaW5kZXgiKSkpfSx0YWJiYWJsZTpmdW5jdGlvbihpKXt2YXIgcz1lLmF0dHIoaSwidGFiaW5kZXgiKSxuPWlzTmFOKHMpO3JldHVybihufHxzPj0wKSYmdChpLCFuKX19KSxlKCI8YT4iKS5vdXRlcldpZHRoKDEpLmpxdWVyeXx8ZS5lYWNoKFsiV2lkdGgiLCJIZWlnaHQiXSxmdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHModCxpLHMsYSl7cmV0dXJuIGUuZWFjaChuLGZ1bmN0aW9uKCl7aS09cGFyc2VGbG9hdChlLmNzcyh0LCJwYWRkaW5nIit0aGlzKSl8fDAscyYmKGktPXBhcnNlRmxvYXQoZS5jc3ModCwiYm9yZGVyIit0aGlzKyJXaWR0aCIpKXx8MCksYSYmKGktPXBhcnNlRmxvYXQoZS5jc3ModCwibWFyZ2luIit0aGlzKSl8fDApfSksaX12YXIgbj0iV2lkdGgiPT09aT9bIkxlZnQiLCJSaWdodCJdOlsiVG9wIiwiQm90dG9tIl0sYT1pLnRvTG93ZXJDYXNlKCksbz17aW5uZXJXaWR0aDplLmZuLmlubmVyV2lkdGgsaW5uZXJIZWlnaHQ6ZS5mbi5pbm5lckhlaWdodCxvdXRlcldpZHRoOmUuZm4ub3V0ZXJXaWR0aCxvdXRlckhlaWdodDplLmZuLm91dGVySGVpZ2h0fTtlLmZuWyJpbm5lciIraV09ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/b1siaW5uZXIiK2ldLmNhbGwodGhpcyk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5jc3MoYSxzKHRoaXMsdCkrInB4Iil9KX0sZS5mblsib3V0ZXIiK2ldPWZ1bmN0aW9uKHQsbil7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0P29bIm91dGVyIitpXS5jYWxsKHRoaXMsdCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5jc3MoYSxzKHRoaXMsdCwhMCxuKSsicHgiKX0pfX0pLGUuZm4uYWRkQmFja3x8KGUuZm4uYWRkQmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9KSxlKCI8YT4iKS5kYXRhKCJhLWIiLCJhIikucmVtb3ZlRGF0YSgiYS1iIikuZGF0YSgiYS1iIikmJihlLmZuLnJlbW92ZURhdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QuY2FsbCh0aGlzLGUuY2FtZWxDYXNlKGkpKTp0LmNhbGwodGhpcyl9fShlLmZuLnJlbW92ZURhdGEpKSxlLnVpLmllPSEhL21zaWUgW1x3Ll0rLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSksZS5mbi5leHRlbmQoe2ZvY3VzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpLHMpe3JldHVybiJudW1iZXIiPT10eXBlb2YgaT90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtlKHQpLmZvY3VzKCkscyYmcy5jYWxsKHQpfSxpKX0pOnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oZS5mbi5mb2N1cyksZGlzYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciBlPSJvbnNlbGVjdHN0YXJ0ImluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpPyJzZWxlY3RzdGFydCI6Im1vdXNlZG93biI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmluZChlKyIudWktZGlzYWJsZVNlbGVjdGlvbiIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSl9fSgpLGVuYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZCgiLnVpLWRpc2FibGVTZWxlY3Rpb24iKX0sekluZGV4OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQpcmV0dXJuIHRoaXMuY3NzKCJ6SW5kZXgiLHQpO2lmKHRoaXMubGVuZ3RoKWZvcih2YXIgaSxzLG49ZSh0aGlzWzBdKTtuLmxlbmd0aCYmblswXSE9PWRvY3VtZW50Oyl7aWYoaT1uLmNzcygicG9zaXRpb24iKSwoImFic29sdXRlIj09PWl8fCJyZWxhdGl2ZSI9PT1pfHwiZml4ZWQiPT09aSkmJihzPXBhcnNlSW50KG4uY3NzKCJ6SW5kZXgiKSwxMCksIWlzTmFOKHMpJiYwIT09cykpcmV0dXJuIHM7bj1uLnBhcmVudCgpfXJldHVybiAwfX0pLGUudWkucGx1Z2luPXthZGQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGE9ZS51aVt0XS5wcm90b3R5cGU7Zm9yKG4gaW4gcylhLnBsdWdpbnNbbl09YS5wbHVnaW5zW25dfHxbXSxhLnBsdWdpbnNbbl0ucHVzaChbaSxzW25dXSl9LGNhbGw6ZnVuY3Rpb24oZSx0LGkscyl7dmFyIG4sYT1lLnBsdWdpbnNbdF07aWYoYSYmKHN8fGUuZWxlbWVudFswXS5wYXJlbnROb2RlJiYxMSE9PWUuZWxlbWVudFswXS5wYXJlbnROb2RlLm5vZGVUeXBlKSlmb3Iobj0wO2EubGVuZ3RoPm47bisrKWUub3B0aW9uc1thW25dWzBdXSYmYVtuXVsxXS5hcHBseShlLmVsZW1lbnQsaSl9fTt2YXIgbj0wLGE9QXJyYXkucHJvdG90eXBlLnNsaWNlO2UuY2xlYW5EYXRhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgcyxuLGE7Zm9yKGE9MDtudWxsIT0obj1pW2FdKTthKyspdHJ5e3M9ZS5fZGF0YShuLCJldmVudHMiKSxzJiZzLnJlbW92ZSYmZShuKS50cmlnZ2VySGFuZGxlcigicmVtb3ZlIil9Y2F0Y2gobyl7fXQoaSl9fShlLmNsZWFuRGF0YSksZS53aWRnZXQ9ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGEsbyxyLGg9e30sbD10LnNwbGl0KCIuIilbMF07cmV0dXJuIHQ9dC5zcGxpdCgiLiIpWzFdLG49bCsiLSIrdCxzfHwocz1pLGk9ZS5XaWRnZXQpLGUuZXhwclsiOiJdW24udG9Mb3dlckNhc2UoKV09ZnVuY3Rpb24odCl7cmV0dXJuISFlLmRhdGEodCxuKX0sZVtsXT1lW2xdfHx7fSxhPWVbbF1bdF0sbz1lW2xdW3RdPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2NyZWF0ZVdpZGdldD8oYXJndW1lbnRzLmxlbmd0aCYmdGhpcy5fY3JlYXRlV2lkZ2V0KGUsdCksdm9pZCAwKTpuZXcgbyhlLHQpfSxlLmV4dGVuZChvLGEse3ZlcnNpb246cy52ZXJzaW9uLF9wcm90bzplLmV4dGVuZCh7fSxzKSxfY2hpbGRDb25zdHJ1Y3RvcnM6W119KSxyPW5ldyBpLHIub3B0aW9ucz1lLndpZGdldC5leHRlbmQoe30sci5vcHRpb25zKSxlLmVhY2gocyxmdW5jdGlvbih0LHMpe3JldHVybiBlLmlzRnVuY3Rpb24ocyk/KGhbdF09ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiBpLnByb3RvdHlwZVt0XS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG49ZnVuY3Rpb24oZSl7cmV0dXJuIGkucHJvdG90eXBlW3RdLmFwcGx5KHRoaXMsZSl9O3JldHVybiBmdW5jdGlvbigpe3ZhciB0LGk9dGhpcy5fc3VwZXIsYT10aGlzLl9zdXBlckFwcGx5O3JldHVybiB0aGlzLl9zdXBlcj1lLHRoaXMuX3N1cGVyQXBwbHk9bix0PXMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX3N1cGVyPWksdGhpcy5fc3VwZXJBcHBseT1hLHR9fSgpLHZvaWQgMCk6KGhbdF09cyx2b2lkIDApfSksby5wcm90b3R5cGU9ZS53aWRnZXQuZXh0ZW5kKHIse3dpZGdldEV2ZW50UHJlZml4OmE/ci53aWRnZXRFdmVudFByZWZpeHx8dDp0fSxoLHtjb25zdHJ1Y3RvcjpvLG5hbWVzcGFjZTpsLHdpZGdldE5hbWU6dCx3aWRnZXRGdWxsTmFtZTpufSksYT8oZS5lYWNoKGEuX2NoaWxkQ29uc3RydWN0b3JzLGZ1bmN0aW9uKHQsaSl7dmFyIHM9aS5wcm90b3R5cGU7ZS53aWRnZXQocy5uYW1lc3BhY2UrIi4iK3Mud2lkZ2V0TmFtZSxvLGkuX3Byb3RvKX0pLGRlbGV0ZSBhLl9jaGlsZENvbnN0cnVjdG9ycyk6aS5fY2hpbGRDb25zdHJ1Y3RvcnMucHVzaChvKSxlLndpZGdldC5icmlkZ2UodCxvKSxvfSxlLndpZGdldC5leHRlbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBpLHMsbj1hLmNhbGwoYXJndW1lbnRzLDEpLG89MCxyPW4ubGVuZ3RoO3I+bztvKyspZm9yKGkgaW4gbltvXSlzPW5bb11baV0sbltvXS5oYXNPd25Qcm9wZXJ0eShpKSYmdm9pZCAwIT09cyYmKHRbaV09ZS5pc1BsYWluT2JqZWN0KHMpP2UuaXNQbGFpbk9iamVjdCh0W2ldKT9lLndpZGdldC5leHRlbmQoe30sdFtpXSxzKTplLndpZGdldC5leHRlbmQoe30scyk6cyk7cmV0dXJuIHR9LGUud2lkZ2V0LmJyaWRnZT1mdW5jdGlvbih0LGkpe3ZhciBzPWkucHJvdG90eXBlLndpZGdldEZ1bGxOYW1lfHx0O2UuZm5bdF09ZnVuY3Rpb24obil7dmFyIG89InN0cmluZyI9PXR5cGVvZiBuLHI9YS5jYWxsKGFyZ3VtZW50cywxKSxoPXRoaXM7cmV0dXJuIG8/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGksYT1lLmRhdGEodGhpcyxzKTtyZXR1cm4iaW5zdGFuY2UiPT09bj8oaD1hLCExKTphP2UuaXNGdW5jdGlvbihhW25dKSYmIl8iIT09bi5jaGFyQXQoMCk/KGk9YVtuXS5hcHBseShhLHIpLGkhPT1hJiZ2b2lkIDAhPT1pPyhoPWkmJmkuanF1ZXJ5P2gucHVzaFN0YWNrKGkuZ2V0KCkpOmksITEpOnZvaWQgMCk6ZS5lcnJvcigibm8gc3VjaCBtZXRob2QgJyIrbisiJyBmb3IgIit0KyIgd2lkZ2V0IGluc3RhbmNlIik6ZS5lcnJvcigiY2Fubm90IGNhbGwgbWV0aG9kcyBvbiAiK3QrIiBwcmlvciB0byBpbml0aWFsaXphdGlvbjsgIisiYXR0ZW1wdGVkIHRvIGNhbGwgbWV0aG9kICciK24rIiciKX0pOihyLmxlbmd0aCYmKG49ZS53aWRnZXQuZXh0ZW5kLmFwcGx5KG51bGwsW25dLmNvbmNhdChyKSkpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUuZGF0YSh0aGlzLHMpO3Q/KHQub3B0aW9uKG58fHt9KSx0Ll9pbml0JiZ0Ll9pbml0KCkpOmUuZGF0YSh0aGlzLHMsbmV3IGkobix0aGlzKSl9KSksaH19LGUuV2lkZ2V0PWZ1bmN0aW9uKCl7fSxlLldpZGdldC5fY2hpbGRDb25zdHJ1Y3RvcnM9W10sZS5XaWRnZXQucHJvdG90eXBlPXt3aWRnZXROYW1lOiJ3aWRnZXQiLHdpZGdldEV2ZW50UHJlZml4OiIiLGRlZmF1bHRFbGVtZW50OiI8ZGl2PiIsb3B0aW9uczp7ZGlzYWJsZWQ6ITEsY3JlYXRlOm51bGx9LF9jcmVhdGVXaWRnZXQ6ZnVuY3Rpb24odCxpKXtpPWUoaXx8dGhpcy5kZWZhdWx0RWxlbWVudHx8dGhpcylbMF0sdGhpcy5lbGVtZW50PWUoaSksdGhpcy51dWlkPW4rKyx0aGlzLmV2ZW50TmFtZXNwYWNlPSIuIit0aGlzLndpZGdldE5hbWUrdGhpcy51dWlkLHRoaXMuYmluZGluZ3M9ZSgpLHRoaXMuaG92ZXJhYmxlPWUoKSx0aGlzLmZvY3VzYWJsZT1lKCksaSE9PXRoaXMmJihlLmRhdGEoaSx0aGlzLndpZGdldEZ1bGxOYW1lLHRoaXMpLHRoaXMuX29uKCEwLHRoaXMuZWxlbWVudCx7cmVtb3ZlOmZ1bmN0aW9uKGUpe2UudGFyZ2V0PT09aSYmdGhpcy5kZXN0cm95KCl9fSksdGhpcy5kb2N1bWVudD1lKGkuc3R5bGU/aS5vd25lckRvY3VtZW50OmkuZG9jdW1lbnR8fGkpLHRoaXMud2luZG93PWUodGhpcy5kb2N1bWVudFswXS5kZWZhdWx0Vmlld3x8dGhpcy5kb2N1bWVudFswXS5wYXJlbnRXaW5kb3cpKSx0aGlzLm9wdGlvbnM9ZS53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyx0aGlzLl9nZXRDcmVhdGVPcHRpb25zKCksdCksdGhpcy5fY3JlYXRlKCksdGhpcy5fdHJpZ2dlcigiY3JlYXRlIixudWxsLHRoaXMuX2dldENyZWF0ZUV2ZW50RGF0YSgpKSx0aGlzLl9pbml0KCl9LF9nZXRDcmVhdGVPcHRpb25zOmUubm9vcCxfZ2V0Q3JlYXRlRXZlbnREYXRhOmUubm9vcCxfY3JlYXRlOmUubm9vcCxfaW5pdDplLm5vb3AsZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3koKSx0aGlzLmVsZW1lbnQudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZURhdGEodGhpcy53aWRnZXRGdWxsTmFtZSkucmVtb3ZlRGF0YShlLmNhbWVsQ2FzZSh0aGlzLndpZGdldEZ1bGxOYW1lKSksdGhpcy53aWRnZXQoKS51bmJpbmQodGhpcy5ldmVudE5hbWVzcGFjZSkucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpLnJlbW92ZUNsYXNzKHRoaXMud2lkZ2V0RnVsbE5hbWUrIi1kaXNhYmxlZCAiKyJ1aS1zdGF0ZS1kaXNhYmxlZCIpLHRoaXMuYmluZGluZ3MudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLHRoaXMuaG92ZXJhYmxlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHRoaXMuZm9jdXNhYmxlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfSxfZGVzdHJveTplLm5vb3Asd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudH0sb3B0aW9uOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhLG89dDtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlmKG89e30scz10LnNwbGl0KCIuIiksdD1zLnNoaWZ0KCkscy5sZW5ndGgpe2ZvcihuPW9bdF09ZS53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9uc1t0XSksYT0wO3MubGVuZ3RoLTE+YTthKyspbltzW2FdXT1uW3NbYV1dfHx7fSxuPW5bc1thXV07aWYodD1zLnBvcCgpLDE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1uW3RdP251bGw6blt0XTtuW3RdPWl9ZWxzZXtpZigxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09dGhpcy5vcHRpb25zW3RdP251bGw6dGhpcy5vcHRpb25zW3RdO29bdF09aX1yZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyhvKSx0aGlzfSxfc2V0T3B0aW9uczpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXRoaXMuX3NldE9wdGlvbih0LGVbdF0pO3JldHVybiB0aGlzfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub3B0aW9uc1tlXT10LCJkaXNhYmxlZCI9PT1lJiYodGhpcy53aWRnZXQoKS50b2dnbGVDbGFzcyh0aGlzLndpZGdldEZ1bGxOYW1lKyItZGlzYWJsZWQiLCEhdCksdCYmKHRoaXMuaG92ZXJhYmxlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHRoaXMuZm9jdXNhYmxlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpKSksdGhpc30sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMoe2Rpc2FibGVkOiExfSl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyh7ZGlzYWJsZWQ6ITB9KX0sX29uOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbixhPXRoaXM7ImJvb2xlYW4iIT10eXBlb2YgdCYmKHM9aSxpPXQsdD0hMSkscz8oaT1uPWUoaSksdGhpcy5iaW5kaW5ncz10aGlzLmJpbmRpbmdzLmFkZChpKSk6KHM9aSxpPXRoaXMuZWxlbWVudCxuPXRoaXMud2lkZ2V0KCkpLGUuZWFjaChzLGZ1bmN0aW9uKHMsbyl7ZnVuY3Rpb24gcigpe3JldHVybiB0fHxhLm9wdGlvbnMuZGlzYWJsZWQhPT0hMCYmIWUodGhpcykuaGFzQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIik/KCJzdHJpbmciPT10eXBlb2Ygbz9hW29dOm8pLmFwcGx5KGEsYXJndW1lbnRzKTp2b2lkIDB9InN0cmluZyIhPXR5cGVvZiBvJiYoci5ndWlkPW8uZ3VpZD1vLmd1aWR8fHIuZ3VpZHx8ZS5ndWlkKyspO3ZhciBoPXMubWF0Y2goL14oW1x3Oi1dKilccyooLiopJC8pLGw9aFsxXSthLmV2ZW50TmFtZXNwYWNlLHU9aFsyXTt1P24uZGVsZWdhdGUodSxsLHIpOmkuYmluZChsLHIpfSl9LF9vZmY6ZnVuY3Rpb24odCxpKXtpPShpfHwiIikuc3BsaXQoIiAiKS5qb2luKHRoaXMuZXZlbnROYW1lc3BhY2UrIiAiKSt0aGlzLmV2ZW50TmFtZXNwYWNlLHQudW5iaW5kKGkpLnVuZGVsZWdhdGUoaSksdGhpcy5iaW5kaW5ncz1lKHRoaXMuYmluZGluZ3Mubm90KHQpLmdldCgpKSx0aGlzLmZvY3VzYWJsZT1lKHRoaXMuZm9jdXNhYmxlLm5vdCh0KS5nZXQoKSksdGhpcy5ob3ZlcmFibGU9ZSh0aGlzLmhvdmVyYWJsZS5ub3QodCkuZ2V0KCkpfSxfZGVsYXk6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7cmV0dXJuKCJzdHJpbmciPT10eXBlb2YgZT9zW2VdOmUpLmFwcGx5KHMsYXJndW1lbnRzKX12YXIgcz10aGlzO3JldHVybiBzZXRUaW1lb3V0KGksdHx8MCl9LF9ob3ZlcmFibGU6ZnVuY3Rpb24odCl7dGhpcy5ob3ZlcmFibGU9dGhpcy5ob3ZlcmFibGUuYWRkKHQpLHRoaXMuX29uKHQse21vdXNlZW50ZXI6ZnVuY3Rpb24odCl7ZSh0LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfSxtb3VzZWxlYXZlOmZ1bmN0aW9uKHQpe2UodC5jdXJyZW50VGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKX19KX0sX2ZvY3VzYWJsZTpmdW5jdGlvbih0KXt0aGlzLmZvY3VzYWJsZT10aGlzLmZvY3VzYWJsZS5hZGQodCksdGhpcy5fb24odCx7Zm9jdXNpbjpmdW5jdGlvbih0KXtlKHQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9LGZvY3Vzb3V0OmZ1bmN0aW9uKHQpe2UodC5jdXJyZW50VGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX19KX0sX3RyaWdnZXI6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGEsbz10aGlzLm9wdGlvbnNbdF07aWYocz1zfHx7fSxpPWUuRXZlbnQoaSksaS50eXBlPSh0PT09dGhpcy53aWRnZXRFdmVudFByZWZpeD90OnRoaXMud2lkZ2V0RXZlbnRQcmVmaXgrdCkudG9Mb3dlckNhc2UoKSxpLnRhcmdldD10aGlzLmVsZW1lbnRbMF0sYT1pLm9yaWdpbmFsRXZlbnQpZm9yKG4gaW4gYSluIGluIGl8fChpW25dPWFbbl0pO3JldHVybiB0aGlzLmVsZW1lbnQudHJpZ2dlcihpLHMpLCEoZS5pc0Z1bmN0aW9uKG8pJiZvLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbaV0uY29uY2F0KHMpKT09PSExfHxpLmlzRGVmYXVsdFByZXZlbnRlZCgpKX19LGUuZWFjaCh7c2hvdzoiZmFkZUluIixoaWRlOiJmYWRlT3V0In0sZnVuY3Rpb24odCxpKXtlLldpZGdldC5wcm90b3R5cGVbIl8iK3RdPWZ1bmN0aW9uKHMsbixhKXsic3RyaW5nIj09dHlwZW9mIG4mJihuPXtlZmZlY3Q6bn0pO3ZhciBvLHI9bj9uPT09ITB8fCJudW1iZXIiPT10eXBlb2Ygbj9pOm4uZWZmZWN0fHxpOnQ7bj1ufHx7fSwibnVtYmVyIj09dHlwZW9mIG4mJihuPXtkdXJhdGlvbjpufSksbz0hZS5pc0VtcHR5T2JqZWN0KG4pLG4uY29tcGxldGU9YSxuLmRlbGF5JiZzLmRlbGF5KG4uZGVsYXkpLG8mJmUuZWZmZWN0cyYmZS5lZmZlY3RzLmVmZmVjdFtyXT9zW3RdKG4pOnIhPT10JiZzW3JdP3Nbcl0obi5kdXJhdGlvbixuLmVhc2luZyxhKTpzLnF1ZXVlKGZ1bmN0aW9uKGkpe2UodGhpcylbdF0oKSxhJiZhLmNhbGwoc1swXSksaSgpfSl9fSksZS53aWRnZXQ7dmFyIG89ITE7ZShkb2N1bWVudCkubW91c2V1cChmdW5jdGlvbigpe289ITF9KSxlLndpZGdldCgidWkubW91c2UiLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e2NhbmNlbDoiaW5wdXQsdGV4dGFyZWEsYnV0dG9uLHNlbGVjdCxvcHRpb24iLGRpc3RhbmNlOjEsZGVsYXk6MH0sX21vdXNlSW5pdDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5lbGVtZW50LmJpbmQoIm1vdXNlZG93bi4iK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbihlKXtyZXR1cm4gdC5fbW91c2VEb3duKGUpfSkuYmluZCgiY2xpY2suIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24oaSl7cmV0dXJuITA9PT1lLmRhdGEoaS50YXJnZXQsdC53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKT8oZS5yZW1vdmVEYXRhKGkudGFyZ2V0LHQud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IiksaS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSwhMSk6dm9pZCAwfSksdGhpcy5zdGFydGVkPSExfSxfbW91c2VEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnVuYmluZCgiLiIrdGhpcy53aWRnZXROYW1lKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSYmdGhpcy5kb2N1bWVudC51bmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkudW5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSl9LF9tb3VzZURvd246ZnVuY3Rpb24odCl7aWYoIW8pe3RoaXMuX21vdXNlTW92ZWQ9ITEsdGhpcy5fbW91c2VTdGFydGVkJiZ0aGlzLl9tb3VzZVVwKHQpLHRoaXMuX21vdXNlRG93bkV2ZW50PXQ7dmFyIGk9dGhpcyxzPTE9PT10LndoaWNoLG49InN0cmluZyI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuY2FuY2VsJiZ0LnRhcmdldC5ub2RlTmFtZT9lKHQudGFyZ2V0KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5jYW5jZWwpLmxlbmd0aDohMTtyZXR1cm4gcyYmIW4mJnRoaXMuX21vdXNlQ2FwdHVyZSh0KT8odGhpcy5tb3VzZURlbGF5TWV0PSF0aGlzLm9wdGlvbnMuZGVsYXksdGhpcy5tb3VzZURlbGF5TWV0fHwodGhpcy5fbW91c2VEZWxheVRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLm1vdXNlRGVsYXlNZXQ9ITB9LHRoaXMub3B0aW9ucy5kZWxheSkpLHRoaXMuX21vdXNlRGlzdGFuY2VNZXQodCkmJnRoaXMuX21vdXNlRGVsYXlNZXQodCkmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9dGhpcy5fbW91c2VTdGFydCh0KSE9PSExLCF0aGlzLl9tb3VzZVN0YXJ0ZWQpPyh0LnByZXZlbnREZWZhdWx0KCksITApOighMD09PWUuZGF0YSh0LnRhcmdldCx0aGlzLndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpJiZlLnJlbW92ZURhdGEodC50YXJnZXQsdGhpcy53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZT1mdW5jdGlvbihlKXtyZXR1cm4gaS5fbW91c2VNb3ZlKGUpfSx0aGlzLl9tb3VzZVVwRGVsZWdhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGkuX21vdXNlVXAoZSl9LHRoaXMuZG9jdW1lbnQuYmluZCgibW91c2Vtb3ZlLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSksdC5wcmV2ZW50RGVmYXVsdCgpLG89ITAsITApKTohMH19LF9tb3VzZU1vdmU6ZnVuY3Rpb24odCl7aWYodGhpcy5fbW91c2VNb3ZlZCl7aWYoZS51aS5pZSYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk+ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKSYmIXQuYnV0dG9uKXJldHVybiB0aGlzLl9tb3VzZVVwKHQpO2lmKCF0LndoaWNoKXJldHVybiB0aGlzLl9tb3VzZVVwKHQpfXJldHVybih0LndoaWNofHx0LmJ1dHRvbikmJih0aGlzLl9tb3VzZU1vdmVkPSEwKSx0aGlzLl9tb3VzZVN0YXJ0ZWQ/KHRoaXMuX21vdXNlRHJhZyh0KSx0LnByZXZlbnREZWZhdWx0KCkpOih0aGlzLl9tb3VzZURpc3RhbmNlTWV0KHQpJiZ0aGlzLl9tb3VzZURlbGF5TWV0KHQpJiYodGhpcy5fbW91c2VTdGFydGVkPXRoaXMuX21vdXNlU3RhcnQodGhpcy5fbW91c2VEb3duRXZlbnQsdCkhPT0hMSx0aGlzLl9tb3VzZVN0YXJ0ZWQ/dGhpcy5fbW91c2VEcmFnKHQpOnRoaXMuX21vdXNlVXAodCkpLCF0aGlzLl9tb3VzZVN0YXJ0ZWQpfSxfbW91c2VVcDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kb2N1bWVudC51bmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkudW5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSksdGhpcy5fbW91c2VTdGFydGVkJiYodGhpcy5fbW91c2VTdGFydGVkPSExLHQudGFyZ2V0PT09dGhpcy5fbW91c2VEb3duRXZlbnQudGFyZ2V0JiZlLmRhdGEodC50YXJnZXQsdGhpcy53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiLCEwKSx0aGlzLl9tb3VzZVN0b3AodCkpLG89ITEsITF9LF9tb3VzZURpc3RhbmNlTWV0OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heChNYXRoLmFicyh0aGlzLl9tb3VzZURvd25FdmVudC5wYWdlWC1lLnBhZ2VYKSxNYXRoLmFicyh0aGlzLl9tb3VzZURvd25FdmVudC5wYWdlWS1lLnBhZ2VZKSk+PXRoaXMub3B0aW9ucy5kaXN0YW5jZX0sX21vdXNlRGVsYXlNZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb3VzZURlbGF5TWV0fSxfbW91c2VTdGFydDpmdW5jdGlvbigpe30sX21vdXNlRHJhZzpmdW5jdGlvbigpe30sX21vdXNlU3RvcDpmdW5jdGlvbigpe30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbigpe3JldHVybiEwfX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHQsaSl7cmV0dXJuW3BhcnNlRmxvYXQoZVswXSkqKHAudGVzdChlWzBdKT90LzEwMDoxKSxwYXJzZUZsb2F0KGVbMV0pKihwLnRlc3QoZVsxXSk/aS8xMDA6MSldfWZ1bmN0aW9uIGkodCxpKXtyZXR1cm4gcGFyc2VJbnQoZS5jc3ModCxpKSwxMCl8fDB9ZnVuY3Rpb24gcyh0KXt2YXIgaT10WzBdO3JldHVybiA5PT09aS5ub2RlVHlwZT97d2lkdGg6dC53aWR0aCgpLGhlaWdodDp0LmhlaWdodCgpLG9mZnNldDp7dG9wOjAsbGVmdDowfX06ZS5pc1dpbmRvdyhpKT97d2lkdGg6dC53aWR0aCgpLGhlaWdodDp0LmhlaWdodCgpLG9mZnNldDp7dG9wOnQuc2Nyb2xsVG9wKCksbGVmdDp0LnNjcm9sbExlZnQoKX19OmkucHJldmVudERlZmF1bHQ/e3dpZHRoOjAsaGVpZ2h0OjAsb2Zmc2V0Ont0b3A6aS5wYWdlWSxsZWZ0OmkucGFnZVh9fTp7d2lkdGg6dC5vdXRlcldpZHRoKCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoKSxvZmZzZXQ6dC5vZmZzZXQoKX19ZS51aT1lLnVpfHx7fTt2YXIgbixhLG89TWF0aC5tYXgscj1NYXRoLmFicyxoPU1hdGgucm91bmQsbD0vbGVmdHxjZW50ZXJ8cmlnaHQvLHU9L3RvcHxjZW50ZXJ8Ym90dG9tLyxkPS9bXCtcLV1cZCsoXC5bXGRdKyk/JT8vLGM9L15cdysvLHA9LyUkLyxmPWUuZm4ucG9zaXRpb247ZS5wb3NpdGlvbj17c2Nyb2xsYmFyV2lkdGg6ZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1uKXJldHVybiBuO3ZhciB0LGkscz1lKCI8ZGl2IHN0eWxlPSdkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7b3ZlcmZsb3c6aGlkZGVuOyc+PGRpdiBzdHlsZT0naGVpZ2h0OjEwMHB4O3dpZHRoOmF1dG87Jz48L2Rpdj48L2Rpdj4iKSxhPXMuY2hpbGRyZW4oKVswXTtyZXR1cm4gZSgiYm9keSIpLmFwcGVuZChzKSx0PWEub2Zmc2V0V2lkdGgscy5jc3MoIm92ZXJmbG93Iiwic2Nyb2xsIiksaT1hLm9mZnNldFdpZHRoLHQ9PT1pJiYoaT1zWzBdLmNsaWVudFdpZHRoKSxzLnJlbW92ZSgpLG49dC1pfSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKHQpe3ZhciBpPXQuaXNXaW5kb3d8fHQuaXNEb2N1bWVudD8iIjp0LmVsZW1lbnQuY3NzKCJvdmVyZmxvdy14Iikscz10LmlzV2luZG93fHx0LmlzRG9jdW1lbnQ/IiI6dC5lbGVtZW50LmNzcygib3ZlcmZsb3cteSIpLG49InNjcm9sbCI9PT1pfHwiYXV0byI9PT1pJiZ0LndpZHRoPHQuZWxlbWVudFswXS5zY3JvbGxXaWR0aCxhPSJzY3JvbGwiPT09c3x8ImF1dG8iPT09cyYmdC5oZWlnaHQ8dC5lbGVtZW50WzBdLnNjcm9sbEhlaWdodDtyZXR1cm57d2lkdGg6YT9lLnBvc2l0aW9uLnNjcm9sbGJhcldpZHRoKCk6MCxoZWlnaHQ6bj9lLnBvc2l0aW9uLnNjcm9sbGJhcldpZHRoKCk6MH19LGdldFdpdGhpbkluZm86ZnVuY3Rpb24odCl7dmFyIGk9ZSh0fHx3aW5kb3cpLHM9ZS5pc1dpbmRvdyhpWzBdKSxuPSEhaVswXSYmOT09PWlbMF0ubm9kZVR5cGU7cmV0dXJue2VsZW1lbnQ6aSxpc1dpbmRvdzpzLGlzRG9jdW1lbnQ6bixvZmZzZXQ6aS5vZmZzZXQoKXx8e2xlZnQ6MCx0b3A6MH0sc2Nyb2xsTGVmdDppLnNjcm9sbExlZnQoKSxzY3JvbGxUb3A6aS5zY3JvbGxUb3AoKSx3aWR0aDpzfHxuP2kud2lkdGgoKTppLm91dGVyV2lkdGgoKSxoZWlnaHQ6c3x8bj9pLmhlaWdodCgpOmkub3V0ZXJIZWlnaHQoKX19fSxlLmZuLnBvc2l0aW9uPWZ1bmN0aW9uKG4pe2lmKCFufHwhbi5vZilyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj1lLmV4dGVuZCh7fSxuKTt2YXIgcCxtLGcsdix5LGIsXz1lKG4ub2YpLHg9ZS5wb3NpdGlvbi5nZXRXaXRoaW5JbmZvKG4ud2l0aGluKSx3PWUucG9zaXRpb24uZ2V0U2Nyb2xsSW5mbyh4KSxrPShuLmNvbGxpc2lvbnx8ImZsaXAiKS5zcGxpdCgiICIpLFQ9e307cmV0dXJuIGI9cyhfKSxfWzBdLnByZXZlbnREZWZhdWx0JiYobi5hdD0ibGVmdCB0b3AiKSxtPWIud2lkdGgsZz1iLmhlaWdodCx2PWIub2Zmc2V0LHk9ZS5leHRlbmQoe30sdiksZS5lYWNoKFsibXkiLCJhdCJdLGZ1bmN0aW9uKCl7dmFyIGUsdCxpPShuW3RoaXNdfHwiIikuc3BsaXQoIiAiKTsxPT09aS5sZW5ndGgmJihpPWwudGVzdChpWzBdKT9pLmNvbmNhdChbImNlbnRlciJdKTp1LnRlc3QoaVswXSk/WyJjZW50ZXIiXS5jb25jYXQoaSk6WyJjZW50ZXIiLCJjZW50ZXIiXSksaVswXT1sLnRlc3QoaVswXSk/aVswXToiY2VudGVyIixpWzFdPXUudGVzdChpWzFdKT9pWzFdOiJjZW50ZXIiLGU9ZC5leGVjKGlbMF0pLHQ9ZC5leGVjKGlbMV0pLFRbdGhpc109W2U/ZVswXTowLHQ/dFswXTowXSxuW3RoaXNdPVtjLmV4ZWMoaVswXSlbMF0sYy5leGVjKGlbMV0pWzBdXX0pLDE9PT1rLmxlbmd0aCYmKGtbMV09a1swXSksInJpZ2h0Ij09PW4uYXRbMF0/eS5sZWZ0Kz1tOiJjZW50ZXIiPT09bi5hdFswXSYmKHkubGVmdCs9bS8yKSwiYm90dG9tIj09PW4uYXRbMV0/eS50b3ArPWc6ImNlbnRlciI9PT1uLmF0WzFdJiYoeS50b3ArPWcvMikscD10KFQuYXQsbSxnKSx5LmxlZnQrPXBbMF0seS50b3ArPXBbMV0sdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHMsbCx1PWUodGhpcyksZD11Lm91dGVyV2lkdGgoKSxjPXUub3V0ZXJIZWlnaHQoKSxmPWkodGhpcywibWFyZ2luTGVmdCIpLGI9aSh0aGlzLCJtYXJnaW5Ub3AiKSxEPWQrZitpKHRoaXMsIm1hcmdpblJpZ2h0Iikrdy53aWR0aCxTPWMrYitpKHRoaXMsIm1hcmdpbkJvdHRvbSIpK3cuaGVpZ2h0LE49ZS5leHRlbmQoe30seSksTT10KFQubXksdS5vdXRlcldpZHRoKCksdS5vdXRlckhlaWdodCgpKTsicmlnaHQiPT09bi5teVswXT9OLmxlZnQtPWQ6ImNlbnRlciI9PT1uLm15WzBdJiYoTi5sZWZ0LT1kLzIpLCJib3R0b20iPT09bi5teVsxXT9OLnRvcC09YzoiY2VudGVyIj09PW4ubXlbMV0mJihOLnRvcC09Yy8yKSxOLmxlZnQrPU1bMF0sTi50b3ArPU1bMV0sYXx8KE4ubGVmdD1oKE4ubGVmdCksTi50b3A9aChOLnRvcCkpLHM9e21hcmdpbkxlZnQ6ZixtYXJnaW5Ub3A6Yn0sZS5lYWNoKFsibGVmdCIsInRvcCJdLGZ1bmN0aW9uKHQsaSl7ZS51aS5wb3NpdGlvbltrW3RdXSYmZS51aS5wb3NpdGlvbltrW3RdXVtpXShOLHt0YXJnZXRXaWR0aDptLHRhcmdldEhlaWdodDpnLGVsZW1XaWR0aDpkLGVsZW1IZWlnaHQ6Yyxjb2xsaXNpb25Qb3NpdGlvbjpzLGNvbGxpc2lvbldpZHRoOkQsY29sbGlzaW9uSGVpZ2h0OlMsb2Zmc2V0OltwWzBdK01bMF0scFsxXStNWzFdXSxteTpuLm15LGF0Om4uYXQsd2l0aGluOngsZWxlbTp1fSl9KSxuLnVzaW5nJiYobD1mdW5jdGlvbihlKXt2YXIgdD12LmxlZnQtTi5sZWZ0LGk9dCttLWQscz12LnRvcC1OLnRvcCxhPXMrZy1jLGg9e3RhcmdldDp7ZWxlbWVudDpfLGxlZnQ6di5sZWZ0LHRvcDp2LnRvcCx3aWR0aDptLGhlaWdodDpnfSxlbGVtZW50OntlbGVtZW50OnUsbGVmdDpOLmxlZnQsdG9wOk4udG9wLHdpZHRoOmQsaGVpZ2h0OmN9LGhvcml6b250YWw6MD5pPyJsZWZ0Ijp0PjA/InJpZ2h0IjoiY2VudGVyIix2ZXJ0aWNhbDowPmE/InRvcCI6cz4wPyJib3R0b20iOiJtaWRkbGUifTtkPm0mJm0+cih0K2kpJiYoaC5ob3Jpem9udGFsPSJjZW50ZXIiKSxjPmcmJmc+cihzK2EpJiYoaC52ZXJ0aWNhbD0ibWlkZGxlIiksaC5pbXBvcnRhbnQ9byhyKHQpLHIoaSkpPm8ocihzKSxyKGEpKT8iaG9yaXpvbnRhbCI6InZlcnRpY2FsIixuLnVzaW5nLmNhbGwodGhpcyxlLGgpfSksdS5vZmZzZXQoZS5leHRlbmQoTix7dXNpbmc6bH0pKX0pfSxlLnVpLnBvc2l0aW9uPXtmaXQ6e2xlZnQ6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzPXQud2l0aGluLG49cy5pc1dpbmRvdz9zLnNjcm9sbExlZnQ6cy5vZmZzZXQubGVmdCxhPXMud2lkdGgscj1lLmxlZnQtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0LGg9bi1yLGw9cit0LmNvbGxpc2lvbldpZHRoLWEtbjt0LmNvbGxpc2lvbldpZHRoPmE/aD4wJiYwPj1sPyhpPWUubGVmdCtoK3QuY29sbGlzaW9uV2lkdGgtYS1uLGUubGVmdCs9aC1pKTplLmxlZnQ9bD4wJiYwPj1oP246aD5sP24rYS10LmNvbGxpc2lvbldpZHRoOm46aD4wP2UubGVmdCs9aDpsPjA/ZS5sZWZ0LT1sOmUubGVmdD1vKGUubGVmdC1yLGUubGVmdCl9LHRvcDpmdW5jdGlvbihlLHQpe3ZhciBpLHM9dC53aXRoaW4sbj1zLmlzV2luZG93P3Muc2Nyb2xsVG9wOnMub2Zmc2V0LnRvcCxhPXQud2l0aGluLmhlaWdodCxyPWUudG9wLXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wLGg9bi1yLGw9cit0LmNvbGxpc2lvbkhlaWdodC1hLW47dC5jb2xsaXNpb25IZWlnaHQ+YT9oPjAmJjA+PWw/KGk9ZS50b3AraCt0LmNvbGxpc2lvbkhlaWdodC1hLW4sZS50b3ArPWgtaSk6ZS50b3A9bD4wJiYwPj1oP246aD5sP24rYS10LmNvbGxpc2lvbkhlaWdodDpuOmg+MD9lLnRvcCs9aDpsPjA/ZS50b3AtPWw6ZS50b3A9byhlLnRvcC1yLGUudG9wKX19LGZsaXA6e2xlZnQ6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzLG49dC53aXRoaW4sYT1uLm9mZnNldC5sZWZ0K24uc2Nyb2xsTGVmdCxvPW4ud2lkdGgsaD1uLmlzV2luZG93P24uc2Nyb2xsTGVmdDpuLm9mZnNldC5sZWZ0LGw9ZS5sZWZ0LXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCx1PWwtaCxkPWwrdC5jb2xsaXNpb25XaWR0aC1vLWgsYz0ibGVmdCI9PT10Lm15WzBdPy10LmVsZW1XaWR0aDoicmlnaHQiPT09dC5teVswXT90LmVsZW1XaWR0aDowLHA9ImxlZnQiPT09dC5hdFswXT90LnRhcmdldFdpZHRoOiJyaWdodCI9PT10LmF0WzBdPy10LnRhcmdldFdpZHRoOjAsZj0tMip0Lm9mZnNldFswXTswPnU/KGk9ZS5sZWZ0K2MrcCtmK3QuY29sbGlzaW9uV2lkdGgtby1hLCgwPml8fHIodSk+aSkmJihlLmxlZnQrPWMrcCtmKSk6ZD4wJiYocz1lLmxlZnQtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0K2MrcCtmLWgsKHM+MHx8ZD5yKHMpKSYmKGUubGVmdCs9YytwK2YpKX0sdG9wOmZ1bmN0aW9uKGUsdCl7dmFyIGkscyxuPXQud2l0aGluLGE9bi5vZmZzZXQudG9wK24uc2Nyb2xsVG9wLG89bi5oZWlnaHQsaD1uLmlzV2luZG93P24uc2Nyb2xsVG9wOm4ub2Zmc2V0LnRvcCxsPWUudG9wLXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wLHU9bC1oLGQ9bCt0LmNvbGxpc2lvbkhlaWdodC1vLWgsYz0idG9wIj09PXQubXlbMV0scD1jPy10LmVsZW1IZWlnaHQ6ImJvdHRvbSI9PT10Lm15WzFdP3QuZWxlbUhlaWdodDowLGY9InRvcCI9PT10LmF0WzFdP3QudGFyZ2V0SGVpZ2h0OiJib3R0b20iPT09dC5hdFsxXT8tdC50YXJnZXRIZWlnaHQ6MCxtPS0yKnQub2Zmc2V0WzFdOzA+dT8ocz1lLnRvcCtwK2YrbSt0LmNvbGxpc2lvbkhlaWdodC1vLWEsKDA+c3x8cih1KT5zKSYmKGUudG9wKz1wK2YrbSkpOmQ+MCYmKGk9ZS50b3AtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3ArcCtmK20taCwoaT4wfHxkPnIoaSkpJiYoZS50b3ArPXArZittKSl9fSxmbGlwZml0OntsZWZ0OmZ1bmN0aW9uKCl7ZS51aS5wb3NpdGlvbi5mbGlwLmxlZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudWkucG9zaXRpb24uZml0LmxlZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0b3A6ZnVuY3Rpb24oKXtlLnVpLnBvc2l0aW9uLmZsaXAudG9wLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnVpLnBvc2l0aW9uLmZpdC50b3AuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19LGZ1bmN0aW9uKCl7dmFyIHQsaSxzLG4sbyxyPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0saD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocj8iZGl2IjoiYm9keSIpLHM9e3Zpc2liaWxpdHk6ImhpZGRlbiIsd2lkdGg6MCxoZWlnaHQ6MCxib3JkZXI6MCxtYXJnaW46MCxiYWNrZ3JvdW5kOiJub25lIn0sciYmZS5leHRlbmQocyx7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiItMTAwMHB4Iix0b3A6Ii0xMDAwcHgifSk7Zm9yKG8gaW4gcyl0LnN0eWxlW29dPXNbb107dC5hcHBlbmRDaGlsZChoKSxpPXJ8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpLmluc2VydEJlZm9yZSh0LGkuZmlyc3RDaGlsZCksaC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDEwLjc0MzIyMjJweDsiLG49ZShoKS5vZmZzZXQoKS5sZWZ0LGE9bj4xMCYmMTE+bix0LmlubmVySFRNTD0iIixpLnJlbW92ZUNoaWxkKHQpfSgpfSgpLGUudWkucG9zaXRpb24sZS53aWRnZXQoInVpLmRyYWdnYWJsZSIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMS40Iix3aWRnZXRFdmVudFByZWZpeDoiZHJhZyIsb3B0aW9uczp7YWRkQ2xhc3NlczohMCxhcHBlbmRUbzoicGFyZW50IixheGlzOiExLGNvbm5lY3RUb1NvcnRhYmxlOiExLGNvbnRhaW5tZW50OiExLGN1cnNvcjoiYXV0byIsY3Vyc29yQXQ6ITEsZ3JpZDohMSxoYW5kbGU6ITEsaGVscGVyOiJvcmlnaW5hbCIsaWZyYW1lRml4OiExLG9wYWNpdHk6ITEscmVmcmVzaFBvc2l0aW9uczohMSxyZXZlcnQ6ITEscmV2ZXJ0RHVyYXRpb246NTAwLHNjb3BlOiJkZWZhdWx0IixzY3JvbGw6ITAsc2Nyb2xsU2Vuc2l0aXZpdHk6MjAsc2Nyb2xsU3BlZWQ6MjAsc25hcDohMSxzbmFwTW9kZToiYm90aCIsc25hcFRvbGVyYW5jZToyMCxzdGFjazohMSx6SW5kZXg6ITEsZHJhZzpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7Im9yaWdpbmFsIj09PXRoaXMub3B0aW9ucy5oZWxwZXImJnRoaXMuX3NldFBvc2l0aW9uUmVsYXRpdmUoKSx0aGlzLm9wdGlvbnMuYWRkQ2xhc3NlcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUiKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJhZ2dhYmxlLWRpc2FibGVkIiksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5fbW91c2VJbml0KCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpLCJoYW5kbGUiPT09ZSYmKHRoaXMuX3JlbW92ZUhhbmRsZUNsYXNzTmFtZSgpLHRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5oZWxwZXJ8fHRoaXMuZWxlbWVudCkuaXMoIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmciKT8odGhpcy5kZXN0cm95T25DbGVhcj0hMCx2b2lkIDApOih0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRyYWdnYWJsZSB1aS1kcmFnZ2FibGUtZHJhZ2dpbmcgdWktZHJhZ2dhYmxlLWRpc2FibGVkIiksdGhpcy5fcmVtb3ZlSGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5fbW91c2VEZXN0cm95KCksdm9pZCAwKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuX2JsdXJBY3RpdmVFbGVtZW50KHQpLHRoaXMuaGVscGVyfHxpLmRpc2FibGVkfHxlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktcmVzaXphYmxlLWhhbmRsZSIpLmxlbmd0aD4wPyExOih0aGlzLmhhbmRsZT10aGlzLl9nZXRIYW5kbGUodCksdGhpcy5oYW5kbGU/KHRoaXMuX2Jsb2NrRnJhbWVzKGkuaWZyYW1lRml4PT09ITA/ImlmcmFtZSI6aS5pZnJhbWVGaXgpLCEwKTohMSl9LF9ibG9ja0ZyYW1lczpmdW5jdGlvbih0KXt0aGlzLmlmcmFtZUJsb2Nrcz10aGlzLmRvY3VtZW50LmZpbmQodCkubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gZSgiPGRpdj4iKS5jc3MoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5hcHBlbmRUbyh0LnBhcmVudCgpKS5vdXRlcldpZHRoKHQub3V0ZXJXaWR0aCgpKS5vdXRlckhlaWdodCh0Lm91dGVySGVpZ2h0KCkpLm9mZnNldCh0Lm9mZnNldCgpKVswXX0pfSxfdW5ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzJiYodGhpcy5pZnJhbWVCbG9ja3MucmVtb3ZlKCksZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzKX0sX2JsdXJBY3RpdmVFbGVtZW50OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZG9jdW1lbnRbMF07aWYodGhpcy5oYW5kbGVFbGVtZW50LmlzKHQudGFyZ2V0KSl0cnl7aS5hY3RpdmVFbGVtZW50JiYiYm9keSIhPT1pLmFjdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmZShpLmFjdGl2ZUVsZW1lbnQpLmJsdXIoKX1jYXRjaChzKXt9fSxfbW91c2VTdGFydDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuaGVscGVyPXRoaXMuX2NyZWF0ZUhlbHBlcih0KSx0aGlzLmhlbHBlci5hZGRDbGFzcygidWktZHJhZ2dhYmxlLWRyYWdnaW5nIiksdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLGUudWkuZGRtYW5hZ2VyJiYoZS51aS5kZG1hbmFnZXIuY3VycmVudD10aGlzKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoITApLHRoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpLHRoaXMuaGFzRml4ZWRBbmNlc3Rvcj10aGlzLmhlbHBlci5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuImZpeGVkIj09PWUodGhpcykuY3NzKCJwb3NpdGlvbiIpfSkubGVuZ3RoPjAsdGhpcy5wb3NpdGlvbkFicz10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5fcmVmcmVzaE9mZnNldHModCksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbih0LCExKSx0aGlzLm9yaWdpbmFsUGFnZVg9dC5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9dC5wYWdlWSxpLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKGkuY3Vyc29yQXQpLHRoaXMuX3NldENvbnRhaW5tZW50KCksdGhpcy5fdHJpZ2dlcigic3RhcnQiLHQpPT09ITE/KHRoaXMuX2NsZWFyKCksITEpOih0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksZS51aS5kZG1hbmFnZXImJiFpLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsdCksdGhpcy5fbm9ybWFsaXplUmlnaHRCb3R0b20oKSx0aGlzLl9tb3VzZURyYWcodCwhMCksZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWdTdGFydCh0aGlzLHQpLCEwKX0sX3JlZnJlc2hPZmZzZXRzOmZ1bmN0aW9uKGUpe3RoaXMub2Zmc2V0PXt0b3A6dGhpcy5wb3NpdGlvbkFicy50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMucG9zaXRpb25BYnMubGVmdC10aGlzLm1hcmdpbnMubGVmdCxzY3JvbGw6ITEscGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9LHRoaXMub2Zmc2V0LmNsaWNrPXtsZWZ0OmUucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6ZS5wYWdlWS10aGlzLm9mZnNldC50b3B9fSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQsaSl7aWYodGhpcy5oYXNGaXhlZEFuY2VzdG9yJiYodGhpcy5vZmZzZXQucGFyZW50PXRoaXMuX2dldFBhcmVudE9mZnNldCgpKSx0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCwhMCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSwhaSl7dmFyIHM9dGhpcy5fdWlIYXNoKCk7aWYodGhpcy5fdHJpZ2dlcigiZHJhZyIsdCxzKT09PSExKXJldHVybiB0aGlzLl9tb3VzZVVwKHt9KSwhMTt0aGlzLnBvc2l0aW9uPXMucG9zaXRpb259cmV0dXJuIHRoaXMuaGVscGVyWzBdLnN0eWxlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCIsdGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCIsZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWcodGhpcyx0KSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLHM9ITE7cmV0dXJuIGUudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJihzPWUudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyx0KSksdGhpcy5kcm9wcGVkJiYocz10aGlzLmRyb3BwZWQsdGhpcy5kcm9wcGVkPSExKSwiaW52YWxpZCI9PT10aGlzLm9wdGlvbnMucmV2ZXJ0JiYhc3x8InZhbGlkIj09PXRoaXMub3B0aW9ucy5yZXZlcnQmJnN8fHRoaXMub3B0aW9ucy5yZXZlcnQ9PT0hMHx8ZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5yZXZlcnQpJiZ0aGlzLm9wdGlvbnMucmV2ZXJ0LmNhbGwodGhpcy5lbGVtZW50LHMpP2UodGhpcy5oZWxwZXIpLmFuaW1hdGUodGhpcy5vcmlnaW5hbFBvc2l0aW9uLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwxMCksZnVuY3Rpb24oKXtpLl90cmlnZ2VyKCJzdG9wIix0KSE9PSExJiZpLl9jbGVhcigpfSk6dGhpcy5fdHJpZ2dlcigic3RvcCIsdCkhPT0hMSYmdGhpcy5fY2xlYXIoKSwhMX0sX21vdXNlVXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3VuYmxvY2tGcmFtZXMoKSxlLnVpLmRkbWFuYWdlciYmZS51aS5kZG1hbmFnZXIuZHJhZ1N0b3AodGhpcyx0KSx0aGlzLmhhbmRsZUVsZW1lbnQuaXModC50YXJnZXQpJiZ0aGlzLmVsZW1lbnQuZm9jdXMoKSxlLnVpLm1vdXNlLnByb3RvdHlwZS5fbW91c2VVcC5jYWxsKHRoaXMsdCl9LGNhbmNlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlbHBlci5pcygiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpP3RoaXMuX21vdXNlVXAoe30pOnRoaXMuX2NsZWFyKCksdGhpc30sX2dldEhhbmRsZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmhhbmRsZT8hIWUodC50YXJnZXQpLmNsb3Nlc3QodGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLmhhbmRsZSkpLmxlbmd0aDohMH0sX3NldEhhbmRsZUNsYXNzTmFtZTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlRWxlbWVudD10aGlzLm9wdGlvbnMuaGFuZGxlP3RoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5oYW5kbGUpOnRoaXMuZWxlbWVudCx0aGlzLmhhbmRsZUVsZW1lbnQuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZS1oYW5kbGUiKX0sX3JlbW92ZUhhbmRsZUNsYXNzTmFtZTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlRWxlbWVudC5yZW1vdmVDbGFzcygidWktZHJhZ2dhYmxlLWhhbmRsZSIpfSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucyxzPWUuaXNGdW5jdGlvbihpLmhlbHBlciksbj1zP2UoaS5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFt0XSkpOiJjbG9uZSI9PT1pLmhlbHBlcj90aGlzLmVsZW1lbnQuY2xvbmUoKS5yZW1vdmVBdHRyKCJpZCIpOnRoaXMuZWxlbWVudDtyZXR1cm4gbi5wYXJlbnRzKCJib2R5IikubGVuZ3RofHxuLmFwcGVuZFRvKCJwYXJlbnQiPT09aS5hcHBlbmRUbz90aGlzLmVsZW1lbnRbMF0ucGFyZW50Tm9kZTppLmFwcGVuZFRvKSxzJiZuWzBdPT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLl9zZXRQb3NpdGlvblJlbGF0aXZlKCksblswXT09PXRoaXMuZWxlbWVudFswXXx8LyhmaXhlZHxhYnNvbHV0ZSkvLnRlc3Qobi5jc3MoInBvc2l0aW9uIikpfHxuLmNzcygicG9zaXRpb24iLCJhYnNvbHV0ZSIpLG59LF9zZXRQb3NpdGlvblJlbGF0aXZlOmZ1bmN0aW9uKCl7L14oPzpyfGF8ZikvLnRlc3QodGhpcy5lbGVtZW50LmNzcygicG9zaXRpb24iKSl8fCh0aGlzLmVsZW1lbnRbMF0uc3R5bGUucG9zaXRpb249InJlbGF0aXZlIil9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC5zcGxpdCgiICIpKSxlLmlzQXJyYXkodCkmJih0PXtsZWZ0Oit0WzBdLHRvcDordFsxXXx8MH0pLCJsZWZ0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXQubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksInJpZ2h0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdC5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksInRvcCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXQudG9wK3RoaXMubWFyZ2lucy50b3ApLCJib3R0b20iaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10LmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2lzUm9vdE5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuLyhodG1sfGJvZHkpL2kudGVzdChlLnRhZ05hbWUpfHxlPT09dGhpcy5kb2N1bWVudFswXX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpLGk9dGhpcy5kb2N1bWVudFswXTtyZXR1cm4iYWJzb2x1dGUiPT09dGhpcy5jc3NQb3NpdGlvbiYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT1pJiZlLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKSYmKHQubGVmdCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpLHQudG9wKz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSksdGhpcy5faXNSb290Tm9kZSh0aGlzLm9mZnNldFBhcmVudFswXSkmJih0PXt0b3A6MCxsZWZ0OjB9KSx7dG9wOnQudG9wKyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSxsZWZ0OnQubGVmdCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYoInJlbGF0aXZlIiE9PXRoaXMuY3NzUG9zaXRpb24pcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIGU9dGhpcy5lbGVtZW50LnBvc2l0aW9uKCksdD10aGlzLl9pc1Jvb3ROb2RlKHRoaXMuc2Nyb2xsUGFyZW50WzBdKTtyZXR1cm57dG9wOmUudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrKHQ/MDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSksbGVmdDplLmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrKHQ/MDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCkpfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5MZWZ0IiksMTApfHwwLHRvcDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDAscmlnaHQ6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luUmlnaHQiKSwxMCl8fDAsYm90dG9tOnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpbkJvdHRvbSIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIHQsaSxzLG49dGhpcy5vcHRpb25zLGE9dGhpcy5kb2N1bWVudFswXTtyZXR1cm4gdGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj1udWxsLG4uY29udGFpbm1lbnQ/IndpbmRvdyI9PT1uLmNvbnRhaW5tZW50Pyh0aGlzLmNvbnRhaW5tZW50PVtlKHdpbmRvdykuc2Nyb2xsTGVmdCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsZSh3aW5kb3cpLnNjcm9sbFRvcCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLGUod2luZG93KS5zY3JvbGxMZWZ0KCkrZSh3aW5kb3cpLndpZHRoKCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCxlKHdpbmRvdykuc2Nyb2xsVG9wKCkrKGUod2luZG93KS5oZWlnaHQoKXx8YS5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXSx2b2lkIDApOiJkb2N1bWVudCI9PT1uLmNvbnRhaW5tZW50Pyh0aGlzLmNvbnRhaW5tZW50PVswLDAsZShhKS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKGUoYSkuaGVpZ2h0KCl8fGEuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF0sdm9pZCAwKTpuLmNvbnRhaW5tZW50LmNvbnN0cnVjdG9yPT09QXJyYXk/KHRoaXMuY29udGFpbm1lbnQ9bi5jb250YWlubWVudCx2b2lkIDApOigicGFyZW50Ij09PW4uY29udGFpbm1lbnQmJihuLmNvbnRhaW5tZW50PXRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUpLGk9ZShuLmNvbnRhaW5tZW50KSxzPWlbMF0scyYmKHQ9LyhzY3JvbGx8YXV0bykvLnRlc3QoaS5jc3MoIm92ZXJmbG93IikpLHRoaXMuY29udGFpbm1lbnQ9WyhwYXJzZUludChpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdMZWZ0IiksMTApfHwwKSwocGFyc2VJbnQoaS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdUb3AiKSwxMCl8fDApLCh0P01hdGgubWF4KHMuc2Nyb2xsV2lkdGgscy5vZmZzZXRXaWR0aCk6cy5vZmZzZXRXaWR0aCktKHBhcnNlSW50KGkuY3NzKCJib3JkZXJSaWdodFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdSaWdodCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdC10aGlzLm1hcmdpbnMucmlnaHQsKHQ/TWF0aC5tYXgocy5zY3JvbGxIZWlnaHQscy5vZmZzZXRIZWlnaHQpOnMub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoaS5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3AtdGhpcy5tYXJnaW5zLmJvdHRvbV0sdGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj1pKSx2b2lkIDApOih0aGlzLmNvbnRhaW5tZW50PW51bGwsdm9pZCAwKX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKGUsdCl7dHx8KHQ9dGhpcy5wb3NpdGlvbik7dmFyIGk9ImFic29sdXRlIj09PWU/MTotMSxzPXRoaXMuX2lzUm9vdE5vZGUodGhpcy5zY3JvbGxQYXJlbnRbMF0pO3JldHVybnt0b3A6dC50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKmkrdGhpcy5vZmZzZXQucGFyZW50LnRvcCppLSgiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLnRvcDpzPzA6dGhpcy5vZmZzZXQuc2Nyb2xsLnRvcCkqaSxsZWZ0OnQubGVmdCt0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0KmkrdGhpcy5vZmZzZXQucGFyZW50LmxlZnQqaS0oImZpeGVkIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0OnM/MDp0aGlzLm9mZnNldC5zY3JvbGwubGVmdCkqaX19LF9nZW5lcmF0ZVBvc2l0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIGkscyxuLGEsbz10aGlzLm9wdGlvbnMscj10aGlzLl9pc1Jvb3ROb2RlKHRoaXMuc2Nyb2xsUGFyZW50WzBdKSxoPWUucGFnZVgsbD1lLnBhZ2VZO3JldHVybiByJiZ0aGlzLm9mZnNldC5zY3JvbGx8fCh0aGlzLm9mZnNldC5zY3JvbGw9e3RvcDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSxsZWZ0OnRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKX0pLHQmJih0aGlzLmNvbnRhaW5tZW50JiYodGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj8ocz10aGlzLnJlbGF0aXZlQ29udGFpbmVyLm9mZnNldCgpLGk9W3RoaXMuY29udGFpbm1lbnRbMF0rcy5sZWZ0LHRoaXMuY29udGFpbm1lbnRbMV0rcy50b3AsdGhpcy5jb250YWlubWVudFsyXStzLmxlZnQsdGhpcy5jb250YWlubWVudFszXStzLnRvcF0pOmk9dGhpcy5jb250YWlubWVudCxlLnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8aVswXSYmKGg9aVswXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSxlLnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDxpWzFdJiYobD1pWzFdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCksZS5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PmlbMl0mJihoPWlbMl0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksZS5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A+aVszXSYmKGw9aVszXSt0aGlzLm9mZnNldC5jbGljay50b3ApKSxvLmdyaWQmJihuPW8uZ3JpZFsxXT90aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgobC10aGlzLm9yaWdpbmFsUGFnZVkpL28uZ3JpZFsxXSkqby5ncmlkWzFdOnRoaXMub3JpZ2luYWxQYWdlWSxsPWk/bi10aGlzLm9mZnNldC5jbGljay50b3A+PWlbMV18fG4tdGhpcy5vZmZzZXQuY2xpY2sudG9wPmlbM10/bjpuLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49aVsxXT9uLW8uZ3JpZFsxXTpuK28uZ3JpZFsxXTpuLGE9by5ncmlkWzBdP3RoaXMub3JpZ2luYWxQYWdlWCtNYXRoLnJvdW5kKChoLXRoaXMub3JpZ2luYWxQYWdlWCkvby5ncmlkWzBdKSpvLmdyaWRbMF06dGhpcy5vcmlnaW5hbFBhZ2VYLGg9aT9hLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PWlbMF18fGEtdGhpcy5vZmZzZXQuY2xpY2subGVmdD5pWzJdP2E6YS10aGlzLm9mZnNldC5jbGljay5sZWZ0Pj1pWzBdP2Etby5ncmlkWzBdOmErby5ncmlkWzBdOmEpLCJ5Ij09PW8uYXhpcyYmKGg9dGhpcy5vcmlnaW5hbFBhZ2VYKSwieCI9PT1vLmF4aXMmJihsPXRoaXMub3JpZ2luYWxQYWdlWSkpLHt0b3A6bC10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKCJmaXhlZCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLm9mZnNldC5zY3JvbGwudG9wOnI/MDp0aGlzLm9mZnNldC5zY3JvbGwudG9wKSxsZWZ0OmgtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KygiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQ6cj8wOnRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0KX19LF9jbGVhcjpmdW5jdGlvbigpe3RoaXMuaGVscGVyLnJlbW92ZUNsYXNzKCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmciKSx0aGlzLmhlbHBlclswXT09PXRoaXMuZWxlbWVudFswXXx8dGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsfHx0aGlzLmhlbHBlci5yZW1vdmUoKSx0aGlzLmhlbHBlcj1udWxsLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0aGlzLmRlc3Ryb3lPbkNsZWFyJiZ0aGlzLmRlc3Ryb3koKX0sX25vcm1hbGl6ZVJpZ2h0Qm90dG9tOmZ1bmN0aW9uKCl7InkiIT09dGhpcy5vcHRpb25zLmF4aXMmJiJhdXRvIiE9PXRoaXMuaGVscGVyLmNzcygicmlnaHQiKSYmKHRoaXMuaGVscGVyLndpZHRoKHRoaXMuaGVscGVyLndpZHRoKCkpLHRoaXMuaGVscGVyLmNzcygicmlnaHQiLCJhdXRvIikpLCJ4IiE9PXRoaXMub3B0aW9ucy5heGlzJiYiYXV0byIhPT10aGlzLmhlbHBlci5jc3MoImJvdHRvbSIpJiYodGhpcy5oZWxwZXIuaGVpZ2h0KHRoaXMuaGVscGVyLmhlaWdodCgpKSx0aGlzLmhlbHBlci5jc3MoImJvdHRvbSIsImF1dG8iKSl9LF90cmlnZ2VyOmZ1bmN0aW9uKHQsaSxzKXtyZXR1cm4gcz1zfHx0aGlzLl91aUhhc2goKSxlLnVpLnBsdWdpbi5jYWxsKHRoaXMsdCxbaSxzLHRoaXNdLCEwKSwvXihkcmFnfHN0YXJ0fHN0b3ApLy50ZXN0KHQpJiYodGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSxzLm9mZnNldD10aGlzLnBvc2l0aW9uQWJzKSxlLldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuY2FsbCh0aGlzLHQsaSxzKX0scGx1Z2luczp7fSxfdWlIYXNoOmZ1bmN0aW9uKCl7cmV0dXJue2hlbHBlcjp0aGlzLmhlbHBlcixwb3NpdGlvbjp0aGlzLnBvc2l0aW9uLG9yaWdpbmFsUG9zaXRpb246dGhpcy5vcmlnaW5hbFBvc2l0aW9uLG9mZnNldDp0aGlzLnBvc2l0aW9uQWJzfX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsImNvbm5lY3RUb1NvcnRhYmxlIix7c3RhcnQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPWUuZXh0ZW5kKHt9LGkse2l0ZW06cy5lbGVtZW50fSk7cy5zb3J0YWJsZXM9W10sZShzLm9wdGlvbnMuY29ubmVjdFRvU29ydGFibGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1lKHRoaXMpLnNvcnRhYmxlKCJpbnN0YW5jZSIpO2kmJiFpLm9wdGlvbnMuZGlzYWJsZWQmJihzLnNvcnRhYmxlcy5wdXNoKGkpLGkucmVmcmVzaFBvc2l0aW9ucygpLGkuX3RyaWdnZXIoImFjdGl2YXRlIix0LG4pKX0pfSxzdG9wOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1lLmV4dGVuZCh7fSxpLHtpdGVtOnMuZWxlbWVudH0pO3MuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSxlLmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UuaXNPdmVyPyhlLmlzT3Zlcj0wLHMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMCxlLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsZS5fc3RvcmVkQ1NTPXtwb3NpdGlvbjplLnBsYWNlaG9sZGVyLmNzcygicG9zaXRpb24iKSx0b3A6ZS5wbGFjZWhvbGRlci5jc3MoInRvcCIpLGxlZnQ6ZS5wbGFjZWhvbGRlci5jc3MoImxlZnQiKX0sZS5fbW91c2VTdG9wKHQpLGUub3B0aW9ucy5oZWxwZXI9ZS5vcHRpb25zLl9oZWxwZXIpOihlLmNhbmNlbEhlbHBlclJlbW92YWw9ITAsZS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsdCxuKSl9KX0sZHJhZzpmdW5jdGlvbih0LGkscyl7ZS5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7dmFyIG49ITEsYT10aGlzO2EucG9zaXRpb25BYnM9cy5wb3NpdGlvbkFicyxhLmhlbHBlclByb3BvcnRpb25zPXMuaGVscGVyUHJvcG9ydGlvbnMsYS5vZmZzZXQuY2xpY2s9cy5vZmZzZXQuY2xpY2ssYS5faW50ZXJzZWN0c1dpdGgoYS5jb250YWluZXJDYWNoZSkmJihuPSEwLGUuZWFjaChzLnNvcnRhYmxlcyxmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uQWJzPXMucG9zaXRpb25BYnMsdGhpcy5oZWxwZXJQcm9wb3J0aW9ucz1zLmhlbHBlclByb3BvcnRpb25zLHRoaXMub2Zmc2V0LmNsaWNrPXMub2Zmc2V0LmNsaWNrLHRoaXMhPT1hJiZ0aGlzLl9pbnRlcnNlY3RzV2l0aCh0aGlzLmNvbnRhaW5lckNhY2hlKSYmZS5jb250YWlucyhhLmVsZW1lbnRbMF0sdGhpcy5lbGVtZW50WzBdKSYmKG49ITEpLG4KfSkpLG4/KGEuaXNPdmVyfHwoYS5pc092ZXI9MSxzLl9wYXJlbnQ9aS5oZWxwZXIucGFyZW50KCksYS5jdXJyZW50SXRlbT1pLmhlbHBlci5hcHBlbmRUbyhhLmVsZW1lbnQpLmRhdGEoInVpLXNvcnRhYmxlLWl0ZW0iLCEwKSxhLm9wdGlvbnMuX2hlbHBlcj1hLm9wdGlvbnMuaGVscGVyLGEub3B0aW9ucy5oZWxwZXI9ZnVuY3Rpb24oKXtyZXR1cm4gaS5oZWxwZXJbMF19LHQudGFyZ2V0PWEuY3VycmVudEl0ZW1bMF0sYS5fbW91c2VDYXB0dXJlKHQsITApLGEuX21vdXNlU3RhcnQodCwhMCwhMCksYS5vZmZzZXQuY2xpY2sudG9wPXMub2Zmc2V0LmNsaWNrLnRvcCxhLm9mZnNldC5jbGljay5sZWZ0PXMub2Zmc2V0LmNsaWNrLmxlZnQsYS5vZmZzZXQucGFyZW50LmxlZnQtPXMub2Zmc2V0LnBhcmVudC5sZWZ0LWEub2Zmc2V0LnBhcmVudC5sZWZ0LGEub2Zmc2V0LnBhcmVudC50b3AtPXMub2Zmc2V0LnBhcmVudC50b3AtYS5vZmZzZXQucGFyZW50LnRvcCxzLl90cmlnZ2VyKCJ0b1NvcnRhYmxlIix0KSxzLmRyb3BwZWQ9YS5lbGVtZW50LGUuZWFjaChzLnNvcnRhYmxlcyxmdW5jdGlvbigpe3RoaXMucmVmcmVzaFBvc2l0aW9ucygpfSkscy5jdXJyZW50SXRlbT1zLmVsZW1lbnQsYS5mcm9tT3V0c2lkZT1zKSxhLmN1cnJlbnRJdGVtJiYoYS5fbW91c2VEcmFnKHQpLGkucG9zaXRpb249YS5wb3NpdGlvbikpOmEuaXNPdmVyJiYoYS5pc092ZXI9MCxhLmNhbmNlbEhlbHBlclJlbW92YWw9ITAsYS5vcHRpb25zLl9yZXZlcnQ9YS5vcHRpb25zLnJldmVydCxhLm9wdGlvbnMucmV2ZXJ0PSExLGEuX3RyaWdnZXIoIm91dCIsdCxhLl91aUhhc2goYSkpLGEuX21vdXNlU3RvcCh0LCEwKSxhLm9wdGlvbnMucmV2ZXJ0PWEub3B0aW9ucy5fcmV2ZXJ0LGEub3B0aW9ucy5oZWxwZXI9YS5vcHRpb25zLl9oZWxwZXIsYS5wbGFjZWhvbGRlciYmYS5wbGFjZWhvbGRlci5yZW1vdmUoKSxpLmhlbHBlci5hcHBlbmRUbyhzLl9wYXJlbnQpLHMuX3JlZnJlc2hPZmZzZXRzKHQpLGkucG9zaXRpb249cy5fZ2VuZXJhdGVQb3NpdGlvbih0LCEwKSxzLl90cmlnZ2VyKCJmcm9tU29ydGFibGUiLHQpLHMuZHJvcHBlZD0hMSxlLmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX0pKX0pfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiY3Vyc29yIix7c3RhcnQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPWUoImJvZHkiKSxhPXMub3B0aW9ucztuLmNzcygiY3Vyc29yIikmJihhLl9jdXJzb3I9bi5jc3MoImN1cnNvciIpKSxuLmNzcygiY3Vyc29yIixhLmN1cnNvcil9LHN0b3A6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXMub3B0aW9ucztuLl9jdXJzb3ImJmUoImJvZHkiKS5jc3MoImN1cnNvciIsbi5fY3Vyc29yKX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsIm9wYWNpdHkiLHtzdGFydDpmdW5jdGlvbih0LGkscyl7dmFyIG49ZShpLmhlbHBlciksYT1zLm9wdGlvbnM7bi5jc3MoIm9wYWNpdHkiKSYmKGEuX29wYWNpdHk9bi5jc3MoIm9wYWNpdHkiKSksbi5jc3MoIm9wYWNpdHkiLGEub3BhY2l0eSl9LHN0b3A6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXMub3B0aW9ucztuLl9vcGFjaXR5JiZlKGkuaGVscGVyKS5jc3MoIm9wYWNpdHkiLG4uX29wYWNpdHkpfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwic2Nyb2xsIix7c3RhcnQ6ZnVuY3Rpb24oZSx0LGkpe2kuc2Nyb2xsUGFyZW50Tm90SGlkZGVufHwoaS5zY3JvbGxQYXJlbnROb3RIaWRkZW49aS5oZWxwZXIuc2Nyb2xsUGFyZW50KCExKSksaS5zY3JvbGxQYXJlbnROb3RIaWRkZW5bMF0hPT1pLmRvY3VtZW50WzBdJiYiSFRNTCIhPT1pLnNjcm9sbFBhcmVudE5vdEhpZGRlblswXS50YWdOYW1lJiYoaS5vdmVyZmxvd09mZnNldD1pLnNjcm9sbFBhcmVudE5vdEhpZGRlbi5vZmZzZXQoKSl9LGRyYWc6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXMub3B0aW9ucyxhPSExLG89cy5zY3JvbGxQYXJlbnROb3RIaWRkZW5bMF0scj1zLmRvY3VtZW50WzBdO28hPT1yJiYiSFRNTCIhPT1vLnRhZ05hbWU/KG4uYXhpcyYmIngiPT09bi5heGlzfHwocy5vdmVyZmxvd09mZnNldC50b3Arby5vZmZzZXRIZWlnaHQtdC5wYWdlWTxuLnNjcm9sbFNlbnNpdGl2aXR5P28uc2Nyb2xsVG9wPWE9by5zY3JvbGxUb3Arbi5zY3JvbGxTcGVlZDp0LnBhZ2VZLXMub3ZlcmZsb3dPZmZzZXQudG9wPG4uc2Nyb2xsU2Vuc2l0aXZpdHkmJihvLnNjcm9sbFRvcD1hPW8uc2Nyb2xsVG9wLW4uc2Nyb2xsU3BlZWQpKSxuLmF4aXMmJiJ5Ij09PW4uYXhpc3x8KHMub3ZlcmZsb3dPZmZzZXQubGVmdCtvLm9mZnNldFdpZHRoLXQucGFnZVg8bi5zY3JvbGxTZW5zaXRpdml0eT9vLnNjcm9sbExlZnQ9YT1vLnNjcm9sbExlZnQrbi5zY3JvbGxTcGVlZDp0LnBhZ2VYLXMub3ZlcmZsb3dPZmZzZXQubGVmdDxuLnNjcm9sbFNlbnNpdGl2aXR5JiYoby5zY3JvbGxMZWZ0PWE9by5zY3JvbGxMZWZ0LW4uc2Nyb2xsU3BlZWQpKSk6KG4uYXhpcyYmIngiPT09bi5heGlzfHwodC5wYWdlWS1lKHIpLnNjcm9sbFRvcCgpPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/YT1lKHIpLnNjcm9sbFRvcChlKHIpLnNjcm9sbFRvcCgpLW4uc2Nyb2xsU3BlZWQpOmUod2luZG93KS5oZWlnaHQoKS0odC5wYWdlWS1lKHIpLnNjcm9sbFRvcCgpKTxuLnNjcm9sbFNlbnNpdGl2aXR5JiYoYT1lKHIpLnNjcm9sbFRvcChlKHIpLnNjcm9sbFRvcCgpK24uc2Nyb2xsU3BlZWQpKSksbi5heGlzJiYieSI9PT1uLmF4aXN8fCh0LnBhZ2VYLWUocikuc2Nyb2xsTGVmdCgpPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/YT1lKHIpLnNjcm9sbExlZnQoZShyKS5zY3JvbGxMZWZ0KCktbi5zY3JvbGxTcGVlZCk6ZSh3aW5kb3cpLndpZHRoKCktKHQucGFnZVgtZShyKS5zY3JvbGxMZWZ0KCkpPG4uc2Nyb2xsU2Vuc2l0aXZpdHkmJihhPWUocikuc2Nyb2xsTGVmdChlKHIpLnNjcm9sbExlZnQoKStuLnNjcm9sbFNwZWVkKSkpKSxhIT09ITEmJmUudWkuZGRtYW5hZ2VyJiYhbi5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhzLHQpfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwic25hcCIse3N0YXJ0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1zLm9wdGlvbnM7cy5zbmFwRWxlbWVudHM9W10sZShuLnNuYXAuY29uc3RydWN0b3IhPT1TdHJpbmc/bi5zbmFwLml0ZW1zfHwiOmRhdGEodWktZHJhZ2dhYmxlKSI6bi5zbmFwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxpPXQub2Zmc2V0KCk7dGhpcyE9PXMuZWxlbWVudFswXSYmcy5zbmFwRWxlbWVudHMucHVzaCh7aXRlbTp0aGlzLHdpZHRoOnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0Lm91dGVySGVpZ2h0KCksdG9wOmkudG9wLGxlZnQ6aS5sZWZ0fSl9KX0sZHJhZzpmdW5jdGlvbih0LGkscyl7dmFyIG4sYSxvLHIsaCxsLHUsZCxjLHAsZj1zLm9wdGlvbnMsbT1mLnNuYXBUb2xlcmFuY2UsZz1pLm9mZnNldC5sZWZ0LHY9ZytzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLHk9aS5vZmZzZXQudG9wLGI9eStzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodDtmb3IoYz1zLnNuYXBFbGVtZW50cy5sZW5ndGgtMTtjPj0wO2MtLSloPXMuc25hcEVsZW1lbnRzW2NdLmxlZnQtcy5tYXJnaW5zLmxlZnQsbD1oK3Muc25hcEVsZW1lbnRzW2NdLndpZHRoLHU9cy5zbmFwRWxlbWVudHNbY10udG9wLXMubWFyZ2lucy50b3AsZD11K3Muc25hcEVsZW1lbnRzW2NdLmhlaWdodCxoLW0+dnx8Zz5sK218fHUtbT5ifHx5PmQrbXx8IWUuY29udGFpbnMocy5zbmFwRWxlbWVudHNbY10uaXRlbS5vd25lckRvY3VtZW50LHMuc25hcEVsZW1lbnRzW2NdLml0ZW0pPyhzLnNuYXBFbGVtZW50c1tjXS5zbmFwcGluZyYmcy5vcHRpb25zLnNuYXAucmVsZWFzZSYmcy5vcHRpb25zLnNuYXAucmVsZWFzZS5jYWxsKHMuZWxlbWVudCx0LGUuZXh0ZW5kKHMuX3VpSGFzaCgpLHtzbmFwSXRlbTpzLnNuYXBFbGVtZW50c1tjXS5pdGVtfSkpLHMuc25hcEVsZW1lbnRzW2NdLnNuYXBwaW5nPSExKTooImlubmVyIiE9PWYuc25hcE1vZGUmJihuPW0+PU1hdGguYWJzKHUtYiksYT1tPj1NYXRoLmFicyhkLXkpLG89bT49TWF0aC5hYnMoaC12KSxyPW0+PU1hdGguYWJzKGwtZyksbiYmKGkucG9zaXRpb24udG9wPXMuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDp1LXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcCksYSYmKGkucG9zaXRpb24udG9wPXMuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDpkLGxlZnQ6MH0pLnRvcCksbyYmKGkucG9zaXRpb24ubGVmdD1zLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6MCxsZWZ0Omgtcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aH0pLmxlZnQpLHImJihpLnBvc2l0aW9uLmxlZnQ9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpsfSkubGVmdCkpLHA9bnx8YXx8b3x8ciwib3V0ZXIiIT09Zi5zbmFwTW9kZSYmKG49bT49TWF0aC5hYnModS15KSxhPW0+PU1hdGguYWJzKGQtYiksbz1tPj1NYXRoLmFicyhoLWcpLHI9bT49TWF0aC5hYnMobC12KSxuJiYoaS5wb3NpdGlvbi50b3A9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOnUsbGVmdDowfSkudG9wKSxhJiYoaS5wb3NpdGlvbi50b3A9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOmQtcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsbGVmdDowfSkudG9wKSxvJiYoaS5wb3NpdGlvbi5sZWZ0PXMuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6aH0pLmxlZnQpLHImJihpLnBvc2l0aW9uLmxlZnQ9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpsLXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0KSksIXMuc25hcEVsZW1lbnRzW2NdLnNuYXBwaW5nJiYobnx8YXx8b3x8cnx8cCkmJnMub3B0aW9ucy5zbmFwLnNuYXAmJnMub3B0aW9ucy5zbmFwLnNuYXAuY2FsbChzLmVsZW1lbnQsdCxlLmV4dGVuZChzLl91aUhhc2goKSx7c25hcEl0ZW06cy5zbmFwRWxlbWVudHNbY10uaXRlbX0pKSxzLnNuYXBFbGVtZW50c1tjXS5zbmFwcGluZz1ufHxhfHxvfHxyfHxwKX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInN0YWNrIix7c3RhcnQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGE9cy5vcHRpb25zLG89ZS5tYWtlQXJyYXkoZShhLnN0YWNrKSkuc29ydChmdW5jdGlvbih0LGkpe3JldHVybihwYXJzZUludChlKHQpLmNzcygiekluZGV4IiksMTApfHwwKS0ocGFyc2VJbnQoZShpKS5jc3MoInpJbmRleCIpLDEwKXx8MCl9KTtvLmxlbmd0aCYmKG49cGFyc2VJbnQoZShvWzBdKS5jc3MoInpJbmRleCIpLDEwKXx8MCxlKG8pLmVhY2goZnVuY3Rpb24odCl7ZSh0aGlzKS5jc3MoInpJbmRleCIsbit0KX0pLHRoaXMuY3NzKCJ6SW5kZXgiLG4rby5sZW5ndGgpKX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInpJbmRleCIse3N0YXJ0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1lKGkuaGVscGVyKSxhPXMub3B0aW9ucztuLmNzcygiekluZGV4IikmJihhLl96SW5kZXg9bi5jc3MoInpJbmRleCIpKSxuLmNzcygiekluZGV4IixhLnpJbmRleCl9LHN0b3A6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXMub3B0aW9ucztuLl96SW5kZXgmJmUoaS5oZWxwZXIpLmNzcygiekluZGV4IixuLl96SW5kZXgpfX0pLGUudWkuZHJhZ2dhYmxlLGUud2lkZ2V0KCJ1aS5kcm9wcGFibGUiLHt2ZXJzaW9uOiIxLjExLjQiLHdpZGdldEV2ZW50UHJlZml4OiJkcm9wIixvcHRpb25zOnthY2NlcHQ6IioiLGFjdGl2ZUNsYXNzOiExLGFkZENsYXNzZXM6ITAsZ3JlZWR5OiExLGhvdmVyQ2xhc3M6ITEsc2NvcGU6ImRlZmF1bHQiLHRvbGVyYW5jZToiaW50ZXJzZWN0IixhY3RpdmF0ZTpudWxsLGRlYWN0aXZhdGU6bnVsbCxkcm9wOm51bGwsb3V0Om51bGwsb3ZlcjpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQsaT10aGlzLm9wdGlvbnMscz1pLmFjY2VwdDt0aGlzLmlzb3Zlcj0hMSx0aGlzLmlzb3V0PSEwLHRoaXMuYWNjZXB0PWUuaXNGdW5jdGlvbihzKT9zOmZ1bmN0aW9uKGUpe3JldHVybiBlLmlzKHMpfSx0aGlzLnByb3BvcnRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9YXJndW1lbnRzWzBdLHZvaWQgMCk6dD90OnQ9e3dpZHRoOnRoaXMuZWxlbWVudFswXS5vZmZzZXRXaWR0aCxoZWlnaHQ6dGhpcy5lbGVtZW50WzBdLm9mZnNldEhlaWdodH19LHRoaXMuX2FkZFRvTWFuYWdlcihpLnNjb3BlKSxpLmFkZENsYXNzZXMmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJvcHBhYmxlIil9LF9hZGRUb01hbmFnZXI6ZnVuY3Rpb24odCl7ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0XT1lLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3RdfHxbXSxlLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3RdLnB1c2godGhpcyl9LF9zcGxpY2U6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7ZS5sZW5ndGg+dDt0KyspZVt0XT09PXRoaXMmJmUuc3BsaWNlKHQsMSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIHQ9ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0aGlzLm9wdGlvbnMuc2NvcGVdO3RoaXMuX3NwbGljZSh0KSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRyb3BwYWJsZSB1aS1kcm9wcGFibGUtZGlzYWJsZWQiKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGkpe2lmKCJhY2NlcHQiPT09dCl0aGlzLmFjY2VwdD1lLmlzRnVuY3Rpb24oaSk/aTpmdW5jdGlvbihlKXtyZXR1cm4gZS5pcyhpKX07ZWxzZSBpZigic2NvcGUiPT09dCl7dmFyIHM9ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0aGlzLm9wdGlvbnMuc2NvcGVdO3RoaXMuX3NwbGljZShzKSx0aGlzLl9hZGRUb01hbmFnZXIoaSl9dGhpcy5fc3VwZXIodCxpKX0sX2FjdGl2YXRlOmZ1bmN0aW9uKHQpe3ZhciBpPWUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7dGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSxpJiZ0aGlzLl90cmlnZ2VyKCJhY3RpdmF0ZSIsdCx0aGlzLnVpKGkpKX0sX2RlYWN0aXZhdGU6ZnVuY3Rpb24odCl7dmFyIGk9ZS51aS5kZG1hbmFnZXIuY3VycmVudDt0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLGkmJnRoaXMuX3RyaWdnZXIoImRlYWN0aXZhdGUiLHQsdGhpcy51aShpKSl9LF9vdmVyOmZ1bmN0aW9uKHQpe3ZhciBpPWUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aSYmKGkuY3VycmVudEl0ZW18fGkuZWxlbWVudClbMF0hPT10aGlzLmVsZW1lbnRbMF0mJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLGkuY3VycmVudEl0ZW18fGkuZWxlbWVudCkmJih0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKSx0aGlzLl90cmlnZ2VyKCJvdmVyIix0LHRoaXMudWkoaSkpKX0sX291dDpmdW5jdGlvbih0KXt2YXIgaT1lLnVpLmRkbWFuYWdlci5jdXJyZW50O2kmJihpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpJiYodGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcigib3V0Iix0LHRoaXMudWkoaSkpKX0sX2Ryb3A6ZnVuY3Rpb24odCxpKXt2YXIgcz1pfHxlLnVpLmRkbWFuYWdlci5jdXJyZW50LG49ITE7cmV0dXJuIHMmJihzLmN1cnJlbnRJdGVtfHxzLmVsZW1lbnQpWzBdIT09dGhpcy5lbGVtZW50WzBdPyh0aGlzLmVsZW1lbnQuZmluZCgiOmRhdGEodWktZHJvcHBhYmxlKSIpLm5vdCgiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1lKHRoaXMpLmRyb3BwYWJsZSgiaW5zdGFuY2UiKTtyZXR1cm4gaS5vcHRpb25zLmdyZWVkeSYmIWkub3B0aW9ucy5kaXNhYmxlZCYmaS5vcHRpb25zLnNjb3BlPT09cy5vcHRpb25zLnNjb3BlJiZpLmFjY2VwdC5jYWxsKGkuZWxlbWVudFswXSxzLmN1cnJlbnRJdGVtfHxzLmVsZW1lbnQpJiZlLnVpLmludGVyc2VjdChzLGUuZXh0ZW5kKGkse29mZnNldDppLmVsZW1lbnQub2Zmc2V0KCl9KSxpLm9wdGlvbnMudG9sZXJhbmNlLHQpPyhuPSEwLCExKTp2b2lkIDB9KSxuPyExOnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLHMuY3VycmVudEl0ZW18fHMuZWxlbWVudCk/KHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksdGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcigiZHJvcCIsdCx0aGlzLnVpKHMpKSx0aGlzLmVsZW1lbnQpOiExKTohMX0sdWk6ZnVuY3Rpb24oZSl7cmV0dXJue2RyYWdnYWJsZTplLmN1cnJlbnRJdGVtfHxlLmVsZW1lbnQsaGVscGVyOmUuaGVscGVyLHBvc2l0aW9uOmUucG9zaXRpb24sb2Zmc2V0OmUucG9zaXRpb25BYnN9fX0pLGUudWkuaW50ZXJzZWN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsaSl7cmV0dXJuIGU+PXQmJnQraT5lfXJldHVybiBmdW5jdGlvbih0LGkscyxuKXtpZighaS5vZmZzZXQpcmV0dXJuITE7dmFyIGE9KHQucG9zaXRpb25BYnN8fHQucG9zaXRpb24uYWJzb2x1dGUpLmxlZnQrdC5tYXJnaW5zLmxlZnQsbz0odC5wb3NpdGlvbkFic3x8dC5wb3NpdGlvbi5hYnNvbHV0ZSkudG9wK3QubWFyZ2lucy50b3Ascj1hK3QuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsaD1vK3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGw9aS5vZmZzZXQubGVmdCx1PWkub2Zmc2V0LnRvcCxkPWwraS5wcm9wb3J0aW9ucygpLndpZHRoLGM9dStpLnByb3BvcnRpb25zKCkuaGVpZ2h0O3N3aXRjaChzKXtjYXNlImZpdCI6cmV0dXJuIGE+PWwmJmQ+PXImJm8+PXUmJmM+PWg7Y2FzZSJpbnRlcnNlY3QiOnJldHVybiBhK3QuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMj5sJiZkPnItdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yJiZvK3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI+dSYmYz5oLXQuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI7Y2FzZSJwb2ludGVyIjpyZXR1cm4gZShuLnBhZ2VZLHUsaS5wcm9wb3J0aW9ucygpLmhlaWdodCkmJmUobi5wYWdlWCxsLGkucHJvcG9ydGlvbnMoKS53aWR0aCk7Y2FzZSJ0b3VjaCI6cmV0dXJuKG8+PXUmJmM+PW98fGg+PXUmJmM+PWh8fHU+byYmaD5jKSYmKGE+PWwmJmQ+PWF8fHI+PWwmJmQ+PXJ8fGw+YSYmcj5kKTtkZWZhdWx0OnJldHVybiExfX19KCksZS51aS5kZG1hbmFnZXI9e2N1cnJlbnQ6bnVsbCxkcm9wcGFibGVzOnsiZGVmYXVsdCI6W119LHByZXBhcmVPZmZzZXRzOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhPWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10sbz1pP2kudHlwZTpudWxsLHI9KHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkuZmluZCgiOmRhdGEodWktZHJvcHBhYmxlKSIpLmFkZEJhY2soKTtlOmZvcihzPTA7YS5sZW5ndGg+cztzKyspaWYoIShhW3NdLm9wdGlvbnMuZGlzYWJsZWR8fHQmJiFhW3NdLmFjY2VwdC5jYWxsKGFbc10uZWxlbWVudFswXSx0LmN1cnJlbnRJdGVtfHx0LmVsZW1lbnQpKSl7Zm9yKG49MDtyLmxlbmd0aD5uO24rKylpZihyW25dPT09YVtzXS5lbGVtZW50WzBdKXthW3NdLnByb3BvcnRpb25zKCkuaGVpZ2h0PTA7Y29udGludWUgZX1hW3NdLnZpc2libGU9Im5vbmUiIT09YVtzXS5lbGVtZW50LmNzcygiZGlzcGxheSIpLGFbc10udmlzaWJsZSYmKCJtb3VzZWRvd24iPT09byYmYVtzXS5fYWN0aXZhdGUuY2FsbChhW3NdLGkpLGFbc10ub2Zmc2V0PWFbc10uZWxlbWVudC5vZmZzZXQoKSxhW3NdLnByb3BvcnRpb25zKHt3aWR0aDphW3NdLmVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsaGVpZ2h0OmFbc10uZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9KSl9fSxkcm9wOmZ1bmN0aW9uKHQsaSl7dmFyIHM9ITE7cmV0dXJuIGUuZWFjaCgoZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0Lm9wdGlvbnMuc2NvcGVdfHxbXSkuc2xpY2UoKSxmdW5jdGlvbigpe3RoaXMub3B0aW9ucyYmKCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMudmlzaWJsZSYmZS51aS5pbnRlcnNlY3QodCx0aGlzLHRoaXMub3B0aW9ucy50b2xlcmFuY2UsaSkmJihzPXRoaXMuX2Ryb3AuY2FsbCh0aGlzLGkpfHxzKSwhdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLnZpc2libGUmJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkmJih0aGlzLmlzb3V0PSEwLHRoaXMuaXNvdmVyPSExLHRoaXMuX2RlYWN0aXZhdGUuY2FsbCh0aGlzLGkpKSl9KSxzfSxkcmFnU3RhcnQ6ZnVuY3Rpb24odCxpKXt0LmVsZW1lbnQucGFyZW50c1VudGlsKCJib2R5IikuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMucmVmcmVzaFBvc2l0aW9uc3x8ZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModCxpKX0pfSxkcmFnOmZ1bmN0aW9uKHQsaSl7dC5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnMmJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHQsaSksZS5lYWNoKGUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10sZnVuY3Rpb24oKXtpZighdGhpcy5vcHRpb25zLmRpc2FibGVkJiYhdGhpcy5ncmVlZHlDaGlsZCYmdGhpcy52aXNpYmxlKXt2YXIgcyxuLGEsbz1lLnVpLmludGVyc2VjdCh0LHRoaXMsdGhpcy5vcHRpb25zLnRvbGVyYW5jZSxpKSxyPSFvJiZ0aGlzLmlzb3Zlcj8iaXNvdXQiOm8mJiF0aGlzLmlzb3Zlcj8iaXNvdmVyIjpudWxsO3ImJih0aGlzLm9wdGlvbnMuZ3JlZWR5JiYobj10aGlzLm9wdGlvbnMuc2NvcGUsYT10aGlzLmVsZW1lbnQucGFyZW50cygiOmRhdGEodWktZHJvcHBhYmxlKSIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmRyb3BwYWJsZSgiaW5zdGFuY2UiKS5vcHRpb25zLnNjb3BlPT09bn0pLGEubGVuZ3RoJiYocz1lKGFbMF0pLmRyb3BwYWJsZSgiaW5zdGFuY2UiKSxzLmdyZWVkeUNoaWxkPSJpc292ZXIiPT09cikpLHMmJiJpc292ZXIiPT09ciYmKHMuaXNvdmVyPSExLHMuaXNvdXQ9ITAscy5fb3V0LmNhbGwocyxpKSksdGhpc1tyXT0hMCx0aGlzWyJpc291dCI9PT1yPyJpc292ZXIiOiJpc291dCJdPSExLHRoaXNbImlzb3ZlciI9PT1yPyJfb3ZlciI6Il9vdXQiXS5jYWxsKHRoaXMsaSkscyYmImlzb3V0Ij09PXImJihzLmlzb3V0PSExLHMuaXNvdmVyPSEwLHMuX292ZXIuY2FsbChzLGkpKSl9fSl9LGRyYWdTdG9wOmZ1bmN0aW9uKHQsaSl7dC5lbGVtZW50LnBhcmVudHNVbnRpbCgiYm9keSIpLnVuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIpLHQub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zfHxlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0LGkpfX0sZS51aS5kcm9wcGFibGUsZS53aWRnZXQoInVpLnJlc2l6YWJsZSIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMS40Iix3aWRnZXRFdmVudFByZWZpeDoicmVzaXplIixvcHRpb25zOnthbHNvUmVzaXplOiExLGFuaW1hdGU6ITEsYW5pbWF0ZUR1cmF0aW9uOiJzbG93IixhbmltYXRlRWFzaW5nOiJzd2luZyIsYXNwZWN0UmF0aW86ITEsYXV0b0hpZGU6ITEsY29udGFpbm1lbnQ6ITEsZ2hvc3Q6ITEsZ3JpZDohMSxoYW5kbGVzOiJlLHMsc2UiLGhlbHBlcjohMSxtYXhIZWlnaHQ6bnVsbCxtYXhXaWR0aDpudWxsLG1pbkhlaWdodDoxMCxtaW5XaWR0aDoxMCx6SW5kZXg6OTAscmVzaXplOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9udW06ZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfHwwfSxfaXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKHBhcnNlSW50KGUsMTApKX0sX2hhc1Njcm9sbDpmdW5jdGlvbih0LGkpe2lmKCJoaWRkZW4iPT09ZSh0KS5jc3MoIm92ZXJmbG93IikpcmV0dXJuITE7dmFyIHM9aSYmImxlZnQiPT09aT8ic2Nyb2xsTGVmdCI6InNjcm9sbFRvcCIsbj0hMTtyZXR1cm4gdFtzXT4wPyEwOih0W3NdPTEsbj10W3NdPjAsdFtzXT0wLG4pfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQsaSxzLG4sYSxvPXRoaXMscj10aGlzLm9wdGlvbnM7aWYodGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1yZXNpemFibGUiKSxlLmV4dGVuZCh0aGlzLHtfYXNwZWN0UmF0aW86ISFyLmFzcGVjdFJhdGlvLGFzcGVjdFJhdGlvOnIuYXNwZWN0UmF0aW8sb3JpZ2luYWxFbGVtZW50OnRoaXMuZWxlbWVudCxfcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50czpbXSxfaGVscGVyOnIuaGVscGVyfHxyLmdob3N0fHxyLmFuaW1hdGU/ci5oZWxwZXJ8fCJ1aS1yZXNpemFibGUtaGVscGVyIjpudWxsfSksdGhpcy5lbGVtZW50WzBdLm5vZGVOYW1lLm1hdGNoKC9eKGNhbnZhc3x0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9ufGltZykkL2kpJiYodGhpcy5lbGVtZW50LndyYXAoZSgiPGRpdiBjbGFzcz0ndWktd3JhcHBlcicgc3R5bGU9J292ZXJmbG93OiBoaWRkZW47Jz48L2Rpdj4iKS5jc3Moe3Bvc2l0aW9uOnRoaXMuZWxlbWVudC5jc3MoInBvc2l0aW9uIiksd2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCksdG9wOnRoaXMuZWxlbWVudC5jc3MoInRvcCIpLGxlZnQ6dGhpcy5lbGVtZW50LmNzcygibGVmdCIpfSkpLHRoaXMuZWxlbWVudD10aGlzLmVsZW1lbnQucGFyZW50KCkuZGF0YSgidWktcmVzaXphYmxlIix0aGlzLmVsZW1lbnQucmVzaXphYmxlKCJpbnN0YW5jZSIpKSx0aGlzLmVsZW1lbnRJc1dyYXBwZXI9ITAsdGhpcy5lbGVtZW50LmNzcyh7bWFyZ2luTGVmdDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbkxlZnQiKSxtYXJnaW5Ub3A6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSxtYXJnaW5SaWdodDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpblJpZ2h0IiksbWFyZ2luQm90dG9tOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luQm90dG9tIil9KSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe21hcmdpbkxlZnQ6MCxtYXJnaW5Ub3A6MCxtYXJnaW5SaWdodDowLG1hcmdpbkJvdHRvbTowfSksdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlPXRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIiksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJyZXNpemUiLCJub25lIiksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5wdXNoKHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7cG9zaXRpb246InN0YXRpYyIsem9vbToxLGRpc3BsYXk6ImJsb2NrIn0pKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe21hcmdpbjp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbiIpfSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksdGhpcy5oYW5kbGVzPXIuaGFuZGxlc3x8KGUoIi51aS1yZXNpemFibGUtaGFuZGxlIix0aGlzLmVsZW1lbnQpLmxlbmd0aD97bjoiLnVpLXJlc2l6YWJsZS1uIixlOiIudWktcmVzaXphYmxlLWUiLHM6Ii51aS1yZXNpemFibGUtcyIsdzoiLnVpLXJlc2l6YWJsZS13IixzZToiLnVpLXJlc2l6YWJsZS1zZSIsc3c6Ii51aS1yZXNpemFibGUtc3ciLG5lOiIudWktcmVzaXphYmxlLW5lIixudzoiLnVpLXJlc2l6YWJsZS1udyJ9OiJlLHMsc2UiKSx0aGlzLl9oYW5kbGVzPWUoKSx0aGlzLmhhbmRsZXMuY29uc3RydWN0b3I9PT1TdHJpbmcpZm9yKCJhbGwiPT09dGhpcy5oYW5kbGVzJiYodGhpcy5oYW5kbGVzPSJuLGUscyx3LHNlLHN3LG5lLG53IiksdD10aGlzLmhhbmRsZXMuc3BsaXQoIiwiKSx0aGlzLmhhbmRsZXM9e30saT0wO3QubGVuZ3RoPmk7aSsrKXM9ZS50cmltKHRbaV0pLGE9InVpLXJlc2l6YWJsZS0iK3Msbj1lKCI8ZGl2IGNsYXNzPSd1aS1yZXNpemFibGUtaGFuZGxlICIrYSsiJz48L2Rpdj4iKSxuLmNzcyh7ekluZGV4OnIuekluZGV4fSksInNlIj09PXMmJm4uYWRkQ2xhc3MoInVpLWljb24gdWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2UiKSx0aGlzLmhhbmRsZXNbc109Ii51aS1yZXNpemFibGUtIitzLHRoaXMuZWxlbWVudC5hcHBlbmQobik7dGhpcy5fcmVuZGVyQXhpcz1mdW5jdGlvbih0KXt2YXIgaSxzLG4sYTt0PXR8fHRoaXMuZWxlbWVudDtmb3IoaSBpbiB0aGlzLmhhbmRsZXMpdGhpcy5oYW5kbGVzW2ldLmNvbnN0cnVjdG9yPT09U3RyaW5nP3RoaXMuaGFuZGxlc1tpXT10aGlzLmVsZW1lbnQuY2hpbGRyZW4odGhpcy5oYW5kbGVzW2ldKS5maXJzdCgpLnNob3coKToodGhpcy5oYW5kbGVzW2ldLmpxdWVyeXx8dGhpcy5oYW5kbGVzW2ldLm5vZGVUeXBlKSYmKHRoaXMuaGFuZGxlc1tpXT1lKHRoaXMuaGFuZGxlc1tpXSksdGhpcy5fb24odGhpcy5oYW5kbGVzW2ldLHttb3VzZWRvd246by5fbW91c2VEb3dufSkpLHRoaXMuZWxlbWVudElzV3JhcHBlciYmdGhpcy5vcmlnaW5hbEVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL14odGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbikkL2kpJiYocz1lKHRoaXMuaGFuZGxlc1tpXSx0aGlzLmVsZW1lbnQpLGE9L3N3fG5lfG53fHNlfG58cy8udGVzdChpKT9zLm91dGVySGVpZ2h0KCk6cy5vdXRlcldpZHRoKCksbj1bInBhZGRpbmciLC9uZXxud3xuLy50ZXN0KGkpPyJUb3AiOi9zZXxzd3xzLy50ZXN0KGkpPyJCb3R0b20iOi9eZSQvLnRlc3QoaSk/IlJpZ2h0IjoiTGVmdCJdLmpvaW4oIiIpLHQuY3NzKG4sYSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksdGhpcy5faGFuZGxlcz10aGlzLl9oYW5kbGVzLmFkZCh0aGlzLmhhbmRsZXNbaV0pfSx0aGlzLl9yZW5kZXJBeGlzKHRoaXMuZWxlbWVudCksdGhpcy5faGFuZGxlcz10aGlzLl9oYW5kbGVzLmFkZCh0aGlzLmVsZW1lbnQuZmluZCgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiKSksdGhpcy5faGFuZGxlcy5kaXNhYmxlU2VsZWN0aW9uKCksdGhpcy5faGFuZGxlcy5tb3VzZW92ZXIoZnVuY3Rpb24oKXtvLnJlc2l6aW5nfHwodGhpcy5jbGFzc05hbWUmJihuPXRoaXMuY2xhc3NOYW1lLm1hdGNoKC91aS1yZXNpemFibGUtKHNlfHN3fG5lfG53fG58ZXxzfHcpL2kpKSxvLmF4aXM9biYmblsxXT9uWzFdOiJzZSIpfSksci5hdXRvSGlkZSYmKHRoaXMuX2hhbmRsZXMuaGlkZSgpLGUodGhpcy5lbGVtZW50KS5hZGRDbGFzcygidWktcmVzaXphYmxlLWF1dG9oaWRlIikubW91c2VlbnRlcihmdW5jdGlvbigpe3IuZGlzYWJsZWR8fChlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKSxvLl9oYW5kbGVzLnNob3coKSl9KS5tb3VzZWxlYXZlKGZ1bmN0aW9uKCl7ci5kaXNhYmxlZHx8by5yZXNpemluZ3x8KGUodGhpcykuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLG8uX2hhbmRsZXMuaGlkZSgpKX0pKSx0aGlzLl9tb3VzZUluaXQoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9tb3VzZURlc3Ryb3koKTt2YXIgdCxpPWZ1bmN0aW9uKHQpe2UodCkucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZSB1aS1yZXNpemFibGUtZGlzYWJsZWQgdWktcmVzaXphYmxlLXJlc2l6aW5nIikucmVtb3ZlRGF0YSgicmVzaXphYmxlIikucmVtb3ZlRGF0YSgidWktcmVzaXphYmxlIikudW5iaW5kKCIucmVzaXphYmxlIikuZmluZCgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiKS5yZW1vdmUoKX07cmV0dXJuIHRoaXMuZWxlbWVudElzV3JhcHBlciYmKGkodGhpcy5lbGVtZW50KSx0PXRoaXMuZWxlbWVudCx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe3Bvc2l0aW9uOnQuY3NzKCJwb3NpdGlvbiIpLHdpZHRoOnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0Lm91dGVySGVpZ2h0KCksdG9wOnQuY3NzKCJ0b3AiKSxsZWZ0OnQuY3NzKCJsZWZ0Iil9KS5pbnNlcnRBZnRlcih0KSx0LnJlbW92ZSgpKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIsdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlKSxpKHRoaXMub3JpZ2luYWxFbGVtZW50KSx0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbj0hMTtmb3IoaSBpbiB0aGlzLmhhbmRsZXMpcz1lKHRoaXMuaGFuZGxlc1tpXSlbMF0sKHM9PT10LnRhcmdldHx8ZS5jb250YWlucyhzLHQudGFyZ2V0KSkmJihuPSEwKTtyZXR1cm4hdGhpcy5vcHRpb25zLmRpc2FibGVkJiZufSxfbW91c2VTdGFydDpmdW5jdGlvbih0KXt2YXIgaSxzLG4sYT10aGlzLm9wdGlvbnMsbz10aGlzLmVsZW1lbnQ7cmV0dXJuIHRoaXMucmVzaXppbmc9ITAsdGhpcy5fcmVuZGVyUHJveHkoKSxpPXRoaXMuX251bSh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSkscz10aGlzLl9udW0odGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSksYS5jb250YWlubWVudCYmKGkrPWUoYS5jb250YWlubWVudCkuc2Nyb2xsTGVmdCgpfHwwLHMrPWUoYS5jb250YWlubWVudCkuc2Nyb2xsVG9wKCl8fDApLHRoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgpLHRoaXMucG9zaXRpb249e2xlZnQ6aSx0b3A6c30sdGhpcy5zaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6dGhpcy5oZWxwZXIud2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIuaGVpZ2h0KCl9Ont3aWR0aDpvLndpZHRoKCksaGVpZ2h0Om8uaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxTaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6by5vdXRlcldpZHRoKCksaGVpZ2h0Om8ub3V0ZXJIZWlnaHQoKX06e3dpZHRoOm8ud2lkdGgoKSxoZWlnaHQ6by5oZWlnaHQoKX0sdGhpcy5zaXplRGlmZj17d2lkdGg6by5vdXRlcldpZHRoKCktby53aWR0aCgpLGhlaWdodDpvLm91dGVySGVpZ2h0KCktby5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtsZWZ0OmksdG9wOnN9LHRoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uPXtsZWZ0OnQucGFnZVgsdG9wOnQucGFnZVl9LHRoaXMuYXNwZWN0UmF0aW89Im51bWJlciI9PXR5cGVvZiBhLmFzcGVjdFJhdGlvP2EuYXNwZWN0UmF0aW86dGhpcy5vcmlnaW5hbFNpemUud2lkdGgvdGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0fHwxLG49ZSgiLnVpLXJlc2l6YWJsZS0iK3RoaXMuYXhpcykuY3NzKCJjdXJzb3IiKSxlKCJib2R5IikuY3NzKCJjdXJzb3IiLCJhdXRvIj09PW4/dGhpcy5heGlzKyItcmVzaXplIjpuKSxvLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtcmVzaXppbmciKSx0aGlzLl9wcm9wYWdhdGUoInN0YXJ0Iix0KSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbih0KXt2YXIgaSxzLG49dGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb24sYT10aGlzLmF4aXMsbz10LnBhZ2VYLW4ubGVmdHx8MCxyPXQucGFnZVktbi50b3B8fDAsaD10aGlzLl9jaGFuZ2VbYV07cmV0dXJuIHRoaXMuX3VwZGF0ZVByZXZQcm9wZXJ0aWVzKCksaD8oaT1oLmFwcGx5KHRoaXMsW3QsbyxyXSksdGhpcy5fdXBkYXRlVmlydHVhbEJvdW5kYXJpZXModC5zaGlmdEtleSksKHRoaXMuX2FzcGVjdFJhdGlvfHx0LnNoaWZ0S2V5KSYmKGk9dGhpcy5fdXBkYXRlUmF0aW8oaSx0KSksaT10aGlzLl9yZXNwZWN0U2l6ZShpLHQpLHRoaXMuX3VwZGF0ZUNhY2hlKGkpLHRoaXMuX3Byb3BhZ2F0ZSgicmVzaXplIix0KSxzPXRoaXMuX2FwcGx5Q2hhbmdlcygpLCF0aGlzLl9oZWxwZXImJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpLGUuaXNFbXB0eU9iamVjdChzKXx8KHRoaXMuX3VwZGF0ZVByZXZQcm9wZXJ0aWVzKCksdGhpcy5fdHJpZ2dlcigicmVzaXplIix0LHRoaXMudWkoKSksdGhpcy5fYXBwbHlDaGFuZ2VzKCkpLCExKTohMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXt0aGlzLnJlc2l6aW5nPSExO3ZhciBpLHMsbixhLG8scixoLGw9dGhpcy5vcHRpb25zLHU9dGhpcztyZXR1cm4gdGhpcy5faGVscGVyJiYoaT10aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLHM9aS5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3QoaVswXS5ub2RlTmFtZSksbj1zJiZ0aGlzLl9oYXNTY3JvbGwoaVswXSwibGVmdCIpPzA6dS5zaXplRGlmZi5oZWlnaHQsYT1zPzA6dS5zaXplRGlmZi53aWR0aCxvPXt3aWR0aDp1LmhlbHBlci53aWR0aCgpLWEsaGVpZ2h0OnUuaGVscGVyLmhlaWdodCgpLW59LHI9cGFyc2VJbnQodS5lbGVtZW50LmNzcygibGVmdCIpLDEwKSsodS5wb3NpdGlvbi5sZWZ0LXUub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KXx8bnVsbCxoPXBhcnNlSW50KHUuZWxlbWVudC5jc3MoInRvcCIpLDEwKSsodS5wb3NpdGlvbi50b3AtdS5vcmlnaW5hbFBvc2l0aW9uLnRvcCl8fG51bGwsbC5hbmltYXRlfHx0aGlzLmVsZW1lbnQuY3NzKGUuZXh0ZW5kKG8se3RvcDpoLGxlZnQ6cn0pKSx1LmhlbHBlci5oZWlnaHQodS5zaXplLmhlaWdodCksdS5oZWxwZXIud2lkdGgodS5zaXplLndpZHRoKSx0aGlzLl9oZWxwZXImJiFsLmFuaW1hdGUmJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLGUoImJvZHkiKS5jc3MoImN1cnNvciIsImF1dG8iKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZS1yZXNpemluZyIpLHRoaXMuX3Byb3BhZ2F0ZSgic3RvcCIsdCksdGhpcy5faGVscGVyJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSwhMX0sX3VwZGF0ZVByZXZQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7dGhpcy5wcmV2UG9zaXRpb249e3RvcDp0aGlzLnBvc2l0aW9uLnRvcCxsZWZ0OnRoaXMucG9zaXRpb24ubGVmdH0sdGhpcy5wcmV2U2l6ZT17d2lkdGg6dGhpcy5zaXplLndpZHRoLGhlaWdodDp0aGlzLnNpemUuaGVpZ2h0fX0sX2FwcGx5Q2hhbmdlczpmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiB0aGlzLnBvc2l0aW9uLnRvcCE9PXRoaXMucHJldlBvc2l0aW9uLnRvcCYmKGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCIpLHRoaXMucG9zaXRpb24ubGVmdCE9PXRoaXMucHJldlBvc2l0aW9uLmxlZnQmJihlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCIpLHRoaXMuc2l6ZS53aWR0aCE9PXRoaXMucHJldlNpemUud2lkdGgmJihlLndpZHRoPXRoaXMuc2l6ZS53aWR0aCsicHgiKSx0aGlzLnNpemUuaGVpZ2h0IT09dGhpcy5wcmV2U2l6ZS5oZWlnaHQmJihlLmhlaWdodD10aGlzLnNpemUuaGVpZ2h0KyJweCIpLHRoaXMuaGVscGVyLmNzcyhlKSxlfSxfdXBkYXRlVmlydHVhbEJvdW5kYXJpZXM6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzLG4sYSxvPXRoaXMub3B0aW9uczthPXttaW5XaWR0aDp0aGlzLl9pc051bWJlcihvLm1pbldpZHRoKT9vLm1pbldpZHRoOjAsbWF4V2lkdGg6dGhpcy5faXNOdW1iZXIoby5tYXhXaWR0aCk/by5tYXhXaWR0aDoxLzAsbWluSGVpZ2h0OnRoaXMuX2lzTnVtYmVyKG8ubWluSGVpZ2h0KT9vLm1pbkhlaWdodDowLG1heEhlaWdodDp0aGlzLl9pc051bWJlcihvLm1heEhlaWdodCk/by5tYXhIZWlnaHQ6MS8wfSwodGhpcy5fYXNwZWN0UmF0aW98fGUpJiYodD1hLm1pbkhlaWdodCp0aGlzLmFzcGVjdFJhdGlvLHM9YS5taW5XaWR0aC90aGlzLmFzcGVjdFJhdGlvLGk9YS5tYXhIZWlnaHQqdGhpcy5hc3BlY3RSYXRpbyxuPWEubWF4V2lkdGgvdGhpcy5hc3BlY3RSYXRpbyx0PmEubWluV2lkdGgmJihhLm1pbldpZHRoPXQpLHM+YS5taW5IZWlnaHQmJihhLm1pbkhlaWdodD1zKSxhLm1heFdpZHRoPmkmJihhLm1heFdpZHRoPWkpLGEubWF4SGVpZ2h0Pm4mJihhLm1heEhlaWdodD1uKSksdGhpcy5fdkJvdW5kYXJpZXM9YX0sX3VwZGF0ZUNhY2hlOmZ1bmN0aW9uKGUpe3RoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgpLHRoaXMuX2lzTnVtYmVyKGUubGVmdCkmJih0aGlzLnBvc2l0aW9uLmxlZnQ9ZS5sZWZ0KSx0aGlzLl9pc051bWJlcihlLnRvcCkmJih0aGlzLnBvc2l0aW9uLnRvcD1lLnRvcCksdGhpcy5faXNOdW1iZXIoZS5oZWlnaHQpJiYodGhpcy5zaXplLmhlaWdodD1lLmhlaWdodCksdGhpcy5faXNOdW1iZXIoZS53aWR0aCkmJih0aGlzLnNpemUud2lkdGg9ZS53aWR0aCl9LF91cGRhdGVSYXRpbzpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvc2l0aW9uLGk9dGhpcy5zaXplLHM9dGhpcy5heGlzO3JldHVybiB0aGlzLl9pc051bWJlcihlLmhlaWdodCk/ZS53aWR0aD1lLmhlaWdodCp0aGlzLmFzcGVjdFJhdGlvOnRoaXMuX2lzTnVtYmVyKGUud2lkdGgpJiYoZS5oZWlnaHQ9ZS53aWR0aC90aGlzLmFzcGVjdFJhdGlvKSwic3ciPT09cyYmKGUubGVmdD10LmxlZnQrKGkud2lkdGgtZS53aWR0aCksZS50b3A9bnVsbCksIm53Ij09PXMmJihlLnRvcD10LnRvcCsoaS5oZWlnaHQtZS5oZWlnaHQpLGUubGVmdD10LmxlZnQrKGkud2lkdGgtZS53aWR0aCkpLGV9LF9yZXNwZWN0U2l6ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl92Qm91bmRhcmllcyxpPXRoaXMuYXhpcyxzPXRoaXMuX2lzTnVtYmVyKGUud2lkdGgpJiZ0Lm1heFdpZHRoJiZ0Lm1heFdpZHRoPGUud2lkdGgsbj10aGlzLl9pc051bWJlcihlLmhlaWdodCkmJnQubWF4SGVpZ2h0JiZ0Lm1heEhlaWdodDxlLmhlaWdodCxhPXRoaXMuX2lzTnVtYmVyKGUud2lkdGgpJiZ0Lm1pbldpZHRoJiZ0Lm1pbldpZHRoPmUud2lkdGgsbz10aGlzLl9pc051bWJlcihlLmhlaWdodCkmJnQubWluSGVpZ2h0JiZ0Lm1pbkhlaWdodD5lLmhlaWdodCxyPXRoaXMub3JpZ2luYWxQb3NpdGlvbi5sZWZ0K3RoaXMub3JpZ2luYWxTaXplLndpZHRoLGg9dGhpcy5wb3NpdGlvbi50b3ArdGhpcy5zaXplLmhlaWdodCxsPS9zd3xud3x3Ly50ZXN0KGkpLHU9L253fG5lfG4vLnRlc3QoaSk7cmV0dXJuIGEmJihlLndpZHRoPXQubWluV2lkdGgpLG8mJihlLmhlaWdodD10Lm1pbkhlaWdodCkscyYmKGUud2lkdGg9dC5tYXhXaWR0aCksbiYmKGUuaGVpZ2h0PXQubWF4SGVpZ2h0KSxhJiZsJiYoZS5sZWZ0PXItdC5taW5XaWR0aCkscyYmbCYmKGUubGVmdD1yLXQubWF4V2lkdGgpLG8mJnUmJihlLnRvcD1oLXQubWluSGVpZ2h0KSxuJiZ1JiYoZS50b3A9aC10Lm1heEhlaWdodCksZS53aWR0aHx8ZS5oZWlnaHR8fGUubGVmdHx8IWUudG9wP2Uud2lkdGh8fGUuaGVpZ2h0fHxlLnRvcHx8IWUubGVmdHx8KGUubGVmdD1udWxsKTplLnRvcD1udWxsLGV9LF9nZXRQYWRkaW5nUGx1c0JvcmRlckRpbWVuc2lvbnM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsaT1bXSxzPVtlLmNzcygiYm9yZGVyVG9wV2lkdGgiKSxlLmNzcygiYm9yZGVyUmlnaHRXaWR0aCIpLGUuY3NzKCJib3JkZXJCb3R0b21XaWR0aCIpLGUuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKV0sbj1bZS5jc3MoInBhZGRpbmdUb3AiKSxlLmNzcygicGFkZGluZ1JpZ2h0IiksZS5jc3MoInBhZGRpbmdCb3R0b20iKSxlLmNzcygicGFkZGluZ0xlZnQiKV07ND50O3QrKylpW3RdPXBhcnNlSW50KHNbdF0sMTApfHwwLGlbdF0rPXBhcnNlSW50KG5bdF0sMTApfHwwO3JldHVybntoZWlnaHQ6aVswXStpWzJdLHdpZHRoOmlbMV0raVszXX19LF9wcm9wb3J0aW9uYWxseVJlc2l6ZTpmdW5jdGlvbigpe2lmKHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoKWZvcih2YXIgZSx0PTAsaT10aGlzLmhlbHBlcnx8dGhpcy5lbGVtZW50O3RoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoPnQ7dCsrKWU9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50c1t0XSx0aGlzLm91dGVyRGltZW5zaW9uc3x8KHRoaXMub3V0ZXJEaW1lbnNpb25zPXRoaXMuX2dldFBhZGRpbmdQbHVzQm9yZGVyRGltZW5zaW9ucyhlKSksZS5jc3Moe2hlaWdodDppLmhlaWdodCgpLXRoaXMub3V0ZXJEaW1lbnNpb25zLmhlaWdodHx8MCx3aWR0aDppLndpZHRoKCktdGhpcy5vdXRlckRpbWVuc2lvbnMud2lkdGh8fDB9KX0sX3JlbmRlclByb3h5OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LGk9dGhpcy5vcHRpb25zO3RoaXMuZWxlbWVudE9mZnNldD10Lm9mZnNldCgpLHRoaXMuX2hlbHBlcj8odGhpcy5oZWxwZXI9dGhpcy5oZWxwZXJ8fGUoIjxkaXYgc3R5bGU9J292ZXJmbG93OmhpZGRlbjsnPjwvZGl2PiIpLHRoaXMuaGVscGVyLmFkZENsYXNzKHRoaXMuX2hlbHBlcikuY3NzKHt3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLTEsaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLTEscG9zaXRpb246ImFic29sdXRlIixsZWZ0OnRoaXMuZWxlbWVudE9mZnNldC5sZWZ0KyJweCIsdG9wOnRoaXMuZWxlbWVudE9mZnNldC50b3ArInB4Iix6SW5kZXg6KytpLnpJbmRleH0pLHRoaXMuaGVscGVyLmFwcGVuZFRvKCJib2R5IikuZGlzYWJsZVNlbGVjdGlvbigpKTp0aGlzLmhlbHBlcj10aGlzLmVsZW1lbnR9LF9jaGFuZ2U6e2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm57d2lkdGg6dGhpcy5vcmlnaW5hbFNpemUud2lkdGgrdH19LHc6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLm9yaWdpbmFsU2l6ZSxzPXRoaXMub3JpZ2luYWxQb3NpdGlvbjtyZXR1cm57bGVmdDpzLmxlZnQrdCx3aWR0aDppLndpZHRoLXR9fSxuOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz10aGlzLm9yaWdpbmFsU2l6ZSxuPXRoaXMub3JpZ2luYWxQb3NpdGlvbjtyZXR1cm57dG9wOm4udG9wK2ksaGVpZ2h0OnMuaGVpZ2h0LWl9fSxzOmZ1bmN0aW9uKGUsdCxpKXtyZXR1cm57aGVpZ2h0OnRoaXMub3JpZ2luYWxTaXplLmhlaWdodCtpfX0sc2U6ZnVuY3Rpb24odCxpLHMpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLmUuYXBwbHkodGhpcyxbdCxpLHNdKSl9LHN3OmZ1bmN0aW9uKHQsaSxzKXtyZXR1cm4gZS5leHRlbmQodGhpcy5fY2hhbmdlLnMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS53LmFwcGx5KHRoaXMsW3QsaSxzXSkpfSxuZTpmdW5jdGlvbih0LGkscyl7cmV0dXJuIGUuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLFt0LGksc10pKX0sbnc6ZnVuY3Rpb24odCxpLHMpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uubi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbdCxpLHNdKSl9fSxfcHJvcGFnYXRlOmZ1bmN0aW9uKHQsaSl7ZS51aS5wbHVnaW4uY2FsbCh0aGlzLHQsW2ksdGhpcy51aSgpXSksInJlc2l6ZSIhPT10JiZ0aGlzLl90cmlnZ2VyKHQsaSx0aGlzLnVpKCkpfSxwbHVnaW5zOnt9LHVpOmZ1bmN0aW9uKCl7cmV0dXJue29yaWdpbmFsRWxlbWVudDp0aGlzLm9yaWdpbmFsRWxlbWVudCxlbGVtZW50OnRoaXMuZWxlbWVudCxoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixzaXplOnRoaXMuc2l6ZSxvcmlnaW5hbFNpemU6dGhpcy5vcmlnaW5hbFNpemUsb3JpZ2luYWxQb3NpdGlvbjp0aGlzLm9yaWdpbmFsUG9zaXRpb259fX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiYW5pbWF0ZSIse3N0b3A6ZnVuY3Rpb24odCl7dmFyIGk9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIikscz1pLm9wdGlvbnMsbj1pLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLGE9bi5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3QoblswXS5ub2RlTmFtZSksbz1hJiZpLl9oYXNTY3JvbGwoblswXSwibGVmdCIpPzA6aS5zaXplRGlmZi5oZWlnaHQscj1hPzA6aS5zaXplRGlmZi53aWR0aCxoPXt3aWR0aDppLnNpemUud2lkdGgtcixoZWlnaHQ6aS5zaXplLmhlaWdodC1vfSxsPXBhcnNlSW50KGkuZWxlbWVudC5jc3MoImxlZnQiKSwxMCkrKGkucG9zaXRpb24ubGVmdC1pLm9yaWdpbmFsUG9zaXRpb24ubGVmdCl8fG51bGwsdT1wYXJzZUludChpLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCkrKGkucG9zaXRpb24udG9wLWkub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsO2kuZWxlbWVudC5hbmltYXRlKGUuZXh0ZW5kKGgsdSYmbD97dG9wOnUsbGVmdDpsfTp7fSkse2R1cmF0aW9uOnMuYW5pbWF0ZUR1cmF0aW9uLGVhc2luZzpzLmFuaW1hdGVFYXNpbmcsc3RlcDpmdW5jdGlvbigpe3ZhciBzPXt3aWR0aDpwYXJzZUludChpLmVsZW1lbnQuY3NzKCJ3aWR0aCIpLDEwKSxoZWlnaHQ6cGFyc2VJbnQoaS5lbGVtZW50LmNzcygiaGVpZ2h0IiksMTApLHRvcDpwYXJzZUludChpLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCksbGVmdDpwYXJzZUludChpLmVsZW1lbnQuY3NzKCJsZWZ0IiksMTApfTtuJiZuLmxlbmd0aCYmZShuWzBdKS5jc3Moe3dpZHRoOnMud2lkdGgsaGVpZ2h0OnMuaGVpZ2h0fSksaS5fdXBkYXRlQ2FjaGUocyksaS5fcHJvcGFnYXRlKCJyZXNpemUiLHQpfX0pfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiY29udGFpbm1lbnQiLHtzdGFydDpmdW5jdGlvbigpe3ZhciB0LGkscyxuLGEsbyxyLGg9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIiksbD1oLm9wdGlvbnMsdT1oLmVsZW1lbnQsZD1sLmNvbnRhaW5tZW50LGM9ZCBpbnN0YW5jZW9mIGU/ZC5nZXQoMCk6L3BhcmVudC8udGVzdChkKT91LnBhcmVudCgpLmdldCgwKTpkO2MmJihoLmNvbnRhaW5lckVsZW1lbnQ9ZShjKSwvZG9jdW1lbnQvLnRlc3QoZCl8fGQ9PT1kb2N1bWVudD8oaC5jb250YWluZXJPZmZzZXQ9e2xlZnQ6MCx0b3A6MH0saC5jb250YWluZXJQb3NpdGlvbj17bGVmdDowLHRvcDowfSxoLnBhcmVudERhdGE9e2VsZW1lbnQ6ZShkb2N1bWVudCksbGVmdDowLHRvcDowLHdpZHRoOmUoZG9jdW1lbnQpLndpZHRoKCksaGVpZ2h0OmUoZG9jdW1lbnQpLmhlaWdodCgpfHxkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0fSk6KHQ9ZShjKSxpPVtdLGUoWyJUb3AiLCJSaWdodCIsIkxlZnQiLCJCb3R0b20iXSkuZWFjaChmdW5jdGlvbihlLHMpe2lbZV09aC5fbnVtKHQuY3NzKCJwYWRkaW5nIitzKSl9KSxoLmNvbnRhaW5lck9mZnNldD10Lm9mZnNldCgpLGguY29udGFpbmVyUG9zaXRpb249dC5wb3NpdGlvbigpLGguY29udGFpbmVyU2l6ZT17aGVpZ2h0OnQuaW5uZXJIZWlnaHQoKS1pWzNdLHdpZHRoOnQuaW5uZXJXaWR0aCgpLWlbMV19LHM9aC5jb250YWluZXJPZmZzZXQsbj1oLmNvbnRhaW5lclNpemUuaGVpZ2h0LGE9aC5jb250YWluZXJTaXplLndpZHRoLG89aC5faGFzU2Nyb2xsKGMsImxlZnQiKT9jLnNjcm9sbFdpZHRoOmEscj1oLl9oYXNTY3JvbGwoYyk/Yy5zY3JvbGxIZWlnaHQ6bixoLnBhcmVudERhdGE9e2VsZW1lbnQ6YyxsZWZ0OnMubGVmdCx0b3A6cy50b3Asd2lkdGg6byxoZWlnaHQ6cn0pKX0scmVzaXplOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG89ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIikscj1vLm9wdGlvbnMsaD1vLmNvbnRhaW5lck9mZnNldCxsPW8ucG9zaXRpb24sdT1vLl9hc3BlY3RSYXRpb3x8dC5zaGlmdEtleSxkPXt0b3A6MCxsZWZ0OjB9LGM9by5jb250YWluZXJFbGVtZW50LHA9ITA7Y1swXSE9PWRvY3VtZW50JiYvc3RhdGljLy50ZXN0KGMuY3NzKCJwb3NpdGlvbiIpKSYmKGQ9aCksbC5sZWZ0PChvLl9oZWxwZXI/aC5sZWZ0OjApJiYoby5zaXplLndpZHRoPW8uc2l6ZS53aWR0aCsoby5faGVscGVyP28ucG9zaXRpb24ubGVmdC1oLmxlZnQ6by5wb3NpdGlvbi5sZWZ0LWQubGVmdCksdSYmKG8uc2l6ZS5oZWlnaHQ9by5zaXplLndpZHRoL28uYXNwZWN0UmF0aW8scD0hMSksby5wb3NpdGlvbi5sZWZ0PXIuaGVscGVyP2gubGVmdDowKSxsLnRvcDwoby5faGVscGVyP2gudG9wOjApJiYoby5zaXplLmhlaWdodD1vLnNpemUuaGVpZ2h0KyhvLl9oZWxwZXI/by5wb3NpdGlvbi50b3AtaC50b3A6by5wb3NpdGlvbi50b3ApLHUmJihvLnNpemUud2lkdGg9by5zaXplLmhlaWdodCpvLmFzcGVjdFJhdGlvLHA9ITEpLG8ucG9zaXRpb24udG9wPW8uX2hlbHBlcj9oLnRvcDowKSxuPW8uY29udGFpbmVyRWxlbWVudC5nZXQoMCk9PT1vLmVsZW1lbnQucGFyZW50KCkuZ2V0KDApLGE9L3JlbGF0aXZlfGFic29sdXRlLy50ZXN0KG8uY29udGFpbmVyRWxlbWVudC5jc3MoInBvc2l0aW9uIikpLG4mJmE/KG8ub2Zmc2V0LmxlZnQ9by5wYXJlbnREYXRhLmxlZnQrby5wb3NpdGlvbi5sZWZ0LG8ub2Zmc2V0LnRvcD1vLnBhcmVudERhdGEudG9wK28ucG9zaXRpb24udG9wKTooby5vZmZzZXQubGVmdD1vLmVsZW1lbnQub2Zmc2V0KCkubGVmdCxvLm9mZnNldC50b3A9by5lbGVtZW50Lm9mZnNldCgpLnRvcCksaT1NYXRoLmFicyhvLnNpemVEaWZmLndpZHRoKyhvLl9oZWxwZXI/by5vZmZzZXQubGVmdC1kLmxlZnQ6by5vZmZzZXQubGVmdC1oLmxlZnQpKSxzPU1hdGguYWJzKG8uc2l6ZURpZmYuaGVpZ2h0KyhvLl9oZWxwZXI/by5vZmZzZXQudG9wLWQudG9wOm8ub2Zmc2V0LnRvcC1oLnRvcCkpLGkrby5zaXplLndpZHRoPj1vLnBhcmVudERhdGEud2lkdGgmJihvLnNpemUud2lkdGg9by5wYXJlbnREYXRhLndpZHRoLWksdSYmKG8uc2l6ZS5oZWlnaHQ9by5zaXplLndpZHRoL28uYXNwZWN0UmF0aW8scD0hMSkpLHMrby5zaXplLmhlaWdodD49by5wYXJlbnREYXRhLmhlaWdodCYmKG8uc2l6ZS5oZWlnaHQ9by5wYXJlbnREYXRhLmhlaWdodC1zLHUmJihvLnNpemUud2lkdGg9by5zaXplLmhlaWdodCpvLmFzcGVjdFJhdGlvLHA9ITEpKSxwfHwoby5wb3NpdGlvbi5sZWZ0PW8ucHJldlBvc2l0aW9uLmxlZnQsby5wb3NpdGlvbi50b3A9by5wcmV2UG9zaXRpb24udG9wLG8uc2l6ZS53aWR0aD1vLnByZXZTaXplLndpZHRoLG8uc2l6ZS5oZWlnaHQ9by5wcmV2U2l6ZS5oZWlnaHQpfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIiksaT10Lm9wdGlvbnMscz10LmNvbnRhaW5lck9mZnNldCxuPXQuY29udGFpbmVyUG9zaXRpb24sYT10LmNvbnRhaW5lckVsZW1lbnQsbz1lKHQuaGVscGVyKSxyPW8ub2Zmc2V0KCksaD1vLm91dGVyV2lkdGgoKS10LnNpemVEaWZmLndpZHRoLGw9by5vdXRlckhlaWdodCgpLXQuc2l6ZURpZmYuaGVpZ2h0O3QuX2hlbHBlciYmIWkuYW5pbWF0ZSYmL3JlbGF0aXZlLy50ZXN0KGEuY3NzKCJwb3NpdGlvbiIpKSYmZSh0aGlzKS5jc3Moe2xlZnQ6ci5sZWZ0LW4ubGVmdC1zLmxlZnQsd2lkdGg6aCxoZWlnaHQ6bH0pLHQuX2hlbHBlciYmIWkuYW5pbWF0ZSYmL3N0YXRpYy8udGVzdChhLmNzcygicG9zaXRpb24iKSkmJmUodGhpcykuY3NzKHtsZWZ0OnIubGVmdC1uLmxlZnQtcy5sZWZ0LHdpZHRoOmgsaGVpZ2h0Omx9KX19KSxlLnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImFsc29SZXNpemUiLHtzdGFydDpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLGk9dC5vcHRpb25zO2UoaS5hbHNvUmVzaXplKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0LmRhdGEoInVpLXJlc2l6YWJsZS1hbHNvcmVzaXplIix7d2lkdGg6cGFyc2VJbnQodC53aWR0aCgpLDEwKSxoZWlnaHQ6cGFyc2VJbnQodC5oZWlnaHQoKSwxMCksbGVmdDpwYXJzZUludCh0LmNzcygibGVmdCIpLDEwKSx0b3A6cGFyc2VJbnQodC5jc3MoInRvcCIpLDEwKX0pfSl9LHJlc2l6ZTpmdW5jdGlvbih0LGkpe3ZhciBzPWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLG49cy5vcHRpb25zLGE9cy5vcmlnaW5hbFNpemUsbz1zLm9yaWdpbmFsUG9zaXRpb24scj17aGVpZ2h0OnMuc2l6ZS5oZWlnaHQtYS5oZWlnaHR8fDAsd2lkdGg6cy5zaXplLndpZHRoLWEud2lkdGh8fDAsdG9wOnMucG9zaXRpb24udG9wLW8udG9wfHwwLGxlZnQ6cy5wb3NpdGlvbi5sZWZ0LW8ubGVmdHx8MH07ZShuLmFsc29SZXNpemUpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLHM9ZSh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUtYWxzb3Jlc2l6ZSIpLG49e30sYT10LnBhcmVudHMoaS5vcmlnaW5hbEVsZW1lbnRbMF0pLmxlbmd0aD9bIndpZHRoIiwiaGVpZ2h0Il06WyJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiXTtlLmVhY2goYSxmdW5jdGlvbihlLHQpe3ZhciBpPShzW3RdfHwwKSsoclt0XXx8MCk7aSYmaT49MCYmKG5bdF09aXx8bnVsbCl9KSx0LmNzcyhuKX0pfSxzdG9wOmZ1bmN0aW9uKCl7ZSh0aGlzKS5yZW1vdmVEYXRhKCJyZXNpemFibGUtYWxzb3Jlc2l6ZSIpfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiZ2hvc3QiLHtzdGFydDpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLGk9dC5vcHRpb25zLHM9dC5zaXplO3QuZ2hvc3Q9dC5vcmlnaW5hbEVsZW1lbnQuY2xvbmUoKSx0Lmdob3N0LmNzcyh7b3BhY2l0eTouMjUsZGlzcGxheToiYmxvY2siLHBvc2l0aW9uOiJyZWxhdGl2ZSIsaGVpZ2h0OnMuaGVpZ2h0LHdpZHRoOnMud2lkdGgsbWFyZ2luOjAsbGVmdDowLHRvcDowfSkuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1naG9zdCIpLmFkZENsYXNzKCJzdHJpbmciPT10eXBlb2YgaS5naG9zdD9pLmdob3N0OiIiKSx0Lmdob3N0LmFwcGVuZFRvKHQuaGVscGVyKX0scmVzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIik7dC5naG9zdCYmdC5naG9zdC5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSIsaGVpZ2h0OnQuc2l6ZS5oZWlnaHQsd2lkdGg6dC5zaXplLndpZHRofSl9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLnJlc2l6YWJsZSgiaW5zdGFuY2UiKTt0Lmdob3N0JiZ0LmhlbHBlciYmdC5oZWxwZXIuZ2V0KDApLnJlbW92ZUNoaWxkKHQuZ2hvc3QuZ2V0KDApKX19KSxlLnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImdyaWQiLHtyZXNpemU6ZnVuY3Rpb24oKXt2YXIgdCxpPWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLHM9aS5vcHRpb25zLG49aS5zaXplLGE9aS5vcmlnaW5hbFNpemUsbz1pLm9yaWdpbmFsUG9zaXRpb24scj1pLmF4aXMsaD0ibnVtYmVyIj09dHlwZW9mIHMuZ3JpZD9bcy5ncmlkLHMuZ3JpZF06cy5ncmlkLGw9aFswXXx8MSx1PWhbMV18fDEsZD1NYXRoLnJvdW5kKChuLndpZHRoLWEud2lkdGgpL2wpKmwsYz1NYXRoLnJvdW5kKChuLmhlaWdodC1hLmhlaWdodCkvdSkqdSxwPWEud2lkdGgrZCxmPWEuaGVpZ2h0K2MsbT1zLm1heFdpZHRoJiZwPnMubWF4V2lkdGgsZz1zLm1heEhlaWdodCYmZj5zLm1heEhlaWdodCx2PXMubWluV2lkdGgmJnMubWluV2lkdGg+cCx5PXMubWluSGVpZ2h0JiZzLm1pbkhlaWdodD5mO3MuZ3JpZD1oLHYmJihwKz1sKSx5JiYoZis9dSksbSYmKHAtPWwpLGcmJihmLT11KSwvXihzZXxzfGUpJC8udGVzdChyKT8oaS5zaXplLndpZHRoPXAsaS5zaXplLmhlaWdodD1mKTovXihuZSkkLy50ZXN0KHIpPyhpLnNpemUud2lkdGg9cCxpLnNpemUuaGVpZ2h0PWYsaS5wb3NpdGlvbi50b3A9by50b3AtYyk6L14oc3cpJC8udGVzdChyKT8oaS5zaXplLndpZHRoPXAsaS5zaXplLmhlaWdodD1mLGkucG9zaXRpb24ubGVmdD1vLmxlZnQtZCk6KCgwPj1mLXV8fDA+PXAtbCkmJih0PWkuX2dldFBhZGRpbmdQbHVzQm9yZGVyRGltZW5zaW9ucyh0aGlzKSksZi11PjA/KGkuc2l6ZS5oZWlnaHQ9ZixpLnBvc2l0aW9uLnRvcD1vLnRvcC1jKTooZj11LXQuaGVpZ2h0LGkuc2l6ZS5oZWlnaHQ9ZixpLnBvc2l0aW9uLnRvcD1vLnRvcCthLmhlaWdodC1mKSxwLWw+MD8oaS5zaXplLndpZHRoPXAsaS5wb3NpdGlvbi5sZWZ0PW8ubGVmdC1kKToocD1sLXQud2lkdGgsaS5zaXplLndpZHRoPXAsaS5wb3NpdGlvbi5sZWZ0PW8ubGVmdCthLndpZHRoLXApKX19KSxlLnVpLnJlc2l6YWJsZSxlLndpZGdldCgidWkuc2VsZWN0YWJsZSIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMS40IixvcHRpb25zOnthcHBlbmRUbzoiYm9keSIsYXV0b1JlZnJlc2g6ITAsZGlzdGFuY2U6MCxmaWx0ZXI6IioiLHRvbGVyYW5jZToidG91Y2giLHNlbGVjdGVkOm51bGwsc2VsZWN0aW5nOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGwsdW5zZWxlY3RlZDpudWxsLHVuc2VsZWN0aW5nOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxpPXRoaXM7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zZWxlY3RhYmxlIiksdGhpcy5kcmFnZ2VkPSExLHRoaXMucmVmcmVzaD1mdW5jdGlvbigpe3Q9ZShpLm9wdGlvbnMuZmlsdGVyLGkuZWxlbWVudFswXSksdC5hZGRDbGFzcygidWktc2VsZWN0ZWUiKSx0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC5vZmZzZXQoKTtlLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIix7ZWxlbWVudDp0aGlzLCRlbGVtZW50OnQsbGVmdDppLmxlZnQsdG9wOmkudG9wLHJpZ2h0OmkubGVmdCt0Lm91dGVyV2lkdGgoKSxib3R0b206aS50b3ArdC5vdXRlckhlaWdodCgpLHN0YXJ0c2VsZWN0ZWQ6ITEsc2VsZWN0ZWQ6dC5oYXNDbGFzcygidWktc2VsZWN0ZWQiKSxzZWxlY3Rpbmc6dC5oYXNDbGFzcygidWktc2VsZWN0aW5nIiksdW5zZWxlY3Rpbmc6dC5oYXNDbGFzcygidWktdW5zZWxlY3RpbmciKX0pfSl9LHRoaXMucmVmcmVzaCgpLHRoaXMuc2VsZWN0ZWVzPXQuYWRkQ2xhc3MoInVpLXNlbGVjdGVlIiksdGhpcy5fbW91c2VJbml0KCksdGhpcy5oZWxwZXI9ZSgiPGRpdiBjbGFzcz0ndWktc2VsZWN0YWJsZS1oZWxwZXInPjwvZGl2PiIpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWVzLnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZSIpLnJlbW92ZURhdGEoInNlbGVjdGFibGUtaXRlbSIpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0YWJsZSB1aS1zZWxlY3RhYmxlLWRpc2FibGVkIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMscz10aGlzLm9wdGlvbnM7dGhpcy5vcG9zPVt0LnBhZ2VYLHQucGFnZVldLHRoaXMub3B0aW9ucy5kaXNhYmxlZHx8KHRoaXMuc2VsZWN0ZWVzPWUocy5maWx0ZXIsdGhpcy5lbGVtZW50WzBdKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsdCksZShzLmFwcGVuZFRvKS5hcHBlbmQodGhpcy5oZWxwZXIpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDp0LnBhZ2VYLHRvcDp0LnBhZ2VZLHdpZHRoOjAsaGVpZ2h0OjB9KSxzLmF1dG9SZWZyZXNoJiZ0aGlzLnJlZnJlc2goKSx0aGlzLnNlbGVjdGVlcy5maWx0ZXIoIi51aS1zZWxlY3RlZCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgcz1lLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7cy5zdGFydHNlbGVjdGVkPSEwLHQubWV0YUtleXx8dC5jdHJsS2V5fHwocy4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSxzLnNlbGVjdGVkPSExLHMuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXVuc2VsZWN0aW5nIikscy51bnNlbGVjdGluZz0hMCxpLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsdCx7dW5zZWxlY3Rpbmc6cy5lbGVtZW50fSkpfSksZSh0LnRhcmdldCkucGFyZW50cygpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHMsbj1lLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7cmV0dXJuIG4/KHM9IXQubWV0YUtleSYmIXQuY3RybEtleXx8IW4uJGVsZW1lbnQuaGFzQ2xhc3MoInVpLXNlbGVjdGVkIiksbi4kZWxlbWVudC5yZW1vdmVDbGFzcyhzPyJ1aS11bnNlbGVjdGluZyI6InVpLXNlbGVjdGVkIikuYWRkQ2xhc3Mocz8idWktc2VsZWN0aW5nIjoidWktdW5zZWxlY3RpbmciKSxuLnVuc2VsZWN0aW5nPSFzLG4uc2VsZWN0aW5nPXMsbi5zZWxlY3RlZD1zLHM/aS5fdHJpZ2dlcigic2VsZWN0aW5nIix0LHtzZWxlY3Rpbmc6bi5lbGVtZW50fSk6aS5fdHJpZ2dlcigidW5zZWxlY3RpbmciLHQse3Vuc2VsZWN0aW5nOm4uZWxlbWVudH0pLCExKTp2b2lkIDB9KSl9LF9tb3VzZURyYWc6ZnVuY3Rpb24odCl7aWYodGhpcy5kcmFnZ2VkPSEwLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpe3ZhciBpLHM9dGhpcyxuPXRoaXMub3B0aW9ucyxhPXRoaXMub3Bvc1swXSxvPXRoaXMub3Bvc1sxXSxyPXQucGFnZVgsaD10LnBhZ2VZO3JldHVybiBhPnImJihpPXIscj1hLGE9aSksbz5oJiYoaT1oLGg9byxvPWkpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDphLHRvcDpvLHdpZHRoOnItYSxoZWlnaHQ6aC1vfSksdGhpcy5zZWxlY3RlZXMuZWFjaChmdW5jdGlvbigpe3ZhciBpPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKSxsPSExOwppJiZpLmVsZW1lbnQhPT1zLmVsZW1lbnRbMF0mJigidG91Y2giPT09bi50b2xlcmFuY2U/bD0hKGkubGVmdD5yfHxhPmkucmlnaHR8fGkudG9wPmh8fG8+aS5ib3R0b20pOiJmaXQiPT09bi50b2xlcmFuY2UmJihsPWkubGVmdD5hJiZyPmkucmlnaHQmJmkudG9wPm8mJmg+aS5ib3R0b20pLGw/KGkuc2VsZWN0ZWQmJihpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLGkuc2VsZWN0ZWQ9ITEpLGkudW5zZWxlY3RpbmcmJihpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS11bnNlbGVjdGluZyIpLGkudW5zZWxlY3Rpbmc9ITEpLGkuc2VsZWN0aW5nfHwoaS4kZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0aW5nIiksaS5zZWxlY3Rpbmc9ITAscy5fdHJpZ2dlcigic2VsZWN0aW5nIix0LHtzZWxlY3Rpbmc6aS5lbGVtZW50fSkpKTooaS5zZWxlY3RpbmcmJigodC5tZXRhS2V5fHx0LmN0cmxLZXkpJiZpLnN0YXJ0c2VsZWN0ZWQ/KGkuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGluZyIpLGkuc2VsZWN0aW5nPSExLGkuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXNlbGVjdGVkIiksaS5zZWxlY3RlZD0hMCk6KGkuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGluZyIpLGkuc2VsZWN0aW5nPSExLGkuc3RhcnRzZWxlY3RlZCYmKGkuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksaS51bnNlbGVjdGluZz0hMCkscy5fdHJpZ2dlcigidW5zZWxlY3RpbmciLHQse3Vuc2VsZWN0aW5nOmkuZWxlbWVudH0pKSksaS5zZWxlY3RlZCYmKHQubWV0YUtleXx8dC5jdHJsS2V5fHxpLnN0YXJ0c2VsZWN0ZWR8fChpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLGkuc2VsZWN0ZWQ9ITEsaS4kZWxlbWVudC5hZGRDbGFzcygidWktdW5zZWxlY3RpbmciKSxpLnVuc2VsZWN0aW5nPSEwLHMuX3RyaWdnZXIoInVuc2VsZWN0aW5nIix0LHt1bnNlbGVjdGluZzppLmVsZW1lbnR9KSkpKSl9KSwhMX19LF9tb3VzZVN0b3A6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcztyZXR1cm4gdGhpcy5kcmFnZ2VkPSExLGUoIi51aS11bnNlbGVjdGluZyIsdGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHM9ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIpO3MuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXVuc2VsZWN0aW5nIikscy51bnNlbGVjdGluZz0hMSxzLnN0YXJ0c2VsZWN0ZWQ9ITEsaS5fdHJpZ2dlcigidW5zZWxlY3RlZCIsdCx7dW5zZWxlY3RlZDpzLmVsZW1lbnR9KX0pLGUoIi51aS1zZWxlY3RpbmciLHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3ZhciBzPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RpbmciKS5hZGRDbGFzcygidWktc2VsZWN0ZWQiKSxzLnNlbGVjdGluZz0hMSxzLnNlbGVjdGVkPSEwLHMuc3RhcnRzZWxlY3RlZD0hMCxpLl90cmlnZ2VyKCJzZWxlY3RlZCIsdCx7c2VsZWN0ZWQ6cy5lbGVtZW50fSl9KSx0aGlzLl90cmlnZ2VyKCJzdG9wIix0KSx0aGlzLmhlbHBlci5yZW1vdmUoKSwhMX19KSxlLndpZGdldCgidWkuc29ydGFibGUiLGUudWkubW91c2Use3ZlcnNpb246IjEuMTEuNCIsd2lkZ2V0RXZlbnRQcmVmaXg6InNvcnQiLHJlYWR5OiExLG9wdGlvbnM6e2FwcGVuZFRvOiJwYXJlbnQiLGF4aXM6ITEsY29ubmVjdFdpdGg6ITEsY29udGFpbm1lbnQ6ITEsY3Vyc29yOiJhdXRvIixjdXJzb3JBdDohMSxkcm9wT25FbXB0eTohMCxmb3JjZVBsYWNlaG9sZGVyU2l6ZTohMSxmb3JjZUhlbHBlclNpemU6ITEsZ3JpZDohMSxoYW5kbGU6ITEsaGVscGVyOiJvcmlnaW5hbCIsaXRlbXM6Ij4gKiIsb3BhY2l0eTohMSxwbGFjZWhvbGRlcjohMSxyZXZlcnQ6ITEsc2Nyb2xsOiEwLHNjcm9sbFNlbnNpdGl2aXR5OjIwLHNjcm9sbFNwZWVkOjIwLHNjb3BlOiJkZWZhdWx0Iix0b2xlcmFuY2U6ImludGVyc2VjdCIsekluZGV4OjFlMyxhY3RpdmF0ZTpudWxsLGJlZm9yZVN0b3A6bnVsbCxjaGFuZ2U6bnVsbCxkZWFjdGl2YXRlOm51bGwsb3V0Om51bGwsb3ZlcjpudWxsLHJlY2VpdmU6bnVsbCxyZW1vdmU6bnVsbCxzb3J0Om51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGwsdXBkYXRlOm51bGx9LF9pc092ZXJBeGlzOmZ1bmN0aW9uKGUsdCxpKXtyZXR1cm4gZT49dCYmdCtpPmV9LF9pc0Zsb2F0aW5nOmZ1bmN0aW9uKGUpe3JldHVybi9sZWZ0fHJpZ2h0Ly50ZXN0KGUuY3NzKCJmbG9hdCIpKXx8L2lubGluZXx0YWJsZS1jZWxsLy50ZXN0KGUuY3NzKCJkaXNwbGF5IikpfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXJDYWNoZT17fSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNvcnRhYmxlIiksdGhpcy5yZWZyZXNoKCksdGhpcy5vZmZzZXQ9dGhpcy5lbGVtZW50Lm9mZnNldCgpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpLHRoaXMucmVhZHk9ITB9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpLCJoYW5kbGUiPT09ZSYmdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCl9LF9zZXRIYW5kbGVDbGFzc05hbWU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuZmluZCgiLnVpLXNvcnRhYmxlLWhhbmRsZSIpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oYW5kbGUiKSxlLmVhY2godGhpcy5pdGVtcyxmdW5jdGlvbigpeyh0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGFuZGxlP3RoaXMuaXRlbS5maW5kKHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oYW5kbGUpOnRoaXMuaXRlbSkuYWRkQ2xhc3MoInVpLXNvcnRhYmxlLWhhbmRsZSIpfSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZSB1aS1zb3J0YWJsZS1kaXNhYmxlZCIpLmZpbmQoIi51aS1zb3J0YWJsZS1oYW5kbGUiKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGFuZGxlIiksdGhpcy5fbW91c2VEZXN0cm95KCk7Zm9yKHZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy5pdGVtc1tlXS5pdGVtLnJlbW92ZURhdGEodGhpcy53aWRnZXROYW1lKyItaXRlbSIpO3JldHVybiB0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQsaSl7dmFyIHM9bnVsbCxuPSExLGE9dGhpcztyZXR1cm4gdGhpcy5yZXZlcnRpbmc/ITE6dGhpcy5vcHRpb25zLmRpc2FibGVkfHwic3RhdGljIj09PXRoaXMub3B0aW9ucy50eXBlPyExOih0aGlzLl9yZWZyZXNoSXRlbXModCksZSh0LnRhcmdldCkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRhKHRoaXMsYS53aWRnZXROYW1lKyItaXRlbSIpPT09YT8ocz1lKHRoaXMpLCExKTp2b2lkIDB9KSxlLmRhdGEodC50YXJnZXQsYS53aWRnZXROYW1lKyItaXRlbSIpPT09YSYmKHM9ZSh0LnRhcmdldCkpLHM/IXRoaXMub3B0aW9ucy5oYW5kbGV8fGl8fChlKHRoaXMub3B0aW9ucy5oYW5kbGUscykuZmluZCgiKiIpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcz09PXQudGFyZ2V0JiYobj0hMCl9KSxuKT8odGhpcy5jdXJyZW50SXRlbT1zLHRoaXMuX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zKCksITApOiExOiExKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGEsbz10aGlzLm9wdGlvbnM7aWYodGhpcy5jdXJyZW50Q29udGFpbmVyPXRoaXMsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpcy5oZWxwZXI9dGhpcy5fY3JlYXRlSGVscGVyKHQpLHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoKSx0aGlzLm9mZnNldD10aGlzLmN1cnJlbnRJdGVtLm9mZnNldCgpLHRoaXMub2Zmc2V0PXt0b3A6dGhpcy5vZmZzZXQudG9wLXRoaXMubWFyZ2lucy50b3AsbGVmdDp0aGlzLm9mZnNldC5sZWZ0LXRoaXMubWFyZ2lucy5sZWZ0fSxlLmV4dGVuZCh0aGlzLm9mZnNldCx7Y2xpY2s6e2xlZnQ6dC5wYWdlWC10aGlzLm9mZnNldC5sZWZ0LHRvcDp0LnBhZ2VZLXRoaXMub2Zmc2V0LnRvcH0scGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9KSx0aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiwiYWJzb2x1dGUiKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKSx0aGlzLm9yaWdpbmFsUG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbih0KSx0aGlzLm9yaWdpbmFsUGFnZVg9dC5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9dC5wYWdlWSxvLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKG8uY3Vyc29yQXQpLHRoaXMuZG9tUG9zaXRpb249e3ByZXY6dGhpcy5jdXJyZW50SXRlbS5wcmV2KClbMF0scGFyZW50OnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbMF19LHRoaXMuaGVscGVyWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5jdXJyZW50SXRlbS5oaWRlKCksdGhpcy5fY3JlYXRlUGxhY2Vob2xkZXIoKSxvLmNvbnRhaW5tZW50JiZ0aGlzLl9zZXRDb250YWlubWVudCgpLG8uY3Vyc29yJiYiYXV0byIhPT1vLmN1cnNvciYmKGE9dGhpcy5kb2N1bWVudC5maW5kKCJib2R5IiksdGhpcy5zdG9yZWRDdXJzb3I9YS5jc3MoImN1cnNvciIpLGEuY3NzKCJjdXJzb3IiLG8uY3Vyc29yKSx0aGlzLnN0b3JlZFN0eWxlc2hlZXQ9ZSgiPHN0eWxlPip7IGN1cnNvcjogIitvLmN1cnNvcisiICFpbXBvcnRhbnQ7IH08L3N0eWxlPiIpLmFwcGVuZFRvKGEpKSxvLm9wYWNpdHkmJih0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiKSYmKHRoaXMuX3N0b3JlZE9wYWNpdHk9dGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5IikpLHRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIsby5vcGFjaXR5KSksby56SW5kZXgmJih0aGlzLmhlbHBlci5jc3MoInpJbmRleCIpJiYodGhpcy5fc3RvcmVkWkluZGV4PXRoaXMuaGVscGVyLmNzcygiekluZGV4IikpLHRoaXMuaGVscGVyLmNzcygiekluZGV4IixvLnpJbmRleCkpLHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmIkhUTUwiIT09dGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSYmKHRoaXMub3ZlcmZsb3dPZmZzZXQ9dGhpcy5zY3JvbGxQYXJlbnQub2Zmc2V0KCkpLHRoaXMuX3RyaWdnZXIoInN0YXJ0Iix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLl9wcmVzZXJ2ZUhlbHBlclByb3BvcnRpb25zfHx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksIXMpZm9yKG49dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO24+PTA7bi0tKXRoaXMuY29udGFpbmVyc1tuXS5fdHJpZ2dlcigiYWN0aXZhdGUiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKTtyZXR1cm4gZS51aS5kZG1hbmFnZXImJihlLnVpLmRkbWFuYWdlci5jdXJyZW50PXRoaXMpLGUudWkuZGRtYW5hZ2VyJiYhby5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLHQpLHRoaXMuZHJhZ2dpbmc9ITAsdGhpcy5oZWxwZXIuYWRkQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpLHRoaXMuX21vdXNlRHJhZyh0KSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbih0KXt2YXIgaSxzLG4sYSxvPXRoaXMub3B0aW9ucyxyPSExO2Zvcih0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSx0aGlzLmxhc3RQb3NpdGlvbkFic3x8KHRoaXMubGFzdFBvc2l0aW9uQWJzPXRoaXMucG9zaXRpb25BYnMpLHRoaXMub3B0aW9ucy5zY3JvbGwmJih0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJiJIVE1MIiE9PXRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWU/KHRoaXMub3ZlcmZsb3dPZmZzZXQudG9wK3RoaXMuc2Nyb2xsUGFyZW50WzBdLm9mZnNldEhlaWdodC10LnBhZ2VZPG8uc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wK28uc2Nyb2xsU3BlZWQ6dC5wYWdlWS10aGlzLm92ZXJmbG93T2Zmc2V0LnRvcDxvLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wLW8uc2Nyb2xsU3BlZWQpLHRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdCt0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRXaWR0aC10LnBhZ2VYPG8uc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQrby5zY3JvbGxTcGVlZDp0LnBhZ2VYLXRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdDxvLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQtby5zY3JvbGxTcGVlZCkpOih0LnBhZ2VZLXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCk8by5zY3JvbGxTZW5zaXRpdml0eT9yPXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKHRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCktby5zY3JvbGxTcGVlZCk6dGhpcy53aW5kb3cuaGVpZ2h0KCktKHQucGFnZVktdGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKSk8by5zY3JvbGxTZW5zaXRpdml0eSYmKHI9dGhpcy5kb2N1bWVudC5zY3JvbGxUb3AodGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKStvLnNjcm9sbFNwZWVkKSksdC5wYWdlWC10aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKTxvLnNjcm9sbFNlbnNpdGl2aXR5P3I9dGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KHRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLW8uc2Nyb2xsU3BlZWQpOnRoaXMud2luZG93LndpZHRoKCktKHQucGFnZVgtdGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KCkpPG8uc2Nyb2xsU2Vuc2l0aXZpdHkmJihyPXRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCh0aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKStvLnNjcm9sbFNwZWVkKSkpLHIhPT0hMSYmZS51aS5kZG1hbmFnZXImJiFvLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsdCkpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIiksdGhpcy5vcHRpb25zLmF4aXMmJiJ5Ij09PXRoaXMub3B0aW9ucy5heGlzfHwodGhpcy5oZWxwZXJbMF0uc3R5bGUubGVmdD10aGlzLnBvc2l0aW9uLmxlZnQrInB4IiksdGhpcy5vcHRpb25zLmF4aXMmJiJ4Ij09PXRoaXMub3B0aW9ucy5heGlzfHwodGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCIpLGk9dGhpcy5pdGVtcy5sZW5ndGgtMTtpPj0wO2ktLSlpZihzPXRoaXMuaXRlbXNbaV0sbj1zLml0ZW1bMF0sYT10aGlzLl9pbnRlcnNlY3RzV2l0aFBvaW50ZXIocyksYSYmcy5pbnN0YW5jZT09PXRoaXMuY3VycmVudENvbnRhaW5lciYmbiE9PXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMucGxhY2Vob2xkZXJbMT09PWE/Im5leHQiOiJwcmV2Il0oKVswXSE9PW4mJiFlLmNvbnRhaW5zKHRoaXMucGxhY2Vob2xkZXJbMF0sbikmJigic2VtaS1keW5hbWljIj09PXRoaXMub3B0aW9ucy50eXBlPyFlLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSxuKTohMCkpe2lmKHRoaXMuZGlyZWN0aW9uPTE9PT1hPyJkb3duIjoidXAiLCJwb2ludGVyIiE9PXRoaXMub3B0aW9ucy50b2xlcmFuY2UmJiF0aGlzLl9pbnRlcnNlY3RzV2l0aFNpZGVzKHMpKWJyZWFrO3RoaXMuX3JlYXJyYW5nZSh0LHMpLHRoaXMuX3RyaWdnZXIoImNoYW5nZSIsdCx0aGlzLl91aUhhc2goKSk7YnJlYWt9cmV0dXJuIHRoaXMuX2NvbnRhY3RDb250YWluZXJzKHQpLGUudWkuZGRtYW5hZ2VyJiZlLnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsdCksdGhpcy5fdHJpZ2dlcigic29ydCIsdCx0aGlzLl91aUhhc2goKSksdGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFicywhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0LGkpe2lmKHQpe2lmKGUudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyx0KSx0aGlzLm9wdGlvbnMucmV2ZXJ0KXt2YXIgcz10aGlzLG49dGhpcy5wbGFjZWhvbGRlci5vZmZzZXQoKSxhPXRoaXMub3B0aW9ucy5heGlzLG89e307YSYmIngiIT09YXx8KG8ubGVmdD1uLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnQrKHRoaXMub2Zmc2V0UGFyZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCkpLGEmJiJ5IiE9PWF8fChvLnRvcD1uLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLXRoaXMubWFyZ2lucy50b3ArKHRoaXMub2Zmc2V0UGFyZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsVG9wKSksdGhpcy5yZXZlcnRpbmc9ITAsZSh0aGlzLmhlbHBlcikuYW5pbWF0ZShvLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnQsMTApfHw1MDAsZnVuY3Rpb24oKXtzLl9jbGVhcih0KX0pfWVsc2UgdGhpcy5fY2xlYXIodCxpKTtyZXR1cm4hMX19LGNhbmNlbDpmdW5jdGlvbigpe2lmKHRoaXMuZHJhZ2dpbmcpe3RoaXMuX21vdXNlVXAoe3RhcmdldDpudWxsfSksIm9yaWdpbmFsIj09PXRoaXMub3B0aW9ucy5oZWxwZXI/dGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIik6dGhpcy5jdXJyZW50SXRlbS5zaG93KCk7Zm9yKHZhciB0PXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTt0Pj0wO3QtLSl0aGlzLmNvbnRhaW5lcnNbdF0uX3RyaWdnZXIoImRlYWN0aXZhdGUiLG51bGwsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbdF0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1t0XS5fdHJpZ2dlcigib3V0IixudWxsLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3RdLmNvbnRhaW5lckNhY2hlLm92ZXI9MCl9cmV0dXJuIHRoaXMucGxhY2Vob2xkZXImJih0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUmJnRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKSwib3JpZ2luYWwiIT09dGhpcy5vcHRpb25zLmhlbHBlciYmdGhpcy5oZWxwZXImJnRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUmJnRoaXMuaGVscGVyLnJlbW92ZSgpLGUuZXh0ZW5kKHRoaXMse2hlbHBlcjpudWxsLGRyYWdnaW5nOiExLHJldmVydGluZzohMSxfbm9GaW5hbFNvcnQ6bnVsbH0pLHRoaXMuZG9tUG9zaXRpb24ucHJldj9lKHRoaXMuZG9tUG9zaXRpb24ucHJldikuYWZ0ZXIodGhpcy5jdXJyZW50SXRlbSk6ZSh0aGlzLmRvbVBvc2l0aW9uLnBhcmVudCkucHJlcGVuZCh0aGlzLmN1cnJlbnRJdGVtKSksdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX2dldEl0ZW1zQXNqUXVlcnkodCYmdC5jb25uZWN0ZWQpLHM9W107cmV0dXJuIHQ9dHx8e30sZShpKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9KGUodC5pdGVtfHx0aGlzKS5hdHRyKHQuYXR0cmlidXRlfHwiaWQiKXx8IiIpLm1hdGNoKHQuZXhwcmVzc2lvbnx8LyguKylbXC09X10oLispLyk7aSYmcy5wdXNoKCh0LmtleXx8aVsxXSsiW10iKSsiPSIrKHQua2V5JiZ0LmV4cHJlc3Npb24/aVsxXTppWzJdKSl9KSwhcy5sZW5ndGgmJnQua2V5JiZzLnB1c2godC5rZXkrIj0iKSxzLmpvaW4oIiYiKX0sdG9BcnJheTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KHQmJnQuY29ubmVjdGVkKSxzPVtdO3JldHVybiB0PXR8fHt9LGkuZWFjaChmdW5jdGlvbigpe3MucHVzaChlKHQuaXRlbXx8dGhpcykuYXR0cih0LmF0dHJpYnV0ZXx8ImlkIil8fCIiKX0pLHN9LF9pbnRlcnNlY3RzV2l0aDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvc2l0aW9uQWJzLmxlZnQsaT10K3RoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgscz10aGlzLnBvc2l0aW9uQWJzLnRvcCxuPXMrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsYT1lLmxlZnQsbz1hK2Uud2lkdGgscj1lLnRvcCxoPXIrZS5oZWlnaHQsbD10aGlzLm9mZnNldC5jbGljay50b3AsdT10aGlzLm9mZnNldC5jbGljay5sZWZ0LGQ9IngiPT09dGhpcy5vcHRpb25zLmF4aXN8fHMrbD5yJiZoPnMrbCxjPSJ5Ij09PXRoaXMub3B0aW9ucy5heGlzfHx0K3U+YSYmbz50K3UscD1kJiZjO3JldHVybiJwb2ludGVyIj09PXRoaXMub3B0aW9ucy50b2xlcmFuY2V8fHRoaXMub3B0aW9ucy5mb3JjZVBvaW50ZXJGb3JDb250YWluZXJzfHwicG9pbnRlciIhPT10aGlzLm9wdGlvbnMudG9sZXJhbmNlJiZ0aGlzLmhlbHBlclByb3BvcnRpb25zW3RoaXMuZmxvYXRpbmc/IndpZHRoIjoiaGVpZ2h0Il0+ZVt0aGlzLmZsb2F0aW5nPyJ3aWR0aCI6ImhlaWdodCJdP3A6dCt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzI+YSYmbz5pLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMiYmcyt0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yPnImJmg+bi10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yfSxfaW50ZXJzZWN0c1dpdGhQb2ludGVyOmZ1bmN0aW9uKGUpe3ZhciB0PSJ4Ij09PXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLl9pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCxlLnRvcCxlLmhlaWdodCksaT0ieSI9PT10aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5faXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCxlLmxlZnQsZS53aWR0aCkscz10JiZpLG49dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksYT10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO3JldHVybiBzP3RoaXMuZmxvYXRpbmc/YSYmInJpZ2h0Ij09PWF8fCJkb3duIj09PW4/MjoxOm4mJigiZG93biI9PT1uPzI6MSk6ITF9LF9pbnRlcnNlY3RzV2l0aFNpZGVzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2lzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy50b3ArdGhpcy5vZmZzZXQuY2xpY2sudG9wLGUudG9wK2UuaGVpZ2h0LzIsZS5oZWlnaHQpLGk9dGhpcy5faXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCxlLmxlZnQrZS53aWR0aC8yLGUud2lkdGgpLHM9dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksbj10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO3JldHVybiB0aGlzLmZsb2F0aW5nJiZuPyJyaWdodCI9PT1uJiZpfHwibGVmdCI9PT1uJiYhaTpzJiYoImRvd24iPT09cyYmdHx8InVwIj09PXMmJiF0KX0sX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMucG9zaXRpb25BYnMudG9wLXRoaXMubGFzdFBvc2l0aW9uQWJzLnRvcDtyZXR1cm4gMCE9PWUmJihlPjA/ImRvd24iOiJ1cCIpfSxfZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBvc2l0aW9uQWJzLmxlZnQtdGhpcy5sYXN0UG9zaXRpb25BYnMubGVmdDtyZXR1cm4gMCE9PWUmJihlPjA/InJpZ2h0IjoibGVmdCIpfSxyZWZyZXNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZWZyZXNoSXRlbXMoZSksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpc30sX2Nvbm5lY3RXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiBlLmNvbm5lY3RXaXRoLmNvbnN0cnVjdG9yPT09U3RyaW5nP1tlLmNvbm5lY3RXaXRoXTplLmNvbm5lY3RXaXRofSxfZ2V0SXRlbXNBc2pRdWVyeTpmdW5jdGlvbih0KXtmdW5jdGlvbiBpKCl7ci5wdXNoKHRoaXMpfXZhciBzLG4sYSxvLHI9W10saD1bXSxsPXRoaXMuX2Nvbm5lY3RXaXRoKCk7aWYobCYmdClmb3Iocz1sLmxlbmd0aC0xO3M+PTA7cy0tKWZvcihhPWUobFtzXSx0aGlzLmRvY3VtZW50WzBdKSxuPWEubGVuZ3RoLTE7bj49MDtuLS0pbz1lLmRhdGEoYVtuXSx0aGlzLndpZGdldEZ1bGxOYW1lKSxvJiZvIT09dGhpcyYmIW8ub3B0aW9ucy5kaXNhYmxlZCYmaC5wdXNoKFtlLmlzRnVuY3Rpb24oby5vcHRpb25zLml0ZW1zKT9vLm9wdGlvbnMuaXRlbXMuY2FsbChvLmVsZW1lbnQpOmUoby5vcHRpb25zLml0ZW1zLG8uZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSxvXSk7Zm9yKGgucHVzaChbZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LG51bGwse29wdGlvbnM6dGhpcy5vcHRpb25zLGl0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmUodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSx0aGlzXSkscz1oLmxlbmd0aC0xO3M+PTA7cy0tKWhbc11bMF0uZWFjaChpKTtyZXR1cm4gZShyKX0sX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50SXRlbS5maW5kKCI6ZGF0YSgiK3RoaXMud2lkZ2V0TmFtZSsiLWl0ZW0pIik7dGhpcy5pdGVtcz1lLmdyZXAodGhpcy5pdGVtcyxmdW5jdGlvbihlKXtmb3IodmFyIGk9MDt0Lmxlbmd0aD5pO2krKylpZih0W2ldPT09ZS5pdGVtWzBdKXJldHVybiExO3JldHVybiEwfSl9LF9yZWZyZXNoSXRlbXM6ZnVuY3Rpb24odCl7dGhpcy5pdGVtcz1bXSx0aGlzLmNvbnRhaW5lcnM9W3RoaXNdO3ZhciBpLHMsbixhLG8scixoLGwsdT10aGlzLml0ZW1zLGQ9W1tlLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLml0ZW1zKT90aGlzLm9wdGlvbnMuaXRlbXMuY2FsbCh0aGlzLmVsZW1lbnRbMF0sdCx7aXRlbTp0aGlzLmN1cnJlbnRJdGVtfSk6ZSh0aGlzLm9wdGlvbnMuaXRlbXMsdGhpcy5lbGVtZW50KSx0aGlzXV0sYz10aGlzLl9jb25uZWN0V2l0aCgpO2lmKGMmJnRoaXMucmVhZHkpZm9yKGk9Yy5sZW5ndGgtMTtpPj0wO2ktLSlmb3Iobj1lKGNbaV0sdGhpcy5kb2N1bWVudFswXSkscz1uLmxlbmd0aC0xO3M+PTA7cy0tKWE9ZS5kYXRhKG5bc10sdGhpcy53aWRnZXRGdWxsTmFtZSksYSYmYSE9PXRoaXMmJiFhLm9wdGlvbnMuZGlzYWJsZWQmJihkLnB1c2goW2UuaXNGdW5jdGlvbihhLm9wdGlvbnMuaXRlbXMpP2Eub3B0aW9ucy5pdGVtcy5jYWxsKGEuZWxlbWVudFswXSx0LHtpdGVtOnRoaXMuY3VycmVudEl0ZW19KTplKGEub3B0aW9ucy5pdGVtcyxhLmVsZW1lbnQpLGFdKSx0aGlzLmNvbnRhaW5lcnMucHVzaChhKSk7Zm9yKGk9ZC5sZW5ndGgtMTtpPj0wO2ktLSlmb3Iobz1kW2ldWzFdLHI9ZFtpXVswXSxzPTAsbD1yLmxlbmd0aDtsPnM7cysrKWg9ZShyW3NdKSxoLmRhdGEodGhpcy53aWRnZXROYW1lKyItaXRlbSIsbyksdS5wdXNoKHtpdGVtOmgsaW5zdGFuY2U6byx3aWR0aDowLGhlaWdodDowLGxlZnQ6MCx0b3A6MH0pfSxyZWZyZXNoUG9zaXRpb25zOmZ1bmN0aW9uKHQpe3RoaXMuZmxvYXRpbmc9dGhpcy5pdGVtcy5sZW5ndGg/IngiPT09dGhpcy5vcHRpb25zLmF4aXN8fHRoaXMuX2lzRmxvYXRpbmcodGhpcy5pdGVtc1swXS5pdGVtKTohMSx0aGlzLm9mZnNldFBhcmVudCYmdGhpcy5oZWxwZXImJih0aGlzLm9mZnNldC5wYXJlbnQ9dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkpO3ZhciBpLHMsbixhO2ZvcihpPXRoaXMuaXRlbXMubGVuZ3RoLTE7aT49MDtpLS0pcz10aGlzLml0ZW1zW2ldLHMuaW5zdGFuY2UhPT10aGlzLmN1cnJlbnRDb250YWluZXImJnRoaXMuY3VycmVudENvbnRhaW5lciYmcy5pdGVtWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXXx8KG49dGhpcy5vcHRpb25zLnRvbGVyYW5jZUVsZW1lbnQ/ZSh0aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudCxzLml0ZW0pOnMuaXRlbSx0fHwocy53aWR0aD1uLm91dGVyV2lkdGgoKSxzLmhlaWdodD1uLm91dGVySGVpZ2h0KCkpLGE9bi5vZmZzZXQoKSxzLmxlZnQ9YS5sZWZ0LHMudG9wPWEudG9wKTtpZih0aGlzLm9wdGlvbnMuY3VzdG9tJiZ0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzKXRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMuY2FsbCh0aGlzKTtlbHNlIGZvcihpPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtpPj0wO2ktLSlhPXRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm9mZnNldCgpLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5sZWZ0PWEubGVmdCx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUudG9wPWEudG9wLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS53aWR0aD10aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudC5vdXRlcldpZHRoKCksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLmhlaWdodD10aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudC5vdXRlckhlaWdodCgpO3JldHVybiB0aGlzfSxfY3JlYXRlUGxhY2Vob2xkZXI6ZnVuY3Rpb24odCl7dD10fHx0aGlzO3ZhciBpLHM9dC5vcHRpb25zO3MucGxhY2Vob2xkZXImJnMucGxhY2Vob2xkZXIuY29uc3RydWN0b3IhPT1TdHJpbmd8fChpPXMucGxhY2Vob2xkZXIscy5wbGFjZWhvbGRlcj17ZWxlbWVudDpmdW5jdGlvbigpe3ZhciBzPXQuY3VycmVudEl0ZW1bMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPWUoIjwiK3MrIj4iLHQuZG9jdW1lbnRbMF0pLmFkZENsYXNzKGl8fHQuY3VycmVudEl0ZW1bMF0uY2xhc3NOYW1lKyIgdWktc29ydGFibGUtcGxhY2Vob2xkZXIiKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIik7cmV0dXJuInRib2R5Ij09PXM/dC5fY3JlYXRlVHJQbGFjZWhvbGRlcih0LmN1cnJlbnRJdGVtLmZpbmQoInRyIikuZXEoMCksZSgiPHRyPiIsdC5kb2N1bWVudFswXSkuYXBwZW5kVG8obikpOiJ0ciI9PT1zP3QuX2NyZWF0ZVRyUGxhY2Vob2xkZXIodC5jdXJyZW50SXRlbSxuKToiaW1nIj09PXMmJm4uYXR0cigic3JjIix0LmN1cnJlbnRJdGVtLmF0dHIoInNyYyIpKSxpfHxuLmNzcygidmlzaWJpbGl0eSIsImhpZGRlbiIpLG59LHVwZGF0ZTpmdW5jdGlvbihlLG4peyghaXx8cy5mb3JjZVBsYWNlaG9sZGVyU2l6ZSkmJihuLmhlaWdodCgpfHxuLmhlaWdodCh0LmN1cnJlbnRJdGVtLmlubmVySGVpZ2h0KCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdUb3AiKXx8MCwxMCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdCb3R0b20iKXx8MCwxMCkpLG4ud2lkdGgoKXx8bi53aWR0aCh0LmN1cnJlbnRJdGVtLmlubmVyV2lkdGgoKS1wYXJzZUludCh0LmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ0xlZnQiKXx8MCwxMCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdSaWdodCIpfHwwLDEwKSkpfX0pLHQucGxhY2Vob2xkZXI9ZShzLnBsYWNlaG9sZGVyLmVsZW1lbnQuY2FsbCh0LmVsZW1lbnQsdC5jdXJyZW50SXRlbSkpLHQuY3VycmVudEl0ZW0uYWZ0ZXIodC5wbGFjZWhvbGRlcikscy5wbGFjZWhvbGRlci51cGRhdGUodCx0LnBsYWNlaG9sZGVyKX0sX2NyZWF0ZVRyUGxhY2Vob2xkZXI6ZnVuY3Rpb24odCxpKXt2YXIgcz10aGlzO3QuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7ZSgiPHRkPiYjMTYwOzwvdGQ+IixzLmRvY3VtZW50WzBdKS5hdHRyKCJjb2xzcGFuIixlKHRoaXMpLmF0dHIoImNvbHNwYW4iKXx8MSkuYXBwZW5kVG8oaSl9KX0sX2NvbnRhY3RDb250YWluZXJzOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG8scixoLGwsdSxkLGM9bnVsbCxwPW51bGw7Zm9yKGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKWlmKCFlLmNvbnRhaW5zKHRoaXMuY3VycmVudEl0ZW1bMF0sdGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0pKWlmKHRoaXMuX2ludGVyc2VjdHNXaXRoKHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZSkpe2lmKGMmJmUuY29udGFpbnModGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0sYy5lbGVtZW50WzBdKSljb250aW51ZTtjPXRoaXMuY29udGFpbmVyc1tpXSxwPWl9ZWxzZSB0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1tpXS5fdHJpZ2dlcigib3V0Iix0LHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLm92ZXI9MCk7aWYoYylpZigxPT09dGhpcy5jb250YWluZXJzLmxlbmd0aCl0aGlzLmNvbnRhaW5lcnNbcF0uY29udGFpbmVyQ2FjaGUub3Zlcnx8KHRoaXMuY29udGFpbmVyc1twXS5fdHJpZ2dlcigib3ZlciIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1twXS5jb250YWluZXJDYWNoZS5vdmVyPTEpO2Vsc2V7Zm9yKG49MWU0LGE9bnVsbCx1PWMuZmxvYXRpbmd8fHRoaXMuX2lzRmxvYXRpbmcodGhpcy5jdXJyZW50SXRlbSksbz11PyJsZWZ0IjoidG9wIixyPXU/IndpZHRoIjoiaGVpZ2h0IixkPXU/ImNsaWVudFgiOiJjbGllbnRZIixzPXRoaXMuaXRlbXMubGVuZ3RoLTE7cz49MDtzLS0pZS5jb250YWlucyh0aGlzLmNvbnRhaW5lcnNbcF0uZWxlbWVudFswXSx0aGlzLml0ZW1zW3NdLml0ZW1bMF0pJiZ0aGlzLml0ZW1zW3NdLml0ZW1bMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdJiYoaD10aGlzLml0ZW1zW3NdLml0ZW0ub2Zmc2V0KClbb10sbD0hMSx0W2RdLWg+dGhpcy5pdGVtc1tzXVtyXS8yJiYobD0hMCksbj5NYXRoLmFicyh0W2RdLWgpJiYobj1NYXRoLmFicyh0W2RdLWgpLGE9dGhpcy5pdGVtc1tzXSx0aGlzLmRpcmVjdGlvbj1sPyJ1cCI6ImRvd24iKSk7aWYoIWEmJiF0aGlzLm9wdGlvbnMuZHJvcE9uRW1wdHkpcmV0dXJuO2lmKHRoaXMuY3VycmVudENvbnRhaW5lcj09PXRoaXMuY29udGFpbmVyc1twXSlyZXR1cm4gdGhpcy5jdXJyZW50Q29udGFpbmVyLmNvbnRhaW5lckNhY2hlLm92ZXJ8fCh0aGlzLmNvbnRhaW5lcnNbcF0uX3RyaWdnZXIoIm92ZXIiLHQsdGhpcy5fdWlIYXNoKCkpLHRoaXMuY3VycmVudENvbnRhaW5lci5jb250YWluZXJDYWNoZS5vdmVyPTEpLHZvaWQgMDthP3RoaXMuX3JlYXJyYW5nZSh0LGEsbnVsbCwhMCk6dGhpcy5fcmVhcnJhbmdlKHQsbnVsbCx0aGlzLmNvbnRhaW5lcnNbcF0uZWxlbWVudCwhMCksdGhpcy5fdHJpZ2dlcigiY2hhbmdlIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLmNvbnRhaW5lcnNbcF0uX3RyaWdnZXIoImNoYW5nZSIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLmNvbnRhaW5lcnNbcF0sdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyLnVwZGF0ZSh0aGlzLmN1cnJlbnRDb250YWluZXIsdGhpcy5wbGFjZWhvbGRlciksdGhpcy5jb250YWluZXJzW3BdLl90cmlnZ2VyKCJvdmVyIix0LHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3BdLmNvbnRhaW5lckNhY2hlLm92ZXI9MX19LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLHM9ZS5pc0Z1bmN0aW9uKGkuaGVscGVyKT9lKGkuaGVscGVyLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbdCx0aGlzLmN1cnJlbnRJdGVtXSkpOiJjbG9uZSI9PT1pLmhlbHBlcj90aGlzLmN1cnJlbnRJdGVtLmNsb25lKCk6dGhpcy5jdXJyZW50SXRlbTtyZXR1cm4gcy5wYXJlbnRzKCJib2R5IikubGVuZ3RofHxlKCJwYXJlbnQiIT09aS5hcHBlbmRUbz9pLmFwcGVuZFRvOnRoaXMuY3VycmVudEl0ZW1bMF0ucGFyZW50Tm9kZSlbMF0uYXBwZW5kQ2hpbGQoc1swXSksc1swXT09PXRoaXMuY3VycmVudEl0ZW1bMF0mJih0aGlzLl9zdG9yZWRDU1M9e3dpZHRoOnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUud2lkdGgsaGVpZ2h0OnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUuaGVpZ2h0LHBvc2l0aW9uOnRoaXMuY3VycmVudEl0ZW0uY3NzKCJwb3NpdGlvbiIpLHRvcDp0aGlzLmN1cnJlbnRJdGVtLmNzcygidG9wIiksbGVmdDp0aGlzLmN1cnJlbnRJdGVtLmNzcygibGVmdCIpfSksKCFzWzBdLnN0eWxlLndpZHRofHxpLmZvcmNlSGVscGVyU2l6ZSkmJnMud2lkdGgodGhpcy5jdXJyZW50SXRlbS53aWR0aCgpKSwoIXNbMF0uc3R5bGUuaGVpZ2h0fHxpLmZvcmNlSGVscGVyU2l6ZSkmJnMuaGVpZ2h0KHRoaXMuY3VycmVudEl0ZW0uaGVpZ2h0KCkpLHN9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC5zcGxpdCgiICIpKSxlLmlzQXJyYXkodCkmJih0PXtsZWZ0Oit0WzBdLHRvcDordFsxXXx8MH0pLCJsZWZ0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXQubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksInJpZ2h0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdC5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksInRvcCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXQudG9wK3RoaXMubWFyZ2lucy50b3ApLCJib3R0b20iaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10LmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3RoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpO3ZhciB0PXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpO3JldHVybiJhYnNvbHV0ZSI9PT10aGlzLmNzc1Bvc2l0aW9uJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJmUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYodC5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksdC50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSwodGhpcy5vZmZzZXRQYXJlbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmJvZHl8fHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUmJiJodG1sIj09PXRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmZS51aS5pZSkmJih0PXt0b3A6MCxsZWZ0OjB9KSx7dG9wOnQudG9wKyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSxsZWZ0OnQubGVmdCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYoInJlbGF0aXZlIj09PXRoaXMuY3NzUG9zaXRpb24pe3ZhciBlPXRoaXMuY3VycmVudEl0ZW0ucG9zaXRpb24oKTtyZXR1cm57dG9wOmUudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDplLmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfX1yZXR1cm57dG9wOjAsbGVmdDowfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmN1cnJlbnRJdGVtLmNzcygibWFyZ2luTGVmdCIpLDEwKXx8MCx0b3A6cGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIHQsaSxzLG49dGhpcy5vcHRpb25zOyJwYXJlbnQiPT09bi5jb250YWlubWVudCYmKG4uY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSksKCJkb2N1bWVudCI9PT1uLmNvbnRhaW5tZW50fHwid2luZG93Ij09PW4uY29udGFpbm1lbnQpJiYodGhpcy5jb250YWlubWVudD1bMC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LDAtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsImRvY3VtZW50Ij09PW4uY29udGFpbm1lbnQ/dGhpcy5kb2N1bWVudC53aWR0aCgpOnRoaXMud2luZG93LndpZHRoKCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCwoImRvY3VtZW50Ij09PW4uY29udGFpbm1lbnQ/dGhpcy5kb2N1bWVudC53aWR0aCgpOnRoaXMud2luZG93LmhlaWdodCgpfHx0aGlzLmRvY3VtZW50WzBdLmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKSwvXihkb2N1bWVudHx3aW5kb3d8cGFyZW50KSQvLnRlc3Qobi5jb250YWlubWVudCl8fCh0PWUobi5jb250YWlubWVudClbMF0saT1lKG4uY29udGFpbm1lbnQpLm9mZnNldCgpLHM9ImhpZGRlbiIhPT1lKHQpLmNzcygib3ZlcmZsb3ciKSx0aGlzLmNvbnRhaW5tZW50PVtpLmxlZnQrKHBhcnNlSW50KGUodCkuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKHQpLmNzcygicGFkZGluZ0xlZnQiKSwxMCl8fDApLXRoaXMubWFyZ2lucy5sZWZ0LGkudG9wKyhwYXJzZUludChlKHQpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKHQpLmNzcygicGFkZGluZ1RvcCIpLDEwKXx8MCktdGhpcy5tYXJnaW5zLnRvcCxpLmxlZnQrKHM/TWF0aC5tYXgodC5zY3JvbGxXaWR0aCx0Lm9mZnNldFdpZHRoKTp0Lm9mZnNldFdpZHRoKS0ocGFyc2VJbnQoZSh0KS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KGUodCkuY3NzKCJwYWRkaW5nUmlnaHQiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsaS50b3ArKHM/TWF0aC5tYXgodC5zY3JvbGxIZWlnaHQsdC5vZmZzZXRIZWlnaHQpOnQub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoZSh0KS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoZSh0KS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKHQsaSl7aXx8KGk9dGhpcy5wb3NpdGlvbik7dmFyIHM9ImFic29sdXRlIj09PXQ/MTotMSxuPSJhYnNvbHV0ZSIhPT10aGlzLmNzc1Bvc2l0aW9ufHx0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJmUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LGE9LyhodG1sfGJvZHkpL2kudGVzdChuWzBdLnRhZ05hbWUpO3JldHVybnt0b3A6aS50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKnMrdGhpcy5vZmZzZXQucGFyZW50LnRvcCpzLSgiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6YT8wOm4uc2Nyb2xsVG9wKCkpKnMsbGVmdDppLmxlZnQrdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCpzK3RoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KnMtKCJmaXhlZCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6YT8wOm4uc2Nyb2xsTGVmdCgpKSpzfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGkscyxuPXRoaXMub3B0aW9ucyxhPXQucGFnZVgsbz10LnBhZ2VZLHI9ImFic29sdXRlIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmZS5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSk/dGhpcy5zY3JvbGxQYXJlbnQ6dGhpcy5vZmZzZXRQYXJlbnQsaD0vKGh0bWx8Ym9keSkvaS50ZXN0KHJbMF0udGFnTmFtZSk7cmV0dXJuInJlbGF0aXZlIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLm9mZnNldFBhcmVudFswXXx8KHRoaXMub2Zmc2V0LnJlbGF0aXZlPXRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCkpLHRoaXMub3JpZ2luYWxQb3NpdGlvbiYmKHRoaXMuY29udGFpbm1lbnQmJih0LnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXSYmKGE9dGhpcy5jb250YWlubWVudFswXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSx0LnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx0aGlzLmNvbnRhaW5tZW50WzFdJiYobz10aGlzLmNvbnRhaW5tZW50WzFdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCksdC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PnRoaXMuY29udGFpbm1lbnRbMl0mJihhPXRoaXMuY29udGFpbm1lbnRbMl0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A+dGhpcy5jb250YWlubWVudFszXSYmKG89dGhpcy5jb250YWlubWVudFszXSt0aGlzLm9mZnNldC5jbGljay50b3ApKSxuLmdyaWQmJihpPXRoaXMub3JpZ2luYWxQYWdlWStNYXRoLnJvdW5kKChvLXRoaXMub3JpZ2luYWxQYWdlWSkvbi5ncmlkWzFdKSpuLmdyaWRbMV0sbz10aGlzLmNvbnRhaW5tZW50P2ktdGhpcy5vZmZzZXQuY2xpY2sudG9wPj10aGlzLmNvbnRhaW5tZW50WzFdJiZpLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDw9dGhpcy5jb250YWlubWVudFszXT9pOmktdGhpcy5vZmZzZXQuY2xpY2sudG9wPj10aGlzLmNvbnRhaW5tZW50WzFdP2ktbi5ncmlkWzFdOmkrbi5ncmlkWzFdOmkscz10aGlzLm9yaWdpbmFsUGFnZVgrTWF0aC5yb3VuZCgoYS10aGlzLm9yaWdpbmFsUGFnZVgpL24uZ3JpZFswXSkqbi5ncmlkWzBdLGE9dGhpcy5jb250YWlubWVudD9zLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PXRoaXMuY29udGFpbm1lbnRbMF0mJnMtdGhpcy5vZmZzZXQuY2xpY2subGVmdDw9dGhpcy5jb250YWlubWVudFsyXT9zOnMtdGhpcy5vZmZzZXQuY2xpY2subGVmdD49dGhpcy5jb250YWlubWVudFswXT9zLW4uZ3JpZFswXTpzK24uZ3JpZFswXTpzKSkse3RvcDpvLXRoaXMub2Zmc2V0LmNsaWNrLnRvcC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCsoImZpeGVkIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmg/MDpyLnNjcm9sbFRvcCgpKSxsZWZ0OmEtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KygiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpOmg/MDpyLnNjcm9sbExlZnQoKSl9fSxfcmVhcnJhbmdlOmZ1bmN0aW9uKGUsdCxpLHMpe2k/aVswXS5hcHBlbmRDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKTp0Lml0ZW1bMF0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5wbGFjZWhvbGRlclswXSwiZG93biI9PT10aGlzLmRpcmVjdGlvbj90Lml0ZW1bMF06dC5pdGVtWzBdLm5leHRTaWJsaW5nKSx0aGlzLmNvdW50ZXI9dGhpcy5jb3VudGVyPysrdGhpcy5jb3VudGVyOjE7dmFyIG49dGhpcy5jb3VudGVyO3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7bj09PXRoaXMuY291bnRlciYmdGhpcy5yZWZyZXNoUG9zaXRpb25zKCFzKX0pfSxfY2xlYXI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKGUsdCxpKXtyZXR1cm4gZnVuY3Rpb24ocyl7aS5fdHJpZ2dlcihlLHMsdC5fdWlIYXNoKHQpKX19dGhpcy5yZXZlcnRpbmc9ITE7dmFyIHMsbj1bXTtpZighdGhpcy5fbm9GaW5hbFNvcnQmJnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KCkubGVuZ3RoJiZ0aGlzLnBsYWNlaG9sZGVyLmJlZm9yZSh0aGlzLmN1cnJlbnRJdGVtKSx0aGlzLl9ub0ZpbmFsU29ydD1udWxsLHRoaXMuaGVscGVyWzBdPT09dGhpcy5jdXJyZW50SXRlbVswXSl7Zm9yKHMgaW4gdGhpcy5fc3RvcmVkQ1NTKSgiYXV0byI9PT10aGlzLl9zdG9yZWRDU1Nbc118fCJzdGF0aWMiPT09dGhpcy5fc3RvcmVkQ1NTW3NdKSYmKHRoaXMuX3N0b3JlZENTU1tzXT0iIik7dGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIil9ZWxzZSB0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtmb3IodGhpcy5mcm9tT3V0c2lkZSYmIXQmJm4ucHVzaChmdW5jdGlvbihlKXt0aGlzLl90cmlnZ2VyKCJyZWNlaXZlIixlLHRoaXMuX3VpSGFzaCh0aGlzLmZyb21PdXRzaWRlKSl9KSwhdGhpcy5mcm9tT3V0c2lkZSYmdGhpcy5kb21Qb3NpdGlvbi5wcmV2PT09dGhpcy5jdXJyZW50SXRlbS5wcmV2KCkubm90KCIudWktc29ydGFibGUtaGVscGVyIilbMF0mJnRoaXMuZG9tUG9zaXRpb24ucGFyZW50PT09dGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXXx8dHx8bi5wdXNoKGZ1bmN0aW9uKGUpe3RoaXMuX3RyaWdnZXIoInVwZGF0ZSIsZSx0aGlzLl91aUhhc2goKSl9KSx0aGlzIT09dGhpcy5jdXJyZW50Q29udGFpbmVyJiYodHx8KG4ucHVzaChmdW5jdGlvbihlKXt0aGlzLl90cmlnZ2VyKCJyZW1vdmUiLGUsdGhpcy5fdWlIYXNoKCkpfSksbi5wdXNoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtlLl90cmlnZ2VyKCJyZWNlaXZlIix0LHRoaXMuX3VpSGFzaCh0aGlzKSl9fS5jYWxsKHRoaXMsdGhpcy5jdXJyZW50Q29udGFpbmVyKSksbi5wdXNoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtlLl90cmlnZ2VyKCJ1cGRhdGUiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmN1cnJlbnRDb250YWluZXIpKSkpLHM9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3M+PTA7cy0tKXR8fG4ucHVzaChpKCJkZWFjdGl2YXRlIix0aGlzLHRoaXMuY29udGFpbmVyc1tzXSkpLHRoaXMuY29udGFpbmVyc1tzXS5jb250YWluZXJDYWNoZS5vdmVyJiYobi5wdXNoKGkoIm91dCIsdGhpcyx0aGlzLmNvbnRhaW5lcnNbc10pKSx0aGlzLmNvbnRhaW5lcnNbc10uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTtpZih0aGlzLnN0b3JlZEN1cnNvciYmKHRoaXMuZG9jdW1lbnQuZmluZCgiYm9keSIpLmNzcygiY3Vyc29yIix0aGlzLnN0b3JlZEN1cnNvciksdGhpcy5zdG9yZWRTdHlsZXNoZWV0LnJlbW92ZSgpKSx0aGlzLl9zdG9yZWRPcGFjaXR5JiZ0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiLHRoaXMuX3N0b3JlZE9wYWNpdHkpLHRoaXMuX3N0b3JlZFpJbmRleCYmdGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiLCJhdXRvIj09PXRoaXMuX3N0b3JlZFpJbmRleD8iIjp0aGlzLl9zdG9yZWRaSW5kZXgpLHRoaXMuZHJhZ2dpbmc9ITEsdHx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlU3RvcCIsZSx0aGlzLl91aUhhc2goKSksdGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbHx8KHRoaXMuaGVscGVyWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5oZWxwZXIucmVtb3ZlKCksdGhpcy5oZWxwZXI9bnVsbCksIXQpe2ZvcihzPTA7bi5sZW5ndGg+cztzKyspbltzXS5jYWxsKHRoaXMsZSk7dGhpcy5fdHJpZ2dlcigic3RvcCIsZSx0aGlzLl91aUhhc2goKSl9cmV0dXJuIHRoaXMuZnJvbU91dHNpZGU9ITEsIXRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbH0sX3RyaWdnZXI6ZnVuY3Rpb24oKXtlLldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpPT09ITEmJnRoaXMuY2FuY2VsKCl9LF91aUhhc2g6ZnVuY3Rpb24odCl7dmFyIGk9dHx8dGhpcztyZXR1cm57aGVscGVyOmkuaGVscGVyLHBsYWNlaG9sZGVyOmkucGxhY2Vob2xkZXJ8fGUoW10pLHBvc2l0aW9uOmkucG9zaXRpb24sb3JpZ2luYWxQb3NpdGlvbjppLm9yaWdpbmFsUG9zaXRpb24sb2Zmc2V0OmkucG9zaXRpb25BYnMsaXRlbTppLmN1cnJlbnRJdGVtLHNlbmRlcjp0P3QuZWxlbWVudDpudWxsfX19KSxlLndpZGdldCgidWkuYWNjb3JkaW9uIix7dmVyc2lvbjoiMS4xMS40IixvcHRpb25zOnthY3RpdmU6MCxhbmltYXRlOnt9LGNvbGxhcHNpYmxlOiExLGV2ZW50OiJjbGljayIsaGVhZGVyOiI+IGxpID4gOmZpcnN0LWNoaWxkLD4gOm5vdChsaSk6ZXZlbiIsaGVpZ2h0U3R5bGU6ImF1dG8iLGljb25zOnthY3RpdmVIZWFkZXI6InVpLWljb24tdHJpYW5nbGUtMS1zIixoZWFkZXI6InVpLWljb24tdHJpYW5nbGUtMS1lIn0sYWN0aXZhdGU6bnVsbCxiZWZvcmVBY3RpdmF0ZTpudWxsfSxoaWRlUHJvcHM6e2JvcmRlclRvcFdpZHRoOiJoaWRlIixib3JkZXJCb3R0b21XaWR0aDoiaGlkZSIscGFkZGluZ1RvcDoiaGlkZSIscGFkZGluZ0JvdHRvbToiaGlkZSIsaGVpZ2h0OiJoaWRlIn0sc2hvd1Byb3BzOntib3JkZXJUb3BXaWR0aDoic2hvdyIsYm9yZGVyQm90dG9tV2lkdGg6InNob3ciLHBhZGRpbmdUb3A6InNob3ciLHBhZGRpbmdCb3R0b206InNob3ciLGhlaWdodDoic2hvdyJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnM7dGhpcy5wcmV2U2hvdz10aGlzLnByZXZIaWRlPWUoKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWFjY29yZGlvbiB1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0IikuYXR0cigicm9sZSIsInRhYmxpc3QiKSx0LmNvbGxhcHNpYmxlfHx0LmFjdGl2ZSE9PSExJiZudWxsIT10LmFjdGl2ZXx8KHQuYWN0aXZlPTApLHRoaXMuX3Byb2Nlc3NQYW5lbHMoKSwwPnQuYWN0aXZlJiYodC5hY3RpdmUrPXRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMuX3JlZnJlc2goKX0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybntoZWFkZXI6dGhpcy5hY3RpdmUscGFuZWw6dGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuYWN0aXZlLm5leHQoKTplKCl9fSxfY3JlYXRlSWNvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuaWNvbnM7dCYmKGUoIjxzcGFuPiIpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyLWljb24gdWktaWNvbiAiK3QuaGVhZGVyKS5wcmVwZW5kVG8odGhpcy5oZWFkZXJzKSx0aGlzLmFjdGl2ZS5jaGlsZHJlbigiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiIpLnJlbW92ZUNsYXNzKHQuaGVhZGVyKS5hZGRDbGFzcyh0LmFjdGl2ZUhlYWRlciksdGhpcy5oZWFkZXJzLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taWNvbnMiKSl9LF9kZXN0cm95SWNvbnM6ZnVuY3Rpb24oKXt0aGlzLmhlYWRlcnMucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1pY29ucyIpLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24gdWktd2lkZ2V0IHVpLWhlbHBlci1yZXNldCIpLnJlbW92ZUF0dHIoInJvbGUiKSx0aGlzLmhlYWRlcnMucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXIgdWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCB1aS1jb3JuZXItdG9wIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtZXhwYW5kZWQiKS5yZW1vdmVBdHRyKCJhcmlhLXNlbGVjdGVkIikucmVtb3ZlQXR0cigiYXJpYS1jb250cm9scyIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLl9kZXN0cm95SWNvbnMoKSxlPXRoaXMuaGVhZGVycy5uZXh0KCkucmVtb3ZlQ2xhc3MoInVpLWhlbHBlci1yZXNldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIHVpLWFjY29yZGlvbi1jb250ZW50IHVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCIpLmNzcygiZGlzcGxheSIsIiIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLnJlbW92ZUF0dHIoImFyaWEtbGFiZWxsZWRieSIpLnJlbW92ZVVuaXF1ZUlkKCksImNvbnRlbnQiIT09dGhpcy5vcHRpb25zLmhlaWdodFN0eWxlJiZlLmNzcygiaGVpZ2h0IiwiIil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4iYWN0aXZlIj09PWU/KHRoaXMuX2FjdGl2YXRlKHQpLHZvaWQgMCk6KCJldmVudCI9PT1lJiYodGhpcy5vcHRpb25zLmV2ZW50JiZ0aGlzLl9vZmYodGhpcy5oZWFkZXJzLHRoaXMub3B0aW9ucy5ldmVudCksdGhpcy5fc2V0dXBFdmVudHModCkpLHRoaXMuX3N1cGVyKGUsdCksImNvbGxhcHNpYmxlIiE9PWV8fHR8fHRoaXMub3B0aW9ucy5hY3RpdmUhPT0hMXx8dGhpcy5fYWN0aXZhdGUoMCksImljb25zIj09PWUmJih0aGlzLl9kZXN0cm95SWNvbnMoKSx0JiZ0aGlzLl9jcmVhdGVJY29ucygpKSwiZGlzYWJsZWQiPT09ZSYmKHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCkuYXR0cigiYXJpYS1kaXNhYmxlZCIsdCksdGhpcy5oZWFkZXJzLmFkZCh0aGlzLmhlYWRlcnMubmV4dCgpKS50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCkpLHZvaWQgMCl9LF9rZXlkb3duOmZ1bmN0aW9uKHQpe2lmKCF0LmFsdEtleSYmIXQuY3RybEtleSl7dmFyIGk9ZS51aS5rZXlDb2RlLHM9dGhpcy5oZWFkZXJzLmxlbmd0aCxuPXRoaXMuaGVhZGVycy5pbmRleCh0LnRhcmdldCksYT0hMTtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGkuUklHSFQ6Y2FzZSBpLkRPV046YT10aGlzLmhlYWRlcnNbKG4rMSklc107YnJlYWs7Y2FzZSBpLkxFRlQ6Y2FzZSBpLlVQOmE9dGhpcy5oZWFkZXJzWyhuLTErcyklc107YnJlYWs7Y2FzZSBpLlNQQUNFOmNhc2UgaS5FTlRFUjp0aGlzLl9ldmVudEhhbmRsZXIodCk7YnJlYWs7Y2FzZSBpLkhPTUU6YT10aGlzLmhlYWRlcnNbMF07YnJlYWs7Y2FzZSBpLkVORDphPXRoaXMuaGVhZGVyc1tzLTFdfWEmJihlKHQudGFyZ2V0KS5hdHRyKCJ0YWJJbmRleCIsLTEpLGUoYSkuYXR0cigidGFiSW5kZXgiLDApLGEuZm9jdXMoKSx0LnByZXZlbnREZWZhdWx0KCkpfX0sX3BhbmVsS2V5RG93bjpmdW5jdGlvbih0KXt0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuVVAmJnQuY3RybEtleSYmZSh0LmN1cnJlbnRUYXJnZXQpLnByZXYoKS5mb2N1cygpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3RoaXMuX3Byb2Nlc3NQYW5lbHMoKSx0LmFjdGl2ZT09PSExJiZ0LmNvbGxhcHNpYmxlPT09ITB8fCF0aGlzLmhlYWRlcnMubGVuZ3RoPyh0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpOnQuYWN0aXZlPT09ITE/dGhpcy5fYWN0aXZhdGUoMCk6dGhpcy5hY3RpdmUubGVuZ3RoJiYhZS5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5hY3RpdmVbMF0pP3RoaXMuaGVhZGVycy5sZW5ndGg9PT10aGlzLmhlYWRlcnMuZmluZCgiLnVpLXN0YXRlLWRpc2FibGVkIikubGVuZ3RoPyh0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpOnRoaXMuX2FjdGl2YXRlKE1hdGgubWF4KDAsdC5hY3RpdmUtMSkpOnQuYWN0aXZlPXRoaXMuaGVhZGVycy5pbmRleCh0aGlzLmFjdGl2ZSksdGhpcy5fZGVzdHJveUljb25zKCksdGhpcy5fcmVmcmVzaCgpfSxfcHJvY2Vzc1BhbmVsczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaGVhZGVycyx0PXRoaXMucGFuZWxzO3RoaXMuaGVhZGVycz10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaGVhZGVyKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKSx0aGlzLnBhbmVscz10aGlzLmhlYWRlcnMubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudCB1aS1oZWxwZXItcmVzZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpLmZpbHRlcigiOm5vdCgudWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlKSIpLmhpZGUoKSx0JiYodGhpcy5fb2ZmKGUubm90KHRoaXMuaGVhZGVycykpLHRoaXMuX29mZih0Lm5vdCh0aGlzLnBhbmVscykpKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdCxpPXRoaXMub3B0aW9ucyxzPWkuaGVpZ2h0U3R5bGUsbj10aGlzLmVsZW1lbnQucGFyZW50KCk7dGhpcy5hY3RpdmU9dGhpcy5fZmluZEFjdGl2ZShpLmFjdGl2ZSkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSB1aS1jb3JuZXItdG9wIikucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwiKSx0aGlzLmFjdGl2ZS5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSIpLnNob3coKSx0aGlzLmhlYWRlcnMuYXR0cigicm9sZSIsInRhYiIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC51bmlxdWVJZCgpLmF0dHIoImlkIikscz10Lm5leHQoKSxuPXMudW5pcXVlSWQoKS5hdHRyKCJpZCIpO3QuYXR0cigiYXJpYS1jb250cm9scyIsbikscy5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLGkpfSkubmV4dCgpLmF0dHIoInJvbGUiLCJ0YWJwYW5lbCIpLHRoaXMuaGVhZGVycy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLCJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSkubmV4dCgpLmF0dHIoeyJhcmlhLWhpZGRlbiI6InRydWUifSkuaGlkZSgpLHRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLmFjdGl2ZS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLCJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pLm5leHQoKS5hdHRyKHsiYXJpYS1oaWRkZW4iOiJmYWxzZSJ9KTp0aGlzLmhlYWRlcnMuZXEoMCkuYXR0cigidGFiSW5kZXgiLDApLHRoaXMuX2NyZWF0ZUljb25zKCksdGhpcy5fc2V0dXBFdmVudHMoaS5ldmVudCksImZpbGwiPT09cz8odD1uLmhlaWdodCgpLHRoaXMuZWxlbWVudC5zaWJsaW5ncygiOnZpc2libGUiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9ZSh0aGlzKSxzPWkuY3NzKCJwb3NpdGlvbiIpOyJhYnNvbHV0ZSIhPT1zJiYiZml4ZWQiIT09cyYmKHQtPWkub3V0ZXJIZWlnaHQoITApKX0pLHRoaXMuaGVhZGVycy5lYWNoKGZ1bmN0aW9uKCl7dC09ZSh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmhlaWdodChNYXRoLm1heCgwLHQtZSh0aGlzKS5pbm5lckhlaWdodCgpK2UodGhpcykuaGVpZ2h0KCkpKX0pLmNzcygib3ZlcmZsb3ciLCJhdXRvIikpOiJhdXRvIj09PXMmJih0PTAsdGhpcy5oZWFkZXJzLm5leHQoKS5lYWNoKGZ1bmN0aW9uKCl7dD1NYXRoLm1heCh0LGUodGhpcykuY3NzKCJoZWlnaHQiLCIiKS5oZWlnaHQoKSl9KS5oZWlnaHQodCkpfSxfYWN0aXZhdGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fZmluZEFjdGl2ZSh0KVswXTtpIT09dGhpcy5hY3RpdmVbMF0mJihpPWl8fHRoaXMuYWN0aXZlWzBdLHRoaXMuX2V2ZW50SGFuZGxlcih7dGFyZ2V0OmksY3VycmVudFRhcmdldDppLHByZXZlbnREZWZhdWx0OmUubm9vcH0pKX0sX2ZpbmRBY3RpdmU6ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P3RoaXMuaGVhZGVycy5lcSh0KTplKCl9LF9zZXR1cEV2ZW50czpmdW5jdGlvbih0KXt2YXIgaT17a2V5ZG93bjoiX2tleWRvd24ifTt0JiZlLmVhY2godC5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7aVt0XT0iX2V2ZW50SGFuZGxlciJ9KSx0aGlzLl9vZmYodGhpcy5oZWFkZXJzLmFkZCh0aGlzLmhlYWRlcnMubmV4dCgpKSksdGhpcy5fb24odGhpcy5oZWFkZXJzLGkpLHRoaXMuX29uKHRoaXMuaGVhZGVycy5uZXh0KCkse2tleWRvd246Il9wYW5lbEtleURvd24ifSksdGhpcy5faG92ZXJhYmxlKHRoaXMuaGVhZGVycyksdGhpcy5fZm9jdXNhYmxlKHRoaXMuaGVhZGVycyl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLHM9dGhpcy5hY3RpdmUsbj1lKHQuY3VycmVudFRhcmdldCksYT1uWzBdPT09c1swXSxvPWEmJmkuY29sbGFwc2libGUscj1vP2UoKTpuLm5leHQoKSxoPXMubmV4dCgpLGw9e29sZEhlYWRlcjpzLG9sZFBhbmVsOmgsbmV3SGVhZGVyOm8/ZSgpOm4sbmV3UGFuZWw6cn07CnQucHJldmVudERlZmF1bHQoKSxhJiYhaS5jb2xsYXBzaWJsZXx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlQWN0aXZhdGUiLHQsbCk9PT0hMXx8KGkuYWN0aXZlPW8/ITE6dGhpcy5oZWFkZXJzLmluZGV4KG4pLHRoaXMuYWN0aXZlPWE/ZSgpOm4sdGhpcy5fdG9nZ2xlKGwpLHMucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLGkuaWNvbnMmJnMuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmVDbGFzcyhpLmljb25zLmFjdGl2ZUhlYWRlcikuYWRkQ2xhc3MoaS5pY29ucy5oZWFkZXIpLGF8fChuLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSB1aS1jb3JuZXItdG9wIiksaS5pY29ucyYmbi5jaGlsZHJlbigiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiIpLnJlbW92ZUNsYXNzKGkuaWNvbnMuaGVhZGVyKS5hZGRDbGFzcyhpLmljb25zLmFjdGl2ZUhlYWRlciksbi5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSIpKSl9LF90b2dnbGU6ZnVuY3Rpb24odCl7dmFyIGk9dC5uZXdQYW5lbCxzPXRoaXMucHJldlNob3cubGVuZ3RoP3RoaXMucHJldlNob3c6dC5vbGRQYW5lbDt0aGlzLnByZXZTaG93LmFkZCh0aGlzLnByZXZIaWRlKS5zdG9wKCEwLCEwKSx0aGlzLnByZXZTaG93PWksdGhpcy5wcmV2SGlkZT1zLHRoaXMub3B0aW9ucy5hbmltYXRlP3RoaXMuX2FuaW1hdGUoaSxzLHQpOihzLmhpZGUoKSxpLnNob3coKSx0aGlzLl90b2dnbGVDb21wbGV0ZSh0KSkscy5hdHRyKHsiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pLHMucHJldigpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLCJhcmlhLWV4cGFuZGVkIjoiZmFsc2UifSksaS5sZW5ndGgmJnMubGVuZ3RoP3MucHJldigpLmF0dHIoe3RhYkluZGV4Oi0xLCJhcmlhLWV4cGFuZGVkIjoiZmFsc2UifSk6aS5sZW5ndGgmJnRoaXMuaGVhZGVycy5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gMD09PXBhcnNlSW50KGUodGhpcykuYXR0cigidGFiSW5kZXgiKSwxMCl9KS5hdHRyKCJ0YWJJbmRleCIsLTEpLGkuYXR0cigiYXJpYS1oaWRkZW4iLCJmYWxzZSIpLnByZXYoKS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLCJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pfSxfYW5pbWF0ZTpmdW5jdGlvbihlLHQsaSl7dmFyIHMsbixhLG89dGhpcyxyPTAsaD1lLmNzcygiYm94LXNpemluZyIpLGw9ZS5sZW5ndGgmJighdC5sZW5ndGh8fGUuaW5kZXgoKTx0LmluZGV4KCkpLHU9dGhpcy5vcHRpb25zLmFuaW1hdGV8fHt9LGQ9bCYmdS5kb3dufHx1LGM9ZnVuY3Rpb24oKXtvLl90b2dnbGVDb21wbGV0ZShpKX07cmV0dXJuIm51bWJlciI9PXR5cGVvZiBkJiYoYT1kKSwic3RyaW5nIj09dHlwZW9mIGQmJihuPWQpLG49bnx8ZC5lYXNpbmd8fHUuZWFzaW5nLGE9YXx8ZC5kdXJhdGlvbnx8dS5kdXJhdGlvbix0Lmxlbmd0aD9lLmxlbmd0aD8ocz1lLnNob3coKS5vdXRlckhlaWdodCgpLHQuYW5pbWF0ZSh0aGlzLmhpZGVQcm9wcyx7ZHVyYXRpb246YSxlYXNpbmc6bixzdGVwOmZ1bmN0aW9uKGUsdCl7dC5ub3c9TWF0aC5yb3VuZChlKX19KSxlLmhpZGUoKS5hbmltYXRlKHRoaXMuc2hvd1Byb3BzLHtkdXJhdGlvbjphLGVhc2luZzpuLGNvbXBsZXRlOmMsc3RlcDpmdW5jdGlvbihlLGkpe2kubm93PU1hdGgucm91bmQoZSksImhlaWdodCIhPT1pLnByb3A/ImNvbnRlbnQtYm94Ij09PWgmJihyKz1pLm5vdyk6ImNvbnRlbnQiIT09by5vcHRpb25zLmhlaWdodFN0eWxlJiYoaS5ub3c9TWF0aC5yb3VuZChzLXQub3V0ZXJIZWlnaHQoKS1yKSxyPTApfX0pLHZvaWQgMCk6dC5hbmltYXRlKHRoaXMuaGlkZVByb3BzLGEsbixjKTplLmFuaW1hdGUodGhpcy5zaG93UHJvcHMsYSxuLGMpfSxfdG9nZ2xlQ29tcGxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vbGRQYW5lbDt0LnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKS5wcmV2KCkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci10b3AiKS5hZGRDbGFzcygidWktY29ybmVyLWFsbCIpLHQubGVuZ3RoJiYodC5wYXJlbnQoKVswXS5jbGFzc05hbWU9dC5wYXJlbnQoKVswXS5jbGFzc05hbWUpLHRoaXMuX3RyaWdnZXIoImFjdGl2YXRlIixudWxsLGUpfX0pLGUud2lkZ2V0KCJ1aS5tZW51Iix7dmVyc2lvbjoiMS4xMS40IixkZWZhdWx0RWxlbWVudDoiPHVsPiIsZGVsYXk6MzAwLG9wdGlvbnM6e2ljb25zOntzdWJtZW51OiJ1aS1pY29uLWNhcmF0LTEtZSJ9LGl0ZW1zOiI+ICoiLG1lbnVzOiJ1bCIscG9zaXRpb246e215OiJsZWZ0LTEgdG9wIixhdDoicmlnaHQgdG9wIn0scm9sZToibWVudSIsYmx1cjpudWxsLGZvY3VzOm51bGwsc2VsZWN0Om51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZU1lbnU9dGhpcy5lbGVtZW50LHRoaXMubW91c2VIYW5kbGVkPSExLHRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1tZW51IHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCIpLnRvZ2dsZUNsYXNzKCJ1aS1tZW51LWljb25zIiwhIXRoaXMuZWxlbWVudC5maW5kKCIudWktaWNvbiIpLmxlbmd0aCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSx0YWJJbmRleDowfSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKSx0aGlzLl9vbih7Im1vdXNlZG93biAudWktbWVudS1pdGVtIjpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9LCJjbGljayAudWktbWVudS1pdGVtIjpmdW5jdGlvbih0KXt2YXIgaT1lKHQudGFyZ2V0KTshdGhpcy5tb3VzZUhhbmRsZWQmJmkubm90KCIudWktc3RhdGUtZGlzYWJsZWQiKS5sZW5ndGgmJih0aGlzLnNlbGVjdCh0KSx0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCl8fCh0aGlzLm1vdXNlSGFuZGxlZD0hMCksaS5oYXMoIi51aS1tZW51IikubGVuZ3RoP3RoaXMuZXhwYW5kKHQpOiF0aGlzLmVsZW1lbnQuaXMoIjpmb2N1cyIpJiZlKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCkuY2xvc2VzdCgiLnVpLW1lbnUiKS5sZW5ndGgmJih0aGlzLmVsZW1lbnQudHJpZ2dlcigiZm9jdXMiLFshMF0pLHRoaXMuYWN0aXZlJiYxPT09dGhpcy5hY3RpdmUucGFyZW50cygiLnVpLW1lbnUiKS5sZW5ndGgmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSkpfSwibW91c2VlbnRlciAudWktbWVudS1pdGVtIjpmdW5jdGlvbih0KXtpZighdGhpcy5wcmV2aW91c0ZpbHRlcil7dmFyIGk9ZSh0LmN1cnJlbnRUYXJnZXQpO2kuc2libGluZ3MoIi51aS1zdGF0ZS1hY3RpdmUiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5mb2N1cyh0LGkpfX0sbW91c2VsZWF2ZToiY29sbGFwc2VBbGwiLCJtb3VzZWxlYXZlIC51aS1tZW51IjoiY29sbGFwc2VBbGwiLGZvY3VzOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5hY3RpdmV8fHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZXEoMCk7dHx8dGhpcy5mb2N1cyhlLGkpfSxibHVyOmZ1bmN0aW9uKHQpe3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7ZS5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50KXx8dGhpcy5jb2xsYXBzZUFsbCh0KX0pfSxrZXlkb3duOiJfa2V5ZG93biJ9KSx0aGlzLnJlZnJlc2goKSx0aGlzLl9vbih0aGlzLmRvY3VtZW50LHtjbGljazpmdW5jdGlvbihlKXt0aGlzLl9jbG9zZU9uRG9jdW1lbnRDbGljayhlKSYmdGhpcy5jb2xsYXBzZUFsbChlKSx0aGlzLm1vdXNlSGFuZGxlZD0hMX19KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IikuZmluZCgiLnVpLW1lbnUiKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoInVpLW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLW1lbnUtaWNvbnMgdWktZnJvbnQiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVBdHRyKCJhcmlhLWxhYmVsbGVkYnkiKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWRpc2FibGVkIikucmVtb3ZlVW5pcXVlSWQoKS5zaG93KCksdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51LWl0ZW0iKS5yZW1vdmVDbGFzcygidWktbWVudS1pdGVtIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVVbmlxdWVJZCgpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtaGFzcG9wdXAiKS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuZGF0YSgidWktbWVudS1zdWJtZW51LWNhcmF0IikmJnQucmVtb3ZlKCl9KSx0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUtZGl2aWRlciIpLnJlbW92ZUNsYXNzKCJ1aS1tZW51LWRpdmlkZXIgdWktd2lkZ2V0LWNvbnRlbnQiKX0sX2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGkscyxuLGEsbz0hMDtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGUudWkua2V5Q29kZS5QQUdFX1VQOnRoaXMucHJldmlvdXNQYWdlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfRE9XTjp0aGlzLm5leHRQYWdlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6dGhpcy5fbW92ZSgiZmlyc3QiLCJmaXJzdCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOnRoaXMuX21vdmUoImxhc3QiLCJsYXN0Iix0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDp0aGlzLnByZXZpb3VzKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkRPV046dGhpcy5uZXh0KHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkxFRlQ6dGhpcy5jb2xsYXBzZSh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5SSUdIVDp0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSYmdGhpcy5leHBhbmQodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5URVI6Y2FzZSBlLnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5fYWN0aXZhdGUodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRVNDQVBFOnRoaXMuY29sbGFwc2UodCk7YnJlYWs7ZGVmYXVsdDpvPSExLHM9dGhpcy5wcmV2aW91c0ZpbHRlcnx8IiIsbj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQua2V5Q29kZSksYT0hMSxjbGVhclRpbWVvdXQodGhpcy5maWx0ZXJUaW1lciksbj09PXM/YT0hMDpuPXMrbixpPXRoaXMuX2ZpbHRlck1lbnVJdGVtcyhuKSxpPWEmJi0xIT09aS5pbmRleCh0aGlzLmFjdGl2ZS5uZXh0KCkpP3RoaXMuYWN0aXZlLm5leHRBbGwoIi51aS1tZW51LWl0ZW0iKTppLGkubGVuZ3RofHwobj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQua2V5Q29kZSksaT10aGlzLl9maWx0ZXJNZW51SXRlbXMobikpLGkubGVuZ3RoPyh0aGlzLmZvY3VzKHQsaSksdGhpcy5wcmV2aW91c0ZpbHRlcj1uLHRoaXMuZmlsdGVyVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcn0sMWUzKSk6ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXJ9byYmdC5wcmV2ZW50RGVmYXVsdCgpfSxfYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dGhpcy5hY3RpdmUuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpfHwodGhpcy5hY3RpdmUuaXMoIlthcmlhLWhhc3BvcHVwPSd0cnVlJ10iKT90aGlzLmV4cGFuZChlKTp0aGlzLnNlbGVjdChlKSl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdCxpLHM9dGhpcyxuPXRoaXMub3B0aW9ucy5pY29ucy5zdWJtZW51LGE9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLm1lbnVzKTt0aGlzLmVsZW1lbnQudG9nZ2xlQ2xhc3MoInVpLW1lbnUtaWNvbnMiLCEhdGhpcy5lbGVtZW50LmZpbmQoIi51aS1pY29uIikubGVuZ3RoKSxhLmZpbHRlcigiOm5vdCgudWktbWVudSkiKS5hZGRDbGFzcygidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktZnJvbnQiKS5oaWRlKCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSwiYXJpYS1oaWRkZW4iOiJ0cnVlIiwiYXJpYS1leHBhbmRlZCI6ImZhbHNlIn0pLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC5wYXJlbnQoKSxzPWUoIjxzcGFuPiIpLmFkZENsYXNzKCJ1aS1tZW51LWljb24gdWktaWNvbiAiK24pLmRhdGEoInVpLW1lbnUtc3VibWVudS1jYXJhdCIsITApO2kuYXR0cigiYXJpYS1oYXNwb3B1cCIsInRydWUiKS5wcmVwZW5kKHMpLHQuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixpLmF0dHIoImlkIikpfSksdD1hLmFkZCh0aGlzLmVsZW1lbnQpLGk9dC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcyksaS5ub3QoIi51aS1tZW51LWl0ZW0iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtzLl9pc0RpdmlkZXIodCkmJnQuYWRkQ2xhc3MoInVpLXdpZGdldC1jb250ZW50IHVpLW1lbnUtZGl2aWRlciIpfSksaS5ub3QoIi51aS1tZW51LWl0ZW0sIC51aS1tZW51LWRpdmlkZXIiKS5hZGRDbGFzcygidWktbWVudS1pdGVtIikudW5pcXVlSWQoKS5hdHRyKHt0YWJJbmRleDotMSxyb2xlOnRoaXMuX2l0ZW1Sb2xlKCl9KSxpLmZpbHRlcigiLnVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKSx0aGlzLmFjdGl2ZSYmIWUuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHRoaXMuYWN0aXZlWzBdKSYmdGhpcy5ibHVyKCl9LF9pdGVtUm9sZTpmdW5jdGlvbigpe3JldHVybnttZW51OiJtZW51aXRlbSIsbGlzdGJveDoib3B0aW9uIn1bdGhpcy5vcHRpb25zLnJvbGVdfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7Imljb25zIj09PWUmJnRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudS1pY29uIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUpLmFkZENsYXNzKHQuc3VibWVudSksImRpc2FibGVkIj09PWUmJnRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCkuYXR0cigiYXJpYS1kaXNhYmxlZCIsdCksdGhpcy5fc3VwZXIoZSx0KX0sZm9jdXM6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzO3RoaXMuYmx1cihlLGUmJiJmb2N1cyI9PT1lLnR5cGUpLHRoaXMuX3Njcm9sbEludG9WaWV3KHQpLHRoaXMuYWN0aXZlPXQuZmlyc3QoKSxzPXRoaXMuYWN0aXZlLmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLm9wdGlvbnMucm9sZSYmdGhpcy5lbGVtZW50LmF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIscy5hdHRyKCJpZCIpKSx0aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGUmJiJrZXlkb3duIj09PWUudHlwZT90aGlzLl9jbG9zZSgpOnRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpfSx0aGlzLmRlbGF5KSxpPXQuY2hpbGRyZW4oIi51aS1tZW51IiksaS5sZW5ndGgmJmUmJi9ebW91c2UvLnRlc3QoZS50eXBlKSYmdGhpcy5fc3RhcnRPcGVuaW5nKGkpLHRoaXMuYWN0aXZlTWVudT10LnBhcmVudCgpLHRoaXMuX3RyaWdnZXIoImZvY3VzIixlLHtpdGVtOnR9KX0sX3Njcm9sbEludG9WaWV3OmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG8scjt0aGlzLl9oYXNTY3JvbGwoKSYmKGk9cGFyc2VGbG9hdChlLmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwLHM9cGFyc2VGbG9hdChlLmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sInBhZGRpbmdUb3AiKSl8fDAsbj10Lm9mZnNldCgpLnRvcC10aGlzLmFjdGl2ZU1lbnUub2Zmc2V0KCkudG9wLWktcyxhPXRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoKSxvPXRoaXMuYWN0aXZlTWVudS5oZWlnaHQoKSxyPXQub3V0ZXJIZWlnaHQoKSwwPm4/dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcChhK24pOm4rcj5vJiZ0aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKGErbi1vK3IpKX0sYmx1cjpmdW5jdGlvbihlLHQpe3R8fGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmFjdGl2ZSYmKHRoaXMuYWN0aXZlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLHRoaXMuYWN0aXZlPW51bGwsdGhpcy5fdHJpZ2dlcigiYmx1ciIsZSx7aXRlbTp0aGlzLmFjdGl2ZX0pKX0sX3N0YXJ0T3BlbmluZzpmdW5jdGlvbihlKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksInRydWUiPT09ZS5hdHRyKCJhcmlhLWhpZGRlbiIpJiYodGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX2Nsb3NlKCksdGhpcy5fb3BlbihlKX0sdGhpcy5kZWxheSkpfSxfb3BlbjpmdW5jdGlvbih0KXt2YXIgaT1lLmV4dGVuZCh7b2Y6dGhpcy5hY3RpdmV9LHRoaXMub3B0aW9ucy5wb3NpdGlvbik7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudSIpLm5vdCh0LnBhcmVudHMoIi51aS1tZW51IikpLmhpZGUoKS5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0LnNob3coKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJ0cnVlIikucG9zaXRpb24oaSl9LGNvbGxhcHNlQWxsOmZ1bmN0aW9uKHQsaSl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt2YXIgcz1pP3RoaXMuZWxlbWVudDplKHQmJnQudGFyZ2V0KS5jbG9zZXN0KHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudSIpKTtzLmxlbmd0aHx8KHM9dGhpcy5lbGVtZW50KSx0aGlzLl9jbG9zZShzKSx0aGlzLmJsdXIodCksdGhpcy5hY3RpdmVNZW51PXN9LHRoaXMuZGVsYXkpfSxfY2xvc2U6ZnVuY3Rpb24oZSl7ZXx8KGU9dGhpcy5hY3RpdmU/dGhpcy5hY3RpdmUucGFyZW50KCk6dGhpcy5lbGVtZW50KSxlLmZpbmQoIi51aS1tZW51IikuaGlkZSgpLmF0dHIoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLmVuZCgpLmZpbmQoIi51aS1zdGF0ZS1hY3RpdmUiKS5ub3QoIi51aS1zdGF0ZS1mb2N1cyIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX0sX2Nsb3NlT25Eb2N1bWVudENsaWNrOmZ1bmN0aW9uKHQpe3JldHVybiFlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudSIpLmxlbmd0aH0sX2lzRGl2aWRlcjpmdW5jdGlvbihlKXtyZXR1cm4hL1teXC1cdTIwMTRcdTIwMTNcc10vLnRlc3QoZS50ZXh0KCkpfSxjb2xsYXBzZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIsdGhpcy5lbGVtZW50KTt0JiZ0Lmxlbmd0aCYmKHRoaXMuX2Nsb3NlKCksdGhpcy5mb2N1cyhlLHQpKX0sZXhwYW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5jaGlsZHJlbigiLnVpLW1lbnUgIikuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmZpcnN0KCk7dCYmdC5sZW5ndGgmJih0aGlzLl9vcGVuKHQucGFyZW50KCkpLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5mb2N1cyhlLHQpfSkpfSxuZXh0OmZ1bmN0aW9uKGUpe3RoaXMuX21vdmUoIm5leHQiLCJmaXJzdCIsZSl9LHByZXZpb3VzOmZ1bmN0aW9uKGUpe3RoaXMuX21vdmUoInByZXYiLCJsYXN0IixlKX0saXNGaXJzdEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5wcmV2QWxsKCIudWktbWVudS1pdGVtIikubGVuZ3RofSxpc0xhc3RJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aH0sX21vdmU6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzO3RoaXMuYWN0aXZlJiYocz0iZmlyc3QiPT09ZXx8Imxhc3QiPT09ZT90aGlzLmFjdGl2ZVsiZmlyc3QiPT09ZT8icHJldkFsbCI6Im5leHRBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKC0xKTp0aGlzLmFjdGl2ZVtlKyJBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKDApKSxzJiZzLmxlbmd0aCYmdGhpcy5hY3RpdmV8fChzPXRoaXMuYWN0aXZlTWVudS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcylbdF0oKSksdGhpcy5mb2N1cyhpLHMpfSxuZXh0UGFnZTpmdW5jdGlvbih0KXt2YXIgaSxzLG47cmV0dXJuIHRoaXMuYWN0aXZlPyh0aGlzLmlzTGFzdEl0ZW0oKXx8KHRoaXMuX2hhc1Njcm9sbCgpPyhzPXRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCxuPXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmFjdGl2ZS5uZXh0QWxsKCIudWktbWVudS1pdGVtIikuZWFjaChmdW5jdGlvbigpe3JldHVybiBpPWUodGhpcyksMD5pLm9mZnNldCgpLnRvcC1zLW59KSx0aGlzLmZvY3VzKHQsaSkpOnRoaXMuZm9jdXModCx0aGlzLmFjdGl2ZU1lbnUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpW3RoaXMuYWN0aXZlPyJsYXN0IjoiZmlyc3QiXSgpKSksdm9pZCAwKToodGhpcy5uZXh0KHQpLHZvaWQgMCl9LHByZXZpb3VzUGFnZTpmdW5jdGlvbih0KXt2YXIgaSxzLG47cmV0dXJuIHRoaXMuYWN0aXZlPyh0aGlzLmlzRmlyc3RJdGVtKCl8fCh0aGlzLl9oYXNTY3JvbGwoKT8ocz10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3Asbj10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5hY3RpdmUucHJldkFsbCgiLnVpLW1lbnUtaXRlbSIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gaT1lKHRoaXMpLGkub2Zmc2V0KCkudG9wLXMrbj4wfSksdGhpcy5mb2N1cyh0LGkpKTp0aGlzLmZvY3VzKHQsdGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maXJzdCgpKSksdm9pZCAwKToodGhpcy5uZXh0KHQpLHZvaWQgMCl9LF9oYXNTY3JvbGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCk8dGhpcy5lbGVtZW50LnByb3AoInNjcm9sbEhlaWdodCIpfSxzZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmU9dGhpcy5hY3RpdmV8fGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKTt2YXIgaT17aXRlbTp0aGlzLmFjdGl2ZX07dGhpcy5hY3RpdmUuaGFzKCIudWktbWVudSIpLmxlbmd0aHx8dGhpcy5jb2xsYXBzZUFsbCh0LCEwKSx0aGlzLl90cmlnZ2VyKCJzZWxlY3QiLHQsaSl9LF9maWx0ZXJNZW51SXRlbXM6ZnVuY3Rpb24odCl7dmFyIGk9dC5yZXBsYWNlKC9bXC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nLCJcXCQmIikscz1SZWdFeHAoIl4iK2ksImkiKTtyZXR1cm4gdGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maWx0ZXIoIi51aS1tZW51LWl0ZW0iKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gcy50ZXN0KGUudHJpbShlKHRoaXMpLnRleHQoKSkpfSl9fSksZS53aWRnZXQoInVpLmF1dG9jb21wbGV0ZSIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6IjxpbnB1dD4iLG9wdGlvbnM6e2FwcGVuZFRvOm51bGwsYXV0b0ZvY3VzOiExLGRlbGF5OjMwMCxtaW5MZW5ndGg6MSxwb3NpdGlvbjp7bXk6ImxlZnQgdG9wIixhdDoibGVmdCBib3R0b20iLGNvbGxpc2lvbjoibm9uZSJ9LHNvdXJjZTpudWxsLGNoYW5nZTpudWxsLGNsb3NlOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwscmVzcG9uc2U6bnVsbCxzZWFyY2g6bnVsbCxzZWxlY3Q6bnVsbH0scmVxdWVzdEluZGV4OjAscGVuZGluZzowLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxpLHMsbj10aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhPSJ0ZXh0YXJlYSI9PT1uLG89ImlucHV0Ij09PW47dGhpcy5pc011bHRpTGluZT1hPyEwOm8/ITE6dGhpcy5lbGVtZW50LnByb3AoImlzQ29udGVudEVkaXRhYmxlIiksdGhpcy52YWx1ZU1ldGhvZD10aGlzLmVsZW1lbnRbYXx8bz8idmFsIjoidGV4dCJdLHRoaXMuaXNOZXdNZW51PSEwLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYXV0b2NvbXBsZXRlLWlucHV0IikuYXR0cigiYXV0b2NvbXBsZXRlIiwib2ZmIiksdGhpcy5fb24odGhpcy5lbGVtZW50LHtrZXlkb3duOmZ1bmN0aW9uKG4pe2lmKHRoaXMuZWxlbWVudC5wcm9wKCJyZWFkT25seSIpKXJldHVybiB0PSEwLHM9ITAsaT0hMCx2b2lkIDA7dD0hMSxzPSExLGk9ITE7dmFyIGE9ZS51aS5rZXlDb2RlO3N3aXRjaChuLmtleUNvZGUpe2Nhc2UgYS5QQUdFX1VQOnQ9ITAsdGhpcy5fbW92ZSgicHJldmlvdXNQYWdlIixuKTticmVhaztjYXNlIGEuUEFHRV9ET1dOOnQ9ITAsdGhpcy5fbW92ZSgibmV4dFBhZ2UiLG4pO2JyZWFrO2Nhc2UgYS5VUDp0PSEwLHRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIsbik7YnJlYWs7Y2FzZSBhLkRPV046dD0hMCx0aGlzLl9rZXlFdmVudCgibmV4dCIsbik7YnJlYWs7Y2FzZSBhLkVOVEVSOnRoaXMubWVudS5hY3RpdmUmJih0PSEwLG4ucHJldmVudERlZmF1bHQoKSx0aGlzLm1lbnUuc2VsZWN0KG4pKTticmVhaztjYXNlIGEuVEFCOnRoaXMubWVudS5hY3RpdmUmJnRoaXMubWVudS5zZWxlY3Qobik7YnJlYWs7Y2FzZSBhLkVTQ0FQRTp0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSYmKHRoaXMuaXNNdWx0aUxpbmV8fHRoaXMuX3ZhbHVlKHRoaXMudGVybSksdGhpcy5jbG9zZShuKSxuLnByZXZlbnREZWZhdWx0KCkpO2JyZWFrO2RlZmF1bHQ6aT0hMCx0aGlzLl9zZWFyY2hUaW1lb3V0KG4pfX0sa2V5cHJlc3M6ZnVuY3Rpb24ocyl7aWYodClyZXR1cm4gdD0hMSwoIXRoaXMuaXNNdWx0aUxpbmV8fHRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpKSYmcy5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgMDtpZighaSl7dmFyIG49ZS51aS5rZXlDb2RlO3N3aXRjaChzLmtleUNvZGUpe2Nhc2Ugbi5QQUdFX1VQOnRoaXMuX21vdmUoInByZXZpb3VzUGFnZSIscyk7YnJlYWs7Y2FzZSBuLlBBR0VfRE9XTjp0aGlzLl9tb3ZlKCJuZXh0UGFnZSIscyk7YnJlYWs7Y2FzZSBuLlVQOnRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIscyk7YnJlYWs7Y2FzZSBuLkRPV046dGhpcy5fa2V5RXZlbnQoIm5leHQiLHMpfX19LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBzPyhzPSExLGUucHJldmVudERlZmF1bHQoKSx2b2lkIDApOih0aGlzLl9zZWFyY2hUaW1lb3V0KGUpLHZvaWQgMCl9LGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEl0ZW09bnVsbCx0aGlzLnByZXZpb3VzPXRoaXMuX3ZhbHVlKCl9LGJsdXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2FuY2VsQmx1cj8oZGVsZXRlIHRoaXMuY2FuY2VsQmx1cix2b2lkIDApOihjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuY2xvc2UoZSksdGhpcy5fY2hhbmdlKGUpLHZvaWQgMCl9fSksdGhpcy5faW5pdFNvdXJjZSgpLHRoaXMubWVudT1lKCI8dWw+IikuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZSB1aS1mcm9udCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLm1lbnUoe3JvbGU6bnVsbH0pLmhpZGUoKS5tZW51KCJpbnN0YW5jZSIpLHRoaXMuX29uKHRoaXMubWVudS5lbGVtZW50LHttb3VzZWRvd246ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXJ9KTt2YXIgaT10aGlzLm1lbnUuZWxlbWVudFswXTtlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikubGVuZ3RofHx0aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5kb2N1bWVudC5vbmUoIm1vdXNlZG93biIsZnVuY3Rpb24ocyl7cy50YXJnZXQ9PT10LmVsZW1lbnRbMF18fHMudGFyZ2V0PT09aXx8ZS5jb250YWlucyhpLHMudGFyZ2V0KXx8dC5jbG9zZSgpfSl9KX0sbWVudWZvY3VzOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbjtyZXR1cm4gdGhpcy5pc05ld01lbnUmJih0aGlzLmlzTmV3TWVudT0hMSx0Lm9yaWdpbmFsRXZlbnQmJi9ebW91c2UvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpKT8odGhpcy5tZW51LmJsdXIoKSx0aGlzLmRvY3VtZW50Lm9uZSgibW91c2Vtb3ZlIixmdW5jdGlvbigpe2UodC50YXJnZXQpLnRyaWdnZXIodC5vcmlnaW5hbEV2ZW50KX0pLHZvaWQgMCk6KG49aS5pdGVtLmRhdGEoInVpLWF1dG9jb21wbGV0ZS1pdGVtIiksITEhPT10aGlzLl90cmlnZ2VyKCJmb2N1cyIsdCx7aXRlbTpufSkmJnQub3JpZ2luYWxFdmVudCYmL15rZXkvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpJiZ0aGlzLl92YWx1ZShuLnZhbHVlKSxzPWkuaXRlbS5hdHRyKCJhcmlhLWxhYmVsIil8fG4udmFsdWUscyYmZS50cmltKHMpLmxlbmd0aCYmKHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSxlKCI8ZGl2PiIpLnRleHQocykuYXBwZW5kVG8odGhpcy5saXZlUmVnaW9uKSksdm9pZCAwKX0sbWVudXNlbGVjdDpmdW5jdGlvbihlLHQpe3ZhciBpPXQuaXRlbS5kYXRhKCJ1aS1hdXRvY29tcGxldGUtaXRlbSIpLHM9dGhpcy5wcmV2aW91czt0aGlzLmVsZW1lbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQmJih0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPXMsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXMsdGhpcy5zZWxlY3RlZEl0ZW09aX0pKSwhMSE9PXRoaXMuX3RyaWdnZXIoInNlbGVjdCIsZSx7aXRlbTppfSkmJnRoaXMuX3ZhbHVlKGkudmFsdWUpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLHRoaXMuY2xvc2UoZSksdGhpcy5zZWxlY3RlZEl0ZW09aX19KSx0aGlzLmxpdmVSZWdpb249ZSgiPHNwYW4+Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoiYXNzZXJ0aXZlIiwiYXJpYS1yZWxldmFudCI6ImFkZGl0aW9ucyJ9KS5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIikuYXBwZW5kVG8odGhpcy5kb2N1bWVudFswXS5ib2R5KSx0aGlzLl9vbih0aGlzLndpbmRvdyx7YmVmb3JldW5sb2FkOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpfX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtaW5wdXQiKS5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKSx0aGlzLm1lbnUuZWxlbWVudC5yZW1vdmUoKSx0aGlzLmxpdmVSZWdpb24ucmVtb3ZlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpLCJzb3VyY2UiPT09ZSYmdGhpcy5faW5pdFNvdXJjZSgpLCJhcHBlbmRUbyI9PT1lJiZ0aGlzLm1lbnUuZWxlbWVudC5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSwiZGlzYWJsZWQiPT09ZSYmdCYmdGhpcy54aHImJnRoaXMueGhyLmFib3J0KCl9LF9hcHBlbmRUbzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5hcHBlbmRUbztyZXR1cm4gdCYmKHQ9dC5qcXVlcnl8fHQubm9kZVR5cGU/ZSh0KTp0aGlzLmRvY3VtZW50LmZpbmQodCkuZXEoMCkpLHQmJnRbMF18fCh0PXRoaXMuZWxlbWVudC5jbG9zZXN0KCIudWktZnJvbnQiKSksdC5sZW5ndGh8fCh0PXRoaXMuZG9jdW1lbnRbMF0uYm9keSksdH0sX2luaXRTb3VyY2U6ZnVuY3Rpb24oKXt2YXIgdCxpLHM9dGhpcztlLmlzQXJyYXkodGhpcy5vcHRpb25zLnNvdXJjZSk/KHQ9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbihpLHMpe3MoZS51aS5hdXRvY29tcGxldGUuZmlsdGVyKHQsaS50ZXJtKSl9KToic3RyaW5nIj09dHlwZW9mIHRoaXMub3B0aW9ucy5zb3VyY2U/KGk9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbih0LG4pe3MueGhyJiZzLnhoci5hYm9ydCgpLHMueGhyPWUuYWpheCh7dXJsOmksZGF0YTp0LGRhdGFUeXBlOiJqc29uIixzdWNjZXNzOmZ1bmN0aW9uKGUpe24oZSl9LGVycm9yOmZ1bmN0aW9uKCl7bihbXSl9fSl9KTp0aGlzLnNvdXJjZT10aGlzLm9wdGlvbnMuc291cmNlfSxfc2VhcmNoVGltZW91dDpmdW5jdGlvbihlKXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuc2VhcmNoaW5nPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50ZXJtPT09dGhpcy5fdmFsdWUoKSxpPXRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpLHM9ZS5hbHRLZXl8fGUuY3RybEtleXx8ZS5tZXRhS2V5fHxlLnNoaWZ0S2V5OyghdHx8dCYmIWkmJiFzKSYmKHRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5zZWFyY2gobnVsbCxlKSl9LHRoaXMub3B0aW9ucy5kZWxheSl9LHNlYXJjaDpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWU/ZTp0aGlzLl92YWx1ZSgpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLGUubGVuZ3RoPHRoaXMub3B0aW9ucy5taW5MZW5ndGg/dGhpcy5jbG9zZSh0KTp0aGlzLl90cmlnZ2VyKCJzZWFyY2giLHQpIT09ITE/dGhpcy5fc2VhcmNoKGUpOnZvaWQgMH0sX3NlYXJjaDpmdW5jdGlvbihlKXt0aGlzLnBlbmRpbmcrKyx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nIiksdGhpcy5jYW5jZWxTZWFyY2g9ITEsdGhpcy5zb3VyY2Uoe3Rlcm06ZX0sdGhpcy5fcmVzcG9uc2UoKSl9LF9yZXNwb25zZTpmdW5jdGlvbigpe3ZhciB0PSsrdGhpcy5yZXF1ZXN0SW5kZXg7cmV0dXJuIGUucHJveHkoZnVuY3Rpb24oZSl7dD09PXRoaXMucmVxdWVzdEluZGV4JiZ0aGlzLl9fcmVzcG9uc2UoZSksdGhpcy5wZW5kaW5nLS0sdGhpcy5wZW5kaW5nfHx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nIil9LHRoaXMpfSxfX3Jlc3BvbnNlOmZ1bmN0aW9uKGUpe2UmJihlPXRoaXMuX25vcm1hbGl6ZShlKSksdGhpcy5fdHJpZ2dlcigicmVzcG9uc2UiLG51bGwse2NvbnRlbnQ6ZX0pLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJmUmJmUubGVuZ3RoJiYhdGhpcy5jYW5jZWxTZWFyY2g/KHRoaXMuX3N1Z2dlc3QoZSksdGhpcy5fdHJpZ2dlcigib3BlbiIpKTp0aGlzLl9jbG9zZSgpfSxjbG9zZTpmdW5jdGlvbihlKXt0aGlzLmNhbmNlbFNlYXJjaD0hMCx0aGlzLl9jbG9zZShlKX0sX2Nsb3NlOmZ1bmN0aW9uKGUpe3RoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpJiYodGhpcy5tZW51LmVsZW1lbnQuaGlkZSgpLHRoaXMubWVudS5ibHVyKCksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5fdHJpZ2dlcigiY2xvc2UiLGUpKX0sX2NoYW5nZTpmdW5jdGlvbihlKXt0aGlzLnByZXZpb3VzIT09dGhpcy5fdmFsdWUoKSYmdGhpcy5fdHJpZ2dlcigiY2hhbmdlIixlLHtpdGVtOnRoaXMuc2VsZWN0ZWRJdGVtfSl9LF9ub3JtYWxpemU6ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoJiZ0WzBdLmxhYmVsJiZ0WzBdLnZhbHVlP3Q6ZS5tYXAodCxmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/e2xhYmVsOnQsdmFsdWU6dH06ZS5leHRlbmQoe30sdCx7bGFiZWw6dC5sYWJlbHx8dC52YWx1ZSx2YWx1ZTp0LnZhbHVlfHx0LmxhYmVsfSl9KX0sX3N1Z2dlc3Q6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5tZW51LmVsZW1lbnQuZW1wdHkoKTt0aGlzLl9yZW5kZXJNZW51KGksdCksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5tZW51LnJlZnJlc2goKSxpLnNob3coKSx0aGlzLl9yZXNpemVNZW51KCksaS5wb3NpdGlvbihlLmV4dGVuZCh7b2Y6dGhpcy5lbGVtZW50fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSx0aGlzLm9wdGlvbnMuYXV0b0ZvY3VzJiZ0aGlzLm1lbnUubmV4dCgpfSxfcmVzaXplTWVudTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubWVudS5lbGVtZW50O2Uub3V0ZXJXaWR0aChNYXRoLm1heChlLndpZHRoKCIiKS5vdXRlcldpZHRoKCkrMSx0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpKSl9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKHQsaSl7dmFyIHM9dGhpcztlLmVhY2goaSxmdW5jdGlvbihlLGkpe3MuX3JlbmRlckl0ZW1EYXRhKHQsaSl9KX0sX3JlbmRlckl0ZW1EYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3JlbmRlckl0ZW0oZSx0KS5kYXRhKCJ1aS1hdXRvY29tcGxldGUtaXRlbSIsdCl9LF9yZW5kZXJJdGVtOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGUoIjxsaT4iKS50ZXh0KGkubGFiZWwpLmFwcGVuZFRvKHQpfSxfbW92ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKT90aGlzLm1lbnUuaXNGaXJzdEl0ZW0oKSYmL15wcmV2aW91cy8udGVzdChlKXx8dGhpcy5tZW51LmlzTGFzdEl0ZW0oKSYmL15uZXh0Ly50ZXN0KGUpPyh0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLHRoaXMubWVudS5ibHVyKCksdm9pZCAwKToodGhpcy5tZW51W2VdKHQpLHZvaWQgMCk6KHRoaXMuc2VhcmNoKG51bGwsdCksdm9pZCAwKX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVudS5lbGVtZW50fSxfdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZU1ldGhvZC5hcHBseSh0aGlzLmVsZW1lbnQsYXJndW1lbnRzKX0sX2tleUV2ZW50OmZ1bmN0aW9uKGUsdCl7KCF0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSkmJih0aGlzLl9tb3ZlKGUsdCksdC5wcmV2ZW50RGVmYXVsdCgpKX19KSxlLmV4dGVuZChlLnVpLmF1dG9jb21wbGV0ZSx7ZXNjYXBlUmVnZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpfSxmaWx0ZXI6ZnVuY3Rpb24odCxpKXt2YXIgcz1SZWdFeHAoZS51aS5hdXRvY29tcGxldGUuZXNjYXBlUmVnZXgoaSksImkiKTtyZXR1cm4gZS5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIHMudGVzdChlLmxhYmVsfHxlLnZhbHVlfHxlKX0pfX0pLGUud2lkZ2V0KCJ1aS5hdXRvY29tcGxldGUiLGUudWkuYXV0b2NvbXBsZXRlLHtvcHRpb25zOnttZXNzYWdlczp7bm9SZXN1bHRzOiJObyBzZWFyY2ggcmVzdWx0cy4iLHJlc3VsdHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrKGU+MT8iIHJlc3VsdHMgYXJlIjoiIHJlc3VsdCBpcyIpKyIgYXZhaWxhYmxlLCB1c2UgdXAgYW5kIGRvd24gYXJyb3cga2V5cyB0byBuYXZpZ2F0ZS4ifX19LF9fcmVzcG9uc2U6ZnVuY3Rpb24odCl7dmFyIGk7dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLHRoaXMub3B0aW9ucy5kaXNhYmxlZHx8dGhpcy5jYW5jZWxTZWFyY2h8fChpPXQmJnQubGVuZ3RoP3RoaXMub3B0aW9ucy5tZXNzYWdlcy5yZXN1bHRzKHQubGVuZ3RoKTp0aGlzLm9wdGlvbnMubWVzc2FnZXMubm9SZXN1bHRzLHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSxlKCI8ZGl2PiIpLnRleHQoaSkuYXBwZW5kVG8odGhpcy5saXZlUmVnaW9uKSl9fSksZS51aS5hdXRvY29tcGxldGU7dmFyIHIsaD0idWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiLGw9InVpLWJ1dHRvbi1pY29ucy1vbmx5IHVpLWJ1dHRvbi1pY29uLW9ubHkgdWktYnV0dG9uLXRleHQtaWNvbnMgdWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IHVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IHVpLWJ1dHRvbi10ZXh0LW9ubHkiLHU9ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmZpbmQoIjp1aS1idXR0b24iKS5idXR0b24oInJlZnJlc2giKX0sMSl9LGQ9ZnVuY3Rpb24odCl7dmFyIGk9dC5uYW1lLHM9dC5mb3JtLG49ZShbXSk7cmV0dXJuIGkmJihpPWkucmVwbGFjZSgvJy9nLCJcXCciKSxuPXM/ZShzKS5maW5kKCJbbmFtZT0nIitpKyInXVt0eXBlPXJhZGlvXSIpOmUoIltuYW1lPSciK2krIiddW3R5cGU9cmFkaW9dIix0Lm93bmVyRG9jdW1lbnQpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiF0aGlzLmZvcm19KSksbn07ZS53aWRnZXQoInVpLmJ1dHRvbiIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6IjxidXR0b24+IixvcHRpb25zOntkaXNhYmxlZDpudWxsLHRleHQ6ITAsbGFiZWw6bnVsbCxpY29uczp7cHJpbWFyeTpudWxsLHNlY29uZGFyeTpudWxsfX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5jbG9zZXN0KCJmb3JtIikudW5iaW5kKCJyZXNldCIrdGhpcy5ldmVudE5hbWVzcGFjZSkuYmluZCgicmVzZXQiK3RoaXMuZXZlbnROYW1lc3BhY2UsdSksImJvb2xlYW4iIT10eXBlb2YgdGhpcy5vcHRpb25zLmRpc2FibGVkP3RoaXMub3B0aW9ucy5kaXNhYmxlZD0hIXRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIpOnRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsdGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9kZXRlcm1pbmVCdXR0b25UeXBlKCksdGhpcy5oYXNUaXRsZT0hIXRoaXMuYnV0dG9uRWxlbWVudC5hdHRyKCJ0aXRsZSIpO3ZhciB0PXRoaXMsaT10aGlzLm9wdGlvbnMscz0iY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlLG49cz8iIjoidWktc3RhdGUtYWN0aXZlIjtudWxsPT09aS5sYWJlbCYmKGkubGFiZWw9ImlucHV0Ij09PXRoaXMudHlwZT90aGlzLmJ1dHRvbkVsZW1lbnQudmFsKCk6dGhpcy5idXR0b25FbGVtZW50Lmh0bWwoKSksdGhpcy5faG92ZXJhYmxlKHRoaXMuYnV0dG9uRWxlbWVudCksdGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKGgpLmF0dHIoInJvbGUiLCJidXR0b24iKS5iaW5kKCJtb3VzZWVudGVyIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7aS5kaXNhYmxlZHx8dGhpcz09PXImJmUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgibW91c2VsZWF2ZSIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2kuZGlzYWJsZWR8fGUodGhpcykucmVtb3ZlQ2xhc3Mobil9KS5iaW5kKCJjbGljayIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbihlKXtpLmRpc2FibGVkJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfSksdGhpcy5fb24oe2ZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfSxibHVyOmZ1bmN0aW9uKCl7dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfX0pLHMmJnRoaXMuZWxlbWVudC5iaW5kKCJjaGFuZ2UiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXt0LnJlZnJlc2goKX0pLCJjaGVja2JveCI9PT10aGlzLnR5cGU/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGlzYWJsZWQ/ITE6dm9pZCAwfSk6InJhZGlvIj09PXRoaXMudHlwZT90aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgiY2xpY2siK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZihpLmRpc2FibGVkKXJldHVybiExO2UodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHQuYnV0dG9uRWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik7dmFyIHM9dC5lbGVtZW50WzBdO2Qocykubm90KHMpLm1hcChmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKX0pOih0aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgibW91c2Vkb3duIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGlzYWJsZWQ/ITE6KGUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHI9dGhpcyx0LmRvY3VtZW50Lm9uZSgibW91c2V1cCIsZnVuY3Rpb24oKXtyPW51bGx9KSx2b2lkIDApfSkuYmluZCgibW91c2V1cCIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe3JldHVybiBpLmRpc2FibGVkPyExOihlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx2b2lkIDApfSkuYmluZCgia2V5ZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbih0KXtyZXR1cm4gaS5kaXNhYmxlZD8hMTooKHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5TUEFDRXx8dC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLkVOVEVSKSYmZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdm9pZCAwKX0pLmJpbmQoImtleXVwIit0aGlzLmV2ZW50TmFtZXNwYWNlKyIgYmx1ciIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSksdGhpcy5idXR0b25FbGVtZW50LmlzKCJhIikmJnRoaXMuYnV0dG9uRWxlbWVudC5rZXl1cChmdW5jdGlvbih0KXt0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuU1BBQ0UmJmUodGhpcykuY2xpY2soKX0pKSx0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIixpLmRpc2FibGVkKSx0aGlzLl9yZXNldEJ1dHRvbigpfSxfZGV0ZXJtaW5lQnV0dG9uVHlwZTpmdW5jdGlvbigpe3ZhciBlLHQsaTt0aGlzLnR5cGU9dGhpcy5lbGVtZW50LmlzKCJbdHlwZT1jaGVja2JveF0iKT8iY2hlY2tib3giOnRoaXMuZWxlbWVudC5pcygiW3R5cGU9cmFkaW9dIik/InJhZGlvIjp0aGlzLmVsZW1lbnQuaXMoImlucHV0Iik/ImlucHV0IjoiYnV0dG9uIiwiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlPyhlPXRoaXMuZWxlbWVudC5wYXJlbnRzKCkubGFzdCgpLHQ9ImxhYmVsW2Zvcj0nIit0aGlzLmVsZW1lbnQuYXR0cigiaWQiKSsiJ10iLHRoaXMuYnV0dG9uRWxlbWVudD1lLmZpbmQodCksdGhpcy5idXR0b25FbGVtZW50Lmxlbmd0aHx8KGU9ZS5sZW5ndGg/ZS5zaWJsaW5ncygpOnRoaXMuZWxlbWVudC5zaWJsaW5ncygpLHRoaXMuYnV0dG9uRWxlbWVudD1lLmZpbHRlcih0KSx0aGlzLmJ1dHRvbkVsZW1lbnQubGVuZ3RofHwodGhpcy5idXR0b25FbGVtZW50PWUuZmluZCh0KSkpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIiksaT10aGlzLmVsZW1lbnQuaXMoIjpjaGVja2VkIiksaSYmdGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLmJ1dHRvbkVsZW1lbnQucHJvcCgiYXJpYS1wcmVzc2VkIixpKSk6dGhpcy5idXR0b25FbGVtZW50PXRoaXMuZWxlbWVudH0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnV0dG9uRWxlbWVudH0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSIpLHRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcyhoKyIgdWktc3RhdGUtYWN0aXZlICIrbCkucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtcHJlc3NlZCIpLmh0bWwodGhpcy5idXR0b25FbGVtZW50LmZpbmQoIi51aS1idXR0b24tdGV4dCIpLmh0bWwoKSksdGhpcy5oYXNUaXRsZXx8dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUF0dHIoInRpdGxlIil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fc3VwZXIoZSx0KSwiZGlzYWJsZWQiPT09ZT8odGhpcy53aWRnZXQoKS50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCksdGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwhIXQpLHQmJigiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlP3RoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKTp0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIHVpLXN0YXRlLWFjdGl2ZSIpKSx2b2lkIDApOih0aGlzLl9yZXNldEJ1dHRvbigpLHZvaWQgMCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQuaXMoImlucHV0LCBidXR0b24iKT90aGlzLmVsZW1lbnQuaXMoIjpkaXNhYmxlZCIpOnRoaXMuZWxlbWVudC5oYXNDbGFzcygidWktYnV0dG9uLWRpc2FibGVkIik7dCE9PXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdCksInJhZGlvIj09PXRoaXMudHlwZT9kKHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe2UodGhpcykuaXMoIjpjaGVja2VkIik/ZSh0aGlzKS5idXR0b24oIndpZGdldCIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik6ZSh0aGlzKS5idXR0b24oIndpZGdldCIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpfSk6ImNoZWNrYm94Ij09PXRoaXMudHlwZSYmKHRoaXMuZWxlbWVudC5pcygiOmNoZWNrZWQiKT90aGlzLmJ1dHRvbkVsZW1lbnQuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsInRydWUiKTp0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsImZhbHNlIikpfSxfcmVzZXRCdXR0b246ZnVuY3Rpb24oKXtpZigiaW5wdXQiPT09dGhpcy50eXBlKXJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMuZWxlbWVudC52YWwodGhpcy5vcHRpb25zLmxhYmVsKSx2b2lkIDA7dmFyIHQ9dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKGwpLGk9ZSgiPHNwYW4+PC9zcGFuPiIsdGhpcy5kb2N1bWVudFswXSkuYWRkQ2xhc3MoInVpLWJ1dHRvbi10ZXh0IikuaHRtbCh0aGlzLm9wdGlvbnMubGFiZWwpLmFwcGVuZFRvKHQuZW1wdHkoKSkudGV4dCgpLHM9dGhpcy5vcHRpb25zLmljb25zLG49cy5wcmltYXJ5JiZzLnNlY29uZGFyeSxhPVtdO3MucHJpbWFyeXx8cy5zZWNvbmRhcnk/KHRoaXMub3B0aW9ucy50ZXh0JiZhLnB1c2goInVpLWJ1dHRvbi10ZXh0LWljb24iKyhuPyJzIjpzLnByaW1hcnk/Ii1wcmltYXJ5IjoiLXNlY29uZGFyeSIpKSxzLnByaW1hcnkmJnQucHJlcGVuZCgiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXByaW1hcnkgdWktaWNvbiAiK3MucHJpbWFyeSsiJz48L3NwYW4+Iikscy5zZWNvbmRhcnkmJnQuYXBwZW5kKCI8c3BhbiBjbGFzcz0ndWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHVpLWljb24gIitzLnNlY29uZGFyeSsiJz48L3NwYW4+IiksdGhpcy5vcHRpb25zLnRleHR8fChhLnB1c2gobj8idWktYnV0dG9uLWljb25zLW9ubHkiOiJ1aS1idXR0b24taWNvbi1vbmx5IiksdGhpcy5oYXNUaXRsZXx8dC5hdHRyKCJ0aXRsZSIsZS50cmltKGkpKSkpOmEucHVzaCgidWktYnV0dG9uLXRleHQtb25seSIpLHQuYWRkQ2xhc3MoYS5qb2luKCIgIikpfX0pLGUud2lkZ2V0KCJ1aS5idXR0b25zZXQiLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e2l0ZW1zOiJidXR0b24sIGlucHV0W3R5cGU9YnV0dG9uXSwgaW5wdXRbdHlwZT1zdWJtaXRdLCBpbnB1dFt0eXBlPXJlc2V0XSwgaW5wdXRbdHlwZT1jaGVja2JveF0sIGlucHV0W3R5cGU9cmFkaW9dLCBhLCA6ZGF0YSh1aS1idXR0b24pIn0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYnV0dG9uc2V0Iil9LF9pbml0OmZ1bmN0aW9uKCl7dGhpcy5yZWZyZXNoKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXsiZGlzYWJsZWQiPT09ZSYmdGhpcy5idXR0b25zLmJ1dHRvbigib3B0aW9uIixlLHQpLHRoaXMuX3N1cGVyKGUsdCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD0icnRsIj09PXRoaXMuZWxlbWVudC5jc3MoImRpcmVjdGlvbiIpLGk9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKSxzPWkuZmlsdGVyKCI6dWktYnV0dG9uIik7aS5ub3QoIjp1aS1idXR0b24iKS5idXR0b24oKSxzLmJ1dHRvbigicmVmcmVzaCIpLHRoaXMuYnV0dG9ucz1pLm1hcChmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCB1aS1jb3JuZXItbGVmdCB1aS1jb3JuZXItcmlnaHQiKS5maWx0ZXIoIjpmaXJzdCIpLmFkZENsYXNzKHQ/InVpLWNvcm5lci1yaWdodCI6InVpLWNvcm5lci1sZWZ0IikuZW5kKCkuZmlsdGVyKCI6bGFzdCIpLmFkZENsYXNzKHQ/InVpLWNvcm5lci1sZWZ0IjoidWktY29ybmVyLXJpZ2h0IikuZW5kKCkuZW5kKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1idXR0b25zZXQiKSx0aGlzLmJ1dHRvbnMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKVswXX0pLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItbGVmdCB1aS1jb3JuZXItcmlnaHQiKS5lbmQoKS5idXR0b24oImRlc3Ryb3kiKX19KSxlLnVpLmJ1dHRvbixlLndpZGdldCgidWkuZGlhbG9nIix7dmVyc2lvbjoiMS4xMS40IixvcHRpb25zOnthcHBlbmRUbzoiYm9keSIsYXV0b09wZW46ITAsYnV0dG9uczpbXSxjbG9zZU9uRXNjYXBlOiEwLGNsb3NlVGV4dDoiQ2xvc2UiLGRpYWxvZ0NsYXNzOiIiLGRyYWdnYWJsZTohMCxoaWRlOm51bGwsaGVpZ2h0OiJhdXRvIixtYXhIZWlnaHQ6bnVsbCxtYXhXaWR0aDpudWxsLG1pbkhlaWdodDoxNTAsbWluV2lkdGg6MTUwLG1vZGFsOiExLHBvc2l0aW9uOntteToiY2VudGVyIixhdDoiY2VudGVyIixvZjp3aW5kb3csY29sbGlzaW9uOiJmaXQiLHVzaW5nOmZ1bmN0aW9uKHQpe3ZhciBpPWUodGhpcykuY3NzKHQpLm9mZnNldCgpLnRvcDswPmkmJmUodGhpcykuY3NzKCJ0b3AiLHQudG9wLWkpfX0scmVzaXphYmxlOiEwLHNob3c6bnVsbCx0aXRsZTpudWxsLHdpZHRoOjMwMCxiZWZvcmVDbG9zZTpudWxsLGNsb3NlOm51bGwsZHJhZzpudWxsLGRyYWdTdGFydDpudWxsLGRyYWdTdG9wOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwscmVzaXplOm51bGwscmVzaXplU3RhcnQ6bnVsbCxyZXNpemVTdG9wOm51bGx9LHNpemVSZWxhdGVkT3B0aW9uczp7YnV0dG9uczohMCxoZWlnaHQ6ITAsbWF4SGVpZ2h0OiEwLG1heFdpZHRoOiEwLG1pbkhlaWdodDohMCxtaW5XaWR0aDohMCx3aWR0aDohMH0scmVzaXphYmxlUmVsYXRlZE9wdGlvbnM6e21heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITB9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLm9yaWdpbmFsQ3NzPXtkaXNwbGF5OnRoaXMuZWxlbWVudFswXS5zdHlsZS5kaXNwbGF5LHdpZHRoOnRoaXMuZWxlbWVudFswXS5zdHlsZS53aWR0aCxtaW5IZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLm1pbkhlaWdodCxtYXhIZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLm1heEhlaWdodCxoZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLmhlaWdodH0sdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtwYXJlbnQ6dGhpcy5lbGVtZW50LnBhcmVudCgpLGluZGV4OnRoaXMuZWxlbWVudC5wYXJlbnQoKS5jaGlsZHJlbigpLmluZGV4KHRoaXMuZWxlbWVudCl9LHRoaXMub3JpZ2luYWxUaXRsZT10aGlzLmVsZW1lbnQuYXR0cigidGl0bGUiKSx0aGlzLm9wdGlvbnMudGl0bGU9dGhpcy5vcHRpb25zLnRpdGxlfHx0aGlzLm9yaWdpbmFsVGl0bGUsdGhpcy5fY3JlYXRlV3JhcHBlcigpLHRoaXMuZWxlbWVudC5zaG93KCkucmVtb3ZlQXR0cigidGl0bGUiKS5hZGRDbGFzcygidWktZGlhbG9nLWNvbnRlbnQgdWktd2lkZ2V0LWNvbnRlbnQiKS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nKSx0aGlzLl9jcmVhdGVUaXRsZWJhcigpLHRoaXMuX2NyZWF0ZUJ1dHRvblBhbmUoKSx0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlJiZlLmZuLmRyYWdnYWJsZSYmdGhpcy5fbWFrZURyYWdnYWJsZSgpLHRoaXMub3B0aW9ucy5yZXNpemFibGUmJmUuZm4ucmVzaXphYmxlJiZ0aGlzLl9tYWtlUmVzaXphYmxlKCksdGhpcy5faXNPcGVuPSExLHRoaXMuX3RyYWNrRm9jdXMoKX0sX2luaXQ6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuYXV0b09wZW4mJnRoaXMub3BlbigpfSxfYXBwZW5kVG86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuYXBwZW5kVG87cmV0dXJuIHQmJih0LmpxdWVyeXx8dC5ub2RlVHlwZSk/ZSh0KTp0aGlzLmRvY3VtZW50LmZpbmQodHx8ImJvZHkiKS5lcSgwKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMub3JpZ2luYWxQb3NpdGlvbjt0aGlzLl91bnRyYWNrSW5zdGFuY2UoKSx0aGlzLl9kZXN0cm95T3ZlcmxheSgpLHRoaXMuZWxlbWVudC5yZW1vdmVVbmlxdWVJZCgpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudCIpLmNzcyh0aGlzLm9yaWdpbmFsQ3NzKS5kZXRhY2goKSx0aGlzLnVpRGlhbG9nLnN0b3AoITAsITApLnJlbW92ZSgpLHRoaXMub3JpZ2luYWxUaXRsZSYmdGhpcy5lbGVtZW50LmF0dHIoInRpdGxlIix0aGlzLm9yaWdpbmFsVGl0bGUpLGU9dC5wYXJlbnQuY2hpbGRyZW4oKS5lcSh0LmluZGV4KSxlLmxlbmd0aCYmZVswXSE9PXRoaXMuZWxlbWVudFswXT9lLmJlZm9yZSh0aGlzLmVsZW1lbnQpOnQucGFyZW50LmFwcGVuZCh0aGlzLmVsZW1lbnQpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aURpYWxvZ30sZGlzYWJsZTplLm5vb3AsZW5hYmxlOmUubm9vcCxjbG9zZTpmdW5jdGlvbih0KXt2YXIgaSxzPXRoaXM7aWYodGhpcy5faXNPcGVuJiZ0aGlzLl90cmlnZ2VyKCJiZWZvcmVDbG9zZSIsdCkhPT0hMSl7aWYodGhpcy5faXNPcGVuPSExLHRoaXMuX2ZvY3VzZWRFbGVtZW50PW51bGwsdGhpcy5fZGVzdHJveU92ZXJsYXkoKSx0aGlzLl91bnRyYWNrSW5zdGFuY2UoKSwhdGhpcy5vcGVuZXIuZmlsdGVyKCI6Zm9jdXNhYmxlIikuZm9jdXMoKS5sZW5ndGgpdHJ5e2k9dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50LGkmJiJib2R5IiE9PWkubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmZShpKS5ibHVyKCl9Y2F0Y2gobil7fXRoaXMuX2hpZGUodGhpcy51aURpYWxvZyx0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe3MuX3RyaWdnZXIoImNsb3NlIix0KX0pfX0saXNPcGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzT3Blbn0sbW92ZVRvVG9wOmZ1bmN0aW9uKCl7dGhpcy5fbW92ZVRvVG9wKCl9LF9tb3ZlVG9Ub3A6ZnVuY3Rpb24odCxpKXt2YXIgcz0hMSxuPXRoaXMudWlEaWFsb2cuc2libGluZ3MoIi51aS1mcm9udDp2aXNpYmxlIikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuK2UodGhpcykuY3NzKCJ6LWluZGV4Iil9KS5nZXQoKSxhPU1hdGgubWF4LmFwcGx5KG51bGwsbik7cmV0dXJuIGE+PSt0aGlzLnVpRGlhbG9nLmNzcygiei1pbmRleCIpJiYodGhpcy51aURpYWxvZy5jc3MoInotaW5kZXgiLGErMSkscz0hMCkscyYmIWkmJnRoaXMuX3RyaWdnZXIoImZvY3VzIix0KSxzfSxvcGVuOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5faXNPcGVuPyh0aGlzLl9tb3ZlVG9Ub3AoKSYmdGhpcy5fZm9jdXNUYWJiYWJsZSgpLHZvaWQgMCk6KHRoaXMuX2lzT3Blbj0hMCx0aGlzLm9wZW5lcj1lKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCksdGhpcy5fc2l6ZSgpLHRoaXMuX3Bvc2l0aW9uKCksdGhpcy5fY3JlYXRlT3ZlcmxheSgpLHRoaXMuX21vdmVUb1RvcChudWxsLCEwKSx0aGlzLm92ZXJsYXkmJnRoaXMub3ZlcmxheS5jc3MoInotaW5kZXgiLHRoaXMudWlEaWFsb2cuY3NzKCJ6LWluZGV4IiktMSksdGhpcy5fc2hvdyh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5zaG93LGZ1bmN0aW9uKCl7dC5fZm9jdXNUYWJiYWJsZSgpLHQuX3RyaWdnZXIoImZvY3VzIil9KSx0aGlzLl9tYWtlRm9jdXNUYXJnZXQoKSx0aGlzLl90cmlnZ2VyKCJvcGVuIiksdm9pZCAwKX0sX2ZvY3VzVGFiYmFibGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mb2N1c2VkRWxlbWVudDtlfHwoZT10aGlzLmVsZW1lbnQuZmluZCgiW2F1dG9mb2N1c10iKSksZS5sZW5ndGh8fChlPXRoaXMuZWxlbWVudC5maW5kKCI6dGFiYmFibGUiKSksZS5sZW5ndGh8fChlPXRoaXMudWlEaWFsb2dCdXR0b25QYW5lLmZpbmQoIjp0YWJiYWJsZSIpKSxlLmxlbmd0aHx8KGU9dGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UuZmlsdGVyKCI6dGFiYmFibGUiKSksZS5sZW5ndGh8fChlPXRoaXMudWlEaWFsb2cpLGUuZXEoMCkuZm9jdXMoKX0sX2tlZXBGb2N1czpmdW5jdGlvbih0KXtmdW5jdGlvbiBpKCl7dmFyIHQ9dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50LGk9dGhpcy51aURpYWxvZ1swXT09PXR8fGUuY29udGFpbnModGhpcy51aURpYWxvZ1swXSx0KTtpfHx0aGlzLl9mb2N1c1RhYmJhYmxlKCl9dC5wcmV2ZW50RGVmYXVsdCgpLGkuY2FsbCh0aGlzKSx0aGlzLl9kZWxheShpKX0sX2NyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oKXt0aGlzLnVpRGlhbG9nPWUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLWRpYWxvZyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCB1aS1mcm9udCAiK3RoaXMub3B0aW9ucy5kaWFsb2dDbGFzcykuaGlkZSgpLmF0dHIoe3RhYkluZGV4Oi0xLHJvbGU6ImRpYWxvZyJ9KS5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSx0aGlzLl9vbih0aGlzLnVpRGlhbG9nLHtrZXlkb3duOmZ1bmN0aW9uKHQpe2lmKHRoaXMub3B0aW9ucy5jbG9zZU9uRXNjYXBlJiYhdC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmdC5rZXlDb2RlJiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuRVNDQVBFKXJldHVybiB0LnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZSh0KSx2b2lkIDA7aWYodC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlRBQiYmIXQuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBpPXRoaXMudWlEaWFsb2cuZmluZCgiOnRhYmJhYmxlIikscz1pLmZpbHRlcigiOmZpcnN0Iiksbj1pLmZpbHRlcigiOmxhc3QiKTt0LnRhcmdldCE9PW5bMF0mJnQudGFyZ2V0IT09dGhpcy51aURpYWxvZ1swXXx8dC5zaGlmdEtleT90LnRhcmdldCE9PXNbMF0mJnQudGFyZ2V0IT09dGhpcy51aURpYWxvZ1swXXx8IXQuc2hpZnRLZXl8fCh0aGlzLl9kZWxheShmdW5jdGlvbigpe24uZm9jdXMoKX0pLHQucHJldmVudERlZmF1bHQoKSk6KHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7cy5mb2N1cygpfSksdC5wcmV2ZW50RGVmYXVsdCgpKX19LG1vdXNlZG93bjpmdW5jdGlvbihlKXt0aGlzLl9tb3ZlVG9Ub3AoZSkmJnRoaXMuX2ZvY3VzVGFiYmFibGUoKX19KSx0aGlzLmVsZW1lbnQuZmluZCgiW2FyaWEtZGVzY3JpYmVkYnldIikubGVuZ3RofHx0aGlzLnVpRGlhbG9nLmF0dHIoeyJhcmlhLWRlc2NyaWJlZGJ5Ijp0aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hdHRyKCJpZCIpfSl9LF9jcmVhdGVUaXRsZWJhcjpmdW5jdGlvbigpe3ZhciB0O3RoaXMudWlEaWFsb2dUaXRsZWJhcj1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGViYXIgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIHVpLWhlbHBlci1jbGVhcmZpeCIpLnByZXBlbmRUbyh0aGlzLnVpRGlhbG9nKSx0aGlzLl9vbih0aGlzLnVpRGlhbG9nVGl0bGViYXIse21vdXNlZG93bjpmdW5jdGlvbih0KXtlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIil8fHRoaXMudWlEaWFsb2cuZm9jdXMoKX19KSx0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZT1lKCI8YnV0dG9uIHR5cGU9J2J1dHRvbic+PC9idXR0b24+IikuYnV0dG9uKHtsYWJlbDp0aGlzLm9wdGlvbnMuY2xvc2VUZXh0LGljb25zOntwcmltYXJ5OiJ1aS1pY29uLWNsb3NldGhpY2sifSx0ZXh0OiExfSkuYWRkQ2xhc3MoInVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2dUaXRsZWJhciksdGhpcy5fb24odGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2Use2NsaWNrOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKGUpfX0pLHQ9ZSgiPHNwYW4+IikudW5pcXVlSWQoKS5hZGRDbGFzcygidWktZGlhbG9nLXRpdGxlIikucHJlcGVuZFRvKHRoaXMudWlEaWFsb2dUaXRsZWJhciksdGhpcy5fdGl0bGUodCksdGhpcy51aURpYWxvZy5hdHRyKHsiYXJpYS1sYWJlbGxlZGJ5Ijp0LmF0dHIoImlkIil9KX0sX3RpdGxlOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucy50aXRsZXx8ZS5odG1sKCImIzE2MDsiKSxlLnRleHQodGhpcy5vcHRpb25zLnRpdGxlKQp9LF9jcmVhdGVCdXR0b25QYW5lOmZ1bmN0aW9uKCl7dGhpcy51aURpYWxvZ0J1dHRvblBhbmU9ZSgiPGRpdj4iKS5hZGRDbGFzcygidWktZGlhbG9nLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IiksdGhpcy51aUJ1dHRvblNldD1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctYnV0dG9uc2V0IikuYXBwZW5kVG8odGhpcy51aURpYWxvZ0J1dHRvblBhbmUpLHRoaXMuX2NyZWF0ZUJ1dHRvbnMoKX0sX2NyZWF0ZUJ1dHRvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9dGhpcy5vcHRpb25zLmJ1dHRvbnM7cmV0dXJuIHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLnJlbW92ZSgpLHRoaXMudWlCdXR0b25TZXQuZW1wdHkoKSxlLmlzRW1wdHlPYmplY3QoaSl8fGUuaXNBcnJheShpKSYmIWkubGVuZ3RoPyh0aGlzLnVpRGlhbG9nLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctYnV0dG9ucyIpLHZvaWQgMCk6KGUuZWFjaChpLGZ1bmN0aW9uKGkscyl7dmFyIG4sYTtzPWUuaXNGdW5jdGlvbihzKT97Y2xpY2s6cyx0ZXh0Oml9OnMscz1lLmV4dGVuZCh7dHlwZToiYnV0dG9uIn0scyksbj1zLmNsaWNrLHMuY2xpY2s9ZnVuY3Rpb24oKXtuLmFwcGx5KHQuZWxlbWVudFswXSxhcmd1bWVudHMpfSxhPXtpY29uczpzLmljb25zLHRleHQ6cy5zaG93VGV4dH0sZGVsZXRlIHMuaWNvbnMsZGVsZXRlIHMuc2hvd1RleHQsZSgiPGJ1dHRvbj48L2J1dHRvbj4iLHMpLmJ1dHRvbihhKS5hcHBlbmRUbyh0LnVpQnV0dG9uU2V0KX0pLHRoaXMudWlEaWFsb2cuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zIiksdGhpcy51aURpYWxvZ0J1dHRvblBhbmUuYXBwZW5kVG8odGhpcy51aURpYWxvZyksdm9pZCAwKX0sX21ha2VEcmFnZ2FibGU6ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3JldHVybntwb3NpdGlvbjplLnBvc2l0aW9uLG9mZnNldDplLm9mZnNldH19dmFyIGk9dGhpcyxzPXRoaXMub3B0aW9uczt0aGlzLnVpRGlhbG9nLmRyYWdnYWJsZSh7Y2FuY2VsOiIudWktZGlhbG9nLWNvbnRlbnQsIC51aS1kaWFsb2ctdGl0bGViYXItY2xvc2UiLGhhbmRsZToiLnVpLWRpYWxvZy10aXRsZWJhciIsY29udGFpbm1lbnQ6ImRvY3VtZW50IixzdGFydDpmdW5jdGlvbihzLG4pe2UodGhpcykuYWRkQ2xhc3MoInVpLWRpYWxvZy1kcmFnZ2luZyIpLGkuX2Jsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcigiZHJhZ1N0YXJ0IixzLHQobikpfSxkcmFnOmZ1bmN0aW9uKGUscyl7aS5fdHJpZ2dlcigiZHJhZyIsZSx0KHMpKX0sc3RvcDpmdW5jdGlvbihuLGEpe3ZhciBvPWEub2Zmc2V0LmxlZnQtaS5kb2N1bWVudC5zY3JvbGxMZWZ0KCkscj1hLm9mZnNldC50b3AtaS5kb2N1bWVudC5zY3JvbGxUb3AoKTtzLnBvc2l0aW9uPXtteToibGVmdCB0b3AiLGF0OiJsZWZ0Iisobz49MD8iKyI6IiIpK28rIiAiKyJ0b3AiKyhyPj0wPyIrIjoiIikrcixvZjppLndpbmRvd30sZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLWRyYWdnaW5nIiksaS5fdW5ibG9ja0ZyYW1lcygpLGkuX3RyaWdnZXIoImRyYWdTdG9wIixuLHQoYSkpfX0pfSxfbWFrZVJlc2l6YWJsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7cmV0dXJue29yaWdpbmFsUG9zaXRpb246ZS5vcmlnaW5hbFBvc2l0aW9uLG9yaWdpbmFsU2l6ZTplLm9yaWdpbmFsU2l6ZSxwb3NpdGlvbjplLnBvc2l0aW9uLHNpemU6ZS5zaXplfX12YXIgaT10aGlzLHM9dGhpcy5vcHRpb25zLG49cy5yZXNpemFibGUsYT10aGlzLnVpRGlhbG9nLmNzcygicG9zaXRpb24iKSxvPSJzdHJpbmciPT10eXBlb2Ygbj9uOiJuLGUscyx3LHNlLHN3LG5lLG53Ijt0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSh7Y2FuY2VsOiIudWktZGlhbG9nLWNvbnRlbnQiLGNvbnRhaW5tZW50OiJkb2N1bWVudCIsYWxzb1Jlc2l6ZTp0aGlzLmVsZW1lbnQsbWF4V2lkdGg6cy5tYXhXaWR0aCxtYXhIZWlnaHQ6cy5tYXhIZWlnaHQsbWluV2lkdGg6cy5taW5XaWR0aCxtaW5IZWlnaHQ6dGhpcy5fbWluSGVpZ2h0KCksaGFuZGxlczpvLHN0YXJ0OmZ1bmN0aW9uKHMsbil7ZSh0aGlzKS5hZGRDbGFzcygidWktZGlhbG9nLXJlc2l6aW5nIiksaS5fYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKCJyZXNpemVTdGFydCIscyx0KG4pKX0scmVzaXplOmZ1bmN0aW9uKGUscyl7aS5fdHJpZ2dlcigicmVzaXplIixlLHQocykpfSxzdG9wOmZ1bmN0aW9uKG4sYSl7dmFyIG89aS51aURpYWxvZy5vZmZzZXQoKSxyPW8ubGVmdC1pLmRvY3VtZW50LnNjcm9sbExlZnQoKSxoPW8udG9wLWkuZG9jdW1lbnQuc2Nyb2xsVG9wKCk7cy5oZWlnaHQ9aS51aURpYWxvZy5oZWlnaHQoKSxzLndpZHRoPWkudWlEaWFsb2cud2lkdGgoKSxzLnBvc2l0aW9uPXtteToibGVmdCB0b3AiLGF0OiJsZWZ0Iisocj49MD8iKyI6IiIpK3IrIiAiKyJ0b3AiKyhoPj0wPyIrIjoiIikraCxvZjppLndpbmRvd30sZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLXJlc2l6aW5nIiksaS5fdW5ibG9ja0ZyYW1lcygpLGkuX3RyaWdnZXIoInJlc2l6ZVN0b3AiLG4sdChhKSl9fSkuY3NzKCJwb3NpdGlvbiIsYSl9LF90cmFja0ZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fb24odGhpcy53aWRnZXQoKSx7Zm9jdXNpbjpmdW5jdGlvbih0KXt0aGlzLl9tYWtlRm9jdXNUYXJnZXQoKSx0aGlzLl9mb2N1c2VkRWxlbWVudD1lKHQudGFyZ2V0KX19KX0sX21ha2VGb2N1c1RhcmdldDpmdW5jdGlvbigpe3RoaXMuX3VudHJhY2tJbnN0YW5jZSgpLHRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCkudW5zaGlmdCh0aGlzKX0sX3VudHJhY2tJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCksaT1lLmluQXJyYXkodGhpcyx0KTstMSE9PWkmJnQuc3BsaWNlKGksMSl9LF90cmFja2luZ0luc3RhbmNlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZG9jdW1lbnQuZGF0YSgidWktZGlhbG9nLWluc3RhbmNlcyIpO3JldHVybiBlfHwoZT1bXSx0aGlzLmRvY3VtZW50LmRhdGEoInVpLWRpYWxvZy1pbnN0YW5jZXMiLGUpKSxlfSxfbWluSGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiJhdXRvIj09PWUuaGVpZ2h0P2UubWluSGVpZ2h0Ok1hdGgubWluKGUubWluSGVpZ2h0LGUuaGVpZ2h0KX0sX3Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy51aURpYWxvZy5pcygiOnZpc2libGUiKTtlfHx0aGlzLnVpRGlhbG9nLnNob3coKSx0aGlzLnVpRGlhbG9nLnBvc2l0aW9uKHRoaXMub3B0aW9ucy5wb3NpdGlvbiksZXx8dGhpcy51aURpYWxvZy5oaWRlKCl9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMscz0hMSxuPXt9O2UuZWFjaCh0LGZ1bmN0aW9uKGUsdCl7aS5fc2V0T3B0aW9uKGUsdCksZSBpbiBpLnNpemVSZWxhdGVkT3B0aW9ucyYmKHM9ITApLGUgaW4gaS5yZXNpemFibGVSZWxhdGVkT3B0aW9ucyYmKG5bZV09dCl9KSxzJiYodGhpcy5fc2l6ZSgpLHRoaXMuX3Bvc2l0aW9uKCkpLHRoaXMudWlEaWFsb2cuaXMoIjpkYXRhKHVpLXJlc2l6YWJsZSkiKSYmdGhpcy51aURpYWxvZy5yZXNpemFibGUoIm9wdGlvbiIsbil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt2YXIgaSxzLG49dGhpcy51aURpYWxvZzsiZGlhbG9nQ2xhc3MiPT09ZSYmbi5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZGlhbG9nQ2xhc3MpLmFkZENsYXNzKHQpLCJkaXNhYmxlZCIhPT1lJiYodGhpcy5fc3VwZXIoZSx0KSwiYXBwZW5kVG8iPT09ZSYmdGhpcy51aURpYWxvZy5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSwiYnV0dG9ucyI9PT1lJiZ0aGlzLl9jcmVhdGVCdXR0b25zKCksImNsb3NlVGV4dCI9PT1lJiZ0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZS5idXR0b24oe2xhYmVsOiIiK3R9KSwiZHJhZ2dhYmxlIj09PWUmJihpPW4uaXMoIjpkYXRhKHVpLWRyYWdnYWJsZSkiKSxpJiYhdCYmbi5kcmFnZ2FibGUoImRlc3Ryb3kiKSwhaSYmdCYmdGhpcy5fbWFrZURyYWdnYWJsZSgpKSwicG9zaXRpb24iPT09ZSYmdGhpcy5fcG9zaXRpb24oKSwicmVzaXphYmxlIj09PWUmJihzPW4uaXMoIjpkYXRhKHVpLXJlc2l6YWJsZSkiKSxzJiYhdCYmbi5yZXNpemFibGUoImRlc3Ryb3kiKSxzJiYic3RyaW5nIj09dHlwZW9mIHQmJm4ucmVzaXphYmxlKCJvcHRpb24iLCJoYW5kbGVzIix0KSxzfHx0PT09ITF8fHRoaXMuX21ha2VSZXNpemFibGUoKSksInRpdGxlIj09PWUmJnRoaXMuX3RpdGxlKHRoaXMudWlEaWFsb2dUaXRsZWJhci5maW5kKCIudWktZGlhbG9nLXRpdGxlIikpKX0sX3NpemU6ZnVuY3Rpb24oKXt2YXIgZSx0LGkscz10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50LnNob3coKS5jc3Moe3dpZHRoOiJhdXRvIixtaW5IZWlnaHQ6MCxtYXhIZWlnaHQ6Im5vbmUiLGhlaWdodDowfSkscy5taW5XaWR0aD5zLndpZHRoJiYocy53aWR0aD1zLm1pbldpZHRoKSxlPXRoaXMudWlEaWFsb2cuY3NzKHtoZWlnaHQ6ImF1dG8iLHdpZHRoOnMud2lkdGh9KS5vdXRlckhlaWdodCgpLHQ9TWF0aC5tYXgoMCxzLm1pbkhlaWdodC1lKSxpPSJudW1iZXIiPT10eXBlb2Ygcy5tYXhIZWlnaHQ/TWF0aC5tYXgoMCxzLm1heEhlaWdodC1lKToibm9uZSIsImF1dG8iPT09cy5oZWlnaHQ/dGhpcy5lbGVtZW50LmNzcyh7bWluSGVpZ2h0OnQsbWF4SGVpZ2h0OmksaGVpZ2h0OiJhdXRvIn0pOnRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgoMCxzLmhlaWdodC1lKSksdGhpcy51aURpYWxvZy5pcygiOmRhdGEodWktcmVzaXphYmxlKSIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgib3B0aW9uIiwibWluSGVpZ2h0Iix0aGlzLl9taW5IZWlnaHQoKSl9LF9ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzPXRoaXMuZG9jdW1lbnQuZmluZCgiaWZyYW1lIikubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gZSgiPGRpdj4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsd2lkdGg6dC5vdXRlcldpZHRoKCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoKX0pLmFwcGVuZFRvKHQucGFyZW50KCkpLm9mZnNldCh0Lm9mZnNldCgpKVswXX0pfSxfdW5ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzJiYodGhpcy5pZnJhbWVCbG9ja3MucmVtb3ZlKCksZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzKX0sX2FsbG93SW50ZXJhY3Rpb246ZnVuY3Rpb24odCl7cmV0dXJuIGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1kaWFsb2ciKS5sZW5ndGg/ITA6ISFlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktZGF0ZXBpY2tlciIpLmxlbmd0aH0sX2NyZWF0ZU92ZXJsYXk6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMubW9kYWwpe3ZhciB0PSEwO3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dD0hMX0pLHRoaXMuZG9jdW1lbnQuZGF0YSgidWktZGlhbG9nLW92ZXJsYXlzIil8fHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse2ZvY3VzaW46ZnVuY3Rpb24oZSl7dHx8dGhpcy5fYWxsb3dJbnRlcmFjdGlvbihlKXx8KGUucHJldmVudERlZmF1bHQoKSx0aGlzLl90cmFja2luZ0luc3RhbmNlcygpWzBdLl9mb2N1c1RhYmJhYmxlKCkpfX0pLHRoaXMub3ZlcmxheT1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS13aWRnZXQtb3ZlcmxheSB1aS1mcm9udCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMuX29uKHRoaXMub3ZlcmxheSx7bW91c2Vkb3duOiJfa2VlcEZvY3VzIn0pLHRoaXMuZG9jdW1lbnQuZGF0YSgidWktZGlhbG9nLW92ZXJsYXlzIiwodGhpcy5kb2N1bWVudC5kYXRhKCJ1aS1kaWFsb2ctb3ZlcmxheXMiKXx8MCkrMSl9fSxfZGVzdHJveU92ZXJsYXk6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMubW9kYWwmJnRoaXMub3ZlcmxheSl7dmFyIGU9dGhpcy5kb2N1bWVudC5kYXRhKCJ1aS1kaWFsb2ctb3ZlcmxheXMiKS0xO2U/dGhpcy5kb2N1bWVudC5kYXRhKCJ1aS1kaWFsb2ctb3ZlcmxheXMiLGUpOnRoaXMuZG9jdW1lbnQudW5iaW5kKCJmb2N1c2luIikucmVtb3ZlRGF0YSgidWktZGlhbG9nLW92ZXJsYXlzIiksdGhpcy5vdmVybGF5LnJlbW92ZSgpLHRoaXMub3ZlcmxheT1udWxsfX19KSxlLndpZGdldCgidWkucHJvZ3Jlc3NiYXIiLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e21heDoxMDAsdmFsdWU6MCxjaGFuZ2U6bnVsbCxjb21wbGV0ZTpudWxsfSxtaW46MCxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5vbGRWYWx1ZT10aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fY29uc3RyYWluZWRWYWx1ZSgpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktcHJvZ3Jlc3NiYXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5hdHRyKHtyb2xlOiJwcm9ncmVzc2JhciIsImFyaWEtdmFsdWVtaW4iOnRoaXMubWlufSksdGhpcy52YWx1ZURpdj1lKCI8ZGl2IGNsYXNzPSd1aS1wcm9ncmVzc2Jhci12YWx1ZSB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1sZWZ0Jz48L2Rpdj4iKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktcHJvZ3Jlc3NiYXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1pbiIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtYXgiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbm93IiksdGhpcy52YWx1ZURpdi5yZW1vdmUoKX0sdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/dGhpcy5vcHRpb25zLnZhbHVlOih0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fY29uc3RyYWluZWRWYWx1ZShlKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx2b2lkIDApfSxfY29uc3RyYWluZWRWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dGhpcy5vcHRpb25zLnZhbHVlKSx0aGlzLmluZGV0ZXJtaW5hdGU9ZT09PSExLCJudW1iZXIiIT10eXBlb2YgZSYmKGU9MCksdGhpcy5pbmRldGVybWluYXRlPyExOk1hdGgubWluKHRoaXMub3B0aW9ucy5tYXgsTWF0aC5tYXgodGhpcy5taW4sZSkpfSxfc2V0T3B0aW9uczpmdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlO2RlbGV0ZSBlLnZhbHVlLHRoaXMuX3N1cGVyKGUpLHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl9jb25zdHJhaW5lZFZhbHVlKHQpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7Im1heCI9PT1lJiYodD1NYXRoLm1heCh0aGlzLm1pbix0KSksImRpc2FibGVkIj09PWUmJnRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCkuYXR0cigiYXJpYS1kaXNhYmxlZCIsdCksdGhpcy5fc3VwZXIoZSx0KX0sX3BlcmNlbnRhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRldGVybWluYXRlPzEwMDoxMDAqKHRoaXMub3B0aW9ucy52YWx1ZS10aGlzLm1pbikvKHRoaXMub3B0aW9ucy5tYXgtdGhpcy5taW4pfSxfcmVmcmVzaFZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnZhbHVlLGk9dGhpcy5fcGVyY2VudGFnZSgpO3RoaXMudmFsdWVEaXYudG9nZ2xlKHRoaXMuaW5kZXRlcm1pbmF0ZXx8dD50aGlzLm1pbikudG9nZ2xlQ2xhc3MoInVpLWNvcm5lci1yaWdodCIsdD09PXRoaXMub3B0aW9ucy5tYXgpLndpZHRoKGkudG9GaXhlZCgwKSsiJSIpLHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktcHJvZ3Jlc3NiYXItaW5kZXRlcm1pbmF0ZSIsdGhpcy5pbmRldGVybWluYXRlKSx0aGlzLmluZGV0ZXJtaW5hdGU/KHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbm93IiksdGhpcy5vdmVybGF5RGl2fHwodGhpcy5vdmVybGF5RGl2PWUoIjxkaXYgY2xhc3M9J3VpLXByb2dyZXNzYmFyLW92ZXJsYXknPjwvZGl2PiIpLmFwcGVuZFRvKHRoaXMudmFsdWVEaXYpKSk6KHRoaXMuZWxlbWVudC5hdHRyKHsiYXJpYS12YWx1ZW1heCI6dGhpcy5vcHRpb25zLm1heCwiYXJpYS12YWx1ZW5vdyI6dH0pLHRoaXMub3ZlcmxheURpdiYmKHRoaXMub3ZlcmxheURpdi5yZW1vdmUoKSx0aGlzLm92ZXJsYXlEaXY9bnVsbCkpLHRoaXMub2xkVmFsdWUhPT10JiYodGhpcy5vbGRWYWx1ZT10LHRoaXMuX3RyaWdnZXIoImNoYW5nZSIpKSx0PT09dGhpcy5vcHRpb25zLm1heCYmdGhpcy5fdHJpZ2dlcigiY29tcGxldGUiKX19KSxlLndpZGdldCgidWkuc2VsZWN0bWVudSIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6IjxzZWxlY3Q+IixvcHRpb25zOnthcHBlbmRUbzpudWxsLGRpc2FibGVkOm51bGwsaWNvbnM6e2J1dHRvbjoidWktaWNvbi10cmlhbmdsZS0xLXMifSxwb3NpdGlvbjp7bXk6ImxlZnQgdG9wIixhdDoibGVmdCBib3R0b20iLGNvbGxpc2lvbjoibm9uZSJ9LHdpZHRoOm51bGwsY2hhbmdlOm51bGwsY2xvc2U6bnVsbCxmb2N1czpudWxsLG9wZW46bnVsbCxzZWxlY3Q6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmF0dHIoImlkIik7dGhpcy5pZHM9e2VsZW1lbnQ6ZSxidXR0b246ZSsiLWJ1dHRvbiIsbWVudTplKyItbWVudSJ9LHRoaXMuX2RyYXdCdXR0b24oKSx0aGlzLl9kcmF3TWVudSgpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5kaXNhYmxlKCl9LF9kcmF3QnV0dG9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmxhYmVsPWUoImxhYmVsW2Zvcj0nIit0aGlzLmlkcy5lbGVtZW50KyInXSIpLmF0dHIoImZvciIsdGhpcy5pZHMuYnV0dG9uKSx0aGlzLl9vbih0aGlzLmxhYmVsLHtjbGljazpmdW5jdGlvbihlKXt0aGlzLmJ1dHRvbi5mb2N1cygpLGUucHJldmVudERlZmF1bHQoKX19KSx0aGlzLmVsZW1lbnQuaGlkZSgpLHRoaXMuYnV0dG9uPWUoIjxzcGFuPiIseyJjbGFzcyI6InVpLXNlbGVjdG1lbnUtYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiLHRhYmluZGV4OnRoaXMub3B0aW9ucy5kaXNhYmxlZD8tMTowLGlkOnRoaXMuaWRzLmJ1dHRvbixyb2xlOiJjb21ib2JveCIsImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsImFyaWEtYXV0b2NvbXBsZXRlIjoibGlzdCIsImFyaWEtb3ducyI6dGhpcy5pZHMubWVudSwiYXJpYS1oYXNwb3B1cCI6InRydWUifSkuaW5zZXJ0QWZ0ZXIodGhpcy5lbGVtZW50KSxlKCI8c3Bhbj4iLHsiY2xhc3MiOiJ1aS1pY29uICIrdGhpcy5vcHRpb25zLmljb25zLmJ1dHRvbn0pLnByZXBlbmRUbyh0aGlzLmJ1dHRvbiksdGhpcy5idXR0b25UZXh0PWUoIjxzcGFuPiIseyJjbGFzcyI6InVpLXNlbGVjdG1lbnUtdGV4dCJ9KS5hcHBlbmRUbyh0aGlzLmJ1dHRvbiksdGhpcy5fc2V0VGV4dCh0aGlzLmJ1dHRvblRleHQsdGhpcy5lbGVtZW50LmZpbmQoIm9wdGlvbjpzZWxlY3RlZCIpLnRleHQoKSksdGhpcy5fcmVzaXplQnV0dG9uKCksdGhpcy5fb24odGhpcy5idXR0b24sdGhpcy5fYnV0dG9uRXZlbnRzKSx0aGlzLmJ1dHRvbi5vbmUoImZvY3VzaW4iLGZ1bmN0aW9uKCl7dC5tZW51SXRlbXN8fHQuX3JlZnJlc2hNZW51KCl9KSx0aGlzLl9ob3ZlcmFibGUodGhpcy5idXR0b24pLHRoaXMuX2ZvY3VzYWJsZSh0aGlzLmJ1dHRvbil9LF9kcmF3TWVudTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5tZW51PWUoIjx1bD4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIiwiYXJpYS1sYWJlbGxlZGJ5Ijp0aGlzLmlkcy5idXR0b24saWQ6dGhpcy5pZHMubWVudX0pLHRoaXMubWVudVdyYXA9ZSgiPGRpdj4iLHsiY2xhc3MiOiJ1aS1zZWxlY3RtZW51LW1lbnUgdWktZnJvbnQifSkuYXBwZW5kKHRoaXMubWVudSkuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksdGhpcy5tZW51SW5zdGFuY2U9dGhpcy5tZW51Lm1lbnUoe3JvbGU6Imxpc3Rib3giLHNlbGVjdDpmdW5jdGlvbihlLGkpe2UucHJldmVudERlZmF1bHQoKSx0Ll9zZXRTZWxlY3Rpb24oKSx0Ll9zZWxlY3QoaS5pdGVtLmRhdGEoInVpLXNlbGVjdG1lbnUtaXRlbSIpLGUpfSxmb2N1czpmdW5jdGlvbihlLGkpe3ZhciBzPWkuaXRlbS5kYXRhKCJ1aS1zZWxlY3RtZW51LWl0ZW0iKTtudWxsIT10LmZvY3VzSW5kZXgmJnMuaW5kZXghPT10LmZvY3VzSW5kZXgmJih0Ll90cmlnZ2VyKCJmb2N1cyIsZSx7aXRlbTpzfSksdC5pc09wZW58fHQuX3NlbGVjdChzLGUpKSx0LmZvY3VzSW5kZXg9cy5pbmRleCx0LmJ1dHRvbi5hdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLHQubWVudUl0ZW1zLmVxKHMuaW5kZXgpLmF0dHIoImlkIikpfX0pLm1lbnUoImluc3RhbmNlIiksdGhpcy5tZW51LmFkZENsYXNzKCJ1aS1jb3JuZXItYm90dG9tIikucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwiKSx0aGlzLm1lbnVJbnN0YW5jZS5fb2ZmKHRoaXMubWVudSwibW91c2VsZWF2ZSIpLHRoaXMubWVudUluc3RhbmNlLl9jbG9zZU9uRG9jdW1lbnRDbGljaz1mdW5jdGlvbigpe3JldHVybiExfSx0aGlzLm1lbnVJbnN0YW5jZS5faXNEaXZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuITF9fSxyZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fcmVmcmVzaE1lbnUoKSx0aGlzLl9zZXRUZXh0KHRoaXMuYnV0dG9uVGV4dCx0aGlzLl9nZXRTZWxlY3RlZEl0ZW0oKS50ZXh0KCkpLHRoaXMub3B0aW9ucy53aWR0aHx8dGhpcy5fcmVzaXplQnV0dG9uKCl9LF9yZWZyZXNoTWVudTpmdW5jdGlvbigpe3RoaXMubWVudS5lbXB0eSgpO3ZhciBlLHQ9dGhpcy5lbGVtZW50LmZpbmQoIm9wdGlvbiIpO3QubGVuZ3RoJiYodGhpcy5fcGFyc2VPcHRpb25zKHQpLHRoaXMuX3JlbmRlck1lbnUodGhpcy5tZW51LHRoaXMuaXRlbXMpLHRoaXMubWVudUluc3RhbmNlLnJlZnJlc2goKSx0aGlzLm1lbnVJdGVtcz10aGlzLm1lbnUuZmluZCgibGkiKS5ub3QoIi51aS1zZWxlY3RtZW51LW9wdGdyb3VwIiksZT10aGlzLl9nZXRTZWxlY3RlZEl0ZW0oKSx0aGlzLm1lbnVJbnN0YW5jZS5mb2N1cyhudWxsLGUpLHRoaXMuX3NldEFyaWEoZS5kYXRhKCJ1aS1zZWxlY3RtZW51LWl0ZW0iKSksdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIikpKX0sb3BlbjpmdW5jdGlvbihlKXt0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fCh0aGlzLm1lbnVJdGVtcz8odGhpcy5tZW51LmZpbmQoIi51aS1zdGF0ZS1mb2N1cyIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLHRoaXMubWVudUluc3RhbmNlLmZvY3VzKG51bGwsdGhpcy5fZ2V0U2VsZWN0ZWRJdGVtKCkpKTp0aGlzLl9yZWZyZXNoTWVudSgpLHRoaXMuaXNPcGVuPSEwLHRoaXMuX3RvZ2dsZUF0dHIoKSx0aGlzLl9yZXNpemVNZW51KCksdGhpcy5fcG9zaXRpb24oKSx0aGlzLl9vbih0aGlzLmRvY3VtZW50LHRoaXMuX2RvY3VtZW50Q2xpY2spLHRoaXMuX3RyaWdnZXIoIm9wZW4iLGUpKX0sX3Bvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5tZW51V3JhcC5wb3NpdGlvbihlLmV4dGVuZCh7b2Y6dGhpcy5idXR0b259LHRoaXMub3B0aW9ucy5wb3NpdGlvbikpfSxjbG9zZTpmdW5jdGlvbihlKXt0aGlzLmlzT3BlbiYmKHRoaXMuaXNPcGVuPSExLHRoaXMuX3RvZ2dsZUF0dHIoKSx0aGlzLnJhbmdlPW51bGwsdGhpcy5fb2ZmKHRoaXMuZG9jdW1lbnQpLHRoaXMuX3RyaWdnZXIoImNsb3NlIixlKSl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1dHRvbn0sbWVudVdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnV9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKHQsaSl7dmFyIHM9dGhpcyxuPSIiO2UuZWFjaChpLGZ1bmN0aW9uKGksYSl7YS5vcHRncm91cCE9PW4mJihlKCI8bGk+Iix7ImNsYXNzIjoidWktc2VsZWN0bWVudS1vcHRncm91cCB1aS1tZW51LWRpdmlkZXIiKyhhLmVsZW1lbnQucGFyZW50KCJvcHRncm91cCIpLnByb3AoImRpc2FibGVkIik/IiB1aS1zdGF0ZS1kaXNhYmxlZCI6IiIpLHRleHQ6YS5vcHRncm91cH0pLmFwcGVuZFRvKHQpLG49YS5vcHRncm91cCkscy5fcmVuZGVySXRlbURhdGEodCxhKX0pfSxfcmVuZGVySXRlbURhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcmVuZGVySXRlbShlLHQpLmRhdGEoInVpLXNlbGVjdG1lbnUtaXRlbSIsdCl9LF9yZW5kZXJJdGVtOmZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSgiPGxpPiIpO3JldHVybiBpLmRpc2FibGVkJiZzLmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLHRoaXMuX3NldFRleHQocyxpLmxhYmVsKSxzLmFwcGVuZFRvKHQpfSxfc2V0VGV4dDpmdW5jdGlvbihlLHQpe3Q/ZS50ZXh0KHQpOmUuaHRtbCgiJiMxNjA7Iil9LF9tb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIGkscyxuPSIudWktbWVudS1pdGVtIjt0aGlzLmlzT3Blbj9pPXRoaXMubWVudUl0ZW1zLmVxKHRoaXMuZm9jdXNJbmRleCk6KGk9dGhpcy5tZW51SXRlbXMuZXEodGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXgpLG4rPSI6bm90KC51aS1zdGF0ZS1kaXNhYmxlZCkiKSxzPSJmaXJzdCI9PT1lfHwibGFzdCI9PT1lP2lbImZpcnN0Ij09PWU/InByZXZBbGwiOiJuZXh0QWxsIl0obikuZXEoLTEpOmlbZSsiQWxsIl0obikuZXEoMCkscy5sZW5ndGgmJnRoaXMubWVudUluc3RhbmNlLmZvY3VzKHQscyl9LF9nZXRTZWxlY3RlZEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51SXRlbXMuZXEodGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXgpfSxfdG9nZ2xlOmZ1bmN0aW9uKGUpe3RoaXNbdGhpcy5pc09wZW4/ImNsb3NlIjoib3BlbiJdKGUpfSxfc2V0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU7dGhpcy5yYW5nZSYmKHdpbmRvdy5nZXRTZWxlY3Rpb24/KGU9d2luZG93LmdldFNlbGVjdGlvbigpLGUucmVtb3ZlQWxsUmFuZ2VzKCksZS5hZGRSYW5nZSh0aGlzLnJhbmdlKSk6dGhpcy5yYW5nZS5zZWxlY3QoKSx0aGlzLmJ1dHRvbi5mb2N1cygpKX0sX2RvY3VtZW50Q2xpY2s6e21vdXNlZG93bjpmdW5jdGlvbih0KXt0aGlzLmlzT3BlbiYmKGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1zZWxlY3RtZW51LW1lbnUsICMiK3RoaXMuaWRzLmJ1dHRvbikubGVuZ3RofHx0aGlzLmNsb3NlKHQpKX19LF9idXR0b25FdmVudHM6e21vdXNlZG93bjpmdW5jdGlvbigpe3ZhciBlO3dpbmRvdy5nZXRTZWxlY3Rpb24/KGU9d2luZG93LmdldFNlbGVjdGlvbigpLGUucmFuZ2VDb3VudCYmKHRoaXMucmFuZ2U9ZS5nZXRSYW5nZUF0KDApKSk6dGhpcy5yYW5nZT1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKX0sY2xpY2s6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0aW9uKCksdGhpcy5fdG9nZ2xlKGUpfSxrZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBpPSEwO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLlRBQjpjYXNlIGUudWkua2V5Q29kZS5FU0NBUEU6dGhpcy5jbG9zZSh0KSxpPSExO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkVOVEVSOnRoaXMuaXNPcGVuJiZ0aGlzLl9zZWxlY3RGb2N1c2VkSXRlbSh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDp0LmFsdEtleT90aGlzLl90b2dnbGUodCk6dGhpcy5fbW92ZSgicHJldiIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRE9XTjp0LmFsdEtleT90aGlzLl90b2dnbGUodCk6dGhpcy5fbW92ZSgibmV4dCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5pc09wZW4/dGhpcy5fc2VsZWN0Rm9jdXNlZEl0ZW0odCk6dGhpcy5fdG9nZ2xlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkxFRlQ6dGhpcy5fbW92ZSgicHJldiIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUklHSFQ6dGhpcy5fbW92ZSgibmV4dCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuSE9NRTpjYXNlIGUudWkua2V5Q29kZS5QQUdFX1VQOnRoaXMuX21vdmUoImZpcnN0Iix0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTkQ6Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOnRoaXMuX21vdmUoImxhc3QiLHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5tZW51LnRyaWdnZXIodCksaT0hMX1pJiZ0LnByZXZlbnREZWZhdWx0KCl9fSxfc2VsZWN0Rm9jdXNlZEl0ZW06ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tZW51SXRlbXMuZXEodGhpcy5mb2N1c0luZGV4KTt0Lmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpfHx0aGlzLl9zZWxlY3QodC5kYXRhKCJ1aS1zZWxlY3RtZW51LWl0ZW0iKSxlKX0sX3NlbGVjdDpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4O3RoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4PWUuaW5kZXgsdGhpcy5fc2V0VGV4dCh0aGlzLmJ1dHRvblRleHQsZS5sYWJlbCksdGhpcy5fc2V0QXJpYShlKSx0aGlzLl90cmlnZ2VyKCJzZWxlY3QiLHQse2l0ZW06ZX0pLGUuaW5kZXghPT1pJiZ0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLHQse2l0ZW06ZX0pLHRoaXMuY2xvc2UodCl9LF9zZXRBcmlhOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubWVudUl0ZW1zLmVxKGUuaW5kZXgpLmF0dHIoImlkIik7dGhpcy5idXR0b24uYXR0cih7ImFyaWEtbGFiZWxsZWRieSI6dCwiYXJpYS1hY3RpdmVkZXNjZW5kYW50Ijp0fSksdGhpcy5tZW51LmF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsdCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXsiaWNvbnMiPT09ZSYmdGhpcy5idXR0b24uZmluZCgic3Bhbi51aS1pY29uIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb25zLmJ1dHRvbikuYWRkQ2xhc3ModC5idXR0b24pLHRoaXMuX3N1cGVyKGUsdCksImFwcGVuZFRvIj09PWUmJnRoaXMubWVudVdyYXAuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksImRpc2FibGVkIj09PWUmJih0aGlzLm1lbnVJbnN0YW5jZS5vcHRpb24oImRpc2FibGVkIix0KSx0aGlzLmJ1dHRvbi50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLHQpLmF0dHIoImFyaWEtZGlzYWJsZWQiLHQpLHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsdCksdD8odGhpcy5idXR0b24uYXR0cigidGFiaW5kZXgiLC0xKSx0aGlzLmNsb3NlKCkpOnRoaXMuYnV0dG9uLmF0dHIoInRhYmluZGV4IiwwKSksIndpZHRoIj09PWUmJnRoaXMuX3Jlc2l6ZUJ1dHRvbigpfSxfYXBwZW5kVG86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuYXBwZW5kVG87cmV0dXJuIHQmJih0PXQuanF1ZXJ5fHx0Lm5vZGVUeXBlP2UodCk6dGhpcy5kb2N1bWVudC5maW5kKHQpLmVxKDApKSx0JiZ0WzBdfHwodD10aGlzLmVsZW1lbnQuY2xvc2VzdCgiLnVpLWZyb250IikpLHQubGVuZ3RofHwodD10aGlzLmRvY3VtZW50WzBdLmJvZHkpLHR9LF90b2dnbGVBdHRyOmZ1bmN0aW9uKCl7dGhpcy5idXR0b24udG9nZ2xlQ2xhc3MoInVpLWNvcm5lci10b3AiLHRoaXMuaXNPcGVuKS50b2dnbGVDbGFzcygidWktY29ybmVyLWFsbCIsIXRoaXMuaXNPcGVuKS5hdHRyKCJhcmlhLWV4cGFuZGVkIix0aGlzLmlzT3BlbiksdGhpcy5tZW51V3JhcC50b2dnbGVDbGFzcygidWktc2VsZWN0bWVudS1vcGVuIix0aGlzLmlzT3BlbiksdGhpcy5tZW51LmF0dHIoImFyaWEtaGlkZGVuIiwhdGhpcy5pc09wZW4pfSxfcmVzaXplQnV0dG9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLndpZHRoO2V8fChlPXRoaXMuZWxlbWVudC5zaG93KCkub3V0ZXJXaWR0aCgpLHRoaXMuZWxlbWVudC5oaWRlKCkpLHRoaXMuYnV0dG9uLm91dGVyV2lkdGgoZSl9LF9yZXNpemVNZW51OmZ1bmN0aW9uKCl7dGhpcy5tZW51Lm91dGVyV2lkdGgoTWF0aC5tYXgodGhpcy5idXR0b24ub3V0ZXJXaWR0aCgpLHRoaXMubWVudS53aWR0aCgiIikub3V0ZXJXaWR0aCgpKzEpKX0sX2dldENyZWF0ZU9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm57ZGlzYWJsZWQ6dGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIil9fSxfcGFyc2VPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBpPVtdO3QuZWFjaChmdW5jdGlvbih0LHMpe3ZhciBuPWUocyksYT1uLnBhcmVudCgib3B0Z3JvdXAiKTtpLnB1c2goe2VsZW1lbnQ6bixpbmRleDp0LHZhbHVlOm4udmFsKCksbGFiZWw6bi50ZXh0KCksb3B0Z3JvdXA6YS5hdHRyKCJsYWJlbCIpfHwiIixkaXNhYmxlZDphLnByb3AoImRpc2FibGVkIil8fG4ucHJvcCgiZGlzYWJsZWQiKX0pfSksdGhpcy5pdGVtcz1pfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMubWVudVdyYXAucmVtb3ZlKCksdGhpcy5idXR0b24ucmVtb3ZlKCksdGhpcy5lbGVtZW50LnNob3coKSx0aGlzLmVsZW1lbnQucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLmxhYmVsLmF0dHIoImZvciIsdGhpcy5pZHMuZWxlbWVudCl9fSksZS53aWRnZXQoInVpLnNsaWRlciIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMS40Iix3aWRnZXRFdmVudFByZWZpeDoic2xpZGUiLG9wdGlvbnM6e2FuaW1hdGU6ITEsZGlzdGFuY2U6MCxtYXg6MTAwLG1pbjowLG9yaWVudGF0aW9uOiJob3Jpem9udGFsIixyYW5nZTohMSxzdGVwOjEsdmFsdWU6MCx2YWx1ZXM6bnVsbCxjaGFuZ2U6bnVsbCxzbGlkZTpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxudW1QYWdlczo1LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX21vdXNlU2xpZGluZz0hMSx0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLl9jYWxjdWxhdGVOZXdNYXgoKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNsaWRlciB1aS1zbGlkZXItIit0aGlzLm9yaWVudGF0aW9uKyIgdWktd2lkZ2V0IisiIHVpLXdpZGdldC1jb250ZW50IisiIHVpLWNvcm5lci1hbGwiKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9hbmltYXRlT2ZmPSExfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuX2NyZWF0ZVJhbmdlKCksdGhpcy5fY3JlYXRlSGFuZGxlcygpLHRoaXMuX3NldHVwRXZlbnRzKCksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9jcmVhdGVIYW5kbGVzOmZ1bmN0aW9uKCl7dmFyIHQsaSxzPXRoaXMub3B0aW9ucyxuPXRoaXMuZWxlbWVudC5maW5kKCIudWktc2xpZGVyLWhhbmRsZSIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKSxhPSI8c3BhbiBjbGFzcz0ndWktc2xpZGVyLWhhbmRsZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwnIHRhYmluZGV4PScwJz48L3NwYW4+IixvPVtdO2ZvcihpPXMudmFsdWVzJiZzLnZhbHVlcy5sZW5ndGh8fDEsbi5sZW5ndGg+aSYmKG4uc2xpY2UoaSkucmVtb3ZlKCksbj1uLnNsaWNlKDAsaSkpLHQ9bi5sZW5ndGg7aT50O3QrKylvLnB1c2goYSk7dGhpcy5oYW5kbGVzPW4uYWRkKGUoby5qb2luKCIiKSkuYXBwZW5kVG8odGhpcy5lbGVtZW50KSksdGhpcy5oYW5kbGU9dGhpcy5oYW5kbGVzLmVxKDApLHRoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKHQpe2UodGhpcykuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIsdCl9KX0sX2NyZWF0ZVJhbmdlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGk9IiI7dC5yYW5nZT8odC5yYW5nZT09PSEwJiYodC52YWx1ZXM/dC52YWx1ZXMubGVuZ3RoJiYyIT09dC52YWx1ZXMubGVuZ3RoP3QudmFsdWVzPVt0LnZhbHVlc1swXSx0LnZhbHVlc1swXV06ZS5pc0FycmF5KHQudmFsdWVzKSYmKHQudmFsdWVzPXQudmFsdWVzLnNsaWNlKDApKTp0LnZhbHVlcz1bdGhpcy5fdmFsdWVNaW4oKSx0aGlzLl92YWx1ZU1pbigpXSksdGhpcy5yYW5nZSYmdGhpcy5yYW5nZS5sZW5ndGg/dGhpcy5yYW5nZS5yZW1vdmVDbGFzcygidWktc2xpZGVyLXJhbmdlLW1pbiB1aS1zbGlkZXItcmFuZ2UtbWF4IikuY3NzKHtsZWZ0OiIiLGJvdHRvbToiIn0pOih0aGlzLnJhbmdlPWUoIjxkaXY+PC9kaXY+IikuYXBwZW5kVG8odGhpcy5lbGVtZW50KSxpPSJ1aS1zbGlkZXItcmFuZ2UgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIiksdGhpcy5yYW5nZS5hZGRDbGFzcyhpKygibWluIj09PXQucmFuZ2V8fCJtYXgiPT09dC5yYW5nZT8iIHVpLXNsaWRlci1yYW5nZS0iK3QucmFuZ2U6IiIpKSk6KHRoaXMucmFuZ2UmJnRoaXMucmFuZ2UucmVtb3ZlKCksdGhpcy5yYW5nZT1udWxsKX0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy5fb2ZmKHRoaXMuaGFuZGxlcyksdGhpcy5fb24odGhpcy5oYW5kbGVzLHRoaXMuX2hhbmRsZUV2ZW50cyksdGhpcy5faG92ZXJhYmxlKHRoaXMuaGFuZGxlcyksdGhpcy5fZm9jdXNhYmxlKHRoaXMuaGFuZGxlcyl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVzLnJlbW92ZSgpLHRoaXMucmFuZ2UmJnRoaXMucmFuZ2UucmVtb3ZlKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zbGlkZXIgdWktc2xpZGVyLWhvcml6b250YWwgdWktc2xpZGVyLXZlcnRpY2FsIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24odCl7dmFyIGkscyxuLGEsbyxyLGgsbCx1PXRoaXMsZD10aGlzLm9wdGlvbnM7cmV0dXJuIGQuZGlzYWJsZWQ/ITE6KHRoaXMuZWxlbWVudFNpemU9e3dpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpfSx0aGlzLmVsZW1lbnRPZmZzZXQ9dGhpcy5lbGVtZW50Lm9mZnNldCgpLGk9e3g6dC5wYWdlWCx5OnQucGFnZVl9LHM9dGhpcy5fbm9ybVZhbHVlRnJvbU1vdXNlKGkpLG49dGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKzEsdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5hYnMocy11LnZhbHVlcyh0KSk7KG4+aXx8bj09PWkmJih0PT09dS5fbGFzdENoYW5nZWRWYWx1ZXx8dS52YWx1ZXModCk9PT1kLm1pbikpJiYobj1pLGE9ZSh0aGlzKSxvPXQpfSkscj10aGlzLl9zdGFydCh0LG8pLHI9PT0hMT8hMToodGhpcy5fbW91c2VTbGlkaW5nPSEwLHRoaXMuX2hhbmRsZUluZGV4PW8sYS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuZm9jdXMoKSxoPWEub2Zmc2V0KCksbD0hZSh0LnRhcmdldCkucGFyZW50cygpLmFkZEJhY2soKS5pcygiLnVpLXNsaWRlci1oYW5kbGUiKSx0aGlzLl9jbGlja09mZnNldD1sP3tsZWZ0OjAsdG9wOjB9OntsZWZ0OnQucGFnZVgtaC5sZWZ0LWEud2lkdGgoKS8yLHRvcDp0LnBhZ2VZLWgudG9wLWEuaGVpZ2h0KCkvMi0ocGFyc2VJbnQoYS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoYS5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoYS5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MCl9LHRoaXMuaGFuZGxlcy5oYXNDbGFzcygidWktc3RhdGUtaG92ZXIiKXx8dGhpcy5fc2xpZGUodCxvLHMpLHRoaXMuX2FuaW1hdGVPZmY9ITAsITApKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sX21vdXNlRHJhZzpmdW5jdGlvbihlKXt2YXIgdD17eDplLnBhZ2VYLHk6ZS5wYWdlWX0saT10aGlzLl9ub3JtVmFsdWVGcm9tTW91c2UodCk7cmV0dXJuIHRoaXMuX3NsaWRlKGUsdGhpcy5faGFuZGxlSW5kZXgsaSksITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaGFuZGxlcy5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5fbW91c2VTbGlkaW5nPSExLHRoaXMuX3N0b3AoZSx0aGlzLl9oYW5kbGVJbmRleCksdGhpcy5fY2hhbmdlKGUsdGhpcy5faGFuZGxlSW5kZXgpLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fY2xpY2tPZmZzZXQ9bnVsbCx0aGlzLl9hbmltYXRlT2ZmPSExLCExfSxfZGV0ZWN0T3JpZW50YXRpb246ZnVuY3Rpb24oKXt0aGlzLm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI9PT10aGlzLm9wdGlvbnMub3JpZW50YXRpb24/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCJ9LF9ub3JtVmFsdWVGcm9tTW91c2U6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzLG4sYTtyZXR1cm4iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyh0PXRoaXMuZWxlbWVudFNpemUud2lkdGgsaT1lLngtdGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LmxlZnQ6MCkpOih0PXRoaXMuZWxlbWVudFNpemUuaGVpZ2h0LGk9ZS55LXRoaXMuZWxlbWVudE9mZnNldC50b3AtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LnRvcDowKSkscz1pL3Qscz4xJiYocz0xKSwwPnMmJihzPTApLCJ2ZXJ0aWNhbCI9PT10aGlzLm9yaWVudGF0aW9uJiYocz0xLXMpLG49dGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpLGE9dGhpcy5fdmFsdWVNaW4oKStzKm4sdGhpcy5fdHJpbUFsaWduVmFsdWUoYSl9LF9zdGFydDpmdW5jdGlvbihlLHQpe3ZhciBpPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOnRoaXMudmFsdWUoKX07cmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYoaS52YWx1ZT10aGlzLnZhbHVlcyh0KSxpLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSxpKX0sX3NsaWRlOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcyxuLGE7dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/KHM9dGhpcy52YWx1ZXModD8wOjEpLDI9PT10aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmdGhpcy5vcHRpb25zLnJhbmdlPT09ITAmJigwPT09dCYmaT5zfHwxPT09dCYmcz5pKSYmKGk9cyksaSE9PXRoaXMudmFsdWVzKHQpJiYobj10aGlzLnZhbHVlcygpLG5bdF09aSxhPXRoaXMuX3RyaWdnZXIoInNsaWRlIixlLHtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOmksdmFsdWVzOm59KSxzPXRoaXMudmFsdWVzKHQ/MDoxKSxhIT09ITEmJnRoaXMudmFsdWVzKHQsaSkpKTppIT09dGhpcy52YWx1ZSgpJiYoYT10aGlzLl90cmlnZ2VyKCJzbGlkZSIsZSx7aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTppfSksYSE9PSExJiZ0aGlzLnZhbHVlKGkpKX0sX3N0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgaT17aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTp0aGlzLnZhbHVlKCl9O3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYoaS52YWx1ZT10aGlzLnZhbHVlcyh0KSxpLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl90cmlnZ2VyKCJzdG9wIixlLGkpfSxfY2hhbmdlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2tleVNsaWRpbmcmJiF0aGlzLl9tb3VzZVNsaWRpbmcpe3ZhciBpPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOnRoaXMudmFsdWUoKX07dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgmJihpLnZhbHVlPXRoaXMudmFsdWVzKHQpLGkudmFsdWVzPXRoaXMudmFsdWVzKCkpLHRoaXMuX2xhc3RDaGFuZ2VkVmFsdWU9dCx0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLGUsaSl9fSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3RyaW1BbGlnblZhbHVlKGUpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2NoYW5nZShudWxsLDApLHZvaWQgMCk6dGhpcy5fdmFsdWUoKX0sdmFsdWVzOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlc1t0XT10aGlzLl90cmltQWxpZ25WYWx1ZShpKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCx0KSx2b2lkIDA7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX3ZhbHVlcygpO2lmKCFlLmlzQXJyYXkoYXJndW1lbnRzWzBdKSlyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/dGhpcy5fdmFsdWVzKHQpOnRoaXMudmFsdWUoKTtmb3Iocz10aGlzLm9wdGlvbnMudmFsdWVzLG49YXJndW1lbnRzWzBdLGE9MDtzLmxlbmd0aD5hO2ErPTEpc1thXT10aGlzLl90cmltQWxpZ25WYWx1ZShuW2FdKSx0aGlzLl9jaGFuZ2UobnVsbCxhKTt0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGkpe3ZhciBzLG49MDtzd2l0Y2goInJhbmdlIj09PXQmJnRoaXMub3B0aW9ucy5yYW5nZT09PSEwJiYoIm1pbiI9PT1pPyh0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fdmFsdWVzKDApLHRoaXMub3B0aW9ucy52YWx1ZXM9bnVsbCk6Im1heCI9PT1pJiYodGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3ZhbHVlcyh0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aC0xKSx0aGlzLm9wdGlvbnMudmFsdWVzPW51bGwpKSxlLmlzQXJyYXkodGhpcy5vcHRpb25zLnZhbHVlcykmJihuPXRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoKSwiZGlzYWJsZWQiPT09dCYmdGhpcy5lbGVtZW50LnRvZ2dsZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIsISFpKSx0aGlzLl9zdXBlcih0LGkpLHQpe2Nhc2Uib3JpZW50YXRpb24iOnRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zbGlkZXItaG9yaXpvbnRhbCB1aS1zbGlkZXItdmVydGljYWwiKS5hZGRDbGFzcygidWktc2xpZGVyLSIrdGhpcy5vcmllbnRhdGlvbiksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5oYW5kbGVzLmNzcygiaG9yaXpvbnRhbCI9PT1pPyJib3R0b20iOiJsZWZ0IiwiIik7YnJlYWs7Y2FzZSJ2YWx1ZSI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCwwKSx0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2UidmFsdWVzIjpmb3IodGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSxzPTA7bj5zO3MrPTEpdGhpcy5fY2hhbmdlKG51bGwscyk7dGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlInN0ZXAiOmNhc2UibWluIjpjYXNlIm1heCI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9jYWxjdWxhdGVOZXdNYXgoKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2UicmFuZ2UiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaCgpLHRoaXMuX2FuaW1hdGVPZmY9ITF9fSxfdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMudmFsdWU7cmV0dXJuIGU9dGhpcy5fdHJpbUFsaWduVmFsdWUoZSl9LF92YWx1ZXM6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzO2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQ9dGhpcy5vcHRpb25zLnZhbHVlc1tlXSx0PXRoaXMuX3RyaW1BbGlnblZhbHVlKHQpO2lmKHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoKXtmb3IoaT10aGlzLm9wdGlvbnMudmFsdWVzLnNsaWNlKCkscz0wO2kubGVuZ3RoPnM7cys9MSlpW3NdPXRoaXMuX3RyaW1BbGlnblZhbHVlKGlbc10pO3JldHVybiBpfXJldHVybltdfSxfdHJpbUFsaWduVmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fdmFsdWVNaW4oKT49ZSlyZXR1cm4gdGhpcy5fdmFsdWVNaW4oKTtpZihlPj10aGlzLl92YWx1ZU1heCgpKXJldHVybiB0aGlzLl92YWx1ZU1heCgpO3ZhciB0PXRoaXMub3B0aW9ucy5zdGVwPjA/dGhpcy5vcHRpb25zLnN0ZXA6MSxpPShlLXRoaXMuX3ZhbHVlTWluKCkpJXQscz1lLWk7cmV0dXJuIDIqTWF0aC5hYnMoaSk+PXQmJihzKz1pPjA/dDotdCkscGFyc2VGbG9hdChzLnRvRml4ZWQoNSkpfSxfY2FsY3VsYXRlTmV3TWF4OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLm1heCx0PXRoaXMuX3ZhbHVlTWluKCksaT10aGlzLm9wdGlvbnMuc3RlcCxzPU1hdGguZmxvb3IoKyhlLXQpLnRvRml4ZWQodGhpcy5fcHJlY2lzaW9uKCkpL2kpKmk7ZT1zK3QsdGhpcy5tYXg9cGFyc2VGbG9hdChlLnRvRml4ZWQodGhpcy5fcHJlY2lzaW9uKCkpKX0sX3ByZWNpc2lvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5zdGVwKTtyZXR1cm4gbnVsbCE9PXRoaXMub3B0aW9ucy5taW4mJihlPU1hdGgubWF4KGUsdGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLm1pbikpKSxlfSxfcHJlY2lzaW9uT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9IiIrZSxpPXQuaW5kZXhPZigiLiIpO3JldHVybi0xPT09aT8wOnQubGVuZ3RoLWktMX0sX3ZhbHVlTWluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW59LF92YWx1ZU1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heH0sX3JlZnJlc2hWYWx1ZTpmdW5jdGlvbigpe3ZhciB0LGkscyxuLGEsbz10aGlzLm9wdGlvbnMucmFuZ2Uscj10aGlzLm9wdGlvbnMsaD10aGlzLGw9dGhpcy5fYW5pbWF0ZU9mZj8hMTpyLmFuaW1hdGUsdT17fTt0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD90aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbihzKXtpPTEwMCooKGgudmFsdWVzKHMpLWguX3ZhbHVlTWluKCkpLyhoLl92YWx1ZU1heCgpLWguX3ZhbHVlTWluKCkpKSx1WyJob3Jpem9udGFsIj09PWgub3JpZW50YXRpb24/ImxlZnQiOiJib3R0b20iXT1pKyIlIixlKHRoaXMpLnN0b3AoMSwxKVtsPyJhbmltYXRlIjoiY3NzIl0odSxyLmFuaW1hdGUpLGgub3B0aW9ucy5yYW5nZT09PSEwJiYoImhvcml6b250YWwiPT09aC5vcmllbnRhdGlvbj8oMD09PXMmJmgucmFuZ2Uuc3RvcCgxLDEpW2w/ImFuaW1hdGUiOiJjc3MiXSh7bGVmdDppKyIlIn0sci5hbmltYXRlKSwxPT09cyYmaC5yYW5nZVtsPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOmktdCsiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjpyLmFuaW1hdGV9KSk6KDA9PT1zJiZoLnJhbmdlLnN0b3AoMSwxKVtsPyJhbmltYXRlIjoiY3NzIl0oe2JvdHRvbTppKyIlIn0sci5hbmltYXRlKSwxPT09cyYmaC5yYW5nZVtsPyJhbmltYXRlIjoiY3NzIl0oe2hlaWdodDppLXQrIiUifSx7cXVldWU6ITEsZHVyYXRpb246ci5hbmltYXRlfSkpKSx0PWl9KToocz10aGlzLnZhbHVlKCksbj10aGlzLl92YWx1ZU1pbigpLGE9dGhpcy5fdmFsdWVNYXgoKSxpPWEhPT1uPzEwMCooKHMtbikvKGEtbikpOjAsdVsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJsZWZ0IjoiYm90dG9tIl09aSsiJSIsdGhpcy5oYW5kbGUuc3RvcCgxLDEpW2w/ImFuaW1hdGUiOiJjc3MiXSh1LHIuYW5pbWF0ZSksIm1pbiI9PT1vJiYiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtsPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOmkrIiUifSxyLmFuaW1hdGUpLCJtYXgiPT09byYmImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbiYmdGhpcy5yYW5nZVtsPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOjEwMC1pKyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOnIuYW5pbWF0ZX0pLCJtaW4iPT09byYmInZlcnRpY2FsIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2Uuc3RvcCgxLDEpW2w/ImFuaW1hdGUiOiJjc3MiXSh7aGVpZ2h0OmkrIiUifSxyLmFuaW1hdGUpLCJtYXgiPT09byYmInZlcnRpY2FsIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2VbbD8iYW5pbWF0ZSI6ImNzcyJdKHtoZWlnaHQ6MTAwLWkrIiUifSx7cXVldWU6ITEsZHVyYXRpb246ci5hbmltYXRlfSkpfSxfaGFuZGxlRXZlbnRzOntrZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG89ZSh0LnRhcmdldCkuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIpO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6Y2FzZSBlLnVpLmtleUNvZGUuRU5EOmNhc2UgZS51aS5rZXlDb2RlLlBBR0VfVVA6Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOmNhc2UgZS51aS5rZXlDb2RlLlVQOmNhc2UgZS51aS5rZXlDb2RlLlJJR0hUOmNhc2UgZS51aS5rZXlDb2RlLkRPV046Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDppZih0LnByZXZlbnREZWZhdWx0KCksIXRoaXMuX2tleVNsaWRpbmcmJih0aGlzLl9rZXlTbGlkaW5nPSEwLGUodC50YXJnZXQpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSxpPXRoaXMuX3N0YXJ0KHQsbyksaT09PSExKSlyZXR1cm59c3dpdGNoKGE9dGhpcy5vcHRpb25zLnN0ZXAscz1uPXRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoP3RoaXMudmFsdWVzKG8pOnRoaXMudmFsdWUoKSx0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6bj10aGlzLl92YWx1ZU1pbigpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkVORDpuPXRoaXMuX3ZhbHVlTWF4KCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9VUDpuPXRoaXMuX3RyaW1BbGlnblZhbHVlKHMrKHRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSkvdGhpcy5udW1QYWdlcyk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOm49dGhpcy5fdHJpbUFsaWduVmFsdWUocy0odGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKS90aGlzLm51bVBhZ2VzKTticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDpjYXNlIGUudWkua2V5Q29kZS5SSUdIVDppZihzPT09dGhpcy5fdmFsdWVNYXgoKSlyZXR1cm47bj10aGlzLl90cmltQWxpZ25WYWx1ZShzK2EpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkRPV046Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDppZihzPT09dGhpcy5fdmFsdWVNaW4oKSlyZXR1cm47bj10aGlzLl90cmltQWxpZ25WYWx1ZShzLWEpfXRoaXMuX3NsaWRlKHQsbyxuKX0sa2V5dXA6ZnVuY3Rpb24odCl7dmFyIGk9ZSh0LnRhcmdldCkuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIpO3RoaXMuX2tleVNsaWRpbmcmJih0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX3N0b3AodCxpKSx0aGlzLl9jaGFuZ2UodCxpKSxlKHQudGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikpfX19KSxlLndpZGdldCgidWkuc3Bpbm5lciIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6IjxpbnB1dD4iLHdpZGdldEV2ZW50UHJlZml4OiJzcGluIixvcHRpb25zOntjdWx0dXJlOm51bGwsaWNvbnM6e2Rvd246InVpLWljb24tdHJpYW5nbGUtMS1zIix1cDoidWktaWNvbi10cmlhbmdsZS0xLW4ifSxpbmNyZW1lbnRhbDohMCxtYXg6bnVsbCxtaW46bnVsbCxudW1iZXJGb3JtYXQ6bnVsbCxwYWdlOjEwLHN0ZXA6MSxjaGFuZ2U6bnVsbCxzcGluOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9zZXRPcHRpb24oIm1heCIsdGhpcy5vcHRpb25zLm1heCksdGhpcy5fc2V0T3B0aW9uKCJtaW4iLHRoaXMub3B0aW9ucy5taW4pLHRoaXMuX3NldE9wdGlvbigic3RlcCIsdGhpcy5vcHRpb25zLnN0ZXApLCIiIT09dGhpcy52YWx1ZSgpJiZ0aGlzLl92YWx1ZSh0aGlzLmVsZW1lbnQudmFsKCksITApLHRoaXMuX2RyYXcoKSx0aGlzLl9vbih0aGlzLl9ldmVudHMpLHRoaXMuX3JlZnJlc2goKSx0aGlzLl9vbih0aGlzLndpbmRvdyx7YmVmb3JldW5sb2FkOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpfX0pfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3ZhciB0PXt9LGk9dGhpcy5lbGVtZW50O3JldHVybiBlLmVhY2goWyJtaW4iLCJtYXgiLCJzdGVwIl0sZnVuY3Rpb24oZSxzKXt2YXIgbj1pLmF0dHIocyk7dm9pZCAwIT09biYmbi5sZW5ndGgmJih0W3NdPW4pfSksdH0sX2V2ZW50czp7a2V5ZG93bjpmdW5jdGlvbihlKXt0aGlzLl9zdGFydChlKSYmdGhpcy5fa2V5ZG93bihlKSYmZS5wcmV2ZW50RGVmYXVsdCgpfSxrZXl1cDoiX3N0b3AiLGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz10aGlzLmVsZW1lbnQudmFsKCl9LGJsdXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2FuY2VsQmx1cj8oZGVsZXRlIHRoaXMuY2FuY2VsQmx1cix2b2lkIDApOih0aGlzLl9zdG9wKCksdGhpcy5fcmVmcmVzaCgpLHRoaXMucHJldmlvdXMhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoImNoYW5nZSIsZSksdm9pZCAwKX0sbW91c2V3aGVlbDpmdW5jdGlvbihlLHQpe2lmKHQpe2lmKCF0aGlzLnNwaW5uaW5nJiYhdGhpcy5fc3RhcnQoZSkpcmV0dXJuITE7dGhpcy5fc3BpbigodD4wPzE6LTEpKnRoaXMub3B0aW9ucy5zdGVwLGUpLGNsZWFyVGltZW91dCh0aGlzLm1vdXNld2hlZWxUaW1lciksdGhpcy5tb3VzZXdoZWVsVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnNwaW5uaW5nJiZ0aGlzLl9zdG9wKGUpfSwxMDApLGUucHJldmVudERlZmF1bHQoKX19LCJtb3VzZWRvd24gLnVpLXNwaW5uZXItYnV0dG9uIjpmdW5jdGlvbih0KXtmdW5jdGlvbiBpKCl7dmFyIGU9dGhpcy5lbGVtZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50O2V8fCh0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPXMsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXN9KSl9dmFyIHM7cz10aGlzLmVsZW1lbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQ/dGhpcy5wcmV2aW91czp0aGlzLmVsZW1lbnQudmFsKCksdC5wcmV2ZW50RGVmYXVsdCgpLGkuY2FsbCh0aGlzKSx0aGlzLmNhbmNlbEJsdXI9ITAsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5jYW5jZWxCbHVyLGkuY2FsbCh0aGlzKX0pLHRoaXMuX3N0YXJ0KHQpIT09ITEmJnRoaXMuX3JlcGVhdChudWxsLGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3Bpbm5lci11cCIpPzE6LTEsdCl9LCJtb3VzZXVwIC51aS1zcGlubmVyLWJ1dHRvbiI6Il9zdG9wIiwibW91c2VlbnRlciAudWktc3Bpbm5lci1idXR0b24iOmZ1bmN0aW9uKHQpe3JldHVybiBlKHQuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpP3RoaXMuX3N0YXJ0KHQpPT09ITE/ITE6KHRoaXMuX3JlcGVhdChudWxsLGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3Bpbm5lci11cCIpPzE6LTEsdCksdm9pZCAwKTp2b2lkIDB9LCJtb3VzZWxlYXZlIC51aS1zcGlubmVyLWJ1dHRvbiI6Il9zdG9wIn0sX2RyYXc6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnVpU3Bpbm5lcj10aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNwaW5uZXItaW5wdXQiKS5hdHRyKCJhdXRvY29tcGxldGUiLCJvZmYiKS53cmFwKHRoaXMuX3VpU3Bpbm5lckh0bWwoKSkucGFyZW50KCkuYXBwZW5kKHRoaXMuX2J1dHRvbkh0bWwoKSk7dGhpcy5lbGVtZW50LmF0dHIoInJvbGUiLCJzcGluYnV0dG9uIiksdGhpcy5idXR0b25zPWUuZmluZCgiLnVpLXNwaW5uZXItYnV0dG9uIikuYXR0cigidGFiSW5kZXgiLC0xKS5idXR0b24oKS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCIpLHRoaXMuYnV0dG9ucy5oZWlnaHQoKT5NYXRoLmNlaWwoLjUqZS5oZWlnaHQoKSkmJmUuaGVpZ2h0KCk+MCYmZS5oZWlnaHQoZS5oZWlnaHQoKSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLmRpc2FibGUoKX0sX2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLHM9ZS51aS5rZXlDb2RlO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2Ugcy5VUDpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsMSx0KSwhMDtjYXNlIHMuRE9XTjpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsLTEsdCksITA7Y2FzZSBzLlBBR0VfVVA6cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLGkucGFnZSx0KSwhMDtjYXNlIHMuUEFHRV9ET1dOOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwtaS5wYWdlLHQpLCEwfXJldHVybiExfSxfdWlTcGlubmVySHRtbDpmdW5jdGlvbigpe3JldHVybiI8c3BhbiBjbGFzcz0ndWktc3Bpbm5lciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCc+PC9zcGFuPiJ9LF9idXR0b25IdG1sOmZ1bmN0aW9uKCl7cmV0dXJuIjxhIGNsYXNzPSd1aS1zcGlubmVyLWJ1dHRvbiB1aS1zcGlubmVyLXVwIHVpLWNvcm5lci10cic+PHNwYW4gY2xhc3M9J3VpLWljb24gIit0aGlzLm9wdGlvbnMuaWNvbnMudXArIic+JiM5NjUwOzwvc3Bhbj4iKyI8L2E+IisiPGEgY2xhc3M9J3VpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItZG93biB1aS1jb3JuZXItYnInPiIrIjxzcGFuIGNsYXNzPSd1aS1pY29uICIrdGhpcy5vcHRpb25zLmljb25zLmRvd24rIic+JiM5NjYwOzwvc3Bhbj4iKyI8L2E+In0sX3N0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNwaW5uaW5nfHx0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSkhPT0hMT8odGhpcy5jb3VudGVyfHwodGhpcy5jb3VudGVyPTEpLHRoaXMuc3Bpbm5pbmc9ITAsITApOiExfSxfcmVwZWF0OmZ1bmN0aW9uKGUsdCxpKXtlPWV8fDUwMCxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX3JlcGVhdCg0MCx0LGkpfSxlKSx0aGlzLl9zcGluKHQqdGhpcy5vcHRpb25zLnN0ZXAsaSl9LF9zcGluOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy52YWx1ZSgpfHwwO3RoaXMuY291bnRlcnx8KHRoaXMuY291bnRlcj0xKSxpPXRoaXMuX2FkanVzdFZhbHVlKGkrZSp0aGlzLl9pbmNyZW1lbnQodGhpcy5jb3VudGVyKSksdGhpcy5zcGlubmluZyYmdGhpcy5fdHJpZ2dlcigic3BpbiIsdCx7dmFsdWU6aX0pPT09ITF8fCh0aGlzLl92YWx1ZShpKSx0aGlzLmNvdW50ZXIrKyl9LF9pbmNyZW1lbnQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLmluY3JlbWVudGFsO3JldHVybiBpP2UuaXNGdW5jdGlvbihpKT9pKHQpOk1hdGguZmxvb3IodCp0KnQvNWU0LXQqdC81MDArMTcqdC8yMDArMSk6MX0sX3ByZWNpc2lvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5zdGVwKTtyZXR1cm4gbnVsbCE9PXRoaXMub3B0aW9ucy5taW4mJihlPU1hdGgubWF4KGUsdGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLm1pbikpKSxlfSxfcHJlY2lzaW9uT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9IiIrZSxpPXQuaW5kZXhPZigiLiIpO3JldHVybi0xPT09aT8wOnQubGVuZ3RoLWktMX0sX2FkanVzdFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LGkscz10aGlzLm9wdGlvbnM7cmV0dXJuIHQ9bnVsbCE9PXMubWluP3MubWluOjAsaT1lLXQsaT1NYXRoLnJvdW5kKGkvcy5zdGVwKSpzLnN0ZXAsZT10K2ksZT1wYXJzZUZsb2F0KGUudG9GaXhlZCh0aGlzLl9wcmVjaXNpb24oKSkpLG51bGwhPT1zLm1heCYmZT5zLm1heD9zLm1heDpudWxsIT09cy5taW4mJnMubWluPmU/cy5taW46ZX0sX3N0b3A6ZnVuY3Rpb24oZSl7dGhpcy5zcGlubmluZyYmKGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLHRoaXMuY291bnRlcj0wLHRoaXMuc3Bpbm5pbmc9ITEsdGhpcy5fdHJpZ2dlcigic3RvcCIsZSkpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYoImN1bHR1cmUiPT09ZXx8Im51bWJlckZvcm1hdCI9PT1lKXt2YXIgaT10aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpO3JldHVybiB0aGlzLm9wdGlvbnNbZV09dCx0aGlzLmVsZW1lbnQudmFsKHRoaXMuX2Zvcm1hdChpKSksdm9pZCAwfSgibWF4Ij09PWV8fCJtaW4iPT09ZXx8InN0ZXAiPT09ZSkmJiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dGhpcy5fcGFyc2UodCkpLCJpY29ucyI9PT1lJiYodGhpcy5idXR0b25zLmZpcnN0KCkuZmluZCgiLnVpLWljb24iKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaWNvbnMudXApLmFkZENsYXNzKHQudXApLHRoaXMuYnV0dG9ucy5sYXN0KCkuZmluZCgiLnVpLWljb24iKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaWNvbnMuZG93bikuYWRkQ2xhc3ModC5kb3duKSksdGhpcy5fc3VwZXIoZSx0KSwiZGlzYWJsZWQiPT09ZSYmKHRoaXMud2lkZ2V0KCkudG9nZ2xlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiwhIXQpLHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsISF0KSx0aGlzLmJ1dHRvbnMuYnV0dG9uKHQ/ImRpc2FibGUiOiJlbmFibGUiKSl9LF9zZXRPcHRpb25zOnMoZnVuY3Rpb24oZSl7dGhpcy5fc3VwZXIoZSl9KSxfcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYiIiE9PWUmJihlPXdpbmRvdy5HbG9iYWxpemUmJnRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQ/R2xvYmFsaXplLnBhcnNlRmxvYXQoZSwxMCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6K2UpLCIiPT09ZXx8aXNOYU4oZSk/bnVsbDplCn0sX2Zvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4iIj09PWU/IiI6d2luZG93Lkdsb2JhbGl6ZSYmdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdD9HbG9iYWxpemUuZm9ybWF0KGUsdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6ZX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYXR0cih7ImFyaWEtdmFsdWVtaW4iOnRoaXMub3B0aW9ucy5taW4sImFyaWEtdmFsdWVtYXgiOnRoaXMub3B0aW9ucy5tYXgsImFyaWEtdmFsdWVub3ciOnRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSl9KX0saXNWYWxpZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmFsdWUoKTtyZXR1cm4gbnVsbD09PWU/ITE6ZT09PXRoaXMuX2FkanVzdFZhbHVlKGUpfSxfdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgaTsiIiE9PWUmJihpPXRoaXMuX3BhcnNlKGUpLG51bGwhPT1pJiYodHx8KGk9dGhpcy5fYWRqdXN0VmFsdWUoaSkpLGU9dGhpcy5fZm9ybWF0KGkpKSksdGhpcy5lbGVtZW50LnZhbChlKSx0aGlzLl9yZWZyZXNoKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zcGlubmVyLWlucHV0IikucHJvcCgiZGlzYWJsZWQiLCExKS5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1pbiIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtYXgiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbm93IiksdGhpcy51aVNwaW5uZXIucmVwbGFjZVdpdGgodGhpcy5lbGVtZW50KX0sc3RlcFVwOnMoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcFVwKGUpfSksX3N0ZXBVcDpmdW5jdGlvbihlKXt0aGlzLl9zdGFydCgpJiYodGhpcy5fc3BpbigoZXx8MSkqdGhpcy5vcHRpb25zLnN0ZXApLHRoaXMuX3N0b3AoKSl9LHN0ZXBEb3duOnMoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcERvd24oZSl9KSxfc3RlcERvd246ZnVuY3Rpb24oZSl7dGhpcy5fc3RhcnQoKSYmKHRoaXMuX3NwaW4oKGV8fDEpKi10aGlzLm9wdGlvbnMuc3RlcCksdGhpcy5fc3RvcCgpKX0scGFnZVVwOnMoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcFVwKChlfHwxKSp0aGlzLm9wdGlvbnMucGFnZSl9KSxwYWdlRG93bjpzKGZ1bmN0aW9uKGUpe3RoaXMuX3N0ZXBEb3duKChlfHwxKSp0aGlzLm9wdGlvbnMucGFnZSl9KSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocyh0aGlzLl92YWx1ZSkuY2FsbCh0aGlzLGUpLHZvaWQgMCk6dGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWlTcGlubmVyfX0pLGUud2lkZ2V0KCJ1aS50YWJzIix7dmVyc2lvbjoiMS4xMS40IixkZWxheTozMDAsb3B0aW9uczp7YWN0aXZlOm51bGwsY29sbGFwc2libGU6ITEsZXZlbnQ6ImNsaWNrIixoZWlnaHRTdHlsZToiY29udGVudCIsaGlkZTpudWxsLHNob3c6bnVsbCxhY3RpdmF0ZTpudWxsLGJlZm9yZUFjdGl2YXRlOm51bGwsYmVmb3JlTG9hZDpudWxsLGxvYWQ6bnVsbH0sX2lzTG9jYWw6ZnVuY3Rpb24oKXt2YXIgZT0vIy4qJC87cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBpLHM7dD10LmNsb25lTm9kZSghMSksaT10LmhyZWYucmVwbGFjZShlLCIiKSxzPWxvY2F0aW9uLmhyZWYucmVwbGFjZShlLCIiKTt0cnl7aT1kZWNvZGVVUklDb21wb25lbnQoaSl9Y2F0Y2gobil7fXRyeXtzPWRlY29kZVVSSUNvbXBvbmVudChzKX1jYXRjaChuKXt9cmV0dXJuIHQuaGFzaC5sZW5ndGg+MSYmaT09PXN9fSgpLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9dGhpcy5vcHRpb25zO3RoaXMucnVubmluZz0hMSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXRhYnMgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS50b2dnbGVDbGFzcygidWktdGFicy1jb2xsYXBzaWJsZSIsaS5jb2xsYXBzaWJsZSksdGhpcy5fcHJvY2Vzc1RhYnMoKSxpLmFjdGl2ZT10aGlzLl9pbml0aWFsQWN0aXZlKCksZS5pc0FycmF5KGkuZGlzYWJsZWQpJiYoaS5kaXNhYmxlZD1lLnVuaXF1ZShpLmRpc2FibGVkLmNvbmNhdChlLm1hcCh0aGlzLnRhYnMuZmlsdGVyKCIudWktc3RhdGUtZGlzYWJsZWQiKSxmdW5jdGlvbihlKXtyZXR1cm4gdC50YWJzLmluZGV4KGUpfSkpKS5zb3J0KCkpLHRoaXMuYWN0aXZlPXRoaXMub3B0aW9ucy5hY3RpdmUhPT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aD90aGlzLl9maW5kQWN0aXZlKGkuYWN0aXZlKTplKCksdGhpcy5fcmVmcmVzaCgpLHRoaXMuYWN0aXZlLmxlbmd0aCYmdGhpcy5sb2FkKGkuYWN0aXZlKX0sX2luaXRpYWxBY3RpdmU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuYWN0aXZlLGk9dGhpcy5vcHRpb25zLmNvbGxhcHNpYmxlLHM9bG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSk7cmV0dXJuIG51bGw9PT10JiYocyYmdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oaSxuKXtyZXR1cm4gZShuKS5hdHRyKCJhcmlhLWNvbnRyb2xzIik9PT1zPyh0PWksITEpOnZvaWQgMH0pLG51bGw9PT10JiYodD10aGlzLnRhYnMuaW5kZXgodGhpcy50YWJzLmZpbHRlcigiLnVpLXRhYnMtYWN0aXZlIikpKSwobnVsbD09PXR8fC0xPT09dCkmJih0PXRoaXMudGFicy5sZW5ndGg/MDohMSkpLHQhPT0hMSYmKHQ9dGhpcy50YWJzLmluZGV4KHRoaXMudGFicy5lcSh0KSksLTE9PT10JiYodD1pPyExOjApKSwhaSYmdD09PSExJiZ0aGlzLmFuY2hvcnMubGVuZ3RoJiYodD0wKSx0fSxfZ2V0Q3JlYXRlRXZlbnREYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3RhYjp0aGlzLmFjdGl2ZSxwYW5lbDp0aGlzLmFjdGl2ZS5sZW5ndGg/dGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpOmUoKX19LF90YWJLZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBpPWUodGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50KS5jbG9zZXN0KCJsaSIpLHM9dGhpcy50YWJzLmluZGV4KGkpLG49ITA7aWYoIXRoaXMuX2hhbmRsZVBhZ2VOYXYodCkpe3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLlJJR0hUOmNhc2UgZS51aS5rZXlDb2RlLkRPV046cysrO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlVQOmNhc2UgZS51aS5rZXlDb2RlLkxFRlQ6bj0hMSxzLS07YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOnM9dGhpcy5hbmNob3JzLmxlbmd0aC0xO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6cz0wO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlNQQUNFOnJldHVybiB0LnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksdGhpcy5fYWN0aXZhdGUocyksdm9pZCAwO2Nhc2UgZS51aS5rZXlDb2RlLkVOVEVSOnJldHVybiB0LnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksdGhpcy5fYWN0aXZhdGUocz09PXRoaXMub3B0aW9ucy5hY3RpdmU/ITE6cyksdm9pZCAwO2RlZmF1bHQ6cmV0dXJufXQucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSxzPXRoaXMuX2ZvY3VzTmV4dFRhYihzLG4pLHQuY3RybEtleXx8dC5tZXRhS2V5fHwoaS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSx0aGlzLnRhYnMuZXEocykuYXR0cigiYXJpYS1zZWxlY3RlZCIsInRydWUiKSx0aGlzLmFjdGl2YXRpbmc9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLm9wdGlvbigiYWN0aXZlIixzKX0sdGhpcy5kZWxheSkpfX0sX3BhbmVsS2V5ZG93bjpmdW5jdGlvbih0KXt0aGlzLl9oYW5kbGVQYWdlTmF2KHQpfHx0LmN0cmxLZXkmJnQua2V5Q29kZT09PWUudWkua2V5Q29kZS5VUCYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLmFjdGl2ZS5mb2N1cygpKX0sX2hhbmRsZVBhZ2VOYXY6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWx0S2V5JiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuUEFHRV9VUD8odGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUtMSwhMSkpLCEwKTp0LmFsdEtleSYmdC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlBBR0VfRE9XTj8odGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUrMSwhMCkpLCEwKTp2b2lkIDB9LF9maW5kTmV4dFRhYjpmdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHMoKXtyZXR1cm4gdD5uJiYodD0wKSwwPnQmJih0PW4pLHR9Zm9yKHZhciBuPXRoaXMudGFicy5sZW5ndGgtMTstMSE9PWUuaW5BcnJheShzKCksdGhpcy5vcHRpb25zLmRpc2FibGVkKTspdD1pP3QrMTp0LTE7cmV0dXJuIHR9LF9mb2N1c05leHRUYWI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT10aGlzLl9maW5kTmV4dFRhYihlLHQpLHRoaXMudGFicy5lcShlKS5mb2N1cygpLGV9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4iYWN0aXZlIj09PWU/KHRoaXMuX2FjdGl2YXRlKHQpLHZvaWQgMCk6ImRpc2FibGVkIj09PWU/KHRoaXMuX3NldHVwRGlzYWJsZWQodCksdm9pZCAwKToodGhpcy5fc3VwZXIoZSx0KSwiY29sbGFwc2libGUiPT09ZSYmKHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktdGFicy1jb2xsYXBzaWJsZSIsdCksdHx8dGhpcy5vcHRpb25zLmFjdGl2ZSE9PSExfHx0aGlzLl9hY3RpdmF0ZSgwKSksImV2ZW50Ij09PWUmJnRoaXMuX3NldHVwRXZlbnRzKHQpLCJoZWlnaHRTdHlsZSI9PT1lJiZ0aGlzLl9zZXR1cEhlaWdodFN0eWxlKHQpLHZvaWQgMCl9LF9zYW5pdGl6ZVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiBlP2UucmVwbGFjZSgvWyEiJCUmJygpKissLlwvOjs8PT4/QFxbXF1cXmB7fH1+XS9nLCJcXCQmIik6IiJ9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsaT10aGlzLnRhYmxpc3QuY2hpbGRyZW4oIjpoYXMoYVtocmVmXSkiKTt0LmRpc2FibGVkPWUubWFwKGkuZmlsdGVyKCIudWktc3RhdGUtZGlzYWJsZWQiKSxmdW5jdGlvbihlKXtyZXR1cm4gaS5pbmRleChlKX0pLHRoaXMuX3Byb2Nlc3NUYWJzKCksdC5hY3RpdmUhPT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aD90aGlzLmFjdGl2ZS5sZW5ndGgmJiFlLmNvbnRhaW5zKHRoaXMudGFibGlzdFswXSx0aGlzLmFjdGl2ZVswXSk/dGhpcy50YWJzLmxlbmd0aD09PXQuZGlzYWJsZWQubGVuZ3RoPyh0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpOnRoaXMuX2FjdGl2YXRlKHRoaXMuX2ZpbmROZXh0VGFiKE1hdGgubWF4KDAsdC5hY3RpdmUtMSksITEpKTp0LmFjdGl2ZT10aGlzLnRhYnMuaW5kZXgodGhpcy5hY3RpdmUpOih0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpLHRoaXMuX3JlZnJlc2goKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9zZXR1cERpc2FibGVkKHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fc2V0dXBFdmVudHModGhpcy5vcHRpb25zLmV2ZW50KSx0aGlzLl9zZXR1cEhlaWdodFN0eWxlKHRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSksdGhpcy50YWJzLm5vdCh0aGlzLmFjdGl2ZSkuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJmYWxzZSIsImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsdGFiSW5kZXg6LTF9KSx0aGlzLnBhbmVscy5ub3QodGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpKS5oaWRlKCkuYXR0cih7ImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSx0aGlzLmFjdGl2ZS5sZW5ndGg/KHRoaXMuYWN0aXZlLmFkZENsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLCJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pLHRoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKS5zaG93KCkuYXR0cih7ImFyaWEtaGlkZGVuIjoiZmFsc2UifSkpOnRoaXMudGFicy5lcSgwKS5hdHRyKCJ0YWJJbmRleCIsMCl9LF9wcm9jZXNzVGFiczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT10aGlzLnRhYnMscz10aGlzLmFuY2hvcnMsbj10aGlzLnBhbmVsczt0aGlzLnRhYmxpc3Q9dGhpcy5fZ2V0TGlzdCgpLmFkZENsYXNzKCJ1aS10YWJzLW5hdiB1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCIpLmF0dHIoInJvbGUiLCJ0YWJsaXN0IikuZGVsZWdhdGUoIj4gbGkiLCJtb3VzZWRvd24iK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24odCl7ZSh0aGlzKS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIikmJnQucHJldmVudERlZmF1bHQoKX0pLmRlbGVnYXRlKCIudWktdGFicy1hbmNob3IiLCJmb2N1cyIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2UodGhpcykuY2xvc2VzdCgibGkiKS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIikmJnRoaXMuYmx1cigpfSksdGhpcy50YWJzPXRoaXMudGFibGlzdC5maW5kKCI+IGxpOmhhcyhhW2hyZWZdKSIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci10b3AiKS5hdHRyKHtyb2xlOiJ0YWIiLHRhYkluZGV4Oi0xfSksdGhpcy5hbmNob3JzPXRoaXMudGFicy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZSgiYSIsdGhpcylbMF19KS5hZGRDbGFzcygidWktdGFicy1hbmNob3IiKS5hdHRyKHtyb2xlOiJwcmVzZW50YXRpb24iLHRhYkluZGV4Oi0xfSksdGhpcy5wYW5lbHM9ZSgpLHRoaXMuYW5jaG9ycy5lYWNoKGZ1bmN0aW9uKGkscyl7dmFyIG4sYSxvLHI9ZShzKS51bmlxdWVJZCgpLmF0dHIoImlkIiksaD1lKHMpLmNsb3Nlc3QoImxpIiksbD1oLmF0dHIoImFyaWEtY29udHJvbHMiKTt0Ll9pc0xvY2FsKHMpPyhuPXMuaGFzaCxvPW4uc3Vic3RyaW5nKDEpLGE9dC5lbGVtZW50LmZpbmQodC5fc2FuaXRpemVTZWxlY3RvcihuKSkpOihvPWguYXR0cigiYXJpYS1jb250cm9scyIpfHxlKHt9KS51bmlxdWVJZCgpWzBdLmlkLG49IiMiK28sYT10LmVsZW1lbnQuZmluZChuKSxhLmxlbmd0aHx8KGE9dC5fY3JlYXRlUGFuZWwobyksYS5pbnNlcnRBZnRlcih0LnBhbmVsc1tpLTFdfHx0LnRhYmxpc3QpKSxhLmF0dHIoImFyaWEtbGl2ZSIsInBvbGl0ZSIpKSxhLmxlbmd0aCYmKHQucGFuZWxzPXQucGFuZWxzLmFkZChhKSksbCYmaC5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiLGwpLGguYXR0cih7ImFyaWEtY29udHJvbHMiOm8sImFyaWEtbGFiZWxsZWRieSI6cn0pLGEuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixyKX0pLHRoaXMucGFuZWxzLmFkZENsYXNzKCJ1aS10YWJzLXBhbmVsIHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20iKS5hdHRyKCJyb2xlIiwidGFicGFuZWwiKSxpJiYodGhpcy5fb2ZmKGkubm90KHRoaXMudGFicykpLHRoaXMuX29mZihzLm5vdCh0aGlzLmFuY2hvcnMpKSx0aGlzLl9vZmYobi5ub3QodGhpcy5wYW5lbHMpKSl9LF9nZXRMaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFibGlzdHx8dGhpcy5lbGVtZW50LmZpbmQoIm9sLHVsIikuZXEoMCl9LF9jcmVhdGVQYW5lbDpmdW5jdGlvbih0KXtyZXR1cm4gZSgiPGRpdj4iKS5hdHRyKCJpZCIsdCkuYWRkQ2xhc3MoInVpLXRhYnMtcGFuZWwgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpLmRhdGEoInVpLXRhYnMtZGVzdHJveSIsITApfSxfc2V0dXBEaXNhYmxlZDpmdW5jdGlvbih0KXtlLmlzQXJyYXkodCkmJih0Lmxlbmd0aD90Lmxlbmd0aD09PXRoaXMuYW5jaG9ycy5sZW5ndGgmJih0PSEwKTp0PSExKTtmb3IodmFyIGkscz0wO2k9dGhpcy50YWJzW3NdO3MrKyl0PT09ITB8fC0xIT09ZS5pbkFycmF5KHMsdCk/ZShpKS5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIiwidHJ1ZSIpOmUoaSkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpO3RoaXMub3B0aW9ucy5kaXNhYmxlZD10fSxfc2V0dXBFdmVudHM6ZnVuY3Rpb24odCl7dmFyIGk9e307dCYmZS5lYWNoKHQuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe2lbdF09Il9ldmVudEhhbmRsZXIifSksdGhpcy5fb2ZmKHRoaXMuYW5jaG9ycy5hZGQodGhpcy50YWJzKS5hZGQodGhpcy5wYW5lbHMpKSx0aGlzLl9vbighMCx0aGlzLmFuY2hvcnMse2NsaWNrOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX19KSx0aGlzLl9vbih0aGlzLmFuY2hvcnMsaSksdGhpcy5fb24odGhpcy50YWJzLHtrZXlkb3duOiJfdGFiS2V5ZG93biJ9KSx0aGlzLl9vbih0aGlzLnBhbmVscyx7a2V5ZG93bjoiX3BhbmVsS2V5ZG93biJ9KSx0aGlzLl9mb2N1c2FibGUodGhpcy50YWJzKSx0aGlzLl9ob3ZlcmFibGUodGhpcy50YWJzKX0sX3NldHVwSGVpZ2h0U3R5bGU6ZnVuY3Rpb24odCl7dmFyIGkscz10aGlzLmVsZW1lbnQucGFyZW50KCk7ImZpbGwiPT09dD8oaT1zLmhlaWdodCgpLGktPXRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmVsZW1lbnQuc2libGluZ3MoIjp2aXNpYmxlIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcykscz10LmNzcygicG9zaXRpb24iKTsiYWJzb2x1dGUiIT09cyYmImZpeGVkIiE9PXMmJihpLT10Lm91dGVySGVpZ2h0KCEwKSl9KSx0aGlzLmVsZW1lbnQuY2hpbGRyZW4oKS5ub3QodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24oKXtpLT1lKHRoaXMpLm91dGVySGVpZ2h0KCEwKX0pLHRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmhlaWdodChNYXRoLm1heCgwLGktZSh0aGlzKS5pbm5lckhlaWdodCgpK2UodGhpcykuaGVpZ2h0KCkpKX0pLmNzcygib3ZlcmZsb3ciLCJhdXRvIikpOiJhdXRvIj09PXQmJihpPTAsdGhpcy5wYW5lbHMuZWFjaChmdW5jdGlvbigpe2k9TWF0aC5tYXgoaSxlKHRoaXMpLmhlaWdodCgiIikuaGVpZ2h0KCkpfSkuaGVpZ2h0KGkpKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnMscz10aGlzLmFjdGl2ZSxuPWUodC5jdXJyZW50VGFyZ2V0KSxhPW4uY2xvc2VzdCgibGkiKSxvPWFbMF09PT1zWzBdLHI9byYmaS5jb2xsYXBzaWJsZSxoPXI/ZSgpOnRoaXMuX2dldFBhbmVsRm9yVGFiKGEpLGw9cy5sZW5ndGg/dGhpcy5fZ2V0UGFuZWxGb3JUYWIocyk6ZSgpLHU9e29sZFRhYjpzLG9sZFBhbmVsOmwsbmV3VGFiOnI/ZSgpOmEsbmV3UGFuZWw6aH07dC5wcmV2ZW50RGVmYXVsdCgpLGEuaGFzQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIil8fGEuaGFzQ2xhc3MoInVpLXRhYnMtbG9hZGluZyIpfHx0aGlzLnJ1bm5pbmd8fG8mJiFpLmNvbGxhcHNpYmxlfHx0aGlzLl90cmlnZ2VyKCJiZWZvcmVBY3RpdmF0ZSIsdCx1KT09PSExfHwoaS5hY3RpdmU9cj8hMTp0aGlzLnRhYnMuaW5kZXgoYSksdGhpcy5hY3RpdmU9bz9lKCk6YSx0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSxsLmxlbmd0aHx8aC5sZW5ndGh8fGUuZXJyb3IoImpRdWVyeSBVSSBUYWJzOiBNaXNtYXRjaGluZyBmcmFnbWVudCBpZGVudGlmaWVyLiIpLGgubGVuZ3RoJiZ0aGlzLmxvYWQodGhpcy50YWJzLmluZGV4KGEpLHQpLHRoaXMuX3RvZ2dsZSh0LHUpKX0sX3RvZ2dsZTpmdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHMoKXthLnJ1bm5pbmc9ITEsYS5fdHJpZ2dlcigiYWN0aXZhdGUiLHQsaSl9ZnVuY3Rpb24gbigpe2kubmV3VGFiLmNsb3Nlc3QoImxpIikuYWRkQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLG8ubGVuZ3RoJiZhLm9wdGlvbnMuc2hvdz9hLl9zaG93KG8sYS5vcHRpb25zLnNob3cscyk6KG8uc2hvdygpLHMoKSl9dmFyIGE9dGhpcyxvPWkubmV3UGFuZWwscj1pLm9sZFBhbmVsO3RoaXMucnVubmluZz0hMCxyLmxlbmd0aCYmdGhpcy5vcHRpb25zLmhpZGU/dGhpcy5faGlkZShyLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7aS5vbGRUYWIuY2xvc2VzdCgibGkiKS5yZW1vdmVDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksbigpfSk6KGkub2xkVGFiLmNsb3Nlc3QoImxpIikucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLHIuaGlkZSgpLG4oKSksci5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKSxpLm9sZFRhYi5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6ImZhbHNlIiwiYXJpYS1leHBhbmRlZCI6ImZhbHNlIn0pLG8ubGVuZ3RoJiZyLmxlbmd0aD9pLm9sZFRhYi5hdHRyKCJ0YWJJbmRleCIsLTEpOm8ubGVuZ3RoJiZ0aGlzLnRhYnMuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDA9PT1lKHRoaXMpLmF0dHIoInRhYkluZGV4Iil9KS5hdHRyKCJ0YWJJbmRleCIsLTEpLG8uYXR0cigiYXJpYS1oaWRkZW4iLCJmYWxzZSIpLGkubmV3VGFiLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoidHJ1ZSIsImFyaWEtZXhwYW5kZWQiOiJ0cnVlIix0YWJJbmRleDowfSl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgaSxzPXRoaXMuX2ZpbmRBY3RpdmUodCk7c1swXSE9PXRoaXMuYWN0aXZlWzBdJiYocy5sZW5ndGh8fChzPXRoaXMuYWN0aXZlKSxpPXMuZmluZCgiLnVpLXRhYnMtYW5jaG9yIilbMF0sdGhpcy5fZXZlbnRIYW5kbGVyKHt0YXJnZXQ6aSxjdXJyZW50VGFyZ2V0OmkscHJldmVudERlZmF1bHQ6ZS5ub29wfSkpfSxfZmluZEFjdGl2ZTpmdW5jdGlvbih0KXtyZXR1cm4gdD09PSExP2UoKTp0aGlzLnRhYnMuZXEodCl9LF9nZXRJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihlPXRoaXMuYW5jaG9ycy5pbmRleCh0aGlzLmFuY2hvcnMuZmlsdGVyKCJbaHJlZiQ9JyIrZSsiJ10iKSkpLGV9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy54aHImJnRoaXMueGhyLmFib3J0KCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS10YWJzIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIHVpLXRhYnMtY29sbGFwc2libGUiKSx0aGlzLnRhYmxpc3QucmVtb3ZlQ2xhc3MoInVpLXRhYnMtbmF2IHVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIikucmVtb3ZlQXR0cigicm9sZSIpLHRoaXMuYW5jaG9ycy5yZW1vdmVDbGFzcygidWktdGFicy1hbmNob3IiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVVbmlxdWVJZCgpLHRoaXMudGFibGlzdC51bmJpbmQodGhpcy5ldmVudE5hbWVzcGFjZSksdGhpcy50YWJzLmFkZCh0aGlzLnBhbmVscykuZWFjaChmdW5jdGlvbigpe2UuZGF0YSh0aGlzLCJ1aS10YWJzLWRlc3Ryb3kiKT9lKHRoaXMpLnJlbW92ZSgpOmUodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktc3RhdGUtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIHVpLWNvcm5lci10b3AgdWktY29ybmVyLWJvdHRvbSB1aS13aWRnZXQtY29udGVudCB1aS10YWJzLWFjdGl2ZSB1aS10YWJzLXBhbmVsIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVBdHRyKCJhcmlhLWxpdmUiKS5yZW1vdmVBdHRyKCJhcmlhLWJ1c3kiKS5yZW1vdmVBdHRyKCJhcmlhLXNlbGVjdGVkIikucmVtb3ZlQXR0cigiYXJpYS1sYWJlbGxlZGJ5IikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigicm9sZSIpfSksdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiKTtpP3QuYXR0cigiYXJpYS1jb250cm9scyIsaSkucmVtb3ZlRGF0YSgidWktdGFicy1hcmlhLWNvbnRyb2xzIik6dC5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIil9KSx0aGlzLnBhbmVscy5zaG93KCksImNvbnRlbnQiIT09dGhpcy5vcHRpb25zLmhlaWdodFN0eWxlJiZ0aGlzLnBhbmVscy5jc3MoImhlaWdodCIsIiIpfSxlbmFibGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLmRpc2FibGVkO2khPT0hMSYmKHZvaWQgMD09PXQ/aT0hMToodD10aGlzLl9nZXRJbmRleCh0KSxpPWUuaXNBcnJheShpKT9lLm1hcChpLGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dD9lOm51bGx9KTplLm1hcCh0aGlzLnRhYnMsZnVuY3Rpb24oZSxpKXtyZXR1cm4gaSE9PXQ/aTpudWxsfSkpLHRoaXMuX3NldHVwRGlzYWJsZWQoaSkpfSxkaXNhYmxlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucy5kaXNhYmxlZDtpZihpIT09ITApe2lmKHZvaWQgMD09PXQpaT0hMDtlbHNle2lmKHQ9dGhpcy5fZ2V0SW5kZXgodCksLTEhPT1lLmluQXJyYXkodCxpKSlyZXR1cm47aT1lLmlzQXJyYXkoaSk/ZS5tZXJnZShbdF0saSkuc29ydCgpOlt0XX10aGlzLl9zZXR1cERpc2FibGVkKGkpfX0sbG9hZDpmdW5jdGlvbih0LGkpe3Q9dGhpcy5fZ2V0SW5kZXgodCk7dmFyIHM9dGhpcyxuPXRoaXMudGFicy5lcSh0KSxhPW4uZmluZCgiLnVpLXRhYnMtYW5jaG9yIiksbz10aGlzLl9nZXRQYW5lbEZvclRhYihuKSxyPXt0YWI6bixwYW5lbDpvfSxoPWZ1bmN0aW9uKGUsdCl7ImFib3J0Ij09PXQmJnMucGFuZWxzLnN0b3AoITEsITApLG4ucmVtb3ZlQ2xhc3MoInVpLXRhYnMtbG9hZGluZyIpLG8ucmVtb3ZlQXR0cigiYXJpYS1idXN5IiksZT09PXMueGhyJiZkZWxldGUgcy54aHJ9O3RoaXMuX2lzTG9jYWwoYVswXSl8fCh0aGlzLnhocj1lLmFqYXgodGhpcy5fYWpheFNldHRpbmdzKGEsaSxyKSksdGhpcy54aHImJiJjYW5jZWxlZCIhPT10aGlzLnhoci5zdGF0dXNUZXh0JiYobi5hZGRDbGFzcygidWktdGFicy1sb2FkaW5nIiksby5hdHRyKCJhcmlhLWJ1c3kiLCJ0cnVlIiksdGhpcy54aHIuZG9uZShmdW5jdGlvbihlLHQsbil7c2V0VGltZW91dChmdW5jdGlvbigpe28uaHRtbChlKSxzLl90cmlnZ2VyKCJsb2FkIixpLHIpLGgobix0KX0sMSl9KS5mYWlsKGZ1bmN0aW9uKGUsdCl7c2V0VGltZW91dChmdW5jdGlvbigpe2goZSx0KX0sMSl9KSkpfSxfYWpheFNldHRpbmdzOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj10aGlzO3JldHVybnt1cmw6dC5hdHRyKCJocmVmIiksYmVmb3JlU2VuZDpmdW5jdGlvbih0LGEpe3JldHVybiBuLl90cmlnZ2VyKCJiZWZvcmVMb2FkIixpLGUuZXh0ZW5kKHtqcVhIUjp0LGFqYXhTZXR0aW5nczphfSxzKSl9fX0sX2dldFBhbmVsRm9yVGFiOmZ1bmN0aW9uKHQpe3ZhciBpPWUodCkuYXR0cigiYXJpYS1jb250cm9scyIpO3JldHVybiB0aGlzLmVsZW1lbnQuZmluZCh0aGlzLl9zYW5pdGl6ZVNlbGVjdG9yKCIjIitpKSl9fSksZS53aWRnZXQoInVpLnRvb2x0aXAiLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e2NvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLmF0dHIoInRpdGxlIil8fCIiO3JldHVybiBlKCI8YT4iKS50ZXh0KHQpLmh0bWwoKX0saGlkZTohMCxpdGVtczoiW3RpdGxlXTpub3QoW2Rpc2FibGVkXSkiLHBvc2l0aW9uOntteToibGVmdCB0b3ArMTUiLGF0OiJsZWZ0IGJvdHRvbSIsY29sbGlzaW9uOiJmbGlwZml0IGZsaXAifSxzaG93OiEwLHRvb2x0aXBDbGFzczpudWxsLHRyYWNrOiExLGNsb3NlOm51bGwsb3BlbjpudWxsfSxfYWRkRGVzY3JpYmVkQnk6ZnVuY3Rpb24odCxpKXt2YXIgcz0odC5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5Iil8fCIiKS5zcGxpdCgvXHMrLyk7cy5wdXNoKGkpLHQuZGF0YSgidWktdG9vbHRpcC1pZCIsaSkuYXR0cigiYXJpYS1kZXNjcmliZWRieSIsZS50cmltKHMuam9pbigiICIpKSl9LF9yZW1vdmVEZXNjcmliZWRCeTpmdW5jdGlvbih0KXt2YXIgaT10LmRhdGEoInVpLXRvb2x0aXAtaWQiKSxzPSh0LmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKXx8IiIpLnNwbGl0KC9ccysvKSxuPWUuaW5BcnJheShpLHMpOy0xIT09biYmcy5zcGxpY2UobiwxKSx0LnJlbW92ZURhdGEoInVpLXRvb2x0aXAtaWQiKSxzPWUudHJpbShzLmpvaW4oIiAiKSkscz90LmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLHMpOnQucmVtb3ZlQXR0cigiYXJpYS1kZXNjcmliZWRieSIpfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fb24oe21vdXNlb3Zlcjoib3BlbiIsZm9jdXNpbjoib3BlbiJ9KSx0aGlzLnRvb2x0aXBzPXt9LHRoaXMucGFyZW50cz17fSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGUoKSx0aGlzLmxpdmVSZWdpb249ZSgiPGRpdj4iKS5hdHRyKHtyb2xlOiJsb2ciLCJhcmlhLWxpdmUiOiJhc3NlcnRpdmUiLCJhcmlhLXJlbGV2YW50IjoiYWRkaXRpb25zIn0pLmFkZENsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKS5hcHBlbmRUbyh0aGlzLmRvY3VtZW50WzBdLmJvZHkpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsaSl7dmFyIHM9dGhpcztyZXR1cm4iZGlzYWJsZWQiPT09dD8odGhpc1tpPyJfZGlzYWJsZSI6Il9lbmFibGUiXSgpLHRoaXMub3B0aW9uc1t0XT1pLHZvaWQgMCk6KHRoaXMuX3N1cGVyKHQsaSksImNvbnRlbnQiPT09dCYmZS5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24oZSx0KXtzLl91cGRhdGVDb250ZW50KHQuZWxlbWVudCl9KSx2b2lkIDApfSxfZGlzYWJsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7ZS5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24oaSxzKXt2YXIgbj1lLkV2ZW50KCJibHVyIik7bi50YXJnZXQ9bi5jdXJyZW50VGFyZ2V0PXMuZWxlbWVudFswXSx0LmNsb3NlKG4sITApfSksdGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dC5pcygiW3RpdGxlXSIpJiZ0LmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiLHQuYXR0cigidGl0bGUiKSkucmVtb3ZlQXR0cigidGl0bGUiKX0pfSxfZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dC5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikmJnQuYXR0cigidGl0bGUiLHQuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpKX0pfSxvcGVuOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMscz1lKHQ/dC50YXJnZXQ6dGhpcy5lbGVtZW50KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5pdGVtcyk7cy5sZW5ndGgmJiFzLmRhdGEoInVpLXRvb2x0aXAtaWQiKSYmKHMuYXR0cigidGl0bGUiKSYmcy5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIixzLmF0dHIoInRpdGxlIikpLHMuZGF0YSgidWktdG9vbHRpcC1vcGVuIiwhMCksdCYmIm1vdXNlb3ZlciI9PT10LnR5cGUmJnMucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxzPWUodGhpcyk7cy5kYXRhKCJ1aS10b29sdGlwLW9wZW4iKSYmKHQ9ZS5FdmVudCgiYmx1ciIpLHQudGFyZ2V0PXQuY3VycmVudFRhcmdldD10aGlzLGkuY2xvc2UodCwhMCkpLHMuYXR0cigidGl0bGUiKSYmKHMudW5pcXVlSWQoKSxpLnBhcmVudHNbdGhpcy5pZF09e2VsZW1lbnQ6dGhpcyx0aXRsZTpzLmF0dHIoInRpdGxlIil9LHMuYXR0cigidGl0bGUiLCIiKSl9KSx0aGlzLl9yZWdpc3RlckNsb3NlSGFuZGxlcnModCxzKSx0aGlzLl91cGRhdGVDb250ZW50KHMsdCkpfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbihlLHQpe3ZhciBpLHM9dGhpcy5vcHRpb25zLmNvbnRlbnQsbj10aGlzLGE9dD90LnR5cGU6bnVsbDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHM/dGhpcy5fb3Blbih0LGUscyk6KGk9cy5jYWxsKGVbMF0sZnVuY3Rpb24oaSl7bi5fZGVsYXkoZnVuY3Rpb24oKXtlLmRhdGEoInVpLXRvb2x0aXAtb3BlbiIpJiYodCYmKHQudHlwZT1hKSx0aGlzLl9vcGVuKHQsZSxpKSl9KX0pLGkmJnRoaXMuX29wZW4odCxlLGkpLHZvaWQgMCl9LF9vcGVuOmZ1bmN0aW9uKHQsaSxzKXtmdW5jdGlvbiBuKGUpe2wub2Y9ZSxvLmlzKCI6aGlkZGVuIil8fG8ucG9zaXRpb24obCl9dmFyIGEsbyxyLGgsbD1lLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pO2lmKHMpe2lmKGE9dGhpcy5fZmluZChpKSlyZXR1cm4gYS50b29sdGlwLmZpbmQoIi51aS10b29sdGlwLWNvbnRlbnQiKS5odG1sKHMpLHZvaWQgMDtpLmlzKCJbdGl0bGVdIikmJih0JiYibW91c2VvdmVyIj09PXQudHlwZT9pLmF0dHIoInRpdGxlIiwiIik6aS5yZW1vdmVBdHRyKCJ0aXRsZSIpKSxhPXRoaXMuX3Rvb2x0aXAoaSksbz1hLnRvb2x0aXAsdGhpcy5fYWRkRGVzY3JpYmVkQnkoaSxvLmF0dHIoImlkIikpLG8uZmluZCgiLnVpLXRvb2x0aXAtY29udGVudCIpLmh0bWwocyksdGhpcy5saXZlUmVnaW9uLmNoaWxkcmVuKCkuaGlkZSgpLHMuY2xvbmU/KGg9cy5jbG9uZSgpLGgucmVtb3ZlQXR0cigiaWQiKS5maW5kKCJbaWRdIikucmVtb3ZlQXR0cigiaWQiKSk6aD1zLGUoIjxkaXY+IikuaHRtbChoKS5hcHBlbmRUbyh0aGlzLmxpdmVSZWdpb24pLHRoaXMub3B0aW9ucy50cmFjayYmdCYmL15tb3VzZS8udGVzdCh0LnR5cGUpPyh0aGlzLl9vbih0aGlzLmRvY3VtZW50LHttb3VzZW1vdmU6bn0pLG4odCkpOm8ucG9zaXRpb24oZS5leHRlbmQoe29mOml9LHRoaXMub3B0aW9ucy5wb3NpdGlvbikpLG8uaGlkZSgpLHRoaXMuX3Nob3cobyx0aGlzLm9wdGlvbnMuc2hvdyksdGhpcy5vcHRpb25zLnNob3cmJnRoaXMub3B0aW9ucy5zaG93LmRlbGF5JiYocj10aGlzLmRlbGF5ZWRTaG93PXNldEludGVydmFsKGZ1bmN0aW9uKCl7by5pcygiOnZpc2libGUiKSYmKG4obC5vZiksY2xlYXJJbnRlcnZhbChyKSl9LGUuZnguaW50ZXJ2YWwpKSx0aGlzLl90cmlnZ2VyKCJvcGVuIix0LHt0b29sdGlwOm99KX19LF9yZWdpc3RlckNsb3NlSGFuZGxlcnM6ZnVuY3Rpb24odCxpKXt2YXIgcz17a2V5dXA6ZnVuY3Rpb24odCl7aWYodC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLkVTQ0FQRSl7dmFyIHM9ZS5FdmVudCh0KTtzLmN1cnJlbnRUYXJnZXQ9aVswXSx0aGlzLmNsb3NlKHMsITApfX19O2lbMF0hPT10aGlzLmVsZW1lbnRbMF0mJihzLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3JlbW92ZVRvb2x0aXAodGhpcy5fZmluZChpKS50b29sdGlwKX0pLHQmJiJtb3VzZW92ZXIiIT09dC50eXBlfHwocy5tb3VzZWxlYXZlPSJjbG9zZSIpLHQmJiJmb2N1c2luIiE9PXQudHlwZXx8KHMuZm9jdXNvdXQ9ImNsb3NlIiksdGhpcy5fb24oITAsaSxzKX0sY2xvc2U6ZnVuY3Rpb24odCl7dmFyIGkscz10aGlzLG49ZSh0P3QuY3VycmVudFRhcmdldDp0aGlzLmVsZW1lbnQpLGE9dGhpcy5fZmluZChuKTtyZXR1cm4gYT8oaT1hLnRvb2x0aXAsYS5jbG9zaW5nfHwoY2xlYXJJbnRlcnZhbCh0aGlzLmRlbGF5ZWRTaG93KSxuLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSYmIW4uYXR0cigidGl0bGUiKSYmbi5hdHRyKCJ0aXRsZSIsbi5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikpLHRoaXMuX3JlbW92ZURlc2NyaWJlZEJ5KG4pLGEuaGlkaW5nPSEwLGkuc3RvcCghMCksdGhpcy5faGlkZShpLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7cy5fcmVtb3ZlVG9vbHRpcChlKHRoaXMpKX0pLG4ucmVtb3ZlRGF0YSgidWktdG9vbHRpcC1vcGVuIiksdGhpcy5fb2ZmKG4sIm1vdXNlbGVhdmUgZm9jdXNvdXQga2V5dXAiKSxuWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLl9vZmYobiwicmVtb3ZlIiksdGhpcy5fb2ZmKHRoaXMuZG9jdW1lbnQsIm1vdXNlbW92ZSIpLHQmJiJtb3VzZWxlYXZlIj09PXQudHlwZSYmZS5lYWNoKHRoaXMucGFyZW50cyxmdW5jdGlvbih0LGkpe2UoaS5lbGVtZW50KS5hdHRyKCJ0aXRsZSIsaS50aXRsZSksZGVsZXRlIHMucGFyZW50c1t0XX0pLGEuY2xvc2luZz0hMCx0aGlzLl90cmlnZ2VyKCJjbG9zZSIsdCx7dG9vbHRpcDppfSksYS5oaWRpbmd8fChhLmNsb3Npbmc9ITEpKSx2b2lkIDApOihuLnJlbW92ZURhdGEoInVpLXRvb2x0aXAtb3BlbiIpLHZvaWQgMCl9LF90b29sdGlwOmZ1bmN0aW9uKHQpe3ZhciBpPWUoIjxkaXY+IikuYXR0cigicm9sZSIsInRvb2x0aXAiKS5hZGRDbGFzcygidWktdG9vbHRpcCB1aS13aWRnZXQgdWktY29ybmVyLWFsbCB1aS13aWRnZXQtY29udGVudCAiKyh0aGlzLm9wdGlvbnMudG9vbHRpcENsYXNzfHwiIikpLHM9aS51bmlxdWVJZCgpLmF0dHIoImlkIik7cmV0dXJuIGUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLXRvb2x0aXAtY29udGVudCIpLmFwcGVuZFRvKGkpLGkuYXBwZW5kVG8odGhpcy5kb2N1bWVudFswXS5ib2R5KSx0aGlzLnRvb2x0aXBzW3NdPXtlbGVtZW50OnQsdG9vbHRpcDppfX0sX2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhKCJ1aS10b29sdGlwLWlkIik7cmV0dXJuIHQ/dGhpcy50b29sdGlwc1t0XTpudWxsfSxfcmVtb3ZlVG9vbHRpcDpmdW5jdGlvbihlKXtlLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLnRvb2x0aXBzW2UuYXR0cigiaWQiKV19LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztlLmVhY2godGhpcy50b29sdGlwcyxmdW5jdGlvbihpLHMpe3ZhciBuPWUuRXZlbnQoImJsdXIiKSxhPXMuZWxlbWVudDtuLnRhcmdldD1uLmN1cnJlbnRUYXJnZXQ9YVswXSx0LmNsb3NlKG4sITApLGUoIiMiK2kpLnJlbW92ZSgpLGEuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpJiYoYS5hdHRyKCJ0aXRsZSIpfHxhLmF0dHIoInRpdGxlIixhLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSksYS5yZW1vdmVEYXRhKCJ1aS10b29sdGlwLXRpdGxlIikpfSksdGhpcy5saXZlUmVnaW9uLnJlbW92ZSgpfX0pO3ZhciBjPSJ1aS1lZmZlY3RzLSIscD1lO2UuZWZmZWN0cz17ZWZmZWN0Ont9fSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoZSx0LGkpe3ZhciBzPWRbdC50eXBlXXx8e307cmV0dXJuIG51bGw9PWU/aXx8IXQuZGVmP251bGw6dC5kZWY6KGU9cy5mbG9vcj9+fmU6cGFyc2VGbG9hdChlKSxpc05hTihlKT90LmRlZjpzLm1vZD8oZStzLm1vZCklcy5tb2Q6MD5lPzA6ZT5zLm1heD9zLm1heDplKX1mdW5jdGlvbiBzKGkpe3ZhciBzPWwoKSxuPXMuX3JnYmE9W107cmV0dXJuIGk9aS50b0xvd2VyQ2FzZSgpLGYoaCxmdW5jdGlvbihlLGEpe3ZhciBvLHI9YS5yZS5leGVjKGkpLGg9ciYmYS5wYXJzZShyKSxsPWEuc3BhY2V8fCJyZ2JhIjtyZXR1cm4gaD8obz1zW2xdKGgpLHNbdVtsXS5jYWNoZV09b1t1W2xdLmNhY2hlXSxuPXMuX3JnYmE9by5fcmdiYSwhMSk6dH0pLG4ubGVuZ3RoPygiMCwwLDAsMCI9PT1uLmpvaW4oKSYmZS5leHRlbmQobixhLnRyYW5zcGFyZW50KSxzKTphW2ldfWZ1bmN0aW9uIG4oZSx0LGkpe3JldHVybiBpPShpKzEpJTEsMT42Kmk/ZSs2Kih0LWUpKmk6MT4yKmk/dDoyPjMqaT9lKzYqKHQtZSkqKDIvMy1pKTplfXZhciBhLG89ImJhY2tncm91bmRDb2xvciBib3JkZXJCb3R0b21Db2xvciBib3JkZXJMZWZ0Q29sb3IgYm9yZGVyUmlnaHRDb2xvciBib3JkZXJUb3BDb2xvciBjb2xvciBjb2x1bW5SdWxlQ29sb3Igb3V0bGluZUNvbG9yIHRleHREZWNvcmF0aW9uQ29sb3IgdGV4dEVtcGhhc2lzQ29sb3IiLHI9L14oW1wtK10pPVxzKihcZCtcLj9cZCopLyxoPVt7cmU6L3JnYmE/XChccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKig/OixccyooXGQ/KD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bZVsxXSxlWzJdLGVbM10sZVs0XV19fSx7cmU6L3JnYmE/XChccyooXGQrKD86XC5cZCspPylcJVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKig/OixccyooXGQ/KD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bMi41NSplWzFdLDIuNTUqZVsyXSwyLjU1KmVbM10sZVs0XV19fSx7cmU6LyMoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkvLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltwYXJzZUludChlWzFdLDE2KSxwYXJzZUludChlWzJdLDE2KSxwYXJzZUludChlWzNdLDE2KV19fSx7cmU6LyMoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkvLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltwYXJzZUludChlWzFdK2VbMV0sMTYpLHBhcnNlSW50KGVbMl0rZVsyXSwxNikscGFyc2VJbnQoZVszXStlWzNdLDE2KV19fSx7cmU6L2hzbGE/XChccyooXGQrKD86XC5cZCspPylccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyooPzosXHMqKFxkPyg/OlwuXGQrKT8pXHMqKT9cKS8sc3BhY2U6ImhzbGEiLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF1dfX1dLGw9ZS5Db2xvcj1mdW5jdGlvbih0LGkscyxuKXtyZXR1cm4gbmV3IGUuQ29sb3IuZm4ucGFyc2UodCxpLHMsbil9LHU9e3JnYmE6e3Byb3BzOntyZWQ6e2lkeDowLHR5cGU6ImJ5dGUifSxncmVlbjp7aWR4OjEsdHlwZToiYnl0ZSJ9LGJsdWU6e2lkeDoyLHR5cGU6ImJ5dGUifX19LGhzbGE6e3Byb3BzOntodWU6e2lkeDowLHR5cGU6ImRlZ3JlZXMifSxzYXR1cmF0aW9uOntpZHg6MSx0eXBlOiJwZXJjZW50In0sbGlnaHRuZXNzOntpZHg6Mix0eXBlOiJwZXJjZW50In19fX0sZD17ImJ5dGUiOntmbG9vcjohMCxtYXg6MjU1fSxwZXJjZW50OnttYXg6MX0sZGVncmVlczp7bW9kOjM2MCxmbG9vcjohMH19LGM9bC5zdXBwb3J0PXt9LHA9ZSgiPHA+IilbMF0sZj1lLmVhY2g7cC5zdHlsZS5jc3NUZXh0PSJiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMSwxLDEsLjUpIixjLnJnYmE9cC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IuaW5kZXhPZigicmdiYSIpPi0xLGYodSxmdW5jdGlvbihlLHQpe3QuY2FjaGU9Il8iK2UsdC5wcm9wcy5hbHBoYT17aWR4OjMsdHlwZToicGVyY2VudCIsZGVmOjF9fSksbC5mbj1lLmV4dGVuZChsLnByb3RvdHlwZSx7cGFyc2U6ZnVuY3Rpb24obixvLHIsaCl7aWYobj09PXQpcmV0dXJuIHRoaXMuX3JnYmE9W251bGwsbnVsbCxudWxsLG51bGxdLHRoaXM7KG4uanF1ZXJ5fHxuLm5vZGVUeXBlKSYmKG49ZShuKS5jc3Mobyksbz10KTt2YXIgZD10aGlzLGM9ZS50eXBlKG4pLHA9dGhpcy5fcmdiYT1bXTtyZXR1cm4gbyE9PXQmJihuPVtuLG8scixoXSxjPSJhcnJheSIpLCJzdHJpbmciPT09Yz90aGlzLnBhcnNlKHMobil8fGEuX2RlZmF1bHQpOiJhcnJheSI9PT1jPyhmKHUucmdiYS5wcm9wcyxmdW5jdGlvbihlLHQpe3BbdC5pZHhdPWkoblt0LmlkeF0sdCl9KSx0aGlzKToib2JqZWN0Ij09PWM/KG4gaW5zdGFuY2VvZiBsP2YodSxmdW5jdGlvbihlLHQpe25bdC5jYWNoZV0mJihkW3QuY2FjaGVdPW5bdC5jYWNoZV0uc2xpY2UoKSl9KTpmKHUsZnVuY3Rpb24odCxzKXt2YXIgYT1zLmNhY2hlO2Yocy5wcm9wcyxmdW5jdGlvbihlLHQpe2lmKCFkW2FdJiZzLnRvKXtpZigiYWxwaGEiPT09ZXx8bnVsbD09bltlXSlyZXR1cm47ZFthXT1zLnRvKGQuX3JnYmEpfWRbYV1bdC5pZHhdPWkobltlXSx0LCEwKX0pLGRbYV0mJjA+ZS5pbkFycmF5KG51bGwsZFthXS5zbGljZSgwLDMpKSYmKGRbYV1bM109MSxzLmZyb20mJihkLl9yZ2JhPXMuZnJvbShkW2FdKSkpfSksdGhpcyk6dH0saXM6ZnVuY3Rpb24oZSl7dmFyIGk9bChlKSxzPSEwLG49dGhpcztyZXR1cm4gZih1LGZ1bmN0aW9uKGUsYSl7dmFyIG8scj1pW2EuY2FjaGVdO3JldHVybiByJiYobz1uW2EuY2FjaGVdfHxhLnRvJiZhLnRvKG4uX3JnYmEpfHxbXSxmKGEucHJvcHMsZnVuY3Rpb24oZSxpKXtyZXR1cm4gbnVsbCE9cltpLmlkeF0/cz1yW2kuaWR4XT09PW9baS5pZHhdOnR9KSksc30pLHN9LF9zcGFjZTpmdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcztyZXR1cm4gZih1LGZ1bmN0aW9uKGkscyl7dFtzLmNhY2hlXSYmZS5wdXNoKGkpfSksZS5wb3AoKX0sdHJhbnNpdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBzPWwoZSksbj1zLl9zcGFjZSgpLGE9dVtuXSxvPTA9PT10aGlzLmFscGhhKCk/bCgidHJhbnNwYXJlbnQiKTp0aGlzLHI9b1thLmNhY2hlXXx8YS50byhvLl9yZ2JhKSxoPXIuc2xpY2UoKTtyZXR1cm4gcz1zW2EuY2FjaGVdLGYoYS5wcm9wcyxmdW5jdGlvbihlLG4pe3ZhciBhPW4uaWR4LG89clthXSxsPXNbYV0sdT1kW24udHlwZV18fHt9O251bGwhPT1sJiYobnVsbD09PW8/aFthXT1sOih1Lm1vZCYmKGwtbz51Lm1vZC8yP28rPXUubW9kOm8tbD51Lm1vZC8yJiYoby09dS5tb2QpKSxoW2FdPWkoKGwtbykqdCtvLG4pKSl9KSx0aGlzW25dKGgpfSxibGVuZDpmdW5jdGlvbih0KXtpZigxPT09dGhpcy5fcmdiYVszXSlyZXR1cm4gdGhpczt2YXIgaT10aGlzLl9yZ2JhLnNsaWNlKCkscz1pLnBvcCgpLG49bCh0KS5fcmdiYTtyZXR1cm4gbChlLm1hcChpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKDEtcykqblt0XStzKmV9KSl9LHRvUmdiYVN0cmluZzpmdW5jdGlvbigpe3ZhciB0PSJyZ2JhKCIsaT1lLm1hcCh0aGlzLl9yZ2JhLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/dD4yPzE6MDplfSk7cmV0dXJuIDE9PT1pWzNdJiYoaS5wb3AoKSx0PSJyZ2IoIiksdCtpLmpvaW4oKSsiKSJ9LHRvSHNsYVN0cmluZzpmdW5jdGlvbigpe3ZhciB0PSJoc2xhKCIsaT1lLm1hcCh0aGlzLmhzbGEoKSxmdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lJiYoZT10PjI/MTowKSx0JiYzPnQmJihlPU1hdGgucm91bmQoMTAwKmUpKyIlIiksZX0pO3JldHVybiAxPT09aVszXSYmKGkucG9wKCksdD0iaHNsKCIpLHQraS5qb2luKCkrIikifSx0b0hleFN0cmluZzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9yZ2JhLnNsaWNlKCkscz1pLnBvcCgpO3JldHVybiB0JiZpLnB1c2gofn4oMjU1KnMpKSwiIyIrZS5tYXAoaSxmdW5jdGlvbihlKXtyZXR1cm4gZT0oZXx8MCkudG9TdHJpbmcoMTYpLDE9PT1lLmxlbmd0aD8iMCIrZTplfSkuam9pbigiIil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9yZ2JhWzNdPyJ0cmFuc3BhcmVudCI6dGhpcy50b1JnYmFTdHJpbmcoKX19KSxsLmZuLnBhcnNlLnByb3RvdHlwZT1sLmZuLHUuaHNsYS50bz1mdW5jdGlvbihlKXtpZihudWxsPT1lWzBdfHxudWxsPT1lWzFdfHxudWxsPT1lWzJdKXJldHVybltudWxsLG51bGwsbnVsbCxlWzNdXTt2YXIgdCxpLHM9ZVswXS8yNTUsbj1lWzFdLzI1NSxhPWVbMl0vMjU1LG89ZVszXSxyPU1hdGgubWF4KHMsbixhKSxoPU1hdGgubWluKHMsbixhKSxsPXItaCx1PXIraCxkPS41KnU7cmV0dXJuIHQ9aD09PXI/MDpzPT09cj82MCoobi1hKS9sKzM2MDpuPT09cj82MCooYS1zKS9sKzEyMDo2MCoocy1uKS9sKzI0MCxpPTA9PT1sPzA6LjU+PWQ/bC91OmwvKDItdSksW01hdGgucm91bmQodCklMzYwLGksZCxudWxsPT1vPzE6b119LHUuaHNsYS5mcm9tPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWVbMF18fG51bGw9PWVbMV18fG51bGw9PWVbMl0pcmV0dXJuW251bGwsbnVsbCxudWxsLGVbM11dO3ZhciB0PWVbMF0vMzYwLGk9ZVsxXSxzPWVbMl0sYT1lWzNdLG89LjU+PXM/cyooMStpKTpzK2ktcyppLHI9MipzLW87cmV0dXJuW01hdGgucm91bmQoMjU1Km4ocixvLHQrMS8zKSksTWF0aC5yb3VuZCgyNTUqbihyLG8sdCkpLE1hdGgucm91bmQoMjU1Km4ocixvLHQtMS8zKSksYV19LGYodSxmdW5jdGlvbihzLG4pe3ZhciBhPW4ucHJvcHMsbz1uLmNhY2hlLGg9bi50byx1PW4uZnJvbTtsLmZuW3NdPWZ1bmN0aW9uKHMpe2lmKGgmJiF0aGlzW29dJiYodGhpc1tvXT1oKHRoaXMuX3JnYmEpKSxzPT09dClyZXR1cm4gdGhpc1tvXS5zbGljZSgpO3ZhciBuLHI9ZS50eXBlKHMpLGQ9ImFycmF5Ij09PXJ8fCJvYmplY3QiPT09cj9zOmFyZ3VtZW50cyxjPXRoaXNbb10uc2xpY2UoKTtyZXR1cm4gZihhLGZ1bmN0aW9uKGUsdCl7dmFyIHM9ZFsib2JqZWN0Ij09PXI/ZTp0LmlkeF07bnVsbD09cyYmKHM9Y1t0LmlkeF0pLGNbdC5pZHhdPWkocyx0KX0pLHU/KG49bCh1KGMpKSxuW29dPWMsbik6bChjKX0sZihhLGZ1bmN0aW9uKHQsaSl7bC5mblt0XXx8KGwuZm5bdF09ZnVuY3Rpb24obil7dmFyIGEsbz1lLnR5cGUobiksaD0iYWxwaGEiPT09dD90aGlzLl9oc2xhPyJoc2xhIjoicmdiYSI6cyxsPXRoaXNbaF0oKSx1PWxbaS5pZHhdO3JldHVybiJ1bmRlZmluZWQiPT09bz91OigiZnVuY3Rpb24iPT09byYmKG49bi5jYWxsKHRoaXMsdSksbz1lLnR5cGUobikpLG51bGw9PW4mJmkuZW1wdHk/dGhpczooInN0cmluZyI9PT1vJiYoYT1yLmV4ZWMobiksYSYmKG49dStwYXJzZUZsb2F0KGFbMl0pKigiKyI9PT1hWzFdPzE6LTEpKSksbFtpLmlkeF09bix0aGlzW2hdKGwpKSl9KX0pfSksbC5ob29rPWZ1bmN0aW9uKHQpe3ZhciBpPXQuc3BsaXQoIiAiKTtmKGksZnVuY3Rpb24odCxpKXtlLmNzc0hvb2tzW2ldPXtzZXQ6ZnVuY3Rpb24odCxuKXt2YXIgYSxvLHI9IiI7aWYoInRyYW5zcGFyZW50IiE9PW4mJigic3RyaW5nIiE9PWUudHlwZShuKXx8KGE9cyhuKSkpKXtpZihuPWwoYXx8biksIWMucmdiYSYmMSE9PW4uX3JnYmFbM10pe2ZvcihvPSJiYWNrZ3JvdW5kQ29sb3IiPT09aT90LnBhcmVudE5vZGU6dDsoIiI9PT1yfHwidHJhbnNwYXJlbnQiPT09cikmJm8mJm8uc3R5bGU7KXRyeXtyPWUuY3NzKG8sImJhY2tncm91bmRDb2xvciIpLG89by5wYXJlbnROb2RlfWNhdGNoKGgpe31uPW4uYmxlbmQociYmInRyYW5zcGFyZW50IiE9PXI/cjoiX2RlZmF1bHQiKX1uPW4udG9SZ2JhU3RyaW5nKCl9dHJ5e3Quc3R5bGVbaV09bn1jYXRjaChoKXt9fX0sZS5meC5zdGVwW2ldPWZ1bmN0aW9uKHQpe3QuY29sb3JJbml0fHwodC5zdGFydD1sKHQuZWxlbSxpKSx0LmVuZD1sKHQuZW5kKSx0LmNvbG9ySW5pdD0hMCksZS5jc3NIb29rc1tpXS5zZXQodC5lbGVtLHQuc3RhcnQudHJhbnNpdGlvbih0LmVuZCx0LnBvcykpfX0pfSxsLmhvb2sobyksZS5jc3NIb29rcy5ib3JkZXJDb2xvcj17ZXhwYW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBmKFsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sZnVuY3Rpb24oaSxzKXt0WyJib3JkZXIiK3MrIkNvbG9yIl09ZX0pLHR9fSxhPWUuQ29sb3IubmFtZXM9e2FxdWE6IiMwMGZmZmYiLGJsYWNrOiIjMDAwMDAwIixibHVlOiIjMDAwMGZmIixmdWNoc2lhOiIjZmYwMGZmIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsbGltZToiIzAwZmYwMCIsbWFyb29uOiIjODAwMDAwIixuYXZ5OiIjMDAwMDgwIixvbGl2ZToiIzgwODAwMCIscHVycGxlOiIjODAwMDgwIixyZWQ6IiNmZjAwMDAiLHNpbHZlcjoiI2MwYzBjMCIsdGVhbDoiIzAwODA4MCIsd2hpdGU6IiNmZmZmZmYiLHllbGxvdzoiI2ZmZmYwMCIsdHJhbnNwYXJlbnQ6W251bGwsbnVsbCxudWxsLDBdLF9kZWZhdWx0OiIjZmZmZmZmIn19KHApLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgaSxzLG49dC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3P3Qub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCk6dC5jdXJyZW50U3R5bGUsYT17fTtpZihuJiZuLmxlbmd0aCYmblswXSYmbltuWzBdXSlmb3Iocz1uLmxlbmd0aDtzLS07KWk9bltzXSwic3RyaW5nIj09dHlwZW9mIG5baV0mJihhW2UuY2FtZWxDYXNlKGkpXT1uW2ldKTtlbHNlIGZvcihpIGluIG4pInN0cmluZyI9PXR5cGVvZiBuW2ldJiYoYVtpXT1uW2ldKTtyZXR1cm4gYX1mdW5jdGlvbiBpKHQsaSl7dmFyIHMsYSxvPXt9O2ZvcihzIGluIGkpYT1pW3NdLHRbc10hPT1hJiYobltzXXx8KGUuZnguc3RlcFtzXXx8IWlzTmFOKHBhcnNlRmxvYXQoYSkpKSYmKG9bc109YSkpO3JldHVybiBvfXZhciBzPVsiYWRkIiwicmVtb3ZlIiwidG9nZ2xlIl0sbj17Ym9yZGVyOjEsYm9yZGVyQm90dG9tOjEsYm9yZGVyQ29sb3I6MSxib3JkZXJMZWZ0OjEsYm9yZGVyUmlnaHQ6MSxib3JkZXJUb3A6MSxib3JkZXJXaWR0aDoxLG1hcmdpbjoxLHBhZGRpbmc6MX07ZS5lYWNoKFsiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlckJvdHRvbVN0eWxlIiwiYm9yZGVyVG9wU3R5bGUiXSxmdW5jdGlvbih0LGkpe2UuZnguc3RlcFtpXT1mdW5jdGlvbihlKXsoIm5vbmUiIT09ZS5lbmQmJiFlLnNldEF0dHJ8fDE9PT1lLnBvcyYmIWUuc2V0QXR0cikmJihwLnN0eWxlKGUuZWxlbSxpLGUuZW5kKSxlLnNldEF0dHI9ITApfX0pLGUuZm4uYWRkQmFja3x8KGUuZm4uYWRkQmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9KSxlLmVmZmVjdHMuYW5pbWF0ZUNsYXNzPWZ1bmN0aW9uKG4sYSxvLHIpe3ZhciBoPWUuc3BlZWQoYSxvLHIpO3JldHVybiB0aGlzLnF1ZXVlKGZ1bmN0aW9uKCl7dmFyIGEsbz1lKHRoaXMpLHI9by5hdHRyKCJjbGFzcyIpfHwiIixsPWguY2hpbGRyZW4/by5maW5kKCIqIikuYWRkQmFjaygpOm87bD1sLm1hcChmdW5jdGlvbigpe3ZhciBpPWUodGhpcyk7cmV0dXJue2VsOmksc3RhcnQ6dCh0aGlzKX19KSxhPWZ1bmN0aW9uKCl7ZS5lYWNoKHMsZnVuY3Rpb24oZSx0KXtuW3RdJiZvW3QrIkNsYXNzIl0oblt0XSl9KX0sYSgpLGw9bC5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmQ9dCh0aGlzLmVsWzBdKSx0aGlzLmRpZmY9aSh0aGlzLnN0YXJ0LHRoaXMuZW5kKSx0aGlzfSksby5hdHRyKCJjbGFzcyIsciksbD1sLm1hcChmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT1lLkRlZmVycmVkKCkscz1lLmV4dGVuZCh7fSxoLHtxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpe2kucmVzb2x2ZSh0KX19KTtyZXR1cm4gdGhpcy5lbC5hbmltYXRlKHRoaXMuZGlmZixzKSxpLnByb21pc2UoKX0pLGUud2hlbi5hcHBseShlLGwuZ2V0KCkpLmRvbmUoZnVuY3Rpb24oKXthKCksZS5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWw7ZS5lYWNoKHRoaXMuZGlmZixmdW5jdGlvbihlKXt0LmNzcyhlLCIiKX0pfSksaC5jb21wbGV0ZS5jYWxsKG9bMF0pfSl9KX0sZS5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpLHMsbixhKXtyZXR1cm4gcz9lLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7YWRkOml9LHMsbixhKTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KGUuZm4uYWRkQ2xhc3MpLHJlbW92ZUNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpLHMsbixhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP2UuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHtyZW1vdmU6aX0scyxuLGEpOnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oZS5mbi5yZW1vdmVDbGFzcyksdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkscyxuLGEsbyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygc3x8dm9pZCAwPT09cz9uP2UuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHM/e2FkZDppfTp7cmVtb3ZlOml9LG4sYSxvKTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7dG9nZ2xlOml9LHMsbixhKX19KGUuZm4udG9nZ2xlQ2xhc3MpLHN3aXRjaENsYXNzOmZ1bmN0aW9uKHQsaSxzLG4sYSl7cmV0dXJuIGUuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHthZGQ6aSxyZW1vdmU6dH0scyxuLGEpfX0pfSgpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGkscyxuKXtyZXR1cm4gZS5pc1BsYWluT2JqZWN0KHQpJiYoaT10LHQ9dC5lZmZlY3QpLHQ9e2VmZmVjdDp0fSxudWxsPT1pJiYoaT17fSksZS5pc0Z1bmN0aW9uKGkpJiYobj1pLHM9bnVsbCxpPXt9KSwoIm51bWJlciI9PXR5cGVvZiBpfHxlLmZ4LnNwZWVkc1tpXSkmJihuPXMscz1pLGk9e30pLGUuaXNGdW5jdGlvbihzKSYmKG49cyxzPW51bGwpLGkmJmUuZXh0ZW5kKHQsaSkscz1zfHxpLmR1cmF0aW9uLHQuZHVyYXRpb249ZS5meC5vZmY/MDoibnVtYmVyIj09dHlwZW9mIHM/czpzIGluIGUuZnguc3BlZWRzP2UuZnguc3BlZWRzW3NdOmUuZnguc3BlZWRzLl9kZWZhdWx0LHQuY29tcGxldGU9bnx8aS5jb21wbGV0ZSx0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIXR8fCJudW1iZXIiPT10eXBlb2YgdHx8ZS5meC5zcGVlZHNbdF0/ITA6InN0cmluZyIhPXR5cGVvZiB0fHxlLmVmZmVjdHMuZWZmZWN0W3RdP2UuaXNGdW5jdGlvbih0KT8hMDoib2JqZWN0IiE9dHlwZW9mIHR8fHQuZWZmZWN0PyExOiEwOiEwfWUuZXh0ZW5kKGUuZWZmZWN0cyx7dmVyc2lvbjoiMS4xMS40IixzYXZlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPTA7dC5sZW5ndGg+aTtpKyspbnVsbCE9PXRbaV0mJmUuZGF0YShjK3RbaV0sZVswXS5zdHlsZVt0W2ldXSl9LHJlc3RvcmU6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzO2ZvcihzPTA7dC5sZW5ndGg+cztzKyspbnVsbCE9PXRbc10mJihpPWUuZGF0YShjK3Rbc10pLHZvaWQgMD09PWkmJihpPSIiKSxlLmNzcyh0W3NdLGkpKX0sc2V0TW9kZTpmdW5jdGlvbihlLHQpe3JldHVybiJ0b2dnbGUiPT09dCYmKHQ9ZS5pcygiOmhpZGRlbiIpPyJzaG93IjoiaGlkZSIpLHR9LGdldEJhc2VsaW5lOmZ1bmN0aW9uKGUsdCl7dmFyIGkscztzd2l0Y2goZVswXSl7Y2FzZSJ0b3AiOmk9MDticmVhaztjYXNlIm1pZGRsZSI6aT0uNTticmVhaztjYXNlImJvdHRvbSI6aT0xO2JyZWFrO2RlZmF1bHQ6aT1lWzBdL3QuaGVpZ2h0fXN3aXRjaChlWzFdKXtjYXNlImxlZnQiOnM9MDticmVhaztjYXNlImNlbnRlciI6cz0uNTticmVhaztjYXNlInJpZ2h0IjpzPTE7YnJlYWs7ZGVmYXVsdDpzPWVbMV0vdC53aWR0aH1yZXR1cm57eDpzLHk6aX19LGNyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24odCl7aWYodC5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpKXJldHVybiB0LnBhcmVudCgpO3ZhciBpPXt3aWR0aDp0Lm91dGVyV2lkdGgoITApLGhlaWdodDp0Lm91dGVySGVpZ2h0KCEwKSwiZmxvYXQiOnQuY3NzKCJmbG9hdCIpfSxzPWUoIjxkaXY+PC9kaXY+IikuYWRkQ2xhc3MoInVpLWVmZmVjdHMtd3JhcHBlciIpLmNzcyh7Zm9udFNpemU6IjEwMCUiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLG1hcmdpbjowLHBhZGRpbmc6MH0pLG49e3dpZHRoOnQud2lkdGgoKSxoZWlnaHQ6dC5oZWlnaHQoKX0sYT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3RyeXthLmlkfWNhdGNoKG8pe2E9ZG9jdW1lbnQuYm9keX1yZXR1cm4gdC53cmFwKHMpLCh0WzBdPT09YXx8ZS5jb250YWlucyh0WzBdLGEpKSYmZShhKS5mb2N1cygpLHM9dC5wYXJlbnQoKSwic3RhdGljIj09PXQuY3NzKCJwb3NpdGlvbiIpPyhzLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIn0pLHQuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUifSkpOihlLmV4dGVuZChpLHtwb3NpdGlvbjp0LmNzcygicG9zaXRpb24iKSx6SW5kZXg6dC5jc3MoInotaW5kZXgiKX0pLGUuZWFjaChbInRvcCIsImxlZnQiLCJib3R0b20iLCJyaWdodCJdLGZ1bmN0aW9uKGUscyl7aVtzXT10LmNzcyhzKSxpc05hTihwYXJzZUludChpW3NdLDEwKSkmJihpW3NdPSJhdXRvIil9KSx0LmNzcyh7cG9zaXRpb246InJlbGF0aXZlIix0b3A6MCxsZWZ0OjAscmlnaHQ6ImF1dG8iLGJvdHRvbToiYXV0byJ9KSksdC5jc3Mobikscy5jc3MoaSkuc2hvdygpfSxyZW1vdmVXcmFwcGVyOmZ1bmN0aW9uKHQpe3ZhciBpPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuIHQucGFyZW50KCkuaXMoIi51aS1lZmZlY3RzLXdyYXBwZXIiKSYmKHQucGFyZW50KCkucmVwbGFjZVdpdGgodCksKHRbMF09PT1pfHxlLmNvbnRhaW5zKHRbMF0saSkpJiZlKGkpLmZvY3VzKCkpLHR9LHNldFRyYW5zaXRpb246ZnVuY3Rpb24odCxpLHMsbil7cmV0dXJuIG49bnx8e30sZS5lYWNoKGksZnVuY3Rpb24oZSxpKXt2YXIgYT10LmNzc1VuaXQoaSk7YVswXT4wJiYobltpXT1hWzBdKnMrYVsxXSl9KSxufX0pLGUuZm4uZXh0ZW5kKHtlZmZlY3Q6ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHQpe2Z1bmN0aW9uIGkoKXtlLmlzRnVuY3Rpb24oYSkmJmEuY2FsbChuWzBdKSxlLmlzRnVuY3Rpb24odCkmJnQoKX12YXIgbj1lKHRoaXMpLGE9cy5jb21wbGV0ZSxyPXMubW9kZTsobi5pcygiOmhpZGRlbiIpPyJoaWRlIj09PXI6InNob3ciPT09cik/KG5bcl0oKSxpKCkpOm8uY2FsbChuWzBdLHMsaSl9dmFyIHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1zLm1vZGUsYT1zLnF1ZXVlLG89ZS5lZmZlY3RzLmVmZmVjdFtzLmVmZmVjdF07cmV0dXJuIGUuZngub2ZmfHwhbz9uP3RoaXNbbl0ocy5kdXJhdGlvbixzLmNvbXBsZXRlKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtzLmNvbXBsZXRlJiZzLmNvbXBsZXRlLmNhbGwodGhpcyl9KTphPT09ITE/dGhpcy5lYWNoKGkpOnRoaXMucXVldWUoYXx8ImZ4IixpKX0sc2hvdzpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocyl7aWYoaShzKSlyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG4ubW9kZT0ic2hvdyIsdGhpcy5lZmZlY3QuY2FsbCh0aGlzLG4pfX0oZS5mbi5zaG93KSxoaWRlOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihzKXtpZihpKHMpKXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbi5tb2RlPSJoaWRlIix0aGlzLmVmZmVjdC5jYWxsKHRoaXMsbil9fShlLmZuLmhpZGUpLHRvZ2dsZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocyl7aWYoaShzKXx8ImJvb2xlYW4iPT10eXBlb2YgcylyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG4ubW9kZT0idG9nZ2xlIix0aGlzLmVmZmVjdC5jYWxsKHRoaXMsbil9fShlLmZuLnRvZ2dsZSksY3NzVW5pdDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmNzcyh0KSxzPVtdO3JldHVybiBlLmVhY2goWyJlbSIsInB4IiwiJSIsInB0Il0sZnVuY3Rpb24oZSx0KXtpLmluZGV4T2YodCk+MCYmKHM9W3BhcnNlRmxvYXQoaSksdF0pfSksc319KX0oKSxmdW5jdGlvbigpe3ZhciB0PXt9O2UuZWFjaChbIlF1YWQiLCJDdWJpYyIsIlF1YXJ0IiwiUXVpbnQiLCJFeHBvIl0sZnVuY3Rpb24oZSxpKXt0W2ldPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LGUrMil9fSksZS5leHRlbmQodCx7U2luZTpmdW5jdGlvbihlKXtyZXR1cm4gMS1NYXRoLmNvcyhlKk1hdGguUEkvMil9LENpcmM6ZnVuY3Rpb24oZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX0sRWxhc3RpYzpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWV8fDE9PT1lP2U6LU1hdGgucG93KDIsOCooZS0xKSkqTWF0aC5zaW4oKDgwKihlLTEpLTcuNSkqTWF0aC5QSS8xNSl9LEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqZSooMyplLTIpfSxCb3VuY2U6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9NDsoKHQ9TWF0aC5wb3coMiwtLWkpKS0xKS8xMT5lOyk7cmV0dXJuIDEvTWF0aC5wb3coNCwzLWkpLTcuNTYyNSpNYXRoLnBvdygoMyp0LTIpLzIyLWUsMil9fSksZS5lYWNoKHQsZnVuY3Rpb24odCxpKXtlLmVhc2luZ1siZWFzZUluIit0XT1pLGUuZWFzaW5nWyJlYXNlT3V0Iit0XT1mdW5jdGlvbihlKXtyZXR1cm4gMS1pKDEtZSl9LGUuZWFzaW5nWyJlYXNlSW5PdXQiK3RdPWZ1bmN0aW9uKGUpe3JldHVybi41PmU/aSgyKmUpLzI6MS1pKC0yKmUrMikvMn19KX0oKSxlLmVmZmVjdHMsZS5lZmZlY3RzLmVmZmVjdC5ibGluZD1mdW5jdGlvbih0LGkpe3ZhciBzLG4sYSxvPWUodGhpcykscj0vdXB8ZG93bnx2ZXJ0aWNhbC8saD0vdXB8bGVmdHx2ZXJ0aWNhbHxob3Jpem9udGFsLyxsPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLHU9ZS5lZmZlY3RzLnNldE1vZGUobyx0Lm1vZGV8fCJoaWRlIiksZD10LmRpcmVjdGlvbnx8InVwIixjPXIudGVzdChkKSxwPWM/ImhlaWdodCI6IndpZHRoIixmPWM/InRvcCI6ImxlZnQiLG09aC50ZXN0KGQpLGc9e30sdj0ic2hvdyI9PT11O28ucGFyZW50KCkuaXMoIi51aS1lZmZlY3RzLXdyYXBwZXIiKT9lLmVmZmVjdHMuc2F2ZShvLnBhcmVudCgpLGwpOmUuZWZmZWN0cy5zYXZlKG8sbCksby5zaG93KCkscz1lLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihvKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSksbj1zW3BdKCksYT1wYXJzZUZsb2F0KHMuY3NzKGYpKXx8MCxnW3BdPXY/bjowLG18fChvLmNzcyhjPyJib3R0b20iOiJyaWdodCIsMCkuY3NzKGM/InRvcCI6ImxlZnQiLCJhdXRvIikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUifSksZ1tmXT12P2E6bithKSx2JiYocy5jc3MocCwwKSxtfHxzLmNzcyhmLGErbikpLHMuYW5pbWF0ZShnLHtkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpeyJoaWRlIj09PXUmJm8uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG8sbCksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksaSgpCn19KX0sZS5lZmZlY3RzLmVmZmVjdC5ib3VuY2U9ZnVuY3Rpb24odCxpKXt2YXIgcyxuLGEsbz1lKHRoaXMpLHI9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0saD1lLmVmZmVjdHMuc2V0TW9kZShvLHQubW9kZXx8ImVmZmVjdCIpLGw9ImhpZGUiPT09aCx1PSJzaG93Ij09PWgsZD10LmRpcmVjdGlvbnx8InVwIixjPXQuZGlzdGFuY2UscD10LnRpbWVzfHw1LGY9MipwKyh1fHxsPzE6MCksbT10LmR1cmF0aW9uL2YsZz10LmVhc2luZyx2PSJ1cCI9PT1kfHwiZG93biI9PT1kPyJ0b3AiOiJsZWZ0Iix5PSJ1cCI9PT1kfHwibGVmdCI9PT1kLGI9by5xdWV1ZSgpLF89Yi5sZW5ndGg7Zm9yKCh1fHxsKSYmci5wdXNoKCJvcGFjaXR5IiksZS5lZmZlY3RzLnNhdmUobyxyKSxvLnNob3coKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihvKSxjfHwoYz1vWyJ0b3AiPT09dj8ib3V0ZXJIZWlnaHQiOiJvdXRlcldpZHRoIl0oKS8zKSx1JiYoYT17b3BhY2l0eToxfSxhW3ZdPTAsby5jc3MoIm9wYWNpdHkiLDApLmNzcyh2LHk/MiotYzoyKmMpLmFuaW1hdGUoYSxtLGcpKSxsJiYoYy89TWF0aC5wb3coMixwLTEpKSxhPXt9LGFbdl09MCxzPTA7cD5zO3MrKyluPXt9LG5bdl09KHk/Ii09IjoiKz0iKStjLG8uYW5pbWF0ZShuLG0sZykuYW5pbWF0ZShhLG0sZyksYz1sPzIqYzpjLzI7bCYmKG49e29wYWNpdHk6MH0sblt2XT0oeT8iLT0iOiIrPSIpK2Msby5hbmltYXRlKG4sbSxnKSksby5xdWV1ZShmdW5jdGlvbigpe2wmJm8uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG8sciksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksaSgpfSksXz4xJiZiLnNwbGljZS5hcHBseShiLFsxLDBdLmNvbmNhdChiLnNwbGljZShfLGYrMSkpKSxvLmRlcXVldWUoKX0sZS5lZmZlY3RzLmVmZmVjdC5jbGlwPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhLG89ZSh0aGlzKSxyPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLGg9ZS5lZmZlY3RzLnNldE1vZGUobyx0Lm1vZGV8fCJoaWRlIiksbD0ic2hvdyI9PT1oLHU9dC5kaXJlY3Rpb258fCJ2ZXJ0aWNhbCIsZD0idmVydGljYWwiPT09dSxjPWQ/ImhlaWdodCI6IndpZHRoIixwPWQ/InRvcCI6ImxlZnQiLGY9e307ZS5lZmZlY3RzLnNhdmUobyxyKSxvLnNob3coKSxzPWUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG8pLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxuPSJJTUciPT09b1swXS50YWdOYW1lP3M6byxhPW5bY10oKSxsJiYobi5jc3MoYywwKSxuLmNzcyhwLGEvMikpLGZbY109bD9hOjAsZltwXT1sPzA6YS8yLG4uYW5pbWF0ZShmLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe2x8fG8uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG8sciksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksaSgpfX0pfSxlLmVmZmVjdHMuZWZmZWN0LmRyb3A9ZnVuY3Rpb24odCxpKXt2YXIgcyxuPWUodGhpcyksYT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwib3BhY2l0eSIsImhlaWdodCIsIndpZHRoIl0sbz1lLmVmZmVjdHMuc2V0TW9kZShuLHQubW9kZXx8ImhpZGUiKSxyPSJzaG93Ij09PW8saD10LmRpcmVjdGlvbnx8ImxlZnQiLGw9InVwIj09PWh8fCJkb3duIj09PWg/InRvcCI6ImxlZnQiLHU9InVwIj09PWh8fCJsZWZ0Ij09PWg/InBvcyI6Im5lZyIsZD17b3BhY2l0eTpyPzE6MH07ZS5lZmZlY3RzLnNhdmUobixhKSxuLnNob3coKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihuKSxzPXQuZGlzdGFuY2V8fG5bInRvcCI9PT1sPyJvdXRlckhlaWdodCI6Im91dGVyV2lkdGgiXSghMCkvMixyJiZuLmNzcygib3BhY2l0eSIsMCkuY3NzKGwsInBvcyI9PT11Py1zOnMpLGRbbF09KHI/InBvcyI9PT11PyIrPSI6Ii09IjoicG9zIj09PXU/Ii09IjoiKz0iKStzLG4uYW5pbWF0ZShkLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpeyJoaWRlIj09PW8mJm4uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG4sYSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobiksaSgpfX0pfSxlLmVmZmVjdHMuZWZmZWN0LmV4cGxvZGU9ZnVuY3Rpb24odCxpKXtmdW5jdGlvbiBzKCl7Yi5wdXNoKHRoaXMpLGIubGVuZ3RoPT09ZCpjJiZuKCl9ZnVuY3Rpb24gbigpe3AuY3NzKHt2aXNpYmlsaXR5OiJ2aXNpYmxlIn0pLGUoYikucmVtb3ZlKCksbXx8cC5oaWRlKCksaSgpfXZhciBhLG8scixoLGwsdSxkPXQucGllY2VzP01hdGgucm91bmQoTWF0aC5zcXJ0KHQucGllY2VzKSk6MyxjPWQscD1lKHRoaXMpLGY9ZS5lZmZlY3RzLnNldE1vZGUocCx0Lm1vZGV8fCJoaWRlIiksbT0ic2hvdyI9PT1mLGc9cC5zaG93KCkuY3NzKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikub2Zmc2V0KCksdj1NYXRoLmNlaWwocC5vdXRlcldpZHRoKCkvYykseT1NYXRoLmNlaWwocC5vdXRlckhlaWdodCgpL2QpLGI9W107Zm9yKGE9MDtkPmE7YSsrKWZvcihoPWcudG9wK2EqeSx1PWEtKGQtMSkvMixvPTA7Yz5vO28rKylyPWcubGVmdCtvKnYsbD1vLShjLTEpLzIscC5jbG9uZSgpLmFwcGVuZFRvKCJib2R5Iikud3JhcCgiPGRpdj48L2Rpdj4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToidmlzaWJsZSIsbGVmdDotbyp2LHRvcDotYSp5fSkucGFyZW50KCkuYWRkQ2xhc3MoInVpLWVmZmVjdHMtZXhwbG9kZSIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixvdmVyZmxvdzoiaGlkZGVuIix3aWR0aDp2LGhlaWdodDp5LGxlZnQ6cisobT9sKnY6MCksdG9wOmgrKG0/dSp5OjApLG9wYWNpdHk6bT8wOjF9KS5hbmltYXRlKHtsZWZ0OnIrKG0/MDpsKnYpLHRvcDpoKyhtPzA6dSp5KSxvcGFjaXR5Om0/MTowfSx0LmR1cmF0aW9ufHw1MDAsdC5lYXNpbmcscyl9LGUuZWZmZWN0cy5lZmZlY3QuZmFkZT1mdW5jdGlvbih0LGkpe3ZhciBzPWUodGhpcyksbj1lLmVmZmVjdHMuc2V0TW9kZShzLHQubW9kZXx8InRvZ2dsZSIpO3MuYW5pbWF0ZSh7b3BhY2l0eTpufSx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6aX0pfSxlLmVmZmVjdHMuZWZmZWN0LmZvbGQ9ZnVuY3Rpb24odCxpKXt2YXIgcyxuLGE9ZSh0aGlzKSxvPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLHI9ZS5lZmZlY3RzLnNldE1vZGUoYSx0Lm1vZGV8fCJoaWRlIiksaD0ic2hvdyI9PT1yLGw9ImhpZGUiPT09cix1PXQuc2l6ZXx8MTUsZD0vKFswLTldKyklLy5leGVjKHUpLGM9ISF0Lmhvcml6Rmlyc3QscD1oIT09YyxmPXA/WyJ3aWR0aCIsImhlaWdodCJdOlsiaGVpZ2h0Iiwid2lkdGgiXSxtPXQuZHVyYXRpb24vMixnPXt9LHY9e307ZS5lZmZlY3RzLnNhdmUoYSxvKSxhLnNob3coKSxzPWUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKGEpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxuPXA/W3Mud2lkdGgoKSxzLmhlaWdodCgpXTpbcy5oZWlnaHQoKSxzLndpZHRoKCldLGQmJih1PXBhcnNlSW50KGRbMV0sMTApLzEwMCpuW2w/MDoxXSksaCYmcy5jc3MoYz97aGVpZ2h0OjAsd2lkdGg6dX06e2hlaWdodDp1LHdpZHRoOjB9KSxnW2ZbMF1dPWg/blswXTp1LHZbZlsxXV09aD9uWzFdOjAscy5hbmltYXRlKGcsbSx0LmVhc2luZykuYW5pbWF0ZSh2LG0sdC5lYXNpbmcsZnVuY3Rpb24oKXtsJiZhLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShhLG8pLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKGEpLGkoKX0pfSxlLmVmZmVjdHMuZWZmZWN0LmhpZ2hsaWdodD1mdW5jdGlvbih0LGkpe3ZhciBzPWUodGhpcyksbj1bImJhY2tncm91bmRJbWFnZSIsImJhY2tncm91bmRDb2xvciIsIm9wYWNpdHkiXSxhPWUuZWZmZWN0cy5zZXRNb2RlKHMsdC5tb2RlfHwic2hvdyIpLG89e2JhY2tncm91bmRDb2xvcjpzLmNzcygiYmFja2dyb3VuZENvbG9yIil9OyJoaWRlIj09PWEmJihvLm9wYWNpdHk9MCksZS5lZmZlY3RzLnNhdmUocyxuKSxzLnNob3coKS5jc3Moe2JhY2tncm91bmRJbWFnZToibm9uZSIsYmFja2dyb3VuZENvbG9yOnQuY29sb3J8fCIjZmZmZjk5In0pLmFuaW1hdGUobyx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXsiaGlkZSI9PT1hJiZzLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShzLG4pLGkoKX19KX0sZS5lZmZlY3RzLmVmZmVjdC5zaXplPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhLG89ZSh0aGlzKSxyPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJ3aWR0aCIsImhlaWdodCIsIm92ZXJmbG93Iiwib3BhY2l0eSJdLGg9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsIm92ZXJmbG93Iiwib3BhY2l0eSJdLGw9WyJ3aWR0aCIsImhlaWdodCIsIm92ZXJmbG93Il0sdT1bImZvbnRTaXplIl0sZD1bImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLGM9WyJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSaWdodFdpZHRoIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxwPWUuZWZmZWN0cy5zZXRNb2RlKG8sdC5tb2RlfHwiZWZmZWN0IiksZj10LnJlc3RvcmV8fCJlZmZlY3QiIT09cCxtPXQuc2NhbGV8fCJib3RoIixnPXQub3JpZ2lufHxbIm1pZGRsZSIsImNlbnRlciJdLHY9by5jc3MoInBvc2l0aW9uIikseT1mP3I6aCxiPXtoZWlnaHQ6MCx3aWR0aDowLG91dGVySGVpZ2h0OjAsb3V0ZXJXaWR0aDowfTsic2hvdyI9PT1wJiZvLnNob3coKSxzPXtoZWlnaHQ6by5oZWlnaHQoKSx3aWR0aDpvLndpZHRoKCksb3V0ZXJIZWlnaHQ6by5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6by5vdXRlcldpZHRoKCl9LCJ0b2dnbGUiPT09dC5tb2RlJiYic2hvdyI9PT1wPyhvLmZyb209dC50b3x8YixvLnRvPXQuZnJvbXx8cyk6KG8uZnJvbT10LmZyb218fCgic2hvdyI9PT1wP2I6cyksby50bz10LnRvfHwoImhpZGUiPT09cD9iOnMpKSxhPXtmcm9tOnt5Om8uZnJvbS5oZWlnaHQvcy5oZWlnaHQseDpvLmZyb20ud2lkdGgvcy53aWR0aH0sdG86e3k6by50by5oZWlnaHQvcy5oZWlnaHQseDpvLnRvLndpZHRoL3Mud2lkdGh9fSwoImJveCI9PT1tfHwiYm90aCI9PT1tKSYmKGEuZnJvbS55IT09YS50by55JiYoeT15LmNvbmNhdChkKSxvLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyxkLGEuZnJvbS55LG8uZnJvbSksby50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLGQsYS50by55LG8udG8pKSxhLmZyb20ueCE9PWEudG8ueCYmKHk9eS5jb25jYXQoYyksby5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8sYyxhLmZyb20ueCxvLmZyb20pLG8udG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyxjLGEudG8ueCxvLnRvKSkpLCgiY29udGVudCI9PT1tfHwiYm90aCI9PT1tKSYmYS5mcm9tLnkhPT1hLnRvLnkmJih5PXkuY29uY2F0KHUpLmNvbmNhdChsKSxvLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyx1LGEuZnJvbS55LG8uZnJvbSksby50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLHUsYS50by55LG8udG8pKSxlLmVmZmVjdHMuc2F2ZShvLHkpLG8uc2hvdygpLGUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG8pLG8uY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpLmNzcyhvLmZyb20pLGcmJihuPWUuZWZmZWN0cy5nZXRCYXNlbGluZShnLHMpLG8uZnJvbS50b3A9KHMub3V0ZXJIZWlnaHQtby5vdXRlckhlaWdodCgpKSpuLnksby5mcm9tLmxlZnQ9KHMub3V0ZXJXaWR0aC1vLm91dGVyV2lkdGgoKSkqbi54LG8udG8udG9wPShzLm91dGVySGVpZ2h0LW8udG8ub3V0ZXJIZWlnaHQpKm4ueSxvLnRvLmxlZnQ9KHMub3V0ZXJXaWR0aC1vLnRvLm91dGVyV2lkdGgpKm4ueCksby5jc3Moby5mcm9tKSwoImNvbnRlbnQiPT09bXx8ImJvdGgiPT09bSkmJihkPWQuY29uY2F0KFsibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIl0pLmNvbmNhdCh1KSxjPWMuY29uY2F0KFsibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0Il0pLGw9ci5jb25jYXQoZCkuY29uY2F0KGMpLG8uZmluZCgiKlt3aWR0aF0iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9ZSh0aGlzKSxzPXtoZWlnaHQ6aS5oZWlnaHQoKSx3aWR0aDppLndpZHRoKCksb3V0ZXJIZWlnaHQ6aS5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6aS5vdXRlcldpZHRoKCl9O2YmJmUuZWZmZWN0cy5zYXZlKGksbCksaS5mcm9tPXtoZWlnaHQ6cy5oZWlnaHQqYS5mcm9tLnksd2lkdGg6cy53aWR0aCphLmZyb20ueCxvdXRlckhlaWdodDpzLm91dGVySGVpZ2h0KmEuZnJvbS55LG91dGVyV2lkdGg6cy5vdXRlcldpZHRoKmEuZnJvbS54fSxpLnRvPXtoZWlnaHQ6cy5oZWlnaHQqYS50by55LHdpZHRoOnMud2lkdGgqYS50by54LG91dGVySGVpZ2h0OnMuaGVpZ2h0KmEudG8ueSxvdXRlcldpZHRoOnMud2lkdGgqYS50by54fSxhLmZyb20ueSE9PWEudG8ueSYmKGkuZnJvbT1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLGQsYS5mcm9tLnksaS5mcm9tKSxpLnRvPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksZCxhLnRvLnksaS50bykpLGEuZnJvbS54IT09YS50by54JiYoaS5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksYyxhLmZyb20ueCxpLmZyb20pLGkudG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24oaSxjLGEudG8ueCxpLnRvKSksaS5jc3MoaS5mcm9tKSxpLmFuaW1hdGUoaS50byx0LmR1cmF0aW9uLHQuZWFzaW5nLGZ1bmN0aW9uKCl7ZiYmZS5lZmZlY3RzLnJlc3RvcmUoaSxsKX0pfSkpLG8uYW5pbWF0ZShvLnRvLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpezA9PT1vLnRvLm9wYWNpdHkmJm8uY3NzKCJvcGFjaXR5IixvLmZyb20ub3BhY2l0eSksImhpZGUiPT09cCYmby5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobyx5KSxmfHwoInN0YXRpYyI9PT12P28uY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLHRvcDpvLnRvLnRvcCxsZWZ0Om8udG8ubGVmdH0pOmUuZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLHQpe28uY3NzKHQsZnVuY3Rpb24odCxpKXt2YXIgcz1wYXJzZUludChpLDEwKSxuPWU/by50by5sZWZ0Om8udG8udG9wO3JldHVybiJhdXRvIj09PWk/bisicHgiOnMrbisicHgifSl9KSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksaSgpfX0pfSxlLmVmZmVjdHMuZWZmZWN0LnNjYWxlPWZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0aGlzKSxuPWUuZXh0ZW5kKCEwLHt9LHQpLGE9ZS5lZmZlY3RzLnNldE1vZGUocyx0Lm1vZGV8fCJlZmZlY3QiKSxvPXBhcnNlSW50KHQucGVyY2VudCwxMCl8fCgwPT09cGFyc2VJbnQodC5wZXJjZW50LDEwKT8wOiJoaWRlIj09PWE/MDoxMDApLHI9dC5kaXJlY3Rpb258fCJib3RoIixoPXQub3JpZ2luLGw9e2hlaWdodDpzLmhlaWdodCgpLHdpZHRoOnMud2lkdGgoKSxvdXRlckhlaWdodDpzLm91dGVySGVpZ2h0KCksb3V0ZXJXaWR0aDpzLm91dGVyV2lkdGgoKX0sdT17eToiaG9yaXpvbnRhbCIhPT1yP28vMTAwOjEseDoidmVydGljYWwiIT09cj9vLzEwMDoxfTtuLmVmZmVjdD0ic2l6ZSIsbi5xdWV1ZT0hMSxuLmNvbXBsZXRlPWksImVmZmVjdCIhPT1hJiYobi5vcmlnaW49aHx8WyJtaWRkbGUiLCJjZW50ZXIiXSxuLnJlc3RvcmU9ITApLG4uZnJvbT10LmZyb218fCgic2hvdyI9PT1hP3toZWlnaHQ6MCx3aWR0aDowLG91dGVySGVpZ2h0OjAsb3V0ZXJXaWR0aDowfTpsKSxuLnRvPXtoZWlnaHQ6bC5oZWlnaHQqdS55LHdpZHRoOmwud2lkdGgqdS54LG91dGVySGVpZ2h0Omwub3V0ZXJIZWlnaHQqdS55LG91dGVyV2lkdGg6bC5vdXRlcldpZHRoKnUueH0sbi5mYWRlJiYoInNob3ciPT09YSYmKG4uZnJvbS5vcGFjaXR5PTAsbi50by5vcGFjaXR5PTEpLCJoaWRlIj09PWEmJihuLmZyb20ub3BhY2l0eT0xLG4udG8ub3BhY2l0eT0wKSkscy5lZmZlY3Qobil9LGUuZWZmZWN0cy5lZmZlY3QucHVmZj1mdW5jdGlvbih0LGkpe3ZhciBzPWUodGhpcyksbj1lLmVmZmVjdHMuc2V0TW9kZShzLHQubW9kZXx8ImhpZGUiKSxhPSJoaWRlIj09PW4sbz1wYXJzZUludCh0LnBlcmNlbnQsMTApfHwxNTAscj1vLzEwMCxoPXtoZWlnaHQ6cy5oZWlnaHQoKSx3aWR0aDpzLndpZHRoKCksb3V0ZXJIZWlnaHQ6cy5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6cy5vdXRlcldpZHRoKCl9O2UuZXh0ZW5kKHQse2VmZmVjdDoic2NhbGUiLHF1ZXVlOiExLGZhZGU6ITAsbW9kZTpuLGNvbXBsZXRlOmkscGVyY2VudDphP286MTAwLGZyb206YT9oOntoZWlnaHQ6aC5oZWlnaHQqcix3aWR0aDpoLndpZHRoKnIsb3V0ZXJIZWlnaHQ6aC5vdXRlckhlaWdodCpyLG91dGVyV2lkdGg6aC5vdXRlcldpZHRoKnJ9fSkscy5lZmZlY3QodCl9LGUuZWZmZWN0cy5lZmZlY3QucHVsc2F0ZT1mdW5jdGlvbih0LGkpe3ZhciBzLG49ZSh0aGlzKSxhPWUuZWZmZWN0cy5zZXRNb2RlKG4sdC5tb2RlfHwic2hvdyIpLG89InNob3ciPT09YSxyPSJoaWRlIj09PWEsaD1vfHwiaGlkZSI9PT1hLGw9MioodC50aW1lc3x8NSkrKGg/MTowKSx1PXQuZHVyYXRpb24vbCxkPTAsYz1uLnF1ZXVlKCkscD1jLmxlbmd0aDtmb3IoKG98fCFuLmlzKCI6dmlzaWJsZSIpKSYmKG4uY3NzKCJvcGFjaXR5IiwwKS5zaG93KCksZD0xKSxzPTE7bD5zO3MrKyluLmFuaW1hdGUoe29wYWNpdHk6ZH0sdSx0LmVhc2luZyksZD0xLWQ7bi5hbmltYXRlKHtvcGFjaXR5OmR9LHUsdC5lYXNpbmcpLG4ucXVldWUoZnVuY3Rpb24oKXtyJiZuLmhpZGUoKSxpKCl9KSxwPjEmJmMuc3BsaWNlLmFwcGx5KGMsWzEsMF0uY29uY2F0KGMuc3BsaWNlKHAsbCsxKSkpLG4uZGVxdWV1ZSgpfSxlLmVmZmVjdHMuZWZmZWN0LnNoYWtlPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbj1lKHRoaXMpLGE9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0sbz1lLmVmZmVjdHMuc2V0TW9kZShuLHQubW9kZXx8ImVmZmVjdCIpLHI9dC5kaXJlY3Rpb258fCJsZWZ0IixoPXQuZGlzdGFuY2V8fDIwLGw9dC50aW1lc3x8Myx1PTIqbCsxLGQ9TWF0aC5yb3VuZCh0LmR1cmF0aW9uL3UpLGM9InVwIj09PXJ8fCJkb3duIj09PXI/InRvcCI6ImxlZnQiLHA9InVwIj09PXJ8fCJsZWZ0Ij09PXIsZj17fSxtPXt9LGc9e30sdj1uLnF1ZXVlKCkseT12Lmxlbmd0aDtmb3IoZS5lZmZlY3RzLnNhdmUobixhKSxuLnNob3coKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihuKSxmW2NdPShwPyItPSI6Iis9IikraCxtW2NdPShwPyIrPSI6Ii09IikrMipoLGdbY109KHA/Ii09IjoiKz0iKSsyKmgsbi5hbmltYXRlKGYsZCx0LmVhc2luZykscz0xO2w+cztzKyspbi5hbmltYXRlKG0sZCx0LmVhc2luZykuYW5pbWF0ZShnLGQsdC5lYXNpbmcpO24uYW5pbWF0ZShtLGQsdC5lYXNpbmcpLmFuaW1hdGUoZixkLzIsdC5lYXNpbmcpLnF1ZXVlKGZ1bmN0aW9uKCl7ImhpZGUiPT09byYmbi5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobixhKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihuKSxpKCl9KSx5PjEmJnYuc3BsaWNlLmFwcGx5KHYsWzEsMF0uY29uY2F0KHYuc3BsaWNlKHksdSsxKSkpLG4uZGVxdWV1ZSgpfSxlLmVmZmVjdHMuZWZmZWN0LnNsaWRlPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbj1lKHRoaXMpLGE9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsIndpZHRoIiwiaGVpZ2h0Il0sbz1lLmVmZmVjdHMuc2V0TW9kZShuLHQubW9kZXx8InNob3ciKSxyPSJzaG93Ij09PW8saD10LmRpcmVjdGlvbnx8ImxlZnQiLGw9InVwIj09PWh8fCJkb3duIj09PWg/InRvcCI6ImxlZnQiLHU9InVwIj09PWh8fCJsZWZ0Ij09PWgsZD17fTtlLmVmZmVjdHMuc2F2ZShuLGEpLG4uc2hvdygpLHM9dC5kaXN0YW5jZXx8blsidG9wIj09PWw/Im91dGVySGVpZ2h0Ijoib3V0ZXJXaWR0aCJdKCEwKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihuKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSksciYmbi5jc3MobCx1P2lzTmFOKHMpPyItIitzOi1zOnMpLGRbbF09KHI/dT8iKz0iOiItPSI6dT8iLT0iOiIrPSIpK3Msbi5hbmltYXRlKGQse3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7ImhpZGUiPT09byYmbi5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobixhKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihuKSxpKCl9fSl9LGUuZWZmZWN0cy5lZmZlY3QudHJhbnNmZXI9ZnVuY3Rpb24odCxpKXt2YXIgcz1lKHRoaXMpLG49ZSh0LnRvKSxhPSJmaXhlZCI9PT1uLmNzcygicG9zaXRpb24iKSxvPWUoImJvZHkiKSxyPWE/by5zY3JvbGxUb3AoKTowLGg9YT9vLnNjcm9sbExlZnQoKTowLGw9bi5vZmZzZXQoKSx1PXt0b3A6bC50b3AtcixsZWZ0OmwubGVmdC1oLGhlaWdodDpuLmlubmVySGVpZ2h0KCksd2lkdGg6bi5pbm5lcldpZHRoKCl9LGQ9cy5vZmZzZXQoKSxjPWUoIjxkaXYgY2xhc3M9J3VpLWVmZmVjdHMtdHJhbnNmZXInPjwvZGl2PiIpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKHQuY2xhc3NOYW1lKS5jc3Moe3RvcDpkLnRvcC1yLGxlZnQ6ZC5sZWZ0LWgsaGVpZ2h0OnMuaW5uZXJIZWlnaHQoKSx3aWR0aDpzLmlubmVyV2lkdGgoKSxwb3NpdGlvbjphPyJmaXhlZCI6ImFic29sdXRlIn0pLmFuaW1hdGUodSx0LmR1cmF0aW9uLHQuZWFzaW5nLGZ1bmN0aW9uKCl7Yy5yZW1vdmUoKSxpKCl9KX19KTs="></script>
<link href="data:text/css,%0A%0A%2Etocify%20%7B%0Awidth%3A%2020%25%3B%0Amax%2Dheight%3A%2090%25%3B%0Aoverflow%3A%20auto%3B%0Amargin%2Dleft%3A%202%25%3B%0Aposition%3A%20fixed%3B%0Aborder%3A%201px%20solid%20%23ccc%3B%0Aborder%2Dradius%3A%206px%3B%0A%7D%0A%0A%2Etocify%20ul%2C%20%2Etocify%20li%20%7B%0Alist%2Dstyle%3A%20none%3B%0Amargin%3A%200%3B%0Apadding%3A%200%3B%0Aborder%3A%20none%3B%0Aline%2Dheight%3A%2030px%3B%0A%7D%0A%0A%2Etocify%2Dheader%20%7B%0Atext%2Dindent%3A%2010px%3B%0A%7D%0A%0A%2Etocify%2Dsubheader%20%7B%0Atext%2Dindent%3A%2020px%3B%0Adisplay%3A%20none%3B%0A%7D%0A%0A%2Etocify%2Dsubheader%20li%20%7B%0Afont%2Dsize%3A%2012px%3B%0A%7D%0A%0A%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%7B%0Atext%2Dindent%3A%2030px%3B%0A%7D%0A%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%7B%0Atext%2Dindent%3A%2040px%3B%0A%7D%0A%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%7B%0Atext%2Dindent%3A%2050px%3B%0A%7D%0A%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%7B%0Atext%2Dindent%3A%2060px%3B%0A%7D%0A%0A%2Etocify%20%2Etocify%2Ditem%20%3E%20a%2C%20%2Etocify%20%2Enav%2Dlist%20%2Enav%2Dheader%20%7B%0Amargin%3A%200px%3B%0A%7D%0A%0A%2Etocify%20%2Etocify%2Ditem%20a%2C%20%2Etocify%20%2Elist%2Dgroup%2Ditem%20%7B%0Apadding%3A%205px%3B%0A%7D%0A%2Etocify%20%2Enav%2Dpills%20%3E%20li%20%7B%0Afloat%3A%20none%3B%0A%7D%0A%0A%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,LyoganF1ZXJ5IFRvY2lmeSAtIHYxLjkuMSAtIDIwMTMtMTAtMjIKICogaHR0cDovL3d3dy5ncmVnZnJhbmtvLmNvbS9qcXVlcnkudG9jaWZ5LmpzLwogKiBDb3B5cmlnaHQgKGMpIDIwMTMgR3JlZyBGcmFua287IExpY2Vuc2VkIE1JVCAqLwoKLy8gSW1tZWRpYXRlbHktSW52b2tlZCBGdW5jdGlvbiBFeHByZXNzaW9uIChJSUZFKSBbQmVuIEFsbWFuIEJsb2cgUG9zdF0oaHR0cDovL2JlbmFsbWFuLmNvbS9uZXdzLzIwMTAvMTEvaW1tZWRpYXRlbHktaW52b2tlZC1mdW5jdGlvbi1leHByZXNzaW9uLykgdGhhdCBjYWxscyBhbm90aGVyIElJRkUgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIHBsdWdpbiBsb2dpYy4gIEkgdXNlZCB0aGlzIHBhdHRlcm4gc28gdGhhdCBhbnlvbmUgdmlld2luZyB0aGlzIGNvZGUgd291bGQgbm90IGhhdmUgdG8gc2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIHBhZ2UgdG8gdmlldyB0aGUgbG9jYWwgcGFyYW1ldGVycyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoZSBtYWluIElJRkUuCihmdW5jdGlvbih0b2NpZnkpIHsKCiAgICAvLyBFQ01BU2NyaXB0IDUgU3RyaWN0IE1vZGU6IFtKb2huIFJlc2lnIEJsb2cgUG9zdF0oaHR0cDovL2Vqb2huLm9yZy9ibG9nL2VjbWFzY3JpcHQtNS1zdHJpY3QtbW9kZS1qc29uLWFuZC1tb3JlLykKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICAvLyBDYWxscyB0aGUgc2Vjb25kIElJRkUgYW5kIGxvY2FsbHkgcGFzc2VzIGluIHRoZSBnbG9iYWwgalF1ZXJ5LCB3aW5kb3csIGFuZCBkb2N1bWVudCBvYmplY3RzCiAgICB0b2NpZnkod2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCk7CgogIH0KCiAgLy8gTG9jYWxseSBwYXNzZXMgaW4gYGpRdWVyeWAsIHRoZSBgd2luZG93YCBvYmplY3QsIHRoZSBgZG9jdW1lbnRgIG9iamVjdCwgYW5kIGFuIGB1bmRlZmluZWRgIHZhcmlhYmxlLiAgVGhlIGBqUXVlcnlgLCBgd2luZG93YCBhbmQgYGRvY3VtZW50YCBvYmplY3RzIGFyZSBwYXNzZWQgaW4gbG9jYWxseSwgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSwgc2luY2UgamF2YXNjcmlwdCBmaXJzdCBzZWFyY2hlcyBmb3IgYSB2YXJpYWJsZSBtYXRjaCB3aXRoaW4gdGhlIGxvY2FsIHZhcmlhYmxlcyBzZXQgYmVmb3JlIHNlYXJjaGluZyB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBzZXQuICBBbGwgb2YgdGhlIGdsb2JhbCB2YXJpYWJsZXMgYXJlIGFsc28gcGFzc2VkIGluIGxvY2FsbHkgdG8gYmUgbWluaWZpZXIgZnJpZW5kbHkuIGB1bmRlZmluZWRgIGNhbiBiZSBwYXNzZWQgaW4gbG9jYWxseSwgYmVjYXVzZSBpdCBpcyBub3QgYSByZXNlcnZlZCB3b3JkIGluIEphdmFTY3JpcHQuCiAgKGZ1bmN0aW9uKCQsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCkgewoKICAgIC8vIEVDTUFTY3JpcHQgNSBTdHJpY3QgTW9kZTogW0pvaG4gUmVzaWcgQmxvZyBQb3N0XShodHRwOi8vZWpvaG4ub3JnL2Jsb2cvZWNtYXNjcmlwdC01LXN0cmljdC1tb2RlLWpzb24tYW5kLW1vcmUvKQogICAgInVzZSBzdHJpY3QiOwoKICAgIHZhciB0b2NDbGFzc05hbWUgPSAidG9jaWZ5IiwKICAgICAgdG9jQ2xhc3MgPSAiLiIgKyB0b2NDbGFzc05hbWUsCiAgICAgIHRvY0ZvY3VzQ2xhc3NOYW1lID0gInRvY2lmeS1mb2N1cyIsCiAgICAgIHRvY0hvdmVyQ2xhc3NOYW1lID0gInRvY2lmeS1ob3ZlciIsCiAgICAgIGhpZGVUb2NDbGFzc05hbWUgPSAidG9jaWZ5LWhpZGUiLAogICAgICBoaWRlVG9jQ2xhc3MgPSAiLiIgKyBoaWRlVG9jQ2xhc3NOYW1lLAogICAgICBoZWFkZXJDbGFzc05hbWUgPSAidG9jaWZ5LWhlYWRlciIsCiAgICAgIGhlYWRlckNsYXNzID0gIi4iICsgaGVhZGVyQ2xhc3NOYW1lLAogICAgICBzdWJoZWFkZXJDbGFzc05hbWUgPSAidG9jaWZ5LXN1YmhlYWRlciIsCiAgICAgIHN1YmhlYWRlckNsYXNzID0gIi4iICsgc3ViaGVhZGVyQ2xhc3NOYW1lLAogICAgICBpdGVtQ2xhc3NOYW1lID0gInRvY2lmeS1pdGVtIiwKICAgICAgaXRlbUNsYXNzID0gIi4iICsgaXRlbUNsYXNzTmFtZSwKICAgICAgZXh0ZW5kUGFnZUNsYXNzTmFtZSA9ICJ0b2NpZnktZXh0ZW5kLXBhZ2UiLAogICAgICBleHRlbmRQYWdlQ2xhc3MgPSAiLiIgKyBleHRlbmRQYWdlQ2xhc3NOYW1lOwoKICAgIC8vIENhbGxpbmcgdGhlIGpRdWVyeVVJIFdpZGdldCBGYWN0b3J5IE1ldGhvZAogICAgJC53aWRnZXQoInRvYy50b2NpZnkiLCB7CgogICAgICAvL1BsdWdpbiB2ZXJzaW9uCiAgICAgIHZlcnNpb246ICIxLjkuMSIsCgogICAgICAvLyBUaGVzZSBvcHRpb25zIHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0cwogICAgICBvcHRpb25zOiB7CgogICAgICAgIC8vICoqY29udGV4dCoqOiBBY2NlcHRzIFN0cmluZzogQW55IGpRdWVyeSBzZWxlY3RvcgogICAgICAgIC8vIFRoZSBjb250YWluZXIgZWxlbWVudCB0aGF0IGhvbGRzIGFsbCBvZiB0aGUgZWxlbWVudHMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGFibGUgb2YgY29udGVudHMKICAgICAgICBjb250ZXh0OiAiYm9keSIsCgogICAgICAgIC8vICoqaWdub3JlU2VsZWN0b3IqKjogQWNjZXB0cyBTdHJpbmc6IEFueSBqUXVlcnkgc2VsZWN0b3IKICAgICAgICAvLyBBIHNlbGVjdG9yIHRvIGFueSBlbGVtZW50IHRoYXQgd291bGQgYmUgbWF0Y2hlZCBieSBzZWxlY3RvcnMgdGhhdCB5b3Ugd2lzaCB0byBiZSBpZ25vcmVkCiAgICAgICAgaWdub3JlU2VsZWN0b3I6IG51bGwsCgogICAgICAgIC8vICoqc2VsZWN0b3JzKio6IEFjY2VwdHMgYW4gQXJyYXkgb2YgU3RyaW5nczogQW55IGpRdWVyeSBzZWxlY3RvcnMKICAgICAgICAvLyBUaGUgZWxlbWVudCdzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgVGhlIG9yZGVyIGlzIHZlcnkgaW1wb3J0YW50IHNpbmNlIGl0IHdpbGwgZGV0ZXJtaW5lIHRoZSB0YWJsZSBvZiBjb250ZW50J3MgbmVzdGluZyBzdHJ1Y3R1cmUKICAgICAgICBzZWxlY3RvcnM6ICJoMSwgaDIsIGgzIiwKCiAgICAgICAgLy8gKipzaG93QW5kSGlkZSoqOiBBY2NlcHRzIGEgYm9vbGVhbjogdHJ1ZSBvciBmYWxzZQogICAgICAgIC8vIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGVsZW1lbnRzIHNob3VsZCBiZSBzaG93biBhbmQgaGlkZGVuCiAgICAgICAgc2hvd0FuZEhpZGU6IHRydWUsCgogICAgICAgIC8vICoqc2hvd0VmZmVjdCoqOiBBY2NlcHRzIFN0cmluZzogIm5vbmUiLCAiZmFkZUluIiwgInNob3ciLCBvciAic2xpZGVEb3duIgogICAgICAgIC8vIFVzZWQgdG8gZGlzcGxheSBhbnkgb2YgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIG5lc3RlZCBpdGVtcwogICAgICAgIHNob3dFZmZlY3Q6ICJzbGlkZURvd24iLAoKICAgICAgICAvLyAqKnNob3dFZmZlY3RTcGVlZCoqOiBBY2NlcHRzIE51bWJlciAobWlsbGlzZWNvbmRzKSBvciBTdHJpbmc6ICJzbG93IiwgIm1lZGl1bSIsIG9yICJmYXN0IgogICAgICAgIC8vIFRoZSB0aW1lIGR1cmF0aW9uIG9mIHRoZSBzaG93IGFuaW1hdGlvbgogICAgICAgIHNob3dFZmZlY3RTcGVlZDogIm1lZGl1bSIsCgogICAgICAgIC8vICoqaGlkZUVmZmVjdCoqOiBBY2NlcHRzIFN0cmluZzogIm5vbmUiLCAiZmFkZU91dCIsICJoaWRlIiwgb3IgInNsaWRlVXAiCiAgICAgICAgLy8gVXNlZCB0byBoaWRlIGFueSBvZiB0aGUgdGFibGUgb2YgY29udGVudHMgbmVzdGVkIGl0ZW1zCiAgICAgICAgaGlkZUVmZmVjdDogInNsaWRlVXAiLAoKICAgICAgICAvLyAqKmhpZGVFZmZlY3RTcGVlZCoqOiBBY2NlcHRzIE51bWJlciAobWlsbGlzZWNvbmRzKSBvciBTdHJpbmc6ICJzbG93IiwgIm1lZGl1bSIsIG9yICJmYXN0IgogICAgICAgIC8vIFRoZSB0aW1lIGR1cmF0aW9uIG9mIHRoZSBoaWRlIGFuaW1hdGlvbgogICAgICAgIGhpZGVFZmZlY3RTcGVlZDogIm1lZGl1bSIsCgogICAgICAgIC8vICoqc21vb3RoU2Nyb2xsKio6IEFjY2VwdHMgYSBib29sZWFuOiB0cnVlIG9yIGZhbHNlCiAgICAgICAgLy8gRGV0ZXJtaW5lcyBpZiBhIGpRdWVyeSBhbmltYXRpb24gc2hvdWxkIGJlIHVzZWQgdG8gc2Nyb2xsIHRvIHNwZWNpZmljIHRhYmxlIG9mIGNvbnRlbnRzIGl0ZW1zIG9uIHRoZSBwYWdlCiAgICAgICAgc21vb3RoU2Nyb2xsOiB0cnVlLAoKICAgICAgICAvLyAqKnNtb290aFNjcm9sbFNwZWVkKio6IEFjY2VwdHMgTnVtYmVyIChtaWxsaXNlY29uZHMpIG9yIFN0cmluZzogInNsb3ciLCAibWVkaXVtIiwgb3IgImZhc3QiCiAgICAgICAgLy8gVGhlIHRpbWUgZHVyYXRpb24gb2YgdGhlIHNtb290aFNjcm9sbCBhbmltYXRpb24KICAgICAgICBzbW9vdGhTY3JvbGxTcGVlZDogIm1lZGl1bSIsCgogICAgICAgIC8vICoqc2Nyb2xsVG8qKjogQWNjZXB0cyBOdW1iZXIgKHBpeGVscykKICAgICAgICAvLyBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIHRvcCBvZiBwYWdlIGFuZCB0aGUgc2VsZWN0ZWQgdGFibGUgb2YgY29udGVudHMgaXRlbSBhZnRlciB0aGUgcGFnZSBoYXMgYmVlbiBzY3JvbGxlZAogICAgICAgIHNjcm9sbFRvOiAwLAoKICAgICAgICAvLyAqKnNob3dBbmRIaWRlT25TY3JvbGwqKjogQWNjZXB0cyBhIGJvb2xlYW46IHRydWUgb3IgZmFsc2UKICAgICAgICAvLyBEZXRlcm1pbmVzIGlmIHRhYmxlIG9mIGNvbnRlbnRzIG5lc3RlZCBpdGVtcyBzaG91bGQgYmUgc2hvd24gYW5kIGhpZGRlbiB3aGlsZSBzY3JvbGxpbmcKICAgICAgICBzaG93QW5kSGlkZU9uU2Nyb2xsOiB0cnVlLAoKICAgICAgICAvLyAqKmhpZ2hsaWdodE9uU2Nyb2xsKio6IEFjY2VwdHMgYSBib29sZWFuOiB0cnVlIG9yIGZhbHNlCiAgICAgICAgLy8gRGV0ZXJtaW5lcyBpZiB0YWJsZSBvZiBjb250ZW50cyBuZXN0ZWQgaXRlbXMgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIChzZXQgdG8gYSBkaWZmZXJlbnQgY29sb3IpIHdoaWxlIHNjcm9sbGluZwogICAgICAgIGhpZ2hsaWdodE9uU2Nyb2xsOiB0cnVlLAoKICAgICAgICAvLyAqKmhpZ2hsaWdodE9mZnNldCoqOiBBY2NlcHRzIGEgbnVtYmVyCiAgICAgICAgLy8gVGhlIG9mZnNldCBkaXN0YW5jZSBpbiBwaXhlbHMgdG8gdHJpZ2dlciB0aGUgbmV4dCBhY3RpdmUgdGFibGUgb2YgY29udGVudHMgaXRlbQogICAgICAgIGhpZ2hsaWdodE9mZnNldDogNDAsCgogICAgICAgIC8vICoqdGhlbWUqKjogQWNjZXB0cyBhIHN0cmluZzogImJvb3RzdHJhcCIsICJqcXVlcnl1aSIsIG9yICJub25lIgogICAgICAgIC8vIERldGVybWluZXMgaWYgVHdpdHRlciBCb290c3RyYXAsIGpRdWVyeVVJLCBvciBUb2NpZnkgY2xhc3NlcyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHRhYmxlIG9mIGNvbnRlbnRzCiAgICAgICAgdGhlbWU6ICJib290c3RyYXAiLAoKICAgICAgICAvLyAqKmV4dGVuZFBhZ2UqKjogQWNjZXB0cyBhIGJvb2xlYW46IHRydWUgb3IgZmFsc2UKICAgICAgICAvLyBJZiBhIHVzZXIgc2Nyb2xscyB0byB0aGUgYm90dG9tIG9mIHRoZSBwYWdlIGFuZCB0aGUgcGFnZSBpcyBub3QgdGFsbCBlbm91Z2ggdG8gc2Nyb2xsIHRvIHRoZSBsYXN0IHRhYmxlIG9mIGNvbnRlbnRzIGl0ZW0sIHRoZW4gdGhlIHBhZ2UgaGVpZ2h0IGlzIGluY3JlYXNlZAogICAgICAgIGV4dGVuZFBhZ2U6IHRydWUsCgogICAgICAgIC8vICoqZXh0ZW5kUGFnZU9mZnNldCoqOiBBY2NlcHRzIGEgbnVtYmVyOiBwaXhlbHMKICAgICAgICAvLyBIb3cgY2xvc2UgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSBhIHVzZXIgbXVzdCBzY3JvbGwgYmVmb3JlIHRoZSBwYWdlIGlzIGV4dGVuZGVkCiAgICAgICAgZXh0ZW5kUGFnZU9mZnNldDogMTAwLAoKICAgICAgICAvLyAqKmhpc3RvcnkqKjogQWNjZXB0cyBhIGJvb2xlYW46IHRydWUgb3IgZmFsc2UKICAgICAgICAvLyBBZGRzIGEgaGFzaCB0byB0aGUgcGFnZSB1cmwgdG8gbWFpbnRhaW4gaGlzdG9yeQogICAgICAgIGhpc3Rvcnk6IHRydWUsCgogICAgICAgIC8vICoqc2Nyb2xsSGlzdG9yeSoqOiBBY2NlcHRzIGEgYm9vbGVhbjogdHJ1ZSBvciBmYWxzZQogICAgICAgIC8vIEFkZHMgYSBoYXNoIHRvIHRoZSBwYWdlIHVybCwgdG8gbWFpbnRhaW4gaGlzdG9yeSwgd2hlbiBzY3JvbGxpbmcgdG8gYSBUT0MgaXRlbQogICAgICAgIHNjcm9sbEhpc3Rvcnk6IGZhbHNlLAoKICAgICAgICAvLyAqKmhhc2hHZW5lcmF0b3IqKjogSG93IHRoZSBoYXNoIHZhbHVlICh0aGUgYW5jaG9yIHNlZ21lbnQgb2YgdGhlIFVSTCwgZm9sbG93aW5nIHRoZQogICAgICAgIC8vICMgY2hhcmFjdGVyKSB3aWxsIGJlIGdlbmVyYXRlZC4KICAgICAgICAvLwogICAgICAgIC8vICJjb21wYWN0IiAoZGVmYXVsdCkgLSAjQ29tcHJlc3Nlc0V2ZXJ5dGhpbmdUb2dldGhlcgogICAgICAgIC8vICJwcmV0dHkiIC0gI2xvb2tzLWxpa2UtYS1uaWNlLXVybC1hbmQtaXMtZWFzaWx5LXJlYWRhYmxlCiAgICAgICAgLy8gZnVuY3Rpb24odGV4dCwgZWxlbWVudCl7fSAtIFlvdXIgb3duIGhhc2ggZ2VuZXJhdGlvbiBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIHRleHQgYXMgYW4KICAgICAgICAvLyBhcmd1bWVudCwgYW5kIHJldHVybnMgdGhlIGhhc2ggdmFsdWUuCiAgICAgICAgaGFzaEdlbmVyYXRvcjogImNvbXBhY3QiLAoKICAgICAgICAvLyAqKmhpZ2hsaWdodERlZmF1bHQqKjogQWNjZXB0cyBhIGJvb2xlYW46IHRydWUgb3IgZmFsc2UKICAgICAgICAvLyBTZXQncyB0aGUgZmlyc3QgVE9DIGl0ZW0gYXMgYWN0aXZlIGlmIG5vIG90aGVyIFRPQyBpdGVtIGlzIGFjdGl2ZS4KICAgICAgICBoaWdobGlnaHREZWZhdWx0OiB0cnVlCgogICAgICB9LAoKICAgICAgLy8gX0NyZWF0ZQogICAgICAvLyAtLS0tLS0tCiAgICAgIC8vICAgICAgQ29uc3RydWN0cyB0aGUgcGx1Z2luLiAgT25seSBjYWxsZWQgb25jZS4KICAgICAgX2NyZWF0ZTogZnVuY3Rpb24oKSB7CgogICAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICAgc2VsZi5leHRlbmRQYWdlU2Nyb2xsID0gdHJ1ZTsKCiAgICAgICAgLy8gSW50ZXJuYWwgYXJyYXkgdGhhdCBrZWVwcyB0cmFjayBvZiBhbGwgVE9DIGl0ZW1zIChIZWxwcyB0byByZWNvZ25pemUgaWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBUT0MgaXRlbSBzdHJpbmdzKQogICAgICAgIHNlbGYuaXRlbXMgPSBbXTsKCiAgICAgICAgLy8gR2VuZXJhdGVzIHRoZSBIVE1MIGZvciB0aGUgZHluYW1pYyB0YWJsZSBvZiBjb250ZW50cwogICAgICAgIHNlbGYuX2dlbmVyYXRlVG9jKCk7CgogICAgICAgIC8vIEFkZHMgQ1NTIGNsYXNzZXMgdG8gdGhlIG5ld2x5IGdlbmVyYXRlZCB0YWJsZSBvZiBjb250ZW50cyBIVE1MCiAgICAgICAgc2VsZi5fYWRkQ1NTQ2xhc3NlcygpOwoKICAgICAgICBzZWxmLndlYmtpdCA9IChmdW5jdGlvbigpIHsKCiAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHdpbmRvdykgewoKICAgICAgICAgICAgaWYgKHByb3ApIHsKCiAgICAgICAgICAgICAgaWYgKHByb3AudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJ3ZWJraXQiKSAhPT0gLTEpIHsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIH0oKSk7CgogICAgICAgIC8vIEFkZHMgalF1ZXJ5IGV2ZW50IGhhbmRsZXJzIHRvIHRoZSBuZXdseSBnZW5lcmF0ZWQgdGFibGUgb2YgY29udGVudHMKICAgICAgICBzZWxmLl9zZXRFdmVudEhhbmRsZXJzKCk7CgogICAgICAgIC8vIEJpbmRpbmcgdG8gdGhlIFdpbmRvdyBsb2FkIGV2ZW50IHRvIG1ha2Ugc3VyZSB0aGUgY29ycmVjdCBzY3JvbGxUb3AgaXMgY2FsY3VsYXRlZAogICAgICAgICQod2luZG93KS5vbigibG9hZCIsIGZ1bmN0aW9uKCkgewoKICAgICAgICAgIC8vIFNldHMgdGhlIGFjdGl2ZSBUT0MgaXRlbQogICAgICAgICAgc2VsZi5fc2V0QWN0aXZlRWxlbWVudCh0cnVlKTsKCiAgICAgICAgICAvLyBPbmNlIGFsbCBhbmltYXRpb25zIG9uIHRoZSBwYWdlIGFyZSBjb21wbGV0ZSwgdGhpcyBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZAogICAgICAgICAgJCgiaHRtbCwgYm9keSIpLnByb21pc2UoKS5kb25lKGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgc2VsZi5leHRlbmRQYWdlU2Nyb2xsID0gZmFsc2U7CgogICAgICAgICAgICB9LCAwKTsKCiAgICAgICAgICB9KTsKCiAgICAgICAgfSk7CgogICAgICB9LAoKICAgICAgLy8gX2dlbmVyYXRlVG9jCiAgICAgIC8vIC0tLS0tLS0tLS0tLQogICAgICAvLyAgICAgIEdlbmVyYXRlcyB0aGUgSFRNTCBmb3IgdGhlIGR5bmFtaWMgdGFibGUgb2YgY29udGVudHMKICAgICAgX2dlbmVyYXRlVG9jOiBmdW5jdGlvbigpIHsKCiAgICAgICAgLy8gX0xvY2FsIHZhcmlhYmxlc18KCiAgICAgICAgLy8gU3RvcmVzIHRoZSBwbHVnaW4gY29udGV4dCBpbiB0aGUgc2VsZiB2YXJpYWJsZQogICAgICAgIHZhciBzZWxmID0gdGhpcywKCiAgICAgICAgICAvLyBBbGwgb2YgdGhlIEhUTUwgdGFncyBmb3VuZCB3aXRoaW4gdGhlIGNvbnRleHQgcHJvdmlkZWQgKGkuZS4gYm9keSkgdGhhdCBtYXRjaCB0aGUgdG9wIGxldmVsIGpRdWVyeSBzZWxlY3RvciBhYm92ZQogICAgICAgICAgZmlyc3RFbGVtLAoKICAgICAgICAgIC8vIEluc3RhbnRpYXRlZCB2YXJpYWJsZSB0aGF0IHdpbGwgc3RvcmUgdGhlIHRvcCBsZXZlbCBuZXdseSBjcmVhdGVkIHVub3JkZXJlZCBsaXN0IERPTSBlbGVtZW50CiAgICAgICAgICB1bCwKICAgICAgICAgIGlnbm9yZVNlbGVjdG9yID0gc2VsZi5vcHRpb25zLmlnbm9yZVNlbGVjdG9yOwoKCiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBlbGVtZW50IHRvIHN0YXJ0IHRoZSB0b2Mgd2l0aAogICAgICAgIC8vIGdldCBhbGwgdGhlIHRvcCBsZXZlbCBzZWxlY3RvcnMKICAgICAgICBmaXJzdEVsZW0gPSBbXTsKICAgICAgICB2YXIgc2VsZWN0b3JzID0gdGhpcy5vcHRpb25zLnNlbGVjdG9ycy5yZXBsYWNlKC8gL2csICIiKS5zcGxpdCgiLCIpOwogICAgICAgIC8vIGZpbmQgdGhlIGZpcnN0IHNldCB0aGF0IGhhdmUgYXQgbGVhc3Qgb25lIG5vbi1pZ25vcmVkIGVsZW1lbnQKICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2VsZWN0b3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgZm91bmRTZWxlY3RvcnMgPSAkKHRoaXMub3B0aW9ucy5jb250ZXh0KS5maW5kKHNlbGVjdG9yc1tpXSk7CiAgICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IGZvdW5kU2VsZWN0b3JzLmxlbmd0aDsgcysrKSB7CiAgICAgICAgICAgIGlmICghJChmb3VuZFNlbGVjdG9yc1tzXSkuaXMoaWdub3JlU2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgZmlyc3RFbGVtID0gZm91bmRTZWxlY3RvcnM7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChmaXJzdEVsZW0ubGVuZ3RoPiAwKQogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmICghZmlyc3RFbGVtLmxlbmd0aCkgewoKICAgICAgICAgIHNlbGYuZWxlbWVudC5hZGRDbGFzcyhoaWRlVG9jQ2xhc3NOYW1lKTsKCiAgICAgICAgICByZXR1cm47CgogICAgICAgIH0KCiAgICAgICAgc2VsZi5lbGVtZW50LmFkZENsYXNzKHRvY0NsYXNzTmFtZSk7CgogICAgICAgIC8vIExvb3BzIHRocm91Z2ggZWFjaCB0b3AgbGV2ZWwgc2VsZWN0b3IKICAgICAgICBmaXJzdEVsZW0uZWFjaChmdW5jdGlvbihpbmRleCkgewoKICAgICAgICAgIC8vSWYgdGhlIGVsZW1lbnQgbWF0Y2hlcyB0aGUgaWdub3JlU2VsZWN0b3IgdGhlbiB3ZSBza2lwIGl0CiAgICAgICAgICBpZiAoJCh0aGlzKS5pcyhpZ25vcmVTZWxlY3RvcikpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIENyZWF0ZXMgYW4gdW5vcmRlcmVkIGxpc3QgSFRNTCBlbGVtZW50IGFuZCBhZGRzIGEgZHluYW1pYyBJRCBhbmQgc3RhbmRhcmQgY2xhc3MgbmFtZQogICAgICAgICAgdWwgPSAkKCI8dWwvPiIsIHsKICAgICAgICAgICAgImlkIjogaGVhZGVyQ2xhc3NOYW1lICsgaW5kZXgsCiAgICAgICAgICAgICJjbGFzcyI6IGhlYWRlckNsYXNzTmFtZQogICAgICAgICAgfSkuCgogICAgICAgICAgLy8gQXBwZW5kcyBhIHRvcCBsZXZlbCBsaXN0IGl0ZW0gSFRNTCBlbGVtZW50IHRvIHRoZSBwcmV2aW91c2x5IGNyZWF0ZWQgSFRNTCBoZWFkZXIKICAgICAgICAgIGFwcGVuZChzZWxmLl9uZXN0RWxlbWVudHMoJCh0aGlzKSwgaW5kZXgpKTsKCiAgICAgICAgICAvLyBBZGQgdGhlIGNyZWF0ZWQgdW5vcmRlcmVkIGxpc3QgZWxlbWVudCB0byB0aGUgSFRNTCBlbGVtZW50IGNhbGxpbmcgdGhlIHBsdWdpbgogICAgICAgICAgc2VsZi5lbGVtZW50LmFwcGVuZCh1bCk7CgogICAgICAgICAgLy8gRmluZHMgYWxsIG9mIHRoZSBIVE1MIHRhZ3MgYmV0d2VlbiB0aGUgaGVhZGVyIGFuZCBzdWJoZWFkZXIgZWxlbWVudHMKICAgICAgICAgICQodGhpcykubmV4dFVudGlsKHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkuZWFjaChmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBuZXN0ZWQgc3ViaGVhZGVyIGVsZW1lbWVudHMKICAgICAgICAgICAgaWYgKCQodGhpcykuZmluZChzZWxmLm9wdGlvbnMuc2VsZWN0b3JzKS5sZW5ndGggPT09IDApIHsKCiAgICAgICAgICAgICAgLy8gTG9vcHMgdGhyb3VnaCBhbGwgb2YgdGhlIHN1YmhlYWRlciBlbGVtZW50cwogICAgICAgICAgICAgICQodGhpcykuZmlsdGVyKHNlbGYub3B0aW9ucy5zZWxlY3RvcnMpLmVhY2goZnVuY3Rpb24oKSB7CgogICAgICAgICAgICAgICAgLy9JZiB0aGUgZWxlbWVudCBtYXRjaGVzIHRoZSBpZ25vcmVTZWxlY3RvciB0aGVuIHdlIHNraXAgaXQKICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmlzKGlnbm9yZVNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc2VsZi5fYXBwZW5kU3ViaGVhZGVycy5jYWxsKHRoaXMsIHNlbGYsIHVsKTsKCiAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbmVzdGVkIHN1YmhlYWRlciBlbGVtZW50cwogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgLy8gTG9vcHMgdGhyb3VnaCBhbGwgb2YgdGhlIHN1YmhlYWRlciBlbGVtZW50cwogICAgICAgICAgICAgICQodGhpcykuZmluZChzZWxmLm9wdGlvbnMuc2VsZWN0b3JzKS5lYWNoKGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgIC8vSWYgdGhlIGVsZW1lbnQgbWF0Y2hlcyB0aGUgaWdub3JlU2VsZWN0b3IgdGhlbiB3ZSBza2lwIGl0CiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5pcyhpZ25vcmVTZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNlbGYuX2FwcGVuZFN1YmhlYWRlcnMuY2FsbCh0aGlzLCBzZWxmLCB1bCk7CgogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgfQoKICAgICAgICAgIH0pOwoKICAgICAgICB9KTsKCiAgICAgIH0sCgogICAgICBfc2V0QWN0aXZlRWxlbWVudDogZnVuY3Rpb24ocGFnZWxvYWQpIHsKCiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAoKICAgICAgICAgIGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSksCgogICAgICAgICAgZWxlbSA9IHNlbGYuZWxlbWVudC5maW5kKCdsaVtkYXRhLXVuaXF1ZT0iJyArIGhhc2ggKyAnIl0nKTsKCiAgICAgICAgaWYgKGhhc2gubGVuZ3RoKSB7CgogICAgICAgICAgLy8gUmVtb3ZlcyBoaWdobGlnaHRpbmcgZnJvbSBhbGwgb2YgdGhlIGxpc3QgaXRlbSdzCiAgICAgICAgICBzZWxmLmVsZW1lbnQuZmluZCgiLiIgKyBzZWxmLmZvY3VzQ2xhc3MpLnJlbW92ZUNsYXNzKHNlbGYuZm9jdXNDbGFzcyk7CgogICAgICAgICAgLy8gSGlnaGxpZ2h0cyB0aGUgY3VycmVudCBsaXN0IGl0ZW0gdGhhdCB3YXMgY2xpY2tlZAogICAgICAgICAgZWxlbS5hZGRDbGFzcyhzZWxmLmZvY3VzQ2xhc3MpOwoKICAgICAgICAgIC8vIFRyaWdnZXJzIHRoZSBjbGljayBldmVudCBvbiB0aGUgY3VycmVudGx5IGZvY3VzZWQgVE9DIGl0ZW0KICAgICAgICAgIGVsZW0uY2xpY2soKTsKCiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAvLyBSZW1vdmVzIGhpZ2hsaWdodGluZyBmcm9tIGFsbCBvZiB0aGUgbGlzdCBpdGVtJ3MKICAgICAgICAgIHNlbGYuZWxlbWVudC5maW5kKCIuIiArIHNlbGYuZm9jdXNDbGFzcykucmVtb3ZlQ2xhc3Moc2VsZi5mb2N1c0NsYXNzKTsKCiAgICAgICAgICBpZiAoIWhhc2gubGVuZ3RoICYmIHBhZ2Vsb2FkICYmIHNlbGYub3B0aW9ucy5oaWdobGlnaHREZWZhdWx0KSB7CgogICAgICAgICAgICAvLyBIaWdobGlnaHRzIHRoZSBmaXJzdCBUT0MgaXRlbSBpZiBubyBvdGhlciBpdGVtcyBhcmUgaGlnaGxpZ2h0ZWQKICAgICAgICAgICAgc2VsZi5lbGVtZW50LmZpbmQoaXRlbUNsYXNzKS5maXJzdCgpLmFkZENsYXNzKHNlbGYuZm9jdXNDbGFzcyk7CgogICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIHJldHVybiBzZWxmOwoKICAgICAgfSwKCiAgICAgIC8vIF9uZXN0RWxlbWVudHMKICAgICAgLy8gLS0tLS0tLS0tLS0tLQogICAgICAvLyAgICAgIEhlbHBzIGNyZWF0ZSB0aGUgdGFibGUgb2YgY29udGVudHMgbGlzdCBieSBhcHBlbmRpbmcgbmVzdGVkIGxpc3QgaXRlbXMKICAgICAgX25lc3RFbGVtZW50czogZnVuY3Rpb24oc2VsZiwgaW5kZXgpIHsKCiAgICAgICAgdmFyIGFyciwgaXRlbSwgaGFzaFZhbHVlOwoKICAgICAgICBhcnIgPSAkLmdyZXAodGhpcy5pdGVtcywgZnVuY3Rpb24oaXRlbSkgewoKICAgICAgICAgIHJldHVybiBpdGVtID09PSBzZWxmLnRleHQoKTsKCiAgICAgICAgfSk7CgogICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBkdXBsaWNhdGUgVE9DIGl0ZW0KICAgICAgICBpZiAoYXJyLmxlbmd0aCkgewoKICAgICAgICAgIC8vIEFkZHMgdGhlIGN1cnJlbnQgVE9DIGl0ZW0gdGV4dCBhbmQgaW5kZXggKGZvciBzbGlnaHQgcmFuZG9taXphdGlvbikgdG8gdGhlIGludGVybmFsIGFycmF5CiAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goc2VsZi50ZXh0KCkgKyBpbmRleCk7CgogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlcmUgbm90IGEgZHVwbGljYXRlIFRPQyBpdGVtCiAgICAgICAgZWxzZSB7CgogICAgICAgICAgLy8gQWRkcyB0aGUgY3VycmVudCBUT0MgaXRlbSB0ZXh0IHRvIHRoZSBpbnRlcm5hbCBhcnJheQogICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHNlbGYudGV4dCgpKTsKCiAgICAgICAgfQoKICAgICAgICBoYXNoVmFsdWUgPSB0aGlzLl9nZW5lcmF0ZUhhc2hWYWx1ZShhcnIsIHNlbGYsIGluZGV4KTsKCiAgICAgICAgLy8gQXBwZW5kcyBhIGxpc3QgaXRlbSBIVE1MIGVsZW1lbnQgdG8gdGhlIGxhc3QgdW5vcmRlcmVkIGxpc3QgSFRNTCBlbGVtZW50IGZvdW5kIHdpdGhpbiB0aGUgSFRNTCBlbGVtZW50IGNhbGxpbmcgdGhlIHBsdWdpbgogICAgICAgIGl0ZW0gPSAkKCI8bGkvPiIsIHsKCiAgICAgICAgICAvLyBTZXRzIGEgY29tbW9uIGNsYXNzIG5hbWUgdG8gdGhlIGxpc3QgaXRlbQogICAgICAgICAgImNsYXNzIjogaXRlbUNsYXNzTmFtZSwKCiAgICAgICAgICAiZGF0YS11bmlxdWUiOiBoYXNoVmFsdWUKCiAgICAgICAgfSk7CgogICAgICAgIGlmICh0aGlzLm9wdGlvbnMudGhlbWUgIT09ICJib290c3RyYXAzIikgewoKICAgICAgICAgIGl0ZW0uYXBwZW5kKCQoIjxhLz4iLCB7CgogICAgICAgICAgICAiaHRtbCI6IHNlbGYuaHRtbCgpCgogICAgICAgICAgfSkpOwoKICAgICAgICB9IGVsc2UgewoKICAgICAgICAgIGl0ZW0uaHRtbChzZWxmLmh0bWwoKSk7CgogICAgICAgIH0KCiAgICAgICAgLy8gQWRkcyBhbiBIVE1MIGFuY2hvciB0YWcgYmVmb3JlIHRoZSBjdXJyZW50bHkgdHJhdmVyc2VkIEhUTUwgZWxlbWVudAogICAgICAgIHNlbGYuYmVmb3JlKCQoIjxkaXYvPiIsIHsKCiAgICAgICAgICAvLyBTZXRzIGEgbmFtZSBhdHRyaWJ1dGUgb24gdGhlIGFuY2hvciB0YWcgdG8gdGhlIHRleHQgb2YgdGhlIGN1cnJlbnRseSB0cmF2ZXJzZWQgSFRNTCBlbGVtZW50IChhbHNvIG1ha2luZyBzdXJlIHRoYXQgYWxsIHdoaXRlc3BhY2UgaXMgcmVwbGFjZWQgd2l0aCBhbiB1bmRlcnNjb3JlKQogICAgICAgICAgIm5hbWUiOiBoYXNoVmFsdWUsCgogICAgICAgICAgImRhdGEtdW5pcXVlIjogaGFzaFZhbHVlCgogICAgICAgIH0pKTsKCiAgICAgICAgcmV0dXJuIGl0ZW07CgogICAgICB9LAoKICAgICAgLy8gX2dlbmVyYXRlSGFzaFZhbHVlCiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAvLyAgICAgIEdlbmVyYXRlcyB0aGUgaGFzaCB2YWx1ZSB0aGF0IHdpbGwgYmUgdXNlZCB0byByZWZlciB0byBlYWNoIGl0ZW0uCiAgICAgIF9nZW5lcmF0ZUhhc2hWYWx1ZTogZnVuY3Rpb24oYXJyLCBzZWxmLCBpbmRleCkgewoKICAgICAgICB2YXIgaGFzaFZhbHVlID0gIiIsCiAgICAgICAgICBoYXNoR2VuZXJhdG9yT3B0aW9uID0gdGhpcy5vcHRpb25zLmhhc2hHZW5lcmF0b3I7CgogICAgICAgIGlmIChoYXNoR2VuZXJhdG9yT3B0aW9uID09PSAicHJldHR5IikgewoKICAgICAgICAgIC8vIHByZXR0aWZ5IHRoZSB0ZXh0CiAgICAgICAgICBoYXNoVmFsdWUgPSBzZWxmLnRleHQoKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzL2csICItIik7CgogICAgICAgICAgLy8gZml4IGRvdWJsZSBoeXBoZW5zCiAgICAgICAgICB3aGlsZSAoaGFzaFZhbHVlLmluZGV4T2YoIi0tIikgPiAtMSkgewogICAgICAgICAgICBoYXNoVmFsdWUgPSBoYXNoVmFsdWUucmVwbGFjZSgvLS0vZywgIi0iKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBmaXggY29sb24tc3BhY2UgaW5zdGFuY2VzCiAgICAgICAgICB3aGlsZSAoaGFzaFZhbHVlLmluZGV4T2YoIjotIikgPiAtMSkgewogICAgICAgICAgICBoYXNoVmFsdWUgPSBoYXNoVmFsdWUucmVwbGFjZSgvOi0vZywgIi0iKTsKICAgICAgICAgIH0KCiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaGFzaEdlbmVyYXRvck9wdGlvbiA9PT0gImZ1bmN0aW9uIikgewoKICAgICAgICAgIC8vIGNhbGwgdGhlIGZ1bmN0aW9uCiAgICAgICAgICBoYXNoVmFsdWUgPSBoYXNoR2VuZXJhdG9yT3B0aW9uKHNlbGYudGV4dCgpLCBzZWxmKTsKCiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAvLyBjb21wYWN0IC0gdGhlIGRlZmF1bHQKICAgICAgICAgIGhhc2hWYWx1ZSA9IHNlbGYudGV4dCgpLnJlcGxhY2UoL1xzL2csICIiKTsKCiAgICAgICAgfQoKICAgICAgICAvLyBhZGQgdGhlIGluZGV4IGlmIHdlIG5lZWQgdG8KICAgICAgICBpZiAoYXJyLmxlbmd0aCkgewogICAgICAgICAgaGFzaFZhbHVlICs9ICIiICsgaW5kZXg7CiAgICAgICAgfQoKICAgICAgICAvLyByZXR1cm4gdGhlIHZhbHVlCiAgICAgICAgcmV0dXJuIGhhc2hWYWx1ZTsKCiAgICAgIH0sCgogICAgICAvLyBfYXBwZW5kRWxlbWVudHMKICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tCiAgICAgIC8vICAgICAgSGVscHMgY3JlYXRlIHRoZSB0YWJsZSBvZiBjb250ZW50cyBsaXN0IGJ5IGFwcGVuZGluZyBzdWJoZWFkZXIgZWxlbWVudHMKCiAgICAgIF9hcHBlbmRTdWJoZWFkZXJzOiBmdW5jdGlvbihzZWxmLCB1bCkgewoKICAgICAgICAvLyBUaGUgY3VycmVudCBlbGVtZW50IGluZGV4CiAgICAgICAgdmFyIGluZGV4ID0gJCh0aGlzKS5pbmRleChzZWxmLm9wdGlvbnMuc2VsZWN0b3JzKSwKCiAgICAgICAgICAvLyBGaW5kcyB0aGUgcHJldmlvdXMgaGVhZGVyIERPTSBlbGVtZW50CiAgICAgICAgICBwcmV2aW91c0hlYWRlciA9ICQoc2VsZi5vcHRpb25zLnNlbGVjdG9ycykuZXEoaW5kZXggLSAxKSwKCiAgICAgICAgICBjdXJyZW50VGFnTmFtZSA9ICskKHRoaXMpLnByb3AoInRhZ05hbWUiKS5jaGFyQXQoMSksCgogICAgICAgICAgcHJldmlvdXNUYWdOYW1lID0gK3ByZXZpb3VzSGVhZGVyLnByb3AoInRhZ05hbWUiKS5jaGFyQXQoMSksCgogICAgICAgICAgbGFzdFN1YmhlYWRlcjsKCiAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgaGVhZGVyIERPTSBlbGVtZW50IGlzIHNtYWxsZXIgdGhhbiB0aGUgcHJldmlvdXMgaGVhZGVyIERPTSBlbGVtZW50IG9yIHRoZSBmaXJzdCBzdWJoZWFkZXIKICAgICAgICBpZiAoY3VycmVudFRhZ05hbWUgPCBwcmV2aW91c1RhZ05hbWUpIHsKCiAgICAgICAgICAvLyBTZWxlY3RzIHRoZSBsYXN0IHVub3JkZXJlZCBsaXN0IEhUTUwgZm91bmQgd2l0aGluIHRoZSBIVE1MIGVsZW1lbnQgY2FsbGluZyB0aGUgcGx1Z2luCiAgICAgICAgICBzZWxmLmVsZW1lbnQuZmluZChzdWJoZWFkZXJDbGFzcyArICJbZGF0YS10YWc9IiArIGN1cnJlbnRUYWdOYW1lICsgIl0iKS5sYXN0KCkuYXBwZW5kKHNlbGYuX25lc3RFbGVtZW50cygkKHRoaXMpLCBpbmRleCkpOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGhlYWRlciBET00gZWxlbWVudCBpcyB0aGUgc2FtZSB0eXBlIG9mIGhlYWRlcihlZy4gaDQpIGFzIHRoZSBwcmV2aW91cyBoZWFkZXIgRE9NIGVsZW1lbnQKICAgICAgICBlbHNlIGlmIChjdXJyZW50VGFnTmFtZSA9PT0gcHJldmlvdXNUYWdOYW1lKSB7CgogICAgICAgICAgdWwuZmluZChpdGVtQ2xhc3MpLmxhc3QoKS5hZnRlcihzZWxmLl9uZXN0RWxlbWVudHMoJCh0aGlzKSwgaW5kZXgpKTsKCiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAvLyBTZWxlY3RzIHRoZSBsYXN0IHVub3JkZXJlZCBsaXN0IEhUTUwgZm91bmQgd2l0aGluIHRoZSBIVE1MIGVsZW1lbnQgY2FsbGluZyB0aGUgcGx1Z2luCiAgICAgICAgICB1bC5maW5kKGl0ZW1DbGFzcykubGFzdCgpLgoKICAgICAgICAgIC8vIEFwcGVuZHMgYW4gdW5vcmRlcmVkTGlzdCBIVE1MIGVsZW1lbnQgdG8gdGhlIGR5bmFtaWMgYHVub3JkZXJlZExpc3RgIHZhcmlhYmxlIGFuZCBzZXRzIGEgY29tbW9uIGNsYXNzIG5hbWUKICAgICAgICAgIGFmdGVyKCQoIjx1bC8+IiwgewoKICAgICAgICAgICAgImNsYXNzIjogc3ViaGVhZGVyQ2xhc3NOYW1lLAoKICAgICAgICAgICAgImRhdGEtdGFnIjogY3VycmVudFRhZ05hbWUKCiAgICAgICAgICB9KSkubmV4dChzdWJoZWFkZXJDbGFzcykuCgogICAgICAgICAgLy8gQXBwZW5kcyBhIGxpc3QgaXRlbSBIVE1MIGVsZW1lbnQgdG8gdGhlIGxhc3QgdW5vcmRlcmVkIGxpc3QgSFRNTCBlbGVtZW50IGZvdW5kIHdpdGhpbiB0aGUgSFRNTCBlbGVtZW50IGNhbGxpbmcgdGhlIHBsdWdpbgogICAgICAgICAgYXBwZW5kKHNlbGYuX25lc3RFbGVtZW50cygkKHRoaXMpLCBpbmRleCkpOwogICAgICAgIH0KCiAgICAgIH0sCgogICAgICAvLyBfc2V0RXZlbnRIYW5kbGVycwogICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tCiAgICAgIC8vICAgICAgQWRkcyBqUXVlcnkgZXZlbnQgaGFuZGxlcnMgdG8gdGhlIG5ld2x5IGdlbmVyYXRlZCB0YWJsZSBvZiBjb250ZW50cwogICAgICBfc2V0RXZlbnRIYW5kbGVyczogZnVuY3Rpb24oKSB7CgogICAgICAgIC8vIF9Mb2NhbCB2YXJpYWJsZXNfCgogICAgICAgIC8vIFN0b3JlcyB0aGUgcGx1Z2luIGNvbnRleHQgaW4gdGhlIHNlbGYgdmFyaWFibGUKICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCgogICAgICAgICAgLy8gSW5zdGFudGlhdGVzIGEgbmV3IHZhcmlhYmxlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGhvbGQgYSBzcGVjaWZpYyBlbGVtZW50J3MgY29udGV4dAogICAgICAgICAgJHNlbGYsCgogICAgICAgICAgLy8gSW5zdGFudGlhdGVzIGEgbmV3IHZhcmlhYmxlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgc21vb3RoU2Nyb2xsIGFuaW1hdGlvbiB0aW1lIGR1cmF0aW9uCiAgICAgICAgICBkdXJhdGlvbjsKCiAgICAgICAgLy8gRXZlbnQgZGVsZWdhdGlvbiB0aGF0IGxvb2tzIGZvciBhbnkgY2xpY2tzIG9uIGxpc3QgaXRlbSBlbGVtZW50cyBpbnNpZGUgb2YgdGhlIEhUTUwgZWxlbWVudCBjYWxsaW5nIHRoZSBwbHVnaW4KICAgICAgICB0aGlzLmVsZW1lbnQub24oImNsaWNrLnRvY2lmeSIsICJsaSIsIGZ1bmN0aW9uKGV2ZW50KSB7CgogICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5oaXN0b3J5KSB7CgogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICQodGhpcykuYXR0cigiZGF0YS11bmlxdWUiKTsKCiAgICAgICAgICB9CgogICAgICAgICAgLy8gUmVtb3ZlcyBoaWdobGlnaHRpbmcgZnJvbSBhbGwgb2YgdGhlIGxpc3QgaXRlbSdzCiAgICAgICAgICBzZWxmLmVsZW1lbnQuZmluZCgiLiIgKyBzZWxmLmZvY3VzQ2xhc3MpLnJlbW92ZUNsYXNzKHNlbGYuZm9jdXNDbGFzcyk7CgogICAgICAgICAgLy8gSGlnaGxpZ2h0cyB0aGUgY3VycmVudCBsaXN0IGl0ZW0gdGhhdCB3YXMgY2xpY2tlZAogICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhzZWxmLmZvY3VzQ2xhc3MpOwoKICAgICAgICAgIC8vIElmIHRoZSBzaG93QW5kSGlkZSBvcHRpb24gaXMgdHJ1ZQogICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5zaG93QW5kSGlkZSkgewoKICAgICAgICAgICAgdmFyIGVsZW0gPSAkKCdsaVtkYXRhLXVuaXF1ZT0iJyArICQodGhpcykuYXR0cigiZGF0YS11bmlxdWUiKSArICciXScpOwoKICAgICAgICAgICAgc2VsZi5fdHJpZ2dlclNob3coZWxlbSk7CgogICAgICAgICAgfQoKICAgICAgICAgIHNlbGYuX3Njcm9sbFRvKCQodGhpcykpOwoKICAgICAgICB9KTsKCiAgICAgICAgLy8gTW91c2VlbnRlciBhbmQgTW91c2VsZWF2ZSBldmVudCBoYW5kbGVycyBmb3IgdGhlIGxpc3QgaXRlbSdzIHdpdGhpbiB0aGUgSFRNTCBlbGVtZW50IGNhbGxpbmcgdGhlIHBsdWdpbgogICAgICAgIHRoaXMuZWxlbWVudC5maW5kKCJsaSIpLm9uKHsKCiAgICAgICAgICAvLyBNb3VzZWVudGVyIGV2ZW50IGhhbmRsZXIKICAgICAgICAgICJtb3VzZWVudGVyLnRvY2lmeSI6IGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgLy8gQWRkcyBhIGhvdmVyIENTUyBjbGFzcyB0byB0aGUgY3VycmVudCBsaXN0IGl0ZW0KICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhzZWxmLmhvdmVyQ2xhc3MpOwoKICAgICAgICAgICAgLy8gTWFrZXMgc3VyZSB0aGUgY3Vyc29yIGlzIHNldCB0byB0aGUgcG9pbnRlciBpY29uCiAgICAgICAgICAgICQodGhpcykuY3NzKCJjdXJzb3IiLCAicG9pbnRlciIpOwoKICAgICAgICAgIH0sCgogICAgICAgICAgLy8gTW91c2VsZWF2ZSBldmVudCBoYW5kbGVyCiAgICAgICAgICAibW91c2VsZWF2ZS50b2NpZnkiOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMudGhlbWUgIT09ICJib290c3RyYXAiKSB7CgogICAgICAgICAgICAgIC8vIFJlbW92ZXMgdGhlIGhvdmVyIENTUyBjbGFzcyBmcm9tIHRoZSBjdXJyZW50IGxpc3QgaXRlbQogICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3Moc2VsZi5ob3ZlckNsYXNzKTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIG9ubHkgYXR0YWNoIGhhbmRsZXIgaWYgbmVlZGVkIChleHBlbnNpdmUgaW4gSUUpCiAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5leHRlbmRQYWdlIHx8IHNlbGYub3B0aW9ucy5oaWdobGlnaHRPblNjcm9sbCB8fCBzZWxmLm9wdGlvbnMuc2Nyb2xsSGlzdG9yeSB8fCBzZWxmLm9wdGlvbnMuc2hvd0FuZEhpZGVPblNjcm9sbCkgewogICAgICAgICAgLy8gV2luZG93IHNjcm9sbCBldmVudCBoYW5kbGVyCiAgICAgICAgICAkKHdpbmRvdykub24oInNjcm9sbC50b2NpZnkiLCBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIC8vIE9uY2UgYWxsIGFuaW1hdGlvbnMgb24gdGhlIHBhZ2UgYXJlIGNvbXBsZXRlLCB0aGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkCiAgICAgICAgICAgICQoImh0bWwsIGJvZHkiKS5wcm9taXNlKCkuZG9uZShmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgLy8gTG9jYWwgdmFyaWFibGVzCgogICAgICAgICAgICAgIC8vIFN0b3JlcyBob3cgZmFyIHRoZSB1c2VyIGhhcyBzY3JvbGxlZAogICAgICAgICAgICAgIHZhciB3aW5TY3JvbGxUb3AgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCksCgogICAgICAgICAgICAgICAgLy8gU3RvcmVzIHRoZSBoZWlnaHQgb2YgdGhlIHdpbmRvdwogICAgICAgICAgICAgICAgd2luSGVpZ2h0ID0gJCh3aW5kb3cpLmhlaWdodCgpLAoKICAgICAgICAgICAgICAgIC8vIFN0b3JlcyB0aGUgaGVpZ2h0IG9mIHRoZSBkb2N1bWVudAogICAgICAgICAgICAgICAgZG9jSGVpZ2h0ID0gJChkb2N1bWVudCkuaGVpZ2h0KCksCgogICAgICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gJCgiYm9keSIpWzBdLnNjcm9sbEhlaWdodCwKCiAgICAgICAgICAgICAgICAvLyBJbnN0YW50aWF0ZXMgYSB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBob2xkIGEgc2VsZWN0ZWQgSFRNTCBlbGVtZW50CiAgICAgICAgICAgICAgICBlbGVtLAoKICAgICAgICAgICAgICAgIGxhc3RFbGVtLAoKICAgICAgICAgICAgICAgIGxhc3RFbGVtT2Zmc2V0LAoKICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtOwoKICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmV4dGVuZFBhZ2UpIHsKCiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSBhbmQgdGhlIGxhc3QgdG9jIGl0ZW0gaXMgbm90IGZvY3VzZWQKICAgICAgICAgICAgICAgIGlmICgoc2VsZi53ZWJraXQgJiYgd2luU2Nyb2xsVG9wID49IHNjcm9sbEhlaWdodCAtIHdpbkhlaWdodCAtIHNlbGYub3B0aW9ucy5leHRlbmRQYWdlT2Zmc2V0KSB8fCAoIXNlbGYud2Via2l0ICYmIHdpbkhlaWdodCArIHdpblNjcm9sbFRvcCA+IGRvY0hlaWdodCAtIHNlbGYub3B0aW9ucy5leHRlbmRQYWdlT2Zmc2V0KSkgewoKICAgICAgICAgICAgICAgICAgaWYgKCEkKGV4dGVuZFBhZ2VDbGFzcykubGVuZ3RoKSB7CgogICAgICAgICAgICAgICAgICAgIGxhc3RFbGVtID0gJCgnZGl2W2RhdGEtdW5pcXVlPSInICsgJChpdGVtQ2xhc3MpLmxhc3QoKS5hdHRyKCJkYXRhLXVuaXF1ZSIpICsgJyJdJyk7CgogICAgICAgICAgICAgICAgICAgIGlmICghbGFzdEVsZW0ubGVuZ3RoKSByZXR1cm47CgogICAgICAgICAgICAgICAgICAgIC8vIEdldHMgdGhlIHRvcCBvZmZzZXQgb2YgdGhlIHBhZ2UgaGVhZGVyIHRoYXQgaXMgbGlua2VkIHRvIHRoZSBsYXN0IHRvYyBpdGVtCiAgICAgICAgICAgICAgICAgICAgbGFzdEVsZW1PZmZzZXQgPSBsYXN0RWxlbS5vZmZzZXQoKS50b3A7CgogICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZHMgYSBkaXYgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSBhbmQgc2V0cyB0aGUgaGVpZ2h0IHRvIHRoZSBkaWZmZXJlbmNlIG9mIHRoZSB3aW5kb3cgc2Nyb2xsVG9wIGFuZCB0aGUgbGFzdCBlbGVtZW50J3MgcG9zaXRpb24gdG9wIG9mZnNldAogICAgICAgICAgICAgICAgICAgICQoc2VsZi5vcHRpb25zLmNvbnRleHQpLmFwcGVuZCgkKCI8ZGl2Lz4iLCB7CgogICAgICAgICAgICAgICAgICAgICAgImNsYXNzIjogZXh0ZW5kUGFnZUNsYXNzTmFtZSwKCiAgICAgICAgICAgICAgICAgICAgICAiaGVpZ2h0IjogTWF0aC5hYnMobGFzdEVsZW1PZmZzZXQgLSB3aW5TY3JvbGxUb3ApICsgInB4IiwKCiAgICAgICAgICAgICAgICAgICAgICAiZGF0YS11bmlxdWUiOiBleHRlbmRQYWdlQ2xhc3NOYW1lCgogICAgICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuZXh0ZW5kUGFnZVNjcm9sbCkgewoKICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtID0gc2VsZi5lbGVtZW50LmZpbmQoJ2xpLicgKyBzZWxmLmZvY3VzQ2xhc3MpOwoKICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Njcm9sbFRvKCQoJ2RpdltkYXRhLXVuaXF1ZT0iJyArIGN1cnJlbnRFbGVtLmF0dHIoImRhdGEtdW5pcXVlIikgKyAnIl0nKSk7CgogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgLy8gVGhlIHplcm8gdGltZW91dCBlbnN1cmVzIHRoZSBmb2xsb3dpbmcgY29kZSBpcyBydW4gYWZ0ZXIgdGhlIHNjcm9sbCBldmVudHMKICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgIC8vIF9Mb2NhbCB2YXJpYWJsZXNfCgogICAgICAgICAgICAgICAgLy8gU3RvcmVzIHRoZSBkaXN0YW5jZSB0byB0aGUgY2xvc2VzdCBhbmNob3IKICAgICAgICAgICAgICAgIHZhciBjbG9zZXN0QW5jaG9yRGlzdGFuY2UgPSBudWxsLAoKICAgICAgICAgICAgICAgICAgLy8gU3RvcmVzIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBhbmNob3IKICAgICAgICAgICAgICAgICAgY2xvc2VzdEFuY2hvcklkeCA9IG51bGwsCgogICAgICAgICAgICAgICAgICAvLyBLZWVwcyBhIHJlZmVyZW5jZSB0byBhbGwgYW5jaG9ycwogICAgICAgICAgICAgICAgICBhbmNob3JzID0gJChzZWxmLm9wdGlvbnMuY29udGV4dCkuZmluZCgiZGl2W2RhdGEtdW5pcXVlXSIpLAoKICAgICAgICAgICAgICAgICAgYW5jaG9yVGV4dDsKCiAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmVzIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBhbmNob3IKICAgICAgICAgICAgICAgIGFuY2hvcnMuZWFjaChmdW5jdGlvbihpZHgpIHsKICAgICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5hYnMoKCQodGhpcykubmV4dCgpLmxlbmd0aCA/ICQodGhpcykubmV4dCgpIDogJCh0aGlzKSkub2Zmc2V0KCkudG9wIC0gd2luU2Nyb2xsVG9wIC0gc2VsZi5vcHRpb25zLmhpZ2hsaWdodE9mZnNldCk7CiAgICAgICAgICAgICAgICAgIGlmIChjbG9zZXN0QW5jaG9yRGlzdGFuY2UgPT0gbnVsbCB8fCBkaXN0YW5jZSA8IGNsb3Nlc3RBbmNob3JEaXN0YW5jZSkgewogICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RBbmNob3JEaXN0YW5jZSA9IGRpc3RhbmNlOwogICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RBbmNob3JJZHggPSBpZHg7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBhbmNob3JUZXh0ID0gJChhbmNob3JzW2Nsb3Nlc3RBbmNob3JJZHhdKS5hdHRyKCJkYXRhLXVuaXF1ZSIpOwoKICAgICAgICAgICAgICAgIC8vIFN0b3JlcyB0aGUgbGlzdCBpdGVtIEhUTUwgZWxlbWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50bHkgdHJhdmVyc2VkIGFuY2hvciB0YWcKICAgICAgICAgICAgICAgIGVsZW0gPSAkKCdsaVtkYXRhLXVuaXF1ZT0iJyArIGFuY2hvclRleHQgKyAnIl0nKTsKCiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYGhpZ2hsaWdodE9uU2Nyb2xsYCBvcHRpb24gaXMgdHJ1ZSBhbmQgYSBuZXh0IGVsZW1lbnQgaXMgZm91bmQKICAgICAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuaGlnaGxpZ2h0T25TY3JvbGwgJiYgZWxlbS5sZW5ndGgpIHsKCiAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZXMgaGlnaGxpZ2h0aW5nIGZyb20gYWxsIG9mIHRoZSBsaXN0IGl0ZW0ncwogICAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnQuZmluZCgiLiIgKyBzZWxmLmZvY3VzQ2xhc3MpLnJlbW92ZUNsYXNzKHNlbGYuZm9jdXNDbGFzcyk7CgogICAgICAgICAgICAgICAgICAvLyBIaWdobGlnaHRzIHRoZSBjb3JyZXNwb25kaW5nIGxpc3QgaXRlbQogICAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzKHNlbGYuZm9jdXNDbGFzcyk7CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuc2Nyb2xsSGlzdG9yeSkgewoKICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoICE9PSAiIyIgKyBhbmNob3JUZXh0KSB7CgogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKCIjIiArIGFuY2hvclRleHQpOwoKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIHRoZSBgc2hvd0FuZEhpZGVPblNjcm9sbGAgb3B0aW9uIGlzIHRydWUKICAgICAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuc2hvd0FuZEhpZGVPblNjcm9sbCAmJiBzZWxmLm9wdGlvbnMuc2hvd0FuZEhpZGUpIHsKCiAgICAgICAgICAgICAgICAgIHNlbGYuX3RyaWdnZXJTaG93KGVsZW0sIHRydWUpOwoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgfSwgMCk7CgogICAgICAgICAgICB9KTsKCiAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICB9LAoKICAgICAgLy8gU2hvdwogICAgICAvLyAtLS0tCiAgICAgIC8vICAgICAgT3BlbnMgdGhlIGN1cnJlbnQgc3ViLWhlYWRlcgogICAgICBzaG93OiBmdW5jdGlvbihlbGVtLCBzY3JvbGwpIHsKCiAgICAgICAgLy8gU3RvcmVzIHRoZSBwbHVnaW4gY29udGV4dCBpbiB0aGUgYHNlbGZgIHZhcmlhYmxlCiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAogICAgICAgICAgZWxlbWVudCA9IGVsZW07CgogICAgICAgIC8vIElmIHRoZSBzdWItaGVhZGVyIGlzIG5vdCBhbHJlYWR5IHZpc2libGUKICAgICAgICBpZiAoIWVsZW0uaXMoIjp2aXNpYmxlIikpIHsKCiAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGRvZXMgbm90IGhhdmUgYW55IG5lc3RlZCBzdWJoZWFkZXJzLCBpcyBub3QgYSBoZWFkZXIsIGFuZCBpdHMgcGFyZW50IGlzIG5vdCB2aXNpYmxlCiAgICAgICAgICBpZiAoIWVsZW0uZmluZChzdWJoZWFkZXJDbGFzcykubGVuZ3RoICYmICFlbGVtLnBhcmVudCgpLmlzKGhlYWRlckNsYXNzKSAmJiAhZWxlbS5wYXJlbnQoKS5pcygiOnZpc2libGUiKSkgewoKICAgICAgICAgICAgLy8gU2V0cyB0aGUgY3VycmVudCBlbGVtZW50IHRvIGFsbCBvZiB0aGUgc3ViaGVhZGVycyB3aXRoaW4gdGhlIGN1cnJlbnQgaGVhZGVyCiAgICAgICAgICAgIGVsZW0gPSBlbGVtLnBhcmVudHMoc3ViaGVhZGVyQ2xhc3MpLmFkZChlbGVtKTsKCiAgICAgICAgICB9CgogICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGFueSBuZXN0ZWQgc3ViaGVhZGVycyBhbmQgaXMgbm90IGEgaGVhZGVyCiAgICAgICAgICBlbHNlIGlmICghZWxlbS5jaGlsZHJlbihzdWJoZWFkZXJDbGFzcykubGVuZ3RoICYmICFlbGVtLnBhcmVudCgpLmlzKGhlYWRlckNsYXNzKSkgewoKICAgICAgICAgICAgLy8gU2V0cyB0aGUgY3VycmVudCBlbGVtZW50IHRvIHRoZSBjbG9zZXN0IHN1YmhlYWRlcgogICAgICAgICAgICBlbGVtID0gZWxlbS5jbG9zZXN0KHN1YmhlYWRlckNsYXNzKTsKCiAgICAgICAgICB9CgogICAgICAgICAgLy9EZXRlcm1pbmVzIHdoYXQgalF1ZXJ5IGVmZmVjdCB0byB1c2UKICAgICAgICAgIHN3aXRjaCAoc2VsZi5vcHRpb25zLnNob3dFZmZlY3QpIHsKCiAgICAgICAgICAgIC8vVXNlcyBgbm8gZWZmZWN0YAogICAgICAgICAgICBjYXNlICJub25lIjoKCiAgICAgICAgICAgICAgZWxlbS5zaG93KCk7CgogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAvL1VzZXMgdGhlIGpRdWVyeSBgc2hvd2Agc3BlY2lhbCBlZmZlY3QKICAgICAgICAgICAgY2FzZSAic2hvdyI6CgogICAgICAgICAgICAgIGVsZW0uc2hvdyhzZWxmLm9wdGlvbnMuc2hvd0VmZmVjdFNwZWVkKTsKCiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgIC8vVXNlcyB0aGUgalF1ZXJ5IGBzbGlkZURvd25gIHNwZWNpYWwgZWZmZWN0CiAgICAgICAgICAgIGNhc2UgInNsaWRlRG93biI6CgogICAgICAgICAgICAgIGVsZW0uc2xpZGVEb3duKHNlbGYub3B0aW9ucy5zaG93RWZmZWN0U3BlZWQpOwoKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgLy9Vc2VzIHRoZSBqUXVlcnkgYGZhZGVJbmAgc3BlY2lhbCBlZmZlY3QKICAgICAgICAgICAgY2FzZSAiZmFkZUluIjoKCiAgICAgICAgICAgICAgZWxlbS5mYWRlSW4oc2VsZi5vcHRpb25zLnNob3dFZmZlY3RTcGVlZCk7CgogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAvL0lmIG5vbmUgb2YgdGhlIGFib3ZlIG9wdGlvbnMgd2VyZSBwYXNzZWQsIHRoZW4gYSBgalF1ZXJ5VUkgc2hvdyBlZmZlY3RgIGlzIGV4cGVjdGVkCiAgICAgICAgICAgIGRlZmF1bHQ6CgogICAgICAgICAgICAgIGVsZW0uc2hvdygpOwoKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgc3ViaGVhZGVyIHBhcmVudCBlbGVtZW50IGlzIGEgaGVhZGVyCiAgICAgICAgaWYgKGVsZW0ucGFyZW50KCkuaXMoaGVhZGVyQ2xhc3MpKSB7CgogICAgICAgICAgLy8gSGlkZXMgYWxsIG5vbi1hY3RpdmUgc3ViLWhlYWRlcnMKICAgICAgICAgIHNlbGYuaGlkZSgkKHN1YmhlYWRlckNsYXNzKS5ub3QoZWxlbSkpOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHN1YmhlYWRlciBwYXJlbnQgZWxlbWVudCBpcyBub3QgYSBoZWFkZXIKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAvLyBIaWRlcyBhbGwgbm9uLWFjdGl2ZSBzdWItaGVhZGVycwogICAgICAgICAgc2VsZi5oaWRlKCQoc3ViaGVhZGVyQ2xhc3MpLm5vdChlbGVtLmNsb3Nlc3QoaGVhZGVyQ2xhc3MpLmZpbmQoc3ViaGVhZGVyQ2xhc3MpLm5vdChlbGVtLnNpYmxpbmdzKCkpKSk7CgogICAgICAgIH0KCiAgICAgICAgLy8gTWFpbnRhaW5zIGNoYWluYWJsaXR5CiAgICAgICAgcmV0dXJuIHNlbGY7CgogICAgICB9LAoKICAgICAgLy8gSGlkZQogICAgICAvLyAtLS0tCiAgICAgIC8vICAgICAgQ2xvc2VzIHRoZSBjdXJyZW50IHN1Yi1oZWFkZXIKICAgICAgaGlkZTogZnVuY3Rpb24oZWxlbSkgewoKICAgICAgICAvLyBTdG9yZXMgdGhlIHBsdWdpbiBjb250ZXh0IGluIHRoZSBgc2VsZmAgdmFyaWFibGUKICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgICAgIC8vRGV0ZXJtaW5lcyB3aGF0IGpRdWVyeSBlZmZlY3QgdG8gdXNlCiAgICAgICAgc3dpdGNoIChzZWxmLm9wdGlvbnMuaGlkZUVmZmVjdCkgewoKICAgICAgICAgIC8vIFVzZXMgYG5vIGVmZmVjdGAKICAgICAgICAgIGNhc2UgIm5vbmUiOgoKICAgICAgICAgICAgZWxlbS5oaWRlKCk7CgogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIC8vIFVzZXMgdGhlIGpRdWVyeSBgaGlkZWAgc3BlY2lhbCBlZmZlY3QKICAgICAgICAgIGNhc2UgImhpZGUiOgoKICAgICAgICAgICAgZWxlbS5oaWRlKHNlbGYub3B0aW9ucy5oaWRlRWZmZWN0U3BlZWQpOwoKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAvLyBVc2VzIHRoZSBqUXVlcnkgYHNsaWRlVXBgIHNwZWNpYWwgZWZmZWN0CiAgICAgICAgICBjYXNlICJzbGlkZVVwIjoKCiAgICAgICAgICAgIGVsZW0uc2xpZGVVcChzZWxmLm9wdGlvbnMuaGlkZUVmZmVjdFNwZWVkKTsKCiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgLy8gVXNlcyB0aGUgalF1ZXJ5IGBmYWRlT3V0YCBzcGVjaWFsIGVmZmVjdAogICAgICAgICAgY2FzZSAiZmFkZU91dCI6CgogICAgICAgICAgICBlbGVtLmZhZGVPdXQoc2VsZi5vcHRpb25zLmhpZGVFZmZlY3RTcGVlZCk7CgogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIGFib3ZlIG9wdGlvbnMgd2VyZSBwYXNzZWQsIHRoZW4gYSBganF1ZXJ5VUkgaGlkZSBlZmZlY3RgIGlzIGV4cGVjdGVkCiAgICAgICAgICBkZWZhdWx0OgoKICAgICAgICAgICAgZWxlbS5oaWRlKCk7CgogICAgICAgICAgICBicmVhazsKCiAgICAgICAgfQoKICAgICAgICAvLyBNYWludGFpbnMgY2hhaW5hYmxpdHkKICAgICAgICByZXR1cm4gc2VsZjsKICAgICAgfSwKCiAgICAgIC8vIF90cmlnZ2VyU2hvdwogICAgICAvLyAtLS0tLS0tLS0tLS0KICAgICAgLy8gICAgICBEZXRlcm1pbmVzIHdoYXQgZWxlbWVudHMgZ2V0IHNob3duIG9uIHNjcm9sbCBhbmQgY2xpY2sKICAgICAgX3RyaWdnZXJTaG93OiBmdW5jdGlvbihlbGVtLCBzY3JvbGwpIHsKCiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwoKICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50J3MgcGFyZW50IGlzIGEgaGVhZGVyIGVsZW1lbnQgb3IgdGhlIG5leHQgZWxlbWVudCBpcyBhIG5lc3RlZCBzdWJoZWFkZXIgZWxlbWVudAogICAgICAgIGlmIChlbGVtLnBhcmVudCgpLmlzKGhlYWRlckNsYXNzKSB8fCBlbGVtLm5leHQoKS5pcyhzdWJoZWFkZXJDbGFzcykpIHsKCiAgICAgICAgICAvLyBTaG93cyB0aGUgbmV4dCBzdWItaGVhZGVyIGVsZW1lbnQKICAgICAgICAgIHNlbGYuc2hvdyhlbGVtLm5leHQoc3ViaGVhZGVyQ2xhc3MpLCBzY3JvbGwpOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGVsZW1lbnQncyBwYXJlbnQgaXMgYSBzdWJoZWFkZXIgZWxlbWVudAogICAgICAgIGVsc2UgaWYgKGVsZW0ucGFyZW50KCkuaXMoc3ViaGVhZGVyQ2xhc3MpKSB7CgogICAgICAgICAgLy8gU2hvd3MgdGhlIHBhcmVudCBzdWItaGVhZGVyIGVsZW1lbnQKICAgICAgICAgIHNlbGYuc2hvdyhlbGVtLnBhcmVudCgpLCBzY3JvbGwpOwoKICAgICAgICB9CgogICAgICAgIC8vIE1haW50YWlucyBjaGFpbmFiaWxpdHkKICAgICAgICByZXR1cm4gc2VsZjsKCiAgICAgIH0sCgogICAgICAvLyBfYWRkQ1NTQ2xhc3NlcwogICAgICAvLyAtLS0tLS0tLS0tLS0tLQogICAgICAvLyAgICAgIEFkZHMgQ1NTIGNsYXNzZXMgdG8gdGhlIG5ld2x5IGdlbmVyYXRlZCB0YWJsZSBvZiBjb250ZW50cyBIVE1MCiAgICAgIF9hZGRDU1NDbGFzc2VzOiBmdW5jdGlvbigpIHsKCiAgICAgICAgLy8gSWYgdGhlIHVzZXIgd2FudHMgYSBqcXVlcnlVSSB0aGVtZQogICAgICAgIGlmICh0aGlzLm9wdGlvbnMudGhlbWUgPT09ICJqcXVlcnl1aSIpIHsKCiAgICAgICAgICB0aGlzLmZvY3VzQ2xhc3MgPSAidWktc3RhdGUtZGVmYXVsdCI7CgogICAgICAgICAgdGhpcy5ob3ZlckNsYXNzID0gInVpLXN0YXRlLWhvdmVyIjsKCiAgICAgICAgICAvL0FkZHMgdGhlIGRlZmF1bHQgc3R5bGluZyB0byB0aGUgZHJvcGRvd24gbGlzdAogICAgICAgICAgdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS13aWRnZXQiKS5maW5kKCIudG9jLXRpdGxlIikuYWRkQ2xhc3MoInVpLXdpZGdldC1oZWFkZXIiKS5lbmQoKS5maW5kKCJsaSIpLmFkZENsYXNzKCJ1aS13aWRnZXQtY29udGVudCIpOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSB1c2VyIHdhbnRzIGEgdHdpdHRlckJvb3RzdHJhcCB0aGVtZQogICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy50aGVtZSA9PT0gImJvb3RzdHJhcCIpIHsKCiAgICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChoZWFkZXJDbGFzcyArICIsIiArIHN1YmhlYWRlckNsYXNzKS5hZGRDbGFzcygibmF2IG5hdi1saXN0Iik7CgogICAgICAgICAgdGhpcy5mb2N1c0NsYXNzID0gImFjdGl2ZSI7CgogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlIHVzZXIgd2FudHMgYSB0d2l0dGVyQm9vdHN0cmFwIHRoZW1lCiAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnRoZW1lID09PSAiYm9vdHN0cmFwMyIpIHsKCiAgICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChoZWFkZXJDbGFzcyArICIsIiArIHN1YmhlYWRlckNsYXNzKS5hZGRDbGFzcygibGlzdC1ncm91cCIpOwoKICAgICAgICAgIHRoaXMuZWxlbWVudC5maW5kKGl0ZW1DbGFzcykuYWRkQ2xhc3MoImxpc3QtZ3JvdXAtaXRlbSIpOwoKICAgICAgICAgIHRoaXMuZm9jdXNDbGFzcyA9ICJhY3RpdmUiOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIGEgdXNlciBkb2VzIG5vdCB3YW50IGEgcHJlYnVpbHQgdGhlbWUKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAvLyBBZGRzIG1vcmUgbmV1dHJhbCBjbGFzc2VzIChpbnN0ZWFkIG9mIGpxdWVyeXVpKQoKICAgICAgICAgIHRoaXMuZm9jdXNDbGFzcyA9IHRvY0ZvY3VzQ2xhc3NOYW1lOwoKICAgICAgICAgIHRoaXMuaG92ZXJDbGFzcyA9IHRvY0hvdmVyQ2xhc3NOYW1lOwoKICAgICAgICB9CgogICAgICAgIC8vTWFpbnRhaW5zIGNoYWluYWJpbGl0eQogICAgICAgIHJldHVybiB0aGlzOwoKICAgICAgfSwKCiAgICAgIC8vIHNldE9wdGlvbgogICAgICAvLyAtLS0tLS0tLS0KICAgICAgLy8gICAgICBTZXRzIGEgc2luZ2xlIFRvY2lmeSBvcHRpb24gYWZ0ZXIgdGhlIHBsdWdpbiBpcyBpbnZva2VkCiAgICAgIHNldE9wdGlvbjogZnVuY3Rpb24oKSB7CgogICAgICAgIC8vIENhbGxzIHRoZSBqUXVlcnlVSSBXaWRnZXQgRmFjdG9yeSBzZXRPcHRpb24gbWV0aG9kCiAgICAgICAgJC5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKCiAgICAgIH0sCgogICAgICAvLyBzZXRPcHRpb25zCiAgICAgIC8vIC0tLS0tLS0tLS0KICAgICAgLy8gICAgICBTZXRzIGEgc2luZ2xlIG9yIG11bHRpcGxlIFRvY2lmeSBvcHRpb25zIGFmdGVyIHRoZSBwbHVnaW4gaXMgaW52b2tlZAogICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbigpIHsKCiAgICAgICAgLy8gQ2FsbHMgdGhlIGpRdWVyeVVJIFdpZGdldCBGYWN0b3J5IHNldE9wdGlvbnMgbWV0aG9kCiAgICAgICAgJC5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb25zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgogICAgICB9LAoKICAgICAgLy8gX3Njcm9sbFRvCiAgICAgIC8vIC0tLS0tLS0tLQogICAgICAvLyAgICAgIFNjcm9sbHMgdG8gYSBzcGVjaWZpYyBlbGVtZW50CiAgICAgIF9zY3JvbGxUbzogZnVuY3Rpb24oZWxlbSkgewoKICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCiAgICAgICAgICBkdXJhdGlvbiA9IHNlbGYub3B0aW9ucy5zbW9vdGhTY3JvbGwgfHwgMCwKICAgICAgICAgIHNjcm9sbFRvID0gc2VsZi5vcHRpb25zLnNjcm9sbFRvLAogICAgICAgICAgY3VycmVudERpdiA9ICQoJ2RpdltkYXRhLXVuaXF1ZT0iJyArIGVsZW0uYXR0cigiZGF0YS11bmlxdWUiKSArICciXScpOwoKICAgICAgICBpZiAoIWN1cnJlbnREaXYubGVuZ3RoKSB7CgogICAgICAgICAgcmV0dXJuIHNlbGY7CgogICAgICAgIH0KCiAgICAgICAgLy8gT25jZSBhbGwgYW5pbWF0aW9ucyBvbiB0aGUgcGFnZSBhcmUgY29tcGxldGUsIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQKICAgICAgICAkKCJodG1sLCBib2R5IikucHJvbWlzZSgpLmRvbmUoZnVuY3Rpb24oKSB7CgogICAgICAgICAgLy8gQW5pbWF0ZXMgdGhlIGh0bWwgYW5kIGJvZHkgZWxlbWVudCBzY3JvbGx0b3BzCiAgICAgICAgICAkKCJodG1sLCBib2R5IikuYW5pbWF0ZSh7CgogICAgICAgICAgICAvLyBTZXRzIHRoZSBqUXVlcnkgYHNjcm9sbFRvcGAgdG8gdGhlIHRvcCBvZmZzZXQgb2YgdGhlIEhUTUwgZGl2IHRhZyB0aGF0IG1hdGNoZXMgdGhlIGN1cnJlbnQgbGlzdCBpdGVtJ3MgYGRhdGEtdW5pcXVlYCB0YWcKICAgICAgICAgICAgInNjcm9sbFRvcCI6IGN1cnJlbnREaXYub2Zmc2V0KCkudG9wIC0gKCQuaXNGdW5jdGlvbihzY3JvbGxUbykgPyBzY3JvbGxUby5jYWxsKCkgOiBzY3JvbGxUbykgKyAicHgiCgogICAgICAgICAgfSwgewoKICAgICAgICAgICAgLy8gU2V0cyB0aGUgc21vb3RoU2Nyb2xsIGFuaW1hdGlvbiB0aW1lIGR1cmF0aW9uIHRvIHRoZSBzbW9vdGhTY3JvbGxTcGVlZCBvcHRpb24KICAgICAgICAgICAgImR1cmF0aW9uIjogZHVyYXRpb24KCiAgICAgICAgICB9KTsKCiAgICAgICAgfSk7CgogICAgICAgIC8vIE1haW50YWlucyBjaGFpbmFiaWxpdHkKICAgICAgICByZXR1cm4gc2VsZjsKCiAgICAgIH0KCiAgICB9KTsKCiAgfSkpOyAvL2VuZCBvZiBwbHVnaW4K"></script>
<script src="data:application/javascript;base64,CgovKioKICogalF1ZXJ5IFBsdWdpbjogU3RpY2t5IFRhYnMKICoKICogQGF1dGhvciBBaWRhbiBMaXN0ZXIgPGFpZGFuQHBocC5uZXQ+CiAqIGFkYXB0ZWQgYnkgUnViZW4gQXJzbGFuIHRvIGFjdGl2YXRlIHBhcmVudCB0YWJzIHRvbwogKiBodHRwOi8vd3d3LmFpZGFubGlzdGVyLmNvbS8yMDE0LzAzL3BlcnNpc3RpbmctdGhlLXRhYi1zdGF0ZS1pbi1ib290c3RyYXAvCiAqLwooZnVuY3Rpb24oJCkgewogICJ1c2Ugc3RyaWN0IjsKICAkLmZuLnJtYXJrZG93blN0aWNreVRhYnMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBjb250ZXh0ID0gdGhpczsKICAgIC8vIFNob3cgdGhlIHRhYiBjb3JyZXNwb25kaW5nIHdpdGggdGhlIGhhc2ggaW4gdGhlIFVSTCwgb3IgdGhlIGZpcnN0IHRhYgogICAgdmFyIHNob3dTdHVmZkZyb21IYXNoID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7CiAgICAgIHZhciBzZWxlY3RvciA9IGhhc2ggPyAnYVtocmVmPSInICsgaGFzaCArICciXScgOiAnbGkuYWN0aXZlID4gYSc7CiAgICAgIHZhciAkc2VsZWN0b3IgPSAkKHNlbGVjdG9yLCBjb250ZXh0KTsKICAgICAgaWYoJHNlbGVjdG9yLmRhdGEoJ3RvZ2dsZScpID09PSAidGFiIikgewogICAgICAgICRzZWxlY3Rvci50YWIoJ3Nob3cnKTsKICAgICAgICAvLyB3YWxrIHVwIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBlbGVtZW50LCBzaG93IGFueSBoaWRkZW4gdGFicwogICAgICAgICRzZWxlY3Rvci5wYXJlbnRzKCcuc2VjdGlvbi50YWJzZXQnKS5lYWNoKGZ1bmN0aW9uKGksIGVsbSkgewogICAgICAgICAgdmFyIGxpbmsgPSAkKCdhW2hyZWY9IiMnICsgJChlbG0pLmF0dHIoJ2lkJykgKyAnIl0nKTsKICAgICAgICAgIGlmKGxpbmsuZGF0YSgndG9nZ2xlJykgPT09ICJ0YWIiKSB7CiAgICAgICAgICAgIGxpbmsudGFiKCJzaG93Iik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CgoKICAgIC8vIFNldCB0aGUgY29ycmVjdCB0YWIgd2hlbiB0aGUgcGFnZSBsb2FkcwogICAgc2hvd1N0dWZmRnJvbUhhc2goY29udGV4dCk7CgogICAgLy8gU2V0IHRoZSBjb3JyZWN0IHRhYiB3aGVuIGEgdXNlciB1c2VzIHRoZWlyIGJhY2svZm9yd2FyZCBidXR0b24KICAgICQod2luZG93KS5vbignaGFzaGNoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICBzaG93U3R1ZmZGcm9tSGFzaChjb250ZXh0KTsKICAgIH0pOwoKICAgIC8vIENoYW5nZSB0aGUgVVJMIHdoZW4gdGFicyBhcmUgY2xpY2tlZAogICAgJCgnYScsIGNvbnRleHQpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgdGhpcy5ocmVmKTsKICAgICAgc2hvd1N0dWZmRnJvbUhhc2goY29udGV4dCk7CiAgICB9KTsKCiAgICByZXR1cm4gdGhpczsKICB9Owp9KGpRdWVyeSkpOwoKd2luZG93LmJ1aWxkVGFic2V0cyA9IGZ1bmN0aW9uKHRvY0lEKSB7CgogIC8vIGJ1aWxkIGEgdGFic2V0IGZyb20gYSBzZWN0aW9uIGRpdiB3aXRoIHRoZSAudGFic2V0IGNsYXNzCiAgZnVuY3Rpb24gYnVpbGRUYWJzZXQodGFic2V0KSB7CgogICAgLy8gY2hlY2sgZm9yIGZhZGUgYW5kIHBpbGxzIG9wdGlvbnMKICAgIHZhciBmYWRlID0gdGFic2V0Lmhhc0NsYXNzKCJ0YWJzZXQtZmFkZSIpOwogICAgdmFyIHBpbGxzID0gdGFic2V0Lmhhc0NsYXNzKCJ0YWJzZXQtcGlsbHMiKTsKICAgIHZhciBuYXZDbGFzcyA9IHBpbGxzID8gIm5hdi1waWxscyIgOiAibmF2LXRhYnMiOwoKICAgIC8vIGRldGVybWluZSB0aGUgaGVhZGluZyBsZXZlbCBvZiB0aGUgdGFic2V0IGFuZCB0YWJzCiAgICB2YXIgbWF0Y2ggPSB0YWJzZXQuYXR0cignY2xhc3MnKS5tYXRjaCgvbGV2ZWwoXGQpIC8pOwogICAgaWYgKG1hdGNoID09PSBudWxsKQogICAgICByZXR1cm47CiAgICB2YXIgdGFic2V0TGV2ZWwgPSBOdW1iZXIobWF0Y2hbMV0pOwogICAgdmFyIHRhYkxldmVsID0gdGFic2V0TGV2ZWwgKyAxOwoKICAgIC8vIGZpbmQgYWxsIHN1YmhlYWRpbmdzIGltbWVkaWF0ZWx5IGJlbG93CiAgICB2YXIgdGFicyA9IHRhYnNldC5maW5kKCJkaXYuc2VjdGlvbi5sZXZlbCIgKyB0YWJMZXZlbCk7CiAgICBpZiAoIXRhYnMubGVuZ3RoKQogICAgICByZXR1cm47CgogICAgLy8gY3JlYXRlIHRhYmxpc3QgYW5kIHRhYi1jb250ZW50IGVsZW1lbnRzCiAgICB2YXIgdGFiTGlzdCA9ICQoJzx1bCBjbGFzcz0ibmF2ICcgKyBuYXZDbGFzcyArICciIHJvbGU9InRhYmxpc3QiPjwvdWw+Jyk7CiAgICAkKHRhYnNbMF0pLmJlZm9yZSh0YWJMaXN0KTsKICAgIHZhciB0YWJDb250ZW50ID0gJCgnPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPjwvZGl2PicpOwogICAgJCh0YWJzWzBdKS5iZWZvcmUodGFiQ29udGVudCk7CgogICAgLy8gYnVpbGQgdGhlIHRhYnNldAogICAgdmFyIGFjdGl2ZVRhYiA9IDA7CiAgICB0YWJzLmVhY2goZnVuY3Rpb24oaSkgewoKICAgICAgLy8gZ2V0IHRoZSB0YWIgZGl2CiAgICAgIHZhciB0YWIgPSAkKHRhYnNbaV0pOwoKICAgICAgLy8gZ2V0IHRoZSBpZCB0aGVuIHNhbml0aXplIGl0IGZvciB1c2Ugd2l0aCBib290c3RyYXAgdGFicwogICAgICB2YXIgaWQgPSB0YWIuYXR0cignaWQnKTsKCiAgICAgIC8vIHNlZSBpZiB0aGlzIGlzIG1hcmtlZCBhcyB0aGUgYWN0aXZlIHRhYgogICAgICBpZiAodGFiLmhhc0NsYXNzKCdhY3RpdmUnKSkKICAgICAgICBhY3RpdmVUYWIgPSBpOwoKICAgICAgLy8gcmVtb3ZlIGFueSB0YWJsZSBvZiBjb250ZW50cyBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aAogICAgICAvLyB0aGlzIElEIChzaW5jZSB3ZSdsbCBiZSByZW1vdmluZyB0aGUgaGVhZGluZyBlbGVtZW50KQogICAgICAkKCJkaXYjIiArIHRvY0lEICsgIiBsaSBhW2hyZWY9JyMiICsgaWQgKyAiJ10iKS5wYXJlbnQoKS5yZW1vdmUoKTsKCiAgICAgIC8vIHNhbml0aXplIHRoZSBpZCBmb3IgdXNlIHdpdGggYm9vdHN0cmFwIHRhYnMKICAgICAgaWQgPSBpZC5yZXBsYWNlKC9bLlwvPyYhIzw+XS9nLCAnJykucmVwbGFjZSgvXHMvZywgJ18nKTsKICAgICAgdGFiLmF0dHIoJ2lkJywgaWQpOwoKICAgICAgLy8gZ2V0IHRoZSBoZWFkaW5nIGVsZW1lbnQgd2l0aGluIGl0LCBncmFiIGl0J3MgdGV4dCwgdGhlbiByZW1vdmUgaXQKICAgICAgdmFyIGhlYWRpbmcgPSB0YWIuZmluZCgnaCcgKyB0YWJMZXZlbCArICc6Zmlyc3QnKTsKICAgICAgdmFyIGhlYWRpbmdUZXh0ID0gaGVhZGluZy5odG1sKCk7CiAgICAgIGhlYWRpbmcucmVtb3ZlKCk7CgogICAgICAvLyBidWlsZCBhbmQgYXBwZW5kIHRoZSB0YWIgbGlzdCBpdGVtCiAgICAgIHZhciBhID0gJCgnPGEgcm9sZT0idGFiIiBkYXRhLXRvZ2dsZT0idGFiIj4nICsgaGVhZGluZ1RleHQgKyAnPC9hPicpOwogICAgICBhLmF0dHIoJ2hyZWYnLCAnIycgKyBpZCk7CiAgICAgIGEuYXR0cignYXJpYS1jb250cm9scycsIGlkKTsKICAgICAgdmFyIGxpID0gJCgnPGxpIHJvbGU9InByZXNlbnRhdGlvbiI+PC9saT4nKTsKICAgICAgbGkuYXBwZW5kKGEpOwogICAgICB0YWJMaXN0LmFwcGVuZChsaSk7CgogICAgICAvLyBzZXQgaXQncyBhdHRyaWJ1dGVzCiAgICAgIHRhYi5hdHRyKCdyb2xlJywgJ3RhYnBhbmVsJyk7CiAgICAgIHRhYi5hZGRDbGFzcygndGFiLXBhbmUnKTsKICAgICAgdGFiLmFkZENsYXNzKCd0YWJiZWQtcGFuZScpOwogICAgICBpZiAoZmFkZSkKICAgICAgICB0YWIuYWRkQ2xhc3MoJ2ZhZGUnKTsKCiAgICAgIC8vIG1vdmUgaXQgaW50byB0aGUgdGFiIGNvbnRlbnQgZGl2CiAgICAgIHRhYi5kZXRhY2goKS5hcHBlbmRUbyh0YWJDb250ZW50KTsKICAgIH0pOwoKICAgIC8vIHNldCBhY3RpdmUgdGFiCiAgICAkKHRhYkxpc3QuY2hpbGRyZW4oJ2xpJylbYWN0aXZlVGFiXSkuYWRkQ2xhc3MoJ2FjdGl2ZScpOwogICAgdmFyIGFjdGl2ZSA9ICQodGFiQ29udGVudC5jaGlsZHJlbignZGl2LnNlY3Rpb24nKVthY3RpdmVUYWJdKTsKICAgIGFjdGl2ZS5hZGRDbGFzcygnYWN0aXZlJyk7CiAgICBpZiAoZmFkZSkKICAgICAgYWN0aXZlLmFkZENsYXNzKCdpbicpOwoKICAgIGlmICh0YWJzZXQuaGFzQ2xhc3MoInRhYnNldC1zdGlja3kiKSkKICAgICAgdGFic2V0LnJtYXJrZG93blN0aWNreVRhYnMoKTsKICB9CgogIC8vIGNvbnZlcnQgc2VjdGlvbiBkaXZzIHdpdGggdGhlIC50YWJzZXQgY2xhc3MgdG8gdGFic2V0cwogIHZhciB0YWJzZXRzID0gJCgiZGl2LnNlY3Rpb24udGFic2V0Iik7CiAgdGFic2V0cy5lYWNoKGZ1bmN0aW9uKGkpIHsKICAgIGJ1aWxkVGFic2V0KCQodGFic2V0c1tpXSkpOwogIH0pOwp9OwoK"></script>
<script src="data:application/javascript;base64,CndpbmRvdy5pbml0aWFsaXplQ29kZUZvbGRpbmcgPSBmdW5jdGlvbihzaG93KSB7CgogIC8vIGhhbmRsZXJzIGZvciBzaG93LWFsbCBhbmQgaGlkZSBhbGwKICAkKCIjcm1kLXNob3ctYWxsLWNvZGUiKS5jbGljayhmdW5jdGlvbigpIHsKICAgICQoJ2Rpdi5yLWNvZGUtY29sbGFwc2UnKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAkKHRoaXMpLmNvbGxhcHNlKCdzaG93Jyk7CiAgICB9KTsKICB9KTsKICAkKCIjcm1kLWhpZGUtYWxsLWNvZGUiKS5jbGljayhmdW5jdGlvbigpIHsKICAgICQoJ2Rpdi5yLWNvZGUtY29sbGFwc2UnKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAkKHRoaXMpLmNvbGxhcHNlKCdoaWRlJyk7CiAgICB9KTsKICB9KTsKCiAgLy8gaW5kZXggZm9yIHVuaXF1ZSBjb2RlIGVsZW1lbnQgaWRzCiAgdmFyIGN1cnJlbnRJbmRleCA9IDE7CgogIC8vIHNlbGVjdCBhbGwgUiBjb2RlIGJsb2NrcwogIHZhciByQ29kZUJsb2NrcyA9ICQoJ3ByZS5yLCBwcmUucHl0aG9uLCBwcmUuYmFzaCwgcHJlLnNxbCwgcHJlLmNwcCwgcHJlLnN0YW4sIHByZS5qdWxpYSwgcHJlLmZvbGRhYmxlJyk7CiAgckNvZGVCbG9ja3MuZWFjaChmdW5jdGlvbigpIHsKCiAgICAvLyBjcmVhdGUgYSBjb2xsYXBzYWJsZSBkaXYgdG8gd3JhcCB0aGUgY29kZSBpbgogICAgdmFyIGRpdiA9ICQoJzxkaXYgY2xhc3M9ImNvbGxhcHNlIHItY29kZS1jb2xsYXBzZSI+PC9kaXY+Jyk7CiAgICB2YXIgc2hvd1RoaXMgPSAoc2hvdyB8fCAkKHRoaXMpLmhhc0NsYXNzKCdmb2xkLXNob3cnKSkgJiYgISQodGhpcykuaGFzQ2xhc3MoJ2ZvbGQtaGlkZScpOwogICAgdmFyIGlkID0gJ3Jjb2RlLTY0M0UwRjM2JyArIGN1cnJlbnRJbmRleCsrOwogICAgZGl2LmF0dHIoJ2lkJywgaWQpOwogICAgJCh0aGlzKS5iZWZvcmUoZGl2KTsKICAgICQodGhpcykuZGV0YWNoKCkuYXBwZW5kVG8oZGl2KTsKCiAgICAvLyBhZGQgYSBzaG93IGNvZGUgYnV0dG9uIHJpZ2h0IGFib3ZlCiAgICB2YXIgc2hvd0NvZGVUZXh0ID0gJCgnPHNwYW4+JyArIChzaG93VGhpcyA/ICdIaWRlJyA6ICdDb2RlJykgKyAnPC9zcGFuPicpOwogICAgdmFyIHNob3dDb2RlQnV0dG9uID0gJCgnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXhzIGJ0bi1zZWNvbmRhcnkgYnRuLXNtIGNvZGUtZm9sZGluZy1idG4gcHVsbC1yaWdodCBmbG9hdC1yaWdodCI+PC9idXR0b24+Jyk7CiAgICBzaG93Q29kZUJ1dHRvbi5hcHBlbmQoc2hvd0NvZGVUZXh0KTsKICAgIHNob3dDb2RlQnV0dG9uCiAgICAgICAgLmF0dHIoJ2RhdGEtdG9nZ2xlJywgJ2NvbGxhcHNlJykKICAgICAgICAuYXR0cignZGF0YS10YXJnZXQnLCAnIycgKyBpZCkKICAgICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIHNob3dUaGlzKQogICAgICAgIC5hdHRyKCdhcmlhLWNvbnRyb2xzJywgaWQpOwoKICAgIHZhciBidXR0b25Sb3cgPSAkKCc8ZGl2IGNsYXNzPSJyb3ciPjwvZGl2PicpOwogICAgdmFyIGJ1dHRvbkNvbCA9ICQoJzxkaXYgY2xhc3M9ImNvbC1tZC0xMiI+PC9kaXY+Jyk7CgogICAgYnV0dG9uQ29sLmFwcGVuZChzaG93Q29kZUJ1dHRvbik7CiAgICBidXR0b25Sb3cuYXBwZW5kKGJ1dHRvbkNvbCk7CgogICAgZGl2LmJlZm9yZShidXR0b25Sb3cpOwoKICAgIC8vIHNob3cgdGhlIGRpdiBpZiBuZWNlc3NhcnkKICAgIGlmIChzaG93VGhpcykgZGl2LmNvbGxhcHNlKCdzaG93Jyk7CgogICAgLy8gdXBkYXRlIHN0YXRlIG9mIGJ1dHRvbiBvbiBzaG93L2hpZGUKICAgIC8vICAgKiBDaGFuZ2UgdGV4dAogICAgLy8gICAqIGFkZCBhIGNsYXNzIGZvciBpbnRlcm1lZGlhdGUgc3RhdGVzIHN0eWxpbmcKICAgIGRpdi5vbignaGlkZS5icy5jb2xsYXBzZScsIGZ1bmN0aW9uICgpIHsKICAgICAgc2hvd0NvZGVUZXh0LnRleHQoJ0NvZGUnKTsKICAgICAgc2hvd0NvZGVCdXR0b24uYWRkQ2xhc3MoJ2J0bi1jb2xsYXBzaW5nJyk7CiAgICB9KTsKICAgIGRpdi5vbignaGlkZGVuLmJzLmNvbGxhcHNlJywgZnVuY3Rpb24gKCkgewogICAgICBzaG93Q29kZUJ1dHRvbi5yZW1vdmVDbGFzcygnYnRuLWNvbGxhcHNpbmcnKTsKICAgIH0pOwogICAgZGl2Lm9uKCdzaG93LmJzLmNvbGxhcHNlJywgZnVuY3Rpb24gKCkgewogICAgICBzaG93Q29kZVRleHQudGV4dCgnSGlkZScpOwogICAgICBzaG93Q29kZUJ1dHRvbi5hZGRDbGFzcygnYnRuLWV4cGFuZGluZycpOwogICAgfSk7CiAgICBkaXYub24oJ3Nob3duLmJzLmNvbGxhcHNlJywgZnVuY3Rpb24gKCkgewogICAgICBzaG93Q29kZUJ1dHRvbi5yZW1vdmVDbGFzcygnYnRuLWV4cGFuZGluZycpOwogICAgfSk7CgogIH0pOwoKfQo="></script>
<link href="data:text/css,%2Epagedtable%20%7B%0Aoverflow%3A%20auto%3B%0Apadding%2Dleft%3A%208px%3B%0Apadding%2Dright%3A%208px%3B%0A%7D%0A%2Epagedtable%2Dwrapper%20%7B%0Aborder%3A%201px%20solid%20%23ccc%3B%0Aborder%2Dradius%3A%204px%3B%0Amargin%2Dbottom%3A%2010px%3B%0A%7D%0A%2Epagedtable%20table%20%7B%0Awidth%3A%20100%25%3B%0Amax%2Dwidth%3A%20100%25%3B%0Amargin%3A%200%3B%0A%7D%0A%2Epagedtable%20th%20%7B%0Apadding%3A%200%205px%200%205px%3B%0Aborder%3A%20none%3B%0Aborder%2Dbottom%3A%202px%20solid%20%23dddddd%3B%0Amin%2Dwidth%3A%2045px%3B%0A%7D%0A%2Epagedtable%2Dempty%20th%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Epagedtable%20td%20%7B%0Apadding%3A%200%204px%200%204px%3B%0A%7D%0A%2Epagedtable%20%2Eeven%20%7B%0Abackground%2Dcolor%3A%20rgba%28140%2C%20140%2C%20140%2C%200%2E1%29%3B%0A%7D%0A%2Epagedtable%2Dpadding%2Dcol%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Epagedtable%20a%20%7B%0A%2Dwebkit%2Dtouch%2Dcallout%3A%20none%3B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dkhtml%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%2Dms%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0A%7D%0A%2Epagedtable%2Dindex%2Dnav%20%7B%0Acursor%3A%20pointer%3B%0Apadding%3A%200%205px%200%205px%3B%0Afloat%3A%20right%3B%0Aborder%3A%200%3B%0A%7D%0A%2Epagedtable%2Dindex%2Dnav%2Ddisabled%20%7B%0Acursor%3A%20default%3B%0Atext%2Ddecoration%3A%20none%3B%0Acolor%3A%20%23999%3B%0A%7D%0Aa%2Epagedtable%2Dindex%2Dnav%2Ddisabled%3Ahover%20%7B%0Atext%2Ddecoration%3A%20none%3B%0Acolor%3A%20%23999%3B%0A%7D%0A%2Epagedtable%2Dindexes%20%7B%0Acursor%3A%20pointer%3B%0Afloat%3A%20right%3B%0Aborder%3A%200%3B%0A%7D%0A%2Epagedtable%2Dindex%2Dcurrent%20%7B%0Acursor%3A%20default%3B%0Atext%2Ddecoration%3A%20none%3B%0Afont%2Dweight%3A%20bold%3B%0Acolor%3A%20%23333%3B%0Aborder%3A%200%3B%0A%7D%0Aa%2Epagedtable%2Dindex%2Dcurrent%3Ahover%20%7B%0Atext%2Ddecoration%3A%20none%3B%0Afont%2Dweight%3A%20bold%3B%0Acolor%3A%20%23333%3B%0A%7D%0A%2Epagedtable%2Dindex%20%7B%0Awidth%3A%2030px%3B%0Adisplay%3A%20inline%2Dblock%3B%0Atext%2Dalign%3A%20center%3B%0Aborder%3A%200%3B%0A%7D%0A%2Epagedtable%2Dindex%2Dseparator%2Dleft%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Acolor%3A%20%23333%3B%0Afont%2Dsize%3A%209px%3B%0Apadding%3A%200%200%200%200%3B%0Acursor%3A%20default%3B%0A%7D%0A%2Epagedtable%2Dindex%2Dseparator%2Dright%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Acolor%3A%20%23333%3B%0Afont%2Dsize%3A%209px%3B%0Apadding%3A%200%204px%200%200%3B%0Acursor%3A%20default%3B%0A%7D%0A%2Epagedtable%2Dfooter%20%7B%0Apadding%2Dtop%3A%204px%3B%0Apadding%2Dbottom%3A%205px%3B%0A%7D%0A%2Epagedtable%2Dnot%2Dempty%20%2Epagedtable%2Dfooter%20%7B%0Aborder%2Dtop%3A%202px%20solid%20%23dddddd%3B%0A%7D%0A%2Epagedtable%2Dinfo%20%7B%0Aoverflow%3A%20hidden%3B%0Acolor%3A%20%23999%3B%0Awhite%2Dspace%3A%20nowrap%3B%0Atext%2Doverflow%3A%20ellipsis%3B%0A%7D%0A%2Epagedtable%2Dheader%2Dname%20%7B%0Aoverflow%3A%20hidden%3B%0Atext%2Doverflow%3A%20ellipsis%3B%0A%7D%0A%2Epagedtable%2Dheader%2Dtype%20%7B%0Acolor%3A%20%23999%3B%0Afont%2Dweight%3A%20400%3B%0A%7D%0A%2Epagedtable%2Dna%2Dcell%20%7B%0Afont%2Dstyle%3A%20italic%3B%0Aopacity%3A%200%2E3%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,Ly8gUHJvZHVjdGlvbiBzdGVwcyBvZiBFQ01BLTI2MiwgRWRpdGlvbiA1LCAxNS40LjQuMTgKLy8gUmVmZXJlbmNlOiBodHRwOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjQuNC4xOAppZiAoIUFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSB7CgogIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHsKCiAgICB2YXIgVCwgazsKCiAgICBpZiAodGhpcyA9PT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcgdGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7CiAgICB9CgogICAgLy8gMS4gTGV0IE8gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRvT2JqZWN0KCkgcGFzc2luZyB0aGUKICAgIC8vIHx0aGlzfCB2YWx1ZSBhcyB0aGUgYXJndW1lbnQuCiAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTsKCiAgICAvLyAyLiBMZXQgbGVuVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBHZXQoKSBpbnRlcm5hbAogICAgLy8gbWV0aG9kIG9mIE8gd2l0aCB0aGUgYXJndW1lbnQgImxlbmd0aCIuCiAgICAvLyAzLiBMZXQgbGVuIGJlIHRvVWludDMyKGxlblZhbHVlKS4KICAgIHZhciBsZW4gPSBPLmxlbmd0aCA+Pj4gMDsKCiAgICAvLyA0LiBJZiBpc0NhbGxhYmxlKGNhbGxiYWNrKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLgogICAgLy8gU2VlOiBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3g5LjExCiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CiAgICB9CgogICAgLy8gNS4gSWYgdGhpc0FyZyB3YXMgc3VwcGxpZWQsIGxldCBUIGJlIHRoaXNBcmc7IGVsc2UgbGV0CiAgICAvLyBUIGJlIHVuZGVmaW5lZC4KICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgICBUID0gdGhpc0FyZzsKICAgIH0KCiAgICAvLyA2LiBMZXQgayBiZSAwCiAgICBrID0gMDsKCiAgICAvLyA3LiBSZXBlYXQsIHdoaWxlIGsgPCBsZW4KICAgIHdoaWxlIChrIDwgbGVuKSB7CgogICAgICB2YXIga1ZhbHVlOwoKICAgICAgLy8gYS4gTGV0IFBrIGJlIFRvU3RyaW5nKGspLgogICAgICAvLyAgICBUaGlzIGlzIGltcGxpY2l0IGZvciBMSFMgb3BlcmFuZHMgb2YgdGhlIGluIG9wZXJhdG9yCiAgICAgIC8vIGIuIExldCBrUHJlc2VudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIEhhc1Byb3BlcnR5CiAgICAgIC8vICAgIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgUGsuCiAgICAgIC8vICAgIFRoaXMgc3RlcCBjYW4gYmUgY29tYmluZWQgd2l0aCBjCiAgICAgIC8vIGMuIElmIGtQcmVzZW50IGlzIHRydWUsIHRoZW4KICAgICAgaWYgKGsgaW4gTykgewoKICAgICAgICAvLyBpLiBMZXQga1ZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgR2V0IGludGVybmFsCiAgICAgICAgLy8gbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudCBQay4KICAgICAgICBrVmFsdWUgPSBPW2tdOwoKICAgICAgICAvLyBpaS4gQ2FsbCB0aGUgQ2FsbCBpbnRlcm5hbCBtZXRob2Qgb2YgY2FsbGJhY2sgd2l0aCBUIGFzCiAgICAgICAgLy8gdGhlIHRoaXMgdmFsdWUgYW5kIGFyZ3VtZW50IGxpc3QgY29udGFpbmluZyBrVmFsdWUsIGssIGFuZCBPLgogICAgICAgIGNhbGxiYWNrLmNhbGwoVCwga1ZhbHVlLCBrLCBPKTsKICAgICAgfQogICAgICAvLyBkLiBJbmNyZWFzZSBrIGJ5IDEuCiAgICAgIGsrKzsKICAgIH0KICAgIC8vIDguIHJldHVybiB1bmRlZmluZWQKICB9Owp9CgovLyBQcm9kdWN0aW9uIHN0ZXBzIG9mIEVDTUEtMjYyLCBFZGl0aW9uIDUsIDE1LjQuNC4xOQovLyBSZWZlcmVuY2U6IGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuNC40LjE5CmlmICghQXJyYXkucHJvdG90eXBlLm1hcCkgewoKICBBcnJheS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHsKCiAgICB2YXIgVCwgQSwgazsKCiAgICBpZiAodGhpcyA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyB0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTsKICAgIH0KCiAgICAvLyAxLiBMZXQgTyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9PYmplY3QgcGFzc2luZyB0aGUgfHRoaXN8CiAgICAvLyAgICB2YWx1ZSBhcyB0aGUgYXJndW1lbnQuCiAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTsKCiAgICAvLyAyLiBMZXQgbGVuVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBHZXQgaW50ZXJuYWwKICAgIC8vICAgIG1ldGhvZCBvZiBPIHdpdGggdGhlIGFyZ3VtZW50ICJsZW5ndGgiLgogICAgLy8gMy4gTGV0IGxlbiBiZSBUb1VpbnQzMihsZW5WYWx1ZSkuCiAgICB2YXIgbGVuID0gTy5sZW5ndGggPj4+IDA7CgogICAgLy8gNC4gSWYgSXNDYWxsYWJsZShjYWxsYmFjaykgaXMgZmFsc2UsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KICAgIC8vIFNlZTogaHR0cDovL2VzNS5naXRodWIuY29tLyN4OS4xMQogICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpOwogICAgfQoKICAgIC8vIDUuIElmIHRoaXNBcmcgd2FzIHN1cHBsaWVkLCBsZXQgVCBiZSB0aGlzQXJnOyBlbHNlIGxldCBUIGJlIHVuZGVmaW5lZC4KICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgICBUID0gdGhpc0FyZzsKICAgIH0KCiAgICAvLyA2LiBMZXQgQSBiZSBhIG5ldyBhcnJheSBjcmVhdGVkIGFzIGlmIGJ5IHRoZSBleHByZXNzaW9uIG5ldyBBcnJheShsZW4pCiAgICAvLyAgICB3aGVyZSBBcnJheSBpcyB0aGUgc3RhbmRhcmQgYnVpbHQtaW4gY29uc3RydWN0b3Igd2l0aCB0aGF0IG5hbWUgYW5kCiAgICAvLyAgICBsZW4gaXMgdGhlIHZhbHVlIG9mIGxlbi4KICAgIEEgPSBuZXcgQXJyYXkobGVuKTsKCiAgICAvLyA3LiBMZXQgayBiZSAwCiAgICBrID0gMDsKCiAgICAvLyA4LiBSZXBlYXQsIHdoaWxlIGsgPCBsZW4KICAgIHdoaWxlIChrIDwgbGVuKSB7CgogICAgICB2YXIga1ZhbHVlLCBtYXBwZWRWYWx1ZTsKCiAgICAgIC8vIGEuIExldCBQayBiZSBUb1N0cmluZyhrKS4KICAgICAgLy8gICBUaGlzIGlzIGltcGxpY2l0IGZvciBMSFMgb3BlcmFuZHMgb2YgdGhlIGluIG9wZXJhdG9yCiAgICAgIC8vIGIuIExldCBrUHJlc2VudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIEhhc1Byb3BlcnR5IGludGVybmFsCiAgICAgIC8vICAgIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgUGsuCiAgICAgIC8vICAgVGhpcyBzdGVwIGNhbiBiZSBjb21iaW5lZCB3aXRoIGMKICAgICAgLy8gYy4gSWYga1ByZXNlbnQgaXMgdHJ1ZSwgdGhlbgogICAgICBpZiAoayBpbiBPKSB7CgogICAgICAgIC8vIGkuIExldCBrVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBHZXQgaW50ZXJuYWwKICAgICAgICAvLyAgICBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IFBrLgogICAgICAgIGtWYWx1ZSA9IE9ba107CgogICAgICAgIC8vIGlpLiBMZXQgbWFwcGVkVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBDYWxsIGludGVybmFsCiAgICAgICAgLy8gICAgIG1ldGhvZCBvZiBjYWxsYmFjayB3aXRoIFQgYXMgdGhlIHRoaXMgdmFsdWUgYW5kIGFyZ3VtZW50CiAgICAgICAgLy8gICAgIGxpc3QgY29udGFpbmluZyBrVmFsdWUsIGssIGFuZCBPLgogICAgICAgIG1hcHBlZFZhbHVlID0gY2FsbGJhY2suY2FsbChULCBrVmFsdWUsIGssIE8pOwoKICAgICAgICAvLyBpaWkuIENhbGwgdGhlIERlZmluZU93blByb3BlcnR5IGludGVybmFsIG1ldGhvZCBvZiBBIHdpdGggYXJndW1lbnRzCiAgICAgICAgLy8gUGssIFByb3BlcnR5IERlc2NyaXB0b3IKICAgICAgICAvLyB7IFZhbHVlOiBtYXBwZWRWYWx1ZSwKICAgICAgICAvLyAgIFdyaXRhYmxlOiB0cnVlLAogICAgICAgIC8vICAgRW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAvLyAgIENvbmZpZ3VyYWJsZTogdHJ1ZSB9LAogICAgICAgIC8vIGFuZCBmYWxzZS4KCiAgICAgICAgLy8gSW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgdXNlIHRoZSBmb2xsb3dpbmc6CiAgICAgICAgLy8gT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIGssIHsKICAgICAgICAvLyAgIHZhbHVlOiBtYXBwZWRWYWx1ZSwKICAgICAgICAvLyAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIC8vICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAvLyAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgIC8vIH0pOwoKICAgICAgICAvLyBGb3IgYmVzdCBicm93c2VyIHN1cHBvcnQsIHVzZSB0aGUgZm9sbG93aW5nOgogICAgICAgIEFba10gPSBtYXBwZWRWYWx1ZTsKICAgICAgfQogICAgICAvLyBkLiBJbmNyZWFzZSBrIGJ5IDEuCiAgICAgIGsrKzsKICAgIH0KCiAgICAvLyA5LiByZXR1cm4gQQogICAgcmV0dXJuIEE7CiAgfTsKfQoKdmFyIFBhZ2VkVGFibGUgPSBmdW5jdGlvbiAocGFnZWRUYWJsZSkgewogIHZhciBtZSA9IHRoaXM7CgogIHZhciBzb3VyY2UgPSBmdW5jdGlvbihwYWdlZFRhYmxlKSB7CiAgICB2YXIgc291cmNlRWxlbXMgPSBbXS5zbGljZS5jYWxsKHBhZ2VkVGFibGUuY2hpbGRyZW4pLmZpbHRlcihmdW5jdGlvbihlKSB7CiAgICAgIHJldHVybiBlLmhhc0F0dHJpYnV0ZSgiZGF0YS1wYWdlZHRhYmxlLXNvdXJjZSIpOwogICAgfSk7CgogICAgaWYgKHNvdXJjZUVsZW1zID09PSBudWxsIHx8IHNvdXJjZUVsZW1zLmxlbmd0aCAhPT0gMSkgewogICAgICB0aHJvdygiQSBzaW5nbGUgZGF0YS1wYWdlZHRhYmxlLXNvdXJjZSB3YXMgbm90IGZvdW5kIik7CiAgICB9CgogICAgcmV0dXJuIEpTT04ucGFyc2Uoc291cmNlRWxlbXNbMF0uaW5uZXJIVE1MKTsKICB9KHBhZ2VkVGFibGUpOwoKICB2YXIgb3B0aW9ucyA9IGZ1bmN0aW9uKHNvdXJjZSkgewogICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Yoc291cmNlLm9wdGlvbnMpICE9PSAidW5kZWZpbmVkIiAmJgogICAgICBzb3VyY2Uub3B0aW9ucyAhPT0gbnVsbCA/IHNvdXJjZS5vcHRpb25zIDoge307CgogICAgdmFyIGNvbHVtbnMgPSB0eXBlb2Yob3B0aW9ucy5jb2x1bW5zKSAhPT0gInVuZGVmaW5lZCIgPyBvcHRpb25zLmNvbHVtbnMgOiB7fTsKICAgIHZhciByb3dzID0gdHlwZW9mKG9wdGlvbnMucm93cykgIT09ICJ1bmRlZmluZWQiID8gb3B0aW9ucy5yb3dzIDoge307CgogICAgdmFyIHBvc2l0aXZlSW50T3JOdWxsID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKSA+PSAwID8gcGFyc2VJbnQodmFsdWUpIDogbnVsbDsKICAgIH07CgogICAgcmV0dXJuIHsKICAgICAgcGFnZXM6IHBvc2l0aXZlSW50T3JOdWxsKG9wdGlvbnMucGFnZXMpLAogICAgICByb3dzOiB7CiAgICAgICAgbWluOiBwb3NpdGl2ZUludE9yTnVsbChyb3dzLm1pbiksCiAgICAgICAgbWF4OiBwb3NpdGl2ZUludE9yTnVsbChyb3dzLm1heCksCiAgICAgICAgdG90YWw6IHBvc2l0aXZlSW50T3JOdWxsKHJvd3MudG90YWwpCiAgICAgIH0sCiAgICAgIGNvbHVtbnM6IHsKICAgICAgICBtaW46IHBvc2l0aXZlSW50T3JOdWxsKGNvbHVtbnMubWluKSwKICAgICAgICBtYXg6IHBvc2l0aXZlSW50T3JOdWxsKGNvbHVtbnMubWF4KSwKICAgICAgICB0b3RhbDogcG9zaXRpdmVJbnRPck51bGwoY29sdW1ucy50b3RhbCkKICAgICAgfQogICAgfTsKICB9KHNvdXJjZSk7CgogIHZhciBNZWFzdXJlciA9IGZ1bmN0aW9uKCkgewoKICAgIC8vIHNldCBzb21lIGRlZmF1bHQgaW5pdGlhbCB2YWx1ZXMgdGhhdCB3aWxsIGdldCBhZGp1c3RlZCBpbiBydW50aW1lCiAgICBtZS5tZWFzdXJlcyA9IHsKICAgICAgcGFkZGluZzogMTIsCiAgICAgIGNoYXJhY3RlcjogOCwKICAgICAgaGVpZ2h0OiAxNSwKICAgICAgZGVmYXVsdHM6IHRydWUKICAgIH07CgogICAgbWUuY2FsY3VsYXRlID0gZnVuY3Rpb24obWVhc3VyZXNDZWxsKSB7CiAgICAgIGlmICghbWUubWVhc3VyZXMuZGVmYXVsdHMpCiAgICAgICAgcmV0dXJuOwoKICAgICAgdmFyIG1lYXN1cmVzQ2VsbFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobWVhc3VyZXNDZWxsLCBudWxsKTsKCiAgICAgIHZhciBuZXdQYWRkaW5nID0gcGFyc2VQYWRkaW5nKG1lYXN1cmVzQ2VsbFN0eWxlLnBhZGRpbmdMZWZ0KSArCiAgICAgICAgICAgIHBhcnNlUGFkZGluZyhtZWFzdXJlc0NlbGxTdHlsZS5wYWRkaW5nUmlnaHQpOwoKICAgICAgdmFyIHNhbXBsZVN0cmluZyA9ICJBQkNERUZHSElKMDEyMzQ1Njc4OSI7CiAgICAgIHZhciBuZXdDaGFyYWN0ZXIgPSBNYXRoLmNlaWwobWVhc3VyZXNDZWxsLmNsaWVudFdpZHRoIC8gc2FtcGxlU3RyaW5nLmxlbmd0aCk7CgogICAgICBpZiAobmV3UGFkZGluZyA8PSAwIHx8IG5ld0NoYXJhY3RlciA8PSAwKQogICAgICAgIHJldHVybjsKCiAgICAgIG1lLm1lYXN1cmVzLnBhZGRpbmcgPSBuZXdQYWRkaW5nOwogICAgICBtZS5tZWFzdXJlcy5jaGFyYWN0ZXIgPSBuZXdDaGFyYWN0ZXI7CiAgICAgIG1lLm1lYXN1cmVzLmhlaWdodCA9IG1lYXN1cmVzQ2VsbC5jbGllbnRIZWlnaHQ7CiAgICAgIG1lLm1lYXN1cmVzLmRlZmF1bHRzID0gZmFsc2U7CiAgICB9OwoKICAgIHJldHVybiBtZTsKICB9OwoKICB2YXIgUGFnZSA9IGZ1bmN0aW9uKGRhdGEsIG9wdGlvbnMpIHsKICAgIHZhciBtZSA9IHRoaXM7CgogICAgdmFyIGRlZmF1bHRzID0gewogICAgICBtYXg6IDcsCiAgICAgIHJvd3M6IDEwCiAgICB9OwoKICAgIHZhciB0b3RhbFBhZ2VzID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBNYXRoLmNlaWwoZGF0YS5sZW5ndGggLyBtZS5yb3dzKTsKICAgIH07CgogICAgbWUubnVtYmVyID0gMDsKICAgIG1lLm1heCA9IG9wdGlvbnMucGFnZXMgIT09IG51bGwgPyBvcHRpb25zLnBhZ2VzIDogZGVmYXVsdHMubWF4OwogICAgbWUudmlzaWJsZSA9IG1lLm1heDsKICAgIG1lLnJvd3MgPSBvcHRpb25zLnJvd3MubWluICE9PSBudWxsID8gb3B0aW9ucy5yb3dzLm1pbiA6IGRlZmF1bHRzLnJvd3M7CiAgICBtZS50b3RhbCA9IHRvdGFsUGFnZXMoKTsKCiAgICBtZS5zZXRSb3dzID0gZnVuY3Rpb24obmV3Um93cykgewogICAgICBtZS5yb3dzID0gbmV3Um93czsKICAgICAgbWUudG90YWwgPSB0b3RhbFBhZ2VzKCk7CiAgICB9OwoKICAgIG1lLnNldFBhZ2VOdW1iZXIgPSBmdW5jdGlvbihuZXdQYWdlTnVtYmVyKSB7CiAgICAgIGlmIChuZXdQYWdlTnVtYmVyIDwgMCkgbmV3UGFnZU51bWJlciA9IDA7CiAgICAgIGlmIChuZXdQYWdlTnVtYmVyID49IG1lLnRvdGFsKSBuZXdQYWdlTnVtYmVyID0gbWUudG90YWwgLSAxOwoKICAgICAgbWUubnVtYmVyID0gbmV3UGFnZU51bWJlcjsKICAgIH07CgogICAgbWUuc2V0VmlzaWJsZVBhZ2VzID0gZnVuY3Rpb24odmlzaWJsZVBhZ2VzKSB7CiAgICAgIG1lLnZpc2libGUgPSBNYXRoLm1pbihtZS5tYXgsIHZpc2libGVQYWdlcyk7CiAgICAgIG1lLnNldFBhZ2VOdW1iZXIobWUubnVtYmVyKTsKICAgIH07CgogICAgbWUuZ2V0VmlzaWJsZVBhZ2VSYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc3RhcnQgPSBtZS5udW1iZXIgLSBNYXRoLm1heChNYXRoLmZsb29yKChtZS52aXNpYmxlIC0gMSkgLyAyKSwgMCk7CiAgICAgIHZhciBlbmQgPSBtZS5udW1iZXIgKyBNYXRoLmZsb29yKG1lLnZpc2libGUgLyAyKSArIDE7CiAgICAgIHZhciBwYWdlQ291bnQgPSBtZS50b3RhbDsKCiAgICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgICB2YXIgZGlmZlRvU3RhcnQgPSAwIC0gc3RhcnQ7CiAgICAgICAgc3RhcnQgKz0gZGlmZlRvU3RhcnQ7CiAgICAgICAgZW5kICs9IGRpZmZUb1N0YXJ0OwogICAgICB9CgogICAgICBpZiAoZW5kID4gcGFnZUNvdW50KSB7CiAgICAgICAgdmFyIGRpZmZUb0VuZCA9IGVuZCAtIHBhZ2VDb3VudDsKICAgICAgICBzdGFydCAtPSBkaWZmVG9FbmQ7CiAgICAgICAgZW5kIC09IGRpZmZUb0VuZDsKICAgICAgfQoKICAgICAgc3RhcnQgPSBzdGFydCA8IDAgPyAwIDogc3RhcnQ7CiAgICAgIGVuZCA9IGVuZCA+PSBwYWdlQ291bnQgPyBwYWdlQ291bnQgOiBlbmQ7CgogICAgICB2YXIgZmlyc3QgPSBmYWxzZTsKICAgICAgdmFyIGxhc3QgPSBmYWxzZTsKCiAgICAgIGlmIChzdGFydCA+IDAgJiYgbWUudmlzaWJsZSA+IDEpIHsKICAgICAgICBzdGFydCA9IHN0YXJ0ICsgMTsKICAgICAgICBmaXJzdCA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmIChlbmQgPCBwYWdlQ291bnQgJiYgbWUudmlzaWJsZSA+IDIpIHsKICAgICAgICBlbmQgPSBlbmQgLSAxOwogICAgICAgIGxhc3QgPSB0cnVlOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGZpcnN0OiBmaXJzdCwKICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgbGFzdDogbGFzdAogICAgICB9OwogICAgfTsKCiAgICBtZS5nZXRSb3dTdGFydCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgcm93U3RhcnQgPSBwYWdlLm51bWJlciAqIHBhZ2Uucm93czsKICAgICAgaWYgKHJvd1N0YXJ0IDwgMCkKICAgICAgICByb3dTdGFydCA9IDA7CgogICAgICByZXR1cm4gcm93U3RhcnQ7CiAgICB9OwoKICAgIG1lLmdldFJvd0VuZCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgcm93U3RhcnQgPSBtZS5nZXRSb3dTdGFydCgpOwogICAgICByZXR1cm4gTWF0aC5taW4ocm93U3RhcnQgKyBtZS5yb3dzLCBkYXRhLmxlbmd0aCk7CiAgICB9OwoKICAgIG1lLmdldFBhZGRpbmdSb3dzID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciByb3dTdGFydCA9IG1lLmdldFJvd1N0YXJ0KCk7CiAgICAgIHZhciByb3dFbmQgPSBtZS5nZXRSb3dFbmQoKTsKICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoID4gbWUucm93cyA/IG1lLnJvd3MgLSAocm93RW5kIC0gcm93U3RhcnQpIDogMDsKICAgIH07CiAgfTsKCiAgdmFyIENvbHVtbnMgPSBmdW5jdGlvbihkYXRhLCBjb2x1bW5zLCBvcHRpb25zKSB7CiAgICB2YXIgbWUgPSB0aGlzOwoKICAgIG1lLmRlZmF1bHRzID0gewogICAgICBtaW46IDUKICAgIH07CgogICAgbWUubnVtYmVyID0gMDsKICAgIG1lLnZpc2libGUgPSAwOwogICAgbWUudG90YWwgPSBjb2x1bW5zLmxlbmd0aDsKICAgIG1lLnN1YnNldCA9IFtdOwogICAgbWUucGFkZGluZyA9IDA7CiAgICBtZS5taW4gPSBvcHRpb25zLmNvbHVtbnMubWluICE9PSBudWxsID8gb3B0aW9ucy5jb2x1bW5zLm1pbiA6IG1lLmRlZmF1bHRzLm1pbjsKICAgIG1lLm1heCA9IG9wdGlvbnMuY29sdW1ucy5tYXggIT09IG51bGwgPyBvcHRpb25zLmNvbHVtbnMubWF4IDogbnVsbDsKICAgIG1lLndpZHRocyA9IHt9OwoKICAgIHZhciB3aWR0aHNMb29rQWhlYWQgPSBNYXRoLm1heCgxMDAsIG9wdGlvbnMucm93cy5taW4pOwogICAgdmFyIHBhZGRpbmdDb2xDaGFycyA9IDEwOwoKICAgIG1lLmVtcHR5TmFtZXMgPSBmdW5jdGlvbigpIHsKICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbikgewogICAgICAgIGlmIChjb2x1bW5zLmxhYmVsICE9PSBudWxsICYmIGNvbHVtbnMubGFiZWwgIT09ICIiKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9KTsKCiAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICB2YXIgcGFyc2VQYWRkaW5nID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKSA+PSAwID8gcGFyc2VJbnQodmFsdWUpIDogMDsKICAgIH07CgogICAgbWUuY2FsY3VsYXRlV2lkdGhzID0gZnVuY3Rpb24obWVhc3VyZXMpIHsKICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbikgewogICAgICAgIHZhciBtYXhDaGFycyA9IE1hdGgubWF4KAogICAgICAgICAgY29sdW1uLmxhYmVsLnRvU3RyaW5nKCkubGVuZ3RoLAogICAgICAgICAgY29sdW1uLnR5cGUudG9TdHJpbmcoKS5sZW5ndGgKICAgICAgICApOwoKICAgICAgICBmb3IgKHZhciBpZHhSb3cgPSAwOyBpZHhSb3cgPCBNYXRoLm1pbih3aWR0aHNMb29rQWhlYWQsIGRhdGEubGVuZ3RoKTsgaWR4Um93KyspIHsKICAgICAgICAgIG1heENoYXJzID0gTWF0aC5tYXgobWF4Q2hhcnMsIGRhdGFbaWR4Um93XVtjb2x1bW4ubmFtZS50b1N0cmluZygpXS5sZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgbWUud2lkdGhzW2NvbHVtbi5uYW1lXSA9IHsKICAgICAgICAgIC8vIHdpZHRoIGluIGNoYXJhY3RlcnMKICAgICAgICAgIGNoYXJzOiBtYXhDaGFycywKICAgICAgICAgIC8vIHdpZHRoIGZvciB0aGUgaW5uZXIgaHRtbCBjb2x1bW5zCiAgICAgICAgICBpbm5lcjogbWF4Q2hhcnMgKiBtZWFzdXJlcy5jaGFyYWN0ZXIsCiAgICAgICAgICAvLyB3aWR0aCBhZGRpbmcgb3V0ZXIgc3R5bGVzIGxpa2UgcGFkZGluZwogICAgICAgICAgb3V0ZXI6IG1heENoYXJzICogbWVhc3VyZXMuY2hhcmFjdGVyICsgbWVhc3VyZXMucGFkZGluZwogICAgICAgIH07CiAgICAgIH0pOwogICAgfTsKCiAgICBtZS5nZXRXaWR0aCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgd2lkdGhPdXRlciA9IDA7CiAgICAgIGZvciAodmFyIGlkeENvbCA9IDA7IGlkeENvbCA8IG1lLnN1YnNldC5sZW5ndGg7IGlkeENvbCsrKSB7CiAgICAgICAgdmFyIGNvbHVtbk5hbWUgPSBtZS5zdWJzZXRbaWR4Q29sXS5uYW1lOwogICAgICAgIHdpZHRoT3V0ZXIgPSB3aWR0aE91dGVyICsgbWUud2lkdGhzW2NvbHVtbk5hbWVdLm91dGVyOwogICAgICB9CgogICAgICB3aWR0aE91dGVyID0gd2lkdGhPdXRlciArIG1lLnBhZGRpbmcgKiBwYWRkaW5nQ29sQ2hhcnMgKiBtZWFzdXJlci5tZWFzdXJlcy5jaGFyYWN0ZXI7CgogICAgICBpZiAobWUuaGFzTW9yZUxlZnRDb2x1bW5zKCkpIHsKICAgICAgICB3aWR0aE91dGVyID0gd2lkdGhPdXRlciArIGNvbHVtbk5hdmlnYXRpb25XaWR0aFBYICsgbWVhc3VyZXIubWVhc3VyZXMucGFkZGluZzsKICAgICAgfQoKICAgICAgaWYgKG1lLmhhc01vcmVSaWdodENvbHVtbnMoKSkgewogICAgICAgIHdpZHRoT3V0ZXIgPSB3aWR0aE91dGVyICsgY29sdW1uTmF2aWdhdGlvbldpZHRoUFggKyBtZWFzdXJlci5tZWFzdXJlcy5wYWRkaW5nOwogICAgICB9CgogICAgICByZXR1cm4gd2lkdGhPdXRlcjsKICAgIH07CgogICAgbWUudXBkYXRlU2xpY2UgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKG1lLm51bWJlciArIG1lLnZpc2libGUgPj0gbWUudG90YWwpCiAgICAgICAgbWUubnVtYmVyID0gbWUudG90YWwgLSBtZS52aXNpYmxlOwoKICAgICAgaWYgKG1lLm51bWJlciA8IDApIG1lLm51bWJlciA9IDA7CgogICAgICBtZS5zdWJzZXQgPSBjb2x1bW5zLnNsaWNlKG1lLm51bWJlciwgTWF0aC5taW4obWUubnVtYmVyICsgbWUudmlzaWJsZSwgbWUudG90YWwpKTsKCiAgICAgIG1lLnN1YnNldCA9IG1lLnN1YnNldC5tYXAoZnVuY3Rpb24oY29sdW1uKSB7CiAgICAgICAgT2JqZWN0LmtleXMoY29sdW1uKS5mb3JFYWNoKGZ1bmN0aW9uKGNvbEtleSkgewogICAgICAgICAgY29sdW1uW2NvbEtleV0gPSBjb2x1bW5bY29sS2V5XSA9PT0gbnVsbCA/ICIiIDogY29sdW1uW2NvbEtleV0udG9TdHJpbmcoKTsKICAgICAgICB9KTsKCiAgICAgICAgY29sdW1uLndpZHRoID0gbnVsbDsKICAgICAgICByZXR1cm4gY29sdW1uOwogICAgICB9KTsKICAgIH07CgogICAgbWUuc2V0VmlzaWJsZUNvbHVtbnMgPSBmdW5jdGlvbihjb2x1bW5OdW1iZXIsIG5ld1Zpc2libGVDb2x1bW5zLCBwYWRkaW5nQ291bnQpIHsKICAgICAgbWUubnVtYmVyID0gY29sdW1uTnVtYmVyOwogICAgICBtZS52aXNpYmxlID0gbmV3VmlzaWJsZUNvbHVtbnM7CiAgICAgIG1lLnBhZGRpbmcgPSBwYWRkaW5nQ291bnQ7CgogICAgICBtZS51cGRhdGVTbGljZSgpOwogICAgfTsKCiAgICBtZS5pbmNDb2x1bW5OdW1iZXIgPSBmdW5jdGlvbihpbmNyZW1lbnQpIHsKICAgICAgbWUubnVtYmVyID0gbWUubnVtYmVyICsgaW5jcmVtZW50OwogICAgfTsKCiAgICBtZS5zZXRDb2x1bW5OdW1iZXIgPSBmdW5jdGlvbihuZXdOdW1iZXIpIHsKICAgICAgbWUubnVtYmVyID0gbmV3TnVtYmVyOwogICAgfTsKCiAgICBtZS5zZXRQYWRkaW5nQ291bnQgPSBmdW5jdGlvbihuZXdQYWRkaW5nKSB7CiAgICAgIG1lLnBhZGRpbmcgPSBuZXdQYWRkaW5nOwogICAgfTsKCiAgICBtZS5nZXRQYWRkaW5nQ291bnQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIG1lLnBhZGRpbmc7CiAgICB9OwoKICAgIG1lLmhhc01vcmVMZWZ0Q29sdW1ucyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gbWUubnVtYmVyID4gMDsKICAgIH07CgogICAgbWUuaGFzTW9yZVJpZ2h0Q29sdW1ucyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gbWUubnVtYmVyICsgbWUudmlzaWJsZSA8IG1lLnRvdGFsOwogICAgfTsKCiAgICBtZS51cGRhdGVTbGljZSgwKTsKICAgIHJldHVybiBtZTsKICB9OwoKICB2YXIgZGF0YSA9IHNvdXJjZS5kYXRhOwogIHZhciBwYWdlID0gbmV3IFBhZ2UoZGF0YSwgb3B0aW9ucyk7CiAgdmFyIG1lYXN1cmVyID0gbmV3IE1lYXN1cmVyKGRhdGEsIG9wdGlvbnMpOwogIHZhciBjb2x1bW5zID0gbmV3IENvbHVtbnMoZGF0YSwgc291cmNlLmNvbHVtbnMsIG9wdGlvbnMpOwoKICB2YXIgdGFibGUgPSBudWxsOwogIHZhciB0YWJsZURpdiA9IG51bGw7CiAgdmFyIGhlYWRlciA9IG51bGw7CiAgdmFyIGZvb3RlciA9IG51bGw7CiAgdmFyIHRib2R5ID0gbnVsbDsKCiAgLy8gQ2FjaGVzIHBhZ2VkVGFibGUuY2xpZW50V2lkdGgsIHNwZWNpYWxseSBmb3Igd2Via2l0CiAgdmFyIGNhY2hlZFBhZ2VkVGFibGVDbGllbnRXaWR0aCA9IG51bGw7CgogIHZhciBvbkNoYW5nZUNhbGxiYWNrcyA9IFtdOwoKICB2YXIgY2xlYXJTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKICAgIGlmKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkpIHsKICAgICAgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7CiAgICB9IGVsc2UgaWYod2luZG93LmdldFNlbGVjdGlvbikgewogICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICB9CiAgfTsKCiAgdmFyIGNvbHVtbk5hdmlnYXRpb25XaWR0aFBYID0gNTsKCiAgdmFyIHJlbmRlckNvbHVtbk5hdmlnYXRpb24gPSBmdW5jdGlvbihpbmNyZW1lbnQsIGJhY2t3YXJkcykgewogICAgdmFyIGFycm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBhcnJvdy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwKICAgICAgImJvcmRlci10b3A6ICIgKyBjb2x1bW5OYXZpZ2F0aW9uV2lkdGhQWCArICJweCBzb2xpZCB0cmFuc3BhcmVudDsiICsKICAgICAgImJvcmRlci1ib3R0b206ICIgKyBjb2x1bW5OYXZpZ2F0aW9uV2lkdGhQWCArICJweCBzb2xpZCB0cmFuc3BhcmVudDsiICsKICAgICAgImJvcmRlci0iICsgKGJhY2t3YXJkcyA/ICJyaWdodCIgOiAibGVmdCIpICsgIjogIiArIGNvbHVtbk5hdmlnYXRpb25XaWR0aFBYICsgInB4IHNvbGlkOyIpOwoKICAgIHZhciBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpOwogICAgaGVhZGVyLmFwcGVuZENoaWxkKGFycm93KTsKICAgIGhlYWRlci5zZXRBdHRyaWJ1dGUoInN0eWxlIiwKICAgICAgImN1cnNvcjogcG9pbnRlcjsiICsKICAgICAgInZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IiArCiAgICAgICJtaW4td2lkdGg6ICIgKyBjb2x1bW5OYXZpZ2F0aW9uV2lkdGhQWCArICJweDsiICsKICAgICAgIndpZHRoOiAiICsgY29sdW1uTmF2aWdhdGlvbldpZHRoUFggKyAicHg7Iik7CgogICAgaGVhZGVyLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKICAgICAgY29sdW1ucy5pbmNDb2x1bW5OdW1iZXIoYmFja3dhcmRzID8gLTEgOiBpbmNyZW1lbnQpOwoKICAgICAgbWUuYW5pbWF0ZUNvbHVtbnMoYmFja3dhcmRzKTsKICAgICAgcmVuZGVyRm9vdGVyKCk7CgogICAgICBjbGVhclNlbGVjdGlvbigpOwogICAgICB0cmlnZ2VyT25DaGFuZ2UoKTsKICAgIH07CgogICAgcmV0dXJuIGhlYWRlcjsKICB9OwoKICB2YXIgbWF4Q29sdW1uV2lkdGggPSBmdW5jdGlvbih3aWR0aCkgewogICAgdmFyIHBhZGRpbmcgPSA4MDsKICAgIHZhciBjb2x1bW5NYXggPSBNYXRoLm1heChjYWNoZWRQYWdlZFRhYmxlQ2xpZW50V2lkdGggLSBwYWRkaW5nLCAwKTsKCiAgICByZXR1cm4gcGFyc2VJbnQod2lkdGgpID4gMCA/CiAgICAgIE1hdGgubWluKGNvbHVtbk1heCwgcGFyc2VJbnQod2lkdGgpKSArICJweCIgOgogICAgICBjb2x1bW5NYXggKyAicHgiOwogIH07CgogIHZhciBjbGVhckhlYWRlciA9IGZ1bmN0aW9uKCkgewogICAgdmFyIHRoZWFkID0gcGFnZWRUYWJsZS5xdWVyeVNlbGVjdG9yQWxsKCJ0aGVhZCIpWzBdOwogICAgdGhlYWQuaW5uZXJIVE1MID0gIiI7CiAgfTsKCiAgdmFyIHJlbmRlckhlYWRlciA9IGZ1bmN0aW9uKGNsZWFyKSB7CiAgICBjYWNoZWRQYWdlZFRhYmxlQ2xpZW50V2lkdGggPSBwYWdlZFRhYmxlLmNsaWVudFdpZHRoOwoKICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKCiAgICBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwogICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKCiAgICBpZiAoY29sdW1ucy5udW1iZXIgPiAwKQogICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQocmVuZGVyQ29sdW1uTmF2aWdhdGlvbigtY29sdW1ucy52aXNpYmxlLCB0cnVlKSk7CgogICAgY29sdW1ucy5zdWJzZXQgPSBjb2x1bW5zLnN1YnNldC5tYXAoZnVuY3Rpb24oY29sdW1uRGF0YSkgewogICAgICB2YXIgY29sdW1uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKTsKICAgICAgY29sdW1uLnNldEF0dHJpYnV0ZSgiYWxpZ24iLCBjb2x1bW5EYXRhLmFsaWduKTsKICAgICAgY29sdW1uLnN0eWxlLnRleHRBbGlnbiA9IGNvbHVtbkRhdGEuYWxpZ247CgogICAgICBjb2x1bW4uc3R5bGUubWF4V2lkdGggPSBtYXhDb2x1bW5XaWR0aChudWxsKTsKICAgICAgaWYgKGNvbHVtbkRhdGEud2lkdGgpIHsKICAgICAgICBjb2x1bW4uc3R5bGUubWluV2lkdGggPQogICAgICAgICAgY29sdW1uLnN0eWxlLm1heFdpZHRoID0gbWF4Q29sdW1uV2lkdGgoY29sdW1uRGF0YS53aWR0aCk7CiAgICAgIH0KCiAgICAgIHZhciBjb2x1bW5OYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGNvbHVtbk5hbWUuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJwYWdlZHRhYmxlLWhlYWRlci1uYW1lIik7CiAgICAgIGlmIChjb2x1bW5EYXRhLmxhYmVsID09PSAiIikgewogICAgICAgIGNvbHVtbk5hbWUuaW5uZXJIVE1MID0gIiZuYnNwOyI7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgY29sdW1uTmFtZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb2x1bW5EYXRhLmxhYmVsKSk7CiAgICAgIH0KICAgICAgY29sdW1uLmFwcGVuZENoaWxkKGNvbHVtbk5hbWUpOwoKICAgICAgdmFyIGNvbHVtblR5cGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgY29sdW1uVHlwZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInBhZ2VkdGFibGUtaGVhZGVyLXR5cGUiKTsKICAgICAgaWYgKGNvbHVtbkRhdGEudHlwZSA9PT0gIiIpIHsKICAgICAgICBjb2x1bW5UeXBlLmlubmVySFRNTCA9ICImbmJzcDsiOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGNvbHVtblR5cGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwiICsgY29sdW1uRGF0YS50eXBlICsgIj4iKSk7CiAgICAgIH0KICAgICAgY29sdW1uLmFwcGVuZENoaWxkKGNvbHVtblR5cGUpOwoKICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGNvbHVtbik7CgogICAgICBjb2x1bW5EYXRhLmVsZW1lbnQgPSBjb2x1bW47CgogICAgICByZXR1cm4gY29sdW1uRGF0YTsKICAgIH0pOwoKICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGNvbHVtbnMuZ2V0UGFkZGluZ0NvdW50KCk7IGlkeCsrKSB7CiAgICAgIHZhciBwYWRkaW5nQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKTsKICAgICAgcGFkZGluZ0NvbC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInBhZ2VkdGFibGUtcGFkZGluZy1jb2wiKTsKICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKHBhZGRpbmdDb2wpOwogICAgfQoKICAgIGlmIChjb2x1bW5zLm51bWJlciArIGNvbHVtbnMudmlzaWJsZSA8IGNvbHVtbnMudG90YWwpCiAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChyZW5kZXJDb2x1bW5OYXZpZ2F0aW9uKGNvbHVtbnMudmlzaWJsZSwgZmFsc2UpKTsKCiAgICBpZiAodHlwZW9mKGNsZWFyKSA9PSAidW5kZWZpbmVkIiB8fCBjbGVhcikgY2xlYXJIZWFkZXIoKTsKICAgIHZhciB0aGVhZCA9IHBhZ2VkVGFibGUucXVlcnlTZWxlY3RvckFsbCgidGhlYWQiKVswXTsKICAgIHRoZWFkLmFwcGVuZENoaWxkKGZyYWdtZW50KTsKICB9OwoKICBtZS5hbmltYXRlQ29sdW1ucyA9IGZ1bmN0aW9uKGJhY2t3YXJkcykgewogICAgdmFyIHRoZWFkID0gcGFnZWRUYWJsZS5xdWVyeVNlbGVjdG9yQWxsKCJ0aGVhZCIpWzBdOwoKICAgIHZhciBoZWFkZXJPbGQgPSB0aGVhZC5xdWVyeVNlbGVjdG9yQWxsKCJ0ciIpWzBdOwogICAgdmFyIHRib2R5T2xkID0gdGFibGUucXVlcnlTZWxlY3RvckFsbCgidGJvZHkiKVswXTsKCiAgICBtZS5maXRDb2x1bW5zKGJhY2t3YXJkcyk7CgogICAgcmVuZGVySGVhZGVyKGZhbHNlKTsKCiAgICBoZWFkZXIuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgIGhlYWRlci5zdHlsZS50cmFuc2Zvcm0gPSBiYWNrd2FyZHMgPyAidHJhbnNsYXRlWCgtMzBweCkiIDogInRyYW5zbGF0ZVgoMzBweCkiOwogICAgaGVhZGVyLnN0eWxlLnRyYW5zaXRpb24gPSAidHJhbnNmb3JtIDIwMG1zIGxpbmVhciwgb3BhY2l0eSAyMDBtcyI7CiAgICBoZWFkZXIuc3R5bGUudHJhbnNpdGlvbkRlbGF5ID0gIjAiOwoKICAgIHJlbmRlckJvZHkoZmFsc2UpOwoKICAgIGlmIChoZWFkZXJPbGQpIHsKICAgICAgaGVhZGVyT2xkLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgaGVhZGVyT2xkLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVYKDBweCkiOwogICAgICBoZWFkZXJPbGQuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgaGVhZGVyT2xkLnN0eWxlLnRyYW5zaXRpb24gPSAidHJhbnNmb3JtIDEwMG1zIGxpbmVhciwgb3BhY2l0eSAxMDBtcyI7CiAgICAgIGhlYWRlck9sZC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInBhZ2VkdGFibGUtcmVtb3ZlLWhlYWQiKTsKICAgICAgaWYgKGhlYWRlck9sZC5zdHlsZS50cmFuc2l0aW9uRW5kKSB7CiAgICAgICAgaGVhZGVyT2xkLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLCBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBoZWFkZXJPbGRCeUNsYXNzID0gdGhlYWQucXVlcnlTZWxlY3RvcigiLnBhZ2VkdGFibGUtcmVtb3ZlLWhlYWQiKTsKICAgICAgICAgIGlmIChoZWFkZXJPbGRCeUNsYXNzKSB0aGVhZC5yZW1vdmVDaGlsZChoZWFkZXJPbGRCeUNsYXNzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB0aGVhZC5yZW1vdmVDaGlsZChoZWFkZXJPbGQpOwogICAgICB9CiAgICB9CgogICAgaWYgKHRib2R5T2xkKSB0YWJsZS5yZW1vdmVDaGlsZCh0Ym9keU9sZCk7CgogICAgdGJvZHkuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgIHRib2R5LnN0eWxlLnRyYW5zaXRpb24gPSAidHJhbnNmb3JtIDIwMG1zIGxpbmVhciwgb3BhY2l0eSAyMDBtcyI7CiAgICB0Ym9keS5zdHlsZS50cmFuc2l0aW9uRGVsYXkgPSAiMG1zIjsKCiAgICAvLyBmb3JjZSByZWxheW91dAogICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoaGVhZGVyKS5vcGFjaXR5OwogICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUodGJvZHkpLm9wYWNpdHk7CgogICAgaWYgKGhlYWRlck9sZCkgewogICAgICBoZWFkZXJPbGQuc3R5bGUudHJhbnNmb3JtID0gYmFja3dhcmRzID8gInRyYW5zbGF0ZVgoMjBweCkiIDogInRyYW5zbGF0ZVgoLTMwcHgpIjsKICAgICAgaGVhZGVyT2xkLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICB9CgogICAgaGVhZGVyLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVYKDBweCkiOwogICAgaGVhZGVyLnN0eWxlLm9wYWNpdHkgPSAiMSI7CgogICAgdGJvZHkuc3R5bGUub3BhY2l0eSA9ICIxIjsKICB9CgogIG1lLm9uQ2hhbmdlID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIG9uQ2hhbmdlQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOwogIH07CgogIHZhciB0cmlnZ2VyT25DaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgIG9uQ2hhbmdlQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24ob25DaGFuZ2UpIHsKICAgICAgb25DaGFuZ2UoKTsKICAgIH0pOwogIH07CgogIHZhciBjbGVhckJvZHkgPSBmdW5jdGlvbigpIHsKICAgIGlmICh0Ym9keSkgewogICAgICB0YWJsZS5yZW1vdmVDaGlsZCh0Ym9keSk7CiAgICAgIHRib2R5ID0gbnVsbDsKICAgIH0KICB9OwoKICB2YXIgcmVuZGVyQm9keSA9IGZ1bmN0aW9uKGNsZWFyKSB7CiAgICBjYWNoZWRQYWdlZFRhYmxlQ2xpZW50V2lkdGggPSBwYWdlZFRhYmxlLmNsaWVudFdpZHRoCgogICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwoKICAgIHZhciBwYWdlRGF0YSA9IGRhdGEuc2xpY2UocGFnZS5nZXRSb3dTdGFydCgpLCBwYWdlLmdldFJvd0VuZCgpKTsKCiAgICBwYWdlRGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGRhdGFSb3csIGlkeFJvdykgewogICAgICB2YXIgaHRtbFJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7CiAgICAgIGh0bWxSb3cuc2V0QXR0cmlidXRlKCJjbGFzcyIsIChpZHhSb3cgJSAyICE9PTApID8gImV2ZW4iIDogIm9kZCIpOwoKICAgICAgaWYgKGNvbHVtbnMuaGFzTW9yZUxlZnRDb2x1bW5zKCkpCiAgICAgICAgaHRtbFJvdy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpKTsKCiAgICAgIGNvbHVtbnMuc3Vic2V0LmZvckVhY2goZnVuY3Rpb24oY29sdW1uRGF0YSkgewogICAgICAgIHZhciBjZWxsTmFtZSA9IGNvbHVtbkRhdGEubmFtZTsKICAgICAgICB2YXIgZGF0YUNlbGwgPSBkYXRhUm93W2NlbGxOYW1lXTsKICAgICAgICB2YXIgaHRtbENlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwoKICAgICAgICBpZiAoZGF0YUNlbGwgPT09ICJOQSIpIGh0bWxDZWxsLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAicGFnZWR0YWJsZS1uYS1jZWxsIik7CiAgICAgICAgaWYgKGRhdGFDZWxsID09PSAiX19OQV9fIikgZGF0YUNlbGwgPSAiTkEiOwoKICAgICAgICB2YXIgY2VsbFRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkYXRhQ2VsbCk7CiAgICAgICAgaHRtbENlbGwuYXBwZW5kQ2hpbGQoY2VsbFRleHQpOwogICAgICAgIGlmIChkYXRhQ2VsbC5sZW5ndGggPiA1MCkgewogICAgICAgICAgaHRtbENlbGwuc2V0QXR0cmlidXRlKCJ0aXRsZSIsIGRhdGFDZWxsKTsKICAgICAgICB9CiAgICAgICAgaHRtbENlbGwuc2V0QXR0cmlidXRlKCJhbGlnbiIsIGNvbHVtbkRhdGEuYWxpZ24pOwogICAgICAgIGh0bWxDZWxsLnN0eWxlLnRleHRBbGlnbiA9IGNvbHVtbkRhdGEuYWxpZ247CiAgICAgICAgaHRtbENlbGwuc3R5bGUubWF4V2lkdGggPSBtYXhDb2x1bW5XaWR0aChudWxsKTsKICAgICAgICBpZiAoY29sdW1uRGF0YS53aWR0aCkgewogICAgICAgICAgaHRtbENlbGwuc3R5bGUubWluV2lkdGggPSBodG1sQ2VsbC5zdHlsZS5tYXhXaWR0aCA9IG1heENvbHVtbldpZHRoKGNvbHVtbkRhdGEud2lkdGgpOwogICAgICAgIH0KICAgICAgICBodG1sUm93LmFwcGVuZENoaWxkKGh0bWxDZWxsKTsKICAgICAgfSk7CgogICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBjb2x1bW5zLmdldFBhZGRpbmdDb3VudCgpOyBpZHgrKykgewogICAgICAgIHZhciBwYWRkaW5nQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKICAgICAgICBwYWRkaW5nQ29sLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAicGFnZWR0YWJsZS1wYWRkaW5nLWNvbCIpOwogICAgICAgIGh0bWxSb3cuYXBwZW5kQ2hpbGQocGFkZGluZ0NvbCk7CiAgICAgIH0KCiAgICAgIGlmIChjb2x1bW5zLmhhc01vcmVSaWdodENvbHVtbnMoKSkKICAgICAgICBodG1sUm93LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIikpOwoKICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoaHRtbFJvdyk7CiAgICB9KTsKCiAgICBmb3IgKHZhciBpZHhQYWRkaW5nID0gMDsgaWR4UGFkZGluZyA8IHBhZ2UuZ2V0UGFkZGluZ1Jvd3MoKTsgaWR4UGFkZGluZysrKSB7CiAgICAgIHZhciBwYWRkaW5nUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKCiAgICAgIHZhciBwYWRkaW5nQ2VsbFJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CiAgICAgIHBhZGRpbmdDZWxsUm93LmlubmVySFRNTCA9ICImbmJzcDsiOwogICAgICBwYWRkaW5nQ2VsbFJvdy5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLCAiMTAwJSIpOwogICAgICBwYWRkaW5nUm93LmFwcGVuZENoaWxkKHBhZGRpbmdDZWxsUm93KTsKCiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHBhZGRpbmdSb3cpOwogICAgfQoKICAgIGlmICh0eXBlb2YoY2xlYXIpID09ICJ1bmRlZmluZWQiIHx8IGNsZWFyKSBjbGVhckJvZHkoKTsKICAgIHRib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKTsKICAgIHRib2R5LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKCiAgICB0YWJsZS5hcHBlbmRDaGlsZCh0Ym9keSk7CiAgfTsKCiAgdmFyIGdldExhYmVsSW5mbyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIHBhZ2VTdGFydCA9IHBhZ2UuZ2V0Um93U3RhcnQoKTsKICAgIHZhciBwYWdlRW5kID0gcGFnZS5nZXRSb3dFbmQoKTsKICAgIHZhciB0b3RhbFJvd3MgPSBkYXRhLmxlbmd0aDsKCiAgICB2YXIgdG90YWxSb3dzTGFiZWwgPSBvcHRpb25zLnJvd3MudG90YWwgPyBvcHRpb25zLnJvd3MudG90YWwgOiB0b3RhbFJvd3M7CiAgICB2YXIgdG90YWxSb3dzTGFiZWxGb3JtYXQgPSB0b3RhbFJvd3NMYWJlbC50b1N0cmluZygpLnJlcGxhY2UoLyhcZCkoPz0oXGRcZFxkKSsoPyFcZCkpL2csICckMSwnKTsKCiAgICB2YXIgaW5mb1RleHQgPSAocGFnZVN0YXJ0ICsgMSkgKyAiLSIgKyBwYWdlRW5kICsgIiBvZiAiICsgdG90YWxSb3dzTGFiZWxGb3JtYXQgKyAiIHJvd3MiOwogICAgaWYgKHRvdGFsUm93cyA8IHBhZ2Uucm93cykgewogICAgICBpbmZvVGV4dCA9IHRvdGFsUm93c0xhYmVsICsgIiByb3ciICsgKHRvdGFsUm93cyAhPSAxID8gInMiIDogIiIpOwogICAgfQogICAgaWYgKGNvbHVtbnMudG90YWwgPiBjb2x1bW5zLnZpc2libGUpIHsKICAgICAgdmFyIHRvdGFsQ29sdW1uc0xhYmVsID0gb3B0aW9ucy5jb2x1bW5zLnRvdGFsID8gb3B0aW9ucy5jb2x1bW5zLnRvdGFsIDogY29sdW1ucy50b3RhbDsKCiAgICAgIGluZm9UZXh0ID0gaW5mb1RleHQgKyAiIHwgIiArIChjb2x1bW5zLm51bWJlciArIDEpICsgIi0iICsKICAgICAgICAoTWF0aC5taW4oY29sdW1ucy5udW1iZXIgKyBjb2x1bW5zLnZpc2libGUsIGNvbHVtbnMudG90YWwpKSArCiAgICAgICAgIiBvZiAiICsgdG90YWxDb2x1bW5zTGFiZWwgKyAiIGNvbHVtbnMiOwogICAgfQoKICAgIHJldHVybiBpbmZvVGV4dDsKICB9OwoKICB2YXIgY2xlYXJGb290ZXIgPSBmdW5jdGlvbigpIHsKICAgIGZvb3RlciA9IHBhZ2VkVGFibGUucXVlcnlTZWxlY3RvckFsbCgiZGl2LnBhZ2VkdGFibGUtZm9vdGVyIilbMF07CiAgICBmb290ZXIuaW5uZXJIVE1MID0gIiI7CgogICAgcmV0dXJuIGZvb3RlcjsKICB9OwoKICB2YXIgY3JlYXRlUGFnZUxpbmsgPSBmdW5jdGlvbihpZHhQYWdlKSB7CiAgICB2YXIgcGFnZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICBwYWdlTGlua0NsYXNzID0gaWR4UGFnZSA9PT0gcGFnZS5udW1iZXIgPyAicGFnZWR0YWJsZS1pbmRleCBwYWdlZHRhYmxlLWluZGV4LWN1cnJlbnQiIDogInBhZ2VkdGFibGUtaW5kZXgiOwogICAgcGFnZUxpbmsuc2V0QXR0cmlidXRlKCJjbGFzcyIsIHBhZ2VMaW5rQ2xhc3MpOwogICAgcGFnZUxpbmsuc2V0QXR0cmlidXRlKCJkYXRhLXBhZ2UtaW5kZXgiLCBpZHhQYWdlKTsKICAgIHBhZ2VMaW5rLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKICAgICAgcGFnZS5zZXRQYWdlTnVtYmVyKHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLXBhZ2UtaW5kZXgiKSkpOwogICAgICByZW5kZXJCb2R5KCk7CiAgICAgIHJlbmRlckZvb3RlcigpOwoKICAgICAgdHJpZ2dlck9uQ2hhbmdlKCk7CiAgICB9OwoKICAgIHBhZ2VMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGlkeFBhZ2UgKyAxKSk7CgogICAgcmV0dXJuIHBhZ2VMaW5rOwogIH0KCiAgdmFyIHJlbmRlckZvb3RlciA9IGZ1bmN0aW9uKCkgewogICAgZm9vdGVyID0gY2xlYXJGb290ZXIoKTsKCiAgICB2YXIgbmV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgIG5leHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIk5leHQiKSk7CiAgICBuZXh0Lm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKICAgICAgcGFnZS5zZXRQYWdlTnVtYmVyKHBhZ2UubnVtYmVyICsgMSk7CiAgICAgIHJlbmRlckJvZHkoKTsKICAgICAgcmVuZGVyRm9vdGVyKCk7CgogICAgICB0cmlnZ2VyT25DaGFuZ2UoKTsKICAgIH07CiAgICBpZiAoZGF0YS5sZW5ndGggPiBwYWdlLnJvd3MpIGZvb3Rlci5hcHBlbmRDaGlsZChuZXh0KTsKCiAgICB2YXIgcGFnZU51bWJlcnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHBhZ2VOdW1iZXJzLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAicGFnZWR0YWJsZS1pbmRleGVzIik7CgogICAgdmFyIHBhZ2VSYW5nZSA9IHBhZ2UuZ2V0VmlzaWJsZVBhZ2VSYW5nZSgpOwoKICAgIGlmIChwYWdlUmFuZ2UuZmlyc3QpIHsKICAgICAgdmFyIHBhZ2VMaW5rID0gY3JlYXRlUGFnZUxpbmsoMCk7CiAgICAgIHBhZ2VOdW1iZXJzLmFwcGVuZENoaWxkKHBhZ2VMaW5rKTsKCiAgICAgIHZhciBwYWdlU2VwYXJhdG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHBhZ2VTZXBhcmF0b3Iuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJwYWdlZHRhYmxlLWluZGV4LXNlcGFyYXRvci1sZWZ0Iik7CiAgICAgIHBhZ2VTZXBhcmF0b3IuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIi4uLiIpKQogICAgICBwYWdlTnVtYmVycy5hcHBlbmRDaGlsZChwYWdlU2VwYXJhdG9yKTsKICAgIH0KCiAgICBmb3IgKHZhciBpZHhQYWdlID0gcGFnZVJhbmdlLnN0YXJ0OyBpZHhQYWdlIDwgcGFnZVJhbmdlLmVuZDsgaWR4UGFnZSsrKSB7CiAgICAgIHZhciBwYWdlTGluayA9IGNyZWF0ZVBhZ2VMaW5rKGlkeFBhZ2UpOwoKICAgICAgcGFnZU51bWJlcnMuYXBwZW5kQ2hpbGQocGFnZUxpbmspOwogICAgfQoKICAgIGlmIChwYWdlUmFuZ2UubGFzdCkgewogICAgICB2YXIgcGFnZVNlcGFyYXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBwYWdlU2VwYXJhdG9yLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAicGFnZWR0YWJsZS1pbmRleC1zZXBhcmF0b3ItcmlnaHQiKTsKICAgICAgcGFnZVNlcGFyYXRvci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiLi4uIikpCiAgICAgIHBhZ2VOdW1iZXJzLmFwcGVuZENoaWxkKHBhZ2VTZXBhcmF0b3IpOwoKICAgICAgdmFyIHBhZ2VMaW5rID0gY3JlYXRlUGFnZUxpbmsocGFnZS50b3RhbCAtIDEpOwogICAgICBwYWdlTnVtYmVycy5hcHBlbmRDaGlsZChwYWdlTGluayk7CiAgICB9CgogICAgaWYgKGRhdGEubGVuZ3RoID4gcGFnZS5yb3dzKSBmb290ZXIuYXBwZW5kQ2hpbGQocGFnZU51bWJlcnMpOwoKICAgIHZhciBwcmV2aW91cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgIHByZXZpb3VzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJQcmV2aW91cyIpKTsKICAgIHByZXZpb3VzLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKICAgICAgcGFnZS5zZXRQYWdlTnVtYmVyKHBhZ2UubnVtYmVyIC0gMSk7CiAgICAgIHJlbmRlckJvZHkoKTsKICAgICAgcmVuZGVyRm9vdGVyKCk7CgogICAgICB0cmlnZ2VyT25DaGFuZ2UoKTsKICAgIH07CiAgICBpZiAoZGF0YS5sZW5ndGggPiBwYWdlLnJvd3MpIGZvb3Rlci5hcHBlbmRDaGlsZChwcmV2aW91cyk7CgogICAgdmFyIGluZm9MYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgaW5mb0xhYmVsLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAicGFnZWR0YWJsZS1pbmZvIik7CiAgICBpbmZvTGFiZWwuc2V0QXR0cmlidXRlKCJ0aXRsZSIsIGdldExhYmVsSW5mbygpKTsKICAgIGluZm9MYWJlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXRMYWJlbEluZm8oKSkpOwogICAgZm9vdGVyLmFwcGVuZENoaWxkKGluZm9MYWJlbCk7CgogICAgdmFyIGVuYWJsZWRDbGFzcyA9ICJwYWdlZHRhYmxlLWluZGV4LW5hdiI7CiAgICB2YXIgZGlzYWJsZWRDbGFzcyA9ICJwYWdlZHRhYmxlLWluZGV4LW5hdiBwYWdlZHRhYmxlLWluZGV4LW5hdi1kaXNhYmxlZCI7CiAgICBwcmV2aW91cy5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgcGFnZS5udW1iZXIgPD0gMCA/IGRpc2FibGVkQ2xhc3MgOiBlbmFibGVkQ2xhc3MpOwogICAgbmV4dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgKHBhZ2UubnVtYmVyICsgMSkgKiBwYWdlLnJvd3MgPj0gZGF0YS5sZW5ndGggPyBkaXNhYmxlZENsYXNzIDogZW5hYmxlZENsYXNzKTsKICB9OwoKICB2YXIgbWVhc3VyZXNDZWxsID0gbnVsbDsKCiAgdmFyIHJlbmRlck1lYXN1cmVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgbWVhc3VyZXNUYWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7CiAgICBtZWFzdXJlc1RhYmxlLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgIG1lYXN1cmVzVGFibGUuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgbWVhc3VyZXNUYWJsZS5zdHlsZS53aGl0ZVNwYWNlID0gIm5vd3JhcCI7CiAgICBtZWFzdXJlc1RhYmxlLnN0eWxlLmhlaWdodCA9ICJhdXRvIjsKICAgIG1lYXN1cmVzVGFibGUuc3R5bGUud2lkdGggPSAiYXV0byI7CgogICAgdmFyIG1lYXN1cmVzUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKICAgIG1lYXN1cmVzVGFibGUuYXBwZW5kQ2hpbGQobWVhc3VyZXNSb3cpOwoKICAgIG1lYXN1cmVzQ2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CiAgICB2YXIgc2FtcGxlU3RyaW5nID0gIkFCQ0RFRkdISUowMTIzNDU2Nzg5IjsKICAgIG1lYXN1cmVzQ2VsbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzYW1wbGVTdHJpbmcpKTsKCiAgICBtZWFzdXJlc1Jvdy5hcHBlbmRDaGlsZChtZWFzdXJlc0NlbGwpOwoKICAgIHRhYmxlRGl2LmFwcGVuZENoaWxkKG1lYXN1cmVzVGFibGUpOwogIH0KCiAgbWUuaW5pdCA9IGZ1bmN0aW9uKCkgewogICAgdGFibGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHBhZ2VkVGFibGUuYXBwZW5kQ2hpbGQodGFibGVEaXYpOwogICAgdmFyIHBhZ2VkVGFibGVDbGFzcyA9IGRhdGEubGVuZ3RoID4gMCA/CiAgICAgICJwYWdlZHRhYmxlIHBhZ2VkdGFibGUtbm90LWVtcHR5IiA6CiAgICAgICJwYWdlZHRhYmxlIHBhZ2VkdGFibGUtZW1wdHkiOwoKICAgIGlmIChjb2x1bW5zLnRvdGFsID09IDAgfHwgKGNvbHVtbnMuZW1wdHlOYW1lcygpICYmIGRhdGEubGVuZ3RoID09IDApKSB7CiAgICAgIHBhZ2VkVGFibGVDbGFzcyA9IHBhZ2VkVGFibGVDbGFzcyArICIgcGFnZWR0YWJsZS1lbXB0eS1jb2x1bW5zIjsKICAgIH0KCiAgICB0YWJsZURpdi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgcGFnZWRUYWJsZUNsYXNzKTsKCiAgICByZW5kZXJNZWFzdXJlcygpOwogICAgbWVhc3VyZXIuY2FsY3VsYXRlKG1lYXN1cmVzQ2VsbCk7CiAgICBjb2x1bW5zLmNhbGN1bGF0ZVdpZHRocyhtZWFzdXJlci5tZWFzdXJlcyk7CgogICAgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOwogICAgdGFibGUuc2V0QXR0cmlidXRlKCJjZWxsc3BhY2luZyIsICIwIik7CiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInRhYmxlIHRhYmxlLWNvbmRlbnNlZCIpOwogICAgdGFibGVEaXYuYXBwZW5kQ2hpbGQodGFibGUpOwoKICAgIHRhYmxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoZWFkIikpOwoKICAgIHZhciBmb290ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGZvb3RlckRpdi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInBhZ2VkdGFibGUtZm9vdGVyIik7CiAgICB0YWJsZURpdi5hcHBlbmRDaGlsZChmb290ZXJEaXYpOwoKICAgIC8vIGlmIHRoZSBob3N0IGhhcyBub3QgeWV0IHByb3ZpZGVkIGhvcml6b250YWwgc3BhY2UsIHJlbmRlciBoaWRkZW4KICAgIGlmICh0YWJsZURpdi5jbGllbnRXaWR0aCA8PSAwKSB7CiAgICAgIHRhYmxlRGl2LnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICB9CgogICAgbWUucmVuZGVyKCk7CgogICAgLy8gcmV0cnkgc2VpemluZyBjb2x1bW5zIGxhdGVyIGlmIHRoZSBob3N0IGhhcyBub3QgcHJvdmlkZWQgc3BhY2UKICAgIGZ1bmN0aW9uIHJldHJ5Rml0KCkgewogICAgICBpZiAodGFibGVEaXYuY2xpZW50V2lkdGggPD0gMCkgewogICAgICAgIHNldFRpbWVvdXQocmV0cnlGaXQsIDEwMCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWUucmVuZGVyKCk7CiAgICAgICAgdHJpZ2dlck9uQ2hhbmdlKCk7CiAgICAgIH0KICAgIH0KICAgIGlmICh0YWJsZURpdi5jbGllbnRXaWR0aCA8PSAwKSB7CiAgICAgIHJldHJ5Rml0KCk7CiAgICB9CiAgfTsKCiAgdmFyIHJlZ2lzdGVyV2lkdGhzID0gZnVuY3Rpb24oKSB7CiAgICBjb2x1bW5zLnN1YnNldCA9IGNvbHVtbnMuc3Vic2V0Lm1hcChmdW5jdGlvbihjb2x1bW4pIHsKICAgICAgY29sdW1uLndpZHRoID0gY29sdW1ucy53aWR0aHNbY29sdW1uLm5hbWVdLmlubmVyOwogICAgICByZXR1cm4gY29sdW1uOwogICAgfSk7CiAgfTsKCiAgdmFyIHBhcnNlUGFkZGluZyA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpID49IDAgPyBwYXJzZUludCh2YWx1ZSkgOiAwOwogIH07CgogIG1lLmZpeGVkSGVpZ2h0ID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gb3B0aW9ucy5yb3dzLm1heCAhPSBudWxsOwogIH0KCiAgbWUuZml0Um93cyA9IGZ1bmN0aW9uKCkgewogICAgaWYgKG1lLmZpeGVkSGVpZ2h0KCkpCiAgICAgIHJldHVybjsKCiAgICBtZWFzdXJlci5jYWxjdWxhdGUobWVhc3VyZXNDZWxsKTsKCiAgICB2YXIgcm93cyA9IG9wdGlvbnMucm93cy5taW4gIT09IG51bGwgPyBvcHRpb25zLnJvd3MubWluIDogMDsKICAgIHZhciBoZWFkZXJIZWlnaHQgPSBoZWFkZXIgIT09IG51bGwgJiYgaGVhZGVyLm9mZnNldEhlaWdodCA+IDAgPyBoZWFkZXIub2Zmc2V0SGVpZ2h0IDogMDsKICAgIHZhciBmb290ZXJIZWlnaHQgPSBmb290ZXIgIT09IG51bGwgJiYgZm9vdGVyLm9mZnNldEhlaWdodCA+IDAgPyBmb290ZXIub2Zmc2V0SGVpZ2h0IDogMDsKCiAgICBpZiAocGFnZWRUYWJsZS5vZmZzZXRIZWlnaHQgPiAwKSB7CiAgICAgIHZhciBhdmFpbGFibGVIZWlnaHQgPSBwYWdlZFRhYmxlLm9mZnNldEhlaWdodCAtIGhlYWRlckhlaWdodCAtIGZvb3RlckhlaWdodDsKICAgICAgcm93cyA9IE1hdGguZmxvb3IoKGF2YWlsYWJsZUhlaWdodCkgLyBtZWFzdXJlci5tZWFzdXJlcy5oZWlnaHQpOwogICAgfQoKICAgIHJvd3MgPSBvcHRpb25zLnJvd3MubWluICE9PSBudWxsID8gTWF0aC5tYXgob3B0aW9ucy5yb3dzLm1pbiwgcm93cykgOiByb3dzOwoKICAgIHBhZ2Uuc2V0Um93cyhyb3dzKTsKICB9CgogIC8vIFRoZSBnb2FsIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gYWRkIGFzIG1hbnkgY29sdW1ucyBhcyBwb3NzaWJsZQogIC8vIHN0YXJ0aW5nIGZyb20gbGVmdC10by1yaWdodCwgd2hlbiB0aGUgcmlnaHQgbW9zdCBsaW1pdCBpcyByZWFjaGVkCiAgLy8gaXQgdHJpZXMgdG8gYWRkIGNvbHVtbnMgZnJvbSB0aGUgbGVmdCBhcyB3ZWxsLgogIC8vCiAgLy8gV2hlbiBzdGFydEJhY2t3YXJkcyBpcyB0cnVlIGNvbHVtbnMgYXJlIGFkZGVkIGZyb20gcmlnaHQtdG8tbGVmdAogIG1lLmZpdENvbHVtbnMgPSBmdW5jdGlvbihzdGFydEJhY2t3YXJkcykgewogICAgbWVhc3VyZXIuY2FsY3VsYXRlKG1lYXN1cmVzQ2VsbCk7CiAgICBjb2x1bW5zLmNhbGN1bGF0ZVdpZHRocyhtZWFzdXJlci5tZWFzdXJlcyk7CgogICAgaWYgKHRhYmxlRGl2LmNsaWVudFdpZHRoID4gMCkgewogICAgICB0YWJsZURpdi5zdHlsZS5vcGFjaXR5ID0gMTsKICAgIH0KCiAgICB2YXIgdmlzaWJsZUNvbHVtbnMgPSB0YWJsZURpdi5jbGllbnRXaWR0aCA8PSAwID8gTWF0aC5tYXgoY29sdW1ucy5taW4sIDEpIDogMTsKICAgIHZhciBjb2x1bW5OdW1iZXIgPSBjb2x1bW5zLm51bWJlcjsKICAgIHZhciBwYWRkaW5nQ291bnQgPSAwOwoKICAgIC8vIHRyYWNrIGEgbGlzdCBvZiBhZGRlZCBjb2x1bW5zIGFzIHdlIGJ1aWxkIHRoZSB2aXNpYmxlIG9uZXMgdG8gYWxsb3cgdXMKICAgIC8vIHRvIHJlbW92ZSBjb2x1bW5zIHdoZW4gdGhleSBkb24ndCBmaXQgYW55bW9yZS4KICAgIHZhciBjb2x1bW5IaXN0b3J5ID0gW107CgogICAgdmFyIGxhc3RUYWJsZUhlaWdodCA9IDA7CiAgICB2YXIgYmFja3dhcmRzID0gc3RhcnRCYWNrd2FyZHM7CgogICAgdmFyIHRhYmxlRGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YWJsZURpdiwgbnVsbCk7CiAgICB2YXIgdGFibGVEaXZQYWRkaW5nID0gcGFyc2VQYWRkaW5nKHRhYmxlRGl2U3R5bGUucGFkZGluZ0xlZnQpICsKICAgICAgcGFyc2VQYWRkaW5nKHRhYmxlRGl2U3R5bGUucGFkZGluZ1JpZ2h0KTsKCiAgICB2YXIgYWRkUGFkZGluZ0NvbCA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRXaWR0aCA9IDA7CgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgY29sdW1ucy5zZXRWaXNpYmxlQ29sdW1ucyhjb2x1bW5OdW1iZXIsIHZpc2libGVDb2x1bW5zLCBwYWRkaW5nQ291bnQpOwogICAgICBjdXJyZW50V2lkdGggPSBjb2x1bW5zLmdldFdpZHRoKCk7CgogICAgICBpZiAodGFibGVEaXYuY2xpZW50V2lkdGggLSB0YWJsZURpdlBhZGRpbmcgPCBjdXJyZW50V2lkdGgpIHsKICAgICAgICBicmVhazsKICAgICAgfQoKICAgICAgY29sdW1uSGlzdG9yeS5wdXNoKHsKICAgICAgICBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlciwKICAgICAgICB2aXNpYmxlQ29sdW1uczogdmlzaWJsZUNvbHVtbnMsCiAgICAgICAgcGFkZGluZ0NvdW50OiBwYWRkaW5nQ291bnQKICAgICAgfSk7CgogICAgICBpZiAoY29sdW1uSGlzdG9yeS5sZW5ndGggPiAxMDApIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJNb3JlIHRoYW4gMTAwIHRyaWVzIHRvIGZpdCBjb2x1bW5zLCBhYm9ydGluZyIpOwogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgICBpZiAoY29sdW1ucy5tYXggIT09IG51bGwgJiYKICAgICAgICBjb2x1bW5zLnZpc2libGUgKyBjb2x1bW5zLmdldFBhZGRpbmdDb3VudCgpID49IGNvbHVtbnMubWF4KSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIC8vIGlmIHdlIHJ1biBvdXQgb2YgcmlnaHQtY29sdW1ucwogICAgICBpZiAoIWJhY2t3YXJkcyAmJiBjb2x1bW5OdW1iZXIgKyBjb2x1bW5zLnZpc2libGUgPj0gY29sdW1ucy50b3RhbCkgewogICAgICAgIC8vIGlmIHdlIHN0YXJ0ZWQgYWRkaW5nIHJpZ2h0LWNvbHVtbnMsIHRyeSBhZGRpbmcgbGVmdC1jb2x1bW5zCiAgICAgICAgaWYgKCFzdGFydEJhY2t3YXJkcyAmJiBjb2x1bW5OdW1iZXIgPiAwKSB7CiAgICAgICAgICBiYWNrd2FyZHMgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjb2x1bW5zLm1pbiA9PT0gbnVsbCB8fCB2aXNpYmxlQ29sdW1ucyArIGNvbHVtbnMuZ2V0UGFkZGluZ0NvdW50KCkgPj0gY29sdW1ucy5taW4pIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHBhZGRpbmdDb3VudCA9IHBhZGRpbmdDb3VudCArIDE7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBpZiB3ZSBydW4gb3V0IG9mIGxlZnQtY29sdW1ucwogICAgICBpZiAoYmFja3dhcmRzICYmIGNvbHVtbk51bWJlciA9PSAwKSB7CiAgICAgICAgLy8gaWYgd2Ugc3RhcnRlZCBhZGRpbmcgbGVmdC1jb2x1bW5zLCB0cnkgYWRkaW5nIHJpZ2h0LWNvbHVtbnMKICAgICAgICBpZiAoc3RhcnRCYWNrd2FyZHMgJiYgY29sdW1uTnVtYmVyICsgY29sdW1ucy52aXNpYmxlIDwgY29sdW1ucy50b3RhbCkgewogICAgICAgICAgYmFja3dhcmRzID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGNvbHVtbnMubWluID09PSBudWxsIHx8IHZpc2libGVDb2x1bW5zICsgY29sdW1ucy5nZXRQYWRkaW5nQ291bnQoKSA+PSBjb2x1bW5zLm1pbikgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgcGFkZGluZ0NvdW50ID0gcGFkZGluZ0NvdW50ICsgMTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIHdoZW4gbW92aW5nIGJhY2t3YXJkcyB0cnkgZml0dGluZyBsZWZ0IGNvbHVtbnMgZmlyc3QKICAgICAgaWYgKGJhY2t3YXJkcyAmJiBjb2x1bW5OdW1iZXIgPiAwKSB7CiAgICAgICAgY29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyIC0gMTsKICAgICAgfQoKICAgICAgaWYgKGNvbHVtbk51bWJlciArIHZpc2libGVDb2x1bW5zIDwgY29sdW1ucy50b3RhbCkgewogICAgICAgIHZpc2libGVDb2x1bW5zID0gdmlzaWJsZUNvbHVtbnMgKyAxOwogICAgICB9CiAgICB9CgogICAgdmFyIGxhc3RSZW5kZXJhYmxlQ29sdW1uID0gewogICAgICAgIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyLAogICAgICAgIHZpc2libGVDb2x1bW5zOiB2aXNpYmxlQ29sdW1ucywKICAgICAgICBwYWRkaW5nQ291bnQ6IHBhZGRpbmdDb3VudAogICAgfTsKCiAgICBpZiAoY29sdW1uSGlzdG9yeS5sZW5ndGggPiAwKSB7CiAgICAgIGxhc3RSZW5kZXJhYmxlQ29sdW1uID0gY29sdW1uSGlzdG9yeVtjb2x1bW5IaXN0b3J5Lmxlbmd0aCAtIDFdOwogICAgfQoKICAgIGNvbHVtbnMuc2V0VmlzaWJsZUNvbHVtbnMoCiAgICAgIGxhc3RSZW5kZXJhYmxlQ29sdW1uLmNvbHVtbk51bWJlciwKICAgICAgbGFzdFJlbmRlcmFibGVDb2x1bW4udmlzaWJsZUNvbHVtbnMsCiAgICAgIGxhc3RSZW5kZXJhYmxlQ29sdW1uLnBhZGRpbmdDb3VudCk7CgogICAgaWYgKHBhZ2VkVGFibGUub2Zmc2V0V2lkdGggPiAwKSB7CiAgICAgIHBhZ2Uuc2V0VmlzaWJsZVBhZ2VzKE1hdGgubWF4KE1hdGguY2VpbCgxLjAgKiAocGFnZWRUYWJsZS5vZmZzZXRXaWR0aCAtIDI1MCkgLyA0MCksIDIpKTsKICAgIH0KCiAgICByZWdpc3RlcldpZHRocygpOwogIH07CgogIG1lLmZpdCA9IGZ1bmN0aW9uKHN0YXJ0QmFja3dhcmRzKSB7CiAgICBtZS5maXRSb3dzKCk7CiAgICBtZS5maXRDb2x1bW5zKHN0YXJ0QmFja3dhcmRzKTsKICB9CgogIG1lLnJlbmRlciA9IGZ1bmN0aW9uKCkgewogICAgbWUuZml0Q29sdW1ucyhmYWxzZSk7CgogICAgLy8gcmVuZGVyIGhlYWRlci9mb290ZXIgdG8gbWVhc3VyZSBoZWlnaHQgYWNjdXJhdGVseQogICAgcmVuZGVySGVhZGVyKCk7CiAgICByZW5kZXJGb290ZXIoKTsKCiAgICBtZS5maXRSb3dzKCk7CiAgICByZW5kZXJCb2R5KCk7CgogICAgLy8gcmUtcmVuZGVyIGZvb3RlciB0byBtYXRjaCBuZXcgcm93cwogICAgcmVuZGVyRm9vdGVyKCk7CiAgfQoKICB2YXIgcmVzaXplTGFzdFdpZHRoID0gLTE7CiAgdmFyIHJlc2l6ZUxhc3RIZWlnaHQgPSAtMTsKICB2YXIgcmVzaXplTmV3V2lkdGggPSAtMTsKICB2YXIgcmVzaXplTmV3SGVpZ2h0ID0gLTE7CiAgdmFyIHJlc2l6ZVBlbmRpbmcgPSBmYWxzZTsKCiAgbWUucmVzaXplID0gZnVuY3Rpb24obmV3V2lkdGgsIG5ld0hlaWdodCkgewoKICAgIGZ1bmN0aW9uIHJlc2l6ZURlbGF5ZWQoKSB7CiAgICAgIHJlc2l6ZVBlbmRpbmcgPSBmYWxzZTsKCiAgICAgIGlmICgKICAgICAgICAocmVzaXplTmV3V2lkdGggIT09IHJlc2l6ZUxhc3RXaWR0aCkgfHwKICAgICAgICAoIW1lLmZpeGVkSGVpZ2h0KCkgJiYgcmVzaXplTmV3SGVpZ2h0ICE9PSByZXNpemVMYXN0SGVpZ2h0KQogICAgICApIHsKICAgICAgICByZXNpemVMYXN0V2lkdGggPSByZXNpemVOZXdXaWR0aDsKICAgICAgICByZXNpemVMYXN0SGVpZ2h0ID0gcmVzaXplTmV3SGVpZ2h0OwoKICAgICAgICBzZXRUaW1lb3V0KHJlc2l6ZURlbGF5ZWQsIDIwMCk7CiAgICAgICAgcmVzaXplUGVuZGluZyA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWUucmVuZGVyKCk7CiAgICAgICAgdHJpZ2dlck9uQ2hhbmdlKCk7CgogICAgICAgIHJlc2l6ZUxhc3RXaWR0aCA9IC0xOwogICAgICAgIHJlc2l6ZUxhc3RIZWlnaHQgPSAtMTsKICAgICAgfQogICAgfQoKICAgIHJlc2l6ZU5ld1dpZHRoID0gbmV3V2lkdGg7CiAgICByZXNpemVOZXdIZWlnaHQgPSBuZXdIZWlnaHQ7CgogICAgaWYgKCFyZXNpemVQZW5kaW5nKSByZXNpemVEZWxheWVkKCk7CiAgfTsKfTsKCnZhciBQYWdlZFRhYmxlRG9jOwooZnVuY3Rpb24gKFBhZ2VkVGFibGVEb2MpIHsKICB2YXIgYWxsUGFnZWRUYWJsZXMgPSBbXTsKCiAgUGFnZWRUYWJsZURvYy5pbml0QWxsID0gZnVuY3Rpb24oKSB7CiAgICBhbGxQYWdlZFRhYmxlcyA9IFtdOwoKICAgIHZhciBwYWdlZFRhYmxlcyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtcGFnZWR0YWJsZT0iZmFsc2UiXSxbZGF0YS1wYWdlZHRhYmxlPSIiXScpKTsKICAgIHBhZ2VkVGFibGVzLmZvckVhY2goZnVuY3Rpb24ocGFnZWRUYWJsZSwgaWR4KSB7CiAgICAgIHBhZ2VkVGFibGUuc2V0QXR0cmlidXRlKCJkYXRhLXBhZ2VkdGFibGUiLCAidHJ1ZSIpOwogICAgICBwYWdlZFRhYmxlLnNldEF0dHJpYnV0ZSgicGFnZWR0YWJsZS1wYWdlIiwgMCk7CiAgICAgIHBhZ2VkVGFibGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJwYWdlZHRhYmxlLXdyYXBwZXIiKTsKCiAgICAgIHZhciBwYWdlZFRhYmxlSW5zdGFuY2UgPSBuZXcgUGFnZWRUYWJsZShwYWdlZFRhYmxlKTsKICAgICAgcGFnZWRUYWJsZUluc3RhbmNlLmluaXQoKTsKCiAgICAgIGFsbFBhZ2VkVGFibGVzLnB1c2gocGFnZWRUYWJsZUluc3RhbmNlKTsKICAgIH0pOwogIH07CgogIFBhZ2VkVGFibGVEb2MucmVzaXplQWxsID0gZnVuY3Rpb24oKSB7CiAgICBhbGxQYWdlZFRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uKHBhZ2VkVGFibGUpIHsKICAgICAgcGFnZWRUYWJsZS5yZW5kZXIoKTsKICAgIH0pOwogIH07CgogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCBQYWdlZFRhYmxlRG9jLnJlc2l6ZUFsbCk7CgogIHJldHVybiBQYWdlZFRhYmxlRG9jOwp9KShQYWdlZFRhYmxlRG9jIHx8IChQYWdlZFRhYmxlRG9jID0ge30pKTsKCndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICBQYWdlZFRhYmxlRG9jLmluaXRBbGwoKTsKfTsK"></script>
<script src="data:application/javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gdHJ5RXZhbCh0YXNrKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gQXR0ZW1wdCBldmFsKCkgYm90aCB3aXRoIGFuZCB3aXRob3V0IGVuY2xvc2luZyBpbiBwYXJlbnRoZXNlcy4KICAvLyBOb3RlIHRoYXQgZW5jbG9zaW5nIGNvZXJjZXMgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpbnRvCiAgLy8gYW4gZXhwcmVzc2lvbiB0aGF0IGV2YWwoKSBjYW4gcGFyc2UKICAvLyAob3RoZXJ3aXNlLCBhIFN5bnRheEVycm9yIGlzIHRocm93bikKICBmdW5jdGlvbiB0cnlFdmFsKGNvZGUpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gZXZhbChjb2RlKTsKICAgIH0gY2F0Y2goZXJyb3IpIHsKICAgICAgaWYgKCFlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgICAgdHJ5IHsKICAgICAgICByZXN1bHQgPSBldmFsKCIoIiArIGNvZGUgKyAiKSIpOwogICAgICB9IGNhdGNoKGUpIHsKICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmdW5jdGlvbiBpbml0U2l6aW5nKGVsKSB7CiAgICB2YXIgc2l6aW5nID0gc2l6aW5nUG9saWN5KGVsKTsKICAgIGlmICghc2l6aW5nKQogICAgICByZXR1cm47CgogICAgdmFyIGNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJodG1sd2lkZ2V0X2NvbnRhaW5lciIpOwogICAgaWYgKCFjZWwpCiAgICAgIHJldHVybjsKCiAgICBpZiAodHlwZW9mKHNpemluZy5wYWRkaW5nKSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4gPSAiMCI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZyA9IHBhZGRpbmdUb0Nzcyh1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKSk7CiAgICB9CgogICAgaWYgKHNpemluZy5maWxsKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgaWYgKGNlbCkgewogICAgICAgIGNlbC5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICAgICAgdmFyIHBhZCA9IHVucGFja1BhZGRpbmcoc2l6aW5nLnBhZGRpbmcpOwogICAgICAgIGNlbC5zdHlsZS50b3AgPSBwYWQudG9wICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUucmlnaHQgPSBwYWQucmlnaHQgKyAicHgiOwogICAgICAgIGNlbC5zdHlsZS5ib3R0b20gPSBwYWQuYm90dG9tICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUubGVmdCA9IHBhZC5sZWZ0ICsgInB4IjsKICAgICAgICBlbC5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIH0KCiAgICAgIHJldHVybiB7CiAgICAgICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBjZWwub2Zmc2V0SGVpZ2h0OyB9CiAgICAgIH07CgogICAgfSBlbHNlIHsKICAgICAgZWwuc3R5bGUud2lkdGggPSBweChzaXppbmcud2lkdGgpOwogICAgICBlbC5zdHlsZS5oZWlnaHQgPSBweChzaXppbmcuaGVpZ2h0KTsKCiAgICAgIHJldHVybiB7CiAgICAgICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZWwub2Zmc2V0V2lkdGg7IH0sCiAgICAgICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwogICAgfQogIH0KCiAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgZm9yIG1ldGhvZHMKICB2YXIgZGVmYXVsdHMgPSB7CiAgICBmaW5kOiBmdW5jdGlvbihzY29wZSkgewogICAgICByZXR1cm4gcXVlcnlTZWxlY3RvckFsbChzY29wZSwgIi4iICsgdGhpcy5uYW1lKTsKICAgIH0sCiAgICByZW5kZXJFcnJvcjogZnVuY3Rpb24oZWwsIGVycikgewogICAgICB2YXIgJGVsID0gJChlbCk7CgogICAgICB0aGlzLmNsZWFyRXJyb3IoZWwpOwoKICAgICAgLy8gQWRkIGFsbCB0aGVzZSBlcnJvciBjbGFzc2VzLCBhcyBTaGlueSBkb2VzCiAgICAgIHZhciBlcnJDbGFzcyA9ICJzaGlueS1vdXRwdXQtZXJyb3IiOwogICAgICBpZiAoZXJyLnR5cGUgIT09IG51bGwpIHsKICAgICAgICAvLyB1c2UgdGhlIGNsYXNzZXMgb2YgdGhlIGVycm9yIGNvbmRpdGlvbiBhcyBDU1MgY2xhc3MgbmFtZXMKICAgICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiAiICsgJC5tYXAoYXNBcnJheShlcnIudHlwZSksIGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgICAgIHJldHVybiBlcnJDbGFzcyArICItIiArIHR5cGU7CiAgICAgICAgfSkuam9pbigiICIpOwogICAgICB9CiAgICAgIGVyckNsYXNzID0gZXJyQ2xhc3MgKyAiIGh0bWx3aWRnZXRzLWVycm9yIjsKCiAgICAgIC8vIElzIGVsIGlubGluZSBvciBibG9jaz8gSWYgaW5saW5lIG9yIGlubGluZS1ibG9jaywganVzdCBkaXNwbGF5Om5vbmUgaXQKICAgICAgLy8gYW5kIGFkZCBhbiBpbmxpbmUgZXJyb3IuCiAgICAgIHZhciBkaXNwbGF5ID0gJGVsLmNzcygiZGlzcGxheSIpOwogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBkaXNwbGF5KTsKCiAgICAgIGlmIChkaXNwbGF5ID09PSAiaW5saW5lIiB8fCBkaXNwbGF5ID09PSAiaW5saW5lLWJsb2NrIikgewogICAgICAgICRlbC5oaWRlKCk7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yU3BhbiA9ICQoIjxzcGFuPiIpLmFkZENsYXNzKGVyckNsYXNzKTsKICAgICAgICAgIGVycm9yU3Bhbi50ZXh0KGVyci5tZXNzYWdlKTsKICAgICAgICAgICRlbC5hZnRlcihlcnJvclNwYW4pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09PSAiYmxvY2siKSB7CiAgICAgICAgLy8gSWYgYmxvY2ssIGFkZCBhbiBlcnJvciBqdXN0IGFmdGVyIHRoZSBlbCwgc2V0IHZpc2liaWxpdHk6bm9uZSBvbiB0aGUKICAgICAgICAvLyBlbCwgYW5kIHBvc2l0aW9uIHRoZSBlcnJvciB0byBiZSBvbiB0b3Agb2YgdGhlIGVsLgogICAgICAgIC8vIE1hcmsgaXQgd2l0aCBhIHVuaXF1ZSBJRCBhbmQgQ1NTIGNsYXNzIHNvIHdlIGNhbiByZW1vdmUgaXQgbGF0ZXIuCiAgICAgICAgJGVsLmNzcygidmlzaWJpbGl0eSIsICJoaWRkZW4iKTsKICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICIiKSB7CiAgICAgICAgICB2YXIgZXJyb3JEaXYgPSAkKCI8ZGl2PiIpLmFkZENsYXNzKGVyckNsYXNzKS5jc3MoInBvc2l0aW9uIiwgImFic29sdXRlIikKICAgICAgICAgICAgLmNzcygidG9wIiwgZWwub2Zmc2V0VG9wKQogICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgLy8gc2V0dGluZyB3aWR0aCBjYW4gcHVzaCBvdXQgdGhlIHBhZ2Ugc2l6ZSwgZm9yY2luZyBvdGhlcndpc2UKICAgICAgICAgICAgLy8gdW5uZWNlc3Nhcnkgc2Nyb2xsYmFycyB0byBhcHBlYXIgYW5kIG1ha2luZyBpdCBpbXBvc3NpYmxlIGZvcgogICAgICAgICAgICAvLyB0aGUgZWxlbWVudCB0byBzaHJpbms7IHNvIHVzZSBtYXgtd2lkdGggaW5zdGVhZAogICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAuY3NzKCJoZWlnaHQiLCBlbC5vZmZzZXRIZWlnaHQpOwogICAgICAgICAgZXJyb3JEaXYudGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JEaXYpOwoKICAgICAgICAgIC8vIFJlYWxseSBkdW1iIHdheSB0byBrZWVwIHRoZSBzaXplL3Bvc2l0aW9uIG9mIHRoZSBlcnJvciBpbiBzeW5jIHdpdGgKICAgICAgICAgIC8vIHRoZSBwYXJlbnQgZWxlbWVudCBhcyB0aGUgd2luZG93IGlzIHJlc2l6ZWQgb3Igd2hhdGV2ZXIuCiAgICAgICAgICB2YXIgaW50SWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCFlcnJvckRpdlswXS5wYXJlbnRFbGVtZW50KSB7CiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRJZCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVycm9yRGl2CiAgICAgICAgICAgICAgLmNzcygidG9wIiwgZWwub2Zmc2V0VG9wKQogICAgICAgICAgICAgIC5jc3MoImxlZnQiLCBlbC5vZmZzZXRMZWZ0KQogICAgICAgICAgICAgIC5jc3MoIm1heFdpZHRoIiwgZWwub2Zmc2V0V2lkdGgpCiAgICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgY2xlYXJFcnJvcjogZnVuY3Rpb24oZWwpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwogICAgICB2YXIgZGlzcGxheSA9ICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIpOwogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBudWxsKTsKCiAgICAgIGlmIChkaXNwbGF5ID09PSAiaW5saW5lIiB8fCBkaXNwbGF5ID09PSAiaW5saW5lLWJsb2NrIikgewogICAgICAgIGlmIChkaXNwbGF5KQogICAgICAgICAgJGVsLmNzcygiZGlzcGxheSIsIGRpc3BsYXkpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIil7CiAgICAgICAgJGVsLmNzcygidmlzaWJpbGl0eSIsICJpbmhlcml0Iik7CiAgICAgICAgJChlbC5uZXh0U2libGluZykuZmlsdGVyKCIuaHRtbHdpZGdldHMtZXJyb3IiKS5yZW1vdmUoKTsKICAgICAgfQogICAgfSwKICAgIHNpemluZzoge30KICB9OwoKICAvLyBDYWxsZWQgYnkgd2lkZ2V0IGJpbmRpbmdzIHRvIHJlZ2lzdGVyIGEgbmV3IHR5cGUgb2Ygd2lkZ2V0LiBUaGUgZGVmaW5pdGlvbgogIC8vIG9iamVjdCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CiAgLy8gLSBuYW1lIChyZXF1aXJlZCkgLSBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBiaW5kaW5nIG5hbWUsIHdoaWNoIHdpbGwgYmUKICAvLyAgIHVzZWQgYnkgZGVmYXVsdCBhcyB0aGUgQ1NTIGNsYXNzbmFtZSB0byBsb29rIGZvci4KICAvLyAtIGluaXRpYWxpemUgKG9wdGlvbmFsKSAtIEEgZnVuY3Rpb24oZWwpIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIHdpZGdldCBlbGVtZW50OyBpZiBhIHZhbHVlIGlzIHJldHVybmVkLCBpdCB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgdGhpcmQKICAvLyAgIHZhbHVlIHRvIHJlbmRlclZhbHVlLgogIC8vIC0gcmVuZGVyVmFsdWUgKHJlcXVpcmVkKSAtIEEgZnVuY3Rpb24oZWwsIGRhdGEsIGluaXRWYWx1ZSkgdGhhdCB3aWxsIGJlCiAgLy8gICBjYWxsZWQgd2l0aCBkYXRhLiBTdGF0aWMgY29udGV4dHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBvbmNlIHBlcgogIC8vICAgZWxlbWVudDsgU2hpbnkgYXBwcyB3aWxsIGNhdXNlIHRoaXMgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHBlcgogIC8vICAgZWxlbWVudCwgYXMgdGhlIGRhdGEgY2hhbmdlcy4KICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0ID0gZnVuY3Rpb24oZGVmaW5pdGlvbikgewogICAgaWYgKCFkZWZpbml0aW9uLm5hbWUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgbmFtZSIpOwogICAgfQogICAgaWYgKCFkZWZpbml0aW9uLnR5cGUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgdHlwZSIpOwogICAgfQogICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBvdXRwdXQgd2lkZ2V0cwogICAgaWYgKGRlZmluaXRpb24udHlwZSAhPT0gIm91dHB1dCIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgd2lkZ2V0IHR5cGUgJyIgKyBkZWZpbml0aW9uLnR5cGUgKyAiJyIpOwogICAgfQogICAgLy8gVE9ETzogVmVyaWZ5IHRoYXQgLm5hbWUgaXMgYSB2YWxpZCBDU1MgY2xhc3NuYW1lCgogICAgLy8gU3VwcG9ydCBuZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMuIE9sZC1zdHlsZSBjbGFzcy1ib3VuZAogICAgLy8gZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0ICJvYmplY3QiIHBlciB3aWRnZXQgcGVyIHR5cGUvY2xhc3Mgb2YKICAgIC8vIHdpZGdldDsgdGhlIHJlbmRlclZhbHVlIGFuZCByZXNpemUgbWV0aG9kcyBvbiBzdWNoIHdpZGdldCBvYmplY3RzCiAgICAvLyB0YWtlIGVsIGFuZCBpbnN0YW5jZSBhcmd1bWVudHMsIGJlY2F1c2UgdGhlIHdpZGdldCBvYmplY3QgY2FuJ3QKICAgIC8vIHN0b3JlIHRoZW0uIE5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucyBoYXZlIG9uZSB3aWRnZXQKICAgIC8vIG9iamVjdCBwZXIgd2lkZ2V0IGluc3RhbmNlOyB0aGUgZGVmaW5pdGlvbiB0aGF0J3MgcGFzc2VkIGluIGRvZXNuJ3QKICAgIC8vIHByb3ZpZGUgcmVuZGVyVmFsdWUgb3IgcmVzaXplIG1ldGhvZHMgYXQgYWxsLCBqdXN0IHRoZSBzaW5nbGUgbWV0aG9kCiAgICAvLyAgIGZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpCiAgICAvLyB3aGljaCByZXR1cm5zIGFuIG9iamVjdCB0aGF0IGhhcyByZW5kZXJWYWx1ZSh4KSBhbmQgcmVzaXplKHcsIGgpLgogICAgLy8gVGhpcyBlbmFibGVzIGEgZmFyIG1vcmUgbmF0dXJhbCBwcm9ncmFtbWluZyBzdHlsZSBmb3IgdGhlIHdpZGdldAogICAgLy8gYXV0aG9yLCB3aG8gY2FuIHN0b3JlIHBlci1pbnN0YW5jZSBzdGF0ZSB1c2luZyBlaXRoZXIgT08tc3R5bGUKICAgIC8vIGluc3RhbmNlIGZpZWxkcyBvciBmdW5jdGlvbmFsLXN0eWxlIGNsb3N1cmUgdmFyaWFibGVzIChJIGd1ZXNzIHRoaXMKICAgIC8vIGlzIGluIGNvbnRyYXN0IHRvIHdoYXQgY2FuIG9ubHkgYmUgY2FsbGVkIEMtc3R5bGUgcHNldWRvLU9PIHdoaWNoIGlzCiAgICAvLyB3aGF0IHdlIHJlcXVpcmVkIGJlZm9yZSkuCiAgICBpZiAoZGVmaW5pdGlvbi5mYWN0b3J5KSB7CiAgICAgIGRlZmluaXRpb24gPSBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZpbml0aW9uKTsKICAgIH0KCiAgICBpZiAoIWRlZmluaXRpb24ucmVuZGVyVmFsdWUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgcmVuZGVyVmFsdWUgZnVuY3Rpb24iKTsKICAgIH0KCiAgICAvLyBGb3Igc3RhdGljIHJlbmRlcmluZyAobm9uLVNoaW55KSwgdXNlIGEgc2ltcGxlIHdpZGdldCByZWdpc3RyYXRpb24KICAgIC8vIHNjaGVtZS4gV2UgYWxzbyB1c2UgdGhpcyBzY2hlbWUgZm9yIFNoaW55IGFwcHMvZG9jdW1lbnRzIHRoYXQgYWxzbwogICAgLy8gY29udGFpbiBzdGF0aWMgd2lkZ2V0cy4KICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107CiAgICAvLyBNZXJnZSBkZWZhdWx0cyBpbnRvIHRoZSBkZWZpbml0aW9uOyBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGRlZmluaXRpb24uCiAgICB2YXIgc3RhdGljQmluZGluZyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGRlZmluaXRpb24pOwogICAgb3ZlcnJpZGVNZXRob2Qoc3RhdGljQmluZGluZywgImZpbmQiLCBmdW5jdGlvbihzdXBlcmZ1bmMpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgICAgdmFyIHJlc3VsdHMgPSBzdXBlcmZ1bmMoc2NvcGUpOwogICAgICAgIC8vIEZpbHRlciBvdXQgU2hpbnkgb3V0cHV0cywgd2Ugb25seSB3YW50IHRoZSBzdGF0aWMga2luZAogICAgICAgIHJldHVybiBmaWx0ZXJCeUNsYXNzKHJlc3VsdHMsICJodG1sLXdpZGdldC1vdXRwdXQiLCBmYWxzZSk7CiAgICAgIH07CiAgICB9KTsKICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzLnB1c2goc3RhdGljQmluZGluZyk7CgogICAgaWYgKHNoaW55TW9kZSkgewogICAgICAvLyBTaGlueSBpcyBydW5uaW5nLiBSZWdpc3RlciB0aGUgZGVmaW5pdGlvbiB3aXRoIGFuIG91dHB1dCBiaW5kaW5nLgogICAgICAvLyBUaGUgZGVmaW5pdGlvbiBpdHNlbGYgd2lsbCBub3QgYmUgdGhlIG91dHB1dCBiaW5kaW5nLCBpbnN0ZWFkCiAgICAgIC8vIHdlIHdpbGwgbWFrZSBhbiBvdXRwdXQgYmluZGluZyBvYmplY3QgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlCiAgICAgIC8vIGRlZmluaXRpb24uIFRoaXMgaXMgYmVjYXVzZSB3ZSBmb29saXNobHkgdXNlZCB0aGUgc2FtZSBtZXRob2QKICAgICAgLy8gbmFtZSAocmVuZGVyVmFsdWUpIGZvciBodG1sd2lkZ2V0cyBkZWZpbml0aW9uIGFuZCBTaGlueSBiaW5kaW5ncwogICAgICAvLyBidXQgdGhleSBhY3R1YWxseSBoYXZlIHF1aXRlIGRpZmZlcmVudCBzZW1hbnRpY3MgKHRoZSBTaGlueQogICAgICAvLyBiaW5kaW5ncyByZWNlaXZlIGRhdGEgdGhhdCBpbmNsdWRlcyBsb3RzIG9mIG1ldGFkYXRhIHRoYXQgaXQKICAgICAgLy8gc3RyaXBzIG9mZiBiZWZvcmUgY2FsbGluZyBodG1sd2lkZ2V0cyByZW5kZXJWYWx1ZSkuIFdlIGNhbid0CiAgICAgIC8vIGp1c3QgaWdub3JlIHRoZSBkaWZmZXJlbmNlIGJlY2F1c2UgaW4gc29tZSB3aWRnZXRzIGl0J3MgaGVscGZ1bAogICAgICAvLyB0byBjYWxsIHRoaXMucmVuZGVyVmFsdWUoKSBmcm9tIGluc2lkZSBvZiByZXNpemUoKSwgYW5kIGlmCiAgICAgIC8vIHdlJ3JlIG5vdCBkZWxlZ2F0aW5nLCB0aGVuIHRoYXQgY2FsbCB3aWxsIGdvIHRvIHRoZSBTaGlueQogICAgICAvLyB2ZXJzaW9uIGluc3RlYWQgb2YgdGhlIGh0bWx3aWRnZXRzIHZlcnNpb24uCgogICAgICAvLyBNZXJnZSBkZWZhdWx0cyB3aXRoIGRlZmluaXRpb24sIHdpdGhvdXQgbXV0YXRpbmcgZWl0aGVyLgogICAgICB2YXIgYmluZGluZ0RlZiA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGRlZmluaXRpb24pOwoKICAgICAgLy8gVGhpcyBvYmplY3Qgd2lsbCBiZSBvdXIgYWN0dWFsIFNoaW55IGJpbmRpbmcuCiAgICAgIHZhciBzaGlueUJpbmRpbmcgPSBuZXcgU2hpbnkuT3V0cHV0QmluZGluZygpOwoKICAgICAgLy8gV2l0aCBhIGZldyBleGNlcHRpb25zLCB3ZSdsbCB3YW50IHRvIHNpbXBseSB1c2UgdGhlIGJpbmRpbmdEZWYncwogICAgICAvLyB2ZXJzaW9uIG9mIG1ldGhvZHMgaWYgdGhleSBhcmUgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCiAgICAgIC8vIFNoaW55J3MgZGVmYXVsdHMuIE5PVEU6IElmIFNoaW55J3Mgb3V0cHV0IGJpbmRpbmdzIGdhaW4gYWRkaXRpb25hbAogICAgICAvLyBtZXRob2RzIGluIHRoZSBmdXR1cmUsIGFuZCB3ZSB3YW50IHRoZW0gdG8gYmUgb3ZlcnJpZGVhYmxlIGJ5CiAgICAgIC8vIEhUTUxXaWRnZXQgYmluZGluZyBkZWZpbml0aW9ucywgdGhlbiB3ZSdsbCBuZWVkIHRvIGFkZCB0aGVtIHRvIHRoaXMKICAgICAgLy8gbGlzdC4KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAiZ2V0SWQiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUNoYW5nZSIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJvblZhbHVlRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAicmVuZGVyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAiY2xlYXJFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJzaG93UHJvZ3Jlc3MiKTsKCiAgICAgIC8vIFRoZSBmaW5kLCByZW5kZXJWYWx1ZSwgYW5kIHJlc2l6ZSBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSwgYmVjYXVzZSB3ZQogICAgICAvLyB3YW50IHRvIGFjdHVhbGx5IGRlY29yYXRlIHRoZSBiZWhhdmlvciBvZiB0aGUgYmluZGluZ0RlZiBtZXRob2RzLgoKICAgICAgc2hpbnlCaW5kaW5nLmZpbmQgPSBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gYmluZGluZ0RlZi5maW5kKHNjb3BlKTsKCiAgICAgICAgLy8gT25seSByZXR1cm4gZWxlbWVudHMgdGhhdCBhcmUgU2hpbnkgb3V0cHV0cywgbm90IHN0YXRpYyBvbmVzCiAgICAgICAgdmFyIGR5bmFtaWNSZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoIi5odG1sLXdpZGdldC1vdXRwdXQiKTsKCiAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHdoYXRldmVyIGNhdXNlZCBTaGlueSB0byB0aGluayB0aGVyZSBtaWdodCBiZQogICAgICAgIC8vIG5ldyBkeW5hbWljIG91dHB1dHMsIGFsc28gY2F1c2VkIHRoZXJlIHRvIGJlIG5ldyBzdGF0aWMgb3V0cHV0cy4KICAgICAgICAvLyBTaW5jZSB0aGVyZSBtaWdodCBiZSBsb3RzIG9mIGRpZmZlcmVudCBodG1sd2lkZ2V0cyBiaW5kaW5ncywgd2UKICAgICAgICAvLyBzY2hlZHVsZSBleGVjdXRpb24gZm9yIGxhdGVyLS1ubyBuZWVkIHRvIHN0YXRpY1JlbmRlciBtdWx0aXBsZQogICAgICAgIC8vIHRpbWVzLgogICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPT0gZHluYW1pY1Jlc3VsdHMubGVuZ3RoKQogICAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXIoKTsKCiAgICAgICAgcmV0dXJuIGR5bmFtaWNSZXN1bHRzOwogICAgICB9OwoKICAgICAgLy8gV3JhcCByZW5kZXJWYWx1ZSB0byBoYW5kbGUgaW5pdGlhbGl6YXRpb24sIHdoaWNoIHVuZm9ydHVuYXRlbHkgaXNuJ3QKICAgICAgLy8gc3VwcG9ydGVkIG5hdGl2ZWx5IGJ5IFNoaW55IGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZy4KCiAgICAgIHNoaW55QmluZGluZy5yZW5kZXJWYWx1ZSA9IGZ1bmN0aW9uKGVsLCBkYXRhKSB7CiAgICAgICAgU2hpbnkucmVuZGVyRGVwZW5kZW5jaWVzKGRhdGEuZGVwcyk7CiAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICBpZiAoIShkYXRhLmV2YWxzIGluc3RhbmNlb2YgQXJyYXkpKSBkYXRhLmV2YWxzID0gW2RhdGEuZXZhbHNdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBkYXRhLmV2YWxzICYmIGkgPCBkYXRhLmV2YWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2ldKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFiaW5kaW5nRGVmLnJlbmRlck9uTnVsbFZhbHVlKSB7CiAgICAgICAgICBpZiAoZGF0YS54ID09PSBudWxsKSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICJpbmhlcml0IjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgIGluaXRTaXppbmcoZWwpOwoKICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiLCB0cnVlKTsKICAgICAgICAgIGlmIChiaW5kaW5nRGVmLmluaXRpYWxpemUpIHsKICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJpbmRpbmdEZWYuaW5pdGlhbGl6ZShlbCwgZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIHJlc3VsdCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJpbmRpbmdEZWYucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSwgW2VsLCBkYXRhLnhdKTsKICAgICAgfTsKCiAgICAgIC8vIE9ubHkgb3ZlcnJpZGUgcmVzaXplIGlmIGJpbmRpbmdEZWYgaW1wbGVtZW50cyBpdAogICAgICBpZiAoYmluZGluZ0RlZi5yZXNpemUpIHsKICAgICAgICBzaGlueUJpbmRpbmcucmVzaXplID0gZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICAgIC8vIFNoaW55IGNhbiBjYWxsIHJlc2l6ZSBiZWZvcmUgaW5pdGlhbGl6ZS9yZW5kZXJWYWx1ZSBoYXZlIGJlZW4KICAgICAgICAgIC8vIGNhbGxlZCwgd2hpY2ggZG9lc24ndCBtYWtlIHNlbnNlIGZvciB3aWRnZXRzLgogICAgICAgICAgaWYgKGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgewogICAgICAgICAgICBiaW5kaW5nRGVmLnJlc2l6ZShlbCwgd2lkdGgsIGhlaWdodCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CgogICAgICBTaGlueS5vdXRwdXRCaW5kaW5ncy5yZWdpc3RlcihzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYubmFtZSk7CiAgICB9CiAgfTsKCiAgdmFyIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgZnVuY3Rpb24gc2NoZWR1bGVTdGF0aWNSZW5kZXIoKSB7CiAgICBpZiAoIXNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCkgewogICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9LCAxKTsKICAgIH0KICB9CgogIC8vIFJlbmRlciBzdGF0aWMgd2lkZ2V0cyBhZnRlciB0aGUgZG9jdW1lbnQgZmluaXNoZXMgbG9hZGluZwogIC8vIFN0YXRpY2FsbHkgcmVuZGVyIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBvZiB0aGlzIHdpZGdldCdzIGNsYXNzCiAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlciA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGJpbmRpbmdzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107CiAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nKSB7CiAgICAgIHZhciBtYXRjaGVzID0gYmluZGluZy5maW5kKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7CiAgICAgIGZvckVhY2gobWF0Y2hlcywgZnVuY3Rpb24oZWwpIHsKICAgICAgICB2YXIgc2l6ZU9iaiA9IGluaXRTaXppbmcoZWwsIGJpbmRpbmcpOwoKICAgICAgICBpZiAoaGFzQ2xhc3MoZWwsICJodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiKSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBlbC5jbGFzc05hbWUgPSBlbC5jbGFzc05hbWUgKyAiIGh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCI7CgogICAgICAgIHZhciBpbml0UmVzdWx0OwogICAgICAgIGlmIChiaW5kaW5nLmluaXRpYWxpemUpIHsKICAgICAgICAgIGluaXRSZXN1bHQgPSBiaW5kaW5nLmluaXRpYWxpemUoZWwsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICk7CiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgaW5pdFJlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoYmluZGluZy5yZXNpemUpIHsKICAgICAgICAgIHZhciBsYXN0U2l6ZSA9IHsKICAgICAgICAgICAgdzogc2l6ZU9iaiA/IHNpemVPYmouZ2V0V2lkdGgoKSA6IGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICBoOiBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgfTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCgogIGZ1bmN0aW9uIGhhc19qUXVlcnkzKCkgewogICAgaWYgKCF3aW5kb3cualF1ZXJ5KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciAkdmVyc2lvbiA9IHdpbmRvdy5qUXVlcnkuZm4uanF1ZXJ5OwogICAgdmFyICRtYWpvcl92ZXJzaW9uID0gcGFyc2VJbnQoJHZlcnNpb24uc3BsaXQoIi4iKVswXSk7CiAgICByZXR1cm4gJG1ham9yX3ZlcnNpb24gPj0gMzsKICB9CgogIC8qCiAgLyBTaGlueSAxLjQgYnVtcGVkIGpRdWVyeSBmcm9tIDEueCB0byAzLnggd2hpY2ggbWVhbnMgalF1ZXJ5J3MKICAvIG9uLXJlYWR5IGhhbmRsZXIgKGkuZS4sICQoZm4pKSBpcyBub3cgYXN5bmNyb25vdXMgKGkuZS4sIGl0IG5vdwogIC8gcmVhbGx5IG1lYW5zICQoc2V0VGltZW91dChmbikpLgogIC8gaHR0cHM6Ly9qcXVlcnkuY29tL3VwZ3JhZGUtZ3VpZGUvMy4wLyNicmVha2luZy1jaGFuZ2UtZG9jdW1lbnQtcmVhZHktaGFuZGxlcnMtYXJlLW5vdy1hc3luY2hyb25vdXMKICAvCiAgLyBTaW5jZSBTaGlueSB1c2VzICQoKSB0byBzY2hlZHVsZSBpbml0U2hpbnksIHNoaW55Pj0xLjQgY2FsbHMgaW5pdFNoaW55CiAgLyBvbmUgdGljayBsYXRlciB0aGFuIGl0IGRpZCBiZWZvcmUsIHdoaWNoIG1lYW5zIHN0YXRpY1JlbmRlcigpIGlzCiAgLyBjYWxsZWQgcmVuZGVyVmFsdWUoKSBlYXJsaWVyIHRoYW4gKGFkdmFuY2VkKSB3aWRnZXQgYXV0aG9ycyBtaWdodCBiZSBleHBlY3RpbmcuCiAgLyBodHRwczovL2dpdGh1Yi5jb20vcnN0dWRpby9zaGlueS9pc3N1ZXMvMjYzMAogIC8KICAvIEZvciBhIGNvbmNyZXRlIGV4YW1wbGUsIGxlYWZsZXQgaGFzIHNvbWUgbWV0aG9kcyAoZS5nLiwgdXBkYXRlQm91bmRzKQogIC8gd2hpY2ggcmVmZXJlbmNlIFNoaW55IG1ldGhvZHMgcmVnaXN0ZXJlZCBpbiBpbml0U2hpbnkgKGUuZy4sIHNldElucHV0VmFsdWUpLgogIC8gU2luY2UgbGVhZmxldCBpcyBwcml2eSB0byB0aGlzIGxpZmUtY3ljbGUsIGl0IGtub3dzIHRvIHVzZSBzZXRUaW1lb3V0KCkgdG8KICAvIGRlbGF5IGV4ZWN1dGlvbiBvZiB0aG9zZSBtZXRob2RzICh1bnRpbCBTaGlueSBtZXRob2RzIGFyZSByZWFkeSkKICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL2xlYWZsZXQvYmxvYi8xOGVjOTgxL2phdmFzY3JpcHQvc3JjL2luZGV4LmpzI0wyNjYtTDI2OAogIC8KICAvIElkZWFsbHkgd2lkZ2V0IGF1dGhvcnMgd291bGRuJ3QgbmVlZCB0byB1c2UgdGhpcyBzZXRUaW1lb3V0KCkgaGFjayB0aGF0CiAgLyBsZWFmbGV0IHVzZXMgdG8gY2FsbCBTaGlueSBtZXRob2RzIG9uIGEgc3RhdGljUmVuZGVyKCkuIEluIHRoZSBsb25nIHJ1biwKICAvIHRoZSBsb2dpYyBpbml0U2hpbnkgc2hvdWxkIGJlIGJyb2tlbiB1cCBzbyB0aGF0IG1ldGhvZCByZWdpc3RyYXRpb24gaGFwcGVucwogIC8gcmlnaHQgYXdheSwgYnV0IGJpbmRpbmcgaGFwcGVucyBsYXRlci4KICAqLwogIGZ1bmN0aW9uIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKSB7CiAgICBpZiAoc2hpbnlNb2RlICYmIGhhc19qUXVlcnkzKCkpIHsKICAgICAgd2luZG93LmpRdWVyeSh3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgIH0KICB9CgogIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBhcmd1bWVudHMuY2FsbGVlLCBmYWxzZSk7CiAgICAgIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKTsKICAgIH0sIGZhbHNlKTsKICB9IGVsc2UgaWYgKGRvY3VtZW50LmF0dGFjaEV2ZW50KSB7CiAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiKSB7CiAgICAgICAgZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGFyZ3VtZW50cy5jYWxsZWUpOwogICAgICAgIG1heWJlU3RhdGljUmVuZGVyTGF0ZXIoKTsKICAgICAgfQogICAgfSk7CiAgfQoKCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEF0dGFjaG1lbnRVcmwgPSBmdW5jdGlvbihkZXBuYW1lLCBrZXkpIHsKICAgIC8vIElmIG5vIGtleSwgZGVmYXVsdCB0byB0aGUgZmlyc3QgaXRlbQogICAgaWYgKHR5cGVvZihrZXkpID09PSAidW5kZWZpbmVkIikKICAgICAga2V5ID0gMTsKCiAgICB2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlcG5hbWUgKyAiLSIgKyBrZXkgKyAiLWF0dGFjaG1lbnQiKTsKICAgIGlmICghbGluaykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0dGFjaG1lbnQgIiArIGRlcG5hbWUgKyAiLyIgKyBrZXkgKyAiIG5vdCBmb3VuZCBpbiBkb2N1bWVudCIpOwogICAgfQogICAgcmV0dXJuIGxpbmsuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgfTsKCiAgd2luZG93LkhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMgPSBmdW5jdGlvbihkZikgewogICAgdmFyIG5hbWVzID0gW107CiAgICB2YXIgbGVuZ3RoOwogICAgZm9yICh2YXIgbmFtZSBpbiBkZikgewogICAgICAgIGlmIChkZi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgbmFtZXMucHVzaChuYW1lKTsKICAgICAgICBpZiAodHlwZW9mKGRmW25hbWVdKSAhPT0gIm9iamVjdCIgfHwgdHlwZW9mKGRmW25hbWVdLmxlbmd0aCkgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyIpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mKGxlbmd0aCkgIT09ICJ1bmRlZmluZWQiICYmIGxlbmd0aCAhPT0gZGZbbmFtZV0ubGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGgiKTsKICAgICAgICB9CiAgICAgICAgbGVuZ3RoID0gZGZbbmFtZV0ubGVuZ3RoOwogICAgfQogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHZhciBpdGVtOwogICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbGVuZ3RoOyByb3crKykgewogICAgICAgIGl0ZW0gPSB7fTsKICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBuYW1lcy5sZW5ndGg7IGNvbCsrKSB7CiAgICAgICAgICAgIGl0ZW1bbmFtZXNbY29sXV0gPSBkZltuYW1lc1tjb2xdXVtyb3ddOwogICAgICAgIH0KICAgICAgICByZXN1bHRzLnB1c2goaXRlbSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMudHJhbnNwb3NlQXJyYXkyRCA9IGZ1bmN0aW9uKGFycmF5KSB7CiAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybiBhcnJheTsKICAgICAgdmFyIG5ld0FycmF5ID0gYXJyYXlbMF0ubWFwKGZ1bmN0aW9uKGNvbCwgaSkgewogICAgICAgICAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbihyb3cpIHsKICAgICAgICAgICAgICByZXR1cm4gcm93W2ldCiAgICAgICAgICB9KQogICAgICB9KTsKICAgICAgcmV0dXJuIG5ld0FycmF5OwogIH07CiAgLy8gU3BsaXQgdmFsdWUgYXQgc3BsaXRDaGFyLCBidXQgYWxsb3cgc3BsaXRDaGFyIHRvIGJlIGVzY2FwZWQKICAvLyB1c2luZyBlc2NhcGVDaGFyLiBBbnkgb3RoZXIgY2hhcmFjdGVycyBlc2NhcGVkIGJ5IGVzY2FwZUNoYXIKICAvLyB3aWxsIGJlIGluY2x1ZGVkIGFzIHVzdWFsIChpbmNsdWRpbmcgZXNjYXBlQ2hhciBpdHNlbGYpLgogIGZ1bmN0aW9uIHNwbGl0V2l0aEVzY2FwZSh2YWx1ZSwgc3BsaXRDaGFyLCBlc2NhcGVDaGFyKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgIHZhciBjdXJyZW50UmVzdWx0ID0gIiI7CiAgICBmb3IgKHZhciBwb3MgPSAwOyBwb3MgPCB2YWx1ZS5sZW5ndGg7IHBvcysrKSB7CiAgICAgIGlmICghZXNjYXBlTW9kZSkgewogICAgICAgIGlmICh2YWx1ZVtwb3NdID09PSBzcGxpdENoYXIpIHsKICAgICAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW3Bvc10gPT09IGVzY2FwZUNoYXIpIHsKICAgICAgICAgIGVzY2FwZU1vZGUgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJyZW50UmVzdWx0ICs9IHZhbHVlW3Bvc107CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICBlc2NhcGVNb2RlID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChjdXJyZW50UmVzdWx0ICE9PSAiIikgewogICAgICByZXN1bHRzLnB1c2goY3VycmVudFJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9CiAgLy8gRnVuY3Rpb24gYXV0aG9yZWQgYnkgWWlodWkvSkogQWxsYWlyZQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlciA9IGZ1bmN0aW9uKG8sIG1lbWJlcikgewogICAgdmFyIHBhcnRzID0gc3BsaXRXaXRoRXNjYXBlKG1lbWJlciwgJy4nLCAnXFwnKTsKICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07CiAgICAgIC8vIHBhcnQgbWF5IGJlIGEgY2hhcmFjdGVyIG9yICdudW1lcmljJyBtZW1iZXIgbmFtZQogICAgICBpZiAobyAhPT0gbnVsbCAmJiB0eXBlb2YgbyA9PT0gIm9iamVjdCIgJiYgcGFydCBpbiBvKSB7CiAgICAgICAgaWYgKGkgPT0gKGwgLSAxKSkgeyAvLyBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSB0aGVuIGV2YWx1bGF0ZQogICAgICAgICAgaWYgKHR5cGVvZiBvW3BhcnRdID09PSAic3RyaW5nIikKICAgICAgICAgICAgb1twYXJ0XSA9IHRyeUV2YWwob1twYXJ0XSk7CiAgICAgICAgfSBlbHNlIHsgLy8gb3RoZXJ3aXNlIGNvbnRpbnVlIHRvIG5leHQgZW1iZWRkZWQgb2JqZWN0CiAgICAgICAgICBvID0gb1twYXJ0XTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9OwoKICAvLyBSZXRyaWV2ZSB0aGUgSFRNTFdpZGdldCBpbnN0YW5jZSAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlIG9mIGFuCiAgLy8gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCwgb3IgbnVsbCBpZiBub25lLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGVsKSB7CiAgICByZXR1cm4gZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpOwogIH07CgogIC8vIEZpbmRzIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzY29wZSB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLAogIC8vIGFuZCByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YKICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGVsZW1lbnQsIGlmIGFueS4gSWYgbm8gZWxlbWVudCBtYXRjaGVzIHRoZQogIC8vIHNlbGVjdG9yLCBvciB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBoYXMgbm8gSFRNTFdpZGdldAogIC8vIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBpdCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIGVsID0gc2NvcGUucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CiAgICBpZiAoZWwgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKGVsKTsKICAgIH0KICB9OwoKICAvLyBGaW5kcyBhbGwgZWxlbWVudHMgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yLCBhbmQKICAvLyByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlcyAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlcyBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50cywgaW4gYW4gYXJyYXkuIElmIGVsZW1lbnRzIHRoYXQKICAvLyBtYXRjaCB0aGUgc2VsZWN0b3IgZG9uJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIEhUTUxXaWRnZXQKICAvLyBpbnN0YW5jZSwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgY29udGFpbiBudWxscy4KICAvLwogIC8vIFRoZSBzY29wZSBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIHdpbmRvdy5kb2N1bWVudC4KICB3aW5kb3cuSFRNTFdpZGdldHMuZmluZEFsbCA9IGZ1bmN0aW9uKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICBzZWxlY3RvciA9IHNjb3BlOwogICAgICBzY29wZSA9IGRvY3VtZW50OwogICAgfQoKICAgIHZhciBub2RlcyA9IHNjb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0cy5wdXNoKHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZShub2Rlc1tpXSkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfTsKCiAgdmFyIHBvc3RSZW5kZXJIYW5kbGVycyA9IFtdOwogIGZ1bmN0aW9uIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpIHsKICAgIHdoaWxlIChwb3N0UmVuZGVySGFuZGxlcnMubGVuZ3RoKSB7CiAgICAgIHZhciBoYW5kbGVyID0gcG9zdFJlbmRlckhhbmRsZXJzLnNoaWZ0KCk7CiAgICAgIGlmIChoYW5kbGVyKSB7CiAgICAgICAgaGFuZGxlcigpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZWdpc3RlciB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUKICAvLyBuZXh0IHRpbWUgc3RhdGljIHdpZGdldHMgYXJlIHJlbmRlcmVkLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICBwb3N0UmVuZGVySGFuZGxlcnMucHVzaChjYWxsYmFjayk7CiAgfTsKCiAgLy8gVGFrZXMgYSBuZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbiwgYW5kIHJldHVybnMgYW4KICAvLyBvbGQtc3R5bGUgY2xhc3MtYm91bmQgZGVmaW5pdGlvbi4gVGhpcyBzYXZlcyB1cyBmcm9tIGhhdmluZwogIC8vIHRvIHJld3JpdGUgYWxsIHRoZSBsb2dpYyBpbiB0aGlzIGZpbGUgdG8gYWNjb21vZGF0ZSBib3RoCiAgLy8gdHlwZXMgb2YgZGVmaW5pdGlvbnMuCiAgZnVuY3Rpb24gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmbikgewogICAgdmFyIHJlc3VsdCA9IHsKICAgICAgbmFtZTogZGVmbi5uYW1lLAogICAgICB0eXBlOiBkZWZuLnR5cGUsCiAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgcmV0dXJuIGRlZm4uZmFjdG9yeShlbCwgd2lkdGgsIGhlaWdodCk7CiAgICAgIH0sCiAgICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgeCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVuZGVyVmFsdWUoeCk7CiAgICAgIH0sCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7CiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgfQogICAgfTsKCiAgICBpZiAoZGVmbi5maW5kKQogICAgICByZXN1bHQuZmluZCA9IGRlZm4uZmluZDsKICAgIGlmIChkZWZuLnJlbmRlckVycm9yKQogICAgICByZXN1bHQucmVuZGVyRXJyb3IgPSBkZWZuLnJlbmRlckVycm9yOwogICAgaWYgKGRlZm4uY2xlYXJFcnJvcikKICAgICAgcmVzdWx0LmNsZWFyRXJyb3IgPSBkZWZuLmNsZWFyRXJyb3I7CgogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0pKCk7Cgo="></script>
<link href="data:text/css,%2Edt%2Dcrosstalk%2Dfade%20%7B%0Aopacity%3A%200%2E2%3B%0A%7D%0Ahtml%20body%20div%2EDTS%20div%2EdataTables%5FscrollBody%20%7B%0Abackground%3A%20none%3B%0A%7D%0A%0Atable%2EdataTable%20%7B%0Adisplay%3A%20table%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,KGZ1bmN0aW9uKCkgewoKLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zOiB1c2luZyBhIGdsb2JhbCBvYmplY3QgRFRXaWRnZXQgc28gdGhhdCBpdCBjYW4gYmUgdXNlZAovLyBpbiBKUygpIGNvZGUsIGUuZy4gZGF0YXRhYmxlKG9wdGlvbnMgPSBsaXN0KGZvbyA9IEpTKCdjb2RlJykpKTsgdW5saWtlIFIncwovLyBkeW5hbWljIHNjb3BpbmcsIHdoZW4gJ2NvZGUnIGlzIGV2YWwoKSdlZCwgSmF2YVNjcmlwdCBkb2VzIG5vdCBrbm93IG9iamVjdHMKLy8gZnJvbSB0aGUgInBhcmVudCBmcmFtZSIsIGUuZy4gSlMoJ0RUV2lkZ2V0Jykgd2lsbCBub3Qgd29yayB1bmxlc3MgaXQgd2FzIG1hZGUKLy8gYSBnbG9iYWwgb2JqZWN0CnZhciBEVFdpZGdldCA9IHt9OwoKLy8gMTIzNDU2NjY2Ljc4OTAgLT4gMTIzLDQ1Niw2NjYuNzg5MAp2YXIgbWFya0ludGVydmFsID0gZnVuY3Rpb24oZCwgZGlnaXRzLCBpbnRlcnZhbCwgbWFyaywgZGVjTWFyaywgcHJlY2lzaW9uKSB7CiAgeCA9IHByZWNpc2lvbiA/IGQudG9QcmVjaXNpb24oZGlnaXRzKSA6IGQudG9GaXhlZChkaWdpdHMpOwogIGlmICghL14tP1tcZC5dKyQvLnRlc3QoeCkpIHJldHVybiB4OwogIHZhciB4diA9IHguc3BsaXQoJy4nKTsKICBpZiAoeHYubGVuZ3RoID4gMikgcmV0dXJuIHg7ICAvLyBzaG91bGQgaGF2ZSBhdCBtb3N0IG9uZSBkZWNpbWFsIHBvaW50CiAgeHZbMF0gPSB4dlswXS5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcQig/PShcXGR7JyArIGludGVydmFsICsgJ30pKyg/IVxcZCkpJywgJ2cnKSwgbWFyayk7CiAgcmV0dXJuIHh2LmpvaW4oZGVjTWFyayk7Cn07CgpEVFdpZGdldC5mb3JtYXRDdXJyZW5jeSA9IGZ1bmN0aW9uKGRhdGEsIGN1cnJlbmN5LCBkaWdpdHMsIGludGVydmFsLCBtYXJrLCBkZWNNYXJrLCBiZWZvcmUpIHsKICB2YXIgZCA9IHBhcnNlRmxvYXQoZGF0YSk7CiAgaWYgKGlzTmFOKGQpKSByZXR1cm4gJyc7CiAgdmFyIHJlcyA9IG1hcmtJbnRlcnZhbChkLCBkaWdpdHMsIGludGVydmFsLCBtYXJrLCBkZWNNYXJrKTsKICByZXMgPSBiZWZvcmUgPyAoL14tLy50ZXN0KHJlcykgPyAnLScgKyBjdXJyZW5jeSArIHJlcy5yZXBsYWNlKC9eLS8sICcnKSA6IGN1cnJlbmN5ICsgcmVzKSA6CiAgICByZXMgKyBjdXJyZW5jeTsKICByZXR1cm4gcmVzOwp9OwoKRFRXaWRnZXQuZm9ybWF0U3RyaW5nID0gZnVuY3Rpb24oZGF0YSwgcHJlZml4LCBzdWZmaXgpIHsKICB2YXIgZCA9IGRhdGE7CiAgaWYgKGQgPT09IG51bGwpIHJldHVybiAnJzsKICByZXR1cm4gcHJlZml4ICsgZCArIHN1ZmZpeDsKfTsKCkRUV2lkZ2V0LmZvcm1hdFBlcmNlbnRhZ2UgPSBmdW5jdGlvbihkYXRhLCBkaWdpdHMsIGludGVydmFsLCBtYXJrLCBkZWNNYXJrKSB7CiAgdmFyIGQgPSBwYXJzZUZsb2F0KGRhdGEpOwogIGlmIChpc05hTihkKSkgcmV0dXJuICcnOwogIHJldHVybiBtYXJrSW50ZXJ2YWwoZCAqIDEwMCwgZGlnaXRzLCBpbnRlcnZhbCwgbWFyaywgZGVjTWFyaykgKyAnJSc7Cn07CgpEVFdpZGdldC5mb3JtYXRSb3VuZCA9IGZ1bmN0aW9uKGRhdGEsIGRpZ2l0cywgaW50ZXJ2YWwsIG1hcmssIGRlY01hcmspIHsKICB2YXIgZCA9IHBhcnNlRmxvYXQoZGF0YSk7CiAgaWYgKGlzTmFOKGQpKSByZXR1cm4gJyc7CiAgcmV0dXJuIG1hcmtJbnRlcnZhbChkLCBkaWdpdHMsIGludGVydmFsLCBtYXJrLCBkZWNNYXJrKTsKfTsKCkRUV2lkZ2V0LmZvcm1hdFNpZ25pZiA9IGZ1bmN0aW9uKGRhdGEsIGRpZ2l0cywgaW50ZXJ2YWwsIG1hcmssIGRlY01hcmspIHsKICB2YXIgZCA9IHBhcnNlRmxvYXQoZGF0YSk7CiAgaWYgKGlzTmFOKGQpKSByZXR1cm4gJyc7CiAgcmV0dXJuIG1hcmtJbnRlcnZhbChkLCBkaWdpdHMsIGludGVydmFsLCBtYXJrLCBkZWNNYXJrLCB0cnVlKTsKfTsKCkRUV2lkZ2V0LmZvcm1hdERhdGUgPSBmdW5jdGlvbihkYXRhLCBtZXRob2QsIHBhcmFtcykgewogIHZhciBkID0gZGF0YTsKICBpZiAoZCA9PT0gbnVsbCkgcmV0dXJuICcnOwogIC8vIChuZXcgRGF0ZSgnMjAxNS0xMC0yOCcpKS50b0RhdGVTdHJpbmcoKSBtYXkgcmV0dXJuIDIwMTUtMTAtMjcgYmVjYXVzZSB0aGUKICAvLyBhY3R1YWwgdGltZSBjcmVhdGVkIGNvdWxkIGJlIGxpa2UgJ1R1ZSBPY3QgMjcgMjAxNSAxOTowMDowMCBHTVQtMDUwMCAoQ0RUKScsCiAgLy8gaS5lLiB0aGUgZGF0ZS1vbmx5IHN0cmluZyBpcyB0cmVhdGVkIGFzIFVUQyB0aW1lIGluc3RlYWQgb2YgbG9jYWwgdGltZQogIGlmICgobWV0aG9kID09PSAndG9EYXRlU3RyaW5nJyB8fCBtZXRob2QgPT09ICd0b0xvY2FsZURhdGVTdHJpbmcnKSAmJiAvXlxkezQsfVxEXGR7Mn1cRFxkezJ9JC8udGVzdChkKSkgewogICAgZCA9IGQuc3BsaXQoL1xELyk7CiAgICBkID0gbmV3IERhdGUoZFswXSwgZFsxXSAtIDEsIGRbMl0pOwogIH0gZWxzZSB7CiAgICBkID0gbmV3IERhdGUoZCk7CiAgfQogIHJldHVybiBkW21ldGhvZF0uYXBwbHkoZCwgcGFyYW1zKTsKfTsKCndpbmRvdy5EVFdpZGdldCA9IERUV2lkZ2V0OwoKdmFyIHRyYW5zcG9zZUFycmF5MkQgPSBmdW5jdGlvbihhKSB7CiAgcmV0dXJuIGEubGVuZ3RoID09PSAwID8gYSA6IEhUTUxXaWRnZXRzLnRyYW5zcG9zZUFycmF5MkQoYSk7Cn07Cgp2YXIgY3Jvc3N0YWxrUGx1Z2luc0luc3RhbGxlZCA9IGZhbHNlOwoKZnVuY3Rpb24gbWF5YmVJbnN0YWxsQ3Jvc3N0YWxrUGx1Z2lucygpIHsKICBpZiAoY3Jvc3N0YWxrUGx1Z2luc0luc3RhbGxlZCkKICAgIHJldHVybjsKICBjcm9zc3RhbGtQbHVnaW5zSW5zdGFsbGVkID0gdHJ1ZTsKCiAgJC5mbi5kYXRhVGFibGUuZXh0LmFmbkZpbHRlcmluZy5wdXNoKAogICAgZnVuY3Rpb24ob1NldHRpbmdzLCBhRGF0YSwgaURhdGFJbmRleCkgewogICAgICB2YXIgY3RmaWx0ZXIgPSBvU2V0dGluZ3MublRhYmxlLmN0ZmlsdGVyOwogICAgICBpZiAoY3RmaWx0ZXIgJiYgIWN0ZmlsdGVyW2lEYXRhSW5kZXhdKQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgIHZhciBjdHNlbGVjdCA9IG9TZXR0aW5ncy5uVGFibGUuY3RzZWxlY3Q7CiAgICAgIGlmIChjdHNlbGVjdCAmJiAhY3RzZWxlY3RbaURhdGFJbmRleF0pCiAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgKTsKfQoKSFRNTFdpZGdldHMud2lkZ2V0KHsKICBuYW1lOiAiZGF0YXRhYmxlcyIsCiAgdHlwZTogIm91dHB1dCIsCiAgcmVuZGVyT25OdWxsVmFsdWU6IHRydWUsCiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICQoZWwpLmh0bWwoJyZuYnNwOycpOwogICAgcmV0dXJuIHsKICAgICAgZGF0YTogbnVsbCwKICAgICAgY3RmaWx0ZXJIYW5kbGU6IG5ldyBjcm9zc3RhbGsuRmlsdGVySGFuZGxlKCksCiAgICAgIGN0ZmlsdGVyU3Vic2NyaXB0aW9uOiBudWxsLAogICAgICBjdHNlbGVjdEhhbmRsZTogbmV3IGNyb3NzdGFsay5TZWxlY3Rpb25IYW5kbGUoKSwKICAgICAgY3RzZWxlY3RTdWJzY3JpcHRpb246IG51bGwKICAgIH07CiAgfSwKICByZW5kZXJWYWx1ZTogZnVuY3Rpb24oZWwsIGRhdGEsIGluc3RhbmNlKSB7CiAgICBpZiAoZWwub2Zmc2V0V2lkdGggPT09IDAgfHwgZWwub2Zmc2V0SGVpZ2h0ID09PSAwKSB7CiAgICAgIGluc3RhbmNlLmRhdGEgPSBkYXRhOwogICAgICByZXR1cm47CiAgICB9CiAgICBpbnN0YW5jZS5kYXRhID0gbnVsbDsKICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICRlbC5lbXB0eSgpOwoKICAgIGlmIChkYXRhID09PSBudWxsKSB7CiAgICAgICRlbC5hcHBlbmQoJyZuYnNwOycpOwogICAgICAvLyBjbGVhciBwcmV2aW91cyBTaGlueSBpbnB1dHMgKGlmIGFueSkKICAgICAgZm9yICh2YXIgaSBpbiBpbnN0YW5jZS5jbGVhcklucHV0cykgaW5zdGFuY2UuY2xlYXJJbnB1dHNbaV0oKTsKICAgICAgaW5zdGFuY2UuY2xlYXJJbnB1dHMgPSB7fTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZhciBjcm9zc3RhbGtPcHRpb25zID0gZGF0YS5jcm9zc3RhbGtPcHRpb25zOwogICAgaWYgKCFjcm9zc3RhbGtPcHRpb25zKSBjcm9zc3RhbGtPcHRpb25zID0gewogICAgICAna2V5JzogbnVsbCwgJ2dyb3VwJzogbnVsbAogICAgfTsKICAgIGlmIChjcm9zc3RhbGtPcHRpb25zLmdyb3VwKSB7CiAgICAgIG1heWJlSW5zdGFsbENyb3NzdGFsa1BsdWdpbnMoKTsKICAgICAgaW5zdGFuY2UuY3RmaWx0ZXJIYW5kbGUuc2V0R3JvdXAoY3Jvc3N0YWxrT3B0aW9ucy5ncm91cCk7CiAgICAgIGluc3RhbmNlLmN0c2VsZWN0SGFuZGxlLnNldEdyb3VwKGNyb3NzdGFsa09wdGlvbnMuZ3JvdXApOwogICAgfQoKICAgIC8vIElmIHdlIGFyZSBpbiBhIGZsZXhkYXNoYm9hcmQgc2Nyb2xsIGxheW91dCB0aGVuIHdlOgogICAgLy8gIChhKSBBbHdheXMgd2FudCB0byB1c2UgcGFnaW5hdGlvbiAob3RoZXJ3aXNlIHdlJ2xsIGhhdmUKICAgIC8vICAgICAgYSAiZG91YmxlIHNjcm9sbCBiYXIiIGVmZmVjdCBvbiB0aGUgcGhvbmUpOyBhbmQKICAgIC8vICAoYikgTmV2ZXIgd2FudCB0byBmaWxsIHRoZSBjb250YWluZXIgKHdlIHdhbnQgdGhlIHBhZ2luYXRpb24KICAgIC8vICAgICAgbGV2ZWwgdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZSBjb250YWluZXIpCiAgICBpZiAod2luZG93LkZsZXhEYXNoYm9hcmQgJiYgIXdpbmRvdy5GbGV4RGFzaGJvYXJkLmlzRmlsbFBhZ2UoKSkgewogICAgICBkYXRhLm9wdGlvbnMuYlBhZ2luYXRlID0gdHJ1ZTsKICAgICAgZGF0YS5maWxsQ29udGFpbmVyID0gZmFsc2U7CiAgICB9CgogICAgLy8gaWYgd2UgYXJlIGluIHRoZSB2aWV3ZXIgdGhlbiB3ZSBhbHdheXMgd2FudCB0byBmaWxsQ29udGFpbmVyIGFuZAogICAgLy8gYW5kIGF1dG9IaWRlTmF2aWdhdGlvbiAodW5sZXNzIHRoZSB1c2VyIGhhcyBleHBsaWNpdGx5IHNldCB0aGVzZSkKICAgIGlmICh3aW5kb3cuSFRNTFdpZGdldHMudmlld2VyTW9kZSkgewogICAgICBpZiAoIWRhdGEuaGFzT3duUHJvcGVydHkoImZpbGxDb250YWluZXIiKSkKICAgICAgICBkYXRhLmZpbGxDb250YWluZXIgPSB0cnVlOwogICAgICBpZiAoIWRhdGEuaGFzT3duUHJvcGVydHkoImF1dG9IaWRlTmF2aWdhdGlvbiIpKQogICAgICAgIGRhdGEuYXV0b0hpZGVOYXZpZ2F0aW9uID0gdHJ1ZTsKICAgIH0KCiAgICAvLyBwcm9wYWdhdGUgZmlsbENvbnRhaW5lciB0byBpbnN0YW5jZSAoc28gd2UgaGF2ZSBpdCBpbiByZXNpemUpCiAgICBpbnN0YW5jZS5maWxsQ29udGFpbmVyID0gZGF0YS5maWxsQ29udGFpbmVyOwoKICAgIHZhciBjZWxscyA9IGRhdGEuZGF0YTsKCiAgICBpZiAoY2VsbHMgaW5zdGFuY2VvZiBBcnJheSkgY2VsbHMgPSB0cmFuc3Bvc2VBcnJheTJEKGNlbGxzKTsKCiAgICAkZWwuYXBwZW5kKGRhdGEuY29udGFpbmVyKTsKICAgIHZhciAkdGFibGUgPSAkZWwuZmluZCgndGFibGUnKTsKICAgIGlmIChkYXRhLmNsYXNzKSAkdGFibGUuYWRkQ2xhc3MoZGF0YS5jbGFzcyk7CiAgICBpZiAoZGF0YS5jYXB0aW9uKSAkdGFibGUucHJlcGVuZChkYXRhLmNhcHRpb24pOwoKICAgIGlmICghZGF0YS5zZWxlY3Rpb24pIGRhdGEuc2VsZWN0aW9uID0gewogICAgICBtb2RlOiAnbm9uZScsIHNlbGVjdGVkOiBudWxsLCB0YXJnZXQ6ICdyb3cnLCBzZWxlY3RhYmxlOiBudWxsCiAgICB9OwogICAgaWYgKEhUTUxXaWRnZXRzLnNoaW55TW9kZSAmJiBkYXRhLnNlbGVjdGlvbi5tb2RlICE9PSAnbm9uZScgJiYKICAgICAgICBkYXRhLnNlbGVjdGlvbi50YXJnZXQgPT09ICdyb3crY29sdW1uJykgewogICAgICBpZiAoJHRhYmxlLmNoaWxkcmVuKCd0Zm9vdCcpLmxlbmd0aCA9PT0gMCkgewogICAgICAgICR0YWJsZS5hcHBlbmQoJCgnPHRmb290PicpKTsKICAgICAgICAkdGFibGUuZmluZCgndGhlYWQgdHInKS5jbG9uZSgpLmFwcGVuZFRvKCR0YWJsZS5maW5kKCd0Zm9vdCcpKTsKICAgICAgfQogICAgfQoKICAgIC8vIGNvbHVtbiBmaWx0ZXJzCiAgICB2YXIgZmlsdGVyUm93OwogICAgc3dpdGNoIChkYXRhLmZpbHRlcikgewogICAgICBjYXNlICd0b3AnOgogICAgICAgICR0YWJsZS5jaGlsZHJlbigndGhlYWQnKS5hcHBlbmQoZGF0YS5maWx0ZXJIVE1MKTsKICAgICAgICBmaWx0ZXJSb3cgPSAkdGFibGUuZmluZCgndGhlYWQgdHI6bGFzdCB0ZCcpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdib3R0b20nOgogICAgICAgIGlmICgkdGFibGUuY2hpbGRyZW4oJ3Rmb290JykubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAkdGFibGUuYXBwZW5kKCQoJzx0Zm9vdD4nKSk7CiAgICAgICAgfQogICAgICAgICR0YWJsZS5jaGlsZHJlbigndGZvb3QnKS5wcmVwZW5kKGRhdGEuZmlsdGVySFRNTCk7CiAgICAgICAgZmlsdGVyUm93ID0gJHRhYmxlLmZpbmQoJ3Rmb290IHRyOmZpcnN0IHRkJyk7CiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgdmFyIG9wdGlvbnMgPSB7IHNlYXJjaERlbGF5OiAxMDAwIH07CiAgICBpZiAoY2VsbHMgIT09IG51bGwpICQuZXh0ZW5kKG9wdGlvbnMsIHsKICAgICAgZGF0YTogY2VsbHMKICAgIH0pOwoKICAgIC8vIG9wdGlvbnMgZm9yIGZpbGxDb250YWluZXIKICAgIHZhciBib290c3RyYXBBY3RpdmUgPSB0eXBlb2YoJC5mbi5wb3BvdmVyKSAhPSAndW5kZWZpbmVkJzsKICAgIGlmIChpbnN0YW5jZS5maWxsQ29udGFpbmVyKSB7CgogICAgICAvLyBmb3JjZSBzY3JvbGxYL3Njcm9sbFkgYW5kIHR1cm4gb2ZmIGF1dG9XaWR0aAogICAgICBvcHRpb25zLnNjcm9sbFggPSB0cnVlOwogICAgICBvcHRpb25zLnNjcm9sbFkgPSAiMTAwcHgiOyAvLyBjYW4gYmUgYW55IHZhbHVlLCB3ZSdsbCBhZGp1c3QgYmVsb3cKCiAgICAgIC8vIGlmIHdlIGFyZW4ndCBwYWdpbmF0aW5nIHRoZW4gbW92ZSBhcm91bmQgdGhlIGluZm8vZmlsdGVyIGNvbnRyb2xzCiAgICAgIC8vIHRvIHNhdmUgc3BhY2UgYXQgdGhlIGJvdHRvbSBhbmQgcmVwaHJhc2UgdGhlIGluZm8gY2FsbGJhY2sKICAgICAgaWYgKGRhdGEub3B0aW9ucy5iUGFnaW5hdGUgPT09IGZhbHNlKSB7CgogICAgICAgIC8vIHdlIGtub3cgaG93IHRvIGRvIHRoaXMgY2xlYW5seSBmb3IgYm9vdHN0cmFwLCBub3Qgc28gbXVjaAogICAgICAgIC8vIGZvciBvdGhlciB0aGVtZXMvbGF5b3V0cwogICAgICAgIGlmIChib290c3RyYXBBY3RpdmUpIHsKICAgICAgICAgIG9wdGlvbnMuZG9tID0gIjwncm93JzwnY29sLXNtLTQnaT48J2NvbC1zbS04J2Y+PiIgKwogICAgICAgICAgICAgICAgICAgICAgICAiPCdyb3cnPCdjb2wtc20tMTIndHI+PiI7CiAgICAgICAgfQoKICAgICAgICBvcHRpb25zLmZuSW5mb0NhbGxiYWNrID0gZnVuY3Rpb24ob1NldHRpbmdzLCBpU3RhcnQsIGlFbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpTWF4LCBpVG90YWwsIHNQcmUpIHsKICAgICAgICAgIHJldHVybiBOdW1iZXIoaVRvdGFsKS50b0xvY2FsZVN0cmluZygpICsgIiByZWNvcmRzIjsKICAgICAgICB9OwogICAgICB9CiAgICB9CgogICAgLy8gYXV0byBoaWRlIG5hdmlnYXRpb24gaWYgcmVxdWVzdGVkCiAgICBpZiAoZGF0YS5hdXRvSGlkZU5hdmlnYXRpb24gPT09IHRydWUpIHsKICAgICAgaWYgKGJvb3RzdHJhcEFjdGl2ZSAmJiBkYXRhLm9wdGlvbnMuYlBhZ2luYXRlICE9PSBmYWxzZSkgewogICAgICAgIC8vIHN0cmlwIGFsbCBuYXYgaWYgbGVuZ3RoID49IGNlbGxzCiAgICAgICAgaWYgKChjZWxscyBpbnN0YW5jZW9mIEFycmF5KSAmJiBkYXRhLm9wdGlvbnMuaURpc3BsYXlMZW5ndGggPj0gY2VsbHMubGVuZ3RoKQogICAgICAgICAgb3B0aW9ucy5kb20gPSAiPCdyb3cnPCdjb2wtc20tMTIndHI+PiI7CiAgICAgICAgLy8gYWx0ZXJuYXRpdmVseSBsZWFuIHRoaW5ncyBvdXQgZm9yIGZsZXhkYXNoYm9hcmQgbW9iaWxlIHBvcnRyYWl0CiAgICAgICAgZWxzZSBpZiAod2luZG93LkZsZXhEYXNoYm9hcmQgJiYgd2luZG93LkZsZXhEYXNoYm9hcmQuaXNNb2JpbGVQaG9uZSgpKQogICAgICAgICAgb3B0aW9ucy5kb20gPSAiPCdyb3cnPCdjb2wtc20tMTInZj4+IiArCiAgICAgICAgICAgICAgICAgICAgICAgICI8J3Jvdyc8J2NvbC1zbS0xMid0cj4+IiAgKwogICAgICAgICAgICAgICAgICAgICAgICAiPCdyb3cnPCdjb2wtc20tMTIncD4+IjsKICAgICAgfQogICAgfQoKICAgICQuZXh0ZW5kKHRydWUsIG9wdGlvbnMsIGRhdGEub3B0aW9ucyB8fCB7fSk7CgogICAgdmFyIHNlYXJjaENvbHMgPSBvcHRpb25zLnNlYXJjaENvbHM7CiAgICBpZiAoc2VhcmNoQ29scykgewogICAgICBzZWFyY2hDb2xzID0gc2VhcmNoQ29scy5tYXAoZnVuY3Rpb24oeCkgewogICAgICAgIHJldHVybiB4ID09PSBudWxsID8gJycgOiB4LnNlYXJjaDsKICAgICAgfSk7CiAgICAgIC8vIEZJWE1FOiB0aGlzIG1lYW5zIEkgZG9uJ3QgcmVzcGVjdCB0aGUgZXNjYXBlUmVnZXggc2V0dGluZwogICAgICBkZWxldGUgb3B0aW9ucy5zZWFyY2hDb2xzOwogICAgfQoKICAgIC8vIHNlcnZlci1zaWRlIHByb2Nlc3Npbmc/CiAgICB2YXIgc2VydmVyID0gb3B0aW9ucy5zZXJ2ZXJTaWRlID09PSB0cnVlOwoKICAgIC8vIHVzZSB0aGUgZGF0YVNyYyBmdW5jdGlvbiB0byBwcmUtcHJvY2VzcyBKU09OIGRhdGEgcmV0dXJuZWQgZnJvbSBSCiAgICB2YXIgRFRfcm93c19hbGwgPSBbXSwgRFRfcm93c19jdXJyZW50ID0gW107CiAgICBpZiAoc2VydmVyICYmIEhUTUxXaWRnZXRzLnNoaW55TW9kZSAmJiB0eXBlb2Ygb3B0aW9ucy5hamF4ID09PSAnb2JqZWN0JyAmJgogICAgICAgIC9ec2Vzc2lvblwvW1xkYS16XStcL2RhdGFvYmovLnRlc3Qob3B0aW9ucy5hamF4LnVybCkgJiYgIW9wdGlvbnMuYWpheC5kYXRhU3JjKSB7CiAgICAgIG9wdGlvbnMuYWpheC5kYXRhU3JjID0gZnVuY3Rpb24oanNvbikgewogICAgICAgIERUX3Jvd3NfYWxsID0gJC5tYWtlQXJyYXkoanNvbi5EVF9yb3dzX2FsbCk7CiAgICAgICAgRFRfcm93c19jdXJyZW50ID0gJC5tYWtlQXJyYXkoanNvbi5EVF9yb3dzX2N1cnJlbnQpOwogICAgICAgIHZhciBkYXRhID0ganNvbi5kYXRhOwogICAgICAgIGlmICghY29sUmVvcmRlckVuYWJsZWQoKSkgcmV0dXJuIGRhdGE7CiAgICAgICAgdmFyIHRhYmxlID0gJHRhYmxlLkRhdGFUYWJsZSgpLCBvcmRlciA9IHRhYmxlLmNvbFJlb3JkZXIub3JkZXIoKSwgZmxhZyA9IHRydWUsIGksIGosIHJvdzsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIGlmIChvcmRlcltpXSAhPT0gaSkgZmxhZyA9IGZhbHNlOwogICAgICAgIGlmIChmbGFnKSByZXR1cm4gZGF0YTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkgewogICAgICAgICAgcm93ID0gZGF0YVtpXS5zbGljZSgpOwogICAgICAgICAgZm9yIChqID0gMDsgaiA8IG9yZGVyLmxlbmd0aDsgKytqKSBkYXRhW2ldW2pdID0gcm93W29yZGVyW2pdXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgIH07CiAgICB9CgogICAgdmFyIHRoaXogPSB0aGlzOwogICAgaWYgKGluc3RhbmNlLmZpbGxDb250YWluZXIpICR0YWJsZS5vbignaW5pdC5kdCcsIGZ1bmN0aW9uKGUpIHsKICAgICAgdGhpei5maWxsQXZhaWxhYmxlSGVpZ2h0KGVsLCAkKGVsKS5pbm5lckhlaWdodCgpKTsKICAgIH0pOwogICAgLy8gSWYgdGhlIHBhZ2UgY29udGFpbnMgc2VydmVyYWwgZGF0YXRhYmxlcyBhbmQgb25lIG9mIHdoaWNoIGVuYWJsZXMgY29sUmVvcmRlciwKICAgIC8vIHRoZSB0YWJsZS5jb2xSZW9yZGVyLm9yZGVyKCkgZnVuY3Rpb24gd2lsbCBleGlzdCBidXQgdGhyb3dzIGVycm9yIHdoZW4gY2FsbGVkLgogICAgLy8gU28gaXQgc2VlbXMgbGlrZSB0aGUgb25seSB3YXkgdG8ga25vdyBpZiBjb2xSZW9yZGVyIGlzIGVuYWJsZWQgb3Igbm90IGlzIHRvCiAgICAvLyBjaGVjayB0aGUgb3B0aW9ucy4KICAgIHZhciBjb2xSZW9yZGVyRW5hYmxlZCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gImNvbFJlb3JkZXIiIGluIG9wdGlvbnM7IH07CiAgICB2YXIgdGFibGUgPSAkdGFibGUuRGF0YVRhYmxlKG9wdGlvbnMpOwogICAgJGVsLmRhdGEoJ2RhdGF0YWJsZScsIHRhYmxlKTsKCiAgICAvLyBVbnJlZ2lzdGVyIHByZXZpb3VzIENyb3NzdGFsayBldmVudCBzdWJzY3JpcHRpb25zLCBpZiB0aGV5IGV4aXN0CiAgICBpZiAoaW5zdGFuY2UuY3RmaWx0ZXJTdWJzY3JpcHRpb24pIHsKICAgICAgaW5zdGFuY2UuY3RmaWx0ZXJIYW5kbGUub2ZmKCJjaGFuZ2UiLCBpbnN0YW5jZS5jdGZpbHRlclN1YnNjcmlwdGlvbik7CiAgICAgIGluc3RhbmNlLmN0ZmlsdGVyU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIH0KICAgIGlmIChpbnN0YW5jZS5jdHNlbGVjdFN1YnNjcmlwdGlvbikgewogICAgICBpbnN0YW5jZS5jdHNlbGVjdEhhbmRsZS5vZmYoImNoYW5nZSIsIGluc3RhbmNlLmN0c2VsZWN0U3Vic2NyaXB0aW9uKTsKICAgICAgaW5zdGFuY2UuY3RzZWxlY3RTdWJzY3JpcHRpb24gPSBudWxsOwogICAgfQoKICAgIGlmICghY3Jvc3N0YWxrT3B0aW9ucy5ncm91cCkgewogICAgICAkdGFibGVbMF0uY3RmaWx0ZXIgPSBudWxsOwogICAgICAkdGFibGVbMF0uY3RzZWxlY3QgPSBudWxsOwogICAgfSBlbHNlIHsKICAgICAgdmFyIGtleSA9IGNyb3NzdGFsa09wdGlvbnMua2V5OwogICAgICBmdW5jdGlvbiBrZXlzVG9NYXRjaGVzKGtleXMpIHsKICAgICAgICBpZiAoIWtleXMpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXlzID0ge307CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgc2VsZWN0ZWRLZXlzW2tleXNbaV1dID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBtYXRjaGVzID0ge307CiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleS5sZW5ndGg7IGorKykgewogICAgICAgICAgICBpZiAoc2VsZWN0ZWRLZXlzW2tleVtqXV0pCiAgICAgICAgICAgICAgbWF0Y2hlc1tqXSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbWF0Y2hlczsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGFwcGx5Q3Jvc3N0YWxrRmlsdGVyKGUpIHsKICAgICAgICAkdGFibGVbMF0uY3RmaWx0ZXIgPSBrZXlzVG9NYXRjaGVzKGUudmFsdWUpOwogICAgICAgIHRhYmxlLmRyYXcoKTsKICAgICAgfQogICAgICBpbnN0YW5jZS5jdGZpbHRlclN1YnNjcmlwdGlvbiA9IGluc3RhbmNlLmN0ZmlsdGVySGFuZGxlLm9uKCJjaGFuZ2UiLCBhcHBseUNyb3NzdGFsa0ZpbHRlcik7CiAgICAgIGFwcGx5Q3Jvc3N0YWxrRmlsdGVyKHt2YWx1ZTogaW5zdGFuY2UuY3RmaWx0ZXJIYW5kbGUuZmlsdGVyZWRLZXlzfSk7CgogICAgICBmdW5jdGlvbiBhcHBseUNyb3NzdGFsa1NlbGVjdGlvbihlKSB7CiAgICAgICAgaWYgKGUuc2VuZGVyICE9PSBpbnN0YW5jZS5jdHNlbGVjdEhhbmRsZSkgewogICAgICAgICAgdGFibGUKICAgICAgICAgICAgLnJvd3MoJy4nICsgc2VsQ2xhc3MsIHtzZWFyY2g6ICdhcHBsaWVkJ30pCiAgICAgICAgICAgIC5ub2RlcygpCiAgICAgICAgICAgIC50byQoKQogICAgICAgICAgICAucmVtb3ZlQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgaWYgKHNlbGVjdGVkUm93cykKICAgICAgICAgICAgY2hhbmdlSW5wdXQoJ3Jvd3Nfc2VsZWN0ZWQnLCBzZWxlY3RlZFJvd3MoKSwgdm9pZCAwLCB0cnVlKTsKICAgICAgICB9CgogICAgICAgIGlmIChlLnNlbmRlciAhPT0gaW5zdGFuY2UuY3RzZWxlY3RIYW5kbGUgJiYgZS52YWx1ZSAmJiBlLnZhbHVlLmxlbmd0aCkgewogICAgICAgICAgdmFyIG1hdGNoZXMgPSBrZXlzVG9NYXRjaGVzKGUudmFsdWUpOwoKICAgICAgICAgIC8vIHBlcnNpc3RlbnQgc2VsZWN0aW9uIHdpdGggcGxvdGx5ICgmIGxlYWZsZXQpCiAgICAgICAgICB2YXIgY3RPcHRzID0gY3Jvc3N0YWxrLnZhcigicGxvdGx5Q3Jvc3N0YWxrT3B0cyIpLmdldCgpIHx8IHt9OwogICAgICAgICAgaWYgKGN0T3B0cy5wZXJzaXN0ZW50ID09PSB0cnVlKSB7CiAgICAgICAgICAgIHZhciBtYXRjaGVzID0gJC5leHRlbmQobWF0Y2hlcywgJHRhYmxlWzBdLmN0c2VsZWN0KTsKICAgICAgICAgIH0KCiAgICAgICAgICAkdGFibGVbMF0uY3RzZWxlY3QgPSBtYXRjaGVzOwogICAgICAgICAgdGFibGUuZHJhdygpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoJHRhYmxlWzBdLmN0c2VsZWN0KSB7CiAgICAgICAgICAgICR0YWJsZVswXS5jdHNlbGVjdCA9IG51bGw7CiAgICAgICAgICAgIHRhYmxlLmRyYXcoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaW5zdGFuY2UuY3RzZWxlY3RTdWJzY3JpcHRpb24gPSBpbnN0YW5jZS5jdHNlbGVjdEhhbmRsZS5vbigiY2hhbmdlIiwgYXBwbHlDcm9zc3RhbGtTZWxlY3Rpb24pOwogICAgICAvLyBUT0RPOiBUaGlzIG5leHQgbGluZSBkb2Vzbid0IHNlZW0gdG8gd29yayB3aGVuIHJlbmRlckRhdGFUYWJsZSBpcyB1c2VkCiAgICAgIGFwcGx5Q3Jvc3N0YWxrU2VsZWN0aW9uKHt2YWx1ZTogaW5zdGFuY2UuY3RzZWxlY3RIYW5kbGUudmFsdWV9KTsKICAgIH0KCiAgICB2YXIgaW5BcnJheSA9IGZ1bmN0aW9uKHZhbCwgYXJyYXkpIHsKICAgICAgcmV0dXJuICQuaW5BcnJheSh2YWwsICQubWFrZUFycmF5KGFycmF5KSkgPiAtMTsKICAgIH07CgogICAgLy8gZW5jb2RlICsgdG8gJTJCIHdoZW4gc2VhcmNoaW5nIGluIHRoZSB0YWJsZSBvbiBzZXJ2ZXIgc2lkZSwgYmVjYXVzZQogICAgLy8gc2hpbnk6OnBhcnNlUXVlcnlTdHJpbmcoKSB0cmVhdHMgKyBhcyBzcGFjZXMsIGFuZCBEYXRhVGFibGVzIGRvZXMgbm90CiAgICAvLyBlbmNvZGUgKyB0byAlMkIgKG9yICUgdG8gJTI1KSB3aGVuIHNlbmRpbmcgdGhlIHJlcXVlc3QKICAgIHZhciBlbmNvZGVfcGx1cyA9IGZ1bmN0aW9uKHgpIHsKICAgICAgcmV0dXJuIHNlcnZlciA/IHgucmVwbGFjZSgvJS9nLCAnJTI1JykucmVwbGFjZSgvXCsvZywgJyUyQicpIDogeDsKICAgIH07CgogICAgLy8gc2VhcmNoIHRoZSBpLXRoIGNvbHVtbgogICAgdmFyIHNlYXJjaENvbHVtbiA9IGZ1bmN0aW9uKGksIHZhbHVlKSB7CiAgICAgIHZhciByZWdleCA9IGZhbHNlLCBjaSA9IHRydWU7CiAgICAgIGlmIChvcHRpb25zLnNlYXJjaCkgewogICAgICAgIHJlZ2V4ID0gb3B0aW9ucy5zZWFyY2gucmVnZXgsCiAgICAgICAgY2kgPSBvcHRpb25zLnNlYXJjaC5jYXNlSW5zZW5zaXRpdmUgIT09IGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0YWJsZS5jb2x1bW4oaSkuc2VhcmNoKGVuY29kZV9wbHVzKHZhbHVlKSwgcmVnZXgsICFyZWdleCwgY2kpOwogICAgfTsKCiAgICBpZiAoZGF0YS5maWx0ZXIgIT09ICdub25lJykgewoKICAgICAgZmlsdGVyUm93LmVhY2goZnVuY3Rpb24oaSwgdGQpIHsKCiAgICAgICAgdmFyICR0ZCA9ICQodGQpLCB0eXBlID0gJHRkLmRhdGEoJ3R5cGUnKSwgZmlsdGVyOwogICAgICAgIHZhciAkaW5wdXQgPSAkdGQuY2hpbGRyZW4oJ2RpdicpLmZpcnN0KCkuY2hpbGRyZW4oJ2lucHV0Jyk7CiAgICAgICAgJGlucHV0LnByb3AoJ2Rpc2FibGVkJywgIXRhYmxlLnNldHRpbmdzKClbMF0uYW9Db2x1bW5zW2ldLmJTZWFyY2hhYmxlIHx8IHR5cGUgPT09ICdkaXNhYmxlZCcpOwogICAgICAgICRpbnB1dC5vbignaW5wdXQgYmx1cicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgJGlucHV0Lm5leHQoJ3NwYW4nKS50b2dnbGUoQm9vbGVhbigkaW5wdXQudmFsKCkpKTsKICAgICAgICB9KTsKICAgICAgICAvLyBCb290c3RyYXAgc2V0cyBwb2ludGVyLWV2ZW50cyB0byBub25lIGFuZCB3ZSB3b24ndCBiZSBhYmxlIHRvIGNsaWNrCiAgICAgICAgLy8gdGhlIGNsZWFyIGJ1dHRvbgogICAgICAgICRpbnB1dC5uZXh0KCdzcGFuJykuY3NzKCdwb2ludGVyLWV2ZW50cycsICdhdXRvJykuaGlkZSgpLmNsaWNrKGZ1bmN0aW9uKCkgewogICAgICAgICAgJCh0aGlzKS5oaWRlKCkucHJldignaW5wdXQnKS52YWwoJycpLnRyaWdnZXIoJ2lucHV0JykuZm9jdXMoKTsKICAgICAgICB9KTsKICAgICAgICB2YXIgc2VhcmNoQ29sOyAgLy8gc2VhcmNoIHN0cmluZyBmb3IgdGhpcyBjb2x1bW4KICAgICAgICBpZiAoc2VhcmNoQ29scyAmJiBzZWFyY2hDb2xzW2ldKSB7CiAgICAgICAgICBzZWFyY2hDb2wgPSBzZWFyY2hDb2xzW2ldOwogICAgICAgICAgJGlucHV0LnZhbChzZWFyY2hDb2wpLnRyaWdnZXIoJ2lucHV0Jyk7CiAgICAgICAgfQogICAgICAgIHZhciAkeCA9ICR0ZC5jaGlsZHJlbignZGl2JykubGFzdCgpOwoKICAgICAgICAvLyByZW1vdmUgdGhlIG92ZXJmbG93OiBoaWRkZW4gYXR0cmlidXRlIG9mIHRoZSBzY3JvbGxIZWFkCiAgICAgICAgLy8gKG90aGVyd2lzZSB0aGUgc2Nyb2xsaW5nIHRhYmxlIGJvZHkgb2JzY3VyZXMgdGhlIGZpbHRlcnMpCiAgICAgICAgLy8gVGhlIHdvcmthcm91bmQgYW5kIHRoZSBkaXNjdXNzaW9uIGZyb20KICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcnN0dWRpby9EVC9pc3N1ZXMvNTU0I2lzc3VlY29tbWVudC01MTgwMDczNDcKICAgICAgICAvLyBPdGhlcndpc2UgdGhlIGZpbHRlciBzZWxlY3Rpb24gd2lsbCBub3QgYmUgYW5jaG9yZWQgdG8gdGhlIHZhbHVlcwogICAgICAgIC8vIHdoZW4gdGhlIGNvbHVtbnMgbnVtYmVyIGlzIG1hbnkgYW5kIHNjcm9sbFggaXMgZW5hYmxlZC4KICAgICAgICB2YXIgc2Nyb2xsSGVhZCA9ICQoZWwpLmZpbmQoJy5kYXRhVGFibGVzX3Njcm9sbEhlYWQsLmRhdGFUYWJsZXNfc2Nyb2xsRm9vdCcpOwogICAgICAgIHZhciBjc3NPdmVyZmxvd0hlYWQgPSBzY3JvbGxIZWFkLmNzcygnb3ZlcmZsb3cnKTsKICAgICAgICB2YXIgc2Nyb2xsQm9keSA9ICQoZWwpLmZpbmQoJy5kYXRhVGFibGVzX3Njcm9sbEJvZHknKTsKICAgICAgICB2YXIgY3NzT3ZlcmZsb3dCb2R5ID0gc2Nyb2xsQm9keS5jc3MoJ292ZXJmbG93Jyk7CiAgICAgICAgdmFyIHNjcm9sbFRhYmxlID0gJChlbCkuZmluZCgnLmRhdGFUYWJsZXNfc2Nyb2xsJyk7CiAgICAgICAgdmFyIGNzc092ZXJmbG93VGFibGUgPSBzY3JvbGxUYWJsZS5jc3MoJ292ZXJmbG93Jyk7CiAgICAgICAgaWYgKGNzc092ZXJmbG93SGVhZCA9PT0gJ2hpZGRlbicpIHsKICAgICAgICAgICR4Lm9uKCdzaG93IGhpZGUnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGlmIChlLnR5cGUgPT09ICdzaG93JykgewogICAgICAgICAgICAgIHNjcm9sbEhlYWQuY3NzKCdvdmVyZmxvdycsICd2aXNpYmxlJyk7CiAgICAgICAgICAgICAgc2Nyb2xsQm9keS5jc3MoJ292ZXJmbG93JywgJ3Zpc2libGUnKTsKICAgICAgICAgICAgICBzY3JvbGxUYWJsZS5jc3MoJ292ZXJmbG93LXgnLCAnc2Nyb2xsJyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgc2Nyb2xsSGVhZC5jc3MoJ292ZXJmbG93JywgY3NzT3ZlcmZsb3dIZWFkKTsKICAgICAgICAgICAgICBzY3JvbGxCb2R5LmNzcygnb3ZlcmZsb3cnLCBjc3NPdmVyZmxvd0JvZHkpOwogICAgICAgICAgICAgIHNjcm9sbFRhYmxlLmNzcygnb3ZlcmZsb3cteCcsIGNzc092ZXJmbG93VGFibGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgICR4LmNzcygnei1pbmRleCcsIDI1KTsKICAgICAgICB9CgogICAgICAgIGlmIChpbkFycmF5KHR5cGUsIFsnZmFjdG9yJywgJ2xvZ2ljYWwnXSkpIHsKICAgICAgICAgICRpbnB1dC5vbih7CiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAkaW5wdXQucGFyZW50KCkuaGlkZSgpOyAkeC5zaG93KCkudHJpZ2dlcignc2hvdycpOyBmaWx0ZXJbMF0uc2VsZWN0aXplLmZvY3VzKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBpZiAoJGlucHV0LnZhbCgpID09PSAnJykgZmlsdGVyWzBdLnNlbGVjdGl6ZS5zZXRWYWx1ZShbXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdmFyICRpbnB1dDIgPSAkeC5jaGlsZHJlbignc2VsZWN0Jyk7CiAgICAgICAgICBmaWx0ZXIgPSAkaW5wdXQyLnNlbGVjdGl6ZSh7CiAgICAgICAgICAgIG9wdGlvbnM6ICRpbnB1dDIuZGF0YSgnb3B0aW9ucycpLm1hcChmdW5jdGlvbih2LCBpKSB7CiAgICAgICAgICAgICAgcmV0dXJuICh7dGV4dDogdiwgdmFsdWU6IHZ9KTsKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIHBsdWdpbnM6IFsncmVtb3ZlX2J1dHRvbiddLAogICAgICAgICAgICBoaWRlU2VsZWN0ZWQ6IHRydWUsCiAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgdmFsdWUgPSBbXTsgLy8gY29tcGF0aWJpbGl0eSB3aXRoIGpRdWVyeSAzLjAKICAgICAgICAgICAgICAkaW5wdXQudmFsKHZhbHVlLmxlbmd0aCA/IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA6ICcnKTsKICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoKSAkaW5wdXQudHJpZ2dlcignaW5wdXQnKTsKICAgICAgICAgICAgICAkaW5wdXQuYXR0cigndGl0bGUnLCAkaW5wdXQudmFsKCkpOwogICAgICAgICAgICAgIGlmIChzZXJ2ZXIpIHsKICAgICAgICAgICAgICAgIHRhYmxlLmNvbHVtbihpKS5zZWFyY2godmFsdWUubGVuZ3RoID8gZW5jb2RlX3BsdXMoSlNPTi5zdHJpbmdpZnkodmFsdWUpKSA6ICcnKS5kcmF3KCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIC8vIHR1cm4gb2ZmIGZpbHRlciBpZiBub3RoaW5nIHNlbGVjdGVkCiAgICAgICAgICAgICAgJHRkLmRhdGEoJ2ZpbHRlcicsIHZhbHVlLmxlbmd0aCA+IDApOwogICAgICAgICAgICAgIHRhYmxlLmRyYXcoKTsgIC8vIHJlZHJhdyB0YWJsZSwgYW5kIGZpbHRlcnMgd2lsbCBiZSBhcHBsaWVkCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKHNlYXJjaENvbCkgZmlsdGVyWzBdLnNlbGVjdGl6ZS5zZXRWYWx1ZShKU09OLnBhcnNlKHNlYXJjaENvbCkpOwogICAgICAgICAgZmlsdGVyWzBdLnNlbGVjdGl6ZS5vbignYmx1cicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAkeC5oaWRlKCkudHJpZ2dlcignaGlkZScpOyAkaW5wdXQucGFyZW50KCkuc2hvdygpOyAkaW5wdXQudHJpZ2dlcignYmx1cicpOwogICAgICAgICAgfSk7CiAgICAgICAgICBmaWx0ZXIubmV4dCgnZGl2JykuY3NzKCdtYXJnaW4tYm90dG9tJywgJ2F1dG8nKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjaGFyYWN0ZXInKSB7CiAgICAgICAgICB2YXIgZnVuID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlYXJjaENvbHVtbihpLCAkaW5wdXQudmFsKCkpLmRyYXcoKTsKICAgICAgICAgIH07CiAgICAgICAgICBpZiAoc2VydmVyKSB7CiAgICAgICAgICAgIGZ1biA9ICQuZm4uZGF0YVRhYmxlLnV0aWwudGhyb3R0bGUoZnVuLCBvcHRpb25zLnNlYXJjaERlbGF5KTsKICAgICAgICAgIH0KICAgICAgICAgICRpbnB1dC5vbignaW5wdXQnLCBmdW4pOwogICAgICAgIH0gZWxzZSBpZiAoaW5BcnJheSh0eXBlLCBbJ251bWJlcicsICdpbnRlZ2VyJywgJ2RhdGUnLCAndGltZSddKSkgewogICAgICAgICAgdmFyICR4MCA9ICR4OwogICAgICAgICAgJHggPSAkeDAuY2hpbGRyZW4oJ2RpdicpLmZpcnN0KCk7CiAgICAgICAgICAkeDAuY3NzKHsKICAgICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiAnI2ZmZicsCiAgICAgICAgICAgICdib3JkZXInOiAnMXB4ICNkZGQgc29saWQnLAogICAgICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICc0cHgnLAogICAgICAgICAgICAncGFkZGluZyc6ICcyMHB4IDIwcHggMTBweCAyMHB4JwogICAgICAgICAgfSk7CiAgICAgICAgICB2YXIgJHNwYW5zID0gJHgwLmNoaWxkcmVuKCdzcGFuJykuY3NzKHsKICAgICAgICAgICAgJ21hcmdpbi10b3AnOiAnMTBweCcsCiAgICAgICAgICAgICd3aGl0ZS1zcGFjZSc6ICdub3dyYXAnCiAgICAgICAgICB9KTsKICAgICAgICAgIHZhciAkc3BhbjEgPSAkc3BhbnMuZmlyc3QoKSwgJHNwYW4yID0gJHNwYW5zLmxhc3QoKTsKICAgICAgICAgIHZhciByMSA9ICskeC5kYXRhKCdtaW4nKSwgcjIgPSArJHguZGF0YSgnbWF4Jyk7CiAgICAgICAgICAvLyB3aGVuIHRoZSBudW1iZXJzIGFyZSB0b28gc21hbGwgb3IgaGF2ZSBtYW55IGRlY2ltYWwgcGxhY2VzLCB0aGUKICAgICAgICAgIC8vIHNsaWRlciBtYXkgaGF2ZSBudW1lcmljIHByZWNpc2lvbiBwcm9ibGVtcyAoIzE1MCkKICAgICAgICAgIHZhciBzY2FsZSA9IE1hdGgucG93KDEwLCBNYXRoLm1heCgwLCArJHguZGF0YSgnc2NhbGUnKSB8fCAwKSk7CiAgICAgICAgICByMSA9IE1hdGgucm91bmQocjEgKiBzY2FsZSk7IHIyID0gTWF0aC5yb3VuZChyMiAqIHNjYWxlKTsKICAgICAgICAgIHZhciBzY2FsZUJhY2sgPSBmdW5jdGlvbih4LCBzY2FsZSkgewogICAgICAgICAgICBpZiAoc2NhbGUgPT09IDEpIHJldHVybiB4OwogICAgICAgICAgICB2YXIgZCA9IE1hdGgucm91bmQoTWF0aC5sb2coc2NhbGUpIC8gTWF0aC5sb2coMTApKTsKICAgICAgICAgICAgLy8gdG8gYXZvaWQgcHJvYmxlbXMgbGlrZSAzLjQyMy8xMDAgLT4gMC4wMzQyMzAwMDAwMDAwMDAwMDMKICAgICAgICAgICAgcmV0dXJuICh4IC8gc2NhbGUpLnRvRml4ZWQoZCk7CiAgICAgICAgICB9OwogICAgICAgICAgdmFyIHNsaWRlcl9taW4gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIGZpbHRlci5ub1VpU2xpZGVyKCdvcHRpb25zJykucmFuZ2UubWluOwogICAgICAgICAgfTsKICAgICAgICAgIHZhciBzbGlkZXJfbWF4ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBmaWx0ZXIubm9VaVNsaWRlcignb3B0aW9ucycpLnJhbmdlLm1heDsKICAgICAgICAgIH07CiAgICAgICAgICAkaW5wdXQub24oewogICAgICAgICAgICBmb2N1czogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgJHgwLnNob3coKS50cmlnZ2VyKCdzaG93Jyk7CiAgICAgICAgICAgICAgLy8gZmlyc3QsIG1ha2Ugc3VyZSB0aGUgc2xpZGVyIGRpdiBsZWF2ZXMgYXQgbGVhc3QgMjBweCBiZXR3ZWVuCiAgICAgICAgICAgICAgLy8gdGhlIHR3byAoc2xpZGVyIHZhbHVlKSBzcGFuJ3MKICAgICAgICAgICAgICAkeDAud2lkdGgoTWF0aC5tYXgoMTYwLCAkc3BhbjEub3V0ZXJXaWR0aCgpICsgJHNwYW4yLm91dGVyV2lkdGgoKSArIDIwKSk7CiAgICAgICAgICAgICAgLy8gdGhlbiwgaWYgdGhlIGlucHV0IGlzIHJlYWxseSB3aWRlLCBtYWtlIHRoZSBzbGlkZXIgdGhlIHNhbWUKICAgICAgICAgICAgICAvLyB3aWR0aCBhcyB0aGUgaW5wdXQKICAgICAgICAgICAgICBpZiAoJHgwLm91dGVyV2lkdGgoKSA8ICRpbnB1dC5vdXRlcldpZHRoKCkpIHsKICAgICAgICAgICAgICAgICR4MC5vdXRlcldpZHRoKCRpbnB1dC5vdXRlcldpZHRoKCkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIHNsaWRlciBkaXYgZG9lcyBub3QgcmVhY2ggYmV5b25kIHRoZSByaWdodCBtYXJnaW4KICAgICAgICAgICAgICBpZiAoJCh3aW5kb3cpLndpZHRoKCkgPCAkeDAub2Zmc2V0KCkubGVmdCArICR4MC53aWR0aCgpKSB7CiAgICAgICAgICAgICAgICAkeDAub2Zmc2V0KHsKICAgICAgICAgICAgICAgICAgJ2xlZnQnOiAkaW5wdXQub2Zmc2V0KCkubGVmdCArICRpbnB1dC5vdXRlcldpZHRoKCkgLSAkeDAub3V0ZXJXaWR0aCgpCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGJsdXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICR4MC5oaWRlKCkudHJpZ2dlcignaGlkZScpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgaWYgKCRpbnB1dC52YWwoKSA9PT0gJycpIGZpbHRlci52YWwoW3NsaWRlcl9taW4oKSwgc2xpZGVyX21heCgpXSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgdmFyIHYgPSAkaW5wdXQudmFsKCkucmVwbGFjZSgvXHMvZywgJycpOwogICAgICAgICAgICAgIGlmICh2ID09PSAnJykgcmV0dXJuOwogICAgICAgICAgICAgIHYgPSB2LnNwbGl0KCcuLi4nKTsKICAgICAgICAgICAgICBpZiAodi5sZW5ndGggIT09IDIpIHsKICAgICAgICAgICAgICAgICRpbnB1dC5wYXJlbnQoKS5hZGRDbGFzcygnaGFzLWVycm9yJyk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh2WzBdID09PSAnJykgdlswXSA9IHNsaWRlcl9taW4oKTsKICAgICAgICAgICAgICBpZiAodlsxXSA9PT0gJycpIHZbMV0gPSBzbGlkZXJfbWF4KCk7CiAgICAgICAgICAgICAgJGlucHV0LnBhcmVudCgpLnJlbW92ZUNsYXNzKCdoYXMtZXJyb3InKTsKICAgICAgICAgICAgICAvLyB0cmVhdCBkYXRlIGFzIFVUQyB0aW1lIGF0IG1pZG5pZ2h0CiAgICAgICAgICAgICAgdmFyIHN0clRpbWUgPSBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICB2YXIgcyA9IHR5cGUgPT09ICdkYXRlJyA/ICdUMDA6MDA6MDBaJyA6ICcnOwogICAgICAgICAgICAgICAgdmFyIHQgPSBuZXcgRGF0ZSh4ICsgcykuZ2V0VGltZSgpOwogICAgICAgICAgICAgICAgLy8gYWRkIDEwIG1pbnV0ZXMgdG8gZGF0ZSBzaW5jZSBpdCBkb2VzIG5vdCBodXJ0IHRoZSBkYXRlLCBhbmQKICAgICAgICAgICAgICAgIC8vIGl0IGhlbHBzIGF2b2lkIHRoZSB0cmlja3kgZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYyBwcm9ibGVtcywKICAgICAgICAgICAgICAgIC8vIGUuZy4gc29tZXRpbWVzIHRoZSBkYXRlIG1heSBiZSBhIGZldyBtaWxsaXNlY29uZHMgZWFybGllcgogICAgICAgICAgICAgICAgLy8gdGhhbiB0aGUgbWlkbmlnaHQgZHVlIHRvIHByZWNpc2lvbiBwcm9ibGVtcyBpbiBub1VpU2xpZGVyCiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2RhdGUnID8gdCArIDM2MDAwMDAgOiB0OwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgaWYgKGluQXJyYXkodHlwZSwgWydkYXRlJywgJ3RpbWUnXSkpIHsKICAgICAgICAgICAgICAgIHZbMF0gPSBzdHJUaW1lKHZbMF0pOwogICAgICAgICAgICAgICAgdlsxXSA9IHN0clRpbWUodlsxXSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh2WzBdICE9IHNsaWRlcl9taW4oKSkgdlswXSAqPSBzY2FsZTsKICAgICAgICAgICAgICBpZiAodlsxXSAhPSBzbGlkZXJfbWF4KCkpIHZbMV0gKj0gc2NhbGU7CiAgICAgICAgICAgICAgZmlsdGVyLnZhbCh2KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICB2YXIgZm9ybWF0RGF0ZSA9IGZ1bmN0aW9uKGQsIGlzb0ZtdCkgewogICAgICAgICAgICBkID0gc2NhbGVCYWNrKGQsIHNjYWxlKTsKICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSByZXR1cm4gZDsKICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdpbnRlZ2VyJykgcmV0dXJuIHBhcnNlSW50KGQpOwogICAgICAgICAgICB2YXIgeCA9IG5ldyBEYXRlKCtkKTsKICAgICAgICAgICAgdmFyIGZtdCA9ICgnZmlsdGVyRGF0ZUZtdCcgaW4gZGF0YSkgPyBkYXRhLmZpbHRlckRhdGVGbXRbaV0gOiB1bmRlZmluZWQ7CiAgICAgICAgICAgIGlmIChmbXQgIT09IHVuZGVmaW5lZCAmJiBpc29GbXQgPT09IGZhbHNlKSByZXR1cm4geFtmbXQubWV0aG9kXS5hcHBseSh4LCBmbXQucGFyYW1zKTsKICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkYXRlJykgewogICAgICAgICAgICAgIHZhciBwYWQwID0gZnVuY3Rpb24oeCkgewogICAgICAgICAgICAgICAgcmV0dXJuICgnMCcgKyB4KS5zdWJzdHIoLTIsIDIpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgcmV0dXJuIHguZ2V0VVRDRnVsbFllYXIoKSArICctJyArIHBhZDAoMSArIHguZ2V0VVRDTW9udGgoKSkKICAgICAgICAgICAgICAgICAgICAgICsgJy0nICsgcGFkMCh4LmdldFVUQ0RhdGUoKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmV0dXJuIHgudG9JU09TdHJpbmcoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIHZhciBvcHRzID0gdHlwZSA9PT0gJ2RhdGUnID8geyBzdGVwOiA2MCAqIDYwICogMTAwMCB9IDoKICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gJ2ludGVnZXInID8geyBzdGVwOiAxIH0gOiB7fTsKICAgICAgICAgIGZpbHRlciA9ICR4Lm5vVWlTbGlkZXIoJC5leHRlbmQoewogICAgICAgICAgICBzdGFydDogW3IxLCByMl0sCiAgICAgICAgICAgIHJhbmdlOiB7bWluOiByMSwgbWF4OiByMn0sCiAgICAgICAgICAgIGNvbm5lY3Q6IHRydWUKICAgICAgICAgIH0sIG9wdHMpKTsKICAgICAgICAgIGlmIChzY2FsZSA+IDEpIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIHQxID0gcjEsIHQyID0gcjI7CiAgICAgICAgICAgIHZhciB2YWwgPSBmaWx0ZXIudmFsKCk7CiAgICAgICAgICAgIHdoaWxlICh2YWxbMF0gPiByMSB8fCB2YWxbMV0gPCByMikgewogICAgICAgICAgICAgIGlmICh2YWxbMF0gPiByMSkgewogICAgICAgICAgICAgICAgdDEgLT0gdmFsWzBdIC0gcjE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh2YWxbMV0gPCByMikgewogICAgICAgICAgICAgICAgdDIgKz0gcjIgLSB2YWxbMV07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGZpbHRlciA9ICR4Lm5vVWlTbGlkZXIoJC5leHRlbmQoewogICAgICAgICAgICAgICAgc3RhcnQ6IFt0MSwgdDJdLAogICAgICAgICAgICAgICAgcmFuZ2U6IHttaW46IHQxLCBtYXg6IHQyfSwKICAgICAgICAgICAgICAgIGNvbm5lY3Q6IHRydWUKICAgICAgICAgICAgICB9LCBvcHRzKSwgdHJ1ZSk7CiAgICAgICAgICAgICAgdmFsID0gZmlsdGVyLnZhbCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHIxICA9IHQxOyByMiA9IHQyOwogICAgICAgICAgfSkoKTsKICAgICAgICAgIHZhciB1cGRhdGVTbGlkZXJUZXh0ID0gZnVuY3Rpb24odjEsIHYyKSB7CiAgICAgICAgICAgICRzcGFuMS50ZXh0KGZvcm1hdERhdGUodjEsIGZhbHNlKSk7ICRzcGFuMi50ZXh0KGZvcm1hdERhdGUodjIsIGZhbHNlKSk7CiAgICAgICAgICB9OwogICAgICAgICAgdXBkYXRlU2xpZGVyVGV4dChyMSwgcjIpOwogICAgICAgICAgdmFyIHVwZGF0ZVNsaWRlciA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgdmFyIHZhbCA9IGZpbHRlci52YWwoKTsKICAgICAgICAgICAgLy8gdHVybiBvZmYgZmlsdGVyIGlmIGluIGZ1bGwgcmFuZ2UKICAgICAgICAgICAgJHRkLmRhdGEoJ2ZpbHRlcicsIHZhbFswXSA+IHNsaWRlcl9taW4oKSB8fCB2YWxbMV0gPCBzbGlkZXJfbWF4KCkpOwogICAgICAgICAgICB2YXIgdjEgPSBmb3JtYXREYXRlKHZhbFswXSksIHYyID0gZm9ybWF0RGF0ZSh2YWxbMV0pLCBpdmFsOwogICAgICAgICAgICBpZiAoJHRkLmRhdGEoJ2ZpbHRlcicpKSB7CiAgICAgICAgICAgICAgaXZhbCA9IHYxICsgJyAuLi4gJyArIHYyOwogICAgICAgICAgICAgICRpbnB1dC5hdHRyKCd0aXRsZScsIGl2YWwpLnZhbChpdmFsKS50cmlnZ2VyKCdpbnB1dCcpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICRpbnB1dC5hdHRyKCd0aXRsZScsICcnKS52YWwoJycpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVwZGF0ZVNsaWRlclRleHQodmFsWzBdLCB2YWxbMV0pOwogICAgICAgICAgICBpZiAoZS50eXBlID09PSAnc2xpZGUnKSByZXR1cm47ICAvLyBubyBzZWFyY2hpbmcgd2hlbiBzbGlkaW5nIG9ubHkKICAgICAgICAgICAgaWYgKHNlcnZlcikgewogICAgICAgICAgICAgIHRhYmxlLmNvbHVtbihpKS5zZWFyY2goJHRkLmRhdGEoJ2ZpbHRlcicpID8gaXZhbCA6ICcnKS5kcmF3KCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhYmxlLmRyYXcoKTsKICAgICAgICAgIH07CiAgICAgICAgICBmaWx0ZXIub24oewogICAgICAgICAgICBzZXQ6IHVwZGF0ZVNsaWRlciwKICAgICAgICAgICAgc2xpZGU6IHVwZGF0ZVNsaWRlcgogICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAvLyBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIHdpbGwgYmUgaGFuZGxlZCBieSBSIChvciB3aGF0ZXZlciBzZXJ2ZXIKICAgICAgICAvLyBsYW5ndWFnZSB5b3UgdXNlKTsgdGhlIGZvbGxvd2luZyBjb2RlIGlzIG9ubHkgbmVlZGVkIGZvciBjbGllbnQtc2lkZQogICAgICAgIC8vIHByb2Nlc3NpbmcKICAgICAgICBpZiAoc2VydmVyKSB7CiAgICAgICAgICAvLyBpZiBhIHNlYXJjaCBzdHJpbmcgaGFzIGJlZW4gcHJlLXNldCwgc2VhcmNoIG5vdwogICAgICAgICAgaWYgKHNlYXJjaENvbCkgc2VhcmNoQ29sdW1uKGksIHNlYXJjaENvbCkuZHJhdygpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIGN1c3RvbUZpbHRlciA9IGZ1bmN0aW9uKHNldHRpbmdzLCBkYXRhLCBkYXRhSW5kZXgpIHsKICAgICAgICAgIC8vIHRoZXJlIGlzIG5vIHdheSB0byBhdHRhY2ggYSBzZWFyY2ggZnVuY3Rpb24gdG8gYSBzcGVjaWZpYyB0YWJsZSwKICAgICAgICAgIC8vIGFuZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBhIGdsb2JhbCBzZWFyY2ggZnVuY3Rpb24gaXMgbm90IGFwcGxpZWQgdG8KICAgICAgICAgIC8vIGFsbCB0YWJsZXMgKGkuZS4gYSByYW5nZSBmaWx0ZXIgaW4gYSBwcmV2aW91cyB0YWJsZSBzaG91bGQgbm90IGJlCiAgICAgICAgICAvLyBhcHBsaWVkIHRvIHRoZSBjdXJyZW50IHRhYmxlKTsgd2UgdXNlIHRoZSBzZXR0aW5ncyBvYmplY3QgdG8KICAgICAgICAgIC8vIGRldGVybWluZSBpZiB3ZSB3YW50IHRvIHBlcmZvcm0gc2VhcmNoaW5nIG9uIHRoZSBjdXJyZW50IHRhYmxlLAogICAgICAgICAgLy8gc2luY2Ugc2V0dGluZ3Muc1RhYmxlSWQgd2lsbCBiZSBkaWZmZXJlbnQgdG8gZGlmZmVyZW50IHRhYmxlcwogICAgICAgICAgaWYgKHRhYmxlLnNldHRpbmdzKClbMF0gIT09IHNldHRpbmdzKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgIC8vIG5vIGZpbHRlciBvbiB0aGlzIGNvbHVtbiBvciBubyBuZWVkIHRvIGZpbHRlciB0aGlzIGNvbHVtbgogICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICd1bmRlZmluZWQnIHx8ICEkdGQuZGF0YSgnZmlsdGVyJykpIHJldHVybiB0cnVlOwoKICAgICAgICAgIHZhciByID0gZmlsdGVyLnZhbCgpLCB2LCByMCwgcjE7CiAgICAgICAgICB2YXIgaV9kYXRhID0gZnVuY3Rpb24oaSkgewogICAgICAgICAgICBpZiAoIWNvbFJlb3JkZXJFbmFibGVkKCkpIHJldHVybiBpOwogICAgICAgICAgICB2YXIgb3JkZXIgPSB0YWJsZS5jb2xSZW9yZGVyLm9yZGVyKCksIGs7CiAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBvcmRlci5sZW5ndGg7ICsraykgaWYgKG9yZGVyW2tdID09PSBpKSByZXR1cm4gazsKICAgICAgICAgICAgcmV0dXJuIGk7IC8vIGluIHRoZW9yeSBpdCB3aWxsIG5ldmVyIGJlIGhlcmUuLi4KICAgICAgICAgIH0KICAgICAgICAgIHYgPSBkYXRhW2lfZGF0YShpKV07CiAgICAgICAgICBpZiAodHlwZSA9PT0gJ251bWJlcicgfHwgdHlwZSA9PT0gJ2ludGVnZXInKSB7CiAgICAgICAgICAgIHYgPSBwYXJzZUZsb2F0KHYpOwogICAgICAgICAgICAvLyBob3cgdG8gaGFuZGxlIE5hTj8gY3VycmVudGx5IGV4Y2x1ZGUgdGhlc2Ugcm93cwogICAgICAgICAgICBpZiAoaXNOYU4odikpIHJldHVybihmYWxzZSk7CiAgICAgICAgICAgIHIwID0gcGFyc2VGbG9hdChzY2FsZUJhY2soclswXSwgc2NhbGUpKQogICAgICAgICAgICByMSA9IHBhcnNlRmxvYXQoc2NhbGVCYWNrKHJbMV0sIHNjYWxlKSk7CiAgICAgICAgICAgIGlmICh2ID49IHIwICYmIHYgPD0gcjEpIHJldHVybiB0cnVlOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnZGF0ZScgfHwgdHlwZSA9PT0gJ3RpbWUnKSB7CiAgICAgICAgICAgIHYgPSBuZXcgRGF0ZSh2KTsKICAgICAgICAgICAgcjAgPSBuZXcgRGF0ZShyWzBdIC8gc2NhbGUpOyByMSA9IG5ldyBEYXRlKHJbMV0gLyBzY2FsZSk7CiAgICAgICAgICAgIGlmICh2ID49IHIwICYmIHYgPD0gcjEpIHJldHVybiB0cnVlOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnZmFjdG9yJykgewogICAgICAgICAgICBpZiAoci5sZW5ndGggPT09IDAgfHwgaW5BcnJheSh2LCByKSkgcmV0dXJuIHRydWU7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdsb2dpY2FsJykgewogICAgICAgICAgICBpZiAoci5sZW5ndGggPT09IDApIHJldHVybiB0cnVlOwogICAgICAgICAgICBpZiAoaW5BcnJheSh2ID09PSAnJyA/ICduYScgOiB2LCByKSkgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfTsKCiAgICAgICAgJC5mbi5kYXRhVGFibGUuZXh0LnNlYXJjaC5wdXNoKGN1c3RvbUZpbHRlcik7CgogICAgICAgIC8vIHNlYXJjaCBmb3IgdGhlIHByZXNldCBzZWFyY2ggc3RyaW5ncyBpZiBpdCBpcyBub24tZW1wdHkKICAgICAgICBpZiAoc2VhcmNoQ29sKSB7CiAgICAgICAgICBpZiAoaW5BcnJheSh0eXBlLCBbJ2ZhY3RvcicsICdsb2dpY2FsJ10pKSB7CiAgICAgICAgICAgIGZpbHRlclswXS5zZWxlY3RpemUuc2V0VmFsdWUoSlNPTi5wYXJzZShzZWFyY2hDb2wpKTsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NoYXJhY3RlcicpIHsKICAgICAgICAgICAgJGlucHV0LnRyaWdnZXIoJ2lucHV0Jyk7CiAgICAgICAgICB9IGVsc2UgaWYgKGluQXJyYXkodHlwZSwgWydudW1iZXInLCAnaW50ZWdlcicsICdkYXRlJywgJ3RpbWUnXSkpIHsKICAgICAgICAgICAgJGlucHV0LnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIH0pOwoKICAgIH0KCiAgICAvLyBoaWdobGlnaHQgc2VhcmNoIGtleXdvcmRzCiAgICB2YXIgaGlnaGxpZ2h0ID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBib2R5ID0gJCh0YWJsZS50YWJsZSgpLmJvZHkoKSk7CiAgICAgIC8vIHJlbW92aW5nIHRoZSBvbGQgaGlnaGxpZ2h0aW5nIGZpcnN0CiAgICAgIGJvZHkudW5oaWdobGlnaHQoKTsKCiAgICAgIC8vIGRvbid0IGhpZ2hsaWdodCB0aGUgIm5vdCBmb3VuZCIgcm93LCBzbyB3ZSBnZXQgdGhlIHJvd3MgdXNpbmcgdGhlIGFwaQogICAgICBpZiAodGFibGUucm93cyh7IGZpbHRlcjogJ2FwcGxpZWQnIH0pLmRhdGEoKS5sZW5ndGggPT09IDApIHJldHVybjsKICAgICAgLy8gaGlnaGxpZ2h0IGdsb2JhbCBzZWFyY2gga2V5d29yZHMKICAgICAgYm9keS5oaWdobGlnaHQoJC50cmltKHRhYmxlLnNlYXJjaCgpKS5zcGxpdCgvXHMrLykpOwogICAgICAvLyB0aGVuIGhpZ2hsaWdodCBrZXl3b3JkcyBmcm9tIGluZGl2aWR1YWwgY29sdW1uIGZpbHRlcnMKICAgICAgaWYgKGZpbHRlclJvdykgZmlsdGVyUm93LmVhY2goZnVuY3Rpb24oaSwgdGQpIHsKICAgICAgICB2YXIgJHRkID0gJCh0ZCksIHR5cGUgPSAkdGQuZGF0YSgndHlwZScpOwogICAgICAgIGlmICh0eXBlICE9PSAnY2hhcmFjdGVyJykgcmV0dXJuOwogICAgICAgIHZhciAkaW5wdXQgPSAkdGQuY2hpbGRyZW4oJ2RpdicpLmZpcnN0KCkuY2hpbGRyZW4oJ2lucHV0Jyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IHRhYmxlLmNvbHVtbihpKS5ub2RlcygpLnRvJCgpLAogICAgICAgICAgICB2YWwgPSAkLnRyaW0oJGlucHV0LnZhbCgpKTsKICAgICAgICBpZiAodHlwZSAhPT0gJ2NoYXJhY3RlcicgfHwgdmFsID09PSAnJykgcmV0dXJuOwogICAgICAgIGNvbHVtbi5oaWdobGlnaHQodmFsLnNwbGl0KC9ccysvKSk7CiAgICAgIH0pOwogICAgfTsKCiAgICBpZiAob3B0aW9ucy5zZWFyY2hIaWdobGlnaHQpIHsKICAgICAgdGFibGUKICAgICAgLm9uKCdkcmF3LmR0LmR0aCBjb2x1bW4tdmlzaWJpbGl0eS5kdC5kdGggY29sdW1uLXJlb3JkZXIuZHQuZHRoJywgaGlnaGxpZ2h0KQogICAgICAub24oJ2Rlc3Ryb3knLCBmdW5jdGlvbigpIHsKICAgICAgICAvLyByZW1vdmUgZXZlbnQgaGFuZGxlcgogICAgICAgIHRhYmxlLm9mZignZHJhdy5kdC5kdGggY29sdW1uLXZpc2liaWxpdHkuZHQuZHRoIGNvbHVtbi1yZW9yZGVyLmR0LmR0aCcpOwogICAgICB9KTsKCiAgICAgIC8vIFNldCB0aGUgb3B0aW9uIGZvciBlc2NhcGluZyByZWdleCBjaGFyYWN0ZXJzIGluIG91ciBzZWFyY2ggc3RyaW5nLiAgVGhpcyB3aWxsIGJlIHVzZWQKICAgICAgLy8gZm9yIGFsbCBmdXR1cmUgbWF0Y2hpbmcuCiAgICAgIGpRdWVyeS5mbi5oaWdobGlnaHQub3B0aW9ucy5lc2NhcGVSZWdleCA9ICghb3B0aW9ucy5zZWFyY2ggfHwgIW9wdGlvbnMuc2VhcmNoLnJlZ2V4KTsKCiAgICAgIC8vIGluaXRpYWwgaGlnaGxpZ2h0IGZvciBzdGF0ZSBzYXZlZCBjb25kaXRpb25zIGFuZCBpbml0aWFsIHN0YXRlcwogICAgICBoaWdobGlnaHQoKTsKICAgIH0KCiAgICAvLyBydW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIHRoZSB0YWJsZSBpbnN0YW5jZQogICAgaWYgKHR5cGVvZiBkYXRhLmNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSBkYXRhLmNhbGxiYWNrKHRhYmxlKTsKCiAgICAvLyBkb3VibGUgY2xpY2sgdG8gZWRpdCB0aGUgY2VsbCwgcm93LCBjb2x1bW4sIG9yIGFsbCBjZWxscwogICAgaWYgKGRhdGEuZWRpdGFibGUpIHRhYmxlLm9uKCdkYmxjbGljay5kdCcsICd0Ym9keSB0ZCcsIGZ1bmN0aW9uKGUpIHsKICAgICAgLy8gb25seSBicmluZyB1cCB0aGUgZWRpdG9yIHdoZW4gdGhlIGNlbGwgaXRzZWxmIGlzIGRiY2xpY2tlZCwgYW5kIGlnbm9yZQogICAgICAvLyBvdGhlciBkYmNsaWNrIGV2ZW50cyBidWJibGVkIHVwIChlLmcuIGZyb20gdGhlIDxpbnB1dD4pCiAgICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcykgcmV0dXJuOwogICAgICB2YXIgdGFyZ2V0ID0gW10sIGltbWVkaWF0ZSA9IGZhbHNlOwogICAgICBzd2l0Y2ggKGRhdGEuZWRpdGFibGUudGFyZ2V0KSB7CiAgICAgICAgY2FzZSAnY2VsbCc6CiAgICAgICAgICB0YXJnZXQgPSBbdGhpc107CiAgICAgICAgICBpbW1lZGlhdGUgPSB0cnVlOyAgLy8gZWRpdCB3aWxsIHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdyb3cnOgogICAgICAgICAgdGFyZ2V0ID0gdGFibGUuY2VsbHModGFibGUuY2VsbCh0aGlzKS5pbmRleCgpLnJvdywgJyonKS5ub2RlcygpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnY29sdW1uJzoKICAgICAgICAgIHRhcmdldCA9IHRhYmxlLmNlbGxzKCcqJywgdGFibGUuY2VsbCh0aGlzKS5pbmRleCgpLmNvbHVtbikubm9kZXMoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2FsbCc6CiAgICAgICAgICB0YXJnZXQgPSB0YWJsZS5jZWxscygpLm5vZGVzKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgJ1RoZSBlZGl0YWJsZSBwYXJhbWV0ZXIgbXVzdCBiZSAiY2VsbCIsICJyb3ciLCAiY29sdW1uIiwgb3IgImFsbCInOwogICAgICB9CiAgICAgIHZhciBkaXNhYmxlQ29scyA9IGRhdGEuZWRpdGFibGUuZGlzYWJsZSA/IGRhdGEuZWRpdGFibGUuZGlzYWJsZS5jb2x1bW5zIDogbnVsbDsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXQubGVuZ3RoOyBpKyspIHsKICAgICAgICAoZnVuY3Rpb24oY2VsbCwgY3VycmVudCkgewogICAgICAgICAgdmFyICRjZWxsID0gJChjZWxsKSwgaHRtbCA9ICRjZWxsLmh0bWwoKTsKICAgICAgICAgIHZhciBfY2VsbCA9IHRhYmxlLmNlbGwoY2VsbCksIHZhbHVlID0gX2NlbGwuZGF0YSgpOwogICAgICAgICAgdmFyICRpbnB1dCA9ICQoJzxpbnB1dCB0eXBlPSJ0ZXh0Ij4nKSwgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHsKICAgICAgICAgICAgJGNlbGwuZGF0YSgnaW5wdXQnLCAkaW5wdXQpLmRhdGEoJ2h0bWwnLCBodG1sKTsKICAgICAgICAgICAgJGlucHV0LmF0dHIoJ3RpdGxlJywgJ0hpdCBDdHJsK0VudGVyIHRvIGZpbmlzaCBlZGl0aW5nLCBvciBFc2MgdG8gY2FuY2VsJyk7CiAgICAgICAgICB9CiAgICAgICAgICAkaW5wdXQudmFsKHZhbHVlKTsKICAgICAgICAgIGlmIChpbkFycmF5KF9jZWxsLmluZGV4KCkuY29sdW1uLCBkaXNhYmxlQ29scykpIHsKICAgICAgICAgICAgJGlucHV0LmF0dHIoJ3JlYWRvbmx5JywgJycpLmNzcygnZmlsdGVyJywgJ2ludmVydCgyNSUpJyk7CiAgICAgICAgICB9CiAgICAgICAgICAkY2VsbC5lbXB0eSgpLmFwcGVuZCgkaW5wdXQpOwogICAgICAgICAgaWYgKGNlbGwgPT09IGN1cnJlbnQpICRpbnB1dC5mb2N1cygpOwogICAgICAgICAgJGlucHV0LmNzcygnd2lkdGgnLCAnMTAwJScpOwoKICAgICAgICAgIGlmIChpbW1lZGlhdGUpICRpbnB1dC5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICB2YXIgdmFsdWVOZXcgPSAkaW5wdXQudmFsKCk7CiAgICAgICAgICAgIGlmICh2YWx1ZU5ldyAhPSB2YWx1ZSkgewogICAgICAgICAgICAgIF9jZWxsLmRhdGEodmFsdWVOZXcpOwogICAgICAgICAgICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHsKICAgICAgICAgICAgICAgIGNoYW5nZUlucHV0KCdjZWxsX2VkaXQnLCBbY2VsbEluZm8oY2VsbCldLCAnRFQuY2VsbEluZm8nLCBudWxsLCB7cHJpb3JpdHk6ICJldmVudCJ9KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy8gZm9yIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcsIHVzZXJzIGhhdmUgdG8gY2FsbCByZXBsYWNlRGF0YSgpIHRvIHVwZGF0ZSB0aGUgdGFibGUKICAgICAgICAgICAgICBpZiAoIXNlcnZlcikgdGFibGUuZHJhdyhmYWxzZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgJGNlbGwuaHRtbChodG1sKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaW5wdXQucmVtb3ZlKCk7CiAgICAgICAgICB9KS5vbignYmx1cicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoIWNoYW5nZWQpICRpbnB1dC50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgIH0pLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgLy8gaGl0IEVzY2FwZSB0byBjYW5jZWwgZWRpdGluZwogICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykgJGlucHV0LnRyaWdnZXIoJ2JsdXInKTsKICAgICAgICAgIH0pOwoKICAgICAgICAgIC8vIGJ1bGsgZWRpdCAocm93LCBjb2x1bW4sIG9yIGFsbCkKICAgICAgICAgIGlmICghaW1tZWRpYXRlKSAkaW5wdXQub24oJ2tleXVwJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgcmVtb3ZlSW5wdXQgPSBmdW5jdGlvbigkY2VsbCwgcmVzdG9yZSkgewogICAgICAgICAgICAgICRjZWxsLmRhdGEoJ2lucHV0JykucmVtb3ZlKCk7CiAgICAgICAgICAgICAgaWYgKHJlc3RvcmUpICRjZWxsLmh0bWwoJGNlbGwuZGF0YSgnaHRtbCcpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykgewogICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICByZW1vdmVJbnB1dCgkKHRhcmdldFtpXSksIHRydWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT09IDEzICYmIGUuY3RybEtleSkgewogICAgICAgICAgICAgIC8vIEN0cmwgKyBFbnRlcgogICAgICAgICAgICAgIHZhciBjZWxsLCAkY2VsbCwgX2NlbGwsIGNlbGxEYXRhID0gW107CiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGNlbGwgPSB0YXJnZXRbaV07ICRjZWxsID0gJChjZWxsKTsgX2NlbGwgPSB0YWJsZS5jZWxsKGNlbGwpOwogICAgICAgICAgICAgICAgX2NlbGwuZGF0YSgkY2VsbC5kYXRhKCdpbnB1dCcpLnZhbCgpKTsKICAgICAgICAgICAgICAgIEhUTUxXaWRnZXRzLnNoaW55TW9kZSAmJiBjZWxsRGF0YS5wdXNoKGNlbGxJbmZvKGNlbGwpKTsKICAgICAgICAgICAgICAgIHJlbW92ZUlucHV0KCRjZWxsLCBmYWxzZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHsKICAgICAgICAgICAgICAgIGNoYW5nZUlucHV0KCdjZWxsX2VkaXQnLCBjZWxsRGF0YSwgJ0RULmNlbGxJbmZvJywgbnVsbCwge3ByaW9yaXR5OiAiZXZlbnQifSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICghc2VydmVyKSB0YWJsZS5kcmF3KGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSkodGFyZ2V0W2ldLCB0aGlzKTsKICAgICAgfQogICAgfSk7CgogICAgLy8gaW50ZXJhY3Rpb24gd2l0aCBzaGlueQogICAgaWYgKCFIVE1MV2lkZ2V0cy5zaGlueU1vZGUgJiYgIWNyb3NzdGFsa09wdGlvbnMuZ3JvdXApIHJldHVybjsKCiAgICB2YXIgbWV0aG9kcyA9IHt9OwogICAgdmFyIHNoaW55RGF0YSA9IHt9OwoKICAgIG1ldGhvZHMudXBkYXRlQ2FwdGlvbiA9IGZ1bmN0aW9uKGNhcHRpb24pIHsKICAgICAgaWYgKCFjYXB0aW9uKSByZXR1cm47CiAgICAgICR0YWJsZS5jaGlsZHJlbignY2FwdGlvbicpLnJlcGxhY2VXaXRoKGNhcHRpb24pOwogICAgfQoKICAgIC8vIHJlZ2lzdGVyIGNsZWFyIGZ1bmN0aW9ucyB0byByZW1vdmUgaW5wdXQgdmFsdWVzIHdoZW4gdGhlIHRhYmxlIGlzIHJlbW92ZWQKICAgIGluc3RhbmNlLmNsZWFySW5wdXRzID0ge307CgogICAgdmFyIGNoYW5nZUlucHV0ID0gZnVuY3Rpb24oaWQsIHZhbHVlLCB0eXBlLCBub0Nyb3NzdGFsaywgb3B0cykgewogICAgICB2YXIgZXZlbnQgPSBpZDsKICAgICAgaWQgPSBlbC5pZCArICdfJyArIGlkOwogICAgICBpZiAodHlwZSkgaWQgPSBpZCArICc6JyArIHR5cGU7CiAgICAgIC8vIGRvIG5vdCB1cGRhdGUgaWYgdGhlIG5ldyB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBvbGQgdmFsdWUKICAgICAgaWYgKGV2ZW50ICE9PSAnY2VsbF9lZGl0JyAmJiAhL19jbGlja2VkJC8udGVzdChldmVudCkgJiYgc2hpbnlEYXRhLmhhc093blByb3BlcnR5KGlkKSAmJiBzaGlueURhdGFbaWRdID09PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpCiAgICAgICAgcmV0dXJuOwogICAgICBzaGlueURhdGFbaWRdID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpOwogICAgICBpZiAoSFRNTFdpZGdldHMuc2hpbnlNb2RlICYmIFNoaW55LnNldElucHV0VmFsdWUpIHsKICAgICAgICBTaGlueS5zZXRJbnB1dFZhbHVlKGlkLCB2YWx1ZSwgb3B0cyk7CiAgICAgICAgaWYgKCFpbnN0YW5jZS5jbGVhcklucHV0c1tpZF0pIGluc3RhbmNlLmNsZWFySW5wdXRzW2lkXSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgU2hpbnkuc2V0SW5wdXRWYWx1ZShpZCwgbnVsbCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBIQUNLCiAgICAgIGlmIChldmVudCA9PT0gInJvd3Nfc2VsZWN0ZWQiICYmICFub0Nyb3NzdGFsaykgewogICAgICAgIGlmIChjcm9zc3RhbGtPcHRpb25zLmdyb3VwKSB7CiAgICAgICAgICB2YXIga2V5cyA9IGNyb3NzdGFsa09wdGlvbnMua2V5OwogICAgICAgICAgdmFyIHNlbGVjdGVkS2V5cyA9IG51bGw7CiAgICAgICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgICAgc2VsZWN0ZWRLZXlzID0gW107CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAvLyBUaGUgdmFsdWUgYXJyYXkncyBjb250ZW50cyB1c2UgMS1iYXNlZCByb3cgbnVtYmVycywgc28gd2UgbXVzdAogICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gMC1iYXNlZCBiZWZvcmUgaW5kZXhpbmcgaW50byB0aGUga2V5cyBhcnJheS4KICAgICAgICAgICAgICBzZWxlY3RlZEtleXMucHVzaChrZXlzW3ZhbHVlW2ldIC0gMV0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpbnN0YW5jZS5jdHNlbGVjdEhhbmRsZS5zZXQoc2VsZWN0ZWRLZXlzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CgogICAgdmFyIGFkZE9uZSA9IGZ1bmN0aW9uKHgpIHsKICAgICAgcmV0dXJuIHgubWFwKGZ1bmN0aW9uKGkpIHsgcmV0dXJuIDEgKyBpOyB9KTsKICAgIH07CgogICAgdmFyIHVuaXF1ZSA9IGZ1bmN0aW9uKHgpIHsKICAgICAgdmFyIHV4ID0gW107CiAgICAgICQuZWFjaCh4LCBmdW5jdGlvbihpLCBlbCl7CiAgICAgICAgaWYgKCQuaW5BcnJheShlbCwgdXgpID09PSAtMSkgdXgucHVzaChlbCk7CiAgICAgIH0pOwogICAgICByZXR1cm4gdXg7CiAgICB9CgogICAgLy8gY2hhbmdlIHRoZSByb3cgaW5kZXggb2YgYSBjZWxsCiAgICB2YXIgdHdlYWtDZWxsSW5kZXggPSBmdW5jdGlvbihjZWxsKSB7CiAgICAgIHZhciBpbmZvID0gY2VsbC5pbmRleCgpOwogICAgICAvLyBzb21lIGNlbGwgbWF5IG5vdCBiZSB2YWxpZC4gZS5nLCAjNzU5CiAgICAgIC8vIHdoZW4gdXNpbmcgdGhlIFJvd0dyb3VwIGV4dGVuc2lvbiwgZGF0YXRhYmxlcyB3aWxsCiAgICAgIC8vIGdlbmVyYXRlIHRoZSByb3cgbGFiZWwgYW5kIHRoZSBjZWxscyBhcmUgbm90IHBhcnQgb2YKICAgICAgLy8gdGhlIGRhdGEgdGh1cyBjb250YWluIG5vIHJvdy9jb2wgaW5mbwogICAgICBpZiAoaW5mbyA9PT0gdW5kZWZpbmVkKQogICAgICAgIHJldHVybiB7cm93OiBudWxsLCBjb2w6IG51bGx9OwogICAgICBpZiAoc2VydmVyKSB7CiAgICAgICAgaW5mby5yb3cgPSBEVF9yb3dzX2N1cnJlbnRbaW5mby5yb3ddOwogICAgICB9IGVsc2UgewogICAgICAgIGluZm8ucm93ICs9IDE7CiAgICAgIH0KICAgICAgcmV0dXJuIHtyb3c6IGluZm8ucm93LCBjb2w6IGluZm8uY29sdW1ufTsKICAgIH0KCiAgICB2YXIgY2xlYW5TZWxlY3RlZFZhbHVlcyA9IGZ1bmN0aW9uKCkgewogICAgICBjaGFuZ2VJbnB1dCgncm93c19zZWxlY3RlZCcsIFtdKTsKICAgICAgY2hhbmdlSW5wdXQoJ2NvbHVtbnNfc2VsZWN0ZWQnLCBbXSk7CiAgICAgIGNoYW5nZUlucHV0KCdjZWxsc19zZWxlY3RlZCcsIHRyYW5zcG9zZUFycmF5MkQoW10pLCAnc2hpbnkubWF0cml4Jyk7CiAgICB9CiAgICAvLyAjODI4IHdlIHNob3VsZCBjbGVhbiB0aGUgc2VsZWN0aW9uIG9uIHRoZSBzZXJ2ZXItc2lkZSB3aGVuIHRoZSB0YWJsZSByZWxvYWRzCiAgICBjbGVhblNlbGVjdGVkVmFsdWVzKCk7CgogICAgLy8gYSBmbGFnIHRvIGluZGljYXRlcyBpZiBzZWxlY3QgZXh0ZW5zaW9uIGlzIGluaXRpYWxpemVkIG9yIG5vdAogICAgdmFyIGZsYWdTZWxlY3RFeHQgPSB0YWJsZS5zZXR0aW5ncygpWzBdLl9zZWxlY3QgIT09IHVuZGVmaW5lZDsKICAgIC8vIHRoZSBTZWxlY3QgZXh0ZW5zaW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gdGhlIGNsaWVudCBtb2RlIGFuZAogICAgLy8gd2hlbiB0aGUgc2VsZWN0aW9uLm1vZGUgaXMgc2V0IHRvIG5vbmUKICAgIGlmIChkYXRhLnNlbGVjdGlvbi5tb2RlID09PSAnbm9uZScgJiYgIXNlcnZlciAmJiBmbGFnU2VsZWN0RXh0KSB7CiAgICAgIHZhciB1cGRhdGVSb3dzU2VsZWN0ZWQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgcm93cyA9IHRhYmxlLnJvd3Moe3NlbGVjdGVkOiB0cnVlfSk7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gW107CiAgICAgICAgJC5lYWNoKHJvd3MuaW5kZXhlcygpLnRvQXJyYXkoKSwgZnVuY3Rpb24oaSwgdikgewogICAgICAgICAgc2VsZWN0ZWQucHVzaCh2ICsgMSk7CiAgICAgICAgfSk7CiAgICAgICAgY2hhbmdlSW5wdXQoJ3Jvd3Nfc2VsZWN0ZWQnLCBzZWxlY3RlZCk7CiAgICAgIH0KICAgICAgdmFyIHVwZGF0ZUNvbHNTZWxlY3RlZCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBjb2x1bW5zID0gdGFibGUuY29sdW1ucyh7c2VsZWN0ZWQ6IHRydWV9KTsKICAgICAgICBjaGFuZ2VJbnB1dCgnY29sdW1uc19zZWxlY3RlZCcsIGNvbHVtbnMuaW5kZXhlcygpLnRvQXJyYXkoKSk7CiAgICAgIH0KICAgICAgdmFyIHVwZGF0ZUNlbGxzU2VsZWN0ZWQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgY2VsbHMgPSB0YWJsZS5jZWxscyh7c2VsZWN0ZWQ6IHRydWV9KTsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBbXTsKICAgICAgICBjZWxscy5ldmVyeShmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciByb3cgPSB0aGlzLmluZGV4KCkucm93OwogICAgICAgICAgdmFyIGNvbCA9IHRoaXMuaW5kZXgoKS5jb2x1bW47CiAgICAgICAgICBzZWxlY3RlZCA9IHNlbGVjdGVkLmNvbmNhdChbW3JvdyArIDEsIGNvbF1dKTsKICAgICAgICB9KTsKICAgICAgICBjaGFuZ2VJbnB1dCgnY2VsbHNfc2VsZWN0ZWQnLCB0cmFuc3Bvc2VBcnJheTJEKHNlbGVjdGVkKSwgJ3NoaW55Lm1hdHJpeCcpOwogICAgICB9CiAgICAgIHRhYmxlLm9uKCdzZWxlY3QgZGVzZWxlY3QnLCBmdW5jdGlvbihlLCBkdCwgdHlwZSwgaW5kZXhlcykgewogICAgICAgIHVwZGF0ZVJvd3NTZWxlY3RlZCgpOwogICAgICAgIHVwZGF0ZUNvbHNTZWxlY3RlZCgpOwogICAgICAgIHVwZGF0ZUNlbGxzU2VsZWN0ZWQoKTsKICAgICAgfSkKICAgIH0KCiAgICB2YXIgc2VsTW9kZSA9IGRhdGEuc2VsZWN0aW9uLm1vZGUsIHNlbFRhcmdldCA9IGRhdGEuc2VsZWN0aW9uLnRhcmdldDsKICAgIHZhciBzZWxEaXNhYmxlID0gZGF0YS5zZWxlY3Rpb24uc2VsZWN0YWJsZSA9PT0gZmFsc2U7CiAgICBpZiAoaW5BcnJheShzZWxNb2RlLCBbJ3NpbmdsZScsICdtdWx0aXBsZSddKSkgewogICAgICB2YXIgc2VsQ2xhc3MgPSBpbkFycmF5KGRhdGEuc3R5bGUsIFsnYm9vdHN0cmFwJywgJ2Jvb3RzdHJhcDQnXSkgPyAnYWN0aXZlJyA6ICdzZWxlY3RlZCc7CiAgICAgIC8vIHNlbGVjdGVkMTogcm93IGluZGljZXM7IHNlbGVjdGVkMjogY29sdW1uIGluZGljZXMKICAgICAgdmFyIGluaXRTZWwgPSBmdW5jdGlvbih4KSB7CiAgICAgICAgaWYgKHggPT09IG51bGwgfHwgdHlwZW9mIHggPT09ICdib29sZWFuJyB8fCBzZWxUYXJnZXQgPT09ICdjZWxsJykgewogICAgICAgICAgcmV0dXJuIHtyb3dzOiBbXSwgY29sczogW119OwogICAgICAgIH0gZWxzZSBpZiAoc2VsVGFyZ2V0ID09PSAncm93JykgewogICAgICAgICAgcmV0dXJuIHtyb3dzOiAkLm1ha2VBcnJheSh4KSwgY29sczogW119OwogICAgICAgIH0gZWxzZSBpZiAoc2VsVGFyZ2V0ID09PSAnY29sdW1uJykgewogICAgICAgICAgcmV0dXJuIHtyb3dzOiBbXSwgY29sczogJC5tYWtlQXJyYXkoeCl9OwogICAgICAgIH0gZWxzZSBpZiAoc2VsVGFyZ2V0ID09PSAncm93K2NvbHVtbicpIHsKICAgICAgICAgIHJldHVybiB7cm93czogJC5tYWtlQXJyYXkoeC5yb3dzKSwgY29sczogJC5tYWtlQXJyYXkoeC5jb2xzKX07CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBzZWxlY3RlZCA9IGRhdGEuc2VsZWN0aW9uLnNlbGVjdGVkOwogICAgICB2YXIgc2VsZWN0ZWQxID0gaW5pdFNlbChzZWxlY3RlZCkucm93cywgc2VsZWN0ZWQyID0gaW5pdFNlbChzZWxlY3RlZCkuY29sczsKICAgICAgLy8gc2VsZWN0YWJsZSBzaG91bGQgY29udGFpbiBlaXRoZXIgYWxsIHBvc2l0aXZlIG9yIGFsbCBub24tcG9zaXRpdmUgdmFsdWVzLCBub3QgYm90aAogICAgICAvLyBwb3NpdGl2ZSB2YWx1ZXMgaW5kaWNhdGUgInNlbGVjdGFibGUiIHdoaWxlIG5vbi1wb3NpdGl2ZSB2YWx1ZXMgbWVhbnMgIm5vbnNlbGVjdGFibGUiCiAgICAgIC8vIHRoZSBhc3NlcnRpb24gaXMgcGVyZm9ybWVkIG9uIFIgc2lkZS4gKG9ubHkgY29sdW1uIGluZGljaWRlcyBjb3VsZCBiZSB6ZXJvIHdoaWNoIGluZGljYXRlcwogICAgICAvLyB0aGUgcm93IG5hbWUpCiAgICAgIHZhciBzZWxlY3RhYmxlID0gZGF0YS5zZWxlY3Rpb24uc2VsZWN0YWJsZTsKICAgICAgdmFyIHNlbGVjdGFibGUxID0gaW5pdFNlbChzZWxlY3RhYmxlKS5yb3dzLCBzZWxlY3RhYmxlMiA9IGluaXRTZWwoc2VsZWN0YWJsZSkuY29sczsKCiAgICAgIC8vIEFmdGVyIHVzZXJzIHJlb3JkZXIgdGhlIHJvd3Mgb3IgZmlsdGVyIHRoZSB0YWJsZSwgd2UgY2Fubm90IHVzZSB0aGUgdGFibGUgaW5kZXgKICAgICAgLy8gZGlyZWN0bHkuIEluc3RlYWQsIHdlIG5lZWQgdGhpcyBmdW5jdGlvbiB0byBmaW5kIG91dCB0aGUgcm93cyBiZXR3ZWVuIHRoZSB0d28gY2xpY2tzLgogICAgICAvLyBJZiB1c2VyIGZpbHRlciB0aGUgdGFibGUgYWdhaW4gYmV0d2VlbiB0aGUgc3RhcnQgY2xpY2sgYW5kIHRoZSBlbmQgY2xpY2ssIHRoZSBiZWhhdmlvcgogICAgICAvLyB3b3VsZCBiZSB1bmRlZmluZWQsIGJ1dCBpdCBzaG91bGQgbm90IGJlIGEgcHJvYmxlbS4KICAgICAgdmFyIHNoaWZ0U2VsUm93c0luZGV4ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkgewogICAgICAgIHZhciBpbmRleGVzID0gc2VydmVyID8gRFRfcm93c19hbGwgOiB0YWJsZS5yb3dzKHsgc2VhcmNoOiAnYXBwbGllZCcgfSkuaW5kZXhlcygpLnRvQXJyYXkoKTsKICAgICAgICBzdGFydCA9IGluZGV4ZXMuaW5kZXhPZihzdGFydCk7IGVuZCA9IGluZGV4ZXMuaW5kZXhPZihlbmQpOwogICAgICAgIC8vIGlmIHN0YXJ0IGlzIGxhcmdlciB0aGFuIGVuZCwgd2UgbmVlZCB0byBzd2FwCiAgICAgICAgaWYgKHN0YXJ0ID4gZW5kKSB7CiAgICAgICAgICB2YXIgdG1wID0gZW5kOyBlbmQgPSBzdGFydDsgc3RhcnQgPSB0bXA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpbmRleGVzLnNsaWNlKHN0YXJ0LCBlbmQgKyAxKTsKICAgICAgfQoKICAgICAgdmFyIHNlcnZlclJvd0luZGV4ID0gZnVuY3Rpb24oY2xpZW50Um93SW5kZXgpIHsKICAgICAgICByZXR1cm4gc2VydmVyID8gRFRfcm93c19jdXJyZW50W2NsaWVudFJvd0luZGV4XSA6IGNsaWVudFJvd0luZGV4ICsgMTsKICAgICAgfQoKICAgICAgLy8gcm93LCBjb2x1bW4sIG9yIGNlbGwgc2VsZWN0aW9uCiAgICAgIHZhciBsYXN0Q2xpY2tlZFJvdzsKICAgICAgaWYgKGluQXJyYXkoc2VsVGFyZ2V0LCBbJ3JvdycsICdyb3crY29sdW1uJ10pKSB7CiAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHNlbGVjdGVkIHJvd3MuIEl0IHdpbGwgYWxzbwogICAgICAgIC8vIHVwZGF0ZSB0aGUgc2VsZWN0ZWQxJ3MgdmFsdWUgYmFzZWQgb24gdGhlIGN1cnJlbnQgcm93IHNlbGVjdGlvbiBzdGF0ZQogICAgICAgIC8vIE5vdGUgd2UgY2FuJ3QgcHV0IHRoaXMgZnVuY3Rpb24gaW5zaWRlIHNlbGVjdFJvd3MoKSBkaXJlY3RseSwKICAgICAgICAvLyB0aGUgcmVhc29uIGlzIG1ldGhvZC5zZWxlY3RSb3dzKCkgd2lsbCBvdmVycmlkZSBzZWxlY3RlZDEncyB2YWx1ZSBidXQgdGhpcwogICAgICAgIC8vIGZ1bmN0aW9uIHdpbGwgYWRkIHJvd3MgdG8gc2VsZWN0ZWQxIChrZWVwIHRoZSBleGlzdGluZyBzZWxlY3Rpb24pLCB3aGljaCBpcwogICAgICAgIC8vIGluY29uc2lzdGVudCB3aXRoIGNvbHVtbiBhbmQgY2VsbCBzZWxlY3Rpb24uCiAgICAgICAgdmFyIHNlbGVjdGVkUm93cyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIHJvd3MgPSB0YWJsZS5yb3dzKCcuJyArIHNlbENsYXNzKTsKICAgICAgICAgIHZhciBpZHggPSByb3dzLmluZGV4ZXMoKS50b0FycmF5KCk7CiAgICAgICAgICBpZiAoIXNlcnZlcikgewogICAgICAgICAgICBzZWxlY3RlZDEgPSBhZGRPbmUoaWR4KTsKICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkMTsKICAgICAgICAgIH0KICAgICAgICAgIGlkeCA9IGlkeC5tYXAoZnVuY3Rpb24oaSkgewogICAgICAgICAgICByZXR1cm4gRFRfcm93c19jdXJyZW50W2ldOwogICAgICAgICAgfSk7CiAgICAgICAgICBzZWxlY3RlZDEgPSBzZWxNb2RlID09PSAnbXVsdGlwbGUnID8gdW5pcXVlKHNlbGVjdGVkMS5jb25jYXQoaWR4KSkgOiBpZHg7CiAgICAgICAgICByZXR1cm4gc2VsZWN0ZWQxOwogICAgICAgIH0KICAgICAgICAvLyBDaGFuZ2Ugc2VsZWN0ZWQxJ3MgdmFsdWUgYmFzZWQgb24gc2VsZWN0YWJsZTEsIHRoZW4gcmVmcmVzaCB0aGUgcm93IHN0YXRlCiAgICAgICAgdmFyIG9ubHlLZWVwU2VsZWN0YWJsZVJvd3MgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIGlmIChzZWxEaXNhYmxlKSB7IC8vIHVzZXJzIGNhbid0IHNlbGVjdDsgdXNlZnVsIHdoZW4gb25seSB3YW50IGJhY2tlbmQgc2VsZWN0CiAgICAgICAgICAgIHNlbGVjdGVkMSA9IFtdOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc2VsZWN0YWJsZTEubGVuZ3RoID09PSAwKSByZXR1cm47CiAgICAgICAgICB2YXIgbm9uc2VsZWN0YWJsZSA9IHNlbGVjdGFibGUxWzBdIDw9IDA7CiAgICAgICAgICBpZiAobm9uc2VsZWN0YWJsZSkgewogICAgICAgICAgICAvLyBzaG91bGQgbWFrZSBzZWxlY3RhYmxlMSBwb3NpdGl2ZQogICAgICAgICAgICBzZWxlY3RlZDEgPSAkKHNlbGVjdGVkMSkubm90KHNlbGVjdGFibGUxLm1hcChmdW5jdGlvbihpKSB7IHJldHVybiAtaTsgfSkpLmdldCgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VsZWN0ZWQxID0gJChzZWxlY3RlZDEpLmZpbHRlcihzZWxlY3RhYmxlMSkuZ2V0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIENoYW5nZSBzZWxlY3RlZDEncyB2YWx1ZSBiYXNlZCBvbiBzZWxlY3RhYmxlMSwgdGhlbgogICAgICAgIC8vIHJlZnJlc2ggdGhlIHJvdyBzZWxlY3Rpb24gc3RhdGUgYWNjb3JkaW5nIHRvIHZhbHVlcyBpbiBzZWxlY3RlZDEKICAgICAgICB2YXIgc2VsZWN0Um93cyA9IGZ1bmN0aW9uKGlnbm9yZVNlbGVjdGFibGUpIHsKICAgICAgICAgIGlmICghaWdub3JlU2VsZWN0YWJsZSkgb25seUtlZXBTZWxlY3RhYmxlUm93cygpOwogICAgICAgICAgdGFibGUuJCgndHIuJyArIHNlbENsYXNzKS5yZW1vdmVDbGFzcyhzZWxDbGFzcyk7CiAgICAgICAgICBpZiAoc2VsZWN0ZWQxLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwogICAgICAgICAgaWYgKHNlcnZlcikgewogICAgICAgICAgICB0YWJsZS5yb3dzKHtwYWdlOiAnY3VycmVudCd9KS5ldmVyeShmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBpZiAoaW5BcnJheShEVF9yb3dzX2N1cnJlbnRbdGhpcy5pbmRleCgpXSwgc2VsZWN0ZWQxKSkgewogICAgICAgICAgICAgICAgJCh0aGlzLm5vZGUoKSkuYWRkQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgc2VsZWN0ZWQwID0gc2VsZWN0ZWQxLm1hcChmdW5jdGlvbihpKSB7IHJldHVybiBpIC0gMTsgfSk7CiAgICAgICAgICAgICQodGFibGUucm93cyhzZWxlY3RlZDApLm5vZGVzKCkpLmFkZENsYXNzKHNlbENsYXNzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGFibGUub24oJ21vdXNlZG93bi5kdCcsICd0Ym9keSB0cicsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyksIHRoaXNSb3cgPSB0YWJsZS5yb3codGhpcyk7CiAgICAgICAgICBpZiAoc2VsTW9kZSA9PT0gJ211bHRpcGxlJykgewogICAgICAgICAgICBpZiAoZS5zaGlmdEtleSAmJiBsYXN0Q2xpY2tlZFJvdyAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgLy8gc2VsZWN0IG9yIGRlLXNlbGVjdCBkZXBlbmRzIG9uIHRoZSBsYXN0IGNsaWNrZWQgcm93J3Mgc3RhdHVzCiAgICAgICAgICAgICAgdmFyIGZsYWdTZWwgPSAhJHRoaXMuaGFzQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgICAgIHZhciBjcnRDbGlja2VkUm93ID0gc2VydmVyUm93SW5kZXgodGhpc1Jvdy5pbmRleCgpKTsKICAgICAgICAgICAgICBpZiAoc2VydmVyKSB7CiAgICAgICAgICAgICAgICB2YXIgcm93c0luZGV4ID0gc2hpZnRTZWxSb3dzSW5kZXgobGFzdENsaWNrZWRSb3csIGNydENsaWNrZWRSb3cpOwogICAgICAgICAgICAgICAgLy8gdXBkYXRlIGN1cnJlbnQgcGFnZSdzIHNlbENsYXNzCiAgICAgICAgICAgICAgICByb3dzSW5kZXgubWFwKGZ1bmN0aW9uKGkpIHsKICAgICAgICAgICAgICAgICAgdmFyIHJvd0luZGV4ID0gRFRfcm93c19jdXJyZW50LmluZGV4T2YoaSk7CiAgICAgICAgICAgICAgICAgIGlmIChyb3dJbmRleCA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IHRhYmxlLnJvdyhyb3dJbmRleCkubm9kZXMoKS50byQoKTsKICAgICAgICAgICAgICAgICAgICB2YXIgZmxhZ1Jvd1NlbCA9ICFyb3cuaGFzQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgICAgICAgICAgIGlmIChmbGFnU2VsID09PSBmbGFnUm93U2VsKSByb3cudG9nZ2xlQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBzZWxlY3RlZDEKICAgICAgICAgICAgICAgIGlmIChmbGFnU2VsKSB7CiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkMSA9IHVuaXF1ZShzZWxlY3RlZDEuY29uY2F0KHJvd3NJbmRleCkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQxID0gc2VsZWN0ZWQxLmZpbHRlcihmdW5jdGlvbihpbmRleCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAhaW5BcnJheShpbmRleCwgcm93c0luZGV4KTsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIGpzIHN0YXJ0cyBmcm9tIDAKICAgICAgICAgICAgICAgIHNoaWZ0U2VsUm93c0luZGV4KGxhc3RDbGlja2VkUm93IC0gMSwgY3J0Q2xpY2tlZFJvdyAtIDEpLm1hcChmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgICB2YXIgcm93ID0gdGFibGUucm93KHZhbHVlKS5ub2RlcygpLnRvJCgpOwogICAgICAgICAgICAgICAgICB2YXIgZmxhZ1Jvd1NlbCA9ICFyb3cuaGFzQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgICAgICAgICBpZiAoZmxhZ1NlbCA9PT0gZmxhZ1Jvd1NlbCkgcm93LnRvZ2dsZUNsYXNzKHNlbENsYXNzKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgJHRoaXMudG9nZ2xlQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoJHRoaXMuaGFzQ2xhc3Moc2VsQ2xhc3MpKSB7CiAgICAgICAgICAgICAgJHRoaXMucmVtb3ZlQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRhYmxlLiQoJ3RyLicgKyBzZWxDbGFzcykucmVtb3ZlQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgICAgICR0aGlzLmFkZENsYXNzKHNlbENsYXNzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHNlcnZlciAmJiAhJHRoaXMuaGFzQ2xhc3Moc2VsQ2xhc3MpKSB7CiAgICAgICAgICAgIHZhciBpZCA9IERUX3Jvd3NfY3VycmVudFt0aGlzUm93LmluZGV4KCldOwogICAgICAgICAgICAvLyByZW1vdmUgaWQgZnJvbSBzZWxlY3RlZDEgc2luY2UgaXRzIGNsYXNzIC5zZWxlY3RlZCBoYXMgYmVlbiByZW1vdmVkCiAgICAgICAgICAgIGlmIChpbkFycmF5KGlkLCBzZWxlY3RlZDEpKSBzZWxlY3RlZDEuc3BsaWNlKCQuaW5BcnJheShpZCwgc2VsZWN0ZWQxKSwgMSk7CiAgICAgICAgICB9CiAgICAgICAgICBzZWxlY3RlZFJvd3MoKTsgLy8gdXBkYXRlIHNlbGVjdGVkMSdzIHZhbHVlIGJhc2VkIG9uIHNlbENsYXNzCiAgICAgICAgICBzZWxlY3RSb3dzKGZhbHNlKTsgLy8gb25seSBrZWVwIHRoZSBzZWxlY3RhYmxlIHJvd3MKICAgICAgICAgIGNoYW5nZUlucHV0KCdyb3dzX3NlbGVjdGVkJywgc2VsZWN0ZWQxKTsKICAgICAgICAgIGNoYW5nZUlucHV0KCdyb3dfbGFzdF9jbGlja2VkJywgc2VydmVyUm93SW5kZXgodGhpc1Jvdy5pbmRleCgpKSwgbnVsbCwgbnVsbCwge3ByaW9yaXR5OiAnZXZlbnQnfSk7CiAgICAgICAgICBsYXN0Q2xpY2tlZFJvdyA9IHNlcnZlclJvd0luZGV4KHRoaXNSb3cuaW5kZXgoKSk7CiAgICAgICAgfSk7CiAgICAgICAgc2VsZWN0Um93cyhmYWxzZSk7ICAvLyBpbiBjYXNlIHVzZXJzIGhhdmUgc3BlY2lmaWVkIHByZS1zZWxlY3RlZCByb3dzCiAgICAgICAgLy8gcmVzdG9yZSBzZWxlY3RlZCByb3dzIGFmdGVyIHRoZSB0YWJsZSBpcyByZWRyYXduIChlLmcuIHNvcnQvc2VhcmNoL3BhZ2UpOwogICAgICAgIC8vIGNsaWVudC1zaWRlIHRhYmxlcyB3aWxsIHByZXNlcnZlIHRoZSBzZWxlY3Rpb25zIGF1dG9tYXRpY2FsbHk7IGZvcgogICAgICAgIC8vIHNlcnZlci1zaWRlIHRhYmxlcywgd2UgaGF2ZSB0byAqcmVhbCogcm93IGluZGljZXMgYXJlIGluIGBzZWxlY3RlZDFgCiAgICAgICAgY2hhbmdlSW5wdXQoJ3Jvd3Nfc2VsZWN0ZWQnLCBzZWxlY3RlZDEpOwogICAgICAgIGlmIChzZXJ2ZXIpIHRhYmxlLm9uKCdkcmF3LmR0JywgZnVuY3Rpb24oZSkgeyBzZWxlY3RSb3dzKGZhbHNlKTsgfSk7CiAgICAgICAgbWV0aG9kcy5zZWxlY3RSb3dzID0gZnVuY3Rpb24oc2VsZWN0ZWQsIGlnbm9yZVNlbGVjdGFibGUpIHsKICAgICAgICAgIHNlbGVjdGVkMSA9ICQubWFrZUFycmF5KHNlbGVjdGVkKTsKICAgICAgICAgIHNlbGVjdFJvd3MoaWdub3JlU2VsZWN0YWJsZSk7CiAgICAgICAgICBjaGFuZ2VJbnB1dCgncm93c19zZWxlY3RlZCcsIHNlbGVjdGVkMSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoaW5BcnJheShzZWxUYXJnZXQsIFsnY29sdW1uJywgJ3Jvdytjb2x1bW4nXSkpIHsKICAgICAgICBpZiAoc2VsVGFyZ2V0ID09PSAncm93K2NvbHVtbicpIHsKICAgICAgICAgICQodGFibGUuY29sdW1ucygpLmZvb3RlcigpKS5jc3MoJ2N1cnNvcicsICdwb2ludGVyJyk7CiAgICAgICAgfQogICAgICAgIC8vIHVwZGF0ZSBzZWxlY3RlZDIncyB2YWx1ZSBiYXNlZCBvbiBzZWxlY3RhYmxlMgogICAgICAgIHZhciBvbmx5S2VlcFNlbGVjdGFibGVDb2xzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICBpZiAoc2VsRGlzYWJsZSkgeyAvLyB1c2VycyBjYW4ndCBzZWxlY3Q7IHVzZWZ1bCB3aGVuIG9ubHkgd2FudCBiYWNrZW5kIHNlbGVjdAogICAgICAgICAgICBzZWxlY3RlZDIgPSBbXTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHNlbGVjdGFibGUyLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwogICAgICAgICAgdmFyIG5vbnNlbGVjdGFibGUgPSBzZWxlY3RhYmxlMlswXSA8PSAwOwogICAgICAgICAgaWYgKG5vbnNlbGVjdGFibGUpIHsKICAgICAgICAgICAgLy8gbmVlZCB0byBtYWtlIHNlbGVjdGFibGUyIHBvc2l0aXZlCiAgICAgICAgICAgIHNlbGVjdGVkMiA9ICQoc2VsZWN0ZWQyKS5ub3Qoc2VsZWN0YWJsZTIubWFwKGZ1bmN0aW9uKGkpIHsgcmV0dXJuIC1pOyB9KSkuZ2V0KCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZWxlY3RlZDIgPSAkKHNlbGVjdGVkMikuZmlsdGVyKHNlbGVjdGFibGUyKS5nZXQoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gdXBkYXRlIHNlbGVjdGVkMiBhbmQgdGhlbgogICAgICAgIC8vIHJlZnJlc2ggdGhlIGNvbCBzZWxlY3Rpb24gc3RhdGUgYWNjb3JkaW5nIHRvIHZhbHVlcyBpbiBzZWxlY3RlZDIKICAgICAgICB2YXIgc2VsZWN0Q29scyA9IGZ1bmN0aW9uKGlnbm9yZVNlbGVjdGFibGUpIHsKICAgICAgICAgIGlmICghaWdub3JlU2VsZWN0YWJsZSkgb25seUtlZXBTZWxlY3RhYmxlQ29scygpOwogICAgICAgICAgLy8gaWYgc2VsZWN0ZWQyIGlzIG5vdCBhIHZhbGlkZSBpbmRleCAoZS5nLiwgbGFyZ2VyIHRoYW4gdGhlIGNvbHVtbiBudW1iZXIpCiAgICAgICAgICAvLyB0YWJsZS5jb2x1bW5zKHNlbGVjdGVkMikgd2lsbCBmYWlsIGFuZCByZXN1bHQgaW4gYSBibGFuayB0YWJsZQogICAgICAgICAgLy8gdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgdGFibGUucm93cygpLCB3aGVyZSB0aGUgb3V0LW9mLXJhbmdlIGluZGV4ZXMKICAgICAgICAgIC8vIGRvZXNuJ3QgYWZmZWN0IGF0IGFsbAogICAgICAgICAgc2VsZWN0ZWQyID0gJChzZWxlY3RlZDIpLmZpbHRlcih0YWJsZS5jb2x1bW5zKCkuaW5kZXhlcygpKS5nZXQoKTsKICAgICAgICAgIHRhYmxlLmNvbHVtbnMoKS5ub2RlcygpLmZsYXR0ZW4oKS50byQoKS5yZW1vdmVDbGFzcyhzZWxDbGFzcyk7CiAgICAgICAgICBpZiAoc2VsZWN0ZWQyLmxlbmd0aCA+IDApCiAgICAgICAgICAgIHRhYmxlLmNvbHVtbnMoc2VsZWN0ZWQyKS5ub2RlcygpLmZsYXR0ZW4oKS50byQoKS5hZGRDbGFzcyhzZWxDbGFzcyk7CiAgICAgICAgfQogICAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIGNvbElkeCA9IHNlbFRhcmdldCA9PT0gJ2NvbHVtbicgPyB0YWJsZS5jZWxsKHRoaXMpLmluZGV4KCkuY29sdW1uIDoKICAgICAgICAgICAgICAkLmluQXJyYXkodGhpcywgdGFibGUuY29sdW1ucygpLmZvb3RlcigpKSwKICAgICAgICAgICAgICB0aGlzQ29sID0gJCh0YWJsZS5jb2x1bW4oY29sSWR4KS5ub2RlcygpKTsKICAgICAgICAgIGlmIChjb2xJZHggPT09IC0xKSByZXR1cm47CiAgICAgICAgICBpZiAodGhpc0NvbC5oYXNDbGFzcyhzZWxDbGFzcykpIHsKICAgICAgICAgICAgdGhpc0NvbC5yZW1vdmVDbGFzcyhzZWxDbGFzcyk7CiAgICAgICAgICAgIHNlbGVjdGVkMi5zcGxpY2UoJC5pbkFycmF5KGNvbElkeCwgc2VsZWN0ZWQyKSwgMSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoc2VsTW9kZSA9PT0gJ3NpbmdsZScpICQodGFibGUuY2VsbHMoKS5ub2RlcygpKS5yZW1vdmVDbGFzcyhzZWxDbGFzcyk7CiAgICAgICAgICAgIHRoaXNDb2wuYWRkQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgICBzZWxlY3RlZDIgPSBzZWxNb2RlID09PSAnc2luZ2xlJyA/IFtjb2xJZHhdIDogdW5pcXVlKHNlbGVjdGVkMi5jb25jYXQoW2NvbElkeF0pKTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbGVjdENvbHMoZmFsc2UpOyAvLyB1cGRhdGUgc2VsZWN0ZWQyIGJhc2VkIG9uIHNlbGVjdGFibGUKICAgICAgICAgIGNoYW5nZUlucHV0KCdjb2x1bW5zX3NlbGVjdGVkJywgc2VsZWN0ZWQyKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbFRhcmdldCA9PT0gJ2NvbHVtbicpIHsKICAgICAgICAgICQodGFibGUudGFibGUoKS5ib2R5KCkpLm9uKCdjbGljay5kdCcsICd0ZCcsIGNhbGxiYWNrKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgJCh0YWJsZS50YWJsZSgpLmZvb3RlcigpKS5vbignY2xpY2suZHQnLCAndHIgdGgnLCBjYWxsYmFjayk7CiAgICAgICAgfQogICAgICAgIHNlbGVjdENvbHMoZmFsc2UpOyAgLy8gaW4gY2FzZSB1c2VycyBoYXZlIHNwZWNpZmllZCBwcmUtc2VsZWN0ZWQgY29sdW1ucwogICAgICAgIGNoYW5nZUlucHV0KCdjb2x1bW5zX3NlbGVjdGVkJywgc2VsZWN0ZWQyKTsKICAgICAgICBpZiAoc2VydmVyKSB0YWJsZS5vbignZHJhdy5kdCcsIGZ1bmN0aW9uKGUpIHsgc2VsZWN0Q29scyhmYWxzZSk7IH0pOwogICAgICAgIG1ldGhvZHMuc2VsZWN0Q29sdW1ucyA9IGZ1bmN0aW9uKHNlbGVjdGVkLCBpZ25vcmVTZWxlY3RhYmxlKSB7CiAgICAgICAgICBzZWxlY3RlZDIgPSAkLm1ha2VBcnJheShzZWxlY3RlZCk7CiAgICAgICAgICBzZWxlY3RDb2xzKGlnbm9yZVNlbGVjdGFibGUpOwogICAgICAgICAgY2hhbmdlSW5wdXQoJ2NvbHVtbnNfc2VsZWN0ZWQnLCBzZWxlY3RlZDIpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKHNlbFRhcmdldCA9PT0gJ2NlbGwnKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkMyA9IFtdLCBzZWxlY3RhYmxlMyA9IFtdOwogICAgICAgIGlmIChzZWxlY3RlZCAhPT0gbnVsbCkgc2VsZWN0ZWQzID0gc2VsZWN0ZWQ7CiAgICAgICAgaWYgKHNlbGVjdGFibGUgIT09IG51bGwgJiYgdHlwZW9mIHNlbGVjdGFibGUgIT09ICdib29sZWFuJykgc2VsZWN0YWJsZTMgPSBzZWxlY3RhYmxlOwogICAgICAgIHZhciBmaW5kSW5kZXggPSBmdW5jdGlvbihpaiwgc2VsKSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaWpbMF0gPT09IHNlbFtpXVswXSAmJiBpalsxXSA9PT0gc2VsW2ldWzFdKSByZXR1cm4gaTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgIC8vIENoYW5nZSBzZWxlY3RlZDMncyB2YWx1ZSBiYXNlZCBvbiBzZWxlY3RhYmxlMywgdGhlbiByZWZyZXNoIHRoZSBjZWxsIHN0YXRlCiAgICAgICAgdmFyIG9ubHlLZWVwU2VsZWN0YWJsZUNlbGxzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICBpZiAoc2VsRGlzYWJsZSkgeyAvLyB1c2VycyBjYW4ndCBzZWxlY3Q7IHVzZWZ1bCB3aGVuIG9ubHkgd2FudCBiYWNrZW5kIHNlbGVjdAogICAgICAgICAgICBzZWxlY3RlZDMgPSBbXTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHNlbGVjdGFibGUzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwogICAgICAgICAgdmFyIG5vbnNlbGVjdGFibGUgPSBzZWxlY3RhYmxlM1swXVswXSA8PSAwOwogICAgICAgICAgdmFyIG91dCA9IFtdOwogICAgICAgICAgaWYgKG5vbnNlbGVjdGFibGUpIHsKICAgICAgICAgICAgc2VsZWN0ZWQzLm1hcChmdW5jdGlvbihpaikgewogICAgICAgICAgICAgIC8vIHNob3VsZCBtYWtlIHNlbGVjdGFibGUzIHBvc2l0aXZlCiAgICAgICAgICAgICAgaWYgKGZpbmRJbmRleChbLWlqWzBdLCAtaWpbMV1dLCBzZWxlY3RhYmxlMykgPT09IC0xKSB7IG91dC5wdXNoKGlqKTsgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNlbGVjdGVkMy5tYXAoZnVuY3Rpb24oaWopIHsKICAgICAgICAgICAgICBpZiAoZmluZEluZGV4KGlqLCBzZWxlY3RhYmxlMykgPiAtMSkgeyBvdXQucHVzaChpaik7IH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBzZWxlY3RlZDMgPSBvdXQ7CiAgICAgICAgfQogICAgICAgIC8vIENoYW5nZSBzZWxlY3RlZDMncyB2YWx1ZSBiYXNlZCBvbiBzZWxlY3RhYmxlMywgdGhlbgogICAgICAgIC8vIHJlZnJlc2ggdGhlIGNlbGwgc2VsZWN0aW9uIHN0YXRlIGFjY29yZGluZyB0byB2YWx1ZXMgaW4gc2VsZWN0ZWQzCiAgICAgICAgdmFyIHNlbGVjdENlbGxzID0gZnVuY3Rpb24oaWdub3JlU2VsZWN0YWJsZSkgewogICAgICAgICAgaWYgKCFpZ25vcmVTZWxlY3RhYmxlKSBvbmx5S2VlcFNlbGVjdGFibGVDZWxscygpOwogICAgICAgICAgdGFibGUuJCgndGQuJyArIHNlbENsYXNzKS5yZW1vdmVDbGFzcyhzZWxDbGFzcyk7CiAgICAgICAgICBpZiAoc2VsZWN0ZWQzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwogICAgICAgICAgaWYgKHNlcnZlcikgewogICAgICAgICAgICB0YWJsZS5jZWxscyh7cGFnZTogJ2N1cnJlbnQnfSkuZXZlcnkoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgdmFyIGluZm8gPSB0d2Vha0NlbGxJbmRleCh0aGlzKTsKICAgICAgICAgICAgICBpZiAoZmluZEluZGV4KFtpbmZvLnJvdywgaW5mby5jb2xdLCBzZWxlY3RlZDMpID4gLTEpCiAgICAgICAgICAgICAgICAkKHRoaXMubm9kZSgpKS5hZGRDbGFzcyhzZWxDbGFzcyk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VsZWN0ZWQzLm1hcChmdW5jdGlvbihpaikgewogICAgICAgICAgICAgICQodGFibGUuY2VsbChpalswXSAtIDEsIGlqWzFdKS5ub2RlKCkpLmFkZENsYXNzKHNlbENsYXNzKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB0YWJsZS5vbignY2xpY2suZHQnLCAndGJvZHkgdGQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyksIGluZm8gPSB0d2Vha0NlbGxJbmRleCh0YWJsZS5jZWxsKHRoaXMpKTsKICAgICAgICAgIGlmICgkdGhpcy5oYXNDbGFzcyhzZWxDbGFzcykpIHsKICAgICAgICAgICAgJHRoaXMucmVtb3ZlQ2xhc3Moc2VsQ2xhc3MpOwogICAgICAgICAgICBzZWxlY3RlZDMuc3BsaWNlKGZpbmRJbmRleChbaW5mby5yb3csIGluZm8uY29sXSwgc2VsZWN0ZWQzKSwgMSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoc2VsTW9kZSA9PT0gJ3NpbmdsZScpICQodGFibGUuY2VsbHMoKS5ub2RlcygpKS5yZW1vdmVDbGFzcyhzZWxDbGFzcyk7CiAgICAgICAgICAgICR0aGlzLmFkZENsYXNzKHNlbENsYXNzKTsKICAgICAgICAgICAgc2VsZWN0ZWQzID0gc2VsTW9kZSA9PT0gJ3NpbmdsZScgPyBbW2luZm8ucm93LCBpbmZvLmNvbF1dIDoKICAgICAgICAgICAgICB1bmlxdWUoc2VsZWN0ZWQzLmNvbmNhdChbW2luZm8ucm93LCBpbmZvLmNvbF1dKSk7CiAgICAgICAgICB9CiAgICAgICAgICBzZWxlY3RDZWxscyhmYWxzZSk7IC8vIG11c3QgY2FsbCB0aGlzIHRvIHVwZGF0ZSBzZWxlY3RlZDMgYmFzZWQgb24gc2VsZWN0YWJsZTMKICAgICAgICAgIGNoYW5nZUlucHV0KCdjZWxsc19zZWxlY3RlZCcsIHRyYW5zcG9zZUFycmF5MkQoc2VsZWN0ZWQzKSwgJ3NoaW55Lm1hdHJpeCcpOwogICAgICAgIH0pOwogICAgICAgIHNlbGVjdENlbGxzKGZhbHNlKTsgIC8vIGluIGNhc2UgdXNlcnMgaGF2ZSBzcGVjaWZpZWQgcHJlLXNlbGVjdGVkIGNvbHVtbnMKICAgICAgICBjaGFuZ2VJbnB1dCgnY2VsbHNfc2VsZWN0ZWQnLCB0cmFuc3Bvc2VBcnJheTJEKHNlbGVjdGVkMyksICdzaGlueS5tYXRyaXgnKTsKCiAgICAgICAgaWYgKHNlcnZlcikgdGFibGUub24oJ2RyYXcuZHQnLCBmdW5jdGlvbihlKSB7IHNlbGVjdENlbGxzKGZhbHNlKTsgfSk7CiAgICAgICAgbWV0aG9kcy5zZWxlY3RDZWxscyA9IGZ1bmN0aW9uKHNlbGVjdGVkLCBpZ25vcmVTZWxlY3RhYmxlKSB7CiAgICAgICAgICBzZWxlY3RlZDMgPSBzZWxlY3RlZCA/IHNlbGVjdGVkIDogW107CiAgICAgICAgICBzZWxlY3RDZWxscyhpZ25vcmVTZWxlY3RhYmxlKTsKICAgICAgICAgIGNoYW5nZUlucHV0KCdjZWxsc19zZWxlY3RlZCcsIHRyYW5zcG9zZUFycmF5MkQoc2VsZWN0ZWQzKSwgJ3NoaW55Lm1hdHJpeCcpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIGV4cG9zZSBzb21lIHRhYmxlIGluZm8gdG8gU2hpbnkKICAgIHZhciB1cGRhdGVUYWJsZUluZm8gPSBmdW5jdGlvbihlLCBzZXR0aW5ncykgewogICAgICAvLyBUT0RPOiBpcyBhbnlvbmUgaW50ZXJlc3RlZCBpbiB0aGUgcGFnZSBpbmZvPwogICAgICAvLyBjaGFuZ2VJbnB1dCgncGFnZV9pbmZvJywgdGFibGUucGFnZS5pbmZvKCkpOwogICAgICB2YXIgdXBkYXRlUm93SW5mbyA9IGZ1bmN0aW9uKGlkLCBtb2RpZmllcikgewogICAgICAgIHZhciBpZHg7CiAgICAgICAgaWYgKHNlcnZlcikgewogICAgICAgICAgaWR4ID0gbW9kaWZpZXIucGFnZSA9PT0gJ2N1cnJlbnQnID8gRFRfcm93c19jdXJyZW50IDogRFRfcm93c19hbGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciByb3dzID0gdGFibGUucm93cygkLmV4dGVuZCh7CiAgICAgICAgICAgIHNlYXJjaDogJ2FwcGxpZWQnLAogICAgICAgICAgICBwYWdlOiAnYWxsJwogICAgICAgICAgfSwgbW9kaWZpZXIpKTsKICAgICAgICAgIGlkeCA9IGFkZE9uZShyb3dzLmluZGV4ZXMoKS50b0FycmF5KCkpOwogICAgICAgIH0KICAgICAgICBjaGFuZ2VJbnB1dCgncm93cycgKyAnXycgKyBpZCwgaWR4KTsKICAgICAgfTsKICAgICAgdXBkYXRlUm93SW5mbygnY3VycmVudCcsIHtwYWdlOiAnY3VycmVudCd9KTsKICAgICAgdXBkYXRlUm93SW5mbygnYWxsJywge30pOwogICAgfQogICAgdGFibGUub24oJ2RyYXcuZHQnLCB1cGRhdGVUYWJsZUluZm8pOwogICAgdXBkYXRlVGFibGVJbmZvKCk7CgogICAgLy8gc3RhdGUgaW5mbwogICAgdGFibGUub24oJ2RyYXcuZHQgY29sdW1uLXZpc2liaWxpdHkuZHQnLCBmdW5jdGlvbigpIHsKICAgICAgY2hhbmdlSW5wdXQoJ3N0YXRlJywgdGFibGUuc3RhdGUoKSk7CiAgICB9KTsKICAgIGNoYW5nZUlucHV0KCdzdGF0ZScsIHRhYmxlLnN0YXRlKCkpOwoKICAgIC8vIHNlYXJjaCBpbmZvCiAgICB2YXIgdXBkYXRlU2VhcmNoSW5mbyA9IGZ1bmN0aW9uKCkgewogICAgICBjaGFuZ2VJbnB1dCgnc2VhcmNoJywgdGFibGUuc2VhcmNoKCkpOwogICAgICBpZiAoZmlsdGVyUm93KSBjaGFuZ2VJbnB1dCgnc2VhcmNoX2NvbHVtbnMnLCBmaWx0ZXJSb3cudG9BcnJheSgpLm1hcChmdW5jdGlvbih0ZCkgewogICAgICAgIHJldHVybiAkKHRkKS5maW5kKCdpbnB1dCcpLmZpcnN0KCkudmFsKCk7CiAgICAgIH0pKTsKICAgIH0KICAgIHRhYmxlLm9uKCdkcmF3LmR0JywgdXBkYXRlU2VhcmNoSW5mbyk7CiAgICB1cGRhdGVTZWFyY2hJbmZvKCk7CgogICAgdmFyIGNlbGxJbmZvID0gZnVuY3Rpb24odGhpeikgewogICAgICB2YXIgaW5mbyA9IHR3ZWFrQ2VsbEluZGV4KHRhYmxlLmNlbGwodGhpeikpOwogICAgICBpbmZvLnZhbHVlID0gdGFibGUuY2VsbCh0aGl6KS5kYXRhKCk7CiAgICAgIHJldHVybiBpbmZvOwogICAgfQogICAgLy8gdGhlIGN1cnJlbnQgY2VsbCBjbGlja2VkIG9uCiAgICB0YWJsZS5vbignY2xpY2suZHQnLCAndGJvZHkgdGQnLCBmdW5jdGlvbigpIHsKICAgICAgY2hhbmdlSW5wdXQoJ2NlbGxfY2xpY2tlZCcsIGNlbGxJbmZvKHRoaXMpLCBudWxsLCBudWxsLCB7cHJpb3JpdHk6ICdldmVudCd9KTsKICAgIH0pCiAgICBjaGFuZ2VJbnB1dCgnY2VsbF9jbGlja2VkJywge30pOwoKICAgIC8vIGRvIG5vdCB0cmlnZ2VyIHRhYmxlIHNlbGVjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGxpbmtzIHVubGVzcyB0aGV5IGhhdmUgY2xhc3NlcwogICAgdGFibGUub24oJ2NsaWNrLmR0JywgJ3Rib2R5IHRkIGEnLCBmdW5jdGlvbihlKSB7CiAgICAgIGlmICh0aGlzLmNsYXNzTmFtZSA9PT0gJycpIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICB9KTsKCiAgICBtZXRob2RzLmFkZFJvdyA9IGZ1bmN0aW9uKGRhdGEsIHJvd25hbWUpIHsKICAgICAgdmFyIGRhdGEwID0gdGFibGUucm93KDApLmRhdGEoKSwgbiA9IGRhdGEwLmxlbmd0aCwgZCA9IG4gLSBkYXRhLmxlbmd0aDsKICAgICAgaWYgKGQgPT09IDEpIHsKICAgICAgICBkYXRhID0gcm93bmFtZS5jb25jYXQoZGF0YSkKICAgICAgfSBlbHNlIGlmIChkICE9PSAwKSB7CiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CiAgICAgICAgY29uc29sZS5sb2coZGF0YTApOwogICAgICAgIHRocm93ICdOZXcgZGF0YSBtdXN0IGJlIG9mIHRoZSBzYW1lIGxlbmd0aCBhcyBjdXJyZW50IGRhdGEgKCcgKyBuICsgJyknOwogICAgICB9OwogICAgICB0YWJsZS5yb3cuYWRkKGRhdGEpLmRyYXcoKTsKICAgIH0KCiAgICBtZXRob2RzLnVwZGF0ZVNlYXJjaCA9IGZ1bmN0aW9uKGtleXdvcmRzKSB7CiAgICAgIGlmIChrZXl3b3Jkcy5nbG9iYWwgIT09IG51bGwpCiAgICAgICAgJCh0YWJsZS50YWJsZSgpLmNvbnRhaW5lcigpKS5maW5kKCdpbnB1dFt0eXBlPXNlYXJjaF0nKS5maXJzdCgpCiAgICAgICAgICAgICAudmFsKGtleXdvcmRzLmdsb2JhbCkudHJpZ2dlcignaW5wdXQnKTsKICAgICAgdmFyIGNvbHVtbnMgPSBrZXl3b3Jkcy5jb2x1bW5zOwogICAgICBpZiAoIWZpbHRlclJvdyB8fCBjb2x1bW5zID09PSBudWxsKSByZXR1cm47CiAgICAgIGZpbHRlclJvdy50b0FycmF5KCkubWFwKGZ1bmN0aW9uKHRkLCBpKSB7CiAgICAgICAgdmFyIHYgPSB0eXBlb2YgY29sdW1ucyA9PT0gJ3N0cmluZycgPyBjb2x1bW5zIDogY29sdW1uc1tpXTsKICAgICAgICBpZiAodHlwZW9mIHYgPT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygnVGhlIHNlYXJjaCBrZXl3b3JkIGZvciBjb2x1bW4gJyArIGkgKyAnIGlzIHVuZGVmaW5lZCcpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgICQodGQpLmZpbmQoJ2lucHV0JykuZmlyc3QoKS52YWwodik7CiAgICAgICAgc2VhcmNoQ29sdW1uKGksIHYpOwogICAgICB9KTsKICAgICAgdGFibGUuZHJhdygpOwogICAgfQoKICAgIG1ldGhvZHMuaGlkZUNvbHMgPSBmdW5jdGlvbihoaWRlLCByZXNldCkgewogICAgICBpZiAocmVzZXQpIHRhYmxlLmNvbHVtbnMoKS52aXNpYmxlKHRydWUsIGZhbHNlKTsKICAgICAgdGFibGUuY29sdW1ucyhoaWRlKS52aXNpYmxlKGZhbHNlKTsKICAgIH0KCiAgICBtZXRob2RzLnNob3dDb2xzID0gZnVuY3Rpb24oc2hvdywgcmVzZXQpIHsKICAgICAgaWYgKHJlc2V0KSB0YWJsZS5jb2x1bW5zKCkudmlzaWJsZShmYWxzZSwgZmFsc2UpOwogICAgICB0YWJsZS5jb2x1bW5zKHNob3cpLnZpc2libGUodHJ1ZSk7CiAgICB9CgogICAgbWV0aG9kcy5jb2xSZW9yZGVyID0gZnVuY3Rpb24ob3JkZXIsIG9yaWdPcmRlcikgewogICAgICB0YWJsZS5jb2xSZW9yZGVyLm9yZGVyKG9yZGVyLCBvcmlnT3JkZXIpOwogICAgfQoKICAgIG1ldGhvZHMuc2VsZWN0UGFnZSA9IGZ1bmN0aW9uKHBhZ2UpIHsKICAgICAgaWYgKHRhYmxlLnBhZ2UuaW5mbygpLnBhZ2VzIDwgcGFnZSB8fCBwYWdlIDwgMSkgewogICAgICAgIHRocm93ICdTZWxlY3RlZCBwYWdlIGlzIG91dCBvZiByYW5nZSc7CiAgICAgIH07CiAgICAgIHRhYmxlLnBhZ2UocGFnZSAtIDEpLmRyYXcoZmFsc2UpOwogICAgfQoKICAgIG1ldGhvZHMucmVsb2FkRGF0YSA9IGZ1bmN0aW9uKHJlc2V0UGFnaW5nLCBjbGVhclNlbGVjdGlvbikgewogICAgICAvLyBlbXB0eSBzZWxlY3Rpb25zIGZpcnN0IGlmIG5lY2Vzc2FyeQogICAgICBpZiAobWV0aG9kcy5zZWxlY3RSb3dzICYmIGluQXJyYXkoJ3JvdycsIGNsZWFyU2VsZWN0aW9uKSkgbWV0aG9kcy5zZWxlY3RSb3dzKFtdKTsKICAgICAgaWYgKG1ldGhvZHMuc2VsZWN0Q29sdW1ucyAmJiBpbkFycmF5KCdjb2x1bW4nLCBjbGVhclNlbGVjdGlvbikpIG1ldGhvZHMuc2VsZWN0Q29sdW1ucyhbXSk7CiAgICAgIGlmIChtZXRob2RzLnNlbGVjdENlbGxzICYmIGluQXJyYXkoJ2NlbGwnLCBjbGVhclNlbGVjdGlvbikpIG1ldGhvZHMuc2VsZWN0Q2VsbHMoW10pOwogICAgICB0YWJsZS5hamF4LnJlbG9hZChudWxsLCByZXNldFBhZ2luZyk7CiAgICB9CgogICAgdGFibGUuc2hpbnlNZXRob2RzID0gbWV0aG9kczsKICB9LAogIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7CiAgICBpZiAoaW5zdGFuY2UuZGF0YSkgdGhpcy5yZW5kZXJWYWx1ZShlbCwgaW5zdGFuY2UuZGF0YSwgaW5zdGFuY2UpOwoKICAgIC8vIGR5bmFtaWNhbGx5IGFkanVzdCBoZWlnaHQgaWYgZmlsbENvbnRhaW5lciA9IFRSVUUKICAgIGlmIChpbnN0YW5jZS5maWxsQ29udGFpbmVyKQogICAgICB0aGlzLmZpbGxBdmFpbGFibGVIZWlnaHQoZWwsIGhlaWdodCk7CgogICAgdGhpcy5hZGp1c3RXaWR0aChlbCk7CiAgfSwKCiAgLy8gZHluYW1pY2FsbHkgc2V0IHRoZSBzY3JvbGwgYm9keSB0byBmaWxsIGF2YWlsYWJsZSBoZWlnaHQKICAvLyAodXNlZCB3aXRoIGZpbGxDb250YWluZXIgPSBUUlVFKQogIGZpbGxBdmFpbGFibGVIZWlnaHQ6IGZ1bmN0aW9uKGVsLCBhdmFpbGFibGVIZWlnaHQpIHsKCiAgICAvLyBzZWUgaG93IG11Y2ggb2YgdGhlIHRhYmxlIGlzIG9jY3VwaWVkIGJ5IGhlYWRlci9mb290ZXIgZWxlbWVudHMKICAgIC8vIGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIGEgdGFyZ2V0IHNjcm9sbCBib2R5IGhlaWdodAogICAgdmFyIGR0V3JhcHBlciA9ICQoZWwpLmZpbmQoJ2Rpdi5kYXRhVGFibGVzX3dyYXBwZXInKTsKICAgIHZhciBkdFNjcm9sbEJvZHkgPSAkKGVsKS5maW5kKCQoJ2Rpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHknKSk7CiAgICB2YXIgZnJhbWluZ0hlaWdodCA9IGR0V3JhcHBlci5pbm5lckhlaWdodCgpIC0gZHRTY3JvbGxCb2R5LmlubmVySGVpZ2h0KCk7CiAgICB2YXIgc2Nyb2xsQm9keUhlaWdodCA9IGF2YWlsYWJsZUhlaWdodCAtIGZyYW1pbmdIZWlnaHQ7CgogICAgLy8gc2V0IHRoZSBoZWlnaHQKICAgIGR0U2Nyb2xsQm9keS5oZWlnaHQoc2Nyb2xsQm9keUhlaWdodCArICdweCcpOwogIH0sCgogIC8vIGFkanVzdCB0aGUgd2lkdGggb2YgY29sdW1uczsgcmVtb3ZlIHRoZSBoYXJkLWNvZGVkIHdpZHRocyBvbiB0YWJsZSBhbmQgdGhlCiAgLy8gc2Nyb2xsIGhlYWRlciB3aGVuIHNjcm9sbFgvWSBhcmUgZW5hYmxlZAogIGFkanVzdFdpZHRoOiBmdW5jdGlvbihlbCkgewogICAgdmFyICRlbCA9ICQoZWwpLCB0YWJsZSA9ICRlbC5kYXRhKCdkYXRhdGFibGUnKTsKICAgIGlmICh0YWJsZSkgdGFibGUuY29sdW1ucy5hZGp1c3QoKTsKICAgICRlbC5maW5kKCcuZGF0YVRhYmxlc19zY3JvbGxIZWFkSW5uZXInKS5jc3MoJ3dpZHRoJywgJycpCiAgICAgICAgLmNoaWxkcmVuKCd0YWJsZScpLmNzcygnbWFyZ2luLWxlZnQnLCAnJyk7CiAgfQp9KTsKCiAgaWYgKCFIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHJldHVybjsKCiAgU2hpbnkuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIoJ2RhdGF0YWJsZS1jYWxscycsIGZ1bmN0aW9uKGRhdGEpIHsKICAgIHZhciBpZCA9IGRhdGEuaWQ7CiAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiAgICB2YXIgdGFibGUgPSBlbCA/ICQoZWwpLmRhdGEoJ2RhdGF0YWJsZScpIDogbnVsbDsKICAgIGlmICghdGFibGUpIHsKICAgICAgY29uc29sZS5sb2coIkNvdWxkbid0IGZpbmQgdGFibGUgd2l0aCBpZCAiICsgaWQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgdmFyIG1ldGhvZHMgPSB0YWJsZS5zaGlueU1ldGhvZHMsIGNhbGwgPSBkYXRhLmNhbGw7CiAgICBpZiAobWV0aG9kc1tjYWxsLm1ldGhvZF0pIHsKICAgICAgbWV0aG9kc1tjYWxsLm1ldGhvZF0uYXBwbHkodGFibGUsIGNhbGwuYXJncyk7CiAgICB9IGVsc2UgewogICAgICBjb25zb2xlLmxvZygiVW5rbm93biBtZXRob2QgIiArIGNhbGwubWV0aG9kKTsKICAgIH0KICB9KTsKCn0pKCk7Cg=="></script>
<link href="data:text/css,table%2EdataTable%7Bwidth%3A100%25%3Bmargin%3A0%20auto%3Bclear%3Aboth%3Bborder%2Dcollapse%3Aseparate%3Bborder%2Dspacing%3A0%7Dtable%2EdataTable%20thead%20th%2Ctable%2EdataTable%20tfoot%20th%7Bfont%2Dweight%3Abold%7Dtable%2EdataTable%20thead%20th%2Ctable%2EdataTable%20thead%20td%7Bpadding%3A10px%2018px%3Bborder%2Dbottom%3A1px%20solid%20%23111%7Dtable%2EdataTable%20thead%20th%3Aactive%2Ctable%2EdataTable%20thead%20td%3Aactive%7Boutline%3Anone%7Dtable%2EdataTable%20tfoot%20th%2Ctable%2EdataTable%20tfoot%20td%7Bpadding%3A10px%2018px%206px%2018px%3Bborder%2Dtop%3A1px%20solid%20%23111%7Dtable%2EdataTable%20thead%20%2Esorting%2Ctable%2EdataTable%20thead%20%2Esorting%5Fasc%2Ctable%2EdataTable%20thead%20%2Esorting%5Fdesc%2Ctable%2EdataTable%20thead%20%2Esorting%5Fasc%5Fdisabled%2Ctable%2EdataTable%20thead%20%2Esorting%5Fdesc%5Fdisabled%7Bcursor%3Apointer%3B%2Acursor%3Ahand%3Bbackground%2Drepeat%3Ano%2Drepeat%3Bbackground%2Dposition%3Acenter%20right%7Dtable%2EdataTable%20thead%20%2Esorting%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7XQMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL%2BTq%2FQCM1oNiJidwox0355mXnG%2FDrEtIQ6azioNZQxI0ykPhTQIwhCR%2BBmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P%2BGtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC%29%7Dtable%2EdataTable%20thead%20%2Esorting%5Fasc%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS%2FgDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM%2BwTENuQahAvEO9DMwiGdwAxOymGJQLxTyD%2BjgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg%3D%3D%29%7Dtable%2EdataTable%20thead%20%2Esorting%5Fdesc%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA%2FBOIv2PBIPFEUgxjB%2BIdQPwfC94HxLykus4GiD%2BhGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL%2BAuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII%3D%29%7Dtable%2EdataTable%20thead%20%2Esorting%5Fasc%5Fdisabled%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAW0lEQVQoz2NgoCm4w3Vnwh02wspK7%2Fy6k01Ikdadx3f%2B37l9RxmfIsY7c4GKQHDiHUbcyhzvvIMq%2B3THBpci3jv7oIpAcMcdduzKEu%2F8vPMdDn%2FeiWQYBYMKAAC3ykIEuYQJUgAAAABJRU5ErkJggg%3D%3D%29%7Dtable%2EdataTable%20thead%20%2Esorting%5Fdesc%5Fdisabled%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAWUlEQVQoz2NgGAWDCtyJvPPzznc4%2FHknEbsy9js77vyHw313eHGZZ3PnE1TRuzuOuK1lvDMRqmzuHUZ87lO%2Bcxuo6PEdLUIeyb7z604pYf%2By3Zlwh4u2YQoAc7ZCBHH4jigAAAAASUVORK5CYII%3D%29%7Dtable%2EdataTable%20tbody%20tr%7Bbackground%2Dcolor%3A%23ffffff%7Dtable%2EdataTable%20tbody%20tr%2Eselected%7Bbackground%2Dcolor%3A%23B0BED9%7Dtable%2EdataTable%20tbody%20th%2Ctable%2EdataTable%20tbody%20td%7Bpadding%3A8px%2010px%7Dtable%2EdataTable%2Erow%2Dborder%20tbody%20th%2Ctable%2EdataTable%2Erow%2Dborder%20tbody%20td%2Ctable%2EdataTable%2Edisplay%20tbody%20th%2Ctable%2EdataTable%2Edisplay%20tbody%20td%7Bborder%2Dtop%3A1px%20solid%20%23ddd%7Dtable%2EdataTable%2Erow%2Dborder%20tbody%20tr%3Afirst%2Dchild%20th%2Ctable%2EdataTable%2Erow%2Dborder%20tbody%20tr%3Afirst%2Dchild%20td%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%3Afirst%2Dchild%20th%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%3Afirst%2Dchild%20td%7Bborder%2Dtop%3Anone%7Dtable%2EdataTable%2Ecell%2Dborder%20tbody%20th%2Ctable%2EdataTable%2Ecell%2Dborder%20tbody%20td%7Bborder%2Dtop%3A1px%20solid%20%23ddd%3Bborder%2Dright%3A1px%20solid%20%23ddd%7Dtable%2EdataTable%2Ecell%2Dborder%20tbody%20tr%20th%3Afirst%2Dchild%2Ctable%2EdataTable%2Ecell%2Dborder%20tbody%20tr%20td%3Afirst%2Dchild%7Bborder%2Dleft%3A1px%20solid%20%23ddd%7Dtable%2EdataTable%2Ecell%2Dborder%20tbody%20tr%3Afirst%2Dchild%20th%2Ctable%2EdataTable%2Ecell%2Dborder%20tbody%20tr%3Afirst%2Dchild%20td%7Bborder%2Dtop%3Anone%7Dtable%2EdataTable%2Estripe%20tbody%20tr%2Eodd%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%7Bbackground%2Dcolor%3A%23f9f9f9%7Dtable%2EdataTable%2Estripe%20tbody%20tr%2Eodd%2Eselected%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%2Eselected%7Bbackground%2Dcolor%3A%23acbad4%7Dtable%2EdataTable%2Ehover%20tbody%20tr%3Ahover%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%7Bbackground%2Dcolor%3A%23f6f6f6%7Dtable%2EdataTable%2Ehover%20tbody%20tr%3Ahover%2Eselected%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%2Eselected%7Bbackground%2Dcolor%3A%23aab7d1%7Dtable%2EdataTable%2Eorder%2Dcolumn%20tbody%20tr%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%20tbody%20tr%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%20tbody%20tr%3E%2Esorting%5F3%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%3E%2Esorting%5F1%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%3E%2Esorting%5F2%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%3E%2Esorting%5F3%7Bbackground%2Dcolor%3A%23fafafa%7Dtable%2EdataTable%2Eorder%2Dcolumn%20tbody%20tr%2Eselected%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%20tbody%20tr%2Eselected%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%20tbody%20tr%2Eselected%3E%2Esorting%5F3%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%2Eselected%3E%2Esorting%5F1%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%2Eselected%3E%2Esorting%5F2%2Ctable%2EdataTable%2Edisplay%20tbody%20tr%2Eselected%3E%2Esorting%5F3%7Bbackground%2Dcolor%3A%23acbad5%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eodd%3E%2Esorting%5F1%7Bbackground%2Dcolor%3A%23f1f1f1%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eodd%3E%2Esorting%5F2%7Bbackground%2Dcolor%3A%23f3f3f3%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%3E%2Esorting%5F3%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eodd%3E%2Esorting%5F3%7Bbackground%2Dcolor%3Awhitesmoke%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%2Eselected%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eodd%2Eselected%3E%2Esorting%5F1%7Bbackground%2Dcolor%3A%23a6b4cd%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%2Eselected%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eodd%2Eselected%3E%2Esorting%5F2%7Bbackground%2Dcolor%3A%23a8b5cf%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eodd%2Eselected%3E%2Esorting%5F3%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eodd%2Eselected%3E%2Esorting%5F3%7Bbackground%2Dcolor%3A%23a9b7d1%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eeven%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eeven%3E%2Esorting%5F1%7Bbackground%2Dcolor%3A%23fafafa%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eeven%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eeven%3E%2Esorting%5F2%7Bbackground%2Dcolor%3A%23fcfcfc%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eeven%3E%2Esorting%5F3%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eeven%3E%2Esorting%5F3%7Bbackground%2Dcolor%3A%23fefefe%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eeven%2Eselected%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eeven%2Eselected%3E%2Esorting%5F1%7Bbackground%2Dcolor%3A%23acbad5%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eeven%2Eselected%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eeven%2Eselected%3E%2Esorting%5F2%7Bbackground%2Dcolor%3A%23aebcd6%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%2Eeven%2Eselected%3E%2Esorting%5F3%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Estripe%20tbody%20tr%2Eeven%2Eselected%3E%2Esorting%5F3%7Bbackground%2Dcolor%3A%23afbdd8%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Ehover%20tbody%20tr%3Ahover%3E%2Esorting%5F1%7Bbackground%2Dcolor%3A%23eaeaea%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Ehover%20tbody%20tr%3Ahover%3E%2Esorting%5F2%7Bbackground%2Dcolor%3A%23ececec%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%3E%2Esorting%5F3%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Ehover%20tbody%20tr%3Ahover%3E%2Esorting%5F3%7Bbackground%2Dcolor%3A%23efefef%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%2Eselected%3E%2Esorting%5F1%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Ehover%20tbody%20tr%3Ahover%2Eselected%3E%2Esorting%5F1%7Bbackground%2Dcolor%3A%23a2aec7%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%2Eselected%3E%2Esorting%5F2%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Ehover%20tbody%20tr%3Ahover%2Eselected%3E%2Esorting%5F2%7Bbackground%2Dcolor%3A%23a3b0c9%7Dtable%2EdataTable%2Edisplay%20tbody%20tr%3Ahover%2Eselected%3E%2Esorting%5F3%2Ctable%2EdataTable%2Eorder%2Dcolumn%2Ehover%20tbody%20tr%3Ahover%2Eselected%3E%2Esorting%5F3%7Bbackground%2Dcolor%3A%23a5b2cb%7Dtable%2EdataTable%2Eno%2Dfooter%7Bborder%2Dbottom%3A1px%20solid%20%23111%7Dtable%2EdataTable%2Enowrap%20th%2Ctable%2EdataTable%2Enowrap%20td%7Bwhite%2Dspace%3Anowrap%7Dtable%2EdataTable%2Ecompact%20thead%20th%2Ctable%2EdataTable%2Ecompact%20thead%20td%7Bpadding%3A4px%2017px%204px%204px%7Dtable%2EdataTable%2Ecompact%20tfoot%20th%2Ctable%2EdataTable%2Ecompact%20tfoot%20td%7Bpadding%3A4px%7Dtable%2EdataTable%2Ecompact%20tbody%20th%2Ctable%2EdataTable%2Ecompact%20tbody%20td%7Bpadding%3A4px%7Dtable%2EdataTable%20th%2Edt%2Dleft%2Ctable%2EdataTable%20td%2Edt%2Dleft%7Btext%2Dalign%3Aleft%7Dtable%2EdataTable%20th%2Edt%2Dcenter%2Ctable%2EdataTable%20td%2Edt%2Dcenter%2Ctable%2EdataTable%20td%2EdataTables%5Fempty%7Btext%2Dalign%3Acenter%7Dtable%2EdataTable%20th%2Edt%2Dright%2Ctable%2EdataTable%20td%2Edt%2Dright%7Btext%2Dalign%3Aright%7Dtable%2EdataTable%20th%2Edt%2Djustify%2Ctable%2EdataTable%20td%2Edt%2Djustify%7Btext%2Dalign%3Ajustify%7Dtable%2EdataTable%20th%2Edt%2Dnowrap%2Ctable%2EdataTable%20td%2Edt%2Dnowrap%7Bwhite%2Dspace%3Anowrap%7Dtable%2EdataTable%20thead%20th%2Edt%2Dhead%2Dleft%2Ctable%2EdataTable%20thead%20td%2Edt%2Dhead%2Dleft%2Ctable%2EdataTable%20tfoot%20th%2Edt%2Dhead%2Dleft%2Ctable%2EdataTable%20tfoot%20td%2Edt%2Dhead%2Dleft%7Btext%2Dalign%3Aleft%7Dtable%2EdataTable%20thead%20th%2Edt%2Dhead%2Dcenter%2Ctable%2EdataTable%20thead%20td%2Edt%2Dhead%2Dcenter%2Ctable%2EdataTable%20tfoot%20th%2Edt%2Dhead%2Dcenter%2Ctable%2EdataTable%20tfoot%20td%2Edt%2Dhead%2Dcenter%7Btext%2Dalign%3Acenter%7Dtable%2EdataTable%20thead%20th%2Edt%2Dhead%2Dright%2Ctable%2EdataTable%20thead%20td%2Edt%2Dhead%2Dright%2Ctable%2EdataTable%20tfoot%20th%2Edt%2Dhead%2Dright%2Ctable%2EdataTable%20tfoot%20td%2Edt%2Dhead%2Dright%7Btext%2Dalign%3Aright%7Dtable%2EdataTable%20thead%20th%2Edt%2Dhead%2Djustify%2Ctable%2EdataTable%20thead%20td%2Edt%2Dhead%2Djustify%2Ctable%2EdataTable%20tfoot%20th%2Edt%2Dhead%2Djustify%2Ctable%2EdataTable%20tfoot%20td%2Edt%2Dhead%2Djustify%7Btext%2Dalign%3Ajustify%7Dtable%2EdataTable%20thead%20th%2Edt%2Dhead%2Dnowrap%2Ctable%2EdataTable%20thead%20td%2Edt%2Dhead%2Dnowrap%2Ctable%2EdataTable%20tfoot%20th%2Edt%2Dhead%2Dnowrap%2Ctable%2EdataTable%20tfoot%20td%2Edt%2Dhead%2Dnowrap%7Bwhite%2Dspace%3Anowrap%7Dtable%2EdataTable%20tbody%20th%2Edt%2Dbody%2Dleft%2Ctable%2EdataTable%20tbody%20td%2Edt%2Dbody%2Dleft%7Btext%2Dalign%3Aleft%7Dtable%2EdataTable%20tbody%20th%2Edt%2Dbody%2Dcenter%2Ctable%2EdataTable%20tbody%20td%2Edt%2Dbody%2Dcenter%7Btext%2Dalign%3Acenter%7Dtable%2EdataTable%20tbody%20th%2Edt%2Dbody%2Dright%2Ctable%2EdataTable%20tbody%20td%2Edt%2Dbody%2Dright%7Btext%2Dalign%3Aright%7Dtable%2EdataTable%20tbody%20th%2Edt%2Dbody%2Djustify%2Ctable%2EdataTable%20tbody%20td%2Edt%2Dbody%2Djustify%7Btext%2Dalign%3Ajustify%7Dtable%2EdataTable%20tbody%20th%2Edt%2Dbody%2Dnowrap%2Ctable%2EdataTable%20tbody%20td%2Edt%2Dbody%2Dnowrap%7Bwhite%2Dspace%3Anowrap%7Dtable%2EdataTable%2Ctable%2EdataTable%20th%2Ctable%2EdataTable%20td%7Bbox%2Dsizing%3Acontent%2Dbox%7D%2EdataTables%5Fwrapper%7Bposition%3Arelative%3Bclear%3Aboth%3B%2Azoom%3A1%3Bzoom%3A1%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Flength%7Bfloat%3Aleft%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Ffilter%7Bfloat%3Aright%3Btext%2Dalign%3Aright%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Ffilter%20input%7Bmargin%2Dleft%3A0%2E5em%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Finfo%7Bclear%3Aboth%3Bfloat%3Aleft%3Bpadding%2Dtop%3A0%2E755em%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%7Bfloat%3Aright%3Btext%2Dalign%3Aright%3Bpadding%2Dtop%3A0%2E25em%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%7Bbox%2Dsizing%3Aborder%2Dbox%3Bdisplay%3Ainline%2Dblock%3Bmin%2Dwidth%3A1%2E5em%3Bpadding%3A0%2E5em%201em%3Bmargin%2Dleft%3A2px%3Btext%2Dalign%3Acenter%3Btext%2Ddecoration%3Anone%20%21important%3Bcursor%3Apointer%3B%2Acursor%3Ahand%3Bcolor%3A%23333%20%21important%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A2px%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%2Ecurrent%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%2Ecurrent%3Ahover%7Bcolor%3A%23333%20%21important%3Bborder%3A1px%20solid%20%23979797%3Bbackground%2Dcolor%3Awhite%3Bbackground%3A%2Dwebkit%2Dgradient%28linear%2C%20left%20top%2C%20left%20bottom%2C%20color%2Dstop%280%25%2C%20%23fff%29%2C%20color%2Dstop%28100%25%2C%20%23dcdcdc%29%29%3Bbackground%3A%2Dwebkit%2Dlinear%2Dgradient%28top%2C%20%23fff%200%25%2C%20%23dcdcdc%20100%25%29%3Bbackground%3A%2Dmoz%2Dlinear%2Dgradient%28top%2C%20%23fff%200%25%2C%20%23dcdcdc%20100%25%29%3Bbackground%3A%2Dms%2Dlinear%2Dgradient%28top%2C%20%23fff%200%25%2C%20%23dcdcdc%20100%25%29%3Bbackground%3A%2Do%2Dlinear%2Dgradient%28top%2C%20%23fff%200%25%2C%20%23dcdcdc%20100%25%29%3Bbackground%3Alinear%2Dgradient%28to%20bottom%2C%20%23fff%200%25%2C%20%23dcdcdc%20100%25%29%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%2Edisabled%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%2Edisabled%3Ahover%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%2Edisabled%3Aactive%7Bcursor%3Adefault%3Bcolor%3A%23666%20%21important%3Bborder%3A1px%20solid%20transparent%3Bbackground%3Atransparent%3Bbox%2Dshadow%3Anone%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%3Ahover%7Bcolor%3Awhite%20%21important%3Bborder%3A1px%20solid%20%23111%3Bbackground%2Dcolor%3A%23585858%3Bbackground%3A%2Dwebkit%2Dgradient%28linear%2C%20left%20top%2C%20left%20bottom%2C%20color%2Dstop%280%25%2C%20%23585858%29%2C%20color%2Dstop%28100%25%2C%20%23111%29%29%3Bbackground%3A%2Dwebkit%2Dlinear%2Dgradient%28top%2C%20%23585858%200%25%2C%20%23111%20100%25%29%3Bbackground%3A%2Dmoz%2Dlinear%2Dgradient%28top%2C%20%23585858%200%25%2C%20%23111%20100%25%29%3Bbackground%3A%2Dms%2Dlinear%2Dgradient%28top%2C%20%23585858%200%25%2C%20%23111%20100%25%29%3Bbackground%3A%2Do%2Dlinear%2Dgradient%28top%2C%20%23585858%200%25%2C%20%23111%20100%25%29%3Bbackground%3Alinear%2Dgradient%28to%20bottom%2C%20%23585858%200%25%2C%20%23111%20100%25%29%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Epaginate%5Fbutton%3Aactive%7Boutline%3Anone%3Bbackground%2Dcolor%3A%232b2b2b%3Bbackground%3A%2Dwebkit%2Dgradient%28linear%2C%20left%20top%2C%20left%20bottom%2C%20color%2Dstop%280%25%2C%20%232b2b2b%29%2C%20color%2Dstop%28100%25%2C%20%230c0c0c%29%29%3Bbackground%3A%2Dwebkit%2Dlinear%2Dgradient%28top%2C%20%232b2b2b%200%25%2C%20%230c0c0c%20100%25%29%3Bbackground%3A%2Dmoz%2Dlinear%2Dgradient%28top%2C%20%232b2b2b%200%25%2C%20%230c0c0c%20100%25%29%3Bbackground%3A%2Dms%2Dlinear%2Dgradient%28top%2C%20%232b2b2b%200%25%2C%20%230c0c0c%20100%25%29%3Bbackground%3A%2Do%2Dlinear%2Dgradient%28top%2C%20%232b2b2b%200%25%2C%20%230c0c0c%20100%25%29%3Bbackground%3Alinear%2Dgradient%28to%20bottom%2C%20%232b2b2b%200%25%2C%20%230c0c0c%20100%25%29%3Bbox%2Dshadow%3Ainset%200%200%203px%20%23111%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%20%2Eellipsis%7Bpadding%3A0%201em%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fprocessing%7Bposition%3Aabsolute%3Btop%3A50%25%3Bleft%3A50%25%3Bwidth%3A100%25%3Bheight%3A40px%3Bmargin%2Dleft%3A%2D50%25%3Bmargin%2Dtop%3A%2D25px%3Bpadding%2Dtop%3A20px%3Btext%2Dalign%3Acenter%3Bfont%2Dsize%3A1%2E2em%3Bbackground%2Dcolor%3Awhite%3Bbackground%3A%2Dwebkit%2Dgradient%28linear%2C%20left%20top%2C%20right%20top%2C%20color%2Dstop%280%25%2C%20rgba%28255%2C255%2C255%2C0%29%29%2C%20color%2Dstop%2825%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%29%2C%20color%2Dstop%2875%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%29%2C%20color%2Dstop%28100%25%2C%20rgba%28255%2C255%2C255%2C0%29%29%29%3Bbackground%3A%2Dwebkit%2Dlinear%2Dgradient%28left%2C%20rgba%28255%2C255%2C255%2C0%29%200%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2025%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2075%25%2C%20rgba%28255%2C255%2C255%2C0%29%20100%25%29%3Bbackground%3A%2Dmoz%2Dlinear%2Dgradient%28left%2C%20rgba%28255%2C255%2C255%2C0%29%200%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2025%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2075%25%2C%20rgba%28255%2C255%2C255%2C0%29%20100%25%29%3Bbackground%3A%2Dms%2Dlinear%2Dgradient%28left%2C%20rgba%28255%2C255%2C255%2C0%29%200%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2025%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2075%25%2C%20rgba%28255%2C255%2C255%2C0%29%20100%25%29%3Bbackground%3A%2Do%2Dlinear%2Dgradient%28left%2C%20rgba%28255%2C255%2C255%2C0%29%200%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2025%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2075%25%2C%20rgba%28255%2C255%2C255%2C0%29%20100%25%29%3Bbackground%3Alinear%2Dgradient%28to%20right%2C%20rgba%28255%2C255%2C255%2C0%29%200%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2025%25%2C%20rgba%28255%2C255%2C255%2C0%2E9%29%2075%25%2C%20rgba%28255%2C255%2C255%2C0%29%20100%25%29%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Flength%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Ffilter%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Finfo%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fprocessing%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%7Bcolor%3A%23333%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%7Bclear%3Aboth%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%7B%2Amargin%2Dtop%3A%2D1px%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Ethead%3Etr%3Eth%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Ethead%3Etr%3Etd%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Etbody%3Etr%3Eth%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Etbody%3Etr%3Etd%7Bvertical%2Dalign%3Amiddle%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Ethead%3Etr%3Eth%3Ediv%2EdataTables%5Fsizing%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Ethead%3Etr%3Etd%3Ediv%2EdataTables%5Fsizing%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Etbody%3Etr%3Eth%3Ediv%2EdataTables%5Fsizing%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fscroll%20div%2EdataTables%5FscrollBody%3Etable%3Etbody%3Etr%3Etd%3Ediv%2EdataTables%5Fsizing%7Bheight%3A0%3Boverflow%3Ahidden%3Bmargin%3A0%20%21important%3Bpadding%3A0%20%21important%7D%2EdataTables%5Fwrapper%2Eno%2Dfooter%20%2EdataTables%5FscrollBody%7Bborder%2Dbottom%3A1px%20solid%20%23111%7D%2EdataTables%5Fwrapper%2Eno%2Dfooter%20div%2EdataTables%5FscrollHead%20table%2EdataTable%2C%2EdataTables%5Fwrapper%2Eno%2Dfooter%20div%2EdataTables%5FscrollBody%3Etable%7Bborder%2Dbottom%3Anone%7D%2EdataTables%5Fwrapper%3Aafter%7Bvisibility%3Ahidden%3Bdisplay%3Ablock%3Bcontent%3A%22%22%3Bclear%3Aboth%3Bheight%3A0%7D%40media%20screen%20and%20%28max%2Dwidth%3A%20767px%29%7B%2EdataTables%5Fwrapper%20%2EdataTables%5Finfo%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%7Bfloat%3Anone%3Btext%2Dalign%3Acenter%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Fpaginate%7Bmargin%2Dtop%3A0%2E5em%7D%7D%40media%20screen%20and%20%28max%2Dwidth%3A%20640px%29%7B%2EdataTables%5Fwrapper%20%2EdataTables%5Flength%2C%2EdataTables%5Fwrapper%20%2EdataTables%5Ffilter%7Bfloat%3Anone%3Btext%2Dalign%3Acenter%7D%2EdataTables%5Fwrapper%20%2EdataTables%5Ffilter%7Bmargin%2Dtop%3A0%2E5em%7D%7D%0A" rel="stylesheet" />
<link href="data:text/css,%0Atable%2EdataTable%20tr%2Eselected%20td%2C%20table%2EdataTable%20td%2Eselected%20%7B%0Abackground%2Dcolor%3A%20%23b0bed9%20%21important%3B%0A%7D%0A%0A%2EdataTables%5FscrollBody%20%2EdataTables%5Fsizing%20%7B%0Avisibility%3A%20hidden%3B%0A%7D%0A%0Adiv%2Edatatables%20%7B%0Acolor%3A%20%23333%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,LyohCiAgIENvcHlyaWdodCAyMDA4LTIwMTkgU3ByeU1lZGlhIEx0ZC4KCiBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGF2YWlsYWJsZSB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CiAgIE1JVCBsaWNlbnNlIC0gaHR0cDovL2RhdGF0YWJsZXMubmV0L2xpY2Vuc2UKCiBUaGlzIHNvdXJjZSBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIGxpY2Vuc2UgZmlsZXMgZm9yIGRldGFpbHMuCgogRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvOiBodHRwOi8vd3d3LmRhdGF0YWJsZXMubmV0CiBEYXRhVGFibGVzIDEuMTAuMjAKIMKpMjAwOC0yMDE5IFNwcnlNZWRpYSBMdGQgLSBkYXRhdGFibGVzLm5ldC9saWNlbnNlCiovCnZhciAkanNjb21wPSRqc2NvbXB8fHt9OyRqc2NvbXAuc2NvcGU9e307JGpzY29tcC5maW5kSW50ZXJuYWw9ZnVuY3Rpb24oZix6LHkpe2YgaW5zdGFuY2VvZiBTdHJpbmcmJihmPVN0cmluZyhmKSk7Zm9yKHZhciBwPWYubGVuZ3RoLEg9MDtIPHA7SCsrKXt2YXIgTD1mW0hdO2lmKHouY2FsbCh5LEwsSCxmKSlyZXR1cm57aTpILHY6TH19cmV0dXJue2k6LTEsdjp2b2lkIDB9fTskanNjb21wLkFTU1VNRV9FUzU9ITE7JGpzY29tcC5BU1NVTUVfTk9fTkFUSVZFX01BUD0hMTskanNjb21wLkFTU1VNRV9OT19OQVRJVkVfU0VUPSExOyRqc2NvbXAuU0lNUExFX0ZST1VORF9QT0xZRklMTD0hMTsKJGpzY29tcC5kZWZpbmVQcm9wZXJ0eT0kanNjb21wLkFTU1VNRV9FUzV8fCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZix6LHkpe2YhPUFycmF5LnByb3RvdHlwZSYmZiE9T2JqZWN0LnByb3RvdHlwZSYmKGZbel09eS52YWx1ZSl9OyRqc2NvbXAuZ2V0R2xvYmFsPWZ1bmN0aW9uKGYpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3c9PT1mP2Y6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwmJm51bGwhPWdsb2JhbD9nbG9iYWw6Zn07JGpzY29tcC5nbG9iYWw9JGpzY29tcC5nZXRHbG9iYWwodGhpcyk7CiRqc2NvbXAucG9seWZpbGw9ZnVuY3Rpb24oZix6LHkscCl7aWYoeil7eT0kanNjb21wLmdsb2JhbDtmPWYuc3BsaXQoIi4iKTtmb3IocD0wO3A8Zi5sZW5ndGgtMTtwKyspe3ZhciBIPWZbcF07SCBpbiB5fHwoeVtIXT17fSk7eT15W0hdfWY9ZltmLmxlbmd0aC0xXTtwPXlbZl07ej16KHApO3ohPXAmJm51bGwhPXomJiRqc2NvbXAuZGVmaW5lUHJvcGVydHkoeSxmLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6en0pfX07JGpzY29tcC5wb2x5ZmlsbCgiQXJyYXkucHJvdG90eXBlLmZpbmQiLGZ1bmN0aW9uKGYpe3JldHVybiBmP2Y6ZnVuY3Rpb24oZix5KXtyZXR1cm4gJGpzY29tcC5maW5kSW50ZXJuYWwodGhpcyxmLHkpLnZ9fSwiZXM2IiwiZXMzIik7CihmdW5jdGlvbihmKXsiZnVuY3Rpb24iPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJqcXVlcnkiXSxmdW5jdGlvbih6KXtyZXR1cm4gZih6LHdpbmRvdyxkb2N1bWVudCl9KToib2JqZWN0Ij09PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHoseSl7enx8KHo9d2luZG93KTt5fHwoeT0idW5kZWZpbmVkIiE9PXR5cGVvZiB3aW5kb3c/cmVxdWlyZSgianF1ZXJ5Iik6cmVxdWlyZSgianF1ZXJ5IikoeikpO3JldHVybiBmKHkseix6LmRvY3VtZW50KX06ZihqUXVlcnksd2luZG93LGRvY3VtZW50KX0pKGZ1bmN0aW9uKGYseix5LHApe2Z1bmN0aW9uIEgoYSl7dmFyIGIsYyxkPXt9O2YuZWFjaChhLGZ1bmN0aW9uKGUsaCl7KGI9ZS5tYXRjaCgvXihbXkEtWl0rPykoW0EtWl0pLykpJiYtMSE9PSJhIGFhIGFpIGFvIGFzIGIgZm4gaSBtIG8gcyAiLmluZGV4T2YoYlsxXSsiICIpJiYoYz1lLnJlcGxhY2UoYlswXSxiWzJdLnRvTG93ZXJDYXNlKCkpLApkW2NdPWUsIm8iPT09YlsxXSYmSChhW2VdKSl9KTthLl9odW5nYXJpYW5NYXA9ZH1mdW5jdGlvbiBMKGEsYixjKXthLl9odW5nYXJpYW5NYXB8fEgoYSk7dmFyIGQ7Zi5lYWNoKGIsZnVuY3Rpb24oZSxoKXtkPWEuX2h1bmdhcmlhbk1hcFtlXTtkPT09cHx8IWMmJmJbZF0hPT1wfHwoIm8iPT09ZC5jaGFyQXQoMCk/KGJbZF18fChiW2RdPXt9KSxmLmV4dGVuZCghMCxiW2RdLGJbZV0pLEwoYVtkXSxiW2RdLGMpKTpiW2RdPWJbZV0pfSl9ZnVuY3Rpb24gR2EoYSl7dmFyIGI9cS5kZWZhdWx0cy5vTGFuZ3VhZ2UsYz1iLnNEZWNpbWFsO2MmJkhhKGMpO2lmKGEpe3ZhciBkPWEuc1plcm9SZWNvcmRzOyFhLnNFbXB0eVRhYmxlJiZkJiYiTm8gZGF0YSBhdmFpbGFibGUgaW4gdGFibGUiPT09Yi5zRW1wdHlUYWJsZSYmTShhLGEsInNaZXJvUmVjb3JkcyIsInNFbXB0eVRhYmxlIik7IWEuc0xvYWRpbmdSZWNvcmRzJiZkJiYiTG9hZGluZy4uLiI9PT1iLnNMb2FkaW5nUmVjb3JkcyYmTShhLGEsCiJzWmVyb1JlY29yZHMiLCJzTG9hZGluZ1JlY29yZHMiKTthLnNJbmZvVGhvdXNhbmRzJiYoYS5zVGhvdXNhbmRzPWEuc0luZm9UaG91c2FuZHMpOyhhPWEuc0RlY2ltYWwpJiZjIT09YSYmSGEoYSl9fWZ1bmN0aW9uIGpiKGEpe0YoYSwib3JkZXJpbmciLCJiU29ydCIpO0YoYSwib3JkZXJNdWx0aSIsImJTb3J0TXVsdGkiKTtGKGEsIm9yZGVyQ2xhc3NlcyIsImJTb3J0Q2xhc3NlcyIpO0YoYSwib3JkZXJDZWxsc1RvcCIsImJTb3J0Q2VsbHNUb3AiKTtGKGEsIm9yZGVyIiwiYWFTb3J0aW5nIik7RihhLCJvcmRlckZpeGVkIiwiYWFTb3J0aW5nRml4ZWQiKTtGKGEsInBhZ2luZyIsImJQYWdpbmF0ZSIpO0YoYSwicGFnaW5nVHlwZSIsInNQYWdpbmF0aW9uVHlwZSIpO0YoYSwicGFnZUxlbmd0aCIsImlEaXNwbGF5TGVuZ3RoIik7RihhLCJzZWFyY2hpbmciLCJiRmlsdGVyIik7ImJvb2xlYW4iPT09dHlwZW9mIGEuc1Njcm9sbFgmJihhLnNTY3JvbGxYPWEuc1Njcm9sbFg/IjEwMCUiOgoiIik7ImJvb2xlYW4iPT09dHlwZW9mIGEuc2Nyb2xsWCYmKGEuc2Nyb2xsWD1hLnNjcm9sbFg/IjEwMCUiOiIiKTtpZihhPWEuYW9TZWFyY2hDb2xzKWZvcih2YXIgYj0wLGM9YS5sZW5ndGg7YjxjO2IrKylhW2JdJiZMKHEubW9kZWxzLm9TZWFyY2gsYVtiXSl9ZnVuY3Rpb24ga2IoYSl7RihhLCJvcmRlcmFibGUiLCJiU29ydGFibGUiKTtGKGEsIm9yZGVyRGF0YSIsImFEYXRhU29ydCIpO0YoYSwib3JkZXJTZXF1ZW5jZSIsImFzU29ydGluZyIpO0YoYSwib3JkZXJEYXRhVHlwZSIsInNvcnREYXRhVHlwZSIpO3ZhciBiPWEuYURhdGFTb3J0OyJudW1iZXIiIT09dHlwZW9mIGJ8fGYuaXNBcnJheShiKXx8KGEuYURhdGFTb3J0PVtiXSl9ZnVuY3Rpb24gbGIoYSl7aWYoIXEuX19icm93c2VyKXt2YXIgYj17fTtxLl9fYnJvd3Nlcj1iO3ZhciBjPWYoIjxkaXYvPiIpLmNzcyh7cG9zaXRpb246ImZpeGVkIix0b3A6MCxsZWZ0Oi0xKmYoeikuc2Nyb2xsTGVmdCgpLGhlaWdodDoxLHdpZHRoOjEsCm92ZXJmbG93OiJoaWRkZW4ifSkuYXBwZW5kKGYoIjxkaXYvPiIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MSxsZWZ0OjEsd2lkdGg6MTAwLG92ZXJmbG93OiJzY3JvbGwifSkuYXBwZW5kKGYoIjxkaXYvPiIpLmNzcyh7d2lkdGg6IjEwMCUiLGhlaWdodDoxMH0pKSkuYXBwZW5kVG8oImJvZHkiKSxkPWMuY2hpbGRyZW4oKSxlPWQuY2hpbGRyZW4oKTtiLmJhcldpZHRoPWRbMF0ub2Zmc2V0V2lkdGgtZFswXS5jbGllbnRXaWR0aDtiLmJTY3JvbGxPdmVyc2l6ZT0xMDA9PT1lWzBdLm9mZnNldFdpZHRoJiYxMDAhPT1kWzBdLmNsaWVudFdpZHRoO2IuYlNjcm9sbGJhckxlZnQ9MSE9PU1hdGgucm91bmQoZS5vZmZzZXQoKS5sZWZ0KTtiLmJCb3VuZGluZz1jWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoPyEwOiExO2MucmVtb3ZlKCl9Zi5leHRlbmQoYS5vQnJvd3NlcixxLl9fYnJvd3Nlcik7YS5vU2Nyb2xsLmlCYXJXaWR0aD1xLl9fYnJvd3Nlci5iYXJXaWR0aH0KZnVuY3Rpb24gbWIoYSxiLGMsZCxlLGgpe3ZhciBnPSExO2lmKGMhPT1wKXt2YXIgaz1jO2c9ITB9Zm9yKDtkIT09ZTspYS5oYXNPd25Qcm9wZXJ0eShkKSYmKGs9Zz9iKGssYVtkXSxkLGEpOmFbZF0sZz0hMCxkKz1oKTtyZXR1cm4ga31mdW5jdGlvbiBJYShhLGIpe3ZhciBjPXEuZGVmYXVsdHMuY29sdW1uLGQ9YS5hb0NvbHVtbnMubGVuZ3RoO2M9Zi5leHRlbmQoe30scS5tb2RlbHMub0NvbHVtbixjLHtuVGg6Yj9iOnkuY3JlYXRlRWxlbWVudCgidGgiKSxzVGl0bGU6Yy5zVGl0bGU/Yy5zVGl0bGU6Yj9iLmlubmVySFRNTDoiIixhRGF0YVNvcnQ6Yy5hRGF0YVNvcnQ/Yy5hRGF0YVNvcnQ6W2RdLG1EYXRhOmMubURhdGE/Yy5tRGF0YTpkLGlkeDpkfSk7YS5hb0NvbHVtbnMucHVzaChjKTtjPWEuYW9QcmVTZWFyY2hDb2xzO2NbZF09Zi5leHRlbmQoe30scS5tb2RlbHMub1NlYXJjaCxjW2RdKTttYShhLGQsZihiKS5kYXRhKCkpfWZ1bmN0aW9uIG1hKGEsYixjKXtiPWEuYW9Db2x1bW5zW2JdOwp2YXIgZD1hLm9DbGFzc2VzLGU9ZihiLm5UaCk7aWYoIWIuc1dpZHRoT3JpZyl7Yi5zV2lkdGhPcmlnPWUuYXR0cigid2lkdGgiKXx8bnVsbDt2YXIgaD0oZS5hdHRyKCJzdHlsZSIpfHwiIikubWF0Y2goL3dpZHRoOlxzKihcZCtbcHhlbSVdKykvKTtoJiYoYi5zV2lkdGhPcmlnPWhbMV0pfWMhPT1wJiZudWxsIT09YyYmKGtiKGMpLEwocS5kZWZhdWx0cy5jb2x1bW4sYywhMCksYy5tRGF0YVByb3A9PT1wfHxjLm1EYXRhfHwoYy5tRGF0YT1jLm1EYXRhUHJvcCksYy5zVHlwZSYmKGIuX3NNYW51YWxUeXBlPWMuc1R5cGUpLGMuY2xhc3NOYW1lJiYhYy5zQ2xhc3MmJihjLnNDbGFzcz1jLmNsYXNzTmFtZSksYy5zQ2xhc3MmJmUuYWRkQ2xhc3MoYy5zQ2xhc3MpLGYuZXh0ZW5kKGIsYyksTShiLGMsInNXaWR0aCIsInNXaWR0aE9yaWciKSxjLmlEYXRhU29ydCE9PXAmJihiLmFEYXRhU29ydD1bYy5pRGF0YVNvcnRdKSxNKGIsYywiYURhdGFTb3J0IikpO3ZhciBnPWIubURhdGEsaz1VKGcpLApsPWIubVJlbmRlcj9VKGIubVJlbmRlcik6bnVsbDtjPWZ1bmN0aW9uKGEpe3JldHVybiJzdHJpbmciPT09dHlwZW9mIGEmJi0xIT09YS5pbmRleE9mKCJAIil9O2IuX2JBdHRyU3JjPWYuaXNQbGFpbk9iamVjdChnKSYmKGMoZy5zb3J0KXx8YyhnLnR5cGUpfHxjKGcuZmlsdGVyKSk7Yi5fc2V0dGVyPW51bGw7Yi5mbkdldERhdGE9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWsoYSxiLHAsYyk7cmV0dXJuIGwmJmI/bChkLGIsYSxjKTpkfTtiLmZuU2V0RGF0YT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIFEoZykoYSxiLGMpfTsibnVtYmVyIiE9PXR5cGVvZiBnJiYoYS5fcm93UmVhZE9iamVjdD0hMCk7YS5vRmVhdHVyZXMuYlNvcnR8fChiLmJTb3J0YWJsZT0hMSxlLmFkZENsYXNzKGQuc1NvcnRhYmxlTm9uZSkpO2E9LTEhPT1mLmluQXJyYXkoImFzYyIsYi5hc1NvcnRpbmcpO2M9LTEhPT1mLmluQXJyYXkoImRlc2MiLGIuYXNTb3J0aW5nKTtiLmJTb3J0YWJsZSYmKGF8fGMpP2EmJiFjPyhiLnNTb3J0aW5nQ2xhc3M9CmQuc1NvcnRhYmxlQXNjLGIuc1NvcnRpbmdDbGFzc0pVST1kLnNTb3J0SlVJQXNjQWxsb3dlZCk6IWEmJmM/KGIuc1NvcnRpbmdDbGFzcz1kLnNTb3J0YWJsZURlc2MsYi5zU29ydGluZ0NsYXNzSlVJPWQuc1NvcnRKVUlEZXNjQWxsb3dlZCk6KGIuc1NvcnRpbmdDbGFzcz1kLnNTb3J0YWJsZSxiLnNTb3J0aW5nQ2xhc3NKVUk9ZC5zU29ydEpVSSk6KGIuc1NvcnRpbmdDbGFzcz1kLnNTb3J0YWJsZU5vbmUsYi5zU29ydGluZ0NsYXNzSlVJPSIiKX1mdW5jdGlvbiBhYShhKXtpZighMSE9PWEub0ZlYXR1cmVzLmJBdXRvV2lkdGgpe3ZhciBiPWEuYW9Db2x1bW5zO0phKGEpO2Zvcih2YXIgYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKyliW2NdLm5UaC5zdHlsZS53aWR0aD1iW2NdLnNXaWR0aH1iPWEub1Njcm9sbDsiIj09PWIuc1kmJiIiPT09Yi5zWHx8bmEoYSk7QShhLG51bGwsImNvbHVtbi1zaXppbmciLFthXSl9ZnVuY3Rpb24gYmEoYSxiKXthPW9hKGEsImJWaXNpYmxlIik7cmV0dXJuIm51bWJlciI9PT0KdHlwZW9mIGFbYl0/YVtiXTpudWxsfWZ1bmN0aW9uIGNhKGEsYil7YT1vYShhLCJiVmlzaWJsZSIpO2I9Zi5pbkFycmF5KGIsYSk7cmV0dXJuLTEhPT1iP2I6bnVsbH1mdW5jdGlvbiBXKGEpe3ZhciBiPTA7Zi5lYWNoKGEuYW9Db2x1bW5zLGZ1bmN0aW9uKGEsZCl7ZC5iVmlzaWJsZSYmIm5vbmUiIT09ZihkLm5UaCkuY3NzKCJkaXNwbGF5IikmJmIrK30pO3JldHVybiBifWZ1bmN0aW9uIG9hKGEsYil7dmFyIGM9W107Zi5tYXAoYS5hb0NvbHVtbnMsZnVuY3Rpb24oYSxlKXthW2JdJiZjLnB1c2goZSl9KTtyZXR1cm4gY31mdW5jdGlvbiBLYShhKXt2YXIgYj1hLmFvQ29sdW1ucyxjPWEuYW9EYXRhLGQ9cS5leHQudHlwZS5kZXRlY3QsZSxoLGc7dmFyIGs9MDtmb3IoZT1iLmxlbmd0aDtrPGU7aysrKXt2YXIgZj1iW2tdO3ZhciBuPVtdO2lmKCFmLnNUeXBlJiZmLl9zTWFudWFsVHlwZSlmLnNUeXBlPWYuX3NNYW51YWxUeXBlO2Vsc2UgaWYoIWYuc1R5cGUpe3ZhciBtPTA7Zm9yKGg9CmQubGVuZ3RoO208aDttKyspe3ZhciB3PTA7Zm9yKGc9Yy5sZW5ndGg7dzxnO3crKyl7blt3XT09PXAmJihuW3ddPUkoYSx3LGssInR5cGUiKSk7dmFyIHU9ZFttXShuW3ddLGEpO2lmKCF1JiZtIT09ZC5sZW5ndGgtMSlicmVhaztpZigiaHRtbCI9PT11KWJyZWFrfWlmKHUpe2Yuc1R5cGU9dTticmVha319Zi5zVHlwZXx8KGYuc1R5cGU9InN0cmluZyIpfX19ZnVuY3Rpb24gbmIoYSxiLGMsZCl7dmFyIGUsaCxnLGs9YS5hb0NvbHVtbnM7aWYoYilmb3IoZT1iLmxlbmd0aC0xOzA8PWU7ZS0tKXt2YXIgbD1iW2VdO3ZhciBuPWwudGFyZ2V0cyE9PXA/bC50YXJnZXRzOmwuYVRhcmdldHM7Zi5pc0FycmF5KG4pfHwobj1bbl0pO3ZhciBtPTA7Zm9yKGg9bi5sZW5ndGg7bTxoO20rKylpZigibnVtYmVyIj09PXR5cGVvZiBuW21dJiYwPD1uW21dKXtmb3IoO2subGVuZ3RoPD1uW21dOylJYShhKTtkKG5bbV0sbCl9ZWxzZSBpZigibnVtYmVyIj09PXR5cGVvZiBuW21dJiYwPm5bbV0pZChrLmxlbmd0aCsKblttXSxsKTtlbHNlIGlmKCJzdHJpbmciPT09dHlwZW9mIG5bbV0pe3ZhciB3PTA7Zm9yKGc9ay5sZW5ndGg7dzxnO3crKykoIl9hbGwiPT1uW21dfHxmKGtbd10ublRoKS5oYXNDbGFzcyhuW21dKSkmJmQodyxsKX19aWYoYylmb3IoZT0wLGE9Yy5sZW5ndGg7ZTxhO2UrKylkKGUsY1tlXSl9ZnVuY3Rpb24gUihhLGIsYyxkKXt2YXIgZT1hLmFvRGF0YS5sZW5ndGgsaD1mLmV4dGVuZCghMCx7fSxxLm1vZGVscy5vUm93LHtzcmM6Yz8iZG9tIjoiZGF0YSIsaWR4OmV9KTtoLl9hRGF0YT1iO2EuYW9EYXRhLnB1c2goaCk7Zm9yKHZhciBnPWEuYW9Db2x1bW5zLGs9MCxsPWcubGVuZ3RoO2s8bDtrKyspZ1trXS5zVHlwZT1udWxsO2EuYWlEaXNwbGF5TWFzdGVyLnB1c2goZSk7Yj1hLnJvd0lkRm4oYik7YiE9PXAmJihhLmFJZHNbYl09aCk7IWMmJmEub0ZlYXR1cmVzLmJEZWZlclJlbmRlcnx8TGEoYSxlLGMsZCk7cmV0dXJuIGV9ZnVuY3Rpb24gcGEoYSxiKXt2YXIgYztiIGluc3RhbmNlb2YKZnx8KGI9ZihiKSk7cmV0dXJuIGIubWFwKGZ1bmN0aW9uKGIsZSl7Yz1NYShhLGUpO3JldHVybiBSKGEsYy5kYXRhLGUsYy5jZWxscyl9KX1mdW5jdGlvbiBJKGEsYixjLGQpe3ZhciBlPWEuaURyYXcsaD1hLmFvQ29sdW1uc1tjXSxnPWEuYW9EYXRhW2JdLl9hRGF0YSxrPWguc0RlZmF1bHRDb250ZW50LGY9aC5mbkdldERhdGEoZyxkLHtzZXR0aW5nczphLHJvdzpiLGNvbDpjfSk7aWYoZj09PXApcmV0dXJuIGEuaURyYXdFcnJvciE9ZSYmbnVsbD09PWsmJihPKGEsMCwiUmVxdWVzdGVkIHVua25vd24gcGFyYW1ldGVyICIrKCJmdW5jdGlvbiI9PXR5cGVvZiBoLm1EYXRhPyJ7ZnVuY3Rpb259IjoiJyIraC5tRGF0YSsiJyIpKyIgZm9yIHJvdyAiK2IrIiwgY29sdW1uICIrYyw0KSxhLmlEcmF3RXJyb3I9ZSksaztpZigoZj09PWd8fG51bGw9PT1mKSYmbnVsbCE9PWsmJmQhPT1wKWY9aztlbHNlIGlmKCJmdW5jdGlvbiI9PT10eXBlb2YgZilyZXR1cm4gZi5jYWxsKGcpO3JldHVybiBudWxsPT09CmYmJiJkaXNwbGF5Ij09ZD8iIjpmfWZ1bmN0aW9uIG9iKGEsYixjLGQpe2EuYW9Db2x1bW5zW2NdLmZuU2V0RGF0YShhLmFvRGF0YVtiXS5fYURhdGEsZCx7c2V0dGluZ3M6YSxyb3c6Yixjb2w6Y30pfWZ1bmN0aW9uIE5hKGEpe3JldHVybiBmLm1hcChhLm1hdGNoKC8oXFwufFteXC5dKSsvZyl8fFsiIl0sZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvXFxcLi9nLCIuIil9KX1mdW5jdGlvbiBVKGEpe2lmKGYuaXNQbGFpbk9iamVjdChhKSl7dmFyIGI9e307Zi5lYWNoKGEsZnVuY3Rpb24oYSxjKXtjJiYoYlthXT1VKGMpKX0pO3JldHVybiBmdW5jdGlvbihhLGMsaCxnKXt2YXIgZD1iW2NdfHxiLl87cmV0dXJuIGQhPT1wP2QoYSxjLGgsZyk6YX19aWYobnVsbD09PWEpcmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhfTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGEpcmV0dXJuIGZ1bmN0aW9uKGIsYyxoLGcpe3JldHVybiBhKGIsYyxoLGcpfTtpZigic3RyaW5nIiE9PXR5cGVvZiBhfHwKLTE9PT1hLmluZGV4T2YoIi4iKSYmLTE9PT1hLmluZGV4T2YoIlsiKSYmLTE9PT1hLmluZGV4T2YoIigiKSlyZXR1cm4gZnVuY3Rpb24oYixjKXtyZXR1cm4gYlthXX07dmFyIGM9ZnVuY3Rpb24oYSxiLGgpe2lmKCIiIT09aCl7dmFyIGQ9TmEoaCk7Zm9yKHZhciBlPTAsbD1kLmxlbmd0aDtlPGw7ZSsrKXtoPWRbZV0ubWF0Y2goZGEpO3ZhciBuPWRbZV0ubWF0Y2goWCk7aWYoaCl7ZFtlXT1kW2VdLnJlcGxhY2UoZGEsIiIpOyIiIT09ZFtlXSYmKGE9YVtkW2VdXSk7bj1bXTtkLnNwbGljZSgwLGUrMSk7ZD1kLmpvaW4oIi4iKTtpZihmLmlzQXJyYXkoYSkpZm9yKGU9MCxsPWEubGVuZ3RoO2U8bDtlKyspbi5wdXNoKGMoYVtlXSxiLGQpKTthPWhbMF0uc3Vic3RyaW5nKDEsaFswXS5sZW5ndGgtMSk7YT0iIj09PWE/bjpuLmpvaW4oYSk7YnJlYWt9ZWxzZSBpZihuKXtkW2VdPWRbZV0ucmVwbGFjZShYLCIiKTthPWFbZFtlXV0oKTtjb250aW51ZX1pZihudWxsPT09YXx8YVtkW2VdXT09PQpwKXJldHVybiBwO2E9YVtkW2VdXX19cmV0dXJuIGF9O3JldHVybiBmdW5jdGlvbihiLGUpe3JldHVybiBjKGIsZSxhKX19ZnVuY3Rpb24gUShhKXtpZihmLmlzUGxhaW5PYmplY3QoYSkpcmV0dXJuIFEoYS5fKTtpZihudWxsPT09YSlyZXR1cm4gZnVuY3Rpb24oKXt9O2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYSlyZXR1cm4gZnVuY3Rpb24oYixkLGUpe2EoYiwic2V0IixkLGUpfTtpZigic3RyaW5nIiE9PXR5cGVvZiBhfHwtMT09PWEuaW5kZXhPZigiLiIpJiYtMT09PWEuaW5kZXhPZigiWyIpJiYtMT09PWEuaW5kZXhPZigiKCIpKXJldHVybiBmdW5jdGlvbihiLGQpe2JbYV09ZH07dmFyIGI9ZnVuY3Rpb24oYSxkLGUpe2U9TmEoZSk7dmFyIGM9ZVtlLmxlbmd0aC0xXTtmb3IodmFyIGcsayxsPTAsbj1lLmxlbmd0aC0xO2w8bjtsKyspe2c9ZVtsXS5tYXRjaChkYSk7az1lW2xdLm1hdGNoKFgpO2lmKGcpe2VbbF09ZVtsXS5yZXBsYWNlKGRhLCIiKTthW2VbbF1dPVtdO2M9ZS5zbGljZSgpOwpjLnNwbGljZSgwLGwrMSk7Zz1jLmpvaW4oIi4iKTtpZihmLmlzQXJyYXkoZCkpZm9yKGs9MCxuPWQubGVuZ3RoO2s8bjtrKyspYz17fSxiKGMsZFtrXSxnKSxhW2VbbF1dLnB1c2goYyk7ZWxzZSBhW2VbbF1dPWQ7cmV0dXJufWsmJihlW2xdPWVbbF0ucmVwbGFjZShYLCIiKSxhPWFbZVtsXV0oZCkpO2lmKG51bGw9PT1hW2VbbF1dfHxhW2VbbF1dPT09cClhW2VbbF1dPXt9O2E9YVtlW2xdXX1pZihjLm1hdGNoKFgpKWFbYy5yZXBsYWNlKFgsIiIpXShkKTtlbHNlIGFbYy5yZXBsYWNlKGRhLCIiKV09ZH07cmV0dXJuIGZ1bmN0aW9uKGMsZCl7cmV0dXJuIGIoYyxkLGEpfX1mdW5jdGlvbiBPYShhKXtyZXR1cm4gSihhLmFvRGF0YSwiX2FEYXRhIil9ZnVuY3Rpb24gcWEoYSl7YS5hb0RhdGEubGVuZ3RoPTA7YS5haURpc3BsYXlNYXN0ZXIubGVuZ3RoPTA7YS5haURpc3BsYXkubGVuZ3RoPTA7YS5hSWRzPXt9fWZ1bmN0aW9uIHJhKGEsYixjKXtmb3IodmFyIGQ9LTEsZT0wLGg9YS5sZW5ndGg7ZTwKaDtlKyspYVtlXT09Yj9kPWU6YVtlXT5iJiZhW2VdLS07IC0xIT1kJiZjPT09cCYmYS5zcGxpY2UoZCwxKX1mdW5jdGlvbiBlYShhLGIsYyxkKXt2YXIgZT1hLmFvRGF0YVtiXSxoLGc9ZnVuY3Rpb24oYyxkKXtmb3IoO2MuY2hpbGROb2Rlcy5sZW5ndGg7KWMucmVtb3ZlQ2hpbGQoYy5maXJzdENoaWxkKTtjLmlubmVySFRNTD1JKGEsYixkLCJkaXNwbGF5Iil9O2lmKCJkb20iIT09YyYmKGMmJiJhdXRvIiE9PWN8fCJkb20iIT09ZS5zcmMpKXt2YXIgaz1lLmFuQ2VsbHM7aWYoaylpZihkIT09cClnKGtbZF0sZCk7ZWxzZSBmb3IoYz0wLGg9ay5sZW5ndGg7YzxoO2MrKylnKGtbY10sYyl9ZWxzZSBlLl9hRGF0YT1NYShhLGUsZCxkPT09cD9wOmUuX2FEYXRhKS5kYXRhO2UuX2FTb3J0RGF0YT1udWxsO2UuX2FGaWx0ZXJEYXRhPW51bGw7Zz1hLmFvQ29sdW1ucztpZihkIT09cClnW2RdLnNUeXBlPW51bGw7ZWxzZXtjPTA7Zm9yKGg9Zy5sZW5ndGg7YzxoO2MrKylnW2NdLnNUeXBlPW51bGw7ClBhKGEsZSl9fWZ1bmN0aW9uIE1hKGEsYixjLGQpe3ZhciBlPVtdLGg9Yi5maXJzdENoaWxkLGcsaz0wLGwsbj1hLmFvQ29sdW1ucyxtPWEuX3Jvd1JlYWRPYmplY3Q7ZD1kIT09cD9kOm0/e306W107dmFyIHc9ZnVuY3Rpb24oYSxiKXtpZigic3RyaW5nIj09PXR5cGVvZiBhKXt2YXIgYz1hLmluZGV4T2YoIkAiKTstMSE9PWMmJihjPWEuc3Vic3RyaW5nKGMrMSksUShhKShkLGIuZ2V0QXR0cmlidXRlKGMpKSl9fSx1PWZ1bmN0aW9uKGEpe2lmKGM9PT1wfHxjPT09aylnPW5ba10sbD1mLnRyaW0oYS5pbm5lckhUTUwpLGcmJmcuX2JBdHRyU3JjPyhRKGcubURhdGEuXykoZCxsKSx3KGcubURhdGEuc29ydCxhKSx3KGcubURhdGEudHlwZSxhKSx3KGcubURhdGEuZmlsdGVyLGEpKTptPyhnLl9zZXR0ZXJ8fChnLl9zZXR0ZXI9UShnLm1EYXRhKSksZy5fc2V0dGVyKGQsbCkpOmRba109bDtrKyt9O2lmKGgpZm9yKDtoOyl7dmFyIHE9aC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO2lmKCJURCI9PQpxfHwiVEgiPT1xKXUoaCksZS5wdXNoKGgpO2g9aC5uZXh0U2libGluZ31lbHNlIGZvcihlPWIuYW5DZWxscyxoPTAscT1lLmxlbmd0aDtoPHE7aCsrKXUoZVtoXSk7KGI9Yi5maXJzdENoaWxkP2I6Yi5uVHIpJiYoYj1iLmdldEF0dHJpYnV0ZSgiaWQiKSkmJlEoYS5yb3dJZCkoZCxiKTtyZXR1cm57ZGF0YTpkLGNlbGxzOmV9fWZ1bmN0aW9uIExhKGEsYixjLGQpe3ZhciBlPWEuYW9EYXRhW2JdLGg9ZS5fYURhdGEsZz1bXSxrLGw7aWYobnVsbD09PWUublRyKXt2YXIgbj1jfHx5LmNyZWF0ZUVsZW1lbnQoInRyIik7ZS5uVHI9bjtlLmFuQ2VsbHM9ZztuLl9EVF9Sb3dJbmRleD1iO1BhKGEsZSk7dmFyIG09MDtmb3Ioaz1hLmFvQ29sdW1ucy5sZW5ndGg7bTxrO20rKyl7dmFyIHc9YS5hb0NvbHVtbnNbbV07dmFyIHA9KGw9Yz8hMTohMCk/eS5jcmVhdGVFbGVtZW50KHcuc0NlbGxUeXBlKTpkW21dO3AuX0RUX0NlbGxJbmRleD17cm93OmIsY29sdW1uOm19O2cucHVzaChwKTtpZihsfHwKIShjJiYhdy5tUmVuZGVyJiZ3Lm1EYXRhPT09bXx8Zi5pc1BsYWluT2JqZWN0KHcubURhdGEpJiZ3Lm1EYXRhLl89PT1tKyIuZGlzcGxheSIpKXAuaW5uZXJIVE1MPUkoYSxiLG0sImRpc3BsYXkiKTt3LnNDbGFzcyYmKHAuY2xhc3NOYW1lKz0iICIrdy5zQ2xhc3MpO3cuYlZpc2libGUmJiFjP24uYXBwZW5kQ2hpbGQocCk6IXcuYlZpc2libGUmJmMmJnAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwKTt3LmZuQ3JlYXRlZENlbGwmJncuZm5DcmVhdGVkQ2VsbC5jYWxsKGEub0luc3RhbmNlLHAsSShhLGIsbSksaCxiLG0pfUEoYSwiYW9Sb3dDcmVhdGVkQ2FsbGJhY2siLG51bGwsW24saCxiLGddKX1lLm5Uci5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKX1mdW5jdGlvbiBQYShhLGIpe3ZhciBjPWIublRyLGQ9Yi5fYURhdGE7aWYoYyl7aWYoYT1hLnJvd0lkRm4oZCkpYy5pZD1hO2QuRFRfUm93Q2xhc3MmJihhPWQuRFRfUm93Q2xhc3Muc3BsaXQoIiAiKSxiLl9fcm93Yz1iLl9fcm93Yz8KdGEoYi5fX3Jvd2MuY29uY2F0KGEpKTphLGYoYykucmVtb3ZlQ2xhc3MoYi5fX3Jvd2Muam9pbigiICIpKS5hZGRDbGFzcyhkLkRUX1Jvd0NsYXNzKSk7ZC5EVF9Sb3dBdHRyJiZmKGMpLmF0dHIoZC5EVF9Sb3dBdHRyKTtkLkRUX1Jvd0RhdGEmJmYoYykuZGF0YShkLkRUX1Jvd0RhdGEpfX1mdW5jdGlvbiBwYihhKXt2YXIgYixjLGQ9YS5uVEhlYWQsZT1hLm5URm9vdCxoPTA9PT1mKCJ0aCwgdGQiLGQpLmxlbmd0aCxnPWEub0NsYXNzZXMsaz1hLmFvQ29sdW1ucztoJiYoYz1mKCI8dHIvPiIpLmFwcGVuZFRvKGQpKTt2YXIgbD0wO2ZvcihiPWsubGVuZ3RoO2w8YjtsKyspe3ZhciBuPWtbbF07dmFyIG09ZihuLm5UaCkuYWRkQ2xhc3Mobi5zQ2xhc3MpO2gmJm0uYXBwZW5kVG8oYyk7YS5vRmVhdHVyZXMuYlNvcnQmJihtLmFkZENsYXNzKG4uc1NvcnRpbmdDbGFzcyksITEhPT1uLmJTb3J0YWJsZSYmKG0uYXR0cigidGFiaW5kZXgiLGEuaVRhYkluZGV4KS5hdHRyKCJhcmlhLWNvbnRyb2xzIiwKYS5zVGFibGVJZCksUWEoYSxuLm5UaCxsKSkpO24uc1RpdGxlIT1tWzBdLmlubmVySFRNTCYmbS5odG1sKG4uc1RpdGxlKTtSYShhLCJoZWFkZXIiKShhLG0sbixnKX1oJiZmYShhLmFvSGVhZGVyLGQpO2YoZCkuZmluZCgiPnRyIikuYXR0cigicm9sZSIsInJvdyIpO2YoZCkuZmluZCgiPnRyPnRoLCA+dHI+dGQiKS5hZGRDbGFzcyhnLnNIZWFkZXJUSCk7ZihlKS5maW5kKCI+dHI+dGgsID50cj50ZCIpLmFkZENsYXNzKGcuc0Zvb3RlclRIKTtpZihudWxsIT09ZSlmb3IoYT1hLmFvRm9vdGVyWzBdLGw9MCxiPWEubGVuZ3RoO2w8YjtsKyspbj1rW2xdLG4ublRmPWFbbF0uY2VsbCxuLnNDbGFzcyYmZihuLm5UZikuYWRkQ2xhc3Mobi5zQ2xhc3MpfWZ1bmN0aW9uIGhhKGEsYixjKXt2YXIgZCxlLGg9W10sZz1bXSxrPWEuYW9Db2x1bW5zLmxlbmd0aDtpZihiKXtjPT09cCYmKGM9ITEpO3ZhciBsPTA7Zm9yKGQ9Yi5sZW5ndGg7bDxkO2wrKyl7aFtsXT1iW2xdLnNsaWNlKCk7aFtsXS5uVHI9CmJbbF0ublRyO2ZvcihlPWstMTswPD1lO2UtLSlhLmFvQ29sdW1uc1tlXS5iVmlzaWJsZXx8Y3x8aFtsXS5zcGxpY2UoZSwxKTtnLnB1c2goW10pfWw9MDtmb3IoZD1oLmxlbmd0aDtsPGQ7bCsrKXtpZihhPWhbbF0ublRyKWZvcig7ZT1hLmZpcnN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoZSk7ZT0wO2ZvcihiPWhbbF0ubGVuZ3RoO2U8YjtlKyspe3ZhciBuPWs9MTtpZihnW2xdW2VdPT09cCl7YS5hcHBlbmRDaGlsZChoW2xdW2VdLmNlbGwpO2ZvcihnW2xdW2VdPTE7aFtsK2tdIT09cCYmaFtsXVtlXS5jZWxsPT1oW2wra11bZV0uY2VsbDspZ1tsK2tdW2VdPTEsaysrO2Zvcig7aFtsXVtlK25dIT09cCYmaFtsXVtlXS5jZWxsPT1oW2xdW2Urbl0uY2VsbDspe2ZvcihjPTA7YzxrO2MrKylnW2wrY11bZStuXT0xO24rK31mKGhbbF1bZV0uY2VsbCkuYXR0cigicm93c3BhbiIsaykuYXR0cigiY29sc3BhbiIsbil9fX19fWZ1bmN0aW9uIFMoYSl7dmFyIGI9QShhLCJhb1ByZURyYXdDYWxsYmFjayIsCiJwcmVEcmF3IixbYV0pO2lmKC0xIT09Zi5pbkFycmF5KCExLGIpKUsoYSwhMSk7ZWxzZXtiPVtdO3ZhciBjPTAsZD1hLmFzU3RyaXBlQ2xhc3NlcyxlPWQubGVuZ3RoLGg9YS5vTGFuZ3VhZ2UsZz1hLmlJbml0RGlzcGxheVN0YXJ0LGs9InNzcCI9PUQoYSksbD1hLmFpRGlzcGxheTthLmJEcmF3aW5nPSEwO2chPT1wJiYtMSE9PWcmJihhLl9pRGlzcGxheVN0YXJ0PWs/ZzpnPj1hLmZuUmVjb3Jkc0Rpc3BsYXkoKT8wOmcsYS5pSW5pdERpc3BsYXlTdGFydD0tMSk7Zz1hLl9pRGlzcGxheVN0YXJ0O3ZhciBuPWEuZm5EaXNwbGF5RW5kKCk7aWYoYS5iRGVmZXJMb2FkaW5nKWEuYkRlZmVyTG9hZGluZz0hMSxhLmlEcmF3KyssSyhhLCExKTtlbHNlIGlmKCFrKWEuaURyYXcrKztlbHNlIGlmKCFhLmJEZXN0cm95aW5nJiYhcWIoYSkpcmV0dXJuO2lmKDAhPT1sLmxlbmd0aClmb3IoaD1rP2EuYW9EYXRhLmxlbmd0aDpuLGs9az8wOmc7azxoO2srKyl7dmFyIG09bFtrXSx3PWEuYW9EYXRhW21dOwpudWxsPT09dy5uVHImJkxhKGEsbSk7dmFyIHU9dy5uVHI7aWYoMCE9PWUpe3ZhciBxPWRbYyVlXTt3Ll9zUm93U3RyaXBlIT1xJiYoZih1KS5yZW1vdmVDbGFzcyh3Ll9zUm93U3RyaXBlKS5hZGRDbGFzcyhxKSx3Ll9zUm93U3RyaXBlPXEpfUEoYSwiYW9Sb3dDYWxsYmFjayIsbnVsbCxbdSx3Ll9hRGF0YSxjLGssbV0pO2IucHVzaCh1KTtjKyt9ZWxzZSBjPWguc1plcm9SZWNvcmRzLDE9PWEuaURyYXcmJiJhamF4Ij09RChhKT9jPWguc0xvYWRpbmdSZWNvcmRzOmguc0VtcHR5VGFibGUmJjA9PT1hLmZuUmVjb3Jkc1RvdGFsKCkmJihjPWguc0VtcHR5VGFibGUpLGJbMF09ZigiPHRyLz4iLHsiY2xhc3MiOmU/ZFswXToiIn0pLmFwcGVuZChmKCI8dGQgLz4iLHt2YWxpZ246InRvcCIsY29sU3BhbjpXKGEpLCJjbGFzcyI6YS5vQ2xhc3Nlcy5zUm93RW1wdHl9KS5odG1sKGMpKVswXTtBKGEsImFvSGVhZGVyQ2FsbGJhY2siLCJoZWFkZXIiLFtmKGEublRIZWFkKS5jaGlsZHJlbigidHIiKVswXSwKT2EoYSksZyxuLGxdKTtBKGEsImFvRm9vdGVyQ2FsbGJhY2siLCJmb290ZXIiLFtmKGEublRGb290KS5jaGlsZHJlbigidHIiKVswXSxPYShhKSxnLG4sbF0pO2Q9ZihhLm5UQm9keSk7ZC5jaGlsZHJlbigpLmRldGFjaCgpO2QuYXBwZW5kKGYoYikpO0EoYSwiYW9EcmF3Q2FsbGJhY2siLCJkcmF3IixbYV0pO2EuYlNvcnRlZD0hMTthLmJGaWx0ZXJlZD0hMTthLmJEcmF3aW5nPSExfX1mdW5jdGlvbiBWKGEsYil7dmFyIGM9YS5vRmVhdHVyZXMsZD1jLmJGaWx0ZXI7Yy5iU29ydCYmcmIoYSk7ZD9pYShhLGEub1ByZXZpb3VzU2VhcmNoKTphLmFpRGlzcGxheT1hLmFpRGlzcGxheU1hc3Rlci5zbGljZSgpOyEwIT09YiYmKGEuX2lEaXNwbGF5U3RhcnQ9MCk7YS5fZHJhd0hvbGQ9YjtTKGEpO2EuX2RyYXdIb2xkPSExfWZ1bmN0aW9uIHNiKGEpe3ZhciBiPWEub0NsYXNzZXMsYz1mKGEublRhYmxlKTtjPWYoIjxkaXYvPiIpLmluc2VydEJlZm9yZShjKTt2YXIgZD1hLm9GZWF0dXJlcyxlPQpmKCI8ZGl2Lz4iLHtpZDphLnNUYWJsZUlkKyJfd3JhcHBlciIsImNsYXNzIjpiLnNXcmFwcGVyKyhhLm5URm9vdD8iIjoiICIrYi5zTm9Gb290ZXIpfSk7YS5uSG9sZGluZz1jWzBdO2EublRhYmxlV3JhcHBlcj1lWzBdO2EublRhYmxlUmVpbnNlcnRCZWZvcmU9YS5uVGFibGUubmV4dFNpYmxpbmc7Zm9yKHZhciBoPWEuc0RvbS5zcGxpdCgiIiksZyxrLGwsbixtLHAsdT0wO3U8aC5sZW5ndGg7dSsrKXtnPW51bGw7az1oW3VdO2lmKCI8Ij09ayl7bD1mKCI8ZGl2Lz4iKVswXTtuPWhbdSsxXTtpZigiJyI9PW58fCciJz09bil7bT0iIjtmb3IocD0yO2hbdStwXSE9bjspbSs9aFt1K3BdLHArKzsiSCI9PW0/bT1iLnNKVUlIZWFkZXI6IkYiPT1tJiYobT1iLnNKVUlGb290ZXIpOy0xIT1tLmluZGV4T2YoIi4iKT8obj1tLnNwbGl0KCIuIiksbC5pZD1uWzBdLnN1YnN0cigxLG5bMF0ubGVuZ3RoLTEpLGwuY2xhc3NOYW1lPW5bMV0pOiIjIj09bS5jaGFyQXQoMCk/bC5pZD1tLnN1YnN0cigxLAptLmxlbmd0aC0xKTpsLmNsYXNzTmFtZT1tO3UrPXB9ZS5hcHBlbmQobCk7ZT1mKGwpfWVsc2UgaWYoIj4iPT1rKWU9ZS5wYXJlbnQoKTtlbHNlIGlmKCJsIj09ayYmZC5iUGFnaW5hdGUmJmQuYkxlbmd0aENoYW5nZSlnPXRiKGEpO2Vsc2UgaWYoImYiPT1rJiZkLmJGaWx0ZXIpZz11YihhKTtlbHNlIGlmKCJyIj09ayYmZC5iUHJvY2Vzc2luZylnPXZiKGEpO2Vsc2UgaWYoInQiPT1rKWc9d2IoYSk7ZWxzZSBpZigiaSI9PWsmJmQuYkluZm8pZz14YihhKTtlbHNlIGlmKCJwIj09ayYmZC5iUGFnaW5hdGUpZz15YihhKTtlbHNlIGlmKDAhPT1xLmV4dC5mZWF0dXJlLmxlbmd0aClmb3IobD1xLmV4dC5mZWF0dXJlLHA9MCxuPWwubGVuZ3RoO3A8bjtwKyspaWYoaz09bFtwXS5jRmVhdHVyZSl7Zz1sW3BdLmZuSW5pdChhKTticmVha31nJiYobD1hLmFhbkZlYXR1cmVzLGxba118fChsW2tdPVtdKSxsW2tdLnB1c2goZyksZS5hcHBlbmQoZykpfWMucmVwbGFjZVdpdGgoZSk7YS5uSG9sZGluZz0KbnVsbH1mdW5jdGlvbiBmYShhLGIpe2I9ZihiKS5jaGlsZHJlbigidHIiKTt2YXIgYyxkLGU7YS5zcGxpY2UoMCxhLmxlbmd0aCk7dmFyIGg9MDtmb3IoZT1iLmxlbmd0aDtoPGU7aCsrKWEucHVzaChbXSk7aD0wO2ZvcihlPWIubGVuZ3RoO2g8ZTtoKyspe3ZhciBnPWJbaF07Zm9yKGM9Zy5maXJzdENoaWxkO2M7KXtpZigiVEQiPT1jLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCl8fCJUSCI9PWMubm9kZU5hbWUudG9VcHBlckNhc2UoKSl7dmFyIGs9MSpjLmdldEF0dHJpYnV0ZSgiY29sc3BhbiIpO3ZhciBsPTEqYy5nZXRBdHRyaWJ1dGUoInJvd3NwYW4iKTtrPWsmJjAhPT1rJiYxIT09az9rOjE7bD1sJiYwIT09bCYmMSE9PWw/bDoxO3ZhciBuPTA7Zm9yKGQ9YVtoXTtkW25dOyluKys7dmFyIG09bjt2YXIgcD0xPT09az8hMDohMTtmb3IoZD0wO2Q8aztkKyspZm9yKG49MDtuPGw7bisrKWFbaCtuXVttK2RdPXtjZWxsOmMsdW5pcXVlOnB9LGFbaCtuXS5uVHI9Z31jPWMubmV4dFNpYmxpbmd9fX0KZnVuY3Rpb24gdWEoYSxiLGMpe3ZhciBkPVtdO2N8fChjPWEuYW9IZWFkZXIsYiYmKGM9W10sZmEoYyxiKSkpO2I9MDtmb3IodmFyIGU9Yy5sZW5ndGg7YjxlO2IrKylmb3IodmFyIGg9MCxnPWNbYl0ubGVuZ3RoO2g8ZztoKyspIWNbYl1baF0udW5pcXVlfHxkW2hdJiZhLmJTb3J0Q2VsbHNUb3B8fChkW2hdPWNbYl1baF0uY2VsbCk7cmV0dXJuIGR9ZnVuY3Rpb24gdmEoYSxiLGMpe0EoYSwiYW9TZXJ2ZXJQYXJhbXMiLCJzZXJ2ZXJQYXJhbXMiLFtiXSk7aWYoYiYmZi5pc0FycmF5KGIpKXt2YXIgZD17fSxlPS8oLio/KVxbXF0kLztmLmVhY2goYixmdW5jdGlvbihhLGIpeyhhPWIubmFtZS5tYXRjaChlKSk/KGE9YVswXSxkW2FdfHwoZFthXT1bXSksZFthXS5wdXNoKGIudmFsdWUpKTpkW2IubmFtZV09Yi52YWx1ZX0pO2I9ZH12YXIgaD1hLmFqYXgsZz1hLm9JbnN0YW5jZSxrPWZ1bmN0aW9uKGIpe0EoYSxudWxsLCJ4aHIiLFthLGIsYS5qcVhIUl0pO2MoYil9O2lmKGYuaXNQbGFpbk9iamVjdChoKSYmCmguZGF0YSl7dmFyIGw9aC5kYXRhO3ZhciBuPSJmdW5jdGlvbiI9PT10eXBlb2YgbD9sKGIsYSk6bDtiPSJmdW5jdGlvbiI9PT10eXBlb2YgbCYmbj9uOmYuZXh0ZW5kKCEwLGIsbik7ZGVsZXRlIGguZGF0YX1uPXtkYXRhOmIsc3VjY2VzczpmdW5jdGlvbihiKXt2YXIgYz1iLmVycm9yfHxiLnNFcnJvcjtjJiZPKGEsMCxjKTthLmpzb249YjtrKGIpfSxkYXRhVHlwZToianNvbiIsY2FjaGU6ITEsdHlwZTphLnNTZXJ2ZXJNZXRob2QsZXJyb3I6ZnVuY3Rpb24oYixjLGQpe2Q9QShhLG51bGwsInhociIsW2EsbnVsbCxhLmpxWEhSXSk7LTE9PT1mLmluQXJyYXkoITAsZCkmJigicGFyc2VyZXJyb3IiPT1jP08oYSwwLCJJbnZhbGlkIEpTT04gcmVzcG9uc2UiLDEpOjQ9PT1iLnJlYWR5U3RhdGUmJk8oYSwwLCJBamF4IGVycm9yIiw3KSk7SyhhLCExKX19O2Eub0FqYXhEYXRhPWI7QShhLG51bGwsInByZVhociIsW2EsYl0pO2EuZm5TZXJ2ZXJEYXRhP2EuZm5TZXJ2ZXJEYXRhLmNhbGwoZywKYS5zQWpheFNvdXJjZSxmLm1hcChiLGZ1bmN0aW9uKGEsYil7cmV0dXJue25hbWU6Yix2YWx1ZTphfX0pLGssYSk6YS5zQWpheFNvdXJjZXx8InN0cmluZyI9PT10eXBlb2YgaD9hLmpxWEhSPWYuYWpheChmLmV4dGVuZChuLHt1cmw6aHx8YS5zQWpheFNvdXJjZX0pKToiZnVuY3Rpb24iPT09dHlwZW9mIGg/YS5qcVhIUj1oLmNhbGwoZyxiLGssYSk6KGEuanFYSFI9Zi5hamF4KGYuZXh0ZW5kKG4saCkpLGguZGF0YT1sKX1mdW5jdGlvbiBxYihhKXtyZXR1cm4gYS5iQWpheERhdGFHZXQ/KGEuaURyYXcrKyxLKGEsITApLHZhKGEsemIoYSksZnVuY3Rpb24oYil7QWIoYSxiKX0pLCExKTohMH1mdW5jdGlvbiB6YihhKXt2YXIgYj1hLmFvQ29sdW1ucyxjPWIubGVuZ3RoLGQ9YS5vRmVhdHVyZXMsZT1hLm9QcmV2aW91c1NlYXJjaCxoPWEuYW9QcmVTZWFyY2hDb2xzLGc9W10saz1ZKGEpO3ZhciBsPWEuX2lEaXNwbGF5U3RhcnQ7dmFyIG49ITEhPT1kLmJQYWdpbmF0ZT9hLl9pRGlzcGxheUxlbmd0aDoKLTE7dmFyIG09ZnVuY3Rpb24oYSxiKXtnLnB1c2goe25hbWU6YSx2YWx1ZTpifSl9O20oInNFY2hvIixhLmlEcmF3KTttKCJpQ29sdW1ucyIsYyk7bSgic0NvbHVtbnMiLEooYiwic05hbWUiKS5qb2luKCIsIikpO20oImlEaXNwbGF5U3RhcnQiLGwpO20oImlEaXNwbGF5TGVuZ3RoIixuKTt2YXIgcD17ZHJhdzphLmlEcmF3LGNvbHVtbnM6W10sb3JkZXI6W10sc3RhcnQ6bCxsZW5ndGg6bixzZWFyY2g6e3ZhbHVlOmUuc1NlYXJjaCxyZWdleDplLmJSZWdleH19O2ZvcihsPTA7bDxjO2wrKyl7dmFyIHU9YltsXTt2YXIgc2E9aFtsXTtuPSJmdW5jdGlvbiI9PXR5cGVvZiB1Lm1EYXRhPyJmdW5jdGlvbiI6dS5tRGF0YTtwLmNvbHVtbnMucHVzaCh7ZGF0YTpuLG5hbWU6dS5zTmFtZSxzZWFyY2hhYmxlOnUuYlNlYXJjaGFibGUsb3JkZXJhYmxlOnUuYlNvcnRhYmxlLHNlYXJjaDp7dmFsdWU6c2Euc1NlYXJjaCxyZWdleDpzYS5iUmVnZXh9fSk7bSgibURhdGFQcm9wXyIrbCxuKTtkLmJGaWx0ZXImJgoobSgic1NlYXJjaF8iK2wsc2Euc1NlYXJjaCksbSgiYlJlZ2V4XyIrbCxzYS5iUmVnZXgpLG0oImJTZWFyY2hhYmxlXyIrbCx1LmJTZWFyY2hhYmxlKSk7ZC5iU29ydCYmbSgiYlNvcnRhYmxlXyIrbCx1LmJTb3J0YWJsZSl9ZC5iRmlsdGVyJiYobSgic1NlYXJjaCIsZS5zU2VhcmNoKSxtKCJiUmVnZXgiLGUuYlJlZ2V4KSk7ZC5iU29ydCYmKGYuZWFjaChrLGZ1bmN0aW9uKGEsYil7cC5vcmRlci5wdXNoKHtjb2x1bW46Yi5jb2wsZGlyOmIuZGlyfSk7bSgiaVNvcnRDb2xfIithLGIuY29sKTttKCJzU29ydERpcl8iK2EsYi5kaXIpfSksbSgiaVNvcnRpbmdDb2xzIixrLmxlbmd0aCkpO2I9cS5leHQubGVnYWN5LmFqYXg7cmV0dXJuIG51bGw9PT1iP2Euc0FqYXhTb3VyY2U/ZzpwOmI/ZzpwfWZ1bmN0aW9uIEFiKGEsYil7dmFyIGM9ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYlthXSE9PXA/YlthXTpiW2NdfSxkPXdhKGEsYiksZT1jKCJzRWNobyIsImRyYXciKSxoPWMoImlUb3RhbFJlY29yZHMiLAoicmVjb3Jkc1RvdGFsIik7Yz1jKCJpVG90YWxEaXNwbGF5UmVjb3JkcyIsInJlY29yZHNGaWx0ZXJlZCIpO2lmKGUpe2lmKDEqZTxhLmlEcmF3KXJldHVybjthLmlEcmF3PTEqZX1xYShhKTthLl9pUmVjb3Jkc1RvdGFsPXBhcnNlSW50KGgsMTApO2EuX2lSZWNvcmRzRGlzcGxheT1wYXJzZUludChjLDEwKTtlPTA7Zm9yKGg9ZC5sZW5ndGg7ZTxoO2UrKylSKGEsZFtlXSk7YS5haURpc3BsYXk9YS5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKTthLmJBamF4RGF0YUdldD0hMTtTKGEpO2EuX2JJbml0Q29tcGxldGV8fHhhKGEsYik7YS5iQWpheERhdGFHZXQ9ITA7SyhhLCExKX1mdW5jdGlvbiB3YShhLGIpe2E9Zi5pc1BsYWluT2JqZWN0KGEuYWpheCkmJmEuYWpheC5kYXRhU3JjIT09cD9hLmFqYXguZGF0YVNyYzphLnNBamF4RGF0YVByb3A7cmV0dXJuImRhdGEiPT09YT9iLmFhRGF0YXx8YlthXToiIiE9PWE/VShhKShiKTpifWZ1bmN0aW9uIHViKGEpe3ZhciBiPWEub0NsYXNzZXMsYz0KYS5zVGFibGVJZCxkPWEub0xhbmd1YWdlLGU9YS5vUHJldmlvdXNTZWFyY2gsaD1hLmFhbkZlYXR1cmVzLGc9JzxpbnB1dCB0eXBlPSJzZWFyY2giIGNsYXNzPSInK2Iuc0ZpbHRlcklucHV0KyciLz4nLGs9ZC5zU2VhcmNoO2s9ay5tYXRjaCgvX0lOUFVUXy8pP2sucmVwbGFjZSgiX0lOUFVUXyIsZyk6aytnO2I9ZigiPGRpdi8+Iix7aWQ6aC5mP251bGw6YysiX2ZpbHRlciIsImNsYXNzIjpiLnNGaWx0ZXJ9KS5hcHBlbmQoZigiPGxhYmVsLz4iKS5hcHBlbmQoaykpO2g9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnZhbHVlP3RoaXMudmFsdWU6IiI7YiE9ZS5zU2VhcmNoJiYoaWEoYSx7c1NlYXJjaDpiLGJSZWdleDplLmJSZWdleCxiU21hcnQ6ZS5iU21hcnQsYkNhc2VJbnNlbnNpdGl2ZTplLmJDYXNlSW5zZW5zaXRpdmV9KSxhLl9pRGlzcGxheVN0YXJ0PTAsUyhhKSl9O2c9bnVsbCE9PWEuc2VhcmNoRGVsYXk/YS5zZWFyY2hEZWxheToic3NwIj09PUQoYSk/NDAwOjA7dmFyIGw9ZigiaW5wdXQiLApiKS52YWwoZS5zU2VhcmNoKS5hdHRyKCJwbGFjZWhvbGRlciIsZC5zU2VhcmNoUGxhY2Vob2xkZXIpLm9uKCJrZXl1cC5EVCBzZWFyY2guRFQgaW5wdXQuRFQgcGFzdGUuRFQgY3V0LkRUIixnP1NhKGgsZyk6aCkub24oImtleXByZXNzLkRUIixmdW5jdGlvbihhKXtpZigxMz09YS5rZXlDb2RlKXJldHVybiExfSkuYXR0cigiYXJpYS1jb250cm9scyIsYyk7ZihhLm5UYWJsZSkub24oInNlYXJjaC5kdC5EVCIsZnVuY3Rpb24oYixjKXtpZihhPT09Yyl0cnl7bFswXSE9PXkuYWN0aXZlRWxlbWVudCYmbC52YWwoZS5zU2VhcmNoKX1jYXRjaCh3KXt9fSk7cmV0dXJuIGJbMF19ZnVuY3Rpb24gaWEoYSxiLGMpe3ZhciBkPWEub1ByZXZpb3VzU2VhcmNoLGU9YS5hb1ByZVNlYXJjaENvbHMsaD1mdW5jdGlvbihhKXtkLnNTZWFyY2g9YS5zU2VhcmNoO2QuYlJlZ2V4PWEuYlJlZ2V4O2QuYlNtYXJ0PWEuYlNtYXJ0O2QuYkNhc2VJbnNlbnNpdGl2ZT1hLmJDYXNlSW5zZW5zaXRpdmV9LGc9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuYkVzY2FwZVJlZ2V4IT09CnA/IWEuYkVzY2FwZVJlZ2V4OmEuYlJlZ2V4fTtLYShhKTtpZigic3NwIiE9RChhKSl7QmIoYSxiLnNTZWFyY2gsYyxnKGIpLGIuYlNtYXJ0LGIuYkNhc2VJbnNlbnNpdGl2ZSk7aChiKTtmb3IoYj0wO2I8ZS5sZW5ndGg7YisrKUNiKGEsZVtiXS5zU2VhcmNoLGIsZyhlW2JdKSxlW2JdLmJTbWFydCxlW2JdLmJDYXNlSW5zZW5zaXRpdmUpO0RiKGEpfWVsc2UgaChiKTthLmJGaWx0ZXJlZD0hMDtBKGEsbnVsbCwic2VhcmNoIixbYV0pfWZ1bmN0aW9uIERiKGEpe2Zvcih2YXIgYj1xLmV4dC5zZWFyY2gsYz1hLmFpRGlzcGxheSxkLGUsaD0wLGc9Yi5sZW5ndGg7aDxnO2grKyl7Zm9yKHZhciBrPVtdLGw9MCxuPWMubGVuZ3RoO2w8bjtsKyspZT1jW2xdLGQ9YS5hb0RhdGFbZV0sYltoXShhLGQuX2FGaWx0ZXJEYXRhLGUsZC5fYURhdGEsbCkmJmsucHVzaChlKTtjLmxlbmd0aD0wO2YubWVyZ2UoYyxrKX19ZnVuY3Rpb24gQ2IoYSxiLGMsZCxlLGgpe2lmKCIiIT09Yil7dmFyIGc9W10saz0KYS5haURpc3BsYXk7ZD1UYShiLGQsZSxoKTtmb3IoZT0wO2U8ay5sZW5ndGg7ZSsrKWI9YS5hb0RhdGFba1tlXV0uX2FGaWx0ZXJEYXRhW2NdLGQudGVzdChiKSYmZy5wdXNoKGtbZV0pO2EuYWlEaXNwbGF5PWd9fWZ1bmN0aW9uIEJiKGEsYixjLGQsZSxoKXtlPVRhKGIsZCxlLGgpO3ZhciBnPWEub1ByZXZpb3VzU2VhcmNoLnNTZWFyY2gsaz1hLmFpRGlzcGxheU1hc3RlcjtoPVtdOzAhPT1xLmV4dC5zZWFyY2gubGVuZ3RoJiYoYz0hMCk7dmFyIGY9RWIoYSk7aWYoMD49Yi5sZW5ndGgpYS5haURpc3BsYXk9ay5zbGljZSgpO2Vsc2V7aWYoZnx8Y3x8ZHx8Zy5sZW5ndGg+Yi5sZW5ndGh8fDAhPT1iLmluZGV4T2YoZyl8fGEuYlNvcnRlZClhLmFpRGlzcGxheT1rLnNsaWNlKCk7Yj1hLmFpRGlzcGxheTtmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKWUudGVzdChhLmFvRGF0YVtiW2NdXS5fc0ZpbHRlclJvdykmJmgucHVzaChiW2NdKTthLmFpRGlzcGxheT1ofX1mdW5jdGlvbiBUYShhLGIsCmMsZCl7YT1iP2E6VWEoYSk7YyYmKGE9Il4oPz0uKj8iK2YubWFwKGEubWF0Y2goLyJbXiJdKyJ8W14gXSsvZyl8fFsiIl0sZnVuY3Rpb24oYSl7aWYoJyInPT09YS5jaGFyQXQoMCkpe3ZhciBiPWEubWF0Y2goL14iKC4qKSIkLyk7YT1iP2JbMV06YX1yZXR1cm4gYS5yZXBsYWNlKCciJywiIil9KS5qb2luKCIpKD89Lio/IikrIikuKiQiKTtyZXR1cm4gbmV3IFJlZ0V4cChhLGQ/ImkiOiIiKX1mdW5jdGlvbiBFYihhKXt2YXIgYj1hLmFvQ29sdW1ucyxjLGQsZT1xLmV4dC50eXBlLnNlYXJjaDt2YXIgaD0hMTt2YXIgZz0wO2ZvcihjPWEuYW9EYXRhLmxlbmd0aDtnPGM7ZysrKXt2YXIgaz1hLmFvRGF0YVtnXTtpZighay5fYUZpbHRlckRhdGEpe3ZhciBmPVtdO3ZhciBuPTA7Zm9yKGQ9Yi5sZW5ndGg7bjxkO24rKyl7aD1iW25dO2lmKGguYlNlYXJjaGFibGUpe3ZhciBtPUkoYSxnLG4sImZpbHRlciIpO2VbaC5zVHlwZV0mJihtPWVbaC5zVHlwZV0obSkpO251bGw9PT1tJiYobT0iIik7CiJzdHJpbmciIT09dHlwZW9mIG0mJm0udG9TdHJpbmcmJihtPW0udG9TdHJpbmcoKSl9ZWxzZSBtPSIiO20uaW5kZXhPZiYmLTEhPT1tLmluZGV4T2YoIiYiKSYmKHlhLmlubmVySFRNTD1tLG09JGI/eWEudGV4dENvbnRlbnQ6eWEuaW5uZXJUZXh0KTttLnJlcGxhY2UmJihtPW0ucmVwbGFjZSgvW1xyXG5cdTIwMjhdL2csIiIpKTtmLnB1c2gobSl9ay5fYUZpbHRlckRhdGE9ZjtrLl9zRmlsdGVyUm93PWYuam9pbigiICAiKTtoPSEwfX1yZXR1cm4gaH1mdW5jdGlvbiBGYihhKXtyZXR1cm57c2VhcmNoOmEuc1NlYXJjaCxzbWFydDphLmJTbWFydCxyZWdleDphLmJSZWdleCxjYXNlSW5zZW5zaXRpdmU6YS5iQ2FzZUluc2Vuc2l0aXZlfX1mdW5jdGlvbiBHYihhKXtyZXR1cm57c1NlYXJjaDphLnNlYXJjaCxiU21hcnQ6YS5zbWFydCxiUmVnZXg6YS5yZWdleCxiQ2FzZUluc2Vuc2l0aXZlOmEuY2FzZUluc2Vuc2l0aXZlfX1mdW5jdGlvbiB4YihhKXt2YXIgYj1hLnNUYWJsZUlkLGM9YS5hYW5GZWF0dXJlcy5pLApkPWYoIjxkaXYvPiIseyJjbGFzcyI6YS5vQ2xhc3Nlcy5zSW5mbyxpZDpjP251bGw6YisiX2luZm8ifSk7Y3x8KGEuYW9EcmF3Q2FsbGJhY2sucHVzaCh7Zm46SGIsc05hbWU6ImluZm9ybWF0aW9uIn0pLGQuYXR0cigicm9sZSIsInN0YXR1cyIpLmF0dHIoImFyaWEtbGl2ZSIsInBvbGl0ZSIpLGYoYS5uVGFibGUpLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLGIrIl9pbmZvIikpO3JldHVybiBkWzBdfWZ1bmN0aW9uIEhiKGEpe3ZhciBiPWEuYWFuRmVhdHVyZXMuaTtpZigwIT09Yi5sZW5ndGgpe3ZhciBjPWEub0xhbmd1YWdlLGQ9YS5faURpc3BsYXlTdGFydCsxLGU9YS5mbkRpc3BsYXlFbmQoKSxoPWEuZm5SZWNvcmRzVG90YWwoKSxnPWEuZm5SZWNvcmRzRGlzcGxheSgpLGs9Zz9jLnNJbmZvOmMuc0luZm9FbXB0eTtnIT09aCYmKGsrPSIgIitjLnNJbmZvRmlsdGVyZWQpO2srPWMuc0luZm9Qb3N0Rml4O2s9SWIoYSxrKTtjPWMuZm5JbmZvQ2FsbGJhY2s7bnVsbCE9PWMmJihrPWMuY2FsbChhLm9JbnN0YW5jZSwKYSxkLGUsaCxnLGspKTtmKGIpLmh0bWwoayl9fWZ1bmN0aW9uIEliKGEsYil7dmFyIGM9YS5mbkZvcm1hdE51bWJlcixkPWEuX2lEaXNwbGF5U3RhcnQrMSxlPWEuX2lEaXNwbGF5TGVuZ3RoLGg9YS5mblJlY29yZHNEaXNwbGF5KCksZz0tMT09PWU7cmV0dXJuIGIucmVwbGFjZSgvX1NUQVJUXy9nLGMuY2FsbChhLGQpKS5yZXBsYWNlKC9fRU5EXy9nLGMuY2FsbChhLGEuZm5EaXNwbGF5RW5kKCkpKS5yZXBsYWNlKC9fTUFYXy9nLGMuY2FsbChhLGEuZm5SZWNvcmRzVG90YWwoKSkpLnJlcGxhY2UoL19UT1RBTF8vZyxjLmNhbGwoYSxoKSkucmVwbGFjZSgvX1BBR0VfL2csYy5jYWxsKGEsZz8xOk1hdGguY2VpbChkL2UpKSkucmVwbGFjZSgvX1BBR0VTXy9nLGMuY2FsbChhLGc/MTpNYXRoLmNlaWwoaC9lKSkpfWZ1bmN0aW9uIGphKGEpe3ZhciBiPWEuaUluaXREaXNwbGF5U3RhcnQsYz1hLmFvQ29sdW1uczt2YXIgZD1hLm9GZWF0dXJlczt2YXIgZT1hLmJEZWZlckxvYWRpbmc7aWYoYS5iSW5pdGlhbGlzZWQpe3NiKGEpOwpwYihhKTtoYShhLGEuYW9IZWFkZXIpO2hhKGEsYS5hb0Zvb3Rlcik7SyhhLCEwKTtkLmJBdXRvV2lkdGgmJkphKGEpO3ZhciBoPTA7Zm9yKGQ9Yy5sZW5ndGg7aDxkO2grKyl7dmFyIGc9Y1toXTtnLnNXaWR0aCYmKGcublRoLnN0eWxlLndpZHRoPUIoZy5zV2lkdGgpKX1BKGEsbnVsbCwicHJlSW5pdCIsW2FdKTtWKGEpO2M9RChhKTtpZigic3NwIiE9Y3x8ZSkiYWpheCI9PWM/dmEoYSxbXSxmdW5jdGlvbihjKXt2YXIgZD13YShhLGMpO2ZvcihoPTA7aDxkLmxlbmd0aDtoKyspUihhLGRbaF0pO2EuaUluaXREaXNwbGF5U3RhcnQ9YjtWKGEpO0soYSwhMSk7eGEoYSxjKX0sYSk6KEsoYSwhMSkseGEoYSkpfWVsc2Ugc2V0VGltZW91dChmdW5jdGlvbigpe2phKGEpfSwyMDApfWZ1bmN0aW9uIHhhKGEsYil7YS5fYkluaXRDb21wbGV0ZT0hMDsoYnx8YS5vSW5pdC5hYURhdGEpJiZhYShhKTtBKGEsbnVsbCwicGx1Z2luLWluaXQiLFthLGJdKTtBKGEsImFvSW5pdENvbXBsZXRlIiwiaW5pdCIsClthLGJdKX1mdW5jdGlvbiBWYShhLGIpe2I9cGFyc2VJbnQoYiwxMCk7YS5faURpc3BsYXlMZW5ndGg9YjtXYShhKTtBKGEsbnVsbCwibGVuZ3RoIixbYSxiXSl9ZnVuY3Rpb24gdGIoYSl7dmFyIGI9YS5vQ2xhc3NlcyxjPWEuc1RhYmxlSWQsZD1hLmFMZW5ndGhNZW51LGU9Zi5pc0FycmF5KGRbMF0pLGg9ZT9kWzBdOmQ7ZD1lP2RbMV06ZDtlPWYoIjxzZWxlY3QvPiIse25hbWU6YysiX2xlbmd0aCIsImFyaWEtY29udHJvbHMiOmMsImNsYXNzIjpiLnNMZW5ndGhTZWxlY3R9KTtmb3IodmFyIGc9MCxrPWgubGVuZ3RoO2c8aztnKyspZVswXVtnXT1uZXcgT3B0aW9uKCJudW1iZXIiPT09dHlwZW9mIGRbZ10/YS5mbkZvcm1hdE51bWJlcihkW2ddKTpkW2ddLGhbZ10pO3ZhciBsPWYoIjxkaXY+PGxhYmVsLz48L2Rpdj4iKS5hZGRDbGFzcyhiLnNMZW5ndGgpO2EuYWFuRmVhdHVyZXMubHx8KGxbMF0uaWQ9YysiX2xlbmd0aCIpO2wuY2hpbGRyZW4oKS5hcHBlbmQoYS5vTGFuZ3VhZ2Uuc0xlbmd0aE1lbnUucmVwbGFjZSgiX01FTlVfIiwKZVswXS5vdXRlckhUTUwpKTtmKCJzZWxlY3QiLGwpLnZhbChhLl9pRGlzcGxheUxlbmd0aCkub24oImNoYW5nZS5EVCIsZnVuY3Rpb24oYil7VmEoYSxmKHRoaXMpLnZhbCgpKTtTKGEpfSk7ZihhLm5UYWJsZSkub24oImxlbmd0aC5kdC5EVCIsZnVuY3Rpb24oYixjLGQpe2E9PT1jJiZmKCJzZWxlY3QiLGwpLnZhbChkKX0pO3JldHVybiBsWzBdfWZ1bmN0aW9uIHliKGEpe3ZhciBiPWEuc1BhZ2luYXRpb25UeXBlLGM9cS5leHQucGFnZXJbYl0sZD0iZnVuY3Rpb24iPT09dHlwZW9mIGMsZT1mdW5jdGlvbihhKXtTKGEpfTtiPWYoIjxkaXYvPiIpLmFkZENsYXNzKGEub0NsYXNzZXMuc1BhZ2luZytiKVswXTt2YXIgaD1hLmFhbkZlYXR1cmVzO2R8fGMuZm5Jbml0KGEsYixlKTtoLnB8fChiLmlkPWEuc1RhYmxlSWQrIl9wYWdpbmF0ZSIsYS5hb0RyYXdDYWxsYmFjay5wdXNoKHtmbjpmdW5jdGlvbihhKXtpZihkKXt2YXIgYj1hLl9pRGlzcGxheVN0YXJ0LGc9YS5faURpc3BsYXlMZW5ndGgsCmY9YS5mblJlY29yZHNEaXNwbGF5KCksbT0tMT09PWc7Yj1tPzA6TWF0aC5jZWlsKGIvZyk7Zz1tPzE6TWF0aC5jZWlsKGYvZyk7Zj1jKGIsZyk7dmFyIHA7bT0wO2ZvcihwPWgucC5sZW5ndGg7bTxwO20rKylSYShhLCJwYWdlQnV0dG9uIikoYSxoLnBbbV0sbSxmLGIsZyl9ZWxzZSBjLmZuVXBkYXRlKGEsZSl9LHNOYW1lOiJwYWdpbmF0aW9uIn0pKTtyZXR1cm4gYn1mdW5jdGlvbiBYYShhLGIsYyl7dmFyIGQ9YS5faURpc3BsYXlTdGFydCxlPWEuX2lEaXNwbGF5TGVuZ3RoLGg9YS5mblJlY29yZHNEaXNwbGF5KCk7MD09PWh8fC0xPT09ZT9kPTA6Im51bWJlciI9PT10eXBlb2YgYj8oZD1iKmUsZD5oJiYoZD0wKSk6ImZpcnN0Ij09Yj9kPTA6InByZXZpb3VzIj09Yj8oZD0wPD1lP2QtZTowLDA+ZCYmKGQ9MCkpOiJuZXh0Ij09Yj9kK2U8aCYmKGQrPWUpOiJsYXN0Ij09Yj9kPU1hdGguZmxvb3IoKGgtMSkvZSkqZTpPKGEsMCwiVW5rbm93biBwYWdpbmcgYWN0aW9uOiAiK2IsNSk7Yj0KYS5faURpc3BsYXlTdGFydCE9PWQ7YS5faURpc3BsYXlTdGFydD1kO2ImJihBKGEsbnVsbCwicGFnZSIsW2FdKSxjJiZTKGEpKTtyZXR1cm4gYn1mdW5jdGlvbiB2YihhKXtyZXR1cm4gZigiPGRpdi8+Iix7aWQ6YS5hYW5GZWF0dXJlcy5yP251bGw6YS5zVGFibGVJZCsiX3Byb2Nlc3NpbmciLCJjbGFzcyI6YS5vQ2xhc3Nlcy5zUHJvY2Vzc2luZ30pLmh0bWwoYS5vTGFuZ3VhZ2Uuc1Byb2Nlc3NpbmcpLmluc2VydEJlZm9yZShhLm5UYWJsZSlbMF19ZnVuY3Rpb24gSyhhLGIpe2Eub0ZlYXR1cmVzLmJQcm9jZXNzaW5nJiZmKGEuYWFuRmVhdHVyZXMucikuY3NzKCJkaXNwbGF5IixiPyJibG9jayI6Im5vbmUiKTtBKGEsbnVsbCwicHJvY2Vzc2luZyIsW2EsYl0pfWZ1bmN0aW9uIHdiKGEpe3ZhciBiPWYoYS5uVGFibGUpO2IuYXR0cigicm9sZSIsImdyaWQiKTt2YXIgYz1hLm9TY3JvbGw7aWYoIiI9PT1jLnNYJiYiIj09PWMuc1kpcmV0dXJuIGEublRhYmxlO3ZhciBkPWMuc1gsZT1jLnNZLApoPWEub0NsYXNzZXMsZz1iLmNoaWxkcmVuKCJjYXB0aW9uIiksaz1nLmxlbmd0aD9nWzBdLl9jYXB0aW9uU2lkZTpudWxsLGw9ZihiWzBdLmNsb25lTm9kZSghMSkpLG49ZihiWzBdLmNsb25lTm9kZSghMSkpLG09Yi5jaGlsZHJlbigidGZvb3QiKTttLmxlbmd0aHx8KG09bnVsbCk7bD1mKCI8ZGl2Lz4iLHsiY2xhc3MiOmguc1Njcm9sbFdyYXBwZXJ9KS5hcHBlbmQoZigiPGRpdi8+Iix7ImNsYXNzIjpoLnNTY3JvbGxIZWFkfSkuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIixwb3NpdGlvbjoicmVsYXRpdmUiLGJvcmRlcjowLHdpZHRoOmQ/ZD9CKGQpOm51bGw6IjEwMCUifSkuYXBwZW5kKGYoIjxkaXYvPiIseyJjbGFzcyI6aC5zU2Nyb2xsSGVhZElubmVyfSkuY3NzKHsiYm94LXNpemluZyI6ImNvbnRlbnQtYm94Iix3aWR0aDpjLnNYSW5uZXJ8fCIxMDAlIn0pLmFwcGVuZChsLnJlbW92ZUF0dHIoImlkIikuY3NzKCJtYXJnaW4tbGVmdCIsMCkuYXBwZW5kKCJ0b3AiPT09az9nOm51bGwpLmFwcGVuZChiLmNoaWxkcmVuKCJ0aGVhZCIpKSkpKS5hcHBlbmQoZigiPGRpdi8+IiwKeyJjbGFzcyI6aC5zU2Nyb2xsQm9keX0pLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIixvdmVyZmxvdzoiYXV0byIsd2lkdGg6ZD9CKGQpOm51bGx9KS5hcHBlbmQoYikpO20mJmwuYXBwZW5kKGYoIjxkaXYvPiIseyJjbGFzcyI6aC5zU2Nyb2xsRm9vdH0pLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyOjAsd2lkdGg6ZD9kP0IoZCk6bnVsbDoiMTAwJSJ9KS5hcHBlbmQoZigiPGRpdi8+Iix7ImNsYXNzIjpoLnNTY3JvbGxGb290SW5uZXJ9KS5hcHBlbmQobi5yZW1vdmVBdHRyKCJpZCIpLmNzcygibWFyZ2luLWxlZnQiLDApLmFwcGVuZCgiYm90dG9tIj09PWs/ZzpudWxsKS5hcHBlbmQoYi5jaGlsZHJlbigidGZvb3QiKSkpKSk7Yj1sLmNoaWxkcmVuKCk7dmFyIHA9YlswXTtoPWJbMV07dmFyIHU9bT9iWzJdOm51bGw7aWYoZClmKGgpLm9uKCJzY3JvbGwuRFQiLGZ1bmN0aW9uKGEpe2E9dGhpcy5zY3JvbGxMZWZ0O3Auc2Nyb2xsTGVmdD1hO20mJih1LnNjcm9sbExlZnQ9YSl9KTsKZihoKS5jc3MoZSYmYy5iQ29sbGFwc2U/Im1heC1oZWlnaHQiOiJoZWlnaHQiLGUpO2EublNjcm9sbEhlYWQ9cDthLm5TY3JvbGxCb2R5PWg7YS5uU2Nyb2xsRm9vdD11O2EuYW9EcmF3Q2FsbGJhY2sucHVzaCh7Zm46bmEsc05hbWU6InNjcm9sbGluZyJ9KTtyZXR1cm4gbFswXX1mdW5jdGlvbiBuYShhKXt2YXIgYj1hLm9TY3JvbGwsYz1iLnNYLGQ9Yi5zWElubmVyLGU9Yi5zWTtiPWIuaUJhcldpZHRoO3ZhciBoPWYoYS5uU2Nyb2xsSGVhZCksZz1oWzBdLnN0eWxlLGs9aC5jaGlsZHJlbigiZGl2IiksbD1rWzBdLnN0eWxlLG49ay5jaGlsZHJlbigidGFibGUiKTtrPWEublNjcm9sbEJvZHk7dmFyIG09ZihrKSx3PWsuc3R5bGUsdT1mKGEublNjcm9sbEZvb3QpLmNoaWxkcmVuKCJkaXYiKSxxPXUuY2hpbGRyZW4oInRhYmxlIiksdD1mKGEublRIZWFkKSxyPWYoYS5uVGFibGUpLHY9clswXSx6YT12LnN0eWxlLFQ9YS5uVEZvb3Q/ZihhLm5URm9vdCk6bnVsbCxBPWEub0Jyb3dzZXIsCng9QS5iU2Nyb2xsT3ZlcnNpemUsYWM9SihhLmFvQ29sdW1ucywiblRoIiksWWE9W10seT1bXSx6PVtdLEM9W10sRyxIPWZ1bmN0aW9uKGEpe2E9YS5zdHlsZTthLnBhZGRpbmdUb3A9IjAiO2EucGFkZGluZ0JvdHRvbT0iMCI7YS5ib3JkZXJUb3BXaWR0aD0iMCI7YS5ib3JkZXJCb3R0b21XaWR0aD0iMCI7YS5oZWlnaHQ9MH07dmFyIEQ9ay5zY3JvbGxIZWlnaHQ+ay5jbGllbnRIZWlnaHQ7aWYoYS5zY3JvbGxCYXJWaXMhPT1EJiZhLnNjcm9sbEJhclZpcyE9PXApYS5zY3JvbGxCYXJWaXM9RCxhYShhKTtlbHNle2Euc2Nyb2xsQmFyVmlzPUQ7ci5jaGlsZHJlbigidGhlYWQsIHRmb290IikucmVtb3ZlKCk7aWYoVCl7dmFyIEU9VC5jbG9uZSgpLnByZXBlbmRUbyhyKTt2YXIgRj1ULmZpbmQoInRyIik7RT1FLmZpbmQoInRyIil9dmFyIEk9dC5jbG9uZSgpLnByZXBlbmRUbyhyKTt0PXQuZmluZCgidHIiKTtEPUkuZmluZCgidHIiKTtJLmZpbmQoInRoLCB0ZCIpLnJlbW92ZUF0dHIoInRhYmluZGV4Iik7CmN8fCh3LndpZHRoPSIxMDAlIixoWzBdLnN0eWxlLndpZHRoPSIxMDAlIik7Zi5lYWNoKHVhKGEsSSksZnVuY3Rpb24oYixjKXtHPWJhKGEsYik7Yy5zdHlsZS53aWR0aD1hLmFvQ29sdW1uc1tHXS5zV2lkdGh9KTtUJiZOKGZ1bmN0aW9uKGEpe2Euc3R5bGUud2lkdGg9IiJ9LEUpO2g9ci5vdXRlcldpZHRoKCk7IiI9PT1jPyh6YS53aWR0aD0iMTAwJSIseCYmKHIuZmluZCgidGJvZHkiKS5oZWlnaHQoKT5rLm9mZnNldEhlaWdodHx8InNjcm9sbCI9PW0uY3NzKCJvdmVyZmxvdy15IikpJiYoemEud2lkdGg9QihyLm91dGVyV2lkdGgoKS1iKSksaD1yLm91dGVyV2lkdGgoKSk6IiIhPT1kJiYoemEud2lkdGg9QihkKSxoPXIub3V0ZXJXaWR0aCgpKTtOKEgsRCk7TihmdW5jdGlvbihhKXt6LnB1c2goYS5pbm5lckhUTUwpO1lhLnB1c2goQihmKGEpLmNzcygid2lkdGgiKSkpfSxEKTtOKGZ1bmN0aW9uKGEsYil7LTEhPT1mLmluQXJyYXkoYSxhYykmJihhLnN0eWxlLndpZHRoPVlhW2JdKX0sCnQpO2YoRCkuaGVpZ2h0KDApO1QmJihOKEgsRSksTihmdW5jdGlvbihhKXtDLnB1c2goYS5pbm5lckhUTUwpO3kucHVzaChCKGYoYSkuY3NzKCJ3aWR0aCIpKSl9LEUpLE4oZnVuY3Rpb24oYSxiKXthLnN0eWxlLndpZHRoPXlbYl19LEYpLGYoRSkuaGVpZ2h0KDApKTtOKGZ1bmN0aW9uKGEsYil7YS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImRhdGFUYWJsZXNfc2l6aW5nIj4nK3pbYl0rIjwvZGl2PiI7YS5jaGlsZE5vZGVzWzBdLnN0eWxlLmhlaWdodD0iMCI7YS5jaGlsZE5vZGVzWzBdLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iO2Euc3R5bGUud2lkdGg9WWFbYl19LEQpO1QmJk4oZnVuY3Rpb24oYSxiKXthLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZGF0YVRhYmxlc19zaXppbmciPicrQ1tiXSsiPC9kaXY+IjthLmNoaWxkTm9kZXNbMF0uc3R5bGUuaGVpZ2h0PSIwIjthLmNoaWxkTm9kZXNbMF0uc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7YS5zdHlsZS53aWR0aD15W2JdfSxFKTtyLm91dGVyV2lkdGgoKTwKaD8oRj1rLnNjcm9sbEhlaWdodD5rLm9mZnNldEhlaWdodHx8InNjcm9sbCI9PW0uY3NzKCJvdmVyZmxvdy15Iik/aCtiOmgseCYmKGsuc2Nyb2xsSGVpZ2h0Pmsub2Zmc2V0SGVpZ2h0fHwic2Nyb2xsIj09bS5jc3MoIm92ZXJmbG93LXkiKSkmJih6YS53aWR0aD1CKEYtYikpLCIiIT09YyYmIiI9PT1kfHxPKGEsMSwiUG9zc2libGUgY29sdW1uIG1pc2FsaWdubWVudCIsNikpOkY9IjEwMCUiO3cud2lkdGg9QihGKTtnLndpZHRoPUIoRik7VCYmKGEublNjcm9sbEZvb3Quc3R5bGUud2lkdGg9QihGKSk7IWUmJngmJih3LmhlaWdodD1CKHYub2Zmc2V0SGVpZ2h0K2IpKTtjPXIub3V0ZXJXaWR0aCgpO25bMF0uc3R5bGUud2lkdGg9QihjKTtsLndpZHRoPUIoYyk7ZD1yLmhlaWdodCgpPmsuY2xpZW50SGVpZ2h0fHwic2Nyb2xsIj09bS5jc3MoIm92ZXJmbG93LXkiKTtlPSJwYWRkaW5nIisoQS5iU2Nyb2xsYmFyTGVmdD8iTGVmdCI6IlJpZ2h0Iik7bFtlXT1kP2IrInB4IjoiMHB4IjtUJiYKKHFbMF0uc3R5bGUud2lkdGg9QihjKSx1WzBdLnN0eWxlLndpZHRoPUIoYyksdVswXS5zdHlsZVtlXT1kP2IrInB4IjoiMHB4Iik7ci5jaGlsZHJlbigiY29sZ3JvdXAiKS5pbnNlcnRCZWZvcmUoci5jaGlsZHJlbigidGhlYWQiKSk7bS50cmlnZ2VyKCJzY3JvbGwiKTshYS5iU29ydGVkJiYhYS5iRmlsdGVyZWR8fGEuX2RyYXdIb2xkfHwoay5zY3JvbGxUb3A9MCl9fWZ1bmN0aW9uIE4oYSxiLGMpe2Zvcih2YXIgZD0wLGU9MCxoPWIubGVuZ3RoLGcsaztlPGg7KXtnPWJbZV0uZmlyc3RDaGlsZDtmb3Ioaz1jP2NbZV0uZmlyc3RDaGlsZDpudWxsO2c7KTE9PT1nLm5vZGVUeXBlJiYoYz9hKGcsayxkKTphKGcsZCksZCsrKSxnPWcubmV4dFNpYmxpbmcsaz1jP2submV4dFNpYmxpbmc6bnVsbDtlKyt9fWZ1bmN0aW9uIEphKGEpe3ZhciBiPWEublRhYmxlLGM9YS5hb0NvbHVtbnMsZD1hLm9TY3JvbGwsZT1kLnNZLGg9ZC5zWCxnPWQuc1hJbm5lcixrPWMubGVuZ3RoLGw9b2EoYSwiYlZpc2libGUiKSwKbj1mKCJ0aCIsYS5uVEhlYWQpLG09Yi5nZXRBdHRyaWJ1dGUoIndpZHRoIikscD1iLnBhcmVudE5vZGUsdT0hMSxxLHQ9YS5vQnJvd3NlcjtkPXQuYlNjcm9sbE92ZXJzaXplOyhxPWIuc3R5bGUud2lkdGgpJiYtMSE9PXEuaW5kZXhPZigiJSIpJiYobT1xKTtmb3IocT0wO3E8bC5sZW5ndGg7cSsrKXt2YXIgcj1jW2xbcV1dO251bGwhPT1yLnNXaWR0aCYmKHIuc1dpZHRoPUpiKHIuc1dpZHRoT3JpZyxwKSx1PSEwKX1pZihkfHwhdSYmIWgmJiFlJiZrPT1XKGEpJiZrPT1uLmxlbmd0aClmb3IocT0wO3E8aztxKyspbD1iYShhLHEpLG51bGwhPT1sJiYoY1tsXS5zV2lkdGg9QihuLmVxKHEpLndpZHRoKCkpKTtlbHNle2s9ZihiKS5jbG9uZSgpLmNzcygidmlzaWJpbGl0eSIsImhpZGRlbiIpLnJlbW92ZUF0dHIoImlkIik7ay5maW5kKCJ0Ym9keSB0ciIpLnJlbW92ZSgpO3ZhciB2PWYoIjx0ci8+IikuYXBwZW5kVG8oay5maW5kKCJ0Ym9keSIpKTtrLmZpbmQoInRoZWFkLCB0Zm9vdCIpLnJlbW92ZSgpOwprLmFwcGVuZChmKGEublRIZWFkKS5jbG9uZSgpKS5hcHBlbmQoZihhLm5URm9vdCkuY2xvbmUoKSk7ay5maW5kKCJ0Zm9vdCB0aCwgdGZvb3QgdGQiKS5jc3MoIndpZHRoIiwiIik7bj11YShhLGsuZmluZCgidGhlYWQiKVswXSk7Zm9yKHE9MDtxPGwubGVuZ3RoO3ErKylyPWNbbFtxXV0sbltxXS5zdHlsZS53aWR0aD1udWxsIT09ci5zV2lkdGhPcmlnJiYiIiE9PXIuc1dpZHRoT3JpZz9CKHIuc1dpZHRoT3JpZyk6IiIsci5zV2lkdGhPcmlnJiZoJiZmKG5bcV0pLmFwcGVuZChmKCI8ZGl2Lz4iKS5jc3Moe3dpZHRoOnIuc1dpZHRoT3JpZyxtYXJnaW46MCxwYWRkaW5nOjAsYm9yZGVyOjAsaGVpZ2h0OjF9KSk7aWYoYS5hb0RhdGEubGVuZ3RoKWZvcihxPTA7cTxsLmxlbmd0aDtxKyspdT1sW3FdLHI9Y1t1XSxmKEtiKGEsdSkpLmNsb25lKCExKS5hcHBlbmQoci5zQ29udGVudFBhZGRpbmcpLmFwcGVuZFRvKHYpO2YoIltuYW1lXSIsaykucmVtb3ZlQXR0cigibmFtZSIpO3I9ZigiPGRpdi8+IikuY3NzKGh8fAplP3twb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxoZWlnaHQ6MSxyaWdodDowLG92ZXJmbG93OiJoaWRkZW4ifTp7fSkuYXBwZW5kKGspLmFwcGVuZFRvKHApO2gmJmc/ay53aWR0aChnKTpoPyhrLmNzcygid2lkdGgiLCJhdXRvIiksay5yZW1vdmVBdHRyKCJ3aWR0aCIpLGsud2lkdGgoKTxwLmNsaWVudFdpZHRoJiZtJiZrLndpZHRoKHAuY2xpZW50V2lkdGgpKTplP2sud2lkdGgocC5jbGllbnRXaWR0aCk6bSYmay53aWR0aChtKTtmb3IocT1lPTA7cTxsLmxlbmd0aDtxKyspcD1mKG5bcV0pLGc9cC5vdXRlcldpZHRoKCktcC53aWR0aCgpLHA9dC5iQm91bmRpbmc/TWF0aC5jZWlsKG5bcV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpOnAub3V0ZXJXaWR0aCgpLGUrPXAsY1tsW3FdXS5zV2lkdGg9QihwLWcpO2Iuc3R5bGUud2lkdGg9QihlKTtyLnJlbW92ZSgpfW0mJihiLnN0eWxlLndpZHRoPUIobSkpOyFtJiYhaHx8YS5fcmVzekV2dHx8KGI9ZnVuY3Rpb24oKXtmKHopLm9uKCJyZXNpemUuRFQtIisKYS5zSW5zdGFuY2UsU2EoZnVuY3Rpb24oKXthYShhKX0pKX0sZD9zZXRUaW1lb3V0KGIsMUUzKTpiKCksYS5fcmVzekV2dD0hMCl9ZnVuY3Rpb24gSmIoYSxiKXtpZighYSlyZXR1cm4gMDthPWYoIjxkaXYvPiIpLmNzcygid2lkdGgiLEIoYSkpLmFwcGVuZFRvKGJ8fHkuYm9keSk7Yj1hWzBdLm9mZnNldFdpZHRoO2EucmVtb3ZlKCk7cmV0dXJuIGJ9ZnVuY3Rpb24gS2IoYSxiKXt2YXIgYz1MYihhLGIpO2lmKDA+YylyZXR1cm4gbnVsbDt2YXIgZD1hLmFvRGF0YVtjXTtyZXR1cm4gZC5uVHI/ZC5hbkNlbGxzW2JdOmYoIjx0ZC8+IikuaHRtbChJKGEsYyxiLCJkaXNwbGF5IikpWzBdfWZ1bmN0aW9uIExiKGEsYil7Zm9yKHZhciBjLGQ9LTEsZT0tMSxoPTAsZz1hLmFvRGF0YS5sZW5ndGg7aDxnO2grKyljPUkoYSxoLGIsImRpc3BsYXkiKSsiIixjPWMucmVwbGFjZShiYywiIiksYz1jLnJlcGxhY2UoLyZuYnNwOy9nLCIgIiksYy5sZW5ndGg+ZCYmKGQ9Yy5sZW5ndGgsZT1oKTtyZXR1cm4gZX0KZnVuY3Rpb24gQihhKXtyZXR1cm4gbnVsbD09PWE/IjBweCI6Im51bWJlciI9PXR5cGVvZiBhPzA+YT8iMHB4IjphKyJweCI6YS5tYXRjaCgvXGQkLyk/YSsicHgiOmF9ZnVuY3Rpb24gWShhKXt2YXIgYj1bXSxjPWEuYW9Db2x1bW5zO3ZhciBkPWEuYWFTb3J0aW5nRml4ZWQ7dmFyIGU9Zi5pc1BsYWluT2JqZWN0KGQpO3ZhciBoPVtdO3ZhciBnPWZ1bmN0aW9uKGEpe2EubGVuZ3RoJiYhZi5pc0FycmF5KGFbMF0pP2gucHVzaChhKTpmLm1lcmdlKGgsYSl9O2YuaXNBcnJheShkKSYmZyhkKTtlJiZkLnByZSYmZyhkLnByZSk7ZyhhLmFhU29ydGluZyk7ZSYmZC5wb3N0JiZnKGQucG9zdCk7Zm9yKGE9MDthPGgubGVuZ3RoO2ErKyl7dmFyIGs9aFthXVswXTtnPWNba10uYURhdGFTb3J0O2Q9MDtmb3IoZT1nLmxlbmd0aDtkPGU7ZCsrKXt2YXIgbD1nW2RdO3ZhciBuPWNbbF0uc1R5cGV8fCJzdHJpbmciO2hbYV0uX2lkeD09PXAmJihoW2FdLl9pZHg9Zi5pbkFycmF5KGhbYV1bMV0sY1tsXS5hc1NvcnRpbmcpKTsKYi5wdXNoKHtzcmM6ayxjb2w6bCxkaXI6aFthXVsxXSxpbmRleDpoW2FdLl9pZHgsdHlwZTpuLGZvcm1hdHRlcjpxLmV4dC50eXBlLm9yZGVyW24rIi1wcmUiXX0pfX1yZXR1cm4gYn1mdW5jdGlvbiByYihhKXt2YXIgYixjPVtdLGQ9cS5leHQudHlwZS5vcmRlcixlPWEuYW9EYXRhLGg9MCxnPWEuYWlEaXNwbGF5TWFzdGVyO0thKGEpO3ZhciBrPVkoYSk7dmFyIGY9MDtmb3IoYj1rLmxlbmd0aDtmPGI7ZisrKXt2YXIgbj1rW2ZdO24uZm9ybWF0dGVyJiZoKys7TWIoYSxuLmNvbCl9aWYoInNzcCIhPUQoYSkmJjAhPT1rLmxlbmd0aCl7Zj0wO2ZvcihiPWcubGVuZ3RoO2Y8YjtmKyspY1tnW2ZdXT1mO2g9PT1rLmxlbmd0aD9nLnNvcnQoZnVuY3Rpb24oYSxiKXt2YXIgZCxoPWsubGVuZ3RoLGc9ZVthXS5fYVNvcnREYXRhLGY9ZVtiXS5fYVNvcnREYXRhO2ZvcihkPTA7ZDxoO2QrKyl7dmFyIGw9a1tkXTt2YXIgbT1nW2wuY29sXTt2YXIgbj1mW2wuY29sXTttPW08bj8tMTptPm4/MTowOwppZigwIT09bSlyZXR1cm4iYXNjIj09PWwuZGlyP206LW19bT1jW2FdO249Y1tiXTtyZXR1cm4gbTxuPy0xOm0+bj8xOjB9KTpnLnNvcnQoZnVuY3Rpb24oYSxiKXt2YXIgaCxnPWsubGVuZ3RoLGY9ZVthXS5fYVNvcnREYXRhLGw9ZVtiXS5fYVNvcnREYXRhO2ZvcihoPTA7aDxnO2grKyl7dmFyIG09a1toXTt2YXIgbj1mW20uY29sXTt2YXIgcD1sW20uY29sXTttPWRbbS50eXBlKyItIittLmRpcl18fGRbInN0cmluZy0iK20uZGlyXTtuPW0obixwKTtpZigwIT09bilyZXR1cm4gbn1uPWNbYV07cD1jW2JdO3JldHVybiBuPHA/LTE6bj5wPzE6MH0pfWEuYlNvcnRlZD0hMH1mdW5jdGlvbiBOYihhKXt2YXIgYj1hLmFvQ29sdW1ucyxjPVkoYSk7YT1hLm9MYW5ndWFnZS5vQXJpYTtmb3IodmFyIGQ9MCxlPWIubGVuZ3RoO2Q8ZTtkKyspe3ZhciBoPWJbZF07dmFyIGc9aC5hc1NvcnRpbmc7dmFyIGs9aC5zVGl0bGUucmVwbGFjZSgvPC4qPz4vZywiIik7dmFyIGY9aC5uVGg7Zi5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtc29ydCIpOwpoLmJTb3J0YWJsZSYmKDA8Yy5sZW5ndGgmJmNbMF0uY29sPT1kPyhmLnNldEF0dHJpYnV0ZSgiYXJpYS1zb3J0IiwiYXNjIj09Y1swXS5kaXI/ImFzY2VuZGluZyI6ImRlc2NlbmRpbmciKSxoPWdbY1swXS5pbmRleCsxXXx8Z1swXSk6aD1nWzBdLGsrPSJhc2MiPT09aD9hLnNTb3J0QXNjZW5kaW5nOmEuc1NvcnREZXNjZW5kaW5nKTtmLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsayl9fWZ1bmN0aW9uIFphKGEsYixjLGQpe3ZhciBlPWEuYWFTb3J0aW5nLGg9YS5hb0NvbHVtbnNbYl0uYXNTb3J0aW5nLGc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLl9pZHg7Yz09PXAmJihjPWYuaW5BcnJheShhWzFdLGgpKTtyZXR1cm4gYysxPGgubGVuZ3RoP2MrMTpiP251bGw6MH07Im51bWJlciI9PT10eXBlb2YgZVswXSYmKGU9YS5hYVNvcnRpbmc9W2VdKTtjJiZhLm9GZWF0dXJlcy5iU29ydE11bHRpPyhjPWYuaW5BcnJheShiLEooZSwiMCIpKSwtMSE9PWM/KGI9ZyhlW2NdLCEwKSxudWxsPT09CmImJjE9PT1lLmxlbmd0aCYmKGI9MCksbnVsbD09PWI/ZS5zcGxpY2UoYywxKTooZVtjXVsxXT1oW2JdLGVbY10uX2lkeD1iKSk6KGUucHVzaChbYixoWzBdLDBdKSxlW2UubGVuZ3RoLTFdLl9pZHg9MCkpOmUubGVuZ3RoJiZlWzBdWzBdPT1iPyhiPWcoZVswXSksZS5sZW5ndGg9MSxlWzBdWzFdPWhbYl0sZVswXS5faWR4PWIpOihlLmxlbmd0aD0wLGUucHVzaChbYixoWzBdXSksZVswXS5faWR4PTApO1YoYSk7ImZ1bmN0aW9uIj09dHlwZW9mIGQmJmQoYSl9ZnVuY3Rpb24gUWEoYSxiLGMsZCl7dmFyIGU9YS5hb0NvbHVtbnNbY107JGEoYix7fSxmdW5jdGlvbihiKXshMSE9PWUuYlNvcnRhYmxlJiYoYS5vRmVhdHVyZXMuYlByb2Nlc3Npbmc/KEsoYSwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe1phKGEsYyxiLnNoaWZ0S2V5LGQpOyJzc3AiIT09RChhKSYmSyhhLCExKX0sMCkpOlphKGEsYyxiLnNoaWZ0S2V5LGQpKX0pfWZ1bmN0aW9uIEFhKGEpe3ZhciBiPWEuYUxhc3RTb3J0LApjPWEub0NsYXNzZXMuc1NvcnRDb2x1bW4sZD1ZKGEpLGU9YS5vRmVhdHVyZXMsaDtpZihlLmJTb3J0JiZlLmJTb3J0Q2xhc3Nlcyl7ZT0wO2ZvcihoPWIubGVuZ3RoO2U8aDtlKyspe3ZhciBnPWJbZV0uc3JjO2YoSihhLmFvRGF0YSwiYW5DZWxscyIsZykpLnJlbW92ZUNsYXNzKGMrKDI+ZT9lKzE6MykpfWU9MDtmb3IoaD1kLmxlbmd0aDtlPGg7ZSsrKWc9ZFtlXS5zcmMsZihKKGEuYW9EYXRhLCJhbkNlbGxzIixnKSkuYWRkQ2xhc3MoYysoMj5lP2UrMTozKSl9YS5hTGFzdFNvcnQ9ZH1mdW5jdGlvbiBNYihhLGIpe3ZhciBjPWEuYW9Db2x1bW5zW2JdLGQ9cS5leHQub3JkZXJbYy5zU29ydERhdGFUeXBlXSxlO2QmJihlPWQuY2FsbChhLm9JbnN0YW5jZSxhLGIsY2EoYSxiKSkpO2Zvcih2YXIgaCxnPXEuZXh0LnR5cGUub3JkZXJbYy5zVHlwZSsiLXByZSJdLGs9MCxmPWEuYW9EYXRhLmxlbmd0aDtrPGY7aysrKWlmKGM9YS5hb0RhdGFba10sYy5fYVNvcnREYXRhfHwoYy5fYVNvcnREYXRhPQpbXSksIWMuX2FTb3J0RGF0YVtiXXx8ZCloPWQ/ZVtrXTpJKGEsayxiLCJzb3J0IiksYy5fYVNvcnREYXRhW2JdPWc/ZyhoKTpofWZ1bmN0aW9uIEJhKGEpe2lmKGEub0ZlYXR1cmVzLmJTdGF0ZVNhdmUmJiFhLmJEZXN0cm95aW5nKXt2YXIgYj17dGltZTorbmV3IERhdGUsc3RhcnQ6YS5faURpc3BsYXlTdGFydCxsZW5ndGg6YS5faURpc3BsYXlMZW5ndGgsb3JkZXI6Zi5leHRlbmQoITAsW10sYS5hYVNvcnRpbmcpLHNlYXJjaDpGYihhLm9QcmV2aW91c1NlYXJjaCksY29sdW1uczpmLm1hcChhLmFvQ29sdW1ucyxmdW5jdGlvbihiLGQpe3JldHVybnt2aXNpYmxlOmIuYlZpc2libGUsc2VhcmNoOkZiKGEuYW9QcmVTZWFyY2hDb2xzW2RdKX19KX07QShhLCJhb1N0YXRlU2F2ZVBhcmFtcyIsInN0YXRlU2F2ZVBhcmFtcyIsW2EsYl0pO2Eub1NhdmVkU3RhdGU9YjthLmZuU3RhdGVTYXZlQ2FsbGJhY2suY2FsbChhLm9JbnN0YW5jZSxhLGIpfX1mdW5jdGlvbiBPYihhLGIsYyl7dmFyIGQsCmUsaD1hLmFvQ29sdW1ucztiPWZ1bmN0aW9uKGIpe2lmKGImJmIudGltZSl7dmFyIGc9QShhLCJhb1N0YXRlTG9hZFBhcmFtcyIsInN0YXRlTG9hZFBhcmFtcyIsW2EsYl0pO2lmKC0xPT09Zi5pbkFycmF5KCExLGcpJiYoZz1hLmlTdGF0ZUR1cmF0aW9uLCEoMDxnJiZiLnRpbWU8K25ldyBEYXRlLTFFMypnfHxiLmNvbHVtbnMmJmgubGVuZ3RoIT09Yi5jb2x1bW5zLmxlbmd0aCkpKXthLm9Mb2FkZWRTdGF0ZT1mLmV4dGVuZCghMCx7fSxiKTtiLnN0YXJ0IT09cCYmKGEuX2lEaXNwbGF5U3RhcnQ9Yi5zdGFydCxhLmlJbml0RGlzcGxheVN0YXJ0PWIuc3RhcnQpO2IubGVuZ3RoIT09cCYmKGEuX2lEaXNwbGF5TGVuZ3RoPWIubGVuZ3RoKTtiLm9yZGVyIT09cCYmKGEuYWFTb3J0aW5nPVtdLGYuZWFjaChiLm9yZGVyLGZ1bmN0aW9uKGIsYyl7YS5hYVNvcnRpbmcucHVzaChjWzBdPj1oLmxlbmd0aD9bMCxjWzFdXTpjKX0pKTtiLnNlYXJjaCE9PXAmJmYuZXh0ZW5kKGEub1ByZXZpb3VzU2VhcmNoLApHYihiLnNlYXJjaCkpO2lmKGIuY29sdW1ucylmb3IoZD0wLGU9Yi5jb2x1bW5zLmxlbmd0aDtkPGU7ZCsrKWc9Yi5jb2x1bW5zW2RdLGcudmlzaWJsZSE9PXAmJihoW2RdLmJWaXNpYmxlPWcudmlzaWJsZSksZy5zZWFyY2ghPT1wJiZmLmV4dGVuZChhLmFvUHJlU2VhcmNoQ29sc1tkXSxHYihnLnNlYXJjaCkpO0EoYSwiYW9TdGF0ZUxvYWRlZCIsInN0YXRlTG9hZGVkIixbYSxiXSl9fWMoKX07aWYoYS5vRmVhdHVyZXMuYlN0YXRlU2F2ZSl7dmFyIGc9YS5mblN0YXRlTG9hZENhbGxiYWNrLmNhbGwoYS5vSW5zdGFuY2UsYSxiKTtnIT09cCYmYihnKX1lbHNlIGMoKX1mdW5jdGlvbiBDYShhKXt2YXIgYj1xLnNldHRpbmdzO2E9Zi5pbkFycmF5KGEsSihiLCJuVGFibGUiKSk7cmV0dXJuLTEhPT1hP2JbYV06bnVsbH1mdW5jdGlvbiBPKGEsYixjLGQpe2M9IkRhdGFUYWJsZXMgd2FybmluZzogIisoYT8idGFibGUgaWQ9IithLnNUYWJsZUlkKyIgLSAiOiIiKStjO2QmJihjKz0iLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGVycm9yLCBwbGVhc2Ugc2VlIGh0dHA6Ly9kYXRhdGFibGVzLm5ldC90bi8iKwpkKTtpZihiKXouY29uc29sZSYmY29uc29sZS5sb2cmJmNvbnNvbGUubG9nKGMpO2Vsc2UgaWYoYj1xLmV4dCxiPWIuc0Vyck1vZGV8fGIuZXJyTW9kZSxhJiZBKGEsbnVsbCwiZXJyb3IiLFthLGQsY10pLCJhbGVydCI9PWIpYWxlcnQoYyk7ZWxzZXtpZigidGhyb3ciPT1iKXRocm93IEVycm9yKGMpOyJmdW5jdGlvbiI9PXR5cGVvZiBiJiZiKGEsZCxjKX19ZnVuY3Rpb24gTShhLGIsYyxkKXtmLmlzQXJyYXkoYyk/Zi5lYWNoKGMsZnVuY3Rpb24oYyxkKXtmLmlzQXJyYXkoZCk/TShhLGIsZFswXSxkWzFdKTpNKGEsYixkKX0pOihkPT09cCYmKGQ9YyksYltjXSE9PXAmJihhW2RdPWJbY10pKX1mdW5jdGlvbiBhYihhLGIsYyl7dmFyIGQ7Zm9yKGQgaW4gYilpZihiLmhhc093blByb3BlcnR5KGQpKXt2YXIgZT1iW2RdO2YuaXNQbGFpbk9iamVjdChlKT8oZi5pc1BsYWluT2JqZWN0KGFbZF0pfHwoYVtkXT17fSksZi5leHRlbmQoITAsYVtkXSxlKSk6YyYmImRhdGEiIT09ZCYmImFhRGF0YSIhPT0KZCYmZi5pc0FycmF5KGUpP2FbZF09ZS5zbGljZSgpOmFbZF09ZX1yZXR1cm4gYX1mdW5jdGlvbiAkYShhLGIsYyl7ZihhKS5vbigiY2xpY2suRFQiLGIsZnVuY3Rpb24oYil7ZihhKS5ibHVyKCk7YyhiKX0pLm9uKCJrZXlwcmVzcy5EVCIsYixmdW5jdGlvbihhKXsxMz09PWEud2hpY2gmJihhLnByZXZlbnREZWZhdWx0KCksYyhhKSl9KS5vbigic2VsZWN0c3RhcnQuRFQiLGZ1bmN0aW9uKCl7cmV0dXJuITF9KX1mdW5jdGlvbiBFKGEsYixjLGQpe2MmJmFbYl0ucHVzaCh7Zm46YyxzTmFtZTpkfSl9ZnVuY3Rpb24gQShhLGIsYyxkKXt2YXIgZT1bXTtiJiYoZT1mLm1hcChhW2JdLnNsaWNlKCkucmV2ZXJzZSgpLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGIuZm4uYXBwbHkoYS5vSW5zdGFuY2UsZCl9KSk7bnVsbCE9PWMmJihiPWYuRXZlbnQoYysiLmR0IiksZihhLm5UYWJsZSkudHJpZ2dlcihiLGQpLGUucHVzaChiLnJlc3VsdCkpO3JldHVybiBlfWZ1bmN0aW9uIFdhKGEpe3ZhciBiPWEuX2lEaXNwbGF5U3RhcnQsCmM9YS5mbkRpc3BsYXlFbmQoKSxkPWEuX2lEaXNwbGF5TGVuZ3RoO2I+PWMmJihiPWMtZCk7Yi09YiVkO2lmKC0xPT09ZHx8MD5iKWI9MDthLl9pRGlzcGxheVN0YXJ0PWJ9ZnVuY3Rpb24gUmEoYSxiKXthPWEucmVuZGVyZXI7dmFyIGM9cS5leHQucmVuZGVyZXJbYl07cmV0dXJuIGYuaXNQbGFpbk9iamVjdChhKSYmYVtiXT9jW2FbYl1dfHxjLl86InN0cmluZyI9PT10eXBlb2YgYT9jW2FdfHxjLl86Yy5ffWZ1bmN0aW9uIEQoYSl7cmV0dXJuIGEub0ZlYXR1cmVzLmJTZXJ2ZXJTaWRlPyJzc3AiOmEuYWpheHx8YS5zQWpheFNvdXJjZT8iYWpheCI6ImRvbSJ9ZnVuY3Rpb24ga2EoYSxiKXt2YXIgYz1QYi5udW1iZXJzX2xlbmd0aCxkPU1hdGguZmxvb3IoYy8yKTtiPD1jP2E9WigwLGIpOmE8PWQ/KGE9WigwLGMtMiksYS5wdXNoKCJlbGxpcHNpcyIpLGEucHVzaChiLTEpKTooYT49Yi0xLWQ/YT1aKGItKGMtMiksYik6KGE9WihhLWQrMixhK2QtMSksYS5wdXNoKCJlbGxpcHNpcyIpLAphLnB1c2goYi0xKSksYS5zcGxpY2UoMCwwLCJlbGxpcHNpcyIpLGEuc3BsaWNlKDAsMCwwKSk7YS5EVF9lbD0ic3BhbiI7cmV0dXJuIGF9ZnVuY3Rpb24gSGEoYSl7Zi5lYWNoKHtudW06ZnVuY3Rpb24oYil7cmV0dXJuIERhKGIsYSl9LCJudW0tZm10IjpmdW5jdGlvbihiKXtyZXR1cm4gRGEoYixhLGJiKX0sImh0bWwtbnVtIjpmdW5jdGlvbihiKXtyZXR1cm4gRGEoYixhLEVhKX0sImh0bWwtbnVtLWZtdCI6ZnVuY3Rpb24oYil7cmV0dXJuIERhKGIsYSxFYSxiYil9fSxmdW5jdGlvbihiLGMpe0MudHlwZS5vcmRlcltiK2ErIi1wcmUiXT1jO2IubWF0Y2goL15odG1sXC0vKSYmKEMudHlwZS5zZWFyY2hbYithXT1DLnR5cGUuc2VhcmNoLmh0bWwpfSl9ZnVuY3Rpb24gUWIoYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9W0NhKHRoaXNbcS5leHQuaUFwaUluZGV4XSldLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKTtyZXR1cm4gcS5leHQuaW50ZXJuYWxbYV0uYXBwbHkodGhpcywKYil9fXZhciBxPWZ1bmN0aW9uKGEpe3RoaXMuJD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmFwaSghMCkuJChhLGIpfTt0aGlzLl89ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5hcGkoITApLnJvd3MoYSxiKS5kYXRhKCl9O3RoaXMuYXBpPWZ1bmN0aW9uKGEpe3JldHVybiBhP25ldyB2KENhKHRoaXNbQy5pQXBpSW5kZXhdKSk6bmV3IHYodGhpcyl9O3RoaXMuZm5BZGREYXRhPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hcGkoITApO2E9Zi5pc0FycmF5KGEpJiYoZi5pc0FycmF5KGFbMF0pfHxmLmlzUGxhaW5PYmplY3QoYVswXSkpP2Mucm93cy5hZGQoYSk6Yy5yb3cuYWRkKGEpOyhiPT09cHx8YikmJmMuZHJhdygpO3JldHVybiBhLmZsYXR0ZW4oKS50b0FycmF5KCl9O3RoaXMuZm5BZGp1c3RDb2x1bW5TaXppbmc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hcGkoITApLmNvbHVtbnMuYWRqdXN0KCksYz1iLnNldHRpbmdzKClbMF0sZD1jLm9TY3JvbGw7YT09PXB8fGE/Yi5kcmF3KCExKToKKCIiIT09ZC5zWHx8IiIhPT1kLnNZKSYmbmEoYyl9O3RoaXMuZm5DbGVhclRhYmxlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYXBpKCEwKS5jbGVhcigpOyhhPT09cHx8YSkmJmIuZHJhdygpfTt0aGlzLmZuQ2xvc2U9ZnVuY3Rpb24oYSl7dGhpcy5hcGkoITApLnJvdyhhKS5jaGlsZC5oaWRlKCl9O3RoaXMuZm5EZWxldGVSb3c9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuYXBpKCEwKTthPWQucm93cyhhKTt2YXIgZT1hLnNldHRpbmdzKClbMF0saD1lLmFvRGF0YVthWzBdWzBdXTthLnJlbW92ZSgpO2ImJmIuY2FsbCh0aGlzLGUsaCk7KGM9PT1wfHxjKSYmZC5kcmF3KCk7cmV0dXJuIGh9O3RoaXMuZm5EZXN0cm95PWZ1bmN0aW9uKGEpe3RoaXMuYXBpKCEwKS5kZXN0cm95KGEpfTt0aGlzLmZuRHJhdz1mdW5jdGlvbihhKXt0aGlzLmFwaSghMCkuZHJhdyhhKX07dGhpcy5mbkZpbHRlcj1mdW5jdGlvbihhLGIsYyxkLGUsZil7ZT10aGlzLmFwaSghMCk7bnVsbD09PWJ8fGI9PT1wPwplLnNlYXJjaChhLGMsZCxmKTplLmNvbHVtbihiKS5zZWFyY2goYSxjLGQsZik7ZS5kcmF3KCl9O3RoaXMuZm5HZXREYXRhPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hcGkoITApO2lmKGEhPT1wKXt2YXIgZD1hLm5vZGVOYW1lP2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKToiIjtyZXR1cm4gYiE9PXB8fCJ0ZCI9PWR8fCJ0aCI9PWQ/Yy5jZWxsKGEsYikuZGF0YSgpOmMucm93KGEpLmRhdGEoKXx8bnVsbH1yZXR1cm4gYy5kYXRhKCkudG9BcnJheSgpfTt0aGlzLmZuR2V0Tm9kZXM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hcGkoITApO3JldHVybiBhIT09cD9iLnJvdyhhKS5ub2RlKCk6Yi5yb3dzKCkubm9kZXMoKS5mbGF0dGVuKCkudG9BcnJheSgpfTt0aGlzLmZuR2V0UG9zaXRpb249ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hcGkoITApLGM9YS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO3JldHVybiJUUiI9PWM/Yi5yb3coYSkuaW5kZXgoKToiVEQiPT1jfHwiVEgiPT1jPyhhPWIuY2VsbChhKS5pbmRleCgpLApbYS5yb3csYS5jb2x1bW5WaXNpYmxlLGEuY29sdW1uXSk6bnVsbH07dGhpcy5mbklzT3Blbj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hcGkoITApLnJvdyhhKS5jaGlsZC5pc1Nob3duKCl9O3RoaXMuZm5PcGVuPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5hcGkoITApLnJvdyhhKS5jaGlsZChiLGMpLnNob3coKS5jaGlsZCgpWzBdfTt0aGlzLmZuUGFnZUNoYW5nZT1mdW5jdGlvbihhLGIpe2E9dGhpcy5hcGkoITApLnBhZ2UoYSk7KGI9PT1wfHxiKSYmYS5kcmF3KCExKX07dGhpcy5mblNldENvbHVtblZpcz1mdW5jdGlvbihhLGIsYyl7YT10aGlzLmFwaSghMCkuY29sdW1uKGEpLnZpc2libGUoYik7KGM9PT1wfHxjKSYmYS5jb2x1bW5zLmFkanVzdCgpLmRyYXcoKX07dGhpcy5mblNldHRpbmdzPWZ1bmN0aW9uKCl7cmV0dXJuIENhKHRoaXNbQy5pQXBpSW5kZXhdKX07dGhpcy5mblNvcnQ9ZnVuY3Rpb24oYSl7dGhpcy5hcGkoITApLm9yZGVyKGEpLmRyYXcoKX07dGhpcy5mblNvcnRMaXN0ZW5lcj0KZnVuY3Rpb24oYSxiLGMpe3RoaXMuYXBpKCEwKS5vcmRlci5saXN0ZW5lcihhLGIsYyl9O3RoaXMuZm5VcGRhdGU9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgaD10aGlzLmFwaSghMCk7Yz09PXB8fG51bGw9PT1jP2gucm93KGIpLmRhdGEoYSk6aC5jZWxsKGIsYykuZGF0YShhKTsoZT09PXB8fGUpJiZoLmNvbHVtbnMuYWRqdXN0KCk7KGQ9PT1wfHxkKSYmaC5kcmF3KCk7cmV0dXJuIDB9O3RoaXMuZm5WZXJzaW9uQ2hlY2s9Qy5mblZlcnNpb25DaGVjazt2YXIgYj10aGlzLGM9YT09PXAsZD10aGlzLmxlbmd0aDtjJiYoYT17fSk7dGhpcy5vQXBpPXRoaXMuaW50ZXJuYWw9Qy5pbnRlcm5hbDtmb3IodmFyIGUgaW4gcS5leHQuaW50ZXJuYWwpZSYmKHRoaXNbZV09UWIoZSkpO3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPXt9LGc9MTxkP2FiKGUsYSwhMCk6YSxrPTAsbDtlPXRoaXMuZ2V0QXR0cmlidXRlKCJpZCIpO3ZhciBuPSExLG09cS5kZWZhdWx0cyx3PWYodGhpcyk7aWYoInRhYmxlIiE9CnRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlPKG51bGwsMCwiTm9uLXRhYmxlIG5vZGUgaW5pdGlhbGlzYXRpb24gKCIrdGhpcy5ub2RlTmFtZSsiKSIsMik7ZWxzZXtqYihtKTtrYihtLmNvbHVtbik7TChtLG0sITApO0wobS5jb2x1bW4sbS5jb2x1bW4sITApO0wobSxmLmV4dGVuZChnLHcuZGF0YSgpKSwhMCk7dmFyIHU9cS5zZXR0aW5ncztrPTA7Zm9yKGw9dS5sZW5ndGg7azxsO2srKyl7dmFyIHQ9dVtrXTtpZih0Lm5UYWJsZT09dGhpc3x8dC5uVEhlYWQmJnQublRIZWFkLnBhcmVudE5vZGU9PXRoaXN8fHQublRGb290JiZ0Lm5URm9vdC5wYXJlbnROb2RlPT10aGlzKXt2YXIgdj1nLmJSZXRyaWV2ZSE9PXA/Zy5iUmV0cmlldmU6bS5iUmV0cmlldmU7aWYoY3x8dilyZXR1cm4gdC5vSW5zdGFuY2U7aWYoZy5iRGVzdHJveSE9PXA/Zy5iRGVzdHJveTptLmJEZXN0cm95KXt0Lm9JbnN0YW5jZS5mbkRlc3Ryb3koKTticmVha31lbHNle08odCwwLCJDYW5ub3QgcmVpbml0aWFsaXNlIERhdGFUYWJsZSIsCjMpO3JldHVybn19aWYodC5zVGFibGVJZD09dGhpcy5pZCl7dS5zcGxpY2UoaywxKTticmVha319aWYobnVsbD09PWV8fCIiPT09ZSl0aGlzLmlkPWU9IkRhdGFUYWJsZXNfVGFibGVfIitxLmV4dC5fdW5pcXVlKys7dmFyIHI9Zi5leHRlbmQoITAse30scS5tb2RlbHMub1NldHRpbmdzLHtzRGVzdHJveVdpZHRoOndbMF0uc3R5bGUud2lkdGgsc0luc3RhbmNlOmUsc1RhYmxlSWQ6ZX0pO3IublRhYmxlPXRoaXM7ci5vQXBpPWIuaW50ZXJuYWw7ci5vSW5pdD1nO3UucHVzaChyKTtyLm9JbnN0YW5jZT0xPT09Yi5sZW5ndGg/Yjp3LmRhdGFUYWJsZSgpO2piKGcpO0dhKGcub0xhbmd1YWdlKTtnLmFMZW5ndGhNZW51JiYhZy5pRGlzcGxheUxlbmd0aCYmKGcuaURpc3BsYXlMZW5ndGg9Zi5pc0FycmF5KGcuYUxlbmd0aE1lbnVbMF0pP2cuYUxlbmd0aE1lbnVbMF1bMF06Zy5hTGVuZ3RoTWVudVswXSk7Zz1hYihmLmV4dGVuZCghMCx7fSxtKSxnKTtNKHIub0ZlYXR1cmVzLGcsImJQYWdpbmF0ZSBiTGVuZ3RoQ2hhbmdlIGJGaWx0ZXIgYlNvcnQgYlNvcnRNdWx0aSBiSW5mbyBiUHJvY2Vzc2luZyBiQXV0b1dpZHRoIGJTb3J0Q2xhc3NlcyBiU2VydmVyU2lkZSBiRGVmZXJSZW5kZXIiLnNwbGl0KCIgIikpOwpNKHIsZyxbImFzU3RyaXBlQ2xhc3NlcyIsImFqYXgiLCJmblNlcnZlckRhdGEiLCJmbkZvcm1hdE51bWJlciIsInNTZXJ2ZXJNZXRob2QiLCJhYVNvcnRpbmciLCJhYVNvcnRpbmdGaXhlZCIsImFMZW5ndGhNZW51Iiwic1BhZ2luYXRpb25UeXBlIiwic0FqYXhTb3VyY2UiLCJzQWpheERhdGFQcm9wIiwiaVN0YXRlRHVyYXRpb24iLCJzRG9tIiwiYlNvcnRDZWxsc1RvcCIsImlUYWJJbmRleCIsImZuU3RhdGVMb2FkQ2FsbGJhY2siLCJmblN0YXRlU2F2ZUNhbGxiYWNrIiwicmVuZGVyZXIiLCJzZWFyY2hEZWxheSIsInJvd0lkIixbImlDb29raWVEdXJhdGlvbiIsImlTdGF0ZUR1cmF0aW9uIl0sWyJvU2VhcmNoIiwib1ByZXZpb3VzU2VhcmNoIl0sWyJhb1NlYXJjaENvbHMiLCJhb1ByZVNlYXJjaENvbHMiXSxbImlEaXNwbGF5TGVuZ3RoIiwiX2lEaXNwbGF5TGVuZ3RoIl1dKTtNKHIub1Njcm9sbCxnLFtbInNTY3JvbGxYIiwic1giXSxbInNTY3JvbGxYSW5uZXIiLCJzWElubmVyIl0sClsic1Njcm9sbFkiLCJzWSJdLFsiYlNjcm9sbENvbGxhcHNlIiwiYkNvbGxhcHNlIl1dKTtNKHIub0xhbmd1YWdlLGcsImZuSW5mb0NhbGxiYWNrIik7RShyLCJhb0RyYXdDYWxsYmFjayIsZy5mbkRyYXdDYWxsYmFjaywidXNlciIpO0UociwiYW9TZXJ2ZXJQYXJhbXMiLGcuZm5TZXJ2ZXJQYXJhbXMsInVzZXIiKTtFKHIsImFvU3RhdGVTYXZlUGFyYW1zIixnLmZuU3RhdGVTYXZlUGFyYW1zLCJ1c2VyIik7RShyLCJhb1N0YXRlTG9hZFBhcmFtcyIsZy5mblN0YXRlTG9hZFBhcmFtcywidXNlciIpO0UociwiYW9TdGF0ZUxvYWRlZCIsZy5mblN0YXRlTG9hZGVkLCJ1c2VyIik7RShyLCJhb1Jvd0NhbGxiYWNrIixnLmZuUm93Q2FsbGJhY2ssInVzZXIiKTtFKHIsImFvUm93Q3JlYXRlZENhbGxiYWNrIixnLmZuQ3JlYXRlZFJvdywidXNlciIpO0UociwiYW9IZWFkZXJDYWxsYmFjayIsZy5mbkhlYWRlckNhbGxiYWNrLCJ1c2VyIik7RShyLCJhb0Zvb3RlckNhbGxiYWNrIixnLmZuRm9vdGVyQ2FsbGJhY2ssCiJ1c2VyIik7RShyLCJhb0luaXRDb21wbGV0ZSIsZy5mbkluaXRDb21wbGV0ZSwidXNlciIpO0UociwiYW9QcmVEcmF3Q2FsbGJhY2siLGcuZm5QcmVEcmF3Q2FsbGJhY2ssInVzZXIiKTtyLnJvd0lkRm49VShnLnJvd0lkKTtsYihyKTt2YXIgeD1yLm9DbGFzc2VzO2YuZXh0ZW5kKHgscS5leHQuY2xhc3NlcyxnLm9DbGFzc2VzKTt3LmFkZENsYXNzKHguc1RhYmxlKTtyLmlJbml0RGlzcGxheVN0YXJ0PT09cCYmKHIuaUluaXREaXNwbGF5U3RhcnQ9Zy5pRGlzcGxheVN0YXJ0LHIuX2lEaXNwbGF5U3RhcnQ9Zy5pRGlzcGxheVN0YXJ0KTtudWxsIT09Zy5pRGVmZXJMb2FkaW5nJiYoci5iRGVmZXJMb2FkaW5nPSEwLGU9Zi5pc0FycmF5KGcuaURlZmVyTG9hZGluZyksci5faVJlY29yZHNEaXNwbGF5PWU/Zy5pRGVmZXJMb2FkaW5nWzBdOmcuaURlZmVyTG9hZGluZyxyLl9pUmVjb3Jkc1RvdGFsPWU/Zy5pRGVmZXJMb2FkaW5nWzFdOmcuaURlZmVyTG9hZGluZyk7dmFyIHk9ci5vTGFuZ3VhZ2U7CmYuZXh0ZW5kKCEwLHksZy5vTGFuZ3VhZ2UpO3kuc1VybCYmKGYuYWpheCh7ZGF0YVR5cGU6Impzb24iLHVybDp5LnNVcmwsc3VjY2VzczpmdW5jdGlvbihhKXtHYShhKTtMKG0ub0xhbmd1YWdlLGEpO2YuZXh0ZW5kKCEwLHksYSk7amEocil9LGVycm9yOmZ1bmN0aW9uKCl7amEocil9fSksbj0hMCk7bnVsbD09PWcuYXNTdHJpcGVDbGFzc2VzJiYoci5hc1N0cmlwZUNsYXNzZXM9W3guc1N0cmlwZU9kZCx4LnNTdHJpcGVFdmVuXSk7ZT1yLmFzU3RyaXBlQ2xhc3Nlczt2YXIgej13LmNoaWxkcmVuKCJ0Ym9keSIpLmZpbmQoInRyIikuZXEoMCk7LTEhPT1mLmluQXJyYXkoITAsZi5tYXAoZSxmdW5jdGlvbihhLGIpe3JldHVybiB6Lmhhc0NsYXNzKGEpfSkpJiYoZigidGJvZHkgdHIiLHRoaXMpLnJlbW92ZUNsYXNzKGUuam9pbigiICIpKSxyLmFzRGVzdHJveVN0cmlwZXM9ZS5zbGljZSgpKTtlPVtdO3U9dGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGhlYWQiKTswIT09dS5sZW5ndGgmJgooZmEoci5hb0hlYWRlcix1WzBdKSxlPXVhKHIpKTtpZihudWxsPT09Zy5hb0NvbHVtbnMpZm9yKHU9W10saz0wLGw9ZS5sZW5ndGg7azxsO2srKyl1LnB1c2gobnVsbCk7ZWxzZSB1PWcuYW9Db2x1bW5zO2s9MDtmb3IobD11Lmxlbmd0aDtrPGw7aysrKUlhKHIsZT9lW2tdOm51bGwpO25iKHIsZy5hb0NvbHVtbkRlZnMsdSxmdW5jdGlvbihhLGIpe21hKHIsYSxiKX0pO2lmKHoubGVuZ3RoKXt2YXIgQj1mdW5jdGlvbihhLGIpe3JldHVybiBudWxsIT09YS5nZXRBdHRyaWJ1dGUoImRhdGEtIitiKT9iOm51bGx9O2YoelswXSkuY2hpbGRyZW4oInRoLCB0ZCIpLmVhY2goZnVuY3Rpb24oYSxiKXt2YXIgYz1yLmFvQ29sdW1uc1thXTtpZihjLm1EYXRhPT09YSl7dmFyIGQ9QihiLCJzb3J0Iil8fEIoYiwib3JkZXIiKTtiPUIoYiwiZmlsdGVyIil8fEIoYiwic2VhcmNoIik7aWYobnVsbCE9PWR8fG51bGwhPT1iKWMubURhdGE9e186YSsiLmRpc3BsYXkiLHNvcnQ6bnVsbCE9PWQ/YSsiLkBkYXRhLSIrCmQ6cCx0eXBlOm51bGwhPT1kP2ErIi5AZGF0YS0iK2Q6cCxmaWx0ZXI6bnVsbCE9PWI/YSsiLkBkYXRhLSIrYjpwfSxtYShyLGEpfX0pfXZhciBDPXIub0ZlYXR1cmVzO2U9ZnVuY3Rpb24oKXtpZihnLmFhU29ydGluZz09PXApe3ZhciBhPXIuYWFTb3J0aW5nO2s9MDtmb3IobD1hLmxlbmd0aDtrPGw7aysrKWFba11bMV09ci5hb0NvbHVtbnNba10uYXNTb3J0aW5nWzBdfUFhKHIpO0MuYlNvcnQmJkUociwiYW9EcmF3Q2FsbGJhY2siLGZ1bmN0aW9uKCl7aWYoci5iU29ydGVkKXt2YXIgYT1ZKHIpLGI9e307Zi5lYWNoKGEsZnVuY3Rpb24oYSxjKXtiW2Muc3JjXT1jLmRpcn0pO0EocixudWxsLCJvcmRlciIsW3IsYSxiXSk7TmIocil9fSk7RShyLCJhb0RyYXdDYWxsYmFjayIsZnVuY3Rpb24oKXsoci5iU29ydGVkfHwic3NwIj09PUQocil8fEMuYkRlZmVyUmVuZGVyKSYmQWEocil9LCJzYyIpO2E9dy5jaGlsZHJlbigiY2FwdGlvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9jYXB0aW9uU2lkZT0KZih0aGlzKS5jc3MoImNhcHRpb24tc2lkZSIpfSk7dmFyIGI9dy5jaGlsZHJlbigidGhlYWQiKTswPT09Yi5sZW5ndGgmJihiPWYoIjx0aGVhZC8+IikuYXBwZW5kVG8odykpO3IublRIZWFkPWJbMF07Yj13LmNoaWxkcmVuKCJ0Ym9keSIpOzA9PT1iLmxlbmd0aCYmKGI9ZigiPHRib2R5Lz4iKS5hcHBlbmRUbyh3KSk7ci5uVEJvZHk9YlswXTtiPXcuY2hpbGRyZW4oInRmb290Iik7MD09PWIubGVuZ3RoJiYwPGEubGVuZ3RoJiYoIiIhPT1yLm9TY3JvbGwuc1h8fCIiIT09ci5vU2Nyb2xsLnNZKSYmKGI9ZigiPHRmb290Lz4iKS5hcHBlbmRUbyh3KSk7MD09PWIubGVuZ3RofHwwPT09Yi5jaGlsZHJlbigpLmxlbmd0aD93LmFkZENsYXNzKHguc05vRm9vdGVyKTowPGIubGVuZ3RoJiYoci5uVEZvb3Q9YlswXSxmYShyLmFvRm9vdGVyLHIublRGb290KSk7aWYoZy5hYURhdGEpZm9yKGs9MDtrPGcuYWFEYXRhLmxlbmd0aDtrKyspUihyLGcuYWFEYXRhW2tdKTtlbHNlKHIuYkRlZmVyTG9hZGluZ3x8CiJkb20iPT1EKHIpKSYmcGEocixmKHIublRCb2R5KS5jaGlsZHJlbigidHIiKSk7ci5haURpc3BsYXk9ci5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKTtyLmJJbml0aWFsaXNlZD0hMDshMT09PW4mJmphKHIpfTtnLmJTdGF0ZVNhdmU/KEMuYlN0YXRlU2F2ZT0hMCxFKHIsImFvRHJhd0NhbGxiYWNrIixCYSwic3RhdGVfc2F2ZSIpLE9iKHIsZyxlKSk6ZSgpfX0pO2I9bnVsbDtyZXR1cm4gdGhpc30sQyx0LHgsY2I9e30sUmI9L1tcclxuXHUyMDI4XS9nLEVhPS88Lio/Pi9nLGNjPS9eXGR7Miw0fVtcLlwvXC1dXGR7MSwyfVtcLlwvXC1dXGR7MSwyfShbVCBdezF9XGR7MSwyfVs6XC5dXGR7Mn0oW1wuOl1cZHsyfSk/KT8kLyxkYz0vKFwvfFwufFwqfFwrfFw/fFx8fFwofFwpfFxbfFxdfFx7fFx9fFxcfFwkfFxefFwtKS9nLGJiPS9bJywkwqPigqzCpSVcdTIwMDlcdTIwMkZcdTIwQkRcdTIwYTlcdTIwQkFyZmvJg86eXS9naSxQPWZ1bmN0aW9uKGEpe3JldHVybiBhJiYhMCE9PWEmJiItIiE9PWE/ITE6CiEwfSxTYj1mdW5jdGlvbihhKXt2YXIgYj1wYXJzZUludChhLDEwKTtyZXR1cm4haXNOYU4oYikmJmlzRmluaXRlKGEpP2I6bnVsbH0sVGI9ZnVuY3Rpb24oYSxiKXtjYltiXXx8KGNiW2JdPW5ldyBSZWdFeHAoVWEoYiksImciKSk7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgYSYmIi4iIT09Yj9hLnJlcGxhY2UoL1wuL2csIiIpLnJlcGxhY2UoY2JbYl0sIi4iKTphfSxkYj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9InN0cmluZyI9PT10eXBlb2YgYTtpZihQKGEpKXJldHVybiEwO2ImJmQmJihhPVRiKGEsYikpO2MmJmQmJihhPWEucmVwbGFjZShiYiwiIikpO3JldHVybiFpc05hTihwYXJzZUZsb2F0KGEpKSYmaXNGaW5pdGUoYSl9LFViPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gUChhKT8hMDpQKGEpfHwic3RyaW5nIj09PXR5cGVvZiBhP2RiKGEucmVwbGFjZShFYSwiIiksYixjKT8hMDpudWxsOm51bGx9LEo9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVtdLGU9MCxoPWEubGVuZ3RoO2lmKGMhPT0KcClmb3IoO2U8aDtlKyspYVtlXSYmYVtlXVtiXSYmZC5wdXNoKGFbZV1bYl1bY10pO2Vsc2UgZm9yKDtlPGg7ZSsrKWFbZV0mJmQucHVzaChhW2VdW2JdKTtyZXR1cm4gZH0sbGE9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9W10saD0wLGc9Yi5sZW5ndGg7aWYoZCE9PXApZm9yKDtoPGc7aCsrKWFbYltoXV1bY10mJmUucHVzaChhW2JbaF1dW2NdW2RdKTtlbHNlIGZvcig7aDxnO2grKyllLnB1c2goYVtiW2hdXVtjXSk7cmV0dXJuIGV9LFo9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtpZihiPT09cCl7Yj0wO3ZhciBkPWF9ZWxzZSBkPWIsYj1hO2ZvcihhPWI7YTxkO2ErKyljLnB1c2goYSk7cmV0dXJuIGN9LFZiPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTAsZD1hLmxlbmd0aDtjPGQ7YysrKWFbY10mJmIucHVzaChhW2NdKTtyZXR1cm4gYn0sdGE9ZnVuY3Rpb24oYSl7YTp7aWYoISgyPmEubGVuZ3RoKSl7dmFyIGI9YS5zbGljZSgpLnNvcnQoKTtmb3IodmFyIGM9YlswXSxkPTEsCmU9Yi5sZW5ndGg7ZDxlO2QrKyl7aWYoYltkXT09PWMpe2I9ITE7YnJlYWsgYX1jPWJbZF19fWI9ITB9aWYoYilyZXR1cm4gYS5zbGljZSgpO2I9W107ZT1hLmxlbmd0aDt2YXIgaCxnPTA7ZD0wO2E6Zm9yKDtkPGU7ZCsrKXtjPWFbZF07Zm9yKGg9MDtoPGc7aCsrKWlmKGJbaF09PT1jKWNvbnRpbnVlIGE7Yi5wdXNoKGMpO2crK31yZXR1cm4gYn07cS51dGlsPXt0aHJvdHRsZTpmdW5jdGlvbihhLGIpe3ZhciBjPWIhPT1wP2I6MjAwLGQsZTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj10aGlzLGc9K25ldyBEYXRlLGY9YXJndW1lbnRzO2QmJmc8ZCtjPyhjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZD1wO2EuYXBwbHkoYixmKX0sYykpOihkPWcsYS5hcHBseShiLGYpKX19LGVzY2FwZVJlZ2V4OmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoZGMsIlxcJDEiKX19O3ZhciBGPWZ1bmN0aW9uKGEsYixjKXthW2JdIT09cCYmKGFbY109YVtiXSl9LGRhPS9cWy4qP1xdJC8sClg9L1woXCkkLyxVYT1xLnV0aWwuZXNjYXBlUmVnZXgseWE9ZigiPGRpdj4iKVswXSwkYj15YS50ZXh0Q29udGVudCE9PXAsYmM9LzwuKj8+L2csU2E9cS51dGlsLnRocm90dGxlLFdiPVtdLEc9QXJyYXkucHJvdG90eXBlLGVjPWZ1bmN0aW9uKGEpe3ZhciBiLGM9cS5zZXR0aW5ncyxkPWYubWFwKGMsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5uVGFibGV9KTtpZihhKXtpZihhLm5UYWJsZSYmYS5vQXBpKXJldHVyblthXTtpZihhLm5vZGVOYW1lJiYidGFibGUiPT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXt2YXIgZT1mLmluQXJyYXkoYSxkKTtyZXR1cm4tMSE9PWU/W2NbZV1dOm51bGx9aWYoYSYmImZ1bmN0aW9uIj09PXR5cGVvZiBhLnNldHRpbmdzKXJldHVybiBhLnNldHRpbmdzKCkudG9BcnJheSgpOyJzdHJpbmciPT09dHlwZW9mIGE/Yj1mKGEpOmEgaW5zdGFuY2VvZiBmJiYoYj1hKX1lbHNlIHJldHVybltdO2lmKGIpcmV0dXJuIGIubWFwKGZ1bmN0aW9uKGEpe2U9Zi5pbkFycmF5KHRoaXMsCmQpO3JldHVybi0xIT09ZT9jW2VdOm51bGx9KS50b0FycmF5KCl9O3ZhciB2PWZ1bmN0aW9uKGEsYil7aWYoISh0aGlzIGluc3RhbmNlb2YgdikpcmV0dXJuIG5ldyB2KGEsYik7dmFyIGM9W10sZD1mdW5jdGlvbihhKXsoYT1lYyhhKSkmJmMucHVzaC5hcHBseShjLGEpfTtpZihmLmlzQXJyYXkoYSkpZm9yKHZhciBlPTAsaD1hLmxlbmd0aDtlPGg7ZSsrKWQoYVtlXSk7ZWxzZSBkKGEpO3RoaXMuY29udGV4dD10YShjKTtiJiZmLm1lcmdlKHRoaXMsYik7dGhpcy5zZWxlY3Rvcj17cm93czpudWxsLGNvbHM6bnVsbCxvcHRzOm51bGx9O3YuZXh0ZW5kKHRoaXMsdGhpcyxXYil9O3EuQXBpPXY7Zi5leHRlbmQodi5wcm90b3R5cGUse2FueTpmdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5jb3VudCgpfSxjb25jYXQ6Ry5jb25jYXQsY29udGV4dDpbXSxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZsYXR0ZW4oKS5sZW5ndGh9LGVhY2g6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz0KdGhpcy5sZW5ndGg7YjxjO2IrKylhLmNhbGwodGhpcyx0aGlzW2JdLGIsdGhpcyk7cmV0dXJuIHRoaXN9LGVxOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY29udGV4dDtyZXR1cm4gYi5sZW5ndGg+YT9uZXcgdihiW2FdLHRoaXNbYV0pOm51bGx9LGZpbHRlcjpmdW5jdGlvbihhKXt2YXIgYj1bXTtpZihHLmZpbHRlciliPUcuZmlsdGVyLmNhbGwodGhpcyxhLHRoaXMpO2Vsc2UgZm9yKHZhciBjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKWEuY2FsbCh0aGlzLHRoaXNbY10sYyx0aGlzKSYmYi5wdXNoKHRoaXNbY10pO3JldHVybiBuZXcgdih0aGlzLmNvbnRleHQsYil9LGZsYXR0ZW46ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gbmV3IHYodGhpcy5jb250ZXh0LGEuY29uY2F0LmFwcGx5KGEsdGhpcy50b0FycmF5KCkpKX0sam9pbjpHLmpvaW4saW5kZXhPZjpHLmluZGV4T2Z8fGZ1bmN0aW9uKGEsYil7Yj1ifHwwO2Zvcih2YXIgYz10aGlzLmxlbmd0aDtiPGM7YisrKWlmKHRoaXNbYl09PT0KYSlyZXR1cm4gYjtyZXR1cm4tMX0saXRlcmF0b3I6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9W10saCxnLGY9dGhpcy5jb250ZXh0LGwsbj10aGlzLnNlbGVjdG9yOyJzdHJpbmciPT09dHlwZW9mIGEmJihkPWMsYz1iLGI9YSxhPSExKTt2YXIgbT0wO2ZvcihoPWYubGVuZ3RoO208aDttKyspe3ZhciBxPW5ldyB2KGZbbV0pO2lmKCJ0YWJsZSI9PT1iKXt2YXIgdT1jLmNhbGwocSxmW21dLG0pO3UhPT1wJiZlLnB1c2godSl9ZWxzZSBpZigiY29sdW1ucyI9PT1ifHwicm93cyI9PT1iKXU9Yy5jYWxsKHEsZlttXSx0aGlzW21dLG0pLHUhPT1wJiZlLnB1c2godSk7ZWxzZSBpZigiY29sdW1uIj09PWJ8fCJjb2x1bW4tcm93cyI9PT1ifHwicm93Ij09PWJ8fCJjZWxsIj09PWIpe3ZhciB0PXRoaXNbbV07ImNvbHVtbi1yb3dzIj09PWImJihsPUZhKGZbbV0sbi5vcHRzKSk7dmFyIHg9MDtmb3IoZz10Lmxlbmd0aDt4PGc7eCsrKXU9dFt4XSx1PSJjZWxsIj09PWI/Yy5jYWxsKHEsZlttXSx1LnJvdywKdS5jb2x1bW4sbSx4KTpjLmNhbGwocSxmW21dLHUsbSx4LGwpLHUhPT1wJiZlLnB1c2godSl9fXJldHVybiBlLmxlbmd0aHx8ZD8oYT1uZXcgdihmLGE/ZS5jb25jYXQuYXBwbHkoW10sZSk6ZSksYj1hLnNlbGVjdG9yLGIucm93cz1uLnJvd3MsYi5jb2xzPW4uY29scyxiLm9wdHM9bi5vcHRzLGEpOnRoaXN9LGxhc3RJbmRleE9mOkcubGFzdEluZGV4T2Z8fGZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuaW5kZXhPZi5hcHBseSh0aGlzLnRvQXJyYXkucmV2ZXJzZSgpLGFyZ3VtZW50cyl9LGxlbmd0aDowLG1hcDpmdW5jdGlvbihhKXt2YXIgYj1bXTtpZihHLm1hcCliPUcubWFwLmNhbGwodGhpcyxhLHRoaXMpO2Vsc2UgZm9yKHZhciBjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKWIucHVzaChhLmNhbGwodGhpcyx0aGlzW2NdLGMpKTtyZXR1cm4gbmV3IHYodGhpcy5jb250ZXh0LGIpfSxwbHVjazpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oYil7cmV0dXJuIGJbYV19KX0sCnBvcDpHLnBvcCxwdXNoOkcucHVzaCxyZWR1Y2U6Ry5yZWR1Y2V8fGZ1bmN0aW9uKGEsYil7cmV0dXJuIG1iKHRoaXMsYSxiLDAsdGhpcy5sZW5ndGgsMSl9LHJlZHVjZVJpZ2h0OkcucmVkdWNlUmlnaHR8fGZ1bmN0aW9uKGEsYil7cmV0dXJuIG1iKHRoaXMsYSxiLHRoaXMubGVuZ3RoLTEsLTEsLTEpfSxyZXZlcnNlOkcucmV2ZXJzZSxzZWxlY3RvcjpudWxsLHNoaWZ0Okcuc2hpZnQsc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHYodGhpcy5jb250ZXh0LHRoaXMpfSxzb3J0Okcuc29ydCxzcGxpY2U6Ry5zcGxpY2UsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBHLnNsaWNlLmNhbGwodGhpcyl9LHRvJDpmdW5jdGlvbigpe3JldHVybiBmKHRoaXMpfSx0b0pRdWVyeTpmdW5jdGlvbigpe3JldHVybiBmKHRoaXMpfSx1bmlxdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHYodGhpcy5jb250ZXh0LHRhKHRoaXMpKX0sdW5zaGlmdDpHLnVuc2hpZnR9KTt2LmV4dGVuZD1mdW5jdGlvbihhLApiLGMpe2lmKGMubGVuZ3RoJiZiJiYoYiBpbnN0YW5jZW9mIHZ8fGIuX19kdF93cmFwcGVyKSl7dmFyIGQsZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9Yi5hcHBseShhLGFyZ3VtZW50cyk7di5leHRlbmQoZCxkLGMubWV0aG9kRXh0KTtyZXR1cm4gZH19O3ZhciBoPTA7Zm9yKGQ9Yy5sZW5ndGg7aDxkO2grKyl7dmFyIGc9Y1toXTtiW2cubmFtZV09ImZ1bmN0aW9uIj09PWcudHlwZT9lKGEsZy52YWwsZyk6Im9iamVjdCI9PT1nLnR5cGU/e306Zy52YWw7YltnLm5hbWVdLl9fZHRfd3JhcHBlcj0hMDt2LmV4dGVuZChhLGJbZy5uYW1lXSxnLnByb3BFeHQpfX19O3YucmVnaXN0ZXI9dD1mdW5jdGlvbihhLGIpe2lmKGYuaXNBcnJheShhKSlmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspdi5yZWdpc3RlcihhW2NdLGIpO2Vsc2V7ZD1hLnNwbGl0KCIuIik7dmFyIGU9V2IsaDthPTA7Zm9yKGM9ZC5sZW5ndGg7YTxjO2ErKyl7dmFyIGc9KGg9LTEhPT0KZFthXS5pbmRleE9mKCIoKSIpKT9kW2FdLnJlcGxhY2UoIigpIiwiIik6ZFthXTthOnt2YXIgaz0wO2Zvcih2YXIgbD1lLmxlbmd0aDtrPGw7aysrKWlmKGVba10ubmFtZT09PWcpe2s9ZVtrXTticmVhayBhfWs9bnVsbH1rfHwoaz17bmFtZTpnLHZhbDp7fSxtZXRob2RFeHQ6W10scHJvcEV4dDpbXSx0eXBlOiJvYmplY3QifSxlLnB1c2goaykpO2E9PT1jLTE/KGsudmFsPWIsay50eXBlPSJmdW5jdGlvbiI9PT10eXBlb2YgYj8iZnVuY3Rpb24iOmYuaXNQbGFpbk9iamVjdChiKT8ib2JqZWN0Ijoib3RoZXIiKTplPWg/ay5tZXRob2RFeHQ6ay5wcm9wRXh0fX19O3YucmVnaXN0ZXJQbHVyYWw9eD1mdW5jdGlvbihhLGIsYyl7di5yZWdpc3RlcihhLGMpO3YucmVnaXN0ZXIoYixmdW5jdGlvbigpe3ZhciBhPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhPT09dGhpcz90aGlzOmEgaW5zdGFuY2VvZiB2P2EubGVuZ3RoP2YuaXNBcnJheShhWzBdKT9uZXcgdihhLmNvbnRleHQsCmFbMF0pOmFbMF06cDphfSl9O3ZhciBmYz1mdW5jdGlvbihhLGIpe2lmKCJudW1iZXIiPT09dHlwZW9mIGEpcmV0dXJuW2JbYV1dO3ZhciBjPWYubWFwKGIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5uVGFibGV9KTtyZXR1cm4gZihjKS5maWx0ZXIoYSkubWFwKGZ1bmN0aW9uKGEpe2E9Zi5pbkFycmF5KHRoaXMsYyk7cmV0dXJuIGJbYV19KS50b0FycmF5KCl9O3QoInRhYmxlcygpIixmdW5jdGlvbihhKXtyZXR1cm4gYT9uZXcgdihmYyhhLHRoaXMuY29udGV4dCkpOnRoaXN9KTt0KCJ0YWJsZSgpIixmdW5jdGlvbihhKXthPXRoaXMudGFibGVzKGEpO3ZhciBiPWEuY29udGV4dDtyZXR1cm4gYi5sZW5ndGg/bmV3IHYoYlswXSk6YX0pO3goInRhYmxlcygpLm5vZGVzKCkiLCJ0YWJsZSgpLm5vZGUoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEpe3JldHVybiBhLm5UYWJsZX0sMSl9KTt4KCJ0YWJsZXMoKS5ib2R5KCkiLCJ0YWJsZSgpLmJvZHkoKSIsCmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXtyZXR1cm4gYS5uVEJvZHl9LDEpfSk7eCgidGFibGVzKCkuaGVhZGVyKCkiLCJ0YWJsZSgpLmhlYWRlcigpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7cmV0dXJuIGEublRIZWFkfSwxKX0pO3goInRhYmxlcygpLmZvb3RlcigpIiwidGFibGUoKS5mb290ZXIoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEpe3JldHVybiBhLm5URm9vdH0sMSl9KTt4KCJ0YWJsZXMoKS5jb250YWluZXJzKCkiLCJ0YWJsZSgpLmNvbnRhaW5lcigpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7cmV0dXJuIGEublRhYmxlV3JhcHBlcn0sMSl9KTt0KCJkcmF3KCkiLGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7InBhZ2UiPT09CmE/UyhiKTooInN0cmluZyI9PT10eXBlb2YgYSYmKGE9ImZ1bGwtaG9sZCI9PT1hPyExOiEwKSxWKGIsITE9PT1hKSl9KX0pO3QoInBhZ2UoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1wP3RoaXMucGFnZS5pbmZvKCkucGFnZTp0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7WGEoYixhKX0pfSk7dCgicGFnZS5pbmZvKCkiLGZ1bmN0aW9uKGEpe2lmKDA9PT10aGlzLmNvbnRleHQubGVuZ3RoKXJldHVybiBwO2E9dGhpcy5jb250ZXh0WzBdO3ZhciBiPWEuX2lEaXNwbGF5U3RhcnQsYz1hLm9GZWF0dXJlcy5iUGFnaW5hdGU/YS5faURpc3BsYXlMZW5ndGg6LTEsZD1hLmZuUmVjb3Jkc0Rpc3BsYXkoKSxlPS0xPT09YztyZXR1cm57cGFnZTplPzA6TWF0aC5mbG9vcihiL2MpLHBhZ2VzOmU/MTpNYXRoLmNlaWwoZC9jKSxzdGFydDpiLGVuZDphLmZuRGlzcGxheUVuZCgpLGxlbmd0aDpjLHJlY29yZHNUb3RhbDphLmZuUmVjb3Jkc1RvdGFsKCkscmVjb3Jkc0Rpc3BsYXk6ZCwKc2VydmVyU2lkZToic3NwIj09PUQoYSl9fSk7dCgicGFnZS5sZW4oKSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1wPzAhPT10aGlzLmNvbnRleHQubGVuZ3RoP3RoaXMuY29udGV4dFswXS5faURpc3BsYXlMZW5ndGg6cDp0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7VmEoYixhKX0pfSk7dmFyIFhiPWZ1bmN0aW9uKGEsYixjKXtpZihjKXt2YXIgZD1uZXcgdihhKTtkLm9uZSgiZHJhdyIsZnVuY3Rpb24oKXtjKGQuYWpheC5qc29uKCkpfSl9aWYoInNzcCI9PUQoYSkpVihhLGIpO2Vsc2V7SyhhLCEwKTt2YXIgZT1hLmpxWEhSO2UmJjQhPT1lLnJlYWR5U3RhdGUmJmUuYWJvcnQoKTt2YShhLFtdLGZ1bmN0aW9uKGMpe3FhKGEpO2M9d2EoYSxjKTtmb3IodmFyIGQ9MCxlPWMubGVuZ3RoO2Q8ZTtkKyspUihhLGNbZF0pO1YoYSxiKTtLKGEsITEpfSl9fTt0KCJhamF4Lmpzb24oKSIsZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNvbnRleHQ7aWYoMDxhLmxlbmd0aClyZXR1cm4gYVswXS5qc29ufSk7CnQoImFqYXgucGFyYW1zKCkiLGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jb250ZXh0O2lmKDA8YS5sZW5ndGgpcmV0dXJuIGFbMF0ub0FqYXhEYXRhfSk7dCgiYWpheC5yZWxvYWQoKSIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGMpe1hiKGMsITE9PT1iLGEpfSl9KTt0KCJhamF4LnVybCgpIixmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbnRleHQ7aWYoYT09PXApe2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gcDtiPWJbMF07cmV0dXJuIGIuYWpheD9mLmlzUGxhaW5PYmplY3QoYi5hamF4KT9iLmFqYXgudXJsOmIuYWpheDpiLnNBamF4U291cmNlfXJldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7Zi5pc1BsYWluT2JqZWN0KGIuYWpheCk/Yi5hamF4LnVybD1hOmIuYWpheD1hfSl9KTt0KCJhamF4LnVybCgpLmxvYWQoKSIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGMpe1hiKGMsCiExPT09YixhKX0pfSk7dmFyIGViPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGg9W10sZyxrLGw7dmFyIG49dHlwZW9mIGI7YiYmInN0cmluZyIhPT1uJiYiZnVuY3Rpb24iIT09biYmYi5sZW5ndGghPT1wfHwoYj1bYl0pO249MDtmb3Ioaz1iLmxlbmd0aDtuPGs7bisrKXt2YXIgbT1iW25dJiZiW25dLnNwbGl0JiYhYltuXS5tYXRjaCgvW1xbXCg6XS8pP2Jbbl0uc3BsaXQoIiwiKTpbYltuXV07dmFyIHE9MDtmb3IobD1tLmxlbmd0aDtxPGw7cSsrKShnPWMoInN0cmluZyI9PT10eXBlb2YgbVtxXT9mLnRyaW0obVtxXSk6bVtxXSkpJiZnLmxlbmd0aCYmKGg9aC5jb25jYXQoZykpfWE9Qy5zZWxlY3RvclthXTtpZihhLmxlbmd0aClmb3Iobj0wLGs9YS5sZW5ndGg7bjxrO24rKyloPWFbbl0oZCxlLGgpO3JldHVybiB0YShoKX0sZmI9ZnVuY3Rpb24oYSl7YXx8KGE9e30pO2EuZmlsdGVyJiZhLnNlYXJjaD09PXAmJihhLnNlYXJjaD1hLmZpbHRlcik7cmV0dXJuIGYuZXh0ZW5kKHtzZWFyY2g6Im5vbmUiLApvcmRlcjoiY3VycmVudCIscGFnZToiYWxsIn0sYSl9LGdiPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9YS5sZW5ndGg7YjxjO2IrKylpZigwPGFbYl0ubGVuZ3RoKXJldHVybiBhWzBdPWFbYl0sYVswXS5sZW5ndGg9MSxhLmxlbmd0aD0xLGEuY29udGV4dD1bYS5jb250ZXh0W2JdXSxhO2EubGVuZ3RoPTA7cmV0dXJuIGF9LEZhPWZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZD1hLmFpRGlzcGxheTt2YXIgZT1hLmFpRGlzcGxheU1hc3Rlcjt2YXIgaD1iLnNlYXJjaDt2YXIgZz1iLm9yZGVyO2I9Yi5wYWdlO2lmKCJzc3AiPT1EKGEpKXJldHVybiJyZW1vdmVkIj09PWg/W106WigwLGUubGVuZ3RoKTtpZigiY3VycmVudCI9PWIpZm9yKGc9YS5faURpc3BsYXlTdGFydCxhPWEuZm5EaXNwbGF5RW5kKCk7ZzxhO2crKyljLnB1c2goZFtnXSk7ZWxzZSBpZigiY3VycmVudCI9PWd8fCJhcHBsaWVkIj09ZylpZigibm9uZSI9PWgpYz1lLnNsaWNlKCk7ZWxzZSBpZigiYXBwbGllZCI9PWgpYz0KZC5zbGljZSgpO2Vsc2V7aWYoInJlbW92ZWQiPT1oKXt2YXIgaz17fTtnPTA7Zm9yKGE9ZC5sZW5ndGg7ZzxhO2crKylrW2RbZ11dPW51bGw7Yz1mLm1hcChlLGZ1bmN0aW9uKGEpe3JldHVybiBrLmhhc093blByb3BlcnR5KGEpP251bGw6YX0pfX1lbHNlIGlmKCJpbmRleCI9PWd8fCJvcmlnaW5hbCI9PWcpZm9yKGc9MCxhPWEuYW9EYXRhLmxlbmd0aDtnPGE7ZysrKSJub25lIj09aD9jLnB1c2goZyk6KGU9Zi5pbkFycmF5KGcsZCksKC0xPT09ZSYmInJlbW92ZWQiPT1ofHwwPD1lJiYiYXBwbGllZCI9PWgpJiZjLnB1c2goZykpO3JldHVybiBjfSxnYz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGViKCJyb3ciLGIsZnVuY3Rpb24oYil7dmFyIGU9U2IoYiksZz1hLmFvRGF0YTtpZihudWxsIT09ZSYmIWMpcmV0dXJuW2VdO2R8fChkPUZhKGEsYykpO2lmKG51bGwhPT1lJiYtMSE9PWYuaW5BcnJheShlLGQpKXJldHVybltlXTtpZihudWxsPT09Ynx8Yj09PXB8fCIiPT09YilyZXR1cm4gZDsKaWYoImZ1bmN0aW9uIj09PXR5cGVvZiBiKXJldHVybiBmLm1hcChkLGZ1bmN0aW9uKGEpe3ZhciBjPWdbYV07cmV0dXJuIGIoYSxjLl9hRGF0YSxjLm5Ucik/YTpudWxsfSk7aWYoYi5ub2RlTmFtZSl7ZT1iLl9EVF9Sb3dJbmRleDt2YXIgaz1iLl9EVF9DZWxsSW5kZXg7aWYoZSE9PXApcmV0dXJuIGdbZV0mJmdbZV0ublRyPT09Yj9bZV06W107aWYoaylyZXR1cm4gZ1trLnJvd10mJmdbay5yb3ddLm5Ucj09PWIucGFyZW50Tm9kZT9bay5yb3ddOltdO2U9ZihiKS5jbG9zZXN0KCIqW2RhdGEtZHQtcm93XSIpO3JldHVybiBlLmxlbmd0aD9bZS5kYXRhKCJkdC1yb3ciKV06W119aWYoInN0cmluZyI9PT10eXBlb2YgYiYmIiMiPT09Yi5jaGFyQXQoMCkmJihlPWEuYUlkc1tiLnJlcGxhY2UoL14jLywiIildLGUhPT1wKSlyZXR1cm5bZS5pZHhdO2U9VmIobGEoYS5hb0RhdGEsZCwiblRyIikpO3JldHVybiBmKGUpLmZpbHRlcihiKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fRFRfUm93SW5kZXh9KS50b0FycmF5KCl9LAphLGMpfTt0KCJyb3dzKCkiLGZ1bmN0aW9uKGEsYil7YT09PXA/YT0iIjpmLmlzUGxhaW5PYmplY3QoYSkmJihiPWEsYT0iIik7Yj1mYihiKTt2YXIgYz10aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYyl7cmV0dXJuIGdjKGMsYSxiKX0sMSk7Yy5zZWxlY3Rvci5yb3dzPWE7Yy5zZWxlY3Rvci5vcHRzPWI7cmV0dXJuIGN9KTt0KCJyb3dzKCkubm9kZXMoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigicm93IixmdW5jdGlvbihhLGIpe3JldHVybiBhLmFvRGF0YVtiXS5uVHJ8fHB9LDEpfSk7dCgicm93cygpLmRhdGEoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcighMCwicm93cyIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gbGEoYS5hb0RhdGEsYiwiX2FEYXRhIil9LDEpfSk7eCgicm93cygpLmNhY2hlKCkiLCJyb3coKS5jYWNoZSgpIixmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigicm93IixmdW5jdGlvbihiLGMpe2I9Yi5hb0RhdGFbY107CnJldHVybiJzZWFyY2giPT09YT9iLl9hRmlsdGVyRGF0YTpiLl9hU29ydERhdGF9LDEpfSk7eCgicm93cygpLmludmFsaWRhdGUoKSIsInJvdygpLmludmFsaWRhdGUoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInJvdyIsZnVuY3Rpb24oYixjKXtlYShiLGMsYSl9KX0pO3goInJvd3MoKS5pbmRleGVzKCkiLCJyb3coKS5pbmRleCgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJyb3ciLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ9LDEpfSk7eCgicm93cygpLmlkcygpIiwicm93KCkuaWQoKSIsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9dGhpcy5jb250ZXh0LGQ9MCxlPWMubGVuZ3RoO2Q8ZTtkKyspZm9yKHZhciBoPTAsZz10aGlzW2RdLmxlbmd0aDtoPGc7aCsrKXt2YXIgZj1jW2RdLnJvd0lkRm4oY1tkXS5hb0RhdGFbdGhpc1tkXVtoXV0uX2FEYXRhKTtiLnB1c2goKCEwPT09YT8iIyI6IiIpK2YpfXJldHVybiBuZXcgdihjLGIpfSk7eCgicm93cygpLnJlbW92ZSgpIiwKInJvdygpLnJlbW92ZSgpIixmdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5pdGVyYXRvcigicm93IixmdW5jdGlvbihiLGMsZCl7dmFyIGU9Yi5hb0RhdGEsaD1lW2NdLGcsZjtlLnNwbGljZShjLDEpO3ZhciBsPTA7Zm9yKGc9ZS5sZW5ndGg7bDxnO2wrKyl7dmFyIG49ZVtsXTt2YXIgbT1uLmFuQ2VsbHM7bnVsbCE9PW4ublRyJiYobi5uVHIuX0RUX1Jvd0luZGV4PWwpO2lmKG51bGwhPT1tKWZvcihuPTAsZj1tLmxlbmd0aDtuPGY7bisrKW1bbl0uX0RUX0NlbGxJbmRleC5yb3c9bH1yYShiLmFpRGlzcGxheU1hc3RlcixjKTtyYShiLmFpRGlzcGxheSxjKTtyYShhW2RdLGMsITEpOzA8Yi5faVJlY29yZHNEaXNwbGF5JiZiLl9pUmVjb3Jkc0Rpc3BsYXktLTtXYShiKTtjPWIucm93SWRGbihoLl9hRGF0YSk7YyE9PXAmJmRlbGV0ZSBiLmFJZHNbY119KTt0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsZD1hLmFvRGF0YS5sZW5ndGg7YjxkO2IrKylhLmFvRGF0YVtiXS5pZHg9CmJ9KTtyZXR1cm4gdGhpc30pO3QoInJvd3MuYWRkKCkiLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXt2YXIgYyxkPVtdO3ZhciBnPTA7Zm9yKGM9YS5sZW5ndGg7ZzxjO2crKyl7dmFyIGY9YVtnXTtmLm5vZGVOYW1lJiYiVFIiPT09Zi5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpP2QucHVzaChwYShiLGYpWzBdKTpkLnB1c2goUihiLGYpKX1yZXR1cm4gZH0sMSksYz10aGlzLnJvd3MoLTEpO2MucG9wKCk7Zi5tZXJnZShjLGIpO3JldHVybiBjfSk7dCgicm93KCkiLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGdiKHRoaXMucm93cyhhLGIpKX0pO3QoInJvdygpLmRhdGEoKSIsZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jb250ZXh0O2lmKGE9PT1wKXJldHVybiBiLmxlbmd0aCYmdGhpcy5sZW5ndGg/YlswXS5hb0RhdGFbdGhpc1swXV0uX2FEYXRhOnA7dmFyIGM9YlswXS5hb0RhdGFbdGhpc1swXV07Yy5fYURhdGE9YTtmLmlzQXJyYXkoYSkmJmMublRyLmlkJiYKUShiWzBdLnJvd0lkKShhLGMublRyLmlkKTtlYShiWzBdLHRoaXNbMF0sImRhdGEiKTtyZXR1cm4gdGhpc30pO3QoInJvdygpLm5vZGUoKSIsZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNvbnRleHQ7cmV0dXJuIGEubGVuZ3RoJiZ0aGlzLmxlbmd0aD9hWzBdLmFvRGF0YVt0aGlzWzBdXS5uVHJ8fG51bGw6bnVsbH0pO3QoInJvdy5hZGQoKSIsZnVuY3Rpb24oYSl7YSBpbnN0YW5jZW9mIGYmJmEubGVuZ3RoJiYoYT1hWzBdKTt2YXIgYj10aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7cmV0dXJuIGEubm9kZU5hbWUmJiJUUiI9PT1hLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk/cGEoYixhKVswXTpSKGIsYSl9KTtyZXR1cm4gdGhpcy5yb3coYlswXSl9KTt2YXIgaGM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9W10saD1mdW5jdGlvbihiLGMpe2lmKGYuaXNBcnJheShiKXx8YiBpbnN0YW5jZW9mIGYpZm9yKHZhciBkPTAsZz1iLmxlbmd0aDtkPGc7ZCsrKWgoYltkXSxjKTtlbHNlIGIubm9kZU5hbWUmJgoidHIiPT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP2UucHVzaChiKTooZD1mKCI8dHI+PHRkLz48L3RyPiIpLmFkZENsYXNzKGMpLGYoInRkIixkKS5hZGRDbGFzcyhjKS5odG1sKGIpWzBdLmNvbFNwYW49VyhhKSxlLnB1c2goZFswXSkpfTtoKGMsZCk7Yi5fZGV0YWlscyYmYi5fZGV0YWlscy5kZXRhY2goKTtiLl9kZXRhaWxzPWYoZSk7Yi5fZGV0YWlsc1Nob3cmJmIuX2RldGFpbHMuaW5zZXJ0QWZ0ZXIoYi5uVHIpfSxoYj1mdW5jdGlvbihhLGIpe3ZhciBjPWEuY29udGV4dDtjLmxlbmd0aCYmKGE9Y1swXS5hb0RhdGFbYiE9PXA/YjphWzBdXSkmJmEuX2RldGFpbHMmJihhLl9kZXRhaWxzLnJlbW92ZSgpLGEuX2RldGFpbHNTaG93PXAsYS5fZGV0YWlscz1wKX0sWWI9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmNvbnRleHQ7Yy5sZW5ndGgmJmEubGVuZ3RoJiYoYT1jWzBdLmFvRGF0YVthWzBdXSxhLl9kZXRhaWxzJiYoKGEuX2RldGFpbHNTaG93PWIpP2EuX2RldGFpbHMuaW5zZXJ0QWZ0ZXIoYS5uVHIpOgphLl9kZXRhaWxzLmRldGFjaCgpLGljKGNbMF0pKSl9LGljPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyB2KGEpLGM9YS5hb0RhdGE7Yi5vZmYoImRyYXcuZHQuRFRfZGV0YWlscyBjb2x1bW4tdmlzaWJpbGl0eS5kdC5EVF9kZXRhaWxzIGRlc3Ryb3kuZHQuRFRfZGV0YWlscyIpOzA8SihjLCJfZGV0YWlscyIpLmxlbmd0aCYmKGIub24oImRyYXcuZHQuRFRfZGV0YWlscyIsZnVuY3Rpb24oZCxlKXthPT09ZSYmYi5yb3dzKHtwYWdlOiJjdXJyZW50In0pLmVxKDApLmVhY2goZnVuY3Rpb24oYSl7YT1jW2FdO2EuX2RldGFpbHNTaG93JiZhLl9kZXRhaWxzLmluc2VydEFmdGVyKGEublRyKX0pfSksYi5vbigiY29sdW1uLXZpc2liaWxpdHkuZHQuRFRfZGV0YWlscyIsZnVuY3Rpb24oYixlLGYsZyl7aWYoYT09PWUpZm9yKGU9VyhlKSxmPTAsZz1jLmxlbmd0aDtmPGc7ZisrKWI9Y1tmXSxiLl9kZXRhaWxzJiZiLl9kZXRhaWxzLmNoaWxkcmVuKCJ0ZFtjb2xzcGFuXSIpLmF0dHIoImNvbHNwYW4iLAplKX0pLGIub24oImRlc3Ryb3kuZHQuRFRfZGV0YWlscyIsZnVuY3Rpb24oZCxlKXtpZihhPT09ZSlmb3IoZD0wLGU9Yy5sZW5ndGg7ZDxlO2QrKyljW2RdLl9kZXRhaWxzJiZoYihiLGQpfSkpfTt0KCJyb3coKS5jaGlsZCgpIixmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY29udGV4dDtpZihhPT09cClyZXR1cm4gYy5sZW5ndGgmJnRoaXMubGVuZ3RoP2NbMF0uYW9EYXRhW3RoaXNbMF1dLl9kZXRhaWxzOnA7ITA9PT1hP3RoaXMuY2hpbGQuc2hvdygpOiExPT09YT9oYih0aGlzKTpjLmxlbmd0aCYmdGhpcy5sZW5ndGgmJmhjKGNbMF0sY1swXS5hb0RhdGFbdGhpc1swXV0sYSxiKTtyZXR1cm4gdGhpc30pO3QoWyJyb3coKS5jaGlsZC5zaG93KCkiLCJyb3coKS5jaGlsZCgpLnNob3coKSJdLGZ1bmN0aW9uKGEpe1liKHRoaXMsITApO3JldHVybiB0aGlzfSk7dChbInJvdygpLmNoaWxkLmhpZGUoKSIsInJvdygpLmNoaWxkKCkuaGlkZSgpIl0sZnVuY3Rpb24oKXtZYih0aGlzLCExKTsKcmV0dXJuIHRoaXN9KTt0KFsicm93KCkuY2hpbGQucmVtb3ZlKCkiLCJyb3coKS5jaGlsZCgpLnJlbW92ZSgpIl0sZnVuY3Rpb24oKXtoYih0aGlzKTtyZXR1cm4gdGhpc30pO3QoInJvdygpLmNoaWxkLmlzU2hvd24oKSIsZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNvbnRleHQ7cmV0dXJuIGEubGVuZ3RoJiZ0aGlzLmxlbmd0aD9hWzBdLmFvRGF0YVt0aGlzWzBdXS5fZGV0YWlsc1Nob3d8fCExOiExfSk7dmFyIGpjPS9eKFteOl0rKToobmFtZXx2aXNJZHh8dmlzaWJsZSkkLyxaYj1mdW5jdGlvbihhLGIsYyxkLGUpe2M9W107ZD0wO2Zvcih2YXIgZj1lLmxlbmd0aDtkPGY7ZCsrKWMucHVzaChJKGEsZVtkXSxiKSk7cmV0dXJuIGN9LGtjPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmFvQ29sdW1ucyxlPUooZCwic05hbWUiKSxoPUooZCwiblRoIik7cmV0dXJuIGViKCJjb2x1bW4iLGIsZnVuY3Rpb24oYil7dmFyIGc9U2IoYik7aWYoIiI9PT1iKXJldHVybiBaKGQubGVuZ3RoKTtpZihudWxsIT09CmcpcmV0dXJuWzA8PWc/ZzpkLmxlbmd0aCtnXTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGIpe3ZhciBsPUZhKGEsYyk7cmV0dXJuIGYubWFwKGQsZnVuY3Rpb24oYyxkKXtyZXR1cm4gYihkLFpiKGEsZCwwLDAsbCksaFtkXSk/ZDpudWxsfSl9dmFyIG49InN0cmluZyI9PT10eXBlb2YgYj9iLm1hdGNoKGpjKToiIjtpZihuKXN3aXRjaChuWzJdKXtjYXNlICJ2aXNJZHgiOmNhc2UgInZpc2libGUiOmc9cGFyc2VJbnQoblsxXSwxMCk7aWYoMD5nKXt2YXIgbT1mLm1hcChkLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuYlZpc2libGU/YjpudWxsfSk7cmV0dXJuW21bbS5sZW5ndGgrZ11dfXJldHVybltiYShhLGcpXTtjYXNlICJuYW1lIjpyZXR1cm4gZi5tYXAoZSxmdW5jdGlvbihhLGIpe3JldHVybiBhPT09blsxXT9iOm51bGx9KTtkZWZhdWx0OnJldHVybltdfWlmKGIubm9kZU5hbWUmJmIuX0RUX0NlbGxJbmRleClyZXR1cm5bYi5fRFRfQ2VsbEluZGV4LmNvbHVtbl07Zz1mKGgpLmZpbHRlcihiKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZi5pbkFycmF5KHRoaXMsCmgpfSkudG9BcnJheSgpO2lmKGcubGVuZ3RofHwhYi5ub2RlTmFtZSlyZXR1cm4gZztnPWYoYikuY2xvc2VzdCgiKltkYXRhLWR0LWNvbHVtbl0iKTtyZXR1cm4gZy5sZW5ndGg/W2cuZGF0YSgiZHQtY29sdW1uIildOltdfSxhLGMpfTt0KCJjb2x1bW5zKCkiLGZ1bmN0aW9uKGEsYil7YT09PXA/YT0iIjpmLmlzUGxhaW5PYmplY3QoYSkmJihiPWEsYT0iIik7Yj1mYihiKTt2YXIgYz10aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYyl7cmV0dXJuIGtjKGMsYSxiKX0sMSk7Yy5zZWxlY3Rvci5jb2xzPWE7Yy5zZWxlY3Rvci5vcHRzPWI7cmV0dXJuIGN9KTt4KCJjb2x1bW5zKCkuaGVhZGVyKCkiLCJjb2x1bW4oKS5oZWFkZXIoKSIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY29sdW1uIixmdW5jdGlvbihhLGIpe3JldHVybiBhLmFvQ29sdW1uc1tiXS5uVGh9LDEpfSk7eCgiY29sdW1ucygpLmZvb3RlcigpIiwiY29sdW1uKCkuZm9vdGVyKCkiLGZ1bmN0aW9uKGEsCmIpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1bW4iLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuYW9Db2x1bW5zW2JdLm5UZn0sMSl9KTt4KCJjb2x1bW5zKCkuZGF0YSgpIiwiY29sdW1uKCkuZGF0YSgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1bW4tcm93cyIsWmIsMSl9KTt4KCJjb2x1bW5zKCkuZGF0YVNyYygpIiwiY29sdW1uKCkuZGF0YVNyYygpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1bW4iLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuYW9Db2x1bW5zW2JdLm1EYXRhfSwxKX0pO3goImNvbHVtbnMoKS5jYWNoZSgpIiwiY29sdW1uKCkuY2FjaGUoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNvbHVtbi1yb3dzIixmdW5jdGlvbihiLGMsZCxlLGYpe3JldHVybiBsYShiLmFvRGF0YSxmLCJzZWFyY2giPT09YT8iX2FGaWx0ZXJEYXRhIjoiX2FTb3J0RGF0YSIsYyl9LDEpfSk7eCgiY29sdW1ucygpLm5vZGVzKCkiLAoiY29sdW1uKCkubm9kZXMoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY29sdW1uLXJvd3MiLGZ1bmN0aW9uKGEsYixjLGQsZSl7cmV0dXJuIGxhKGEuYW9EYXRhLGUsImFuQ2VsbHMiLGIpfSwxKX0pO3goImNvbHVtbnMoKS52aXNpYmxlKCkiLCJjb2x1bW4oKS52aXNpYmxlKCkiLGZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcyxkPXRoaXMuaXRlcmF0b3IoImNvbHVtbiIsZnVuY3Rpb24oYixjKXtpZihhPT09cClyZXR1cm4gYi5hb0NvbHVtbnNbY10uYlZpc2libGU7dmFyIGQ9Yi5hb0NvbHVtbnMsZT1kW2NdLGg9Yi5hb0RhdGEsbjtpZihhIT09cCYmZS5iVmlzaWJsZSE9PWEpe2lmKGEpe3ZhciBtPWYuaW5BcnJheSghMCxKKGQsImJWaXNpYmxlIiksYysxKTtkPTA7Zm9yKG49aC5sZW5ndGg7ZDxuO2QrKyl7dmFyIHE9aFtkXS5uVHI7Yj1oW2RdLmFuQ2VsbHM7cSYmcS5pbnNlcnRCZWZvcmUoYltjXSxiW21dfHxudWxsKX19ZWxzZSBmKEooYi5hb0RhdGEsImFuQ2VsbHMiLApjKSkuZGV0YWNoKCk7ZS5iVmlzaWJsZT1hfX0pO2EhPT1wJiZ0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oZCl7aGEoZCxkLmFvSGVhZGVyKTtoYShkLGQuYW9Gb290ZXIpO2QuYWlEaXNwbGF5Lmxlbmd0aHx8ZihkLm5UQm9keSkuZmluZCgidGRbY29sc3Bhbl0iKS5hdHRyKCJjb2xzcGFuIixXKGQpKTtCYShkKTtjLml0ZXJhdG9yKCJjb2x1bW4iLGZ1bmN0aW9uKGMsZCl7QShjLG51bGwsImNvbHVtbi12aXNpYmlsaXR5IixbYyxkLGEsYl0pfSk7KGI9PT1wfHxiKSYmYy5jb2x1bW5zLmFkanVzdCgpfSk7cmV0dXJuIGR9KTt4KCJjb2x1bW5zKCkuaW5kZXhlcygpIiwiY29sdW1uKCkuaW5kZXgoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNvbHVtbiIsZnVuY3Rpb24oYixjKXtyZXR1cm4idmlzaWJsZSI9PT1hP2NhKGIsYyk6Y30sMSl9KTt0KCJjb2x1bW5zLmFkanVzdCgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7YWEoYSl9LAoxKX0pO3QoImNvbHVtbi5pbmRleCgpIixmdW5jdGlvbihhLGIpe2lmKDAhPT10aGlzLmNvbnRleHQubGVuZ3RoKXt2YXIgYz10aGlzLmNvbnRleHRbMF07aWYoImZyb21WaXNpYmxlIj09PWF8fCJ0b0RhdGEiPT09YSlyZXR1cm4gYmEoYyxiKTtpZigiZnJvbURhdGEiPT09YXx8InRvVmlzaWJsZSI9PT1hKXJldHVybiBjYShjLGIpfX0pO3QoImNvbHVtbigpIixmdW5jdGlvbihhLGIpe3JldHVybiBnYih0aGlzLmNvbHVtbnMoYSxiKSl9KTt2YXIgbGM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuYW9EYXRhLGU9RmEoYSxjKSxoPVZiKGxhKGQsZSwiYW5DZWxscyIpKSxnPWYoW10uY29uY2F0LmFwcGx5KFtdLGgpKSxrLGw9YS5hb0NvbHVtbnMubGVuZ3RoLG4sbSxxLHUsdCx2O3JldHVybiBlYigiY2VsbCIsYixmdW5jdGlvbihiKXt2YXIgYz0iZnVuY3Rpb24iPT09dHlwZW9mIGI7aWYobnVsbD09PWJ8fGI9PT1wfHxjKXtuPVtdO209MDtmb3IocT1lLmxlbmd0aDttPHE7bSsrKWZvcihrPQplW21dLHU9MDt1PGw7dSsrKXQ9e3JvdzprLGNvbHVtbjp1fSxjPyh2PWRba10sYih0LEkoYSxrLHUpLHYuYW5DZWxscz92LmFuQ2VsbHNbdV06bnVsbCkmJm4ucHVzaCh0KSk6bi5wdXNoKHQpO3JldHVybiBufWlmKGYuaXNQbGFpbk9iamVjdChiKSlyZXR1cm4gYi5jb2x1bW4hPT1wJiZiLnJvdyE9PXAmJi0xIT09Zi5pbkFycmF5KGIucm93LGUpP1tiXTpbXTtjPWcuZmlsdGVyKGIpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybntyb3c6Yi5fRFRfQ2VsbEluZGV4LnJvdyxjb2x1bW46Yi5fRFRfQ2VsbEluZGV4LmNvbHVtbn19KS50b0FycmF5KCk7aWYoYy5sZW5ndGh8fCFiLm5vZGVOYW1lKXJldHVybiBjO3Y9ZihiKS5jbG9zZXN0KCIqW2RhdGEtZHQtcm93XSIpO3JldHVybiB2Lmxlbmd0aD9be3Jvdzp2LmRhdGEoImR0LXJvdyIpLGNvbHVtbjp2LmRhdGEoImR0LWNvbHVtbiIpfV06W119LGEsYyl9O3QoImNlbGxzKCkiLGZ1bmN0aW9uKGEsYixjKXtmLmlzUGxhaW5PYmplY3QoYSkmJgooYS5yb3c9PT1wPyhjPWEsYT1udWxsKTooYz1iLGI9bnVsbCkpO2YuaXNQbGFpbk9iamVjdChiKSYmKGM9YixiPW51bGwpO2lmKG51bGw9PT1ifHxiPT09cClyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGIpe3JldHVybiBsYyhiLGEsZmIoYykpfSk7dmFyIGQ9Yz97cGFnZTpjLnBhZ2Usb3JkZXI6Yy5vcmRlcixzZWFyY2g6Yy5zZWFyY2h9Ont9LGU9dGhpcy5jb2x1bW5zKGIsZCksaD10aGlzLnJvd3MoYSxkKSxnLGssbCxuO2Q9dGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEsYil7YT1bXTtnPTA7Zm9yKGs9aFtiXS5sZW5ndGg7ZzxrO2crKylmb3IobD0wLG49ZVtiXS5sZW5ndGg7bDxuO2wrKylhLnB1c2goe3JvdzpoW2JdW2ddLGNvbHVtbjplW2JdW2xdfSk7cmV0dXJuIGF9LDEpO2Q9YyYmYy5zZWxlY3RlZD90aGlzLmNlbGxzKGQsYyk6ZDtmLmV4dGVuZChkLnNlbGVjdG9yLHtjb2xzOmIscm93czphLG9wdHM6Y30pO3JldHVybiBkfSk7eCgiY2VsbHMoKS5ub2RlcygpIiwKImNlbGwoKS5ub2RlKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNlbGwiLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4oYT1hLmFvRGF0YVtiXSkmJmEuYW5DZWxscz9hLmFuQ2VsbHNbY106cH0sMSl9KTt0KCJjZWxscygpLmRhdGEoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY2VsbCIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBJKGEsYixjKX0sMSl9KTt4KCJjZWxscygpLmNhY2hlKCkiLCJjZWxsKCkuY2FjaGUoKSIsZnVuY3Rpb24oYSl7YT0ic2VhcmNoIj09PWE/Il9hRmlsdGVyRGF0YSI6Il9hU29ydERhdGEiO3JldHVybiB0aGlzLml0ZXJhdG9yKCJjZWxsIixmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGIuYW9EYXRhW2NdW2FdW2RdfSwxKX0pO3goImNlbGxzKCkucmVuZGVyKCkiLCJjZWxsKCkucmVuZGVyKCkiLGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjZWxsIixmdW5jdGlvbihiLGMsZCl7cmV0dXJuIEkoYixjLGQsYSl9LAoxKX0pO3goImNlbGxzKCkuaW5kZXhlcygpIiwiY2VsbCgpLmluZGV4KCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNlbGwiLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm57cm93OmIsY29sdW1uOmMsY29sdW1uVmlzaWJsZTpjYShhLGMpfX0sMSl9KTt4KCJjZWxscygpLmludmFsaWRhdGUoKSIsImNlbGwoKS5pbnZhbGlkYXRlKCkiLGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjZWxsIixmdW5jdGlvbihiLGMsZCl7ZWEoYixjLGEsZCl9KX0pO3QoImNlbGwoKSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBnYih0aGlzLmNlbGxzKGEsYixjKSl9KTt0KCJjZWxsKCkuZGF0YSgpIixmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbnRleHQsYz10aGlzWzBdO2lmKGE9PT1wKXJldHVybiBiLmxlbmd0aCYmYy5sZW5ndGg/SShiWzBdLGNbMF0ucm93LGNbMF0uY29sdW1uKTpwO29iKGJbMF0sY1swXS5yb3csY1swXS5jb2x1bW4sYSk7ZWEoYlswXSxjWzBdLnJvdywKImRhdGEiLGNbMF0uY29sdW1uKTtyZXR1cm4gdGhpc30pO3QoIm9yZGVyKCkiLGZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jb250ZXh0O2lmKGE9PT1wKXJldHVybiAwIT09Yy5sZW5ndGg/Y1swXS5hYVNvcnRpbmc6cDsibnVtYmVyIj09PXR5cGVvZiBhP2E9W1thLGJdXTphLmxlbmd0aCYmIWYuaXNBcnJheShhWzBdKSYmKGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXtiLmFhU29ydGluZz1hLnNsaWNlKCl9KX0pO3QoIm9yZGVyLmxpc3RlbmVyKCkiLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGQpe1FhKGQsYSxiLGMpfSl9KTt0KCJvcmRlci5maXhlZCgpIixmdW5jdGlvbihhKXtpZighYSl7dmFyIGI9dGhpcy5jb250ZXh0O2I9Yi5sZW5ndGg/YlswXS5hYVNvcnRpbmdGaXhlZDpwO3JldHVybiBmLmlzQXJyYXkoYik/e3ByZTpifToKYn1yZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGIpe2IuYWFTb3J0aW5nRml4ZWQ9Zi5leHRlbmQoITAse30sYSl9KX0pO3QoWyJjb2x1bW5zKCkub3JkZXIoKSIsImNvbHVtbigpLm9yZGVyKCkiXSxmdW5jdGlvbihhKXt2YXIgYj10aGlzO3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYyxkKXt2YXIgZT1bXTtmLmVhY2goYltkXSxmdW5jdGlvbihiLGMpe2UucHVzaChbYyxhXSl9KTtjLmFhU29ydGluZz1lfSl9KTt0KCJzZWFyY2goKSIsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5jb250ZXh0O3JldHVybiBhPT09cD8wIT09ZS5sZW5ndGg/ZVswXS5vUHJldmlvdXNTZWFyY2guc1NlYXJjaDpwOnRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihlKXtlLm9GZWF0dXJlcy5iRmlsdGVyJiZpYShlLGYuZXh0ZW5kKHt9LGUub1ByZXZpb3VzU2VhcmNoLHtzU2VhcmNoOmErIiIsYlJlZ2V4Om51bGw9PT1iPyExOmIsYlNtYXJ0Om51bGw9PT0KYz8hMDpjLGJDYXNlSW5zZW5zaXRpdmU6bnVsbD09PWQ/ITA6ZH0pLDEpfSl9KTt4KCJjb2x1bW5zKCkuc2VhcmNoKCkiLCJjb2x1bW4oKS5zZWFyY2goKSIsZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNvbHVtbiIsZnVuY3Rpb24oZSxoKXt2YXIgZz1lLmFvUHJlU2VhcmNoQ29scztpZihhPT09cClyZXR1cm4gZ1toXS5zU2VhcmNoO2Uub0ZlYXR1cmVzLmJGaWx0ZXImJihmLmV4dGVuZChnW2hdLHtzU2VhcmNoOmErIiIsYlJlZ2V4Om51bGw9PT1iPyExOmIsYlNtYXJ0Om51bGw9PT1jPyEwOmMsYkNhc2VJbnNlbnNpdGl2ZTpudWxsPT09ZD8hMDpkfSksaWEoZSxlLm9QcmV2aW91c1NlYXJjaCwxKSl9KX0pO3QoInN0YXRlKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGV4dC5sZW5ndGg/dGhpcy5jb250ZXh0WzBdLm9TYXZlZFN0YXRlOm51bGx9KTt0KCJzdGF0ZS5jbGVhcigpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsCmZ1bmN0aW9uKGEpe2EuZm5TdGF0ZVNhdmVDYWxsYmFjay5jYWxsKGEub0luc3RhbmNlLGEse30pfSl9KTt0KCJzdGF0ZS5sb2FkZWQoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZXh0Lmxlbmd0aD90aGlzLmNvbnRleHRbMF0ub0xvYWRlZFN0YXRlOm51bGx9KTt0KCJzdGF0ZS5zYXZlKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXtCYShhKX0pfSk7cS52ZXJzaW9uQ2hlY2s9cS5mblZlcnNpb25DaGVjaz1mdW5jdGlvbihhKXt2YXIgYj1xLnZlcnNpb24uc3BsaXQoIi4iKTthPWEuc3BsaXQoIi4iKTtmb3IodmFyIGMsZCxlPTAsZj1hLmxlbmd0aDtlPGY7ZSsrKWlmKGM9cGFyc2VJbnQoYltlXSwxMCl8fDAsZD1wYXJzZUludChhW2VdLDEwKXx8MCxjIT09ZClyZXR1cm4gYz5kO3JldHVybiEwfTtxLmlzRGF0YVRhYmxlPXEuZm5Jc0RhdGFUYWJsZT1mdW5jdGlvbihhKXt2YXIgYj1mKGEpLmdldCgwKSxjPSExO2lmKGEgaW5zdGFuY2VvZgpxLkFwaSlyZXR1cm4hMDtmLmVhY2gocS5zZXR0aW5ncyxmdW5jdGlvbihhLGUpe2E9ZS5uU2Nyb2xsSGVhZD9mKCJ0YWJsZSIsZS5uU2Nyb2xsSGVhZClbMF06bnVsbDt2YXIgZD1lLm5TY3JvbGxGb290P2YoInRhYmxlIixlLm5TY3JvbGxGb290KVswXTpudWxsO2lmKGUublRhYmxlPT09Ynx8YT09PWJ8fGQ9PT1iKWM9ITB9KTtyZXR1cm4gY307cS50YWJsZXM9cS5mblRhYmxlcz1mdW5jdGlvbihhKXt2YXIgYj0hMTtmLmlzUGxhaW5PYmplY3QoYSkmJihiPWEuYXBpLGE9YS52aXNpYmxlKTt2YXIgYz1mLm1hcChxLnNldHRpbmdzLGZ1bmN0aW9uKGIpe2lmKCFhfHxhJiZmKGIublRhYmxlKS5pcygiOnZpc2libGUiKSlyZXR1cm4gYi5uVGFibGV9KTtyZXR1cm4gYj9uZXcgdihjKTpjfTtxLmNhbWVsVG9IdW5nYXJpYW49TDt0KCIkKCkiLGZ1bmN0aW9uKGEsYil7Yj10aGlzLnJvd3MoYikubm9kZXMoKTtiPWYoYik7cmV0dXJuIGYoW10uY29uY2F0KGIuZmlsdGVyKGEpLnRvQXJyYXkoKSwKYi5maW5kKGEpLnRvQXJyYXkoKSkpfSk7Zi5lYWNoKFsib24iLCJvbmUiLCJvZmYiXSxmdW5jdGlvbihhLGIpe3QoYisiKCkiLGZ1bmN0aW9uKCl7dmFyIGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTthWzBdPWYubWFwKGFbMF0uc3BsaXQoL1xzLyksZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF0Y2goL1wuZHRcYi8pP2E6YSsiLmR0In0pLmpvaW4oIiAiKTt2YXIgZD1mKHRoaXMudGFibGVzKCkubm9kZXMoKSk7ZFtiXS5hcHBseShkLGEpO3JldHVybiB0aGlzfSl9KTt0KCJjbGVhcigpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7cWEoYSl9KX0pO3QoInNldHRpbmdzKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2KHRoaXMuY29udGV4dCx0aGlzLmNvbnRleHQpfSk7dCgiaW5pdCgpIixmdW5jdGlvbigpe3ZhciBhPXRoaXMuY29udGV4dDtyZXR1cm4gYS5sZW5ndGg/YVswXS5vSW5pdDpudWxsfSk7dCgiZGF0YSgpIiwKZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEpe3JldHVybiBKKGEuYW9EYXRhLCJfYURhdGEiKX0pLmZsYXR0ZW4oKX0pO3QoImRlc3Ryb3koKSIsZnVuY3Rpb24oYSl7YT1hfHwhMTtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGIpe3ZhciBjPWIublRhYmxlV3JhcHBlci5wYXJlbnROb2RlLGQ9Yi5vQ2xhc3NlcyxlPWIublRhYmxlLGg9Yi5uVEJvZHksZz1iLm5USGVhZCxrPWIublRGb290LGw9ZihlKTtoPWYoaCk7dmFyIG49ZihiLm5UYWJsZVdyYXBwZXIpLG09Zi5tYXAoYi5hb0RhdGEsZnVuY3Rpb24oYSl7cmV0dXJuIGEublRyfSkscDtiLmJEZXN0cm95aW5nPSEwO0EoYiwiYW9EZXN0cm95Q2FsbGJhY2siLCJkZXN0cm95IixbYl0pO2F8fChuZXcgdihiKSkuY29sdW1ucygpLnZpc2libGUoITApO24ub2ZmKCIuRFQiKS5maW5kKCI6bm90KHRib2R5ICopIikub2ZmKCIuRFQiKTtmKHopLm9mZigiLkRULSIrYi5zSW5zdGFuY2UpOwplIT1nLnBhcmVudE5vZGUmJihsLmNoaWxkcmVuKCJ0aGVhZCIpLmRldGFjaCgpLGwuYXBwZW5kKGcpKTtrJiZlIT1rLnBhcmVudE5vZGUmJihsLmNoaWxkcmVuKCJ0Zm9vdCIpLmRldGFjaCgpLGwuYXBwZW5kKGspKTtiLmFhU29ydGluZz1bXTtiLmFhU29ydGluZ0ZpeGVkPVtdO0FhKGIpO2YobSkucmVtb3ZlQ2xhc3MoYi5hc1N0cmlwZUNsYXNzZXMuam9pbigiICIpKTtmKCJ0aCwgdGQiLGcpLnJlbW92ZUNsYXNzKGQuc1NvcnRhYmxlKyIgIitkLnNTb3J0YWJsZUFzYysiICIrZC5zU29ydGFibGVEZXNjKyIgIitkLnNTb3J0YWJsZU5vbmUpO2guY2hpbGRyZW4oKS5kZXRhY2goKTtoLmFwcGVuZChtKTtnPWE/InJlbW92ZSI6ImRldGFjaCI7bFtnXSgpO25bZ10oKTshYSYmYyYmKGMuaW5zZXJ0QmVmb3JlKGUsYi5uVGFibGVSZWluc2VydEJlZm9yZSksbC5jc3MoIndpZHRoIixiLnNEZXN0cm95V2lkdGgpLnJlbW92ZUNsYXNzKGQuc1RhYmxlKSwocD1iLmFzRGVzdHJveVN0cmlwZXMubGVuZ3RoKSYmCmguY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKGEpe2YodGhpcykuYWRkQ2xhc3MoYi5hc0Rlc3Ryb3lTdHJpcGVzW2ElcF0pfSkpO2M9Zi5pbkFycmF5KGIscS5zZXR0aW5ncyk7LTEhPT1jJiZxLnNldHRpbmdzLnNwbGljZShjLDEpfSl9KTtmLmVhY2goWyJjb2x1bW4iLCJyb3ciLCJjZWxsIl0sZnVuY3Rpb24oYSxiKXt0KGIrInMoKS5ldmVyeSgpIixmdW5jdGlvbihhKXt2YXIgYz10aGlzLnNlbGVjdG9yLm9wdHMsZT10aGlzO3JldHVybiB0aGlzLml0ZXJhdG9yKGIsZnVuY3Rpb24oZCxmLGssbCxuKXthLmNhbGwoZVtiXShmLCJjZWxsIj09PWI/azpjLCJjZWxsIj09PWI/YzpwKSxmLGssbCxuKX0pfSl9KTt0KCJpMThuKCkiLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmNvbnRleHRbMF07YT1VKGEpKGQub0xhbmd1YWdlKTthPT09cCYmKGE9Yik7YyE9PXAmJmYuaXNQbGFpbk9iamVjdChhKSYmKGE9YVtjXSE9PXA/YVtjXTphLl8pO3JldHVybiBhLnJlcGxhY2UoIiVkIixjKX0pOwpxLnZlcnNpb249IjEuMTAuMjAiO3Euc2V0dGluZ3M9W107cS5tb2RlbHM9e307cS5tb2RlbHMub1NlYXJjaD17YkNhc2VJbnNlbnNpdGl2ZTohMCxzU2VhcmNoOiIiLGJSZWdleDohMSxiU21hcnQ6ITB9O3EubW9kZWxzLm9Sb3c9e25UcjpudWxsLGFuQ2VsbHM6bnVsbCxfYURhdGE6W10sX2FTb3J0RGF0YTpudWxsLF9hRmlsdGVyRGF0YTpudWxsLF9zRmlsdGVyUm93Om51bGwsX3NSb3dTdHJpcGU6IiIsc3JjOm51bGwsaWR4Oi0xfTtxLm1vZGVscy5vQ29sdW1uPXtpZHg6bnVsbCxhRGF0YVNvcnQ6bnVsbCxhc1NvcnRpbmc6bnVsbCxiU2VhcmNoYWJsZTpudWxsLGJTb3J0YWJsZTpudWxsLGJWaXNpYmxlOm51bGwsX3NNYW51YWxUeXBlOm51bGwsX2JBdHRyU3JjOiExLGZuQ3JlYXRlZENlbGw6bnVsbCxmbkdldERhdGE6bnVsbCxmblNldERhdGE6bnVsbCxtRGF0YTpudWxsLG1SZW5kZXI6bnVsbCxuVGg6bnVsbCxuVGY6bnVsbCxzQ2xhc3M6bnVsbCxzQ29udGVudFBhZGRpbmc6bnVsbCwKc0RlZmF1bHRDb250ZW50Om51bGwsc05hbWU6bnVsbCxzU29ydERhdGFUeXBlOiJzdGQiLHNTb3J0aW5nQ2xhc3M6bnVsbCxzU29ydGluZ0NsYXNzSlVJOm51bGwsc1RpdGxlOm51bGwsc1R5cGU6bnVsbCxzV2lkdGg6bnVsbCxzV2lkdGhPcmlnOm51bGx9O3EuZGVmYXVsdHM9e2FhRGF0YTpudWxsLGFhU29ydGluZzpbWzAsImFzYyJdXSxhYVNvcnRpbmdGaXhlZDpbXSxhamF4Om51bGwsYUxlbmd0aE1lbnU6WzEwLDI1LDUwLDEwMF0sYW9Db2x1bW5zOm51bGwsYW9Db2x1bW5EZWZzOm51bGwsYW9TZWFyY2hDb2xzOltdLGFzU3RyaXBlQ2xhc3NlczpudWxsLGJBdXRvV2lkdGg6ITAsYkRlZmVyUmVuZGVyOiExLGJEZXN0cm95OiExLGJGaWx0ZXI6ITAsYkluZm86ITAsYkxlbmd0aENoYW5nZTohMCxiUGFnaW5hdGU6ITAsYlByb2Nlc3Npbmc6ITEsYlJldHJpZXZlOiExLGJTY3JvbGxDb2xsYXBzZTohMSxiU2VydmVyU2lkZTohMSxiU29ydDohMCxiU29ydE11bHRpOiEwLGJTb3J0Q2VsbHNUb3A6ITEsCmJTb3J0Q2xhc3NlczohMCxiU3RhdGVTYXZlOiExLGZuQ3JlYXRlZFJvdzpudWxsLGZuRHJhd0NhbGxiYWNrOm51bGwsZm5Gb290ZXJDYWxsYmFjazpudWxsLGZuRm9ybWF0TnVtYmVyOmZ1bmN0aW9uKGEpe3JldHVybiBhLnRvU3RyaW5nKCkucmVwbGFjZSgvXEIoPz0oXGR7M30pKyg/IVxkKSkvZyx0aGlzLm9MYW5ndWFnZS5zVGhvdXNhbmRzKX0sZm5IZWFkZXJDYWxsYmFjazpudWxsLGZuSW5mb0NhbGxiYWNrOm51bGwsZm5Jbml0Q29tcGxldGU6bnVsbCxmblByZURyYXdDYWxsYmFjazpudWxsLGZuUm93Q2FsbGJhY2s6bnVsbCxmblNlcnZlckRhdGE6bnVsbCxmblNlcnZlclBhcmFtczpudWxsLGZuU3RhdGVMb2FkQ2FsbGJhY2s6ZnVuY3Rpb24oYSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKCgtMT09PWEuaVN0YXRlRHVyYXRpb24/c2Vzc2lvblN0b3JhZ2U6bG9jYWxTdG9yYWdlKS5nZXRJdGVtKCJEYXRhVGFibGVzXyIrYS5zSW5zdGFuY2UrIl8iK2xvY2F0aW9uLnBhdGhuYW1lKSl9Y2F0Y2goYil7fX0sCmZuU3RhdGVMb2FkUGFyYW1zOm51bGwsZm5TdGF0ZUxvYWRlZDpudWxsLGZuU3RhdGVTYXZlQ2FsbGJhY2s6ZnVuY3Rpb24oYSxiKXt0cnl7KC0xPT09YS5pU3RhdGVEdXJhdGlvbj9zZXNzaW9uU3RvcmFnZTpsb2NhbFN0b3JhZ2UpLnNldEl0ZW0oIkRhdGFUYWJsZXNfIithLnNJbnN0YW5jZSsiXyIrbG9jYXRpb24ucGF0aG5hbWUsSlNPTi5zdHJpbmdpZnkoYikpfWNhdGNoKGMpe319LGZuU3RhdGVTYXZlUGFyYW1zOm51bGwsaVN0YXRlRHVyYXRpb246NzIwMCxpRGVmZXJMb2FkaW5nOm51bGwsaURpc3BsYXlMZW5ndGg6MTAsaURpc3BsYXlTdGFydDowLGlUYWJJbmRleDowLG9DbGFzc2VzOnt9LG9MYW5ndWFnZTp7b0FyaWE6e3NTb3J0QXNjZW5kaW5nOiI6IGFjdGl2YXRlIHRvIHNvcnQgY29sdW1uIGFzY2VuZGluZyIsc1NvcnREZXNjZW5kaW5nOiI6IGFjdGl2YXRlIHRvIHNvcnQgY29sdW1uIGRlc2NlbmRpbmcifSxvUGFnaW5hdGU6e3NGaXJzdDoiRmlyc3QiLHNMYXN0OiJMYXN0IiwKc05leHQ6Ik5leHQiLHNQcmV2aW91czoiUHJldmlvdXMifSxzRW1wdHlUYWJsZToiTm8gZGF0YSBhdmFpbGFibGUgaW4gdGFibGUiLHNJbmZvOiJTaG93aW5nIF9TVEFSVF8gdG8gX0VORF8gb2YgX1RPVEFMXyBlbnRyaWVzIixzSW5mb0VtcHR5OiJTaG93aW5nIDAgdG8gMCBvZiAwIGVudHJpZXMiLHNJbmZvRmlsdGVyZWQ6IihmaWx0ZXJlZCBmcm9tIF9NQVhfIHRvdGFsIGVudHJpZXMpIixzSW5mb1Bvc3RGaXg6IiIsc0RlY2ltYWw6IiIsc1Rob3VzYW5kczoiLCIsc0xlbmd0aE1lbnU6IlNob3cgX01FTlVfIGVudHJpZXMiLHNMb2FkaW5nUmVjb3JkczoiTG9hZGluZy4uLiIsc1Byb2Nlc3Npbmc6IlByb2Nlc3NpbmcuLi4iLHNTZWFyY2g6IlNlYXJjaDoiLHNTZWFyY2hQbGFjZWhvbGRlcjoiIixzVXJsOiIiLHNaZXJvUmVjb3JkczoiTm8gbWF0Y2hpbmcgcmVjb3JkcyBmb3VuZCJ9LG9TZWFyY2g6Zi5leHRlbmQoe30scS5tb2RlbHMub1NlYXJjaCksc0FqYXhEYXRhUHJvcDoiZGF0YSIsCnNBamF4U291cmNlOm51bGwsc0RvbToibGZydGlwIixzZWFyY2hEZWxheTpudWxsLHNQYWdpbmF0aW9uVHlwZToic2ltcGxlX251bWJlcnMiLHNTY3JvbGxYOiIiLHNTY3JvbGxYSW5uZXI6IiIsc1Njcm9sbFk6IiIsc1NlcnZlck1ldGhvZDoiR0VUIixyZW5kZXJlcjpudWxsLHJvd0lkOiJEVF9Sb3dJZCJ9O0gocS5kZWZhdWx0cyk7cS5kZWZhdWx0cy5jb2x1bW49e2FEYXRhU29ydDpudWxsLGlEYXRhU29ydDotMSxhc1NvcnRpbmc6WyJhc2MiLCJkZXNjIl0sYlNlYXJjaGFibGU6ITAsYlNvcnRhYmxlOiEwLGJWaXNpYmxlOiEwLGZuQ3JlYXRlZENlbGw6bnVsbCxtRGF0YTpudWxsLG1SZW5kZXI6bnVsbCxzQ2VsbFR5cGU6InRkIixzQ2xhc3M6IiIsc0NvbnRlbnRQYWRkaW5nOiIiLHNEZWZhdWx0Q29udGVudDpudWxsLHNOYW1lOiIiLHNTb3J0RGF0YVR5cGU6InN0ZCIsc1RpdGxlOm51bGwsc1R5cGU6bnVsbCxzV2lkdGg6bnVsbH07SChxLmRlZmF1bHRzLmNvbHVtbik7cS5tb2RlbHMub1NldHRpbmdzPQp7b0ZlYXR1cmVzOntiQXV0b1dpZHRoOm51bGwsYkRlZmVyUmVuZGVyOm51bGwsYkZpbHRlcjpudWxsLGJJbmZvOm51bGwsYkxlbmd0aENoYW5nZTpudWxsLGJQYWdpbmF0ZTpudWxsLGJQcm9jZXNzaW5nOm51bGwsYlNlcnZlclNpZGU6bnVsbCxiU29ydDpudWxsLGJTb3J0TXVsdGk6bnVsbCxiU29ydENsYXNzZXM6bnVsbCxiU3RhdGVTYXZlOm51bGx9LG9TY3JvbGw6e2JDb2xsYXBzZTpudWxsLGlCYXJXaWR0aDowLHNYOm51bGwsc1hJbm5lcjpudWxsLHNZOm51bGx9LG9MYW5ndWFnZTp7Zm5JbmZvQ2FsbGJhY2s6bnVsbH0sb0Jyb3dzZXI6e2JTY3JvbGxPdmVyc2l6ZTohMSxiU2Nyb2xsYmFyTGVmdDohMSxiQm91bmRpbmc6ITEsYmFyV2lkdGg6MH0sYWpheDpudWxsLGFhbkZlYXR1cmVzOltdLGFvRGF0YTpbXSxhaURpc3BsYXk6W10sYWlEaXNwbGF5TWFzdGVyOltdLGFJZHM6e30sYW9Db2x1bW5zOltdLGFvSGVhZGVyOltdLGFvRm9vdGVyOltdLG9QcmV2aW91c1NlYXJjaDp7fSwKYW9QcmVTZWFyY2hDb2xzOltdLGFhU29ydGluZzpudWxsLGFhU29ydGluZ0ZpeGVkOltdLGFzU3RyaXBlQ2xhc3NlczpudWxsLGFzRGVzdHJveVN0cmlwZXM6W10sc0Rlc3Ryb3lXaWR0aDowLGFvUm93Q2FsbGJhY2s6W10sYW9IZWFkZXJDYWxsYmFjazpbXSxhb0Zvb3RlckNhbGxiYWNrOltdLGFvRHJhd0NhbGxiYWNrOltdLGFvUm93Q3JlYXRlZENhbGxiYWNrOltdLGFvUHJlRHJhd0NhbGxiYWNrOltdLGFvSW5pdENvbXBsZXRlOltdLGFvU3RhdGVTYXZlUGFyYW1zOltdLGFvU3RhdGVMb2FkUGFyYW1zOltdLGFvU3RhdGVMb2FkZWQ6W10sc1RhYmxlSWQ6IiIsblRhYmxlOm51bGwsblRIZWFkOm51bGwsblRGb290Om51bGwsblRCb2R5Om51bGwsblRhYmxlV3JhcHBlcjpudWxsLGJEZWZlckxvYWRpbmc6ITEsYkluaXRpYWxpc2VkOiExLGFvT3BlblJvd3M6W10sc0RvbTpudWxsLHNlYXJjaERlbGF5Om51bGwsc1BhZ2luYXRpb25UeXBlOiJ0d29fYnV0dG9uIixpU3RhdGVEdXJhdGlvbjowLAphb1N0YXRlU2F2ZTpbXSxhb1N0YXRlTG9hZDpbXSxvU2F2ZWRTdGF0ZTpudWxsLG9Mb2FkZWRTdGF0ZTpudWxsLHNBamF4U291cmNlOm51bGwsc0FqYXhEYXRhUHJvcDpudWxsLGJBamF4RGF0YUdldDohMCxqcVhIUjpudWxsLGpzb246cCxvQWpheERhdGE6cCxmblNlcnZlckRhdGE6bnVsbCxhb1NlcnZlclBhcmFtczpbXSxzU2VydmVyTWV0aG9kOm51bGwsZm5Gb3JtYXROdW1iZXI6bnVsbCxhTGVuZ3RoTWVudTpudWxsLGlEcmF3OjAsYkRyYXdpbmc6ITEsaURyYXdFcnJvcjotMSxfaURpc3BsYXlMZW5ndGg6MTAsX2lEaXNwbGF5U3RhcnQ6MCxfaVJlY29yZHNUb3RhbDowLF9pUmVjb3Jkc0Rpc3BsYXk6MCxvQ2xhc3Nlczp7fSxiRmlsdGVyZWQ6ITEsYlNvcnRlZDohMSxiU29ydENlbGxzVG9wOm51bGwsb0luaXQ6bnVsbCxhb0Rlc3Ryb3lDYWxsYmFjazpbXSxmblJlY29yZHNUb3RhbDpmdW5jdGlvbigpe3JldHVybiJzc3AiPT1EKHRoaXMpPzEqdGhpcy5faVJlY29yZHNUb3RhbDoKdGhpcy5haURpc3BsYXlNYXN0ZXIubGVuZ3RofSxmblJlY29yZHNEaXNwbGF5OmZ1bmN0aW9uKCl7cmV0dXJuInNzcCI9PUQodGhpcyk/MSp0aGlzLl9pUmVjb3Jkc0Rpc3BsYXk6dGhpcy5haURpc3BsYXkubGVuZ3RofSxmbkRpc3BsYXlFbmQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pRGlzcGxheUxlbmd0aCxiPXRoaXMuX2lEaXNwbGF5U3RhcnQsYz1iK2EsZD10aGlzLmFpRGlzcGxheS5sZW5ndGgsZT10aGlzLm9GZWF0dXJlcyxmPWUuYlBhZ2luYXRlO3JldHVybiBlLmJTZXJ2ZXJTaWRlPyExPT09Znx8LTE9PT1hP2IrZDpNYXRoLm1pbihiK2EsdGhpcy5faVJlY29yZHNEaXNwbGF5KTohZnx8Yz5kfHwtMT09PWE/ZDpjfSxvSW5zdGFuY2U6bnVsbCxzSW5zdGFuY2U6bnVsbCxpVGFiSW5kZXg6MCxuU2Nyb2xsSGVhZDpudWxsLG5TY3JvbGxGb290Om51bGwsYUxhc3RTb3J0OltdLG9QbHVnaW5zOnt9LHJvd0lkRm46bnVsbCxyb3dJZDpudWxsfTtxLmV4dD1DPXtidXR0b25zOnt9LApjbGFzc2VzOnt9LGJ1aWxkZXI6Ii1zb3VyY2UtIixlcnJNb2RlOiJhbGVydCIsZmVhdHVyZTpbXSxzZWFyY2g6W10sc2VsZWN0b3I6e2NlbGw6W10sY29sdW1uOltdLHJvdzpbXX0saW50ZXJuYWw6e30sbGVnYWN5OnthamF4Om51bGx9LHBhZ2VyOnt9LHJlbmRlcmVyOntwYWdlQnV0dG9uOnt9LGhlYWRlcjp7fX0sb3JkZXI6e30sdHlwZTp7ZGV0ZWN0OltdLHNlYXJjaDp7fSxvcmRlcjp7fX0sX3VuaXF1ZTowLGZuVmVyc2lvbkNoZWNrOnEuZm5WZXJzaW9uQ2hlY2ssaUFwaUluZGV4OjAsb0pVSUNsYXNzZXM6e30sc1ZlcnNpb246cS52ZXJzaW9ufTtmLmV4dGVuZChDLHthZm5GaWx0ZXJpbmc6Qy5zZWFyY2gsYVR5cGVzOkMudHlwZS5kZXRlY3Qsb2ZuU2VhcmNoOkMudHlwZS5zZWFyY2gsb1NvcnQ6Qy50eXBlLm9yZGVyLGFmblNvcnREYXRhOkMub3JkZXIsYW9GZWF0dXJlczpDLmZlYXR1cmUsb0FwaTpDLmludGVybmFsLG9TdGRDbGFzc2VzOkMuY2xhc3NlcyxvUGFnaW5hdGlvbjpDLnBhZ2VyfSk7CmYuZXh0ZW5kKHEuZXh0LmNsYXNzZXMse3NUYWJsZToiZGF0YVRhYmxlIixzTm9Gb290ZXI6Im5vLWZvb3RlciIsc1BhZ2VCdXR0b246InBhZ2luYXRlX2J1dHRvbiIsc1BhZ2VCdXR0b25BY3RpdmU6ImN1cnJlbnQiLHNQYWdlQnV0dG9uRGlzYWJsZWQ6ImRpc2FibGVkIixzU3RyaXBlT2RkOiJvZGQiLHNTdHJpcGVFdmVuOiJldmVuIixzUm93RW1wdHk6ImRhdGFUYWJsZXNfZW1wdHkiLHNXcmFwcGVyOiJkYXRhVGFibGVzX3dyYXBwZXIiLHNGaWx0ZXI6ImRhdGFUYWJsZXNfZmlsdGVyIixzSW5mbzoiZGF0YVRhYmxlc19pbmZvIixzUGFnaW5nOiJkYXRhVGFibGVzX3BhZ2luYXRlIHBhZ2luZ18iLHNMZW5ndGg6ImRhdGFUYWJsZXNfbGVuZ3RoIixzUHJvY2Vzc2luZzoiZGF0YVRhYmxlc19wcm9jZXNzaW5nIixzU29ydEFzYzoic29ydGluZ19hc2MiLHNTb3J0RGVzYzoic29ydGluZ19kZXNjIixzU29ydGFibGU6InNvcnRpbmciLHNTb3J0YWJsZUFzYzoic29ydGluZ19hc2NfZGlzYWJsZWQiLApzU29ydGFibGVEZXNjOiJzb3J0aW5nX2Rlc2NfZGlzYWJsZWQiLHNTb3J0YWJsZU5vbmU6InNvcnRpbmdfZGlzYWJsZWQiLHNTb3J0Q29sdW1uOiJzb3J0aW5nXyIsc0ZpbHRlcklucHV0OiIiLHNMZW5ndGhTZWxlY3Q6IiIsc1Njcm9sbFdyYXBwZXI6ImRhdGFUYWJsZXNfc2Nyb2xsIixzU2Nyb2xsSGVhZDoiZGF0YVRhYmxlc19zY3JvbGxIZWFkIixzU2Nyb2xsSGVhZElubmVyOiJkYXRhVGFibGVzX3Njcm9sbEhlYWRJbm5lciIsc1Njcm9sbEJvZHk6ImRhdGFUYWJsZXNfc2Nyb2xsQm9keSIsc1Njcm9sbEZvb3Q6ImRhdGFUYWJsZXNfc2Nyb2xsRm9vdCIsc1Njcm9sbEZvb3RJbm5lcjoiZGF0YVRhYmxlc19zY3JvbGxGb290SW5uZXIiLHNIZWFkZXJUSDoiIixzRm9vdGVyVEg6IiIsc1NvcnRKVUlBc2M6IiIsc1NvcnRKVUlEZXNjOiIiLHNTb3J0SlVJOiIiLHNTb3J0SlVJQXNjQWxsb3dlZDoiIixzU29ydEpVSURlc2NBbGxvd2VkOiIiLHNTb3J0SlVJV3JhcHBlcjoiIixzU29ydEljb246IiIsCnNKVUlIZWFkZXI6IiIsc0pVSUZvb3RlcjoiIn0pO3ZhciBQYj1xLmV4dC5wYWdlcjtmLmV4dGVuZChQYix7c2ltcGxlOmZ1bmN0aW9uKGEsYil7cmV0dXJuWyJwcmV2aW91cyIsIm5leHQiXX0sZnVsbDpmdW5jdGlvbihhLGIpe3JldHVyblsiZmlyc3QiLCJwcmV2aW91cyIsIm5leHQiLCJsYXN0Il19LG51bWJlcnM6ZnVuY3Rpb24oYSxiKXtyZXR1cm5ba2EoYSxiKV19LHNpbXBsZV9udW1iZXJzOmZ1bmN0aW9uKGEsYil7cmV0dXJuWyJwcmV2aW91cyIsa2EoYSxiKSwibmV4dCJdfSxmdWxsX251bWJlcnM6ZnVuY3Rpb24oYSxiKXtyZXR1cm5bImZpcnN0IiwicHJldmlvdXMiLGthKGEsYiksIm5leHQiLCJsYXN0Il19LGZpcnN0X2xhc3RfbnVtYmVyczpmdW5jdGlvbihhLGIpe3JldHVyblsiZmlyc3QiLGthKGEsYiksImxhc3QiXX0sX251bWJlcnM6a2EsbnVtYmVyc19sZW5ndGg6N30pO2YuZXh0ZW5kKCEwLHEuZXh0LnJlbmRlcmVyLHtwYWdlQnV0dG9uOntfOmZ1bmN0aW9uKGEsYiwKYyxkLGUsaCl7dmFyIGc9YS5vQ2xhc3NlcyxrPWEub0xhbmd1YWdlLm9QYWdpbmF0ZSxsPWEub0xhbmd1YWdlLm9BcmlhLnBhZ2luYXRlfHx7fSxuLG0scT0wLHQ9ZnVuY3Rpb24oYixkKXt2YXIgcCxyPWcuc1BhZ2VCdXR0b25EaXNhYmxlZCx1PWZ1bmN0aW9uKGIpe1hhKGEsYi5kYXRhLmFjdGlvbiwhMCl9O3ZhciB3PTA7Zm9yKHA9ZC5sZW5ndGg7dzxwO3crKyl7dmFyIHY9ZFt3XTtpZihmLmlzQXJyYXkodikpe3ZhciB4PWYoIjwiKyh2LkRUX2VsfHwiZGl2IikrIi8+IikuYXBwZW5kVG8oYik7dCh4LHYpfWVsc2V7bj1udWxsO209djt4PWEuaVRhYkluZGV4O3N3aXRjaCh2KXtjYXNlICJlbGxpcHNpcyI6Yi5hcHBlbmQoJzxzcGFuIGNsYXNzPSJlbGxpcHNpcyI+JiN4MjAyNjs8L3NwYW4+Jyk7YnJlYWs7Y2FzZSAiZmlyc3QiOm49ay5zRmlyc3Q7MD09PWUmJih4PS0xLG0rPSIgIityKTticmVhaztjYXNlICJwcmV2aW91cyI6bj1rLnNQcmV2aW91czswPT09ZSYmKHg9LTEsbSs9CiIgIityKTticmVhaztjYXNlICJuZXh0IjpuPWsuc05leHQ7ZT09PWgtMSYmKHg9LTEsbSs9IiAiK3IpO2JyZWFrO2Nhc2UgImxhc3QiOm49ay5zTGFzdDtlPT09aC0xJiYoeD0tMSxtKz0iICIrcik7YnJlYWs7ZGVmYXVsdDpuPXYrMSxtPWU9PT12P2cuc1BhZ2VCdXR0b25BY3RpdmU6IiJ9bnVsbCE9PW4mJih4PWYoIjxhPiIseyJjbGFzcyI6Zy5zUGFnZUJ1dHRvbisiICIrbSwiYXJpYS1jb250cm9scyI6YS5zVGFibGVJZCwiYXJpYS1sYWJlbCI6bFt2XSwiZGF0YS1kdC1pZHgiOnEsdGFiaW5kZXg6eCxpZDowPT09YyYmInN0cmluZyI9PT10eXBlb2Ygdj9hLnNUYWJsZUlkKyJfIit2Om51bGx9KS5odG1sKG4pLmFwcGVuZFRvKGIpLCRhKHgse2FjdGlvbjp2fSx1KSxxKyspfX19O3RyeXt2YXIgdj1mKGIpLmZpbmQoeS5hY3RpdmVFbGVtZW50KS5kYXRhKCJkdC1pZHgiKX1jYXRjaChtYyl7fXQoZihiKS5lbXB0eSgpLGQpO3YhPT1wJiZmKGIpLmZpbmQoIltkYXRhLWR0LWlkeD0iKwp2KyJdIikuZm9jdXMoKX19fSk7Zi5leHRlbmQocS5leHQudHlwZS5kZXRlY3QsW2Z1bmN0aW9uKGEsYil7Yj1iLm9MYW5ndWFnZS5zRGVjaW1hbDtyZXR1cm4gZGIoYSxiKT8ibnVtIitiOm51bGx9LGZ1bmN0aW9uKGEsYil7aWYoYSYmIShhIGluc3RhbmNlb2YgRGF0ZSkmJiFjYy50ZXN0KGEpKXJldHVybiBudWxsO2I9RGF0ZS5wYXJzZShhKTtyZXR1cm4gbnVsbCE9PWImJiFpc05hTihiKXx8UChhKT8iZGF0ZSI6bnVsbH0sZnVuY3Rpb24oYSxiKXtiPWIub0xhbmd1YWdlLnNEZWNpbWFsO3JldHVybiBkYihhLGIsITApPyJudW0tZm10IitiOm51bGx9LGZ1bmN0aW9uKGEsYil7Yj1iLm9MYW5ndWFnZS5zRGVjaW1hbDtyZXR1cm4gVWIoYSxiKT8iaHRtbC1udW0iK2I6bnVsbH0sZnVuY3Rpb24oYSxiKXtiPWIub0xhbmd1YWdlLnNEZWNpbWFsO3JldHVybiBVYihhLGIsITApPyJodG1sLW51bS1mbXQiK2I6bnVsbH0sZnVuY3Rpb24oYSxiKXtyZXR1cm4gUChhKXx8InN0cmluZyI9PT0KdHlwZW9mIGEmJi0xIT09YS5pbmRleE9mKCI8Iik/Imh0bWwiOm51bGx9XSk7Zi5leHRlbmQocS5leHQudHlwZS5zZWFyY2gse2h0bWw6ZnVuY3Rpb24oYSl7cmV0dXJuIFAoYSk/YToic3RyaW5nIj09PXR5cGVvZiBhP2EucmVwbGFjZShSYiwiICIpLnJlcGxhY2UoRWEsIiIpOiIifSxzdHJpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuIFAoYSk/YToic3RyaW5nIj09PXR5cGVvZiBhP2EucmVwbGFjZShSYiwiICIpOmF9fSk7dmFyIERhPWZ1bmN0aW9uKGEsYixjLGQpe2lmKDAhPT1hJiYoIWF8fCItIj09PWEpKXJldHVybi1JbmZpbml0eTtiJiYoYT1UYihhLGIpKTthLnJlcGxhY2UmJihjJiYoYT1hLnJlcGxhY2UoYywiIikpLGQmJihhPWEucmVwbGFjZShkLCIiKSkpO3JldHVybiAxKmF9O2YuZXh0ZW5kKEMudHlwZS5vcmRlcix7ImRhdGUtcHJlIjpmdW5jdGlvbihhKXthPURhdGUucGFyc2UoYSk7cmV0dXJuIGlzTmFOKGEpPy1JbmZpbml0eTphfSwiaHRtbC1wcmUiOmZ1bmN0aW9uKGEpe3JldHVybiBQKGEpPwoiIjphLnJlcGxhY2U/YS5yZXBsYWNlKC88Lio/Pi9nLCIiKS50b0xvd2VyQ2FzZSgpOmErIiJ9LCJzdHJpbmctcHJlIjpmdW5jdGlvbihhKXtyZXR1cm4gUChhKT8iIjoic3RyaW5nIj09PXR5cGVvZiBhP2EudG9Mb3dlckNhc2UoKTphLnRvU3RyaW5nP2EudG9TdHJpbmcoKToiIn0sInN0cmluZy1hc2MiOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE8Yj8tMTphPmI/MTowfSwic3RyaW5nLWRlc2MiOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE8Yj8xOmE+Yj8tMTowfX0pO0hhKCIiKTtmLmV4dGVuZCghMCxxLmV4dC5yZW5kZXJlcix7aGVhZGVyOntfOmZ1bmN0aW9uKGEsYixjLGQpe2YoYS5uVGFibGUpLm9uKCJvcmRlci5kdC5EVCIsZnVuY3Rpb24oZSxmLGcsayl7YT09PWYmJihlPWMuaWR4LGIucmVtb3ZlQ2xhc3MoYy5zU29ydGluZ0NsYXNzKyIgIitkLnNTb3J0QXNjKyIgIitkLnNTb3J0RGVzYykuYWRkQ2xhc3MoImFzYyI9PWtbZV0/ZC5zU29ydEFzYzoiZGVzYyI9PWtbZV0/ZC5zU29ydERlc2M6CmMuc1NvcnRpbmdDbGFzcykpfSl9LGpxdWVyeXVpOmZ1bmN0aW9uKGEsYixjLGQpe2YoIjxkaXYvPiIpLmFkZENsYXNzKGQuc1NvcnRKVUlXcmFwcGVyKS5hcHBlbmQoYi5jb250ZW50cygpKS5hcHBlbmQoZigiPHNwYW4vPiIpLmFkZENsYXNzKGQuc1NvcnRJY29uKyIgIitjLnNTb3J0aW5nQ2xhc3NKVUkpKS5hcHBlbmRUbyhiKTtmKGEublRhYmxlKS5vbigib3JkZXIuZHQuRFQiLGZ1bmN0aW9uKGUsZixnLGspe2E9PT1mJiYoZT1jLmlkeCxiLnJlbW92ZUNsYXNzKGQuc1NvcnRBc2MrIiAiK2Quc1NvcnREZXNjKS5hZGRDbGFzcygiYXNjIj09a1tlXT9kLnNTb3J0QXNjOiJkZXNjIj09a1tlXT9kLnNTb3J0RGVzYzpjLnNTb3J0aW5nQ2xhc3MpLGIuZmluZCgic3Bhbi4iK2Quc1NvcnRJY29uKS5yZW1vdmVDbGFzcyhkLnNTb3J0SlVJQXNjKyIgIitkLnNTb3J0SlVJRGVzYysiICIrZC5zU29ydEpVSSsiICIrZC5zU29ydEpVSUFzY0FsbG93ZWQrIiAiK2Quc1NvcnRKVUlEZXNjQWxsb3dlZCkuYWRkQ2xhc3MoImFzYyI9PQprW2VdP2Quc1NvcnRKVUlBc2M6ImRlc2MiPT1rW2VdP2Quc1NvcnRKVUlEZXNjOmMuc1NvcnRpbmdDbGFzc0pVSSkpfSl9fX0pO3ZhciBpYj1mdW5jdGlvbihhKXtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBhP2EucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKTphfTtxLnJlbmRlcj17bnVtYmVyOmZ1bmN0aW9uKGEsYixjLGQsZSl7cmV0dXJue2Rpc3BsYXk6ZnVuY3Rpb24oZil7aWYoIm51bWJlciIhPT10eXBlb2YgZiYmInN0cmluZyIhPT10eXBlb2YgZilyZXR1cm4gZjt2YXIgZz0wPmY/Ii0iOiIiLGg9cGFyc2VGbG9hdChmKTtpZihpc05hTihoKSlyZXR1cm4gaWIoZik7aD1oLnRvRml4ZWQoYyk7Zj1NYXRoLmFicyhoKTtoPXBhcnNlSW50KGYsMTApO2Y9Yz9iKyhmLWgpLnRvRml4ZWQoYykuc3Vic3RyaW5nKDIpOiIiO3JldHVybiBnKyhkfHwiIikraC50b1N0cmluZygpLnJlcGxhY2UoL1xCKD89KFxkezN9KSsoPyFcZCkpL2csCmEpK2YrKGV8fCIiKX19fSx0ZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2Rpc3BsYXk6aWIsZmlsdGVyOmlifX19O2YuZXh0ZW5kKHEuZXh0LmludGVybmFsLHtfZm5FeHRlcm5BcGlGdW5jOlFiLF9mbkJ1aWxkQWpheDp2YSxfZm5BamF4VXBkYXRlOnFiLF9mbkFqYXhQYXJhbWV0ZXJzOnpiLF9mbkFqYXhVcGRhdGVEcmF3OkFiLF9mbkFqYXhEYXRhU3JjOndhLF9mbkFkZENvbHVtbjpJYSxfZm5Db2x1bW5PcHRpb25zOm1hLF9mbkFkanVzdENvbHVtblNpemluZzphYSxfZm5WaXNpYmxlVG9Db2x1bW5JbmRleDpiYSxfZm5Db2x1bW5JbmRleFRvVmlzaWJsZTpjYSxfZm5WaXNibGVDb2x1bW5zOlcsX2ZuR2V0Q29sdW1uczpvYSxfZm5Db2x1bW5UeXBlczpLYSxfZm5BcHBseUNvbHVtbkRlZnM6bmIsX2ZuSHVuZ2FyaWFuTWFwOkgsX2ZuQ2FtZWxUb0h1bmdhcmlhbjpMLF9mbkxhbmd1YWdlQ29tcGF0OkdhLF9mbkJyb3dzZXJEZXRlY3Q6bGIsX2ZuQWRkRGF0YTpSLF9mbkFkZFRyOnBhLF9mbk5vZGVUb0RhdGFJbmRleDpmdW5jdGlvbihhLApiKXtyZXR1cm4gYi5fRFRfUm93SW5kZXghPT1wP2IuX0RUX1Jvd0luZGV4Om51bGx9LF9mbk5vZGVUb0NvbHVtbkluZGV4OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5pbkFycmF5KGMsYS5hb0RhdGFbYl0uYW5DZWxscyl9LF9mbkdldENlbGxEYXRhOkksX2ZuU2V0Q2VsbERhdGE6b2IsX2ZuU3BsaXRPYmpOb3RhdGlvbjpOYSxfZm5HZXRPYmplY3REYXRhRm46VSxfZm5TZXRPYmplY3REYXRhRm46USxfZm5HZXREYXRhTWFzdGVyOk9hLF9mbkNsZWFyVGFibGU6cWEsX2ZuRGVsZXRlSW5kZXg6cmEsX2ZuSW52YWxpZGF0ZTplYSxfZm5HZXRSb3dFbGVtZW50czpNYSxfZm5DcmVhdGVUcjpMYSxfZm5CdWlsZEhlYWQ6cGIsX2ZuRHJhd0hlYWQ6aGEsX2ZuRHJhdzpTLF9mblJlRHJhdzpWLF9mbkFkZE9wdGlvbnNIdG1sOnNiLF9mbkRldGVjdEhlYWRlcjpmYSxfZm5HZXRVbmlxdWVUaHM6dWEsX2ZuRmVhdHVyZUh0bWxGaWx0ZXI6dWIsX2ZuRmlsdGVyQ29tcGxldGU6aWEsX2ZuRmlsdGVyQ3VzdG9tOkRiLApfZm5GaWx0ZXJDb2x1bW46Q2IsX2ZuRmlsdGVyOkJiLF9mbkZpbHRlckNyZWF0ZVNlYXJjaDpUYSxfZm5Fc2NhcGVSZWdleDpVYSxfZm5GaWx0ZXJEYXRhOkViLF9mbkZlYXR1cmVIdG1sSW5mbzp4YixfZm5VcGRhdGVJbmZvOkhiLF9mbkluZm9NYWNyb3M6SWIsX2ZuSW5pdGlhbGlzZTpqYSxfZm5Jbml0Q29tcGxldGU6eGEsX2ZuTGVuZ3RoQ2hhbmdlOlZhLF9mbkZlYXR1cmVIdG1sTGVuZ3RoOnRiLF9mbkZlYXR1cmVIdG1sUGFnaW5hdGU6eWIsX2ZuUGFnZUNoYW5nZTpYYSxfZm5GZWF0dXJlSHRtbFByb2Nlc3Npbmc6dmIsX2ZuUHJvY2Vzc2luZ0Rpc3BsYXk6SyxfZm5GZWF0dXJlSHRtbFRhYmxlOndiLF9mblNjcm9sbERyYXc6bmEsX2ZuQXBwbHlUb0NoaWxkcmVuOk4sX2ZuQ2FsY3VsYXRlQ29sdW1uV2lkdGhzOkphLF9mblRocm90dGxlOlNhLF9mbkNvbnZlcnRUb1dpZHRoOkpiLF9mbkdldFdpZGVzdE5vZGU6S2IsX2ZuR2V0TWF4TGVuU3RyaW5nOkxiLF9mblN0cmluZ1RvQ3NzOkIsCl9mblNvcnRGbGF0dGVuOlksX2ZuU29ydDpyYixfZm5Tb3J0QXJpYTpOYixfZm5Tb3J0TGlzdGVuZXI6WmEsX2ZuU29ydEF0dGFjaExpc3RlbmVyOlFhLF9mblNvcnRpbmdDbGFzc2VzOkFhLF9mblNvcnREYXRhOk1iLF9mblNhdmVTdGF0ZTpCYSxfZm5Mb2FkU3RhdGU6T2IsX2ZuU2V0dGluZ3NGcm9tTm9kZTpDYSxfZm5Mb2c6TyxfZm5NYXA6TSxfZm5CaW5kQWN0aW9uOiRhLF9mbkNhbGxiYWNrUmVnOkUsX2ZuQ2FsbGJhY2tGaXJlOkEsX2ZuTGVuZ3RoT3ZlcmZsb3c6V2EsX2ZuUmVuZGVyZXI6UmEsX2ZuRGF0YVNvdXJjZTpELF9mblJvd0F0dHJpYnV0ZXM6UGEsX2ZuRXh0ZW5kOmFiLF9mbkNhbGN1bGF0ZUVuZDpmdW5jdGlvbigpe319KTtmLmZuLmRhdGFUYWJsZT1xO3EuJD1mO2YuZm4uZGF0YVRhYmxlU2V0dGluZ3M9cS5zZXR0aW5ncztmLmZuLmRhdGFUYWJsZUV4dD1xLmV4dDtmLmZuLkRhdGFUYWJsZT1mdW5jdGlvbihhKXtyZXR1cm4gZih0aGlzKS5kYXRhVGFibGUoYSkuYXBpKCl9OwpmLmVhY2gocSxmdW5jdGlvbihhLGIpe2YuZm4uRGF0YVRhYmxlW2FdPWJ9KTtyZXR1cm4gZi5mbi5kYXRhVGFibGV9KTsK"></script>
<link href="data:text/css,%0A%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%20%7B%0Amargin%2Dleft%3A%20%2D30px%3B%0Amargin%2Dright%3A%20%2D30px%3B%0Awhite%2Dspace%3A%20normal%3B%0A%7D%0A%0Abody%20%3E%20%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%20%7B%0Amargin%2Dleft%3A%20auto%3B%0Amargin%2Dright%3A%20auto%3B%0A%7D%0A%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Apadding%2Dright%3A%2012px%3B%0Avertical%2Dalign%3A%20top%3B%0A%7D%0A%40media%20only%20screen%20and%20%28max%2Dwidth%3A480px%29%20%7B%0A%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%20%7B%0Adisplay%3A%20block%3B%0Apadding%2Dright%3A%20inherit%3B%0A%7D%0A%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,IWZ1bmN0aW9uIG8odSxhLGwpe2Z1bmN0aW9uIHMobixlKXtpZighYVtuXSl7aWYoIXVbbl0pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFlJiZ0KXJldHVybiB0KG4sITApO2lmKGYpcmV0dXJuIGYobiwhMCk7dmFyIHI9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbisiJyIpO3Rocm93IHIuY29kZT0iTU9EVUxFX05PVF9GT1VORCIscn12YXIgaT1hW25dPXtleHBvcnRzOnt9fTt1W25dWzBdLmNhbGwoaS5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXVbbl1bMV1bZV07cmV0dXJuIHModHx8ZSl9LGksaS5leHBvcnRzLG8sdSxhLGwpfXJldHVybiBhW25dLmV4cG9ydHN9Zm9yKHZhciBmPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGU9MDtlPGwubGVuZ3RoO2UrKylzKGxbZV0pO3JldHVybiBzfSh7MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCk7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5fdHlwZXM9e30sdGhpcy5fc2VxPTB9cmV0dXJuIHIoZSxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fdHlwZXNbZV07bnx8KG49dGhpcy5fdHlwZXNbZV09e30pO3ZhciByPSJzdWIiK3RoaXMuX3NlcSsrO3JldHVybiBuW3JdPXQscn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl90eXBlc1tlXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdCl7Zm9yKHZhciByIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShyKSYmbltyXT09PXQpcmV0dXJuIGRlbGV0ZSBuW3JdLHI7cmV0dXJuITF9aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiEoIW58fCFuW3RdKSYmKGRlbGV0ZSBuW3RdLHQpO3Rocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB0eXBlIGZvciBsaXN0ZW5lciIpfX0se2tleToidHJpZ2dlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX3R5cGVzW2VdO2Zvcih2YXIgaSBpbiByKXIuaGFzT3duUHJvcGVydHkoaSkmJnJbaV0uY2FsbChuLHQpfX1dKSxlfSgpO24uZGVmYXVsdD1pfSx7fV0sMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbi5GaWx0ZXJIYW5kbGU9dm9pZCAwO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGk9bChlKCIuL2V2ZW50cyIpKSxvPWwoZSgiLi9maWx0ZXJzZXQiKSksdT1sKGUoIi4vZ3JvdXAiKSksYT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBzPTE7bi5GaWx0ZXJIYW5kbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGUsdCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IGEuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX2ZpbHRlclNldD1udWxsLHRoaXMuX2ZpbHRlclZhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPWEuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5faWQ9ImZpbHRlciIrcysrLHRoaXMuc2V0R3JvdXAoZSl9cmV0dXJuIHIobixbe2tleToic2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzO2lmKHRoaXMuX2dyb3VwIT09ZSYmKCh0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl9maWx0ZXJWYXImJih0aGlzLl9maWx0ZXJWYXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLmNsZWFyKCksdGhpcy5fdmFyT25DaGFuZ2VTdWI9bnVsbCx0aGlzLl9maWx0ZXJWYXI9bnVsbCx0aGlzLl9maWx0ZXJTZXQ9bnVsbCksdGhpcy5fZ3JvdXA9ZSkpKXtlPSgwLHUuZGVmYXVsdCkoZSksdGhpcy5fZmlsdGVyU2V0PSh0PWUudmFyKCJmaWx0ZXJzZXQiKSwobj10LmdldCgpKXx8KG49bmV3IG8uZGVmYXVsdCx0LnNldChuKSksbiksdGhpcy5fZmlsdGVyVmFyPSgwLHUuZGVmYXVsdCkoZSkudmFyKCJmaWx0ZXIiKTt2YXIgaT10aGlzLl9maWx0ZXJWYXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7ci5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUscil9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1pfX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGEuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5jbGVhcigpLHRoaXMuc2V0R3JvdXAobnVsbCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LmNsZWFyKHRoaXMuX2lkKSx0aGlzLl9vbkNoYW5nZShlKSl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LnVwZGF0ZSh0aGlzLl9pZCxlKSx0aGlzLl9vbkNoYW5nZSh0KSl9fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vbihlLHQpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9lbWl0dGVyLm9mZihlLHQpfX0se2tleToiX29uQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9maWx0ZXJTZXQmJnRoaXMuX2ZpbHRlclZhci5zZXQodGhpcy5fZmlsdGVyU2V0LnZhbHVlLHRoaXMuX21lcmdlRXh0cmFJbmZvKGUpKX19LHtrZXk6ImZpbHRlcmVkS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbHRlclNldD90aGlzLl9maWx0ZXJTZXQudmFsdWU6bnVsbH19XSksbn0oKX0seyIuL2V2ZW50cyI6MSwiLi9maWx0ZXJzZXQiOjMsIi4vZ3JvdXAiOjQsIi4vdXRpbCI6MTF9XSwzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxhPWUoIi4vdXRpbCIpO2Z1bmN0aW9uIGwoZSx0KXtyZXR1cm4gZT09PXQ/MDplPHQ/LTE6dDxlPzE6dm9pZCAwfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMucmVzZXQoKX1yZXR1cm4gcihlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9oYW5kbGVzPXt9LHRoaXMuX2tleXM9e30sdGhpcy5fdmFsdWU9bnVsbCx0aGlzLl9hY3RpdmVIYW5kbGVzPTB9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7bnVsbCE9PXQmJih0PXQuc2xpY2UoMCkpLnNvcnQobCk7dmFyIG49KDAsYS5kaWZmU29ydGVkTGlzdHMpKHRoaXMuX2hhbmRsZXNbZV0sdCkscj1uLmFkZGVkLGk9bi5yZW1vdmVkO3RoaXMuX2hhbmRsZXNbZV09dDtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl0aGlzLl9rZXlzW3Jbb11dPSh0aGlzLl9rZXlzW3Jbb11dfHwwKSsxO2Zvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKXRoaXMuX2tleXNbaVt1XV0tLTt0aGlzLl91cGRhdGVWYWx1ZSh0KX19LHtrZXk6Il91cGRhdGVWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5fYWxsS2V5cyx0PU9iamVjdC5rZXlzKHRoaXMuX2hhbmRsZXMpLmxlbmd0aDtpZigwPT09dCl0aGlzLl92YWx1ZT1udWxsO2Vsc2V7dGhpcy5fdmFsdWU9W107Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3RoaXMuX2tleXNbZVtuXV09PT10JiZ0aGlzLl92YWx1ZS5wdXNoKGVbbl0pfX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09dGhpcy5faGFuZGxlc1tlXSl7dmFyIHQ9dGhpcy5faGFuZGxlc1tlXTt0fHwodD1bXSk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy5fa2V5c1t0W25dXS0tO2RlbGV0ZSB0aGlzLl9oYW5kbGVzW2VdLHRoaXMuX3VwZGF0ZVZhbHVlKCl9fX0se2tleToidmFsdWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX19LHtrZXk6Il9hbGxLZXlzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Qua2V5cyh0aGlzLl9rZXlzKTtyZXR1cm4gZS5zb3J0KGwpLGV9fV0pLGV9KCk7bi5kZWZhdWx0PWl9LHsiLi91dGlsIjoxMX1dLDQ6W2Z1bmN0aW9uKGwsZSxzKXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTtzLmRlZmF1bHQ9ZnVuY3Rpb24gZSh0KXt7aWYodCYmInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1Lmhhc093blByb3BlcnR5KHQpfHwodVt0XT1uZXcgYSh0KSksdVt0XTtpZigib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnIodCkpJiZ0Ll92YXJzJiZ0LnZhcilyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpJiYxPT10Lmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiB0WzBdKXJldHVybiBlKHRbMF0pO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBncm91cE5hbWUgYXJndW1lbnQiKX19O3ZhciB0LGk9bCgiLi92YXIiKSxvPSh0PWkpJiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fTtlLl9fY3Jvc3N0YWxrX2dyb3Vwcz1lLl9fY3Jvc3N0YWxrX2dyb3Vwc3x8e307dmFyIHU9ZS5fX2Nyb3NzdGFsa19ncm91cHM7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMubmFtZT1lLHRoaXMuX3ZhcnM9e319cmV0dXJuIG4odCxbe2tleToidmFyIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YXIgbmFtZSIpO3JldHVybiB0aGlzLl92YXJzLmhhc093blByb3BlcnR5KGUpfHwodGhpcy5fdmFyc1tlXT1uZXcgby5kZWZhdWx0KHRoaXMsZSkpLHRoaXMuX3ZhcnNbZV19fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhciBuYW1lIik7cmV0dXJuIHRoaXMuX3ZhcnMuaGFzT3duUHJvcGVydHkoZSl9fV0pLHR9KCl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi92YXIiOjEyfV0sNTpbZnVuY3Rpb24oZixlLGMpeyhmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0LG49ZigiLi9ncm91cCIpLHI9KHQ9bikmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9LGk9ZigiLi9zZWxlY3Rpb24iKSxvPWYoIi4vZmlsdGVyIiksdT1mKCIuL2lucHV0Iik7ZigiLi9pbnB1dF9zZWxlY3RpemUiKSxmKCIuL2lucHV0X2NoZWNrYm94Z3JvdXAiKSxmKCIuL2lucHV0X3NsaWRlciIpO3ZhciBhPSgwLHIuZGVmYXVsdCkoImRlZmF1bHQiKTtmdW5jdGlvbiBsKGUpe3JldHVybiBhLnZhcihlKX1lLlNoaW55JiZlLlNoaW55LmFkZEN1c3RvbU1lc3NhZ2VIYW5kbGVyKCJ1cGRhdGUtY2xpZW50LXZhbHVlIixmdW5jdGlvbihlKXsic3RyaW5nIj09dHlwZW9mIGUuZ3JvdXA/KDAsci5kZWZhdWx0KShlLmdyb3VwKS52YXIoZS5uYW1lKS5zZXQoZS52YWx1ZSk6bChlLm5hbWUpLnNldChlLnZhbHVlKX0pO3ZhciBzPXtncm91cDpyLmRlZmF1bHQsdmFyOmwsaGFzOmZ1bmN0aW9uKGUpe3JldHVybiBhLmhhcyhlKX0sU2VsZWN0aW9uSGFuZGxlOmkuU2VsZWN0aW9uSGFuZGxlLEZpbHRlckhhbmRsZTpvLkZpbHRlckhhbmRsZSxiaW5kOnUuYmluZH07Yy5kZWZhdWx0PXMsZS5jcm9zc3RhbGs9c30pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2ZpbHRlciI6MiwiLi9ncm91cCI6NCwiLi9pbnB1dCI6NiwiLi9pbnB1dF9jaGVja2JveGdyb3VwIjo3LCIuL2lucHV0X3NlbGVjdGl6ZSI6OCwiLi9pbnB1dF9zbGlkZXIiOjksIi4vc2VsZWN0aW9uIjoxMH1dLDY6W2Z1bmN0aW9uKGUsdCxhKXsoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxhLnJlZ2lzdGVyPWZ1bmN0aW9uKGUpe3JbZS5jbGFzc05hbWVdPWUsdC5kb2N1bWVudCYmImNvbXBsZXRlIiE9PXQuZG9jdW1lbnQucmVhZHlTdGF0ZT9vKGZ1bmN0aW9uKCl7bigpfSk6dC5kb2N1bWVudCYmc2V0VGltZW91dChuLDEwMCl9LGEuYmluZD1uO3ZhciBvPXQualF1ZXJ5LHI9e307ZnVuY3Rpb24gbigpe09iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49cltlXTtvKCIuIituLmNsYXNzTmFtZSkubm90KCIuY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikuZWFjaChmdW5jdGlvbihlLHQpe2kobix0KX0pfSl9ZnVuY3Rpb24gaShlLHQpe3ZhciBuPW8odCkuZmluZCgic2NyaXB0W3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXVtkYXRhLWZvcj0nIit0LmlkLnJlcGxhY2UoLyhbISIjJCUmJygpKissLi86Ozw9Pj9AW1xcXF1eYHt8fX5dKS9nLCJcXCQxIikrIiddIikscj1KU09OLnBhcnNlKG5bMF0uaW5uZXJUZXh0KSxpPWUuZmFjdG9yeSh0LHIpO28odCkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIixpKSxvKHQpLmFkZENsYXNzKCJjcm9zc3RhbGstaW5wdXQtYm91bmQiKX1pZih0LlNoaW55KXt2YXIgZT1uZXcgdC5TaGlueS5JbnB1dEJpbmRpbmcsdT10LmpRdWVyeTt1LmV4dGVuZChlLHtmaW5kOmZ1bmN0aW9uKGUpe3JldHVybiB1KGUpLmZpbmQoIi5jcm9zc3RhbGstaW5wdXQiKX0saW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt2YXIgdCxuO3UoZSkuaGFzQ2xhc3MoImNyb3NzdGFsay1pbnB1dC1ib3VuZCIpfHwobj1vKHQ9ZSksT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihlKXtuLmhhc0NsYXNzKGUpJiYhbi5oYXNDbGFzcygiY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikmJmkocltlXSx0KX0pKX0sZ2V0SWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9LGdldFZhbHVlOmZ1bmN0aW9uKGUpe30sc2V0VmFsdWU6ZnVuY3Rpb24oZSx0KXt9LHJlY2VpdmVNZXNzYWdlOmZ1bmN0aW9uKGUsdCl7fSxzdWJzY3JpYmU6ZnVuY3Rpb24oZSx0KXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnJlc3VtZSgpfSx1bnN1YnNjcmliZTpmdW5jdGlvbihlKXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnN1c3BlbmQoKX19KSx0LlNoaW55LmlucHV0QmluZGluZ3MucmVnaXN0ZXIoZSwiY3Jvc3N0YWxrLmlucHV0QmluZGluZyIpfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDc6W2Z1bmN0aW9uKHIsZSx0KXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShyKCIuL2lucHV0IikpLG49cigiLi9maWx0ZXIiKTt2YXIgYT1lLmpRdWVyeTt0LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1jaGVja2JveGdyb3VwIixmYWN0b3J5OmZ1bmN0aW9uKGUscil7dmFyIGk9bmV3IG4uRmlsdGVySGFuZGxlKHIuZ3JvdXApLG89dm9pZCAwLHU9YShlKTtyZXR1cm4gdS5vbigiY2hhbmdlIiwiaW5wdXRbdHlwZT0nY2hlY2tib3gnXSIsZnVuY3Rpb24oKXt2YXIgZT11LmZpbmQoImlucHV0W3R5cGU9J2NoZWNrYm94J106Y2hlY2tlZCIpO2lmKDA9PT1lLmxlbmd0aClvPW51bGwsaS5jbGVhcigpO2Vsc2V7dmFyIHQ9e307ZS5lYWNoKGZ1bmN0aW9uKCl7ci5tYXBbdGhpcy52YWx1ZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLnNvcnQoKSxvPW4saS5zZXQobil9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXtpLmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe28mJmkuc2V0KG8pfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjZ9XSw4OltmdW5jdGlvbihyLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1uKHIoIi4vaW5wdXQiKSksbD1uKHIoIi4vdXRpbCIpKSxzPXIoIi4vZmlsdGVyIik7ZnVuY3Rpb24gbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9dmFyIGY9ZS5qUXVlcnk7dC5yZWdpc3Rlcih7Y2xhc3NOYW1lOiJjcm9zc3RhbGstaW5wdXQtc2VsZWN0IixmYWN0b3J5OmZ1bmN0aW9uKGUsbil7dmFyIHQ9bC5kYXRhZnJhbWVUb0QzKG4uaXRlbXMpLHI9e29wdGlvbnM6W3t2YWx1ZToiIixsYWJlbDoiKEFsbCkifV0uY29uY2F0KHQpLHZhbHVlRmllbGQ6InZhbHVlIixsYWJlbEZpZWxkOiJsYWJlbCIsc2VhcmNoRmllbGQ6ImxhYmVsIn0saT1mKGUpLmZpbmQoInNlbGVjdCIpWzBdLG89ZihpKS5zZWxlY3RpemUocilbMF0uc2VsZWN0aXplLHU9bmV3IHMuRmlsdGVySGFuZGxlKG4uZ3JvdXApLGE9dm9pZCAwO3JldHVybiBvLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7aWYoMD09PW8uaXRlbXMubGVuZ3RoKWE9bnVsbCx1LmNsZWFyKCk7ZWxzZXt2YXIgdD17fTtvLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oZSl7bi5tYXBbZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgZT1PYmplY3Qua2V5cyh0KTtlLnNvcnQoKSxhPWUsdS5zZXQoZSl9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXt1LmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe2EmJnUuc2V0KGEpfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjYsIi4vdXRpbCI6MTF9XSw5OltmdW5jdGlvbihuLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1mdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGU7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj1bXSxyPSEwLGk9ITEsbz12b2lkIDA7dHJ5e2Zvcih2YXIgdSxhPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0odT1hLm5leHQoKSkuZG9uZSkmJihuLnB1c2godS52YWx1ZSksIXR8fG4ubGVuZ3RoIT09dCk7cj0hMCk7fWNhdGNoKGUpe2k9ITAsbz1lfWZpbmFsbHl7dHJ5eyFyJiZhLnJldHVybiYmYS5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgb319cmV0dXJuIG59KGUsdCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSx0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShuKCIuL2lucHV0IikpLGE9bigiLi9maWx0ZXIiKTt2YXIgdj1lLmpRdWVyeSxwPWUuc3RyZnRpbWU7ZnVuY3Rpb24geShlLHQpe2Zvcih2YXIgbj1lLnRvU3RyaW5nKCk7bi5sZW5ndGg8dDspbj0iMCIrbjtyZXR1cm4gbn10LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zbGlkZXIiLGZhY3Rvcnk6ZnVuY3Rpb24oZSxsKXt2YXIgcz1uZXcgYS5GaWx0ZXJIYW5kbGUobC5ncm91cCksdD17fSxmPXYoZSkuZmluZCgiaW5wdXQiKSxuPWYuZGF0YSgiZGF0YS10eXBlIikscj1mLmRhdGEoInRpbWUtZm9ybWF0IiksaT1mLmRhdGEoInJvdW5kIiksbz12b2lkIDA7aWYoImRhdGUiPT09bilvPXAudXRjKCksdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX07ZWxzZSBpZigiZGF0ZXRpbWUiPT09bil7dmFyIHU9Zi5kYXRhKCJ0aW1lem9uZSIpO289dT9wLnRpbWV6b25lKHUpOnAsdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX19ZWxzZSJudW1iZXIiPT09biYmdm9pZCAwIT09aSYmKHQucHJldHRpZnk9ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5wb3coMTAsaSk7cmV0dXJuIE1hdGgucm91bmQoZSp0KS90fSk7ZnVuY3Rpb24gYygpe3ZhciBlPWYuZGF0YSgiaW9uUmFuZ2VTbGlkZXIiKS5yZXN1bHQsdD12b2lkIDAsbj1mLmRhdGEoImRhdGEtdHlwZSIpO3JldHVybiB0PSJkYXRlIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuKHQ9bmV3IERhdGUoK2UpKWluc3RhbmNlb2YgRGF0ZT90LmdldFVUQ0Z1bGxZZWFyKCkrIi0iK3kodC5nZXRVVENNb250aCgpKzEsMikrIi0iK3kodC5nZXRVVENEYXRlKCksMik6bnVsbDt2YXIgdH06ImRhdGV0aW1lIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuK2UvMWUzfTpmdW5jdGlvbihlKXtyZXR1cm4rZX0sImRvdWJsZSI9PT1mLmRhdGEoImlvblJhbmdlU2xpZGVyIikub3B0aW9ucy50eXBlP1t0KGUuZnJvbSksdChlLnRvKV06dChlLmZyb20pfWYuaW9uUmFuZ2VTbGlkZXIodCk7dmFyIGg9bnVsbDtyZXR1cm4gZi5vbigiY2hhbmdlLmNyb3NzdGFsa1NsaWRlcklucHV0IixmdW5jdGlvbihlKXtpZighZi5kYXRhKCJ1cGRhdGluZyIpJiYhZi5kYXRhKCJhbmltYXRpbmciKSl7Zm9yKHZhciB0PWMoKSxuPWQodCwyKSxyPW5bMF0saT1uWzFdLG89W10sdT0wO3U8bC52YWx1ZXMubGVuZ3RoO3UrKyl7dmFyIGE9bC52YWx1ZXNbdV07cjw9YSYmYTw9aSYmby5wdXNoKGwua2V5c1t1XSl9by5zb3J0KCkscy5zZXQobyksaD1vfX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7cy5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtoJiZzLnNldChoKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sMTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uU2VsZWN0aW9uSGFuZGxlPXZvaWQgMDt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxpPWEoZSgiLi9ldmVudHMiKSksbz1hKGUoIi4vZ3JvdXAiKSksdT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fW4uU2VsZWN0aW9uSGFuZGxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBlPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IHUuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX3Zhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPXUuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5zZXRHcm91cChlKX1yZXR1cm4gcihuLFt7a2V5OiJzZXRHcm91cCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLl9ncm91cCE9PWUmJih0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl92YXImJih0aGlzLl92YXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLl92YXI9bnVsbCx0aGlzLl92YXJPbkNoYW5nZVN1Yj1udWxsKSx0aGlzLl9ncm91cD1lKSl7dGhpcy5fdmFyPSgwLG8uZGVmYXVsdCkoZSkudmFyKCJzZWxlY3Rpb24iKTt2YXIgbj10aGlzLl92YXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7dC5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUsdCl9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1ufX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHUuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl92YXImJnRoaXMuX3Zhci5zZXQoZSx0aGlzLl9tZXJnZUV4dHJhSW5mbyh0KSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fdmFyJiZ0aGlzLnNldCh2b2lkIDAsdGhpcy5fbWVyZ2VFeHRyYUluZm8oZSkpfX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2VtaXR0ZXIub24oZSx0KX19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vZmYoZSx0KX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5zZXRHcm91cChudWxsKX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFyP3RoaXMuX3Zhci5nZXQoKTpudWxsfX1dKSxufSgpfSx7Ii4vZXZlbnRzIjoxLCIuL2dyb3VwIjo0LCIuL3V0aWwiOjExfV0sMTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9O2Z1bmN0aW9uIHUoZSl7Zm9yKHZhciB0PTE7dDxlLmxlbmd0aDt0KyspaWYoZVt0XTw9ZVt0LTFdKXRocm93IG5ldyBFcnJvcigiTGlzdCBpcyBub3Qgc29ydGVkIG9yIGNvbnRhaW5zIGR1cGxpY2F0ZSIpfW4uZXh0ZW5kPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoMTx0P3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO2lmKG51bGwhPW8pZm9yKHZhciB1IGluIG8pby5oYXNPd25Qcm9wZXJ0eSh1KSYmKGVbdV09b1t1XSl9cmV0dXJuIGV9LG4uY2hlY2tTb3J0ZWQ9dSxuLmRpZmZTb3J0ZWRMaXN0cz1mdW5jdGlvbihlLHQpe3ZhciBuPTAscj0wO2V8fChlPVtdKTt0fHwodD1bXSk7dmFyIGk9W10sbz1bXTt1KGUpLHUodCk7Zm9yKDtuPGUubGVuZ3RoJiZyPHQubGVuZ3RoOyllW25dPT09dFtyXT8obisrLHIrKyk6ZVtuXTx0W3JdP2kucHVzaChlW24rK10pOm8ucHVzaCh0W3IrK10pO248ZS5sZW5ndGgmJihpPWkuY29uY2F0KGUuc2xpY2UobikpKTtyPHQubGVuZ3RoJiYobz1vLmNvbmNhdCh0LnNsaWNlKHIpKSk7cmV0dXJue3JlbW92ZWQ6aSxhZGRlZDpvfX0sbi5kYXRhZnJhbWVUb0QzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49dm9pZCAwO2Zvcih2YXIgciBpbiBlKXtpZihlLmhhc093blByb3BlcnR5KHIpJiZ0LnB1c2gociksIm9iamVjdCIhPT1sKGVbcl0pfHx2b2lkIDA9PT1lW3JdLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMiKTtpZih2b2lkIDAhPT1uJiZuIT09ZVtyXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpO249ZVtyXS5sZW5ndGh9Zm9yKHZhciBpPVtdLG89dm9pZCAwLHU9MDt1PG47dSsrKXtvPXt9O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKW9bdFthXV09ZVt0W2FdXVt1XTtpLnB1c2gobyl9cmV0dXJuIGl9O24uU3Vic2NyaXB0aW9uVHJhY2tlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5fZW1pdHRlcj1lLHRoaXMuX3N1YnM9e319cmV0dXJuIHIodCxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZW1pdHRlci5vbihlLHQpO3JldHVybiB0aGlzLl9zdWJzW25dPWUsbn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9lbWl0dGVyLm9mZihlLHQpO3JldHVybiBuJiZkZWxldGUgdGhpcy5fc3Vic1tuXSxufX0se2tleToicmVtb3ZlQWxsTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj10aGlzLl9zdWJzO3RoaXMuX3N1YnM9e30sT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihlKXt0Ll9lbWl0dGVyLm9mZihuW2VdLGUpfSl9fV0pLHR9KCl9LHt9XSwxMjpbZnVuY3Rpb24oYSxlLGwpeyhmdW5jdGlvbihvKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlLHU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCksbj1hKCIuL2V2ZW50cyIpLGk9KGU9bikmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9O3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsciksdGhpcy5fZ3JvdXA9ZSx0aGlzLl9uYW1lPXQsdGhpcy5fdmFsdWU9bix0aGlzLl9ldmVudHM9bmV3IGkuZGVmYXVsdH1yZXR1cm4gdChyLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKHRoaXMuX3ZhbHVlIT09ZSl7dmFyIG49dGhpcy5fdmFsdWU7dGhpcy5fdmFsdWU9ZTt2YXIgcj17fTtpZih0JiYib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnUodCkpKWZvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihyW2ldPXRbaV0pO3Iub2xkVmFsdWU9bixyLnZhbHVlPWUsdGhpcy5fZXZlbnRzLnRyaWdnZXIoImNoYW5nZSIscix0aGlzKSxvLlNoaW55JiZvLlNoaW55Lm9uSW5wdXRDaGFuZ2UmJm8uU2hpbnkub25JbnB1dENoYW5nZSgiLmNsaWVudFZhbHVlLSIrKG51bGwhPT10aGlzLl9ncm91cC5uYW1lP3RoaXMuX2dyb3VwLm5hbWUrIi0iOiIiKSt0aGlzLl9uYW1lLHZvaWQgMD09PWU/bnVsbDplKX19fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZXZlbnRzLm9uKGUsdCl9fSx7a2V5OiJvZmYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2V2ZW50cy5vZmYoZSx0KX19XSkscn0oKTtsLmRlZmF1bHQ9cn0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2V2ZW50cyI6MX1dfSx7fSxbNV0pOwovLyMgc291cmNlTWFwcGluZ1VSTD1jcm9zc3RhbGsubWluLmpzLm1hcA=="></script>
<script src="data:application/javascript;base64,CkhUTUxXaWRnZXRzLndpZGdldCh7CiAgbmFtZTogInBsb3RseSIsCiAgdHlwZTogIm91dHB1dCIsCgogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICByZXR1cm4ge307CiAgfSwKCiAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgIGlmIChpbnN0YW5jZS5hdXRvc2l6ZSkgewogICAgICB2YXIgd2lkdGggPSBpbnN0YW5jZS53aWR0aCB8fCB3aWR0aDsKICAgICAgdmFyIGhlaWdodCA9IGluc3RhbmNlLmhlaWdodCB8fCBoZWlnaHQ7CiAgICAgIFBsb3RseS5yZWxheW91dChlbC5pZCwge3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgIH0KICB9LCAgCiAgCiAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgCiAgICAvLyBQbG90bHkucmVsYXlvdXQoKSBtdXRhdGVzIHRoZSBwbG90IGlucHV0IG9iamVjdCwgc28gbWFrZSBzdXJlIHRvIAogICAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdXNlci1zdXBwbGllZCB3aWR0aC9oZWlnaHQgKmJlZm9yZSoKICAgIC8vIHdlIGNhbGwgUGxvdGx5LnBsb3QoKTsKICAgIHZhciBsYXkgPSB4LmxheW91dCB8fCB7fTsKICAgIGluc3RhbmNlLndpZHRoID0gbGF5LndpZHRoOwogICAgaW5zdGFuY2UuaGVpZ2h0ID0gbGF5LmhlaWdodDsKICAgIGluc3RhbmNlLmF1dG9zaXplID0gbGF5LmF1dG9zaXplIHx8IHRydWU7CiAgICAKICAgIC8qIAogICAgLyAnaW5mb3JtIHRoZSB3b3JsZCcgYWJvdXQgaGlnaGxpZ2h0aW5nIG9wdGlvbnMgdGhpcyBpcyBzbyBvdGhlcgogICAgLyBjcm9zc3RhbGsgbGlicmFyaWVzIGhhdmUgYSBjaGFuY2UgdG8gcmVzcG9uZCB0byBzcGVjaWFsIHNldHRpbmdzIAogICAgLyBzdWNoIGFzIHBlcnNpc3RlbnQgc2VsZWN0aW9uLiAKICAgIC8gQUZBSUssIGxlYWZsZXQgaXMgdGhlIG9ubHkgbGlicmFyeSB3aXRoIHN1Y2ggaW50ZXJncmF0aW9uCiAgICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL2xlYWZsZXQvcHVsbC8zNDYvZmlsZXMjZGlmZi1hZDBjMmQ1MWNlNWZkZjhjOTBjNzM5NWIxMDJmNDI2NVIxNTQKICAgICovCiAgICB2YXIgY3RDb25maWcgPSBjcm9zc3RhbGsudmFyKCdwbG90bHlDcm9zc3RhbGtPcHRzJykuc2V0KHguaGlnaGxpZ2h0KTsKICAgICAgCiAgICBpZiAodHlwZW9mKHdpbmRvdykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIC8vIG1ha2Ugc3VyZSBwbG90cyBkb24ndCBnZXQgY3JlYXRlZCBvdXRzaWRlIHRoZSBuZXR3b3JrIChmb3Igb24tcHJlbSkKICAgICAgd2luZG93LlBMT1RMWUVOViA9IHdpbmRvdy5QTE9UTFlFTlYgfHwge307CiAgICAgIHdpbmRvdy5QTE9UTFlFTlYuQkFTRV9VUkwgPSB4LmJhc2VfdXJsOwogICAgICAKICAgICAgLy8gRW5hYmxlIHBlcnNpc3RlbnQgc2VsZWN0aW9uIHdoZW4gc2hpZnQga2V5IGlzIGRvd24KICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTgyODYxMy9jaGVjay1pZi1hLWtleS1pcy1kb3duCiAgICAgIHZhciBwZXJzaXN0T25TaGlmdCA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoIWUpIHdpbmRvdy5ldmVudDsKICAgICAgICBpZiAoZS5zaGlmdEtleSkgeyAKICAgICAgICAgIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnQgPSB0cnVlOyAKICAgICAgICAgIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnRTaGlmdCA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnQgPSBmYWxzZTsgCiAgICAgICAgICB4LmhpZ2hsaWdodC5wZXJzaXN0ZW50U2hpZnQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIAogICAgICAvLyBPbmx5IHJlbGV2YW50IGlmIHdlIGhhdmVuJ3QgZm9yY2VkIHBlcnNpc3RlbnQgbW9kZSBhdCBjb21tYW5kIGxpbmUKICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50KSB7CiAgICAgICAgd2luZG93Lm9ubW91c2Vtb3ZlID0gcGVyc2lzdE9uU2hpZnQ7CiAgICAgIH0KICAgIH0KCiAgICB2YXIgZ3JhcGhEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbC5pZCk7CiAgICAKICAgIC8vIFRPRE86IG1vdmUgdGhlIGNvbnRyb2wgcGFuZWwgaW5qZWN0aW9uIHN0cmF0ZWd5IGluc2lkZSBoZXJlLi4uCiAgICBIVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlcihmdW5jdGlvbigpIHsKICAgICAgCiAgICAgIC8vIGxvd2VyIHRoZSB6LWluZGV4IG9mIHRoZSBtb2RlYmFyIHRvIHByZXZlbnQgaXQgZnJvbSBoaWdoamFja2luZyBob3ZlcgogICAgICAvLyAoVE9ETzogZG8gdGhpcyB2aWEgQ1NTPykKICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JvcGVuc2NpL3Bsb3RseS9pc3N1ZXMvOTU2CiAgICAgIC8vIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvcHJvcF9zdHlsZV96aW5kZXguYXNwCiAgICAgIHZhciBtb2RlYmFycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5qcy1wbG90bHktcGxvdCAucGxvdGx5IC5tb2RlYmFyIik7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZWJhcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBtb2RlYmFyc1tpXS5zdHlsZS56SW5kZXggPSAxOwogICAgICB9CiAgICB9KTsKICAgICAgCiAgICAgIC8vIGluamVjdCBhICJjb250cm9sIHBhbmVsIiBob2xkaW5nIHNlbGVjdGl6ZS9keW5hbWljIGNvbG9yIHdpZGdldChzKQogICAgaWYgKHguc2VsZWN0aXplIHx8IHguaGlnaGxpZ2h0LmR5bmFtaWMgJiYgIWluc3RhbmNlLnBsb3RseSkgewogICAgICB2YXIgZmxleCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBmbGV4LmNsYXNzID0gInBsb3RseS1jcm9zc3RhbGstY29udHJvbC1wYW5lbCI7CiAgICAgIGZsZXguc3R5bGUgPSAiZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwIjsKICAgICAgCiAgICAgIC8vIGluamVjdCB0aGUgY29sb3VycGlja2VyIEhUTUwgY29udGFpbmVyIGludG8gdGhlIGZsZXhib3gKICAgICAgaWYgKHguaGlnaGxpZ2h0LmR5bmFtaWMpIHsKICAgICAgICB2YXIgcGlja2VyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgCiAgICAgICAgdmFyIHBpY2tlcklucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgICAgICBwaWNrZXJJbnB1dC5pZCA9IGVsLmlkICsgIi1jb2xvdXJwaWNrZXIiOwogICAgICAgIHBpY2tlcklucHV0LnBsYWNlaG9sZGVyID0gImFzZGFzZCI7CiAgICAgICAgCiAgICAgICAgdmFyIHBpY2tlckxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTsKICAgICAgICBwaWNrZXJMYWJlbC5mb3IgPSBwaWNrZXJJbnB1dC5pZDsKICAgICAgICBwaWNrZXJMYWJlbC5pbm5lckhUTUwgPSAiQnJ1c2ggY29sb3ImbmJzcDsmbmJzcDsiOwogICAgICAgIAogICAgICAgIHBpY2tlckRpdi5hcHBlbmRDaGlsZChwaWNrZXJMYWJlbCk7CiAgICAgICAgcGlja2VyRGl2LmFwcGVuZENoaWxkKHBpY2tlcklucHV0KTsKICAgICAgICBmbGV4LmFwcGVuZENoaWxkKHBpY2tlckRpdik7CiAgICAgIH0KICAgICAgCiAgICAgIC8vIGluamVjdCBzZWxlY3RpemUgSFRNTCBjb250YWluZXJzIChvbmUgZm9yIGV2ZXJ5IGNyb3NzdGFsayBncm91cCkKICAgICAgaWYgKHguc2VsZWN0aXplKSB7CiAgICAgICAgdmFyIGlkcyA9IE9iamVjdC5rZXlzKHguc2VsZWN0aXplKTsKICAgICAgICAKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgY29udGFpbmVyLmlkID0gaWRzW2ldOwogICAgICAgICAgY29udGFpbmVyLnN0eWxlID0gIndpZHRoOiA4MCU7IGhlaWdodDogMTAlIjsKICAgICAgICAgIGNvbnRhaW5lci5jbGFzcyA9ICJmb3JtLWdyb3VwIGNyb3NzdGFsay1pbnB1dC1wbG90bHktaGlnaGxpZ2h0IjsKICAgICAgICAgIAogICAgICAgICAgdmFyIGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTsKICAgICAgICAgIGxhYmVsLmZvciA9IGlkc1tpXTsKICAgICAgICAgIGxhYmVsLmlubmVySFRNTCA9IHguc2VsZWN0aXplW2lkc1tpXV0uZ3JvdXA7CiAgICAgICAgICBsYWJlbC5jbGFzcyA9ICJjb250cm9sLWxhYmVsIjsKICAgICAgICAgIAogICAgICAgICAgdmFyIHNlbGVjdERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgdmFyIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwogICAgICAgICAgc2VsZWN0Lm11bHRpcGxlID0gdHJ1ZTsKICAgICAgICAgIAogICAgICAgICAgc2VsZWN0RGl2LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobGFiZWwpOwogICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGVjdERpdik7CiAgICAgICAgICBmbGV4LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICAvLyBmaW5hbGx5LCBpbnNlcnQgdGhlIGZsZXhib3ggaW5zaWRlIHRoZSBodG1sd2lkZ2V0IGNvbnRhaW5lciwKICAgICAgLy8gYnV0IGJlZm9yZSB0aGUgcGxvdGx5IGdyYXBoIGRpdgogICAgICBncmFwaERpdi5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShmbGV4LCBncmFwaERpdik7CiAgICAgIAogICAgICBpZiAoeC5oaWdobGlnaHQuZHluYW1pYykgewogICAgICAgIHZhciBwaWNrZXIgPSAkKCIjIiArIHBpY2tlcklucHV0LmlkKTsKICAgICAgICB2YXIgY29sb3JzID0geC5oaWdobGlnaHQuY29sb3IgfHwgW107CiAgICAgICAgLy8gVE9ETzogbGV0IHVzZXJzIHNwZWNpZnkgb3B0aW9ucz8KICAgICAgICB2YXIgb3B0cyA9IHsKICAgICAgICAgIHZhbHVlOiBjb2xvcnNbMF0sCiAgICAgICAgICBzaG93Q29sb3VyOiAiYm90aCIsCiAgICAgICAgICBwYWxldHRlOiAibGltaXRlZCIsCiAgICAgICAgICBhbGxvd2VkQ29sczogY29sb3JzLmpvaW4oIiAiKSwKICAgICAgICAgIHdpZHRoOiAiMjAlIiwKICAgICAgICAgIGhlaWdodDogIjEwJSIKICAgICAgICB9OwogICAgICAgIHBpY2tlci5jb2xvdXJwaWNrZXIoe2NoYW5nZURlbGF5OiAwfSk7CiAgICAgICAgcGlja2VyLmNvbG91cnBpY2tlcigic2V0dGluZ3MiLCBvcHRzKTsKICAgICAgICBwaWNrZXIuY29sb3VycGlja2VyKCJ2YWx1ZSIsIG9wdHMudmFsdWUpOwogICAgICAgIC8vIGluZm9ybSBjcm9zc3RhbGsgYWJvdXQgYSBjaGFuZ2UgaW4gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGNvbG91cgogICAgICAgIHZhciBncnBzID0geC5oaWdobGlnaHQuY3RHcm91cHMgfHwgW107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncnBzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBjcm9zc3RhbGsuZ3JvdXAoZ3Jwc1tpXSkudmFyKCdwbG90bHlTZWxlY3Rpb25Db2xvdXInKQogICAgICAgICAgICAuc2V0KHBpY2tlci5jb2xvdXJwaWNrZXIoJ3ZhbHVlJykpOwogICAgICAgIH0KICAgICAgICBwaWNrZXIub24oImNoYW5nZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncnBzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNyb3NzdGFsay5ncm91cChncnBzW2ldKS52YXIoJ3Bsb3RseVNlbGVjdGlvbkNvbG91cicpCiAgICAgICAgICAgICAgLnNldChwaWNrZXIuY29sb3VycGlja2VyKCd2YWx1ZScpKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgCiAgICAvLyBpZiBubyBwbG90IGV4aXN0cyB5ZXQsIGNyZWF0ZSBvbmUgd2l0aCBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbgogICAgaWYgKCFpbnN0YW5jZS5wbG90bHkpIHsKICAgICAgCiAgICAgIHZhciBwbG90ID0gUGxvdGx5LnBsb3QoZ3JhcGhEaXYsIHgpOwogICAgICBpbnN0YW5jZS5wbG90bHkgPSB0cnVlOwogICAgICAKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICAvLyB0aGlzIGlzIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gUGxvdGx5Lm5ld1Bsb3QoKSwgYnV0IGF2b2lkcyBjcmVhdGluZyAKICAgICAgLy8gYSBuZXcgd2ViZ2wgY29udGV4dAogICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9ibG9iLzJiMjRmOWRlZjkwMTgzMWU2MTI4MjA3NmNmM2Y4MzU1OThkNTZmMGUvc3JjL3Bsb3RfYXBpL3Bsb3RfYXBpLmpzI0w1MzEtTDUzMgoKICAgICAgLy8gVE9ETzogcmVzdG9yZSBjcm9zc3RhbGsgc2VsZWN0aW9ucz8KICAgICAgUGxvdGx5LnB1cmdlKGdyYXBoRGl2KTsKICAgICAgLy8gVE9ETzogd2h5IGlzIHRoaXMgbmVjZXNzYXJ5IHRvIGdldCBjcm9zc3RhbGsgd29ya2luZz8KICAgICAgZ3JhcGhEaXYuZGF0YSA9IHVuZGVmaW5lZDsKICAgICAgZ3JhcGhEaXYubGF5b3V0ID0gdW5kZWZpbmVkOwogICAgICB2YXIgcGxvdCA9IFBsb3RseS5wbG90KGdyYXBoRGl2LCB4KTsKICAgIH0KICAgIAogICAgLy8gVHJpZ2dlciBwbG90bHkuanMgY2FsbHMgZGVmaW5lZCB2aWEgYHBsb3RseVByb3h5KClgCiAgICBwbG90LnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHsKICAgICAgICBTaGlueS5hZGRDdXN0b21NZXNzYWdlSGFuZGxlcigicGxvdGx5LWNhbGxzIiwgZnVuY3Rpb24obXNnKSB7CiAgICAgICAgICB2YXIgZ2QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtc2cuaWQpOwogICAgICAgICAgaWYgKCFnZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGZpbmQgcGxvdGx5IGdyYXBoIHdpdGggaWQ6ICIgKyBtc2cuaWQpOwogICAgICAgICAgfQogICAgICAgICAgLy8gVGhpcyBpc24ndCBhbiBvZmZpY2lhbCBwbG90bHkuanMgbWV0aG9kLCBidXQgaXQncyB0aGUgb25seSBjdXJyZW50IHdheSB0byAKICAgICAgICAgIC8vIGNoYW5nZSBqdXN0IHRoZSBjb25maWd1cmF0aW9uIG9mIGEgcGxvdCAKICAgICAgICAgIC8vIGh0dHBzOi8vY29tbXVuaXR5LnBsb3QubHkvdC91cGRhdGUtY29uZmlnLWZ1bmN0aW9uLzkwNTcKICAgICAgICAgIGlmIChtc2cubWV0aG9kID09ICJyZWNvbmZpZyIpIHsKICAgICAgICAgICAgUGxvdGx5LnJlYWN0KGdkLCBnZC5kYXRhLCBnZC5sYXlvdXQsIG1zZy5hcmdzKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFQbG90bHlbbXNnLm1ldGhvZF0pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1ldGhvZCAiICsgbXNnLm1ldGhvZCk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgYXJncyA9IFtnZF0uY29uY2F0KG1zZy5hcmdzKTsKICAgICAgICAgIFBsb3RseVttc2cubWV0aG9kXS5hcHBseShudWxsLCBhcmdzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICAKICAgICAgLy8gcGxvdGx5J3MgbWFwYm94IEFQSSBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHNldHRpbmcgYm91bmRpbmcgYm94ZXMKICAgICAgLy8gaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9maXRib3VuZHMvCiAgICAgIC8vIHNvIHdlIGRvIHRoaXMgbWFudWFsbHkuLi4KICAgICAgLy8gVE9ETzogbWFrZSBzdXJlIHRoaXMgdHJpZ2dlcnMgb24gYSByZWRyYXcgYW5kIHJlbGF5b3V0IGFzIHdlbGwgYXMgb24gaW5pdGlhbCBkcmF3CiAgICAgIHZhciBtYXBib3hJRHMgPSBncmFwaERpdi5fZnVsbExheW91dC5fc3VicGxvdHMubWFwYm94IHx8IFtdOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcGJveElEcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBpZCA9IG1hcGJveElEc1tpXTsKICAgICAgICB2YXIgbWFwT3B0cyA9IHgubGF5b3V0W2lkXSB8fCB7fTsKICAgICAgICB2YXIgYXJncyA9IG1hcE9wdHMuX2ZpdEJvdW5kcyB8fCB7fTsKICAgICAgICBpZiAoIWFyZ3MpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB2YXIgbWFwT2JqID0gZ3JhcGhEaXYuX2Z1bGxMYXlvdXRbaWRdLl9zdWJwbG90Lm1hcDsKICAgICAgICBtYXBPYmouZml0Qm91bmRzKGFyZ3MuYm91bmRzLCBhcmdzLm9wdGlvbnMpOwogICAgICB9CiAgICAgIAogICAgfSk7CiAgICAKICAgIC8vIEF0dGFjaCBhdHRyaWJ1dGVzIChlLmcuLCAia2V5IiwgInoiKSB0byBwbG90bHkgZXZlbnQgZGF0YQogICAgZnVuY3Rpb24gZXZlbnREYXRhV2l0aEtleShldmVudERhdGEpIHsKICAgICAgaWYgKGV2ZW50RGF0YSA9PT0gdW5kZWZpbmVkIHx8ICFldmVudERhdGEuaGFzT3duUHJvcGVydHkoInBvaW50cyIpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIGV2ZW50RGF0YS5wb2ludHMubWFwKGZ1bmN0aW9uKHB0KSB7CiAgICAgICAgdmFyIG9iaiA9IHsKICAgICAgICAgIGN1cnZlTnVtYmVyOiBwdC5jdXJ2ZU51bWJlciwgCiAgICAgICAgICBwb2ludE51bWJlcjogcHQucG9pbnROdW1iZXIsIAogICAgICAgICAgeDogcHQueCwKICAgICAgICAgIHk6IHB0LnkKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIElmICd6JyBpcyByZXBvcnRlZCB3aXRoIHRoZSBldmVudCBkYXRhLCB0aGVuIHVzZSBpdCEKICAgICAgICBpZiAocHQuaGFzT3duUHJvcGVydHkoInoiKSkgewogICAgICAgICAgb2JqLnogPSBwdC56OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAocHQuaGFzT3duUHJvcGVydHkoImN1c3RvbWRhdGEiKSkgewogICAgICAgICAgb2JqLmN1c3RvbWRhdGEgPSBwdC5jdXN0b21kYXRhOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiAKICAgICAgICAgIFRMO0RSOiAoSSB0aGluaykgd2UgaGF2ZSB0byBzZWxlY3QgdGhlIGdyYXBoIGRpdiAoYWdhaW4pIHRvIGF0dGFjaCBrZXlzLi4uCiAgICAgICAgICAKICAgICAgICAgIFdoeT8gUmVtZW1iZXIgdGhhdCBjcm9zc3RhbGsgd2lsbCBkeW5hbWljYWxseSBhZGQvZGVsZXRlIHRyYWNlcyAKICAgICAgICAgIChzZWUgdHJhY2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24oKSBiZWxvdykKICAgICAgICAgIEZvciB0aGlzIHJlYXNvbiwgd2UgY2FuJ3Qgc2ltcGx5IGdyYWIga2V5cyBmcm9tIHguZGF0YSAobGlrZSB3ZSBkaWQgcHJldmlvdXNseSkKICAgICAgICAgIE1vcmVvdmVyLCB3ZSBjYW4ndCB1c2UgX2Z1bGxEYXRhLCBzaW5jZSB0aGF0IGRvZXNuJ3QgaW5jbHVkZSAKICAgICAgICAgIHVub2ZmaWNpYWwgYXR0cmlidXRlcy4gSXQncyB0cnVlIHRoYXQgY2xpY2svaG92ZXIgZXZlbnRzIGZpcmUgd2l0aCAKICAgICAgICAgIHB0LmRhdGEsIGJ1dCBkcmFnIGV2ZW50cyBkb24ndC4uLgogICAgICAgICovCiAgICAgICAgdmFyIGdkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWwuaWQpOwogICAgICAgIHZhciB0cmFjZSA9IGdkLmRhdGFbcHQuY3VydmVOdW1iZXJdOwogICAgICAgIAogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICB2YXIgYXR0cnNUb0F0dGFjaCA9IFsia2V5Il07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIHNpbXBsZSBrZXlzIGZpcmUgdGhlIHdob2xlIGtleQogICAgICAgICAgb2JqLmtleSA9IHRyYWNlLmtleTsKICAgICAgICAgIHZhciBhdHRyc1RvQXR0YWNoID0gW107CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnNUb0F0dGFjaC5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIGF0dHIgPSB0cmFjZVthdHRyc1RvQXR0YWNoW2ldXTsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGF0dHIpKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgcHQucG9pbnROdW1iZXIgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgb2JqW2F0dHJzVG9BdHRhY2hbaV1dID0gYXR0cltwdC5wb2ludE51bWJlcl07CiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwdC5wb2ludE51bWJlcikpIHsKICAgICAgICAgICAgICBvYmpbYXR0cnNUb0F0dGFjaFtpXV0gPSBhdHRyW3B0LnBvaW50TnVtYmVyWzBdXVtwdC5wb2ludE51bWJlclsxXV07CiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwdC5wb2ludE51bWJlcnMpKSB7CiAgICAgICAgICAgICAgb2JqW2F0dHJzVG9BdHRhY2hbaV1dID0gcHQucG9pbnROdW1iZXJzLm1hcChmdW5jdGlvbihpZHgpIHsgcmV0dXJuIGF0dHJbaWR4XTsgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9iajsKICAgICAgfSk7CiAgICB9CiAgICAKICAgIAogICAgdmFyIGxlZ2VuZEV2ZW50RGF0YSA9IGZ1bmN0aW9uKGQpIHsKICAgICAgLy8gaWYgbGVnZW5kZ3JvdXAgaXMgbm90IHJlbGV2YW50IGp1c3QgcmV0dXJuIHRoZSB0cmFjZQogICAgICB2YXIgdHJhY2UgPSBkLmRhdGFbZC5jdXJ2ZU51bWJlcl07CiAgICAgIGlmICghdHJhY2UubGVnZW5kZ3JvdXApIHJldHVybiB0cmFjZTsKICAgICAgCiAgICAgIC8vIGlmIGxlZ2VuZGdyb3VwIHdhcyBzcGVjaWZpZWQsIHJldHVybiBhbGwgdHJhY2VzIHRoYXQgbWF0Y2ggdGhlIGdyb3VwCiAgICAgIHZhciBsZWdlbmRncnBzID0gZC5kYXRhLm1hcChmdW5jdGlvbih0cmFjZSl7IHJldHVybiB0cmFjZS5sZWdlbmRncm91cDsgfSk7CiAgICAgIHZhciB0cmFjZXMgPSBbXTsKICAgICAgZm9yIChpID0gMDsgaSA8IGxlZ2VuZGdycHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAobGVnZW5kZ3Jwc1tpXSA9PSB0cmFjZS5sZWdlbmRncm91cCkgewogICAgICAgICAgdHJhY2VzLnB1c2goZC5kYXRhW2ldKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiB0cmFjZXM7CiAgICB9OwoKICAgIAogICAgLy8gc2VuZCB1c2VyIGlucHV0IGV2ZW50IGRhdGEgdG8gc2hpbnkKICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUgJiYgU2hpbnkuc2V0SW5wdXRWYWx1ZSkgewogICAgICAKICAgICAgLy8gU29tZSBldmVudHMgY2xlYXIgb3RoZXIgaW5wdXQgdmFsdWVzCiAgICAgIC8vIFRPRE86IGFsd2F5cyByZWdpc3RlciB0aGVzZT8KICAgICAgdmFyIGV2ZW50Q2xlYXJNYXAgPSB7CiAgICAgICAgcGxvdGx5X2Rlc2VsZWN0OiBbInBsb3RseV9zZWxlY3RlZCIsICJwbG90bHlfc2VsZWN0aW5nIiwgInBsb3RseV9icnVzaGVkIiwgInBsb3RseV9icnVzaGluZyIsICJwbG90bHlfY2xpY2siXSwKICAgICAgICBwbG90bHlfdW5ob3ZlcjogWyJwbG90bHlfaG92ZXIiXSwKICAgICAgICBwbG90bHlfZG91YmxlY2xpY2s6IFsicGxvdGx5X2NsaWNrIl0KICAgICAgfTsKICAgIAogICAgICBPYmplY3Qua2V5cyhldmVudENsZWFyTWFwKS5tYXAoZnVuY3Rpb24oZXZ0KSB7CiAgICAgICAgZ3JhcGhEaXYub24oZXZ0LCBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBpbnB1dHNUb0NsZWFyID0gZXZlbnRDbGVhck1hcFtldnRdOwogICAgICAgICAgaW5wdXRzVG9DbGVhci5tYXAoZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICAgICAgU2hpbnkuc2V0SW5wdXRWYWx1ZShpbnB1dCArICItIiArIHguc291cmNlLCBudWxsLCB7cHJpb3JpdHk6ICJldmVudCJ9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgCiAgICAgIHZhciBldmVudERhdGFGdW5jdGlvbk1hcCA9IHsKICAgICAgICBwbG90bHlfY2xpY2s6IGV2ZW50RGF0YVdpdGhLZXksCiAgICAgICAgcGxvdGx5X3N1bmJ1cnN0Y2xpY2s6IGV2ZW50RGF0YVdpdGhLZXksCiAgICAgICAgcGxvdGx5X2hvdmVyOiBldmVudERhdGFXaXRoS2V5LAogICAgICAgIHBsb3RseV91bmhvdmVyOiBldmVudERhdGFXaXRoS2V5LAogICAgICAgIC8vIElmICdwbG90bHlfc2VsZWN0ZWQnIGhhcyBhbHJlYWR5IGJlZW4gZmlyZWQsIGFuZCB5b3UgY2xpY2sKICAgICAgICAvLyBvbiB0aGUgcGxvdCBhZnRlcndhcmRzLCB0aGlzIGV2ZW50IGZpcmVzIGB1bmRlZmluZWRgPyE/CiAgICAgICAgLy8gVGhhdCBtaWdodCBiZSBjb25zaWRlcmVkIGEgcGxvdGx5LmpzIGJ1ZywgYnV0IGl0IGRvZXNuJ3QgbWFrZSAKICAgICAgICAvLyBzZW5zZSBmb3IgdGhpcyBpbnB1dCBjaGFuZ2UgdG8gb2NjdXIgaWYgYGRgIGlzIGZhbHN5IGJlY2F1c2UsCiAgICAgICAgLy8gZXZlbiBpbiB0aGUgZW1wdHkgc2VsZWN0aW9uIGNhc2UsIGBkYCBpcyB0cnV0aHkgKGFuIG9iamVjdCksCiAgICAgICAgLy8gYW5kIHRoZSAncGxvdGx5X2Rlc2VsZWN0JyBldmVudCB3aWxsIHJlc2V0IHRoaXMgaW5wdXQKICAgICAgICBwbG90bHlfc2VsZWN0ZWQ6IGZ1bmN0aW9uKGQpIHsgaWYgKGQpIHsgcmV0dXJuIGV2ZW50RGF0YVdpdGhLZXkoZCk7IH0gfSwKICAgICAgICBwbG90bHlfc2VsZWN0aW5nOiBmdW5jdGlvbihkKSB7IGlmIChkKSB7IHJldHVybiBldmVudERhdGFXaXRoS2V5KGQpOyB9IH0sCiAgICAgICAgcGxvdGx5X2JydXNoZWQ6IGZ1bmN0aW9uKGQpIHsKICAgICAgICAgIGlmIChkKSB7IHJldHVybiBkLnJhbmdlID8gZC5yYW5nZSA6IGQubGFzc29Qb2ludHM7IH0KICAgICAgICB9LAogICAgICAgIHBsb3RseV9icnVzaGluZzogZnVuY3Rpb24oZCkgewogICAgICAgICAgaWYgKGQpIHsgcmV0dXJuIGQucmFuZ2UgPyBkLnJhbmdlIDogZC5sYXNzb1BvaW50czsgfQogICAgICAgIH0sCiAgICAgICAgcGxvdGx5X2xlZ2VuZGNsaWNrOiBsZWdlbmRFdmVudERhdGEsCiAgICAgICAgcGxvdGx5X2xlZ2VuZGRvdWJsZWNsaWNrOiBsZWdlbmRFdmVudERhdGEsCiAgICAgICAgcGxvdGx5X2NsaWNrYW5ub3RhdGlvbjogZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5mdWxsQW5ub3RhdGlvbiB9CiAgICAgIH07CiAgICAgIAogICAgICB2YXIgcmVnaXN0ZXJTaGlueVZhbHVlID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICB2YXIgZXZlbnREYXRhUHJlUHJvY2Vzc29yID0gZXZlbnREYXRhRnVuY3Rpb25NYXBbZXZlbnRdIHx8IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQgPyBkIDogZWwuaWQgfTsKICAgICAgICAvLyBzb21lIGV2ZW50cyBhcmUgdW5pcXVlIHRvIHRoZSBSIHBhY2thZ2UKICAgICAgICB2YXIgcGxvdGx5SlNldmVudCA9IChldmVudCA9PSAicGxvdGx5X2JydXNoZWQiKSA/ICJwbG90bHlfc2VsZWN0ZWQiIDogKGV2ZW50ID09ICJwbG90bHlfYnJ1c2hpbmciKSA/ICJwbG90bHlfc2VsZWN0aW5nIiA6IGV2ZW50OwogICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBldmVudAogICAgICAgIGdyYXBoRGl2Lm9uKHBsb3RseUpTZXZlbnQsIGZ1bmN0aW9uKGQpIHsKICAgICAgICAgIFNoaW55LnNldElucHV0VmFsdWUoCiAgICAgICAgICAgIGV2ZW50ICsgIi0iICsgeC5zb3VyY2UsCiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGV2ZW50RGF0YVByZVByb2Nlc3NvcihkKSksCiAgICAgICAgICAgIHtwcmlvcml0eTogImV2ZW50In0KICAgICAgICAgICk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIAogICAgICB2YXIgc2hpbnlFdmVudHMgPSB4LnNoaW55RXZlbnRzIHx8IFtdOwogICAgICBzaGlueUV2ZW50cy5tYXAocmVnaXN0ZXJTaGlueVZhbHVlKTsKICAgIH0KICAgIAogICAgLy8gR2l2ZW4gYW4gYXJyYXkgb2Yge2N1cnZlTnVtYmVyOiB4LCBwb2ludE51bWJlcjogeX0gb2JqZWN0cywKICAgIC8vIHJldHVybiBhIGhhc2ggb2YgewogICAgLy8gICBzZXQxOiB7dmFsdWU6IFtrZXkxLCBrZXkyLCAuLi5dLCBfaXNTaW1wbGVLZXk6IGZhbHNlfSwgCiAgICAvLyAgIHNldDI6IHt2YWx1ZTogW2tleTMsIGtleTQsIC4uLl0sIF9pc1NpbXBsZUtleTogZmFsc2V9CiAgICAvLyB9CiAgICBmdW5jdGlvbiBwb2ludHNUb0tleXMocG9pbnRzKSB7CiAgICAgIHZhciBrZXlzQnlTZXQgPSB7fTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAKICAgICAgICB2YXIgdHJhY2UgPSBncmFwaERpdi5kYXRhW3BvaW50c1tpXS5jdXJ2ZU51bWJlcl07CiAgICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgIXRyYWNlLnNldCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIHNldCBkZWZhdWx0cyBmb3IgdGhpcyBrZXlTZXQKICAgICAgICAvLyBub3RlIHRoYXQgd2UgZG9uJ3QgdHJhY2sgdGhlIG5lc3RlZCBwcm9wZXJ0eSAoeWV0KSBzaW5jZSB3ZSBhbHdheXMgCiAgICAgICAgLy8gZW1pdCB0aGUgdW5pb24gLS0gaHR0cDovL2Nwc2lldmVydC5naXRodWIuaW8vdGFsa3MvMjAxNjEyMTJiLyMyMQogICAgICAgIGtleXNCeVNldFt0cmFjZS5zZXRdID0ga2V5c0J5U2V0W3RyYWNlLnNldF0gfHwgewogICAgICAgICAgdmFsdWU6IFtdLAogICAgICAgICAgX2lzU2ltcGxlS2V5OiB0cmFjZS5faXNTaW1wbGVLZXkKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIFVzZSBwb2ludE51bWJlciBieSBkZWZhdWx0LCBidXQgYWdncmVnYXRlZCB0cmFjZXMgc2hvdWxkIGVtaXQgcG9pbnROdW1iZXJzCiAgICAgICAgdmFyIHB0TnVtID0gcG9pbnRzW2ldLnBvaW50TnVtYmVyOwogICAgICAgIHZhciBoYXNQdE51bSA9IHR5cGVvZiBwdE51bSA9PT0gIm51bWJlciI7CiAgICAgICAgdmFyIHB0TnVtID0gaGFzUHROdW0gPyBwdE51bSA6IHBvaW50c1tpXS5wb2ludE51bWJlcnM7CiAgICAgICAgCiAgICAgICAgLy8gc2VsZWN0aW5nIGEgcG9pbnQgb2YgYSAic2ltcGxlIiB0cmFjZSBtZWFuczogc2VsZWN0IHRoZSAKICAgICAgICAvLyBlbnRpcmUga2V5IGF0dGFjaGVkIHRvIHRoaXMgdHJhY2UsIHdoaWNoIGlzIHVzZWZ1bCBmb3IsCiAgICAgICAgLy8gc2F5IGNsaWNraW5nIG9uIGEgZml0dGVkIGxpbmUgdG8gc2VsZWN0IGNvcnJlc3BvbmRpbmcgb2JzZXJ2YXRpb25zIAogICAgICAgIHZhciBrZXkgPSB0cmFjZS5faXNTaW1wbGVLZXkgPyB0cmFjZS5rZXkgOiBBcnJheS5pc0FycmF5KHB0TnVtKSA/IHB0TnVtLm1hcChmdW5jdGlvbihpZHgpIHsgcmV0dXJuIHRyYWNlLmtleVtpZHhdOyB9KSA6IHRyYWNlLmtleVtwdE51bV07CiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDg2NTAyNS9tZXJnZS1mbGF0dGVuLWFuLWFycmF5LW9mLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgdmFyIGtleUZsYXQgPSB0cmFjZS5faXNOZXN0ZWRLZXkgPyBbXS5jb25jYXQuYXBwbHkoW10sIGtleSkgOiBrZXk7CiAgICAgICAgCiAgICAgICAgLy8gVE9ETzogYmV0dGVyIHRvIG9ubHkgYWRkIG5ldyB2YWx1ZXM/CiAgICAgICAga2V5c0J5U2V0W3RyYWNlLnNldF0udmFsdWUgPSBrZXlzQnlTZXRbdHJhY2Uuc2V0XS52YWx1ZS5jb25jYXQoa2V5RmxhdCk7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiBrZXlzQnlTZXQ7CiAgICB9CiAgICAKICAgIAogICAgeC5oaWdobGlnaHQuY29sb3IgPSB4LmhpZ2hsaWdodC5jb2xvciB8fCBbXTsKICAgIC8vIG1ha2Ugc3VyZSBoaWdobGlnaHQgY29sb3IgaXMgYW4gYXJyYXkKICAgIGlmICghQXJyYXkuaXNBcnJheSh4LmhpZ2hsaWdodC5jb2xvcikpIHsKICAgICAgeC5oaWdobGlnaHQuY29sb3IgPSBbeC5oaWdobGlnaHQuY29sb3JdOwogICAgfQoKICAgIHZhciB0cmFjZU1hbmFnZXIgPSBuZXcgVHJhY2VNYW5hZ2VyKGdyYXBoRGl2LCB4LmhpZ2hsaWdodCk7CgogICAgLy8gR2F0aGVyIGFsbCAqdW5pcXVlKiBzZXRzLgogICAgdmFyIGFsbFNldHMgPSBbXTsKICAgIGZvciAodmFyIGN1cnZlSWR4ID0gMDsgY3VydmVJZHggPCB4LmRhdGEubGVuZ3RoOyBjdXJ2ZUlkeCsrKSB7CiAgICAgIHZhciBuZXdTZXQgPSB4LmRhdGFbY3VydmVJZHhdLnNldDsKICAgICAgaWYgKG5ld1NldCkgewogICAgICAgIGlmIChhbGxTZXRzLmluZGV4T2YobmV3U2V0KSA9PT0gLTEpIHsKICAgICAgICAgIGFsbFNldHMucHVzaChuZXdTZXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIHJlZ2lzdGVyIGV2ZW50IGxpc3RlbmVycyBmb3IgYWxsIHNldHMKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsU2V0cy5sZW5ndGg7IGkrKykgewogICAgICAKICAgICAgdmFyIHNldCA9IGFsbFNldHNbaV07CiAgICAgIHZhciBzZWxlY3Rpb24gPSBuZXcgY3Jvc3N0YWxrLlNlbGVjdGlvbkhhbmRsZShzZXQpOwogICAgICB2YXIgZmlsdGVyID0gbmV3IGNyb3NzdGFsay5GaWx0ZXJIYW5kbGUoc2V0KTsKICAgICAgCiAgICAgIHZhciBmaWx0ZXJDaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgcmVtb3ZlQnJ1c2goZWwpOwogICAgICAgIHRyYWNlTWFuYWdlci51cGRhdGVGaWx0ZXIoc2V0LCBlLnZhbHVlKTsKICAgICAgfTsKICAgICAgZmlsdGVyLm9uKCJjaGFuZ2UiLCBmaWx0ZXJDaGFuZ2UpOwogICAgICAKICAgICAgCiAgICAgIHZhciBzZWxlY3Rpb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgCiAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgJ3Bsb3RseV9zZWxlY3RlZCcgbm93IGZpcmluZyBwcmV2aW91c2x5IHNlbGVjdGVkCiAgICAgICAgLy8gcG9pbnRzIChpbiBhZGRpdGlvbiB0byBuZXcgb25lcykgd2hlbiBob2xkaW5nIHNoaWZ0IGtleS4gSW4gb3VyIGNhc2UsCiAgICAgICAgLy8gd2UganVzdCB3YW50IHRoZSBuZXcga2V5cyAKICAgICAgICBpZiAoeC5oaWdobGlnaHQub24gPT09ICJwbG90bHlfc2VsZWN0ZWQiICYmIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnRTaGlmdCkgewogICAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE4NzUxOC9ob3ctdG8tZ2V0LXRoZS1kaWZmZXJlbmNlLWJldHdlZW4tdHdvLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZGlmZiA9IGZ1bmN0aW9uKGEpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaSkge3JldHVybiBhLmluZGV4T2YoaSkgPCAwO30pOwogICAgICAgICAgfTsKICAgICAgICAgIGUudmFsdWUgPSBlLnZhbHVlLmRpZmYoZS5vbGRWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIGFycmF5IG9mICJldmVudCBvYmplY3RzIiB0cmFja2luZyB0aGUgc2VsZWN0aW9uIGhpc3RvcnkKICAgICAgICAvLyB0aGlzIGlzIHVzZWQgdG8gYXZvaWQgYWRkaW5nIHJlZHVuZGFudCBzZWxlY3Rpb25zCiAgICAgICAgdmFyIHNlbGVjdGlvbkhpc3RvcnkgPSBjcm9zc3RhbGsudmFyKCJwbG90bHlTZWxlY3Rpb25IaXN0b3J5IikuZ2V0KCkgfHwgW107CiAgICAgICAgCiAgICAgICAgLy8gQ29uc3RydWN0IGFuIGV2ZW50IG9iamVjdCAiZGVmaW5pbmciIHRoZSBjdXJyZW50IGV2ZW50LiAKICAgICAgICB2YXIgZXZlbnQgPSB7CiAgICAgICAgICByZWNlaXZlcklEOiB0cmFjZU1hbmFnZXIuZ2QuaWQsCiAgICAgICAgICBwbG90bHlTZWxlY3Rpb25Db2xvdXI6IGNyb3NzdGFsay5ncm91cChzZXQpLnZhcigicGxvdGx5U2VsZWN0aW9uQ29sb3VyIikuZ2V0KCkKICAgICAgICB9OwogICAgICAgIGV2ZW50W3NldF0gPSBlLnZhbHVlOwogICAgICAgIC8vIFRPRE86IGlzIHRoZXJlIGEgc21hcnRlciB3YXkgdG8gY2hlY2sgb2JqZWN0IGVxdWFsaXR5PwogICAgICAgIGlmIChzZWxlY3Rpb25IaXN0b3J5Lmxlbmd0aCA+IDApIHsKICAgICAgICAgIHZhciBldiA9IEpTT04uc3RyaW5naWZ5KGV2ZW50KTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0aW9uSGlzdG9yeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgc2VsID0gSlNPTi5zdHJpbmdpZnkoc2VsZWN0aW9uSGlzdG9yeVtpXSk7CiAgICAgICAgICAgIGlmIChzZWwgPT0gZXYpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gYWNjdW11bGF0ZSBoaXN0b3J5IGZvciBwZXJzaXN0ZW50IHNlbGVjdGlvbgogICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCkgewogICAgICAgICAgc2VsZWN0aW9uSGlzdG9yeSA9IFtldmVudF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbGVjdGlvbkhpc3RvcnkucHVzaChldmVudCk7CiAgICAgICAgfQogICAgICAgIGNyb3NzdGFsay52YXIoInBsb3RseVNlbGVjdGlvbkhpc3RvcnkiKS5zZXQoc2VsZWN0aW9uSGlzdG9yeSk7CiAgICAgICAgCiAgICAgICAgLy8gZG8gdGhlIGFjdHVhbCB1cGRhdGluZyBvZiB0cmFjZXMsIGZyYW1lcywgYW5kIHRoZSBzZWxlY3RpemUgd2lkZ2V0CiAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIGUudmFsdWUpOwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3RpemUvc2VsZWN0aXplLmpzL2Jsb2IvbWFzdGVyL2RvY3MvYXBpLm1kI21ldGhvZHNfaXRlbXMKICAgICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCB8fCBlLnZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgIHNlbGVjdGl6ZS5jbGVhcih0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbGVjdGl6ZS5hZGRJdGVtcyhlLnZhbHVlLCB0cnVlKTsKICAgICAgICAgIHNlbGVjdGl6ZS5jbG9zZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZWxlY3Rpb24ub24oImNoYW5nZSIsIHNlbGVjdGlvbkNoYW5nZSk7CiAgICAgIAogICAgICAvLyBTZXQgYSBjcm9zc3RhbGsgdmFyaWFibGUgc2VsZWN0aW9uIHZhbHVlLCB0cmlnZ2VyaW5nIGFuIHVwZGF0ZQogICAgICB2YXIgdHVybk9uID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmIChlKSB7CiAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXlzID0gcG9pbnRzVG9LZXlzKGUucG9pbnRzKTsKICAgICAgICAgIC8vIEtleXMgYXJlIGdyb3VwIG5hbWVzLCB2YWx1ZXMgYXJlIGFycmF5IG9mIHNlbGVjdGVkIGtleXMgZnJvbSBncm91cC4KICAgICAgICAgIGZvciAodmFyIHNldCBpbiBzZWxlY3RlZEtleXMpIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkS2V5cy5oYXNPd25Qcm9wZXJ0eShzZXQpKSB7CiAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldChzZWxlY3RlZEtleXNbc2V0XS52YWx1ZSwge3NlbmRlcjogZWx9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgaWYgKHguaGlnaGxpZ2h0LmRlYm91bmNlID4gMCkgewogICAgICAgIHR1cm5PbiA9IGRlYm91bmNlKHR1cm5PbiwgeC5oaWdobGlnaHQuZGVib3VuY2UpOwogICAgICB9CiAgICAgIGdyYXBoRGl2Lm9uKHguaGlnaGxpZ2h0Lm9uLCB0dXJuT24pOwogICAgICAKICAgICAgZ3JhcGhEaXYub24oeC5oaWdobGlnaHQub2ZmLCBmdW5jdGlvbiB0dXJuT2ZmKGUpIHsKICAgICAgICAvLyByZW1vdmUgYW55IHZpc3VhbCBjbHVlcwogICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAvLyByZW1vdmUgYW55IHNlbGVjdGlvbiBoaXN0b3J5CiAgICAgICAgY3Jvc3N0YWxrLnZhcigicGxvdGx5U2VsZWN0aW9uSGlzdG9yeSIpLnNldChudWxsKTsKICAgICAgICAvLyB0cmlnZ2VyIHRoZSBhY3R1YWwgcmVtb3ZhbCBvZiBzZWxlY3Rpb24gdHJhY2VzCiAgICAgICAgc2VsZWN0aW9uLnNldChudWxsLCB7c2VuZGVyOiBlbH0pOwogICAgICB9KTsKICAgICAgICAgIAogICAgICAvLyByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBzZWxlY3RpemUgc28gdGhhdCB0aGVyZSBpcyBiaS1kaXJlY3Rpb25hbAogICAgICAvLyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHdpZGdldCBhbmQgZGlyZWN0IG1hbmlwdWxhdGlvbiBldmVudHMKICAgICAgaWYgKHguc2VsZWN0aXplKSB7CiAgICAgICAgdmFyIHNlbGVjdGl6ZUlEID0gT2JqZWN0LmtleXMoeC5zZWxlY3RpemUpW2ldOwogICAgICAgIHZhciBpdGVtcyA9IHguc2VsZWN0aXplW3NlbGVjdGl6ZUlEXS5pdGVtczsKICAgICAgICB2YXIgZmlyc3QgPSBbe3ZhbHVlOiAiIiwgbGFiZWw6ICIoQWxsKSJ9XTsKICAgICAgICB2YXIgb3B0cyA9IHsKICAgICAgICAgIG9wdGlvbnM6IGZpcnN0LmNvbmNhdChpdGVtcyksCiAgICAgICAgICBzZWFyY2hGaWVsZDogImxhYmVsIiwKICAgICAgICAgIHZhbHVlRmllbGQ6ICJ2YWx1ZSIsCiAgICAgICAgICBsYWJlbEZpZWxkOiAibGFiZWwiLAogICAgICAgICAgbWF4SXRlbXM6IDUwCiAgICAgICAgfTsKICAgICAgICB2YXIgc2VsZWN0ID0gJCgiIyIgKyBzZWxlY3RpemVJRCkuZmluZCgic2VsZWN0IilbMF07CiAgICAgICAgdmFyIHNlbGVjdGl6ZSA9ICQoc2VsZWN0KS5zZWxlY3RpemUob3B0cylbMF0uc2VsZWN0aXplOwogICAgICAgIC8vIE5PVEU6IHRoaXMgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gKmRpcmVjdGx5KiBhbHRlcmluZyAKICAgICAgICAvLyBkcm9wZG93biBpdGVtcwogICAgICAgIHNlbGVjdGl6ZS5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgY3VycmVudEl0ZW1zID0gdHJhY2VNYW5hZ2VyLmdyb3VwU2VsZWN0aW9uc1tzZXRdIHx8IFtdOwogICAgICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50KSB7CiAgICAgICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50SXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBzZWxlY3RpemUucmVtb3ZlSXRlbShjdXJyZW50SXRlbXNbaV0sIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbmV3SXRlbXMgPSBzZWxlY3RpemUuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGlkeCkgeyAKICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJdGVtcy5pbmRleE9mKGlkeCkgPCAwOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgbmV3SXRlbXMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gSXRlbSBoYXMgYmVlbiByZW1vdmVkLi4uCiAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgbG9naWMgd29uJ3Qgd29yayBmb3IgZHluYW1pY2FsbHkgY2hhbmdpbmcgcGFsZXR0ZSAKICAgICAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIG51bGwpOwogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgc2VsZWN0aXplLml0ZW1zKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSAvLyBlbmQgb2Ygc2VsZWN0aW9uQ2hhbmdlCiAgICAKICB9IC8vIGVuZCBvZiByZW5kZXJWYWx1ZQp9KTsgLy8gZW5kIG9mIHdpZGdldCBkZWZpbml0aW9uCgovKioKICogQHBhcmFtIGdyYXBoRGl2IFRoZSBQbG90bHkgZ3JhcGggZGl2CiAqIEBwYXJhbSBoaWdobGlnaHQgQW4gb2JqZWN0IHdpdGggb3B0aW9ucyBmb3IgdXBkYXRpbmcgc2VsZWN0aW9uKHMpCiAqLwpmdW5jdGlvbiBUcmFjZU1hbmFnZXIoZ3JhcGhEaXYsIGhpZ2hsaWdodCkgewogIC8vIFRoZSBQbG90bHkgZ3JhcGggZGl2CiAgdGhpcy5nZCA9IGdyYXBoRGl2OwoKICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZGF0YS4KICAvLyBUT0RPOiB0cnkgdXNpbmcgTGliLmV4dGVuZEZsYXQoKSBhcyBkb25lIGluICAKICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9wdWxsLzExMzYgCiAgdGhpcy5vcmlnRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ3JhcGhEaXYuZGF0YSkpOwogIAogIC8vIGF2b2lkIGRvaW5nIHRoaXMgb3ZlciBhbmQgb3ZlcgogIHRoaXMub3JpZ09wYWNpdHkgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgIHRoaXMub3JpZ09wYWNpdHlbaV0gPSB0aGlzLm9yaWdEYXRhW2ldLm9wYWNpdHkgPT09IDAgPyAwIDogKHRoaXMub3JpZ0RhdGFbaV0ub3BhY2l0eSB8fCAxKTsKICB9CgogIC8vIGtleTogZ3JvdXAgbmFtZSwgdmFsdWU6IG51bGwgb3IgYXJyYXkgb2Yga2V5cyByZXByZXNlbnRpbmcgdGhlCiAgLy8gbW9zdCByZWNlbnRseSByZWNlaXZlZCBzZWxlY3Rpb24gZm9yIHRoYXQgZ3JvdXAuCiAgdGhpcy5ncm91cFNlbGVjdGlvbnMgPSB7fTsKICAKICAvLyBzZWxlY3Rpb24gcGFyYW1ldGVycyAoZS5nLiwgdHJhbnNpZW50IHZlcnN1cyBwZXJzaXN0ZW50IHNlbGVjdGlvbikKICB0aGlzLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKfQoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgewogIC8vIFRPRE86IFVuaG9vayBhbGwgZXZlbnQgaGFuZGxlcnMKfTsKClRyYWNlTWFuYWdlci5wcm90b3R5cGUudXBkYXRlRmlsdGVyID0gZnVuY3Rpb24oZ3JvdXAsIGtleXMpIHsKCiAgaWYgKHR5cGVvZihrZXlzKSA9PT0gInVuZGVmaW5lZCIgfHwga2V5cyA9PT0gbnVsbCkgewogICAgCiAgICB0aGlzLmdkLmRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3JpZ0RhdGEpKTsKICAgIAogIH0gZWxzZSB7CiAgCiAgICB2YXIgdHJhY2VzID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHRyYWNlID0gdGhpcy5vcmlnRGF0YVtpXTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHZhciBtYXRjaEZ1bmMgPSBnZXRNYXRjaEZ1bmModHJhY2UpOwogICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyh0cmFjZS5rZXksIGtleXMpOwogICAgICAKICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkgewogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICAvLyBzdWJzZXRBcnJheUF0dHJzIGRvZXNuJ3QgbXV0YXRlIHRyYWNlIChpdCBtYWtlcyBhIG1vZGlmaWVkIGNsb25lKQogICAgICAgICAgdHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKHRyYWNlLCBtYXRjaGVzKTsKICAgICAgICB9CiAgICAgICAgdHJhY2VzLnB1c2godHJhY2UpOwogICAgICB9CiAgICB9CiAgfQogIAogIHRoaXMuZ2QuZGF0YSA9IHRyYWNlczsKICBQbG90bHkucmVkcmF3KHRoaXMuZ2QpOwogIAogIC8vIE5PVEU6IHdlIHB1cnBvc2VseSBkbyBfbm90XyByZXN0b3JlIHNlbGVjdGlvbihzKSwgc2luY2Ugb24gZmlsdGVyLAogIC8vIGF4aXMgbGlrZWx5IHdpbGwgdXBkYXRlLCBjaGFuZ2luZyB0aGUgcGl4ZWwgLT4gZGF0YSBtYXBwaW5nLCBsZWFkaW5nIAogIC8vIHRvIGEgbGlrZWx5IG1pc21hdGNoIGluIHRoZSBicnVzaCBvdXRsaW5lIGFuZCBoaWdobGlnaHRlZCBtYXJrcwogIAp9OwoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbihncm91cCwga2V5cykgewogIAogIGlmIChrZXlzICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGtleXMpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQga2V5cyBhcmd1bWVudDsgbnVsbCBvciBhcnJheSBleHBlY3RlZCIpOwogIH0KICAKICAvLyBpZiBzZWxlY3Rpb24gaGFzIGJlZW4gY2xlYXJlZCwgb3IgaWYgdGhpcyBpcyB0cmFuc2llbnQKICAvLyBzZWxlY3Rpb24sIGRlbGV0ZSB0aGUgInNlbGVjdGlvbiB0cmFjZXMiCiAgdmFyIG5OZXdUcmFjZXMgPSB0aGlzLmdkLmRhdGEubGVuZ3RoIC0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgaWYgKGtleXMgPT09IG51bGwgfHwgIXRoaXMuaGlnaGxpZ2h0LnBlcnNpc3RlbnQgJiYgbk5ld1RyYWNlcyA+IDApIHsKICAgIHZhciB0cmFjZXNUb1JlbW92ZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdkLmRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXMuZ2QuZGF0YVtpXS5faXNDcm9zc3RhbGtUcmFjZSkgdHJhY2VzVG9SZW1vdmUucHVzaChpKTsKICAgIH0KICAgIFBsb3RseS5kZWxldGVUcmFjZXModGhpcy5nZCwgdHJhY2VzVG9SZW1vdmUpOwogICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdID0ga2V5czsKICB9IGVsc2UgewogICAgLy8gYWRkIHRvIHRoZSBncm91cFNlbGVjdGlvbiwgcmF0aGVyIHRoYW4gb3ZlcndyaXRpbmcgaXQKICAgIC8vIFRPRE86IGNhbiB0aGlzIGJlIHJlbW92ZWQ/CiAgICB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gPSB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gfHwgW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGsgPSBrZXlzW2ldOwogICAgICBpZiAodGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdLmluZGV4T2YoaykgPCAwKSB7CiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdLnB1c2goayk7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgaWYgKGtleXMgPT09IG51bGwpIHsKICAgIAogICAgUGxvdGx5LnJlc3R5bGUodGhpcy5nZCwgeyJvcGFjaXR5IjogdGhpcy5vcmlnT3BhY2l0eX0pOwogICAgCiAgfSBlbHNlIGlmIChrZXlzLmxlbmd0aCA+PSAxKSB7CiAgICAKICAgIC8vIHBsYWNlaG9sZGVyIGZvciBuZXcgInNlbGVjdGlvbiB0cmFjZXMiCiAgICB2YXIgdHJhY2VzID0gW107CiAgICAvLyB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBSL2hpZ2hsaWdodC5SCiAgICB2YXIgc2VsZWN0aW9uQ29sb3VyID0gY3Jvc3N0YWxrLmdyb3VwKGdyb3VwKS52YXIoInBsb3RseVNlbGVjdGlvbkNvbG91ciIpLmdldCgpIHx8IAogICAgICB0aGlzLmhpZ2hsaWdodC5jb2xvclswXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgLy8gVE9ETzogdHJ5IHVzaW5nIExpYi5leHRlbmRGbGF0KCkgYXMgZG9uZSBpbiAgCiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbG90bHkvcGxvdGx5LmpzL3B1bGwvMTEzNiAKICAgICAgdmFyIHRyYWNlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdkLmRhdGFbaV0pKTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIC8vIEdldCBzb3J0ZWQgYXJyYXkgb2YgbWF0Y2hpbmcgaW5kaWNlcyBpbiB0cmFjZS5rZXkKICAgICAgdmFyIG1hdGNoRnVuYyA9IGdldE1hdGNoRnVuYyh0cmFjZSk7CiAgICAgIHZhciBtYXRjaGVzID0gbWF0Y2hGdW5jKHRyYWNlLmtleSwga2V5cyk7CiAgICAgIAogICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgLy8gSWYgdGhpcyBpcyBhICJzaW1wbGUiIGtleSwgdGhhdCBtZWFucyBzZWxlY3QgdGhlIGVudGlyZSB0cmFjZQogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICB0cmFjZSA9IHN1YnNldEFycmF5QXR0cnModHJhY2UsIG1hdGNoZXMpOwogICAgICAgIH0KICAgICAgICAvLyByZWFjaCBpbnRvIHRoZSBmdWxsIHRyYWNlIG9iamVjdCBzbyB3ZSBjYW4gcHJvcGVybHkgcmVmbGVjdCB0aGUgCiAgICAgICAgLy8gc2VsZWN0aW9uIGF0dHJpYnV0ZXMgaW4gZXZlcnkgdmlldwogICAgICAgIHZhciBkID0gdGhpcy5nZC5fZnVsbERhdGFbaV07CiAgICAgICAgCiAgICAgICAgLyogCiAgICAgICAgLyBSZWN1cnNpdmVseSBpbmhlcml0IHNlbGVjdGlvbiBhdHRyaWJ1dGVzIGZyb20gdmFyaW91cyBzb3VyY2VzLCAKICAgICAgICAvIGluIG9yZGVyIG9mIHByZWZlcmVuY2U6CiAgICAgICAgLyAgKDEpIG9mZmljaWFsIHBsb3RseS5qcyBzZWxlY3RlZCBhdHRyaWJ1dGUKICAgICAgICAvICAoMikgaGlnaGxpZ2h0KHNlbGVjdGVkID0gYXR0cnNfc2VsZWN0ZWQoLi4uKSkKICAgICAgICAqLwogICAgICAgIC8vIFRPRE86IGl0IHdvdWxkIGJlIG5lYXQgdG8gaGF2ZSBhIGRyb3Bkb3duIHRvIGR5bmFtaWNhbGx5IHNwZWNpZnkgdGhlc2UhCiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdHJhY2UsIHRoaXMuaGlnaGxpZ2h0LnNlbGVjdGVkKTsKICAgICAgICAKICAgICAgICAvLyBpZiBpdCBpcyBkZWZpbmVkLCBvdmVycmlkZSBjb2xvciB3aXRoIHRoZSAiZHluYW1pYyBicnVzaCBjb2xvciIiCiAgICAgICAgaWYgKGQubWFya2VyKSB7CiAgICAgICAgICB0cmFjZS5tYXJrZXIgPSB0cmFjZS5tYXJrZXIgfHwge307CiAgICAgICAgICB0cmFjZS5tYXJrZXIuY29sb3IgPSAgc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLm1hcmtlci5jb2xvciB8fCBkLm1hcmtlci5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgdHJhY2UubGluZSA9IHRyYWNlLmxpbmUgfHwge307CiAgICAgICAgICB0cmFjZS5saW5lLmNvbG9yID0gIHNlbGVjdGlvbkNvbG91ciB8fCB0cmFjZS5saW5lLmNvbG9yIHx8IGQubGluZS5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQudGV4dGZvbnQpIHsKICAgICAgICAgIHRyYWNlLnRleHRmb250ID0gdHJhY2UudGV4dGZvbnQgfHwge307CiAgICAgICAgICB0cmFjZS50ZXh0Zm9udC5jb2xvciA9ICBzZWxlY3Rpb25Db2xvdXIgfHwgdHJhY2UudGV4dGZvbnQuY29sb3IgfHwgZC50ZXh0Zm9udC5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQuZmlsbGNvbG9yKSB7CiAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgc2VsZWN0aW9uQ29sb3VyIGluaGVyaXQgYWxwaGEgZnJvbSB0aGUgZXhpc3RpbmcgZmlsbGNvbG9yPwogICAgICAgICAgdHJhY2UuZmlsbGNvbG9yID0gc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLmZpbGxjb2xvciB8fCBkLmZpbGxjb2xvcjsKICAgICAgICB9CiAgICAgICAgLy8gYXR0YWNoIGEgc2Vuc2libGUgbmFtZS9sZWdlbmRncm91cAogICAgICAgIHRyYWNlLm5hbWUgPSB0cmFjZS5uYW1lIHx8IGtleXMuam9pbigiPGJyIC8+Iik7CiAgICAgICAgdHJhY2UubGVnZW5kZ3JvdXAgPSB0cmFjZS5sZWdlbmRncm91cCB8fCBrZXlzLmpvaW4oIjxiciAvPiIpOwogICAgICAgIAogICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgbWFwcGluZyBiZXR3ZWVuIHRoaXMgbmV3IHRyYWNlIGFuZCB0aGUgdHJhY2UgaXQgdGFyZ2V0cwogICAgICAgIC8vIChuZWNlc3NhcnkgZm9yIHVwZGF0aW5nIGZyYW1lcyB0byByZWZsZWN0IHRoZSBzZWxlY3Rpb24gdHJhY2VzKQogICAgICAgIHRyYWNlLl9vcmlnaW5hbEluZGV4ID0gaTsKICAgICAgICB0cmFjZS5fbmV3SW5kZXggPSB0aGlzLmdkLl9mdWxsRGF0YS5sZW5ndGggKyB0cmFjZXMubGVuZ3RoOwogICAgICAgIHRyYWNlLl9pc0Nyb3NzdGFsa1RyYWNlID0gdHJ1ZTsKICAgICAgICB0cmFjZXMucHVzaCh0cmFjZSk7CiAgICAgIH0KICAgIH0KICAgIAogICAgaWYgKHRyYWNlcy5sZW5ndGggPiAwKSB7CiAgICAgIAogICAgICBQbG90bHkuYWRkVHJhY2VzKHRoaXMuZ2QsIHRyYWNlcykudGhlbihmdW5jdGlvbihnZCkgewogICAgICAgIC8vIGluY3JlbWVudGFsbHkgYWRkIHNlbGVjdGlvbiB0cmFjZXMgdG8gZnJhbWVzCiAgICAgICAgLy8gKHRoaXMgaXMgaGVhdmlseSBpbnNwaXJlZCBieSBQbG90bHkuUGxvdHMubW9kaWZ5RnJhbWVzKCkgCiAgICAgICAgLy8gaW4gc3JjL3Bsb3RzL3Bsb3RzLmpzKQogICAgICAgIHZhciBfaGFzaCA9IGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoOwogICAgICAgIHZhciBfZnJhbWVzID0gZ2QuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMgfHwgW107CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfZnJhbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAKICAgICAgICAgIC8vIGFkZCB0byBfZnJhbWVzW2ldLnRyYWNlcyAqaWYqIHRoaXMgZnJhbWUgcmVmZXJlbmNlcyBzZWxlY3RlZCB0cmFjZShzKQogICAgICAgICAgdmFyIG5ld0luZGljZXMgPSBbXTsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdHJhY2VzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIHZhciB0ciA9IHRyYWNlc1tqXTsKICAgICAgICAgICAgaWYgKF9mcmFtZXNbaV0udHJhY2VzLmluZGV4T2YodHIuX29yaWdpbmFsSW5kZXgpID4gLTEpIHsKICAgICAgICAgICAgICBuZXdJbmRpY2VzLnB1c2godHIuX25ld0luZGV4KTsKICAgICAgICAgICAgICBfZnJhbWVzW2ldLnRyYWNlcy5wdXNoKHRyLl9uZXdJbmRleCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gbm90aGluZyB0byBkby4uLgogICAgICAgICAgaWYgKG5ld0luZGljZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICB2YXIgY3RyID0gMDsKICAgICAgICAgIHZhciBuRnJhbWVUcmFjZXMgPSBfZnJhbWVzW2ldLmRhdGEubGVuZ3RoOwogICAgICAgICAgCiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5GcmFtZVRyYWNlczsgaisrKSB7CiAgICAgICAgICAgIHZhciBmcmFtZVRyYWNlID0gX2ZyYW1lc1tpXS5kYXRhW2pdOwogICAgICAgICAgICBpZiAoIWZyYW1lVHJhY2Uua2V5IHx8IGZyYW1lVHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgbWF0Y2hGdW5jID0gZ2V0TWF0Y2hGdW5jKGZyYW1lVHJhY2UpOwogICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyhmcmFtZVRyYWNlLmtleSwga2V5cyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgaWYgKCF0cmFjZS5faXNTaW1wbGVLZXkpIHsKICAgICAgICAgICAgICAgIGZyYW1lVHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKGZyYW1lVHJhY2UsIG1hdGNoZXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB2YXIgZCA9IGdkLl9mdWxsRGF0YVtuZXdJbmRpY2VzW2N0cl1dOwogICAgICAgICAgICAgIGlmIChkLm1hcmtlcikgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5tYXJrZXIgPSBkLm1hcmtlcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5saW5lID0gZC5saW5lOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZC50ZXh0Zm9udCkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS50ZXh0Zm9udCA9IGQudGV4dGZvbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGN0ciA9IGN0ciArIDE7CiAgICAgICAgICAgICAgX2ZyYW1lc1tpXS5kYXRhLnB1c2goZnJhbWVUcmFjZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gdXBkYXRlIGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoCiAgICAgICAgICBfaGFzaFtfZnJhbWVzW2ldLm5hbWVdID0gX2ZyYW1lc1tpXTsKICAgICAgICB9CiAgICAgIAogICAgICB9KTsKICAgICAgCiAgICAgIC8vIGRpbSB0cmFjZXMgdGhhdCBoYXZlIGEgc2V0IG1hdGNoaW5nIHRoZSBzZXQgb2Ygc2VsZWN0aW9uIHNldHMKICAgICAgdmFyIHRyYWNlc1RvRGltID0gW10sCiAgICAgICAgICBvcGFjaXRpZXMgPSBbXSwKICAgICAgICAgIHNldHMgPSBPYmplY3Qua2V5cyh0aGlzLmdyb3VwU2VsZWN0aW9ucyksCiAgICAgICAgICBuID0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgICAgICAgICAKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2YXIgb3BhY2l0eSA9IHRoaXMub3JpZ09wYWNpdHlbaV0gfHwgMTsKICAgICAgICAvLyBoYXZlIHdlIGFscmVhZHkgZGltbWVkIHRoaXMgdHJhY2U/IE9yIGlzIHRoaXMgZXZlbiB3b3J0aCBkb2luZz8KICAgICAgICBpZiAob3BhY2l0eSAhPT0gdGhpcy5nZC5fZnVsbERhdGFbaV0ub3BhY2l0eSB8fCB0aGlzLmhpZ2hsaWdodC5vcGFjaXR5RGltID09PSAxKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgLy8gaXMgdGhpcyBzZXQgYW4gZWxlbWVudCBvZiB0aGUgc2V0IG9mIHNlbGVjdGlvbiBzZXRzPwogICAgICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoZXMoc2V0cywgW3RoaXMuZ2QuZGF0YVtpXS5zZXRdKTsKICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGgpIHsKICAgICAgICAgIHRyYWNlc1RvRGltLnB1c2goaSk7CiAgICAgICAgICBvcGFjaXRpZXMucHVzaChvcGFjaXR5ICogdGhpcy5oaWdobGlnaHQub3BhY2l0eURpbSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICBpZiAodHJhY2VzVG9EaW0ubGVuZ3RoID4gMCkgewogICAgICAgIFBsb3RseS5yZXN0eWxlKHRoaXMuZ2QsIHsib3BhY2l0eSI6IG9wYWNpdGllc30sIHRyYWNlc1RvRGltKTsKICAgICAgICAvLyB0dXJuIG9mZiB0aGUgc2VsZWN0ZWQvdW5zZWxlY3RlZCBBUEkKICAgICAgICBQbG90bHkucmVzdHlsZSh0aGlzLmdkLCB7InNlbGVjdGVkcG9pbnRzIjogbnVsbH0pOwogICAgICB9CiAgICAgIAogICAgfQogICAgCiAgfQp9OwoKLyogCk5vdGU6IGluIGFsbCBvZiB0aGVzZSBtYXRjaCBmdW5jdGlvbnMsIHdlIGFzc3VtZSBuZWVkbGVTZXQgKGkuZS4gdGhlIHNlbGVjdGVkIGtleXMpCmlzIGEgMUQgKG9yIGZsYXQpIGFycmF5LiBUaGUgcmVhbCBkaWZmZXJlbmNlIGlzIHRoZSBtZWFuaW5nIG9mIGhheXN0YWNrLgpmaW5kTWF0Y2hlcygpIGRvZXMgdGhlIHVzdWFsIHRoaW5nIHlvdSdkIGV4cGVjdCBmb3IgCmxpbmtlZCBicnVzaGluZyBvbiBhIHNjYXR0ZXJwbG90IG1hdHJpeC4gZmluZFNpbXBsZU1hdGNoZXMoKSByZXR1cm5zIGEgbWF0Y2ggaWZmIApoYXlzdGFjayBpcyBhIHN1YnNldCBvZiB0aGUgbmVlZGxlU2V0LiBmaW5kTmVzdGVkTWF0Y2hlcygpIHJldHVybnMgCiovCgpmdW5jdGlvbiBnZXRNYXRjaEZ1bmModHJhY2UpIHsKICByZXR1cm4gKHRyYWNlLl9pc05lc3RlZEtleSkgPyBmaW5kTmVzdGVkTWF0Y2hlcyA6IAogICAgKHRyYWNlLl9pc1NpbXBsZUtleSkgPyBmaW5kU2ltcGxlTWF0Y2hlcyA6IGZpbmRNYXRjaGVzOwp9CgovLyBmaW5kIG1hdGNoZXMgZm9yICJmbGF0IiBrZXlzCmZ1bmN0aW9uIGZpbmRNYXRjaGVzKGhheXN0YWNrLCBuZWVkbGVTZXQpIHsKICB2YXIgbWF0Y2hlcyA9IFtdOwogIGhheXN0YWNrLmZvckVhY2goZnVuY3Rpb24ob2JqLCBpKSB7CiAgICBpZiAob2JqID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKG9iaikgPj0gMCkgewogICAgICBtYXRjaGVzLnB1c2goaSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG1hdGNoZXM7Cn0KCi8vIGZpbmQgbWF0Y2hlcyBmb3IgInNpbXBsZSIga2V5cwpmdW5jdGlvbiBmaW5kU2ltcGxlTWF0Y2hlcyhoYXlzdGFjaywgbmVlZGxlU2V0KSB7CiAgdmFyIG1hdGNoID0gaGF5c3RhY2suZXZlcnkoZnVuY3Rpb24odmFsKSB7CiAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKHZhbCkgPj0gMDsKICB9KTsKICAvLyB5ZXMsIHRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2Ugb3RoZXIgdGhhbiBjb25mb3JtaW5nIAogIC8vIHRvIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgb3RoZXIgbWF0Y2ggZnVuY3Rpb25zCiAgcmV0dXJuIChtYXRjaCkgPyBbMF0gOiBbXQp9CgovLyBmaW5kIG1hdGNoZXMgZm9yIGEgIm5lc3RlZCIgaGF5c3RhY2sgKDJEIGFycmF5cykKZnVuY3Rpb24gZmluZE5lc3RlZE1hdGNoZXMoaGF5c3RhY2ssIG5lZWRsZVNldCkgewogIHZhciBtYXRjaGVzID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXlzdGFjay5sZW5ndGg7IGkrKykgewogICAgdmFyIGhheSA9IGhheXN0YWNrW2ldOwogICAgdmFyIG1hdGNoID0gaGF5LmV2ZXJ5KGZ1bmN0aW9uKHZhbCkgeyAKICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCBuZWVkbGVTZXQuaW5kZXhPZih2YWwpID49IDA7IAogICAgfSk7CiAgICBpZiAobWF0Y2gpIHsKICAgICAgbWF0Y2hlcy5wdXNoKGkpOwogICAgfQogIH0KICByZXR1cm4gbWF0Y2hlczsKfQoKZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHsKICByZXR1cm4gKAogICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmCiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZQogICk7Cn0KCmZ1bmN0aW9uIHN1YnNldEFycmF5QXR0cnMob2JqLCBpbmRpY2VzKSB7CiAgdmFyIG5ld09iaiA9IHt9OwogIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbihrKSB7CiAgICB2YXIgdmFsID0gb2JqW2tdOwoKICAgIGlmIChrLmNoYXJBdCgwKSA9PT0gIl8iKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoayA9PT0gInRyYW5zZm9ybXMiICYmIEFycmF5LmlzQXJyYXkodmFsKSkgewogICAgICBuZXdPYmpba10gPSB2YWwubWFwKGZ1bmN0aW9uKHRyYW5zZm9ybSkgewogICAgICAgIHJldHVybiBzdWJzZXRBcnJheUF0dHJzKHRyYW5zZm9ybSwgaW5kaWNlcyk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChrID09PSAiY29sb3JzY2FsZSIgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5QXR0cnModmFsLCBpbmRpY2VzKTsKICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5KHZhbCwgaW5kaWNlcyk7CiAgICB9IGVsc2UgewogICAgICBuZXdPYmpba10gPSB2YWw7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG5ld09iajsKfQoKZnVuY3Rpb24gc3Vic2V0QXJyYXkoYXJyLCBpbmRpY2VzKSB7CiAgdmFyIHJlc3VsdCA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykgewogICAgcmVzdWx0LnB1c2goYXJyW2luZGljZXNbaV1dKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlbW92aW5nIHBsb3RseSdzIGJydXNoIApmdW5jdGlvbiByZW1vdmVCcnVzaChlbCkgewogIHZhciBvdXRsaW5lcyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zZWxlY3Qtb3V0bGluZSIpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0bGluZXMubGVuZ3RoOyBpKyspIHsKICAgIG91dGxpbmVzW2ldLnJlbW92ZSgpOwogIH0KfQoKCi8vIGh0dHBzOi8vZGF2aWR3YWxzaC5uYW1lL2phdmFzY3JpcHQtZGVib3VuY2UtZnVuY3Rpb24KCi8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3QKLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvcgovLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGUKLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy4KZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7Cgl2YXIgdGltZW91dDsKCXJldHVybiBmdW5jdGlvbigpIHsKCQl2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7CgkJdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7CgkJCXRpbWVvdXQgPSBudWxsOwoJCQlpZiAoIWltbWVkaWF0ZSkgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKCQl9OwoJCXZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0OwoJCWNsZWFyVGltZW91dCh0aW1lb3V0KTsKCQl0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7CgkJaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7Cgl9Owp9Owo="></script>
<script src="data:application/javascript;base64,KGZ1bmN0aW9uKGdsb2JhbCl7InVzZSBzdHJpY3QiO3ZhciB1bmRlZmluZWQ9dm9pZCAwO3ZhciBNQVhfQVJSQVlfTEVOR1RIPTFlNTtmdW5jdGlvbiBUeXBlKHYpe3N3aXRjaCh0eXBlb2Ygdil7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiJ1bmRlZmluZWQiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuImJvb2xlYW4iO2Nhc2UibnVtYmVyIjpyZXR1cm4ibnVtYmVyIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7ZGVmYXVsdDpyZXR1cm4gdj09PW51bGw/Im51bGwiOiJvYmplY3QifX1mdW5jdGlvbiBDbGFzcyh2KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLnJlcGxhY2UoL15cW29iamVjdCAqfFxdJC9nLCIiKX1mdW5jdGlvbiBJc0NhbGxhYmxlKG8pe3JldHVybiB0eXBlb2Ygbz09PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gVG9PYmplY3Qodil7aWYodj09PW51bGx8fHY9PT11bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCk7cmV0dXJuIE9iamVjdCh2KX1mdW5jdGlvbiBUb0ludDMyKHYpe3JldHVybiB2Pj4wfWZ1bmN0aW9uIFRvVWludDMyKHYpe3JldHVybiB2Pj4+MH12YXIgTE4yPU1hdGguTE4yLGFicz1NYXRoLmFicyxmbG9vcj1NYXRoLmZsb29yLGxvZz1NYXRoLmxvZyxtYXg9TWF0aC5tYXgsbWluPU1hdGgubWluLHBvdz1NYXRoLnBvdyxyb3VuZD1NYXRoLnJvdW5kOyhmdW5jdGlvbigpe3ZhciBvcmlnPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZG9tX29ubHk9IWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIngiLHt9KX1jYXRjaChfKXtyZXR1cm4gZmFsc2V9fSgpO2lmKCFvcmlnfHxkb21fb25seSl7T2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKG8scHJvcCxkZXNjKXtpZihvcmlnKXRyeXtyZXR1cm4gb3JpZyhvLHByb3AsZGVzYyl9Y2F0Y2goXyl7fWlmKG8hPT1PYmplY3QobykpdGhyb3cgVHlwZUVycm9yKCJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3QiKTtpZihPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18mJiJnZXQiaW4gZGVzYylPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18uY2FsbChvLHByb3AsZGVzYy5nZXQpO2lmKE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyYmInNldCJpbiBkZXNjKU9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG8scHJvcCxkZXNjLnNldCk7aWYoInZhbHVlImluIGRlc2Mpb1twcm9wXT1kZXNjLnZhbHVlO3JldHVybiBvfX19KSgpO2Z1bmN0aW9uIG1ha2VBcnJheUFjY2Vzc29ycyhvYmope2lmKG9iai5sZW5ndGg+TUFYX0FSUkFZX0xFTkdUSCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSB0b28gbGFyZ2UgZm9yIHBvbHlmaWxsIik7ZnVuY3Rpb24gbWFrZUFycmF5QWNjZXNzb3IoaW5kZXgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosaW5kZXgse2dldDpmdW5jdGlvbigpe3JldHVybiBvYmouX2dldHRlcihpbmRleCl9LHNldDpmdW5jdGlvbih2KXtvYmouX3NldHRlcihpbmRleCx2KX0sZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTpmYWxzZX0pfXZhciBpO2ZvcihpPTA7aTxvYmoubGVuZ3RoO2krPTEpe21ha2VBcnJheUFjY2Vzc29yKGkpfX1mdW5jdGlvbiBhc19zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+PnN9ZnVuY3Rpb24gYXNfdW5zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+Pj5zfWZ1bmN0aW9uIHBhY2tJOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja0k4KGJ5dGVzKXtyZXR1cm4gYXNfc2lnbmVkKGJ5dGVzWzBdLDgpfWZ1bmN0aW9uIHBhY2tVOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja1U4KGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF0sOCl9ZnVuY3Rpb24gcGFja1U4Q2xhbXBlZChuKXtuPXJvdW5kKE51bWJlcihuKSk7cmV0dXJuW248MD8wOm4+MjU1PzI1NTpuJjI1NV19ZnVuY3Rpb24gcGFja0kxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja0kxNihieXRlcyl7cmV0dXJuIGFzX3NpZ25lZChieXRlc1swXTw8OHxieXRlc1sxXSwxNil9ZnVuY3Rpb24gcGFja1UxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja1UxNihieXRlcyl7cmV0dXJuIGFzX3Vuc2lnbmVkKGJ5dGVzWzBdPDw4fGJ5dGVzWzFdLDE2KX1mdW5jdGlvbiBwYWNrSTMyKG4pe3JldHVybltuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LG4mMjU1XX1mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpe3JldHVybiBhc19zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja1UzMihuKXtyZXR1cm5bbj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NV19ZnVuY3Rpb24gdW5wYWNrVTMyKGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja0lFRUU3NTQodixlYml0cyxmYml0cyl7dmFyIGJpYXM9KDE8PGViaXRzLTEpLTEscyxlLGYsbG4saSxiaXRzLHN0cixieXRlcztmdW5jdGlvbiByb3VuZFRvRXZlbihuKXt2YXIgdz1mbG9vcihuKSxmPW4tdztpZihmPC41KXJldHVybiB3O2lmKGY+LjUpcmV0dXJuIHcrMTtyZXR1cm4gdyUyP3crMTp3fWlmKHYhPT12KXtlPSgxPDxlYml0cyktMTtmPXBvdygyLGZiaXRzLTEpO3M9MH1lbHNlIGlmKHY9PT1JbmZpbml0eXx8dj09PS1JbmZpbml0eSl7ZT0oMTw8ZWJpdHMpLTE7Zj0wO3M9djwwPzE6MH1lbHNlIGlmKHY9PT0wKXtlPTA7Zj0wO3M9MS92PT09LUluZmluaXR5PzE6MH1lbHNle3M9djwwO3Y9YWJzKHYpO2lmKHY+PXBvdygyLDEtYmlhcykpe2U9bWluKGZsb29yKGxvZyh2KS9MTjIpLDEwMjMpO2Y9cm91bmRUb0V2ZW4odi9wb3coMixlKSpwb3coMixmYml0cykpO2lmKGYvcG93KDIsZmJpdHMpPj0yKXtlPWUrMTtmPTF9aWYoZT5iaWFzKXtlPSgxPDxlYml0cyktMTtmPTB9ZWxzZXtlPWUrYmlhcztmPWYtcG93KDIsZmJpdHMpfX1lbHNle2U9MDtmPXJvdW5kVG9FdmVuKHYvcG93KDIsMS1iaWFzLWZiaXRzKSl9fWJpdHM9W107Zm9yKGk9ZmJpdHM7aTtpLT0xKXtiaXRzLnB1c2goZiUyPzE6MCk7Zj1mbG9vcihmLzIpfWZvcihpPWViaXRzO2k7aS09MSl7Yml0cy5wdXNoKGUlMj8xOjApO2U9Zmxvb3IoZS8yKX1iaXRzLnB1c2gocz8xOjApO2JpdHMucmV2ZXJzZSgpO3N0cj1iaXRzLmpvaW4oIiIpO2J5dGVzPVtdO3doaWxlKHN0ci5sZW5ndGgpe2J5dGVzLnB1c2gocGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDgpLDIpKTtzdHI9c3RyLnN1YnN0cmluZyg4KX1yZXR1cm4gYnl0ZXN9ZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChieXRlcyxlYml0cyxmYml0cyl7dmFyIGJpdHM9W10saSxqLGIsc3RyLGJpYXMscyxlLGY7Zm9yKGk9Ynl0ZXMubGVuZ3RoO2k7aS09MSl7Yj1ieXRlc1tpLTFdO2ZvcihqPTg7ajtqLT0xKXtiaXRzLnB1c2goYiUyPzE6MCk7Yj1iPj4xfX1iaXRzLnJldmVyc2UoKTtzdHI9Yml0cy5qb2luKCIiKTtiaWFzPSgxPDxlYml0cy0xKS0xO3M9cGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDEpLDIpPy0xOjE7ZT1wYXJzZUludChzdHIuc3Vic3RyaW5nKDEsMStlYml0cyksMik7Zj1wYXJzZUludChzdHIuc3Vic3RyaW5nKDErZWJpdHMpLDIpO2lmKGU9PT0oMTw8ZWJpdHMpLTEpe3JldHVybiBmIT09MD9OYU46cypJbmZpbml0eX1lbHNlIGlmKGU+MCl7cmV0dXJuIHMqcG93KDIsZS1iaWFzKSooMStmL3BvdygyLGZiaXRzKSl9ZWxzZSBpZihmIT09MCl7cmV0dXJuIHMqcG93KDIsLShiaWFzLTEpKSooZi9wb3coMixmYml0cykpfWVsc2V7cmV0dXJuIHM8MD8tMDowfX1mdW5jdGlvbiB1bnBhY2tGNjQoYil7cmV0dXJuIHVucGFja0lFRUU3NTQoYiwxMSw1Mil9ZnVuY3Rpb24gcGFja0Y2NCh2KXtyZXR1cm4gcGFja0lFRUU3NTQodiwxMSw1Mil9ZnVuY3Rpb24gdW5wYWNrRjMyKGIpe3JldHVybiB1bnBhY2tJRUVFNzU0KGIsOCwyMyl9ZnVuY3Rpb24gcGFja0YzMih2KXtyZXR1cm4gcGFja0lFRUU3NTQodiw4LDIzKX0oZnVuY3Rpb24oKXtmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfYnl0ZXMiLHt2YWx1ZTpBcnJheShsZW5ndGgpfSk7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSs9MSl0aGlzLl9ieXRlc1tpXT0wfWdsb2JhbC5BcnJheUJ1ZmZlcj1nbG9iYWwuQXJyYXlCdWZmZXJ8fEFycmF5QnVmZmVyO2Z1bmN0aW9uICRUeXBlZEFycmF5JCgpe2lmKCFhcmd1bWVudHMubGVuZ3RofHx0eXBlb2YgYXJndW1lbnRzWzBdIT09Im9iamVjdCIpe3JldHVybiBmdW5jdGlvbihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigibGVuZ3RoIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTpsZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcih0aGlzLmJ5dGVMZW5ndGgpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ5dGVPZmZzZXQiLHt2YWx1ZTowfSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihhcmd1bWVudHMubGVuZ3RoPj0xJiZUeXBlKGFyZ3VtZW50c1swXSk9PT0ib2JqZWN0IiYmYXJndW1lbnRzWzBdaW5zdGFuY2VvZiAkVHlwZWRBcnJheSQpe3JldHVybiBmdW5jdGlvbih0eXBlZEFycmF5KXtpZih0aGlzLmNvbnN0cnVjdG9yIT09dHlwZWRBcnJheS5jb25zdHJ1Y3Rvcil0aHJvdyBUeXBlRXJyb3IoKTt2YXIgYnl0ZUxlbmd0aD10eXBlZEFycmF5Lmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpuZXcgQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOjB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6dHlwZWRBcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpdGhpcy5fc2V0dGVyKGksdHlwZWRBcnJheS5fZ2V0dGVyKGkpKX0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKGFyZ3VtZW50cy5sZW5ndGg+PTEmJlR5cGUoYXJndW1lbnRzWzBdKT09PSJvYmplY3QiJiYhKGFyZ3VtZW50c1swXWluc3RhbmNlb2YgJFR5cGVkQXJyYXkkKSYmIShhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihhcnJheSl7dmFyIGJ5dGVMZW5ndGg9YXJyYXkubGVuZ3RoKnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6MH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTphcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpe3ZhciBzPWFycmF5W2ldO3RoaXMuX3NldHRlcihpLE51bWJlcihzKSl9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoYXJndW1lbnRzLmxlbmd0aD49MSYmVHlwZShhcmd1bWVudHNbMF0pPT09Im9iamVjdCImJihhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihidWZmZXIsYnl0ZU9mZnNldCxsZW5ndGgpe2J5dGVPZmZzZXQ9VG9VaW50MzIoYnl0ZU9mZnNldCk7aWYoYnl0ZU9mZnNldD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IG91dCBvZiByYW5nZSIpO2lmKGJ5dGVPZmZzZXQldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJidWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIik7aWYobGVuZ3RoPT09dW5kZWZpbmVkKXt2YXIgYnl0ZUxlbmd0aD1idWZmZXIuYnl0ZUxlbmd0aC1ieXRlT2Zmc2V0O2lmKGJ5dGVMZW5ndGgldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJsZW5ndGggb2YgYnVmZmVyIG1pbnVzIGJ5dGVPZmZzZXQgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZSIpO2xlbmd0aD1ieXRlTGVuZ3RoL3RoaXMuQllURVNfUEVSX0VMRU1FTlR9ZWxzZXtsZW5ndGg9VG9VaW50MzIobGVuZ3RoKTtieXRlTGVuZ3RoPWxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfWlmKGJ5dGVPZmZzZXQrYnl0ZUxlbmd0aD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IGFuZCBsZW5ndGggcmVmZXJlbmNlIGFuIGFyZWEgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpidWZmZXJ9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOmJ5dGVPZmZzZXR9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6bGVuZ3RofSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10aHJvdyBUeXBlRXJyb3IoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLCJmcm9tIix7dmFsdWU6ZnVuY3Rpb24oaXRlcmFibGUpe3JldHVybiBuZXcgdGhpcyhpdGVyYWJsZSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JCwib2YiLHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcyhhcmd1bWVudHMpfX0pO3ZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQ9e307JFR5cGVkQXJyYXkkLnByb3RvdHlwZT0kVHlwZWRBcnJheVByb3RvdHlwZSQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsIl9nZXR0ZXIiLHt2YWx1ZTpmdW5jdGlvbihpbmRleCl7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXRocm93IFN5bnRheEVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO2luZGV4PVRvVWludDMyKGluZGV4KTtpZihpbmRleD49dGhpcy5sZW5ndGgpcmV0dXJuIHVuZGVmaW5lZDt2YXIgYnl0ZXM9W10saSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXtieXRlcy5wdXNoKHRoaXMuYnVmZmVyLl9ieXRlc1tvXSl9cmV0dXJuIHRoaXMuX3VucGFjayhieXRlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImdldCIse3ZhbHVlOiRUeXBlZEFycmF5JC5wcm90b3R5cGUuX2dldHRlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJfc2V0dGVyIix7dmFsdWU6ZnVuY3Rpb24oaW5kZXgsdmFsdWUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBTeW50YXhFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKTtpbmRleD1Ub1VpbnQzMihpbmRleCk7aWYoaW5kZXg+PXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYnl0ZXM9dGhpcy5fcGFjayh2YWx1ZSksaSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXt0aGlzLmJ1ZmZlci5fYnl0ZXNbb109Ynl0ZXNbaV19fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOiRUeXBlZEFycmF5JH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb3B5V2l0aGluIix7dmFsdWU6ZnVuY3Rpb24odGFyZ2V0LHN0YXJ0KXt2YXIgZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVUYXJnZXQ9VG9JbnQzMih0YXJnZXQpO3ZhciB0bztpZihyZWxhdGl2ZVRhcmdldDwwKXRvPW1heChsZW4rcmVsYXRpdmVUYXJnZXQsMCk7ZWxzZSB0bz1taW4ocmVsYXRpdmVUYXJnZXQsbGVuKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgZnJvbTtpZihyZWxhdGl2ZVN0YXJ0PDApZnJvbT1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBmcm9tPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3ZhciBjb3VudD1taW4oZmluYWwtZnJvbSxsZW4tdG8pO3ZhciBkaXJlY3Rpb247aWYoZnJvbTx0byYmdG88ZnJvbStjb3VudCl7ZGlyZWN0aW9uPS0xO2Zyb209ZnJvbStjb3VudC0xO3RvPXRvK2NvdW50LTF9ZWxzZXtkaXJlY3Rpb249MX13aGlsZShjb3VudD4wKXtvLl9zZXR0ZXIodG8sby5fZ2V0dGVyKGZyb20pKTtmcm9tPWZyb20rZGlyZWN0aW9uO3RvPXRvK2RpcmVjdGlvbjtjb3VudD1jb3VudC0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJldmVyeSIse3ZhbHVlOmZ1bmN0aW9uKGNhbGxiYWNrZm4pe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTtpZighSXNDYWxsYWJsZShjYWxsYmFja2ZuKSl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdGhpc0FyZz1hcmd1bWVudHNbMV07Zm9yKHZhciBpPTA7aTxsZW47aSsrKXtpZighY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsdC5fZ2V0dGVyKGkpLGksdCkpcmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWxsIix7dmFsdWU6ZnVuY3Rpb24odmFsdWUpe3ZhciBzdGFydD1hcmd1bWVudHNbMV0sZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaztpZihyZWxhdGl2ZVN0YXJ0PDApaz1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBrPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3doaWxlKGs8ZmluYWwpe28uX3NldHRlcihrLHZhbHVlKTtrKz0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWx0ZXIiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKyl7dmFyIHZhbD10Ll9nZXR0ZXIoaSk7aWYoY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHZhbCxpLHQpKXJlcy5wdXNoKHZhbCl9cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHJlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZpbmQiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4ga1ZhbHVlOysra31yZXR1cm4gdW5kZWZpbmVkfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaW5kSW5kZXgiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4gazsrK2t9cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZvckVhY2giLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJpbmRleE9mIix7dmFsdWU6ZnVuY3Rpb24oc2VhcmNoRWxlbWVudCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO2lmKGxlbj09PTApcmV0dXJuLTE7dmFyIG49MDtpZihhcmd1bWVudHMubGVuZ3RoPjApe249TnVtYmVyKGFyZ3VtZW50c1sxXSk7aWYobiE9PW4pe249MH1lbHNlIGlmKG4hPT0wJiZuIT09MS8wJiZuIT09LSgxLzApKXtuPShuPjB8fC0xKSpmbG9vcihhYnMobikpfX1pZihuPj1sZW4pcmV0dXJuLTE7dmFyIGs9bj49MD9uOm1heChsZW4tYWJzKG4pLDApO2Zvcig7azxsZW47aysrKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXtyZXR1cm4ga319cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImpvaW4iLHt2YWx1ZTpmdW5jdGlvbihzZXBhcmF0b3Ipe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTt2YXIgdG1wPUFycmF5KGxlbik7Zm9yKHZhciBpPTA7aTxsZW47KytpKXRtcFtpXT10Ll9nZXR0ZXIoaSk7cmV0dXJuIHRtcC5qb2luKHNlcGFyYXRvcj09PXVuZGVmaW5lZD8iLCI6c2VwYXJhdG9yKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwibGFzdEluZGV4T2YiLHt2YWx1ZTpmdW5jdGlvbihzZWFyY2hFbGVtZW50KXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYobGVuPT09MClyZXR1cm4tMTt2YXIgbj1sZW47aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtuPU51bWJlcihhcmd1bWVudHNbMV0pO2lmKG4hPT1uKXtuPTB9ZWxzZSBpZihuIT09MCYmbiE9PTEvMCYmbiE9PS0oMS8wKSl7bj0obj4wfHwtMSkqZmxvb3IoYWJzKG4pKX19dmFyIGs9bj49MD9taW4obixsZW4tMSk6bGVuLWFicyhuKTtmb3IoO2s+PTA7ay0tKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXJldHVybiBrfXJldHVybi0xfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJtYXAiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTtyZXMubGVuZ3RoPWxlbjt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKylyZXNbaV09Y2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcihyZXMpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJyZWR1Y2UiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9MDt2YXIgYWNjdW11bGF0b3I7aWYoYXJndW1lbnRzLmxlbmd0aD49Mil7YWNjdW11bGF0b3I9YXJndW1lbnRzWzFdfWVsc2V7YWNjdW11bGF0b3I9dC5fZ2V0dGVyKGsrKyl9d2hpbGUoazxsZW4pe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7aysrfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmVkdWNlUmlnaHQiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9bGVuLTE7dmFyIGFjY3VtdWxhdG9yO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpe2FjY3VtdWxhdG9yPWFyZ3VtZW50c1sxXX1lbHNle2FjY3VtdWxhdG9yPXQuX2dldHRlcihrLS0pfXdoaWxlKGs+PTApe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7ay0tfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmV2ZXJzZSIse3ZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciBoYWxmPWZsb29yKGxlbi8yKTtmb3IodmFyIGk9MCxqPWxlbi0xO2k8aGFsZjsrK2ksLS1qKXt2YXIgdG1wPXQuX2dldHRlcihpKTt0Ll9zZXR0ZXIoaSx0Ll9nZXR0ZXIoaikpO3QuX3NldHRlcihqLHRtcCl9cmV0dXJuIHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNldCIse3ZhbHVlOmZ1bmN0aW9uKGluZGV4LHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoPDEpdGhyb3cgU3ludGF4RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7dmFyIGFycmF5LHNlcXVlbmNlLG9mZnNldCxsZW4saSxzLGQsYnl0ZU9mZnNldCxieXRlTGVuZ3RoLHRtcDtpZih0eXBlb2YgYXJndW1lbnRzWzBdPT09Im9iamVjdCImJmFyZ3VtZW50c1swXS5jb25zdHJ1Y3Rvcj09PXRoaXMuY29uc3RydWN0b3Ipe2FycmF5PWFyZ3VtZW50c1swXTtvZmZzZXQ9VG9VaW50MzIoYXJndW1lbnRzWzFdKTtpZihvZmZzZXQrYXJyYXkubGVuZ3RoPnRoaXMubGVuZ3RoKXt0aHJvdyBSYW5nZUVycm9yKCJPZmZzZXQgcGx1cyBsZW5ndGggb2YgYXJyYXkgaXMgb3V0IG9mIHJhbmdlIil9Ynl0ZU9mZnNldD10aGlzLmJ5dGVPZmZzZXQrb2Zmc2V0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7Ynl0ZUxlbmd0aD1hcnJheS5sZW5ndGgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpZihhcnJheS5idWZmZXI9PT10aGlzLmJ1ZmZlcil7dG1wPVtdO2ZvcihpPTAscz1hcnJheS5ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEpe3RtcFtpXT1hcnJheS5idWZmZXIuX2J5dGVzW3NdfWZvcihpPTAsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLGQrPTEpe3RoaXMuYnVmZmVyLl9ieXRlc1tkXT10bXBbaV19fWVsc2V7Zm9yKGk9MCxzPWFycmF5LmJ5dGVPZmZzZXQsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEsZCs9MSl7dGhpcy5idWZmZXIuX2J5dGVzW2RdPWFycmF5LmJ1ZmZlci5fYnl0ZXNbc119fX1lbHNlIGlmKHR5cGVvZiBhcmd1bWVudHNbMF09PT0ib2JqZWN0IiYmdHlwZW9mIGFyZ3VtZW50c1swXS5sZW5ndGghPT0idW5kZWZpbmVkIil7c2VxdWVuY2U9YXJndW1lbnRzWzBdO2xlbj1Ub1VpbnQzMihzZXF1ZW5jZS5sZW5ndGgpO29mZnNldD1Ub1VpbnQzMihhcmd1bWVudHNbMV0pO2lmKG9mZnNldCtsZW4+dGhpcy5sZW5ndGgpe3Rocm93IFJhbmdlRXJyb3IoIk9mZnNldCBwbHVzIGxlbmd0aCBvZiBhcnJheSBpcyBvdXQgb2YgcmFuZ2UiKX1mb3IoaT0wO2k8bGVuO2krPTEpe3M9c2VxdWVuY2VbaV07dGhpcy5fc2V0dGVyKG9mZnNldCtpLE51bWJlcihzKSl9fWVsc2V7dGhyb3cgVHlwZUVycm9yKCJVbmV4cGVjdGVkIGFyZ3VtZW50IHR5cGUocykiKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNsaWNlIix7dmFsdWU6ZnVuY3Rpb24oc3RhcnQsZW5kKXt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaz1yZWxhdGl2ZVN0YXJ0PDA/bWF4KGxlbityZWxhdGl2ZVN0YXJ0LDApOm1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kPWVuZD09PXVuZGVmaW5lZD9sZW46VG9JbnQzMihlbmQpO3ZhciBmaW5hbD1yZWxhdGl2ZUVuZDwwP21heChsZW4rcmVsYXRpdmVFbmQsMCk6bWluKHJlbGF0aXZlRW5kLGxlbik7dmFyIGNvdW50PWZpbmFsLWs7dmFyIGM9by5jb25zdHJ1Y3Rvcjt2YXIgYT1uZXcgYyhjb3VudCk7dmFyIG49MDt3aGlsZShrPGZpbmFsKXt2YXIga1ZhbHVlPW8uX2dldHRlcihrKTthLl9zZXR0ZXIobixrVmFsdWUpOysrazsrK259cmV0dXJuIGF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNvbWUiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspe2lmKGNhbGxiYWNrZm4uY2FsbCh0aGlzcCx0Ll9nZXR0ZXIoaSksaSx0KSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic29ydCIse3ZhbHVlOmZ1bmN0aW9uKGNvbXBhcmVmbil7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciB0bXA9QXJyYXkobGVuKTtmb3IodmFyIGk9MDtpPGxlbjsrK2kpdG1wW2ldPXQuX2dldHRlcihpKTtpZihjb21wYXJlZm4pdG1wLnNvcnQoY29tcGFyZWZuKTtlbHNlIHRtcC5zb3J0KCk7Zm9yKGk9MDtpPGxlbjsrK2kpdC5fc2V0dGVyKGksdG1wW2ldKTtyZXR1cm4gdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic3ViYXJyYXkiLHt2YWx1ZTpmdW5jdGlvbihzdGFydCxlbmQpe2Z1bmN0aW9uIGNsYW1wKHYsbWluLG1heCl7cmV0dXJuIHY8bWluP21pbjp2Pm1heD9tYXg6dn1zdGFydD1Ub0ludDMyKHN0YXJ0KTtlbmQ9VG9JbnQzMihlbmQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSl7c3RhcnQ9MH1pZihhcmd1bWVudHMubGVuZ3RoPDIpe2VuZD10aGlzLmxlbmd0aH1pZihzdGFydDwwKXtzdGFydD10aGlzLmxlbmd0aCtzdGFydH1pZihlbmQ8MCl7ZW5kPXRoaXMubGVuZ3RoK2VuZH1zdGFydD1jbGFtcChzdGFydCwwLHRoaXMubGVuZ3RoKTtlbmQ9Y2xhbXAoZW5kLDAsdGhpcy5sZW5ndGgpO3ZhciBsZW49ZW5kLXN0YXJ0O2lmKGxlbjwwKXtsZW49MH1yZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5idWZmZXIsdGhpcy5ieXRlT2Zmc2V0K3N0YXJ0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQsbGVuKX19KTtmdW5jdGlvbiBtYWtlVHlwZWRBcnJheShlbGVtZW50U2l6ZSxwYWNrLHVucGFjayl7dmFyIFR5cGVkQXJyYXk9ZnVuY3Rpb24oKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29uc3RydWN0b3IiLHt2YWx1ZTpUeXBlZEFycmF5fSk7JFR5cGVkQXJyYXkkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTttYWtlQXJyYXlBY2Nlc3NvcnModGhpcyl9O2lmKCJfX3Byb3RvX18iaW4gVHlwZWRBcnJheSl7VHlwZWRBcnJheS5fX3Byb3RvX189JFR5cGVkQXJyYXkkfWVsc2V7VHlwZWRBcnJheS5mcm9tPSRUeXBlZEFycmF5JC5mcm9tO1R5cGVkQXJyYXkub2Y9JFR5cGVkQXJyYXkkLm9mfVR5cGVkQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ9ZWxlbWVudFNpemU7dmFyIFR5cGVkQXJyYXlQcm90b3R5cGU9ZnVuY3Rpb24oKXt9O1R5cGVkQXJyYXlQcm90b3R5cGUucHJvdG90eXBlPSRUeXBlZEFycmF5UHJvdG90eXBlJDtUeXBlZEFycmF5LnByb3RvdHlwZT1uZXcgVHlwZWRBcnJheVByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIkJZVEVTX1BFUl9FTEVNRU5UIix7dmFsdWU6ZWxlbWVudFNpemV9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIl9wYWNrIix7dmFsdWU6cGFja30pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwiX3VucGFjayIse3ZhbHVlOnVucGFja30pO3JldHVybiBUeXBlZEFycmF5fXZhciBJbnQ4QXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrSTgsdW5wYWNrSTgpO3ZhciBVaW50OEFycmF5PW1ha2VUeXBlZEFycmF5KDEscGFja1U4LHVucGFja1U4KTt2YXIgVWludDhDbGFtcGVkQXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrVThDbGFtcGVkLHVucGFja1U4KTt2YXIgSW50MTZBcnJheT1tYWtlVHlwZWRBcnJheSgyLHBhY2tJMTYsdW5wYWNrSTE2KTt2YXIgVWludDE2QXJyYXk9bWFrZVR5cGVkQXJyYXkoMixwYWNrVTE2LHVucGFja1UxNik7dmFyIEludDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrSTMyLHVucGFja0kzMik7dmFyIFVpbnQzMkFycmF5PW1ha2VUeXBlZEFycmF5KDQscGFja1UzMix1bnBhY2tVMzIpO3ZhciBGbG9hdDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrRjMyLHVucGFja0YzMik7dmFyIEZsb2F0NjRBcnJheT1tYWtlVHlwZWRBcnJheSg4LHBhY2tGNjQsdW5wYWNrRjY0KTtnbG9iYWwuSW50OEFycmF5PWdsb2JhbC5JbnQ4QXJyYXl8fEludDhBcnJheTtnbG9iYWwuVWludDhBcnJheT1nbG9iYWwuVWludDhBcnJheXx8VWludDhBcnJheTtnbG9iYWwuVWludDhDbGFtcGVkQXJyYXk9Z2xvYmFsLlVpbnQ4Q2xhbXBlZEFycmF5fHxVaW50OENsYW1wZWRBcnJheTtnbG9iYWwuSW50MTZBcnJheT1nbG9iYWwuSW50MTZBcnJheXx8SW50MTZBcnJheTtnbG9iYWwuVWludDE2QXJyYXk9Z2xvYmFsLlVpbnQxNkFycmF5fHxVaW50MTZBcnJheTtnbG9iYWwuSW50MzJBcnJheT1nbG9iYWwuSW50MzJBcnJheXx8SW50MzJBcnJheTtnbG9iYWwuVWludDMyQXJyYXk9Z2xvYmFsLlVpbnQzMkFycmF5fHxVaW50MzJBcnJheTtnbG9iYWwuRmxvYXQzMkFycmF5PWdsb2JhbC5GbG9hdDMyQXJyYXl8fEZsb2F0MzJBcnJheTtnbG9iYWwuRmxvYXQ2NEFycmF5PWdsb2JhbC5GbG9hdDY0QXJyYXl8fEZsb2F0NjRBcnJheX0pKCk7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihhcnJheSxpbmRleCl7cmV0dXJuIElzQ2FsbGFibGUoYXJyYXkuZ2V0KT9hcnJheS5nZXQoaW5kZXgpOmFycmF5W2luZGV4XX12YXIgSVNfQklHX0VORElBTj1mdW5jdGlvbigpe3ZhciB1MTZhcnJheT1uZXcgVWludDE2QXJyYXkoWzQ2NjBdKSx1OGFycmF5PW5ldyBVaW50OEFycmF5KHUxNmFycmF5LmJ1ZmZlcik7cmV0dXJuIHIodThhcnJheSwwKT09PTE4fSgpO2Z1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlcixieXRlT2Zmc2V0LGJ5dGVMZW5ndGgpe2lmKCEoYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fENsYXNzKGJ1ZmZlcik9PT0iQXJyYXlCdWZmZXIiKSl0aHJvdyBUeXBlRXJyb3IoKTtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQ+YnVmZmVyLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiYnl0ZU9mZnNldCBvdXQgb2YgcmFuZ2UiKTtpZihieXRlTGVuZ3RoPT09dW5kZWZpbmVkKWJ5dGVMZW5ndGg9YnVmZmVyLmJ5dGVMZW5ndGgtYnl0ZU9mZnNldDtlbHNlIGJ5dGVMZW5ndGg9VG9VaW50MzIoYnl0ZUxlbmd0aCk7aWYoYnl0ZU9mZnNldCtieXRlTGVuZ3RoPmJ1ZmZlci5ieXRlTGVuZ3RoKXRocm93IFJhbmdlRXJyb3IoImJ5dGVPZmZzZXQgYW5kIGxlbmd0aCByZWZlcmVuY2UgYW4gYXJlYSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOmJ1ZmZlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6Ynl0ZU9mZnNldH0pfWZ1bmN0aW9uIG1ha2VHZXR0ZXIoYXJyYXlUeXBlKXtyZXR1cm4gZnVuY3Rpb24gR2V0Vmlld1ZhbHVlKGJ5dGVPZmZzZXQsbGl0dGxlRW5kaWFuKXtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQrYXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UPnRoaXMuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTtieXRlT2Zmc2V0Kz10aGlzLmJ5dGVPZmZzZXQ7dmFyIHVpbnQ4QXJyYXk9bmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIsYnl0ZU9mZnNldCxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQpLGJ5dGVzPVtdO2Zvcih2YXIgaT0wO2k8YXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UO2krPTEpYnl0ZXMucHVzaChyKHVpbnQ4QXJyYXksaSkpO2lmKEJvb2xlYW4obGl0dGxlRW5kaWFuKT09PUJvb2xlYW4oSVNfQklHX0VORElBTikpYnl0ZXMucmV2ZXJzZSgpO3JldHVybiByKG5ldyBhcnJheVR5cGUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlciksMCl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQ4Iix7dmFsdWU6bWFrZUdldHRlcihVaW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDgiLHt2YWx1ZTptYWtlR2V0dGVyKEludDhBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJnZXRVaW50MTYiLHt2YWx1ZTptYWtlR2V0dGVyKFVpbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDE2Iix7dmFsdWU6bWFrZUdldHRlcihJbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoVWludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0SW50MzIiLHt2YWx1ZTptYWtlR2V0dGVyKEludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0RmxvYXQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoRmxvYXQzMkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEZsb2F0NjQiLHt2YWx1ZTptYWtlR2V0dGVyKEZsb2F0NjRBcnJheSl9KTtmdW5jdGlvbiBtYWtlU2V0dGVyKGFycmF5VHlwZSl7cmV0dXJuIGZ1bmN0aW9uIFNldFZpZXdWYWx1ZShieXRlT2Zmc2V0LHZhbHVlLGxpdHRsZUVuZGlhbil7Ynl0ZU9mZnNldD1Ub1VpbnQzMihieXRlT2Zmc2V0KTtpZihieXRlT2Zmc2V0K2FycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVD50aGlzLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlIik7dmFyIHR5cGVBcnJheT1uZXcgYXJyYXlUeXBlKFt2YWx1ZV0pLGJ5dGVBcnJheT1uZXcgVWludDhBcnJheSh0eXBlQXJyYXkuYnVmZmVyKSxieXRlcz1bXSxpLGJ5dGVWaWV3O2ZvcihpPTA7aTxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSlieXRlcy5wdXNoKHIoYnl0ZUFycmF5LGkpKTtpZihCb29sZWFuKGxpdHRsZUVuZGlhbik9PT1Cb29sZWFuKElTX0JJR19FTkRJQU4pKWJ5dGVzLnJldmVyc2UoKTtieXRlVmlldz1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcixieXRlT2Zmc2V0LGFycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVCk7Ynl0ZVZpZXcuc2V0KGJ5dGVzKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDgiLHt2YWx1ZTptYWtlU2V0dGVyKFVpbnQ4QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50OCIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsInNldFVpbnQxNiIse3ZhbHVlOm1ha2VTZXR0ZXIoVWludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50MTYiLHt2YWx1ZTptYWtlU2V0dGVyKEludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDMyIix7dmFsdWU6bWFrZVNldHRlcihVaW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRJbnQzMiIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRGbG9hdDMyIix7dmFsdWU6bWFrZVNldHRlcihGbG9hdDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0RmxvYXQ2NCIse3ZhbHVlOm1ha2VTZXR0ZXIoRmxvYXQ2NEFycmF5KX0pO2dsb2JhbC5EYXRhVmlldz1nbG9iYWwuRGF0YVZpZXd8fERhdGFWaWV3fSkoKX0pKHRoaXMpOw=="></script>
<link href="data:text/css,%0Aslide%3Anot%28%2Ecurrent%29%20%2Eplotly%2Ehtml%2Dwidget%7B%0Adisplay%3A%20none%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,LyoqCiogcGxvdGx5LmpzIHYxLjUyLjIKKiBDb3B5cmlnaHQgMjAxMi0yMDIwLCBQbG90bHksIEluYy4KKiBBbGwgcmlnaHRzIHJlc2VydmVkLgoqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQoqLwohZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNleygidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpLlBsb3RseT10KCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXtmdW5jdGlvbiBhKG8scyl7aWYoIXJbb10pe2lmKCFlW29dKXt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighcyYmbClyZXR1cm4gbChvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBjPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK28rIiciKTt0aHJvdyBjLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGN9dmFyIHU9cltvXT17ZXhwb3J0czp7fX07ZVtvXVswXS5jYWxsKHUuZXhwb3J0cyxmdW5jdGlvbih0KXtyZXR1cm4gYShlW29dWzFdW3RdfHx0KX0sdSx1LmV4cG9ydHMsdCxlLHIsbil9cmV0dXJuIHJbb10uZXhwb3J0c31mb3IodmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsbz0wO288bi5sZW5ndGg7bysrKWEobltvXSk7cmV0dXJuIGF9fSgpKHsxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NyYy9saWIiKSxhPXsiWCxYIGRpdiI6ImRpcmVjdGlvbjpsdHI7Zm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO21hcmdpbjowO3BhZGRpbmc6MDsiLCJYIGlucHV0LFggYnV0dG9uIjoiZm9udC1mYW1pbHk6J09wZW4gU2FucycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOyIsIlggaW5wdXQ6Zm9jdXMsWCBidXR0b246Zm9jdXMiOiJvdXRsaW5lOm5vbmU7IiwiWCBhIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCBhOmhvdmVyIjoidGV4dC1kZWNvcmF0aW9uOm5vbmU7IiwiWCAuY3Jpc3AiOiJzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczsiLCJYIC51c2VyLXNlbGVjdC1ub25lIjoiLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7IiwiWCBzdmciOiJvdmVyZmxvdzpoaWRkZW47IiwiWCBzdmcgYSI6ImZpbGw6IzQ0N2FkYjsiLCJYIHN2ZyBhOmhvdmVyIjoiZmlsbDojM2M2ZGM1OyIsIlggLm1haW4tc3ZnIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7IiwiWCAubWFpbi1zdmcgLmRyYWdsYXllciI6InBvaW50ZXItZXZlbnRzOmFsbDsiLCJYIC5jdXJzb3ItZGVmYXVsdCI6ImN1cnNvcjpkZWZhdWx0OyIsIlggLmN1cnNvci1wb2ludGVyIjoiY3Vyc29yOnBvaW50ZXI7IiwiWCAuY3Vyc29yLWNyb3NzaGFpciI6ImN1cnNvcjpjcm9zc2hhaXI7IiwiWCAuY3Vyc29yLW1vdmUiOiJjdXJzb3I6bW92ZTsiLCJYIC5jdXJzb3ItY29sLXJlc2l6ZSI6ImN1cnNvcjpjb2wtcmVzaXplOyIsIlggLmN1cnNvci1yb3ctcmVzaXplIjoiY3Vyc29yOnJvdy1yZXNpemU7IiwiWCAuY3Vyc29yLW5zLXJlc2l6ZSI6ImN1cnNvcjpucy1yZXNpemU7IiwiWCAuY3Vyc29yLWV3LXJlc2l6ZSI6ImN1cnNvcjpldy1yZXNpemU7IiwiWCAuY3Vyc29yLXN3LXJlc2l6ZSI6ImN1cnNvcjpzdy1yZXNpemU7IiwiWCAuY3Vyc29yLXMtcmVzaXplIjoiY3Vyc29yOnMtcmVzaXplOyIsIlggLmN1cnNvci1zZS1yZXNpemUiOiJjdXJzb3I6c2UtcmVzaXplOyIsIlggLmN1cnNvci13LXJlc2l6ZSI6ImN1cnNvcjp3LXJlc2l6ZTsiLCJYIC5jdXJzb3ItZS1yZXNpemUiOiJjdXJzb3I6ZS1yZXNpemU7IiwiWCAuY3Vyc29yLW53LXJlc2l6ZSI6ImN1cnNvcjpudy1yZXNpemU7IiwiWCAuY3Vyc29yLW4tcmVzaXplIjoiY3Vyc29yOm4tcmVzaXplOyIsIlggLmN1cnNvci1uZS1yZXNpemUiOiJjdXJzb3I6bmUtcmVzaXplOyIsIlggLmN1cnNvci1ncmFiIjoiY3Vyc29yOi13ZWJraXQtZ3JhYjtjdXJzb3I6Z3JhYjsiLCJYIC5tb2RlYmFyIjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDtyaWdodDoycHg7IiwiWCAuZWFzZS1iZyI6Ii13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczstbW96LXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UgMHM7LW8tdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSAwczt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlIDBzOyIsIlggLm1vZGViYXItLWhvdmVyPjpub3QoLndhdGVybWFyaykiOiJvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstbXMtdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzO3RyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7IiwiWDpob3ZlciAubW9kZWJhci0taG92ZXIgLm1vZGViYXItZ3JvdXAiOiJvcGFjaXR5OjE7IiwiWCAubW9kZWJhci1ncm91cCI6ImZsb2F0OmxlZnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctbGVmdDo4cHg7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDsiLCJYIC5tb2RlYmFyLWJ0biI6InBvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxNnB4O3BhZGRpbmc6M3B4IDRweDtoZWlnaHQ6MjJweDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDpub3JtYWw7Ym94LXNpemluZzpib3JkZXItYm94OyIsIlggLm1vZGViYXItYnRuIHN2ZyI6InBvc2l0aW9uOnJlbGF0aXZlO3RvcDoycHg7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCI6ImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOndyYXA7YWxpZ24tY29udGVudDpmbGV4LWVuZDttYXgtaGVpZ2h0OjEwMCU7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCBzdmciOiJ0b3A6LTFweDsiLCJYIC5tb2RlYmFyLnZlcnRpY2FsIC5tb2RlYmFyLWdyb3VwIjoiZGlzcGxheTpibG9jaztmbG9hdDpub25lO3BhZGRpbmctbGVmdDowcHg7cGFkZGluZy1ib3R0b206OHB4OyIsIlggLm1vZGViYXIudmVydGljYWwgLm1vZGViYXItZ3JvdXAgLm1vZGViYXItYnRuIjoiZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmNlbnRlcjsiLCJYIFtkYXRhLXRpdGxlXTpiZWZvcmUsWCBbZGF0YS10aXRsZV06YWZ0ZXIiOiJwb3NpdGlvbjphYnNvbHV0ZTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7ZGlzcGxheTpub25lO29wYWNpdHk6MDt6LWluZGV4OjEwMDE7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MTEwJTtyaWdodDo1MCU7IiwiWCBbZGF0YS10aXRsZV06aG92ZXI6YmVmb3JlLFggW2RhdGEtdGl0bGVdOmhvdmVyOmFmdGVyIjoiZGlzcGxheTpibG9jaztvcGFjaXR5OjE7IiwiWCBbZGF0YS10aXRsZV06YmVmb3JlIjoiY29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjo2cHggc29saWQgdHJhbnNwYXJlbnQ7ei1pbmRleDoxMDAyO21hcmdpbi10b3A6LTEycHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNjk3MzhhO21hcmdpbi1yaWdodDotNnB4OyIsIlggW2RhdGEtdGl0bGVdOmFmdGVyIjoiY29udGVudDphdHRyKGRhdGEtdGl0bGUpO2JhY2tncm91bmQ6IzY5NzM4YTtjb2xvcjp3aGl0ZTtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEycHg7d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1yaWdodDotMThweDtib3JkZXItcmFkaXVzOjJweDsiLCJYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YmVmb3JlLFggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTphZnRlciI6InRvcDowJTtyaWdodDoyMDAlOyIsIlggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTpiZWZvcmUiOiJib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0LWNvbG9yOiM2OTczOGE7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLXJpZ2h0Oi0zMHB4OyIsIlggLnNlbGVjdC1vdXRsaW5lIjoiZmlsbDpub25lO3N0cm9rZS13aWR0aDoxO3NoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnNlbGVjdC1vdXRsaW5lLTEiOiJzdHJva2U6d2hpdGU7IiwiWCAuc2VsZWN0LW91dGxpbmUtMiI6InN0cm9rZTpibGFjaztzdHJva2UtZGFzaGFycmF5OjJweCAycHg7IixZOiJmb250LWZhbWlseTonT3BlbiBTYW5zJztwb3NpdGlvbjpmaXhlZDt0b3A6NTBweDtyaWdodDoyMHB4O3otaW5kZXg6MTAwMDA7Zm9udC1zaXplOjEwcHQ7bWF4LXdpZHRoOjE4MHB4OyIsIlkgcCI6Im1hcmdpbjowOyIsIlkgLm5vdGlmaWVyLW5vdGUiOiJtaW4td2lkdGg6MTgwcHg7bWF4LXdpZHRoOjI1MHB4O2JvcmRlcjoxcHggc29saWQgI2ZmZjt6LWluZGV4OjMwMDA7bWFyZ2luOjA7YmFja2dyb3VuZC1jb2xvcjojOGM5N2FmO2JhY2tncm91bmQtY29sb3I6cmdiYSgxNDAsMTUxLDE3NSwwLjkpO2NvbG9yOiNmZmY7cGFkZGluZzoxMHB4O292ZXJmbG93LXdyYXA6YnJlYWstd29yZDt3b3JkLXdyYXA6YnJlYWstd29yZDstbXMtaHlwaGVuczphdXRvOy13ZWJraXQtaHlwaGVuczphdXRvO2h5cGhlbnM6YXV0bzsiLCJZIC5ub3RpZmllci1jbG9zZSI6ImNvbG9yOiNmZmY7b3BhY2l0eTowLjg7ZmxvYXQ6cmlnaHQ7cGFkZGluZzowIDVweDtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoyMHB4OyIsIlkgLm5vdGlmaWVyLWNsb3NlOmhvdmVyIjoiY29sb3I6IzQ0NDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcjsifTtmb3IodmFyIGkgaW4gYSl7dmFyIG89aS5yZXBsYWNlKC9eLC8sIiAsIikucmVwbGFjZSgvWC9nLCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseSIpLnJlcGxhY2UoL1kvZywiLnBsb3RseS1ub3RpZmllciIpO24uYWRkU3R5bGVSdWxlKG8sYVtpXSl9fSx7Ii4uL3NyYy9saWIiOjcxN31dLDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL2FnZ3JlZ2F0ZSIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL2FnZ3JlZ2F0ZSI6MTI5N31dLDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvYmFyIil9LHsiLi4vc3JjL3RyYWNlcy9iYXIiOjg2NH1dLDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvYmFycG9sYXIiKX0seyIuLi9zcmMvdHJhY2VzL2JhcnBvbGFyIjo4Nzd9XSw1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JveCIpfSx7Ii4uL3NyYy90cmFjZXMvYm94Ijo4ODd9XSw2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvY29tcG9uZW50cy9jYWxlbmRhcnMiKX0seyIuLi9zcmMvY29tcG9uZW50cy9jYWxlbmRhcnMiOjU5MH1dLDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY2FuZGxlc3RpY2siKX0seyIuLi9zcmMvdHJhY2VzL2NhbmRsZXN0aWNrIjo4OTZ9XSw4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvY2FycGV0Ijo5MTV9XSw5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGgiKX0seyIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGgiOjkyOX1dLDEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGhtYXBib3giKX0seyIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGhtYXBib3giOjkzNn1dLDExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NvbmUiKX0seyIuLi9zcmMvdHJhY2VzL2NvbmUiOjk0Mn1dLDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NvbnRvdXIiKX0seyIuLi9zcmMvdHJhY2VzL2NvbnRvdXIiOjk1N31dLDEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NvbnRvdXJjYXJwZXQiKX0seyIuLi9zcmMvdHJhY2VzL2NvbnRvdXJjYXJwZXQiOjk2OH1dLDE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvY29yZSIpfSx7Ii4uL3NyYy9jb3JlIjo2OTV9XSwxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9kZW5zaXR5bWFwYm94Iil9LHsiLi4vc3JjL3RyYWNlcy9kZW5zaXR5bWFwYm94Ijo5NzZ9XSwxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyIil9LHsiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyIjoxMjk4fV0sMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvZnVubmVsIil9LHsiLi4vc3JjL3RyYWNlcy9mdW5uZWwiOjk4Nn1dLDE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2Z1bm5lbGFyZWEiKX0seyIuLi9zcmMvdHJhY2VzL2Z1bm5lbGFyZWEiOjk5NX1dLDE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhbnNmb3Jtcy9ncm91cGJ5Iil9LHsiLi4vc3JjL3RyYW5zZm9ybXMvZ3JvdXBieSI6MTI5OX1dLDIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hlYXRtYXAiKX0seyIuLi9zcmMvdHJhY2VzL2hlYXRtYXAiOjEwMDh9XSwyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oZWF0bWFwZ2wiKX0seyIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbCI6MTAxN31dLDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbSIpfSx7Ii4uL3NyYy90cmFjZXMvaGlzdG9ncmFtIjoxMDI5fV0sMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmQiKX0seyIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkIjoxMDM1fV0sMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmRjb250b3VyIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXIiOjEwMzl9XSwyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9pbWFnZSIpfSx7Ii4uL3NyYy90cmFjZXMvaW1hZ2UiOjEwNDZ9XSwyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvcmUiKTtuLnJlZ2lzdGVyKFt0KCIuL2JhciIpLHQoIi4vYm94IiksdCgiLi9oZWF0bWFwIiksdCgiLi9oaXN0b2dyYW0iKSx0KCIuL2hpc3RvZ3JhbTJkIiksdCgiLi9oaXN0b2dyYW0yZGNvbnRvdXIiKSx0KCIuL2NvbnRvdXIiKSx0KCIuL3NjYXR0ZXJ0ZXJuYXJ5IiksdCgiLi92aW9saW4iKSx0KCIuL2Z1bm5lbCIpLHQoIi4vd2F0ZXJmYWxsIiksdCgiLi9pbWFnZSIpLHQoIi4vcGllIiksdCgiLi9zdW5idXJzdCIpLHQoIi4vdHJlZW1hcCIpLHQoIi4vZnVubmVsYXJlYSIpLHQoIi4vc2NhdHRlcjNkIiksdCgiLi9zdXJmYWNlIiksdCgiLi9pc29zdXJmYWNlIiksdCgiLi92b2x1bWUiKSx0KCIuL21lc2gzZCIpLHQoIi4vY29uZSIpLHQoIi4vc3RyZWFtdHViZSIpLHQoIi4vc2NhdHRlcmdlbyIpLHQoIi4vY2hvcm9wbGV0aCIpLHQoIi4vc2NhdHRlcmdsIiksdCgiLi9zcGxvbSIpLHQoIi4vcG9pbnRjbG91ZCIpLHQoIi4vaGVhdG1hcGdsIiksdCgiLi9wYXJjb29yZHMiKSx0KCIuL3BhcmNhdHMiKSx0KCIuL3NjYXR0ZXJtYXBib3giKSx0KCIuL2Nob3JvcGxldGhtYXBib3giKSx0KCIuL2RlbnNpdHltYXBib3giKSx0KCIuL3NhbmtleSIpLHQoIi4vaW5kaWNhdG9yIiksdCgiLi90YWJsZSIpLHQoIi4vY2FycGV0IiksdCgiLi9zY2F0dGVyY2FycGV0IiksdCgiLi9jb250b3VyY2FycGV0IiksdCgiLi9vaGxjIiksdCgiLi9jYW5kbGVzdGljayIpLHQoIi4vc2NhdHRlcnBvbGFyIiksdCgiLi9zY2F0dGVycG9sYXJnbCIpLHQoIi4vYmFycG9sYXIiKV0pLG4ucmVnaXN0ZXIoW3QoIi4vYWdncmVnYXRlIiksdCgiLi9maWx0ZXIiKSx0KCIuL2dyb3VwYnkiKSx0KCIuL3NvcnQiKV0pLG4ucmVnaXN0ZXIoW3QoIi4vY2FsZW5kYXJzIildKSxlLmV4cG9ydHM9bn0seyIuL2FnZ3JlZ2F0ZSI6MiwiLi9iYXIiOjMsIi4vYmFycG9sYXIiOjQsIi4vYm94Ijo1LCIuL2NhbGVuZGFycyI6NiwiLi9jYW5kbGVzdGljayI6NywiLi9jYXJwZXQiOjgsIi4vY2hvcm9wbGV0aCI6OSwiLi9jaG9yb3BsZXRobWFwYm94IjoxMCwiLi9jb25lIjoxMSwiLi9jb250b3VyIjoxMiwiLi9jb250b3VyY2FycGV0IjoxMywiLi9jb3JlIjoxNCwiLi9kZW5zaXR5bWFwYm94IjoxNSwiLi9maWx0ZXIiOjE2LCIuL2Z1bm5lbCI6MTcsIi4vZnVubmVsYXJlYSI6MTgsIi4vZ3JvdXBieSI6MTksIi4vaGVhdG1hcCI6MjAsIi4vaGVhdG1hcGdsIjoyMSwiLi9oaXN0b2dyYW0iOjIyLCIuL2hpc3RvZ3JhbTJkIjoyMywiLi9oaXN0b2dyYW0yZGNvbnRvdXIiOjI0LCIuL2ltYWdlIjoyNSwiLi9pbmRpY2F0b3IiOjI3LCIuL2lzb3N1cmZhY2UiOjI4LCIuL21lc2gzZCI6MjksIi4vb2hsYyI6MzAsIi4vcGFyY2F0cyI6MzEsIi4vcGFyY29vcmRzIjozMiwiLi9waWUiOjMzLCIuL3BvaW50Y2xvdWQiOjM0LCIuL3NhbmtleSI6MzUsIi4vc2NhdHRlcjNkIjozNiwiLi9zY2F0dGVyY2FycGV0IjozNywiLi9zY2F0dGVyZ2VvIjozOCwiLi9zY2F0dGVyZ2wiOjM5LCIuL3NjYXR0ZXJtYXBib3giOjQwLCIuL3NjYXR0ZXJwb2xhciI6NDEsIi4vc2NhdHRlcnBvbGFyZ2wiOjQyLCIuL3NjYXR0ZXJ0ZXJuYXJ5Ijo0MywiLi9zb3J0Ijo0NCwiLi9zcGxvbSI6NDUsIi4vc3RyZWFtdHViZSI6NDYsIi4vc3VuYnVyc3QiOjQ3LCIuL3N1cmZhY2UiOjQ4LCIuL3RhYmxlIjo0OSwiLi90cmVlbWFwIjo1MCwiLi92aW9saW4iOjUxLCIuL3ZvbHVtZSI6NTIsIi4vd2F0ZXJmYWxsIjo1M31dLDI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2luZGljYXRvciIpfSx7Ii4uL3NyYy90cmFjZXMvaW5kaWNhdG9yIjoxMDU0fV0sMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaXNvc3VyZmFjZSIpfSx7Ii4uL3NyYy90cmFjZXMvaXNvc3VyZmFjZSI6MTA2MH1dLDI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL21lc2gzZCIpfSx7Ii4uL3NyYy90cmFjZXMvbWVzaDNkIjoxMDY1fV0sMzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvb2hsYyIpfSx7Ii4uL3NyYy90cmFjZXMvb2hsYyI6MTA3MH1dLDMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BhcmNhdHMiKX0seyIuLi9zcmMvdHJhY2VzL3BhcmNhdHMiOjEwNzl9XSwzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9wYXJjb29yZHMiKX0seyIuLi9zcmMvdHJhY2VzL3BhcmNvb3JkcyI6MTA4OX1dLDMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BpZSIpfSx7Ii4uL3NyYy90cmFjZXMvcGllIjoxMTAwfV0sMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvcG9pbnRjbG91ZCIpfSx7Ii4uL3NyYy90cmFjZXMvcG9pbnRjbG91ZCI6MTEwOX1dLDM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NhbmtleSIpfSx7Ii4uL3NyYy90cmFjZXMvc2Fua2V5IjoxMTE1fV0sMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcjNkIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyM2QiOjExNTJ9XSwzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVyY2FycGV0Iil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVyY2FycGV0IjoxMTU5fV0sMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcmdlbyIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmdlbyI6MTE2N31dLDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnbCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmdsIjoxMTgwfV0sNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcm1hcGJveCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcm1hcGJveCI6MTE5MH1dLDQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhciIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyIjoxMTk4fV0sNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcnBvbGFyZ2wiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhcmdsIjoxMjA1fV0sNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcnRlcm5hcnkiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJ0ZXJuYXJ5IjoxMjEzfV0sNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL3NvcnQiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9zb3J0IjoxMzAxfV0sNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3Bsb20iKX0seyIuLi9zcmMvdHJhY2VzL3NwbG9tIjoxMjIyfV0sNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc3RyZWFtdHViZSIpfSx7Ii4uL3NyYy90cmFjZXMvc3RyZWFtdHViZSI6MTIzMH1dLDQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3N1bmJ1cnN0Iil9LHsiLi4vc3JjL3RyYWNlcy9zdW5idXJzdCI6MTIzOH1dLDQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3N1cmZhY2UiKX0seyIuLi9zcmMvdHJhY2VzL3N1cmZhY2UiOjEyNDd9XSw0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy90YWJsZSIpfSx7Ii4uL3NyYy90cmFjZXMvdGFibGUiOjEyNTV9XSw1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy90cmVlbWFwIil9LHsiLi4vc3JjL3RyYWNlcy90cmVlbWFwIjoxMjY0fV0sNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvdmlvbGluIil9LHsiLi4vc3JjL3RyYWNlcy92aW9saW4iOjEyNzZ9XSw1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy92b2x1bWUiKX0seyIuLi9zcmMvdHJhY2VzL3ZvbHVtZSI6MTI4NH1dLDUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3dhdGVyZmFsbCIpfSx7Ii4uL3NyYy90cmFjZXMvd2F0ZXJmYWxsIjoxMjkyfV0sNTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5leWV8fFswLDAsMV0scj10LmNlbnRlcnx8WzAsMCwwXSxzPXQudXB8fFswLDEsMF0sbD10LmRpc3RhbmNlTGltaXRzfHxbMCwxLzBdLGM9dC5tb2RlfHwidHVybnRhYmxlIix1PW4oKSxoPWEoKSxmPWkoKTtyZXR1cm4gdS5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLHUubG9va0F0KDAsZSxyLHMpLGguc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSxoLmxvb2tBdCgwLGUscixzKSxmLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksZi5sb29rQXQoMCxlLHIscyksbmV3IG8oe3R1cm50YWJsZTp1LG9yYml0OmgsbWF0cml4OmZ9LGMpfTt2YXIgbj10KCJ0dXJudGFibGUtY2FtZXJhLWNvbnRyb2xsZXIiKSxhPXQoIm9yYml0LWNhbWVyYS1jb250cm9sbGVyIiksaT10KCJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXIiKTtmdW5jdGlvbiBvKHQsZSl7dGhpcy5fY29udHJvbGxlck5hbWVzPU9iamVjdC5rZXlzKHQpLHRoaXMuX2NvbnRyb2xsZXJMaXN0PXRoaXMuX2NvbnRyb2xsZXJOYW1lcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSx0aGlzLl9tb2RlPWUsdGhpcy5fYWN0aXZlPXRbZV0sdGhpcy5fYWN0aXZlfHwodGhpcy5fbW9kZT0idHVybnRhYmxlIix0aGlzLl9hY3RpdmU9dC50dXJudGFibGUpLHRoaXMubW9kZXM9dGhpcy5fY29udHJvbGxlck5hbWVzLHRoaXMuY29tcHV0ZWRNYXRyaXg9dGhpcy5fYWN0aXZlLmNvbXB1dGVkTWF0cml4LHRoaXMuY29tcHV0ZWRFeWU9dGhpcy5fYWN0aXZlLmNvbXB1dGVkRXllLHRoaXMuY29tcHV0ZWRVcD10aGlzLl9hY3RpdmUuY29tcHV0ZWRVcCx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuX2FjdGl2ZS5jb21wdXRlZENlbnRlcix0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFJhZGl1c312YXIgcz1vLnByb3RvdHlwZTtbWyJmbHVzaCIsMV0sWyJpZGxlIiwxXSxbImxvb2tBdCIsNF0sWyJyb3RhdGUiLDRdLFsicGFuIiw0XSxbInRyYW5zbGF0ZSIsNF0sWyJzZXRNYXRyaXgiLDJdLFsic2V0RGlzdGFuY2VMaW1pdHMiLDJdLFsic2V0RGlzdGFuY2UiLDJdXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdLHI9W10sbj0wO248dFsxXTsrK24pci5wdXNoKCJhIituKTt2YXIgYT0idmFyIGNjPXRoaXMuX2NvbnRyb2xsZXJMaXN0O2Zvcih2YXIgaT0wO2k8Y2MubGVuZ3RoOysraSl7Y2NbaV0uIit0WzBdKyIoIityLmpvaW4oKSsiKX0iO3NbZV09RnVuY3Rpb24uYXBwbHkobnVsbCxyLmNvbmNhdChhKSl9KSxzLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLl9hY3RpdmUucmVjYWxjTWF0cml4KHQpfSxzLmdldERpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hY3RpdmUuZ2V0RGlzdGFuY2UodCl9LHMuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5nZXREaXN0YW5jZUxpbWl0cyh0KX0scy5sYXN0VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmUubGFzdFQoKX0scy5zZXRNb2RlPWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLl9tb2RlKXt2YXIgZT10aGlzLl9jb250cm9sbGVyTmFtZXMuaW5kZXhPZih0KTtpZighKGU8MCkpe3ZhciByPXRoaXMuX2FjdGl2ZSxuPXRoaXMuX2NvbnRyb2xsZXJMaXN0W2VdLGE9TWF0aC5tYXgoci5sYXN0VCgpLG4ubGFzdFQoKSk7ci5yZWNhbGNNYXRyaXgoYSksbi5zZXRNYXRyaXgoYSxyLmNvbXB1dGVkTWF0cml4KSx0aGlzLl9hY3RpdmU9bix0aGlzLl9tb2RlPXQsdGhpcy5jb21wdXRlZE1hdHJpeD10aGlzLl9hY3RpdmUuY29tcHV0ZWRNYXRyaXgsdGhpcy5jb21wdXRlZEV5ZT10aGlzLl9hY3RpdmUuY29tcHV0ZWRFeWUsdGhpcy5jb21wdXRlZFVwPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFVwLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5fYWN0aXZlLmNvbXB1dGVkQ2VudGVyLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5fYWN0aXZlLmNvbXB1dGVkUmFkaXVzfX19LHMuZ2V0TW9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb2RlfX0seyJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXIiOjQzNSwib3JiaXQtY2FtZXJhLWNvbnRyb2xsZXIiOjQ1OCwidHVybnRhYmxlLWNhbWVyYS1jb250cm9sbGVyIjo1NDF9XSw1NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGE7bj10aGlzLGE9ZnVuY3Rpb24odCxlLHIsbixhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC50YXJnZXQuZGVwdGh9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LnNvdXJjZUxpbmtzLmxlbmd0aD90LmRlcHRoOmUtMX1mdW5jdGlvbiBzKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1hPWEmJmEuaGFzT3duUHJvcGVydHkoImRlZmF1bHQiKT9hLmRlZmF1bHQ6YTt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH07ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBoKHQuc291cmNlLGUuc291cmNlKXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gaCh0LnRhcmdldCxlLnRhcmdldCl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQucGFydE9mQ3ljbGU9PT1lLnBhcnRPZkN5Y2xlP3QueTAtZS55MDoidG9wIj09PXQuY2lyY3VsYXJMaW5rVHlwZXx8ImJvdHRvbSI9PT1lLmNpcmN1bGFyTGlua1R5cGU/LTE6MX1mdW5jdGlvbiBmKHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIHAodCl7cmV0dXJuKHQueTArdC55MSkvMn1mdW5jdGlvbiBkKHQpe3JldHVybiBwKHQuc291cmNlKX1mdW5jdGlvbiBnKHQpe3JldHVybiBwKHQudGFyZ2V0KX1mdW5jdGlvbiB2KHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQubm9kZXN9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdC5saW5rc31mdW5jdGlvbiB4KHQsZSl7dmFyIHI9dC5nZXQoZSk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2UpO3JldHVybiByfWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gZSh0KX12YXIgXz0yNSx3PTEwLGs9LjM7ZnVuY3Rpb24gVCh0LGUpe3ZhciByPTAsbj0wO3QubGlua3MuZm9yRWFjaChmdW5jdGlvbihhKXthLmNpcmN1bGFyJiYoYS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZXx8YS50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZT9hLmNpcmN1bGFyTGlua1R5cGU9YS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZT9hLnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlOmEudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU6YS5jaXJjdWxhckxpbmtUeXBlPXI8bj8idG9wIjoiYm90dG9tIiwidG9wIj09YS5jaXJjdWxhckxpbmtUeXBlP3IrPTE6bis9MSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7Yih0LGUpIT1iKGEuc291cmNlLGUpJiZiKHQsZSkhPWIoYS50YXJnZXQsZSl8fCh0LmNpcmN1bGFyTGlua1R5cGU9YS5jaXJjdWxhckxpbmtUeXBlKX0pKX0pLHQubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYodC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZT09dC50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZSYmKHQuY2lyY3VsYXJMaW5rVHlwZT10LnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlKSxZKHQsZSkmJih0LmNpcmN1bGFyTGlua1R5cGU9dC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZSkpfSl9ZnVuY3Rpb24gTSh0KXt2YXIgZT1NYXRoLmFicyh0LnkxLXQueTApLHI9TWF0aC5hYnModC50YXJnZXQueDAtdC5zb3VyY2UueDEpO3JldHVybiBNYXRoLmF0YW4oci9lKX1mdW5jdGlvbiBBKHQsZSl7dmFyIHI9MDt0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7cj10LmNpcmN1bGFyJiYhWSh0LGUpP3IrMTpyfSk7dmFyIG49MDtyZXR1cm4gdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe249dC5jaXJjdWxhciYmIVkodCxlKT9uKzE6bn0pLHIrbn1mdW5jdGlvbiBTKHQpe3ZhciBlPXQuc291cmNlLnNvdXJjZUxpbmtzLHI9MDtlLmZvckVhY2goZnVuY3Rpb24odCl7cj10LmNpcmN1bGFyP3IrMTpyfSk7dmFyIG49dC50YXJnZXQudGFyZ2V0TGlua3MsYT0wO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7YT10LmNpcmN1bGFyP2ErMTphfSksIShyPjF8fGE+MSl9ZnVuY3Rpb24gRSh0LGUscil7cmV0dXJuIHQuc29ydChDKSx0LmZvckVhY2goZnVuY3Rpb24obixhKXt2YXIgaSxvLHM9MDtpZihZKG4scikmJlMobikpbi5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyPXMrbi53aWR0aC8yO2Vsc2V7Zm9yKHZhciBsPTA7bDxhO2wrKylpZihpPXRbYV0sbz10W2xdLCEoaS5zb3VyY2UuY29sdW1uPG8udGFyZ2V0LmNvbHVtbnx8aS50YXJnZXQuY29sdW1uPm8uc291cmNlLmNvbHVtbikpe3ZhciBjPXRbbF0uY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcit0W2xdLndpZHRoLzIrZTtzPWM+cz9jOnN9bi5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyPXMrbi53aWR0aC8yfX0pLHR9ZnVuY3Rpb24gTCh0LHIsYSxpKXt2YXIgbz1lLm1pbih0LmxpbmtzLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNvdXJjZS55MH0pO3QubGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYodC5jaXJjdWxhclBhdGhEYXRhPXt9KX0pLEUodC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuInRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZX0pLHIsaSksRSh0LmxpbmtzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4iYm90dG9tIj09dC5jaXJjdWxhckxpbmtUeXBlfSkscixpKSx0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZS5jaXJjdWxhcil7aWYoZS5jaXJjdWxhclBhdGhEYXRhLmFyY1JhZGl1cz1lLndpZHRoK3csZS5jaXJjdWxhclBhdGhEYXRhLmxlZnROb2RlQnVmZmVyPTUsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0Tm9kZUJ1ZmZlcj01LGUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VXaWR0aD1lLnNvdXJjZS54MS1lLnNvdXJjZS54MCxlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlWD1lLnNvdXJjZS54MCtlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlV2lkdGgsZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFg9ZS50YXJnZXQueDAsZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVk9ZS55MCxlLmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WT1lLnkxLFkoZSxpKSYmUyhlKSllLmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzPXcrZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXM9dytlLndpZHRoLzIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXM9dytlLndpZHRoLzIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXM9dytlLndpZHRoLzIsImJvdHRvbSI9PWUuY2lyY3VsYXJMaW5rVHlwZT8oZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1lLnNvdXJjZS55MStfK2UuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyk6KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9ZS5zb3VyY2UueTAtXy1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cyxlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50PWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMpO2Vsc2V7dmFyIHM9ZS5zb3VyY2UuY29sdW1uLGw9ZS5jaXJjdWxhckxpbmtUeXBlLGM9dC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc291cmNlLmNvbHVtbj09cyYmdC5jaXJjdWxhckxpbmtUeXBlPT1sfSk7ImJvdHRvbSI9PWUuY2lyY3VsYXJMaW5rVHlwZT9jLnNvcnQoTyk6Yy5zb3J0KFApO3ZhciB1PTA7Yy5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7dC5jaXJjdWxhckxpbmtJRD09ZS5jaXJjdWxhckxpbmtJRCYmKGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXM9dytlLndpZHRoLzIrdSxlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzPXcrZS53aWR0aC8yK24qcit1KSx1Kz10LndpZHRofSkscz1lLnRhcmdldC5jb2x1bW4sYz10LmxpbmtzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXQuY29sdW1uPT1zJiZ0LmNpcmN1bGFyTGlua1R5cGU9PWx9KSwiYm90dG9tIj09ZS5jaXJjdWxhckxpbmtUeXBlP2Muc29ydChJKTpjLnNvcnQoeiksdT0wLGMuZm9yRWFjaChmdW5jdGlvbih0LG4pe3QuY2lyY3VsYXJMaW5rSUQ9PWUuY2lyY3VsYXJMaW5rSUQmJihlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cz13K2Uud2lkdGgvMit1LGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzPXcrZS53aWR0aC8yK24qcit1KSx1Kz10LndpZHRofSksImJvdHRvbSI9PWUuY2lyY3VsYXJMaW5rVHlwZT8oZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1NYXRoLm1heChhLGUuc291cmNlLnkxLGUudGFyZ2V0LnkxKStfK2UuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyk6KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9by1fLWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyl9ZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0Tm9kZUJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cytlLmNpcmN1bGFyUGF0aERhdGEubGVmdE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cy1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHROb2RlQnVmZmVyfWlmKGUuY2lyY3VsYXIpZS5wYXRoPWZ1bmN0aW9uKHQpe3ZhciBlPSIiO2U9InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8iTSIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKyIgMCAwIDAgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrIiAiKyh0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWS10LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgMCAwIDAgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50KyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCsiICIrKHQuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZLXQuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKSsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZOiJNIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWSsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMrIiAwIDAgMSAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCsiICIrKHQuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMpKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50KyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAwIDAgMSAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50KyIgIisodC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFkrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFkrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk7cmV0dXJuIGV9KGUpO2Vsc2V7dmFyIGg9bi5saW5rSG9yaXpvbnRhbCgpLnNvdXJjZShmdW5jdGlvbih0KXtyZXR1cm5bdC5zb3VyY2UueDArKHQuc291cmNlLngxLXQuc291cmNlLngwKSx0LnkwXX0pLnRhcmdldChmdW5jdGlvbih0KXtyZXR1cm5bdC50YXJnZXQueDAsdC55MV19KTtlLnBhdGg9aChlKX19KX1mdW5jdGlvbiBDKHQsZSl7cmV0dXJuIEQodCk9PUQoZSk/ImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZT9PKHQsZSk6UCh0LGUpOkQoZSktRCh0KX1mdW5jdGlvbiBQKHQsZSl7cmV0dXJuIHQueTAtZS55MH1mdW5jdGlvbiBPKHQsZSl7cmV0dXJuIGUueTAtdC55MH1mdW5jdGlvbiB6KHQsZSl7cmV0dXJuIHQueTEtZS55MX1mdW5jdGlvbiBJKHQsZSl7cmV0dXJuIGUueTEtdC55MX1mdW5jdGlvbiBEKHQpe3JldHVybiB0LnRhcmdldC5jb2x1bW4tdC5zb3VyY2UuY29sdW1ufWZ1bmN0aW9uIFIodCl7cmV0dXJuIHQudGFyZ2V0LngwLXQuc291cmNlLngxfWZ1bmN0aW9uIEYodCxlKXt2YXIgcj1NKHQpLG49UihlKS9NYXRoLnRhbihyKTtyZXR1cm4idXAiPT1HKHQpP3QueTErbjp0LnkxLW59ZnVuY3Rpb24gQih0LGUpe3ZhciByPU0odCksbj1SKGUpL01hdGgudGFuKHIpO3JldHVybiJ1cCI9PUcodCk/dC55MS1uOnQueTErbn1mdW5jdGlvbiBOKHQsZSxyLG4pe3QubGlua3MuZm9yRWFjaChmdW5jdGlvbihhKXtpZighYS5jaXJjdWxhciYmYS50YXJnZXQuY29sdW1uLWEuc291cmNlLmNvbHVtbj4xKXt2YXIgaT1hLnNvdXJjZS5jb2x1bW4rMSxvPWEudGFyZ2V0LmNvbHVtbi0xLHM9MSxsPW8taSsxO2ZvcihzPTE7aTw9bztpKysscysrKXQubm9kZXMuZm9yRWFjaChmdW5jdGlvbihvKXtpZihvLmNvbHVtbj09aSl7dmFyIGMsdT1zLyhsKzEpLGg9TWF0aC5wb3coMS11LDMpLGY9Myp1Kk1hdGgucG93KDEtdSwyKSxwPTMqTWF0aC5wb3codSwyKSooMS11KSxkPU1hdGgucG93KHUsMyksZz1oKmEueTArZiphLnkwK3AqYS55MStkKmEueTEsdj1nLWEud2lkdGgvMixtPWcrYS53aWR0aC8yO3Y+by55MCYmdjxvLnkxPyhjPW8ueTEtdisxMCxjPSJib3R0b20iPT1vLmNpcmN1bGFyTGlua1R5cGU/YzotYyxvPVYobyxjLGUsciksdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2IodCxuKSE9YihvLG4pJiZ0LmNvbHVtbj09by5jb2x1bW4mJmoobyx0KSYmVih0LGMsZSxyKX0pKTptPm8ueTAmJm08by55MT8oYz1tLW8ueTArMTAsbz1WKG8sYyxlLHIpLHQubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtiKHQsbikhPWIobyxuKSYmdC5jb2x1bW49PW8uY29sdW1uJiZ0LnkwPG8ueTEmJnQueTE+by55MSYmVih0LGMsZSxyKX0pKTp2PG8ueTAmJm0+by55MSYmKGM9bS1vLnkwKzEwLG89VihvLGMsZSxyKSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7Yih0LG4pIT1iKG8sbikmJnQuY29sdW1uPT1vLmNvbHVtbiYmdC55MDxvLnkxJiZ0LnkxPm8ueTEmJlYodCxjLGUscil9KSl9fSl9fSl9ZnVuY3Rpb24gaih0LGUpe3JldHVybiB0LnkwPmUueTAmJnQueTA8ZS55MXx8KHQueTE+ZS55MCYmdC55MTxlLnkxfHx0LnkwPGUueTAmJnQueTE+ZS55MSl9ZnVuY3Rpb24gVih0LGUscixuKXtyZXR1cm4gdC55MCtlPj1yJiZ0LnkxK2U8PW4mJih0LnkwPXQueTArZSx0LnkxPXQueTErZSx0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC55MT10LnkxK2V9KSx0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC55MD10LnkwK2V9KSksdH1mdW5jdGlvbiBVKHQsZSxyLG4pe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbihhKXtuJiZhLnkrKGEueTEtYS55MCk+ZSYmKGEueT1hLnktKGEueSsoYS55MS1hLnkwKS1lKSk7dmFyIGk9dC5saW5rcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGIodC5zb3VyY2Uscik9PWIoYSxyKX0pLG89aS5sZW5ndGg7bz4xJiZpLnNvcnQoZnVuY3Rpb24odCxlKXtpZighdC5jaXJjdWxhciYmIWUuY2lyY3VsYXIpe2lmKHQudGFyZ2V0LmNvbHVtbj09ZS50YXJnZXQuY29sdW1uKXJldHVybiB0LnkxLWUueTE7aWYoIUgodCxlKSlyZXR1cm4gdC55MS1lLnkxO2lmKHQudGFyZ2V0LmNvbHVtbj5lLnRhcmdldC5jb2x1bW4pe3ZhciByPUIoZSx0KTtyZXR1cm4gdC55MS1yfWlmKGUudGFyZ2V0LmNvbHVtbj50LnRhcmdldC5jb2x1bW4pcmV0dXJuIEIodCxlKS1lLnkxfXJldHVybiB0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcj8idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6ZS5jaXJjdWxhciYmIXQuY2lyY3VsYXI/InRvcCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8xOi0xOnQuY2lyY3VsYXImJmUuY2lyY3VsYXI/dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiYidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP3QudGFyZ2V0LmNvbHVtbj09PWUudGFyZ2V0LmNvbHVtbj90LnRhcmdldC55MS1lLnRhcmdldC55MTplLnRhcmdldC5jb2x1bW4tdC50YXJnZXQuY29sdW1uOnQuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnRhcmdldC5jb2x1bW49PT1lLnRhcmdldC5jb2x1bW4/ZS50YXJnZXQueTEtdC50YXJnZXQueTE6dC50YXJnZXQuY29sdW1uLWUudGFyZ2V0LmNvbHVtbjoidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6dm9pZCAwfSk7dmFyIHM9YS55MDtpLmZvckVhY2goZnVuY3Rpb24odCl7dC55MD1zK3Qud2lkdGgvMixzKz10LndpZHRofSksaS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7aWYoImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZSl7Zm9yKHZhciByPWUrMSxuPTA7cjxvO3IrKyluKz1pW3JdLndpZHRoO3QueTA9YS55MS1uLXQud2lkdGgvMn19KX0pfWZ1bmN0aW9uIHEodCxlLHIpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10LmxpbmtzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gYih0LnRhcmdldCxyKT09YihlLHIpfSksYT1uLmxlbmd0aDthPjEmJm4uc29ydChmdW5jdGlvbih0LGUpe2lmKCF0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcil7aWYodC5zb3VyY2UuY29sdW1uPT1lLnNvdXJjZS5jb2x1bW4pcmV0dXJuIHQueTAtZS55MDtpZighSCh0LGUpKXJldHVybiB0LnkwLWUueTA7aWYoZS5zb3VyY2UuY29sdW1uPHQuc291cmNlLmNvbHVtbil7dmFyIHI9RihlLHQpO3JldHVybiB0LnkwLXJ9aWYodC5zb3VyY2UuY29sdW1uPGUuc291cmNlLmNvbHVtbilyZXR1cm4gRih0LGUpLWUueTB9cmV0dXJuIHQuY2lyY3VsYXImJiFlLmNpcmN1bGFyPyJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/LTE6MTplLmNpcmN1bGFyJiYhdC5jaXJjdWxhcj8idG9wIj09ZS5jaXJjdWxhckxpbmtUeXBlPzE6LTE6dC5jaXJjdWxhciYmZS5jaXJjdWxhcj90LmNpcmN1bGFyTGlua1R5cGU9PT1lLmNpcmN1bGFyTGlua1R5cGUmJiJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/dC5zb3VyY2UuY29sdW1uPT09ZS5zb3VyY2UuY29sdW1uP3Quc291cmNlLnkxLWUuc291cmNlLnkxOnQuc291cmNlLmNvbHVtbi1lLnNvdXJjZS5jb2x1bW46dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiYiYm90dG9tIj09dC5jaXJjdWxhckxpbmtUeXBlP3Quc291cmNlLmNvbHVtbj09PWUuc291cmNlLmNvbHVtbj90LnNvdXJjZS55MS1lLnNvdXJjZS55MTplLnNvdXJjZS5jb2x1bW4tdC5zb3VyY2UuY29sdW1uOiJ0b3AiPT10LmNpcmN1bGFyTGlua1R5cGU/LTE6MTp2b2lkIDB9KTt2YXIgaT1lLnkwO24uZm9yRWFjaChmdW5jdGlvbih0KXt0LnkxPWkrdC53aWR0aC8yLGkrPXQud2lkdGh9KSxuLmZvckVhY2goZnVuY3Rpb24odCxyKXtpZigiYm90dG9tIj09dC5jaXJjdWxhckxpbmtUeXBlKXtmb3IodmFyIGk9cisxLG89MDtpPGE7aSsrKW8rPW5baV0ud2lkdGg7dC55MT1lLnkxLW8tdC53aWR0aC8yfX0pfSl9ZnVuY3Rpb24gSCh0LGUpe3JldHVybiBHKHQpPT1HKGUpfWZ1bmN0aW9uIEcodCl7cmV0dXJuIHQueTAtdC55MT4wPyJ1cCI6ImRvd24ifWZ1bmN0aW9uIFkodCxlKXtyZXR1cm4gYih0LnNvdXJjZSxlKT09Yih0LnRhcmdldCxlKX10LnNhbmtleUNpcmN1bGFyPWZ1bmN0aW9uKCl7dmFyIHQsbixpPTAsYj0wLE09MSxTPTEsRT0yNCxDPXYsUD1vLE89bSx6PXksST0zMixEPTIsUj1udWxsO2Z1bmN0aW9uIEYoKXt2YXIgbz17bm9kZXM6Ty5hcHBseShudWxsLGFyZ3VtZW50cyksbGlua3M6ei5hcHBseShudWxsLGFyZ3VtZW50cyl9OyFmdW5jdGlvbih0KXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCxlKXt0LmluZGV4PWUsdC5zb3VyY2VMaW5rcz1bXSx0LnRhcmdldExpbmtzPVtdfSk7dmFyIGU9ci5tYXAodC5ub2RlcyxDKTt0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCxyKXt0LmluZGV4PXI7dmFyIG49dC5zb3VyY2UsYT10LnRhcmdldDsib2JqZWN0IiE9PSgidW5kZWZpbmVkIj09dHlwZW9mIG4/InVuZGVmaW5lZCI6bChuKSkmJihuPXQuc291cmNlPXgoZSxuKSksIm9iamVjdCIhPT0oInVuZGVmaW5lZCI9PXR5cGVvZiBhPyJ1bmRlZmluZWQiOmwoYSkpJiYoYT10LnRhcmdldD14KGUsYSkpLG4uc291cmNlTGlua3MucHVzaCh0KSxhLnRhcmdldExpbmtzLnB1c2godCl9KX0obyksZnVuY3Rpb24odCxlLHIpe3ZhciBuPTA7aWYobnVsbD09PXIpe2Zvcih2YXIgaT1bXSxvPTA7bzx0LmxpbmtzLmxlbmd0aDtvKyspe3ZhciBzPXQubGlua3Nbb10sbD1zLnNvdXJjZS5pbmRleCxjPXMudGFyZ2V0LmluZGV4O2lbbF18fChpW2xdPVtdKSxpW2NdfHwoaVtjXT1bXSksLTE9PT1pW2xdLmluZGV4T2YoYykmJmlbbF0ucHVzaChjKX12YXIgdT1hKGkpO3Uuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aC1lLmxlbmd0aH0pO3ZhciBoPXt9O2ZvcihvPTA7bzx1Lmxlbmd0aDtvKyspe3ZhciBmPXVbb10scD1mLnNsaWNlKC0yKTtoW3BbMF1dfHwoaFtwWzBdXT17fSksaFtwWzBdXVtwWzFdXT0hMH10LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQuaW5kZXgscj10LnNvdXJjZS5pbmRleDtlPT09cnx8aFtyXSYmaFtyXVtlXT8odC5jaXJjdWxhcj0hMCx0LmNpcmN1bGFyTGlua0lEPW4sbis9MSk6dC5jaXJjdWxhcj0hMX0pfWVsc2UgdC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc291cmNlW3JdPHQudGFyZ2V0W3JdP3QuY2lyY3VsYXI9ITE6KHQuY2lyY3VsYXI9ITAsdC5jaXJjdWxhckxpbmtJRD1uLG4rPTEpfSl9KG8sMCxSKSxmdW5jdGlvbih0KXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5wYXJ0T2ZDeWNsZT0hMSx0LnZhbHVlPU1hdGgubWF4KGUuc3VtKHQuc291cmNlTGlua3MsZiksZS5zdW0odC50YXJnZXRMaW5rcyxmKSksdC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2lyY3VsYXImJih0LnBhcnRPZkN5Y2xlPSEwLHQuY2lyY3VsYXJMaW5rVHlwZT1lLmNpcmN1bGFyTGlua1R5cGUpfSksdC50YXJnZXRMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2lyY3VsYXImJih0LnBhcnRPZkN5Y2xlPSEwLHQuY2lyY3VsYXJMaW5rVHlwZT1lLmNpcmN1bGFyTGlua1R5cGUpfSl9KX0obyksZnVuY3Rpb24odCl7dmFyIGUscixuO2ZvcihlPXQubm9kZXMscj1bXSxuPTA7ZS5sZW5ndGg7KytuLGU9cixyPVtdKWUuZm9yRWFjaChmdW5jdGlvbih0KXt0LmRlcHRoPW4sdC5zb3VyY2VMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuaW5kZXhPZih0LnRhcmdldCk8MCYmIXQuY2lyY3VsYXImJnIucHVzaCh0LnRhcmdldCl9KX0pO2ZvcihlPXQubm9kZXMscj1bXSxuPTA7ZS5sZW5ndGg7KytuLGU9cixyPVtdKWUuZm9yRWFjaChmdW5jdGlvbih0KXt0LmhlaWdodD1uLHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXtyLmluZGV4T2YodC5zb3VyY2UpPDAmJiF0LmNpcmN1bGFyJiZyLnB1c2godC5zb3VyY2UpfSl9KTt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jb2x1bW49TWF0aC5mbG9vcihQLmNhbGwobnVsbCx0LG4pKX0pfShvKSxUKG8sQyksZnVuY3Rpb24oYSxvLHMpe3ZhciBsPXIubmVzdCgpLmtleShmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW59KS5zb3J0S2V5cyhlLmFzY2VuZGluZykuZW50cmllcyhhLm5vZGVzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWVzfSk7KGZ1bmN0aW9uKHIpe2lmKG4pe3ZhciBvPTEvMDtsLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9UypuLyh0Lmxlbmd0aCsxKTtvPWU8bz9lOm99KSx0PW99dmFyIHM9ZS5taW4obCxmdW5jdGlvbihyKXtyZXR1cm4oUy1iLShyLmxlbmd0aC0xKSp0KS9lLnN1bShyLGYpfSk7cyo9ayxhLmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC53aWR0aD10LnZhbHVlKnN9KTt2YXIgYz1mdW5jdGlvbih0KXt2YXIgcj0wLG49MCxhPTAsaT0wLG89ZS5tYXgodC5ub2RlcyxmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW59KTtyZXR1cm4gdC5saW5rcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXImJigidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP3IrPXQud2lkdGg6bis9dC53aWR0aCwwPT10LnRhcmdldC5jb2x1bW4mJihpKz10LndpZHRoKSx0LnNvdXJjZS5jb2x1bW49PW8mJihhKz10LndpZHRoKSl9KSx7dG9wOnI9cj4wP3IrXyt3OnIsYm90dG9tOm49bj4wP24rXyt3Om4sbGVmdDppPWk+MD9pK18rdzppLHJpZ2h0OmE9YT4wP2ErXyt3OmF9fShhKSx1PWZ1bmN0aW9uKHQscil7dmFyIG49ZS5tYXgodC5ub2RlcyxmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW59KSxhPU0taSxvPVMtYixzPWErci5yaWdodCtyLmxlZnQsbD1vK3IudG9wK3IuYm90dG9tLGM9YS9zLHU9by9sO3JldHVybiBpPWkqYytyLmxlZnQsTT0wPT1yLnJpZ2h0P006TSpjLGI9Yip1K3IudG9wLFMqPXUsdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QueDA9aSt0LmNvbHVtbiooKE0taS1FKS9uKSx0LngxPXQueDArRX0pLHV9KGEsYyk7cyo9dSxhLmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC53aWR0aD10LnZhbHVlKnN9KSxsLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7dC5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7dC5kZXB0aD09bC5sZW5ndGgtMSYmMT09ZT8odC55MD1TLzItdC52YWx1ZSpzLHQueTE9dC55MCt0LnZhbHVlKnMpOjA9PXQuZGVwdGgmJjE9PWU/KHQueTA9Uy8yLXQudmFsdWUqcyx0LnkxPXQueTArdC52YWx1ZSpzKTp0LnBhcnRPZkN5Y2xlPzA9PUEodCxyKT8odC55MD1TLzIrbix0LnkxPXQueTArdC52YWx1ZSpzKToidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPyh0LnkwPWIrbix0LnkxPXQueTArdC52YWx1ZSpzKToodC55MD1TLXQudmFsdWUqcy1uLHQueTE9dC55MCt0LnZhbHVlKnMpOjA9PWMudG9wfHwwPT1jLmJvdHRvbT8odC55MD0oUy1iKS9lKm4sdC55MT10LnkwK3QudmFsdWUqcyk6KHQueTA9KFMtYikvMi1lLzIrbix0LnkxPXQueTArdC52YWx1ZSpzKX0pfSl9KShzKSxtKCk7Zm9yKHZhciBjPTEsdT1vO3U+MDstLXUpdihjKj0uOTkscyksbSgpO2Z1bmN0aW9uIHYodCxyKXt2YXIgbj1sLmxlbmd0aDtsLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGk9YS5sZW5ndGgsbz1hWzBdLmRlcHRoO2EuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgcztpZihhLnNvdXJjZUxpbmtzLmxlbmd0aHx8YS50YXJnZXRMaW5rcy5sZW5ndGgpaWYoYS5wYXJ0T2ZDeWNsZSYmQShhLHIpPjApO2Vsc2UgaWYoMD09byYmMT09aSlzPWEueTEtYS55MCxhLnkwPVMvMi1zLzIsYS55MT1TLzIrcy8yO2Vsc2UgaWYobz09bi0xJiYxPT1pKXM9YS55MS1hLnkwLGEueTA9Uy8yLXMvMixhLnkxPVMvMitzLzI7ZWxzZXt2YXIgbD1lLm1lYW4oYS5zb3VyY2VMaW5rcyxnKSxjPWUubWVhbihhLnRhcmdldExpbmtzLGQpLHU9KChsJiZjPyhsK2MpLzI6bHx8YyktcChhKSkqdDthLnkwKz11LGEueTErPXV9fSl9KX1mdW5jdGlvbiBtKCl7bC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByLG4sYSxpPWIsbz1lLmxlbmd0aDtmb3IoZS5zb3J0KGgpLGE9MDthPG87KythKXI9ZVthXSwobj1pLXIueTApPjAmJihyLnkwKz1uLHIueTErPW4pLGk9ci55MSt0O2lmKChuPWktdC1TKT4wKWZvcihpPXIueTAtPW4sci55MS09bixhPW8tMjthPj0wOy0tYSlyPWVbYV0sKG49ci55MSt0LWkpPjAmJihyLnkwLT1uLHIueTEtPW4pLGk9ci55MH0pfX0obyxJLEMpLEIobyk7Zm9yKHZhciBzPTA7czw0O3MrKylVKG8sUyxDKSxxKG8sMCxDKSxOKG8sYixTLEMpLFUobyxTLEMpLHEobywwLEMpO3JldHVybiBmdW5jdGlvbih0LHIsbil7dmFyIGE9dC5ub2RlcyxpPXQubGlua3Msbz0hMSxzPSExO2lmKGkuZm9yRWFjaChmdW5jdGlvbih0KXsidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP289ITA6ImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZSYmKHM9ITApfSksMD09b3x8MD09cyl7dmFyIGw9ZS5taW4oYSxmdW5jdGlvbih0KXtyZXR1cm4gdC55MH0pLGM9ZS5tYXgoYSxmdW5jdGlvbih0KXtyZXR1cm4gdC55MX0pLHU9Yy1sLGg9bi1yLGY9aC91O2EuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT0odC55MS10LnkwKSpmO3QueTA9KHQueTAtbCkqZix0LnkxPXQueTArZX0pLGkuZm9yRWFjaChmdW5jdGlvbih0KXt0LnkwPSh0LnkwLWwpKmYsdC55MT0odC55MS1sKSpmLHQud2lkdGg9dC53aWR0aCpmfSl9fShvLGIsUyksTChvLEQsUyxDKSxvfWZ1bmN0aW9uIEIodCl7dC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc291cmNlTGlua3Muc29ydCh1KSx0LnRhcmdldExpbmtzLnNvcnQoYyl9KSx0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC55MCxyPWUsbj10LnkxLGE9bjt0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jaXJjdWxhcj8odC55MD1uLXQud2lkdGgvMixuLT10LndpZHRoKToodC55MD1lK3Qud2lkdGgvMixlKz10LndpZHRoKX0pLHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNpcmN1bGFyPyh0LnkxPWEtdC53aWR0aC8yLGEtPXQud2lkdGgpOih0LnkxPXIrdC53aWR0aC8yLHIrPXQud2lkdGgpfSl9KX1yZXR1cm4gRi5ub2RlSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpzKHQpLEYpOkN9LEYubm9kZUFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhQPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cyh0KSxGKTpQfSxGLm5vZGVXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0rdCxGKTpFfSxGLm5vZGVQYWRkaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLEYpOnR9LEYubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpzKHQpLEYpOk99LEYubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHo9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpzKHQpLEYpOnp9LEYuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1iPTAsTT0rdFswXSxTPSt0WzFdLEYpOltNLWksUy1iXX0sRi5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3RbMF1bMF0sTT0rdFsxXVswXSxiPSt0WzBdWzFdLFM9K3RbMV1bMV0sRik6W1tpLGJdLFtNLFNdXX0sRi5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhJPSt0LEYpOkl9LEYuY2lyY3VsYXJMaW5rR2FwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhEPSt0LEYpOkR9LEYubm9kZVBhZGRpbmdSYXRpbz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxGKTpufSxGLnNvcnROb2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUj10LEYpOlJ9LEYudXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBUKHQsQyksQih0KSx0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKHQuY2lyY3VsYXJMaW5rVHlwZT10LnkwK3QueTE8Uz8idG9wIjoiYm90dG9tIix0LnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlPXQuY2lyY3VsYXJMaW5rVHlwZSx0LnRhcmdldC5jaXJjdWxhckxpbmtUeXBlPXQuY2lyY3VsYXJMaW5rVHlwZSl9KSxVKHQsUyxDLCExKSxxKHQsMCxDKSxMKHQsRCxTLEMpLHR9LEZ9LHQuc2Fua2V5Q2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldExpbmtzLmxlbmd0aD90LmRlcHRoOnQuc291cmNlTGlua3MubGVuZ3RoP2UubWluKHQuc291cmNlTGlua3MsaSktMTowfSx0LnNhbmtleUxlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVwdGh9LHQuc2Fua2V5UmlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS0xLXQuaGVpZ2h0fSx0LnNhbmtleUp1c3RpZnk9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LCJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP2Eocix0KCJkMy1hcnJheSIpLHQoImQzLWNvbGxlY3Rpb24iKSx0KCJkMy1zaGFwZSIpLHQoImVsZW1lbnRhcnktY2lyY3VpdHMtZGlyZWN0ZWQtZ3JhcGgiKSk6YShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzLG51bGwpfSx7ImQzLWFycmF5IjoxNTQsImQzLWNvbGxlY3Rpb24iOjE1NSwiZDMtc2hhcGUiOjE2MywiZWxlbWVudGFyeS1jaXJjdWl0cy1kaXJlY3RlZC1ncmFwaCI6MTc1fV0sNTY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixhO249dGhpcyxhPWZ1bmN0aW9uKHQsZSxyLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKHQpe3JldHVybiB0LnRhcmdldC5kZXB0aH1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQuc291cmNlTGlua3MubGVuZ3RoP3QuZGVwdGg6ZS0xfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gYyh0LnNvdXJjZSxlLnNvdXJjZSl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGModC50YXJnZXQsZS50YXJnZXQpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0LnkwLWUueTB9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBoKHQpe3JldHVybih0LnkwK3QueTEpLzJ9ZnVuY3Rpb24gZih0KXtyZXR1cm4gaCh0LnNvdXJjZSkqdC52YWx1ZX1mdW5jdGlvbiBwKHQpe3JldHVybiBoKHQudGFyZ2V0KSp0LnZhbHVlfWZ1bmN0aW9uIGQodCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5ub2Rlc31mdW5jdGlvbiB2KHQpe3JldHVybiB0LmxpbmtzfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10LmdldChlKTtpZighcil0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZSk7cmV0dXJuIHJ9ZnVuY3Rpb24geSh0KXtyZXR1cm5bdC5zb3VyY2UueDEsdC55MF19ZnVuY3Rpb24geCh0KXtyZXR1cm5bdC50YXJnZXQueDAsdC55MV19dC5zYW5rZXk9ZnVuY3Rpb24oKXt2YXIgdD0wLG49MCxhPTEseT0xLHg9MjQsYj04LF89ZCx3PWksaz1nLFQ9dixNPTMyLEE9Mi8zO2Z1bmN0aW9uIFMoKXt2YXIgaT17bm9kZXM6ay5hcHBseShudWxsLGFyZ3VtZW50cyksbGlua3M6VC5hcHBseShudWxsLGFyZ3VtZW50cyl9O3JldHVybiBmdW5jdGlvbih0KXt0Lm5vZGVzLmZvckVhY2goZnVuY3Rpb24odCxlKXt0LmluZGV4PWUsdC5zb3VyY2VMaW5rcz1bXSx0LnRhcmdldExpbmtzPVtdfSk7dmFyIGU9ci5tYXAodC5ub2RlcyxfKTt0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCxyKXt0LmluZGV4PXI7dmFyIG49dC5zb3VyY2UsYT10LnRhcmdldDsib2JqZWN0IiE9dHlwZW9mIG4mJihuPXQuc291cmNlPW0oZSxuKSksIm9iamVjdCIhPXR5cGVvZiBhJiYoYT10LnRhcmdldD1tKGUsYSkpLG4uc291cmNlTGlua3MucHVzaCh0KSxhLnRhcmdldExpbmtzLnB1c2godCl9KX0oaSksZnVuY3Rpb24odCl7dC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudmFsdWU9TWF0aC5tYXgoZS5zdW0odC5zb3VyY2VMaW5rcyx1KSxlLnN1bSh0LnRhcmdldExpbmtzLHUpKX0pfShpKSxmdW5jdGlvbihlKXt2YXIgcixuLGk7Zm9yKHI9ZS5ub2RlcyxuPVtdLGk9MDtyLmxlbmd0aDsrK2kscj1uLG49W10pci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVwdGg9aSx0LnNvdXJjZUxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7bi5pbmRleE9mKHQudGFyZ2V0KTwwJiZuLnB1c2godC50YXJnZXQpfSl9KTtmb3Iocj1lLm5vZGVzLG49W10saT0wO3IubGVuZ3RoOysraSxyPW4sbj1bXSlyLmZvckVhY2goZnVuY3Rpb24odCl7dC5oZWlnaHQ9aSx0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7bi5pbmRleE9mKHQuc291cmNlKTwwJiZuLnB1c2godC5zb3VyY2UpfSl9KTt2YXIgbz0oYS10LXgpLyhpLTEpO2Uubm9kZXMuZm9yRWFjaChmdW5jdGlvbihlKXtlLngxPShlLngwPXQrTWF0aC5tYXgoMCxNYXRoLm1pbihpLTEsTWF0aC5mbG9vcih3LmNhbGwobnVsbCxlLGkpKSkpKm8pK3h9KX0oaSksZnVuY3Rpb24odCl7dmFyIGE9ci5uZXN0KCkua2V5KGZ1bmN0aW9uKHQpe3JldHVybiB0LngwfSkuc29ydEtleXMoZS5hc2NlbmRpbmcpLmVudHJpZXModC5ub2RlcykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlc30pOyhmdW5jdGlvbigpe3ZhciByPWUubWF4KGEsZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSksaT1BKih5LW4pLyhyLTEpO2I+aSYmKGI9aSk7dmFyIG89ZS5taW4oYSxmdW5jdGlvbih0KXtyZXR1cm4oeS1uLSh0Lmxlbmd0aC0xKSpiKS9lLnN1bSh0LHUpfSk7YS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QueTE9KHQueTA9ZSkrdC52YWx1ZSpvfSl9KSx0LmxpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC53aWR0aD10LnZhbHVlKm99KX0pKCksZCgpO2Zvcih2YXIgaT0xLG89TTtvPjA7LS1vKWwoaSo9Ljk5KSxkKCkscyhpKSxkKCk7ZnVuY3Rpb24gcyh0KXthLmZvckVhY2goZnVuY3Rpb24ocil7ci5mb3JFYWNoKGZ1bmN0aW9uKHIpe2lmKHIudGFyZ2V0TGlua3MubGVuZ3RoKXt2YXIgbj0oZS5zdW0oci50YXJnZXRMaW5rcyxmKS9lLnN1bShyLnRhcmdldExpbmtzLHUpLWgocikpKnQ7ci55MCs9bixyLnkxKz1ufX0pfSl9ZnVuY3Rpb24gbCh0KXthLnNsaWNlKCkucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24ocil7ci5mb3JFYWNoKGZ1bmN0aW9uKHIpe2lmKHIuc291cmNlTGlua3MubGVuZ3RoKXt2YXIgbj0oZS5zdW0oci5zb3VyY2VMaW5rcyxwKS9lLnN1bShyLnNvdXJjZUxpbmtzLHUpLWgocikpKnQ7ci55MCs9bixyLnkxKz1ufX0pfSl9ZnVuY3Rpb24gZCgpe2EuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZSxyLGEsaT1uLG89dC5sZW5ndGg7Zm9yKHQuc29ydChjKSxhPTA7YTxvOysrYSllPXRbYV0sKHI9aS1lLnkwKT4wJiYoZS55MCs9cixlLnkxKz1yKSxpPWUueTErYjtpZigocj1pLWIteSk+MClmb3IoaT1lLnkwLT1yLGUueTEtPXIsYT1vLTI7YT49MDstLWEpZT10W2FdLChyPWUueTErYi1pKT4wJiYoZS55MC09cixlLnkxLT1yKSxpPWUueTB9KX19KGkpLEUoaSksaX1mdW5jdGlvbiBFKHQpe3Qubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnNvdXJjZUxpbmtzLnNvcnQobCksdC50YXJnZXRMaW5rcy5zb3J0KHMpfSksdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQueTAscj1lO3Quc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnkwPWUrdC53aWR0aC8yLGUrPXQud2lkdGh9KSx0LnRhcmdldExpbmtzLmZvckVhY2goZnVuY3Rpb24odCl7dC55MT1yK3Qud2lkdGgvMixyKz10LndpZHRofSl9KX1yZXR1cm4gUy51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIEUodCksdH0sUy5ub2RlSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLFMpOl99LFMubm9kZUFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6byh0KSxTKTp3fSxTLm5vZGVXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0rdCxTKTp4fSxTLm5vZGVQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPSt0LFMpOmJ9LFMubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLFMpOmt9LFMubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLFMpOlR9LFMuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uPTAsYT0rZVswXSx5PStlWzFdLFMpOlthLXQseS1uXX0sUy5leHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2VbMF1bMF0sYT0rZVsxXVswXSxuPStlWzBdWzFdLHk9K2VbMV1bMV0sUyk6W1t0LG5dLFthLHldXX0sUy5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPSt0LFMpOk19LFN9LHQuc2Fua2V5Q2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldExpbmtzLmxlbmd0aD90LmRlcHRoOnQuc291cmNlTGlua3MubGVuZ3RoP2UubWluKHQuc291cmNlTGlua3MsYSktMTowfSx0LnNhbmtleUxlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVwdGh9LHQuc2Fua2V5UmlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS0xLXQuaGVpZ2h0fSx0LnNhbmtleUp1c3RpZnk9aSx0LnNhbmtleUxpbmtIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIG4ubGlua0hvcml6b250YWwoKS5zb3VyY2UoeSkudGFyZ2V0KHgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LCJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP2Eocix0KCJkMy1hcnJheSIpLHQoImQzLWNvbGxlY3Rpb24iKSx0KCJkMy1zaGFwZSIpKTphKG4uZDM9bi5kM3x8e30sbi5kMyxuLmQzLG4uZDMpfSx7ImQzLWFycmF5IjoxNTQsImQzLWNvbGxlY3Rpb24iOjE1NSwiZDMtc2hhcGUiOjE2M31dLDU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj10KCJAdHVyZi9tZXRhIiksYT02Mzc4MTM3O2Z1bmN0aW9uIGkodCl7dmFyIGU9MDtpZih0JiZ0Lmxlbmd0aD4wKXtlKz1NYXRoLmFicyhvKHRbMF0pKTtmb3IodmFyIHI9MTtyPHQubGVuZ3RoO3IrKyllLT1NYXRoLmFicyhvKHRbcl0pKX1yZXR1cm4gZX1mdW5jdGlvbiBvKHQpe3ZhciBlLHIsbixpLG8sbCxjPTAsdT10Lmxlbmd0aDtpZih1PjIpe2ZvcihsPTA7bDx1O2wrKylsPT09dS0yPyhuPXUtMixpPXUtMSxvPTApOmw9PT11LTE/KG49dS0xLGk9MCxvPTEpOihuPWwsaT1sKzEsbz1sKzIpLGU9dFtuXSxyPXRbaV0sYys9KHModFtvXVswXSktcyhlWzBdKSkqTWF0aC5zaW4ocyhyWzFdKSk7Yz1jKmEqYS8yfXJldHVybiBjfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQqTWF0aC5QSS8xODB9ci5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiBuLmdlb21SZWR1Y2UodCxmdW5jdGlvbih0LGUpe3JldHVybiB0K2Z1bmN0aW9uKHQpe3ZhciBlLHI9MDtzd2l0Y2godC50eXBlKXtjYXNlIlBvbHlnb24iOnJldHVybiBpKHQuY29vcmRpbmF0ZXMpO2Nhc2UiTXVsdGlQb2x5Z29uIjpmb3IoZT0wO2U8dC5jb29yZGluYXRlcy5sZW5ndGg7ZSsrKXIrPWkodC5jb29yZGluYXRlc1tlXSk7cmV0dXJuIHI7Y2FzZSJQb2ludCI6Y2FzZSJNdWx0aVBvaW50IjpjYXNlIkxpbmVTdHJpbmciOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gMH1yZXR1cm4gMH0oZSl9LDApfX0seyJAdHVyZi9tZXRhIjo2MX1dLDU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj10KCJAdHVyZi9tZXRhIik7ci5kZWZhdWx0PWZ1bmN0aW9uKHQpe3ZhciBlPVsxLzAsMS8wLC0xLzAsLTEvMF07cmV0dXJuIG4uY29vcmRFYWNoKHQsZnVuY3Rpb24odCl7ZVswXT50WzBdJiYoZVswXT10WzBdKSxlWzFdPnRbMV0mJihlWzFdPXRbMV0pLGVbMl08dFswXSYmKGVbMl09dFswXSksZVszXTx0WzFdJiYoZVszXT10WzFdKX0pLGV9fSx7IkB0dXJmL21ldGEiOjYxfV0sNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXQoIkB0dXJmL21ldGEiKSxhPXQoIkB0dXJmL2hlbHBlcnMiKTtyLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIHI9MCxpPTAsbz0wO3JldHVybiBuLmNvb3JkRWFjaCh0LGZ1bmN0aW9uKHQpe3IrPXRbMF0saSs9dFsxXSxvKyt9KSxhLnBvaW50KFtyL28saS9vXSxlLnByb3BlcnRpZXMpfX0seyJAdHVyZi9oZWxwZXJzIjo2MCwiQHR1cmYvbWV0YSI6NjF9XSw2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2b2lkIDA9PT1yJiYocj17fSk7dmFyIG49e3R5cGU6IkZlYXR1cmUifTtyZXR1cm4oMD09PXIuaWR8fHIuaWQpJiYobi5pZD1yLmlkKSxyLmJib3gmJihuLmJib3g9ci5iYm94KSxuLnByb3BlcnRpZXM9ZXx8e30sbi5nZW9tZXRyeT10LG59ZnVuY3Rpb24gYSh0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxuKHt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBpKHQsZSxyKXt2b2lkIDA9PT1yJiYocj17fSk7Zm9yKHZhciBhPTAsaT10O2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO2lmKG8ubGVuZ3RoPDQpdGhyb3cgbmV3IEVycm9yKCJFYWNoIExpbmVhclJpbmcgb2YgYSBQb2x5Z29uIG11c3QgaGF2ZSA0IG9yIG1vcmUgUG9zaXRpb25zLiIpO2Zvcih2YXIgcz0wO3M8b1tvLmxlbmd0aC0xXS5sZW5ndGg7cysrKWlmKG9bby5sZW5ndGgtMV1bc10hPT1vWzBdW3NdKXRocm93IG5ldyBFcnJvcigiRmlyc3QgYW5kIGxhc3QgUG9zaXRpb24gYXJlIG5vdCBlcXVpdmFsZW50LiIpfXJldHVybiBuKHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp0fSxlLHIpfWZ1bmN0aW9uIG8odCxlLHIpe2lmKHZvaWQgMD09PXImJihyPXt9KSx0Lmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiB0d28gb3IgbW9yZSBwb3NpdGlvbnMiKTtyZXR1cm4gbih7dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBzKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciByPXt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiJ9O3JldHVybiBlLmlkJiYoci5pZD1lLmlkKSxlLmJib3gmJihyLmJib3g9ZS5iYm94KSxyLmZlYXR1cmVzPXQscn1mdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gdSh0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxuKHt0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gaCh0LGUpe3ZvaWQgMD09PWUmJihlPSJraWxvbWV0ZXJzIik7dmFyIG49ci5mYWN0b3JzW2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcihlKyIgdW5pdHMgaXMgaW52YWxpZCIpO3JldHVybiB0Km59ZnVuY3Rpb24gZih0LGUpe3ZvaWQgMD09PWUmJihlPSJraWxvbWV0ZXJzIik7dmFyIG49ci5mYWN0b3JzW2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcihlKyIgdW5pdHMgaXMgaW52YWxpZCIpO3JldHVybiB0L259ZnVuY3Rpb24gcCh0KXtyZXR1cm4gMTgwKih0JSgyKk1hdGguUEkpKS9NYXRoLlBJfWZ1bmN0aW9uIGQodCl7cmV0dXJuIWlzTmFOKHQpJiZudWxsIT09dCYmIUFycmF5LmlzQXJyYXkodCkmJiEvXlxzKiQvLnRlc3QodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuZWFydGhSYWRpdXM9NjM3MTAwOC44LHIuZmFjdG9ycz17Y2VudGltZXRlcnM6MTAwKnIuZWFydGhSYWRpdXMsY2VudGltZXRyZXM6MTAwKnIuZWFydGhSYWRpdXMsZGVncmVlczpyLmVhcnRoUmFkaXVzLzExMTMyNSxmZWV0OjMuMjgwODQqci5lYXJ0aFJhZGl1cyxpbmNoZXM6MzkuMzcqci5lYXJ0aFJhZGl1cyxraWxvbWV0ZXJzOnIuZWFydGhSYWRpdXMvMWUzLGtpbG9tZXRyZXM6ci5lYXJ0aFJhZGl1cy8xZTMsbWV0ZXJzOnIuZWFydGhSYWRpdXMsbWV0cmVzOnIuZWFydGhSYWRpdXMsbWlsZXM6ci5lYXJ0aFJhZGl1cy8xNjA5LjM0NCxtaWxsaW1ldGVyczoxZTMqci5lYXJ0aFJhZGl1cyxtaWxsaW1ldHJlczoxZTMqci5lYXJ0aFJhZGl1cyxuYXV0aWNhbG1pbGVzOnIuZWFydGhSYWRpdXMvMTg1MixyYWRpYW5zOjEseWFyZHM6ci5lYXJ0aFJhZGl1cy8xLjA5MzZ9LHIudW5pdHNGYWN0b3JzPXtjZW50aW1ldGVyczoxMDAsY2VudGltZXRyZXM6MTAwLGRlZ3JlZXM6MS8xMTEzMjUsZmVldDozLjI4MDg0LGluY2hlczozOS4zNyxraWxvbWV0ZXJzOi4wMDEsa2lsb21ldHJlczouMDAxLG1ldGVyczoxLG1ldHJlczoxLG1pbGVzOjEvMTYwOS4zNDQsbWlsbGltZXRlcnM6MWUzLG1pbGxpbWV0cmVzOjFlMyxuYXV0aWNhbG1pbGVzOjEvMTg1MixyYWRpYW5zOjEvci5lYXJ0aFJhZGl1cyx5YXJkczoxLzEuMDkzNn0sci5hcmVhRmFjdG9ycz17YWNyZXM6MjQ3MTA1ZS05LGNlbnRpbWV0ZXJzOjFlNCxjZW50aW1ldHJlczoxZTQsZmVldDoxMC43NjM5MTA0MTcsaW5jaGVzOjE1NTAuMDAzMTAwMDA2LGtpbG9tZXRlcnM6MWUtNixraWxvbWV0cmVzOjFlLTYsbWV0ZXJzOjEsbWV0cmVzOjEsbWlsZXM6My44NmUtNyxtaWxsaW1ldGVyczoxZTYsbWlsbGltZXRyZXM6MWU2LHlhcmRzOjEuMTk1OTkwMDQ2fSxyLmZlYXR1cmU9bixyLmdlb21ldHJ5PWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2godm9pZCAwPT09ciYmKHI9e30pLHQpe2Nhc2UiUG9pbnQiOnJldHVybiBhKGUpLmdlb21ldHJ5O2Nhc2UiTGluZVN0cmluZyI6cmV0dXJuIG8oZSkuZ2VvbWV0cnk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gaShlKS5nZW9tZXRyeTtjYXNlIk11bHRpUG9pbnQiOnJldHVybiBjKGUpLmdlb21ldHJ5O2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gbChlKS5nZW9tZXRyeTtjYXNlIk11bHRpUG9seWdvbiI6cmV0dXJuIHUoZSkuZ2VvbWV0cnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IodCsiIGlzIGludmFsaWQiKX19LHIucG9pbnQ9YSxyLnBvaW50cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxzKHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBhKHQsZSl9KSxyKX0sci5wb2x5Z29uPWksci5wb2x5Z29ucz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxzKHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpKHQsZSl9KSxyKX0sci5saW5lU3RyaW5nPW8sci5saW5lU3RyaW5ncz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxzKHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvKHQsZSl9KSxyKX0sci5mZWF0dXJlQ29sbGVjdGlvbj1zLHIubXVsdGlMaW5lU3RyaW5nPWwsci5tdWx0aVBvaW50PWMsci5tdWx0aVBvbHlnb249dSxyLmdlb21ldHJ5Q29sbGVjdGlvbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxuKHt0eXBlOiJHZW9tZXRyeUNvbGxlY3Rpb24iLGdlb21ldHJpZXM6dH0sZSxyKX0sci5yb3VuZD1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PWUmJihlPTApLGUmJiEoZT49MCkpdGhyb3cgbmV3IEVycm9yKCJwcmVjaXNpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpO3ZhciByPU1hdGgucG93KDEwLGV8fDApO3JldHVybiBNYXRoLnJvdW5kKHQqcikvcn0sci5yYWRpYW5zVG9MZW5ndGg9aCxyLmxlbmd0aFRvUmFkaWFucz1mLHIubGVuZ3RoVG9EZWdyZWVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHAoZih0LGUpKX0sci5iZWFyaW5nVG9BemltdXRoPWZ1bmN0aW9uKHQpe3ZhciBlPXQlMzYwO3JldHVybiBlPDAmJihlKz0zNjApLGV9LHIucmFkaWFuc1RvRGVncmVlcz1wLHIuZGVncmVlc1RvUmFkaWFucz1mdW5jdGlvbih0KXtyZXR1cm4gdCUzNjAqTWF0aC5QSS8xODB9LHIuY29udmVydExlbmd0aD1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwPT09ZSYmKGU9ImtpbG9tZXRlcnMiKSx2b2lkIDA9PT1yJiYocj0ia2lsb21ldGVycyIpLCEodD49MCkpdGhyb3cgbmV3IEVycm9yKCJsZW5ndGggbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpO3JldHVybiBoKGYodCxlKSxyKX0sci5jb252ZXJ0QXJlYT1mdW5jdGlvbih0LGUsbil7aWYodm9pZCAwPT09ZSYmKGU9Im1ldGVycyIpLHZvaWQgMD09PW4mJihuPSJraWxvbWV0ZXJzIiksISh0Pj0wKSl0aHJvdyBuZXcgRXJyb3IoImFyZWEgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpO3ZhciBhPXIuYXJlYUZhY3RvcnNbZV07aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIG9yaWdpbmFsIHVuaXRzIik7dmFyIGk9ci5hcmVhRmFjdG9yc1tuXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZmluYWwgdW5pdHMiKTtyZXR1cm4gdC9hKml9LHIuaXNOdW1iZXI9ZCxyLmlzT2JqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiEhdCYmdC5jb25zdHJ1Y3Rvcj09PU9iamVjdH0sci52YWxpZGF0ZUJCb3g9ZnVuY3Rpb24odCl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJiYm94IGlzIHJlcXVpcmVkIik7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJiYm94IG11c3QgYmUgYW4gQXJyYXkiKTtpZig0IT09dC5sZW5ndGgmJjYhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImJib3ggbXVzdCBiZSBhbiBBcnJheSBvZiA0IG9yIDYgbnVtYmVycyIpO3QuZm9yRWFjaChmdW5jdGlvbih0KXtpZighZCh0KSl0aHJvdyBuZXcgRXJyb3IoImJib3ggbXVzdCBvbmx5IGNvbnRhaW4gbnVtYmVycyIpfSl9LHIudmFsaWRhdGVJZD1mdW5jdGlvbih0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoImlkIGlzIHJlcXVpcmVkIik7aWYoLTE9PT1bInN0cmluZyIsIm51bWJlciJdLmluZGV4T2YodHlwZW9mIHQpKXRocm93IG5ldyBFcnJvcigiaWQgbXVzdCBiZSBhIG51bWJlciBvciBhIHN0cmluZyIpfSxyLnJhZGlhbnMyZGVncmVlcz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigibWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYHJhZGlhbnNUb0RlZ3JlZXNgIil9LHIuZGVncmVlczJyYWRpYW5zPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgZGVncmVlc1RvUmFkaWFuc2AiKX0sci5kaXN0YW5jZVRvRGVncmVlcz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigibWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGxlbmd0aFRvRGVncmVlc2AiKX0sci5kaXN0YW5jZVRvUmFkaWFucz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigibWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGxlbmd0aFRvUmFkaWFuc2AiKX0sci5yYWRpYW5zVG9EaXN0YW5jZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigibWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYHJhZGlhbnNUb0xlbmd0aGAiKX0sci5iZWFyaW5nVG9BbmdsZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigibWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGJlYXJpbmdUb0F6aW11dGhgIil9LHIuY29udmVydERpc3RhbmNlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgY29udmVydExlbmd0aGAiKX19LHt9XSw2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49dCgiQHR1cmYvaGVscGVycyIpO2Z1bmN0aW9uIGEodCxlLHIpe2lmKG51bGwhPT10KWZvcih2YXIgbixpLG8scyxsLGMsdSxoLGY9MCxwPTAsZD10LnR5cGUsZz0iRmVhdHVyZUNvbGxlY3Rpb24iPT09ZCx2PSJGZWF0dXJlIj09PWQsbT1nP3QuZmVhdHVyZXMubGVuZ3RoOjEseT0wO3k8bTt5Kyspe2w9KGg9ISEodT1nP3QuZmVhdHVyZXNbeV0uZ2VvbWV0cnk6dj90Lmdlb21ldHJ5OnQpJiYiR2VvbWV0cnlDb2xsZWN0aW9uIj09PXUudHlwZSk/dS5nZW9tZXRyaWVzLmxlbmd0aDoxO2Zvcih2YXIgeD0wO3g8bDt4Kyspe3ZhciBiPTAsXz0wO2lmKG51bGwhPT0ocz1oP3UuZ2VvbWV0cmllc1t4XTp1KSl7Yz1zLmNvb3JkaW5hdGVzO3ZhciB3PXMudHlwZTtzd2l0Y2goZj0hcnx8IlBvbHlnb24iIT09dyYmIk11bHRpUG9seWdvbiIhPT13PzA6MSx3KXtjYXNlIG51bGw6YnJlYWs7Y2FzZSJQb2ludCI6aWYoITE9PT1lKGMscCx5LGIsXykpcmV0dXJuITE7cCsrLGIrKzticmVhaztjYXNlIkxpbmVTdHJpbmciOmNhc2UiTXVsdGlQb2ludCI6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7aWYoITE9PT1lKGNbbl0scCx5LGIsXykpcmV0dXJuITE7cCsrLCJNdWx0aVBvaW50Ij09PXcmJmIrK30iTGluZVN0cmluZyI9PT13JiZiKys7YnJlYWs7Y2FzZSJQb2x5Z29uIjpjYXNlIk11bHRpTGluZVN0cmluZyI6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7Zm9yKGk9MDtpPGNbbl0ubGVuZ3RoLWY7aSsrKXtpZighMT09PWUoY1tuXVtpXSxwLHksYixfKSlyZXR1cm4hMTtwKyt9Ik11bHRpTGluZVN0cmluZyI9PT13JiZiKyssIlBvbHlnb24iPT09dyYmXysrfSJQb2x5Z29uIj09PXcmJmIrKzticmVhaztjYXNlIk11bHRpUG9seWdvbiI6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7Zm9yKF89MCxpPTA7aTxjW25dLmxlbmd0aDtpKyspe2ZvcihvPTA7bzxjW25dW2ldLmxlbmd0aC1mO28rKyl7aWYoITE9PT1lKGNbbl1baV1bb10scCx5LGIsXykpcmV0dXJuITE7cCsrfV8rK31iKyt9YnJlYWs7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmZvcihuPTA7bjxzLmdlb21ldHJpZXMubGVuZ3RoO24rKylpZighMT09PWEocy5nZW9tZXRyaWVzW25dLGUscikpcmV0dXJuITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gR2VvbWV0cnkgVHlwZSIpfX19fX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI7c3dpdGNoKHQudHlwZSl7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6Zm9yKHI9MDtyPHQuZmVhdHVyZXMubGVuZ3RoJiYhMSE9PWUodC5mZWF0dXJlc1tyXS5wcm9wZXJ0aWVzLHIpO3IrKyk7YnJlYWs7Y2FzZSJGZWF0dXJlIjplKHQucHJvcGVydGllcywwKX19ZnVuY3Rpb24gbyh0LGUpe2lmKCJGZWF0dXJlIj09PXQudHlwZSllKHQsMCk7ZWxzZSBpZigiRmVhdHVyZUNvbGxlY3Rpb24iPT09dC50eXBlKWZvcih2YXIgcj0wO3I8dC5mZWF0dXJlcy5sZW5ndGgmJiExIT09ZSh0LmZlYXR1cmVzW3JdLHIpO3IrKyk7fWZ1bmN0aW9uIHModCxlKXt2YXIgcixuLGEsaSxvLHMsbCxjLHUsaCxmPTAscD0iRmVhdHVyZUNvbGxlY3Rpb24iPT09dC50eXBlLGQ9IkZlYXR1cmUiPT09dC50eXBlLGc9cD90LmZlYXR1cmVzLmxlbmd0aDoxO2ZvcihyPTA7cjxnO3IrKyl7Zm9yKHM9cD90LmZlYXR1cmVzW3JdLmdlb21ldHJ5OmQ/dC5nZW9tZXRyeTp0LGM9cD90LmZlYXR1cmVzW3JdLnByb3BlcnRpZXM6ZD90LnByb3BlcnRpZXM6e30sdT1wP3QuZmVhdHVyZXNbcl0uYmJveDpkP3QuYmJveDp2b2lkIDAsaD1wP3QuZmVhdHVyZXNbcl0uaWQ6ZD90LmlkOnZvaWQgMCxvPShsPSEhcyYmIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1zLnR5cGUpP3MuZ2VvbWV0cmllcy5sZW5ndGg6MSxhPTA7YTxvO2ErKylpZihudWxsIT09KGk9bD9zLmdlb21ldHJpZXNbYV06cykpc3dpdGNoKGkudHlwZSl7Y2FzZSJQb2ludCI6Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9pbnQiOmNhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmNhc2UiTXVsdGlQb2x5Z29uIjppZighMT09PWUoaSxmLGMsdSxoKSlyZXR1cm4hMTticmVhaztjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6Zm9yKG49MDtuPGkuZ2VvbWV0cmllcy5sZW5ndGg7bisrKWlmKCExPT09ZShpLmdlb21ldHJpZXNbbl0sZixjLHUsaCkpcmV0dXJuITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gR2VvbWV0cnkgVHlwZSIpfWVsc2UgaWYoITE9PT1lKG51bGwsZixjLHUsaCkpcmV0dXJuITE7ZisrfX1mdW5jdGlvbiBsKHQsZSl7cyh0LGZ1bmN0aW9uKHQscixhLGksbyl7dmFyIHMsbD1udWxsPT09dD9udWxsOnQudHlwZTtzd2l0Y2gobCl7Y2FzZSBudWxsOmNhc2UiUG9pbnQiOmNhc2UiTGluZVN0cmluZyI6Y2FzZSJQb2x5Z29uIjpyZXR1cm4hMSE9PWUobi5mZWF0dXJlKHQsYSx7YmJveDppLGlkOm99KSxyLDApJiZ2b2lkIDB9c3dpdGNoKGwpe2Nhc2UiTXVsdGlQb2ludCI6cz0iUG9pbnQiO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpzPSJMaW5lU3RyaW5nIjticmVhaztjYXNlIk11bHRpUG9seWdvbiI6cz0iUG9seWdvbiJ9Zm9yKHZhciBjPTA7Yzx0LmNvb3JkaW5hdGVzLmxlbmd0aDtjKyspe3ZhciB1PXt0eXBlOnMsY29vcmRpbmF0ZXM6dC5jb29yZGluYXRlc1tjXX07aWYoITE9PT1lKG4uZmVhdHVyZSh1LGEpLHIsYykpcmV0dXJuITF9fSl9ZnVuY3Rpb24gYyh0LGUpe2wodCxmdW5jdGlvbih0LHIsaSl7dmFyIG89MDtpZih0Lmdlb21ldHJ5KXt2YXIgcz10Lmdlb21ldHJ5LnR5cGU7aWYoIlBvaW50IiE9PXMmJiJNdWx0aVBvaW50IiE9PXMpe3ZhciBsLGM9MCx1PTAsaD0wO3JldHVybiExIT09YSh0LGZ1bmN0aW9uKGEscyxmLHAsZCl7aWYodm9pZCAwPT09bHx8cj5jfHxwPnV8fGQ+aClyZXR1cm4gbD1hLGM9cix1PXAsaD1kLHZvaWQobz0wKTt2YXIgZz1uLmxpbmVTdHJpbmcoW2wsYV0sdC5wcm9wZXJ0aWVzKTtpZighMT09PWUoZyxyLGksZCxvKSlyZXR1cm4hMTtvKyssbD1hfSkmJnZvaWQgMH19fSl9ZnVuY3Rpb24gdSh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiZ2VvanNvbiBpcyByZXF1aXJlZCIpO2wodCxmdW5jdGlvbih0LHIsYSl7aWYobnVsbCE9PXQuZ2VvbWV0cnkpe3ZhciBpPXQuZ2VvbWV0cnkudHlwZSxvPXQuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7c3dpdGNoKGkpe2Nhc2UiTGluZVN0cmluZyI6aWYoITE9PT1lKHQscixhLDAsMCkpcmV0dXJuITE7YnJlYWs7Y2FzZSJQb2x5Z29uIjpmb3IodmFyIHM9MDtzPG8ubGVuZ3RoO3MrKylpZighMT09PWUobi5saW5lU3RyaW5nKG9bc10sdC5wcm9wZXJ0aWVzKSxyLGEscykpcmV0dXJuITF9fX0pfXIuY29vcmRFYWNoPWEsci5jb29yZFJlZHVjZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1yO3JldHVybiBhKHQsZnVuY3Rpb24odCxuLGEsbyxzKXtpPTA9PT1uJiZ2b2lkIDA9PT1yP3Q6ZShpLHQsbixhLG8scyl9LG4pLGl9LHIucHJvcEVhY2g9aSxyLnByb3BSZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXI7cmV0dXJuIGkodCxmdW5jdGlvbih0LGEpe249MD09PWEmJnZvaWQgMD09PXI/dDplKG4sdCxhKX0pLG59LHIuZmVhdHVyZUVhY2g9byxyLmZlYXR1cmVSZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXI7cmV0dXJuIG8odCxmdW5jdGlvbih0LGEpe249MD09PWEmJnZvaWQgMD09PXI/dDplKG4sdCxhKX0pLG59LHIuY29vcmRBbGw9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIGEodCxmdW5jdGlvbih0KXtlLnB1c2godCl9KSxlfSxyLmdlb21FYWNoPXMsci5nZW9tUmVkdWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yO3JldHVybiBzKHQsZnVuY3Rpb24odCxhLGksbyxzKXtuPTA9PT1hJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsYSxpLG8scyl9KSxufSxyLmZsYXR0ZW5FYWNoPWwsci5mbGF0dGVuUmVkdWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yO3JldHVybiBsKHQsZnVuY3Rpb24odCxhLGkpe249MD09PWEmJjA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsYSxpKX0pLG59LHIuc2VnbWVudEVhY2g9YyxyLnNlZ21lbnRSZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIsYT0hMTtyZXR1cm4gYyh0LGZ1bmN0aW9uKHQsaSxvLHMsbCl7bj0hMT09PWEmJnZvaWQgMD09PXI/dDplKG4sdCxpLG8scyxsKSxhPSEwfSksbn0sci5saW5lRWFjaD11LHIubGluZVJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cjtyZXR1cm4gdSh0LGZ1bmN0aW9uKHQsYSxpLG8pe249MD09PWEmJnZvaWQgMD09PXI/dDplKG4sdCxhLGksbyl9KSxufSxyLmZpbmRTZWdtZW50PWZ1bmN0aW9uKHQsZSl7aWYoZT1lfHx7fSwhbi5pc09iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbnMgaXMgaW52YWxpZCIpO3ZhciByLGE9ZS5mZWF0dXJlSW5kZXh8fDAsaT1lLm11bHRpRmVhdHVyZUluZGV4fHwwLG89ZS5nZW9tZXRyeUluZGV4fHwwLHM9ZS5zZWdtZW50SW5kZXh8fDAsbD1lLnByb3BlcnRpZXM7c3dpdGNoKHQudHlwZSl7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6YTwwJiYoYT10LmZlYXR1cmVzLmxlbmd0aCthKSxsPWx8fHQuZmVhdHVyZXNbYV0ucHJvcGVydGllcyxyPXQuZmVhdHVyZXNbYV0uZ2VvbWV0cnk7YnJlYWs7Y2FzZSJGZWF0dXJlIjpsPWx8fHQucHJvcGVydGllcyxyPXQuZ2VvbWV0cnk7YnJlYWs7Y2FzZSJQb2ludCI6Y2FzZSJNdWx0aVBvaW50IjpyZXR1cm4gbnVsbDtjYXNlIkxpbmVTdHJpbmciOmNhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmNhc2UiTXVsdGlQb2x5Z29uIjpyPXQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImdlb2pzb24gaXMgaW52YWxpZCIpfWlmKG51bGw9PT1yKXJldHVybiBudWxsO3ZhciBjPXIuY29vcmRpbmF0ZXM7c3dpdGNoKHIudHlwZSl7Y2FzZSJQb2ludCI6Y2FzZSJNdWx0aVBvaW50IjpyZXR1cm4gbnVsbDtjYXNlIkxpbmVTdHJpbmciOnJldHVybiBzPDAmJihzPWMubGVuZ3RoK3MtMSksbi5saW5lU3RyaW5nKFtjW3NdLGNbcysxXV0sbCxlKTtjYXNlIlBvbHlnb24iOnJldHVybiBvPDAmJihvPWMubGVuZ3RoK28pLHM8MCYmKHM9Y1tvXS5sZW5ndGgrcy0xKSxuLmxpbmVTdHJpbmcoW2Nbb11bc10sY1tvXVtzKzFdXSxsLGUpO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gaTwwJiYoaT1jLmxlbmd0aCtpKSxzPDAmJihzPWNbaV0ubGVuZ3RoK3MtMSksbi5saW5lU3RyaW5nKFtjW2ldW3NdLGNbaV1bcysxXV0sbCxlKTtjYXNlIk11bHRpUG9seWdvbiI6cmV0dXJuIGk8MCYmKGk9Yy5sZW5ndGgraSksbzwwJiYobz1jW2ldLmxlbmd0aCtvKSxzPDAmJihzPWNbaV1bb10ubGVuZ3RoLXMtMSksbi5saW5lU3RyaW5nKFtjW2ldW29dW3NdLGNbaV1bb11bcysxXV0sbCxlKX10aHJvdyBuZXcgRXJyb3IoImdlb2pzb24gaXMgaW52YWxpZCIpfSxyLmZpbmRQb2ludD1mdW5jdGlvbih0LGUpe2lmKGU9ZXx8e30sIW4uaXNPYmplY3QoZSkpdGhyb3cgbmV3IEVycm9yKCJvcHRpb25zIGlzIGludmFsaWQiKTt2YXIgcixhPWUuZmVhdHVyZUluZGV4fHwwLGk9ZS5tdWx0aUZlYXR1cmVJbmRleHx8MCxvPWUuZ2VvbWV0cnlJbmRleHx8MCxzPWUuY29vcmRJbmRleHx8MCxsPWUucHJvcGVydGllcztzd2l0Y2godC50eXBlKXtjYXNlIkZlYXR1cmVDb2xsZWN0aW9uIjphPDAmJihhPXQuZmVhdHVyZXMubGVuZ3RoK2EpLGw9bHx8dC5mZWF0dXJlc1thXS5wcm9wZXJ0aWVzLHI9dC5mZWF0dXJlc1thXS5nZW9tZXRyeTticmVhaztjYXNlIkZlYXR1cmUiOmw9bHx8dC5wcm9wZXJ0aWVzLHI9dC5nZW9tZXRyeTticmVhaztjYXNlIlBvaW50IjpjYXNlIk11bHRpUG9pbnQiOnJldHVybiBudWxsO2Nhc2UiTGluZVN0cmluZyI6Y2FzZSJQb2x5Z29uIjpjYXNlIk11bHRpTGluZVN0cmluZyI6Y2FzZSJNdWx0aVBvbHlnb24iOnI9dDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiZ2VvanNvbiBpcyBpbnZhbGlkIil9aWYobnVsbD09PXIpcmV0dXJuIG51bGw7dmFyIGM9ci5jb29yZGluYXRlcztzd2l0Y2goci50eXBlKXtjYXNlIlBvaW50IjpyZXR1cm4gbi5wb2ludChjLGwsZSk7Y2FzZSJNdWx0aVBvaW50IjpyZXR1cm4gaTwwJiYoaT1jLmxlbmd0aCtpKSxuLnBvaW50KGNbaV0sbCxlKTtjYXNlIkxpbmVTdHJpbmciOnJldHVybiBzPDAmJihzPWMubGVuZ3RoK3MpLG4ucG9pbnQoY1tzXSxsLGUpO2Nhc2UiUG9seWdvbiI6cmV0dXJuIG88MCYmKG89Yy5sZW5ndGgrbyksczwwJiYocz1jW29dLmxlbmd0aCtzKSxuLnBvaW50KGNbb11bc10sbCxlKTtjYXNlIk11bHRpTGluZVN0cmluZyI6cmV0dXJuIGk8MCYmKGk9Yy5sZW5ndGgraSksczwwJiYocz1jW2ldLmxlbmd0aCtzKSxuLnBvaW50KGNbaV1bc10sbCxlKTtjYXNlIk11bHRpUG9seWdvbiI6cmV0dXJuIGk8MCYmKGk9Yy5sZW5ndGgraSksbzwwJiYobz1jW2ldLmxlbmd0aCtvKSxzPDAmJihzPWNbaV1bb10ubGVuZ3RoLXMpLG4ucG9pbnQoY1tpXVtvXVtzXSxsLGUpfXRocm93IG5ldyBFcnJvcigiZ2VvanNvbiBpcyBpbnZhbGlkIil9fSx7IkB0dXJmL2hlbHBlcnMiOjYwfV0sNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49InVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWstbWFwIik6V2Vha01hcCxhPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksbz1uZXcgbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9by5nZXQodCkscj1lJiYoZS5fdHJpYW5nbGVCdWZmZXIuaGFuZGxlfHxlLl90cmlhbmdsZUJ1ZmZlci5idWZmZXIpO2lmKCFyfHwhdC5pc0J1ZmZlcihyKSl7dmFyIG49YSh0LG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC0xLDQsNCwtMV0pKTsoZT1pKHQsW3tidWZmZXI6bix0eXBlOnQuRkxPQVQsc2l6ZToyfV0pKS5fdHJpYW5nbGVCdWZmZXI9bixvLnNldCh0LGUpfWUuYmluZCgpLHQuZHJhd0FycmF5cyh0LlRSSUFOR0xFUywwLDMpLGUudW5iaW5kKCl9fSx7ImdsLWJ1ZmZlciI6MjQ0LCJnbC12YW8iOjMyOSwid2Vhay1tYXAiOjU1MX1dLDYzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wLG49MCxhPTA7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3ZhciBpPSh0PXQuc2xpY2UoKSlbMF0sbz1pLnRvVXBwZXJDYXNlKCk7aWYoaSE9bylzd2l0Y2godFswXT1vLGkpe2Nhc2UiYSI6dFs2XSs9bix0WzddKz1hO2JyZWFrO2Nhc2UidiI6dFsxXSs9YTticmVhaztjYXNlImgiOnRbMV0rPW47YnJlYWs7ZGVmYXVsdDpmb3IodmFyIHM9MTtzPHQubGVuZ3RoOyl0W3MrK10rPW4sdFtzKytdKz1hfXN3aXRjaChvKXtjYXNlIloiOm49ZSxhPXI7YnJlYWs7Y2FzZSJIIjpuPXRbMV07YnJlYWs7Y2FzZSJWIjphPXRbMV07YnJlYWs7Y2FzZSJNIjpuPWU9dFsxXSxhPXI9dFsyXTticmVhaztkZWZhdWx0Om49dFt0Lmxlbmd0aC0yXSxhPXRbdC5sZW5ndGgtMV19cmV0dXJuIHR9KX19LHt9XSw2NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoInBhZC1sZWZ0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlPSJudW1iZXIiPT10eXBlb2YgZT9lOjEscj1yfHwiOiAiO3ZhciBhPXQuc3BsaXQoL1xyP1xuLyksaT1TdHJpbmcoYS5sZW5ndGgrZS0xKS5sZW5ndGg7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKHQsYSl7dmFyIG89YStlLHM9U3RyaW5nKG8pLmxlbmd0aCxsPW4obyxpLXMpO3JldHVybiBsK3IrdH0pLmpvaW4oIlxuIil9fSx7InBhZC1sZWZ0Ijo0NTl9XSw2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuWzBdO2Zvcih2YXIgcj10WzBdLmxlbmd0aCxuPVt0WzBdXSxpPVswXSxvPTE7bzxlOysrbylpZihuLnB1c2godFtvXSksYShuLHIpKXtpZihpLnB1c2gobyksaS5sZW5ndGg9PT1yKzEpcmV0dXJuIGl9ZWxzZSBuLnBvcCgpO3JldHVybiBpfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKTtmdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKzEpLGE9MDthPHQubGVuZ3RoOysrYSlyW2FdPXRbYV07Zm9yKGE9MDthPD10Lmxlbmd0aDsrK2Epe2Zvcih2YXIgaT10Lmxlbmd0aDtpPD1lOysraSl7Zm9yKHZhciBvPW5ldyBBcnJheShlKSxzPTA7czxlOysrcylvW3NdPU1hdGgucG93KGkrMS1hLHMpO3JbaV09b31pZihuLmFwcGx5KHZvaWQgMCxyKSlyZXR1cm4hMH1yZXR1cm4hMX19LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MDl9XSw2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlKS5maWx0ZXIoZnVuY3Rpb24ocil7Zm9yKHZhciBuPW5ldyBBcnJheShyLmxlbmd0aCksaT0wO2k8ci5sZW5ndGg7KytpKW5baV09ZVtyW2ldXTtyZXR1cm4gYShuKSp0PDF9KX07dmFyIG49dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxhPXQoImNpcmN1bXJhZGl1cyIpfSx7Y2lyY3VtcmFkaXVzOjExNiwiZGVsYXVuYXktdHJpYW5ndWxhdGUiOjE2N31dLDY3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEobih0LGUpKX07dmFyIG49dCgiYWxwaGEtY29tcGxleCIpLGE9dCgic2ltcGxpY2lhbC1jb21wbGV4LWJvdW5kYXJ5Iil9LHsiYWxwaGEtY29tcGxleCI6NjYsInNpbXBsaWNpYWwtY29tcGxleC1ib3VuZGFyeSI6NTE2fV0sNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkiKTtlPW51bGw9PWU/MTpNYXRoLmZsb29yKGUpO2Zvcih2YXIgcj1BcnJheSgyKmUpLG49MDtuPGU7bisrKXtmb3IodmFyIGE9LTEvMCxpPTEvMCxvPW4scz10Lmxlbmd0aDtvPHM7bys9ZSl0W29dPmEmJihhPXRbb10pLHRbb108aSYmKGk9dFtvXSk7cltuXT1pLHJbZStuXT1hfXJldHVybiByfX0se31dLDY5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Im51bWJlciI9PXR5cGVvZiB0LG49Im51bWJlciI9PXR5cGVvZiBlO3ImJiFuPyhlPXQsdD0wKTpyfHxufHwodD0wLGU9MCk7dmFyIGE9KGV8PTApLSh0fD0wKTtpZihhPDApdGhyb3cgbmV3IEVycm9yKCJhcnJheSBsZW5ndGggbXVzdCBiZSBwb3NpdGl2ZSIpO2Zvcih2YXIgaT1uZXcgQXJyYXkoYSksbz0wLHM9dDtvPGE7bysrLHMrKylpW29dPXM7cmV0dXJuIGl9fSx7fV0sNzA6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQsZSl7aWYodD09PWUpcmV0dXJuIDA7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsYT0wLGk9TWF0aC5taW4ocixuKTthPGk7KythKWlmKHRbYV0hPT1lW2FdKXtyPXRbYV0sbj1lW2FdO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH1mdW5jdGlvbiBpKHQpe3JldHVybiByLkJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIHIuQnVmZmVyLmlzQnVmZmVyP3IuQnVmZmVyLmlzQnVmZmVyKHQpOiEobnVsbD09dHx8IXQuX2lzQnVmZmVyKX12YXIgbz10KCJ1dGlsLyIpLHM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxsPUFycmF5LnByb3RvdHlwZS5zbGljZSxjPSJmb28iPT09ZnVuY3Rpb24oKXt9Lm5hbWU7ZnVuY3Rpb24gdSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIWkodCkmJigiZnVuY3Rpb24iPT10eXBlb2Ygci5BcnJheUJ1ZmZlciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KHQpOiEhdCYmKHQgaW5zdGFuY2VvZiBEYXRhVmlld3x8ISEodC5idWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSkpfXZhciBmPWUuZXhwb3J0cz15LHA9L1xzKmZ1bmN0aW9uXHMrKFteXChcc10qKVxzKi87ZnVuY3Rpb24gZCh0KXtpZihvLmlzRnVuY3Rpb24odCkpe2lmKGMpcmV0dXJuIHQubmFtZTt2YXIgZT10LnRvU3RyaW5nKCkubWF0Y2gocCk7cmV0dXJuIGUmJmVbMV19fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC5sZW5ndGg8ZT90OnQuc2xpY2UoMCxlKTp0fWZ1bmN0aW9uIHYodCl7aWYoY3x8IW8uaXNGdW5jdGlvbih0KSlyZXR1cm4gby5pbnNwZWN0KHQpO3ZhciBlPWQodCk7cmV0dXJuIltGdW5jdGlvbiIrKGU/IjogIitlOiIiKSsiXSJ9ZnVuY3Rpb24gbSh0LGUscixuLGEpe3Rocm93IG5ldyBmLkFzc2VydGlvbkVycm9yKHttZXNzYWdlOnIsYWN0dWFsOnQsZXhwZWN0ZWQ6ZSxvcGVyYXRvcjpuLHN0YWNrU3RhcnRGdW5jdGlvbjphfSl9ZnVuY3Rpb24geSh0LGUpe3R8fG0odCwhMCxlLCI9PSIsZi5vayl9ZnVuY3Rpb24geCh0LGUscixuKXtpZih0PT09ZSlyZXR1cm4hMDtpZihpKHQpJiZpKGUpKXJldHVybiAwPT09YSh0LGUpO2lmKG8uaXNEYXRlKHQpJiZvLmlzRGF0ZShlKSlyZXR1cm4gdC5nZXRUaW1lKCk9PT1lLmdldFRpbWUoKTtpZihvLmlzUmVnRXhwKHQpJiZvLmlzUmVnRXhwKGUpKXJldHVybiB0LnNvdXJjZT09PWUuc291cmNlJiZ0Lmdsb2JhbD09PWUuZ2xvYmFsJiZ0Lm11bHRpbGluZT09PWUubXVsdGlsaW5lJiZ0Lmxhc3RJbmRleD09PWUubGFzdEluZGV4JiZ0Lmlnbm9yZUNhc2U9PT1lLmlnbm9yZUNhc2U7aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8bnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZSl7aWYoaCh0KSYmaChlKSYmdSh0KT09PXUoZSkmJiEodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpcmV0dXJuIDA9PT1hKG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpO2lmKGkodCkhPT1pKGUpKXJldHVybiExO3ZhciBzPShuPW58fHthY3R1YWw6W10sZXhwZWN0ZWQ6W119KS5hY3R1YWwuaW5kZXhPZih0KTtyZXR1cm4tMSE9PXMmJnM9PT1uLmV4cGVjdGVkLmluZGV4T2YoZSl8fChuLmFjdHVhbC5wdXNoKHQpLG4uZXhwZWN0ZWQucHVzaChlKSxmdW5jdGlvbih0LGUscixuKXtpZihudWxsPT10fHxudWxsPT1lKXJldHVybiExO2lmKG8uaXNQcmltaXRpdmUodCl8fG8uaXNQcmltaXRpdmUoZSkpcmV0dXJuIHQ9PT1lO2lmKHImJk9iamVjdC5nZXRQcm90b3R5cGVPZih0KSE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSlyZXR1cm4hMTt2YXIgYT1iKHQpLGk9YihlKTtpZihhJiYhaXx8IWEmJmkpcmV0dXJuITE7aWYoYSlyZXR1cm4gdD1sLmNhbGwodCksZT1sLmNhbGwoZSkseCh0LGUscik7dmFyIHMsYyx1PWsodCksaD1rKGUpO2lmKHUubGVuZ3RoIT09aC5sZW5ndGgpcmV0dXJuITE7Zm9yKHUuc29ydCgpLGguc29ydCgpLGM9dS5sZW5ndGgtMTtjPj0wO2MtLSlpZih1W2NdIT09aFtjXSlyZXR1cm4hMTtmb3IoYz11Lmxlbmd0aC0xO2M+PTA7Yy0tKWlmKHM9dVtjXSwheCh0W3NdLGVbc10scixuKSlyZXR1cm4hMTtyZXR1cm4hMH0odCxlLHIsbikpfXJldHVybiByP3Q9PT1lOnQ9PWV9ZnVuY3Rpb24gYih0KXtyZXR1cm4iW29iamVjdCBBcmd1bWVudHNdIj09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIF8odCxlKXtpZighdHx8IWUpcmV0dXJuITE7aWYoIltvYmplY3QgUmVnRXhwXSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gZS50ZXN0KHQpO3RyeXtpZih0IGluc3RhbmNlb2YgZSlyZXR1cm4hMH1jYXRjaCh0KXt9cmV0dXJuIUVycm9yLmlzUHJvdG90eXBlT2YoZSkmJiEwPT09ZS5jYWxsKHt9LHQpfWZ1bmN0aW9uIHcodCxlLHIsbil7dmFyIGE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignImJsb2NrIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTsic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxhPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXt0KCl9Y2F0Y2godCl7ZT10fXJldHVybiBlfShlKSxuPShyJiZyLm5hbWU/IiAoIityLm5hbWUrIikuIjoiLiIpKyhuPyIgIituOiIuIiksdCYmIWEmJm0oYSxyLCJNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvbiIrbik7dmFyIGk9InN0cmluZyI9PXR5cGVvZiBuLHM9IXQmJmEmJiFyO2lmKCghdCYmby5pc0Vycm9yKGEpJiZpJiZfKGEscil8fHMpJiZtKGEsciwiR290IHVud2FudGVkIGV4Y2VwdGlvbiIrbiksdCYmYSYmciYmIV8oYSxyKXx8IXQmJmEpdGhyb3cgYX1mLkFzc2VydGlvbkVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlO3RoaXMubmFtZT0iQXNzZXJ0aW9uRXJyb3IiLHRoaXMuYWN0dWFsPXQuYWN0dWFsLHRoaXMuZXhwZWN0ZWQ9dC5leHBlY3RlZCx0aGlzLm9wZXJhdG9yPXQub3BlcmF0b3IsdC5tZXNzYWdlPyh0aGlzLm1lc3NhZ2U9dC5tZXNzYWdlLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMSk6KHRoaXMubWVzc2FnZT1nKHYoKGU9dGhpcykuYWN0dWFsKSwxMjgpKyIgIitlLm9wZXJhdG9yKyIgIitnKHYoZS5leHBlY3RlZCksMTI4KSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITApO3ZhciByPXQuc3RhY2tTdGFydEZ1bmN0aW9ufHxtO2lmKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMscik7ZWxzZXt2YXIgbj1uZXcgRXJyb3I7aWYobi5zdGFjayl7dmFyIGE9bi5zdGFjayxpPWQociksbz1hLmluZGV4T2YoIlxuIitpKTtpZihvPj0wKXt2YXIgcz1hLmluZGV4T2YoIlxuIixvKzEpO2E9YS5zdWJzdHJpbmcocysxKX10aGlzLnN0YWNrPWF9fX0sby5pbmhlcml0cyhmLkFzc2VydGlvbkVycm9yLEVycm9yKSxmLmZhaWw9bSxmLm9rPXksZi5lcXVhbD1mdW5jdGlvbih0LGUscil7dCE9ZSYmbSh0LGUsciwiPT0iLGYuZXF1YWwpfSxmLm5vdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT1lJiZtKHQsZSxyLCIhPSIsZi5ub3RFcXVhbCl9LGYuZGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt4KHQsZSwhMSl8fG0odCxlLHIsImRlZXBFcXVhbCIsZi5kZWVwRXF1YWwpfSxmLmRlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7eCh0LGUsITApfHxtKHQsZSxyLCJkZWVwU3RyaWN0RXF1YWwiLGYuZGVlcFN0cmljdEVxdWFsKX0sZi5ub3REZWVwRXF1YWw9ZnVuY3Rpb24odCxlLHIpe3godCxlLCExKSYmbSh0LGUsciwibm90RGVlcEVxdWFsIixmLm5vdERlZXBFcXVhbCl9LGYubm90RGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIHQoZSxyLG4pe3goZSxyLCEwKSYmbShlLHIsbiwibm90RGVlcFN0cmljdEVxdWFsIix0KX0sZi5zdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7dCE9PWUmJm0odCxlLHIsIj09PSIsZi5zdHJpY3RFcXVhbCl9LGYubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3Q9PT1lJiZtKHQsZSxyLCIhPT0iLGYubm90U3RyaWN0RXF1YWwpfSxmLnRocm93cz1mdW5jdGlvbih0LGUscil7dyghMCx0LGUscil9LGYuZG9lc05vdFRocm93PWZ1bmN0aW9uKHQsZSxyKXt3KCExLHQsZSxyKX0sZi5pZkVycm9yPWZ1bmN0aW9uKHQpe2lmKHQpdGhyb3cgdH0sZi5zdHJpY3Q9bihmdW5jdGlvbiB0KGUscil7ZXx8bShlLCEwLHIsIj09Iix0KX0sZix7ZXF1YWw6Zi5zdHJpY3RFcXVhbCxkZWVwRXF1YWw6Zi5kZWVwU3RyaWN0RXF1YWwsbm90RXF1YWw6Zi5ub3RTdHJpY3RFcXVhbCxub3REZWVwRXF1YWw6Zi5ub3REZWVwU3RyaWN0RXF1YWx9KSxmLnN0cmljdC5zdHJpY3Q9Zi5zdHJpY3Q7dmFyIGs9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KXMuY2FsbCh0LHIpJiZlLnB1c2gocik7cmV0dXJuIGV9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Im9iamVjdC1hc3NpZ24iOjQ1NiwidXRpbC8iOjczfV0sNzE6W2Z1bmN0aW9uKHQsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTplLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fX0se31dLDcyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYib2JqZWN0Ij09dHlwZW9mIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlYWRVSW50OH19LHt9XSw3MzpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlLG4pe3ZhciBhPS8lW3NkaiVdL2c7ci5mb3JtYXQ9ZnVuY3Rpb24odCl7aWYoIW0odCkpe2Zvcih2YXIgZT1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllLnB1c2gocyhhcmd1bWVudHNbcl0pKTtyZXR1cm4gZS5qb2luKCIgIil9cj0xO2Zvcih2YXIgbj1hcmd1bWVudHMsaT1uLmxlbmd0aCxvPVN0cmluZyh0KS5yZXBsYWNlKGEsZnVuY3Rpb24odCl7aWYoIiUlIj09PXQpcmV0dXJuIiUiO2lmKHI+PWkpcmV0dXJuIHQ7c3dpdGNoKHQpe2Nhc2UiJXMiOnJldHVybiBTdHJpbmcobltyKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKG5bcisrXSk7Y2FzZSIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShuW3IrK10pfWNhdGNoKHQpe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiB0fX0pLGw9bltyXTtyPGk7bD1uWysrcl0pZyhsKXx8IWIobCk/bys9IiAiK2w6bys9IiAiK3MobCk7cmV0dXJuIG99LHIuZGVwcmVjYXRlPWZ1bmN0aW9uKHQsYSl7aWYoeShuLnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiByLmRlcHJlY2F0ZSh0LGEpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYoITA9PT1lLm5vRGVwcmVjYXRpb24pcmV0dXJuIHQ7dmFyIGk9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWkpe2lmKGUudGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3IoYSk7ZS50cmFjZURlcHJlY2F0aW9uP2NvbnNvbGUudHJhY2UoYSk6Y29uc29sZS5lcnJvcihhKSxpPSEwfXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciBpLG89e307ZnVuY3Rpb24gcyh0LGUpe3ZhciBuPXtzZWVuOltdLHN0eWxpemU6Y307cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihuLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKG4uY29sb3JzPWFyZ3VtZW50c1szXSksZChlKT9uLnNob3dIaWRkZW49ZTplJiZyLl9leHRlbmQobixlKSx5KG4uc2hvd0hpZGRlbikmJihuLnNob3dIaWRkZW49ITEpLHkobi5kZXB0aCkmJihuLmRlcHRoPTIpLHkobi5jb2xvcnMpJiYobi5jb2xvcnM9ITEpLHkobi5jdXN0b21JbnNwZWN0KSYmKG4uY3VzdG9tSW5zcGVjdD0hMCksbi5jb2xvcnMmJihuLnN0eWxpemU9bCksdShuLHQsbi5kZXB0aCl9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXMuc3R5bGVzW2VdO3JldHVybiByPyJceDFiWyIrcy5jb2xvcnNbcl1bMF0rIm0iK3QrIlx4MWJbIitzLmNvbG9yc1tyXVsxXSsibSI6dH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHR9ZnVuY3Rpb24gdSh0LGUsbil7aWYodC5jdXN0b21JbnNwZWN0JiZlJiZrKGUuaW5zcGVjdCkmJmUuaW5zcGVjdCE9PXIuaW5zcGVjdCYmKCFlLmNvbnN0cnVjdG9yfHxlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PWUpKXt2YXIgYT1lLmluc3BlY3Qobix0KTtyZXR1cm4gbShhKXx8KGE9dSh0LGEsbikpLGF9dmFyIGk9ZnVuY3Rpb24odCxlKXtpZih5KGUpKXJldHVybiB0LnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKG0oZSkpe3ZhciByPSInIitKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykrIiciO3JldHVybiB0LnN0eWxpemUociwic3RyaW5nIil9aWYodihlKSlyZXR1cm4gdC5zdHlsaXplKCIiK2UsIm51bWJlciIpO2lmKGQoZSkpcmV0dXJuIHQuc3R5bGl6ZSgiIitlLCJib29sZWFuIik7aWYoZyhlKSlyZXR1cm4gdC5zdHlsaXplKCJudWxsIiwibnVsbCIpfSh0LGUpO2lmKGkpcmV0dXJuIGk7dmFyIG89T2JqZWN0LmtleXMoZSkscz1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQscil7ZVt0XT0hMH0pLGV9KG8pO2lmKHQuc2hvd0hpZGRlbiYmKG89T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkpLHcoZSkmJihvLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8by5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gaChlKTtpZigwPT09by5sZW5ndGgpe2lmKGsoZSkpe3ZhciBsPWUubmFtZT8iOiAiK2UubmFtZToiIjtyZXR1cm4gdC5zdHlsaXplKCJbRnVuY3Rpb24iK2wrIl0iLCJzcGVjaWFsIil9aWYoeChlKSlyZXR1cm4gdC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwicmVnZXhwIik7aWYoXyhlKSlyZXR1cm4gdC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksImRhdGUiKTtpZih3KGUpKXJldHVybiBoKGUpfXZhciBjLGI9IiIsVD0hMSxNPVsieyIsIn0iXTsocChlKSYmKFQ9ITAsTT1bIlsiLCJdIl0pLGsoZSkpJiYoYj0iIFtGdW5jdGlvbiIrKGUubmFtZT8iOiAiK2UubmFtZToiIikrIl0iKTtyZXR1cm4geChlKSYmKGI9IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSksXyhlKSYmKGI9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwoZSkpLHcoZSkmJihiPSIgIitoKGUpKSwwIT09by5sZW5ndGh8fFQmJjAhPWUubGVuZ3RoP248MD94KGUpP3Quc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksInJlZ2V4cCIpOnQuc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KHQuc2Vlbi5wdXNoKGUpLGM9VD9mdW5jdGlvbih0LGUscixuLGEpe2Zvcih2YXIgaT1bXSxvPTAscz1lLmxlbmd0aDtvPHM7KytvKVMoZSxTdHJpbmcobykpP2kucHVzaChmKHQsZSxyLG4sU3RyaW5nKG8pLCEwKSk6aS5wdXNoKCIiKTtyZXR1cm4gYS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EubWF0Y2goL15cZCskLyl8fGkucHVzaChmKHQsZSxyLG4sYSwhMCkpfSksaX0odCxlLG4scyxvKTpvLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gZih0LGUsbixzLHIsVCl9KSx0LnNlZW4ucG9wKCksZnVuY3Rpb24odCxlLHIpe2lmKHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDAsZS5pbmRleE9mKCJcbiIpPj0wJiYwLHQrZS5yZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0sMCk+NjApcmV0dXJuIHJbMF0rKCIiPT09ZT8iIjplKyJcbiAiKSsiICIrdC5qb2luKCIsXG4gICIpKyIgIityWzFdO3JldHVybiByWzBdK2UrIiAiK3Quam9pbigiLCAiKSsiICIrclsxXX0oYyxiLE0pKTpNWzBdK2IrTVsxXX1mdW5jdGlvbiBoKHQpe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSsiXSJ9ZnVuY3Rpb24gZih0LGUscixuLGEsaSl7dmFyIG8scyxsO2lmKChsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxhKXx8e3ZhbHVlOmVbYV19KS5nZXQ/cz1sLnNldD90LnN0eWxpemUoIltHZXR0ZXIvU2V0dGVyXSIsInNwZWNpYWwiKTp0LnN0eWxpemUoIltHZXR0ZXJdIiwic3BlY2lhbCIpOmwuc2V0JiYocz10LnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIpKSxTKG4sYSl8fChvPSJbIithKyJdIiksc3x8KHQuc2Vlbi5pbmRleE9mKGwudmFsdWUpPDA/KHM9ZyhyKT91KHQsbC52YWx1ZSxudWxsKTp1KHQsbC52YWx1ZSxyLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYocz1pP3Muc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiIgICIrdH0pLmpvaW4oIlxuIikuc3Vic3RyKDIpOiJcbiIrcy5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiAgICIrdH0pLmpvaW4oIlxuIikpOnM9dC5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSx5KG8pKXtpZihpJiZhLm1hdGNoKC9eXGQrJC8pKXJldHVybiBzOyhvPUpTT04uc3RyaW5naWZ5KCIiK2EpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyhvPW8uc3Vic3RyKDEsby5sZW5ndGgtMiksbz10LnN0eWxpemUobywibmFtZSIpKToobz1vLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKS5yZXBsYWNlKC8oXiJ8IiQpL2csIiciKSxvPXQuc3R5bGl6ZShvLCJzdHJpbmciKSl9cmV0dXJuIG8rIjogIitzfWZ1bmN0aW9uIHAodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIGcodCl7cmV0dXJuIG51bGw9PT10fWZ1bmN0aW9uIHYodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fWZ1bmN0aW9uIG0odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fWZ1bmN0aW9uIHkodCl7cmV0dXJuIHZvaWQgMD09PXR9ZnVuY3Rpb24geCh0KXtyZXR1cm4gYih0KSYmIltvYmplY3QgUmVnRXhwXSI9PT1UKHQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBfKHQpe3JldHVybiBiKHQpJiYiW29iamVjdCBEYXRlXSI9PT1UKHQpfWZ1bmN0aW9uIHcodCl7cmV0dXJuIGIodCkmJigiW29iamVjdCBFcnJvcl0iPT09VCh0KXx8dCBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBrKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIFQodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBNKHQpe3JldHVybiB0PDEwPyIwIit0LnRvU3RyaW5nKDEwKTp0LnRvU3RyaW5nKDEwKX1yLmRlYnVnbG9nPWZ1bmN0aW9uKHQpe2lmKHkoaSkmJihpPWUuZW52Lk5PREVfREVCVUd8fCIiKSx0PXQudG9VcHBlckNhc2UoKSwhb1t0XSlpZihuZXcgUmVnRXhwKCJcXGIiK3QrIlxcYiIsImkiKS50ZXN0KGkpKXt2YXIgbj1lLnBpZDtvW3RdPWZ1bmN0aW9uKCl7dmFyIGU9ci5mb3JtYXQuYXBwbHkocixhcmd1bWVudHMpO2NvbnNvbGUuZXJyb3IoIiVzICVkOiAlcyIsdCxuLGUpfX1lbHNlIG9bdF09ZnVuY3Rpb24oKXt9O3JldHVybiBvW3RdfSxyLmluc3BlY3Q9cyxzLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0scy5zdHlsZXM9e3NwZWNpYWw6ImN5YW4iLG51bWJlcjoieWVsbG93Iixib29sZWFuOiJ5ZWxsb3ciLHVuZGVmaW5lZDoiZ3JleSIsbnVsbDoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0ZToibWFnZW50YSIscmVnZXhwOiJyZWQifSxyLmlzQXJyYXk9cCxyLmlzQm9vbGVhbj1kLHIuaXNOdWxsPWcsci5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dH0sci5pc051bWJlcj12LHIuaXNTdHJpbmc9bSxyLmlzU3ltYm9sPWZ1bmN0aW9uKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdH0sci5pc1VuZGVmaW5lZD15LHIuaXNSZWdFeHA9eCxyLmlzT2JqZWN0PWIsci5pc0RhdGU9XyxyLmlzRXJyb3I9dyxyLmlzRnVuY3Rpb249ayxyLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0fHwic3RyaW5nIj09dHlwZW9mIHR8fCJzeW1ib2wiPT10eXBlb2YgdHx8InVuZGVmaW5lZCI9PXR5cGVvZiB0fSxyLmlzQnVmZmVyPXQoIi4vc3VwcG9ydC9pc0J1ZmZlciIpO3ZhciBBPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gUyh0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX1yLmxvZz1mdW5jdGlvbigpe3ZhciB0LGU7Y29uc29sZS5sb2coIiVzIC0gJXMiLCh0PW5ldyBEYXRlLGU9W00odC5nZXRIb3VycygpKSxNKHQuZ2V0TWludXRlcygpKSxNKHQuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpLFt0LmdldERhdGUoKSxBW3QuZ2V0TW9udGgoKV0sZV0uam9pbigiICIpKSxyLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cykpfSxyLmluaGVyaXRzPXQoImluaGVyaXRzIiksci5fZXh0ZW5kPWZ1bmN0aW9uKHQsZSl7aWYoIWV8fCFiKGUpKXJldHVybiB0O2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPXIubGVuZ3RoO24tLTspdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vc3VwcG9ydC9pc0J1ZmZlciI6NzIsX3Byb2Nlc3M6NDg0LGluaGVyaXRzOjcxfV0sNzQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGF0b2IodCl9fSx7fV0sNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLGk9bmV3IEFycmF5KHIrMSksbz0wO288cjsrK28pe2Zvcih2YXIgcz1uZXcgQXJyYXkocisxKSxsPTA7bDw9cjsrK2wpc1tsXT10W2xdW29dO2lbb109c31pW3JdPW5ldyBBcnJheShyKzEpO2Zvcih2YXIgbz0wO288PXI7KytvKWlbcl1bb109MTtmb3IodmFyIGM9bmV3IEFycmF5KHIrMSksbz0wO288cjsrK28pY1tvXT1lW29dO2Nbcl09MTt2YXIgdT1uKGksYyksaD1hKHVbcisxXSk7MD09PWgmJihoPTEpO2Zvcih2YXIgZj1uZXcgQXJyYXkocisxKSxvPTA7bzw9cjsrK28pZltvXT1hKHVbb10pL2g7cmV0dXJuIGZ9O3ZhciBuPXQoInJvYnVzdC1saW5lYXItc29sdmUiKTtmdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoOysrcillKz10W3JdO3JldHVybiBlfX0seyJyb2J1c3QtbGluZWFyLXNvbHZlIjo1MDh9XSw3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmJ5dGVMZW5ndGg9ZnVuY3Rpb24odCl7dmFyIGU9Yyh0KSxyPWVbMF0sbj1lWzFdO3JldHVybiAzKihyK24pLzQtbn0sci50b0J5dGVBcnJheT1mdW5jdGlvbih0KXt2YXIgZSxyLG49Yyh0KSxvPW5bMF0scz1uWzFdLGw9bmV3IGkoZnVuY3Rpb24odCxlLHIpe3JldHVybiAzKihlK3IpLzQtcn0oMCxvLHMpKSx1PTAsaD1zPjA/by00Om87Zm9yKHI9MDtyPGg7cis9NCllPWFbdC5jaGFyQ29kZUF0KHIpXTw8MTh8YVt0LmNoYXJDb2RlQXQocisxKV08PDEyfGFbdC5jaGFyQ29kZUF0KHIrMildPDw2fGFbdC5jaGFyQ29kZUF0KHIrMyldLGxbdSsrXT1lPj4xNiYyNTUsbFt1KytdPWU+PjgmMjU1LGxbdSsrXT0yNTUmZTsyPT09cyYmKGU9YVt0LmNoYXJDb2RlQXQocildPDwyfGFbdC5jaGFyQ29kZUF0KHIrMSldPj40LGxbdSsrXT0yNTUmZSk7MT09PXMmJihlPWFbdC5jaGFyQ29kZUF0KHIpXTw8MTB8YVt0LmNoYXJDb2RlQXQocisxKV08PDR8YVt0LmNoYXJDb2RlQXQocisyKV0+PjIsbFt1KytdPWU+PjgmMjU1LGxbdSsrXT0yNTUmZSk7cmV0dXJuIGx9LHIuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxhPXIlMyxpPVtdLG89MCxzPXItYTtvPHM7bys9MTYzODMpaS5wdXNoKHUodCxvLG8rMTYzODM+cz9zOm8rMTYzODMpKTsxPT09YT8oZT10W3ItMV0saS5wdXNoKG5bZT4+Ml0rbltlPDw0JjYzXSsiPT0iKSk6Mj09PWEmJihlPSh0W3ItMl08PDgpK3Rbci0xXSxpLnB1c2gobltlPj4xMF0rbltlPj40JjYzXStuW2U8PDImNjNdKyI9IikpO3JldHVybiBpLmpvaW4oIiIpfTtmb3IodmFyIG49W10sYT1bXSxpPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHM9MCxsPW8ubGVuZ3RoO3M8bDsrK3MpbltzXT1vW3NdLGFbby5jaGFyQ29kZUF0KHMpXT1zO2Z1bmN0aW9uIGModCl7dmFyIGU9dC5sZW5ndGg7aWYoZSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIHI9dC5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1yJiYocj1lKSxbcixyPT09ZT8wOjQtciU0XX1mdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIGEsaSxvPVtdLHM9ZTtzPHI7cys9MylhPSh0W3NdPDwxNiYxNjcxMTY4MCkrKHRbcysxXTw8OCY2NTI4MCkrKDI1NSZ0W3MrMl0pLG8ucHVzaChuWyhpPWEpPj4xOCY2M10rbltpPj4xMiY2M10rbltpPj42JjYzXStuWzYzJmldKTtyZXR1cm4gby5qb2luKCIiKX1hWyItIi5jaGFyQ29kZUF0KDApXT02MixhWyJfIi5jaGFyQ29kZUF0KDApXT02M30se31dLDc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSkuYWRkKGVbMF0ubXVsKHRbMV0pKSx0WzFdLm11bChlWzFdKSl9fSx7Ii4vbGliL3JhdGlvbmFsaXplIjo4N31dLDc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLm11bChlWzFdKS5jbXAoZVswXS5tdWwodFsxXSkpfX0se31dLDc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odFswXS5tdWwoZVsxXSksdFsxXS5tdWwoZVswXSkpfX0seyIuL2xpYi9yYXRpb25hbGl6ZSI6ODd9XSw4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXJhdCIpLGE9dCgiLi9saWIvaXMtYm4iKSxpPXQoIi4vbGliL251bS10by1ibiIpLG89dCgiLi9saWIvc3RyLXRvLWJuIikscz10KCIuL2xpYi9yYXRpb25hbGl6ZSIpLGw9dCgiLi9kaXYiKTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIpe2lmKG4oZSkpcmV0dXJuIHI/bChlLHQocikpOltlWzBdLmNsb25lKCksZVsxXS5jbG9uZSgpXTt2YXIgYz0wO3ZhciB1LGg7aWYoYShlKSl1PWUuY2xvbmUoKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSl1PW8oZSk7ZWxzZXtpZigwPT09ZSlyZXR1cm5baSgwKSxpKDEpXTtpZihlPT09TWF0aC5mbG9vcihlKSl1PWkoZSk7ZWxzZXtmb3IoO2UhPT1NYXRoLmZsb29yKGUpOyllKj1NYXRoLnBvdygyLDI1NiksYy09MjU2O3U9aShlKX19aWYobihyKSl1Lm11bChyWzFdKSxoPXJbMF0uY2xvbmUoKTtlbHNlIGlmKGEocikpaD1yLmNsb25lKCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHIpaD1vKHIpO2Vsc2UgaWYocilpZihyPT09TWF0aC5mbG9vcihyKSloPWkocik7ZWxzZXtmb3IoO3IhPT1NYXRoLmZsb29yKHIpOylyKj1NYXRoLnBvdygyLDI1NiksYys9MjU2O2g9aShyKX1lbHNlIGg9aSgxKTtjPjA/dT11LnVzaGxuKGMpOmM8MCYmKGg9aC51c2hsbigtYykpO3JldHVybiBzKHUsaCl9fSx7Ii4vZGl2Ijo3OSwiLi9pcy1yYXQiOjgxLCIuL2xpYi9pcy1ibiI6ODUsIi4vbGliL251bS10by1ibiI6ODYsIi4vbGliL3JhdGlvbmFsaXplIjo4NywiLi9saWIvc3RyLXRvLWJuIjo4OH1dLDgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2lzLWJuIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYyPT09dC5sZW5ndGgmJm4odFswXSkmJm4odFsxXSl9fSx7Ii4vbGliL2lzLWJuIjo4NX1dLDgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJuLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNtcChuZXcgbigwKSl9fSx7ImJuLmpzIjo5Nn1dLDgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYm4tc2lnbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxyPXQud29yZHMsYT0wO2lmKDE9PT1lKWE9clswXTtlbHNlIGlmKDI9PT1lKWE9clswXSs2NzEwODg2NCpyWzFdO2Vsc2UgZm9yKHZhciBpPTA7aTxlO2krKyl7dmFyIG89cltpXTthKz1vKk1hdGgucG93KDY3MTA4ODY0LGkpfXJldHVybiBuKHQpKmF9fSx7Ii4vYm4tc2lnbiI6ODJ9XSw4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkb3VibGUtYml0cyIpLGE9dCgiYml0LXR3aWRkbGUiKS5jb3VudFRyYWlsaW5nWmVyb3M7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWEobi5sbyh0KSk7aWYoZTwzMilyZXR1cm4gZTt2YXIgcj1hKG4uaGkodCkpO2lmKHI+MjApcmV0dXJuIDUyO3JldHVybiByKzMyfX0seyJiaXQtdHdpZGRsZSI6OTQsImRvdWJsZS1iaXRzIjoxNjl9XSw4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt0KCJibi5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZCb29sZWFuKHQud29yZHMpfX0seyJibi5qcyI6OTZ9XSw4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJibi5qcyIpLGE9dCgiZG91YmxlLWJpdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9YS5leHBvbmVudCh0KTtyZXR1cm4gZTw1Mj9uZXcgbih0KTpuZXcgbih0Kk1hdGgucG93KDIsNTItZSkpLnVzaGxuKGUtNTIpfX0seyJibi5qcyI6OTYsImRvdWJsZS1iaXRzIjoxNjl9XSw4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL251bS10by1ibiIpLGE9dCgiLi9ibi1zaWduIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YSh0KSxpPWEoZSk7aWYoMD09PXIpcmV0dXJuW24oMCksbigxKV07aWYoMD09PWkpcmV0dXJuW24oMCksbigwKV07aTwwJiYodD10Lm5lZygpLGU9ZS5uZWcoKSk7dmFyIG89dC5nY2QoZSk7aWYoby5jbXBuKDEpKXJldHVyblt0LmRpdihvKSxlLmRpdihvKV07cmV0dXJuW3QsZV19fSx7Ii4vYm4tc2lnbiI6ODIsIi4vbnVtLXRvLWJuIjo4Nn1dLDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJuLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbih0KX19LHsiYm4uanMiOjk2fV0sODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzBdKSx0WzFdLm11bChlWzFdKSl9fSx7Ii4vbGliL3JhdGlvbmFsaXplIjo4N31dLDkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2JuLXNpZ24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4odFswXSkqbih0WzFdKX19LHsiLi9saWIvYm4tc2lnbiI6ODJ9XSw5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMV0pLnN1Yih0WzFdLm11bChlWzBdKSksdFsxXS5tdWwoZVsxXSkpfX0seyIuL2xpYi9yYXRpb25hbGl6ZSI6ODd9XSw5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9ibi10by1udW0iKSxhPXQoIi4vbGliL2N0eiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXTtpZigwPT09ZS5jbXBuKDApKXJldHVybiAwO3ZhciBpPWUuYWJzKCkuZGl2bW9kKHIuYWJzKCkpLG89aS5kaXYscz1uKG8pLGw9aS5tb2QsYz1lLm5lZ2F0aXZlIT09ci5uZWdhdGl2ZT8tMToxO2lmKDA9PT1sLmNtcG4oMCkpcmV0dXJuIGMqcztpZihzKXt2YXIgdT1hKHMpKzQsaD1uKGwudXNobG4odSkuZGl2Um91bmQocikpO3JldHVybiBjKihzK2gqTWF0aC5wb3coMiwtdSkpfXZhciBmPXIuYml0TGVuZ3RoKCktbC5iaXRMZW5ndGgoKSs1MyxoPW4obC51c2hsbihmKS5kaXZSb3VuZChyKSk7cmV0dXJuIGY8MTAyMz9jKmgqTWF0aC5wb3coMiwtZik6KGgqPU1hdGgucG93KDIsLTEwMjMpLGMqaCpNYXRoLnBvdygyLDEwMjMtZikpfX0seyIuL2xpYi9ibi10by1udW0iOjgzLCIuL2xpYi9jdHoiOjg0fV0sOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGEsaSl7dmFyIG89WyJmdW5jdGlvbiAiLHQsIihhLGwsaCwiLG4uam9pbigiLCIpLCIpeyIsaT8iIjoidmFyIGk9IixyPyJsLTEiOiJoKzEiLCI7d2hpbGUobDw9aCl7dmFyIG09KGwraCk+Pj4xLHg9YSIsYT8iLmdldChtKSI6IlttXSJdO3JldHVybiBpP2UuaW5kZXhPZigiYyIpPDA/by5wdXNoKCI7aWYoeD09PXkpe3JldHVybiBtfWVsc2UgaWYoeDw9eSl7Iik6by5wdXNoKCI7dmFyIHA9Yyh4LHkpO2lmKHA9PT0wKXtyZXR1cm4gbX1lbHNlIGlmKHA8PTApeyIpOm8ucHVzaCgiO2lmKCIsZSwiKXtpPW07Iikscj9vLnB1c2goImw9bSsxfWVsc2V7aD1tLTF9Iik6by5wdXNoKCJoPW0tMX1lbHNle2w9bSsxfSIpLG8ucHVzaCgifSIpLGk/by5wdXNoKCJyZXR1cm4gLTF9OyIpOm8ucHVzaCgicmV0dXJuIGl9OyIpLG8uam9pbigiIil9ZnVuY3Rpb24gYSh0LGUscixhKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFtuKCJBIiwieCIrdCsieSIsZSxbInkiXSwhMSxhKSxuKCJCIiwieCIrdCsieSIsZSxbInkiXSwhMCxhKSxuKCJQIiwiYyh4LHkpIit0KyIwIixlLFsieSIsImMiXSwhMSxhKSxuKCJRIiwiYyh4LHkpIit0KyIwIixlLFsieSIsImMiXSwhMCxhKSwiZnVuY3Rpb24gZGlzcGF0Y2hCc2VhcmNoIixyLCIoYSx5LGMsbCxoKXtpZihhLnNoYXBlKXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUShhLChsPT09dW5kZWZpbmVkKT8wOmx8MCwoaD09PXVuZGVmaW5lZCk/YS5zaGFwZVswXS0xOmh8MCx5LGMpfWVsc2V7cmV0dXJuIEIoYSwoYz09PXVuZGVmaW5lZCk/MDpjfDAsKGw9PT11bmRlZmluZWQpP2Euc2hhcGVbMF0tMTpsfDAseSl9fWVsc2V7aWYodHlwZW9mKGMpPT09J2Z1bmN0aW9uJyl7cmV0dXJuIFAoYSwobD09PXVuZGVmaW5lZCk/MDpsfDAsKGg9PT11bmRlZmluZWQpP2EubGVuZ3RoLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQShhLChjPT09dW5kZWZpbmVkKT8wOmN8MCwobD09PXVuZGVmaW5lZCk/YS5sZW5ndGgtMTpsfDAseSl9fX1yZXR1cm4gZGlzcGF0Y2hCc2VhcmNoIixyXS5qb2luKCIiKSkoKX1lLmV4cG9ydHM9e2dlOmEoIj49IiwhMSwiR0UiKSxndDphKCI+IiwhMSwiR1QiKSxsdDphKCI8IiwhMCwiTFQiKSxsZTphKCI8PSIsITAsIkxFIiksZXE6YSgiLSIsITAsIkVRIiwhMCl9fSx7fV0sOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT0zMjtyZXR1cm4odCY9LXQpJiZlLS0sNjU1MzUmdCYmKGUtPTE2KSwxNjcxMTkzNSZ0JiYoZS09OCksMjUyNjQ1MTM1JnQmJihlLT00KSw4NTg5OTM0NTkmdCYmKGUtPTIpLDE0MzE2NTU3NjUmdCYmKGUtPTEpLGV9ci5JTlRfQklUUz0zMixyLklOVF9NQVg9MjE0NzQ4MzY0NyxyLklOVF9NSU49LTE8PDMxLHIuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4odD4wKS0odDwwKX0sci5hYnM9ZnVuY3Rpb24odCl7dmFyIGU9dD4+MzE7cmV0dXJuKHReZSktZX0sci5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZV4odF5lKSYtKHQ8ZSl9LHIubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReKHReZSkmLSh0PGUpfSxyLmlzUG93Mj1mdW5jdGlvbih0KXtyZXR1cm4hKHQmdC0xfHwhdCl9LHIubG9nMj1mdW5jdGlvbih0KXt2YXIgZSxyO3JldHVybiBlPSh0PjY1NTM1KTw8NCxlfD1yPSgodD4+Pj1lKT4yNTUpPDwzLGV8PXI9KCh0Pj4+PXIpPjE1KTw8MiwoZXw9cj0oKHQ+Pj49cik+Myk8PDEpfCh0Pj4+PXIpPj4xfSxyLmxvZzEwPWZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xZTk/OTp0Pj0xZTg/ODp0Pj0xZTc/Nzp0Pj0xZTY/Njp0Pj0xZTU/NTp0Pj0xZTQ/NDp0Pj0xZTM/Mzp0Pj0xMDA/Mjp0Pj0xMD8xOjB9LHIucG9wQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIDE2ODQzMDA5KigodD0oODU4OTkzNDU5Jih0LT10Pj4+MSYxNDMxNjU1NzY1KSkrKHQ+Pj4yJjg1ODk5MzQ1OSkpKyh0Pj4+NCkmMjUyNjQ1MTM1KT4+PjI0fSxyLmNvdW50VHJhaWxpbmdaZXJvcz1uLHIubmV4dFBvdzI9ZnVuY3Rpb24odCl7cmV0dXJuIHQrPTA9PT10LC0tdCx0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KSsxfSxyLnByZXZQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KS0odD4+PjEpfSxyLnBhcml0eT1mdW5jdGlvbih0KXtyZXR1cm4gdF49dD4+PjE2LHRePXQ+Pj44LHRePXQ+Pj40LDI3MDMwPj4+KHQmPTE1KSYxfTt2YXIgYT1uZXcgQXJyYXkoMjU2KTshZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTwyNTY7KytlKXt2YXIgcj1lLG49ZSxhPTc7Zm9yKHI+Pj49MTtyO3I+Pj49MSluPDw9MSxufD0xJnIsLS1hO3RbZV09bjw8YSYyNTV9fShhKSxyLnJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFbMjU1JnRdPDwyNHxhW3Q+Pj44JjI1NV08PDE2fGFbdD4+PjE2JjI1NV08PDh8YVt0Pj4+MjQmMjU1XX0sci5pbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQmPTY1NTM1KXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSl8KGU9MTQzMTY1NTc2NSYoKGU9ODU4OTkzNDU5JigoZT0yNTI2NDUxMzUmKChlPTE2NzExOTM1JigoZSY9NjU1MzUpfGU8PDgpKXxlPDw0KSl8ZTw8MikpfGU8PDEpKTw8MX0sci5kZWludGVybGVhdmUyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9NjU1MzUmKCh0PTE2NzExOTM1JigodD0yNTI2NDUxMzUmKCh0PTg1ODk5MzQ1OSYoKHQ9dD4+PmUmMTQzMTY1NTc2NSl8dD4+PjEpKXx0Pj4+MikpfHQ+Pj40KSl8dD4+PjE2KSk8PDE2Pj4xNn0sci5pbnRlcmxlYXZlMz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9MTIyNzEzMzUxMyYoKHQ9MzI3MjM1NjAzNSYoKHQ9MjUxNzE5Njk1JigodD00Mjc4MTkwMzM1JigodCY9MTAyMyl8dDw8MTYpKXx0PDw4KSl8dDw8NCkpfHQ8PDIpLCh0fD0oZT0xMjI3MTMzNTEzJigoZT0zMjcyMzU2MDM1JigoZT0yNTE3MTk2OTUmKChlPTQyNzgxOTAzMzUmKChlJj0xMDIzKXxlPDwxNikpfGU8PDgpKXxlPDw0KSl8ZTw8MikpPDwxKXwocj0xMjI3MTMzNTEzJigocj0zMjcyMzU2MDM1Jigocj0yNTE3MTk2OTUmKChyPTQyNzgxOTAzMzUmKChyJj0xMDIzKXxyPDwxNikpfHI8PDgpKXxyPDw0KSl8cjw8MikpPDwyfSxyLmRlaW50ZXJsZWF2ZTM9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD0xMDIzJigodD00Mjc4MTkwMzM1JigodD0yNTE3MTk2OTUmKCh0PTMyNzIzNTYwMzUmKCh0PXQ+Pj5lJjEyMjcxMzM1MTMpfHQ+Pj4yKSl8dD4+PjQpKXx0Pj4+OCkpfHQ+Pj4xNikpPDwyMj4+MjJ9LHIubmV4dENvbWJpbmF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXR8dC0xO3JldHVybiBlKzF8KH5lJi1+ZSktMT4+Pm4odCkrMX19LHt9XSw5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjbGFtcCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXt9KTt2YXIgcixvLHMsbCxjLHUsaCxmLHAsZCxnLHY9bnVsbD09ZS5jdXRvZmY/LjI1OmUuY3V0b2ZmLG09bnVsbD09ZS5yYWRpdXM/ODplLnJhZGl1cyx5PWUuY2hhbm5lbHx8MDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fEFycmF5LmlzQXJyYXkodCkpe2lmKCFlLndpZHRofHwhZS5oZWlnaHQpdGhyb3cgRXJyb3IoIkZvciByYXcgZGF0YSB3aWR0aCBhbmQgaGVpZ2h0IHNob3VsZCBiZSBwcm92aWRlZCBieSBvcHRpb25zIik7cj1lLndpZHRoLG89ZS5oZWlnaHQsbD10LHU9ZS5zdHJpZGU/ZS5zdHJpZGU6TWF0aC5mbG9vcih0Lmxlbmd0aC9yL28pfWVsc2Ugd2luZG93LkhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxDYW52YXNFbGVtZW50PyhoPShmPXQpLmdldENvbnRleHQoIjJkIikscj1mLndpZHRoLG89Zi5oZWlnaHQscD1oLmdldEltYWdlRGF0YSgwLDAscixvKSxsPXAuZGF0YSx1PTQpOndpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQmJnQgaW5zdGFuY2VvZiB3aW5kb3cuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPyhmPXQuY2FudmFzLGg9dCxyPWYud2lkdGgsbz1mLmhlaWdodCxwPWguZ2V0SW1hZ2VEYXRhKDAsMCxyLG8pLGw9cC5kYXRhLHU9NCk6d2luZG93LkltYWdlRGF0YSYmdCBpbnN0YW5jZW9mIHdpbmRvdy5JbWFnZURhdGEmJihwPXQscj10LndpZHRoLG89dC5oZWlnaHQsbD1wLmRhdGEsdT00KTtpZihzPU1hdGgubWF4KHIsbyksd2luZG93LlVpbnQ4Q2xhbXBlZEFycmF5JiZsIGluc3RhbmNlb2Ygd2luZG93LlVpbnQ4Q2xhbXBlZEFycmF5fHx3aW5kb3cuVWludDhBcnJheSYmbCBpbnN0YW5jZW9mIHdpbmRvdy5VaW50OEFycmF5KWZvcihjPWwsbD1BcnJheShyKm8pLGQ9MCxnPWMubGVuZ3RoO2Q8ZztkKyspbFtkXT1jW2QqdSt5XS8yNTU7ZWxzZSBpZigxIT09dSl0aHJvdyBFcnJvcigiUmF3IGRhdGEgY2FuIGhhdmUgb25seSAxIHZhbHVlIHBlciBwaXhlbCIpO3ZhciB4PUFycmF5KHIqbyksYj1BcnJheShyKm8pLF89QXJyYXkocyksdz1BcnJheShzKSxrPUFycmF5KHMrMSksVD1BcnJheShzKTtmb3IoZD0wLGc9cipvO2Q8ZztkKyspe3ZhciBNPWxbZF07eFtkXT0xPT09TT8wOjA9PT1NP2E6TWF0aC5wb3coTWF0aC5tYXgoMCwuNS1NKSwyKSxiW2RdPTE9PT1NP2E6MD09PU0/MDpNYXRoLnBvdyhNYXRoLm1heCgwLE0tLjUpLDIpfWkoeCxyLG8sXyx3LFQsayksaShiLHIsbyxfLHcsVCxrKTt2YXIgQT13aW5kb3cuRmxvYXQzMkFycmF5P25ldyBGbG9hdDMyQXJyYXkocipvKTpuZXcgQXJyYXkocipvKTtmb3IoZD0wLGc9cipvO2Q8ZztkKyspQVtkXT1uKDEtKCh4W2RdLWJbZF0pL20rdiksMCwxKTtyZXR1cm4gQX07dmFyIGE9MWUyMDtmdW5jdGlvbiBpKHQsZSxyLG4sYSxpLHMpe2Zvcih2YXIgbD0wO2w8ZTtsKyspe2Zvcih2YXIgYz0wO2M8cjtjKyspbltjXT10W2MqZStsXTtmb3IobyhuLGEsaSxzLHIpLGM9MDtjPHI7YysrKXRbYyplK2xdPWFbY119Zm9yKGM9MDtjPHI7YysrKXtmb3IobD0wO2w8ZTtsKyspbltsXT10W2MqZStsXTtmb3IobyhuLGEsaSxzLGUpLGw9MDtsPGU7bCsrKXRbYyplK2xdPU1hdGguc3FydChhW2xdKX19ZnVuY3Rpb24gbyh0LGUscixuLGkpe3JbMF09MCxuWzBdPS1hLG5bMV09K2E7Zm9yKHZhciBvPTEscz0wO288aTtvKyspe2Zvcih2YXIgbD0odFtvXStvKm8tKHRbcltzXV0rcltzXSpyW3NdKSkvKDIqby0yKnJbc10pO2w8PW5bc107KXMtLSxsPSh0W29dK28qby0odFtyW3NdXStyW3NdKnJbc10pKS8oMipvLTIqcltzXSk7clsrK3NdPW8sbltzXT1sLG5bcysxXT0rYX1mb3Iobz0wLHM9MDtvPGk7bysrKXtmb3IoO25bcysxXTxvOylzKys7ZVtvXT0oby1yW3NdKSooby1yW3NdKSt0W3Jbc11dfX19LHtjbGFtcDoxMTd9XSw5NjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gYSh0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gaSh0LGUscil7aWYoaS5pc0JOKHQpKXJldHVybiB0O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT10JiYoImxlIiE9PWUmJiJiZSIhPT1lfHwocj1lLGU9MTApLHRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHwiYmUiKSl9dmFyIG87Im9iamVjdCI9PXR5cGVvZiBlP2UuZXhwb3J0cz1pOnIuQk49aSxpLkJOPWksaS53b3JkU2l6ZT0yNjt0cnl7bz10KCJidWZmZXIiKS5CdWZmZXJ9Y2F0Y2godCl7fWZ1bmN0aW9uIHModCxlLHIpe2Zvcih2YXIgbj0wLGE9TWF0aC5taW4odC5sZW5ndGgsciksaT1lO2k8YTtpKyspe3ZhciBvPXQuY2hhckNvZGVBdChpKS00ODtuPDw9NCxufD1vPj00OSYmbzw9NTQ/by00OSsxMDpvPj0xNyYmbzw9MjI/by0xNysxMDoxNSZvfXJldHVybiBufWZ1bmN0aW9uIGwodCxlLHIsbil7Zm9yKHZhciBhPTAsaT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxvPWU7bzxpO28rKyl7dmFyIHM9dC5jaGFyQ29kZUF0KG8pLTQ4O2EqPW4sYSs9cz49NDk/cy00OSsxMDpzPj0xNz9zLTE3KzEwOnN9cmV0dXJuIGF9aS5pc0JOPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaXx8bnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PWkud29yZFNpemUmJkFycmF5LmlzQXJyYXkodC53b3Jkcyl9LGkubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPjA/dDplfSxpLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKTwwP3Q6ZX0saS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdE51bWJlcih0LGUscik7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0QXJyYXkodCxlLHIpOyJoZXgiPT09ZSYmKGU9MTYpLG4oZT09PSgwfGUpJiZlPj0yJiZlPD0zNik7dmFyIGE9MDsiLSI9PT0odD10LnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmYSsrLDE2PT09ZT90aGlzLl9wYXJzZUhleCh0LGEpOnRoaXMuX3BhcnNlQmFzZSh0LGUsYSksIi0iPT09dFswXSYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpLCJsZSI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0saS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24odCxlLHIpe3Q8MCYmKHRoaXMubmVnYXRpdmU9MSx0PS10KSx0PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0XSx0aGlzLmxlbmd0aD0xKTp0PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG4odDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxpLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHQsZSxyKXtpZihuKCJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpLHQubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHQubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGE9MDthPHRoaXMubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPTA7dmFyIGksbyxzPTA7aWYoImJlIj09PXIpZm9yKGE9dC5sZW5ndGgtMSxpPTA7YT49MDthLT0zKW89dFthXXx0W2EtMV08PDh8dFthLTJdPDwxNix0aGlzLndvcmRzW2ldfD1vPDxzJjY3MTA4ODYzLHRoaXMud29yZHNbaSsxXT1vPj4+MjYtcyY2NzEwODg2Mywocys9MjQpPj0yNiYmKHMtPTI2LGkrKyk7ZWxzZSBpZigibGUiPT09cilmb3IoYT0wLGk9MDthPHQubGVuZ3RoO2ErPTMpbz10W2FdfHRbYSsxXTw8OHx0W2ErMl08PDE2LHRoaXMud29yZHNbaV18PW88PHMmNjcxMDg4NjMsdGhpcy53b3Jkc1tpKzFdPW8+Pj4yNi1zJjY3MTA4ODYzLChzKz0yNCk+PTI2JiYocy09MjYsaSsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24odCxlKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHQubGVuZ3RoLWUpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPTA7dmFyIG4sYSxpPTA7Zm9yKHI9dC5sZW5ndGgtNixuPTA7cj49ZTtyLT02KWE9cyh0LHIscis2KSx0aGlzLndvcmRzW25dfD1hPDxpJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9YT4+PjI2LWkmNDE5NDMwMywoaSs9MjQpPj0yNiYmKGktPTI2LG4rKyk7cis2IT09ZSYmKGE9cyh0LGUscis2KSx0aGlzLndvcmRzW25dfD1hPDxpJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9YT4+PjI2LWkmNDE5NDMwMyksdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgbj0wLGE9MTthPD02NzEwODg2MzthKj1lKW4rKztuLS0sYT1hL2V8MDtmb3IodmFyIGk9dC5sZW5ndGgtcixvPWklbixzPU1hdGgubWluKGksaS1vKStyLGM9MCx1PXI7dTxzO3UrPW4pYz1sKHQsdSx1K24sZSksdGhpcy5pbXVsbihhKSx0aGlzLndvcmRzWzBdK2M8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9Yzp0aGlzLl9pYWRkbihjKTtpZigwIT09byl7dmFyIGg9MTtmb3IoYz1sKHQsdSx0Lmxlbmd0aCxlKSx1PTA7dTxvO3UrKyloKj1lO3RoaXMuaW11bG4oaCksdGhpcy53b3Jkc1swXStjPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWM6dGhpcy5faWFkZG4oYyl9fSxpLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3Qud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl0LndvcmRzW2VdPXRoaXMud29yZHNbZV07dC5sZW5ndGg9dGhpcy5sZW5ndGgsdC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHQucmVkPXRoaXMucmVkfSxpLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBpKG51bGwpO3JldHVybiB0aGlzLmNvcHkodCksdH0saS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQ7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30saS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxpLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgYz1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSx1PVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLGg9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZih0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmU7dmFyIG49dC5sZW5ndGgrZS5sZW5ndGh8MDtyLmxlbmd0aD1uLG49bi0xfDA7dmFyIGE9MHx0LndvcmRzWzBdLGk9MHxlLndvcmRzWzBdLG89YSppLHM9NjcxMDg4NjMmbyxsPW8vNjcxMDg4NjR8MDtyLndvcmRzWzBdPXM7Zm9yKHZhciBjPTE7YzxuO2MrKyl7Zm9yKHZhciB1PWw+Pj4yNixoPTY3MTA4ODYzJmwsZj1NYXRoLm1pbihjLGUubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxjLXQubGVuZ3RoKzEpO3A8PWY7cCsrKXt2YXIgZD1jLXB8MDt1Kz0obz0oYT0wfHQud29yZHNbZF0pKihpPTB8ZS53b3Jkc1twXSkraCkvNjcxMDg4NjR8MCxoPTY3MTA4ODYzJm99ci53b3Jkc1tjXT0wfGgsbD0wfHV9cmV0dXJuIDAhPT1sP3Iud29yZHNbY109MHxsOnIubGVuZ3RoLS0sci5zdHJpcCgpfWkucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoZT0wfGV8fDEsMTY9PT0odD10fHwxMCl8fCJoZXgiPT09dCl7cj0iIjtmb3IodmFyIGE9MCxpPTAsbz0wO288dGhpcy5sZW5ndGg7bysrKXt2YXIgcz10aGlzLndvcmRzW29dLGw9KDE2Nzc3MjE1JihzPDxhfGkpKS50b1N0cmluZygxNik7cj0wIT09KGk9cz4+PjI0LWEmMTY3NzcyMTUpfHxvIT09dGhpcy5sZW5ndGgtMT9jWzYtbC5sZW5ndGhdK2wrcjpsK3IsKGErPTIpPj0yNiYmKGEtPTI2LG8tLSl9Zm9yKDAhPT1pJiYocj1pLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT0wOylyPSIwIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9Ii0iK3IpLHJ9aWYodD09PSgwfHQpJiZ0Pj0yJiZ0PD0zNil7dmFyIGY9dVt0XSxwPWhbdF07cj0iIjt2YXIgZD10aGlzLmNsb25lKCk7Zm9yKGQubmVnYXRpdmU9MDshZC5pc1plcm8oKTspe3ZhciBnPWQubW9kbihwKS50b1N0cmluZyh0KTtyPShkPWQuaWRpdm4ocCkpLmlzWmVybygpP2crcjpjW2YtZy5sZW5ndGhdK2crcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9IjAiK3IpO3IubGVuZ3RoJWUhPTA7KXI9IjAiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj0iLSIrcikscn1uKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LGkucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0saS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxpLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKCJ1bmRlZmluZWQiIT10eXBlb2YgbyksdGhpcy50b0FycmF5TGlrZShvLHQsZSl9LGkucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSx0LGUpfSxpLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbih0LGUscil7dmFyIGE9dGhpcy5ieXRlTGVuZ3RoKCksaT1yfHxNYXRoLm1heCgxLGEpO24oYTw9aSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG4oaT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIG8scyxsPSJsZSI9PT1lLGM9bmV3IHQoaSksdT10aGlzLmNsb25lKCk7aWYobCl7Zm9yKHM9MDshdS5pc1plcm8oKTtzKyspbz11LmFuZGxuKDI1NSksdS5pdXNocm4oOCksY1tzXT1vO2Zvcig7czxpO3MrKyljW3NdPTB9ZWxzZXtmb3Iocz0wO3M8aS1hO3MrKyljW3NdPTA7Zm9yKHM9MDshdS5pc1plcm8oKTtzKyspbz11LmFuZGxuKDI1NSksdS5pdXNocm4oOCksY1tpLXMtMV09b31yZXR1cm4gY30sTWF0aC5jbHozMj9pLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3JldHVybiAzMi1NYXRoLmNsejMyKHQpfTppLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj0wO3JldHVybiBlPj00MDk2JiYocis9MTMsZT4+Pj0xMyksZT49NjQmJihyKz03LGU+Pj49NyksZT49OCYmKHIrPTQsZT4+Pj00KSxlPj0yJiYocis9MixlPj4+PTIpLHIrZX0saS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiAyNjt2YXIgZT10LHI9MDtyZXR1cm4gMD09KDgxOTEmZSkmJihyKz0xMyxlPj4+PTEzKSwwPT0oMTI3JmUpJiYocis9NyxlPj4+PTcpLDA9PSgxNSZlKSYmKHIrPTQsZT4+Pj00KSwwPT0oMyZlKSYmKHIrPTIsZT4+Pj0yKSwwPT0oMSZlKSYmcisrLHJ9LGkucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0sZT10aGlzLl9jb3VudEJpdHModCk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStlfSxpLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2VdKTtpZih0Kz1yLDI2IT09cilicmVha31yZXR1cm4gdH0saS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0saS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHQpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0saS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGVzdG4odC0xKT90aGlzLm5vdG4odCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0saS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LGkucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxpLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxpLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLndvcmRzW2VdPXRoaXMud29yZHNbZV18dC53b3Jkc1tlXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVvcih0KX0saS5wcm90b3R5cGUub3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IodCk6dC5jbG9uZSgpLmlvcih0aGlzKX0saS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcih0KTp0LmNsb25lKCkuaXVvcih0aGlzKX0saS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24odCl7dmFyIGU7ZT10aGlzLmxlbmd0aD50Lmxlbmd0aD90OnRoaXM7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJnQud29yZHNbcl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0saS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZCh0KX0saS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh0KTp0LmNsb25lKCkuaWFuZCh0aGlzKX0saS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHQpOnQuY2xvbmUoKS5pdWFuZCh0aGlzKX0saS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8oZT10aGlzLHI9dCk6KGU9dCxyPXRoaXMpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXV5yLndvcmRzW25dO2lmKHRoaXMhPT1lKWZvcig7bjxlLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGkucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IodCl9LGkucHJvdG90eXBlLnhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IodCk6dC5jbG9uZSgpLml4b3IodGhpcyl9LGkucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih0KTp0LmNsb25lKCkuaXV4b3IodGhpcyl9LGkucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT0wfE1hdGguY2VpbCh0LzI2KSxyPXQlMjY7dGhpcy5fZXhwYW5kKGUpLHI+MCYmZS0tO2Zvcih2YXIgYT0wO2E8ZTthKyspdGhpcy53b3Jkc1thXT02NzEwODg2MyZ+dGhpcy53b3Jkc1thXTtyZXR1cm4gcj4wJiYodGhpcy53b3Jkc1thXT1+dGhpcy53b3Jkc1thXSY2NzEwODg2Mz4+MjYtciksdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4odCl9LGkucHJvdG90eXBlLnNldG49ZnVuY3Rpb24odCxlKXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIHI9dC8yNnwwLGE9dCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXT1lP3RoaXMud29yZHNbcl18MTw8YTp0aGlzLndvcmRzW3JdJn4oMTw8YSksdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiB0Lm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KHI9dGhpcyxuPXQpOihyPXQsbj10aGlzKTtmb3IodmFyIGE9MCxpPTA7aTxuLmxlbmd0aDtpKyspZT0oMHxyLndvcmRzW2ldKSsoMHxuLndvcmRzW2ldKSthLHRoaXMud29yZHNbaV09NjcxMDg4NjMmZSxhPWU+Pj4yNjtmb3IoOzAhPT1hJiZpPHIubGVuZ3RoO2krKyllPSgwfHIud29yZHNbaV0pK2EsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZlLGE9ZT4+PjI2O2lmKHRoaXMubGVuZ3RoPXIubGVuZ3RoLDAhPT1hKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWEsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHIhPT10aGlzKWZvcig7aTxyLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT1yLndvcmRzW2ldO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIDAhPT10Lm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8odC5uZWdhdGl2ZT0wLGU9dGhpcy5zdWIodCksdC5uZWdhdGl2ZV49MSxlKTowPT09dC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxlPXQuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxlKTp0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZCh0KTp0LmNsb25lKCkuaWFkZCh0aGlzKX0saS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0KXtpZigwIT09dC5uZWdhdGl2ZSl7dC5uZWdhdGl2ZT0wO3ZhciBlPXRoaXMuaWFkZCh0KTtyZXR1cm4gdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQodCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHIsbixhPXRoaXMuY21wKHQpO2lmKDA9PT1hKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczthPjA/KHI9dGhpcyxuPXQpOihyPXQsbj10aGlzKTtmb3IodmFyIGk9MCxvPTA7bzxuLmxlbmd0aDtvKyspaT0oZT0oMHxyLndvcmRzW29dKS0oMHxuLndvcmRzW29dKStpKT4+MjYsdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlO2Zvcig7MCE9PWkmJm88ci5sZW5ndGg7bysrKWk9KGU9KDB8ci53b3Jkc1tvXSkraSk+PjI2LHRoaXMud29yZHNbb109NjcxMDg4NjMmZTtpZigwPT09aSYmbzxyLmxlbmd0aCYmciE9PXRoaXMpZm9yKDtvPHIubGVuZ3RoO28rKyl0aGlzLndvcmRzW29dPXIud29yZHNbb107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLG8pLHIhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LGkucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIodCl9O3ZhciBwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLGksbz10LndvcmRzLHM9ZS53b3JkcyxsPXIud29yZHMsYz0wLHU9MHxvWzBdLGg9ODE5MSZ1LGY9dT4+PjEzLHA9MHxvWzFdLGQ9ODE5MSZwLGc9cD4+PjEzLHY9MHxvWzJdLG09ODE5MSZ2LHk9dj4+PjEzLHg9MHxvWzNdLGI9ODE5MSZ4LF89eD4+PjEzLHc9MHxvWzRdLGs9ODE5MSZ3LFQ9dz4+PjEzLE09MHxvWzVdLEE9ODE5MSZNLFM9TT4+PjEzLEU9MHxvWzZdLEw9ODE5MSZFLEM9RT4+PjEzLFA9MHxvWzddLE89ODE5MSZQLHo9UD4+PjEzLEk9MHxvWzhdLEQ9ODE5MSZJLFI9ST4+PjEzLEY9MHxvWzldLEI9ODE5MSZGLE49Rj4+PjEzLGo9MHxzWzBdLFY9ODE5MSZqLFU9aj4+PjEzLHE9MHxzWzFdLEg9ODE5MSZxLEc9cT4+PjEzLFk9MHxzWzJdLFc9ODE5MSZZLFg9WT4+PjEzLFo9MHxzWzNdLEo9ODE5MSZaLEs9Wj4+PjEzLFE9MHxzWzRdLCQ9ODE5MSZRLHR0PVE+Pj4xMyxldD0wfHNbNV0scnQ9ODE5MSZldCxudD1ldD4+PjEzLGF0PTB8c1s2XSxpdD04MTkxJmF0LG90PWF0Pj4+MTMsc3Q9MHxzWzddLGx0PTgxOTEmc3QsY3Q9c3Q+Pj4xMyx1dD0wfHNbOF0saHQ9ODE5MSZ1dCxmdD11dD4+PjEzLHB0PTB8c1s5XSxkdD04MTkxJnB0LGd0PXB0Pj4+MTM7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9MTk7dmFyIHZ0PShjKyhuPU1hdGguaW11bChoLFYpKXwwKSsoKDgxOTEmKGE9KGE9TWF0aC5pbXVsKGgsVSkpK01hdGguaW11bChmLFYpfDApKTw8MTMpfDA7Yz0oKGk9TWF0aC5pbXVsKGYsVSkpKyhhPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bChkLFYpLGE9KGE9TWF0aC5pbXVsKGQsVSkpK01hdGguaW11bChnLFYpfDAsaT1NYXRoLmltdWwoZyxVKTt2YXIgbXQ9KGMrKG49bitNYXRoLmltdWwoaCxIKXwwKXwwKSsoKDgxOTEmKGE9KGE9YStNYXRoLmltdWwoaCxHKXwwKStNYXRoLmltdWwoZixIKXwwKSk8PDEzKXwwO2M9KChpPWkrTWF0aC5pbXVsKGYsRyl8MCkrKGE+Pj4xMyl8MCkrKG10Pj4+MjYpfDAsbXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKG0sViksYT0oYT1NYXRoLmltdWwobSxVKSkrTWF0aC5pbXVsKHksVil8MCxpPU1hdGguaW11bCh5LFUpLG49bitNYXRoLmltdWwoZCxIKXwwLGE9KGE9YStNYXRoLmltdWwoZCxHKXwwKStNYXRoLmltdWwoZyxIKXwwLGk9aStNYXRoLmltdWwoZyxHKXwwO3ZhciB5dD0oYysobj1uK01hdGguaW11bChoLFcpfDApfDApKygoODE5MSYoYT0oYT1hK01hdGguaW11bChoLFgpfDApK01hdGguaW11bChmLFcpfDApKTw8MTMpfDA7Yz0oKGk9aStNYXRoLmltdWwoZixYKXwwKSsoYT4+PjEzKXwwKSsoeXQ+Pj4yNil8MCx5dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoYixWKSxhPShhPU1hdGguaW11bChiLFUpKStNYXRoLmltdWwoXyxWKXwwLGk9TWF0aC5pbXVsKF8sVSksbj1uK01hdGguaW11bChtLEgpfDAsYT0oYT1hK01hdGguaW11bChtLEcpfDApK01hdGguaW11bCh5LEgpfDAsaT1pK01hdGguaW11bCh5LEcpfDAsbj1uK01hdGguaW11bChkLFcpfDAsYT0oYT1hK01hdGguaW11bChkLFgpfDApK01hdGguaW11bChnLFcpfDAsaT1pK01hdGguaW11bChnLFgpfDA7dmFyIHh0PShjKyhuPW4rTWF0aC5pbXVsKGgsSil8MCl8MCkrKCg4MTkxJihhPShhPWErTWF0aC5pbXVsKGgsSyl8MCkrTWF0aC5pbXVsKGYsSil8MCkpPDwxMyl8MDtjPSgoaT1pK01hdGguaW11bChmLEspfDApKyhhPj4+MTMpfDApKyh4dD4+PjI2KXwwLHh0Jj02NzEwODg2MyxuPU1hdGguaW11bChrLFYpLGE9KGE9TWF0aC5pbXVsKGssVSkpK01hdGguaW11bChULFYpfDAsaT1NYXRoLmltdWwoVCxVKSxuPW4rTWF0aC5pbXVsKGIsSCl8MCxhPShhPWErTWF0aC5pbXVsKGIsRyl8MCkrTWF0aC5pbXVsKF8sSCl8MCxpPWkrTWF0aC5pbXVsKF8sRyl8MCxuPW4rTWF0aC5pbXVsKG0sVyl8MCxhPShhPWErTWF0aC5pbXVsKG0sWCl8MCkrTWF0aC5pbXVsKHksVyl8MCxpPWkrTWF0aC5pbXVsKHksWCl8MCxuPW4rTWF0aC5pbXVsKGQsSil8MCxhPShhPWErTWF0aC5pbXVsKGQsSyl8MCkrTWF0aC5pbXVsKGcsSil8MCxpPWkrTWF0aC5pbXVsKGcsSyl8MDt2YXIgYnQ9KGMrKG49bitNYXRoLmltdWwoaCwkKXwwKXwwKSsoKDgxOTEmKGE9KGE9YStNYXRoLmltdWwoaCx0dCl8MCkrTWF0aC5pbXVsKGYsJCl8MCkpPDwxMyl8MDtjPSgoaT1pK01hdGguaW11bChmLHR0KXwwKSsoYT4+PjEzKXwwKSsoYnQ+Pj4yNil8MCxidCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQSxWKSxhPShhPU1hdGguaW11bChBLFUpKStNYXRoLmltdWwoUyxWKXwwLGk9TWF0aC5pbXVsKFMsVSksbj1uK01hdGguaW11bChrLEgpfDAsYT0oYT1hK01hdGguaW11bChrLEcpfDApK01hdGguaW11bChULEgpfDAsaT1pK01hdGguaW11bChULEcpfDAsbj1uK01hdGguaW11bChiLFcpfDAsYT0oYT1hK01hdGguaW11bChiLFgpfDApK01hdGguaW11bChfLFcpfDAsaT1pK01hdGguaW11bChfLFgpfDAsbj1uK01hdGguaW11bChtLEopfDAsYT0oYT1hK01hdGguaW11bChtLEspfDApK01hdGguaW11bCh5LEopfDAsaT1pK01hdGguaW11bCh5LEspfDAsbj1uK01hdGguaW11bChkLCQpfDAsYT0oYT1hK01hdGguaW11bChkLHR0KXwwKStNYXRoLmltdWwoZywkKXwwLGk9aStNYXRoLmltdWwoZyx0dCl8MDt2YXIgX3Q9KGMrKG49bitNYXRoLmltdWwoaCxydCl8MCl8MCkrKCg4MTkxJihhPShhPWErTWF0aC5pbXVsKGgsbnQpfDApK01hdGguaW11bChmLHJ0KXwwKSk8PDEzKXwwO2M9KChpPWkrTWF0aC5pbXVsKGYsbnQpfDApKyhhPj4+MTMpfDApKyhfdD4+PjI2KXwwLF90Jj02NzEwODg2MyxuPU1hdGguaW11bChMLFYpLGE9KGE9TWF0aC5pbXVsKEwsVSkpK01hdGguaW11bChDLFYpfDAsaT1NYXRoLmltdWwoQyxVKSxuPW4rTWF0aC5pbXVsKEEsSCl8MCxhPShhPWErTWF0aC5pbXVsKEEsRyl8MCkrTWF0aC5pbXVsKFMsSCl8MCxpPWkrTWF0aC5pbXVsKFMsRyl8MCxuPW4rTWF0aC5pbXVsKGssVyl8MCxhPShhPWErTWF0aC5pbXVsKGssWCl8MCkrTWF0aC5pbXVsKFQsVyl8MCxpPWkrTWF0aC5pbXVsKFQsWCl8MCxuPW4rTWF0aC5pbXVsKGIsSil8MCxhPShhPWErTWF0aC5pbXVsKGIsSyl8MCkrTWF0aC5pbXVsKF8sSil8MCxpPWkrTWF0aC5pbXVsKF8sSyl8MCxuPW4rTWF0aC5pbXVsKG0sJCl8MCxhPShhPWErTWF0aC5pbXVsKG0sdHQpfDApK01hdGguaW11bCh5LCQpfDAsaT1pK01hdGguaW11bCh5LHR0KXwwLG49bitNYXRoLmltdWwoZCxydCl8MCxhPShhPWErTWF0aC5pbXVsKGQsbnQpfDApK01hdGguaW11bChnLHJ0KXwwLGk9aStNYXRoLmltdWwoZyxudCl8MDt2YXIgd3Q9KGMrKG49bitNYXRoLmltdWwoaCxpdCl8MCl8MCkrKCg4MTkxJihhPShhPWErTWF0aC5pbXVsKGgsb3QpfDApK01hdGguaW11bChmLGl0KXwwKSk8PDEzKXwwO2M9KChpPWkrTWF0aC5pbXVsKGYsb3QpfDApKyhhPj4+MTMpfDApKyh3dD4+PjI2KXwwLHd0Jj02NzEwODg2MyxuPU1hdGguaW11bChPLFYpLGE9KGE9TWF0aC5pbXVsKE8sVSkpK01hdGguaW11bCh6LFYpfDAsaT1NYXRoLmltdWwoeixVKSxuPW4rTWF0aC5pbXVsKEwsSCl8MCxhPShhPWErTWF0aC5pbXVsKEwsRyl8MCkrTWF0aC5pbXVsKEMsSCl8MCxpPWkrTWF0aC5pbXVsKEMsRyl8MCxuPW4rTWF0aC5pbXVsKEEsVyl8MCxhPShhPWErTWF0aC5pbXVsKEEsWCl8MCkrTWF0aC5pbXVsKFMsVyl8MCxpPWkrTWF0aC5pbXVsKFMsWCl8MCxuPW4rTWF0aC5pbXVsKGssSil8MCxhPShhPWErTWF0aC5pbXVsKGssSyl8MCkrTWF0aC5pbXVsKFQsSil8MCxpPWkrTWF0aC5pbXVsKFQsSyl8MCxuPW4rTWF0aC5pbXVsKGIsJCl8MCxhPShhPWErTWF0aC5pbXVsKGIsdHQpfDApK01hdGguaW11bChfLCQpfDAsaT1pK01hdGguaW11bChfLHR0KXwwLG49bitNYXRoLmltdWwobSxydCl8MCxhPShhPWErTWF0aC5pbXVsKG0sbnQpfDApK01hdGguaW11bCh5LHJ0KXwwLGk9aStNYXRoLmltdWwoeSxudCl8MCxuPW4rTWF0aC5pbXVsKGQsaXQpfDAsYT0oYT1hK01hdGguaW11bChkLG90KXwwKStNYXRoLmltdWwoZyxpdCl8MCxpPWkrTWF0aC5pbXVsKGcsb3QpfDA7dmFyIGt0PShjKyhuPW4rTWF0aC5pbXVsKGgsbHQpfDApfDApKygoODE5MSYoYT0oYT1hK01hdGguaW11bChoLGN0KXwwKStNYXRoLmltdWwoZixsdCl8MCkpPDwxMyl8MDtjPSgoaT1pK01hdGguaW11bChmLGN0KXwwKSsoYT4+PjEzKXwwKSsoa3Q+Pj4yNil8MCxrdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoRCxWKSxhPShhPU1hdGguaW11bChELFUpKStNYXRoLmltdWwoUixWKXwwLGk9TWF0aC5pbXVsKFIsVSksbj1uK01hdGguaW11bChPLEgpfDAsYT0oYT1hK01hdGguaW11bChPLEcpfDApK01hdGguaW11bCh6LEgpfDAsaT1pK01hdGguaW11bCh6LEcpfDAsbj1uK01hdGguaW11bChMLFcpfDAsYT0oYT1hK01hdGguaW11bChMLFgpfDApK01hdGguaW11bChDLFcpfDAsaT1pK01hdGguaW11bChDLFgpfDAsbj1uK01hdGguaW11bChBLEopfDAsYT0oYT1hK01hdGguaW11bChBLEspfDApK01hdGguaW11bChTLEopfDAsaT1pK01hdGguaW11bChTLEspfDAsbj1uK01hdGguaW11bChrLCQpfDAsYT0oYT1hK01hdGguaW11bChrLHR0KXwwKStNYXRoLmltdWwoVCwkKXwwLGk9aStNYXRoLmltdWwoVCx0dCl8MCxuPW4rTWF0aC5pbXVsKGIscnQpfDAsYT0oYT1hK01hdGguaW11bChiLG50KXwwKStNYXRoLmltdWwoXyxydCl8MCxpPWkrTWF0aC5pbXVsKF8sbnQpfDAsbj1uK01hdGguaW11bChtLGl0KXwwLGE9KGE9YStNYXRoLmltdWwobSxvdCl8MCkrTWF0aC5pbXVsKHksaXQpfDAsaT1pK01hdGguaW11bCh5LG90KXwwLG49bitNYXRoLmltdWwoZCxsdCl8MCxhPShhPWErTWF0aC5pbXVsKGQsY3QpfDApK01hdGguaW11bChnLGx0KXwwLGk9aStNYXRoLmltdWwoZyxjdCl8MDt2YXIgVHQ9KGMrKG49bitNYXRoLmltdWwoaCxodCl8MCl8MCkrKCg4MTkxJihhPShhPWErTWF0aC5pbXVsKGgsZnQpfDApK01hdGguaW11bChmLGh0KXwwKSk8PDEzKXwwO2M9KChpPWkrTWF0aC5pbXVsKGYsZnQpfDApKyhhPj4+MTMpfDApKyhUdD4+PjI2KXwwLFR0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLFYpLGE9KGE9TWF0aC5pbXVsKEIsVSkpK01hdGguaW11bChOLFYpfDAsaT1NYXRoLmltdWwoTixVKSxuPW4rTWF0aC5pbXVsKEQsSCl8MCxhPShhPWErTWF0aC5pbXVsKEQsRyl8MCkrTWF0aC5pbXVsKFIsSCl8MCxpPWkrTWF0aC5pbXVsKFIsRyl8MCxuPW4rTWF0aC5pbXVsKE8sVyl8MCxhPShhPWErTWF0aC5pbXVsKE8sWCl8MCkrTWF0aC5pbXVsKHosVyl8MCxpPWkrTWF0aC5pbXVsKHosWCl8MCxuPW4rTWF0aC5pbXVsKEwsSil8MCxhPShhPWErTWF0aC5pbXVsKEwsSyl8MCkrTWF0aC5pbXVsKEMsSil8MCxpPWkrTWF0aC5pbXVsKEMsSyl8MCxuPW4rTWF0aC5pbXVsKEEsJCl8MCxhPShhPWErTWF0aC5pbXVsKEEsdHQpfDApK01hdGguaW11bChTLCQpfDAsaT1pK01hdGguaW11bChTLHR0KXwwLG49bitNYXRoLmltdWwoayxydCl8MCxhPShhPWErTWF0aC5pbXVsKGssbnQpfDApK01hdGguaW11bChULHJ0KXwwLGk9aStNYXRoLmltdWwoVCxudCl8MCxuPW4rTWF0aC5pbXVsKGIsaXQpfDAsYT0oYT1hK01hdGguaW11bChiLG90KXwwKStNYXRoLmltdWwoXyxpdCl8MCxpPWkrTWF0aC5pbXVsKF8sb3QpfDAsbj1uK01hdGguaW11bChtLGx0KXwwLGE9KGE9YStNYXRoLmltdWwobSxjdCl8MCkrTWF0aC5pbXVsKHksbHQpfDAsaT1pK01hdGguaW11bCh5LGN0KXwwLG49bitNYXRoLmltdWwoZCxodCl8MCxhPShhPWErTWF0aC5pbXVsKGQsZnQpfDApK01hdGguaW11bChnLGh0KXwwLGk9aStNYXRoLmltdWwoZyxmdCl8MDt2YXIgTXQ9KGMrKG49bitNYXRoLmltdWwoaCxkdCl8MCl8MCkrKCg4MTkxJihhPShhPWErTWF0aC5pbXVsKGgsZ3QpfDApK01hdGguaW11bChmLGR0KXwwKSk8PDEzKXwwO2M9KChpPWkrTWF0aC5pbXVsKGYsZ3QpfDApKyhhPj4+MTMpfDApKyhNdD4+PjI2KXwwLE10Jj02NzEwODg2MyxuPU1hdGguaW11bChCLEgpLGE9KGE9TWF0aC5pbXVsKEIsRykpK01hdGguaW11bChOLEgpfDAsaT1NYXRoLmltdWwoTixHKSxuPW4rTWF0aC5pbXVsKEQsVyl8MCxhPShhPWErTWF0aC5pbXVsKEQsWCl8MCkrTWF0aC5pbXVsKFIsVyl8MCxpPWkrTWF0aC5pbXVsKFIsWCl8MCxuPW4rTWF0aC5pbXVsKE8sSil8MCxhPShhPWErTWF0aC5pbXVsKE8sSyl8MCkrTWF0aC5pbXVsKHosSil8MCxpPWkrTWF0aC5pbXVsKHosSyl8MCxuPW4rTWF0aC5pbXVsKEwsJCl8MCxhPShhPWErTWF0aC5pbXVsKEwsdHQpfDApK01hdGguaW11bChDLCQpfDAsaT1pK01hdGguaW11bChDLHR0KXwwLG49bitNYXRoLmltdWwoQSxydCl8MCxhPShhPWErTWF0aC5pbXVsKEEsbnQpfDApK01hdGguaW11bChTLHJ0KXwwLGk9aStNYXRoLmltdWwoUyxudCl8MCxuPW4rTWF0aC5pbXVsKGssaXQpfDAsYT0oYT1hK01hdGguaW11bChrLG90KXwwKStNYXRoLmltdWwoVCxpdCl8MCxpPWkrTWF0aC5pbXVsKFQsb3QpfDAsbj1uK01hdGguaW11bChiLGx0KXwwLGE9KGE9YStNYXRoLmltdWwoYixjdCl8MCkrTWF0aC5pbXVsKF8sbHQpfDAsaT1pK01hdGguaW11bChfLGN0KXwwLG49bitNYXRoLmltdWwobSxodCl8MCxhPShhPWErTWF0aC5pbXVsKG0sZnQpfDApK01hdGguaW11bCh5LGh0KXwwLGk9aStNYXRoLmltdWwoeSxmdCl8MDt2YXIgQXQ9KGMrKG49bitNYXRoLmltdWwoZCxkdCl8MCl8MCkrKCg4MTkxJihhPShhPWErTWF0aC5pbXVsKGQsZ3QpfDApK01hdGguaW11bChnLGR0KXwwKSk8PDEzKXwwO2M9KChpPWkrTWF0aC5pbXVsKGcsZ3QpfDApKyhhPj4+MTMpfDApKyhBdD4+PjI2KXwwLEF0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLFcpLGE9KGE9TWF0aC5pbXVsKEIsWCkpK01hdGguaW11bChOLFcpfDAsaT1NYXRoLmltdWwoTixYKSxuPW4rTWF0aC5pbXVsKEQsSil8MCxhPShhPWErTWF0aC5pbXVsKEQsSyl8MCkrTWF0aC5pbXVsKFIsSil8MCxpPWkrTWF0aC5pbXVsKFIsSyl8MCxuPW4rTWF0aC5pbXVsKE8sJCl8MCxhPShhPWErTWF0aC5pbXVsKE8sdHQpfDApK01hdGguaW11bCh6LCQpfDAsaT1pK01hdGguaW11bCh6LHR0KXwwLG49bitNYXRoLmltdWwoTCxydCl8MCxhPShhPWErTWF0aC5pbXVsKEwsbnQpfDApK01hdGguaW11bChDLHJ0KXwwLGk9aStNYXRoLmltdWwoQyxudCl8MCxuPW4rTWF0aC5pbXVsKEEsaXQpfDAsYT0oYT1hK01hdGguaW11bChBLG90KXwwKStNYXRoLmltdWwoUyxpdCl8MCxpPWkrTWF0aC5pbXVsKFMsb3QpfDAsbj1uK01hdGguaW11bChrLGx0KXwwLGE9KGE9YStNYXRoLmltdWwoayxjdCl8MCkrTWF0aC5pbXVsKFQsbHQpfDAsaT1pK01hdGguaW11bChULGN0KXwwLG49bitNYXRoLmltdWwoYixodCl8MCxhPShhPWErTWF0aC5pbXVsKGIsZnQpfDApK01hdGguaW11bChfLGh0KXwwLGk9aStNYXRoLmltdWwoXyxmdCl8MDt2YXIgU3Q9KGMrKG49bitNYXRoLmltdWwobSxkdCl8MCl8MCkrKCg4MTkxJihhPShhPWErTWF0aC5pbXVsKG0sZ3QpfDApK01hdGguaW11bCh5LGR0KXwwKSk8PDEzKXwwO2M9KChpPWkrTWF0aC5pbXVsKHksZ3QpfDApKyhhPj4+MTMpfDApKyhTdD4+PjI2KXwwLFN0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLEopLGE9KGE9TWF0aC5pbXVsKEIsSykpK01hdGguaW11bChOLEopfDAsaT1NYXRoLmltdWwoTixLKSxuPW4rTWF0aC5pbXVsKEQsJCl8MCxhPShhPWErTWF0aC5pbXVsKEQsdHQpfDApK01hdGguaW11bChSLCQpfDAsaT1pK01hdGguaW11bChSLHR0KXwwLG49bitNYXRoLmltdWwoTyxydCl8MCxhPShhPWErTWF0aC5pbXVsKE8sbnQpfDApK01hdGguaW11bCh6LHJ0KXwwLGk9aStNYXRoLmltdWwoeixudCl8MCxuPW4rTWF0aC5pbXVsKEwsaXQpfDAsYT0oYT1hK01hdGguaW11bChMLG90KXwwKStNYXRoLmltdWwoQyxpdCl8MCxpPWkrTWF0aC5pbXVsKEMsb3QpfDAsbj1uK01hdGguaW11bChBLGx0KXwwLGE9KGE9YStNYXRoLmltdWwoQSxjdCl8MCkrTWF0aC5pbXVsKFMsbHQpfDAsaT1pK01hdGguaW11bChTLGN0KXwwLG49bitNYXRoLmltdWwoayxodCl8MCxhPShhPWErTWF0aC5pbXVsKGssZnQpfDApK01hdGguaW11bChULGh0KXwwLGk9aStNYXRoLmltdWwoVCxmdCl8MDt2YXIgRXQ9KGMrKG49bitNYXRoLmltdWwoYixkdCl8MCl8MCkrKCg4MTkxJihhPShhPWErTWF0aC5pbXVsKGIsZ3QpfDApK01hdGguaW11bChfLGR0KXwwKSk8PDEzKXwwO2M9KChpPWkrTWF0aC5pbXVsKF8sZ3QpfDApKyhhPj4+MTMpfDApKyhFdD4+PjI2KXwwLEV0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLCQpLGE9KGE9TWF0aC5pbXVsKEIsdHQpKStNYXRoLmltdWwoTiwkKXwwLGk9TWF0aC5pbXVsKE4sdHQpLG49bitNYXRoLmltdWwoRCxydCl8MCxhPShhPWErTWF0aC5pbXVsKEQsbnQpfDApK01hdGguaW11bChSLHJ0KXwwLGk9aStNYXRoLmltdWwoUixudCl8MCxuPW4rTWF0aC5pbXVsKE8saXQpfDAsYT0oYT1hK01hdGguaW11bChPLG90KXwwKStNYXRoLmltdWwoeixpdCl8MCxpPWkrTWF0aC5pbXVsKHosb3QpfDAsbj1uK01hdGguaW11bChMLGx0KXwwLGE9KGE9YStNYXRoLmltdWwoTCxjdCl8MCkrTWF0aC5pbXVsKEMsbHQpfDAsaT1pK01hdGguaW11bChDLGN0KXwwLG49bitNYXRoLmltdWwoQSxodCl8MCxhPShhPWErTWF0aC5pbXVsKEEsZnQpfDApK01hdGguaW11bChTLGh0KXwwLGk9aStNYXRoLmltdWwoUyxmdCl8MDt2YXIgTHQ9KGMrKG49bitNYXRoLmltdWwoayxkdCl8MCl8MCkrKCg4MTkxJihhPShhPWErTWF0aC5pbXVsKGssZ3QpfDApK01hdGguaW11bChULGR0KXwwKSk8PDEzKXwwO2M9KChpPWkrTWF0aC5pbXVsKFQsZ3QpfDApKyhhPj4+MTMpfDApKyhMdD4+PjI2KXwwLEx0Jj02NzEwODg2MyxuPU1hdGguaW11bChCLHJ0KSxhPShhPU1hdGguaW11bChCLG50KSkrTWF0aC5pbXVsKE4scnQpfDAsaT1NYXRoLmltdWwoTixudCksbj1uK01hdGguaW11bChELGl0KXwwLGE9KGE9YStNYXRoLmltdWwoRCxvdCl8MCkrTWF0aC5pbXVsKFIsaXQpfDAsaT1pK01hdGguaW11bChSLG90KXwwLG49bitNYXRoLmltdWwoTyxsdCl8MCxhPShhPWErTWF0aC5pbXVsKE8sY3QpfDApK01hdGguaW11bCh6LGx0KXwwLGk9aStNYXRoLmltdWwoeixjdCl8MCxuPW4rTWF0aC5pbXVsKEwsaHQpfDAsYT0oYT1hK01hdGguaW11bChMLGZ0KXwwKStNYXRoLmltdWwoQyxodCl8MCxpPWkrTWF0aC5pbXVsKEMsZnQpfDA7dmFyIEN0PShjKyhuPW4rTWF0aC5pbXVsKEEsZHQpfDApfDApKygoODE5MSYoYT0oYT1hK01hdGguaW11bChBLGd0KXwwKStNYXRoLmltdWwoUyxkdCl8MCkpPDwxMyl8MDtjPSgoaT1pK01hdGguaW11bChTLGd0KXwwKSsoYT4+PjEzKXwwKSsoQ3Q+Pj4yNil8MCxDdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixpdCksYT0oYT1NYXRoLmltdWwoQixvdCkpK01hdGguaW11bChOLGl0KXwwLGk9TWF0aC5pbXVsKE4sb3QpLG49bitNYXRoLmltdWwoRCxsdCl8MCxhPShhPWErTWF0aC5pbXVsKEQsY3QpfDApK01hdGguaW11bChSLGx0KXwwLGk9aStNYXRoLmltdWwoUixjdCl8MCxuPW4rTWF0aC5pbXVsKE8saHQpfDAsYT0oYT1hK01hdGguaW11bChPLGZ0KXwwKStNYXRoLmltdWwoeixodCl8MCxpPWkrTWF0aC5pbXVsKHosZnQpfDA7dmFyIFB0PShjKyhuPW4rTWF0aC5pbXVsKEwsZHQpfDApfDApKygoODE5MSYoYT0oYT1hK01hdGguaW11bChMLGd0KXwwKStNYXRoLmltdWwoQyxkdCl8MCkpPDwxMyl8MDtjPSgoaT1pK01hdGguaW11bChDLGd0KXwwKSsoYT4+PjEzKXwwKSsoUHQ+Pj4yNil8MCxQdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixsdCksYT0oYT1NYXRoLmltdWwoQixjdCkpK01hdGguaW11bChOLGx0KXwwLGk9TWF0aC5pbXVsKE4sY3QpLG49bitNYXRoLmltdWwoRCxodCl8MCxhPShhPWErTWF0aC5pbXVsKEQsZnQpfDApK01hdGguaW11bChSLGh0KXwwLGk9aStNYXRoLmltdWwoUixmdCl8MDt2YXIgT3Q9KGMrKG49bitNYXRoLmltdWwoTyxkdCl8MCl8MCkrKCg4MTkxJihhPShhPWErTWF0aC5pbXVsKE8sZ3QpfDApK01hdGguaW11bCh6LGR0KXwwKSk8PDEzKXwwO2M9KChpPWkrTWF0aC5pbXVsKHosZ3QpfDApKyhhPj4+MTMpfDApKyhPdD4+PjI2KXwwLE90Jj02NzEwODg2MyxuPU1hdGguaW11bChCLGh0KSxhPShhPU1hdGguaW11bChCLGZ0KSkrTWF0aC5pbXVsKE4saHQpfDAsaT1NYXRoLmltdWwoTixmdCk7dmFyIHp0PShjKyhuPW4rTWF0aC5pbXVsKEQsZHQpfDApfDApKygoODE5MSYoYT0oYT1hK01hdGguaW11bChELGd0KXwwKStNYXRoLmltdWwoUixkdCl8MCkpPDwxMyl8MDtjPSgoaT1pK01hdGguaW11bChSLGd0KXwwKSsoYT4+PjEzKXwwKSsoenQ+Pj4yNil8MCx6dCY9NjcxMDg4NjM7dmFyIEl0PShjKyhuPU1hdGguaW11bChCLGR0KSl8MCkrKCg4MTkxJihhPShhPU1hdGguaW11bChCLGd0KSkrTWF0aC5pbXVsKE4sZHQpfDApKTw8MTMpfDA7cmV0dXJuIGM9KChpPU1hdGguaW11bChOLGd0KSkrKGE+Pj4xMyl8MCkrKEl0Pj4+MjYpfDAsSXQmPTY3MTA4ODYzLGxbMF09dnQsbFsxXT1tdCxsWzJdPXl0LGxbM109eHQsbFs0XT1idCxsWzVdPV90LGxbNl09d3QsbFs3XT1rdCxsWzhdPVR0LGxbOV09TXQsbFsxMF09QXQsbFsxMV09U3QsbFsxMl09RXQsbFsxM109THQsbFsxNF09Q3QsbFsxNV09UHQsbFsxNl09T3QsbFsxN109enQsbFsxOF09SXQsMCE9PWMmJihsWzE5XT1jLHIubGVuZ3RoKyspLHJ9O2Z1bmN0aW9uIGQodCxlLHIpe3JldHVybihuZXcgZykubXVscCh0LGUscil9ZnVuY3Rpb24gZyh0LGUpe3RoaXMueD10LHRoaXMueT1lfU1hdGguaW11bHx8KHA9ZiksaS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aCt0Lmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT10Lmxlbmd0aD9wKHRoaXMsdCxlKTpyPDYzP2YodGhpcyx0LGUpOnI8MTAyND9mdW5jdGlvbih0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGg7Zm9yKHZhciBuPTAsYT0wLGk9MDtpPHIubGVuZ3RoLTE7aSsrKXt2YXIgbz1hO2E9MDtmb3IodmFyIHM9NjcxMDg4NjMmbixsPU1hdGgubWluKGksZS5sZW5ndGgtMSksYz1NYXRoLm1heCgwLGktdC5sZW5ndGgrMSk7Yzw9bDtjKyspe3ZhciB1PWktYyxoPSgwfHQud29yZHNbdV0pKigwfGUud29yZHNbY10pLGY9NjcxMDg4NjMmaDtzPTY3MTA4ODYzJihmPWYrc3wwKSxhKz0obz0obz1vKyhoLzY3MTA4ODY0fDApfDApKyhmPj4+MjYpfDApPj4+MjYsbyY9NjcxMDg4NjN9ci53b3Jkc1tpXT1zLG49byxvPWF9cmV0dXJuIDAhPT1uP3Iud29yZHNbaV09bjpyLmxlbmd0aC0tLHIuc3RyaXAoKX0odGhpcyx0LGUpOmQodGhpcyx0LGUpfSxnLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj1pLnByb3RvdHlwZS5fY291bnRCaXRzKHQpLTEsbj0wO248dDtuKyspZVtuXT10aGlzLnJldkJpbihuLHIsdCk7cmV0dXJuIGV9LGcucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbih0LGUscil7aWYoMD09PXR8fHQ9PT1yLTEpcmV0dXJuIHQ7Zm9yKHZhciBuPTAsYT0wO2E8ZTthKyspbnw9KDEmdCk8PGUtYS0xLHQ+Pj0xO3JldHVybiBufSxnLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHQsZSxyLG4sYSxpKXtmb3IodmFyIG89MDtvPGk7bysrKW5bb109ZVt0W29dXSxhW29dPXJbdFtvXV19LGcucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUscixuLGEsaSl7dGhpcy5wZXJtdXRlKGksdCxlLHIsbixhKTtmb3IodmFyIG89MTtvPGE7bzw8PTEpZm9yKHZhciBzPW88PDEsbD1NYXRoLmNvcygyKk1hdGguUEkvcyksYz1NYXRoLnNpbigyKk1hdGguUEkvcyksdT0wO3U8YTt1Kz1zKWZvcih2YXIgaD1sLGY9YyxwPTA7cDxvO3ArKyl7dmFyIGQ9clt1K3BdLGc9blt1K3BdLHY9clt1K3Arb10sbT1uW3UrcCtvXSx5PWgqdi1mKm07bT1oKm0rZip2LHY9eSxyW3UrcF09ZCt2LG5bdStwXT1nK20sclt1K3Arb109ZC12LG5bdStwK29dPWctbSxwIT09cyYmKHk9bCpoLWMqZixmPWwqZitjKmgsaD15KX19LGcucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MXxNYXRoLm1heChlLHQpLG49MSZyLGE9MDtmb3Iocj1yLzJ8MDtyO3I+Pj49MSlhKys7cmV0dXJuIDE8PGErMStufSxnLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKCEocjw9MSkpZm9yKHZhciBuPTA7bjxyLzI7bisrKXt2YXIgYT10W25dO3Rbbl09dFtyLW4tMV0sdFtyLW4tMV09YSxhPWVbbl0sZVtuXT0tZVtyLW4tMV0sZVtyLW4tMV09LWF9fSxnLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTA7bjxlLzI7bisrKXt2YXIgYT04MTkyKk1hdGgucm91bmQodFsyKm4rMV0vZSkrTWF0aC5yb3VuZCh0WzIqbl0vZSkrcjt0W25dPTY3MTA4ODYzJmEscj1hPDY3MTA4ODY0PzA6YS82NzEwODg2NHwwfXJldHVybiB0fSxnLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHQsZSxyLGEpe2Zvcih2YXIgaT0wLG89MDtvPGU7bysrKWkrPTB8dFtvXSxyWzIqb109ODE5MSZpLGk+Pj49MTMsclsyKm8rMV09ODE5MSZpLGk+Pj49MTM7Zm9yKG89MiplO288YTsrK28pcltvXT0wO24oMD09PWkpLG4oMD09KC04MTkyJmkpKX0sZy5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09MDtyZXR1cm4gZX0sZy5wcm90b3R5cGUubXVscD1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0aGlzLmd1ZXNzTGVuMTNiKHQubGVuZ3RoLGUubGVuZ3RoKSxhPXRoaXMubWFrZVJCVChuKSxpPXRoaXMuc3R1YihuKSxvPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSxsPW5ldyBBcnJheShuKSxjPW5ldyBBcnJheShuKSx1PW5ldyBBcnJheShuKSxoPW5ldyBBcnJheShuKSxmPXIud29yZHM7Zi5sZW5ndGg9bix0aGlzLmNvbnZlcnQxM2IodC53b3Jkcyx0Lmxlbmd0aCxvLG4pLHRoaXMuY29udmVydDEzYihlLndvcmRzLGUubGVuZ3RoLGMsbiksdGhpcy50cmFuc2Zvcm0obyxpLHMsbCxuLGEpLHRoaXMudHJhbnNmb3JtKGMsaSx1LGgsbixhKTtmb3IodmFyIHA9MDtwPG47cCsrKXt2YXIgZD1zW3BdKnVbcF0tbFtwXSpoW3BdO2xbcF09c1twXSpoW3BdK2xbcF0qdVtwXSxzW3BdPWR9cmV0dXJuIHRoaXMuY29uanVnYXRlKHMsbCxuKSx0aGlzLnRyYW5zZm9ybShzLGwsZixpLG4sYSksdGhpcy5jb25qdWdhdGUoZixpLG4pLHRoaXMubm9ybWFsaXplMTNiKGYsbiksci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGgsci5zdHJpcCgpfSxpLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGkobnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSx0aGlzLm11bFRvKHQsZSl9LGkucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGkobnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSxkKHRoaXMsdCxlKX0saS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHQsdGhpcyl9LGkucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpO2Zvcih2YXIgZT0wLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGE9KDB8dGhpcy53b3Jkc1tyXSkqdCxpPSg2NzEwODg2MyZhKSsoNjcxMDg4NjMmZSk7ZT4+PTI2LGUrPWEvNjcxMDg4NjR8MCxlKz1pPj4+MjYsdGhpcy53b3Jkc1tyXT02NzEwODg2MyZpfXJldHVybiAwIT09ZSYmKHRoaXMud29yZHNbcl09ZSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxpLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4odCl9LGkucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0saS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0saS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5iaXRMZW5ndGgoKSkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1yLzI2fDAsYT1yJTI2O2Vbcl09KHQud29yZHNbbl0mMTw8YSk+Pj5hfXJldHVybiBlfSh0KTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBpKDEpO2Zvcih2YXIgcj10aGlzLG49MDtuPGUubGVuZ3RoJiYwPT09ZVtuXTtuKysscj1yLnNxcigpKTtpZigrK248ZS5sZW5ndGgpZm9yKHZhciBhPXIuc3FyKCk7bjxlLmxlbmd0aDtuKyssYT1hLnNxcigpKTAhPT1lW25dJiYocj1yLm11bChhKSk7cmV0dXJuIHJ9LGkucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGUscj10JTI2LGE9KHQtcikvMjYsaT02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBvPTA7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHM9dGhpcy53b3Jkc1tlXSZpLGw9KDB8dGhpcy53b3Jkc1tlXSktczw8cjt0aGlzLndvcmRzW2VdPWx8byxvPXM+Pj4yNi1yfW8mJih0aGlzLndvcmRzW2VdPW8sdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWEpe2ZvcihlPXRoaXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy53b3Jkc1tlK2FdPXRoaXMud29yZHNbZV07Zm9yKGU9MDtlPGE7ZSsrKXRoaXMud29yZHNbZV09MDt0aGlzLmxlbmd0aCs9YX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odCl9LGkucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih0LGUscil7dmFyIGE7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApLGE9ZT8oZS1lJTI2KS8yNjowO3ZhciBpPXQlMjYsbz1NYXRoLm1pbigodC1pKS8yNix0aGlzLmxlbmd0aCkscz02NzEwODg2M142NzEwODg2Mz4+Pmk8PGksbD1yO2lmKGEtPW8sYT1NYXRoLm1heCgwLGEpLGwpe2Zvcih2YXIgYz0wO2M8bztjKyspbC53b3Jkc1tjXT10aGlzLndvcmRzW2NdO2wubGVuZ3RoPW99aWYoMD09PW8pO2Vsc2UgaWYodGhpcy5sZW5ndGg+bylmb3IodGhpcy5sZW5ndGgtPW8sYz0wO2M8dGhpcy5sZW5ndGg7YysrKXRoaXMud29yZHNbY109dGhpcy53b3Jkc1tjK29dO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHU9MDtmb3IoYz10aGlzLmxlbmd0aC0xO2M+PTAmJigwIT09dXx8Yz49YSk7Yy0tKXt2YXIgaD0wfHRoaXMud29yZHNbY107dGhpcy53b3Jkc1tjXT11PDwyNi1pfGg+Pj5pLHU9aCZzfXJldHVybiBsJiYwIT09dSYmKGwud29yZHNbbC5sZW5ndGgrK109dSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0saS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih0LGUscil9LGkucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0saS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odCl9LGkucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih0KX0saS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4odCl9LGkucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsYT0xPDxlO3JldHVybiEodGhpcy5sZW5ndGg8PXIpJiYhISh0aGlzLndvcmRzW3JdJmEpfSxpLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNjtpZihuKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcztpZigwIT09ZSYmcisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHIsdGhpcy5sZW5ndGgpLDAhPT1lKXt2YXIgYT02NzEwODg2M142NzEwODg2Mz4+PmU8PGU7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9YX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbih0KX0saS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oIm51bWJlciI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MD90aGlzLmlzdWJuKC10KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHQ/KHRoaXMud29yZHNbMF09dC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih0KX0saS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHQpe3RoaXMud29yZHNbMF0rPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXT49NjcxMDg4NjQ7ZSsrKXRoaXMud29yZHNbZV0tPTY3MTA4ODY0LGU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZSsxXT0xOnRoaXMud29yZHNbZSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxlKzEpLHRoaXN9LGkucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHQpe2lmKG4oIm51bWJlciI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MClyZXR1cm4gdGhpcy5pYWRkbigtdCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXQsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPDA7ZSsrKXRoaXMud29yZHNbZV0rPTY3MTA4ODY0LHRoaXMud29yZHNbZSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4odCl9LGkucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih0KX0saS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30saS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LGkucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbih0LGUscil7dmFyIGEsaSxvPXQubGVuZ3RoK3I7dGhpcy5fZXhwYW5kKG8pO3ZhciBzPTA7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKyl7aT0oMHx0aGlzLndvcmRzW2Ercl0pK3M7dmFyIGw9KDB8dC53b3Jkc1thXSkqZTtzPSgoaS09NjcxMDg4NjMmbCk+PjI2KS0obC82NzEwODg2NHwwKSx0aGlzLndvcmRzW2Ercl09NjcxMDg4NjMmaX1mb3IoO2E8dGhpcy5sZW5ndGgtcjthKyspcz0oaT0oMHx0aGlzLndvcmRzW2Ercl0pK3MpPj4yNix0aGlzLndvcmRzW2Ercl09NjcxMDg4NjMmaTtpZigwPT09cylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihuKC0xPT09cykscz0wLGE9MDthPHRoaXMubGVuZ3RoO2ErKylzPShpPS0oMHx0aGlzLndvcmRzW2FdKStzKT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZpO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbih0LGUpe3ZhciByPSh0aGlzLmxlbmd0aCx0Lmxlbmd0aCksbj10aGlzLmNsb25lKCksYT10LG89MHxhLndvcmRzW2EubGVuZ3RoLTFdOzAhPT0ocj0yNi10aGlzLl9jb3VudEJpdHMobykpJiYoYT1hLnVzaGxuKHIpLG4uaXVzaGxuKHIpLG89MHxhLndvcmRzW2EubGVuZ3RoLTFdKTt2YXIgcyxsPW4ubGVuZ3RoLWEubGVuZ3RoO2lmKCJtb2QiIT09ZSl7KHM9bmV3IGkobnVsbCkpLmxlbmd0aD1sKzEscy53b3Jkcz1uZXcgQXJyYXkocy5sZW5ndGgpO2Zvcih2YXIgYz0wO2M8cy5sZW5ndGg7YysrKXMud29yZHNbY109MH12YXIgdT1uLmNsb25lKCkuX2lzaGxuc3VibXVsKGEsMSxsKTswPT09dS5uZWdhdGl2ZSYmKG49dSxzJiYocy53b3Jkc1tsXT0xKSk7Zm9yKHZhciBoPWwtMTtoPj0wO2gtLSl7dmFyIGY9NjcxMDg4NjQqKDB8bi53b3Jkc1thLmxlbmd0aCtoXSkrKDB8bi53b3Jkc1thLmxlbmd0aCtoLTFdKTtmb3IoZj1NYXRoLm1pbihmL298MCw2NzEwODg2Myksbi5faXNobG5zdWJtdWwoYSxmLGgpOzAhPT1uLm5lZ2F0aXZlOylmLS0sbi5uZWdhdGl2ZT0wLG4uX2lzaGxuc3VibXVsKGEsMSxoKSxuLmlzWmVybygpfHwobi5uZWdhdGl2ZV49MSk7cyYmKHMud29yZHNbaF09Zil9cmV0dXJuIHMmJnMuc3RyaXAoKSxuLnN0cmlwKCksImRpdiIhPT1lJiYwIT09ciYmbi5pdXNocm4ocikse2RpdjpzfHxudWxsLG1vZDpufX0saS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbighdC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBpKDApLG1vZDpuZXcgaSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlPyhzPXRoaXMubmVnKCkuZGl2bW9kKHQsZSksIm1vZCIhPT1lJiYoYT1zLmRpdi5uZWcoKSksImRpdiIhPT1lJiYobz1zLm1vZC5uZWcoKSxyJiYwIT09by5uZWdhdGl2ZSYmby5pYWRkKHQpKSx7ZGl2OmEsbW9kOm99KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmU/KHM9dGhpcy5kaXZtb2QodC5uZWcoKSxlKSwibW9kIiE9PWUmJihhPXMuZGl2Lm5lZygpKSx7ZGl2OmEsbW9kOnMubW9kfSk6MCE9KHRoaXMubmVnYXRpdmUmdC5uZWdhdGl2ZSk/KHM9dGhpcy5uZWcoKS5kaXZtb2QodC5uZWcoKSxlKSwiZGl2IiE9PWUmJihvPXMubW9kLm5lZygpLHImJjAhPT1vLm5lZ2F0aXZlJiZvLmlzdWIodCkpLHtkaXY6cy5kaXYsbW9kOm99KTp0Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodCk8MD97ZGl2Om5ldyBpKDApLG1vZDp0aGlzfToxPT09dC5sZW5ndGg/ImRpdiI9PT1lP3tkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWU/e2RpdjpudWxsLG1vZDpuZXcgaSh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bmV3IGkodGhpcy5tb2RuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih0LGUpO3ZhciBhLG8sc30saS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LCJkaXYiLCExKS5kaXZ9LGkucHJvdG90eXBlLm1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCwibW9kIiwhMSkubW9kfSxpLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LCJtb2QiLCEwKS5tb2R9LGkucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGl2bW9kKHQpO2lmKGUubW9kLmlzWmVybygpKXJldHVybiBlLmRpdjt2YXIgcj0wIT09ZS5kaXYubmVnYXRpdmU/ZS5tb2QuaXN1Yih0KTplLm1vZCxuPXQudXNocm4oMSksYT10LmFuZGxuKDEpLGk9ci5jbXAobik7cmV0dXJuIGk8MHx8MT09PWEmJjA9PT1pP2UuZGl2OjAhPT1lLmRpdi5uZWdhdGl2ZT9lLmRpdi5pc3VibigxKTplLmRpdi5pYWRkbigxKX0saS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9KDE8PDI2KSV0LHI9MCxhPXRoaXMubGVuZ3RoLTE7YT49MDthLS0pcj0oZSpyKygwfHRoaXMud29yZHNbYV0pKSV0O3JldHVybiByfSxpLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBhPSgwfHRoaXMud29yZHNbcl0pKzY3MTA4ODY0KmU7dGhpcy53b3Jkc1tyXT1hL3R8MCxlPWEldH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxpLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4odCl9LGkucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBhPW5ldyBpKDEpLG89bmV3IGkoMCkscz1uZXcgaSgwKSxsPW5ldyBpKDEpLGM9MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpOyllLml1c2hybigxKSxyLml1c2hybigxKSwrK2M7Zm9yKHZhciB1PXIuY2xvbmUoKSxoPWUuY2xvbmUoKTshZS5pc1plcm8oKTspe2Zvcih2YXIgZj0wLHA9MTswPT0oZS53b3Jkc1swXSZwKSYmZjwyNjsrK2YscDw8PTEpO2lmKGY+MClmb3IoZS5pdXNocm4oZik7Zi0tID4wOykoYS5pc09kZCgpfHxvLmlzT2RkKCkpJiYoYS5pYWRkKHUpLG8uaXN1YihoKSksYS5pdXNocm4oMSksby5pdXNocm4oMSk7Zm9yKHZhciBkPTAsZz0xOzA9PShyLndvcmRzWzBdJmcpJiZkPDI2OysrZCxnPDw9MSk7aWYoZD4wKWZvcihyLml1c2hybihkKTtkLS0gPjA7KShzLmlzT2RkKCl8fGwuaXNPZGQoKSkmJihzLmlhZGQodSksbC5pc3ViKGgpKSxzLml1c2hybigxKSxsLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLGEuaXN1YihzKSxvLmlzdWIobCkpOihyLmlzdWIoZSkscy5pc3ViKGEpLGwuaXN1YihvKSl9cmV0dXJue2E6cyxiOmwsZ2NkOnIuaXVzaGxuKGMpfX0saS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgYSxvPW5ldyBpKDEpLHM9bmV3IGkoMCksbD1yLmNsb25lKCk7ZS5jbXBuKDEpPjAmJnIuY21wbigxKT4wOyl7Zm9yKHZhciBjPTAsdT0xOzA9PShlLndvcmRzWzBdJnUpJiZjPDI2OysrYyx1PDw9MSk7aWYoYz4wKWZvcihlLml1c2hybihjKTtjLS0gPjA7KW8uaXNPZGQoKSYmby5pYWRkKGwpLG8uaXVzaHJuKDEpO2Zvcih2YXIgaD0wLGY9MTswPT0oci53b3Jkc1swXSZmKSYmaDwyNjsrK2gsZjw8PTEpO2lmKGg+MClmb3Ioci5pdXNocm4oaCk7aC0tID4wOylzLmlzT2RkKCkmJnMuaWFkZChsKSxzLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLG8uaXN1YihzKSk6KHIuaXN1YihlKSxzLmlzdWIobykpfXJldHVybihhPTA9PT1lLmNtcG4oMSk/bzpzKS5jbXBuKDApPDAmJmEuaWFkZCh0KSxhfSxpLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdC5hYnMoKTtpZih0LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBlPXRoaXMuY2xvbmUoKSxyPXQuY2xvbmUoKTtlLm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBhPWUuY21wKHIpO2lmKGE8MCl7dmFyIGk9ZTtlPXIscj1pfWVsc2UgaWYoMD09PWF8fDA9PT1yLmNtcG4oMSkpYnJlYWs7ZS5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0saS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEudW1vZCh0KX0saS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxpLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0saS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud29yZHNbMF0mdH0saS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQpO3ZhciBlPXQlMjYscj0odC1lKS8yNixhPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl18PWEsdGhpcztmb3IodmFyIGk9YSxvPXI7MCE9PWkmJm88dGhpcy5sZW5ndGg7bysrKXt2YXIgcz0wfHRoaXMud29yZHNbb107aT0ocys9aSk+Pj4yNixzJj02NzEwODg2Myx0aGlzLndvcmRzW29dPXN9cmV0dXJuIDAhPT1pJiYodGhpcy53b3Jkc1tvXT1pLHRoaXMubGVuZ3RoKyspLHRoaXN9LGkucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxpLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhcilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmcilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSllPTE7ZWxzZXtyJiYodD0tdCksbih0PD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgYT0wfHRoaXMud29yZHNbMF07ZT1hPT09dD8wOmE8dD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1lOmV9LGkucHJvdG90eXBlLmNtcD1mdW5jdGlvbih0KXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiAxO3ZhciBlPXRoaXMudWNtcCh0KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxpLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGVuZ3RoPnQubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHQubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49MHx0aGlzLndvcmRzW3JdLGE9MHx0LndvcmRzW3JdO2lmKG4hPT1hKXtuPGE/ZT0tMTpuPmEmJihlPTEpO2JyZWFrfX1yZXR1cm4gZX0saS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXBuKHQpfSxpLnByb3RvdHlwZS5ndD1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wKHQpfSxpLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk+PTB9LGkucHJvdG90eXBlLmd0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk+PTB9LGkucHJvdG90eXBlLmx0bj1mdW5jdGlvbih0KXtyZXR1cm4tMT09PXRoaXMuY21wbih0KX0saS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24odCl7cmV0dXJuLTE9PT10aGlzLmNtcCh0KX0saS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPD0wfSxpLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPD0wfSxpLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcG4odCl9LGkucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXAodCl9LGkucmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdyh0KX0saS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbigwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSx0LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQodCl9LGkucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxpLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVkPXQsdGhpc30saS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQodCl9LGkucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHQpfSxpLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyx0KX0saS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsdCl9LGkucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHQpfSxpLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyx0KX0saS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5tdWwodGhpcyx0KX0saS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQuaW11bCh0aGlzLHQpfSxpLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0saS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LGkucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxpLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0saS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LGkucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCYmIXQucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHQpfTt2YXIgdj17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIG0odCxlKXt0aGlzLm5hbWU9dCx0aGlzLnA9bmV3IGkoZSwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IGkoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHkoKXttLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24geCgpe20uY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7bS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIF8oKXttLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gdyh0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPWkuX3ByaW1lKHQpO3RoaXMubT1lLnAsdGhpcy5wcmltZT1lfWVsc2Ugbih0Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXQsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGsodCl7dy5jYWxsKHRoaXMsdCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgaSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1tLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGkobnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0fSxtLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDtkb3t0aGlzLnNwbGl0KHIsdGhpcy50bXApLGU9KHI9KHI9dGhpcy5pbXVsSyhyKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKGU+dGhpcy5uKTt2YXIgbj1lPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6ci5zdHJpcCgpLHJ9LG0ucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pdXNocm4odGhpcy5uLDAsZSl9LG0ucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3JldHVybiB0LmltdWwodGhpcy5rKX0sYSh5LG0pLHkucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWluKHQubGVuZ3RoLDkpLG49MDtuPHI7bisrKWUud29yZHNbbl09dC53b3Jkc1tuXTtpZihlLmxlbmd0aD1yLHQubGVuZ3RoPD05KXJldHVybiB0LndvcmRzWzBdPTAsdm9pZCh0Lmxlbmd0aD0xKTt2YXIgYT10LndvcmRzWzldO2ZvcihlLndvcmRzW2UubGVuZ3RoKytdPTQxOTQzMDMmYSxuPTEwO248dC5sZW5ndGg7bisrKXt2YXIgaT0wfHQud29yZHNbbl07dC53b3Jkc1tuLTEwXT0oNDE5NDMwMyZpKTw8NHxhPj4+MjIsYT1pfWE+Pj49MjIsdC53b3Jkc1tuLTEwXT1hLDA9PT1hJiZ0Lmxlbmd0aD4xMD90Lmxlbmd0aC09MTA6dC5sZW5ndGgtPTl9LHkucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3Qud29yZHNbdC5sZW5ndGhdPTAsdC53b3Jkc1t0Lmxlbmd0aCsxXT0wLHQubGVuZ3RoKz0yO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MHx0LndvcmRzW3JdO2UrPTk3NypuLHQud29yZHNbcl09NjcxMDg4NjMmZSxlPTY0Km4rKGUvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiYodC5sZW5ndGgtLSwwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmdC5sZW5ndGgtLSksdH0sYSh4LG0pLGEoYixtKSxhKF8sbSksXy5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0xOSooMHx0LndvcmRzW3JdKStlLGE9NjcxMDg4NjMmbjtuPj4+PTI2LHQud29yZHNbcl09YSxlPW59cmV0dXJuIDAhPT1lJiYodC53b3Jkc1t0Lmxlbmd0aCsrXT1lKSx0fSxpLl9wcmltZT1mdW5jdGlvbih0KXtpZih2W3RdKXJldHVybiB2W3RdO3ZhciBlO2lmKCJrMjU2Ij09PXQpZT1uZXcgeTtlbHNlIGlmKCJwMjI0Ij09PXQpZT1uZXcgeDtlbHNlIGlmKCJwMTkyIj09PXQpZT1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09dCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIit0KTtlPW5ldyBffXJldHVybiB2W3RdPWUsZX0sdy5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxuKHQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHcucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHQsZSl7bigwPT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxuKHQucmVkJiZ0LnJlZD09PWUucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHcucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHQpLl9mb3JjZVJlZCh0aGlzKTp0LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pc1plcm8oKT90LmNsb25lKCk6dGhpcy5tLnN1Yih0KS5fZm9yY2VSZWQodGhpcyl9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5zdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlzdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyfSx3LnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MSh0KSx0aGlzLmltb2QodC51c2hsbihlKSl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0LmltdWwoZSkpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0Lm11bChlKSl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW11bCh0LHQuY2xvbmUoKSl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tdWwodCx0KX0sdy5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih0KXtpZih0LmlzWmVybygpKXJldHVybiB0LmNsb25lKCk7dmFyIGU9dGhpcy5tLmFuZGxuKDMpO2lmKG4oZSUyPT0xKSwzPT09ZSl7dmFyIHI9dGhpcy5tLmFkZChuZXcgaSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyh0LHIpfWZvcih2YXIgYT10aGlzLm0uc3VibigxKSxvPTA7IWEuaXNaZXJvKCkmJjA9PT1hLmFuZGxuKDEpOylvKyssYS5pdXNocm4oMSk7bighYS5pc1plcm8oKSk7dmFyIHM9bmV3IGkoMSkudG9SZWQodGhpcyksbD1zLnJlZE5lZygpLGM9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHU9dGhpcy5tLmJpdExlbmd0aCgpO2Zvcih1PW5ldyBpKDIqdSp1KS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3codSxjKS5jbXAobCk7KXUucmVkSUFkZChsKTtmb3IodmFyIGg9dGhpcy5wb3codSxhKSxmPXRoaXMucG93KHQsYS5hZGRuKDEpLml1c2hybigxKSkscD10aGlzLnBvdyh0LGEpLGQ9bzswIT09cC5jbXAocyk7KXtmb3IodmFyIGc9cCx2PTA7MCE9PWcuY21wKHMpO3YrKylnPWcucmVkU3FyKCk7bih2PGQpO3ZhciBtPXRoaXMucG93KGgsbmV3IGkoMSkuaXVzaGxuKGQtdi0xKSk7Zj1mLnJlZE11bChtKSxoPW0ucmVkU3FyKCkscD1wLnJlZE11bChoKSxkPXZ9cmV0dXJuIGZ9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWUubmVnYXRpdmU/KGUubmVnYXRpdmU9MCx0aGlzLmltb2QoZSkucmVkTmVnKCkpOnRoaXMuaW1vZChlKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQsZSl7aWYoZS5pc1plcm8oKSlyZXR1cm4gbmV3IGkoMSkudG9SZWQodGhpcyk7aWYoMD09PWUuY21wbigxKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciByPW5ldyBBcnJheSgxNik7clswXT1uZXcgaSgxKS50b1JlZCh0aGlzKSxyWzFdPXQ7Zm9yKHZhciBuPTI7bjxyLmxlbmd0aDtuKyspcltuXT10aGlzLm11bChyW24tMV0sdCk7dmFyIGE9clswXSxvPTAscz0wLGw9ZS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PWwmJihsPTI2KSxuPWUubGVuZ3RoLTE7bj49MDtuLS0pe2Zvcih2YXIgYz1lLndvcmRzW25dLHU9bC0xO3U+PTA7dS0tKXt2YXIgaD1jPj51JjE7YSE9PXJbMF0mJihhPXRoaXMuc3FyKGEpKSwwIT09aHx8MCE9PW8/KG88PD0xLG98PWgsKDQ9PT0rK3N8fDA9PT1uJiYwPT09dSkmJihhPXRoaXMubXVsKGEscltvXSkscz0wLG89MCkpOnM9MH1sPTI2fXJldHVybiBhfSx3LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7dmFyIGU9dC51bW9kKHRoaXMubSk7cmV0dXJuIGU9PT10P2UuY2xvbmUoKTplfSx3LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCk7cmV0dXJuIGUucmVkPW51bGwsZX0saS5tb250PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgayh0KX0sYShrLHcpLGsucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQudXNobG4odGhpcy5zaGlmdCkpfSxrLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGUucmVkPW51bGwsZX0say5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIHQud29yZHNbMF09MCx0Lmxlbmd0aD0xLHQ7dmFyIHI9dC5pbXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksYT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLGk9YTtyZXR1cm4gYS5jbXAodGhpcy5tKT49MD9pPWEuaXN1Yih0aGlzLm0pOmEuY21wbigwKTwwJiYoaT1hLmlhZGQodGhpcy5tKSksaS5fZm9yY2VSZWQodGhpcyl9LGsucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBpKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgcj10Lm11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGE9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxvPWE7cmV0dXJuIGEuY21wKHRoaXMubSk+PTA/bz1hLmlzdWIodGhpcy5tKTphLmNtcG4oMCk8MCYmKG89YS5pYWRkKHRoaXMubSkpLG8uX2ZvcmNlUmVkKHRoaXMpfSxrLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KCJ1bmRlZmluZWQiPT10eXBlb2YgZXx8ZSx0aGlzKX0se2J1ZmZlcjoxMDV9XSw5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixuLGE9dC5sZW5ndGgsaT0wO2ZvcihlPTA7ZTxhOysrZSlpKz10W2VdLmxlbmd0aDt2YXIgbz1uZXcgQXJyYXkoaSkscz0wO2ZvcihlPTA7ZTxhOysrZSl7dmFyIGw9dFtlXSxjPWwubGVuZ3RoO2ZvcihyPTA7cjxjOysrcil7dmFyIHU9b1tzKytdPW5ldyBBcnJheShjLTEpLGg9MDtmb3Iobj0wO248YzsrK24pbiE9PXImJih1W2grK109bFtuXSk7aWYoMSZyKXt2YXIgZj11WzFdO3VbMV09dVswXSx1WzBdPWZ9fX1yZXR1cm4gb319LHt9XSw5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIG49W10sYyhhPXQsYSx1LCEwKSxuO2Nhc2UgMjpyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9jKHQsdCxlLCEwKTpmdW5jdGlvbih0LGUpe3JldHVybiBuPVtdLGModCxlLHUsITEpLG59KHQsZSk7Y2FzZSAzOnJldHVybiBjKHQsZSxyLCExKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiYm94LWludGVyc2VjdDogSW52YWxpZCBhcmd1bWVudHMiKX12YXIgYX07dmFyIG4sYT10KCJ0eXBlZGFycmF5LXBvb2wiKSxpPXQoIi4vbGliL3N3ZWVwIiksbz10KCIuL2xpYi9pbnRlcnNlY3QiKTtmdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciByPTA7cjx0OysrcilpZighKGVbcl08PWVbcit0XSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbCh0LGUscixuKXtmb3IodmFyIGE9MCxpPTAsbz0wLGw9dC5sZW5ndGg7bzxsOysrbyl7dmFyIGM9dFtvXTtpZighcyhlLGMpKXtmb3IodmFyIHU9MDt1PDIqZTsrK3UpclthKytdPWNbdV07bltpKytdPW99fXJldHVybiBpfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIHM9dC5sZW5ndGgsYz1lLmxlbmd0aDtpZighKHM8PTB8fGM8PTApKXt2YXIgdT10WzBdLmxlbmd0aD4+PjE7aWYoISh1PD0wKSl7dmFyIGgsZj1hLm1hbGxvY0RvdWJsZSgyKnUqcykscD1hLm1hbGxvY0ludDMyKHMpO2lmKChzPWwodCx1LGYscCkpPjApe2lmKDE9PT11JiZuKWkuaW5pdChzKSxoPWkuc3dlZXBDb21wbGV0ZSh1LHIsMCxzLGYscCwwLHMsZixwKTtlbHNle3ZhciBkPWEubWFsbG9jRG91YmxlKDIqdSpjKSxnPWEubWFsbG9jSW50MzIoYyk7KGM9bChlLHUsZCxnKSk+MCYmKGkuaW5pdChzK2MpLGg9MT09PXU/aS5zd2VlcEJpcGFydGl0ZSh1LHIsMCxzLGYscCwwLGMsZCxnKTpvKHUscixuLHMsZixwLGMsZCxnKSxhLmZyZWUoZCksYS5mcmVlKGcpKX1hLmZyZWUoZiksYS5mcmVlKHApfXJldHVybiBofX19ZnVuY3Rpb24gdSh0LGUpe24ucHVzaChbdCxlXSl9fSx7Ii4vbGliL2ludGVyc2VjdCI6MTAwLCIuL2xpYi9zd2VlcCI6MTA0LCJ0eXBlZGFycmF5LXBvb2wiOjU0NH1dLDk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPSJkIixhPSJheCIsaT0idnYiLG89ImZwIixzPSJlcyIsbD0icnMiLGM9InJlIix1PSJyYiIsaD0icmkiLGY9InJwIixwPSJicyIsZD0iYmUiLGc9ImJiIix2PSJiaSIsbT0iYnAiLHk9InJ2Iix4PSJRIixiPVtuLGEsaSxsLGMsdSxoLHAsZCxnLHZdO2Z1bmN0aW9uIF8odCl7dmFyIGU9ImJydXRlRm9yY2UiKyh0PyJGdWxsIjoiUGFydGlhbCIpLHI9W10sXz1iLnNsaWNlKCk7dHx8Xy5zcGxpY2UoMywwLG8pO3ZhciB3PVsiZnVuY3Rpb24gIitlKyIoIitfLmpvaW4oKSsiKXsiXTtmdW5jdGlvbiBrKGUsbyl7dmFyIF89ZnVuY3Rpb24odCxlLHIpe3ZhciBvPSJicnV0ZUZvcmNlIisodD8iUmVkIjoiQmx1ZSIpKyhlPyJGbGlwIjoiIikrKHI/IkZ1bGwiOiIiKSxfPVsiZnVuY3Rpb24gIixvLCIoIixiLmpvaW4oKSwiKXsiLCJ2YXIgIixzLCI9MioiLG4sIjsiXSx3PSJmb3IodmFyIGk9IitsKyIsIitmKyI9IitzKyIqIitsKyI7aTwiK2MrIjsrK2ksIitmKyIrPSIrcysiKXt2YXIgeDA9Iit1KyJbIithKyIrIitmKyJdLHgxPSIrdSsiWyIrYSsiKyIrZisiKyIrbisiXSx4aT0iK2grIltpXTsiLGs9ImZvcih2YXIgaj0iK3ArIiwiK20rIj0iK3MrIioiK3ArIjtqPCIrZCsiOysraiwiK20rIis9IitzKyIpe3ZhciB5MD0iK2crIlsiK2ErIisiK20rIl0sIisocj8ieTE9IitnKyJbIithKyIrIittKyIrIituKyJdLCI6IiIpKyJ5aT0iK3YrIltqXTsiO3JldHVybiB0P18ucHVzaCh3LHgsIjoiLGspOl8ucHVzaChrLHgsIjoiLHcpLHI/Xy5wdXNoKCJpZih5MTx4MHx8eDE8eTApY29udGludWU7Iik6ZT9fLnB1c2goImlmKHkwPD14MHx8eDE8eTApY29udGludWU7Iik6Xy5wdXNoKCJpZih5MDx4MHx8eDE8eTApY29udGludWU7IiksXy5wdXNoKCJmb3IodmFyIGs9IithKyIrMTtrPCIrbisiOysrayl7dmFyIHIwPSIrdSsiW2srIitmKyJdLHIxPSIrdSsiW2srIituKyIrIitmKyJdLGIwPSIrZysiW2srIittKyJdLGIxPSIrZysiW2srIituKyIrIittKyJdO2lmKHIxPGIwfHxiMTxyMCljb250aW51ZSAiK3grIjt9dmFyICIreSsiPSIraSsiKCIpLGU/Xy5wdXNoKCJ5aSx4aSIpOl8ucHVzaCgieGkseWkiKSxfLnB1c2goIik7aWYoIit5KyIhPT12b2lkIDApcmV0dXJuICIreSsiO319fSIpLHtuYW1lOm8sY29kZTpfLmpvaW4oIiIpfX0oZSxvLHQpO3IucHVzaChfLmNvZGUpLHcucHVzaCgicmV0dXJuICIrXy5uYW1lKyIoIitiLmpvaW4oKSsiKTsiKX13LnB1c2goImlmKCIrYysiLSIrbCsiPiIrZCsiLSIrcCsiKXsiKSx0PyhrKCEwLCExKSx3LnB1c2goIn1lbHNleyIpLGsoITEsITEpKToody5wdXNoKCJpZigiK28rIil7IiksayghMCwhMCksdy5wdXNoKCJ9ZWxzZXsiKSxrKCEwLCExKSx3LnB1c2goIn19ZWxzZXtpZigiK28rIil7IiksayghMSwhMCksdy5wdXNoKCJ9ZWxzZXsiKSxrKCExLCExKSx3LnB1c2goIn0iKSksdy5wdXNoKCJ9fXJldHVybiAiK2UpO3ZhciBUPXIuam9pbigiIikrdy5qb2luKCIiKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKFQpKCl9ci5wYXJ0aWFsPV8oITEpLHIuZnVsbD1fKCEwKX0se31dLDEwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSx1LFMsRSxMLEMpeyFmdW5jdGlvbih0LGUpe3ZhciByPTgqYS5sb2cyKGUrMSkqKHQrMSl8MCxpPWEubmV4dFBvdzIoYipyKTt3Lmxlbmd0aDxpJiYobi5mcmVlKHcpLHc9bi5tYWxsb2NJbnQzMihpKSk7dmFyIG89YS5uZXh0UG93MihfKnIpO2s8byYmKG4uZnJlZShrKSxrPW4ubWFsbG9jRG91YmxlKG8pKX0odCxpK0UpO3ZhciBQLE89MCx6PTIqdDtUKE8rKywwLDAsaSwwLEUscj8xNjowLC0xLzAsMS8wKSxyfHxUKE8rKywwLDAsRSwwLGksMSwtMS8wLDEvMCk7Zm9yKDtPPjA7KXt2YXIgST0oTy09MSkqYixEPXdbSV0sUj13W0krMV0sRj13W0krMl0sQj13W0krM10sTj13W0krNF0saj13W0krNV0sVj1PKl8sVT1rW1ZdLHE9a1tWKzFdLEg9MSZqLEc9ISEoMTYmaiksWT11LFc9UyxYPUwsWj1DO2lmKEgmJihZPUwsVz1DLFg9dSxaPVMpLCEoMiZqJiYoRj12KHQsRCxSLEYsWSxXLHEpLFI+PUYpfHw0JmomJihSPW0odCxELFIsRixZLFcsVSkpPj1GKSl7dmFyIEo9Ri1SLEs9Ti1CO2lmKEcpe2lmKHQqSiooSitLKTxwKXtpZih2b2lkIDAhPT0oUD1sLnNjYW5Db21wbGV0ZSh0LEQsZSxSLEYsWSxXLEIsTixYLFopKSlyZXR1cm4gUDtjb250aW51ZX19ZWxzZXtpZih0Kk1hdGgubWluKEosSyk8aCl7aWYodm9pZCAwIT09KFA9byh0LEQsZSxILFIsRixZLFcsQixOLFgsWikpKXJldHVybiBQO2NvbnRpbnVlfWlmKHQqSipLPGYpe2lmKHZvaWQgMCE9PShQPWwuc2NhbkJpcGFydGl0ZSh0LEQsZSxILFIsRixZLFcsQixOLFgsWikpKXJldHVybiBQO2NvbnRpbnVlfX12YXIgUT1kKHQsRCxSLEYsWSxXLFUscSk7aWYoUjxRKWlmKHQqKFEtUik8aCl7aWYodm9pZCAwIT09KFA9cyh0LEQrMSxlLFIsUSxZLFcsQixOLFgsWikpKXJldHVybiBQfWVsc2UgaWYoRD09PXQtMil7aWYodm9pZCAwIT09KFA9SD9sLnN3ZWVwQmlwYXJ0aXRlKHQsZSxCLE4sWCxaLFIsUSxZLFcpOmwuc3dlZXBCaXBhcnRpdGUodCxlLFIsUSxZLFcsQixOLFgsWikpKXJldHVybiBQfWVsc2UgVChPKyssRCsxLFIsUSxCLE4sSCwtMS8wLDEvMCksVChPKyssRCsxLEIsTixSLFEsMV5ILC0xLzAsMS8wKTtpZihRPEYpe3ZhciAkPWModCxELEIsTixYLFopLHR0PVhbeiokK0RdLGV0PWcodCxELCQsTixYLFosdHQpO2lmKGV0PE4mJlQoTysrLEQsUSxGLGV0LE4sKDR8SCkrKEc/MTY6MCksdHQscSksQjwkJiZUKE8rKyxELFEsRixCLCQsKDJ8SCkrKEc/MTY6MCksVSx0dCksJCsxPT09ZXQpe2lmKHZvaWQgMCE9PShQPUc/QSh0LEQsZSxRLEYsWSxXLCQsWCxaWyRdKTpNKHQsRCxlLEgsUSxGLFksVywkLFgsWlskXSkpKXJldHVybiBQfWVsc2UgaWYoJDxldCl7dmFyIHJ0O2lmKEcpe2lmKHJ0PXkodCxELFEsRixZLFcsdHQpLFE8cnQpe3ZhciBudD1nKHQsRCxRLHJ0LFksVyx0dCk7aWYoRD09PXQtMil7aWYoUTxudCYmdm9pZCAwIT09KFA9bC5zd2VlcENvbXBsZXRlKHQsZSxRLG50LFksVywkLGV0LFgsWikpKXJldHVybiBQO2lmKG50PHJ0JiZ2b2lkIDAhPT0oUD1sLnN3ZWVwQmlwYXJ0aXRlKHQsZSxudCxydCxZLFcsJCxldCxYLFopKSlyZXR1cm4gUH1lbHNlIFE8bnQmJlQoTysrLEQrMSxRLG50LCQsZXQsMTYsLTEvMCwxLzApLG50PHJ0JiYoVChPKyssRCsxLG50LHJ0LCQsZXQsMCwtMS8wLDEvMCksVChPKyssRCsxLCQsZXQsbnQscnQsMSwtMS8wLDEvMCkpfX1lbHNlIHJ0PUg/eCh0LEQsUSxGLFksVyx0dCk6eSh0LEQsUSxGLFksVyx0dCksUTxydCYmKEQ9PT10LTI/UD1IP2wuc3dlZXBCaXBhcnRpdGUodCxlLCQsZXQsWCxaLFEscnQsWSxXKTpsLnN3ZWVwQmlwYXJ0aXRlKHQsZSxRLHJ0LFksVywkLGV0LFgsWik6KFQoTysrLEQrMSxRLHJ0LCQsZXQsSCwtMS8wLDEvMCksVChPKyssRCsxLCQsZXQsUSxydCwxXkgsLTEvMCwxLzApKSl9fX19fTt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKSxhPXQoImJpdC10d2lkZGxlIiksaT10KCIuL2JydXRlIiksbz1pLnBhcnRpYWwscz1pLmZ1bGwsbD10KCIuL3N3ZWVwIiksYz10KCIuL21lZGlhbiIpLHU9dCgiLi9wYXJ0aXRpb24iKSxoPTEyOCxmPTE8PDIyLHA9MTw8MjIsZD11KCIhKGxvPj1wMCkmJiEocDE+PWhpKSIsWyJwMCIsInAxIl0pLGc9dSgibG89PT1wMCIsWyJwMCJdKSx2PXUoImxvPHAwIixbInAwIl0pLG09dSgiaGk8PXAwIixbInAwIl0pLHk9dSgibG88PXAwJiZwMDw9aGkiLFsicDAiXSkseD11KCJsbzxwMCYmcDA8PWhpIixbInAwIl0pLGI9NixfPTIsdz1uLm1hbGxvY0ludDMyKDEwMjQpLGs9bi5tYWxsb2NEb3VibGUoMTAyNCk7ZnVuY3Rpb24gVCh0LGUscixuLGEsaSxvLHMsbCl7dmFyIGM9Yip0O3dbY109ZSx3W2MrMV09cix3W2MrMl09bix3W2MrM109YSx3W2MrNF09aSx3W2MrNV09bzt2YXIgdT1fKnQ7a1t1XT1zLGtbdSsxXT1sfWZ1bmN0aW9uIE0odCxlLHIsbixhLGksbyxzLGwsYyx1KXt2YXIgaD0yKnQsZj1sKmgscD1jW2YrZV07dDpmb3IodmFyIGQ9YSxnPWEqaDtkPGk7KytkLGcrPWgpe3ZhciB2PW9bZytlXSxtPW9bZytlK3RdO2lmKCEocDx2fHxtPHApJiYoIW58fHAhPT12KSl7Zm9yKHZhciB5LHg9c1tkXSxiPWUrMTtiPHQ7KytiKXt2PW9bZytiXSxtPW9bZytiK3RdO3ZhciBfPWNbZitiXSx3PWNbZitiK3RdO2lmKG08X3x8dzx2KWNvbnRpbnVlIHR9aWYodm9pZCAwIT09KHk9bj9yKHUseCk6cih4LHUpKSlyZXR1cm4geX19fWZ1bmN0aW9uIEEodCxlLHIsbixhLGksbyxzLGwsYyl7dmFyIHU9Mip0LGg9cyp1LGY9bFtoK2VdO3Q6Zm9yKHZhciBwPW4sZD1uKnU7cDxhOysrcCxkKz11KXt2YXIgZz1vW3BdO2lmKGchPT1jKXt2YXIgdj1pW2QrZV0sbT1pW2QrZSt0XTtpZighKGY8dnx8bTxmKSl7Zm9yKHZhciB5PWUrMTt5PHQ7Kyt5KXt2PWlbZCt5XSxtPWlbZCt5K3RdO3ZhciB4PWxbaCt5XSxiPWxbaCt5K3RdO2lmKG08eHx8Yjx2KWNvbnRpbnVlIHR9dmFyIF89cihnLGMpO2lmKHZvaWQgMCE9PV8pcmV0dXJuIF99fX19fSx7Ii4vYnJ1dGUiOjk5LCIuL21lZGlhbiI6MTAxLCIuL3BhcnRpdGlvbiI6MTAyLCIuL3N3ZWVwIjoxMDQsImJpdC10d2lkZGxlIjo5NCwidHlwZWRhcnJheS1wb29sIjo1NDR9XSwxMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXtpZihvPD1yKzEpcmV0dXJuIHI7dmFyIGM9cix1PW8saD1vK3I+Pj4xLGY9Mip0LHA9aCxkPXNbZipoK2VdO2Zvcig7Yzx1Oyl7aWYodS1jPGEpe2kodCxlLGMsdSxzLGwpLGQ9c1tmKmgrZV07YnJlYWt9dmFyIGc9dS1jLHY9TWF0aC5yYW5kb20oKSpnK2N8MCxtPXNbZip2K2VdLHk9TWF0aC5yYW5kb20oKSpnK2N8MCx4PXNbZip5K2VdLGI9TWF0aC5yYW5kb20oKSpnK2N8MCxfPXNbZipiK2VdO208PXg/Xz49eD8ocD15LGQ9eCk6bT49Xz8ocD12LGQ9bSk6KHA9YixkPV8pOng+PV8/KHA9eSxkPXgpOl8+PW0/KHA9dixkPW0pOihwPWIsZD1fKTtmb3IodmFyIHc9ZioodS0xKSxrPWYqcCxUPTA7VDxmOysrVCwrK3csKytrKXt2YXIgTT1zW3ddO3Nbd109c1trXSxzW2tdPU19dmFyIEE9bFt1LTFdO2xbdS0xXT1sW3BdLGxbcF09QSxwPW4odCxlLGMsdS0xLHMsbCxkKTtmb3IodmFyIHc9ZioodS0xKSxrPWYqcCxUPTA7VDxmOysrVCwrK3csKytrKXt2YXIgTT1zW3ddO3Nbd109c1trXSxzW2tdPU19dmFyIEE9bFt1LTFdO2lmKGxbdS0xXT1sW3BdLGxbcF09QSxoPHApe2Zvcih1PXAtMTtjPHUmJnNbZioodS0xKStlXT09PWQ7KXUtPTE7dSs9MX1lbHNle2lmKCEocDxoKSlicmVhaztmb3IoYz1wKzE7Yzx1JiZzW2YqYytlXT09PWQ7KWMrPTF9fXJldHVybiBuKHQsZSxyLGgscyxsLHNbZipoK2VdKX07dmFyIG49dCgiLi9wYXJ0aXRpb24iKSgibG88cDAiLFsicDAiXSksYT04O2Z1bmN0aW9uIGkodCxlLHIsbixhLGkpe2Zvcih2YXIgbz0yKnQscz1vKihyKzEpK2UsbD1yKzE7bDxuOysrbCxzKz1vKWZvcih2YXIgYz1hW3NdLHU9bCxoPW8qKGwtMSk7dT5yJiZhW2grZV0+YzstLXUsaC09byl7Zm9yKHZhciBmPWgscD1oK28sZD0wO2Q8bzsrK2QsKytmLCsrcCl7dmFyIGc9YVtmXTthW2ZdPWFbcF0sYVtwXT1nfXZhciB2PWlbdV07aVt1XT1pW3UtMV0saVt1LTFdPXZ9fX0seyIuL3BhcnRpdGlvbiI6MTAyfV0sMTAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPSJhYmNkZWYiLnNwbGl0KCIiKS5jb25jYXQoZSksYT1bXTt0LmluZGV4T2YoImxvIik+PTAmJmEucHVzaCgibG89ZVtrK25dIik7dC5pbmRleE9mKCJoaSIpPj0wJiZhLnB1c2goImhpPWVbaytvXSIpO3JldHVybiByLnB1c2gobi5yZXBsYWNlKCJfIixhLmpvaW4oKSkucmVwbGFjZSgiJCIsdCkpLEZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxyKX07dmFyIG49ImZvcih2YXIgaj0yKmEsaz1qKmMsbD1rLG09YyxuPWIsbz1hK2IscD1jO2Q+cDsrK3Asays9ail7dmFyIF87aWYoJClpZihtPT09cCltKz0xLGwrPWo7ZWxzZXtmb3IodmFyIHM9MDtqPnM7KytzKXt2YXIgdD1lW2src107ZVtrK3NdPWVbbF0sZVtsKytdPXR9dmFyIHU9ZltwXTtmW3BdPWZbbV0sZlttKytdPXV9fXJldHVybiBtIn0se31dLDEwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPD00Km4/YSgwLGUtMSx0KTpmdW5jdGlvbiB0KGUscixoKXt2YXIgZj0oci1lKzEpLzZ8MCxwPWUrZixkPXItZixnPWUrcj4+MSx2PWctZixtPWcrZix5PXAseD12LGI9ZyxfPW0sdz1kLGs9ZSsxLFQ9ci0xLE09MDtjKHkseCxoKSYmKE09eSx5PXgseD1NKTtjKF8sdyxoKSYmKE09XyxfPXcsdz1NKTtjKHksYixoKSYmKE09eSx5PWIsYj1NKTtjKHgsYixoKSYmKE09eCx4PWIsYj1NKTtjKHksXyxoKSYmKE09eSx5PV8sXz1NKTtjKGIsXyxoKSYmKE09YixiPV8sXz1NKTtjKHgsdyxoKSYmKE09eCx4PXcsdz1NKTtjKHgsYixoKSYmKE09eCx4PWIsYj1NKTtjKF8sdyxoKSYmKE09XyxfPXcsdz1NKTt2YXIgQT1oWzIqeF07dmFyIFM9aFsyKngrMV07dmFyIEU9aFsyKl9dO3ZhciBMPWhbMipfKzFdO3ZhciBDPTIqeTt2YXIgUD0yKmI7dmFyIE89Mip3O3ZhciB6PTIqcDt2YXIgST0yKmc7dmFyIEQ9MipkO2Zvcih2YXIgUj0wO1I8MjsrK1Ipe3ZhciBGPWhbQytSXSxCPWhbUCtSXSxOPWhbTytSXTtoW3orUl09RixoW0krUl09QixoW0QrUl09Tn1vKHYsZSxoKTtvKG0scixoKTtmb3IodmFyIGo9aztqPD1UOysrailpZih1KGosQSxTLGgpKWohPT1rJiZpKGosayxoKSwrK2s7ZWxzZSBpZighdShqLEUsTCxoKSlmb3IoOzspe2lmKHUoVCxFLEwsaCkpe3UoVCxBLFMsaCk/KHMoaixrLFQsaCksKytrLC0tVCk6KGkoaixULGgpLC0tVCk7YnJlYWt9aWYoLS1UPGopYnJlYWt9bChlLGstMSxBLFMsaCk7bChyLFQrMSxFLEwsaCk7ay0yLWU8PW4/YShlLGstMixoKTp0KGUsay0yLGgpO3ItKFQrMik8PW4/YShUKzIscixoKTp0KFQrMixyLGgpO1Qtazw9bj9hKGssVCxoKTp0KGssVCxoKX0oMCxlLTEsdCl9O3ZhciBuPTMyO2Z1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbj0yKih0KzEpLGE9dCsxO2E8PWU7KythKXtmb3IodmFyIGk9cltuKytdLG89cltuKytdLHM9YSxsPW4tMjtzLS0gPnQ7KXt2YXIgYz1yW2wtMl0sdT1yW2wtMV07aWYoYzxpKWJyZWFrO2lmKGM9PT1pJiZ1PG8pYnJlYWs7cltsXT1jLHJbbCsxXT11LGwtPTJ9cltsXT1pLHJbbCsxXT1vfX1mdW5jdGlvbiBpKHQsZSxyKXtlKj0yO3ZhciBuPXJbdCo9Ml0sYT1yW3QrMV07clt0XT1yW2VdLHJbdCsxXT1yW2UrMV0scltlXT1uLHJbZSsxXT1hfWZ1bmN0aW9uIG8odCxlLHIpe2UqPTIsclt0Kj0yXT1yW2VdLHJbdCsxXT1yW2UrMV19ZnVuY3Rpb24gcyh0LGUscixuKXtlKj0yLHIqPTI7dmFyIGE9blt0Kj0yXSxpPW5bdCsxXTtuW3RdPW5bZV0sblt0KzFdPW5bZSsxXSxuW2VdPW5bcl0sbltlKzFdPW5bcisxXSxuW3JdPWEsbltyKzFdPWl9ZnVuY3Rpb24gbCh0LGUscixuLGEpe2UqPTIsYVt0Kj0yXT1hW2VdLGFbZV09cixhW3QrMV09YVtlKzFdLGFbZSsxXT1ufWZ1bmN0aW9uIGModCxlLHIpe2UqPTI7dmFyIG49clt0Kj0yXSxhPXJbZV07cmV0dXJuIShuPGEpJiYobiE9PWF8fHJbdCsxXT5yW2UrMV0pfWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGE9blt0Kj0yXTtyZXR1cm4gYTxlfHxhPT09ZSYmblt0KzFdPHJ9fSx7fV0sMTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aW5pdDpmdW5jdGlvbih0KXt2YXIgZT1hLm5leHRQb3cyKHQpO3MubGVuZ3RoPGUmJihuLmZyZWUocykscz1uLm1hbGxvY0ludDMyKGUpKTtsLmxlbmd0aDxlJiYobi5mcmVlKGwpLGw9bi5tYWxsb2NJbnQzMihlKSk7Yy5sZW5ndGg8ZSYmKG4uZnJlZShjKSxjPW4ubWFsbG9jSW50MzIoZSkpO3UubGVuZ3RoPGUmJihuLmZyZWUodSksdT1uLm1hbGxvY0ludDMyKGUpKTtoLmxlbmd0aDxlJiYobi5mcmVlKGgpLGg9bi5tYWxsb2NJbnQzMihlKSk7Zi5sZW5ndGg8ZSYmKG4uZnJlZShmKSxmPW4ubWFsbG9jSW50MzIoZSkpO3ZhciByPTgqZTtwLmxlbmd0aDxyJiYobi5mcmVlKHApLHA9bi5tYWxsb2NEb3VibGUocikpfSxzd2VlcEJpcGFydGl0ZTpmdW5jdGlvbih0LGUscixuLGEsaCxmLHYsbSx5KXtmb3IodmFyIHg9MCxiPTIqdCxfPXQtMSx3PWItMSxrPXI7azxuOysrayl7dmFyIFQ9aFtrXSxNPWIqaztwW3grK109YVtNK19dLHBbeCsrXT0tKFQrMSkscFt4KytdPWFbTSt3XSxwW3grK109VH1mb3IodmFyIGs9ZjtrPHY7KytrKXt2YXIgVD15W2tdK28sQT1iKms7cFt4KytdPW1bQStfXSxwW3grK109LVQscFt4KytdPW1bQSt3XSxwW3grK109VH12YXIgUz14Pj4+MTtpKHAsUyk7Zm9yKHZhciBFPTAsTD0wLGs9MDtrPFM7KytrKXt2YXIgQz0wfHBbMiprKzFdO2lmKEM+PW8pZChjLHUsTC0tLEM9Qy1vfDApO2Vsc2UgaWYoQz49MClkKHMsbCxFLS0sQyk7ZWxzZSBpZihDPD0tbyl7Qz0tQy1vfDA7Zm9yKHZhciBQPTA7UDxFOysrUCl7dmFyIE89ZShzW1BdLEMpO2lmKHZvaWQgMCE9PU8pcmV0dXJuIE99ZyhjLHUsTCsrLEMpfWVsc2V7Qz0tQy0xfDA7Zm9yKHZhciBQPTA7UDxMOysrUCl7dmFyIE89ZShDLGNbUF0pO2lmKHZvaWQgMCE9PU8pcmV0dXJuIE99ZyhzLGwsRSsrLEMpfX19LHN3ZWVwQ29tcGxldGU6ZnVuY3Rpb24odCxlLHIsbixhLG8sdixtLHkseCl7Zm9yKHZhciBiPTAsXz0yKnQsdz10LTEsaz1fLTEsVD1yO1Q8bjsrK1Qpe3ZhciBNPW9bVF0rMTw8MSxBPV8qVDtwW2IrK109YVtBK3ddLHBbYisrXT0tTSxwW2IrK109YVtBK2tdLHBbYisrXT1NfWZvcih2YXIgVD12O1Q8bTsrK1Qpe3ZhciBNPXhbVF0rMTw8MSxTPV8qVDtwW2IrK109eVtTK3ddLHBbYisrXT0xfC1NLHBbYisrXT15W1Mra10scFtiKytdPTF8TX12YXIgRT1iPj4+MTtpKHAsRSk7Zm9yKHZhciBMPTAsQz0wLFA9MCxUPTA7VDxFOysrVCl7dmFyIE89MHxwWzIqVCsxXSx6PTEmTztpZihUPEUtMSYmTz4+MT09cFsyKlQrM10+PjEmJih6PTIsVCs9MSksTzwwKXtmb3IodmFyIEk9LShPPj4xKS0xLEQ9MDtEPFA7KytEKXt2YXIgUj1lKGhbRF0sSSk7aWYodm9pZCAwIT09UilyZXR1cm4gUn1pZigwIT09eilmb3IodmFyIEQ9MDtEPEw7KytEKXt2YXIgUj1lKHNbRF0sSSk7aWYodm9pZCAwIT09UilyZXR1cm4gUn1pZigxIT09eilmb3IodmFyIEQ9MDtEPEM7KytEKXt2YXIgUj1lKGNbRF0sSSk7aWYodm9pZCAwIT09UilyZXR1cm4gUn0wPT09ej9nKHMsbCxMKyssSSk6MT09PXo/ZyhjLHUsQysrLEkpOjI9PT16JiZnKGgsZixQKyssSSl9ZWxzZXt2YXIgST0oTz4+MSktMTswPT09ej9kKHMsbCxMLS0sSSk6MT09PXo/ZChjLHUsQy0tLEkpOjI9PT16JiZkKGgsZixQLS0sSSl9fX0sc2NhbkJpcGFydGl0ZTpmdW5jdGlvbih0LGUscixuLGEsYyx1LGgsZix2LG0seSl7dmFyIHg9MCxiPTIqdCxfPWUsdz1lK3Qsaz0xLFQ9MTtuP1Q9bzprPW87Zm9yKHZhciBNPWE7TTxjOysrTSl7dmFyIEE9TStrLFM9YipNO3BbeCsrXT11W1MrX10scFt4KytdPS1BLHBbeCsrXT11W1Mrd10scFt4KytdPUF9Zm9yKHZhciBNPWY7TTx2OysrTSl7dmFyIEE9TStULEU9YipNO3BbeCsrXT1tW0UrX10scFt4KytdPS1BfXZhciBMPXg+Pj4xO2kocCxMKTtmb3IodmFyIEM9MCxNPTA7TTxMOysrTSl7dmFyIFA9MHxwWzIqTSsxXTtpZihQPDApe3ZhciBBPS1QLE89ITE7aWYoQT49bz8oTz0hbixBLT1vKTooTz0hIW4sQS09MSksTylnKHMsbCxDKyssQSk7ZWxzZXt2YXIgej15W0FdLEk9YipBLEQ9bVtJK2UrMV0sUj1tW0krZSsxK3RdO3Q6Zm9yKHZhciBGPTA7RjxDOysrRil7dmFyIEI9c1tGXSxOPWIqQjtpZighKFI8dVtOK2UrMV18fHVbTitlKzErdF08RCkpe2Zvcih2YXIgaj1lKzI7ajx0OysrailpZihtW0krait0XTx1W04ral18fHVbTitqK3RdPG1bSStqXSljb250aW51ZSB0O3ZhciBWLFU9aFtCXTtpZih2b2lkIDAhPT0oVj1uP3IoeixVKTpyKFUseikpKXJldHVybiBWfX19fWVsc2UgZChzLGwsQy0tLFAtayl9fSxzY2FuQ29tcGxldGU6ZnVuY3Rpb24odCxlLHIsbixhLGwsYyx1LGgsZixkKXtmb3IodmFyIGc9MCx2PTIqdCxtPWUseT1lK3QseD1uO3g8YTsrK3gpe3ZhciBiPXgrbyxfPXYqeDtwW2crK109bFtfK21dLHBbZysrXT0tYixwW2crK109bFtfK3ldLHBbZysrXT1ifWZvcih2YXIgeD11O3g8aDsrK3gpe3ZhciBiPXgrMSx3PXYqeDtwW2crK109Zlt3K21dLHBbZysrXT0tYn12YXIgaz1nPj4+MTtpKHAsayk7Zm9yKHZhciBUPTAseD0wO3g8azsrK3gpe3ZhciBNPTB8cFsyKngrMV07aWYoTTwwKXt2YXIgYj0tTTtpZihiPj1vKXNbVCsrXT1iLW87ZWxzZXt2YXIgQT1kW2ItPTFdLFM9dipiLEU9ZltTK2UrMV0sTD1mW1MrZSsxK3RdO3Q6Zm9yKHZhciBDPTA7QzxUOysrQyl7dmFyIFA9c1tDXSxPPWNbUF07aWYoTz09PUEpYnJlYWs7dmFyIHo9dipQO2lmKCEoTDxsW3orZSsxXXx8bFt6K2UrMSt0XTxFKSl7Zm9yKHZhciBJPWUrMjtJPHQ7KytJKWlmKGZbUytJK3RdPGxbeitJXXx8bFt6K0krdF08ZltTK0ldKWNvbnRpbnVlIHQ7dmFyIEQ9cihPLEEpO2lmKHZvaWQgMCE9PUQpcmV0dXJuIER9fX19ZWxzZXtmb3IodmFyIGI9TS1vLEM9VC0xO0M+PTA7LS1DKWlmKHNbQ109PT1iKXtmb3IodmFyIEk9QysxO0k8VDsrK0kpc1tJLTFdPXNbSV07YnJlYWt9LS1UfX19fTt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKSxhPXQoImJpdC10d2lkZGxlIiksaT10KCIuL3NvcnQiKSxvPTE8PDI4LHM9bi5tYWxsb2NJbnQzMigxMDI0KSxsPW4ubWFsbG9jSW50MzIoMTAyNCksYz1uLm1hbGxvY0ludDMyKDEwMjQpLHU9bi5tYWxsb2NJbnQzMigxMDI0KSxoPW4ubWFsbG9jSW50MzIoMTAyNCksZj1uLm1hbGxvY0ludDMyKDEwMjQpLHA9bi5tYWxsb2NEb3VibGUoODE5Mik7ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgYT1lW25dLGk9dFtyLTFdO3RbYV09aSxlW2ldPWF9ZnVuY3Rpb24gZyh0LGUscixuKXt0W3JdPW4sZVtuXT1yfX0seyIuL3NvcnQiOjEwMywiYml0LXR3aWRkbGUiOjk0LCJ0eXBlZGFycmF5LXBvb2wiOjU0NH1dLDEwNTpbZnVuY3Rpb24odCxlLHIpe30se31dLDEwNjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKCl7fTtyZXR1cm4gZS5wcm90b3R5cGU9dCxuZXcgZX0sYT1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJmUucHVzaChyKTtyZXR1cm4gcn0saT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fTtmdW5jdGlvbiBvKCl7dGhpcy5fZXZlbnRzJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcywiX2V2ZW50cyIpfHwodGhpcy5fZXZlbnRzPW4obnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfWUuZXhwb3J0cz1vLG8uRXZlbnRFbWl0dGVyPW8sby5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsby5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIHMsbD0xMDt0cnl7dmFyIGM9e307T2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYywieCIse3ZhbHVlOjB9KSxzPTA9PT1jLnh9Y2F0Y2godCl7cz0hMX1mdW5jdGlvbiB1KHQpe3JldHVybiB2b2lkIDA9PT10Ll9tYXhMaXN0ZW5lcnM/by5kZWZhdWx0TWF4TGlzdGVuZXJzOnQuX21heExpc3RlbmVyc31mdW5jdGlvbiBoKHQsZSxyLGEpe3ZhciBpLG8scztpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO2lmKChvPXQuX2V2ZW50cyk/KG8ubmV3TGlzdGVuZXImJih0LmVtaXQoIm5ld0xpc3RlbmVyIixlLHIubGlzdGVuZXI/ci5saXN0ZW5lcjpyKSxvPXQuX2V2ZW50cykscz1vW2VdKToobz10Ll9ldmVudHM9bihudWxsKSx0Ll9ldmVudHNDb3VudD0wKSxzKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcz9zPW9bZV09YT9bcixzXTpbcyxyXTphP3MudW5zaGlmdChyKTpzLnB1c2gociksIXMud2FybmVkJiYoaT11KHQpKSYmaT4wJiZzLmxlbmd0aD5pKXtzLndhcm5lZD0hMDt2YXIgbD1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIitzLmxlbmd0aCsnICInK1N0cmluZyhlKSsnIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicpO2wubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixsLmVtaXR0ZXI9dCxsLnR5cGU9ZSxsLmNvdW50PXMubGVuZ3RoLCJvYmplY3QiPT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIiVzOiAlcyIsbC5uYW1lLGwubWVzc2FnZSl9fWVsc2Ugcz1vW2VdPXIsKyt0Ll9ldmVudHNDb3VudDtyZXR1cm4gdH1mdW5jdGlvbiBmKCl7aWYoIXRoaXMuZmlyZWQpc3dpdGNoKHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCxhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7Y2FzZSAxOnJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQsYXJndW1lbnRzWzBdKTtjYXNlIDI6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKTtjYXNlIDM6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSk7ZGVmYXVsdDpmb3IodmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGU9MDtlPHQubGVuZ3RoOysrZSl0W2VdPWFyZ3VtZW50c1tlXTt0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LHQpfX1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbj17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6dCx0eXBlOmUsbGlzdGVuZXI6cn0sYT1pLmNhbGwoZixuKTtyZXR1cm4gYS5saXN0ZW5lcj1yLG4ud3JhcEZuPWEsYX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj10Ll9ldmVudHM7aWYoIW4pcmV0dXJuW107dmFyIGE9bltlXTtyZXR1cm4gYT8iZnVuY3Rpb24iPT10eXBlb2YgYT9yP1thLmxpc3RlbmVyfHxhXTpbYV06cj9mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXT10W3JdLmxpc3RlbmVyfHx0W3JdO3JldHVybiBlfShhKTp2KGEsYS5sZW5ndGgpOltdfWZ1bmN0aW9uIGcodCl7dmFyIGU9dGhpcy5fZXZlbnRzO2lmKGUpe3ZhciByPWVbdF07aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpcmV0dXJuIDE7aWYocilyZXR1cm4gci5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gdih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dO3JldHVybiByfXM/T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsfSxzZXQ6ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0fHx0PDB8fHQhPXQpdGhyb3cgbmV3IFR5cGVFcnJvcignImRlZmF1bHRNYXhMaXN0ZW5lcnMiIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtsPXR9fSk6by5kZWZhdWx0TWF4TGlzdGVuZXJzPWwsby5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8dDwwfHxpc05hTih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibiIgYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9dCx0aGlzfSxvLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzKX0sby5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxpLG8scz0iZXJyb3IiPT09dDtpZihvPXRoaXMuX2V2ZW50cylzPXMmJm51bGw9PW8uZXJyb3I7ZWxzZSBpZighcylyZXR1cm4hMTtpZihzKXtpZihhcmd1bWVudHMubGVuZ3RoPjEmJihlPWFyZ3VtZW50c1sxXSksZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IGU7dmFyIGw9bmV3IEVycm9yKCdVbmhhbmRsZWQgImVycm9yIiBldmVudC4gKCcrZSsiKSIpO3Rocm93IGwuY29udGV4dD1lLGx9aWYoIShyPW9bdF0pKXJldHVybiExO3ZhciBjPSJmdW5jdGlvbiI9PXR5cGVvZiByO3N3aXRjaChuPWFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTohZnVuY3Rpb24odCxlLHIpe2lmKGUpdC5jYWxsKHIpO2Vsc2UgZm9yKHZhciBuPXQubGVuZ3RoLGE9dih0LG4pLGk9MDtpPG47KytpKWFbaV0uY2FsbChyKX0ocixjLHRoaXMpO2JyZWFrO2Nhc2UgMjohZnVuY3Rpb24odCxlLHIsbil7aWYoZSl0LmNhbGwocixuKTtlbHNlIGZvcih2YXIgYT10Lmxlbmd0aCxpPXYodCxhKSxvPTA7bzxhOysrbylpW29dLmNhbGwocixuKX0ocixjLHRoaXMsYXJndW1lbnRzWzFdKTticmVhaztjYXNlIDM6IWZ1bmN0aW9uKHQsZSxyLG4sYSl7aWYoZSl0LmNhbGwocixuLGEpO2Vsc2UgZm9yKHZhciBpPXQubGVuZ3RoLG89dih0LGkpLHM9MDtzPGk7KytzKW9bc10uY2FsbChyLG4sYSl9KHIsYyx0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pO2JyZWFrO2Nhc2UgNDohZnVuY3Rpb24odCxlLHIsbixhLGkpe2lmKGUpdC5jYWxsKHIsbixhLGkpO2Vsc2UgZm9yKHZhciBvPXQubGVuZ3RoLHM9dih0LG8pLGw9MDtsPG87KytsKXNbbF0uY2FsbChyLG4sYSxpKX0ocixjLHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10pO2JyZWFrO2RlZmF1bHQ6Zm9yKGE9bmV3IEFycmF5KG4tMSksaT0xO2k8bjtpKyspYVtpLTFdPWFyZ3VtZW50c1tpXTshZnVuY3Rpb24odCxlLHIsbil7aWYoZSl0LmFwcGx5KHIsbik7ZWxzZSBmb3IodmFyIGE9dC5sZW5ndGgsaT12KHQsYSksbz0wO288YTsrK28paVtvXS5hcHBseShyLG4pfShyLGMsdGhpcyxhKX1yZXR1cm4hMH0sby5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaCh0aGlzLHQsZSwhMSl9LG8ucHJvdG90eXBlLm9uPW8ucHJvdG90eXBlLmFkZExpc3RlbmVyLG8ucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3JldHVybiBoKHRoaXMsdCxlLCEwKX0sby5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMub24odCxwKHRoaXMsdCxlKSksdGhpc30sby5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMucHJlcGVuZExpc3RlbmVyKHQscCh0aGlzLHQsZSkpLHRoaXN9LG8ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxpLG8scztpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO2lmKCEoYT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKCEocj1hW3RdKSlyZXR1cm4gdGhpcztpZihyPT09ZXx8ci5saXN0ZW5lcj09PWUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9bihudWxsKTooZGVsZXRlIGFbdF0sYS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsdCxyLmxpc3RlbmVyfHxlKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil7Zm9yKGk9LTEsbz1yLmxlbmd0aC0xO28+PTA7by0tKWlmKHJbb109PT1lfHxyW29dLmxpc3RlbmVyPT09ZSl7cz1yW29dLmxpc3RlbmVyLGk9bzticmVha31pZihpPDApcmV0dXJuIHRoaXM7MD09PWk/ci5zaGlmdCgpOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUsbj1yKzEsYT10Lmxlbmd0aDtuPGE7cis9MSxuKz0xKXRbcl09dFtuXTt0LnBvcCgpfShyLGkpLDE9PT1yLmxlbmd0aCYmKGFbdF09clswXSksYS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsdCxzfHxlKX1yZXR1cm4gdGhpc30sby5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaTtpZighKHI9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZighci5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1uKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnJbdF0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1uKG51bGwpOmRlbGV0ZSByW3RdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgbyxzPWEocik7Zm9yKGk9MDtpPHMubGVuZ3RoOysraSkicmVtb3ZlTGlzdGVuZXIiIT09KG89c1tpXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKG8pO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9bihudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKGU9clt0XSkpdGhpcy5yZW1vdmVMaXN0ZW5lcih0LGUpO2Vsc2UgaWYoZSlmb3IoaT1lLmxlbmd0aC0xO2k+PTA7aS0tKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxlW2ldKTtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBkKHRoaXMsdCwhMCl9LG8ucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm4gZCh0aGlzLHQsITEpfSxvLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5saXN0ZW5lckNvdW50P3QubGlzdGVuZXJDb3VudChlKTpnLmNhbGwodCxlKX0sby5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1nLG8ucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9SZWZsZWN0Lm93bktleXModGhpcy5fZXZlbnRzKTpbXX19LHt9XSwxMDc6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJhc2U2NC1qcyIpLGE9dCgiaWVlZTc1NCIpLGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKTpudWxsO3IuQnVmZmVyPWUsci5TbG93QnVmZmVyPWZ1bmN0aW9uKHQpeyt0IT10JiYodD0wKTtyZXR1cm4gZS5hbGxvYygrdCl9LHIuSU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIG89MjE0NzQ4MzY0NztmdW5jdGlvbiBzKHQpe2lmKHQ+byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK3QrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciByPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YocixlLnByb3RvdHlwZSkscn1mdW5jdGlvbiBlKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gdSh0KX1yZXR1cm4gbCh0LGUscil9ZnVuY3Rpb24gbCh0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBmdW5jdGlvbih0LHIpeyJzdHJpbmciPT10eXBlb2YgciYmIiIhPT1yfHwocj0idXRmOCIpO2lmKCFlLmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIityKTt2YXIgbj0wfHAodCxyKSxhPXMobiksaT1hLndyaXRlKHQscik7aSE9PW4mJihhPWEuc2xpY2UoMCxpKSk7cmV0dXJuIGF9KHQscik7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXJldHVybiBoKHQpO2lmKG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgdCk7aWYoaih0LEFycmF5QnVmZmVyKXx8dCYmaih0LmJ1ZmZlcixBcnJheUJ1ZmZlcikpcmV0dXJuIGZ1bmN0aW9uKHQscixuKXtpZihyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZih0LmJ5dGVMZW5ndGg8cisobnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO3ZhciBhO2E9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoYSxlLnByb3RvdHlwZSksYX0odCxyLG4pO2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgYT10LnZhbHVlT2YmJnQudmFsdWVPZigpO2lmKG51bGwhPWEmJmEhPT10KXJldHVybiBlLmZyb20oYSxyLG4pO3ZhciBpPWZ1bmN0aW9uKHQpe2lmKGUuaXNCdWZmZXIodCkpe3ZhciByPTB8Zih0Lmxlbmd0aCksbj1zKHIpO3JldHVybiAwPT09bi5sZW5ndGg/bjoodC5jb3B5KG4sMCwwLHIpLG4pfWlmKHZvaWQgMCE9PXQubGVuZ3RoKXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fFYodC5sZW5ndGgpP3MoMCk6aCh0KTtpZigiQnVmZmVyIj09PXQudHlwZSYmQXJyYXkuaXNBcnJheSh0LmRhdGEpKXJldHVybiBoKHQuZGF0YSl9KHQpO2lmKGkpcmV0dXJuIGk7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlwZW9mIHRbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gZS5mcm9tKHRbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5nIikscixuKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiB0KX1mdW5jdGlvbiBjKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK3QrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIGModCkscyh0PDA/MDowfGYodCkpfWZ1bmN0aW9uIGgodCl7Zm9yKHZhciBlPXQubGVuZ3RoPDA/MDowfGYodC5sZW5ndGgpLHI9cyhlKSxuPTA7bjxlO24rPTEpcltuXT0yNTUmdFtuXTtyZXR1cm4gcn1mdW5jdGlvbiBmKHQpe2lmKHQ+PW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK28udG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHx0fWZ1bmN0aW9uIHAodCxyKXtpZihlLmlzQnVmZmVyKHQpKXJldHVybiB0Lmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcodCl8fGoodCxBcnJheUJ1ZmZlcikpcmV0dXJuIHQuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHQpO3ZhciBuPXQubGVuZ3RoLGE9YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighYSYmMD09PW4pcmV0dXJuIDA7Zm9yKHZhciBpPSExOzspc3dpdGNoKHIpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIG47Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gRih0KS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKm47Y2FzZSJoZXgiOnJldHVybiBuPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIEIodCkubGVuZ3RoO2RlZmF1bHQ6aWYoaSlyZXR1cm4gYT8tMTpGKHQpLmxlbmd0aDtyPSgiIityKS50b0xvd2VyQ2FzZSgpLGk9ITB9fWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiBnKHQscixuLGEsaSl7aWYoMD09PXQubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygbj8oYT1uLG49MCk6bj4yMTQ3NDgzNjQ3P249MjE0NzQ4MzY0NzpuPC0yMTQ3NDgzNjQ4JiYobj0tMjE0NzQ4MzY0OCksVihuPStuKSYmKG49aT8wOnQubGVuZ3RoLTEpLG48MCYmKG49dC5sZW5ndGgrbiksbj49dC5sZW5ndGgpe2lmKGkpcmV0dXJuLTE7bj10Lmxlbmd0aC0xfWVsc2UgaWYobjwwKXtpZighaSlyZXR1cm4tMTtuPTB9aWYoInN0cmluZyI9PXR5cGVvZiByJiYocj1lLmZyb20ocixhKSksZS5pc0J1ZmZlcihyKSlyZXR1cm4gMD09PXIubGVuZ3RoPy0xOnYodCxyLG4sYSxpKTtpZigibnVtYmVyIj09dHlwZW9mIHIpcmV0dXJuIHImPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9pP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0LHIsbik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbCh0LHIsbik6dih0LFtyXSxuLGEsaSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gdih0LGUscixuLGEpe3ZhciBpLG89MSxzPXQubGVuZ3RoLGw9ZS5sZW5ndGg7aWYodm9pZCAwIT09biYmKCJ1Y3MyIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW58fCJ1dGYxNmxlIj09PW58fCJ1dGYtMTZsZSI9PT1uKSl7aWYodC5sZW5ndGg8Mnx8ZS5sZW5ndGg8MilyZXR1cm4tMTtvPTIscy89MixsLz0yLHIvPTJ9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiAxPT09bz90W2VdOnQucmVhZFVJbnQxNkJFKGUqbyl9aWYoYSl7dmFyIHU9LTE7Zm9yKGk9cjtpPHM7aSsrKWlmKGModCxpKT09PWMoZSwtMT09PXU/MDppLXUpKXtpZigtMT09PXUmJih1PWkpLGktdSsxPT09bClyZXR1cm4gdSpvfWVsc2UtMSE9PXUmJihpLT1pLXUpLHU9LTF9ZWxzZSBmb3IocitsPnMmJihyPXMtbCksaT1yO2k+PTA7aS0tKXtmb3IodmFyIGg9ITAsZj0wO2Y8bDtmKyspaWYoYyh0LGkrZikhPT1jKGUsZikpe2g9ITE7YnJlYWt9aWYoaClyZXR1cm4gaX1yZXR1cm4tMX1mdW5jdGlvbiBtKHQsZSxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBhPXQubGVuZ3RoLXI7bj8obj1OdW1iZXIobikpPmEmJihuPWEpOm49YTt2YXIgaT1lLmxlbmd0aDtuPmkvMiYmKG49aS8yKTtmb3IodmFyIG89MDtvPG47KytvKXt2YXIgcz1wYXJzZUludChlLnN1YnN0cigyKm8sMiksMTYpO2lmKFYocykpcmV0dXJuIG87dFtyK29dPXN9cmV0dXJuIG99ZnVuY3Rpb24geSh0LGUscixuKXtyZXR1cm4gTihGKGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIHgodCxlLHIsbil7cmV0dXJuIE4oZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goMjU1JnQuY2hhckNvZGVBdChyKSk7cmV0dXJuIGV9KGUpLHQscixuKX1mdW5jdGlvbiBiKHQsZSxyLG4pe3JldHVybiB4KHQsZSxyLG4pfWZ1bmN0aW9uIF8odCxlLHIsbil7cmV0dXJuIE4oQihlKSx0LHIsbil9ZnVuY3Rpb24gdyh0LGUscixuKXtyZXR1cm4gTihmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGEsaT1bXSxvPTA7bzx0Lmxlbmd0aCYmISgoZS09Mik8MCk7KytvKXI9dC5jaGFyQ29kZUF0KG8pLG49cj4+OCxhPXIlMjU2LGkucHVzaChhKSxpLnB1c2gobik7cmV0dXJuIGl9KGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIGsodCxlLHIpe3JldHVybiAwPT09ZSYmcj09PXQubGVuZ3RoP24uZnJvbUJ5dGVBcnJheSh0KTpuLmZyb21CeXRlQXJyYXkodC5zbGljZShlLHIpKX1mdW5jdGlvbiBUKHQsZSxyKXtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxhPWU7YTxyOyl7dmFyIGksbyxzLGwsYz10W2FdLHU9bnVsbCxoPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYoYStoPD1yKXN3aXRjaChoKXtjYXNlIDE6YzwxMjgmJih1PWMpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKGk9dFthKzFdKSkmJihsPSgzMSZjKTw8Nnw2MyZpKT4xMjcmJih1PWwpO2JyZWFrO2Nhc2UgMzppPXRbYSsxXSxvPXRbYSsyXSwxMjg9PSgxOTImaSkmJjEyOD09KDE5MiZvKSYmKGw9KDE1JmMpPDwxMnwoNjMmaSk8PDZ8NjMmbyk+MjA0NyYmKGw8NTUyOTZ8fGw+NTczNDMpJiYodT1sKTticmVhaztjYXNlIDQ6aT10W2ErMV0sbz10W2ErMl0scz10W2ErM10sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKGw9KDE1JmMpPDwxOHwoNjMmaSk8PDEyfCg2MyZvKTw8Nnw2MyZzKT42NTUzNSYmbDwxMTE0MTEyJiYodT1sKX1udWxsPT09dT8odT02NTUzMyxoPTEpOnU+NjU1MzUmJih1LT02NTUzNixuLnB1c2godT4+PjEwJjEwMjN8NTUyOTYpLHU9NTYzMjB8MTAyMyZ1KSxuLnB1c2godSksYSs9aH1yZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9TSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdCk7dmFyIHI9IiIsbj0wO2Zvcig7bjxlOylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyx0LnNsaWNlKG4sbis9TSkpO3JldHVybiByfShuKX1yLmtNYXhMZW5ndGg9byxlLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMSksZT17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKSw0Mj09PXQuZm9vKCl9Y2F0Y2godCl7cmV0dXJuITF9fSgpLGUuVFlQRURfQVJSQVlfU1VQUE9SVHx8InVuZGVmaW5lZCI9PXR5cGVvZiBjb25zb2xlfHwiZnVuY3Rpb24iIT10eXBlb2YgY29uc29sZS5lcnJvcnx8Y29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGUuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihlLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPVN5bWJvbC5zcGVjaWVzJiZlW1N5bWJvbC5zcGVjaWVzXT09PWUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExfSksZS5wb29sU2l6ZT04MTkyLGUuZnJvbT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGwodCxlLHIpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoZS5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihlLFVpbnQ4QXJyYXkpLGUuYWxsb2M9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscil7cmV0dXJuIGModCksdDw9MD9zKHQpOnZvaWQgMCE9PWU/InN0cmluZyI9PXR5cGVvZiByP3ModCkuZmlsbChlLHIpOnModCkuZmlsbChlKTpzKHQpfSh0LGUscil9LGUuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7cmV0dXJuIHUodCl9LGUuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe3JldHVybiB1KHQpfSxlLmlzQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYhMD09PXQuX2lzQnVmZmVyJiZ0IT09ZS5wcm90b3R5cGV9LGUuY29tcGFyZT1mdW5jdGlvbih0LHIpe2lmKGoodCxVaW50OEFycmF5KSYmKHQ9ZS5mcm9tKHQsdC5vZmZzZXQsdC5ieXRlTGVuZ3RoKSksaihyLFVpbnQ4QXJyYXkpJiYocj1lLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSwhZS5pc0J1ZmZlcih0KXx8IWUuaXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYodD09PXIpcmV0dXJuIDA7Zm9yKHZhciBuPXQubGVuZ3RoLGE9ci5sZW5ndGgsaT0wLG89TWF0aC5taW4obixhKTtpPG87KytpKWlmKHRbaV0hPT1yW2ldKXtuPXRbaV0sYT1yW2ldO2JyZWFrfXJldHVybiBuPGE/LTE6YTxuPzE6MH0sZS5pc0VuY29kaW5nPWZ1bmN0aW9uKHQpe3N3aXRjaChTdHJpbmcodCkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxlLmNvbmNhdD1mdW5jdGlvbih0LHIpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09dC5sZW5ndGgpcmV0dXJuIGUuYWxsb2MoMCk7dmFyIG47aWYodm9pZCAwPT09cilmb3Iocj0wLG49MDtuPHQubGVuZ3RoOysrbilyKz10W25dLmxlbmd0aDt2YXIgYT1lLmFsbG9jVW5zYWZlKHIpLGk9MDtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgbz10W25dO2lmKGoobyxVaW50OEFycmF5KSYmKG89ZS5mcm9tKG8pKSwhZS5pc0J1ZmZlcihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KGEsaSksaSs9by5sZW5ndGh9cmV0dXJuIGF9LGUuYnl0ZUxlbmd0aD1wLGUucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxlLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTIpZCh0aGlzLGUsZSsxKTtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgZT0wO2U8dDtlKz00KWQodGhpcyxlLGUrMyksZCh0aGlzLGUrMSxlKzIpO3JldHVybiB0aGlzfSxlLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTgpZCh0aGlzLGUsZSs3KSxkKHRoaXMsZSsxLGUrNiksZCh0aGlzLGUrMixlKzUpLGQodGhpcyxlKzMsZSs0KTtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtyZXR1cm4gMD09PXQ/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/VCh0aGlzLDAsdCk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT1lfHxlPDApJiYoZT0wKSxlPnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PShlPj4+PTApKXJldHVybiIiO2Zvcih0fHwodD0idXRmOCIpOzspc3dpdGNoKHQpe2Nhc2UiaGV4IjpyZXR1cm4gRSh0aGlzLGUscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gVCh0aGlzLGUscik7Y2FzZSJhc2NpaSI6cmV0dXJuIEEodGhpcyxlLHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFModGhpcyxlLHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gayh0aGlzLGUscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBMKHRoaXMsZSxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIit0KTt0PSh0KyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPWUucHJvdG90eXBlLnRvU3RyaW5nLGUucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT10fHwwPT09ZS5jb21wYXJlKHRoaXMsdCl9LGUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgdD0iIixlPXIuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLGUpLnJlcGxhY2UoLyguezJ9KS9nLCIkMSAiKS50cmltKCksdGhpcy5sZW5ndGg+ZSYmKHQrPSIgLi4uICIpLCI8QnVmZmVyICIrdCsiPiJ9LGkmJihlLnByb3RvdHlwZVtpXT1lLnByb3RvdHlwZS5pbnNwZWN0KSxlLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKHQscixuLGEsaSl7aWYoaih0LFVpbnQ4QXJyYXkpJiYodD1lLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSwhZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KTtpZih2b2lkIDA9PT1yJiYocj0wKSx2b2lkIDA9PT1uJiYobj10P3QubGVuZ3RoOjApLHZvaWQgMD09PWEmJihhPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSxyPDB8fG4+dC5sZW5ndGh8fGE8MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoYT49aSYmcj49bilyZXR1cm4gMDtpZihhPj1pKXJldHVybi0xO2lmKHI+PW4pcmV0dXJuIDE7aWYodGhpcz09PXQpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShhPj4+PTApLHM9KG4+Pj49MCktKHI+Pj49MCksbD1NYXRoLm1pbihvLHMpLGM9dGhpcy5zbGljZShhLGkpLHU9dC5zbGljZShyLG4pLGg9MDtoPGw7KytoKWlmKGNbaF0hPT11W2hdKXtvPWNbaF0scz11W2hdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sZS5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24odCxlLHIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKHQsZSxyKX0sZS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGcodGhpcyx0LGUsciwhMCl9LGUucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZyh0aGlzLHQsZSxyLCExKX0sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09ZSluPSJ1dGY4IixyPXRoaXMubGVuZ3RoLGU9MDtlbHNlIGlmKHZvaWQgMD09PXImJiJzdHJpbmciPT10eXBlb2YgZSluPWUscj10aGlzLmxlbmd0aCxlPTA7ZWxzZXtpZighaXNGaW5pdGUoZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO2U+Pj49MCxpc0Zpbml0ZShyKT8ocj4+Pj0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBhPXRoaXMubGVuZ3RoLWU7aWYoKHZvaWQgMD09PXJ8fHI+YSkmJihyPWEpLHQubGVuZ3RoPjAmJihyPDB8fGU8MCl8fGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIGk9ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBtKHRoaXMsdCxlLHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHkodGhpcyx0LGUscik7Y2FzZSJhc2NpaSI6cmV0dXJuIHgodGhpcyx0LGUscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gYih0aGlzLHQsZSxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIF8odGhpcyx0LGUscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiB3KHRoaXMsdCxlLHIpO2RlZmF1bHQ6aWYoaSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksaT0hMH19LGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIE09NDA5NjtmdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj0iIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgYT1lO2E8cjsrK2Epbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmdFthXSk7cmV0dXJuIG59ZnVuY3Rpb24gUyh0LGUscil7dmFyIG49IiI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGE9ZTthPHI7KythKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUodFthXSk7cmV0dXJuIG59ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49dC5sZW5ndGg7KCFlfHxlPDApJiYoZT0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBhPSIiLGk9ZTtpPHI7KytpKWErPVIodFtpXSk7cmV0dXJuIGF9ZnVuY3Rpb24gTCh0LGUscil7Zm9yKHZhciBuPXQuc2xpY2UoZSxyKSxhPSIiLGk9MDtpPG4ubGVuZ3RoO2krPTIpYSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW2ldKzI1NipuW2krMV0pO3JldHVybiBhfWZ1bmN0aW9uIEModCxlLHIpe2lmKHQlMSE9MHx8dDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZih0K2U+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIFAodCxyLG4sYSxpLG8pe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihyPml8fHI8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYobithPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBPKHQsZSxyLG4sYSxpKXtpZihyK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24geih0LGUscixuLGkpe3JldHVybiBlPStlLHI+Pj49MCxpfHxPKHQsMCxyLDQpLGEud3JpdGUodCxlLHIsbiwyMyw0KSxyKzR9ZnVuY3Rpb24gSSh0LGUscixuLGkpe3JldHVybiBlPStlLHI+Pj49MCxpfHxPKHQsMCxyLDgpLGEud3JpdGUodCxlLHIsbiw1Miw4KSxyKzh9ZS5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLmxlbmd0aDsodD1+fnQpPDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksKHI9dm9pZCAwPT09cj9uOn5+cik8MD8ocis9bik8MCYmKHI9MCk6cj5uJiYocj1uKSxyPHQmJihyPXQpO3ZhciBhPXRoaXMuc3ViYXJyYXkodCxyKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKGEsZS5wcm90b3R5cGUpLGF9LGUucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8Qyh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGE9MSxpPTA7KytpPGUmJihhKj0yNTYpOyluKz10aGlzW3QraV0qYTtyZXR1cm4gbn0sZS5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxDKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdCstLWVdLGE9MTtlPjAmJihhKj0yNTYpOyluKz10aGlzW3QrLS1lXSphO3JldHVybiBufSxlLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEModCwxLHRoaXMubGVuZ3RoKSx0aGlzW3RdfSxlLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEModCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OH0sZS5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxDKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XTw8OHx0aGlzW3QrMV19LGUucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8Qyh0LDQsdGhpcy5sZW5ndGgpLCh0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2KSsxNjc3NzIxNip0aGlzW3QrM119LGUucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8Qyh0LDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbdF0rKHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXSl9LGUucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxDKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0sYT0xLGk9MDsrK2k8ZSYmKGEqPTI1Nik7KW4rPXRoaXNbdCtpXSphO3JldHVybiBuPj0oYSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCplKSksbn0sZS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEModCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49ZSxhPTEsaT10aGlzW3QrLS1uXTtuPjAmJihhKj0yNTYpOylpKz10aGlzW3QrLS1uXSphO3JldHVybiBpPj0oYSo9MTI4KSYmKGktPU1hdGgucG93KDIsOCplKSksaX0sZS5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEModCwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1t0XT8tMSooMjU1LXRoaXNbdF0rMSk6dGhpc1t0XX0sZS5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8Qyh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdF18dGhpc1t0KzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxlLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0LGUpe3Q+Pj49MCxlfHxDKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0KzFdfHRoaXNbdF08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LGUucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxDKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNnx0aGlzW3QrM108PDI0fSxlLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8Qyh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDI0fHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXX0sZS5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEModCw0LHRoaXMubGVuZ3RoKSxhLnJlYWQodGhpcyx0LCEwLDIzLDQpfSxlLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8Qyh0LDQsdGhpcy5sZW5ndGgpLGEucmVhZCh0aGlzLHQsITEsMjMsNCl9LGUucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8Qyh0LDgsdGhpcy5sZW5ndGgpLGEucmVhZCh0aGlzLHQsITAsNTIsOCl9LGUucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8Qyh0LDgsdGhpcy5sZW5ndGgpLGEucmVhZCh0aGlzLHQsITEsNTIsOCl9LGUucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fFAodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgYT0xLGk9MDtmb3IodGhpc1tlXT0yNTUmdDsrK2k8ciYmKGEqPTI1Nik7KXRoaXNbZStpXT10L2EmMjU1O3JldHVybiBlK3J9LGUucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fFAodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgYT1yLTEsaT0xO2Zvcih0aGlzW2UrYV09MjU1JnQ7LS1hPj0wJiYoaSo9MjU2KTspdGhpc1tlK2FdPXQvaSYyNTU7cmV0dXJuIGUrcn0sZS5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFAodGhpcyx0LGUsMSwyNTUsMCksdGhpc1tlXT0yNTUmdCxlKzF9LGUucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQKHRoaXMsdCxlLDIsNjU1MzUsMCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxlLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8UCh0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09dD4+PjgsdGhpc1tlKzFdPTI1NSZ0LGUrMn0sZS5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFAodGhpcyx0LGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZSszXT10Pj4+MjQsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrMV09dD4+PjgsdGhpc1tlXT0yNTUmdCxlKzR9LGUucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQKHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2VdPXQ+Pj4yNCx0aGlzW2UrMV09dD4+PjE2LHRoaXNbZSsyXT10Pj4+OCx0aGlzW2UrM109MjU1JnQsZSs0fSxlLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgYT1NYXRoLnBvdygyLDgqci0xKTtQKHRoaXMsdCxlLHIsYS0xLC1hKX12YXIgaT0wLG89MSxzPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KytpPHImJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2ktMV0mJihzPTEpLHRoaXNbZStpXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxlLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgYT1NYXRoLnBvdygyLDgqci0xKTtQKHRoaXMsdCxlLHIsYS0xLC1hKX12YXIgaT1yLTEsbz0xLHM9MDtmb3IodGhpc1tlK2ldPTI1NSZ0Oy0taT49MCYmKG8qPTI1Nik7KXQ8MCYmMD09PXMmJjAhPT10aGlzW2UraSsxXSYmKHM9MSksdGhpc1tlK2ldPSh0L28+PjApLXMmMjU1O3JldHVybiBlK3J9LGUucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFAodGhpcyx0LGUsMSwxMjcsLTEyOCksdDwwJiYodD0yNTUrdCsxKSx0aGlzW2VdPTI1NSZ0LGUrMX0sZS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8UCh0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxlLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQKHRoaXMsdCxlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LGUucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFAodGhpcyx0LGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSszXT10Pj4+MjQsZSs0fSxlLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQKHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdDwwJiYodD00Mjk0OTY3Mjk1K3QrMSksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0sZS5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4geih0aGlzLHQsZSwhMCxyKX0sZS5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4geih0aGlzLHQsZSwhMSxyKX0sZS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEkodGhpcyx0LGUsITAscil9LGUucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBJKHRoaXMsdCxlLCExLHIpfSxlLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQscixuLGEpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKG58fChuPTApLGF8fDA9PT1hfHwoYT10aGlzLmxlbmd0aCkscj49dC5sZW5ndGgmJihyPXQubGVuZ3RoKSxyfHwocj0wKSxhPjAmJmE8biYmKGE9biksYT09PW4pcmV0dXJuIDA7aWYoMD09PXQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwfHxuPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoYTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO2E+dGhpcy5sZW5ndGgmJihhPXRoaXMubGVuZ3RoKSx0Lmxlbmd0aC1yPGEtbiYmKGE9dC5sZW5ndGgtcituKTt2YXIgaT1hLW47aWYodGhpcz09PXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKXRoaXMuY29weVdpdGhpbihyLG4sYSk7ZWxzZSBpZih0aGlzPT09dCYmbjxyJiZyPGEpZm9yKHZhciBvPWktMTtvPj0wOy0tbyl0W28rcl09dGhpc1tvK25dO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodCx0aGlzLnN1YmFycmF5KG4sYSkscik7cmV0dXJuIGl9LGUucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24odCxyLG4sYSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZigic3RyaW5nIj09dHlwZW9mIHI/KGE9cixyPTAsbj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiBuJiYoYT1uLG49dGhpcy5sZW5ndGgpLHZvaWQgMCE9PWEmJiJzdHJpbmciIT10eXBlb2YgYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYhZS5pc0VuY29kaW5nKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrYSk7aWYoMT09PXQubGVuZ3RoKXt2YXIgaT10LmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PWEmJmk8MTI4fHwibGF0aW4xIj09PWEpJiYodD1pKX19ZWxzZSJudW1iZXIiPT10eXBlb2YgdD90Jj0yNTU6ImJvb2xlYW4iPT10eXBlb2YgdCYmKHQ9TnVtYmVyKHQpKTtpZihyPDB8fHRoaXMubGVuZ3RoPHJ8fHRoaXMubGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKG48PXIpcmV0dXJuIHRoaXM7dmFyIG87aWYocj4+Pj0wLG49dm9pZCAwPT09bj90aGlzLmxlbmd0aDpuPj4+MCx0fHwodD0wKSwibnVtYmVyIj09dHlwZW9mIHQpZm9yKG89cjtvPG47KytvKXRoaXNbb109dDtlbHNle3ZhciBzPWUuaXNCdWZmZXIodCk/dDplLmZyb20odCxhKSxsPXMubGVuZ3RoO2lmKDA9PT1sKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3Iobz0wO288bi1yOysrbyl0aGlzW28rcl09c1tvJWxdfXJldHVybiB0aGlzfTt2YXIgRD0vW14rLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFIodCl7cmV0dXJuIHQ8MTY/IjAiK3QudG9TdHJpbmcoMTYpOnQudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEYodCxlKXt2YXIgcjtlPWV8fDEvMDtmb3IodmFyIG49dC5sZW5ndGgsYT1udWxsLGk9W10sbz0wO288bjsrK28pe2lmKChyPXQuY2hhckNvZGVBdChvKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFhKXtpZihyPjU2MzE5KXsoZS09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYobysxPT09bil7KGUtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWE9cjtjb250aW51ZX1pZihyPDU2MzIwKXsoZS09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSksYT1yO2NvbnRpbnVlfXI9NjU1MzYrKGEtNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgYSYmKGUtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2lmKGE9bnVsbCxyPDEyOCl7aWYoKGUtPTEpPDApYnJlYWs7aS5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigoZS09Mik8MClicmVhaztpLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKGUtPTMpPDApYnJlYWs7aS5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoZS09NCk8MClicmVhaztpLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBpfWZ1bmN0aW9uIEIodCl7cmV0dXJuIG4udG9CeXRlQXJyYXkoZnVuY3Rpb24odCl7aWYoKHQ9KHQ9dC5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShELCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDt0Lmxlbmd0aCU0IT0wOyl0Kz0iPSI7cmV0dXJuIHR9KHQpKX1mdW5jdGlvbiBOKHQsZSxyLG4pe2Zvcih2YXIgYT0wO2E8biYmIShhK3I+PWUubGVuZ3RofHxhPj10Lmxlbmd0aCk7KythKWVbYStyXT10W2FdO3JldHVybiBhfWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV8fG51bGwhPXQmJm51bGwhPXQuY29uc3RydWN0b3ImJm51bGwhPXQuY29uc3RydWN0b3IubmFtZSYmdC5jb25zdHJ1Y3Rvci5uYW1lPT09ZS5uYW1lfWZ1bmN0aW9uIFYodCl7cmV0dXJuIHQhPXR9fSkuY2FsbCh0aGlzLHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHsiYmFzZTY0LWpzIjo3NixidWZmZXI6MTA3LGllZWU3NTQ6NDE0fV0sMTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL21vbm90b25lIiksYT10KCIuL2xpYi90cmlhbmd1bGF0aW9uIiksaT10KCIuL2xpYi9kZWxhdW5heSIpLG89dCgiLi9saWIvZmlsdGVyIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm5bTWF0aC5taW4odFswXSx0WzFdKSxNYXRoLm1heCh0WzBdLHRbMV0pXX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIGModCxlLHIpe3JldHVybiBlIGluIHQ/dFtlXTpyfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheShlKT8ocj1yfHx7fSxlPWV8fFtdKToocj1lfHx7fSxlPVtdKTt2YXIgdT0hIWMociwiZGVsYXVuYXkiLCEwKSxoPSEhYyhyLCJpbnRlcmlvciIsITApLGY9ISFjKHIsImV4dGVyaW9yIiwhMCkscD0hIWMociwiaW5maW5pdHkiLCExKTtpZighaCYmIWZ8fDA9PT10Lmxlbmd0aClyZXR1cm5bXTt2YXIgZD1uKHQsZSk7aWYodXx8aCE9PWZ8fHApe2Zvcih2YXIgZz1hKHQubGVuZ3RoLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChzKS5zb3J0KGwpfShlKSksdj0wO3Y8ZC5sZW5ndGg7Kyt2KXt2YXIgbT1kW3ZdO2cuYWRkVHJpYW5nbGUobVswXSxtWzFdLG1bMl0pfXJldHVybiB1JiZpKHQsZyksZj9oP3A/byhnLDAscCk6Zy5jZWxscygpOm8oZywxLHApOm8oZywtMSl9cmV0dXJuIGR9fSx7Ii4vbGliL2RlbGF1bmF5IjoxMDksIi4vbGliL2ZpbHRlciI6MTEwLCIuL2xpYi9tb25vdG9uZSI6MTExLCIuL2xpYi90cmlhbmd1bGF0aW9uIjoxMTJ9XSwxMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicm9idXN0LWluLXNwaGVyZSIpWzRdO3QoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gYSh0LGUscixhLGksbyl7dmFyIHM9ZS5vcHBvc2l0ZShhLGkpO2lmKCEoczwwKSl7aWYoaTxhKXt2YXIgbD1hO2E9aSxpPWwsbD1vLG89cyxzPWx9ZS5pc0NvbnN0cmFpbnQoYSxpKXx8bih0W2FdLHRbaV0sdFtvXSx0W3NdKTwwJiZyLnB1c2goYSxpKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGk9dC5sZW5ndGgsbz1lLnN0YXJzLHM9MDtzPGk7KytzKWZvcih2YXIgbD1vW3NdLGM9MTtjPGwubGVuZ3RoO2MrPTIpe3ZhciB1PWxbY107aWYoISh1PHMpJiYhZS5pc0NvbnN0cmFpbnQocyx1KSl7Zm9yKHZhciBoPWxbYy0xXSxmPS0xLHA9MTtwPGwubGVuZ3RoO3ArPTIpaWYobFtwLTFdPT09dSl7Zj1sW3BdO2JyZWFrfWY8MHx8bih0W3NdLHRbdV0sdFtoXSx0W2ZdKTwwJiZyLnB1c2gocyx1KX19Zm9yKDtyLmxlbmd0aD4wOyl7Zm9yKHZhciB1PXIucG9wKCkscz1yLnBvcCgpLGg9LTEsZj0tMSxsPW9bc10sZD0xO2Q8bC5sZW5ndGg7ZCs9Mil7dmFyIGc9bFtkLTFdLHY9bFtkXTtnPT09dT9mPXY6dj09PXUmJihoPWcpfWg8MHx8ZjwwfHwobih0W3NdLHRbdV0sdFtoXSx0W2ZdKT49MHx8KGUuZmxpcChzLHUpLGEodCxlLHIsaCxzLGYpLGEodCxlLHIscyxmLGgpLGEodCxlLHIsZix1LGgpLGEodCxlLHIsdSxoLGYpKSl9fX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTEzLCJyb2J1c3QtaW4tc3BoZXJlIjo1MDd9XSwxMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4sYT10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2Z1bmN0aW9uIGkodCxlLHIsbixhLGksbyl7dGhpcy5jZWxscz10LHRoaXMubmVpZ2hib3I9ZSx0aGlzLmZsYWdzPW4sdGhpcy5jb25zdHJhaW50PXIsdGhpcy5hY3RpdmU9YSx0aGlzLm5leHQ9aSx0aGlzLmJvdW5kYXJ5PW99ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXXx8dFsyXS1lWzJdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jZWxscygpLG49ci5sZW5ndGgsYT0wO2E8bjsrK2Epe3ZhciBzPXJbYV0sbD1zWzBdLGM9c1sxXSx1PXNbMl07Yzx1P2M8bCYmKHNbMF09YyxzWzFdPXUsc1syXT1sKTp1PGwmJihzWzBdPXUsc1sxXT1sLHNbMl09Yyl9ci5zb3J0KG8pO2Zvcih2YXIgaD1uZXcgQXJyYXkobiksYT0wO2E8aC5sZW5ndGg7KythKWhbYV09MDt2YXIgZj1bXSxwPVtdLGQ9bmV3IEFycmF5KDMqbiksZz1uZXcgQXJyYXkoMypuKSx2PW51bGw7ZSYmKHY9W10pO2Zvcih2YXIgbT1uZXcgaShyLGQsZyxoLGYscCx2KSxhPTA7YTxuOysrYSlmb3IodmFyIHM9clthXSx5PTA7eTwzOysreSl7dmFyIGw9c1t5XSxjPXNbKHkrMSklM10seD1kWzMqYSt5XT1tLmxvY2F0ZShjLGwsdC5vcHBvc2l0ZShjLGwpKSxiPWdbMyphK3ldPXQuaXNDb25zdHJhaW50KGwsYyk7eDwwJiYoYj9wLnB1c2goYSk6KGYucHVzaChhKSxoW2FdPTEpLGUmJnYucHVzaChbYyxsLC0xXSkpfXJldHVybiBtfSh0LHIpO2lmKDA9PT1lKXJldHVybiByP24uY2VsbHMuY29uY2F0KG4uYm91bmRhcnkpOm4uY2VsbHM7dmFyIGE9MSxzPW4uYWN0aXZlLGw9bi5uZXh0LGM9bi5mbGFncyx1PW4uY2VsbHMsaD1uLmNvbnN0cmFpbnQsZj1uLm5laWdoYm9yO2Zvcig7cy5sZW5ndGg+MHx8bC5sZW5ndGg+MDspe2Zvcig7cy5sZW5ndGg+MDspe3ZhciBwPXMucG9wKCk7aWYoY1twXSE9PS1hKXtjW3BdPWE7dVtwXTtmb3IodmFyIGQ9MDtkPDM7KytkKXt2YXIgZz1mWzMqcCtkXTtnPj0wJiYwPT09Y1tnXSYmKGhbMypwK2RdP2wucHVzaChnKToocy5wdXNoKGcpLGNbZ109YSkpfX19dmFyIHY9bDtsPXMscz12LGwubGVuZ3RoPTAsYT0tYX12YXIgbT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsYT0wO2E8dC5sZW5ndGg7KythKWVbYV09PT1yJiYodFtuKytdPXRbYV0pO3JldHVybiB0Lmxlbmd0aD1uLHR9KHUsYyxlKTtpZihyKXJldHVybiBtLmNvbmNhdChuLmJvdW5kYXJ5KTtyZXR1cm4gbX0saS5wcm90b3R5cGUubG9jYXRlPShuPVswLDAsMF0sZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQscz1lLGw9cjtyZXR1cm4gZTxyP2U8dCYmKGk9ZSxzPXIsbD10KTpyPHQmJihpPXIscz10LGw9ZSksaTwwPy0xOihuWzBdPWksblsxXT1zLG5bMl09bCxhLmVxKHRoaXMuY2VsbHMsbixvKSl9KX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTEzfV0sMTExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksYT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXSxpPTAsbz0xLHM9MjtmdW5jdGlvbiBsKHQsZSxyLG4sYSl7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5pZHg9cix0aGlzLmxvd2VySWRzPW4sdGhpcy51cHBlcklkcz1hfWZ1bmN0aW9uIGModCxlLHIsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy50eXBlPXIsdGhpcy5pZHg9bn1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9dC5hWzBdLWUuYVswXXx8dC5hWzFdLWUuYVsxXXx8dC50eXBlLWUudHlwZTtyZXR1cm4gcnx8KHQudHlwZSE9PWkmJihyPWEodC5hLHQuYixlLmIpKT9yOnQuaWR4LWUuaWR4KX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGEodC5hLHQuYixlKX1mdW5jdGlvbiBmKHQsZSxyLGksbyl7Zm9yKHZhciBzPW4ubHQoZSxpLGgpLGw9bi5ndChlLGksaCksYz1zO2M8bDsrK2Mpe2Zvcih2YXIgdT1lW2NdLGY9dS5sb3dlcklkcyxwPWYubGVuZ3RoO3A+MSYmYShyW2ZbcC0yXV0scltmW3AtMV1dLGkpPjA7KXQucHVzaChbZltwLTFdLGZbcC0yXSxvXSkscC09MTtmLmxlbmd0aD1wLGYucHVzaChvKTt2YXIgZD11LnVwcGVySWRzO2ZvcihwPWQubGVuZ3RoO3A+MSYmYShyW2RbcC0yXV0scltkW3AtMV1dLGkpPDA7KXQucHVzaChbZFtwLTJdLGRbcC0xXSxvXSkscC09MTtkLmxlbmd0aD1wLGQucHVzaChvKX19ZnVuY3Rpb24gcCh0LGUpe3ZhciByO3JldHVybihyPXQuYVswXTxlLmFbMF0/YSh0LmEsdC5iLGUuYSk6YShlLmIsZS5hLHQuYSkpP3I6KHI9ZS5iWzBdPHQuYlswXT9hKHQuYSx0LmIsZS5iKTphKGUuYixlLmEsdC5iKSl8fHQuaWR4LWUuaWR4fWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBhPW4ubGUodCxyLHApLGk9dFthXSxvPWkudXBwZXJJZHMscz1vW28ubGVuZ3RoLTFdO2kudXBwZXJJZHM9W3NdLHQuc3BsaWNlKGErMSwwLG5ldyBsKHIuYSxyLmIsci5pZHgsW3NdLG8pKX1mdW5jdGlvbiBnKHQsZSxyKXt2YXIgYT1yLmE7ci5hPXIuYixyLmI9YTt2YXIgaT1uLmVxKHQscixwKSxvPXRbaV07dFtpLTFdLnVwcGVySWRzPW8udXBwZXJJZHMsdC5zcGxpY2UoaSwxKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxhPVtdLGg9MDtoPHI7KytoKWEucHVzaChuZXcgYyh0W2hdLG51bGwsaSxoKSk7Zm9yKHZhciBoPTA7aDxuOysraCl7dmFyIHA9ZVtoXSx2PXRbcFswXV0sbT10W3BbMV1dO3ZbMF08bVswXT9hLnB1c2gobmV3IGModixtLHMsaCksbmV3IGMobSx2LG8saCkpOnZbMF0+bVswXSYmYS5wdXNoKG5ldyBjKG0sdixzLGgpLG5ldyBjKHYsbSxvLGgpKX1hLnNvcnQodSk7Zm9yKHZhciB5PWFbMF0uYVswXS0oMStNYXRoLmFicyhhWzBdLmFbMF0pKSpNYXRoLnBvdygyLC01MikseD1bbmV3IGwoW3ksMV0sW3ksMF0sLTEsW10sW10sW10sW10pXSxiPVtdLGg9MCxfPWEubGVuZ3RoO2g8XzsrK2gpe3ZhciB3PWFbaF0saz13LnR5cGU7az09PWk/ZihiLHgsdCx3LmEsdy5pZHgpOms9PT1zP2QoeCx0LHcpOmcoeCx0LHcpfXJldHVybiBifX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTEzLCJyb2J1c3Qtb3JpZW50YXRpb24iOjUwOX1dLDExMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2Z1bmN0aW9uIGEodCxlKXt0aGlzLnN0YXJzPXQsdGhpcy5lZGdlcz1lfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1bXTtyZXR1cm4gbmV3IGEocixlKX07dmFyIGk9YS5wcm90b3R5cGU7ZnVuY3Rpb24gbyh0LGUscil7Zm9yKHZhciBuPTEsYT10Lmxlbmd0aDtuPGE7bis9MilpZih0W24tMV09PT1lJiZ0W25dPT09cilyZXR1cm4gdFtuLTFdPXRbYS0yXSx0W25dPXRbYS0xXSx2b2lkKHQubGVuZ3RoPWEtMil9aS5pc0NvbnN0cmFpbnQ9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXTtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfXJldHVybiBmdW5jdGlvbihyLGEpe3JldHVybiB0WzBdPU1hdGgubWluKHIsYSksdFsxXT1NYXRoLm1heChyLGEpLG4uZXEodGhpcy5lZGdlcyx0LGUpPj0wfX0oKSxpLnJlbW92ZVRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO28oblt0XSxlLHIpLG8obltlXSxyLHQpLG8obltyXSx0LGUpfSxpLmFkZFRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO25bdF0ucHVzaChlLHIpLG5bZV0ucHVzaChyLHQpLG5bcl0ucHVzaCh0LGUpfSxpLm9wcG9zaXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuc3RhcnNbZV0sbj0xLGE9ci5sZW5ndGg7bjxhO24rPTIpaWYocltuXT09PXQpcmV0dXJuIHJbbi0xXTtyZXR1cm4tMX0saS5mbGlwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHBvc2l0ZSh0LGUpLG49dGhpcy5vcHBvc2l0ZShlLHQpO3RoaXMucmVtb3ZlVHJpYW5nbGUodCxlLHIpLHRoaXMucmVtb3ZlVHJpYW5nbGUoZSx0LG4pLHRoaXMuYWRkVHJpYW5nbGUodCxuLHIpLHRoaXMuYWRkVHJpYW5nbGUoZSxyLG4pfSxpLmVkZ2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3RhcnMsZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgYT10W3JdLGk9MCxvPWEubGVuZ3RoO2k8bztpKz0yKWUucHVzaChbYVtpXSxhW2krMV1dKTtyZXR1cm4gZX0saS5jZWxscz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGE9dFtyXSxpPTAsbz1hLmxlbmd0aDtpPG87aSs9Mil7dmFyIHM9YVtpXSxsPWFbaSsxXTtyPE1hdGgubWluKHMsbCkmJmUucHVzaChbcixzLGxdKX1yZXR1cm4gZX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjExM31dLDExMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sYSl7dmFyIGk9WyJmdW5jdGlvbiAiLHQsIihhLGwsaCwiLG4uam9pbigiLCIpLCIpeyIsYT8iIjoidmFyIGk9IixyPyJsLTEiOiJoKzEiLCI7d2hpbGUobDw9aCl7dmFyIG09KGwraCk+Pj4xLHg9YVttXSJdO3JldHVybiBhP2UuaW5kZXhPZigiYyIpPDA/aS5wdXNoKCI7aWYoeD09PXkpe3JldHVybiBtfWVsc2UgaWYoeDw9eSl7Iik6aS5wdXNoKCI7dmFyIHA9Yyh4LHkpO2lmKHA9PT0wKXtyZXR1cm4gbX1lbHNlIGlmKHA8PTApeyIpOmkucHVzaCgiO2lmKCIsZSwiKXtpPW07Iikscj9pLnB1c2goImw9bSsxfWVsc2V7aD1tLTF9Iik6aS5wdXNoKCJoPW0tMX1lbHNle2w9bSsxfSIpLGkucHVzaCgifSIpLGE/aS5wdXNoKCJyZXR1cm4gLTF9OyIpOmkucHVzaCgicmV0dXJuIGl9OyIpLGkuam9pbigiIil9ZnVuY3Rpb24gYSh0LGUscixhKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFtuKCJBIiwieCIrdCsieSIsZSxbInkiXSxhKSxuKCJQIiwiYyh4LHkpIit0KyIwIixlLFsieSIsImMiXSxhKSwiZnVuY3Rpb24gZGlzcGF0Y2hCc2VhcmNoIixyLCIoYSx5LGMsbCxoKXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUChhLChsPT09dm9pZCAwKT8wOmx8MCwoaD09PXZvaWQgMCk/YS5sZW5ndGgtMTpofDAseSxjKX1lbHNle3JldHVybiBBKGEsKGM9PT12b2lkIDApPzA6Y3wwLChsPT09dm9pZCAwKT9hLmxlbmd0aC0xOmx8MCx5KX19cmV0dXJuIGRpc3BhdGNoQnNlYXJjaCIscl0uam9pbigiIikpKCl9ZS5leHBvcnRzPXtnZTphKCI+PSIsITEsIkdFIiksZ3Q6YSgiPiIsITEsIkdUIiksbHQ6YSgiPCIsITAsIkxUIiksbGU6YSgiPD0iLCEwLCJMRSIpLGVxOmEoIi0iLCEwLCJFUSIsITApfX0se31dLDExNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTEscj0xO3I8dC5sZW5ndGg7KytyKWZvcih2YXIgbj0wO248cjsrK24paWYodFtyXTx0W25dKWU9LWU7ZWxzZSBpZih0W25dPT09dFtyXSlyZXR1cm4gMDtyZXR1cm4gZX19LHt9XSwxMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZHVwIiksYT10KCJyb2J1c3QtbGluZWFyLXNvbHZlIik7ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgsYT0wO2E8bjsrK2Epcis9dFthXSplW2FdO3JldHVybiByfWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107dFswXS5sZW5ndGg7dmFyIHI9bihbdC5sZW5ndGgrMSx0Lmxlbmd0aCsxXSwxKSxvPW4oW3QubGVuZ3RoKzFdLDEpO3JbZV1bZV09MDtmb3IodmFyIHM9MDtzPGU7KytzKXtmb3IodmFyIGw9MDtsPD1zOysrbClyW2xdW3NdPXJbc11bbF09MippKHRbc10sdFtsXSk7b1tzXT1pKHRbc10sdFtzXSl9dmFyIGM9YShyLG8pLHU9MCxoPWNbZSsxXTtmb3Iocz0wO3M8aC5sZW5ndGg7KytzKXUrPWhbc107dmFyIGY9bmV3IEFycmF5KGUpO2ZvcihzPTA7czxlOysrcyl7aD1jW3NdO3ZhciBwPTA7Zm9yKGw9MDtsPGgubGVuZ3RoOysrbClwKz1oW2xdO2Zbc109cC91fXJldHVybiBmfWZ1bmN0aW9uIHModCl7aWYoMD09PXQubGVuZ3RoKXJldHVybltdO2Zvcih2YXIgZT10WzBdLmxlbmd0aCxyPW4oW2VdKSxhPW8odCksaT0wO2k8dC5sZW5ndGg7KytpKWZvcih2YXIgcz0wO3M8ZTsrK3MpcltzXSs9dFtpXVtzXSphW2ldO3JldHVybiByfXMuYmFyeWNlbmV0cmljPW8sZS5leHBvcnRzPXN9LHtkdXA6MTcyLCJyb2J1c3QtbGluZWFyLXNvbHZlIjo1MDh9XSwxMTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4odCkscj0wLGE9MDthPHQubGVuZ3RoOysrYSlmb3IodmFyIGk9dFthXSxvPTA7bzxlLmxlbmd0aDsrK28pcis9TWF0aC5wb3coaVtvXS1lW29dLDIpO3JldHVybiBNYXRoLnNxcnQoci90Lmxlbmd0aCl9O3ZhciBuPXQoImNpcmN1bWNlbnRlciIpfSx7Y2lyY3VtY2VudGVyOjExNX1dLDExNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGU8cj90PGU/ZTp0PnI/cjp0OnQ8cj9yOnQ+ZT9lOnR9fSx7fV0sMTE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG47aWYocil7bj1lO2Zvcih2YXIgYT1uZXcgQXJyYXkoZS5sZW5ndGgpLGk9MDtpPGUubGVuZ3RoOysraSl7dmFyIG89ZVtpXTthW2ldPVtvWzBdLG9bMV0scltpXV19ZT1hfXZhciBzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1kKHQsW10scCh0KSk7cmV0dXJuIG0oZSxuLHIpLCEhbn0odCxlLCEhcik7Zm9yKDt5KHQsZSwhIXIpOylzPSEwO2lmKHImJnMpe24ubGVuZ3RoPTAsci5sZW5ndGg9MDtmb3IodmFyIGk9MDtpPGUubGVuZ3RoOysraSl7dmFyIG89ZVtpXTtuLnB1c2goW29bMF0sb1sxXV0pLHIucHVzaChvWzJdKX19cmV0dXJuIHN9O3ZhciBuPXQoInVuaW9uLWZpbmQiKSxhPXQoImJveC1pbnRlcnNlY3QiKSxpPXQoInJvYnVzdC1zZWdtZW50LWludGVyc2VjdCIpLG89dCgiYmlnLXJhdCIpLHM9dCgiYmlnLXJhdC9jbXAiKSxsPXQoImJpZy1yYXQvdG8tZmxvYXQiKSxjPXQoInJhdC12ZWMiKSx1PXQoIm5leHRhZnRlciIpLGg9dCgiLi9saWIvcmF0LXNlZy1pbnRlcnNlY3QiKTtmdW5jdGlvbiBmKHQpe3ZhciBlPWwodCk7cmV0dXJuW3UoZSwtMS8wKSx1KGUsMS8wKV19ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPXRbcl07ZVtyXT1bdShuWzBdLC0xLzApLHUoblsxXSwtMS8wKSx1KG5bMF0sMS8wKSx1KG5bMV0sMS8wKV19cmV0dXJuIGV9ZnVuY3Rpb24gZCh0LGUscil7Zm9yKHZhciBpPWUubGVuZ3RoLG89bmV3IG4oaSkscz1bXSxsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciBjPWVbbF0saD1mKGNbMF0pLHA9ZihjWzFdKTtzLnB1c2goW3UoaFswXSwtMS8wKSx1KHBbMF0sLTEvMCksdShoWzFdLDEvMCksdShwWzFdLDEvMCldKX1hKHMsZnVuY3Rpb24odCxlKXtvLmxpbmsodCxlKX0pO3ZhciBkPSEwLGc9bmV3IEFycmF5KGkpO2ZvcihsPTA7bDxpOysrbCl7KG09by5maW5kKGwpKSE9PWwmJihkPSExLHRbbV09W01hdGgubWluKHRbbF1bMF0sdFttXVswXSksTWF0aC5taW4odFtsXVsxXSx0W21dWzFdKV0pfWlmKGQpcmV0dXJuIG51bGw7dmFyIHY9MDtmb3IobD0wO2w8aTsrK2wpe3ZhciBtOyhtPW8uZmluZChsKSk9PT1sPyhnW2xdPXYsdFt2KytdPXRbbF0pOmdbbF09LTF9dC5sZW5ndGg9djtmb3IobD0wO2w8aTsrK2wpZ1tsXTwwJiYoZ1tsXT1nW28uZmluZChsKV0pO3JldHVybiBnfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gdih0LGUpe3ZhciByPXRbMF0tZVswXXx8dFsxXS1lWzFdO3JldHVybiByfHwodFsyXTxlWzJdPy0xOnRbMl0+ZVsyXT8xOjApfWZ1bmN0aW9uIG0odCxlLHIpe2lmKDAhPT10Lmxlbmd0aCl7aWYoZSlmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGE9ZVsobz10W25dKVswXV0saT1lW29bMV1dO29bMF09TWF0aC5taW4oYSxpKSxvWzFdPU1hdGgubWF4KGEsaSl9ZWxzZSBmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgbzthPShvPXRbbl0pWzBdLGk9b1sxXTtvWzBdPU1hdGgubWluKGEsaSksb1sxXT1NYXRoLm1heChhLGkpfXI/dC5zb3J0KHYpOnQuc29ydChnKTt2YXIgcz0xO2ZvcihuPTE7bjx0Lmxlbmd0aDsrK24pe3ZhciBsPXRbbi0xXSxjPXRbbl07KGNbMF0hPT1sWzBdfHxjWzFdIT09bFsxXXx8ciYmY1syXSE9PWxbMl0pJiYodFtzKytdPWMpfXQubGVuZ3RoPXN9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlLmxlbmd0aCksbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgYT1lW25dLGk9dFthWzBdXSxvPXRbYVsxXV07cltuXT1bdShNYXRoLm1pbihpWzBdLG9bMF0pLC0xLzApLHUoTWF0aC5taW4oaVsxXSxvWzFdKSwtMS8wKSx1KE1hdGgubWF4KGlbMF0sb1swXSksMS8wKSx1KE1hdGgubWF4KGlbMV0sb1sxXSksMS8wKV19cmV0dXJuIHJ9KHQsZSksZj1mdW5jdGlvbih0LGUscil7dmFyIG49W107cmV0dXJuIGEocixmdW5jdGlvbihyLGEpe3ZhciBvPWVbcl0scz1lW2FdO2lmKG9bMF0hPT1zWzBdJiZvWzBdIT09c1sxXSYmb1sxXSE9PXNbMF0mJm9bMV0hPT1zWzFdKXt2YXIgbD10W29bMF1dLGM9dFtvWzFdXSx1PXRbc1swXV0saD10W3NbMV1dO2kobCxjLHUsaCkmJm4ucHVzaChbcixhXSl9fSksbn0odCxlLG4pLGc9cCh0KSx2PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBvPVtdO3JldHVybiBhKHIsbixmdW5jdGlvbihyLG4pe3ZhciBhPWVbcl07aWYoYVswXSE9PW4mJmFbMV0hPT1uKXt2YXIgcz10W25dLGw9dFthWzBdXSxjPXRbYVsxXV07aShsLGMscyxzKSYmby5wdXNoKFtyLG5dKX19KSxvfSh0LGUsbixnKSx5PWQodCxmdW5jdGlvbih0LGUscixuLGEpe3ZhciBpLHUsZj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm5bbyh0WzBdKSxvKHRbMV0pXX0pO2ZvcihpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBwPXJbaV07dT1wWzBdO3ZhciBkPXBbMV0sZz1lW3VdLHY9ZVtkXSxtPWgoYyh0W2dbMF1dKSxjKHRbZ1sxXV0pLGModFt2WzBdXSksYyh0W3ZbMV1dKSk7aWYobSl7dmFyIHk9dC5sZW5ndGg7dC5wdXNoKFtsKG1bMF0pLGwobVsxXSldKSxmLnB1c2gobSksbi5wdXNoKFt1LHldLFtkLHldKX19Zm9yKG4uc29ydChmdW5jdGlvbih0LGUpe2lmKHRbMF0hPT1lWzBdKXJldHVybiB0WzBdLWVbMF07dmFyIHI9Zlt0WzFdXSxuPWZbZVsxXV07cmV0dXJuIHMoclswXSxuWzBdKXx8cyhyWzFdLG5bMV0pfSksaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgeD1lW3U9KFM9bltpXSlbMF1dLGI9eFswXSxfPXhbMV0sdz10W2JdLGs9dFtfXTtpZigod1swXS1rWzBdfHx3WzFdLWtbMV0pPDApe3ZhciBUPWI7Yj1fLF89VH14WzBdPWI7dmFyIE0sQT14WzFdPVNbMV07Zm9yKGEmJihNPXhbMl0pO2k+MCYmbltpLTFdWzBdPT09dTspe3ZhciBTLEU9KFM9blstLWldKVsxXTthP2UucHVzaChbQSxFLE1dKTplLnB1c2goW0EsRV0pLEE9RX1hP2UucHVzaChbQSxfLE1dKTplLnB1c2goW0EsX10pfXJldHVybiBmfSh0LGUsZix2LHIpKTtyZXR1cm4gbShlLHksciksISF5fHwoZi5sZW5ndGg+MHx8di5sZW5ndGg+MCl9fSx7Ii4vbGliL3JhdC1zZWctaW50ZXJzZWN0IjoxMTksImJpZy1yYXQiOjgwLCJiaWctcmF0L2NtcCI6NzgsImJpZy1yYXQvdG8tZmxvYXQiOjkyLCJib3gtaW50ZXJzZWN0Ijo5OCxuZXh0YWZ0ZXI6NDUzLCJyYXQtdmVjIjo0ODgsInJvYnVzdC1zZWdtZW50LWludGVyc2VjdCI6NTEyLCJ1bmlvbi1maW5kIjo1NDV9XSwxMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXMoZSx0KSxoPXMobixyKSxmPXUoaSxoKTtpZigwPT09byhmKSlyZXR1cm4gbnVsbDt2YXIgcD1zKHQsciksZD11KGgscCksZz1hKGQsZiksdj1jKGksZyk7cmV0dXJuIGwodCx2KX07dmFyIG49dCgiYmlnLXJhdC9tdWwiKSxhPXQoImJpZy1yYXQvZGl2IiksaT10KCJiaWctcmF0L3N1YiIpLG89dCgiYmlnLXJhdC9zaWduIikscz10KCJyYXQtdmVjL3N1YiIpLGw9dCgicmF0LXZlYy9hZGQiKSxjPXQoInJhdC12ZWMvbXVscyIpO2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gaShuKHRbMF0sZVsxXSksbih0WzFdLGVbMF0pKX19LHsiYmlnLXJhdC9kaXYiOjc5LCJiaWctcmF0L211bCI6ODksImJpZy1yYXQvc2lnbiI6OTAsImJpZy1yYXQvc3ViIjo5MSwicmF0LXZlYy9hZGQiOjQ4NywicmF0LXZlYy9tdWxzIjo0ODksInJhdC12ZWMvc3ViIjo0OTB9XSwxMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY2xhbXAiKTtmdW5jdGlvbiBhKHQsZSl7bnVsbD09ZSYmKGU9ITApO3ZhciByPXRbMF0sYT10WzFdLGk9dFsyXSxvPXRbM107cmV0dXJuIG51bGw9PW8mJihvPWU/MToyNTUpLGUmJihyKj0yNTUsYSo9MjU1LGkqPTI1NSxvKj0yNTUpLDE2Nzc3MjE2KihyPTI1NSZuKHIsMCwyNTUpKSsoKGE9MjU1Jm4oYSwwLDI1NSkpPDwxNikrKChpPTI1NSZuKGksMCwyNTUpKTw8OCkrKG89MjU1Jm4obywwLDI1NSkpfWUuZXhwb3J0cz1hLGUuZXhwb3J0cy50bz1hLGUuZXhwb3J0cy5mcm9tPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQ9K3QpPj4+MjQsbj0oMTY3MTE2ODAmdCk+Pj4xNixhPSg2NTI4MCZ0KT4+PjgsaT0yNTUmdDtyZXR1cm4hMT09PWU/W3IsbixhLGldOltyLzI1NSxuLzI1NSxhLzI1NSxpLzI1NV19fSx7Y2xhbXA6MTE3fV0sMTIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YWxpY2VibHVlOlsyNDAsMjQ4LDI1NV0sYW50aXF1ZXdoaXRlOlsyNTAsMjM1LDIxNV0sYXF1YTpbMCwyNTUsMjU1XSxhcXVhbWFyaW5lOlsxMjcsMjU1LDIxMl0sYXp1cmU6WzI0MCwyNTUsMjU1XSxiZWlnZTpbMjQ1LDI0NSwyMjBdLGJpc3F1ZTpbMjU1LDIyOCwxOTZdLGJsYWNrOlswLDAsMF0sYmxhbmNoZWRhbG1vbmQ6WzI1NSwyMzUsMjA1XSxibHVlOlswLDAsMjU1XSxibHVldmlvbGV0OlsxMzgsNDMsMjI2XSxicm93bjpbMTY1LDQyLDQyXSxidXJseXdvb2Q6WzIyMiwxODQsMTM1XSxjYWRldGJsdWU6Wzk1LDE1OCwxNjBdLGNoYXJ0cmV1c2U6WzEyNywyNTUsMF0sY2hvY29sYXRlOlsyMTAsMTA1LDMwXSxjb3JhbDpbMjU1LDEyNyw4MF0sY29ybmZsb3dlcmJsdWU6WzEwMCwxNDksMjM3XSxjb3Juc2lsazpbMjU1LDI0OCwyMjBdLGNyaW1zb246WzIyMCwyMCw2MF0sY3lhbjpbMCwyNTUsMjU1XSxkYXJrYmx1ZTpbMCwwLDEzOV0sZGFya2N5YW46WzAsMTM5LDEzOV0sZGFya2dvbGRlbnJvZDpbMTg0LDEzNCwxMV0sZGFya2dyYXk6WzE2OSwxNjksMTY5XSxkYXJrZ3JlZW46WzAsMTAwLDBdLGRhcmtncmV5OlsxNjksMTY5LDE2OV0sZGFya2toYWtpOlsxODksMTgzLDEwN10sZGFya21hZ2VudGE6WzEzOSwwLDEzOV0sZGFya29saXZlZ3JlZW46Wzg1LDEwNyw0N10sZGFya29yYW5nZTpbMjU1LDE0MCwwXSxkYXJrb3JjaGlkOlsxNTMsNTAsMjA0XSxkYXJrcmVkOlsxMzksMCwwXSxkYXJrc2FsbW9uOlsyMzMsMTUwLDEyMl0sZGFya3NlYWdyZWVuOlsxNDMsMTg4LDE0M10sZGFya3NsYXRlYmx1ZTpbNzIsNjEsMTM5XSxkYXJrc2xhdGVncmF5Ols0Nyw3OSw3OV0sZGFya3NsYXRlZ3JleTpbNDcsNzksNzldLGRhcmt0dXJxdW9pc2U6WzAsMjA2LDIwOV0sZGFya3Zpb2xldDpbMTQ4LDAsMjExXSxkZWVwcGluazpbMjU1LDIwLDE0N10sZGVlcHNreWJsdWU6WzAsMTkxLDI1NV0sZGltZ3JheTpbMTA1LDEwNSwxMDVdLGRpbWdyZXk6WzEwNSwxMDUsMTA1XSxkb2RnZXJibHVlOlszMCwxNDQsMjU1XSxmaXJlYnJpY2s6WzE3OCwzNCwzNF0sZmxvcmFsd2hpdGU6WzI1NSwyNTAsMjQwXSxmb3Jlc3RncmVlbjpbMzQsMTM5LDM0XSxmdWNoc2lhOlsyNTUsMCwyNTVdLGdhaW5zYm9ybzpbMjIwLDIyMCwyMjBdLGdob3N0d2hpdGU6WzI0OCwyNDgsMjU1XSxnb2xkOlsyNTUsMjE1LDBdLGdvbGRlbnJvZDpbMjE4LDE2NSwzMl0sZ3JheTpbMTI4LDEyOCwxMjhdLGdyZWVuOlswLDEyOCwwXSxncmVlbnllbGxvdzpbMTczLDI1NSw0N10sZ3JleTpbMTI4LDEyOCwxMjhdLGhvbmV5ZGV3OlsyNDAsMjU1LDI0MF0saG90cGluazpbMjU1LDEwNSwxODBdLGluZGlhbnJlZDpbMjA1LDkyLDkyXSxpbmRpZ286Wzc1LDAsMTMwXSxpdm9yeTpbMjU1LDI1NSwyNDBdLGtoYWtpOlsyNDAsMjMwLDE0MF0sbGF2ZW5kZXI6WzIzMCwyMzAsMjUwXSxsYXZlbmRlcmJsdXNoOlsyNTUsMjQwLDI0NV0sbGF3bmdyZWVuOlsxMjQsMjUyLDBdLGxlbW9uY2hpZmZvbjpbMjU1LDI1MCwyMDVdLGxpZ2h0Ymx1ZTpbMTczLDIxNiwyMzBdLGxpZ2h0Y29yYWw6WzI0MCwxMjgsMTI4XSxsaWdodGN5YW46WzIyNCwyNTUsMjU1XSxsaWdodGdvbGRlbnJvZHllbGxvdzpbMjUwLDI1MCwyMTBdLGxpZ2h0Z3JheTpbMjExLDIxMSwyMTFdLGxpZ2h0Z3JlZW46WzE0NCwyMzgsMTQ0XSxsaWdodGdyZXk6WzIxMSwyMTEsMjExXSxsaWdodHBpbms6WzI1NSwxODIsMTkzXSxsaWdodHNhbG1vbjpbMjU1LDE2MCwxMjJdLGxpZ2h0c2VhZ3JlZW46WzMyLDE3OCwxNzBdLGxpZ2h0c2t5Ymx1ZTpbMTM1LDIwNiwyNTBdLGxpZ2h0c2xhdGVncmF5OlsxMTksMTM2LDE1M10sbGlnaHRzbGF0ZWdyZXk6WzExOSwxMzYsMTUzXSxsaWdodHN0ZWVsYmx1ZTpbMTc2LDE5NiwyMjJdLGxpZ2h0eWVsbG93OlsyNTUsMjU1LDIyNF0sbGltZTpbMCwyNTUsMF0sbGltZWdyZWVuOls1MCwyMDUsNTBdLGxpbmVuOlsyNTAsMjQwLDIzMF0sbWFnZW50YTpbMjU1LDAsMjU1XSxtYXJvb246WzEyOCwwLDBdLG1lZGl1bWFxdWFtYXJpbmU6WzEwMiwyMDUsMTcwXSxtZWRpdW1ibHVlOlswLDAsMjA1XSxtZWRpdW1vcmNoaWQ6WzE4Niw4NSwyMTFdLG1lZGl1bXB1cnBsZTpbMTQ3LDExMiwyMTldLG1lZGl1bXNlYWdyZWVuOls2MCwxNzksMTEzXSxtZWRpdW1zbGF0ZWJsdWU6WzEyMywxMDQsMjM4XSxtZWRpdW1zcHJpbmdncmVlbjpbMCwyNTAsMTU0XSxtZWRpdW10dXJxdW9pc2U6WzcyLDIwOSwyMDRdLG1lZGl1bXZpb2xldHJlZDpbMTk5LDIxLDEzM10sbWlkbmlnaHRibHVlOlsyNSwyNSwxMTJdLG1pbnRjcmVhbTpbMjQ1LDI1NSwyNTBdLG1pc3R5cm9zZTpbMjU1LDIyOCwyMjVdLG1vY2Nhc2luOlsyNTUsMjI4LDE4MV0sbmF2YWpvd2hpdGU6WzI1NSwyMjIsMTczXSxuYXZ5OlswLDAsMTI4XSxvbGRsYWNlOlsyNTMsMjQ1LDIzMF0sb2xpdmU6WzEyOCwxMjgsMF0sb2xpdmVkcmFiOlsxMDcsMTQyLDM1XSxvcmFuZ2U6WzI1NSwxNjUsMF0sb3JhbmdlcmVkOlsyNTUsNjksMF0sb3JjaGlkOlsyMTgsMTEyLDIxNF0scGFsZWdvbGRlbnJvZDpbMjM4LDIzMiwxNzBdLHBhbGVncmVlbjpbMTUyLDI1MSwxNTJdLHBhbGV0dXJxdW9pc2U6WzE3NSwyMzgsMjM4XSxwYWxldmlvbGV0cmVkOlsyMTksMTEyLDE0N10scGFwYXlhd2hpcDpbMjU1LDIzOSwyMTNdLHBlYWNocHVmZjpbMjU1LDIxOCwxODVdLHBlcnU6WzIwNSwxMzMsNjNdLHBpbms6WzI1NSwxOTIsMjAzXSxwbHVtOlsyMjEsMTYwLDIyMV0scG93ZGVyYmx1ZTpbMTc2LDIyNCwyMzBdLHB1cnBsZTpbMTI4LDAsMTI4XSxyZWJlY2NhcHVycGxlOlsxMDIsNTEsMTUzXSxyZWQ6WzI1NSwwLDBdLHJvc3licm93bjpbMTg4LDE0MywxNDNdLHJveWFsYmx1ZTpbNjUsMTA1LDIyNV0sc2FkZGxlYnJvd246WzEzOSw2OSwxOV0sc2FsbW9uOlsyNTAsMTI4LDExNF0sc2FuZHlicm93bjpbMjQ0LDE2NCw5Nl0sc2VhZ3JlZW46WzQ2LDEzOSw4N10sc2Vhc2hlbGw6WzI1NSwyNDUsMjM4XSxzaWVubmE6WzE2MCw4Miw0NV0sc2lsdmVyOlsxOTIsMTkyLDE5Ml0sc2t5Ymx1ZTpbMTM1LDIwNiwyMzVdLHNsYXRlYmx1ZTpbMTA2LDkwLDIwNV0sc2xhdGVncmF5OlsxMTIsMTI4LDE0NF0sc2xhdGVncmV5OlsxMTIsMTI4LDE0NF0sc25vdzpbMjU1LDI1MCwyNTBdLHNwcmluZ2dyZWVuOlswLDI1NSwxMjddLHN0ZWVsYmx1ZTpbNzAsMTMwLDE4MF0sdGFuOlsyMTAsMTgwLDE0MF0sdGVhbDpbMCwxMjgsMTI4XSx0aGlzdGxlOlsyMTYsMTkxLDIxNl0sdG9tYXRvOlsyNTUsOTksNzFdLHR1cnF1b2lzZTpbNjQsMjI0LDIwOF0sdmlvbGV0OlsyMzgsMTMwLDIzOF0sd2hlYXQ6WzI0NSwyMjIsMTc5XSx3aGl0ZTpbMjU1LDI1NSwyNTVdLHdoaXRlc21va2U6WzI0NSwyNDUsMjQ1XSx5ZWxsb3c6WzI1NSwyNTUsMF0seWVsbG93Z3JlZW46WzE1NCwyMDUsNTBdfX0se31dLDEyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb2xvci1yZ2JhIiksYT10KCJjbGFtcCIpLGk9dCgiZHR5cGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsiZmxvYXQiIT09ZSYmZXx8KGU9ImFycmF5IiksInVpbnQiPT09ZSYmKGU9InVpbnQ4IiksInVpbnRfY2xhbXBlZCI9PT1lJiYoZT0idWludDhfY2xhbXBlZCIpO3ZhciByPW5ldyhpKGUpKSg0KSxvPSJ1aW50OCIhPT1lJiYidWludDhfY2xhbXBlZCIhPT1lO3JldHVybiB0Lmxlbmd0aCYmInN0cmluZyIhPXR5cGVvZiB0fHwoKHQ9bih0KSlbMF0vPTI1NSx0WzFdLz0yNTUsdFsyXS89MjU1KSxmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8ISEoQXJyYXkuaXNBcnJheSh0KSYmKHRbMF0+MXx8MD09PXRbMF0pJiYodFsxXT4xfHwwPT09dFsxXSkmJih0WzJdPjF8fDA9PT10WzJdKSYmKCF0WzNdfHx0WzNdPjEpKX0odCk/KHJbMF09dFswXSxyWzFdPXRbMV0sclsyXT10WzJdLHJbM109bnVsbCE9dFszXT90WzNdOjI1NSxvJiYoclswXS89MjU1LHJbMV0vPTI1NSxyWzJdLz0yNTUsclszXS89MjU1KSxyKToobz8oclswXT10WzBdLHJbMV09dFsxXSxyWzJdPXRbMl0sclszXT1udWxsIT10WzNdP3RbM106MSk6KHJbMF09YShNYXRoLmZsb29yKDI1NSp0WzBdKSwwLDI1NSksclsxXT1hKE1hdGguZmxvb3IoMjU1KnRbMV0pLDAsMjU1KSxyWzJdPWEoTWF0aC5mbG9vcigyNTUqdFsyXSksMCwyNTUpLHJbM109bnVsbD09dFszXT8yNTU6YShNYXRoLmZsb29yKDI1NSp0WzNdKSwwLDI1NSkpLHIpfX0se2NsYW1wOjExNywiY29sb3ItcmdiYSI6MTI0LGR0eXBlOjE3MX1dLDEyMzpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3ItbmFtZSIpLGE9dCgiaXMtcGxhaW4tb2JqIiksaT10KCJkZWZpbmVkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHMsbD1bXSxjPTE7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlmKG5bdF0pbD1uW3RdLnNsaWNlKCkscz0icmdiIjtlbHNlIGlmKCJ0cmFuc3BhcmVudCI9PT10KWM9MCxzPSJyZ2IiLGw9WzAsMCwwXTtlbHNlIGlmKC9eI1tBLUZhLWYwLTldKyQvLnRlc3QodCkpe3ZhciB1PXQuc2xpY2UoMSksaD11Lmxlbmd0aCxmPWg8PTQ7Yz0xLGY/KGw9W3BhcnNlSW50KHVbMF0rdVswXSwxNikscGFyc2VJbnQodVsxXSt1WzFdLDE2KSxwYXJzZUludCh1WzJdK3VbMl0sMTYpXSw0PT09aCYmKGM9cGFyc2VJbnQodVszXSt1WzNdLDE2KS8yNTUpKToobD1bcGFyc2VJbnQodVswXSt1WzFdLDE2KSxwYXJzZUludCh1WzJdK3VbM10sMTYpLHBhcnNlSW50KHVbNF0rdVs1XSwxNildLDg9PT1oJiYoYz1wYXJzZUludCh1WzZdK3VbN10sMTYpLzI1NSkpLGxbMF18fChsWzBdPTApLGxbMV18fChsWzFdPTApLGxbMl18fChsWzJdPTApLHM9InJnYiJ9ZWxzZSBpZihlPS9eKCg/OnJnYnxoc1tsdmJdfGh3YnxjbXlrP3x4eVt6eV18Z3JheXxsYWJ8bGNodT92P3xbbHlddXZ8bG1zKWE/KVxzKlwoKFteXCldKilcKS8uZXhlYyh0KSl7dmFyIHA9ZVsxXSxkPSJyZ2IiPT09cCx1PXAucmVwbGFjZSgvYSQvLCIiKTtzPXU7dmFyIGg9ImNteWsiPT09dT80OiJncmF5Ij09PXU/MTozO2w9ZVsyXS50cmltKCkuc3BsaXQoL1xzKixccyovKS5tYXAoZnVuY3Rpb24odCxlKXtpZigvJSQvLnRlc3QodCkpcmV0dXJuIGU9PT1oP3BhcnNlRmxvYXQodCkvMTAwOiJyZ2IiPT09dT8yNTUqcGFyc2VGbG9hdCh0KS8xMDA6cGFyc2VGbG9hdCh0KTtpZigiaCI9PT11W2VdKXtpZigvZGVnJC8udGVzdCh0KSlyZXR1cm4gcGFyc2VGbG9hdCh0KTtpZih2b2lkIDAhPT1vW3RdKXJldHVybiBvW3RdfXJldHVybiBwYXJzZUZsb2F0KHQpfSkscD09PXUmJmwucHVzaCgxKSxjPWQ/MTp2b2lkIDA9PT1sW2hdPzE6bFtoXSxsPWwuc2xpY2UoMCxoKX1lbHNlIHQubGVuZ3RoPjEwJiYvWzAtOV0oPzpcc3xcLykvLnRlc3QodCkmJihsPXQubWF0Y2goLyhbMC05XSspL2cpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pLHM9dC5tYXRjaCgvKFthLXpdKS9naSkuam9pbigiIikudG9Mb3dlckNhc2UoKSk7ZWxzZSBpZihpc05hTih0KSlpZihhKHQpKXt2YXIgZz1pKHQucix0LnJlZCx0LlIsbnVsbCk7bnVsbCE9PWc/KHM9InJnYiIsbD1bZyxpKHQuZyx0LmdyZWVuLHQuRyksaSh0LmIsdC5ibHVlLHQuQildKToocz0iaHNsIixsPVtpKHQuaCx0Lmh1ZSx0LkgpLGkodC5zLHQuc2F0dXJhdGlvbix0LlMpLGkodC5sLHQubGlnaHRuZXNzLHQuTCx0LmIsdC5icmlnaHRuZXNzKV0pLGM9aSh0LmEsdC5hbHBoYSx0Lm9wYWNpdHksMSksbnVsbCE9dC5vcGFjaXR5JiYoYy89MTAwKX1lbHNlKEFycmF5LmlzQXJyYXkodCl8fHIuQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldyYmQXJyYXlCdWZmZXIuaXNWaWV3KHQpKSYmKGw9W3RbMF0sdFsxXSx0WzJdXSxzPSJyZ2IiLGM9ND09PXQubGVuZ3RoP3RbM106MSk7ZWxzZSBzPSJyZ2IiLGw9W3Q+Pj4xNiwoNjUyODAmdCk+Pj44LDI1NSZ0XTtyZXR1cm57c3BhY2U6cyx2YWx1ZXM6bCxhbHBoYTpjfX07dmFyIG89e3JlZDowLG9yYW5nZTo2MCx5ZWxsb3c6MTIwLGdyZWVuOjE4MCxibHVlOjI0MCxwdXJwbGU6MzAwfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJjb2xvci1uYW1lIjoxMjEsZGVmaW5lZDoxNjYsImlzLXBsYWluLW9iaiI6NDI0fV0sMTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLXBhcnNlIiksYT10KCJjb2xvci1zcGFjZS9oc2wiKSxpPXQoImNsYW1wIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9bih0KTtyZXR1cm4gci5zcGFjZT8oKGU9QXJyYXkoMykpWzBdPWkoci52YWx1ZXNbMF0sMCwyNTUpLGVbMV09aShyLnZhbHVlc1sxXSwwLDI1NSksZVsyXT1pKHIudmFsdWVzWzJdLDAsMjU1KSwiaCI9PT1yLnNwYWNlWzBdJiYoZT1hLnJnYihlKSksZS5wdXNoKGkoci5hbHBoYSwwLDEpKSxlKTpbXX19LHtjbGFtcDoxMTcsImNvbG9yLXBhcnNlIjoxMjMsImNvbG9yLXNwYWNlL2hzbCI6MTI1fV0sMTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcmdiIik7ZS5leHBvcnRzPXtuYW1lOiJoc2wiLG1pbjpbMCwwLDBdLG1heDpbMzYwLDEwMCwxMDBdLGNoYW5uZWw6WyJodWUiLCJzYXR1cmF0aW9uIiwibGlnaHRuZXNzIl0sYWxpYXM6WyJIU0wiXSxyZ2I6ZnVuY3Rpb24odCl7dmFyIGUscixuLGEsaSxvPXRbMF0vMzYwLHM9dFsxXS8xMDAsbD10WzJdLzEwMDtpZigwPT09cylyZXR1cm5baT0yNTUqbCxpLGldO2U9MipsLShyPWw8LjU/bCooMStzKTpsK3MtbCpzKSxhPVswLDAsMF07Zm9yKHZhciBjPTA7YzwzO2MrKykobj1vKzEvMyotKGMtMSkpPDA/bisrOm4+MSYmbi0tLGk9NipuPDE/ZSs2KihyLWUpKm46MipuPDE/cjozKm48Mj9lKyhyLWUpKigyLzMtbikqNjplLGFbY109MjU1Kmk7cmV0dXJuIGF9fSxuLmhzbD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dFswXS8yNTUsYT10WzFdLzI1NSxpPXRbMl0vMjU1LG89TWF0aC5taW4obixhLGkpLHM9TWF0aC5tYXgobixhLGkpLGw9cy1vO3JldHVybiBzPT09bz9lPTA6bj09PXM/ZT0oYS1pKS9sOmE9PT1zP2U9MisoaS1uKS9sOmk9PT1zJiYoZT00KyhuLWEpL2wpLChlPU1hdGgubWluKDYwKmUsMzYwKSk8MCYmKGUrPTM2MCkscj0obytzKS8yLFtlLDEwMCoocz09PW8/MDpyPD0uNT9sLyhzK28pOmwvKDItcy1vKSksMTAwKnJdfX0seyIuL3JnYiI6MTI2fV0sMTI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToicmdiIixtaW46WzAsMCwwXSxtYXg6WzI1NSwyNTUsMjU1XSxjaGFubmVsOlsicmVkIiwiZ3JlZW4iLCJibHVlIl0sYWxpYXM6WyJSR0IiXX19LHt9XSwxMjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2pldDpbe2luZGV4OjAscmdiOlswLDAsMTMxXX0se2luZGV4Oi4xMjUscmdiOlswLDYwLDE3MF19LHtpbmRleDouMzc1LHJnYjpbNSwyNTUsMjU1XX0se2luZGV4Oi42MjUscmdiOlsyNTUsMjU1LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1MCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzEyOCwwLDBdfV0saHN2Olt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6LjE2OSxyZ2I6WzI1MywyNTUsMl19LHtpbmRleDouMTczLHJnYjpbMjQ3LDI1NSwyXX0se2luZGV4Oi4zMzcscmdiOlswLDI1Miw0XX0se2luZGV4Oi4zNDEscmdiOlswLDI1MiwxMF19LHtpbmRleDouNTA2LHJnYjpbMSwyNDksMjU1XX0se2luZGV4Oi42NzEscmdiOlsyLDAsMjUzXX0se2luZGV4Oi42NzUscmdiOls4LDAsMjUzXX0se2luZGV4Oi44MzkscmdiOlsyNTUsMCwyNTFdfSx7aW5kZXg6Ljg0MyxyZ2I6WzI1NSwwLDI0NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsNl19XSxob3Q6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjMscmdiOlsyMzAsMCwwXX0se2luZGV4Oi42LHJnYjpbMjU1LDIxMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzAsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMjU1XX1dLHNwcmluZzpbe2luZGV4OjAscmdiOlsyNTUsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMF19XSxzdW1tZXI6W3tpbmRleDowLHJnYjpbMCwxMjgsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDEwMl19XSxhdXR1bW46W3tpbmRleDowLHJnYjpbMjU1LDAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwwXX1dLHdpbnRlcjpbe2luZGV4OjAscmdiOlswLDAsMjU1XX0se2luZGV4OjEscmdiOlswLDI1NSwxMjhdfV0sYm9uZTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMzc2LHJnYjpbODQsODQsMTE2XX0se2luZGV4Oi43NTMscmdiOlsxNjksMjAwLDIwMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0sY29wcGVyOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi44MDQscmdiOlsyNTUsMTYwLDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDE5OSwxMjddfV0sZ3JleXM6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLHlpZ25idTpbe2luZGV4OjAscmdiOls4LDI5LDg4XX0se2luZGV4Oi4xMjUscmdiOlszNyw1MiwxNDhdfSx7aW5kZXg6LjI1LHJnYjpbMzQsOTQsMTY4XX0se2luZGV4Oi4zNzUscmdiOlsyOSwxNDUsMTkyXX0se2luZGV4Oi41LHJnYjpbNjUsMTgyLDE5Nl19LHtpbmRleDouNjI1LHJnYjpbMTI3LDIwNSwxODddfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxODBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIzNywyNDgsMjE3XX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDIxN119XSxncmVlbnM6W3tpbmRleDowLHJnYjpbMCw2OCwyN119LHtpbmRleDouMTI1LHJnYjpbMCwxMDksNDRdfSx7aW5kZXg6LjI1LHJnYjpbMzUsMTM5LDY5XX0se2luZGV4Oi4zNzUscmdiOls2NSwxNzEsOTNdfSx7aW5kZXg6LjUscmdiOlsxMTYsMTk2LDExOF19LHtpbmRleDouNjI1LHJnYjpbMTYxLDIxNywxNTVdfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxOTJdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIyOSwyNDUsMjI0XX0se2luZGV4OjEscmdiOlsyNDcsMjUyLDI0NV19XSx5aW9ycmQ6W3tpbmRleDowLHJnYjpbMTI4LDAsMzhdfSx7aW5kZXg6LjEyNSxyZ2I6WzE4OSwwLDM4XX0se2luZGV4Oi4yNSxyZ2I6WzIyNywyNiwyOF19LHtpbmRleDouMzc1LHJnYjpbMjUyLDc4LDQyXX0se2luZGV4Oi41LHJnYjpbMjUzLDE0MSw2MF19LHtpbmRleDouNjI1LHJnYjpbMjU0LDE3OCw3Nl19LHtpbmRleDouNzUscmdiOlsyNTQsMjE3LDExOF19LHtpbmRleDouODc1LHJnYjpbMjU1LDIzNywxNjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjA0XX1dLGJsdWVyZWQ6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxyZGJ1Olt7aW5kZXg6MCxyZ2I6WzUsMTAsMTcyXX0se2luZGV4Oi4zNSxyZ2I6WzEwNiwxMzcsMjQ3XX0se2luZGV4Oi41LHJnYjpbMTkwLDE5MCwxOTBdfSx7aW5kZXg6LjYscmdiOlsyMjAsMTcwLDEzMl19LHtpbmRleDouNyxyZ2I6WzIzMCwxNDUsOTBdfSx7aW5kZXg6MSxyZ2I6WzE3OCwxMCwyOF19XSxwaWNuaWM6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDouMSxyZ2I6WzUxLDE1MywyNTVdfSx7aW5kZXg6LjIscmdiOlsxMDIsMjA0LDI1NV19LHtpbmRleDouMyxyZ2I6WzE1MywyMDQsMjU1XX0se2luZGV4Oi40LHJnYjpbMjA0LDIwNCwyNTVdfSx7aW5kZXg6LjUscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDouNixyZ2I6WzI1NSwyMDQsMjU1XX0se2luZGV4Oi43LHJnYjpbMjU1LDE1MywyNTVdfSx7aW5kZXg6LjgscmdiOlsyNTUsMTAyLDIwNF19LHtpbmRleDouOSxyZ2I6WzI1NSwxMDIsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMCwwXX1dLHJhaW5ib3c6W3tpbmRleDowLHJnYjpbMTUwLDAsOTBdfSx7aW5kZXg6LjEyNSxyZ2I6WzAsMCwyMDBdfSx7aW5kZXg6LjI1LHJnYjpbMCwyNSwyNTVdfSx7aW5kZXg6LjM3NSxyZ2I6WzAsMTUyLDI1NV19LHtpbmRleDouNSxyZ2I6WzQ0LDI1NSwxNTBdfSx7aW5kZXg6LjYyNSxyZ2I6WzE1MSwyNTUsMF19LHtpbmRleDouNzUscmdiOlsyNTUsMjM0LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1NSwxMTEsMF19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxwb3J0bGFuZDpbe2luZGV4OjAscmdiOlsxMiw1MSwxMzFdfSx7aW5kZXg6LjI1LHJnYjpbMTAsMTM2LDE4Nl19LHtpbmRleDouNSxyZ2I6WzI0MiwyMTEsNTZdfSx7aW5kZXg6Ljc1LHJnYjpbMjQyLDE0Myw1Nl19LHtpbmRleDoxLHJnYjpbMjE3LDMwLDMwXX1dLGJsYWNrYm9keTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMixyZ2I6WzIzMCwwLDBdfSx7aW5kZXg6LjQscmdiOlsyMzAsMjEwLDBdfSx7aW5kZXg6LjcscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMTYwLDIwMCwyNTVdfV0sZWFydGg6W3tpbmRleDowLHJnYjpbMCwwLDEzMF19LHtpbmRleDouMSxyZ2I6WzAsMTgwLDE4MF19LHtpbmRleDouMixyZ2I6WzQwLDIxMCw0MF19LHtpbmRleDouNCxyZ2I6WzIzMCwyMzAsNTBdfSx7aW5kZXg6LjYscmdiOlsxMjAsNzAsMjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGVsZWN0cmljOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4xNSxyZ2I6WzMwLDAsMTAwXX0se2luZGV4Oi40LHJnYjpbMTIwLDAsMTAwXX0se2luZGV4Oi42LHJnYjpbMTYwLDkwLDBdfSx7aW5kZXg6LjgscmdiOlsyMzAsMjAwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTAsMjIwXX1dLGFscGhhOlt7aW5kZXg6MCxyZ2I6WzI1NSwyNTUsMjU1LDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1LDFdfV0sdmlyaWRpczpbe2luZGV4OjAscmdiOls2OCwxLDg0XX0se2luZGV4Oi4xMyxyZ2I6WzcxLDQ0LDEyMl19LHtpbmRleDouMjUscmdiOls1OSw4MSwxMzldfSx7aW5kZXg6LjM4LHJnYjpbNDQsMTEzLDE0Ml19LHtpbmRleDouNSxyZ2I6WzMzLDE0NCwxNDFdfSx7aW5kZXg6LjYzLHJnYjpbMzksMTczLDEyOV19LHtpbmRleDouNzUscmdiOls5MiwyMDAsOTldfSx7aW5kZXg6Ljg4LHJnYjpbMTcwLDIyMCw1MF19LHtpbmRleDoxLHJnYjpbMjUzLDIzMSwzN119XSxpbmZlcm5vOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzMxLDEyLDcyXX0se2luZGV4Oi4yNSxyZ2I6Wzg1LDE1LDEwOV19LHtpbmRleDouMzgscmdiOlsxMzYsMzQsMTA2XX0se2luZGV4Oi41LHJnYjpbMTg2LDU0LDg1XX0se2luZGV4Oi42MyxyZ2I6WzIyNyw4OSw1MV19LHtpbmRleDouNzUscmdiOlsyNDksMTQwLDEwXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwyMDEsNTBdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTUsMTY0XX1dLG1hZ21hOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzI4LDE2LDY4XX0se2luZGV4Oi4yNSxyZ2I6Wzc5LDE4LDEyM119LHtpbmRleDouMzgscmdiOlsxMjksMzcsMTI5XX0se2luZGV4Oi41LHJnYjpbMTgxLDU0LDEyMl19LHtpbmRleDouNjMscmdiOlsyMjksODAsMTAwXX0se2luZGV4Oi43NSxyZ2I6WzI1MSwxMzUsOTddfSx7aW5kZXg6Ljg4LHJnYjpbMjU0LDE5NCwxMzVdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTMsMTkxXX1dLHBsYXNtYTpbe2luZGV4OjAscmdiOlsxMyw4LDEzNV19LHtpbmRleDouMTMscmdiOls3NSwzLDE2MV19LHtpbmRleDouMjUscmdiOlsxMjUsMywxNjhdfSx7aW5kZXg6LjM4LHJnYjpbMTY4LDM0LDE1MF19LHtpbmRleDouNSxyZ2I6WzIwMyw3MCwxMjFdfSx7aW5kZXg6LjYzLHJnYjpbMjI5LDEwNyw5M119LHtpbmRleDouNzUscmdiOlsyNDgsMTQ4LDY1XX0se2luZGV4Oi44OCxyZ2I6WzI1MywxOTUsNDBdfSx7aW5kZXg6MSxyZ2I6WzI0MCwyNDksMzNdfV0sd2FybTpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEzLHJnYjpbMTcyLDAsMTg3XX0se2luZGV4Oi4yNSxyZ2I6WzIxOSwwLDE3MF19LHtpbmRleDouMzgscmdiOlsyNTUsMCwxMzBdfSx7aW5kZXg6LjUscmdiOlsyNTUsNjMsNzRdfSx7aW5kZXg6LjYzLHJnYjpbMjU1LDEyMywwXX0se2luZGV4Oi43NSxyZ2I6WzIzNCwxNzYsMF19LHtpbmRleDouODgscmdiOlsxOTAsMjI4LDBdfSx7aW5kZXg6MSxyZ2I6WzE0NywyNTUsMF19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzEyNSwwLDE3OV19LHtpbmRleDouMTMscmdiOlsxMTYsMCwyMThdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNzQsMjM3XX0se2luZGV4Oi4zOCxyZ2I6WzY4LDE0NiwyMzFdfSx7aW5kZXg6LjUscmdiOlswLDIwNCwxOTddfSx7aW5kZXg6LjYzLHJnYjpbMCwyNDcsMTQ2XX0se2luZGV4Oi43NSxyZ2I6WzAsMjU1LDg4XX0se2luZGV4Oi44OCxyZ2I6WzQwLDI1NSw4XX0se2luZGV4OjEscmdiOlsxNDcsMjU1LDBdfV0sInJhaW5ib3ctc29mdCI6W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xLHJnYjpbMTk5LDAsMTgwXX0se2luZGV4Oi4yLHJnYjpbMjU1LDAsMTIxXX0se2luZGV4Oi4zLHJnYjpbMjU1LDEwOCwwXX0se2luZGV4Oi40LHJnYjpbMjIyLDE5NCwwXX0se2luZGV4Oi41LHJnYjpbMTUwLDI1NSwwXX0se2luZGV4Oi42LHJnYjpbMCwyNTUsNTVdfSx7aW5kZXg6LjcscmdiOlswLDI0NiwxNTBdfSx7aW5kZXg6LjgscmdiOls1MCwxNjcsMjIyXX0se2luZGV4Oi45LHJnYjpbMTAzLDUxLDIzNV19LHtpbmRleDoxLHJnYjpbMTI0LDAsMTg2XX1dLGJhdGh5bWV0cnk6W3tpbmRleDowLHJnYjpbNDAsMjYsNDRdfSx7aW5kZXg6LjEzLHJnYjpbNTksNDksOTBdfSx7aW5kZXg6LjI1LHJnYjpbNjQsNzYsMTM5XX0se2luZGV4Oi4zOCxyZ2I6WzYzLDExMCwxNTFdfSx7aW5kZXg6LjUscmdiOls3MiwxNDIsMTU4XX0se2luZGV4Oi42MyxyZ2I6Wzg1LDE3NCwxNjNdfSx7aW5kZXg6Ljc1LHJnYjpbMTIwLDIwNiwxNjNdfSx7aW5kZXg6Ljg4LHJnYjpbMTg3LDIzMCwxNzJdfSx7aW5kZXg6MSxyZ2I6WzI1MywyNTQsMjA0XX1dLGNkb206W3tpbmRleDowLHJnYjpbNDcsMTUsNjJdfSx7aW5kZXg6LjEzLHJnYjpbODcsMjMsODZdfSx7aW5kZXg6LjI1LHJnYjpbMTMwLDI4LDk5XX0se2luZGV4Oi4zOCxyZ2I6WzE3MSw0MSw5Nl19LHtpbmRleDouNSxyZ2I6WzIwNiw2Nyw4Nl19LHtpbmRleDouNjMscmdiOlsyMzAsMTA2LDg0XX0se2luZGV4Oi43NSxyZ2I6WzI0MiwxNDksMTAzXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwxOTMsMTM1XX0se2luZGV4OjEscmdiOlsyNTQsMjM3LDE3Nl19XSxjaGxvcm9waHlsbDpbe2luZGV4OjAscmdiOlsxOCwzNiwyMF19LHtpbmRleDouMTMscmdiOlsyNSw2Myw0MV19LHtpbmRleDouMjUscmdiOlsyNCw5MSw1OV19LHtpbmRleDouMzgscmdiOlsxMywxMTksNzJdfSx7aW5kZXg6LjUscmdiOlsxOCwxNDgsODBdfSx7aW5kZXg6LjYzLHJnYjpbODAsMTczLDg5XX0se2luZGV4Oi43NSxyZ2I6WzEzMiwxOTYsMTIyXX0se2luZGV4Oi44OCxyZ2I6WzE3NSwyMjEsMTYyXX0se2luZGV4OjEscmdiOlsyMTUsMjQ5LDIwOF19XSxkZW5zaXR5Olt7aW5kZXg6MCxyZ2I6WzU0LDE0LDM2XX0se2luZGV4Oi4xMyxyZ2I6Wzg5LDIzLDgwXX0se2luZGV4Oi4yNSxyZ2I6WzExMCw0NSwxMzJdfSx7aW5kZXg6LjM4LHJnYjpbMTIwLDc3LDE3OF19LHtpbmRleDouNSxyZ2I6WzEyMCwxMTMsMjEzXX0se2luZGV4Oi42MyxyZ2I6WzExNSwxNTEsMjI4XX0se2luZGV4Oi43NSxyZ2I6WzEzNCwxODUsMjI3XX0se2luZGV4Oi44OCxyZ2I6WzE3NywyMTQsMjI3XX0se2luZGV4OjEscmdiOlsyMzAsMjQxLDI0MV19XSwiZnJlZXN1cmZhY2UtYmx1ZSI6W3tpbmRleDowLHJnYjpbMzAsNCwxMTBdfSx7aW5kZXg6LjEzLHJnYjpbNDcsMTQsMTc2XX0se2luZGV4Oi4yNSxyZ2I6WzQxLDQ1LDIzNl19LHtpbmRleDouMzgscmdiOlsyNSw5OSwyMTJdfSx7aW5kZXg6LjUscmdiOls2OCwxMzEsMjAwXX0se2luZGV4Oi42MyxyZ2I6WzExNCwxNTYsMTk3XX0se2luZGV4Oi43NSxyZ2I6WzE1NywxODEsMjAzXX0se2luZGV4Oi44OCxyZ2I6WzIwMCwyMDgsMjE2XX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSwiZnJlZXN1cmZhY2UtcmVkIjpbe2luZGV4OjAscmdiOls2MCw5LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzEwMCwxNywyN119LHtpbmRleDouMjUscmdiOlsxNDIsMjAsMjldfSx7aW5kZXg6LjM4LHJnYjpbMTc3LDQzLDI3XX0se2luZGV4Oi41LHJnYjpbMTkyLDg3LDYzXX0se2luZGV4Oi42MyxyZ2I6WzIwNSwxMjUsMTA1XX0se2luZGV4Oi43NSxyZ2I6WzIxNiwxNjIsMTQ4XX0se2luZGV4Oi44OCxyZ2I6WzIyNywxOTksMTkzXX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSxveHlnZW46W3tpbmRleDowLHJnYjpbNjQsNSw1XX0se2luZGV4Oi4xMyxyZ2I6WzEwNiw2LDE1XX0se2luZGV4Oi4yNSxyZ2I6WzE0NCwyNiw3XX0se2luZGV4Oi4zOCxyZ2I6WzE2OCw2NCwzXX0se2luZGV4Oi41LHJnYjpbMTg4LDEwMCw0XX0se2luZGV4Oi42MyxyZ2I6WzIwNiwxMzYsMTFdfSx7aW5kZXg6Ljc1LHJnYjpbMjIwLDE3NCwyNV19LHtpbmRleDouODgscmdiOlsyMzEsMjE1LDQ0XX0se2luZGV4OjEscmdiOlsyNDgsMjU0LDEwNV19XSxwYXI6W3tpbmRleDowLHJnYjpbNTEsMjAsMjRdfSx7aW5kZXg6LjEzLHJnYjpbOTAsMzIsMzVdfSx7aW5kZXg6LjI1LHJnYjpbMTI5LDQ0LDM0XX0se2luZGV4Oi4zOCxyZ2I6WzE1OSw2OCwyNV19LHtpbmRleDouNSxyZ2I6WzE4Miw5OSwxOV19LHtpbmRleDouNjMscmdiOlsxOTksMTM0LDIyXX0se2luZGV4Oi43NSxyZ2I6WzIxMiwxNzEsMzVdfSx7aW5kZXg6Ljg4LHJnYjpbMjIxLDIxMCw1NF19LHtpbmRleDoxLHJnYjpbMjI1LDI1Myw3NV19XSxwaGFzZTpbe2luZGV4OjAscmdiOlsxNDUsMTA1LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzE4NCw3MSwzOF19LHtpbmRleDouMjUscmdiOlsxODYsNTgsMTE1XX0se2luZGV4Oi4zOCxyZ2I6WzE2MCw3MSwxODVdfSx7aW5kZXg6LjUscmdiOlsxMTAsOTcsMjE4XX0se2luZGV4Oi42MyxyZ2I6WzUwLDEyMywxNjRdfSx7aW5kZXg6Ljc1LHJnYjpbMzEsMTMxLDExMF19LHtpbmRleDouODgscmdiOls3NywxMjksMzRdfSx7aW5kZXg6MSxyZ2I6WzE0NSwxMDUsMThdfV0sc2FsaW5pdHk6W3tpbmRleDowLHJnYjpbNDIsMjQsMTA4XX0se2luZGV4Oi4xMyxyZ2I6WzMzLDUwLDE2Ml19LHtpbmRleDouMjUscmdiOlsxNSw5MCwxNDVdfSx7aW5kZXg6LjM4LHJnYjpbNDAsMTE4LDEzN119LHtpbmRleDouNSxyZ2I6WzU5LDE0NiwxMzVdfSx7aW5kZXg6LjYzLHJnYjpbNzksMTc1LDEyNl19LHtpbmRleDouNzUscmdiOlsxMjAsMjAzLDEwNF19LHtpbmRleDouODgscmdiOlsxOTMsMjIxLDEwMF19LHtpbmRleDoxLHJnYjpbMjUzLDIzOSwxNTRdfV0sdGVtcGVyYXR1cmU6W3tpbmRleDowLHJnYjpbNCwzNSw1MV19LHtpbmRleDouMTMscmdiOlsyMyw1MSwxMjJdfSx7aW5kZXg6LjI1LHJnYjpbODUsNTksMTU3XX0se2luZGV4Oi4zOCxyZ2I6WzEyOSw3OSwxNDNdfSx7aW5kZXg6LjUscmdiOlsxNzUsOTUsMTMwXX0se2luZGV4Oi42MyxyZ2I6WzIyMiwxMTIsMTAxXX0se2luZGV4Oi43NSxyZ2I6WzI0OSwxNDYsNjZdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDE5Niw2NV19LHtpbmRleDoxLHJnYjpbMjMyLDI1MCw5MV19XSx0dXJiaWRpdHk6W3tpbmRleDowLHJnYjpbMzQsMzEsMjddfSx7aW5kZXg6LjEzLHJnYjpbNjUsNTAsNDFdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNjksNTJdfSx7aW5kZXg6LjM4LHJnYjpbMTMxLDg5LDU3XX0se2luZGV4Oi41LHJnYjpbMTYxLDExMiw1OV19LHtpbmRleDouNjMscmdiOlsxODUsMTQwLDY2XX0se2luZGV4Oi43NSxyZ2I6WzIwMiwxNzQsODhdfSx7aW5kZXg6Ljg4LHJnYjpbMjE2LDIwOSwxMjZdfSx7aW5kZXg6MSxyZ2I6WzIzMywyNDYsMTcxXX1dLCJ2ZWxvY2l0eS1ibHVlIjpbe2luZGV4OjAscmdiOlsxNywzMiw2NF19LHtpbmRleDouMTMscmdiOlszNSw1MiwxMTZdfSx7aW5kZXg6LjI1LHJnYjpbMjksODEsMTU2XX0se2luZGV4Oi4zOCxyZ2I6WzMxLDExMywxNjJdfSx7aW5kZXg6LjUscmdiOls1MCwxNDQsMTY5XX0se2luZGV4Oi42MyxyZ2I6Wzg3LDE3MywxNzZdfSx7aW5kZXg6Ljc1LHJnYjpbMTQ5LDE5NiwxODldfSx7aW5kZXg6Ljg4LHJnYjpbMjAzLDIyMSwyMTFdfSx7aW5kZXg6MSxyZ2I6WzI1NCwyNTEsMjMwXX1dLCJ2ZWxvY2l0eS1ncmVlbiI6W3tpbmRleDowLHJnYjpbMjMsMzUsMTldfSx7aW5kZXg6LjEzLHJnYjpbMjQsNjQsMzhdfSx7aW5kZXg6LjI1LHJnYjpbMTEsOTUsNDVdfSx7aW5kZXg6LjM4LHJnYjpbMzksMTIzLDM1XX0se2luZGV4Oi41LHJnYjpbOTUsMTQ2LDEyXX0se2luZGV4Oi42MyxyZ2I6WzE1MiwxNjUsMThdfSx7aW5kZXg6Ljc1LHJnYjpbMjAxLDE4Niw2OV19LHtpbmRleDouODgscmdiOlsyMzMsMjE2LDEzN119LHtpbmRleDoxLHJnYjpbMjU1LDI1MywyMDVdfV0sY3ViZWhlbGl4Olt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4wNyxyZ2I6WzIyLDUsNTldfSx7aW5kZXg6LjEzLHJnYjpbNjAsNCwxMDVdfSx7aW5kZXg6LjIscmdiOlsxMDksMSwxMzVdfSx7aW5kZXg6LjI3LHJnYjpbMTYxLDAsMTQ3XX0se2luZGV4Oi4zMyxyZ2I6WzIxMCwyLDE0Ml19LHtpbmRleDouNCxyZ2I6WzI1MSwxMSwxMjNdfSx7aW5kZXg6LjQ3LHJnYjpbMjU1LDI5LDk3XX0se2luZGV4Oi41MyxyZ2I6WzI1NSw1NCw2OV19LHtpbmRleDouNixyZ2I6WzI1NSw4NSw0Nl19LHtpbmRleDouNjcscmdiOlsyNTUsMTIwLDM0XX0se2luZGV4Oi43MyxyZ2I6WzI1NSwxNTcsMzddfSx7aW5kZXg6LjgscmdiOlsyNDEsMTkxLDU3XX0se2luZGV4Oi44NyxyZ2I6WzIyNCwyMjAsOTNdfSx7aW5kZXg6LjkzLHJnYjpbMjE4LDI0MSwxNDJdfSx7aW5kZXg6MSxyZ2I6WzIyNywyNTMsMTk4XX1dfX0se31dLDEyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbG9yU2NhbGUiKSxhPXQoImxlcnAiKTtmdW5jdGlvbiBpKHQpe3JldHVyblt0WzBdLzI1NSx0WzFdLzI1NSx0WzJdLzI1NSx0WzNdXX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZSxyPSIjIixuPTA7bjwzOysrbilyKz0oIjAwIisoZT0oZT10W25dKS50b1N0cmluZygxNikpKS5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiByfWZ1bmN0aW9uIHModCl7cmV0dXJuInJnYmEoIit0LmpvaW4oIiwiKSsiKSJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHUsaCxmLHAsZCxnO3R8fCh0PXt9KTtwPSh0Lm5zaGFkZXN8fDcyKS0xLGY9dC5mb3JtYXR8fCJoZXgiLChoPXQuY29sb3JtYXApfHwoaD0iamV0Iik7aWYoInN0cmluZyI9PXR5cGVvZiBoKXtpZihoPWgudG9Mb3dlckNhc2UoKSwhbltoXSl0aHJvdyBFcnJvcihoKyIgbm90IGEgc3VwcG9ydGVkIGNvbG9yc2NhbGUiKTt1PW5baF19ZWxzZXtpZighQXJyYXkuaXNBcnJheShoKSl0aHJvdyBFcnJvcigidW5zdXBwb3J0ZWQgY29sb3JtYXAgb3B0aW9uIixoKTt1PWguc2xpY2UoKX1pZih1Lmxlbmd0aD5wKzEpdGhyb3cgbmV3IEVycm9yKGgrIiBtYXAgcmVxdWlyZXMgbnNoYWRlcyB0byBiZSBhdCBsZWFzdCBzaXplICIrdS5sZW5ndGgpO2Q9QXJyYXkuaXNBcnJheSh0LmFscGhhKT8yIT09dC5hbHBoYS5sZW5ndGg/WzEsMV06dC5hbHBoYS5zbGljZSgpOiJudW1iZXIiPT10eXBlb2YgdC5hbHBoYT9bdC5hbHBoYSx0LmFscGhhXTpbMSwxXTtlPXUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQuaW5kZXgqcCl9KSxkWzBdPU1hdGgubWluKE1hdGgubWF4KGRbMF0sMCksMSksZFsxXT1NYXRoLm1pbihNYXRoLm1heChkWzFdLDApLDEpO3ZhciB2PXUubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dVtlXS5pbmRleCxuPXVbZV0ucmdiLnNsaWNlKCk7cmV0dXJuIDQ9PT1uLmxlbmd0aCYmblszXT49MCYmblszXTw9MT9uOihuWzNdPWRbMF0rKGRbMV0tZFswXSkqcixuKX0pLG09W107Zm9yKGc9MDtnPGUubGVuZ3RoLTE7KytnKXtjPWVbZysxXS1lW2ddLHI9dltnXSxsPXZbZysxXTtmb3IodmFyIHk9MDt5PGM7eSsrKXt2YXIgeD15L2M7bS5wdXNoKFtNYXRoLnJvdW5kKGEoclswXSxsWzBdLHgpKSxNYXRoLnJvdW5kKGEoclsxXSxsWzFdLHgpKSxNYXRoLnJvdW5kKGEoclsyXSxsWzJdLHgpKSxhKHJbM10sbFszXSx4KV0pfX1tLnB1c2godVt1Lmxlbmd0aC0xXS5yZ2IuY29uY2F0KGRbMV0pKSwiaGV4Ij09PWY/bT1tLm1hcChvKToicmdiYVN0cmluZyI9PT1mP209bS5tYXAocyk6ImZsb2F0Ij09PWYmJihtPW0ubWFwKGkpKTtyZXR1cm4gbX19LHsiLi9jb2xvclNjYWxlIjoxMjcsbGVycDo0Mjd9XSwxMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBvPW4oZSxyLGkpO2lmKDA9PT1vKXt2YXIgcz1hKG4odCxlLHIpKSxjPWEobih0LGUsaSkpO2lmKHM9PT1jKXtpZigwPT09cyl7dmFyIHU9bCh0LGUsciksaD1sKHQsZSxpKTtyZXR1cm4gdT09PWg/MDp1PzE6LTF9cmV0dXJuIDB9cmV0dXJuIDA9PT1jP3M+MD8tMTpsKHQsZSxpKT8tMToxOjA9PT1zP2M+MD8xOmwodCxlLHIpPzE6LTE6YShjLXMpfXZhciBmPW4odCxlLHIpO2lmKGY+MClyZXR1cm4gbz4wJiZuKHQsZSxpKT4wPzE6LTE7aWYoZjwwKXJldHVybiBvPjB8fG4odCxlLGkpPjA/MTotMTt2YXIgcD1uKHQsZSxpKTtyZXR1cm4gcD4wPzE6bCh0LGUscik/MTotMX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIiksYT10KCJzaWdudW0iKSxpPXQoInR3by1zdW0iKSxvPXQoInJvYnVzdC1wcm9kdWN0Iikscz10KCJyb2J1c3Qtc3VtIik7ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49aSh0WzBdLC1lWzBdKSxhPWkodFsxXSwtZVsxXSksbD1pKHJbMF0sLWVbMF0pLGM9aShyWzFdLC1lWzFdKSx1PXMobyhuLGwpLG8oYSxjKSk7cmV0dXJuIHVbdS5sZW5ndGgtMV0+PTB9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTA5LCJyb2J1c3QtcHJvZHVjdCI6NTEwLCJyb2J1c3Qtc3VtIjo1MTQsc2lnbnVtOjUxNSwidHdvLXN1bSI6NTQzfV0sMTMwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGgsaT10Lmxlbmd0aC1lLmxlbmd0aDtpZihpKXJldHVybiBpO3N3aXRjaChyKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiB0WzBdLWVbMF07Y2FzZSAyOnJldHVybiB0WzBdK3RbMV0tZVswXS1lWzFdfHxuKHRbMF0sdFsxXSktbihlWzBdLGVbMV0pO2Nhc2UgMzp2YXIgbz10WzBdK3RbMV0scz1lWzBdK2VbMV07aWYoaT1vK3RbMl0tKHMrZVsyXSkpcmV0dXJuIGk7dmFyIGw9bih0WzBdLHRbMV0pLGM9bihlWzBdLGVbMV0pO3JldHVybiBuKGwsdFsyXSktbihjLGVbMl0pfHxuKGwrdFsyXSxvKS1uKGMrZVsyXSxzKTtjYXNlIDQ6dmFyIHU9dFswXSxoPXRbMV0sZj10WzJdLHA9dFszXSxkPWVbMF0sZz1lWzFdLHY9ZVsyXSxtPWVbM107cmV0dXJuIHUraCtmK3AtKGQrZyt2K20pfHxuKHUsaCxmLHApLW4oZCxnLHYsbSxkKXx8bih1K2gsdStmLHUrcCxoK2YsaCtwLGYrcCktbihkK2csZCt2LGQrbSxnK3YsZyttLHYrbSl8fG4odStoK2YsdStoK3AsdStmK3AsaCtmK3ApLW4oZCtnK3YsZCtnK20sZCt2K20sZyt2K20pO2RlZmF1bHQ6Zm9yKHZhciB5PXQuc2xpY2UoKS5zb3J0KGEpLHg9ZS5zbGljZSgpLnNvcnQoYSksYj0wO2I8cjsrK2IpaWYoaT15W2JdLXhbYl0pcmV0dXJuIGk7cmV0dXJuIDB9fTt2YXIgbj1NYXRoLm1pbjtmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQtZX19LHt9XSwxMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29tcGFyZS1jZWxsIiksYT10KCJjZWxsLW9yaWVudGF0aW9uIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKXx8YSh0KS1hKGUpfX0seyJjZWxsLW9yaWVudGF0aW9uIjoxMTQsImNvbXBhcmUtY2VsbCI6MTMwfV0sMTMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2NoMWQiKSxhPXQoIi4vbGliL2NoMmQiKSxpPXQoIi4vbGliL2NobmQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuW1swXV07dmFyIHI9dFswXS5sZW5ndGg7aWYoMD09PXIpcmV0dXJuW107aWYoMT09PXIpcmV0dXJuIG4odCk7aWYoMj09PXIpcmV0dXJuIGEodCk7cmV0dXJuIGkodCxyKX19LHsiLi9saWIvY2gxZCI6MTMzLCIuL2xpYi9jaDJkIjoxMzQsIi4vbGliL2NobmQiOjEzNX1dLDEzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wLG49MTtuPHQubGVuZ3RoOysrbil0W25dWzBdPHRbZV1bMF0mJihlPW4pLHRbbl1bMF0+dFtyXVswXSYmKHI9bik7cmV0dXJuIGU8cj9bW2VdLFtyXV06ZT5yP1tbcl0sW2VdXTpbW2VdXX19LHt9XSwxMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCkscj1lLmxlbmd0aDtpZihyPD0yKXJldHVybltdO2Zvcih2YXIgYT1uZXcgQXJyYXkociksaT1lW3ItMV0sbz0wO288cjsrK28pe3ZhciBzPWVbb107YVtvXT1baSxzXSxpPXN9cmV0dXJuIGF9O3ZhciBuPXQoIm1vbm90b25lLWNvbnZleC1odWxsLTJkIil9LHsibW9ub3RvbmUtY29udmV4LWh1bGwtMmQiOjQzNn1dLDEzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIG4odCwhMCl9Y2F0Y2gocyl7dmFyIHI9YSh0KTtpZihyLmxlbmd0aDw9ZSlyZXR1cm5bXTt2YXIgaT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxhPTA7YTxlLmxlbmd0aDsrK2EpblthXT10W2VbYV1dO2Zvcih2YXIgaT1lLmxlbmd0aCxhPTA7YTxyOysrYSllLmluZGV4T2YoYSk8MCYmKG5baSsrXT10W2FdKTtyZXR1cm4gbn0odCxyKSxvPW4oaSwhMCk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsYT0wO2E8cjsrK2EpZm9yKHZhciBpPXRbYV0sbz0wO288aS5sZW5ndGg7KytvKXt2YXIgcz1pW29dO2lmKHM8bilpW29dPWVbc107ZWxzZXtzLT1uO2Zvcih2YXIgbD0wO2w8bjsrK2wpcz49ZVtsXSYmKHMrPTEpO2lbb109c319cmV0dXJuIHR9KG8scil9fTt2YXIgbj10KCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCIpLGE9dCgiYWZmaW5lLWh1bGwiKX0seyJhZmZpbmUtaHVsbCI6NjUsImluY3JlbWVudGFsLWNvbnZleC1odWxsIjo0MTV9XSwxMzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e0FGRzoiYWZnaGFuIixBTEE6IlxcYlxcd2xhbmQiLEFMQjoiYWxiYW5pYSIsRFpBOiJhbGdlcmlhIixBU006Il4oPz0uKmFtZXJpYykuKnNhbW9hIixBTkQ6ImFuZG9ycmEiLEFHTzoiYW5nb2xhIixBSUE6ImFuZ3VpbGw/YSIsQVRBOiJhbnRhcmN0aWNhIixBVEc6ImFudGlndWEiLEFSRzoiYXJnZW50aW4iLEFSTToiYXJtZW5pYSIsQUJXOiJeKD8hLipib25haXJlKS4qXFxiYXJ1YmEiLEFVUzoiYXVzdHJhbGlhIixBVVQ6Il4oPyEuKmh1bmdhcnkpLiphdXN0cmlhfFxcYmF1c3RyaS4qXFxiZW1wIixBWkU6ImF6ZXJiYWlqYW4iLEJIUzoiYmFoYW1hcyIsQkhSOiJiYWhyYWluIixCR0Q6ImJhbmdsYWRlc2h8Xig/PS4qZWFzdCkuKnBha2k/c3RhbiIsQlJCOiJiYXJiYWRvcyIsQkxSOiJiZWxhcnVzfGJ5ZWxvIixCRUw6Il4oPyEuKmx1eGVtKS4qYmVsZ2l1bSIsQkxaOiJiZWxpemV8Xig/PS4qYnJpdGlzaCkuKmhvbmR1cmFzIixCRU46ImJlbmlufGRhaG9tZSIsQk1VOiJiZXJtdWRhIixCVE46ImJodXRhbiIsQk9MOiJib2xpdmlhIixCRVM6Il4oPz0uKmJvbmFpcmUpLipldXN0YXRpdXN8Xig/PS4qY2FyaWIpLipuZXRoZXJsYW5kc3xcXGJiZXMuP2lzbGFuZHMiLEJJSDoiaGVyemVnb3ZpbmF8Ym9zbmlhIixCV0E6ImJvdHN3YW5hfGJlY2h1YW5hIixCVlQ6ImJvdXZldCIsQlJBOiJicmF6aWwiLElPVDoiYnJpdGlzaC4/aW5kaWFuLj9vY2VhbiIsQlJOOiJicnVuZWkiLEJHUjoiYnVsZ2FyaWEiLEJGQToiYnVya2luYXxcXGJmYXNvfHVwcGVyLj92b2x0YSIsQkRJOiJidXJ1bmRpIixDUFY6InZlcmRlIixLSE06ImNhbWJvZGlhfGthbXB1Y2hlYXxraG1lciIsQ01SOiJjYW1lcm9vbiIsQ0FOOiJjYW5hZGEiLENZTToiY2F5bWFuIixDQUY6IlxcYmNlbnRyYWwuYWZyaWNhbi5yZXB1YmxpYyIsVENEOiJcXGJjaGFkIixDSEw6IlxcYmNoaWxlIixDSE46Il4oPyEuKlxcYm1hYykoPyEuKlxcYmhvbmcpKD8hLipcXGJ0YWkpKD8hLipcXGJyZXApLipjaGluYXxeKD89LipwZW8pKD89LipyZXApLipjaGluYSIsQ1hSOiJjaHJpc3RtYXMiLENDSzoiXFxiY29jb3N8a2VlbGluZyIsQ09MOiJjb2xvbWJpYSIsQ09NOiJjb21vcm8iLENPRzoiXig/IS4qXFxiZGVtKSg/IS4qXFxiZFtcXC5dP3IpKD8hLipraW5zaGFzYSkoPyEuKnphaXJlKSg/IS4qYmVsZykoPyEuKmwub3BvbGR2aWxsZSkoPyEuKmZyZWUpLipcXGJjb25nbyIsQ09LOiJcXGJjb29rIixDUkk6ImNvc3RhLj9yaWNhIixDSVY6Iml2b2lyZXxpdm9yeSIsSFJWOiJjcm9hdGlhIixDVUI6IlxcYmN1YmEiLENVVzoiXig/IS4qYm9uYWlyZSkuKlxcYmN1cmEoY3xceGU3KWFvIixDWVA6ImN5cHJ1cyIsQ1NLOiJjemVjaG9zbG92YWtpYSIsQ1pFOiJeKD89LipyZXApLipjemVjaHxjemVjaGlhfGJvaGVtaWEiLENPRDoiXFxiZGVtLipjb25nb3xjb25nby4qXFxiZGVtfGNvbmdvLipcXGJkW1xcLl0/cnxcXGJkW1xcLl0/ci4qY29uZ298YmVsZ2lhbi4/Y29uZ298Y29uZ28uP2ZyZWUuP3N0YXRlfGtpbnNoYXNhfHphaXJlfGwub3BvbGR2aWxsZXxkcmN8ZHJvY3xyZGMiLEROSzoiZGVubWFyayIsREpJOiJkamlib3V0aSIsRE1BOiJkb21pbmljYSg/IW4pIixET006ImRvbWluaWNhbi5yZXAiLEVDVToiZWN1YWRvciIsRUdZOiJlZ3lwdCIsU0xWOiJlbC4/c2FsdmFkb3IiLEdOUToiZ3VpbmUuKmVxfGVxLipndWluZXxeKD89LipzcGFuKS4qZ3VpbmVhIixFUkk6ImVyaXRyZWEiLEVTVDoiZXN0b25pYSIsRVRIOiJldGhpb3BpYXxhYnlzc2luaWEiLEZMSzoiZmFsa2xhbmR8bWFsdmluYXMiLEZSTzoiZmFyb2V8ZmFlcm9lIixGSkk6ImZpamkiLEZJTjoiZmlubGFuZCIsRlJBOiJeKD8hLipcXGJkZXApKD8hLiptYXJ0aW5pcXVlKS4qZnJhbmNlfGZyZW5jaC4/cmVwdWJsaWN8XFxiZ2F1bCIsR1VGOiJeKD89LipmcmVuY2gpLipndWlhbmEiLFBZRjoiZnJlbmNoLj9wb2x5bmVzaWF8dGFoaXRpIixBVEY6ImZyZW5jaC4/c291dGhlcm4iLEdBQjoiZ2Fib24iLEdNQjoiZ2FtYmlhIixHRU86Il4oPyEuKnNvdXRoKS4qZ2VvcmdpYSIsRERSOiJnZXJtYW4uP2RlbW9jcmF0aWMuP3JlcHVibGljfGRlbW9jcmF0aWMuP3JlcHVibGljLipnZXJtYW55fGVhc3QuZ2VybWFueSIsREVVOiJeKD8hLiplYXN0KS4qZ2VybWFueXxeKD89LipcXGJmZWQuKlxcYnJlcCkuKmdlcm1hbiIsR0hBOiJnaGFuYXxnb2xkLj9jb2FzdCIsR0lCOiJnaWJyYWx0YXIiLEdSQzoiZ3JlZWNlfGhlbGxlbmljfGhlbGxhcyIsR1JMOiJncmVlbmxhbmQiLEdSRDoiZ3JlbmFkYSIsR0xQOiJndWFkZWxvdXBlIixHVU06IlxcYmd1YW0iLEdUTToiZ3VhdGVtYWxhIixHR1k6Imd1ZXJuc2V5IixHSU46Il4oPyEuKmVxKSg/IS4qc3BhbikoPyEuKmJpc3NhdSkoPyEuKnBvcnR1KSg/IS4qbmV3KS4qZ3VpbmVhIixHTkI6ImJpc3NhdXxeKD89Lipwb3J0dSkuKmd1aW5lYSIsR1VZOiJndXlhbmF8YnJpdGlzaC4/Z3VpYW5hIixIVEk6ImhhaXRpIixITUQ6ImhlYXJkLiptY2RvbmFsZCIsVkFUOiJob2x5Lj9zZWV8dmF0aWNhbnxwYXBhbC4/c3QiLEhORDoiXig/IS4qYnJpdCkuKmhvbmR1cmFzIixIS0c6ImhvbmcuP2tvbmciLEhVTjoiXig/IS4qYXVzdHIpLipodW5nYXJ5IixJU0w6ImljZWxhbmQiLElORDoiaW5kaWEoPyEuKm9jZWEpIixJRE46ImluZG9uZXNpYSIsSVJOOiJcXGJpcmFufHBlcnNpYSIsSVJROiJcXGJpcmFxfG1lc29wb3RhbWlhIixJUkw6IiheaXJlbGFuZCl8KF5yZXB1YmxpYy4qaXJlbGFuZCkiLElNTjoiXig/PS4qaXNsZSkuKlxcYm1hbiIsSVNSOiJpc3JhZWwiLElUQToiaXRhbHkiLEpBTToiamFtYWljYSIsSlBOOiJqYXBhbiIsSkVZOiJqZXJzZXkiLEpPUjoiam9yZGFuIixLQVo6ImthemFrIixLRU46ImtlbnlhfGJyaXRpc2guP2Vhc3QuP2FmcmljYXxlYXN0Lj9hZnJpY2EuP3Byb3QiLEtJUjoia2lyaWJhdGkiLFBSSzoiXig/PS4qZGVtb2NyYXR8cGVvcGxlfG5vcnRofGQuKnAuKi5yKS4qXFxia29yZWF8ZHBya3xrb3JlYS4qKGQuKnAuKnIpIixLV1Q6Imt1d2FpdCIsS0daOiJreXJneXp8a2lyZ2hpeiIsTEFPOiJcXGJsYW9zP1xcYiIsTFZBOiJsYXR2aWEiLExCTjoibGViYW5vbiIsTFNPOiJsZXNvdGhvfGJhc3V0byIsTEJSOiJsaWJlcmlhIixMQlk6ImxpYnlhIixMSUU6ImxpZWNodGVuc3RlaW4iLExUVToibGl0aHVhbmlhIixMVVg6Il4oPyEuKmJlbGcpLipsdXhlbSIsTUFDOiJtYWNhKG98dSkiLE1ERzoibWFkYWdhc2NhcnxtYWxhZ2FzeSIsTVdJOiJtYWxhd2l8bnlhc2EiLE1ZUzoibWFsYXlzaWEiLE1EVjoibWFsZGl2ZSIsTUxJOiJcXGJtYWxpXFxiIixNTFQ6IlxcYm1hbHRhIixNSEw6Im1hcnNoYWxsIixNVFE6Im1hcnRpbmlxdWUiLE1SVDoibWF1cml0YW5pYSIsTVVTOiJtYXVyaXRpdXMiLE1ZVDoiXFxibWF5b3R0ZSIsTUVYOiJcXGJtZXhpYyIsRlNNOiJmZWQuKm1pY3JvbmVzaWF8bWljcm9uZXNpYS4qZmVkIixNQ086Im1vbmFjbyIsTU5HOiJtb25nb2xpYSIsTU5FOiJeKD8hLipzZXJiaWEpLiptb250ZW5lZ3JvIixNU1I6Im1vbnRzZXJyYXQiLE1BUjoibW9yb2Njb3xcXGJtYXJvYyIsTU9aOiJtb3phbWJpcXVlIixNTVI6Im15YW5tYXJ8YnVybWEiLE5BTToibmFtaWJpYSIsTlJVOiJuYXVydSIsTlBMOiJuZXBhbCIsTkxEOiJeKD8hLipcXGJhbnQpKD8hLipcXGJjYXJpYikuKm5ldGhlcmxhbmRzIixBTlQ6Il4oPz0uKlxcYmFudCkuKihuZXRoZXJ8ZHV0Y2gpIixOQ0w6Im5ldy4/Y2FsZWRvbmlhIixOWkw6Im5ldy4/emVhbGFuZCIsTklDOiJuaWNhcmFndWEiLE5FUjoiXFxibmlnZXIoPyFpYSkiLE5HQToibmlnZXJpYSIsTklVOiJuaXVlIixORks6Im5vcmZvbGsiLE1OUDoibWFyaWFuYSIsTk9SOiJub3J3YXkiLE9NTjoiXFxib21hbnx0cnVjaWFsIixQQUs6Il4oPyEuKmVhc3QpLipwYWtpP3N0YW4iLFBMVzoicGFsYXUiLFBTRToicGFsZXN0aW58XFxiZ2F6YXx3ZXN0Lj9iYW5rIixQQU46InBhbmFtYSIsUE5HOiJwYXB1YXxuZXcuP2d1aW5lYSIsUFJZOiJwYXJhZ3VheSIsUEVSOiJwZXJ1IixQSEw6InBoaWxpcHBpbmVzIixQQ046InBpdGNhaXJuIixQT0w6InBvbGFuZCIsUFJUOiJwb3J0dWdhbCIsUFJJOiJwdWVydG8uP3JpY28iLFFBVDoicWF0YXIiLEtPUjoiXig/IS4qZC4qcC4qcikoPyEuKmRlbW9jcmF0KSg/IS4qcGVvcGxlKSg/IS4qbm9ydGgpLipcXGJrb3JlYSg/IS4qZC4qcC4qcikiLE1EQToibW9sZG92fGIoYXxlKXNzYXJhYmlhIixSRVU6InIoZXxceGU5KXVuaW9uIixST1U6InIob3x1fG91KW1hbmlhIixSVVM6IlxcYnJ1c3NpYXxzb3ZpZXQuP3VuaW9ufHVcXC4/c1xcLj9zXFwuP3J8c29jaWFsaXN0Lj9yZXB1YmxpY3MiLFJXQToicndhbmRhIixCTE06ImJhcnRoKGV8XHhlOSlsZW15IixTSE46ImhlbGVuYSIsS05BOiJraXR0c3xcXGJuZXZpcyIsTENBOiJcXGJsdWNpYSIsTUFGOiJeKD89Lipjb2xsZWN0aXZpdHkpLiptYXJ0aW58Xig/PS4qZnJhbmNlKS4qbWFydGluKD8haXF1ZSl8Xig/PS4qZnJlbmNoKS4qbWFydGluKD8haXF1ZSkiLFNQTToibWlxdWVsb24iLFZDVDoidmluY2VudCIsV1NNOiJeKD8hLiphbWVyKS4qc2Ftb2EiLFNNUjoic2FuLj9tYXJpbm8iLFNUUDoiXFxicyhhfFx4ZTMpby4/dG9tKGV8XHhlOSkiLFNBVToiXFxic2FcXHcqLj9hcmFiaWEiLFNFTjoic2VuZWdhbCIsU1JCOiJeKD8hLiptb250ZSkuKnNlcmJpYSIsU1lDOiJzZXljaGVsbCIsU0xFOiJzaWVycmEiLFNHUDoic2luZ2Fwb3JlIixTWE06Il4oPyEuKm1hcnRpbikoPyEuKnNhYmEpLiptYWFydGVuIixTVks6Il4oPyEuKmN6ZSkuKnNsb3ZhayIsU1ZOOiJzbG92ZW5pYSIsU0xCOiJzb2xvbW9uIixTT006InNvbWFsaSIsWkFGOiJzb3V0aC5hZnJpY2F8c1xcXFwuLj9hZnJpY2EiLFNHUzoic291dGguP2dlb3JnaWF8c2FuZHdpY2giLFNTRDoiXFxic1xcdyouP3N1ZGFuIixFU1A6InNwYWluIixMS0E6InNyaS4/bGFua2F8Y2V5bG9uIixTRE46Il4oPyEuKlxcYnMoPyF1KSkuKnN1ZGFuIixTVVI6InN1cmluYW18ZHV0Y2guP2d1aWFuYSIsU0pNOiJzdmFsYmFyZCIsU1daOiJzd2F6aWxhbmQiLFNXRToic3dlZGVuIixDSEU6InN3aXR6fHN3aXNzIixTWVI6InN5cmlhIixUV046InRhaXdhbnx0YWlwZWl8Zm9ybW9zYXxeKD8hLipwZW8pKD89LipyZXApLipjaGluYSIsVEpLOiJ0YWppayIsVEhBOiJ0aGFpbGFuZHxcXGJzaWFtIixNS0Q6Im1hY2Vkb25pYXxmeXJvbSIsVExTOiJeKD89LipsZXN0ZSkuKnRpbW9yfF4oPz0uKmVhc3QpLip0aW1vciIsVEdPOiJ0b2dvIixUS0w6InRva2VsYXUiLFRPTjoidG9uZ2EiLFRUTzoidHJpbmlkYWR8dG9iYWdvIixUVU46InR1bmlzaWEiLFRVUjoidHVya2V5IixUS006InR1cmttZW4iLFRDQToidHVya3MiLFRVVjoidHV2YWx1IixVR0E6InVnYW5kYSIsVUtSOiJ1a3JhaW4iLEFSRToiZW1pcmF0ZXN8XnVcXC4/YVxcLj9lXFwuPyR8dW5pdGVkLj9hcmFiLj9lbSIsR0JSOiJ1bml0ZWQuP2tpbmdkb218YnJpdGFpbnxedVxcLj9rXFwuPyQiLFRaQToidGFuemFuaWEiLFVTQToidW5pdGVkLj9zdGF0ZXNcXGIoPyEuKmlzbGFuZHMpfFxcYnVcXC4/c1xcLj9hXFwuP1xcYnxeXFxzKnVcXC4/c1xcLj9cXGIoPyEuKmlzbGFuZHMpIixVTUk6Im1pbm9yLj9vdXRseWluZy4/aXMiLFVSWToidXJ1Z3VheSIsVVpCOiJ1emJlayIsVlVUOiJ2YW51YXR1fG5ldy4/aGVicmlkZXMiLFZFTjoidmVuZXp1ZWxhIixWTk06Il4oPyEuKnJlcHVibGljKS4qdmlldC4/bmFtfF4oPz0uKnNvY2lhbGlzdCkuKnZpZXQuP25hbSIsVkdCOiJeKD89LipcXGJ1XFwuP1xccz9rKS4qdmlyZ2lufF4oPz0uKmJyaXQpLip2aXJnaW58Xig/PS4qa2luZ2RvbSkuKnZpcmdpbiIsVklSOiJeKD89LipcXGJ1XFwuP1xccz9zKS4qdmlyZ2lufF4oPz0uKnN0YXRlcykuKnZpcmdpbiIsV0xGOiJmdXR1bmF8d2FsbGlzIixFU0g6Indlc3Rlcm4uc2FoYXJhIixZRU06Il4oPyEuKmFyYWIpKD8hLipub3J0aCkoPyEuKnNhbmEpKD8hLipwZW8pKD8hLipkZW0pKD8hLipzb3V0aCkoPyEuKmFkZW4pKD8hLipcXGJwXFwuP2RcXC4/cikuKnllbWVuIixZTUQ6Il4oPz0uKnBlbykuKnllbWVufF4oPyEuKnJlcCkoPz0uKmRlbSkuKnllbWVufF4oPz0uKnNvdXRoKS4qeWVtZW58Xig/PS4qYWRlbikuKnllbWVufF4oPz0uKlxcYnBcXC4/ZFxcLj9yKS4qeWVtZW4iLFlVRzoieXVnb3NsYXZpYSIsWk1COiJ6YW1iaWF8bm9ydGhlcm4uP3Job2Rlc2lhIixFQVo6InphbnppYmFyIixaV0U6InppbWJhYndlfF4oPyEuKm5vcnRoZXJuKS4qcmhvZGVzaWEifX0se31dLDEzNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bInh4LXNtYWxsIiwieC1zbWFsbCIsInNtYWxsIiwibWVkaXVtIiwibGFyZ2UiLCJ4LWxhcmdlIiwieHgtbGFyZ2UiLCJsYXJnZXIiLCJzbWFsbGVyIl19LHt9XSwxMzg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJub3JtYWwiLCJjb25kZW5zZWQiLCJzZW1pLWNvbmRlbnNlZCIsImV4dHJhLWNvbmRlbnNlZCIsInVsdHJhLWNvbmRlbnNlZCIsImV4cGFuZGVkIiwic2VtaS1leHBhbmRlZCIsImV4dHJhLWV4cGFuZGVkIiwidWx0cmEtZXhwYW5kZWQiXX0se31dLDEzOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bIm5vcm1hbCIsIml0YWxpYyIsIm9ibGlxdWUiXX0se31dLDE0MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bIm5vcm1hbCIsImJvbGQiLCJib2xkZXIiLCJsaWdodGVyIiwiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiNzAwIiwiODAwIiwiOTAwIl19LHt9XSwxNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtwYXJzZTp0KCIuL3BhcnNlIiksc3RyaW5naWZ5OnQoIi4vc3RyaW5naWZ5Iil9fSx7Ii4vcGFyc2UiOjE0MywiLi9zdHJpbmdpZnkiOjE0NH1dLDE0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjc3MtZm9udC1zaXplLWtleXdvcmRzIik7ZS5leHBvcnRzPXtpc1NpemU6ZnVuY3Rpb24odCl7cmV0dXJuL15bXGRcLl0vLnRlc3QodCl8fC0xIT09dC5pbmRleE9mKCIvIil8fC0xIT09bi5pbmRleE9mKHQpfX19LHsiY3NzLWZvbnQtc2l6ZS1rZXl3b3JkcyI6MTM3fV0sMTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInVucXVvdGUiKSxhPXQoImNzcy1nbG9iYWwta2V5d29yZHMiKSxpPXQoImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyIpLG89dCgiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIikscz10KCJjc3MtZm9udC1zdHlsZS1rZXl3b3JkcyIpLGw9dCgiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3JkcyIpLGM9dCgic3RyaW5nLXNwbGl0LWJ5IiksdT10KCIuL2xpYi91dGlsIikuaXNTaXplO2UuZXhwb3J0cz1mO3ZhciBoPWYuY2FjaGU9e307ZnVuY3Rpb24gZih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJGb250IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcuIik7aWYoaFt0XSlyZXR1cm4gaFt0XTtpZigiIj09PXQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGFyc2UgYW4gZW1wdHkgc3RyaW5nLiIpO2lmKC0xIT09aS5pbmRleE9mKHQpKXJldHVybiBoW3RdPXtzeXN0ZW06dH07Zm9yKHZhciBlLHI9e3N0eWxlOiJub3JtYWwiLHZhcmlhbnQ6Im5vcm1hbCIsd2VpZ2h0OiJub3JtYWwiLHN0cmV0Y2g6Im5vcm1hbCIsbGluZUhlaWdodDoibm9ybWFsIixzaXplOiIxcmVtIixmYW1pbHk6WyJzZXJpZiJdfSxmPWModCwvXHMrLyk7ZT1mLnNoaWZ0KCk7KXtpZigtMSE9PWEuaW5kZXhPZihlKSlyZXR1cm5bInN0eWxlIiwidmFyaWFudCIsIndlaWdodCIsInN0cmV0Y2giXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdF09ZX0pLGhbdF09cjtpZigtMT09PXMuaW5kZXhPZihlKSlpZigibm9ybWFsIiE9PWUmJiJzbWFsbC1jYXBzIiE9PWUpaWYoLTE9PT1sLmluZGV4T2YoZSkpe2lmKC0xPT09by5pbmRleE9mKGUpKXtpZih1KGUpKXt2YXIgZD1jKGUsIi8iKTtpZihyLnNpemU9ZFswXSxudWxsIT1kWzFdP3IubGluZUhlaWdodD1wKGRbMV0pOiIvIj09PWZbMF0mJihmLnNoaWZ0KCksci5saW5lSGVpZ2h0PXAoZi5zaGlmdCgpKSksIWYubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1aXJlZCBmb250LWZhbWlseS4iKTtyZXR1cm4gci5mYW1pbHk9YyhmLmpvaW4oIiAiKSwvXHMqLFxzKi8pLm1hcChuKSxoW3RdPXJ9dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG9yIHVuc3VwcG9ydGVkIGZvbnQgdG9rZW46ICIrZSl9ci53ZWlnaHQ9ZX1lbHNlIHIuc3RyZXRjaD1lO2Vsc2Ugci52YXJpYW50PWU7ZWxzZSByLnN0eWxlPWV9dGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJlcXVpcmVkIGZvbnQtc2l6ZS4iKX1mdW5jdGlvbiBwKHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuIGUudG9TdHJpbmcoKT09PXQ/ZTp0fX0seyIuL2xpYi91dGlsIjoxNDIsImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHMiOjEzOCwiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiOjEzOSwiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIjoxNDAsImNzcy1nbG9iYWwta2V5d29yZHMiOjE0NSwiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzIjoxNDYsInN0cmluZy1zcGxpdC1ieSI6NTI4LHVucXVvdGU6NTQ3fV0sMTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBpY2stYnktYWxpYXMiKSxhPXQoIi4vbGliL3V0aWwiKS5pc1NpemUsaT1nKHQoImNzcy1nbG9iYWwta2V5d29yZHMiKSksbz1nKHQoImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyIpKSxzPWcodCgiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIikpLGw9Zyh0KCJjc3MtZm9udC1zdHlsZS1rZXl3b3JkcyIpKSxjPWcodCgiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3JkcyIpKSx1PXtub3JtYWw6MSwic21hbGwtY2FwcyI6MX0saD17c2VyaWY6MSwic2Fucy1zZXJpZiI6MSxtb25vc3BhY2U6MSxjdXJzaXZlOjEsZmFudGFzeToxLCJzeXN0ZW0tdWkiOjF9LGY9IjFyZW0iLHA9InNlcmlmIjtmdW5jdGlvbiBkKHQsZSl7aWYodCYmIWVbdF0mJiFpW3RdKXRocm93IEVycm9yKCJVbmtub3duIGtleXdvcmQgYCIrdCsiYCIpO3JldHVybiB0fWZ1bmN0aW9uIGcodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl1dPTE7cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCh0PW4odCx7c3R5bGU6InN0eWxlIGZvbnRzdHlsZSBmb250U3R5bGUgZm9udC1zdHlsZSBzbG9wZSBkaXN0aW5jdGlvbiIsdmFyaWFudDoidmFyaWFudCBmb250LXZhcmlhbnQgZm9udFZhcmlhbnQgZm9udHZhcmlhbnQgdmFyIGNhcGl0YWxpemF0aW9uIix3ZWlnaHQ6IndlaWdodCB3IGZvbnQtd2VpZ2h0IGZvbnRXZWlnaHQgZm9udHdlaWdodCIsc3RyZXRjaDoic3RyZXRjaCBmb250LXN0cmV0Y2ggZm9udFN0cmV0Y2ggZm9udHN0cmV0Y2ggd2lkdGgiLHNpemU6InNpemUgcyBmb250LXNpemUgZm9udFNpemUgZm9udHNpemUgaGVpZ2h0IGVtIGVtU2l6ZSIsbGluZUhlaWdodDoibGggbGluZS1oZWlnaHQgbGluZUhlaWdodCBsaW5laGVpZ2h0IGxlYWRpbmciLGZhbWlseToiZm9udCBmYW1pbHkgZm9udEZhbWlseSBmb250LWZhbWlseSBmb250ZmFtaWx5IHR5cGUgdHlwZWZhY2UgZmFjZSIsc3lzdGVtOiJzeXN0ZW0gcmVzZXJ2ZWQgZGVmYXVsdCBnbG9iYWwifSkpLnN5c3RlbSlyZXR1cm4gdC5zeXN0ZW0mJmQodC5zeXN0ZW0sbyksdC5zeXN0ZW07aWYoZCh0LnN0eWxlLGwpLGQodC52YXJpYW50LHUpLGQodC53ZWlnaHQscyksZCh0LnN0cmV0Y2gsYyksbnVsbD09dC5zaXplJiYodC5zaXplPWYpLCJudW1iZXIiPT10eXBlb2YgdC5zaXplJiYodC5zaXplKz0icHgiKSwhYSl0aHJvdyBFcnJvcigiQmFkIHNpemUgdmFsdWUgYCIrdC5zaXplKyJgIik7dC5mYW1pbHl8fCh0LmZhbWlseT1wKSxBcnJheS5pc0FycmF5KHQuZmFtaWx5KSYmKHQuZmFtaWx5Lmxlbmd0aHx8KHQuZmFtaWx5PVtwXSksdC5mYW1pbHk9dC5mYW1pbHkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBoW3RdP3Q6JyInK3QrJyInfSkuam9pbigiLCAiKSk7dmFyIGU9W107cmV0dXJuIGUucHVzaCh0LnN0eWxlKSx0LnZhcmlhbnQhPT10LnN0eWxlJiZlLnB1c2godC52YXJpYW50KSx0LndlaWdodCE9PXQudmFyaWFudCYmdC53ZWlnaHQhPT10LnN0eWxlJiZlLnB1c2godC53ZWlnaHQpLHQuc3RyZXRjaCE9PXQud2VpZ2h0JiZ0LnN0cmV0Y2ghPT10LnZhcmlhbnQmJnQuc3RyZXRjaCE9PXQuc3R5bGUmJmUucHVzaCh0LnN0cmV0Y2gpLGUucHVzaCh0LnNpemUrKG51bGw9PXQubGluZUhlaWdodHx8Im5vcm1hbCI9PT10LmxpbmVIZWlnaHR8fHQubGluZUhlaWdodCsiIj09IjEiPyIiOiIvIit0LmxpbmVIZWlnaHQpKSxlLnB1c2godC5mYW1pbHkpLGUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKX19LHsiLi9saWIvdXRpbCI6MTQyLCJjc3MtZm9udC1zdHJldGNoLWtleXdvcmRzIjoxMzgsImNzcy1mb250LXN0eWxlLWtleXdvcmRzIjoxMzksImNzcy1mb250LXdlaWdodC1rZXl3b3JkcyI6MTQwLCJjc3MtZ2xvYmFsLWtleXdvcmRzIjoxNDUsImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyI6MTQ2LCJwaWNrLWJ5LWFsaWFzIjo0Njd9XSwxNDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJpbmhlcml0IiwiaW5pdGlhbCIsInVuc2V0Il19LHt9XSwxNDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJjYXB0aW9uIiwiaWNvbiIsIm1lbnUiLCJtZXNzYWdlLWJveCIsInNtYWxsLWNhcHRpb24iLCJzdGF0dXMtYmFyIl19LHt9XSwxNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4sYSxpKXt2YXIgbz1hLTEscz1hKmEsbD1vKm8sYz0oMSsyKmEpKmwsdT1hKmwsaD1zKigzLTIqYSksZj1zKm87aWYodC5sZW5ndGgpe2l8fChpPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgcD10Lmxlbmd0aC0xO3A+PTA7LS1wKWlbcF09Yyp0W3BdK3UqZVtwXStoKnJbcF0rZipuW3BdO3JldHVybiBpfXJldHVybiBjKnQrdSplK2gqcitmKm59LGUuZXhwb3J0cy5kZXJpdmF0aXZlPWZ1bmN0aW9uKHQsZSxyLG4sYSxpKXt2YXIgbz02KmEqYS02KmEscz0zKmEqYS00KmErMSxsPS02KmEqYSs2KmEsYz0zKmEqYS0yKmE7aWYodC5sZW5ndGgpe2l8fChpPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgdT10Lmxlbmd0aC0xO3U+PTA7LS11KWlbdV09byp0W3VdK3MqZVt1XStsKnJbdV0rYypuW3VdO3JldHVybiBpfXJldHVybiBvKnQrcyplK2wqclt1XStjKm59fSx7fV0sMTQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3RodW5rLmpzIik7ZnVuY3Rpb24gYSgpe3RoaXMuYXJnVHlwZXM9W10sdGhpcy5zaGltQXJncz1bXSx0aGlzLmFycmF5QXJncz1bXSx0aGlzLmFycmF5QmxvY2tJbmRpY2VzPVtdLHRoaXMuc2NhbGFyQXJncz1bXSx0aGlzLm9mZnNldEFyZ3M9W10sdGhpcy5vZmZzZXRBcmdJbmRleD1bXSx0aGlzLmluZGV4QXJncz1bXSx0aGlzLnNoYXBlQXJncz1bXSx0aGlzLmZ1bmNOYW1lPSIiLHRoaXMucHJlPW51bGwsdGhpcy5ib2R5PW51bGwsdGhpcy5wb3N0PW51bGwsdGhpcy5kZWJ1Zz0hMX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGE7ZS5wcmU9dC5wcmUsZS5ib2R5PXQuYm9keSxlLnBvc3Q9dC5wb3N0O3ZhciByPXQuYXJncy5zbGljZSgwKTtlLmFyZ1R5cGVzPXI7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBvPXJbaV07aWYoImFycmF5Ij09PW98fCJvYmplY3QiPT10eXBlb2YgbyYmby5ibG9ja0luZGljZXMpe2lmKGUuYXJnVHlwZXNbaV09ImFycmF5IixlLmFycmF5QXJncy5wdXNoKGkpLGUuYXJyYXlCbG9ja0luZGljZXMucHVzaChvLmJsb2NrSW5kaWNlcz9vLmJsb2NrSW5kaWNlczowKSxlLnNoaW1BcmdzLnB1c2goImFycmF5IitpKSxpPGUucHJlLmFyZ3MubGVuZ3RoJiZlLnByZS5hcmdzW2ldLmNvdW50PjApdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgYXJncyIpO2lmKGk8ZS5wb3N0LmFyZ3MubGVuZ3RoJiZlLnBvc3QuYXJnc1tpXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBhcmdzIil9ZWxzZSBpZigic2NhbGFyIj09PW8pZS5zY2FsYXJBcmdzLnB1c2goaSksZS5zaGltQXJncy5wdXNoKCJzY2FsYXIiK2kpO2Vsc2UgaWYoImluZGV4Ij09PW8pe2lmKGUuaW5kZXhBcmdzLnB1c2goaSksaTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1tpXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGluZGV4Iik7aWYoaTxlLmJvZHkuYXJncy5sZW5ndGgmJmUuYm9keS5hcmdzW2ldLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBib2R5KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBpbmRleCIpO2lmKGk8ZS5wb3N0LmFyZ3MubGVuZ3RoJiZlLnBvc3QuYXJnc1tpXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBpbmRleCIpfWVsc2UgaWYoInNoYXBlIj09PW8pe2lmKGUuc2hhcGVBcmdzLnB1c2goaSksaTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1tpXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogcHJlKCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZSIpO2lmKGk8ZS5ib2R5LmFyZ3MubGVuZ3RoJiZlLmJvZHkuYXJnc1tpXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogYm9keSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGUiKTtpZihpPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbaV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHBvc3QoKSBibG9jayBtYXkgbm90IHdyaXRlIHRvIGFycmF5IHNoYXBlIil9ZWxzZXtpZigib2JqZWN0IiE9dHlwZW9mIG98fCFvLm9mZnNldCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBVbmtub3duIGFyZ3VtZW50IHR5cGUgIityW2ldKTtlLmFyZ1R5cGVzW2ldPSJvZmZzZXQiLGUub2Zmc2V0QXJncy5wdXNoKHthcnJheTpvLmFycmF5LG9mZnNldDpvLm9mZnNldH0pLGUub2Zmc2V0QXJnSW5kZXgucHVzaChpKX19aWYoZS5hcnJheUFyZ3MubGVuZ3RoPD0wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IE5vIGFycmF5IGFyZ3VtZW50cyBzcGVjaWZpZWQiKTtpZihlLnByZS5hcmdzLmxlbmd0aD5yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gcHJlKCkgYmxvY2siKTtpZihlLmJvZHkuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVG9vIG1hbnkgYXJndW1lbnRzIGluIGJvZHkoKSBibG9jayIpO2lmKGUucG9zdC5hcmdzLmxlbmd0aD5yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBUb28gbWFueSBhcmd1bWVudHMgaW4gcG9zdCgpIGJsb2NrIik7cmV0dXJuIGUuZGVidWc9ISF0LnByaW50Q29kZXx8ISF0LmRlYnVnLGUuZnVuY05hbWU9dC5mdW5jTmFtZXx8ImN3aXNlIixlLmJsb2NrU2l6ZT10LmJsb2NrU2l6ZXx8NjQsbihlKX19LHsiLi9saWIvdGh1bmsuanMiOjE1MH1dLDE0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ1bmlxIik7ZnVuY3Rpb24gYSh0LGUscil7dmFyIG4sYSxpPXQubGVuZ3RoLG89ZS5hcnJheUFyZ3MubGVuZ3RoLHM9ZS5pbmRleEFyZ3MubGVuZ3RoPjAsbD1bXSxjPVtdLHU9MCxoPTA7Zm9yKG49MDtuPGk7KytuKWMucHVzaChbImkiLG4sIj0wIl0uam9pbigiIikpO2ZvcihhPTA7YTxvOysrYSlmb3Iobj0wO248aTsrK24paD11LHU9dFtuXSwwPT09bj9jLnB1c2goWyJkIixhLCJzIixuLCI9dCIsYSwicCIsdV0uam9pbigiIikpOmMucHVzaChbImQiLGEsInMiLG4sIj0odCIsYSwicCIsdSwiLXMiLGgsIip0IixhLCJwIixoLCIpIl0uam9pbigiIikpO2ZvcihjLmxlbmd0aD4wJiZsLnB1c2goInZhciAiK2Muam9pbigiLCIpKSxuPWktMTtuPj0wOy0tbil1PXRbbl0sbC5wdXNoKFsiZm9yKGkiLG4sIj0wO2kiLG4sIjxzIix1LCI7KytpIixuLCIpeyJdLmpvaW4oIiIpKTtmb3IobC5wdXNoKHIpLG49MDtuPGk7KytuKXtmb3IoaD11LHU9dFtuXSxhPTA7YTxvOysrYSlsLnB1c2goWyJwIixhLCIrPWQiLGEsInMiLG5dLmpvaW4oIiIpKTtzJiYobj4wJiZsLnB1c2goWyJpbmRleFsiLGgsIl0tPXMiLGhdLmpvaW4oIiIpKSxsLnB1c2goWyIrK2luZGV4WyIsdSwiXSJdLmpvaW4oIiIpKSksbC5wdXNoKCJ9Iil9cmV0dXJuIGwuam9pbigiXG4iKX1mdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49dC5ib2R5LGE9W10saT1bXSxvPTA7bzx0LmFyZ3MubGVuZ3RoOysrbyl7dmFyIHM9dC5hcmdzW29dO2lmKCEocy5jb3VudDw9MCkpe3ZhciBsPW5ldyBSZWdFeHAocy5uYW1lLCJnIiksYz0iIix1PWUuYXJyYXlBcmdzLmluZGV4T2Yobyk7c3dpdGNoKGUuYXJnVHlwZXNbb10pe2Nhc2Uib2Zmc2V0Ijp2YXIgaD1lLm9mZnNldEFyZ0luZGV4LmluZGV4T2Yobyk7dT1lLm9mZnNldEFyZ3NbaF0uYXJyYXksYz0iK3EiK2g7Y2FzZSJhcnJheSI6Yz0icCIrdStjO3ZhciBmPSJsIitvLHA9ImEiK3U7aWYoMD09PWUuYXJyYXlCbG9ja0luZGljZXNbdV0pMT09PXMuY291bnQ/ImdlbmVyaWMiPT09clt1XT9zLmx2YWx1ZT8oYS5wdXNoKFsidmFyICIsZiwiPSIscCwiLmdldCgiLGMsIikiXS5qb2luKCIiKSksbj1uLnJlcGxhY2UobCxmKSxpLnB1c2goW3AsIi5zZXQoIixjLCIsIixmLCIpIl0uam9pbigiIikpKTpuPW4ucmVwbGFjZShsLFtwLCIuZ2V0KCIsYywiKSJdLmpvaW4oIiIpKTpuPW4ucmVwbGFjZShsLFtwLCJbIixjLCJdIl0uam9pbigiIikpOiJnZW5lcmljIj09PXJbdV0/KGEucHVzaChbInZhciAiLGYsIj0iLHAsIi5nZXQoIixjLCIpIl0uam9pbigiIikpLG49bi5yZXBsYWNlKGwsZikscy5sdmFsdWUmJmkucHVzaChbcCwiLnNldCgiLGMsIiwiLGYsIikiXS5qb2luKCIiKSkpOihhLnB1c2goWyJ2YXIgIixmLCI9IixwLCJbIixjLCJdIl0uam9pbigiIikpLG49bi5yZXBsYWNlKGwsZikscy5sdmFsdWUmJmkucHVzaChbcCwiWyIsYywiXT0iLGZdLmpvaW4oIiIpKSk7ZWxzZXtmb3IodmFyIGQ9W3MubmFtZV0sZz1bY10sdj0wO3Y8TWF0aC5hYnMoZS5hcnJheUJsb2NrSW5kaWNlc1t1XSk7disrKWQucHVzaCgiXFxzKlxcWyhbXlxcXV0rKVxcXSIpLGcucHVzaCgiJCIrKHYrMSkrIip0Iit1KyJiIit2KTtpZihsPW5ldyBSZWdFeHAoZC5qb2luKCIiKSwiZyIpLGM9Zy5qb2luKCIrIiksImdlbmVyaWMiPT09clt1XSl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBHZW5lcmljIGFycmF5cyBub3Qgc3VwcG9ydGVkIGluIGNvbWJpbmF0aW9uIHdpdGggYmxvY2tzISIpO249bi5yZXBsYWNlKGwsW3AsIlsiLGMsIl0iXS5qb2luKCIiKSl9YnJlYWs7Y2FzZSJzY2FsYXIiOm49bi5yZXBsYWNlKGwsIlkiK2Uuc2NhbGFyQXJncy5pbmRleE9mKG8pKTticmVhaztjYXNlImluZGV4IjpuPW4ucmVwbGFjZShsLCJpbmRleCIpO2JyZWFrO2Nhc2Uic2hhcGUiOm49bi5yZXBsYWNlKGwsInNoYXBlIil9fX1yZXR1cm5bYS5qb2luKCJcbiIpLG4saS5qb2luKCJcbiIpXS5qb2luKCJcbiIpLnRyaW0oKX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9ITAsbj0wO248dC5sZW5ndGg7KytuKXt2YXIgYT10W25dLGk9YS5tYXRjaCgvXGQrLyk7aT1pP2lbMF06IiIsMD09PWEuY2hhckF0KDApP2Vbbl09InUiK2EuY2hhckF0KDEpK2k6ZVtuXT1hLmNoYXJBdCgwKStpLG4+MCYmKHI9ciYmZVtuXT09PWVbbi0xXSl9cmV0dXJuIHI/ZVswXTplLmpvaW4oIiIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lWzFdLmxlbmd0aC1NYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKXwwLHM9bmV3IEFycmF5KHQuYXJyYXlBcmdzLmxlbmd0aCksbD1uZXcgQXJyYXkodC5hcnJheUFyZ3MubGVuZ3RoKSxjPTA7Yzx0LmFycmF5QXJncy5sZW5ndGg7KytjKWxbY109ZVsyKmNdLHNbY109ZVsyKmMrMV07dmFyIHU9W10saD1bXSxmPVtdLHA9W10sZD1bXTtmb3IoYz0wO2M8dC5hcnJheUFyZ3MubGVuZ3RoOysrYyl7dC5hcnJheUJsb2NrSW5kaWNlc1tjXTwwPyhmLnB1c2goMCkscC5wdXNoKHIpLHUucHVzaChyKSxoLnB1c2gocit0LmFycmF5QmxvY2tJbmRpY2VzW2NdKSk6KGYucHVzaCh0LmFycmF5QmxvY2tJbmRpY2VzW2NdKSxwLnB1c2godC5hcnJheUJsb2NrSW5kaWNlc1tjXStyKSx1LnB1c2goMCksaC5wdXNoKHQuYXJyYXlCbG9ja0luZGljZXNbY10pKTtmb3IodmFyIGc9W10sdj0wO3Y8c1tjXS5sZW5ndGg7disrKWZbY108PXNbY11bdl0mJnNbY11bdl08cFtjXSYmZy5wdXNoKHNbY11bdl0tZltjXSk7ZC5wdXNoKGcpfXZhciBtPVsiU1MiXSx5PVsiJ3VzZSBzdHJpY3QnIl0seD1bXTtmb3Iodj0wO3Y8cjsrK3YpeC5wdXNoKFsicyIsdiwiPVNTWyIsdiwiXSJdLmpvaW4oIiIpKTtmb3IoYz0wO2M8dC5hcnJheUFyZ3MubGVuZ3RoOysrYyl7Zm9yKG0ucHVzaCgiYSIrYyksbS5wdXNoKCJ0IitjKSxtLnB1c2goInAiK2MpLHY9MDt2PHI7Kyt2KXgucHVzaChbInQiLGMsInAiLHYsIj10IixjLCJbIixmW2NdK3YsIl0iXS5qb2luKCIiKSk7Zm9yKHY9MDt2PE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbY10pOysrdil4LnB1c2goWyJ0IixjLCJiIix2LCI9dCIsYywiWyIsdVtjXSt2LCJdIl0uam9pbigiIikpfWZvcihjPTA7Yzx0LnNjYWxhckFyZ3MubGVuZ3RoOysrYyltLnB1c2goIlkiK2MpO2lmKHQuc2hhcGVBcmdzLmxlbmd0aD4wJiZ4LnB1c2goInNoYXBlPVNTLnNsaWNlKDApIiksdC5pbmRleEFyZ3MubGVuZ3RoPjApe3ZhciBiPW5ldyBBcnJheShyKTtmb3IoYz0wO2M8cjsrK2MpYltjXT0iMCI7eC5wdXNoKFsiaW5kZXg9WyIsYi5qb2luKCIsIiksIl0iXS5qb2luKCIiKSl9Zm9yKGM9MDtjPHQub2Zmc2V0QXJncy5sZW5ndGg7KytjKXt2YXIgXz10Lm9mZnNldEFyZ3NbY10sdz1bXTtmb3Iodj0wO3Y8Xy5vZmZzZXQubGVuZ3RoOysrdikwIT09Xy5vZmZzZXRbdl0mJigxPT09Xy5vZmZzZXRbdl0/dy5wdXNoKFsidCIsXy5hcnJheSwicCIsdl0uam9pbigiIikpOncucHVzaChbXy5vZmZzZXRbdl0sIip0IixfLmFycmF5LCJwIix2XS5qb2luKCIiKSkpOzA9PT13Lmxlbmd0aD94LnB1c2goInEiK2MrIj0wIik6eC5wdXNoKFsicSIsYywiPSIsdy5qb2luKCIrIildLmpvaW4oIiIpKX12YXIgaz1uKFtdLmNvbmNhdCh0LnByZS50aGlzVmFycykuY29uY2F0KHQuYm9keS50aGlzVmFycykuY29uY2F0KHQucG9zdC50aGlzVmFycykpO2ZvcigoeD14LmNvbmNhdChrKSkubGVuZ3RoPjAmJnkucHVzaCgidmFyICIreC5qb2luKCIsIikpLGM9MDtjPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2MpeS5wdXNoKCJwIitjKyJ8PTAiKTt0LnByZS5ib2R5Lmxlbmd0aD4zJiZ5LnB1c2goaSh0LnByZSx0LGwpKTt2YXIgVD1pKHQuYm9keSx0LGwpLE09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10WzBdLmxlbmd0aDtlPHI7KXtmb3IodmFyIG49MTtuPHQubGVuZ3RoOysrbilpZih0W25dW2VdIT09dFswXVtlXSlyZXR1cm4gZTsrK2V9cmV0dXJuIGV9KGQpO008cj95LnB1c2goZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPWUubGVuZ3RoLG89ci5hcnJheUFyZ3MubGVuZ3RoLHM9ci5ibG9ja1NpemUsbD1yLmluZGV4QXJncy5sZW5ndGg+MCxjPVtdLHU9MDt1PG87Kyt1KWMucHVzaChbInZhciBvZmZzZXQiLHUsIj1wIix1XS5qb2luKCIiKSk7Zm9yKHU9dDt1PGk7Kyt1KWMucHVzaChbImZvcih2YXIgaiIrdSsiPVNTWyIsZVt1XSwiXXwwO2oiLHUsIj4wOyl7Il0uam9pbigiIikpLGMucHVzaChbImlmKGoiLHUsIjwiLHMsIil7Il0uam9pbigiIikpLGMucHVzaChbInMiLGVbdV0sIj1qIix1XS5qb2luKCIiKSksYy5wdXNoKFsiaiIsdSwiPTAiXS5qb2luKCIiKSksYy5wdXNoKFsifWVsc2V7cyIsZVt1XSwiPSIsc10uam9pbigiIikpLGMucHVzaChbImoiLHUsIi09IixzLCJ9Il0uam9pbigiIikpLGwmJmMucHVzaChbImluZGV4WyIsZVt1XSwiXT1qIix1XS5qb2luKCIiKSk7Zm9yKHU9MDt1PG87Kyt1KXtmb3IodmFyIGg9WyJvZmZzZXQiK3VdLGY9dDtmPGk7KytmKWgucHVzaChbImoiLGYsIip0Iix1LCJwIixlW2ZdXS5qb2luKCIiKSk7Yy5wdXNoKFsicCIsdSwiPSgiLGguam9pbigiKyIpLCIpIl0uam9pbigiIikpfWZvcihjLnB1c2goYShlLHIsbikpLHU9dDt1PGk7Kyt1KWMucHVzaCgifSIpO3JldHVybiBjLmpvaW4oIlxuIil9KE0sZFswXSx0LFQpKTp5LnB1c2goYShkWzBdLHQsVCkpLHQucG9zdC5ib2R5Lmxlbmd0aD4zJiZ5LnB1c2goaSh0LnBvc3QsdCxsKSksdC5kZWJ1ZyYmY29uc29sZS5sb2coIi0tLS0tR2VuZXJhdGVkIGN3aXNlIHJvdXRpbmUgZm9yICIsZSwiOlxuIit5LmpvaW4oIlxuIikrIlxuLS0tLS0tLS0tLSIpO3ZhciBBPVt0LmZ1bmNOYW1lfHwidW5uYW1lZCIsIl9jd2lzZV9sb29wXyIsc1swXS5qb2luKCJzIiksIm0iLE0sbyhsKV0uam9pbigiIik7cmV0dXJuIG5ldyBGdW5jdGlvbihbImZ1bmN0aW9uICIsQSwiKCIsbS5qb2luKCIsIiksIil7Iix5LmpvaW4oIlxuIiksIn0gcmV0dXJuICIsQV0uam9pbigiIikpKCl9fSx7dW5pcTo1NDZ9XSwxNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb21waWxlLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVsiJ3VzZSBzdHJpY3QnIiwidmFyIENBQ0hFRD17fSJdLHI9W10sYT10LmZ1bmNOYW1lKyJfY3dpc2VfdGh1bmsiO2UucHVzaChbInJldHVybiBmdW5jdGlvbiAiLGEsIigiLHQuc2hpbUFyZ3Muam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTtmb3IodmFyIGk9W10sbz1bXSxzPVtbImFycmF5Iix0LmFycmF5QXJnc1swXSwiLnNoYXBlLnNsaWNlKCIsTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSx0LmFycmF5QmxvY2tJbmRpY2VzWzBdPDA/IiwiK3QuYXJyYXlCbG9ja0luZGljZXNbMF0rIikiOiIpIl0uam9pbigiIildLGw9W10sYz1bXSx1PTA7dTx0LmFycmF5QXJncy5sZW5ndGg7Kyt1KXt2YXIgaD10LmFycmF5QXJnc1t1XTtyLnB1c2goWyJ0IixoLCI9YXJyYXkiLGgsIi5kdHlwZSwiLCJyIixoLCI9YXJyYXkiLGgsIi5vcmRlciJdLmpvaW4oIiIpKSxpLnB1c2goInQiK2gpLGkucHVzaCgiciIraCksby5wdXNoKCJ0IitoKSxvLnB1c2goInIiK2grIi5qb2luKCkiKSxzLnB1c2goImFycmF5IitoKyIuZGF0YSIpLHMucHVzaCgiYXJyYXkiK2grIi5zdHJpZGUiKSxzLnB1c2goImFycmF5IitoKyIub2Zmc2V0fDAiKSx1PjAmJihsLnB1c2goImFycmF5Iit0LmFycmF5QXJnc1swXSsiLnNoYXBlLmxlbmd0aD09PWFycmF5IitoKyIuc2hhcGUubGVuZ3RoKyIrKE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbMF0pLU1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbdV0pKSksYy5wdXNoKCJhcnJheSIrdC5hcnJheUFyZ3NbMF0rIi5zaGFwZVtzaGFwZUluZGV4KyIrTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSsiXT09PWFycmF5IitoKyIuc2hhcGVbc2hhcGVJbmRleCsiK01hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1t1XSkrIl0iKSl9Zm9yKHQuYXJyYXlBcmdzLmxlbmd0aD4xJiYoZS5wdXNoKCJpZiAoISgiK2wuam9pbigiICYmICIpKyIpKSB0aHJvdyBuZXcgRXJyb3IoJ2N3aXNlOiBBcnJheXMgZG8gbm90IGFsbCBoYXZlIHRoZSBzYW1lIGRpbWVuc2lvbmFsaXR5IScpIiksZS5wdXNoKCJmb3IodmFyIHNoYXBlSW5kZXg9YXJyYXkiK3QuYXJyYXlBcmdzWzBdKyIuc2hhcGUubGVuZ3RoLSIrTWF0aC5hYnModC5hcnJheUJsb2NrSW5kaWNlc1swXSkrIjsgc2hhcGVJbmRleC0tXHgzZTA7KSB7IiksZS5wdXNoKCJpZiAoISgiK2Muam9pbigiICYmICIpKyIpKSB0aHJvdyBuZXcgRXJyb3IoJ2N3aXNlOiBBcnJheXMgZG8gbm90IGFsbCBoYXZlIHRoZSBzYW1lIHNoYXBlIScpIiksZS5wdXNoKCJ9IikpLHU9MDt1PHQuc2NhbGFyQXJncy5sZW5ndGg7Kyt1KXMucHVzaCgic2NhbGFyIit0LnNjYWxhckFyZ3NbdV0pO3JldHVybiByLnB1c2goWyJ0eXBlPVsiLG8uam9pbigiLCIpLCJdLmpvaW4oKSJdLmpvaW4oIiIpKSxyLnB1c2goInByb2M9Q0FDSEVEW3R5cGVdIiksZS5wdXNoKCJ2YXIgIityLmpvaW4oIiwiKSksZS5wdXNoKFsiaWYoIXByb2MpeyIsIkNBQ0hFRFt0eXBlXT1wcm9jPWNvbXBpbGUoWyIsaS5qb2luKCIsIiksIl0pfSIsInJldHVybiBwcm9jKCIscy5qb2luKCIsIiksIil9Il0uam9pbigiIikpLHQuZGVidWcmJmNvbnNvbGUubG9nKCItLS0tLUdlbmVyYXRlZCB0aHVuazpcbiIrZS5qb2luKCJcbiIpKyJcbi0tLS0tLS0tLS0iKSxuZXcgRnVuY3Rpb24oImNvbXBpbGUiLGUuam9pbigiXG4iKSkobi5iaW5kKHZvaWQgMCx0KSl9fSx7Ii4vY29tcGlsZS5qcyI6MTQ5fV0sMTUxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImN3aXNlLWNvbXBpbGVyIil9LHsiY3dpc2UtY29tcGlsZXIiOjE0OH1dLDE1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhPXQoImVzNS1leHQvb2JqZWN0L2NvcHkiKSxpPXQoImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIiksbz10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLHM9dCgiZXM1LWV4dC9vYmplY3QvbWFwIiksbD10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLGM9dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiKSx1PUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLGg9T2JqZWN0LmRlZmluZVByb3BlcnR5LGY9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPWMoZSkmJmwoZS52YWx1ZSk7cmV0dXJuIGRlbGV0ZShuPWEoZSkpLndyaXRhYmxlLGRlbGV0ZSBuLnZhbHVlLG4uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIXIub3ZlcndyaXRlRGVmaW5pdGlvbiYmZi5jYWxsKHRoaXMsdCk/aTooZS52YWx1ZT11LmNhbGwoaSxyLnJlc29sdmVDb250ZXh0P3IucmVzb2x2ZUNvbnRleHQodGhpcyk6dGhpcyksaCh0aGlzLHQsZSksdGhpc1t0XSl9LG59LGUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pKGFyZ3VtZW50c1sxXSk7cmV0dXJuIG51bGwhPWUucmVzb2x2ZUNvbnRleHQmJm8oZS5yZXNvbHZlQ29udGV4dCkscyh0LGZ1bmN0aW9uKHQscil7cmV0dXJuIG4ocix0LGUpfSl9fSx7ImVzNS1leHQvb2JqZWN0L2NvcHkiOjE5MiwiZXM1LWV4dC9vYmplY3QvbWFwIjoyMDEsImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIjoyMDIsImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIjoyMDYsImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlIjoyMDh9XSwxNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXM1LWV4dC9vYmplY3QvYXNzaWduIiksYT10KCJlczUtZXh0L29iamVjdC9ub3JtYWxpemUtb3B0aW9ucyIpLGk9dCgiZXM1LWV4dC9vYmplY3QvaXMtY2FsbGFibGUiKSxvPXQoImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiKTsoZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxzLGwsYztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyfHwic3RyaW5nIiE9dHlwZW9mIHQ/KGw9ZSxlPXQsdD1udWxsKTpsPWFyZ3VtZW50c1syXSxudWxsPT10PyhyPXM9ITAsaT0hMSk6KHI9by5jYWxsKHQsImMiKSxpPW8uY2FsbCh0LCJlIikscz1vLmNhbGwodCwidyIpKSxjPXt2YWx1ZTplLGNvbmZpZ3VyYWJsZTpyLGVudW1lcmFibGU6aSx3cml0YWJsZTpzfSxsP24oYShsKSxjKTpjfSkuZ3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBzLGwsYyx1O3JldHVybiJzdHJpbmciIT10eXBlb2YgdD8oYz1yLHI9ZSxlPXQsdD1udWxsKTpjPWFyZ3VtZW50c1szXSxudWxsPT1lP2U9dm9pZCAwOmkoZSk/bnVsbD09cj9yPXZvaWQgMDppKHIpfHwoYz1yLHI9dm9pZCAwKTooYz1lLGU9cj12b2lkIDApLG51bGw9PXQ/KHM9ITAsbD0hMSk6KHM9by5jYWxsKHQsImMiKSxsPW8uY2FsbCh0LCJlIikpLHU9e2dldDplLHNldDpyLGNvbmZpZ3VyYWJsZTpzLGVudW1lcmFibGU6bH0sYz9uKGEoYyksdSk6dX19LHsiZXM1LWV4dC9vYmplY3QvYXNzaWduIjoxODksImVzNS1leHQvb2JqZWN0L2lzLWNhbGxhYmxlIjoxOTUsImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIjoyMDIsImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiOjIwOX1dLDE1NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiByKHQpe3ZhciByO3JldHVybiAxPT09dC5sZW5ndGgmJihyPXQsdD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHIodCksbil9KSx7bGVmdDpmdW5jdGlvbihlLHIsbixhKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09YSYmKGE9ZS5sZW5ndGgpO248YTspe3ZhciBpPW4rYT4+PjE7dChlW2ldLHIpPDA/bj1pKzE6YT1pfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixhKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09YSYmKGE9ZS5sZW5ndGgpO248YTspe3ZhciBpPW4rYT4+PjE7dChlW2ldLHIpPjA/YT1pOm49aSsxfXJldHVybiBufX19dmFyIG49cihlKSxhPW4ucmlnaHQsaT1uLmxlZnQ7ZnVuY3Rpb24gbyh0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIHModCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBsKHQsZSl7dmFyIHIsbixhPXQubGVuZ3RoLGk9MCxvPS0xLGw9MCxjPTA7aWYobnVsbD09ZSlmb3IoOysrbzxhOylpc05hTihyPXModFtvXSkpfHwoYys9KG49ci1sKSooci0obCs9bi8rK2kpKSk7ZWxzZSBmb3IoOysrbzxhOylpc05hTihyPXMoZSh0W29dLG8sdCkpKXx8KGMrPShuPXItbCkqKHItKGwrPW4vKytpKSkpO2lmKGk+MSlyZXR1cm4gYy8oaS0xKX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9bCh0LGUpO3JldHVybiByP01hdGguc3FydChyKTpyfWZ1bmN0aW9uIHUodCxlKXt2YXIgcixuLGEsaT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGk7KWlmKG51bGwhPShyPXRbb10pJiZyPj1yKWZvcihuPWE9cjsrK288aTspbnVsbCE9KHI9dFtvXSkmJihuPnImJihuPXIpLGE8ciYmKGE9cikpfWVsc2UgZm9yKDsrK288aTspaWYobnVsbCE9KHI9ZSh0W29dLG8sdCkpJiZyPj1yKWZvcihuPWE9cjsrK288aTspbnVsbCE9KHI9ZSh0W29dLG8sdCkpJiYobj5yJiYobj1yKSxhPHImJihhPXIpKTtyZXR1cm5bbixhXX12YXIgaD1BcnJheS5wcm90b3R5cGUsZj1oLnNsaWNlLHA9aC5tYXA7ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdH1mdW5jdGlvbiB2KHQsZSxyKXt0PSt0LGU9K2Uscj0oYT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmE8Mz8xOityO2Zvcih2YXIgbj0tMSxhPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvcikpLGk9bmV3IEFycmF5KGEpOysrbjxhOylpW25dPXQrbipyO3JldHVybiBpfXZhciBtPU1hdGguc3FydCg1MCkseT1NYXRoLnNxcnQoMTApLHg9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIGIodCxlLHIpe3ZhciBuPShlLXQpL01hdGgubWF4KDAsciksYT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksaT1uL01hdGgucG93KDEwLGEpO3JldHVybiBhPj0wPyhpPj1tPzEwOmk+PXk/NTppPj14PzI6MSkqTWF0aC5wb3coMTAsYSk6LU1hdGgucG93KDEwLC1hKS8oaT49bT8xMDppPj15PzU6aT49eD8yOjEpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxyKSxhPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksaT1uL2E7cmV0dXJuIGk+PW0/YSo9MTA6aT49eT9hKj01Omk+PXgmJihhKj0yKSxlPHQ/LWE6YX1mdW5jdGlvbiB3KHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIGsodCxlLHIpe2lmKG51bGw9PXImJihyPXMpLG49dC5sZW5ndGgpe2lmKChlPStlKTw9MHx8bjwyKXJldHVybityKHRbMF0sMCx0KTtpZihlPj0xKXJldHVybityKHRbbi0xXSxuLTEsdCk7dmFyIG4sYT0obi0xKSplLGk9TWF0aC5mbG9vcihhKSxvPStyKHRbaV0saSx0KTtyZXR1cm4gbysoK3IodFtpKzFdLGkrMSx0KS1vKSooYS1pKX19ZnVuY3Rpb24gVCh0LGUpe3ZhciByLG4sYT10Lmxlbmd0aCxpPS0xO2lmKG51bGw9PWUpe2Zvcig7KytpPGE7KWlmKG51bGwhPShyPXRbaV0pJiZyPj1yKWZvcihuPXI7KytpPGE7KW51bGwhPShyPXRbaV0pJiZuPnImJihuPXIpfWVsc2UgZm9yKDsrK2k8YTspaWYobnVsbCE9KHI9ZSh0W2ldLGksdCkpJiZyPj1yKWZvcihuPXI7KytpPGE7KW51bGwhPShyPWUodFtpXSxpLHQpKSYmbj5yJiYobj1yKTtyZXR1cm4gbn1mdW5jdGlvbiBNKHQpe2lmKCEoYT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLHI9VCh0LEEpLG49bmV3IEFycmF5KHIpOysrZTxyOylmb3IodmFyIGEsaT0tMSxvPW5bZV09bmV3IEFycmF5KGEpOysraTxhOylvW2ldPXRbaV1bZV07cmV0dXJuIG59ZnVuY3Rpb24gQSh0KXtyZXR1cm4gdC5sZW5ndGh9dC5iaXNlY3Q9YSx0LmJpc2VjdFJpZ2h0PWEsdC5iaXNlY3RMZWZ0PWksdC5hc2NlbmRpbmc9ZSx0LmJpc2VjdG9yPXIsdC5jcm9zcz1mdW5jdGlvbih0LGUscil7dmFyIG4sYSxpLHMsbD10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KGwqYyk7Zm9yKG51bGw9PXImJihyPW8pLG49aT0wO248bDsrK24pZm9yKHM9dFtuXSxhPTA7YTxjOysrYSwrK2kpdVtpXT1yKHMsZVthXSk7cmV0dXJuIHV9LHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5kZXZpYXRpb249Yyx0LmV4dGVudD11LHQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIHQ9ZyxlPXUscj13O2Z1bmN0aW9uIG4obil7dmFyIGksbyxzPW4ubGVuZ3RoLGw9bmV3IEFycmF5KHMpO2ZvcihpPTA7aTxzOysraSlsW2ldPXQobltpXSxpLG4pO3ZhciBjPWUobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPV8odSxoLGYpLGY9dihNYXRoLmNlaWwodS9mKSpmLGgsZikpO2Zvcih2YXIgcD1mLmxlbmd0aDtmWzBdPD11OylmLnNoaWZ0KCksLS1wO2Zvcig7ZltwLTFdPmg7KWYucG9wKCksLS1wO3ZhciBkLGc9bmV3IEFycmF5KHArMSk7Zm9yKGk9MDtpPD1wOysraSkoZD1nW2ldPVtdKS54MD1pPjA/ZltpLTFdOnUsZC54MT1pPHA/ZltpXTpoO2ZvcihpPTA7aTxzOysraSl1PD0obz1sW2ldKSYmbzw9aCYmZ1thKGYsbywwLHApXS5wdXNoKG5baV0pO3JldHVybiBnfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZChlKSxuKTp0fSxuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmQoW3RbMF0sdFsxXV0pLG4pOmV9LG4udGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/ZChmLmNhbGwodCkpOmQodCksbik6cn0sbn0sdC50aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdD1wLmNhbGwodCxzKS5zb3J0KGUpLE1hdGguY2VpbCgobi1yKS8oMiooayh0LC43NSktayh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU2NvdHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBNYXRoLmNlaWwoKHItZSkvKDMuNSpjKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU3R1cmdlcz13LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhPXQubGVuZ3RoLGk9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2k8YTspaWYobnVsbCE9KHI9dFtpXSkmJnI+PXIpZm9yKG49cjsrK2k8YTspbnVsbCE9KHI9dFtpXSkmJnI+biYmKG49cil9ZWxzZSBmb3IoOysraTxhOylpZihudWxsIT0ocj1lKHRbaV0saSx0KSkmJnI+PXIpZm9yKG49cjsrK2k8YTspbnVsbCE9KHI9ZSh0W2ldLGksdCkpJiZyPm4mJihuPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoLGE9bixpPS0xLG89MDtpZihudWxsPT1lKWZvcig7KytpPG47KWlzTmFOKHI9cyh0W2ldKSk/LS1hOm8rPXI7ZWxzZSBmb3IoOysraTxuOylpc05hTihyPXMoZSh0W2ldLGksdCkpKT8tLWE6bys9cjtpZihhKXJldHVybiBvL2F9LHQubWVkaWFuPWZ1bmN0aW9uKHQscil7dmFyIG4sYT10Lmxlbmd0aCxpPS0xLG89W107aWYobnVsbD09cilmb3IoOysraTxhOylpc05hTihuPXModFtpXSkpfHxvLnB1c2gobik7ZWxzZSBmb3IoOysraTxhOylpc05hTihuPXMocih0W2ldLGksdCkpKXx8by5wdXNoKG4pO3JldHVybiBrKG8uc29ydChlKSwuNSl9LHQubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixhPXQubGVuZ3RoLGk9LTEsbz0wOysraTxhOylvKz10W2ldLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyk7LS1hPj0wOylmb3IoZT0obj10W2FdKS5sZW5ndGg7LS1lPj0wOylyWy0tb109bltlXTtyZXR1cm4gcn0sdC5taW49VCx0LnBhaXJzPWZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9byk7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGE9dFswXSxpPW5ldyBBcnJheShuPDA/MDpuKTtyPG47KWlbcl09ZShhLGE9dFsrK3JdKTtyZXR1cm4gaX0sdC5wZXJtdXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT10W2Vbcl1dO3JldHVybiBufSx0LnF1YW50aWxlPWssdC5yYW5nZT12LHQuc2Nhbj1mdW5jdGlvbih0LHIpe2lmKG49dC5sZW5ndGgpe3ZhciBuLGEsaT0wLG89MCxzPXRbb107Zm9yKG51bGw9PXImJihyPWUpOysraTxuOykocihhPXRbaV0scyk8MHx8MCE9PXIocyxzKSkmJihzPWEsbz1pKTtyZXR1cm4gMD09PXIocyxzKT9vOnZvaWQgMH19LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGEsaT0obnVsbD09cj90Lmxlbmd0aDpyKS0oZT1udWxsPT1lPzA6K2UpO2k7KWE9TWF0aC5yYW5kb20oKSppLS18MCxuPXRbaStlXSx0W2krZV09dFthK2VdLHRbYStlXT1uO3JldHVybiB0fSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5sZW5ndGgsYT0tMSxpPTA7aWYobnVsbD09ZSlmb3IoOysrYTxuOykocj0rdFthXSkmJihpKz1yKTtlbHNlIGZvcig7KythPG47KShyPStlKHRbYV0sYSx0KSkmJihpKz1yKTtyZXR1cm4gaX0sdC50aWNrcz1mdW5jdGlvbih0LGUscil7dmFyIG4sYSxpLG8scz0tMTtpZihyPStyLCh0PSt0KT09KGU9K2UpJiZyPjApcmV0dXJuW3RdO2lmKChuPWU8dCkmJihhPXQsdD1lLGU9YSksMD09PShvPWIodCxlLHIpKXx8IWlzRmluaXRlKG8pKXJldHVybltdO2lmKG8+MClmb3IodD1NYXRoLmNlaWwodC9vKSxlPU1hdGguZmxvb3IoZS9vKSxpPW5ldyBBcnJheShhPU1hdGguY2VpbChlLXQrMSkpOysrczxhOylpW3NdPSh0K3MpKm87ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqbyksZT1NYXRoLmNlaWwoZSpvKSxpPW5ldyBBcnJheShhPU1hdGguY2VpbCh0LWUrMSkpOysrczxhOylpW3NdPSh0LXMpL287cmV0dXJuIG4mJmkucmV2ZXJzZSgpLGl9LHQudGlja0luY3JlbWVudD1iLHQudGlja1N0ZXA9Xyx0LnRyYW5zcG9zZT1NLHQudmFyaWFuY2U9bCx0LnppcD1mdW5jdGlvbigpe3JldHVybiBNKGFyZ3VtZW50cyl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE1NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSgpe31mdW5jdGlvbiByKHQscil7dmFyIG49bmV3IGU7aWYodCBpbnN0YW5jZW9mIGUpdC5lYWNoKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGEsaT0tMSxvPXQubGVuZ3RoO2lmKG51bGw9PXIpZm9yKDsrK2k8bzspbi5zZXQoaSx0W2ldKTtlbHNlIGZvcig7KytpPG87KW4uc2V0KHIoYT10W2ldLGksdCksYSl9ZWxzZSBpZih0KWZvcih2YXIgcyBpbiB0KW4uc2V0KHMsdFtzXSk7cmV0dXJuIG59ZnVuY3Rpb24gbigpe3JldHVybnt9fWZ1bmN0aW9uIGEodCxlLHIpe3RbZV09cn1mdW5jdGlvbiBpKCl7cmV0dXJuIHIoKX1mdW5jdGlvbiBvKHQsZSxyKXt0LnNldChlLHIpfWZ1bmN0aW9uIHMoKXt9ZS5wcm90b3R5cGU9ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiIkIit0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzWyIkIit0XT1lLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT0iJCIrdDtyZXR1cm4gZSBpbiB0aGlzJiZkZWxldGUgdGhpc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcykiJCI9PT10WzBdJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaChlLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHRoaXNbZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZigiJCI9PT10WzBdKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07dmFyIGw9ci5wcm90b3R5cGU7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPW5ldyBzO2lmKHQgaW5zdGFuY2VvZiBzKXQuZWFjaChmdW5jdGlvbih0KXtyLmFkZCh0KX0pO2Vsc2UgaWYodCl7dmFyIG49LTEsYT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytuPGE7KXIuYWRkKHRbbl0pO2Vsc2UgZm9yKDsrK248YTspci5hZGQoZSh0W25dLG4sdCkpfXJldHVybiByfXMucHJvdG90eXBlPWMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzLGhhczpsLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOmwucmVtb3ZlLGNsZWFyOmwuY2xlYXIsdmFsdWVzOmwua2V5cyxzaXplOmwuc2l6ZSxlbXB0eTpsLmVtcHR5LGVhY2g6bC5lYWNofSx0Lm5lc3Q9ZnVuY3Rpb24oKXt2YXIgdCxlLHMsbD1bXSxjPVtdO2Z1bmN0aW9uIHUobixhLGksbyl7aWYoYT49bC5sZW5ndGgpcmV0dXJuIG51bGwhPXQmJm4uc29ydCh0KSxudWxsIT1lP2Uobik6bjtmb3IodmFyIHMsYyxoLGY9LTEscD1uLmxlbmd0aCxkPWxbYSsrXSxnPXIoKSx2PWkoKTsrK2Y8cDspKGg9Zy5nZXQocz1kKGM9bltmXSkrIiIpKT9oLnB1c2goYyk6Zy5zZXQocyxbY10pO3JldHVybiBnLmVhY2goZnVuY3Rpb24odCxlKXtvKHYsZSx1KHQsYSxpLG8pKX0pLHZ9cmV0dXJuIHM9e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdSh0LDAsbixhKX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiB1KHQsMCxpLG8pfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KHIsbil7aWYoKytuPmwubGVuZ3RoKXJldHVybiByO3ZhciBhLGk9Y1tuLTFdO3JldHVybiBudWxsIT1lJiZuPj1sLmxlbmd0aD9hPXIuZW50cmllcygpOihhPVtdLHIuZWFjaChmdW5jdGlvbihlLHIpe2EucHVzaCh7a2V5OnIsdmFsdWVzOnQoZSxuKX0pfSkpLG51bGwhPWk/YS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkodC5rZXksZS5rZXkpfSk6YX0odSh0LDAsaSxvKSwwKX0sa2V5OmZ1bmN0aW9uKHQpe3JldHVybiBsLnB1c2godCksc30sc29ydEtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGNbbC5sZW5ndGgtMV09dCxzfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKGUpe3JldHVybiB0PWUsc30scm9sbHVwOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQsc319fSx0LnNldD1jLHQubWFwPXIsdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZX0sdC52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx0LmVudHJpZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHtrZXk6cix2YWx1ZTp0W3JdfSk7cmV0dXJuIGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE1NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUscil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gcih0LGUpe3ZhciByPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBuKCl7fXZhciBhPSJcXHMqKFsrLV0/XFxkKylcXHMqIixpPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLG89IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHM9L14jKFswLTlhLWZdezMsOH0pJC8sbD1uZXcgUmVnRXhwKCJecmdiXFwoIitbYSxhLGFdKyJcXCkkIiksYz1uZXcgUmVnRXhwKCJecmdiXFwoIitbbyxvLG9dKyJcXCkkIiksdT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2EsYSxhLGldKyJcXCkkIiksaD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW28sbyxvLGldKyJcXCkkIiksZj1uZXcgUmVnRXhwKCJeaHNsXFwoIitbaSxvLG9dKyJcXCkkIikscD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW2ksbyxvLGldKyJcXCkkIiksZD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBnKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gdigpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIG0odCl7dmFyIGUscjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9cy5leGVjKHQpKT8ocj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1yP3koZSk6Mz09PXI/bmV3IHcoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpOjg9PT1yP25ldyB3KGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1yP25ldyB3KGU+PjEyJjE1fGU+PjgmMjQwLGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoKDE1JmUpPDw0fDE1JmUpLzI1NSk6bnVsbCk6KGU9bC5leGVjKHQpKT9uZXcgdyhlWzFdLGVbMl0sZVszXSwxKTooZT1jLmV4ZWModCkpP25ldyB3KDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLDEpOihlPXUuZXhlYyh0KSk/eChlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1oLmV4ZWModCkpP3goMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9Zi5leGVjKHQpKT9BKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsMSk6KGU9cC5leGVjKHQpKT9BKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6ZC5oYXNPd25Qcm9wZXJ0eSh0KT95KGRbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyB3KE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbmV3IHcodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIHgodCxlLHIsbil7cmV0dXJuIG48PTAmJih0PWU9cj1OYU4pLG5ldyB3KHQsZSxyLG4pfWZ1bmN0aW9uIGIodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBufHwodD1tKHQpKSx0P25ldyB3KCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyB3fWZ1bmN0aW9uIF8odCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2IodCk6bmV3IHcodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIHcodCxlLHIsbil7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIGsoKXtyZXR1cm4iIyIrTSh0aGlzLnIpK00odGhpcy5nKStNKHRoaXMuYil9ZnVuY3Rpb24gVCgpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfWZ1bmN0aW9uIE0odCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBBKHQsZSxyLG4pe3JldHVybiBuPD0wP3Q9ZT1yPU5hTjpyPD0wfHxyPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgTCh0LGUscixuKX1mdW5jdGlvbiBTKHQpe2lmKHQgaW5zdGFuY2VvZiBMKXJldHVybiBuZXcgTCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBufHwodD1tKHQpKSwhdClyZXR1cm4gbmV3IEw7aWYodCBpbnN0YW5jZW9mIEwpcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUscj10LmcvMjU1LGE9dC5iLzI1NSxpPU1hdGgubWluKGUscixhKSxvPU1hdGgubWF4KGUscixhKSxzPU5hTixsPW8taSxjPShvK2kpLzI7cmV0dXJuIGw/KHM9ZT09PW8/KHItYSkvbCs2KihyPGEpOnI9PT1vPyhhLWUpL2wrMjooZS1yKS9sKzQsbC89YzwuNT9vK2k6Mi1vLWkscyo9NjApOmw9Yz4wJiZjPDE/MDpzLG5ldyBMKHMsbCxjLHQub3BhY2l0eSl9ZnVuY3Rpb24gRSh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Uyh0KTpuZXcgTCh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gTCh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gQyh0LGUscil7cmV0dXJuIDI1NSoodDw2MD9lKyhyLWUpKnQvNjA6dDwxODA/cjp0PDI0MD9lKyhyLWUpKigyNDAtdCkvNjA6ZSl9ZShuLG0se2NvcHk6ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6Zyxmb3JtYXRIZXg6Zyxmb3JtYXRIc2w6ZnVuY3Rpb24oKXtyZXR1cm4gUyh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOnYsdG9TdHJpbmc6dn0pLGUodyxfLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IHcodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IHcodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDprLGZvcm1hdEhleDprLGZvcm1hdFJnYjpULHRvU3RyaW5nOlR9KSksZShMLEUscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgTCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBMKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqZSxhPTIqci1uO3JldHVybiBuZXcgdyhDKHQ+PTI0MD90LTI0MDp0KzEyMCxhLG4pLEModCxhLG4pLEModDwxMjA/dCsyNDA6dC0xMjAsYSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisxMDAqKHRoaXMuc3x8MCkrIiUsICIrMTAwKih0aGlzLmx8fDApKyIlIisoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKTt2YXIgUD1NYXRoLlBJLzE4MCxPPTE4MC9NYXRoLlBJLHo9Ljk2NDIyLEk9MSxEPS44MjUyMSxSPTQvMjksRj02LzI5LEI9MypGKkYsTj1GKkYqRjtmdW5jdGlvbiBqKHQpe2lmKHQgaW5zdGFuY2VvZiBVKXJldHVybiBuZXcgVSh0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBaKXJldHVybiBKKHQpO3QgaW5zdGFuY2VvZiB3fHwodD1iKHQpKTt2YXIgZSxyLG49WSh0LnIpLGE9WSh0LmcpLGk9WSh0LmIpLG89cSgoLjIyMjUwNDUqbisuNzE2ODc4NiphKy4wNjA2MTY5KmkpL0kpO3JldHVybiBuPT09YSYmYT09PWk/ZT1yPW86KGU9cSgoLjQzNjA3NDcqbisuMzg1MDY0OSphKy4xNDMwODA0KmkpL3opLHI9cSgoLjAxMzkzMjIqbisuMDk3MTA0NSphKy43MTQxNzMzKmkpL0QpKSxuZXcgVSgxMTYqby0xNiw1MDAqKGUtbyksMjAwKihvLXIpLHQub3BhY2l0eSl9ZnVuY3Rpb24gVih0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/aih0KTpuZXcgVSh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gVSh0LGUscixuKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gcSh0KXtyZXR1cm4gdD5OP01hdGgucG93KHQsMS8zKTp0L0IrUn1mdW5jdGlvbiBIKHQpe3JldHVybiB0PkY/dCp0KnQ6QioodC1SKX1mdW5jdGlvbiBHKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gWSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBXKHQpe2lmKHQgaW5zdGFuY2VvZiBaKXJldHVybiBuZXcgWih0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBVfHwodD1qKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgWihOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpPO3JldHVybiBuZXcgWihlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBYKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9XKHQpOm5ldyBaKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBaKHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBKKHQpe2lmKGlzTmFOKHQuaCkpcmV0dXJuIG5ldyBVKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqUDtyZXR1cm4gbmV3IFUodC5sLE1hdGguY29zKGUpKnQuYyxNYXRoLnNpbihlKSp0LmMsdC5vcGFjaXR5KX1lKFUsVixyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVSh0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFUodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IHcoRygzLjEzMzg1NjEqKGU9eipIKGUpKS0xLjYxNjg2NjcqKHQ9SSpIKHQpKS0uNDkwNjE0Nioocj1EKkgocikpKSxHKC0uOTc4NzY4NCplKzEuOTE2MTQxNSp0Ky4wMzM0NTQqciksRyguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3KnIpLHRoaXMub3BhY2l0eSl9fSkpLGUoWixYLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBaKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWih0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBKKHRoaXMpLnJnYigpfX0pKTt2YXIgSz0tLjE0ODYxLFE9MS43ODI3NywkPS0uMjkyMjcsdHQ9LS45MDY0OSxldD0xLjk3Mjk0LHJ0PWV0KnR0LG50PWV0KlEsYXQ9USokLXR0Kks7ZnVuY3Rpb24gaXQodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBvdClyZXR1cm4gbmV3IG90KHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIHd8fCh0PWIodCkpO3ZhciBlPXQuci8yNTUscj10LmcvMjU1LG49dC5iLzI1NSxhPShhdCpuK3J0KmUtbnQqcikvKGF0K3J0LW50KSxpPW4tYSxvPShldCooci1hKS0kKmkpL3R0LHM9TWF0aC5zcXJ0KG8qbytpKmkpLyhldCphKigxLWEpKSxsPXM/TWF0aC5hdGFuMihvLGkpKk8tMTIwOk5hTjtyZXR1cm4gbmV3IG90KGw8MD9sKzM2MDpsLHMsYSx0Lm9wYWNpdHkpfSh0KTpuZXcgb3QodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIG90KHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1lKG90LGl0LHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IG90KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IG90KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpQLGU9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqZSooMS1lKSxuPU1hdGguY29zKHQpLGE9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyB3KDI1NSooZStyKihLKm4rUSphKSksMjU1KihlK3IqKCQqbit0dCphKSksMjU1KihlK3IqKGV0Km4pKSx0aGlzLm9wYWNpdHkpfX0pKSx0LmNvbG9yPW0sdC5jdWJlaGVsaXg9aXQsdC5ncmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBVKHQsMCwwLG51bGw9PWU/MTplKX0sdC5oY2w9WCx0LmhzbD1FLHQubGFiPVYsdC5sY2g9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1codCk6bmV3IFoocixlLHQsbnVsbD09bj8xOm4pfSx0LnJnYj1fLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjoobj1ufHxzZWxmKS5kMz1uLmQzfHx7fSl9LHt9XSwxNTc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIHIoKXtmb3IodmFyIHQsZT0wLHI9YXJndW1lbnRzLmxlbmd0aCxhPXt9O2U8cjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGEpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7YVt0XT1bXX1yZXR1cm4gbmV3IG4oYSl9ZnVuY3Rpb24gbih0KXt0aGlzLl89dH1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByLG49MCxhPXQubGVuZ3RoO248YTsrK24paWYoKHI9dFtuXSkubmFtZT09PWUpcmV0dXJuIHIudmFsdWV9ZnVuY3Rpb24gaSh0LHIsbil7Zm9yKHZhciBhPTAsaT10Lmxlbmd0aDthPGk7KythKWlmKHRbYV0ubmFtZT09PXIpe3RbYV09ZSx0PXQuc2xpY2UoMCxhKS5jb25jYXQodC5zbGljZShhKzEpKTticmVha31yZXR1cm4gbnVsbCE9biYmdC5wdXNoKHtuYW1lOnIsdmFsdWU6bn0pLHR9bi5wcm90b3R5cGU9ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm4sb246ZnVuY3Rpb24odCxlKXt2YXIgcixuLG89dGhpcy5fLHM9KG49bywodCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihlPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIW4uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOmV9fSkpLGw9LTEsYz1zLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrbDxjOylpZihyPSh0PXNbbF0pLnR5cGUpb1tyXT1pKG9bcl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IociBpbiBvKW9bcl09aShvW3JdLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbDxjOylpZigocj0odD1zW2xdKS50eXBlKSYmKHI9YShvW3JdLHQubmFtZSkpKXJldHVybiByfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBuKHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKHI9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcixuLGE9bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWFbaV09YXJndW1lbnRzW2krMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IoaT0wLHI9KG49dGhpcy5fW3RdKS5sZW5ndGg7aTxyOysraSluW2ldLnZhbHVlLmFwcGx5KGUsYSl9LGFwcGx5OmZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgbj10aGlzLl9bdF0sYT0wLGk9bi5sZW5ndGg7YTxpOysrYSluW2FdLnZhbHVlLmFwcGx5KGUscil9fSx0LmRpc3BhdGNoPXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSgib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTU4OltmdW5jdGlvbih0LGUscil7dmFyIG4sYTtuPXRoaXMsYT1mdW5jdGlvbih0LGUscixuLGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LG89ZnVuY3Rpb24oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9O2Z1bmN0aW9uIHModCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIGModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBoKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC55fXZhciBwPTEwLGQ9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO3QuZm9yY2VDZW50ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcjtmdW5jdGlvbiBuKCl7dmFyIG4sYSxpPXIubGVuZ3RoLG89MCxzPTA7Zm9yKG49MDtuPGk7KytuKW8rPShhPXJbbl0pLngscys9YS55O2ZvcihvPW8vaS10LHM9cy9pLWUsbj0wO248aTsrK24pKGE9cltuXSkueC09byxhLnktPXN9cmV0dXJuIG51bGw9PXQmJih0PTApLG51bGw9PWUmJihlPTApLG4uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXR9LG4ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxuKTp0fSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qsbik6ZX0sbn0sdC5mb3JjZUNvbGxpZGU9ZnVuY3Rpb24odCl7dmFyIHIsbixhPTEsYz0xO2Z1bmN0aW9uIHUoKXtmb3IodmFyIHQsaSx1LGYscCxkLGcsdj1yLmxlbmd0aCxtPTA7bTxjOysrbSlmb3IoaT1lLnF1YWR0cmVlKHIscyxsKS52aXNpdEFmdGVyKGgpLHQ9MDt0PHY7Kyt0KXU9clt0XSxkPW5bdS5pbmRleF0sZz1kKmQsZj11LngrdS52eCxwPXUueSt1LnZ5LGkudmlzaXQoeSk7ZnVuY3Rpb24geSh0LGUscixuLGkpe3ZhciBzPXQuZGF0YSxsPXQucixjPWQrbDtpZighcylyZXR1cm4gZT5mK2N8fG48Zi1jfHxyPnArY3x8aTxwLWM7aWYocy5pbmRleD51LmluZGV4KXt2YXIgaD1mLXMueC1zLnZ4LHY9cC1zLnktcy52eSxtPWgqaCt2KnY7bTxjKmMmJigwPT09aCYmKG0rPShoPW8oKSkqaCksMD09PXYmJihtKz0odj1vKCkpKnYpLG09KGMtKG09TWF0aC5zcXJ0KG0pKSkvbSphLHUudngrPShoKj1tKSooYz0obCo9bCkvKGcrbCkpLHUudnkrPSh2Kj1tKSpjLHMudngtPWgqKGM9MS1jKSxzLnZ5LT12KmMpfX19ZnVuY3Rpb24gaCh0KXtpZih0LmRhdGEpcmV0dXJuIHQucj1uW3QuZGF0YS5pbmRleF07Zm9yKHZhciBlPXQucj0wO2U8NDsrK2UpdFtlXSYmdFtlXS5yPnQuciYmKHQucj10W2VdLnIpfWZ1bmN0aW9uIGYoKXtpZihyKXt2YXIgZSxhLGk9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGkpLGU9MDtlPGk7KytlKWE9cltlXSxuW2EuaW5kZXhdPSt0KGEsZSxyKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWkobnVsbD09dD8xOit0KSksdS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxmKCl9LHUuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCx1KTpjfSx1LnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LHUpOmF9LHUucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6aSgrZSksZigpLHUpOnR9LHV9LHQuZm9yY2VMaW5rPWZ1bmN0aW9uKHQpe3ZhciBlLG4sYSxzLGwsaD1jLGY9ZnVuY3Rpb24odCl7cmV0dXJuIDEvTWF0aC5taW4oc1t0LnNvdXJjZS5pbmRleF0sc1t0LnRhcmdldC5pbmRleF0pfSxwPWkoMzApLGQ9MTtmdW5jdGlvbiBnKHIpe2Zvcih2YXIgYT0wLGk9dC5sZW5ndGg7YTxkOysrYSlmb3IodmFyIHMsYyx1LGgsZixwLGcsdj0wO3Y8aTsrK3YpYz0ocz10W3ZdKS5zb3VyY2UsaD0odT1zLnRhcmdldCkueCt1LnZ4LWMueC1jLnZ4fHxvKCksZj11LnkrdS52eS1jLnktYy52eXx8bygpLGgqPXA9KChwPU1hdGguc3FydChoKmgrZipmKSktblt2XSkvcCpyKmVbdl0sZio9cCx1LnZ4LT1oKihnPWxbdl0pLHUudnktPWYqZyxjLnZ4Kz1oKihnPTEtZyksYy52eSs9ZipnfWZ1bmN0aW9uIHYoKXtpZihhKXt2YXIgaSxvLGM9YS5sZW5ndGgsZj10Lmxlbmd0aCxwPXIubWFwKGEsaCk7Zm9yKGk9MCxzPW5ldyBBcnJheShjKTtpPGY7KytpKShvPXRbaV0pLmluZGV4PWksIm9iamVjdCIhPXR5cGVvZiBvLnNvdXJjZSYmKG8uc291cmNlPXUocCxvLnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2Ygby50YXJnZXQmJihvLnRhcmdldD11KHAsby50YXJnZXQpKSxzW28uc291cmNlLmluZGV4XT0oc1tvLnNvdXJjZS5pbmRleF18fDApKzEsc1tvLnRhcmdldC5pbmRleF09KHNbby50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihpPTAsbD1uZXcgQXJyYXkoZik7aTxmOysraSlvPXRbaV0sbFtpXT1zW28uc291cmNlLmluZGV4XS8oc1tvLnNvdXJjZS5pbmRleF0rc1tvLnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KGYpLG0oKSxuPW5ldyBBcnJheShmKSx5KCl9fWZ1bmN0aW9uIG0oKXtpZihhKWZvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOysrcillW3JdPStmKHRbcl0scix0KX1mdW5jdGlvbiB5KCl7aWYoYSlmb3IodmFyIGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpbltlXT0rcCh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxnLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7YT10LHYoKX0sZy5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHYoKSxnKTp0fSxnLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQsZyk6aH0sZy5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0LGcpOmR9LGcuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDppKCt0KSxtKCksZyk6Zn0sZy5kaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmkoK3QpLHkoKSxnKTpwfSxnfSx0LmZvcmNlTWFueUJvZHk9ZnVuY3Rpb24oKXt2YXIgdCxyLG4sYSxzPWkoLTMwKSxsPTEsYz0xLzAsdT0uODE7ZnVuY3Rpb24gcChhKXt2YXIgaSxvPXQubGVuZ3RoLHM9ZS5xdWFkdHJlZSh0LGgsZikudmlzaXRBZnRlcihnKTtmb3Iobj1hLGk9MDtpPG87KytpKXI9dFtpXSxzLnZpc2l0KHYpfWZ1bmN0aW9uIGQoKXtpZih0KXt2YXIgZSxyLG49dC5sZW5ndGg7Zm9yKGE9bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKXI9dFtlXSxhW3IuaW5kZXhdPStzKHIsZSx0KX19ZnVuY3Rpb24gZyh0KXt2YXIgZSxyLG4saSxvLHM9MCxsPTA7aWYodC5sZW5ndGgpe2ZvcihuPWk9bz0wO288NDsrK28pKGU9dFtvXSkmJihyPU1hdGguYWJzKGUudmFsdWUpKSYmKHMrPWUudmFsdWUsbCs9cixuKz1yKmUueCxpKz1yKmUueSk7dC54PW4vbCx0Lnk9aS9sfWVsc2V7KGU9dCkueD1lLmRhdGEueCxlLnk9ZS5kYXRhLnk7ZG97cys9YVtlLmRhdGEuaW5kZXhdfXdoaWxlKGU9ZS5uZXh0KX10LnZhbHVlPXN9ZnVuY3Rpb24gdih0LGUsaSxzKXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgaD10Lngtci54LGY9dC55LXIueSxwPXMtZSxkPWgqaCtmKmY7aWYocCpwL3U8ZClyZXR1cm4gZDxjJiYoMD09PWgmJihkKz0oaD1vKCkpKmgpLDA9PT1mJiYoZCs9KGY9bygpKSpmKSxkPGwmJihkPU1hdGguc3FydChsKmQpKSxyLnZ4Kz1oKnQudmFsdWUqbi9kLHIudnkrPWYqdC52YWx1ZSpuL2QpLCEwO2lmKCEodC5sZW5ndGh8fGQ+PWMpKXsodC5kYXRhIT09cnx8dC5uZXh0KSYmKDA9PT1oJiYoZCs9KGg9bygpKSpoKSwwPT09ZiYmKGQrPShmPW8oKSkqZiksZDxsJiYoZD1NYXRoLnNxcnQobCpkKSkpO2Rve3QuZGF0YSE9PXImJihwPWFbdC5kYXRhLmluZGV4XSpuL2Qsci52eCs9aCpwLHIudnkrPWYqcCl9d2hpbGUodD10Lm5leHQpfX1yZXR1cm4gcC5pbml0aWFsaXplPWZ1bmN0aW9uKGUpe3Q9ZSxkKCl9LHAuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDppKCt0KSxkKCkscCk6c30scC5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10KnQscCk6TWF0aC5zcXJ0KGwpfSxwLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQqdCxwKTpNYXRoLnNxcnQoYyl9LHAudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCp0LHApOk1hdGguc3FydCh1KX0scH0sdC5mb3JjZVJhZGlhbD1mdW5jdGlvbih0LGUscil7dmFyIG4sYSxvLHM9aSguMSk7ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGk9MCxzPW4ubGVuZ3RoO2k8czsrK2kpe3ZhciBsPW5baV0sYz1sLngtZXx8MWUtNix1PWwueS1yfHwxZS02LGg9TWF0aC5zcXJ0KGMqYyt1KnUpLGY9KG9baV0taCkqYVtpXSp0L2g7bC52eCs9YypmLGwudnkrPXUqZn19ZnVuY3Rpb24gYygpe2lmKG4pe3ZhciBlLHI9bi5sZW5ndGg7Zm9yKGE9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGU9MDtlPHI7KytlKW9bZV09K3QobltlXSxlLG4pLGFbZV09aXNOYU4ob1tlXSk/MDorcyhuW2VdLGUsbil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1pKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09ciYmKHI9MCksbC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dCxjKCl9LGwuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDppKCt0KSxjKCksbCk6c30sbC5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTppKCtlKSxjKCksbCk6dH0sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGwpOmV9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxsKTpyfSxsfSx0LmZvcmNlU2ltdWxhdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxpPTEsbz0uMDAxLHM9MS1NYXRoLnBvdyhvLDEvMzAwKSxsPTAsYz0uNix1PXIubWFwKCksaD1hLnRpbWVyKGcpLGY9bi5kaXNwYXRjaCgidGljayIsImVuZCIpO2Z1bmN0aW9uIGcoKXt2KCksZi5jYWxsKCJ0aWNrIixlKSxpPG8mJihoLnN0b3AoKSxmLmNhbGwoImVuZCIsZSkpfWZ1bmN0aW9uIHYoKXt2YXIgZSxyLG49dC5sZW5ndGg7Zm9yKGkrPShsLWkpKnMsdS5lYWNoKGZ1bmN0aW9uKHQpe3QoaSl9KSxlPTA7ZTxuOysrZSludWxsPT0ocj10W2VdKS5meD9yLngrPXIudngqPWM6KHIueD1yLmZ4LHIudng9MCksbnVsbD09ci5meT9yLnkrPXIudnkqPWM6KHIueT1yLmZ5LHIudnk9MCl9ZnVuY3Rpb24gbSgpe2Zvcih2YXIgZSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKXtpZigoZT10W3JdKS5pbmRleD1yLGlzTmFOKGUueCl8fGlzTmFOKGUueSkpe3ZhciBhPXAqTWF0aC5zcXJ0KHIpLGk9cipkO2UueD1hKk1hdGguY29zKGkpLGUueT1hKk1hdGguc2luKGkpfShpc05hTihlLnZ4KXx8aXNOYU4oZS52eSkpJiYoZS52eD1lLnZ5PTApfX1mdW5jdGlvbiB5KGUpe3JldHVybiBlLmluaXRpYWxpemUmJmUuaW5pdGlhbGl6ZSh0KSxlfXJldHVybiBudWxsPT10JiYodD1bXSksbSgpLGU9e3RpY2s6dixyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGgucmVzdGFydChnKSxlfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGguc3RvcCgpLGV9LG5vZGVzOmZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXIsbSgpLHUuZWFjaCh5KSxlKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxlKTppfSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxlKTpvfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGUpOitzfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rdCxlKTpsfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPTEtdCxlKToxLWN9LGZvcmNlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09cj91LnJlbW92ZSh0KTp1LnNldCh0LHkocikpLGUpOnUuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKGUscixuKXt2YXIgYSxpLG8scyxsLGM9MCx1PXQubGVuZ3RoO2ZvcihudWxsPT1uP249MS8wOm4qPW4sYz0wO2M8dTsrK2MpKG89KGE9ZS0ocz10W2NdKS54KSphKyhpPXItcy55KSppKTxuJiYobD1zLG49byk7cmV0dXJuIGx9LG9uOmZ1bmN0aW9uKHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oZi5vbih0LHIpLGUpOmYub24odCl9fX0sdC5mb3JjZVg9ZnVuY3Rpb24odCl7dmFyIGUscixuLGE9aSguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGEsaT0wLG89ZS5sZW5ndGg7aTxvOysraSkoYT1lW2ldKS52eCs9KG5baV0tYS54KSpyW2ldKnR9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciBpLG89ZS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLG49bmV3IEFycmF5KG8pLGk9MDtpPG87KytpKXJbaV09aXNOYU4obltpXT0rdChlW2ldLGksZSkpPzA6K2EoZVtpXSxpLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aShudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmkoK3QpLHMoKSxvKTphfSxvLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTppKCtlKSxzKCksbyk6dH0sb30sdC5mb3JjZVk9ZnVuY3Rpb24odCl7dmFyIGUscixuLGE9aSguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGEsaT0wLG89ZS5sZW5ndGg7aTxvOysraSkoYT1lW2ldKS52eSs9KG5baV0tYS55KSpyW2ldKnR9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciBpLG89ZS5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLG49bmV3IEFycmF5KG8pLGk9MDtpPG87KytpKXJbaV09aXNOYU4obltpXT0rdChlW2ldLGksZSkpPzA6K2EoZVtpXSxpLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aShudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmkoK3QpLHMoKSxvKTphfSxvLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTppKCtlKSxzKCksbyk6dH0sb30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9hKHIsdCgiZDMtcXVhZHRyZWUiKSx0KCJkMy1jb2xsZWN0aW9uIiksdCgiZDMtZGlzcGF0Y2giKSx0KCJkMy10aW1lciIpKTphKG4uZDM9bi5kM3x8e30sbi5kMyxuLmQzLG4uZDMsbi5kMyl9LHsiZDMtY29sbGVjdGlvbiI6MTU1LCJkMy1kaXNwYXRjaCI6MTU3LCJkMy1xdWFkdHJlZSI6MTYyLCJkMy10aW1lciI6MTY0fV0sMTU5OltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gdCtlLnh9ZnVuY3Rpb24gbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUueSl9ZnVuY3Rpb24gYSh0KXt2YXIgZT0wLHI9dC5jaGlsZHJlbixuPXImJnIubGVuZ3RoO2lmKG4pZm9yKDstLW4+PTA7KWUrPXJbbl0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIGkodCxlKXt2YXIgcixuLGEsaSxzLHU9bmV3IGModCksaD0rdC52YWx1ZSYmKHUudmFsdWU9dC52YWx1ZSksZj1bdV07Zm9yKG51bGw9PWUmJihlPW8pO3I9Zi5wb3AoKTspaWYoaCYmKHIudmFsdWU9K3IuZGF0YS52YWx1ZSksKGE9ZShyLmRhdGEpKSYmKHM9YS5sZW5ndGgpKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzKSxpPXMtMTtpPj0wOy0taSlmLnB1c2gobj1yLmNoaWxkcmVuW2ldPW5ldyBjKGFbaV0pKSxuLnBhcmVudD1yLG4uZGVwdGg9ci5kZXB0aCsxO3JldHVybiB1LmVhY2hCZWZvcmUobCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBzKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBsKHQpe3ZhciBlPTA7ZG97dC5oZWlnaHQ9ZX13aGlsZSgodD10LnBhcmVudCkmJnQuaGVpZ2h0PCsrZSl9ZnVuY3Rpb24gYyh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1jLnByb3RvdHlwZT1pLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Yyxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihhKX0sZWFjaDpmdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxpPXRoaXMsbz1baV07ZG97Zm9yKGU9by5yZXZlcnNlKCksbz1bXTtpPWUucG9wKCk7KWlmKHQoaSkscj1pLmNoaWxkcmVuKWZvcihuPTAsYT1yLmxlbmd0aDtuPGE7KytuKW8ucHVzaChyW25dKX13aGlsZShvLmxlbmd0aCk7cmV0dXJuIHRoaXN9LGVhY2hBZnRlcjpmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGE9dGhpcyxpPVthXSxvPVtdO2E9aS5wb3AoKTspaWYoby5wdXNoKGEpLGU9YS5jaGlsZHJlbilmb3Iocj0wLG49ZS5sZW5ndGg7cjxuOysrcilpLnB1c2goZVtyXSk7Zm9yKDthPW8ucG9wKCk7KXQoYSk7cmV0dXJuIHRoaXN9LGVhY2hCZWZvcmU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj10aGlzLGE9W25dO249YS5wb3AoKTspaWYodChuKSxlPW4uY2hpbGRyZW4pZm9yKHI9ZS5sZW5ndGgtMTtyPj0wOy0tcilhLnB1c2goZVtyXSk7cmV0dXJuIHRoaXN9LHN1bTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24oZSl7Zm9yKHZhciByPSt0KGUuZGF0YSl8fDAsbj1lLmNoaWxkcmVuLGE9biYmbi5sZW5ndGg7LS1hPj0wOylyKz1uW2FdLnZhbHVlO2UudmFsdWU9cn0pfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5zb3J0KHQpfSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciByPXQuYW5jZXN0b3JzKCksbj1lLmFuY2VzdG9ycygpLGE9bnVsbDtmb3IodD1yLnBvcCgpLGU9bi5wb3AoKTt0PT09ZTspYT10LHQ9ci5wb3AoKSxlPW4ucG9wKCk7cmV0dXJuIGF9KGUsdCksbj1bZV07ZSE9PXI7KWU9ZS5wYXJlbnQsbi5wdXNoKGUpO2Zvcih2YXIgYT1uLmxlbmd0aDt0IT09cjspbi5zcGxpY2UoYSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIG59LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pLHR9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSksdH0sbGlua3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihyKXtyIT09dCYmZS5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzKS5lYWNoQmVmb3JlKHMpfX07dmFyIHU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIGgodCl7Zm9yKHZhciBlLHIsbj0wLGE9KHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj10Lmxlbmd0aDtuOylyPU1hdGgucmFuZG9tKCkqbi0tfDAsZT10W25dLHRbbl09dFtyXSx0W3JdPWU7cmV0dXJuIHR9KHUuY2FsbCh0KSkpLmxlbmd0aCxpPVtdO248YTspZT10W25dLHImJmQocixlKT8rK246KHI9dihpPWYoaSxlKSksbj0wKTtyZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSl7dmFyIHIsbjtpZihnKGUsdCkpcmV0dXJuW2VdO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3IpaWYocChlLHRbcl0pJiZnKG0odFtyXSxlKSx0KSlyZXR1cm5bdFtyXSxlXTtmb3Iocj0wO3I8dC5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248dC5sZW5ndGg7KytuKWlmKHAobSh0W3JdLHRbbl0pLGUpJiZwKG0odFtyXSxlKSx0W25dKSYmcChtKHRbbl0sZSksdFtyXSkmJmcoeSh0W3JdLHRbbl0sZSksdCkpcmV0dXJuW3Rbcl0sdFtuXSxlXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPXQuci1lLnIsbj1lLngtdC54LGE9ZS55LXQueTtyZXR1cm4gcjwwfHxyKnI8bipuK2EqYX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5yLWUucisxZS02LG49ZS54LXQueCxhPWUueS10Lnk7cmV0dXJuIHI+MCYmcipyPm4qbithKmF9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWlmKCFkKHQsZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gdih0KXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm57eDooZT10WzBdKS54LHk6ZS55LHI6ZS5yfTtjYXNlIDI6cmV0dXJuIG0odFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIHkodFswXSx0WzFdLHRbMl0pfXZhciBlfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10Lngsbj10LnksYT10LnIsaT1lLngsbz1lLnkscz1lLnIsbD1pLXIsYz1vLW4sdT1zLWEsaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIraStsL2gqdSkvMix5OihuK28rYy9oKnUpLzIscjooaCthK3MpLzJ9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXQueCxhPXQueSxpPXQucixvPWUueCxzPWUueSxsPWUucixjPXIueCx1PXIueSxoPXIucixmPW4tbyxwPW4tYyxkPWEtcyxnPWEtdSx2PWwtaSxtPWgtaSx5PW4qbithKmEtaSppLHg9eS1vKm8tcypzK2wqbCxiPXktYypjLXUqdStoKmgsXz1wKmQtZipnLHc9KGQqYi1nKngpLygyKl8pLW4saz0oZyp2LWQqbSkvXyxUPShwKngtZipiKS8oMipfKS1hLE09KGYqbS1wKnYpL18sQT1rKmsrTSpNLTEsUz0yKihpK3cqaytUKk0pLEU9dyp3K1QqVC1pKmksTD0tKEE/KFMrTWF0aC5zcXJ0KFMqUy00KkEqRSkpLygyKkEpOkUvUyk7cmV0dXJue3g6bit3K2sqTCx5OmErVCtNKkwscjpMfX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbixhLGksbyxzPXQueC1lLngsbD10LnktZS55LGM9cypzK2wqbDtjPyhhPWUucityLnIsYSo9YSxvPXQucityLnIsYT4obyo9byk/KG49KGMrby1hKS8oMipjKSxpPU1hdGguc3FydChNYXRoLm1heCgwLG8vYy1uKm4pKSxyLng9dC54LW4qcy1pKmwsci55PXQueS1uKmwraSpzKToobj0oYythLW8pLygyKmMpLGk9TWF0aC5zcXJ0KE1hdGgubWF4KDAsYS9jLW4qbikpLHIueD1lLngrbipzLWkqbCxyLnk9ZS55K24qbCtpKnMpKTooci54PWUueCtyLnIsci55PWUueSl9ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQucitlLnItMWUtNixuPWUueC10LngsYT1lLnktdC55O3JldHVybiByPjAmJnIqcj5uKm4rYSphfWZ1bmN0aW9uIF8odCl7dmFyIGU9dC5fLHI9dC5uZXh0Ll8sbj1lLnIrci5yLGE9KGUueCpyLnIrci54KmUucikvbixpPShlLnkqci5yK3IueSplLnIpL247cmV0dXJuIGEqYStpKml9ZnVuY3Rpb24gdyh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gayh0KXtpZighKGE9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBlLHIsbixhLGksbyxzLGwsYyx1LGY7aWYoKGU9dFswXSkueD0wLGUueT0wLCEoYT4xKSlyZXR1cm4gZS5yO2lmKHI9dFsxXSxlLng9LXIucixyLng9ZS5yLHIueT0wLCEoYT4yKSlyZXR1cm4gZS5yK3Iucjt4KHIsZSxuPXRbMl0pLGU9bmV3IHcoZSkscj1uZXcgdyhyKSxuPW5ldyB3KG4pLGUubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PWUucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz1lO3Q6Zm9yKHM9MztzPGE7KytzKXt4KGUuXyxyLl8sbj10W3NdKSxuPW5ldyB3KG4pLGw9ci5uZXh0LGM9ZS5wcmV2aW91cyx1PXIuXy5yLGY9ZS5fLnI7ZG97aWYodTw9Zil7aWYoYihsLl8sbi5fKSl7cj1sLGUubmV4dD1yLHIucHJldmlvdXM9ZSwtLXM7Y29udGludWUgdH11Kz1sLl8ucixsPWwubmV4dH1lbHNle2lmKGIoYy5fLG4uXykpeyhlPWMpLm5leHQ9cixyLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9Zis9Yy5fLnIsYz1jLnByZXZpb3VzfX13aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz1lLG4ubmV4dD1yLGUubmV4dD1yLnByZXZpb3VzPXI9bixpPV8oZSk7KG49bi5uZXh0KSE9PXI7KShvPV8obikpPGkmJihlPW4saT1vKTtyPWUubmV4dH1mb3IoZT1bci5fXSxuPXI7KG49bi5uZXh0KSE9PXI7KWUucHVzaChuLl8pO2ZvcihuPWgoZSkscz0wO3M8YTsrK3MpKGU9dFtzXSkueC09bi54LGUueS09bi55O3JldHVybiBuLnJ9ZnVuY3Rpb24gVCh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHR9ZnVuY3Rpb24gTSgpe3JldHVybiAwfWZ1bmN0aW9uIEEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIFModCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiBFKHQpe3JldHVybiBmdW5jdGlvbihlKXtlLmNoaWxkcmVufHwoZS5yPU1hdGgubWF4KDAsK3QoZSl8fDApKX19ZnVuY3Rpb24gTCh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtpZihuPXIuY2hpbGRyZW4pe3ZhciBuLGEsaSxvPW4ubGVuZ3RoLHM9dChyKSplfHwwO2lmKHMpZm9yKGE9MDthPG87KythKW5bYV0ucis9cztpZihpPWsobikscylmb3IoYT0wO2E8bzsrK2EpblthXS5yLT1zO3Iucj1pK3N9fX1mdW5jdGlvbiBDKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1lLnBhcmVudDtlLnIqPXQsciYmKGUueD1yLngrdCplLngsZS55PXIueSt0KmUueSl9fWZ1bmN0aW9uIFAodCl7dC54MD1NYXRoLnJvdW5kKHQueDApLHQueTA9TWF0aC5yb3VuZCh0LnkwKSx0LngxPU1hdGgucm91bmQodC54MSksdC55MT1NYXRoLnJvdW5kKHQueTEpfWZ1bmN0aW9uIE8odCxlLHIsbixhKXtmb3IodmFyIGksbz10LmNoaWxkcmVuLHM9LTEsbD1vLmxlbmd0aCxjPXQudmFsdWUmJihuLWUpL3QudmFsdWU7KytzPGw7KShpPW9bc10pLnkwPXIsaS55MT1hLGkueDA9ZSxpLngxPWUrPWkudmFsdWUqY312YXIgej0iJCIsST17ZGVwdGg6LTF9LEQ9e307ZnVuY3Rpb24gUih0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBGKHQpe3JldHVybiB0LnBhcmVudElkfWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gTih0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIGoodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lW2UubGVuZ3RoLTFdOnQudH1mdW5jdGlvbiBWKHQsZSxyKXt2YXIgbj1yLyhlLmktdC5pKTtlLmMtPW4sZS5zKz1yLHQuYys9bixlLnorPXIsZS5tKz1yfWZ1bmN0aW9uIFUodCxlLHIpe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOnJ9ZnVuY3Rpb24gcSh0LGUpe3RoaXMuXz10LHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1udWxsLHRoaXMuQT1udWxsLHRoaXMuYT10aGlzLHRoaXMuej0wLHRoaXMubT0wLHRoaXMuYz0wLHRoaXMucz0wLHRoaXMudD1udWxsLHRoaXMuaT1lfWZ1bmN0aW9uIEgodCxlLHIsbixhKXtmb3IodmFyIGksbz10LmNoaWxkcmVuLHM9LTEsbD1vLmxlbmd0aCxjPXQudmFsdWUmJihhLXIpL3QudmFsdWU7KytzPGw7KShpPW9bc10pLngwPWUsaS54MT1uLGkueTA9cixpLnkxPXIrPWkudmFsdWUqY31xLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKTt2YXIgRz0oMStNYXRoLnNxcnQoNSkpLzI7ZnVuY3Rpb24gWSh0LGUscixuLGEsaSl7Zm9yKHZhciBvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbT1bXSx5PWUuY2hpbGRyZW4seD0wLGI9MCxfPXkubGVuZ3RoLHc9ZS52YWx1ZTt4PF87KXtsPWEtcixjPWktbjtkb3t1PXlbYisrXS52YWx1ZX13aGlsZSghdSYmYjxfKTtmb3IoaD1mPXUsdj11KnUqKGc9TWF0aC5tYXgoYy9sLGwvYykvKHcqdCkpLGQ9TWF0aC5tYXgoZi92LHYvaCk7YjxfOysrYil7aWYodSs9cz15W2JdLnZhbHVlLHM8aCYmKGg9cykscz5mJiYoZj1zKSx2PXUqdSpnLChwPU1hdGgubWF4KGYvdix2L2gpKT5kKXt1LT1zO2JyZWFrfWQ9cH1tLnB1c2gobz17dmFsdWU6dSxkaWNlOmw8YyxjaGlsZHJlbjp5LnNsaWNlKHgsYil9KSxvLmRpY2U/TyhvLHIsbixhLHc/bis9Yyp1L3c6aSk6SChvLHIsbix3P3IrPWwqdS93OmEsaSksdy09dSx4PWJ9cmV0dXJuIG19dmFyIFc9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQscixuLGEsaSl7WShlLHQscixuLGEsaSl9cmV0dXJuIHIucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0scn0oRyksWD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCxyLG4sYSxpKXtpZigobz10Ll9zcXVhcmlmeSkmJm8ucmF0aW89PT1lKWZvcih2YXIgbyxzLGwsYyx1LGg9LTEsZj1vLmxlbmd0aCxwPXQudmFsdWU7KytoPGY7KXtmb3IobD0ocz1vW2hdKS5jaGlsZHJlbixjPXMudmFsdWU9MCx1PWwubGVuZ3RoO2M8dTsrK2Mpcy52YWx1ZSs9bFtjXS52YWx1ZTtzLmRpY2U/TyhzLHIsbixhLG4rPShpLW4pKnMudmFsdWUvcCk6SChzLHIsbixyKz0oYS1yKSpzLnZhbHVlL3AsaSkscC09cy52YWx1ZX1lbHNlIHQuX3NxdWFyaWZ5PW89WShlLHQscixuLGEsaSksby5yYXRpbz1lfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LHJ9KEcpO3QuY2x1c3Rlcj1mdW5jdGlvbigpe3ZhciB0PWUsYT0xLGk9MSxvPSExO2Z1bmN0aW9uIHMoZSl7dmFyIHMsbD0wO2UuZWFjaEFmdGVyKGZ1bmN0aW9uKGUpe3ZhciBhPWUuY2hpbGRyZW47YT8oZS54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShyLDApL3QubGVuZ3RofShhKSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIDErdC5yZWR1Y2UobiwwKX0oYSkpOihlLng9cz9sKz10KGUscyk6MCxlLnk9MCxzPWUpfSk7dmFyIGM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlO2U9dC5jaGlsZHJlbjspdD1lWzBdO3JldHVybiB0fShlKSx1PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdH0oZSksaD1jLngtdChjLHUpLzIsZj11LngrdCh1LGMpLzI7cmV0dXJuIGUuZWFjaEFmdGVyKG8/ZnVuY3Rpb24odCl7dC54PSh0LngtZS54KSphLHQueT0oZS55LXQueSkqaX06ZnVuY3Rpb24odCl7dC54PSh0LngtaCkvKGYtaCkqYSx0Lnk9KDEtKGUueT90LnkvZS55OjEpKSppfSl9cmV0dXJuIHMuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHMpOnR9LHMuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0hMSxhPSt0WzBdLGk9K3RbMV0scyk6bz9udWxsOlthLGldfSxzLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEwLGE9K3RbMF0saT0rdFsxXSxzKTpvP1thLGldOm51bGx9LHN9LHQuaGllcmFyY2h5PWksdC5wYWNrPWZ1bmN0aW9uKCl7dmFyIHQ9bnVsbCxlPTEscj0xLG49TTtmdW5jdGlvbiBhKGEpe3JldHVybiBhLng9ZS8yLGEueT1yLzIsdD9hLmVhY2hCZWZvcmUoRSh0KSkuZWFjaEFmdGVyKEwobiwuNSkpLmVhY2hCZWZvcmUoQygxKSk6YS5lYWNoQmVmb3JlKEUoUykpLmVhY2hBZnRlcihMKE0sMSkpLmVhY2hBZnRlcihMKG4sYS5yL01hdGgubWluKGUscikpKS5lYWNoQmVmb3JlKEMoTWF0aC5taW4oZSxyKS8oMiphLnIpKSksYX1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bnVsbD09KHI9ZSk/bnVsbDpUKHIpLGEpOnQ7dmFyIHJ9LGEuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0WzFdLGEpOltlLHJdfSxhLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBKCt0KSxhKTpufSxhfSx0LnBhY2tFbmNsb3NlPWgsdC5wYWNrU2libGluZ3M9ZnVuY3Rpb24odCl7cmV0dXJuIGsodCksdH0sdC5wYXJ0aXRpb249ZnVuY3Rpb24oKXt2YXIgdD0xLGU9MSxyPTAsbj0hMTtmdW5jdGlvbiBhKGEpe3ZhciBpPWEuaGVpZ2h0KzE7cmV0dXJuIGEueDA9YS55MD1yLGEueDE9dCxhLnkxPWUvaSxhLmVhY2hCZWZvcmUoZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7bi5jaGlsZHJlbiYmTyhuLG4ueDAsdCoobi5kZXB0aCsxKS9lLG4ueDEsdCoobi5kZXB0aCsyKS9lKTt2YXIgYT1uLngwLGk9bi55MCxvPW4ueDEtcixzPW4ueTEtcjtvPGEmJihhPW89KGErbykvMiksczxpJiYoaT1zPShpK3MpLzIpLG4ueDA9YSxuLnkwPWksbi54MT1vLG4ueTE9c319KGUsaSkpLG4mJmEuZWFjaEJlZm9yZShQKSxhfXJldHVybiBhLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhdCxhKTpufSxhLnNpemU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K3JbMF0sZT0rclsxXSxhKTpbdCxlXX0sYS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LGEpOnJ9LGF9LHQuc3RyYXRpZnk9ZnVuY3Rpb24oKXt2YXIgdD1SLGU9RjtmdW5jdGlvbiByKHIpe3ZhciBuLGEsaSxvLHMsdSxoLGY9ci5sZW5ndGgscD1uZXcgQXJyYXkoZiksZD17fTtmb3IoYT0wO2E8ZjsrK2Epbj1yW2FdLHM9cFthXT1uZXcgYyhuKSxudWxsIT0odT10KG4sYSxyKSkmJih1Kz0iIikmJihkW2g9eisocy5pZD11KV09aCBpbiBkP0Q6cyk7Zm9yKGE9MDthPGY7KythKWlmKHM9cFthXSxudWxsIT0odT1lKHJbYV0sYSxyKSkmJih1Kz0iIikpe2lmKCEobz1kW3ordV0pKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit1KTtpZihvPT09RCl0aHJvdyBuZXcgRXJyb3IoImFtYmlndW91czogIit1KTtvLmNoaWxkcmVuP28uY2hpbGRyZW4ucHVzaChzKTpvLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1vfWVsc2V7aWYoaSl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIHJvb3RzIik7aT1zfWlmKCFpKXRocm93IG5ldyBFcnJvcigibm8gcm9vdCIpO2lmKGkucGFyZW50PUksaS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLWZ9KS5lYWNoQmVmb3JlKGwpLGkucGFyZW50PW51bGwsZj4wKXRocm93IG5ldyBFcnJvcigiY3ljbGUiKTtyZXR1cm4gaX1yZXR1cm4gci5pZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1UKGUpLHIpOnR9LHIucGFyZW50SWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VCh0KSxyKTplfSxyfSx0LnRyZWU9ZnVuY3Rpb24oKXt2YXIgdD1CLGU9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGEoYSl7dmFyIGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixhLGksbz1uZXcgcSh0LDApLHM9W29dO2U9cy5wb3AoKTspaWYobj1lLl8uY2hpbGRyZW4pZm9yKGUuY2hpbGRyZW49bmV3IEFycmF5KGk9bi5sZW5ndGgpLGE9aS0xO2E+PTA7LS1hKXMucHVzaChyPWUuY2hpbGRyZW5bYV09bmV3IHEoblthXSxhKSksci5wYXJlbnQ9ZTtyZXR1cm4oby5wYXJlbnQ9bmV3IHEobnVsbCwwKSkuY2hpbGRyZW49W29dLG99KGEpO2lmKGwuZWFjaEFmdGVyKGkpLGwucGFyZW50Lm09LWwueixsLmVhY2hCZWZvcmUobyksbilhLmVhY2hCZWZvcmUocyk7ZWxzZXt2YXIgYz1hLHU9YSxoPWE7YS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QueDxjLngmJihjPXQpLHQueD51LngmJih1PXQpLHQuZGVwdGg+aC5kZXB0aCYmKGg9dCl9KTt2YXIgZj1jPT09dT8xOnQoYyx1KS8yLHA9Zi1jLngsZD1lLyh1LngrZitwKSxnPXIvKGguZGVwdGh8fDEpO2EuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0Lng9KHQueCtwKSpkLHQueT10LmRlcHRoKmd9KX1yZXR1cm4gYX1mdW5jdGlvbiBpKGUpe3ZhciByPWUuY2hpbGRyZW4sbj1lLnBhcmVudC5jaGlsZHJlbixhPWUuaT9uW2UuaS0xXTpudWxsO2lmKHIpeyFmdW5jdGlvbih0KXtmb3IodmFyIGUscj0wLG49MCxhPXQuY2hpbGRyZW4saT1hLmxlbmd0aDstLWk+PTA7KShlPWFbaV0pLnorPXIsZS5tKz1yLHIrPWUucysobis9ZS5jKX0oZSk7dmFyIGk9KHJbMF0ueityW3IubGVuZ3RoLTFdLnopLzI7YT8oZS56PWEueit0KGUuXyxhLl8pLGUubT1lLnotaSk6ZS56PWl9ZWxzZSBhJiYoZS56PWEueit0KGUuXyxhLl8pKTtlLnBhcmVudC5BPWZ1bmN0aW9uKGUscixuKXtpZihyKXtmb3IodmFyIGEsaT1lLG89ZSxzPXIsbD1pLnBhcmVudC5jaGlsZHJlblswXSxjPWkubSx1PW8ubSxoPXMubSxmPWwubTtzPWoocyksaT1OKGkpLHMmJmk7KWw9TihsKSwobz1qKG8pKS5hPWUsKGE9cy56K2gtaS56LWMrdChzLl8saS5fKSk+MCYmKFYoVShzLGUsbiksZSxhKSxjKz1hLHUrPWEpLGgrPXMubSxjKz1pLm0sZis9bC5tLHUrPW8ubTtzJiYhaihvKSYmKG8udD1zLG8ubSs9aC11KSxpJiYhTihsKSYmKGwudD1pLGwubSs9Yy1mLG49ZSl9cmV0dXJuIG59KGUsYSxlLnBhcmVudC5BfHxuWzBdKX1mdW5jdGlvbiBvKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBzKHQpe3QueCo9ZSx0Lnk9dC5kZXB0aCpyfXJldHVybiBhLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxhKTp0fSxhLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsZT0rdFswXSxyPSt0WzFdLGEpOm4/bnVsbDpbZSxyXX0sYS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCxlPSt0WzBdLHI9K3RbMV0sYSk6bj9bZSxyXTpudWxsfSxhfSx0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgdD1XLGU9ITEscj0xLG49MSxhPVswXSxpPU0sbz1NLHM9TSxsPU0sYz1NO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9cix0LnkxPW4sdC5lYWNoQmVmb3JlKGgpLGE9WzBdLGUmJnQuZWFjaEJlZm9yZShQKSx0fWZ1bmN0aW9uIGgoZSl7dmFyIHI9YVtlLmRlcHRoXSxuPWUueDArcix1PWUueTArcixoPWUueDEtcixmPWUueTEtcjtoPG4mJihuPWg9KG4raCkvMiksZjx1JiYodT1mPSh1K2YpLzIpLGUueDA9bixlLnkwPXUsZS54MT1oLGUueTE9ZixlLmNoaWxkcmVuJiYocj1hW2UuZGVwdGgrMV09aShlKS8yLG4rPWMoZSktcix1Kz1vKGUpLXIsKGgtPXMoZSktcik8biYmKG49aD0obitoKS8yKSwoZi09bChlKS1yKTx1JiYodT1mPSh1K2YpLzIpLHQoZSxuLHUsaCxmKSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LHUpOmV9LHUuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXSxuPSt0WzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9VChlKSx1KTp0fSx1LnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nSW5uZXIodCkucGFkZGluZ091dGVyKHQpOnUucGFkZGluZ0lubmVyKCl9LHUucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QSgrdCksdSk6aX0sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBKCt0KSx1KTpvfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkEoK3QpLHUpOnN9LHUucGFkZGluZ0JvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkEoK3QpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBKCt0KSx1KTpjfSx1fSx0LnRyZWVtYXBCaW5hcnk9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgaSxvLHM9dC5jaGlsZHJlbixsPXMubGVuZ3RoLGM9bmV3IEFycmF5KGwrMSk7Zm9yKGNbMF09bz1pPTA7aTxsOysraSljW2krMV09bys9c1tpXS52YWx1ZTshZnVuY3Rpb24gdChlLHIsbixhLGksbyxsKXtpZihlPj1yLTEpe3ZhciB1PXNbZV07cmV0dXJuIHUueDA9YSx1LnkwPWksdS54MT1vLHZvaWQodS55MT1sKX1mb3IodmFyIGg9Y1tlXSxmPW4vMitoLHA9ZSsxLGQ9ci0xO3A8ZDspe3ZhciBnPXArZD4+PjE7Y1tnXTxmP3A9ZysxOmQ9Z31mLWNbcC0xXTxjW3BdLWYmJmUrMTxwJiYtLXA7dmFyIHY9Y1twXS1oLG09bi12O2lmKG8tYT5sLWkpe3ZhciB5PShhKm0rbyp2KS9uO3QoZSxwLHYsYSxpLHksbCksdChwLHIsbSx5LGksbyxsKX1lbHNle3ZhciB4PShpKm0rbCp2KS9uO3QoZSxwLHYsYSxpLG8seCksdChwLHIsbSxhLHgsbyxsKX19KDAsbCx0LnZhbHVlLGUscixuLGEpfSx0LnRyZWVtYXBEaWNlPU8sdC50cmVlbWFwUmVzcXVhcmlmeT1YLHQudHJlZW1hcFNsaWNlPUgsdC50cmVlbWFwU2xpY2VEaWNlPWZ1bmN0aW9uKHQsZSxyLG4sYSl7KDEmdC5kZXB0aD9IOk8pKHQsZSxyLG4sYSl9LHQudHJlZW1hcFNxdWFyaWZ5PVcsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSgib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9yOihuPW58fHNlbGYpLmQzPW4uZDN8fHt9KX0se31dLDE2MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuLGE7bj10aGlzLGE9ZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUscixuLGEpe3ZhciBpPXQqdCxvPWkqdDtyZXR1cm4oKDEtMyp0KzMqaS1vKSplKyg0LTYqaSszKm8pKnIrKDErMyp0KzMqaS0zKm8pKm4rbyphKS82fWZ1bmN0aW9uIG4odCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGE9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLGk9dFthXSxvPXRbYSsxXSxzPWE+MD90W2EtMV06MippLW8sbD1hPGUtMT90W2ErMl06MipvLWk7cmV0dXJuIHIoKG4tYS9lKSplLHMsaSxvLGwpfX1mdW5jdGlvbiBhKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgYT1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSksaT10WyhhK2UtMSklZV0sbz10W2ElZV0scz10WyhhKzEpJWVdLGw9dFsoYSsyKSVlXTtyZXR1cm4gcigobi1hL2UpKmUsaSxvLHMsbCl9fWZ1bmN0aW9uIGkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQrciplfX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZS10O3JldHVybiByP28odCxyPjE4MHx8cjwtMTgwP3ItMzYwKk1hdGgucm91bmQoci8zNjApOnIpOmkoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBsKHQpe3JldHVybiAxPT0odD0rdCk/YzpmdW5jdGlvbihlLHIpe3JldHVybiByLWU/ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PU1hdGgucG93KHQsciksZT1NYXRoLnBvdyhlLHIpLXQscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KHQrbiplLHIpfX0oZSxyLHQpOmkoaXNOYU4oZSk/cjplKX19ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWUtdDtyZXR1cm4gcj9vKHQscik6aShpc05hTih0KT9lOnQpfXZhciB1PWZ1bmN0aW9uIHQocil7dmFyIG49bChyKTtmdW5jdGlvbiBhKHQscil7dmFyIGE9bigodD1lLnJnYih0KSkuciwocj1lLnJnYihyKSkuciksaT1uKHQuZyxyLmcpLG89bih0LmIsci5iKSxzPWModC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9YShlKSx0Lmc9aShlKSx0LmI9byhlKSx0Lm9wYWNpdHk9cyhlKSx0KyIifX1yZXR1cm4gYS5nYW1tYT10LGF9KDEpO2Z1bmN0aW9uIGgodCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuLGEsaT1yLmxlbmd0aCxvPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShpKSxsPW5ldyBBcnJheShpKTtmb3Iobj0wO248aTsrK24pYT1lLnJnYihyW25dKSxvW25dPWEucnx8MCxzW25dPWEuZ3x8MCxsW25dPWEuYnx8MDtyZXR1cm4gbz10KG8pLHM9dChzKSxsPXQobCksYS5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIGEucj1vKHQpLGEuZz1zKHQpLGEuYj1sKHQpLGErIiJ9fX12YXIgZj1oKG4pLHA9aChhKTtmdW5jdGlvbiBkKHQsZSl7ZXx8KGU9W10pO3ZhciByLG49dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxhPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oaSl7Zm9yKHI9MDtyPG47KytyKWFbcl09dFtyXSooMS1pKStlW3JdKmk7cmV0dXJuIGF9fWZ1bmN0aW9uIGcodCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIHYodCxlKXt2YXIgcixuPWU/ZS5sZW5ndGg6MCxhPXQ/TWF0aC5taW4obix0Lmxlbmd0aCk6MCxpPW5ldyBBcnJheShhKSxvPW5ldyBBcnJheShuKTtmb3Iocj0wO3I8YTsrK3IpaVtyXT1rKHRbcl0sZVtyXSk7Zm9yKDtyPG47KytyKW9bcl09ZVtyXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHI9MDtyPGE7KytyKW9bcl09aVtyXSh0KTtyZXR1cm4gb319ZnVuY3Rpb24gbSh0LGUpe3ZhciByPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZSh0KigxLW4pK2Uqbikscn19ZnVuY3Rpb24geSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIHQqKDEtcikrZSpyfX1mdW5jdGlvbiB4KHQsZSl7dmFyIHIsbj17fSxhPXt9O2ZvcihyIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSlyIGluIHQ/bltyXT1rKHRbcl0sZVtyXSk6YVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWFbcl09bltyXSh0KTtyZXR1cm4gYX19dmFyIGI9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLF89bmV3IFJlZ0V4cChiLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHcodCxlKXt2YXIgcixuLGEsaT1iLmxhc3RJbmRleD1fLmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj1iLmV4ZWModCkpJiYobj1fLmV4ZWMoZSkpOykoYT1uLmluZGV4KT5pJiYoYT1lLnNsaWNlKGksYSksc1tvXT9zW29dKz1hOnNbKytvXT1hKSwocj1yWzBdKT09PShuPW5bMF0pP3Nbb10/c1tvXSs9bjpzWysrb109bjooc1srK29dPW51bGwsbC5wdXNoKHtpOm8seDp5KHIsbil9KSksaT1fLmxhc3RJbmRleDtyZXR1cm4gaTxlLmxlbmd0aCYmKGE9ZS5zbGljZShpKSxzW29dP3Nbb10rPWE6c1srK29dPWEpLHMubGVuZ3RoPDI/bFswXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShsWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gayh0LHIpe3ZhciBuLGE9dHlwZW9mIHI7cmV0dXJuIG51bGw9PXJ8fCJib29sZWFuIj09PWE/aShyKTooIm51bWJlciI9PT1hP3k6InN0cmluZyI9PT1hPyhuPWUuY29sb3IocikpPyhyPW4sdSk6dzpyIGluc3RhbmNlb2YgZS5jb2xvcj91OnIgaW5zdGFuY2VvZiBEYXRlP206ZyhyKT9kOkFycmF5LmlzQXJyYXkocik/djoiZnVuY3Rpb24iIT10eXBlb2Ygci52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2Ygci50b1N0cmluZ3x8aXNOYU4ocik/eDp5KSh0LHIpfXZhciBULE0sQSxTLEU9MTgwL01hdGguUEksTD17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBDKHQsZSxyLG4sYSxpKXt2YXIgbyxzLGw7cmV0dXJuKG89TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPW8sZS89byksKGw9dCpyK2UqbikmJihyLT10Kmwsbi09ZSpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLHQqbjxlKnImJih0PS10LGU9LWUsbD0tbCxvPS1vKSx7dHJhbnNsYXRlWDphLHRyYW5zbGF0ZVk6aSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKkUsc2tld1g6TWF0aC5hdGFuKGwpKkUsc2NhbGVYOm8sc2NhbGVZOnN9fWZ1bmN0aW9uIFAodCxlLHIsbil7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKGksbyl7dmFyIHM9W10sbD1bXTtyZXR1cm4gaT10KGkpLG89dChvKSxmdW5jdGlvbih0LG4sYSxpLG8scyl7aWYodCE9PWF8fG4hPT1pKXt2YXIgbD1vLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLHIpO3MucHVzaCh7aTpsLTQseDp5KHQsYSl9LHtpOmwtMix4OnkobixpKX0pfWVsc2UoYXx8aSkmJm8ucHVzaCgidHJhbnNsYXRlKCIrYStlK2krcil9KGkudHJhbnNsYXRlWCxpLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGwpLGZ1bmN0aW9uKHQsZSxyLGkpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxpLnB1c2goe2k6ci5wdXNoKGEocikrInJvdGF0ZSgiLG51bGwsbiktMix4OnkodCxlKX0pKTplJiZyLnB1c2goYShyKSsicm90YXRlKCIrZStuKX0oaS5yb3RhdGUsby5yb3RhdGUscyxsKSxmdW5jdGlvbih0LGUscixpKXt0IT09ZT9pLnB1c2goe2k6ci5wdXNoKGEocikrInNrZXdYKCIsbnVsbCxuKS0yLHg6eSh0LGUpfSk6ZSYmci5wdXNoKGEocikrInNrZXdYKCIrZStuKX0oaS5za2V3WCxvLnNrZXdYLHMsbCksZnVuY3Rpb24odCxlLHIsbixpLG8pe2lmKHQhPT1yfHxlIT09bil7dmFyIHM9aS5wdXNoKGEoaSkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO28ucHVzaCh7aTpzLTQseDp5KHQscil9LHtpOnMtMix4OnkoZSxuKX0pfWVsc2UgMT09PXImJjE9PT1ufHxpLnB1c2goYShpKSsic2NhbGUoIityKyIsIituKyIpIil9KGkuc2NhbGVYLGkuc2NhbGVZLG8uc2NhbGVYLG8uc2NhbGVZLHMsbCksaT1vPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsbj1sLmxlbmd0aDsrK3I8bjspc1soZT1sW3JdKS5pXT1lLngodCk7cmV0dXJuIHMuam9pbigiIil9fX12YXIgTz1QKGZ1bmN0aW9uKHQpe3JldHVybiJub25lIj09PXQ/TDooVHx8KFQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksTT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsQT1kb2N1bWVudC5kZWZhdWx0VmlldyksVC5zdHlsZS50cmFuc2Zvcm09dCx0PUEuZ2V0Q29tcHV0ZWRTdHlsZShNLmFwcGVuZENoaWxkKFQpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLE0ucmVtb3ZlQ2hpbGQoVCksQygrKHQ9dC5zbGljZSg3LC0xKS5zcGxpdCgiLCIpKVswXSwrdFsxXSwrdFsyXSwrdFszXSwrdFs0XSwrdFs1XSkpfSwicHgsICIsInB4KSIsImRlZykiKSx6PVAoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/TDooU3x8KFM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksUy5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9Uy50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9DKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOkwpfSwiLCAiLCIpIiwiKSIpLEk9TWF0aC5TUVJUMixEPTIsUj00LEY9MWUtMTI7ZnVuY3Rpb24gQih0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBOKHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBhPXQoKHI9ZS5oc2wocikpLmgsKG49ZS5oc2wobikpLmgpLGk9YyhyLnMsbi5zKSxvPWMoci5sLG4ubCkscz1jKHIub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5oPWEodCksci5zPWkodCksci5sPW8odCksci5vcGFjaXR5PXModCkscisiIn19fXZhciBqPU4ocyksVj1OKGMpO2Z1bmN0aW9uIFUodCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGE9dCgocj1lLmhjbChyKSkuaCwobj1lLmhjbChuKSkuaCksaT1jKHIuYyxuLmMpLG89YyhyLmwsbi5sKSxzPWMoci5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9YSh0KSxyLmM9aSh0KSxyLmw9byh0KSxyLm9wYWNpdHk9cyh0KSxyKyIifX19dmFyIHE9VShzKSxIPVUoYyk7ZnVuY3Rpb24gRyh0KXtyZXR1cm4gZnVuY3Rpb24gcihuKXtmdW5jdGlvbiBhKHIsYSl7dmFyIGk9dCgocj1lLmN1YmVoZWxpeChyKSkuaCwoYT1lLmN1YmVoZWxpeChhKSkuaCksbz1jKHIucyxhLnMpLHM9YyhyLmwsYS5sKSxsPWMoci5vcGFjaXR5LGEub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9aSh0KSxyLnM9byh0KSxyLmw9cyhNYXRoLnBvdyh0LG4pKSxyLm9wYWNpdHk9bCh0KSxyKyIifX1yZXR1cm4gbj0rbixhLmdhbW1hPXIsYX0oMSl9dmFyIFk9RyhzKSxXPUcoYyk7dC5pbnRlcnBvbGF0ZT1rLHQuaW50ZXJwb2xhdGVBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybihnKGUpP2Q6dikodCxlKX0sdC5pbnRlcnBvbGF0ZUJhc2lzPW4sdC5pbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkPWEsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeD1ZLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nPVcsdC5pbnRlcnBvbGF0ZURhdGU9bSx0LmludGVycG9sYXRlRGlzY3JldGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4oZS0xLE1hdGguZmxvb3IociplKSkpXX19LHQuaW50ZXJwb2xhdGVIY2w9cSx0LmludGVycG9sYXRlSGNsTG9uZz1ILHQuaW50ZXJwb2xhdGVIc2w9aix0LmludGVycG9sYXRlSHNsTG9uZz1WLHQuaW50ZXJwb2xhdGVIdWU9ZnVuY3Rpb24odCxlKXt2YXIgcj1zKCt0LCtlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9cih0KTtyZXR1cm4gZS0zNjAqTWF0aC5mbG9vcihlLzM2MCl9fSx0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKHQscil7dmFyIG49YygodD1lLmxhYih0KSkubCwocj1lLmxhYihyKSkubCksYT1jKHQuYSxyLmEpLGk9Yyh0LmIsci5iKSxvPWModC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Lmw9bihlKSx0LmE9YShlKSx0LmI9aShlKSx0Lm9wYWNpdHk9byhlKSx0KyIifX0sdC5pbnRlcnBvbGF0ZU51bWJlcj15LHQuaW50ZXJwb2xhdGVOdW1iZXJBcnJheT1kLHQuaW50ZXJwb2xhdGVPYmplY3Q9eCx0LmludGVycG9sYXRlUmdiPXUsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzPWYsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkPXAsdC5pbnRlcnBvbGF0ZVJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZCh0KigxLXIpK2Uqcil9fSx0LmludGVycG9sYXRlU3RyaW5nPXcsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcz1PLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc9eix0LmludGVycG9sYXRlWm9vbT1mdW5jdGlvbih0LGUpe3ZhciByLG4sYT10WzBdLGk9dFsxXSxvPXRbMl0scz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1zLWEsaD1sLWksZj11KnUraCpoO2lmKGY8RiluPU1hdGgubG9nKGMvbykvSSxyPWZ1bmN0aW9uKHQpe3JldHVyblthK3QqdSxpK3QqaCxvKk1hdGguZXhwKEkqdCpuKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KGYpLGQ9KGMqYy1vKm8rUipmKS8oMipvKkQqcCksZz0oYypjLW8qby1SKmYpLygyKmMqRCpwKSx2PU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCksbT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO249KG0tdikvSSxyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dCpuLHM9Qih2KSxsPW8vKEQqcCkqKHMqKGU9SSpyK3YsKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpKS1mdW5jdGlvbih0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn0odikpO3JldHVyblthK2wqdSxpK2wqaCxvKnMvQihJKnIrdildfX1yZXR1cm4gci5kdXJhdGlvbj0xZTMqbixyfSx0LnBpZWNld2lzZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgtMSxhPWVbMF0saT1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylpW3JdPXQoYSxhPWVbKytyXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4obi0xLE1hdGguZmxvb3IodCo9bikpKTtyZXR1cm4gaVtlXSh0LWUpfX0sdC5xdWFudGl6ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10KG4vKGUtMSkpO3JldHVybiByfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LCJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP2Eocix0KCJkMy1jb2xvciIpKTphKChuPW58fHNlbGYpLmQzPW4uZDN8fHt9LG4uZDMpfSx7ImQzLWNvbG9yIjoxNTZ9XSwxNjE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPU1hdGguUEkscj0yKmUsbj1yLTFlLTY7ZnVuY3Rpb24gYSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGkoKXtyZXR1cm4gbmV3IGF9YS5wcm90b3R5cGU9aS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmEsbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4sYSxpKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0rYSkrIiwiKyh0aGlzLl95MT0raSl9LGFyY1RvOmZ1bmN0aW9uKHQscixuLGEsaSl7dD0rdCxyPStyLG49K24sYT0rYSxpPStpO3ZhciBvPXRoaXMuX3gxLHM9dGhpcy5feTEsbD1uLXQsYz1hLXIsdT1vLXQsaD1zLXIsZj11KnUraCpoO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9cik7ZWxzZSBpZihmPjFlLTYpaWYoTWF0aC5hYnMoaCpsLWMqdSk+MWUtNiYmaSl7dmFyIHA9bi1vLGQ9YS1zLGc9bCpsK2MqYyx2PXAqcCtkKmQsbT1NYXRoLnNxcnQoZykseT1NYXRoLnNxcnQoZikseD1pKk1hdGgudGFuKChlLU1hdGguYWNvcygoZytmLXYpLygyKm0qeSkpKS8yKSxiPXgveSxfPXgvbTtNYXRoLmFicyhiLTEpPjFlLTYmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisocitiKmgpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsoaCpwPnUqZCkrIiwiKyh0aGlzLl94MT10K18qbCkrIiwiKyh0aGlzLl95MT1yK18qYyl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1yKTtlbHNlO30sYXJjOmZ1bmN0aW9uKHQsYSxpLG8scyxsKXt0PSt0LGE9K2E7dmFyIGM9KGk9K2kpKk1hdGguY29zKG8pLHU9aSpNYXRoLnNpbihvKSxoPXQrYyxmPWErdSxwPTFebCxkPWw/by1zOnMtbztpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2grIiwiK2Y6KE1hdGguYWJzKHRoaXMuX3gxLWgpPjFlLTZ8fE1hdGguYWJzKHRoaXMuX3kxLWYpPjFlLTYpJiYodGhpcy5fKz0iTCIraCsiLCIrZiksaSYmKGQ8MCYmKGQ9ZCVyK3IpLGQ+bj90aGlzLl8rPSJBIitpKyIsIitpKyIsMCwxLCIrcCsiLCIrKHQtYykrIiwiKyhhLXUpKyJBIitpKyIsIitpKyIsMCwxLCIrcCsiLCIrKHRoaXMuX3gxPWgpKyIsIisodGhpcy5feTE9Zik6ZD4xZS02JiYodGhpcy5fKz0iQSIraSsiLCIraSsiLDAsIisgKyhkPj1lKSsiLCIrcCsiLCIrKHRoaXMuX3gxPXQraSpNYXRoLmNvcyhzKSkrIiwiKyh0aGlzLl95MT1hK2kqTWF0aC5zaW4ocykpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX0sdC5wYXRoPWksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSgib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9yOm4uZDM9bi5kM3x8e30pfSx7fV0sMTYyOltmdW5jdGlvbih0LGUscil7dmFyIG47bj10aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSxyLG4pe2lmKGlzTmFOKGUpfHxpc05hTihyKSlyZXR1cm4gdDt2YXIgYSxpLG8scyxsLGMsdSxoLGYscD10Ll9yb290LGQ9e2RhdGE6bn0sZz10Ll94MCx2PXQuX3kwLG09dC5feDEseT10Ll95MTtpZighcClyZXR1cm4gdC5fcm9vdD1kLHQ7Zm9yKDtwLmxlbmd0aDspaWYoKGM9ZT49KGk9KGcrbSkvMikpP2c9aTptPWksKHU9cj49KG89KHYreSkvMikpP3Y9bzp5PW8sYT1wLCEocD1wW2g9dTw8MXxjXSkpcmV0dXJuIGFbaF09ZCx0O2lmKHM9K3QuX3guY2FsbChudWxsLHAuZGF0YSksbD0rdC5feS5jYWxsKG51bGwscC5kYXRhKSxlPT09cyYmcj09PWwpcmV0dXJuIGQubmV4dD1wLGE/YVtoXT1kOnQuX3Jvb3Q9ZCx0O2Rve2E9YT9hW2hdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoYz1lPj0oaT0oZyttKS8yKSk/Zz1pOm09aSwodT1yPj0obz0odit5KS8yKSk/dj1vOnk9b313aGlsZSgoaD11PDwxfGMpPT0oZj0obD49byk8PDF8cz49aSkpO3JldHVybiBhW2ZdPXAsYVtoXT1kLHR9dmFyIHI9ZnVuY3Rpb24odCxlLHIsbixhKXt0aGlzLm5vZGU9dCx0aGlzLngwPWUsdGhpcy55MD1yLHRoaXMueDE9bix0aGlzLnkxPWF9O2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgaT1uZXcgbyhudWxsPT1lP246ZSxudWxsPT1yP2E6cixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P2k6aS5hZGRBbGwodCl9ZnVuY3Rpb24gbyh0LGUscixuLGEsaSl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9YSx0aGlzLl95MT1pLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0scj1lO3Q9dC5uZXh0OylyPXIubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBsPWkucHJvdG90eXBlPW8ucHJvdG90eXBlO2wuY29weT1mdW5jdGlvbigpe3ZhciB0LGUscj1uZXcgbyh0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLG49dGhpcy5fcm9vdDtpZighbilyZXR1cm4gcjtpZighbi5sZW5ndGgpcmV0dXJuIHIuX3Jvb3Q9cyhuKSxyO2Zvcih0PVt7c291cmNlOm4sdGFyZ2V0OnIuX3Jvb3Q9bmV3IEFycmF5KDQpfV07bj10LnBvcCgpOylmb3IodmFyIGE9MDthPDQ7KythKShlPW4uc291cmNlW2FdKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0Om4udGFyZ2V0W2FdPW5ldyBBcnJheSg0KX0pOm4udGFyZ2V0W2FdPXMoZSkpO3JldHVybiByfSxsLmFkZD1mdW5jdGlvbih0KXt2YXIgcj0rdGhpcy5feC5jYWxsKG51bGwsdCksbj0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIGUodGhpcy5jb3ZlcihyLG4pLHIsbix0KX0sbC5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIHIsbixhLGksbz10Lmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTEvMCx1PTEvMCxoPS0xLzAsZj0tMS8wO2ZvcihuPTA7bjxvOysrbilpc05hTihhPSt0aGlzLl94LmNhbGwobnVsbCxyPXRbbl0pKXx8aXNOYU4oaT0rdGhpcy5feS5jYWxsKG51bGwscikpfHwoc1tuXT1hLGxbbl09aSxhPGMmJihjPWEpLGE+aCYmKGg9YSksaTx1JiYodT1pKSxpPmYmJihmPWkpKTtmb3IoaDxjJiYoYz10aGlzLl94MCxoPXRoaXMuX3gxKSxmPHUmJih1PXRoaXMuX3kwLGY9dGhpcy5feTEpLHRoaXMuY292ZXIoYyx1KS5jb3ZlcihoLGYpLG49MDtuPG87KytuKWUodGhpcyxzW25dLGxbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LGwuY292ZXI9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIHI9dGhpcy5feDAsbj10aGlzLl95MCxhPXRoaXMuX3gxLGk9dGhpcy5feTE7aWYoaXNOYU4ocikpYT0ocj1NYXRoLmZsb29yKHQpKSsxLGk9KG49TWF0aC5mbG9vcihlKSkrMTtlbHNle2lmKCEocj50fHx0PmF8fG4+ZXx8ZT5pKSlyZXR1cm4gdGhpczt2YXIgbyxzLGw9YS1yLGM9dGhpcy5fcm9vdDtzd2l0Y2gocz0oZTwobitpKS8yKTw8MXx0PChyK2EpLzIpe2Nhc2UgMDpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKGk9bisobCo9MiksdD4oYT1yK2wpfHxlPmkpO2JyZWFrO2Nhc2UgMTpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKGk9bisobCo9MiksKHI9YS1sKT50fHxlPmkpO2JyZWFrO2Nhc2UgMjpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKG49aS0obCo9MiksdD4oYT1yK2wpfHxuPmUpO2JyZWFrO2Nhc2UgMzpkb3sobz1uZXcgQXJyYXkoNCkpW3NdPWMsYz1vfXdoaWxlKG49aS0obCo9MiksKHI9YS1sKT50fHxuPmUpfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1jKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWEsdGhpcy5feTE9aSx0aGlzfSxsLmRhdGE9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSksdH0sbC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LGwuZmluZD1mdW5jdGlvbih0LGUsbil7dmFyIGEsaSxvLHMsbCxjLHUsaD10aGlzLl94MCxmPXRoaXMuX3kwLHA9dGhpcy5feDEsZD10aGlzLl95MSxnPVtdLHY9dGhpcy5fcm9vdDtmb3IodiYmZy5wdXNoKG5ldyByKHYsaCxmLHAsZCkpLG51bGw9PW4/bj0xLzA6KGg9dC1uLGY9ZS1uLHA9dCtuLGQ9ZStuLG4qPW4pO2M9Zy5wb3AoKTspaWYoISghKHY9Yy5ub2RlKXx8KGk9Yy54MCk+cHx8KG89Yy55MCk+ZHx8KHM9Yy54MSk8aHx8KGw9Yy55MSk8ZikpaWYodi5sZW5ndGgpe3ZhciBtPShpK3MpLzIseT0obytsKS8yO2cucHVzaChuZXcgcih2WzNdLG0seSxzLGwpLG5ldyByKHZbMl0saSx5LG0sbCksbmV3IHIodlsxXSxtLG8scyx5KSxuZXcgcih2WzBdLGksbyxtLHkpKSwodT0oZT49eSk8PDF8dD49bSkmJihjPWdbZy5sZW5ndGgtMV0sZ1tnLmxlbmd0aC0xXT1nW2cubGVuZ3RoLTEtdV0sZ1tnLmxlbmd0aC0xLXVdPWMpfWVsc2V7dmFyIHg9dC0rdGhpcy5feC5jYWxsKG51bGwsdi5kYXRhKSxiPWUtK3RoaXMuX3kuY2FsbChudWxsLHYuZGF0YSksXz14KngrYipiO2lmKF88bil7dmFyIHc9TWF0aC5zcXJ0KG49Xyk7aD10LXcsZj1lLXcscD10K3csZD1lK3csYT12LmRhdGF9fXJldHVybiBhfSxsLnJlbW92ZT1mdW5jdGlvbih0KXtpZihpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxyLG4sYSxpLG8scyxsLGMsdSxoLGYscD10aGlzLl9yb290LGQ9dGhpcy5feDAsZz10aGlzLl95MCx2PXRoaXMuX3gxLG09dGhpcy5feTE7aWYoIXApcmV0dXJuIHRoaXM7aWYocC5sZW5ndGgpZm9yKDs7KXtpZigoYz1pPj0ocz0oZCt2KS8yKSk/ZD1zOnY9cywodT1vPj0obD0oZyttKS8yKSk/Zz1sOm09bCxlPXAsIShwPXBbaD11PDwxfGNdKSlyZXR1cm4gdGhpcztpZighcC5sZW5ndGgpYnJlYWs7KGVbaCsxJjNdfHxlW2grMiYzXXx8ZVtoKzMmM10pJiYocj1lLGY9aCl9Zm9yKDtwLmRhdGEhPT10OylpZihuPXAsIShwPXAubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKGE9cC5uZXh0KSYmZGVsZXRlIHAubmV4dCxuPyhhP24ubmV4dD1hOmRlbGV0ZSBuLm5leHQsdGhpcyk6ZT8oYT9lW2hdPWE6ZGVsZXRlIGVbaF0sKHA9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJnA9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFwLmxlbmd0aCYmKHI/cltmXT1wOnRoaXMuX3Jvb3Q9cCksdGhpcyk6KHRoaXMuX3Jvb3Q9YSx0aGlzKX0sbC5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSxsLnJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sbC5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pLHR9LGwudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIGUsbixhLGksbyxzLGw9W10sYz10aGlzLl9yb290O2ZvcihjJiZsLnB1c2gobmV3IHIoYyx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bC5wb3AoKTspaWYoIXQoYz1lLm5vZGUsYT1lLngwLGk9ZS55MCxvPWUueDEscz1lLnkxKSYmYy5sZW5ndGgpe3ZhciB1PShhK28pLzIsaD0oaStzKS8yOyhuPWNbM10pJiZsLnB1c2gobmV3IHIobix1LGgsbyxzKSksKG49Y1syXSkmJmwucHVzaChuZXcgcihuLGEsaCx1LHMpKSwobj1jWzFdKSYmbC5wdXNoKG5ldyByKG4sdSxpLG8saCkpLChuPWNbMF0pJiZsLnB1c2gobmV3IHIobixhLGksdSxoKSl9cmV0dXJuIHRoaXN9LGwudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgZSxuPVtdLGE9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgcih0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIGk9ZS5ub2RlO2lmKGkubGVuZ3RoKXt2YXIgbyxzPWUueDAsbD1lLnkwLGM9ZS54MSx1PWUueTEsaD0ocytjKS8yLGY9KGwrdSkvMjsobz1pWzBdKSYmbi5wdXNoKG5ldyByKG8scyxsLGgsZikpLChvPWlbMV0pJiZuLnB1c2gobmV3IHIobyxoLGwsYyxmKSksKG89aVsyXSkmJm4ucHVzaChuZXcgcihvLHMsZixoLHUpKSwobz1pWzNdKSYmbi5wdXNoKG5ldyByKG8saCxmLGMsdSkpfWEucHVzaChlKX1mb3IoO2U9YS5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9LHQucXVhZHRyZWU9aSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KCJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP3I6bi5kMz1uLmQzfHx7fSl9LHt9XSwxNjM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixhO249dGhpcyxhPWZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBuPU1hdGguYWJzLGE9TWF0aC5hdGFuMixpPU1hdGguY29zLG89TWF0aC5tYXgscz1NYXRoLm1pbixsPU1hdGguc2luLGM9TWF0aC5zcXJ0LHU9MWUtMTIsaD1NYXRoLlBJLGY9aC8yLHA9MipoO2Z1bmN0aW9uIGQodCl7cmV0dXJuIHQ+PTE/Zjp0PD0tMT8tZjpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiB2KHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiB5KHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gYih0LGUscixuLGEsaSxzKXt2YXIgbD10LXIsdT1lLW4saD0ocz9pOi1pKS9jKGwqbCt1KnUpLGY9aCp1LHA9LWgqbCxkPXQrZixnPWUrcCx2PXIrZixtPW4rcCx5PShkK3YpLzIseD0oZyttKS8yLGI9di1kLF89bS1nLHc9YipiK18qXyxrPWEtaSxUPWQqbS12KmcsTT0oXzwwPy0xOjEpKmMobygwLGsqayp3LVQqVCkpLEE9KFQqXy1iKk0pL3csUz0oLVQqYi1fKk0pL3csRT0oVCpfK2IqTSkvdyxMPSgtVCpiK18qTSkvdyxDPUEteSxQPVMteCxPPUUteSx6PUwteDtyZXR1cm4gQypDK1AqUD5PKk8reip6JiYoQT1FLFM9TCkse2N4OkEsY3k6Uyx4MDE6LWYseTAxOi1wLHgxMTpBKihhL2stMSkseTExOlMqKGEvay0xKX19ZnVuY3Rpb24gXyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gbmV3IF8odCl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBUKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIE0oKXt2YXIgdD1rLG49VCxhPXIoITApLGk9bnVsbCxvPXcscz1udWxsO2Z1bmN0aW9uIGwocil7dmFyIGwsYyx1LGg9ci5sZW5ndGgsZj0hMTtmb3IobnVsbD09aSYmKHM9byh1PWUucGF0aCgpKSksbD0wO2w8PWg7KytsKSEobDxoJiZhKGM9cltsXSxsLHIpKT09PWYmJigoZj0hZik/cy5saW5lU3RhcnQoKTpzLmxpbmVFbmQoKSksZiYmcy5wb2ludCgrdChjLGwsciksK24oYyxsLHIpKTtpZih1KXJldHVybiBzPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gbC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cigrZSksbCk6dH0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6bn0sbC5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cighIXQpLGwpOmF9LGwuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxudWxsIT1pJiYocz1vKGkpKSxsKTpvfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/aT1zPW51bGw6cz1vKGk9dCksbCk6aX0sbH1mdW5jdGlvbiBBKCl7dmFyIHQ9ayxuPW51bGwsYT1yKDApLGk9VCxvPXIoITApLHM9bnVsbCxsPXcsYz1udWxsO2Z1bmN0aW9uIHUocil7dmFyIHUsaCxmLHAsZCxnPXIubGVuZ3RoLHY9ITEsbT1uZXcgQXJyYXkoZykseT1uZXcgQXJyYXkoZyk7Zm9yKG51bGw9PXMmJihjPWwoZD1lLnBhdGgoKSkpLHU9MDt1PD1nOysrdSl7aWYoISh1PGcmJm8ocD1yW3VdLHUscikpPT09dilpZih2PSF2KWg9dSxjLmFyZWFTdGFydCgpLGMubGluZVN0YXJ0KCk7ZWxzZXtmb3IoYy5saW5lRW5kKCksYy5saW5lU3RhcnQoKSxmPXUtMTtmPj1oOy0tZiljLnBvaW50KG1bZl0seVtmXSk7Yy5saW5lRW5kKCksYy5hcmVhRW5kKCl9diYmKG1bdV09K3QocCx1LHIpLHlbdV09K2EocCx1LHIpLGMucG9pbnQobj8rbihwLHUscik6bVt1XSxpPytpKHAsdSxyKTp5W3VdKSl9aWYoZClyZXR1cm4gYz1udWxsLGQrIiJ8fG51bGx9ZnVuY3Rpb24gaCgpe3JldHVybiBNKCkuZGVmaW5lZChvKS5jdXJ2ZShsKS5jb250ZXh0KHMpfXJldHVybiB1Lng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxuPW51bGwsdSk6dH0sdS54MD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoK2UpLHUpOnR9LHUueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksdSk6bn0sdS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksaT1udWxsLHUpOmF9LHUueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSx1KTphfSx1LnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHUpOml9LHUubGluZVgwPXUubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIGgoKS54KHQpLnkoYSl9LHUubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIGgoKS54KHQpLnkoaSl9LHUubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIGgoKS54KG4pLnkoYSl9LHUuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoISF0KSx1KTpvfSx1LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsbnVsbCE9cyYmKGM9bChzKSksdSk6bH0sdS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3M9Yz1udWxsOmM9bChzPXQpLHUpOnN9LHV9ZnVuY3Rpb24gUyh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBFKHQpe3JldHVybiB0fV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX07dmFyIEw9UCh3KTtmdW5jdGlvbiBDKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gUCh0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgQyh0KGUpKX1yZXR1cm4gZS5fY3VydmU9dCxlfWZ1bmN0aW9uIE8odCl7dmFyIGU9dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoUCh0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiB6KCl7cmV0dXJuIE8oTSgpLmN1cnZlKEwpKX1mdW5jdGlvbiBJKCl7dmFyIHQ9QSgpLmN1cnZlKEwpLGU9dC5jdXJ2ZSxyPXQubGluZVgwLG49dC5saW5lWDEsYT10LmxpbmVZMCxpPXQubGluZVkxO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQuc3RhcnRBbmdsZT10LngwLGRlbGV0ZSB0LngwLHQuZW5kQW5nbGU9dC54MSxkZWxldGUgdC54MSx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmlubmVyUmFkaXVzPXQueTAsZGVsZXRlIHQueTAsdC5vdXRlclJhZGl1cz10LnkxLGRlbGV0ZSB0LnkxLHQubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhyKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhuKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhhKCkpfSxkZWxldGUgdC5saW5lWTAsdC5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhpKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKFAodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gRCh0LGUpe3JldHVyblsoZT0rZSkqTWF0aC5jb3ModC09TWF0aC5QSS8yKSxlKk1hdGguc2luKHQpXX1DLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX2N1cnZlLnBvaW50KGUqTWF0aC5zaW4odCksZSotTWF0aC5jb3ModCkpfX07dmFyIFI9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEYodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIEIodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIE4odCl7dmFyIG49RixhPUIsaT1rLG89VCxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciByLGw9Ui5jYWxsKGFyZ3VtZW50cyksYz1uLmFwcGx5KHRoaXMsbCksdT1hLmFwcGx5KHRoaXMsbCk7aWYoc3x8KHM9cj1lLnBhdGgoKSksdChzLCtpLmFwcGx5KHRoaXMsKGxbMF09YyxsKSksK28uYXBwbHkodGhpcyxsKSwraS5hcHBseSh0aGlzLChsWzBdPXUsbCkpLCtvLmFwcGx5KHRoaXMsbCkpLHIpcmV0dXJuIHM9bnVsbCxyKyIifHxudWxsfXJldHVybiBsLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGwpOm59LGwudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbCk6YX0sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6aX0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6b30sbC5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp0LGwpOnN9LGx9ZnVuY3Rpb24gaih0LGUscixuLGEpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGU9KGUrbikvMixyLGUsYSxuLGEpfWZ1bmN0aW9uIFYodCxlLHIsbixhKXt0Lm1vdmVUbyhlLHIpLHQuYmV6aWVyQ3VydmVUbyhlLHI9KHIrYSkvMixuLHIsbixhKX1mdW5jdGlvbiBVKHQsZSxyLG4sYSl7dmFyIGk9RChlLHIpLG89RChlLHI9KHIrYSkvMikscz1EKG4sciksbD1EKG4sYSk7dC5tb3ZlVG8oaVswXSxpWzFdKSx0LmJlemllckN1cnZlVG8ob1swXSxvWzFdLHNbMF0sc1sxXSxsWzBdLGxbMV0pfXZhciBxPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvaCk7dC5tb3ZlVG8ociwwKSx0LmFyYygwLDAsciwwLHApfX0sSD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqciwtciksdC5saW5lVG8oLXIsLXIpLHQubGluZVRvKC1yLC0zKnIpLHQubGluZVRvKHIsLTMqciksdC5saW5lVG8ociwtciksdC5saW5lVG8oMypyLC1yKSx0LmxpbmVUbygzKnIsciksdC5saW5lVG8ocixyKSx0LmxpbmVUbyhyLDMqciksdC5saW5lVG8oLXIsMypyKSx0LmxpbmVUbygtcixyKSx0LmxpbmVUbygtMypyLHIpLHQuY2xvc2VQYXRoKCl9fSxHPU1hdGguc3FydCgxLzMpLFk9MipHLFc9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS9ZKSxuPXIqRzt0Lm1vdmVUbygwLC1yKSx0LmxpbmVUbyhuLDApLHQubGluZVRvKDAsciksdC5saW5lVG8oLW4sMCksdC5jbG9zZVBhdGgoKX19LFg9TWF0aC5zaW4oaC8xMCkvTWF0aC5zaW4oNypoLzEwKSxaPU1hdGguc2luKHAvMTApKlgsSj0tTWF0aC5jb3MocC8xMCkqWCxLPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KC44OTA4MTMwOTE1MjkyODUyKmUpLG49WipyLGE9SipyO3QubW92ZVRvKDAsLXIpLHQubGluZVRvKG4sYSk7Zm9yKHZhciBpPTE7aTw1OysraSl7dmFyIG89cCppLzUscz1NYXRoLmNvcyhvKSxsPU1hdGguc2luKG8pO3QubGluZVRvKGwqciwtcypyKSx0LmxpbmVUbyhzKm4tbCphLGwqbitzKmEpfXQuY2xvc2VQYXRoKCl9fSxRPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUpLG49LXIvMjt0LnJlY3QobixuLHIscil9fSwkPU1hdGguc3FydCgzKSx0dD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPS1NYXRoLnNxcnQoZS8oMyokKSk7dC5tb3ZlVG8oMCwyKnIpLHQubGluZVRvKC0kKnIsLXIpLHQubGluZVRvKCQqciwtciksdC5jbG9zZVBhdGgoKX19LGV0PS0uNSxydD1NYXRoLnNxcnQoMykvMixudD0xL01hdGguc3FydCgxMiksYXQ9MyoobnQvMisxKSxpdD17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlL2F0KSxuPXIvMixhPXIqbnQsaT1uLG89cipudCtyLHM9LWksbD1vO3QubW92ZVRvKG4sYSksdC5saW5lVG8oaSxvKSx0LmxpbmVUbyhzLGwpLHQubGluZVRvKGV0Km4tcnQqYSxydCpuK2V0KmEpLHQubGluZVRvKGV0KmktcnQqbyxydCppK2V0Km8pLHQubGluZVRvKGV0KnMtcnQqbCxydCpzK2V0KmwpLHQubGluZVRvKGV0Km4rcnQqYSxldCphLXJ0Km4pLHQubGluZVRvKGV0KmkrcnQqbyxldCpvLXJ0KmkpLHQubGluZVRvKGV0KnMrcnQqbCxldCpsLXJ0KnMpLHQuY2xvc2VQYXRoKCl9fSxvdD1bcSxILFcsUSxLLHR0LGl0XTtmdW5jdGlvbiBzdCgpe31mdW5jdGlvbiBsdCh0LGUscil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErcikvNil9ZnVuY3Rpb24gY3QodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHV0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBodCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gZnQodCxlKXt0aGlzLl9iYXNpcz1uZXcgY3QodCksdGhpcy5fYmV0YT1lfWN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6bHQodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6bHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19LHV0LnByb3RvdHlwZT17YXJlYVN0YXJ0OnN0LGFyZWFFbmQ6c3QsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0Omx0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxodC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgcj0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LG49KHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHIsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8ocixuKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Omx0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxmdC5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGgtMTtpZihyPjApZm9yKHZhciBuLGE9dFswXSxpPWVbMF0sbz10W3JdLWEscz1lW3JdLWksbD0tMTsrK2w8PXI7KW49bC9yLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtsXSsoMS10aGlzLl9iZXRhKSooYStuKm8pLHRoaXMuX2JldGEqZVtsXSsoMS10aGlzLl9iZXRhKSooaStuKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07dmFyIHB0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gMT09PWU/bmV3IGN0KHQpOm5ldyBmdCh0LGUpfXJldHVybiByLmJldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSguODUpO2Z1bmN0aW9uIGR0KHQsZSxyKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1yKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gZ3QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fWd0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpkdCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6ZHQodGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciB2dD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG5ldyBndCh0LGUpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxyfSgwKTtmdW5jdGlvbiBtdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9bXQucHJvdG90eXBlPXthcmVhU3RhcnQ6c3QsYXJlYUVuZDpzdCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OmR0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgeXQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgbXQodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24geHQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXh0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmR0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgYnQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgeHQodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24gX3QodCxlLHIpe3ZhciBuPXQuX3gxLGE9dC5feTEsaT10Ll94MixvPXQuX3kyO2lmKHQuX2wwMV9hPnUpe3ZhciBzPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGw9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO249KG4qcy10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9sLGE9KGEqcy10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9sfWlmKHQuX2wyM19hPnUpe3ZhciBjPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGg9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO2k9KGkqYyt0Ll94MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL2gsbz0obypjK3QuX3kxKnQuX2wyM18yYS1yKnQuX2wxMl8yYSkvaH10Ll9jb250ZXh0LmJlemllckN1cnZlVG8obixhLGksbyx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gd3QodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX13dC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ol90KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIGt0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgd3QodCxlKTpuZXcgZ3QodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBUdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfVR0LnByb3RvdHlwZT17YXJlYVN0YXJ0OnN0LGFyZWFFbmQ6c3QsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6X3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgTXQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyBUdCh0LGUpOm5ldyBtdCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIEF0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9QXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ol90KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIFN0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgQXQodCxlKTpuZXcgeHQodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBFdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gTHQodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIEN0KHQsZSxyKXt2YXIgbj10Ll94MS10Ll94MCxhPWUtdC5feDEsaT0odC5feTEtdC5feTApLyhufHxhPDAmJi0wKSxvPShyLXQuX3kxKS8oYXx8bjwwJiYtMCkscz0oaSphK28qbikvKG4rYSk7cmV0dXJuKEx0KGkpK0x0KG8pKSpNYXRoLm1pbihNYXRoLmFicyhpKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gUHQodCxlKXt2YXIgcj10Ll94MS10Ll94MDtyZXR1cm4gcj8oMyoodC5feTEtdC5feTApL3ItZSkvMjplfWZ1bmN0aW9uIE90KHQsZSxyKXt2YXIgbj10Ll94MCxhPXQuX3kwLGk9dC5feDEsbz10Ll95MSxzPShpLW4pLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxhK3MqZSxpLXMsby1zKnIsaSxvKX1mdW5jdGlvbiB6dCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gSXQodCl7dGhpcy5fY29udGV4dD1uZXcgRHQodCl9ZnVuY3Rpb24gRHQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFJ0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBGdCh0KXt2YXIgZSxyLG49dC5sZW5ndGgtMSxhPW5ldyBBcnJheShuKSxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKTtmb3IoYVswXT0wLGlbMF09MixvWzBdPXRbMF0rMip0WzFdLGU9MTtlPG4tMTsrK2UpYVtlXT0xLGlbZV09NCxvW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoYVtuLTFdPTIsaVtuLTFdPTcsb1tuLTFdPTgqdFtuLTFdK3Rbbl0sZT0xO2U8bjsrK2Upcj1hW2VdL2lbZS0xXSxpW2VdLT1yLG9bZV0tPXIqb1tlLTFdO2ZvcihhW24tMV09b1tuLTFdL2lbbi0xXSxlPW4tMjtlPj0wOy0tZSlhW2VdPShvW2VdLWFbZSsxXSkvaVtlXTtmb3IoaVtuLTFdPSh0W25dK2Fbbi0xXSkvMixlPTA7ZTxuLTE7KytlKWlbZV09Mip0W2UrMV0tYVtlKzFdO3JldHVyblthLGldfWZ1bmN0aW9uIEJ0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1mdW5jdGlvbiBOdCh0LGUpe2lmKChhPXQubGVuZ3RoKT4xKWZvcih2YXIgcixuLGEsaT0xLG89dFtlWzBdXSxzPW8ubGVuZ3RoO2k8YTsrK2kpZm9yKG49byxvPXRbZVtpXV0scj0wO3I8czsrK3Ipb1tyXVsxXSs9b1tyXVswXT1pc05hTihuW3JdWzFdKT9uW3JdWzBdOm5bcl1bMV19ZnVuY3Rpb24ganQodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpOy0tZT49MDspcltlXT1lO3JldHVybiByfWZ1bmN0aW9uIFZ0KHQsZSl7cmV0dXJuIHRbZV19ZnVuY3Rpb24gVXQodCl7dmFyIGU9dC5tYXAocXQpO3JldHVybiBqdCh0KS5zb3J0KGZ1bmN0aW9uKHQscil7cmV0dXJuIGVbdF0tZVtyXX0pfWZ1bmN0aW9uIHF0KHQpe2Zvcih2YXIgZSxyPS0xLG49MCxhPXQubGVuZ3RoLGk9LTEvMDsrK3I8YTspKGU9K3Rbcl1bMV0pPmkmJihpPWUsbj1yKTtyZXR1cm4gbn1mdW5jdGlvbiBIdCh0KXt2YXIgZT10Lm1hcChHdCk7cmV0dXJuIGp0KHQpLnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gZVt0XS1lW3JdfSl9ZnVuY3Rpb24gR3QodCl7Zm9yKHZhciBlLHI9MCxuPS0xLGE9dC5sZW5ndGg7KytuPGE7KShlPSt0W25dWzFdKSYmKHIrPWUpO3JldHVybiByfUV0LnByb3RvdHlwZT17YXJlYVN0YXJ0OnN0LGFyZWFFbmQ6c3QsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfX0senQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOk90KHRoaXMsdGhpcy5fdDAsUHQodGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLE90KHRoaXMsUHQodGhpcyxyPUN0KHRoaXMsdCxlKSkscik7YnJlYWs7ZGVmYXVsdDpPdCh0aGlzLHRoaXMuX3QwLHI9Q3QodGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9cn19fSwoSXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoenQucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXt6dC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LER0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUscixuLGEsaSl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxuLHIsaSxhKX19LFJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sZVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxlWzBdKSwyPT09cil0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLGVbMV0pO2Vsc2UgZm9yKHZhciBuPUZ0KHQpLGE9RnQoZSksaT0wLG89MTtvPHI7KytpLCsrbyl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oblswXVtpXSxhWzBdW2ldLG5bMV1baV0sYVsxXVtpXSx0W29dLGVbb10pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXIpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19LEJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciByPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKHIsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8ocixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19LHQuYXJjPWZ1bmN0aW9uKCl7dmFyIHQ9ZyxvPXYsXz1yKDApLHc9bnVsbCxrPW0sVD15LE09eCxBPW51bGw7ZnVuY3Rpb24gUygpe3ZhciByLGcsdixtPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx5PStvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx4PWsuYXBwbHkodGhpcyxhcmd1bWVudHMpLWYsUz1ULmFwcGx5KHRoaXMsYXJndW1lbnRzKS1mLEU9bihTLXgpLEw9Uz54O2lmKEF8fChBPXI9ZS5wYXRoKCkpLHk8bSYmKGc9eSx5PW0sbT1nKSx5PnUpaWYoRT5wLXUpQS5tb3ZlVG8oeSppKHgpLHkqbCh4KSksQS5hcmMoMCwwLHkseCxTLCFMKSxtPnUmJihBLm1vdmVUbyhtKmkoUyksbSpsKFMpKSxBLmFyYygwLDAsbSxTLHgsTCkpO2Vsc2V7dmFyIEMsUCxPPXgsej1TLEk9eCxEPVMsUj1FLEY9RSxCPU0uYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTj1CPnUmJih3Pyt3LmFwcGx5KHRoaXMsYXJndW1lbnRzKTpjKG0qbSt5KnkpKSxqPXMobih5LW0pLzIsK18uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxWPWosVT1qO2lmKE4+dSl7dmFyIHE9ZChOL20qbChCKSksSD1kKE4veSpsKEIpKTsoUi09MipxKT51PyhJKz1xKj1MPzE6LTEsRC09cSk6KFI9MCxJPUQ9KHgrUykvMiksKEYtPTIqSCk+dT8oTys9SCo9TD8xOi0xLHotPUgpOihGPTAsTz16PSh4K1MpLzIpfXZhciBHPXkqaShPKSxZPXkqbChPKSxXPW0qaShEKSxYPW0qbChEKTtpZihqPnUpe3ZhciBaLEo9eSppKHopLEs9eSpsKHopLFE9bSppKEkpLCQ9bSpsKEkpO2lmKEU8aCYmKFo9ZnVuY3Rpb24odCxlLHIsbixhLGksbyxzKXt2YXIgbD1yLXQsYz1uLWUsaD1vLWEsZj1zLWkscD1mKmwtaCpjO2lmKCEocCpwPHUpKXJldHVyblt0KyhwPShoKihlLWkpLWYqKHQtYSkpL3ApKmwsZStwKmNdfShHLFksUSwkLEosSyxXLFgpKSl7dmFyIHR0PUctWlswXSxldD1ZLVpbMV0scnQ9Si1aWzBdLG50PUstWlsxXSxhdD0xL2woKCh2PSh0dCpydCtldCpudCkvKGModHQqdHQrZXQqZXQpKmMocnQqcnQrbnQqbnQpKSk+MT8wOnY8LTE/aDpNYXRoLmFjb3ModikpLzIpLGl0PWMoWlswXSpaWzBdK1pbMV0qWlsxXSk7Vj1zKGosKG0taXQpLyhhdC0xKSksVT1zKGosKHktaXQpLyhhdCsxKSl9fUY+dT9VPnU/KEM9YihRLCQsRyxZLHksVSxMKSxQPWIoSixLLFcsWCx5LFUsTCksQS5tb3ZlVG8oQy5jeCtDLngwMSxDLmN5K0MueTAxKSxVPGo/QS5hcmMoQy5jeCxDLmN5LFUsYShDLnkwMSxDLngwMSksYShQLnkwMSxQLngwMSksIUwpOihBLmFyYyhDLmN4LEMuY3ksVSxhKEMueTAxLEMueDAxKSxhKEMueTExLEMueDExKSwhTCksQS5hcmMoMCwwLHksYShDLmN5K0MueTExLEMuY3grQy54MTEpLGEoUC5jeStQLnkxMSxQLmN4K1AueDExKSwhTCksQS5hcmMoUC5jeCxQLmN5LFUsYShQLnkxMSxQLngxMSksYShQLnkwMSxQLngwMSksIUwpKSk6KEEubW92ZVRvKEcsWSksQS5hcmMoMCwwLHksTyx6LCFMKSk6QS5tb3ZlVG8oRyxZKSxtPnUmJlI+dT9WPnU/KEM9YihXLFgsSixLLG0sLVYsTCksUD1iKEcsWSxRLCQsbSwtVixMKSxBLmxpbmVUbyhDLmN4K0MueDAxLEMuY3krQy55MDEpLFY8aj9BLmFyYyhDLmN4LEMuY3ksVixhKEMueTAxLEMueDAxKSxhKFAueTAxLFAueDAxKSwhTCk6KEEuYXJjKEMuY3gsQy5jeSxWLGEoQy55MDEsQy54MDEpLGEoQy55MTEsQy54MTEpLCFMKSxBLmFyYygwLDAsbSxhKEMuY3krQy55MTEsQy5jeCtDLngxMSksYShQLmN5K1AueTExLFAuY3grUC54MTEpLEwpLEEuYXJjKFAuY3gsUC5jeSxWLGEoUC55MTEsUC54MTEpLGEoUC55MDEsUC54MDEpLCFMKSkpOkEuYXJjKDAsMCxtLEQsSSxMKTpBLmxpbmVUbyhXLFgpfWVsc2UgQS5tb3ZlVG8oMCwwKTtpZihBLmNsb3NlUGF0aCgpLHIpcmV0dXJuIEE9bnVsbCxyKyIifHxudWxsfXJldHVybiBTLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGU9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHI9KCtrLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK1QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLWgvMjtyZXR1cm5baShyKSplLGwocikqZV19LFMuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxTKTp0fSxTLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksUyk6b30sUy5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTpffSxTLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTp3fSxTLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxTKTprfSxTLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksUyk6VH0sUy5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLFMpOk19LFMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT1udWxsPT10P251bGw6dCxTKTpBfSxTfSx0LmFyZWE9QSx0LmxpbmU9TSx0LnBpZT1mdW5jdGlvbigpe3ZhciB0PUUsZT1TLG49bnVsbCxhPXIoMCksaT1yKHApLG89cigwKTtmdW5jdGlvbiBzKHIpe3ZhciBzLGwsYyx1LGgsZj1yLmxlbmd0aCxkPTAsZz1uZXcgQXJyYXkoZiksdj1uZXcgQXJyYXkoZiksbT0rYS5hcHBseSh0aGlzLGFyZ3VtZW50cykseT1NYXRoLm1pbihwLE1hdGgubWF4KC1wLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLW0pKSx4PU1hdGgubWluKE1hdGguYWJzKHkpL2Ysby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooeTwwPy0xOjEpO2ZvcihzPTA7czxmOysrcykoaD12W2dbc109c109K3QocltzXSxzLHIpKT4wJiYoZCs9aCk7Zm9yKG51bGwhPWU/Zy5zb3J0KGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodlt0XSx2W3JdKX0pOm51bGwhPW4mJmcuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBuKHJbdF0scltlXSl9KSxzPTAsYz1kPyh5LWYqYikvZDowO3M8ZjsrK3MsbT11KWw9Z1tzXSx1PW0rKChoPXZbbF0pPjA/aCpjOjApK2IsdltsXT17ZGF0YTpyW2xdLGluZGV4OnMsdmFsdWU6aCxzdGFydEFuZ2xlOm0sZW5kQW5nbGU6dSxwYWRBbmdsZTp4fTtyZXR1cm4gdn1yZXR1cm4gcy52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoK2UpLHMpOnR9LHMuc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxzKTplfSxzLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwscyk6bn0scy5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCkscyk6YX0scy5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHMpOml9LHMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxzKTpvfSxzfSx0LmFyZWFSYWRpYWw9SSx0LnJhZGlhbEFyZWE9SSx0LmxpbmVSYWRpYWw9eix0LnJhZGlhbExpbmU9eix0LnBvaW50UmFkaWFsPUQsdC5saW5rSG9yaXpvbnRhbD1mdW5jdGlvbigpe3JldHVybiBOKGopfSx0LmxpbmtWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiBOKFYpfSx0LmxpbmtSYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD1OKFUpO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9LHQuc3ltYm9sPWZ1bmN0aW9uKCl7dmFyIHQ9cihxKSxuPXIoNjQpLGE9bnVsbDtmdW5jdGlvbiBpKCl7dmFyIHI7aWYoYXx8KGE9cj1lLnBhdGgoKSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhhLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscilyZXR1cm4gYT1udWxsLHIrIiJ8fG51bGx9cmV0dXJuIGkudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoZSksaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksaSk6bn0saS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/bnVsbDp0LGkpOmF9LGl9LHQuc3ltYm9scz1vdCx0LnN5bWJvbENpcmNsZT1xLHQuc3ltYm9sQ3Jvc3M9SCx0LnN5bWJvbERpYW1vbmQ9Vyx0LnN5bWJvbFNxdWFyZT1RLHQuc3ltYm9sU3Rhcj1LLHQuc3ltYm9sVHJpYW5nbGU9dHQsdC5zeW1ib2xXeWU9aXQsdC5jdXJ2ZUJhc2lzQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdXQodCl9LHQuY3VydmVCYXNpc09wZW49ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBodCh0KX0sdC5jdXJ2ZUJhc2lzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgY3QodCl9LHQuY3VydmVCdW5kbGU9cHQsdC5jdXJ2ZUNhcmRpbmFsQ2xvc2VkPXl0LHQuY3VydmVDYXJkaW5hbE9wZW49YnQsdC5jdXJ2ZUNhcmRpbmFsPXZ0LHQuY3VydmVDYXRtdWxsUm9tQ2xvc2VkPU10LHQuY3VydmVDYXRtdWxsUm9tT3Blbj1TdCx0LmN1cnZlQ2F0bXVsbFJvbT1rdCx0LmN1cnZlTGluZWFyQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRXQodCl9LHQuY3VydmVMaW5lYXI9dyx0LmN1cnZlTW9ub3RvbmVYPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgenQodCl9LHQuY3VydmVNb25vdG9uZVk9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBJdCh0KX0sdC5jdXJ2ZU5hdHVyYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBSdCh0KX0sdC5jdXJ2ZVN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCdCh0LC41KX0sdC5jdXJ2ZVN0ZXBBZnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEJ0KHQsMSl9LHQuY3VydmVTdGVwQmVmb3JlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnQodCwwKX0sdC5zdGFjaz1mdW5jdGlvbigpe3ZhciB0PXIoW10pLGU9anQsbj1OdCxhPVZ0O2Z1bmN0aW9uIGkocil7dmFyIGksbyxzPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGw9ci5sZW5ndGgsYz1zLmxlbmd0aCx1PW5ldyBBcnJheShjKTtmb3IoaT0wO2k8YzsrK2kpe2Zvcih2YXIgaCxmPXNbaV0scD11W2ldPW5ldyBBcnJheShsKSxkPTA7ZDxsOysrZClwW2RdPWg9WzAsK2EocltkXSxmLGQscildLGguZGF0YT1yW2RdO3Aua2V5PWZ9Zm9yKGk9MCxvPWUodSk7aTxjOysraSl1W29baV1dLmluZGV4PWk7cmV0dXJuIG4odSxvKSx1fXJldHVybiBpLmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKFIuY2FsbChlKSksaSk6dH0saS52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLGkpOmF9LGkub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9qdDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoUi5jYWxsKHQpKSxpKTplfSxpLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P050OnQsaSk6bn0saX0sdC5zdGFja09mZnNldEV4cGFuZD1mdW5jdGlvbih0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixhLGk9MCxvPXRbMF0ubGVuZ3RoO2k8bzsrK2kpe2ZvcihhPXI9MDtyPG47KytyKWErPXRbcl1baV1bMV18fDA7aWYoYSlmb3Iocj0wO3I8bjsrK3IpdFtyXVtpXVsxXS89YX1OdCh0LGUpfX0sdC5zdGFja09mZnNldERpdmVyZ2luZz1mdW5jdGlvbih0LGUpe2lmKChzPXQubGVuZ3RoKT4xKWZvcih2YXIgcixuLGEsaSxvLHMsbD0wLGM9dFtlWzBdXS5sZW5ndGg7bDxjOysrbClmb3IoaT1vPTAscj0wO3I8czsrK3IpKGE9KG49dFtlW3JdXVtsXSlbMV0tblswXSk+PTA/KG5bMF09aSxuWzFdPWkrPWEpOmE8MD8oblsxXT1vLG5bMF09bys9YSk6blswXT1pfSx0LnN0YWNrT2Zmc2V0Tm9uZT1OdCx0LnN0YWNrT2Zmc2V0U2lsaG91ZXR0ZT1mdW5jdGlvbih0LGUpe2lmKChyPXQubGVuZ3RoKT4wKXtmb3IodmFyIHIsbj0wLGE9dFtlWzBdXSxpPWEubGVuZ3RoO248aTsrK24pe2Zvcih2YXIgbz0wLHM9MDtvPHI7KytvKXMrPXRbb11bbl1bMV18fDA7YVtuXVsxXSs9YVtuXVswXT0tcy8yfU50KHQsZSl9fSx0LnN0YWNrT2Zmc2V0V2lnZ2xlPWZ1bmN0aW9uKHQsZSl7aWYoKGE9dC5sZW5ndGgpPjAmJihuPShyPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4sYSxpPTAsbz0xO288bjsrK28pe2Zvcih2YXIgcz0wLGw9MCxjPTA7czxhOysrcyl7Zm9yKHZhciB1PXRbZVtzXV0saD11W29dWzFdfHwwLGY9KGgtKHVbby0xXVsxXXx8MCkpLzIscD0wO3A8czsrK3Ape3ZhciBkPXRbZVtwXV07Zis9KGRbb11bMV18fDApLShkW28tMV1bMV18fDApfWwrPWgsYys9ZipofXJbby0xXVsxXSs9cltvLTFdWzBdPWksbCYmKGktPWMvbCl9cltvLTFdWzFdKz1yW28tMV1bMF09aSxOdCh0LGUpfX0sdC5zdGFja09yZGVyQXBwZWFyYW5jZT1VdCx0LnN0YWNrT3JkZXJBc2NlbmRpbmc9SHQsdC5zdGFja09yZGVyRGVzY2VuZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gSHQodCkucmV2ZXJzZSgpfSx0LnN0YWNrT3JkZXJJbnNpZGVPdXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXQubGVuZ3RoLGE9dC5tYXAoR3QpLGk9VXQodCksbz0wLHM9MCxsPVtdLGM9W107Zm9yKGU9MDtlPG47KytlKXI9aVtlXSxvPHM/KG8rPWFbcl0sbC5wdXNoKHIpKToocys9YVtyXSxjLnB1c2gocikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQobCl9LHQuc3RhY2tPcmRlck5vbmU9anQsdC5zdGFja09yZGVyUmV2ZXJzZT1mdW5jdGlvbih0KXtyZXR1cm4ganQodCkucmV2ZXJzZSgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LCJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP2Eocix0KCJkMy1wYXRoIikpOmEobi5kMz1uLmQzfHx7fSxuLmQzKX0seyJkMy1wYXRoIjoxNjF9XSwxNjQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtuPXRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlLHIsbj0wLGE9MCxpPTAsbz0xZTMscz0wLGw9MCxjPTAsdT0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxoPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIGYoKXtyZXR1cm4gbHx8KGgocCksbD11Lm5vdygpK2MpfWZ1bmN0aW9uIHAoKXtsPTB9ZnVuY3Rpb24gZCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIG4ucmVzdGFydCh0LGUsciksbn1mdW5jdGlvbiB2KCl7ZigpLCsrbjtmb3IodmFyIHQscj1lO3I7KSh0PWwtci5fdGltZSk+PTAmJnIuX2NhbGwuY2FsbChudWxsLHQpLHI9ci5fbmV4dDstLW59ZnVuY3Rpb24gbSgpe2w9KHM9dS5ub3coKSkrYyxuPWE9MDt0cnl7digpfWZpbmFsbHl7bj0wLGZ1bmN0aW9uKCl7dmFyIHQsbixhPWUsaT0xLzA7Zm9yKDthOylhLl9jYWxsPyhpPmEuX3RpbWUmJihpPWEuX3RpbWUpLHQ9YSxhPWEuX25leHQpOihuPWEuX25leHQsYS5fbmV4dD1udWxsLGE9dD90Ll9uZXh0PW46ZT1uKTtyPXQseChpKX0oKSxsPTB9fWZ1bmN0aW9uIHkoKXt2YXIgdD11Lm5vdygpLGU9dC1zO2U+byYmKGMtPWUscz10KX1mdW5jdGlvbiB4KHQpe258fChhJiYoYT1jbGVhclRpbWVvdXQoYSkpLHQtbD4yND8odDwxLzAmJihhPXNldFRpbWVvdXQobSx0LXUubm93KCktYykpLGkmJihpPWNsZWFySW50ZXJ2YWwoaSkpKTooaXx8KHM9dS5ub3coKSxpPXNldEludGVydmFsKHksbykpLG49MSxoKG0pKSl9ZC5wcm90b3R5cGU9Zy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmQscmVzdGFydDpmdW5jdGlvbih0LG4sYSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTthPShudWxsPT1hP2YoKTorYSkrKG51bGw9PW4/MDorbiksdGhpcy5fbmV4dHx8cj09PXRoaXN8fChyP3IuX25leHQ9dGhpczplPXRoaXMscj10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1hLHgoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAseCgpKX19LHQubm93PWYsdC50aW1lcj1nLHQudGltZXJGbHVzaD12LHQudGltZW91dD1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIGU9bnVsbD09ZT8wOitlLG4ucmVzdGFydChmdW5jdGlvbihyKXtuLnN0b3AoKSx0KHIrZSl9LGUsciksbn0sdC5pbnRlcnZhbD1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IGQsYT1lO3JldHVybiBudWxsPT1lPyhuLnJlc3RhcnQodCxlLHIpLG4pOihlPStlLHI9bnVsbD09cj9mKCk6K3Isbi5yZXN0YXJ0KGZ1bmN0aW9uIGkobyl7bys9YSxuLnJlc3RhcnQoaSxhKz1lLHIpLHQobyl9LGUsciksbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLmQzPW4uZDN8fHt9KX0se31dLDE2NTpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpe3ZhciB0PXt2ZXJzaW9uOiIzLjUuMTcifSxyPVtdLnNsaWNlLG49ZnVuY3Rpb24odCl7cmV0dXJuIHIuY2FsbCh0KX0sYT10aGlzLmRvY3VtZW50O2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQmJih0Lm93bmVyRG9jdW1lbnR8fHQuZG9jdW1lbnR8fHQpLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBvKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXcpfWlmKGEpdHJ5e24oYS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcylbMF0ubm9kZVR5cGV9Y2F0Y2godCl7bj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPXRbZV07cmV0dXJuIHJ9fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSxhKXRyeXthLmNyZWF0ZUVsZW1lbnQoIkRJViIpLnN0eWxlLnNldFByb3BlcnR5KCJvcGFjaXR5IiwwLCIiKX1jYXRjaCh0KXt2YXIgcz10aGlzLkVsZW1lbnQucHJvdG90eXBlLGw9cy5zZXRBdHRyaWJ1dGUsYz1zLnNldEF0dHJpYnV0ZU5TLHU9dGhpcy5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSxoPXUuc2V0UHJvcGVydHk7cy5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtsLmNhbGwodGhpcyx0LGUrIiIpfSxzLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxyKXtjLmNhbGwodGhpcyx0LGUscisiIil9LHUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2guY2FsbCh0aGlzLHQsZSsiIixyKX19ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBwKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24gZCh0KXtyZXR1cm4haXNOYU4odCl9ZnVuY3Rpb24gZyh0KXtyZXR1cm57bGVmdDpmdW5jdGlvbihlLHIsbixhKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYobj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihhPWUubGVuZ3RoKTtuPGE7KXt2YXIgaT1uK2E+Pj4xO3QoZVtpXSxyKTwwP249aSsxOmE9aX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24oZSxyLG4sYSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoYT1lLmxlbmd0aCk7bjxhOyl7dmFyIGk9bithPj4+MTt0KGVbaV0scik+MD9hPWk6bj1pKzF9cmV0dXJuIG59fX10LmFzY2VuZGluZz1mLHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5taW49ZnVuY3Rpb24odCxlKXt2YXIgcixuLGE9LTEsaT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KG49dFthXSkmJm4+PW4pe3I9bjticmVha31mb3IoOysrYTxpOyludWxsIT0obj10W2FdKSYmcj5uJiYocj1uKX1lbHNle2Zvcig7KythPGk7KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbYV0sYSkpJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2E8aTspbnVsbCE9KG49ZS5jYWxsKHQsdFthXSxhKSkmJnI+biYmKHI9bil9cmV0dXJuIHJ9LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhPS0xLGk9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KythPGk7KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2E8aTspbnVsbCE9KG49dFthXSkmJm4+ciYmKHI9bil9ZWxzZXtmb3IoOysrYTxpOylpZihudWxsIT0obj1lLmNhbGwodCx0W2FdLGEpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KythPGk7KW51bGwhPShuPWUuY2FsbCh0LHRbYV0sYSkpJiZuPnImJihyPW4pfXJldHVybiByfSx0LmV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxpPS0xLG89dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPG87KWlmKG51bGwhPShuPXRbaV0pJiZuPj1uKXtyPWE9bjticmVha31mb3IoOysraTxvOyludWxsIT0obj10W2ldKSYmKHI+biYmKHI9biksYTxuJiYoYT1uKSl9ZWxzZXtmb3IoOysraTxvOylpZihudWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj49bil7cj1hPW47YnJlYWt9Zm9yKDsrK2k8bzspbnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJihyPm4mJihyPW4pLGE8biYmKGE9bikpfXJldHVybltyLGFdfSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxhPXQubGVuZ3RoLGk9LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2k8YTspZChyPSt0W2ldKSYmKG4rPXIpO2Vsc2UgZm9yKDsrK2k8YTspZChyPStlLmNhbGwodCx0W2ldLGkpKSYmKG4rPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsYT10Lmxlbmd0aCxpPS0xLG89YTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysraTxhOylkKHI9cCh0W2ldKSk/bis9cjotLW87ZWxzZSBmb3IoOysraTxhOylkKHI9cChlLmNhbGwodCx0W2ldLGkpKSk/bis9cjotLW87aWYobylyZXR1cm4gbi9vfSx0LnF1YW50aWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQubGVuZ3RoLTEpKmUrMSxuPU1hdGguZmxvb3IociksYT0rdFtuLTFdLGk9ci1uO3JldHVybiBpP2EraSoodFtuXS1hKTphfSx0Lm1lZGlhbj1mdW5jdGlvbihlLHIpe3ZhciBuLGE9W10saT1lLmxlbmd0aCxvPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytvPGk7KWQobj1wKGVbb10pKSYmYS5wdXNoKG4pO2Vsc2UgZm9yKDsrK288aTspZChuPXAoci5jYWxsKGUsZVtvXSxvKSkpJiZhLnB1c2gobik7aWYoYS5sZW5ndGgpcmV0dXJuIHQucXVhbnRpbGUoYS5zb3J0KGYpLC41KX0sdC52YXJpYW5jZT1mdW5jdGlvbih0LGUpe3ZhciByLG4sYT10Lmxlbmd0aCxpPTAsbz0wLHM9LTEsbD0wO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytzPGE7KWQocj1wKHRbc10pKSYmKG8rPShuPXItaSkqKHItKGkrPW4vKytsKSkpO2Vsc2UgZm9yKDsrK3M8YTspZChyPXAoZS5jYWxsKHQsdFtzXSxzKSkpJiYobys9KG49ci1pKSooci0oaSs9bi8rK2wpKSk7aWYobD4xKXJldHVybiBvLyhsLTEpfSx0LmRldmlhdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQudmFyaWFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBlP01hdGguc3FydChlKTplfTt2YXIgdj1nKGYpO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHQubGVuZ3RofXQuYmlzZWN0TGVmdD12LmxlZnQsdC5iaXNlY3Q9dC5iaXNlY3RSaWdodD12LnJpZ2h0LHQuYmlzZWN0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGcoMT09PXQubGVuZ3RoP2Z1bmN0aW9uKGUscil7cmV0dXJuIGYodChlKSxyKX06dCl9LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7KGk9YXJndW1lbnRzLmxlbmd0aCk8MyYmKHI9dC5sZW5ndGgsaTwyJiYoZT0wKSk7Zm9yKHZhciBuLGEsaT1yLWU7aTspYT1NYXRoLnJhbmRvbSgpKmktLXwwLG49dFtpK2VdLHRbaStlXT10W2ErZV0sdFthK2VdPW47cmV0dXJuIHR9LHQucGVybXV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sdC5wYWlycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLTEsbj10WzBdLGE9bmV3IEFycmF5KHI8MD8wOnIpO2U8cjspYVtlXT1bbixuPXRbKytlXV07cmV0dXJuIGF9LHQudHJhbnNwb3NlPWZ1bmN0aW9uKGUpe2lmKCEoaT1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciByPS0xLG49dC5taW4oZSxtKSxhPW5ldyBBcnJheShuKTsrK3I8bjspZm9yKHZhciBpLG89LTEscz1hW3JdPW5ldyBBcnJheShpKTsrK288aTspc1tvXT1lW29dW3JdO3JldHVybiBhfSx0LnppcD1mdW5jdGlvbigpe3JldHVybiB0LnRyYW5zcG9zZShhcmd1bWVudHMpfSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfSx0LnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LHQuZW50cmllcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2goe2tleTpyLHZhbHVlOnRbcl19KTtyZXR1cm4gZX0sdC5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGE9dC5sZW5ndGgsaT0tMSxvPTA7KytpPGE7KW8rPXRbaV0ubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKTstLWE+PTA7KWZvcihlPShuPXRbYV0pLmxlbmd0aDstLWU+PTA7KXJbLS1vXT1uW2VdO3JldHVybiByfTt2YXIgeT1NYXRoLmFicztmdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByIGluIGUpT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLHIse3ZhbHVlOmVbcl0sZW51bWVyYWJsZTohMX0pfWZ1bmN0aW9uIGIoKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX10LnJhbmdlPWZ1bmN0aW9uKHQsZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihyPTEsYXJndW1lbnRzLmxlbmd0aDwyJiYoZT10LHQ9MCkpLChlLXQpL3I9PTEvMCl0aHJvdyBuZXcgRXJyb3IoImluZmluaXRlIHJhbmdlIik7dmFyIG4sYT1bXSxpPWZ1bmN0aW9uKHQpe3ZhciBlPTE7Zm9yKDt0KmUlMTspZSo9MTA7cmV0dXJuIGV9KHkocikpLG89LTE7aWYodCo9aSxlKj1pLChyKj1pKTwwKWZvcig7KG49dCtyKisrbyk+ZTspYS5wdXNoKG4vaSk7ZWxzZSBmb3IoOyhuPXQrciorK28pPGU7KWEucHVzaChuL2kpO3JldHVybiBhfSx0Lm1hcD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBiO2lmKHQgaW5zdGFuY2VvZiBiKXQuZm9yRWFjaChmdW5jdGlvbih0LGUpe3Iuc2V0KHQsZSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuLGE9LTEsaT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYTxpOylyLnNldChhLHRbYV0pO2Vsc2UgZm9yKDsrK2E8aTspci5zZXQoZS5jYWxsKHQsbj10W2FdLGEpLG4pfWVsc2UgZm9yKHZhciBvIGluIHQpci5zZXQobyx0W29dKTtyZXR1cm4gcn07dmFyIF89Il9fcHJvdG9fXyIsdz0iXDAiO2Z1bmN0aW9uIGsodCl7cmV0dXJuKHQrPSIiKT09PV98fHRbMF09PT13P3crdDp0fWZ1bmN0aW9uIFQodCl7cmV0dXJuKHQrPSIiKVswXT09PXc/dC5zbGljZSgxKTp0fWZ1bmN0aW9uIE0odCl7cmV0dXJuIGsodClpbiB0aGlzLl99ZnVuY3Rpb24gQSh0KXtyZXR1cm4odD1rKHQpKWluIHRoaXMuXyYmZGVsZXRlIHRoaXMuX1t0XX1mdW5jdGlvbiBTKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2goVChlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gRSgpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMuXykrK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gTCgpe2Zvcih2YXIgdCBpbiB0aGlzLl8pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQygpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfWZ1bmN0aW9uIFAodCl7cmV0dXJuIHR9ZnVuY3Rpb24gTyh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ci5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q6bn19ZnVuY3Rpb24geih0LGUpe2lmKGUgaW4gdClyZXR1cm4gZTtlPWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtmb3IodmFyIHI9MCxuPUkubGVuZ3RoO3I8bjsrK3Ipe3ZhciBhPUlbcl0rZTtpZihhIGluIHQpcmV0dXJuIGF9fXgoYix7aGFzOk0sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bayh0KV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9bayh0KV09ZX0scmVtb3ZlOkEsa2V5czpTLHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKHRoaXMuX1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaCh7a2V5OlQoZSksdmFsdWU6dGhpcy5fW2VdfSk7cmV0dXJuIHR9LHNpemU6RSxlbXB0eTpMLGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxUKGUpLHRoaXMuX1tlXSl9fSksdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGE9W10saT1bXTtmdW5jdGlvbiBvKHQsaSxzKXtpZihzPj1hLmxlbmd0aClyZXR1cm4gcj9yLmNhbGwobixpKTplP2kuc29ydChlKTppO2Zvcih2YXIgbCxjLHUsaCxmPS0xLHA9aS5sZW5ndGgsZD1hW3MrK10sZz1uZXcgYjsrK2Y8cDspKGg9Zy5nZXQobD1kKGM9aVtmXSkpKT9oLnB1c2goYyk6Zy5zZXQobCxbY10pO3JldHVybiB0PyhjPXQoKSx1PWZ1bmN0aW9uKGUscil7Yy5zZXQoZSxvKHQscixzKSl9KTooYz17fSx1PWZ1bmN0aW9uKGUscil7Y1tlXT1vKHQscixzKX0pLGcuZm9yRWFjaCh1KSxjfXJldHVybiBuLm1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBvKGUsdCwwKX0sbi5lbnRyaWVzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiB0KGUscil7aWYocj49YS5sZW5ndGgpcmV0dXJuIGU7dmFyIG49W10sbz1pW3IrK107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLGEpe24ucHVzaCh7a2V5OmUsdmFsdWVzOnQoYSxyKX0pfSksbz9uLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gbyh0LmtleSxlLmtleSl9KTpufShvKHQubWFwLGUsMCksMCl9LG4ua2V5PWZ1bmN0aW9uKHQpe3JldHVybiBhLnB1c2godCksbn0sbi5zb3J0S2V5cz1mdW5jdGlvbih0KXtyZXR1cm4gaVthLmxlbmd0aC0xXT10LG59LG4uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gZT10LG59LG4ucm9sbHVwPWZ1bmN0aW9uKHQpe3JldHVybiByPXQsbn0sbn0sdC5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEM7aWYodClmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZS5hZGQodFtyXSk7cmV0dXJuIGV9LHgoQyx7aGFzOk0sYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bayh0Kz0iIildPSEwLHR9LHJlbW92ZTpBLHZhbHVlczpTLHNpemU6RSxlbXB0eTpMLGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxUKGUpKX19KSx0LmJlaGF2aW9yPXt9LHQucmViaW5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49MSxhPWFyZ3VtZW50cy5sZW5ndGg7KytuPGE7KXRbcj1hcmd1bWVudHNbbl1dPU8odCxlLGVbcl0pO3JldHVybiB0fTt2YXIgST1bIndlYmtpdCIsIm1zIiwibW96IiwiTW96IiwibyIsIk8iXTtmdW5jdGlvbiBEKCl7fWZ1bmN0aW9uIFIoKXt9ZnVuY3Rpb24gRih0KXt2YXIgZT1bXSxyPW5ldyBiO2Z1bmN0aW9uIG4oKXtmb3IodmFyIHIsbj1lLGE9LTEsaT1uLmxlbmd0aDsrK2E8aTspKHI9blthXS5vbikmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0fXJldHVybiBuLm9uPWZ1bmN0aW9uKG4sYSl7dmFyIGksbz1yLmdldChuKTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP28mJm8ub246KG8mJihvLm9uPW51bGwsZT1lLnNsaWNlKDAsaT1lLmluZGV4T2YobykpLmNvbmNhdChlLnNsaWNlKGkrMSkpLHIucmVtb3ZlKG4pKSxhJiZlLnB1c2goci5zZXQobix7b246YX0pKSx0KX0sbn1mdW5jdGlvbiBCKCl7dC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIE4oKXtmb3IodmFyIGUscj10LmV2ZW50O2U9ci5zb3VyY2VFdmVudDspcj1lO3JldHVybiByfWZ1bmN0aW9uIGooZSl7Zm9yKHZhciByPW5ldyBSLG49MCxhPWFyZ3VtZW50cy5sZW5ndGg7KytuPGE7KXJbYXJndW1lbnRzW25dXT1GKHIpO3JldHVybiByLm9mPWZ1bmN0aW9uKG4sYSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3RyeXt2YXIgbz1pLnNvdXJjZUV2ZW50PXQuZXZlbnQ7aS50YXJnZXQ9ZSx0LmV2ZW50PWkscltpLnR5cGVdLmFwcGx5KG4sYSl9ZmluYWxseXt0LmV2ZW50PW99fX0scn10LmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBSLGU9LTEscj1hcmd1bWVudHMubGVuZ3RoOysrZTxyOyl0W2FyZ3VtZW50c1tlXV09Rih0KTtyZXR1cm4gdH0sUi5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXt2YXIgcj10LmluZGV4T2YoIi4iKSxuPSIiO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdClyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXNbdF0ub24obik6dGhpc1t0XS5vbihuLGUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihudWxsPT1lKWZvcih0IGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpc1t0XS5vbihuLG51bGwpO3JldHVybiB0aGlzfX0sdC5ldmVudD1udWxsLHQucmVxdW90ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKFYsIlxcJCYiKX07dmFyIFY9L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nLFU9e30uX19wcm90b19fP2Z1bmN0aW9uKHQsZSl7dC5fX3Byb3RvX189ZX06ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19O2Z1bmN0aW9uIHEodCl7cmV0dXJuIFUodCxXKSx0fXZhciBIPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUucXVlcnlTZWxlY3Rvcih0KX0sRz1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3JBbGwodCl9LFk9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1hdGNoZXN8fHRbeih0LCJtYXRjaGVzU2VsZWN0b3IiKV07cmV0dXJuKFk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5jYWxsKHQsZSl9KSh0LGUpfTsiZnVuY3Rpb24iPT10eXBlb2YgU2l6emxlJiYoSD1mdW5jdGlvbih0LGUpe3JldHVybiBTaXp6bGUodCxlKVswXXx8bnVsbH0sRz1TaXp6bGUsWT1TaXp6bGUubWF0Y2hlc1NlbGVjdG9yKSx0LnNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0LnNlbGVjdChhLmRvY3VtZW50RWxlbWVudCl9O3ZhciBXPXQuc2VsZWN0aW9uLnByb3RvdHlwZT1bXTtmdW5jdGlvbiBYKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gSCh0LHRoaXMpfX1mdW5jdGlvbiBaKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gRyh0LHRoaXMpfX1XLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxpPVtdO3Q9WCh0KTtmb3IodmFyIG89LTEscz10aGlzLmxlbmd0aDsrK288czspe2kucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9KG49dGhpc1tvXSkucGFyZW50Tm9kZTtmb3IodmFyIGw9LTEsYz1uLmxlbmd0aDsrK2w8YzspKGE9bltsXSk/KGUucHVzaChyPXQuY2FsbChhLGEuX19kYXRhX18sbCxvKSksciYmIl9fZGF0YV9fImluIGEmJihyLl9fZGF0YV9fPWEuX19kYXRhX18pKTplLnB1c2gobnVsbCl9cmV0dXJuIHEoaSl9LFcuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYT1bXTt0PVoodCk7Zm9yKHZhciBpPS0xLG89dGhpcy5sZW5ndGg7KytpPG87KWZvcih2YXIgcz10aGlzW2ldLGw9LTEsYz1zLmxlbmd0aDsrK2w8YzspKHI9c1tsXSkmJihhLnB1c2goZT1uKHQuY2FsbChyLHIuX19kYXRhX18sbCxpKSkpLGUucGFyZW50Tm9kZT1yKTtyZXR1cm4gcShhKX07dmFyIEo9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEs9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOkoseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBRKGUscil7cmV0dXJuIGU9dC5ucy5xdWFsaWZ5KGUpLG51bGw9PXI/ZS5sb2NhbD9mdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX06ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX06ImZ1bmN0aW9uIj09dHlwZW9mIHI/ZS5sb2NhbD9mdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXQ/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfTpmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXQ/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6dGhpcy5zZXRBdHRyaWJ1dGUoZSx0KX06ZS5sb2NhbD9mdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfTpmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uICQodCl7cmV0dXJuIHQudHJpbSgpLnJlcGxhY2UoL1xzKy9nLCIgIil9ZnVuY3Rpb24gdHQoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3QucmVxdW90ZShlKSsiKD86XFxzK3wkKSIsImciKX1mdW5jdGlvbiBldCh0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHJ0KHQsZSl7dmFyIHI9KHQ9ZXQodCkubWFwKG50KSkubGVuZ3RoO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7Zm9yKHZhciBuPS0xLGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7KytuPHI7KXRbbl0odGhpcyxhKX06ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPHI7KXRbbl0odGhpcyxlKX19ZnVuY3Rpb24gbnQodCl7dmFyIGU9dHQodCk7cmV0dXJuIGZ1bmN0aW9uKHIsbil7aWYoYT1yLmNsYXNzTGlzdClyZXR1cm4gbj9hLmFkZCh0KTphLnJlbW92ZSh0KTt2YXIgYT1yLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiI7bj8oZS5sYXN0SW5kZXg9MCxlLnRlc3QoYSl8fHIuc2V0QXR0cmlidXRlKCJjbGFzcyIsJChhKyIgIit0KSkpOnIuc2V0QXR0cmlidXRlKCJjbGFzcyIsJChhLnJlcGxhY2UoZSwiICIpKSl9fWZ1bmN0aW9uIGF0KHQsZSxyKXtyZXR1cm4gbnVsbD09ZT9mdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuLHIpfTpmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLHIpfX1mdW5jdGlvbiBpdCh0LGUpe3JldHVybiBudWxsPT1lP2Z1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPXJ9OmZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBvdChlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9lOihlPXQubnMucXVhbGlmeShlKSkubG9jYWw/ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09SiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09Sj90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gc3QoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBsdCh0KXtyZXR1cm57X19kYXRhX186dH19ZnVuY3Rpb24gY3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFkodGhpcyx0KX19ZnVuY3Rpb24gdXQodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZm9yKHZhciBhLGk9dFtyXSxvPTAscz1pLmxlbmd0aDtvPHM7bysrKShhPWlbb10pJiZlKGEsbyxyKTtyZXR1cm4gdH1mdW5jdGlvbiBodCh0KXtyZXR1cm4gVSh0LGZ0KSx0fXQubnM9e3ByZWZpeDpLLHF1YWxpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCI6Iikscj10O3JldHVybiBlPj0wJiYieG1sbnMiIT09KHI9dC5zbGljZSgwLGUpKSYmKHQ9dC5zbGljZShlKzEpKSxLLmhhc093blByb3BlcnR5KHIpP3tzcGFjZTpLW3JdLGxvY2FsOnR9OnR9fSxXLmF0dHI9ZnVuY3Rpb24oZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIG49dGhpcy5ub2RlKCk7cmV0dXJuKGU9dC5ucy5xdWFsaWZ5KGUpKS5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUoZSl9Zm9yKHIgaW4gZSl0aGlzLmVhY2goUShyLGVbcl0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKFEoZSxyKSl9LFcuY2xhc3NlZD1mdW5jdGlvbih0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgcj10aGlzLm5vZGUoKSxuPSh0PWV0KHQpKS5sZW5ndGgsYT0tMTtpZihlPXIuY2xhc3NMaXN0KXtmb3IoOysrYTxuOylpZighZS5jb250YWlucyh0W2FdKSlyZXR1cm4hMX1lbHNlIGZvcihlPXIuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOysrYTxuOylpZighdHQodFthXSkudGVzdChlKSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IoZSBpbiB0KXRoaXMuZWFjaChydChlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKHJ0KHQsZSkpfSxXLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtmb3IociBpbiBuPDImJihlPSIiKSx0KXRoaXMuZWFjaChhdChyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKG48Mil7dmFyIGE9dGhpcy5ub2RlKCk7cmV0dXJuIG8oYSkuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9cj0iIn1yZXR1cm4gdGhpcy5lYWNoKGF0KHQsZSxyKSl9LFcucHJvcGVydHk9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdGhpcy5ub2RlKClbdF07Zm9yKGUgaW4gdCl0aGlzLmVhY2goaXQoZSx0W2VdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChpdCh0LGUpKX0sVy50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfTpudWxsPT10P2Z1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD0iIn06ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9KTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0sVy5odG1sPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX06bnVsbD09dD9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LFcuYXBwZW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0PW90KHQpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LFcuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9b3QodCksZT1YKGUpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxXLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goc3QpfSxXLmRhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGE9LTEsaT10aGlzLmxlbmd0aDtpZighYXJndW1lbnRzLmxlbmd0aCl7Zm9yKHQ9bmV3IEFycmF5KGk9KHI9dGhpc1swXSkubGVuZ3RoKTsrK2E8aTspKG49clthXSkmJih0W2FdPW4uX19kYXRhX18pO3JldHVybiB0fWZ1bmN0aW9uIG8odCxyKXt2YXIgbixhLGksbz10Lmxlbmd0aCx1PXIubGVuZ3RoLGg9TWF0aC5taW4obyx1KSxmPW5ldyBBcnJheSh1KSxwPW5ldyBBcnJheSh1KSxkPW5ldyBBcnJheShvKTtpZihlKXt2YXIgZyx2PW5ldyBiLG09bmV3IEFycmF5KG8pO2ZvcihuPS0xOysrbjxvOykoYT10W25dKSYmKHYuaGFzKGc9ZS5jYWxsKGEsYS5fX2RhdGFfXyxuKSk/ZFtuXT1hOnYuc2V0KGcsYSksbVtuXT1nKTtmb3Iobj0tMTsrK248dTspKGE9di5nZXQoZz1lLmNhbGwocixpPXJbbl0sbikpKT8hMCE9PWEmJihmW25dPWEsYS5fX2RhdGFfXz1pKTpwW25dPWx0KGkpLHYuc2V0KGcsITApO2ZvcihuPS0xOysrbjxvOyluIGluIG0mJiEwIT09di5nZXQobVtuXSkmJihkW25dPXRbbl0pfWVsc2V7Zm9yKG49LTE7KytuPGg7KWE9dFtuXSxpPXJbbl0sYT8oYS5fX2RhdGFfXz1pLGZbbl09YSk6cFtuXT1sdChpKTtmb3IoO248dTsrK24pcFtuXT1sdChyW25dKTtmb3IoO248bzsrK24pZFtuXT10W25dfXAudXBkYXRlPWYscC5wYXJlbnROb2RlPWYucGFyZW50Tm9kZT1kLnBhcmVudE5vZGU9dC5wYXJlbnROb2RlLHMucHVzaChwKSxsLnB1c2goZiksYy5wdXNoKGQpfXZhciBzPWh0KFtdKSxsPXEoW10pLGM9cShbXSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKDsrK2E8aTspbyhyPXRoaXNbYV0sdC5jYWxsKHIsci5wYXJlbnROb2RlLl9fZGF0YV9fLGEpKTtlbHNlIGZvcig7KythPGk7KW8ocj10aGlzW2FdLHQpO3JldHVybiBsLmVudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LGwuZXhpdD1mdW5jdGlvbigpe3JldHVybiBjfSxsfSxXLmRhdHVtPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIpfSxXLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Y3QodCkpO2Zvcih2YXIgaT0wLG89dGhpcy5sZW5ndGg7aTxvO2krKyl7YS5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT0ocj10aGlzW2ldKS5wYXJlbnROb2RlO2Zvcih2YXIgcz0wLGw9ci5sZW5ndGg7czxsO3MrKykobj1yW3NdKSYmdC5jYWxsKG4sbi5fX2RhdGFfXyxzLGkpJiZlLnB1c2gobil9cmV0dXJuIHEoYSl9LFcub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTEsZT10aGlzLmxlbmd0aDsrK3Q8ZTspZm9yKHZhciByLG49dGhpc1t0XSxhPW4ubGVuZ3RoLTEsaT1uW2FdOy0tYT49MDspKHI9blthXSkmJihpJiZpIT09ci5uZXh0U2libGluZyYmaS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGkpLGk9cik7cmV0dXJuIHRoaXN9LFcuc29ydD1mdW5jdGlvbih0KXt0PWZ1bmN0aW9uKHQpe2FyZ3VtZW50cy5sZW5ndGh8fCh0PWYpO3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiBlJiZyP3QoZS5fX2RhdGFfXyxyLl9fZGF0YV9fKTohZS0hcn19LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIGU9LTEscj10aGlzLmxlbmd0aDsrK2U8cjspdGhpc1tlXS5zb3J0KHQpO3JldHVybiB0aGlzLm9yZGVyKCl9LFcuZWFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdXQodGhpcyxmdW5jdGlvbihlLHIsbil7dC5jYWxsKGUsZS5fX2RhdGFfXyxyLG4pfSl9LFcuY2FsbD1mdW5jdGlvbih0KXt2YXIgZT1uKGFyZ3VtZW50cyk7cmV0dXJuIHQuYXBwbHkoZVswXT10aGlzLGUpLHRoaXN9LFcuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LFcubm9kZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5sZW5ndGg7dDxlO3QrKylmb3IodmFyIHI9dGhpc1t0XSxuPTAsYT1yLmxlbmd0aDtuPGE7bisrKXt2YXIgaT1yW25dO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9LFcuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHV0KHRoaXMsZnVuY3Rpb24oKXsrK3R9KSx0fTt2YXIgZnQ9W107ZnVuY3Rpb24gcHQoZSxyLGEpe3ZhciBpPSJfX29uIitlLG89ZS5pbmRleE9mKCIuIikscz1ndDtvPjAmJihlPWUuc2xpY2UoMCxvKSk7dmFyIGw9ZHQuZ2V0KGUpO2Z1bmN0aW9uIGMoKXt2YXIgdD10aGlzW2ldO3QmJih0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0LHQuJCksZGVsZXRlIHRoaXNbaV0pfXJldHVybiBsJiYoZT1sLHM9dnQpLG8/cj9mdW5jdGlvbigpe3ZhciB0PXMocixuKGFyZ3VtZW50cykpO2MuY2FsbCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZSx0aGlzW2ldPXQsdC4kPWEpLHQuXz1yfTpjOnI/RDpmdW5jdGlvbigpe3ZhciByLG49bmV3IFJlZ0V4cCgiXl9fb24oW14uXSspIit0LnJlcXVvdGUoZSkrIiQiKTtmb3IodmFyIGEgaW4gdGhpcylpZihyPWEubWF0Y2gobikpe3ZhciBpPXRoaXNbYV07dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHJbMV0saSxpLiQpLGRlbGV0ZSB0aGlzW2FdfX19dC5zZWxlY3Rpb24uZW50ZXI9aHQsdC5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlPWZ0LGZ0LmFwcGVuZD1XLmFwcGVuZCxmdC5lbXB0eT1XLmVtcHR5LGZ0Lm5vZGU9Vy5ub2RlLGZ0LmNhbGw9Vy5jYWxsLGZ0LnNpemU9Vy5zaXplLGZ0LnNlbGVjdD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGEsaSxvPVtdLHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe249KGE9dGhpc1tzXSkudXBkYXRlLG8ucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9YS5wYXJlbnROb2RlO2Zvcih2YXIgYz0tMSx1PWEubGVuZ3RoOysrYzx1OykoaT1hW2NdKT8oZS5wdXNoKG5bY109cj10LmNhbGwoYS5wYXJlbnROb2RlLGkuX19kYXRhX18sYyxzKSksci5fX2RhdGFfXz1pLl9fZGF0YV9fKTplLnB1c2gobnVsbCl9cmV0dXJuIHEobyl9LGZ0Lmluc2VydD1mdW5jdGlvbih0LGUpe3ZhciByLG4sYTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYocj10aGlzLGU9ZnVuY3Rpb24odCxlLGkpe3ZhciBvLHM9cltpXS51cGRhdGUsbD1zLmxlbmd0aDtmb3IoaSE9YSYmKGE9aSxuPTApLGU+PW4mJihuPWUrMSk7IShvPXNbbl0pJiYrK248bDspO3JldHVybiBvfSksVy5pbnNlcnQuY2FsbCh0aGlzLHQsZSl9LHQuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1bSCh0LGEpXSkucGFyZW50Tm9kZT1hLmRvY3VtZW50RWxlbWVudDooZT1bdF0pLnBhcmVudE5vZGU9aSh0KSxxKFtlXSl9LHQuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1uKEcodCxhKSkpLnBhcmVudE5vZGU9YS5kb2N1bWVudEVsZW1lbnQ6KGU9bih0KSkucGFyZW50Tm9kZT1udWxsLHEoW2VdKX0sVy5vbj1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7Zm9yKHIgaW4gbjwyJiYoZT0hMSksdCl0aGlzLmVhY2gocHQocix0W3JdLGUpKTtyZXR1cm4gdGhpc31pZihuPDIpcmV0dXJuKG49dGhpcy5ub2RlKClbIl9fb24iK3RdKSYmbi5fO3I9ITF9cmV0dXJuIHRoaXMuZWFjaChwdCh0LGUscikpfTt2YXIgZHQ9dC5tYXAoe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSk7ZnVuY3Rpb24gZ3QoZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGE9dC5ldmVudDt0LmV2ZW50PW4sclswXT10aGlzLl9fZGF0YV9fO3RyeXtlLmFwcGx5KHRoaXMscil9ZmluYWxseXt0LmV2ZW50PWF9fX1mdW5jdGlvbiB2dCh0LGUpe3ZhciByPWd0KHQsZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQucmVsYXRlZFRhcmdldDtlJiYoZT09PXRoaXN8fDgmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHIuY2FsbCh0aGlzLHQpfX1hJiZkdC5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJvbiIrdCBpbiBhJiZkdC5yZW1vdmUodCl9KTt2YXIgbXQseXQ9MDtmdW5jdGlvbiB4dChlKXt2YXIgcj0iLmRyYWdzdXBwcmVzcy0iKyArK3l0LG49ImNsaWNrIityLGE9dC5zZWxlY3QobyhlKSkub24oInRvdWNobW92ZSIrcixCKS5vbigiZHJhZ3N0YXJ0IityLEIpLm9uKCJzZWxlY3RzdGFydCIrcixCKTtpZihudWxsPT1tdCYmKG10PSEoIm9uc2VsZWN0c3RhcnQiaW4gZSkmJnooZS5zdHlsZSwidXNlclNlbGVjdCIpKSxtdCl7dmFyIHM9aShlKS5zdHlsZSxsPXNbbXRdO3NbbXRdPSJub25lIn1yZXR1cm4gZnVuY3Rpb24odCl7aWYoYS5vbihyLG51bGwpLG10JiYoc1ttdF09bCksdCl7dmFyIGU9ZnVuY3Rpb24oKXthLm9uKG4sbnVsbCl9O2Eub24obixmdW5jdGlvbigpe0IoKSxlKCl9LCEwKSxzZXRUaW1lb3V0KGUsMCl9fX10Lm1vdXNlPWZ1bmN0aW9uKHQpe3JldHVybiBfdCh0LE4oKSl9O3ZhciBidD10aGlzLm5hdmlnYXRvciYmL1dlYktpdC8udGVzdCh0aGlzLm5hdmlnYXRvci51c2VyQWdlbnQpPy0xOjA7ZnVuY3Rpb24gX3QoZSxyKXtyLmNoYW5nZWRUb3VjaGVzJiYocj1yLmNoYW5nZWRUb3VjaGVzWzBdKTt2YXIgbj1lLm93bmVyU1ZHRWxlbWVudHx8ZTtpZihuLmNyZWF0ZVNWR1BvaW50KXt2YXIgYT1uLmNyZWF0ZVNWR1BvaW50KCk7aWYoYnQ8MCl7dmFyIGk9byhlKTtpZihpLnNjcm9sbFh8fGkuc2Nyb2xsWSl7dmFyIHM9KG49dC5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInN2ZyIpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAsYm9yZGVyOiJub25lIn0sImltcG9ydGFudCIpKVswXVswXS5nZXRTY3JlZW5DVE0oKTtidD0hKHMuZnx8cy5lKSxuLnJlbW92ZSgpfX1yZXR1cm4gYnQ/KGEueD1yLnBhZ2VYLGEueT1yLnBhZ2VZKTooYS54PXIuY2xpZW50WCxhLnk9ci5jbGllbnRZKSxbKGE9YS5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGEueV19dmFyIGw9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bci5jbGllbnRYLWwubGVmdC1lLmNsaWVudExlZnQsci5jbGllbnRZLWwudG9wLWUuY2xpZW50VG9wXX1mdW5jdGlvbiB3dCgpe3JldHVybiB0LmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9dC50b3VjaD1mdW5jdGlvbih0LGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj1lLGU9TigpLmNoYW5nZWRUb3VjaGVzKSxlKWZvcih2YXIgbixhPTAsaT1lLmxlbmd0aDthPGk7KythKWlmKChuPWVbYV0pLmlkZW50aWZpZXI9PT1yKXJldHVybiBfdCh0LG4pfSx0LmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXt2YXIgZT1qKGksImRyYWciLCJkcmFnc3RhcnQiLCJkcmFnZW5kIikscj1udWxsLG49cyhELHQubW91c2UsbywibW91c2Vtb3ZlIiwibW91c2V1cCIpLGE9cyh3dCx0LnRvdWNoLFAsInRvdWNobW92ZSIsInRvdWNoZW5kIik7ZnVuY3Rpb24gaSgpe3RoaXMub24oIm1vdXNlZG93bi5kcmFnIixuKS5vbigidG91Y2hzdGFydC5kcmFnIixhKX1mdW5jdGlvbiBzKG4sYSxpLG8scyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGwsYz10LmV2ZW50LnRhcmdldC5jb3JyZXNwb25kaW5nRWxlbWVudHx8dC5ldmVudC50YXJnZXQsdT10aGlzLnBhcmVudE5vZGUsaD1lLm9mKHRoaXMsYXJndW1lbnRzKSxmPTAscD1uKCksZD0iLmRyYWciKyhudWxsPT1wPyIiOiItIitwKSxnPXQuc2VsZWN0KGkoYykpLm9uKG8rZCxmdW5jdGlvbigpe3ZhciB0LGUscj1hKHUscCk7aWYoIXIpcmV0dXJuO3Q9clswXS1tWzBdLGU9clsxXS1tWzFdLGZ8PXR8ZSxtPXIsaCh7dHlwZToiZHJhZyIseDpyWzBdK2xbMF0seTpyWzFdK2xbMV0sZHg6dCxkeTplfSl9KS5vbihzK2QsZnVuY3Rpb24oKXtpZighYSh1LHApKXJldHVybjtnLm9uKG8rZCxudWxsKS5vbihzK2QsbnVsbCksdihmKSxoKHt0eXBlOiJkcmFnZW5kIn0pfSksdj14dChjKSxtPWEodSxwKTtsPXI/WyhsPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKS54LW1bMF0sbC55LW1bMV1dOlswLDBdLGgoe3R5cGU6ImRyYWdzdGFydCJ9KX19cmV0dXJuIGkub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSk6cn0sdC5yZWJpbmQoaSxlLCJvbiIpfSx0LnRvdWNoZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT1OKCkudG91Y2hlcyksZT9uKGUpLm1hcChmdW5jdGlvbihlKXt2YXIgcj1fdCh0LGUpO3JldHVybiByLmlkZW50aWZpZXI9ZS5pZGVudGlmaWVyLHJ9KTpbXX07dmFyIGt0PTFlLTYsVHQ9a3Qqa3QsTXQ9TWF0aC5QSSxBdD0yKk10LFN0PUF0LWt0LEV0PU10LzIsTHQ9TXQvMTgwLEN0PTE4MC9NdDtmdW5jdGlvbiBQdCh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24gT3QodCxlLHIpe3JldHVybihlWzBdLXRbMF0pKihyWzFdLXRbMV0pLShlWzFdLXRbMV0pKihyWzBdLXRbMF0pfWZ1bmN0aW9uIHp0KHQpe3JldHVybiB0PjE/MDp0PC0xP010Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBJdCh0KXtyZXR1cm4gdD4xP0V0OnQ8LTE/LUV0Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBEdCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBSdCh0KXtyZXR1cm4odD1NYXRoLnNpbih0LzIpKSp0fXZhciBGdD1NYXRoLlNRUlQyO3QuaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhPXRbMF0saT10WzFdLG89dFsyXSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PXMtYSxoPWwtaSxmPXUqdStoKmg7aWYoZjxUdCluPU1hdGgubG9nKGMvbykvRnQscj1mdW5jdGlvbih0KXtyZXR1cm5bYSt0KnUsaSt0KmgsbypNYXRoLmV4cChGdCp0Km4pXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoZiksZD0oYypjLW8qbys0KmYpLygyKm8qMipwKSxnPShjKmMtbypvLTQqZikvKDIqYyoyKnApLHY9TWF0aC5sb2coTWF0aC5zcXJ0KGQqZCsxKS1kKSxtPU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyk7bj0obS12KS9GdCxyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dCpuLHM9RHQodiksbD1vLygyKnApKihzKihlPUZ0KnIrdiwoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfSh2KSk7cmV0dXJuW2ErbCp1LGkrbCpoLG8qcy9EdChGdCpyK3YpXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sdC5iZWhhdmlvci56b29tPWZ1bmN0aW9uKCl7dmFyIGUscixuLGkscyxsLGMsdSxoLGY9e3g6MCx5OjAsazoxfSxwPVs5NjAsNTAwXSxkPWp0LGc9MjUwLHY9MCxtPSJtb3VzZWRvd24uem9vbSIseT0ibW91c2Vtb3ZlLnpvb20iLHg9Im1vdXNldXAuem9vbSIsYj0idG91Y2hzdGFydC56b29tIixfPWoodywiem9vbXN0YXJ0Iiwiem9vbSIsInpvb21lbmQiKTtmdW5jdGlvbiB3KHQpe3Qub24obSxQKS5vbihOdCsiLnpvb20iLHopLm9uKCJkYmxjbGljay56b29tIixJKS5vbihiLE8pfWZ1bmN0aW9uIGsodCl7cmV0dXJuWyh0WzBdLWYueCkvZi5rLCh0WzFdLWYueSkvZi5rXX1mdW5jdGlvbiBUKHQpe2Yuaz1NYXRoLm1heChkWzBdLE1hdGgubWluKGRbMV0sdCkpfWZ1bmN0aW9uIE0odCxlKXtlPWZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKmYuaytmLngsdFsxXSpmLmsrZi55XX0oZSksZi54Kz10WzBdLWVbMF0sZi55Kz10WzFdLWVbMV19ZnVuY3Rpb24gQShlLG4sYSxpKXtlLl9fY2hhcnRfXz17eDpmLngseTpmLnksazpmLmt9LFQoTWF0aC5wb3coMixpKSksTShyPW4sYSksZT10LnNlbGVjdChlKSxnPjAmJihlPWUudHJhbnNpdGlvbigpLmR1cmF0aW9uKGcpKSxlLmNhbGwody5ldmVudCl9ZnVuY3Rpb24gUygpe2MmJmMuZG9tYWluKGwucmFuZ2UoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtZi54KS9mLmt9KS5tYXAobC5pbnZlcnQpKSxoJiZoLmRvbWFpbih1LnJhbmdlKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LWYueSkvZi5rfSkubWFwKHUuaW52ZXJ0KSl9ZnVuY3Rpb24gRSh0KXt2Kyt8fHQoe3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBMKHQpe1MoKSx0KHt0eXBlOiJ6b29tIixzY2FsZTpmLmssdHJhbnNsYXRlOltmLngsZi55XX0pfWZ1bmN0aW9uIEModCl7LS12fHwodCh7dHlwZToiem9vbWVuZCJ9KSxyPW51bGwpfWZ1bmN0aW9uIFAoKXt2YXIgZT10aGlzLHI9Xy5vZihlLGFyZ3VtZW50cyksbj0wLGE9dC5zZWxlY3QobyhlKSkub24oeSxmdW5jdGlvbigpe249MSxNKHQubW91c2UoZSksaSksTChyKX0pLm9uKHgsZnVuY3Rpb24oKXthLm9uKHksbnVsbCkub24oeCxudWxsKSxzKG4pLEMocil9KSxpPWsodC5tb3VzZShlKSkscz14dChlKTtwcy5jYWxsKGUpLEUocil9ZnVuY3Rpb24gTygpe3ZhciBlLHI9dGhpcyxuPV8ub2Yocixhcmd1bWVudHMpLGE9e30saT0wLG89Ii56b29tLSIrdC5ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyLGw9InRvdWNobW92ZSIrbyxjPSJ0b3VjaGVuZCIrbyx1PVtdLGg9dC5zZWxlY3QocikscD14dChyKTtmdW5jdGlvbiBkKCl7dmFyIG49dC50b3VjaGVzKHIpO3JldHVybiBlPWYuayxuLmZvckVhY2goZnVuY3Rpb24odCl7dC5pZGVudGlmaWVyIGluIGEmJihhW3QuaWRlbnRpZmllcl09ayh0KSl9KSxufWZ1bmN0aW9uIGcoKXt2YXIgZT10LmV2ZW50LnRhcmdldDt0LnNlbGVjdChlKS5vbihsLHYpLm9uKGMseSksdS5wdXNoKGUpO2Zvcih2YXIgbj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLG89MCxoPW4ubGVuZ3RoO288aDsrK28pYVtuW29dLmlkZW50aWZpZXJdPW51bGw7dmFyIHA9ZCgpLGc9RGF0ZS5ub3coKTtpZigxPT09cC5sZW5ndGgpe2lmKGctczw1MDApe3ZhciBtPXBbMF07QShyLG0sYVttLmlkZW50aWZpZXJdLE1hdGguZmxvb3IoTWF0aC5sb2coZi5rKS9NYXRoLkxOMikrMSksQigpfXM9Z31lbHNlIGlmKHAubGVuZ3RoPjEpe209cFswXTt2YXIgeD1wWzFdLGI9bVswXS14WzBdLF89bVsxXS14WzFdO2k9YipiK18qX319ZnVuY3Rpb24gdigpe3ZhciBvLGwsYyx1LGg9dC50b3VjaGVzKHIpO3BzLmNhbGwocik7Zm9yKHZhciBmPTAscD1oLmxlbmd0aDtmPHA7KytmLHU9bnVsbClpZihjPWhbZl0sdT1hW2MuaWRlbnRpZmllcl0pe2lmKGwpYnJlYWs7bz1jLGw9dX1pZih1KXt2YXIgZD0oZD1jWzBdLW9bMF0pKmQrKGQ9Y1sxXS1vWzFdKSpkLGc9aSYmTWF0aC5zcXJ0KGQvaSk7bz1bKG9bMF0rY1swXSkvMiwob1sxXStjWzFdKS8yXSxsPVsobFswXSt1WzBdKS8yLChsWzFdK3VbMV0pLzJdLFQoZyplKX1zPW51bGwsTShvLGwpLEwobil9ZnVuY3Rpb24geSgpe2lmKHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpe2Zvcih2YXIgZT10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLHI9MCxpPWUubGVuZ3RoO3I8aTsrK3IpZGVsZXRlIGFbZVtyXS5pZGVudGlmaWVyXTtmb3IodmFyIHMgaW4gYSlyZXR1cm4gdm9pZCBkKCl9dC5zZWxlY3RBbGwodSkub24obyxudWxsKSxoLm9uKG0sUCkub24oYixPKSxwKCksQyhuKX1nKCksRShuKSxoLm9uKG0sbnVsbCkub24oYixnKX1mdW5jdGlvbiB6KCl7dmFyIGE9Xy5vZih0aGlzLGFyZ3VtZW50cyk7aT9jbGVhclRpbWVvdXQoaSk6KHBzLmNhbGwodGhpcyksZT1rKHI9bnx8dC5tb3VzZSh0aGlzKSksRShhKSksaT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aT1udWxsLEMoYSl9LDUwKSxCKCksVChNYXRoLnBvdygyLC4wMDIqQnQoKSkqZi5rKSxNKHIsZSksTChhKX1mdW5jdGlvbiBJKCl7dmFyIGU9dC5tb3VzZSh0aGlzKSxyPU1hdGgubG9nKGYuaykvTWF0aC5MTjI7QSh0aGlzLGUsayhlKSx0LmV2ZW50LnNoaWZ0S2V5P01hdGguY2VpbChyKS0xOk1hdGguZmxvb3IocikrMSl9cmV0dXJuIE50fHwoTnQ9Im9ud2hlZWwiaW4gYT8oQnQ9ZnVuY3Rpb24oKXtyZXR1cm4tdC5ldmVudC5kZWx0YVkqKHQuZXZlbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBhPyhCdD1mdW5jdGlvbigpe3JldHVybiB0LmV2ZW50LndoZWVsRGVsdGF9LCJtb3VzZXdoZWVsIik6KEJ0PWZ1bmN0aW9uKCl7cmV0dXJuLXQuZXZlbnQuZGV0YWlsfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpKSx3LmV2ZW50PWZ1bmN0aW9uKGUpe2UuZWFjaChmdW5jdGlvbigpe3ZhciBlPV8ub2YodGhpcyxhcmd1bWVudHMpLG49Zjt2cz90LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtmPXRoaXMuX19jaGFydF9ffHx7eDowLHk6MCxrOjF9LEUoZSl9KS50d2Vlbigiem9vbTp6b29tIixmdW5jdGlvbigpe3ZhciBhPXBbMF0saT1wWzFdLG89cj9yWzBdOmEvMixzPXI/clsxXTppLzIsbD10LmludGVycG9sYXRlWm9vbShbKG8tZi54KS9mLmssKHMtZi55KS9mLmssYS9mLmtdLFsoby1uLngpL24uaywocy1uLnkpL24uayxhL24ua10pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1sKHQpLG49YS9yWzJdO3RoaXMuX19jaGFydF9fPWY9e3g6by1yWzBdKm4seTpzLXJbMV0qbixrOm59LEwoZSl9fSkuZWFjaCgiaW50ZXJydXB0Lnpvb20iLGZ1bmN0aW9uKCl7QyhlKX0pLmVhY2goImVuZC56b29tIixmdW5jdGlvbigpe0MoZSl9KToodGhpcy5fX2NoYXJ0X189ZixFKGUpLEwoZSksQyhlKSl9KX0sdy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9e3g6K3RbMF0seTordFsxXSxrOmYua30sUygpLHcpOltmLngsZi55XX0sdy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj17eDpmLngseTpmLnksazpudWxsfSxUKCt0KSxTKCksdyk6Zi5rfSx3LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPW51bGw9PXQ/anQ6Wyt0WzBdLCt0WzFdXSx3KTpkfSx3LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10JiZbK3RbMF0sK3RbMV1dLHcpOm59LHcuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10JiZbK3RbMF0sK3RbMV1dLHcpOnB9LHcuZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3Qsdyk6Z30sdy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbD10LmNvcHkoKSxmPXt4OjAseTowLGs6MX0sdyk6Y30sdy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQsdT10LmNvcHkoKSxmPXt4OjAseTowLGs6MX0sdyk6aH0sdC5yZWJpbmQodyxfLCJvbiIpfTt2YXIgQnQsTnQsanQ9WzAsMS8wXTtmdW5jdGlvbiBWdCgpe31mdW5jdGlvbiBVdCh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBVdD8odGhpcy5oPSt0LHRoaXMucz0rZSx2b2lkKHRoaXMubD0rcikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgVXQ/bmV3IFV0KHQuaCx0LnMsdC5sKTp1ZSgiIit0LGhlLFV0KTpuZXcgVXQodCxlLHIpfXQuY29sb3I9VnQsVnQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9LHQuaHNsPVV0O3ZhciBxdD1VdC5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIEh0KHQsZSxyKXt2YXIgbixhO2Z1bmN0aW9uIGkodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1KmZ1bmN0aW9uKHQpe3JldHVybiB0PjM2MD90LT0zNjA6dDwwJiYodCs9MzYwKSx0PDYwP24rKGEtbikqdC82MDp0PDE4MD9hOnQ8MjQwP24rKGEtbikqKDI0MC10KS82MDpufSh0KSl9cmV0dXJuIHQ9aXNOYU4odCk/MDoodCU9MzYwKTwwP3QrMzYwOnQsZT1pc05hTihlKT8wOmU8MD8wOmU+MT8xOmUsbj0yKihyPXI8MD8wOnI+MT8xOnIpLShhPXI8PS41P3IqKDErZSk6citlLXIqZSksbmV3IGllKGkodCsxMjApLGkodCksaSh0LTEyMCkpfWZ1bmN0aW9uIEd0KGUscixuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIEd0Pyh0aGlzLmg9K2UsdGhpcy5jPStyLHZvaWQodGhpcy5sPStuKSk6YXJndW1lbnRzLmxlbmd0aDwyP2UgaW5zdGFuY2VvZiBHdD9uZXcgR3QoZS5oLGUuYyxlLmwpOmVlKGUgaW5zdGFuY2VvZiBYdD9lLmw6KGU9ZmUoKGU9dC5yZ2IoZSkpLnIsZS5nLGUuYikpLmwsZS5hLGUuYik6bmV3IEd0KGUscixuKX1xdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IFV0KHRoaXMuaCx0aGlzLnMsdGhpcy5sL3QpfSxxdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpLG5ldyBVdCh0aGlzLmgsdGhpcy5zLHQqdGhpcy5sKX0scXQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKX0sdC5oY2w9R3Q7dmFyIFl0PUd0LnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gV3QodCxlLHIpe3JldHVybiBpc05hTih0KSYmKHQ9MCksaXNOYU4oZSkmJihlPTApLG5ldyBYdChyLE1hdGguY29zKHQqPUx0KSplLE1hdGguc2luKHQpKmUpfWZ1bmN0aW9uIFh0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFh0Pyh0aGlzLmw9K3QsdGhpcy5hPStlLHZvaWQodGhpcy5iPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBYdD9uZXcgWHQodC5sLHQuYSx0LmIpOnQgaW5zdGFuY2VvZiBHdD9XdCh0LmgsdC5jLHQubCk6ZmUoKHQ9aWUodCkpLnIsdC5nLHQuYik6bmV3IFh0KHQsZSxyKX1ZdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRoaXMubCtadCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSl9LFl0LmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0aGlzLmwtWnQqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSkpfSxZdC5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gV3QodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSx0LmxhYj1YdDt2YXIgWnQ9MTgsSnQ9Ljk1MDQ3LEt0PTEsUXQ9MS4wODg4MywkdD1YdC5wcm90b3R5cGU9bmV3IFZ0O2Z1bmN0aW9uIHRlKHQsZSxyKXt2YXIgbj0odCsxNikvMTE2LGE9bitlLzUwMCxpPW4tci8yMDA7cmV0dXJuIG5ldyBpZShhZSgzLjI0MDQ1NDIqKGE9cmUoYSkqSnQpLTEuNTM3MTM4NSoobj1yZShuKSpLdCktLjQ5ODUzMTQqKGk9cmUoaSkqUXQpKSxhZSgtLjk2OTI2NiphKzEuODc2MDEwOCpuKy4wNDE1NTYqaSksYWUoLjA1NTY0MzQqYS0uMjA0MDI1OSpuKzEuMDU3MjI1MippKSl9ZnVuY3Rpb24gZWUodCxlLHIpe3JldHVybiB0PjA/bmV3IEd0KE1hdGguYXRhbjIocixlKSpDdCxNYXRoLnNxcnQoZSplK3IqciksdCk6bmV3IEd0KE5hTixOYU4sdCl9ZnVuY3Rpb24gcmUodCl7cmV0dXJuIHQ+LjIwNjg5MzAzND90KnQqdDoodC00LzI5KS83Ljc4NzAzN31mdW5jdGlvbiBuZSh0KXtyZXR1cm4gdD4uMDA4ODU2P01hdGgucG93KHQsMS8zKTo3Ljc4NzAzNyp0KzQvMjl9ZnVuY3Rpb24gYWUodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1Kih0PD0uMDAzMDQ/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KSl9ZnVuY3Rpb24gaWUodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaWU/KHRoaXMucj1+fnQsdGhpcy5nPX5+ZSx2b2lkKHRoaXMuYj1+fnIpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIGllP25ldyBpZSh0LnIsdC5nLHQuYik6dWUoIiIrdCxpZSxIdCk6bmV3IGllKHQsZSxyKX1mdW5jdGlvbiBvZSh0KXtyZXR1cm4gbmV3IGllKHQ+PjE2LHQ+PjgmMjU1LDI1NSZ0KX1mdW5jdGlvbiBzZSh0KXtyZXR1cm4gb2UodCkrIiJ9JHQuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYdChNYXRoLm1pbigxMDAsdGhpcy5sK1p0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpLHRoaXMuYSx0aGlzLmIpfSwkdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYdChNYXRoLm1heCgwLHRoaXMubC1adCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSx0aGlzLmEsdGhpcy5iKX0sJHQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIHRlKHRoaXMubCx0aGlzLmEsdGhpcy5iKX0sdC5yZ2I9aWU7dmFyIGxlPWllLnByb3RvdHlwZT1uZXcgVnQ7ZnVuY3Rpb24gY2UodCl7cmV0dXJuIHQ8MTY/IjAiK01hdGgubWF4KDAsdCkudG9TdHJpbmcoMTYpOk1hdGgubWluKDI1NSx0KS50b1N0cmluZygxNil9ZnVuY3Rpb24gdWUodCxlLHIpe3ZhciBuLGEsaSxvPTAscz0wLGw9MDtpZihuPS8oW2Etel0rKVwoKC4qKVwpLy5leGVjKHQ9dC50b0xvd2VyQ2FzZSgpKSlzd2l0Y2goYT1uWzJdLnNwbGl0KCIsIiksblsxXSl7Y2FzZSJoc2wiOnJldHVybiByKHBhcnNlRmxvYXQoYVswXSkscGFyc2VGbG9hdChhWzFdKS8xMDAscGFyc2VGbG9hdChhWzJdKS8xMDApO2Nhc2UicmdiIjpyZXR1cm4gZShkZShhWzBdKSxkZShhWzFdKSxkZShhWzJdKSl9cmV0dXJuKGk9Z2UuZ2V0KHQpKT9lKGkucixpLmcsaS5iKToobnVsbD09dHx8IiMiIT09dC5jaGFyQXQoMCl8fGlzTmFOKGk9cGFyc2VJbnQodC5zbGljZSgxKSwxNikpfHwoND09PXQubGVuZ3RoPyhvPSgzODQwJmkpPj40LG98PW8+PjQscz0yNDAmaSxzfD1zPj40LGw9MTUmaSxsfD1sPDw0KTo3PT09dC5sZW5ndGgmJihvPSgxNjcxMTY4MCZpKT4+MTYscz0oNjUyODAmaSk+PjgsbD0yNTUmaSkpLGUobyxzLGwpKX1mdW5jdGlvbiBoZSh0LGUscil7dmFyIG4sYSxpPU1hdGgubWluKHQvPTI1NSxlLz0yNTUsci89MjU1KSxvPU1hdGgubWF4KHQsZSxyKSxzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KGE9bDwuNT9zLyhvK2kpOnMvKDItby1pKSxuPXQ9PW8/KGUtcikvcysoZTxyPzY6MCk6ZT09bz8oci10KS9zKzI6KHQtZSkvcys0LG4qPTYwKToobj1OYU4sYT1sPjAmJmw8MT8wOm4pLG5ldyBVdChuLGEsbCl9ZnVuY3Rpb24gZmUodCxlLHIpe3ZhciBuPW5lKCguNDEyNDU2NCoodD1wZSh0KSkrLjM1NzU3NjEqKGU9cGUoZSkpKy4xODA0Mzc1KihyPXBlKHIpKSkvSnQpLGE9bmUoKC4yMTI2NzI5KnQrLjcxNTE1MjIqZSsuMDcyMTc1KnIpL0t0KTtyZXR1cm4gWHQoMTE2KmEtMTYsNTAwKihuLWEpLDIwMCooYS1uZSgoLjAxOTMzMzkqdCsuMTE5MTkyKmUrLjk1MDMwNDEqcikvUXQpKSl9ZnVuY3Rpb24gcGUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gZGUodCl7dmFyIGU9cGFyc2VGbG9hdCh0KTtyZXR1cm4iJSI9PT10LmNoYXJBdCh0Lmxlbmd0aC0xKT9NYXRoLnJvdW5kKDIuNTUqZSk6ZX1sZS5icmlnaHRlcj1mdW5jdGlvbih0KXt0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKTt2YXIgZT10aGlzLnIscj10aGlzLmcsbj10aGlzLmIsYT0zMDtyZXR1cm4gZXx8cnx8bj8oZSYmZTxhJiYoZT1hKSxyJiZyPGEmJihyPWEpLG4mJm48YSYmKG49YSksbmV3IGllKE1hdGgubWluKDI1NSxlL3QpLE1hdGgubWluKDI1NSxyL3QpLE1hdGgubWluKDI1NSxuL3QpKSk6bmV3IGllKGEsYSxhKX0sbGUuZGFya2VyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaWUoKHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpKSp0aGlzLnIsdCp0aGlzLmcsdCp0aGlzLmIpfSxsZS5oc2w9ZnVuY3Rpb24oKXtyZXR1cm4gaGUodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxsZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiIjIitjZSh0aGlzLnIpK2NlKHRoaXMuZykrY2UodGhpcy5iKX07dmFyIGdlPXQubWFwKHthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9KTtmdW5jdGlvbiB2ZSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG1lKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmKG49cixyPW51bGwpLHllKGUscix0LG4pfX1mdW5jdGlvbiB5ZShlLHIsYSxpKXt2YXIgbz17fSxzPXQuZGlzcGF0Y2goImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIpLGw9e30sYz1uZXcgWE1MSHR0cFJlcXVlc3QsdT1udWxsO2Z1bmN0aW9uIGgoKXt2YXIgdCxlPWMuc3RhdHVzO2lmKCFlJiZmdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlVHlwZTtyZXR1cm4gZSYmInRleHQiIT09ZT90LnJlc3BvbnNlOnQucmVzcG9uc2VUZXh0fShjKXx8ZT49MjAwJiZlPDMwMHx8MzA0PT09ZSl7dHJ5e3Q9YS5jYWxsKG8sYyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgcy5lcnJvci5jYWxsKG8sdCl9cy5sb2FkLmNhbGwobyx0KX1lbHNlIHMuZXJyb3IuY2FsbChvLGMpfXJldHVybiF0aGlzLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGN8fCEvXihodHRwKHMpPzopP1wvXC8vLnRlc3QoZSl8fChjPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj1oOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJmgoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKGUpe3ZhciByPXQuZXZlbnQ7dC5ldmVudD1lO3RyeXtzLnByb2dyZXNzLmNhbGwobyxjKX1maW5hbGx5e3QuZXZlbnQ9cn19LG8uaGVhZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9KHQrIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP2xbdF06KG51bGw9PWU/ZGVsZXRlIGxbdF06bFt0XT1lKyIiLG8pfSxvLm1pbWVUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDp0KyIiLG8pOnJ9LG8ucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbyk6dX0sby5yZXNwb25zZT1mdW5jdGlvbih0KXtyZXR1cm4gYT10LG99LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goZnVuY3Rpb24odCl7b1t0XT1mdW5jdGlvbigpe3JldHVybiBvLnNlbmQuYXBwbHkobyxbdF0uY29uY2F0KG4oYXJndW1lbnRzKSkpfX0pLG8uc2VuZD1mdW5jdGlvbih0LG4sYSl7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoYT1uLG49bnVsbCksYy5vcGVuKHQsZSwhMCksbnVsbD09cnx8ImFjY2VwdCJpbiBsfHwobC5hY2NlcHQ9cisiLCovKiIpLGMuc2V0UmVxdWVzdEhlYWRlcilmb3IodmFyIGkgaW4gbCljLnNldFJlcXVlc3RIZWFkZXIoaSxsW2ldKTtyZXR1cm4gbnVsbCE9ciYmYy5vdmVycmlkZU1pbWVUeXBlJiZjLm92ZXJyaWRlTWltZVR5cGUociksbnVsbCE9dSYmKGMucmVzcG9uc2VUeXBlPXUpLG51bGwhPWEmJm8ub24oImVycm9yIixhKS5vbigibG9hZCIsZnVuY3Rpb24odCl7YShudWxsLHQpfSkscy5iZWZvcmVzZW5kLmNhbGwobyxjKSxjLnNlbmQobnVsbD09bj9udWxsOm4pLG99LG8uYWJvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYy5hYm9ydCgpLG99LHQucmViaW5kKG8scywib24iKSxudWxsPT1pP286by5nZXQoZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3QobnVsbD09ZT9yOm51bGwpfTp0fShpKSl9Z2UuZm9yRWFjaChmdW5jdGlvbih0LGUpe2dlLnNldCh0LG9lKGUpKX0pLHQuZnVuY3Rvcj12ZSx0Lnhocj1tZShQKSx0LmRzdj1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBSZWdFeHAoJ1siJyt0KyJcbl0iKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBhKHQscixuKXthcmd1bWVudHMubGVuZ3RoPDMmJihuPXIscj1udWxsKTt2YXIgYT15ZSh0LGUsbnVsbD09cj9pOm8ociksbik7cmV0dXJuIGEucm93PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EucmVzcG9uc2UobnVsbD09KHI9dCk/aTpvKHQpKTpyfSxhfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGEucGFyc2UodC5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBhLnBhcnNlKGUucmVzcG9uc2VUZXh0LHQpfX1mdW5jdGlvbiBzKGUpe3JldHVybiBlLm1hcChsKS5qb2luKHQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHIudGVzdCh0KT8nIicrdC5yZXBsYWNlKC9cIi9nLCciIicpKyciJzp0fXJldHVybiBhLnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIGEucGFyc2VSb3dzKHQsZnVuY3Rpb24odCxuKXtpZihyKXJldHVybiByKHQsbi0xKTt2YXIgYT1uZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK2UrIl0ifSkuam9pbigiLCIpKyJ9Iik7cj1lP2Z1bmN0aW9uKHQscil7cmV0dXJuIGUoYSh0KSxyKX06YX0pfSxhLnBhcnNlUm93cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsaT17fSxvPXt9LHM9W10sbD10Lmxlbmd0aCxjPTAsdT0wO2Z1bmN0aW9uIGgoKXtpZihjPj1sKXJldHVybiBvO2lmKGEpcmV0dXJuIGE9ITEsaTt2YXIgZT1jO2lmKDM0PT09dC5jaGFyQ29kZUF0KGUpKXtmb3IodmFyIHI9ZTtyKys8bDspaWYoMzQ9PT10LmNoYXJDb2RlQXQocikpe2lmKDM0IT09dC5jaGFyQ29kZUF0KHIrMSkpYnJlYWs7KytyfXJldHVybiBjPXIrMiwxMz09PShzPXQuY2hhckNvZGVBdChyKzEpKT8oYT0hMCwxMD09PXQuY2hhckNvZGVBdChyKzIpJiYrK2MpOjEwPT09cyYmKGE9ITApLHQuc2xpY2UoZSsxLHIpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2M8bDspe3ZhciBzLHU9MTtpZigxMD09PShzPXQuY2hhckNvZGVBdChjKyspKSlhPSEwO2Vsc2UgaWYoMTM9PT1zKWE9ITAsMTA9PT10LmNoYXJDb2RlQXQoYykmJigrK2MsKyt1KTtlbHNlIGlmKHMhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKGUsYy11KX1yZXR1cm4gdC5zbGljZShlKX1mb3IoOyhyPWgoKSkhPT1vOyl7Zm9yKHZhciBmPVtdO3IhPT1pJiZyIT09bzspZi5wdXNoKHIpLHI9aCgpO2UmJm51bGw9PShmPWUoZix1KyspKXx8cy5wdXNoKGYpfXJldHVybiBzfSxhLmZvcm1hdD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGVbMF0pKXJldHVybiBhLmZvcm1hdFJvd3MoZSk7dmFyIHI9bmV3IEMsbj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KXIuaGFzKGUpfHxuLnB1c2goci5hZGQoZSkpfSksW24ubWFwKGwpLmpvaW4odCldLmNvbmNhdChlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGwoZVt0XSl9KS5qb2luKHQpfSkpLmpvaW4oIlxuIil9LGEuZm9ybWF0Um93cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAocykuam9pbigiXG4iKX0sYX0sdC5jc3Y9dC5kc3YoIiwiLCJ0ZXh0L2NzdiIpLHQudHN2PXQuZHN2KCJcdCIsInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXMiKTt2YXIgeGUsYmUsX2Usd2Usa2U9dGhpc1t6KHRoaXMsInJlcXVlc3RBbmltYXRpb25GcmFtZSIpXXx8ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gVGUodCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7bjwyJiYoZT0wKSxuPDMmJihyPURhdGUubm93KCkpO3ZhciBhPXtjOnQsdDpyK2UsbjpudWxsfTtyZXR1cm4gYmU/YmUubj1hOnhlPWEsYmU9YSxfZXx8KHdlPWNsZWFyVGltZW91dCh3ZSksX2U9MSxrZShNZSkpLGF9ZnVuY3Rpb24gTWUoKXt2YXIgdD1BZSgpLGU9U2UoKS10O2U+MjQ/KGlzRmluaXRlKGUpJiYoY2xlYXJUaW1lb3V0KHdlKSx3ZT1zZXRUaW1lb3V0KE1lLGUpKSxfZT0wKTooX2U9MSxrZShNZSkpfWZ1bmN0aW9uIEFlKCl7Zm9yKHZhciB0PURhdGUubm93KCksZT14ZTtlOyl0Pj1lLnQmJmUuYyh0LWUudCkmJihlLmM9bnVsbCksZT1lLm47cmV0dXJuIHR9ZnVuY3Rpb24gU2UoKXtmb3IodmFyIHQsZT14ZSxyPTEvMDtlOyllLmM/KGUudDxyJiYocj1lLnQpLGU9KHQ9ZSkubik6ZT10P3Qubj1lLm46eGU9ZS5uO3JldHVybiBiZT10LHJ9ZnVuY3Rpb24gRWUodCxlKXtyZXR1cm4gZS0odD9NYXRoLmNlaWwoTWF0aC5sb2codCkvTWF0aC5MTjEwKToxKX10LnRpbWVyPWZ1bmN0aW9uKCl7VGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0LnRpbWVyLmZsdXNoPWZ1bmN0aW9uKCl7QWUoKSxTZSgpfSx0LnJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/TWF0aC5yb3VuZCh0KihlPU1hdGgucG93KDEwLGUpKSkvZTpNYXRoLnJvdW5kKHQpfTt2YXIgTGU9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0ubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5wb3coMTAsMyp5KDgtZSkpO3JldHVybntzY2FsZTplPjg/ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQqcn0sc3ltYm9sOnR9fSk7ZnVuY3Rpb24gQ2UoZSl7dmFyIHI9ZS5kZWNpbWFsLG49ZS50aG91c2FuZHMsYT1lLmdyb3VwaW5nLGk9ZS5jdXJyZW5jeSxvPWEmJm4/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsaT1bXSxvPTAscz1hWzBdLGw9MDtyPjAmJnM+MCYmKGwrcysxPmUmJihzPU1hdGgubWF4KDEsZS1sKSksaS5wdXNoKHQuc3Vic3RyaW5nKHItPXMscitzKSksISgobCs9cysxKT5lKSk7KXM9YVtvPShvKzEpJWEubGVuZ3RoXTtyZXR1cm4gaS5yZXZlcnNlKCkuam9pbihuKX06UDtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49UGUuZXhlYyhlKSxhPW5bMV18fCIgIixzPW5bMl18fCI+IixsPW5bM118fCItIixjPW5bNF18fCIiLHU9bls1XSxoPStuWzZdLGY9bls3XSxwPW5bOF0sZD1uWzldLGc9MSx2PSIiLG09IiIseT0hMSx4PSEwO3N3aXRjaChwJiYocD0rcC5zdWJzdHJpbmcoMSkpLCh1fHwiMCI9PT1hJiYiPSI9PT1zKSYmKHU9YT0iMCIscz0iPSIpLGQpe2Nhc2UibiI6Zj0hMCxkPSJnIjticmVhaztjYXNlIiUiOmc9MTAwLG09IiUiLGQ9ImYiO2JyZWFrO2Nhc2UicCI6Zz0xMDAsbT0iJSIsZD0iciI7YnJlYWs7Y2FzZSJiIjpjYXNlIm8iOmNhc2UieCI6Y2FzZSJYIjoiIyI9PT1jJiYodj0iMCIrZC50b0xvd2VyQ2FzZSgpKTtjYXNlImMiOng9ITE7Y2FzZSJkIjp5PSEwLHA9MDticmVhaztjYXNlInMiOmc9LTEsZD0iciJ9IiQiPT09YyYmKHY9aVswXSxtPWlbMV0pLCJyIiE9ZHx8cHx8KGQ9ImciKSxudWxsIT1wJiYoImciPT1kP3A9TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxwKSk6ImUiIT1kJiYiZiIhPWR8fChwPU1hdGgubWF4KDAsTWF0aC5taW4oMjAscCkpKSksZD1PZS5nZXQoZCl8fHplO3ZhciBiPXUmJmY7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPW07aWYoeSYmZSUxKXJldHVybiIiO3ZhciBpPWU8MHx8MD09PWUmJjEvZTwwPyhlPS1lLCItIik6Ii0iPT09bD8iIjpsO2lmKGc8MCl7dmFyIGM9dC5mb3JtYXRQcmVmaXgoZSxwKTtlPWMuc2NhbGUoZSksbj1jLnN5bWJvbCttfWVsc2UgZSo9Zzt2YXIgXyx3LGs9KGU9ZChlLHApKS5sYXN0SW5kZXhPZigiLiIpO2lmKGs8MCl7dmFyIFQ9eD9lLmxhc3RJbmRleE9mKCJlIik6LTE7VDwwPyhfPWUsdz0iIik6KF89ZS5zdWJzdHJpbmcoMCxUKSx3PWUuc3Vic3RyaW5nKFQpKX1lbHNlIF89ZS5zdWJzdHJpbmcoMCxrKSx3PXIrZS5zdWJzdHJpbmcoaysxKTshdSYmZiYmKF89byhfLDEvMCkpO3ZhciBNPXYubGVuZ3RoK18ubGVuZ3RoK3cubGVuZ3RoKyhiPzA6aS5sZW5ndGgpLEE9TTxoP25ldyBBcnJheShNPWgtTSsxKS5qb2luKGEpOiIiO3JldHVybiBiJiYoXz1vKEErXyxBLmxlbmd0aD9oLXcubGVuZ3RoOjEvMCkpLGkrPXYsZT1fK3csKCI8Ij09PXM/aStlK0E6Ij4iPT09cz9BK2krZToiXiI9PT1zP0Euc3Vic3RyaW5nKDAsTT4+PTEpK2krZStBLnN1YnN0cmluZyhNKTppKyhiP2U6QStlKSkrbn19fXQuZm9ybWF0UHJlZml4PWZ1bmN0aW9uKGUscil7dmFyIG49MDtyZXR1cm4oZT0rZSkmJihlPDAmJihlKj0tMSksciYmKGU9dC5yb3VuZChlLEVlKGUscikpKSxuPTErTWF0aC5mbG9vcigxZS0xMitNYXRoLmxvZyhlKS9NYXRoLkxOMTApLG49TWF0aC5tYXgoLTI0LE1hdGgubWluKDI0LDMqTWF0aC5mbG9vcigobi0xKS8zKSkpKSxMZVs4K24vM119O3ZhciBQZT0vKD86KFtee10pPyhbPD49Xl0pKT8oWytcLSBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC4tP1xkKyk/KFthLXolXSk/L2ksT2U9dC5tYXAoe2I6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoOCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMTYpfSxYOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0scjpmdW5jdGlvbihlLHIpe3JldHVybihlPXQucm91bmQoZSxFZShlLHIpKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWluKDIwLEVlKGUqKDErMWUtMTUpLHIpKSkpfX0pO2Z1bmN0aW9uIHplKHQpe3JldHVybiB0KyIifXZhciBJZT10LnRpbWU9e30sRGU9RGF0ZTtmdW5jdGlvbiBSZSgpe3RoaXMuXz1uZXcgRGF0ZShhcmd1bWVudHMubGVuZ3RoPjE/RGF0ZS5VVEMuYXBwbHkodGhpcyxhcmd1bWVudHMpOmFyZ3VtZW50c1swXSl9UmUucHJvdG90eXBlPXtnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXRlKCl9LGdldERheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRGF5KCl9LGdldEZ1bGxZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENGdWxsWWVhcigpfSxnZXRIb3VyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDSG91cnMoKX0sZ2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaWxsaXNlY29uZHMoKX0sZ2V0TWludXRlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTWludXRlcygpfSxnZXRNb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTW9udGgoKX0sZ2V0U2Vjb25kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDU2Vjb25kcygpfSxnZXRUaW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRUaW1lKCl9LGdldFRpbWV6b25lT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLnZhbHVlT2YoKX0sc2V0RGF0ZTpmdW5jdGlvbigpe0ZlLnNldFVUQ0RhdGUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldERheTpmdW5jdGlvbigpe0ZlLnNldFVUQ0RheS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtGZS5zZXRVVENGdWxsWWVhci5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0SG91cnM6ZnVuY3Rpb24oKXtGZS5zZXRVVENIb3Vycy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7RmUuc2V0VVRDTWlsbGlzZWNvbmRzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaW51dGVzOmZ1bmN0aW9uKCl7RmUuc2V0VVRDTWludXRlcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TW9udGg6ZnVuY3Rpb24oKXtGZS5zZXRVVENNb250aC5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0U2Vjb25kczpmdW5jdGlvbigpe0ZlLnNldFVUQ1NlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldFRpbWU6ZnVuY3Rpb24oKXtGZS5zZXRUaW1lLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfX07dmFyIEZlPURhdGUucHJvdG90eXBlO2Z1bmN0aW9uIEJlKHQsZSxyKXtmdW5jdGlvbiBuKGUpe3ZhciByPXQoZSksbj1pKHIsMSk7cmV0dXJuIGUtcjxuLWU/cjpufWZ1bmN0aW9uIGEocil7cmV0dXJuIGUocj10KG5ldyBEZShyLTEpKSwxKSxyfWZ1bmN0aW9uIGkodCxyKXtyZXR1cm4gZSh0PW5ldyBEZSgrdCksciksdH1mdW5jdGlvbiBvKHQsbixpKXt2YXIgbz1hKHQpLHM9W107aWYoaT4xKWZvcig7bzxuOylyKG8pJWl8fHMucHVzaChuZXcgRGF0ZSgrbykpLGUobywxKTtlbHNlIGZvcig7bzxuOylzLnB1c2gobmV3IERhdGUoK28pKSxlKG8sMSk7cmV0dXJuIHN9dC5mbG9vcj10LHQucm91bmQ9bix0LmNlaWw9YSx0Lm9mZnNldD1pLHQucmFuZ2U9bzt2YXIgcz10LnV0Yz1OZSh0KTtyZXR1cm4gcy5mbG9vcj1zLHMucm91bmQ9TmUobikscy5jZWlsPU5lKGEpLHMub2Zmc2V0PU5lKGkpLHMucmFuZ2U9ZnVuY3Rpb24odCxlLHIpe3RyeXtEZT1SZTt2YXIgbj1uZXcgUmU7cmV0dXJuIG4uXz10LG8obixlLHIpfWZpbmFsbHl7RGU9RGF0ZX19LHR9ZnVuY3Rpb24gTmUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dHJ5e0RlPVJlO3ZhciBuPW5ldyBSZTtyZXR1cm4gbi5fPWUsdChuLHIpLl99ZmluYWxseXtEZT1EYXRlfX19ZnVuY3Rpb24gamUoZSl7dmFyIHI9ZS5kYXRlVGltZSxuPWUuZGF0ZSxhPWUudGltZSxpPWUucGVyaW9kcyxvPWUuZGF5cyxzPWUuc2hvcnREYXlzLGw9ZS5tb250aHMsYz1lLnNob3J0TW9udGhzO2Z1bmN0aW9uIHUodCl7dmFyIGU9dC5sZW5ndGg7ZnVuY3Rpb24gcihyKXtmb3IodmFyIG4sYSxpLG89W10scz0tMSxsPTA7KytzPGU7KTM3PT09dC5jaGFyQ29kZUF0KHMpJiYoby5wdXNoKHQuc2xpY2UobCxzKSksbnVsbCE9KGE9VmVbbj10LmNoYXJBdCgrK3MpXSkmJihuPXQuY2hhckF0KCsrcykpLChpPV9bbl0pJiYobj1pKHIsbnVsbD09YT8iZSI9PT1uPyIgIjoiMCI6YSkpLG8ucHVzaChuKSxsPXMrMSk7cmV0dXJuIG8ucHVzaCh0LnNsaWNlKGwscykpLG8uam9pbigiIil9cmV0dXJuIHIucGFyc2U9ZnVuY3Rpb24oZSl7dmFyIHI9e3k6MTkwMCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MCxaOm51bGx9O2lmKGgocix0LGUsMCkhPWUubGVuZ3RoKXJldHVybiBudWxsOyJwImluIHImJihyLkg9ci5IJTEyKzEyKnIucCk7dmFyIG49bnVsbCE9ci5aJiZEZSE9PVJlLGE9bmV3KG4/UmU6RGUpO3JldHVybiJqImluIHI/YS5zZXRGdWxsWWVhcihyLnksMCxyLmopOiJXImluIHJ8fCJVImluIHI/KCJ3ImluIHJ8fChyLnc9IlciaW4gcj8xOjApLGEuc2V0RnVsbFllYXIoci55LDAsMSksYS5zZXRGdWxsWWVhcihyLnksMCwiVyJpbiByPyhyLncrNiklNys3KnIuVy0oYS5nZXREYXkoKSs1KSU3OnIudys3KnIuVS0oYS5nZXREYXkoKSs2KSU3KSk6YS5zZXRGdWxsWWVhcihyLnksci5tLHIuZCksYS5zZXRIb3VycyhyLkgrKHIuWi8xMDB8MCksci5NK3IuWiUxMDAsci5TLHIuTCksbj9hLl86YX0sci50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxyfWZ1bmN0aW9uIGgodCxlLHIsbil7Zm9yKHZhciBhLGksbyxzPTAsbD1lLmxlbmd0aCxjPXIubGVuZ3RoO3M8bDspe2lmKG4+PWMpcmV0dXJuLTE7aWYoMzc9PT0oYT1lLmNoYXJDb2RlQXQocysrKSkpe2lmKG89ZS5jaGFyQXQocysrKSwhKGk9d1tvIGluIFZlP2UuY2hhckF0KHMrKyk6b10pfHwobj1pKHQscixuKSk8MClyZXR1cm4tMX1lbHNlIGlmKGEhPXIuY2hhckNvZGVBdChuKyspKXJldHVybi0xfXJldHVybiBufXUudXRjPWZ1bmN0aW9uKHQpe3ZhciBlPXUodCk7ZnVuY3Rpb24gcih0KXt0cnl7dmFyIHI9bmV3KERlPVJlKTtyZXR1cm4gci5fPXQsZShyKX1maW5hbGx5e0RlPURhdGV9fXJldHVybiByLnBhcnNlPWZ1bmN0aW9uKHQpe3RyeXtEZT1SZTt2YXIgcj1lLnBhcnNlKHQpO3JldHVybiByJiZyLl99ZmluYWxseXtEZT1EYXRlfX0sci50b1N0cmluZz1lLnRvU3RyaW5nLHJ9LHUubXVsdGk9dS51dGMubXVsdGk9bHI7dmFyIGY9dC5tYXAoKSxwPUdlKG8pLGQ9WWUobyksZz1HZShzKSx2PVllKHMpLG09R2UobCkseT1ZZShsKSx4PUdlKGMpLGI9WWUoYyk7aS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7Zi5zZXQodC50b0xvd2VyQ2FzZSgpLGUpfSk7dmFyIF89e2E6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gbFt0LmdldE1vbnRoKCldfSxjOnUociksZDpmdW5jdGlvbih0LGUpe3JldHVybiBIZSh0LmdldERhdGUoKSxlLDIpfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEhlKHQuZ2V0RGF0ZSgpLGUsMil9LEg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSGUodC5nZXRIb3VycygpLGUsMil9LEk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSGUodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfSxqOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEhlKDErSWUuZGF5T2ZZZWFyKHQpLGUsMyl9LEw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSGUodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfSxtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEhlKHQuZ2V0TW9udGgoKSsxLGUsMil9LE06ZnVuY3Rpb24odCxlKXtyZXR1cm4gSGUodC5nZXRNaW51dGVzKCksZSwyKX0scDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0SG91cnMoKT49MTIpXX0sUzpmdW5jdGlvbih0LGUpe3JldHVybiBIZSh0LmdldFNlY29uZHMoKSxlLDIpfSxVOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEhlKEllLnN1bmRheU9mWWVhcih0KSxlLDIpfSx3OmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERheSgpfSxXOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEhlKEllLm1vbmRheU9mWWVhcih0KSxlLDIpfSx4OnUobiksWDp1KGEpLHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSGUodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfSxZOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEhlKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX0sWjpvciwiJSI6ZnVuY3Rpb24oKXtyZXR1cm4iJSJ9fSx3PXthOmZ1bmN0aW9uKHQsZSxyKXtnLmxhc3RJbmRleD0wO3ZhciBuPWcuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC53PXYuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24odCxlLHIpe3AubGFzdEluZGV4PTA7dmFyIG49cC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lnc9ZC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih0LGUscil7eC5sYXN0SW5kZXg9MDt2YXIgbj14LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQubT1iLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHQsZSxyKXttLmxhc3RJbmRleD0wO3ZhciBuPW0uZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5tPXkuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBoKHQsXy5jLnRvU3RyaW5nKCksZSxyKX0sZDp0cixlOnRyLEg6cnIsSTpycixqOmVyLEw6aXIsbTokZSxNOm5yLHA6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWYuZ2V0KGUuc2xpY2UocixyKz0yKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gbnVsbD09bj8tMToodC5wPW4scil9LFM6YXIsVTpYZSx3OldlLFc6WmUseDpmdW5jdGlvbih0LGUscil7cmV0dXJuIGgodCxfLngudG9TdHJpbmcoKSxlLHIpfSxYOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaCh0LF8uWC50b1N0cmluZygpLGUscil9LHk6S2UsWTpKZSxaOlFlLCIlIjpzcn07cmV0dXJuIHV9SWUueWVhcj1CZShmdW5jdGlvbih0KXtyZXR1cm4odD1JZS5kYXkodCkpLnNldE1vbnRoKDAsMSksdH0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKX0pLEllLnllYXJzPUllLnllYXIucmFuZ2UsSWUueWVhcnMudXRjPUllLnllYXIudXRjLnJhbmdlLEllLmRheT1CZShmdW5jdGlvbih0KXt2YXIgZT1uZXcgRGUoMmUzLDApO3JldHVybiBlLnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpLGV9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pLEllLmRheXM9SWUuZGF5LnJhbmdlLEllLmRheXMudXRjPUllLmRheS51dGMucmFuZ2UsSWUuZGF5T2ZZZWFyPWZ1bmN0aW9uKHQpe3ZhciBlPUllLnllYXIodCk7cmV0dXJuIE1hdGguZmxvb3IoKHQtZS02ZTQqKHQuZ2V0VGltZXpvbmVPZmZzZXQoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkpKS84NjRlNSl9LFsic3VuZGF5IiwibW9uZGF5IiwidHVlc2RheSIsIndlZG5lc2RheSIsInRodXJzZGF5IiwiZnJpZGF5Iiwic2F0dXJkYXkiXS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7ZT03LWU7dmFyIHI9SWVbdF09QmUoZnVuY3Rpb24odCl7cmV0dXJuKHQ9SWUuZGF5KHQpKS5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpK2UpJTcpLHR9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqTWF0aC5mbG9vcihlKSl9LGZ1bmN0aW9uKHQpe3ZhciByPUllLnllYXIodCkuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKEllLmRheU9mWWVhcih0KSsocitlKSU3KS83KS0ociE9PWUpfSk7SWVbdCsicyJdPXIucmFuZ2UsSWVbdCsicyJdLnV0Yz1yLnV0Yy5yYW5nZSxJZVt0KyJPZlllYXIiXT1mdW5jdGlvbih0KXt2YXIgcj1JZS55ZWFyKHQpLmdldERheSgpO3JldHVybiBNYXRoLmZsb29yKChJZS5kYXlPZlllYXIodCkrKHIrZSklNykvNyl9fSksSWUud2Vlaz1JZS5zdW5kYXksSWUud2Vla3M9SWUuc3VuZGF5LnJhbmdlLEllLndlZWtzLnV0Yz1JZS5zdW5kYXkudXRjLnJhbmdlLEllLndlZWtPZlllYXI9SWUuc3VuZGF5T2ZZZWFyO3ZhciBWZT17Ii0iOiIiLF86IiAiLDA6IjAifSxVZT0vXlxzKlxkKy8scWU9L14lLztmdW5jdGlvbiBIZSh0LGUscil7dmFyIG49dDwwPyItIjoiIixhPShuPy10OnQpKyIiLGk9YS5sZW5ndGg7cmV0dXJuIG4rKGk8cj9uZXcgQXJyYXkoci1pKzEpLmpvaW4oZSkrYTphKX1mdW5jdGlvbiBHZShlKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrZS5tYXAodC5yZXF1b3RlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gWWUodCl7Zm9yKHZhciBlPW5ldyBiLHI9LTEsbj10Lmxlbmd0aDsrK3I8bjspZS5zZXQodFtyXS50b0xvd2VyQ2FzZSgpLHIpO3JldHVybiBlfWZ1bmN0aW9uIFdlKHQsZSxyKXtVZS5sYXN0SW5kZXg9MDt2YXIgbj1VZS5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhlKHQsZSxyKXtVZS5sYXN0SW5kZXg9MDt2YXIgbj1VZS5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0LlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWmUodCxlLHIpe1VlLmxhc3RJbmRleD0wO3ZhciBuPVVlLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBKZSh0LGUscil7VWUubGFzdEluZGV4PTA7dmFyIG49VWUuZXhlYyhlLnNsaWNlKHIscis0KSk7cmV0dXJuIG4/KHQueT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBLZSh0LGUscil7VWUubGFzdEluZGV4PTA7dmFyIG4sYT1VZS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gYT8odC55PShuPSthWzBdKSsobj42OD8xOTAwOjJlMykscithWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUWUodCxlLHIpe3JldHVybi9eWystXVxkezR9JC8udGVzdChlPWUuc2xpY2UocixyKzUpKT8odC5aPS1lLHIrNSk6LTF9ZnVuY3Rpb24gJGUodCxlLHIpe1VlLmxhc3RJbmRleD0wO3ZhciBuPVVlLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRyKHQsZSxyKXtVZS5sYXN0SW5kZXg9MDt2YXIgbj1VZS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVyKHQsZSxyKXtVZS5sYXN0SW5kZXg9MDt2YXIgbj1VZS5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5qPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJyKHQsZSxyKXtVZS5sYXN0SW5kZXg9MDt2YXIgbj1VZS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5yKHQsZSxyKXtVZS5sYXN0SW5kZXg9MDt2YXIgbj1VZS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGFyKHQsZSxyKXtVZS5sYXN0SW5kZXg9MDt2YXIgbj1VZS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGlyKHQsZSxyKXtVZS5sYXN0SW5kZXg9MDt2YXIgbj1VZS5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG9yKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSxyPWU+MD8iLSI6IisiLG49eShlKS82MHwwLGE9eShlKSU2MDtyZXR1cm4gcitIZShuLCIwIiwyKStIZShhLCIwIiwyKX1mdW5jdGlvbiBzcih0LGUscil7cWUubGFzdEluZGV4PTA7dmFyIG49cWUuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBscih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0tMTsrK3I8ZTspdFtyXVswXT10aGlzKHRbcl1bMF0pO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHI9MCxuPXRbcl07IW5bMV0oZSk7KW49dFsrK3JdO3JldHVybiBuWzBdKGUpfX10LmxvY2FsZT1mdW5jdGlvbih0KXtyZXR1cm57bnVtYmVyRm9ybWF0OkNlKHQpLHRpbWVGb3JtYXQ6amUodCl9fTt2YXIgY3I9dC5sb2NhbGUoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLGRhdGVUaW1lOiIlYSAlYiAlZSAlWCAlWSIsZGF0ZToiJW0vJWQvJVkiLHRpbWU6IiVIOiVNOiVTIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO2Z1bmN0aW9uIHVyKCl7fXQuZm9ybWF0PWNyLm51bWJlckZvcm1hdCx0Lmdlbz17fSx1ci5wcm90b3R5cGU9e3M6MCx0OjAsYWRkOmZ1bmN0aW9uKHQpe2ZyKHQsdGhpcy50LGhyKSxmcihoci5zLHRoaXMucyx0aGlzKSx0aGlzLnM/dGhpcy50Kz1oci50OnRoaXMucz1oci50fSxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgaHI9bmV3IHVyO2Z1bmN0aW9uIGZyKHQsZSxyKXt2YXIgbj1yLnM9dCtlLGE9bi10LGk9bi1hO3IudD10LWkrKGUtYSl9ZnVuY3Rpb24gcHIodCxlKXt0JiZnci5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiZnclt0LnR5cGVdKHQsZSl9dC5nZW8uc3RyZWFtPWZ1bmN0aW9uKHQsZSl7dCYmZHIuaGFzT3duUHJvcGVydHkodC50eXBlKT9kclt0LnR5cGVdKHQsZSk6cHIodCxlKX07dmFyIGRyPXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7cHIodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5mZWF0dXJlcyxuPS0xLGE9ci5sZW5ndGg7KytuPGE7KXByKHJbbl0uZ2VvbWV0cnksZSl9fSxncj17U3BoZXJlOmZ1bmN0aW9uKHQsZSl7ZS5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24odCxlKXt0PXQuY29vcmRpbmF0ZXMsZS5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGE9ci5sZW5ndGg7KytuPGE7KXQ9cltuXSxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe3ZyKHQuY29vcmRpbmF0ZXMsZSwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxhPXIubGVuZ3RoOysrbjxhOyl2cihyW25dLGUsMCl9LFBvbHlnb246ZnVuY3Rpb24odCxlKXttcih0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGE9ci5sZW5ndGg7KytuPGE7KW1yKHJbbl0sZSl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmdlb21ldHJpZXMsbj0tMSxhPXIubGVuZ3RoOysrbjxhOylwcihyW25dLGUpfX07ZnVuY3Rpb24gdnIodCxlLHIpe3ZhciBuLGE9LTEsaT10Lmxlbmd0aC1yO2ZvcihlLmxpbmVTdGFydCgpOysrYTxpOyluPXRbYV0sZS5wb2ludChuWzBdLG5bMV0sblsyXSk7ZS5saW5lRW5kKCl9ZnVuY3Rpb24gbXIodCxlKXt2YXIgcj0tMSxuPXQubGVuZ3RoO2ZvcihlLnBvbHlnb25TdGFydCgpOysrcjxuOyl2cih0W3JdLGUsMSk7ZS5wb2x5Z29uRW5kKCl9dC5nZW8uYXJlYT1mdW5jdGlvbihlKXtyZXR1cm4geXI9MCx0Lmdlby5zdHJlYW0oZSxQcikseXJ9O3ZhciB5cix4cixicixfcix3cixrcixUcixNcixBcixTcixFcixMcixDcj1uZXcgdXIsUHI9e3NwaGVyZTpmdW5jdGlvbigpe3lyKz00Kk10fSxwb2ludDpELGxpbmVTdGFydDpELGxpbmVFbmQ6RCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtDci5yZXNldCgpLFByLmxpbmVTdGFydD1Pcn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciB0PTIqQ3I7eXIrPXQ8MD80Kk10K3Q6dCxQci5saW5lU3RhcnQ9UHIubGluZUVuZD1Qci5wb2ludD1EfX07ZnVuY3Rpb24gT3IoKXt2YXIgdCxlLHIsbixhO2Z1bmN0aW9uIGkodCxlKXtlPWUqTHQvMitNdC80O3ZhciBpPSh0Kj1MdCktcixvPWk+PTA/MTotMSxzPW8qaSxsPU1hdGguY29zKGUpLGM9TWF0aC5zaW4oZSksdT1hKmMsaD1uKmwrdSpNYXRoLmNvcyhzKSxmPXUqbypNYXRoLnNpbihzKTtDci5hZGQoTWF0aC5hdGFuMihmLGgpKSxyPXQsbj1sLGE9Y31Qci5wb2ludD1mdW5jdGlvbihvLHMpe1ByLnBvaW50PWkscj0odD1vKSpMdCxuPU1hdGguY29zKHM9KGU9cykqTHQvMitNdC80KSxhPU1hdGguc2luKHMpfSxQci5saW5lRW5kPWZ1bmN0aW9uKCl7aSh0LGUpfX1mdW5jdGlvbiB6cih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPU1hdGguY29zKHIpO3JldHVybltuKk1hdGguY29zKGUpLG4qTWF0aC5zaW4oZSksTWF0aC5zaW4ocildfWZ1bmN0aW9uIElyKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfWZ1bmN0aW9uIERyKHQsZSl7cmV0dXJuW3RbMV0qZVsyXS10WzJdKmVbMV0sdFsyXSplWzBdLXRbMF0qZVsyXSx0WzBdKmVbMV0tdFsxXSplWzBdXX1mdW5jdGlvbiBScih0LGUpe3RbMF0rPWVbMF0sdFsxXSs9ZVsxXSx0WzJdKz1lWzJdfWZ1bmN0aW9uIEZyKHQsZSl7cmV0dXJuW3RbMF0qZSx0WzFdKmUsdFsyXSplXX1mdW5jdGlvbiBCcih0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0pO3RbMF0vPWUsdFsxXS89ZSx0WzJdLz1lfWZ1bmN0aW9uIE5yKHQpe3JldHVybltNYXRoLmF0YW4yKHRbMV0sdFswXSksSXQodFsyXSldfWZ1bmN0aW9uIGpyKHQsZSl7cmV0dXJuIHkodFswXS1lWzBdKTxrdCYmeSh0WzFdLWVbMV0pPGt0fXQuZ2VvLmJvdW5kcz1mdW5jdGlvbigpe3ZhciBlLHIsbixhLGksbyxzLGwsYyx1LGgsZj17cG9pbnQ6cCxsaW5lU3RhcnQ6ZyxsaW5lRW5kOnYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zi5wb2ludD1tLGYubGluZVN0YXJ0PXgsZi5saW5lRW5kPWIsYz0wLFByLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7UHIucG9seWdvbkVuZCgpLGYucG9pbnQ9cCxmLmxpbmVTdGFydD1nLGYubGluZUVuZD12LENyPDA/KGU9LShuPTE4MCkscj0tKGE9OTApKTpjPmt0P2E9OTA6Yzwta3QmJihyPS05MCksaFswXT1lLGhbMV09bn19O2Z1bmN0aW9uIHAodCxpKXt1LnB1c2goaD1bZT10LG49dF0pLGk8ciYmKHI9aSksaT5hJiYoYT1pKX1mdW5jdGlvbiBkKHQsbyl7dmFyIHM9enIoW3QqTHQsbypMdF0pO2lmKGwpe3ZhciBjPURyKGwscyksdT1EcihbY1sxXSwtY1swXSwwXSxjKTtCcih1KSx1PU5yKHUpO3ZhciBoPXQtaSxmPWg+MD8xOi0xLGQ9dVswXSpDdCpmLGc9eShoKT4xODA7aWYoZ14oZippPGQmJmQ8Zip0KSkodj11WzFdKkN0KT5hJiYoYT12KTtlbHNlIGlmKGdeKGYqaTwoZD0oZCszNjApJTM2MC0xODApJiZkPGYqdCkpe3ZhciB2Oyh2PS11WzFdKkN0KTxyJiYocj12KX1lbHNlIG88ciYmKHI9byksbz5hJiYoYT1vKTtnP3Q8aT9fKGUsdCk+XyhlLG4pJiYobj10KTpfKHQsbik+XyhlLG4pJiYoZT10KTpuPj1lPyh0PGUmJihlPXQpLHQ+biYmKG49dCkpOnQ+aT9fKGUsdCk+XyhlLG4pJiYobj10KTpfKHQsbik+XyhlLG4pJiYoZT10KX1lbHNlIHAodCxvKTtsPXMsaT10fWZ1bmN0aW9uIGcoKXtmLnBvaW50PWR9ZnVuY3Rpb24gdigpe2hbMF09ZSxoWzFdPW4sZi5wb2ludD1wLGw9bnVsbH1mdW5jdGlvbiBtKHQsZSl7aWYobCl7dmFyIHI9dC1pO2MrPXkocik+MTgwP3IrKHI+MD8zNjA6LTM2MCk6cn1lbHNlIG89dCxzPWU7UHIucG9pbnQodCxlKSxkKHQsZSl9ZnVuY3Rpb24geCgpe1ByLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGIoKXttKG8scyksUHIubGluZUVuZCgpLHkoYyk+a3QmJihlPS0obj0xODApKSxoWzBdPWUsaFsxXT1uLGw9bnVsbH1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuKGUtPXQpPDA/ZSszNjA6ZX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1yZXR1cm4gZnVuY3Rpb24oaSl7aWYoYT1uPS0oZT1yPTEvMCksdT1bXSx0Lmdlby5zdHJlYW0oaSxmKSxjPXUubGVuZ3RoKXt1LnNvcnQodyk7Zm9yKHZhciBvPTEscz1bZz11WzBdXTtvPGM7KytvKWsoKHA9dVtvXSlbMF0sZyl8fGsocFsxXSxnKT8oXyhnWzBdLHBbMV0pPl8oZ1swXSxnWzFdKSYmKGdbMV09cFsxXSksXyhwWzBdLGdbMV0pPl8oZ1swXSxnWzFdKSYmKGdbMF09cFswXSkpOnMucHVzaChnPXApO2Zvcih2YXIgbCxjLHAsZD0tMS8wLGc9KG89MCxzW2M9cy5sZW5ndGgtMV0pO288PWM7Zz1wLCsrbylwPXNbb10sKGw9XyhnWzFdLHBbMF0pKT5kJiYoZD1sLGU9cFswXSxuPWdbMV0pfXJldHVybiB1PWg9bnVsbCxlPT09MS8wfHxyPT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW2Uscl0sW24sYV1dfX0oKSx0Lmdlby5jZW50cm9pZD1mdW5jdGlvbihlKXt4cj1icj1fcj13cj1rcj1Ucj1Ncj1Bcj1Tcj1Fcj1Mcj0wLHQuZ2VvLnN0cmVhbShlLFZyKTt2YXIgcj1TcixuPUVyLGE9THIsaT1yKnIrbipuK2EqYTtyZXR1cm4gaTxUdCYmKHI9VHIsbj1NcixhPUFyLGJyPGt0JiYocj1fcixuPXdyLGE9a3IpLChpPXIqcituKm4rYSphKTxUdCk/W05hTixOYU5dOltNYXRoLmF0YW4yKG4scikqQ3QsSXQoYS9NYXRoLnNxcnQoaSkpKkN0XX07dmFyIFZyPXtzcGhlcmU6RCxwb2ludDpVcixsaW5lU3RhcnQ6SHIsbGluZUVuZDpHcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtWci5saW5lU3RhcnQ9WXJ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtWci5saW5lU3RhcnQ9SHJ9fTtmdW5jdGlvbiBVcih0LGUpe3QqPUx0O3ZhciByPU1hdGguY29zKGUqPUx0KTtxcihyKk1hdGguY29zKHQpLHIqTWF0aC5zaW4odCksTWF0aC5zaW4oZSkpfWZ1bmN0aW9uIHFyKHQsZSxyKXtfcis9KHQtX3IpLysreHIsd3IrPShlLXdyKS94cixrcis9KHIta3IpL3hyfWZ1bmN0aW9uIEhyKCl7dmFyIHQsZSxyO2Z1bmN0aW9uIG4obixhKXtuKj1MdDt2YXIgaT1NYXRoLmNvcyhhKj1MdCksbz1pKk1hdGguY29zKG4pLHM9aSpNYXRoLnNpbihuKSxsPU1hdGguc2luKGEpLGM9TWF0aC5hdGFuMihNYXRoLnNxcnQoKGM9ZSpsLXIqcykqYysoYz1yKm8tdCpsKSpjKyhjPXQqcy1lKm8pKmMpLHQqbytlKnMrcipsKTticis9YyxUcis9YyoodCsodD1vKSksTXIrPWMqKGUrKGU9cykpLEFyKz1jKihyKyhyPWwpKSxxcih0LGUscil9VnIucG9pbnQ9ZnVuY3Rpb24oYSxpKXthKj1MdDt2YXIgbz1NYXRoLmNvcyhpKj1MdCk7dD1vKk1hdGguY29zKGEpLGU9bypNYXRoLnNpbihhKSxyPU1hdGguc2luKGkpLFZyLnBvaW50PW4scXIodCxlLHIpfX1mdW5jdGlvbiBHcigpe1ZyLnBvaW50PVVyfWZ1bmN0aW9uIFlyKCl7dmFyIHQsZSxyLG4sYTtmdW5jdGlvbiBpKHQsZSl7dCo9THQ7dmFyIGk9TWF0aC5jb3MoZSo9THQpLG89aSpNYXRoLmNvcyh0KSxzPWkqTWF0aC5zaW4odCksbD1NYXRoLnNpbihlKSxjPW4qbC1hKnMsdT1hKm8tcipsLGg9cipzLW4qbyxmPU1hdGguc3FydChjKmMrdSp1K2gqaCkscD1yKm8rbipzK2EqbCxkPWYmJi16dChwKS9mLGc9TWF0aC5hdGFuMihmLHApO1NyKz1kKmMsRXIrPWQqdSxMcis9ZCpoLGJyKz1nLFRyKz1nKihyKyhyPW8pKSxNcis9Zyoobisobj1zKSksQXIrPWcqKGErKGE9bCkpLHFyKHIsbixhKX1Wci5wb2ludD1mdW5jdGlvbihvLHMpe3Q9byxlPXMsVnIucG9pbnQ9aSxvKj1MdDt2YXIgbD1NYXRoLmNvcyhzKj1MdCk7cj1sKk1hdGguY29zKG8pLG49bCpNYXRoLnNpbihvKSxhPU1hdGguc2luKHMpLHFyKHIsbixhKX0sVnIubGluZUVuZD1mdW5jdGlvbigpe2kodCxlKSxWci5saW5lRW5kPUdyLFZyLnBvaW50PVVyfX1mdW5jdGlvbiBXcih0LGUpe2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gcj10KHIsbiksZShyWzBdLHJbMV0pfXJldHVybiB0LmludmVydCYmZS5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihyLG4pe3JldHVybihyPWUuaW52ZXJ0KHIsbikpJiZ0LmludmVydChyWzBdLHJbMV0pfSkscn1mdW5jdGlvbiBYcigpe3JldHVybiEwfWZ1bmN0aW9uIFpyKHQsZSxyLG4sYSl7dmFyIGk9W10sbz1bXTtpZih0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoISgoZT10Lmxlbmd0aC0xKTw9MCkpe3ZhciBlLHI9dFswXSxuPXRbZV07aWYoanIocixuKSl7YS5saW5lU3RhcnQoKTtmb3IodmFyIHM9MDtzPGU7KytzKWEucG9pbnQoKHI9dFtzXSlbMF0sclsxXSk7YS5saW5lRW5kKCl9ZWxzZXt2YXIgbD1uZXcgS3Iocix0LG51bGwsITApLGM9bmV3IEtyKHIsbnVsbCxsLCExKTtsLm89YyxpLnB1c2gobCksby5wdXNoKGMpLGw9bmV3IEtyKG4sdCxudWxsLCExKSxjPW5ldyBLcihuLG51bGwsbCwhMCksbC5vPWMsaS5wdXNoKGwpLG8ucHVzaChjKX19fSksby5zb3J0KGUpLEpyKGkpLEpyKG8pLGkubGVuZ3RoKXtmb3IodmFyIHM9MCxsPXIsYz1vLmxlbmd0aDtzPGM7KytzKW9bc10uZT1sPSFsO2Zvcih2YXIgdSxoLGY9aVswXTs7KXtmb3IodmFyIHA9ZixkPSEwO3AudjspaWYoKHA9cC5uKT09PWYpcmV0dXJuO3U9cC56LGEubGluZVN0YXJ0KCk7ZG97aWYocC52PXAuby52PSEwLHAuZSl7aWYoZClmb3Iocz0wLGM9dS5sZW5ndGg7czxjOysrcylhLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihwLngscC5uLngsMSxhKTtwPXAubn1lbHNle2lmKGQpZm9yKHM9KHU9cC5wLnopLmxlbmd0aC0xO3M+PTA7LS1zKWEucG9pbnQoKGg9dVtzXSlbMF0saFsxXSk7ZWxzZSBuKHAueCxwLnAueCwtMSxhKTtwPXAucH11PShwPXAubykueixkPSFkfXdoaWxlKCFwLnYpO2EubGluZUVuZCgpfX19ZnVuY3Rpb24gSnIodCl7aWYoZT10Lmxlbmd0aCl7Zm9yKHZhciBlLHIsbj0wLGE9dFswXTsrK248ZTspYS5uPXI9dFtuXSxyLnA9YSxhPXI7YS5uPXI9dFswXSxyLnA9YX19ZnVuY3Rpb24gS3IodCxlLHIsbil7dGhpcy54PXQsdGhpcy56PWUsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBRcihlLHIsbixhKXtyZXR1cm4gZnVuY3Rpb24oaSxvKXt2YXIgcyxsPXIobyksYz1pLmludmVydChhWzBdLGFbMV0pLHU9e3BvaW50OmgsbGluZVN0YXJ0OnAsbGluZUVuZDpkLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3UucG9pbnQ9Yix1LmxpbmVTdGFydD1fLHUubGluZUVuZD13LHM9W10sZz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3UucG9pbnQ9aCx1LmxpbmVTdGFydD1wLHUubGluZUVuZD1kLHM9dC5tZXJnZShzKTt2YXIgZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGE9W01hdGguc2luKHIpLC1NYXRoLmNvcyhyKSwwXSxpPTAsbz0wO0NyLnJlc2V0KCk7Zm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7KytzKXt2YXIgYz1lW3NdLHU9Yy5sZW5ndGg7aWYodSlmb3IodmFyIGg9Y1swXSxmPWhbMF0scD1oWzFdLzIrTXQvNCxkPU1hdGguc2luKHApLGc9TWF0aC5jb3MocCksdj0xOzspe3Y9PT11JiYodj0wKTt2YXIgbT0odD1jW3ZdKVswXSx5PXRbMV0vMitNdC80LHg9TWF0aC5zaW4oeSksYj1NYXRoLmNvcyh5KSxfPW0tZix3PV8+PTA/MTotMSxrPXcqXyxUPWs+TXQsTT1kKng7aWYoQ3IuYWRkKE1hdGguYXRhbjIoTSp3Kk1hdGguc2luKGspLGcqYitNKk1hdGguY29zKGspKSksaSs9VD9fK3cqQXQ6XyxUXmY+PXJebT49cil7dmFyIEE9RHIoenIoaCksenIodCkpO0JyKEEpO3ZhciBTPURyKGEsQSk7QnIoUyk7dmFyIEU9KFReXz49MD8tMToxKSpJdChTWzJdKTsobj5FfHxuPT09RSYmKEFbMF18fEFbMV0pKSYmKG8rPVReXz49MD8xOi0xKX1pZighdisrKWJyZWFrO2Y9bSxkPXgsZz1iLGg9dH19cmV0dXJuKGk8LWt0fHxpPGt0JiZDcjwta3QpXjEmb30oYyxnKTtzLmxlbmd0aD8oeHx8KG8ucG9seWdvblN0YXJ0KCkseD0hMCksWnIocyxlbixlLG4sbykpOmUmJih4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSxvLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsbyksby5saW5lRW5kKCkpLHgmJihvLnBvbHlnb25FbmQoKSx4PSExKSxzPWc9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7by5wb2x5Z29uU3RhcnQoKSxvLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsbyksby5saW5lRW5kKCksby5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBoKHQscil7dmFyIG49aSh0LHIpO2UodD1uWzBdLHI9blsxXSkmJm8ucG9pbnQodCxyKX1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9aSh0LGUpO2wucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiBwKCl7dS5wb2ludD1mLGwubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZCgpe3UucG9pbnQ9aCxsLmxpbmVFbmQoKX12YXIgZyx2LG09dG4oKSx5PXIobSkseD0hMTtmdW5jdGlvbiBiKHQsZSl7di5wdXNoKFt0LGVdKTt2YXIgcj1pKHQsZSk7eS5wb2ludChyWzBdLHJbMV0pfWZ1bmN0aW9uIF8oKXt5LmxpbmVTdGFydCgpLHY9W119ZnVuY3Rpb24gdygpe2IodlswXVswXSx2WzBdWzFdKSx5LmxpbmVFbmQoKTt2YXIgdCxlPXkuY2xlYW4oKSxyPW0uYnVmZmVyKCksbj1yLmxlbmd0aDtpZih2LnBvcCgpLGcucHVzaCh2KSx2PW51bGwsbilpZigxJmUpe3ZhciBhLGk9LTE7aWYoKG49KHQ9clswXSkubGVuZ3RoLTEpPjApe2Zvcih4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSxvLmxpbmVTdGFydCgpOysraTxuOylvLnBvaW50KChhPXRbaV0pWzBdLGFbMV0pO28ubGluZUVuZCgpfX1lbHNlIG4+MSYmMiZlJiZyLnB1c2goci5wb3AoKS5jb25jYXQoci5zaGlmdCgpKSkscy5wdXNoKHIuZmlsdGVyKCRyKSl9cmV0dXJuIHV9fWZ1bmN0aW9uICRyKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIHRuKCl7dmFyIHQsZT1bXTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxwb2ludDpmdW5jdGlvbihlLHIpe3QucHVzaChbZSxyXSl9LGxpbmVFbmQ6RCxidWZmZXI6ZnVuY3Rpb24oKXt2YXIgcj1lO3JldHVybiBlPVtdLHQ9bnVsbCxyfSxyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9fX1mdW5jdGlvbiBlbih0LGUpe3JldHVybigodD10LngpWzBdPDA/dFsxXS1FdC1rdDpFdC10WzFdKS0oKGU9ZS54KVswXTwwP2VbMV0tRXQta3Q6RXQtZVsxXSl9dmFyIHJuPVFyKFhyLGZ1bmN0aW9uKHQpe3ZhciBlLHI9TmFOLG49TmFOLGE9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24oaSxvKXt2YXIgcz1pPjA/TXQ6LU10LGw9eShpLXIpO3kobC1NdCk8a3Q/KHQucG9pbnQocixuPShuK28pLzI+MD9FdDotRXQpLHQucG9pbnQoYSxuKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxuKSx0LnBvaW50KGksbiksZT0wKTphIT09cyYmbD49TXQmJih5KHItYSk8a3QmJihyLT1hKmt0KSx5KGktcyk8a3QmJihpLT1zKmt0KSxuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGksbz1NYXRoLnNpbih0LXIpO3JldHVybiB5KG8pPmt0P01hdGguYXRhbigoTWF0aC5zaW4oZSkqKGk9TWF0aC5jb3MobikpKk1hdGguc2luKHIpLU1hdGguc2luKG4pKihhPU1hdGguY29zKGUpKSpNYXRoLnNpbih0KSkvKGEqaSpvKSk6KGUrbikvMn0ocixuLGksbyksdC5wb2ludChhLG4pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLG4pLGU9MCksdC5wb2ludChyPWksbj1vKSxhPXN9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0LmxpbmVFbmQoKSxyPW49TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLWV9fX0sZnVuY3Rpb24odCxlLHIsbil7dmFyIGE7aWYobnVsbD09dClhPXIqRXQsbi5wb2ludCgtTXQsYSksbi5wb2ludCgwLGEpLG4ucG9pbnQoTXQsYSksbi5wb2ludChNdCwwKSxuLnBvaW50KE10LC1hKSxuLnBvaW50KDAsLWEpLG4ucG9pbnQoLU10LC1hKSxuLnBvaW50KC1NdCwwKSxuLnBvaW50KC1NdCxhKTtlbHNlIGlmKHkodFswXS1lWzBdKT5rdCl7dmFyIGk9dFswXTxlWzBdP010Oi1NdDthPXIqaS8yLG4ucG9pbnQoLWksYSksbi5wb2ludCgwLGEpLG4ucG9pbnQoaSxhKX1lbHNlIG4ucG9pbnQoZVswXSxlWzFdKX0sWy1NdCwtTXQvMl0pO2Z1bmN0aW9uIG5uKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihhKXt2YXIgaSxvPWEuYSxzPWEuYixsPW8ueCxjPW8ueSx1PTAsaD0xLGY9cy54LWwscD1zLnktYztpZihpPXQtbCxmfHwhKGk+MCkpe2lmKGkvPWYsZjwwKXtpZihpPHUpcmV0dXJuO2k8aCYmKGg9aSl9ZWxzZSBpZihmPjApe2lmKGk+aClyZXR1cm47aT51JiYodT1pKX1pZihpPXItbCxmfHwhKGk8MCkpe2lmKGkvPWYsZjwwKXtpZihpPmgpcmV0dXJuO2k+dSYmKHU9aSl9ZWxzZSBpZihmPjApe2lmKGk8dSlyZXR1cm47aTxoJiYoaD1pKX1pZihpPWUtYyxwfHwhKGk+MCkpe2lmKGkvPXAscDwwKXtpZihpPHUpcmV0dXJuO2k8aCYmKGg9aSl9ZWxzZSBpZihwPjApe2lmKGk+aClyZXR1cm47aT51JiYodT1pKX1pZihpPW4tYyxwfHwhKGk8MCkpe2lmKGkvPXAscDwwKXtpZihpPmgpcmV0dXJuO2k+dSYmKHU9aSl9ZWxzZSBpZihwPjApe2lmKGk8dSlyZXR1cm47aTxoJiYoaD1pKX1yZXR1cm4gdT4wJiYoYS5hPXt4OmwrdSpmLHk6Yyt1KnB9KSxoPDEmJihhLmI9e3g6bCtoKmYseTpjK2gqcH0pLGF9fX19fX12YXIgYW49MWU5O2Z1bmN0aW9uIG9uKGUscixuLGEpe3JldHVybiBmdW5jdGlvbihsKXt2YXIgYyx1LGgsZixwLGQsZyx2LG0seSx4LGI9bCxfPXRuKCksdz1ubihlLHIsbixhKSxrPXtwb2ludDpBLGxpbmVTdGFydDpmdW5jdGlvbigpe2sucG9pbnQ9Uyx1JiZ1LnB1c2goaD1bXSk7eT0hMCxtPSExLGc9dj1OYU59LGxpbmVFbmQ6ZnVuY3Rpb24oKXtjJiYoUyhmLHApLGQmJm0mJl8ucmVqb2luKCksYy5wdXNoKF8uYnVmZmVyKCkpKTtrLnBvaW50PUEsbSYmbC5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2w9XyxjPVtdLHU9W10seD0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe2w9YixjPXQubWVyZ2UoYyk7dmFyIHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj11Lmxlbmd0aCxuPXRbMV0sYT0wO2E8cjsrK2EpZm9yKHZhciBpLG89MSxzPXVbYV0sbD1zLmxlbmd0aCxjPXNbMF07bzxsOysrbylpPXNbb10sY1sxXTw9bj9pWzFdPm4mJk90KGMsaSx0KT4wJiYrK2U6aVsxXTw9biYmT3QoYyxpLHQpPDAmJi0tZSxjPWk7cmV0dXJuIDAhPT1lfShbZSxhXSksbj14JiZyLGk9Yy5sZW5ndGg7KG58fGkpJiYobC5wb2x5Z29uU3RhcnQoKSxuJiYobC5saW5lU3RhcnQoKSxUKG51bGwsbnVsbCwxLGwpLGwubGluZUVuZCgpKSxpJiZacihjLG8scixULGwpLGwucG9seWdvbkVuZCgpKSxjPXU9aD1udWxsfX07ZnVuY3Rpb24gVCh0LG8sbCxjKXt2YXIgdT0wLGg9MDtpZihudWxsPT10fHwodT1pKHQsbCkpIT09KGg9aShvLGwpKXx8cyh0LG8pPDBebD4wKWRve2MucG9pbnQoMD09PXV8fDM9PT11P2U6bix1PjE/YTpyKX13aGlsZSgodT0odStsKzQpJTQpIT09aCk7ZWxzZSBjLnBvaW50KG9bMF0sb1sxXSl9ZnVuY3Rpb24gTSh0LGkpe3JldHVybiBlPD10JiZ0PD1uJiZyPD1pJiZpPD1hfWZ1bmN0aW9uIEEodCxlKXtNKHQsZSkmJmwucG9pbnQodCxlKX1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9TSh0PU1hdGgubWF4KC1hbixNYXRoLm1pbihhbix0KSksZT1NYXRoLm1heCgtYW4sTWF0aC5taW4oYW4sZSkpKTtpZih1JiZoLnB1c2goW3QsZV0pLHkpZj10LHA9ZSxkPXIseT0hMSxyJiYobC5saW5lU3RhcnQoKSxsLnBvaW50KHQsZSkpO2Vsc2UgaWYociYmbSlsLnBvaW50KHQsZSk7ZWxzZXt2YXIgbj17YTp7eDpnLHk6dn0sYjp7eDp0LHk6ZX19O3cobik/KG18fChsLmxpbmVTdGFydCgpLGwucG9pbnQobi5hLngsbi5hLnkpKSxsLnBvaW50KG4uYi54LG4uYi55KSxyfHxsLmxpbmVFbmQoKSx4PSExKTpyJiYobC5saW5lU3RhcnQoKSxsLnBvaW50KHQsZSkseD0hMSl9Zz10LHY9ZSxtPXJ9cmV0dXJuIGt9O2Z1bmN0aW9uIGkodCxhKXtyZXR1cm4geSh0WzBdLWUpPGt0P2E+MD8wOjM6eSh0WzBdLW4pPGt0P2E+MD8yOjE6eSh0WzFdLXIpPGt0P2E+MD8xOjA6YT4wPzM6Mn1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHModC54LGUueCl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWkodCwxKSxuPWkoZSwxKTtyZXR1cm4gciE9PW4/ci1uOjA9PT1yP2VbMV0tdFsxXToxPT09cj90WzBdLWVbMF06Mj09PXI/dFsxXS1lWzFdOmVbMF0tdFswXX19ZnVuY3Rpb24gc24odCl7dmFyIGU9MCxyPU10LzMsbj1Qbih0KSxhPW4oZSxyKTtyZXR1cm4gYS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihlPXRbMF0qTXQvMTgwLHI9dFsxXSpNdC8xODApOltlL010KjE4MCxyL010KjE4MF19LGF9ZnVuY3Rpb24gbG4odCxlKXt2YXIgcj1NYXRoLnNpbih0KSxuPShyK01hdGguc2luKGUpKS8yLGE9MStyKigyKm4tciksaT1NYXRoLnNxcnQoYSkvbjtmdW5jdGlvbiBvKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGEtMipuKk1hdGguc2luKGUpKS9uO3JldHVybltyKk1hdGguc2luKHQqPW4pLGktcipNYXRoLmNvcyh0KV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9aS1lO3JldHVybltNYXRoLmF0YW4yKHQscikvbixJdCgoYS0odCp0K3IqcikqbipuKS8oMipuKSldfSxvfXQuZ2VvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixhLGksbz17c3RyZWFtOmZ1bmN0aW9uKHQpe3JldHVybiBhJiYoYS52YWxpZD0hMSksKGE9aSh0KSkudmFsaWQ9ITAsYX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW9uKHQ9K3NbMF1bMF0sZT0rc1swXVsxXSxyPStzWzFdWzBdLG49K3NbMV1bMV0pLGEmJihhLnZhbGlkPSExLGE9bnVsbCksbyk6W1t0LGVdLFtyLG5dXX19O3JldHVybiBvLmV4dGVudChbWzAsMF0sWzk2MCw1MDBdXSl9LCh0Lmdlby5jb25pY0VxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBzbihsbil9KS5yYXc9bG4sdC5nZW8uYWxiZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCl9LHQuZ2VvLmFsYmVyc1VzYT1mdW5jdGlvbigpe3ZhciBlLHIsbixhLGk9dC5nZW8uYWxiZXJzKCksbz10Lmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSkscz10Lmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxsPXtwb2ludDpmdW5jdGlvbih0LHIpe2U9W3Qscl19fTtmdW5jdGlvbiBjKHQpe3ZhciBpPXRbMF0sbz10WzFdO3JldHVybiBlPW51bGwscihpLG8pLGV8fChuKGksbyksZSl8fGEoaSxvKSxlfXJldHVybiBjLmludmVydD1mdW5jdGlvbih0KXt2YXIgZT1pLnNjYWxlKCkscj1pLnRyYW5zbGF0ZSgpLG49KHRbMF0tclswXSkvZSxhPSh0WzFdLXJbMV0pL2U7cmV0dXJuKGE+PS4xMiYmYTwuMjM0JiZuPj0tLjQyNSYmbjwtLjIxND9vOmE+PS4xNjYmJmE8LjIzNCYmbj49LS4yMTQmJm48LS4xMTU/czppKS5pbnZlcnQodCl9LGMuc3RyZWFtPWZ1bmN0aW9uKHQpe3ZhciBlPWkuc3RyZWFtKHQpLHI9by5zdHJlYW0odCksbj1zLnN0cmVhbSh0KTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24odCxhKXtlLnBvaW50KHQsYSksci5wb2ludCh0LGEpLG4ucG9pbnQodCxhKX0sc3BoZXJlOmZ1bmN0aW9uKCl7ZS5zcGhlcmUoKSxyLnNwaGVyZSgpLG4uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UubGluZVN0YXJ0KCksci5saW5lU3RhcnQoKSxuLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksci5saW5lRW5kKCksbi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksci5wb2x5Z29uU3RhcnQoKSxuLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCksci5wb2x5Z29uRW5kKCksbi5wb2x5Z29uRW5kKCl9fX0sYy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkucHJlY2lzaW9uKHQpLG8ucHJlY2lzaW9uKHQpLHMucHJlY2lzaW9uKHQpLGMpOmkucHJlY2lzaW9uKCl9LGMuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkuc2NhbGUodCksby5zY2FsZSguMzUqdCkscy5zY2FsZSh0KSxjLnRyYW5zbGF0ZShpLnRyYW5zbGF0ZSgpKSk6aS5zY2FsZSgpfSxjLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gaS50cmFuc2xhdGUoKTt2YXIgZT1pLnNjYWxlKCksdT0rdFswXSxoPSt0WzFdO3JldHVybiByPWkudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1t1LS40NTUqZSxoLS4yMzgqZV0sW3UrLjQ1NSplLGgrLjIzOCplXV0pLnN0cmVhbShsKS5wb2ludCxuPW8udHJhbnNsYXRlKFt1LS4zMDcqZSxoKy4yMDEqZV0pLmNsaXBFeHRlbnQoW1t1LS40MjUqZStrdCxoKy4xMiplK2t0XSxbdS0uMjE0KmUta3QsaCsuMjM0KmUta3RdXSkuc3RyZWFtKGwpLnBvaW50LGE9cy50cmFuc2xhdGUoW3UtLjIwNSplLGgrLjIxMiplXSkuY2xpcEV4dGVudChbW3UtLjIxNCplK2t0LGgrLjE2NiplK2t0XSxbdS0uMTE1KmUta3QsaCsuMjM0KmUta3RdXSkuc3RyZWFtKGwpLnBvaW50LGN9LGMuc2NhbGUoMTA3MCl9O3ZhciBjbix1bixobixmbixwbixkbixnbj17cG9pbnQ6RCxsaW5lU3RhcnQ6RCxsaW5lRW5kOkQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dW49MCxnbi5saW5lU3RhcnQ9dm59LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtnbi5saW5lU3RhcnQ9Z24ubGluZUVuZD1nbi5wb2ludD1ELGNuKz15KHVuLzIpfX07ZnVuY3Rpb24gdm4oKXt2YXIgdCxlLHIsbjtmdW5jdGlvbiBhKHQsZSl7dW4rPW4qdC1yKmUscj10LG49ZX1nbi5wb2ludD1mdW5jdGlvbihpLG8pe2duLnBvaW50PWEsdD1yPWksZT1uPW99LGduLmxpbmVFbmQ9ZnVuY3Rpb24oKXthKHQsZSl9fXZhciBtbj17cG9pbnQ6ZnVuY3Rpb24odCxlKXt0PGhuJiYoaG49dCk7dD5wbiYmKHBuPXQpO2U8Zm4mJihmbj1lKTtlPmRuJiYoZG49ZSl9LGxpbmVTdGFydDpELGxpbmVFbmQ6RCxwb2x5Z29uU3RhcnQ6RCxwb2x5Z29uRW5kOkR9O2Z1bmN0aW9uIHluKCl7dmFyIHQ9eG4oNC41KSxlPVtdLHI9e3BvaW50Om4sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ci5wb2ludD1hfSxsaW5lRW5kOm8scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ci5saW5lRW5kPXN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9byxyLnBvaW50PW59LHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybiB0PXhuKGUpLHJ9LHJlc3VsdDpmdW5jdGlvbigpe2lmKGUubGVuZ3RoKXt2YXIgdD1lLmpvaW4oIiIpO3JldHVybiBlPVtdLHR9fX07ZnVuY3Rpb24gbihyLG4pe2UucHVzaCgiTSIsciwiLCIsbix0KX1mdW5jdGlvbiBhKHQsbil7ZS5wdXNoKCJNIix0LCIsIixuKSxyLnBvaW50PWl9ZnVuY3Rpb24gaSh0LHIpe2UucHVzaCgiTCIsdCwiLCIscil9ZnVuY3Rpb24gbygpe3IucG9pbnQ9bn1mdW5jdGlvbiBzKCl7ZS5wdXNoKCJaIil9cmV0dXJuIHJ9ZnVuY3Rpb24geG4odCl7cmV0dXJuIm0wLCIrdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIistMip0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKzIqdCsieiJ9dmFyIGJuLF9uPXtwb2ludDp3bixsaW5lU3RhcnQ6a24sbGluZUVuZDpUbixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtfbi5saW5lU3RhcnQ9TW59LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtfbi5wb2ludD13bixfbi5saW5lU3RhcnQ9a24sX24ubGluZUVuZD1Ubn19O2Z1bmN0aW9uIHduKHQsZSl7X3IrPXQsd3IrPWUsKytrcn1mdW5jdGlvbiBrbigpe3ZhciB0LGU7ZnVuY3Rpb24gcihyLG4pe3ZhciBhPXItdCxpPW4tZSxvPU1hdGguc3FydChhKmEraSppKTtUcis9byoodCtyKS8yLE1yKz1vKihlK24pLzIsQXIrPW8sd24odD1yLGU9bil9X24ucG9pbnQ9ZnVuY3Rpb24obixhKXtfbi5wb2ludD1yLHduKHQ9bixlPWEpfX1mdW5jdGlvbiBUbigpe19uLnBvaW50PXdufWZ1bmN0aW9uIE1uKCl7dmFyIHQsZSxyLG47ZnVuY3Rpb24gYSh0LGUpe3ZhciBhPXQtcixpPWUtbixvPU1hdGguc3FydChhKmEraSppKTtUcis9byoocit0KS8yLE1yKz1vKihuK2UpLzIsQXIrPW8sU3IrPShvPW4qdC1yKmUpKihyK3QpLEVyKz1vKihuK2UpLExyKz0zKm8sd24ocj10LG49ZSl9X24ucG9pbnQ9ZnVuY3Rpb24oaSxvKXtfbi5wb2ludD1hLHduKHQ9cj1pLGU9bj1vKX0sX24ubGluZUVuZD1mdW5jdGlvbigpe2EodCxlKX19ZnVuY3Rpb24gQW4odCl7dmFyIGU9NC41LHI9e3BvaW50Om4sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ci5wb2ludD1hfSxsaW5lRW5kOm8scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ci5saW5lRW5kPXN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtyLmxpbmVFbmQ9byxyLnBvaW50PW59LHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQscn0scmVzdWx0OkR9O2Z1bmN0aW9uIG4ocixuKXt0Lm1vdmVUbyhyK2UsbiksdC5hcmMocixuLGUsMCxBdCl9ZnVuY3Rpb24gYShlLG4pe3QubW92ZVRvKGUsbiksci5wb2ludD1pfWZ1bmN0aW9uIGkoZSxyKXt0LmxpbmVUbyhlLHIpfWZ1bmN0aW9uIG8oKXtyLnBvaW50PW59ZnVuY3Rpb24gcygpe3QuY2xvc2VQYXRoKCl9cmV0dXJuIHJ9ZnVuY3Rpb24gU24odCl7dmFyIGU9LjUscj1NYXRoLmNvcygzMCpMdCksbj0xNjtmdW5jdGlvbiBhKGUpe3JldHVybihuP2Z1bmN0aW9uKGUpe3ZhciByLGEsbyxzLGwsYyx1LGgsZixwLGQsZyx2PXtwb2ludDptLGxpbmVTdGFydDp5LGxpbmVFbmQ6Yixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLHYubGluZVN0YXJ0PV99LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKSx2LmxpbmVTdGFydD15fX07ZnVuY3Rpb24gbShyLG4pe3I9dChyLG4pLGUucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiB5KCl7aD1OYU4sdi5wb2ludD14LGUubGluZVN0YXJ0KCl9ZnVuY3Rpb24geChyLGEpe3ZhciBvPXpyKFtyLGFdKSxzPXQocixhKTtpKGgsZix1LHAsZCxnLGg9c1swXSxmPXNbMV0sdT1yLHA9b1swXSxkPW9bMV0sZz1vWzJdLG4sZSksZS5wb2ludChoLGYpfWZ1bmN0aW9uIGIoKXt2LnBvaW50PW0sZS5saW5lRW5kKCl9ZnVuY3Rpb24gXygpe3koKSx2LnBvaW50PXcsdi5saW5lRW5kPWt9ZnVuY3Rpb24gdyh0LGUpe3gocj10LGUpLGE9aCxvPWYscz1wLGw9ZCxjPWcsdi5wb2ludD14fWZ1bmN0aW9uIGsoKXtpKGgsZix1LHAsZCxnLGEsbyxyLHMsbCxjLG4sZSksdi5saW5lRW5kPWIsYigpfXJldHVybiB2fTpmdW5jdGlvbihlKXtyZXR1cm4gTG4oZSxmdW5jdGlvbihyLG4pe3I9dChyLG4pLGUucG9pbnQoclswXSxyWzFdKX0pfSkoZSl9ZnVuY3Rpb24gaShuLGEsbyxzLGwsYyx1LGgsZixwLGQsZyx2LG0pe3ZhciB4PXUtbixiPWgtYSxfPXgqeCtiKmI7aWYoXz40KmUmJnYtLSl7dmFyIHc9cytwLGs9bCtkLFQ9YytnLE09TWF0aC5zcXJ0KHcqdytrKmsrVCpUKSxBPU1hdGguYXNpbihULz1NKSxTPXkoeShUKS0xKTxrdHx8eShvLWYpPGt0PyhvK2YpLzI6TWF0aC5hdGFuMihrLHcpLEU9dChTLEEpLEw9RVswXSxDPUVbMV0sUD1MLW4sTz1DLWEsej1iKlAteCpPOyh6KnovXz5lfHx5KCh4KlArYipPKS9fLS41KT4uM3x8cypwK2wqZCtjKmc8cikmJihpKG4sYSxvLHMsbCxjLEwsQyxTLHcvPU0say89TSxULHYsbSksbS5wb2ludChMLEMpLGkoTCxDLFMsdyxrLFQsdSxoLGYscCxkLGcsdixtKSl9fXJldHVybiBhLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0oZT10KnQpPjAmJjE2LGEpOk1hdGguc3FydChlKX0sYX1mdW5jdGlvbiBFbih0KXt0aGlzLnN0cmVhbT10fWZ1bmN0aW9uIExuKHQsZSl7cmV0dXJue3BvaW50OmUsc3BoZXJlOmZ1bmN0aW9uKCl7dC5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dC5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBDbih0KXtyZXR1cm4gUG4oZnVuY3Rpb24oKXtyZXR1cm4gdH0pKCl9ZnVuY3Rpb24gUG4oZSl7dmFyIHIsbixhLGksbyxzLGw9U24oZnVuY3Rpb24odCxlKXtyZXR1cm5bKHQ9cih0LGUpKVswXSpjK2ksby10WzFdKmNdfSksYz0xNTAsdT00ODAsaD0yNTAsZj0wLHA9MCxkPTAsZz0wLHY9MCxtPXJuLHg9UCxiPW51bGwsXz1udWxsO2Z1bmN0aW9uIHcodCl7cmV0dXJuWyh0PWEodFswXSpMdCx0WzFdKkx0KSlbMF0qYytpLG8tdFsxXSpjXX1mdW5jdGlvbiBrKHQpe3JldHVybih0PWEuaW52ZXJ0KCh0WzBdLWkpL2MsKG8tdFsxXSkvYykpJiZbdFswXSpDdCx0WzFdKkN0XX1mdW5jdGlvbiBUKCl7YT1XcihuPURuKGQsZyx2KSxyKTt2YXIgdD1yKGYscCk7cmV0dXJuIGk9dS10WzBdKmMsbz1oK3RbMV0qYyxNKCl9ZnVuY3Rpb24gTSgpe3JldHVybiBzJiYocy52YWxpZD0hMSxzPW51bGwpLHd9cmV0dXJuIHcuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBzJiYocy52YWxpZD0hMSksKHM9T24obShuLGwoeCh0KSkpKSkudmFsaWQ9ITAsc30sdy5jbGlwQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09bnVsbD09dD8oYj10LHJuKTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmNvcyh0KSxyPWU+MCxuPXkoZSk+a3Q7cmV0dXJuIFFyKGEsZnVuY3Rpb24odCl7dmFyIGUscyxsLGMsdTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7Yz1sPSExLHU9MX0scG9pbnQ6ZnVuY3Rpb24oaCxmKXt2YXIgcCxkPVtoLGZdLGc9YShoLGYpLHY9cj9nPzA6byhoLGYpOmc/byhoKyhoPDA/TXQ6LU10KSxmKTowO2lmKCFlJiYoYz1sPWcpJiZ0LmxpbmVTdGFydCgpLGchPT1sJiYocD1pKGUsZCksKGpyKGUscCl8fGpyKGQscCkpJiYoZFswXSs9a3QsZFsxXSs9a3QsZz1hKGRbMF0sZFsxXSkpKSxnIT09bCl1PTAsZz8odC5saW5lU3RhcnQoKSxwPWkoZCxlKSx0LnBvaW50KHBbMF0scFsxXSkpOihwPWkoZSxkKSx0LnBvaW50KHBbMF0scFsxXSksdC5saW5lRW5kKCkpLGU9cDtlbHNlIGlmKG4mJmUmJnJeZyl7dmFyIG07diZzfHwhKG09aShkLGUsITApKXx8KHU9MCxyPyh0LmxpbmVTdGFydCgpLHQucG9pbnQobVswXVswXSxtWzBdWzFdKSx0LnBvaW50KG1bMV1bMF0sbVsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KG1bMV1bMF0sbVsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KG1bMF1bMF0sbVswXVsxXSkpKX0hZ3x8ZSYmanIoZSxkKXx8dC5wb2ludChkWzBdLGRbMV0pLGU9ZCxsPWcscz12fSxsaW5lRW5kOmZ1bmN0aW9uKCl7bCYmdC5saW5lRW5kKCksZT1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiB1fChjJiZsKTw8MX19fSxObih0LDYqTHQpLHI/WzAsLXRdOlstTXQsdC1NdF0pO2Z1bmN0aW9uIGEodCxyKXtyZXR1cm4gTWF0aC5jb3ModCkqTWF0aC5jb3Mocik+ZX1mdW5jdGlvbiBpKHQscixuKXt2YXIgYT1bMSwwLDBdLGk9RHIoenIodCksenIocikpLG89SXIoaSxpKSxzPWlbMF0sbD1vLXMqcztpZighbClyZXR1cm4hbiYmdDt2YXIgYz1lKm8vbCx1PS1lKnMvbCxoPURyKGEsaSksZj1GcihhLGMpO1JyKGYsRnIoaSx1KSk7dmFyIHA9aCxkPUlyKGYscCksZz1JcihwLHApLHY9ZCpkLWcqKElyKGYsZiktMSk7aWYoISh2PDApKXt2YXIgbT1NYXRoLnNxcnQodikseD1GcihwLCgtZC1tKS9nKTtpZihScih4LGYpLHg9TnIoeCksIW4pcmV0dXJuIHg7dmFyIGIsXz10WzBdLHc9clswXSxrPXRbMV0sVD1yWzFdO3c8XyYmKGI9XyxfPXcsdz1iKTt2YXIgTT13LV8sQT15KE0tTXQpPGt0O2lmKCFBJiZUPGsmJihiPWssaz1ULFQ9YiksQXx8TTxrdD9BP2srVD4wXnhbMV08KHkoeFswXS1fKTxrdD9rOlQpOms8PXhbMV0mJnhbMV08PVQ6TT5NdF4oXzw9eFswXSYmeFswXTw9dykpe3ZhciBTPUZyKHAsKC1kK20pL2cpO3JldHVybiBScihTLGYpLFt4LE5yKFMpXX19fWZ1bmN0aW9uIG8oZSxuKXt2YXIgYT1yP3Q6TXQtdCxpPTA7cmV0dXJuIGU8LWE/aXw9MTplPmEmJihpfD0yKSxuPC1hP2l8PTQ6bj5hJiYoaXw9OCksaX19KChiPSt0KSpMdCksTSgpKTpifSx3LmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dCx4PXQ/b24odFswXVswXSx0WzBdWzFdLHRbMV1bMF0sdFsxXVsxXSk6UCxNKCkpOl99LHcuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsVCgpKTpjfSx3LnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdFswXSxoPSt0WzFdLFQoKSk6W3UsaF19LHcuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXRbMF0lMzYwKkx0LHA9dFsxXSUzNjAqTHQsVCgpKTpbZipDdCxwKkN0XX0sdy5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dFswXSUzNjAqTHQsZz10WzFdJTM2MCpMdCx2PXQubGVuZ3RoPjI/dFsyXSUzNjAqTHQ6MCxUKCkpOltkKkN0LGcqQ3QsdipDdF19LHQucmViaW5kKHcsbCwicHJlY2lzaW9uIiksZnVuY3Rpb24oKXtyZXR1cm4gcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx3LmludmVydD1yLmludmVydCYmayxUKCl9fWZ1bmN0aW9uIE9uKHQpe3JldHVybiBMbih0LGZ1bmN0aW9uKGUscil7dC5wb2ludChlKkx0LHIqTHQpfSl9ZnVuY3Rpb24gem4odCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBJbih0LGUpe3JldHVyblt0Pk10P3QtQXQ6dDwtTXQ/dCtBdDp0LGVdfWZ1bmN0aW9uIERuKHQsZSxyKXtyZXR1cm4gdD9lfHxyP1dyKEZuKHQpLEJuKGUscikpOkZuKHQpOmV8fHI/Qm4oZSxyKTpJbn1mdW5jdGlvbiBSbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm5bKGUrPXQpPk10P2UtQXQ6ZTwtTXQ/ZStBdDplLHJdfX1mdW5jdGlvbiBGbih0KXt2YXIgZT1Sbih0KTtyZXR1cm4gZS5pbnZlcnQ9Um4oLXQpLGV9ZnVuY3Rpb24gQm4odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpLGE9TWF0aC5jb3MoZSksaT1NYXRoLnNpbihlKTtmdW5jdGlvbiBvKHQsZSl7dmFyIG89TWF0aC5jb3MoZSkscz1NYXRoLmNvcyh0KSpvLGw9TWF0aC5zaW4odCkqbyxjPU1hdGguc2luKGUpLHU9YypyK3MqbjtyZXR1cm5bTWF0aC5hdGFuMihsKmEtdSppLHMqci1jKm4pLEl0KHUqYStsKmkpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbz1NYXRoLmNvcyhlKSxzPU1hdGguY29zKHQpKm8sbD1NYXRoLnNpbih0KSpvLGM9TWF0aC5zaW4oZSksdT1jKmEtbCppO3JldHVybltNYXRoLmF0YW4yKGwqYStjKmkscypyK3UqbiksSXQodSpyLXMqbildfSxvfWZ1bmN0aW9uIE5uKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gZnVuY3Rpb24oYSxpLG8scyl7dmFyIGw9byplO251bGwhPWE/KGE9am4ocixhKSxpPWpuKHIsaSksKG8+MD9hPGk6YT5pKSYmKGErPW8qQXQpKTooYT10K28qQXQsaT10LS41KmwpO2Zvcih2YXIgYyx1PWE7bz4wP3U+aTp1PGk7dS09bClzLnBvaW50KChjPU5yKFtyLC1uKk1hdGguY29zKHUpLC1uKk1hdGguc2luKHUpXSkpWzBdLGNbMV0pfX1mdW5jdGlvbiBqbih0LGUpe3ZhciByPXpyKGUpO3JbMF0tPXQsQnIocik7dmFyIG49enQoLXJbMV0pO3JldHVybigoLXJbMl08MD8tbjpuKSsyKk1hdGguUEkta3QpJSgyKk1hdGguUEkpfWZ1bmN0aW9uIFZuKGUscixuKXt2YXIgYT10LnJhbmdlKGUsci1rdCxuKS5jb25jYXQocik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhLm1hcChmdW5jdGlvbihlKXtyZXR1cm5bdCxlXX0pfX1mdW5jdGlvbiBVbihlLHIsbil7dmFyIGE9dC5yYW5nZShlLHIta3QsbikuY29uY2F0KHIpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuW2UsdF19KX19ZnVuY3Rpb24gcW4odCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIEhuKHQpe3JldHVybiB0LnRhcmdldH10Lmdlby5wYXRoPWZ1bmN0aW9uKCl7dmFyIGUscixuLGEsaSxvPTQuNTtmdW5jdGlvbiBzKGUpe3JldHVybiBlJiYoImZ1bmN0aW9uIj09dHlwZW9mIG8mJmEucG9pbnRSYWRpdXMoK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxpJiZpLnZhbGlkfHwoaT1uKGEpKSx0Lmdlby5zdHJlYW0oZSxpKSksYS5yZXN1bHQoKX1mdW5jdGlvbiBsKCl7cmV0dXJuIGk9bnVsbCxzfXJldHVybiBzLmFyZWE9ZnVuY3Rpb24oZSl7cmV0dXJuIGNuPTAsdC5nZW8uc3RyZWFtKGUsbihnbikpLGNufSxzLmNlbnRyb2lkPWZ1bmN0aW9uKGUpe3JldHVybiBfcj13cj1rcj1Ucj1Ncj1Bcj1Tcj1Fcj1Mcj0wLHQuZ2VvLnN0cmVhbShlLG4oX24pKSxMcj9bU3IvTHIsRXIvTHJdOkFyP1tUci9BcixNci9Bcl06a3I/W19yL2tyLHdyL2tyXTpbTmFOLE5hTl19LHMuYm91bmRzPWZ1bmN0aW9uKGUpe3JldHVybiBwbj1kbj0tKGhuPWZuPTEvMCksdC5nZW8uc3RyZWFtKGUsbihtbikpLFtbaG4sZm5dLFtwbixkbl1dfSxzLnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49KGU9dCk/dC5zdHJlYW18fChyPXQsYT1TbihmdW5jdGlvbih0LGUpe3JldHVybiByKFt0KkN0LGUqQ3RdKX0pLGZ1bmN0aW9uKHQpe3JldHVybiBPbihhKHQpKX0pOlAsbCgpKTplO3ZhciByLGF9LHMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT0ocj10KT9uZXcgeW46bmV3IEFuKHQpLCJmdW5jdGlvbiIhPXR5cGVvZiBvJiZhLnBvaW50UmFkaXVzKG8pLGwoKSk6cn0scy5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OihhLnBvaW50UmFkaXVzKCt0KSwrdCkscyk6b30scy5wcm9qZWN0aW9uKHQuZ2VvLmFsYmVyc1VzYSgpKS5jb250ZXh0KG51bGwpfSx0Lmdlby50cmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJue3N0cmVhbTpmdW5jdGlvbihlKXt2YXIgcj1uZXcgRW4oZSk7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByfX19LEVuLnByb3RvdHlwZT17cG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX0sdC5nZW8ucHJvamVjdGlvbj1Dbix0Lmdlby5wcm9qZWN0aW9uTXV0YXRvcj1QbiwodC5nZW8uZXF1aXJlY3Rhbmd1bGFyPWZ1bmN0aW9uKCl7cmV0dXJuIENuKHpuKX0pLnJhdz16bi5pbnZlcnQ9em4sdC5nZW8ucm90YXRpb249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4oZT10KGVbMF0qTHQsZVsxXSpMdCkpWzBdKj1DdCxlWzFdKj1DdCxlfXJldHVybiB0PURuKHRbMF0lMzYwKkx0LHRbMV0qTHQsdC5sZW5ndGg+Mj90WzJdKkx0OjApLGUuaW52ZXJ0PWZ1bmN0aW9uKGUpe3JldHVybihlPXQuaW52ZXJ0KGVbMF0qTHQsZVsxXSpMdCkpWzBdKj1DdCxlWzFdKj1DdCxlfSxlfSxJbi5pbnZlcnQ9em4sdC5nZW8uY2lyY2xlPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPVswLDBdLG49NjtmdW5jdGlvbiBhKCl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cixuPURuKC10WzBdKkx0LC10WzFdKkx0LDApLmludmVydCxhPVtdO3JldHVybiBlKG51bGwsbnVsbCwxLHtwb2ludDpmdW5jdGlvbih0LGUpe2EucHVzaCh0PW4odCxlKSksdFswXSo9Q3QsdFsxXSo9Q3R9fSkse3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOlthXX19cmV0dXJuIGEub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5hbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1ObigodD0rcikqTHQsbipMdCksYSk6dH0sYS5wcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Tm4odCpMdCwobj0rcikqTHQpLGEpOm59LGEuYW5nbGUoOTApfSx0Lmdlby5kaXN0YW5jZT1mdW5jdGlvbih0LGUpe3ZhciByLG49KGVbMF0tdFswXSkqTHQsYT10WzFdKkx0LGk9ZVsxXSpMdCxvPU1hdGguc2luKG4pLHM9TWF0aC5jb3MobiksbD1NYXRoLnNpbihhKSxjPU1hdGguY29zKGEpLHU9TWF0aC5zaW4oaSksaD1NYXRoLmNvcyhpKTtyZXR1cm4gTWF0aC5hdGFuMihNYXRoLnNxcnQoKHI9aCpvKSpyKyhyPWMqdS1sKmgqcykqciksbCp1K2MqaCpzKX0sdC5nZW8uZ3JhdGljdWxlPWZ1bmN0aW9uKCl7dmFyIGUscixuLGEsaSxvLHMsbCxjLHUsaCxmLHA9MTAsZD1wLGc9OTAsdj0zNjAsbT0yLjU7ZnVuY3Rpb24geCgpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmIoKX19ZnVuY3Rpb24gYigpe3JldHVybiB0LnJhbmdlKE1hdGguY2VpbChhL2cpKmcsbixnKS5tYXAoaCkuY29uY2F0KHQucmFuZ2UoTWF0aC5jZWlsKGwvdikqdixzLHYpLm1hcChmKSkuY29uY2F0KHQucmFuZ2UoTWF0aC5jZWlsKHIvcCkqcCxlLHApLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4geSh0JWcpPmt0fSkubWFwKGMpKS5jb25jYXQodC5yYW5nZShNYXRoLmNlaWwoby9kKSpkLGksZCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB5KHQldik+a3R9KS5tYXAodSkpfXJldHVybiB4LmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGIoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSl9LHgub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbaChhKS5jb25jYXQoZihzKS5zbGljZSgxKSxoKG4pLnJldmVyc2UoKS5zbGljZSgxKSxmKGwpLnJldmVyc2UoKS5zbGljZSgxKSldfX0seC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/eC5tYWpvckV4dGVudCh0KS5taW5vckV4dGVudCh0KTp4Lm1pbm9yRXh0ZW50KCl9LHgubWFqb3JFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3RbMF1bMF0sbj0rdFsxXVswXSxsPSt0WzBdWzFdLHM9K3RbMV1bMV0sYT5uJiYodD1hLGE9bixuPXQpLGw+cyYmKHQ9bCxsPXMscz10KSx4LnByZWNpc2lvbihtKSk6W1thLGxdLFtuLHNdXX0seC5taW5vckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXVswXSxlPSt0WzFdWzBdLG89K3RbMF1bMV0saT0rdFsxXVsxXSxyPmUmJih0PXIscj1lLGU9dCksbz5pJiYodD1vLG89aSxpPXQpLHgucHJlY2lzaW9uKG0pKTpbW3Isb10sW2UsaV1dfSx4LnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/eC5tYWpvclN0ZXAodCkubWlub3JTdGVwKHQpOngubWlub3JTdGVwKCl9LHgubWFqb3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt0WzBdLHY9K3RbMV0seCk6W2csdl19LHgubWlub3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0WzBdLGQ9K3RbMV0seCk6W3AsZF19LHgucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPSt0LGM9Vm4obyxpLDkwKSx1PVVuKHIsZSxtKSxoPVZuKGwscyw5MCksZj1VbihhLG4sbSkseCk6bX0seC5tYWpvckV4dGVudChbWy0xODAsLTkwK2t0XSxbMTgwLDkwLWt0XV0pLm1pbm9yRXh0ZW50KFtbLTE4MCwtODAta3RdLFsxODAsODAra3RdXSl9LHQuZ2VvLmdyZWF0QXJjPWZ1bmN0aW9uKCl7dmFyIGUscixuPXFuLGE9SG47ZnVuY3Rpb24gaSgpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpbZXx8bi5hcHBseSh0aGlzLGFyZ3VtZW50cykscnx8YS5hcHBseSh0aGlzLGFyZ3VtZW50cyldfX1yZXR1cm4gaS5kaXN0YW5jZT1mdW5jdGlvbigpe3JldHVybiB0Lmdlby5kaXN0YW5jZShlfHxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyfHxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGkuc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZT0iZnVuY3Rpb24iPT10eXBlb2YgdD9udWxsOnQsaSk6bn0saS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P251bGw6dCxpKTphfSxpLnByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2k6MH0saX0sdC5nZW8uaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcj10WzBdKkx0LG49dFsxXSpMdCxhPWVbMF0qTHQsaT1lWzFdKkx0LG89TWF0aC5jb3Mobikscz1NYXRoLnNpbihuKSxsPU1hdGguY29zKGkpLGM9TWF0aC5zaW4oaSksdT1vKk1hdGguY29zKHIpLGg9bypNYXRoLnNpbihyKSxmPWwqTWF0aC5jb3MoYSkscD1sKk1hdGguc2luKGEpLGQ9MipNYXRoLmFzaW4oTWF0aC5zcXJ0KFJ0KGktbikrbypsKlJ0KGEtcikpKSxnPTEvTWF0aC5zaW4oZCksKHY9ZD9mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNpbih0Kj1kKSpnLHI9TWF0aC5zaW4oZC10KSpnLG49cip1K2UqZixhPXIqaCtlKnAsaT1yKnMrZSpjO3JldHVybltNYXRoLmF0YW4yKGEsbikqQ3QsTWF0aC5hdGFuMihpLE1hdGguc3FydChuKm4rYSphKSkqQ3RdfTpmdW5jdGlvbigpe3JldHVybltyKkN0LG4qQ3RdfSkuZGlzdGFuY2U9ZCx2O3ZhciByLG4sYSxpLG8scyxsLGMsdSxoLGYscCxkLGcsdn0sdC5nZW8ubGVuZ3RoPWZ1bmN0aW9uKGUpe3JldHVybiBibj0wLHQuZ2VvLnN0cmVhbShlLEduKSxibn07dmFyIEduPXtzcGhlcmU6RCxwb2ludDpELGxpbmVTdGFydDpmdW5jdGlvbigpe3ZhciB0LGUscjtmdW5jdGlvbiBuKG4sYSl7dmFyIGk9TWF0aC5zaW4oYSo9THQpLG89TWF0aC5jb3MoYSkscz15KChuKj1MdCktdCksbD1NYXRoLmNvcyhzKTtibis9TWF0aC5hdGFuMihNYXRoLnNxcnQoKHM9bypNYXRoLnNpbihzKSkqcysocz1yKmktZSpvKmwpKnMpLGUqaStyKm8qbCksdD1uLGU9aSxyPW99R24ucG9pbnQ9ZnVuY3Rpb24oYSxpKXt0PWEqTHQsZT1NYXRoLnNpbihpKj1MdCkscj1NYXRoLmNvcyhpKSxHbi5wb2ludD1ufSxHbi5saW5lRW5kPWZ1bmN0aW9uKCl7R24ucG9pbnQ9R24ubGluZUVuZD1EfX0sbGluZUVuZDpELHBvbHlnb25TdGFydDpELHBvbHlnb25FbmQ6RH07ZnVuY3Rpb24gWW4odCxlKXtmdW5jdGlvbiByKGUscil7dmFyIG49TWF0aC5jb3MoZSksYT1NYXRoLmNvcyhyKSxpPXQobiphKTtyZXR1cm5baSphKk1hdGguc2luKGUpLGkqTWF0aC5zaW4ocildfXJldHVybiByLmludmVydD1mdW5jdGlvbih0LHIpe3ZhciBuPU1hdGguc3FydCh0KnQrcipyKSxhPWUobiksaT1NYXRoLnNpbihhKSxvPU1hdGguY29zKGEpO3JldHVybltNYXRoLmF0YW4yKHQqaSxuKm8pLE1hdGguYXNpbihuJiZyKmkvbildfSxyfXZhciBXbj1ZbihmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KDIvKDErdCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gMipNYXRoLmFzaW4odC8yKX0pOyh0Lmdlby5hemltdXRoYWxFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oV24pfSkucmF3PVduO3ZhciBYbj1ZbihmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmFjb3ModCk7cmV0dXJuIGUmJmUvTWF0aC5zaW4oZSl9LFApO2Z1bmN0aW9uIFpuKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksbj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC50YW4oTXQvNCt0LzIpfSxhPXQ9PT1lP01hdGguc2luKHQpOk1hdGgubG9nKHIvTWF0aC5jb3MoZSkpL01hdGgubG9nKG4oZSkvbih0KSksaT1yKk1hdGgucG93KG4odCksYSkvYTtpZighYSlyZXR1cm4gUW47ZnVuY3Rpb24gbyh0LGUpe2k+MD9lPC1FdCtrdCYmKGU9LUV0K2t0KTplPkV0LWt0JiYoZT1FdC1rdCk7dmFyIHI9aS9NYXRoLnBvdyhuKGUpLGEpO3JldHVybltyKk1hdGguc2luKGEqdCksaS1yKk1hdGguY29zKGEqdCldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWktZSxuPVB0KGEpKk1hdGguc3FydCh0KnQrcipyKTtyZXR1cm5bTWF0aC5hdGFuMih0LHIpL2EsMipNYXRoLmF0YW4oTWF0aC5wb3coaS9uLDEvYSkpLUV0XX0sb31mdW5jdGlvbiBKbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49dD09PWU/TWF0aC5zaW4odCk6KHItTWF0aC5jb3MoZSkpLyhlLXQpLGE9ci9uK3Q7aWYoeShuKTxrdClyZXR1cm4gem47ZnVuY3Rpb24gaSh0LGUpe3ZhciByPWEtZTtyZXR1cm5bcipNYXRoLnNpbihuKnQpLGEtcipNYXRoLmNvcyhuKnQpXX1yZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1hLWU7cmV0dXJuW01hdGguYXRhbjIodCxyKS9uLGEtUHQobikqTWF0aC5zcXJ0KHQqdCtyKnIpXX0saX0odC5nZW8uYXppbXV0aGFsRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oWG4pfSkucmF3PVhuLCh0Lmdlby5jb25pY0NvbmZvcm1hbD1mdW5jdGlvbigpe3JldHVybiBzbihabil9KS5yYXc9Wm4sKHQuZ2VvLmNvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gc24oSm4pfSkucmF3PUpuO3ZhciBLbj1ZbihmdW5jdGlvbih0KXtyZXR1cm4gMS90fSxNYXRoLmF0YW4pO2Z1bmN0aW9uIFFuKHQsZSl7cmV0dXJuW3QsTWF0aC5sb2coTWF0aC50YW4oTXQvNCtlLzIpKV19ZnVuY3Rpb24gJG4odCl7dmFyIGUscj1Dbih0KSxuPXIuc2NhbGUsYT1yLnRyYW5zbGF0ZSxpPXIuY2xpcEV4dGVudDtyZXR1cm4gci5zY2FsZT1mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkocixhcmd1bWVudHMpO3JldHVybiB0PT09cj9lP3IuY2xpcEV4dGVudChudWxsKTpyOnR9LHIudHJhbnNsYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9YS5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2U/ci5jbGlwRXh0ZW50KG51bGwpOnI6dH0sci5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBvPWkuYXBwbHkocixhcmd1bWVudHMpO2lmKG89PT1yKXtpZihlPW51bGw9PXQpe3ZhciBzPU10Km4oKSxsPWEoKTtpKFtbbFswXS1zLGxbMV0tc10sW2xbMF0rcyxsWzFdK3NdXSl9fWVsc2UgZSYmKG89bnVsbCk7cmV0dXJuIG99LHIuY2xpcEV4dGVudChudWxsKX0odC5nZW8uZ25vbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oS24pfSkucmF3PUtuLFFuLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqTWF0aC5hdGFuKE1hdGguZXhwKGUpKS1FdF19LCh0Lmdlby5tZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiAkbihRbil9KS5yYXc9UW47dmFyIHRhPVluKGZ1bmN0aW9uKCl7cmV0dXJuIDF9LE1hdGguYXNpbik7KHQuZ2VvLm9ydGhvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBDbih0YSl9KS5yYXc9dGE7dmFyIGVhPVluKGZ1bmN0aW9uKHQpe3JldHVybiAxLygxK3QpfSxmdW5jdGlvbih0KXtyZXR1cm4gMipNYXRoLmF0YW4odCl9KTtmdW5jdGlvbiByYSh0LGUpe3JldHVybltNYXRoLmxvZyhNYXRoLnRhbihNdC80K2UvMikpLC10XX1mdW5jdGlvbiBuYSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBhYSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBpYSh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1bMCwxXSxuPTIsYT0yO2E8ZTthKyspe2Zvcig7bj4xJiZPdCh0W3Jbbi0yXV0sdFtyW24tMV1dLHRbYV0pPD0wOyktLW47cltuKytdPWF9cmV0dXJuIHIuc2xpY2UoMCxuKX1mdW5jdGlvbiBvYSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX0odC5nZW8uc3RlcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBDbihlYSl9KS5yYXc9ZWEscmEuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqTWF0aC5hdGFuKE1hdGguZXhwKHQpKS1FdF19LCh0Lmdlby50cmFuc3ZlcnNlTWVyY2F0b3I9ZnVuY3Rpb24oKXt2YXIgdD0kbihyYSksZT10LmNlbnRlcixyPXQucm90YXRlO3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD9lKFstdFsxXSx0WzBdXSk6Wyh0PWUoKSlbMV0sLXRbMF1dfSx0LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD9yKFt0WzBdLHRbMV0sdC5sZW5ndGg+Mj90WzJdKzkwOjkwXSk6Wyh0PXIoKSlbMF0sdFsxXSx0WzJdLTkwXX0scihbMCwwLDkwXSl9KS5yYXc9cmEsdC5nZW9tPXt9LHQuZ2VvbS5odWxsPWZ1bmN0aW9uKHQpe3ZhciBlPW5hLHI9YWE7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbih0KTtmdW5jdGlvbiBuKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuW107dmFyIG4sYT12ZShlKSxpPXZlKHIpLG89dC5sZW5ndGgscz1bXSxsPVtdO2ZvcihuPTA7bjxvO24rKylzLnB1c2goWythLmNhbGwodGhpcyx0W25dLG4pLCtpLmNhbGwodGhpcyx0W25dLG4pLG5dKTtmb3Iocy5zb3J0KG9hKSxuPTA7bjxvO24rKylsLnB1c2goW3Nbbl1bMF0sLXNbbl1bMV1dKTt2YXIgYz1pYShzKSx1PWlhKGwpLGg9dVswXT09PWNbMF0sZj11W3UubGVuZ3RoLTFdPT09Y1tjLmxlbmd0aC0xXSxwPVtdO2ZvcihuPWMubGVuZ3RoLTE7bj49MDstLW4pcC5wdXNoKHRbc1tjW25dXVsyXV0pO2ZvcihuPStoO248dS5sZW5ndGgtZjsrK24pcC5wdXNoKHRbc1t1W25dXVsyXV0pO3JldHVybiBwfXJldHVybiBuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxufSx0Lmdlb20ucG9seWdvbj1mdW5jdGlvbih0KXtyZXR1cm4gVSh0LHNhKSx0fTt2YXIgc2E9dC5nZW9tLnBvbHlnb24ucHJvdG90eXBlPVtdO2Z1bmN0aW9uIGxhKHQsZSxyKXtyZXR1cm4oclswXS1lWzBdKSoodFsxXS1lWzFdKTwoclsxXS1lWzFdKSoodFswXS1lWzBdKX1mdW5jdGlvbiBjYSh0LGUscixuKXt2YXIgYT10WzBdLGk9clswXSxvPWVbMF0tYSxzPW5bMF0taSxsPXRbMV0sYz1yWzFdLHU9ZVsxXS1sLGg9blsxXS1jLGY9KHMqKGwtYyktaCooYS1pKSkvKGgqby1zKnUpO3JldHVyblthK2YqbyxsK2YqdV19ZnVuY3Rpb24gdWEodCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIShlWzBdLXJbMF18fGVbMV0tclsxXSl9c2EuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPS0xLHI9dGhpcy5sZW5ndGgsbj10aGlzW3ItMV0sYT0wOysrZTxyOyl0PW4sbj10aGlzW2VdLGErPXRbMV0qblswXS10WzBdKm5bMV07cmV0dXJuLjUqYX0sc2EuY2VudHJvaWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPS0xLGE9dGhpcy5sZW5ndGgsaT0wLG89MCxzPXRoaXNbYS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KHQ9LTEvKDYqdGhpcy5hcmVhKCkpKTsrK248YTspZT1zLHM9dGhpc1tuXSxyPWVbMF0qc1sxXS1zWzBdKmVbMV0saSs9KGVbMF0rc1swXSkqcixvKz0oZVsxXStzWzFdKSpyO3JldHVybltpKnQsbyp0XX0sc2EuY2xpcD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGEsaSxvLHM9dWEodCksbD0tMSxjPXRoaXMubGVuZ3RoLXVhKHRoaXMpLHU9dGhpc1tjLTFdOysrbDxjOyl7Zm9yKGU9dC5zbGljZSgpLHQubGVuZ3RoPTAsYT10aGlzW2xdLGk9ZVsobj1lLmxlbmd0aC1zKS0xXSxyPS0xOysrcjxuOylsYShvPWVbcl0sdSxhKT8obGEoaSx1LGEpfHx0LnB1c2goY2EoaSxvLHUsYSkpLHQucHVzaChvKSk6bGEoaSx1LGEpJiZ0LnB1c2goY2EoaSxvLHUsYSkpLGk9bztzJiZ0LnB1c2godFswXSksdT1hfXJldHVybiB0fTt2YXIgaGEsZmEscGEsZGEsZ2EsdmE9W10sbWE9W107ZnVuY3Rpb24geWEoKXtSYSh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24geGEodCl7dmFyIGU9dmEucG9wKCl8fG5ldyB5YTtyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiBiYSh0KXtMYSh0KSxwYS5yZW1vdmUodCksdmEucHVzaCh0KSxSYSh0KX1mdW5jdGlvbiBfYSh0KXt2YXIgZT10LmNpcmNsZSxyPWUueCxuPWUuY3ksYT17eDpyLHk6bn0saT10LlAsbz10Lk4scz1bdF07YmEodCk7Zm9yKHZhciBsPWk7bC5jaXJjbGUmJnkoci1sLmNpcmNsZS54KTxrdCYmeShuLWwuY2lyY2xlLmN5KTxrdDspaT1sLlAscy51bnNoaWZ0KGwpLGJhKGwpLGw9aTtzLnVuc2hpZnQobCksTGEobCk7Zm9yKHZhciBjPW87Yy5jaXJjbGUmJnkoci1jLmNpcmNsZS54KTxrdCYmeShuLWMuY2lyY2xlLmN5KTxrdDspbz1jLk4scy5wdXNoKGMpLGJhKGMpLGM9bztzLnB1c2goYyksTGEoYyk7dmFyIHUsaD1zLmxlbmd0aDtmb3IodT0xO3U8aDsrK3UpYz1zW3VdLGw9c1t1LTFdLHphKGMuZWRnZSxsLnNpdGUsYy5zaXRlLGEpO2w9c1swXSwoYz1zW2gtMV0pLmVkZ2U9T2EobC5zaXRlLGMuc2l0ZSxudWxsLGEpLEVhKGwpLEVhKGMpfWZ1bmN0aW9uIHdhKHQpe2Zvcih2YXIgZSxyLG4sYSxpPXQueCxvPXQueSxzPXBhLl87czspaWYoKG49a2EocyxvKS1pKT5rdClzPXMuTDtlbHNle2lmKCEoKGE9aS1UYShzLG8pKT5rdCkpe24+LWt0PyhlPXMuUCxyPXMpOmE+LWt0PyhlPXMscj1zLk4pOmU9cj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn12YXIgbD14YSh0KTtpZihwYS5pbnNlcnQoZSxsKSxlfHxyKXtpZihlPT09cilyZXR1cm4gTGEoZSkscj14YShlLnNpdGUpLHBhLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9T2EoZS5zaXRlLGwuc2l0ZSksRWEoZSksdm9pZCBFYShyKTtpZihyKXtMYShlKSxMYShyKTt2YXIgYz1lLnNpdGUsdT1jLngsaD1jLnksZj10LngtdSxwPXQueS1oLGQ9ci5zaXRlLGc9ZC54LXUsdj1kLnktaCxtPTIqKGYqdi1wKmcpLHk9ZipmK3AqcCx4PWcqZyt2KnYsYj17eDoodip5LXAqeCkvbSt1LHk6KGYqeC1nKnkpL20raH07emEoci5lZGdlLGMsZCxiKSxsLmVkZ2U9T2EoYyx0LG51bGwsYiksci5lZGdlPU9hKHQsZCxudWxsLGIpLEVhKGUpLEVhKHIpfWVsc2UgbC5lZGdlPU9hKGUuc2l0ZSxsLnNpdGUpfX1mdW5jdGlvbiBrYSh0LGUpe3ZhciByPXQuc2l0ZSxuPXIueCxhPXIueSxpPWEtZTtpZighaSlyZXR1cm4gbjt2YXIgbz10LlA7aWYoIW8pcmV0dXJuLTEvMDt2YXIgcz0ocj1vLnNpdGUpLngsbD1yLnksYz1sLWU7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGg9MS9pLTEvYyxmPXUvYztyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKHUqdS8oLTIqYyktbCtjLzIrYS1pLzIpKSkvaCtuOihuK3MpLzJ9ZnVuY3Rpb24gVGEodCxlKXt2YXIgcj10Lk47aWYocilyZXR1cm4ga2EocixlKTt2YXIgbj10LnNpdGU7cmV0dXJuIG4ueT09PWU/bi54OjEvMH1mdW5jdGlvbiBNYSh0KXt0aGlzLnNpdGU9dCx0aGlzLmVkZ2VzPVtdfWZ1bmN0aW9uIEFhKHQsZSl7cmV0dXJuIGUuYW5nbGUtdC5hbmdsZX1mdW5jdGlvbiBTYSgpe1JhKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBFYSh0KXt2YXIgZT10LlAscj10Lk47aWYoZSYmcil7dmFyIG49ZS5zaXRlLGE9dC5zaXRlLGk9ci5zaXRlO2lmKG4hPT1pKXt2YXIgbz1hLngscz1hLnksbD1uLngtbyxjPW4ueS1zLHU9aS54LW8saD0yKihsKih2PWkueS1zKS1jKnUpO2lmKCEoaD49LVR0KSl7dmFyIGY9bCpsK2MqYyxwPXUqdSt2KnYsZD0odipmLWMqcCkvaCxnPShsKnAtdSpmKS9oLHY9ZytzLG09bWEucG9wKCl8fG5ldyBTYTttLmFyYz10LG0uc2l0ZT1hLG0ueD1kK28sbS55PXYrTWF0aC5zcXJ0KGQqZCtnKmcpLG0uY3k9dix0LmNpcmNsZT1tO2Zvcih2YXIgeT1udWxsLHg9Z2EuXzt4OylpZihtLnk8eC55fHxtLnk9PT14LnkmJm0ueDw9eC54KXtpZigheC5MKXt5PXguUDticmVha314PXguTH1lbHNle2lmKCF4LlIpe3k9eDticmVha314PXguUn1nYS5pbnNlcnQoeSxtKSx5fHwoZGE9bSl9fX19ZnVuY3Rpb24gTGEodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KGRhPWUuTiksZ2EucmVtb3ZlKGUpLG1hLnB1c2goZSksUmEoZSksdC5jaXJjbGU9bnVsbCl9ZnVuY3Rpb24gQ2EodCxlKXt2YXIgcj10LmI7aWYocilyZXR1cm4hMDt2YXIgbixhLGk9dC5hLG89ZVswXVswXSxzPWVbMV1bMF0sbD1lWzBdWzFdLGM9ZVsxXVsxXSx1PXQubCxoPXQucixmPXUueCxwPXUueSxkPWgueCxnPWgueSx2PShmK2QpLzIsbT0ocCtnKS8yO2lmKGc9PT1wKXtpZih2PG98fHY+PXMpcmV0dXJuO2lmKGY+ZCl7aWYoaSl7aWYoaS55Pj1jKXJldHVybn1lbHNlIGk9e3g6dix5Omx9O3I9e3g6dix5OmN9fWVsc2V7aWYoaSl7aWYoaS55PGwpcmV0dXJufWVsc2UgaT17eDp2LHk6Y307cj17eDp2LHk6bH19fWVsc2UgaWYoYT1tLShuPShmLWQpLyhnLXApKSp2LG48LTF8fG4+MSlpZihmPmQpe2lmKGkpe2lmKGkueT49YylyZXR1cm59ZWxzZSBpPXt4OihsLWEpL24seTpsfTtyPXt4OihjLWEpL24seTpjfX1lbHNle2lmKGkpe2lmKGkueTxsKXJldHVybn1lbHNlIGk9e3g6KGMtYSkvbix5OmN9O3I9e3g6KGwtYSkvbix5Omx9fWVsc2UgaWYocDxnKXtpZihpKXtpZihpLng+PXMpcmV0dXJufWVsc2UgaT17eDpvLHk6bipvK2F9O3I9e3g6cyx5Om4qcythfX1lbHNle2lmKGkpe2lmKGkueDxvKXJldHVybn1lbHNlIGk9e3g6cyx5Om4qcythfTtyPXt4Om8seTpuKm8rYX19cmV0dXJuIHQuYT1pLHQuYj1yLCEwfWZ1bmN0aW9uIFBhKHQsZSl7dGhpcy5sPXQsdGhpcy5yPWUsdGhpcy5hPXRoaXMuYj1udWxsfWZ1bmN0aW9uIE9hKHQsZSxyLG4pe3ZhciBhPW5ldyBQYSh0LGUpO3JldHVybiBoYS5wdXNoKGEpLHImJnphKGEsdCxlLHIpLG4mJnphKGEsZSx0LG4pLGZhW3QuaV0uZWRnZXMucHVzaChuZXcgSWEoYSx0LGUpKSxmYVtlLmldLmVkZ2VzLnB1c2gobmV3IElhKGEsZSx0KSksYX1mdW5jdGlvbiB6YSh0LGUscixuKXt0LmF8fHQuYj90Lmw9PT1yP3QuYj1uOnQuYT1uOih0LmE9bix0Lmw9ZSx0LnI9cil9ZnVuY3Rpb24gSWEodCxlLHIpe3ZhciBuPXQuYSxhPXQuYjt0aGlzLmVkZ2U9dCx0aGlzLnNpdGU9ZSx0aGlzLmFuZ2xlPXI/TWF0aC5hdGFuMihyLnktZS55LHIueC1lLngpOnQubD09PWU/TWF0aC5hdGFuMihhLngtbi54LG4ueS1hLnkpOk1hdGguYXRhbjIobi54LWEueCxhLnktbi55KX1mdW5jdGlvbiBEYSgpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIFJhKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gRmEodCxlKXt2YXIgcj1lLG49ZS5SLGE9ci5VO2E/YS5MPT09cj9hLkw9bjphLlI9bjp0Ll89bixuLlU9YSxyLlU9bixyLlI9bi5MLHIuUiYmKHIuUi5VPXIpLG4uTD1yfWZ1bmN0aW9uIEJhKHQsZSl7dmFyIHI9ZSxuPWUuTCxhPXIuVTthP2EuTD09PXI/YS5MPW46YS5SPW46dC5fPW4sbi5VPWEsci5VPW4sci5MPW4uUixyLkwmJihyLkwuVT1yKSxuLlI9cn1mdW5jdGlvbiBOYSh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnVuY3Rpb24gamEodCxlKXt2YXIgcixuLGEsaT10LnNvcnQoVmEpLnBvcCgpO2ZvcihoYT1bXSxmYT1uZXcgQXJyYXkodC5sZW5ndGgpLHBhPW5ldyBEYSxnYT1uZXcgRGE7OylpZihhPWRhLGkmJighYXx8aS55PGEueXx8aS55PT09YS55JiZpLng8YS54KSlpLng9PT1yJiZpLnk9PT1ufHwoZmFbaS5pXT1uZXcgTWEoaSksd2EoaSkscj1pLngsbj1pLnkpLGk9dC5wb3AoKTtlbHNle2lmKCFhKWJyZWFrO19hKGEuYXJjKX1lJiYoZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9aGEsbj1ubih0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdKSxhPXIubGVuZ3RoO2EtLTspKCFDYShlPXJbYV0sdCl8fCFuKGUpfHx5KGUuYS54LWUuYi54KTxrdCYmeShlLmEueS1lLmIueSk8a3QpJiYoZS5hPWUuYj1udWxsLHIuc3BsaWNlKGEsMSkpfShlKSxmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGEsaSxvLHMsbCxjLHUsaD10WzBdWzBdLGY9dFsxXVswXSxwPXRbMF1bMV0sZD10WzFdWzFdLGc9ZmEsdj1nLmxlbmd0aDt2LS07KWlmKChpPWdbdl0pJiZpLnByZXBhcmUoKSlmb3IobD0ocz1pLmVkZ2VzKS5sZW5ndGgsbz0wO288bDspbj0odT1zW29dLmVuZCgpKS54LGE9dS55LGU9KGM9c1srK28lbF0uc3RhcnQoKSkueCxyPWMueSwoeShuLWUpPmt0fHx5KGEtcik+a3QpJiYocy5zcGxpY2UobywwLG5ldyBJYSgobT1pLnNpdGUseD11LGI9eShuLWgpPGt0JiZkLWE+a3Q/e3g6aCx5OnkoZS1oKTxrdD9yOmR9OnkoYS1kKTxrdCYmZi1uPmt0P3t4Onkoci1kKTxrdD9lOmYseTpkfTp5KG4tZik8a3QmJmEtcD5rdD97eDpmLHk6eShlLWYpPGt0P3I6cH06eShhLXApPGt0JiZuLWg+a3Q/e3g6eShyLXApPGt0P2U6aCx5OnB9Om51bGwsXz12b2lkIDAsXz1uZXcgUGEobSxudWxsKSxfLmE9eCxfLmI9YixoYS5wdXNoKF8pLF8pLGkuc2l0ZSxudWxsKSksKytsKTt2YXIgbSx4LGIsX30oZSkpO3ZhciBvPXtjZWxsczpmYSxlZGdlczpoYX07cmV0dXJuIHBhPWdhPWhhPWZhPW51bGwsb31mdW5jdGlvbiBWYSh0LGUpe3JldHVybiBlLnktdC55fHxlLngtdC54fU1hLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9dGhpcy5lZGdlcyxyPWUubGVuZ3RoO3ItLTspKHQ9ZVtyXS5lZGdlKS5iJiZ0LmF8fGUuc3BsaWNlKHIsMSk7cmV0dXJuIGUuc29ydChBYSksZS5sZW5ndGh9LElhLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmE6dGhpcy5lZGdlLmJ9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0ZT90aGlzLmVkZ2UuYjp0aGlzLmVkZ2UuYX19LERhLnByb3RvdHlwZT17aW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO3I9dH1lbHNlIHRoaXMuXz8odD1OYSh0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxyPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUscj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1yLGUuQz0hMCx0PWU7ciYmci5DOylyPT09KG49ci5VKS5MPyhhPW4uUikmJmEuQz8oci5DPWEuQz0hMSxuLkM9ITAsdD1uKToodD09PXIuUiYmKEZhKHRoaXMscikscj0odD1yKS5VKSxyLkM9ITEsbi5DPSEwLEJhKHRoaXMsbikpOihhPW4uTCkmJmEuQz8oci5DPWEuQz0hMSxuLkM9ITAsdD1uKToodD09PXIuTCYmKEJhKHRoaXMscikscj0odD1yKS5VKSxyLkM9ITEsbi5DPSEwLEZhKHRoaXMsbikpLHI9dC5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5OJiYodC5OLlA9dC5QKSx0LlAmJih0LlAuTj10Lk4pLHQuTj10LlA9bnVsbDt2YXIgZSxyLG4sYT10LlUsaT10Lkwsbz10LlI7aWYocj1pP28/TmEobyk6aTpvLGE/YS5MPT09dD9hLkw9cjphLlI9cjp0aGlzLl89cixpJiZvPyhuPXIuQyxyLkM9dC5DLHIuTD1pLGkuVT1yLHIhPT1vPyhhPXIuVSxyLlU9dC5VLHQ9ci5SLGEuTD10LHIuUj1vLG8uVT1yKTooci5VPWEsYT1yLHQ9ci5SKSk6KG49dC5DLHQ9ciksdCYmKHQuVT1hKSwhbilpZih0JiZ0LkMpdC5DPSExO2Vsc2V7ZG97aWYodD09PXRoaXMuXylicmVhaztpZih0PT09YS5MKXtpZigoZT1hLlIpLkMmJihlLkM9ITEsYS5DPSEwLEZhKHRoaXMsYSksZT1hLlIpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuUiYmZS5SLkN8fChlLkwuQz0hMSxlLkM9ITAsQmEodGhpcyxlKSxlPWEuUiksZS5DPWEuQyxhLkM9ZS5SLkM9ITEsRmEodGhpcyxhKSx0PXRoaXMuXzticmVha319ZWxzZSBpZigoZT1hLkwpLkMmJihlLkM9ITEsYS5DPSEwLEJhKHRoaXMsYSksZT1hLkwpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuTCYmZS5MLkN8fChlLlIuQz0hMSxlLkM9ITAsRmEodGhpcyxlKSxlPWEuTCksZS5DPWEuQyxhLkM9ZS5MLkM9ITEsQmEodGhpcyxhKSx0PXRoaXMuXzticmVha31lLkM9ITAsdD1hLGE9YS5VfXdoaWxlKCF0LkMpO3QmJih0LkM9ITEpfX19LHQuZ2VvbS52b3Jvbm9pPWZ1bmN0aW9uKHQpe3ZhciBlPW5hLHI9YWEsbj1lLGE9cixpPVVhO2lmKHQpcmV0dXJuIG8odCk7ZnVuY3Rpb24gbyh0KXt2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9aVswXVswXSxuPWlbMF1bMV0sYT1pWzFdWzBdLG89aVsxXVsxXTtyZXR1cm4gamEocyh0KSxpKS5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGkscyl7dmFyIGw9aS5lZGdlcyxjPWkuc2l0ZTsoZVtzXT1sLmxlbmd0aD9sLm1hcChmdW5jdGlvbih0KXt2YXIgZT10LnN0YXJ0KCk7cmV0dXJuW2UueCxlLnldfSk6Yy54Pj1yJiZjLng8PWEmJmMueT49biYmYy55PD1vP1tbcixvXSxbYSxvXSxbYSxuXSxbcixuXV06W10pLnBvaW50PXRbc119KSxlfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3g6TWF0aC5yb3VuZChuKHQsZSkva3QpKmt0LHk6TWF0aC5yb3VuZChhKHQsZSkva3QpKmt0LGk6ZX19KX1yZXR1cm4gby5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gamEocyh0KSkuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmwmJnQucn0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnRbZS5sLmldLHRhcmdldDp0W2Uuci5pXX19KX0sby50cmlhbmdsZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIGphKHModCkpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtmb3IodmFyIGEsaSxvLHMsbD1yLnNpdGUsYz1yLmVkZ2VzLnNvcnQoQWEpLHU9LTEsaD1jLmxlbmd0aCxmPWNbaC0xXS5lZGdlLHA9Zi5sPT09bD9mLnI6Zi5sOysrdTxoOylmLGE9cCxwPShmPWNbdV0uZWRnZSkubD09PWw/Zi5yOmYubCxuPGEuaSYmbjxwLmkmJihvPWEscz1wLCgoaT1sKS54LXMueCkqKG8ueS1pLnkpLShpLngtby54KSoocy55LWkueSk8MCkmJmUucHVzaChbdFtuXSx0W2EuaV0sdFtwLmldXSl9KSxlfSxvLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dmUoZT10KSxvKTplfSxvLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dmUocj10KSxvKTpyfSxvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD9VYTp0LG8pOmk9PT1VYT9udWxsOml9LG8uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLmNsaXBFeHRlbnQodCYmW1swLDBdLHRdKTppPT09VWE/bnVsbDppJiZpWzFdfSxvfTt2YXIgVWE9W1stMWU2LC0xZTZdLFsxZTYsMWU2XV07ZnVuY3Rpb24gcWEodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBIYSh0KXtyZXR1cm4gdC55fWZ1bmN0aW9uIEdhKGUscil7ZT10LnJnYihlKSxyPXQucmdiKHIpO3ZhciBuPWUucixhPWUuZyxpPWUuYixvPXIuci1uLHM9ci5nLWEsbD1yLmItaTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIiMiK2NlKE1hdGgucm91bmQobitvKnQpKStjZShNYXRoLnJvdW5kKGErcyp0KSkrY2UoTWF0aC5yb3VuZChpK2wqdCkpfX1mdW5jdGlvbiBZYSh0LGUpe3ZhciByLG49e30sYT17fTtmb3IociBpbiB0KXIgaW4gZT9uW3JdPUthKHRbcl0sZVtyXSk6YVtyXT10W3JdO2ZvcihyIGluIGUpciBpbiB0fHwoYVtyXT1lW3JdKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHIgaW4gbilhW3JdPW5bcl0odCk7cmV0dXJuIGF9fWZ1bmN0aW9uIFdhKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gdCooMS1yKStlKnJ9fWZ1bmN0aW9uIFhhKHQsZSl7dmFyIHIsbixhLGk9WmEubGFzdEluZGV4PUphLmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj1aYS5leGVjKHQpKSYmKG49SmEuZXhlYyhlKSk7KShhPW4uaW5kZXgpPmkmJihhPWUuc2xpY2UoaSxhKSxzW29dP3Nbb10rPWE6c1srK29dPWEpLChyPXJbMF0pPT09KG49blswXSk/c1tvXT9zW29dKz1uOnNbKytvXT1uOihzWysrb109bnVsbCxsLnB1c2goe2k6byx4OldhKHIsbil9KSksaT1KYS5sYXN0SW5kZXg7cmV0dXJuIGk8ZS5sZW5ndGgmJihhPWUuc2xpY2UoaSksc1tvXT9zW29dKz1hOnNbKytvXT1hKSxzLmxlbmd0aDwyP2xbMF0/KGU9bFswXS54LGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gZX06KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9dC5nZW9tLmRlbGF1bmF5PWZ1bmN0aW9uKGUpe3JldHVybiB0Lmdlb20udm9yb25vaSgpLnRyaWFuZ2xlcyhlKX0sdC5nZW9tLnF1YWR0cmVlPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIGksbz1uYSxzPWFhO2lmKGk9YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbz1xYSxzPUhhLDM9PT1pJiYoYT1yLG49ZSxyPWU9MCksbCh0KTtmdW5jdGlvbiBsKHQpe3ZhciBsLGMsdSxoLGYscCxkLGcsdixtPXZlKG8pLHg9dmUocyk7aWYobnVsbCE9ZSlwPWUsZD1yLGc9bix2PWE7ZWxzZSBpZihnPXY9LShwPWQ9MS8wKSxjPVtdLHU9W10sZj10Lmxlbmd0aCxpKWZvcihoPTA7aDxmOysraCkobD10W2hdKS54PHAmJihwPWwueCksbC55PGQmJihkPWwueSksbC54PmcmJihnPWwueCksbC55PnYmJih2PWwueSksYy5wdXNoKGwueCksdS5wdXNoKGwueSk7ZWxzZSBmb3IoaD0wO2g8ZjsrK2gpe3ZhciBiPSttKGw9dFtoXSxoKSxfPSt4KGwsaCk7YjxwJiYocD1iKSxfPGQmJihkPV8pLGI+ZyYmKGc9YiksXz52JiYodj1fKSxjLnB1c2goYiksdS5wdXNoKF8pfXZhciB3PWctcCxrPXYtZDtmdW5jdGlvbiBUKHQsZSxyLG4sYSxpLG8scyl7aWYoIWlzTmFOKHIpJiYhaXNOYU4obikpaWYodC5sZWFmKXt2YXIgbD10LngsYz10Lnk7aWYobnVsbCE9bClpZih5KGwtcikreShjLW4pPC4wMSlNKHQsZSxyLG4sYSxpLG8scyk7ZWxzZXt2YXIgdT10LnBvaW50O3QueD10Lnk9dC5wb2ludD1udWxsLE0odCx1LGwsYyxhLGksbyxzKSxNKHQsZSxyLG4sYSxpLG8scyl9ZWxzZSB0Lng9cix0Lnk9bix0LnBvaW50PWV9ZWxzZSBNKHQsZSxyLG4sYSxpLG8scyl9ZnVuY3Rpb24gTSh0LGUscixuLGEsaSxvLHMpe3ZhciBsPS41KihhK28pLGM9LjUqKGkrcyksdT1yPj1sLGg9bj49YyxmPWg8PDF8dTt0LmxlYWY9ITEsdT9hPWw6bz1sLGg/aT1jOnM9YyxUKHQ9dC5ub2Rlc1tmXXx8KHQubm9kZXNbZl09e2xlYWY6ITAsbm9kZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsfSksZSxyLG4sYSxpLG8scyl9dz5rP3Y9ZCt3Omc9cCtrO3ZhciBBPXtsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbCxhZGQ6ZnVuY3Rpb24odCl7VChBLHQsK20odCwrK2gpLCt4KHQsaCkscCxkLGcsdil9fTtpZihBLnZpc2l0PWZ1bmN0aW9uKHQpeyFmdW5jdGlvbiB0KGUscixuLGEsaSxvKXtpZighZShyLG4sYSxpLG8pKXt2YXIgcz0uNSoobitpKSxsPS41KihhK28pLGM9ci5ub2RlcztjWzBdJiZ0KGUsY1swXSxuLGEscyxsKSxjWzFdJiZ0KGUsY1sxXSxzLGEsaSxsKSxjWzJdJiZ0KGUsY1syXSxuLGwscyxvKSxjWzNdJiZ0KGUsY1szXSxzLGwsaSxvKX19KHQsQSxwLGQsZyx2KX0sQS5maW5kPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGEsaSxvKXt2YXIgcyxsPTEvMDtyZXR1cm4gZnVuY3Rpb24gdChjLHUsaCxmLHApe2lmKCEodT5pfHxoPm98fGY8bnx8cDxhKSl7aWYoZD1jLnBvaW50KXt2YXIgZCxnPWUtYy54LHY9ci1jLnksbT1nKmcrdip2O2lmKG08bCl7dmFyIHk9TWF0aC5zcXJ0KGw9bSk7bj1lLXksYT1yLXksaT1lK3ksbz1yK3kscz1kfX1mb3IodmFyIHg9Yy5ub2RlcyxiPS41Kih1K2YpLF89LjUqKGgrcCksdz0ocj49Xyk8PDF8ZT49YixrPXcrNDt3PGs7Kyt3KWlmKGM9eFszJnddKXN3aXRjaCgzJncpe2Nhc2UgMDp0KGMsdSxoLGIsXyk7YnJlYWs7Y2FzZSAxOnQoYyxiLGgsZixfKTticmVhaztjYXNlIDI6dChjLHUsXyxiLHApO2JyZWFrO2Nhc2UgMzp0KGMsYixfLGYscCl9fX0odCxuLGEsaSxvKSxzfShBLHRbMF0sdFsxXSxwLGQsZyx2KX0saD0tMSxudWxsPT1lKXtmb3IoOysraDxmOylUKEEsdFtoXSxjW2hdLHVbaF0scCxkLGcsdik7LS1ofWVsc2UgdC5mb3JFYWNoKEEuYWRkKTtyZXR1cm4gYz11PXQ9bD1udWxsLEF9cmV0dXJuIGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGwpOm99LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGwpOnN9LGwuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2U9cj1uPWE9bnVsbDooZT0rdFswXVswXSxyPSt0WzBdWzFdLG49K3RbMV1bMF0sYT0rdFsxXVsxXSksbCk6bnVsbD09ZT9udWxsOltbZSxyXSxbbixhXV19LGwuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9lPXI9bj1hPW51bGw6KGU9cj0wLG49K3RbMF0sYT0rdFsxXSksbCk6bnVsbD09ZT9udWxsOltuLWUsYS1yXX0sbH0sdC5pbnRlcnBvbGF0ZVJnYj1HYSx0LmludGVycG9sYXRlT2JqZWN0PVlhLHQuaW50ZXJwb2xhdGVOdW1iZXI9V2EsdC5pbnRlcnBvbGF0ZVN0cmluZz1YYTt2YXIgWmE9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLEphPW5ldyBSZWdFeHAoWmEuc291cmNlLCJnIik7ZnVuY3Rpb24gS2EoZSxyKXtmb3IodmFyIG4sYT10LmludGVycG9sYXRvcnMubGVuZ3RoOy0tYT49MCYmIShuPXQuaW50ZXJwb2xhdG9yc1thXShlLHIpKTspO3JldHVybiBufWZ1bmN0aW9uIFFhKHQsZSl7dmFyIHIsbj1bXSxhPVtdLGk9dC5sZW5ndGgsbz1lLmxlbmd0aCxzPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtmb3Iocj0wO3I8czsrK3Ipbi5wdXNoKEthKHRbcl0sZVtyXSkpO2Zvcig7cjxpOysrcilhW3JdPXRbcl07Zm9yKDtyPG87KytyKWFbcl09ZVtyXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHI9MDtyPHM7KytyKWFbcl09bltyXSh0KTtyZXR1cm4gYX19dC5pbnRlcnBvbGF0ZT1LYSx0LmludGVycG9sYXRvcnM9W2Z1bmN0aW9uKHQsZSl7dmFyIHI9dHlwZW9mIGU7cmV0dXJuKCJzdHJpbmciPT09cj9nZS5oYXMoZS50b0xvd2VyQ2FzZSgpKXx8L14oI3xyZ2JcKHxoc2xcKCkvaS50ZXN0KGUpP0dhOlhhOmUgaW5zdGFuY2VvZiBWdD9HYTpBcnJheS5pc0FycmF5KGUpP1FhOiJvYmplY3QiPT09ciYmaXNOYU4oZSk/WWE6V2EpKHQsZSl9XSx0LmludGVycG9sYXRlQXJyYXk9UWE7dmFyICRhPWZ1bmN0aW9uKCl7cmV0dXJuIFB9LHRpPXQubWFwKHtsaW5lYXI6JGEscG9seTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucG93KGUsdCl9fSxxdWFkOmZ1bmN0aW9uKCl7cmV0dXJuIGFpfSxjdWJpYzpmdW5jdGlvbigpe3JldHVybiBpaX0sc2luOmZ1bmN0aW9uKCl7cmV0dXJuIHNpfSxleHA6ZnVuY3Rpb24oKXtyZXR1cm4gbGl9LGNpcmNsZTpmdW5jdGlvbigpe3JldHVybiBjaX0sZWxhc3RpYzpmdW5jdGlvbih0LGUpe3ZhciByO2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9LjQ1KTthcmd1bWVudHMubGVuZ3RoP3I9ZS9BdCpNYXRoLmFzaW4oMS90KToodD0xLHI9ZS80KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIDErdCpNYXRoLnBvdygyLC0xMCpuKSpNYXRoLnNpbigobi1yKSpBdC9lKX19LGJhY2s6ZnVuY3Rpb24odCl7dHx8KHQ9MS43MDE1OCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlKmUqKCh0KzEpKmUtdCl9fSxib3VuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdWl9fSksZWk9dC5tYXAoe2luOlAsb3V0OnJpLCJpbi1vdXQiOm5pLCJvdXQtaW4iOmZ1bmN0aW9uKHQpe3JldHVybiBuaShyaSh0KSl9fSk7ZnVuY3Rpb24gcmkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAxLXQoMS1lKX19ZnVuY3Rpb24gbmkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi41KihlPC41P3QoMiplKToyLXQoMi0yKmUpKX19ZnVuY3Rpb24gYWkodCl7cmV0dXJuIHQqdH1mdW5jdGlvbiBpaSh0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24gb2kodCl7aWYodDw9MClyZXR1cm4gMDtpZih0Pj0xKXJldHVybiAxO3ZhciBlPXQqdCxyPWUqdDtyZXR1cm4gNCoodDwuNT9yOjMqKHQtZSkrci0uNzUpfWZ1bmN0aW9uIHNpKHQpe3JldHVybiAxLU1hdGguY29zKHQqRXQpfWZ1bmN0aW9uIGxpKHQpe3JldHVybiBNYXRoLnBvdygyLDEwKih0LTEpKX1mdW5jdGlvbiBjaSh0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIHVpKHQpe3JldHVybiB0PDEvMi43NT83LjU2MjUqdCp0OnQ8Mi8yLjc1PzcuNTYyNSoodC09MS41LzIuNzUpKnQrLjc1OnQ8Mi41LzIuNzU/Ny41NjI1Kih0LT0yLjI1LzIuNzUpKnQrLjkzNzU6Ny41NjI1Kih0LT0yLjYyNS8yLjc1KSp0Ky45ODQzNzV9ZnVuY3Rpb24gaGkodCxlKXtyZXR1cm4gZS09dCxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZCh0K2Uqcil9fWZ1bmN0aW9uIGZpKHQpe3ZhciBlLHIsbixhPVt0LmEsdC5iXSxpPVt0LmMsdC5kXSxvPWRpKGEpLHM9cGkoYSxpKSxsPWRpKCgoZT1pKVswXSs9KG49LXMpKihyPWEpWzBdLGVbMV0rPW4qclsxXSxlKSl8fDA7YVswXSppWzFdPGlbMF0qYVsxXSYmKGFbMF0qPS0xLGFbMV0qPS0xLG8qPS0xLHMqPS0xKSx0aGlzLnJvdGF0ZT0obz9NYXRoLmF0YW4yKGFbMV0sYVswXSk6TWF0aC5hdGFuMigtaVswXSxpWzFdKSkqQ3QsdGhpcy50cmFuc2xhdGU9W3QuZSx0LmZdLHRoaXMuc2NhbGU9W28sbF0sdGhpcy5za2V3PWw/TWF0aC5hdGFuMihzLGwpKkN0OjB9ZnVuY3Rpb24gcGkodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXX1mdW5jdGlvbiBkaSh0KXt2YXIgZT1NYXRoLnNxcnQocGkodCx0KSk7cmV0dXJuIGUmJih0WzBdLz1lLHRbMV0vPWUpLGV9dC5lYXNlPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5pbmRleE9mKCItIiksYT1uPj0wP3Quc2xpY2UoMCxuKTp0LGk9bj49MD90LnNsaWNlKG4rMSk6ImluIjtyZXR1cm4gYT10aS5nZXQoYSl8fCRhLGk9ZWkuZ2V0KGkpfHxQLGU9aShhLmFwcGx5KG51bGwsci5jYWxsKGFyZ3VtZW50cywxKSkpLGZ1bmN0aW9uKHQpe3JldHVybiB0PD0wPzA6dD49MT8xOmUodCl9fSx0LmludGVycG9sYXRlSGNsPWZ1bmN0aW9uKGUscil7ZT10LmhjbChlKSxyPXQuaGNsKHIpO3ZhciBuPWUuaCxhPWUuYyxpPWUubCxvPXIuaC1uLHM9ci5jLWEsbD1yLmwtaTtpc05hTihzKSYmKHM9MCxhPWlzTmFOKGEpP3IuYzphKTtpc05hTihvKT8obz0wLG49aXNOYU4obik/ci5oOm4pOm8+MTgwP28tPTM2MDpvPC0xODAmJihvKz0zNjApO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gV3QobitvKnQsYStzKnQsaStsKnQpKyIifX0sdC5pbnRlcnBvbGF0ZUhzbD1mdW5jdGlvbihlLHIpe2U9dC5oc2woZSkscj10LmhzbChyKTt2YXIgbj1lLmgsYT1lLnMsaT1lLmwsbz1yLmgtbixzPXIucy1hLGw9ci5sLWk7aXNOYU4ocykmJihzPTAsYT1pc05hTihhKT9yLnM6YSk7aXNOYU4obyk/KG89MCxuPWlzTmFOKG4pP3IuaDpuKTpvPjE4MD9vLT0zNjA6bzwtMTgwJiYobys9MzYwKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEh0KG4rbyp0LGErcyp0LGkrbCp0KSsiIn19LHQuaW50ZXJwb2xhdGVMYWI9ZnVuY3Rpb24oZSxyKXtlPXQubGFiKGUpLHI9dC5sYWIocik7dmFyIG49ZS5sLGE9ZS5hLGk9ZS5iLG89ci5sLW4scz1yLmEtYSxsPXIuYi1pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdGUobitvKnQsYStzKnQsaStsKnQpKyIifX0sdC5pbnRlcnBvbGF0ZVJvdW5kPWhpLHQudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3ZhciByPWEuY3JlYXRlRWxlbWVudE5TKHQubnMucHJlZml4LnN2ZywiZyIpO3JldHVybih0LnRyYW5zZm9ybT1mdW5jdGlvbih0KXtpZihudWxsIT10KXtyLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KTt2YXIgZT1yLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCl9cmV0dXJuIG5ldyBmaShlP2UubWF0cml4OmdpKX0pKGUpfSxmaS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy50cmFuc2xhdGUrIilyb3RhdGUoIit0aGlzLnJvdGF0ZSsiKXNrZXdYKCIrdGhpcy5za2V3KyIpc2NhbGUoIit0aGlzLnNjYWxlKyIpIn07dmFyIGdpPXthOjEsYjowLGM6MCxkOjEsZTowLGY6MH07ZnVuY3Rpb24gdmkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiwiOiIifWZ1bmN0aW9uIG1pKGUscil7dmFyIG49W10sYT1bXTtyZXR1cm4gZT10LnRyYW5zZm9ybShlKSxyPXQudHJhbnNmb3JtKHIpLGZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXSl7dmFyIGE9ci5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLCIsIixudWxsLCIpIik7bi5wdXNoKHtpOmEtNCx4OldhKHRbMF0sZVswXSl9LHtpOmEtMix4OldhKHRbMV0sZVsxXSl9KX1lbHNlKGVbMF18fGVbMV0pJiZyLnB1c2goInRyYW5zbGF0ZSgiK2UrIikiKX0oZS50cmFuc2xhdGUsci50cmFuc2xhdGUsbixhKSxmdW5jdGlvbih0LGUscixuKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksbi5wdXNoKHtpOnIucHVzaCh2aShyKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDpXYSh0LGUpfSkpOmUmJnIucHVzaCh2aShyKSsicm90YXRlKCIrZSsiKSIpfShlLnJvdGF0ZSxyLnJvdGF0ZSxuLGEpLGZ1bmN0aW9uKHQsZSxyLG4pe3QhPT1lP24ucHVzaCh7aTpyLnB1c2godmkocikrInNrZXdYKCIsbnVsbCwiKSIpLTIseDpXYSh0LGUpfSk6ZSYmci5wdXNoKHZpKHIpKyJza2V3WCgiK2UrIikiKX0oZS5za2V3LHIuc2tldyxuLGEpLGZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXSl7dmFyIGE9ci5wdXNoKHZpKHIpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtuLnB1c2goe2k6YS00LHg6V2EodFswXSxlWzBdKX0se2k6YS0yLHg6V2EodFsxXSxlWzFdKX0pfWVsc2UgMT09PWVbMF0mJjE9PT1lWzFdfHxyLnB1c2godmkocikrInNjYWxlKCIrZSsiKSIpfShlLnNjYWxlLHIuc2NhbGUsbixhKSxlPXI9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxpPWEubGVuZ3RoOysrcjxpOyluWyhlPWFbcl0pLmldPWUueCh0KTtyZXR1cm4gbi5qb2luKCIiKX19ZnVuY3Rpb24geWkodCxlKXtyZXR1cm4gZT0oZS09dD0rdCl8fDEvZSxmdW5jdGlvbihyKXtyZXR1cm4oci10KS9lfX1mdW5jdGlvbiB4aSh0LGUpe3JldHVybiBlPShlLT10PSt0KXx8MS9lLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsKHItdCkvZSkpfX1mdW5jdGlvbiBiaSh0KXtmb3IodmFyIGU9dC5zb3VyY2Uscj10LnRhcmdldCxuPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIHI9X2kodCksbj1faShlKSxhPXIucG9wKCksaT1uLnBvcCgpLG89bnVsbDtmb3IoO2E9PT1pOylvPWEsYT1yLnBvcCgpLGk9bi5wb3AoKTtyZXR1cm4gb30oZSxyKSxhPVtlXTtlIT09bjspZT1lLnBhcmVudCxhLnB1c2goZSk7Zm9yKHZhciBpPWEubGVuZ3RoO3IhPT1uOylhLnNwbGljZShpLDAscikscj1yLnBhcmVudDtyZXR1cm4gYX1mdW5jdGlvbiBfaSh0KXtmb3IodmFyIGU9W10scj10LnBhcmVudDtudWxsIT1yOyllLnB1c2godCksdD1yLHI9ci5wYXJlbnQ7cmV0dXJuIGUucHVzaCh0KSxlfWZ1bmN0aW9uIHdpKHQpe3QuZml4ZWR8PTJ9ZnVuY3Rpb24ga2kodCl7dC5maXhlZCY9LTd9ZnVuY3Rpb24gVGkodCl7dC5maXhlZHw9NCx0LnB4PXQueCx0LnB5PXQueX1mdW5jdGlvbiBNaSh0KXt0LmZpeGVkJj0tNX10LmludGVycG9sYXRlVHJhbnNmb3JtPW1pLHQubGF5b3V0PXt9LHQubGF5b3V0LmJ1bmRsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnB1c2goYmkodFtyXSkpO3JldHVybiBlfX0sdC5sYXlvdXQuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgZSxyLG4sYSxpLG8scyxsPXt9LGM9MDtmdW5jdGlvbiB1KCl7dmFyIGwsdSxmLHAsZCxnPXt9LHY9W10sbT10LnJhbmdlKGEpLHk9W107Zm9yKGU9W10scj1bXSxsPTAscD0tMTsrK3A8YTspe2Zvcih1PTAsZD0tMTsrK2Q8YTspdSs9bltwXVtkXTt2LnB1c2godSkseS5wdXNoKHQucmFuZ2UoYSkpLGwrPXV9Zm9yKGkmJm0uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBpKHZbdF0sdltlXSl9KSxvJiZ5LmZvckVhY2goZnVuY3Rpb24odCxlKXt0LnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gbyhuW2VdW3RdLG5bZV1bcl0pfSl9KSxsPShBdC1jKmEpL2wsdT0wLHA9LTE7KytwPGE7KXtmb3IoZj11LGQ9LTE7KytkPGE7KXt2YXIgeD1tW3BdLGI9eVt4XVtkXSxfPW5beF1bYl0sdz11LGs9dSs9XypsO2dbeCsiLSIrYl09e2luZGV4Ongsc3ViaW5kZXg6YixzdGFydEFuZ2xlOncsZW5kQW5nbGU6ayx2YWx1ZTpffX1yW3hdPXtpbmRleDp4LHN0YXJ0QW5nbGU6ZixlbmRBbmdsZTp1LHZhbHVlOnZbeF19LHUrPWN9Zm9yKHA9LTE7KytwPGE7KWZvcihkPXAtMTsrK2Q8YTspe3ZhciBUPWdbcCsiLSIrZF0sTT1nW2QrIi0iK3BdOyhULnZhbHVlfHxNLnZhbHVlKSYmZS5wdXNoKFQudmFsdWU8TS52YWx1ZT97c291cmNlOk0sdGFyZ2V0OlR9Ontzb3VyY2U6VCx0YXJnZXQ6TX0pfXMmJmgoKX1mdW5jdGlvbiBoKCl7ZS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMoKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlKS8yLChlLnNvdXJjZS52YWx1ZStlLnRhcmdldC52YWx1ZSkvMil9KX1yZXR1cm4gbC5tYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9KG49dCkmJm4ubGVuZ3RoLGU9cj1udWxsLGwpOm59LGwucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LGU9cj1udWxsLGwpOmN9LGwuc29ydEdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGU9cj1udWxsLGwpOml9LGwuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGU9bnVsbCxsKTpvfSxsLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxlJiZoKCksbCk6c30sbC5jaG9yZHM9ZnVuY3Rpb24oKXtyZXR1cm4gZXx8dSgpLGV9LGwuZ3JvdXBzPWZ1bmN0aW9uKCl7cmV0dXJuIHJ8fHUoKSxyfSxsfSx0LmxheW91dC5mb3JjZT1mdW5jdGlvbigpe3ZhciBlLHIsbixhLGksbyxzPXt9LGw9dC5kaXNwYXRjaCgic3RhcnQiLCJ0aWNrIiwiZW5kIiksYz1bMSwxXSx1PS45LGg9QWksZj1TaSxwPS0zMCxkPUVpLGc9LjEsdj0uNjQsbT1bXSx5PVtdO2Z1bmN0aW9uIHgodCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGEpe2lmKGUucG9pbnQhPT10KXt2YXIgaT1lLmN4LXQueCxvPWUuY3ktdC55LHM9YS1yLGw9aSppK28qbztpZihzKnMvdjxsKXtpZihsPGQpe3ZhciBjPWUuY2hhcmdlL2w7dC5weC09aSpjLHQucHktPW8qY31yZXR1cm4hMH1pZihlLnBvaW50JiZsJiZsPGQpe2M9ZS5wb2ludENoYXJnZS9sO3QucHgtPWkqYyx0LnB5LT1vKmN9fXJldHVybiFlLmNoYXJnZX19ZnVuY3Rpb24gYihlKXtlLnB4PXQuZXZlbnQueCxlLnB5PXQuZXZlbnQueSxzLnJlc3VtZSgpfXJldHVybiBzLnRpY2s9ZnVuY3Rpb24oKXtpZigobio9Ljk5KTwuMDA1KXJldHVybiBlPW51bGwsbC5lbmQoe3R5cGU6ImVuZCIsYWxwaGE6bj0wfSksITA7dmFyIHIscyxoLGYsZCx2LGIsXyx3LGs9bS5sZW5ndGgsVD15Lmxlbmd0aDtmb3Iocz0wO3M8VDsrK3MpZj0oaD15W3NdKS5zb3VyY2UsKHY9KF89KGQ9aC50YXJnZXQpLngtZi54KSpfKyh3PWQueS1mLnkpKncpJiYoXyo9dj1uKmlbc10qKCh2PU1hdGguc3FydCh2KSktYVtzXSkvdix3Kj12LGQueC09XyooYj1mLndlaWdodCtkLndlaWdodD9mLndlaWdodC8oZi53ZWlnaHQrZC53ZWlnaHQpOi41KSxkLnktPXcqYixmLngrPV8qKGI9MS1iKSxmLnkrPXcqYik7aWYoKGI9bipnKSYmKF89Y1swXS8yLHc9Y1sxXS8yLHM9LTEsYikpZm9yKDsrK3M8azspKGg9bVtzXSkueCs9KF8taC54KSpiLGgueSs9KHctaC55KSpiO2lmKHApZm9yKCFmdW5jdGlvbiB0KGUscixuKXt2YXIgYT0wLGk9MDtlLmNoYXJnZT0wO2lmKCFlLmxlYWYpZm9yKHZhciBvLHM9ZS5ub2RlcyxsPXMubGVuZ3RoLGM9LTE7KytjPGw7KW51bGwhPShvPXNbY10pJiYodChvLHIsbiksZS5jaGFyZ2UrPW8uY2hhcmdlLGErPW8uY2hhcmdlKm8uY3gsaSs9by5jaGFyZ2Uqby5jeSk7aWYoZS5wb2ludCl7ZS5sZWFmfHwoZS5wb2ludC54Kz1NYXRoLnJhbmRvbSgpLS41LGUucG9pbnQueSs9TWF0aC5yYW5kb20oKS0uNSk7dmFyIHU9cipuW2UucG9pbnQuaW5kZXhdO2UuY2hhcmdlKz1lLnBvaW50Q2hhcmdlPXUsYSs9dSplLnBvaW50LngsaSs9dSplLnBvaW50Lnl9ZS5jeD1hL2UuY2hhcmdlO2UuY3k9aS9lLmNoYXJnZX0ocj10Lmdlb20ucXVhZHRyZWUobSksbixvKSxzPS0xOysrczxrOykoaD1tW3NdKS5maXhlZHx8ci52aXNpdCh4KGgpKTtmb3Iocz0tMTsrK3M8azspKGg9bVtzXSkuZml4ZWQ/KGgueD1oLnB4LGgueT1oLnB5KTooaC54LT0oaC5weC0oaC5weD1oLngpKSp1LGgueS09KGgucHktKGgucHk9aC55KSkqdSk7bC50aWNrKHt0eXBlOiJ0aWNrIixhbHBoYTpufSl9LHMubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dCxzKTptfSxzLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PXQscyk6eX0scy5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQscyk6Y30scy5saW5rRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxzKTpofSxzLmRpc3RhbmNlPXMubGlua0Rpc3RhbmNlLHMubGlua1N0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6K3Qscyk6Zn0scy5mcmljdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxzKTp1fSxzLmNoYXJnZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LHMpOnB9LHMuY2hhcmdlRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dCp0LHMpOk1hdGguc3FydChkKX0scy5ncmF2aXR5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt0LHMpOmd9LHMudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9dCp0LHMpOk1hdGguc3FydCh2KX0scy5hbHBoYT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rdCxuP3Q+MD9uPXQ6KGUuYz1udWxsLGUudD1OYU4sZT1udWxsLGwuZW5kKHt0eXBlOiJlbmQiLGFscGhhOm49MH0pKTp0PjAmJihsLnN0YXJ0KHt0eXBlOiJzdGFydCIsYWxwaGE6bj10fSksZT1UZShzLnRpY2spKSxzKTpufSxzLnN0YXJ0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49bS5sZW5ndGgsbD15Lmxlbmd0aCx1PWNbMF0sZD1jWzFdO2Zvcih0PTA7dDxuOysrdCkocj1tW3RdKS5pbmRleD10LHIud2VpZ2h0PTA7Zm9yKHQ9MDt0PGw7Kyt0KSJudW1iZXIiPT10eXBlb2Yocj15W3RdKS5zb3VyY2UmJihyLnNvdXJjZT1tW3Iuc291cmNlXSksIm51bWJlciI9PXR5cGVvZiByLnRhcmdldCYmKHIudGFyZ2V0PW1bci50YXJnZXRdKSwrK3Iuc291cmNlLndlaWdodCwrK3IudGFyZ2V0LndlaWdodDtmb3IodD0wO3Q8bjsrK3Qpcj1tW3RdLGlzTmFOKHIueCkmJihyLng9ZygieCIsdSkpLGlzTmFOKHIueSkmJihyLnk9ZygieSIsZCkpLGlzTmFOKHIucHgpJiYoci5weD1yLngpLGlzTmFOKHIucHkpJiYoci5weT1yLnkpO2lmKGE9W10sImZ1bmN0aW9uIj09dHlwZW9mIGgpZm9yKHQ9MDt0PGw7Kyt0KWFbdF09K2guY2FsbCh0aGlzLHlbdF0sdCk7ZWxzZSBmb3IodD0wO3Q8bDsrK3QpYVt0XT1oO2lmKGk9W10sImZ1bmN0aW9uIj09dHlwZW9mIGYpZm9yKHQ9MDt0PGw7Kyt0KWlbdF09K2YuY2FsbCh0aGlzLHlbdF0sdCk7ZWxzZSBmb3IodD0wO3Q8bDsrK3QpaVt0XT1mO2lmKG89W10sImZ1bmN0aW9uIj09dHlwZW9mIHApZm9yKHQ9MDt0PG47Kyt0KW9bdF09K3AuY2FsbCh0aGlzLG1bdF0sdCk7ZWxzZSBmb3IodD0wO3Q8bjsrK3Qpb1t0XT1wO2Z1bmN0aW9uIGcocixhKXtpZighZSl7Zm9yKGU9bmV3IEFycmF5KG4pLGM9MDtjPG47KytjKWVbY109W107Zm9yKGM9MDtjPGw7KytjKXt2YXIgaT15W2NdO2VbaS5zb3VyY2UuaW5kZXhdLnB1c2goaS50YXJnZXQpLGVbaS50YXJnZXQuaW5kZXhdLnB1c2goaS5zb3VyY2UpfX1mb3IodmFyIG8scz1lW3RdLGM9LTEsdT1zLmxlbmd0aDsrK2M8dTspaWYoIWlzTmFOKG89c1tjXVtyXSkpcmV0dXJuIG87cmV0dXJuIE1hdGgucmFuZG9tKCkqYX1yZXR1cm4gcy5yZXN1bWUoKX0scy5yZXN1bWU9ZnVuY3Rpb24oKXtyZXR1cm4gcy5hbHBoYSguMSl9LHMuc3RvcD1mdW5jdGlvbigpe3JldHVybiBzLmFscGhhKDApfSxzLmRyYWc9ZnVuY3Rpb24oKXtpZihyfHwocj10LmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oUCkub24oImRyYWdzdGFydC5mb3JjZSIsd2kpLm9uKCJkcmFnLmZvcmNlIixiKS5vbigiZHJhZ2VuZC5mb3JjZSIsa2kpKSwhYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcjt0aGlzLm9uKCJtb3VzZW92ZXIuZm9yY2UiLFRpKS5vbigibW91c2VvdXQuZm9yY2UiLE1pKS5jYWxsKHIpfSx0LnJlYmluZChzLGwsIm9uIil9O3ZhciBBaT0yMCxTaT0xLEVpPTEvMDtmdW5jdGlvbiBMaShlLHIpe3JldHVybiB0LnJlYmluZChlLHIsInNvcnQiLCJjaGlsZHJlbiIsInZhbHVlIiksZS5ub2Rlcz1lLGUubGlua3M9RGksZX1mdW5jdGlvbiBDaSh0LGUpe2Zvcih2YXIgcj1bdF07bnVsbCE9KHQ9ci5wb3AoKSk7KWlmKGUodCksKGE9dC5jaGlsZHJlbikmJihuPWEubGVuZ3RoKSlmb3IodmFyIG4sYTstLW4+PTA7KXIucHVzaChhW25dKX1mdW5jdGlvbiBQaSh0LGUpe2Zvcih2YXIgcj1bdF0sbj1bXTtudWxsIT0odD1yLnBvcCgpKTspaWYobi5wdXNoKHQpLChpPXQuY2hpbGRyZW4pJiYoYT1pLmxlbmd0aCkpZm9yKHZhciBhLGksbz0tMTsrK288YTspci5wdXNoKGlbb10pO2Zvcig7bnVsbCE9KHQ9bi5wb3AoKSk7KWUodCl9ZnVuY3Rpb24gT2kodCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24gemkodCl7cmV0dXJuIHQudmFsdWV9ZnVuY3Rpb24gSWkodCxlKXtyZXR1cm4gZS52YWx1ZS10LnZhbHVlfWZ1bmN0aW9uIERpKGUpe3JldHVybiB0Lm1lcmdlKGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6dCx0YXJnZXQ6ZX19KX0pKX10LmxheW91dC5oaWVyYXJjaHk9ZnVuY3Rpb24oKXt2YXIgdD1JaSxlPU9pLHI9emk7ZnVuY3Rpb24gbihhKXt2YXIgaSxvPVthXSxzPVtdO2ZvcihhLmRlcHRoPTA7bnVsbCE9KGk9by5wb3AoKSk7KWlmKHMucHVzaChpKSwoYz1lLmNhbGwobixpLGkuZGVwdGgpKSYmKGw9Yy5sZW5ndGgpKXtmb3IodmFyIGwsYyx1Oy0tbD49MDspby5wdXNoKHU9Y1tsXSksdS5wYXJlbnQ9aSx1LmRlcHRoPWkuZGVwdGgrMTtyJiYoaS52YWx1ZT0wKSxpLmNoaWxkcmVuPWN9ZWxzZSByJiYoaS52YWx1ZT0rci5jYWxsKG4saSxpLmRlcHRoKXx8MCksZGVsZXRlIGkuY2hpbGRyZW47cmV0dXJuIFBpKGEsZnVuY3Rpb24oZSl7dmFyIG4sYTt0JiYobj1lLmNoaWxkcmVuKSYmbi5zb3J0KHQpLHImJihhPWUucGFyZW50KSYmKGEudmFsdWUrPWUudmFsdWUpfSksc31yZXR1cm4gbi5zb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbik6dH0sbi5jaGlsZHJlbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4udmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLnJldmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHImJihDaSh0LGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4mJih0LnZhbHVlPTApfSksUGkodCxmdW5jdGlvbih0KXt2YXIgZTt0LmNoaWxkcmVufHwodC52YWx1ZT0rci5jYWxsKG4sdCx0LmRlcHRoKXx8MCksKGU9dC5wYXJlbnQpJiYoZS52YWx1ZSs9dC52YWx1ZSl9KSksdH0sbn0sdC5sYXlvdXQucGFydGl0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dC5sYXlvdXQuaGllcmFyY2h5KCkscj1bMSwxXTtmdW5jdGlvbiBuKHQsbil7dmFyIGE9ZS5jYWxsKHRoaXMsdCxuKTtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixhKXt2YXIgaT1lLmNoaWxkcmVuO2lmKGUueD1yLGUueT1lLmRlcHRoKmEsZS5keD1uLGUuZHk9YSxpJiYobz1pLmxlbmd0aCkpe3ZhciBvLHMsbCxjPS0xO2ZvcihuPWUudmFsdWU/bi9lLnZhbHVlOjA7KytjPG87KXQocz1pW2NdLHIsbD1zLnZhbHVlKm4sYSkscis9bH19KGFbMF0sMCxyWzBdLHJbMV0vZnVuY3Rpb24gdChlKXt2YXIgcj1lLmNoaWxkcmVuLG49MDtpZihyJiYoYT1yLmxlbmd0aCkpZm9yKHZhciBhLGk9LTE7KytpPGE7KW49TWF0aC5tYXgobix0KHJbaV0pKTtyZXR1cm4gMStufShhWzBdKSksYX1yZXR1cm4gbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sTGkobixlKX0sdC5sYXlvdXQucGllPWZ1bmN0aW9uKCl7dmFyIGU9TnVtYmVyLHI9Umksbj0wLGE9QXQsaT0wO2Z1bmN0aW9uIG8ocyl7dmFyIGwsYz1zLmxlbmd0aCx1PXMubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuK2UuY2FsbChvLHQscil9KSxoPSsoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksZj0oImZ1bmN0aW9uIj09dHlwZW9mIGE/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YSktaCxwPU1hdGgubWluKE1hdGguYWJzKGYpL2MsKygiZnVuY3Rpb24iPT10eXBlb2YgaT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTppKSksZD1wKihmPDA/LTE6MSksZz10LnN1bSh1KSx2PWc/KGYtYypkKS9nOjAsbT10LnJhbmdlKGMpLHk9W107cmV0dXJuIG51bGwhPXImJm0uc29ydChyPT09Umk/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdVtlXS11W3RdfTpmdW5jdGlvbih0LGUpe3JldHVybiByKHNbdF0sc1tlXSl9KSxtLmZvckVhY2goZnVuY3Rpb24odCl7eVt0XT17ZGF0YTpzW3RdLHZhbHVlOmw9dVt0XSxzdGFydEFuZ2xlOmgsZW5kQW5nbGU6aCs9bCp2K2QscGFkQW5nbGU6cH19KSx5fXJldHVybiBvLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbyk6ZX0sby5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbyk6cn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsbyk6bn0sby5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LG8pOmF9LG8ucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxvKTppfSxvfTt2YXIgUmk9e307ZnVuY3Rpb24gRmkodCl7cmV0dXJuIHQueH1mdW5jdGlvbiBCaSh0KXtyZXR1cm4gdC55fWZ1bmN0aW9uIE5pKHQsZSxyKXt0LnkwPWUsdC55PXJ9dC5sYXlvdXQuc3RhY2s9ZnVuY3Rpb24oKXt2YXIgZT1QLHI9VWksbj1xaSxhPU5pLGk9Rmksbz1CaTtmdW5jdGlvbiBzKGwsYyl7aWYoIShwPWwubGVuZ3RoKSlyZXR1cm4gbDt2YXIgdT1sLm1hcChmdW5jdGlvbih0LHIpe3JldHVybiBlLmNhbGwocyx0LHIpfSksaD11Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm5baS5jYWxsKHMsdCxlKSxvLmNhbGwocyx0LGUpXX0pfSksZj1yLmNhbGwocyxoLGMpO3U9dC5wZXJtdXRlKHUsZiksaD10LnBlcm11dGUoaCxmKTt2YXIgcCxkLGcsdixtPW4uY2FsbChzLGgsYykseT11WzBdLmxlbmd0aDtmb3IoZz0wO2c8eTsrK2cpZm9yKGEuY2FsbChzLHVbMF1bZ10sdj1tW2ddLGhbMF1bZ11bMV0pLGQ9MTtkPHA7KytkKWEuY2FsbChzLHVbZF1bZ10sdis9aFtkLTFdW2ddWzFdLGhbZF1bZ11bMV0pO3JldHVybiBsfXJldHVybiBzLnZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHMpOmV9LHMub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpqaS5nZXQodCl8fFVpLHMpOnJ9LHMub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VmkuZ2V0KHQpfHxxaSxzKTpufSxzLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxzKTppfSxzLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxzKTpvfSxzLm91dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LHMpOmF9LHN9O3ZhciBqaT10Lm1hcCh7Imluc2lkZS1vdXQiOmZ1bmN0aW9uKGUpe3ZhciByLG4sYT1lLmxlbmd0aCxpPWUubWFwKEhpKSxvPWUubWFwKEdpKSxzPXQucmFuZ2UoYSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBpW3RdLWlbZV19KSxsPTAsYz0wLHU9W10saD1bXTtmb3Iocj0wO3I8YTsrK3Ipbj1zW3JdLGw8Yz8obCs9b1tuXSx1LnB1c2gobikpOihjKz1vW25dLGgucHVzaChuKSk7cmV0dXJuIGgucmV2ZXJzZSgpLmNvbmNhdCh1KX0scmV2ZXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5yYW5nZShlLmxlbmd0aCkucmV2ZXJzZSgpfSxkZWZhdWx0OlVpfSksVmk9dC5tYXAoe3NpbGhvdWV0dGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGE9dC5sZW5ndGgsaT10WzBdLmxlbmd0aCxvPVtdLHM9MCxsPVtdO2ZvcihyPTA7cjxpOysrcil7Zm9yKGU9MCxuPTA7ZTxhO2UrKyluKz10W2VdW3JdWzFdO24+cyYmKHM9biksby5wdXNoKG4pfWZvcihyPTA7cjxpOysrcilsW3JdPShzLW9bcl0pLzI7cmV0dXJuIGx9LHdpZ2dsZTpmdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxpLG8scyxsLGMsdT10Lmxlbmd0aCxoPXRbMF0sZj1oLmxlbmd0aCxwPVtdO2ZvcihwWzBdPWw9Yz0wLHI9MTtyPGY7KytyKXtmb3IoZT0wLGE9MDtlPHU7KytlKWErPXRbZV1bcl1bMV07Zm9yKGU9MCxpPTAscz1oW3JdWzBdLWhbci0xXVswXTtlPHU7KytlKXtmb3Iobj0wLG89KHRbZV1bcl1bMV0tdFtlXVtyLTFdWzFdKS8oMipzKTtuPGU7KytuKW8rPSh0W25dW3JdWzFdLXRbbl1bci0xXVsxXSkvcztpKz1vKnRbZV1bcl1bMV19cFtyXT1sLT1hP2kvYSpzOjAsbDxjJiYoYz1sKX1mb3Iocj0wO3I8ZjsrK3IpcFtyXS09YztyZXR1cm4gcH0sZXhwYW5kOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhPXQubGVuZ3RoLGk9dFswXS5sZW5ndGgsbz0xL2Escz1bXTtmb3Iocj0wO3I8aTsrK3Ipe2ZvcihlPTAsbj0wO2U8YTtlKyspbis9dFtlXVtyXVsxXTtpZihuKWZvcihlPTA7ZTxhO2UrKyl0W2VdW3JdWzFdLz1uO2Vsc2UgZm9yKGU9MDtlPGE7ZSsrKXRbZV1bcl1bMV09b31mb3Iocj0wO3I8aTsrK3Ipc1tyXT0wO3JldHVybiBzfSx6ZXJvOnFpfSk7ZnVuY3Rpb24gVWkoZSl7cmV0dXJuIHQucmFuZ2UoZS5sZW5ndGgpfWZ1bmN0aW9uIHFpKHQpe2Zvcih2YXIgZT0tMSxyPXRbMF0ubGVuZ3RoLG49W107KytlPHI7KW5bZV09MDtyZXR1cm4gbn1mdW5jdGlvbiBIaSh0KXtmb3IodmFyIGUscj0xLG49MCxhPXRbMF1bMV0saT10Lmxlbmd0aDtyPGk7KytyKShlPXRbcl1bMV0pPmEmJihuPXIsYT1lKTtyZXR1cm4gbn1mdW5jdGlvbiBHaSh0KXtyZXR1cm4gdC5yZWR1Y2UoWWksMCl9ZnVuY3Rpb24gWWkodCxlKXtyZXR1cm4gdCtlWzFdfWZ1bmN0aW9uIFdpKHQsZSl7cmV0dXJuIFhpKHQsTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gWGkodCxlKXtmb3IodmFyIHI9LTEsbj0rdFswXSxhPSh0WzFdLW4pL2UsaT1bXTsrK3I8PWU7KWlbcl09YSpyK247cmV0dXJuIGl9ZnVuY3Rpb24gWmkoZSl7cmV0dXJuW3QubWluKGUpLHQubWF4KGUpXX1mdW5jdGlvbiBKaSh0LGUpe3JldHVybiB0LnZhbHVlLWUudmFsdWV9ZnVuY3Rpb24gS2kodCxlKXt2YXIgcj10Ll9wYWNrX25leHQ7dC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXQsZS5fcGFja19uZXh0PXIsci5fcGFja19wcmV2PWV9ZnVuY3Rpb24gUWkodCxlKXt0Ll9wYWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dH1mdW5jdGlvbiAkaSh0LGUpe3ZhciByPWUueC10Lngsbj1lLnktdC55LGE9dC5yK2UucjtyZXR1cm4uOTk5KmEqYT5yKnIrbipufWZ1bmN0aW9uIHRvKHQpe2lmKChlPXQuY2hpbGRyZW4pJiYobD1lLmxlbmd0aCkpe3ZhciBlLHIsbixhLGksbyxzLGwsYz0xLzAsdT0tMS8wLGg9MS8wLGY9LTEvMDtpZihlLmZvckVhY2goZW8pLChyPWVbMF0pLng9LXIucixyLnk9MCx4KHIpLGw+MSYmKChuPWVbMV0pLng9bi5yLG4ueT0wLHgobiksbD4yKSlmb3Iobm8ocixuLGE9ZVsyXSkseChhKSxLaShyLGEpLHIuX3BhY2tfcHJldj1hLEtpKGEsbiksbj1yLl9wYWNrX25leHQsaT0zO2k8bDtpKyspe25vKHIsbixhPWVbaV0pO3ZhciBwPTAsZD0xLGc9MTtmb3Iobz1uLl9wYWNrX25leHQ7byE9PW47bz1vLl9wYWNrX25leHQsZCsrKWlmKCRpKG8sYSkpe3A9MTticmVha31pZigxPT1wKWZvcihzPXIuX3BhY2tfcHJldjtzIT09by5fcGFja19wcmV2JiYhJGkocyxhKTtzPXMuX3BhY2tfcHJldixnKyspO3A/KGQ8Z3x8ZD09ZyYmbi5yPHIucj9RaShyLG49byk6UWkocj1zLG4pLGktLSk6KEtpKHIsYSksbj1hLHgoYSkpfXZhciB2PShjK3UpLzIsbT0oaCtmKS8yLHk9MDtmb3IoaT0wO2k8bDtpKyspKGE9ZVtpXSkueC09dixhLnktPW0seT1NYXRoLm1heCh5LGEucitNYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSk7dC5yPXksZS5mb3JFYWNoKHJvKX1mdW5jdGlvbiB4KHQpe2M9TWF0aC5taW4odC54LXQucixjKSx1PU1hdGgubWF4KHQueCt0LnIsdSksaD1NYXRoLm1pbih0LnktdC5yLGgpLGY9TWF0aC5tYXgodC55K3QucixmKX19ZnVuY3Rpb24gZW8odCl7dC5fcGFja19uZXh0PXQuX3BhY2tfcHJldj10fWZ1bmN0aW9uIHJvKHQpe2RlbGV0ZSB0Ll9wYWNrX25leHQsZGVsZXRlIHQuX3BhY2tfcHJldn1mdW5jdGlvbiBubyh0LGUscil7dmFyIG49dC5yK3IucixhPWUueC10LngsaT1lLnktdC55O2lmKG4mJihhfHxpKSl7dmFyIG89ZS5yK3IucixzPWEqYStpKmksbD0uNSsoKG4qPW4pLShvKj1vKSkvKDIqcyksYz1NYXRoLnNxcnQoTWF0aC5tYXgoMCwyKm8qKG4rcyktKG4tPXMpKm4tbypvKSkvKDIqcyk7ci54PXQueCtsKmErYyppLHIueT10LnkrbCppLWMqYX1lbHNlIHIueD10LngrbixyLnk9dC55fWZ1bmN0aW9uIGFvKHQsZSl7cmV0dXJuIHQucGFyZW50PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gaW8odCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZS5sZW5ndGg/ZVswXTp0LnR9ZnVuY3Rpb24gb28odCl7dmFyIGUscj10LmNoaWxkcmVuO3JldHVybihlPXIubGVuZ3RoKT9yW2UtMV06dC50fWZ1bmN0aW9uIHNvKHQsZSxyKXt2YXIgbj1yLyhlLmktdC5pKTtlLmMtPW4sZS5zKz1yLHQuYys9bixlLnorPXIsZS5tKz1yfWZ1bmN0aW9uIGxvKHQsZSxyKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpyfWZ1bmN0aW9uIGNvKHQpe3JldHVybnt4OnQueCx5OnQueSxkeDp0LmR4LGR5OnQuZHl9fWZ1bmN0aW9uIHVvKHQsZSl7dmFyIHI9dC54K2VbM10sbj10LnkrZVswXSxhPXQuZHgtZVsxXS1lWzNdLGk9dC5keS1lWzBdLWVbMl07cmV0dXJuIGE8MCYmKHIrPWEvMixhPTApLGk8MCYmKG4rPWkvMixpPTApLHt4OnIseTpuLGR4OmEsZHk6aX19ZnVuY3Rpb24gaG8odCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIGU8cj9bZSxyXTpbcixlXX1mdW5jdGlvbiBmbyh0KXtyZXR1cm4gdC5yYW5nZUV4dGVudD90LnJhbmdlRXh0ZW50KCk6aG8odC5yYW5nZSgpKX1mdW5jdGlvbiBwbyh0LGUscixuKXt2YXIgYT1yKHRbMF0sdFsxXSksaT1uKGVbMF0sZVsxXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpKGEodCkpfX1mdW5jdGlvbiBnbyh0LGUpe3ZhciByLG49MCxhPXQubGVuZ3RoLTEsaT10W25dLG89dFthXTtyZXR1cm4gbzxpJiYocj1uLG49YSxhPXIscj1pLGk9byxvPXIpLHRbbl09ZS5mbG9vcihpKSx0W2FdPWUuY2VpbChvKSx0fWZ1bmN0aW9uIHZvKHQpe3JldHVybiB0P3tmbG9vcjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5mbG9vcihlL3QpKnR9LGNlaWw6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguY2VpbChlL3QpKnR9fTptb310LmxheW91dC5oaXN0b2dyYW09ZnVuY3Rpb24oKXt2YXIgZT0hMCxyPU51bWJlcixuPVppLGE9V2k7ZnVuY3Rpb24gaShpLG8pe2Zvcih2YXIgcyxsLGM9W10sdT1pLm1hcChyLHRoaXMpLGg9bi5jYWxsKHRoaXMsdSxvKSxmPWEuY2FsbCh0aGlzLGgsdSxvKSxwPShvPS0xLHUubGVuZ3RoKSxkPWYubGVuZ3RoLTEsZz1lPzE6MS9wOysrbzxkOykocz1jW29dPVtdKS5keD1mW28rMV0tKHMueD1mW29dKSxzLnk9MDtpZihkPjApZm9yKG89LTE7KytvPHA7KShsPXVbb10pPj1oWzBdJiZsPD1oWzFdJiYoKHM9Y1t0LmJpc2VjdChmLGwsMSxkKS0xXSkueSs9ZyxzLnB1c2goaVtvXSkpO3JldHVybiBjfXJldHVybiBpLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSk6cn0saS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj12ZSh0KSxpKTpufSxpLmJpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Im51bWJlciI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe3JldHVybiBYaShlLHQpfTp2ZSh0KSxpKTphfSxpLmZyZXF1ZW5jeT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0hIXQsaSk6ZX0saX0sdC5sYXlvdXQucGFjaz1mdW5jdGlvbigpe3ZhciBlLHI9dC5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChKaSksbj0wLGE9WzEsMV07ZnVuY3Rpb24gaSh0LGkpe3ZhciBvPXIuY2FsbCh0aGlzLHQsaSkscz1vWzBdLGw9YVswXSxjPWFbMV0sdT1udWxsPT1lP01hdGguc3FydDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9O2lmKHMueD1zLnk9MCxQaShzLGZ1bmN0aW9uKHQpe3Qucj0rdSh0LnZhbHVlKX0pLFBpKHMsdG8pLG4pe3ZhciBoPW4qKGU/MTpNYXRoLm1heCgyKnMuci9sLDIqcy5yL2MpKS8yO1BpKHMsZnVuY3Rpb24odCl7dC5yKz1ofSksUGkocyx0byksUGkocyxmdW5jdGlvbih0KXt0LnItPWh9KX1yZXR1cm4gZnVuY3Rpb24gdChlLHIsbixhKXt2YXIgaT1lLmNoaWxkcmVuO2UueD1yKz1hKmUueDtlLnk9bis9YSplLnk7ZS5yKj1hO2lmKGkpZm9yKHZhciBvPS0xLHM9aS5sZW5ndGg7KytvPHM7KXQoaVtvXSxyLG4sYSl9KHMsbC8yLGMvMixlPzE6MS9NYXRoLm1heCgyKnMuci9sLDIqcy5yL2MpKSxvfXJldHVybiBpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxpKTphfSxpLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10fHwiZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LGkpOmV9LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxpKTpufSxMaShpLHIpfSx0LmxheW91dC50cmVlPWZ1bmN0aW9uKCl7dmFyIGU9dC5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxyPWFvLG49WzEsMV0sYT1udWxsO2Z1bmN0aW9uIGkodCxpKXt2YXIgYz1lLmNhbGwodGhpcyx0LGkpLHU9Y1swXSxoPWZ1bmN0aW9uKHQpe3ZhciBlLHI9e0E6bnVsbCxjaGlsZHJlbjpbdF19LG49W3JdO2Zvcig7bnVsbCE9KGU9bi5wb3AoKSk7KWZvcih2YXIgYSxpPWUuY2hpbGRyZW4sbz0wLHM9aS5sZW5ndGg7bzxzOysrbyluLnB1c2goKGlbb109YT17XzppW29dLHBhcmVudDplLGNoaWxkcmVuOihhPWlbb10uY2hpbGRyZW4pJiZhLnNsaWNlKCl8fFtdLEE6bnVsbCxhOm51bGwsejowLG06MCxjOjAsczowLHQ6bnVsbCxpOm99KS5hPWEpO3JldHVybiByLmNoaWxkcmVuWzBdfSh1KTtpZihQaShoLG8pLGgucGFyZW50Lm09LWgueixDaShoLHMpLGEpQ2kodSxsKTtlbHNle3ZhciBmPXUscD11LGQ9dTtDaSh1LGZ1bmN0aW9uKHQpe3QueDxmLngmJihmPXQpLHQueD5wLngmJihwPXQpLHQuZGVwdGg+ZC5kZXB0aCYmKGQ9dCl9KTt2YXIgZz1yKGYscCkvMi1mLngsdj1uWzBdLyhwLngrcihwLGYpLzIrZyksbT1uWzFdLyhkLmRlcHRofHwxKTtDaSh1LGZ1bmN0aW9uKHQpe3QueD0odC54K2cpKnYsdC55PXQuZGVwdGgqbX0pfXJldHVybiBjfWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5jaGlsZHJlbixuPXQucGFyZW50LmNoaWxkcmVuLGE9dC5pP25bdC5pLTFdOm51bGw7aWYoZS5sZW5ndGgpeyFmdW5jdGlvbih0KXt2YXIgZSxyPTAsbj0wLGE9dC5jaGlsZHJlbixpPWEubGVuZ3RoO2Zvcig7LS1pPj0wOykoZT1hW2ldKS56Kz1yLGUubSs9cixyKz1lLnMrKG4rPWUuYyl9KHQpO3ZhciBpPShlWzBdLnorZVtlLmxlbmd0aC0xXS56KS8yO2E/KHQuej1hLnorcih0Ll8sYS5fKSx0Lm09dC56LWkpOnQuej1pfWVsc2UgYSYmKHQuej1hLnorcih0Ll8sYS5fKSk7dC5wYXJlbnQuQT1mdW5jdGlvbih0LGUsbil7aWYoZSl7Zm9yKHZhciBhLGk9dCxvPXQscz1lLGw9aS5wYXJlbnQuY2hpbGRyZW5bMF0sYz1pLm0sdT1vLm0saD1zLm0sZj1sLm07cz1vbyhzKSxpPWlvKGkpLHMmJmk7KWw9aW8obCksKG89b28obykpLmE9dCwoYT1zLnoraC1pLnotYytyKHMuXyxpLl8pKT4wJiYoc28obG8ocyx0LG4pLHQsYSksYys9YSx1Kz1hKSxoKz1zLm0sYys9aS5tLGYrPWwubSx1Kz1vLm07cyYmIW9vKG8pJiYoby50PXMsby5tKz1oLXUpLGkmJiFpbyhsKSYmKGwudD1pLGwubSs9Yy1mLG49dCl9cmV0dXJuIG59KHQsYSx0LnBhcmVudC5BfHxuWzBdKX1mdW5jdGlvbiBzKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBsKHQpe3QueCo9blswXSx0Lnk9dC5kZXB0aCpuWzFdfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09KG49dCk/bDpudWxsLGkpOmE/bnVsbDpufSxpLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PShuPXQpP251bGw6bCxpKTphP246bnVsbH0sTGkoaSxlKX0sdC5sYXlvdXQuY2x1c3Rlcj1mdW5jdGlvbigpe3ZhciBlPXQubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCkscj1hbyxuPVsxLDFdLGE9ITE7ZnVuY3Rpb24gaShpLG8pe3ZhciBzLGw9ZS5jYWxsKHRoaXMsaSxvKSxjPWxbMF0sdT0wO1BpKGMsZnVuY3Rpb24oZSl7dmFyIG49ZS5jaGlsZHJlbjtuJiZuLmxlbmd0aD8oZS54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K2UueH0sMCkvdC5sZW5ndGh9KG4pLGUueT1mdW5jdGlvbihlKXtyZXR1cm4gMSt0Lm1heChlLGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KX0obikpOihlLng9cz91Kz1yKGUscyk6MCxlLnk9MCxzPWUpfSk7dmFyIGg9ZnVuY3Rpb24gdChlKXt2YXIgcj1lLmNoaWxkcmVuO3JldHVybiByJiZyLmxlbmd0aD90KHJbMF0pOmV9KGMpLGY9ZnVuY3Rpb24gdChlKXt2YXIgcixuPWUuY2hpbGRyZW47cmV0dXJuIG4mJihyPW4ubGVuZ3RoKT90KG5bci0xXSk6ZX0oYykscD1oLngtcihoLGYpLzIsZD1mLngrcihmLGgpLzI7cmV0dXJuIFBpKGMsYT9mdW5jdGlvbih0KXt0Lng9KHQueC1jLngpKm5bMF0sdC55PShjLnktdC55KSpuWzFdfTpmdW5jdGlvbih0KXt0Lng9KHQueC1wKS8oZC1wKSpuWzBdLHQueT0oMS0oYy55P3QueS9jLnk6MSkpKm5bMV19KSxsfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09KG49dCksaSk6YT9udWxsOm59LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbCE9KG49dCksaSk6YT9uOm51bGx9LExpKGksZSl9LHQubGF5b3V0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgZSxyPXQubGF5b3V0LmhpZXJhcmNoeSgpLG49TWF0aC5yb3VuZCxhPVsxLDFdLGk9bnVsbCxvPWNvLHM9ITEsbD0ic3F1YXJpZnkiLGM9LjUqKDErTWF0aC5zcXJ0KDUpKTtmdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByLG4sYT0tMSxpPXQubGVuZ3RoOysrYTxpOyluPShyPXRbYV0pLnZhbHVlKihlPDA/MDplKSxyLmFyZWE9aXNOYU4obil8fG48PTA/MDpufWZ1bmN0aW9uIGgodCl7dmFyIGU9dC5jaGlsZHJlbjtpZihlJiZlLmxlbmd0aCl7dmFyIHIsbixhLGk9byh0KSxzPVtdLGM9ZS5zbGljZSgpLGY9MS8wLGc9InNsaWNlIj09PWw/aS5keDoiZGljZSI9PT1sP2kuZHk6InNsaWNlLWRpY2UiPT09bD8xJnQuZGVwdGg/aS5keTppLmR4Ok1hdGgubWluKGkuZHgsaS5keSk7Zm9yKHUoYyxpLmR4KmkuZHkvdC52YWx1ZSkscy5hcmVhPTA7KGE9Yy5sZW5ndGgpPjA7KXMucHVzaChyPWNbYS0xXSkscy5hcmVhKz1yLmFyZWEsInNxdWFyaWZ5IiE9PWx8fChuPXAocyxnKSk8PWY/KGMucG9wKCksZj1uKToocy5hcmVhLT1zLnBvcCgpLmFyZWEsZChzLGcsaSwhMSksZz1NYXRoLm1pbihpLmR4LGkuZHkpLHMubGVuZ3RoPXMuYXJlYT0wLGY9MS8wKTtzLmxlbmd0aCYmKGQocyxnLGksITApLHMubGVuZ3RoPXMuYXJlYT0wKSxlLmZvckVhY2goaCl9fWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5jaGlsZHJlbjtpZihlJiZlLmxlbmd0aCl7dmFyIHIsbj1vKHQpLGE9ZS5zbGljZSgpLGk9W107Zm9yKHUoYSxuLmR4Km4uZHkvdC52YWx1ZSksaS5hcmVhPTA7cj1hLnBvcCgpOylpLnB1c2gociksaS5hcmVhKz1yLmFyZWEsbnVsbCE9ci56JiYoZChpLHIuej9uLmR4Om4uZHksbiwhYS5sZW5ndGgpLGkubGVuZ3RoPWkuYXJlYT0wKTtlLmZvckVhY2goZil9fWZ1bmN0aW9uIHAodCxlKXtmb3IodmFyIHIsbj10LmFyZWEsYT0wLGk9MS8wLG89LTEscz10Lmxlbmd0aDsrK288czspKHI9dFtvXS5hcmVhKSYmKHI8aSYmKGk9cikscj5hJiYoYT1yKSk7cmV0dXJuIGUqPWUsKG4qPW4pP01hdGgubWF4KGUqYSpjL24sbi8oZSppKmMpKToxLzB9ZnVuY3Rpb24gZCh0LGUscixhKXt2YXIgaSxvPS0xLHM9dC5sZW5ndGgsbD1yLngsYz1yLnksdT1lP24odC5hcmVhL2UpOjA7aWYoZT09ci5keCl7Zm9yKChhfHx1PnIuZHkpJiYodT1yLmR5KTsrK288czspKGk9dFtvXSkueD1sLGkueT1jLGkuZHk9dSxsKz1pLmR4PU1hdGgubWluKHIueCtyLmR4LWwsdT9uKGkuYXJlYS91KTowKTtpLno9ITAsaS5keCs9ci54K3IuZHgtbCxyLnkrPXUsci5keS09dX1lbHNle2ZvcigoYXx8dT5yLmR4KSYmKHU9ci5keCk7KytvPHM7KShpPXRbb10pLng9bCxpLnk9YyxpLmR4PXUsYys9aS5keT1NYXRoLm1pbihyLnkrci5keS1jLHU/bihpLmFyZWEvdSk6MCk7aS56PSExLGkuZHkrPXIueStyLmR5LWMsci54Kz11LHIuZHgtPXV9fWZ1bmN0aW9uIGcodCl7dmFyIG49ZXx8cih0KSxpPW5bMF07cmV0dXJuIGkueD1pLnk9MCxpLnZhbHVlPyhpLmR4PWFbMF0saS5keT1hWzFdKTppLmR4PWkuZHk9MCxlJiZyLnJldmFsdWUoaSksdShbaV0saS5keCppLmR5L2kudmFsdWUpLChlP2Y6aCkoaSkscyYmKGU9biksbn1yZXR1cm4gZy5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsZyk6YX0sZy5wYWRkaW5nPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBpO2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHVvKGUsdCl9dmFyIHI7cmV0dXJuIG89bnVsbD09KGk9dCk/Y286ImZ1bmN0aW9uIj09KHI9dHlwZW9mIHQpP2Z1bmN0aW9uKGUpe3ZhciByPXQuY2FsbChnLGUsZS5kZXB0aCk7cmV0dXJuIG51bGw9PXI/Y28oZSk6dW8oZSwibnVtYmVyIj09dHlwZW9mIHI/W3IscixyLHJdOnIpfToibnVtYmVyIj09PXI/KHQ9W3QsdCx0LHRdLGUpOmUsZ30sZy5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10P01hdGgucm91bmQ6TnVtYmVyLGcpOm4hPU51bWJlcn0sZy5zdGlja3k9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxlPW51bGwsZyk6c30sZy5yYXRpbz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LGcpOmN9LGcubW9kZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10KyIiLGcpOmx9LExpKGcscil9LHQucmFuZG9tPXtub3JtYWw6ZnVuY3Rpb24odCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO3JldHVybiByPDImJihlPTEpLHI8MSYmKHQ9MCksZnVuY3Rpb24oKXt2YXIgcixuLGE7ZG97YT0ocj0yKk1hdGgucmFuZG9tKCktMSkqcisobj0yKk1hdGgucmFuZG9tKCktMSkqbn13aGlsZSghYXx8YT4xKTtyZXR1cm4gdCtlKnIqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGEpL2EpfX0sbG9nTm9ybWFsOmZ1bmN0aW9uKCl7dmFyIGU9dC5yYW5kb20ubm9ybWFsLmFwcGx5KHQsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAoZSgpKX19LGJhdGVzOmZ1bmN0aW9uKGUpe3ZhciByPXQucmFuZG9tLmlyd2luSGFsbChlKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcigpL2V9fSxpcndpbkhhbGw6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAscj0wO3I8dDtyKyspZSs9TWF0aC5yYW5kb20oKTtyZXR1cm4gZX19fSx0LnNjYWxlPXt9O3ZhciBtbz17Zmxvb3I6UCxjZWlsOlB9O2Z1bmN0aW9uIHlvKGUscixuLGEpe3ZhciBpPVtdLG89W10scz0wLGw9TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpLTE7Zm9yKGVbbF08ZVswXSYmKGU9ZS5zbGljZSgpLnJldmVyc2UoKSxyPXIuc2xpY2UoKS5yZXZlcnNlKCkpOysrczw9bDspaS5wdXNoKG4oZVtzLTFdLGVbc10pKSxvLnB1c2goYShyW3MtMV0scltzXSkpO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10LmJpc2VjdChlLHIsMSxsKS0xO3JldHVybiBvW25dKGlbbl0ocikpfX1mdW5jdGlvbiB4byhlLHIpe3JldHVybiB0LnJlYmluZChlLHIsInJhbmdlIiwicmFuZ2VSb3VuZCIsImludGVycG9sYXRlIiwiY2xhbXAiKX1mdW5jdGlvbiBibyh0LGUpe3JldHVybiBnbyh0LHZvKF9vKHQsZSlbMl0pKSxnbyh0LHZvKF9vKHQsZSlbMl0pKSx0fWZ1bmN0aW9uIF9vKHQsZSl7bnVsbD09ZSYmKGU9MTApO3ZhciByPWhvKHQpLG49clsxXS1yWzBdLGE9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhuL2UpL01hdGguTE4xMCkpLGk9ZS9uKmE7cmV0dXJuIGk8PS4xNT9hKj0xMDppPD0uMzU/YSo9NTppPD0uNzUmJihhKj0yKSxyWzBdPU1hdGguY2VpbChyWzBdL2EpKmEsclsxXT1NYXRoLmZsb29yKHJbMV0vYSkqYSsuNSphLHJbMl09YSxyfWZ1bmN0aW9uIHdvKGUscil7cmV0dXJuIHQucmFuZ2UuYXBwbHkodCxfbyhlLHIpKX1mdW5jdGlvbiBrbyhlLHIsbil7dmFyIGE9X28oZSxyKTtpZihuKXt2YXIgaT1QZS5leGVjKG4pO2lmKGkuc2hpZnQoKSwicyI9PT1pWzhdKXt2YXIgbz10LmZvcm1hdFByZWZpeChNYXRoLm1heCh5KGFbMF0pLHkoYVsxXSkpKTtyZXR1cm4gaVs3XXx8KGlbN109Ii4iK01vKG8uc2NhbGUoYVsyXSkpKSxpWzhdPSJmIixuPXQuZm9ybWF0KGkuam9pbigiIikpLGZ1bmN0aW9uKHQpe3JldHVybiBuKG8uc2NhbGUodCkpK28uc3ltYm9sfX1pWzddfHwoaVs3XT0iLiIrZnVuY3Rpb24odCxlKXt2YXIgcj1NbyhlWzJdKTtyZXR1cm4gdCBpbiBUbz9NYXRoLmFicyhyLU1vKE1hdGgubWF4KHkoZVswXSkseShlWzFdKSkpKSsgKygiZSIhPT10KTpyLTIqKCIlIj09PXQpfShpWzhdLGEpKSxuPWkuam9pbigiIil9ZWxzZSBuPSIsLiIrTW8oYVsyXSkrImYiO3JldHVybiB0LmZvcm1hdChuKX10LnNjYWxlLmxpbmVhcj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuLGEpe3ZhciBpLG87ZnVuY3Rpb24gcygpe3ZhciB0PU1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKT4yP3lvOnBvLHM9YT94aTp5aTtyZXR1cm4gaT10KGUscixzLG4pLG89dChyLGUscyxLYSksbH1mdW5jdGlvbiBsKHQpe3JldHVybiBpKHQpfWwuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBvKHQpfTtsLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10Lm1hcChOdW1iZXIpLHMoKSk6ZX07bC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LHMoKSk6cn07bC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBsLnJhbmdlKHQpLmludGVycG9sYXRlKGhpKX07bC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LHMoKSk6YX07bC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHMoKSk6bn07bC50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gd28oZSx0KX07bC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQscil7cmV0dXJuIGtvKGUsdCxyKX07bC5uaWNlPWZ1bmN0aW9uKHQpe3JldHVybiBibyhlLHQpLHMoKX07bC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZSxyLG4sYSl9O3JldHVybiBzKCl9KFswLDFdLFswLDFdLEthLCExKX07dmFyIFRvPXtzOjEsZzoxLHA6MSxyOjEsZToxfTtmdW5jdGlvbiBNbyh0KXtyZXR1cm4tTWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMTArLjAxKX10LnNjYWxlLmxvZz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHIsbixhLGkpe2Z1bmN0aW9uIG8odCl7cmV0dXJuKGE/TWF0aC5sb2codDwwPzA6dCk6LU1hdGgubG9nKHQ+MD8wOi10KSkvTWF0aC5sb2cobil9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gYT9NYXRoLnBvdyhuLHQpOi1NYXRoLnBvdyhuLC10KX1mdW5jdGlvbiBsKHQpe3JldHVybiByKG8odCkpfWwuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBzKHIuaW52ZXJ0KHQpKX07bC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dFswXT49MCxyLmRvbWFpbigoaT10Lm1hcChOdW1iZXIpKS5tYXAobykpLGwpOml9O2wuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyLmRvbWFpbihpLm1hcChvKSksbCk6bn07bC5uaWNlPWZ1bmN0aW9uKCl7dmFyIHQ9Z28oaS5tYXAobyksYT9NYXRoOlNvKTtyZXR1cm4gci5kb21haW4odCksaT10Lm1hcChzKSxsfTtsLnRpY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9aG8oaSksZT1bXSxyPXRbMF0sbD10WzFdLGM9TWF0aC5mbG9vcihvKHIpKSx1PU1hdGguY2VpbChvKGwpKSxoPW4lMT8yOm47aWYoaXNGaW5pdGUodS1jKSl7aWYoYSl7Zm9yKDtjPHU7YysrKWZvcih2YXIgZj0xO2Y8aDtmKyspZS5wdXNoKHMoYykqZik7ZS5wdXNoKHMoYykpfWVsc2UgZm9yKGUucHVzaChzKGMpKTtjKys8dTspZm9yKHZhciBmPWgtMTtmPjA7Zi0tKWUucHVzaChzKGMpKmYpO2ZvcihjPTA7ZVtjXTxyO2MrKyk7Zm9yKHU9ZS5sZW5ndGg7ZVt1LTFdPmw7dS0tKTtlPWUuc2xpY2UoYyx1KX1yZXR1cm4gZX07bC50aWNrRm9ybWF0PWZ1bmN0aW9uKGUscil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEFvO2FyZ3VtZW50cy5sZW5ndGg8Mj9yPUFvOiJmdW5jdGlvbiIhPXR5cGVvZiByJiYocj10LmZvcm1hdChyKSk7dmFyIGE9TWF0aC5tYXgoMSxuKmUvbC50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQvcyhNYXRoLnJvdW5kKG8odCkpKTtyZXR1cm4gZSpuPG4tLjUmJihlKj1uKSxlPD1hP3IodCk6IiJ9fTtsLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZShyLmNvcHkoKSxuLGEsaSl9O3JldHVybiB4byhsLHIpfSh0LnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCwxXSksMTAsITAsWzEsMTBdKX07dmFyIEFvPXQuZm9ybWF0KCIuMGUiKSxTbz17Zmxvb3I6ZnVuY3Rpb24odCl7cmV0dXJuLU1hdGguY2VpbCgtdCl9LGNlaWw6ZnVuY3Rpb24odCl7cmV0dXJuLU1hdGguZmxvb3IoLXQpfX07ZnVuY3Rpb24gRW8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPDA/LU1hdGgucG93KC1lLHQpOk1hdGgucG93KGUsdCl9fXQuc2NhbGUucG93PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBhPUVvKHIpLGk9RW8oMS9yKTtmdW5jdGlvbiBvKHQpe3JldHVybiBlKGEodCkpfW8uaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBpKGUuaW52ZXJ0KHQpKX07by5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUuZG9tYWluKChuPXQubWFwKE51bWJlcikpLm1hcChhKSksbyk6bn07by50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gd28obix0KX07by50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGtvKG4sdCxlKX07by5uaWNlPWZ1bmN0aW9uKHQpe3JldHVybiBvLmRvbWFpbihibyhuLHQpKX07by5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1FbyhyPXQpLGk9RW8oMS9yKSxlLmRvbWFpbihuLm1hcChhKSksbyk6cn07by5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZS5jb3B5KCkscixuKX07cmV0dXJuIHhvKG8sZSl9KHQuc2NhbGUubGluZWFyKCksMSxbMCwxXSl9LHQuc2NhbGUuc3FydD1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLnBvdygpLmV4cG9uZW50KC41KX0sdC5zY2FsZS5vcmRpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXt2YXIgYSxpLG87ZnVuY3Rpb24gcyh0KXtyZXR1cm4gaVsoKGEuZ2V0KHQpfHwoInJhbmdlIj09PW4udD9hLnNldCh0LHIucHVzaCh0KSk6TmFOKSktMSklaS5sZW5ndGhdfWZ1bmN0aW9uIGwoZSxuKXtyZXR1cm4gdC5yYW5nZShyLmxlbmd0aCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlK24qdH0pfXMuZG9tYWluPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByO3I9W10sYT1uZXcgYjtmb3IodmFyIGUsaT0tMSxvPXQubGVuZ3RoOysraTxvOylhLmhhcyhlPXRbaV0pfHxhLnNldChlLHIucHVzaChlKSk7cmV0dXJuIHNbbi50XS5hcHBseShzLG4uYSl9O3MucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxvPTAsbj17dDoicmFuZ2UiLGE6YXJndW1lbnRzfSxzKTppfTtzLnJhbmdlUG9pbnRzPWZ1bmN0aW9uKHQsZSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKTt2YXIgYT10WzBdLGM9dFsxXSx1PXIubGVuZ3RoPDI/KGE9KGErYykvMiwwKTooYy1hKS8oci5sZW5ndGgtMStlKTtyZXR1cm4gaT1sKGErdSplLzIsdSksbz0wLG49e3Q6InJhbmdlUG9pbnRzIixhOmFyZ3VtZW50c30sc307cy5yYW5nZVJvdW5kUG9pbnRzPWZ1bmN0aW9uKHQsZSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKTt2YXIgYT10WzBdLGM9dFsxXSx1PXIubGVuZ3RoPDI/KGE9Yz1NYXRoLnJvdW5kKChhK2MpLzIpLDApOihjLWEpLyhyLmxlbmd0aC0xK2UpfDA7cmV0dXJuIGk9bChhK01hdGgucm91bmQodSplLzIrKGMtYS0oci5sZW5ndGgtMStlKSp1KS8yKSx1KSxvPTAsbj17dDoicmFuZ2VSb3VuZFBvaW50cyIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VCYW5kcz1mdW5jdGlvbih0LGUsYSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihhPWUpO3ZhciBjPXRbMV08dFswXSx1PXRbYy0wXSxoPXRbMS1jXSxmPShoLXUpLyhyLmxlbmd0aC1lKzIqYSk7cmV0dXJuIGk9bCh1K2YqYSxmKSxjJiZpLnJldmVyc2UoKSxvPWYqKDEtZSksbj17dDoicmFuZ2VCYW5kcyIsYTphcmd1bWVudHN9LHN9O3MucmFuZ2VSb3VuZEJhbmRzPWZ1bmN0aW9uKHQsZSxhKXthcmd1bWVudHMubGVuZ3RoPDImJihlPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGE9ZSk7dmFyIGM9dFsxXTx0WzBdLHU9dFtjLTBdLGg9dFsxLWNdLGY9TWF0aC5mbG9vcigoaC11KS8oci5sZW5ndGgtZSsyKmEpKTtyZXR1cm4gaT1sKHUrTWF0aC5yb3VuZCgoaC11LShyLmxlbmd0aC1lKSpmKS8yKSxmKSxjJiZpLnJldmVyc2UoKSxvPU1hdGgucm91bmQoZiooMS1lKSksbj17dDoicmFuZ2VSb3VuZEJhbmRzIixhOmFyZ3VtZW50c30sc307cy5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gb307cy5yYW5nZUV4dGVudD1mdW5jdGlvbigpe3JldHVybiBobyhuLmFbMF0pfTtzLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZShyLG4pfTtyZXR1cm4gcy5kb21haW4ocil9KFtdLHt0OiJyYW5nZSIsYTpbW11dfSl9LHQuc2NhbGUuY2F0ZWdvcnkxMD1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShMbyl9LHQuc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShDbyl9LHQuc2NhbGUuY2F0ZWdvcnkyMGI9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoUG8pfSx0LnNjYWxlLmNhdGVnb3J5MjBjPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKE9vKX07dmFyIExvPVsyMDYyMjYwLDE2NzQ0MjA2LDI5MjQ1ODgsMTQwMzQ3MjgsOTcyNTg4NSw5MTk3MTMxLDE0OTA3MzMwLDgzNTU3MTEsMTIzNjkxODYsMTU1NjE3NV0ubWFwKHNlKSxDbz1bMjA2MjI2MCwxMTQ1NDQ0MCwxNjc0NDIwNiwxNjc1OTY3MiwyOTI0NTg4LDEwMDE4Njk4LDE0MDM0NzI4LDE2NzUwNzQyLDk3MjU4ODUsMTI5NTU4NjEsOTE5NzEzMSwxMjg4NTE0MCwxNDkwNzMzMCwxNjIzNDE5NCw4MzU1NzExLDEzMDkyODA3LDEyMzY5MTg2LDE0NDA4NTg5LDE1NTYxNzUsMTA0MTA3MjVdLm1hcChzZSksUG89WzM3NTA3NzcsNTM5NTYxOSw3MDQwNzE5LDEwMjY0Mjg2LDY1MTkwOTcsOTIxNjU5NCwxMTkxNTExNSwxMzU1NjYzNiw5MjAyOTkzLDEyNDI2ODA5LDE1MTg2NTE0LDE1MTkwOTMyLDg2NjYxNjksMTEzNTY0OTAsMTQwNDk2NDMsMTUxNzczNzIsODA3NzY4MywxMDgzNDMyNCwxMzUyODUwOSwxNDU4OTY1NF0ubWFwKHNlKSxPbz1bMzI0NDczMyw3MDU3MTEwLDEwNDA2NjI1LDEzMDMyNDMxLDE1MDk1MDUzLDE2NjE2NzY0LDE2NjI1MjU5LDE2NjM0MDE4LDMyNTMwNzYsNzY1MjQ3MCwxMDYwNzAwMywxMzEwMTUwNCw3Njk1MjgxLDEwMzk0MzEyLDEyMzY5MzcyLDE0MzQyODkxLDY1MTM1MDcsOTg2ODk1MCwxMjQzNDg3NywxNDI3NzA4MV0ubWFwKHNlKTtmdW5jdGlvbiB6bygpe3JldHVybiAwfXQuc2NhbGUucXVhbnRpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4pe3ZhciBhO2Z1bmN0aW9uIGkoKXt2YXIgZT0wLGk9bi5sZW5ndGg7Zm9yKGE9W107KytlPGk7KWFbZS0xXT10LnF1YW50aWxlKHIsZS9pKTtyZXR1cm4gb31mdW5jdGlvbiBvKGUpe2lmKCFpc05hTihlPStlKSlyZXR1cm4gblt0LmJpc2VjdChhLGUpXX1vLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10Lm1hcChwKS5maWx0ZXIoZCkuc29ydChmKSxpKCkpOnJ9O28ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxpKCkpOm59O28ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGF9O28uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybih0PW4uaW5kZXhPZih0KSk8MD9bTmFOLE5hTl06W3Q+MD9hW3QtMV06clswXSx0PGEubGVuZ3RoP2FbdF06cltyLmxlbmd0aC0xXV19O28uY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9O3JldHVybiBpKCl9KFtdLFtdKX0sdC5zY2FsZS5xdWFudGl6ZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgYSxpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIG5bTWF0aC5tYXgoMCxNYXRoLm1pbihpLE1hdGguZmxvb3IoYSoodC1lKSkpKV19ZnVuY3Rpb24gcygpe3JldHVybiBhPW4ubGVuZ3RoLyhyLWUpLGk9bi5sZW5ndGgtMSxvfW8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbdC5sZW5ndGgtMV0scygpKTpbZSxyXX07by5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHMoKSk6bn07by5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuW3Q9KHQ9bi5pbmRleE9mKHQpKTwwP05hTjp0L2ErZSx0KzEvYV19O28uY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUscixuKX07cmV0dXJuIHMoKX0oMCwxLFswLDFdKX0sdC5zY2FsZS50aHJlc2hvbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4pe2Z1bmN0aW9uIGEoZSl7aWYoZTw9ZSlyZXR1cm4gblt0LmJpc2VjdChyLGUpXX1hLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9O2EucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxhKTpufTthLmludmVydEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uLmluZGV4T2YodCksW3JbdC0xXSxyW3RdXX07YS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUocixuKX07cmV0dXJuIGF9KFsuNV0sWzAsMV0pfSx0LnNjYWxlLmlkZW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4rdH1yLmludmVydD1yO3IuZG9tYWluPXIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dC5tYXAocikscik6ZX07ci50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gd28oZSx0KX07ci50aWNrRm9ybWF0PWZ1bmN0aW9uKHQscil7cmV0dXJuIGtvKGUsdCxyKX07ci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZSl9O3JldHVybiByfShbMCwxXSl9LHQuc3ZnPXt9LHQuc3ZnLmFyYz1mdW5jdGlvbigpe3ZhciB0PURvLGU9Um8scj16byxuPUlvLGE9Rm8saT1CbyxvPU5vO2Z1bmN0aW9uIHMoKXt2YXIgcz1NYXRoLm1heCgwLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYz1NYXRoLm1heCgwLCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksdT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1FdCxoPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLUV0LGY9TWF0aC5hYnMoaC11KSxwPXU+aD8wOjE7aWYoYzxzJiYoZD1jLGM9cyxzPWQpLGY+PVN0KXJldHVybiBsKGMscCkrKHM/bChzLDEtcCk6IiIpKyJaIjt2YXIgZCxnLHYsbSx5LHgsYixfLHcsayxULE0sQT0wLFM9MCxFPVtdO2lmKChtPSgrby5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDApLzIpJiYodj1uPT09SW8/TWF0aC5zcXJ0KHMqcytjKmMpOituLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxwfHwoUyo9LTEpLGMmJihTPUl0KHYvYypNYXRoLnNpbihtKSkpLHMmJihBPUl0KHYvcypNYXRoLnNpbihtKSkpKSxjKXt5PWMqTWF0aC5jb3ModStTKSx4PWMqTWF0aC5zaW4odStTKSxiPWMqTWF0aC5jb3MoaC1TKSxfPWMqTWF0aC5zaW4oaC1TKTt2YXIgTD1NYXRoLmFicyhoLXUtMipTKTw9TXQ/MDoxO2lmKFMmJmpvKHkseCxiLF8pPT09cF5MKXt2YXIgQz0odStoKS8yO3k9YypNYXRoLmNvcyhDKSx4PWMqTWF0aC5zaW4oQyksYj1fPW51bGx9fWVsc2UgeT14PTA7aWYocyl7dz1zKk1hdGguY29zKGgtQSksaz1zKk1hdGguc2luKGgtQSksVD1zKk1hdGguY29zKHUrQSksTT1zKk1hdGguc2luKHUrQSk7dmFyIFA9TWF0aC5hYnModS1oKzIqQSk8PU10PzA6MTtpZihBJiZqbyh3LGssVCxNKT09PTEtcF5QKXt2YXIgTz0odStoKS8yO3c9cypNYXRoLmNvcyhPKSxrPXMqTWF0aC5zaW4oTyksVD1NPW51bGx9fWVsc2Ugdz1rPTA7aWYoZj5rdCYmKGQ9TWF0aC5taW4oTWF0aC5hYnMoYy1zKS8yLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpPi4wMDEpe2c9czxjXnA/MDoxO3ZhciB6PWQsST1kO2lmKGY8TXQpe3ZhciBEPW51bGw9PVQ/W3csa106bnVsbD09Yj9beSx4XTpjYShbeSx4XSxbVCxNXSxbYixfXSxbdyxrXSksUj15LURbMF0sRj14LURbMV0sQj1iLURbMF0sTj1fLURbMV0saj0xL01hdGguc2luKE1hdGguYWNvcygoUipCK0YqTikvKE1hdGguc3FydChSKlIrRipGKSpNYXRoLnNxcnQoQipCK04qTikpKS8yKSxWPU1hdGguc3FydChEWzBdKkRbMF0rRFsxXSpEWzFdKTtJPU1hdGgubWluKGQsKHMtVikvKGotMSkpLHo9TWF0aC5taW4oZCwoYy1WKS8oaisxKSl9aWYobnVsbCE9Yil7dmFyIFU9Vm8obnVsbD09VD9bdyxrXTpbVCxNXSxbeSx4XSxjLHoscCkscT1WbyhbYixfXSxbdyxrXSxjLHoscCk7ZD09PXo/RS5wdXNoKCJNIixVWzBdLCJBIix6LCIsIix6LCIgMCAwLCIsZywiICIsVVsxXSwiQSIsYywiLCIsYywiIDAgIiwxLXBeam8oVVsxXVswXSxVWzFdWzFdLHFbMV1bMF0scVsxXVsxXSksIiwiLHAsIiAiLHFbMV0sIkEiLHosIiwiLHosIiAwIDAsIixnLCIgIixxWzBdKTpFLnB1c2goIk0iLFVbMF0sIkEiLHosIiwiLHosIiAwIDEsIixnLCIgIixxWzBdKX1lbHNlIEUucHVzaCgiTSIseSwiLCIseCk7aWYobnVsbCE9VCl7dmFyIEg9Vm8oW3kseF0sW1QsTV0scywtSSxwKSxHPVZvKFt3LGtdLG51bGw9PWI/W3kseF06W2IsX10scywtSSxwKTtkPT09ST9FLnB1c2goIkwiLEdbMF0sIkEiLEksIiwiLEksIiAwIDAsIixnLCIgIixHWzFdLCJBIixzLCIsIixzLCIgMCAiLHBeam8oR1sxXVswXSxHWzFdWzFdLEhbMV1bMF0sSFsxXVsxXSksIiwiLDEtcCwiICIsSFsxXSwiQSIsSSwiLCIsSSwiIDAgMCwiLGcsIiAiLEhbMF0pOkUucHVzaCgiTCIsR1swXSwiQSIsSSwiLCIsSSwiIDAgMCwiLGcsIiAiLEhbMF0pfWVsc2UgRS5wdXNoKCJMIix3LCIsIixrKX1lbHNlIEUucHVzaCgiTSIseSwiLCIseCksbnVsbCE9YiYmRS5wdXNoKCJBIixjLCIsIixjLCIgMCAiLEwsIiwiLHAsIiAiLGIsIiwiLF8pLEUucHVzaCgiTCIsdywiLCIsayksbnVsbCE9VCYmRS5wdXNoKCJBIixzLCIsIixzLCIgMCAiLFAsIiwiLDEtcCwiICIsVCwiLCIsTSk7cmV0dXJuIEUucHVzaCgiWiIpLEUuam9pbigiIil9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiJNMCwiK3QrIkEiK3QrIiwiK3QrIiAwIDEsIitlKyIgMCwiKy10KyJBIit0KyIsIit0KyIgMCAxLCIrZSsiIDAsIit0fXJldHVybiBzLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXZlKGUpLHMpOnR9LHMub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dmUodCkscyk6ZX0scy5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dmUodCkscyk6cn0scy5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dD09SW8/SW86dmUodCkscyk6bn0scy5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXZlKHQpLHMpOmF9LHMuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dmUodCkscyk6aX0scy5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz12ZSh0KSxzKTpvfSxzLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIHI9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLG49KCthLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLUV0O3JldHVybltNYXRoLmNvcyhuKSpyLE1hdGguc2luKG4pKnJdfSxzfTt2YXIgSW89ImF1dG8iO2Z1bmN0aW9uIERvKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIFJvKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIEZvKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gQm8odCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gTm8odCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gam8odCxlLHIsbil7cmV0dXJuKHQtcikqZS0oZS1uKSp0PjA/MDoxfWZ1bmN0aW9uIFZvKHQsZSxyLG4sYSl7dmFyIGk9dFswXS1lWzBdLG89dFsxXS1lWzFdLHM9KGE/bjotbikvTWF0aC5zcXJ0KGkqaStvKm8pLGw9cypvLGM9LXMqaSx1PXRbMF0rbCxoPXRbMV0rYyxmPWVbMF0rbCxwPWVbMV0rYyxkPSh1K2YpLzIsZz0oaCtwKS8yLHY9Zi11LG09cC1oLHk9dip2K20qbSx4PXItbixiPXUqcC1mKmgsXz0obTwwPy0xOjEpKk1hdGguc3FydChNYXRoLm1heCgwLHgqeCp5LWIqYikpLHc9KGIqbS12Kl8pL3ksaz0oLWIqdi1tKl8pL3ksVD0oYiptK3YqXykveSxNPSgtYip2K20qXykveSxBPXctZCxTPWstZyxFPVQtZCxMPU0tZztyZXR1cm4gQSpBK1MqUz5FKkUrTCpMJiYodz1ULGs9TSksW1t3LWwsay1jXSxbdypyL3gsaypyL3hdXX1mdW5jdGlvbiBVbyh0KXt2YXIgZT1uYSxyPWFhLG49WHIsYT1IbyxpPWEua2V5LG89Ljc7ZnVuY3Rpb24gcyhpKXt2YXIgcyxsPVtdLGM9W10sdT0tMSxoPWkubGVuZ3RoLGY9dmUoZSkscD12ZShyKTtmdW5jdGlvbiBkKCl7bC5wdXNoKCJNIixhKHQoYyksbykpfWZvcig7Kyt1PGg7KW4uY2FsbCh0aGlzLHM9aVt1XSx1KT9jLnB1c2goWytmLmNhbGwodGhpcyxzLHUpLCtwLmNhbGwodGhpcyxzLHUpXSk6Yy5sZW5ndGgmJihkKCksYz1bXSk7cmV0dXJuIGMubGVuZ3RoJiZkKCksbC5sZW5ndGg/bC5qb2luKCIiKTpudWxsfXJldHVybiBzLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxzKTplfSxzLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxzKTpyfSxzLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxzKTpufSxzLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P2E9dDooYT1xby5nZXQodCl8fEhvKS5rZXkscyk6aX0scy50ZW5zaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQscyk6b30sc310LnN2Zy5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIFVvKFApfTt2YXIgcW89dC5tYXAoe2xpbmVhcjpIbywibGluZWFyLWNsb3NlZCI6R28sc3RlcDpmdW5jdGlvbih0KXt2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGE9W25bMF0sIiwiLG5bMV1dO2Zvcig7KytlPHI7KWEucHVzaCgiSCIsKG5bMF0rKG49dFtlXSlbMF0pLzIsIlYiLG5bMV0pO3I+MSYmYS5wdXNoKCJIIixuWzBdKTtyZXR1cm4gYS5qb2luKCIiKX0sInN0ZXAtYmVmb3JlIjpZbywic3RlcC1hZnRlciI6V28sYmFzaXM6Sm8sImJhc2lzLW9wZW4iOmZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIEhvKHQpO3ZhciBlLHI9W10sbj0tMSxhPXQubGVuZ3RoLGk9WzBdLG89WzBdO2Zvcig7KytuPDM7KWU9dFtuXSxpLnB1c2goZVswXSksby5wdXNoKGVbMV0pO3IucHVzaChLbyh0cyxpKSsiLCIrS28odHMsbykpLC0tbjtmb3IoOysrbjxhOyllPXRbbl0saS5zaGlmdCgpLGkucHVzaChlWzBdKSxvLnNoaWZ0KCksby5wdXNoKGVbMV0pLGVzKHIsaSxvKTtyZXR1cm4gci5qb2luKCIiKX0sImJhc2lzLWNsb3NlZCI6ZnVuY3Rpb24odCl7dmFyIGUscixuPS0xLGE9dC5sZW5ndGgsaT1hKzQsbz1bXSxzPVtdO2Zvcig7KytuPDQ7KXI9dFtuJWFdLG8ucHVzaChyWzBdKSxzLnB1c2goclsxXSk7ZT1bS28odHMsbyksIiwiLEtvKHRzLHMpXSwtLW47Zm9yKDsrK248aTspcj10W24lYV0sby5zaGlmdCgpLG8ucHVzaChyWzBdKSxzLnNoaWZ0KCkscy5wdXNoKHJbMV0pLGVzKGUsbyxzKTtyZXR1cm4gZS5qb2luKCIiKX0sYnVuZGxlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGgtMTtpZihyKWZvcih2YXIgbixhLGk9dFswXVswXSxvPXRbMF1bMV0scz10W3JdWzBdLWksbD10W3JdWzFdLW8sYz0tMTsrK2M8PXI7KW49dFtjXSxhPWMvcixuWzBdPWUqblswXSsoMS1lKSooaSthKnMpLG5bMV09ZSpuWzFdKygxLWUpKihvK2EqbCk7cmV0dXJuIEpvKHQpfSxjYXJkaW5hbDpmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aDwzP0hvKHQpOnRbMF0rWG8odCxabyh0LGUpKX0sImNhcmRpbmFsLW9wZW4iOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDQ/SG8odCk6dFsxXStYbyh0LnNsaWNlKDEsLTEpLFpvKHQsZSkpfSwiY2FyZGluYWwtY2xvc2VkIjpmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aDwzP0dvKHQpOnRbMF0rWG8oKHQucHVzaCh0WzBdKSx0KSxabyhbdFt0Lmxlbmd0aC0yXV0uY29uY2F0KHQsW3RbMV1dKSxlKSl9LG1vbm90b25lOmZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aDwzP0hvKHQpOnRbMF0rWG8odCxmdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxpPVtdLG89ZnVuY3Rpb24odCl7dmFyIGU9MCxyPXQubGVuZ3RoLTEsbj1bXSxhPXRbMF0saT10WzFdLG89blswXT1ycyhhLGkpO2Zvcig7KytlPHI7KW5bZV09KG8rKG89cnMoYT1pLGk9dFtlKzFdKSkpLzI7cmV0dXJuIG5bZV09byxufSh0KSxzPS0xLGw9dC5sZW5ndGgtMTtmb3IoOysrczxsOyllPXJzKHRbc10sdFtzKzFdKSx5KGUpPGt0P29bc109b1tzKzFdPTA6KHI9b1tzXS9lLG49b1tzKzFdL2UsKGE9cipyK24qbik+OSYmKGE9MyplL01hdGguc3FydChhKSxvW3NdPWEqcixvW3MrMV09YSpuKSk7cz0tMTtmb3IoOysrczw9bDspYT0odFtNYXRoLm1pbihsLHMrMSldWzBdLXRbTWF0aC5tYXgoMCxzLTEpXVswXSkvKDYqKDErb1tzXSpvW3NdKSksaS5wdXNoKFthfHwwLG9bc10qYXx8MF0pO3JldHVybiBpfSh0KSl9fSk7ZnVuY3Rpb24gSG8odCl7cmV0dXJuIHQubGVuZ3RoPjE/dC5qb2luKCJMIik6dCsiWiJ9ZnVuY3Rpb24gR28odCl7cmV0dXJuIHQuam9pbigiTCIpKyJaIn1mdW5jdGlvbiBZbyh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxhPVtuWzBdLCIsIixuWzFdXTsrK2U8cjspYS5wdXNoKCJWIiwobj10W2VdKVsxXSwiSCIsblswXSk7cmV0dXJuIGEuam9pbigiIil9ZnVuY3Rpb24gV28odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0sYT1bblswXSwiLCIsblsxXV07KytlPHI7KWEucHVzaCgiSCIsKG49dFtlXSlbMF0sIlYiLG5bMV0pO3JldHVybiBhLmpvaW4oIiIpfWZ1bmN0aW9uIFhvKHQsZSl7aWYoZS5sZW5ndGg8MXx8dC5sZW5ndGghPWUubGVuZ3RoJiZ0Lmxlbmd0aCE9ZS5sZW5ndGgrMilyZXR1cm4gSG8odCk7dmFyIHI9dC5sZW5ndGghPWUubGVuZ3RoLG49IiIsYT10WzBdLGk9dFsxXSxvPWVbMF0scz1vLGw9MTtpZihyJiYobis9IlEiKyhpWzBdLTIqb1swXS8zKSsiLCIrKGlbMV0tMipvWzFdLzMpKyIsIitpWzBdKyIsIitpWzFdLGE9dFsxXSxsPTIpLGUubGVuZ3RoPjEpe3M9ZVsxXSxpPXRbbF0sbCsrLG4rPSJDIisoYVswXStvWzBdKSsiLCIrKGFbMV0rb1sxXSkrIiwiKyhpWzBdLXNbMF0pKyIsIisoaVsxXS1zWzFdKSsiLCIraVswXSsiLCIraVsxXTtmb3IodmFyIGM9MjtjPGUubGVuZ3RoO2MrKyxsKyspaT10W2xdLHM9ZVtjXSxuKz0iUyIrKGlbMF0tc1swXSkrIiwiKyhpWzFdLXNbMV0pKyIsIitpWzBdKyIsIitpWzFdfWlmKHIpe3ZhciB1PXRbbF07bis9IlEiKyhpWzBdKzIqc1swXS8zKSsiLCIrKGlbMV0rMipzWzFdLzMpKyIsIit1WzBdKyIsIit1WzFdfXJldHVybiBufWZ1bmN0aW9uIFpvKHQsZSl7Zm9yKHZhciByLG49W10sYT0oMS1lKS8yLGk9dFswXSxvPXRbMV0scz0xLGw9dC5sZW5ndGg7KytzPGw7KXI9aSxpPW8sbz10W3NdLG4ucHVzaChbYSoob1swXS1yWzBdKSxhKihvWzFdLXJbMV0pXSk7cmV0dXJuIG59ZnVuY3Rpb24gSm8odCl7aWYodC5sZW5ndGg8MylyZXR1cm4gSG8odCk7dmFyIGU9MSxyPXQubGVuZ3RoLG49dFswXSxhPW5bMF0saT1uWzFdLG89W2EsYSxhLChuPXRbMV0pWzBdXSxzPVtpLGksaSxuWzFdXSxsPVthLCIsIixpLCJMIixLbyh0cyxvKSwiLCIsS28odHMscyldO2Zvcih0LnB1c2godFtyLTFdKTsrK2U8PXI7KW49dFtlXSxvLnNoaWZ0KCksby5wdXNoKG5bMF0pLHMuc2hpZnQoKSxzLnB1c2goblsxXSksZXMobCxvLHMpO3JldHVybiB0LnBvcCgpLGwucHVzaCgiTCIsbiksbC5qb2luKCIiKX1mdW5jdGlvbiBLbyh0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119cW8uZm9yRWFjaChmdW5jdGlvbih0LGUpe2Uua2V5PXQsZS5jbG9zZWQ9Ly1jbG9zZWQkLy50ZXN0KHQpfSk7dmFyIFFvPVswLDIvMywxLzMsMF0sJG89WzAsMS8zLDIvMywwXSx0cz1bMCwxLzYsMi8zLDEvNl07ZnVuY3Rpb24gZXModCxlLHIpe3QucHVzaCgiQyIsS28oUW8sZSksIiwiLEtvKFFvLHIpLCIsIixLbygkbyxlKSwiLCIsS28oJG8sciksIiwiLEtvKHRzLGUpLCIsIixLbyh0cyxyKSl9ZnVuY3Rpb24gcnModCxlKXtyZXR1cm4oZVsxXS10WzFdKS8oZVswXS10WzBdKX1mdW5jdGlvbiBucyh0KXtmb3IodmFyIGUscixuLGE9LTEsaT10Lmxlbmd0aDsrK2E8aTspcj0oZT10W2FdKVswXSxuPWVbMV0tRXQsZVswXT1yKk1hdGguY29zKG4pLGVbMV09cipNYXRoLnNpbihuKTtyZXR1cm4gdH1mdW5jdGlvbiBhcyh0KXt2YXIgZT1uYSxyPW5hLG49MCxhPWFhLGk9WHIsbz1IbyxzPW8ua2V5LGw9byxjPSJMIix1PS43O2Z1bmN0aW9uIGgocyl7dmFyIGgsZixwLGQ9W10sZz1bXSx2PVtdLG09LTEseT1zLmxlbmd0aCx4PXZlKGUpLGI9dmUobiksXz1lPT09cj9mdW5jdGlvbigpe3JldHVybiBmfTp2ZShyKSx3PW49PT1hP2Z1bmN0aW9uKCl7cmV0dXJuIHB9OnZlKGEpO2Z1bmN0aW9uIGsoKXtkLnB1c2goIk0iLG8odCh2KSx1KSxjLGwodChnLnJldmVyc2UoKSksdSksIloiKX1mb3IoOysrbTx5OylpLmNhbGwodGhpcyxoPXNbbV0sbSk/KGcucHVzaChbZj0reC5jYWxsKHRoaXMsaCxtKSxwPStiLmNhbGwodGhpcyxoLG0pXSksdi5wdXNoKFsrXy5jYWxsKHRoaXMsaCxtKSwrdy5jYWxsKHRoaXMsaCxtKV0pKTpnLmxlbmd0aCYmKGsoKSxnPVtdLHY9W10pO3JldHVybiBnLmxlbmd0aCYmaygpLGQubGVuZ3RoP2Quam9pbigiIik6bnVsbH1yZXR1cm4gaC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXI9dCxoKTpyfSxoLngwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsaCk6ZX0saC54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGgpOnJ9LGgueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1hPXQsaCk6YX0saC55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGgpOm59LGgueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxoKTphfSxoLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxoKTppfSxoLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P289dDoobz1xby5nZXQodCl8fEhvKS5rZXksbD1vLnJldmVyc2V8fG8sYz1vLmNsb3NlZD8iTSI6IkwiLGgpOnN9LGgudGVuc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LGgpOnV9LGh9ZnVuY3Rpb24gaXModCl7cmV0dXJuIHQucmFkaXVzfWZ1bmN0aW9uIG9zKHQpe3JldHVyblt0LngsdC55XX1mdW5jdGlvbiBzcygpe3JldHVybiA2NH1mdW5jdGlvbiBscygpe3JldHVybiJjaXJjbGUifWZ1bmN0aW9uIGNzKHQpe3ZhciBlPU1hdGguc3FydCh0L010KTtyZXR1cm4iTTAsIitlKyJBIitlKyIsIitlKyIgMCAxLDEgMCwiKy1lKyJBIitlKyIsIitlKyIgMCAxLDEgMCwiK2UrIloifXQuc3ZnLmxpbmUucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIHQ9VW8obnMpO3JldHVybiB0LnJhZGl1cz10LngsZGVsZXRlIHQueCx0LmFuZ2xlPXQueSxkZWxldGUgdC55LHR9LFlvLnJldmVyc2U9V28sV28ucmV2ZXJzZT1Zbyx0LnN2Zy5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGFzKFApfSx0LnN2Zy5hcmVhLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PWFzKG5zKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5pbm5lclJhZGl1cz10LngwLGRlbGV0ZSB0LngwLHQub3V0ZXJSYWRpdXM9dC54MSxkZWxldGUgdC54MSx0LmFuZ2xlPXQueSxkZWxldGUgdC55LHQuc3RhcnRBbmdsZT10LnkwLGRlbGV0ZSB0LnkwLHQuZW5kQW5nbGU9dC55MSxkZWxldGUgdC55MSx0fSx0LnN2Zy5jaG9yZD1mdW5jdGlvbigpe3ZhciB0PXFuLGU9SG4scj1pcyxuPUZvLGE9Qm87ZnVuY3Rpb24gaShyLG4pe3ZhciBhLGksYz1vKHRoaXMsdCxyLG4pLHU9byh0aGlzLGUscixuKTtyZXR1cm4iTSIrYy5wMCtzKGMucixjLnAxLGMuYTEtYy5hMCkrKGk9dSwoYT1jKS5hMD09aS5hMCYmYS5hMT09aS5hMT9sKGMucixjLnAxLGMucixjLnAwKTpsKGMucixjLnAxLHUucix1LnAwKStzKHUucix1LnAxLHUuYTEtdS5hMCkrbCh1LnIsdS5wMSxjLnIsYy5wMCkpKyJaIn1mdW5jdGlvbiBvKHQsZSxpLG8pe3ZhciBzPWUuY2FsbCh0LGksbyksbD1yLmNhbGwodCxzLG8pLGM9bi5jYWxsKHQscyxvKS1FdCx1PWEuY2FsbCh0LHMsbyktRXQ7cmV0dXJue3I6bCxhMDpjLGExOnUscDA6W2wqTWF0aC5jb3MoYyksbCpNYXRoLnNpbihjKV0scDE6W2wqTWF0aC5jb3ModSksbCpNYXRoLnNpbih1KV19fWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiJBIit0KyIsIit0KyIgMCAiKyArKHI+TXQpKyIsMSAiK2V9ZnVuY3Rpb24gbCh0LGUscixuKXtyZXR1cm4iUSAwLDAgIitufXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj12ZSh0KSxpKTpyfSxpLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD12ZShlKSxpKTp0fSxpLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT12ZSh0KSxpKTplfSxpLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dmUodCksaSk6bn0saS5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT12ZSh0KSxpKTphfSxpfSx0LnN2Zy5kaWFnb25hbD1mdW5jdGlvbigpe3ZhciB0PXFuLGU9SG4scj1vcztmdW5jdGlvbiBuKG4sYSl7dmFyIGk9dC5jYWxsKHRoaXMsbixhKSxvPWUuY2FsbCh0aGlzLG4sYSkscz0oaS55K28ueSkvMixsPVtpLHt4OmkueCx5OnN9LHt4Om8ueCx5OnN9LG9dO3JldHVybiJNIisobD1sLm1hcChyKSlbMF0rIkMiK2xbMV0rIiAiK2xbMl0rIiAiK2xbM119cmV0dXJuIG4uc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXZlKGUpLG4pOnR9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXZlKHQpLG4pOmV9LG4ucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LHQuc3ZnLmRpYWdvbmFsLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBlPXQuc3ZnLmRpYWdvbmFsKCkscj1vcyxuPWUucHJvamVjdGlvbjtyZXR1cm4gZS5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykscj1lWzBdLG49ZVsxXS1FdDtyZXR1cm5bcipNYXRoLmNvcyhuKSxyKk1hdGguc2luKG4pXX19KHI9dCkpOnJ9LGV9LHQuc3ZnLnN5bWJvbD1mdW5jdGlvbigpe3ZhciB0PWxzLGU9c3M7ZnVuY3Rpb24gcihyLG4pe3JldHVybih1cy5nZXQodC5jYWxsKHRoaXMscixuKSl8fGNzKShlLmNhbGwodGhpcyxyLG4pKX1yZXR1cm4gci50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXZlKGUpLHIpOnR9LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT12ZSh0KSxyKTplfSxyfTt2YXIgdXM9dC5tYXAoe2NpcmNsZTpjcyxjcm9zczpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC81KS8yO3JldHVybiJNIistMyplKyIsIistZSsiSCIrLWUrIlYiKy0zKmUrIkgiK2UrIlYiKy1lKyJIIiszKmUrIlYiK2UrIkgiK2UrIlYiKzMqZSsiSCIrLWUrIlYiK2UrIkgiKy0zKmUrIloifSxkaWFtb25kOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0LygyKmZzKSkscj1lKmZzO3JldHVybiJNMCwiKy1lKyJMIityKyIsMCAwLCIrZSsiICIrLXIrIiwwWiJ9LHNxdWFyZTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodCkvMjtyZXR1cm4iTSIrLWUrIiwiKy1lKyJMIitlKyIsIistZSsiICIrZSsiLCIrZSsiICIrLWUrIiwiK2UrIloifSwidHJpYW5nbGUtZG93biI6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvaHMpLHI9ZSpocy8yO3JldHVybiJNMCwiK3IrIkwiK2UrIiwiKy1yKyIgIistZSsiLCIrLXIrIloifSwidHJpYW5nbGUtdXAiOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L2hzKSxyPWUqaHMvMjtyZXR1cm4iTTAsIistcisiTCIrZSsiLCIrcisiICIrLWUrIiwiK3IrIloifX0pO3Quc3ZnLnN5bWJvbFR5cGVzPXVzLmtleXMoKTt2YXIgaHM9TWF0aC5zcXJ0KDMpLGZzPU1hdGgudGFuKDMwKkx0KTtXLnRyYW5zaXRpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbj12c3x8Kyt4cyxhPXdzKHQpLGk9W10sbz1tc3x8e3RpbWU6RGF0ZS5ub3coKSxlYXNlOm9pLGRlbGF5OjAsZHVyYXRpb246MjUwfSxzPS0xLGw9dGhpcy5sZW5ndGg7KytzPGw7KXtpLnB1c2goZT1bXSk7Zm9yKHZhciBjPXRoaXNbc10sdT0tMSxoPWMubGVuZ3RoOysrdTxoOykocj1jW3VdKSYma3Mocix1LGEsbixvKSxlLnB1c2gocil9cmV0dXJuIGdzKGksYSxuKX0sVy5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChudWxsPT10P3BzOmRzKHdzKHQpKSl9O3ZhciBwcz1kcyh3cygpKTtmdW5jdGlvbiBkcyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZSxyLG47KGU9dGhpc1t0XSkmJihuPWVbcj1lLmFjdGl2ZV0pJiYobi50aW1lci5jPW51bGwsbi50aW1lci50PU5hTiwtLWUuY291bnQ/ZGVsZXRlIGVbcl06ZGVsZXRlIHRoaXNbdF0sZS5hY3RpdmUrPS41LG4uZXZlbnQmJm4uZXZlbnQuaW50ZXJydXB0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLG4uaW5kZXgpKX19ZnVuY3Rpb24gZ3ModCxlLHIpe3JldHVybiBVKHQseXMpLHQubmFtZXNwYWNlPWUsdC5pZD1yLHR9dmFyIHZzLG1zLHlzPVtdLHhzPTA7ZnVuY3Rpb24gYnModCxlLHIsbil7dmFyIGE9dC5pZCxpPXQubmFtZXNwYWNlO3JldHVybiB1dCh0LCJmdW5jdGlvbiI9PXR5cGVvZiByP2Z1bmN0aW9uKHQsbyxzKXt0W2ldW2FdLnR3ZWVuLnNldChlLG4oci5jYWxsKHQsdC5fX2RhdGFfXyxvLHMpKSl9OihyPW4ociksZnVuY3Rpb24odCl7dFtpXVthXS50d2Vlbi5zZXQoZSxyKX0pKX1mdW5jdGlvbiBfcyh0KXtyZXR1cm4gbnVsbD09dCYmKHQ9IiIpLGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiB3cyh0KXtyZXR1cm4gbnVsbD09dD8iX190cmFuc2l0aW9uX18iOiJfX3RyYW5zaXRpb25fIit0KyJfXyJ9ZnVuY3Rpb24ga3ModCxlLHIsbixhKXt2YXIgaSxvLHMsbCxjLHU9dFtyXXx8KHRbcl09e2FjdGl2ZTowLGNvdW50OjB9KSxoPXVbbl07ZnVuY3Rpb24gZihyKXt2YXIgYT11LmFjdGl2ZSxmPXVbYV07Zm9yKHZhciBkIGluIGYmJihmLnRpbWVyLmM9bnVsbCxmLnRpbWVyLnQ9TmFOLC0tdS5jb3VudCxkZWxldGUgdVthXSxmLmV2ZW50JiZmLmV2ZW50LmludGVycnVwdC5jYWxsKHQsdC5fX2RhdGFfXyxmLmluZGV4KSksdSlpZigrZDxuKXt2YXIgZz11W2RdO2cudGltZXIuYz1udWxsLGcudGltZXIudD1OYU4sLS11LmNvdW50LGRlbGV0ZSB1W2RdfW8uYz1wLFRlKGZ1bmN0aW9uKCl7cmV0dXJuIG8uYyYmcChyfHwxKSYmKG8uYz1udWxsLG8udD1OYU4pLDF9LDAsaSksdS5hY3RpdmU9bixoLmV2ZW50JiZoLmV2ZW50LnN0YXJ0LmNhbGwodCx0Ll9fZGF0YV9fLGUpLGM9W10saC50d2Vlbi5mb3JFYWNoKGZ1bmN0aW9uKHIsbil7KG49bi5jYWxsKHQsdC5fX2RhdGFfXyxlKSkmJmMucHVzaChuKX0pLGw9aC5lYXNlLHM9aC5kdXJhdGlvbn1mdW5jdGlvbiBwKGEpe2Zvcih2YXIgaT1hL3Msbz1sKGkpLGY9Yy5sZW5ndGg7Zj4wOyljWy0tZl0uY2FsbCh0LG8pO2lmKGk+PTEpcmV0dXJuIGguZXZlbnQmJmguZXZlbnQuZW5kLmNhbGwodCx0Ll9fZGF0YV9fLGUpLC0tdS5jb3VudD9kZWxldGUgdVtuXTpkZWxldGUgdFtyXSwxfWh8fChpPWEudGltZSxvPVRlKGZ1bmN0aW9uKHQpe3ZhciBlPWguZGVsYXk7aWYoby50PWUraSxlPD10KXJldHVybiBmKHQtZSk7by5jPWZ9LDAsaSksaD11W25dPXt0d2VlbjpuZXcgYix0aW1lOmksdGltZXI6byxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsaW5kZXg6ZX0sYT1udWxsLCsrdS5jb3VudCl9eXMuY2FsbD1XLmNhbGwseXMuZW1wdHk9Vy5lbXB0eSx5cy5ub2RlPVcubm9kZSx5cy5zaXplPVcuc2l6ZSx0LnRyYW5zaXRpb249ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSYmZS50cmFuc2l0aW9uP3ZzP2UudHJhbnNpdGlvbihyKTplOnQuc2VsZWN0aW9uKCkudHJhbnNpdGlvbihlKX0sdC50cmFuc2l0aW9uLnByb3RvdHlwZT15cyx5cy5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGE9dGhpcy5pZCxpPXRoaXMubmFtZXNwYWNlLG89W107dD1YKHQpO2Zvcih2YXIgcz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7by5wdXNoKGU9W10pO2Zvcih2YXIgYz10aGlzW3NdLHU9LTEsaD1jLmxlbmd0aDsrK3U8aDspKG49Y1t1XSkmJihyPXQuY2FsbChuLG4uX19kYXRhX18sdSxzKSk/KCJfX2RhdGFfXyJpbiBuJiYoci5fX2RhdGFfXz1uLl9fZGF0YV9fKSxrcyhyLHUsaSxhLG5baV1bYV0pLGUucHVzaChyKSk6ZS5wdXNoKG51bGwpfXJldHVybiBncyhvLGksYSl9LHlzLnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxpLG89dGhpcy5pZCxzPXRoaXMubmFtZXNwYWNlLGw9W107dD1aKHQpO2Zvcih2YXIgYz0tMSx1PXRoaXMubGVuZ3RoOysrYzx1Oylmb3IodmFyIGg9dGhpc1tjXSxmPS0xLHA9aC5sZW5ndGg7KytmPHA7KWlmKG49aFtmXSl7aT1uW3NdW29dLHI9dC5jYWxsKG4sbi5fX2RhdGFfXyxmLGMpLGwucHVzaChlPVtdKTtmb3IodmFyIGQ9LTEsZz1yLmxlbmd0aDsrK2Q8ZzspKGE9cltkXSkmJmtzKGEsZCxzLG8saSksZS5wdXNoKGEpfXJldHVybiBncyhsLHMsbyl9LHlzLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLG49W107ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWN0KHQpKTtmb3IodmFyIGE9MCxpPXRoaXMubGVuZ3RoO2E8aTthKyspe24ucHVzaChlPVtdKTtmb3IodmFyIG8scz0wLGw9KG89dGhpc1thXSkubGVuZ3RoO3M8bDtzKyspKHI9b1tzXSkmJnQuY2FsbChyLHIuX19kYXRhX18scyxhKSYmZS5wdXNoKHIpfXJldHVybiBncyhuLHRoaXMubmFtZXNwYWNlLHRoaXMuaWQpfSx5cy50d2Vlbj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuaWQsbj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXMubm9kZSgpW25dW3JdLnR3ZWVuLmdldCh0KTp1dCh0aGlzLG51bGw9PWU/ZnVuY3Rpb24oZSl7ZVtuXVtyXS50d2Vlbi5yZW1vdmUodCl9OmZ1bmN0aW9uKGEpe2Fbbl1bcl0udHdlZW4uc2V0KHQsZSl9KX0seXMuYXR0cj1mdW5jdGlvbihlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHIgaW4gZSl0aGlzLmF0dHIocixlW3JdKTtyZXR1cm4gdGhpc312YXIgbj0idHJhbnNmb3JtIj09ZT9taTpLYSxhPXQubnMucXVhbGlmeShlKTtmdW5jdGlvbiBpKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYSl9ZnVuY3Rpb24gbygpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsKX1yZXR1cm4gYnModGhpcywiYXR0ci4iK2UscixhLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P286KHQrPSIiLGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmdldEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCk7cmV0dXJuIHIhPT10JiYoZT1uKHIsdCksZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhhLnNwYWNlLGEubG9jYWwsZSh0KSl9KX0pfTpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9pOih0Kz0iIixmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5nZXRBdHRyaWJ1dGUoYSk7cmV0dXJuIHIhPT10JiYoZT1uKHIsdCksZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGUoYSxlKHQpKX0pfSl9KX0seXMuYXR0clR3ZWVuPWZ1bmN0aW9uKGUscil7dmFyIG49dC5ucy5xdWFsaWZ5KGUpO3JldHVybiB0aGlzLnR3ZWVuKCJhdHRyLiIrZSxuLmxvY2FsP2Z1bmN0aW9uKHQsZSl7dmFyIGE9ci5jYWxsKHRoaXMsdCxlLHRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKSk7cmV0dXJuIGEmJmZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLGEodCkpfX06ZnVuY3Rpb24odCxlKXt2YXIgYT1yLmNhbGwodGhpcyx0LGUsdGhpcy5nZXRBdHRyaWJ1dGUobikpO3JldHVybiBhJiZmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShuLGEodCkpfX0pfSx5cy5zdHlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7Zm9yKHIgaW4gbjwyJiYoZT0iIiksdCl0aGlzLnN0eWxlKHIsdFtyXSxlKTtyZXR1cm4gdGhpc31yPSIifWZ1bmN0aW9uIGEoKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfXJldHVybiBicyh0aGlzLCJzdHlsZS4iK3QsZSxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9hOihlKz0iIixmdW5jdGlvbigpe3ZhciBuLGE9byh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KTtyZXR1cm4gYSE9PWUmJihuPUthKGEsZSksZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4oZSkscil9KX0pfSl9LHlzLnN0eWxlVHdlZW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDMmJihyPSIiKSx0aGlzLnR3ZWVuKCJzdHlsZS4iK3QsZnVuY3Rpb24obixhKXt2YXIgaT1lLmNhbGwodGhpcyxuLGEsbyh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KSk7cmV0dXJuIGkmJmZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxpKGUpLHIpfX0pfSx5cy50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBicyh0aGlzLCJ0ZXh0Iix0LF9zKX0seXMucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIHRoaXMuZWFjaCgiZW5kLnRyYW5zaXRpb24iLGZ1bmN0aW9uKCl7dmFyIGU7dGhpc1t0XS5jb3VudDwyJiYoZT10aGlzLnBhcmVudE5vZGUpJiZlLnJlbW92ZUNoaWxkKHRoaXMpfSl9LHlzLmVhc2U9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5pZCxuPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbbl1bcl0uZWFzZTooImZ1bmN0aW9uIiE9dHlwZW9mIGUmJihlPXQuZWFzZS5hcHBseSh0LGFyZ3VtZW50cykpLHV0KHRoaXMsZnVuY3Rpb24odCl7dFtuXVtyXS5lYXNlPWV9KSl9LHlzLmRlbGF5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWQscj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW3JdW2VdLmRlbGF5OnV0KHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24obixhLGkpe25bcl1bZV0uZGVsYXk9K3QuY2FsbChuLG4uX19kYXRhX18sYSxpKX06KHQ9K3QsZnVuY3Rpb24obil7bltyXVtlXS5kZWxheT10fSkpfSx5cy5kdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kdXJhdGlvbjp1dCh0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKG4sYSxpKXtuW3JdW2VdLmR1cmF0aW9uPU1hdGgubWF4KDEsdC5jYWxsKG4sbi5fX2RhdGFfXyxhLGkpKX06KHQ9TWF0aC5tYXgoMSx0KSxmdW5jdGlvbihuKXtuW3JdW2VdLmR1cmF0aW9uPXR9KSl9LHlzLmVhY2g9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmlkLGE9dGhpcy5uYW1lc3BhY2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT1tcyxvPXZzO3RyeXt2cz1uLHV0KHRoaXMsZnVuY3Rpb24odCxyLGkpe21zPXRbYV1bbl0sZS5jYWxsKHQsdC5fX2RhdGFfXyxyLGkpfSl9ZmluYWxseXttcz1pLHZzPW99fWVsc2UgdXQodGhpcyxmdW5jdGlvbihpKXt2YXIgbz1pW2FdW25dOyhvLmV2ZW50fHwoby5ldmVudD10LmRpc3BhdGNoKCJzdGFydCIsImVuZCIsImludGVycnVwdCIpKSkub24oZSxyKX0pO3JldHVybiB0aGlzfSx5cy50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscixuPXRoaXMuaWQsYT0rK3hzLGk9dGhpcy5uYW1lc3BhY2Usbz1bXSxzPTAsbD10aGlzLmxlbmd0aDtzPGw7cysrKXtvLnB1c2godD1bXSk7Zm9yKHZhciBjLHU9MCxoPShjPXRoaXNbc10pLmxlbmd0aDt1PGg7dSsrKShlPWNbdV0pJiZrcyhlLHUsaSxhLHt0aW1lOihyPWVbaV1bbl0pLnRpbWUsZWFzZTpyLmVhc2UsZGVsYXk6ci5kZWxheStyLmR1cmF0aW9uLGR1cmF0aW9uOnIuZHVyYXRpb259KSx0LnB1c2goZSl9cmV0dXJuIGdzKG8saSxhKX0sdC5zdmcuYXhpcz1mdW5jdGlvbigpe3ZhciBlLHI9dC5zY2FsZS5saW5lYXIoKSxhPVRzLGk9NixvPTYscz0zLGw9WzEwXSxjPW51bGw7ZnVuY3Rpb24gdShuKXtuLmVhY2goZnVuY3Rpb24oKXt2YXIgbix1PXQuc2VsZWN0KHRoaXMpLGg9dGhpcy5fX2NoYXJ0X198fHIsZj10aGlzLl9fY2hhcnRfXz1yLmNvcHkoKSxwPW51bGw9PWM/Zi50aWNrcz9mLnRpY2tzLmFwcGx5KGYsbCk6Zi5kb21haW4oKTpjLGQ9bnVsbD09ZT9mLnRpY2tGb3JtYXQ/Zi50aWNrRm9ybWF0LmFwcGx5KGYsbCk6UDplLGc9dS5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShwLGYpLHY9Zy5lbnRlcigpLmluc2VydCgiZyIsIi5kb21haW4iKS5hdHRyKCJjbGFzcyIsInRpY2siKS5zdHlsZSgib3BhY2l0eSIsa3QpLG09dC50cmFuc2l0aW9uKGcuZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsa3QpLnJlbW92ZSgpLHk9dC50cmFuc2l0aW9uKGcub3JkZXIoKSkuc3R5bGUoIm9wYWNpdHkiLDEpLHg9TWF0aC5tYXgoaSwwKStzLGI9Zm8oZiksXz11LnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoWzBdKSx3PShfLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJkb21haW4iKSx0LnRyYW5zaXRpb24oXykpO3YuYXBwZW5kKCJsaW5lIiksdi5hcHBlbmQoInRleHQiKTt2YXIgayxULE0sQSxTPXYuc2VsZWN0KCJsaW5lIiksRT15LnNlbGVjdCgibGluZSIpLEw9Zy5zZWxlY3QoInRleHQiKS50ZXh0KGQpLEM9di5zZWxlY3QoInRleHQiKSxPPXkuc2VsZWN0KCJ0ZXh0Iiksej0idG9wIj09PWF8fCJsZWZ0Ij09PWE/LTE6MTtpZigiYm90dG9tIj09PWF8fCJ0b3AiPT09YT8obj1BcyxrPSJ4IixNPSJ5IixUPSJ4MiIsQT0ieTIiLEwuYXR0cigiZHkiLHo8MD8iMGVtIjoiLjcxZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSx3LmF0dHIoImQiLCJNIitiWzBdKyIsIit6Km8rIlYwSCIrYlsxXSsiViIreipvKSk6KG49U3Msaz0ieSIsTT0ieCIsVD0ieTIiLEE9IngyIixMLmF0dHIoImR5IiwiLjMyZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLHo8MD8iZW5kIjoic3RhcnQiKSx3LmF0dHIoImQiLCJNIit6Km8rIiwiK2JbMF0rIkgwViIrYlsxXSsiSCIreipvKSksUy5hdHRyKEEseippKSxDLmF0dHIoTSx6KngpLEUuYXR0cihULDApLmF0dHIoQSx6KmkpLE8uYXR0cihrLDApLmF0dHIoTSx6KngpLGYucmFuZ2VCYW5kKXt2YXIgST1mLEQ9SS5yYW5nZUJhbmQoKS8yO2g9Zj1mdW5jdGlvbih0KXtyZXR1cm4gSSh0KStEfX1lbHNlIGgucmFuZ2VCYW5kP2g9ZjptLmNhbGwobixmLGgpO3YuY2FsbChuLGgsZikseS5jYWxsKG4sZixmKX0pfXJldHVybiB1LnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsdSk6cn0sdS5vcmllbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCBpbiBNcz90KyIiOlRzLHUpOmF9LHUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1uKGFyZ3VtZW50cyksdSk6bH0sdS50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsdSk6Y30sdS50aWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsdSk6ZX0sdS50aWNrU2l6ZT1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO3JldHVybiBlPyhpPSt0LG89K2FyZ3VtZW50c1tlLTFdLHUpOml9LHUuaW5uZXJUaWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCx1KTppfSx1Lm91dGVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsdSk6b30sdS50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCx1KTpzfSx1LnRpY2tTdWJkaXZpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYmdX0sdX07dmFyIFRzPSJib3R0b20iLE1zPXt0b3A6MSxyaWdodDoxLGJvdHRvbToxLGxlZnQ6MX07ZnVuY3Rpb24gQXModCxlLHIpe3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3JldHVybiJ0cmFuc2xhdGUoIisoaXNGaW5pdGUobik/bjpyKHQpKSsiLDApIn0pfWZ1bmN0aW9uIFNzKHQsZSxyKXt0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7dmFyIG49ZSh0KTtyZXR1cm4idHJhbnNsYXRlKDAsIisoaXNGaW5pdGUobik/bjpyKHQpKSsiKSJ9KX10LnN2Zy5icnVzaD1mdW5jdGlvbigpe3ZhciBlLHIsbj1qKGYsImJydXNoc3RhcnQiLCJicnVzaCIsImJydXNoZW5kIiksYT1udWxsLGk9bnVsbCxzPVswLDBdLGw9WzAsMF0sYz0hMCx1PSEwLGg9THNbMF07ZnVuY3Rpb24gZihlKXtlLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10LnNlbGVjdCh0aGlzKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2giLHYpLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIix2KSxyPWUuc2VsZWN0QWxsKCIuYmFja2dyb3VuZCIpLmRhdGEoWzBdKTtyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5zdHlsZSgiY3Vyc29yIiwiY3Jvc3NoYWlyIiksZS5zZWxlY3RBbGwoIi5leHRlbnQiKS5kYXRhKFswXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImV4dGVudCIpLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIik7dmFyIG49ZS5zZWxlY3RBbGwoIi5yZXNpemUiKS5kYXRhKGgsUCk7bi5leGl0KCkucmVtb3ZlKCksbi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4icmVzaXplICIrdH0pLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKHQpe3JldHVybiBFc1t0XX0pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybi9bZXddJC8udGVzdCh0KT8tMzpudWxsfSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuL15bbnNdLy50ZXN0KHQpPy0zOm51bGx9KS5hdHRyKCJ3aWR0aCIsNikuYXR0cigiaGVpZ2h0Iiw2KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLG4uc3R5bGUoImRpc3BsYXkiLGYuZW1wdHkoKT8ibm9uZSI6bnVsbCk7dmFyIG8scz10LnRyYW5zaXRpb24oZSksbD10LnRyYW5zaXRpb24ocik7YSYmKG89Zm8oYSksbC5hdHRyKCJ4IixvWzBdKS5hdHRyKCJ3aWR0aCIsb1sxXS1vWzBdKSxkKHMpKSxpJiYobz1mbyhpKSxsLmF0dHIoInkiLG9bMF0pLmF0dHIoImhlaWdodCIsb1sxXS1vWzBdKSxnKHMpKSxwKHMpfSl9ZnVuY3Rpb24gcCh0KXt0LnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3NbKy9lJC8udGVzdCh0KV0rIiwiK2xbKy9ecy8udGVzdCh0KV0rIikifSl9ZnVuY3Rpb24gZCh0KXt0LnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoIngiLHNbMF0pLHQuc2VsZWN0QWxsKCIuZXh0ZW50LC5uPnJlY3QsLnM+cmVjdCIpLmF0dHIoIndpZHRoIixzWzFdLXNbMF0pfWZ1bmN0aW9uIGcodCl7dC5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ5IixsWzBdKSx0LnNlbGVjdEFsbCgiLmV4dGVudCwuZT5yZWN0LC53PnJlY3QiKS5hdHRyKCJoZWlnaHQiLGxbMV0tbFswXSl9ZnVuY3Rpb24gdigpe3ZhciBoLHYsbT10aGlzLHk9dC5zZWxlY3QodC5ldmVudC50YXJnZXQpLHg9bi5vZihtLGFyZ3VtZW50cyksYj10LnNlbGVjdChtKSxfPXkuZGF0dW0oKSx3PSEvXihufHMpJC8udGVzdChfKSYmYSxrPSEvXihlfHcpJC8udGVzdChfKSYmaSxUPXkuY2xhc3NlZCgiZXh0ZW50IiksTT14dChtKSxBPXQubW91c2UobSksUz10LnNlbGVjdChvKG0pKS5vbigia2V5ZG93bi5icnVzaCIsZnVuY3Rpb24oKXszMj09dC5ldmVudC5rZXlDb2RlJiYoVHx8KGg9bnVsbCxBWzBdLT1zWzFdLEFbMV0tPWxbMV0sVD0yKSxCKCkpfSkub24oImtleXVwLmJydXNoIixmdW5jdGlvbigpezMyPT10LmV2ZW50LmtleUNvZGUmJjI9PVQmJihBWzBdKz1zWzFdLEFbMV0rPWxbMV0sVD0wLEIoKSl9KTtpZih0LmV2ZW50LmNoYW5nZWRUb3VjaGVzP1Mub24oInRvdWNobW92ZS5icnVzaCIsQykub24oInRvdWNoZW5kLmJydXNoIixPKTpTLm9uKCJtb3VzZW1vdmUuYnJ1c2giLEMpLm9uKCJtb3VzZXVwLmJydXNoIixPKSxiLmludGVycnVwdCgpLnNlbGVjdEFsbCgiKiIpLmludGVycnVwdCgpLFQpQVswXT1zWzBdLUFbMF0sQVsxXT1sWzBdLUFbMV07ZWxzZSBpZihfKXt2YXIgRT0rL3ckLy50ZXN0KF8pLEw9Ky9ebi8udGVzdChfKTt2PVtzWzEtRV0tQVswXSxsWzEtTF0tQVsxXV0sQVswXT1zW0VdLEFbMV09bFtMXX1lbHNlIHQuZXZlbnQuYWx0S2V5JiYoaD1BLnNsaWNlKCkpO2Z1bmN0aW9uIEMoKXt2YXIgZT10Lm1vdXNlKG0pLHI9ITE7diYmKGVbMF0rPXZbMF0sZVsxXSs9dlsxXSksVHx8KHQuZXZlbnQuYWx0S2V5PyhofHwoaD1bKHNbMF0rc1sxXSkvMiwobFswXStsWzFdKS8yXSksQVswXT1zWysoZVswXTxoWzBdKV0sQVsxXT1sWysoZVsxXTxoWzFdKV0pOmg9bnVsbCksdyYmUChlLGEsMCkmJihkKGIpLHI9ITApLGsmJlAoZSxpLDEpJiYoZyhiKSxyPSEwKSxyJiYocChiKSx4KHt0eXBlOiJicnVzaCIsbW9kZTpUPyJtb3ZlIjoicmVzaXplIn0pKX1mdW5jdGlvbiBQKHQsbixhKXt2YXIgaSxvLGY9Zm8obikscD1mWzBdLGQ9ZlsxXSxnPUFbYV0sdj1hP2w6cyxtPXZbMV0tdlswXTtpZihUJiYocC09ZyxkLT1tK2cpLGk9KGE/dTpjKT9NYXRoLm1heChwLE1hdGgubWluKGQsdFthXSkpOnRbYV0sVD9vPShpKz1nKSttOihoJiYoZz1NYXRoLm1heChwLE1hdGgubWluKGQsMipoW2FdLWkpKSksZzxpPyhvPWksaT1nKTpvPWcpLHZbMF0hPWl8fHZbMV0hPW8pcmV0dXJuIGE/cj1udWxsOmU9bnVsbCx2WzBdPWksdlsxXT1vLCEwfWZ1bmN0aW9uIE8oKXtDKCksYi5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsZi5lbXB0eSgpPyJub25lIjpudWxsKSx0LnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLG51bGwpLFMub24oIm1vdXNlbW92ZS5icnVzaCIsbnVsbCkub24oIm1vdXNldXAuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaGVuZC5icnVzaCIsbnVsbCkub24oImtleWRvd24uYnJ1c2giLG51bGwpLm9uKCJrZXl1cC5icnVzaCIsbnVsbCksTSgpLHgoe3R5cGU6ImJydXNoZW5kIn0pfWIuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKSx0LnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLHkuc3R5bGUoImN1cnNvciIpKSx4KHt0eXBlOiJicnVzaHN0YXJ0In0pLEMoKX1yZXR1cm4gZi5ldmVudD1mdW5jdGlvbihhKXthLmVhY2goZnVuY3Rpb24oKXt2YXIgYT1uLm9mKHRoaXMsYXJndW1lbnRzKSxpPXt4OnMseTpsLGk6ZSxqOnJ9LG89dGhpcy5fX2NoYXJ0X198fGk7dGhpcy5fX2NoYXJ0X189aSx2cz90LnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7ZT1vLmkscj1vLmoscz1vLngsbD1vLnksYSh7dHlwZToiYnJ1c2hzdGFydCJ9KX0pLnR3ZWVuKCJicnVzaDpicnVzaCIsZnVuY3Rpb24oKXt2YXIgdD1RYShzLGkueCksbj1RYShsLGkueSk7cmV0dXJuIGU9cj1udWxsLGZ1bmN0aW9uKGUpe3M9aS54PXQoZSksbD1pLnk9bihlKSxhKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pfX0pLmVhY2goImVuZC5icnVzaCIsZnVuY3Rpb24oKXtlPWkuaSxyPWkuaixhKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLGEoe3R5cGU6ImJydXNoZW5kIn0pfSk6KGEoe3R5cGU6ImJydXNoc3RhcnQifSksYSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSxhKHt0eXBlOiJicnVzaGVuZCJ9KSl9KX0sZi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPUxzWyEoYT10KTw8MXwhaV0sZik6YX0sZi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPUxzWyFhPDwxfCEoaT10KV0sZik6aX0sZi5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYSYmaT8oYz0hIXRbMF0sdT0hIXRbMV0pOmE/Yz0hIXQ6aSYmKHU9ISF0KSxmKTphJiZpP1tjLHVdOmE/YzppP3U6bnVsbH0sZi5leHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG4sbyxjLHUsaDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYSYmKG49dFswXSxvPXRbMV0saSYmKG49blswXSxvPW9bMF0pLGU9W24sb10sYS5pbnZlcnQmJihuPWEobiksbz1hKG8pKSxvPG4mJihoPW4sbj1vLG89aCksbj09c1swXSYmbz09c1sxXXx8KHM9W24sb10pKSxpJiYoYz10WzBdLHU9dFsxXSxhJiYoYz1jWzFdLHU9dVsxXSkscj1bYyx1XSxpLmludmVydCYmKGM9aShjKSx1PWkodSkpLHU8YyYmKGg9YyxjPXUsdT1oKSxjPT1sWzBdJiZ1PT1sWzFdfHwobD1bYyx1XSkpLGYpOihhJiYoZT8obj1lWzBdLG89ZVsxXSk6KG49c1swXSxvPXNbMV0sYS5pbnZlcnQmJihuPWEuaW52ZXJ0KG4pLG89YS5pbnZlcnQobykpLG88biYmKGg9bixuPW8sbz1oKSkpLGkmJihyPyhjPXJbMF0sdT1yWzFdKTooYz1sWzBdLHU9bFsxXSxpLmludmVydCYmKGM9aS5pbnZlcnQoYyksdT1pLmludmVydCh1KSksdTxjJiYoaD1jLGM9dSx1PWgpKSksYSYmaT9bW24sY10sW28sdV1dOmE/W24sb106aSYmW2MsdV0pfSxmLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGYuZW1wdHkoKXx8KHM9WzAsMF0sbD1bMCwwXSxlPXI9bnVsbCksZn0sZi5lbXB0eT1mdW5jdGlvbigpe3JldHVybiEhYSYmc1swXT09c1sxXXx8ISFpJiZsWzBdPT1sWzFdfSx0LnJlYmluZChmLG4sIm9uIil9O3ZhciBFcz17bjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxMcz1bWyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXSxbImUiLCJ3Il0sWyJuIiwicyJdLFtdXSxDcz1JZS5mb3JtYXQ9Y3IudGltZUZvcm1hdCxQcz1Dcy51dGMsT3M9UHMoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO2Z1bmN0aW9uIHpzKHQpe3JldHVybiB0LnRvSVNPU3RyaW5nKCl9ZnVuY3Rpb24gSXMoZSxyLG4pe2Z1bmN0aW9uIGEodCl7cmV0dXJuIGUodCl9ZnVuY3Rpb24gaShlLG4pe3ZhciBhPShlWzFdLWVbMF0pL24saT10LmJpc2VjdChScyxhKTtyZXR1cm4gaT09UnMubGVuZ3RoP1tyLnllYXIsX28oZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQvMzE1MzZlNn0pLG4pWzJdXTppP3JbYS9Sc1tpLTFdPFJzW2ldL2E/aS0xOmldOltOcyxfbyhlLG4pWzJdXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIERzKGUuaW52ZXJ0KHQpKX0sYS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUuZG9tYWluKHQpLGEpOmUuZG9tYWluKCkubWFwKERzKX0sYS5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YS5kb21haW4oKSxuPWhvKHIpLG89bnVsbD09dD9pKG4sMTApOiJudW1iZXIiPT10eXBlb2YgdCYmaShuLHQpO2Z1bmN0aW9uIHMocil7cmV0dXJuIWlzTmFOKHIpJiYhdC5yYW5nZShyLERzKCtyKzEpLGUpLmxlbmd0aH1yZXR1cm4gbyYmKHQ9b1swXSxlPW9bMV0pLGEuZG9tYWluKGdvKHIsZT4xP3tmbG9vcjpmdW5jdGlvbihlKXtmb3IoO3MoZT10LmZsb29yKGUpKTspZT1EcyhlLTEpO3JldHVybiBlfSxjZWlsOmZ1bmN0aW9uKGUpe2Zvcig7cyhlPXQuY2VpbChlKSk7KWU9RHMoK2UrMSk7cmV0dXJuIGV9fTp0KSl9LGEudGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1obyhhLmRvbWFpbigpKSxuPW51bGw9PXQ/aShyLDEwKToibnVtYmVyIj09dHlwZW9mIHQ/aShyLHQpOiF0LnJhbmdlJiZbe3JhbmdlOnR9LGVdO3JldHVybiBuJiYodD1uWzBdLGU9blsxXSksdC5yYW5nZShyWzBdLERzKCtyWzFdKzEpLGU8MT8xOmUpfSxhLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbn0sYS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIElzKGUuY29weSgpLHIsbil9LHhvKGEsZSl9ZnVuY3Rpb24gRHModCl7cmV0dXJuIG5ldyBEYXRlKHQpfUNzLmlzbz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyYmK25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKT96czpPcyx6cy5wYXJzZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRGF0ZSh0KTtyZXR1cm4gaXNOYU4oZSk/bnVsbDplfSx6cy50b1N0cmluZz1Pcy50b1N0cmluZyxJZS5zZWNvbmQ9QmUoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEZSgxZTMqTWF0aC5mbG9vcih0LzFlMykpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSh0LmdldFRpbWUoKSsxZTMqTWF0aC5mbG9vcihlKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKX0pLEllLnNlY29uZHM9SWUuc2Vjb25kLnJhbmdlLEllLnNlY29uZHMudXRjPUllLnNlY29uZC51dGMucmFuZ2UsSWUubWludXRlPUJlKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGUoNmU0Kk1hdGguZmxvb3IodC82ZTQpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUodC5nZXRUaW1lKCkrNmU0Kk1hdGguZmxvb3IoZSkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9KSxJZS5taW51dGVzPUllLm1pbnV0ZS5yYW5nZSxJZS5taW51dGVzLnV0Yz1JZS5taW51dGUudXRjLnJhbmdlLEllLmhvdXI9QmUoZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpLzYwO3JldHVybiBuZXcgRGUoMzZlNSooTWF0aC5mbG9vcih0LzM2ZTUtZSkrZSkpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSh0LmdldFRpbWUoKSszNmU1Kk1hdGguZmxvb3IoZSkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSksSWUuaG91cnM9SWUuaG91ci5yYW5nZSxJZS5ob3Vycy51dGM9SWUuaG91ci51dGMucmFuZ2UsSWUubW9udGg9QmUoZnVuY3Rpb24odCl7cmV0dXJuKHQ9SWUuZGF5KHQpKS5zZXREYXRlKDEpLHR9LGZ1bmN0aW9uKHQsZSl7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSxJZS5tb250aHM9SWUubW9udGgucmFuZ2UsSWUubW9udGhzLnV0Yz1JZS5tb250aC51dGMucmFuZ2U7dmFyIFJzPVsxZTMsNWUzLDE1ZTMsM2U0LDZlNCwzZTUsOWU1LDE4ZTUsMzZlNSwxMDhlNSwyMTZlNSw0MzJlNSw4NjRlNSwxNzI4ZTUsNjA0OGU1LDI1OTJlNiw3Nzc2ZTYsMzE1MzZlNl0sRnM9W1tJZS5zZWNvbmQsMV0sW0llLnNlY29uZCw1XSxbSWUuc2Vjb25kLDE1XSxbSWUuc2Vjb25kLDMwXSxbSWUubWludXRlLDFdLFtJZS5taW51dGUsNV0sW0llLm1pbnV0ZSwxNV0sW0llLm1pbnV0ZSwzMF0sW0llLmhvdXIsMV0sW0llLmhvdXIsM10sW0llLmhvdXIsNl0sW0llLmhvdXIsMTJdLFtJZS5kYXksMV0sW0llLmRheSwyXSxbSWUud2VlaywxXSxbSWUubW9udGgsMV0sW0llLm1vbnRoLDNdLFtJZS55ZWFyLDFdXSxCcz1Dcy5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSYmMSE9dC5nZXREYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbih0KXtyZXR1cm4gMSE9dC5nZXREYXRlKCl9XSxbIiVCIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfV0sWyIlWSIsWHJdXSksTnM9e3JhbmdlOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5yYW5nZShNYXRoLmNlaWwoZS9uKSpuLCtyLG4pLm1hcChEcyl9LGZsb29yOlAsY2VpbDpQfTtGcy55ZWFyPUllLnllYXIsSWUuc2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gSXModC5zY2FsZS5saW5lYXIoKSxGcyxCcyl9O3ZhciBqcz1Gcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0udXRjLHRbMV1dfSksVnM9UHMubXVsdGkoW1siLiVMIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaWxsaXNlY29uZHMoKX1dLFsiOiVTIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9XSxbIiVJOiVNIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENIb3VycygpfV0sWyIlYSAlZCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCkmJjEhPXQuZ2V0VVRDRGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24odCl7cmV0dXJuIDEhPXQuZ2V0VVRDRGF0ZSgpfV0sWyIlQiIsZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTW9udGgoKX1dLFsiJVkiLFhyXV0pO2Z1bmN0aW9uIFVzKHQpe3JldHVybiBKU09OLnBhcnNlKHQucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBxcyh0KXt2YXIgZT1hLmNyZWF0ZVJhbmdlKCk7cmV0dXJuIGUuc2VsZWN0Tm9kZShhLmJvZHkpLGUuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHQucmVzcG9uc2VUZXh0KX1qcy55ZWFyPUllLnllYXIudXRjLEllLnNjYWxlLnV0Yz1mdW5jdGlvbigpe3JldHVybiBJcyh0LnNjYWxlLmxpbmVhcigpLGpzLFZzKX0sdC50ZXh0PW1lKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlVGV4dH0pLHQuanNvbj1mdW5jdGlvbih0LGUpe3JldHVybiB5ZSh0LCJhcHBsaWNhdGlvbi9qc29uIixVcyxlKX0sdC5odG1sPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHllKHQsInRleHQvaHRtbCIscXMsZSl9LHQueG1sPW1lKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlWE1MfSksIm9iamVjdCI9PXR5cGVvZiBlJiZlLmV4cG9ydHM/ZS5leHBvcnRzPXQ6dGhpcy5kMz10fSgpfSx7fV0sMTY2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylpZih2b2lkIDAhPT1hcmd1bWVudHNbdF0pcmV0dXJuIGFyZ3VtZW50c1t0XX19LHt9XSwxNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiKSxhPXQoInVuaXEiKTtmdW5jdGlvbiBpKHQsZSl7dGhpcy5wb2ludD10LHRoaXMuaW5kZXg9ZX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPXQucG9pbnQsbj1lLnBvaW50LGE9ci5sZW5ndGgsaT0wO2k8YTsrK2kpe3ZhciBvPW5baV0tcltpXTtpZihvKXJldHVybiBvfXJldHVybiAwfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybltdO3ZhciBzPXRbMF0ubGVuZ3RoO2lmKHM8MSlyZXR1cm5bXTtpZigxPT09cylyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKDE9PT10KXJldHVybiByP1tbLTEsMF1dOltdO3ZhciBuPWUubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sZV19KTtuLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSk7Zm9yKHZhciBhPW5ldyBBcnJheSh0LTEpLGk9MTtpPHQ7KytpKXt2YXIgbz1uW2ktMV0scz1uW2ldO2FbaS0xXT1bb1sxXSxzWzFdXX1yJiZhLnB1c2goWy0xLGFbMF1bMV1dLFthW3QtMV1bMV0sLTFdKTtyZXR1cm4gYX0ocix0LGUpO2Zvcih2YXIgbD1uZXcgQXJyYXkociksYz0xLHU9MDt1PHI7Kyt1KXtmb3IodmFyIGg9dFt1XSxmPW5ldyBBcnJheShzKzEpLHA9MCxkPTA7ZDxzOysrZCl7dmFyIGc9aFtkXTtmW2RdPWcscCs9ZypnfWZbc109cCxsW3VdPW5ldyBpKGYsdSksYz1NYXRoLm1heChwLGMpfWEobCxvKSxyPWwubGVuZ3RoO2Zvcih2YXIgdj1uZXcgQXJyYXkocitzKzEpLG09bmV3IEFycmF5KHIrcysxKSx5PShzKzEpKihzKzEpKmMseD1uZXcgQXJyYXkocysxKSx1PTA7dTw9czsrK3UpeFt1XT0wO3hbc109eSx2WzBdPXguc2xpY2UoKSxtWzBdPS0xO2Zvcih2YXIgdT0wO3U8PXM7Kyt1KXt2YXIgZj14LnNsaWNlKCk7Zlt1XT0xLHZbdSsxXT1mLG1bdSsxXT0tMX1mb3IodmFyIHU9MDt1PHI7Kyt1KXt2YXIgYj1sW3VdO3ZbdStzKzFdPWIucG9pbnQsbVt1K3MrMV09Yi5pbmRleH12YXIgXz1uKHYsITEpO189ZT9fLmZpbHRlcihmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjw9czsrK3Ipe3ZhciBuPW1bdFtyXV07aWYobjwwJiYrK2U+PTIpcmV0dXJuITE7dFtyXT1ufXJldHVybiEwfSk6Xy5maWx0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTw9czsrK2Upe3ZhciByPW1bdFtlXV07aWYocjwwKXJldHVybiExO3RbZV09cn1yZXR1cm4hMH0pO2lmKDEmcylmb3IodmFyIHU9MDt1PF8ubGVuZ3RoOysrdSl7dmFyIGI9X1t1XSxmPWJbMF07YlswXT1iWzFdLGJbMV09Zn1yZXR1cm4gX319LHsiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiOjQxNSx1bmlxOjU0Nn1dLDE2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9aTt2YXIgbj0oaS5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpLmdldENvbnRleHQoIjJkIiksYT1vKFszMiwxMjZdKTtmdW5jdGlvbiBpKHQsZSl7QXJyYXkuaXNBcnJheSh0KSYmKHQ9dC5qb2luKCIsICIpKTt2YXIgcixpPXt9LHM9MTYsbD0uMDU7ZSYmKDI9PT1lLmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiBlWzBdP3I9byhlKTpBcnJheS5pc0FycmF5KGUpP3I9ZTooZS5vP3I9byhlLm8pOmUucGFpcnMmJihyPWUucGFpcnMpLGUuZm9udFNpemUmJihzPWUuZm9udFNpemUpLG51bGwhPWUudGhyZXNob2xkJiYobD1lLnRocmVzaG9sZCkpKSxyfHwocj1hKSxuLmZvbnQ9cysicHggIit0O2Zvcih2YXIgYz0wO2M8ci5sZW5ndGg7YysrKXt2YXIgdT1yW2NdLGg9bi5tZWFzdXJlVGV4dCh1WzBdKS53aWR0aCtuLm1lYXN1cmVUZXh0KHVbMV0pLndpZHRoLGY9bi5tZWFzdXJlVGV4dCh1KS53aWR0aDtpZihNYXRoLmFicyhoLWYpPnMqbCl7dmFyIHA9KGYtaCkvcztpW3VdPTFlMypwfX1yZXR1cm4gaX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1bXSxyPXRbMF07cjw9dFsxXTtyKyspZm9yKHZhciBuPVN0cmluZy5mcm9tQ2hhckNvZGUociksYT10WzBdO2E8dFsxXTthKyspe3ZhciBpPW4rU3RyaW5nLmZyb21DaGFyQ29kZShhKTtlLnB1c2goaSl9cmV0dXJuIGV9aS5jcmVhdGVQYWlycz1vLGkuYXNjaWk9YX0se31dLDE2OTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXt2YXIgcj0hMTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEZsb2F0NjRBcnJheSl7dmFyIG49bmV3IEZsb2F0NjRBcnJheSgxKSxhPW5ldyBVaW50MzJBcnJheShuLmJ1ZmZlcik7aWYoblswXT0xLHI9ITAsMTA3MjY5MzI0OD09PWFbMV0pe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LFthWzBdLGFbMV1dfSxlLmV4cG9ydHMucGFjaz1mdW5jdGlvbih0LGUpe3JldHVybiBhWzBdPXQsYVsxXT1lLG5bMF19LGUuZXhwb3J0cy5sbz1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LGFbMF19LGUuZXhwb3J0cy5oaT1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LGFbMV19fWVsc2UgaWYoMTA3MjY5MzI0OD09PWFbMF0pe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LFthWzFdLGFbMF1dfSxlLmV4cG9ydHMucGFjaz1mdW5jdGlvbih0LGUpe3JldHVybiBhWzFdPXQsYVswXT1lLG5bMF19LGUuZXhwb3J0cy5sbz1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LGFbMV19LGUuZXhwb3J0cy5oaT1mdW5jdGlvbih0KXtyZXR1cm4gblswXT10LGFbMF19fWVsc2Ugcj0hMX1pZighcil7dmFyIGk9bmV3IHQoOCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpLndyaXRlRG91YmxlTEUodCwwLCEwKSxbaS5yZWFkVUludDMyTEUoMCwhMCksaS5yZWFkVUludDMyTEUoNCwhMCldfSxlLmV4cG9ydHMucGFjaz1mdW5jdGlvbih0LGUpe3JldHVybiBpLndyaXRlVUludDMyTEUodCwwLCEwKSxpLndyaXRlVUludDMyTEUoZSw0LCEwKSxpLnJlYWREb3VibGVMRSgwLCEwKX0sZS5leHBvcnRzLmxvPWZ1bmN0aW9uKHQpe3JldHVybiBpLndyaXRlRG91YmxlTEUodCwwLCEwKSxpLnJlYWRVSW50MzJMRSgwLCEwKX0sZS5leHBvcnRzLmhpPWZ1bmN0aW9uKHQpe3JldHVybiBpLndyaXRlRG91YmxlTEUodCwwLCEwKSxpLnJlYWRVSW50MzJMRSg0LCEwKX19ZS5leHBvcnRzLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGUuZXhwb3J0cy5oaSh0KT4+PjMxfSxlLmV4cG9ydHMuZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuKGUuZXhwb3J0cy5oaSh0KTw8MT4+PjIxKS0xMDIzfSxlLmV4cG9ydHMuZnJhY3Rpb249ZnVuY3Rpb24odCl7dmFyIHI9ZS5leHBvcnRzLmxvKHQpLG49ZS5leHBvcnRzLmhpKHQpLGE9MTA0ODU3NSZuO3JldHVybiAyMTQ2NDM1MDcyJm4mJihhKz0xPDwyMCksW3IsYV19LGUuZXhwb3J0cy5kZW5vcm1hbGl6ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuISgyMTQ2NDM1MDcyJmUuZXhwb3J0cy5oaSh0KSl9fSkuY2FsbCh0aGlzLHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHtidWZmZXI6MTA3fV0sMTcwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiYWJzLXN2Zy1wYXRoIiksYT10KCJub3JtYWxpemUtc3ZnLXBhdGgiKSxpPXtNOiJtb3ZlVG8iLEM6ImJlemllckN1cnZlVG8ifTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LmJlZ2luUGF0aCgpLGEobihlKSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLG49ZS5zbGljZSgxKTt0W2lbcl1dLmFwcGx5KHQsbil9KSx0LmNsb3NlUGF0aCgpfX0seyJhYnMtc3ZnLXBhdGgiOjYzLCJub3JtYWxpemUtc3ZnLXBhdGgiOjQ1NH1dLDE3MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJpbnQ4IjpyZXR1cm4gSW50OEFycmF5O2Nhc2UiaW50MTYiOnJldHVybiBJbnQxNkFycmF5O2Nhc2UiaW50MzIiOnJldHVybiBJbnQzMkFycmF5O2Nhc2UidWludDgiOnJldHVybiBVaW50OEFycmF5O2Nhc2UidWludDE2IjpyZXR1cm4gVWludDE2QXJyYXk7Y2FzZSJ1aW50MzIiOnJldHVybiBVaW50MzJBcnJheTtjYXNlImZsb2F0MzIiOnJldHVybiBGbG9hdDMyQXJyYXk7Y2FzZSJmbG9hdDY0IjpyZXR1cm4gRmxvYXQ2NEFycmF5O2Nhc2UiYXJyYXkiOnJldHVybiBBcnJheTtjYXNlInVpbnQ4X2NsYW1wZWQiOnJldHVybiBVaW50OENsYW1wZWRBcnJheX19fSx7fV0sMTcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3N3aXRjaCgidW5kZWZpbmVkIj09dHlwZW9mIGUmJihlPTApLHR5cGVvZiB0KXtjYXNlIm51bWJlciI6aWYodD4wKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByLG47Zm9yKHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn0oMHx0LGUpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZigibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXJldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgYT0wfGVbbl07aWYoYTw9MClyZXR1cm5bXTt2YXIgaSxvPW5ldyBBcnJheShhKTtpZihuPT09ZS5sZW5ndGgtMSlmb3IoaT0wO2k8YTsrK2kpb1tpXT1yO2Vsc2UgZm9yKGk9MDtpPGE7KytpKW9baV09dChlLHIsbisxKTtyZXR1cm4gb30odCxlLDApfXJldHVybltdfX0se31dLDE3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyPXJ8fDI7dmFyIG4scyxsLGMsdSxwLGQsdj1lJiZlLmxlbmd0aCxtPXY/ZVswXSpyOnQubGVuZ3RoLHk9YSh0LDAsbSxyLCEwKSx4PVtdO2lmKCF5fHx5Lm5leHQ9PT15LnByZXYpcmV0dXJuIHg7aWYodiYmKHk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIG8scyxsLGMsdSxwPVtdO2ZvcihvPTAscz1lLmxlbmd0aDtvPHM7bysrKWw9ZVtvXSpuLGM9bzxzLTE/ZVtvKzFdKm46dC5sZW5ndGgsKHU9YSh0LGwsYyxuLCExKSk9PT11Lm5leHQmJih1LnN0ZWluZXI9ITApLHAucHVzaChnKHUpKTtmb3IocC5zb3J0KGgpLG89MDtvPHAubGVuZ3RoO28rKylmKHBbb10scikscj1pKHIsci5uZXh0KTtyZXR1cm4gcn0odCxlLHkscikpLHQubGVuZ3RoPjgwKnIpe249bD10WzBdLHM9Yz10WzFdO2Zvcih2YXIgYj1yO2I8bTtiKz1yKSh1PXRbYl0pPG4mJihuPXUpLChwPXRbYisxXSk8cyYmKHM9cCksdT5sJiYobD11KSxwPmMmJihjPXApO2Q9MCE9PShkPU1hdGgubWF4KGwtbixjLXMpKT8xL2Q6MH1yZXR1cm4gbyh5LHgscixuLHMsZCkseH1mdW5jdGlvbiBhKHQsZSxyLG4sYSl7dmFyIGksbztpZihhPT09RSh0LGUscixuKT4wKWZvcihpPWU7aTxyO2krPW4pbz1NKGksdFtpXSx0W2krMV0sbyk7ZWxzZSBmb3IoaT1yLW47aT49ZTtpLT1uKW89TShpLHRbaV0sdFtpKzFdLG8pO3JldHVybiBvJiZ4KG8sby5uZXh0KSYmKEEobyksbz1vLm5leHQpLG99ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO3ZhciByLG49dDtkb3tpZihyPSExLG4uc3RlaW5lcnx8IXgobixuLm5leHQpJiYwIT09eShuLnByZXYsbixuLm5leHQpKW49bi5uZXh0O2Vsc2V7aWYoQShuKSwobj1lPW4ucHJldik9PT1uLm5leHQpYnJlYWs7cj0hMH19d2hpbGUocnx8biE9PWUpO3JldHVybiBlfWZ1bmN0aW9uIG8odCxlLHIsbixhLGgsZil7aWYodCl7IWYmJmgmJmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXQ7ZG97bnVsbD09PWEueiYmKGEuej1kKGEueCxhLnksZSxyLG4pKSxhLnByZXZaPWEucHJldixhLm5leHRaPWEubmV4dCxhPWEubmV4dH13aGlsZShhIT09dCk7YS5wcmV2Wi5uZXh0Wj1udWxsLGEucHJldlo9bnVsbCxmdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxpLG8scyxsLGM9MTtkb3tmb3Iocj10LHQ9bnVsbCxpPW51bGwsbz0wO3I7KXtmb3IobysrLG49cixzPTAsZT0wO2U8YyYmKHMrKyxuPW4ubmV4dFopO2UrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspMCE9PXMmJigwPT09bHx8IW58fHIuejw9bi56KT8oYT1yLHI9ci5uZXh0WixzLS0pOihhPW4sbj1uLm5leHRaLGwtLSksaT9pLm5leHRaPWE6dD1hLGEucHJldlo9aSxpPWE7cj1ufWkubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSl9KGEpfSh0LG4sYSxoKTtmb3IodmFyIHAsZyx2PXQ7dC5wcmV2IT09dC5uZXh0OylpZihwPXQucHJldixnPXQubmV4dCxoP2wodCxuLGEsaCk6cyh0KSllLnB1c2gocC5pL3IpLGUucHVzaCh0LmkvciksZS5wdXNoKGcuaS9yKSxBKHQpLHQ9Zy5uZXh0LHY9Zy5uZXh0O2Vsc2UgaWYoKHQ9Zyk9PT12KXtmPzE9PT1mP28odD1jKGkodCksZSxyKSxlLHIsbixhLGgsMik6Mj09PWYmJnUodCxlLHIsbixhLGgpOm8oaSh0KSxlLHIsbixhLGgsMSk7YnJlYWt9fX1mdW5jdGlvbiBzKHQpe3ZhciBlPXQucHJldixyPXQsbj10Lm5leHQ7aWYoeShlLHIsbik+PTApcmV0dXJuITE7Zm9yKHZhciBhPXQubmV4dC5uZXh0O2EhPT10LnByZXY7KXtpZih2KGUueCxlLnksci54LHIueSxuLngsbi55LGEueCxhLnkpJiZ5KGEucHJldixhLGEubmV4dCk+PTApcmV0dXJuITE7YT1hLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgYT10LnByZXYsaT10LG89dC5uZXh0O2lmKHkoYSxpLG8pPj0wKXJldHVybiExO2Zvcih2YXIgcz1hLng8aS54P2EueDxvLng/YS54Om8ueDppLng8by54P2kueDpvLngsbD1hLnk8aS55P2EueTxvLnk/YS55Om8ueTppLnk8by55P2kueTpvLnksYz1hLng+aS54P2EueD5vLng/YS54Om8ueDppLng+by54P2kueDpvLngsdT1hLnk+aS55P2EueT5vLnk/YS55Om8ueTppLnk+by55P2kueTpvLnksaD1kKHMsbCxlLHIsbiksZj1kKGMsdSxlLHIsbikscD10LnByZXZaLGc9dC5uZXh0WjtwJiZwLno+PWgmJmcmJmcuejw9Zjspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJnYoYS54LGEueSxpLngsaS55LG8ueCxvLnkscC54LHAueSkmJnkocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtpZihwPXAucHJldlosZyE9PXQucHJldiYmZyE9PXQubmV4dCYmdihhLngsYS55LGkueCxpLnksby54LG8ueSxnLngsZy55KSYmeShnLnByZXYsZyxnLm5leHQpPj0wKXJldHVybiExO2c9Zy5uZXh0Wn1mb3IoO3AmJnAuej49aDspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJnYoYS54LGEueSxpLngsaS55LG8ueCxvLnkscC54LHAueSkmJnkocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtwPXAucHJldlp9Zm9yKDtnJiZnLno8PWY7KXtpZihnIT09dC5wcmV2JiZnIT09dC5uZXh0JiZ2KGEueCxhLnksaS54LGkueSxvLngsby55LGcueCxnLnkpJiZ5KGcucHJldixnLGcubmV4dCk+PTApcmV0dXJuITE7Zz1nLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPXQ7ZG97dmFyIGE9bi5wcmV2LG89bi5uZXh0Lm5leHQ7IXgoYSxvKSYmYihhLG4sbi5uZXh0LG8pJiZrKGEsbykmJmsobyxhKSYmKGUucHVzaChhLmkvciksZS5wdXNoKG4uaS9yKSxlLnB1c2goby5pL3IpLEEobiksQShuLm5leHQpLG49dD1vKSxuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuIGkobil9ZnVuY3Rpb24gdSh0LGUscixuLGEscyl7dmFyIGw9dDtkb3tmb3IodmFyIGM9bC5uZXh0Lm5leHQ7YyE9PWwucHJldjspe2lmKGwuaSE9PWMuaSYmbShsLGMpKXt2YXIgdT1UKGwsYyk7cmV0dXJuIGw9aShsLGwubmV4dCksdT1pKHUsdS5uZXh0KSxvKGwsZSxyLG4sYSxzKSx2b2lkIG8odSxlLHIsbixhLHMpfWM9Yy5uZXh0fWw9bC5uZXh0fXdoaWxlKGwhPT10KX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gZih0LGUpe2lmKGU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUsYT10LngsaT10Lnksbz0tMS8wO2Rve2lmKGk8PW4ueSYmaT49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXt2YXIgcz1uLngrKGktbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZihzPD1hJiZzPm8pe2lmKG89cyxzPT09YSl7aWYoaT09PW4ueSlyZXR1cm4gbjtpZihpPT09bi5uZXh0LnkpcmV0dXJuIG4ubmV4dH1yPW4ueDxuLm5leHQueD9uOm4ubmV4dH19bj1uLm5leHR9d2hpbGUobiE9PWUpO2lmKCFyKXJldHVybiBudWxsO2lmKGE9PT1vKXJldHVybiByO3ZhciBsLGM9cix1PXIueCxoPXIueSxmPTEvMDtuPXI7ZG97YT49bi54JiZuLng+PXUmJmEhPT1uLngmJnYoaTxoP2E6byxpLHUsaCxpPGg/bzphLGksbi54LG4ueSkmJihsPU1hdGguYWJzKGktbi55KS8oYS1uLngpLGsobix0KSYmKGw8Znx8bD09PWYmJihuLng+ci54fHxuLng9PT1yLngmJnAocixuKSkpJiYocj1uLGY9bCkpLG49bi5uZXh0fXdoaWxlKG4hPT1jKTtyZXR1cm4gcn0odCxlKSl7dmFyIHI9VChlLHQpO2kocixyLm5leHQpfX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHkodC5wcmV2LHQsZS5wcmV2KTwwJiZ5KGUubmV4dCx0LHQubmV4dCk8MH1mdW5jdGlvbiBkKHQsZSxyLG4sYSl7cmV0dXJuKHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodD0zMjc2NyoodC1yKSphKXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSl8KGU9MTQzMTY1NTc2NSYoKGU9ODU4OTkzNDU5JigoZT0yNTI2NDUxMzUmKChlPTE2NzExOTM1JigoZT0zMjc2NyooZS1uKSphKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9ZnVuY3Rpb24gZyh0KXt2YXIgZT10LHI9dDtkb3soZS54PHIueHx8ZS54PT09ci54JiZlLnk8ci55KSYmKHI9ZSksZT1lLm5leHR9d2hpbGUoZSE9PXQpO3JldHVybiByfWZ1bmN0aW9uIHYodCxlLHIsbixhLGksbyxzKXtyZXR1cm4oYS1vKSooZS1zKS0odC1vKSooaS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihpLXMpLShhLW8pKihuLXMpPj0wfWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gdC5uZXh0LmkhPT1lLmkmJnQucHJldi5pIT09ZS5pJiYhZnVuY3Rpb24odCxlKXt2YXIgcj10O2Rve2lmKHIuaSE9PXQuaSYmci5uZXh0LmkhPT10LmkmJnIuaSE9PWUuaSYmci5uZXh0LmkhPT1lLmkmJmIocixyLm5leHQsdCxlKSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuITF9KHQsZSkmJihrKHQsZSkmJmsoZSx0KSYmZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ITEsYT0odC54K2UueCkvMixpPSh0LnkrZS55KS8yO2Rve3IueT5pIT1yLm5leHQueT5pJiZyLm5leHQueSE9PXIueSYmYTwoci5uZXh0Lngtci54KSooaS1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4gbn0odCxlKSYmKHkodC5wcmV2LHQsZS5wcmV2KXx8eSh0LGUucHJldixlKSl8fHgodCxlKSYmeSh0LnByZXYsdCx0Lm5leHQpPjAmJnkoZS5wcmV2LGUsZS5uZXh0KT4wKX1mdW5jdGlvbiB5KHQsZSxyKXtyZXR1cm4oZS55LXQueSkqKHIueC1lLngpLShlLngtdC54KSooci55LWUueSl9ZnVuY3Rpb24geCh0LGUpe3JldHVybiB0Lng9PT1lLngmJnQueT09PWUueX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBhPXcoeSh0LGUscikpLGk9dyh5KHQsZSxuKSksbz13KHkocixuLHQpKSxzPXcoeShyLG4sZSkpO3JldHVybiBhIT09aSYmbyE9PXN8fCghKDAhPT1hfHwhXyh0LHIsZSkpfHwoISgwIT09aXx8IV8odCxuLGUpKXx8KCEoMCE9PW98fCFfKHIsdCxuKSl8fCEoMCE9PXN8fCFfKHIsZSxuKSkpKSl9ZnVuY3Rpb24gXyh0LGUscil7cmV0dXJuIGUueDw9TWF0aC5tYXgodC54LHIueCkmJmUueD49TWF0aC5taW4odC54LHIueCkmJmUueTw9TWF0aC5tYXgodC55LHIueSkmJmUueT49TWF0aC5taW4odC55LHIueSl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24gayh0LGUpe3JldHVybiB5KHQucHJldix0LHQubmV4dCk8MD95KHQsZSx0Lm5leHQpPj0wJiZ5KHQsdC5wcmV2LGUpPj0wOnkodCxlLHQucHJldik8MHx8eSh0LHQubmV4dCxlKTwwfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj1uZXcgUyh0LmksdC54LHQueSksbj1uZXcgUyhlLmksZS54LGUueSksYT10Lm5leHQsaT1lLnByZXY7cmV0dXJuIHQubmV4dD1lLGUucHJldj10LHIubmV4dD1hLGEucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLGkubmV4dD1uLG4ucHJldj1pLG59ZnVuY3Rpb24gTSh0LGUscixuKXt2YXIgYT1uZXcgUyh0LGUscik7cmV0dXJuIG4/KGEubmV4dD1uLm5leHQsYS5wcmV2PW4sbi5uZXh0LnByZXY9YSxuLm5leHQ9YSk6KGEucHJldj1hLGEubmV4dD1hKSxhfWZ1bmN0aW9uIEEodCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiBTKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBFKHQsZSxyLG4pe2Zvcih2YXIgYT0wLGk9ZSxvPXItbjtpPHI7aSs9bilhKz0odFtvXS10W2ldKSoodFtpKzFdK3RbbysxXSksbz1pO3JldHVybiBhfWUuZXhwb3J0cz1uLGUuZXhwb3J0cy5kZWZhdWx0PW4sbi5kZXZpYXRpb249ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9ZSYmZS5sZW5ndGgsaT1hP2VbMF0qcjp0Lmxlbmd0aCxvPU1hdGguYWJzKEUodCwwLGkscikpO2lmKGEpZm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7cysrKXt2YXIgYz1lW3NdKnIsdT1zPGwtMT9lW3MrMV0qcjp0Lmxlbmd0aDtvLT1NYXRoLmFicyhFKHQsYyx1LHIpKX12YXIgaD0wO2ZvcihzPTA7czxuLmxlbmd0aDtzKz0zKXt2YXIgZj1uW3NdKnIscD1uW3MrMV0qcixkPW5bcysyXSpyO2grPU1hdGguYWJzKCh0W2ZdLXRbZF0pKih0W3ArMV0tdFtmKzFdKS0odFtmXS10W3BdKSoodFtkKzFdLXRbZisxXSkpfXJldHVybiAwPT09byYmMD09PWg/MDpNYXRoLmFicygoaC1vKS9vKX0sbi5mbGF0dGVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdWzBdLmxlbmd0aCxyPXt2ZXJ0aWNlczpbXSxob2xlczpbXSxkaW1lbnNpb25zOmV9LG49MCxhPTA7YTx0Lmxlbmd0aDthKyspe2Zvcih2YXIgaT0wO2k8dFthXS5sZW5ndGg7aSsrKWZvcih2YXIgbz0wO288ZTtvKyspci52ZXJ0aWNlcy5wdXNoKHRbYV1baV1bb10pO2E+MCYmKG4rPXRbYS0xXS5sZW5ndGgsci5ob2xlcy5wdXNoKG4pKX1yZXR1cm4gcn19LHt9XSwxNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoIm51bWJlciIhPXR5cGVvZiBlKXtlPTA7Zm9yKHZhciBhPTA7YTxyOysrYSl7dmFyIGk9dFthXTtlPU1hdGgubWF4KGUsaVswXSxpWzFdKX1lPTErKDB8ZSl9ZXw9MDtmb3IodmFyIG89bmV3IEFycmF5KGUpLGE9MDthPGU7KythKW9bYV09W107Zm9yKHZhciBhPTA7YTxyOysrYSl7dmFyIGk9dFthXTtvW2lbMF1dLnB1c2goaVsxXSksb1tpWzFdXS5wdXNoKGlbMF0pfWZvcih2YXIgcz0wO3M8ZTsrK3MpbihvW3NdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO3JldHVybiBvfTt2YXIgbj10KCJ1bmlxIil9LHt1bmlxOjU0Nn1dLDE3NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9W10sYT1bXSxpPVtdLG89e30scz1bXTtmdW5jdGlvbiBsKHQpe3ZhciByLG4sdT0hMTtmb3IoYS5wdXNoKHQpLGlbdF09ITAscj0wO3I8c1t0XS5sZW5ndGg7cisrKShuPXNbdF1bcl0pPT09ZT8oYyhlLGEpLHU9ITApOmlbbl18fCh1PWwobikpO2lmKHUpIWZ1bmN0aW9uIHQoZSl7aVtlXT0hMSxvLmhhc093blByb3BlcnR5KGUpJiZPYmplY3Qua2V5cyhvW2VdKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2RlbGV0ZSBvW2VdW3JdLGlbcl0mJnQocil9KX0odCk7ZWxzZSBmb3Iocj0wO3I8c1t0XS5sZW5ndGg7cisrKXtuPXNbdF1bcl07dmFyIGg9b1tuXTtofHwoaD17fSxvW25dPWgpLGhbbl09ITB9cmV0dXJuIGEucG9wKCksdX1mdW5jdGlvbiBjKHQsZSl7dmFyIG49W10uY29uY2F0KGUpLmNvbmNhdCh0KTtyLnB1c2gobil9ZnVuY3Rpb24gdShlKXshZnVuY3Rpb24oZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspcjxlJiYodFtyXT1bXSksdFtyXT10W3JdLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdD49ZX0pfShlKTtmb3IodmFyIHIsYT1uKHQpLmNvbXBvbmVudHMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSksaT0xLzAsbz0wO288YS5sZW5ndGg7bysrKWZvcih2YXIgcz0wO3M8YVtvXS5sZW5ndGg7cysrKWFbb11bc108aSYmKGk9YVtvXVtzXSxyPW8pO3ZhciBsPWFbcl07cmV0dXJuISFsJiZ7bGVhc3RWZXJ0ZXg6aSxhZGpMaXN0OnQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuLTE9PT1sLmluZGV4T2YoZSk/W106dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1sLmluZGV4T2YodCl9KX0pfX1lPTA7Zm9yKHZhciBoPXQubGVuZ3RoO2U8aDspe3ZhciBmPXUoZSk7aWYoZT1mLmxlYXN0VmVydGV4LHM9Zi5hZGpMaXN0KXtmb3IodmFyIHA9MDtwPHMubGVuZ3RoO3ArKylmb3IodmFyIGQ9MDtkPHNbcF0ubGVuZ3RoO2QrKyl7dmFyIGc9c1twXVtkXTtpWytnXT0hMSxvW2ddPXt9fWwoZSksZSs9MX1lbHNlIGU9aH1yZXR1cm4gcn19LHsic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiOjUyOX1dLDE3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzKS5sZW5ndGg9MCx0aGlzfX0seyIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiOjIwOH1dLDE3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/QXJyYXkuZnJvbTp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoxNzgsIi4vc2hpbSI6MTc5fV0sMTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUscj1BcnJheS5mcm9tO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByJiYoZT1yKHQ9WyJyYXoiLCJkd2EiXSksQm9vbGVhbihlJiZlIT09dCYmImR3YSI9PT1lWzFdKSl9fSx7fV0sMTc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNi1zeW1ib2wiKS5pdGVyYXRvcixhPXQoIi4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyIpLGk9dCgiLi4vLi4vZnVuY3Rpb24vaXMtZnVuY3Rpb24iKSxvPXQoIi4uLy4uL251bWJlci90by1wb3MtaW50ZWdlciIpLHM9dCgiLi4vLi4vb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIiksbD10KCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiKSxjPXQoIi4uLy4uL29iamVjdC9pcy12YWx1ZSIpLHU9dCgiLi4vLi4vc3RyaW5nL2lzLXN0cmluZyIpLGg9QXJyYXkuaXNBcnJheSxmPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLHA9e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9LGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGcsdixtLHkseCxiLF8sdyxrPWFyZ3VtZW50c1sxXSxUPWFyZ3VtZW50c1syXTtpZih0PU9iamVjdChsKHQpKSxjKGspJiZzKGspLHRoaXMmJnRoaXMhPT1BcnJheSYmaSh0aGlzKSllPXRoaXM7ZWxzZXtpZighayl7aWYoYSh0KSlyZXR1cm4gMSE9PShtPXQubGVuZ3RoKT9BcnJheS5hcHBseShudWxsLHQpOigodj1uZXcgQXJyYXkoMSkpWzBdPXRbMF0sdik7aWYoaCh0KSl7Zm9yKHY9bmV3IEFycmF5KG09dC5sZW5ndGgpLHI9MDtyPG07KytyKXZbcl09dFtyXTtyZXR1cm4gdn19dj1bXX1pZighaCh0KSlpZih2b2lkIDAhPT0oXz10W25dKSl7Zm9yKHg9cyhfKS5jYWxsKHQpLGUmJih2PW5ldyBlKSxiPXgubmV4dCgpLHI9MDshYi5kb25lOyl3PWs/Zi5jYWxsKGssVCxiLnZhbHVlLHIpOmIudmFsdWUsZT8ocC52YWx1ZT13LGQodixyLHApKTp2W3JdPXcsYj14Lm5leHQoKSwrK3I7bT1yfWVsc2UgaWYodSh0KSl7Zm9yKG09dC5sZW5ndGgsZSYmKHY9bmV3IGUpLHI9MCxnPTA7cjxtOysrcil3PXRbcl0scisxPG0mJih5PXcuY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZ5PD01NjMxOSYmKHcrPXRbKytyXSksdz1rP2YuY2FsbChrLFQsdyxnKTp3LGU/KHAudmFsdWU9dyxkKHYsZyxwKSk6dltnXT13LCsrZzttPWd9aWYodm9pZCAwPT09bSlmb3IobT1vKHQubGVuZ3RoKSxlJiYodj1uZXcgZShtKSkscj0wO3I8bTsrK3Ipdz1rP2YuY2FsbChrLFQsdFtyXSxyKTp0W3JdLGU/KHAudmFsdWU9dyxkKHYscixwKSk6dltyXT13O3JldHVybiBlJiYocC52YWx1ZT1udWxsLHYubGVuZ3RoPW0pLHZ9fSx7Ii4uLy4uL2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTgwLCIuLi8uLi9mdW5jdGlvbi9pcy1mdW5jdGlvbiI6MTgxLCIuLi8uLi9udW1iZXIvdG8tcG9zLWludGVnZXIiOjE4NywiLi4vLi4vb2JqZWN0L2lzLXZhbHVlIjoxOTcsIi4uLy4uL29iamVjdC92YWxpZC1jYWxsYWJsZSI6MjA2LCIuLi8uLi9vYmplY3QvdmFsaWQtdmFsdWUiOjIwOCwiLi4vLi4vc3RyaW5nL2lzLXN0cmluZyI6MjEyLCJlczYtc3ltYm9sIjoyMjJ9XSwxODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxhPW4uY2FsbChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHQpPT09YX19LHt9XSwxODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxhPW4uY2FsbCh0KCIuL25vb3AiKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZuLmNhbGwodCk9PT1hfX0seyIuL25vb3AiOjE4Mn1dLDE4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSx7fV0sMTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9NYXRoLnNpZ246dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTg0LCIuL3NoaW0iOjE4NX1dLDE4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLnNpZ247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJigxPT09dCgxMCkmJi0xPT09dCgtMjApKX19LHt9XSwxODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PU51bWJlcih0KSxpc05hTih0KXx8MD09PXQ/dDp0PjA/MTotMX19LHt9XSwxODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbWF0aC9zaWduIiksYT1NYXRoLmFicyxpPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0KT8wOjAhPT0odD1OdW1iZXIodCkpJiZpc0Zpbml0ZSh0KT9uKHQpKmkoYSh0KSk6dH19LHsiLi4vbWF0aC9zaWduIjoxODN9XSwxODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi90by1pbnRlZ2VyIiksYT1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEoMCxuKHQpKX19LHsiLi90by1pbnRlZ2VyIjoxODZ9XSwxODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi92YWxpZC1jYWxsYWJsZSIpLGE9dCgiLi92YWxpZC12YWx1ZSIpLGk9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsbz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxzPU9iamVjdC5rZXlzLGw9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixjKXt2YXIgdSxoPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXTtyZXR1cm4gcj1PYmplY3QoYShyKSksbihjKSx1PXMociksZiYmdS5zb3J0KCJmdW5jdGlvbiI9PXR5cGVvZiBmP2kuY2FsbChmLHIpOnZvaWQgMCksImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXVbdF0pLG8uY2FsbCh0LHUsZnVuY3Rpb24odCxuKXtyZXR1cm4gbC5jYWxsKHIsdCk/by5jYWxsKGMsaCxyW3RdLHQscixuKTplfSl9fX0seyIuL3ZhbGlkLWNhbGxhYmxlIjoyMDYsIi4vdmFsaWQtdmFsdWUiOjIwOH1dLDE4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/T2JqZWN0LmFzc2lnbjp0KCIuL3NoaW0iKX0seyIuL2lzLWltcGxlbWVudGVkIjoxOTAsIi4vc2hpbSI6MTkxfV0sMTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmFzc2lnbjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmKGUodD17Zm9vOiJyYXoifSx7YmFyOiJkd2EifSx7dHJ6eToidHJ6eSJ9KSx0LmZvbyt0LmJhcit0LnRyenk9PT0icmF6ZHdhdHJ6eSIpfX0se31dLDE5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9rZXlzIiksYT10KCIuLi92YWxpZC12YWx1ZSIpLGk9TWF0aC5tYXg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbyxzLGw9aShhcmd1bWVudHMubGVuZ3RoLDIpO2Zvcih0PU9iamVjdChhKHQpKSxzPWZ1bmN0aW9uKG4pe3RyeXt0W25dPWVbbl19Y2F0Y2godCl7cnx8KHI9dCl9fSxvPTE7bzxsOysrbyllPWFyZ3VtZW50c1tvXSxuKGUpLmZvckVhY2gocyk7aWYodm9pZCAwIT09cil0aHJvdyByO3JldHVybiB0fX0seyIuLi9rZXlzIjoxOTgsIi4uL3ZhbGlkLXZhbHVlIjoyMDh9XSwxOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYXJyYXkvZnJvbSIpLGE9dCgiLi9hc3NpZ24iKSxpPXQoIi4vdmFsaWQtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGkodCkpLHI9YXJndW1lbnRzWzFdLG89T2JqZWN0KGFyZ3VtZW50c1syXSk7aWYoZSE9PXQmJiFyKXJldHVybiBlO3ZhciBzPXt9O3JldHVybiByP24ocixmdW5jdGlvbihlKXsoby5lbnN1cmV8fGUgaW4gdCkmJihzW2VdPXRbZV0pfSk6YShzLHQpLHN9fSx7Ii4uL2FycmF5L2Zyb20iOjE3NywiLi9hc3NpZ24iOjE4OSwiLi92YWxpZC12YWx1ZSI6MjA4fV0sMTkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGEsaSxvLHM9T2JqZWN0LmNyZWF0ZTt0KCIuL3NldC1wcm90b3R5cGUtb2YvaXMtaW1wbGVtZW50ZWQiKSgpfHwobj10KCIuL3NldC1wcm90b3R5cGUtb2Yvc2hpbSIpKSxlLmV4cG9ydHM9bj8xIT09bi5sZXZlbD9zOihhPXt9LGk9e30sbz17Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QucHJvdG90eXBlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lbdF09Il9fcHJvdG9fXyIhPT10P286e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhLGkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJudWxsUG9seWZpbGwiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSx2YWx1ZTphfSksZnVuY3Rpb24odCxlKXtyZXR1cm4gcyhudWxsPT09dD9hOnQsZSl9KTpzfSx7Ii4vc2V0LXByb3RvdHlwZS1vZi9pcy1pbXBsZW1lbnRlZCI6MjA0LCIuL3NldC1wcm90b3R5cGUtb2Yvc2hpbSI6MjA1fV0sMTk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL19pdGVyYXRlIikoImZvckVhY2giKX0seyIuL19pdGVyYXRlIjoxODh9XSwxOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fX0se31dLDE5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXZhbHVlIiksYT17ZnVuY3Rpb246ITAsb2JqZWN0OiEwfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCkmJmFbdHlwZW9mIHRdfHwhMX19LHsiLi9pcy12YWx1ZSI6MTk3fV0sMTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Z1bmN0aW9uL25vb3AiKSgpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9PW4mJm51bGwhPT10fX0seyIuLi9mdW5jdGlvbi9ub29wIjoxODJ9XSwxOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP09iamVjdC5rZXlzOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjE5OSwiLi9zaGltIjoyMDB9XSwxOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3Qua2V5cygicHJpbWl0aXZlIiksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0se31dLDIwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9pcy12YWx1ZSIpLGE9T2JqZWN0LmtleXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKG4odCk/T2JqZWN0KHQpOnQpfX0seyIuLi9pcy12YWx1ZSI6MTk3fV0sMjAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdmFsaWQtY2FsbGFibGUiKSxhPXQoIi4vZm9yLWVhY2giKSxpPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXt9LG89YXJndW1lbnRzWzJdO3JldHVybiBuKGUpLGEodCxmdW5jdGlvbih0LG4sYSxzKXtyW25dPWkuY2FsbChlLG8sdCxuLGEscyl9KSxyfX0seyIuL2Zvci1lYWNoIjoxOTQsIi4vdmFsaWQtY2FsbGFibGUiOjIwNn1dLDIwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXZhbHVlIiksYT1BcnJheS5wcm90b3R5cGUuZm9yRWFjaCxpPU9iamVjdC5jcmVhdGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWkobnVsbCk7cmV0dXJuIGEuY2FsbChhcmd1bWVudHMsZnVuY3Rpb24odCl7bih0KSYmZnVuY3Rpb24odCxlKXt2YXIgcjtmb3IociBpbiB0KWVbcl09dFtyXX0oT2JqZWN0KHQpLGUpfSksZX19LHsiLi9pcy12YWx1ZSI6MTk3fV0sMjAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9PYmplY3Quc2V0UHJvdG90eXBlT2Y6dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MjA0LCIuL3NoaW0iOjIwNX1dLDIwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuY3JlYXRlLGE9T2JqZWN0LmdldFByb3RvdHlwZU9mLGk9e307ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mLGU9YXJndW1lbnRzWzBdfHxuO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZhKHQoZShudWxsKSxpKSk9PT1pfX0se31dLDIwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhLGksbyxzPXQoIi4uL2lzLW9iamVjdCIpLGw9dCgiLi4vdmFsaWQtdmFsdWUiKSxjPU9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZix1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxoPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9O249ZnVuY3Rpb24odCxlKXtpZihsKHQpLG51bGw9PT1lfHxzKGUpKXJldHVybiB0O3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3RvdHlwZSBtdXN0IGJlIG51bGwgb3IgYW4gb2JqZWN0Iil9LGUuZXhwb3J0cz0oYT1mdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPXt9LG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKTtpZihuKXt0cnl7KHQ9bi5zZXQpLmNhbGwoZSxyKX1jYXRjaCh0KXt9aWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cilyZXR1cm57c2V0OnQsbGV2ZWw6Mn19cmV0dXJuIGUuX19wcm90b19fPXIsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cj97bGV2ZWw6Mn06KChlPXt9KS5fX3Byb3RvX189cixPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yJiZ7bGV2ZWw6MX0pfSgpKT8oMj09PWEubGV2ZWw/YS5zZXQ/KG89YS5zZXQsaT1mdW5jdGlvbih0LGUpe3JldHVybiBvLmNhbGwobih0LGUpLGUpLHR9KTppPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKS5fX3Byb3RvX189ZSx0fTppPWZ1bmN0aW9uIHQoZSxyKXt2YXIgYTtyZXR1cm4gbihlLHIpLChhPWMuY2FsbCh0Lm51bGxQb2x5ZmlsbCxlKSkmJmRlbGV0ZSB0Lm51bGxQb2x5ZmlsbC5fX3Byb3RvX18sbnVsbD09PXImJihyPXQubnVsbFBvbHlmaWxsKSxlLl9fcHJvdG9fXz1yLGEmJnUodC5udWxsUG9seWZpbGwsIl9fcHJvdG9fXyIsaCksZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGksImxldmVsIix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6YS5sZXZlbH0pKTpudWxsLHQoIi4uL2NyZWF0ZSIpfSx7Ii4uL2NyZWF0ZSI6MTkzLCIuLi9pcy1vYmplY3QiOjE5NiwiLi4vdmFsaWQtdmFsdWUiOjIwOH1dLDIwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gdH19LHt9XSwyMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1vYmplY3QiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGFuIE9iamVjdCIpO3JldHVybiB0fX0seyIuL2lzLW9iamVjdCI6MTk2fV0sMjA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiB0fX0seyIuL2lzLXZhbHVlIjoxOTd9XSwyMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP1N0cmluZy5wcm90b3R5cGUuY29udGFpbnM6dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MjEwLCIuL3NoaW0iOjIxMX1dLDIxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0icmF6ZHdhdHJ6eSI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4uY29udGFpbnMmJighMD09PW4uY29udGFpbnMoImR3YSIpJiYhMT09PW4uY29udGFpbnMoImZvbyIpKX19LHt9XSwyMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49U3RyaW5nLnByb3RvdHlwZS5pbmRleE9mO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHRoaXMsdCxhcmd1bWVudHNbMV0pPi0xfX0se31dLDIxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGE9bi5jYWxsKCIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHx0JiYib2JqZWN0Ij09dHlwZW9mIHQmJih0IGluc3RhbmNlb2YgU3RyaW5nfHxuLmNhbGwodCk9PT1hKXx8ITF9fSx7fV0sMjEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCksYT1NYXRoLnJhbmRvbTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdDtkb3t0PWEoKS50b1N0cmluZygzNikuc2xpY2UoMil9d2hpbGUoblt0XSk7cmV0dXJuIHR9fSx7fV0sMjE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGE9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLGk9dCgiZXM1LWV4dC9zdHJpbmcvIy9jb250YWlucyIpLG89dCgiZCIpLHM9dCgiZXM2LXN5bWJvbCIpLGw9dCgiLi8iKSxjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuPWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7bC5jYWxsKHRoaXMsdCksZT1lP2kuY2FsbChlLCJrZXkrdmFsdWUiKT8ia2V5K3ZhbHVlIjppLmNhbGwoZSwia2V5Iik/ImtleSI6InZhbHVlIjoidmFsdWUiLGModGhpcywiX19raW5kX18iLG8oIiIsZSkpfSxhJiZhKG4sbCksZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobC5wcm90b3R5cGUse19yZXNvbHZlOm8oZnVuY3Rpb24odCl7cmV0dXJuInZhbHVlIj09PXRoaXMuX19raW5kX18/dGhpcy5fX2xpc3RfX1t0XToia2V5K3ZhbHVlIj09PXRoaXMuX19raW5kX18/W3QsdGhpcy5fX2xpc3RfX1t0XV06dH0pfSksYyhuLnByb3RvdHlwZSxzLnRvU3RyaW5nVGFnLG8oImMiLCJBcnJheSBJdGVyYXRvciIpKX0seyIuLyI6MjE3LGQ6MTUzLCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIjoyMDMsImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiOjIwOSwiZXM2LXN5bWJvbCI6MjIyfV0sMjE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksYT10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLGk9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksbz10KCIuL2dldCIpLHM9QXJyYXkuaXNBcnJheSxsPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLGM9QXJyYXkucHJvdG90eXBlLnNvbWU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxoLGYscCxkLGcsdixtPWFyZ3VtZW50c1syXTtpZihzKHQpfHxuKHQpP3I9ImFycmF5IjppKHQpP3I9InN0cmluZyI6dD1vKHQpLGEoZSksaD1mdW5jdGlvbigpe2Y9ITB9LCJhcnJheSIhPT1yKWlmKCJzdHJpbmciIT09cilmb3IodT10Lm5leHQoKTshdS5kb25lOyl7aWYobC5jYWxsKGUsbSx1LnZhbHVlLGgpLGYpcmV0dXJuO3U9dC5uZXh0KCl9ZWxzZSBmb3IoZD10Lmxlbmd0aCxwPTA7cDxkJiYoZz10W3BdLHArMTxkJiYodj1nLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmdjw9NTYzMTkmJihnKz10WysrcF0pLGwuY2FsbChlLG0sZyxoKSwhZik7KytwKTtlbHNlIGMuY2FsbCh0LGZ1bmN0aW9uKHQpe3JldHVybiBsLmNhbGwoZSxtLHQsaCksZn0pfX0seyIuL2dldCI6MjE2LCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTgwLCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSI6MjA2LCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciOjIxMn1dLDIxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksaT10KCIuL2FycmF5Iiksbz10KCIuL3N0cmluZyIpLHM9dCgiLi92YWxpZC1pdGVyYWJsZSIpLGw9dCgiZXM2LXN5bWJvbCIpLml0ZXJhdG9yO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcyh0KVtsXT90W2xdKCk6bih0KT9uZXcgaSh0KTphKHQpP25ldyBvKHQpOm5ldyBpKHQpfX0seyIuL2FycmF5IjoyMTQsIi4vc3RyaW5nIjoyMTksIi4vdmFsaWQtaXRlcmFibGUiOjIyMCwiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiOjE4MCwiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIjoyMTIsImVzNi1zeW1ib2wiOjIyMn1dLDIxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhPXQoImVzNS1leHQvYXJyYXkvIy9jbGVhciIpLGk9dCgiZXM1LWV4dC9vYmplY3QvYXNzaWduIiksbz10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLHM9dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiKSxsPXQoImQiKSxjPXQoImQvYXV0by1iaW5kIiksdT10KCJlczYtc3ltYm9sIiksaD1PYmplY3QuZGVmaW5lUHJvcGVydHksZj1PYmplY3QuZGVmaW5lUHJvcGVydGllcztlLmV4cG9ydHM9bj1mdW5jdGlvbih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7Zih0aGlzLHtfX2xpc3RfXzpsKCJ3IixzKHQpKSxfX2NvbnRleHRfXzpsKCJ3IixlKSxfX25leHRJbmRleF9fOmwoInciLDApfSksZSYmKG8oZS5vbiksZS5vbigiX2FkZCIsdGhpcy5fb25BZGQpLGUub24oIl9kZWxldGUiLHRoaXMuX29uRGVsZXRlKSxlLm9uKCJfY2xlYXIiLHRoaXMuX29uQ2xlYXIpKX0sZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLGYobi5wcm90b3R5cGUsaSh7X25leHQ6bChmdW5jdGlvbigpe3ZhciB0O2lmKHRoaXMuX19saXN0X18pcmV0dXJuIHRoaXMuX19yZWRvX18mJnZvaWQgMCE9PSh0PXRoaXMuX19yZWRvX18uc2hpZnQoKSk/dDp0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xpc3RfXy5sZW5ndGg/dGhpcy5fX25leHRJbmRleF9fKys6dm9pZCB0aGlzLl91bkJpbmQoKX0pLG5leHQ6bChmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVSZXN1bHQodGhpcy5fbmV4dCgpKX0pLF9jcmVhdGVSZXN1bHQ6bChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD97ZG9uZTohMCx2YWx1ZTp2b2lkIDB9Ontkb25lOiExLHZhbHVlOnRoaXMuX3Jlc29sdmUodCl9fSksX3Jlc29sdmU6bChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2xpc3RfX1t0XX0pLF91bkJpbmQ6bChmdW5jdGlvbigpe3RoaXMuX19saXN0X189bnVsbCxkZWxldGUgdGhpcy5fX3JlZG9fXyx0aGlzLl9fY29udGV4dF9fJiYodGhpcy5fX2NvbnRleHRfXy5vZmYoIl9hZGQiLHRoaXMuX29uQWRkKSx0aGlzLl9fY29udGV4dF9fLm9mZigiX2RlbGV0ZSIsdGhpcy5fb25EZWxldGUpLHRoaXMuX19jb250ZXh0X18ub2ZmKCJfY2xlYXIiLHRoaXMuX29uQ2xlYXIpLHRoaXMuX19jb250ZXh0X189bnVsbCl9KSx0b1N0cmluZzpsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgIisodGhpc1t1LnRvU3RyaW5nVGFnXXx8Ik9iamVjdCIpKyJdIn0pfSxjKHtfb25BZGQ6bChmdW5jdGlvbih0KXt0Pj10aGlzLl9fbmV4dEluZGV4X198fCgrK3RoaXMuX19uZXh0SW5kZXhfXyx0aGlzLl9fcmVkb19fPyh0aGlzLl9fcmVkb19fLmZvckVhY2goZnVuY3Rpb24oZSxyKXtlPj10JiYodGhpcy5fX3JlZG9fX1tyXT0rK2UpfSx0aGlzKSx0aGlzLl9fcmVkb19fLnB1c2godCkpOmgodGhpcywiX19yZWRvX18iLGwoImMiLFt0XSkpKX0pLF9vbkRlbGV0ZTpsKGZ1bmN0aW9uKHQpe3ZhciBlO3Q+PXRoaXMuX19uZXh0SW5kZXhfX3x8KC0tdGhpcy5fX25leHRJbmRleF9fLHRoaXMuX19yZWRvX18mJigtMSE9PShlPXRoaXMuX19yZWRvX18uaW5kZXhPZih0KSkmJnRoaXMuX19yZWRvX18uc3BsaWNlKGUsMSksdGhpcy5fX3JlZG9fXy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7ZT50JiYodGhpcy5fX3JlZG9fX1tyXT0tLWUpfSx0aGlzKSkpfSksX29uQ2xlYXI6bChmdW5jdGlvbigpe3RoaXMuX19yZWRvX18mJmEuY2FsbCh0aGlzLl9fcmVkb19fKSx0aGlzLl9fbmV4dEluZGV4X189MH0pfSkpKSxoKG4ucHJvdG90eXBlLHUuaXRlcmF0b3IsbChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpfSx7ZDoxNTMsImQvYXV0by1iaW5kIjoxNTIsImVzNS1leHQvYXJyYXkvIy9jbGVhciI6MTc2LCJlczUtZXh0L29iamVjdC9hc3NpZ24iOjE4OSwiZXM1LWV4dC9vYmplY3QvdmFsaWQtY2FsbGFibGUiOjIwNiwiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiOjIwOCwiZXM2LXN5bWJvbCI6MjIyfV0sMjE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksYT10KCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSIpLGk9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksbz10KCJlczYtc3ltYm9sIikuaXRlcmF0b3Iscz1BcnJheS5pc0FycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hIWEodCkmJighIXModCl8fCghIWkodCl8fCghIW4odCl8fCJmdW5jdGlvbiI9PXR5cGVvZiB0W29dKSkpfX0seyJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTgwLCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSI6MTk3LCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciOjIxMiwiZXM2LXN5bWJvbCI6MjIyfV0sMjE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGE9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLGk9dCgiZCIpLG89dCgiZXM2LXN5bWJvbCIpLHM9dCgiLi8iKSxsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtuPWUuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyIpO3Q9U3RyaW5nKHQpLHMuY2FsbCh0aGlzLHQpLGwodGhpcywiX19sZW5ndGhfXyIsaSgiIix0Lmxlbmd0aCkpfSxhJiZhKG4scyksZGVsZXRlIG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUocy5wcm90b3R5cGUse19uZXh0OmkoZnVuY3Rpb24oKXtpZih0aGlzLl9fbGlzdF9fKXJldHVybiB0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xlbmd0aF9fP3RoaXMuX19uZXh0SW5kZXhfXysrOnZvaWQgdGhpcy5fdW5CaW5kKCl9KSxfcmVzb2x2ZTppKGZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5fX2xpc3RfX1t0XTtyZXR1cm4gdGhpcy5fX25leHRJbmRleF9fPT09dGhpcy5fX2xlbmd0aF9fP3I6KGU9ci5jaGFyQ29kZUF0KDApKT49NTUyOTYmJmU8PTU2MzE5P3IrdGhpcy5fX2xpc3RfX1t0aGlzLl9fbmV4dEluZGV4X18rK106cn0pfSksbChuLnByb3RvdHlwZSxvLnRvU3RyaW5nVGFnLGkoImMiLCJTdHJpbmcgSXRlcmF0b3IiKSl9LHsiLi8iOjIxNyxkOjE1MywiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiI6MjAzLCJlczYtc3ltYm9sIjoyMjJ9XSwyMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1pdGVyYWJsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHQrIiBpcyBub3QgaXRlcmFibGUiKTtyZXR1cm4gdH19LHsiLi9pcy1pdGVyYWJsZSI6MjE4fV0sMjIxOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKG4sYSl7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/ZS5leHBvcnRzPW4oKTp0LkVTNlByb21pc2U9bigpfSh0aGlzLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9dmFyIHI9QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5OmZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9LGk9MCxvPXZvaWQgMCxzPXZvaWQgMCxsPWZ1bmN0aW9uKHQsZSl7Z1tpXT10LGdbaSsxXT1lLDI9PT0oaSs9MikmJihzP3Modik6XygpKX07dmFyIGM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCx1PWN8fHt9LGg9dS5NdXRhdGlvbk9ic2VydmVyfHx1LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsZj0idW5kZWZpbmVkIj09dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgbiYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChuKSxwPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbDtmdW5jdGlvbiBkKCl7dmFyIHQ9c2V0VGltZW91dDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh2LDEpfX12YXIgZz1uZXcgQXJyYXkoMWUzKTtmdW5jdGlvbiB2KCl7Zm9yKHZhciB0PTA7dDxpO3QrPTIpeygwLGdbdF0pKGdbdCsxXSksZ1t0XT12b2lkIDAsZ1t0KzFdPXZvaWQgMH1pPTB9dmFyIG0seSx4LGIsXz12b2lkIDA7ZnVuY3Rpb24gdyh0LGUpe3ZhciByPWFyZ3VtZW50cyxuPXRoaXMsYT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihNKTt2b2lkIDA9PT1hW1RdJiZVKGEpO3ZhciBpLG89bi5fc3RhdGU7cmV0dXJuIG8/KGk9cltvLTFdLGwoZnVuY3Rpb24oKXtyZXR1cm4gaihvLGEsaSxuLl9yZXN1bHQpfSkpOlIobixhLHQsZSksYX1mdW5jdGlvbiBrKHQpe2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvcj09PXRoaXMpcmV0dXJuIHQ7dmFyIGU9bmV3IHRoaXMoTSk7cmV0dXJuIE8oZSx0KSxlfWY/Xz1mdW5jdGlvbigpe3JldHVybiBuLm5leHRUaWNrKHYpfTpoPyh5PTAseD1uZXcgaCh2KSxiPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSx4Lm9ic2VydmUoYix7Y2hhcmFjdGVyRGF0YTohMH0pLF89ZnVuY3Rpb24oKXtiLmRhdGE9eT0rK3klMn0pOnA/KChtPW5ldyBNZXNzYWdlQ2hhbm5lbCkucG9ydDEub25tZXNzYWdlPXYsXz1mdW5jdGlvbigpe3JldHVybiBtLnBvcnQyLnBvc3RNZXNzYWdlKDApfSk6Xz12b2lkIDA9PT1jJiYiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3RyeXt2YXIgZT10KCJ2ZXJ0eCIpO3JldHVybiBvPWUucnVuT25Mb29wfHxlLnJ1bk9uQ29udGV4dCxmdW5jdGlvbigpe28odil9fWNhdGNoKHQpe3JldHVybiBkKCl9fSgpOmQoKTt2YXIgVD1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpO2Z1bmN0aW9uIE0oKXt9dmFyIEE9dm9pZCAwLFM9MSxFPTIsTD1uZXcgQjtmdW5jdGlvbiBDKHQpe3RyeXtyZXR1cm4gdC50aGVufWNhdGNoKHQpe3JldHVybiBMLmVycm9yPXQsTH19ZnVuY3Rpb24gUCh0LHIsbil7ci5jb25zdHJ1Y3Rvcj09PXQuY29uc3RydWN0b3ImJm49PT13JiZyLmNvbnN0cnVjdG9yLnJlc29sdmU9PT1rP2Z1bmN0aW9uKHQsZSl7ZS5fc3RhdGU9PT1TP0kodCxlLl9yZXN1bHQpOmUuX3N0YXRlPT09RT9EKHQsZS5fcmVzdWx0KTpSKGUsdm9pZCAwLGZ1bmN0aW9uKGUpe3JldHVybiBPKHQsZSl9LGZ1bmN0aW9uKGUpe3JldHVybiBEKHQsZSl9KX0odCxyKTpuPT09TD9EKHQsTC5lcnJvcik6dm9pZCAwPT09bj9JKHQscik6ZShuKT9mdW5jdGlvbih0LGUscil7bChmdW5jdGlvbih0KXt2YXIgbj0hMSxhPWZ1bmN0aW9uKHQsZSxyLG4pe3RyeXt0LmNhbGwoZSxyLG4pfWNhdGNoKHQpe3JldHVybiB0fX0ocixlLGZ1bmN0aW9uKHIpe258fChuPSEwLGUhPT1yP08odCxyKTpJKHQscikpfSxmdW5jdGlvbihlKXtufHwobj0hMCxEKHQsZSkpfSx0Ll9sYWJlbCk7IW4mJmEmJihuPSEwLEQodCxhKSl9LHQpfSh0LHIsbik6SSh0LHIpfWZ1bmN0aW9uIE8odCxlKXt2YXIgcjt0PT09ZT9EKHQsbmV3IFR5cGVFcnJvcigiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKToiZnVuY3Rpb24iPT10eXBlb2Yocj1lKXx8Im9iamVjdCI9PXR5cGVvZiByJiZudWxsIT09cj9QKHQsZSxDKGUpKTpJKHQsZSl9ZnVuY3Rpb24geih0KXt0Ll9vbmVycm9yJiZ0Ll9vbmVycm9yKHQuX3Jlc3VsdCksRih0KX1mdW5jdGlvbiBJKHQsZSl7dC5fc3RhdGU9PT1BJiYodC5fcmVzdWx0PWUsdC5fc3RhdGU9UywwIT09dC5fc3Vic2NyaWJlcnMubGVuZ3RoJiZsKEYsdCkpfWZ1bmN0aW9uIEQodCxlKXt0Ll9zdGF0ZT09PUEmJih0Ll9zdGF0ZT1FLHQuX3Jlc3VsdD1lLGwoeix0KSl9ZnVuY3Rpb24gUih0LGUscixuKXt2YXIgYT10Ll9zdWJzY3JpYmVycyxpPWEubGVuZ3RoO3QuX29uZXJyb3I9bnVsbCxhW2ldPWUsYVtpK1NdPXIsYVtpK0VdPW4sMD09PWkmJnQuX3N0YXRlJiZsKEYsdCl9ZnVuY3Rpb24gRih0KXt2YXIgZT10Ll9zdWJzY3JpYmVycyxyPXQuX3N0YXRlO2lmKDAhPT1lLmxlbmd0aCl7Zm9yKHZhciBuPXZvaWQgMCxhPXZvaWQgMCxpPXQuX3Jlc3VsdCxvPTA7bzxlLmxlbmd0aDtvKz0zKW49ZVtvXSxhPWVbbytyXSxuP2oocixuLGEsaSk6YShpKTt0Ll9zdWJzY3JpYmVycy5sZW5ndGg9MH19ZnVuY3Rpb24gQigpe3RoaXMuZXJyb3I9bnVsbH12YXIgTj1uZXcgQjtmdW5jdGlvbiBqKHQscixuLGEpe3ZhciBpPWUobiksbz12b2lkIDAscz12b2lkIDAsbD12b2lkIDAsYz12b2lkIDA7aWYoaSl7aWYoKG89ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIHQoZSl9Y2F0Y2godCl7cmV0dXJuIE4uZXJyb3I9dCxOfX0obixhKSk9PT1OPyhjPSEwLHM9by5lcnJvcixvPW51bGwpOmw9ITAscj09PW8pcmV0dXJuIHZvaWQgRChyLG5ldyBUeXBlRXJyb3IoIkEgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4iKSl9ZWxzZSBvPWEsbD0hMDtyLl9zdGF0ZSE9PUF8fChpJiZsP08ocixvKTpjP0QocixzKTp0PT09Uz9JKHIsbyk6dD09PUUmJkQocixvKSl9dmFyIFY9MDtmdW5jdGlvbiBVKHQpe3RbVF09VisrLHQuX3N0YXRlPXZvaWQgMCx0Ll9yZXN1bHQ9dm9pZCAwLHQuX3N1YnNjcmliZXJzPVtdfWZ1bmN0aW9uIHEodCxlKXt0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yPXQsdGhpcy5wcm9taXNlPW5ldyB0KE0pLHRoaXMucHJvbWlzZVtUXXx8VSh0aGlzLnByb21pc2UpLHIoZSk/KHRoaXMuX2lucHV0PWUsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fcmVtYWluaW5nPWUubGVuZ3RoLHRoaXMuX3Jlc3VsdD1uZXcgQXJyYXkodGhpcy5sZW5ndGgpLDA9PT10aGlzLmxlbmd0aD9JKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpOih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aHx8MCx0aGlzLl9lbnVtZXJhdGUoKSwwPT09dGhpcy5fcmVtYWluaW5nJiZJKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpKSk6RCh0aGlzLnByb21pc2UsbmV3IEVycm9yKCJBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXkiKSl9ZnVuY3Rpb24gSCh0KXt0aGlzW1RdPVYrKyx0aGlzLl9yZXN1bHQ9dGhpcy5fc3RhdGU9dm9pZCAwLHRoaXMuX3N1YnNjcmliZXJzPVtdLE0hPT10JiYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvciIpfSgpLHRoaXMgaW5zdGFuY2VvZiBIP2Z1bmN0aW9uKHQsZSl7dHJ5e2UoZnVuY3Rpb24oZSl7Tyh0LGUpfSxmdW5jdGlvbihlKXtEKHQsZSl9KX1jYXRjaChlKXtEKHQsZSl9fSh0aGlzLHQpOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIil9KCkpfWZ1bmN0aW9uIEcoKXt2YXIgdD12b2lkIDA7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBhKXQ9YTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZil0PXNlbGY7ZWxzZSB0cnl7dD1GdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoKHQpe3Rocm93IG5ldyBFcnJvcigicG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Iil9dmFyIGU9dC5Qcm9taXNlO2lmKGUpe3ZhciByPW51bGw7dHJ5e3I9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUucmVzb2x2ZSgpKX1jYXRjaCh0KXt9aWYoIltvYmplY3QgUHJvbWlzZV0iPT09ciYmIWUuY2FzdClyZXR1cm59dC5Qcm9taXNlPUh9cmV0dXJuIHEucHJvdG90eXBlLl9lbnVtZXJhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5sZW5ndGgsZT10aGlzLl9pbnB1dCxyPTA7dGhpcy5fc3RhdGU9PT1BJiZyPHQ7cisrKXRoaXMuX2VhY2hFbnRyeShlW3JdLHIpfSxxLnByb3RvdHlwZS5fZWFjaEVudHJ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcixuPXIucmVzb2x2ZTtpZihuPT09ayl7dmFyIGE9Qyh0KTtpZihhPT09dyYmdC5fc3RhdGUhPT1BKXRoaXMuX3NldHRsZWRBdCh0Ll9zdGF0ZSxlLHQuX3Jlc3VsdCk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aGlzLl9yZW1haW5pbmctLSx0aGlzLl9yZXN1bHRbZV09dDtlbHNlIGlmKHI9PT1IKXt2YXIgaT1uZXcgcihNKTtQKGksdCxhKSx0aGlzLl93aWxsU2V0dGxlQXQoaSxlKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgcihmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pLGUpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KG4odCksZSl9LHEucHJvdG90eXBlLl9zZXR0bGVkQXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMucHJvbWlzZTtuLl9zdGF0ZT09PUEmJih0aGlzLl9yZW1haW5pbmctLSx0PT09RT9EKG4scik6dGhpcy5fcmVzdWx0W2VdPXIpLDA9PT10aGlzLl9yZW1haW5pbmcmJkkobix0aGlzLl9yZXN1bHQpfSxxLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztSKHQsdm9pZCAwLGZ1bmN0aW9uKHQpe3JldHVybiByLl9zZXR0bGVkQXQoUyxlLHQpfSxmdW5jdGlvbih0KXtyZXR1cm4gci5fc2V0dGxlZEF0KEUsZSx0KX0pfSxILmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHEodGhpcyx0KS5wcm9taXNlfSxILnJhY2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gcih0KT9uZXcgZShmdW5jdGlvbihyLG4pe2Zvcih2YXIgYT10Lmxlbmd0aCxpPTA7aTxhO2krKyllLnJlc29sdmUodFtpXSkudGhlbihyLG4pfSk6bmV3IGUoZnVuY3Rpb24odCxlKXtyZXR1cm4gZShuZXcgVHlwZUVycm9yKCJZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuIikpfSl9LEgucmVzb2x2ZT1rLEgucmVqZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0aGlzKE0pO3JldHVybiBEKGUsdCksZX0sSC5fc2V0U2NoZWR1bGVyPWZ1bmN0aW9uKHQpe3M9dH0sSC5fc2V0QXNhcD1mdW5jdGlvbih0KXtsPXR9LEguX2FzYXA9bCxILnByb3RvdHlwZT17Y29uc3RydWN0b3I6SCx0aGVuOncsY2F0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbihudWxsLHQpfX0sRygpLEgucG9seWZpbGw9RyxILlByb21pc2U9SCxIfSl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se19wcm9jZXNzOjQ4NH1dLDIyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/U3ltYm9sOnQoIi4vcG9seWZpbGwiKX0seyIuL2lzLWltcGxlbWVudGVkIjoyMjMsIi4vcG9seWZpbGwiOjIyNX1dLDIyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17b2JqZWN0OiEwLHN5bWJvbDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFN5bWJvbClyZXR1cm4hMTt0PVN5bWJvbCgidGVzdCBzeW1ib2wiKTt0cnl7U3RyaW5nKHQpfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEhblt0eXBlb2YgU3ltYm9sLml0ZXJhdG9yXSYmKCEhblt0eXBlb2YgU3ltYm9sLnRvUHJpbWl0aXZlXSYmISFuW3R5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWddKX19LHt9XSwyMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhdCYmKCJzeW1ib2wiPT10eXBlb2YgdHx8ISF0LmNvbnN0cnVjdG9yJiYoIlN5bWJvbCI9PT10LmNvbnN0cnVjdG9yLm5hbWUmJiJTeW1ib2wiPT09dFt0LmNvbnN0cnVjdG9yLnRvU3RyaW5nVGFnXSkpfX0se31dLDIyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhLGksbyxzPXQoImQiKSxsPXQoIi4vdmFsaWRhdGUtc3ltYm9sIiksYz1PYmplY3QuY3JlYXRlLHU9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMsaD1PYmplY3QuZGVmaW5lUHJvcGVydHksZj1PYmplY3QucHJvdG90eXBlLHA9YyhudWxsKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sKXtuPVN5bWJvbDt0cnl7U3RyaW5nKG4oKSksbz0hMH1jYXRjaCh0KXt9fXZhciBkLGc9KGQ9YyhudWxsKSxmdW5jdGlvbih0KXtmb3IodmFyIGUscixuPTA7ZFt0KyhufHwiIildOykrK247cmV0dXJuIGRbdCs9bnx8IiJdPSEwLGgoZixlPSJAQCIrdCxzLmdzKG51bGwsZnVuY3Rpb24odCl7cnx8KHI9ITAsaCh0aGlzLGUscyh0KSkscj0hMSl9KSksZX0pO2k9ZnVuY3Rpb24odCl7aWYodGhpcyBpbnN0YW5jZW9mIGkpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7cmV0dXJuIGEodCl9LGUuZXhwb3J0cz1hPWZ1bmN0aW9uIHQoZSl7dmFyIHI7aWYodGhpcyBpbnN0YW5jZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7cmV0dXJuIG8/bihlKToocj1jKGkucHJvdG90eXBlKSxlPXZvaWQgMD09PWU/IiI6U3RyaW5nKGUpLHUocix7X19kZXNjcmlwdGlvbl9fOnMoIiIsZSksX19uYW1lX186cygiIixnKGUpKX0pKX0sdShhLHtmb3I6cyhmdW5jdGlvbih0KXtyZXR1cm4gcFt0XT9wW3RdOnBbdF09YShTdHJpbmcodCkpfSksa2V5Rm9yOnMoZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGUgaW4gbCh0KSxwKWlmKHBbZV09PT10KXJldHVybiBlfSksaGFzSW5zdGFuY2U6cygiIixuJiZuLmhhc0luc3RhbmNlfHxhKCJoYXNJbnN0YW5jZSIpKSxpc0NvbmNhdFNwcmVhZGFibGU6cygiIixuJiZuLmlzQ29uY2F0U3ByZWFkYWJsZXx8YSgiaXNDb25jYXRTcHJlYWRhYmxlIikpLGl0ZXJhdG9yOnMoIiIsbiYmbi5pdGVyYXRvcnx8YSgiaXRlcmF0b3IiKSksbWF0Y2g6cygiIixuJiZuLm1hdGNofHxhKCJtYXRjaCIpKSxyZXBsYWNlOnMoIiIsbiYmbi5yZXBsYWNlfHxhKCJyZXBsYWNlIikpLHNlYXJjaDpzKCIiLG4mJm4uc2VhcmNofHxhKCJzZWFyY2giKSksc3BlY2llczpzKCIiLG4mJm4uc3BlY2llc3x8YSgic3BlY2llcyIpKSxzcGxpdDpzKCIiLG4mJm4uc3BsaXR8fGEoInNwbGl0IikpLHRvUHJpbWl0aXZlOnMoIiIsbiYmbi50b1ByaW1pdGl2ZXx8YSgidG9QcmltaXRpdmUiKSksdG9TdHJpbmdUYWc6cygiIixuJiZuLnRvU3RyaW5nVGFnfHxhKCJ0b1N0cmluZ1RhZyIpKSx1bnNjb3BhYmxlczpzKCIiLG4mJm4udW5zY29wYWJsZXN8fGEoInVuc2NvcGFibGVzIikpfSksdShpLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6cyhhKSx0b1N0cmluZzpzKCIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19uYW1lX199KX0pLHUoYS5wcm90b3R5cGUse3RvU3RyaW5nOnMoZnVuY3Rpb24oKXtyZXR1cm4iU3ltYm9sICgiK2wodGhpcykuX19kZXNjcmlwdGlvbl9fKyIpIn0pLHZhbHVlT2Y6cyhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMpfSl9KSxoKGEucHJvdG90eXBlLGEudG9QcmltaXRpdmUscygiIixmdW5jdGlvbigpe3ZhciB0PWwodGhpcyk7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dC50b1N0cmluZygpfSkpLGgoYS5wcm90b3R5cGUsYS50b1N0cmluZ1RhZyxzKCJjIiwiU3ltYm9sIikpLGgoaS5wcm90b3R5cGUsYS50b1N0cmluZ1RhZyxzKCJjIixhLnByb3RvdHlwZVthLnRvU3RyaW5nVGFnXSkpLGgoaS5wcm90b3R5cGUsYS50b1ByaW1pdGl2ZSxzKCJjIixhLnByb3RvdHlwZVthLnRvUHJpbWl0aXZlXSkpfSx7Ii4vdmFsaWRhdGUtc3ltYm9sIjoyMjYsZDoxNTN9XSwyMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1zeW1ib2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgc3ltYm9sIik7cmV0dXJuIHR9fSx7Ii4vaXMtc3ltYm9sIjoyMjR9XSwyMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lfHwwLGE9cnx8MTtyZXR1cm5bW3RbMTJdK3RbMF0sdFsxM10rdFsxXSx0WzE0XSt0WzJdLHRbMTVdK3RbM11dLFt0WzEyXS10WzBdLHRbMTNdLXRbMV0sdFsxNF0tdFsyXSx0WzE1XS10WzNdXSxbdFsxMl0rdFs0XSx0WzEzXSt0WzVdLHRbMTRdK3RbNl0sdFsxNV0rdFs3XV0sW3RbMTJdLXRbNF0sdFsxM10tdFs1XSx0WzE0XS10WzZdLHRbMTVdLXRbN11dLFtuKnRbMTJdK3RbOF0sbip0WzEzXSt0WzldLG4qdFsxNF0rdFsxMF0sbip0WzE1XSt0WzExXV0sW2EqdFsxMl0tdFs4XSxhKnRbMTNdLXRbOV0sYSp0WzE0XS10WzEwXSxhKnRbMTVdLXRbMTFdXV19fSx7fV0sMjI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImlzLXN0cmluZy1ibGFuayIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtpZigic3RyaW5nIj09PWUpe3ZhciByPXQ7aWYoMD09PSh0PSt0KSYmbihyKSlyZXR1cm4hMX1lbHNlIGlmKCJudW1iZXIiIT09ZSlyZXR1cm4hMTtyZXR1cm4gdC10PDF9fSx7ImlzLXN0cmluZy1ibGFuayI6NDI1fV0sMjI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG8oWzBdLFswXSwwKTtjYXNlIDE6aWYoIm51bWJlciI9PXR5cGVvZiB0KXt2YXIgbj1sKHQpO3JldHVybiBuZXcgbyhuLG4sMCl9cmV0dXJuIG5ldyBvKHQsbCh0Lmxlbmd0aCksMCk7Y2FzZSAyOmlmKCJudW1iZXIiPT10eXBlb2YgZSl7dmFyIG49bCh0Lmxlbmd0aCk7cmV0dXJuIG5ldyBvKHQsbiwrZSl9cj0wO2Nhc2UgMzppZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigic3RhdGUgYW5kIHZlbG9jaXR5IGxlbmd0aHMgbXVzdCBtYXRjaCIpO3JldHVybiBuZXcgbyh0LGUscil9fTt2YXIgbj10KCJjdWJpYy1oZXJtaXRlIiksYT10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2Z1bmN0aW9uIGkodCxlLHIpe3JldHVybiBNYXRoLm1pbihlLE1hdGgubWF4KHQscikpfWZ1bmN0aW9uIG8odCxlLHIpe3RoaXMuZGltZW5zaW9uPXQubGVuZ3RoLHRoaXMuYm91bmRzPVtuZXcgQXJyYXkodGhpcy5kaW1lbnNpb24pLG5ldyBBcnJheSh0aGlzLmRpbWVuc2lvbildO2Zvcih2YXIgbj0wO248dGhpcy5kaW1lbnNpb247KytuKXRoaXMuYm91bmRzWzBdW25dPS0xLzAsdGhpcy5ib3VuZHNbMV1bbl09MS8wO3RoaXMuX3N0YXRlPXQuc2xpY2UoKS5yZXZlcnNlKCksdGhpcy5fdmVsb2NpdHk9ZS5zbGljZSgpLnJldmVyc2UoKSx0aGlzLl90aW1lPVtyXSx0aGlzLl9zY3JhdGNoPVt0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpXX12YXIgcz1vLnByb3RvdHlwZTtmdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpZVtyXT0wO3JldHVybiBlfXMuZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU9YS5ndCh0aGlzLl90aW1lLHQpLTE7ZTw9MHx8KHRoaXMuX3RpbWUuc3BsaWNlKDAsZSksdGhpcy5fc3RhdGUuc3BsaWNlKDAsZSp0aGlzLmRpbWVuc2lvbiksdGhpcy5fdmVsb2NpdHkuc3BsaWNlKDAsZSp0aGlzLmRpbWVuc2lvbikpfSxzLmN1cnZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbWUscj1lLmxlbmd0aCxvPWEubGUoZSx0KSxzPXRoaXMuX3NjcmF0Y2hbMF0sbD10aGlzLl9zdGF0ZSxjPXRoaXMuX3ZlbG9jaXR5LHU9dGhpcy5kaW1lbnNpb24saD10aGlzLmJvdW5kcztpZihvPDApZm9yKHZhciBmPXUtMSxwPTA7cDx1OysrcCwtLWYpc1twXT1sW2ZdO2Vsc2UgaWYobz49ci0xKXtmPWwubGVuZ3RoLTE7dmFyIGQ9dC1lW3ItMV07Zm9yKHA9MDtwPHU7KytwLC0tZilzW3BdPWxbZl0rZCpjW2ZdfWVsc2V7Zj11KihvKzEpLTE7dmFyIGc9ZVtvXSx2PWVbbysxXS1nfHwxLG09dGhpcy5fc2NyYXRjaFsxXSx5PXRoaXMuX3NjcmF0Y2hbMl0seD10aGlzLl9zY3JhdGNoWzNdLGI9dGhpcy5fc2NyYXRjaFs0XSxfPSEwO2ZvcihwPTA7cDx1OysrcCwtLWYpbVtwXT1sW2ZdLHhbcF09Y1tmXSp2LHlbcF09bFtmK3VdLGJbcF09Y1tmK3VdKnYsXz1fJiZtW3BdPT09eVtwXSYmeFtwXT09PWJbcF0mJjA9PT14W3BdO2lmKF8pZm9yKHA9MDtwPHU7KytwKXNbcF09bVtwXTtlbHNlIG4obSx4LHksYiwodC1nKS92LHMpfXZhciB3PWhbMF0saz1oWzFdO2ZvcihwPTA7cDx1OysrcClzW3BdPWkod1twXSxrW3BdLHNbcF0pO3JldHVybiBzfSxzLmRjdXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9ZS5sZW5ndGgsaT1hLmxlKGUsdCksbz10aGlzLl9zY3JhdGNoWzBdLHM9dGhpcy5fc3RhdGUsbD10aGlzLl92ZWxvY2l0eSxjPXRoaXMuZGltZW5zaW9uO2lmKGk+PXItMSlmb3IodmFyIHU9cy5sZW5ndGgtMSxoPShlW3ItMV0sMCk7aDxjOysraCwtLXUpb1toXT1sW3VdO2Vsc2V7dT1jKihpKzEpLTE7dmFyIGY9ZVtpXSxwPWVbaSsxXS1mfHwxLGQ9dGhpcy5fc2NyYXRjaFsxXSxnPXRoaXMuX3NjcmF0Y2hbMl0sdj10aGlzLl9zY3JhdGNoWzNdLG09dGhpcy5fc2NyYXRjaFs0XSx5PSEwO2ZvcihoPTA7aDxjOysraCwtLXUpZFtoXT1zW3VdLHZbaF09bFt1XSpwLGdbaF09c1t1K2NdLG1baF09bFt1K2NdKnAseT15JiZkW2hdPT09Z1toXSYmdltoXT09PW1baF0mJjA9PT12W2hdO2lmKHkpZm9yKGg9MDtoPGM7KytoKW9baF09MDtlbHNle24uZGVyaXZhdGl2ZShkLHYsZyxtLCh0LWYpL3Asbyk7Zm9yKGg9MDtoPGM7KytoKW9baF0vPXB9fXJldHVybiBvfSxzLmxhc3RUPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdGltZTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX0scy5zdGFibGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fdmVsb2NpdHksZT10Lmxlbmd0aCxyPXRoaXMuZGltZW5zaW9uLTE7cj49MDstLXIpaWYodFstLWVdKXJldHVybiExO3JldHVybiEwfSxzLmp1bXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoISh0PGV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgbj10aGlzLl9zdGF0ZSxhPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10aGlzLmJvdW5kcyxsPXNbMF0sYz1zWzFdO3RoaXMuX3RpbWUucHVzaChlLHQpO2Zvcih2YXIgdT0wO3U8MjsrK3UpZm9yKHZhciBoPTA7aDxyOysraCluLnB1c2gobltvKytdKSxhLnB1c2goMCk7dGhpcy5fdGltZS5wdXNoKHQpO2ZvcihoPXI7aD4wOy0taCluLnB1c2goaShsW2gtMV0sY1toLTFdLGFyZ3VtZW50c1toXSkpLGEucHVzaCgwKX19LHMucHVzaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10aGlzLmRpbWVuc2lvbjtpZighKHQ8ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBuPXRoaXMuX3N0YXRlLGE9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXQtZSxsPXRoaXMuYm91bmRzLGM9bFswXSx1PWxbMV0saD1zPjFlLTY/MS9zOjA7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgZj1yO2Y+MDstLWYpe3ZhciBwPWkoY1tmLTFdLHVbZi0xXSxhcmd1bWVudHNbZl0pO24ucHVzaChwKSxhLnB1c2goKHAtbltvKytdKSpoKX19fSxzLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpbWVuc2lvbjtpZighKHQ8dGhpcy5sYXN0VCgpfHxhcmd1bWVudHMubGVuZ3RoIT09ZSsxKSl7dmFyIHI9dGhpcy5fc3RhdGUsbj10aGlzLl92ZWxvY2l0eSxhPXRoaXMuYm91bmRzLG89YVswXSxzPWFbMV07dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgbD1lO2w+MDstLWwpci5wdXNoKGkob1tsLTFdLHNbbC0xXSxhcmd1bWVudHNbbF0pKSxuLnB1c2goMCl9fSxzLm1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoISh0PD1lfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIG49dGhpcy5fc3RhdGUsYT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXSx1PXQtZSxoPXU+MWUtNj8xL3U6MDt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBmPXI7Zj4wOy0tZil7dmFyIHA9YXJndW1lbnRzW2ZdO24ucHVzaChpKGxbZi0xXSxjW2YtMV0sbltvKytdK3ApKSxhLnB1c2gocCpoKX19fSxzLmlkbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpO2lmKCEodDxlKSl7dmFyIHI9dGhpcy5kaW1lbnNpb24sbj10aGlzLl9zdGF0ZSxhPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtcixzPXRoaXMuYm91bmRzLGw9c1swXSxjPXNbMV0sdT10LWU7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgaD1yLTE7aD49MDstLWgpbi5wdXNoKGkobFtoXSxjW2hdLG5bb10rdSphW29dKSksYS5wdXNoKDApLG8rPTF9fX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6OTMsImN1YmljLWhlcm1pdGUiOjE0N31dLDIzMDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImR0eXBlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZighdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHNwZWNpZnkgZGF0YSBhcyBmaXJzdCBwYXJhbWV0ZXIiKTtpZihyPTB8KyhyfHwwKSxBcnJheS5pc0FycmF5KHQpJiZ0WzBdJiYibnVtYmVyIj09dHlwZW9mIHRbMF1bMF0pe3ZhciBhLGksbyxzLGw9dFswXS5sZW5ndGgsYz10Lmxlbmd0aCpsO2UmJiJzdHJpbmciIT10eXBlb2YgZXx8KGU9bmV3KG4oZXx8ImZsb2F0MzIiKSkoYytyKSk7dmFyIHU9ZS5sZW5ndGgtcjtpZihjIT09dSl0aHJvdyBuZXcgRXJyb3IoInNvdXJjZSBsZW5ndGggIitjKyIgKCIrbCsieCIrdC5sZW5ndGgrIikgZG9lcyBub3QgbWF0Y2ggZGVzdGluYXRpb24gbGVuZ3RoICIrdSk7Zm9yKGE9MCxvPXI7YTx0Lmxlbmd0aDthKyspZm9yKGk9MDtpPGw7aSsrKWVbbysrXT1udWxsPT09dFthXVtpXT9OYU46dFthXVtpXX1lbHNlIGlmKGUmJiJzdHJpbmciIT10eXBlb2YgZSllLnNldCh0LHIpO2Vsc2V7dmFyIGg9bihlfHwiZmxvYXQzMiIpO2lmKEFycmF5LmlzQXJyYXkodCl8fCJhcnJheSI9PT1lKWZvcihlPW5ldyBoKHQubGVuZ3RoK3IpLGE9MCxvPXIscz1lLmxlbmd0aDtvPHM7bysrLGErKyllW29dPW51bGw9PT10W2FdP05hTjp0W2FdO2Vsc2UgMD09PXI/ZT1uZXcgaCh0KTooZT1uZXcgaCh0Lmxlbmd0aCtyKSkuc2V0KHQscil9cmV0dXJuIGV9fSx7ZHR5cGU6MTcxfV0sMjMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNzcy1mb250L3N0cmluZ2lmeSIpLGE9WzMyLDEyNl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5zaGFwZT90LnNoYXBlOnQuY2FudmFzP1t0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHRdOls1MTIsNTEyXSxyPXQuY2FudmFzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxpPXQuZm9udCxvPSJudW1iZXIiPT10eXBlb2YgdC5zdGVwP1t0LnN0ZXAsdC5zdGVwXTp0LnN0ZXB8fFszMiwzMl0scz10LmNoYXJzfHxhO2kmJiJzdHJpbmciIT10eXBlb2YgaSYmKGk9bihpKSk7aWYoQXJyYXkuaXNBcnJheShzKSl7aWYoMj09PXMubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIHNbMF0mJiJudW1iZXIiPT10eXBlb2Ygc1sxXSl7Zm9yKHZhciBsPVtdLGM9c1swXSx1PTA7Yzw9c1sxXTtjKyspbFt1KytdPVN0cmluZy5mcm9tQ2hhckNvZGUoYyk7cz1sfX1lbHNlIHM9U3RyaW5nKHMpLnNwbGl0KCIiKTtlPWUuc2xpY2UoKSxyLndpZHRoPWVbMF0sci5oZWlnaHQ9ZVsxXTt2YXIgaD1yLmdldENvbnRleHQoIjJkIik7aC5maWxsU3R5bGU9IiMwMDAiLGguZmlsbFJlY3QoMCwwLHIud2lkdGgsci5oZWlnaHQpLGguZm9udD1pLGgudGV4dEFsaWduPSJjZW50ZXIiLGgudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGguZmlsbFN0eWxlPSIjZmZmIjtmb3IodmFyIGY9b1swXS8yLHA9b1sxXS8yLGM9MDtjPHMubGVuZ3RoO2MrKyloLmZpbGxUZXh0KHNbY10sZixwKSwoZis9b1swXSk+ZVswXS1vWzBdLzImJihmPW9bMF0vMixwKz1vWzFdKTtyZXR1cm4gcn19LHsiY3NzLWZvbnQvc3RyaW5naWZ5IjoxNDR9XSwyMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2V8fChlPXt9KSwoInN0cmluZyI9PXR5cGVvZiB0fHxBcnJheS5pc0FycmF5KHQpKSYmKGUuZmFtaWx5PXQpO3ZhciByPUFycmF5LmlzQXJyYXkoZS5mYW1pbHkpP2UuZmFtaWx5LmpvaW4oIiwgIik6ZS5mYW1pbHk7aWYoIXIpdGhyb3cgRXJyb3IoImBmYW1pbHlgIG11c3QgYmUgZGVmaW5lZCIpO3ZhciBzPWUuc2l6ZXx8ZS5mb250U2l6ZXx8ZS5lbXx8NDgsbD1lLndlaWdodHx8ZS5mb250V2VpZ2h0fHwiIixjPSh0PVtlLnN0eWxlfHxlLmZvbnRTdHlsZXx8IiIsbCxzXS5qb2luKCIgIikrInB4ICIrcixlLm9yaWdpbnx8InRvcCIpO2lmKG4uY2FjaGVbcl0mJnM8PW4uY2FjaGVbcl0uZW0pcmV0dXJuIGEobi5jYWNoZVtyXSxjKTt2YXIgdT1lLmNhbnZhc3x8bi5jYW52YXMsaD11LmdldENvbnRleHQoIjJkIiksZj17dXBwZXI6dm9pZCAwIT09ZS51cHBlcj9lLnVwcGVyOiJIIixsb3dlcjp2b2lkIDAhPT1lLmxvd2VyP2UubG93ZXI6IngiLGRlc2NlbnQ6dm9pZCAwIT09ZS5kZXNjZW50P2UuZGVzY2VudDoicCIsYXNjZW50OnZvaWQgMCE9PWUuYXNjZW50P2UuYXNjZW50OiJoIix0aXR0bGU6dm9pZCAwIT09ZS50aXR0bGU/ZS50aXR0bGU6ImkiLG92ZXJzaG9vdDp2b2lkIDAhPT1lLm92ZXJzaG9vdD9lLm92ZXJzaG9vdDoiTyJ9LHA9TWF0aC5jZWlsKDEuNSpzKTt1LmhlaWdodD1wLHUud2lkdGg9LjUqcCxoLmZvbnQ9dDt2YXIgZD17dG9wOjB9O2guY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPSJ0b3AiLGguZmlsbFN0eWxlPSJibGFjayIsaC5maWxsVGV4dCgiSCIsMCwwKTt2YXIgZz1pKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT0iYm90dG9tIixoLmZpbGxUZXh0KCJIIiwwLHApO3ZhciB2PWkoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QubGluZUhlaWdodD1kLmJvdHRvbT1wLXYrZyxoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsaC5maWxsVGV4dCgiSCIsMCxwKTt2YXIgbT1wLWkoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpLTErZztkLmJhc2VsaW5lPWQuYWxwaGFiZXRpYz1tLGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGguZmlsbFRleHQoIkgiLDAsLjUqcCk7dmFyIHk9aShoLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5tZWRpYW49ZC5taWRkbGU9cC15LTErZy0uNSpwLGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPSJoYW5naW5nIixoLmZpbGxUZXh0KCJIIiwwLC41KnApO3ZhciB4PWkoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QuaGFuZ2luZz1wLXgtMStnLS41KnAsaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9ImlkZW9ncmFwaGljIixoLmZpbGxUZXh0KCJIIiwwLHApO3ZhciBiPWkoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2lmKGQuaWRlb2dyYXBoaWM9cC1iLTErZyxmLnVwcGVyJiYoaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9InRvcCIsaC5maWxsVGV4dChmLnVwcGVyLDAsMCksZC51cHBlcj1pKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSxkLmNhcEhlaWdodD1kLmJhc2VsaW5lLWQudXBwZXIpLGYubG93ZXImJihoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT0idG9wIixoLmZpbGxUZXh0KGYubG93ZXIsMCwwKSxkLmxvd2VyPWkoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpLGQueEhlaWdodD1kLmJhc2VsaW5lLWQubG93ZXIpLGYudGl0dGxlJiYoaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9InRvcCIsaC5maWxsVGV4dChmLnRpdHRsZSwwLDApLGQudGl0dGxlPWkoaC5nZXRJbWFnZURhdGEoMCwwLHAscCkpKSxmLmFzY2VudCYmKGguY2xlYXJSZWN0KDAsMCxwLHApLGgudGV4dEJhc2VsaW5lPSJ0b3AiLGguZmlsbFRleHQoZi5hc2NlbnQsMCwwKSxkLmFzY2VudD1pKGguZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksZi5kZXNjZW50JiYoaC5jbGVhclJlY3QoMCwwLHAscCksaC50ZXh0QmFzZWxpbmU9InRvcCIsaC5maWxsVGV4dChmLmRlc2NlbnQsMCwwKSxkLmRlc2NlbnQ9byhoLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGYub3ZlcnNob290KXtoLmNsZWFyUmVjdCgwLDAscCxwKSxoLnRleHRCYXNlbGluZT0idG9wIixoLmZpbGxUZXh0KGYub3ZlcnNob290LDAsMCk7dmFyIF89byhoLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5vdmVyc2hvb3Q9Xy1tfWZvcih2YXIgdyBpbiBkKWRbd10vPXM7cmV0dXJuIGQuZW09cyxuLmNhY2hlW3JdPWQsYShkLGMpfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj17fTtmb3IodmFyIG4gaW4ic3RyaW5nIj09dHlwZW9mIGUmJihlPXRbZV0pLHQpImVtIiE9PW4mJihyW25dPXRbbl0tZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj0zO248ci5sZW5ndGg7bis9NClpZigwIT09cltuXSlyZXR1cm4gTWF0aC5mbG9vciguMjUqKG4tMykvZSl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj1yLmxlbmd0aC0xO24+MDtuLT00KWlmKDAhPT1yW25dKXJldHVybiBNYXRoLmZsb29yKC4yNSoobi0zKS9lKX1lLmV4cG9ydHM9bixuLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxuLmNhY2hlPXt9fSx7fV0sMjMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGModHx8ZCxudWxsKX07dmFyIG49MCxhPTE7ZnVuY3Rpb24gaSh0LGUscixuLGEsaSl7dGhpcy5fY29sb3I9dCx0aGlzLmtleT1lLHRoaXMudmFsdWU9cix0aGlzLmxlZnQ9bix0aGlzLnJpZ2h0PWEsdGhpcy5fY291bnQ9aX1mdW5jdGlvbiBvKHQpe3JldHVybiBuZXcgaSh0Ll9jb2xvcix0LmtleSx0LnZhbHVlLHQubGVmdCx0LnJpZ2h0LHQuX2NvdW50KX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIG5ldyBpKHQsZS5rZXksZS52YWx1ZSxlLmxlZnQsZS5yaWdodCxlLl9jb3VudCl9ZnVuY3Rpb24gbCh0KXt0Ll9jb3VudD0xKyh0LmxlZnQ/dC5sZWZ0Ll9jb3VudDowKSsodC5yaWdodD90LnJpZ2h0Ll9jb3VudDowKX1mdW5jdGlvbiBjKHQsZSl7dGhpcy5fY29tcGFyZT10LHRoaXMucm9vdD1lfXZhciB1PWMucHJvdG90eXBlO2Z1bmN0aW9uIGgodCxlKXt0aGlzLnRyZWU9dCx0aGlzLl9zdGFjaz1lfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LCJrZXlzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihlLHIpe3QucHVzaChlKX0pLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsInZhbHVlcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oZSxyKXt0LnB1c2gocil9KSx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290P3RoaXMucm9vdC5fY291bnQ6MH19KSx1Lmluc2VydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLl9jb21wYXJlLG89dGhpcy5yb290LHU9W10saD1bXTtvOyl7dmFyIGY9cih0LG8ua2V5KTt1LnB1c2gobyksaC5wdXNoKGYpLG89Zjw9MD9vLmxlZnQ6by5yaWdodH11LnB1c2gobmV3IGkobix0LGUsbnVsbCxudWxsLDEpKTtmb3IodmFyIHA9dS5sZW5ndGgtMjtwPj0wOy0tcCl7bz11W3BdO2hbcF08PTA/dVtwXT1uZXcgaShvLl9jb2xvcixvLmtleSxvLnZhbHVlLHVbcCsxXSxvLnJpZ2h0LG8uX2NvdW50KzEpOnVbcF09bmV3IGkoby5fY29sb3Isby5rZXksby52YWx1ZSxvLmxlZnQsdVtwKzFdLG8uX2NvdW50KzEpfWZvcihwPXUubGVuZ3RoLTE7cD4xOy0tcCl7dmFyIGQ9dVtwLTFdO289dVtwXTtpZihkLl9jb2xvcj09PWF8fG8uX2NvbG9yPT09YSlicmVhazt2YXIgZz11W3AtMl07aWYoZy5sZWZ0PT09ZClpZihkLmxlZnQ9PT1vKXtpZighKHY9Zy5yaWdodCl8fHYuX2NvbG9yIT09bil7aWYoZy5fY29sb3I9bixnLmxlZnQ9ZC5yaWdodCxkLl9jb2xvcj1hLGQucmlnaHQ9Zyx1W3AtMl09ZCx1W3AtMV09byxsKGcpLGwoZCkscD49MykobT11W3AtM10pLmxlZnQ9PT1nP20ubGVmdD1kOm0ucmlnaHQ9ZDticmVha31kLl9jb2xvcj1hLGcucmlnaHQ9cyhhLHYpLGcuX2NvbG9yPW4scC09MX1lbHNle2lmKCEodj1nLnJpZ2h0KXx8di5fY29sb3IhPT1uKXtpZihkLnJpZ2h0PW8ubGVmdCxnLl9jb2xvcj1uLGcubGVmdD1vLnJpZ2h0LG8uX2NvbG9yPWEsby5sZWZ0PWQsby5yaWdodD1nLHVbcC0yXT1vLHVbcC0xXT1kLGwoZyksbChkKSxsKG8pLHA+PTMpKG09dVtwLTNdKS5sZWZ0PT09Zz9tLmxlZnQ9bzptLnJpZ2h0PW87YnJlYWt9ZC5fY29sb3I9YSxnLnJpZ2h0PXMoYSx2KSxnLl9jb2xvcj1uLHAtPTF9ZWxzZSBpZihkLnJpZ2h0PT09byl7aWYoISh2PWcubGVmdCl8fHYuX2NvbG9yIT09bil7aWYoZy5fY29sb3I9bixnLnJpZ2h0PWQubGVmdCxkLl9jb2xvcj1hLGQubGVmdD1nLHVbcC0yXT1kLHVbcC0xXT1vLGwoZyksbChkKSxwPj0zKShtPXVbcC0zXSkucmlnaHQ9PT1nP20ucmlnaHQ9ZDptLmxlZnQ9ZDticmVha31kLl9jb2xvcj1hLGcubGVmdD1zKGEsdiksZy5fY29sb3I9bixwLT0xfWVsc2V7dmFyIHY7aWYoISh2PWcubGVmdCl8fHYuX2NvbG9yIT09bil7dmFyIG07aWYoZC5sZWZ0PW8ucmlnaHQsZy5fY29sb3I9bixnLnJpZ2h0PW8ubGVmdCxvLl9jb2xvcj1hLG8ucmlnaHQ9ZCxvLmxlZnQ9Zyx1W3AtMl09byx1W3AtMV09ZCxsKGcpLGwoZCksbChvKSxwPj0zKShtPXVbcC0zXSkucmlnaHQ9PT1nP20ucmlnaHQ9bzptLmxlZnQ9bzticmVha31kLl9jb2xvcj1hLGcubGVmdD1zKGEsdiksZy5fY29sb3I9bixwLT0xfX1yZXR1cm4gdVswXS5fY29sb3I9YSxuZXcgYyhyLHVbMF0pfSx1LmZvckVhY2g9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMucm9vdClzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbiB0KGUscil7dmFyIG47aWYoci5sZWZ0JiYobj10KGUsci5sZWZ0KSkpcmV0dXJuIG47cmV0dXJuKG49ZShyLmtleSxyLnZhbHVlKSl8fChyLnJpZ2h0P3QoZSxyLnJpZ2h0KTp2b2lkIDApfSh0LHRoaXMucm9vdCk7Y2FzZSAyOnJldHVybiBmdW5jdGlvbiB0KGUscixuLGEpe2lmKHIoZSxhLmtleSk8PTApe3ZhciBpO2lmKGEubGVmdCYmKGk9dChlLHIsbixhLmxlZnQpKSlyZXR1cm4gaTtpZihpPW4oYS5rZXksYS52YWx1ZSkpcmV0dXJuIGl9aWYoYS5yaWdodClyZXR1cm4gdChlLHIsbixhLnJpZ2h0KX0oZSx0aGlzLl9jb21wYXJlLHQsdGhpcy5yb290KTtjYXNlIDM6aWYodGhpcy5fY29tcGFyZShlLHIpPj0wKXJldHVybjtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixhLGkpe3ZhciBvLHM9bihlLGkua2V5KSxsPW4ocixpLmtleSk7aWYoczw9MCl7aWYoaS5sZWZ0JiYobz10KGUscixuLGEsaS5sZWZ0KSkpcmV0dXJuIG87aWYobD4wJiYobz1hKGkua2V5LGkudmFsdWUpKSlyZXR1cm4gb31pZihsPjAmJmkucmlnaHQpcmV0dXJuIHQoZSxyLG4sYSxpLnJpZ2h0KX0oZSxyLHRoaXMuX2NvbXBhcmUsdCx0aGlzLnJvb3QpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsImJlZ2luIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5yb290O2U7KXQucHVzaChlKSxlPWUubGVmdDtyZXR1cm4gbmV3IGgodGhpcyx0KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSwiZW5kIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5yb290O2U7KXQucHVzaChlKSxlPWUucmlnaHQ7cmV0dXJuIG5ldyBoKHRoaXMsdCl9fSksdS5hdD1mdW5jdGlvbih0KXtpZih0PDApcmV0dXJuIG5ldyBoKHRoaXMsW10pO2Zvcih2YXIgZT10aGlzLnJvb3Qscj1bXTs7KXtpZihyLnB1c2goZSksZS5sZWZ0KXtpZih0PGUubGVmdC5fY291bnQpe2U9ZS5sZWZ0O2NvbnRpbnVlfXQtPWUubGVmdC5fY291bnR9aWYoIXQpcmV0dXJuIG5ldyBoKHRoaXMscik7aWYodC09MSwhZS5yaWdodClicmVhaztpZih0Pj1lLnJpZ2h0Ll9jb3VudClicmVhaztlPWUucmlnaHR9cmV0dXJuIG5ldyBoKHRoaXMsW10pfSx1LmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10sYT0wO3I7KXt2YXIgaT1lKHQsci5rZXkpO24ucHVzaChyKSxpPD0wJiYoYT1uLmxlbmd0aCkscj1pPD0wP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1hLG5ldyBoKHRoaXMsbil9LHUuZ3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXSxhPTA7cjspe3ZhciBpPWUodCxyLmtleSk7bi5wdXNoKHIpLGk8MCYmKGE9bi5sZW5ndGgpLHI9aTwwP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1hLG5ldyBoKHRoaXMsbil9LHUubHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2NvbXBhcmUscj10aGlzLnJvb3Qsbj1bXSxhPTA7cjspe3ZhciBpPWUodCxyLmtleSk7bi5wdXNoKHIpLGk+MCYmKGE9bi5sZW5ndGgpLHI9aTw9MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9YSxuZXcgaCh0aGlzLG4pfSx1LmxlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10sYT0wO3I7KXt2YXIgaT1lKHQsci5rZXkpO24ucHVzaChyKSxpPj0wJiYoYT1uLmxlbmd0aCkscj1pPDA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWEsbmV3IGgodGhpcyxuKX0sdS5maW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W107cjspe3ZhciBhPWUodCxyLmtleSk7aWYobi5wdXNoKHIpLDA9PT1hKXJldHVybiBuZXcgaCh0aGlzLG4pO3I9YTw9MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbmV3IGgodGhpcyxbXSl9LHUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZmluZCh0KTtyZXR1cm4gZT9lLnJlbW92ZSgpOnRoaXN9LHUuZ2V0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290O3I7KXt2YXIgbj1lKHQsci5rZXkpO2lmKDA9PT1uKXJldHVybiByLnZhbHVlO3I9bjw9MD9yLmxlZnQ6ci5yaWdodH19O3ZhciBmPWgucHJvdG90eXBlO2Z1bmN0aW9uIHAodCxlKXt0LmtleT1lLmtleSx0LnZhbHVlPWUudmFsdWUsdC5sZWZ0PWUubGVmdCx0LnJpZ2h0PWUucmlnaHQsdC5fY29sb3I9ZS5fY29sb3IsdC5fY291bnQ9ZS5fY291bnR9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1PYmplY3QuZGVmaW5lUHJvcGVydHkoZiwidmFsaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhY2subGVuZ3RoPjB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIm5vZGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhY2subGVuZ3RoPjA/dGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdOm51bGx9LGVudW1lcmFibGU6ITB9KSxmLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBoKHRoaXMudHJlZSx0aGlzLl9zdGFjay5zbGljZSgpKX0sZi5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuIHRoaXMudHJlZTt2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9dFt0Lmxlbmd0aC0xXTtlW2UubGVuZ3RoLTFdPW5ldyBpKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpO2Zvcih2YXIgdT10Lmxlbmd0aC0yO3U+PTA7LS11KXsocj10W3VdKS5sZWZ0PT09dFt1KzFdP2VbdV09bmV3IGkoci5fY29sb3Isci5rZXksci52YWx1ZSxlW3UrMV0sci5yaWdodCxyLl9jb3VudCk6ZVt1XT1uZXcgaShyLl9jb2xvcixyLmtleSxyLnZhbHVlLHIubGVmdCxlW3UrMV0sci5fY291bnQpfWlmKChyPWVbZS5sZW5ndGgtMV0pLmxlZnQmJnIucmlnaHQpe3ZhciBoPWUubGVuZ3RoO2ZvcihyPXIubGVmdDtyLnJpZ2h0OyllLnB1c2gocikscj1yLnJpZ2h0O3ZhciBmPWVbaC0xXTtlLnB1c2gobmV3IGkoci5fY29sb3IsZi5rZXksZi52YWx1ZSxyLmxlZnQsci5yaWdodCxyLl9jb3VudCkpLGVbaC0xXS5rZXk9ci5rZXksZVtoLTFdLnZhbHVlPXIudmFsdWU7Zm9yKHU9ZS5sZW5ndGgtMjt1Pj1oOy0tdSlyPWVbdV0sZVt1XT1uZXcgaShyLl9jb2xvcixyLmtleSxyLnZhbHVlLHIubGVmdCxlW3UrMV0sci5fY291bnQpO2VbaC0xXS5sZWZ0PWVbaF19aWYoKHI9ZVtlLmxlbmd0aC0xXSkuX2NvbG9yPT09bil7dmFyIGQ9ZVtlLmxlbmd0aC0yXTtkLmxlZnQ9PT1yP2QubGVmdD1udWxsOmQucmlnaHQ9PT1yJiYoZC5yaWdodD1udWxsKSxlLnBvcCgpO2Zvcih1PTA7dTxlLmxlbmd0aDsrK3UpZVt1XS5fY291bnQtLTtyZXR1cm4gbmV3IGModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKHIubGVmdHx8ci5yaWdodCl7ci5sZWZ0P3AocixyLmxlZnQpOnIucmlnaHQmJnAocixyLnJpZ2h0KSxyLl9jb2xvcj1hO2Zvcih1PTA7dTxlLmxlbmd0aC0xOysrdSllW3VdLl9jb3VudC0tO3JldHVybiBuZXcgYyh0aGlzLnRyZWUuX2NvbXBhcmUsZVswXSl9aWYoMT09PWUubGVuZ3RoKXJldHVybiBuZXcgYyh0aGlzLnRyZWUuX2NvbXBhcmUsbnVsbCk7Zm9yKHU9MDt1PGUubGVuZ3RoOysrdSllW3VdLl9jb3VudC0tO3ZhciBnPWVbZS5sZW5ndGgtMl07cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLGksYyx1PXQubGVuZ3RoLTE7dT49MDstLXUpe2lmKGU9dFt1XSwwPT09dSlyZXR1cm4gdm9pZChlLl9jb2xvcj1hKTtpZigocj10W3UtMV0pLmxlZnQ9PT1lKXtpZigoaT1yLnJpZ2h0KS5yaWdodCYmaS5yaWdodC5fY29sb3I9PT1uKXJldHVybiBjPShpPXIucmlnaHQ9byhpKSkucmlnaHQ9byhpLnJpZ2h0KSxyLnJpZ2h0PWkubGVmdCxpLmxlZnQ9cixpLnJpZ2h0PWMsaS5fY29sb3I9ci5fY29sb3IsZS5fY29sb3I9YSxyLl9jb2xvcj1hLGMuX2NvbG9yPWEsbChyKSxsKGkpLHU+MSYmKChoPXRbdS0yXSkubGVmdD09PXI/aC5sZWZ0PWk6aC5yaWdodD1pKSx2b2lkKHRbdS0xXT1pKTtpZihpLmxlZnQmJmkubGVmdC5fY29sb3I9PT1uKXJldHVybiBjPShpPXIucmlnaHQ9byhpKSkubGVmdD1vKGkubGVmdCksci5yaWdodD1jLmxlZnQsaS5sZWZ0PWMucmlnaHQsYy5sZWZ0PXIsYy5yaWdodD1pLGMuX2NvbG9yPXIuX2NvbG9yLHIuX2NvbG9yPWEsaS5fY29sb3I9YSxlLl9jb2xvcj1hLGwociksbChpKSxsKGMpLHU+MSYmKChoPXRbdS0yXSkubGVmdD09PXI/aC5sZWZ0PWM6aC5yaWdodD1jKSx2b2lkKHRbdS0xXT1jKTtpZihpLl9jb2xvcj09PWEpe2lmKHIuX2NvbG9yPT09bilyZXR1cm4gci5fY29sb3I9YSx2b2lkKHIucmlnaHQ9cyhuLGkpKTtyLnJpZ2h0PXMobixpKTtjb250aW51ZX1pPW8oaSksci5yaWdodD1pLmxlZnQsaS5sZWZ0PXIsaS5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9bixsKHIpLGwoaSksdT4xJiYoKGg9dFt1LTJdKS5sZWZ0PT09cj9oLmxlZnQ9aTpoLnJpZ2h0PWkpLHRbdS0xXT1pLHRbdV09cix1KzE8dC5sZW5ndGg/dFt1KzFdPWU6dC5wdXNoKGUpLHUrPTJ9ZWxzZXtpZigoaT1yLmxlZnQpLmxlZnQmJmkubGVmdC5fY29sb3I9PT1uKXJldHVybiBjPShpPXIubGVmdD1vKGkpKS5sZWZ0PW8oaS5sZWZ0KSxyLmxlZnQ9aS5yaWdodCxpLnJpZ2h0PXIsaS5sZWZ0PWMsaS5fY29sb3I9ci5fY29sb3IsZS5fY29sb3I9YSxyLl9jb2xvcj1hLGMuX2NvbG9yPWEsbChyKSxsKGkpLHU+MSYmKChoPXRbdS0yXSkucmlnaHQ9PT1yP2gucmlnaHQ9aTpoLmxlZnQ9aSksdm9pZCh0W3UtMV09aSk7aWYoaS5yaWdodCYmaS5yaWdodC5fY29sb3I9PT1uKXJldHVybiBjPShpPXIubGVmdD1vKGkpKS5yaWdodD1vKGkucmlnaHQpLHIubGVmdD1jLnJpZ2h0LGkucmlnaHQ9Yy5sZWZ0LGMucmlnaHQ9cixjLmxlZnQ9aSxjLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj1hLGkuX2NvbG9yPWEsZS5fY29sb3I9YSxsKHIpLGwoaSksbChjKSx1PjEmJigoaD10W3UtMl0pLnJpZ2h0PT09cj9oLnJpZ2h0PWM6aC5sZWZ0PWMpLHZvaWQodFt1LTFdPWMpO2lmKGkuX2NvbG9yPT09YSl7aWYoci5fY29sb3I9PT1uKXJldHVybiByLl9jb2xvcj1hLHZvaWQoci5sZWZ0PXMobixpKSk7ci5sZWZ0PXMobixpKTtjb250aW51ZX12YXIgaDtpPW8oaSksci5sZWZ0PWkucmlnaHQsaS5yaWdodD1yLGkuX2NvbG9yPXIuX2NvbG9yLHIuX2NvbG9yPW4sbChyKSxsKGkpLHU+MSYmKChoPXRbdS0yXSkucmlnaHQ9PT1yP2gucmlnaHQ9aTpoLmxlZnQ9aSksdFt1LTFdPWksdFt1XT1yLHUrMTx0Lmxlbmd0aD90W3UrMV09ZTp0LnB1c2goZSksdSs9Mn19fShlKSxnLmxlZnQ9PT1yP2cubGVmdD1udWxsOmcucmlnaHQ9bnVsbCxuZXcgYyh0aGlzLnRyZWUuX2NvbXBhcmUsZVswXSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCJrZXkiLHtnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdGFjay5sZW5ndGg+MClyZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdLmtleX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV0udmFsdWV9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwiaW5kZXgiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD0wLGU9dGhpcy5fc3RhY2s7aWYoMD09PWUubGVuZ3RoKXt2YXIgcj10aGlzLnRyZWUucm9vdDtyZXR1cm4gcj9yLl9jb3VudDowfWVbZS5sZW5ndGgtMV0ubGVmdCYmKHQ9ZVtlLmxlbmd0aC0xXS5sZWZ0Ll9jb3VudCk7Zm9yKHZhciBuPWUubGVuZ3RoLTI7bj49MDstLW4pZVtuKzFdPT09ZVtuXS5yaWdodCYmKCsrdCxlW25dLmxlZnQmJih0Kz1lW25dLmxlZnQuX2NvdW50KSk7cmV0dXJuIHR9LGVudW1lcmFibGU6ITB9KSxmLm5leHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwIT09dC5sZW5ndGgpe3ZhciBlPXRbdC5sZW5ndGgtMV07aWYoZS5yaWdodClmb3IoZT1lLnJpZ2h0O2U7KXQucHVzaChlKSxlPWUubGVmdDtlbHNlIGZvcih0LnBvcCgpO3QubGVuZ3RoPjAmJnRbdC5sZW5ndGgtMV0ucmlnaHQ9PT1lOyllPXRbdC5sZW5ndGgtMV0sdC5wb3AoKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCJoYXNOZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiExO2lmKHRbdC5sZW5ndGgtMV0ucmlnaHQpcmV0dXJuITA7Zm9yKHZhciBlPXQubGVuZ3RoLTE7ZT4wOy0tZSlpZih0W2UtMV0ubGVmdD09PXRbZV0pcmV0dXJuITA7cmV0dXJuITF9fSksZi51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3RhY2s7aWYoMD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgdXBkYXRlIGVtcHR5IG5vZGUhIik7dmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoKSxuPWVbZS5sZW5ndGgtMV07cltyLmxlbmd0aC0xXT1uZXcgaShuLl9jb2xvcixuLmtleSx0LG4ubGVmdCxuLnJpZ2h0LG4uX2NvdW50KTtmb3IodmFyIGE9ZS5sZW5ndGgtMjthPj0wOy0tYSkobj1lW2FdKS5sZWZ0PT09ZVthKzFdP3JbYV09bmV3IGkobi5fY29sb3Isbi5rZXksbi52YWx1ZSxyW2ErMV0sbi5yaWdodCxuLl9jb3VudCk6clthXT1uZXcgaShuLl9jb2xvcixuLmtleSxuLnZhbHVlLG4ubGVmdCxyW2ErMV0sbi5fY291bnQpO3JldHVybiBuZXcgYyh0aGlzLnRyZWUuX2NvbXBhcmUsclswXSl9LGYucHJldj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDAhPT10Lmxlbmd0aCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtpZihlLmxlZnQpZm9yKGU9ZS5sZWZ0O2U7KXQucHVzaChlKSxlPWUucmlnaHQ7ZWxzZSBmb3IodC5wb3AoKTt0Lmxlbmd0aD4wJiZ0W3QubGVuZ3RoLTFdLmxlZnQ9PT1lOyllPXRbdC5sZW5ndGgtMV0sdC5wb3AoKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCJoYXNQcmV2Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiExO2lmKHRbdC5sZW5ndGgtMV0ubGVmdClyZXR1cm4hMDtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPjA7LS1lKWlmKHRbZS0xXS5yaWdodD09PXRbZV0pcmV0dXJuITA7cmV0dXJuITF9fSl9LHt9XSwyMzQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1bLjk5OTk5OTk5OTk5OTgwOTksNjc2LjUyMDM2ODEyMTg4NTEsLTEyNTkuMTM5MjE2NzIyNDAyOCw3NzEuMzIzNDI4Nzc3NjUzMSwtMTc2LjYxNTAyOTE2MjE0MDYsMTIuNTA3MzQzMjc4Njg2OTA1LC0uMTM4NTcxMDk1MjY1NzIwMTIsOTk4NDM2OTU3ODAxOTU3MmUtMjEsMS41MDU2MzI3MzUxNDkzMTE2ZS03XSxhPTYwNy8xMjgsaT1bLjk5OTk5OTk5OTk5OTk5NzEsNTcuMTU2MjM1NjY1ODYyOTIsLTU5LjU5Nzk2MDM1NTQ3NTQ5LDE0LjEzNjA5Nzk3NDc0MTc0NiwtLjQ5MTkxMzgxNjA5NzYyMDIsMzM5OTQ2NDk5ODQ4MTE4OWUtMjAsNDY1MjM2Mjg5MjcwNDg1OGUtMjAsLTk4Mzc0NDc1MzA0ODc5NTZlLTIwLC4wMDAxNTgwODg3MDMyMjQ5MTI1LC0uMDAwMjEwMjY0NDQxNzI0MTA0ODgsLjAwMDIxNzQzOTYxODExNTIxMjY1LC0uMDAwMTY0MzE4MTA2NTM2NzYzOSw4NDQxODIyMzk4Mzg1Mjc1ZS0yMCwtMjYxOTA4Mzg0MDE1ODE0MDhlLTIxLDM2ODk5MTgyNjU5NTMxNjI1ZS0yMl07ZnVuY3Rpb24gbyh0KXtpZih0PDApcmV0dXJuIE51bWJlcigiMC8wIik7Zm9yKHZhciBlPWlbMF0scj1pLmxlbmd0aC0xO3I+MDstLXIpZSs9aVtyXS8odCtyKTt2YXIgbj10K2ErLjU7cmV0dXJuLjUqTWF0aC5sb2coMipNYXRoLlBJKSsodCsuNSkqTWF0aC5sb2cobiktbitNYXRoLmxvZyhlKS1NYXRoLmxvZyh0KX1lLmV4cG9ydHM9ZnVuY3Rpb24gdChlKXtpZihlPC41KXJldHVybiBNYXRoLlBJLyhNYXRoLnNpbihNYXRoLlBJKmUpKnQoMS1lKSk7aWYoZT4xMDApcmV0dXJuIE1hdGguZXhwKG8oZSkpO2UtPTE7Zm9yKHZhciByPW5bMF0sYT0xO2E8OTthKyspcis9blthXS8oZSthKTt2YXIgaT1lKzcrLjU7cmV0dXJuIE1hdGguc3FydCgyKk1hdGguUEkpKk1hdGgucG93KGksZSsuNSkqTWF0aC5leHAoLWkpKnJ9LGUuZXhwb3J0cy5sb2c9b30se31dLDIzNTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHNwZWNpZnkgdHlwZSBzdHJpbmciKTtpZihlPWV8fHt9LCJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnQmJiFlLmNhbnZhcylyZXR1cm4gbnVsbDt2YXIgcj1lLmNhbnZhc3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Im51bWJlciI9PXR5cGVvZiBlLndpZHRoJiYoci53aWR0aD1lLndpZHRoKTsibnVtYmVyIj09dHlwZW9mIGUuaGVpZ2h0JiYoci5oZWlnaHQ9ZS5oZWlnaHQpO3ZhciBuLGE9ZTt0cnl7dmFyIGk9W3RdOzA9PT10LmluZGV4T2YoIndlYmdsIikmJmkucHVzaCgiZXhwZXJpbWVudGFsLSIrdCk7Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspaWYobj1yLmdldENvbnRleHQoaVtvXSxhKSlyZXR1cm4gbn1jYXRjaCh0KXtuPW51bGx9cmV0dXJuIG58fG51bGx9fSx7fV0sMjM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyB1KHQpO3JldHVybiByLnVwZGF0ZShlKSxyfTt2YXIgbj10KCIuL2xpYi90ZXh0LmpzIiksYT10KCIuL2xpYi9saW5lcy5qcyIpLGk9dCgiLi9saWIvYmFja2dyb3VuZC5qcyIpLG89dCgiLi9saWIvY3ViZS5qcyIpLHM9dCgiLi9saWIvdGlja3MuanMiKSxsPW5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKTtmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gdSh0KXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sdGhpcy50aWNrcz1bW10sW10sW11dLHRoaXMuYXV0b1RpY2tzPSEwLHRoaXMudGlja1NwYWNpbmc9WzEsMSwxXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLnRpY2tGb250PVsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy50aWNrU2l6ZT1bMTIsMTIsMTJdLHRoaXMudGlja0FuZ2xlPVswLDAsMF0sdGhpcy50aWNrQWxpZ249WyJhdXRvIiwiYXV0byIsImF1dG8iXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTAsMTAsMTBdLHRoaXMubGFzdEN1YmVQcm9wcz17Y3ViZUVkZ2VzOlswLDAsMF0sYXhpczpbMCwwLDBdfSx0aGlzLmxhYmVscz1bIngiLCJ5IiwieiJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxhYmVsRm9udD0ic2Fucy1zZXJpZiIsdGhpcy5sYWJlbFNpemU9WzIwLDIwLDIwXSx0aGlzLmxhYmVsQW5nbGU9WzAsMCwwXSx0aGlzLmxhYmVsQWxpZ249WyJhdXRvIiwiYXV0byIsImF1dG8iXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxMCwxMCwxMF0sdGhpcy5saW5lRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGluZVRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVUaWNrTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lVGlja0xlbmd0aD1bMCwwLDBdLHRoaXMubGluZVRpY2tXaWR0aD1bMSwxLDFdLHRoaXMubGluZVRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZEVuYWJsZT1bITAsITAsITBdLHRoaXMuZ3JpZFdpZHRoPVsxLDEsMV0sdGhpcy5ncmlkQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9FbmFibGU9WyEwLCEwLCEwXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9MaW5lV2lkdGg9WzIsMiwyXSx0aGlzLmJhY2tncm91bmRFbmFibGU9WyExLCExLCExXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV1dLHRoaXMuX2ZpcnN0SW5pdD0hMCx0aGlzLl90ZXh0PW51bGwsdGhpcy5fbGluZXM9bnVsbCx0aGlzLl9iYWNrZ3JvdW5kPWkodCl9dmFyIGg9dS5wcm90b3R5cGU7ZnVuY3Rpb24gZigpe3RoaXMucHJpbWFsT2Zmc2V0PVswLDAsMF0sdGhpcy5wcmltYWxNaW5vcj1bMCwwLDBdLHRoaXMubWlycm9yT2Zmc2V0PVswLDAsMF0sdGhpcy5taXJyb3JNaW5vcj1bMCwwLDBdfWgudXBkYXRlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pe2lmKG4gaW4gdCl7dmFyIGEsaT10W25dLG89dGhpc1tuXTsoZT9BcnJheS5pc0FycmF5KGkpJiZBcnJheS5pc0FycmF5KGlbMF0pOkFycmF5LmlzQXJyYXkoaSkpP3RoaXNbbl09YT1bcihpWzBdKSxyKGlbMV0pLHIoaVsyXSldOnRoaXNbbl09YT1bcihpKSxyKGkpLHIoaSldO2Zvcih2YXIgcz0wO3M8MzsrK3MpaWYoYVtzXSE9PW9bc10pcmV0dXJuITB9cmV0dXJuITF9dD10fHx7fTt2YXIgcixpPWUuYmluZCh0aGlzLCExLE51bWJlciksbz1lLmJpbmQodGhpcywhMSxCb29sZWFuKSxsPWUuYmluZCh0aGlzLCExLFN0cmluZyksYz1lLmJpbmQodGhpcywhMCxmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtpZigzPT09dC5sZW5ndGgpcmV0dXJuWyt0WzBdLCt0WzFdLCt0WzJdLDFdO2lmKDQ9PT10Lmxlbmd0aClyZXR1cm5bK3RbMF0sK3RbMV0sK3RbMl0sK3RbM11dfXJldHVyblswLDAsMCwxXX0pLHU9ITEsaD0hMTtpZigiYm91bmRzImluIHQpZm9yKHZhciBmPXQuYm91bmRzLHA9MDtwPDI7KytwKWZvcih2YXIgZD0wO2Q8MzsrK2QpZltwXVtkXSE9PXRoaXMuYm91bmRzW3BdW2RdJiYoaD0hMCksdGhpcy5ib3VuZHNbcF1bZF09ZltwXVtkXTtpZigidGlja3MiaW4gdCl7cj10LnRpY2tzLHU9ITAsdGhpcy5hdXRvVGlja3M9ITE7Zm9yKHA9MDtwPDM7KytwKXRoaXMudGlja1NwYWNpbmdbcF09MH1lbHNlIGkoInRpY2tTcGFjaW5nIikmJih0aGlzLmF1dG9UaWNrcz0hMCxoPSEwKTtpZih0aGlzLl9maXJzdEluaXQmJigidGlja3MiaW4gdHx8InRpY2tTcGFjaW5nImluIHR8fCh0aGlzLmF1dG9UaWNrcz0hMCksaD0hMCx1PSEwLHRoaXMuX2ZpcnN0SW5pdD0hMSksaCYmdGhpcy5hdXRvVGlja3MmJihyPXMuY3JlYXRlKHRoaXMuYm91bmRzLHRoaXMudGlja1NwYWNpbmcpLHU9ITApLHUpe2ZvcihwPTA7cDwzOysrcClyW3BdLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54LWUueH0pO3MuZXF1YWwocix0aGlzLnRpY2tzKT91PSExOnRoaXMudGlja3M9cn1vKCJ0aWNrRW5hYmxlIiksbCgidGlja0ZvbnQiKSYmKHU9ITApLGkoInRpY2tTaXplIiksaSgidGlja0FuZ2xlIiksaSgidGlja1BhZCIpLGMoInRpY2tDb2xvciIpO3ZhciBnPWwoImxhYmVscyIpO2woImxhYmVsRm9udCIpJiYoZz0hMCksbygibGFiZWxFbmFibGUiKSxpKCJsYWJlbFNpemUiKSxpKCJsYWJlbFBhZCIpLGMoImxhYmVsQ29sb3IiKSxvKCJsaW5lRW5hYmxlIiksbygibGluZU1pcnJvciIpLGkoImxpbmVXaWR0aCIpLGMoImxpbmVDb2xvciIpLG8oImxpbmVUaWNrRW5hYmxlIiksbygibGluZVRpY2tNaXJyb3IiKSxpKCJsaW5lVGlja0xlbmd0aCIpLGkoImxpbmVUaWNrV2lkdGgiKSxjKCJsaW5lVGlja0NvbG9yIiksbygiZ3JpZEVuYWJsZSIpLGkoImdyaWRXaWR0aCIpLGMoImdyaWRDb2xvciIpLG8oInplcm9FbmFibGUiKSxjKCJ6ZXJvTGluZUNvbG9yIiksaSgiemVyb0xpbmVXaWR0aCIpLG8oImJhY2tncm91bmRFbmFibGUiKSxjKCJiYWNrZ3JvdW5kQ29sb3IiKSx0aGlzLl90ZXh0P3RoaXMuX3RleHQmJihnfHx1KSYmdGhpcy5fdGV4dC51cGRhdGUodGhpcy5ib3VuZHMsdGhpcy5sYWJlbHMsdGhpcy5sYWJlbEZvbnQsdGhpcy50aWNrcyx0aGlzLnRpY2tGb250KTp0aGlzLl90ZXh0PW4odGhpcy5nbCx0aGlzLmJvdW5kcyx0aGlzLmxhYmVscyx0aGlzLmxhYmVsRm9udCx0aGlzLnRpY2tzLHRoaXMudGlja0ZvbnQpLHRoaXMuX2xpbmVzJiZ1JiYodGhpcy5fbGluZXMuZGlzcG9zZSgpLHRoaXMuX2xpbmVzPW51bGwpLHRoaXMuX2xpbmVzfHwodGhpcy5fbGluZXM9YSh0aGlzLmdsLHRoaXMuYm91bmRzLHRoaXMudGlja3MpKX07dmFyIHA9W25ldyBmLG5ldyBmLG5ldyBmXTtmdW5jdGlvbiBkKHQsZSxyLG4sYSl7Zm9yKHZhciBpPXQucHJpbWFsT2Zmc2V0LG89dC5wcmltYWxNaW5vcixzPXQubWlycm9yT2Zmc2V0LGw9dC5taXJyb3JNaW5vcixjPW5bZV0sdT0wO3U8MzsrK3UpaWYoZSE9PXUpe3ZhciBoPWksZj1zLHA9byxkPWw7YyYxPDx1JiYoaD1zLGY9aSxwPWwsZD1vKSxoW3VdPXJbMF1bdV0sZlt1XT1yWzFdW3VdLGFbdV0+MD8ocFt1XT0tMSxkW3VdPTApOihwW3VdPTAsZFt1XT0xKX19dmFyIGc9WzAsMCwwXSx2PXttb2RlbDpsLHZpZXc6bCxwcm9qZWN0aW9uOmwsX29ydGhvOiExfTtoLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiExfSxoLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXt9O3ZhciBtPVswLDAsMF0seT1bMCwwLDBdLHg9WzAsMCwwXTtoLmRyYXc9ZnVuY3Rpb24odCl7dD10fHx2O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8bCxuPXQudmlld3x8bCxhPXQucHJvamVjdGlvbnx8bCxpPXRoaXMuYm91bmRzLHM9dC5fb3J0aG98fCExLHU9byhyLG4sYSxpLHMpLGg9dS5jdWJlRWRnZXMsZj11LmF4aXMsYj1uWzEyXSxfPW5bMTNdLHc9blsxNF0saz1uWzE1XSxUPShzPzI6MSkqdGhpcy5waXhlbFJhdGlvKihhWzNdKmIrYVs3XSpfK2FbMTFdKncrYVsxNV0qaykvZS5kcmF3aW5nQnVmZmVySGVpZ2h0LE09MDtNPDM7KytNKXRoaXMubGFzdEN1YmVQcm9wcy5jdWJlRWRnZXNbTV09aFtNXSx0aGlzLmxhc3RDdWJlUHJvcHMuYXhpc1tNXT1mW01dO3ZhciBBPXA7Zm9yKE09MDtNPDM7KytNKWQocFtNXSxNLHRoaXMuYm91bmRzLGgsZik7ZT10aGlzLmdsO3ZhciBTLEU9Zztmb3IoTT0wO008MzsrK00pdGhpcy5iYWNrZ3JvdW5kRW5hYmxlW01dP0VbTV09ZltNXTpFW01dPTA7dGhpcy5fYmFja2dyb3VuZC5kcmF3KHIsbixhLGksRSx0aGlzLmJhY2tncm91bmRDb2xvciksdGhpcy5fbGluZXMuYmluZChyLG4sYSx0aGlzKTtmb3IoTT0wO008MzsrK00pe3ZhciBMPVswLDAsMF07ZltNXT4wP0xbTV09aVsxXVtNXTpMW01dPWlbMF1bTV07Zm9yKHZhciBDPTA7QzwyOysrQyl7dmFyIFA9KE0rMStDKSUzLE89KE0rMSsoMV5DKSklMzt0aGlzLmdyaWRFbmFibGVbUF0mJnRoaXMuX2xpbmVzLmRyYXdHcmlkKFAsTyx0aGlzLmJvdW5kcyxMLHRoaXMuZ3JpZENvbG9yW1BdLHRoaXMuZ3JpZFdpZHRoW1BdKnRoaXMucGl4ZWxSYXRpbyl9Zm9yKEM9MDtDPDI7KytDKXtQPShNKzErQyklMyxPPShNKzErKDFeQykpJTM7dGhpcy56ZXJvRW5hYmxlW09dJiZNYXRoLm1pbihpWzBdW09dLGlbMV1bT10pPD0wJiZNYXRoLm1heChpWzBdW09dLGlbMV1bT10pPj0wJiZ0aGlzLl9saW5lcy5kcmF3WmVybyhQLE8sdGhpcy5ib3VuZHMsTCx0aGlzLnplcm9MaW5lQ29sb3JbT10sdGhpcy56ZXJvTGluZVdpZHRoW09dKnRoaXMucGl4ZWxSYXRpbyl9fWZvcihNPTA7TTwzOysrTSl7dGhpcy5saW5lRW5hYmxlW01dJiZ0aGlzLl9saW5lcy5kcmF3QXhpc0xpbmUoTSx0aGlzLmJvdW5kcyxBW01dLnByaW1hbE9mZnNldCx0aGlzLmxpbmVDb2xvcltNXSx0aGlzLmxpbmVXaWR0aFtNXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZU1pcnJvcltNXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKE0sdGhpcy5ib3VuZHMsQVtNXS5taXJyb3JPZmZzZXQsdGhpcy5saW5lQ29sb3JbTV0sdGhpcy5saW5lV2lkdGhbTV0qdGhpcy5waXhlbFJhdGlvKTt2YXIgej1jKG0sQVtNXS5wcmltYWxNaW5vciksST1jKHksQVtNXS5taXJyb3JNaW5vciksRD10aGlzLmxpbmVUaWNrTGVuZ3RoO2ZvcihDPTA7QzwzOysrQyl7dmFyIFI9VC9yWzUqQ107eltDXSo9RFtDXSpSLElbQ10qPURbQ10qUn10aGlzLmxpbmVUaWNrRW5hYmxlW01dJiZ0aGlzLl9saW5lcy5kcmF3QXhpc1RpY2tzKE0sQVtNXS5wcmltYWxPZmZzZXQseix0aGlzLmxpbmVUaWNrQ29sb3JbTV0sdGhpcy5saW5lVGlja1dpZHRoW01dKnRoaXMucGl4ZWxSYXRpbyksdGhpcy5saW5lVGlja01pcnJvcltNXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhNLEFbTV0ubWlycm9yT2Zmc2V0LEksdGhpcy5saW5lVGlja0NvbG9yW01dLHRoaXMubGluZVRpY2tXaWR0aFtNXSp0aGlzLnBpeGVsUmF0aW8pfXRoaXMuX2xpbmVzLnVuYmluZCgpLHRoaXMuX3RleHQuYmluZChyLG4sYSx0aGlzLnBpeGVsUmF0aW8pO3ZhciBGLEI7ZnVuY3Rpb24gTih0KXsoQj1bMCwwLDBdKVt0XT0xfWZ1bmN0aW9uIGoodCxlLHIpe3ZhciBuPSh0KzEpJTMsYT0odCsyKSUzLGk9ZVtuXSxvPWVbYV0scz1yW25dLGw9clthXTtpPjAmJmw+MD9OKG4pOmk+MCYmbDwwP04obik6aTwwJiZsPjA/TihuKTppPDAmJmw8MD9OKG4pOm8+MCYmcz4wP04oYSk6bz4wJiZzPDA/TihhKTpvPDAmJnM+MD9OKGEpOm88MCYmczwwJiZOKGEpfWZvcihNPTA7TTwzOysrTSl7dmFyIFY9QVtNXS5wcmltYWxNaW5vcixVPUFbTV0ubWlycm9yTWlub3IscT1jKHgsQVtNXS5wcmltYWxPZmZzZXQpO2ZvcihDPTA7QzwzOysrQyl0aGlzLmxpbmVUaWNrRW5hYmxlW01dJiYocVtDXSs9VCpWW0NdKk1hdGgubWF4KHRoaXMubGluZVRpY2tMZW5ndGhbQ10sMCkvcls1KkNdKTt2YXIgSD1bMCwwLDBdO2lmKEhbTV09MSx0aGlzLnRpY2tFbmFibGVbTV0pey0zNjAwPT09dGhpcy50aWNrQW5nbGVbTV0/KHRoaXMudGlja0FuZ2xlW01dPTAsdGhpcy50aWNrQWxpZ25bTV09ImF1dG8iKTp0aGlzLnRpY2tBbGlnbltNXT0tMSxGPTEsImF1dG8iPT09KFM9W3RoaXMudGlja0FsaWduW01dLC41LEZdKVswXT9TWzBdPTA6U1swXT1wYXJzZUludCgiIitTWzBdKSxCPVswLDAsMF0saihNLFYsVSk7Zm9yKEM9MDtDPDM7KytDKXFbQ10rPVQqVltDXSp0aGlzLnRpY2tQYWRbQ10vcls1KkNdO3RoaXMuX3RleHQuZHJhd1RpY2tzKE0sdGhpcy50aWNrU2l6ZVtNXSx0aGlzLnRpY2tBbmdsZVtNXSxxLHRoaXMudGlja0NvbG9yW01dLEgsQixTKX1pZih0aGlzLmxhYmVsRW5hYmxlW01dKXtGPTAsQj1bMCwwLDBdLHRoaXMubGFiZWxzW01dLmxlbmd0aD40JiYoTihNKSxGPTEpLCJhdXRvIj09PShTPVt0aGlzLmxhYmVsQWxpZ25bTV0sLjUsRl0pWzBdP1NbMF09MDpTWzBdPXBhcnNlSW50KCIiK1NbMF0pO2ZvcihDPTA7QzwzOysrQylxW0NdKz1UKlZbQ10qdGhpcy5sYWJlbFBhZFtDXS9yWzUqQ107cVtNXSs9LjUqKGlbMF1bTV0raVsxXVtNXSksdGhpcy5fdGV4dC5kcmF3TGFiZWwoTSx0aGlzLmxhYmVsU2l6ZVtNXSx0aGlzLmxhYmVsQW5nbGVbTV0scSx0aGlzLmxhYmVsQ29sb3JbTV0sWzAsMCwwXSxCLFMpfX10aGlzLl90ZXh0LnVuYmluZCgpfSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl90ZXh0LmRpc3Bvc2UoKSx0aGlzLl9saW5lcy5kaXNwb3NlKCksdGhpcy5fYmFja2dyb3VuZC5kaXNwb3NlKCksdGhpcy5fbGluZXM9bnVsbCx0aGlzLl90ZXh0PW51bGwsdGhpcy5fYmFja2dyb3VuZD1udWxsLHRoaXMuZ2w9bnVsbH19LHsiLi9saWIvYmFja2dyb3VuZC5qcyI6MjM3LCIuL2xpYi9jdWJlLmpzIjoyMzgsIi4vbGliL2xpbmVzLmpzIjoyMzksIi4vbGliL3RleHQuanMiOjI0MSwiLi9saWIvdGlja3MuanMiOjI0Mn1dLDIzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9W10scz0wLGw9MDtsPDM7KytsKWZvcih2YXIgYz0obCsxKSUzLHU9KGwrMiklMyxoPVswLDAsMF0sZj1bMCwwLDBdLHA9LTE7cDw9MTtwKz0yKXtyLnB1c2gocyxzKzIscysxLHMrMSxzKzIscyszKSxoW2xdPXAsZltsXT1wO2Zvcih2YXIgZD0tMTtkPD0xO2QrPTIpe2hbY109ZDtmb3IodmFyIGc9LTE7Zzw9MTtnKz0yKWhbdV09ZyxlLnB1c2goaFswXSxoWzFdLGhbMl0sZlswXSxmWzFdLGZbMl0pLHMrPTF9dmFyIHY9YztjPXUsdT12fXZhciBtPW4odCxuZXcgRmxvYXQzMkFycmF5KGUpKSx5PW4odCxuZXcgVWludDE2QXJyYXkociksdC5FTEVNRU5UX0FSUkFZX0JVRkZFUikseD1hKHQsW3tidWZmZXI6bSx0eXBlOnQuRkxPQVQsc2l6ZTozLG9mZnNldDowLHN0cmlkZToyNH0se2J1ZmZlcjptLHR5cGU6dC5GTE9BVCxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZToyNH1dLHkpLGI9aSh0KTtyZXR1cm4gYi5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsYi5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0xLG5ldyBvKHQsbSx4LGIpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLGk9dCgiLi9zaGFkZXJzIikuYmc7ZnVuY3Rpb24gbyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW59dmFyIHM9by5wcm90b3R5cGU7cy5kcmF3PWZ1bmN0aW9uKHQsZSxyLG4sYSxpKXtmb3IodmFyIG89ITEscz0wO3M8MzsrK3Mpbz1vfHxhW3NdO2lmKG8pe3ZhciBsPXRoaXMuZ2w7bC5lbmFibGUobC5QT0xZR09OX09GRlNFVF9GSUxMKSxsLnBvbHlnb25PZmZzZXQoMSwyKSx0aGlzLnNoYWRlci5iaW5kKCksdGhpcy5zaGFkZXIudW5pZm9ybXM9e21vZGVsOnQsdmlldzplLHByb2plY3Rpb246cixib3VuZHM6bixlbmFibGU6YSxjb2xvcnM6aX0sdGhpcy52YW8uYmluZCgpLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsMzYpLHRoaXMudmFvLnVuYmluZCgpLGwuZGlzYWJsZShsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpfX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MjQwLCJnbC1idWZmZXIiOjI0NCwiZ2wtdmFvIjozMjl9XSwyMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkscCl7YShzLGUsdCksYShzLHIscyk7Zm9yKHZhciB5PTAseD0wO3g8MjsrK3gpe3VbMl09aVt4XVsyXTtmb3IodmFyIGI9MDtiPDI7KytiKXt1WzFdPWlbYl1bMV07Zm9yKHZhciBfPTA7XzwyOysrXyl1WzBdPWlbX11bMF0sZihsW3ldLHUscykseSs9MX19Zm9yKHZhciB3PS0xLHg9MDt4PDg7Kyt4KXtmb3IodmFyIGs9bFt4XVszXSxUPTA7VDwzOysrVCljW3hdW1RdPWxbeF1bVF0vaztwJiYoY1t4XVsyXSo9LTEpLGs8MCYmKHc8MD93PXg6Y1t4XVsyXTxjW3ddWzJdJiYodz14KSl9aWYodzwwKXt3PTA7Zm9yKHZhciBNPTA7TTwzOysrTSl7Zm9yKHZhciBBPShNKzIpJTMsUz0oTSsxKSUzLEU9LTEsTD0tMSxDPTA7QzwyOysrQyl7dmFyIFA9Qzw8TSxPPVArKEM8PEEpKygxLUM8PFMpLHo9UCsoMS1DPDxBKSsoQzw8Uyk7byhjW1BdLGNbT10sY1t6XSxoKTwwfHwoQz9FPTE6TD0xKX1pZihFPDB8fEw8MClMPkUmJih3fD0xPDxNKTtlbHNle2Zvcih2YXIgQz0wO0M8MjsrK0Mpe3ZhciBQPUM8PE0sTz1QKyhDPDxBKSsoMS1DPDxTKSx6PVArKDEtQzw8QSkrKEM8PFMpLEk9ZChbbFtQXSxsW09dLGxbel0sbFtQKygxPDxBKSsoMTw8UyldXSk7Qz9FPUk6TD1JfUw+RSYmKHd8PTE8PE0pfX19Zm9yKHZhciBEPTdedyxSPS0xLHg9MDt4PDg7Kyt4KXghPT13JiZ4IT09RCYmKFI8MD9SPXg6Y1tSXVsxXT5jW3hdWzFdJiYoUj14KSk7Zm9yKHZhciBGPS0xLHg9MDt4PDM7Kyt4KXt2YXIgQj1SXjE8PHg7aWYoQiE9PXcmJkIhPT1EKXtGPDAmJihGPUIpO3ZhciBTPWNbQl07U1swXTxjW0ZdWzBdJiYoRj1CKX19Zm9yKHZhciBOPS0xLHg9MDt4PDM7Kyt4KXt2YXIgQj1SXjE8PHg7aWYoQiE9PXcmJkIhPT1EJiZCIT09Ril7TjwwJiYoTj1CKTt2YXIgUz1jW0JdO1NbMF0+Y1tOXVswXSYmKE49Qil9fXZhciBqPWc7alswXT1qWzFdPWpbMl09MCxqW24ubG9nMihGXlIpXT1SJkYsaltuLmxvZzIoUl5OKV09UiZOO3ZhciBWPTdeTjtWPT09d3x8Vj09PUQ/KFY9N15GLGpbbi5sb2cyKE5eVildPVYmTik6altuLmxvZzIoRl5WKV09ViZGO2Zvcih2YXIgVT12LHE9dyxNPTA7TTwzOysrTSlVW01dPXEmMTw8TT8tMToxO3JldHVybiBtfTt2YXIgbj10KCJiaXQtdHdpZGRsZSIpLGE9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGk9dCgic3BsaXQtcG9seWdvbiIpLG89dCgicm9idXN0LW9yaWVudGF0aW9uIikscz1uZXcgQXJyYXkoMTYpLGw9bmV3IEFycmF5KDgpLGM9bmV3IEFycmF5KDgpLHU9bmV3IEFycmF5KDMpLGg9WzAsMCwwXTtmdW5jdGlvbiBmKHQsZSxyKXtmb3IodmFyIG49MDtuPDQ7KytuKXt0W25dPXJbMTIrbl07Zm9yKHZhciBhPTA7YTwzOysrYSl0W25dKz1lW2FdKnJbNCphK25dfX0hZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDg7Kyt0KWxbdF09WzEsMSwxLDFdLGNbdF09WzEsMSwxXX0oKTt2YXIgcD1bWzAsMCwxLDAsMF0sWzAsMCwtMSwxLDBdLFswLC0xLDAsMSwwXSxbMCwxLDAsMSwwXSxbLTEsMCwwLDEsMF0sWzEsMCwwLDEsMF1dO2Z1bmN0aW9uIGQodCl7Zm9yKHZhciBlPTA7ZTxwLmxlbmd0aDsrK2UpaWYoKHQ9aS5wb3NpdGl2ZSh0LHBbZV0pKS5sZW5ndGg8MylyZXR1cm4gMDt2YXIgcj10WzBdLG49clswXS9yWzNdLGE9clsxXS9yWzNdLG89MDtmb3IoZT0xO2UrMTx0Lmxlbmd0aDsrK2Upe3ZhciBzPXRbZV0sbD10W2UrMV0sYz1zWzBdL3NbM10tbix1PXNbMV0vc1szXS1hLGg9bFswXS9sWzNdLW4sZj1sWzFdL2xbM10tYTtvKz1NYXRoLmFicyhjKmYtdSpoKX1yZXR1cm4gb312YXIgZz1bMSwxLDFdLHY9WzAsMCwwXSxtPXtjdWJlRWRnZXM6ZyxheGlzOnZ9fSx7ImJpdC10d2lkZGxlIjo5NCwiZ2wtbWF0NC9tdWx0aXBseSI6MjcwLCJyb2J1c3Qtb3JpZW50YXRpb24iOjUwOSwic3BsaXQtcG9seWdvbiI6NTI2fV0sMjM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG89W10scz1bMCwwLDBdLGw9WzAsMCwwXSxjPVswLDAsMF0sdT1bMCwwLDBdO28ucHVzaCgwLDAsMSwwLDEsMSwwLDAsLTEsMCwwLC0xLDAsMSwxLDAsMSwtMSk7Zm9yKHZhciBoPTA7aDwzOysraCl7Zm9yKHZhciBmPW8ubGVuZ3RoLzN8MCxkPTA7ZDxyW2hdLmxlbmd0aDsrK2Qpe3ZhciBnPStyW2hdW2RdLng7by5wdXNoKGcsMCwxLGcsMSwxLGcsMCwtMSxnLDAsLTEsZywxLDEsZywxLC0xKX12YXIgdj1vLmxlbmd0aC8zfDA7c1toXT1mLGxbaF09di1mO2Zvcih2YXIgZj1vLmxlbmd0aC8zfDAsbT0wO208cltoXS5sZW5ndGg7KyttKXt2YXIgZz0rcltoXVttXS54O28ucHVzaChnLDAsMSxnLDEsMSxnLDAsLTEsZywwLC0xLGcsMSwxLGcsMSwtMSl9dmFyIHY9by5sZW5ndGgvM3wwO2NbaF09Zix1W2hdPXYtZn12YXIgeT1uKHQsbmV3IEZsb2F0MzJBcnJheShvKSkseD1hKHQsW3tidWZmZXI6eSx0eXBlOnQuRkxPQVQsc2l6ZTozLHN0cmlkZTowLG9mZnNldDowfV0pLGI9aSh0KTtyZXR1cm4gYi5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsbmV3IHAodCx5LHgsYixsLHMsdSxjKX07dmFyIG49dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxpPXQoIi4vc2hhZGVycyIpLmxpbmUsbz1bMCwwLDBdLHM9WzAsMCwwXSxsPVswLDAsMF0sYz1bMCwwLDBdLHU9WzEsMV07ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdFswXT10WzFdPXRbMl09MCx0fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdH1mdW5jdGlvbiBwKHQsZSxyLG4sYSxpLG8scyl7dGhpcy5nbD10LHRoaXMudmVydEJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bix0aGlzLnRpY2tDb3VudD1hLHRoaXMudGlja09mZnNldD1pLHRoaXMuZ3JpZENvdW50PW8sdGhpcy5ncmlkT2Zmc2V0PXN9dmFyIGQ9cC5wcm90b3R5cGU7ZC5iaW5kPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNoYWRlci5iaW5kKCksdGhpcy5zaGFkZXIudW5pZm9ybXMubW9kZWw9dCx0aGlzLnNoYWRlci51bmlmb3Jtcy52aWV3PWUsdGhpcy5zaGFkZXIudW5pZm9ybXMucHJvamVjdGlvbj1yLHVbMF09dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsdVsxXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJIZWlnaHQsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuU2hhcGU9dSx0aGlzLnZhby5iaW5kKCl9LGQudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy52YW8udW5iaW5kKCl9LGQuZHJhd0F4aXNMaW5lPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIGk9aChzKTt0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9cyxpW3RdPWVbMV1bdF0tZVswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9aTt2YXIgbyx1PWYoYyxyKTt1W3RdKz1lWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD11LHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPW4sKG89aChsKSlbKHQrMiklM109MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW8sdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KSwobz1oKGwpKVsodCsxKSUzXT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9byx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDYpfSxkLmRyYXdBeGlzVGlja3M9ZnVuY3Rpb24odCxlLHIsbixhKXtpZih0aGlzLnRpY2tDb3VudFt0XSl7dmFyIGk9aChvKTtpW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPWksdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PWUsdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9bix0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9YTt2YXIgcz1oKGwpO3NbdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPXMsdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLnRpY2tDb3VudFt0XSx0aGlzLnRpY2tPZmZzZXRbdF0pfX0sZC5kcmF3R3JpZD1mdW5jdGlvbih0LGUscixuLGEsaSl7aWYodGhpcy5ncmlkQ291bnRbdF0pe3ZhciB1PWgocyk7dVtlXT1yWzFdW2VdLXJbMF1bZV0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPXU7dmFyIHA9ZihjLG4pO3BbZV0rPXJbMF1bZV0sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PXA7dmFyIGQ9aChvKTtkW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPWQ7dmFyIGc9aChsKTtnW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1nLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWEsdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLmdyaWRDb3VudFt0XSx0aGlzLmdyaWRPZmZzZXRbdF0pfX0sZC5kcmF3WmVybz1mdW5jdGlvbih0LGUscixuLGEsaSl7dmFyIG89aChzKTt0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9byxvW3RdPXJbMV1bdF0tclswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9bzt2YXIgdT1mKGMsbik7dVt0XSs9clswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9dTt2YXIgcD1oKGwpO3BbZV09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPXAsdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9YSx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLDYpfSxkLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy52ZXJ0QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MjQwLCJnbC1idWZmZXIiOjI0NCwiZ2wtdmFvIjozMjl9XSwyNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGE9dCgiZ2wtc2hhZGVyIiksaT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBvZmZzZXQsIG1ham9yQXhpcywgbWlub3JBeGlzLCBzY3JlZW5BeGlzO1xudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGg7XG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XG5cbnZlYzMgcHJvamVjdCh2ZWMzIHApIHtcbiAgdmVjNCBwcCA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XG4gIHJldHVybiBwcC54eXogLyBtYXgocHAudywgMC4wMDAxKTtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWMzIG1ham9yID0gcG9zaXRpb24ueCAqIG1ham9yQXhpcztcbiAgdmVjMyBtaW5vciA9IHBvc2l0aW9uLnkgKiBtaW5vckF4aXM7XG5cbiAgdmVjMyB2UG9zaXRpb24gPSBtYWpvciArIG1pbm9yICsgb2Zmc2V0O1xuICB2ZWMzIHBQb3NpdGlvbiA9IHByb2plY3QodlBvc2l0aW9uKTtcbiAgdmVjMyBvZmZzZXQgPSBwcm9qZWN0KHZQb3NpdGlvbiArIHNjcmVlbkF4aXMgKiBwb3NpdGlvbi56KTtcblxuICB2ZWMyIHNjcmVlbiA9IG5vcm1hbGl6ZSgob2Zmc2V0IC0gcFBvc2l0aW9uKS54eSAqIHNjcmVlblNoYXBlKSAvIHNjcmVlblNoYXBlO1xuXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwUG9zaXRpb24gKyB2ZWMzKDAuNSAqIHNjcmVlbiAqIGxpbmVXaWR0aCwgMCksIDEuMCk7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbn0iXSk7ci5saW5lPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQsaSxvLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9XSl9O3ZhciBzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIG9mZnNldCwgYXhpcywgYWxpZ25EaXIsIGFsaWduT3B0O1xudW5pZm9ybSBmbG9hdCBzY2FsZSwgYW5nbGUsIHBpeGVsU2NhbGU7XG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjtcblxudmVjMyBwcm9qZWN0KHZlYzMgcCkge1xuICB2ZWM0IHBwID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcbiAgcmV0dXJuIHBwLnh5eiAvIG1heChwcC53LCAwLjAwMDEpO1xufVxuXG5mbG9hdCBjb21wdXRlVmlld0FuZ2xlKHZlYzMgYSwgdmVjMyBiKSB7XG4gIHZlYzMgQSA9IHByb2plY3QoYSk7XG4gIHZlYzMgQiA9IHByb2plY3QoYik7XG5cbiAgcmV0dXJuIGF0YW4oXG4gICAgKEIueSAtIEEueSkgKiByZXNvbHV0aW9uLnksXG4gICAgKEIueCAtIEEueCkgKiByZXNvbHV0aW9uLnhcbiAgKTtcbn1cblxuY29uc3QgZmxvYXQgUEkgPSAzLjE0MTU5MjtcbmNvbnN0IGZsb2F0IFRXT19QSSA9IDIuMCAqIFBJO1xuY29uc3QgZmxvYXQgSEFMRl9QSSA9IDAuNSAqIFBJO1xuY29uc3QgZmxvYXQgT05FX0FORF9IQUxGX1BJID0gMS41ICogUEk7XG5cbmludCBvcHRpb24gPSBpbnQoZmxvb3IoYWxpZ25PcHQueCArIDAuMDAxKSk7XG5mbG9hdCBodl9yYXRpbyA9ICAgICAgIGFsaWduT3B0Lnk7XG5ib29sIGVuYWJsZUFsaWduID0gICAgKGFsaWduT3B0LnogIT0gMC4wKTtcblxuZmxvYXQgbW9kX2FuZ2xlKGZsb2F0IGEpIHtcbiAgcmV0dXJuIG1vZChhLCBQSSk7XG59XG5cbmZsb2F0IHBvc2l0aXZlX2FuZ2xlKGZsb2F0IGEpIHtcbiAgcmV0dXJuIG1vZF9hbmdsZSgoYSA8IDAuMCkgP1xuICAgIGEgKyBUV09fUEkgOlxuICAgIGFcbiAgKTtcbn1cblxuZmxvYXQgbG9va191cHdhcmRzKGZsb2F0IGEpIHtcbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xuICByZXR1cm4gKChiID4gSEFMRl9QSSkgJiYgKGIgPD0gT05FX0FORF9IQUxGX1BJKSkgP1xuICAgIGIgLSBQSSA6XG4gICAgYjtcbn1cblxuZmxvYXQgbG9va19ob3Jpem9udGFsX29yX3ZlcnRpY2FsKGZsb2F0IGEsIGZsb2F0IHJhdGlvKSB7XG4gIC8vIHJhdGlvIGNvbnRyb2xzIHRoZSByYXRpbyBiZXR3ZWVuIGJlaW5nIGhvcml6b250YWwgdG8gKHZlcnRpY2FsICsgaG9yaXpvbnRhbClcbiAgLy8gaWYgcmF0aW8gaXMgc2V0IHRvIDAuNSB0aGVuIGl0IGlzIDUwJSwgNTAlLlxuICAvLyB3aGVuIHVzaW5nIGEgaGlnaGVyIHJhdGlvIGUuZy4gMC43NSB0aGUgcmVzdWx0IHdvdWxkXG4gIC8vIGxpa2VseSBiZSBtb3JlIGhvcml6b250YWwgdGhhbiB2ZXJ0aWNhbC5cblxuICBmbG9hdCBiID0gcG9zaXRpdmVfYW5nbGUoYSk7XG5cbiAgcmV0dXJuXG4gICAgKGIgPCAoICAgICAgcmF0aW8pICogSEFMRl9QSSkgPyAwLjAgOlxuICAgIChiIDwgKDIuMCAtIHJhdGlvKSAqIEhBTEZfUEkpID8gLUhBTEZfUEkgOlxuICAgIChiIDwgKDIuMCArIHJhdGlvKSAqIEhBTEZfUEkpID8gMC4wIDpcbiAgICAoYiA8ICg0LjAgLSByYXRpbykgKiBIQUxGX1BJKSA/IEhBTEZfUEkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wO1xufVxuXG5mbG9hdCByb3VuZFRvKGZsb2F0IGEsIGZsb2F0IGIpIHtcbiAgcmV0dXJuIGZsb2F0KGIgKiBmbG9vcigoYSArIDAuNSAqIGIpIC8gYikpO1xufVxuXG5mbG9hdCBsb29rX3JvdW5kX25fZGlyZWN0aW9ucyhmbG9hdCBhLCBpbnQgbikge1xuICBmbG9hdCBiID0gcG9zaXRpdmVfYW5nbGUoYSk7XG4gIGZsb2F0IGRpdiA9IFRXT19QSSAvIGZsb2F0KG4pO1xuICBmbG9hdCBjID0gcm91bmRUbyhiLCBkaXYpO1xuICByZXR1cm4gbG9va191cHdhcmRzKGMpO1xufVxuXG5mbG9hdCBhcHBseUFsaWduT3B0aW9uKGZsb2F0IHJhd0FuZ2xlLCBmbG9hdCBkZWx0YSkge1xuICByZXR1cm5cbiAgICAob3B0aW9uID4gIDIpID8gbG9va19yb3VuZF9uX2RpcmVjdGlvbnMocmF3QW5nbGUgKyBkZWx0YSwgb3B0aW9uKSA6ICAgICAgIC8vIG9wdGlvbiAzLW46IHJvdW5kIHRvIG4gZGlyZWN0aW9uc1xuICAgIChvcHRpb24gPT0gMikgPyBsb29rX2hvcml6b250YWxfb3JfdmVydGljYWwocmF3QW5nbGUgKyBkZWx0YSwgaHZfcmF0aW8pIDogLy8gaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbFxuICAgIChvcHRpb24gPT0gMSkgPyByYXdBbmdsZSArIGRlbHRhIDogICAgICAgLy8gdXNlIGZyZWUgYW5nbGUsIGFuZCBmbGlwIHRvIGFsaWduIHdpdGggb25lIGRpcmVjdGlvbiBvZiB0aGUgYXhpc1xuICAgIChvcHRpb24gPT0gMCkgPyBsb29rX3Vwd2FyZHMocmF3QW5nbGUpIDogLy8gdXNlIGZyZWUgYW5nbGUsIGFuZCBzdGF5IHVwd2FyZHNcbiAgICAob3B0aW9uID09LTEpID8gMC4wIDogICAgICAgICAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgYWxsIHRleHRzIHJlbWFpbnMgaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgICAgICByYXdBbmdsZTsgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHJldHVybiBiYWNrIHJhdyBpbnB1dCBhbmdsZVxufVxuXG5ib29sIGlzQXhpc1RpdGxlID0gKGF4aXMueCA9PSAwLjApICYmXG4gICAgICAgICAgICAgICAgICAgKGF4aXMueSA9PSAwLjApICYmXG4gICAgICAgICAgICAgICAgICAgKGF4aXMueiA9PSAwLjApO1xuXG52b2lkIG1haW4oKSB7XG4gIC8vQ29tcHV0ZSB3b3JsZCBvZmZzZXRcbiAgZmxvYXQgYXhpc0Rpc3RhbmNlID0gcG9zaXRpb24uejtcbiAgdmVjMyBkYXRhUG9zaXRpb24gPSBheGlzRGlzdGFuY2UgKiBheGlzICsgb2Zmc2V0O1xuXG4gIGZsb2F0IGJldGEgPSBhbmdsZTsgLy8gaS5lLiB1c2VyIGRlZmluZWQgYXR0cmlidXRlcyBmb3IgZWFjaCB0aWNrXG5cbiAgZmxvYXQgYXhpc0FuZ2xlO1xuICBmbG9hdCBjbGlwQW5nbGU7XG4gIGZsb2F0IGZsaXA7XG5cbiAgaWYgKGVuYWJsZUFsaWduKSB7XG4gICAgYXhpc0FuZ2xlID0gKGlzQXhpc1RpdGxlKSA/IEhBTEZfUEkgOlxuICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVWaWV3QW5nbGUoZGF0YVBvc2l0aW9uLCBkYXRhUG9zaXRpb24gKyBheGlzKTtcbiAgICBjbGlwQW5nbGUgPSBjb21wdXRlVmlld0FuZ2xlKGRhdGFQb3NpdGlvbiwgZGF0YVBvc2l0aW9uICsgYWxpZ25EaXIpO1xuXG4gICAgYXhpc0FuZ2xlICs9IChzaW4oYXhpc0FuZ2xlKSA8IDAuMCkgPyBQSSA6IDAuMDtcbiAgICBjbGlwQW5nbGUgKz0gKHNpbihjbGlwQW5nbGUpIDwgMC4wKSA/IFBJIDogMC4wO1xuXG4gICAgZmxpcCA9IChkb3QodmVjMihjb3MoYXhpc0FuZ2xlKSwgc2luKGF4aXNBbmdsZSkpLFxuICAgICAgICAgICAgICAgIHZlYzIoc2luKGNsaXBBbmdsZSksLWNvcyhjbGlwQW5nbGUpKSkgPiAwLjApID8gMS4wIDogMC4wO1xuXG4gICAgYmV0YSArPSBhcHBseUFsaWduT3B0aW9uKGNsaXBBbmdsZSwgZmxpcCAqIFBJKTtcbiAgfVxuXG4gIC8vQ29tcHV0ZSBwbGFuZSBvZmZzZXRcbiAgdmVjMiBwbGFuZUNvb3JkID0gcG9zaXRpb24ueHkgKiBwaXhlbFNjYWxlO1xuXG4gIG1hdDIgcGxhbmVYZm9ybSA9IHNjYWxlICogbWF0MihcbiAgICAgY29zKGJldGEpLCBzaW4oYmV0YSksXG4gICAgLXNpbihiZXRhKSwgY29zKGJldGEpXG4gICk7XG5cbiAgdmVjMiB2aWV3T2Zmc2V0ID0gMi4wICogcGxhbmVYZm9ybSAqIHBsYW5lQ29vcmQgLyByZXNvbHV0aW9uO1xuXG4gIC8vQ29tcHV0ZSBjbGlwIHBvc2l0aW9uXG4gIHZlYzMgY2xpcFBvc2l0aW9uID0gcHJvamVjdChkYXRhUG9zaXRpb24pO1xuXG4gIC8vQXBwbHkgdGV4dCBvZmZzZXQgaW4gY2xpcCBjb29yZGluYXRlc1xuICBjbGlwUG9zaXRpb24gKz0gdmVjMyh2aWV3T2Zmc2V0LCAwLjApO1xuXG4gIC8vRG9uZVxuICBnbF9Qb3NpdGlvbiA9IHZlYzQoY2xpcFBvc2l0aW9uLCAxLjApO1xufSJdKSxsPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufSJdKTtyLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCxzLGwsbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn1dKX07dmFyIGM9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzMgbm9ybWFsO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgZW5hYmxlO1xudW5pZm9ybSB2ZWMzIGJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIGNvbG9yQ2hhbm5lbDtcblxudm9pZCBtYWluKCkge1xuXG4gIHZlYzMgc2lnbkF4aXMgPSBzaWduKGJvdW5kc1sxXSAtIGJvdW5kc1swXSk7XG5cbiAgdmVjMyByZWFsTm9ybWFsID0gc2lnbkF4aXMgKiBub3JtYWw7XG5cbiAgaWYoZG90KHJlYWxOb3JtYWwsIGVuYWJsZSkgPiAwLjApIHtcbiAgICB2ZWMzIG1pblJhbmdlID0gbWluKGJvdW5kc1swXSwgYm91bmRzWzFdKTtcbiAgICB2ZWMzIG1heFJhbmdlID0gbWF4KGJvdW5kc1swXSwgYm91bmRzWzFdKTtcbiAgICB2ZWMzIG5Qb3NpdGlvbiA9IG1peChtaW5SYW5nZSwgbWF4UmFuZ2UsIDAuNSAqIChwb3NpdGlvbiArIDEuMCkpO1xuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQoblBvc2l0aW9uLCAxLjApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfVxuXG4gIGNvbG9yQ2hhbm5lbCA9IGFicyhyZWFsTm9ybWFsKTtcbn0iXSksdT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yc1szXTtcblxudmFyeWluZyB2ZWMzIGNvbG9yQ2hhbm5lbDtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBjb2xvckNoYW5uZWwueCAqIGNvbG9yc1swXSArXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC55ICogY29sb3JzWzFdICtcbiAgICAgICAgICAgICAgICAgY29sb3JDaGFubmVsLnogKiBjb2xvcnNbMl07XG59Il0pO3IuYmc9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCxjLHUsbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9XSl9fSx7ImdsLXNoYWRlciI6MzA0LGdsc2xpZnk6NDExfV0sMjQxOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxzLGwpe3ZhciB1PW4odCksaD1hKHQsW3tidWZmZXI6dSxzaXplOjN9XSksZj1vKHQpO2YuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wO3ZhciBwPW5ldyBjKHQsZix1LGgpO3JldHVybiBwLnVwZGF0ZShlLHIsaSxzLGwpLHB9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksaT10KCJ2ZWN0b3JpemUtdGV4dCIpLG89dCgiLi9zaGFkZXJzIikudGV4dCxzPXdpbmRvd3x8ci5nbG9iYWx8fHt9LGw9cy5fX1RFWFRfQ0FDSEV8fHt9O3MuX19URVhUX0NBQ0hFPXt9O2Z1bmN0aW9uIGModCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPWUsdGhpcy5idWZmZXI9cix0aGlzLnZhbz1uLHRoaXMudGlja09mZnNldD10aGlzLnRpY2tDb3VudD10aGlzLmxhYmVsT2Zmc2V0PXRoaXMubGFiZWxDb3VudD1udWxsfXZhciB1PWMucHJvdG90eXBlLGg9WzAsMF07dS5iaW5kPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudmFvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCk7dmFyIGE9dGhpcy5zaGFkZXIudW5pZm9ybXM7YS5tb2RlbD10LGEudmlldz1lLGEucHJvamVjdGlvbj1yLGEucGl4ZWxTY2FsZT1uLGhbMF09dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsaFsxXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJIZWlnaHQsdGhpcy5zaGFkZXIudW5pZm9ybXMucmVzb2x1dGlvbj1ofSx1LnVuYmluZD1mdW5jdGlvbigpe3RoaXMudmFvLnVuYmluZCgpfSx1LnVwZGF0ZT1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPVtdO2Z1bmN0aW9uIHModCxlLHIsbixhLHMpe3ZhciBjPWxbcl07Y3x8KGM9bFtyXT17fSk7dmFyIHU9Y1tlXTt1fHwodT1jW2VdPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiBpKHQsZSl9Y2F0Y2goZSl7cmV0dXJuIGNvbnNvbGUud2FybignZXJyb3IgdmVjdG9yaXppbmcgdGV4dDoiJyt0KyciIGVycm9yOicsZSkse2NlbGxzOltdLHBvc2l0aW9uczpbXX19fShlLHt0cmlhbmdsZXM6ITAsZm9udDpyLHRleHRBbGlnbjoiY2VudGVyIix0ZXh0QmFzZWxpbmU6Im1pZGRsZSIsbGluZVNwYWNpbmc6YSxzdHlsZXRhZ3M6c30pKTtmb3IodmFyIGg9KG58fDEyKS8xMixmPXUucG9zaXRpb25zLHA9dS5jZWxscyxkPTAsZz1wLmxlbmd0aDtkPGc7KytkKWZvcih2YXIgdj1wW2RdLG09MjttPj0wOy0tbSl7dmFyIHk9Zlt2W21dXTtvLnB1c2goaCp5WzBdLC1oKnlbMV0sdCl9fWZvcih2YXIgYz1bMCwwLDBdLHU9WzAsMCwwXSxoPVswLDAsMF0sZj1bMCwwLDBdLHA9e2JyZWFrbGluZXM6ITAsYm9sZHM6ITAsaXRhbGljczohMCxzdWJzY3JpcHRzOiEwLHN1cGVyc2NyaXB0czohMH0sZD0wO2Q8MzsrK2Qpe2hbZF09by5sZW5ndGgvM3wwLHMoLjUqKHRbMF1bZF0rdFsxXVtkXSksZVtkXSxyW2RdLDEyLDEuMjUscCksZltkXT0oby5sZW5ndGgvM3wwKS1oW2RdLGNbZF09by5sZW5ndGgvM3wwO2Zvcih2YXIgZz0wO2c8bltkXS5sZW5ndGg7KytnKW5bZF1bZ10udGV4dCYmcyhuW2RdW2ddLngsbltkXVtnXS50ZXh0LG5bZF1bZ10uZm9udHx8YSxuW2RdW2ddLmZvbnRTaXplfHwxMiwxLjI1LHApO3VbZF09KG8ubGVuZ3RoLzN8MCktY1tkXX10aGlzLmJ1ZmZlci51cGRhdGUobyksdGhpcy50aWNrT2Zmc2V0PWMsdGhpcy50aWNrQ291bnQ9dSx0aGlzLmxhYmVsT2Zmc2V0PWgsdGhpcy5sYWJlbENvdW50PWZ9LHUuZHJhd1RpY2tzPWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8scyl7dGhpcy50aWNrQ291bnRbdF0mJih0aGlzLnNoYWRlci51bmlmb3Jtcy5heGlzPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5hbmdsZT1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjYWxlPWUsdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PW4sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25EaXI9byx0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbk9wdD1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy50aWNrQ291bnRbdF0sdGhpcy50aWNrT2Zmc2V0W3RdKSl9LHUuZHJhd0xhYmVsPWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8scyl7dGhpcy5sYWJlbENvdW50W3RdJiYodGhpcy5zaGFkZXIudW5pZm9ybXMuYXhpcz1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWEsdGhpcy5zaGFkZXIudW5pZm9ybXMuYW5nbGU9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5zY2FsZT1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1uLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduRGlyPW8sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25PcHQ9cyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMubGFiZWxDb3VudFt0XSx0aGlzLmxhYmVsT2Zmc2V0W3RdKSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpfX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0seyIuL3NoYWRlcnMiOjI0MCxfcHJvY2Vzczo0ODQsImdsLWJ1ZmZlciI6MjQ0LCJnbC12YW8iOjMyOSwidmVjdG9yaXplLXRleHQiOjU0OX1dLDI0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dCsiIixuPXIuaW5kZXhPZigiLiIpLGE9MDtuPj0wJiYoYT1yLmxlbmd0aC1uLTEpO3ZhciBpPU1hdGgucG93KDEwLGEpLG89TWF0aC5yb3VuZCh0KmUqaSkscz1vKyIiO2lmKHMuaW5kZXhPZigiZSIpPj0wKXJldHVybiBzO3ZhciBsPW8vaSxjPW8laTtvPDA/KGw9MHwtTWF0aC5jZWlsKGwpLGM9MHwtYyk6KGw9MHxNYXRoLmZsb29yKGwpLGN8PTApO3ZhciB1PSIiK2w7aWYobzwwJiYodT0iLSIrdSksYSl7Zm9yKHZhciBoPSIiK2M7aC5sZW5ndGg8YTspaD0iMCIraDtyZXR1cm4gdSsiLiIraH1yZXR1cm4gdX1yLmNyZWF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxhPTA7YTwzOysrYSl7Zm9yKHZhciBpPVtdLG89KHRbMF1bYV0sdFsxXVthXSwwKTtvKmVbYV08PXRbMV1bYV07KytvKWkucHVzaCh7eDpvKmVbYV0sdGV4dDpuKGVbYV0sbyl9KTtmb3IodmFyIG89LTE7byplW2FdPj10WzBdW2FdOy0tbylpLnB1c2goe3g6byplW2FdLHRleHQ6bihlW2FdLG8pfSk7ci5wdXNoKGkpfXJldHVybiByfSxyLmVxdWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil7aWYodFtyXS5sZW5ndGghPT1lW3JdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoOysrbil7dmFyIGE9dFtyXVtuXSxpPWVbcl1bbl07aWYoYS54IT09aS54fHxhLnRleHQhPT1pLnRleHR8fGEuZm9udCE9PWkuZm9udHx8YS5mb250Q29sb3IhPT1pLmZvbnRDb2xvcnx8YS5mb250U2l6ZSE9PWkuZm9udFNpemV8fGEuZHghPT1pLmR4fHxhLmR5IT09aS5keSlyZXR1cm4hMX19cmV0dXJuITB9fSx7fV0sMjQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsLGgpe3ZhciBmPWUubW9kZWx8fGMscD1lLnZpZXd8fGMsbT1lLnByb2plY3Rpb258fGMseT1lLl9vcnRob3x8ITEseD10LmJvdW5kcyxiPShoPWh8fGkoZixwLG0seCx5KSkuYXhpcztvKHUscCxmKSxvKHUsbSx1KTtmb3IodmFyIF89Zyx3PTA7dzwzOysrdylfW3ddLmxvPTEvMCxfW3ddLmhpPS0xLzAsX1t3XS5waXhlbHNQZXJEYXRhVW5pdD0xLzA7dmFyIGs9bihzKHUsdSkpO3ModSx1KTtmb3IodmFyIFQ9MDtUPDM7KytUKXt2YXIgTT0oVCsxKSUzLEE9KFQrMiklMyxTPXY7dDpmb3IodmFyIHc9MDt3PDI7Kyt3KXt2YXIgRT1bXTtpZihiW1RdPDAhPSEhdyl7U1tUXT14W3ddW1RdO2Zvcih2YXIgTD0wO0w8MjsrK0wpe1NbTV09eFtMXnddW01dO2Zvcih2YXIgQz0wO0M8MjsrK0MpU1tBXT14W0NeTF53XVtBXSxFLnB1c2goUy5zbGljZSgpKX1mb3IodmFyIFA9eT81OjQsTD1QO0w9PT1QOysrTCl7aWYoMD09PUUubGVuZ3RoKWNvbnRpbnVlIHQ7RT1hLnBvc2l0aXZlKEUsa1tMXSl9Zm9yKHZhciBMPTA7TDxFLmxlbmd0aDsrK0wpZm9yKHZhciBBPUVbTF0sTz1kKHYsdSxBLHIsbCksQz0wO0M8MzsrK0MpX1tDXS5sbz1NYXRoLm1pbihfW0NdLmxvLEFbQ10pLF9bQ10uaGk9TWF0aC5tYXgoX1tDXS5oaSxBW0NdKSxDIT09VCYmKF9bQ10ucGl4ZWxzUGVyRGF0YVVuaXQ9TWF0aC5taW4oX1tDXS5waXhlbHNQZXJEYXRhVW5pdCxNYXRoLmFicyhPW0NdKSkpfX19cmV0dXJuIF99O3ZhciBuPXQoImV4dHJhY3QtZnJ1c3R1bS1wbGFuZXMiKSxhPXQoInNwbGl0LXBvbHlnb24iKSxpPXQoIi4vbGliL2N1YmUuanMiKSxvPXQoImdsLW1hdDQvbXVsdGlwbHkiKSxzPXQoImdsLW1hdDQvdHJhbnNwb3NlIiksbD10KCJnbC12ZWM0L3RyYW5zZm9ybU1hdDQiKSxjPW5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKSx1PW5ldyBGbG9hdDMyQXJyYXkoMTYpO2Z1bmN0aW9uIGgodCxlLHIpe3RoaXMubG89dCx0aGlzLmhpPWUsdGhpcy5waXhlbHNQZXJEYXRhVW5pdD1yfXZhciBmPVswLDAsMCwxXSxwPVswLDAsMCwxXTtmdW5jdGlvbiBkKHQsZSxyLG4sYSl7Zm9yKHZhciBpPTA7aTwzOysraSl7Zm9yKHZhciBvPWYscz1wLGM9MDtjPDM7KytjKXNbY109b1tjXT1yW2NdO3NbM109b1szXT0xLHNbaV0rPTEsbChzLHMsZSksc1szXTwwJiYodFtpXT0xLzApLG9baV0tPTEsbChvLG8sZSksb1szXTwwJiYodFtpXT0xLzApO3ZhciB1PShvWzBdL29bM10tc1swXS9zWzNdKSpuLGg9KG9bMV0vb1szXS1zWzFdL3NbM10pKmE7dFtpXT0uMjUqTWF0aC5zcXJ0KHUqdStoKmgpfXJldHVybiB0fXZhciBnPVtuZXcgaCgxLzAsLTEvMCwxLzApLG5ldyBoKDEvMCwtMS8wLDEvMCksbmV3IGgoMS8wLC0xLzAsMS8wKV0sdj1bMCwwLDBdfSx7Ii4vbGliL2N1YmUuanMiOjIzOCwiZXh0cmFjdC1mcnVzdHVtLXBsYW5lcyI6MjI3LCJnbC1tYXQ0L211bHRpcGx5IjoyNzAsImdsLW1hdDQvdHJhbnNwb3NlIjoyNzksImdsLXZlYzQvdHJhbnNmb3JtTWF0NCI6NDAwLCJzcGxpdC1wb2x5Z29uIjo1MjZ9XSwyNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHlwZWRhcnJheS1wb29sIiksYT10KCJuZGFycmF5LW9wcyIpLGk9dCgibmRhcnJheSIpLG89WyJ1aW50OCIsInVpbnQ4X2NsYW1wZWQiLCJ1aW50MTYiLCJ1aW50MzIiLCJpbnQ4IiwiaW50MTYiLCJpbnQzMiIsImZsb2F0MzIiXTtmdW5jdGlvbiBzKHQsZSxyLG4sYSl7dGhpcy5nbD10LHRoaXMudHlwZT1lLHRoaXMuaGFuZGxlPXIsdGhpcy5sZW5ndGg9bix0aGlzLnVzYWdlPWF9dmFyIGw9cy5wcm90b3R5cGU7ZnVuY3Rpb24gYyh0LGUscixuLGEsaSl7dmFyIG89YS5sZW5ndGgqYS5CWVRFU19QRVJfRUxFTUVOVDtpZihpPDApcmV0dXJuIHQuYnVmZmVyRGF0YShlLGEsbiksbztpZihvK2k+cil0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSWYgcmVzaXppbmcgYnVmZmVyLCBtdXN0IG5vdCBzcGVjaWZ5IG9mZnNldCIpO3JldHVybiB0LmJ1ZmZlclN1YkRhdGEoZSxpLGEpLHJ9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1uLm1hbGxvYyh0Lmxlbmd0aCxlKSxhPXQubGVuZ3RoLGk9MDtpPGE7KytpKXJbaV09dFtpXTtyZXR1cm4gcn1sLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLHRoaXMuaGFuZGxlKX0sbC51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLG51bGwpfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmhhbmRsZSl9LGwudXBkYXRlPWZ1bmN0aW9uKHQsZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlJiYoZT0tMSksdGhpcy5iaW5kKCksIm9iamVjdCI9PXR5cGVvZiB0JiYidW5kZWZpbmVkIiE9dHlwZW9mIHQuc2hhcGUpe3ZhciByPXQuZHR5cGU7aWYoby5pbmRleE9mKHIpPDAmJihyPSJmbG9hdDMyIiksdGhpcy50eXBlPT09dGhpcy5nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUilyPWdsLmdldEV4dGVuc2lvbigiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpJiYidWludDE2IiE9PXI/InVpbnQzMiI6InVpbnQxNiI7aWYocj09PXQuZHR5cGUmJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEsbj1lLmxlbmd0aC0xO24+PTA7LS1uKXtpZihlW25dIT09cilyZXR1cm4hMTtyKj10W25dfXJldHVybiEwfSh0LnNoYXBlLHQuc3RyaWRlKSkwPT09dC5vZmZzZXQmJnQuZGF0YS5sZW5ndGg9PT10LnNoYXBlWzBdP3RoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LmRhdGEsZSk6dGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQuZGF0YS5zdWJhcnJheSh0Lm9mZnNldCx0LnNoYXBlWzBdKSxlKTtlbHNle3ZhciBzPW4ubWFsbG9jKHQuc2l6ZSxyKSxsPWkocyx0LnNoYXBlKTthLmFzc2lnbihsLHQpLHRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSxlPDA/czpzLnN1YmFycmF5KDAsdC5zaXplKSxlKSxuLmZyZWUocyl9fWVsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGg7aD10aGlzLnR5cGU9PT10aGlzLmdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSP3UodCwidWludDE2Iik6dSh0LCJmbG9hdDMyIiksdGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLGU8MD9oOmguc3ViYXJyYXkoMCx0Lmxlbmd0aCksZSksbi5mcmVlKGgpfWVsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXRoaXMubGVuZ3RoPWModGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LGUpO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiB0JiZ2b2lkIDAhPT10KXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJbnZhbGlkIGRhdGEgdHlwZSIpO2lmKGU+PTApdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IENhbm5vdCBzcGVjaWZ5IG9mZnNldCB3aGVuIHJlc2l6aW5nIGJ1ZmZlciIpOyh0fD0wKTw9MCYmKHQ9MSksdGhpcy5nbC5idWZmZXJEYXRhKHRoaXMudHlwZSwwfHQsdGhpcy51c2FnZSksdGhpcy5sZW5ndGg9dH19LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZihyPXJ8fHQuQVJSQVlfQlVGRkVSLG49bnx8dC5EWU5BTUlDX0RSQVcsciE9PXQuQVJSQVlfQlVGRkVSJiZyIT09dC5FTEVNRU5UX0FSUkFZX0JVRkZFUil0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogSW52YWxpZCB0eXBlIGZvciB3ZWJnbCBidWZmZXIsIG11c3QgYmUgZWl0aGVyIGdsLkFSUkFZX0JVRkZFUiBvciBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiIpO2lmKG4hPT10LkRZTkFNSUNfRFJBVyYmbiE9PXQuU1RBVElDX0RSQVcmJm4hPT10LlNUUkVBTV9EUkFXKXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJbnZhbGlkIHVzYWdlIGZvciBidWZmZXIsIG11c3QgYmUgZWl0aGVyIGdsLkRZTkFNSUNfRFJBVywgZ2wuU1RBVElDX0RSQVcgb3IgZ2wuU1RSRUFNX0RSQVciKTt2YXIgYT10LmNyZWF0ZUJ1ZmZlcigpLGk9bmV3IHModCxyLGEsMCxuKTtyZXR1cm4gaS51cGRhdGUoZSksaX19LHtuZGFycmF5OjQ1MiwibmRhcnJheS1vcHMiOjQ0NiwidHlwZWRhcnJheS1wb29sIjo1NDR9XSwyNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtdmVjMyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQucG9zaXRpb25zLGE9dC52ZWN0b3JzLGk9e3Bvc2l0aW9uczpbXSx2ZXJ0ZXhJbnRlbnNpdHk6W10sdmVydGV4SW50ZW5zaXR5Qm91bmRzOnQudmVydGV4SW50ZW5zaXR5Qm91bmRzLHZlY3RvcnM6W10sY2VsbHM6W10sY29uZU9mZnNldDp0LmNvbmVPZmZzZXQsY29sb3JtYXA6dC5jb2xvcm1hcH07aWYoMD09PXQucG9zaXRpb25zLmxlbmd0aClyZXR1cm4gZSYmKGVbMF09WzAsMCwwXSxlWzFdPVswLDAsMF0pLGk7Zm9yKHZhciBvPTAscz0xLzAsbD0tMS8wLGM9MS8wLHU9LTEvMCxoPTEvMCxmPS0xLzAscD1udWxsLGQ9bnVsbCxnPVtdLHY9MS8wLG09ITEseT0wO3k8ci5sZW5ndGg7eSsrKXt2YXIgeD1yW3ldO3M9TWF0aC5taW4oeFswXSxzKSxsPU1hdGgubWF4KHhbMF0sbCksYz1NYXRoLm1pbih4WzFdLGMpLHU9TWF0aC5tYXgoeFsxXSx1KSxoPU1hdGgubWluKHhbMl0saCksZj1NYXRoLm1heCh4WzJdLGYpO3ZhciBiPWFbeV07aWYobi5sZW5ndGgoYik+byYmKG89bi5sZW5ndGgoYikpLHkpe3ZhciBfPTIqbi5kaXN0YW5jZShwLHgpLyhuLmxlbmd0aChkKStuLmxlbmd0aChiKSk7Xz8odj1NYXRoLm1pbih2LF8pLG09ITEpOm09ITB9bXx8KHA9eCxkPWIpLGcucHVzaChiKX12YXIgdz1bcyxjLGhdLGs9W2wsdSxmXTtlJiYoZVswXT13LGVbMV09ayksMD09PW8mJihvPTEpO3ZhciBUPTEvbztpc0Zpbml0ZSh2KXx8KHY9MSksaS52ZWN0b3JTY2FsZT12O3ZhciBNPXQuY29uZVNpemV8fC41O3QuYWJzb2x1dGVDb25lU2l6ZSYmKE09dC5hYnNvbHV0ZUNvbmVTaXplKlQpLGkuY29uZVNjYWxlPU07eT0wO2Zvcih2YXIgQT0wO3k8ci5sZW5ndGg7eSsrKWZvcih2YXIgUz0oeD1yW3ldKVswXSxFPXhbMV0sTD14WzJdLEM9Z1t5XSxQPW4ubGVuZ3RoKEMpKlQsTz0wO088ODtPKyspe2kucG9zaXRpb25zLnB1c2goW1MsRSxMLEErK10pLGkucG9zaXRpb25zLnB1c2goW1MsRSxMLEErK10pLGkucG9zaXRpb25zLnB1c2goW1MsRSxMLEErK10pLGkucG9zaXRpb25zLnB1c2goW1MsRSxMLEErK10pLGkucG9zaXRpb25zLnB1c2goW1MsRSxMLEErK10pLGkucG9zaXRpb25zLnB1c2goW1MsRSxMLEErK10pLGkudmVjdG9ycy5wdXNoKEMpLGkudmVjdG9ycy5wdXNoKEMpLGkudmVjdG9ycy5wdXNoKEMpLGkudmVjdG9ycy5wdXNoKEMpLGkudmVjdG9ycy5wdXNoKEMpLGkudmVjdG9ycy5wdXNoKEMpLGkudmVydGV4SW50ZW5zaXR5LnB1c2goUCxQLFApLGkudmVydGV4SW50ZW5zaXR5LnB1c2goUCxQLFApO3ZhciB6PWkucG9zaXRpb25zLmxlbmd0aDtpLmNlbGxzLnB1c2goW3otNix6LTUsei00XSxbei0zLHotMix6LTFdKX1yZXR1cm4gaX07dmFyIGE9dCgiLi9saWIvc2hhZGVycyIpO2UuZXhwb3J0cy5jcmVhdGVNZXNoPXQoIi4vY3JlYXRlX21lc2giKSxlLmV4cG9ydHMuY3JlYXRlQ29uZU1lc2g9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5leHBvcnRzLmNyZWF0ZU1lc2godCxyLHtzaGFkZXJzOmEsdHJhY2VUeXBlOiJjb25lIn0pfX0seyIuL2NyZWF0ZV9tZXNoIjoyNDYsIi4vbGliL3NoYWRlcnMiOjI0NywiZ2wtdmVjMyI6MzQ4fV0sMjQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpLGE9dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxvPXQoImdsLXRleHR1cmUyZCIpLHM9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGw9dCgiZ2wtbWF0NC9pbnZlcnQiKSxjPXQoIm5kYXJyYXkiKSx1PXQoImNvbG9ybWFwIiksaD1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gZih0LGUscixuLGEsaSxvLHMsbCxjLHUpe3RoaXMuZ2w9dCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmNlbGxzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW50ZW5zaXR5PVtdLHRoaXMudGV4dHVyZT1lLHRoaXMuZGlydHk9ITAsdGhpcy50cmlTaGFkZXI9cix0aGlzLnBpY2tTaGFkZXI9bix0aGlzLnRyaWFuZ2xlUG9zaXRpb25zPWEsdGhpcy50cmlhbmdsZVZlY3RvcnM9aSx0aGlzLnRyaWFuZ2xlQ29sb3JzPXMsdGhpcy50cmlhbmdsZVVWcz1sLHRoaXMudHJpYW5nbGVJZHM9byx0aGlzLnRyaWFuZ2xlVkFPPWMsdGhpcy50cmlhbmdsZUNvdW50PTAsdGhpcy5waWNrSWQ9MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saWdodFBvc2l0aW9uPVsxZTUsMWU1LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFjZVR5cGU9dSx0aGlzLnR1YmVTY2FsZT0xLHRoaXMuY29uZVNjYWxlPTIsdGhpcy52ZWN0b3JTY2FsZT0xLHRoaXMuY29uZU9mZnNldD0uMjUsdGhpcy5fbW9kZWw9aCx0aGlzLl92aWV3PWgsdGhpcy5fcHJvamVjdGlvbj1oLHRoaXMuX3Jlc29sdXRpb249WzEsMV19dmFyIHA9Zi5wcm90b3R5cGU7cC5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk+PTF9LHAuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0scC5waWNrU2xvdHM9MSxwLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LHAudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLmRpcnR5PSEwLCJsaWdodFBvc2l0aW9uImluIHQmJih0aGlzLmxpZ2h0UG9zaXRpb249dC5saWdodFBvc2l0aW9uKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksImFtYmllbnQiaW4gdCYmKHRoaXMuYW1iaWVudExpZ2h0PXQuYW1iaWVudCksImRpZmZ1c2UiaW4gdCYmKHRoaXMuZGlmZnVzZUxpZ2h0PXQuZGlmZnVzZSksInNwZWN1bGFyImluIHQmJih0aGlzLnNwZWN1bGFyTGlnaHQ9dC5zcGVjdWxhciksInJvdWdobmVzcyJpbiB0JiYodGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MpLCJmcmVzbmVsImluIHQmJih0aGlzLmZyZXNuZWw9dC5mcmVzbmVsKSx2b2lkIDAhPT10LnR1YmVTY2FsZSYmKHRoaXMudHViZVNjYWxlPXQudHViZVNjYWxlKSx2b2lkIDAhPT10LnZlY3RvclNjYWxlJiYodGhpcy52ZWN0b3JTY2FsZT10LnZlY3RvclNjYWxlKSx2b2lkIDAhPT10LmNvbmVTY2FsZSYmKHRoaXMuY29uZVNjYWxlPXQuY29uZVNjYWxlKSx2b2lkIDAhPT10LmNvbmVPZmZzZXQmJih0aGlzLmNvbmVPZmZzZXQ9dC5jb25lT2Zmc2V0KSx0LmNvbG9ybWFwJiYodGhpcy50ZXh0dXJlLnNoYXBlPVsyNTYsMjU2XSx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUuTElORUFSX01JUE1BUF9MSU5FQVIsdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcj1lLkxJTkVBUix0aGlzLnRleHR1cmUuc2V0UGl4ZWxzKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT11KHtjb2xvcm1hcDp0LG5zaGFkZXM6MjU2LGZvcm1hdDoicmdiYSJ9KSxyPW5ldyBVaW50OEFycmF5KDEwMjQpLG49MDtuPDI1NjsrK24pe2Zvcih2YXIgYT1lW25dLGk9MDtpPDM7KytpKXJbNCpuK2ldPWFbaV07cls0Km4rM109MjU1KmFbM119cmV0dXJuIGMocixbMjU2LDI1Niw0XSxbNCwwLDFdKX0odC5jb2xvcm1hcCkpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcCgpKTt2YXIgcj10LmNlbGxzLG49dC5wb3NpdGlvbnMsYT10LnZlY3RvcnM7aWYobiYmciYmYSl7dmFyIGk9W10sbz1bXSxzPVtdLGw9W10saD1bXTt0aGlzLmNlbGxzPXIsdGhpcy5wb3NpdGlvbnM9bix0aGlzLnZlY3RvcnM9YTt2YXIgZj10Lm1lc2hDb2xvcnx8WzEsMSwxLDFdLHA9dC52ZXJ0ZXhJbnRlbnNpdHksZD0xLzAsZz0tMS8wO2lmKHApaWYodC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMpZD0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMF0sZz0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IodmFyIHY9MDt2PHAubGVuZ3RoOysrdil7dmFyIG09cFt2XTtkPU1hdGgubWluKGQsbSksZz1NYXRoLm1heChnLG0pfWVsc2UgZm9yKHY9MDt2PG4ubGVuZ3RoOysrdil7bT1uW3ZdWzJdO2Q9TWF0aC5taW4oZCxtKSxnPU1hdGgubWF4KGcsbSl9dGhpcy5pbnRlbnNpdHk9cHx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dFtuXVsyXTtyZXR1cm4gcn0obiksdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKHY9MDt2PG4ubGVuZ3RoOysrdilmb3IodmFyIHk9blt2XSx4PTA7eDwzOysreCkhaXNOYU4oeVt4XSkmJmlzRmluaXRlKHlbeF0pJiYodGhpcy5ib3VuZHNbMF1beF09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1beF0seVt4XSksdGhpcy5ib3VuZHNbMV1beF09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1beF0seVt4XSkpO3ZhciBiPTA7dDpmb3Iodj0wO3Y8ci5sZW5ndGg7Kyt2KXt2YXIgXz1yW3ZdO3N3aXRjaChfLmxlbmd0aCl7Y2FzZSAzOmZvcih4PTA7eDwzOysreCl7eT1uW2s9X1t4XV07Zm9yKHZhciB3PTA7dzwzOysrdylpZihpc05hTih5W3ddKXx8IWlzRmluaXRlKHlbd10pKWNvbnRpbnVlIHR9Zm9yKHg9MDt4PDM7Kyt4KXt2YXIgazt5PW5baz1fWzIteF1dO2kucHVzaCh5WzBdLHlbMV0seVsyXSx5WzNdKTt2YXIgVD1hW2tdO28ucHVzaChUWzBdLFRbMV0sVFsyXSxUWzNdfHwwKTt2YXIgTSxBPWY7Mz09PUEubGVuZ3RoP3MucHVzaChBWzBdLEFbMV0sQVsyXSwxKTpzLnB1c2goQVswXSxBWzFdLEFbMl0sQVszXSksTT1wP1socFtrXS1kKS8oZy1kKSwwXTpbKHlbMl0tZCkvKGctZCksMF0sbC5wdXNoKE1bMF0sTVsxXSksaC5wdXNoKHYpfWIrPTF9fXRoaXMudHJpYW5nbGVDb3VudD1iLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMudXBkYXRlKGkpLHRoaXMudHJpYW5nbGVWZWN0b3JzLnVwZGF0ZShvKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLnVwZGF0ZShzKSx0aGlzLnRyaWFuZ2xlVVZzLnVwZGF0ZShsKSx0aGlzLnRyaWFuZ2xlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoaCkpfX0scC5kcmF3VHJhbnNwYXJlbnQ9cC5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxoLG49dC52aWV3fHxoLGE9dC5wcm9qZWN0aW9ufHxoLGk9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28paVswXVtvXT1NYXRoLm1heChpWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksaVsxXVtvXT1NYXRoLm1pbihpWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dmFyIGM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246YSxpbnZlcnNlTW9kZWw6aC5zbGljZSgpLGNsaXBCb3VuZHM6aSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxvcGFjaXR5OnRoaXMub3BhY2l0eSx0dWJlU2NhbGU6dGhpcy50dWJlU2NhbGUsdmVjdG9yU2NhbGU6dGhpcy52ZWN0b3JTY2FsZSxjb25lU2NhbGU6dGhpcy5jb25lU2NhbGUsY29uZU9mZnNldDp0aGlzLmNvbmVPZmZzZXQsdGV4dHVyZTowfTtjLmludmVyc2VNb2RlbD1sKGMuaW52ZXJzZU1vZGVsLGMubW9kZWwpLGUuZGlzYWJsZShlLkNVTExfRkFDRSksdGhpcy50ZXh0dXJlLmJpbmQoMCk7dmFyIHU9bmV3IEFycmF5KDE2KTtzKHUsYy52aWV3LGMubW9kZWwpLHModSxjLnByb2plY3Rpb24sdSksbCh1LHUpO2ZvcihvPTA7bzwzOysrbyljLmV5ZVBvc2l0aW9uW29dPXVbMTIrb10vdVsxNV07dmFyIGY9dVsxNV07Zm9yKG89MDtvPDM7KytvKWYrPXRoaXMubGlnaHRQb3NpdGlvbltvXSp1WzQqbyszXTtmb3Iobz0wO288MzsrK28pe2Zvcih2YXIgcD11WzEyK29dLGQ9MDtkPDM7KytkKXArPXVbNCpkK29dKnRoaXMubGlnaHRQb3NpdGlvbltkXTtjLmxpZ2h0UG9zaXRpb25bb109cC9mfWlmKHRoaXMudHJpYW5nbGVDb3VudD4wKXt2YXIgZz10aGlzLnRyaVNoYWRlcjtnLmJpbmQoKSxnLnVuaWZvcm1zPWMsdGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCl9fSxwLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxoLG49dC52aWV3fHxoLGE9dC5wcm9qZWN0aW9ufHxoLGk9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28paVswXVtvXT1NYXRoLm1heChpWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksaVsxXVtvXT1NYXRoLm1pbihpWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGEpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246YSxjbGlwQm91bmRzOmksdHViZVNjYWxlOnRoaXMudHViZVNjYWxlLHZlY3RvclNjYWxlOnRoaXMudmVjdG9yU2NhbGUsY29uZVNjYWxlOnRoaXMuY29uZVNjYWxlLGNvbmVPZmZzZXQ6dGhpcy5jb25lT2Zmc2V0LHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9LGw9dGhpcy5waWNrU2hhZGVyO2wuYmluZCgpLGwudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKX0scC5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10LnZhbHVlWzBdKzI1Nip0LnZhbHVlWzFdKzY1NTM2KnQudmFsdWVbMl0scj10aGlzLmNlbGxzW2VdLG49dGhpcy5wb3NpdGlvbnNbclsxXV0uc2xpY2UoMCwzKSxhPXtwb3NpdGlvbjpuLGRhdGFDb29yZGluYXRlOm4saW5kZXg6TWF0aC5mbG9vcihyWzFdLzQ4KX07cmV0dXJuImNvbmUiPT09dGhpcy50cmFjZVR5cGU/YS5pbmRleD1NYXRoLmZsb29yKHJbMV0vNDgpOiJzdHJlYW10dWJlIj09PXRoaXMudHJhY2VUeXBlJiYoYS5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHlbclsxXV0sYS52ZWxvY2l0eT10aGlzLnZlY3RvcnNbclsxXV0uc2xpY2UoMCwzKSxhLmRpdmVyZ2VuY2U9dGhpcy52ZWN0b3JzW3JbMV1dWzNdLGEuaW5kZXg9ZSksYX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVmVjdG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUNvbG9ycy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZVVWcy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUlkcy5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHM9ci5zaGFkZXJzOzE9PT1hcmd1bWVudHMubGVuZ3RoJiYodD0oZT10KS5nbCk7dmFyIGw9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQsZS5tZXNoU2hhZGVyLnZlcnRleCxlLm1lc2hTaGFkZXIuZnJhZ21lbnQsbnVsbCxlLm1lc2hTaGFkZXIuYXR0cmlidXRlcyk7cmV0dXJuIHIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHIuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLHIuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLHIuYXR0cmlidXRlcy52ZWN0b3IubG9jYXRpb249NCxyfSh0LHMpLHU9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQsZS5waWNrU2hhZGVyLnZlcnRleCxlLnBpY2tTaGFkZXIuZnJhZ21lbnQsbnVsbCxlLnBpY2tTaGFkZXIuYXR0cmlidXRlcyk7cmV0dXJuIHIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHIuYXR0cmlidXRlcy5pZC5sb2NhdGlvbj0xLHIuYXR0cmlidXRlcy52ZWN0b3IubG9jYXRpb249NCxyfSh0LHMpLGg9byh0LGMobmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTtoLmdlbmVyYXRlTWlwbWFwKCksaC5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUixoLm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgcD1hKHQpLGQ9YSh0KSxnPWEodCksdj1hKHQpLG09YSh0KSx5PW5ldyBmKHQsaCxsLHUscCxkLG0sZyx2LGkodCxbe2J1ZmZlcjpwLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6bSx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpnLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dix0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOmQsdHlwZTp0LkZMT0FULHNpemU6NH1dKSxyLnRyYWNlVHlwZXx8ImNvbmUiKTtyZXR1cm4geS51cGRhdGUoZSkseX19LHtjb2xvcm1hcDoxMjgsImdsLWJ1ZmZlciI6MjQ0LCJnbC1tYXQ0L2ludmVydCI6MjY4LCJnbC1tYXQ0L211bHRpcGx5IjoyNzAsImdsLXNoYWRlciI6MzA0LCJnbC10ZXh0dXJlMmQiOjMyNCwiZ2wtdmFvIjozMjksbmRhcnJheTo0NTJ9XSwyNDc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksYT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIGNvbmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgY29uZSB3aXRoIGl0cyB0b3AgYXQgb3JpZ2luIGFuZCBoZWlnaHQgb2YgMS4wLFxuLy8gcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgdmVjdG9yIGF0dHJpYnV0ZS5cbi8vXG4vLyBFYWNoIGNvbmUgaXMgbWFkZSB1cCBvZiBhIHRvcCB2ZXJ0ZXgsIGEgY2VudGVyIGJhc2UgdmVydGV4IGFuZCBiYXNlIHBlcmltZXRlciB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgY29uZSBieSB0aGUgZm9sbG93aW5nOlxuLy8gICBzZWdtZW50ICsgMCB0b3AgdmVydGV4XG4vLyAgIHNlZ21lbnQgKyAxIHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyAgIHNlZ21lbnQgKyAyIHBlcmltZXRlciB2ZXJ0ZXggYVxuLy8gICBzZWdtZW50ICsgMyBjZW50ZXIgYmFzZSB2ZXJ0ZXhcbi8vICAgc2VnbWVudCArIDQgcGVyaW1ldGVyIHZlcnRleCBhXG4vLyAgIHNlZ21lbnQgKyA1IHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyBXaGVyZSBzZWdtZW50IGlzIHRoZSBudW1iZXIgb2YgdGhlIHJhZGlhbCBzZWdtZW50ICogNiBhbmQgYSBpcyB0aGUgYW5nbGUgYXQgdGhhdCByYWRpYWwgc2VnbWVudC5cbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCwgZmxvb3IoaW5kZXggLyA2KVxuLy8gVG8gZ28gZnJvbSBzZWdtZW50IHRvIGFuZ2xlLCAyKnBpICogKHNlZ21lbnQvc2VnbWVudENvdW50KVxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50IGluZGV4LCBpbmRleCAtIChzZWdtZW50KjYpXG4vL1xudmVjMyBnZXRDb25lUG9zaXRpb24odmVjMyBkLCBmbG9hdCByYXdJbmRleCwgZmxvYXQgY29uZU9mZnNldCwgb3V0IHZlYzMgbm9ybWFsKSB7XG5cbiAgY29uc3QgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xuXG4gIGZsb2F0IGluZGV4ID0gcmF3SW5kZXggLSBmbG9vcihyYXdJbmRleCAvXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCkpICpcbiAgICAoc2VnbWVudENvdW50ICogNi4wKTtcblxuICBmbG9hdCBzZWdtZW50ID0gZmxvb3IoMC4wMDEgKyBpbmRleC82LjApO1xuICBmbG9hdCBzZWdtZW50SW5kZXggPSBpbmRleCAtIChzZWdtZW50KjYuMCk7XG5cbiAgbm9ybWFsID0gLW5vcm1hbGl6ZShkKTtcblxuICBpZiAoc2VnbWVudEluZGV4ID4gMi45OSAmJiBzZWdtZW50SW5kZXggPCAzLjAxKSB7XG4gICAgcmV0dXJuIG1peCh2ZWMzKDAuMCksIC1kLCBjb25lT2Zmc2V0KTtcbiAgfVxuXG4gIGZsb2F0IG5leHRBbmdsZSA9IChcbiAgICAoc2VnbWVudEluZGV4ID4gMC45OSAmJiAgc2VnbWVudEluZGV4IDwgMS4wMSkgfHxcbiAgICAoc2VnbWVudEluZGV4ID4gNC45OSAmJiAgc2VnbWVudEluZGV4IDwgNS4wMSlcbiAgKSA/IDEuMCA6IDAuMDtcbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKChzZWdtZW50ICsgbmV4dEFuZ2xlKSAvIHNlZ21lbnRDb3VudCk7XG5cbiAgdmVjMyB2MSA9IG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xuICB2ZWMzIHYyID0gdjEgLSBkO1xuXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XG5cbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB2MyA9IHYyICsgeCArIHk7XG4gIGlmIChzZWdtZW50SW5kZXggPCAzLjApIHtcbiAgICB2ZWMzIHR4ID0gdSAqIHNpbihhbmdsZSk7XG4gICAgdmVjMyB0eSA9IHYgKiAtY29zKGFuZ2xlKTtcbiAgICB2ZWMzIHRhbmdlbnQgPSB0eCArIHR5O1xuICAgIG5vcm1hbCA9IG5vcm1hbGl6ZShjcm9zcyh2MyAtIHYxLCB0YW5nZW50KSk7XG4gIH1cblxuICBpZiAoc2VnbWVudEluZGV4ID09IDAuMCkge1xuICAgIHJldHVybiBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcbiAgfVxuICByZXR1cm4gdjM7XG59XG5cbmF0dHJpYnV0ZSB2ZWMzIHZlY3RvcjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yLCBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIGZsb2F0IHZlY3RvclNjYWxlLCBjb25lU2NhbGUsIGNvbmVPZmZzZXQ7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb24sIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbiwgbGlnaHRQb3NpdGlvbjtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsLCBmX2xpZ2h0RGlyZWN0aW9uLCBmX2V5ZURpcmVjdGlvbiwgZl9kYXRhLCBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICAvLyBTY2FsZSB0aGUgdmVjdG9yIG1hZ25pdHVkZSB0byBzdGF5IGNvbnN0YW50IHdpdGhcbiAgLy8gbW9kZWwgJiB2aWV3IGNoYW5nZXMuXG4gIHZlYzMgbm9ybWFsO1xuICB2ZWMzIFhZWiA9IGdldENvbmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICgodmVjdG9yU2NhbGUgKiBjb25lU2NhbGUpICogdmVjdG9yKSwgcG9zaXRpb24udywgY29uZU9mZnNldCwgbm9ybWFsKTtcbiAgdmVjNCBjb25lUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XG5cbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiBjb25lUG9zaXRpb247XG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcbiAgZl9saWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfbm9ybWFsID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwgMC4wKSAqIGludmVyc2VNb2RlbCkueHl6KTtcblxuICAvLyB2ZWM0IG1fcG9zaXRpb24gID0gbW9kZWwgKiB2ZWM0KGNvbmVQb3NpdGlvbiwgMS4wKTtcbiAgdmVjNCB0X3Bvc2l0aW9uICA9IHZpZXcgKiBjb25lUG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uICAgICAgPSBwcm9qZWN0aW9uICogdF9wb3NpdGlvbjtcblxuICBmX2NvbG9yICAgICAgICAgID0gY29sb3I7XG4gIGZfZGF0YSAgICAgICAgICAgPSBjb25lUG9zaXRpb24ueHl6O1xuICBmX3Bvc2l0aW9uICAgICAgID0gcG9zaXRpb24ueHl6O1xuICBmX3V2ICAgICAgICAgICAgID0gdXY7XG59XG4iXSksaT1uKFsiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcyxcbiAgZmxvYXQgZnJlc25lbCkge1xuXG4gIGZsb2F0IFZkb3ROID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcbiAgZmxvYXQgTGRvdE4gPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcblxuICAvL0hhbGYgYW5nbGUgdmVjdG9yXG4gIHZlYzMgSCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pO1xuXG4gIC8vR2VvbWV0cmljIHRlcm1cbiAgZmxvYXQgTmRvdEggPSBtYXgoZG90KHN1cmZhY2VOb3JtYWwsIEgpLCAwLjApO1xuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgTGRvdEggPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBHMSA9ICgyLjAgKiBOZG90SCAqIFZkb3ROKSAvIFZkb3RIO1xuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xuICBmbG9hdCBHID0gbWluKDEuMCwgbWluKEcxLCBHMikpO1xuICBcbiAgLy9EaXN0cmlidXRpb24gdGVybVxuICBmbG9hdCBEID0gYmVja21hbm5EaXN0cmlidXRpb24oTmRvdEgsIHJvdWdobmVzcyk7XG5cbiAgLy9GcmVzbmVsIHRlcm1cbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XG5cbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3MsIGZyZXNuZWwsIGthbWJpZW50LCBrZGlmZnVzZSwga3NwZWN1bGFyLCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsLCBmX2xpZ2h0RGlyZWN0aW9uLCBmX2V5ZURpcmVjdGlvbiwgZl9kYXRhLCBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX3Bvc2l0aW9uKSkgZGlzY2FyZDtcbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZl9leWVEaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtaW4oMS4wLCBtYXgoMC4wLCBjb29rVG9ycmFuY2VTcGVjdWxhcihMLCBWLCBOLCByb3VnaG5lc3MsIGZyZXNuZWwpKSk7XG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xuXG4gIHZlYzQgc3VyZmFjZUNvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KTtcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGxpdENvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZlYzMgZ2V0T3J0aG9nb25hbFZlY3Rvcih2ZWMzIHYpIHtcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXG4gIC8vIEZyb20gdGhlIGFib3ZlIGlmLXN0YXRlbWVudCB3ZSBoYXZlIHx8YXx8ID4gMCAgVSAgfHxifHwgPiAwLlxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXG4gIGlmICh2Lngqdi54ID4gdi56KnYueiB8fCB2Lnkqdi55ID4gdi56KnYueikge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygwLjAsIHYueiwgLXYueSkpO1xuICB9XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgY29uZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4vL1xuLy8gVGhlIHJldHVybmVkIHZlcnRleCBpcyBmb3IgYSBjb25lIHdpdGggaXRzIHRvcCBhdCBvcmlnaW4gYW5kIGhlaWdodCBvZiAxLjAsXG4vLyBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSB2ZWN0b3IgYXR0cmlidXRlLlxuLy9cbi8vIEVhY2ggY29uZSBpcyBtYWRlIHVwIG9mIGEgdG9wIHZlcnRleCwgYSBjZW50ZXIgYmFzZSB2ZXJ0ZXggYW5kIGJhc2UgcGVyaW1ldGVyIHZlcnRpY2VzLlxuLy8gVGhlc2UgdmVydGljZXMgYXJlIHVzZWQgdG8gbWFrZSB1cCB0aGUgdHJpYW5nbGVzIG9mIHRoZSBjb25lIGJ5IHRoZSBmb2xsb3dpbmc6XG4vLyAgIHNlZ21lbnQgKyAwIHRvcCB2ZXJ0ZXhcbi8vICAgc2VnbWVudCArIDEgcGVyaW1ldGVyIHZlcnRleCBhKzFcbi8vICAgc2VnbWVudCArIDIgcGVyaW1ldGVyIHZlcnRleCBhXG4vLyAgIHNlZ21lbnQgKyAzIGNlbnRlciBiYXNlIHZlcnRleFxuLy8gICBzZWdtZW50ICsgNCBwZXJpbWV0ZXIgdmVydGV4IGFcbi8vICAgc2VnbWVudCArIDUgcGVyaW1ldGVyIHZlcnRleCBhKzFcbi8vIFdoZXJlIHNlZ21lbnQgaXMgdGhlIG51bWJlciBvZiB0aGUgcmFkaWFsIHNlZ21lbnQgKiA2IGFuZCBhIGlzIHRoZSBhbmdsZSBhdCB0aGF0IHJhZGlhbCBzZWdtZW50LlxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50LCBmbG9vcihpbmRleCAvIDYpXG4vLyBUbyBnbyBmcm9tIHNlZ21lbnQgdG8gYW5nbGUsIDIqcGkgKiAoc2VnbWVudC9zZWdtZW50Q291bnQpXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQgaW5kZXgsIGluZGV4IC0gKHNlZ21lbnQqNilcbi8vXG52ZWMzIGdldENvbmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IHJhd0luZGV4LCBmbG9hdCBjb25lT2Zmc2V0LCBvdXQgdmVjMyBub3JtYWwpIHtcblxuICBjb25zdCBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XG5cbiAgZmxvYXQgaW5kZXggPSByYXdJbmRleCAtIGZsb29yKHJhd0luZGV4IC9cbiAgICAoc2VnbWVudENvdW50ICogNi4wKSkgKlxuICAgIChzZWdtZW50Q291bnQgKiA2LjApO1xuXG4gIGZsb2F0IHNlZ21lbnQgPSBmbG9vcigwLjAwMSArIGluZGV4LzYuMCk7XG4gIGZsb2F0IHNlZ21lbnRJbmRleCA9IGluZGV4IC0gKHNlZ21lbnQqNi4wKTtcblxuICBub3JtYWwgPSAtbm9ybWFsaXplKGQpO1xuXG4gIGlmIChzZWdtZW50SW5kZXggPiAyLjk5ICYmIHNlZ21lbnRJbmRleCA8IDMuMDEpIHtcbiAgICByZXR1cm4gbWl4KHZlYzMoMC4wKSwgLWQsIGNvbmVPZmZzZXQpO1xuICB9XG5cbiAgZmxvYXQgbmV4dEFuZ2xlID0gKFxuICAgIChzZWdtZW50SW5kZXggPiAwLjk5ICYmICBzZWdtZW50SW5kZXggPCAxLjAxKSB8fFxuICAgIChzZWdtZW50SW5kZXggPiA0Ljk5ICYmICBzZWdtZW50SW5kZXggPCA1LjAxKVxuICApID8gMS4wIDogMC4wO1xuICBmbG9hdCBhbmdsZSA9IDIuMCAqIDMuMTQxNTkgKiAoKHNlZ21lbnQgKyBuZXh0QW5nbGUpIC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHYxID0gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XG4gIHZlYzMgdjIgPSB2MSAtIGQ7XG5cbiAgdmVjMyB1ID0gZ2V0T3J0aG9nb25hbFZlY3RvcihkKTtcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcblxuICB2ZWMzIHggPSB1ICogY29zKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xuICB2ZWMzIHYzID0gdjIgKyB4ICsgeTtcbiAgaWYgKHNlZ21lbnRJbmRleCA8IDMuMCkge1xuICAgIHZlYzMgdHggPSB1ICogc2luKGFuZ2xlKTtcbiAgICB2ZWMzIHR5ID0gdiAqIC1jb3MoYW5nbGUpO1xuICAgIHZlYzMgdGFuZ2VudCA9IHR4ICsgdHk7XG4gICAgbm9ybWFsID0gbm9ybWFsaXplKGNyb3NzKHYzIC0gdjEsIHRhbmdlbnQpKTtcbiAgfVxuXG4gIGlmIChzZWdtZW50SW5kZXggPT0gMC4wKSB7XG4gICAgcmV0dXJuIG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xuICB9XG4gIHJldHVybiB2Mztcbn1cblxuYXR0cmlidXRlIHZlYzQgdmVjdG9yO1xuYXR0cmlidXRlIHZlYzQgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZSwgY29uZVNjYWxlLCBjb25lT2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgbm9ybWFsO1xuICB2ZWMzIFhZWiA9IGdldENvbmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICgodmVjdG9yU2NhbGUgKiBjb25lU2NhbGUpICogdmVjdG9yLnh5eiksIHBvc2l0aW9uLncsIGNvbmVPZmZzZXQsIG5vcm1hbCk7XG4gIHZlYzQgY29uZVBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLnh5eiwgMS4wKSArIHZlYzQoWFlaLCAwLjApO1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogY29uZVBvc2l0aW9uO1xuICBmX2lkICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uLnh5ejtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIGZfaWQueHl6KTtcbn0iXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6YSxmcmFnbWVudDppLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjNCJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9LHtuYW1lOiJ2ZWN0b3IiLHR5cGU6InZlYzMifV19LHIucGlja1NoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWMzIn1dfX0se2dsc2xpZnk6NDExfV0sMjQ4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXswOiJOT05FIiwxOiJPTkUiLDI6IkxJTkVfTE9PUCIsMzoiTElORV9TVFJJUCIsNDoiVFJJQU5HTEVTIiw1OiJUUklBTkdMRV9TVFJJUCIsNjoiVFJJQU5HTEVfRkFOIiwyNTY6IkRFUFRIX0JVRkZFUl9CSVQiLDUxMjoiTkVWRVIiLDUxMzoiTEVTUyIsNTE0OiJFUVVBTCIsNTE1OiJMRVFVQUwiLDUxNjoiR1JFQVRFUiIsNTE3OiJOT1RFUVVBTCIsNTE4OiJHRVFVQUwiLDUxOToiQUxXQVlTIiw3Njg6IlNSQ19DT0xPUiIsNzY5OiJPTkVfTUlOVVNfU1JDX0NPTE9SIiw3NzA6IlNSQ19BTFBIQSIsNzcxOiJPTkVfTUlOVVNfU1JDX0FMUEhBIiw3NzI6IkRTVF9BTFBIQSIsNzczOiJPTkVfTUlOVVNfRFNUX0FMUEhBIiw3NzQ6IkRTVF9DT0xPUiIsNzc1OiJPTkVfTUlOVVNfRFNUX0NPTE9SIiw3NzY6IlNSQ19BTFBIQV9TQVRVUkFURSIsMTAyNDoiU1RFTkNJTF9CVUZGRVJfQklUIiwxMDI4OiJGUk9OVCIsMTAyOToiQkFDSyIsMTAzMjoiRlJPTlRfQU5EX0JBQ0siLDEyODA6IklOVkFMSURfRU5VTSIsMTI4MToiSU5WQUxJRF9WQUxVRSIsMTI4MjoiSU5WQUxJRF9PUEVSQVRJT04iLDEyODU6Ik9VVF9PRl9NRU1PUlkiLDEyODY6IklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIiwyMzA0OiJDVyIsMjMwNToiQ0NXIiwyODQ5OiJMSU5FX1dJRFRIIiwyODg0OiJDVUxMX0ZBQ0UiLDI4ODU6IkNVTExfRkFDRV9NT0RFIiwyODg2OiJGUk9OVF9GQUNFIiwyOTI4OiJERVBUSF9SQU5HRSIsMjkyOToiREVQVEhfVEVTVCIsMjkzMDoiREVQVEhfV1JJVEVNQVNLIiwyOTMxOiJERVBUSF9DTEVBUl9WQUxVRSIsMjkzMjoiREVQVEhfRlVOQyIsMjk2MDoiU1RFTkNJTF9URVNUIiwyOTYxOiJTVEVOQ0lMX0NMRUFSX1ZBTFVFIiwyOTYyOiJTVEVOQ0lMX0ZVTkMiLDI5NjM6IlNURU5DSUxfVkFMVUVfTUFTSyIsMjk2NDoiU1RFTkNJTF9GQUlMIiwyOTY1OiJTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCIsMjk2NjoiU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MiLDI5Njc6IlNURU5DSUxfUkVGIiwyOTY4OiJTVEVOQ0lMX1dSSVRFTUFTSyIsMjk3ODoiVklFV1BPUlQiLDMwMjQ6IkRJVEhFUiIsMzA0MjoiQkxFTkQiLDMwODg6IlNDSVNTT1JfQk9YIiwzMDg5OiJTQ0lTU09SX1RFU1QiLDMxMDY6IkNPTE9SX0NMRUFSX1ZBTFVFIiwzMTA3OiJDT0xPUl9XUklURU1BU0siLDMzMTc6IlVOUEFDS19BTElHTk1FTlQiLDMzMzM6IlBBQ0tfQUxJR05NRU5UIiwzMzc5OiJNQVhfVEVYVFVSRV9TSVpFIiwzMzg2OiJNQVhfVklFV1BPUlRfRElNUyIsMzQwODoiU1VCUElYRUxfQklUUyIsMzQxMDoiUkVEX0JJVFMiLDM0MTE6IkdSRUVOX0JJVFMiLDM0MTI6IkJMVUVfQklUUyIsMzQxMzoiQUxQSEFfQklUUyIsMzQxNDoiREVQVEhfQklUUyIsMzQxNToiU1RFTkNJTF9CSVRTIiwzNTUzOiJURVhUVVJFXzJEIiw0MzUyOiJET05UX0NBUkUiLDQzNTM6IkZBU1RFU1QiLDQzNTQ6Ik5JQ0VTVCIsNTEyMDoiQllURSIsNTEyMToiVU5TSUdORURfQllURSIsNTEyMjoiU0hPUlQiLDUxMjM6IlVOU0lHTkVEX1NIT1JUIiw1MTI0OiJJTlQiLDUxMjU6IlVOU0lHTkVEX0lOVCIsNTEyNjoiRkxPQVQiLDUzODY6IklOVkVSVCIsNTg5MDoiVEVYVFVSRSIsNjQwMToiU1RFTkNJTF9JTkRFWCIsNjQwMjoiREVQVEhfQ09NUE9ORU5UIiw2NDA2OiJBTFBIQSIsNjQwNzoiUkdCIiw2NDA4OiJSR0JBIiw2NDA5OiJMVU1JTkFOQ0UiLDY0MTA6IkxVTUlOQU5DRV9BTFBIQSIsNzY4MDoiS0VFUCIsNzY4MToiUkVQTEFDRSIsNzY4MjoiSU5DUiIsNzY4MzoiREVDUiIsNzkzNjoiVkVORE9SIiw3OTM3OiJSRU5ERVJFUiIsNzkzODoiVkVSU0lPTiIsOTcyODoiTkVBUkVTVCIsOTcyOToiTElORUFSIiw5OTg0OiJORUFSRVNUX01JUE1BUF9ORUFSRVNUIiw5OTg1OiJMSU5FQVJfTUlQTUFQX05FQVJFU1QiLDk5ODY6Ik5FQVJFU1RfTUlQTUFQX0xJTkVBUiIsOTk4NzoiTElORUFSX01JUE1BUF9MSU5FQVIiLDEwMjQwOiJURVhUVVJFX01BR19GSUxURVIiLDEwMjQxOiJURVhUVVJFX01JTl9GSUxURVIiLDEwMjQyOiJURVhUVVJFX1dSQVBfUyIsMTAyNDM6IlRFWFRVUkVfV1JBUF9UIiwxMDQ5NzoiUkVQRUFUIiwxMDc1MjoiUE9MWUdPTl9PRkZTRVRfVU5JVFMiLDE2Mzg0OiJDT0xPUl9CVUZGRVJfQklUIiwzMjc2OToiQ09OU1RBTlRfQ09MT1IiLDMyNzcwOiJPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IiLDMyNzcxOiJDT05TVEFOVF9BTFBIQSIsMzI3NzI6Ik9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSIsMzI3NzM6IkJMRU5EX0NPTE9SIiwzMjc3NDoiRlVOQ19BREQiLDMyNzc3OiJCTEVORF9FUVVBVElPTl9SR0IiLDMyNzc4OiJGVU5DX1NVQlRSQUNUIiwzMjc3OToiRlVOQ19SRVZFUlNFX1NVQlRSQUNUIiwzMjgxOToiVU5TSUdORURfU0hPUlRfNF80XzRfNCIsMzI4MjA6IlVOU0lHTkVEX1NIT1JUXzVfNV81XzEiLDMyODIzOiJQT0xZR09OX09GRlNFVF9GSUxMIiwzMjgyNDoiUE9MWUdPTl9PRkZTRVRfRkFDVE9SIiwzMjg1NDoiUkdCQTQiLDMyODU1OiJSR0I1X0ExIiwzMjg3MzoiVEVYVFVSRV9CSU5ESU5HXzJEIiwzMjkyNjoiU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFIiwzMjkyODoiU0FNUExFX0NPVkVSQUdFIiwzMjkzNjoiU0FNUExFX0JVRkZFUlMiLDMyOTM3OiJTQU1QTEVTIiwzMjkzODoiU0FNUExFX0NPVkVSQUdFX1ZBTFVFIiwzMjkzOToiU0FNUExFX0NPVkVSQUdFX0lOVkVSVCIsMzI5Njg6IkJMRU5EX0RTVF9SR0IiLDMyOTY5OiJCTEVORF9TUkNfUkdCIiwzMjk3MDoiQkxFTkRfRFNUX0FMUEhBIiwzMjk3MToiQkxFTkRfU1JDX0FMUEhBIiwzMzA3MToiQ0xBTVBfVE9fRURHRSIsMzMxNzA6IkdFTkVSQVRFX01JUE1BUF9ISU5UIiwzMzE4OToiREVQVEhfQ09NUE9ORU5UMTYiLDMzMzA2OiJERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQiLDMzNjM1OiJVTlNJR05FRF9TSE9SVF81XzZfNSIsMzM2NDg6Ik1JUlJPUkVEX1JFUEVBVCIsMzM5MDE6IkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSIsMzM5MDI6IkFMSUFTRURfTElORV9XSURUSF9SQU5HRSIsMzM5ODQ6IlRFWFRVUkUwIiwzMzk4NToiVEVYVFVSRTEiLDMzOTg2OiJURVhUVVJFMiIsMzM5ODc6IlRFWFRVUkUzIiwzMzk4ODoiVEVYVFVSRTQiLDMzOTg5OiJURVhUVVJFNSIsMzM5OTA6IlRFWFRVUkU2IiwzMzk5MToiVEVYVFVSRTciLDMzOTkyOiJURVhUVVJFOCIsMzM5OTM6IlRFWFRVUkU5IiwzMzk5NDoiVEVYVFVSRTEwIiwzMzk5NToiVEVYVFVSRTExIiwzMzk5NjoiVEVYVFVSRTEyIiwzMzk5NzoiVEVYVFVSRTEzIiwzMzk5ODoiVEVYVFVSRTE0IiwzMzk5OToiVEVYVFVSRTE1IiwzNDAwMDoiVEVYVFVSRTE2IiwzNDAwMToiVEVYVFVSRTE3IiwzNDAwMjoiVEVYVFVSRTE4IiwzNDAwMzoiVEVYVFVSRTE5IiwzNDAwNDoiVEVYVFVSRTIwIiwzNDAwNToiVEVYVFVSRTIxIiwzNDAwNjoiVEVYVFVSRTIyIiwzNDAwNzoiVEVYVFVSRTIzIiwzNDAwODoiVEVYVFVSRTI0IiwzNDAwOToiVEVYVFVSRTI1IiwzNDAxMDoiVEVYVFVSRTI2IiwzNDAxMToiVEVYVFVSRTI3IiwzNDAxMjoiVEVYVFVSRTI4IiwzNDAxMzoiVEVYVFVSRTI5IiwzNDAxNDoiVEVYVFVSRTMwIiwzNDAxNToiVEVYVFVSRTMxIiwzNDAxNjoiQUNUSVZFX1RFWFRVUkUiLDM0MDI0OiJNQVhfUkVOREVSQlVGRkVSX1NJWkUiLDM0MDQxOiJERVBUSF9TVEVOQ0lMIiwzNDA1NToiSU5DUl9XUkFQIiwzNDA1NjoiREVDUl9XUkFQIiwzNDA2NzoiVEVYVFVSRV9DVUJFX01BUCIsMzQwNjg6IlRFWFRVUkVfQklORElOR19DVUJFX01BUCIsMzQwNjk6IlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCIsMzQwNzA6IlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCIsMzQwNzE6IlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSIsMzQwNzI6IlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSIsMzQwNzM6IlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiIsMzQwNzQ6IlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiIsMzQwNzY6Ik1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUiLDM0MzM4OiJWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQiLDM0MzM5OiJWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUiLDM0MzQwOiJWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSIsMzQzNDE6IlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSIsMzQzNDI6IkNVUlJFTlRfVkVSVEVYX0FUVFJJQiIsMzQzNzM6IlZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUiIsMzQ0NjY6Ik5VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyIsMzQ0Njc6IkNPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTIiwzNDY2MDoiQlVGRkVSX1NJWkUiLDM0NjYxOiJCVUZGRVJfVVNBR0UiLDM0ODE2OiJTVEVOQ0lMX0JBQ0tfRlVOQyIsMzQ4MTc6IlNURU5DSUxfQkFDS19GQUlMIiwzNDgxODoiU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCIsMzQ4MTk6IlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MiLDM0ODc3OiJCTEVORF9FUVVBVElPTl9BTFBIQSIsMzQ5MjE6Ik1BWF9WRVJURVhfQVRUUklCUyIsMzQ5MjI6IlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCIsMzQ5MzA6Ik1BWF9URVhUVVJFX0lNQUdFX1VOSVRTIiwzNDk2MjoiQVJSQVlfQlVGRkVSIiwzNDk2MzoiRUxFTUVOVF9BUlJBWV9CVUZGRVIiLDM0OTY0OiJBUlJBWV9CVUZGRVJfQklORElORyIsMzQ5NjU6IkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkciLDM0OTc1OiJWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIiwzNTA0MDoiU1RSRUFNX0RSQVciLDM1MDQ0OiJTVEFUSUNfRFJBVyIsMzUwNDg6IkRZTkFNSUNfRFJBVyIsMzU2MzI6IkZSQUdNRU5UX1NIQURFUiIsMzU2MzM6IlZFUlRFWF9TSEFERVIiLDM1NjYwOiJNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMiLDM1NjYxOiJNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyIsMzU2NjM6IlNIQURFUl9UWVBFIiwzNTY2NDoiRkxPQVRfVkVDMiIsMzU2NjU6IkZMT0FUX1ZFQzMiLDM1NjY2OiJGTE9BVF9WRUM0IiwzNTY2NzoiSU5UX1ZFQzIiLDM1NjY4OiJJTlRfVkVDMyIsMzU2Njk6IklOVF9WRUM0IiwzNTY3MDoiQk9PTCIsMzU2NzE6IkJPT0xfVkVDMiIsMzU2NzI6IkJPT0xfVkVDMyIsMzU2NzM6IkJPT0xfVkVDNCIsMzU2NzQ6IkZMT0FUX01BVDIiLDM1Njc1OiJGTE9BVF9NQVQzIiwzNTY3NjoiRkxPQVRfTUFUNCIsMzU2Nzg6IlNBTVBMRVJfMkQiLDM1NjgwOiJTQU1QTEVSX0NVQkUiLDM1NzEyOiJERUxFVEVfU1RBVFVTIiwzNTcxMzoiQ09NUElMRV9TVEFUVVMiLDM1NzE0OiJMSU5LX1NUQVRVUyIsMzU3MTU6IlZBTElEQVRFX1NUQVRVUyIsMzU3MTY6IklORk9fTE9HX0xFTkdUSCIsMzU3MTc6IkFUVEFDSEVEX1NIQURFUlMiLDM1NzE4OiJBQ1RJVkVfVU5JRk9STVMiLDM1NzE5OiJBQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIIiwzNTcyMDoiU0hBREVSX1NPVVJDRV9MRU5HVEgiLDM1NzIxOiJBQ1RJVkVfQVRUUklCVVRFUyIsMzU3MjI6IkFDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCIsMzU3MjQ6IlNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTiIsMzU3MjU6IkNVUlJFTlRfUFJPR1JBTSIsMzYwMDM6IlNURU5DSUxfQkFDS19SRUYiLDM2MDA0OiJTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyIsMzYwMDU6IlNURU5DSUxfQkFDS19XUklURU1BU0siLDM2MDA2OiJGUkFNRUJVRkZFUl9CSU5ESU5HIiwzNjAwNzoiUkVOREVSQlVGRkVSX0JJTkRJTkciLDM2MDQ4OiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFIiwzNjA0OToiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSIsMzYwNTA6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCIsMzYwNTE6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFIiwzNjA1MzoiRlJBTUVCVUZGRVJfQ09NUExFVEUiLDM2MDU0OiJGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQiLDM2MDU1OiJGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCIsMzYwNTc6IkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyIsMzYwNjE6IkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEIiwzNjA2NDoiQ09MT1JfQVRUQUNITUVOVDAiLDM2MDk2OiJERVBUSF9BVFRBQ0hNRU5UIiwzNjEyODoiU1RFTkNJTF9BVFRBQ0hNRU5UIiwzNjE2MDoiRlJBTUVCVUZGRVIiLDM2MTYxOiJSRU5ERVJCVUZGRVIiLDM2MTYyOiJSRU5ERVJCVUZGRVJfV0lEVEgiLDM2MTYzOiJSRU5ERVJCVUZGRVJfSEVJR0hUIiwzNjE2NDoiUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCIsMzYxNjg6IlNURU5DSUxfSU5ERVg4IiwzNjE3NjoiUkVOREVSQlVGRkVSX1JFRF9TSVpFIiwzNjE3NzoiUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUiLDM2MTc4OiJSRU5ERVJCVUZGRVJfQkxVRV9TSVpFIiwzNjE3OToiUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUiLDM2MTgwOiJSRU5ERVJCVUZGRVJfREVQVEhfU0laRSIsMzYxODE6IlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUiLDM2MTk0OiJSR0I1NjUiLDM2MzM2OiJMT1dfRkxPQVQiLDM2MzM3OiJNRURJVU1fRkxPQVQiLDM2MzM4OiJISUdIX0ZMT0FUIiwzNjMzOToiTE9XX0lOVCIsMzYzNDA6Ik1FRElVTV9JTlQiLDM2MzQxOiJISUdIX0lOVCIsMzYzNDY6IlNIQURFUl9DT01QSUxFUiIsMzYzNDc6Ik1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTIiwzNjM0ODoiTUFYX1ZBUllJTkdfVkVDVE9SUyIsMzYzNDk6Ik1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMiLDM3NDQwOiJVTlBBQ0tfRkxJUF9ZX1dFQkdMIiwzNzQ0MToiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIiwzNzQ0MjoiQ09OVEVYVF9MT1NUX1dFQkdMIiwzNzQ0MzoiVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCIsMzc0NDQ6IkJST1dTRVJfREVGQVVMVF9XRUJHTCJ9fSx7fV0sMjQ5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi8xLjAvbnVtYmVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblt0XX19LHsiLi8xLjAvbnVtYmVycyI6MjQ4fV0sMjUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxvPWEoZSxbe2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjQwfSx7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6NCxvZmZzZXQ6MTIsc3RyaWRlOjQwfSx7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6MyxvZmZzZXQ6Mjgsc3RyaWRlOjQwfV0pLGw9aShlKTtsLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxsLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MSxsLmF0dHJpYnV0ZXMub2Zmc2V0LmxvY2F0aW9uPTI7dmFyIGM9bmV3IHMoZSxyLG8sbCk7cmV0dXJuIGMudXBkYXRlKHQpLGN9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksaT10KCIuL3NoYWRlcnMvaW5kZXgiKSxvPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBzKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1uLHRoaXMuYnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXSx0aGlzLmNhcFNpemU9WzEwLDEwLDEwXSx0aGlzLmxpbmVDb3VudD1bMCwwLDBdLHRoaXMubGluZU9mZnNldD1bMCwwLDBdLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITF9dmFyIGw9cy5wcm90b3R5cGU7ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj0wO3I8MzsrK3IpdFswXVtyXT1NYXRoLm1pbih0WzBdW3JdLGVbcl0pLHRbMV1bcl09TWF0aC5tYXgodFsxXVtyXSxlW3JdKX1sLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaGFzQWxwaGF9LGwuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0FscGhhfSxsLmRyYXdUcmFuc3BhcmVudD1sLmRyYXc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMuc2hhZGVyLnVuaWZvcm1zO3RoaXMuc2hhZGVyLmJpbmQoKTt2YXIgbj1yLnZpZXc9dC52aWV3fHxvLGE9ci5wcm9qZWN0aW9uPXQucHJvamVjdGlvbnx8bztyLm1vZGVsPXQubW9kZWx8fG8sci5jbGlwQm91bmRzPXRoaXMuY2xpcEJvdW5kcyxyLm9wYWNpdHk9dGhpcy5vcGFjaXR5O3ZhciBpPW5bMTJdLHM9blsxM10sbD1uWzE0XSxjPW5bMTVdLHU9KHQuX29ydGhvfHwhMT8yOjEpKnRoaXMucGl4ZWxSYXRpbyooYVszXSppK2FbN10qcythWzExXSpsK2FbMTVdKmMpL2UuZHJhd2luZ0J1ZmZlckhlaWdodDt0aGlzLnZhby5iaW5kKCk7Zm9yKHZhciBoPTA7aDwzOysraCllLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aFtoXSp0aGlzLnBpeGVsUmF0aW8pLHIuY2FwU2l6ZT10aGlzLmNhcFNpemVbaF0qdSx0aGlzLmxpbmVDb3VudFtoXSYmZS5kcmF3QXJyYXlzKGUuTElORVMsdGhpcy5saW5lT2Zmc2V0W2hdLHRoaXMubGluZUNvdW50W2hdKTt0aGlzLnZhby51bmJpbmQoKX07dmFyIHU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IEFycmF5KDMpLGU9MDtlPDM7KytlKXtmb3IodmFyIHI9W10sbj0xO248PTI7KytuKWZvcih2YXIgYT0tMTthPD0xO2ErPTIpe3ZhciBpPVswLDAsMF07aVsobitlKSUzXT1hLHIucHVzaChpKX10W2VdPXJ9cmV0dXJuIHR9KCk7ZnVuY3Rpb24gaCh0LGUscixuKXtmb3IodmFyIGE9dVtuXSxpPTA7aTxhLmxlbmd0aDsrK2kpe3ZhciBvPWFbaV07dC5wdXNoKGVbMF0sZVsxXSxlWzJdLHJbMF0sclsxXSxyWzJdLHJbM10sb1swXSxvWzFdLG9bMl0pfXJldHVybiBhLmxlbmd0aH1sLnVwZGF0ZT1mdW5jdGlvbih0KXsibGluZVdpZHRoImluKHQ9dHx8e30pJiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgsQXJyYXkuaXNBcnJheSh0aGlzLmxpbmVXaWR0aCl8fCh0aGlzLmxpbmVXaWR0aD1bdGhpcy5saW5lV2lkdGgsdGhpcy5saW5lV2lkdGgsdGhpcy5saW5lV2lkdGhdKSksImNhcFNpemUiaW4gdCYmKHRoaXMuY2FwU2l6ZT10LmNhcFNpemUsQXJyYXkuaXNBcnJheSh0aGlzLmNhcFNpemUpfHwodGhpcy5jYXBTaXplPVt0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplLHRoaXMuY2FwU2l6ZV0pKSx0aGlzLmhhc0FscGhhPSExLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9K3Qub3BhY2l0eSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKTt2YXIgZT10LmNvbG9yfHxbWzAsMCwwXSxbMCwwLDBdLFswLDAsMF1dLHI9dC5wb3NpdGlvbixuPXQuZXJyb3I7aWYoQXJyYXkuaXNBcnJheShlWzBdKXx8KGU9W2UsZSxlXSksciYmbil7dmFyIGE9W10saT1yLmxlbmd0aCxvPTA7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5saW5lQ291bnQ9WzAsMCwwXTtmb3IodmFyIHM9MDtzPDM7KytzKXt0aGlzLmxpbmVPZmZzZXRbc109bzt0OmZvcih2YXIgbD0wO2w8aTsrK2wpe2Zvcih2YXIgdT1yW2xdLGY9MDtmPDM7KytmKWlmKGlzTmFOKHVbZl0pfHwhaXNGaW5pdGUodVtmXSkpY29udGludWUgdDt2YXIgcD1uW2xdLGQ9ZVtzXTtpZihBcnJheS5pc0FycmF5KGRbMF0pJiYoZD1lW2xdKSwzPT09ZC5sZW5ndGg/ZD1bZFswXSxkWzFdLGRbMl0sMV06ND09PWQubGVuZ3RoJiYoZD1bZFswXSxkWzFdLGRbMl0sZFszXV0sIXRoaXMuaGFzQWxwaGEmJmRbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApKSwhaXNOYU4ocFswXVtzXSkmJiFpc05hTihwWzFdW3NdKSl7dmFyIGc7aWYocFswXVtzXTwwKShnPXUuc2xpY2UoKSlbc10rPXBbMF1bc10sYS5wdXNoKHVbMF0sdVsxXSx1WzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDAsZ1swXSxnWzFdLGdbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCksYyh0aGlzLmJvdW5kcyxnKSxvKz0yK2goYSxnLGQscyk7aWYocFsxXVtzXT4wKShnPXUuc2xpY2UoKSlbc10rPXBbMV1bc10sYS5wdXNoKHVbMF0sdVsxXSx1WzJdLGRbMF0sZFsxXSxkWzJdLGRbM10sMCwwLDAsZ1swXSxnWzFdLGdbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCksYyh0aGlzLmJvdW5kcyxnKSxvKz0yK2goYSxnLGQscyl9fXRoaXMubGluZUNvdW50W3NdPW8tdGhpcy5saW5lT2Zmc2V0W3NdfXRoaXMuYnVmZmVyLnVwZGF0ZShhKX19LGwuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMvaW5kZXgiOjI1MSwiZ2wtYnVmZmVyIjoyNDQsImdsLXZhbyI6MzI5fV0sMjUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxhPXQoImdsLXNoYWRlciIpLGk9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBvZmZzZXQ7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgY2FwU2l6ZTtcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzMgZnJhZ1Bvc2l0aW9uO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzQgd29ybGRQb3NpdGlvbiAgPSBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIHdvcmxkUG9zaXRpb24gICAgICAgPSAod29ybGRQb3NpdGlvbiAvIHdvcmxkUG9zaXRpb24udykgKyB2ZWM0KGNhcFNpemUgKiBvZmZzZXQsIDAuMCk7XG4gIGdsX1Bvc2l0aW9uICAgICAgICAgPSBwcm9qZWN0aW9uICogdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIGZyYWdDb2xvciAgICAgICAgICAgPSBjb2xvcjtcbiAgZnJhZ1Bvc2l0aW9uICAgICAgICA9IHBvc2l0aW9uO1xufSJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgZnJhZ1Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZiAoXG4gICAgb3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmcmFnUG9zaXRpb24pIHx8XG4gICAgZnJhZ0NvbG9yLmEgKiBvcGFjaXR5ID09IDAuXG4gICkgZGlzY2FyZDtcblxuICBnbF9GcmFnQ29sb3IgPSBvcGFjaXR5ICogZnJhZ0NvbG9yO1xufSJdKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCxpLG8sbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6Im9mZnNldCIsdHlwZToidmVjMyJ9XSl9fSx7ImdsLXNoYWRlciI6MzA0LGdsc2xpZnk6NDExfV0sMjUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXRleHR1cmUyZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXthfHwoYT10LkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVELGk9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQsbz10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyxzPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQpO3ZhciBjPXQuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKTshbCYmYyYmZnVuY3Rpb24odCxlKXt2YXIgcj10LmdldFBhcmFtZXRlcihlLk1BWF9DT0xPUl9BVFRBQ0hNRU5UU19XRUJHTCk7bD1uZXcgQXJyYXkocisxKTtmb3IodmFyIG49MDtuPD1yOysrbil7Zm9yKHZhciBhPW5ldyBBcnJheShyKSxpPTA7aTxuOysraSlhW2ldPXQuQ09MT1JfQVRUQUNITUVOVDAraTtmb3IodmFyIGk9bjtpPHI7KytpKWFbaV09dC5OT05FO2xbbl09YX19KHQsYyk7QXJyYXkuaXNBcnJheShlKSYmKG49cixyPTB8ZVsxXSxlPTB8ZVswXSk7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBNaXNzaW5nIHNoYXBlIHBhcmFtZXRlciIpO3ZhciB1PXQuZ2V0UGFyYW1ldGVyKHQuTUFYX1JFTkRFUkJVRkZFUl9TSVpFKTtpZihlPDB8fGU+dXx8cjwwfHxyPnUpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IFBhcmFtZXRlcnMgYXJlIHRvbyBsYXJnZSBmb3IgRkJPIik7dmFyIGg9MTtpZigiY29sb3IiaW4obj1ufHx7fSkpe2lmKChoPU1hdGgubWF4KDB8bi5jb2xvciwwKSk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogTXVzdCBzcGVjaWZ5IGEgbm9ubmVnYXRpdmUgbnVtYmVyIG9mIGNvbG9ycyIpO2lmKGg+MSl7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE11bHRpcGxlIGRyYXcgYnVmZmVyIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkIik7aWYoaD50LmdldFBhcmFtZXRlcihjLk1BWF9DT0xPUl9BVFRBQ0hNRU5UU19XRUJHTCkpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCAiK2grIiBkcmF3IGJ1ZmZlcnMiKX19dmFyIGY9dC5VTlNJR05FRF9CWVRFLHA9dC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0Iik7aWYobi5mbG9hdCYmaD4wKXtpZighcCl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0IGZsb2F0aW5nIHBvaW50IHRleHR1cmVzIik7Zj10LkZMT0FUfWVsc2Ugbi5wcmVmZXJGbG9hdCYmaD4wJiZwJiYoZj10LkZMT0FUKTt2YXIgZz0hMDsiZGVwdGgiaW4gbiYmKGc9ISFuLmRlcHRoKTt2YXIgdj0hMTsic3RlbmNpbCJpbiBuJiYodj0hIW4uc3RlbmNpbCk7cmV0dXJuIG5ldyBkKHQsZSxyLGYsaCxnLHYsYyl9O3ZhciBhLGksbyxzLGw9bnVsbDtmdW5jdGlvbiBjKHQpe3JldHVyblt0LmdldFBhcmFtZXRlcih0LkZSQU1FQlVGRkVSX0JJTkRJTkcpLHQuZ2V0UGFyYW1ldGVyKHQuUkVOREVSQlVGRkVSX0JJTkRJTkcpLHQuZ2V0UGFyYW1ldGVyKHQuVEVYVFVSRV9CSU5ESU5HXzJEKV19ZnVuY3Rpb24gdSh0LGUpe3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsZVswXSksdC5iaW5kUmVuZGVyYnVmZmVyKHQuUkVOREVSQlVGRkVSLGVbMV0pLHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELGVbMl0pfWZ1bmN0aW9uIGgodCl7c3dpdGNoKHQpe2Nhc2UgYTp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgdW5zdXBwb3J0ZWQiKTtjYXNlIGk6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgYXR0YWNobWVudCIpO2Nhc2Ugbzp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBkaW1lbnNpb25zIik7Y2FzZSBzOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIG1pc3NpbmcgYXR0YWNobWVudCIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGZhaWxlZCBmb3IgdW5zcGVjaWZpZWQgcmVhc29uIil9fWZ1bmN0aW9uIGYodCxlLHIsYSxpLG8pe2lmKCFhKXJldHVybiBudWxsO3ZhciBzPW4odCxlLHIsaSxhKTtyZXR1cm4gcy5tYWdGaWx0ZXI9dC5ORUFSRVNULHMubWluRmlsdGVyPXQuTkVBUkVTVCxzLm1pcFNhbXBsZXM9MSxzLmJpbmQoKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKHQuRlJBTUVCVUZGRVIsbyx0LlRFWFRVUkVfMkQscy5oYW5kbGUsMCksc31mdW5jdGlvbiBwKHQsZSxyLG4sYSl7dmFyIGk9dC5jcmVhdGVSZW5kZXJidWZmZXIoKTtyZXR1cm4gdC5iaW5kUmVuZGVyYnVmZmVyKHQuUkVOREVSQlVGRkVSLGkpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSh0LlJFTkRFUkJVRkZFUixuLGUsciksdC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0LkZSQU1FQlVGRkVSLGEsdC5SRU5ERVJCVUZGRVIsaSksaX1mdW5jdGlvbiBkKHQsZSxyLG4sYSxpLG8scyl7dGhpcy5nbD10LHRoaXMuX3NoYXBlPVswfGUsMHxyXSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZXh0PXMsdGhpcy5jb2xvcj1uZXcgQXJyYXkoYSk7Zm9yKHZhciBkPTA7ZDxhOysrZCl0aGlzLmNvbG9yW2RdPW51bGw7dGhpcy5fY29sb3JfcmI9bnVsbCx0aGlzLmRlcHRoPW51bGwsdGhpcy5fZGVwdGhfcmI9bnVsbCx0aGlzLl9jb2xvclR5cGU9bix0aGlzLl91c2VEZXB0aD1pLHRoaXMuX3VzZVN0ZW5jaWw9bzt2YXIgZz10aGlzLHY9WzB8ZSwwfHJdO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHYsezA6e2dldDpmdW5jdGlvbigpe3JldHVybiBnLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBnLndpZHRoPXR9fSwxOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gZy5oZWlnaHQ9dH19fSksdGhpcy5fc2hhcGVWZWN0b3I9dixmdW5jdGlvbih0KXt2YXIgZT1jKHQuZ2wpLHI9dC5nbCxuPXQuaGFuZGxlPXIuY3JlYXRlRnJhbWVidWZmZXIoKSxhPXQuX3NoYXBlWzBdLGk9dC5fc2hhcGVbMV0sbz10LmNvbG9yLmxlbmd0aCxzPXQuX2V4dCxkPXQuX3VzZVN0ZW5jaWwsZz10Ll91c2VEZXB0aCx2PXQuX2NvbG9yVHlwZTtyLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLG4pO2Zvcih2YXIgbT0wO208bzsrK20pdC5jb2xvclttXT1mKHIsYSxpLHYsci5SR0JBLHIuQ09MT1JfQVRUQUNITUVOVDArbSk7MD09PW8/KHQuX2NvbG9yX3JiPXAocixhLGksci5SR0JBNCxyLkNPTE9SX0FUVEFDSE1FTlQwKSxzJiZzLmRyYXdCdWZmZXJzV0VCR0wobFswXSkpOm8+MSYmcy5kcmF3QnVmZmVyc1dFQkdMKGxbb10pO3ZhciB5PXIuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIik7eT9kP3QuZGVwdGg9ZihyLGEsaSx5LlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMLHIuREVQVEhfU1RFTkNJTCxyLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk6ZyYmKHQuZGVwdGg9ZihyLGEsaSxyLlVOU0lHTkVEX1NIT1JULHIuREVQVEhfQ09NUE9ORU5ULHIuREVQVEhfQVRUQUNITUVOVCkpOmcmJmQ/dC5fZGVwdGhfcmI9cChyLGEsaSxyLkRFUFRIX1NURU5DSUwsci5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpOmc/dC5fZGVwdGhfcmI9cChyLGEsaSxyLkRFUFRIX0NPTVBPTkVOVDE2LHIuREVQVEhfQVRUQUNITUVOVCk6ZCYmKHQuX2RlcHRoX3JiPXAocixhLGksci5TVEVOQ0lMX0lOREVYLHIuU1RFTkNJTF9BVFRBQ0hNRU5UKSk7dmFyIHg9ci5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHIuRlJBTUVCVUZGRVIpO2lmKHghPT1yLkZSQU1FQlVGRkVSX0NPTVBMRVRFKXtmb3IodC5fZGVzdHJveWVkPSEwLHIuYmluZEZyYW1lYnVmZmVyKHIuRlJBTUVCVUZGRVIsbnVsbCksci5kZWxldGVGcmFtZWJ1ZmZlcih0LmhhbmRsZSksdC5oYW5kbGU9bnVsbCx0LmRlcHRoJiYodC5kZXB0aC5kaXNwb3NlKCksdC5kZXB0aD1udWxsKSx0Ll9kZXB0aF9yYiYmKHIuZGVsZXRlUmVuZGVyYnVmZmVyKHQuX2RlcHRoX3JiKSx0Ll9kZXB0aF9yYj1udWxsKSxtPTA7bTx0LmNvbG9yLmxlbmd0aDsrK20pdC5jb2xvclttXS5kaXNwb3NlKCksdC5jb2xvclttXT1udWxsO3QuX2NvbG9yX3JiJiYoci5kZWxldGVSZW5kZXJidWZmZXIodC5fY29sb3JfcmIpLHQuX2NvbG9yX3JiPW51bGwpLHUocixlKSxoKHgpfXUocixlKX0odGhpcyl9dmFyIGc9ZC5wcm90b3R5cGU7ZnVuY3Rpb24gdih0LGUscil7aWYodC5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDYW4ndCByZXNpemUgZGVzdHJveWVkIEZCTyIpO2lmKHQuX3NoYXBlWzBdIT09ZXx8dC5fc2hhcGVbMV0hPT1yKXt2YXIgbj10LmdsLGE9bi5nZXRQYXJhbWV0ZXIobi5NQVhfUkVOREVSQlVGRkVSX1NJWkUpO2lmKGU8MHx8ZT5hfHxyPDB8fHI+YSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ2FuJ3QgcmVzaXplIEZCTywgaW52YWxpZCBkaW1lbnNpb25zIik7dC5fc2hhcGVbMF09ZSx0Ll9zaGFwZVsxXT1yO2Zvcih2YXIgaT1jKG4pLG89MDtvPHQuY29sb3IubGVuZ3RoOysrbyl0LmNvbG9yW29dLnNoYXBlPXQuX3NoYXBlO3QuX2NvbG9yX3JiJiYobi5iaW5kUmVuZGVyYnVmZmVyKG4uUkVOREVSQlVGRkVSLHQuX2NvbG9yX3JiKSxuLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5SR0JBNCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSkpLHQuZGVwdGgmJih0LmRlcHRoLnNoYXBlPXQuX3NoYXBlKSx0Ll9kZXB0aF9yYiYmKG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUix0Ll9kZXB0aF9yYiksdC5fdXNlRGVwdGgmJnQuX3VzZVN0ZW5jaWw/bi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uREVQVEhfU1RFTkNJTCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSk6dC5fdXNlRGVwdGg/bi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uREVQVEhfQ09NUE9ORU5UMTYsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pOnQuX3VzZVN0ZW5jaWwmJm4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLlNURU5DSUxfSU5ERVgsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pKSxuLmJpbmRGcmFtZWJ1ZmZlcihuLkZSQU1FQlVGRkVSLHQuaGFuZGxlKTt2YXIgcz1uLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMobi5GUkFNRUJVRkZFUik7cyE9PW4uRlJBTUVCVUZGRVJfQ09NUExFVEUmJih0LmRpc3Bvc2UoKSx1KG4saSksaChzKSksdShuLGkpfX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhnLHtzaGFwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZD9bMCwwXTp0aGlzLl9zaGFwZVZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCl8fCh0PVswfHQsMHx0XSksMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBTaGFwZSB2ZWN0b3IgbXVzdCBiZSBsZW5ndGggMiIpO3ZhciBlPTB8dFswXSxyPTB8dFsxXTtyZXR1cm4gdih0aGlzLGUsciksW2Uscl19LGVudW1lcmFibGU6ITF9LHdpZHRoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkPzA6dGhpcy5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdih0aGlzLHR8PTAsdGhpcy5fc2hhcGVbMV0pLHR9LGVudW1lcmFibGU6ITF9LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZD8wOnRoaXMuX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR8PTAsdih0aGlzLHRoaXMuX3NoYXBlWzBdLHQpLHR9LGVudW1lcmFibGU6ITF9fSksZy5iaW5kPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2Rlc3Ryb3llZCl7dmFyIHQ9dGhpcy5nbDt0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLHRoaXMuaGFuZGxlKSx0LnZpZXdwb3J0KDAsMCx0aGlzLl9zaGFwZVswXSx0aGlzLl9zaGFwZVsxXSl9fSxnLmRpc3Bvc2U9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVzdHJveWVkKXt0aGlzLl9kZXN0cm95ZWQ9ITA7dmFyIHQ9dGhpcy5nbDt0LmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMuaGFuZGxlKSx0aGlzLmhhbmRsZT1udWxsLHRoaXMuZGVwdGgmJih0aGlzLmRlcHRoLmRpc3Bvc2UoKSx0aGlzLmRlcHRoPW51bGwpLHRoaXMuX2RlcHRoX3JiJiYodC5kZWxldGVSZW5kZXJidWZmZXIodGhpcy5fZGVwdGhfcmIpLHRoaXMuX2RlcHRoX3JiPW51bGwpO2Zvcih2YXIgZT0wO2U8dGhpcy5jb2xvci5sZW5ndGg7KytlKXRoaXMuY29sb3JbZV0uZGlzcG9zZSgpLHRoaXMuY29sb3JbZV09bnVsbDt0aGlzLl9jb2xvcl9yYiYmKHQuZGVsZXRlUmVuZGVyYnVmZmVyKHRoaXMuX2NvbG9yX3JiKSx0aGlzLl9jb2xvcl9yYj1udWxsKX19fSx7ImdsLXRleHR1cmUyZCI6MzI0fV0sMjUzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgic3ByaW50Zi1qcyIpLnNwcmludGYsYT10KCJnbC1jb25zdGFudHMvbG9va3VwIiksaT10KCJnbHNsLXNoYWRlci1uYW1lIiksbz10KCJhZGQtbGluZS1udW1iZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIHM9aShlKXx8Im9mIHVua25vd24gbmFtZSAoc2VlIG5wbSBnbHNsLXNoYWRlci1uYW1lKSIsbD0idW5rbm93biB0eXBlIjt2b2lkIDAhPT1yJiYobD1yPT09YS5GUkFHTUVOVF9TSEFERVI/ImZyYWdtZW50IjoidmVydGV4Iik7Zm9yKHZhciBjPW4oIkVycm9yIGNvbXBpbGluZyAlcyBzaGFkZXIgJXM6XG4iLGwscyksdT1uKCIlcyVzIixjLHQpLGg9dC5zcGxpdCgiXG4iKSxmPXt9LHA9MDtwPGgubGVuZ3RoO3ArKyl7dmFyIGQ9aFtwXTtpZigiIiE9PWQmJiJcMCIhPT1kKXt2YXIgZz1wYXJzZUludChkLnNwbGl0KCI6IilbMl0pO2lmKGlzTmFOKGcpKXRocm93IG5ldyBFcnJvcihuKCJDb3VsZCBub3QgcGFyc2UgZXJyb3I6ICVzIixkKSk7ZltnXT1kfX1mb3IodmFyIHY9byhlKS5zcGxpdCgiXG4iKSxwPTA7cDx2Lmxlbmd0aDtwKyspaWYoZltwKzNdfHxmW3ArMl18fGZbcCsxXSl7dmFyIG09dltwXTtpZihjKz1tKyJcbiIsZltwKzFdKXt2YXIgeT1mW3ArMV07eT15LnN1YnN0cih5LnNwbGl0KCI6IiwzKS5qb2luKCI6IikubGVuZ3RoKzEpLnRyaW0oKSxjKz1uKCJeXl4gJXNcblxuIix5KX19cmV0dXJue2xvbmc6Yy50cmltKCksc2hvcnQ6dS50cmltKCl9fX0seyJhZGQtbGluZS1udW1iZXJzIjo2NCwiZ2wtY29uc3RhbnRzL2xvb2t1cCI6MjQ5LCJnbHNsLXNoYWRlci1uYW1lIjo0MDMsInNwcmludGYtanMiOjUyN31dLDI1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdsLG49byhyLGwudmVydGV4LGwuZnJhZ21lbnQpLGE9byhyLGwucGlja1ZlcnRleCxsLnBpY2tGcmFnbWVudCksaT1zKHIpLHU9cyhyKSxoPXMociksZj1zKHIpLHA9bmV3IGModCxuLGEsaSx1LGgsZik7cmV0dXJuIHAudXBkYXRlKGUpLHQuYWRkT2JqZWN0KHApLHB9O3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksYT10KCJpb3RhLWFycmF5IiksaT10KCJ0eXBlZGFycmF5LXBvb2wiKSxvPXQoImdsLXNoYWRlciIpLHM9dCgiZ2wtYnVmZmVyIiksbD10KCIuL2xpYi9zaGFkZXJzIik7ZnVuY3Rpb24gYyh0LGUscixuLGEsaSxvKXt0aGlzLnBsb3Q9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMucG9zaXRpb25CdWZmZXI9bix0aGlzLndlaWdodEJ1ZmZlcj1hLHRoaXMuY29sb3JCdWZmZXI9aSx0aGlzLmlkQnVmZmVyPW8sdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMuc2hhcGU9WzAsMF0sdGhpcy5ib3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnBpY2tPZmZzZXQ9MH12YXIgdSxoPWMucHJvdG90eXBlLGY9WzAsMCwxLDAsMCwxLDEsMCwxLDEsMCwxXTtoLmRyYXc9KHU9WzEsMCwwLDAsMSwwLDAsMCwxXSxmdW5jdGlvbigpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2hhZGVyLHI9dGhpcy5ib3VuZHMsbj10aGlzLm51bVZlcnRpY2VzO2lmKCEobjw9MCkpe3ZhciBhPXQuZ2wsaT10LmRhdGFCb3gsbz1yWzJdLXJbMF0scz1yWzNdLXJbMV0sbD1pWzJdLWlbMF0sYz1pWzNdLWlbMV07dVswXT0yKm8vbCx1WzRdPTIqcy9jLHVbNl09MiooclswXS1pWzBdKS9sLTEsdVs3XT0yKihyWzFdLWlbMV0pL2MtMSxlLmJpbmQoKTt2YXIgaD1lLnVuaWZvcm1zO2gudmlld1RyYW5zZm9ybT11LGguc2hhcGU9dGhpcy5zaGFwZTt2YXIgZj1lLmF0dHJpYnV0ZXM7dGhpcy5wb3NpdGlvbkJ1ZmZlci5iaW5kKCksZi5wb3NpdGlvbi5wb2ludGVyKCksdGhpcy53ZWlnaHRCdWZmZXIuYmluZCgpLGYud2VpZ2h0LnBvaW50ZXIoYS5VTlNJR05FRF9CWVRFLCExKSx0aGlzLmNvbG9yQnVmZmVyLmJpbmQoKSxmLmNvbG9yLnBvaW50ZXIoYS5VTlNJR05FRF9CWVRFLCEwKSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsMCxuKX19KSxoLmRyYXdQaWNrPWZ1bmN0aW9uKCl7dmFyIHQ9WzEsMCwwLDAsMSwwLDAsMCwxXSxlPVswLDAsMCwwXTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dGhpcy5wbG90LGE9dGhpcy5waWNrU2hhZGVyLGk9dGhpcy5ib3VuZHMsbz10aGlzLm51bVZlcnRpY2VzO2lmKCEobzw9MCkpe3ZhciBzPW4uZ2wsbD1uLmRhdGFCb3gsYz1pWzJdLWlbMF0sdT1pWzNdLWlbMV0saD1sWzJdLWxbMF0sZj1sWzNdLWxbMV07dFswXT0yKmMvaCx0WzRdPTIqdS9mLHRbNl09MiooaVswXS1sWzBdKS9oLTEsdFs3XT0yKihpWzFdLWxbMV0pL2YtMTtmb3IodmFyIHA9MDtwPDQ7KytwKWVbcF09cj4+OCpwJjI1NTt0aGlzLnBpY2tPZmZzZXQ9cixhLmJpbmQoKTt2YXIgZD1hLnVuaWZvcm1zO2Qudmlld1RyYW5zZm9ybT10LGQucGlja09mZnNldD1lLGQuc2hhcGU9dGhpcy5zaGFwZTt2YXIgZz1hLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMucG9zaXRpb25CdWZmZXIuYmluZCgpLGcucG9zaXRpb24ucG9pbnRlcigpLHRoaXMud2VpZ2h0QnVmZmVyLmJpbmQoKSxnLndlaWdodC5wb2ludGVyKHMuVU5TSUdORURfQllURSwhMSksdGhpcy5pZEJ1ZmZlci5iaW5kKCksZy5waWNrSWQucG9pbnRlcihzLlVOU0lHTkVEX0JZVEUsITEpLHMuZHJhd0FycmF5cyhzLlRSSUFOR0xFUywwLG8pLHIrdGhpcy5zaGFwZVswXSp0aGlzLnNoYXBlWzFdfX19KCksaC5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsYT10aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV07aWYocjxufHxyPj1uK2EpcmV0dXJuIG51bGw7dmFyIGk9ci1uLG89dGhpcy54RGF0YSxzPXRoaXMueURhdGE7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6aSxkYXRhQ29vcmQ6W29baSV0aGlzLnNoYXBlWzBdXSxzW2kvdGhpcy5zaGFwZVswXXwwXV19fSxoLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuc2hhcGV8fFswLDBdLHI9dC54fHxhKGVbMF0pLG89dC55fHxhKGVbMV0pLHM9dC56fHxuZXcgRmxvYXQzMkFycmF5KGVbMF0qZVsxXSk7dGhpcy54RGF0YT1yLHRoaXMueURhdGE9bzt2YXIgbD10LmNvbG9yTGV2ZWxzfHxbMF0sYz10LmNvbG9yVmFsdWVzfHxbMCwwLDAsMV0sdT1sLmxlbmd0aCxoPXRoaXMuYm91bmRzLHA9aFswXT1yWzBdLGQ9aFsxXT1vWzBdLGc9MS8oKGhbMl09cltyLmxlbmd0aC0xXSktcCksdj0xLygoaFszXT1vW28ubGVuZ3RoLTFdKS1kKSxtPWVbMF0seT1lWzFdO3RoaXMuc2hhcGU9W20seV07dmFyIHg9KG0tMSkqKHktMSkqKGYubGVuZ3RoPj4+MSk7dGhpcy5udW1WZXJ0aWNlcz14O2Zvcih2YXIgYj1pLm1hbGxvY1VpbnQ4KDQqeCksXz1pLm1hbGxvY0Zsb2F0MzIoMip4KSx3PWkubWFsbG9jVWludDgoMip4KSxrPWkubWFsbG9jVWludDMyKHgpLFQ9MCxNPTA7TTx5LTE7KytNKWZvcih2YXIgQT12KihvW01dLWQpLFM9dioob1tNKzFdLWQpLEU9MDtFPG0tMTsrK0UpZm9yKHZhciBMPWcqKHJbRV0tcCksQz1nKihyW0UrMV0tcCksUD0wO1A8Zi5sZW5ndGg7UCs9Mil7dmFyIE8seixJLEQsUj1mW1BdLEY9ZltQKzFdLEI9c1soTStGKSptKyhFK1IpXSxOPW4ubGUobCxCKTtpZihOPDApTz1jWzBdLHo9Y1sxXSxJPWNbMl0sRD1jWzNdO2Vsc2UgaWYoTj09PXUtMSlPPWNbNCp1LTRdLHo9Y1s0KnUtM10sST1jWzQqdS0yXSxEPWNbNCp1LTFdO2Vsc2V7dmFyIGo9KEItbFtOXSkvKGxbTisxXS1sW05dKSxWPTEtaixVPTQqTixxPTQqKE4rMSk7Tz1WKmNbVV0raipjW3FdLHo9VipjW1UrMV0raipjW3ErMV0sST1WKmNbVSsyXStqKmNbcSsyXSxEPVYqY1tVKzNdK2oqY1txKzNdfWJbNCpUXT0yNTUqTyxiWzQqVCsxXT0yNTUqeixiWzQqVCsyXT0yNTUqSSxiWzQqVCszXT0yNTUqRCxfWzIqVF09LjUqTCsuNSpDLF9bMipUKzFdPS41KkErLjUqUyx3WzIqVF09Uix3WzIqVCsxXT1GLGtbVF09TSptK0UsVCs9MX10aGlzLnBvc2l0aW9uQnVmZmVyLnVwZGF0ZShfKSx0aGlzLndlaWdodEJ1ZmZlci51cGRhdGUodyksdGhpcy5jb2xvckJ1ZmZlci51cGRhdGUoYiksdGhpcy5pZEJ1ZmZlci51cGRhdGUoayksaS5mcmVlKF8pLGkuZnJlZShiKSxpLmZyZWUodyksaS5mcmVlKGspfSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvc2l0aW9uQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLndlaWdodEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5jb2xvckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5pZEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX19LHsiLi9saWIvc2hhZGVycyI6MjU1LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MjU2LCJnbC1idWZmZXIiOjI0NCwiZ2wtc2hhZGVyIjozMDQsImlvdGEtYXJyYXkiOjQxOCwidHlwZWRhcnJheS1wb29sIjo1NDR9XSwyNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpO2UuZXhwb3J0cz17ZnJhZ21lbnQ6bihbInByZWNpc2lvbiBsb3dwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoZnJhZ0NvbG9yLnJnYiAqIGZyYWdDb2xvci5hLCBmcmFnQ29sb3IuYSk7XG59XG4iXSksdmVydGV4Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiB3ZWlnaHQ7XG5cbnVuaWZvcm0gdmVjMiBzaGFwZTtcbnVuaWZvcm0gbWF0MyB2aWV3VHJhbnNmb3JtO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgdlBvc2l0aW9uID0gdmlld1RyYW5zZm9ybSAqIHZlYzMoIHBvc2l0aW9uICsgKHdlaWdodC0uNSkvKHNoYXBlLTEuKSAsIDEuMCk7XG4gIGZyYWdDb2xvciA9IGNvbG9yO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQodlBvc2l0aW9uLnh5LCAwLCB2UG9zaXRpb24ueik7XG59XG4iXSkscGlja0ZyYWdtZW50Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG52YXJ5aW5nIHZlYzIgdldlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBkID0gc3RlcCguNSwgdldlaWdodCk7XG4gIHZlYzQgaWQgPSBmcmFnSWQgKyBwaWNrT2Zmc2V0O1xuICBpZC54ICs9IGQueCArIGQueSpzaGFwZS54O1xuXG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcbiAgaWQueCAtPSBmbG9vcihpZC54IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xuICBpZC55IC09IGZsb29yKGlkLnkgLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XG4gIGlkLnogLT0gZmxvb3IoaWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGlkLzI1NS47XG59XG4iXSkscGlja1ZlcnRleDpuKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG52YXJ5aW5nIHZlYzIgdldlaWdodDtcblxudm9pZCBtYWluKCkge1xuICB2V2VpZ2h0ID0gd2VpZ2h0O1xuXG4gIGZyYWdJZCA9IHBpY2tJZDtcblxuICB2ZWMzIHZQb3NpdGlvbiA9IHZpZXdUcmFuc2Zvcm0gKiB2ZWMzKCBwb3NpdGlvbiArICh3ZWlnaHQtLjUpLyhzaGFwZS0xLikgLCAxLjApO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQodlBvc2l0aW9uLnh5LCAwLCB2UG9zaXRpb24ueik7XG59XG4iXSl9fSx7Z2xzbGlmeTo0MTF9XSwyNTY6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTEzXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTEzfV0sMjU3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGE9dCgiZ2wtc2hhZGVyIiksaT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIG5leHRQb3NpdGlvbjtcbmF0dHJpYnV0ZSBmbG9hdCBhcmNMZW5ndGgsIGxpbmVXaWR0aDtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuXG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzMgd29ybGRQb3NpdGlvbjtcbnZhcnlpbmcgZmxvYXQgcGl4ZWxBcmNMZW5ndGg7XG5cbnZlYzQgcHJvamVjdCh2ZWMzIHApIHtcbiAgcmV0dXJuIHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBzdGFydFBvaW50ID0gcHJvamVjdChwb3NpdGlvbik7XG4gIHZlYzQgZW5kUG9pbnQgICA9IHByb2plY3QobmV4dFBvc2l0aW9uKTtcblxuICB2ZWMyIEEgPSBzdGFydFBvaW50Lnh5IC8gc3RhcnRQb2ludC53O1xuICB2ZWMyIEIgPSAgIGVuZFBvaW50Lnh5IC8gICBlbmRQb2ludC53O1xuXG4gIGZsb2F0IGNsaXBBbmdsZSA9IGF0YW4oXG4gICAgKEIueSAtIEEueSkgKiBzY3JlZW5TaGFwZS55LFxuICAgIChCLnggLSBBLngpICogc2NyZWVuU2hhcGUueFxuICApO1xuXG4gIHZlYzIgb2Zmc2V0ID0gMC41ICogcGl4ZWxSYXRpbyAqIGxpbmVXaWR0aCAqIHZlYzIoXG4gICAgc2luKGNsaXBBbmdsZSksXG4gICAgLWNvcyhjbGlwQW5nbGUpXG4gICkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQoc3RhcnRQb2ludC54eSArIHN0YXJ0UG9pbnQudyAqIG9mZnNldCwgc3RhcnRQb2ludC56dyk7XG5cbiAgd29ybGRQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICBwaXhlbEFyY0xlbmd0aCA9IGFyY0xlbmd0aDtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgICAgIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoVGV4dHVyZTtcbnVuaWZvcm0gZmxvYXQgICAgIGRhc2hTY2FsZTtcbnVuaWZvcm0gZmxvYXQgICAgIG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjMyAgICB3b3JsZFBvc2l0aW9uO1xudmFyeWluZyBmbG9hdCAgIHBpeGVsQXJjTGVuZ3RoO1xudmFyeWluZyB2ZWM0ICAgIGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZiAoXG4gICAgb3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZFBvc2l0aW9uKSB8fFxuICAgIGZyYWdDb2xvci5hICogb3BhY2l0eSA9PSAwLlxuICApIGRpc2NhcmQ7XG5cbiAgZmxvYXQgZGFzaFdlaWdodCA9IHRleHR1cmUyRChkYXNoVGV4dHVyZSwgdmVjMihkYXNoU2NhbGUgKiBwaXhlbEFyY0xlbmd0aCwgMCkpLnI7XG4gIGlmKGRhc2hXZWlnaHQgPCAwLjUpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvciAqIG9wYWNpdHk7XG59XG4iXSkscz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuI2RlZmluZSBGTE9BVF9NQVggIDEuNzAxNDExODRlMzhcbiNkZWZpbmUgRkxPQVRfTUlOICAxLjE3NTQ5NDM1ZS0zOFxuXG5sb3dwIHZlYzQgZW5jb2RlX2Zsb2F0XzE1NDAyNTkxMzAoaGlnaHAgZmxvYXQgdikge1xuICBoaWdocCBmbG9hdCBhdiA9IGFicyh2KTtcblxuICAvL0hhbmRsZSBzcGVjaWFsIGNhc2VzXG4gIGlmKGF2IDwgRkxPQVRfTUlOKSB7XG4gICAgcmV0dXJuIHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTtcbiAgfSBlbHNlIGlmKHYgPiBGTE9BVF9NQVgpIHtcbiAgICByZXR1cm4gdmVjNCgxMjcuMCwgMTI4LjAsIDAuMCwgMC4wKSAvIDI1NS4wO1xuICB9IGVsc2UgaWYodiA8IC1GTE9BVF9NQVgpIHtcbiAgICByZXR1cm4gdmVjNCgyNTUuMCwgMTI4LjAsIDAuMCwgMC4wKSAvIDI1NS4wO1xuICB9XG5cbiAgaGlnaHAgdmVjNCBjID0gdmVjNCgwLDAsMCwwKTtcblxuICAvL0NvbXB1dGUgZXhwb25lbnQgYW5kIG1hbnRpc3NhXG4gIGhpZ2hwIGZsb2F0IGUgPSBmbG9vcihsb2cyKGF2KSk7XG4gIGhpZ2hwIGZsb2F0IG0gPSBhdiAqIHBvdygyLjAsIC1lKSAtIDEuMDtcbiAgXG4gIC8vVW5wYWNrIG1hbnRpc3NhXG4gIGNbMV0gPSBmbG9vcigxMjguMCAqIG0pO1xuICBtIC09IGNbMV0gLyAxMjguMDtcbiAgY1syXSA9IGZsb29yKDMyNzY4LjAgKiBtKTtcbiAgbSAtPSBjWzJdIC8gMzI3NjguMDtcbiAgY1szXSA9IGZsb29yKDgzODg2MDguMCAqIG0pO1xuICBcbiAgLy9VbnBhY2sgZXhwb25lbnRcbiAgaGlnaHAgZmxvYXQgZWJpYXMgPSBlICsgMTI3LjA7XG4gIGNbMF0gPSBmbG9vcihlYmlhcyAvIDIuMCk7XG4gIGViaWFzIC09IGNbMF0gKiAyLjA7XG4gIGNbMV0gKz0gZmxvb3IoZWJpYXMpICogMTI4LjA7IFxuXG4gIC8vVW5wYWNrIHNpZ24gYml0XG4gIGNbMF0gKz0gMTI4LjAgKiBzdGVwKDAuMCwgLXYpO1xuXG4gIC8vU2NhbGUgYmFjayB0byByYW5nZVxuICByZXR1cm4gYyAvIDI1NS4wO1xufVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0IHBpeGVsQXJjTGVuZ3RoO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZFBvc2l0aW9uKSkgZGlzY2FyZDtcblxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZC8yNTUuMCwgZW5jb2RlX2Zsb2F0XzE1NDAyNTkxMzAocGl4ZWxBcmNMZW5ndGgpLnh5eik7XG59Il0pLGw9W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJuZXh0UG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiYXJjTGVuZ3RoIix0eXBlOiJmbG9hdCJ9LHtuYW1lOiJsaW5lV2lkdGgiLHR5cGU6ImZsb2F0In0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In1dO3IuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQsaSxvLG51bGwsbCl9LHIuY3JlYXRlUGlja1NoYWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYSh0LGkscyxudWxsLGwpfX0seyJnbC1zaGFkZXIiOjMwNCxnbHNsaWZ5OjQxMX1dLDI1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbHx8dC5zY2VuZSYmdC5zY2VuZS5nbCxyPXUoZSk7ci5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsci5hdHRyaWJ1dGVzLm5leHRQb3NpdGlvbi5sb2NhdGlvbj0xLHIuYXR0cmlidXRlcy5hcmNMZW5ndGgubG9jYXRpb249MixyLmF0dHJpYnV0ZXMubGluZVdpZHRoLmxvY2F0aW9uPTMsci5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTQ7dmFyIG89aChlKTtvLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxvLmF0dHJpYnV0ZXMubmV4dFBvc2l0aW9uLmxvY2F0aW9uPTEsby5hdHRyaWJ1dGVzLmFyY0xlbmd0aC5sb2NhdGlvbj0yLG8uYXR0cmlidXRlcy5saW5lV2lkdGgubG9jYXRpb249MyxvLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249NDtmb3IodmFyIHM9bihlKSxjPWEoZSxbe2J1ZmZlcjpzLHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6MSxvZmZzZXQ6MjQsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZToxLG9mZnNldDoyOCxzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjQsb2Zmc2V0OjMyLHN0cmlkZTo0OH1dKSxmPWwobmV3IEFycmF5KDEwMjQpLFsyNTYsMSw0XSkscD0wO3A8MTAyNDsrK3ApZi5kYXRhW3BdPTI1NTt2YXIgZD1pKGUsZik7ZC53cmFwPWUuUkVQRUFUO3ZhciBnPW5ldyB2KGUscixvLHMsYyxkKTtyZXR1cm4gZy51cGRhdGUodCksZ307dmFyIG49dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxpPXQoImdsLXRleHR1cmUyZCIpLG89dCgiZ2xzbC1yZWFkLWZsb2F0Iikscz10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGw9dCgibmRhcnJheSIpLGM9dCgiLi9saWIvc2hhZGVycyIpLHU9Yy5jcmVhdGVTaGFkZXIsaD1jLmNyZWF0ZVBpY2tTaGFkZXIsZj1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gcCh0LGUpe2Zvcih2YXIgcj0wLG49MDtuPDM7KytuKXt2YXIgYT10W25dLWVbbl07cis9YSphfXJldHVybiBNYXRoLnNxcnQocil9ZnVuY3Rpb24gZCh0KXtmb3IodmFyIGU9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0scj0wO3I8MzsrK3IpZVswXVtyXT1NYXRoLm1heCh0WzBdW3JdLGVbMF1bcl0pLGVbMV1bcl09TWF0aC5taW4odFsxXVtyXSxlWzFdW3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBnKHQsZSxyLG4pe3RoaXMuYXJjTGVuZ3RoPXQsdGhpcy5wb3NpdGlvbj1lLHRoaXMuaW5kZXg9cix0aGlzLmRhdGFDb29yZGluYXRlPW59ZnVuY3Rpb24gdih0LGUscixuLGEsaSl7dGhpcy5nbD10LHRoaXMuc2hhZGVyPWUsdGhpcy5waWNrU2hhZGVyPXIsdGhpcy5idWZmZXI9bix0aGlzLnZhbz1hLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnBvaW50cz1bXSx0aGlzLmFyY0xlbmd0aD1bXSx0aGlzLnZlcnRleENvdW50PTAsdGhpcy5ib3VuZHM9W1swLDAsMF0sWzAsMCwwXV0sdGhpcy5waWNrSWQ9MCx0aGlzLmxpbmVXaWR0aD0xLHRoaXMudGV4dHVyZT1pLHRoaXMuZGFzaFNjYWxlPTEsdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMSx0aGlzLmRpcnR5PSEwLHRoaXMucGl4ZWxSYXRpbz0xfXZhciBtPXYucHJvdG90eXBlO20uaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0FscGhhfSxtLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaGFzQWxwaGF9LG0ucGlja1Nsb3RzPTEsbS5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSxtLmRyYXdUcmFuc3BhcmVudD1tLmRyYXc9ZnVuY3Rpb24odCl7aWYodGhpcy52ZXJ0ZXhDb3VudCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMuc2hhZGVyLG49dGhpcy52YW87ci5iaW5kKCksci51bmlmb3Jtcz17bW9kZWw6dC5tb2RlbHx8Zix2aWV3OnQudmlld3x8Zixwcm9qZWN0aW9uOnQucHJvamVjdGlvbnx8ZixjbGlwQm91bmRzOmQodGhpcy5jbGlwQm91bmRzKSxkYXNoVGV4dHVyZTp0aGlzLnRleHR1cmUuYmluZCgpLGRhc2hTY2FsZTp0aGlzLmRhc2hTY2FsZS90aGlzLmFyY0xlbmd0aFt0aGlzLmFyY0xlbmd0aC5sZW5ndGgtMV0sb3BhY2l0eTp0aGlzLm9wYWNpdHksc2NyZWVuU2hhcGU6W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0scGl4ZWxSYXRpbzp0aGlzLnBpeGVsUmF0aW99LG4uYmluZCgpLG4uZHJhdyhlLlRSSUFOR0xFX1NUUklQLHRoaXMudmVydGV4Q291bnQpLG4udW5iaW5kKCl9fSxtLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe2lmKHRoaXMudmVydGV4Q291bnQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnBpY2tTaGFkZXIsbj10aGlzLnZhbztyLmJpbmQoKSxyLnVuaWZvcm1zPXttb2RlbDp0Lm1vZGVsfHxmLHZpZXc6dC52aWV3fHxmLHByb2plY3Rpb246dC5wcm9qZWN0aW9ufHxmLHBpY2tJZDp0aGlzLnBpY2tJZCxjbGlwQm91bmRzOmQodGhpcy5jbGlwQm91bmRzKSxzY3JlZW5TaGFwZTpbZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XSxwaXhlbFJhdGlvOnRoaXMucGl4ZWxSYXRpb30sbi5iaW5kKCksbi5kcmF3KGUuVFJJQU5HTEVfU1RSSVAsdGhpcy52ZXJ0ZXhDb3VudCksbi51bmJpbmQoKX19LG0udXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5kaXJ0eT0hMDt2YXIgbj0hIXQuY29ubmVjdEdhcHM7ImRhc2hTY2FsZSJpbiB0JiYodGhpcy5kYXNoU2NhbGU9dC5kYXNoU2NhbGUpLHRoaXMuaGFzQWxwaGE9ITEsIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT0rdC5vcGFjaXR5LHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpO3ZhciBhPVtdLGk9W10sbz1bXSxjPTAsdT0wLGg9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sZj10LnBvc2l0aW9ufHx0LnBvc2l0aW9ucztpZihmKXt2YXIgZD10LmNvbG9yfHx0LmNvbG9yc3x8WzAsMCwwLDFdLGc9dC5saW5lV2lkdGh8fDEsdj0hMTt0OmZvcihlPTE7ZTxmLmxlbmd0aDsrK2Upe3ZhciBtLHkseCxiPWZbZS0xXSxfPWZbZV07Zm9yKGkucHVzaChjKSxvLnB1c2goYi5zbGljZSgpKSxyPTA7cjwzOysrcil7aWYoaXNOYU4oYltyXSl8fGlzTmFOKF9bcl0pfHwhaXNGaW5pdGUoYltyXSl8fCFpc0Zpbml0ZShfW3JdKSl7aWYoIW4mJmEubGVuZ3RoPjApe2Zvcih2YXIgdz0wO3c8MjQ7Kyt3KWEucHVzaChhW2EubGVuZ3RoLTEyXSk7dSs9Mix2PSEwfWNvbnRpbnVlIHR9aFswXVtyXT1NYXRoLm1pbihoWzBdW3JdLGJbcl0sX1tyXSksaFsxXVtyXT1NYXRoLm1heChoWzFdW3JdLGJbcl0sX1tyXSl9QXJyYXkuaXNBcnJheShkWzBdKT8obT1kLmxlbmd0aD5lLTE/ZFtlLTFdOmQubGVuZ3RoPjA/ZFtkLmxlbmd0aC0xXTpbMCwwLDAsMV0seT1kLmxlbmd0aD5lP2RbZV06ZC5sZW5ndGg+MD9kW2QubGVuZ3RoLTFdOlswLDAsMCwxXSk6bT15PWQsMz09PW0ubGVuZ3RoJiYobT1bbVswXSxtWzFdLG1bMl0sMV0pLDM9PT15Lmxlbmd0aCYmKHk9W3lbMF0seVsxXSx5WzJdLDFdKSwhdGhpcy5oYXNBbHBoYSYmbVszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkseD1BcnJheS5pc0FycmF5KGcpP2cubGVuZ3RoPmUtMT9nW2UtMV06Zy5sZW5ndGg+MD9nW2cubGVuZ3RoLTFdOlswLDAsMCwxXTpnO3ZhciBrPWM7aWYoYys9cChiLF8pLHYpe2ZvcihyPTA7cjwyOysrcilhLnB1c2goYlswXSxiWzFdLGJbMl0sX1swXSxfWzFdLF9bMl0sayx4LG1bMF0sbVsxXSxtWzJdLG1bM10pO3UrPTIsdj0hMX1hLnB1c2goYlswXSxiWzFdLGJbMl0sX1swXSxfWzFdLF9bMl0sayx4LG1bMF0sbVsxXSxtWzJdLG1bM10sYlswXSxiWzFdLGJbMl0sX1swXSxfWzFdLF9bMl0saywteCxtWzBdLG1bMV0sbVsyXSxtWzNdLF9bMF0sX1sxXSxfWzJdLGJbMF0sYlsxXSxiWzJdLGMsLXgseVswXSx5WzFdLHlbMl0seVszXSxfWzBdLF9bMV0sX1syXSxiWzBdLGJbMV0sYlsyXSxjLHgseVswXSx5WzFdLHlbMl0seVszXSksdSs9NH19aWYodGhpcy5idWZmZXIudXBkYXRlKGEpLGkucHVzaChjKSxvLnB1c2goZltmLmxlbmd0aC0xXS5zbGljZSgpKSx0aGlzLmJvdW5kcz1oLHRoaXMudmVydGV4Q291bnQ9dSx0aGlzLnBvaW50cz1vLHRoaXMuYXJjTGVuZ3RoPWksImRhc2hlcyJpbiB0KXt2YXIgVD10LmRhc2hlcy5zbGljZSgpO2ZvcihULnVuc2hpZnQoMCksZT0xO2U8VC5sZW5ndGg7KytlKVRbZV09VFtlLTFdK1RbZV07dmFyIE09bChuZXcgQXJyYXkoMTAyNCksWzI1NiwxLDRdKTtmb3IoZT0wO2U8MjU2OysrZSl7Zm9yKHI9MDtyPDQ7KytyKU0uc2V0KGUsMCxyLDApOzEmcy5sZShULFRbVC5sZW5ndGgtMV0qZS8yNTUpP00uc2V0KGUsMCwwLDApOk0uc2V0KGUsMCwwLDI1NSl9dGhpcy50ZXh0dXJlLnNldFBpeGVscyhNKX19LG0uZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpfSxtLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPW8odC52YWx1ZVswXSx0LnZhbHVlWzFdLHQudmFsdWVbMl0sMCkscj1zLmxlKHRoaXMuYXJjTGVuZ3RoLGUpO2lmKHI8MClyZXR1cm4gbnVsbDtpZihyPT09dGhpcy5hcmNMZW5ndGgubGVuZ3RoLTEpcmV0dXJuIG5ldyBnKHRoaXMuYXJjTGVuZ3RoW3RoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xXSx0aGlzLnBvaW50c1t0aGlzLnBvaW50cy5sZW5ndGgtMV0uc2xpY2UoKSxyKTtmb3IodmFyIG49dGhpcy5wb2ludHNbcl0sYT10aGlzLnBvaW50c1tNYXRoLm1pbihyKzEsdGhpcy5wb2ludHMubGVuZ3RoLTEpXSxpPShlLXRoaXMuYXJjTGVuZ3RoW3JdKS8odGhpcy5hcmNMZW5ndGhbcisxXS10aGlzLmFyY0xlbmd0aFtyXSksbD0xLWksYz1bMCwwLDBdLHU9MDt1PDM7Kyt1KWNbdV09bCpuW3VdK2kqYVt1XTt2YXIgaD1NYXRoLm1pbihpPC41P3I6cisxLHRoaXMucG9pbnRzLmxlbmd0aC0xKTtyZXR1cm4gbmV3IGcoZSxjLGgsdGhpcy5wb2ludHNbaF0pfX0seyIuL2xpYi9zaGFkZXJzIjoyNTcsImJpbmFyeS1zZWFyY2gtYm91bmRzIjoyNTksImdsLWJ1ZmZlciI6MjQ0LCJnbC10ZXh0dXJlMmQiOjMyNCwiZ2wtdmFvIjozMjksImdsc2wtcmVhZC1mbG9hdCI6NDAyLG5kYXJyYXk6NDUyfV0sMjU5OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzExM11bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjExM31dLDI2MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGE9ZVsyXSxpPWVbM10sbz1yKmktYSpuO3JldHVybiBvPyhvPTEvbyx0WzBdPWkqbyx0WzFdPS1uKm8sdFsyXT0tYSpvLHRbM109cipvLHQpOm51bGx9fSx7fV0sMjYxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0sYT1lWzJdLGk9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGg9dSpvLXMqYyxmPS11KmkrcypsLHA9YyppLW8qbCxkPXIqaCtuKmYrYSpwO3JldHVybiBkPyhkPTEvZCx0WzBdPWgqZCx0WzFdPSgtdSpuK2EqYykqZCx0WzJdPShzKm4tYSpvKSpkLHRbM109ZipkLHRbNF09KHUqci1hKmwpKmQsdFs1XT0oLXMqcithKmkpKmQsdFs2XT1wKmQsdFs3XT0oLWMqcituKmwpKmQsdFs4XT0obypyLW4qaSkqZCx0KTpudWxsfX0se31dLDI2MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZVs5XT10WzldLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTFdLGVbMTJdPXRbMTJdLGVbMTNdPXRbMTNdLGVbMTRdPXRbMTRdLGVbMTVdPXRbMTVdLGV9fSx7fV0sMjYzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgxNik7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDI2NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0sYT10WzNdLGk9dFs0XSxvPXRbNV0scz10WzZdLGw9dFs3XSxjPXRbOF0sdT10WzldLGg9dFsxMF0sZj10WzExXSxwPXRbMTJdLGQ9dFsxM10sZz10WzE0XSx2PXRbMTVdO3JldHVybihlKm8tcippKSooaCp2LWYqZyktKGUqcy1uKmkpKih1KnYtZipkKSsoZSpsLWEqaSkqKHUqZy1oKmQpKyhyKnMtbipvKSooYyp2LWYqcCktKHIqbC1hKm8pKihjKmctaCpwKSsobipsLWEqcykqKGMqZC11KnApfX0se31dLDI2NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGE9ZVsyXSxpPWVbM10sbz1yK3Iscz1uK24sbD1hK2EsYz1yKm8sdT1uKm8saD1uKnMsZj1hKm8scD1hKnMsZD1hKmwsZz1pKm8sdj1pKnMsbT1pKmw7cmV0dXJuIHRbMF09MS1oLWQsdFsxXT11K20sdFsyXT1mLXYsdFszXT0wLHRbNF09dS1tLHRbNV09MS1jLWQsdFs2XT1wK2csdFs3XT0wLHRbOF09Zit2LHRbOV09cC1nLHRbMTBdPTEtYy1oLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDI2NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxhPWVbMV0saT1lWzJdLG89ZVszXSxzPW4rbixsPWErYSxjPWkraSx1PW4qcyxoPW4qbCxmPW4qYyxwPWEqbCxkPWEqYyxnPWkqYyx2PW8qcyxtPW8qbCx5PW8qYztyZXR1cm4gdFswXT0xLShwK2cpLHRbMV09aCt5LHRbMl09Zi1tLHRbM109MCx0WzRdPWgteSx0WzVdPTEtKHUrZyksdFs2XT1kK3YsdFs3XT0wLHRbOF09ZittLHRbOV09ZC12LHRbMTBdPTEtKHUrcCksdFsxMV09MCx0WzEyXT1yWzBdLHRbMTNdPXJbMV0sdFsxNF09clsyXSx0WzE1XT0xLHR9fSx7fV0sMjY3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyNjg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxhPWVbMl0saT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0saD1lWzldLGY9ZVsxMF0scD1lWzExXSxkPWVbMTJdLGc9ZVsxM10sdj1lWzE0XSxtPWVbMTVdLHk9cipzLW4qbyx4PXIqbC1hKm8sYj1yKmMtaSpvLF89bipsLWEqcyx3PW4qYy1pKnMsaz1hKmMtaSpsLFQ9dSpnLWgqZCxNPXUqdi1mKmQsQT11Km0tcCpkLFM9aCp2LWYqZyxFPWgqbS1wKmcsTD1mKm0tcCp2LEM9eSpMLXgqRStiKlMrXypBLXcqTStrKlQ7aWYoIUMpcmV0dXJuIG51bGw7cmV0dXJuIEM9MS9DLHRbMF09KHMqTC1sKkUrYypTKSpDLHRbMV09KGEqRS1uKkwtaSpTKSpDLHRbMl09KGcqay12KncrbSpfKSpDLHRbM109KGYqdy1oKmstcCpfKSpDLHRbNF09KGwqQS1vKkwtYypNKSpDLHRbNV09KHIqTC1hKkEraSpNKSpDLHRbNl09KHYqYi1kKmstbSp4KSpDLHRbN109KHUqay1mKmIrcCp4KSpDLHRbOF09KG8qRS1zKkErYypUKSpDLHRbOV09KG4qQS1yKkUtaSpUKSpDLHRbMTBdPShkKnctZypiK20qeSkqQyx0WzExXT0oaCpiLXUqdy1wKnkpKkMsdFsxMl09KHMqTS1vKlMtbCpUKSpDLHRbMTNdPShyKlMtbipNK2EqVCkqQyx0WzE0XT0oZyp4LWQqXy12KnkpKkMsdFsxNV09KHUqXy1oKngrZip5KSpDLHR9fSx7fV0sMjY5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9pZGVudGl0eSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgaSxvLHMsbCxjLHUsaCxmLHAsZCxnPWVbMF0sdj1lWzFdLG09ZVsyXSx5PWFbMF0seD1hWzFdLGI9YVsyXSxfPXJbMF0sdz1yWzFdLGs9clsyXTtpZihNYXRoLmFicyhnLV8pPDFlLTYmJk1hdGguYWJzKHYtdyk8MWUtNiYmTWF0aC5hYnMobS1rKTwxZS02KXJldHVybiBuKHQpO2g9Zy1fLGY9di13LHA9bS1rLGQ9MS9NYXRoLnNxcnQoaCpoK2YqZitwKnApLGk9eCoocCo9ZCktYiooZio9ZCksbz1iKihoKj1kKS15KnAscz15KmYteCpoLChkPU1hdGguc3FydChpKmkrbypvK3MqcykpPyhpKj1kPTEvZCxvKj1kLHMqPWQpOihpPTAsbz0wLHM9MCk7bD1mKnMtcCpvLGM9cCppLWgqcyx1PWgqby1mKmksKGQ9TWF0aC5zcXJ0KGwqbCtjKmMrdSp1KSk/KGwqPWQ9MS9kLGMqPWQsdSo9ZCk6KGw9MCxjPTAsdT0wKTtyZXR1cm4gdFswXT1pLHRbMV09bCx0WzJdPWgsdFszXT0wLHRbNF09byx0WzVdPWMsdFs2XT1mLHRbN109MCx0WzhdPXMsdFs5XT11LHRbMTBdPXAsdFsxMV09MCx0WzEyXT0tKGkqZytvKnYrcyptKSx0WzEzXT0tKGwqZytjKnYrdSptKSx0WzE0XT0tKGgqZytmKnYrcCptKSx0WzE1XT0xLHR9fSx7Ii4vaWRlbnRpdHkiOjI2N31dLDI3MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxhPWVbMV0saT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10saD1lWzhdLGY9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sZz1lWzEyXSx2PWVbMTNdLG09ZVsxNF0seT1lWzE1XSx4PXJbMF0sYj1yWzFdLF89clsyXSx3PXJbM107cmV0dXJuIHRbMF09eCpuK2IqcytfKmgrdypnLHRbMV09eCphK2IqbCtfKmYrdyp2LHRbMl09eCppK2IqYytfKnArdyptLHRbM109eCpvK2IqdStfKmQrdyp5LHg9cls0XSxiPXJbNV0sXz1yWzZdLHc9cls3XSx0WzRdPXgqbitiKnMrXypoK3cqZyx0WzVdPXgqYStiKmwrXypmK3cqdix0WzZdPXgqaStiKmMrXypwK3cqbSx0WzddPXgqbytiKnUrXypkK3cqeSx4PXJbOF0sYj1yWzldLF89clsxMF0sdz1yWzExXSx0WzhdPXgqbitiKnMrXypoK3cqZyx0WzldPXgqYStiKmwrXypmK3cqdix0WzEwXT14KmkrYipjK18qcCt3Km0sdFsxMV09eCpvK2IqdStfKmQrdyp5LHg9clsxMl0sYj1yWzEzXSxfPXJbMTRdLHc9clsxNV0sdFsxMl09eCpuK2IqcytfKmgrdypnLHRbMTNdPXgqYStiKmwrXypmK3cqdix0WzE0XT14KmkrYipjK18qcCt3Km0sdFsxNV09eCpvK2IqdStfKmQrdyp5LHR9fSx7fV0sMjcxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8pe3ZhciBzPTEvKGUtciksbD0xLyhuLWEpLGM9MS8oaS1vKTtyZXR1cm4gdFswXT0tMipzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPS0yKmwsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTIqYyx0WzExXT0wLHRbMTJdPShlK3IpKnMsdFsxM109KGErbikqbCx0WzE0XT0obytpKSpjLHRbMTVdPTEsdH19LHt9XSwyNzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgaT0xL01hdGgudGFuKGUvMiksbz0xLyhuLWEpO3JldHVybiB0WzBdPWkvcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1pLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0oYStuKSpvLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT0yKmEqbipvLHRbMTVdPTAsdH19LHt9XSwyNzM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGEsaSxvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbSx5LHgsYixfLHcsayxULE0sQSxTLEU9blswXSxMPW5bMV0sQz1uWzJdLFA9TWF0aC5zcXJ0KEUqRStMKkwrQypDKTtpZihNYXRoLmFicyhQKTwxZS02KXJldHVybiBudWxsO0UqPVA9MS9QLEwqPVAsQyo9UCxhPU1hdGguc2luKHIpLGk9TWF0aC5jb3Mociksbz0xLWkscz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1lWzNdLGg9ZVs0XSxmPWVbNV0scD1lWzZdLGQ9ZVs3XSxnPWVbOF0sdj1lWzldLG09ZVsxMF0seT1lWzExXSx4PUUqRSpvK2ksYj1MKkUqbytDKmEsXz1DKkUqby1MKmEsdz1FKkwqby1DKmEsaz1MKkwqbytpLFQ9QypMKm8rRSphLE09RSpDKm8rTCphLEE9TCpDKm8tRSphLFM9QypDKm8raSx0WzBdPXMqeCtoKmIrZypfLHRbMV09bCp4K2YqYit2Kl8sdFsyXT1jKngrcCpiK20qXyx0WzNdPXUqeCtkKmIreSpfLHRbNF09cyp3K2gqaytnKlQsdFs1XT1sKncrZiprK3YqVCx0WzZdPWMqdytwKmsrbSpULHRbN109dSp3K2Qqayt5KlQsdFs4XT1zKk0raCpBK2cqUyx0WzldPWwqTStmKkErdipTLHRbMTBdPWMqTStwKkErbSpTLHRbMTFdPXUqTStkKkEreSpTLGUhPT10JiYodFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0fX0se31dLDI3NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxpPWVbNF0sbz1lWzVdLHM9ZVs2XSxsPWVbN10sYz1lWzhdLHU9ZVs5XSxoPWVbMTBdLGY9ZVsxMV07ZSE9PXQmJih0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzRdPWkqYStjKm4sdFs1XT1vKmErdSpuLHRbNl09cyphK2gqbix0WzddPWwqYStmKm4sdFs4XT1jKmEtaSpuLHRbOV09dSphLW8qbix0WzEwXT1oKmEtcypuLHRbMTFdPWYqYS1sKm4sdH19LHt9XSwyNzU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGE9TWF0aC5jb3MociksaT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9ZVs4XSx1PWVbOV0saD1lWzEwXSxmPWVbMTFdO2UhPT10JiYodFs0XT1lWzRdLHRbNV09ZVs1XSx0WzZdPWVbNl0sdFs3XT1lWzddLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdFswXT1pKmEtYypuLHRbMV09byphLXUqbix0WzJdPXMqYS1oKm4sdFszXT1sKmEtZipuLHRbOF09aSpuK2MqYSx0WzldPW8qbit1KmEsdFsxMF09cypuK2gqYSx0WzExXT1sKm4rZiphLHR9fSx7fV0sMjc2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxhPU1hdGguY29zKHIpLGk9ZVswXSxvPWVbMV0scz1lWzJdLGw9ZVszXSxjPWVbNF0sdT1lWzVdLGg9ZVs2XSxmPWVbN107ZSE9PXQmJih0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTtyZXR1cm4gdFswXT1pKmErYypuLHRbMV09byphK3Uqbix0WzJdPXMqYStoKm4sdFszXT1sKmErZipuLHRbNF09YyphLWkqbix0WzVdPXUqYS1vKm4sdFs2XT1oKmEtcypuLHRbN109ZiphLWwqbix0fX0se31dLDI3NzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49clswXSxhPXJbMV0saT1yWzJdO3JldHVybiB0WzBdPWVbMF0qbix0WzFdPWVbMV0qbix0WzJdPWVbMl0qbix0WzNdPWVbM10qbix0WzRdPWVbNF0qYSx0WzVdPWVbNV0qYSx0WzZdPWVbNl0qYSx0WzddPWVbN10qYSx0WzhdPWVbOF0qaSx0WzldPWVbOV0qaSx0WzEwXT1lWzEwXSppLHRbMTFdPWVbMTFdKmksdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdH19LHt9XSwyNzg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsaSxvLHMsbCxjLHUsaCxmLHAsZCxnPXJbMF0sdj1yWzFdLG09clsyXTtlPT09dD8odFsxMl09ZVswXSpnK2VbNF0qditlWzhdKm0rZVsxMl0sdFsxM109ZVsxXSpnK2VbNV0qditlWzldKm0rZVsxM10sdFsxNF09ZVsyXSpnK2VbNl0qditlWzEwXSptK2VbMTRdLHRbMTVdPWVbM10qZytlWzddKnYrZVsxMV0qbStlWzE1XSk6KG49ZVswXSxhPWVbMV0saT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLGM9ZVs2XSx1PWVbN10saD1lWzhdLGY9ZVs5XSxwPWVbMTBdLGQ9ZVsxMV0sdFswXT1uLHRbMV09YSx0WzJdPWksdFszXT1vLHRbNF09cyx0WzVdPWwsdFs2XT1jLHRbN109dSx0WzhdPWgsdFs5XT1mLHRbMTBdPXAsdFsxMV09ZCx0WzEyXT1uKmcrcyp2K2gqbStlWzEyXSx0WzEzXT1hKmcrbCp2K2YqbStlWzEzXSx0WzE0XT1pKmcrYyp2K3AqbStlWzE0XSx0WzE1XT1vKmcrdSp2K2QqbStlWzE1XSk7cmV0dXJuIHR9fSx7fV0sMjc5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpe3ZhciByPWVbMV0sbj1lWzJdLGE9ZVszXSxpPWVbNl0sbz1lWzddLHM9ZVsxMV07dFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09cix0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPW4sdFs5XT1pLHRbMTFdPWVbMTRdLHRbMTJdPWEsdFsxM109byx0WzE0XT1zfWVsc2UgdFswXT1lWzBdLHRbMV09ZVs0XSx0WzJdPWVbOF0sdFszXT1lWzEyXSx0WzRdPWVbMV0sdFs1XT1lWzVdLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09ZVsyXSx0WzldPWVbNl0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxNF0sdFsxMl09ZVszXSx0WzEzXT1lWzddLHRbMTRdPWVbMTFdLHRbMTVdPWVbMTVdO3JldHVybiB0fX0se31dLDI4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dFswXT0xL2VbMF07YnJlYWs7Y2FzZSA0Om4odCxlKTticmVhaztjYXNlIDk6YSh0LGUpO2JyZWFrO2Nhc2UgMTY6aSh0LGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJjdXJyZW50bHkgc3VwcG9ydHMgbWF0cmljZXMgdXAgdG8gNHg0Iil9cmV0dXJuIHR9O3ZhciBuPXQoImdsLW1hdDIvaW52ZXJ0IiksYT10KCJnbC1tYXQzL2ludmVydCIpLGk9dCgiZ2wtbWF0NC9pbnZlcnQiKX0seyJnbC1tYXQyL2ludmVydCI6MjYwLCJnbC1tYXQzL2ludmVydCI6MjYxLCJnbC1tYXQ0L2ludmVydCI6MjY4fV0sMjgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJhcnljZW50cmljIiksYT10KCJwb2x5dG9wZS1jbG9zZXN0LXBvaW50L2xpYi9jbG9zZXN0X3BvaW50XzJkLmpzIik7ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj1bMCwwLDAsMF0sbj0wO248NDsrK24pZm9yKHZhciBhPTA7YTw0OysrYSlyW2FdKz10WzQqbithXSplW25dO3JldHVybiByfWZ1bmN0aW9uIG8odCxlLHIsbixhKXtmb3IodmFyIG89aShuLGkocixpKGUsW3RbMF0sdFsxXSx0WzJdLDFdKSkpLHM9MDtzPDM7KytzKW9bc10vPW9bM107cmV0dXJuWy41KmFbMF0qKDErb1swXSksLjUqYVsxXSooMS1vWzFdKV19ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj1bMCwwLDBdLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGE9dFtuXSxpPWVbbl0sbz0wO288MzsrK28pcltvXSs9aSphW29dO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGwsYyl7aWYoMT09PXQubGVuZ3RoKXJldHVyblswLHRbMF0uc2xpY2UoKV07Zm9yKHZhciB1PW5ldyBBcnJheSh0Lmxlbmd0aCksaD0wO2g8dC5sZW5ndGg7KytoKXVbaF09byh0W2hdLHIsaSxsLGMpO2Zvcih2YXIgZj0wLHA9MS8wLGg9MDtoPHUubGVuZ3RoOysraCl7Zm9yKHZhciBkPTAsZz0wO2c8MjsrK2cpZCs9TWF0aC5wb3codVtoXVtnXS1lW2ddLDIpO2Q8cCYmKHA9ZCxmPWgpfWZvcih2YXIgdj1mdW5jdGlvbih0LGUpe2lmKDI9PT10Lmxlbmd0aCl7Zm9yKHZhciByPTAsaT0wLG89MDtvPDI7KytvKXIrPU1hdGgucG93KGVbb10tdFswXVtvXSwyKSxpKz1NYXRoLnBvdyhlW29dLXRbMV1bb10sMik7cmV0dXJuIHI9TWF0aC5zcXJ0KHIpLGk9TWF0aC5zcXJ0KGkpLHIraTwxZS02P1sxLDBdOltpLyhyK2kpLHIvKGkrcildfWlmKDM9PT10Lmxlbmd0aCl7dmFyIHM9WzAsMF07cmV0dXJuIGEodFswXSx0WzFdLHRbMl0sZSxzKSxuKHQscyl9cmV0dXJuW119KHUsZSksbT0wLGg9MDtoPDM7KytoKXtpZih2W2hdPC0uMDAxfHx2W2hdPjEuMDAwMSlyZXR1cm4gbnVsbDttKz12W2hdfWlmKE1hdGguYWJzKG0tMSk+LjAwMSlyZXR1cm4gbnVsbDtyZXR1cm5bZixzKHQsdiksdl19fSx7YmFyeWNlbnRyaWM6NzUsInBvbHl0b3BlLWNsb3Nlc3QtcG9pbnQvbGliL2Nsb3Nlc3RfcG9pbnRfMmQuanMiOjQ4M31dLDI4MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2xpZnkiKSxhPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbm9ybWFsO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiB1djtcblxudW5pZm9ybSBtYXQ0IG1vZGVsXG4gICAgICAgICAgICwgdmlld1xuICAgICAgICAgICAsIHByb2plY3Rpb25cbiAgICAgICAgICAgLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb25cbiAgICAgICAgICAgLCBsaWdodFBvc2l0aW9uO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2RhdGE7XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52ZWM0IHByb2plY3QodmVjMyBwKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uICAgICAgPSBwcm9qZWN0KHBvc2l0aW9uKTtcblxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHZlYzQocG9zaXRpb24gLCAxLjApO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX25vcm1hbCAgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLCAwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xuXG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcbiAgZl9kYXRhICAgICAgICAgICA9IHBvc2l0aW9uO1xuICBmX3V2ICAgICAgICAgICAgID0gdXY7XG59XG4iXSksaT1uKFsiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcyxcbiAgZmxvYXQgZnJlc25lbCkge1xuXG4gIGZsb2F0IFZkb3ROID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcbiAgZmxvYXQgTGRvdE4gPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcblxuICAvL0hhbGYgYW5nbGUgdmVjdG9yXG4gIHZlYzMgSCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pO1xuXG4gIC8vR2VvbWV0cmljIHRlcm1cbiAgZmxvYXQgTmRvdEggPSBtYXgoZG90KHN1cmZhY2VOb3JtYWwsIEgpLCAwLjApO1xuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgTGRvdEggPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBHMSA9ICgyLjAgKiBOZG90SCAqIFZkb3ROKSAvIFZkb3RIO1xuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xuICBmbG9hdCBHID0gbWluKDEuMCwgbWluKEcxLCBHMikpO1xuICBcbiAgLy9EaXN0cmlidXRpb24gdGVybVxuICBmbG9hdCBEID0gYmVja21hbm5EaXN0cmlidXRpb24oTmRvdEgsIHJvdWdobmVzcyk7XG5cbiAgLy9GcmVzbmVsIHRlcm1cbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XG5cbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcbn1cblxuLy8jcHJhZ21hIGdsc2xpZnk6IGJlY2ttYW5uID0gcmVxdWlyZShnbHNsLXNwZWN1bGFyLWJlY2ttYW5uKSAvLyB1c2VkIGluIGdsLXN1cmZhY2UzZFxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzc1xuICAgICAgICAgICAgLCBmcmVzbmVsXG4gICAgICAgICAgICAsIGthbWJpZW50XG4gICAgICAgICAgICAsIGtkaWZmdXNlXG4gICAgICAgICAgICAsIGtzcGVjdWxhcjtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKGZfY29sb3IuYSA9PSAwLjAgfHxcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfZGF0YSlcbiAgKSBkaXNjYXJkO1xuXG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShmX25vcm1hbCk7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xuICAvL2Zsb2F0IHNwZWN1bGFyID0gbWF4KDAuMCwgYmVja21hbm4oTCwgViwgTiwgcm91Z2huZXNzKSk7IC8vIHVzZWQgaW4gZ2wtc3VyZmFjZTNkXG5cbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSB2ZWM0KGZfY29sb3IucmdiLCAxLjApICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBmX2NvbG9yLmE7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIGZfY29sb3IgPSBjb2xvcjtcbiAgZl9kYXRhICA9IHBvc2l0aW9uO1xuICBmX3V2ICAgID0gdXY7XG59Il0pLHM9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfZGF0YSkpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KSAqIG9wYWNpdHk7XG59Il0pLGw9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgdXY7XG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLjAsIDAuMCAsMC4wICwwLjApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIH1cbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuICBmX2NvbG9yID0gY29sb3I7XG4gIGZfdXYgPSB1djtcbn0iXSksYz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHBvaW50UiA9IGdsX1BvaW50Q29vcmQueHkgLSB2ZWMyKDAuNSwgMC41KTtcbiAgaWYoZG90KHBvaW50UiwgcG9pbnRSKSA+IDAuMjUpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xufSJdKSx1PW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbjtcbn0iXSksaD1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pLGY9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyAgcG9zaXRpb247XG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xuYXR0cmlidXRlIHZlYzQgIGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcbiAgfVxuICBmX2lkICAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgID0gcG9zaXRpb247XG59Il0pLHA9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbn0iXSksZD1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMzIGNvbnRvdXJDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbnRvdXJDb2xvciwgMS4wKTtcbn1cbiJdKTtyLm1lc2hTaGFkZXI9e3ZlcnRleDphLGZyYWdtZW50OmksYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9XX0sci53aXJlU2hhZGVyPXt2ZXJ0ZXg6byxmcmFnbWVudDpzLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9XX0sci5wb2ludFNoYWRlcj17dmVydGV4OmwsZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifSx7bmFtZToicG9pbnRTaXplIix0eXBlOiJmbG9hdCJ9XX0sci5waWNrU2hhZGVyPXt2ZXJ0ZXg6dSxmcmFnbWVudDpoLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9XX0sci5wb2ludFBpY2tTaGFkZXI9e3ZlcnRleDpmLGZyYWdtZW50OmgsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6InBvaW50U2l6ZSIsdHlwZToiZmxvYXQifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV19LHIuY29udG91clNoYWRlcj17dmVydGV4OnAsZnJhZ21lbnQ6ZCxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV19fSx7Z2xzbGlmeTo0MTF9XSwyODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksYT10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLG89dCgiZ2wtdGV4dHVyZTJkIikscz10KCJub3JtYWxzIiksbD10KCJnbC1tYXQ0L211bHRpcGx5IiksYz10KCJnbC1tYXQ0L2ludmVydCIpLHU9dCgibmRhcnJheSIpLGg9dCgiY29sb3JtYXAiKSxmPXQoInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIikscD10KCJ0eXBlZGFycmF5LXBvb2wiKSxkPXQoIi4vbGliL3NoYWRlcnMiKSxnPXQoIi4vbGliL2Nsb3Nlc3QtcG9pbnQiKSx2PWQubWVzaFNoYWRlcixtPWQud2lyZVNoYWRlcix5PWQucG9pbnRTaGFkZXIseD1kLnBpY2tTaGFkZXIsYj1kLnBvaW50UGlja1NoYWRlcixfPWQuY29udG91clNoYWRlcix3PVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBrKHQsZSxyLG4sYSxpLG8scyxsLGMsdSxoLGYscCxkLGcsdixtLHkseCxiLF8sayxULE0sQSxTKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5jZWxscz1bXSx0aGlzLnBvc2l0aW9ucz1bXSx0aGlzLmludGVuc2l0eT1bXSx0aGlzLnRleHR1cmU9ZSx0aGlzLmRpcnR5PSEwLHRoaXMudHJpU2hhZGVyPXIsdGhpcy5saW5lU2hhZGVyPW4sdGhpcy5wb2ludFNoYWRlcj1hLHRoaXMucGlja1NoYWRlcj1pLHRoaXMucG9pbnRQaWNrU2hhZGVyPW8sdGhpcy5jb250b3VyU2hhZGVyPXMsdGhpcy50cmlhbmdsZVBvc2l0aW9ucz1sLHRoaXMudHJpYW5nbGVDb2xvcnM9dSx0aGlzLnRyaWFuZ2xlTm9ybWFscz1mLHRoaXMudHJpYW5nbGVVVnM9aCx0aGlzLnRyaWFuZ2xlSWRzPWMsdGhpcy50cmlhbmdsZVZBTz1wLHRoaXMudHJpYW5nbGVDb3VudD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy5lZGdlUG9zaXRpb25zPWQsdGhpcy5lZGdlQ29sb3JzPXYsdGhpcy5lZGdlVVZzPW0sdGhpcy5lZGdlSWRzPWcsdGhpcy5lZGdlVkFPPXksdGhpcy5lZGdlQ291bnQ9MCx0aGlzLnBvaW50UG9zaXRpb25zPXgsdGhpcy5wb2ludENvbG9ycz1fLHRoaXMucG9pbnRVVnM9ayx0aGlzLnBvaW50U2l6ZXM9VCx0aGlzLnBvaW50SWRzPWIsdGhpcy5wb2ludFZBTz1NLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29udG91ckxpbmVXaWR0aD0xLHRoaXMuY29udG91clBvc2l0aW9ucz1BLHRoaXMuY29udG91clZBTz1TLHRoaXMuY29udG91ckNvdW50PTAsdGhpcy5jb250b3VyQ29sb3I9WzAsMCwwXSx0aGlzLmNvbnRvdXJFbmFibGU9ITAsdGhpcy5waWNrVmVydGV4PSEwLHRoaXMucGlja0lkPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGlnaHRQb3NpdGlvbj1bMWU1LDFlNSwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5vcGFjaXR5c2NhbGU9ITEsdGhpcy5fbW9kZWw9dyx0aGlzLl92aWV3PXcsdGhpcy5fcHJvamVjdGlvbj13LHRoaXMuX3Jlc29sdXRpb249WzEsMV19dmFyIFQ9ay5wcm90b3R5cGU7ZnVuY3Rpb24gTSh0LGUpe2lmKCFlKXJldHVybiAxO2lmKCFlLmxlbmd0aClyZXR1cm4gMTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil7aWYoZS5sZW5ndGg8MilyZXR1cm4gMTtpZihlW3JdWzBdPT09dClyZXR1cm4gZVtyXVsxXTtpZihlW3JdWzBdPnQmJnI+MCl7dmFyIG49KGVbcl1bMF0tdCkvKGVbcl1bMF0tZVtyLTFdWzBdKTtyZXR1cm4gZVtyXVsxXSooMS1uKStuKmVbci0xXVsxXX19cmV0dXJuIDF9ZnVuY3Rpb24gQSh0KXt2YXIgZT1uKHQseS52ZXJ0ZXgseS5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGUuYXR0cmlidXRlcy5wb2ludFNpemUubG9jYXRpb249NCxlfWZ1bmN0aW9uIFModCl7dmFyIGU9bih0LHgudmVydGV4LHguZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuaWQubG9jYXRpb249MSxlfWZ1bmN0aW9uIEUodCl7dmFyIGU9bih0LGIudmVydGV4LGIuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuaWQubG9jYXRpb249MSxlLmF0dHJpYnV0ZXMucG9pbnRTaXplLmxvY2F0aW9uPTQsZX1mdW5jdGlvbiBMKHQpe3ZhciBlPW4odCxfLnZlcnRleCxfLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZX1ULmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaGFzQWxwaGF9LFQuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0FscGhhfSxULnBpY2tTbG90cz0xLFQuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0sVC5oaWdobGlnaHQ9ZnVuY3Rpb24odCl7aWYodCYmdGhpcy5jb250b3VyRW5hYmxlKXtmb3IodmFyIGU9Zih0aGlzLmNlbGxzLHRoaXMuaW50ZW5zaXR5LHQuaW50ZW5zaXR5KSxyPWUuY2VsbHMsbj1lLnZlcnRleElkcyxhPWUudmVydGV4V2VpZ2h0cyxpPXIubGVuZ3RoLG89cC5tYWxsb2NGbG9hdDMyKDYqaSkscz0wLGw9MDtsPGk7KytsKWZvcih2YXIgYz1yW2xdLHU9MDt1PDI7Kyt1KXt2YXIgaD1jWzBdOzI9PT1jLmxlbmd0aCYmKGg9Y1t1XSk7Zm9yKHZhciBkPW5baF1bMF0sZz1uW2hdWzFdLHY9YVtoXSxtPTEtdix5PXRoaXMucG9zaXRpb25zW2RdLHg9dGhpcy5wb3NpdGlvbnNbZ10sYj0wO2I8MzsrK2Ipb1tzKytdPXYqeVtiXSttKnhbYl19dGhpcy5jb250b3VyQ291bnQ9cy8zfDAsdGhpcy5jb250b3VyUG9zaXRpb25zLnVwZGF0ZShvLnN1YmFycmF5KDAscykpLHAuZnJlZShvKX1lbHNlIHRoaXMuY29udG91ckNvdW50PTB9LFQudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLmRpcnR5PSEwLCJjb250b3VyRW5hYmxlImluIHQmJih0aGlzLmNvbnRvdXJFbmFibGU9dC5jb250b3VyRW5hYmxlKSwiY29udG91ckNvbG9yImluIHQmJih0aGlzLmNvbnRvdXJDb2xvcj10LmNvbnRvdXJDb2xvciksImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLCJsaWdodFBvc2l0aW9uImluIHQmJih0aGlzLmxpZ2h0UG9zaXRpb249dC5saWdodFBvc2l0aW9uKSx0aGlzLmhhc0FscGhhPSExLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLCJvcGFjaXR5c2NhbGUiaW4gdCYmKHRoaXMub3BhY2l0eXNjYWxlPXQub3BhY2l0eXNjYWxlLHRoaXMuaGFzQWxwaGE9ITApLCJhbWJpZW50ImluIHQmJih0aGlzLmFtYmllbnRMaWdodD10LmFtYmllbnQpLCJkaWZmdXNlImluIHQmJih0aGlzLmRpZmZ1c2VMaWdodD10LmRpZmZ1c2UpLCJzcGVjdWxhciJpbiB0JiYodGhpcy5zcGVjdWxhckxpZ2h0PXQuc3BlY3VsYXIpLCJyb3VnaG5lc3MiaW4gdCYmKHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzKSwiZnJlc25lbCJpbiB0JiYodGhpcy5mcmVzbmVsPXQuZnJlc25lbCksdC50ZXh0dXJlPyh0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudGV4dHVyZT1vKGUsdC50ZXh0dXJlKSk6dC5jb2xvcm1hcCYmKHRoaXMudGV4dHVyZS5zaGFwZT1bMjU2LDI1Nl0sdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLkxJTkVBUl9NSVBNQVBfTElORUFSLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5MSU5FQVIsdGhpcy50ZXh0dXJlLnNldFBpeGVscyhmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1oKHtjb2xvcm1hcDp0LG5zaGFkZXM6MjU2LGZvcm1hdDoicmdiYSJ9KSxuPW5ldyBVaW50OEFycmF5KDEwMjQpLGE9MDthPDI1NjsrK2Epe2Zvcih2YXIgaT1yW2FdLG89MDtvPDM7KytvKW5bNCphK29dPWlbb107bls0KmErM109ZT8yNTUqTShhLzI1NSxlKToyNTUqaVszXX1yZXR1cm4gdShuLFsyNTYsMjU2LDRdLFs0LDAsMV0pfSh0LmNvbG9ybWFwLHRoaXMub3BhY2l0eXNjYWxlKSksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwKCkpO3ZhciByPXQuY2VsbHMsbj10LnBvc2l0aW9ucztpZihuJiZyKXt2YXIgYT1bXSxpPVtdLGw9W10sYz1bXSxmPVtdLHA9W10sZD1bXSxnPVtdLHY9W10sbT1bXSx5PVtdLHg9W10sYj1bXSxfPVtdO3RoaXMuY2VsbHM9cix0aGlzLnBvc2l0aW9ucz1uO3ZhciB3PXQudmVydGV4Tm9ybWFscyxrPXQuY2VsbE5vcm1hbHMsVD12b2lkIDA9PT10LnZlcnRleE5vcm1hbHNFcHNpbG9uPzFlLTY6dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbixBPXZvaWQgMD09PXQuZmFjZU5vcm1hbHNFcHNpbG9uPzFlLTY6dC5mYWNlTm9ybWFsc0Vwc2lsb247dC51c2VGYWNldE5vcm1hbHMmJiFrJiYoaz1zLmZhY2VOb3JtYWxzKHIsbixBKSksa3x8d3x8KHc9cy52ZXJ0ZXhOb3JtYWxzKHIsbixUKSk7dmFyIFM9dC52ZXJ0ZXhDb2xvcnMsRT10LmNlbGxDb2xvcnMsTD10Lm1lc2hDb2xvcnx8WzEsMSwxLDFdLEM9dC52ZXJ0ZXhVVnMsUD10LnZlcnRleEludGVuc2l0eSxPPXQuY2VsbFVWcyx6PXQuY2VsbEludGVuc2l0eSxJPTEvMCxEPS0xLzA7aWYoIUMmJiFPKWlmKFApaWYodC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMpST0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMF0sRD0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IodmFyIFI9MDtSPFAubGVuZ3RoOysrUil7dmFyIEY9UFtSXTtJPU1hdGgubWluKEksRiksRD1NYXRoLm1heChELEYpfWVsc2UgaWYoeilpZih0LmNlbGxJbnRlbnNpdHlCb3VuZHMpST0rdC5jZWxsSW50ZW5zaXR5Qm91bmRzWzBdLEQ9K3QuY2VsbEludGVuc2l0eUJvdW5kc1sxXTtlbHNlIGZvcihSPTA7Ujx6Lmxlbmd0aDsrK1Ipe0Y9eltSXTtJPU1hdGgubWluKEksRiksRD1NYXRoLm1heChELEYpfWVsc2UgZm9yKFI9MDtSPG4ubGVuZ3RoOysrUil7Rj1uW1JdWzJdO0k9TWF0aC5taW4oSSxGKSxEPU1hdGgubWF4KEQsRil9dGhpcy5pbnRlbnNpdHk9UHx8KHp8fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl1bMl07cmV0dXJuIHJ9KG4pKSx0aGlzLnBpY2tWZXJ0ZXg9ISh6fHxFKTt2YXIgQj10LnBvaW50U2l6ZXMsTj10LnBvaW50U2l6ZXx8MTt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoUj0wO1I8bi5sZW5ndGg7KytSKWZvcih2YXIgaj1uW1JdLFY9MDtWPDM7KytWKSFpc05hTihqW1ZdKSYmaXNGaW5pdGUoaltWXSkmJih0aGlzLmJvdW5kc1swXVtWXT1NYXRoLm1pbih0aGlzLmJvdW5kc1swXVtWXSxqW1ZdKSx0aGlzLmJvdW5kc1sxXVtWXT1NYXRoLm1heCh0aGlzLmJvdW5kc1sxXVtWXSxqW1ZdKSk7dmFyIFU9MCxxPTAsSD0wO3Q6Zm9yKFI9MDtSPHIubGVuZ3RoOysrUil7dmFyIEc9cltSXTtzd2l0Y2goRy5sZW5ndGgpe2Nhc2UgMTpmb3Ioaj1uW1c9R1swXV0sVj0wO1Y8MzsrK1YpaWYoaXNOYU4oaltWXSl8fCFpc0Zpbml0ZShqW1ZdKSljb250aW51ZSB0O20ucHVzaChqWzBdLGpbMV0salsyXSksWD1TP1NbV106RT9FW1JdOkwsdGhpcy5vcGFjaXR5c2NhbGUmJlA/aS5wdXNoKFhbMF0sWFsxXSxYWzJdLHRoaXMub3BhY2l0eSpNKChQW1ddLUkpLyhELUkpLHRoaXMub3BhY2l0eXNjYWxlKSk6Mz09PVgubGVuZ3RoP3kucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkpOih5LnB1c2goWFswXSxYWzFdLFhbMl0sWFszXSp0aGlzLm9wYWNpdHkpLFhbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApKSxaPUM/Q1tXXTpQP1soUFtXXS1JKS8oRC1JKSwwXTpPP09bUl06ej9bKHpbUl0tSSkvKEQtSSksMF06WyhqWzJdLUkpLyhELUkpLDBdLHgucHVzaChaWzBdLFpbMV0pLEI/Yi5wdXNoKEJbV10pOmIucHVzaChOKSxfLnB1c2goUiksSCs9MTticmVhaztjYXNlIDI6Zm9yKFY9MDtWPDI7KytWKXtqPW5bVz1HW1ZdXTtmb3IodmFyIFk9MDtZPDM7KytZKWlmKGlzTmFOKGpbWV0pfHwhaXNGaW5pdGUoaltZXSkpY29udGludWUgdH1mb3IoVj0wO1Y8MjsrK1Ype2o9bltXPUdbVl1dO3AucHVzaChqWzBdLGpbMV0salsyXSksWD1TP1NbV106RT9FW1JdOkwsdGhpcy5vcGFjaXR5c2NhbGUmJlA/aS5wdXNoKFhbMF0sWFsxXSxYWzJdLHRoaXMub3BhY2l0eSpNKChQW1ddLUkpLyhELUkpLHRoaXMub3BhY2l0eXNjYWxlKSk6Mz09PVgubGVuZ3RoP2QucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkpOihkLnB1c2goWFswXSxYWzFdLFhbMl0sWFszXSp0aGlzLm9wYWNpdHkpLFhbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApKSxaPUM/Q1tXXTpQP1soUFtXXS1JKS8oRC1JKSwwXTpPP09bUl06ej9bKHpbUl0tSSkvKEQtSSksMF06WyhqWzJdLUkpLyhELUkpLDBdLGcucHVzaChaWzBdLFpbMV0pLHYucHVzaChSKX1xKz0xO2JyZWFrO2Nhc2UgMzpmb3IoVj0wO1Y8MzsrK1YpZm9yKGo9bltXPUdbVl1dLFk9MDtZPDM7KytZKWlmKGlzTmFOKGpbWV0pfHwhaXNGaW5pdGUoaltZXSkpY29udGludWUgdDtmb3IoVj0wO1Y8MzsrK1Ype3ZhciBXLFgsWixKO2o9bltXPUdbMi1WXV07YS5wdXNoKGpbMF0salsxXSxqWzJdKSwoWD1TP1NbV106RT9FW1JdOkwpP3RoaXMub3BhY2l0eXNjYWxlJiZQP2kucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkqTSgoUFtXXS1JKS8oRC1JKSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1YLmxlbmd0aD9pLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KTooaS5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10qdGhpcy5vcGFjaXR5KSxYWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSk6aS5wdXNoKC41LC41LC41LDEpLFo9Qz9DW1ddOlA/WyhQW1ddLUkpLyhELUkpLDBdOk8/T1tSXTp6P1soeltSXS1JKS8oRC1JKSwwXTpbKGpbMl0tSSkvKEQtSSksMF0sYy5wdXNoKFpbMF0sWlsxXSksSj13P3dbV106a1tSXSxsLnB1c2goSlswXSxKWzFdLEpbMl0pLGYucHVzaChSKX1VKz0xfX10aGlzLnBvaW50Q291bnQ9SCx0aGlzLmVkZ2VDb3VudD1xLHRoaXMudHJpYW5nbGVDb3VudD1VLHRoaXMucG9pbnRQb3NpdGlvbnMudXBkYXRlKG0pLHRoaXMucG9pbnRDb2xvcnMudXBkYXRlKHkpLHRoaXMucG9pbnRVVnMudXBkYXRlKHgpLHRoaXMucG9pbnRTaXplcy51cGRhdGUoYiksdGhpcy5wb2ludElkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KF8pKSx0aGlzLmVkZ2VQb3NpdGlvbnMudXBkYXRlKHApLHRoaXMuZWRnZUNvbG9ycy51cGRhdGUoZCksdGhpcy5lZGdlVVZzLnVwZGF0ZShnKSx0aGlzLmVkZ2VJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheSh2KSksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy51cGRhdGUoYSksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUoaSksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUoYyksdGhpcy50cmlhbmdsZU5vcm1hbHMudXBkYXRlKGwpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShmKSl9fSxULmRyYXdUcmFuc3BhcmVudD1ULmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fHcsbj10LnZpZXd8fHcsYT10LnByb2plY3Rpb258fHcsaT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylpWzBdW29dPU1hdGgubWF4KGlbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxpWzFdW29dPU1hdGgubWluKGlbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjphLGludmVyc2VNb2RlbDp3LnNsaWNlKCksY2xpcEJvdW5kczppLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLGNvbnRvdXJDb2xvcjp0aGlzLmNvbnRvdXJDb2xvcix0ZXh0dXJlOjB9O3MuaW52ZXJzZU1vZGVsPWMocy5pbnZlcnNlTW9kZWwscy5tb2RlbCksZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKSx0aGlzLnRleHR1cmUuYmluZCgwKTt2YXIgdT1uZXcgQXJyYXkoMTYpO2wodSxzLnZpZXcscy5tb2RlbCksbCh1LHMucHJvamVjdGlvbix1KSxjKHUsdSk7Zm9yKG89MDtvPDM7KytvKXMuZXllUG9zaXRpb25bb109dVsxMitvXS91WzE1XTt2YXIgaCxmPXVbMTVdO2ZvcihvPTA7bzwzOysrbylmKz10aGlzLmxpZ2h0UG9zaXRpb25bb10qdVs0Km8rM107Zm9yKG89MDtvPDM7KytvKXtmb3IodmFyIHA9dVsxMitvXSxkPTA7ZDwzOysrZClwKz11WzQqZCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25bZF07cy5saWdodFBvc2l0aW9uW29dPXAvZn10aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKChoPXRoaXMudHJpU2hhZGVyKS5iaW5kKCksaC51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKTt0aGlzLmVkZ2VDb3VudD4wJiZ0aGlzLmxpbmVXaWR0aD4wJiYoKGg9dGhpcy5saW5lU2hhZGVyKS5iaW5kKCksaC51bmlmb3Jtcz1zLHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSk7dGhpcy5wb2ludENvdW50PjAmJigoaD10aGlzLnBvaW50U2hhZGVyKS5iaW5kKCksaC51bmlmb3Jtcz1zLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKSk7dGhpcy5jb250b3VyRW5hYmxlJiZ0aGlzLmNvbnRvdXJDb3VudD4wJiZ0aGlzLmNvbnRvdXJMaW5lV2lkdGg+MCYmKChoPXRoaXMuY29udG91clNoYWRlcikuYmluZCgpLGgudW5pZm9ybXM9cyx0aGlzLmNvbnRvdXJWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLkxJTkVTLDAsdGhpcy5jb250b3VyQ291bnQpLHRoaXMuY29udG91clZBTy51bmJpbmQoKSl9LFQuZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fHcsbj10LnZpZXd8fHcsYT10LnByb2plY3Rpb258fHcsaT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylpWzBdW29dPU1hdGgubWF4KGlbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxpWzFdW29dPU1hdGgubWluKGlbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt0aGlzLl9tb2RlbD1bXS5zbGljZS5jYWxsKHIpLHRoaXMuX3ZpZXc9W10uc2xpY2UuY2FsbChuKSx0aGlzLl9wcm9qZWN0aW9uPVtdLnNsaWNlLmNhbGwoYSksdGhpcy5fcmVzb2x1dGlvbj1bZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XTt2YXIgcyxsPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmEsY2xpcEJvdW5kczppLHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9Oygocz10aGlzLnBpY2tTaGFkZXIpLmJpbmQoKSxzLnVuaWZvcm1zPWwsdGhpcy50cmlhbmdsZUNvdW50PjAmJih0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSksdGhpcy5lZGdlQ291bnQ+MCYmKHRoaXMuZWRnZVZBTy5iaW5kKCksZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLDIqdGhpcy5lZGdlQ291bnQpLHRoaXMuZWRnZVZBTy51bmJpbmQoKSksdGhpcy5wb2ludENvdW50PjApJiYoKHM9dGhpcy5wb2ludFBpY2tTaGFkZXIpLmJpbmQoKSxzLnVuaWZvcm1zPWwsdGhpcy5wb2ludFZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSx0aGlzLnBvaW50VkFPLnVuYmluZCgpKX0sVC5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zLGE9bmV3IEFycmF5KHIubGVuZ3RoKSxpPTA7aTxyLmxlbmd0aDsrK2kpYVtpXT1uW3JbaV1dO3ZhciBvPXQuY29vcmRbMF0scz10LmNvb3JkWzFdO2lmKCF0aGlzLnBpY2tWZXJ0ZXgpe3ZhciBsPXRoaXMucG9zaXRpb25zW3JbMF1dLGM9dGhpcy5wb3NpdGlvbnNbclsxXV0sdT10aGlzLnBvc2l0aW9uc1tyWzJdXSxoPVsobFswXStjWzBdK3VbMF0pLzMsKGxbMV0rY1sxXSt1WzFdKS8zLChsWzJdK2NbMl0rdVsyXSkvM107cmV0dXJue19jZWxsQ2VudGVyOiEwLHBvc2l0aW9uOltvLHNdLGluZGV4OmUsY2VsbDpyLGNlbGxJZDplLGludGVuc2l0eTp0aGlzLmludGVuc2l0eVtlXSxkYXRhQ29vcmRpbmF0ZTpofX12YXIgZj1nKGEsW28qdGhpcy5waXhlbFJhdGlvLHRoaXMuX3Jlc29sdXRpb25bMV0tcyp0aGlzLnBpeGVsUmF0aW9dLHRoaXMuX21vZGVsLHRoaXMuX3ZpZXcsdGhpcy5fcHJvamVjdGlvbix0aGlzLl9yZXNvbHV0aW9uKTtpZighZilyZXR1cm4gbnVsbDt2YXIgcD1mWzJdLGQ9MDtmb3IoaT0wO2k8ci5sZW5ndGg7KytpKWQrPXBbaV0qdGhpcy5pbnRlbnNpdHlbcltpXV07cmV0dXJue3Bvc2l0aW9uOmZbMV0saW5kZXg6cltmWzBdXSxjZWxsOnIsY2VsbElkOmUsaW50ZW5zaXR5OmQsZGF0YUNvb3JkaW5hdGU6dGhpcy5wb3NpdGlvbnNbcltmWzBdXV19fSxULmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudHJpU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmxpbmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9pbnRTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5wb2ludFBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWQU8uZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVDb2xvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVVVnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVOb3JtYWxzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VWQU8uZGlzcG9zZSgpLHRoaXMuZWRnZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5lZGdlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VVVnMuZGlzcG9zZSgpLHRoaXMuZWRnZUlkcy5kaXNwb3NlKCksdGhpcy5wb2ludFZBTy5kaXNwb3NlKCksdGhpcy5wb2ludFBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5wb2ludENvbG9ycy5kaXNwb3NlKCksdGhpcy5wb2ludFVWcy5kaXNwb3NlKCksdGhpcy5wb2ludFNpemVzLmRpc3Bvc2UoKSx0aGlzLnBvaW50SWRzLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuY29udG91clBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5jb250b3VyU2hhZGVyLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKSwhKHQuZ2V0RXh0ZW5zaW9uKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKXx8dC5nZXRFeHRlbnNpb24oIk1PWl9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKXx8dC5nZXRFeHRlbnNpb24oIldFQktJVF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkpdGhyb3cgbmV3IEVycm9yKCJkZXJpdmF0aXZlcyBub3Qgc3VwcG9ydGVkIik7dmFyIHI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LHYudmVydGV4LHYuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMubm9ybWFsLmxvY2F0aW9uPTQsZX0odCkscz1mdW5jdGlvbih0KXt2YXIgZT1uKHQsbS52ZXJ0ZXgsbS5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGV9KHQpLGw9QSh0KSxjPVModCksaD1FKHQpLGY9TCh0KSxwPW8odCx1KG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7cC5nZW5lcmF0ZU1pcG1hcCgpLHAubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIscC5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGQ9YSh0KSxnPWEodCkseT1hKHQpLHg9YSh0KSxiPWEodCksXz1pKHQsW3tidWZmZXI6ZCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOmIsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Zyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjN9XSksdz1hKHQpLFQ9YSh0KSxNPWEodCksQz1hKHQpLFA9aSh0LFt7YnVmZmVyOncsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpDLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOlQsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpNLHR5cGU6dC5GTE9BVCxzaXplOjJ9XSksTz1hKHQpLHo9YSh0KSxJPWEodCksRD1hKHQpLFI9YSh0KSxGPWkodCxbe2J1ZmZlcjpPLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Uix0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjp6LHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6SSx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOkQsdHlwZTp0LkZMT0FULHNpemU6MX1dKSxCPWEodCksTj1uZXcgayh0LHAscixzLGwsYyxoLGYsZCxiLGcseSx4LF8sdyxDLFQsTSxQLE8sUix6LEksRCxGLEIsaSh0LFt7YnVmZmVyOkIsdHlwZTp0LkZMT0FULHNpemU6M31dKSk7cmV0dXJuIE4udXBkYXRlKGUpLE59fSx7Ii4vbGliL2Nsb3Nlc3QtcG9pbnQiOjI4MSwiLi9saWIvc2hhZGVycyI6MjgyLGNvbG9ybWFwOjEyOCwiZ2wtYnVmZmVyIjoyNDQsImdsLW1hdDQvaW52ZXJ0IjoyNjgsImdsLW1hdDQvbXVsdGlwbHkiOjI3MCwiZ2wtc2hhZGVyIjozMDQsImdsLXRleHR1cmUyZCI6MzI0LCJnbC12YW8iOjMyOSxuZGFycmF5OjQ1Mixub3JtYWxzOjQ1NSwic2ltcGxpY2lhbC1jb21wbGV4LWNvbnRvdXIiOjUxNywidHlwZWRhcnJheS1wb29sIjo1NDR9XSwyODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsWzAsMCwwLDEsMSwwLDEsMV0pLHM9YShlLGkuYm94VmVydCxpLmxpbmVGcmFnKTtyZXR1cm4gbmV3IG8odCxyLHMpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxhPXQoImdsLXNoYWRlciIpLGk9dCgiLi9zaGFkZXJzIik7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yfXZhciBzLGwsYz1vLnByb3RvdHlwZTtjLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sYy5kcmF3Qm94PShzPVswLDBdLGw9WzAsMF0sZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgaT10aGlzLnBsb3Qsbz10aGlzLnNoYWRlcixjPWkuZ2w7c1swXT10LHNbMV09ZSxsWzBdPXIsbFsxXT1uLG8udW5pZm9ybXMubG89cyxvLnVuaWZvcm1zLmhpPWwsby51bmlmb3Jtcy5jb2xvcj1hLGMuZHJhd0FycmF5cyhjLlRSSUFOR0xFX1NUUklQLDAsNCl9KSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI4NywiZ2wtYnVmZmVyIjoyNDQsImdsLXNoYWRlciI6MzA0fV0sMjg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxpPWEoZSxvLmdyaWRWZXJ0LG8uZ3JpZEZyYWcpLGw9YShlLG8udGlja1ZlcnQsby5ncmlkRnJhZyk7cmV0dXJuIG5ldyBzKHQscixpLGwpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxhPXQoImdsLXNoYWRlciIpLGk9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxvPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja1NoYWRlcj1uLHRoaXMudGlja3M9W1tdLFtdXX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQtZX12YXIgYyx1LGgsZixwLGQ9cy5wcm90b3R5cGU7ZC5kcmF3PShjPVswLDBdLHU9WzAsMF0saD1bMCwwXSxmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnBsb3QsZT10aGlzLnZibyxyPXRoaXMuc2hhZGVyLG49dGhpcy50aWNrcyxhPXQuZ2wsaT10Ll90aWNrQm91bmRzLG89dC5kYXRhQm94LHM9dC52aWV3Qm94LGw9dC5ncmlkTGluZVdpZHRoLGY9dC5ncmlkTGluZUNvbG9yLHA9dC5ncmlkTGluZUVuYWJsZSxkPXQucGl4ZWxSYXRpbyxnPTA7ZzwyOysrZyl7dmFyIHY9aVtnXSxtPWlbZysyXS12LHk9LjUqKG9bZysyXStvW2ddKSx4PW9bZysyXS1vW2ddO3VbZ109MiptL3gsY1tnXT0yKih2LXkpL3h9ci5iaW5kKCksZS5iaW5kKCksci5hdHRyaWJ1dGVzLmRhdGFDb29yZC5wb2ludGVyKCksci51bmlmb3Jtcy5kYXRhU2hpZnQ9YyxyLnVuaWZvcm1zLmRhdGFTY2FsZT11O3ZhciBiPTA7Zm9yKGc9MDtnPDI7KytnKXtoWzBdPWhbMV09MCxoW2ddPTEsci51bmlmb3Jtcy5kYXRhQXhpcz1oLHIudW5pZm9ybXMubGluZVdpZHRoPWxbZ10vKHNbZysyXS1zW2ddKSpkLHIudW5pZm9ybXMuY29sb3I9ZltnXTt2YXIgXz02Km5bZ10ubGVuZ3RoO3BbZ10mJl8mJmEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyxiLF8pLGIrPV99fSksZC5kcmF3VGlja01hcmtzPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXSxyPVsxLDBdLG49WzAsMV0sYT1bMCwwXSxvPVswLDBdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcz10aGlzLnBsb3QsYz10aGlzLnZibyx1PXRoaXMudGlja1NoYWRlcixoPXRoaXMudGlja3MsZj1zLmdsLHA9cy5fdGlja0JvdW5kcyxkPXMuZGF0YUJveCxnPXMudmlld0JveCx2PXMucGl4ZWxSYXRpbyxtPXMuc2NyZWVuQm94LHk9bVsyXS1tWzBdLHg9bVszXS1tWzFdLGI9Z1syXS1nWzBdLF89Z1szXS1nWzFdLHc9MDt3PDI7Kyt3KXt2YXIgaz1wW3ddLFQ9cFt3KzJdLWssTT0uNSooZFt3KzJdK2Rbd10pLEE9ZFt3KzJdLWRbd107ZVt3XT0yKlQvQSx0W3ddPTIqKGstTSkvQX1lWzBdKj1iL3ksdFswXSo9Yi95LGVbMV0qPV8veCx0WzFdKj1fL3gsdS5iaW5kKCksYy5iaW5kKCksdS5hdHRyaWJ1dGVzLmRhdGFDb29yZC5wb2ludGVyKCk7dmFyIFM9dS51bmlmb3JtcztTLmRhdGFTaGlmdD10LFMuZGF0YVNjYWxlPWU7dmFyIEU9cy50aWNrTWFya0xlbmd0aCxMPXMudGlja01hcmtXaWR0aCxDPXMudGlja01hcmtDb2xvcixQPTYqaFswXS5sZW5ndGgsTz1NYXRoLm1pbihpLmdlKGhbMF0sKGRbMF0tcFswXSkvKHBbMl0tcFswXSksbCksaFswXS5sZW5ndGgpLHo9TWF0aC5taW4oaS5ndChoWzBdLChkWzJdLXBbMF0pLyhwWzJdLXBbMF0pLGwpLGhbMF0ubGVuZ3RoKSxJPTArNipPLEQ9NipNYXRoLm1heCgwLHotTyksUj1NYXRoLm1pbihpLmdlKGhbMV0sKGRbMV0tcFsxXSkvKHBbM10tcFsxXSksbCksaFsxXS5sZW5ndGgpLEY9TWF0aC5taW4oaS5ndChoWzFdLChkWzNdLXBbMV0pLyhwWzNdLXBbMV0pLGwpLGhbMV0ubGVuZ3RoKSxCPVArNipSLE49NipNYXRoLm1heCgwLEYtUik7YVswXT0yKihnWzBdLUVbMV0pL3ktMSxhWzFdPShnWzNdK2dbMV0pL3gtMSxvWzBdPUVbMV0qdi95LG9bMV09TFsxXSp2L3gsTiYmKFMuY29sb3I9Q1sxXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9bixTLnNjcmVlbk9mZnNldD1hLGYuZHJhd0FycmF5cyhmLlRSSUFOR0xFUyxCLE4pKSxhWzBdPShnWzJdK2dbMF0pL3ktMSxhWzFdPTIqKGdbMV0tRVswXSkveC0xLG9bMF09TFswXSp2L3ksb1sxXT1FWzBdKnYveCxEJiYoUy5jb2xvcj1DWzBdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1yLFMuc2NyZWVuT2Zmc2V0PWEsZi5kcmF3QXJyYXlzKGYuVFJJQU5HTEVTLEksRCkpLGFbMF09MiooZ1syXStFWzNdKS95LTEsYVsxXT0oZ1szXStnWzFdKS94LTEsb1swXT1FWzNdKnYveSxvWzFdPUxbM10qdi94LE4mJihTLmNvbG9yPUNbM10sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPW4sUy5zY3JlZW5PZmZzZXQ9YSxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsQixOKSksYVswXT0oZ1syXStnWzBdKS95LTEsYVsxXT0yKihnWzNdK0VbMl0pL3gtMSxvWzBdPUxbMl0qdi95LG9bMV09RVsyXSp2L3gsRCYmKFMuY29sb3I9Q1syXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9cixTLnNjcmVlbk9mZnNldD1hLGYuZHJhd0FycmF5cyhmLlRSSUFOR0xFUyxJLEQpKX19KCksZC51cGRhdGU9KGY9WzEsMSwtMSwtMSwxLC0xXSxwPVsxLC0xLDEsMSwtMSwtMV0sZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQudGlja3Mscj10LmJvdW5kcyxuPW5ldyBGbG9hdDMyQXJyYXkoMTgqKGVbMF0ubGVuZ3RoK2VbMV0ubGVuZ3RoKSksYT0odGhpcy5wbG90Lnplcm9MaW5lRW5hYmxlLDApLGk9W1tdLFtdXSxvPTA7bzwyOysrbylmb3IodmFyIHM9aVtvXSxsPWVbb10sYz1yW29dLHU9cltvKzJdLGg9MDtoPGwubGVuZ3RoOysraCl7dmFyIGQ9KGxbaF0ueC1jKS8odS1jKTtzLnB1c2goZCk7Zm9yKHZhciBnPTA7Zzw2OysrZyluW2ErK109ZCxuW2ErK109ZltnXSxuW2ErK109cFtnXX10aGlzLnRpY2tzPWksdGhpcy52Ym8udXBkYXRlKG4pfSksZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRpY2tTaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI4NywiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjI4OSwiZ2wtYnVmZmVyIjoyNDQsImdsLXNoYWRlciI6MzA0fV0sMjg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlLFstMSwtMSwtMSwxLDEsLTEsMSwxXSkscz1hKGUsaS5saW5lVmVydCxpLmxpbmVGcmFnKTtyZXR1cm4gbmV3IG8odCxyLHMpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxhPXQoImdsLXNoYWRlciIpLGk9dCgiLi9zaGFkZXJzIik7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yfXZhciBzLGwsYz1vLnByb3RvdHlwZTtjLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sYy5kcmF3TGluZT0ocz1bMCwwXSxsPVswLDBdLGZ1bmN0aW9uKHQsZSxyLG4sYSxpKXt2YXIgbz10aGlzLnBsb3QsYz10aGlzLnNoYWRlcix1PW8uZ2w7c1swXT10LHNbMV09ZSxsWzBdPXIsbFsxXT1uLGMudW5pZm9ybXMuc3RhcnQ9cyxjLnVuaWZvcm1zLmVuZD1sLGMudW5pZm9ybXMud2lkdGg9YSpvLnBpeGVsUmF0aW8sYy51bmlmb3Jtcy5jb2xvcj1pLHUuZHJhd0FycmF5cyh1LlRSSUFOR0xFX1NUUklQLDAsNCl9KSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI4NywiZ2wtYnVmZmVyIjoyNDQsImdsLXNoYWRlciI6MzA0fV0sMjg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxhPW4oWyJwcmVjaXNpb24gbG93cCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG51bmlmb3JtIHZlYzQgY29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IueHl6ICogY29sb3IudywgY29sb3Iudyk7XG59XG4iXSk7ZS5leHBvcnRzPXtsaW5lVmVydDpuKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBjb29yZDtcblxudW5pZm9ybSB2ZWM0IHNjcmVlbkJveDtcbnVuaWZvcm0gdmVjMiBzdGFydCwgZW5kO1xudW5pZm9ybSBmbG9hdCB3aWR0aDtcblxudmVjMiBwZXJwKHZlYzIgdikge1xuICByZXR1cm4gdmVjMih2LnksIC12LngpO1xufVxuXG52ZWMyIHNjcmVlbih2ZWMyIHYpIHtcbiAgcmV0dXJuIDIuMCAqICh2IC0gc2NyZWVuQm94Lnh5KSAvIChzY3JlZW5Cb3guencgLSBzY3JlZW5Cb3gueHkpIC0gMS4wO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgZGVsdGEgPSBub3JtYWxpemUocGVycChzdGFydCAtIGVuZCkpO1xuICB2ZWMyIG9mZnNldCA9IG1peChzdGFydCwgZW5kLCAwLjUgKiAoY29vcmQueSsxLjApKTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbihvZmZzZXQgKyAwLjUgKiB3aWR0aCAqIGRlbHRhICogY29vcmQueCksIDAsIDEpO1xufVxuIl0pLGxpbmVGcmFnOmEsdGV4dFZlcnQ6bihbIiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMyB0ZXh0Q29vcmRpbmF0ZTtcblxudW5pZm9ybSB2ZWMyIGRhdGFTY2FsZSwgZGF0YVNoaWZ0LCBkYXRhQXhpcywgc2NyZWVuT2Zmc2V0LCB0ZXh0U2NhbGU7XG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IGRhdGFPZmZzZXQgID0gdGV4dENvb3JkaW5hdGUuejtcbiAgdmVjMiBnbHlwaE9mZnNldCAgPSB0ZXh0Q29vcmRpbmF0ZS54eTtcbiAgbWF0MiBnbHlwaE1hdHJpeCA9IG1hdDIoY29zKGFuZ2xlKSwgc2luKGFuZ2xlKSwgLXNpbihhbmdsZSksIGNvcyhhbmdsZSkpO1xuICB2ZWMyIHNjcmVlbkNvb3JkaW5hdGUgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhT2Zmc2V0ICsgZGF0YVNoaWZ0KSArXG4gICAgZ2x5cGhNYXRyaXggKiBnbHlwaE9mZnNldCAqIHRleHRTY2FsZSArIHNjcmVlbk9mZnNldDtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbkNvb3JkaW5hdGUsIDAsIDEpO1xufVxuIl0pLHRleHRGcmFnOmEsZ3JpZFZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xuXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlO1xudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGg7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb3MgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhQ29vcmQueCArIGRhdGFTaGlmdCk7XG4gIHBvcyArPSAxMC4wICogZGF0YUNvb3JkLnkgKiB2ZWMyKGRhdGFBeGlzLnksIC1kYXRhQXhpcy54KSArIGRhdGFDb29yZC56ICogbGluZVdpZHRoO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zLCAwLCAxKTtcbn1cbiJdKSxncmlkRnJhZzphLGJveFZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgY29vcmQ7XG5cbnVuaWZvcm0gdmVjNCBzY3JlZW5Cb3g7XG51bmlmb3JtIHZlYzIgbG8sIGhpO1xuXG52ZWMyIHNjcmVlbih2ZWMyIHYpIHtcbiAgcmV0dXJuIDIuMCAqICh2IC0gc2NyZWVuQm94Lnh5KSAvIChzY3JlZW5Cb3guencgLSBzY3JlZW5Cb3gueHkpIC0gMS4wO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW4obWl4KGxvLCBoaSwgY29vcmQpKSwgMCwgMSk7XG59XG4iXSksdGlja1ZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xuXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlLCBzY3JlZW5PZmZzZXQsIHRpY2tTY2FsZTtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHBvcyA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFDb29yZC54ICsgZGF0YVNoaWZ0KTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyArIHRpY2tTY2FsZSpkYXRhQ29vcmQueXogKyBzY3JlZW5PZmZzZXQsIDAsIDEpO1xufVxuIl0pfX0se2dsc2xpZnk6NDExfV0sMjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlKSxpPWEoZSxzLnRleHRWZXJ0LHMudGV4dEZyYWcpO3JldHVybiBuZXcgbCh0LHIsaSl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtc2hhZGVyIiksaT10KCJ0ZXh0LWNhY2hlIiksbz10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLHM9dCgiLi9zaGFkZXJzIik7ZnVuY3Rpb24gbCh0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja09mZnNldD1bW10sW11dLHRoaXMudGlja1g9W1tdLFtdXSx0aGlzLmxhYmVsT2Zmc2V0PVswLDBdLHRoaXMubGFiZWxDb3VudD1bMCwwXX12YXIgYyx1LGgsZixwLGQsZz1sLnByb3RvdHlwZTtnLmRyYXdUaWNrcz0oYz1bMCwwXSx1PVswLDBdLGg9WzAsMF0sZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wbG90LHI9dGhpcy5zaGFkZXIsbj10aGlzLnRpY2tYW3RdLGE9dGhpcy50aWNrT2Zmc2V0W3RdLGk9ZS5nbCxzPWUudmlld0JveCxsPWUuZGF0YUJveCxmPWUuc2NyZWVuQm94LHA9ZS5waXhlbFJhdGlvLGQ9ZS50aWNrRW5hYmxlLGc9ZS50aWNrUGFkLHY9ZS50aWNrQ29sb3IsbT1lLnRpY2tBbmdsZSx5PWUubGFiZWxFbmFibGUseD1lLmxhYmVsUGFkLGI9ZS5sYWJlbENvbG9yLF89ZS5sYWJlbEFuZ2xlLHc9dGhpcy5sYWJlbE9mZnNldFt0XSxrPXRoaXMubGFiZWxDb3VudFt0XSxUPW8ubHQobixsW3RdKSxNPW8ubGUobixsW3QrMl0pO2NbMF09Y1sxXT0wLGNbdF09MSx1W3RdPShzWzIrdF0rc1t0XSkvKGZbMit0XS1mW3RdKS0xO3ZhciBBPTIvZlsyKygxXnQpXS1mWzFedF07dVsxXnRdPUEqc1sxXnRdLTEsZFt0XSYmKHVbMV50XS09QSpwKmdbdF0sVDxNJiZhW01dPmFbVF0mJihyLnVuaWZvcm1zLmRhdGFBeGlzPWMsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPXZbdF0sci51bmlmb3Jtcy5hbmdsZT1tW3RdLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFUyxhW1RdLGFbTV0tYVtUXSkpKSx5W3RdJiZrJiYodVsxXnRdLT1BKnAqeFt0XSxyLnVuaWZvcm1zLmRhdGFBeGlzPWgsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPWJbdF0sci51bmlmb3Jtcy5hbmdsZT1fW3RdLGkuZHJhd0FycmF5cyhpLlRSSUFOR0xFUyx3LGspKSx1WzFedF09QSpzWzIrKDFedCldLTEsZFt0KzJdJiYodVsxXnRdKz1BKnAqZ1t0KzJdLFQ8TSYmYVtNXT5hW1RdJiYoci51bmlmb3Jtcy5kYXRhQXhpcz1jLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj12W3QrMl0sci51bmlmb3Jtcy5hbmdsZT1tW3QrMl0saS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLGFbVF0sYVtNXS1hW1RdKSkpLHlbdCsyXSYmayYmKHVbMV50XSs9QSpwKnhbdCsyXSxyLnVuaWZvcm1zLmRhdGFBeGlzPWgsci51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9dSxyLnVuaWZvcm1zLmNvbG9yPWJbdCsyXSxyLnVuaWZvcm1zLmFuZ2xlPV9bdCsyXSxpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsdyxrKSl9KSxnLmRyYXdUaXRsZT1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5wbG90LG49dGhpcy5zaGFkZXIsYT1yLmdsLGk9ci5zY3JlZW5Cb3gsbz1yLnRpdGxlQ2VudGVyLHM9ci50aXRsZUFuZ2xlLGw9ci50aXRsZUNvbG9yLGM9ci5waXhlbFJhdGlvO2lmKHRoaXMudGl0bGVDb3VudCl7Zm9yKHZhciB1PTA7dTwyOysrdSllW3VdPTIqKG9bdV0qYy1pW3VdKS8oaVsyK3VdLWlbdV0pLTE7bi5iaW5kKCksbi51bmlmb3Jtcy5kYXRhQXhpcz10LG4udW5pZm9ybXMuc2NyZWVuT2Zmc2V0PWUsbi51bmlmb3Jtcy5hbmdsZT1zLG4udW5pZm9ybXMuY29sb3I9bCxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsdGhpcy50aXRsZU9mZnNldCx0aGlzLnRpdGxlQ291bnQpfX19KCksZy5iaW5kPShmPVswLDBdLHA9WzAsMF0sZD1bMCwwXSxmdW5jdGlvbigpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2hhZGVyLHI9dC5fdGlja0JvdW5kcyxuPXQuZGF0YUJveCxhPXQuc2NyZWVuQm94LGk9dC52aWV3Qm94O2UuYmluZCgpO2Zvcih2YXIgbz0wO288MjsrK28pe3ZhciBzPXJbb10sbD1yW28rMl0tcyxjPS41KihuW28rMl0rbltvXSksdT1uW28rMl0tbltvXSxoPWlbb10sZz1pW28rMl0taCx2PWFbb10sbT1hW28rMl0tdjtwW29dPTIqbC91KmcvbSxmW29dPTIqKHMtYykvdSpnL219ZFsxXT0yKnQucGl4ZWxSYXRpby8oYVszXS1hWzFdKSxkWzBdPWRbMV0qKGFbM10tYVsxXSkvKGFbMl0tYVswXSksZS51bmlmb3Jtcy5kYXRhU2NhbGU9cCxlLnVuaWZvcm1zLmRhdGFTaGlmdD1mLGUudW5pZm9ybXMudGV4dFNjYWxlPWQsdGhpcy52Ym8uYmluZCgpLGUuYXR0cmlidXRlcy50ZXh0Q29vcmRpbmF0ZS5wb2ludGVyKCl9KSxnLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxvLHM9W10sbD10LnRpY2tzLGM9dC5ib3VuZHM7Zm9yKG89MDtvPDI7KytvKXt2YXIgdT1bTWF0aC5mbG9vcihzLmxlbmd0aC8zKV0saD1bLTEvMF0sZj1sW29dO2ZvcihlPTA7ZTxmLmxlbmd0aDsrK2Upe3ZhciBwPWZbZV0sZD1wLngsZz1wLnRleHQsdj1wLmZvbnR8fCJzYW5zLXNlcmlmIjthPXAuZm9udFNpemV8fDEyO2Zvcih2YXIgbT0xLyhjW28rMl0tY1tvXSkseT1jW29dLHg9Zy5zcGxpdCgiXG4iKSxiPTA7Yjx4Lmxlbmd0aDtiKyspZm9yKG49aSh2LHhbYl0pLmRhdGEscj0wO3I8bi5sZW5ndGg7cis9MilzLnB1c2gobltyXSphLC1uW3IrMV0qYS1iKmEqMS4yLChkLXkpKm0pO3UucHVzaChNYXRoLmZsb29yKHMubGVuZ3RoLzMpKSxoLnB1c2goZCl9dGhpcy50aWNrT2Zmc2V0W29dPXUsdGhpcy50aWNrWFtvXT1ofWZvcihvPTA7bzwyOysrbyl7Zm9yKHRoaXMubGFiZWxPZmZzZXRbb109TWF0aC5mbG9vcihzLmxlbmd0aC8zKSxuPWkodC5sYWJlbEZvbnRbb10sdC5sYWJlbHNbb10se3RleHRBbGlnbjoiY2VudGVyIn0pLmRhdGEsYT10LmxhYmVsU2l6ZVtvXSxlPTA7ZTxuLmxlbmd0aDtlKz0yKXMucHVzaChuW2VdKmEsLW5bZSsxXSphLDApO3RoaXMubGFiZWxDb3VudFtvXT1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLXRoaXMubGFiZWxPZmZzZXRbb119Zm9yKHRoaXMudGl0bGVPZmZzZXQ9TWF0aC5mbG9vcihzLmxlbmd0aC8zKSxuPWkodC50aXRsZUZvbnQsdC50aXRsZSkuZGF0YSxhPXQudGl0bGVTaXplLGU9MDtlPG4ubGVuZ3RoO2UrPTIpcy5wdXNoKG5bZV0qYSwtbltlKzFdKmEsMCk7dGhpcy50aXRsZUNvdW50PU1hdGguZmxvb3Iocy5sZW5ndGgvMyktdGhpcy50aXRsZU9mZnNldCx0aGlzLnZiby51cGRhdGUocyl9LGcuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6Mjg3LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6Mjg5LCJnbC1idWZmZXIiOjI0NCwiZ2wtc2hhZGVyIjozMDQsInRleHQtY2FjaGUiOjUzNX1dLDI4OTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsxMTNdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoxMTN9XSwyOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsW2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0pLGM9bmV3IGwoZSxyKTtyZXR1cm4gYy5ncmlkPWEoYyksYy50ZXh0PWkoYyksYy5saW5lPW8oYyksYy5ib3g9cyhjKSxjLnVwZGF0ZSh0KSxjfTt2YXIgbj10KCJnbC1zZWxlY3Qtc3RhdGljIiksYT10KCIuL2xpYi9ncmlkIiksaT10KCIuL2xpYi90ZXh0Iiksbz10KCIuL2xpYi9saW5lIikscz10KCIuL2xpYi9ib3giKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5nbD10LHRoaXMucGlja0J1ZmZlcj1lLHRoaXMuc2NyZWVuQm94PVswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSx0aGlzLnZpZXdCb3g9WzAsMCwwLDBdLHRoaXMuZGF0YUJveD1bLTEwLC0xMCwxMCwxMF0sdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVXaWR0aD1bMSwxXSx0aGlzLmdyaWRMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMudGlja01hcmtMZW5ndGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtXaWR0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGVDZW50ZXI9WzAsMF0sdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnplcm9MaW5lRW5hYmxlPVshMCwhMF0sdGhpcy56ZXJvTGluZVdpZHRoPVs0LDRdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ib3JkZXJMaW5lRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5ib3JkZXJMaW5lV2lkdGg9WzIsMiwyLDJdLHRoaXMuYm9yZGVyTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZD1udWxsLHRoaXMudGV4dD1udWxsLHRoaXMubGluZT1udWxsLHRoaXMuYm94PW51bGwsdGhpcy5vYmplY3RzPVtdLHRoaXMub3ZlcmxheXM9W10sdGhpcy5fdGlja0JvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMuc3RhdGljPSExLHRoaXMuZGlydHk9ITEsdGhpcy5waWNrRGlydHk9ITEsdGhpcy5waWNrRGVsYXk9MTIwLHRoaXMucGlja1JhZGl1cz0xMCx0aGlzLl9waWNrVGltZW91dD1udWxsLHRoaXMuX2RyYXdQaWNrPXRoaXMuZHJhd1BpY2suYmluZCh0aGlzKSx0aGlzLl9kZXB0aENvdW50ZXI9MH12YXIgYz1sLnByb3RvdHlwZTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT10LnNsaWNlKCkscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl09ZVtyXS5zbGljZSgpO3JldHVybiBlfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC54LWUueH1jLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT10aGlzLnBpY2tEaXJ0eT0hMH0sYy5zZXRPdmVybGF5RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSxjLm5leHREZXB0aFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcHRoQ291bnRlcisrLzY1NTM2fSxjLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsLGU9dGhpcy5zY3JlZW5Cb3gscj10aGlzLnZpZXdCb3gsbj10aGlzLmRhdGFCb3gsYT10aGlzLnBpeGVsUmF0aW8saT10aGlzLmdyaWQsbz10aGlzLmxpbmUscz10aGlzLnRleHQsbD10aGlzLm9iamVjdHM7aWYodGhpcy5fZGVwdGhDb3VudGVyPTAsdGhpcy5waWNrRGlydHkmJih0aGlzLl9waWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3BpY2tUaW1lb3V0KSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLl9waWNrVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX2RyYXdQaWNrLHRoaXMucGlja0RlbGF5KSksdGhpcy5kaXJ0eSl7aWYodGhpcy5kaXJ0eT0hMSx0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHQuZW5hYmxlKHQuU0NJU1NPUl9URVNUKSx0LmRpc2FibGUodC5ERVBUSF9URVNUKSx0LmRlcHRoRnVuYyh0LkxFU1MpLHQuZGVwdGhNYXNrKCExKSx0LmVuYWJsZSh0LkJMRU5EKSx0LmJsZW5kRXF1YXRpb24odC5GVU5DX0FERCx0LkZVTkNfQUREKSx0LmJsZW5kRnVuYyh0Lk9ORSx0Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHRoaXMuYm9yZGVyQ29sb3Ipe3Quc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSk7dmFyIGM9dGhpcy5ib3JkZXJDb2xvcjt0LmNsZWFyQ29sb3IoY1swXSpjWzNdLGNbMV0qY1szXSxjWzJdKmNbM10sY1szXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKX10LnNjaXNzb3IoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pLHQudmlld3BvcnQoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pO3ZhciB1PXRoaXMuYmFja2dyb3VuZENvbG9yO3QuY2xlYXJDb2xvcih1WzBdKnVbM10sdVsxXSp1WzNdLHVbMl0qdVszXSx1WzNdKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVCksaS5kcmF3KCk7dmFyIGg9dGhpcy56ZXJvTGluZUVuYWJsZSxmPXRoaXMuemVyb0xpbmVDb2xvcixwPXRoaXMuemVyb0xpbmVXaWR0aDtpZihoWzBdfHxoWzFdKXtvLmJpbmQoKTtmb3IodmFyIGQ9MDtkPDI7KytkKWlmKGhbZF0mJm5bZF08PTAmJm5bZCsyXT49MCl7dmFyIGc9ZVtkXS1uW2RdKihlW2QrMl0tZVtkXSkvKG5bZCsyXS1uW2RdKTswPT09ZD9vLmRyYXdMaW5lKGcsZVsxXSxnLGVbM10scFtkXSxmW2RdKTpvLmRyYXdMaW5lKGVbMF0sZyxlWzJdLGcscFtkXSxmW2RdKX19Zm9yKGQ9MDtkPGwubGVuZ3RoOysrZClsW2RdLmRyYXcoKTt0LnZpZXdwb3J0KGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKSx0LnNjaXNzb3IoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pLHRoaXMuZ3JpZC5kcmF3VGlja01hcmtzKCksby5iaW5kKCk7dmFyIHY9dGhpcy5ib3JkZXJMaW5lRW5hYmxlLG09dGhpcy5ib3JkZXJMaW5lV2lkdGgseT10aGlzLmJvcmRlckxpbmVDb2xvcjtmb3IodlsxXSYmby5kcmF3TGluZShyWzBdLHJbMV0tLjUqbVsxXSphLHJbMF0sclszXSsuNSptWzNdKmEsbVsxXSx5WzFdKSx2WzBdJiZvLmRyYXdMaW5lKHJbMF0tLjUqbVswXSphLHJbMV0sclsyXSsuNSptWzJdKmEsclsxXSxtWzBdLHlbMF0pLHZbM10mJm8uZHJhd0xpbmUoclsyXSxyWzFdLS41Km1bMV0qYSxyWzJdLHJbM10rLjUqbVszXSphLG1bM10seVszXSksdlsyXSYmby5kcmF3TGluZShyWzBdLS41Km1bMF0qYSxyWzNdLHJbMl0rLjUqbVsyXSphLHJbM10sbVsyXSx5WzJdKSxzLmJpbmQoKSxkPTA7ZDwyOysrZClzLmRyYXdUaWNrcyhkKTt0aGlzLnRpdGxlRW5hYmxlJiZzLmRyYXdUaXRsZSgpO3ZhciB4PXRoaXMub3ZlcmxheXM7Zm9yKGQ9MDtkPHgubGVuZ3RoOysrZCl4W2RdLmRyYXcoKTt0LmRpc2FibGUodC5TQ0lTU09SX1RFU1QpLHQuZGlzYWJsZSh0LkJMRU5EKSx0LmRlcHRoTWFzayghMCl9fSxjLmRyYXdQaWNrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhdGljKXt2YXIgdD10aGlzLnBpY2tCdWZmZXI7dGhpcy5nbCx0aGlzLl9waWNrVGltZW91dD1udWxsLHQuYmVnaW4oKTtmb3IodmFyIGU9MSxyPXRoaXMub2JqZWN0cyxuPTA7bjxyLmxlbmd0aDsrK24pZT1yW25dLmRyYXdQaWNrKGUpO3QuZW5kKCl9fSxjLnBpY2s9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5zdGF0aWMpe3ZhciByPXRoaXMucGl4ZWxSYXRpbyxuPXRoaXMucGlja1BpeGVsUmF0aW8sYT10aGlzLnZpZXdCb3gsaT0wfE1hdGgucm91bmQoKHQtYVswXS9yKSpuKSxvPTB8TWF0aC5yb3VuZCgoZS1hWzFdL3IpKm4pLHM9dGhpcy5waWNrQnVmZmVyLnF1ZXJ5KGksbyx0aGlzLnBpY2tSYWRpdXMpO2lmKCFzKXJldHVybiBudWxsO2Zvcih2YXIgbD1zLmlkKyhzLnZhbHVlWzBdPDw4KSsocy52YWx1ZVsxXTw8MTYpKyhzLnZhbHVlWzJdPDwyNCksYz10aGlzLm9iamVjdHMsdT0wO3U8Yy5sZW5ndGg7Kyt1KXt2YXIgaD1jW3VdLnBpY2soaSxvLGwpO2lmKGgpcmV0dXJuIGh9cmV0dXJuIG51bGx9fSxjLnNldFNjcmVlbkJveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcmVlbkJveCxyPXRoaXMucGl4ZWxSYXRpbztlWzBdPTB8TWF0aC5yb3VuZCh0WzBdKnIpLGVbMV09MHxNYXRoLnJvdW5kKHRbMV0qciksZVsyXT0wfE1hdGgucm91bmQodFsyXSpyKSxlWzNdPTB8TWF0aC5yb3VuZCh0WzNdKnIpLHRoaXMuc2V0RGlydHkoKX0sYy5zZXREYXRhQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YUJveDsoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdfHxlWzJdIT09dFsyXXx8ZVszXSE9PXRbM10pJiYoZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLHRoaXMuc2V0RGlydHkoKSl9LGMuc2V0Vmlld0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLnZpZXdCb3g7clswXT0wfE1hdGgucm91bmQodFswXSplKSxyWzFdPTB8TWF0aC5yb3VuZCh0WzFdKmUpLHJbMl09MHxNYXRoLnJvdW5kKHRbMl0qZSksclszXT0wfE1hdGgucm91bmQodFszXSplKTt2YXIgbj10aGlzLnBpY2tQaXhlbFJhdGlvO3RoaXMucGlja0J1ZmZlci5zaGFwZT1bMHxNYXRoLnJvdW5kKCh0WzJdLXRbMF0pKm4pLDB8TWF0aC5yb3VuZCgodFszXS10WzFdKSpuKV0sdGhpcy5zZXREaXJ0eSgpfSxjLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpb3x8MTt2YXIgcj10aGlzLnBpeGVsUmF0aW87dGhpcy5waWNrUGl4ZWxSYXRpbz1NYXRoLm1heChyLDEpLHRoaXMuc2V0U2NyZWVuQm94KHQuc2NyZWVuQm94fHxbMCwwLGUuZHJhd2luZ0J1ZmZlcldpZHRoL3IsZS5kcmF3aW5nQnVmZmVySGVpZ2h0L3JdKTt0aGlzLnNjcmVlbkJveDt0aGlzLnNldFZpZXdCb3godC52aWV3Qm94fHxbLjEyNSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjEyNSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3JdKTt2YXIgbj10aGlzLnZpZXdCb3gsYT0oblsyXS1uWzBdKS8oblszXS1uWzFdKTt0aGlzLnNldERhdGFCb3godC5kYXRhQm94fHxbLTEwLC0xMC9hLDEwLDEwL2FdKSx0aGlzLmJvcmRlckNvbG9yPSExIT09dC5ib3JkZXJDb2xvciYmKHQuYm9yZGVyQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmJhY2tncm91bmRDb2xvcj0odC5iYWNrZ3JvdW5kQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lRW5hYmxlPSh0LmdyaWRMaW5lRW5hYmxlfHxbITAsITBdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVXaWR0aD0odC5ncmlkTGluZVdpZHRofHxbMSwxXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lQ29sb3I9dSh0LmdyaWRMaW5lQ29sb3J8fFtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSksdGhpcy56ZXJvTGluZUVuYWJsZT0odC56ZXJvTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLnplcm9MaW5lV2lkdGg9KHQuemVyb0xpbmVXaWR0aHx8WzQsNF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZUNvbG9yPXUodC56ZXJvTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja01hcmtMZW5ndGg9KHQudGlja01hcmtMZW5ndGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrV2lkdGg9KHQudGlja01hcmtXaWR0aHx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja01hcmtDb2xvcj11KHQudGlja01hcmtDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGl0bGVDZW50ZXI9KHQudGl0bGVDZW50ZXJ8fFsuNSooblswXStuWzJdKS9yLChuWzNdKzEyMCkvcl0pLnNsaWNlKCksdGhpcy50aXRsZUVuYWJsZT0hKCJ0aXRsZUVuYWJsZSJpbiB0JiYhdC50aXRsZUVuYWJsZSksdGhpcy50aXRsZUFuZ2xlPXQudGl0bGVBbmdsZXx8MCx0aGlzLnRpdGxlQ29sb3I9KHQudGl0bGVDb2xvcnx8WzAsMCwwLDFdKS5zbGljZSgpLHRoaXMubGFiZWxQYWQ9KHQubGFiZWxQYWR8fFsxNSwxNSwxNSwxNV0pLnNsaWNlKCksdGhpcy5sYWJlbEFuZ2xlPSh0LmxhYmVsQW5nbGV8fFswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSkuc2xpY2UoKSx0aGlzLmxhYmVsRW5hYmxlPSh0LmxhYmVsRW5hYmxlfHxbITAsITAsITAsITBdKS5zbGljZSgpLHRoaXMubGFiZWxDb2xvcj11KHQubGFiZWxDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja1BhZD0odC50aWNrUGFkfHxbMTUsMTUsMTUsMTVdKS5zbGljZSgpLHRoaXMudGlja0FuZ2xlPSh0LnRpY2tBbmdsZXx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja0VuYWJsZT0odC50aWNrRW5hYmxlfHxbITAsITAsITAsITBdKS5zbGljZSgpLHRoaXMudGlja0NvbG9yPXUodC50aWNrQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLmJvcmRlckxpbmVFbmFibGU9KHQuYm9yZGVyTGluZUVuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLmJvcmRlckxpbmVXaWR0aD0odC5ib3JkZXJMaW5lV2lkdGh8fFsyLDIsMiwyXSkuc2xpY2UoKSx0aGlzLmJvcmRlckxpbmVDb2xvcj11KHQuYm9yZGVyTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSk7dmFyIGk9dC50aWNrc3x8W1tdLFtdXSxvPXRoaXMuX3RpY2tCb3VuZHM7b1swXT1vWzFdPTEvMCxvWzJdPW9bM109LTEvMDtmb3IodmFyIHM9MDtzPDI7KytzKXt2YXIgbD1pW3NdLnNsaWNlKDApOzAhPT1sLmxlbmd0aCYmKGwuc29ydChoKSxvW3NdPU1hdGgubWluKG9bc10sbFswXS54KSxvW3MrMl09TWF0aC5tYXgob1tzKzJdLGxbbC5sZW5ndGgtMV0ueCkpfXRoaXMuZ3JpZC51cGRhdGUoe2JvdW5kczpvLHRpY2tzOml9KSx0aGlzLnRleHQudXBkYXRlKHtib3VuZHM6byx0aWNrczppLGxhYmVsczp0LmxhYmVsc3x8WyJ4IiwieSJdLGxhYmVsU2l6ZTp0LmxhYmVsU2l6ZXx8WzEyLDEyXSxsYWJlbEZvbnQ6dC5sYWJlbEZvbnR8fFsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiXSx0aXRsZTp0LnRpdGxlfHwiIix0aXRsZVNpemU6dC50aXRsZVNpemV8fDE4LHRpdGxlRm9udDp0LnRpdGxlRm9udHx8InNhbnMtc2VyaWYifSksdGhpcy5zdGF0aWM9ISF0LnN0YXRpYyx0aGlzLnNldERpcnR5KCl9LGMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuYm94LmRpc3Bvc2UoKSx0aGlzLmdyaWQuZGlzcG9zZSgpLHRoaXMudGV4dC5kaXNwb3NlKCksdGhpcy5saW5lLmRpc3Bvc2UoKTtmb3IodmFyIHQ9dGhpcy5vYmplY3RzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub2JqZWN0c1t0XS5kaXNwb3NlKCk7dGhpcy5vYmplY3RzLmxlbmd0aD0wO2Zvcih0PXRoaXMub3ZlcmxheXMubGVuZ3RoLTE7dD49MDstLXQpdGhpcy5vdmVybGF5c1t0XS5kaXNwb3NlKCk7dGhpcy5vdmVybGF5cy5sZW5ndGg9MCx0aGlzLmdsPW51bGx9LGMuYWRkT2JqZWN0PWZ1bmN0aW9uKHQpe3RoaXMub2JqZWN0cy5pbmRleE9mKHQpPDAmJih0aGlzLm9iamVjdHMucHVzaCh0KSx0aGlzLnNldERpcnR5KCkpfSxjLnJlbW92ZU9iamVjdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5vYmplY3RzLHI9MDtyPGUubGVuZ3RoOysrcilpZihlW3JdPT09dCl7ZS5zcGxpY2UociwxKSx0aGlzLnNldERpcnR5KCk7YnJlYWt9fSxjLmFkZE92ZXJsYXk9ZnVuY3Rpb24odCl7dGhpcy5vdmVybGF5cy5pbmRleE9mKHQpPDAmJih0aGlzLm92ZXJsYXlzLnB1c2godCksdGhpcy5zZXRPdmVybGF5RGlydHkoKSl9LGMucmVtb3ZlT3ZlcmxheT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5vdmVybGF5cyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09PXQpe2Uuc3BsaWNlKHIsMSksdGhpcy5zZXRPdmVybGF5RGlydHkoKTticmVha319fSx7Ii4vbGliL2JveCI6Mjg0LCIuL2xpYi9ncmlkIjoyODUsIi4vbGliL2xpbmUiOjI4NiwiLi9saWIvdGV4dCI6Mjg4LCJnbC1zZWxlY3Qtc3RhdGljIjozMDN9XSwyOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dD10fHxkb2N1bWVudC5ib2R5LGU9ZXx8e307dmFyIHI9Wy4wMSwxLzBdOyJkaXN0YW5jZUxpbWl0cyJpbiBlJiYoclswXT1lLmRpc3RhbmNlTGltaXRzWzBdLHJbMV09ZS5kaXN0YW5jZUxpbWl0c1sxXSk7Inpvb21NaW4iaW4gZSYmKHJbMF09ZS56b29tTWluKTsiem9vbU1heCJpbiBlJiYoclsxXT1lLnpvb21NYXgpO3ZhciBjPWEoe2NlbnRlcjplLmNlbnRlcnx8WzAsMCwwXSx1cDplLnVwfHxbMCwxLDBdLGV5ZTplLmV5ZXx8WzAsMCwxMF0sbW9kZTplLm1vZGV8fCJvcmJpdCIsZGlzdGFuY2VMaW1pdHM6cn0pLHU9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLGg9MCxmPXQuY2xpZW50V2lkdGgscD10LmNsaWVudEhlaWdodCxkPXtrZXlCaW5kaW5nTW9kZToicm90YXRlIixlbmFibGVXaGVlbDohMCx2aWV3OmMsZWxlbWVudDp0LGRlbGF5OmUuZGVsYXl8fDE2LHJvdGF0ZVNwZWVkOmUucm90YXRlU3BlZWR8fDEsem9vbVNwZWVkOmUuem9vbVNwZWVkfHwxLHRyYW5zbGF0ZVNwZWVkOmUudHJhbnNsYXRlU3BlZWR8fDEsZmxpcFg6ISFlLmZsaXBYLGZsaXBZOiEhZS5mbGlwWSxtb2RlczpjLm1vZGVzLF9vcnRobzplLl9vcnRob3x8ZS5wcm9qZWN0aW9uJiYib3J0aG9ncmFwaGljIj09PWUucHJvamVjdGlvbi50eXBlfHwhMSx0aWNrOmZ1bmN0aW9uKCl7dmFyIGU9bigpLHI9dGhpcy5kZWxheSxhPWUtMipyO2MuaWRsZShlLXIpLGMucmVjYWxjTWF0cml4KGEpLGMuZmx1c2goZS0oMTAwKzIqcikpO2Zvcih2YXIgaT0hMCxvPWMuY29tcHV0ZWRNYXRyaXgscz0wO3M8MTY7KytzKWk9aSYmdVtzXT09PW9bc10sdVtzXT1vW3NdO3ZhciBsPXQuY2xpZW50V2lkdGg9PT1mJiZ0LmNsaWVudEhlaWdodD09PXA7cmV0dXJuIGY9dC5jbGllbnRXaWR0aCxwPXQuY2xpZW50SGVpZ2h0LGk/IWw6KGg9TWF0aC5leHAoYy5jb21wdXRlZFJhZGl1c1swXSksITApfSxsb29rQXQ6ZnVuY3Rpb24odCxlLHIpe2MubG9va0F0KGMubGFzdFQoKSx0LGUscil9LHJvdGF0ZTpmdW5jdGlvbih0LGUscil7Yy5yb3RhdGUoYy5sYXN0VCgpLHQsZSxyKX0scGFuOmZ1bmN0aW9uKHQsZSxyKXtjLnBhbihjLmxhc3RUKCksdCxlLHIpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlLHIpe2MudHJhbnNsYXRlKGMubGFzdFQoKSx0LGUscil9fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZCx7bWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZE1hdHJpeH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldE1hdHJpeChjLmxhc3RUKCksdCksYy5jb21wdXRlZE1hdHJpeH0sZW51bWVyYWJsZTohMH0sbW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZ2V0TW9kZSgpfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9Yy5jb21wdXRlZFVwLnNsaWNlKCkscj1jLmNvbXB1dGVkRXllLnNsaWNlKCksYT1jLmNvbXB1dGVkQ2VudGVyLnNsaWNlKCk7aWYoYy5zZXRNb2RlKHQpLCJ0dXJudGFibGUiPT09dCl7dmFyIGk9bigpO2MuX2FjdGl2ZS5sb29rQXQoaSxyLGEsZSksYy5fYWN0aXZlLmxvb2tBdChpKzUwMCxyLGEsWzAsMCwxXSksYy5fYWN0aXZlLmZsdXNoKGkpfXJldHVybiBjLmdldE1vZGUoKX0sZW51bWVyYWJsZTohMH0sY2VudGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZENlbnRlcn0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksbnVsbCx0KSxjLmNvbXB1dGVkQ2VudGVyfSxlbnVtZXJhYmxlOiEwfSxleWU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkRXllfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMubG9va0F0KGMubGFzdFQoKSx0KSxjLmNvbXB1dGVkRXllfSxlbnVtZXJhYmxlOiEwfSx1cDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRVcH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksbnVsbCxudWxsLHQpLGMuY29tcHV0ZWRVcH0sZW51bWVyYWJsZTohMH0sZGlzdGFuY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiBofSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2V0RGlzdGFuY2UoYy5sYXN0VCgpLHQpLHR9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlTGltaXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXREaXN0YW5jZUxpbWl0cyhyKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldERpc3RhbmNlTGltaXRzKHQpLHR9LGVudW1lcmFibGU6ITB9fSksdC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKSwhMX0pLGQuX2xhc3RYPS0xLGQuX2xhc3RZPS0xLGQuX2xhc3RNb2RzPXtzaGlmdDohMSxjb250cm9sOiExLGFsdDohMSxtZXRhOiExfSxkLmVuYWJsZU1vdXNlTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIsYSxpKXt2YXIgbz1kLmtleUJpbmRpbmdNb2RlO2lmKCExIT09byl7dmFyIHM9InJvdGF0ZSI9PT1vLGw9InBhbiI9PT1vLHU9Inpvb20iPT09byxmPSEhaS5jb250cm9sLHA9ISFpLmFsdCxnPSEhaS5zaGlmdCx2PSEhKDEmZSksbT0hISgyJmUpLHk9ISEoNCZlKSx4PTEvdC5jbGllbnRIZWlnaHQsYj14KihyLWQuX2xhc3RYKSxfPXgqKGEtZC5fbGFzdFkpLHc9ZC5mbGlwWD8xOi0xLGs9ZC5mbGlwWT8xOi0xLFQ9TWF0aC5QSSpkLnJvdGF0ZVNwZWVkLE09bigpO2lmKC0xIT09ZC5fbGFzdFgmJi0xIT09ZC5fbGFzdFkmJigocyYmdiYmIWYmJiFwJiYhZ3x8diYmIWYmJiFwJiZnKSYmYy5yb3RhdGUoTSx3KlQqYiwtaypUKl8sMCksKGwmJnYmJiFmJiYhcCYmIWd8fG18fHYmJmYmJiFwJiYhZykmJmMucGFuKE0sLWQudHJhbnNsYXRlU3BlZWQqYipoLGQudHJhbnNsYXRlU3BlZWQqXypoLDApLHUmJnYmJiFmJiYhcCYmIWd8fHl8fHYmJiFmJiZwJiYhZykpe3ZhciBBPS1kLnpvb21TcGVlZCpfL3dpbmRvdy5pbm5lckhlaWdodCooTS1jLmxhc3RUKCkpKjEwMDtjLnBhbihNLDAsMCxoKihNYXRoLmV4cChBKS0xKSl9cmV0dXJuIGQuX2xhc3RYPXIsZC5fbGFzdFk9YSxkLl9sYXN0TW9kcz1pLCEwfX1kLm1vdXNlTGlzdGVuZXI9aSh0LGUpLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsZnVuY3Rpb24ocil7dmFyIG49cyhyLmNoYW5nZWRUb3VjaGVzWzBdLHQpO2UoMCxuWzBdLG5bMV0sZC5fbGFzdE1vZHMpLGUoMSxuWzBdLG5bMV0sZC5fbGFzdE1vZHMpLHIucHJldmVudERlZmF1bHQoKX0sISFsJiZ7cGFzc2l2ZTohMX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixmdW5jdGlvbihyKXt2YXIgbj1zKHIuY2hhbmdlZFRvdWNoZXNbMF0sdCk7ZSgxLG5bMF0sblsxXSxkLl9sYXN0TW9kcyksci5wcmV2ZW50RGVmYXVsdCgpfSwhIWwmJntwYXNzaXZlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsZnVuY3Rpb24odCl7ZSgwLGQuX2xhc3RYLGQuX2xhc3RZLGQuX2xhc3RNb2RzKSx0LnByZXZlbnREZWZhdWx0KCl9LCEhbCYme3Bhc3NpdmU6ITF9KSxkLndoZWVsTGlzdGVuZXI9byh0LGZ1bmN0aW9uKHQsZSl7aWYoITEhPT1kLmtleUJpbmRpbmdNb2RlJiZkLmVuYWJsZVdoZWVsKXt2YXIgcj1kLmZsaXBYPzE6LTEsYT1kLmZsaXBZPzE6LTEsaT1uKCk7aWYoTWF0aC5hYnModCk+TWF0aC5hYnMoZSkpYy5yb3RhdGUoaSwwLDAsLXQqcipNYXRoLlBJKmQucm90YXRlU3BlZWQvd2luZG93LmlubmVyV2lkdGgpO2Vsc2UgaWYoIWQuX29ydGhvKXt2YXIgbz0tZC56b29tU3BlZWQqYSplL3dpbmRvdy5pbm5lckhlaWdodCooaS1jLmxhc3RUKCkpLzIwO2MucGFuKGksMCwwLGgqKE1hdGguZXhwKG8pLTEpKX19fSwhMCl9LGQuZW5hYmxlTW91c2VMaXN0ZW5lcnMoKSxkfTt2YXIgbj10KCJyaWdodC1ub3ciKSxhPXQoIjNkLXZpZXciKSxpPXQoIm1vdXNlLWNoYW5nZSIpLG89dCgibW91c2Utd2hlZWwiKSxzPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLGw9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIil9LHsiM2QtdmlldyI6NTQsImhhcy1wYXNzaXZlLWV2ZW50cyI6NDEzLCJtb3VzZS1jaGFuZ2UiOjQzNywibW91c2UtZXZlbnQtb2Zmc2V0Ijo0MzgsIm1vdXNlLXdoZWVsIjo0NDAsInJpZ2h0LW5vdyI6NTAzfV0sMjkyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGE9dCgiZ2wtc2hhZGVyIiksaT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG52YXJ5aW5nIHZlYzIgdXY7XG52b2lkIG1haW4oKSB7XG4gIHV2ID0gcG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMCwgMSk7XG59Il0pLG89bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgYWNjdW1CdWZmZXI7XG52YXJ5aW5nIHZlYzIgdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBhY2N1bSA9IHRleHR1cmUyRChhY2N1bUJ1ZmZlciwgMC41ICogKHV2ICsgMS4wKSk7XG4gIGdsX0ZyYWdDb2xvciA9IG1pbih2ZWM0KDEsMSwxLDEpLCBhY2N1bSk7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0LGksbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzIifV0pfX0seyJnbC1zaGFkZXIiOjMwNCxnbHNsaWZ5OjQxMX1dLDI5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhbWVyYS5qcyIpLGE9dCgiZ2wtYXhlczNkIiksaT10KCJnbC1heGVzM2QvcHJvcGVydGllcyIpLG89dCgiZ2wtc3Bpa2VzM2QiKSxzPXQoImdsLXNlbGVjdC1zdGF0aWMiKSxsPXQoImdsLWZibyIpLGM9dCgiYS1iaWctdHJpYW5nbGUiKSx1PXQoIm1vdXNlLWNoYW5nZSIpLGg9dCgiZ2wtbWF0NC9wZXJzcGVjdGl2ZSIpLGY9dCgiZ2wtbWF0NC9vcnRobyIpLHA9dCgiLi9saWIvc2hhZGVyIiksZD10KCJpcy1tb2JpbGUiKSh7dGFibGV0OiEwfSk7ZnVuY3Rpb24gZygpe3RoaXMubW91c2U9Wy0xLC0xXSx0aGlzLnNjcmVlbj1udWxsLHRoaXMuZGlzdGFuY2U9MS8wLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmRhdGFDb29yZGluYXRlPW51bGwsdGhpcy5kYXRhUG9zaXRpb249bnVsbCx0aGlzLm9iamVjdD1udWxsLHRoaXMuZGF0YT1udWxsfWZ1bmN0aW9uIHYodCl7dmFyIGU9TWF0aC5yb3VuZChNYXRoLmxvZyhNYXRoLmFicyh0KSkvTWF0aC5sb2coMTApKTtpZihlPDApe3ZhciByPU1hdGgucm91bmQoTWF0aC5wb3coMTAsLWUpKTtyZXR1cm4gTWF0aC5jZWlsKHQqcikvcn1pZihlPjApe3I9TWF0aC5yb3VuZChNYXRoLnBvdygxMCxlKSk7cmV0dXJuIE1hdGguY2VpbCh0L3IpKnJ9cmV0dXJuIE1hdGguY2VpbCh0KX1mdW5jdGlvbiBtKHQpe3JldHVybiJib29sZWFuIiE9dHlwZW9mIHR8fHR9ZS5leHBvcnRzPXtjcmVhdGVTY2VuZTpmdW5jdGlvbih0KXsodD10fHx7fSkuY2FtZXJhPXQuY2FtZXJhfHx7fTt2YXIgZT10LmNhbnZhcztpZighZSlpZihlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHQuY29udGFpbmVyKXt2YXIgcj10LmNvbnRhaW5lcjtyLmFwcGVuZENoaWxkKGUpfWVsc2UgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTt2YXIgeT10LmdsO3l8fCh0LmdsT3B0aW9ucyYmKGQ9ISF0LmdsT3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpLHk9ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsO3RyeXsocj10LmdldENvbnRleHQoIndlYmdsIixlKSl8fChyPXQuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixlKSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9cmV0dXJuIHJ9KGUsdC5nbE9wdGlvbnN8fHtwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpkfSkpO2lmKCF5KXRocm93IG5ldyBFcnJvcigid2ViZ2wgbm90IHN1cHBvcnRlZCIpO3ZhciB4PXQuYm91bmRzfHxbWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSxiPW5ldyBnLF89bCh5LHkuZHJhd2luZ0J1ZmZlcldpZHRoLHkuZHJhd2luZ0J1ZmZlckhlaWdodCx7cHJlZmVyRmxvYXQ6IWR9KSx3PXAoeSksaz10LmNhbWVyYU9iamVjdCYmITA9PT10LmNhbWVyYU9iamVjdC5fb3J0aG98fHQuY2FtZXJhLnByb2plY3Rpb24mJiJvcnRob2dyYXBoaWMiPT09dC5jYW1lcmEucHJvamVjdGlvbi50eXBlfHwhMSxUPXtleWU6dC5jYW1lcmEuZXllfHxbMiwwLDBdLGNlbnRlcjp0LmNhbWVyYS5jZW50ZXJ8fFswLDAsMF0sdXA6dC5jYW1lcmEudXB8fFswLDEsMF0sem9vbU1pbjp0LmNhbWVyYS56b29tTWF4fHwuMSx6b29tTWF4OnQuY2FtZXJhLnpvb21NaW58fDEwMCxtb2RlOnQuY2FtZXJhLm1vZGV8fCJ0dXJudGFibGUiLF9vcnRobzprfSxNPXQuYXhlc3x8e30sQT1hKHksTSk7QS5lbmFibGU9IU0uZGlzYWJsZTt2YXIgUz10LnNwaWtlc3x8e30sRT1vKHksUyksTD1bXSxDPVtdLFA9W10sTz1bXSx6PSEwLEk9ITAsRD1uZXcgQXJyYXkoMTYpLFI9bmV3IEFycmF5KDE2KSxGPXt2aWV3Om51bGwscHJvamVjdGlvbjpELG1vZGVsOlIsX29ydGhvOiExfSxJPSEwLEI9W3kuZHJhd2luZ0J1ZmZlcldpZHRoLHkuZHJhd2luZ0J1ZmZlckhlaWdodF0sTj10LmNhbWVyYU9iamVjdHx8bihlLFQpLGo9e2dsOnksY29udGV4dExvc3Q6ITEscGl4ZWxSYXRpbzp0LnBpeGVsUmF0aW98fDEsY2FudmFzOmUsc2VsZWN0aW9uOmIsY2FtZXJhOk4sYXhlczpBLGF4ZXNQaXhlbHM6bnVsbCxzcGlrZXM6RSxib3VuZHM6eCxvYmplY3RzOkwsc2hhcGU6Qixhc3BlY3Q6dC5hc3BlY3RSYXRpb3x8WzEsMSwxXSxwaWNrUmFkaXVzOnQucGlja1JhZGl1c3x8MTAsek5lYXI6dC56TmVhcnx8LjAxLHpGYXI6dC56RmFyfHwxZTMsZm92eTp0LmZvdnl8fE1hdGguUEkvNCxjbGVhckNvbG9yOnQuY2xlYXJDb2xvcnx8WzAsMCwwLDBdLGF1dG9SZXNpemU6bSh0LmF1dG9SZXNpemUpLGF1dG9Cb3VuZHM6bSh0LmF1dG9Cb3VuZHMpLGF1dG9TY2FsZTohIXQuYXV0b1NjYWxlLGF1dG9DZW50ZXI6bSh0LmF1dG9DZW50ZXIpLGNsaXBUb0JvdW5kczptKHQuY2xpcFRvQm91bmRzKSxzbmFwVG9EYXRhOiEhdC5zbmFwVG9EYXRhLG9uc2VsZWN0OnQub25zZWxlY3R8fG51bGwsb25yZW5kZXI6dC5vbnJlbmRlcnx8bnVsbCxvbmNsaWNrOnQub25jbGlja3x8bnVsbCxjYW1lcmFQYXJhbXM6RixvbmNvbnRleHRsb3NzOm51bGwsbW91c2VMaXN0ZW5lcjpudWxsLF9zdG9wcGVkOiExLGdldEFzcGVjdHJhdGlvOmZ1bmN0aW9uKCl7cmV0dXJue3g6dGhpcy5hc3BlY3RbMF0seTp0aGlzLmFzcGVjdFsxXSx6OnRoaXMuYXNwZWN0WzJdfX0sc2V0QXNwZWN0cmF0aW86ZnVuY3Rpb24odCl7dGhpcy5hc3BlY3RbMF09dC54LHRoaXMuYXNwZWN0WzFdPXQueSx0aGlzLmFzcGVjdFsyXT10Lnp9LHNldEJvdW5kczpmdW5jdGlvbih0LGUpe3RoaXMuYm91bmRzWzBdW3RdPWUubWluLHRoaXMuYm91bmRzWzFdW3RdPWUubWF4fSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKHQpe3RoaXMuY2xlYXJDb2xvcj10fSxjbGVhclJHQkE6ZnVuY3Rpb24oKXt0aGlzLmdsLmNsZWFyQ29sb3IodGhpcy5jbGVhckNvbG9yWzBdLHRoaXMuY2xlYXJDb2xvclsxXSx0aGlzLmNsZWFyQ29sb3JbMl0sdGhpcy5jbGVhckNvbG9yWzNdKSx0aGlzLmdsLmNsZWFyKHRoaXMuZ2wuQ09MT1JfQlVGRkVSX0JJVHx0aGlzLmdsLkRFUFRIX0JVRkZFUl9CSVQpfX0sVj1beS5kcmF3aW5nQnVmZmVyV2lkdGgvai5waXhlbFJhdGlvfDAseS5kcmF3aW5nQnVmZmVySGVpZ2h0L2oucGl4ZWxSYXRpb3wwXTtmdW5jdGlvbiBVKCl7aWYoIWouX3N0b3BwZWQmJmouYXV0b1Jlc2l6ZSl7dmFyIHQ9ZS5wYXJlbnROb2RlLHI9MSxuPTE7dCYmdCE9PWRvY3VtZW50LmJvZHk/KHI9dC5jbGllbnRXaWR0aCxuPXQuY2xpZW50SGVpZ2h0KToocj13aW5kb3cuaW5uZXJXaWR0aCxuPXdpbmRvdy5pbm5lckhlaWdodCk7dmFyIGE9MHxNYXRoLmNlaWwocipqLnBpeGVsUmF0aW8pLGk9MHxNYXRoLmNlaWwobipqLnBpeGVsUmF0aW8pO2lmKGEhPT1lLndpZHRofHxpIT09ZS5oZWlnaHQpe2Uud2lkdGg9YSxlLmhlaWdodD1pO3ZhciBvPWUuc3R5bGU7by5wb3NpdGlvbj1vLnBvc2l0aW9ufHwiYWJzb2x1dGUiLG8ubGVmdD0iMHB4IixvLnRvcD0iMHB4IixvLndpZHRoPXIrInB4IixvLmhlaWdodD1uKyJweCIsej0hMH19fWouYXV0b1Jlc2l6ZSYmVSgpO2Z1bmN0aW9uIHEoKXtmb3IodmFyIHQ9TC5sZW5ndGgsZT1PLmxlbmd0aCxyPTA7cjxlOysrcilQW3JdPTA7dDpmb3IodmFyIHI9MDtyPHQ7KytyKXt2YXIgbj1MW3JdLGE9bi5waWNrU2xvdHM7aWYoYSl7Zm9yKHZhciBpPTA7aTxlOysraSlpZihQW2ldK2E8MjU1KXtDW3JdPWksbi5zZXRQaWNrQmFzZShQW2ldKzEpLFBbaV0rPWE7Y29udGludWUgdH12YXIgbz1zKHksQik7Q1tyXT1lLE8ucHVzaChvKSxQLnB1c2goYSksbi5zZXRQaWNrQmFzZSgxKSxlKz0xfWVsc2UgQ1tyXT0tMX1mb3IoO2U+MCYmMD09PVBbZS0xXTspUC5wb3AoKSxPLnBvcCgpLmRpc3Bvc2UoKX1mdW5jdGlvbiBIKCl7aWYoai5jb250ZXh0TG9zdClyZXR1cm4hMDt5LmlzQ29udGV4dExvc3QoKSYmKGouY29udGV4dExvc3Q9ITAsai5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsai5zZWxlY3Rpb24ub2JqZWN0PW51bGwsai5vbmNvbnRleHRsb3NzJiZqLm9uY29udGV4dGxvc3MoKSl9d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsVSksai51cGRhdGU9ZnVuY3Rpb24odCl7ai5fc3RvcHBlZHx8KHQ9dHx8e30sej0hMCxJPSEwKX0sai5hZGQ9ZnVuY3Rpb24odCl7ai5fc3RvcHBlZHx8KHQuYXhlcz1BLEwucHVzaCh0KSxDLnB1c2goLTEpLHo9ITAsST0hMCxxKCkpfSxqLnJlbW92ZT1mdW5jdGlvbih0KXtpZighai5fc3RvcHBlZCl7dmFyIGU9TC5pbmRleE9mKHQpO2U8MHx8KEwuc3BsaWNlKGUsMSksQy5wb3AoKSx6PSEwLEk9ITAscSgpKX19LGouZGlzcG9zZT1mdW5jdGlvbigpe2lmKCFqLl9zdG9wcGVkJiYoai5fc3RvcHBlZD0hMCx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixVKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEgpLGoubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLCFqLmNvbnRleHRMb3N0KSl7QS5kaXNwb3NlKCksRS5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDxMLmxlbmd0aDsrK3QpTFt0XS5kaXNwb3NlKCk7Xy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDxPLmxlbmd0aDsrK3QpT1t0XS5kaXNwb3NlKCk7dy5kaXNwb3NlKCkseT1udWxsLEE9bnVsbCxFPW51bGwsTD1bXX19LGouX21vdXNlUm90YXRpbmc9ITEsai5fcHJldkJ1dHRvbnM9MCxqLmVuYWJsZU1vdXNlTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ai5tb3VzZUxpc3RlbmVyPXUoZSxmdW5jdGlvbih0LGUscil7aWYoIWouX3N0b3BwZWQpe3ZhciBuPU8ubGVuZ3RoLGE9TC5sZW5ndGgsaT1iLm9iamVjdDtiLmRpc3RhbmNlPTEvMCxiLm1vdXNlWzBdPWUsYi5tb3VzZVsxXT1yLGIub2JqZWN0PW51bGwsYi5zY3JlZW49bnVsbCxiLmRhdGFDb29yZGluYXRlPWIuZGF0YVBvc2l0aW9uPW51bGw7dmFyIG89ITE7aWYodCYmai5fcHJldkJ1dHRvbnMpai5fbW91c2VSb3RhdGluZz0hMDtlbHNle2ouX21vdXNlUm90YXRpbmcmJihJPSEwKSxqLl9tb3VzZVJvdGF0aW5nPSExO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBsPU9bc10ucXVlcnkoZSxWWzFdLXItMSxqLnBpY2tSYWRpdXMpO2lmKGwpe2lmKGwuZGlzdGFuY2U+Yi5kaXN0YW5jZSljb250aW51ZTtmb3IodmFyIGM9MDtjPGE7KytjKXt2YXIgdT1MW2NdO2lmKENbY109PT1zKXt2YXIgaD11LnBpY2sobCk7aCYmKGIuYnV0dG9ucz10LGIuc2NyZWVuPWwuY29vcmQsYi5kaXN0YW5jZT1sLmRpc3RhbmNlLGIub2JqZWN0PXUsYi5pbmRleD1oLmRpc3RhbmNlLGIuZGF0YVBvc2l0aW9uPWgucG9zaXRpb24sYi5kYXRhQ29vcmRpbmF0ZT1oLmRhdGFDb29yZGluYXRlLGIuZGF0YT1oLG89ITApfX19fX1pJiZpIT09Yi5vYmplY3QmJihpLmhpZ2hsaWdodCYmaS5oaWdobGlnaHQobnVsbCksej0hMCksYi5vYmplY3QmJihiLm9iamVjdC5oaWdobGlnaHQmJmIub2JqZWN0LmhpZ2hsaWdodChiLmRhdGEpLHo9ITApLChvPW98fGIub2JqZWN0IT09aSkmJmoub25zZWxlY3QmJmoub25zZWxlY3QoYiksMSZ0JiYhKDEmai5fcHJldkJ1dHRvbnMpJiZqLm9uY2xpY2smJmoub25jbGljayhiKSxqLl9wcmV2QnV0dG9ucz10fX0pfSxlLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEgpO3ZhciBHPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLFk9W0dbMF0uc2xpY2UoKSxHWzFdLnNsaWNlKCldO2Z1bmN0aW9uIFcoKXtpZighSCgpKXtVKCk7dmFyIHQ9ai5jYW1lcmEudGljaygpO0Yudmlldz1qLmNhbWVyYS5tYXRyaXgsej16fHx0LEk9SXx8dCxBLnBpeGVsUmF0aW89ai5waXhlbFJhdGlvLEUucGl4ZWxSYXRpbz1qLnBpeGVsUmF0aW87dmFyIGU9TC5sZW5ndGgscj1HWzBdLG49R1sxXTtyWzBdPXJbMV09clsyXT0xLzAsblswXT1uWzFdPW5bMl09LTEvMDtmb3IodmFyIGE9MDthPGU7KythKXt2YXIgbz1MW2FdO28ucGl4ZWxSYXRpbz1qLnBpeGVsUmF0aW8sby5heGVzPWouYXhlcyx6PXp8fCEhby5kaXJ0eSxJPUl8fCEhby5kaXJ0eTt2YXIgcz1vLmJvdW5kcztpZihzKWZvcih2YXIgbD1zWzBdLHU9c1sxXSxwPTA7cDwzOysrcClyW3BdPU1hdGgubWluKHJbcF0sbFtwXSksbltwXT1NYXRoLm1heChuW3BdLHVbcF0pfXZhciBkPWouYm91bmRzO2lmKGouYXV0b0JvdW5kcylmb3IodmFyIHA9MDtwPDM7KytwKXtpZihuW3BdPHJbcF0pcltwXT0tMSxuW3BdPTE7ZWxzZXtyW3BdPT09bltwXSYmKHJbcF0tPTEsbltwXSs9MSk7dmFyIGc9LjA1KihuW3BdLXJbcF0pO3JbcF09cltwXS1nLG5bcF09bltwXStnfWRbMF1bcF09cltwXSxkWzFdW3BdPW5bcF19Zm9yKHZhciBtPSExLHA9MDtwPDM7KytwKW09bXx8WVswXVtwXSE9PWRbMF1bcF18fFlbMV1bcF0hPT1kWzFdW3BdLFlbMF1bcF09ZFswXVtwXSxZWzFdW3BdPWRbMV1bcF07aWYoST1JfHxtLHo9enx8bSl7aWYobSl7Zm9yKHZhciB4PVswLDAsMF0sYT0wO2E8MzsrK2EpeFthXT12KChkWzFdW2FdLWRbMF1bYV0pLzEwKTtBLmF1dG9UaWNrcz9BLnVwZGF0ZSh7Ym91bmRzOmQsdGlja1NwYWNpbmc6eH0pOkEudXBkYXRlKHtib3VuZHM6ZH0pfXZhciBUPXkuZHJhd2luZ0J1ZmZlcldpZHRoLE09eS5kcmF3aW5nQnVmZmVySGVpZ2h0O0JbMF09VCxCWzFdPU0sVlswXT0wfE1hdGgubWF4KFQvai5waXhlbFJhdGlvLDEpLFZbMV09MHxNYXRoLm1heChNL2oucGl4ZWxSYXRpbywxKSxmdW5jdGlvbih0LGUpe3ZhciByPXQuYm91bmRzLG49dC5jYW1lcmFQYXJhbXMsYT1uLnByb2plY3Rpb24saT1uLm1vZGVsLG89dC5nbC5kcmF3aW5nQnVmZmVyV2lkdGgscz10LmdsLmRyYXdpbmdCdWZmZXJIZWlnaHQsbD10LnpOZWFyLGM9dC56RmFyLHU9dC5mb3Z5LHA9by9zO2U/KGYoYSwtcCxwLC0xLDEsbCxjKSxuLl9vcnRobz0hMCk6KGgoYSx1LHAsbCxjKSxuLl9vcnRobz0hMSk7Zm9yKHZhciBkPTA7ZDwxNjsrK2QpaVtkXT0wO2lbMTVdPTE7Zm9yKHZhciBnPTAsZD0wO2Q8MzsrK2QpZz1NYXRoLm1heChnLHJbMV1bZF0tclswXVtkXSk7Zm9yKHZhciBkPTA7ZDwzOysrZCl0LmF1dG9TY2FsZT9pWzUqZF09dC5hc3BlY3RbZF0vKHJbMV1bZF0tclswXVtkXSk6aVs1KmRdPTEvZyx0LmF1dG9DZW50ZXImJihpWzEyK2RdPS41Ki1pWzUqZF0qKHJbMF1bZF0rclsxXVtkXSkpfShqLGspO2Zvcih2YXIgYT0wO2E8ZTsrK2Epe3ZhciBvPUxbYV07by5heGVzQm91bmRzPWQsai5jbGlwVG9Cb3VuZHMmJihvLmNsaXBCb3VuZHM9ZCl9Yi5vYmplY3QmJihqLnNuYXBUb0RhdGE/RS5wb3NpdGlvbj1iLmRhdGFDb29yZGluYXRlOkUucG9zaXRpb249Yi5kYXRhUG9zaXRpb24sRS5ib3VuZHM9ZCksSSYmKEk9ITEsZnVuY3Rpb24oKXtpZihIKCkpcmV0dXJuO3kuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSx5LmRlcHRoTWFzayghMCkseS5kaXNhYmxlKHkuQkxFTkQpLHkuZW5hYmxlKHkuREVQVEhfVEVTVCkseS5kZXB0aEZ1bmMoeS5MRVFVQUwpO2Zvcih2YXIgdD1MLmxlbmd0aCxlPU8ubGVuZ3RoLHI9MDtyPGU7KytyKXt2YXIgbj1PW3JdO24uc2hhcGU9VixuLmJlZ2luKCk7Zm9yKHZhciBhPTA7YTx0OysrYSlpZihDW2FdPT09cil7dmFyIGk9TFthXTtpLmRyYXdQaWNrJiYoaS5waXhlbFJhdGlvPTEsaS5kcmF3UGljayhGKSl9bi5lbmQoKX19KCkpLGouYXhlc1BpeGVscz1pKGouYXhlcyxGLFQsTSksai5vbnJlbmRlciYmai5vbnJlbmRlcigpLHkuYmluZEZyYW1lYnVmZmVyKHkuRlJBTUVCVUZGRVIsbnVsbCkseS52aWV3cG9ydCgwLDAsVCxNKSxqLmNsZWFyUkdCQSgpLHkuZGVwdGhNYXNrKCEwKSx5LmNvbG9yTWFzayghMCwhMCwhMCwhMCkseS5lbmFibGUoeS5ERVBUSF9URVNUKSx5LmRlcHRoRnVuYyh5LkxFUVVBTCkseS5kaXNhYmxlKHkuQkxFTkQpLHkuZGlzYWJsZSh5LkNVTExfRkFDRSk7dmFyIFM9ITE7QS5lbmFibGUmJihTPVN8fEEuaXNUcmFuc3BhcmVudCgpLEEuZHJhdyhGKSksRS5heGVzPUEsYi5vYmplY3QmJkUuZHJhdyhGKSx5LmRpc2FibGUoeS5DVUxMX0ZBQ0UpO2Zvcih2YXIgYT0wO2E8ZTsrK2Epe3ZhciBvPUxbYV07by5heGVzPUEsby5waXhlbFJhdGlvPWoucGl4ZWxSYXRpbyxvLmlzT3BhcXVlJiZvLmlzT3BhcXVlKCkmJm8uZHJhdyhGKSxvLmlzVHJhbnNwYXJlbnQmJm8uaXNUcmFuc3BhcmVudCgpJiYoUz0hMCl9aWYoUyl7Xy5zaGFwZT1CLF8uYmluZCgpLHkuY2xlYXIoeS5ERVBUSF9CVUZGRVJfQklUKSx5LmNvbG9yTWFzayghMSwhMSwhMSwhMSkseS5kZXB0aE1hc2soITApLHkuZGVwdGhGdW5jKHkuTEVTUyksQS5lbmFibGUmJkEuaXNUcmFuc3BhcmVudCgpJiZBLmRyYXdUcmFuc3BhcmVudChGKTtmb3IodmFyIGE9MDthPGU7KythKXt2YXIgbz1MW2FdO28uaXNPcGFxdWUmJm8uaXNPcGFxdWUoKSYmby5kcmF3KEYpfXkuZW5hYmxlKHkuQkxFTkQpLHkuYmxlbmRFcXVhdGlvbih5LkZVTkNfQUREKSx5LmJsZW5kRnVuYyh5Lk9ORSx5Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHkuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSx5LmRlcHRoTWFzayghMSkseS5jbGVhckNvbG9yKDAsMCwwLDApLHkuY2xlYXIoeS5DT0xPUl9CVUZGRVJfQklUKSxBLmlzVHJhbnNwYXJlbnQoKSYmQS5kcmF3VHJhbnNwYXJlbnQoRik7Zm9yKHZhciBhPTA7YTxlOysrYSl7dmFyIG89TFthXTtvLmlzVHJhbnNwYXJlbnQmJm8uaXNUcmFuc3BhcmVudCgpJiZvLmRyYXdUcmFuc3BhcmVudChGKX15LmJpbmRGcmFtZWJ1ZmZlcih5LkZSQU1FQlVGRkVSLG51bGwpLHkuYmxlbmRGdW5jKHkuT05FLHkuT05FX01JTlVTX1NSQ19BTFBIQSkseS5kaXNhYmxlKHkuREVQVEhfVEVTVCksdy5iaW5kKCksXy5jb2xvclswXS5iaW5kKDApLHcudW5pZm9ybXMuYWNjdW1CdWZmZXI9MCxjKHkpLHkuZGlzYWJsZSh5LkJMRU5EKX16PSExO2Zvcih2YXIgYT0wO2E8ZTsrK2EpTFthXS5kaXJ0eT0hMX19fXJldHVybiBqLmVuYWJsZU1vdXNlTGlzdGVuZXJzKCksZnVuY3Rpb24gdCgpe2ouX3N0b3BwZWR8fGouY29udGV4dExvc3R8fChXKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpKX0oKSxqLnJlZHJhdz1mdW5jdGlvbigpe2ouX3N0b3BwZWR8fCh6PSEwLFcoKSl9LGp9LGNyZWF0ZUNhbWVyYTpufX0seyIuL2NhbWVyYS5qcyI6MjkxLCIuL2xpYi9zaGFkZXIiOjI5MiwiYS1iaWctdHJpYW5nbGUiOjYyLCJnbC1heGVzM2QiOjIzNiwiZ2wtYXhlczNkL3Byb3BlcnRpZXMiOjI0MywiZ2wtZmJvIjoyNTIsImdsLW1hdDQvb3J0aG8iOjI3MSwiZ2wtbWF0NC9wZXJzcGVjdGl2ZSI6MjcyLCJnbC1zZWxlY3Qtc3RhdGljIjozMDMsImdsLXNwaWtlczNkIjozMTMsImlzLW1vYmlsZSI6NDIyLCJtb3VzZS1jaGFuZ2UiOjQzN31dLDI5NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2xpZnkiKTtyLnBvaW50VmVydGV4PW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDMgbWF0cml4O1xudW5pZm9ybSBmbG9hdCBwb2ludFNpemU7XG51bmlmb3JtIGZsb2F0IHBvaW50Q2xvdWQ7XG5cbmhpZ2hwIGZsb2F0IHJhbmQodmVjMiBjbykge1xuICBoaWdocCBmbG9hdCBhID0gMTIuOTg5ODtcbiAgaGlnaHAgZmxvYXQgYiA9IDc4LjIzMztcbiAgaGlnaHAgZmxvYXQgYyA9IDQzNzU4LjU0NTM7XG4gIGhpZ2hwIGZsb2F0IGQgPSBkb3QoY28ueHksIHZlYzIoYSwgYikpO1xuICBoaWdocCBmbG9hdCBlID0gbW9kKGQsIDMuMTQpO1xuICByZXR1cm4gZnJhY3Qoc2luKGUpICogYyk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBoZ1Bvc2l0aW9uID0gbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMSk7XG4gIGdsX1Bvc2l0aW9uICA9IHZlYzQoaGdQb3NpdGlvbi54eSwgMCwgaGdQb3NpdGlvbi56KTtcbiAgICAvLyBpZiB3ZSBkb24ndCBqaXR0ZXIgdGhlIHBvaW50IHNpemUgYSBiaXQsIG92ZXJhbGwgcG9pbnQgY2xvdWRcbiAgICAvLyBzYXR1cmF0aW9uICdqdW1wcycgb24gem9vbWluZywgd2hpY2ggaXMgZGlzdHVyYmluZyBhbmQgY29uZnVzaW5nXG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZSAqICgoMTkuNSArIHJhbmQocG9zaXRpb24pKSAvIDIwLjApO1xuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxuICAgIC8vIGdldCB0aGUgc2FtZSBzcXVhcmUgc3VyZmFjZSBhcyBjaXJjbGUgd291bGQgYmVcbiAgICBnbF9Qb2ludFNpemUgKj0gMC44ODY7XG4gIH1cbn0iXSksci5wb2ludEZyYWdtZW50PW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvciwgYm9yZGVyQ29sb3I7XG51bmlmb3JtIGZsb2F0IGNlbnRlckZyYWN0aW9uO1xudW5pZm9ybSBmbG9hdCBwb2ludENsb3VkO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IHJhZGl1cztcbiAgdmVjNCBiYXNlQ29sb3I7XG4gIGlmKHBvaW50Q2xvdWQgIT0gMC4wKSB7IC8vIHBvaW50Q2xvdWQgaXMgdHJ1dGh5XG4gICAgaWYoY2VudGVyRnJhY3Rpb24gPT0gMS4wKSB7XG4gICAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gbWl4KGJvcmRlckNvbG9yLCBjb2xvciwgY2VudGVyRnJhY3Rpb24pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XG4gICAgaWYocmFkaXVzID4gMS4wKSB7XG4gICAgICBkaXNjYXJkO1xuICAgIH1cbiAgICBiYXNlQ29sb3IgPSBtaXgoYm9yZGVyQ29sb3IsIGNvbG9yLCBzdGVwKHJhZGl1cywgY2VudGVyRnJhY3Rpb24pKTtcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGJhc2VDb2xvci5yZ2IgKiBiYXNlQ29sb3IuYSwgYmFzZUNvbG9yLmEpO1xuICB9XG59XG4iXSksci5waWNrVmVydGV4PW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgcGlja0lkO1xuXG51bmlmb3JtIG1hdDMgbWF0cml4O1xudW5pZm9ybSBmbG9hdCBwb2ludFNpemU7XG51bmlmb3JtIHZlYzQgcGlja09mZnNldDtcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGhnUG9zaXRpb24gPSBtYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxKTtcbiAgZ2xfUG9zaXRpb24gID0gdmVjNChoZ1Bvc2l0aW9uLnh5LCAwLCBoZ1Bvc2l0aW9uLnopO1xuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XG5cbiAgdmVjNCBpZCA9IHBpY2tJZCArIHBpY2tPZmZzZXQ7XG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcbiAgaWQueCAtPSBmbG9vcihpZC54IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xuICBpZC55IC09IGZsb29yKGlkLnkgLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XG4gIGlkLnogLT0gZmxvb3IoaWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGZyYWdJZCA9IGlkO1xufVxuIl0pLHIucGlja0ZyYWdtZW50PW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xuICBpZihyYWRpdXMgPiAxLjApIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdJZCAvIDI1NS4wO1xufVxuIl0pfSx7Z2xzbGlmeTo0MTF9XSwyOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksYT10KCJnbC1idWZmZXIiKSxpPXQoInR5cGVkYXJyYXktcG9vbCIpLG89dCgiLi9saWIvc2hhZGVyIik7ZnVuY3Rpb24gcyh0LGUscixuLGEpe3RoaXMucGxvdD10LHRoaXMub2Zmc2V0QnVmZmVyPWUsdGhpcy5waWNrQnVmZmVyPXIsdGhpcy5zaGFkZXI9bix0aGlzLnBpY2tTaGFkZXI9YSx0aGlzLnNpemVNaW49LjUsdGhpcy5zaXplTWluQ2FwPTIsdGhpcy5zaXplTWF4PTIwLHRoaXMuYXJlYVJhdGlvPTEsdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb2xvcj1bMSwwLDAsMV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMV0sdGhpcy5ibGVuZD0hMSx0aGlzLnBpY2tPZmZzZXQ9MCx0aGlzLnBvaW50cz1udWxsfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2wsaT1hKHIpLGw9YShyKSxjPW4ocixvLnBvaW50VmVydGV4LG8ucG9pbnRGcmFnbWVudCksdT1uKHIsby5waWNrVmVydGV4LG8ucGlja0ZyYWdtZW50KSxoPW5ldyBzKHQsaSxsLGMsdSk7cmV0dXJuIGgudXBkYXRlKGUpLHQuYWRkT2JqZWN0KGgpLGh9O3ZhciBsLGMsdT1zLnByb3RvdHlwZTt1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9mZnNldEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5waWNrQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfSx1LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZTtmdW5jdGlvbiByKGUscil7cmV0dXJuIGUgaW4gdD90W2VdOnJ9dD10fHx7fSx0aGlzLnNpemVNaW49cigic2l6ZU1pbiIsLjUpLHRoaXMuc2l6ZU1heD1yKCJzaXplTWF4IiwyMCksdGhpcy5jb2xvcj1yKCJjb2xvciIsWzEsMCwwLDFdKS5zbGljZSgpLHRoaXMuYXJlYVJhdGlvPXIoImFyZWFSYXRpbyIsMSksdGhpcy5ib3JkZXJDb2xvcj1yKCJib3JkZXJDb2xvciIsWzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYmxlbmQ9cigiYmxlbmQiLCExKTt2YXIgbj10LnBvc2l0aW9ucy5sZW5ndGg+Pj4xLGE9dC5wb3NpdGlvbnMgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXksbz10LmlkVG9JbmRleCBpbnN0YW5jZW9mIEludDMyQXJyYXkmJnQuaWRUb0luZGV4Lmxlbmd0aD49bixzPXQucG9zaXRpb25zLGw9YT9zOmkubWFsbG9jRmxvYXQzMihzLmxlbmd0aCksYz1vP3QuaWRUb0luZGV4OmkubWFsbG9jSW50MzIobik7aWYoYXx8bC5zZXQocyksIW8pZm9yKGwuc2V0KHMpLGU9MDtlPG47ZSsrKWNbZV09ZTt0aGlzLnBvaW50cz1zLHRoaXMub2Zmc2V0QnVmZmVyLnVwZGF0ZShsKSx0aGlzLnBpY2tCdWZmZXIudXBkYXRlKGMpLGF8fGkuZnJlZShsKSxvfHxpLmZyZWUoYyksdGhpcy5wb2ludENvdW50PW4sdGhpcy5waWNrT2Zmc2V0PTB9LHUudW5pZmllZERyYXc9KGw9WzEsMCwwLDAsMSwwLDAsMCwxXSxjPVswLDAsMCwwXSxmdW5jdGlvbih0KXt2YXIgZT12b2lkIDAhPT10LHI9ZT90aGlzLnBpY2tTaGFkZXI6dGhpcy5zaGFkZXIsbj10aGlzLnBsb3QuZ2wsYT10aGlzLnBsb3QuZGF0YUJveDtpZigwPT09dGhpcy5wb2ludENvdW50KXJldHVybiB0O3ZhciBpPWFbMl0tYVswXSxvPWFbM10tYVsxXSxzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0wLGE9dC5sZW5ndGg+Pj4xO2ZvcihyPTA7cjxhO3IrKyl7dmFyIGk9dFsyKnJdLG89dFsyKnIrMV07aT49ZVswXSYmaTw9ZVsyXSYmbz49ZVsxXSYmbzw9ZVszXSYmbisrfXJldHVybiBufSh0aGlzLnBvaW50cyxhKSx1PXRoaXMucGxvdC5waWNrUGl4ZWxSYXRpbypNYXRoLm1heChNYXRoLm1pbih0aGlzLnNpemVNaW5DYXAsdGhpcy5zaXplTWluKSxNYXRoLm1pbih0aGlzLnNpemVNYXgsdGhpcy5zaXplTWF4L01hdGgucG93KHMsLjMzMzMzKSkpO2xbMF09Mi9pLGxbNF09Mi9vLGxbNl09LTIqYVswXS9pLTEsbFs3XT0tMiphWzFdL28tMSx0aGlzLm9mZnNldEJ1ZmZlci5iaW5kKCksci5iaW5kKCksci5hdHRyaWJ1dGVzLnBvc2l0aW9uLnBvaW50ZXIoKSxyLnVuaWZvcm1zLm1hdHJpeD1sLHIudW5pZm9ybXMuY29sb3I9dGhpcy5jb2xvcixyLnVuaWZvcm1zLmJvcmRlckNvbG9yPXRoaXMuYm9yZGVyQ29sb3Isci51bmlmb3Jtcy5wb2ludENsb3VkPXU8NSxyLnVuaWZvcm1zLnBvaW50U2l6ZT11LHIudW5pZm9ybXMuY2VudGVyRnJhY3Rpb249TWF0aC5taW4oMSxNYXRoLm1heCgwLE1hdGguc3FydCgxLXRoaXMuYXJlYVJhdGlvKSkpLGUmJihjWzBdPTI1NSZ0LGNbMV09dD4+OCYyNTUsY1syXT10Pj4xNiYyNTUsY1szXT10Pj4yNCYyNTUsdGhpcy5waWNrQnVmZmVyLmJpbmQoKSxyLmF0dHJpYnV0ZXMucGlja0lkLnBvaW50ZXIobi5VTlNJR05FRF9CWVRFKSxyLnVuaWZvcm1zLnBpY2tPZmZzZXQ9Yyx0aGlzLnBpY2tPZmZzZXQ9dCk7dmFyIGg9bi5nZXRQYXJhbWV0ZXIobi5CTEVORCksZj1uLmdldFBhcmFtZXRlcihuLkRJVEhFUik7cmV0dXJuIGgmJiF0aGlzLmJsZW5kJiZuLmRpc2FibGUobi5CTEVORCksZiYmbi5kaXNhYmxlKG4uRElUSEVSKSxuLmRyYXdBcnJheXMobi5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLGgmJiF0aGlzLmJsZW5kJiZuLmVuYWJsZShuLkJMRU5EKSxmJiZuLmVuYWJsZShuLkRJVEhFUiksdCt0aGlzLnBvaW50Q291bnR9KSx1LmRyYXc9dS51bmlmaWVkRHJhdyx1LmRyYXdQaWNrPXUudW5pZmllZERyYXcsdS5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsYT10aGlzLnBvaW50Q291bnQ7aWYocjxufHxyPj1uK2EpcmV0dXJuIG51bGw7dmFyIGk9ci1uLG89dGhpcy5wb2ludHM7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6aSxkYXRhQ29vcmQ6W29bMippXSxvWzIqaSsxXV19fX0seyIuL2xpYi9zaGFkZXIiOjI5NCwiZ2wtYnVmZmVyIjoyNDQsImdsLXNoYWRlciI6MzA0LCJ0eXBlZGFycmF5LXBvb2wiOjU0NH1dLDI5NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgYSxpLG8scyxsLGM9ZVswXSx1PWVbMV0saD1lWzJdLGY9ZVszXSxwPXJbMF0sZD1yWzFdLGc9clsyXSx2PXJbM107KGk9YypwK3UqZCtoKmcrZip2KTwwJiYoaT0taSxwPS1wLGQ9LWQsZz0tZyx2PS12KTsxLWk+MWUtNj8oYT1NYXRoLmFjb3MoaSksbz1NYXRoLnNpbihhKSxzPU1hdGguc2luKCgxLW4pKmEpL28sbD1NYXRoLnNpbihuKmEpL28pOihzPTEtbixsPW4pO3JldHVybiB0WzBdPXMqYytsKnAsdFsxXT1zKnUrbCpkLHRbMl09cypoK2wqZyx0WzNdPXMqZitsKnYsdH19LHt9XSwyOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dD90LnRvU3RyaW5nKCk6IiJ9fSx7fV0sMjk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInZlY3Rvcml6ZS10ZXh0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1hW2VdO2l8fChpPWFbZV09e30pO2lmKHQgaW4gaSlyZXR1cm4gaVt0XTt2YXIgbz17dGV4dEFsaWduOiJjZW50ZXIiLHRleHRCYXNlbGluZToibWlkZGxlIixsaW5lSGVpZ2h0OjEsZm9udDplLGxpbmVTcGFjaW5nOjEuMjUsc3R5bGV0YWdzOnticmVha2xpbmVzOiEwLGJvbGRzOiEwLGl0YWxpY3M6ITAsc3Vic2NyaXB0czohMCxzdXBlcnNjcmlwdHM6ITB9LHRyaWFuZ2xlczohMH0scz1uKHQsbyk7by50cmlhbmdsZXM9ITE7dmFyIGwsYyx1PW4odCxvKTtpZihyJiYxIT09cil7Zm9yKGw9MDtsPHMucG9zaXRpb25zLmxlbmd0aDsrK2wpZm9yKGM9MDtjPHMucG9zaXRpb25zW2xdLmxlbmd0aDsrK2Mpcy5wb3NpdGlvbnNbbF1bY10vPXI7Zm9yKGw9MDtsPHUucG9zaXRpb25zLmxlbmd0aDsrK2wpZm9yKGM9MDtjPHUucG9zaXRpb25zW2xdLmxlbmd0aDsrK2MpdS5wb3NpdGlvbnNbbF1bY10vPXJ9dmFyIGg9W1sxLzAsMS8wXSxbLTEvMCwtMS8wXV0sZj11LnBvc2l0aW9ucy5sZW5ndGg7Zm9yKGw9MDtsPGY7KytsKXt2YXIgcD11LnBvc2l0aW9uc1tsXTtmb3IoYz0wO2M8MjsrK2MpaFswXVtjXT1NYXRoLm1pbihoWzBdW2NdLHBbY10pLGhbMV1bY109TWF0aC5tYXgoaFsxXVtjXSxwW2NdKX1yZXR1cm4gaVt0XT1bcyx1LGhdfTt2YXIgYT17fX0seyJ2ZWN0b3JpemUtdGV4dCI6NTQ5fV0sMjk5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtc2hhZGVyIiksYT10KCJnbHNsaWZ5IiksaT1hKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XG51bmlmb3JtIGZsb2F0IGhpZ2hsaWdodFNjYWxlO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgcG9zaXRpb24pKSB7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvYXQgc2NhbGUgPSAxLjA7XG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQsIGlkKSA8IDAuMDAwMSkge1xuICAgICAgc2NhbGUgPSBoaWdobGlnaHRTY2FsZTtcbiAgICB9XG5cbiAgICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEpO1xuICAgIHZlYzQgdmlld1Bvc2l0aW9uID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gICAgdmlld1Bvc2l0aW9uID0gdmlld1Bvc2l0aW9uIC8gdmlld1Bvc2l0aW9uLnc7XG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogKHZpZXdQb3NpdGlvbiArIHNjYWxlICogdmVjNChnbHlwaC54LCAtZ2x5cGgueSwgMCwgMCkpO1xuXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xuICB9XG59Il0pLG89YShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGUsIHBpeGVsUmF0aW87XG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XG5cbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgcG9zaXRpb24pKSB7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvYXQgc2NhbGUgPSBwaXhlbFJhdGlvO1xuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLmJnciwgaWQuYmdyKSA8IDAuMDAxKSB7XG4gICAgICBzY2FsZSAqPSBoaWdobGlnaHRTY2FsZTtcbiAgICB9XG5cbiAgICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3UG9zaXRpb247XG4gICAgY2xpcFBvc2l0aW9uIC89IGNsaXBQb3NpdGlvbi53O1xuXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb24gKyB2ZWM0KHNjcmVlblNpemUgKiBzY2FsZSAqIHZlYzIoZ2x5cGgueCwgLWdseXBoLnkpLCAwLjAsIDAuMCk7XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xuICB9XG59Il0pLHM9YShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcbnVuaWZvcm0gdmVjNCBoaWdobGlnaHRJZDtcbnVuaWZvcm0gdmVjMyBheGVzWzJdO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNpemU7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIHBpeGVsUmF0aW87XG5cbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgcG9zaXRpb24pKSB7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH0gZWxzZSB7XG4gICAgZmxvYXQgbHNjYWxlID0gcGl4ZWxSYXRpbyAqIHNjYWxlO1xuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLCBpZCkgPCAwLjAwMDEpIHtcbiAgICAgIGxzY2FsZSAqPSBoaWdobGlnaHRTY2FsZTtcbiAgICB9XG5cbiAgICB2ZWM0IGNsaXBDZW50ZXIgICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxKTtcbiAgICB2ZWMzIGRhdGFQb3NpdGlvbiA9IHBvc2l0aW9uICsgMC41KmxzY2FsZSooYXhlc1swXSAqIGdseXBoLnggKyBheGVzWzFdICogZ2x5cGgueSkgKiBjbGlwQ2VudGVyLncgKiBzY3JlZW5TaXplLnk7XG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChkYXRhUG9zaXRpb24sIDEpO1xuXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IGRhdGFQb3NpdGlvbjtcbiAgfVxufVxuIl0pLGw9YShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgZnJhZ0NsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBpbnRlcnBDb2xvcjtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZiAoXG4gICAgb3V0T2ZSYW5nZShmcmFnQ2xpcEJvdW5kc1swXSwgZnJhZ0NsaXBCb3VuZHNbMV0sIGRhdGFDb29yZGluYXRlKSB8fFxuICAgIGludGVycENvbG9yLmEgKiBvcGFjaXR5ID09IDAuXG4gICkgZGlzY2FyZDtcbiAgZ2xfRnJhZ0NvbG9yID0gaW50ZXJwQ29sb3IgKiBvcGFjaXR5O1xufVxuIl0pLGM9YShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgZnJhZ0NsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHBpY2tHcm91cDtcblxudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShmcmFnQ2xpcEJvdW5kc1swXSwgZnJhZ0NsaXBCb3VuZHNbMV0sIGRhdGFDb29yZGluYXRlKSkgZGlzY2FyZDtcblxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tHcm91cCwgcGlja0lkLmJncik7XG59Il0pLHU9W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJnbHlwaCIsdHlwZToidmVjMiJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9XSxoPXt2ZXJ0ZXg6aSxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6dX0sZj17dmVydGV4Om8sZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOnV9LHA9e3ZlcnRleDpzLGZyYWdtZW50OmwsYXR0cmlidXRlczp1fSxkPXt2ZXJ0ZXg6aSxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6dX0sZz17dmVydGV4Om8sZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOnV9LHY9e3ZlcnRleDpzLGZyYWdtZW50OmMsYXR0cmlidXRlczp1fTtmdW5jdGlvbiBtKHQsZSl7dmFyIHI9bih0LGUpLGE9ci5hdHRyaWJ1dGVzO3JldHVybiBhLnBvc2l0aW9uLmxvY2F0aW9uPTAsYS5jb2xvci5sb2NhdGlvbj0xLGEuZ2x5cGgubG9jYXRpb249MixhLmlkLmxvY2F0aW9uPTMscn1yLmNyZWF0ZVBlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQsaCl9LHIuY3JlYXRlT3J0aG89ZnVuY3Rpb24odCl7cmV0dXJuIG0odCxmKX0sci5jcmVhdGVQcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBtKHQscCl9LHIuY3JlYXRlUGlja1BlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQsZCl9LHIuY3JlYXRlUGlja09ydGhvPWZ1bmN0aW9uKHQpe3JldHVybiBtKHQsZyl9LHIuY3JlYXRlUGlja1Byb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCx2KX19LHsiZ2wtc2hhZGVyIjozMDQsZ2xzbGlmeTo0MTF9XSwzMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiaXMtc3RyaW5nLWJsYW5rIiksYT10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLG89dCgidHlwZWRhcnJheS1wb29sIikscz10KCJnbC1tYXQ0L211bHRpcGx5IiksbD10KCIuL2xpYi9zaGFkZXJzIiksYz10KCIuL2xpYi9nbHlwaHMiKSx1PXQoIi4vbGliL2dldC1zaW1wbGUtc3RyaW5nIiksaD1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gZih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGE9dFsyXSxpPXRbM107cmV0dXJuIHRbMF09ZVswXSpyK2VbNF0qbitlWzhdKmErZVsxMl0qaSx0WzFdPWVbMV0qcitlWzVdKm4rZVs5XSphK2VbMTNdKmksdFsyXT1lWzJdKnIrZVs2XSpuK2VbMTBdKmErZVsxNF0qaSx0WzNdPWVbM10qcitlWzddKm4rZVsxMV0qYStlWzE1XSppLHR9ZnVuY3Rpb24gcCh0LGUscixuKXtyZXR1cm4gZihuLG4pLGYobixuKSxmKG4sbil9ZnVuY3Rpb24gZCh0LGUpe3RoaXMuaW5kZXg9dCx0aGlzLmRhdGFDb29yZGluYXRlPXRoaXMucG9zaXRpb249ZX1mdW5jdGlvbiBnKHQpe3JldHVybiEwPT09dD8xOnQ+MT8xOnR9ZnVuY3Rpb24gdih0LGUscixuLGEsaSxvLHMsbCxjLHUsaCl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuc2hhZGVyPWUsdGhpcy5vcnRob1NoYWRlcj1yLHRoaXMucHJvamVjdFNoYWRlcj1uLHRoaXMucG9pbnRCdWZmZXI9YSx0aGlzLmNvbG9yQnVmZmVyPWksdGhpcy5nbHlwaEJ1ZmZlcj1vLHRoaXMuaWRCdWZmZXI9cyx0aGlzLnZhbz1sLHRoaXMudmVydGV4Q291bnQ9MCx0aGlzLmxpbmVWZXJ0ZXhDb3VudD0wLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5saW5lV2lkdGg9MCx0aGlzLnByb2plY3RTY2FsZT1bMi8zLDIvMywyLzNdLHRoaXMucHJvamVjdE9wYWNpdHk9WzEsMSwxXSx0aGlzLnByb2plY3RIYXNBbHBoYT0hMSx0aGlzLnBpY2tJZD0wLHRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyPWMsdGhpcy5waWNrT3J0aG9TaGFkZXI9dSx0aGlzLnBpY2tQcm9qZWN0U2hhZGVyPWgsdGhpcy5wb2ludHM9W10sdGhpcy5fc2VsZWN0UmVzdWx0PW5ldyBkKDAsWzAsMCwwXSksdGhpcy51c2VPcnRobz0hMCx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmF4ZXNQcm9qZWN0PVshMCwhMCwhMF0sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMuaGlnaGxpZ2h0SWQ9WzEsMSwxLDFdLHRoaXMuaGlnaGxpZ2h0U2NhbGU9Mix0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5kaXJ0eT0hMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPWwuY3JlYXRlUGVyc3BlY3RpdmUoZSksbj1sLmNyZWF0ZU9ydGhvKGUpLG89bC5jcmVhdGVQcm9qZWN0KGUpLHM9bC5jcmVhdGVQaWNrUGVyc3BlY3RpdmUoZSksYz1sLmNyZWF0ZVBpY2tPcnRobyhlKSx1PWwuY3JlYXRlUGlja1Byb2plY3QoZSksaD1hKGUpLGY9YShlKSxwPWEoZSksZD1hKGUpLGc9aShlLFt7YnVmZmVyOmgsc2l6ZTozLHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpmLHNpemU6NCx0eXBlOmUuRkxPQVR9LHtidWZmZXI6cCxzaXplOjIsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmQsc2l6ZTo0LHR5cGU6ZS5VTlNJR05FRF9CWVRFLG5vcm1hbGl6ZWQ6ITB9XSksbT1uZXcgdihlLHIsbixvLGgsZixwLGQsZyxzLGMsdSk7cmV0dXJuIG0udXBkYXRlKHQpLG19O3ZhciBtPXYucHJvdG90eXBlO20ucGlja1Nsb3RzPTEsbS5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSxtLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtpZih0aGlzLmhhc0FscGhhKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmdGhpcy5wcm9qZWN0SGFzQWxwaGEpcmV0dXJuITA7cmV0dXJuITF9LG0uaXNPcGFxdWU9ZnVuY3Rpb24oKXtpZighdGhpcy5oYXNBbHBoYSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PDM7Kyt0KWlmKHRoaXMuYXhlc1Byb2plY3RbdF0mJiF0aGlzLnByb2plY3RIYXNBbHBoYSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHk9WzAsMF0seD1bMCwwLDBdLGI9WzAsMCwwXSxfPVswLDAsMCwxXSx3PVswLDAsMCwxXSxrPWguc2xpY2UoKSxUPVswLDAsMF0sTT1bWzAsMCwwXSxbMCwwLDBdXTtmdW5jdGlvbiBBKHQpe3JldHVybiB0WzBdPXRbMV09dFsyXT0wLHR9ZnVuY3Rpb24gUyh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPTEsdH1mdW5jdGlvbiBFKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0W3JdPW4sdH1mdW5jdGlvbiBMKHQsZSxyLG4pe3ZhciBhLGk9ZS5heGVzUHJvamVjdCxvPWUuZ2wsbD10LnVuaWZvcm1zLGM9ci5tb2RlbHx8aCx1PXIudmlld3x8aCxmPXIucHJvamVjdGlvbnx8aCxkPWUuYXhlc0JvdW5kcyxnPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1NLHI9MDtyPDI7KytyKWZvcih2YXIgbj0wO248MzsrK24pZVtyXVtuXT1NYXRoLm1heChNYXRoLm1pbih0W3JdW25dLDFlOCksLTFlOCk7cmV0dXJuIGV9KGUuY2xpcEJvdW5kcyk7YT1lLmF4ZXMmJmUuYXhlcy5sYXN0Q3ViZVByb3BzP2UuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXM6WzEsMSwxXSx5WzBdPTIvby5kcmF3aW5nQnVmZmVyV2lkdGgseVsxXT0yL28uZHJhd2luZ0J1ZmZlckhlaWdodCx0LmJpbmQoKSxsLnZpZXc9dSxsLnByb2plY3Rpb249ZixsLnNjcmVlblNpemU9eSxsLmhpZ2hsaWdodElkPWUuaGlnaGxpZ2h0SWQsbC5oaWdobGlnaHRTY2FsZT1lLmhpZ2hsaWdodFNjYWxlLGwuY2xpcEJvdW5kcz1nLGwucGlja0dyb3VwPWUucGlja0lkLzI1NSxsLnBpeGVsUmF0aW89bjtmb3IodmFyIHY9MDt2PDM7Kyt2KWlmKGlbdl0pe2wuc2NhbGU9ZS5wcm9qZWN0U2NhbGVbdl0sbC5vcGFjaXR5PWUucHJvamVjdE9wYWNpdHlbdl07Zm9yKHZhciBtPWssTD0wO0w8MTY7KytMKW1bTF09MDtmb3IoTD0wO0w8NDsrK0wpbVs1KkxdPTE7bVs1KnZdPTAsYVt2XTwwP21bMTIrdl09ZFswXVt2XTptWzEyK3ZdPWRbMV1bdl0scyhtLGMsbSksbC5tb2RlbD1tO3ZhciBDPSh2KzEpJTMsUD0odisyKSUzLE89QSh4KSx6PUEoYik7T1tDXT0xLHpbUF09MTt2YXIgST1wKDAsMCwwLFMoXyxPKSksRD1wKDAsMCwwLFModyx6KSk7aWYoTWF0aC5hYnMoSVsxXSk+TWF0aC5hYnMoRFsxXSkpe3ZhciBSPUk7ST1ELEQ9UixSPU8sTz16LHo9Ujt2YXIgRj1DO0M9UCxQPUZ9SVswXTwwJiYoT1tDXT0tMSksRFsxXT4wJiYoeltQXT0tMSk7dmFyIEI9MCxOPTA7Zm9yKEw9MDtMPDQ7KytMKUIrPU1hdGgucG93KGNbNCpDK0xdLDIpLE4rPU1hdGgucG93KGNbNCpQK0xdLDIpO09bQ10vPU1hdGguc3FydChCKSx6W1BdLz1NYXRoLnNxcnQoTiksbC5heGVzWzBdPU8sbC5heGVzWzFdPXosbC5mcmFnQ2xpcEJvdW5kc1swXT1FKFQsZ1swXSx2LC0xZTgpLGwuZnJhZ0NsaXBCb3VuZHNbMV09RShULGdbMV0sdiwxZTgpLGUudmFvLmJpbmQoKSxlLnZhby5kcmF3KG8uVFJJQU5HTEVTLGUudmVydGV4Q291bnQpLGUubGluZVdpZHRoPjAmJihvLmxpbmVXaWR0aChlLmxpbmVXaWR0aCpuKSxlLnZhby5kcmF3KG8uTElORVMsZS5saW5lVmVydGV4Q291bnQsZS52ZXJ0ZXhDb3VudCkpLGUudmFvLnVuYmluZCgpfX12YXIgQz1bWy0xZTgsLTFlOCwtMWU4XSxbMWU4LDFlOCwxZThdXTtmdW5jdGlvbiBQKHQsZSxyLG4sYSxpLG8pe3ZhciBzPXIuZ2w7aWYoKGk9PT1yLnByb2plY3RIYXNBbHBoYXx8bykmJkwoZSxyLG4sYSksaT09PXIuaGFzQWxwaGF8fG8pe3QuYmluZCgpO3ZhciBsPXQudW5pZm9ybXM7bC5tb2RlbD1uLm1vZGVsfHxoLGwudmlldz1uLnZpZXd8fGgsbC5wcm9qZWN0aW9uPW4ucHJvamVjdGlvbnx8aCx5WzBdPTIvcy5kcmF3aW5nQnVmZmVyV2lkdGgseVsxXT0yL3MuZHJhd2luZ0J1ZmZlckhlaWdodCxsLnNjcmVlblNpemU9eSxsLmhpZ2hsaWdodElkPXIuaGlnaGxpZ2h0SWQsbC5oaWdobGlnaHRTY2FsZT1yLmhpZ2hsaWdodFNjYWxlLGwuZnJhZ0NsaXBCb3VuZHM9QyxsLmNsaXBCb3VuZHM9ci5heGVzLmJvdW5kcyxsLm9wYWNpdHk9ci5vcGFjaXR5LGwucGlja0dyb3VwPXIucGlja0lkLzI1NSxsLnBpeGVsUmF0aW89YSxyLnZhby5iaW5kKCksci52YW8uZHJhdyhzLlRSSUFOR0xFUyxyLnZlcnRleENvdW50KSxyLmxpbmVXaWR0aD4wJiYocy5saW5lV2lkdGgoci5saW5lV2lkdGgqYSksci52YW8uZHJhdyhzLkxJTkVTLHIubGluZVZlcnRleENvdW50LHIudmVydGV4Q291bnQpKSxyLnZhby51bmJpbmQoKX19ZnVuY3Rpb24gTyh0LGUscixhKXt2YXIgaTtpPUFycmF5LmlzQXJyYXkodCk/ZTx0Lmxlbmd0aD90W2VdOnZvaWQgMDp0LGk9dShpKTt2YXIgbz0hMDtuKGkpJiYoaT0iXHUyNWJjIixvPSExKTt2YXIgcz1jKGkscixhKTtyZXR1cm57bWVzaDpzWzBdLGxpbmVzOnNbMV0sYm91bmRzOnNbMl0sdmlzaWJsZTpvfX1tLmRyYXc9ZnVuY3Rpb24odCl7UCh0aGlzLnVzZU9ydGhvP3RoaXMub3J0aG9TaGFkZXI6dGhpcy5zaGFkZXIsdGhpcy5wcm9qZWN0U2hhZGVyLHRoaXMsdCx0aGlzLnBpeGVsUmF0aW8sITEsITEpfSxtLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXtQKHRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcix0aGlzLnByb2plY3RTaGFkZXIsdGhpcyx0LHRoaXMucGl4ZWxSYXRpbywhMCwhMSl9LG0uZHJhd1BpY2s9ZnVuY3Rpb24odCl7UCh0aGlzLnVzZU9ydGhvP3RoaXMucGlja09ydGhvU2hhZGVyOnRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyLHRoaXMucGlja1Byb2plY3RTaGFkZXIsdGhpcyx0LDEsITAsITApfSxtLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXQudmFsdWVbMl0rKHQudmFsdWVbMV08PDgpKyh0LnZhbHVlWzBdPDwxNik7aWYoZT49dGhpcy5wb2ludENvdW50fHxlPDApcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5wb2ludHNbZV0sbj10aGlzLl9zZWxlY3RSZXN1bHQ7bi5pbmRleD1lO2Zvcih2YXIgYT0wO2E8MzsrK2Epbi5wb3NpdGlvblthXT1uLmRhdGFDb29yZGluYXRlW2FdPXJbYV07cmV0dXJuIG59LG0uaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPXQuaW5kZXgscj0yNTUmZSxuPWU+PjgmMjU1LGE9ZT4+MTYmMjU1O3RoaXMuaGlnaGxpZ2h0SWQ9W3IvMjU1LG4vMjU1LGEvMjU1LDBdfWVsc2UgdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV19LG0udXBkYXRlPWZ1bmN0aW9uKHQpe2lmKCJwZXJzcGVjdGl2ZSJpbih0PXR8fHt9KSYmKHRoaXMudXNlT3J0aG89IXQucGVyc3BlY3RpdmUpLCJvcnRob2dyYXBoaWMiaW4gdCYmKHRoaXMudXNlT3J0aG89ISF0Lm9ydGhvZ3JhcGhpYyksImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLCJwcm9qZWN0ImluIHQpaWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3QpKXRoaXMuYXhlc1Byb2plY3Q9dC5wcm9qZWN0O2Vsc2V7dmFyIGU9ISF0LnByb2plY3Q7dGhpcy5heGVzUHJvamVjdD1bZSxlLGVdfWlmKCJwcm9qZWN0U2NhbGUiaW4gdClpZihBcnJheS5pc0FycmF5KHQucHJvamVjdFNjYWxlKSl0aGlzLnByb2plY3RTY2FsZT10LnByb2plY3RTY2FsZS5zbGljZSgpO2Vsc2V7dmFyIHI9K3QucHJvamVjdFNjYWxlO3RoaXMucHJvamVjdFNjYWxlPVtyLHIscl19aWYodGhpcy5wcm9qZWN0SGFzQWxwaGE9ITEsInByb2plY3RPcGFjaXR5ImluIHQpe2lmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0T3BhY2l0eSkpdGhpcy5wcm9qZWN0T3BhY2l0eT10LnByb2plY3RPcGFjaXR5LnNsaWNlKCk7ZWxzZXtyPSt0LnByb2plY3RPcGFjaXR5O3RoaXMucHJvamVjdE9wYWNpdHk9W3IscixyXX1mb3IodmFyIG49MDtuPDM7KytuKXRoaXMucHJvamVjdE9wYWNpdHlbbl09Zyh0aGlzLnByb2plY3RPcGFjaXR5W25dKSx0aGlzLnByb2plY3RPcGFjaXR5W25dPDEmJih0aGlzLnByb2plY3RIYXNBbHBoYT0hMCl9dGhpcy5oYXNBbHBoYT0hMSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PWcodC5vcGFjaXR5KSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKSx0aGlzLmRpcnR5PSEwO3ZhciBhLGkscz10LnBvc2l0aW9uLGw9dC5mb250fHwibm9ybWFsIixjPXQuYWxpZ25tZW50fHxbMCwwXTtpZigyPT09Yy5sZW5ndGgpYT1jWzBdLGk9Y1sxXTtlbHNle2E9W10saT1bXTtmb3Iobj0wO248Yy5sZW5ndGg7KytuKWFbbl09Y1tuXVswXSxpW25dPWNbbl1bMV19dmFyIHU9WzEvMCwxLzAsMS8wXSxoPVstMS8wLC0xLzAsLTEvMF0sZj10LmdseXBoLHA9dC5jb2xvcixkPXQuc2l6ZSx2PXQuYW5nbGUsbT10LmxpbmVDb2xvcix5PS0xLHg9MCxiPTAsXz0wO2lmKHMubGVuZ3RoKXtfPXMubGVuZ3RoO3Q6Zm9yKG49MDtuPF87KytuKXtmb3IodmFyIHc9c1tuXSxrPTA7azwzOysraylpZihpc05hTih3W2tdKXx8IWlzRmluaXRlKHdba10pKWNvbnRpbnVlIHQ7dmFyIFQ9KE49TyhmLG4sbCx0aGlzLnBpeGVsUmF0aW8pKS5tZXNoLE09Ti5saW5lcyxBPU4uYm91bmRzO3grPTMqVC5jZWxscy5sZW5ndGgsYis9MipNLmVkZ2VzLmxlbmd0aH19dmFyIFM9eCtiLEU9by5tYWxsb2NGbG9hdCgzKlMpLEw9by5tYWxsb2NGbG9hdCg0KlMpLEM9by5tYWxsb2NGbG9hdCgyKlMpLFA9by5tYWxsb2NVaW50MzIoUyk7aWYoUz4wKXt2YXIgej0wLEk9eCxEPVswLDAsMCwxXSxSPVswLDAsMCwxXSxGPUFycmF5LmlzQXJyYXkocCkmJkFycmF5LmlzQXJyYXkocFswXSksQj1BcnJheS5pc0FycmF5KG0pJiZBcnJheS5pc0FycmF5KG1bMF0pO3Q6Zm9yKG49MDtuPF87KytuKXt5Kz0xO2Zvcih3PXNbbl0saz0wO2s8MzsrK2spe2lmKGlzTmFOKHdba10pfHwhaXNGaW5pdGUod1trXSkpY29udGludWUgdDtoW2tdPU1hdGgubWF4KGhba10sd1trXSksdVtrXT1NYXRoLm1pbih1W2tdLHdba10pfVQ9KE49TyhmLG4sbCx0aGlzLnBpeGVsUmF0aW8pKS5tZXNoLE09Ti5saW5lcyxBPU4uYm91bmRzO3ZhciBOLGo9Ti52aXNpYmxlO2lmKGopaWYoQXJyYXkuaXNBcnJheShwKSl7aWYoMz09PShWPUY/bjxwLmxlbmd0aD9wW25dOlswLDAsMCwwXTpwKS5sZW5ndGgpe2ZvcihrPTA7azwzOysraylEW2tdPVZba107RFszXT0xfWVsc2UgaWYoND09PVYubGVuZ3RoKXtmb3Ioaz0wO2s8NDsrK2spRFtrXT1WW2tdOyF0aGlzLmhhc0FscGhhJiZWWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKX19ZWxzZSBEWzBdPURbMV09RFsyXT0wLERbM109MTtlbHNlIEQ9WzEsMSwxLDBdO2lmKGopaWYoQXJyYXkuaXNBcnJheShtKSl7dmFyIFY7aWYoMz09PShWPUI/bjxtLmxlbmd0aD9tW25dOlswLDAsMCwwXTptKS5sZW5ndGgpe2ZvcihrPTA7azwzOysraylSW2tdPVZba107UltrXT0xfWVsc2UgaWYoND09PVYubGVuZ3RoKXtmb3Ioaz0wO2s8NDsrK2spUltrXT1WW2tdOyF0aGlzLmhhc0FscGhhJiZWWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKX19ZWxzZSBSWzBdPVJbMV09UlsyXT0wLFJbM109MTtlbHNlIFI9WzEsMSwxLDBdO3ZhciBVPS41O2o/QXJyYXkuaXNBcnJheShkKT9VPW48ZC5sZW5ndGg/K2Rbbl06MTI6ZD9VPStkOnRoaXMudXNlT3J0aG8mJihVPTEyKTpVPTA7dmFyIHE9MDtBcnJheS5pc0FycmF5KHYpP3E9bjx2Lmxlbmd0aD8rdltuXTowOnYmJihxPSt2KTt2YXIgSD1NYXRoLmNvcyhxKSxHPU1hdGguc2luKHEpO2Zvcih3PXNbbl0saz0wO2s8MzsrK2spaFtrXT1NYXRoLm1heChoW2tdLHdba10pLHVba109TWF0aC5taW4odVtrXSx3W2tdKTt2YXIgWT1hLFc9aTtZPTA7QXJyYXkuaXNBcnJheShhKT9ZPW48YS5sZW5ndGg/YVtuXTowOmEmJihZPWEpO1c9MDtBcnJheS5pc0FycmF5KGkpP1c9bjxpLmxlbmd0aD9pW25dOjA6aSYmKFc9aSk7dmFyIFg9W1kqPVk+MD8xLUFbMF1bMF06WTwwPzErQVsxXVswXToxLFcqPVc+MD8xLUFbMF1bMV06VzwwPzErQVsxXVsxXToxXSxaPVQuY2VsbHN8fFtdLEo9VC5wb3NpdGlvbnN8fFtdO2ZvcihrPTA7azxaLmxlbmd0aDsrK2spZm9yKHZhciBLPVpba10sUT0wO1E8MzsrK1Epe2Zvcih2YXIgJD0wOyQ8MzsrKyQpRVszKnorJF09d1skXTtmb3IoJD0wOyQ8NDsrKyQpTFs0KnorJF09RFskXTtQW3pdPXk7dmFyIHR0PUpbS1tRXV07Q1syKnpdPVUqKEgqdHRbMF0tRyp0dFsxXStYWzBdKSxDWzIqeisxXT1VKihHKnR0WzBdK0gqdHRbMV0rWFsxXSkseis9MX1mb3IoWj1NLmVkZ2VzLEo9TS5wb3NpdGlvbnMsaz0wO2s8Wi5sZW5ndGg7KytrKWZvcihLPVpba10sUT0wO1E8MjsrK1Epe2ZvcigkPTA7JDwzOysrJClFWzMqSSskXT13WyRdO2ZvcigkPTA7JDw0OysrJClMWzQqSSskXT1SWyRdO1BbSV09eTt0dD1KW0tbUV1dO0NbMipJXT1VKihIKnR0WzBdLUcqdHRbMV0rWFswXSksQ1syKkkrMV09VSooRyp0dFswXStIKnR0WzFdK1hbMV0pLEkrPTF9fX10aGlzLmJvdW5kcz1bdSxoXSx0aGlzLnBvaW50cz1zLHRoaXMucG9pbnRDb3VudD1zLmxlbmd0aCx0aGlzLnZlcnRleENvdW50PXgsdGhpcy5saW5lVmVydGV4Q291bnQ9Yix0aGlzLnBvaW50QnVmZmVyLnVwZGF0ZShFKSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZShMKSx0aGlzLmdseXBoQnVmZmVyLnVwZGF0ZShDKSx0aGlzLmlkQnVmZmVyLnVwZGF0ZShQKSxvLmZyZWUoRSksby5mcmVlKEwpLG8uZnJlZShDKSxvLmZyZWUoUCl9LG0uZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9ydGhvU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tQZXJzcGVjdGl2ZVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrT3J0aG9TaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLnBvaW50QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmdseXBoQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKX19LHsiLi9saWIvZ2V0LXNpbXBsZS1zdHJpbmciOjI5NywiLi9saWIvZ2x5cGhzIjoyOTgsIi4vbGliL3NoYWRlcnMiOjI5OSwiZ2wtYnVmZmVyIjoyNDQsImdsLW1hdDQvbXVsdGlwbHkiOjI3MCwiZ2wtdmFvIjozMjksImlzLXN0cmluZy1ibGFuayI6NDI1LCJ0eXBlZGFycmF5LXBvb2wiOjU0NH1dLDMwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5Iik7ci5ib3hWZXJ0ZXg9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgdmVydGV4O1xuXG51bmlmb3JtIHZlYzIgY29ybmVyQSwgY29ybmVyQjtcblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQobWl4KGNvcm5lckEsIGNvcm5lckIsIHZlcnRleCksIDAsIDEpO1xufVxuIl0pLHIuYm94RnJhZ21lbnQ9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufVxuIl0pfSx7Z2xzbGlmeTo0MTF9XSwzMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksYT10KCJnbC1idWZmZXIiKSxpPXQoIi4vbGliL3NoYWRlcnMiKTtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLmJveEJ1ZmZlcj1lLHRoaXMuYm94U2hhZGVyPXIsdGhpcy5lbmFibGVkPSEwLHRoaXMuc2VsZWN0Qm94PVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMV0sdGhpcy5pbm5lckZpbGw9ITEsdGhpcy5pbm5lckNvbG9yPVswLDAsMCwuMjVdLHRoaXMub3V0ZXJGaWxsPSEwLHRoaXMub3V0ZXJDb2xvcj1bMCwwLDAsLjVdLHRoaXMuYm9yZGVyV2lkdGg9MTB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbCxzPWEocixbMCwwLDAsMSwxLDAsMSwxXSksbD1uKHIsaS5ib3hWZXJ0ZXgsaS5ib3hGcmFnbWVudCksYz1uZXcgbyh0LHMsbCk7cmV0dXJuIGMudXBkYXRlKGUpLHQuYWRkT3ZlcmxheShjKSxjfTt2YXIgcz1vLnByb3RvdHlwZTtzLmRyYXc9ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWQpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2VsZWN0Qm94LHI9dGhpcy5ib3JkZXJXaWR0aCxuPSh0aGlzLmlubmVyRmlsbCx0aGlzLmlubmVyQ29sb3IpLGE9KHRoaXMub3V0ZXJGaWxsLHRoaXMub3V0ZXJDb2xvciksaT10aGlzLmJvcmRlckNvbG9yLG89dC5ib3gscz10LnNjcmVlbkJveCxsPXQuZGF0YUJveCxjPXQudmlld0JveCx1PXQucGl4ZWxSYXRpbyxoPShlWzBdLWxbMF0pKihjWzJdLWNbMF0pLyhsWzJdLWxbMF0pK2NbMF0sZj0oZVsxXS1sWzFdKSooY1szXS1jWzFdKS8obFszXS1sWzFdKStjWzFdLHA9KGVbMl0tbFswXSkqKGNbMl0tY1swXSkvKGxbMl0tbFswXSkrY1swXSxkPShlWzNdLWxbMV0pKihjWzNdLWNbMV0pLyhsWzNdLWxbMV0pK2NbMV07aWYoaD1NYXRoLm1heChoLGNbMF0pLGY9TWF0aC5tYXgoZixjWzFdKSxwPU1hdGgubWluKHAsY1syXSksZD1NYXRoLm1pbihkLGNbM10pLCEocDxofHxkPGYpKXtvLmJpbmQoKTt2YXIgZz1zWzJdLXNbMF0sdj1zWzNdLXNbMV07aWYodGhpcy5vdXRlckZpbGwmJihvLmRyYXdCb3goMCwwLGcsZixhKSxvLmRyYXdCb3goMCxmLGgsZCxhKSxvLmRyYXdCb3goMCxkLGcsdixhKSxvLmRyYXdCb3gocCxmLGcsZCxhKSksdGhpcy5pbm5lckZpbGwmJm8uZHJhd0JveChoLGYscCxkLG4pLHI+MCl7dmFyIG09cip1O28uZHJhd0JveChoLW0sZi1tLHArbSxmK20saSksby5kcmF3Qm94KGgtbSxkLW0scCttLGQrbSxpKSxvLmRyYXdCb3goaC1tLGYtbSxoK20sZCttLGkpLG8uZHJhd0JveChwLW0sZi1tLHArbSxkK20saSl9fX19LHMudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5pbm5lckZpbGw9ISF0LmlubmVyRmlsbCx0aGlzLm91dGVyRmlsbD0hIXQub3V0ZXJGaWxsLHRoaXMuaW5uZXJDb2xvcj0odC5pbm5lckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMub3V0ZXJDb2xvcj0odC5vdXRlckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMuYm9yZGVyQ29sb3I9KHQuYm9yZGVyQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJvcmRlcldpZHRoPXQuYm9yZGVyV2lkdGh8fDAsdGhpcy5zZWxlY3RCb3g9KHQuc2VsZWN0Qm94fHx0aGlzLnNlbGVjdEJveCkuc2xpY2UoKX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5ib3hCdWZmZXIuZGlzcG9zZSgpLHRoaXMuYm94U2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT3ZlcmxheSh0aGlzKX19LHsiLi9saWIvc2hhZGVycyI6MzAxLCJnbC1idWZmZXIiOjI0NCwiZ2wtc2hhZGVyIjozMDR9XSwzMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxpPWVbMV0sbz1uKHQscixpLHt9KSxzPWEubWFsbG9jVWludDgocippKjQpO3JldHVybiBuZXcgYyh0LG8scyl9O3ZhciBuPXQoImdsLWZibyIpLGE9dCgidHlwZWRhcnJheS1wb29sIiksaT10KCJuZGFycmF5Iiksbz10KCJiaXQtdHdpZGRsZSIpLm5leHRQb3cyLHM9dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImFycmF5Iix7b2Zmc2V0OlswLDAsMV0sYXJyYXk6MH0se29mZnNldDpbMCwwLDJdLGFycmF5OjB9LHtvZmZzZXQ6WzAsMCwzXSxhcnJheTowfSwic2NhbGFyIiwic2NhbGFyIiwiaW5kZXgiXSxwcmU6e2JvZHk6Int0aGlzX2Nsb3Nlc3REMj0xZTgsdGhpc19jbG9zZXN0WD0tMSx0aGlzX2Nsb3Nlc3RZPS0xfSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfY2xvc2VzdEQyIiwidGhpc19jbG9zZXN0WCIsInRoaXNfY2xvc2VzdFkiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntpZihfaW5saW5lXzE2X2FyZzBfPDI1NXx8X2lubGluZV8xNl9hcmcxXzwyNTV8fF9pbmxpbmVfMTZfYXJnMl88MjU1fHxfaW5saW5lXzE2X2FyZzNfPDI1NSl7dmFyIF9pbmxpbmVfMTZfbD1faW5saW5lXzE2X2FyZzRfLV9pbmxpbmVfMTZfYXJnNl9bMF0sX2lubGluZV8xNl9hPV9pbmxpbmVfMTZfYXJnNV8tX2lubGluZV8xNl9hcmc2X1sxXSxfaW5saW5lXzE2X2Y9X2lubGluZV8xNl9sKl9pbmxpbmVfMTZfbCtfaW5saW5lXzE2X2EqX2lubGluZV8xNl9hO19pbmxpbmVfMTZfZjx0aGlzX2Nsb3Nlc3REMiYmKHRoaXNfY2xvc2VzdEQyPV9pbmxpbmVfMTZfZix0aGlzX2Nsb3Nlc3RYPV9pbmxpbmVfMTZfYXJnNl9bMF0sdGhpc19jbG9zZXN0WT1faW5saW5lXzE2X2FyZzZfWzFdKX19IixhcmdzOlt7bmFtZToiX2lubGluZV8xNl9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xNl9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xNl9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xNl9hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xNl9hcmc0XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xNl9hcmc1XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xNl9hcmc2XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sdGhpc1ZhcnM6WyJ0aGlzX2Nsb3Nlc3REMiIsInRoaXNfY2xvc2VzdFgiLCJ0aGlzX2Nsb3Nlc3RZIl0sbG9jYWxWYXJzOlsiX2lubGluZV8xNl9hIiwiX2lubGluZV8xNl9mIiwiX2lubGluZV8xNl9sIl19LHBvc3Q6e2JvZHk6IntyZXR1cm5bdGhpc19jbG9zZXN0WCx0aGlzX2Nsb3Nlc3RZLHRoaXNfY2xvc2VzdEQyXX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2Nsb3Nlc3REMiIsInRoaXNfY2xvc2VzdFgiLCJ0aGlzX2Nsb3Nlc3RZIl0sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZToiY3dpc2UiLGJsb2NrU2l6ZTo2NH0pO2Z1bmN0aW9uIGwodCxlLHIsbixhKXt0aGlzLmNvb3JkPVt0LGVdLHRoaXMuaWQ9cix0aGlzLnZhbHVlPW4sdGhpcy5kaXN0YW5jZT1hfWZ1bmN0aW9uIGModCxlLHIpe3RoaXMuZ2w9dCx0aGlzLmZibz1lLHRoaXMuYnVmZmVyPXIsdGhpcy5fcmVhZFRpbWVvdXQ9bnVsbDt2YXIgbj10aGlzO3RoaXMuX3JlYWRDYWxsYmFjaz1mdW5jdGlvbigpe24uZ2wmJihlLmJpbmQoKSx0LnJlYWRQaXhlbHMoMCwwLGUuc2hhcGVbMF0sZS5zaGFwZVsxXSx0LlJHQkEsdC5VTlNJR05FRF9CWVRFLG4uYnVmZmVyKSxuLl9yZWFkVGltZW91dD1udWxsKX19dmFyIHU9Yy5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHUsInNoYXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2w/dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTpbMCwwXX0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuZ2wpe3RoaXMuZmJvLnNoYXBlPXQ7dmFyIGU9dGhpcy5mYm8uc2hhcGVbMF0scj10aGlzLmZiby5zaGFwZVsxXTtpZihyKmUqND50aGlzLmJ1ZmZlci5sZW5ndGgpe2EuZnJlZSh0aGlzLmJ1ZmZlcik7Zm9yKHZhciBuPXRoaXMuYnVmZmVyPWEubWFsbG9jVWludDgobyhyKmUqNCkpLGk9MDtpPHIqZSo0OysraSluW2ldPTI1NX1yZXR1cm4gdH19fSksdS5iZWdpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7dGhpcy5zaGFwZTt0JiYodGhpcy5mYm8uYmluZCgpLHQuY2xlYXJDb2xvcigxLDEsMSwxKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVHx0LkRFUFRIX0JVRkZFUl9CSVQpKX0sdS5lbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3QmJih0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHRoaXMuX3JlYWRUaW1lb3V0fHxjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpLHRoaXMuX3JlYWRUaW1lb3V0PXNldFRpbWVvdXQodGhpcy5fcmVhZENhbGxiYWNrLDEpKX0sdS5xdWVyeT1mdW5jdGlvbih0LGUscil7aWYoIXRoaXMuZ2wpcmV0dXJuIG51bGw7dmFyIG49dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTt0fD0wLGV8PTAsIm51bWJlciIhPXR5cGVvZiByJiYocj0xKTt2YXIgYT0wfE1hdGgubWluKE1hdGgubWF4KHQtciwwKSxuWzBdKSxvPTB8TWF0aC5taW4oTWF0aC5tYXgodCtyLDApLG5bMF0pLGM9MHxNYXRoLm1pbihNYXRoLm1heChlLXIsMCksblsxXSksdT0wfE1hdGgubWluKE1hdGgubWF4KGUrciwwKSxuWzFdKTtpZihvPD1hfHx1PD1jKXJldHVybiBudWxsO3ZhciBoPVtvLWEsdS1jXSxmPWkodGhpcy5idWZmZXIsW2hbMF0saFsxXSw0XSxbNCw0Km5bMF0sMV0sNCooYStuWzBdKmMpKSxwPXMoZi5oaShoWzBdLGhbMV0sMSkscixyKSxkPXBbMF0sZz1wWzFdO3JldHVybiBkPDB8fE1hdGgucG93KHRoaXMucmFkaXVzLDIpPHBbMl0/bnVsbDpuZXcgbChkK2F8MCxnK2N8MCxmLmdldChkLGcsMCksW2YuZ2V0KGQsZywxKSxmLmdldChkLGcsMiksZi5nZXQoZCxnLDMpXSxNYXRoLnNxcnQocFsyXSkpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsJiYodGhpcy5mYm8uZGlzcG9zZSgpLGEuZnJlZSh0aGlzLmJ1ZmZlciksdGhpcy5nbD1udWxsLHRoaXMuX3JlYWRUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpKX19LHsiYml0LXR3aWRkbGUiOjk0LCJjd2lzZS9saWIvd3JhcHBlciI6MTUxLCJnbC1mYm8iOjI1MixuZGFycmF5OjQ1MiwidHlwZWRhcnJheS1wb29sIjo1NDR9XSwzMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvY3JlYXRlLXVuaWZvcm1zIiksYT10KCIuL2xpYi9jcmVhdGUtYXR0cmlidXRlcyIpLGk9dCgiLi9saWIvcmVmbGVjdCIpLG89dCgiLi9saWIvc2hhZGVyLWNhY2hlIikscz10KCIuL2xpYi9ydW50aW1lLXJlZmxlY3QiKSxsPXQoIi4vbGliL0dMRXJyb3IiKTtmdW5jdGlvbiBjKHQpe3RoaXMuZ2w9dCx0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD0wLHRoaXMuX3ZyZWY9dGhpcy5fZnJlZj10aGlzLl9yZWxpbms9dGhpcy52ZXJ0U2hhZGVyPXRoaXMuZnJhZ1NoYWRlcj10aGlzLnByb2dyYW09dGhpcy5hdHRyaWJ1dGVzPXRoaXMudW5pZm9ybXM9dGhpcy50eXBlcz1udWxsfXZhciB1PWMucHJvdG90eXBlO2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5uYW1lPGUubmFtZT8tMToxfXUuYmluZD1mdW5jdGlvbigpe3ZhciB0O3RoaXMucHJvZ3JhbXx8dGhpcy5fcmVsaW5rKCk7dmFyIGU9dGhpcy5nbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSx0aGlzLmdsLkFDVElWRV9BVFRSSUJVVEVTKSxyPXRoaXMuZ2wubGFzdEF0dHJpYkNvdW50O2lmKGU+cilmb3IodD1yO3Q8ZTt0KyspdGhpcy5nbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh0KTtlbHNlIGlmKHI+ZSlmb3IodD1lO3Q8cjt0KyspdGhpcy5nbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodCk7dGhpcy5nbC5sYXN0QXR0cmliQ291bnQ9ZSx0aGlzLmdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZ2wubGFzdEF0dHJpYkNvdW50LGU9MDtlPHQ7ZSsrKXRoaXMuZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpO3RoaXMuZ2wubGFzdEF0dHJpYkNvdW50PTAsdGhpcy5fZnJlZiYmdGhpcy5fZnJlZi5kaXNwb3NlKCksdGhpcy5fdnJlZiYmdGhpcy5fdnJlZi5kaXNwb3NlKCksdGhpcy5hdHRyaWJ1dGVzPXRoaXMudHlwZXM9dGhpcy52ZXJ0U2hhZGVyPXRoaXMuZnJhZ1NoYWRlcj10aGlzLnByb2dyYW09dGhpcy5fcmVsaW5rPXRoaXMuX2ZyZWY9dGhpcy5fdnJlZj1udWxsfSx1LnVwZGF0ZT1mdW5jdGlvbih0LGUscixjKXtpZighZXx8MT09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciB1PXQ7dD11LnZlcnRleCxlPXUuZnJhZ21lbnQscj11LnVuaWZvcm1zLGM9dS5hdHRyaWJ1dGVzfXZhciBmPXRoaXMscD1mLmdsLGQ9Zi5fdnJlZjtmLl92cmVmPW8uc2hhZGVyKHAscC5WRVJURVhfU0hBREVSLHQpLGQmJmQuZGlzcG9zZSgpLGYudmVydFNoYWRlcj1mLl92cmVmLnNoYWRlcjt2YXIgZz10aGlzLl9mcmVmO2lmKGYuX2ZyZWY9by5zaGFkZXIocCxwLkZSQUdNRU5UX1NIQURFUixlKSxnJiZnLmRpc3Bvc2UoKSxmLmZyYWdTaGFkZXI9Zi5fZnJlZi5zaGFkZXIsIXJ8fCFjKXt2YXIgdj1wLmNyZWF0ZVByb2dyYW0oKTtpZihwLmF0dGFjaFNoYWRlcih2LGYuZnJhZ1NoYWRlcikscC5hdHRhY2hTaGFkZXIodixmLnZlcnRTaGFkZXIpLHAubGlua1Byb2dyYW0odiksIXAuZ2V0UHJvZ3JhbVBhcmFtZXRlcih2LHAuTElOS19TVEFUVVMpKXt2YXIgbT1wLmdldFByb2dyYW1JbmZvTG9nKHYpO3Rocm93IG5ldyBsKG0sIkVycm9yIGxpbmtpbmcgcHJvZ3JhbToiK20pfXI9cnx8cy51bmlmb3JtcyhwLHYpLGM9Y3x8cy5hdHRyaWJ1dGVzKHAsdikscC5kZWxldGVQcm9ncmFtKHYpfShjPWMuc2xpY2UoKSkuc29ydChoKTt2YXIgeSx4PVtdLGI9W10sXz1bXTtmb3IoeT0wO3k8Yy5sZW5ndGg7Kyt5KXt2YXIgdz1jW3ldO2lmKHcudHlwZS5pbmRleE9mKCJtYXQiKT49MCl7Zm9yKHZhciBrPTB8dy50eXBlLmNoYXJBdCh3LnR5cGUubGVuZ3RoLTEpLFQ9bmV3IEFycmF5KGspLE09MDtNPGs7KytNKVRbTV09Xy5sZW5ndGgsYi5wdXNoKHcubmFtZSsiWyIrTSsiXSIpLCJudW1iZXIiPT10eXBlb2Ygdy5sb2NhdGlvbj9fLnB1c2gody5sb2NhdGlvbitNKTpBcnJheS5pc0FycmF5KHcubG9jYXRpb24pJiZ3LmxvY2F0aW9uLmxlbmd0aD09PWsmJiJudW1iZXIiPT10eXBlb2Ygdy5sb2NhdGlvbltNXT9fLnB1c2goMHx3LmxvY2F0aW9uW01dKTpfLnB1c2goLTEpO3gucHVzaCh7bmFtZTp3Lm5hbWUsdHlwZTp3LnR5cGUsbG9jYXRpb25zOlR9KX1lbHNlIHgucHVzaCh7bmFtZTp3Lm5hbWUsdHlwZTp3LnR5cGUsbG9jYXRpb25zOltfLmxlbmd0aF19KSxiLnB1c2gody5uYW1lKSwibnVtYmVyIj09dHlwZW9mIHcubG9jYXRpb24/Xy5wdXNoKDB8dy5sb2NhdGlvbik6Xy5wdXNoKC0xKX12YXIgQT0wO2Zvcih5PTA7eTxfLmxlbmd0aDsrK3kpaWYoX1t5XTwwKXtmb3IoO18uaW5kZXhPZihBKT49MDspQSs9MTtfW3ldPUF9dmFyIFM9bmV3IEFycmF5KHIubGVuZ3RoKTtmdW5jdGlvbiBFKCl7Zi5wcm9ncmFtPW8ucHJvZ3JhbShwLGYuX3ZyZWYsZi5fZnJlZixiLF8pO2Zvcih2YXIgdD0wO3Q8ci5sZW5ndGg7Kyt0KVNbdF09cC5nZXRVbmlmb3JtTG9jYXRpb24oZi5wcm9ncmFtLHJbdF0ubmFtZSl9RSgpLGYuX3JlbGluaz1FLGYudHlwZXM9e3VuaWZvcm1zOmkociksYXR0cmlidXRlczppKGMpfSxmLmF0dHJpYnV0ZXM9YShwLGYseCxfKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwidW5pZm9ybXMiLG4ocCxmLHIsUykpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgaT1uZXcgYyh0KTtyZXR1cm4gaS51cGRhdGUoZSxyLG4sYSksaX19LHsiLi9saWIvR0xFcnJvciI6MzA1LCIuL2xpYi9jcmVhdGUtYXR0cmlidXRlcyI6MzA2LCIuL2xpYi9jcmVhdGUtdW5pZm9ybXMiOjMwNywiLi9saWIvcmVmbGVjdCI6MzA4LCIuL2xpYi9ydW50aW1lLXJlZmxlY3QiOjMwOSwiLi9saWIvc2hhZGVyLWNhY2hlIjozMTB9XSwzMDU6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnNob3J0TWVzc2FnZT1lfHwiIix0aGlzLmxvbmdNZXNzYWdlPXJ8fCIiLHRoaXMucmF3RXJyb3I9dHx8IiIsdGhpcy5tZXNzYWdlPSJnbC1zaGFkZXI6ICIrKGV8fHR8fCIiKSsocj8iXG4iK3I6IiIpLHRoaXMuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2t9bi5wcm90b3R5cGU9bmV3IEVycm9yLG4ucHJvdG90eXBlLm5hbWU9IkdMRXJyb3IiLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4sZS5leHBvcnRzPW59LHt9XSwzMDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2Zvcih2YXIgaT17fSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKXt2YXIgdT1yW2xdLGg9dS5uYW1lLGY9dS50eXBlLHA9dS5sb2NhdGlvbnM7c3dpdGNoKGYpe2Nhc2UiYm9vbCI6Y2FzZSJpbnQiOmNhc2UiZmxvYXQiOm8odCxlLHBbMF0sYSwxLGksaCk7YnJlYWs7ZGVmYXVsdDppZihmLmluZGV4T2YoInZlYyIpPj0wKXt2YXIgZD1mLmNoYXJDb2RlQXQoZi5sZW5ndGgtMSktNDg7aWYoZDwyfHxkPjQpdGhyb3cgbmV3IG4oIiIsIkludmFsaWQgZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgIitoKyI6ICIrZik7byh0LGUscFswXSxhLGQsaSxoKX1lbHNle2lmKCEoZi5pbmRleE9mKCJtYXQiKT49MCkpdGhyb3cgbmV3IG4oIiIsIlVua25vd24gZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgIitoKyI6ICIrZik7dmFyIGQ9Zi5jaGFyQ29kZUF0KGYubGVuZ3RoLTEpLTQ4O2lmKGQ8Mnx8ZD40KXRocm93IG5ldyBuKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIraCsiOiAiK2YpO3ModCxlLHAsYSxkLGksaCl9fX1yZXR1cm4gaX07dmFyIG49dCgiLi9HTEVycm9yIik7ZnVuY3Rpb24gYSh0LGUscixuLGEsaSl7dGhpcy5fZ2w9dCx0aGlzLl93cmFwcGVyPWUsdGhpcy5faW5kZXg9cix0aGlzLl9sb2NhdGlvbnM9bix0aGlzLl9kaW1lbnNpb249YSx0aGlzLl9jb25zdEZ1bmM9aX12YXIgaT1hLnByb3RvdHlwZTtmdW5jdGlvbiBvKHQsZSxyLG4saSxvLHMpe2Zvcih2YXIgbD1bImdsIiwidiJdLGM9W10sdT0wO3U8aTsrK3UpbC5wdXNoKCJ4Iit1KSxjLnB1c2goIngiK3UpO2wucHVzaCgiaWYoeDAubGVuZ3RoPT09dm9pZCAwKXtyZXR1cm4gZ2wudmVydGV4QXR0cmliIitpKyJmKHYsIitjLmpvaW4oKSsiKX1lbHNle3JldHVybiBnbC52ZXJ0ZXhBdHRyaWIiK2krImZ2KHYseDApfSIpO3ZhciBoPUZ1bmN0aW9uLmFwcGx5KG51bGwsbCksZj1uZXcgYSh0LGUscixuLGksaCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG8scyx7c2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShuW3JdKSxoKHQsbltyXSxlKSxlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sZW51bWVyYWJsZTohMH0pfWZ1bmN0aW9uIHModCxlLHIsbixhLGkscyl7Zm9yKHZhciBsPW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKSx1PTA7dTxhOysrdSlvKHQsZSxyW3VdLG4sYSxsLHUpLGNbdV09bFt1XTtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwibG9jYXRpb24iLHtzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGU9MDtlPGE7KytlKWNbZV0ubG9jYXRpb249dFtlXTtlbHNlIGZvcihlPTA7ZTxhOysrZSljW2VdLmxvY2F0aW9uPXQrZTtyZXR1cm4gdH0sZ2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBBcnJheShhKSxlPTA7ZTxhOysrZSl0W2VdPW5bcltlXV07cmV0dXJuIHR9LGVudW1lcmFibGU6ITB9KSxsLnBvaW50ZXI9ZnVuY3Rpb24oZSxpLG8scyl7ZT1lfHx0LkZMT0FULGk9ISFpLG89b3x8YSphLHM9c3x8MDtmb3IodmFyIGw9MDtsPGE7KytsKXt2YXIgYz1uW3JbbF1dO3QudmVydGV4QXR0cmliUG9pbnRlcihjLGEsZSxpLG8scytsKmEpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYyl9fTt2YXIgaD1uZXcgQXJyYXkoYSksZj10WyJ2ZXJ0ZXhBdHRyaWIiK2ErImZ2Il07T2JqZWN0LmRlZmluZVByb3BlcnR5KGkscyx7c2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgaT0wO2k8YTsrK2kpe3ZhciBvPW5bcltpXV07aWYodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobyksQXJyYXkuaXNBcnJheShlWzBdKSlmLmNhbGwodCxvLGVbaV0pO2Vsc2V7Zm9yKHZhciBzPTA7czxhOysrcyloW3NdPWVbYSppK3NdO2YuY2FsbCh0LG8saCl9fXJldHVybiBlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sZW51bWVyYWJsZTohMH0pfWkucG9pbnRlcj1mdW5jdGlvbih0LGUscixuKXt2YXIgYT10aGlzLl9nbCxpPXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF07YS52ZXJ0ZXhBdHRyaWJQb2ludGVyKGksdGhpcy5fZGltZW5zaW9uLHR8fGEuRkxPQVQsISFlLHJ8fDAsbnx8MCksYS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX0saS5zZXQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuX2NvbnN0RnVuYyh0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdLHQsZSxyLG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwibG9jYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0IT09dGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSYmKHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF09MHx0LHRoaXMuX3dyYXBwZXIucHJvZ3JhbT1udWxsKSwwfHR9fSl9LHsiLi9HTEVycm9yIjozMDV9XSwzMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9yZWZsZWN0IiksYT10KCIuL0dMRXJyb3IiKTtmdW5jdGlvbiBpKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oInkiLCJyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4geX0iKSh0KX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwodCxlLHIpe3N3aXRjaChyKXtjYXNlImJvb2wiOmNhc2UiaW50IjpjYXNlInNhbXBsZXIyRCI6Y2FzZSJzYW1wbGVyQ3ViZSI6cmV0dXJuImdsLnVuaWZvcm0xaShsb2NhdGlvbnNbIitlKyJdLG9iaiIrdCsiKSI7Y2FzZSJmbG9hdCI6cmV0dXJuImdsLnVuaWZvcm0xZihsb2NhdGlvbnNbIitlKyJdLG9iaiIrdCsiKSI7ZGVmYXVsdDp2YXIgbj1yLmluZGV4T2YoInZlYyIpO2lmKCEoMDw9biYmbjw9MSYmci5sZW5ndGg9PT00K24pKXtpZigwPT09ci5pbmRleE9mKCJtYXQiKSYmND09PXIubGVuZ3RoKXt2YXIgaT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSktNDg7aWYoaTwyfHxpPjQpdGhyb3cgbmV3IGEoIiIsIkludmFsaWQgdW5pZm9ybSBkaW1lbnNpb24gdHlwZSBmb3IgbWF0cml4ICIrbmFtZSsiOiAiK3IpO3JldHVybiJnbC51bmlmb3JtTWF0cml4IitpKyJmdihsb2NhdGlvbnNbIitlKyJdLGZhbHNlLG9iaiIrdCsiKSJ9dGhyb3cgbmV3IGEoIiIsIlVua25vd24gdW5pZm9ybSBkYXRhIHR5cGUgZm9yICIrbmFtZSsiOiAiK3IpfXZhciBpPXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKS00ODtpZihpPDJ8fGk+NCl0aHJvdyBuZXcgYSgiIiwiSW52YWxpZCBkYXRhIHR5cGUiKTtzd2l0Y2goci5jaGFyQXQoMCkpe2Nhc2UiYiI6Y2FzZSJpIjpyZXR1cm4iZ2wudW5pZm9ybSIraSsiaXYobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2Nhc2UidiI6cmV0dXJuImdsLnVuaWZvcm0iK2krImZ2KGxvY2F0aW9uc1siK2UrIl0sb2JqIit0KyIpIjtkZWZhdWx0OnRocm93IG5ldyBhKCIiLCJVbnJlY29nbml6ZWQgZGF0YSB0eXBlIGZvciB2ZWN0b3IgIituYW1lKyI6ICIrcil9fX1mdW5jdGlvbiBjKGUpe2Zvcih2YXIgbj1bInJldHVybiBmdW5jdGlvbiB1cGRhdGVQcm9wZXJ0eShvYmopeyJdLGE9ZnVuY3Rpb24gdChlLHIpe2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm5bW2Uscl1dO3ZhciBuPVtdO2Zvcih2YXIgYSBpbiByKXt2YXIgaT1yW2FdLG89ZTtwYXJzZUludChhKSsiIj09PWE/bys9IlsiK2ErIl0iOm8rPSIuIithLCJvYmplY3QiPT10eXBlb2YgaT9uLnB1c2guYXBwbHkobix0KG8saSkpOm4ucHVzaChbbyxpXSl9cmV0dXJuIG59KCIiLGUpLGk9MDtpPGEubGVuZ3RoOysraSl7dmFyIG89YVtpXSxjPW9bMF0sdT1vWzFdO3NbdV0mJm4ucHVzaChsKGMsdSxyW3VdLnR5cGUpKX1uLnB1c2goInJldHVybiBvYmp9Iik7dmFyIGg9bmV3IEZ1bmN0aW9uKCJnbCIsImxvY2F0aW9ucyIsbi5qb2luKCJcbiIpKTtyZXR1cm4gaCh0LHMpfWZ1bmN0aW9uIHUobixsLHUpe2lmKCJvYmplY3QiPT10eXBlb2YgdSl7dmFyIGY9aCh1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkobixsLHtnZXQ6aShmKSxzZXQ6Yyh1KSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pfWVsc2Ugc1t1XT9PYmplY3QuZGVmaW5lUHJvcGVydHkobixsLHtnZXQ6KHA9dSxkPW5ldyBGdW5jdGlvbigiZ2wiLCJ3cmFwcGVyIiwibG9jYXRpb25zIiwicmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGdsLmdldFVuaWZvcm0od3JhcHBlci5wcm9ncmFtLGxvY2F0aW9uc1siK3ArIl0pfSIpLGQodCxlLHMpKSxzZXQ6Yyh1KSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pOm5bbF09ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiYm9vbCI6cmV0dXJuITE7Y2FzZSJpbnQiOmNhc2Uic2FtcGxlcjJEIjpjYXNlInNhbXBsZXJDdWJlIjpjYXNlImZsb2F0IjpyZXR1cm4gMDtkZWZhdWx0OnZhciBlPXQuaW5kZXhPZigidmVjIik7aWYoMDw9ZSYmZTw9MSYmdC5sZW5ndGg9PT00K2Upe3ZhciByPXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKS00ODtpZihyPDJ8fHI+NCl0aHJvdyBuZXcgYSgiIiwiSW52YWxpZCBkYXRhIHR5cGUiKTtyZXR1cm4iYiI9PT10LmNoYXJBdCgwKT9vKHIsITEpOm8ociwwKX1pZigwPT09dC5pbmRleE9mKCJtYXQiKSYmND09PXQubGVuZ3RoKXt2YXIgcj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSktNDg7aWYocjwyfHxyPjQpdGhyb3cgbmV3IGEoIiIsIkludmFsaWQgdW5pZm9ybSBkaW1lbnNpb24gdHlwZSBmb3IgbWF0cml4ICIrbmFtZSsiOiAiK3QpO3JldHVybiBvKHIqciwwKX10aHJvdyBuZXcgYSgiIiwiVW5rbm93biB1bmlmb3JtIGRhdGEgdHlwZSBmb3IgIituYW1lKyI6ICIrdCl9fShyW3VdLnR5cGUpO3ZhciBwLGR9ZnVuY3Rpb24gaCh0KXt2YXIgZTtpZihBcnJheS5pc0FycmF5KHQpKXtlPW5ldyBBcnJheSh0Lmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdShlLHIsdFtyXSl9ZWxzZSBmb3IodmFyIG4gaW4gZT17fSx0KXUoZSxuLHRbbl0pO3JldHVybiBlfXZhciBmPW4ociwhMCk7cmV0dXJue2dldDppKGgoZikpLHNldDpjKGYpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfX19LHsiLi9HTEVycm9yIjozMDUsIi4vcmVmbGVjdCI6MzA4fV0sMzA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0ubmFtZSxpPWEuc3BsaXQoIi4iKSxvPXIscz0wO3M8aS5sZW5ndGg7KytzKXt2YXIgbD1pW3NdLnNwbGl0KCJbIik7aWYobC5sZW5ndGg+MSl7bFswXWluIG98fChvW2xbMF1dPVtdKSxvPW9bbFswXV07Zm9yKHZhciBjPTE7YzxsLmxlbmd0aDsrK2Mpe3ZhciB1PXBhcnNlSW50KGxbY10pO2M8bC5sZW5ndGgtMXx8czxpLmxlbmd0aC0xPyh1IGluIG98fChjPGwubGVuZ3RoLTE/b1t1XT1bXTpvW3VdPXt9KSxvPW9bdV0pOm9bdV09ZT9uOnRbbl0udHlwZX19ZWxzZSBzPGkubGVuZ3RoLTE/KGxbMF1pbiBvfHwob1tsWzBdXT17fSksbz1vW2xbMF1dKTpvW2xbMF1dPWU/bjp0W25dLnR5cGV9cmV0dXJuIHJ9fSx7fV0sMzA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IudW5pZm9ybXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsdC5BQ1RJVkVfVU5JRk9STVMpLG49W10sYT0wO2E8cjsrK2Epe3ZhciBvPXQuZ2V0QWN0aXZlVW5pZm9ybShlLGEpO2lmKG8pe3ZhciBzPWkodCxvLnR5cGUpO2lmKG8uc2l6ZT4xKWZvcih2YXIgbD0wO2w8by5zaXplOysrbCluLnB1c2goe25hbWU6by5uYW1lLnJlcGxhY2UoIlswXSIsIlsiK2wrIl0iKSx0eXBlOnN9KTtlbHNlIG4ucHVzaCh7bmFtZTpvLm5hbWUsdHlwZTpzfSl9fXJldHVybiBufSxyLmF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsdC5BQ1RJVkVfQVRUUklCVVRFUyksbj1bXSxhPTA7YTxyOysrYSl7dmFyIG89dC5nZXRBY3RpdmVBdHRyaWIoZSxhKTtvJiZuLnB1c2goe25hbWU6by5uYW1lLHR5cGU6aSh0LG8udHlwZSl9KX1yZXR1cm4gbn07dmFyIG49e0ZMT0FUOiJmbG9hdCIsRkxPQVRfVkVDMjoidmVjMiIsRkxPQVRfVkVDMzoidmVjMyIsRkxPQVRfVkVDNDoidmVjNCIsSU5UOiJpbnQiLElOVF9WRUMyOiJpdmVjMiIsSU5UX1ZFQzM6Iml2ZWMzIixJTlRfVkVDNDoiaXZlYzQiLEJPT0w6ImJvb2wiLEJPT0xfVkVDMjoiYnZlYzIiLEJPT0xfVkVDMzoiYnZlYzMiLEJPT0xfVkVDNDoiYnZlYzQiLEZMT0FUX01BVDI6Im1hdDIiLEZMT0FUX01BVDM6Im1hdDMiLEZMT0FUX01BVDQ6Im1hdDQiLFNBTVBMRVJfMkQ6InNhbXBsZXIyRCIsU0FNUExFUl9DVUJFOiJzYW1wbGVyQ3ViZSJ9LGE9bnVsbDtmdW5jdGlvbiBpKHQsZSl7aWYoIWEpe3ZhciByPU9iamVjdC5rZXlzKG4pO2E9e307Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBvPXJbaV07YVt0W29dXT1uW29dfX1yZXR1cm4gYVtlXX19LHt9XSwzMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5zaGFkZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB1KHQpLmdldFNoYWRlclJlZmVyZW5jZShlLHIpfSxyLnByb2dyYW09ZnVuY3Rpb24odCxlLHIsbixhKXtyZXR1cm4gdSh0KS5nZXRQcm9ncmFtKGUscixuLGEpfTt2YXIgbj10KCIuL0dMRXJyb3IiKSxhPXQoImdsLWZvcm1hdC1jb21waWxlci1lcnJvciIpLGk9bmV3KCJ1bmRlZmluZWQiPT10eXBlb2YgV2Vha01hcD90KCJ3ZWFrbWFwLXNoaW0iKTpXZWFrTWFwKSxvPTA7ZnVuY3Rpb24gcyh0LGUscixuLGEsaSxvKXt0aGlzLmlkPXQsdGhpcy5zcmM9ZSx0aGlzLnR5cGU9cix0aGlzLnNoYWRlcj1uLHRoaXMuY291bnQ9aSx0aGlzLnByb2dyYW1zPVtdLHRoaXMuY2FjaGU9b31mdW5jdGlvbiBsKHQpe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcnM9W3t9LHt9XSx0aGlzLnByb2dyYW1zPXt9fXMucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtpZigwPT0tLXRoaXMuY291bnQpe2Zvcih2YXIgdD10aGlzLmNhY2hlLGU9dC5nbCxyPXRoaXMucHJvZ3JhbXMsbj0wLGE9ci5sZW5ndGg7bjxhOysrbil7dmFyIGk9dC5wcm9ncmFtc1tyW25dXTtpJiYoZGVsZXRlIHQucHJvZ3JhbXNbbl0sZS5kZWxldGVQcm9ncmFtKGkpKX1lLmRlbGV0ZVNoYWRlcih0aGlzLnNoYWRlciksZGVsZXRlIHQuc2hhZGVyc1t0aGlzLnR5cGU9PT1lLkZSQUdNRU5UX1NIQURFUnwwXVt0aGlzLnNyY119fTt2YXIgYz1sLnByb3RvdHlwZTtmdW5jdGlvbiB1KHQpe3ZhciBlPWkuZ2V0KHQpO3JldHVybiBlfHwoZT1uZXcgbCh0KSxpLnNldCh0LGUpKSxlfWMuZ2V0U2hhZGVyUmVmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nbCxpPXRoaXMuc2hhZGVyc1t0PT09ci5GUkFHTUVOVF9TSEFERVJ8MF0sbD1pW2VdO2lmKGwmJnIuaXNTaGFkZXIobC5zaGFkZXIpKWwuY291bnQrPTE7ZWxzZXt2YXIgYz1mdW5jdGlvbih0LGUscil7dmFyIGk9dC5jcmVhdGVTaGFkZXIoZSk7aWYodC5zaGFkZXJTb3VyY2UoaSxyKSx0LmNvbXBpbGVTaGFkZXIoaSksIXQuZ2V0U2hhZGVyUGFyYW1ldGVyKGksdC5DT01QSUxFX1NUQVRVUykpe3ZhciBvPXQuZ2V0U2hhZGVySW5mb0xvZyhpKTt0cnl7dmFyIHM9YShvLHIsZSl9Y2F0Y2godCl7dGhyb3cgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gZm9ybWF0IGNvbXBpbGVyIGVycm9yOiAiK3QpLG5ldyBuKG8sIkVycm9yIGNvbXBpbGluZyBzaGFkZXI6XG4iK28pfXRocm93IG5ldyBuKG8scy5zaG9ydCxzLmxvbmcpfXJldHVybiBpfShyLHQsZSk7bD1pW2VdPW5ldyBzKG8rKyxlLHQsYyxbXSwxLHRoaXMpfXJldHVybiBsfSxjLmdldFByb2dyYW09ZnVuY3Rpb24odCxlLHIsYSl7dmFyIGk9W3QuaWQsZS5pZCxyLmpvaW4oIjoiKSxhLmpvaW4oIjoiKV0uam9pbigiQCIpLG89dGhpcy5wcm9ncmFtc1tpXTtyZXR1cm4gbyYmdGhpcy5nbC5pc1Byb2dyYW0obyl8fCh0aGlzLnByb2dyYW1zW2ldPW89ZnVuY3Rpb24odCxlLHIsYSxpKXt2YXIgbz10LmNyZWF0ZVByb2dyYW0oKTt0LmF0dGFjaFNoYWRlcihvLGUpLHQuYXR0YWNoU2hhZGVyKG8scik7Zm9yKHZhciBzPTA7czxhLmxlbmd0aDsrK3MpdC5iaW5kQXR0cmliTG9jYXRpb24obyxpW3NdLGFbc10pO2lmKHQubGlua1Byb2dyYW0obyksIXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihvLHQuTElOS19TVEFUVVMpKXt2YXIgbD10LmdldFByb2dyYW1JbmZvTG9nKG8pO3Rocm93IG5ldyBuKGwsIkVycm9yIGxpbmtpbmcgcHJvZ3JhbTogIitsKX1yZXR1cm4gb30odGhpcy5nbCx0LnNoYWRlcixlLnNoYWRlcixyLGEpLHQucHJvZ3JhbXMucHVzaChpKSxlLnByb2dyYW1zLnB1c2goaSkpLG99fSx7Ii4vR0xFcnJvciI6MzA1LCJnbC1mb3JtYXQtY29tcGlsZXItZXJyb3IiOjI1Mywid2Vha21hcC1zaGltIjo1NTR9XSwzMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLnBsb3Q9dCx0aGlzLmVuYWJsZT1bITAsITAsITEsITFdLHRoaXMud2lkdGg9WzEsMSwxLDFdLHRoaXMuY29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5jZW50ZXI9WzEvMCwxLzBdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBuKHQpO3JldHVybiByLnVwZGF0ZShlKSx0LmFkZE92ZXJsYXkocikscn07dmFyIGE9bi5wcm90b3R5cGU7YS51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmVuYWJsZT0odC5lbmFibGV8fFshMCwhMCwhMSwhMV0pLnNsaWNlKCksdGhpcy53aWR0aD0odC53aWR0aHx8WzEsMSwxLDFdKS5zbGljZSgpLHRoaXMuY29sb3I9KHQuY29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pLHRoaXMuY2VudGVyPSh0LmNlbnRlcnx8WzEvMCwxLzBdKS5zbGljZSgpLHRoaXMucGxvdC5zZXRPdmVybGF5RGlydHkoKX0sYS5kcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbmFibGUsZT10aGlzLndpZHRoLHI9dGhpcy5jb2xvcixuPXRoaXMuY2VudGVyLGE9dGhpcy5wbG90LGk9YS5saW5lLG89YS5kYXRhQm94LHM9YS52aWV3Qm94O2lmKGkuYmluZCgpLG9bMF08PW5bMF0mJm5bMF08PW9bMl0mJm9bMV08PW5bMV0mJm5bMV08PW9bM10pe3ZhciBsPXNbMF0rKG5bMF0tb1swXSkvKG9bMl0tb1swXSkqKHNbMl0tc1swXSksYz1zWzFdKyhuWzFdLW9bMV0pLyhvWzNdLW9bMV0pKihzWzNdLXNbMV0pO3RbMF0mJmkuZHJhd0xpbmUobCxjLHNbMF0sYyxlWzBdLHJbMF0pLHRbMV0mJmkuZHJhd0xpbmUobCxjLGwsc1sxXSxlWzFdLHJbMV0pLHRbMl0mJmkuZHJhd0xpbmUobCxjLHNbMl0sYyxlWzJdLHJbMl0pLHRbM10mJmkuZHJhd0xpbmUobCxjLGwsc1szXSxlWzNdLHJbM10pfX0sYS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5wbG90LnJlbW92ZU92ZXJsYXkodGhpcyl9fSx7fV0sMzEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxhPXQoImdsLXNoYWRlciIpLGk9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIGNvbG9yO1xuYXR0cmlidXRlIGZsb2F0IHdlaWdodDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNvb3JkaW5hdGVzWzNdO1xudW5pZm9ybSB2ZWM0IGNvbG9yc1szXTtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgdmVydGV4UG9zaXRpb24gPSBtaXgoY29vcmRpbmF0ZXNbMF0sXG4gICAgbWl4KGNvb3JkaW5hdGVzWzJdLCBjb29yZGluYXRlc1sxXSwgMC41ICogKHBvc2l0aW9uICsgMS4wKSksIGFicyhwb3NpdGlvbikpO1xuXG4gIHZlYzQgY2xpcFBvcyA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHZlcnRleFBvc2l0aW9uLCAxLjApO1xuICB2ZWMyIGNsaXBPZmZzZXQgPSAocHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQoY29sb3IsIDAuMCkpLnh5O1xuICB2ZWMyIGRlbHRhID0gd2VpZ2h0ICogY2xpcE9mZnNldCAqIHNjcmVlblNoYXBlO1xuICB2ZWMyIGxpbmVPZmZzZXQgPSBub3JtYWxpemUodmVjMihkZWx0YS55LCAtZGVsdGEueCkpIC8gc2NyZWVuU2hhcGU7XG5cbiAgZ2xfUG9zaXRpb24gICA9IHZlYzQoY2xpcFBvcy54eSArIGNsaXBQb3MudyAqIDAuNSAqIGxpbmVXaWR0aCAqIGxpbmVPZmZzZXQsIGNsaXBQb3MueiwgY2xpcFBvcy53KTtcbiAgZnJhZ0NvbG9yICAgICA9IGNvbG9yLnggKiBjb2xvcnNbMF0gKyBjb2xvci55ICogY29sb3JzWzFdICsgY29sb3IueiAqIGNvbG9yc1syXTtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xufSJdKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCxpLG8sbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWMzIn0se25hbWU6IndlaWdodCIsdHlwZToiZmxvYXQifV0pfX0seyJnbC1zaGFkZXIiOjMwNCxnbHNsaWZ5OjQxMX1dLDMxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLGk9dCgiLi9zaGFkZXJzL2luZGV4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107ZnVuY3Rpb24gbyh0LGUsbixhLGksbyl7dmFyIHM9W3QsZSxuLDAsMCwwLDFdO3NbYSszXT0xLHNbYV09aSxyLnB1c2guYXBwbHkocixzKSxzWzZdPS0xLHIucHVzaC5hcHBseShyLHMpLHNbYV09byxyLnB1c2guYXBwbHkocixzKSxyLnB1c2guYXBwbHkocixzKSxzWzZdPTEsci5wdXNoLmFwcGx5KHIscyksc1thXT1pLHIucHVzaC5hcHBseShyLHMpfW8oMCwwLDAsMCwwLDEpLG8oMCwwLDAsMSwwLDEpLG8oMCwwLDAsMiwwLDEpLG8oMSwwLDAsMSwtMSwxKSxvKDEsMCwwLDIsLTEsMSksbygwLDEsMCwwLC0xLDEpLG8oMCwxLDAsMiwtMSwxKSxvKDAsMCwxLDAsLTEsMSksbygwLDAsMSwxLC0xLDEpO3ZhciBsPW4odCxyKSxjPWEodCxbe3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjI4fSx7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjI4fSx7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MSxvZmZzZXQ6MjQsc3RyaWRlOjI4fV0pLHU9aSh0KTt1LmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCx1LmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MSx1LmF0dHJpYnV0ZXMud2VpZ2h0LmxvY2F0aW9uPTI7dmFyIGg9bmV3IHModCxsLGMsdSk7cmV0dXJuIGgudXBkYXRlKGUpLGh9O3ZhciBvPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBzKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bix0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmJvdW5kcz1bWy0xZTMsLTFlMywtMWUzXSxbMWUzLDFlMywxZTNdXSx0aGlzLnBvc2l0aW9uPVswLDAsMF0sdGhpcy5saW5lV2lkdGg9WzIsMiwyXSx0aGlzLmNvbG9ycz1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZW5hYmxlZD1bITAsITAsITBdLHRoaXMuZHJhd1NpZGVzPVshMCwhMCwhMF0sdGhpcy5heGVzPW51bGx9dmFyIGw9cy5wcm90b3R5cGUsYz1bMCwwLDBdLHU9WzAsMCwwXSxoPVswLDBdO2wuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiExfSxsLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXt9LGwuZHJhdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy52YW8sbj10aGlzLnNoYWRlcjtyLmJpbmQoKSxuLmJpbmQoKTt2YXIgYSxpPXQubW9kZWx8fG8scz10LnZpZXd8fG8sbD10LnByb2plY3Rpb258fG87dGhpcy5heGVzJiYoYT10aGlzLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzKTtmb3IodmFyIGY9YyxwPXUsZD0wO2Q8MzsrK2QpYSYmYVtkXTwwPyhmW2RdPXRoaXMuYm91bmRzWzBdW2RdLHBbZF09dGhpcy5ib3VuZHNbMV1bZF0pOihmW2RdPXRoaXMuYm91bmRzWzFdW2RdLHBbZF09dGhpcy5ib3VuZHNbMF1bZF0pO2hbMF09ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaFsxXT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQsbi51bmlmb3Jtcy5tb2RlbD1pLG4udW5pZm9ybXMudmlldz1zLG4udW5pZm9ybXMucHJvamVjdGlvbj1sLG4udW5pZm9ybXMuY29vcmRpbmF0ZXM9W3RoaXMucG9zaXRpb24sZixwXSxuLnVuaWZvcm1zLmNvbG9ycz10aGlzLmNvbG9ycyxuLnVuaWZvcm1zLnNjcmVlblNoYXBlPWg7Zm9yKGQ9MDtkPDM7KytkKW4udW5pZm9ybXMubGluZVdpZHRoPXRoaXMubGluZVdpZHRoW2RdKnRoaXMucGl4ZWxSYXRpbyx0aGlzLmVuYWJsZWRbZF0mJihyLmRyYXcoZS5UUklBTkdMRVMsNiw2KmQpLHRoaXMuZHJhd1NpZGVzW2RdJiZyLmRyYXcoZS5UUklBTkdMRVMsMTIsMTgrMTIqZCkpO3IudW5iaW5kKCl9LGwudXBkYXRlPWZ1bmN0aW9uKHQpe3QmJigiYm91bmRzImluIHQmJih0aGlzLmJvdW5kcz10LmJvdW5kcyksInBvc2l0aW9uImluIHQmJih0aGlzLnBvc2l0aW9uPXQucG9zaXRpb24pLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwiY29sb3JzImluIHQmJih0aGlzLmNvbG9ycz10LmNvbG9ycyksImVuYWJsZWQiaW4gdCYmKHRoaXMuZW5hYmxlZD10LmVuYWJsZWQpLCJkcmF3U2lkZXMiaW4gdCYmKHRoaXMuZHJhd1NpZGVzPXQuZHJhd1NpZGVzKSl9LGwuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMvaW5kZXgiOjMxMiwiZ2wtYnVmZmVyIjoyNDQsImdsLXZhbyI6MzI5fV0sMzE0OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGE9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmVjMyBnZXRPcnRob2dvbmFsVmVjdG9yKHZlYzMgdikge1xuICAvLyBSZXR1cm4gdXAtdmVjdG9yIGZvciBvbmx5LXogdmVjdG9yLlxuICAvLyBSZXR1cm4gYXggKyBieSArIGN6ID0gMCwgYSBwb2ludCB0aGF0IGxpZXMgb24gdGhlIHBsYW5lIHRoYXQgaGFzIHYgYXMgYSBub3JtYWwgYW5kIHRoYXQgaXNuJ3QgKDAsMCwwKS5cbiAgLy8gRnJvbSB0aGUgYWJvdmUgaWYtc3RhdGVtZW50IHdlIGhhdmUgfHxhfHwgPiAwICBVICB8fGJ8fCA+IDAuXG4gIC8vIEFzc2lnbiB6ID0gMCwgeCA9IC1iLCB5ID0gYTpcbiAgLy8gYSotYiArIGIqYSArIGMqMCA9IC1iYSArIGJhICsgMCA9IDBcbiAgaWYgKHYueCp2LnggPiB2Lnoqdi56IHx8IHYueSp2LnkgPiB2Lnoqdi56KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKC12LnksIHYueCwgMC4wKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2ZWMzKDAuMCwgdi56LCAtdi55KSk7XG4gIH1cbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSB0dWJlIHZlcnRleCBhbmQgbm9ybWFsIGF0IHRoZSBnaXZlbiBpbmRleC5cbi8vXG4vLyBUaGUgcmV0dXJuZWQgdmVydGV4IGlzIGZvciBhIHR1YmUgcmluZyB3aXRoIGl0cyBjZW50ZXIgYXQgb3JpZ2luLCByYWRpdXMgb2YgbGVuZ3RoKGQpLCBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIGQuXG4vL1xuLy8gRWFjaCB0dWJlIHNlZ21lbnQgaXMgbWFkZSB1cCBvZiBhIHJpbmcgb2YgdmVydGljZXMuXG4vLyBUaGVzZSB2ZXJ0aWNlcyBhcmUgdXNlZCB0byBtYWtlIHVwIHRoZSB0cmlhbmdsZXMgb2YgdGhlIHR1YmUgYnkgY29ubmVjdGluZyB0aGVtIHRvZ2V0aGVyIGluIHRoZSB2ZXJ0ZXggYXJyYXkuXG4vLyBUaGUgaW5kZXhlcyBvZiB0dWJlIHNlZ21lbnRzIHJ1biBmcm9tIDAgdG8gOC5cbi8vXG52ZWMzIGdldFR1YmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IGluZGV4LCBvdXQgdmVjMyBub3JtYWwpIHtcbiAgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xuXG4gIGZsb2F0IGFuZ2xlID0gMi4wICogMy4xNDE1OSAqIChpbmRleCAvIHNlZ21lbnRDb3VudCk7XG5cbiAgdmVjMyB1ID0gZ2V0T3J0aG9nb25hbFZlY3RvcihkKTtcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcblxuICB2ZWMzIHggPSB1ICogY29zKGFuZ2xlKSAqIGxlbmd0aChkKTtcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCk7XG4gIHZlYzMgdjMgPSB4ICsgeTtcblxuICBub3JtYWwgPSBub3JtYWxpemUodjMpO1xuXG4gIHJldHVybiB2Mztcbn1cblxuYXR0cmlidXRlIHZlYzQgdmVjdG9yO1xuYXR0cmlidXRlIHZlYzQgY29sb3IsIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzIgdXY7XG5cbnVuaWZvcm0gZmxvYXQgdmVjdG9yU2NhbGUsIHR1YmVTY2FsZTtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbiwgaW52ZXJzZU1vZGVsO1xudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uLCBsaWdodFBvc2l0aW9uO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWwsIGZfbGlnaHREaXJlY3Rpb24sIGZfZXllRGlyZWN0aW9uLCBmX2RhdGEsIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIC8vIFNjYWxlIHRoZSB2ZWN0b3IgbWFnbml0dWRlIHRvIHN0YXkgY29uc3RhbnQgd2l0aFxuICAvLyBtb2RlbCAmIHZpZXcgY2hhbmdlcy5cbiAgdmVjMyBub3JtYWw7XG4gIHZlYzMgWFlaID0gZ2V0VHViZVBvc2l0aW9uKG1hdDMobW9kZWwpICogKHR1YmVTY2FsZSAqIHZlY3Rvci53ICogbm9ybWFsaXplKHZlY3Rvci54eXopKSwgcG9zaXRpb24udywgbm9ybWFsKTtcbiAgdmVjNCB0dWJlUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XG5cbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiB0dWJlUG9zaXRpb247XG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcbiAgZl9saWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfbm9ybWFsID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwgMC4wKSAqIGludmVyc2VNb2RlbCkueHl6KTtcblxuICAvLyB2ZWM0IG1fcG9zaXRpb24gID0gbW9kZWwgKiB2ZWM0KHR1YmVQb3NpdGlvbiwgMS4wKTtcbiAgdmVjNCB0X3Bvc2l0aW9uICA9IHZpZXcgKiB0dWJlUG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uICAgICAgPSBwcm9qZWN0aW9uICogdF9wb3NpdGlvbjtcblxuICBmX2NvbG9yICAgICAgICAgID0gY29sb3I7XG4gIGZfZGF0YSAgICAgICAgICAgPSB0dWJlUG9zaXRpb24ueHl6O1xuICBmX3Bvc2l0aW9uICAgICAgID0gcG9zaXRpb24ueHl6O1xuICBmX3V2ICAgICAgICAgICAgID0gdXY7XG59XG4iXSksaT1uKFsiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcyxcbiAgZmxvYXQgZnJlc25lbCkge1xuXG4gIGZsb2F0IFZkb3ROID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcbiAgZmxvYXQgTGRvdE4gPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcblxuICAvL0hhbGYgYW5nbGUgdmVjdG9yXG4gIHZlYzMgSCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pO1xuXG4gIC8vR2VvbWV0cmljIHRlcm1cbiAgZmxvYXQgTmRvdEggPSBtYXgoZG90KHN1cmZhY2VOb3JtYWwsIEgpLCAwLjApO1xuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgTGRvdEggPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBHMSA9ICgyLjAgKiBOZG90SCAqIFZkb3ROKSAvIFZkb3RIO1xuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xuICBmbG9hdCBHID0gbWluKDEuMCwgbWluKEcxLCBHMikpO1xuICBcbiAgLy9EaXN0cmlidXRpb24gdGVybVxuICBmbG9hdCBEID0gYmVja21hbm5EaXN0cmlidXRpb24oTmRvdEgsIHJvdWdobmVzcyk7XG5cbiAgLy9GcmVzbmVsIHRlcm1cbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XG5cbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3MsIGZyZXNuZWwsIGthbWJpZW50LCBrZGlmZnVzZSwga3NwZWN1bGFyLCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsLCBmX2xpZ2h0RGlyZWN0aW9uLCBmX2V5ZURpcmVjdGlvbiwgZl9kYXRhLCBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX3Bvc2l0aW9uKSkgZGlzY2FyZDtcbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZl9leWVEaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtaW4oMS4wLCBtYXgoMC4wLCBjb29rVG9ycmFuY2VTcGVjdWxhcihMLCBWLCBOLCByb3VnaG5lc3MsIGZyZXNuZWwpKSk7XG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xuXG4gIHZlYzQgc3VyZmFjZUNvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KTtcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGxpdENvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZlYzMgZ2V0T3J0aG9nb25hbFZlY3Rvcih2ZWMzIHYpIHtcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXG4gIC8vIEZyb20gdGhlIGFib3ZlIGlmLXN0YXRlbWVudCB3ZSBoYXZlIHx8YXx8ID4gMCAgVSAgfHxifHwgPiAwLlxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXG4gIGlmICh2Lngqdi54ID4gdi56KnYueiB8fCB2Lnkqdi55ID4gdi56KnYueikge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygwLjAsIHYueiwgLXYueSkpO1xuICB9XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgdHViZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4vL1xuLy8gVGhlIHJldHVybmVkIHZlcnRleCBpcyBmb3IgYSB0dWJlIHJpbmcgd2l0aCBpdHMgY2VudGVyIGF0IG9yaWdpbiwgcmFkaXVzIG9mIGxlbmd0aChkKSwgcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiBkLlxuLy9cbi8vIEVhY2ggdHViZSBzZWdtZW50IGlzIG1hZGUgdXAgb2YgYSByaW5nIG9mIHZlcnRpY2VzLlxuLy8gVGhlc2UgdmVydGljZXMgYXJlIHVzZWQgdG8gbWFrZSB1cCB0aGUgdHJpYW5nbGVzIG9mIHRoZSB0dWJlIGJ5IGNvbm5lY3RpbmcgdGhlbSB0b2dldGhlciBpbiB0aGUgdmVydGV4IGFycmF5LlxuLy8gVGhlIGluZGV4ZXMgb2YgdHViZSBzZWdtZW50cyBydW4gZnJvbSAwIHRvIDguXG4vL1xudmVjMyBnZXRUdWJlUG9zaXRpb24odmVjMyBkLCBmbG9hdCBpbmRleCwgb3V0IHZlYzMgbm9ybWFsKSB7XG4gIGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcblxuICBmbG9hdCBhbmdsZSA9IDIuMCAqIDMuMTQxNTkgKiAoaW5kZXggLyBzZWdtZW50Q291bnQpO1xuXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XG5cbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCk7XG4gIHZlYzMgeSA9IHYgKiBzaW4oYW5nbGUpICogbGVuZ3RoKGQpO1xuICB2ZWMzIHYzID0geCArIHk7XG5cbiAgbm9ybWFsID0gbm9ybWFsaXplKHYzKTtcblxuICByZXR1cm4gdjM7XG59XG5cbmF0dHJpYnV0ZSB2ZWM0IHZlY3RvcjtcbmF0dHJpYnV0ZSB2ZWM0IHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgdHViZVNjYWxlO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgbm9ybWFsO1xuICB2ZWMzIFhZWiA9IGdldFR1YmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICh0dWJlU2NhbGUgKiB2ZWN0b3IudyAqIG5vcm1hbGl6ZSh2ZWN0b3IueHl6KSksIHBvc2l0aW9uLncsIG5vcm1hbCk7XG4gIHZlYzQgdHViZVBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLnh5eiwgMS4wKSArIHZlYzQoWFlaLCAwLjApO1xuXG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiB0dWJlUG9zaXRpb247XG4gIGZfaWQgICAgICAgID0gaWQ7XG4gIGZfcG9zaXRpb24gID0gcG9zaXRpb24ueHl6O1xufVxuIl0pLHM9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX3Bvc2l0aW9uKSkgZGlzY2FyZDtcblxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgZl9pZC54eXopO1xufSJdKTtyLm1lc2hTaGFkZXI9e3ZlcnRleDphLGZyYWdtZW50OmksYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWM0In0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn0se25hbWU6InZlY3RvciIsdHlwZToidmVjNCJ9XX0sci5waWNrU2hhZGVyPXt2ZXJ0ZXg6byxmcmFnbWVudDpzLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjNCJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9LHtuYW1lOiJ2ZWN0b3IiLHR5cGU6InZlYzQifV19fSx7Z2xzbGlmeTo0MTF9XSwzMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtdmVjMyIpLGE9dCgiZ2wtdmVjNCIpLGk9WyJ4eXoiLCJ4enkiLCJ5eHoiLCJ5engiLCJ6eHkiLCJ6eXgiXSxvPWZ1bmN0aW9uKHQsZSxyLGkpe2Zvcih2YXIgbz0wLHM9MDtzPHQubGVuZ3RoO3MrKylmb3IodmFyIGw9dFtzXS52ZWxvY2l0aWVzLGM9MDtjPGwubGVuZ3RoO2MrKylvPU1hdGgubWF4KG8sbi5sZW5ndGgobFtjXSkpO3ZhciB1PXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUscixpKXtmb3IodmFyIG89dC5wb2ludHMscz10LnZlbG9jaXRpZXMsbD10LmRpdmVyZ2VuY2VzLGM9W10sdT1bXSxoPVtdLGY9W10scD1bXSxkPVtdLGc9MCx2PTAsbT1hLmNyZWF0ZSgpLHk9YS5jcmVhdGUoKSx4PTA7eDxvLmxlbmd0aDt4Kyspe3ZhciBiPW9beF0sXz1zW3hdLHc9bFt4XTswPT09ZSYmKHc9LjA1KnIpLHY9bi5sZW5ndGgoXykvaSxtPWEuY3JlYXRlKCksbi5jb3B5KG0sXyksbVszXT13O2Zvcih2YXIgaz0wO2s8ODtrKyspcFtrXT1bYlswXSxiWzFdLGJbMl0sa107aWYoZi5sZW5ndGg+MClmb3Ioaz0wO2s8ODtrKyspe3ZhciBUPShrKzEpJTg7Yy5wdXNoKGZba10scFtrXSxwW1RdLHBbVF0sZltUXSxmW2tdKSxoLnB1c2goeSxtLG0sbSx5LHkpLGQucHVzaChnLHYsdix2LGcsZyk7dmFyIE09Yy5sZW5ndGg7dS5wdXNoKFtNLTYsTS01LE0tNF0sW00tMyxNLTIsTS0xXSl9dmFyIEE9ZjtmPXAscD1BO3ZhciBTPXk7eT1tLG09Uzt2YXIgRT1nO2c9dix2PUV9cmV0dXJue3Bvc2l0aW9uczpjLGNlbGxzOnUsdmVjdG9yczpoLHZlcnRleEludGVuc2l0eTpkfX0odCxyLGksbyl9KSxoPVtdLGY9W10scD1bXSxkPVtdO2ZvcihzPTA7czx1Lmxlbmd0aDtzKyspe3ZhciBnPXVbc10sdj1oLmxlbmd0aDtoPWguY29uY2F0KGcucG9zaXRpb25zKSxwPXAuY29uY2F0KGcudmVjdG9ycyksZD1kLmNvbmNhdChnLnZlcnRleEludGVuc2l0eSk7Zm9yKGM9MDtjPGcuY2VsbHMubGVuZ3RoO2MrKyl7dmFyIG09Zy5jZWxsc1tjXSx5PVtdO2YucHVzaCh5KTtmb3IodmFyIHg9MDt4PG0ubGVuZ3RoO3grKyl5LnB1c2gobVt4XSt2KX19cmV0dXJue3Bvc2l0aW9uczpoLGNlbGxzOmYsdmVjdG9yczpwLHZlcnRleEludGVuc2l0eTpkLGNvbG9ybWFwOmV9fSxzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Lmxlbmd0aDtmb3Iocj0wO3I8bjtyKyspe3ZhciBhPXRbcl07aWYoYT09PWUpcmV0dXJuIHI7aWYoYT5lKXJldHVybiByLTF9cmV0dXJuIHJ9LGw9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PGU/ZTp0PnI/cjp0fSxjPWZ1bmN0aW9uKHQpe3ZhciBlPTEvMDt0LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7Zm9yKHZhciByPXQubGVuZ3RoLG49MTtuPHI7bisrKXt2YXIgYT1NYXRoLmFicyh0W25dLXRbbi0xXSk7YTxlJiYoZT1hKX1yZXR1cm4gZX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFydGluZ1Bvc2l0aW9ucyxhPXQubWF4TGVuZ3RofHwxZTMsdT10LnR1YmVTaXplfHwxLGg9dC5hYnNvbHV0ZVR1YmVTaXplLGY9dC5ncmlkRmlsbHx8Iit4K3kreiIscD17fTstMSE9PWYuaW5kZXhPZigiLXgiKSYmKHAucmV2ZXJzZWRYPSEwKSwtMSE9PWYuaW5kZXhPZigiLXkiKSYmKHAucmV2ZXJzZWRZPSEwKSwtMSE9PWYuaW5kZXhPZigiLXoiKSYmKHAucmV2ZXJzZWRaPSEwKSxwLmZpbGxlZD1pLmluZGV4T2YoZi5yZXBsYWNlKC8tL2csIiIpLnJlcGxhY2UoL1wrL2csIiIpKTt2YXIgZD10LmdldFZlbG9jaXR5fHxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBhPWUudmVjdG9ycyxpPWUubWVzaGdyaWQsbz10WzBdLGM9dFsxXSx1PXRbMl0saD1pWzBdLmxlbmd0aCxmPWlbMV0ubGVuZ3RoLHA9aVsyXS5sZW5ndGgsZD1zKGlbMF0sbyksZz1zKGlbMV0sYyksdj1zKGlbMl0sdSksbT1kKzEseT1nKzEseD12KzE7aWYoZD1sKGQsMCxoLTEpLG09bChtLDAsaC0xKSxnPWwoZywwLGYtMSkseT1sKHksMCxmLTEpLHY9bCh2LDAscC0xKSx4PWwoeCwwLHAtMSksZDwwfHxnPDB8fHY8MHx8bT5oLTF8fHk+Zi0xfHx4PnAtMSlyZXR1cm4gbi5jcmVhdGUoKTt2YXIgYixfLHcsayxULE0sQT1pWzBdW2RdLFM9aVswXVttXSxFPWlbMV1bZ10sTD1pWzFdW3ldLEM9aVsyXVt2XSxQPShvLUEpLyhTLUEpLE89KGMtRSkvKEwtRSksej0odS1DKS8oaVsyXVt4XS1DKTtzd2l0Y2goaXNGaW5pdGUoUCl8fChQPS41KSxpc0Zpbml0ZShPKXx8KE89LjUpLGlzRmluaXRlKHopfHwoej0uNSksci5yZXZlcnNlZFgmJihkPWgtMS1kLG09aC0xLW0pLHIucmV2ZXJzZWRZJiYoZz1mLTEtZyx5PWYtMS15KSxyLnJldmVyc2VkWiYmKHY9cC0xLXYseD1wLTEteCksci5maWxsZWQpe2Nhc2UgNTpUPXYsTT14LHc9ZypwLGs9eSpwLGI9ZCpwKmYsXz1tKnAqZjticmVhaztjYXNlIDQ6VD12LE09eCxiPWQqcCxfPW0qcCx3PWcqcCpoLGs9eSpwKmg7YnJlYWs7Y2FzZSAzOnc9ZyxrPXksVD12KmYsTT14KmYsYj1kKmYqcCxfPW0qZipwO2JyZWFrO2Nhc2UgMjp3PWcsaz15LGI9ZCpmLF89bSpmLFQ9dipmKmgsTT14KmYqaDticmVhaztjYXNlIDE6Yj1kLF89bSxUPXYqaCxNPXgqaCx3PWcqaCpwLGs9eSpoKnA7YnJlYWs7ZGVmYXVsdDpiPWQsXz1tLHc9ZypoLGs9eSpoLFQ9dipoKmYsTT14KmgqZn12YXIgST1hW2IrdytUXSxEPWFbYit3K01dLFI9YVtiK2srVF0sRj1hW2IraytNXSxCPWFbXyt3K1RdLE49YVtfK3crTV0saj1hW18raytUXSxWPWFbXytrK01dLFU9bi5jcmVhdGUoKSxxPW4uY3JlYXRlKCksSD1uLmNyZWF0ZSgpLEc9bi5jcmVhdGUoKTtuLmxlcnAoVSxJLEIsUCksbi5sZXJwKHEsRCxOLFApLG4ubGVycChILFIsaixQKSxuLmxlcnAoRyxGLFYsUCk7dmFyIFk9bi5jcmVhdGUoKSxXPW4uY3JlYXRlKCk7bi5sZXJwKFksVSxILE8pLG4ubGVycChXLHEsRyxPKTt2YXIgWD1uLmNyZWF0ZSgpO3JldHVybiBuLmxlcnAoWCxZLFcseiksWH0oZSx0LHApfSxnPXQuZ2V0RGl2ZXJnZW5jZXx8ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmNyZWF0ZSgpLGE9MWUtNDtuLmFkZChyLHQsW2EsMCwwXSk7dmFyIGk9ZChyKTtuLnN1YnRyYWN0KGksaSxlKSxuLnNjYWxlKGksaSwxZTQpLG4uYWRkKHIsdCxbMCxhLDBdKTt2YXIgbz1kKHIpO24uc3VidHJhY3QobyxvLGUpLG4uc2NhbGUobyxvLDFlNCksbi5hZGQocix0LFswLDAsYV0pO3ZhciBzPWQocik7cmV0dXJuIG4uc3VidHJhY3QocyxzLGUpLG4uc2NhbGUocyxzLDFlNCksbi5hZGQocixpLG8pLG4uYWRkKHIscixzKSxyfSx2PVtdLG09ZVswXVswXSx5PWVbMF1bMV0seD1lWzBdWzJdLGI9ZVsxXVswXSxfPWVbMV1bMV0sdz1lWzFdWzJdLGs9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdO3JldHVybiEoZTxtfHxlPmJ8fHI8eXx8cj5ffHxuPHh8fG4+dyl9LFQ9MTAqbi5kaXN0YW5jZShlWzBdLGVbMV0pL2EsTT1UKlQsQT0xLFM9MCxFPXIubGVuZ3RoO0U+MSYmKEE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9W10sbj1bXSxhPXt9LGk9e30sbz17fSxzPXQubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgdT10W2xdLGg9dVswXSxmPXVbMV0scD11WzJdO2FbaF18fChlLnB1c2goaCksYVtoXT0hMCksaVtmXXx8KHIucHVzaChmKSxpW2ZdPSEwKSxvW3BdfHwobi5wdXNoKHApLG9bcF09ITApfXZhciBkPWMoZSksZz1jKHIpLHY9YyhuKSxtPU1hdGgubWluKGQsZyx2KTtyZXR1cm4gaXNGaW5pdGUobSk/bToxfShyKSk7Zm9yKHZhciBMPTA7TDxFO0wrKyl7dmFyIEM9bi5jcmVhdGUoKTtuLmNvcHkoQyxyW0xdKTt2YXIgUD1bQ10sTz1bXSx6PWQoQyksST1DO08ucHVzaCh6KTt2YXIgRD1bXSxSPWcoQyx6KSxGPW4ubGVuZ3RoKFIpO2lzRmluaXRlKEYpJiZGPlMmJihTPUYpLEQucHVzaChGKSx2LnB1c2goe3BvaW50czpQLHZlbG9jaXRpZXM6TyxkaXZlcmdlbmNlczpEfSk7Zm9yKHZhciBCPTA7QjwxMDAqYSYmUC5sZW5ndGg8YSYmayhDKTspe0IrKzt2YXIgTj1uLmNsb25lKHopLGo9bi5zcXVhcmVkTGVuZ3RoKE4pO2lmKDA9PT1qKWJyZWFrO2lmKGo+TSYmbi5zY2FsZShOLE4sVC9NYXRoLnNxcnQoaikpLG4uYWRkKE4sTixDKSx6PWQoTiksbi5zcXVhcmVkRGlzdGFuY2UoSSxOKS1NPi0xZS00Kk0pe1AucHVzaChOKSxJPU4sTy5wdXNoKHopO1I9ZyhOLHopLEY9bi5sZW5ndGgoUik7aXNGaW5pdGUoRikmJkY+UyYmKFM9RiksRC5wdXNoKEYpfUM9Tn19dmFyIFY9byh2LHQuY29sb3JtYXAsUyxBKTtyZXR1cm4gaD9WLnR1YmVTY2FsZT1oOigwPT09UyYmKFM9MSksVi50dWJlU2NhbGU9LjUqdSpBL1MpLFZ9O3ZhciB1PXQoIi4vbGliL3NoYWRlcnMiKSxoPXQoImdsLWNvbmUzZCIpLmNyZWF0ZU1lc2g7ZS5leHBvcnRzLmNyZWF0ZVR1YmVNZXNoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLHtzaGFkZXJzOnUsdHJhY2VUeXBlOiJzdHJlYW10dWJlIn0pfX0seyIuL2xpYi9zaGFkZXJzIjozMTQsImdsLWNvbmUzZCI6MjQ1LCJnbC12ZWMzIjozNDgsImdsLXZlYzQiOjM4NH1dLDMxNjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXNoYWRlciIpLGE9dCgiZ2xzbGlmeSIpLGk9YShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWM0IHV2O1xuYXR0cmlidXRlIHZlYzMgZjtcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDtcblxudW5pZm9ybSB2ZWMzIG9iamVjdE9mZnNldDtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbiwgaW52ZXJzZU1vZGVsO1xudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb24sIGV5ZVBvc2l0aW9uO1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMyIHBsYW5lQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMyBsaWdodERpcmVjdGlvbiwgZXllRGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGxvY2FsQ29vcmRpbmF0ZSA9IHZlYzModXYuencsIGYueCk7XG4gIHdvcmxkQ29vcmRpbmF0ZSA9IG9iamVjdE9mZnNldCArIGxvY2FsQ29vcmRpbmF0ZTtcbiAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHdvcmxkQ29vcmRpbmF0ZSwgMS4wKTtcbiAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICBraWxsID0gZi55O1xuICB2YWx1ZSA9IGYuejtcbiAgcGxhbmVDb29yZGluYXRlID0gdXYueHk7XG5cbiAgdkNvbG9yID0gdGV4dHVyZTJEKGNvbG9ybWFwLCB2ZWMyKHZhbHVlLCB2YWx1ZSkpO1xuXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xuICB2ZWM0IGNhbWVyYUNvb3JkaW5hdGUgPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgY2FtZXJhQ29vcmRpbmF0ZS54eXogLz0gY2FtZXJhQ29vcmRpbmF0ZS53O1xuICBsaWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBzdXJmYWNlTm9ybWFsICA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsMCkgKiBpbnZlcnNlTW9kZWwpLnh5eik7XG59XG4iXSksbz1hKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5mbG9hdCBiZWNrbWFublNwZWN1bGFyKFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcbiAgZmxvYXQgcm91Z2huZXNzKSB7XG4gIHJldHVybiBiZWNrbWFubkRpc3RyaWJ1dGlvbihkb3Qoc3VyZmFjZU5vcm1hbCwgbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbikpLCByb3VnaG5lc3MpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGxvd2VyQm91bmQsIHVwcGVyQm91bmQ7XG51bmlmb3JtIGZsb2F0IGNvbnRvdXJUaW50O1xudW5pZm9ybSB2ZWM0IGNvbnRvdXJDb2xvcjtcbnVuaWZvcm0gc2FtcGxlcjJEIGNvbG9ybWFwO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcywgZnJlc25lbCwga2FtYmllbnQsIGtkaWZmdXNlLCBrc3BlY3VsYXIsIG9wYWNpdHk7XG51bmlmb3JtIGZsb2F0IHZlcnRleENvbG9yO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMyBsaWdodERpcmVjdGlvbiwgZXllRGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZiAoKGtpbGwgPiAwLjApIHx8XG4gICAgICAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZENvb3JkaW5hdGUpKSkgZGlzY2FyZDtcblxuICB2ZWMzIE4gPSBub3JtYWxpemUoc3VyZmFjZU5vcm1hbCk7XG4gIHZlYzMgViA9IG5vcm1hbGl6ZShleWVEaXJlY3Rpb24pO1xuICB2ZWMzIEwgPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtYXgoYmVja21hbm5TcGVjdWxhcihMLCBWLCBOLCByb3VnaG5lc3MpLCAwLik7XG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xuXG4gIC8vZGVjaWRlIGhvdyB0byBpbnRlcnBvbGF0ZSBjb2xvciBcdTIwMTQgaW4gdmVydGV4IG9yIGluIGZyYWdtZW50XG4gIHZlYzQgc3VyZmFjZUNvbG9yID1cbiAgICBzdGVwKHZlcnRleENvbG9yLCAuNSkgKiB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSkgK1xuICAgIHN0ZXAoLjUsIHZlcnRleENvbG9yKSAqIHZDb2xvcjtcblxuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbWl4KGxpdENvbG9yLCBjb250b3VyQ29sb3IsIGNvbnRvdXJUaW50KSAqIG9wYWNpdHk7XG59XG4iXSkscz1hKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgdXY7XG5hdHRyaWJ1dGUgZmxvYXQgZjtcblxudW5pZm9ybSB2ZWMzIG9iamVjdE9mZnNldDtcbnVuaWZvcm0gbWF0MyBwZXJtdXRhdGlvbjtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgaGVpZ2h0LCB6T2Zmc2V0O1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMyIHBsYW5lQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMyBsaWdodERpcmVjdGlvbiwgZXllRGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGRhdGFDb29yZGluYXRlID0gcGVybXV0YXRpb24gKiB2ZWMzKHV2Lnh5LCBoZWlnaHQpO1xuICB3b3JsZENvb3JkaW5hdGUgPSBvYmplY3RPZmZzZXQgKyBkYXRhQ29vcmRpbmF0ZTtcbiAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHdvcmxkQ29vcmRpbmF0ZSwgMS4wKTtcblxuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgY2xpcFBvc2l0aW9uLnogKz0gek9mZnNldDtcblxuICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcbiAgdmFsdWUgPSBmICsgb2JqZWN0T2Zmc2V0Lno7XG4gIGtpbGwgPSAtMS4wO1xuICBwbGFuZUNvb3JkaW5hdGUgPSB1di56dztcblxuICB2Q29sb3IgPSB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSk7XG5cbiAgLy9Eb24ndCBkbyBsaWdodGluZyBmb3IgY29udG91cnNcbiAgc3VyZmFjZU5vcm1hbCAgID0gdmVjMygxLDAsMCk7XG4gIGV5ZURpcmVjdGlvbiAgICA9IHZlYzMoMCwxLDApO1xuICBsaWdodERpcmVjdGlvbiAgPSB2ZWMzKDAsMCwxKTtcbn1cbiJdKSxsPWEoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIHN1cmZhY2VOb3JtYWw7XG5cbnZlYzIgc3BsaXRGbG9hdChmbG9hdCB2KSB7XG4gIGZsb2F0IHZoID0gMjU1LjAgKiB2O1xuICBmbG9hdCB1cHBlciA9IGZsb29yKHZoKTtcbiAgZmxvYXQgbG93ZXIgPSBmcmFjdCh2aCk7XG4gIHJldHVybiB2ZWMyKHVwcGVyIC8gMjU1LjAsIGZsb29yKGxvd2VyICogMTYuMCkgLyAxNi4wKTtcbn1cblxudm9pZCBtYWluKCkge1xuICBpZiAoKGtpbGwgPiAwLjApIHx8XG4gICAgICAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZENvb3JkaW5hdGUpKSkgZGlzY2FyZDtcblxuICB2ZWMyIHV4ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueCAvIHNoYXBlLngpO1xuICB2ZWMyIHV5ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueSAvIHNoYXBlLnkpO1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgdXgueCwgdXkueCwgdXgueSArICh1eS55LzE2LjApKTtcbn1cbiJdKTtyLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQsaSxvLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0yLGV9LHIuY3JlYXRlUGlja1NoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQsaSxsLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0yLGV9LHIuY3JlYXRlQ29udG91clNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQscyxvLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJmbG9hdCJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZX0sci5jcmVhdGVQaWNrQ29udG91clNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQscyxsLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJmbG9hdCJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZX19LHsiZ2wtc2hhZGVyIjozMDQsZ2xzbGlmeTo0MTF9XSwzMTc6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTEzXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTEzfV0sMzE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9eShlKSxuPWIoZSkscz14KGUpLGw9XyhlKSxjPWEoZSksdT1pKGUsW3tidWZmZXI6YyxzaXplOjQsc3RyaWRlOncsb2Zmc2V0OjB9LHtidWZmZXI6YyxzaXplOjMsc3RyaWRlOncsb2Zmc2V0OjE2fSx7YnVmZmVyOmMsc2l6ZTozLHN0cmlkZTp3LG9mZnNldDoyOH1dKSxoPWEoZSksZj1pKGUsW3tidWZmZXI6aCxzaXplOjQsc3RyaWRlOjIwLG9mZnNldDowfSx7YnVmZmVyOmgsc2l6ZToxLHN0cmlkZToyMCxvZmZzZXQ6MTZ9XSkscD1hKGUpLGQ9aShlLFt7YnVmZmVyOnAsc2l6ZToyLHR5cGU6ZS5GTE9BVH1dKSxnPW8oZSwxLFMsZS5SR0JBLGUuVU5TSUdORURfQllURSk7Zy5taW5GaWx0ZXI9ZS5MSU5FQVIsZy5tYWdGaWx0ZXI9ZS5MSU5FQVI7dmFyIHY9bmV3IEUoZSxbMCwwXSxbWzAsMCwwXSxbMCwwLDBdXSxyLG4sYyx1LGcscyxsLGgsZixwLGQsWzAsMCwwXSksbT17bGV2ZWxzOltbXSxbXSxbXV19O2Zvcih2YXIgayBpbiB0KW1ba109dFtrXTtyZXR1cm4gbS5jb2xvcm1hcD1tLmNvbG9ybWFwfHwiamV0Iix2LnVwZGF0ZShtKSx2fTt2YXIgbj10KCJiaXQtdHdpZGRsZSIpLGE9dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxvPXQoImdsLXRleHR1cmUyZCIpLHM9dCgidHlwZWRhcnJheS1wb29sIiksbD10KCJjb2xvcm1hcCIpLGM9dCgibmRhcnJheS1vcHMiKSx1PXQoIm5kYXJyYXktcGFjayIpLGg9dCgibmRhcnJheSIpLGY9dCgic3VyZmFjZS1uZXRzIikscD10KCJnbC1tYXQ0L211bHRpcGx5IiksZD10KCJnbC1tYXQ0L2ludmVydCIpLGc9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSx2PXQoIm5kYXJyYXktZ3JhZGllbnQiKSxtPXQoIi4vbGliL3NoYWRlcnMiKSx5PW0uY3JlYXRlU2hhZGVyLHg9bS5jcmVhdGVDb250b3VyU2hhZGVyLGI9bS5jcmVhdGVQaWNrU2hhZGVyLF89bS5jcmVhdGVQaWNrQ29udG91clNoYWRlcix3PTQwLGs9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLFQ9W1swLDBdLFswLDFdLFsxLDBdLFsxLDFdLFsxLDBdLFswLDFdXSxNPVtbMCwwLDAsMCwwLDAsMCwwLDBdLFswLDAsMCwwLDAsMCwwLDAsMF0sWzAsMCwwLDAsMCwwLDAsMCwwXV07ZnVuY3Rpb24gQSh0LGUscixuLGEpe3RoaXMucG9zaXRpb249dCx0aGlzLmluZGV4PWUsdGhpcy51dj1yLHRoaXMubGV2ZWw9bix0aGlzLmRhdGFDb29yZGluYXRlPWF9IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzOysrdCl7dmFyIGU9TVt0XSxyPSh0KzIpJTM7ZVsodCsxKSUzKzBdPTEsZVtyKzNdPTEsZVt0KzZdPTF9fSgpO3ZhciBTPTI1NjtmdW5jdGlvbiBFKHQsZSxyLG4sYSxpLG8sbCxjLHUsZixwLGQsZyx2KXt0aGlzLmdsPXQsdGhpcy5zaGFwZT1lLHRoaXMuYm91bmRzPXIsdGhpcy5vYmplY3RPZmZzZXQ9dix0aGlzLmludGVuc2l0eUJvdW5kcz1bXSx0aGlzLl9zaGFkZXI9bix0aGlzLl9waWNrU2hhZGVyPWEsdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlcj1pLHRoaXMuX3Zhbz1vLHRoaXMuX2NvbG9yTWFwPWwsdGhpcy5fY29udG91clNoYWRlcj1jLHRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyPXUsdGhpcy5fY29udG91ckJ1ZmZlcj1mLHRoaXMuX2NvbnRvdXJWQU89cCx0aGlzLl9jb250b3VyT2Zmc2V0cz1bW10sW10sW11dLHRoaXMuX2NvbnRvdXJDb3VudHM9W1tdLFtdLFtdXSx0aGlzLl92ZXJ0ZXhDb3VudD0wLHRoaXMuX3BpY2tSZXN1bHQ9bmV3IEEoWzAsMCwwXSxbMCwwXSxbMCwwXSxbMCwwLDBdLFswLDAsMF0pLHRoaXMuX2R5bmFtaWNCdWZmZXI9ZCx0aGlzLl9keW5hbWljVkFPPWcsdGhpcy5fZHluYW1pY09mZnNldHM9WzAsMCwwXSx0aGlzLl9keW5hbWljQ291bnRzPVswLDAsMF0sdGhpcy5jb250b3VyV2lkdGg9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1sxXSxbMV0sWzFdXSx0aGlzLmNvbnRvdXJUaW50PVswLDAsMF0sdGhpcy5jb250b3VyQ29sb3I9W1suNSwuNSwuNSwxXSxbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSx0aGlzLnNob3dDb250b3VyPSEwLHRoaXMuc2hvd1N1cmZhY2U9ITAsdGhpcy5lbmFibGVIaWdobGlnaHQ9WyEwLCEwLCEwXSx0aGlzLmhpZ2hsaWdodENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5oaWdobGlnaHRUaW50PVsxLDEsMV0sdGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdLHRoaXMuZW5hYmxlRHluYW1pYz1bITAsITAsITBdLHRoaXMuZHluYW1pY0xldmVsPVtOYU4sTmFOLE5hTl0sdGhpcy5keW5hbWljQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmR5bmFtaWNUaW50PVsxLDEsMV0sdGhpcy5keW5hbWljV2lkdGg9WzEsMSwxXSx0aGlzLmF4ZXNCb3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5zdXJmYWNlUHJvamVjdD1bITEsITEsITFdLHRoaXMuY29udG91clByb2plY3Q9W1shMSwhMSwhMV0sWyExLCExLCExXSxbITEsITEsITFdXSx0aGlzLmNvbG9yQm91bmRzPVshMSwhMV0sdGhpcy5fZmllbGQ9W2gocy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSksaChzLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKSxoKHMubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pXSx0aGlzLnBpY2tJZD0xLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnNuYXBUb0RhdGE9ITEsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5vcGFjaXR5PTEsdGhpcy5saWdodFBvc2l0aW9uPVsxMCwxZTQsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLnZlcnRleENvbG9yPTAsdGhpcy5kaXJ0eT0hMH12YXIgTD1FLnByb3RvdHlwZTtMLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LEwuaXNPcGFxdWU9ZnVuY3Rpb24oKXtpZih0aGlzLm9wYWNpdHk+PTEpcmV0dXJuITA7Zm9yKHZhciB0PTA7dDwzOysrdClpZih0aGlzLl9jb250b3VyQ291bnRzW3RdLmxlbmd0aD4wfHx0aGlzLl9keW5hbWljQ291bnRzW3RdPjApcmV0dXJuITA7cmV0dXJuITF9LEwucGlja1Nsb3RzPTEsTC5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fTt2YXIgQz1bMCwwLDBdLFA9e3Nob3dTdXJmYWNlOiExLHNob3dDb250b3VyOiExLHByb2plY3Rpb25zOltrLnNsaWNlKCksay5zbGljZSgpLGsuc2xpY2UoKV0sY2xpcEJvdW5kczpbW1swLDAsMF0sWzAsMCwwXV0sW1swLDAsMF0sWzAsMCwwXV0sW1swLDAsMF0sWzAsMCwwXV1dfTtmdW5jdGlvbiBPKHQsZSl7dmFyIHIsbixhLGk9ZS5heGVzJiZlLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzfHxDLG89ZS5zaG93U3VyZmFjZSxzPWUuc2hvd0NvbnRvdXI7Zm9yKHI9MDtyPDM7KytyKWZvcihvPW98fGUuc3VyZmFjZVByb2plY3Rbcl0sbj0wO248MzsrK24pcz1zfHxlLmNvbnRvdXJQcm9qZWN0W3JdW25dO2ZvcihyPTA7cjwzOysrcil7dmFyIGw9UC5wcm9qZWN0aW9uc1tyXTtmb3Iobj0wO248MTY7KytuKWxbbl09MDtmb3Iobj0wO248NDsrK24pbFs1Km5dPTE7bFs1KnJdPTAsbFsxMityXT1lLmF4ZXNCb3VuZHNbKyhpW3JdPjApXVtyXSxwKGwsdC5tb2RlbCxsKTt2YXIgYz1QLmNsaXBCb3VuZHNbcl07Zm9yKGE9MDthPDI7KythKWZvcihuPTA7bjwzOysrbiljW2FdW25dPXQuY2xpcEJvdW5kc1thXVtuXTtjWzBdW3JdPS0xZTgsY1sxXVtyXT0xZTh9cmV0dXJuIFAuc2hvd1N1cmZhY2U9byxQLnNob3dDb250b3VyPXMsUH12YXIgej17bW9kZWw6ayx2aWV3OmsscHJvamVjdGlvbjprLGludmVyc2VNb2RlbDprLnNsaWNlKCksbG93ZXJCb3VuZDpbMCwwLDBdLHVwcGVyQm91bmQ6WzAsMCwwXSxjb2xvck1hcDowLGNsaXBCb3VuZHM6W1swLDAsMF0sWzAsMCwwXV0saGVpZ2h0OjAsY29udG91clRpbnQ6MCxjb250b3VyQ29sb3I6WzAsMCwwLDFdLHBlcm11dGF0aW9uOlsxLDAsMCwwLDEsMCwwLDAsMV0sek9mZnNldDotMWUtNCxvYmplY3RPZmZzZXQ6WzAsMCwwXSxrYW1iaWVudDoxLGtkaWZmdXNlOjEsa3NwZWN1bGFyOjEsbGlnaHRQb3NpdGlvbjpbMWUzLDFlMywxZTNdLGV5ZVBvc2l0aW9uOlswLDAsMF0scm91Z2huZXNzOjEsZnJlc25lbDoxLG9wYWNpdHk6MSx2ZXJ0ZXhDb2xvcjowfSxJPWsuc2xpY2UoKSxEPVsxLDAsMCwwLDEsMCwwLDAsMV07ZnVuY3Rpb24gUih0LGUpe3Q9dHx8e307dmFyIHI9dGhpcy5nbDtyLmRpc2FibGUoci5DVUxMX0ZBQ0UpLHRoaXMuX2NvbG9yTWFwLmJpbmQoMCk7dmFyIG49ejtuLm1vZGVsPXQubW9kZWx8fGssbi52aWV3PXQudmlld3x8ayxuLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxrLG4ubG93ZXJCb3VuZD1bdGhpcy5ib3VuZHNbMF1bMF0sdGhpcy5ib3VuZHNbMF1bMV0sdGhpcy5jb2xvckJvdW5kc1swXXx8dGhpcy5ib3VuZHNbMF1bMl1dLG4udXBwZXJCb3VuZD1bdGhpcy5ib3VuZHNbMV1bMF0sdGhpcy5ib3VuZHNbMV1bMV0sdGhpcy5jb2xvckJvdW5kc1sxXXx8dGhpcy5ib3VuZHNbMV1bMl1dLG4ub2JqZWN0T2Zmc2V0PXRoaXMub2JqZWN0T2Zmc2V0LG4uY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yWzBdLG4uaW52ZXJzZU1vZGVsPWQobi5pbnZlcnNlTW9kZWwsbi5tb2RlbCk7Zm9yKHZhciBhPTA7YTwyOysrYSlmb3IodmFyIGk9bi5jbGlwQm91bmRzW2FdLG89MDtvPDM7KytvKWlbb109TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW2FdW29dLC0xZTgpLDFlOCk7bi5rYW1iaWVudD10aGlzLmFtYmllbnRMaWdodCxuLmtkaWZmdXNlPXRoaXMuZGlmZnVzZUxpZ2h0LG4ua3NwZWN1bGFyPXRoaXMuc3BlY3VsYXJMaWdodCxuLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyxuLmZyZXNuZWw9dGhpcy5mcmVzbmVsLG4ub3BhY2l0eT10aGlzLm9wYWNpdHksbi5oZWlnaHQ9MCxuLnBlcm11dGF0aW9uPUQsbi52ZXJ0ZXhDb2xvcj10aGlzLnZlcnRleENvbG9yO3ZhciBzPUk7Zm9yKHAocyxuLnZpZXcsbi5tb2RlbCkscChzLG4ucHJvamVjdGlvbixzKSxkKHMscyksYT0wO2E8MzsrK2Epbi5leWVQb3NpdGlvblthXT1zWzEyK2FdL3NbMTVdO3ZhciBsPXNbMTVdO2ZvcihhPTA7YTwzOysrYSlsKz10aGlzLmxpZ2h0UG9zaXRpb25bYV0qc1s0KmErM107Zm9yKGE9MDthPDM7KythKXt2YXIgYz1zWzEyK2FdO2ZvcihvPTA7bzwzOysrbyljKz1zWzQqbythXSp0aGlzLmxpZ2h0UG9zaXRpb25bb107bi5saWdodFBvc2l0aW9uW2FdPWMvbH12YXIgdT1PKG4sdGhpcyk7aWYodS5zaG93U3VyZmFjZSYmZT09PXRoaXMub3BhY2l0eTwxKXtmb3IodGhpcy5fc2hhZGVyLmJpbmQoKSx0aGlzLl9zaGFkZXIudW5pZm9ybXM9bix0aGlzLl92YW8uYmluZCgpLHRoaXMuc2hvd1N1cmZhY2UmJnRoaXMuX3ZlcnRleENvdW50JiZ0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksYT0wO2E8MzsrK2EpdGhpcy5zdXJmYWNlUHJvamVjdFthXSYmdGhpcy52ZXJ0ZXhDb3VudCYmKHRoaXMuX3NoYWRlci51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW2FdLHRoaXMuX3NoYWRlci51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1thXSx0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCkpO3RoaXMuX3Zhby51bmJpbmQoKX1pZih1LnNob3dDb250b3VyJiYhZSl7dmFyIGg9dGhpcy5fY29udG91clNoYWRlcjtuLmthbWJpZW50PTEsbi5rZGlmZnVzZT0wLG4ua3NwZWN1bGFyPTAsbi5vcGFjaXR5PTEsaC5iaW5kKCksaC51bmlmb3Jtcz1uO3ZhciBmPXRoaXMuX2NvbnRvdXJWQU87Zm9yKGYuYmluZCgpLGE9MDthPDM7KythKWZvcihoLnVuaWZvcm1zLnBlcm11dGF0aW9uPU1bYV0sci5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0qdGhpcy5waXhlbFJhdGlvKSxvPTA7bzx0aGlzLmNvbnRvdXJMZXZlbHNbYV0ubGVuZ3RoOysrbylvPT09dGhpcy5oaWdobGlnaHRMZXZlbFthXT8oaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5oaWdobGlnaHRDb2xvclthXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuaGlnaGxpZ2h0VGludFthXSk6MCE9PW8mJm8tMSE9PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbYV18fChoLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmNvbnRvdXJDb2xvclthXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuY29udG91clRpbnRbYV0pLHRoaXMuX2NvbnRvdXJDb3VudHNbYV1bb10mJihoLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbYV1bb10sZi5kcmF3KHIuTElORVMsdGhpcy5fY29udG91ckNvdW50c1thXVtvXSx0aGlzLl9jb250b3VyT2Zmc2V0c1thXVtvXSkpO2ZvcihhPTA7YTwzOysrYSlmb3IoaC51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW2FdLGgudW5pZm9ybXMuY2xpcEJvdW5kcz11LmNsaXBCb3VuZHNbYV0sbz0wO288MzsrK28paWYodGhpcy5jb250b3VyUHJvamVjdFthXVtvXSl7aC51bmlmb3Jtcy5wZXJtdXRhdGlvbj1NW29dLHIubGluZVdpZHRoKHRoaXMuY29udG91cldpZHRoW29dKnRoaXMucGl4ZWxSYXRpbyk7Zm9yKHZhciBnPTA7Zzx0aGlzLmNvbnRvdXJMZXZlbHNbb10ubGVuZ3RoOysrZylnPT09dGhpcy5oaWdobGlnaHRMZXZlbFtvXT8oaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5oaWdobGlnaHRDb2xvcltvXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuaGlnaGxpZ2h0VGludFtvXSk6MCE9PWcmJmctMSE9PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbb118fChoLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmNvbnRvdXJDb2xvcltvXSxoLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuY29udG91clRpbnRbb10pLHRoaXMuX2NvbnRvdXJDb3VudHNbb11bZ10mJihoLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbb11bZ10sZi5kcmF3KHIuTElORVMsdGhpcy5fY29udG91ckNvdW50c1tvXVtnXSx0aGlzLl9jb250b3VyT2Zmc2V0c1tvXVtnXSkpfWZvcihmLnVuYmluZCgpLChmPXRoaXMuX2R5bmFtaWNWQU8pLmJpbmQoKSxhPTA7YTwzOysrYSlpZigwIT09dGhpcy5fZHluYW1pY0NvdW50c1thXSlmb3IoaC51bmlmb3Jtcy5tb2RlbD1uLm1vZGVsLGgudW5pZm9ybXMuY2xpcEJvdW5kcz1uLmNsaXBCb3VuZHMsaC51bmlmb3Jtcy5wZXJtdXRhdGlvbj1NW2FdLHIubGluZVdpZHRoKHRoaXMuZHluYW1pY1dpZHRoW2FdKnRoaXMucGl4ZWxSYXRpbyksaC51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5keW5hbWljQ29sb3JbYV0saC51bmlmb3Jtcy5jb250b3VyVGludD10aGlzLmR5bmFtaWNUaW50W2FdLGgudW5pZm9ybXMuaGVpZ2h0PXRoaXMuZHluYW1pY0xldmVsW2FdLGYuZHJhdyhyLkxJTkVTLHRoaXMuX2R5bmFtaWNDb3VudHNbYV0sdGhpcy5fZHluYW1pY09mZnNldHNbYV0pLG89MDtvPDM7KytvKXRoaXMuY29udG91clByb2plY3Rbb11bYV0mJihoLnVuaWZvcm1zLm1vZGVsPXUucHJvamVjdGlvbnNbb10saC51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tvXSxmLmRyYXcoci5MSU5FUyx0aGlzLl9keW5hbWljQ291bnRzW2FdLHRoaXMuX2R5bmFtaWNPZmZzZXRzW2FdKSk7Zi51bmJpbmQoKX19TC5kcmF3PWZ1bmN0aW9uKHQpe3JldHVybiBSLmNhbGwodGhpcyx0LCExKX0sTC5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIFIuY2FsbCh0aGlzLHQsITApfTt2YXIgRj17bW9kZWw6ayx2aWV3OmsscHJvamVjdGlvbjprLGludmVyc2VNb2RlbDprLGNsaXBCb3VuZHM6W1swLDAsMF0sWzAsMCwwXV0saGVpZ2h0OjAsc2hhcGU6WzAsMF0scGlja0lkOjAsbG93ZXJCb3VuZDpbMCwwLDBdLHVwcGVyQm91bmQ6WzAsMCwwXSx6T2Zmc2V0OjAsb2JqZWN0T2Zmc2V0OlswLDAsMF0scGVybXV0YXRpb246WzEsMCwwLDAsMSwwLDAsMCwxXSxsaWdodFBvc2l0aW9uOlswLDAsMF0sZXllUG9zaXRpb246WzAsMCwwXX07ZnVuY3Rpb24gQih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP1tlKHRbMF0pLGUodFsxXSksZSh0WzJdKV06W2UodCksZSh0KSxlKHQpXX1mdW5jdGlvbiBOKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpPzM9PT10Lmxlbmd0aD9bdFswXSx0WzFdLHRbMl0sMV06W3RbMF0sdFsxXSx0WzJdLHRbM11dOlswLDAsMCwxXX1mdW5jdGlvbiBqKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuW04odFswXSksTih0WzFdKSxOKHRbMl0pXTt2YXIgZT1OKHQpO3JldHVybltlLnNsaWNlKCksZS5zbGljZSgpLGUuc2xpY2UoKV19fUwuZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO2UuZGlzYWJsZShlLkNVTExfRkFDRSk7dmFyIHI9RjtyLm1vZGVsPXQubW9kZWx8fGssci52aWV3PXQudmlld3x8ayxyLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxrLHIuc2hhcGU9dGhpcy5fZmllbGRbMl0uc2hhcGUsci5waWNrSWQ9dGhpcy5waWNrSWQvMjU1LHIubG93ZXJCb3VuZD10aGlzLmJvdW5kc1swXSxyLnVwcGVyQm91bmQ9dGhpcy5ib3VuZHNbMV0sci5vYmplY3RPZmZzZXQ9dGhpcy5vYmplY3RPZmZzZXQsci5wZXJtdXRhdGlvbj1EO2Zvcih2YXIgbj0wO248MjsrK24pZm9yKHZhciBhPXIuY2xpcEJvdW5kc1tuXSxpPTA7aTwzOysraSlhW2ldPU1hdGgubWluKE1hdGgubWF4KHRoaXMuY2xpcEJvdW5kc1tuXVtpXSwtMWU4KSwxZTgpO3ZhciBvPU8ocix0aGlzKTtpZihvLnNob3dTdXJmYWNlKXtmb3IodGhpcy5fcGlja1NoYWRlci5iaW5kKCksdGhpcy5fcGlja1NoYWRlci51bmlmb3Jtcz1yLHRoaXMuX3Zhby5iaW5kKCksdGhpcy5fdmFvLmRyYXcoZS5UUklBTkdMRVMsdGhpcy5fdmVydGV4Q291bnQpLG49MDtuPDM7KytuKXRoaXMuc3VyZmFjZVByb2plY3Rbbl0mJih0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zLm1vZGVsPW8ucHJvamVjdGlvbnNbbl0sdGhpcy5fcGlja1NoYWRlci51bmlmb3Jtcy5jbGlwQm91bmRzPW8uY2xpcEJvdW5kc1tuXSx0aGlzLl92YW8uZHJhdyhlLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCkpO3RoaXMuX3Zhby51bmJpbmQoKX1pZihvLnNob3dDb250b3VyKXt2YXIgcz10aGlzLl9jb250b3VyUGlja1NoYWRlcjtzLmJpbmQoKSxzLnVuaWZvcm1zPXI7dmFyIGw9dGhpcy5fY29udG91clZBTztmb3IobC5iaW5kKCksaT0wO2k8MzsrK2kpZm9yKGUubGluZVdpZHRoKHRoaXMuY29udG91cldpZHRoW2ldKnRoaXMucGl4ZWxSYXRpbykscy51bmlmb3Jtcy5wZXJtdXRhdGlvbj1NW2ldLG49MDtuPHRoaXMuY29udG91ckxldmVsc1tpXS5sZW5ndGg7KytuKXRoaXMuX2NvbnRvdXJDb3VudHNbaV1bbl0mJihzLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbaV1bbl0sbC5kcmF3KGUuTElORVMsdGhpcy5fY29udG91ckNvdW50c1tpXVtuXSx0aGlzLl9jb250b3VyT2Zmc2V0c1tpXVtuXSkpO2ZvcihuPTA7bjwzOysrbilmb3Iocy51bmlmb3Jtcy5tb2RlbD1vLnByb2plY3Rpb25zW25dLHMudW5pZm9ybXMuY2xpcEJvdW5kcz1vLmNsaXBCb3VuZHNbbl0saT0wO2k8MzsrK2kpaWYodGhpcy5jb250b3VyUHJvamVjdFtuXVtpXSl7cy51bmlmb3Jtcy5wZXJtdXRhdGlvbj1NW2ldLGUubGluZVdpZHRoKHRoaXMuY29udG91cldpZHRoW2ldKnRoaXMucGl4ZWxSYXRpbyk7Zm9yKHZhciBjPTA7Yzx0aGlzLmNvbnRvdXJMZXZlbHNbaV0ubGVuZ3RoOysrYyl0aGlzLl9jb250b3VyQ291bnRzW2ldW2NdJiYocy51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2ldW2NdLGwuZHJhdyhlLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbaV1bY10sdGhpcy5fY29udG91ck9mZnNldHNbaV1bY10pKX1sLnVuYmluZCgpfX0sTC5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyPXRoaXMuX3BpY2tSZXN1bHQsbj1lWzBdKih0LnZhbHVlWzBdKyh0LnZhbHVlWzJdPj40KS8xNikvMjU1LGE9TWF0aC5mbG9vcihuKSxpPW4tYSxvPWVbMV0qKHQudmFsdWVbMV0rKDE1JnQudmFsdWVbMl0pLzE2KS8yNTUscz1NYXRoLmZsb29yKG8pLGw9by1zO2ErPTEscys9MTt2YXIgYz1yLnBvc2l0aW9uO2NbMF09Y1sxXT1jWzJdPTA7Zm9yKHZhciB1PTA7dTwyOysrdSlmb3IodmFyIGg9dT9pOjEtaSxmPTA7ZjwyOysrZilmb3IodmFyIHA9YSt1LGQ9cytmLHY9aCooZj9sOjEtbCksbT0wO208MzsrK20pY1ttXSs9dGhpcy5fZmllbGRbbV0uZ2V0KHAsZCkqdjtmb3IodmFyIHk9dGhpcy5fcGlja1Jlc3VsdC5sZXZlbCx4PTA7eDwzOysreClpZih5W3hdPWcubGUodGhpcy5jb250b3VyTGV2ZWxzW3hdLGNbeF0pLHlbeF08MCl0aGlzLmNvbnRvdXJMZXZlbHNbeF0ubGVuZ3RoPjAmJih5W3hdPTApO2Vsc2UgaWYoeVt4XTx0aGlzLmNvbnRvdXJMZXZlbHNbeF0ubGVuZ3RoLTEpe3ZhciBiPXRoaXMuY29udG91ckxldmVsc1t4XVt5W3hdXSxfPXRoaXMuY29udG91ckxldmVsc1t4XVt5W3hdKzFdO01hdGguYWJzKGItY1t4XSk+TWF0aC5hYnMoXy1jW3hdKSYmKHlbeF0rPTEpfWZvcihyLmluZGV4WzBdPWk8LjU/YTphKzEsci5pbmRleFsxXT1sPC41P3M6cysxLHIudXZbMF09bi9lWzBdLHIudXZbMV09by9lWzFdLG09MDttPDM7KyttKXIuZGF0YUNvb3JkaW5hdGVbbV09dGhpcy5fZmllbGRbbV0uZ2V0KHIuaW5kZXhbMF0sci5pbmRleFsxXSk7cmV0dXJuIHJ9LEwucGFkRmllbGQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnNoYXBlLnNsaWNlKCksbj10LnNoYXBlLnNsaWNlKCk7Yy5hc3NpZ24odC5sbygxLDEpLmhpKHJbMF0sclsxXSksZSksYy5hc3NpZ24odC5sbygxKS5oaShyWzBdLDEpLGUuaGkoclswXSwxKSksYy5hc3NpZ24odC5sbygxLG5bMV0tMSkuaGkoclswXSwxKSxlLmxvKDAsclsxXS0xKS5oaShyWzBdLDEpKSxjLmFzc2lnbih0LmxvKDAsMSkuaGkoMSxyWzFdKSxlLmhpKDEpKSxjLmFzc2lnbih0LmxvKG5bMF0tMSwxKS5oaSgxLHJbMV0pLGUubG8oclswXS0xKSksdC5zZXQoMCwwLGUuZ2V0KDAsMCkpLHQuc2V0KDAsblsxXS0xLGUuZ2V0KDAsclsxXS0xKSksdC5zZXQoblswXS0xLDAsZS5nZXQoclswXS0xLDApKSx0LnNldChuWzBdLTEsblsxXS0xLGUuZ2V0KHJbMF0tMSxyWzFdLTEpKX0sTC51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLm9iamVjdE9mZnNldD10Lm9iamVjdE9mZnNldHx8dGhpcy5vYmplY3RPZmZzZXQsdGhpcy5kaXJ0eT0hMCwiY29udG91cldpZHRoImluIHQmJih0aGlzLmNvbnRvdXJXaWR0aD1CKHQuY29udG91cldpZHRoLE51bWJlcikpLCJzaG93Q29udG91ciJpbiB0JiYodGhpcy5zaG93Q29udG91cj1CKHQuc2hvd0NvbnRvdXIsQm9vbGVhbikpLCJzaG93U3VyZmFjZSJpbiB0JiYodGhpcy5zaG93U3VyZmFjZT0hIXQuc2hvd1N1cmZhY2UpLCJjb250b3VyVGludCJpbiB0JiYodGhpcy5jb250b3VyVGludD1CKHQuY29udG91clRpbnQsQm9vbGVhbikpLCJjb250b3VyQ29sb3IiaW4gdCYmKHRoaXMuY29udG91ckNvbG9yPWoodC5jb250b3VyQ29sb3IpKSwiY29udG91clByb2plY3QiaW4gdCYmKHRoaXMuY29udG91clByb2plY3Q9Qih0LmNvbnRvdXJQcm9qZWN0LGZ1bmN0aW9uKHQpe3JldHVybiBCKHQsQm9vbGVhbil9KSksInN1cmZhY2VQcm9qZWN0ImluIHQmJih0aGlzLnN1cmZhY2VQcm9qZWN0PXQuc3VyZmFjZVByb2plY3QpLCJkeW5hbWljQ29sb3IiaW4gdCYmKHRoaXMuZHluYW1pY0NvbG9yPWoodC5keW5hbWljQ29sb3IpKSwiZHluYW1pY1RpbnQiaW4gdCYmKHRoaXMuZHluYW1pY1RpbnQ9Qih0LmR5bmFtaWNUaW50LE51bWJlcikpLCJkeW5hbWljV2lkdGgiaW4gdCYmKHRoaXMuZHluYW1pY1dpZHRoPUIodC5keW5hbWljV2lkdGgsTnVtYmVyKSksIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLCJjb2xvckJvdW5kcyJpbiB0JiYodGhpcy5jb2xvckJvdW5kcz10LmNvbG9yQm91bmRzKSwidmVydGV4Q29sb3IiaW4gdCYmKHRoaXMudmVydGV4Q29sb3I9dC52ZXJ0ZXhDb2xvcj8xOjApO3ZhciBlPXQuZmllbGR8fHQuY29vcmRzJiZ0LmNvb3Jkc1syXXx8bnVsbCxyPSExO2lmKGV8fChlPXRoaXMuX2ZpZWxkWzJdLnNoYXBlWzBdfHx0aGlzLl9maWVsZFsyXS5zaGFwZVsyXT90aGlzLl9maWVsZFsyXS5sbygxLDEpLmhpKHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzBdLTIsdGhpcy5fZmllbGRbMl0uc2hhcGVbMV0tMik6dGhpcy5fZmllbGRbMl0uaGkoMCwwKSksImZpZWxkImluIHR8fCJjb29yZHMiaW4gdCl7dmFyIGE9KGUuc2hhcGVbMF0rMikqKGUuc2hhcGVbMV0rMik7YT50aGlzLl9maWVsZFsyXS5kYXRhLmxlbmd0aCYmKHMuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkWzJdLmRhdGEpLHRoaXMuX2ZpZWxkWzJdLmRhdGE9cy5tYWxsb2NGbG9hdChuLm5leHRQb3cyKGEpKSksdGhpcy5fZmllbGRbMl09aCh0aGlzLl9maWVsZFsyXS5kYXRhLFtlLnNoYXBlWzBdKzIsZS5zaGFwZVsxXSsyXSksdGhpcy5wYWRGaWVsZCh0aGlzLl9maWVsZFsyXSxlKSx0aGlzLnNoYXBlPWUuc2hhcGUuc2xpY2UoKTtmb3IodmFyIGk9dGhpcy5zaGFwZSxvPTA7bzwyOysrbyl0aGlzLl9maWVsZFsyXS5zaXplPnRoaXMuX2ZpZWxkW29dLmRhdGEubGVuZ3RoJiYocy5mcmVlRmxvYXQodGhpcy5fZmllbGRbb10uZGF0YSksdGhpcy5fZmllbGRbb10uZGF0YT1zLm1hbGxvY0Zsb2F0KHRoaXMuX2ZpZWxkWzJdLnNpemUpKSx0aGlzLl9maWVsZFtvXT1oKHRoaXMuX2ZpZWxkW29dLmRhdGEsW2lbMF0rMixpWzFdKzJdKTtpZih0LmNvb3Jkcyl7dmFyIHA9dC5jb29yZHM7aWYoIUFycmF5LmlzQXJyYXkocCl8fDMhPT1wLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGludmFsaWQgY29vcmRpbmF0ZXMgZm9yIHgveSIpO2ZvcihvPTA7bzwyOysrbyl7dmFyIGQ9cFtvXTtmb3IoYj0wO2I8MjsrK2IpaWYoZC5zaGFwZVtiXSE9PWlbYl0pdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBjb29yZHMgaGF2ZSBpbmNvcnJlY3Qgc2hhcGUiKTt0aGlzLnBhZEZpZWxkKHRoaXMuX2ZpZWxkW29dLGQpfX1lbHNlIGlmKHQudGlja3Mpe3ZhciBnPXQudGlja3M7aWYoIUFycmF5LmlzQXJyYXkoZyl8fDIhPT1nLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGludmFsaWQgdGlja3MiKTtmb3Iobz0wO288MjsrK28pe3ZhciBtPWdbb107aWYoKEFycmF5LmlzQXJyYXkobSl8fG0ubGVuZ3RoKSYmKG09aChtKSksbS5zaGFwZVswXSE9PWlbb10pdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBpbnZhbGlkIHRpY2sgbGVuZ3RoIik7dmFyIHk9aChtLmRhdGEsaSk7eS5zdHJpZGVbb109bS5zdHJpZGVbMF0seS5zdHJpZGVbMV5vXT0wLHRoaXMucGFkRmllbGQodGhpcy5fZmllbGRbb10seSl9fWVsc2V7Zm9yKG89MDtvPDI7KytvKXt2YXIgeD1bMCwwXTt4W29dPTEsdGhpcy5fZmllbGRbb109aCh0aGlzLl9maWVsZFtvXS5kYXRhLFtpWzBdKzIsaVsxXSsyXSx4LDApfXRoaXMuX2ZpZWxkWzBdLnNldCgwLDAsMCk7Zm9yKHZhciBiPTA7YjxpWzBdOysrYil0aGlzLl9maWVsZFswXS5zZXQoYisxLDAsYik7Zm9yKHRoaXMuX2ZpZWxkWzBdLnNldChpWzBdKzEsMCxpWzBdLTEpLHRoaXMuX2ZpZWxkWzFdLnNldCgwLDAsMCksYj0wO2I8aVsxXTsrK2IpdGhpcy5fZmllbGRbMV0uc2V0KDAsYisxLGIpO3RoaXMuX2ZpZWxkWzFdLnNldCgwLGlbMV0rMSxpWzFdLTEpfXZhciBfPXRoaXMuX2ZpZWxkLHc9aChzLm1hbGxvY0Zsb2F0KDMqX1syXS5zaXplKjIpLFszLGlbMF0rMixpWzFdKzIsMl0pO2ZvcihvPTA7bzwzOysrbyl2KHcucGljayhvKSxfW29dLCJtaXJyb3IiKTt2YXIgaz1oKHMubWFsbG9jRmxvYXQoMypfWzJdLnNpemUpLFtpWzBdKzIsaVsxXSsyLDNdKTtmb3Iobz0wO288aVswXSsyOysrbylmb3IoYj0wO2I8aVsxXSsyOysrYil7dmFyIE09dy5nZXQoMCxvLGIsMCksQT13LmdldCgwLG8sYiwxKSxFPXcuZ2V0KDEsbyxiLDApLEw9dy5nZXQoMSxvLGIsMSksQz13LmdldCgyLG8sYiwwKSxQPXcuZ2V0KDIsbyxiLDEpLE89RSpQLUwqQyx6PUMqQS1QKk0sST1NKkwtQSpFLEQ9TWF0aC5zcXJ0KE8qTyt6KnorSSpJKTtEPDFlLTg/KEQ9TWF0aC5tYXgoTWF0aC5hYnMoTyksTWF0aC5hYnMoeiksTWF0aC5hYnMoSSkpKTwxZS04PyhJPTEsej1PPTAsRD0xKTpEPTEvRDpEPTEvTWF0aC5zcXJ0KEQpLGsuc2V0KG8sYiwwLE8qRCksay5zZXQobyxiLDEseipEKSxrLnNldChvLGIsMixJKkQpfXMuZnJlZSh3LmRhdGEpO3ZhciBSPVsxLzAsMS8wLDEvMF0sRj1bLTEvMCwtMS8wLC0xLzBdLE49MS8wLFY9LTEvMCxVPShpWzBdLTEpKihpWzFdLTEpKjYscT1zLm1hbGxvY0Zsb2F0KG4ubmV4dFBvdzIoMTAqVSkpLEg9MCxHPTA7Zm9yKG89MDtvPGlbMF0tMTsrK28pdDpmb3IoYj0wO2I8aVsxXS0xOysrYil7Zm9yKHZhciBZPTA7WTwyOysrWSlmb3IodmFyIFc9MDtXPDI7KytXKWZvcih2YXIgWD0wO1g8MzsrK1gpe3ZhciBaPXRoaXMuX2ZpZWxkW1hdLmdldCgxK28rWSwxK2IrVyk7aWYoaXNOYU4oWil8fCFpc0Zpbml0ZShaKSljb250aW51ZSB0fWZvcihYPTA7WDw2OysrWCl7dmFyIEo9bytUW1hdWzBdLEs9YitUW1hdWzFdLFE9dGhpcy5fZmllbGRbMF0uZ2V0KEorMSxLKzEpLCQ9dGhpcy5fZmllbGRbMV0uZ2V0KEorMSxLKzEpO1o9dGhpcy5fZmllbGRbMl0uZ2V0KEorMSxLKzEpLE89ay5nZXQoSisxLEsrMSwwKSx6PWsuZ2V0KEorMSxLKzEsMSksST1rLmdldChKKzEsSysxLDIpLHQuaW50ZW5zaXR5JiYodHQ9dC5pbnRlbnNpdHkuZ2V0KEosSykpO3ZhciB0dD10LmludGVuc2l0eT90LmludGVuc2l0eS5nZXQoSixLKTpaK3RoaXMub2JqZWN0T2Zmc2V0WzJdO3FbSCsrXT1KLHFbSCsrXT1LLHFbSCsrXT1RLHFbSCsrXT0kLHFbSCsrXT1aLHFbSCsrXT0wLHFbSCsrXT10dCxxW0grK109TyxxW0grK109eixxW0grK109SSxSWzBdPU1hdGgubWluKFJbMF0sUSt0aGlzLm9iamVjdE9mZnNldFswXSksUlsxXT1NYXRoLm1pbihSWzFdLCQrdGhpcy5vYmplY3RPZmZzZXRbMV0pLFJbMl09TWF0aC5taW4oUlsyXSxaK3RoaXMub2JqZWN0T2Zmc2V0WzJdKSxOPU1hdGgubWluKE4sdHQpLEZbMF09TWF0aC5tYXgoRlswXSxRK3RoaXMub2JqZWN0T2Zmc2V0WzBdKSxGWzFdPU1hdGgubWF4KEZbMV0sJCt0aGlzLm9iamVjdE9mZnNldFsxXSksRlsyXT1NYXRoLm1heChGWzJdLFordGhpcy5vYmplY3RPZmZzZXRbMl0pLFY9TWF0aC5tYXgoVix0dCksRys9MX19Zm9yKHQuaW50ZW5zaXR5Qm91bmRzJiYoTj0rdC5pbnRlbnNpdHlCb3VuZHNbMF0sVj0rdC5pbnRlbnNpdHlCb3VuZHNbMV0pLG89NjtvPEg7bys9MTApcVtvXT0ocVtvXS1OKS8oVi1OKTt0aGlzLl92ZXJ0ZXhDb3VudD1HLHRoaXMuX2Nvb3JkaW5hdGVCdWZmZXIudXBkYXRlKHEuc3ViYXJyYXkoMCxIKSkscy5mcmVlRmxvYXQocSkscy5mcmVlKGsuZGF0YSksdGhpcy5ib3VuZHM9W1IsRl0sdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHl8fHRoaXMuX2ZpZWxkWzJdLHRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdPT09TiYmdGhpcy5pbnRlbnNpdHlCb3VuZHNbMV09PT1WfHwocj0hMCksdGhpcy5pbnRlbnNpdHlCb3VuZHM9W04sVl19aWYoImxldmVscyJpbiB0KXt2YXIgZXQ9dC5sZXZlbHM7Zm9yKGV0PUFycmF5LmlzQXJyYXkoZXRbMF0pP2V0LnNsaWNlKCk6W1tdLFtdLGV0XSxvPTA7bzwzOysrbylldFtvXT1ldFtvXS5zbGljZSgpLGV0W29dLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7Zm9yKG89MDtvPDM7KytvKWZvcihiPTA7YjxldFtvXS5sZW5ndGg7KytiKWV0W29dW2JdLT10aGlzLm9iamVjdE9mZnNldFtvXTt0OmZvcihvPTA7bzwzOysrbyl7aWYoZXRbb10ubGVuZ3RoIT09dGhpcy5jb250b3VyTGV2ZWxzW29dLmxlbmd0aCl7cj0hMDticmVha31mb3IoYj0wO2I8ZXRbb10ubGVuZ3RoOysrYilpZihldFtvXVtiXSE9PXRoaXMuY29udG91ckxldmVsc1tvXVtiXSl7cj0hMDticmVhayB0fX10aGlzLmNvbnRvdXJMZXZlbHM9ZXR9aWYocil7Xz10aGlzLl9maWVsZCxpPXRoaXMuc2hhcGU7Zm9yKHZhciBydD1bXSxudD0wO250PDM7KytudCl7dmFyIGF0PXRoaXMuY29udG91ckxldmVsc1tudF0saXQ9W10sb3Q9W10sc3Q9WzAsMCwwXTtmb3Iobz0wO288YXQubGVuZ3RoOysrbyl7dmFyIGx0PWYodGhpcy5fZmllbGRbbnRdLGF0W29dKTtpdC5wdXNoKHJ0Lmxlbmd0aC81fDApLEc9MDt0OmZvcihiPTA7YjxsdC5jZWxscy5sZW5ndGg7KytiKXt2YXIgY3Q9bHQuY2VsbHNbYl07Zm9yKFg9MDtYPDI7KytYKXt2YXIgdXQ9bHQucG9zaXRpb25zW2N0W1hdXSxodD11dFswXSxmdD0wfE1hdGguZmxvb3IoaHQpLHB0PWh0LWZ0LGR0PXV0WzFdLGd0PTB8TWF0aC5mbG9vcihkdCksdnQ9ZHQtZ3QsbXQ9ITE7ZTpmb3IodmFyIHl0PTA7eXQ8MzsrK3l0KXtzdFt5dF09MDt2YXIgeHQ9KG50K3l0KzEpJTM7Zm9yKFk9MDtZPDI7KytZKXt2YXIgYnQ9WT9wdDoxLXB0O2ZvcihKPTB8TWF0aC5taW4oTWF0aC5tYXgoZnQrWSwwKSxpWzBdKSxXPTA7VzwyOysrVyl7dmFyIF90PVc/dnQ6MS12dDtpZihLPTB8TWF0aC5taW4oTWF0aC5tYXgoZ3QrVywwKSxpWzFdKSxaPXl0PDI/dGhpcy5fZmllbGRbeHRdLmdldChKLEspOih0aGlzLmludGVuc2l0eS5nZXQoSixLKS10aGlzLmludGVuc2l0eUJvdW5kc1swXSkvKHRoaXMuaW50ZW5zaXR5Qm91bmRzWzFdLXRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdKSwhaXNGaW5pdGUoWil8fGlzTmFOKFopKXttdD0hMDticmVhayBlfXZhciB3dD1idCpfdDtzdFt5dF0rPXd0Klp9fX1pZihtdCl7aWYoWD4wKXtmb3IodmFyIGt0PTA7a3Q8NTsrK2t0KXJ0LnBvcCgpO0ctPTF9Y29udGludWUgdH1ydC5wdXNoKHN0WzBdLHN0WzFdLHV0WzBdLHV0WzFdLHN0WzJdKSxHKz0xfX1vdC5wdXNoKEcpfXRoaXMuX2NvbnRvdXJPZmZzZXRzW250XT1pdCx0aGlzLl9jb250b3VyQ291bnRzW250XT1vdH12YXIgVHQ9cy5tYWxsb2NGbG9hdChydC5sZW5ndGgpO2ZvcihvPTA7bzxydC5sZW5ndGg7KytvKVR0W29dPXJ0W29dO3RoaXMuX2NvbnRvdXJCdWZmZXIudXBkYXRlKFR0KSxzLmZyZWVGbG9hdChUdCl9dC5jb2xvcm1hcCYmdGhpcy5fY29sb3JNYXAuc2V0UGl4ZWxzKGZ1bmN0aW9uKHQpe3ZhciBlPXUoW2woe2NvbG9ybWFwOnQsbnNoYWRlczpTLGZvcm1hdDoicmdiYSJ9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0sdFsxXSx0WzJdLDI1NSp0WzNdXX0pXSk7cmV0dXJuIGMuZGl2c2VxKGUsMjU1KSxlfSh0LmNvbG9ybWFwKSl9LEwuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3NoYWRlci5kaXNwb3NlKCksdGhpcy5fdmFvLmRpc3Bvc2UoKSx0aGlzLl9jb29yZGluYXRlQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9jb2xvck1hcC5kaXNwb3NlKCksdGhpcy5fY29udG91ckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5fY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5fY29udG91clNoYWRlci5kaXNwb3NlKCksdGhpcy5fY29udG91clBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2R5bmFtaWNCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2R5bmFtaWNWQU8uZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8MzsrK3Qpcy5mcmVlRmxvYXQodGhpcy5fZmllbGRbdF0uZGF0YSl9LEwuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYoIXQpcmV0dXJuIHRoaXMuX2R5bmFtaWNDb3VudHM9WzAsMCwwXSx0aGlzLmR5YW5hbWljTGV2ZWw9W05hTixOYU4sTmFOXSx2b2lkKHRoaXMuaGlnaGxpZ2h0TGV2ZWw9Wy0xLC0xLC0xXSk7Zm9yKGU9MDtlPDM7KytlKXRoaXMuZW5hYmxlSGlnaGxpZ2h0W2VdP3RoaXMuaGlnaGxpZ2h0TGV2ZWxbZV09dC5sZXZlbFtlXTp0aGlzLmhpZ2hsaWdodExldmVsW2VdPS0xO2ZvcihyPXRoaXMuc25hcFRvRGF0YT90LmRhdGFDb29yZGluYXRlOnQucG9zaXRpb24sZT0wO2U8MzsrK2UpcltlXS09dGhpcy5vYmplY3RPZmZzZXRbZV07aWYodGhpcy5lbmFibGVEeW5hbWljWzBdJiZyWzBdIT09dGhpcy5keW5hbWljTGV2ZWxbMF18fHRoaXMuZW5hYmxlRHluYW1pY1sxXSYmclsxXSE9PXRoaXMuZHluYW1pY0xldmVsWzFdfHx0aGlzLmVuYWJsZUR5bmFtaWNbMl0mJnJbMl0hPT10aGlzLmR5bmFtaWNMZXZlbFsyXSl7Zm9yKHZhciBuPTAsYT10aGlzLnNoYXBlLGk9cy5tYWxsb2NGbG9hdCgxMiphWzBdKmFbMV0pLG89MDtvPDM7KytvKWlmKHRoaXMuZW5hYmxlRHluYW1pY1tvXSl7dGhpcy5keW5hbWljTGV2ZWxbb109cltvXTt2YXIgbD0obysxKSUzLGM9KG8rMiklMyx1PXRoaXMuX2ZpZWxkW29dLGg9dGhpcy5fZmllbGRbbF0scD10aGlzLl9maWVsZFtjXSxkPWYodSxyW29dKSxnPWQuY2VsbHMsdj1kLnBvc2l0aW9ucztmb3IodGhpcy5fZHluYW1pY09mZnNldHNbb109bixlPTA7ZTxnLmxlbmd0aDsrK2UpZm9yKHZhciBtPWdbZV0seT0wO3k8MjsrK3kpe3ZhciB4PXZbbVt5XV0sYj0reFswXSxfPTB8Yix3PTB8TWF0aC5taW4oXysxLGFbMF0pLGs9Yi1fLFQ9MS1rLE09K3hbMV0sQT0wfE0sUz0wfE1hdGgubWluKEErMSxhWzFdKSxFPU0tQSxMPTEtRSxDPVQqTCxQPVQqRSxPPWsqTCx6PWsqRSxJPUMqaC5nZXQoXyxBKStQKmguZ2V0KF8sUykrTypoLmdldCh3LEEpK3oqaC5nZXQodyxTKSxEPUMqcC5nZXQoXyxBKStQKnAuZ2V0KF8sUykrTypwLmdldCh3LEEpK3oqcC5nZXQodyxTKTtpZihpc05hTihJKXx8aXNOYU4oRCkpe3kmJihuLT0xKTticmVha31pWzIqbiswXT1JLGlbMipuKzFdPUQsbis9MX10aGlzLl9keW5hbWljQ291bnRzW29dPW4tdGhpcy5fZHluYW1pY09mZnNldHNbb119ZWxzZSB0aGlzLmR5bmFtaWNMZXZlbFtvXT1OYU4sdGhpcy5fZHluYW1pY0NvdW50c1tvXT0wO3RoaXMuX2R5bmFtaWNCdWZmZXIudXBkYXRlKGkuc3ViYXJyYXkoMCwyKm4pKSxzLmZyZWVGbG9hdChpKX19fSx7Ii4vbGliL3NoYWRlcnMiOjMxNiwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjMxNywiYml0LXR3aWRkbGUiOjk0LGNvbG9ybWFwOjEyOCwiZ2wtYnVmZmVyIjoyNDQsImdsLW1hdDQvaW52ZXJ0IjoyNjgsImdsLW1hdDQvbXVsdGlwbHkiOjI3MCwiZ2wtdGV4dHVyZTJkIjozMjQsImdsLXZhbyI6MzI5LG5kYXJyYXk6NDUyLCJuZGFycmF5LWdyYWRpZW50Ijo0NDMsIm5kYXJyYXktb3BzIjo0NDYsIm5kYXJyYXktcGFjayI6NDQ3LCJzdXJmYWNlLW5ldHMiOjUzMCwidHlwZWRhcnJheS1wb29sIjo1NDR9XSwzMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY3NzLWZvbnQiKSxhPXQoInBpY2stYnktYWxpYXMiKSxpPXQoInJlZ2wiKSxvPXQoImdsLXV0aWwvY29udGV4dCIpLHM9dCgiZXM2LXdlYWstbWFwIiksbD10KCJjb2xvci1ub3JtYWxpemUiKSxjPXQoImZvbnQtYXRsYXMiKSx1PXQoInR5cGVkYXJyYXktcG9vbCIpLGg9dCgicGFyc2UtcmVjdCIpLGY9dCgiaXMtcGxhaW4tb2JqIikscD10KCJwYXJzZS11bml0IiksZD10KCJ0by1weCIpLGc9dCgiZGV0ZWN0LWtlcm5pbmciKSx2PXQoIm9iamVjdC1hc3NpZ24iKSxtPXQoImZvbnQtbWVhc3VyZSIpLHk9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLHg9dCgiYml0LXR3aWRkbGUiKS5uZXh0UG93MixiPW5ldyBzLF89ITE7aWYoZG9jdW1lbnQuYm9keSl7dmFyIHc9ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7dy5zdHlsZS5mb250PSJpdGFsaWMgc21hbGwtY2FwcyBib2xkIGNvbmRlbnNlZCAxNnB4LzIgY3Vyc2l2ZSIsZ2V0Q29tcHV0ZWRTdHlsZSh3KS5mb250U3RyZXRjaCYmKF89ITApLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodyl9dmFyIGs9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Ll9nbCYmdC5wcm9wJiZ0LnRleHR1cmUmJnQuYnVmZmVyfSh0KT90aGlzLmdsPW8odCk6KHQ9e3JlZ2w6dH0sdGhpcy5nbD10LnJlZ2wuX2dsKSx0aGlzLnNoYWRlcj1iLmdldCh0aGlzLmdsKSx0aGlzLnNoYWRlcj90aGlzLnJlZ2w9dGhpcy5zaGFkZXIucmVnbDp0aGlzLnJlZ2w9dC5yZWdsfHxpKHtnbDp0aGlzLmdsfSksdGhpcy5jaGFyQnVmZmVyPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6InVpbnQ4Iix1c2FnZToic3RyZWFtIn0pLHRoaXMuc2l6ZUJ1ZmZlcj10aGlzLnJlZ2wuYnVmZmVyKHt0eXBlOiJmbG9hdCIsdXNhZ2U6InN0cmVhbSJ9KSx0aGlzLnNoYWRlcnx8KHRoaXMuc2hhZGVyPXRoaXMuY3JlYXRlU2hhZGVyKCksYi5zZXQodGhpcy5nbCx0aGlzLnNoYWRlcikpLHRoaXMuYmF0Y2g9W10sdGhpcy5mb250U2l6ZT1bXSx0aGlzLmZvbnQ9W10sdGhpcy5mb250QXRsYXM9W10sdGhpcy5kcmF3PXRoaXMuc2hhZGVyLmRyYXcuYmluZCh0aGlzKSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMucmVnbC5fcmVmcmVzaCgpLHRoaXMuZHJhdyh0aGlzLmJhdGNoKX0sdGhpcy5jYW52YXM9dGhpcy5nbC5jYW52YXMsdGhpcy51cGRhdGUoZih0KT90Ont9KX07ay5wcm90b3R5cGUuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWdsLGU9dCh7YmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMV0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sc3RlbmNpbDp7ZW5hYmxlOiExfSxkZXB0aDp7ZW5hYmxlOiExfSxjb3VudDp0LnByb3AoImNvdW50Iiksb2Zmc2V0OnQucHJvcCgib2Zmc2V0IiksYXR0cmlidXRlczp7Y2hhck9mZnNldDp7b2Zmc2V0OjQsc3RyaWRlOjgsYnVmZmVyOnQudGhpcygic2l6ZUJ1ZmZlciIpfSx3aWR0aDp7b2Zmc2V0OjAsc3RyaWRlOjgsYnVmZmVyOnQudGhpcygic2l6ZUJ1ZmZlciIpfSxjaGFyOnQudGhpcygiY2hhckJ1ZmZlciIpLHBvc2l0aW9uOnQudGhpcygicG9zaXRpb24iKX0sdW5pZm9ybXM6e2F0bGFzU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybltlLmF0bGFzLndpZHRoLGUuYXRsYXMuaGVpZ2h0XX0sYXRsYXNEaW06ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS5hdGxhcy5jb2xzLGUuYXRsYXMucm93c119LGF0bGFzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYXRsYXMudGV4dHVyZX0sY2hhclN0ZXA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5hdGxhcy5zdGVwfSxlbTpmdW5jdGlvbih0LGUpe3JldHVybiBlLmF0bGFzLmVtfSxjb2xvcjp0LnByb3AoImNvbG9yIiksb3BhY2l0eTp0LnByb3AoIm9wYWNpdHkiKSx2aWV3cG9ydDp0LnRoaXMoInZpZXdwb3J0QXJyYXkiKSxzY2FsZTp0LnRoaXMoInNjYWxlIiksYWxpZ246dC5wcm9wKCJhbGlnbiIpLGJhc2VsaW5lOnQucHJvcCgiYmFzZWxpbmUiKSx0cmFuc2xhdGU6dC50aGlzKCJ0cmFuc2xhdGUiKSxwb3NpdGlvbk9mZnNldDp0LnByb3AoInBvc2l0aW9uT2Zmc2V0Iil9LHByaW1pdGl2ZToicG9pbnRzIix2aWV3cG9ydDp0LnRoaXMoInZpZXdwb3J0IiksdmVydDoiXG5cdFx0XHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cdFx0XHRhdHRyaWJ1dGUgZmxvYXQgd2lkdGgsIGNoYXJPZmZzZXQsIGNoYXI7XG5cdFx0XHRhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcblx0XHRcdHVuaWZvcm0gZmxvYXQgZm9udFNpemUsIGNoYXJTdGVwLCBlbSwgYWxpZ24sIGJhc2VsaW5lO1xuXHRcdFx0dW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXHRcdFx0dW5pZm9ybSB2ZWM0IGNvbG9yO1xuXHRcdFx0dW5pZm9ybSB2ZWMyIGF0bGFzU2l6ZSwgYXRsYXNEaW0sIHNjYWxlLCB0cmFuc2xhdGUsIHBvc2l0aW9uT2Zmc2V0O1xuXHRcdFx0dmFyeWluZyB2ZWMyIGNoYXJDb29yZCwgY2hhcklkO1xuXHRcdFx0dmFyeWluZyBmbG9hdCBjaGFyV2lkdGg7XG5cdFx0XHR2YXJ5aW5nIHZlYzQgZm9udENvbG9yO1xuXHRcdFx0dm9pZCBtYWluICgpIHtcblx0XHRcdFx0Iisoay5ub3JtYWxWaWV3cG9ydD8iIjoidmVjMiBwb3NpdGlvbk9mZnNldCA9IHZlYzIocG9zaXRpb25PZmZzZXQueCwtIHBvc2l0aW9uT2Zmc2V0LnkpOyIpKyJcblxuXHRcdFx0XHR2ZWMyIG9mZnNldCA9IGZsb29yKGVtICogKHZlYzIoYWxpZ24gKyBjaGFyT2Zmc2V0LCBiYXNlbGluZSlcblx0XHRcdFx0XHQrIHBvc2l0aW9uT2Zmc2V0KSlcblx0XHRcdFx0XHQvICh2aWV3cG9ydC56dyAqIHNjYWxlLnh5KTtcblxuXHRcdFx0XHR2ZWMyIHBvc2l0aW9uID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlO1xuXHRcdFx0XHRwb3NpdGlvbiArPSBvZmZzZXQgKiBzY2FsZTtcblxuXHRcdFx0XHQiKyhrLm5vcm1hbFZpZXdwb3J0PyJwb3NpdGlvbi55ID0gMS4gLSBwb3NpdGlvbi55OyI6IiIpKyJcblxuXHRcdFx0XHRjaGFyQ29vcmQgPSBwb3NpdGlvbiAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cblx0XHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICogMi4gLSAxLiwgMCwgMSk7XG5cblx0XHRcdFx0Z2xfUG9pbnRTaXplID0gY2hhclN0ZXA7XG5cblx0XHRcdFx0Y2hhcklkLnggPSBtb2QoY2hhciwgYXRsYXNEaW0ueCk7XG5cdFx0XHRcdGNoYXJJZC55ID0gZmxvb3IoY2hhciAvIGF0bGFzRGltLngpO1xuXG5cdFx0XHRcdGNoYXJXaWR0aCA9IHdpZHRoICogZW07XG5cblx0XHRcdFx0Zm9udENvbG9yID0gY29sb3IgLyAyNTUuO1xuXHRcdFx0fSIsZnJhZzoiXG5cdFx0XHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCBhdGxhcztcblx0XHRcdHVuaWZvcm0gZmxvYXQgZm9udFNpemUsIGNoYXJTdGVwLCBvcGFjaXR5O1xuXHRcdFx0dW5pZm9ybSB2ZWMyIGF0bGFzU2l6ZTtcblx0XHRcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblx0XHRcdHZhcnlpbmcgdmVjNCBmb250Q29sb3I7XG5cdFx0XHR2YXJ5aW5nIHZlYzIgY2hhckNvb3JkLCBjaGFySWQ7XG5cdFx0XHR2YXJ5aW5nIGZsb2F0IGNoYXJXaWR0aDtcblxuXHRcdFx0ZmxvYXQgbGlnaHRuZXNzKHZlYzQgY29sb3IpIHtcblx0XHRcdFx0cmV0dXJuIGNvbG9yLnIgKiAwLjI5OSArIGNvbG9yLmcgKiAwLjU4NyArIGNvbG9yLmIgKiAwLjExNDtcblx0XHRcdH1cblxuXHRcdFx0dm9pZCBtYWluICgpIHtcblx0XHRcdFx0dmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAtIGNoYXJDb29yZCArIGNoYXJTdGVwICogLjU7XG5cdFx0XHRcdGZsb2F0IGhhbGZDaGFyU3RlcCA9IGZsb29yKGNoYXJTdGVwICogLjUgKyAuNSk7XG5cblx0XHRcdFx0Ly8gaW52ZXJ0IHkgYW5kIHNoaWZ0IGJ5IDFweCAoRkYgZXhwZWNpYWxseSBuZWVkcyB0aGF0KVxuXHRcdFx0XHR1di55ID0gY2hhclN0ZXAgLSB1di55O1xuXG5cdFx0XHRcdC8vIGlnbm9yZSBwb2ludHMgb3V0c2lkZSBvZiBjaGFyYWN0ZXIgYm91bmRpbmcgYm94XG5cdFx0XHRcdGZsb2F0IGhhbGZDaGFyV2lkdGggPSBjZWlsKGNoYXJXaWR0aCAqIC41KTtcblx0XHRcdFx0aWYgKGZsb29yKHV2LngpID4gaGFsZkNoYXJTdGVwICsgaGFsZkNoYXJXaWR0aCB8fFxuXHRcdFx0XHRcdGZsb29yKHV2LngpIDwgaGFsZkNoYXJTdGVwIC0gaGFsZkNoYXJXaWR0aCkgcmV0dXJuO1xuXG5cdFx0XHRcdHV2ICs9IGNoYXJJZCAqIGNoYXJTdGVwO1xuXHRcdFx0XHR1diA9IHV2IC8gYXRsYXNTaXplO1xuXG5cdFx0XHRcdHZlYzQgY29sb3IgPSBmb250Q29sb3I7XG5cdFx0XHRcdHZlYzQgbWFzayA9IHRleHR1cmUyRChhdGxhcywgdXYpO1xuXG5cdFx0XHRcdGZsb2F0IG1hc2tZID0gbGlnaHRuZXNzKG1hc2spO1xuXHRcdFx0XHQvLyBmbG9hdCBjb2xvclkgPSBsaWdodG5lc3MoY29sb3IpO1xuXHRcdFx0XHRjb2xvci5hICo9IG1hc2tZO1xuXHRcdFx0XHRjb2xvci5hICo9IG9wYWNpdHk7XG5cblx0XHRcdFx0Ly8gY29sb3IuYSArPSAuMTtcblxuXHRcdFx0XHQvLyBhbnRpYWxpYXNpbmcsIHNlZSB5aXEgY29sb3Igc3BhY2UgeS1jaGFubmVsIGZvcm11bGFcblx0XHRcdFx0Ly8gY29sb3IucmdiICs9ICgxLiAtIGNvbG9yLnJnYikgKiAoMS4gLSBtYXNrLnJnYik7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gY29sb3I7XG5cdFx0XHR9In0pO3JldHVybntyZWdsOnQsZHJhdzplLGF0bGFzOnt9fX0say5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoInN0cmluZyI9PXR5cGVvZiB0KXQ9e3RleHQ6dH07ZWxzZSBpZighdClyZXR1cm47bnVsbCE9KHQ9YSh0LHtwb3NpdGlvbjoicG9zaXRpb24gcG9zaXRpb25zIGNvb3JkIGNvb3JkcyBjb29yZGluYXRlcyIsZm9udDoiZm9udCBmb250RmFjZSBmb250ZmFjZSB0eXBlZmFjZSBjc3NGb250IGNzcy1mb250IGZhbWlseSBmb250RmFtaWx5Iixmb250U2l6ZToiZm9udFNpemUgZm9udHNpemUgc2l6ZSBmb250LXNpemUiLHRleHQ6InRleHQgdGV4dHMgY2hhcnMgY2hhcmFjdGVycyB2YWx1ZSB2YWx1ZXMgc3ltYm9scyIsYWxpZ246ImFsaWduIGFsaWdubWVudCB0ZXh0QWxpZ24gdGV4dGJhc2VsaW5lIixiYXNlbGluZToiYmFzZWxpbmUgdGV4dEJhc2VsaW5lIHRleHRiYXNlbGluZSIsZGlyZWN0aW9uOiJkaXIgZGlyZWN0aW9uIHRleHREaXJlY3Rpb24iLGNvbG9yOiJjb2xvciBjb2xvdXIgZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvciB0ZXh0Q29sb3IgdGV4dGNvbG9yIixrZXJuaW5nOiJrZXJuaW5nIGtlcm4iLHJhbmdlOiJyYW5nZSBkYXRhQm94Iix2aWV3cG9ydDoidnAgdmlld3BvcnQgdmlld0JveCB2aWV3Ym94IHZpZXdQb3J0IixvcGFjaXR5OiJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeSB2aXNpYmxlIHZpc2liaWxpdHkgb3BhcXVlIixvZmZzZXQ6Im9mZnNldCBwb3NpdGlvbk9mZnNldCBwYWRkaW5nIHNoaWZ0IGluZGVudCBpbmRlbnRhdGlvbiJ9LCEwKSkub3BhY2l0eSYmKEFycmF5LmlzQXJyYXkodC5vcGFjaXR5KT90aGlzLm9wYWNpdHk9dC5vcGFjaXR5Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pOnRoaXMub3BhY2l0eT1wYXJzZUZsb2F0KHQub3BhY2l0eSkpLG51bGwhPXQudmlld3BvcnQmJih0aGlzLnZpZXdwb3J0PWgodC52aWV3cG9ydCksay5ub3JtYWxWaWV3cG9ydCYmKHRoaXMudmlld3BvcnQueT10aGlzLmNhbnZhcy5oZWlnaHQtdGhpcy52aWV3cG9ydC55LXRoaXMudmlld3BvcnQuaGVpZ2h0KSx0aGlzLnZpZXdwb3J0QXJyYXk9W3RoaXMudmlld3BvcnQueCx0aGlzLnZpZXdwb3J0LnksdGhpcy52aWV3cG9ydC53aWR0aCx0aGlzLnZpZXdwb3J0LmhlaWdodF0pLG51bGw9PXRoaXMudmlld3BvcnQmJih0aGlzLnZpZXdwb3J0PXt4OjAseTowLHdpZHRoOnRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLGhlaWdodDp0aGlzLmdsLmRyYXdpbmdCdWZmZXJIZWlnaHR9LHRoaXMudmlld3BvcnRBcnJheT1bdGhpcy52aWV3cG9ydC54LHRoaXMudmlld3BvcnQueSx0aGlzLnZpZXdwb3J0LndpZHRoLHRoaXMudmlld3BvcnQuaGVpZ2h0XSksbnVsbCE9dC5rZXJuaW5nJiYodGhpcy5rZXJuaW5nPXQua2VybmluZyksbnVsbCE9dC5vZmZzZXQmJigibnVtYmVyIj09dHlwZW9mIHQub2Zmc2V0JiYodC5vZmZzZXQ9W3Qub2Zmc2V0LDBdKSx0aGlzLnBvc2l0aW9uT2Zmc2V0PXkodC5vZmZzZXQpKSx0LmRpcmVjdGlvbiYmKHRoaXMuZGlyZWN0aW9uPXQuZGlyZWN0aW9uKSx0LnJhbmdlJiYodGhpcy5yYW5nZT10LnJhbmdlLHRoaXMuc2NhbGU9WzEvKHQucmFuZ2VbMl0tdC5yYW5nZVswXSksMS8odC5yYW5nZVszXS10LnJhbmdlWzFdKV0sdGhpcy50cmFuc2xhdGU9Wy10LnJhbmdlWzBdLC10LnJhbmdlWzFdXSksdC5zY2FsZSYmKHRoaXMuc2NhbGU9dC5zY2FsZSksdC50cmFuc2xhdGUmJih0aGlzLnRyYW5zbGF0ZT10LnRyYW5zbGF0ZSksdGhpcy5zY2FsZXx8KHRoaXMuc2NhbGU9WzEvdGhpcy52aWV3cG9ydC53aWR0aCwxL3RoaXMudmlld3BvcnQuaGVpZ2h0XSksdGhpcy50cmFuc2xhdGV8fCh0aGlzLnRyYW5zbGF0ZT1bMCwwXSksdGhpcy5mb250Lmxlbmd0aHx8dC5mb250fHwodC5mb250PWsuYmFzZUZvbnRTaXplKyJweCBzYW5zLXNlcmlmIik7dmFyIHIsaT0hMSxvPSExO2lmKHQuZm9udCYmKEFycmF5LmlzQXJyYXkodC5mb250KT90LmZvbnQ6W3QuZm9udF0pLmZvckVhY2goZnVuY3Rpb24odCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdHJ5e3Q9bi5wYXJzZSh0KX1jYXRjaChlKXt0PW4ucGFyc2Uoay5iYXNlRm9udFNpemUrInB4ICIrdCl9ZWxzZSB0PW4ucGFyc2Uobi5zdHJpbmdpZnkodCkpO3ZhciBhPW4uc3RyaW5naWZ5KHtzaXplOmsuYmFzZUZvbnRTaXplLGZhbWlseTp0LmZhbWlseSxzdHJldGNoOl8/dC5zdHJldGNoOnZvaWQgMCx2YXJpYW50OnQudmFyaWFudCx3ZWlnaHQ6dC53ZWlnaHQsc3R5bGU6dC5zdHlsZX0pLHM9cCh0LnNpemUpLGw9TWF0aC5yb3VuZChzWzBdKmQoc1sxXSkpO2lmKGwhPT1lLmZvbnRTaXplW3JdJiYobz0hMCxlLmZvbnRTaXplW3JdPWwpLCEoZS5mb250W3JdJiZhPT1lLmZvbnRbcl0uYmFzZVN0cmluZ3x8KGk9ITAsZS5mb250W3JdPWsuZm9udHNbYV0sZS5mb250W3JdKSkpe3ZhciBjPXQuZmFtaWx5LmpvaW4oIiwgIiksdT1bdC5zdHlsZV07dC5zdHlsZSE9dC52YXJpYW50JiZ1LnB1c2godC52YXJpYW50KSx0LnZhcmlhbnQhPXQud2VpZ2h0JiZ1LnB1c2godC53ZWlnaHQpLF8mJnQud2VpZ2h0IT10LnN0cmV0Y2gmJnUucHVzaCh0LnN0cmV0Y2gpLGUuZm9udFtyXT17YmFzZVN0cmluZzphLGZhbWlseTpjLHdlaWdodDp0LndlaWdodCxzdHJldGNoOnQuc3RyZXRjaCxzdHlsZTp0LnN0eWxlLHZhcmlhbnQ6dC52YXJpYW50LHdpZHRoOnt9LGtlcm5pbmc6e30sbWV0cmljczptKGMse29yaWdpbjoidG9wIixmb250U2l6ZTprLmJhc2VGb250U2l6ZSxmb250U3R5bGU6dS5qb2luKCIgIil9KX0say5mb250c1thXT1lLmZvbnRbcl19fSksKGl8fG8pJiZ0aGlzLmZvbnQuZm9yRWFjaChmdW5jdGlvbihyLGEpe3ZhciBpPW4uc3RyaW5naWZ5KHtzaXplOmUuZm9udFNpemVbYV0sZmFtaWx5OnIuZmFtaWx5LHN0cmV0Y2g6Xz9yLnN0cmV0Y2g6dm9pZCAwLHZhcmlhbnQ6ci52YXJpYW50LHdlaWdodDpyLndlaWdodCxzdHlsZTpyLnN0eWxlfSk7aWYoZS5mb250QXRsYXNbYV09ZS5zaGFkZXIuYXRsYXNbaV0sIWUuZm9udEF0bGFzW2FdKXt2YXIgbz1yLm1ldHJpY3M7ZS5zaGFkZXIuYXRsYXNbaV09ZS5mb250QXRsYXNbYV09e2ZvbnRTdHJpbmc6aSxzdGVwOjIqTWF0aC5jZWlsKGUuZm9udFNpemVbYV0qby5ib3R0b20qLjUpLGVtOmUuZm9udFNpemVbYV0sY29sczowLHJvd3M6MCxoZWlnaHQ6MCx3aWR0aDowLGNoYXJzOltdLGlkczp7fSx0ZXh0dXJlOmUucmVnbC50ZXh0dXJlKCl9fW51bGw9PXQudGV4dCYmKHQudGV4dD1lLnRleHQpfSksInN0cmluZyI9PXR5cGVvZiB0LnRleHQmJnQucG9zaXRpb24mJnQucG9zaXRpb24ubGVuZ3RoPjIpe2Zvcih2YXIgcz1BcnJheSguNSp0LnBvc2l0aW9uLmxlbmd0aCksZj0wO2Y8cy5sZW5ndGg7ZisrKXNbZl09dC50ZXh0O3QudGV4dD1zfWlmKG51bGwhPXQudGV4dHx8aSl7aWYodGhpcy50ZXh0T2Zmc2V0cz1bMF0sQXJyYXkuaXNBcnJheSh0LnRleHQpKXt0aGlzLmNvdW50PXQudGV4dFswXS5sZW5ndGgsdGhpcy5jb3VudHM9W3RoaXMuY291bnRdO2Zvcih2YXIgYj0xO2I8dC50ZXh0Lmxlbmd0aDtiKyspdGhpcy50ZXh0T2Zmc2V0c1tiXT10aGlzLnRleHRPZmZzZXRzW2ItMV0rdC50ZXh0W2ItMV0ubGVuZ3RoLHRoaXMuY291bnQrPXQudGV4dFtiXS5sZW5ndGgsdGhpcy5jb3VudHMucHVzaCh0LnRleHRbYl0ubGVuZ3RoKTt0aGlzLnRleHQ9dC50ZXh0LmpvaW4oIiIpfWVsc2UgdGhpcy50ZXh0PXQudGV4dCx0aGlzLmNvdW50PXRoaXMudGV4dC5sZW5ndGgsdGhpcy5jb3VudHM9W3RoaXMuY291bnRdO3I9W10sdGhpcy5mb250LmZvckVhY2goZnVuY3Rpb24odCxuKXtrLmF0bGFzQ29udGV4dC5mb250PXQuYmFzZVN0cmluZztmb3IodmFyIGE9ZS5mb250QXRsYXNbbl0saT0wO2k8ZS50ZXh0Lmxlbmd0aDtpKyspe3ZhciBvPWUudGV4dC5jaGFyQXQoaSk7aWYobnVsbD09YS5pZHNbb10mJihhLmlkc1tvXT1hLmNoYXJzLmxlbmd0aCxhLmNoYXJzLnB1c2gobyksci5wdXNoKG8pKSxudWxsPT10LndpZHRoW29dJiYodC53aWR0aFtvXT1rLmF0bGFzQ29udGV4dC5tZWFzdXJlVGV4dChvKS53aWR0aC9rLmJhc2VGb250U2l6ZSxlLmtlcm5pbmcpKXt2YXIgcz1bXTtmb3IodmFyIGwgaW4gdC53aWR0aClzLnB1c2gobCtvLG8rbCk7dih0Lmtlcm5pbmcsZyh0LmZhbWlseSx7cGFpcnM6c30pKX19fSl9aWYodC5wb3NpdGlvbilpZih0LnBvc2l0aW9uLmxlbmd0aD4yKXtmb3IodmFyIHc9IXQucG9zaXRpb25bMF0ubGVuZ3RoLFQ9dS5tYWxsb2NGbG9hdCgyKnRoaXMuY291bnQpLE09MCxBPTA7TTx0aGlzLmNvdW50cy5sZW5ndGg7TSsrKXt2YXIgUz10aGlzLmNvdW50c1tNXTtpZih3KWZvcih2YXIgRT0wO0U8UztFKyspVFtBKytdPXQucG9zaXRpb25bMipNXSxUW0ErK109dC5wb3NpdGlvblsyKk0rMV07ZWxzZSBmb3IodmFyIEw9MDtMPFM7TCsrKVRbQSsrXT10LnBvc2l0aW9uW01dWzBdLFRbQSsrXT10LnBvc2l0aW9uW01dWzFdfXRoaXMucG9zaXRpb24uY2FsbD90aGlzLnBvc2l0aW9uKHt0eXBlOiJmbG9hdCIsZGF0YTpUfSk6dGhpcy5wb3NpdGlvbj10aGlzLnJlZ2wuYnVmZmVyKHt0eXBlOiJmbG9hdCIsZGF0YTpUfSksdS5mcmVlRmxvYXQoVCl9ZWxzZSB0aGlzLnBvc2l0aW9uLmRlc3Ryb3kmJnRoaXMucG9zaXRpb24uZGVzdHJveSgpLHRoaXMucG9zaXRpb249e2NvbnN0YW50OnQucG9zaXRpb259O2lmKHQudGV4dHx8aSl7dmFyIEM9dS5tYWxsb2NVaW50OCh0aGlzLmNvdW50KSxQPXUubWFsbG9jRmxvYXQoMip0aGlzLmNvdW50KTt0aGlzLnRleHRXaWR0aD1bXTtmb3IodmFyIE89MCx6PTA7Tzx0aGlzLmNvdW50cy5sZW5ndGg7TysrKXtmb3IodmFyIEk9dGhpcy5jb3VudHNbT10sRD10aGlzLmZvbnRbT118fHRoaXMuZm9udFswXSxSPXRoaXMuZm9udEF0bGFzW09dfHx0aGlzLmZvbnRBdGxhc1swXSxGPTA7RjxJO0YrKyl7dmFyIEI9dGhpcy50ZXh0LmNoYXJBdCh6KSxOPXRoaXMudGV4dC5jaGFyQXQoei0xKTtpZihDW3pdPVIuaWRzW0JdLFBbMip6XT1ELndpZHRoW0JdLEYpe3ZhciBqPVBbMip6LTJdLFY9UFsyKnpdLFU9UFsyKnotMV0rLjUqaisuNSpWO2lmKHRoaXMua2VybmluZyl7dmFyIHE9RC5rZXJuaW5nW04rQl07cSYmKFUrPS4wMDEqcSl9UFsyKnorMV09VX1lbHNlIFBbMip6KzFdPS41KlBbMip6XTt6Kyt9dGhpcy50ZXh0V2lkdGgucHVzaChQLmxlbmd0aD8uNSpQWzIqei0yXStQWzIqei0xXTowKX10LmFsaWdufHwodC5hbGlnbj10aGlzLmFsaWduKSx0aGlzLmNoYXJCdWZmZXIoe2RhdGE6Qyx0eXBlOiJ1aW50OCIsdXNhZ2U6InN0cmVhbSJ9KSx0aGlzLnNpemVCdWZmZXIoe2RhdGE6UCx0eXBlOiJmbG9hdCIsdXNhZ2U6InN0cmVhbSJ9KSx1LmZyZWVVaW50OChDKSx1LmZyZWVGbG9hdChQKSxyLmxlbmd0aCYmdGhpcy5mb250LmZvckVhY2goZnVuY3Rpb24odCxyKXt2YXIgbj1lLmZvbnRBdGxhc1tyXSxhPW4uc3RlcCxpPU1hdGguZmxvb3Ioay5tYXhBdGxhc1NpemUvYSksbz1NYXRoLm1pbihpLG4uY2hhcnMubGVuZ3RoKSxzPU1hdGguY2VpbChuLmNoYXJzLmxlbmd0aC9vKSxsPXgobyphKSx1PXgocyphKTtuLndpZHRoPWwsbi5oZWlnaHQ9dSxuLnJvd3M9cyxuLmNvbHM9byxuLmVtJiZuLnRleHR1cmUoe2RhdGE6Yyh7Y2FudmFzOmsuYXRsYXNDYW52YXMsZm9udDpuLmZvbnRTdHJpbmcsY2hhcnM6bi5jaGFycyxzaGFwZTpbbCx1XSxzdGVwOlthLGFdfSl9KX0pfWlmKHQuYWxpZ24mJih0aGlzLmFsaWduPXQuYWxpZ24sdGhpcy5hbGlnbk9mZnNldD10aGlzLnRleHRXaWR0aC5tYXAoZnVuY3Rpb24odCxyKXt2YXIgbj1BcnJheS5pc0FycmF5KGUuYWxpZ24pP2UuYWxpZ24ubGVuZ3RoPjE/ZS5hbGlnbltyXTplLmFsaWduWzBdOmUuYWxpZ247aWYoIm51bWJlciI9PXR5cGVvZiBuKXJldHVybiBuO3N3aXRjaChuKXtjYXNlInJpZ2h0IjpjYXNlImVuZCI6cmV0dXJuLXQ7Y2FzZSJjZW50ZXIiOmNhc2UiY2VudHJlIjpjYXNlIm1pZGRsZSI6cmV0dXJuLjUqLXR9cmV0dXJuIDB9KSksbnVsbD09dGhpcy5iYXNlbGluZSYmbnVsbD09dC5iYXNlbGluZSYmKHQuYmFzZWxpbmU9MCksbnVsbCE9dC5iYXNlbGluZSYmKHRoaXMuYmFzZWxpbmU9dC5iYXNlbGluZSxBcnJheS5pc0FycmF5KHRoaXMuYmFzZWxpbmUpfHwodGhpcy5iYXNlbGluZT1bdGhpcy5iYXNlbGluZV0pLHRoaXMuYmFzZWxpbmVPZmZzZXQ9dGhpcy5iYXNlbGluZS5tYXAoZnVuY3Rpb24odCxyKXt2YXIgbj0oZS5mb250W3JdfHxlLmZvbnRbMF0pLm1ldHJpY3MsYT0wO3JldHVybiBhKz0uNSpuLmJvdHRvbSxhKz0ibnVtYmVyIj09dHlwZW9mIHQ/dC1uLmJhc2VsaW5lOi1uW3RdLGsubm9ybWFsVmlld3BvcnR8fChhKj0tMSksYX0pKSxudWxsIT10LmNvbG9yKWlmKHQuY29sb3J8fCh0LmNvbG9yPSJ0cmFuc3BhcmVudCIpLCJzdHJpbmciIT10eXBlb2YgdC5jb2xvciYmaXNOYU4odC5jb2xvcikpe3ZhciBIO2lmKCJudW1iZXIiPT10eXBlb2YgdC5jb2xvclswXSYmdC5jb2xvci5sZW5ndGg+dGhpcy5jb3VudHMubGVuZ3RoKXt2YXIgRz10LmNvbG9yLmxlbmd0aDtIPXUubWFsbG9jVWludDgoRyk7Zm9yKHZhciBZPSh0LmNvbG9yLnN1YmFycmF5fHx0LmNvbG9yLnNsaWNlKS5iaW5kKHQuY29sb3IpLFc9MDtXPEc7Vys9NClILnNldChsKFkoVyxXKzQpLCJ1aW50OCIpLFcpfWVsc2V7dmFyIFg9dC5jb2xvci5sZW5ndGg7SD11Lm1hbGxvY1VpbnQ4KDQqWCk7Zm9yKHZhciBaPTA7WjxYO1orKylILnNldChsKHQuY29sb3JbWl18fDAsInVpbnQ4IiksNCpaKX10aGlzLmNvbG9yPUh9ZWxzZSB0aGlzLmNvbG9yPWwodC5jb2xvciwidWludDgiKTtpZih0LnBvc2l0aW9ufHx0LnRleHR8fHQuY29sb3J8fHQuYmFzZWxpbmV8fHQuYWxpZ258fHQuZm9udHx8dC5vZmZzZXR8fHQub3BhY2l0eSlpZih0aGlzLmNvbG9yLmxlbmd0aD40fHx0aGlzLmJhc2VsaW5lT2Zmc2V0Lmxlbmd0aD4xfHx0aGlzLmFsaWduJiZ0aGlzLmFsaWduLmxlbmd0aD4xfHx0aGlzLmZvbnRBdGxhcy5sZW5ndGg+MXx8dGhpcy5wb3NpdGlvbk9mZnNldC5sZW5ndGg+Mil7dmFyIEo9TWF0aC5tYXgoLjUqdGhpcy5wb3NpdGlvbi5sZW5ndGh8fDAsLjI1KnRoaXMuY29sb3IubGVuZ3RofHwwLHRoaXMuYmFzZWxpbmVPZmZzZXQubGVuZ3RofHwwLHRoaXMuYWxpZ25PZmZzZXQubGVuZ3RofHwwLHRoaXMuZm9udC5sZW5ndGh8fDAsdGhpcy5vcGFjaXR5Lmxlbmd0aHx8MCwuNSp0aGlzLnBvc2l0aW9uT2Zmc2V0Lmxlbmd0aHx8MCk7dGhpcy5iYXRjaD1BcnJheShKKTtmb3IodmFyIEs9MDtLPHRoaXMuYmF0Y2gubGVuZ3RoO0srKyl0aGlzLmJhdGNoW0tdPXtjb3VudDp0aGlzLmNvdW50cy5sZW5ndGg+MT90aGlzLmNvdW50c1tLXTp0aGlzLmNvdW50c1swXSxvZmZzZXQ6dGhpcy50ZXh0T2Zmc2V0cy5sZW5ndGg+MT90aGlzLnRleHRPZmZzZXRzW0tdOnRoaXMudGV4dE9mZnNldHNbMF0sY29sb3I6dGhpcy5jb2xvcj90aGlzLmNvbG9yLmxlbmd0aDw9ND90aGlzLmNvbG9yOnRoaXMuY29sb3Iuc3ViYXJyYXkoNCpLLDQqSys0KTpbMCwwLDAsMjU1XSxvcGFjaXR5OkFycmF5LmlzQXJyYXkodGhpcy5vcGFjaXR5KT90aGlzLm9wYWNpdHlbS106dGhpcy5vcGFjaXR5LGJhc2VsaW5lOm51bGwhPXRoaXMuYmFzZWxpbmVPZmZzZXRbS10/dGhpcy5iYXNlbGluZU9mZnNldFtLXTp0aGlzLmJhc2VsaW5lT2Zmc2V0WzBdLGFsaWduOnRoaXMuYWxpZ24/bnVsbCE9dGhpcy5hbGlnbk9mZnNldFtLXT90aGlzLmFsaWduT2Zmc2V0W0tdOnRoaXMuYWxpZ25PZmZzZXRbMF06MCxhdGxhczp0aGlzLmZvbnRBdGxhc1tLXXx8dGhpcy5mb250QXRsYXNbMF0scG9zaXRpb25PZmZzZXQ6dGhpcy5wb3NpdGlvbk9mZnNldC5sZW5ndGg+Mj90aGlzLnBvc2l0aW9uT2Zmc2V0LnN1YmFycmF5KDIqSywyKksrMik6dGhpcy5wb3NpdGlvbk9mZnNldH19ZWxzZSB0aGlzLmNvdW50P3RoaXMuYmF0Y2g9W3tjb3VudDp0aGlzLmNvdW50LG9mZnNldDowLGNvbG9yOnRoaXMuY29sb3J8fFswLDAsMCwyNTVdLG9wYWNpdHk6QXJyYXkuaXNBcnJheSh0aGlzLm9wYWNpdHkpP3RoaXMub3BhY2l0eVswXTp0aGlzLm9wYWNpdHksYmFzZWxpbmU6dGhpcy5iYXNlbGluZU9mZnNldFswXSxhbGlnbjp0aGlzLmFsaWduT2Zmc2V0P3RoaXMuYWxpZ25PZmZzZXRbMF06MCxhdGxhczp0aGlzLmZvbnRBdGxhc1swXSxwb3NpdGlvbk9mZnNldDp0aGlzLnBvc2l0aW9uT2Zmc2V0fV06dGhpcy5iYXRjaD1bXX0say5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30say5wcm90b3R5cGUua2VybmluZz0hMCxrLnByb3RvdHlwZS5wb3NpdGlvbj17Y29uc3RhbnQ6bmV3IEZsb2F0MzJBcnJheSgyKX0say5wcm90b3R5cGUudHJhbnNsYXRlPW51bGwsay5wcm90b3R5cGUuc2NhbGU9bnVsbCxrLnByb3RvdHlwZS5mb250PW51bGwsay5wcm90b3R5cGUudGV4dD0iIixrLnByb3RvdHlwZS5wb3NpdGlvbk9mZnNldD1bMCwwXSxrLnByb3RvdHlwZS5vcGFjaXR5PTEsay5wcm90b3R5cGUuY29sb3I9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDI1NV0pLGsucHJvdG90eXBlLmFsaWduT2Zmc2V0PVswLDBdLGsubm9ybWFsVmlld3BvcnQ9ITEsay5tYXhBdGxhc1NpemU9MTAyNCxrLmF0bGFzQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGsuYXRsYXNDb250ZXh0PWsuYXRsYXNDYW52YXMuZ2V0Q29udGV4dCgiMmQiLHthbHBoYTohMX0pLGsuYmFzZUZvbnRTaXplPTY0LGsuZm9udHM9e30sZS5leHBvcnRzPWt9LHsiYml0LXR3aWRkbGUiOjk0LCJjb2xvci1ub3JtYWxpemUiOjEyMiwiY3NzLWZvbnQiOjE0MSwiZGV0ZWN0LWtlcm5pbmciOjE2OCwiZXM2LXdlYWstbWFwIjozMjAsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjIzMCwiZm9udC1hdGxhcyI6MjMxLCJmb250LW1lYXN1cmUiOjIzMiwiZ2wtdXRpbC9jb250ZXh0IjozMjUsImlzLXBsYWluLW9iaiI6NDI0LCJvYmplY3QtYXNzaWduIjo0NTYsInBhcnNlLXJlY3QiOjQ2MSwicGFyc2UtdW5pdCI6NDYzLCJwaWNrLWJ5LWFsaWFzIjo0NjcscmVnbDo1MDEsInRvLXB4Ijo1MzgsInR5cGVkYXJyYXktcG9vbCI6NTQ0fV0sMzIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9XZWFrTWFwOnQoIi4vcG9seWZpbGwiKX0seyIuL2lzLWltcGxlbWVudGVkIjozMjEsIi4vcG9seWZpbGwiOjMyM31dLDMyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBXZWFrTWFwKXJldHVybiExO3RyeXt0PW5ldyBXZWFrTWFwKFtbZT17fSwib25lIl0sW3t9LCJ0d28iXSxbe30sInRocmVlIl1dKX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4iW29iamVjdCBXZWFrTWFwXSI9PT1TdHJpbmcodCkmJigiZnVuY3Rpb24iPT10eXBlb2YgdC5zZXQmJih0LnNldCh7fSwxKT09PXQmJigiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWxldGUmJigiZnVuY3Rpb24iPT10eXBlb2YgdC5oYXMmJiJvbmUiPT09dC5nZXQoZSkpKSkpfX0se31dLDMyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtNYXAmJiJbb2JqZWN0IFdlYWtNYXBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXcgV2Vha01hcCl9LHt9XSwzMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4sYT10KCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSIpLGk9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLG89dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtb2JqZWN0Iikscz10KCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSIpLGw9dCgiZXM1LWV4dC9zdHJpbmcvcmFuZG9tLXVuaXEiKSxjPXQoImQiKSx1PXQoImVzNi1pdGVyYXRvci9nZXQiKSxoPXQoImVzNi1pdGVyYXRvci9mb3Itb2YiKSxmPXQoImVzNi1zeW1ib2wiKS50b1N0cmluZ1RhZyxwPXQoIi4vaXMtbmF0aXZlLWltcGxlbWVudGVkIiksZD1BcnJheS5pc0FycmF5LGc9T2JqZWN0LmRlZmluZVByb3BlcnR5LHY9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxtPU9iamVjdC5nZXRQcm90b3R5cGVPZjtlLmV4cG9ydHM9bj1mdW5jdGlvbigpe3ZhciB0LGU9YXJndW1lbnRzWzBdO2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7cmV0dXJuIHQ9cCYmaSYmV2Vha01hcCE9PW4/aShuZXcgV2Vha01hcCxtKHRoaXMpKTp0aGlzLGEoZSkmJihkKGUpfHwoZT11KGUpKSksZyh0LCJfX3dlYWtNYXBEYXRhX18iLGMoImMiLCIkd2Vha01hcCQiK2woKSkpLGU/KGgoZSxmdW5jdGlvbihlKXtzKGUpLHQuc2V0KGVbMF0sZVsxXSl9KSx0KTp0fSxwJiYoaSYmaShuLFdlYWtNYXApLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoV2Vha01hcC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOmMobil9KSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobi5wcm90b3R5cGUse2RlbGV0ZTpjKGZ1bmN0aW9uKHQpe3JldHVybiEhdi5jYWxsKG8odCksdGhpcy5fX3dlYWtNYXBEYXRhX18pJiYoZGVsZXRlIHRbdGhpcy5fX3dlYWtNYXBEYXRhX19dLCEwKX0pLGdldDpjKGZ1bmN0aW9uKHQpe2lmKHYuY2FsbChvKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKSlyZXR1cm4gdFt0aGlzLl9fd2Vha01hcERhdGFfX119KSxoYXM6YyhmdW5jdGlvbih0KXtyZXR1cm4gdi5jYWxsKG8odCksdGhpcy5fX3dlYWtNYXBEYXRhX18pfSksc2V0OmMoZnVuY3Rpb24odCxlKXtyZXR1cm4gZyhvKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fLGMoImMiLGUpKSx0aGlzfSksdG9TdHJpbmc6YyhmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFdlYWtNYXBdIn0pfSksZyhuLnByb3RvdHlwZSxmLGMoImMiLCJXZWFrTWFwIikpfSx7Ii4vaXMtbmF0aXZlLWltcGxlbWVudGVkIjozMjIsZDoxNTMsImVzNS1leHQvb2JqZWN0L2lzLXZhbHVlIjoxOTcsImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiOjIwMywiZXM1LWV4dC9vYmplY3QvdmFsaWQtb2JqZWN0IjoyMDcsImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlIjoyMDgsImVzNS1leHQvc3RyaW5nL3JhbmRvbS11bmlxIjoyMTMsImVzNi1pdGVyYXRvci9mb3Itb2YiOjIxNSwiZXM2LWl0ZXJhdG9yL2dldCI6MjE2LCJlczYtc3ltYm9sIjoyMjJ9XSwzMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheSIpLGE9dCgibmRhcnJheS1vcHMiKSxpPXQoInR5cGVkYXJyYXktcG9vbCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoPD0xKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBNaXNzaW5nIGFyZ3VtZW50cyBmb3IgdGV4dHVyZTJkIGNvbnN0cnVjdG9yIik7b3x8ZnVuY3Rpb24odCl7bz1bdC5MSU5FQVIsdC5ORUFSRVNUX01JUE1BUF9MSU5FQVIsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1QsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1RdLHM9W3QuTkVBUkVTVCx0LkxJTkVBUix0Lk5FQVJFU1RfTUlQTUFQX05FQVJFU1QsdC5ORUFSRVNUX01JUE1BUF9MSU5FQVIsdC5MSU5FQVJfTUlQTUFQX05FQVJFU1QsdC5MSU5FQVJfTUlQTUFQX0xJTkVBUl0sbD1bdC5SRVBFQVQsdC5DTEFNUF9UT19FREdFLHQuTUlSUk9SRURfUkVQRUFUXX0odCk7aWYoIm51bWJlciI9PXR5cGVvZiBhcmd1bWVudHNbMV0pcmV0dXJuIHYodCxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXXx8dC5SR0JBLGFyZ3VtZW50c1s0XXx8dC5VTlNJR05FRF9CWVRFKTtpZihBcnJheS5pc0FycmF5KGFyZ3VtZW50c1sxXSkpcmV0dXJuIHYodCwwfGFyZ3VtZW50c1sxXVswXSwwfGFyZ3VtZW50c1sxXVsxXSxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoIm9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbMV0pe3ZhciBlPWFyZ3VtZW50c1sxXSxyPWMoZSk/ZTplLnJhdztpZihyKXJldHVybiBmdW5jdGlvbih0LGUscixuLGEsaSl7dmFyIG89Zyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLGEsYSxpLGUpLG5ldyBmKHQsbyxyLG4sYSxpKX0odCxyLDB8ZS53aWR0aCwwfGUuaGVpZ2h0LGFyZ3VtZW50c1syXXx8dC5SR0JBLGFyZ3VtZW50c1szXXx8dC5VTlNJR05FRF9CWVRFKTtpZihlLnNoYXBlJiZlLmRhdGEmJmUuc3RyaWRlKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWUuZHR5cGUsbz1lLnNoYXBlLnNsaWNlKCkscz10LmdldFBhcmFtZXRlcih0Lk1BWF9URVhUVVJFX1NJWkUpO2lmKG9bMF08MHx8b1swXT5zfHxvWzFdPDB8fG9bMV0+cyl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemUiKTt2YXIgbD1kKG8sZS5zdHJpZGUuc2xpY2UoKSksYz0wOyJmbG9hdDMyIj09PXI/Yz10LkZMT0FUOiJmbG9hdDY0Ij09PXI/KGM9dC5GTE9BVCxsPSExLHI9ImZsb2F0MzIiKToidWludDgiPT09cj9jPXQuVU5TSUdORURfQllURTooYz10LlVOU0lHTkVEX0JZVEUsbD0hMSxyPSJ1aW50OCIpO3ZhciBoLHAsdj0wO2lmKDI9PT1vLmxlbmd0aCl2PXQuTFVNSU5BTkNFLG89W29bMF0sb1sxXSwxXSxlPW4oZS5kYXRhLG8sW2Uuc3RyaWRlWzBdLGUuc3RyaWRlWzFdLDFdLGUub2Zmc2V0KTtlbHNle2lmKDMhPT1vLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgdGV4dHVyZSIpO2lmKDE9PT1vWzJdKXY9dC5BTFBIQTtlbHNlIGlmKDI9PT1vWzJdKXY9dC5MVU1JTkFOQ0VfQUxQSEE7ZWxzZSBpZigzPT09b1syXSl2PXQuUkdCO2Vsc2V7aWYoNCE9PW9bMl0pdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHBpeGVsIGNvb3JkcyIpO3Y9dC5SR0JBfX1jIT09dC5GTE9BVHx8dC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0Iil8fChjPXQuVU5TSUdORURfQllURSxsPSExKTt2YXIgbT1lLnNpemU7aWYobCloPTA9PT1lLm9mZnNldCYmZS5kYXRhLmxlbmd0aD09PW0/ZS5kYXRhOmUuZGF0YS5zdWJhcnJheShlLm9mZnNldCxlLm9mZnNldCttKTtlbHNle3ZhciB5PVtvWzJdLG9bMl0qb1swXSwxXTtwPWkubWFsbG9jKG0scik7dmFyIHg9bihwLG8seSwwKTsiZmxvYXQzMiIhPT1yJiYiZmxvYXQ2NCIhPT1yfHxjIT09dC5VTlNJR05FRF9CWVRFP2EuYXNzaWduKHgsZSk6dSh4LGUpLGg9cC5zdWJhcnJheSgwLG0pfXZhciBiPWcodCk7dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLHYsb1swXSxvWzFdLDAsdixjLGgpLGx8fGkuZnJlZShwKTtyZXR1cm4gbmV3IGYodCxiLG9bMF0sb1sxXSx2LGMpfSh0LGUpfXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgdGV4dHVyZTJkIGNvbnN0cnVjdG9yIil9O3ZhciBvPW51bGwscz1udWxsLGw9bnVsbDtmdW5jdGlvbiBjKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQmJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBIVE1MVmlkZW9FbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudHx8InVuZGVmaW5lZCIhPXR5cGVvZiBJbWFnZURhdGEmJnQgaW5zdGFuY2VvZiBJbWFnZURhdGF9dmFyIHU9ZnVuY3Rpb24odCxlKXthLm11bHModCxlLDI1NSl9O2Z1bmN0aW9uIGgodCxlLHIpe3ZhciBuPXQuZ2wsYT1uLmdldFBhcmFtZXRlcihuLk1BWF9URVhUVVJFX1NJWkUpO2lmKGU8MHx8ZT5hfHxyPDB8fHI+YSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemUiKTtyZXR1cm4gdC5fc2hhcGU9W2Uscl0sdC5iaW5kKCksbi50ZXhJbWFnZTJEKG4uVEVYVFVSRV8yRCwwLHQuZm9ybWF0LGUsciwwLHQuZm9ybWF0LHQudHlwZSxudWxsKSx0Ll9taXBMZXZlbHM9WzBdLHR9ZnVuY3Rpb24gZih0LGUscixuLGEsaSl7dGhpcy5nbD10LHRoaXMuaGFuZGxlPWUsdGhpcy5mb3JtYXQ9YSx0aGlzLnR5cGU9aSx0aGlzLl9zaGFwZT1bcixuXSx0aGlzLl9taXBMZXZlbHM9WzBdLHRoaXMuX21hZ0ZpbHRlcj10Lk5FQVJFU1QsdGhpcy5fbWluRmlsdGVyPXQuTkVBUkVTVCx0aGlzLl93cmFwUz10LkNMQU1QX1RPX0VER0UsdGhpcy5fd3JhcFQ9dC5DTEFNUF9UT19FREdFLHRoaXMuX2FuaXNvU2FtcGxlcz0xO3ZhciBvPXRoaXMscz1bdGhpcy5fd3JhcFMsdGhpcy5fd3JhcFRdO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHMsW3tnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fd3JhcFN9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53cmFwUz10fX0se2dldDpmdW5jdGlvbigpe3JldHVybiBvLl93cmFwVH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndyYXBUPXR9fV0pLHRoaXMuX3dyYXBWZWN0b3I9czt2YXIgbD1bdGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV1dO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGwsW3tnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53aWR0aD10fX0se2dldDpmdW5jdGlvbigpe3JldHVybiBvLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLmhlaWdodD10fX1dKSx0aGlzLl9zaGFwZVZlY3Rvcj1sfXZhciBwPWYucHJvdG90eXBlO2Z1bmN0aW9uIGQodCxlKXtyZXR1cm4gMz09PXQubGVuZ3RoPzE9PT1lWzJdJiZlWzFdPT09dFswXSp0WzJdJiZlWzBdPT09dFsyXToxPT09ZVswXSYmZVsxXT09PXRbMF19ZnVuY3Rpb24gZyh0KXt2YXIgZT10LmNyZWF0ZVRleHR1cmUoKTtyZXR1cm4gdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUlOX0ZJTFRFUix0Lk5FQVJFU1QpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01BR19GSUxURVIsdC5ORUFSRVNUKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1MsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1QsdC5DTEFNUF9UT19FREdFKSxlfWZ1bmN0aW9uIHYodCxlLHIsbixhKXt2YXIgaT10LmdldFBhcmFtZXRlcih0Lk1BWF9URVhUVVJFX1NJWkUpO2lmKGU8MHx8ZT5pfHxyPDB8fHI+aSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNoYXBlIik7aWYoYT09PXQuRkxPQVQmJiF0LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogRmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7dmFyIG89Zyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLG4sZSxyLDAsbixhLG51bGwpLG5ldyBmKHQsbyxlLHIsbixhKX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyhwLHttaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5GaWx0ZXJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLmJpbmQoKTt2YXIgZT10aGlzLmdsO2lmKHRoaXMudHlwZT09PWUuRkxPQVQmJm8uaW5kZXhPZih0KT49MCYmKGUuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKXx8KHQ9ZS5ORUFSRVNUKSkscy5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gZmlsdGVyIG1vZGUgIit0KTtyZXR1cm4gZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUlOX0ZJTFRFUix0KSx0aGlzLl9taW5GaWx0ZXI9dH19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuYmluZCgpO3ZhciBlPXRoaXMuZ2w7aWYodGhpcy50eXBlPT09ZS5GTE9BVCYmby5pbmRleE9mKHQpPj0wJiYoZS5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwodD1lLk5FQVJFU1QpKSxzLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biBmaWx0ZXIgbW9kZSAiK3QpO3JldHVybiBlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLHQpLHRoaXMuX21hZ0ZpbHRlcj10fX0sbWlwU2FtcGxlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaXNvU2FtcGxlc30sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2FuaXNvU2FtcGxlcztpZih0aGlzLl9hbmlzb1NhbXBsZXM9MHxNYXRoLm1heCh0LDEpLGUhPT10aGlzLl9hbmlzb1NhbXBsZXMpe3ZhciByPXRoaXMuZ2wuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtyJiZ0aGlzLmdsLnRleFBhcmFtZXRlcmYodGhpcy5nbC5URVhUVVJFXzJELHIuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsdGhpcy5fYW5pc29TYW1wbGVzKX1yZXR1cm4gdGhpcy5fYW5pc29TYW1wbGVzfX0sd3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwU30sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZCgpLGwuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSAiK3QpO3JldHVybiB0aGlzLmdsLnRleFBhcmFtZXRlcmkodGhpcy5nbC5URVhUVVJFXzJELHRoaXMuZ2wuVEVYVFVSRV9XUkFQX1MsdCksdGhpcy5fd3JhcFM9dH19LHdyYXBUOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcFR9LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmJpbmQoKSxsLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgIit0KTtyZXR1cm4gdGhpcy5nbC50ZXhQYXJhbWV0ZXJpKHRoaXMuZ2wuVEVYVFVSRV8yRCx0aGlzLmdsLlRFWFRVUkVfV1JBUF9ULHQpLHRoaXMuX3dyYXBUPXR9fSx3cmFwOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcFZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCl8fCh0PVt0LHRdKSwyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IE11c3Qgc3BlY2lmeSB3cmFwIG1vZGUgZm9yIHJvd3MgYW5kIGNvbHVtbnMiKTtmb3IodmFyIGU9MDtlPDI7KytlKWlmKGwuaW5kZXhPZih0W2VdKTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSAiK3QpO3RoaXMuX3dyYXBTPXRbMF0sdGhpcy5fd3JhcFQ9dFsxXTt2YXIgcj10aGlzLmdsO3JldHVybiB0aGlzLmJpbmQoKSxyLnRleFBhcmFtZXRlcmkoci5URVhUVVJFXzJELHIuVEVYVFVSRV9XUkFQX1MsdGhpcy5fd3JhcFMpLHIudGV4UGFyYW1ldGVyaShyLlRFWFRVUkVfMkQsci5URVhUVVJFX1dSQVBfVCx0aGlzLl93cmFwVCksdH19LHNoYXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVWZWN0b3J9LHNldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtpZigyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaGFwZSIpfWVsc2UgdD1bMHx0LDB8dF07cmV0dXJuIGgodGhpcywwfHRbMF0sMHx0WzFdKSxbMHx0WzBdLDB8dFsxXV19fSx3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGgodGhpcyx0fD0wLHRoaXMuX3NoYXBlWzFdKSx0fX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxoKHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH19fSkscC5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2w7cmV0dXJuIHZvaWQgMCE9PXQmJmUuYWN0aXZlVGV4dHVyZShlLlRFWFRVUkUwKygwfHQpKSxlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0aGlzLmhhbmRsZSksdm9pZCAwIT09dD8wfHQ6ZS5nZXRQYXJhbWV0ZXIoZS5BQ1RJVkVfVEVYVFVSRSktZS5URVhUVVJFMH0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbC5kZWxldGVUZXh0dXJlKHRoaXMuaGFuZGxlKX0scC5nZW5lcmF0ZU1pcG1hcD1mdW5jdGlvbigpe3RoaXMuYmluZCgpLHRoaXMuZ2wuZ2VuZXJhdGVNaXBtYXAodGhpcy5nbC5URVhUVVJFXzJEKTtmb3IodmFyIHQ9TWF0aC5taW4odGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV0pLGU9MDt0PjA7KytlLHQ+Pj49MSl0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihlKTwwJiZ0aGlzLl9taXBMZXZlbHMucHVzaChlKX0scC5zZXRQaXhlbHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9dGhpcy5nbDt0aGlzLmJpbmQoKSxBcnJheS5pc0FycmF5KGUpPyhvPXIscj0wfGVbMV0sZT0wfGVbMF0pOihlPWV8fDAscj1yfHwwKSxvPW98fDA7dmFyIGw9Yyh0KT90OnQucmF3O2lmKGwpe3RoaXMuX21pcExldmVscy5pbmRleE9mKG8pPDA/KHMudGV4SW1hZ2UyRChzLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCx0aGlzLmZvcm1hdCx0aGlzLnR5cGUsbCksdGhpcy5fbWlwTGV2ZWxzLnB1c2gobykpOnMudGV4U3ViSW1hZ2UyRChzLlRFWFRVUkVfMkQsbyxlLHIsdGhpcy5mb3JtYXQsdGhpcy50eXBlLGwpfWVsc2V7aWYoISh0LnNoYXBlJiZ0LnN0cmlkZSYmdC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIik7aWYodC5zaGFwZS5sZW5ndGg8Mnx8ZSt0LnNoYXBlWzFdPnRoaXMuX3NoYXBlWzFdPj4+b3x8cit0LnNoYXBlWzBdPnRoaXMuX3NoYXBlWzBdPj4+b3x8ZTwwfHxyPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFRleHR1cmUgZGltZW5zaW9ucyBhcmUgb3V0IG9mIGJvdW5kcyIpOyFmdW5jdGlvbih0LGUscixvLHMsbCxjLGgpe3ZhciBmPWguZHR5cGUscD1oLnNoYXBlLnNsaWNlKCk7aWYocC5sZW5ndGg8Mnx8cC5sZW5ndGg+Myl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBuZGFycmF5LCBtdXN0IGJlIDJkIG9yIDNkIik7dmFyIGc9MCx2PTAsbT1kKHAsaC5zdHJpZGUuc2xpY2UoKSk7ImZsb2F0MzIiPT09Zj9nPXQuRkxPQVQ6ImZsb2F0NjQiPT09Zj8oZz10LkZMT0FULG09ITEsZj0iZmxvYXQzMiIpOiJ1aW50OCI9PT1mP2c9dC5VTlNJR05FRF9CWVRFOihnPXQuVU5TSUdORURfQllURSxtPSExLGY9InVpbnQ4Iik7aWYoMj09PXAubGVuZ3RoKXY9dC5MVU1JTkFOQ0UscD1bcFswXSxwWzFdLDFdLGg9bihoLmRhdGEscCxbaC5zdHJpZGVbMF0saC5zdHJpZGVbMV0sMV0saC5vZmZzZXQpO2Vsc2V7aWYoMyE9PXAubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlIik7aWYoMT09PXBbMl0pdj10LkFMUEhBO2Vsc2UgaWYoMj09PXBbMl0pdj10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1wWzJdKXY9dC5SR0I7ZWxzZXtpZig0IT09cFsyXSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgcGl4ZWwgY29vcmRzIik7dj10LlJHQkF9cFsyXX12IT09dC5MVU1JTkFOQ0UmJnYhPT10LkFMUEhBfHxzIT09dC5MVU1JTkFOQ0UmJnMhPT10LkFMUEhBfHwodj1zKTtpZih2IT09cyl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW5jb21wYXRpYmxlIHRleHR1cmUgZm9ybWF0IGZvciBzZXRQaXhlbHMiKTt2YXIgeT1oLnNpemUseD1jLmluZGV4T2Yobyk8MDt4JiZjLnB1c2gobyk7aWYoZz09PWwmJm0pMD09PWgub2Zmc2V0JiZoLmRhdGEubGVuZ3RoPT09eT94P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxzLHBbMF0scFsxXSwwLHMsbCxoLmRhdGEpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxlLHIscFswXSxwWzFdLHMsbCxoLmRhdGEpOng/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLHMscFswXSxwWzFdLDAscyxsLGguZGF0YS5zdWJhcnJheShoLm9mZnNldCxoLm9mZnNldCt5KSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLGUscixwWzBdLHBbMV0scyxsLGguZGF0YS5zdWJhcnJheShoLm9mZnNldCxoLm9mZnNldCt5KSk7ZWxzZXt2YXIgYjtiPWw9PT10LkZMT0FUP2kubWFsbG9jRmxvYXQzMih5KTppLm1hbGxvY1VpbnQ4KHkpO3ZhciBfPW4oYixwLFtwWzJdLHBbMl0qcFswXSwxXSk7Zz09PXQuRkxPQVQmJmw9PT10LlVOU0lHTkVEX0JZVEU/dShfLGgpOmEuYXNzaWduKF8saCkseD90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG8scyxwWzBdLHBbMV0sMCxzLGwsYi5zdWJhcnJheSgwLHkpKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG8sZSxyLHBbMF0scFsxXSxzLGwsYi5zdWJhcnJheSgwLHkpKSxsPT09dC5GTE9BVD9pLmZyZWVGbG9hdDMyKGIpOmkuZnJlZVVpbnQ4KGIpfX0ocyxlLHIsbyx0aGlzLmZvcm1hdCx0aGlzLnR5cGUsdGhpcy5fbWlwTGV2ZWxzLHQpfX19LHtuZGFycmF5OjQ1MiwibmRhcnJheS1vcHMiOjQ0NiwidHlwZWRhcnJheS1wb29sIjo1NDR9XSwzMjU6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBpY2stYnktYWxpYXMiKTtmdW5jdGlvbiBhKHQpe2lmKHQuY29udGFpbmVyKWlmKHQuY29udGFpbmVyPT1kb2N1bWVudC5ib2R5KWRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGh8fCh0LmNhbnZhcy53aWR0aD10LndpZHRofHx0LnBpeGVsUmF0aW8qci5pbm5lcldpZHRoKSxkb2N1bWVudC5ib2R5LnN0eWxlLmhlaWdodHx8KHQuY2FudmFzLmhlaWdodD10LmhlaWdodHx8dC5waXhlbFJhdGlvKnIuaW5uZXJIZWlnaHQpO2Vsc2V7dmFyIGU9dC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC5jYW52YXMud2lkdGg9dC53aWR0aHx8ZS5yaWdodC1lLmxlZnQsdC5jYW52YXMuaGVpZ2h0PXQuaGVpZ2h0fHxlLmJvdHRvbS1lLnRvcH19ZnVuY3Rpb24gaSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRDb250ZXh0JiYid2lkdGgiaW4gdCYmImhlaWdodCJpbiB0fWZ1bmN0aW9uIG8oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4gdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuc3R5bGUudG9wPTAsdC5zdHlsZS5sZWZ0PTAsdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7aWYodD8ic3RyaW5nIj09dHlwZW9mIHQmJih0PXtjb250YWluZXI6dH0pOnQ9e30saSh0KT90PXtjb250YWluZXI6dH06dD0ic3RyaW5nIj09dHlwZW9mKGU9dCkubm9kZU5hbWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmFwcGVuZENoaWxkJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5nZXRCb3VuZGluZ0NsaWVudFJlY3Q/e2NvbnRhaW5lcjp0fTpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5kcmF3QXJyYXlzfHwiZnVuY3Rpb24iPT10eXBlb2YgdC5kcmF3RWxlbWVudHN9KHQpP3tnbDp0fTpuKHQse2NvbnRhaW5lcjoiY29udGFpbmVyIHRhcmdldCBlbGVtZW50IGVsIGNhbnZhcyBob2xkZXIgcGFyZW50IHBhcmVudE5vZGUgd3JhcHBlciB1c2UgcmVmIHJvb3Qgbm9kZSIsZ2w6ImdsIGNvbnRleHQgd2ViZ2wgZ2xDb250ZXh0IixhdHRyczoiYXR0cmlidXRlcyBhdHRycyBjb250ZXh0QXR0cmlidXRlcyIscGl4ZWxSYXRpbzoicGl4ZWxSYXRpbyBweFJhdGlvIHB4IHJhdGlvIHB4cmF0aW8gcGl4ZWxyYXRpbyIsd2lkdGg6Incgd2lkdGgiLGhlaWdodDoiaCBoZWlnaHQifSwhMCksdC5waXhlbFJhdGlvfHwodC5waXhlbFJhdGlvPXIucGl4ZWxSYXRpb3x8MSksdC5nbClyZXR1cm4gdC5nbDtpZih0LmNhbnZhcyYmKHQuY29udGFpbmVyPXQuY2FudmFzLnBhcmVudE5vZGUpLHQuY29udGFpbmVyKXtpZigic3RyaW5nIj09dHlwZW9mIHQuY29udGFpbmVyKXt2YXIgcz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQuY29udGFpbmVyKTtpZighcyl0aHJvdyBFcnJvcigiRWxlbWVudCAiK3QuY29udGFpbmVyKyIgaXMgbm90IGZvdW5kIik7dC5jb250YWluZXI9c31pKHQuY29udGFpbmVyKT8odC5jYW52YXM9dC5jb250YWluZXIsdC5jb250YWluZXI9dC5jYW52YXMucGFyZW50Tm9kZSk6dC5jYW52YXN8fCh0LmNhbnZhcz1vKCksdC5jb250YWluZXIuYXBwZW5kQ2hpbGQodC5jYW52YXMpLGEodCkpfWVsc2UgaWYoIXQuY2FudmFzKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50KXRocm93IEVycm9yKCJOb3QgRE9NIGVudmlyb25tZW50LiBVc2UgaGVhZGxlc3MtZ2wuIik7dC5jb250YWluZXI9ZG9jdW1lbnQuYm9keXx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHQuY2FudmFzPW8oKSx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0LmNhbnZhcyksYSh0KX1pZighdC5nbCl0cnl7dC5nbD10LmNhbnZhcy5nZXRDb250ZXh0KCJ3ZWJnbCIsdC5hdHRycyl9Y2F0Y2goZSl7dHJ5e3QuZ2w9dC5jYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIix0LmF0dHJzKX1jYXRjaChlKXt0LmdsPXQuY2FudmFzLmdldENvbnRleHQoIndlYmdsLWV4cGVyaW1lbnRhbCIsdC5hdHRycyl9fXJldHVybiB0LmdsfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJwaWNrLWJ5LWFsaWFzIjo0Njd9XSwzMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlP2UuYmluZCgpOnQuYmluZEJ1ZmZlcih0LkVMRU1FTlRfQVJSQVlfQlVGRkVSLG51bGwpO3ZhciBuPTB8dC5nZXRQYXJhbWV0ZXIodC5NQVhfVkVSVEVYX0FUVFJJQlMpO2lmKHIpe2lmKHIubGVuZ3RoPm4pdGhyb3cgbmV3IEVycm9yKCJnbC12YW86IFRvbyBtYW55IHZlcnRleCBhdHRyaWJ1dGVzIik7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDsrK2Epe3ZhciBpPXJbYV07aWYoaS5idWZmZXIpe3ZhciBvPWkuYnVmZmVyLHM9aS5zaXplfHw0LGw9aS50eXBlfHx0LkZMT0FULGM9ISFpLm5vcm1hbGl6ZWQsdT1pLnN0cmlkZXx8MCxoPWkub2Zmc2V0fHwwO28uYmluZCgpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYSksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGEscyxsLGMsdSxoKX1lbHNle2lmKCJudW1iZXIiPT10eXBlb2YgaSl0LnZlcnRleEF0dHJpYjFmKGEsaSk7ZWxzZSBpZigxPT09aS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIxZihhLGlbMF0pO2Vsc2UgaWYoMj09PWkubGVuZ3RoKXQudmVydGV4QXR0cmliMmYoYSxpWzBdLGlbMV0pO2Vsc2UgaWYoMz09PWkubGVuZ3RoKXQudmVydGV4QXR0cmliM2YoYSxpWzBdLGlbMV0saVsyXSk7ZWxzZXtpZig0IT09aS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC12YW86IEludmFsaWQgdmVydGV4IGF0dHJpYnV0ZSIpO3QudmVydGV4QXR0cmliNGYoYSxpWzBdLGlbMV0saVsyXSxpWzNdKX10LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShhKX19Zm9yKDthPG47KythKXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGEpfWVsc2UgZm9yKHQuYmluZEJ1ZmZlcih0LkFSUkFZX0JVRkZFUixudWxsKSxhPTA7YTxuOysrYSl0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShhKX19LHt9XSwzMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9kby1iaW5kLmpzIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmdsPXQsdGhpcy5fZWxlbWVudHM9bnVsbCx0aGlzLl9hdHRyaWJ1dGVzPW51bGwsdGhpcy5fZWxlbWVudHNUeXBlPXQuVU5TSUdORURfU0hPUlR9YS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe24odGhpcy5nbCx0aGlzLl9lbGVtZW50cyx0aGlzLl9hdHRyaWJ1dGVzKX0sYS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9lbGVtZW50cz1lLHRoaXMuX2F0dHJpYnV0ZXM9dCx0aGlzLl9lbGVtZW50c1R5cGU9cnx8dGhpcy5nbC5VTlNJR05FRF9TSE9SVH0sYS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe30sYS5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKCl7fSxhLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fDA7dmFyIG49dGhpcy5nbDt0aGlzLl9lbGVtZW50cz9uLmRyYXdFbGVtZW50cyh0LGUsdGhpcy5fZWxlbWVudHNUeXBlLHIpOm4uZHJhd0FycmF5cyh0LHIsZSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEodCl9fSx7Ii4vZG8tYmluZC5qcyI6MzI2fV0sMzI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZG8tYmluZC5qcyIpO2Z1bmN0aW9uIGEodCxlLHIsbixhLGkpe3RoaXMubG9jYXRpb249dCx0aGlzLmRpbWVuc2lvbj1lLHRoaXMuYT1yLHRoaXMuYj1uLHRoaXMuYz1hLHRoaXMuZD1pfWZ1bmN0aW9uIGkodCxlLHIpe3RoaXMuZ2w9dCx0aGlzLl9leHQ9ZSx0aGlzLmhhbmRsZT1yLHRoaXMuX2F0dHJpYnM9W10sdGhpcy5fdXNlRWxlbWVudHM9ITEsdGhpcy5fZWxlbWVudHNUeXBlPXQuVU5TSUdORURfU0hPUlR9YS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5kaW1lbnNpb24pe2Nhc2UgMTp0LnZlcnRleEF0dHJpYjFmKHRoaXMubG9jYXRpb24sdGhpcy5hKTticmVhaztjYXNlIDI6dC52ZXJ0ZXhBdHRyaWIyZih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIpO2JyZWFrO2Nhc2UgMzp0LnZlcnRleEF0dHJpYjNmKHRoaXMubG9jYXRpb24sdGhpcy5hLHRoaXMuYix0aGlzLmMpO2JyZWFrO2Nhc2UgNDp0LnZlcnRleEF0dHJpYjRmKHRoaXMubG9jYXRpb24sdGhpcy5hLHRoaXMuYix0aGlzLmMsdGhpcy5kKX19LGkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLl9leHQuYmluZFZlcnRleEFycmF5T0VTKHRoaXMuaGFuZGxlKTtmb3IodmFyIHQ9MDt0PHRoaXMuX2F0dHJpYnMubGVuZ3RoOysrdCl0aGlzLl9hdHRyaWJzW3RdLmJpbmQodGhpcy5nbCl9LGkucHJvdG90eXBlLnVuYmluZD1mdW5jdGlvbigpe3RoaXMuX2V4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCl9LGkucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9leHQuZGVsZXRlVmVydGV4QXJyYXlPRVModGhpcy5oYW5kbGUpfSxpLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuYmluZCgpLG4odGhpcy5nbCxlLHQpLHRoaXMudW5iaW5kKCksdGhpcy5fYXR0cmlicy5sZW5ndGg9MCx0KWZvcih2YXIgaT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldOyJudW1iZXIiPT10eXBlb2Ygbz90aGlzLl9hdHRyaWJzLnB1c2gobmV3IGEoaSwxLG8pKTpBcnJheS5pc0FycmF5KG8pJiZ0aGlzLl9hdHRyaWJzLnB1c2gobmV3IGEoaSxvLmxlbmd0aCxvWzBdLG9bMV0sb1syXSxvWzNdKSl9dGhpcy5fdXNlRWxlbWVudHM9ISFlLHRoaXMuX2VsZW1lbnRzVHlwZT1yfHx0aGlzLmdsLlVOU0lHTkVEX1NIT1JUfSxpLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fDA7dmFyIG49dGhpcy5nbDt0aGlzLl91c2VFbGVtZW50cz9uLmRyYXdFbGVtZW50cyh0LGUsdGhpcy5fZWxlbWVudHNUeXBlLHIpOm4uZHJhd0FycmF5cyh0LHIsZSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgaSh0LGUsZS5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpKX19LHsiLi9kby1iaW5kLmpzIjozMjZ9XSwzMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvdmFvLW5hdGl2ZS5qcyIpLGE9dCgiLi9saWIvdmFvLWVtdWxhdGVkLmpzIik7ZnVuY3Rpb24gaSh0KXt0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUz10LmJpbmRWZXJ0ZXhBcnJheS5iaW5kKHQpLHRoaXMuY3JlYXRlVmVydGV4QXJyYXlPRVM9dC5jcmVhdGVWZXJ0ZXhBcnJheS5iaW5kKHQpLHRoaXMuZGVsZXRlVmVydGV4QXJyYXlPRVM9dC5kZWxldGVWZXJ0ZXhBcnJheS5iaW5kKHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsPXQuY3JlYXRlVmVydGV4QXJyYXk/bmV3IGkodCk6dC5nZXRFeHRlbnNpb24oIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7cmV0dXJuKHM9bD9uKHQsbCk6YSh0KSkudXBkYXRlKGUscixvKSxzfX0seyIuL2xpYi92YW8tZW11bGF0ZWQuanMiOjMyNywiLi9saWIvdmFvLW5hdGl2ZS5qcyI6MzI4fV0sMzMwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0sdFsxXT1lWzFdK3JbMV0sdFsyXT1lWzJdK3JbMl0sdH19LHt9XSwzMzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHRbMF0sdFsxXSx0WzJdKSxvPW4oZVswXSxlWzFdLGVbMl0pO2EocixyKSxhKG8sbyk7dmFyIHM9aShyLG8pO3JldHVybiBzPjE/MDpNYXRoLmFjb3Mocyl9O3ZhciBuPXQoIi4vZnJvbVZhbHVlcyIpLGE9dCgiLi9ub3JtYWxpemUiKSxpPXQoIi4vZG90Iil9LHsiLi9kb3QiOjM0MSwiLi9mcm9tVmFsdWVzIjozNDcsIi4vbm9ybWFsaXplIjozNTh9XSwzMzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLmNlaWwoZVswXSksdFsxXT1NYXRoLmNlaWwoZVsxXSksdFsyXT1NYXRoLmNlaWwoZVsyXSksdH19LHt9XSwzMzM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZX19LHt9XSwzMzQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdH19LHt9XSwzMzU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDMpO3JldHVybiB0WzBdPTAsdFsxXT0wLHRbMl09MCx0fX0se31dLDMzNjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxhPWVbMV0saT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdO3JldHVybiB0WzBdPWEqbC1pKnMsdFsxXT1pKm8tbipsLHRbMl09bipzLWEqbyx0fX0se31dLDMzNzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL2Rpc3RhbmNlIil9LHsiLi9kaXN0YW5jZSI6MzM4fV0sMzM4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGE9ZVsyXS10WzJdO3JldHVybiBNYXRoLnNxcnQocipyK24qbithKmEpfX0se31dLDMzOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL2RpdmlkZSIpfSx7Ii4vZGl2aWRlIjozNDB9XSwzNDA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0WzJdPWVbMl0vclsyXSx0fX0se31dLDM0MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXX19LHt9XSwzNDI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9MWUtNn0se31dLDM0MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sYT10WzFdLGk9dFsyXSxvPWVbMF0scz1lWzFdLGw9ZVsyXTtyZXR1cm4gTWF0aC5hYnMoci1vKTw9bipNYXRoLm1heCgxLE1hdGguYWJzKHIpLE1hdGguYWJzKG8pKSYmTWF0aC5hYnMoYS1zKTw9bipNYXRoLm1heCgxLE1hdGguYWJzKGEpLE1hdGguYWJzKHMpKSYmTWF0aC5hYnMoaS1sKTw9bipNYXRoLm1heCgxLE1hdGguYWJzKGkpLE1hdGguYWJzKGwpKX07dmFyIG49dCgiLi9lcHNpbG9uIil9LHsiLi9lcHNpbG9uIjozNDJ9XSwzNDQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJnRbMV09PT1lWzFdJiZ0WzJdPT09ZVsyXX19LHt9XSwzNDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLmZsb29yKGVbMF0pLHRbMV09TWF0aC5mbG9vcihlWzFdKSx0WzJdPU1hdGguZmxvb3IoZVsyXSksdH19LHt9XSwzNDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxpLG8pe3ZhciBzLGw7ZXx8KGU9Myk7cnx8KHI9MCk7bD1hP01hdGgubWluKGEqZStyLHQubGVuZ3RoKTp0Lmxlbmd0aDtmb3Iocz1yO3M8bDtzKz1lKW5bMF09dFtzXSxuWzFdPXRbcysxXSxuWzJdPXRbcysyXSxpKG4sbixvKSx0W3NdPW5bMF0sdFtzKzFdPW5bMV0sdFtzKzJdPW5bMl07cmV0dXJuIHR9O3ZhciBuPXQoIi4vY3JlYXRlIikoKX0seyIuL2NyZWF0ZSI6MzM1fV0sMzQ3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgRmxvYXQzMkFycmF5KDMpO3JldHVybiBuWzBdPXQsblsxXT1lLG5bMl09cixufX0se31dLDM0ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17RVBTSUxPTjp0KCIuL2Vwc2lsb24iKSxjcmVhdGU6dCgiLi9jcmVhdGUiKSxjbG9uZTp0KCIuL2Nsb25lIiksYW5nbGU6dCgiLi9hbmdsZSIpLGZyb21WYWx1ZXM6dCgiLi9mcm9tVmFsdWVzIiksY29weTp0KCIuL2NvcHkiKSxzZXQ6dCgiLi9zZXQiKSxlcXVhbHM6dCgiLi9lcXVhbHMiKSxleGFjdEVxdWFsczp0KCIuL2V4YWN0RXF1YWxzIiksYWRkOnQoIi4vYWRkIiksc3VidHJhY3Q6dCgiLi9zdWJ0cmFjdCIpLHN1Yjp0KCIuL3N1YiIpLG11bHRpcGx5OnQoIi4vbXVsdGlwbHkiKSxtdWw6dCgiLi9tdWwiKSxkaXZpZGU6dCgiLi9kaXZpZGUiKSxkaXY6dCgiLi9kaXYiKSxtaW46dCgiLi9taW4iKSxtYXg6dCgiLi9tYXgiKSxmbG9vcjp0KCIuL2Zsb29yIiksY2VpbDp0KCIuL2NlaWwiKSxyb3VuZDp0KCIuL3JvdW5kIiksc2NhbGU6dCgiLi9zY2FsZSIpLHNjYWxlQW5kQWRkOnQoIi4vc2NhbGVBbmRBZGQiKSxkaXN0YW5jZTp0KCIuL2Rpc3RhbmNlIiksZGlzdDp0KCIuL2Rpc3QiKSxzcXVhcmVkRGlzdGFuY2U6dCgiLi9zcXVhcmVkRGlzdGFuY2UiKSxzcXJEaXN0OnQoIi4vc3FyRGlzdCIpLGxlbmd0aDp0KCIuL2xlbmd0aCIpLGxlbjp0KCIuL2xlbiIpLHNxdWFyZWRMZW5ndGg6dCgiLi9zcXVhcmVkTGVuZ3RoIiksc3FyTGVuOnQoIi4vc3FyTGVuIiksbmVnYXRlOnQoIi4vbmVnYXRlIiksaW52ZXJzZTp0KCIuL2ludmVyc2UiKSxub3JtYWxpemU6dCgiLi9ub3JtYWxpemUiKSxkb3Q6dCgiLi9kb3QiKSxjcm9zczp0KCIuL2Nyb3NzIiksbGVycDp0KCIuL2xlcnAiKSxyYW5kb206dCgiLi9yYW5kb20iKSx0cmFuc2Zvcm1NYXQ0OnQoIi4vdHJhbnNmb3JtTWF0NCIpLHRyYW5zZm9ybU1hdDM6dCgiLi90cmFuc2Zvcm1NYXQzIiksdHJhbnNmb3JtUXVhdDp0KCIuL3RyYW5zZm9ybVF1YXQiKSxyb3RhdGVYOnQoIi4vcm90YXRlWCIpLHJvdGF0ZVk6dCgiLi9yb3RhdGVZIikscm90YXRlWjp0KCIuL3JvdGF0ZVoiKSxmb3JFYWNoOnQoIi4vZm9yRWFjaCIpfX0seyIuL2FkZCI6MzMwLCIuL2FuZ2xlIjozMzEsIi4vY2VpbCI6MzMyLCIuL2Nsb25lIjozMzMsIi4vY29weSI6MzM0LCIuL2NyZWF0ZSI6MzM1LCIuL2Nyb3NzIjozMzYsIi4vZGlzdCI6MzM3LCIuL2Rpc3RhbmNlIjozMzgsIi4vZGl2IjozMzksIi4vZGl2aWRlIjozNDAsIi4vZG90IjozNDEsIi4vZXBzaWxvbiI6MzQyLCIuL2VxdWFscyI6MzQzLCIuL2V4YWN0RXF1YWxzIjozNDQsIi4vZmxvb3IiOjM0NSwiLi9mb3JFYWNoIjozNDYsIi4vZnJvbVZhbHVlcyI6MzQ3LCIuL2ludmVyc2UiOjM0OSwiLi9sZW4iOjM1MCwiLi9sZW5ndGgiOjM1MSwiLi9sZXJwIjozNTIsIi4vbWF4IjozNTMsIi4vbWluIjozNTQsIi4vbXVsIjozNTUsIi4vbXVsdGlwbHkiOjM1NiwiLi9uZWdhdGUiOjM1NywiLi9ub3JtYWxpemUiOjM1OCwiLi9yYW5kb20iOjM1OSwiLi9yb3RhdGVYIjozNjAsIi4vcm90YXRlWSI6MzYxLCIuL3JvdGF0ZVoiOjM2MiwiLi9yb3VuZCI6MzYzLCIuL3NjYWxlIjozNjQsIi4vc2NhbGVBbmRBZGQiOjM2NSwiLi9zZXQiOjM2NiwiLi9zcXJEaXN0IjozNjcsIi4vc3FyTGVuIjozNjgsIi4vc3F1YXJlZERpc3RhbmNlIjozNjksIi4vc3F1YXJlZExlbmd0aCI6MzcwLCIuL3N1YiI6MzcxLCIuL3N1YnRyYWN0IjozNzIsIi4vdHJhbnNmb3JtTWF0MyI6MzczLCIuL3RyYW5zZm9ybU1hdDQiOjM3NCwiLi90cmFuc2Zvcm1RdWF0IjozNzV9XSwzNDk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xL2VbMF0sdFsxXT0xL2VbMV0sdFsyXT0xL2VbMl0sdH19LHt9XSwzNTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9sZW5ndGgiKX0seyIuL2xlbmd0aCI6MzUxfV0sMzUxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIrbipuKX19LHt9XSwzNTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9ZVswXSxpPWVbMV0sbz1lWzJdO3JldHVybiB0WzBdPWErbiooclswXS1hKSx0WzFdPWkrbiooclsxXS1pKSx0WzJdPW8rbiooclsyXS1vKSx0fX0se31dLDM1MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5tYXgoZVswXSxyWzBdKSx0WzFdPU1hdGgubWF4KGVbMV0sclsxXSksdFsyXT1NYXRoLm1heChlWzJdLHJbMl0pLHR9fSx7fV0sMzU0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0WzJdPU1hdGgubWluKGVbMl0sclsyXSksdH19LHt9XSwzNTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9tdWx0aXBseSIpfSx7Ii4vbXVsdGlwbHkiOjM1Nn1dLDM1NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyWzBdLHRbMV09ZVsxXSpyWzFdLHRbMl09ZVsyXSpyWzJdLHR9fSx7fV0sMzU3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09LWVbMF0sdFsxXT0tZVsxXSx0WzJdPS1lWzJdLHR9fSx7fV0sMzU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0sYT1lWzJdLGk9cipyK24qbithKmE7aT4wJiYoaT0xL01hdGguc3FydChpKSx0WzBdPWVbMF0qaSx0WzFdPWVbMV0qaSx0WzJdPWVbMl0qaSk7cmV0dXJuIHR9fSx7fV0sMzU5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHwxO3ZhciByPTIqTWF0aC5yYW5kb20oKSpNYXRoLlBJLG49MipNYXRoLnJhbmRvbSgpLTEsYT1NYXRoLnNxcnQoMS1uKm4pKmU7cmV0dXJuIHRbMF09TWF0aC5jb3MocikqYSx0WzFdPU1hdGguc2luKHIpKmEsdFsyXT1uKmUsdH19LHt9XSwzNjA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9clsxXSxpPXJbMl0sbz1lWzFdLWEscz1lWzJdLWksbD1NYXRoLnNpbihuKSxjPU1hdGguY29zKG4pO3JldHVybiB0WzBdPWVbMF0sdFsxXT1hK28qYy1zKmwsdFsyXT1pK28qbCtzKmMsdH19LHt9XSwzNjE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9clswXSxpPXJbMl0sbz1lWzBdLWEscz1lWzJdLWksbD1NYXRoLnNpbihuKSxjPU1hdGguY29zKG4pO3JldHVybiB0WzBdPWErcypsK28qYyx0WzFdPWVbMV0sdFsyXT1pK3MqYy1vKmwsdH19LHt9XSwzNjI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9clswXSxpPXJbMV0sbz1lWzBdLWEscz1lWzFdLWksbD1NYXRoLnNpbihuKSxjPU1hdGguY29zKG4pO3JldHVybiB0WzBdPWErbypjLXMqbCx0WzFdPWkrbypsK3MqYyx0WzJdPWVbMl0sdH19LHt9XSwzNjM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLnJvdW5kKGVbMF0pLHRbMV09TWF0aC5yb3VuZChlWzFdKSx0WzJdPU1hdGgucm91bmQoZVsyXSksdH19LHt9XSwzNjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0fX0se31dLDM2NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0qbix0WzFdPWVbMV0rclsxXSpuLHRbMl09ZVsyXStyWzJdKm4sdH19LHt9XSwzNjY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdFsyXT1uLHR9fSx7fV0sMzY3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vc3F1YXJlZERpc3RhbmNlIil9LHsiLi9zcXVhcmVkRGlzdGFuY2UiOjM2OX1dLDM2ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL3NxdWFyZWRMZW5ndGgiKX0seyIuL3NxdWFyZWRMZW5ndGgiOjM3MH1dLDM2OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxhPWVbMl0tdFsyXTtyZXR1cm4gcipyK24qbithKmF9fSx7fV0sMzcwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4gZSplK3IqcituKm59fSx7fV0sMzcxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vc3VidHJhY3QiKX0seyIuL3N1YnRyYWN0IjozNzJ9XSwzNzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0fX0se31dLDM3MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxhPWVbMV0saT1lWzJdO3JldHVybiB0WzBdPW4qclswXSthKnJbM10raSpyWzZdLHRbMV09bipyWzFdK2Eqcls0XStpKnJbN10sdFsyXT1uKnJbMl0rYSpyWzVdK2kqcls4XSx0fX0se31dLDM3NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxhPWVbMV0saT1lWzJdLG89clszXSpuK3JbN10qYStyWzExXSppK3JbMTVdO3JldHVybiBvPW98fDEsdFswXT0oclswXSpuK3JbNF0qYStyWzhdKmkrclsxMl0pL28sdFsxXT0oclsxXSpuK3JbNV0qYStyWzldKmkrclsxM10pL28sdFsyXT0oclsyXSpuK3JbNl0qYStyWzEwXSppK3JbMTRdKS9vLHR9fSx7fV0sMzc1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGE9ZVsxXSxpPWVbMl0sbz1yWzBdLHM9clsxXSxsPXJbMl0sYz1yWzNdLHU9YypuK3MqaS1sKmEsaD1jKmErbCpuLW8qaSxmPWMqaStvKmEtcypuLHA9LW8qbi1zKmEtbCppO3JldHVybiB0WzBdPXUqYytwKi1vK2gqLWwtZiotcyx0WzFdPWgqYytwKi1zK2YqLW8tdSotbCx0WzJdPWYqYytwKi1sK3UqLXMtaCotbyx0fX0se31dLDM3NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHRbM109ZVszXStyWzNdLHR9fSx7fV0sMzc3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlfX0se31dLDM3ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdH19LHt9XSwzNzk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiB0WzBdPTAsdFsxXT0wLHRbMl09MCx0WzNdPTAsdH19LHt9XSwzODA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0sYT1lWzJdLXRbMl0saT1lWzNdLXRbM107cmV0dXJuIE1hdGguc3FydChyKnIrbipuK2EqYStpKmkpfX0se31dLDM4MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS9yWzBdLHRbMV09ZVsxXS9yWzFdLHRbMl09ZVsyXS9yWzJdLHRbM109ZVszXS9yWzNdLHR9fSx7fV0sMzgyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdK3RbM10qZVszXX19LHt9XSwzODM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gYVswXT10LGFbMV09ZSxhWzJdPXIsYVszXT1uLGF9fSx7fV0sMzg0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtjcmVhdGU6dCgiLi9jcmVhdGUiKSxjbG9uZTp0KCIuL2Nsb25lIiksZnJvbVZhbHVlczp0KCIuL2Zyb21WYWx1ZXMiKSxjb3B5OnQoIi4vY29weSIpLHNldDp0KCIuL3NldCIpLGFkZDp0KCIuL2FkZCIpLHN1YnRyYWN0OnQoIi4vc3VidHJhY3QiKSxtdWx0aXBseTp0KCIuL211bHRpcGx5IiksZGl2aWRlOnQoIi4vZGl2aWRlIiksbWluOnQoIi4vbWluIiksbWF4OnQoIi4vbWF4Iiksc2NhbGU6dCgiLi9zY2FsZSIpLHNjYWxlQW5kQWRkOnQoIi4vc2NhbGVBbmRBZGQiKSxkaXN0YW5jZTp0KCIuL2Rpc3RhbmNlIiksc3F1YXJlZERpc3RhbmNlOnQoIi4vc3F1YXJlZERpc3RhbmNlIiksbGVuZ3RoOnQoIi4vbGVuZ3RoIiksc3F1YXJlZExlbmd0aDp0KCIuL3NxdWFyZWRMZW5ndGgiKSxuZWdhdGU6dCgiLi9uZWdhdGUiKSxpbnZlcnNlOnQoIi4vaW52ZXJzZSIpLG5vcm1hbGl6ZTp0KCIuL25vcm1hbGl6ZSIpLGRvdDp0KCIuL2RvdCIpLGxlcnA6dCgiLi9sZXJwIikscmFuZG9tOnQoIi4vcmFuZG9tIiksdHJhbnNmb3JtTWF0NDp0KCIuL3RyYW5zZm9ybU1hdDQiKSx0cmFuc2Zvcm1RdWF0OnQoIi4vdHJhbnNmb3JtUXVhdCIpfX0seyIuL2FkZCI6Mzc2LCIuL2Nsb25lIjozNzcsIi4vY29weSI6Mzc4LCIuL2NyZWF0ZSI6Mzc5LCIuL2Rpc3RhbmNlIjozODAsIi4vZGl2aWRlIjozODEsIi4vZG90IjozODIsIi4vZnJvbVZhbHVlcyI6MzgzLCIuL2ludmVyc2UiOjM4NSwiLi9sZW5ndGgiOjM4NiwiLi9sZXJwIjozODcsIi4vbWF4IjozODgsIi4vbWluIjozODksIi4vbXVsdGlwbHkiOjM5MCwiLi9uZWdhdGUiOjM5MSwiLi9ub3JtYWxpemUiOjM5MiwiLi9yYW5kb20iOjM5MywiLi9zY2FsZSI6Mzk0LCIuL3NjYWxlQW5kQWRkIjozOTUsIi4vc2V0IjozOTYsIi4vc3F1YXJlZERpc3RhbmNlIjozOTcsIi4vc3F1YXJlZExlbmd0aCI6Mzk4LCIuL3N1YnRyYWN0IjozOTksIi4vdHJhbnNmb3JtTWF0NCI6NDAwLCIuL3RyYW5zZm9ybVF1YXQiOjQwMX1dLDM4NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEvZVswXSx0WzFdPTEvZVsxXSx0WzJdPTEvZVsyXSx0WzNdPTEvZVszXSx0fX0se31dLDM4NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0sYT10WzNdO3JldHVybiBNYXRoLnNxcnQoZSplK3IqcituKm4rYSphKX19LHt9XSwzODc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9ZVswXSxpPWVbMV0sbz1lWzJdLHM9ZVszXTtyZXR1cm4gdFswXT1hK24qKHJbMF0tYSksdFsxXT1pK24qKHJbMV0taSksdFsyXT1vK24qKHJbMl0tbyksdFszXT1zK24qKHJbM10tcyksdH19LHt9XSwzODg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWF4KGVbMF0sclswXSksdFsxXT1NYXRoLm1heChlWzFdLHJbMV0pLHRbMl09TWF0aC5tYXgoZVsyXSxyWzJdKSx0WzNdPU1hdGgubWF4KGVbM10sclszXSksdH19LHt9XSwzODk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWluKGVbMF0sclswXSksdFsxXT1NYXRoLm1pbihlWzFdLHJbMV0pLHRbMl09TWF0aC5taW4oZVsyXSxyWzJdKSx0WzNdPU1hdGgubWluKGVbM10sclszXSksdH19LHt9XSwzOTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qclswXSx0WzFdPWVbMV0qclsxXSx0WzJdPWVbMl0qclsyXSx0WzNdPWVbM10qclszXSx0fX0se31dLDM5MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0WzNdPS1lWzNdLHR9fSx7fV0sMzkyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0sYT1lWzJdLGk9ZVszXSxvPXIqcituKm4rYSphK2kqaTtvPjAmJihvPTEvTWF0aC5zcXJ0KG8pLHRbMF09cipvLHRbMV09bipvLHRbMl09YSpvLHRbM109aSpvKTtyZXR1cm4gdH19LHt9XSwzOTM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL25vcm1hbGl6ZSIpLGE9dCgiLi9zY2FsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDEsdFswXT1NYXRoLnJhbmRvbSgpLHRbMV09TWF0aC5yYW5kb20oKSx0WzJdPU1hdGgucmFuZG9tKCksdFszXT1NYXRoLnJhbmRvbSgpLG4odCx0KSxhKHQsdCxlKSx0fX0seyIuL25vcm1hbGl6ZSI6MzkyLCIuL3NjYWxlIjozOTR9XSwzOTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0WzNdPWVbM10qcix0fX0se31dLDM5NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0qbix0WzFdPWVbMV0rclsxXSpuLHRbMl09ZVsyXStyWzJdKm4sdFszXT1lWzNdK3JbM10qbix0fX0se31dLDM5NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGEpe3JldHVybiB0WzBdPWUsdFsxXT1yLHRbMl09bix0WzNdPWEsdH19LHt9XSwzOTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0sYT1lWzJdLXRbMl0saT1lWzNdLXRbM107cmV0dXJuIHIqcituKm4rYSphK2kqaX19LHt9XSwzOTg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGE9dFszXTtyZXR1cm4gZSplK3IqcituKm4rYSphfX0se31dLDM5OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS1yWzBdLHRbMV09ZVsxXS1yWzFdLHRbMl09ZVsyXS1yWzJdLHRbM109ZVszXS1yWzNdLHR9fSx7fV0sNDAwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGE9ZVsxXSxpPWVbMl0sbz1lWzNdO3JldHVybiB0WzBdPXJbMF0qbityWzRdKmErcls4XSppK3JbMTJdKm8sdFsxXT1yWzFdKm4rcls1XSphK3JbOV0qaStyWzEzXSpvLHRbMl09clsyXSpuK3JbNl0qYStyWzEwXSppK3JbMTRdKm8sdFszXT1yWzNdKm4rcls3XSphK3JbMTFdKmkrclsxNV0qbyx0fX0se31dLDQwMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxhPWVbMV0saT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLGM9clszXSx1PWMqbitzKmktbCphLGg9YyphK2wqbi1vKmksZj1jKmkrbyphLXMqbixwPS1vKm4tcyphLWwqaTtyZXR1cm4gdFswXT11KmMrcCotbytoKi1sLWYqLXMsdFsxXT1oKmMrcCotcytmKi1vLXUqLWwsdFsyXT1mKmMrcCotbCt1Ki1zLWgqLW8sdFszXT1lWzNdLHR9fSx7fV0sNDAyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBuWzBdPWksblsxXT1yLG5bMl09ZSxuWzNdPXQsYVswXX07dmFyIG49bmV3IFVpbnQ4QXJyYXkoNCksYT1uZXcgRmxvYXQzMkFycmF5KG4uYnVmZmVyKX0se31dLDQwMzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2wtdG9rZW5pemVyIiksYT10KCJhdG9iLWxpdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPUFycmF5LmlzQXJyYXkodCk/dDpuKHQpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpZigicHJlcHJvY2Vzc29yIj09PWkudHlwZSl7dmFyIG89aS5kYXRhLm1hdGNoKC9cI2RlZmluZVxzK1NIQURFUl9OQU1FKF9CNjQpP1xzKyguKykkLyk7aWYobyYmb1syXSl7dmFyIHM9b1sxXSxsPW9bMl07cmV0dXJuKHM/YShsKTpsKS50cmltKCl9fX19fSx7ImF0b2ItbGl0ZSI6NzQsImdsc2wtdG9rZW5pemVyIjo0MTB9XSw0MDQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixrLFQ9MCxNPTAsQT1sLFM9W10sRT1bXSxMPTEsQz0wLFA9MCxPPSExLHo9ITEsST0iIixEPWksUj1uOyIzMDAgZXMiPT09KHQ9dHx8e30pLnZlcnNpb24mJihEPXMsUj1vKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEU9W10sbnVsbCE9PXQ/ZnVuY3Rpb24odCl7dmFyIHI7VD0wLGs9KEkrPXQpLmxlbmd0aDtmb3IoO2U9SVtUXSxUPGs7KXtzd2l0Y2gocj1ULEEpe2Nhc2UgdTpUPVYoKTticmVhaztjYXNlIGg6Y2FzZSBmOlQ9aigpO2JyZWFrO2Nhc2UgcDpUPVUoKTticmVhaztjYXNlIGQ6VD1HKCk7YnJlYWs7Y2FzZSBfOlQ9SCgpO2JyZWFrO2Nhc2UgZzpUPVkoKTticmVhaztjYXNlIGM6VD1XKCk7YnJlYWs7Y2FzZSB4OlQ9TigpO2JyZWFrO2Nhc2UgbDpUPUIoKX1pZihyIT09VClzd2l0Y2goSVtyXSl7Y2FzZSJcbiI6Qz0wLCsrTDticmVhaztkZWZhdWx0OisrQ319cmV0dXJuIE0rPVQsST1JLnNsaWNlKFQpLEV9KHQucmVwbGFjZT90LnJlcGxhY2UoL1xyXG4vZywiXG4iKTp0KTpmdW5jdGlvbih0KXtTLmxlbmd0aCYmRihTLmpvaW4oIiIpKTtyZXR1cm4gQT1iLEYoIihlb2YpIiksRX0oKX07ZnVuY3Rpb24gRih0KXt0Lmxlbmd0aCYmRS5wdXNoKHt0eXBlOndbQV0sZGF0YTp0LHBvc2l0aW9uOlAsbGluZTpMLGNvbHVtbjpDfSl9ZnVuY3Rpb24gQigpe3JldHVybiBTPVMubGVuZ3RoP1tdOlMsIi8iPT09ciYmIioiPT09ZT8oUD1NK1QtMSxBPXUscj1lLFQrMSk6Ii8iPT09ciYmIi8iPT09ZT8oUD1NK1QtMSxBPWgscj1lLFQrMSk6IiMiPT09ZT8oQT1mLFA9TStULFQpOi9ccy8udGVzdChlKT8oQT14LFA9TStULFQpOihPPS9cZC8udGVzdChlKSx6PS9bXlx3X10vLnRlc3QoZSksUD1NK1QsQT1PP2Q6ej9wOmMsVCl9ZnVuY3Rpb24gTigpe3JldHVybi9bXlxzXS9nLnRlc3QoZSk/KEYoUy5qb2luKCIiKSksQT1sLFQpOihTLnB1c2goZSkscj1lLFQrMSl9ZnVuY3Rpb24gaigpe3JldHVybiJcciIhPT1lJiYiXG4iIT09ZXx8IlxcIj09PXI/KFMucHVzaChlKSxyPWUsVCsxKTooRihTLmpvaW4oIiIpKSxBPWwsVCl9ZnVuY3Rpb24gVigpe3JldHVybiIvIj09PWUmJiIqIj09PXI/KFMucHVzaChlKSxGKFMuam9pbigiIikpLEE9bCxUKzEpOihTLnB1c2goZSkscj1lLFQrMSl9ZnVuY3Rpb24gVSgpe2lmKCIuIj09PXImJi9cZC8udGVzdChlKSlyZXR1cm4gQT1nLFQ7aWYoIi8iPT09ciYmIioiPT09ZSlyZXR1cm4gQT11LFQ7aWYoIi8iPT09ciYmIi8iPT09ZSlyZXR1cm4gQT1oLFQ7aWYoIi4iPT09ZSYmUy5sZW5ndGgpe2Zvcig7cShTKTspO3JldHVybiBBPWcsVH1pZigiOyI9PT1lfHwiKSI9PT1lfHwiKCI9PT1lKXtpZihTLmxlbmd0aClmb3IoO3EoUyk7KTtyZXR1cm4gRihlKSxBPWwsVCsxfXZhciB0PTI9PT1TLmxlbmd0aCYmIj0iIT09ZTtpZigvW1x3X1xkXHNdLy50ZXN0KGUpfHx0KXtmb3IoO3EoUyk7KTtyZXR1cm4gQT1sLFR9cmV0dXJuIFMucHVzaChlKSxyPWUsVCsxfWZ1bmN0aW9uIHEodCl7Zm9yKHZhciBlLHIsbj0wOzspe2lmKGU9YS5pbmRleE9mKHQuc2xpY2UoMCx0Lmxlbmd0aCtuKS5qb2luKCIiKSkscj1hW2VdLC0xPT09ZSl7aWYobi0tK3QubGVuZ3RoPjApY29udGludWU7cj10LnNsaWNlKDAsMSkuam9pbigiIil9cmV0dXJuIEYociksUCs9ci5sZW5ndGgsKFM9Uy5zbGljZShyLmxlbmd0aCkpLmxlbmd0aH19ZnVuY3Rpb24gSCgpe3JldHVybi9bXmEtZkEtRjAtOV0vLnRlc3QoZSk/KEYoUy5qb2luKCIiKSksQT1sLFQpOihTLnB1c2goZSkscj1lLFQrMSl9ZnVuY3Rpb24gRygpe3JldHVybiIuIj09PWU/KFMucHVzaChlKSxBPWcscj1lLFQrMSk6L1tlRV0vLnRlc3QoZSk/KFMucHVzaChlKSxBPWcscj1lLFQrMSk6IngiPT09ZSYmMT09PVMubGVuZ3RoJiYiMCI9PT1TWzBdPyhBPV8sUy5wdXNoKGUpLHI9ZSxUKzEpOi9bXlxkXS8udGVzdChlKT8oRihTLmpvaW4oIiIpKSxBPWwsVCk6KFMucHVzaChlKSxyPWUsVCsxKX1mdW5jdGlvbiBZKCl7cmV0dXJuImYiPT09ZSYmKFMucHVzaChlKSxyPWUsVCs9MSksL1tlRV0vLnRlc3QoZSk/KFMucHVzaChlKSxyPWUsVCsxKToiLSI9PT1lJiYvW2VFXS8udGVzdChyKT8oUy5wdXNoKGUpLHI9ZSxUKzEpOi9bXlxkXS8udGVzdChlKT8oRihTLmpvaW4oIiIpKSxBPWwsVCk6KFMucHVzaChlKSxyPWUsVCsxKX1mdW5jdGlvbiBXKCl7aWYoL1teXGRcd19dLy50ZXN0KGUpKXt2YXIgdD1TLmpvaW4oIiIpO3JldHVybiBBPVIuaW5kZXhPZih0KT4tMT95OkQuaW5kZXhPZih0KT4tMT9tOnYsRihTLmpvaW4oIiIpKSxBPWwsVH1yZXR1cm4gUy5wdXNoKGUpLHI9ZSxUKzF9fTt2YXIgbj10KCIuL2xpYi9saXRlcmFscyIpLGE9dCgiLi9saWIvb3BlcmF0b3JzIiksaT10KCIuL2xpYi9idWlsdGlucyIpLG89dCgiLi9saWIvbGl0ZXJhbHMtMzAwZXMiKSxzPXQoIi4vbGliL2J1aWx0aW5zLTMwMGVzIiksbD05OTksYz05OTk5LHU9MCxoPTEsZj0yLHA9MyxkPTQsZz01LHY9NixtPTcseT04LHg9OSxiPTEwLF89MTEsdz1bImJsb2NrLWNvbW1lbnQiLCJsaW5lLWNvbW1lbnQiLCJwcmVwcm9jZXNzb3IiLCJvcGVyYXRvciIsImludGVnZXIiLCJmbG9hdCIsImlkZW50IiwiYnVpbHRpbiIsImtleXdvcmQiLCJ3aGl0ZXNwYWNlIiwiZW9mIiwiaW50ZWdlciJdfSx7Ii4vbGliL2J1aWx0aW5zIjo0MDYsIi4vbGliL2J1aWx0aW5zLTMwMGVzIjo0MDUsIi4vbGliL2xpdGVyYWxzIjo0MDgsIi4vbGliL2xpdGVyYWxzLTMwMGVzIjo0MDcsIi4vbGliL29wZXJhdG9ycyI6NDA5fV0sNDA1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9idWlsdGlucyIpO249bi5zbGljZSgpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hL14oZ2xcX3x0ZXh0dXJlKS8udGVzdCh0KX0pLGUuZXhwb3J0cz1uLmNvbmNhdChbImdsX1ZlcnRleElEIiwiZ2xfSW5zdGFuY2VJRCIsImdsX1Bvc2l0aW9uIiwiZ2xfUG9pbnRTaXplIiwiZ2xfRnJhZ0Nvb3JkIiwiZ2xfRnJvbnRGYWNpbmciLCJnbF9GcmFnRGVwdGgiLCJnbF9Qb2ludENvb3JkIiwiZ2xfTWF4VmVydGV4QXR0cmlicyIsImdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwiZ2xfTWF4VmVydGV4T3V0cHV0VmVjdG9ycyIsImdsX01heEZyYWdtZW50SW5wdXRWZWN0b3JzIiwiZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzIiwiZ2xfTWF4RHJhd0J1ZmZlcnMiLCJnbF9NaW5Qcm9ncmFtVGV4ZWxPZmZzZXQiLCJnbF9NYXhQcm9ncmFtVGV4ZWxPZmZzZXQiLCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIsImdsX0RlcHRoUmFuZ2UiLCJ0cnVuYyIsInJvdW5kIiwicm91bmRFdmVuIiwiaXNuYW4iLCJpc2luZiIsImZsb2F0Qml0c1RvSW50IiwiZmxvYXRCaXRzVG9VaW50IiwiaW50Qml0c1RvRmxvYXQiLCJ1aW50Qml0c1RvRmxvYXQiLCJwYWNrU25vcm0yeDE2IiwidW5wYWNrU25vcm0yeDE2IiwicGFja1Vub3JtMngxNiIsInVucGFja1Vub3JtMngxNiIsInBhY2tIYWxmMngxNiIsInVucGFja0hhbGYyeDE2Iiwib3V0ZXJQcm9kdWN0IiwidHJhbnNwb3NlIiwiZGV0ZXJtaW5hbnQiLCJpbnZlcnNlIiwidGV4dHVyZSIsInRleHR1cmVTaXplIiwidGV4dHVyZVByb2oiLCJ0ZXh0dXJlTG9kIiwidGV4dHVyZU9mZnNldCIsInRleGVsRmV0Y2giLCJ0ZXhlbEZldGNoT2Zmc2V0IiwidGV4dHVyZVByb2pPZmZzZXQiLCJ0ZXh0dXJlTG9kT2Zmc2V0IiwidGV4dHVyZVByb2pMb2QiLCJ0ZXh0dXJlUHJvakxvZE9mZnNldCIsInRleHR1cmVHcmFkIiwidGV4dHVyZUdyYWRPZmZzZXQiLCJ0ZXh0dXJlUHJvakdyYWQiLCJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiXSl9LHsiLi9idWlsdGlucyI6NDA2fV0sNDA2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsiYWJzIiwiYWNvcyIsImFsbCIsImFueSIsImFzaW4iLCJhdGFuIiwiY2VpbCIsImNsYW1wIiwiY29zIiwiY3Jvc3MiLCJkRmR4IiwiZEZkeSIsImRlZ3JlZXMiLCJkaXN0YW5jZSIsImRvdCIsImVxdWFsIiwiZXhwIiwiZXhwMiIsImZhY2Vmb3J3YXJkIiwiZmxvb3IiLCJmcmFjdCIsImdsX0JhY2tDb2xvciIsImdsX0JhY2tMaWdodE1vZGVsUHJvZHVjdCIsImdsX0JhY2tMaWdodFByb2R1Y3QiLCJnbF9CYWNrTWF0ZXJpYWwiLCJnbF9CYWNrU2Vjb25kYXJ5Q29sb3IiLCJnbF9DbGlwUGxhbmUiLCJnbF9DbGlwVmVydGV4IiwiZ2xfQ29sb3IiLCJnbF9EZXB0aFJhbmdlIiwiZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMiLCJnbF9FeWVQbGFuZVEiLCJnbF9FeWVQbGFuZVIiLCJnbF9FeWVQbGFuZVMiLCJnbF9FeWVQbGFuZVQiLCJnbF9Gb2ciLCJnbF9Gb2dDb29yZCIsImdsX0ZvZ0ZyYWdDb29yZCIsImdsX0ZvZ1BhcmFtZXRlcnMiLCJnbF9GcmFnQ29sb3IiLCJnbF9GcmFnQ29vcmQiLCJnbF9GcmFnRGF0YSIsImdsX0ZyYWdEZXB0aCIsImdsX0ZyYWdEZXB0aEVYVCIsImdsX0Zyb250Q29sb3IiLCJnbF9Gcm9udEZhY2luZyIsImdsX0Zyb250TGlnaHRNb2RlbFByb2R1Y3QiLCJnbF9Gcm9udExpZ2h0UHJvZHVjdCIsImdsX0Zyb250TWF0ZXJpYWwiLCJnbF9Gcm9udFNlY29uZGFyeUNvbG9yIiwiZ2xfTGlnaHRNb2RlbCIsImdsX0xpZ2h0TW9kZWxQYXJhbWV0ZXJzIiwiZ2xfTGlnaHRNb2RlbFByb2R1Y3RzIiwiZ2xfTGlnaHRQcm9kdWN0cyIsImdsX0xpZ2h0U291cmNlIiwiZ2xfTGlnaHRTb3VyY2VQYXJhbWV0ZXJzIiwiZ2xfTWF0ZXJpYWxQYXJhbWV0ZXJzIiwiZ2xfTWF4Q2xpcFBsYW5lcyIsImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhEcmF3QnVmZmVycyIsImdsX01heEZyYWdtZW50VW5pZm9ybUNvbXBvbmVudHMiLCJnbF9NYXhMaWdodHMiLCJnbF9NYXhUZXh0dXJlQ29vcmRzIiwiZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhUZXh0dXJlVW5pdHMiLCJnbF9NYXhWYXJ5aW5nRmxvYXRzIiwiZ2xfTWF4VmVydGV4QXR0cmlicyIsImdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzIiwiZ2xfTWF4VmVydGV4VW5pZm9ybUNvbXBvbmVudHMiLCJnbF9Nb2RlbFZpZXdNYXRyaXgiLCJnbF9Nb2RlbFZpZXdNYXRyaXhJbnZlcnNlIiwiZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX01vZGVsVmlld01hdHJpeFRyYW5zcG9zZSIsImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXgiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4SW52ZXJzZSIsImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlVHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeFRyYW5zcG9zZSIsImdsX011bHRpVGV4Q29vcmQwIiwiZ2xfTXVsdGlUZXhDb29yZDEiLCJnbF9NdWx0aVRleENvb3JkMiIsImdsX011bHRpVGV4Q29vcmQzIiwiZ2xfTXVsdGlUZXhDb29yZDQiLCJnbF9NdWx0aVRleENvb3JkNSIsImdsX011bHRpVGV4Q29vcmQ2IiwiZ2xfTXVsdGlUZXhDb29yZDciLCJnbF9Ob3JtYWwiLCJnbF9Ob3JtYWxNYXRyaXgiLCJnbF9Ob3JtYWxTY2FsZSIsImdsX09iamVjdFBsYW5lUSIsImdsX09iamVjdFBsYW5lUiIsImdsX09iamVjdFBsYW5lUyIsImdsX09iamVjdFBsYW5lVCIsImdsX1BvaW50IiwiZ2xfUG9pbnRDb29yZCIsImdsX1BvaW50UGFyYW1ldGVycyIsImdsX1BvaW50U2l6ZSIsImdsX1Bvc2l0aW9uIiwiZ2xfUHJvamVjdGlvbk1hdHJpeCIsImdsX1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlIiwiZ2xfUHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9Qcm9qZWN0aW9uTWF0cml4VHJhbnNwb3NlIiwiZ2xfU2Vjb25kYXJ5Q29sb3IiLCJnbF9UZXhDb29yZCIsImdsX1RleHR1cmVFbnZDb2xvciIsImdsX1RleHR1cmVNYXRyaXgiLCJnbF9UZXh0dXJlTWF0cml4SW52ZXJzZSIsImdsX1RleHR1cmVNYXRyaXhJbnZlcnNlVHJhbnNwb3NlIiwiZ2xfVGV4dHVyZU1hdHJpeFRyYW5zcG9zZSIsImdsX1ZlcnRleCIsImdyZWF0ZXJUaGFuIiwiZ3JlYXRlclRoYW5FcXVhbCIsImludmVyc2VzcXJ0IiwibGVuZ3RoIiwibGVzc1RoYW4iLCJsZXNzVGhhbkVxdWFsIiwibG9nIiwibG9nMiIsIm1hdHJpeENvbXBNdWx0IiwibWF4IiwibWluIiwibWl4IiwibW9kIiwibm9ybWFsaXplIiwibm90Iiwibm90RXF1YWwiLCJwb3ciLCJyYWRpYW5zIiwicmVmbGVjdCIsInJlZnJhY3QiLCJzaWduIiwic2luIiwic21vb3Roc3RlcCIsInNxcnQiLCJzdGVwIiwidGFuIiwidGV4dHVyZTJEIiwidGV4dHVyZTJETG9kIiwidGV4dHVyZTJEUHJvaiIsInRleHR1cmUyRFByb2pMb2QiLCJ0ZXh0dXJlQ3ViZSIsInRleHR1cmVDdWJlTG9kIiwidGV4dHVyZTJETG9kRVhUIiwidGV4dHVyZTJEUHJvakxvZEVYVCIsInRleHR1cmVDdWJlTG9kRVhUIiwidGV4dHVyZTJER3JhZEVYVCIsInRleHR1cmUyRFByb2pHcmFkRVhUIiwidGV4dHVyZUN1YmVHcmFkRVhUIl19LHt9XSw0MDc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2xpdGVyYWxzIik7ZS5leHBvcnRzPW4uc2xpY2UoKS5jb25jYXQoWyJsYXlvdXQiLCJjZW50cm9pZCIsInNtb290aCIsImNhc2UiLCJtYXQyeDIiLCJtYXQyeDMiLCJtYXQyeDQiLCJtYXQzeDIiLCJtYXQzeDMiLCJtYXQzeDQiLCJtYXQ0eDIiLCJtYXQ0eDMiLCJtYXQ0eDQiLCJ1aW50IiwidXZlYzIiLCJ1dmVjMyIsInV2ZWM0Iiwic2FtcGxlckN1YmVTaGFkb3ciLCJzYW1wbGVyMkRBcnJheSIsInNhbXBsZXIyREFycmF5U2hhZG93IiwiaXNhbXBsZXIyRCIsImlzYW1wbGVyM0QiLCJpc2FtcGxlckN1YmUiLCJpc2FtcGxlcjJEQXJyYXkiLCJ1c2FtcGxlcjJEIiwidXNhbXBsZXIzRCIsInVzYW1wbGVyQ3ViZSIsInVzYW1wbGVyMkRBcnJheSIsImNvaGVyZW50IiwicmVzdHJpY3QiLCJyZWFkb25seSIsIndyaXRlb25seSIsInJlc291cmNlIiwiYXRvbWljX3VpbnQiLCJub3BlcnNwZWN0aXZlIiwicGF0Y2giLCJzYW1wbGUiLCJzdWJyb3V0aW5lIiwiY29tbW9uIiwicGFydGl0aW9uIiwiYWN0aXZlIiwiZmlsdGVyIiwiaW1hZ2UxRCIsImltYWdlMkQiLCJpbWFnZTNEIiwiaW1hZ2VDdWJlIiwiaWltYWdlMUQiLCJpaW1hZ2UyRCIsImlpbWFnZTNEIiwiaWltYWdlQ3ViZSIsInVpbWFnZTFEIiwidWltYWdlMkQiLCJ1aW1hZ2UzRCIsInVpbWFnZUN1YmUiLCJpbWFnZTFEQXJyYXkiLCJpbWFnZTJEQXJyYXkiLCJpaW1hZ2UxREFycmF5IiwiaWltYWdlMkRBcnJheSIsInVpbWFnZTFEQXJyYXkiLCJ1aW1hZ2UyREFycmF5IiwiaW1hZ2UxRFNoYWRvdyIsImltYWdlMkRTaGFkb3ciLCJpbWFnZTFEQXJyYXlTaGFkb3ciLCJpbWFnZTJEQXJyYXlTaGFkb3ciLCJpbWFnZUJ1ZmZlciIsImlpbWFnZUJ1ZmZlciIsInVpbWFnZUJ1ZmZlciIsInNhbXBsZXIxREFycmF5Iiwic2FtcGxlcjFEQXJyYXlTaGFkb3ciLCJpc2FtcGxlcjFEIiwiaXNhbXBsZXIxREFycmF5IiwidXNhbXBsZXIxRCIsInVzYW1wbGVyMURBcnJheSIsImlzYW1wbGVyMkRSZWN0IiwidXNhbXBsZXIyRFJlY3QiLCJzYW1wbGVyQnVmZmVyIiwiaXNhbXBsZXJCdWZmZXIiLCJ1c2FtcGxlckJ1ZmZlciIsInNhbXBsZXIyRE1TIiwiaXNhbXBsZXIyRE1TIiwidXNhbXBsZXIyRE1TIiwic2FtcGxlcjJETVNBcnJheSIsImlzYW1wbGVyMkRNU0FycmF5IiwidXNhbXBsZXIyRE1TQXJyYXkiXSl9LHsiLi9saXRlcmFscyI6NDA4fV0sNDA4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsicHJlY2lzaW9uIiwiaGlnaHAiLCJtZWRpdW1wIiwibG93cCIsImF0dHJpYnV0ZSIsImNvbnN0IiwidW5pZm9ybSIsInZhcnlpbmciLCJicmVhayIsImNvbnRpbnVlIiwiZG8iLCJmb3IiLCJ3aGlsZSIsImlmIiwiZWxzZSIsImluIiwib3V0IiwiaW5vdXQiLCJmbG9hdCIsImludCIsInZvaWQiLCJib29sIiwidHJ1ZSIsImZhbHNlIiwiZGlzY2FyZCIsInJldHVybiIsIm1hdDIiLCJtYXQzIiwibWF0NCIsInZlYzIiLCJ2ZWMzIiwidmVjNCIsIml2ZWMyIiwiaXZlYzMiLCJpdmVjNCIsImJ2ZWMyIiwiYnZlYzMiLCJidmVjNCIsInNhbXBsZXIxRCIsInNhbXBsZXIyRCIsInNhbXBsZXIzRCIsInNhbXBsZXJDdWJlIiwic2FtcGxlcjFEU2hhZG93Iiwic2FtcGxlcjJEU2hhZG93Iiwic3RydWN0IiwiYXNtIiwiY2xhc3MiLCJ1bmlvbiIsImVudW0iLCJ0eXBlZGVmIiwidGVtcGxhdGUiLCJ0aGlzIiwicGFja2VkIiwiZ290byIsInN3aXRjaCIsImRlZmF1bHQiLCJpbmxpbmUiLCJub2lubGluZSIsInZvbGF0aWxlIiwicHVibGljIiwic3RhdGljIiwiZXh0ZXJuIiwiZXh0ZXJuYWwiLCJpbnRlcmZhY2UiLCJsb25nIiwic2hvcnQiLCJkb3VibGUiLCJoYWxmIiwiZml4ZWQiLCJ1bnNpZ25lZCIsImlucHV0Iiwib3V0cHV0IiwiaHZlYzIiLCJodmVjMyIsImh2ZWM0IiwiZHZlYzIiLCJkdmVjMyIsImR2ZWM0IiwiZnZlYzIiLCJmdmVjMyIsImZ2ZWM0Iiwic2FtcGxlcjJEUmVjdCIsInNhbXBsZXIzRFJlY3QiLCJzYW1wbGVyMkRSZWN0U2hhZG93Iiwic2l6ZW9mIiwiY2FzdCIsIm5hbWVzcGFjZSIsInVzaW5nIl19LHt9XSw0MDk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyI8PD0iLCI+Pj0iLCIrKyIsIi0tIiwiPDwiLCI+PiIsIjw9IiwiPj0iLCI9PSIsIiE9IiwiJiYiLCJ8fCIsIis9IiwiLT0iLCIqPSIsIi89IiwiJT0iLCImPSIsIl5eIiwiXj0iLCJ8PSIsIigiLCIpIiwiWyIsIl0iLCIuIiwiISIsIn4iLCIqIiwiLyIsIiUiLCIrIiwiLSIsIjwiLCI+IiwiJiIsIl4iLCJ8IiwiPyIsIjoiLCI9IiwiLCIsIjsiLCJ7IiwifSJdfSx7fV0sNDEwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9pbmRleCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSksYT1bXTtyZXR1cm4gYT0oYT1hLmNvbmNhdChyKHQpKSkuY29uY2F0KHIobnVsbCkpfX0seyIuL2luZGV4Ijo0MDR9XSw0MTE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7InN0cmluZyI9PXR5cGVvZiB0JiYodD1bdF0pO2Zvcih2YXIgZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxyPVtdLG49MDtuPHQubGVuZ3RoLTE7bisrKXIucHVzaCh0W25dLGVbbl18fCIiKTtyZXR1cm4gci5wdXNoKHRbbl0pLHIuam9pbigiIil9fSx7fV0sNDEyOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhPXQoImlzLWJyb3dzZXIiKTtuPSJmdW5jdGlvbiI9PXR5cGVvZiByLm1hdGNoTWVkaWE/IXIubWF0Y2hNZWRpYSgiKGhvdmVyOiBub25lKSIpLm1hdGNoZXM6YSxlLmV4cG9ydHM9bn0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJpcy1icm93c2VyIjo0MTl9XSw0MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiaXMtYnJvd3NlciIpO2UuZXhwb3J0cz1uJiZmdW5jdGlvbigpe3ZhciB0PSExO3RyeXt2YXIgZT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXt0PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpfWNhdGNoKGUpe3Q9ITF9cmV0dXJuIHR9KCl9LHsiaXMtYnJvd3NlciI6NDE5fV0sNDE0OltmdW5jdGlvbih0LGUscil7ci5yZWFkPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIGksbyxzPTgqYS1uLTEsbD0oMTw8cyktMSxjPWw+PjEsdT0tNyxoPXI/YS0xOjAsZj1yPy0xOjEscD10W2UraF07Zm9yKGgrPWYsaT1wJigxPDwtdSktMSxwPj49LXUsdSs9czt1PjA7aT0yNTYqaSt0W2UraF0saCs9Zix1LT04KTtmb3Iobz1pJigxPDwtdSktMSxpPj49LXUsdSs9bjt1PjA7bz0yNTYqbyt0W2UraF0saCs9Zix1LT04KTtpZigwPT09aSlpPTEtYztlbHNle2lmKGk9PT1sKXJldHVybiBvP05hTjoxLzAqKHA/LTE6MSk7bys9TWF0aC5wb3coMixuKSxpLT1jfXJldHVybihwPy0xOjEpKm8qTWF0aC5wb3coMixpLW4pfSxyLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4sYSxpKXt2YXIgbyxzLGwsYz04KmktYS0xLHU9KDE8PGMpLTEsaD11Pj4xLGY9MjM9PT1hP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxwPW4/MDppLTEsZD1uPzE6LTEsZz1lPDB8fDA9PT1lJiYxL2U8MD8xOjA7Zm9yKGU9TWF0aC5hYnMoZSksaXNOYU4oZSl8fGU9PT0xLzA/KHM9aXNOYU4oZSk/MTowLG89dSk6KG89TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMiksZSoobD1NYXRoLnBvdygyLC1vKSk8MSYmKG8tLSxsKj0yKSwoZSs9bytoPj0xP2YvbDpmKk1hdGgucG93KDIsMS1oKSkqbD49MiYmKG8rKyxsLz0yKSxvK2g+PXU/KHM9MCxvPXUpOm8raD49MT8ocz0oZSpsLTEpKk1hdGgucG93KDIsYSksbys9aCk6KHM9ZSpNYXRoLnBvdygyLGgtMSkqTWF0aC5wb3coMixhKSxvPTApKTthPj04O3RbcitwXT0yNTUmcyxwKz1kLHMvPTI1NixhLT04KTtmb3Iobz1vPDxhfHMsYys9YTtjPjA7dFtyK3BdPTI1NSZvLHArPWQsby89MjU2LGMtPTgpO3RbcitwLWRdfD0xMjgqZ319LHt9XSw0MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3QgZCsxIHBvaW50cyIpO3ZhciBhPXRbMF0ubGVuZ3RoO2lmKHI8PWEpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGlucHV0IGF0IGxlYXN0IGQrMSBwb2ludHMiKTt2YXIgbz10LnNsaWNlKDAsYSsxKSxzPW4uYXBwbHkodm9pZCAwLG8pO2lmKDA9PT1zKXRocm93IG5ldyBFcnJvcigiSW5wdXQgbm90IGluIGdlbmVyYWwgcG9zaXRpb24iKTtmb3IodmFyIGw9bmV3IEFycmF5KGErMSksdT0wO3U8PWE7Kyt1KWxbdV09dTtzPDAmJihsWzBdPTEsbFsxXT0wKTtmb3IodmFyIGg9bmV3IGkobCxuZXcgQXJyYXkoYSsxKSwhMSksZj1oLmFkamFjZW50LHA9bmV3IEFycmF5KGErMiksdT0wO3U8PWE7Kyt1KXtmb3IodmFyIGQ9bC5zbGljZSgpLGc9MDtnPD1hOysrZylnPT09dSYmKGRbZ109LTEpO3ZhciB2PWRbMF07ZFswXT1kWzFdLGRbMV09djt2YXIgbT1uZXcgaShkLG5ldyBBcnJheShhKzEpLCEwKTtmW3VdPW0scFt1XT1tfXBbYSsxXT1oO2Zvcih2YXIgdT0wO3U8PWE7Kyt1KWZvcih2YXIgZD1mW3VdLnZlcnRpY2VzLHk9Zlt1XS5hZGphY2VudCxnPTA7Zzw9YTsrK2cpe3ZhciB4PWRbZ107aWYoeDwwKXlbZ109aDtlbHNlIGZvcih2YXIgYj0wO2I8PWE7KytiKWZbYl0udmVydGljZXMuaW5kZXhPZih4KTwwJiYoeVtnXT1mW2JdKX1mb3IodmFyIF89bmV3IGMoYSxvLHApLHc9ISFlLHU9YSsxO3U8cjsrK3UpXy5pbnNlcnQodFt1XSx3KTtyZXR1cm4gXy5ib3VuZGFyeSgpfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxhPXQoInNpbXBsaWNpYWwtY29tcGxleCIpLmNvbXBhcmVDZWxscztmdW5jdGlvbiBpKHQsZSxyKXt0aGlzLnZlcnRpY2VzPXQsdGhpcy5hZGphY2VudD1lLHRoaXMuYm91bmRhcnk9cix0aGlzLmxhc3RWaXNpdGVkPS0xfWZ1bmN0aW9uIG8odCxlLHIpe3RoaXMudmVydGljZXM9dCx0aGlzLmNlbGw9ZSx0aGlzLmluZGV4PXJ9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBhKHQudmVydGljZXMsZS52ZXJ0aWNlcyl9aS5wcm90b3R5cGUuZmxpcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMudmVydGljZXNbMF07dGhpcy52ZXJ0aWNlc1swXT10aGlzLnZlcnRpY2VzWzFdLHRoaXMudmVydGljZXNbMV09dDt2YXIgZT10aGlzLmFkamFjZW50WzBdO3RoaXMuYWRqYWNlbnRbMF09dGhpcy5hZGphY2VudFsxXSx0aGlzLmFkamFjZW50WzFdPWV9O3ZhciBsPVtdO2Z1bmN0aW9uIGModCxlLHIpe3RoaXMuZGltZW5zaW9uPXQsdGhpcy52ZXJ0aWNlcz1lLHRoaXMuc2ltcGxpY2VzPXIsdGhpcy5pbnRlcmlvcj1yLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5ib3VuZGFyeX0pLHRoaXMudHVwbGU9bmV3IEFycmF5KHQrMSk7Zm9yKHZhciBhPTA7YTw9dDsrK2EpdGhpcy50dXBsZVthXT10aGlzLnZlcnRpY2VzW2FdO3ZhciBpPWxbdF07aXx8KGk9bFt0XT1mdW5jdGlvbih0KXtmb3IodmFyIGU9WyJmdW5jdGlvbiBvcmllbnQoKXt2YXIgdHVwbGU9dGhpcy50dXBsZTtyZXR1cm4gdGVzdCgiXSxyPTA7cjw9dDsrK3Ipcj4wJiZlLnB1c2goIiwiKSxlLnB1c2goInR1cGxlWyIsciwiXSIpO2UucHVzaCgiKX1yZXR1cm4gb3JpZW50Iik7dmFyIGE9bmV3IEZ1bmN0aW9uKCJ0ZXN0IixlLmpvaW4oIiIpKSxpPW5bdCsxXTtyZXR1cm4gaXx8KGk9biksYShpKX0odCkpLHRoaXMub3JpZW50PWl9dmFyIHU9Yy5wcm90b3R5cGU7dS5oYW5kbGVCb3VuZGFyeURlZ2VuZXJhY3k9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRpbWVuc2lvbixuPXRoaXMudmVydGljZXMubGVuZ3RoLTEsYT10aGlzLnR1cGxlLGk9dGhpcy52ZXJ0aWNlcyxvPVt0XTtmb3IodC5sYXN0VmlzaXRlZD0tbjtvLmxlbmd0aD4wOyl7KHQ9by5wb3AoKSkudmVydGljZXM7Zm9yKHZhciBzPXQuYWRqYWNlbnQsbD0wO2w8PXI7KytsKXt2YXIgYz1zW2xdO2lmKGMuYm91bmRhcnkmJiEoYy5sYXN0VmlzaXRlZDw9LW4pKXtmb3IodmFyIHU9Yy52ZXJ0aWNlcyxoPTA7aDw9cjsrK2gpe3ZhciBmPXVbaF07YVtoXT1mPDA/ZTppW2ZdfXZhciBwPXRoaXMub3JpZW50KCk7aWYocD4wKXJldHVybiBjO2MubGFzdFZpc2l0ZWQ9LW4sMD09PXAmJm8ucHVzaChjKX19fXJldHVybiBudWxsfSx1LndhbGs9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLG49dGhpcy5kaW1lbnNpb24sYT10aGlzLnZlcnRpY2VzLGk9dGhpcy50dXBsZSxvPWU/dGhpcy5pbnRlcmlvci5sZW5ndGgqTWF0aC5yYW5kb20oKXwwOnRoaXMuaW50ZXJpb3IubGVuZ3RoLTEscz10aGlzLmludGVyaW9yW29dO3Q6Zm9yKDshcy5ib3VuZGFyeTspe2Zvcih2YXIgbD1zLnZlcnRpY2VzLGM9cy5hZGphY2VudCx1PTA7dTw9bjsrK3UpaVt1XT1hW2xbdV1dO3MubGFzdFZpc2l0ZWQ9cjtmb3IodT0wO3U8PW47Kyt1KXt2YXIgaD1jW3VdO2lmKCEoaC5sYXN0VmlzaXRlZD49cikpe3ZhciBmPWlbdV07aVt1XT10O3ZhciBwPXRoaXMub3JpZW50KCk7aWYoaVt1XT1mLHA8MCl7cz1oO2NvbnRpbnVlIHR9aC5ib3VuZGFyeT9oLmxhc3RWaXNpdGVkPS1yOmgubGFzdFZpc2l0ZWQ9cn19cmV0dXJufXJldHVybiBzfSx1LmFkZFBlYWtzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMSxuPXRoaXMuZGltZW5zaW9uLGE9dGhpcy52ZXJ0aWNlcyxsPXRoaXMudHVwbGUsYz10aGlzLmludGVyaW9yLHU9dGhpcy5zaW1wbGljZXMsaD1bZV07ZS5sYXN0VmlzaXRlZD1yLGUudmVydGljZXNbZS52ZXJ0aWNlcy5pbmRleE9mKC0xKV09cixlLmJvdW5kYXJ5PSExLGMucHVzaChlKTtmb3IodmFyIGY9W107aC5sZW5ndGg+MDspe3ZhciBwPShlPWgucG9wKCkpLnZlcnRpY2VzLGQ9ZS5hZGphY2VudCxnPXAuaW5kZXhPZihyKTtpZighKGc8MCkpZm9yKHZhciB2PTA7djw9bjsrK3YpaWYodiE9PWcpe3ZhciBtPWRbdl07aWYobS5ib3VuZGFyeSYmIShtLmxhc3RWaXNpdGVkPj1yKSl7dmFyIHk9bS52ZXJ0aWNlcztpZihtLmxhc3RWaXNpdGVkIT09LXIpe2Zvcih2YXIgeD0wLGI9MDtiPD1uOysrYil5W2JdPDA/KHg9YixsW2JdPXQpOmxbYl09YVt5W2JdXTtpZih0aGlzLm9yaWVudCgpPjApe3lbeF09cixtLmJvdW5kYXJ5PSExLGMucHVzaChtKSxoLnB1c2gobSksbS5sYXN0VmlzaXRlZD1yO2NvbnRpbnVlfW0ubGFzdFZpc2l0ZWQ9LXJ9dmFyIF89bS5hZGphY2VudCx3PXAuc2xpY2UoKSxrPWQuc2xpY2UoKSxUPW5ldyBpKHcsaywhMCk7dS5wdXNoKFQpO3ZhciBNPV8uaW5kZXhPZihlKTtpZighKE08MCkpe19bTV09VCxrW2ddPW0sd1t2XT0tMSxrW3ZdPWUsZFt2XT1ULFQuZmxpcCgpO2ZvcihiPTA7Yjw9bjsrK2Ipe3ZhciBBPXdbYl07aWYoIShBPDB8fEE9PT1yKSl7Zm9yKHZhciBTPW5ldyBBcnJheShuLTEpLEU9MCxMPTA7TDw9bjsrK0wpe3ZhciBDPXdbTF07QzwwfHxMPT09Ynx8KFNbRSsrXT1DKX1mLnB1c2gobmV3IG8oUyxULGIpKX19fX19fWYuc29ydChzKTtmb3Iodj0wO3YrMTxmLmxlbmd0aDt2Kz0yKXt2YXIgUD1mW3ZdLE89Zlt2KzFdLHo9UC5pbmRleCxJPU8uaW5kZXg7ejwwfHxJPDB8fChQLmNlbGwuYWRqYWNlbnRbUC5pbmRleF09Ty5jZWxsLE8uY2VsbC5hZGphY2VudFtPLmluZGV4XT1QLmNlbGwpfX0sdS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzO3IucHVzaCh0KTt2YXIgbj10aGlzLndhbGsodCxlKTtpZihuKXtmb3IodmFyIGE9dGhpcy5kaW1lbnNpb24saT10aGlzLnR1cGxlLG89MDtvPD1hOysrbyl7dmFyIHM9bi52ZXJ0aWNlc1tvXTtpW29dPXM8MD90OnJbc119dmFyIGw9dGhpcy5vcmllbnQoaSk7bDwwfHwoMCE9PWx8fChuPXRoaXMuaGFuZGxlQm91bmRhcnlEZWdlbmVyYWN5KG4sdCkpKSYmdGhpcy5hZGRQZWFrcyh0LG4pfX0sdS5ib3VuZGFyeT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmRpbWVuc2lvbixlPVtdLHI9dGhpcy5zaW1wbGljZXMsbj1yLmxlbmd0aCxhPTA7YTxuOysrYSl7dmFyIGk9clthXTtpZihpLmJvdW5kYXJ5KXtmb3IodmFyIG89bmV3IEFycmF5KHQpLHM9aS52ZXJ0aWNlcyxsPTAsYz0wLHU9MDt1PD10OysrdSlzW3VdPj0wP29bbCsrXT1zW3VdOmM9MSZ1O2lmKGM9PT0oMSZ0KSl7dmFyIGg9b1swXTtvWzBdPW9bMV0sb1sxXT1ofWUucHVzaChvKX19cmV0dXJuIGV9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTA5LCJzaW1wbGljaWFsLWNvbXBsZXgiOjUxOX1dLDQxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGE9MCxpPTE7ZnVuY3Rpb24gbyh0LGUscixuLGEpe3RoaXMubWlkPXQsdGhpcy5sZWZ0PWUsdGhpcy5yaWdodD1yLHRoaXMubGVmdFBvaW50cz1uLHRoaXMucmlnaHRQb2ludHM9YSx0aGlzLmNvdW50PShlP2UuY291bnQ6MCkrKHI/ci5jb3VudDowKStuLmxlbmd0aH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXR8fDA9PT10Lmxlbmd0aClyZXR1cm4gbmV3IHgobnVsbCk7cmV0dXJuIG5ldyB4KHkodCkpfTt2YXIgcz1vLnByb3RvdHlwZTtmdW5jdGlvbiBsKHQsZSl7dC5taWQ9ZS5taWQsdC5sZWZ0PWUubGVmdCx0LnJpZ2h0PWUucmlnaHQsdC5sZWZ0UG9pbnRzPWUubGVmdFBvaW50cyx0LnJpZ2h0UG9pbnRzPWUucmlnaHRQb2ludHMsdC5jb3VudD1lLmNvdW50fWZ1bmN0aW9uIGModCxlKXt2YXIgcj15KGUpO3QubWlkPXIubWlkLHQubGVmdD1yLmxlZnQsdC5yaWdodD1yLnJpZ2h0LHQubGVmdFBvaW50cz1yLmxlZnRQb2ludHMsdC5yaWdodFBvaW50cz1yLnJpZ2h0UG9pbnRzLHQuY291bnQ9ci5jb3VudH1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9dC5pbnRlcnZhbHMoW10pO3IucHVzaChlKSxjKHQscil9ZnVuY3Rpb24gaCh0LGUpe3ZhciByPXQuaW50ZXJ2YWxzKFtdKSxuPXIuaW5kZXhPZihlKTtyZXR1cm4gbjwwP2E6KHIuc3BsaWNlKG4sMSksYyh0LHIpLGkpfWZ1bmN0aW9uIGYodCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGgmJnRbbl1bMF08PWU7KytuKXt2YXIgYT1yKHRbbl0pO2lmKGEpcmV0dXJuIGF9fWZ1bmN0aW9uIHAodCxlLHIpe2Zvcih2YXIgbj10Lmxlbmd0aC0xO24+PTAmJnRbbl1bMV0+PWU7LS1uKXt2YXIgYT1yKHRbbl0pO2lmKGEpcmV0dXJuIGF9fWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49ZSh0W3JdKTtpZihuKXJldHVybiBufX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIHQtZX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9dFswXS1lWzBdO3JldHVybiByfHx0WzFdLWVbMV19ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXRbMV0tZVsxXTtyZXR1cm4gcnx8dFswXS1lWzBdfWZ1bmN0aW9uIHkodCl7aWYoMD09PXQubGVuZ3RoKXJldHVybiBudWxsO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKHRbcl1bMF0sdFtyXVsxXSk7ZS5zb3J0KGcpO3ZhciBuPWVbZS5sZW5ndGg+PjFdLGE9W10saT1bXSxzPVtdO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBsPXRbcl07bFsxXTxuP2EucHVzaChsKTpuPGxbMF0/aS5wdXNoKGwpOnMucHVzaChsKX12YXIgYz1zLHU9cy5zbGljZSgpO3JldHVybiBjLnNvcnQodiksdS5zb3J0KG0pLG5ldyBvKG4seShhKSx5KGkpLGMsdSl9ZnVuY3Rpb24geCh0KXt0aGlzLnJvb3Q9dH1zLmludGVydmFscz1mdW5jdGlvbih0KXtyZXR1cm4gdC5wdXNoLmFwcGx5KHQsdGhpcy5sZWZ0UG9pbnRzKSx0aGlzLmxlZnQmJnRoaXMubGVmdC5pbnRlcnZhbHModCksdGhpcy5yaWdodCYmdGhpcy5yaWdodC5pbnRlcnZhbHModCksdH0scy5pbnNlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb3VudC10aGlzLmxlZnRQb2ludHMubGVuZ3RoO2lmKHRoaXMuY291bnQrPTEsdFsxXTx0aGlzLm1pZCl0aGlzLmxlZnQ/NCoodGhpcy5sZWZ0LmNvdW50KzEpPjMqKGUrMSk/dSh0aGlzLHQpOnRoaXMubGVmdC5pbnNlcnQodCk6dGhpcy5sZWZ0PXkoW3RdKTtlbHNlIGlmKHRbMF0+dGhpcy5taWQpdGhpcy5yaWdodD80Kih0aGlzLnJpZ2h0LmNvdW50KzEpPjMqKGUrMSk/dSh0aGlzLHQpOnRoaXMucmlnaHQuaW5zZXJ0KHQpOnRoaXMucmlnaHQ9eShbdF0pO2Vsc2V7dmFyIHI9bi5nZSh0aGlzLmxlZnRQb2ludHMsdCx2KSxhPW4uZ2UodGhpcy5yaWdodFBvaW50cyx0LG0pO3RoaXMubGVmdFBvaW50cy5zcGxpY2UociwwLHQpLHRoaXMucmlnaHRQb2ludHMuc3BsaWNlKGEsMCx0KX19LHMucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY291bnQtdGhpcy5sZWZ0UG9pbnRzO2lmKHRbMV08dGhpcy5taWQpcmV0dXJuIHRoaXMubGVmdD80Kih0aGlzLnJpZ2h0P3RoaXMucmlnaHQuY291bnQ6MCk+MyooZS0xKT9oKHRoaXMsdCk6Mj09PShjPXRoaXMubGVmdC5yZW1vdmUodCkpPyh0aGlzLmxlZnQ9bnVsbCx0aGlzLmNvdW50LT0xLGkpOihjPT09aSYmKHRoaXMuY291bnQtPTEpLGMpOmE7aWYodFswXT50aGlzLm1pZClyZXR1cm4gdGhpcy5yaWdodD80Kih0aGlzLmxlZnQ/dGhpcy5sZWZ0LmNvdW50OjApPjMqKGUtMSk/aCh0aGlzLHQpOjI9PT0oYz10aGlzLnJpZ2h0LnJlbW92ZSh0KSk/KHRoaXMucmlnaHQ9bnVsbCx0aGlzLmNvdW50LT0xLGkpOihjPT09aSYmKHRoaXMuY291bnQtPTEpLGMpOmE7aWYoMT09PXRoaXMuY291bnQpcmV0dXJuIHRoaXMubGVmdFBvaW50c1swXT09PXQ/MjphO2lmKDE9PT10aGlzLmxlZnRQb2ludHMubGVuZ3RoJiZ0aGlzLmxlZnRQb2ludHNbMF09PT10KXtpZih0aGlzLmxlZnQmJnRoaXMucmlnaHQpe2Zvcih2YXIgcj10aGlzLG89dGhpcy5sZWZ0O28ucmlnaHQ7KXI9byxvPW8ucmlnaHQ7aWYocj09PXRoaXMpby5yaWdodD10aGlzLnJpZ2h0O2Vsc2V7dmFyIHM9dGhpcy5sZWZ0LGM9dGhpcy5yaWdodDtyLmNvdW50LT1vLmNvdW50LHIucmlnaHQ9by5sZWZ0LG8ubGVmdD1zLG8ucmlnaHQ9Y31sKHRoaXMsbyksdGhpcy5jb3VudD0odGhpcy5sZWZ0P3RoaXMubGVmdC5jb3VudDowKSsodGhpcy5yaWdodD90aGlzLnJpZ2h0LmNvdW50OjApK3RoaXMubGVmdFBvaW50cy5sZW5ndGh9ZWxzZSB0aGlzLmxlZnQ/bCh0aGlzLHRoaXMubGVmdCk6bCh0aGlzLHRoaXMucmlnaHQpO3JldHVybiBpfWZvcihzPW4uZ2UodGhpcy5sZWZ0UG9pbnRzLHQsdik7czx0aGlzLmxlZnRQb2ludHMubGVuZ3RoJiZ0aGlzLmxlZnRQb2ludHNbc11bMF09PT10WzBdOysrcylpZih0aGlzLmxlZnRQb2ludHNbc109PT10KXt0aGlzLmNvdW50LT0xLHRoaXMubGVmdFBvaW50cy5zcGxpY2UocywxKTtmb3IoYz1uLmdlKHRoaXMucmlnaHRQb2ludHMsdCxtKTtjPHRoaXMucmlnaHRQb2ludHMubGVuZ3RoJiZ0aGlzLnJpZ2h0UG9pbnRzW2NdWzFdPT09dFsxXTsrK2MpaWYodGhpcy5yaWdodFBvaW50c1tjXT09PXQpcmV0dXJuIHRoaXMucmlnaHRQb2ludHMuc3BsaWNlKGMsMSksaX1yZXR1cm4gYX0scy5xdWVyeVBvaW50PWZ1bmN0aW9uKHQsZSl7aWYodDx0aGlzLm1pZCl7aWYodGhpcy5sZWZ0KWlmKHI9dGhpcy5sZWZ0LnF1ZXJ5UG9pbnQodCxlKSlyZXR1cm4gcjtyZXR1cm4gZih0aGlzLmxlZnRQb2ludHMsdCxlKX1pZih0PnRoaXMubWlkKXt2YXIgcjtpZih0aGlzLnJpZ2h0KWlmKHI9dGhpcy5yaWdodC5xdWVyeVBvaW50KHQsZSkpcmV0dXJuIHI7cmV0dXJuIHAodGhpcy5yaWdodFBvaW50cyx0LGUpfXJldHVybiBkKHRoaXMubGVmdFBvaW50cyxlKX0scy5xdWVyeUludGVydmFsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtpZih0PHRoaXMubWlkJiZ0aGlzLmxlZnQmJihuPXRoaXMubGVmdC5xdWVyeUludGVydmFsKHQsZSxyKSkpcmV0dXJuIG47aWYoZT50aGlzLm1pZCYmdGhpcy5yaWdodCYmKG49dGhpcy5yaWdodC5xdWVyeUludGVydmFsKHQsZSxyKSkpcmV0dXJuIG47cmV0dXJuIGU8dGhpcy5taWQ/Zih0aGlzLmxlZnRQb2ludHMsZSxyKTp0PnRoaXMubWlkP3AodGhpcy5yaWdodFBvaW50cyx0LHIpOmQodGhpcy5sZWZ0UG9pbnRzLHIpfTt2YXIgYj14LnByb3RvdHlwZTtiLmluc2VydD1mdW5jdGlvbih0KXt0aGlzLnJvb3Q/dGhpcy5yb290Lmluc2VydCh0KTp0aGlzLnJvb3Q9bmV3IG8odFswXSxudWxsLG51bGwsW3RdLFt0XSl9LGIucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKHRoaXMucm9vdCl7dmFyIGU9dGhpcy5yb290LnJlbW92ZSh0KTtyZXR1cm4gMj09PWUmJih0aGlzLnJvb3Q9bnVsbCksZSE9PWF9cmV0dXJuITF9LGIucXVlcnlQb2ludD1mdW5jdGlvbih0LGUpe2lmKHRoaXMucm9vdClyZXR1cm4gdGhpcy5yb290LnF1ZXJ5UG9pbnQodCxlKX0sYi5xdWVyeUludGVydmFsPWZ1bmN0aW9uKHQsZSxyKXtpZih0PD1lJiZ0aGlzLnJvb3QpcmV0dXJuIHRoaXMucm9vdC5xdWVyeUludGVydmFsKHQsZSxyKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIsImNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuY291bnQ6MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiaW50ZXJ2YWxzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuaW50ZXJ2YWxzKFtdKTpbXX19KX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6OTN9XSw0MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHxuZXcgQXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWVbdFtyXV09cjtyZXR1cm4gZX19LHt9XSw0MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpZVtyXT1yO3JldHVybiBlfX0se31dLDQxOTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz0hMH0se31dLDQyMDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuISF0LmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJihuKHQpfHxmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdC5yZWFkRmxvYXRMRSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuc2xpY2UmJm4odC5zbGljZSgwLDApKX0odCl8fCEhdC5faXNCdWZmZXIpfX0se31dLDQyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KXx8L1RyaWRlbnRcLy8udGVzdChuYXZpZ2F0b3IuYXBwVmVyc2lvbikpfSx7fV0sNDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1pLGUuZXhwb3J0cy5pc01vYmlsZT1pLGUuZXhwb3J0cy5kZWZhdWx0PWk7dmFyIG49LyhhbmRyb2lkfGJiXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzWzQ2XTB8c3ltYmlhbnx0cmVvfHVwXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyAoY2V8cGhvbmUpfHhkYXx4aWluby9pLGE9LyhhbmRyb2lkfGJiXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzWzQ2XTB8c3ltYmlhbnx0cmVvfHVwXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyAoY2V8cGhvbmUpfHhkYXx4aWlub3xhbmRyb2lkfGlwYWR8cGxheWJvb2t8c2lsay9pO2Z1bmN0aW9uIGkodCl7dHx8KHQ9e30pO3ZhciBlPXQudWE7cmV0dXJuIGV8fCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwoZT1uYXZpZ2F0b3IudXNlckFnZW50KSxlJiZlLmhlYWRlcnMmJiJzdHJpbmciPT10eXBlb2YgZS5oZWFkZXJzWyJ1c2VyLWFnZW50Il0mJihlPWUuaGVhZGVyc1sidXNlci1hZ2VudCJdKSwic3RyaW5nIj09dHlwZW9mIGUmJih0LnRhYmxldD9hLnRlc3QoZSk6bi50ZXN0KGUpKX19LHt9XSw0MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsIT09dCYmKCJvYmplY3QiPT09ZXx8ImZ1bmN0aW9uIj09PWUpfX0se31dLDQyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PW4uY2FsbCh0KSYmKG51bGw9PT0oZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpfHxlPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHt9KSl9fSx7fV0sNDI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZigoKGU9dC5jaGFyQ29kZUF0KG4pKTw5fHxlPjEzKSYmMzIhPT1lJiYxMzMhPT1lJiYxNjAhPT1lJiY1NzYwIT09ZSYmNjE1OCE9PWUmJihlPDgxOTJ8fGU+ODIwNSkmJjgyMzIhPT1lJiY4MjMzIT09ZSYmODIzOSE9PWUmJjgyODchPT1lJiY4Mjg4IT09ZSYmMTIyODghPT1lJiY2NTI3OSE9PWUpcmV0dXJuITE7cmV0dXJuITB9fSx7fV0sNDI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJih0PXQudHJpbSgpLCEhKC9eW216bGh2Y3NxdGFdXHMqWy0rLjAtOV1bXm1saHZ6Y3NxdGFdKy9pLnRlc3QodCkmJi9bXGR6XSQvaS50ZXN0KHQpJiZ0Lmxlbmd0aD40KSl9fSx7fV0sNDI3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCooMS1yKStlKnJ9fSx7fV0sNDI4OltmdW5jdGlvbih0LGUscil7dmFyIG4sYTtuPXRoaXMsYT1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdCxlLHI7ZnVuY3Rpb24gbihuLGEpe2lmKHQpaWYoZSl7dmFyIGk9InZhciBzaGFyZWRDaHVuayA9IHt9OyAoIit0KyIpKHNoYXJlZENodW5rKTsgKCIrZSsiKShzaGFyZWRDaHVuayk7IixvPXt9O3QobyksKHI9YShvKSkud29ya2VyVXJsPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtpXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pKX1lbHNlIGU9YTtlbHNlIHQ9YX1yZXR1cm4gbigwLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gdChlPXtleHBvcnRzOnt9fSxlLmV4cG9ydHMpLGUuZXhwb3J0c312YXIgcj1uO2Z1bmN0aW9uIG4odCxlLHIsbil7dGhpcy5jeD0zKnQsdGhpcy5ieD0zKihyLXQpLXRoaXMuY3gsdGhpcy5heD0xLXRoaXMuY3gtdGhpcy5ieCx0aGlzLmN5PTMqZSx0aGlzLmJ5PTMqKG4tZSktdGhpcy5jeSx0aGlzLmF5PTEtdGhpcy5jeS10aGlzLmJ5LHRoaXMucDF4PXQsdGhpcy5wMXk9bix0aGlzLnAyeD1yLHRoaXMucDJ5PW59bi5wcm90b3R5cGUuc2FtcGxlQ3VydmVYPWZ1bmN0aW9uKHQpe3JldHVybigodGhpcy5heCp0K3RoaXMuYngpKnQrdGhpcy5jeCkqdH0sbi5wcm90b3R5cGUuc2FtcGxlQ3VydmVZPWZ1bmN0aW9uKHQpe3JldHVybigodGhpcy5heSp0K3RoaXMuYnkpKnQrdGhpcy5jeSkqdH0sbi5wcm90b3R5cGUuc2FtcGxlQ3VydmVEZXJpdmF0aXZlWD1mdW5jdGlvbih0KXtyZXR1cm4oMyp0aGlzLmF4KnQrMip0aGlzLmJ4KSp0K3RoaXMuY3h9LG4ucHJvdG90eXBlLnNvbHZlQ3VydmVYPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhLGksbztmb3Iodm9pZCAwPT09ZSYmKGU9MWUtNiksYT10LG89MDtvPDg7bysrKXtpZihpPXRoaXMuc2FtcGxlQ3VydmVYKGEpLXQsTWF0aC5hYnMoaSk8ZSlyZXR1cm4gYTt2YXIgcz10aGlzLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVgoYSk7aWYoTWF0aC5hYnMocyk8MWUtNilicmVhazthLT1pL3N9aWYoKGE9dCk8KHI9MCkpcmV0dXJuIHI7aWYoYT4obj0xKSlyZXR1cm4gbjtmb3IoO3I8bjspe2lmKGk9dGhpcy5zYW1wbGVDdXJ2ZVgoYSksTWF0aC5hYnMoaS10KTxlKXJldHVybiBhO3Q+aT9yPWE6bj1hLGE9LjUqKG4tcikrcn1yZXR1cm4gYX0sbi5wcm90b3R5cGUuc29sdmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zYW1wbGVDdXJ2ZVkodGhpcy5zb2x2ZUN1cnZlWCh0LGUpKX07dmFyIGE9aTtmdW5jdGlvbiBpKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9ZnVuY3Rpb24gbyh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKCFBcnJheS5pc0FycmF5KGUpfHx0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKCFvKHRbcl0sZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9aWYoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmbnVsbCE9PWUpe2lmKCJvYmplY3QiIT10eXBlb2YgZSlyZXR1cm4hMTtpZihPYmplY3Qua2V5cyh0KS5sZW5ndGghPT1PYmplY3Qua2V5cyhlKS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuIGluIHQpaWYoIW8odFtuXSxlW25dKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdD09PWV9ZnVuY3Rpb24gcyh0LGUsbixhKXt2YXIgaT1uZXcgcih0LGUsbixhKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkuc29sdmUodCl9fWkucHJvdG90eXBlPXtjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgaSh0aGlzLngsdGhpcy55KX0sYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2FkZCh0KX0sc3ViOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3N1Yih0KX0sbXVsdEJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbXVsdEJ5UG9pbnQodCl9LGRpdkJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2QnlQb2ludCh0KX0sbXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0KHQpfSxkaXY6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2KHQpfSxyb3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm90YXRlKHQpfSxyb3RhdGVBcm91bmQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3RhdGVBcm91bmQodCxlKX0sbWF0TXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tYXRNdWx0KHQpfSx1bml0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fdW5pdCgpfSxwZXJwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcGVycCgpfSxyb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdW5kKCl9LG1hZzpmdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55KX0sZXF1YWxzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLng9PT10LngmJnRoaXMueT09PXQueX0sZGlzdDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdFNxcih0KSl9LGRpc3RTcXI6ZnVuY3Rpb24odCl7dmFyIGU9dC54LXRoaXMueCxyPXQueS10aGlzLnk7cmV0dXJuIGUqZStyKnJ9LGFuZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguYXRhbjIodGhpcy55LHRoaXMueCl9LGFuZ2xlVG86ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYXRhbjIodGhpcy55LXQueSx0aGlzLngtdC54KX0sYW5nbGVXaXRoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFuZ2xlV2l0aFNlcCh0LngsdC55KX0sYW5nbGVXaXRoU2VwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYXRhbjIodGhpcy54KmUtdGhpcy55KnQsdGhpcy54KnQrdGhpcy55KmUpfSxfbWF0TXVsdDpmdW5jdGlvbih0KXt2YXIgZT10WzBdKnRoaXMueCt0WzFdKnRoaXMueSxyPXRbMl0qdGhpcy54K3RbM10qdGhpcy55O3JldHVybiB0aGlzLng9ZSx0aGlzLnk9cix0aGlzfSxfYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzfSxfc3ViOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzfSxfbXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfSxfZGl2OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngvPXQsdGhpcy55Lz10LHRoaXN9LF9tdWx0QnlQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpc30sX2RpdkJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9LF91bml0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpdih0aGlzLm1hZygpKSx0aGlzfSxfcGVycDpmdW5jdGlvbigpe3ZhciB0PXRoaXMueTtyZXR1cm4gdGhpcy55PXRoaXMueCx0aGlzLng9LXQsdGhpc30sX3JvdGF0ZTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmNvcyh0KSxyPU1hdGguc2luKHQpLG49ZSp0aGlzLngtcip0aGlzLnksYT1yKnRoaXMueCtlKnRoaXMueTtyZXR1cm4gdGhpcy54PW4sdGhpcy55PWEsdGhpc30sX3JvdGF0ZUFyb3VuZDpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksYT1lLngrcioodGhpcy54LWUueCktbioodGhpcy55LWUueSksaT1lLnkrbioodGhpcy54LWUueCkrcioodGhpcy55LWUueSk7cmV0dXJuIHRoaXMueD1hLHRoaXMueT1pLHRoaXN9LF9yb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc319LGkuY29udmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGk/dDpBcnJheS5pc0FycmF5KHQpP25ldyBpKHRbMF0sdFsxXSk6dH07dmFyIGw9cyguMjUsLjEsLjI1LDEpO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBNYXRoLm1pbihyLE1hdGgubWF4KGUsdCkpfWZ1bmN0aW9uIHUodCxlLHIpe3ZhciBuPXItZSxhPSgodC1lKSVuK24pJW4rZTtyZXR1cm4gYT09PWU/cjphfWZ1bmN0aW9uIGgodCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aC0xO3ItLSA+MDspZVtyXT1hcmd1bWVudHNbcisxXTtmb3IodmFyIG49MCxhPWU7bjxhLmxlbmd0aDtuKz0xKXt2YXIgaT1hW25dO2Zvcih2YXIgbyBpbiBpKXRbb109aVtvXX1yZXR1cm4gdH12YXIgZj0xO2Z1bmN0aW9uIHAoKXtyZXR1cm4gZisrfWZ1bmN0aW9uIGQoKXtyZXR1cm4gZnVuY3Rpb24gdChlKXtyZXR1cm4gZT8oZV4xNipNYXRoLnJhbmRvbSgpPj5lLzQpLnRvU3RyaW5nKDE2KTooWzFlN10rLVsxZTNdKy00ZTMrLThlMystMWUxMSkucmVwbGFjZSgvWzAxOF0vZyx0KX0oKX1mdW5jdGlvbiBnKHQpe3JldHVybiEhdCYmL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bNF1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn0kL2kudGVzdCh0KX1mdW5jdGlvbiB2KHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF0mJihlW3RdPWVbdF0uYmluZChlKSl9KX1mdW5jdGlvbiBtKHQsZSl7cmV0dXJuLTEhPT10LmluZGV4T2YoZSx0Lmxlbmd0aC1lLmxlbmd0aCl9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49e307Zm9yKHZhciBhIGluIHQpblthXT1lLmNhbGwocnx8dGhpcyx0W2FdLGEsdCk7cmV0dXJuIG59ZnVuY3Rpb24geCh0LGUscil7dmFyIG49e307Zm9yKHZhciBhIGluIHQpZS5jYWxsKHJ8fHRoaXMsdFthXSxhLHQpJiYoblthXT10W2FdKTtyZXR1cm4gbn1mdW5jdGlvbiBiKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKGIpOiJvYmplY3QiPT10eXBlb2YgdCYmdD95KHQsYik6dH12YXIgXz17fTtmdW5jdGlvbiB3KHQpe19bdF18fCgidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2Fybih0KSxfW3RdPSEwKX1mdW5jdGlvbiBrKHQsZSxyKXtyZXR1cm4oci55LXQueSkqKGUueC10LngpPihlLnktdC55KSooci54LXQueCl9ZnVuY3Rpb24gVCh0KXtmb3IodmFyIGU9MCxyPTAsbj10Lmxlbmd0aCxhPW4tMSxpPXZvaWQgMCxvPXZvaWQgMDtyPG47YT1yKyspaT10W3JdLGUrPSgobz10W2FdKS54LWkueCkqKGkueStvLnkpO3JldHVybiBlfWZ1bmN0aW9uIE0odCl7dmFyIGU9e307aWYodC5yZXBsYWNlKC8oPzpefCg/OlxzKlwsXHMqKSkoW15ceDAwLVx4MjBcKFwpPD5AXCw7XDpcXCJcL1xbXF1cP1w9XHtcfVx4N0ZdKykoPzpcPSg/OihbXlx4MDAtXHgyMFwoXCk8PkBcLDtcOlxcIlwvXFtcXVw/XD1ce1x9XHg3Rl0rKXwoPzpcIigoPzpbXiJcXF18XFwuKSopXCIpKSk/L2csZnVuY3Rpb24odCxyLG4sYSl7dmFyIGk9bnx8YTtyZXR1cm4gZVtyXT0haXx8aS50b0xvd2VyQ2FzZSgpLCIifSksZVsibWF4LWFnZSJdKXt2YXIgcj1wYXJzZUludChlWyJtYXgtYWdlIl0sMTApO2lzTmFOKHIpP2RlbGV0ZSBlWyJtYXgtYWdlIl06ZVsibWF4LWFnZSJdPXJ9cmV0dXJuIGV9ZnVuY3Rpb24gQSh0KXt0cnl7dmFyIGU9c2VsZlt0XTtyZXR1cm4gZS5zZXRJdGVtKCJfbWFwYm94X3Rlc3RfIiwxKSxlLnJlbW92ZUl0ZW0oIl9tYXBib3hfdGVzdF8iKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19dmFyIFMsRSxMLEMsUD1zZWxmLnBlcmZvcm1hbmNlJiZzZWxmLnBlcmZvcm1hbmNlLm5vdz9zZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHNlbGYucGVyZm9ybWFuY2UpOkRhdGUubm93LmJpbmQoRGF0ZSksTz1zZWxmLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8c2VsZi5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHNlbGYud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxzZWxmLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lLHo9c2VsZi5jYW5jZWxBbmltYXRpb25GcmFtZXx8c2VsZi5tb3pDYW5jZWxBbmltYXRpb25GcmFtZXx8c2VsZi53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZXx8c2VsZi5tc0NhbmNlbEFuaW1hdGlvbkZyYW1lLEk9e25vdzpQLGZyYW1lOmZ1bmN0aW9uKHQpe3ZhciBlPU8odCk7cmV0dXJue2NhbmNlbDpmdW5jdGlvbigpe3JldHVybiB6KGUpfX19LGdldEltYWdlRGF0YTpmdW5jdGlvbih0KXt2YXIgZT1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHI9ZS5nZXRDb250ZXh0KCIyZCIpO2lmKCFyKXRocm93IG5ldyBFcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBjYW52YXMgMmQgY29udGV4dCIpO3JldHVybiBlLndpZHRoPXQud2lkdGgsZS5oZWlnaHQ9dC5oZWlnaHQsci5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCksci5nZXRJbWFnZURhdGEoMCwwLHQud2lkdGgsdC5oZWlnaHQpfSxyZXNvbHZlVVJMOmZ1bmN0aW9uKHQpe3JldHVybiBTfHwoUz1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSksUy5ocmVmPXQsUy5ocmVmfSxoYXJkd2FyZUNvbmN1cnJlbmN5OnNlbGYubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3l8fDQsZ2V0IGRldmljZVBpeGVsUmF0aW8oKXtyZXR1cm4gc2VsZi5kZXZpY2VQaXhlbFJhdGlvfSxnZXQgcHJlZmVyc1JlZHVjZWRNb3Rpb24oKXtyZXR1cm4hIXNlbGYubWF0Y2hNZWRpYSYmKG51bGw9PUUmJihFPXNlbGYubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKSksRS5tYXRjaGVzKX19LEQ9e0FQSV9VUkw6Imh0dHBzOi8vYXBpLm1hcGJveC5jb20iLGdldCBFVkVOVFNfVVJMKCl7cmV0dXJuIHRoaXMuQVBJX1VSTD8wPT09dGhpcy5BUElfVVJMLmluZGV4T2YoImh0dHBzOi8vYXBpLm1hcGJveC5jbiIpPyJodHRwczovL2V2ZW50cy5tYXBib3guY24vZXZlbnRzL3YyIjowPT09dGhpcy5BUElfVVJMLmluZGV4T2YoImh0dHBzOi8vYXBpLm1hcGJveC5jb20iKT8iaHR0cHM6Ly9ldmVudHMubWFwYm94LmNvbS9ldmVudHMvdjIiOm51bGw6bnVsbH0sRkVFREJBQ0tfVVJMOiJodHRwczovL2FwcHMubWFwYm94LmNvbS9mZWVkYmFjayIsUkVRVUlSRV9BQ0NFU1NfVE9LRU46ITAsQUNDRVNTX1RPS0VOOm51bGwsTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTOjE2fSxSPXtzdXBwb3J0ZWQ6ITEsdGVzdFN1cHBvcnQ6ZnVuY3Rpb24odCl7IUYmJkMmJihCP04odCk6TD10KX19LEY9ITEsQj0hMTtmdW5jdGlvbiBOKHQpe3ZhciBlPXQuY3JlYXRlVGV4dHVyZSgpO3QuYmluZFRleHR1cmUodC5URVhUVVJFXzJELGUpO3RyeXtpZih0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsdC5SR0JBLHQuUkdCQSx0LlVOU0lHTkVEX0JZVEUsQyksdC5pc0NvbnRleHRMb3N0KCkpcmV0dXJuO1Iuc3VwcG9ydGVkPSEwfWNhdGNoKHQpe310LmRlbGV0ZVRleHR1cmUoZSksRj0hMH1zZWxmLmRvY3VtZW50JiYoKEM9c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKSkub25sb2FkPWZ1bmN0aW9uKCl7TCYmTihMKSxMPW51bGwsQj0hMH0sQy5vbmVycm9yPWZ1bmN0aW9uKCl7Rj0hMCxMPW51bGx9LEMuc3JjPSJkYXRhOmltYWdlL3dlYnA7YmFzZTY0LFVrbEdSaDRBQUFCWFJVSlFWbEE0VEJFQUFBQXZBUUFBQUFmUS8vNzN2LytCaU9oL0FBQT0iKTt2YXIgaj0iMDEiLFY9ZnVuY3Rpb24odCxlKXt0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm49dCx0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbj1lLHRoaXMuX2NyZWF0ZVNrdVRva2VuKCl9O2Z1bmN0aW9uIFUodCl7cmV0dXJuIDA9PT10LmluZGV4T2YoIm1hcGJveDoiKX1WLnByb3RvdHlwZS5fY3JlYXRlU2t1VG9rZW49ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2Zvcih2YXIgdD0iIixlPTA7ZTwxMDtlKyspdCs9IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIltNYXRoLmZsb29yKDYyKk1hdGgucmFuZG9tKCkpXTtyZXR1cm57dG9rZW46WyIxIixqLHRdLmpvaW4oIiIpLHRva2VuRXhwaXJlc0F0OkRhdGUubm93KCkrNDMyZTV9fSgpO3RoaXMuX3NrdVRva2VuPXQudG9rZW4sdGhpcy5fc2t1VG9rZW5FeHBpcmVzQXQ9dC50b2tlbkV4cGlyZXNBdH0sVi5wcm90b3R5cGUuX2lzU2t1VG9rZW5FeHBpcmVkPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCk+dGhpcy5fc2t1VG9rZW5FeHBpcmVzQXR9LFYucHJvdG90eXBlLnRyYW5zZm9ybVJlcXVlc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtUmVxdWVzdEZuJiZ0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4odCxlKXx8e3VybDp0fX0sVi5wcm90b3R5cGUubm9ybWFsaXplU3R5bGVVUkw9ZnVuY3Rpb24odCxlKXtpZighVSh0KSlyZXR1cm4gdDt2YXIgcj1ZKHQpO3JldHVybiByLnBhdGg9Ii9zdHlsZXMvdjEiK3IucGF0aCx0aGlzLl9tYWtlQVBJVVJMKHIsdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW58fGUpfSxWLnByb3RvdHlwZS5ub3JtYWxpemVHbHlwaHNVUkw9ZnVuY3Rpb24odCxlKXtpZighVSh0KSlyZXR1cm4gdDt2YXIgcj1ZKHQpO3JldHVybiByLnBhdGg9Ii9mb250cy92MSIrci5wYXRoLHRoaXMuX21ha2VBUElVUkwocix0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbnx8ZSl9LFYucHJvdG90eXBlLm5vcm1hbGl6ZVNvdXJjZVVSTD1mdW5jdGlvbih0LGUpe2lmKCFVKHQpKXJldHVybiB0O3ZhciByPVkodCk7cmV0dXJuIHIucGF0aD0iL3Y0LyIrci5hdXRob3JpdHkrIi5qc29uIixyLnBhcmFtcy5wdXNoKCJzZWN1cmUiKSx0aGlzLl9tYWtlQVBJVVJMKHIsdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW58fGUpfSxWLnByb3RvdHlwZS5ub3JtYWxpemVTcHJpdGVVUkw9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9WSh0KTtyZXR1cm4gVSh0KT8oYS5wYXRoPSIvc3R5bGVzL3YxIithLnBhdGgrIi9zcHJpdGUiK2Urcix0aGlzLl9tYWtlQVBJVVJMKGEsdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW58fG4pKTooYS5wYXRoKz0iIitlK3IsVyhhKSl9LFYucHJvdG90eXBlLm5vcm1hbGl6ZVRpbGVVUkw9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX2lzU2t1VG9rZW5FeHBpcmVkKCkmJnRoaXMuX2NyZWF0ZVNrdVRva2VuKCksIWV8fCFVKGUpKXJldHVybiB0O3ZhciBuPVkodCksYT1JLmRldmljZVBpeGVsUmF0aW8+PTJ8fDUxMj09PXI/IkAyeCI6IiIsaT1SLnN1cHBvcnRlZD8iLndlYnAiOiIkMSI7cmV0dXJuIG4ucGF0aD1uLnBhdGgucmVwbGFjZSgvKFwuKHBuZ3xqcGcpXGQqKSg/PSQpLywiIithK2kpLG4ucGF0aD1uLnBhdGgucmVwbGFjZSgvXi4rXC92NFwvLywiLyIpLG4ucGF0aD0iL3Y0IituLnBhdGgsRC5SRVFVSVJFX0FDQ0VTU19UT0tFTiYmKEQuQUNDRVNTX1RPS0VOfHx0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbikmJnRoaXMuX3NrdVRva2VuJiZuLnBhcmFtcy5wdXNoKCJza3U9Iit0aGlzLl9za3VUb2tlbiksdGhpcy5fbWFrZUFQSVVSTChuLHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuKX0sVi5wcm90b3R5cGUuY2Fub25pY2FsaXplVGlsZVVSTD1mdW5jdGlvbih0KXt2YXIgZT1ZKHQpO2lmKCFlLnBhdGgubWF0Y2goLyheXC92NFwvKS8pfHwhZS5wYXRoLm1hdGNoKC9cLltcd10rJC8pKXJldHVybiB0O3ZhciByPSJtYXBib3g6Ly90aWxlcy8iO3IrPWUucGF0aC5yZXBsYWNlKCIvdjQvIiwiIik7dmFyIG49ZS5wYXJhbXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0Lm1hdGNoKC9eYWNjZXNzX3Rva2VuPS8pfSk7cmV0dXJuIG4ubGVuZ3RoJiYocis9Ij8iK24uam9pbigiJiIpKSxyfSxWLnByb3RvdHlwZS5jYW5vbmljYWxpemVUaWxlc2V0PWZ1bmN0aW9uKHQsZSl7aWYoIVUoZSkpcmV0dXJuIHQudGlsZXN8fFtdO2Zvcih2YXIgcj1bXSxuPTAsYT10LnRpbGVzO248YS5sZW5ndGg7bis9MSl7dmFyIGk9YVtuXSxvPXRoaXMuY2Fub25pY2FsaXplVGlsZVVSTChpKTtyLnB1c2gobyl9cmV0dXJuIHJ9LFYucHJvdG90eXBlLl9tYWtlQVBJVVJMPWZ1bmN0aW9uKHQsZSl7dmFyIHI9IlNlZSBodHRwczovL3d3dy5tYXBib3guY29tL2FwaS1kb2N1bWVudGF0aW9uLyNhY2Nlc3MtdG9rZW5zLWFuZC10b2tlbi1zY29wZXMiLG49WShELkFQSV9VUkwpO2lmKHQucHJvdG9jb2w9bi5wcm90b2NvbCx0LmF1dGhvcml0eT1uLmF1dGhvcml0eSwiLyIhPT1uLnBhdGgmJih0LnBhdGg9IiIrbi5wYXRoK3QucGF0aCksIUQuUkVRVUlSRV9BQ0NFU1NfVE9LRU4pcmV0dXJuIFcodCk7aWYoIShlPWV8fEQuQUNDRVNTX1RPS0VOKSl0aHJvdyBuZXcgRXJyb3IoIkFuIEFQSSBhY2Nlc3MgdG9rZW4gaXMgcmVxdWlyZWQgdG8gdXNlIE1hcGJveCBHTC4gIityKTtpZigicyI9PT1lWzBdKXRocm93IG5ldyBFcnJvcigiVXNlIGEgcHVibGljIGFjY2VzcyB0b2tlbiAocGsuKikgd2l0aCBNYXBib3ggR0wsIG5vdCBhIHNlY3JldCBhY2Nlc3MgdG9rZW4gKHNrLiopLiAiK3IpO3JldHVybiB0LnBhcmFtcz10LnBhcmFtcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuLTE9PT10LmluZGV4T2YoImFjY2Vzc190b2tlbiIpfSksdC5wYXJhbXMucHVzaCgiYWNjZXNzX3Rva2VuPSIrZSksVyh0KX07dmFyIHE9L14oKGh0dHBzPzopP1wvXC8pPyhbXlwvXStcLik/bWFwYm94XC5jKG58b20pKFwvfFw/fCQpL2k7ZnVuY3Rpb24gSCh0KXtyZXR1cm4gcS50ZXN0KHQpfXZhciBHPS9eKFx3Kyk6XC9cLyhbXlwvP10qKShcL1teP10rKT9cPz8oLispPy87ZnVuY3Rpb24gWSh0KXt2YXIgZT10Lm1hdGNoKEcpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHBhcnNlIFVSTCBvYmplY3QiKTtyZXR1cm57cHJvdG9jb2w6ZVsxXSxhdXRob3JpdHk6ZVsyXSxwYXRoOmVbM118fCIvIixwYXJhbXM6ZVs0XT9lWzRdLnNwbGl0KCImIik6W119fWZ1bmN0aW9uIFcodCl7dmFyIGU9dC5wYXJhbXMubGVuZ3RoPyI/Iit0LnBhcmFtcy5qb2luKCImIik6IiI7cmV0dXJuIHQucHJvdG9jb2wrIjovLyIrdC5hdXRob3JpdHkrdC5wYXRoK2V9ZnVuY3Rpb24gWCh0KXtpZighdClyZXR1cm4gbnVsbDt2YXIgZSxyPXQuc3BsaXQoIi4iKTtpZighcnx8MyE9PXIubGVuZ3RoKXJldHVybiBudWxsO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSgoZT1yWzFdLGRlY29kZVVSSUNvbXBvbmVudChzZWxmLmF0b2IoZSkuc3BsaXQoIiIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iJSIrKCIwMCIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfSkuam9pbigiIikpKSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fXZhciBaPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT10LHRoaXMuYW5vbklkPW51bGwsdGhpcy5ldmVudERhdGE9e30sdGhpcy5xdWV1ZT1bXSx0aGlzLnBlbmRpbmdSZXF1ZXN0PW51bGx9O1oucHJvdG90eXBlLmdldFN0b3JhZ2VLZXk9ZnVuY3Rpb24odCl7dmFyIGUscj1YKEQuQUNDRVNTX1RPS0VOKSxuPSIiO3JldHVybiByJiZyLnU/KGU9ci51LG49c2VsZi5idG9hKGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9nLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyKCIweCIrZSkpfSkpKTpuPUQuQUNDRVNTX1RPS0VOfHwiIix0PyJtYXBib3guZXZlbnREYXRhLiIrdCsiOiIrbjoibWFwYm94LmV2ZW50RGF0YToiK259LFoucHJvdG90eXBlLmZldGNoRXZlbnREYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9QSgibG9jYWxTdG9yYWdlIiksZT10aGlzLmdldFN0b3JhZ2VLZXkoKSxyPXRoaXMuZ2V0U3RvcmFnZUtleSgidXVpZCIpO2lmKHQpdHJ5e3ZhciBuPXNlbGYubG9jYWxTdG9yYWdlLmdldEl0ZW0oZSk7biYmKHRoaXMuZXZlbnREYXRhPUpTT04ucGFyc2UobikpO3ZhciBhPXNlbGYubG9jYWxTdG9yYWdlLmdldEl0ZW0ocik7YSYmKHRoaXMuYW5vbklkPWEpfWNhdGNoKHQpe3coIlVuYWJsZSB0byByZWFkIGZyb20gTG9jYWxTdG9yYWdlIil9fSxaLnByb3RvdHlwZS5zYXZlRXZlbnREYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9QSgibG9jYWxTdG9yYWdlIiksZT10aGlzLmdldFN0b3JhZ2VLZXkoKSxyPXRoaXMuZ2V0U3RvcmFnZUtleSgidXVpZCIpO2lmKHQpdHJ5e3NlbGYubG9jYWxTdG9yYWdlLnNldEl0ZW0ocix0aGlzLmFub25JZCksT2JqZWN0LmtleXModGhpcy5ldmVudERhdGEpLmxlbmd0aD49MSYmc2VsZi5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShlLEpTT04uc3RyaW5naWZ5KHRoaXMuZXZlbnREYXRhKSl9Y2F0Y2godCl7dygiVW5hYmxlIHRvIHdyaXRlIHRvIExvY2FsU3RvcmFnZSIpfX0sWi5wcm90b3R5cGUucHJvY2Vzc1JlcXVlc3RzPWZ1bmN0aW9uKHQpe30sWi5wcm90b3R5cGUucG9zdEV2ZW50PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXRoaXM7aWYoRC5FVkVOVFNfVVJMKXt2YXIgaT1ZKEQuRVZFTlRTX1VSTCk7aS5wYXJhbXMucHVzaCgiYWNjZXNzX3Rva2VuPSIrKG58fEQuQUNDRVNTX1RPS0VOfHwiIikpO3ZhciBvPXtldmVudDp0aGlzLnR5cGUsY3JlYXRlZDpuZXcgRGF0ZSh0KS50b0lTT1N0cmluZygpLHNka0lkZW50aWZpZXI6Im1hcGJveC1nbC1qcyIsc2RrVmVyc2lvbjoiMS4zLjIiLHNrdUlkOmosdXNlcklkOnRoaXMuYW5vbklkfSxzPWU/aChvLGUpOm8sbD17dXJsOlcoaSksaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4ifSxib2R5OkpTT04uc3RyaW5naWZ5KFtzXSl9O3RoaXMucGVuZGluZ1JlcXVlc3Q9bXQobCxmdW5jdGlvbih0KXthLnBlbmRpbmdSZXF1ZXN0PW51bGwscih0KSxhLnNhdmVFdmVudERhdGEoKSxhLnByb2Nlc3NSZXF1ZXN0cyhuKX0pfX0sWi5wcm90b3R5cGUucXVldWVSZXF1ZXN0PWZ1bmN0aW9uKHQsZSl7dGhpcy5xdWV1ZS5wdXNoKHQpLHRoaXMucHJvY2Vzc1JlcXVlc3RzKGUpfTt2YXIgSixLPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmNhbGwodGhpcywibWFwLmxvYWQiKSx0aGlzLnN1Y2Nlc3M9e30sdGhpcy5za3VUb2tlbj0iIn1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucG9zdE1hcExvYWRFdmVudD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnNrdVRva2VuPXIsKEQuRVZFTlRTX1VSTCYmbnx8RC5BQ0NFU1NfVE9LRU4mJkFycmF5LmlzQXJyYXkodCkmJnQuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gVSh0KXx8SCh0KX0pKSYmdGhpcy5xdWV1ZVJlcXVlc3Qoe2lkOmUsdGltZXN0YW1wOkRhdGUubm93KCl9LG4pfSxlLnByb3RvdHlwZS5wcm9jZXNzUmVxdWVzdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5wZW5kaW5nUmVxdWVzdCYmMCE9PXRoaXMucXVldWUubGVuZ3RoKXt2YXIgcj10aGlzLnF1ZXVlLnNoaWZ0KCksbj1yLmlkLGE9ci50aW1lc3RhbXA7biYmdGhpcy5zdWNjZXNzW25dfHwodGhpcy5hbm9uSWR8fHRoaXMuZmV0Y2hFdmVudERhdGEoKSxnKHRoaXMuYW5vbklkKXx8KHRoaXMuYW5vbklkPWQoKSksdGhpcy5wb3N0RXZlbnQoYSx7c2t1VG9rZW46dGhpcy5za3VUb2tlbn0sZnVuY3Rpb24odCl7dHx8biYmKGUuc3VjY2Vzc1tuXT0hMCl9LHQpKX19LGV9KFopLFE9bmV3KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsImFwcFVzZXJUdXJuc3RpbGUiKSx0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbj1lfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5wb3N0VHVybnN0aWxlRXZlbnQ9ZnVuY3Rpb24odCxlKXtELkVWRU5UU19VUkwmJkQuQUNDRVNTX1RPS0VOJiZBcnJheS5pc0FycmF5KHQpJiZ0LnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIFUodCl8fEgodCl9KSYmdGhpcy5xdWV1ZVJlcXVlc3QoRGF0ZS5ub3coKSxlKX0sZS5wcm90b3R5cGUucHJvY2Vzc1JlcXVlc3RzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMucGVuZGluZ1JlcXVlc3QmJjAhPT10aGlzLnF1ZXVlLmxlbmd0aCl7dGhpcy5hbm9uSWQmJnRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzJiZ0aGlzLmV2ZW50RGF0YS50b2tlblV8fHRoaXMuZmV0Y2hFdmVudERhdGEoKTt2YXIgcj1YKEQuQUNDRVNTX1RPS0VOKSxuPXI/ci51OkQuQUNDRVNTX1RPS0VOLGE9biE9PXRoaXMuZXZlbnREYXRhLnRva2VuVTtnKHRoaXMuYW5vbklkKXx8KHRoaXMuYW5vbklkPWQoKSxhPSEwKTt2YXIgaT10aGlzLnF1ZXVlLnNoaWZ0KCk7aWYodGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3Mpe3ZhciBvPW5ldyBEYXRlKHRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzKSxzPW5ldyBEYXRlKGkpLGw9KGktdGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MpLzg2NGU1O2E9YXx8bD49MXx8bDwtMXx8by5nZXREYXRlKCkhPT1zLmdldERhdGUoKX1lbHNlIGE9ITA7aWYoIWEpcmV0dXJuIHRoaXMucHJvY2Vzc1JlcXVlc3RzKCk7dGhpcy5wb3N0RXZlbnQoaSx7ImVuYWJsZWQudGVsZW1ldHJ5IjohMX0sZnVuY3Rpb24odCl7dHx8KGUuZXZlbnREYXRhLmxhc3RTdWNjZXNzPWksZS5ldmVudERhdGEudG9rZW5VPW4pfSx0KX19LGV9KFopKSwkPVEucG9zdFR1cm5zdGlsZUV2ZW50LmJpbmQoUSksdHQ9bmV3IEssZXQ9dHQucG9zdE1hcExvYWRFdmVudC5iaW5kKHR0KSxydD0ibWFwYm94LXRpbGVzIixudD01MDAsYXQ9NTAsaXQ9NDJlNDtmdW5jdGlvbiBvdCh0KXt2YXIgZT10LmluZGV4T2YoIj8iKTtyZXR1cm4gZTwwP3Q6dC5zbGljZSgwLGUpfXZhciBzdD0xLzAsbHQ9e1Vua25vd246IlVua25vd24iLFN0eWxlOiJTdHlsZSIsU291cmNlOiJTb3VyY2UiLFRpbGU6IlRpbGUiLEdseXBoczoiR2x5cGhzIixTcHJpdGVJbWFnZToiU3ByaXRlSW1hZ2UiLFNwcml0ZUpTT046IlNwcml0ZUpTT04iLEltYWdlOiJJbWFnZSJ9OyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZnJlZXplJiZPYmplY3QuZnJlZXplKGx0KTt2YXIgY3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbil7NDAxPT09ciYmSChuKSYmKGUrPSI6IHlvdSBtYXkgaGF2ZSBwcm92aWRlZCBhbiBpbnZhbGlkIE1hcGJveCBhY2Nlc3MgdG9rZW4uIFNlZSBodHRwczovL3d3dy5tYXBib3guY29tL2FwaS1kb2N1bWVudGF0aW9uLyNhY2Nlc3MtdG9rZW5zLWFuZC10b2tlbi1zY29wZXMiKSx0LmNhbGwodGhpcyxlKSx0aGlzLnN0YXR1cz1yLHRoaXMudXJsPW4sdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSx0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lKyI6ICIrdGhpcy5tZXNzYWdlKyIgKCIrdGhpcy5zdGF0dXMrIik6ICIrdGhpcy51cmx9LGV9KEVycm9yKTtmdW5jdGlvbiB1dCgpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfXZhciBodD11dCgpP2Z1bmN0aW9uKCl7cmV0dXJuIHNlbGYud29ya2VyJiZzZWxmLndvcmtlci5yZWZlcnJlcn06ZnVuY3Rpb24oKXtyZXR1cm4oImJsb2I6Ij09PXNlbGYubG9jYXRpb24ucHJvdG9jb2w/c2VsZi5wYXJlbnQ6c2VsZikubG9jYXRpb24uaHJlZn07ZnVuY3Rpb24gZnQodCxlKXt2YXIgcixuPW5ldyBzZWxmLkFib3J0Q29udHJvbGxlcixhPW5ldyBzZWxmLlJlcXVlc3QodC51cmwse21ldGhvZDp0Lm1ldGhvZHx8IkdFVCIsYm9keTp0LmJvZHksY3JlZGVudGlhbHM6dC5jcmVkZW50aWFscyxoZWFkZXJzOnQuaGVhZGVycyxyZWZlcnJlcjpodCgpLHNpZ25hbDpuLnNpZ25hbH0pLGk9ITEsbz0hMSxzPShyPWEudXJsKS5pbmRleE9mKCJza3U9Iik+MCYmSChyKTsianNvbiI9PT10LnR5cGUmJmEuaGVhZGVycy5zZXQoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24iKTt2YXIgbD1mdW5jdGlvbihyLG4saSl7aWYoIW8pe2lmKHImJiJTZWN1cml0eUVycm9yIiE9PXIubWVzc2FnZSYmdyhyKSxuJiZpKXJldHVybiBjKG4pO3ZhciBsPURhdGUubm93KCk7c2VsZi5mZXRjaChhKS50aGVuKGZ1bmN0aW9uKHIpe2lmKHIub2spe3ZhciBuPXM/ci5jbG9uZSgpOm51bGw7cmV0dXJuIGMocixuLGwpfXJldHVybiBlKG5ldyBjdChyLnN0YXR1c1RleHQsci5zdGF0dXMsdC51cmwpKX0pLmNhdGNoKGZ1bmN0aW9uKHQpezIwIT09dC5jb2RlJiZlKG5ldyBFcnJvcih0Lm1lc3NhZ2UpKX0pfX0sYz1mdW5jdGlvbihyLG4scyl7KCJhcnJheUJ1ZmZlciI9PT10LnR5cGU/ci5hcnJheUJ1ZmZlcigpOiJqc29uIj09PXQudHlwZT9yLmpzb24oKTpyLnRleHQoKSkudGhlbihmdW5jdGlvbih0KXtvfHwobiYmcyYmZnVuY3Rpb24odCxlLHIpe2lmKHNlbGYuY2FjaGVzKXt2YXIgbj17c3RhdHVzOmUuc3RhdHVzLHN0YXR1c1RleHQ6ZS5zdGF0dXNUZXh0LGhlYWRlcnM6bmV3IHNlbGYuSGVhZGVyc307ZS5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5oZWFkZXJzLnNldChlLHQpfSk7dmFyIGE9TShlLmhlYWRlcnMuZ2V0KCJDYWNoZS1Db250cm9sIil8fCIiKTthWyJuby1zdG9yZSJdfHwoYVsibWF4LWFnZSJdJiZuLmhlYWRlcnMuc2V0KCJFeHBpcmVzIixuZXcgRGF0ZShyKzFlMyphWyJtYXgtYWdlIl0pLnRvVVRDU3RyaW5nKCkpLG5ldyBEYXRlKG4uaGVhZGVycy5nZXQoIkV4cGlyZXMiKSkuZ2V0VGltZSgpLXI8aXR8fGZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09Sil0cnl7bmV3IFJlc3BvbnNlKG5ldyBSZWFkYWJsZVN0cmVhbSksSj0hMH1jYXRjaCh0KXtKPSExfUo/ZSh0LmJvZHkpOnQuYmxvYigpLnRoZW4oZSl9KGUsZnVuY3Rpb24oZSl7dmFyIHI9bmV3IHNlbGYuUmVzcG9uc2UoZSxuKTtzZWxmLmNhY2hlcy5vcGVuKHJ0KS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBlLnB1dChvdCh0LnVybCkscil9KS5jYXRjaChmdW5jdGlvbih0KXtyZXR1cm4gdyh0Lm1lc3NhZ2UpfSl9KSl9fShhLG4scyksaT0hMCxlKG51bGwsdCxyLmhlYWRlcnMuZ2V0KCJDYWNoZS1Db250cm9sIiksci5oZWFkZXJzLmdldCgiRXhwaXJlcyIpKSl9KS5jYXRjaChmdW5jdGlvbih0KXtyZXR1cm4gZShuZXcgRXJyb3IodC5tZXNzYWdlKSl9KX07cmV0dXJuIHM/ZnVuY3Rpb24odCxlKXtpZighc2VsZi5jYWNoZXMpcmV0dXJuIGUobnVsbCk7dmFyIHI9b3QodC51cmwpO3NlbGYuY2FjaGVzLm9wZW4ocnQpLnRoZW4oZnVuY3Rpb24odCl7dC5tYXRjaChyKS50aGVuKGZ1bmN0aW9uKG4pe3ZhciBhPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiExO3ZhciBlPW5ldyBEYXRlKHQuaGVhZGVycy5nZXQoIkV4cGlyZXMiKSkscj1NKHQuaGVhZGVycy5nZXQoIkNhY2hlLUNvbnRyb2wiKXx8IiIpO3JldHVybiBlPkRhdGUubm93KCkmJiFyWyJuby1jYWNoZSJdfShuKTt0LmRlbGV0ZShyKSxhJiZ0LnB1dChyLG4uY2xvbmUoKSksZShudWxsLG4sYSl9KS5jYXRjaChlKX0pLmNhdGNoKGUpfShhLGwpOmwobnVsbCxudWxsKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7bz0hMCxpfHxuLmFib3J0KCl9fX12YXIgcHQsZHQsZ3Q9ZnVuY3Rpb24odCxlKXtpZihyPXQudXJsLCEoL15maWxlOi8udGVzdChyKXx8L15maWxlOi8udGVzdChodCgpKSYmIS9eXHcrOi8udGVzdChyKSkpe2lmKHNlbGYuZmV0Y2gmJnNlbGYuUmVxdWVzdCYmc2VsZi5BYm9ydENvbnRyb2xsZXImJnNlbGYuUmVxdWVzdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInNpZ25hbCIpKXJldHVybiBmdCh0LGUpO2lmKHV0KCkmJnNlbGYud29ya2VyJiZzZWxmLndvcmtlci5hY3RvcilyZXR1cm4gc2VsZi53b3JrZXIuYWN0b3Iuc2VuZCgiZ2V0UmVzb3VyY2UiLHQsZSl9dmFyIHI7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHNlbGYuWE1MSHR0cFJlcXVlc3Q7Zm9yKHZhciBuIGluIHIub3Blbih0Lm1ldGhvZHx8IkdFVCIsdC51cmwsITApLCJhcnJheUJ1ZmZlciI9PT10LnR5cGUmJihyLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiKSx0LmhlYWRlcnMpci5zZXRSZXF1ZXN0SGVhZGVyKG4sdC5oZWFkZXJzW25dKTtyZXR1cm4ianNvbiI9PT10LnR5cGUmJihyLnJlc3BvbnNlVHlwZT0idGV4dCIsci5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCJhcHBsaWNhdGlvbi9qc29uIikpLHIud2l0aENyZWRlbnRpYWxzPSJpbmNsdWRlIj09PXQuY3JlZGVudGlhbHMsci5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgRXJyb3Ioci5zdGF0dXNUZXh0KSl9LHIub25sb2FkPWZ1bmN0aW9uKCl7aWYoKHIuc3RhdHVzPj0yMDAmJnIuc3RhdHVzPDMwMHx8MD09PXIuc3RhdHVzKSYmbnVsbCE9PXIucmVzcG9uc2Upe3ZhciBuPXIucmVzcG9uc2U7aWYoImpzb24iPT09dC50eXBlKXRyeXtuPUpTT04ucGFyc2Uoci5yZXNwb25zZSl9Y2F0Y2godCl7cmV0dXJuIGUodCl9ZShudWxsLG4sci5nZXRSZXNwb25zZUhlYWRlcigiQ2FjaGUtQ29udHJvbCIpLHIuZ2V0UmVzcG9uc2VIZWFkZXIoIkV4cGlyZXMiKSl9ZWxzZSBlKG5ldyBjdChyLnN0YXR1c1RleHQsci5zdGF0dXMsdC51cmwpKX0sci5zZW5kKHQuYm9keSkse2NhbmNlbDpmdW5jdGlvbigpe3JldHVybiByLmFib3J0KCl9fX0odCxlKX0sdnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZ3QoaCh0LHt0eXBlOiJhcnJheUJ1ZmZlciJ9KSxlKX0sbXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZ3QoaCh0LHttZXRob2Q6IlBPU1QifSksZSl9O3B0PVtdLGR0PTA7dmFyIHl0PWZ1bmN0aW9uKHQsZSl7aWYoZHQ+PUQuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTKXt2YXIgcj17cmVxdWVzdFBhcmFtZXRlcnM6dCxjYWxsYmFjazplLGNhbmNlbGxlZDohMSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGxlZD0hMH19O3JldHVybiBwdC5wdXNoKHIpLHJ9ZHQrKzt2YXIgbj0hMSxhPWZ1bmN0aW9uKCl7aWYoIW4pZm9yKG49ITAsZHQtLTtwdC5sZW5ndGgmJmR0PEQuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTOyl7dmFyIHQ9cHQuc2hpZnQoKSxlPXQucmVxdWVzdFBhcmFtZXRlcnMscj10LmNhbGxiYWNrO3QuY2FuY2VsbGVkfHwodC5jYW5jZWw9eXQoZSxyKS5jYW5jZWwpfX0saT12dCh0LGZ1bmN0aW9uKHQscixuLGkpe2lmKGEoKSx0KWUodCk7ZWxzZSBpZihyKXt2YXIgbz1uZXcgc2VsZi5JbWFnZSxzPXNlbGYuVVJMfHxzZWxmLndlYmtpdFVSTDtvLm9ubG9hZD1mdW5jdGlvbigpe2UobnVsbCxvKSxzLnJldm9rZU9iamVjdFVSTChvLnNyYyl9LG8ub25lcnJvcj1mdW5jdGlvbigpe3JldHVybiBlKG5ldyBFcnJvcigiQ291bGQgbm90IGxvYWQgaW1hZ2UuIFBsZWFzZSBtYWtlIHN1cmUgdG8gdXNlIGEgc3VwcG9ydGVkIGltYWdlIHR5cGUgc3VjaCBhcyBQTkcgb3IgSlBFRy4gTm90ZSB0aGF0IFNWR3MgYXJlIG5vdCBzdXBwb3J0ZWQuIikpfTt2YXIgbD1uZXcgc2VsZi5CbG9iKFtuZXcgVWludDhBcnJheShyKV0se3R5cGU6ImltYWdlL3BuZyJ9KTtvLmNhY2hlQ29udHJvbD1uLG8uZXhwaXJlcz1pLG8uc3JjPXIuYnl0ZUxlbmd0aD9zLmNyZWF0ZU9iamVjdFVSTChsKToiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FZQUFBQWZGY1NKQUFBQUMwbEVRVlFZVjJOZ0FBSUFBQVVBQWFyVnlGRUFBQUFBU1VWT1JLNUNZSUk9In19KTtyZXR1cm57Y2FuY2VsOmZ1bmN0aW9uKCl7aS5jYW5jZWwoKSxhKCl9fX07ZnVuY3Rpb24geHQodCxlLHIpe3JbdF0mJi0xIT09clt0XS5pbmRleE9mKGUpfHwoclt0XT1yW3RdfHxbXSxyW3RdLnB1c2goZSkpfWZ1bmN0aW9uIGJ0KHQsZSxyKXtpZihyJiZyW3RdKXt2YXIgbj1yW3RdLmluZGV4T2YoZSk7LTEhPT1uJiZyW3RdLnNwbGljZShuLDEpfX12YXIgX3Q9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSksaCh0aGlzLGUpLHRoaXMudHlwZT10fSx3dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dm9pZCAwPT09ciYmKHI9e30pLHQuY2FsbCh0aGlzLCJlcnJvciIsaCh7ZXJyb3I6ZX0scikpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShfdCksa3Q9ZnVuY3Rpb24oKXt9O2t0LnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9saXN0ZW5lcnM9dGhpcy5fbGlzdGVuZXJzfHx7fSx4dCh0LGUsdGhpcy5fbGlzdGVuZXJzKSx0aGlzfSxrdC5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJ0KHQsZSx0aGlzLl9saXN0ZW5lcnMpLGJ0KHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxrdC5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzPXRoaXMuX29uZVRpbWVMaXN0ZW5lcnN8fHt9LHh0KHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxrdC5wcm90b3R5cGUuZmlyZT1mdW5jdGlvbih0LGUpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9bmV3IF90KHQsZXx8e30pKTt2YXIgcj10LnR5cGU7aWYodGhpcy5saXN0ZW5zKHIpKXt0LnRhcmdldD10aGlzO2Zvcih2YXIgbj0wLGE9dGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnNbcl0/dGhpcy5fbGlzdGVuZXJzW3JdLnNsaWNlKCk6W107bjxhLmxlbmd0aDtuKz0xKWFbbl0uY2FsbCh0aGlzLHQpO2Zvcih2YXIgaT0wLG89dGhpcy5fb25lVGltZUxpc3RlbmVycyYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1tyXT90aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3JdLnNsaWNlKCk6W107aTxvLmxlbmd0aDtpKz0xKXt2YXIgcz1vW2ldO2J0KHIscyx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSxzLmNhbGwodGhpcyx0KX12YXIgbD10aGlzLl9ldmVudGVkUGFyZW50O2wmJihoKHQsImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhP3RoaXMuX2V2ZW50ZWRQYXJlbnREYXRhKCk6dGhpcy5fZXZlbnRlZFBhcmVudERhdGEpLGwuZmlyZSh0KSl9ZWxzZSB0IGluc3RhbmNlb2Ygd3QmJmNvbnNvbGUuZXJyb3IodC5lcnJvcik7cmV0dXJuIHRoaXN9LGt0LnByb3RvdHlwZS5saXN0ZW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9saXN0ZW5lcnMmJnRoaXMuX2xpc3RlbmVyc1t0XSYmdGhpcy5fbGlzdGVuZXJzW3RdLmxlbmd0aD4wfHx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzJiZ0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3RdJiZ0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3RdLmxlbmd0aD4wfHx0aGlzLl9ldmVudGVkUGFyZW50JiZ0aGlzLl9ldmVudGVkUGFyZW50Lmxpc3RlbnModCl9LGt0LnByb3RvdHlwZS5zZXRFdmVudGVkUGFyZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2V2ZW50ZWRQYXJlbnQ9dCx0aGlzLl9ldmVudGVkUGFyZW50RGF0YT1lLHRoaXN9O3ZhciBUdD17JHZlcnNpb246OCwkcm9vdDp7dmVyc2lvbjp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOls4XX0sbmFtZTp7dHlwZToic3RyaW5nIn0sbWV0YWRhdGE6e3R5cGU6IioifSxjZW50ZXI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIn0sem9vbTp7dHlwZToibnVtYmVyIn0sYmVhcmluZzp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx1bml0czoiZGVncmVlcyJ9LHBpdGNoOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCx1bml0czoiZGVncmVlcyJ9LGxpZ2h0Ont0eXBlOiJsaWdodCJ9LHNvdXJjZXM6e3JlcXVpcmVkOiEwLHR5cGU6InNvdXJjZXMifSxzcHJpdGU6e3R5cGU6InN0cmluZyJ9LGdseXBoczp7dHlwZToic3RyaW5nIn0sdHJhbnNpdGlvbjp7dHlwZToidHJhbnNpdGlvbiJ9LGxheWVyczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLHZhbHVlOiJsYXllciJ9fSxzb3VyY2VzOnsiKiI6e3R5cGU6InNvdXJjZSJ9fSxzb3VyY2U6WyJzb3VyY2VfdmVjdG9yIiwic291cmNlX3Jhc3RlciIsInNvdXJjZV9yYXN0ZXJfZGVtIiwic291cmNlX2dlb2pzb24iLCJzb3VyY2VfdmlkZW8iLCJzb3VyY2VfaW1hZ2UiXSxzb3VyY2VfdmVjdG9yOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e3ZlY3Rvcjp7fX19LHVybDp7dHlwZToic3RyaW5nIn0sdGlsZXM6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIn0sYm91bmRzOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjQsZGVmYXVsdDpbLTE4MCwtODUuMDUxMTI5LDE4MCw4NS4wNTExMjldfSxzY2hlbWU6e3R5cGU6ImVudW0iLHZhbHVlczp7eHl6Ont9LHRtczp7fX0sZGVmYXVsdDoieHl6In0sbWluem9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjB9LG1heHpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyMn0sYXR0cmlidXRpb246e3R5cGU6InN0cmluZyJ9LCIqIjp7dHlwZToiKiJ9fSxzb3VyY2VfcmFzdGVyOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e3Jhc3Rlcjp7fX19LHVybDp7dHlwZToic3RyaW5nIn0sdGlsZXM6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIn0sYm91bmRzOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjQsZGVmYXVsdDpbLTE4MCwtODUuMDUxMTI5LDE4MCw4NS4wNTExMjldfSxtaW56b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MH0sbWF4em9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIyfSx0aWxlU2l6ZTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUxMix1bml0czoicGl4ZWxzIn0sc2NoZW1lOnt0eXBlOiJlbnVtIix2YWx1ZXM6e3h5ejp7fSx0bXM6e319LGRlZmF1bHQ6Inh5eiJ9LGF0dHJpYnV0aW9uOnt0eXBlOiJzdHJpbmcifSwiKiI6e3R5cGU6IioifX0sc291cmNlX3Jhc3Rlcl9kZW06e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7InJhc3Rlci1kZW0iOnt9fX0sdXJsOnt0eXBlOiJzdHJpbmcifSx0aWxlczp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxib3VuZHM6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6NCxkZWZhdWx0OlstMTgwLC04NS4wNTExMjksMTgwLDg1LjA1MTEyOV19LG1pbnpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjJ9LHRpbGVTaXplOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NTEyLHVuaXRzOiJwaXhlbHMifSxhdHRyaWJ1dGlvbjp7dHlwZToic3RyaW5nIn0sZW5jb2Rpbmc6e3R5cGU6ImVudW0iLHZhbHVlczp7dGVycmFyaXVtOnt9LG1hcGJveDp7fX0sZGVmYXVsdDoibWFwYm94In0sIioiOnt0eXBlOiIqIn19LHNvdXJjZV9nZW9qc29uOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e2dlb2pzb246e319fSxkYXRhOnt0eXBlOiIqIn0sbWF4em9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjE4fSxhdHRyaWJ1dGlvbjp7dHlwZToic3RyaW5nIn0sYnVmZmVyOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTI4LG1heGltdW06NTEyLG1pbmltdW06MH0sdG9sZXJhbmNlOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6LjM3NX0sY2x1c3Rlcjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sY2x1c3RlclJhZGl1czp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUwLG1pbmltdW06MH0sY2x1c3Rlck1heFpvb206e3R5cGU6Im51bWJlciJ9LGNsdXN0ZXJQcm9wZXJ0aWVzOnt0eXBlOiIqIn0sbGluZU1ldHJpY3M6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGdlbmVyYXRlSWQ6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9fSxzb3VyY2VfdmlkZW86e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7dmlkZW86e319fSx1cmxzOntyZXF1aXJlZDohMCx0eXBlOiJhcnJheSIsdmFsdWU6InN0cmluZyJ9LGNvb3JkaW5hdGVzOntyZXF1aXJlZDohMCx0eXBlOiJhcnJheSIsbGVuZ3RoOjQsdmFsdWU6e3R5cGU6ImFycmF5IixsZW5ndGg6Mix2YWx1ZToibnVtYmVyIn19fSxzb3VyY2VfaW1hZ2U6e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7aW1hZ2U6e319fSx1cmw6e3JlcXVpcmVkOiEwLHR5cGU6InN0cmluZyJ9LGNvb3JkaW5hdGVzOntyZXF1aXJlZDohMCx0eXBlOiJhcnJheSIsbGVuZ3RoOjQsdmFsdWU6e3R5cGU6ImFycmF5IixsZW5ndGg6Mix2YWx1ZToibnVtYmVyIn19fSxsYXllcjp7aWQ6e3R5cGU6InN0cmluZyIscmVxdWlyZWQ6ITB9LHR5cGU6e3R5cGU6ImVudW0iLHZhbHVlczp7ZmlsbDp7fSxsaW5lOnt9LHN5bWJvbDp7fSxjaXJjbGU6e30saGVhdG1hcDp7fSwiZmlsbC1leHRydXNpb24iOnt9LHJhc3Rlcjp7fSxoaWxsc2hhZGU6e30sYmFja2dyb3VuZDp7fX0scmVxdWlyZWQ6ITB9LG1ldGFkYXRhOnt0eXBlOiIqIn0sc291cmNlOnt0eXBlOiJzdHJpbmcifSwic291cmNlLWxheWVyIjp7dHlwZToic3RyaW5nIn0sbWluem9vbTp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsbWF4aW11bToyNH0sbWF4em9vbTp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsbWF4aW11bToyNH0sZmlsdGVyOnt0eXBlOiJmaWx0ZXIifSxsYXlvdXQ6e3R5cGU6ImxheW91dCJ9LHBhaW50Ont0eXBlOiJwYWludCJ9fSxsYXlvdXQ6WyJsYXlvdXRfZmlsbCIsImxheW91dF9saW5lIiwibGF5b3V0X2NpcmNsZSIsImxheW91dF9oZWF0bWFwIiwibGF5b3V0X2ZpbGwtZXh0cnVzaW9uIiwibGF5b3V0X3N5bWJvbCIsImxheW91dF9yYXN0ZXIiLCJsYXlvdXRfaGlsbHNoYWRlIiwibGF5b3V0X2JhY2tncm91bmQiXSxsYXlvdXRfYmFja2dyb3VuZDp7dmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X2ZpbGw6eyJmaWxsLXNvcnQta2V5Ijp7dHlwZToibnVtYmVyIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfY2lyY2xlOnsiY2lyY2xlLXNvcnQta2V5Ijp7dHlwZToibnVtYmVyIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfaGVhdG1hcDp7dmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sImxheW91dF9maWxsLWV4dHJ1c2lvbiI6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LGxheW91dF9saW5lOnsibGluZS1jYXAiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2J1dHQ6e30scm91bmQ6e30sc3F1YXJlOnt9fSxkZWZhdWx0OiJidXR0IixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImxpbmUtam9pbiI6e3R5cGU6ImVudW0iLHZhbHVlczp7YmV2ZWw6e30scm91bmQ6e30sbWl0ZXI6e319LGRlZmF1bHQ6Im1pdGVyIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwibGluZS1taXRlci1saW1pdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLHJlcXVpcmVzOlt7ImxpbmUtam9pbiI6Im1pdGVyIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwibGluZS1yb3VuZC1saW1pdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLjA1LHJlcXVpcmVzOlt7ImxpbmUtam9pbiI6InJvdW5kIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwibGluZS1zb3J0LWtleSI6e3R5cGU6Im51bWJlciIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sdmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X3N5bWJvbDp7InN5bWJvbC1wbGFjZW1lbnQiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e3BvaW50Ont9LGxpbmU6e30sImxpbmUtY2VudGVyIjp7fX0sZGVmYXVsdDoicG9pbnQiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwic3ltYm9sLXNwYWNpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjUwLG1pbmltdW06MSx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbeyJzeW1ib2wtcGxhY2VtZW50IjoibGluZSJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInN5bWJvbC1hdm9pZC1lZGdlcyI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJzeW1ib2wtc29ydC1rZXkiOnt0eXBlOiJudW1iZXIiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJzeW1ib2wtei1vcmRlciI6e3R5cGU6ImVudW0iLHZhbHVlczp7YXV0bzp7fSwidmlld3BvcnQteSI6e30sc291cmNlOnt9fSxkZWZhdWx0OiJhdXRvIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tYWxsb3ctb3ZlcmxhcCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLWlnbm9yZS1wbGFjZW1lbnQiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1vcHRpb25hbCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJpY29uLWltYWdlIiwidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OiJhdXRvIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tc2l6ZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCx1bml0czoiZmFjdG9yIG9mIHRoZSBvcmlnaW5hbCBpY29uIHNpemUiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLXRleHQtZml0Ijp7dHlwZToiZW51bSIsdmFsdWVzOntub25lOnt9LHdpZHRoOnt9LGhlaWdodDp7fSxib3RoOnt9fSxkZWZhdWx0OiJub25lIixyZXF1aXJlczpbImljb24taW1hZ2UiLCJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLXRleHQtZml0LXBhZGRpbmciOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjQsZGVmYXVsdDpbMCwwLDAsMF0sdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIiwidGV4dC1maWVsZCIseyJpY29uLXRleHQtZml0IjpbImJvdGgiLCJ3aWR0aCIsImhlaWdodCJdfV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLWltYWdlIjp7dHlwZToic3RyaW5nIix0b2tlbnM6ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx1bml0czoiZGVncmVlcyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tcGFkZGluZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLG1pbmltdW06MCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24ta2VlcC11cHJpZ2h0Ijp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiLHsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOiJtYXAifSx7InN5bWJvbC1wbGFjZW1lbnQiOlsibGluZSIsImxpbmUtY2VudGVyIl19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tb2Zmc2V0Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0scmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LCJ0b3AtbGVmdCI6e30sInRvcC1yaWdodCI6e30sImJvdHRvbS1sZWZ0Ijp7fSwiYm90dG9tLXJpZ2h0Ijp7fX0sZGVmYXVsdDoiY2VudGVyIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1waXRjaC1hbGlnbm1lbnQiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OiJhdXRvIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtcGl0Y2gtYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDoiYXV0byIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6ImF1dG8iLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1maWVsZCI6e3R5cGU6ImZvcm1hdHRlZCIsZGVmYXVsdDoiIix0b2tlbnM6ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtZm9udCI6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIixkZWZhdWx0OlsiT3BlbiBTYW5zIFJlZ3VsYXIiLCJBcmlhbCBVbmljb2RlIE1TIFJlZ3VsYXIiXSxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1zaXplIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjE2LG1pbmltdW06MCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1tYXgtd2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTAsbWluaW11bTowLHVuaXRzOiJlbXMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWxpbmUtaGVpZ2h0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEuMix1bml0czoiZW1zIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtbGV0dGVyLXNwYWNpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCx1bml0czoiZW1zIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1qdXN0aWZ5Ijp7dHlwZToiZW51bSIsdmFsdWVzOnthdXRvOnt9LGxlZnQ6e30sY2VudGVyOnt9LHJpZ2h0Ont9fSxkZWZhdWx0OiJjZW50ZXIiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LXJhZGlhbC1vZmZzZXQiOnt0eXBlOiJudW1iZXIiLHVuaXRzOiJlbXMiLGRlZmF1bHQ6MCxyZXF1aXJlczpbInRleHQtZmllbGQiXSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19fSwidGV4dC12YXJpYWJsZS1hbmNob3IiOnt0eXBlOiJhcnJheSIsdmFsdWU6ImVudW0iLHZhbHVlczp7Y2VudGVyOnt9LGxlZnQ6e30scmlnaHQ6e30sdG9wOnt9LGJvdHRvbTp7fSwidG9wLWxlZnQiOnt9LCJ0b3AtcmlnaHQiOnt9LCJib3R0b20tbGVmdCI6e30sImJvdHRvbS1yaWdodCI6e319LHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJzeW1ib2wtcGxhY2VtZW50IjpbInBvaW50Il19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LCJ0b3AtbGVmdCI6e30sInRvcC1yaWdodCI6e30sImJvdHRvbS1sZWZ0Ijp7fSwiYm90dG9tLXJpZ2h0Ijp7fX0sZGVmYXVsdDoiY2VudGVyIixyZXF1aXJlczpbInRleHQtZmllbGQiLHsiISI6InRleHQtdmFyaWFibGUtYW5jaG9yIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LW1heC1hbmdsZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo0NSx1bml0czoiZGVncmVlcyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7InN5bWJvbC1wbGFjZW1lbnQiOlsibGluZSIsImxpbmUtY2VudGVyIl19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtd3JpdGluZy1tb2RlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJlbnVtIix2YWx1ZXM6e2hvcml6b250YWw6e30sdmVydGljYWw6e319LHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJzeW1ib2wtcGxhY2VtZW50IjpbInBvaW50Il19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx1bml0czoiZGVncmVlcyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtcGFkZGluZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLG1pbmltdW06MCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQta2VlcC11cHJpZ2h0Ijp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCxyZXF1aXJlczpbInRleHQtZmllbGQiLHsidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiOiJtYXAifSx7InN5bWJvbC1wbGFjZW1lbnQiOlsibGluZSIsImxpbmUtY2VudGVyIl19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtdHJhbnNmb3JtIjp7dHlwZToiZW51bSIsdmFsdWVzOntub25lOnt9LHVwcGVyY2FzZTp7fSxsb3dlcmNhc2U6e319LGRlZmF1bHQ6Im5vbmUiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LW9mZnNldCI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIix1bml0czoiZW1zIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyIhIjoidGV4dC1yYWRpYWwtb2Zmc2V0In0seyIhIjoidGV4dC12YXJpYWJsZS1hbmNob3IifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtYWxsb3ctb3ZlcmxhcCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1vcHRpb25hbCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIiwiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfcmFzdGVyOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfaGlsbHNoYWRlOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxmaWx0ZXI6e3R5cGU6ImFycmF5Iix2YWx1ZToiKiJ9LGZpbHRlcl9vcGVyYXRvcjp7dHlwZToiZW51bSIsdmFsdWVzOnsiPT0iOnt9LCIhPSI6e30sIj4iOnt9LCI+PSI6e30sIjwiOnt9LCI8PSI6e30saW46e30sIiFpbiI6e30sYWxsOnt9LGFueTp7fSxub25lOnt9LGhhczp7fSwiIWhhcyI6e319fSxnZW9tZXRyeV90eXBlOnt0eXBlOiJlbnVtIix2YWx1ZXM6e1BvaW50Ont9LExpbmVTdHJpbmc6e30sUG9seWdvbjp7fX19LGZ1bmN0aW9uOntleHByZXNzaW9uOnt0eXBlOiJleHByZXNzaW9uIn0sc3RvcHM6e3R5cGU6ImFycmF5Iix2YWx1ZToiZnVuY3Rpb25fc3RvcCJ9LGJhc2U6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MH0scHJvcGVydHk6e3R5cGU6InN0cmluZyIsZGVmYXVsdDoiJHpvb20ifSx0eXBlOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2lkZW50aXR5Ont9LGV4cG9uZW50aWFsOnt9LGludGVydmFsOnt9LGNhdGVnb3JpY2FsOnt9fSxkZWZhdWx0OiJleHBvbmVudGlhbCJ9LGNvbG9yU3BhY2U6e3R5cGU6ImVudW0iLHZhbHVlczp7cmdiOnt9LGxhYjp7fSxoY2w6e319LGRlZmF1bHQ6InJnYiJ9LGRlZmF1bHQ6e3R5cGU6IioiLHJlcXVpcmVkOiExfX0sZnVuY3Rpb25fc3RvcDp7dHlwZToiYXJyYXkiLG1pbmltdW06MCxtYXhpbXVtOjIyLHZhbHVlOlsibnVtYmVyIiwiY29sb3IiXSxsZW5ndGg6Mn0sZXhwcmVzc2lvbjp7dHlwZToiYXJyYXkiLHZhbHVlOiIqIixtaW5pbXVtOjF9LGV4cHJlc3Npb25fbmFtZTp7dHlwZToiZW51bSIsdmFsdWVzOntsZXQ6e2dyb3VwOiJWYXJpYWJsZSBiaW5kaW5nIn0sdmFyOntncm91cDoiVmFyaWFibGUgYmluZGluZyJ9LGxpdGVyYWw6e2dyb3VwOiJUeXBlcyJ9LGFycmF5Ontncm91cDoiVHlwZXMifSxhdDp7Z3JvdXA6Ikxvb2t1cCJ9LGNhc2U6e2dyb3VwOiJEZWNpc2lvbiJ9LG1hdGNoOntncm91cDoiRGVjaXNpb24ifSxjb2FsZXNjZTp7Z3JvdXA6IkRlY2lzaW9uIn0sc3RlcDp7Z3JvdXA6IlJhbXBzLCBzY2FsZXMsIGN1cnZlcyJ9LGludGVycG9sYXRlOntncm91cDoiUmFtcHMsIHNjYWxlcywgY3VydmVzIn0sImludGVycG9sYXRlLWhjbCI6e2dyb3VwOiJSYW1wcywgc2NhbGVzLCBjdXJ2ZXMifSwiaW50ZXJwb2xhdGUtbGFiIjp7Z3JvdXA6IlJhbXBzLCBzY2FsZXMsIGN1cnZlcyJ9LGxuMjp7Z3JvdXA6Ik1hdGgifSxwaTp7Z3JvdXA6Ik1hdGgifSxlOntncm91cDoiTWF0aCJ9LHR5cGVvZjp7Z3JvdXA6IlR5cGVzIn0sc3RyaW5nOntncm91cDoiVHlwZXMifSxudW1iZXI6e2dyb3VwOiJUeXBlcyJ9LGJvb2xlYW46e2dyb3VwOiJUeXBlcyJ9LG9iamVjdDp7Z3JvdXA6IlR5cGVzIn0sY29sbGF0b3I6e2dyb3VwOiJUeXBlcyJ9LGZvcm1hdDp7Z3JvdXA6IlR5cGVzIn0sIm51bWJlci1mb3JtYXQiOntncm91cDoiVHlwZXMifSwidG8tc3RyaW5nIjp7Z3JvdXA6IlR5cGVzIn0sInRvLW51bWJlciI6e2dyb3VwOiJUeXBlcyJ9LCJ0by1ib29sZWFuIjp7Z3JvdXA6IlR5cGVzIn0sInRvLXJnYmEiOntncm91cDoiQ29sb3IifSwidG8tY29sb3IiOntncm91cDoiVHlwZXMifSxyZ2I6e2dyb3VwOiJDb2xvciJ9LHJnYmE6e2dyb3VwOiJDb2xvciJ9LGdldDp7Z3JvdXA6Ikxvb2t1cCJ9LGhhczp7Z3JvdXA6Ikxvb2t1cCJ9LGxlbmd0aDp7Z3JvdXA6Ikxvb2t1cCJ9LHByb3BlcnRpZXM6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSwiZmVhdHVyZS1zdGF0ZSI6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSwiZ2VvbWV0cnktdHlwZSI6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSxpZDp7Z3JvdXA6IkZlYXR1cmUgZGF0YSJ9LHpvb206e2dyb3VwOiJab29tIn0sImhlYXRtYXAtZGVuc2l0eSI6e2dyb3VwOiJIZWF0bWFwIn0sImxpbmUtcHJvZ3Jlc3MiOntncm91cDoiRmVhdHVyZSBkYXRhIn0sYWNjdW11bGF0ZWQ6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSwiKyI6e2dyb3VwOiJNYXRoIn0sIioiOntncm91cDoiTWF0aCJ9LCItIjp7Z3JvdXA6Ik1hdGgifSwiLyI6e2dyb3VwOiJNYXRoIn0sIiUiOntncm91cDoiTWF0aCJ9LCJeIjp7Z3JvdXA6Ik1hdGgifSxzcXJ0Ontncm91cDoiTWF0aCJ9LGxvZzEwOntncm91cDoiTWF0aCJ9LGxuOntncm91cDoiTWF0aCJ9LGxvZzI6e2dyb3VwOiJNYXRoIn0sc2luOntncm91cDoiTWF0aCJ9LGNvczp7Z3JvdXA6Ik1hdGgifSx0YW46e2dyb3VwOiJNYXRoIn0sYXNpbjp7Z3JvdXA6Ik1hdGgifSxhY29zOntncm91cDoiTWF0aCJ9LGF0YW46e2dyb3VwOiJNYXRoIn0sbWluOntncm91cDoiTWF0aCJ9LG1heDp7Z3JvdXA6Ik1hdGgifSxyb3VuZDp7Z3JvdXA6Ik1hdGgifSxhYnM6e2dyb3VwOiJNYXRoIn0sY2VpbDp7Z3JvdXA6Ik1hdGgifSxmbG9vcjp7Z3JvdXA6Ik1hdGgifSwiPT0iOntncm91cDoiRGVjaXNpb24ifSwiIT0iOntncm91cDoiRGVjaXNpb24ifSwiPiI6e2dyb3VwOiJEZWNpc2lvbiJ9LCI8Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIj49Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIjw9Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sYWxsOntncm91cDoiRGVjaXNpb24ifSxhbnk6e2dyb3VwOiJEZWNpc2lvbiJ9LCIhIjp7Z3JvdXA6IkRlY2lzaW9uIn0sImlzLXN1cHBvcnRlZC1zY3JpcHQiOntncm91cDoiU3RyaW5nIn0sdXBjYXNlOntncm91cDoiU3RyaW5nIn0sZG93bmNhc2U6e2dyb3VwOiJTdHJpbmcifSxjb25jYXQ6e2dyb3VwOiJTdHJpbmcifSwicmVzb2x2ZWQtbG9jYWxlIjp7Z3JvdXA6IlN0cmluZyJ9fX0sbGlnaHQ6e2FuY2hvcjp7dHlwZToiZW51bSIsZGVmYXVsdDoidmlld3BvcnQiLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQiLHRyYW5zaXRpb246ITEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19fSxwb3NpdGlvbjp7dHlwZToiYXJyYXkiLGRlZmF1bHQ6WzEuMTUsMjEwLDMwXSxsZW5ndGg6Myx2YWx1ZToibnVtYmVyIiwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19fSxjb2xvcjp7dHlwZToiY29sb3IiLCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCIsZGVmYXVsdDoiI2ZmZmZmZiIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LHRyYW5zaXRpb246ITB9LGludGVuc2l0eTp7dHlwZToibnVtYmVyIiwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQiLGRlZmF1bHQ6LjUsbWluaW11bTowLG1heGltdW06MSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sdHJhbnNpdGlvbjohMH19LHBhaW50OlsicGFpbnRfZmlsbCIsInBhaW50X2xpbmUiLCJwYWludF9jaXJjbGUiLCJwYWludF9oZWF0bWFwIiwicGFpbnRfZmlsbC1leHRydXNpb24iLCJwYWludF9zeW1ib2wiLCJwYWludF9yYXN0ZXIiLCJwYWludF9oaWxsc2hhZGUiLCJwYWludF9iYWNrZ3JvdW5kIl0scGFpbnRfZmlsbDp7ImZpbGwtYW50aWFsaWFzIjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImZpbGwtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImZpbGwtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoiZmlsbC1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiZmlsbC1vdXRsaW5lLWNvbG9yIjp7dHlwZToiY29sb3IiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImZpbGwtcGF0dGVybiJ9LHsiZmlsbC1hbnRpYWxpYXMiOiEwfV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImZpbGwtdHJhbnNsYXRlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLXBhdHRlcm4iOnt0eXBlOiJzdHJpbmciLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIn19LCJwYWludF9maWxsLWV4dHJ1c2lvbiI6eyJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiZmlsbC1leHRydXNpb24tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoiZmlsbC1leHRydXNpb24tcGF0dGVybiJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iOnt0eXBlOiJzdHJpbmciLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIn0sImZpbGwtZXh0cnVzaW9uLWhlaWdodCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czoibWV0ZXJzIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiZmlsbC1leHRydXNpb24tYmFzZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czoibWV0ZXJzIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiZmlsbC1leHRydXNpb24taGVpZ2h0Il0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITAsdHJhbnNpdGlvbjohMSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X2xpbmU6eyJsaW5lLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJsaW5lLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImxpbmUtcGF0dGVybiJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImxpbmUtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsibGluZS10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImxpbmUtd2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtZ2FwLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJsaW5lLW9mZnNldCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJsaW5lLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtZGFzaGFycmF5Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJsaW5lIHdpZHRocyIscmVxdWlyZXM6W3siISI6ImxpbmUtcGF0dGVybiJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJjcm9zcy1mYWRlZCJ9LCJsaW5lLXBhdHRlcm4iOnt0eXBlOiJzdHJpbmciLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIn0sImxpbmUtZ3JhZGllbnQiOnt0eXBlOiJjb2xvciIsdHJhbnNpdGlvbjohMSxyZXF1aXJlczpbeyIhIjoibGluZS1kYXNoYXJyYXkifSx7IiEiOiJsaW5lLXBhdHRlcm4ifSx7c291cmNlOiJnZW9qc29uIixoYXM6e2xpbmVNZXRyaWNzOiEwfX1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsibGluZS1wcm9ncmVzcyJdfSwicHJvcGVydHktdHlwZSI6ImNvbG9yLXJhbXAifX0scGFpbnRfY2lyY2xlOnsiY2lyY2xlLXJhZGl1cyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo1LG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiY2lyY2xlLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImNpcmNsZS10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImNpcmNsZS10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImNpcmNsZS1waXRjaC1zY2FsZSI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiY2lyY2xlLXBpdGNoLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJ2aWV3cG9ydCIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJjaXJjbGUtc3Ryb2tlLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtc3Ryb2tlLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9fSxwYWludF9oZWF0bWFwOnsiaGVhdG1hcC1yYWRpdXMiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAsbWluaW11bToxLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJoZWF0bWFwLXdlaWdodCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCx0cmFuc2l0aW9uOiExLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaGVhdG1hcC1pbnRlbnNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhlYXRtYXAtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDpbImludGVycG9sYXRlIixbImxpbmVhciJdLFsiaGVhdG1hcC1kZW5zaXR5Il0sMCwicmdiYSgwLCAwLCAyNTUsIDApIiwuMSwicm95YWxibHVlIiwuMywiY3lhbiIsLjUsImxpbWUiLC43LCJ5ZWxsb3ciLDEsInJlZCJdLHRyYW5zaXRpb246ITEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJoZWF0bWFwLWRlbnNpdHkiXX0sInByb3BlcnR5LXR5cGUiOiJjb2xvci1yYW1wIn0sImhlYXRtYXAtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X3N5bWJvbDp7Imljb24tb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24taGFsby1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiJyZ2JhKDAsIDAsIDAsIDApIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1oYWxvLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLWhhbG8tYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJpY29uLWltYWdlIiwiaWNvbi10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxvdmVycmlkYWJsZTohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtaGFsby1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiJyZ2JhKDAsIDAsIDAsIDApIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1oYWxvLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWhhbG8tYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIiwidGV4dC10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X3Jhc3Rlcjp7InJhc3Rlci1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWh1ZS1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLHRyYW5zaXRpb246ITAsdW5pdHM6ImRlZ3JlZXMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWJyaWdodG5lc3MtbWluIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWJyaWdodG5lc3MtbWF4Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLXNhdHVyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOi0xLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwicmFzdGVyLWNvbnRyYXN0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTotMSxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1yZXNhbXBsaW5nIjp7dHlwZToiZW51bSIsdmFsdWVzOntsaW5lYXI6e30sbmVhcmVzdDp7fX0sZGVmYXVsdDoibGluZWFyIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1mYWRlLWR1cmF0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMwMCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMSx1bml0czoibWlsbGlzZWNvbmRzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X2hpbGxzaGFkZTp7ImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMzNSxtaW5pbXVtOjAsbWF4aW11bTozNTksdHJhbnNpdGlvbjohMSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6InZpZXdwb3J0IixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6LjUsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjRkZGRkZGIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaGlsbHNoYWRlLWFjY2VudC1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifX0scGFpbnRfYmFja2dyb3VuZDp7ImJhY2tncm91bmQtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbeyIhIjoiYmFja2dyb3VuZC1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiYmFja2dyb3VuZC1wYXR0ZXJuIjp7dHlwZToic3RyaW5nIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImNyb3NzLWZhZGVkIn0sImJhY2tncm91bmQtb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHRyYW5zaXRpb246e2R1cmF0aW9uOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCx1bml0czoibWlsbGlzZWNvbmRzIn0sZGVsYXk6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czoibWlsbGlzZWNvbmRzIn19LCJwcm9wZXJ0eS10eXBlIjp7ImRhdGEtZHJpdmVuIjp7dHlwZToicHJvcGVydHktdHlwZSJ9LCJjcm9zcy1mYWRlZCI6e3R5cGU6InByb3BlcnR5LXR5cGUifSwiY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4iOnt0eXBlOiJwcm9wZXJ0eS10eXBlIn0sImNvbG9yLXJhbXAiOnt0eXBlOiJwcm9wZXJ0eS10eXBlIn0sImRhdGEtY29uc3RhbnQiOnt0eXBlOiJwcm9wZXJ0eS10eXBlIn0sY29uc3RhbnQ6e3R5cGU6InByb3BlcnR5LXR5cGUifX19LE10PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubWVzc2FnZT0odD90KyI6ICI6IiIpK3IsbiYmKHRoaXMuaWRlbnRpZmllcj1uKSxudWxsIT1lJiZlLl9fbGluZV9fJiYodGhpcy5saW5lPWUuX19saW5lX18pfTtmdW5jdGlvbiBBdCh0KXt2YXIgZT10LmtleSxyPXQudmFsdWU7cmV0dXJuIHI/W25ldyBNdChlLHIsImNvbnN0YW50cyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhcyBvZiB2OCIpXTpbXX1mdW5jdGlvbiBTdCh0KXtmb3IodmFyIGU9W10scj1hcmd1bWVudHMubGVuZ3RoLTE7ci0tID4wOyllW3JdPWFyZ3VtZW50c1tyKzFdO2Zvcih2YXIgbj0wLGE9ZTtuPGEubGVuZ3RoO24rPTEpe3ZhciBpPWFbbl07Zm9yKHZhciBvIGluIGkpdFtvXT1pW29dfXJldHVybiB0fWZ1bmN0aW9uIEV0KHQpe3JldHVybiB0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgQm9vbGVhbn1mdW5jdGlvbiBMdCh0KXtyZXR1cm4gRXQodCk/dC52YWx1ZU9mKCk6dH1mdW5jdGlvbiBDdCh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0Lm1hcChDdCk7aWYodCBpbnN0YW5jZW9mIE9iamVjdCYmIUV0KHQpKXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCllW3JdPUN0KHRbcl0pO3JldHVybiBlfXJldHVybiBMdCh0KX12YXIgUHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLHIpLHRoaXMubWVzc2FnZT1yLHRoaXMua2V5PWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KEVycm9yKSxPdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPVtdKSx0aGlzLnBhcmVudD10LHRoaXMuYmluZGluZ3M9e307Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSl7dmFyIGE9bltyXSxpPWFbMF0sbz1hWzFdO3RoaXMuYmluZGluZ3NbaV09b319O090LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBPdCh0aGlzLHQpfSxPdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZGluZ3NbdF0pcmV0dXJuIHRoaXMuYmluZGluZ3NbdF07aWYodGhpcy5wYXJlbnQpcmV0dXJuIHRoaXMucGFyZW50LmdldCh0KTt0aHJvdyBuZXcgRXJyb3IodCsiIG5vdCBmb3VuZCBpbiBzY29wZS4iKX0sT3QucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMuYmluZGluZ3NbdF18fCEhdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Lmhhcyh0KX07dmFyIHp0PXtraW5kOiJudWxsIn0sSXQ9e2tpbmQ6Im51bWJlciJ9LER0PXtraW5kOiJzdHJpbmcifSxSdD17a2luZDoiYm9vbGVhbiJ9LEZ0PXtraW5kOiJjb2xvciJ9LEJ0PXtraW5kOiJvYmplY3QifSxOdD17a2luZDoidmFsdWUifSxqdD17a2luZDoiY29sbGF0b3IifSxWdD17a2luZDoiZm9ybWF0dGVkIn07ZnVuY3Rpb24gVXQodCxlKXtyZXR1cm57a2luZDoiYXJyYXkiLGl0ZW1UeXBlOnQsTjplfX1mdW5jdGlvbiBxdCh0KXtpZigiYXJyYXkiPT09dC5raW5kKXt2YXIgZT1xdCh0Lml0ZW1UeXBlKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQuTj8iYXJyYXk8IitlKyIsICIrdC5OKyI+IjoidmFsdWUiPT09dC5pdGVtVHlwZS5raW5kPyJhcnJheSI6ImFycmF5PCIrZSsiPiJ9cmV0dXJuIHQua2luZH12YXIgSHQ9W3p0LEl0LER0LFJ0LEZ0LFZ0LEJ0LFV0KE50KV07ZnVuY3Rpb24gR3QodCxlKXtpZigiZXJyb3IiPT09ZS5raW5kKXJldHVybiBudWxsO2lmKCJhcnJheSI9PT10LmtpbmQpe2lmKCJhcnJheSI9PT1lLmtpbmQmJigwPT09ZS5OJiYidmFsdWUiPT09ZS5pdGVtVHlwZS5raW5kfHwhR3QodC5pdGVtVHlwZSxlLml0ZW1UeXBlKSkmJigibnVtYmVyIiE9dHlwZW9mIHQuTnx8dC5OPT09ZS5OKSlyZXR1cm4gbnVsbH1lbHNle2lmKHQua2luZD09PWUua2luZClyZXR1cm4gbnVsbDtpZigidmFsdWUiPT09dC5raW5kKWZvcih2YXIgcj0wLG49SHQ7cjxuLmxlbmd0aDtyKz0xKWlmKCFHdChuW3JdLGUpKXJldHVybiBudWxsfXJldHVybiJFeHBlY3RlZCAiK3F0KHQpKyIgYnV0IGZvdW5kICIrcXQoZSkrIiBpbnN0ZWFkLiJ9dmFyIFl0PWUoZnVuY3Rpb24odCxlKXt2YXIgcj17dHJhbnNwYXJlbnQ6WzAsMCwwLDBdLGFsaWNlYmx1ZTpbMjQwLDI0OCwyNTUsMV0sYW50aXF1ZXdoaXRlOlsyNTAsMjM1LDIxNSwxXSxhcXVhOlswLDI1NSwyNTUsMV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTIsMV0sYXp1cmU6WzI0MCwyNTUsMjU1LDFdLGJlaWdlOlsyNDUsMjQ1LDIyMCwxXSxiaXNxdWU6WzI1NSwyMjgsMTk2LDFdLGJsYWNrOlswLDAsMCwxXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDUsMV0sYmx1ZTpbMCwwLDI1NSwxXSxibHVldmlvbGV0OlsxMzgsNDMsMjI2LDFdLGJyb3duOlsxNjUsNDIsNDIsMV0sYnVybHl3b29kOlsyMjIsMTg0LDEzNSwxXSxjYWRldGJsdWU6Wzk1LDE1OCwxNjAsMV0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwLDFdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMCwxXSxjb3JhbDpbMjU1LDEyNyw4MCwxXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzcsMV0sY29ybnNpbGs6WzI1NSwyNDgsMjIwLDFdLGNyaW1zb246WzIyMCwyMCw2MCwxXSxjeWFuOlswLDI1NSwyNTUsMV0sZGFya2JsdWU6WzAsMCwxMzksMV0sZGFya2N5YW46WzAsMTM5LDEzOSwxXSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExLDFdLGRhcmtncmF5OlsxNjksMTY5LDE2OSwxXSxkYXJrZ3JlZW46WzAsMTAwLDAsMV0sZGFya2dyZXk6WzE2OSwxNjksMTY5LDFdLGRhcmtraGFraTpbMTg5LDE4MywxMDcsMV0sZGFya21hZ2VudGE6WzEzOSwwLDEzOSwxXSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3LDFdLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMCwxXSxkYXJrb3JjaGlkOlsxNTMsNTAsMjA0LDFdLGRhcmtyZWQ6WzEzOSwwLDAsMV0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjIsMV0sZGFya3NlYWdyZWVuOlsxNDMsMTg4LDE0MywxXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzksMV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzksMV0sZGFya3NsYXRlZ3JleTpbNDcsNzksNzksMV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5LDFdLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMSwxXSxkZWVwcGluazpbMjU1LDIwLDE0NywxXSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1LDFdLGRpbWdyYXk6WzEwNSwxMDUsMTA1LDFdLGRpbWdyZXk6WzEwNSwxMDUsMTA1LDFdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTUsMV0sZmlyZWJyaWNrOlsxNzgsMzQsMzQsMV0sZmxvcmFsd2hpdGU6WzI1NSwyNTAsMjQwLDFdLGZvcmVzdGdyZWVuOlszNCwxMzksMzQsMV0sZnVjaHNpYTpbMjU1LDAsMjU1LDFdLGdhaW5zYm9ybzpbMjIwLDIyMCwyMjAsMV0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTUsMV0sZ29sZDpbMjU1LDIxNSwwLDFdLGdvbGRlbnJvZDpbMjE4LDE2NSwzMiwxXSxncmF5OlsxMjgsMTI4LDEyOCwxXSxncmVlbjpbMCwxMjgsMCwxXSxncmVlbnllbGxvdzpbMTczLDI1NSw0NywxXSxncmV5OlsxMjgsMTI4LDEyOCwxXSxob25leWRldzpbMjQwLDI1NSwyNDAsMV0saG90cGluazpbMjU1LDEwNSwxODAsMV0saW5kaWFucmVkOlsyMDUsOTIsOTIsMV0saW5kaWdvOls3NSwwLDEzMCwxXSxpdm9yeTpbMjU1LDI1NSwyNDAsMV0sa2hha2k6WzI0MCwyMzAsMTQwLDFdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MCwxXSxsYXZlbmRlcmJsdXNoOlsyNTUsMjQwLDI0NSwxXSxsYXduZ3JlZW46WzEyNCwyNTIsMCwxXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1LDFdLGxpZ2h0Ymx1ZTpbMTczLDIxNiwyMzAsMV0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjgsMV0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NSwxXSxsaWdodGdvbGRlbnJvZHllbGxvdzpbMjUwLDI1MCwyMTAsMV0sbGlnaHRncmF5OlsyMTEsMjExLDIxMSwxXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NCwxXSxsaWdodGdyZXk6WzIxMSwyMTEsMjExLDFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTMsMV0sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyLDFdLGxpZ2h0c2VhZ3JlZW46WzMyLDE3OCwxNzAsMV0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MCwxXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTMsMV0sbGlnaHRzbGF0ZWdyZXk6WzExOSwxMzYsMTUzLDFdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMiwxXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjQsMV0sbGltZTpbMCwyNTUsMCwxXSxsaW1lZ3JlZW46WzUwLDIwNSw1MCwxXSxsaW5lbjpbMjUwLDI0MCwyMzAsMV0sbWFnZW50YTpbMjU1LDAsMjU1LDFdLG1hcm9vbjpbMTI4LDAsMCwxXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MCwxXSxtZWRpdW1ibHVlOlswLDAsMjA1LDFdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMSwxXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5LDFdLG1lZGl1bXNlYWdyZWVuOls2MCwxNzksMTEzLDFdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzgsMV0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NCwxXSxtZWRpdW10dXJxdW9pc2U6WzcyLDIwOSwyMDQsMV0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzLDFdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyLDFdLG1pbnRjcmVhbTpbMjQ1LDI1NSwyNTAsMV0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNSwxXSxtb2NjYXNpbjpbMjU1LDIyOCwxODEsMV0sbmF2YWpvd2hpdGU6WzI1NSwyMjIsMTczLDFdLG5hdnk6WzAsMCwxMjgsMV0sb2xkbGFjZTpbMjUzLDI0NSwyMzAsMV0sb2xpdmU6WzEyOCwxMjgsMCwxXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzUsMV0sb3JhbmdlOlsyNTUsMTY1LDAsMV0sb3JhbmdlcmVkOlsyNTUsNjksMCwxXSxvcmNoaWQ6WzIxOCwxMTIsMjE0LDFdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwLDFdLHBhbGVncmVlbjpbMTUyLDI1MSwxNTIsMV0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzgsMV0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDcsMV0scGFwYXlhd2hpcDpbMjU1LDIzOSwyMTMsMV0scGVhY2hwdWZmOlsyNTUsMjE4LDE4NSwxXSxwZXJ1OlsyMDUsMTMzLDYzLDFdLHBpbms6WzI1NSwxOTIsMjAzLDFdLHBsdW06WzIyMSwxNjAsMjIxLDFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwLDFdLHB1cnBsZTpbMTI4LDAsMTI4LDFdLHJlYmVjY2FwdXJwbGU6WzEwMiw1MSwxNTMsMV0scmVkOlsyNTUsMCwwLDFdLHJvc3licm93bjpbMTg4LDE0MywxNDMsMV0scm95YWxibHVlOls2NSwxMDUsMjI1LDFdLHNhZGRsZWJyb3duOlsxMzksNjksMTksMV0sc2FsbW9uOlsyNTAsMTI4LDExNCwxXSxzYW5keWJyb3duOlsyNDQsMTY0LDk2LDFdLHNlYWdyZWVuOls0NiwxMzksODcsMV0sc2Vhc2hlbGw6WzI1NSwyNDUsMjM4LDFdLHNpZW5uYTpbMTYwLDgyLDQ1LDFdLHNpbHZlcjpbMTkyLDE5MiwxOTIsMV0sc2t5Ymx1ZTpbMTM1LDIwNiwyMzUsMV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1LDFdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDQsMV0sc2xhdGVncmV5OlsxMTIsMTI4LDE0NCwxXSxzbm93OlsyNTUsMjUwLDI1MCwxXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3LDFdLHN0ZWVsYmx1ZTpbNzAsMTMwLDE4MCwxXSx0YW46WzIxMCwxODAsMTQwLDFdLHRlYWw6WzAsMTI4LDEyOCwxXSx0aGlzdGxlOlsyMTYsMTkxLDIxNiwxXSx0b21hdG86WzI1NSw5OSw3MSwxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDgsMV0sdmlvbGV0OlsyMzgsMTMwLDIzOCwxXSx3aGVhdDpbMjQ1LDIyMiwxNzksMV0sd2hpdGU6WzI1NSwyNTUsMjU1LDFdLHdoaXRlc21va2U6WzI0NSwyNDUsMjQ1LDFdLHllbGxvdzpbMjU1LDI1NSwwLDFdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwLDFdfTtmdW5jdGlvbiBuKHQpe3JldHVybih0PU1hdGgucm91bmQodCkpPDA/MDp0PjI1NT8yNTU6dH1mdW5jdGlvbiBhKHQpe3JldHVybiB0PDA/MDp0PjE/MTp0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIiUiPT09dFt0Lmxlbmd0aC0xXT9uKHBhcnNlRmxvYXQodCkvMTAwKjI1NSk6bihwYXJzZUludCh0KSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4iJSI9PT10W3QubGVuZ3RoLTFdP2EocGFyc2VGbG9hdCh0KS8xMDApOmEocGFyc2VGbG9hdCh0KSl9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIHI8MD9yKz0xOnI+MSYmKHItPTEpLDYqcjwxP3QrKGUtdCkqcio2OjIqcjwxP2U6MypyPDI/dCsoZS10KSooMi8zLXIpKjY6dH10cnl7ZS5wYXJzZUNTU0NvbG9yPWZ1bmN0aW9uKHQpe3ZhciBlLGE9dC5yZXBsYWNlKC8gL2csIiIpLnRvTG93ZXJDYXNlKCk7aWYoYSBpbiByKXJldHVybiByW2FdLnNsaWNlKCk7aWYoIiMiPT09YVswXSlyZXR1cm4gND09PWEubGVuZ3RoPyhlPXBhcnNlSW50KGEuc3Vic3RyKDEpLDE2KSk+PTAmJmU8PTQwOTU/WygzODQwJmUpPj40fCgzODQwJmUpPj44LDI0MCZlfCgyNDAmZSk+PjQsMTUmZXwoMTUmZSk8PDQsMV06bnVsbDo3PT09YS5sZW5ndGgmJihlPXBhcnNlSW50KGEuc3Vic3RyKDEpLDE2KSk+PTAmJmU8PTE2Nzc3MjE1P1soMTY3MTE2ODAmZSk+PjE2LCg2NTI4MCZlKT4+OCwyNTUmZSwxXTpudWxsO3ZhciBsPWEuaW5kZXhPZigiKCIpLGM9YS5pbmRleE9mKCIpIik7aWYoLTEhPT1sJiZjKzE9PT1hLmxlbmd0aCl7dmFyIHU9YS5zdWJzdHIoMCxsKSxoPWEuc3Vic3RyKGwrMSxjLShsKzEpKS5zcGxpdCgiLCIpLGY9MTtzd2l0Y2godSl7Y2FzZSJyZ2JhIjppZig0IT09aC5sZW5ndGgpcmV0dXJuIG51bGw7Zj1vKGgucG9wKCkpO2Nhc2UicmdiIjpyZXR1cm4gMyE9PWgubGVuZ3RoP251bGw6W2koaFswXSksaShoWzFdKSxpKGhbMl0pLGZdO2Nhc2UiaHNsYSI6aWYoNCE9PWgubGVuZ3RoKXJldHVybiBudWxsO2Y9byhoLnBvcCgpKTtjYXNlImhzbCI6aWYoMyE9PWgubGVuZ3RoKXJldHVybiBudWxsO3ZhciBwPShwYXJzZUZsb2F0KGhbMF0pJTM2MCszNjApJTM2MC8zNjAsZD1vKGhbMV0pLGc9byhoWzJdKSx2PWc8PS41P2cqKGQrMSk6ZytkLWcqZCxtPTIqZy12O3JldHVybltuKDI1NSpzKG0sdixwKzEvMykpLG4oMjU1KnMobSx2LHApKSxuKDI1NSpzKG0sdixwLTEvMykpLGZdO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXJldHVybiBudWxsfX1jYXRjaCh0KXt9fSkucGFyc2VDU1NDb2xvcixXdD1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj0xKSx0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9cix0aGlzLmE9bn07V3QucGFyc2U9ZnVuY3Rpb24odCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIFd0KXJldHVybiB0O2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9WXQodCk7aWYoZSlyZXR1cm4gbmV3IFd0KGVbMF0vMjU1KmVbM10sZVsxXS8yNTUqZVszXSxlWzJdLzI1NSplWzNdLGVbM10pfX19LFd0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudG9BcnJheSgpLGU9dFswXSxyPXRbMV0sbj10WzJdLGE9dFszXTtyZXR1cm4icmdiYSgiK01hdGgucm91bmQoZSkrIiwiK01hdGgucm91bmQocikrIiwiK01hdGgucm91bmQobikrIiwiK2ErIikifSxXdC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3ZhciB0PXRoaXMucixlPXRoaXMuZyxyPXRoaXMuYixuPXRoaXMuYTtyZXR1cm4gMD09PW4/WzAsMCwwLDBdOlsyNTUqdC9uLDI1NSplL24sMjU1KnIvbixuXX0sV3QuYmxhY2s9bmV3IFd0KDAsMCwwLDEpLFd0LndoaXRlPW5ldyBXdCgxLDEsMSwxKSxXdC50cmFuc3BhcmVudD1uZXcgV3QoMCwwLDAsMCksV3QucmVkPW5ldyBXdCgxLDAsMCwxKTt2YXIgWHQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc2Vuc2l0aXZpdHk9dD9lPyJ2YXJpYW50IjoiY2FzZSI6ZT8iYWNjZW50IjoiYmFzZSIsdGhpcy5sb2NhbGU9cix0aGlzLmNvbGxhdG9yPW5ldyBJbnRsLkNvbGxhdG9yKHRoaXMubG9jYWxlP3RoaXMubG9jYWxlOltdLHtzZW5zaXRpdml0eTp0aGlzLnNlbnNpdGl2aXR5LHVzYWdlOiJzZWFyY2gifSl9O1h0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY29sbGF0b3IuY29tcGFyZSh0LGUpfSxYdC5wcm90b3R5cGUucmVzb2x2ZWRMb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEludGwuQ29sbGF0b3IodGhpcy5sb2NhbGU/dGhpcy5sb2NhbGU6W10pLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZX07dmFyIFp0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudGV4dD10LHRoaXMuc2NhbGU9ZSx0aGlzLmZvbnRTdGFjaz1yLHRoaXMudGV4dENvbG9yPW59LEp0PWZ1bmN0aW9uKHQpe3RoaXMuc2VjdGlvbnM9dH07ZnVuY3Rpb24gS3QodCxlLHIsbil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wJiZ0PD0yNTUmJiJudW1iZXIiPT10eXBlb2YgZSYmZT49MCYmZTw9MjU1JiYibnVtYmVyIj09dHlwZW9mIHImJnI+PTAmJnI8PTI1NT92b2lkIDA9PT1ufHwibnVtYmVyIj09dHlwZW9mIG4mJm4+PTAmJm48PTE/bnVsbDoiSW52YWxpZCByZ2JhIHZhbHVlIFsiK1t0LGUscixuXS5qb2luKCIsICIpKyJdOiAnYScgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEuIjoiSW52YWxpZCByZ2JhIHZhbHVlIFsiKygibnVtYmVyIj09dHlwZW9mIG4/W3QsZSxyLG5dOlt0LGUscl0pLmpvaW4oIiwgIikrIl06ICdyJywgJ2cnLCBhbmQgJ2InIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTUuIn1mdW5jdGlvbiBRdCh0KXtpZihudWxsPT09dClyZXR1cm4genQ7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBEdDtpZigiYm9vbGVhbiI9PXR5cGVvZiB0KXJldHVybiBSdDtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIEl0O2lmKHQgaW5zdGFuY2VvZiBXdClyZXR1cm4gRnQ7aWYodCBpbnN0YW5jZW9mIFh0KXJldHVybiBqdDtpZih0IGluc3RhbmNlb2YgSnQpcmV0dXJuIFZ0O2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49MCxhPXQ7bjxhLmxlbmd0aDtuKz0xKXt2YXIgaT1RdChhW25dKTtpZihlKXtpZihlPT09aSljb250aW51ZTtlPU50O2JyZWFrfWU9aX1yZXR1cm4gVXQoZXx8TnQscil9cmV0dXJuIEJ0fWZ1bmN0aW9uICR0KHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsPT09dD8iIjoic3RyaW5nIj09PWV8fCJudW1iZXIiPT09ZXx8ImJvb2xlYW4iPT09ZT9TdHJpbmcodCk6dCBpbnN0YW5jZW9mIFd0fHx0IGluc3RhbmNlb2YgSnQ/dC50b1N0cmluZygpOkpTT04uc3RyaW5naWZ5KHQpfUp0LmZyb21TdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBKdChbbmV3IFp0KHQsbnVsbCxudWxsLG51bGwpXSl9LEp0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlY3Rpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0fSkuam9pbigiIil9LEp0LnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9WyJmb3JtYXQiXSxlPTAscj10aGlzLnNlY3Rpb25zO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTt0LnB1c2gobi50ZXh0KTt2YXIgYT17fTtuLmZvbnRTdGFjayYmKGFbInRleHQtZm9udCJdPVsibGl0ZXJhbCIsbi5mb250U3RhY2suc3BsaXQoIiwiKV0pLG4uc2NhbGUmJihhWyJmb250LXNjYWxlIl09bi5zY2FsZSksbi50ZXh0Q29sb3ImJihhWyJ0ZXh0LWNvbG9yIl09WyJyZ2JhIl0uY29uY2F0KG4udGV4dENvbG9yLnRvQXJyYXkoKSkpLHQucHVzaChhKX1yZXR1cm4gdH07dmFyIHRlPWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy52YWx1ZT1lfTt0ZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiJ2xpdGVyYWwnIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7aWYoIWZ1bmN0aW9uIHQoZSl7aWYobnVsbD09PWUpcmV0dXJuITA7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiEwO2lmKCJib29sZWFuIj09dHlwZW9mIGUpcmV0dXJuITA7aWYoIm51bWJlciI9PXR5cGVvZiBlKXJldHVybiEwO2lmKGUgaW5zdGFuY2VvZiBXdClyZXR1cm4hMDtpZihlIGluc3RhbmNlb2YgWHQpcmV0dXJuITA7aWYoZSBpbnN0YW5jZW9mIEp0KXJldHVybiEwO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcj0wLG49ZTtyPG4ubGVuZ3RoO3IrPTEpaWYoIXQobltyXSkpcmV0dXJuITE7cmV0dXJuITB9aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3IodmFyIGEgaW4gZSlpZighdChlW2FdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX0odFsxXSkpcmV0dXJuIGUuZXJyb3IoImludmFsaWQgdmFsdWUiKTt2YXIgcj10WzFdLG49UXQociksYT1lLmV4cGVjdGVkVHlwZTtyZXR1cm4iYXJyYXkiIT09bi5raW5kfHwwIT09bi5OfHwhYXx8ImFycmF5IiE9PWEua2luZHx8Im51bWJlciI9PXR5cGVvZiBhLk4mJjAhPT1hLk58fChuPWEpLG5ldyB0ZShuLHIpfSx0ZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX0sdGUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbigpe30sdGUucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt0aGlzLnZhbHVlXX0sdGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiJhcnJheSI9PT10aGlzLnR5cGUua2luZHx8Im9iamVjdCI9PT10aGlzLnR5cGUua2luZD9bImxpdGVyYWwiLHRoaXMudmFsdWVdOnRoaXMudmFsdWUgaW5zdGFuY2VvZiBXdD9bInJnYmEiXS5jb25jYXQodGhpcy52YWx1ZS50b0FycmF5KCkpOnRoaXMudmFsdWUgaW5zdGFuY2VvZiBKdD90aGlzLnZhbHVlLnNlcmlhbGl6ZSgpOnRoaXMudmFsdWV9O3ZhciBlZT1mdW5jdGlvbih0KXt0aGlzLm5hbWU9IkV4cHJlc3Npb25FdmFsdWF0aW9uRXJyb3IiLHRoaXMubWVzc2FnZT10fTtlZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZX07dmFyIHJlPXtzdHJpbmc6RHQsbnVtYmVyOkl0LGJvb2xlYW46UnQsb2JqZWN0OkJ0fSxuZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuYXJncz1lfTtuZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKTt2YXIgcixuPTEsYT10WzBdO2lmKCJhcnJheSI9PT1hKXt2YXIgaSxvO2lmKHQubGVuZ3RoPjIpe3ZhciBzPXRbMV07aWYoInN0cmluZyIhPXR5cGVvZiBzfHwhKHMgaW4gcmUpfHwib2JqZWN0Ij09PXMpcmV0dXJuIGUuZXJyb3IoJ1RoZSBpdGVtIHR5cGUgYXJndW1lbnQgb2YgImFycmF5IiBtdXN0IGJlIG9uZSBvZiBzdHJpbmcsIG51bWJlciwgYm9vbGVhbicsMSk7aT1yZVtzXSxuKyt9ZWxzZSBpPU50O2lmKHQubGVuZ3RoPjMpe2lmKG51bGwhPT10WzJdJiYoIm51bWJlciIhPXR5cGVvZiB0WzJdfHx0WzJdPDB8fHRbMl0hPT1NYXRoLmZsb29yKHRbMl0pKSlyZXR1cm4gZS5lcnJvcignVGhlIGxlbmd0aCBhcmd1bWVudCB0byAiYXJyYXkiIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxpdGVyYWwnLDIpO289dFsyXSxuKyt9cj1VdChpLG8pfWVsc2Ugcj1yZVthXTtmb3IodmFyIGw9W107bjx0Lmxlbmd0aDtuKyspe3ZhciBjPWUucGFyc2UodFtuXSxuLE50KTtpZighYylyZXR1cm4gbnVsbDtsLnB1c2goYyl9cmV0dXJuIG5ldyBuZShyLGwpfSxuZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmFyZ3MubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5hcmdzW2VdLmV2YWx1YXRlKHQpO2lmKCFHdCh0aGlzLnR5cGUsUXQocikpKXJldHVybiByO2lmKGU9PT10aGlzLmFyZ3MubGVuZ3RoLTEpdGhyb3cgbmV3IGVlKCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlICIrcXQodGhpcy50eXBlKSsiLCBidXQgZm91bmQgIitxdChRdChyKSkrIiBpbnN0ZWFkLiIpfXJldHVybiBudWxsfSxuZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxuZS5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSl9LG5lLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnR5cGUsZT1bdC5raW5kXTtpZigiYXJyYXkiPT09dC5raW5kKXt2YXIgcj10Lml0ZW1UeXBlO2lmKCJzdHJpbmciPT09ci5raW5kfHwibnVtYmVyIj09PXIua2luZHx8ImJvb2xlYW4iPT09ci5raW5kKXtlLnB1c2goci5raW5kKTt2YXIgbj10Lk47KCJudW1iZXIiPT10eXBlb2Ygbnx8dGhpcy5hcmdzLmxlbmd0aD4xKSYmZS5wdXNoKG4pfX1yZXR1cm4gZS5jb25jYXQodGhpcy5hcmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZXJpYWxpemUoKX0pKX07dmFyIGFlPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT1WdCx0aGlzLnNlY3Rpb25zPXR9O2FlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MylyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgdHdvIGFyZ3VtZW50cy4iKTtpZigodC5sZW5ndGgtMSklMiE9MClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLiIpO2Zvcih2YXIgcj1bXSxuPTE7bjx0Lmxlbmd0aC0xO24rPTIpe3ZhciBhPWUucGFyc2UodFtuXSwxLE50KTtpZighYSlyZXR1cm4gbnVsbDt2YXIgaT1hLnR5cGUua2luZDtpZigic3RyaW5nIiE9PWkmJiJ2YWx1ZSIhPT1pJiYibnVsbCIhPT1pKXJldHVybiBlLmVycm9yKCJGb3JtYXR0ZWQgdGV4dCB0eXBlIG11c3QgYmUgJ3N0cmluZycsICd2YWx1ZScsIG9yICdudWxsJy4iKTt2YXIgbz10W24rMV07aWYoIm9iamVjdCIhPXR5cGVvZiBvfHxBcnJheS5pc0FycmF5KG8pKXJldHVybiBlLmVycm9yKCJGb3JtYXQgb3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC4iKTt2YXIgcz1udWxsO2lmKG9bImZvbnQtc2NhbGUiXSYmIShzPWUucGFyc2Uob1siZm9udC1zY2FsZSJdLDEsSXQpKSlyZXR1cm4gbnVsbDt2YXIgbD1udWxsO2lmKG9bInRleHQtZm9udCJdJiYhKGw9ZS5wYXJzZShvWyJ0ZXh0LWZvbnQiXSwxLFV0KER0KSkpKXJldHVybiBudWxsO3ZhciBjPW51bGw7aWYob1sidGV4dC1jb2xvciJdJiYhKGM9ZS5wYXJzZShvWyJ0ZXh0LWNvbG9yIl0sMSxGdCkpKXJldHVybiBudWxsO3IucHVzaCh7dGV4dDphLHNjYWxlOnMsZm9udDpsLHRleHRDb2xvcjpjfSl9cmV0dXJuIG5ldyBhZShyKX0sYWUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSnQodGhpcy5zZWN0aW9ucy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBadCgkdChlLnRleHQuZXZhbHVhdGUodCkpLGUuc2NhbGU/ZS5zY2FsZS5ldmFsdWF0ZSh0KTpudWxsLGUuZm9udD9lLmZvbnQuZXZhbHVhdGUodCkuam9pbigiLCIpOm51bGwsZS50ZXh0Q29sb3I/ZS50ZXh0Q29sb3IuZXZhbHVhdGUodCk6bnVsbCl9KSl9LGFlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLnNlY3Rpb25zO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTt0KG4udGV4dCksbi5zY2FsZSYmdChuLnNjYWxlKSxuLmZvbnQmJnQobi5mb250KSxuLnRleHRDb2xvciYmdChuLnRleHRDb2xvcil9fSxhZS5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuW3ZvaWQgMF19LGFlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9WyJmb3JtYXQiXSxlPTAscj10aGlzLnNlY3Rpb25zO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTt0LnB1c2gobi50ZXh0LnNlcmlhbGl6ZSgpKTt2YXIgYT17fTtuLnNjYWxlJiYoYVsiZm9udC1zY2FsZSJdPW4uc2NhbGUuc2VyaWFsaXplKCkpLG4uZm9udCYmKGFbInRleHQtZm9udCJdPW4uZm9udC5zZXJpYWxpemUoKSksbi50ZXh0Q29sb3ImJihhWyJ0ZXh0LWNvbG9yIl09bi50ZXh0Q29sb3Iuc2VyaWFsaXplKCkpLHQucHVzaChhKX1yZXR1cm4gdH07dmFyIGllPXsidG8tYm9vbGVhbiI6UnQsInRvLWNvbG9yIjpGdCwidG8tbnVtYmVyIjpJdCwidG8tc3RyaW5nIjpEdH0sb2U9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLmFyZ3M9ZX07b2UucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIik7dmFyIHI9dFswXTtpZigoInRvLWJvb2xlYW4iPT09cnx8InRvLXN0cmluZyI9PT1yKSYmMiE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBvbmUgYXJndW1lbnQuIik7Zm9yKHZhciBuPWllW3JdLGE9W10saT0xO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz1lLnBhcnNlKHRbaV0saSxOdCk7aWYoIW8pcmV0dXJuIG51bGw7YS5wdXNoKG8pfXJldHVybiBuZXcgb2UobixhKX0sb2UucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2lmKCJib29sZWFuIj09PXRoaXMudHlwZS5raW5kKXJldHVybiBCb29sZWFuKHRoaXMuYXJnc1swXS5ldmFsdWF0ZSh0KSk7aWYoImNvbG9yIj09PXRoaXMudHlwZS5raW5kKXtmb3IodmFyIGUscixuPTAsYT10aGlzLmFyZ3M7bjxhLmxlbmd0aDtuKz0xKXtpZihyPW51bGwsKGU9YVtuXS5ldmFsdWF0ZSh0KSlpbnN0YW5jZW9mIFd0KXJldHVybiBlO2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dmFyIGk9dC5wYXJzZUNvbG9yKGUpO2lmKGkpcmV0dXJuIGl9ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpJiYhKHI9ZS5sZW5ndGg8M3x8ZS5sZW5ndGg+ND8iSW52YWxpZCByYmdhIHZhbHVlICIrSlNPTi5zdHJpbmdpZnkoZSkrIjogZXhwZWN0ZWQgYW4gYXJyYXkgY29udGFpbmluZyBlaXRoZXIgdGhyZWUgb3IgZm91ciBudW1lcmljIHZhbHVlcy4iOkt0KGVbMF0sZVsxXSxlWzJdLGVbM10pKSlyZXR1cm4gbmV3IFd0KGVbMF0vMjU1LGVbMV0vMjU1LGVbMl0vMjU1LGVbM10pfXRocm93IG5ldyBlZShyfHwiQ291bGQgbm90IHBhcnNlIGNvbG9yIGZyb20gdmFsdWUgJyIrKCJzdHJpbmciPT10eXBlb2YgZT9lOlN0cmluZyhKU09OLnN0cmluZ2lmeShlKSkpKyInIil9aWYoIm51bWJlciI9PT10aGlzLnR5cGUua2luZCl7Zm9yKHZhciBvPW51bGwscz0wLGw9dGhpcy5hcmdzO3M8bC5sZW5ndGg7cys9MSl7aWYobnVsbD09PShvPWxbc10uZXZhbHVhdGUodCkpKXJldHVybiAwO3ZhciBjPU51bWJlcihvKTtpZighaXNOYU4oYykpcmV0dXJuIGN9dGhyb3cgbmV3IGVlKCJDb3VsZCBub3QgY29udmVydCAiK0pTT04uc3RyaW5naWZ5KG8pKyIgdG8gbnVtYmVyLiIpfXJldHVybiJmb3JtYXR0ZWQiPT09dGhpcy50eXBlLmtpbmQ/SnQuZnJvbVN0cmluZygkdCh0aGlzLmFyZ3NbMF0uZXZhbHVhdGUodCkpKTokdCh0aGlzLmFyZ3NbMF0uZXZhbHVhdGUodCkpfSxvZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxvZS5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSl9LG9lLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtpZigiZm9ybWF0dGVkIj09PXRoaXMudHlwZS5raW5kKXJldHVybiBuZXcgYWUoW3t0ZXh0OnRoaXMuYXJnc1swXSxzY2FsZTpudWxsLGZvbnQ6bnVsbCx0ZXh0Q29sb3I6bnVsbH1dKS5zZXJpYWxpemUoKTt2YXIgdD1bInRvLSIrdGhpcy50eXBlLmtpbmRdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSx0fTt2YXIgc2U9WyJVbmtub3duIiwiUG9pbnQiLCJMaW5lU3RyaW5nIiwiUG9seWdvbiJdLGxlPWZ1bmN0aW9uKCl7dGhpcy5nbG9iYWxzPW51bGwsdGhpcy5mZWF0dXJlPW51bGwsdGhpcy5mZWF0dXJlU3RhdGU9bnVsbCx0aGlzLmZvcm1hdHRlZFNlY3Rpb249bnVsbCx0aGlzLl9wYXJzZUNvbG9yQ2FjaGU9e319O2xlLnByb3RvdHlwZS5pZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZlYXR1cmUmJiJpZCJpbiB0aGlzLmZlYXR1cmU/dGhpcy5mZWF0dXJlLmlkOm51bGx9LGxlLnByb3RvdHlwZS5nZW9tZXRyeVR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZWF0dXJlPyJudW1iZXIiPT10eXBlb2YgdGhpcy5mZWF0dXJlLnR5cGU/c2VbdGhpcy5mZWF0dXJlLnR5cGVdOnRoaXMuZmVhdHVyZS50eXBlOm51bGx9LGxlLnByb3RvdHlwZS5wcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZSYmdGhpcy5mZWF0dXJlLnByb3BlcnRpZXN8fHt9fSxsZS5wcm90b3R5cGUucGFyc2VDb2xvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYXJzZUNvbG9yQ2FjaGVbdF07cmV0dXJuIGV8fChlPXRoaXMuX3BhcnNlQ29sb3JDYWNoZVt0XT1XdC5wYXJzZSh0KSksZX07dmFyIGNlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuX2V2YWx1YXRlPXIsdGhpcy5hcmdzPW59O2NlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZhbHVhdGUodCx0aGlzLmFyZ3MpfSxjZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxjZS5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuW3ZvaWQgMF19LGNlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5uYW1lXS5jb25jYXQodGhpcy5hcmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZXJpYWxpemUoKX0pKX0sY2UucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRbMF0sYT1jZS5kZWZpbml0aW9uc1tuXTtpZighYSlyZXR1cm4gZS5lcnJvcignVW5rbm93biBleHByZXNzaW9uICInK24rJyIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgWyJsaXRlcmFsIiwgWy4uLl1dLicsMCk7Zm9yKHZhciBpPUFycmF5LmlzQXJyYXkoYSk/YVswXTphLnR5cGUsbz1BcnJheS5pc0FycmF5KGEpP1tbYVsxXSxhWzJdXV06YS5vdmVybG9hZHMscz1vLmZpbHRlcihmdW5jdGlvbihlKXt2YXIgcj1lWzBdO3JldHVybiFBcnJheS5pc0FycmF5KHIpfHxyLmxlbmd0aD09PXQubGVuZ3RoLTF9KSxsPW51bGwsYz0wLHU9cztjPHUubGVuZ3RoO2MrPTEpe3ZhciBoPXVbY10sZj1oWzBdLHA9aFsxXTtsPW5ldyBnZShlLnJlZ2lzdHJ5LGUucGF0aCxudWxsLGUuc2NvcGUpO2Zvcih2YXIgZD1bXSxnPSExLHY9MTt2PHQubGVuZ3RoO3YrKyl7dmFyIG09dFt2XSx5PUFycmF5LmlzQXJyYXkoZik/Zlt2LTFdOmYudHlwZSx4PWwucGFyc2UobSwxK2QubGVuZ3RoLHkpO2lmKCF4KXtnPSEwO2JyZWFrfWQucHVzaCh4KX1pZighZylpZihBcnJheS5pc0FycmF5KGYpJiZmLmxlbmd0aCE9PWQubGVuZ3RoKWwuZXJyb3IoIkV4cGVjdGVkICIrZi5sZW5ndGgrIiBhcmd1bWVudHMsIGJ1dCBmb3VuZCAiK2QubGVuZ3RoKyIgaW5zdGVhZC4iKTtlbHNle2Zvcih2YXIgYj0wO2I8ZC5sZW5ndGg7YisrKXt2YXIgXz1BcnJheS5pc0FycmF5KGYpP2ZbYl06Zi50eXBlLHc9ZFtiXTtsLmNvbmNhdChiKzEpLmNoZWNrU3VidHlwZShfLHcudHlwZSl9aWYoMD09PWwuZXJyb3JzLmxlbmd0aClyZXR1cm4gbmV3IGNlKG4saSxwLGQpfX1pZigxPT09cy5sZW5ndGgpKHI9ZS5lcnJvcnMpLnB1c2guYXBwbHkocixsLmVycm9ycyk7ZWxzZXtmb3IodmFyIGs9KHMubGVuZ3RoP3M6bykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBlPXRbMF0sQXJyYXkuaXNBcnJheShlKT8iKCIrZS5tYXAocXQpLmpvaW4oIiwgIikrIikiOiIoIitxdChlLnR5cGUpKyIuLi4pIn0pLmpvaW4oIiB8ICIpLFQ9W10sTT0xO008dC5sZW5ndGg7TSsrKXt2YXIgQT1lLnBhcnNlKHRbTV0sMStULmxlbmd0aCk7aWYoIUEpcmV0dXJuIG51bGw7VC5wdXNoKHF0KEEudHlwZSkpfWUuZXJyb3IoIkV4cGVjdGVkIGFyZ3VtZW50cyBvZiB0eXBlICIraysiLCBidXQgZm91bmQgKCIrVC5qb2luKCIsICIpKyIpIGluc3RlYWQuIil9cmV0dXJuIG51bGx9LGNlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGNlLmRlZmluaXRpb25zPWUsZSl0W3JdPWNlfTt2YXIgdWU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT1qdCx0aGlzLmxvY2FsZT1yLHRoaXMuY2FzZVNlbnNpdGl2ZT10LHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlPWV9O2Z1bmN0aW9uIGhlKHQpe2lmKHQgaW5zdGFuY2VvZiBjZSl7aWYoImdldCI9PT10Lm5hbWUmJjE9PT10LmFyZ3MubGVuZ3RoKXJldHVybiExO2lmKCJmZWF0dXJlLXN0YXRlIj09PXQubmFtZSlyZXR1cm4hMTtpZigiaGFzIj09PXQubmFtZSYmMT09PXQuYXJncy5sZW5ndGgpcmV0dXJuITE7aWYoInByb3BlcnRpZXMiPT09dC5uYW1lfHwiZ2VvbWV0cnktdHlwZSI9PT10Lm5hbWV8fCJpZCI9PT10Lm5hbWUpcmV0dXJuITE7aWYoL15maWx0ZXItLy50ZXN0KHQubmFtZSkpcmV0dXJuITF9dmFyIGU9ITA7cmV0dXJuIHQuZWFjaENoaWxkKGZ1bmN0aW9uKHQpe2UmJiFoZSh0KSYmKGU9ITEpfSksZX1mdW5jdGlvbiBmZSh0KXtpZih0IGluc3RhbmNlb2YgY2UmJiJmZWF0dXJlLXN0YXRlIj09PXQubmFtZSlyZXR1cm4hMTt2YXIgZT0hMDtyZXR1cm4gdC5lYWNoQ2hpbGQoZnVuY3Rpb24odCl7ZSYmIWZlKHQpJiYoZT0hMSl9KSxlfWZ1bmN0aW9uIHBlKHQsZSl7aWYodCBpbnN0YW5jZW9mIGNlJiZlLmluZGV4T2YodC5uYW1lKT49MClyZXR1cm4hMTt2YXIgcj0hMDtyZXR1cm4gdC5lYWNoQ2hpbGQoZnVuY3Rpb24odCl7ciYmIXBlKHQsZSkmJihyPSExKX0pLHJ9dWUucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIG9uZSBhcmd1bWVudC4iKTt2YXIgcj10WzFdO2lmKCJvYmplY3QiIT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm4gZS5lcnJvcigiQ29sbGF0b3Igb3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC4iKTt2YXIgbj1lLnBhcnNlKHZvaWQgMCE9PXJbImNhc2Utc2Vuc2l0aXZlIl0mJnJbImNhc2Utc2Vuc2l0aXZlIl0sMSxSdCk7aWYoIW4pcmV0dXJuIG51bGw7dmFyIGE9ZS5wYXJzZSh2b2lkIDAhPT1yWyJkaWFjcml0aWMtc2Vuc2l0aXZlIl0mJnJbImRpYWNyaXRpYy1zZW5zaXRpdmUiXSwxLFJ0KTtpZighYSlyZXR1cm4gbnVsbDt2YXIgaT1udWxsO3JldHVybiByLmxvY2FsZSYmIShpPWUucGFyc2Uoci5sb2NhbGUsMSxEdCkpP251bGw6bmV3IHVlKG4sYSxpKX0sdWUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWHQodGhpcy5jYXNlU2Vuc2l0aXZlLmV2YWx1YXRlKHQpLHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlLmV2YWx1YXRlKHQpLHRoaXMubG9jYWxlP3RoaXMubG9jYWxlLmV2YWx1YXRlKHQpOm51bGwpfSx1ZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5jYXNlU2Vuc2l0aXZlKSx0KHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlKSx0aGlzLmxvY2FsZSYmdCh0aGlzLmxvY2FsZSl9LHVlLnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0sdWUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0WyJjYXNlLXNlbnNpdGl2ZSJdPXRoaXMuY2FzZVNlbnNpdGl2ZS5zZXJpYWxpemUoKSx0WyJkaWFjcml0aWMtc2Vuc2l0aXZlIl09dGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuc2VyaWFsaXplKCksdGhpcy5sb2NhbGUmJih0LmxvY2FsZT10aGlzLmxvY2FsZS5zZXJpYWxpemUoKSksWyJjb2xsYXRvciIsdF19O3ZhciBkZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1lLnR5cGUsdGhpcy5uYW1lPXQsdGhpcy5ib3VuZEV4cHJlc3Npb249ZX07ZGUucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGh8fCJzdHJpbmciIT10eXBlb2YgdFsxXSlyZXR1cm4gZS5lcnJvcigiJ3ZhcicgZXhwcmVzc2lvbiByZXF1aXJlcyBleGFjdGx5IG9uZSBzdHJpbmcgbGl0ZXJhbCBhcmd1bWVudC4iKTt2YXIgcj10WzFdO3JldHVybiBlLnNjb3BlLmhhcyhyKT9uZXcgZGUocixlLnNjb3BlLmdldChyKSk6ZS5lcnJvcignVW5rbm93biB2YXJpYWJsZSAiJytyKyciLiBNYWtlIHN1cmUgIicrcisnIiBoYXMgYmVlbiBib3VuZCBpbiBhbiBlbmNsb3NpbmcgImxldCIgZXhwcmVzc2lvbiBiZWZvcmUgdXNpbmcgaXQuJywxKX0sZGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJvdW5kRXhwcmVzc2lvbi5ldmFsdWF0ZSh0KX0sZGUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbigpe30sZGUucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfSxkZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuWyJ2YXIiLHRoaXMubmFtZV19O3ZhciBnZT1mdW5jdGlvbih0LGUscixuLGEpe3ZvaWQgMD09PWUmJihlPVtdKSx2b2lkIDA9PT1uJiYobj1uZXcgT3QpLHZvaWQgMD09PWEmJihhPVtdKSx0aGlzLnJlZ2lzdHJ5PXQsdGhpcy5wYXRoPWUsdGhpcy5rZXk9ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIlsiK3QrIl0ifSkuam9pbigiIiksdGhpcy5zY29wZT1uLHRoaXMuZXJyb3JzPWEsdGhpcy5leHBlY3RlZFR5cGU9cn07ZnVuY3Rpb24gdmUodCxlKXtmb3IodmFyIHIsbixhPXQubGVuZ3RoLTEsaT0wLG89YSxzPTA7aTw9bzspaWYocj10W3M9TWF0aC5mbG9vcigoaStvKS8yKV0sbj10W3MrMV0scjw9ZSl7aWYocz09PWF8fGU8bilyZXR1cm4gcztpPXMrMX1lbHNle2lmKCEocj5lKSl0aHJvdyBuZXcgZWUoIklucHV0IGlzIG5vdCBhIG51bWJlci4iKTtvPXMtMX1yZXR1cm4gMH1nZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCxlLHIsbixhKXtyZXR1cm4gdm9pZCAwPT09YSYmKGE9e30pLGU/dGhpcy5jb25jYXQoZSxyLG4pLl9wYXJzZSh0LGEpOnRoaXMuX3BhcnNlKHQsYSl9LGdlLnByb3RvdHlwZS5fcGFyc2U9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSxyKXtyZXR1cm4iYXNzZXJ0Ij09PXI/bmV3IG5lKGUsW3RdKToiY29lcmNlIj09PXI/bmV3IG9lKGUsW3RdKTp0fWlmKG51bGwhPT10JiYic3RyaW5nIiE9dHlwZW9mIHQmJiJib29sZWFuIiE9dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdHx8KHQ9WyJsaXRlcmFsIix0XSksQXJyYXkuaXNBcnJheSh0KSl7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLmVycm9yKCdFeHBlY3RlZCBhbiBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFsibGl0ZXJhbCIsIFtdXS4nKTt2YXIgbj10WzBdO2lmKCJzdHJpbmciIT10eXBlb2YgbilyZXR1cm4gdGhpcy5lcnJvcigiRXhwcmVzc2lvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGJ1dCBmb3VuZCAiK3R5cGVvZiBuKycgaW5zdGVhZC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbImxpdGVyYWwiLCBbLi4uXV0uJywwKSxudWxsO3ZhciBhPXRoaXMucmVnaXN0cnlbbl07aWYoYSl7dmFyIGk9YS5wYXJzZSh0LHRoaXMpO2lmKCFpKXJldHVybiBudWxsO2lmKHRoaXMuZXhwZWN0ZWRUeXBlKXt2YXIgbz10aGlzLmV4cGVjdGVkVHlwZSxzPWkudHlwZTtpZigic3RyaW5nIiE9PW8ua2luZCYmIm51bWJlciIhPT1vLmtpbmQmJiJib29sZWFuIiE9PW8ua2luZCYmIm9iamVjdCIhPT1vLmtpbmQmJiJhcnJheSIhPT1vLmtpbmR8fCJ2YWx1ZSIhPT1zLmtpbmQpaWYoImNvbG9yIiE9PW8ua2luZCYmImZvcm1hdHRlZCIhPT1vLmtpbmR8fCJ2YWx1ZSIhPT1zLmtpbmQmJiJzdHJpbmciIT09cy5raW5kKXtpZih0aGlzLmNoZWNrU3VidHlwZShvLHMpKXJldHVybiBudWxsfWVsc2UgaT1yKGksbyxlLnR5cGVBbm5vdGF0aW9ufHwiY29lcmNlIik7ZWxzZSBpPXIoaSxvLGUudHlwZUFubm90YXRpb258fCJhc3NlcnQiKX1pZighKGkgaW5zdGFuY2VvZiB0ZSkmJmZ1bmN0aW9uIHQoZSl7aWYoZSBpbnN0YW5jZW9mIGRlKXJldHVybiB0KGUuYm91bmRFeHByZXNzaW9uKTtpZihlIGluc3RhbmNlb2YgY2UmJiJlcnJvciI9PT1lLm5hbWUpcmV0dXJuITE7aWYoZSBpbnN0YW5jZW9mIHVlKXJldHVybiExO3ZhciByPWUgaW5zdGFuY2VvZiBvZXx8ZSBpbnN0YW5jZW9mIG5lLG49ITA7cmV0dXJuIGUuZWFjaENoaWxkKGZ1bmN0aW9uKGUpe249cj9uJiZ0KGUpOm4mJmUgaW5zdGFuY2VvZiB0ZX0pLCEhbiYmKGhlKGUpJiZwZShlLFsiem9vbSIsImhlYXRtYXAtZGVuc2l0eSIsImxpbmUtcHJvZ3Jlc3MiLCJhY2N1bXVsYXRlZCIsImlzLXN1cHBvcnRlZC1zY3JpcHQiXSkpfShpKSl7dmFyIGw9bmV3IGxlO3RyeXtpPW5ldyB0ZShpLnR5cGUsaS5ldmFsdWF0ZShsKSl9Y2F0Y2godCl7cmV0dXJuIHRoaXMuZXJyb3IodC5tZXNzYWdlKSxudWxsfX1yZXR1cm4gaX1yZXR1cm4gdGhpcy5lcnJvcignVW5rbm93biBleHByZXNzaW9uICInK24rJyIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgWyJsaXRlcmFsIiwgWy4uLl1dLicsMCl9cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5lcnJvcigiJ3VuZGVmaW5lZCcgdmFsdWUgaW52YWxpZC4gVXNlIG51bGwgaW5zdGVhZC4iKToib2JqZWN0Ij09dHlwZW9mIHQ/dGhpcy5lcnJvcignQmFyZSBvYmplY3RzIGludmFsaWQuIFVzZSBbImxpdGVyYWwiLCB7Li4ufV0gaW5zdGVhZC4nKTp0aGlzLmVycm9yKCJFeHBlY3RlZCBhbiBhcnJheSwgYnV0IGZvdW5kICIrdHlwZW9mIHQrIiBpbnN0ZWFkLiIpfSxnZS5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0ibnVtYmVyIj09dHlwZW9mIHQ/dGhpcy5wYXRoLmNvbmNhdCh0KTp0aGlzLnBhdGgsYT1yP3RoaXMuc2NvcGUuY29uY2F0KHIpOnRoaXMuc2NvcGU7cmV0dXJuIG5ldyBnZSh0aGlzLnJlZ2lzdHJ5LG4sZXx8bnVsbCxhLHRoaXMuZXJyb3JzKX0sZ2UucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07dmFyIG49IiIrdGhpcy5rZXkrZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIlsiK3QrIl0ifSkuam9pbigiIik7dGhpcy5lcnJvcnMucHVzaChuZXcgUHQobix0KSl9LGdlLnByb3RvdHlwZS5jaGVja1N1YnR5cGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1HdCh0LGUpO3JldHVybiByJiZ0aGlzLmVycm9yKHIpLHJ9O3ZhciBtZT1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXQsdGhpcy5pbnB1dD1lLHRoaXMubGFiZWxzPVtdLHRoaXMub3V0cHV0cz1bXTtmb3IodmFyIG49MCxhPXI7bjxhLmxlbmd0aDtuKz0xKXt2YXIgaT1hW25dLG89aVswXSxzPWlbMV07dGhpcy5sYWJlbHMucHVzaChvKSx0aGlzLm91dHB1dHMucHVzaChzKX19O2Z1bmN0aW9uIHllKHQsZSxyKXtyZXR1cm4gdCooMS1yKStlKnJ9bWUucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aC0xPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKCh0Lmxlbmd0aC0xKSUyIT0wKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEsSXQpO2lmKCFyKXJldHVybiBudWxsO3ZhciBuPVtdLGE9bnVsbDtlLmV4cGVjdGVkVHlwZSYmInZhbHVlIiE9PWUuZXhwZWN0ZWRUeXBlLmtpbmQmJihhPWUuZXhwZWN0ZWRUeXBlKTtmb3IodmFyIGk9MTtpPHQubGVuZ3RoO2krPTIpe3ZhciBvPTE9PT1pPy0xLzA6dFtpXSxzPXRbaSsxXSxsPWksYz1pKzE7aWYoIm51bWJlciIhPXR5cGVvZiBvKXJldHVybiBlLmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yICJzdGVwIiBleHByZXNzaW9ucyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgbGl0ZXJhbCBudW1lcmljIHZhbHVlcyAobm90IGNvbXB1dGVkIGV4cHJlc3Npb25zKSBmb3IgdGhlIGlucHV0IHZhbHVlcy4nLGwpO2lmKG4ubGVuZ3RoJiZuW24ubGVuZ3RoLTFdWzBdPj1vKXJldHVybiBlLmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yICJzdGVwIiBleHByZXNzaW9ucyBtdXN0IGJlIGFycmFuZ2VkIHdpdGggaW5wdXQgdmFsdWVzIGluIHN0cmljdGx5IGFzY2VuZGluZyBvcmRlci4nLGwpO3ZhciB1PWUucGFyc2UocyxjLGEpO2lmKCF1KXJldHVybiBudWxsO2E9YXx8dS50eXBlLG4ucHVzaChbbyx1XSl9cmV0dXJuIG5ldyBtZShhLHIsbil9LG1lLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhYmVscyxyPXRoaXMub3V0cHV0cztpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIG49dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihuPD1lWzBdKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBhPWUubGVuZ3RoO3JldHVybiBuPj1lW2EtMV0/clthLTFdLmV2YWx1YXRlKHQpOnJbdmUoZSxuKV0uZXZhbHVhdGUodCl9LG1lLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KTtmb3IodmFyIGU9MCxyPXRoaXMub3V0cHV0cztlPHIubGVuZ3RoO2UrPTEpdChyW2VdKX0sbWUucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3ZhciB0O3JldHVybih0PVtdKS5jb25jYXQuYXBwbHkodCx0aGlzLm91dHB1dHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvc3NpYmxlT3V0cHV0cygpfSkpfSxtZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVsic3RlcCIsdGhpcy5pbnB1dC5zZXJpYWxpemUoKV0sZT0wO2U8dGhpcy5sYWJlbHMubGVuZ3RoO2UrKyllPjAmJnQucHVzaCh0aGlzLmxhYmVsc1tlXSksdC5wdXNoKHRoaXMub3V0cHV0c1tlXS5zZXJpYWxpemUoKSk7cmV0dXJuIHR9O3ZhciB4ZT1PYmplY3QuZnJlZXplKHtudW1iZXI6eWUsY29sb3I6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgV3QoeWUodC5yLGUucixyKSx5ZSh0LmcsZS5nLHIpLHllKHQuYixlLmIscikseWUodC5hLGUuYSxyKSl9LGFycmF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4geWUodCxlW25dLHIpfSl9fSksYmU9Ljk1MDQ3LF9lPTEsd2U9MS4wODg4MyxrZT00LzI5LFRlPTYvMjksTWU9MypUZSpUZSxBZT1UZSpUZSpUZSxTZT1NYXRoLlBJLzE4MCxFZT0xODAvTWF0aC5QSTtmdW5jdGlvbiBMZSh0KXtyZXR1cm4gdD5BZT9NYXRoLnBvdyh0LDEvMyk6dC9NZStrZX1mdW5jdGlvbiBDZSh0KXtyZXR1cm4gdD5UZT90KnQqdDpNZSoodC1rZSl9ZnVuY3Rpb24gUGUodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBPZSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiB6ZSh0KXt2YXIgZT1PZSh0LnIpLHI9T2UodC5nKSxuPU9lKHQuYiksYT1MZSgoLjQxMjQ1NjQqZSsuMzU3NTc2MSpyKy4xODA0Mzc1Km4pL2JlKSxpPUxlKCguMjEyNjcyOSplKy43MTUxNTIyKnIrLjA3MjE3NSpuKS9fZSk7cmV0dXJue2w6MTE2KmktMTYsYTo1MDAqKGEtaSksYjoyMDAqKGktTGUoKC4wMTkzMzM5KmUrLjExOTE5MipyKy45NTAzMDQxKm4pL3dlKSksYWxwaGE6dC5hfX1mdW5jdGlvbiBJZSh0KXt2YXIgZT0odC5sKzE2KS8xMTYscj1pc05hTih0LmEpP2U6ZSt0LmEvNTAwLG49aXNOYU4odC5iKT9lOmUtdC5iLzIwMDtyZXR1cm4gZT1fZSpDZShlKSxyPWJlKkNlKHIpLG49d2UqQ2UobiksbmV3IFd0KFBlKDMuMjQwNDU0MipyLTEuNTM3MTM4NSplLS40OTg1MzE0Km4pLFBlKC0uOTY5MjY2KnIrMS44NzYwMTA4KmUrLjA0MTU1NipuKSxQZSguMDU1NjQzNCpyLS4yMDQwMjU5KmUrMS4wNTcyMjUyKm4pLHQuYWxwaGEpfWZ1bmN0aW9uIERlKHQsZSxyKXt2YXIgbj1lLXQ7cmV0dXJuIHQrcioobj4xODB8fG48LTE4MD9uLTM2MCpNYXRoLnJvdW5kKG4vMzYwKTpuKX12YXIgUmU9e2ZvcndhcmQ6emUscmV2ZXJzZTpJZSxpbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJue2w6eWUodC5sLGUubCxyKSxhOnllKHQuYSxlLmEsciksYjp5ZSh0LmIsZS5iLHIpLGFscGhhOnllKHQuYWxwaGEsZS5hbHBoYSxyKX19fSxGZT17Zm9yd2FyZDpmdW5jdGlvbih0KXt2YXIgZT16ZSh0KSxyPWUubCxuPWUuYSxhPWUuYixpPU1hdGguYXRhbjIoYSxuKSpFZTtyZXR1cm57aDppPDA/aSszNjA6aSxjOk1hdGguc3FydChuKm4rYSphKSxsOnIsYWxwaGE6dC5hfX0scmV2ZXJzZTpmdW5jdGlvbih0KXt2YXIgZT10LmgqU2Uscj10LmM7cmV0dXJuIEllKHtsOnQubCxhOk1hdGguY29zKGUpKnIsYjpNYXRoLnNpbihlKSpyLGFscGhhOnQuYWxwaGF9KX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybntoOkRlKHQuaCxlLmgsciksYzp5ZSh0LmMsZS5jLHIpLGw6eWUodC5sLGUubCxyKSxhbHBoYTp5ZSh0LmFscGhhLGUuYWxwaGEscil9fX0sQmU9T2JqZWN0LmZyZWV6ZSh7bGFiOlJlLGhjbDpGZX0pLE5lPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dGhpcy50eXBlPXQsdGhpcy5vcGVyYXRvcj1lLHRoaXMuaW50ZXJwb2xhdGlvbj1yLHRoaXMuaW5wdXQ9bix0aGlzLmxhYmVscz1bXSx0aGlzLm91dHB1dHM9W107Zm9yKHZhciBpPTAsbz1hO2k8by5sZW5ndGg7aSs9MSl7dmFyIHM9b1tpXSxsPXNbMF0sYz1zWzFdO3RoaXMubGFiZWxzLnB1c2gobCksdGhpcy5vdXRwdXRzLnB1c2goYyl9fTtmdW5jdGlvbiBqZSh0LGUscixuKXt2YXIgYT1uLXIsaT10LXI7cmV0dXJuIDA9PT1hPzA6MT09PWU/aS9hOihNYXRoLnBvdyhlLGkpLTEpLyhNYXRoLnBvdyhlLGEpLTEpfU5lLmludGVycG9sYXRpb25GYWN0b3I9ZnVuY3Rpb24odCxlLG4sYSl7dmFyIGk9MDtpZigiZXhwb25lbnRpYWwiPT09dC5uYW1lKWk9amUoZSx0LmJhc2UsbixhKTtlbHNlIGlmKCJsaW5lYXIiPT09dC5uYW1lKWk9amUoZSwxLG4sYSk7ZWxzZSBpZigiY3ViaWMtYmV6aWVyIj09PXQubmFtZSl7dmFyIG89dC5jb250cm9sUG9pbnRzO2k9bmV3IHIob1swXSxvWzFdLG9bMl0sb1szXSkuc29sdmUoamUoZSwxLG4sYSkpfXJldHVybiBpfSxOZS5wYXJzZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGE9dFsyXSxpPXQuc2xpY2UoMyk7aWYoIUFycmF5LmlzQXJyYXkobil8fDA9PT1uLmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gaW50ZXJwb2xhdGlvbiB0eXBlIGV4cHJlc3Npb24uIiwxKTtpZigibGluZWFyIj09PW5bMF0pbj17bmFtZToibGluZWFyIn07ZWxzZSBpZigiZXhwb25lbnRpYWwiPT09blswXSl7dmFyIG89blsxXTtpZigibnVtYmVyIiE9dHlwZW9mIG8pcmV0dXJuIGUuZXJyb3IoIkV4cG9uZW50aWFsIGludGVycG9sYXRpb24gcmVxdWlyZXMgYSBudW1lcmljIGJhc2UuIiwxLDEpO249e25hbWU6ImV4cG9uZW50aWFsIixiYXNlOm99fWVsc2V7aWYoImN1YmljLWJlemllciIhPT1uWzBdKXJldHVybiBlLmVycm9yKCJVbmtub3duIGludGVycG9sYXRpb24gdHlwZSAiK1N0cmluZyhuWzBdKSwxLDApO3ZhciBzPW4uc2xpY2UoMSk7aWYoNCE9PXMubGVuZ3RofHxzLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0fHx0PDB8fHQ+MX0pKXJldHVybiBlLmVycm9yKCJDdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBmb3VyIG51bWVyaWMgYXJndW1lbnRzIHdpdGggdmFsdWVzIGJldHdlZW4gMCBhbmQgMS4iLDEpO249e25hbWU6ImN1YmljLWJlemllciIsY29udHJvbFBvaW50czpzfX1pZih0Lmxlbmd0aC0xPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKCh0Lmxlbmd0aC0xKSUyIT0wKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuIik7aWYoIShhPWUucGFyc2UoYSwyLEl0KSkpcmV0dXJuIG51bGw7dmFyIGw9W10sYz1udWxsOyJpbnRlcnBvbGF0ZS1oY2wiPT09cnx8ImludGVycG9sYXRlLWxhYiI9PT1yP2M9RnQ6ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYoYz1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciB1PTA7dTxpLmxlbmd0aDt1Kz0yKXt2YXIgaD1pW3VdLGY9aVt1KzFdLHA9dSszLGQ9dSs0O2lmKCJudW1iZXIiIT10eXBlb2YgaClyZXR1cm4gZS5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicscCk7aWYobC5sZW5ndGgmJmxbbC5sZW5ndGgtMV1bMF0+PWgpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgImludGVycG9sYXRlIiBleHByZXNzaW9ucyBtdXN0IGJlIGFycmFuZ2VkIHdpdGggaW5wdXQgdmFsdWVzIGluIHN0cmljdGx5IGFzY2VuZGluZyBvcmRlci4nLHApO3ZhciBnPWUucGFyc2UoZixkLGMpO2lmKCFnKXJldHVybiBudWxsO2M9Y3x8Zy50eXBlLGwucHVzaChbaCxnXSl9cmV0dXJuIm51bWJlciI9PT1jLmtpbmR8fCJjb2xvciI9PT1jLmtpbmR8fCJhcnJheSI9PT1jLmtpbmQmJiJudW1iZXIiPT09Yy5pdGVtVHlwZS5raW5kJiYibnVtYmVyIj09dHlwZW9mIGMuTj9uZXcgTmUoYyxyLG4sYSxsKTplLmVycm9yKCJUeXBlICIrcXQoYykrIiBpcyBub3QgaW50ZXJwb2xhdGFibGUuIil9LE5lLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhYmVscyxyPXRoaXMub3V0cHV0cztpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIG49dGhpcy5pbnB1dC5ldmFsdWF0ZSh0KTtpZihuPD1lWzBdKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBhPWUubGVuZ3RoO2lmKG4+PWVbYS0xXSlyZXR1cm4gclthLTFdLmV2YWx1YXRlKHQpO3ZhciBpPXZlKGUsbiksbz1lW2ldLHM9ZVtpKzFdLGw9TmUuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb24sbixvLHMpLGM9cltpXS5ldmFsdWF0ZSh0KSx1PXJbaSsxXS5ldmFsdWF0ZSh0KTtyZXR1cm4iaW50ZXJwb2xhdGUiPT09dGhpcy5vcGVyYXRvcj94ZVt0aGlzLnR5cGUua2luZC50b0xvd2VyQ2FzZSgpXShjLHUsbCk6ImludGVycG9sYXRlLWhjbCI9PT10aGlzLm9wZXJhdG9yP0ZlLnJldmVyc2UoRmUuaW50ZXJwb2xhdGUoRmUuZm9yd2FyZChjKSxGZS5mb3J3YXJkKHUpLGwpKTpSZS5yZXZlcnNlKFJlLmludGVycG9sYXRlKFJlLmZvcndhcmQoYyksUmUuZm9yd2FyZCh1KSxsKSl9LE5lLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KTtmb3IodmFyIGU9MCxyPXRoaXMub3V0cHV0cztlPHIubGVuZ3RoO2UrPTEpdChyW2VdKX0sTmUucHJvdG90eXBlLnBvc3NpYmxlT3V0cHV0cz1mdW5jdGlvbigpe3ZhciB0O3JldHVybih0PVtdKS5jb25jYXQuYXBwbHkodCx0aGlzLm91dHB1dHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBvc3NpYmxlT3V0cHV0cygpfSkpfSxOZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ7dD0ibGluZWFyIj09PXRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lP1sibGluZWFyIl06ImV4cG9uZW50aWFsIj09PXRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lPzE9PT10aGlzLmludGVycG9sYXRpb24uYmFzZT9bImxpbmVhciJdOlsiZXhwb25lbnRpYWwiLHRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlXTpbImN1YmljLWJlemllciJdLmNvbmNhdCh0aGlzLmludGVycG9sYXRpb24uY29udHJvbFBvaW50cyk7Zm9yKHZhciBlPVt0aGlzLm9wZXJhdG9yLHQsdGhpcy5pbnB1dC5zZXJpYWxpemUoKV0scj0wO3I8dGhpcy5sYWJlbHMubGVuZ3RoO3IrKyllLnB1c2godGhpcy5sYWJlbHNbcl0sdGhpcy5vdXRwdXRzW3JdLnNlcmlhbGl6ZSgpKTtyZXR1cm4gZX07dmFyIFZlPWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O1ZlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO3ZhciByPW51bGwsbj1lLmV4cGVjdGVkVHlwZTtuJiYidmFsdWUiIT09bi5raW5kJiYocj1uKTtmb3IodmFyIGE9W10saT0wLG89dC5zbGljZSgxKTtpPG8ubGVuZ3RoO2krPTEpe3ZhciBzPW9baV0sbD1lLnBhcnNlKHMsMSthLmxlbmd0aCxyLHZvaWQgMCx7dHlwZUFubm90YXRpb246Im9taXQifSk7aWYoIWwpcmV0dXJuIG51bGw7cj1yfHxsLnR5cGUsYS5wdXNoKGwpfXZhciBjPW4mJmEuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gR3Qobix0LnR5cGUpfSk7cmV0dXJuIG5ldyBWZShjP050OnIsYSl9LFZlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bnVsbCxyPTAsbj10aGlzLmFyZ3M7cjxuLmxlbmd0aCYmbnVsbD09PShlPW5bcl0uZXZhbHVhdGUodCkpO3IrPTEpO3JldHVybiBlfSxWZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSxWZS5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMuYXJncy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zc2libGVPdXRwdXRzKCl9KSl9LFZlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1bImNvYWxlc2NlIl07cmV0dXJuIHRoaXMuZWFjaENoaWxkKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pLHR9O3ZhciBVZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1lLnR5cGUsdGhpcy5iaW5kaW5ncz1bXS5jb25jYXQodCksdGhpcy5yZXN1bHQ9ZX07VWUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlc3VsdC5ldmFsdWF0ZSh0KX0sVWUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYmluZGluZ3M7ZTxyLmxlbmd0aDtlKz0xKXQocltlXVsxXSk7dCh0aGlzLnJlc3VsdCl9LFVlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8NClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgMyBhcmd1bWVudHMsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7Zm9yKHZhciByPVtdLG49MTtuPHQubGVuZ3RoLTE7bis9Mil7dmFyIGE9dFtuXTtpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIHN0cmluZywgYnV0IGZvdW5kICIrdHlwZW9mIGErIiBpbnN0ZWFkLiIsbik7aWYoL1teYS16QS1aMC05X10vLnRlc3QoYSkpcmV0dXJuIGUuZXJyb3IoIlZhcmlhYmxlIG5hbWVzIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yICdfJy4iLG4pO3ZhciBpPWUucGFyc2UodFtuKzFdLG4rMSk7aWYoIWkpcmV0dXJuIG51bGw7ci5wdXNoKFthLGldKX12YXIgbz1lLnBhcnNlKHRbdC5sZW5ndGgtMV0sdC5sZW5ndGgtMSxlLmV4cGVjdGVkVHlwZSxyKTtyZXR1cm4gbz9uZXcgVWUocixvKTpudWxsfSxVZS5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVzdWx0LnBvc3NpYmxlT3V0cHV0cygpfSxVZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVsibGV0Il0sZT0wLHI9dGhpcy5iaW5kaW5ncztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0sYT1uWzBdLGk9blsxXTt0LnB1c2goYSxpLnNlcmlhbGl6ZSgpKX1yZXR1cm4gdC5wdXNoKHRoaXMucmVzdWx0LnNlcmlhbGl6ZSgpKSx0fTt2YXIgcWU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuaW5kZXg9ZSx0aGlzLmlucHV0PXJ9O3FlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMyE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxJdCksbj1lLnBhcnNlKHRbMl0sMixVdChlLmV4cGVjdGVkVHlwZXx8TnQpKTtpZighcnx8IW4pcmV0dXJuIG51bGw7dmFyIGE9bi50eXBlO3JldHVybiBuZXcgcWUoYS5pdGVtVHlwZSxyLG4pfSxxZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbmRleC5ldmFsdWF0ZSh0KSxyPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYoZTwwKXRocm93IG5ldyBlZSgiQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kczogIitlKyIgPCAwLiIpO2lmKGU+PXIubGVuZ3RoKXRocm93IG5ldyBlZSgiQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kczogIitlKyIgPiAiKyhyLmxlbmd0aC0xKSsiLiIpO2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBlZSgiQXJyYXkgaW5kZXggbXVzdCBiZSBhbiBpbnRlZ2VyLCBidXQgZm91bmQgIitlKyIgaW5zdGVhZC4iKTtyZXR1cm4gcltlXX0scWUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5kZXgpLHQodGhpcy5pbnB1dCl9LHFlLnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0scWUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiYXQiLHRoaXMuaW5kZXguc2VyaWFsaXplKCksdGhpcy5pbnB1dC5zZXJpYWxpemUoKV19O3ZhciBIZT1mdW5jdGlvbih0LGUscixuLGEsaSl7dGhpcy5pbnB1dFR5cGU9dCx0aGlzLnR5cGU9ZSx0aGlzLmlucHV0PXIsdGhpcy5jYXNlcz1uLHRoaXMub3V0cHV0cz1hLHRoaXMub3RoZXJ3aXNlPWl9O0hlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8NSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYodC5sZW5ndGglMiE9MSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLiIpO3ZhciByLG47ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYobj1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciBhPXt9LGk9W10sbz0yO288dC5sZW5ndGgtMTtvKz0yKXt2YXIgcz10W29dLGw9dFtvKzFdO0FycmF5LmlzQXJyYXkocyl8fChzPVtzXSk7dmFyIGM9ZS5jb25jYXQobyk7aWYoMD09PXMubGVuZ3RoKXJldHVybiBjLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYnJhbmNoIGxhYmVsLiIpO2Zvcih2YXIgdT0wLGg9czt1PGgubGVuZ3RoO3UrPTEpe3ZhciBmPWhbdV07aWYoIm51bWJlciIhPXR5cGVvZiBmJiYic3RyaW5nIiE9dHlwZW9mIGYpcmV0dXJuIGMuZXJyb3IoIkJyYW5jaCBsYWJlbHMgbXVzdCBiZSBudW1iZXJzIG9yIHN0cmluZ3MuIik7aWYoIm51bWJlciI9PXR5cGVvZiBmJiZNYXRoLmFicyhmKT5OdW1iZXIuTUFYX1NBRkVfSU5URUdFUilyZXR1cm4gYy5lcnJvcigiQnJhbmNoIGxhYmVscyBtdXN0IGJlIGludGVnZXJzIG5vIGxhcmdlciB0aGFuICIrTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIrIi4iKTtpZigibnVtYmVyIj09dHlwZW9mIGYmJk1hdGguZmxvb3IoZikhPT1mKXJldHVybiBjLmVycm9yKCJOdW1lcmljIGJyYW5jaCBsYWJlbHMgbXVzdCBiZSBpbnRlZ2VyIHZhbHVlcy4iKTtpZihyKXtpZihjLmNoZWNrU3VidHlwZShyLFF0KGYpKSlyZXR1cm4gbnVsbH1lbHNlIHI9UXQoZik7aWYodm9pZCAwIT09YVtTdHJpbmcoZildKXJldHVybiBjLmVycm9yKCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgdW5pcXVlLiIpO2FbU3RyaW5nKGYpXT1pLmxlbmd0aH12YXIgcD1lLnBhcnNlKGwsbyxuKTtpZighcClyZXR1cm4gbnVsbDtuPW58fHAudHlwZSxpLnB1c2gocCl9dmFyIGQ9ZS5wYXJzZSh0WzFdLDEsTnQpO2lmKCFkKXJldHVybiBudWxsO3ZhciBnPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLG4pO3JldHVybiBnPyJ2YWx1ZSIhPT1kLnR5cGUua2luZCYmZS5jb25jYXQoMSkuY2hlY2tTdWJ0eXBlKHIsZC50eXBlKT9udWxsOm5ldyBIZShyLG4sZCxhLGksZyk6bnVsbH0sSGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7cmV0dXJuKFF0KGUpPT09dGhpcy5pbnB1dFR5cGUmJnRoaXMub3V0cHV0c1t0aGlzLmNhc2VzW2VdXXx8dGhpcy5vdGhlcndpc2UpLmV2YWx1YXRlKHQpfSxIZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCksdGhpcy5vdXRwdXRzLmZvckVhY2godCksdCh0aGlzLm90aGVyd2lzZSl9LEhlLnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4odD1bXSkuY29uY2F0LmFwcGx5KHQsdGhpcy5vdXRwdXRzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb3NzaWJsZU91dHB1dHMoKX0pKS5jb25jYXQodGhpcy5vdGhlcndpc2UucG9zc2libGVPdXRwdXRzKCkpfSxIZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bIm1hdGNoIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXSxyPVtdLG49e30sYT0wLGk9T2JqZWN0LmtleXModGhpcy5jYXNlcykuc29ydCgpO2E8aS5sZW5ndGg7YSs9MSl7dmFyIG89aVthXTt2b2lkIDA9PT0oaD1uW3RoaXMuY2FzZXNbb11dKT8oblt0aGlzLmNhc2VzW29dXT1yLmxlbmd0aCxyLnB1c2goW3RoaXMuY2FzZXNbb10sW29dXSkpOnJbaF1bMV0ucHVzaChvKX1mb3IodmFyIHM9ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PT10LmlucHV0VHlwZS5raW5kP051bWJlcihlKTplfSxsPTAsYz1yO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXSxoPXVbMF0sZj11WzFdOzE9PT1mLmxlbmd0aD9lLnB1c2gocyhmWzBdKSk6ZS5wdXNoKGYubWFwKHMpKSxlLnB1c2godGhpcy5vdXRwdXRzW291dHB1dEluZGV4JDFdLnNlcmlhbGl6ZSgpKX1yZXR1cm4gZS5wdXNoKHRoaXMub3RoZXJ3aXNlLnNlcmlhbGl6ZSgpKSxlfTt2YXIgR2U9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuYnJhbmNoZXM9ZSx0aGlzLm90aGVyd2lzZT1yfTtmdW5jdGlvbiBZZSh0LGUpe3JldHVybiI9PSI9PT10fHwiIT0iPT09dD8iYm9vbGVhbiI9PT1lLmtpbmR8fCJzdHJpbmciPT09ZS5raW5kfHwibnVtYmVyIj09PWUua2luZHx8Im51bGwiPT09ZS5raW5kfHwidmFsdWUiPT09ZS5raW5kOiJzdHJpbmciPT09ZS5raW5kfHwibnVtYmVyIj09PWUua2luZHx8InZhbHVlIj09PWUua2luZH1mdW5jdGlvbiBXZSh0LGUscixuKXtyZXR1cm4gMD09PW4uY29tcGFyZShlLHIpfWZ1bmN0aW9uIFhlKHQsZSxyKXt2YXIgbj0iPT0iIT09dCYmIiE9IiE9PXQ7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSh0LGUscil7dGhpcy50eXBlPVJ0LHRoaXMubGhzPXQsdGhpcy5yaHM9ZSx0aGlzLmNvbGxhdG9yPXIsdGhpcy5oYXNVbnR5cGVkQXJndW1lbnQ9InZhbHVlIj09PXQudHlwZS5raW5kfHwidmFsdWUiPT09ZS50eXBlLmtpbmR9cmV0dXJuIGEucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigzIT09dC5sZW5ndGgmJjQhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy4iKTt2YXIgcj10WzBdLGk9ZS5wYXJzZSh0WzFdLDEsTnQpO2lmKCFpKXJldHVybiBudWxsO2lmKCFZZShyLGkudHlwZSkpcmV0dXJuIGUuY29uY2F0KDEpLmVycm9yKCciJytyKyJcIiBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdHlwZSAnIitxdChpLnR5cGUpKyInLiIpO3ZhciBvPWUucGFyc2UodFsyXSwyLE50KTtpZighbylyZXR1cm4gbnVsbDtpZighWWUocixvLnR5cGUpKXJldHVybiBlLmNvbmNhdCgyKS5lcnJvcignIicrcisiXCIgY29tcGFyaXNvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHR5cGUgJyIrcXQoby50eXBlKSsiJy4iKTtpZihpLnR5cGUua2luZCE9PW8udHlwZS5raW5kJiYidmFsdWUiIT09aS50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1vLnR5cGUua2luZClyZXR1cm4gZS5lcnJvcigiQ2Fubm90IGNvbXBhcmUgdHlwZXMgJyIrcXQoaS50eXBlKSsiJyBhbmQgJyIrcXQoby50eXBlKSsiJy4iKTtuJiYoInZhbHVlIj09PWkudHlwZS5raW5kJiYidmFsdWUiIT09by50eXBlLmtpbmQ/aT1uZXcgbmUoby50eXBlLFtpXSk6InZhbHVlIiE9PWkudHlwZS5raW5kJiYidmFsdWUiPT09by50eXBlLmtpbmQmJihvPW5ldyBuZShpLnR5cGUsW29dKSkpO3ZhciBzPW51bGw7aWYoND09PXQubGVuZ3RoKXtpZigic3RyaW5nIiE9PWkudHlwZS5raW5kJiYic3RyaW5nIiE9PW8udHlwZS5raW5kJiYidmFsdWUiIT09aS50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1vLnR5cGUua2luZClyZXR1cm4gZS5lcnJvcigiQ2Fubm90IHVzZSBjb2xsYXRvciB0byBjb21wYXJlIG5vbi1zdHJpbmcgdHlwZXMuIik7aWYoIShzPWUucGFyc2UodFszXSwzLGp0KSkpcmV0dXJuIG51bGx9cmV0dXJuIG5ldyBhKGksbyxzKX0sYS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oYSl7dmFyIGk9dGhpcy5saHMuZXZhbHVhdGUoYSksbz10aGlzLnJocy5ldmFsdWF0ZShhKTtpZihuJiZ0aGlzLmhhc1VudHlwZWRBcmd1bWVudCl7dmFyIHM9UXQoaSksbD1RdChvKTtpZihzLmtpbmQhPT1sLmtpbmR8fCJzdHJpbmciIT09cy5raW5kJiYibnVtYmVyIiE9PXMua2luZCl0aHJvdyBuZXcgZWUoJ0V4cGVjdGVkIGFyZ3VtZW50cyBmb3IgIicrdCsnIiB0byBiZSAoc3RyaW5nLCBzdHJpbmcpIG9yIChudW1iZXIsIG51bWJlciksIGJ1dCBmb3VuZCAoJytzLmtpbmQrIiwgIitsLmtpbmQrIikgaW5zdGVhZC4iKX1pZih0aGlzLmNvbGxhdG9yJiYhbiYmdGhpcy5oYXNVbnR5cGVkQXJndW1lbnQpe3ZhciBjPVF0KGkpLHU9UXQobyk7aWYoInN0cmluZyIhPT1jLmtpbmR8fCJzdHJpbmciIT09dS5raW5kKXJldHVybiBlKGEsaSxvKX1yZXR1cm4gdGhpcy5jb2xsYXRvcj9yKGEsaSxvLHRoaXMuY29sbGF0b3IuZXZhbHVhdGUoYSkpOmUoYSxpLG8pfSxhLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmxocyksdCh0aGlzLnJocyksdGhpcy5jb2xsYXRvciYmdCh0aGlzLmNvbGxhdG9yKX0sYS5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuWyEwLCExXX0sYS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIGU9W3RdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbih0KXtlLnB1c2godC5zZXJpYWxpemUoKSl9KSxlfSxhfSgpfUdlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8NClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgMyBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYodC5sZW5ndGglMiE9MClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gb2RkIG51bWJlciBvZiBhcmd1bWVudHMuIik7dmFyIHI7ZS5leHBlY3RlZFR5cGUmJiJ2YWx1ZSIhPT1lLmV4cGVjdGVkVHlwZS5raW5kJiYocj1lLmV4cGVjdGVkVHlwZSk7Zm9yKHZhciBuPVtdLGE9MTthPHQubGVuZ3RoLTE7YSs9Mil7dmFyIGk9ZS5wYXJzZSh0W2FdLGEsUnQpO2lmKCFpKXJldHVybiBudWxsO3ZhciBvPWUucGFyc2UodFthKzFdLGErMSxyKTtpZighbylyZXR1cm4gbnVsbDtuLnB1c2goW2ksb10pLHI9cnx8by50eXBlfXZhciBzPWUucGFyc2UodFt0Lmxlbmd0aC0xXSx0Lmxlbmd0aC0xLHIpO3JldHVybiBzP25ldyBHZShyLG4scyk6bnVsbH0sR2UucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5icmFuY2hlcztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0sYT1uWzBdLGk9blsxXTtpZihhLmV2YWx1YXRlKHQpKXJldHVybiBpLmV2YWx1YXRlKHQpfXJldHVybiB0aGlzLm90aGVyd2lzZS5ldmFsdWF0ZSh0KX0sR2UucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnJhbmNoZXM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGE9blswXSxpPW5bMV07dChhKSx0KGkpfXQodGhpcy5vdGhlcndpc2UpfSxHZS5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuKHQ9W10pLmNvbmNhdC5hcHBseSh0LHRoaXMuYnJhbmNoZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLHRbMV0ucG9zc2libGVPdXRwdXRzKCl9KSkuY29uY2F0KHRoaXMub3RoZXJ3aXNlLnBvc3NpYmxlT3V0cHV0cygpKX0sR2UucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsiY2FzZSJdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSx0fTt2YXIgWmU9WGUoIj09IixmdW5jdGlvbih0LGUscil7cmV0dXJuIGU9PT1yfSxXZSksSmU9WGUoIiE9IixmdW5jdGlvbih0LGUscil7cmV0dXJuIGUhPT1yfSxmdW5jdGlvbih0LGUscixuKXtyZXR1cm4hV2UoMCxlLHIsbil9KSxLZT1YZSgiPCIsZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPHJ9LGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuLmNvbXBhcmUoZSxyKTwwfSksUWU9WGUoIj4iLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZT5yfSxmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi5jb21wYXJlKGUscik+MH0pLCRlPVhlKCI8PSIsZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPD1yfSxmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi5jb21wYXJlKGUscik8PTB9KSx0cj1YZSgiPj0iLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZT49cn0sZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG4uY29tcGFyZShlLHIpPj0wfSksZXI9ZnVuY3Rpb24odCxlLHIsbixhKXt0aGlzLnR5cGU9RHQsdGhpcy5udW1iZXI9dCx0aGlzLmxvY2FsZT1lLHRoaXMuY3VycmVuY3k9cix0aGlzLm1pbkZyYWN0aW9uRGlnaXRzPW4sdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cz1hfTtlci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDMhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgdHdvIGFyZ3VtZW50cy4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxJdCk7aWYoIXIpcmV0dXJuIG51bGw7dmFyIG49dFsyXTtpZigib2JqZWN0IiE9dHlwZW9mIG58fEFycmF5LmlzQXJyYXkobikpcmV0dXJuIGUuZXJyb3IoIk51bWJlckZvcm1hdCBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LiIpO3ZhciBhPW51bGw7aWYobi5sb2NhbGUmJiEoYT1lLnBhcnNlKG4ubG9jYWxlLDEsRHQpKSlyZXR1cm4gbnVsbDt2YXIgaT1udWxsO2lmKG4uY3VycmVuY3kmJiEoaT1lLnBhcnNlKG4uY3VycmVuY3ksMSxEdCkpKXJldHVybiBudWxsO3ZhciBvPW51bGw7aWYoblsibWluLWZyYWN0aW9uLWRpZ2l0cyJdJiYhKG89ZS5wYXJzZShuWyJtaW4tZnJhY3Rpb24tZGlnaXRzIl0sMSxJdCkpKXJldHVybiBudWxsO3ZhciBzPW51bGw7cmV0dXJuIG5bIm1heC1mcmFjdGlvbi1kaWdpdHMiXSYmIShzPWUucGFyc2UoblsibWF4LWZyYWN0aW9uLWRpZ2l0cyJdLDEsSXQpKT9udWxsOm5ldyBlcihyLGEsaSxvLHMpfSxlci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmxvY2FsZT90aGlzLmxvY2FsZS5ldmFsdWF0ZSh0KTpbXSx7c3R5bGU6dGhpcy5jdXJyZW5jeT8iY3VycmVuY3kiOiJkZWNpbWFsIixjdXJyZW5jeTp0aGlzLmN1cnJlbmN5P3RoaXMuY3VycmVuY3kuZXZhbHVhdGUodCk6dm9pZCAwLG1pbmltdW1GcmFjdGlvbkRpZ2l0czp0aGlzLm1pbkZyYWN0aW9uRGlnaXRzP3RoaXMubWluRnJhY3Rpb25EaWdpdHMuZXZhbHVhdGUodCk6dm9pZCAwLG1heGltdW1GcmFjdGlvbkRpZ2l0czp0aGlzLm1heEZyYWN0aW9uRGlnaXRzP3RoaXMubWF4RnJhY3Rpb25EaWdpdHMuZXZhbHVhdGUodCk6dm9pZCAwfSkuZm9ybWF0KHRoaXMubnVtYmVyLmV2YWx1YXRlKHQpKX0sZXIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMubnVtYmVyKSx0aGlzLmxvY2FsZSYmdCh0aGlzLmxvY2FsZSksdGhpcy5jdXJyZW5jeSYmdCh0aGlzLmN1cnJlbmN5KSx0aGlzLm1pbkZyYWN0aW9uRGlnaXRzJiZ0KHRoaXMubWluRnJhY3Rpb25EaWdpdHMpLHRoaXMubWF4RnJhY3Rpb25EaWdpdHMmJnQodGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyl9LGVyLnByb3RvdHlwZS5wb3NzaWJsZU91dHB1dHM9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX0sZXIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0aGlzLmxvY2FsZSYmKHQubG9jYWxlPXRoaXMubG9jYWxlLnNlcmlhbGl6ZSgpKSx0aGlzLmN1cnJlbmN5JiYodC5jdXJyZW5jeT10aGlzLmN1cnJlbmN5LnNlcmlhbGl6ZSgpKSx0aGlzLm1pbkZyYWN0aW9uRGlnaXRzJiYodFsibWluLWZyYWN0aW9uLWRpZ2l0cyJdPXRoaXMubWluRnJhY3Rpb25EaWdpdHMuc2VyaWFsaXplKCkpLHRoaXMubWF4RnJhY3Rpb25EaWdpdHMmJih0WyJtYXgtZnJhY3Rpb24tZGlnaXRzIl09dGhpcy5tYXhGcmFjdGlvbkRpZ2l0cy5zZXJpYWxpemUoKSksWyJudW1iZXItZm9ybWF0Iix0aGlzLm51bWJlci5zZXJpYWxpemUoKSx0XX07dmFyIHJyPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT1JdCx0aGlzLmlucHV0PXR9O3JyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAxIGFyZ3VtZW50LCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO3ZhciByPWUucGFyc2UodFsxXSwxKTtyZXR1cm4gcj8iYXJyYXkiIT09ci50eXBlLmtpbmQmJiJzdHJpbmciIT09ci50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1yLnR5cGUua2luZD9lLmVycm9yKCJFeHBlY3RlZCBhcmd1bWVudCBvZiB0eXBlIHN0cmluZyBvciBhcnJheSwgYnV0IGZvdW5kICIrcXQoci50eXBlKSsiIGluc3RlYWQuIik6bmV3IHJyKHIpOm51bGx9LHJyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZS5sZW5ndGg7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZS5sZW5ndGg7dGhyb3cgbmV3IGVlKCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlIHN0cmluZyBvciBhcnJheSwgYnV0IGZvdW5kICIrcXQoUXQoZSkpKyIgaW5zdGVhZC4iKX0scnIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpfSxyci5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuW3ZvaWQgMF19LHJyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1bImxlbmd0aCJdO3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbihlKXt0LnB1c2goZS5zZXJpYWxpemUoKSl9KSx0fTt2YXIgbnI9eyI9PSI6WmUsIiE9IjpKZSwiPiI6UWUsIjwiOktlLCI+PSI6dHIsIjw9IjokZSxhcnJheTpuZSxhdDpxZSxib29sZWFuOm5lLGNhc2U6R2UsY29hbGVzY2U6VmUsY29sbGF0b3I6dWUsZm9ybWF0OmFlLGludGVycG9sYXRlOk5lLCJpbnRlcnBvbGF0ZS1oY2wiOk5lLCJpbnRlcnBvbGF0ZS1sYWIiOk5lLGxlbmd0aDpycixsZXQ6VWUsbGl0ZXJhbDp0ZSxtYXRjaDpIZSxudW1iZXI6bmUsIm51bWJlci1mb3JtYXQiOmVyLG9iamVjdDpuZSxzdGVwOm1lLHN0cmluZzpuZSwidG8tYm9vbGVhbiI6b2UsInRvLWNvbG9yIjpvZSwidG8tbnVtYmVyIjpvZSwidG8tc3RyaW5nIjpvZSx2YXI6ZGV9O2Z1bmN0aW9uIGFyKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0sYT1lWzJdLGk9ZVszXTtyPXIuZXZhbHVhdGUodCksbj1uLmV2YWx1YXRlKHQpLGE9YS5ldmFsdWF0ZSh0KTt2YXIgbz1pP2kuZXZhbHVhdGUodCk6MSxzPUt0KHIsbixhLG8pO2lmKHMpdGhyb3cgbmV3IGVlKHMpO3JldHVybiBuZXcgV3Qoci8yNTUqbyxuLzI1NSpvLGEvMjU1Km8sbyl9ZnVuY3Rpb24gaXIodCxlKXtyZXR1cm4gdCBpbiBlfWZ1bmN0aW9uIG9yKHQsZSl7dmFyIHI9ZVt0XTtyZXR1cm4gdm9pZCAwPT09cj9udWxsOnJ9ZnVuY3Rpb24gc3IodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gbHIodCl7cmV0dXJue3Jlc3VsdDoic3VjY2VzcyIsdmFsdWU6dH19ZnVuY3Rpb24gY3IodCl7cmV0dXJue3Jlc3VsdDoiZXJyb3IiLHZhbHVlOnR9fWZ1bmN0aW9uIHVyKHQpe3JldHVybiJkYXRhLWRyaXZlbiI9PT10WyJwcm9wZXJ0eS10eXBlIl18fCJjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbiI9PT10WyJwcm9wZXJ0eS10eXBlIl19ZnVuY3Rpb24gaHIodCl7cmV0dXJuISF0LmV4cHJlc3Npb24mJnQuZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLmluZGV4T2YoInpvb20iKT4tMX1mdW5jdGlvbiBmcih0KXtyZXR1cm4hIXQuZXhwcmVzc2lvbiYmdC5leHByZXNzaW9uLmludGVycG9sYXRlZH1mdW5jdGlvbiBwcih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE51bWJlcj8ibnVtYmVyIjp0IGluc3RhbmNlb2YgU3RyaW5nPyJzdHJpbmciOnQgaW5zdGFuY2VvZiBCb29sZWFuPyJib29sZWFuIjpBcnJheS5pc0FycmF5KHQpPyJhcnJheSI6bnVsbD09PXQ/Im51bGwiOnR5cGVvZiB0fWZ1bmN0aW9uIGRyKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQmJiFBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIGdyKHQpe3JldHVybiB0fWZ1bmN0aW9uIHZyKHQsZSxyKXtyZXR1cm4gdm9pZCAwIT09dD90OnZvaWQgMCE9PWU/ZTp2b2lkIDAhPT1yP3I6dm9pZCAwfWZ1bmN0aW9uIG1yKHQsZSxyLG4sYSl7cmV0dXJuIHZyKHR5cGVvZiByPT09YT9uW3JdOnZvaWQgMCx0LmRlZmF1bHQsZS5kZWZhdWx0KX1mdW5jdGlvbiB5cih0LGUscil7aWYoIm51bWJlciIhPT1wcihyKSlyZXR1cm4gdnIodC5kZWZhdWx0LGUuZGVmYXVsdCk7dmFyIG49dC5zdG9wcy5sZW5ndGg7aWYoMT09PW4pcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocjw9dC5zdG9wc1swXVswXSlyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPj10LnN0b3BzW24tMV1bMF0pcmV0dXJuIHQuc3RvcHNbbi0xXVsxXTt2YXIgYT12ZSh0LnN0b3BzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLHIpO3JldHVybiB0LnN0b3BzW2FdWzFdfWZ1bmN0aW9uIHhyKHQsZSxyKXt2YXIgbj12b2lkIDAhPT10LmJhc2U/dC5iYXNlOjE7aWYoIm51bWJlciIhPT1wcihyKSlyZXR1cm4gdnIodC5kZWZhdWx0LGUuZGVmYXVsdCk7dmFyIGE9dC5zdG9wcy5sZW5ndGg7aWYoMT09PWEpcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocjw9dC5zdG9wc1swXVswXSlyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPj10LnN0b3BzW2EtMV1bMF0pcmV0dXJuIHQuc3RvcHNbYS0xXVsxXTt2YXIgaT12ZSh0LnN0b3BzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pLHIpLG89ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9bi1yLGk9dC1yO3JldHVybiAwPT09YT8wOjE9PT1lP2kvYTooTWF0aC5wb3coZSxpKS0xKS8oTWF0aC5wb3coZSxhKS0xKX0ocixuLHQuc3RvcHNbaV1bMF0sdC5zdG9wc1tpKzFdWzBdKSxzPXQuc3RvcHNbaV1bMV0sbD10LnN0b3BzW2krMV1bMV0sYz14ZVtlLnR5cGVdfHxncjtpZih0LmNvbG9yU3BhY2UmJiJyZ2IiIT09dC5jb2xvclNwYWNlKXt2YXIgdT1CZVt0LmNvbG9yU3BhY2VdO2M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdS5yZXZlcnNlKHUuaW50ZXJwb2xhdGUodS5mb3J3YXJkKHQpLHUuZm9yd2FyZChlKSxvKSl9fXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBzLmV2YWx1YXRlP3tldmFsdWF0ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPWFyZ3VtZW50cy5sZW5ndGg7ZS0tOyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgcj1zLmV2YWx1YXRlLmFwcGx5KHZvaWQgMCx0KSxuPWwuZXZhbHVhdGUuYXBwbHkodm9pZCAwLHQpO2lmKHZvaWQgMCE9PXImJnZvaWQgMCE9PW4pcmV0dXJuIGMocixuLG8pfX06YyhzLGwsbyl9ZnVuY3Rpb24gYnIodCxlLHIpe3JldHVybiJjb2xvciI9PT1lLnR5cGU/cj1XdC5wYXJzZShyKToiZm9ybWF0dGVkIj09PWUudHlwZT9yPUp0LmZyb21TdHJpbmcoci50b1N0cmluZygpKTpwcihyKT09PWUudHlwZXx8ImVudW0iPT09ZS50eXBlJiZlLnZhbHVlc1tyXXx8KHI9dm9pZCAwKSx2cihyLHQuZGVmYXVsdCxlLmRlZmF1bHQpfWNlLnJlZ2lzdGVyKG5yLHtlcnJvcjpbe2tpbmQ6ImVycm9yIn0sW0R0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07dGhyb3cgbmV3IGVlKHIuZXZhbHVhdGUodCkpfV0sdHlwZW9mOltEdCxbTnRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHF0KFF0KGVbMF0uZXZhbHVhdGUodCkpKX1dLCJ0by1yZ2JhIjpbVXQoSXQsNCksW0Z0XSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLmV2YWx1YXRlKHQpLnRvQXJyYXkoKX1dLHJnYjpbRnQsW0l0LEl0LEl0XSxhcl0scmdiYTpbRnQsW0l0LEl0LEl0LEl0XSxhcl0saGFzOnt0eXBlOlJ0LG92ZXJsb2FkczpbW1tEdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gaXIoZVswXS5ldmFsdWF0ZSh0KSx0LnByb3BlcnRpZXMoKSl9XSxbW0R0LEJ0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBpcihyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpfV1dfSxnZXQ6e3R5cGU6TnQsb3ZlcmxvYWRzOltbW0R0XSxmdW5jdGlvbih0LGUpe3JldHVybiBvcihlWzBdLmV2YWx1YXRlKHQpLHQucHJvcGVydGllcygpKX1dLFtbRHQsQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIG9yKHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSl9XV19LCJmZWF0dXJlLXN0YXRlIjpbTnQsW0R0XSxmdW5jdGlvbih0LGUpe3JldHVybiBvcihlWzBdLmV2YWx1YXRlKHQpLHQuZmVhdHVyZVN0YXRlfHx7fSl9XSxwcm9wZXJ0aWVzOltCdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5wcm9wZXJ0aWVzKCl9XSwiZ2VvbWV0cnktdHlwZSI6W0R0LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdlb21ldHJ5VHlwZSgpfV0saWQ6W050LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkKCl9XSx6b29tOltJdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWxzLnpvb219XSwiaGVhdG1hcC1kZW5zaXR5IjpbSXQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFscy5oZWF0bWFwRGVuc2l0eXx8MH1dLCJsaW5lLXByb2dyZXNzIjpbSXQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFscy5saW5lUHJvZ3Jlc3N8fDB9XSxhY2N1bXVsYXRlZDpbTnQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQuZ2xvYmFscy5hY2N1bXVsYXRlZD9udWxsOnQuZ2xvYmFscy5hY2N1bXVsYXRlZH1dLCIrIjpbSXQsc3IoSXQpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGE9ZTtuPGEubGVuZ3RoO24rPTEpcis9YVtuXS5ldmFsdWF0ZSh0KTtyZXR1cm4gcn1dLCIqIjpbSXQsc3IoSXQpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEsbj0wLGE9ZTtuPGEubGVuZ3RoO24rPTEpcio9YVtuXS5ldmFsdWF0ZSh0KTtyZXR1cm4gcn1dLCItIjp7dHlwZTpJdCxvdmVybG9hZHM6W1tbSXQsSXRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCktbi5ldmFsdWF0ZSh0KX1dLFtbSXRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuLWVbMF0uZXZhbHVhdGUodCl9XV19LCIvIjpbSXQsW0l0LEl0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpL24uZXZhbHVhdGUodCl9XSwiJSI6W0l0LFtJdCxJdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KSVuLmV2YWx1YXRlKHQpfV0sbG4yOltJdCxbXSxmdW5jdGlvbigpe3JldHVybiBNYXRoLkxOMn1dLHBpOltJdCxbXSxmdW5jdGlvbigpe3JldHVybiBNYXRoLlBJfV0sZTpbSXQsW10sZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5FfV0sIl4iOltJdCxbSXQsSXRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIE1hdGgucG93KHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSl9XSxzcXJ0OltJdCxbSXRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5zcXJ0KHIuZXZhbHVhdGUodCkpfV0sbG9nMTA6W0l0LFtJdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmxvZyhyLmV2YWx1YXRlKHQpKS9NYXRoLkxOMTB9XSxsbjpbSXQsW0l0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgubG9nKHIuZXZhbHVhdGUodCkpfV0sbG9nMjpbSXQsW0l0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgubG9nKHIuZXZhbHVhdGUodCkpL01hdGguTE4yfV0sc2luOltJdCxbSXRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5zaW4oci5ldmFsdWF0ZSh0KSl9XSxjb3M6W0l0LFtJdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmNvcyhyLmV2YWx1YXRlKHQpKX1dLHRhbjpbSXQsW0l0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgudGFuKHIuZXZhbHVhdGUodCkpfV0sYXNpbjpbSXQsW0l0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYXNpbihyLmV2YWx1YXRlKHQpKX1dLGFjb3M6W0l0LFtJdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmFjb3Moci5ldmFsdWF0ZSh0KSl9XSxhdGFuOltJdCxbSXRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5hdGFuKHIuZXZhbHVhdGUodCkpfV0sbWluOltJdCxzcihJdCksZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5taW4uYXBwbHkoTWF0aCxlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5ldmFsdWF0ZSh0KX0pKX1dLG1heDpbSXQsc3IoSXQpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4LmFwcGx5KE1hdGgsZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXZhbHVhdGUodCl9KSl9XSxhYnM6W0l0LFtJdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmFicyhyLmV2YWx1YXRlKHQpKX1dLHJvdW5kOltJdCxbSXRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ldmFsdWF0ZSh0KTtyZXR1cm4gcjwwPy1NYXRoLnJvdW5kKC1yKTpNYXRoLnJvdW5kKHIpfV0sZmxvb3I6W0l0LFtJdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmZsb29yKHIuZXZhbHVhdGUodCkpfV0sY2VpbDpbSXQsW0l0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguY2VpbChyLmV2YWx1YXRlKHQpKX1dLCJmaWx0ZXItPT0iOltSdCxbRHQsTnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHQucHJvcGVydGllcygpW3IudmFsdWVdPT09bi52YWx1ZX1dLCJmaWx0ZXItaWQtPT0iOltSdCxbTnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gdC5pZCgpPT09ci52YWx1ZX1dLCJmaWx0ZXItdHlwZS09PSI6W1J0LFtEdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiB0Lmdlb21ldHJ5VHlwZSgpPT09ci52YWx1ZX1dLCJmaWx0ZXItPCI6W1J0LFtEdCxOdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxhPXQucHJvcGVydGllcygpW3IudmFsdWVdLGk9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGE9PXR5cGVvZiBpJiZhPGl9XSwiZmlsdGVyLWlkLTwiOltSdCxbTnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxhPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgYSYmbjxhfV0sImZpbHRlci0+IjpbUnQsW0R0LE50XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGE9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0saT1uLnZhbHVlO3JldHVybiB0eXBlb2YgYT09dHlwZW9mIGkmJmE+aX1dLCJmaWx0ZXItaWQtPiI6W1J0LFtOdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGE9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBhJiZuPmF9XSwiZmlsdGVyLTw9IjpbUnQsW0R0LE50XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGE9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0saT1uLnZhbHVlO3JldHVybiB0eXBlb2YgYT09dHlwZW9mIGkmJmE8PWl9XSwiZmlsdGVyLWlkLTw9IjpbUnQsW050XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksYT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGEmJm48PWF9XSwiZmlsdGVyLT49IjpbUnQsW0R0LE50XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGE9dC5wcm9wZXJ0aWVzKClbci52YWx1ZV0saT1uLnZhbHVlO3JldHVybiB0eXBlb2YgYT09dHlwZW9mIGkmJmE+PWl9XSwiZmlsdGVyLWlkLT49IjpbUnQsW050XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksYT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGEmJm4+PWF9XSwiZmlsdGVyLWhhcyI6W1J0LFtOdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZSBpbiB0LnByb3BlcnRpZXMoKX1dLCJmaWx0ZXItaGFzLWlkIjpbUnQsW10sZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10LmlkKCl9XSwiZmlsdGVyLXR5cGUtaW4iOltSdCxbVXQoRHQpXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLnZhbHVlLmluZGV4T2YodC5nZW9tZXRyeVR5cGUoKSk+PTB9XSwiZmlsdGVyLWlkLWluIjpbUnQsW1V0KE50KV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZS5pbmRleE9mKHQuaWQoKSk+PTB9XSwiZmlsdGVyLWluLXNtYWxsIjpbUnQsW0R0LFV0KE50KV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBlWzFdLnZhbHVlLmluZGV4T2YodC5wcm9wZXJ0aWVzKClbci52YWx1ZV0pPj0wfV0sImZpbHRlci1pbi1sYXJnZSI6W1J0LFtEdCxVdChOdCldLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcig7cjw9bjspe3ZhciBhPXIrbj4+MTtpZihlW2FdPT09dClyZXR1cm4hMDtlW2FdPnQ/bj1hLTE6cj1hKzF9cmV0dXJuITF9KHQucHJvcGVydGllcygpW3IudmFsdWVdLG4udmFsdWUsMCxuLnZhbHVlLmxlbmd0aC0xKX1dLGFsbDp7dHlwZTpSdCxvdmVybG9hZHM6W1tbUnQsUnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCkmJm4uZXZhbHVhdGUodCl9XSxbc3IoUnQpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSlpZighbltyXS5ldmFsdWF0ZSh0KSlyZXR1cm4hMTtyZXR1cm4hMH1dXX0sYW55Ont0eXBlOlJ0LG92ZXJsb2FkczpbW1tSdCxSdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KXx8bi5ldmFsdWF0ZSh0KX1dLFtzcihSdCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKWlmKG5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITA7cmV0dXJuITF9XV19LCIhIjpbUnQsW1J0XSxmdW5jdGlvbih0LGUpe3JldHVybiFlWzBdLmV2YWx1YXRlKHQpfV0sImlzLXN1cHBvcnRlZC1zY3JpcHQiOltSdCxbRHRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuZ2xvYmFscyYmdC5nbG9iYWxzLmlzU3VwcG9ydGVkU2NyaXB0O3JldHVybiFufHxuKHIuZXZhbHVhdGUodCkpfV0sdXBjYXNlOltEdCxbRHRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkudG9VcHBlckNhc2UoKX1dLGRvd25jYXNlOltEdCxbRHRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkudG9Mb3dlckNhc2UoKX1dLGNvbmNhdDpbRHQsc3IoTnQpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiAkdChlLmV2YWx1YXRlKHQpKX0pLmpvaW4oIiIpfV0sInJlc29sdmVkLWxvY2FsZSI6W0R0LFtqdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS5yZXNvbHZlZExvY2FsZSgpfV19KTt2YXIgX3I9ZnVuY3Rpb24odCxlKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLl93YXJuaW5nSGlzdG9yeT17fSx0aGlzLl9ldmFsdWF0b3I9bmV3IGxlLHRoaXMuX2RlZmF1bHRWYWx1ZT1lP2Z1bmN0aW9uKHQpe3JldHVybiJjb2xvciI9PT10LnR5cGUmJmRyKHQuZGVmYXVsdCk/bmV3IFd0KDAsMCwwLDApOiJjb2xvciI9PT10LnR5cGU/V3QucGFyc2UodC5kZWZhdWx0KXx8bnVsbDp2b2lkIDA9PT10LmRlZmF1bHQ/bnVsbDp0LmRlZmF1bHR9KGUpOm51bGwsdGhpcy5fZW51bVZhbHVlcz1lJiYiZW51bSI9PT1lLnR5cGU/ZS52YWx1ZXM6bnVsbH07ZnVuY3Rpb24gd3IodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPjAmJiJzdHJpbmciPT10eXBlb2YgdFswXSYmdFswXWluIG5yfWZ1bmN0aW9uIGtyKHQsZSl7dmFyIHI9bmV3IGdlKG5yLFtdLGU/ZnVuY3Rpb24odCl7dmFyIGU9e2NvbG9yOkZ0LHN0cmluZzpEdCxudW1iZXI6SXQsZW51bTpEdCxib29sZWFuOlJ0LGZvcm1hdHRlZDpWdH07cmV0dXJuImFycmF5Ij09PXQudHlwZT9VdChlW3QudmFsdWVdfHxOdCx0Lmxlbmd0aCk6ZVt0LnR5cGVdfShlKTp2b2lkIDApLG49ci5wYXJzZSh0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUmJiJzdHJpbmciPT09ZS50eXBlP3t0eXBlQW5ub3RhdGlvbjoiY29lcmNlIn06dm9pZCAwKTtyZXR1cm4gbj9scihuZXcgX3IobixlKSk6Y3Ioci5lcnJvcnMpfV9yLnByb3RvdHlwZS5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscz10LHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlPWUsdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmVTdGF0ZT1yLHRoaXMuX2V2YWx1YXRvci5mb3JtYXR0ZWRTZWN0aW9uPW4sdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuX2V2YWx1YXRvcil9LF9yLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscz10LHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlPWV8fG51bGwsdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmVTdGF0ZT1yfHxudWxsLHRoaXMuX2V2YWx1YXRvci5mb3JtYXR0ZWRTZWN0aW9uPW58fG51bGw7dHJ5e3ZhciBhPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpO2lmKG51bGw9PWEpcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtpZih0aGlzLl9lbnVtVmFsdWVzJiYhKGEgaW4gdGhpcy5fZW51bVZhbHVlcykpdGhyb3cgbmV3IGVlKCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBvbmUgb2YgIitPYmplY3Qua2V5cyh0aGlzLl9lbnVtVmFsdWVzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfSkuam9pbigiLCAiKSsiLCBidXQgZm91bmQgIitKU09OLnN0cmluZ2lmeShhKSsiIGluc3RlYWQuIik7cmV0dXJuIGF9Y2F0Y2godCl7cmV0dXJuIHRoaXMuX3dhcm5pbmdIaXN0b3J5W3QubWVzc2FnZV18fCh0aGlzLl93YXJuaW5nSGlzdG9yeVt0Lm1lc3NhZ2VdPSEwLCJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuKHQubWVzc2FnZSkpLHRoaXMuX2RlZmF1bHRWYWx1ZX19O3ZhciBUcj1mdW5jdGlvbih0LGUpe3RoaXMua2luZD10LHRoaXMuX3N0eWxlRXhwcmVzc2lvbj1lLHRoaXMuaXNTdGF0ZURlcGVuZGVudD0iY29uc3RhbnQiIT09dCYmIWZlKGUuZXhwcmVzc2lvbil9O1RyLnByb3RvdHlwZS5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyh0LGUscixuKX0sVHIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGUodCxlLHIsbil9O3ZhciBNcj1mdW5jdGlvbih0LGUscixuKXt0aGlzLmtpbmQ9dCx0aGlzLnpvb21TdG9wcz1yLHRoaXMuX3N0eWxlRXhwcmVzc2lvbj1lLHRoaXMuaXNTdGF0ZURlcGVuZGVudD0iY2FtZXJhIiE9PXQmJiFmZShlLmV4cHJlc3Npb24pLHRoaXMuaW50ZXJwb2xhdGlvblR5cGU9bn07ZnVuY3Rpb24gQXIodCxlKXtpZigiZXJyb3IiPT09KHQ9a3IodCxlKSkucmVzdWx0KXJldHVybiB0O3ZhciByPXQudmFsdWUuZXhwcmVzc2lvbixuPWhlKHIpO2lmKCFuJiYhdXIoZSkpcmV0dXJuIGNyKFtuZXcgUHQoIiIsImRhdGEgZXhwcmVzc2lvbnMgbm90IHN1cHBvcnRlZCIpXSk7dmFyIGE9cGUocixbInpvb20iXSk7aWYoIWEmJiFocihlKSlyZXR1cm4gY3IoW25ldyBQdCgiIiwiem9vbSBleHByZXNzaW9ucyBub3Qgc3VwcG9ydGVkIildKTt2YXIgaT1mdW5jdGlvbiB0KGUpe3ZhciByPW51bGw7aWYoZSBpbnN0YW5jZW9mIFVlKXI9dChlLnJlc3VsdCk7ZWxzZSBpZihlIGluc3RhbmNlb2YgVmUpZm9yKHZhciBuPTAsYT1lLmFyZ3M7bjxhLmxlbmd0aDtuKz0xKXt2YXIgaT1hW25dO2lmKHI9dChpKSlicmVha31lbHNlKGUgaW5zdGFuY2VvZiBtZXx8ZSBpbnN0YW5jZW9mIE5lKSYmZS5pbnB1dCBpbnN0YW5jZW9mIGNlJiYiem9vbSI9PT1lLmlucHV0Lm5hbWUmJihyPWUpO3JldHVybiByIGluc3RhbmNlb2YgUHQ/cjooZS5lYWNoQ2hpbGQoZnVuY3Rpb24oZSl7dmFyIG49dChlKTtuIGluc3RhbmNlb2YgUHQ/cj1uOiFyJiZuP3I9bmV3IFB0KCIiLCciem9vbSIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsICJzdGVwIiBvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb24uJyk6ciYmbiYmciE9PW4mJihyPW5ldyBQdCgiIiwnT25seSBvbmUgem9vbS1iYXNlZCAic3RlcCIgb3IgImludGVycG9sYXRlIiBzdWJleHByZXNzaW9uIG1heSBiZSB1c2VkIGluIGFuIGV4cHJlc3Npb24uJykpfSkscil9KHIpO2lmKCFpJiYhYSlyZXR1cm4gY3IoW25ldyBQdCgiIiwnInpvb20iIGV4cHJlc3Npb24gbWF5IG9ubHkgYmUgdXNlZCBhcyBpbnB1dCB0byBhIHRvcC1sZXZlbCAic3RlcCIgb3IgImludGVycG9sYXRlIiBleHByZXNzaW9uLicpXSk7aWYoaSBpbnN0YW5jZW9mIFB0KXJldHVybiBjcihbaV0pO2lmKGkgaW5zdGFuY2VvZiBOZSYmIWZyKGUpKXJldHVybiBjcihbbmV3IFB0KCIiLCciaW50ZXJwb2xhdGUiIGV4cHJlc3Npb25zIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhpcyBwcm9wZXJ0eScpXSk7aWYoIWkpcmV0dXJuIGxyKG5ldyBUcihuPyJjb25zdGFudCI6InNvdXJjZSIsdC52YWx1ZSkpO3ZhciBvPWkgaW5zdGFuY2VvZiBOZT9pLmludGVycG9sYXRpb246dm9pZCAwO3JldHVybiBscihuZXcgTXIobj8iY2FtZXJhIjoiY29tcG9zaXRlIix0LnZhbHVlLGkubGFiZWxzLG8pKX1Nci5wcm90b3R5cGUuZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcodCxlLHIsbil9LE1yLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKHQsZSxyLG4pfSxNci5wcm90b3R5cGUuaW50ZXJwb2xhdGlvbkZhY3Rvcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGlvblR5cGU/TmUuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb25UeXBlLHQsZSxyKTowfTt2YXIgU3I9ZnVuY3Rpb24odCxlKXt0aGlzLl9wYXJhbWV0ZXJzPXQsdGhpcy5fc3BlY2lmaWNhdGlvbj1lLFN0KHRoaXMsZnVuY3Rpb24gdChlLHIpe3ZhciBuLGEsaSxvPSJjb2xvciI9PT1yLnR5cGUscz1lLnN0b3BzJiYib2JqZWN0Ij09dHlwZW9mIGUuc3RvcHNbMF1bMF0sbD1zfHx2b2lkIDAhPT1lLnByb3BlcnR5LGM9c3x8IWwsdT1lLnR5cGV8fChmcihyKT8iZXhwb25lbnRpYWwiOiJpbnRlcnZhbCIpO2lmKG8mJigoZT1TdCh7fSxlKSkuc3RvcHMmJihlLnN0b3BzPWUuc3RvcHMubWFwKGZ1bmN0aW9uKHQpe3JldHVyblt0WzBdLFd0LnBhcnNlKHRbMV0pXX0pKSxlLmRlZmF1bHQ/ZS5kZWZhdWx0PVd0LnBhcnNlKGUuZGVmYXVsdCk6ZS5kZWZhdWx0PVd0LnBhcnNlKHIuZGVmYXVsdCkpLGUuY29sb3JTcGFjZSYmInJnYiIhPT1lLmNvbG9yU3BhY2UmJiFCZVtlLmNvbG9yU3BhY2VdKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb2xvciBzcGFjZTogIitlLmNvbG9yU3BhY2UpO2lmKCJleHBvbmVudGlhbCI9PT11KW49eHI7ZWxzZSBpZigiaW50ZXJ2YWwiPT09dSluPXlyO2Vsc2UgaWYoImNhdGVnb3JpY2FsIj09PXUpe249bXIsYT1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgaD0wLGY9ZS5zdG9wcztoPGYubGVuZ3RoO2grPTEpe3ZhciBwPWZbaF07YVtwWzBdXT1wWzFdfWk9dHlwZW9mIGUuc3RvcHNbMF1bMF19ZWxzZXtpZigiaWRlbnRpdHkiIT09dSl0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZnVuY3Rpb24gdHlwZSAiJyt1KyciJyk7bj1icn1pZihzKXtmb3IodmFyIGQ9e30sZz1bXSx2PTA7djxlLnN0b3BzLmxlbmd0aDt2Kyspe3ZhciBtPWUuc3RvcHNbdl0seT1tWzBdLnpvb207dm9pZCAwPT09ZFt5XSYmKGRbeV09e3pvb206eSx0eXBlOmUudHlwZSxwcm9wZXJ0eTplLnByb3BlcnR5LGRlZmF1bHQ6ZS5kZWZhdWx0LHN0b3BzOltdfSxnLnB1c2goeSkpLGRbeV0uc3RvcHMucHVzaChbbVswXS52YWx1ZSxtWzFdXSl9Zm9yKHZhciB4PVtdLGI9MCxfPWc7YjxfLmxlbmd0aDtiKz0xKXt2YXIgdz1fW2JdO3gucHVzaChbZFt3XS56b29tLHQoZFt3XSxyKV0pfXZhciBrPXtuYW1lOiJsaW5lYXIifTtyZXR1cm57a2luZDoiY29tcG9zaXRlIixpbnRlcnBvbGF0aW9uVHlwZTprLGludGVycG9sYXRpb25GYWN0b3I6TmUuaW50ZXJwb2xhdGlvbkZhY3Rvci5iaW5kKHZvaWQgMCxrKSx6b29tU3RvcHM6eC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxldmFsdWF0ZTpmdW5jdGlvbih0LG4pe3ZhciBhPXQuem9vbTtyZXR1cm4geHIoe3N0b3BzOngsYmFzZTplLmJhc2V9LHIsYSkuZXZhbHVhdGUoYSxuKX19fWlmKGMpe3ZhciBUPSJleHBvbmVudGlhbCI9PT11P3tuYW1lOiJleHBvbmVudGlhbCIsYmFzZTp2b2lkIDAhPT1lLmJhc2U/ZS5iYXNlOjF9Om51bGw7cmV0dXJue2tpbmQ6ImNhbWVyYSIsaW50ZXJwb2xhdGlvblR5cGU6VCxpbnRlcnBvbGF0aW9uRmFjdG9yOk5lLmludGVycG9sYXRpb25GYWN0b3IuYmluZCh2b2lkIDAsVCksem9vbVN0b3BzOmUuc3RvcHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSksZXZhbHVhdGU6ZnVuY3Rpb24odCl7dmFyIG89dC56b29tO3JldHVybiBuKGUscixvLGEsaSl9fX1yZXR1cm57a2luZDoic291cmNlIixldmFsdWF0ZTpmdW5jdGlvbih0LG8pe3ZhciBzPW8mJm8ucHJvcGVydGllcz9vLnByb3BlcnRpZXNbZS5wcm9wZXJ0eV06dm9pZCAwO3JldHVybiB2b2lkIDA9PT1zP3ZyKGUuZGVmYXVsdCxyLmRlZmF1bHQpOm4oZSxyLHMsYSxpKX19fSh0aGlzLl9wYXJhbWV0ZXJzLHRoaXMuX3NwZWNpZmljYXRpb24pKX07ZnVuY3Rpb24gRXIodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWN8fHt9LGE9dC5vYmplY3RFbGVtZW50VmFsaWRhdG9yc3x8e30saT10LnN0eWxlLG89dC5zdHlsZVNwZWMscz1bXSxsPXByKHIpO2lmKCJvYmplY3QiIT09bClyZXR1cm5bbmV3IE10KGUsciwib2JqZWN0IGV4cGVjdGVkLCAiK2wrIiBmb3VuZCIpXTtmb3IodmFyIGMgaW4gcil7dmFyIHU9Yy5zcGxpdCgiLiIpWzBdLGg9blt1XXx8blsiKiJdLGY9dm9pZCAwO2lmKGFbdV0pZj1hW3VdO2Vsc2UgaWYoblt1XSlmPVFyO2Vsc2UgaWYoYVsiKiJdKWY9YVsiKiJdO2Vsc2V7aWYoIW5bIioiXSl7cy5wdXNoKG5ldyBNdChlLHJbY10sJ3Vua25vd24gcHJvcGVydHkgIicrYysnIicpKTtjb250aW51ZX1mPVFyfXM9cy5jb25jYXQoZih7a2V5OihlP2UrIi4iOmUpK2MsdmFsdWU6cltjXSx2YWx1ZVNwZWM6aCxzdHlsZTppLHN0eWxlU3BlYzpvLG9iamVjdDpyLG9iamVjdEtleTpjfSxyKSl9Zm9yKHZhciBwIGluIG4pYVtwXXx8bltwXS5yZXF1aXJlZCYmdm9pZCAwPT09bltwXS5kZWZhdWx0JiZ2b2lkIDA9PT1yW3BdJiZzLnB1c2gobmV3IE10KGUsciwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiJytwKyciJykpO3JldHVybiBzfWZ1bmN0aW9uIExyKHQpe3ZhciBlPXQudmFsdWUscj10LnZhbHVlU3BlYyxuPXQuc3R5bGUsYT10LnN0eWxlU3BlYyxpPXQua2V5LG89dC5hcnJheUVsZW1lbnRWYWxpZGF0b3J8fFFyO2lmKCJhcnJheSIhPT1wcihlKSlyZXR1cm5bbmV3IE10KGksZSwiYXJyYXkgZXhwZWN0ZWQsICIrcHIoZSkrIiBmb3VuZCIpXTtpZihyLmxlbmd0aCYmZS5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm5bbmV3IE10KGksZSwiYXJyYXkgbGVuZ3RoICIrci5sZW5ndGgrIiBleHBlY3RlZCwgbGVuZ3RoICIrZS5sZW5ndGgrIiBmb3VuZCIpXTtpZihyWyJtaW4tbGVuZ3RoIl0mJmUubGVuZ3RoPHJbIm1pbi1sZW5ndGgiXSlyZXR1cm5bbmV3IE10KGksZSwiYXJyYXkgbGVuZ3RoIGF0IGxlYXN0ICIrclsibWluLWxlbmd0aCJdKyIgZXhwZWN0ZWQsIGxlbmd0aCAiK2UubGVuZ3RoKyIgZm91bmQiKV07dmFyIHM9e3R5cGU6ci52YWx1ZSx2YWx1ZXM6ci52YWx1ZXN9O2EuJHZlcnNpb248NyYmKHMuZnVuY3Rpb249ci5mdW5jdGlvbiksIm9iamVjdCI9PT1wcihyLnZhbHVlKSYmKHM9ci52YWx1ZSk7Zm9yKHZhciBsPVtdLGM9MDtjPGUubGVuZ3RoO2MrKylsPWwuY29uY2F0KG8oe2FycmF5OmUsYXJyYXlJbmRleDpjLHZhbHVlOmVbY10sdmFsdWVTcGVjOnMsc3R5bGU6bixzdHlsZVNwZWM6YSxrZXk6aSsiWyIrYysiXSJ9KSk7cmV0dXJuIGx9ZnVuY3Rpb24gQ3IodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWMsYT1wcihyKTtyZXR1cm4ibnVtYmVyIiE9PWE/W25ldyBNdChlLHIsIm51bWJlciBleHBlY3RlZCwgIithKyIgZm91bmQiKV06Im1pbmltdW0iaW4gbiYmcjxuLm1pbmltdW0/W25ldyBNdChlLHIscisiIGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB2YWx1ZSAiK24ubWluaW11bSldOiJtYXhpbXVtImluIG4mJnI+bi5tYXhpbXVtP1tuZXcgTXQoZSxyLHIrIiBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgIituLm1heGltdW0pXTpbXX1mdW5jdGlvbiBQcih0KXt2YXIgZSxyLG4sYT10LnZhbHVlU3BlYyxpPUx0KHQudmFsdWUudHlwZSksbz17fSxzPSJjYXRlZ29yaWNhbCIhPT1pJiZ2b2lkIDA9PT10LnZhbHVlLnByb3BlcnR5LGw9IXMsYz0iYXJyYXkiPT09cHIodC52YWx1ZS5zdG9wcykmJiJhcnJheSI9PT1wcih0LnZhbHVlLnN0b3BzWzBdKSYmIm9iamVjdCI9PT1wcih0LnZhbHVlLnN0b3BzWzBdWzBdKSx1PUVyKHtrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSx2YWx1ZVNwZWM6dC5zdHlsZVNwZWMuZnVuY3Rpb24sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e3N0b3BzOmZ1bmN0aW9uKHQpe2lmKCJpZGVudGl0eSI9PT1pKXJldHVybltuZXcgTXQodC5rZXksdC52YWx1ZSwnaWRlbnRpdHkgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGEgInN0b3BzIiBwcm9wZXJ0eScpXTt2YXIgZT1bXSxyPXQudmFsdWU7cmV0dXJuIGU9ZS5jb25jYXQoTHIoe2tleTp0LmtleSx2YWx1ZTpyLHZhbHVlU3BlYzp0LnZhbHVlU3BlYyxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxhcnJheUVsZW1lbnRWYWxpZGF0b3I6aH0pKSwiYXJyYXkiPT09cHIocikmJjA9PT1yLmxlbmd0aCYmZS5wdXNoKG5ldyBNdCh0LmtleSxyLCJhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHN0b3AiKSksZX0sZGVmYXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gUXIoe2tleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHZhbHVlU3BlYzphLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSl9fX0pO3JldHVybiJpZGVudGl0eSI9PT1pJiZzJiZ1LnB1c2gobmV3IE10KHQua2V5LHQudmFsdWUsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgInByb3BlcnR5IicpKSwiaWRlbnRpdHkiPT09aXx8dC52YWx1ZS5zdG9wc3x8dS5wdXNoKG5ldyBNdCh0LmtleSx0LnZhbHVlLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJzdG9wcyInKSksImV4cG9uZW50aWFsIj09PWkmJnQudmFsdWVTcGVjLmV4cHJlc3Npb24mJiFmcih0LnZhbHVlU3BlYykmJnUucHVzaChuZXcgTXQodC5rZXksdC52YWx1ZSwiZXhwb25lbnRpYWwgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSksdC5zdHlsZVNwZWMuJHZlcnNpb24+PTgmJihsJiYhdXIodC52YWx1ZVNwZWMpP3UucHVzaChuZXcgTXQodC5rZXksdC52YWx1ZSwicHJvcGVydHkgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSk6cyYmIWhyKHQudmFsdWVTcGVjKSYmdS5wdXNoKG5ldyBNdCh0LmtleSx0LnZhbHVlLCJ6b29tIGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkIikpKSwiY2F0ZWdvcmljYWwiIT09aSYmIWN8fHZvaWQgMCE9PXQudmFsdWUucHJvcGVydHl8fHUucHVzaChuZXcgTXQodC5rZXksdC52YWx1ZSwnInByb3BlcnR5IiBwcm9wZXJ0eSBpcyByZXF1aXJlZCcpKSx1O2Z1bmN0aW9uIGgodCl7dmFyIGU9W10saT10LnZhbHVlLHM9dC5rZXk7aWYoImFycmF5IiE9PXByKGkpKXJldHVybltuZXcgTXQocyxpLCJhcnJheSBleHBlY3RlZCwgIitwcihpKSsiIGZvdW5kIildO2lmKDIhPT1pLmxlbmd0aClyZXR1cm5bbmV3IE10KHMsaSwiYXJyYXkgbGVuZ3RoIDIgZXhwZWN0ZWQsIGxlbmd0aCAiK2kubGVuZ3RoKyIgZm91bmQiKV07aWYoYyl7aWYoIm9iamVjdCIhPT1wcihpWzBdKSlyZXR1cm5bbmV3IE10KHMsaSwib2JqZWN0IGV4cGVjdGVkLCAiK3ByKGlbMF0pKyIgZm91bmQiKV07aWYodm9pZCAwPT09aVswXS56b29tKXJldHVybltuZXcgTXQocyxpLCJvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHpvb20iKV07aWYodm9pZCAwPT09aVswXS52YWx1ZSlyZXR1cm5bbmV3IE10KHMsaSwib2JqZWN0IHN0b3Aga2V5IG11c3QgaGF2ZSB2YWx1ZSIpXTtpZihuJiZuPkx0KGlbMF0uem9vbSkpcmV0dXJuW25ldyBNdChzLGlbMF0uem9vbSwic3RvcCB6b29tIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXIiKV07THQoaVswXS56b29tKSE9PW4mJihuPUx0KGlbMF0uem9vbSkscj12b2lkIDAsbz17fSksZT1lLmNvbmNhdChFcih7a2V5OnMrIlswXSIsdmFsdWU6aVswXSx2YWx1ZVNwZWM6e3pvb206e319LHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnt6b29tOkNyLHZhbHVlOmZ9fSkpfWVsc2UgZT1lLmNvbmNhdChmKHtrZXk6cysiWzBdIix2YWx1ZTppWzBdLHZhbHVlU3BlYzp7fSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30saSkpO3JldHVybiB3cihDdChpWzFdKSk/ZS5jb25jYXQoW25ldyBNdChzKyJbMV0iLGlbMV0sImV4cHJlc3Npb25zIGFyZSBub3QgYWxsb3dlZCBpbiBmdW5jdGlvbiBzdG9wcy4iKV0pOmUuY29uY2F0KFFyKHtrZXk6cysiWzFdIix2YWx1ZTppWzFdLHZhbHVlU3BlYzphLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSkpfWZ1bmN0aW9uIGYodCxuKXt2YXIgcz1wcih0LnZhbHVlKSxsPUx0KHQudmFsdWUpLGM9bnVsbCE9PXQudmFsdWU/dC52YWx1ZTpuO2lmKGUpe2lmKHMhPT1lKXJldHVybltuZXcgTXQodC5rZXksYyxzKyIgc3RvcCBkb21haW4gdHlwZSBtdXN0IG1hdGNoIHByZXZpb3VzIHN0b3AgZG9tYWluIHR5cGUgIitlKV19ZWxzZSBlPXM7aWYoIm51bWJlciIhPT1zJiYic3RyaW5nIiE9PXMmJiJib29sZWFuIiE9PXMpcmV0dXJuW25ldyBNdCh0LmtleSxjLCJzdG9wIGRvbWFpbiB2YWx1ZSBtdXN0IGJlIGEgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKV07aWYoIm51bWJlciIhPT1zJiYiY2F0ZWdvcmljYWwiIT09aSl7dmFyIHU9Im51bWJlciBleHBlY3RlZCwgIitzKyIgZm91bmQiO3JldHVybiB1cihhKSYmdm9pZCAwPT09aSYmKHUrPSdcbklmIHlvdSBpbnRlbmRlZCB0byB1c2UgYSBjYXRlZ29yaWNhbCBmdW5jdGlvbiwgc3BlY2lmeSBgInR5cGUiOiAiY2F0ZWdvcmljYWwiYC4nKSxbbmV3IE10KHQua2V5LGMsdSldfXJldHVybiJjYXRlZ29yaWNhbCIhPT1pfHwibnVtYmVyIiE9PXN8fGlzRmluaXRlKGwpJiZNYXRoLmZsb29yKGwpPT09bD8iY2F0ZWdvcmljYWwiIT09aSYmIm51bWJlciI9PT1zJiZ2b2lkIDAhPT1yJiZsPHI/W25ldyBNdCh0LmtleSxjLCJzdG9wIGRvbWFpbiB2YWx1ZXMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyIildOihyPWwsImNhdGVnb3JpY2FsIj09PWkmJmwgaW4gbz9bbmV3IE10KHQua2V5LGMsInN0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZSIpXToob1tsXT0hMCxbXSkpOltuZXcgTXQodC5rZXksYywiaW50ZWdlciBleHBlY3RlZCwgZm91bmQgIitsKV19fWZ1bmN0aW9uIE9yKHQpe3ZhciBlPSgicHJvcGVydHkiPT09dC5leHByZXNzaW9uQ29udGV4dD9BcjprcikoQ3QodC52YWx1ZSksdC52YWx1ZVNwZWMpO2lmKCJlcnJvciI9PT1lLnJlc3VsdClyZXR1cm4gZS52YWx1ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBNdCgiIit0LmtleStlLmtleSx0LnZhbHVlLGUubWVzc2FnZSl9KTt2YXIgcj1lLnZhbHVlLmV4cHJlc3Npb258fGUudmFsdWUuX3N0eWxlRXhwcmVzc2lvbi5leHByZXNzaW9uO2lmKCJwcm9wZXJ0eSI9PT10LmV4cHJlc3Npb25Db250ZXh0JiYidGV4dC1mb250Ij09PXQucHJvcGVydHlLZXkmJi0xIT09ci5wb3NzaWJsZU91dHB1dHMoKS5pbmRleE9mKHZvaWQgMCkpcmV0dXJuW25ldyBNdCh0LmtleSx0LnZhbHVlLCdJbnZhbGlkIGRhdGEgZXhwcmVzc2lvbiBmb3IgIicrdC5wcm9wZXJ0eUtleSsnIi4gT3V0cHV0IHZhbHVlcyBtdXN0IGJlIGNvbnRhaW5lZCBhcyBsaXRlcmFscyB3aXRoaW4gdGhlIGV4cHJlc3Npb24uJyldO2lmKCJwcm9wZXJ0eSI9PT10LmV4cHJlc3Npb25Db250ZXh0JiYibGF5b3V0Ij09PXQucHJvcGVydHlUeXBlJiYhZmUocikpcmV0dXJuW25ldyBNdCh0LmtleSx0LnZhbHVlLCciZmVhdHVyZS1zdGF0ZSIgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGxheW91dCBwcm9wZXJ0aWVzLicpXTtpZigiZmlsdGVyIj09PXQuZXhwcmVzc2lvbkNvbnRleHQmJiFmZShyKSlyZXR1cm5bbmV3IE10KHQua2V5LHQudmFsdWUsJyJmZWF0dXJlLXN0YXRlIiBkYXRhIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggZmlsdGVycy4nKV07aWYodC5leHByZXNzaW9uQ29udGV4dCYmMD09PXQuZXhwcmVzc2lvbkNvbnRleHQuaW5kZXhPZigiY2x1c3RlciIpKXtpZighcGUocixbInpvb20iLCJmZWF0dXJlLXN0YXRlIl0pKXJldHVybltuZXcgTXQodC5rZXksdC52YWx1ZSwnInpvb20iIGFuZCAiZmVhdHVyZS1zdGF0ZSIgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBjbHVzdGVyIHByb3BlcnRpZXMuJyldO2lmKCJjbHVzdGVyLWluaXRpYWwiPT09dC5leHByZXNzaW9uQ29udGV4dCYmIWhlKHIpKXJldHVybltuZXcgTXQodC5rZXksdC52YWx1ZSwiRmVhdHVyZSBkYXRhIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggaW5pdGlhbCBleHByZXNzaW9uIHBhcnQgb2YgY2x1c3RlciBwcm9wZXJ0aWVzLiIpXX1yZXR1cm5bXX1mdW5jdGlvbiB6cih0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbj10LnZhbHVlU3BlYyxhPVtdO3JldHVybiBBcnJheS5pc0FycmF5KG4udmFsdWVzKT8tMT09PW4udmFsdWVzLmluZGV4T2YoTHQocikpJiZhLnB1c2gobmV3IE10KGUsciwiZXhwZWN0ZWQgb25lIG9mIFsiK24udmFsdWVzLmpvaW4oIiwgIikrIl0sICIrSlNPTi5zdHJpbmdpZnkocikrIiBmb3VuZCIpKTotMT09PU9iamVjdC5rZXlzKG4udmFsdWVzKS5pbmRleE9mKEx0KHIpKSYmYS5wdXNoKG5ldyBNdChlLHIsImV4cGVjdGVkIG9uZSBvZiBbIitPYmplY3Qua2V5cyhuLnZhbHVlcykuam9pbigiLCAiKSsiXSwgIitKU09OLnN0cmluZ2lmeShyKSsiIGZvdW5kIikpLGF9ZnVuY3Rpb24gSXIodCl7aWYoITA9PT10fHwhMT09PXQpcmV0dXJuITA7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4hMTtzd2l0Y2godFswXSl7Y2FzZSJoYXMiOnJldHVybiB0Lmxlbmd0aD49MiYmIiRpZCIhPT10WzFdJiYiJHR5cGUiIT09dFsxXTtjYXNlImluIjpjYXNlIiFpbiI6Y2FzZSIhaGFzIjpjYXNlIm5vbmUiOnJldHVybiExO2Nhc2UiPT0iOmNhc2UiIT0iOmNhc2UiPiI6Y2FzZSI+PSI6Y2FzZSI8IjpjYXNlIjw9IjpyZXR1cm4gMyE9PXQubGVuZ3RofHxBcnJheS5pc0FycmF5KHRbMV0pfHxBcnJheS5pc0FycmF5KHRbMl0pO2Nhc2UiYW55IjpjYXNlImFsbCI6Zm9yKHZhciBlPTAscj10LnNsaWNlKDEpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTtpZighSXIobikmJiJib29sZWFuIiE9dHlwZW9mIG4pcmV0dXJuITF9cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMH19U3IuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBTcih0Ll9wYXJhbWV0ZXJzLHQuX3NwZWNpZmljYXRpb24pfSxTci5zZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJue19wYXJhbWV0ZXJzOnQuX3BhcmFtZXRlcnMsX3NwZWNpZmljYXRpb246dC5fc3BlY2lmaWNhdGlvbn19O3ZhciBEcj17dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSx0cmFuc2l0aW9uOiExLCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4iLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX19O2Z1bmN0aW9uIFJyKHQpe2lmKG51bGw9PXQpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9O0lyKHQpfHwodD1Ccih0KSk7dmFyIGU9a3IodCxEcik7aWYoImVycm9yIj09PWUucmVzdWx0KXRocm93IG5ldyBFcnJvcihlLnZhbHVlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXkrIjogIit0Lm1lc3NhZ2V9KS5qb2luKCIsICIpKTtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZS52YWx1ZS5ldmFsdWF0ZSh0LHIpfX1mdW5jdGlvbiBGcih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1mdW5jdGlvbiBCcih0KXtpZighdClyZXR1cm4hMDt2YXIgZSxyPXRbMF07cmV0dXJuIHQubGVuZ3RoPD0xPyJhbnkiIT09cjoiPT0iPT09cj9Ocih0WzFdLHRbMl0sIj09Iik6IiE9Ij09PXI/VXIoTnIodFsxXSx0WzJdLCI9PSIpKToiPCI9PT1yfHwiPiI9PT1yfHwiPD0iPT09cnx8Ij49Ij09PXI/TnIodFsxXSx0WzJdLHIpOiJhbnkiPT09cj8oZT10LnNsaWNlKDEpLFsiYW55Il0uY29uY2F0KGUubWFwKEJyKSkpOiJhbGwiPT09cj9bImFsbCJdLmNvbmNhdCh0LnNsaWNlKDEpLm1hcChCcikpOiJub25lIj09PXI/WyJhbGwiXS5jb25jYXQodC5zbGljZSgxKS5tYXAoQnIpLm1hcChVcikpOiJpbiI9PT1yP2pyKHRbMV0sdC5zbGljZSgyKSk6IiFpbiI9PT1yP1VyKGpyKHRbMV0sdC5zbGljZSgyKSkpOiJoYXMiPT09cj9Wcih0WzFdKToiIWhhcyIhPT1yfHxVcihWcih0WzFdKSl9ZnVuY3Rpb24gTnIodCxlLHIpe3N3aXRjaCh0KXtjYXNlIiR0eXBlIjpyZXR1cm5bImZpbHRlci10eXBlLSIrcixlXTtjYXNlIiRpZCI6cmV0dXJuWyJmaWx0ZXItaWQtIityLGVdO2RlZmF1bHQ6cmV0dXJuWyJmaWx0ZXItIityLHQsZV19fWZ1bmN0aW9uIGpyKHQsZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiExO3N3aXRjaCh0KXtjYXNlIiR0eXBlIjpyZXR1cm5bImZpbHRlci10eXBlLWluIixbImxpdGVyYWwiLGVdXTtjYXNlIiRpZCI6cmV0dXJuWyJmaWx0ZXItaWQtaW4iLFsibGl0ZXJhbCIsZV1dO2RlZmF1bHQ6cmV0dXJuIGUubGVuZ3RoPjIwMCYmIWUuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHQhPXR5cGVvZiBlWzBdfSk/WyJmaWx0ZXItaW4tbGFyZ2UiLHQsWyJsaXRlcmFsIixlLnNvcnQoRnIpXV06WyJmaWx0ZXItaW4tc21hbGwiLHQsWyJsaXRlcmFsIixlXV19fWZ1bmN0aW9uIFZyKHQpe3N3aXRjaCh0KXtjYXNlIiR0eXBlIjpyZXR1cm4hMDtjYXNlIiRpZCI6cmV0dXJuWyJmaWx0ZXItaGFzLWlkIl07ZGVmYXVsdDpyZXR1cm5bImZpbHRlci1oYXMiLHRdfX1mdW5jdGlvbiBVcih0KXtyZXR1cm5bIiEiLHRdfWZ1bmN0aW9uIHFyKHQpe3JldHVybiBJcihDdCh0LnZhbHVlKSk/T3IoU3Qoe30sdCx7ZXhwcmVzc2lvbkNvbnRleHQ6ImZpbHRlciIsdmFsdWVTcGVjOnt2YWx1ZToiYm9vbGVhbiJ9fSkpOmZ1bmN0aW9uIHQoZSl7dmFyIHI9ZS52YWx1ZSxuPWUua2V5O2lmKCJhcnJheSIhPT1wcihyKSlyZXR1cm5bbmV3IE10KG4sciwiYXJyYXkgZXhwZWN0ZWQsICIrcHIocikrIiBmb3VuZCIpXTt2YXIgYSxpPWUuc3R5bGVTcGVjLG89W107aWYoci5sZW5ndGg8MSlyZXR1cm5bbmV3IE10KG4sciwiZmlsdGVyIGFycmF5IG11c3QgaGF2ZSBhdCBsZWFzdCAxIGVsZW1lbnQiKV07c3dpdGNoKG89by5jb25jYXQoenIoe2tleTpuKyJbMF0iLHZhbHVlOnJbMF0sdmFsdWVTcGVjOmkuZmlsdGVyX29wZXJhdG9yLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpLEx0KHJbMF0pKXtjYXNlIjwiOmNhc2UiPD0iOmNhc2UiPiI6Y2FzZSI+PSI6ci5sZW5ndGg+PTImJiIkdHlwZSI9PT1MdChyWzFdKSYmby5wdXNoKG5ldyBNdChuLHIsJyIkdHlwZSIgY2Fubm90IGJlIHVzZSB3aXRoIG9wZXJhdG9yICInK3JbMF0rJyInKSk7Y2FzZSI9PSI6Y2FzZSIhPSI6MyE9PXIubGVuZ3RoJiZvLnB1c2gobmV3IE10KG4sciwnZmlsdGVyIGFycmF5IGZvciBvcGVyYXRvciAiJytyWzBdKyciIG11c3QgaGF2ZSAzIGVsZW1lbnRzJykpO2Nhc2UiaW4iOmNhc2UiIWluIjpyLmxlbmd0aD49MiYmInN0cmluZyIhPT0oYT1wcihyWzFdKSkmJm8ucHVzaChuZXcgTXQobisiWzFdIixyWzFdLCJzdHJpbmcgZXhwZWN0ZWQsICIrYSsiIGZvdW5kIikpO2Zvcih2YXIgcz0yO3M8ci5sZW5ndGg7cysrKWE9cHIocltzXSksIiR0eXBlIj09PUx0KHJbMV0pP289by5jb25jYXQoenIoe2tleTpuKyJbIitzKyJdIix2YWx1ZTpyW3NdLHZhbHVlU3BlYzppLmdlb21ldHJ5X3R5cGUsc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSk6InN0cmluZyIhPT1hJiYibnVtYmVyIiE9PWEmJiJib29sZWFuIiE9PWEmJm8ucHVzaChuZXcgTXQobisiWyIrcysiXSIscltzXSwic3RyaW5nLCBudW1iZXIsIG9yIGJvb2xlYW4gZXhwZWN0ZWQsICIrYSsiIGZvdW5kIikpO2JyZWFrO2Nhc2UiYW55IjpjYXNlImFsbCI6Y2FzZSJub25lIjpmb3IodmFyIGw9MTtsPHIubGVuZ3RoO2wrKylvPW8uY29uY2F0KHQoe2tleTpuKyJbIitsKyJdIix2YWx1ZTpyW2xdLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpO2JyZWFrO2Nhc2UiaGFzIjpjYXNlIiFoYXMiOmE9cHIoclsxXSksMiE9PXIubGVuZ3RoP28ucHVzaChuZXcgTXQobixyLCdmaWx0ZXIgYXJyYXkgZm9yICInK3JbMF0rJyIgb3BlcmF0b3IgbXVzdCBoYXZlIDIgZWxlbWVudHMnKSk6InN0cmluZyIhPT1hJiZvLnB1c2gobmV3IE10KG4rIlsxXSIsclsxXSwic3RyaW5nIGV4cGVjdGVkLCAiK2ErIiBmb3VuZCIpKX1yZXR1cm4gb30odCl9ZnVuY3Rpb24gSHIodCxlKXt2YXIgcj10LmtleSxuPXQuc3R5bGUsYT10LnN0eWxlU3BlYyxpPXQudmFsdWUsbz10Lm9iamVjdEtleSxzPWFbZSsiXyIrdC5sYXllclR5cGVdO2lmKCFzKXJldHVybltdO3ZhciBsPW8ubWF0Y2goL14oLiopLXRyYW5zaXRpb24kLyk7aWYoInBhaW50Ij09PWUmJmwmJnNbbFsxXV0mJnNbbFsxXV0udHJhbnNpdGlvbilyZXR1cm4gUXIoe2tleTpyLHZhbHVlOmksdmFsdWVTcGVjOmEudHJhbnNpdGlvbixzdHlsZTpuLHN0eWxlU3BlYzphfSk7dmFyIGMsdT10LnZhbHVlU3BlY3x8c1tvXTtpZighdSlyZXR1cm5bbmV3IE10KHIsaSwndW5rbm93biBwcm9wZXJ0eSAiJytvKyciJyldO2lmKCJzdHJpbmciPT09cHIoaSkmJnVyKHUpJiYhdS50b2tlbnMmJihjPS9eeyhbXn1dKyl9JC8uZXhlYyhpKSkpcmV0dXJuW25ldyBNdChyLGksJyInK28rJyIgZG9lcyBub3Qgc3VwcG9ydCBpbnRlcnBvbGF0aW9uIHN5bnRheFxuVXNlIGFuIGlkZW50aXR5IHByb3BlcnR5IGZ1bmN0aW9uIGluc3RlYWQ6IGB7ICJ0eXBlIjogImlkZW50aXR5IiwgInByb3BlcnR5IjogJytKU09OLnN0cmluZ2lmeShjWzFdKSsiIH1gLiIpXTt2YXIgaD1bXTtyZXR1cm4ic3ltYm9sIj09PXQubGF5ZXJUeXBlJiYoInRleHQtZmllbGQiPT09byYmbiYmIW4uZ2x5cGhzJiZoLnB1c2gobmV3IE10KHIsaSwndXNlIG9mICJ0ZXh0LWZpZWxkIiByZXF1aXJlcyBhIHN0eWxlICJnbHlwaHMiIHByb3BlcnR5JykpLCJ0ZXh0LWZvbnQiPT09byYmZHIoQ3QoaSkpJiYiaWRlbnRpdHkiPT09THQoaS50eXBlKSYmaC5wdXNoKG5ldyBNdChyLGksJyJ0ZXh0LWZvbnQiIGRvZXMgbm90IHN1cHBvcnQgaWRlbnRpdHkgZnVuY3Rpb25zJykpKSxoLmNvbmNhdChRcih7a2V5OnQua2V5LHZhbHVlOmksdmFsdWVTcGVjOnUsc3R5bGU6bixzdHlsZVNwZWM6YSxleHByZXNzaW9uQ29udGV4dDoicHJvcGVydHkiLHByb3BlcnR5VHlwZTplLHByb3BlcnR5S2V5Om99KSl9ZnVuY3Rpb24gR3IodCl7cmV0dXJuIEhyKHQsInBhaW50Iil9ZnVuY3Rpb24gWXIodCl7cmV0dXJuIEhyKHQsImxheW91dCIpfWZ1bmN0aW9uIFdyKHQpe3ZhciBlPVtdLHI9dC52YWx1ZSxuPXQua2V5LGE9dC5zdHlsZSxpPXQuc3R5bGVTcGVjO3IudHlwZXx8ci5yZWZ8fGUucHVzaChuZXcgTXQobixyLCdlaXRoZXIgInR5cGUiIG9yICJyZWYiIGlzIHJlcXVpcmVkJykpO3ZhciBvLHM9THQoci50eXBlKSxsPUx0KHIucmVmKTtpZihyLmlkKWZvcih2YXIgYz1MdChyLmlkKSx1PTA7dTx0LmFycmF5SW5kZXg7dSsrKXt2YXIgaD1hLmxheWVyc1t1XTtMdChoLmlkKT09PWMmJmUucHVzaChuZXcgTXQobixyLmlkLCdkdXBsaWNhdGUgbGF5ZXIgaWQgIicrci5pZCsnIiwgcHJldmlvdXNseSB1c2VkIGF0IGxpbmUgJytoLmlkLl9fbGluZV9fKSl9aWYoInJlZiJpbiByKVsidHlwZSIsInNvdXJjZSIsInNvdXJjZS1sYXllciIsImZpbHRlciIsImxheW91dCJdLmZvckVhY2goZnVuY3Rpb24odCl7dCBpbiByJiZlLnB1c2gobmV3IE10KG4sclt0XSwnIicrdCsnIiBpcyBwcm9oaWJpdGVkIGZvciByZWYgbGF5ZXJzJykpfSksYS5sYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtMdCh0LmlkKT09PWwmJihvPXQpfSksbz9vLnJlZj9lLnB1c2gobmV3IE10KG4sci5yZWYsInJlZiBjYW5ub3QgcmVmZXJlbmNlIGFub3RoZXIgcmVmIGxheWVyIikpOnM9THQoby50eXBlKTplLnB1c2gobmV3IE10KG4sci5yZWYsJ3JlZiBsYXllciAiJytsKyciIG5vdCBmb3VuZCcpKTtlbHNlIGlmKCJiYWNrZ3JvdW5kIiE9PXMpaWYoci5zb3VyY2Upe3ZhciBmPWEuc291cmNlcyYmYS5zb3VyY2VzW3Iuc291cmNlXSxwPWYmJkx0KGYudHlwZSk7Zj8idmVjdG9yIj09PXAmJiJyYXN0ZXIiPT09cz9lLnB1c2gobmV3IE10KG4sci5zb3VyY2UsJ2xheWVyICInK3IuaWQrJyIgcmVxdWlyZXMgYSByYXN0ZXIgc291cmNlJykpOiJyYXN0ZXIiPT09cCYmInJhc3RlciIhPT1zP2UucHVzaChuZXcgTXQobixyLnNvdXJjZSwnbGF5ZXIgIicrci5pZCsnIiByZXF1aXJlcyBhIHZlY3RvciBzb3VyY2UnKSk6InZlY3RvciIhPT1wfHxyWyJzb3VyY2UtbGF5ZXIiXT8icmFzdGVyLWRlbSI9PT1wJiYiaGlsbHNoYWRlIiE9PXM/ZS5wdXNoKG5ldyBNdChuLHIuc291cmNlLCJyYXN0ZXItZGVtIHNvdXJjZSBjYW4gb25seSBiZSB1c2VkIHdpdGggbGF5ZXIgdHlwZSAnaGlsbHNoYWRlJy4iKSk6ImxpbmUiIT09c3x8IXIucGFpbnR8fCFyLnBhaW50WyJsaW5lLWdyYWRpZW50Il18fCJnZW9qc29uIj09PXAmJmYubGluZU1ldHJpY3N8fGUucHVzaChuZXcgTXQobixyLCdsYXllciAiJytyLmlkKyciIHNwZWNpZmllcyBhIGxpbmUtZ3JhZGllbnQsIHdoaWNoIHJlcXVpcmVzIGEgR2VvSlNPTiBzb3VyY2Ugd2l0aCBgbGluZU1ldHJpY3NgIGVuYWJsZWQuJykpOmUucHVzaChuZXcgTXQobixyLCdsYXllciAiJytyLmlkKyciIG11c3Qgc3BlY2lmeSBhICJzb3VyY2UtbGF5ZXIiJykpOmUucHVzaChuZXcgTXQobixyLnNvdXJjZSwnc291cmNlICInK3Iuc291cmNlKyciIG5vdCBmb3VuZCcpKX1lbHNlIGUucHVzaChuZXcgTXQobixyLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJzb3VyY2UiJykpO3JldHVybiBlPWUuY29uY2F0KEVyKHtrZXk6bix2YWx1ZTpyLHZhbHVlU3BlYzppLmxheWVyLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnsiKiI6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sdHlwZTpmdW5jdGlvbigpe3JldHVybiBRcih7a2V5Om4rIi50eXBlIix2YWx1ZTpyLnR5cGUsdmFsdWVTcGVjOmkubGF5ZXIudHlwZSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3Q6cixvYmplY3RLZXk6InR5cGUifSl9LGZpbHRlcjpxcixsYXlvdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIEVyKHtsYXllcjpyLGtleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnsiKiI6ZnVuY3Rpb24odCl7cmV0dXJuIFlyKFN0KHtsYXllclR5cGU6c30sdCkpfX19KX0scGFpbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIEVyKHtsYXllcjpyLGtleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnsiKiI6ZnVuY3Rpb24odCl7cmV0dXJuIEdyKFN0KHtsYXllclR5cGU6c30sdCkpfX19KX19fSkpfWZ1bmN0aW9uIFhyKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPXQuc3R5bGVTcGVjLGE9dC5zdHlsZTtpZighZS50eXBlKXJldHVybltuZXcgTXQocixlLCcidHlwZSIgaXMgcmVxdWlyZWQnKV07dmFyIGksbz1MdChlLnR5cGUpO3N3aXRjaChvKXtjYXNlInZlY3RvciI6Y2FzZSJyYXN0ZXIiOmNhc2UicmFzdGVyLWRlbSI6cmV0dXJuIEVyKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuWyJzb3VyY2VfIitvLnJlcGxhY2UoIi0iLCJfIildLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOm59KTtjYXNlImdlb2pzb24iOmlmKGk9RXIoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOm4uc291cmNlX2dlb2pzb24sc3R5bGU6YSxzdHlsZVNwZWM6bn0pLGUuY2x1c3Rlcilmb3IodmFyIHMgaW4gZS5jbHVzdGVyUHJvcGVydGllcyl7dmFyIGw9ZS5jbHVzdGVyUHJvcGVydGllc1tzXSxjPWxbMF0sdT1sWzFdLGg9InN0cmluZyI9PXR5cGVvZiBjP1tjLFsiYWNjdW11bGF0ZWQiXSxbImdldCIsc11dOmM7aS5wdXNoLmFwcGx5KGksT3Ioe2tleTpyKyIuIitzKyIubWFwIix2YWx1ZTp1LGV4cHJlc3Npb25Db250ZXh0OiJjbHVzdGVyLW1hcCJ9KSksaS5wdXNoLmFwcGx5KGksT3Ioe2tleTpyKyIuIitzKyIucmVkdWNlIix2YWx1ZTpoLGV4cHJlc3Npb25Db250ZXh0OiJjbHVzdGVyLXJlZHVjZSJ9KSl9cmV0dXJuIGk7Y2FzZSJ2aWRlbyI6cmV0dXJuIEVyKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuLnNvdXJjZV92aWRlbyxzdHlsZTphLHN0eWxlU3BlYzpufSk7Y2FzZSJpbWFnZSI6cmV0dXJuIEVyKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuLnNvdXJjZV9pbWFnZSxzdHlsZTphLHN0eWxlU3BlYzpufSk7Y2FzZSJjYW52YXMiOnJldHVybltuZXcgTXQocixudWxsLCJQbGVhc2UgdXNlIHJ1bnRpbWUgQVBJcyB0byBhZGQgY2FudmFzIHNvdXJjZXMsIHJhdGhlciB0aGFuIGluY2x1ZGluZyB0aGVtIGluIHN0eWxlc2hlZXRzLiIsInNvdXJjZS5jYW52YXMiKV07ZGVmYXVsdDpyZXR1cm4genIoe2tleTpyKyIudHlwZSIsdmFsdWU6ZS50eXBlLHZhbHVlU3BlYzp7dmFsdWVzOlsidmVjdG9yIiwicmFzdGVyIiwicmFzdGVyLWRlbSIsImdlb2pzb24iLCJ2aWRlbyIsImltYWdlIl19LHN0eWxlOmEsc3R5bGVTcGVjOm59KX19ZnVuY3Rpb24gWnIodCl7dmFyIGU9dC52YWx1ZSxyPXQuc3R5bGVTcGVjLG49ci5saWdodCxhPXQuc3R5bGUsaT1bXSxvPXByKGUpO2lmKHZvaWQgMD09PWUpcmV0dXJuIGk7aWYoIm9iamVjdCIhPT1vKXJldHVybiBpLmNvbmNhdChbbmV3IE10KCJsaWdodCIsZSwib2JqZWN0IGV4cGVjdGVkLCAiK28rIiBmb3VuZCIpXSk7Zm9yKHZhciBzIGluIGUpe3ZhciBsPXMubWF0Y2goL14oLiopLXRyYW5zaXRpb24kLyk7aT1sJiZuW2xbMV1dJiZuW2xbMV1dLnRyYW5zaXRpb24/aS5jb25jYXQoUXIoe2tleTpzLHZhbHVlOmVbc10sdmFsdWVTcGVjOnIudHJhbnNpdGlvbixzdHlsZTphLHN0eWxlU3BlYzpyfSkpOm5bc10/aS5jb25jYXQoUXIoe2tleTpzLHZhbHVlOmVbc10sdmFsdWVTcGVjOm5bc10sc3R5bGU6YSxzdHlsZVNwZWM6cn0pKTppLmNvbmNhdChbbmV3IE10KHMsZVtzXSwndW5rbm93biBwcm9wZXJ0eSAiJytzKyciJyldKX1yZXR1cm4gaX1mdW5jdGlvbiBKcih0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksbj1wcihlKTtyZXR1cm4ic3RyaW5nIiE9PW4/W25ldyBNdChyLGUsInN0cmluZyBleHBlY3RlZCwgIituKyIgZm91bmQiKV06W119dmFyIEtyPXsiKiI6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sYXJyYXk6THIsYm9vbGVhbjpmdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksbj1wcihlKTtyZXR1cm4iYm9vbGVhbiIhPT1uP1tuZXcgTXQocixlLCJib29sZWFuIGV4cGVjdGVkLCAiK24rIiBmb3VuZCIpXTpbXX0sbnVtYmVyOkNyLGNvbG9yOmZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxuPXByKHIpO3JldHVybiJzdHJpbmciIT09bj9bbmV3IE10KGUsciwiY29sb3IgZXhwZWN0ZWQsICIrbisiIGZvdW5kIildOm51bGw9PT1ZdChyKT9bbmV3IE10KGUsciwnY29sb3IgZXhwZWN0ZWQsICInK3IrJyIgZm91bmQnKV06W119LGNvbnN0YW50czpBdCxlbnVtOnpyLGZpbHRlcjpxcixmdW5jdGlvbjpQcixsYXllcjpXcixvYmplY3Q6RXIsc291cmNlOlhyLGxpZ2h0OlpyLHN0cmluZzpKcixmb3JtYXR0ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1Kcih0KS5sZW5ndGg/W106T3IodCl9fTtmdW5jdGlvbiBRcih0KXt2YXIgZT10LnZhbHVlLHI9dC52YWx1ZVNwZWMsbj10LnN0eWxlU3BlYztyZXR1cm4gci5leHByZXNzaW9uJiZkcihMdChlKSk/UHIodCk6ci5leHByZXNzaW9uJiZ3cihDdChlKSk/T3IodCk6ci50eXBlJiZLcltyLnR5cGVdP0tyW3IudHlwZV0odCk6RXIoU3Qoe30sdCx7dmFsdWVTcGVjOnIudHlwZT9uW3IudHlwZV06cn0pKX1mdW5jdGlvbiAkcih0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksbj1Kcih0KTtyZXR1cm4gbi5sZW5ndGg/bjooLTE9PT1lLmluZGV4T2YoIntmb250c3RhY2t9IikmJm4ucHVzaChuZXcgTXQocixlLCciZ2x5cGhzIiB1cmwgbXVzdCBpbmNsdWRlIGEgIntmb250c3RhY2t9IiB0b2tlbicpKSwtMT09PWUuaW5kZXhPZigie3JhbmdlfSIpJiZuLnB1c2gobmV3IE10KHIsZSwnImdseXBocyIgdXJsIG11c3QgaW5jbHVkZSBhICJ7cmFuZ2V9IiB0b2tlbicpKSxuKX1mdW5jdGlvbiB0bih0LGUpe2U9ZXx8VHQ7dmFyIHI9W107cmV0dXJuIHI9ci5jb25jYXQoUXIoe2tleToiIix2YWx1ZTp0LHZhbHVlU3BlYzplLiRyb290LHN0eWxlU3BlYzplLHN0eWxlOnQsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e2dseXBoczokciwiKiI6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSkpLHQuY29uc3RhbnRzJiYocj1yLmNvbmNhdChBdCh7a2V5OiJjb25zdGFudHMiLHZhbHVlOnQuY29uc3RhbnRzLHN0eWxlOnQsc3R5bGVTcGVjOmV9KSkpLGVuKHIpfWZ1bmN0aW9uIGVuKHQpe3JldHVybltdLmNvbmNhdCh0KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGluZS1lLmxpbmV9KX1mdW5jdGlvbiBybih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07cmV0dXJuIGVuKHQuYXBwbHkodGhpcyxlKSl9fXRuLnNvdXJjZT1ybihYciksdG4ubGlnaHQ9cm4oWnIpLHRuLmxheWVyPXJuKFdyKSx0bi5maWx0ZXI9cm4ocXIpLHRuLnBhaW50UHJvcGVydHk9cm4oR3IpLHRuLmxheW91dFByb3BlcnR5PXJuKFlyKTt2YXIgbm49dG4sYW49bm4ubGlnaHQsb249bm4ucGFpbnRQcm9wZXJ0eSxzbj1ubi5sYXlvdXRQcm9wZXJ0eTtmdW5jdGlvbiBsbih0LGUpe3ZhciByPSExO2lmKGUmJmUubGVuZ3RoKWZvcih2YXIgbj0wLGE9ZTtuPGEubGVuZ3RoO24rPTEpe3ZhciBpPWFbbl07dC5maXJlKG5ldyB3dChuZXcgRXJyb3IoaS5tZXNzYWdlKSkpLHI9ITB9cmV0dXJuIHJ9dmFyIGNuPWhuLHVuPTM7ZnVuY3Rpb24gaG4odCxlLHIpe3ZhciBuPXRoaXMuY2VsbHM9W107aWYodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXt0aGlzLmFycmF5QnVmZmVyPXQ7dmFyIGE9bmV3IEludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7dD1hWzBdLGU9YVsxXSxyPWFbMl0sdGhpcy5kPWUrMipyO2Zvcih2YXIgaT0wO2k8dGhpcy5kKnRoaXMuZDtpKyspe3ZhciBvPWFbdW4raV0scz1hW3VuK2krMV07bi5wdXNoKG89PT1zP251bGw6YS5zdWJhcnJheShvLHMpKX12YXIgbD1hW3VuK24ubGVuZ3RoXSxjPWFbdW4rbi5sZW5ndGgrMV07dGhpcy5rZXlzPWEuc3ViYXJyYXkobCxjKSx0aGlzLmJib3hlcz1hLnN1YmFycmF5KGMpLHRoaXMuaW5zZXJ0PXRoaXMuX2luc2VydFJlYWRvbmx5fWVsc2V7dGhpcy5kPWUrMipyO2Zvcih2YXIgdT0wO3U8dGhpcy5kKnRoaXMuZDt1Kyspbi5wdXNoKFtdKTt0aGlzLmtleXM9W10sdGhpcy5iYm94ZXM9W119dGhpcy5uPWUsdGhpcy5leHRlbnQ9dCx0aGlzLnBhZGRpbmc9cix0aGlzLnNjYWxlPWUvdCx0aGlzLnVpZD0wO3ZhciBoPXIvZSp0O3RoaXMubWluPS1oLHRoaXMubWF4PXQraH1obi5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4sYSl7dGhpcy5fZm9yRWFjaENlbGwoZSxyLG4sYSx0aGlzLl9pbnNlcnRDZWxsLHRoaXMudWlkKyspLHRoaXMua2V5cy5wdXNoKHQpLHRoaXMuYmJveGVzLnB1c2goZSksdGhpcy5iYm94ZXMucHVzaChyKSx0aGlzLmJib3hlcy5wdXNoKG4pLHRoaXMuYmJveGVzLnB1c2goYSl9LGhuLnByb3RvdHlwZS5faW5zZXJ0UmVhZG9ubHk9ZnVuY3Rpb24oKXt0aHJvdyJDYW5ub3QgaW5zZXJ0IGludG8gYSBHcmlkSW5kZXggY3JlYXRlZCBmcm9tIGFuIEFycmF5QnVmZmVyLiJ9LGhuLnByb3RvdHlwZS5faW5zZXJ0Q2VsbD1mdW5jdGlvbih0LGUscixuLGEsaSl7dGhpcy5jZWxsc1thXS5wdXNoKGkpfSxobi5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgaT10aGlzLm1pbixvPXRoaXMubWF4O2lmKHQ8PWkmJmU8PWkmJm88PXImJm88PW4mJiFhKXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmtleXMpO3ZhciBzPVtdO3JldHVybiB0aGlzLl9mb3JFYWNoQ2VsbCh0LGUscixuLHRoaXMuX3F1ZXJ5Q2VsbCxzLHt9LGEpLHN9LGhuLnByb3RvdHlwZS5fcXVlcnlDZWxsPWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8scyl7dmFyIGw9dGhpcy5jZWxsc1thXTtpZihudWxsIT09bClmb3IodmFyIGM9dGhpcy5rZXlzLHU9dGhpcy5iYm94ZXMsaD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgZj1sW2hdO2lmKHZvaWQgMD09PW9bZl0pe3ZhciBwPTQqZjsocz9zKHVbcCswXSx1W3ArMV0sdVtwKzJdLHVbcCszXSk6dDw9dVtwKzJdJiZlPD11W3ArM10mJnI+PXVbcCswXSYmbj49dVtwKzFdKT8ob1tmXT0hMCxpLnB1c2goY1tmXSkpOm9bZl09ITF9fX0saG4ucHJvdG90eXBlLl9mb3JFYWNoQ2VsbD1mdW5jdGlvbih0LGUscixuLGEsaSxvLHMpe2Zvcih2YXIgbD10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQodCksYz10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQoZSksdT10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQociksaD10aGlzLl9jb252ZXJ0VG9DZWxsQ29vcmQobiksZj1sO2Y8PXU7ZisrKWZvcih2YXIgcD1jO3A8PWg7cCsrKXt2YXIgZD10aGlzLmQqcCtmO2lmKCghc3x8cyh0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZChmKSx0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZChwKSx0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZChmKzEpLHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKHArMSkpKSYmYS5jYWxsKHRoaXMsdCxlLHIsbixkLGksbyxzKSlyZXR1cm59fSxobi5wcm90b3R5cGUuX2NvbnZlcnRGcm9tQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMucGFkZGluZykvdGhpcy5zY2FsZX0saG4ucHJvdG90eXBlLl9jb252ZXJ0VG9DZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5kLTEsTWF0aC5mbG9vcih0KnRoaXMuc2NhbGUpK3RoaXMucGFkZGluZykpfSxobi5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2lmKHRoaXMuYXJyYXlCdWZmZXIpcmV0dXJuIHRoaXMuYXJyYXlCdWZmZXI7Zm9yKHZhciB0PXRoaXMuY2VsbHMsZT11bit0aGlzLmNlbGxzLmxlbmd0aCsxKzEscj0wLG49MDtuPHRoaXMuY2VsbHMubGVuZ3RoO24rKylyKz10aGlzLmNlbGxzW25dLmxlbmd0aDt2YXIgYT1uZXcgSW50MzJBcnJheShlK3IrdGhpcy5rZXlzLmxlbmd0aCt0aGlzLmJib3hlcy5sZW5ndGgpO2FbMF09dGhpcy5leHRlbnQsYVsxXT10aGlzLm4sYVsyXT10aGlzLnBhZGRpbmc7Zm9yKHZhciBpPWUsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO2FbdW4rb109aSxhLnNldChzLGkpLGkrPXMubGVuZ3RofXJldHVybiBhW3VuK3QubGVuZ3RoXT1pLGEuc2V0KHRoaXMua2V5cyxpKSxpKz10aGlzLmtleXMubGVuZ3RoLGFbdW4rdC5sZW5ndGgrMV09aSxhLnNldCh0aGlzLmJib3hlcyxpKSxpKz10aGlzLmJib3hlcy5sZW5ndGgsYS5idWZmZXJ9O3ZhciBmbj1zZWxmLkltYWdlRGF0YSxwbj17fTtmdW5jdGlvbiBkbih0LGUscil7dm9pZCAwPT09ciYmKHI9e30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfY2xhc3NSZWdpc3RyeUtleSIse3ZhbHVlOnQsd3JpdGVhYmxlOiExfSkscG5bdF09e2tsYXNzOmUsb21pdDpyLm9taXR8fFtdLHNoYWxsb3c6ci5zaGFsbG93fHxbXX19Zm9yKHZhciBnbiBpbiBkbigiT2JqZWN0IixPYmplY3QpLGNuLnNlcmlhbGl6ZT1mdW5jdGlvbih0LGUpe3ZhciByPXQudG9BcnJheUJ1ZmZlcigpO3JldHVybiBlJiZlLnB1c2gocikse2J1ZmZlcjpyfX0sY24uZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBjbih0LmJ1ZmZlcil9LGRuKCJHcmlkIixjbiksZG4oIkNvbG9yIixXdCksZG4oIkVycm9yIixFcnJvciksZG4oIlN0eWxlUHJvcGVydHlGdW5jdGlvbiIsU3IpLGRuKCJTdHlsZUV4cHJlc3Npb24iLF9yLHtvbWl0OlsiX2V2YWx1YXRvciJdfSksZG4oIlpvb21EZXBlbmRlbnRFeHByZXNzaW9uIixNciksZG4oIlpvb21Db25zdGFudEV4cHJlc3Npb24iLFRyKSxkbigiQ29tcG91bmRFeHByZXNzaW9uIixjZSx7b21pdDpbIl9ldmFsdWF0ZSJdfSksbnIpbnJbZ25dLl9jbGFzc1JlZ2lzdHJ5S2V5fHxkbigiRXhwcmVzc2lvbl8iK2duLG5yW2duXSk7ZnVuY3Rpb24gdm4odCxlKXtpZihudWxsPT10fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdHx8dCBpbnN0YW5jZW9mIEJvb2xlYW58fHQgaW5zdGFuY2VvZiBOdW1iZXJ8fHQgaW5zdGFuY2VvZiBTdHJpbmd8fHQgaW5zdGFuY2VvZiBEYXRlfHx0IGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiB0O2lmKHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gZSYmZS5wdXNoKHQpLHQ7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXt2YXIgcj10O3JldHVybiBlJiZlLnB1c2goci5idWZmZXIpLHJ9aWYodCBpbnN0YW5jZW9mIGZuKXJldHVybiBlJiZlLnB1c2godC5kYXRhLmJ1ZmZlciksdDtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIG49W10sYT0wLGk9dDthPGkubGVuZ3RoO2ErPTEpe3ZhciBvPWlbYV07bi5wdXNoKHZuKG8sZSkpfXJldHVybiBufWlmKCJvYmplY3QiPT10eXBlb2YgdCl7dmFyIHM9dC5jb25zdHJ1Y3RvcixsPXMuX2NsYXNzUmVnaXN0cnlLZXk7aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJjYW4ndCBzZXJpYWxpemUgb2JqZWN0IG9mIHVucmVnaXN0ZXJlZCBjbGFzcyIpO3ZhciBjPXMuc2VyaWFsaXplP3Muc2VyaWFsaXplKHQsZSk6e307aWYoIXMuc2VyaWFsaXplKXtmb3IodmFyIHUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KHUpJiYhKHBuW2xdLm9taXQuaW5kZXhPZih1KT49MCkpe3ZhciBoPXRbdV07Y1t1XT1wbltsXS5zaGFsbG93LmluZGV4T2YodSk+PTA/aDp2bihoLGUpfXQgaW5zdGFuY2VvZiBFcnJvciYmKGMubWVzc2FnZT10Lm1lc3NhZ2UpfWlmKGMuJG5hbWUpdGhyb3cgbmV3IEVycm9yKCIkbmFtZSBwcm9wZXJ0eSBpcyByZXNlcnZlZCBmb3Igd29ya2VyIHNlcmlhbGl6YXRpb24gbG9naWMuIik7cmV0dXJuIk9iamVjdCIhPT1sJiYoYy4kbmFtZT1sKSxjfXRocm93IG5ldyBFcnJvcigiY2FuJ3Qgc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlICIrdHlwZW9mIHQpfWZ1bmN0aW9uIG1uKHQpe2lmKG51bGw9PXR8fCJib29sZWFuIj09dHlwZW9mIHR8fCJudW1iZXIiPT10eXBlb2YgdHx8InN0cmluZyI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgQm9vbGVhbnx8dCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIERhdGV8fHQgaW5zdGFuY2VvZiBSZWdFeHB8fHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8QXJyYXlCdWZmZXIuaXNWaWV3KHQpfHx0IGluc3RhbmNlb2YgZm4pcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5tYXAobW4pO2lmKCJvYmplY3QiPT10eXBlb2YgdCl7dmFyIGU9dC4kbmFtZXx8Ik9iamVjdCIscj1wbltlXS5rbGFzcztpZighcil0aHJvdyBuZXcgRXJyb3IoImNhbid0IGRlc2VyaWFsaXplIHVucmVnaXN0ZXJlZCBjbGFzcyAiK2UpO2lmKHIuZGVzZXJpYWxpemUpcmV0dXJuIHIuZGVzZXJpYWxpemUodCk7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpLGE9MCxpPU9iamVjdC5rZXlzKHQpO2E8aS5sZW5ndGg7YSs9MSl7dmFyIG89aVthXTtpZigiJG5hbWUiIT09byl7dmFyIHM9dFtvXTtuW29dPXBuW2VdLnNoYWxsb3cuaW5kZXhPZihvKT49MD9zOm1uKHMpfX1yZXR1cm4gbn10aHJvdyBuZXcgRXJyb3IoImNhbid0IGRlc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlICIrdHlwZW9mIHQpfXZhciB5bj1mdW5jdGlvbigpe3RoaXMuZmlyc3Q9ITB9O3luLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLmZsb29yKHQpO3JldHVybiB0aGlzLmZpcnN0Pyh0aGlzLmZpcnN0PSExLHRoaXMubGFzdEludGVnZXJab29tPXIsdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lPTAsdGhpcy5sYXN0Wm9vbT10LHRoaXMubGFzdEZsb29yWm9vbT1yLCEwKToodGhpcy5sYXN0Rmxvb3Jab29tPnI/KHRoaXMubGFzdEludGVnZXJab29tPXIrMSx0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWU9ZSk6dGhpcy5sYXN0Rmxvb3Jab29tPHImJih0aGlzLmxhc3RJbnRlZ2VyWm9vbT1yLHRoaXMubGFzdEludGVnZXJab29tVGltZT1lKSx0IT09dGhpcy5sYXN0Wm9vbSYmKHRoaXMubGFzdFpvb209dCx0aGlzLmxhc3RGbG9vclpvb209ciwhMCkpfTt2YXIgeG49eyJMYXRpbi0xIFN1cHBsZW1lbnQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjgmJnQ8PTI1NX0sQXJhYmljOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xNTM2JiZ0PD0xNzkxfSwiQXJhYmljIFN1cHBsZW1lbnQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xODcyJiZ0PD0xOTE5fSwiQXJhYmljIEV4dGVuZGVkLUEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMjA4JiZ0PD0yMzAzfSwiSGFuZ3VsIEphbW8iOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MzUyJiZ0PD00NjA3fSwiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTUxMjAmJnQ8PTU3NTl9LEtobWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02MDE2JiZ0PD02MTQzfSwiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTYzMjAmJnQ8PTYzOTl9LCJHZW5lcmFsIFB1bmN0dWF0aW9uIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODE5MiYmdDw9ODMwM30sIkxldHRlcmxpa2UgU3ltYm9scyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg0NDgmJnQ8PTg1Mjd9LCJOdW1iZXIgRm9ybXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04NTI4JiZ0PD04NTkxfSwiTWlzY2VsbGFuZW91cyBUZWNobmljYWwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04OTYwJiZ0PD05MjE1fSwiQ29udHJvbCBQaWN0dXJlcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTkyMTYmJnQ8PTkyNzl9LCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTkyODAmJnQ8PTkzMTF9LCJFbmNsb3NlZCBBbHBoYW51bWVyaWNzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTMxMiYmdDw9OTQ3MX0sIkdlb21ldHJpYyBTaGFwZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05NjMyJiZ0PD05NzI3fSwiTWlzY2VsbGFuZW91cyBTeW1ib2xzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTcyOCYmdDw9OTk4M30sIk1pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgQXJyb3dzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTEwMDgmJnQ8PTExMjYzfSwiQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMTkwNCYmdDw9MTIwMzF9LCJLYW5neGkgUmFkaWNhbHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjAzMiYmdDw9MTIyNTV9LCJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIyNzImJnQ8PTEyMjg3fSwiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIyODgmJnQ8PTEyMzUxfSxIaXJhZ2FuYTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIzNTImJnQ8PTEyNDQ3fSxLYXRha2FuYTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI0NDgmJnQ8PTEyNTQzfSxCb3BvbW9mbzpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI1NDQmJnQ8PTEyNTkxfSwiSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNTkyJiZ0PD0xMjY4N30sS2FuYnVuOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjY4OCYmdDw9MTI3MDN9LCJCb3BvbW9mbyBFeHRlbmRlZCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNzA0JiZ0PD0xMjczNX0sIkNKSyBTdHJva2VzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3MzYmJnQ8PTEyNzgzfSwiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNzg0JiZ0PD0xMjc5OX0sIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjgwMCYmdDw9MTMwNTV9LCJDSksgQ29tcGF0aWJpbGl0eSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEzMDU2JiZ0PD0xMzMxMX0sIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMzMxMiYmdDw9MTk5MDN9LCJZaWppbmcgSGV4YWdyYW0gU3ltYm9scyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE5OTA0JiZ0PD0xOTk2N30sIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xOTk2OCYmdDw9NDA5NTl9LCJZaSBTeWxsYWJsZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MDk2MCYmdDw9NDIxMjd9LCJZaSBSYWRpY2FscyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQyMTI4JiZ0PD00MjE5MX0sIkhhbmd1bCBKYW1vIEV4dGVuZGVkLUEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MzM2MCYmdDw9NDMzOTF9LCJIYW5ndWwgU3lsbGFibGVzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDQwMzImJnQ8PTU1MjE1fSwiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTU1MjE2JiZ0PD01NTI5NX0sIlByaXZhdGUgVXNlIEFyZWEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj01NzM0NCYmdDw9NjM3NDN9LCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjM3NDQmJnQ8PTY0MjU1fSwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjQzMzYmJnQ8PTY1MDIzfSwiVmVydGljYWwgRm9ybXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTA0MCYmdDw9NjUwNTV9LCJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MDcyJiZ0PD02NTEwM30sIlNtYWxsIEZvcm0gVmFyaWFudHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTEwNCYmdDw9NjUxMzV9LCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUIiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTEzNiYmdDw9NjUyNzl9LCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MjgwJiZ0PD02NTUxOX19O2Z1bmN0aW9uIGJuKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpaWYod24ocltlXS5jaGFyQ29kZUF0KDApKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBfbih0KXtyZXR1cm4hKHhuLkFyYWJpYyh0KXx8eG5bIkFyYWJpYyBTdXBwbGVtZW50Il0odCl8fHhuWyJBcmFiaWMgRXh0ZW5kZWQtQSJdKHQpfHx4blsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BIl0odCl8fHhuWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUIiXSh0KSl9ZnVuY3Rpb24gd24odCl7cmV0dXJuISEoNzQ2PT09dHx8NzQ3PT09dHx8ISh0PDQzNTIpJiYoeG5bIkJvcG9tb2ZvIEV4dGVuZGVkIl0odCl8fHhuLkJvcG9tb2ZvKHQpfHx4blsiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiXSh0KSYmISh0Pj02NTA5NyYmdDw9NjUxMDMpfHx4blsiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyJdKHQpfHx4blsiQ0pLIENvbXBhdGliaWxpdHkiXSh0KXx8eG5bIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50Il0odCl8fHhuWyJDSksgU3Ryb2tlcyJdKHQpfHwhKCF4blsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0odCl8fHQ+PTEyMjk2JiZ0PD0xMjMwNXx8dD49MTIzMDgmJnQ8PTEyMzE5fHwxMjMzNj09PXQpfHx4blsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSJdKHQpfHx4blsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyJdKHQpfHx4blsiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyJdKHQpfHx4blsiSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyJdKHQpfHx4blsiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQSJdKHQpfHx4blsiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQiJdKHQpfHx4blsiSGFuZ3VsIEphbW8iXSh0KXx8eG5bIkhhbmd1bCBTeWxsYWJsZXMiXSh0KXx8eG4uSGlyYWdhbmEodCl8fHhuWyJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzIl0odCl8fHhuLkthbmJ1bih0KXx8eG5bIkthbmd4aSBSYWRpY2FscyJdKHQpfHx4blsiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyJdKHQpfHx4bi5LYXRha2FuYSh0KSYmMTI1NDAhPT10fHwhKCF4blsiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMiXSh0KXx8NjUyODg9PT10fHw2NTI4OT09PXR8fDY1MjkzPT09dHx8dD49NjUzMDYmJnQ8PTY1MzEwfHw2NTMzOT09PXR8fDY1MzQxPT09dHx8NjUzNDM9PT10fHx0Pj02NTM3MSYmdDw9NjU1MDN8fDY1NTA3PT09dHx8dD49NjU1MTImJnQ8PTY1NTE5KXx8ISgheG5bIlNtYWxsIEZvcm0gVmFyaWFudHMiXSh0KXx8dD49NjUxMTImJnQ8PTY1MTE4fHx0Pj02NTEyMyYmdDw9NjUxMjYpfHx4blsiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyJdKHQpfHx4blsiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZCJdKHQpfHx4blsiVmVydGljYWwgRm9ybXMiXSh0KXx8eG5bIllpamluZyBIZXhhZ3JhbSBTeW1ib2xzIl0odCl8fHhuWyJZaSBTeWxsYWJsZXMiXSh0KXx8eG5bIllpIFJhZGljYWxzIl0odCkpKX1mdW5jdGlvbiBrbih0KXtyZXR1cm4hKHduKHQpfHxmdW5jdGlvbih0KXtyZXR1cm4hISh4blsiTGF0aW4tMSBTdXBwbGVtZW50Il0odCkmJigxNjc9PT10fHwxNjk9PT10fHwxNzQ9PT10fHwxNzc9PT10fHwxODg9PT10fHwxODk9PT10fHwxOTA9PT10fHwyMTU9PT10fHwyNDc9PT10KXx8eG5bIkdlbmVyYWwgUHVuY3R1YXRpb24iXSh0KSYmKDgyMTQ9PT10fHw4MjI0PT09dHx8ODIyNT09PXR8fDgyNDA9PT10fHw4MjQxPT09dHx8ODI1MT09PXR8fDgyNTI9PT10fHw4MjU4PT09dHx8ODI2Mz09PXR8fDgyNjQ9PT10fHw4MjY1PT09dHx8ODI3Mz09PXQpfHx4blsiTGV0dGVybGlrZSBTeW1ib2xzIl0odCl8fHhuWyJOdW1iZXIgRm9ybXMiXSh0KXx8eG5bIk1pc2NlbGxhbmVvdXMgVGVjaG5pY2FsIl0odCkmJih0Pj04OTYwJiZ0PD04OTY3fHx0Pj04OTcyJiZ0PD04OTkxfHx0Pj04OTk2JiZ0PD05ZTN8fDkwMDM9PT10fHx0Pj05MDg1JiZ0PD05MTE0fHx0Pj05MTUwJiZ0PD05MTY1fHw5MTY3PT09dHx8dD49OTE2OSYmdDw9OTE3OXx8dD49OTE4NiYmdDw9OTIxNSl8fHhuWyJDb250cm9sIFBpY3R1cmVzIl0odCkmJjkyNTEhPT10fHx4blsiT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb24iXSh0KXx8eG5bIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiXSh0KXx8eG5bIkdlb21ldHJpYyBTaGFwZXMiXSh0KXx8eG5bIk1pc2NlbGxhbmVvdXMgU3ltYm9scyJdKHQpJiYhKHQ+PTk3NTQmJnQ8PTk3NTkpfHx4blsiTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3MiXSh0KSYmKHQ+PTExMDI2JiZ0PD0xMTA1NXx8dD49MTEwODgmJnQ8PTExMDk3fHx0Pj0xMTE5MiYmdDw9MTEyNDMpfHx4blsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0odCl8fHhuLkthdGFrYW5hKHQpfHx4blsiUHJpdmF0ZSBVc2UgQXJlYSJdKHQpfHx4blsiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiXSh0KXx8eG5bIlNtYWxsIEZvcm0gVmFyaWFudHMiXSh0KXx8eG5bIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zIl0odCl8fDg3MzQ9PT10fHw4NzU2PT09dHx8ODc1Nz09PXR8fHQ+PTk5ODQmJnQ8PTEwMDg3fHx0Pj0xMDEwMiYmdDw9MTAxMzF8fDY1NTMyPT09dHx8NjU1MzM9PT10KX0odCkpfWZ1bmN0aW9uIFRuKHQsZSl7cmV0dXJuISghZSYmKHQ+PTE0MjQmJnQ8PTIzMDN8fHhuWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiXSh0KXx8eG5bIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiJdKHQpKXx8dD49MjMwNCYmdDw9MzU4M3x8dD49Mzg0MCYmdDw9NDI1NXx8eG4uS2htZXIodCkpfXZhciBNbixBbj0hMSxTbj1udWxsLEVuPSExLExuPW5ldyBrdCxDbj17YXBwbHlBcmFiaWNTaGFwaW5nOm51bGwscHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0Om51bGwscHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0Om51bGwsaXNMb2FkZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gRW58fG51bGwhPUNuLmFwcGx5QXJhYmljU2hhcGluZ319LFBuPWZ1bmN0aW9uKHQsZSl7dGhpcy56b29tPXQsZT8odGhpcy5ub3c9ZS5ub3csdGhpcy5mYWRlRHVyYXRpb249ZS5mYWRlRHVyYXRpb24sdGhpcy56b29tSGlzdG9yeT1lLnpvb21IaXN0b3J5LHRoaXMudHJhbnNpdGlvbj1lLnRyYW5zaXRpb24pOih0aGlzLm5vdz0wLHRoaXMuZmFkZUR1cmF0aW9uPTAsdGhpcy56b29tSGlzdG9yeT1uZXcgeW4sdGhpcy50cmFuc2l0aW9uPXt9KX07UG4ucHJvdG90eXBlLmlzU3VwcG9ydGVkU2NyaXB0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpaWYoIVRuKG5bcl0uY2hhckNvZGVBdCgwKSxlKSlyZXR1cm4hMTtyZXR1cm4hMH0odCxDbi5pc0xvYWRlZCgpKX0sUG4ucHJvdG90eXBlLmNyb3NzRmFkaW5nRmFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmZhZGVEdXJhdGlvbj8xOk1hdGgubWluKCh0aGlzLm5vdy10aGlzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbVRpbWUpL3RoaXMuZmFkZUR1cmF0aW9uLDEpfSxQbi5wcm90b3R5cGUuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuem9vbSxlPXQtTWF0aC5mbG9vcih0KSxyPXRoaXMuY3Jvc3NGYWRpbmdGYWN0b3IoKTtyZXR1cm4gdD50aGlzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbT97ZnJvbVNjYWxlOjIsdG9TY2FsZToxLHQ6ZSsoMS1lKSpyfTp7ZnJvbVNjYWxlOi41LHRvU2NhbGU6MSx0OjEtKDEtcikqZX19O3ZhciBPbj1mdW5jdGlvbih0LGUpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPWUsdGhpcy5leHByZXNzaW9uPWZ1bmN0aW9uKHQsZSl7aWYoZHIodCkpcmV0dXJuIG5ldyBTcih0LGUpO2lmKHdyKHQpKXt2YXIgcj1Bcih0LGUpO2lmKCJlcnJvciI9PT1yLnJlc3VsdCl0aHJvdyBuZXcgRXJyb3Ioci52YWx1ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5KyI6ICIrdC5tZXNzYWdlfSkuam9pbigiLCAiKSk7cmV0dXJuIHIudmFsdWV9dmFyIG49dDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJiJjb2xvciI9PT1lLnR5cGUmJihuPVd0LnBhcnNlKHQpKSx7a2luZDoiY29uc3RhbnQiLGV2YWx1YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG59fX0odm9pZCAwPT09ZT90LnNwZWNpZmljYXRpb24uZGVmYXVsdDplLHQuc3BlY2lmaWNhdGlvbil9O09uLnByb3RvdHlwZS5pc0RhdGFEcml2ZW49ZnVuY3Rpb24oKXtyZXR1cm4ic291cmNlIj09PXRoaXMuZXhwcmVzc2lvbi5raW5kfHwiY29tcG9zaXRlIj09PXRoaXMuZXhwcmVzc2lvbi5raW5kfSxPbi5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5wb3NzaWJseUV2YWx1YXRlKHRoaXMsdCl9O3ZhciB6bj1mdW5jdGlvbih0KXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1uZXcgT24odCx2b2lkIDApfTt6bi5wcm90b3R5cGUudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBEbih0aGlzLnByb3BlcnR5LHRoaXMudmFsdWUsZSxoKHt9LHQudHJhbnNpdGlvbix0aGlzLnRyYW5zaXRpb24pLHQubm93KX0sem4ucHJvdG90eXBlLnVudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEbih0aGlzLnByb3BlcnR5LHRoaXMudmFsdWUsbnVsbCx7fSwwKX07dmFyIEluPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzKX07SW4ucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBiKHRoaXMuX3ZhbHVlc1t0XS52YWx1ZS52YWx1ZSl9LEluLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuX3ZhbHVlc1t0XT1uZXcgem4odGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5KSksdGhpcy5fdmFsdWVzW3RdLnZhbHVlPW5ldyBPbih0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHksbnVsbD09PWU/dm9pZCAwOmIoZSkpfSxJbi5wcm90b3R5cGUuZ2V0VHJhbnNpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYih0aGlzLl92YWx1ZXNbdF0udHJhbnNpdGlvbil9LEluLnByb3RvdHlwZS5zZXRUcmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsdWVzLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5fdmFsdWVzW3RdPW5ldyB6bih0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHkpKSx0aGlzLl92YWx1ZXNbdF0udHJhbnNpdGlvbj1iKGUpfHx2b2lkIDB9LEluLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0sYT10aGlzLmdldFZhbHVlKG4pO3ZvaWQgMCE9PWEmJih0W25dPWEpO3ZhciBpPXRoaXMuZ2V0VHJhbnNpdGlvbihuKTt2b2lkIDAhPT1pJiYodFtuKyItdHJhbnNpdGlvbiJdPWkpfXJldHVybiB0fSxJbi5wcm90b3R5cGUudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBSbih0aGlzLl9wcm9wZXJ0aWVzKSxuPTAsYT1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO248YS5sZW5ndGg7bis9MSl7dmFyIGk9YVtuXTtyLl92YWx1ZXNbaV09dGhpcy5fdmFsdWVzW2ldLnRyYW5zaXRpb25lZCh0LGUuX3ZhbHVlc1tpXSl9cmV0dXJuIHJ9LEluLnByb3RvdHlwZS51bnRyYW5zaXRpb25lZD1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgUm4odGhpcy5fcHJvcGVydGllcyksZT0wLHI9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07dC5fdmFsdWVzW25dPXRoaXMuX3ZhbHVlc1tuXS51bnRyYW5zaXRpb25lZCgpfXJldHVybiB0fTt2YXIgRG49ZnVuY3Rpb24odCxlLHIsbixhKXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1lLHRoaXMuYmVnaW49YStuLmRlbGF5fHwwLHRoaXMuZW5kPXRoaXMuYmVnaW4rbi5kdXJhdGlvbnx8MCx0LnNwZWNpZmljYXRpb24udHJhbnNpdGlvbiYmKG4uZGVsYXl8fG4uZHVyYXRpb24pJiYodGhpcy5wcmlvcj1yKX07RG4ucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5ub3d8fDAscj10aGlzLnZhbHVlLnBvc3NpYmx5RXZhbHVhdGUodCksbj10aGlzLnByaW9yO2lmKG4pe2lmKGU+dGhpcy5lbmQpcmV0dXJuIHRoaXMucHJpb3I9bnVsbCxyO2lmKHRoaXMudmFsdWUuaXNEYXRhRHJpdmVuKCkpcmV0dXJuIHRoaXMucHJpb3I9bnVsbCxyO2lmKGU8dGhpcy5iZWdpbilyZXR1cm4gbi5wb3NzaWJseUV2YWx1YXRlKHQpO3ZhciBhPShlLXRoaXMuYmVnaW4pLyh0aGlzLmVuZC10aGlzLmJlZ2luKTtyZXR1cm4gdGhpcy5wcm9wZXJ0eS5pbnRlcnBvbGF0ZShuLnBvc3NpYmx5RXZhbHVhdGUodCkscixmdW5jdGlvbih0KXtpZihhPD0wKXJldHVybiAwO2lmKGE+PTEpcmV0dXJuIDE7dmFyIGU9YSphLHI9ZSphO3JldHVybiA0KihhPC41P3I6MyooYS1lKStyLS43NSl9KCkpfXJldHVybiByfTt2YXIgUm49ZnVuY3Rpb24odCl7dGhpcy5fcHJvcGVydGllcz10LHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlcyl9O1JuLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgTm4odGhpcy5fcHJvcGVydGllcykscj0wLG49T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBhPW5bcl07ZS5fdmFsdWVzW2FdPXRoaXMuX3ZhbHVlc1thXS5wb3NzaWJseUV2YWx1YXRlKHQpfXJldHVybiBlfSxSbi5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07aWYodGhpcy5fdmFsdWVzW3JdLnByaW9yKXJldHVybiEwfXJldHVybiExfTt2YXIgRm49ZnVuY3Rpb24odCl7dGhpcy5fcHJvcGVydGllcz10LHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdFByb3BlcnR5VmFsdWVzKX07Rm4ucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBiKHRoaXMuX3ZhbHVlc1t0XS52YWx1ZSl9LEZuLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlc1t0XT1uZXcgT24odGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5LG51bGw9PT1lP3ZvaWQgMDpiKGUpKX0sRm4ucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD17fSxlPTAscj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxhPXRoaXMuZ2V0VmFsdWUobik7dm9pZCAwIT09YSYmKHRbbl09YSl9cmV0dXJuIHR9LEZuLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgTm4odGhpcy5fcHJvcGVydGllcykscj0wLG49T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBhPW5bcl07ZS5fdmFsdWVzW2FdPXRoaXMuX3ZhbHVlc1thXS5wb3NzaWJseUV2YWx1YXRlKHQpfXJldHVybiBlfTt2YXIgQm49ZnVuY3Rpb24odCxlLHIpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPWUsdGhpcy5wYXJhbWV0ZXJzPXJ9O0JuLnByb3RvdHlwZS5pc0NvbnN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuImNvbnN0YW50Ij09PXRoaXMudmFsdWUua2luZH0sQm4ucHJvdG90eXBlLmNvbnN0YW50T3I9ZnVuY3Rpb24odCl7cmV0dXJuImNvbnN0YW50Ij09PXRoaXMudmFsdWUua2luZD90aGlzLnZhbHVlLnZhbHVlOnR9LEJuLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnByb3BlcnR5LmV2YWx1YXRlKHRoaXMudmFsdWUsdGhpcy5wYXJhbWV0ZXJzLHQsZSl9O3ZhciBObj1mdW5jdGlvbih0KXt0aGlzLl9wcm9wZXJ0aWVzPXQsdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUodC5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXMpfTtObi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWx1ZXNbdF19O3ZhciBqbj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07am4ucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5leHByZXNzaW9uLmV2YWx1YXRlKGUpfSxqbi5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXhlW3RoaXMuc3BlY2lmaWNhdGlvbi50eXBlXTtyZXR1cm4gbj9uKHQsZSxyKTp0fTt2YXIgVm49ZnVuY3Rpb24odCxlKXt0aGlzLnNwZWNpZmljYXRpb249dCx0aGlzLm92ZXJyaWRlcz1lfTtWbi5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiJjb25zdGFudCI9PT10LmV4cHJlc3Npb24ua2luZHx8ImNhbWVyYSI9PT10LmV4cHJlc3Npb24ua2luZD9uZXcgQm4odGhpcyx7a2luZDoiY29uc3RhbnQiLHZhbHVlOnQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlKX0sZSk6bmV3IEJuKHRoaXMsdC5leHByZXNzaW9uLGUpfSxWbi5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKCJjb25zdGFudCIhPT10LnZhbHVlLmtpbmR8fCJjb25zdGFudCIhPT1lLnZhbHVlLmtpbmQpcmV0dXJuIHQ7aWYodm9pZCAwPT09dC52YWx1ZS52YWx1ZXx8dm9pZCAwPT09ZS52YWx1ZS52YWx1ZSlyZXR1cm4gbmV3IEJuKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTp2b2lkIDB9LHQucGFyYW1ldGVycyk7dmFyIG49eGVbdGhpcy5zcGVjaWZpY2F0aW9uLnR5cGVdO3JldHVybiBuP25ldyBCbih0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6bih0LnZhbHVlLnZhbHVlLGUudmFsdWUudmFsdWUscil9LHQucGFyYW1ldGVycyk6dH0sVm4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiJjb25zdGFudCI9PT10LmtpbmQ/dC52YWx1ZTp0LmV2YWx1YXRlKGUscixuKX07dmFyIFVuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PXQudmFsdWUpcmV0dXJuIG5ldyBCbih0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6dm9pZCAwfSxlKTtpZigiY29uc3RhbnQiPT09dC5leHByZXNzaW9uLmtpbmQpe3ZhciByPXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlKSxuPXRoaXMuX2NhbGN1bGF0ZShyLHIscixlKTtyZXR1cm4gbmV3IEJuKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTpufSxlKX1pZigiY2FtZXJhIj09PXQuZXhwcmVzc2lvbi5raW5kKXt2YXIgYT10aGlzLl9jYWxjdWxhdGUodC5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOmUuem9vbS0xfSksdC5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOmUuem9vbX0pLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTplLnpvb20rMX0pLGUpO3JldHVybiBuZXcgQm4odGhpcyx7a2luZDoiY29uc3RhbnQiLHZhbHVlOmF9LGUpfXJldHVybiBuZXcgQm4odGhpcyx0LmV4cHJlc3Npb24sZSl9LGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzb3VyY2UiPT09dC5raW5kKXt2YXIgYT10LmV2YWx1YXRlKGUscixuKTtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlKGEsYSxhLGUpfXJldHVybiJjb21wb3NpdGUiPT09dC5raW5kP3RoaXMuX2NhbGN1bGF0ZSh0LmV2YWx1YXRlKHt6b29tOk1hdGguZmxvb3IoZS56b29tKS0xfSxyLG4pLHQuZXZhbHVhdGUoe3pvb206TWF0aC5mbG9vcihlLnpvb20pfSxyLG4pLHQuZXZhbHVhdGUoe3pvb206TWF0aC5mbG9vcihlLnpvb20pKzF9LHIsbiksZSk6dC52YWx1ZX0sZS5wcm90b3R5cGUuX2NhbGN1bGF0ZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi56b29tPm4uem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tP3tmcm9tOnQsdG86ZX06e2Zyb206cix0bzplfX0sZS5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGV9KFZuKSxxbj1mdW5jdGlvbih0KXt0aGlzLnNwZWNpZmljYXRpb249dH07cW4ucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT10LnZhbHVlKXtpZigiY29uc3RhbnQiPT09dC5leHByZXNzaW9uLmtpbmQpe3ZhciByPXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlKTtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlKHIscixyLGUpfXJldHVybiB0aGlzLl9jYWxjdWxhdGUodC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBQbihNYXRoLmZsb29yKGUuem9vbS0xKSxlKSksdC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBQbihNYXRoLmZsb29yKGUuem9vbSksZSkpLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgUG4oTWF0aC5mbG9vcihlLnpvb20rMSksZSkpLGUpfX0scW4ucHJvdG90eXBlLl9jYWxjdWxhdGU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG4uem9vbT5uLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbT97ZnJvbTp0LHRvOmV9Ontmcm9tOnIsdG86ZX19LHFuLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdH07dmFyIEhuPWZ1bmN0aW9uKHQpe3RoaXMuc3BlY2lmaWNhdGlvbj10fTtIbi5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiEhdC5leHByZXNzaW9uLmV2YWx1YXRlKGUpfSxIbi5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07dmFyIEduPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLnByb3BlcnRpZXM9dCx0aGlzLmRlZmF1bHRQcm9wZXJ0eVZhbHVlcz17fSx0aGlzLmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzPXt9LHRoaXMuZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlcz17fSx0aGlzLmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlcz17fSx0aGlzLm92ZXJyaWRhYmxlUHJvcGVydGllcz1bXSx0KXt2YXIgcj10W2VdO3Iuc3BlY2lmaWNhdGlvbi5vdmVycmlkYWJsZSYmdGhpcy5vdmVycmlkYWJsZVByb3BlcnRpZXMucHVzaChlKTt2YXIgbj10aGlzLmRlZmF1bHRQcm9wZXJ0eVZhbHVlc1tlXT1uZXcgT24ocix2b2lkIDApLGE9dGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlc1tlXT1uZXcgem4ocik7dGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzW2VdPWEudW50cmFuc2l0aW9uZWQoKSx0aGlzLmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlc1tlXT1uLnBvc3NpYmx5RXZhbHVhdGUoe30pfX07ZG4oIkRhdGFEcml2ZW5Qcm9wZXJ0eSIsVm4pLGRuKCJEYXRhQ29uc3RhbnRQcm9wZXJ0eSIsam4pLGRuKCJDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5IixVbiksZG4oIkNyb3NzRmFkZWRQcm9wZXJ0eSIscW4pLGRuKCJDb2xvclJhbXBQcm9wZXJ0eSIsSG4pO3ZhciBZbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7aWYodC5jYWxsKHRoaXMpLHRoaXMuaWQ9ZS5pZCx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuX2ZlYXR1cmVGaWx0ZXI9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sImN1c3RvbSIhPT1lLnR5cGUmJihlPWUsdGhpcy5tZXRhZGF0YT1lLm1ldGFkYXRhLHRoaXMubWluem9vbT1lLm1pbnpvb20sdGhpcy5tYXh6b29tPWUubWF4em9vbSwiYmFja2dyb3VuZCIhPT1lLnR5cGUmJih0aGlzLnNvdXJjZT1lLnNvdXJjZSx0aGlzLnNvdXJjZUxheWVyPWVbInNvdXJjZS1sYXllciJdLHRoaXMuZmlsdGVyPWUuZmlsdGVyKSxyLmxheW91dCYmKHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0PW5ldyBGbihyLmxheW91dCkpLHIucGFpbnQpKXtmb3IodmFyIG4gaW4gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludD1uZXcgSW4oci5wYWludCksZS5wYWludCl0aGlzLnNldFBhaW50UHJvcGVydHkobixlLnBhaW50W25dLHt2YWxpZGF0ZTohMX0pO2Zvcih2YXIgYSBpbiBlLmxheW91dCl0aGlzLnNldExheW91dFByb3BlcnR5KGEsZS5sYXlvdXRbYV0se3ZhbGlkYXRlOiExfSk7dGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQudW50cmFuc2l0aW9uZWQoKX19cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldENyb3NzZmFkZVBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3Jvc3NmYWRlUGFyYW1ldGVyc30sZS5wcm90b3R5cGUuZ2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuInZpc2liaWxpdHkiPT09dD90aGlzLnZpc2liaWxpdHk6dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuZ2V0VmFsdWUodCl9LGUucHJvdG90eXBlLnNldExheW91dFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1yJiYocj17fSksbnVsbCE9ZSl7dmFyIG49ImxheWVycy4iK3RoaXMuaWQrIi5sYXlvdXQuIit0O2lmKHRoaXMuX3ZhbGlkYXRlKHNuLG4sdCxlLHIpKXJldHVybn0idmlzaWJpbGl0eSIhPT10P3RoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnNldFZhbHVlKHQsZSk6dGhpcy52aXNpYmlsaXR5PWV9LGUucHJvdG90eXBlLmdldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCwiLXRyYW5zaXRpb24iKT90aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LmdldFRyYW5zaXRpb24odC5zbGljZSgwLC0iLXRyYW5zaXRpb24iLmxlbmd0aCkpOnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuZ2V0VmFsdWUodCl9LGUucHJvdG90eXBlLnNldFBhaW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2lmKHZvaWQgMD09PXImJihyPXt9KSxudWxsIT1lKXt2YXIgbj0ibGF5ZXJzLiIrdGhpcy5pZCsiLnBhaW50LiIrdDtpZih0aGlzLl92YWxpZGF0ZShvbixuLHQsZSxyKSlyZXR1cm4hMX1pZihtKHQsIi10cmFuc2l0aW9uIikpcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VHJhbnNpdGlvbih0LnNsaWNlKDAsLSItdHJhbnNpdGlvbiIubGVuZ3RoKSxlfHx2b2lkIDApLCExO3ZhciBhPXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1t0XSxpPSJjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbiI9PT1hLnByb3BlcnR5LnNwZWNpZmljYXRpb25bInByb3BlcnR5LXR5cGUiXSxvPWEudmFsdWUuaXNEYXRhRHJpdmVuKCkscz1hLnZhbHVlO3RoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VmFsdWUodCxlKSx0aGlzLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZSh0KTt2YXIgbD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbdF0udmFsdWU7cmV0dXJuIGwuaXNEYXRhRHJpdmVuKCl8fG98fGl8fHRoaXMuX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZSh0LHMsbCl9LGUucHJvdG90eXBlLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZT1mdW5jdGlvbih0KXt9LGUucHJvdG90eXBlLl9oYW5kbGVPdmVycmlkYWJsZVBhaW50UHJvcGVydHlVcGRhdGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiExfSxlLnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbih0KXtyZXR1cm4hISh0aGlzLm1pbnpvb20mJnQ8dGhpcy5taW56b29tKXx8ISEodGhpcy5tYXh6b29tJiZ0Pj10aGlzLm1heHpvb20pfHwibm9uZSI9PT10aGlzLnZpc2liaWxpdHl9LGUucHJvdG90eXBlLnVwZGF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3RoaXMuX3RyYW5zaXRpb25pbmdQYWludD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnRyYW5zaXRpb25lZCh0LHRoaXMuX3RyYW5zaXRpb25pbmdQYWludCl9LGUucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50Lmhhc1RyYW5zaXRpb24oKX0sZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24odCl7dC5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzJiYodGhpcy5fY3Jvc3NmYWRlUGFyYW1ldGVycz10LmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKSksdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQmJih0aGlzLmxheW91dD10aGlzLl91bmV2YWx1YXRlZExheW91dC5wb3NzaWJseUV2YWx1YXRlKHQpKSx0aGlzLnBhaW50PXRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5wb3NzaWJseUV2YWx1YXRlKHQpfSxlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD17aWQ6dGhpcy5pZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5zb3VyY2UsInNvdXJjZS1sYXllciI6dGhpcy5zb3VyY2VMYXllcixtZXRhZGF0YTp0aGlzLm1ldGFkYXRhLG1pbnpvb206dGhpcy5taW56b29tLG1heHpvb206dGhpcy5tYXh6b29tLGZpbHRlcjp0aGlzLmZpbHRlcixsYXlvdXQ6dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQmJnRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnNlcmlhbGl6ZSgpLHBhaW50OnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQmJnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2VyaWFsaXplKCl9O3JldHVybiB0aGlzLnZpc2liaWxpdHkmJih0LmxheW91dD10LmxheW91dHx8e30sdC5sYXlvdXQudmlzaWJpbGl0eT10aGlzLnZpc2liaWxpdHkpLHgodCxmdW5jdGlvbih0LGUpe3JldHVybiEodm9pZCAwPT09dHx8ImxheW91dCI9PT1lJiYhT2JqZWN0LmtleXModCkubGVuZ3RofHwicGFpbnQiPT09ZSYmIU9iamVjdC5rZXlzKHQpLmxlbmd0aCl9KX0sZS5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKHQsZSxyLG4sYSl7cmV0dXJuIHZvaWQgMD09PWEmJihhPXt9KSwoIWF8fCExIT09YS52YWxpZGF0ZSkmJmxuKHRoaXMsdC5jYWxsKG5uLHtrZXk6ZSxsYXllclR5cGU6dGhpcy50eXBlLG9iamVjdEtleTpyLHZhbHVlOm4sc3R5bGVTcGVjOlR0LHN0eWxlOntnbHlwaHM6ITAsc3ByaXRlOiEwfX0pKX0sZS5wcm90b3R5cGUuaXMzRD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5pc1RpbGVDbGlwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5pc1N0YXRlRGVwZW5kZW50PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMucGFpbnQuX3ZhbHVlcyl7dmFyIGU9dGhpcy5wYWludC5nZXQodCk7aWYoZSBpbnN0YW5jZW9mIEJuJiZ1cihlLnByb3BlcnR5LnNwZWNpZmljYXRpb24pJiYoInNvdXJjZSI9PT1lLnZhbHVlLmtpbmR8fCJjb21wb3NpdGUiPT09ZS52YWx1ZS5raW5kKSYmZS52YWx1ZS5pc1N0YXRlRGVwZW5kZW50KXJldHVybiEwfXJldHVybiExfSxlfShrdCksV249e0ludDg6SW50OEFycmF5LFVpbnQ4OlVpbnQ4QXJyYXksSW50MTY6SW50MTZBcnJheSxVaW50MTY6VWludDE2QXJyYXksSW50MzI6SW50MzJBcnJheSxVaW50MzI6VWludDMyQXJyYXksRmxvYXQzMjpGbG9hdDMyQXJyYXl9LFhuPWZ1bmN0aW9uKHQsZSl7dGhpcy5fc3RydWN0QXJyYXk9dCx0aGlzLl9wb3MxPWUqdGhpcy5zaXplLHRoaXMuX3BvczI9dGhpcy5fcG9zMS8yLHRoaXMuX3BvczQ9dGhpcy5fcG9zMS80LHRoaXMuX3Bvczg9dGhpcy5fcG9zMS84fSxabj1mdW5jdGlvbigpe3RoaXMuaXNUcmFuc2ZlcnJlZD0hMSx0aGlzLmNhcGFjaXR5PS0xLHRoaXMucmVzaXplKDApfTtmdW5jdGlvbiBKbih0LGUpe3ZvaWQgMD09PWUmJihlPTEpO3ZhciByPTAsbj0wO3JldHVybnttZW1iZXJzOnQubWFwKGZ1bmN0aW9uKHQpe3ZhciBhLGk9KGE9dC50eXBlLFduW2FdLkJZVEVTX1BFUl9FTEVNRU5UKSxvPXI9S24ocixNYXRoLm1heChlLGkpKSxzPXQuY29tcG9uZW50c3x8MTtyZXR1cm4gbj1NYXRoLm1heChuLGkpLHIrPWkqcyx7bmFtZTp0Lm5hbWUsdHlwZTp0LnR5cGUsY29tcG9uZW50czpzLG9mZnNldDpvfX0pLHNpemU6S24ocixNYXRoLm1heChuLGUpKSxhbGlnbm1lbnQ6ZX19ZnVuY3Rpb24gS24odCxlKXtyZXR1cm4gTWF0aC5jZWlsKHQvZSkqZX1abi5zZXJpYWxpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJpbSgpLGUmJih0LmlzVHJhbnNmZXJyZWQ9ITAsZS5wdXNoKHQuYXJyYXlCdWZmZXIpKSx7bGVuZ3RoOnQubGVuZ3RoLGFycmF5QnVmZmVyOnQuYXJyYXlCdWZmZXJ9fSxabi5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QuY3JlYXRlKHRoaXMucHJvdG90eXBlKTtyZXR1cm4gZS5hcnJheUJ1ZmZlcj10LmFycmF5QnVmZmVyLGUubGVuZ3RoPXQubGVuZ3RoLGUuY2FwYWNpdHk9dC5hcnJheUJ1ZmZlci5ieXRlTGVuZ3RoL2UuYnl0ZXNQZXJFbGVtZW50LGUuX3JlZnJlc2hWaWV3cygpLGV9LFpuLnByb3RvdHlwZS5fdHJpbT1mdW5jdGlvbigpe3RoaXMubGVuZ3RoIT09dGhpcy5jYXBhY2l0eSYmKHRoaXMuY2FwYWNpdHk9dGhpcy5sZW5ndGgsdGhpcy5hcnJheUJ1ZmZlcj10aGlzLmFycmF5QnVmZmVyLnNsaWNlKDAsdGhpcy5sZW5ndGgqdGhpcy5ieXRlc1BlckVsZW1lbnQpLHRoaXMuX3JlZnJlc2hWaWV3cygpKX0sWm4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGg9MH0sWm4ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXt0aGlzLnJlc2VydmUodCksdGhpcy5sZW5ndGg9dH0sWm4ucHJvdG90eXBlLnJlc2VydmU9ZnVuY3Rpb24odCl7aWYodD50aGlzLmNhcGFjaXR5KXt0aGlzLmNhcGFjaXR5PU1hdGgubWF4KHQsTWF0aC5mbG9vcig1KnRoaXMuY2FwYWNpdHkpLDEyOCksdGhpcy5hcnJheUJ1ZmZlcj1uZXcgQXJyYXlCdWZmZXIodGhpcy5jYXBhY2l0eSp0aGlzLmJ5dGVzUGVyRWxlbWVudCk7dmFyIGU9dGhpcy51aW50ODt0aGlzLl9yZWZyZXNoVmlld3MoKSxlJiZ0aGlzLnVpbnQ4LnNldChlKX19LFpuLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfcmVmcmVzaFZpZXdzKCkgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIGNvbmNyZXRlIFN0cnVjdEFycmF5IGxheW91dCIpfTt2YXIgUW49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShyKzEpLHRoaXMuZW1wbGFjZShyLHQsZSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdDtyZXR1cm4gdGhpcy5pbnQxNltuKzBdPWUsdGhpcy5pbnQxNltuKzFdPXIsdH0sZX0oWm4pO1FuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxkbigiU3RydWN0QXJyYXlMYXlvdXQyaTQiLFFuKTt2YXIgJG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoYSsxKSx0aGlzLmVtcGxhY2UoYSx0LGUscixuKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBpPTQqdDtyZXR1cm4gdGhpcy5pbnQxNltpKzBdPWUsdGhpcy5pbnQxNltpKzFdPXIsdGhpcy5pbnQxNltpKzJdPW4sdGhpcy5pbnQxNltpKzNdPWEsdH0sZX0oWm4pOyRuLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxkbigiU3RydWN0QXJyYXlMYXlvdXQ0aTgiLCRuKTt2YXIgdGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGEsaSl7dmFyIG89dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG8rMSksdGhpcy5lbXBsYWNlKG8sdCxlLHIsbixhLGkpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8pe3ZhciBzPTYqdDtyZXR1cm4gdGhpcy5pbnQxNltzKzBdPWUsdGhpcy5pbnQxNltzKzFdPXIsdGhpcy5pbnQxNltzKzJdPW4sdGhpcy5pbnQxNltzKzNdPWEsdGhpcy5pbnQxNltzKzRdPWksdGhpcy5pbnQxNltzKzVdPW8sdH0sZX0oWm4pO3RhLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIsZG4oIlN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyIix0YSk7dmFyIGVhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixhLGkpe3ZhciBvPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShvKzEpLHRoaXMuZW1wbGFjZShvLHQsZSxyLG4sYSxpKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGEsaSxvKXt2YXIgcz00KnQsbD04KnQ7cmV0dXJuIHRoaXMuaW50MTZbcyswXT1lLHRoaXMuaW50MTZbcysxXT1yLHRoaXMudWludDhbbCs0XT1uLHRoaXMudWludDhbbCs1XT1hLHRoaXMudWludDhbbCs2XT1pLHRoaXMudWludDhbbCs3XT1vLHR9LGV9KFpuKTtlYS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTgsZG4oIlN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4IixlYSk7dmFyIHJhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGEsaSxvLHMpe3ZhciBsPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShsKzEpLHRoaXMuZW1wbGFjZShsLHQsZSxyLG4sYSxpLG8scyl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixhLGksbyxzLGwpe3ZhciBjPTgqdDtyZXR1cm4gdGhpcy51aW50MTZbYyswXT1lLHRoaXMudWludDE2W2MrMV09cix0aGlzLnVpbnQxNltjKzJdPW4sdGhpcy51aW50MTZbYyszXT1hLHRoaXMudWludDE2W2MrNF09aSx0aGlzLnVpbnQxNltjKzVdPW8sdGhpcy51aW50MTZbYys2XT1zLHRoaXMudWludDE2W2MrN109bCx0fSxlfShabik7cmEucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xNixkbigiU3RydWN0QXJyYXlMYXlvdXQ4dWkxNiIscmEpO3ZhciBuYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGEsaSxvLHMpe3ZhciBsPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShsKzEpLHRoaXMuZW1wbGFjZShsLHQsZSxyLG4sYSxpLG8scyl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixhLGksbyxzLGwpe3ZhciBjPTgqdDtyZXR1cm4gdGhpcy5pbnQxNltjKzBdPWUsdGhpcy5pbnQxNltjKzFdPXIsdGhpcy5pbnQxNltjKzJdPW4sdGhpcy5pbnQxNltjKzNdPWEsdGhpcy51aW50MTZbYys0XT1pLHRoaXMudWludDE2W2MrNV09byx0aGlzLnVpbnQxNltjKzZdPXMsdGhpcy51aW50MTZbYys3XT1sLHR9LGV9KFpuKTtuYS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTE2LGRuKCJTdHJ1Y3RBcnJheUxheW91dDRpNHVpMTYiLG5hKTt2YXIgYWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShuKzEpLHRoaXMuZW1wbGFjZShuLHQsZSxyKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuKXt2YXIgYT0zKnQ7cmV0dXJuIHRoaXMuZmxvYXQzMlthKzBdPWUsdGhpcy5mbG9hdDMyW2ErMV09cix0aGlzLmZsb2F0MzJbYSsyXT1uLHR9LGV9KFpuKTthYS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLGRuKCJTdHJ1Y3RBcnJheUxheW91dDNmMTIiLGFhKTt2YXIgaWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShlKzEpLHRoaXMuZW1wbGFjZShlLHQpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MSp0O3JldHVybiB0aGlzLnVpbnQzMltyKzBdPWUsdH0sZX0oWm4pO2lhLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxkbigiU3RydWN0QXJyYXlMYXlvdXQxdWw0IixpYSk7dmFyIG9hPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGEsaSxvLHMsbCxjLHUpe3ZhciBoPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShoKzEpLHRoaXMuZW1wbGFjZShoLHQsZSxyLG4sYSxpLG8scyxsLGMsdSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixhLGksbyxzLGwsYyx1LGgpe3ZhciBmPTEyKnQscD02KnQ7cmV0dXJuIHRoaXMuaW50MTZbZiswXT1lLHRoaXMuaW50MTZbZisxXT1yLHRoaXMuaW50MTZbZisyXT1uLHRoaXMuaW50MTZbZiszXT1hLHRoaXMuaW50MTZbZis0XT1pLHRoaXMuaW50MTZbZis1XT1vLHRoaXMudWludDMyW3ArM109cyx0aGlzLnVpbnQxNltmKzhdPWwsdGhpcy51aW50MTZbZis5XT1jLHRoaXMuaW50MTZbZisxMF09dSx0aGlzLmludDE2W2YrMTFdPWgsdH0sZX0oWm4pO29hLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MjQsZG4oIlN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyaTI0IixvYSk7dmFyIHNhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixhLGkpe3ZhciBvPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShvKzEpLHRoaXMuZW1wbGFjZShvLHQsZSxyLG4sYSxpKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGEsaSxvKXt2YXIgcz02KnQ7cmV0dXJuIHRoaXMuaW50MTZbcyswXT1lLHRoaXMuaW50MTZbcysxXT1yLHRoaXMuaW50MTZbcysyXT1uLHRoaXMuaW50MTZbcyszXT1hLHRoaXMuaW50MTZbcys0XT1pLHRoaXMuaW50MTZbcys1XT1vLHR9LGV9KFpuKTtzYS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLGRuKCJTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyIixzYSk7dmFyIGxhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShhKzEpLHRoaXMuZW1wbGFjZShhLHQsZSxyLG4pfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIGk9MTIqdCxvPTMqdDtyZXR1cm4gdGhpcy51aW50OFtpKzBdPWUsdGhpcy51aW50OFtpKzFdPXIsdGhpcy5mbG9hdDMyW28rMV09bix0aGlzLmZsb2F0MzJbbysyXT1hLHR9LGV9KFpuKTtsYS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTEyLGRuKCJTdHJ1Y3RBcnJheUxheW91dDJ1YjJmMTIiLGxhKTt2YXIgY2E9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8scyxsLGMsdSxoLGYscCxkLGcpe3ZhciB2PXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZSh2KzEpLHRoaXMuZW1wbGFjZSh2LHQsZSxyLG4sYSxpLG8scyxsLGMsdSxoLGYscCxkLGcpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8scyxsLGMsdSxoLGYscCxkLGcsdil7dmFyIG09MjIqdCx5PTExKnQseD00NCp0O3JldHVybiB0aGlzLmludDE2W20rMF09ZSx0aGlzLmludDE2W20rMV09cix0aGlzLnVpbnQxNlttKzJdPW4sdGhpcy51aW50MTZbbSszXT1hLHRoaXMudWludDMyW3krMl09aSx0aGlzLnVpbnQzMlt5KzNdPW8sdGhpcy51aW50MzJbeSs0XT1zLHRoaXMudWludDE2W20rMTBdPWwsdGhpcy51aW50MTZbbSsxMV09Yyx0aGlzLnVpbnQxNlttKzEyXT11LHRoaXMuZmxvYXQzMlt5KzddPWgsdGhpcy5mbG9hdDMyW3krOF09Zix0aGlzLnVpbnQ4W3grMzZdPXAsdGhpcy51aW50OFt4KzM3XT1kLHRoaXMudWludDhbeCszOF09Zyx0aGlzLnVpbnQzMlt5KzEwXT12LHR9LGV9KFpuKTtjYS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQ0LGRuKCJTdHJ1Y3RBcnJheUxheW91dDJpMnVpM3VsM3VpMmYzdWIxdWw0NCIsY2EpO3ZhciB1YT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixhLGksbyxzLGwsYyx1LGgsZixwLGQsZyx2LG0seSx4KXt2YXIgYj10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoYisxKSx0aGlzLmVtcGxhY2UoYix0LGUscixuLGEsaSxvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbSx5LHgpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8scyxsLGMsdSxoLGYscCxkLGcsdixtLHkseCxiKXt2YXIgXz0yNCp0LHc9MTIqdDtyZXR1cm4gdGhpcy5pbnQxNltfKzBdPWUsdGhpcy5pbnQxNltfKzFdPXIsdGhpcy5pbnQxNltfKzJdPW4sdGhpcy5pbnQxNltfKzNdPWEsdGhpcy5pbnQxNltfKzRdPWksdGhpcy5pbnQxNltfKzVdPW8sdGhpcy51aW50MTZbXys2XT1zLHRoaXMudWludDE2W18rN109bCx0aGlzLnVpbnQxNltfKzhdPWMsdGhpcy51aW50MTZbXys5XT11LHRoaXMudWludDE2W18rMTBdPWgsdGhpcy51aW50MTZbXysxMV09Zix0aGlzLnVpbnQxNltfKzEyXT1wLHRoaXMudWludDE2W18rMTNdPWQsdGhpcy51aW50MTZbXysxNF09Zyx0aGlzLnVpbnQxNltfKzE1XT12LHRoaXMudWludDE2W18rMTZdPW0sdGhpcy51aW50MzJbdys5XT15LHRoaXMuZmxvYXQzMlt3KzEwXT14LHRoaXMuZmxvYXQzMlt3KzExXT1iLHR9LGV9KFpuKTt1YS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTQ4LGRuKCJTdHJ1Y3RBcnJheUxheW91dDZpMTF1aTF1bDJmNDgiLHVhKTt2YXIgaGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGUrMSksdGhpcy5lbXBsYWNlKGUsdCl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj0xKnQ7cmV0dXJuIHRoaXMuZmxvYXQzMltyKzBdPWUsdH0sZX0oWm4pO2hhLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxkbigiU3RydWN0QXJyYXlMYXlvdXQxZjQiLGhhKTt2YXIgZmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG4rMSksdGhpcy5lbXBsYWNlKG4sdCxlLHIpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPTMqdDtyZXR1cm4gdGhpcy5pbnQxNlthKzBdPWUsdGhpcy5pbnQxNlthKzFdPXIsdGhpcy5pbnQxNlthKzJdPW4sdH0sZX0oWm4pO2ZhLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NixkbigiU3RydWN0QXJyYXlMYXlvdXQzaTYiLGZhKTt2YXIgcGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG4rMSksdGhpcy5lbXBsYWNlKG4sdCxlLHIpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPTIqdCxpPTQqdDtyZXR1cm4gdGhpcy51aW50MzJbYSswXT1lLHRoaXMudWludDE2W2krMl09cix0aGlzLnVpbnQxNltpKzNdPW4sdH0sZX0oWm4pO3BhLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxkbigiU3RydWN0QXJyYXlMYXlvdXQxdWwydWk4IixwYSk7dmFyIGRhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG4rMSksdGhpcy5lbXBsYWNlKG4sdCxlLHIpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPTMqdDtyZXR1cm4gdGhpcy51aW50MTZbYSswXT1lLHRoaXMudWludDE2W2ErMV09cix0aGlzLnVpbnQxNlthKzJdPW4sdH0sZX0oWm4pO2RhLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NixkbigiU3RydWN0QXJyYXlMYXlvdXQzdWk2IixkYSk7dmFyIGdhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShyKzEpLHRoaXMuZW1wbGFjZShyLHQsZSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdDtyZXR1cm4gdGhpcy51aW50MTZbbiswXT1lLHRoaXMudWludDE2W24rMV09cix0fSxlfShabik7Z2EucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LGRuKCJTdHJ1Y3RBcnJheUxheW91dDJ1aTQiLGdhKTt2YXIgdmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShlKzEpLHRoaXMuZW1wbGFjZShlLHQpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MSp0O3JldHVybiB0aGlzLnVpbnQxNltyKzBdPWUsdH0sZX0oWm4pO3ZhLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MixkbigiU3RydWN0QXJyYXlMYXlvdXQxdWkyIix2YSk7dmFyIG1hPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKHIrMSksdGhpcy5lbXBsYWNlKHIsdCxlKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0O3JldHVybiB0aGlzLmZsb2F0MzJbbiswXT1lLHRoaXMuZmxvYXQzMltuKzFdPXIsdH0sZX0oWm4pO21hLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxkbigiU3RydWN0QXJyYXlMYXlvdXQyZjgiLG1hKTt2YXIgeWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGErMSksdGhpcy5lbXBsYWNlKGEsdCxlLHIsbil9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgaT00KnQ7cmV0dXJuIHRoaXMuZmxvYXQzMltpKzBdPWUsdGhpcy5mbG9hdDMyW2krMV09cix0aGlzLmZsb2F0MzJbaSsyXT1uLHRoaXMuZmxvYXQzMltpKzNdPWEsdH0sZX0oWm4pO3lhLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTYsZG4oIlN0cnVjdEFycmF5TGF5b3V0NGYxNiIseWEpO3ZhciB4YT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2FuY2hvclBvaW50WDp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JQb2ludFk6e2NvbmZpZ3VyYWJsZTohMH0seDE6e2NvbmZpZ3VyYWJsZTohMH0seTE6e2NvbmZpZ3VyYWJsZTohMH0seDI6e2NvbmZpZ3VyYWJsZTohMH0seTI6e2NvbmZpZ3VyYWJsZTohMH0sZmVhdHVyZUluZGV4Ontjb25maWd1cmFibGU6ITB9LHNvdXJjZUxheWVySW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sYnVja2V0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0scmFkaXVzOntjb25maWd1cmFibGU6ITB9LHNpZ25lZERpc3RhbmNlRnJvbUFuY2hvcjp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JQb2ludDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIuYW5jaG9yUG9pbnRYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLmFuY2hvclBvaW50WC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXT10fSxyLmFuY2hvclBvaW50WS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXX0sci5hbmNob3JQb2ludFkuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV09dH0sci54MS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXX0sci54MS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXT10fSxyLnkxLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzNdfSxyLnkxLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzNdPXR9LHIueDIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNF19LHIueDIuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNF09dH0sci55Mi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis1XX0sci55Mi5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis1XT10fSxyLmZlYXR1cmVJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrM119LHIuZmVhdHVyZUluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXT10fSxyLnNvdXJjZUxheWVySW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzhdfSxyLnNvdXJjZUxheWVySW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzhdPXR9LHIuYnVja2V0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzldfSxyLmJ1Y2tldEluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis5XT10fSxyLnJhZGl1cy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxMF19LHIucmFkaXVzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzEwXT10fSxyLnNpZ25lZERpc3RhbmNlRnJvbUFuY2hvci5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxMV19LHIuc2lnbmVkRGlzdGFuY2VGcm9tQW5jaG9yLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzExXT10fSxyLmFuY2hvclBvaW50LmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgYSh0aGlzLmFuY2hvclBvaW50WCx0aGlzLmFuY2hvclBvaW50WSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KFhuKTt4YS5wcm90b3R5cGUuc2l6ZT0yNDt2YXIgYmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4YSh0aGlzLHQpfSxlfShvYSk7ZG4oIkNvbGxpc2lvbkJveEFycmF5IixiYSk7dmFyIF9hPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17YW5jaG9yWDp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JZOntjb25maWd1cmFibGU6ITB9LGdseXBoU3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxudW1HbHlwaHM6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGV4U3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxsaW5lU3RhcnRJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxsaW5lTGVuZ3RoOntjb25maWd1cmFibGU6ITB9LHNlZ21lbnQ6e2NvbmZpZ3VyYWJsZTohMH0sbG93ZXJTaXplOntjb25maWd1cmFibGU6ITB9LHVwcGVyU2l6ZTp7Y29uZmlndXJhYmxlOiEwfSxsaW5lT2Zmc2V0WDp7Y29uZmlndXJhYmxlOiEwfSxsaW5lT2Zmc2V0WTp7Y29uZmlndXJhYmxlOiEwfSx3cml0aW5nTW9kZTp7Y29uZmlndXJhYmxlOiEwfSxwbGFjZWRPcmllbnRhdGlvbjp7Y29uZmlndXJhYmxlOiEwfSxoaWRkZW46e2NvbmZpZ3VyYWJsZTohMH0sY3Jvc3NUaWxlSUQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmFuY2hvclguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF19LHIuYW5jaG9yWC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXT10fSxyLmFuY2hvclkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIuYW5jaG9yWS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisxXT10fSxyLmdseXBoU3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl19LHIuZ2x5cGhTdGFydEluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyXT10fSxyLm51bUdseXBocy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM119LHIubnVtR2x5cGhzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiszXT10fSxyLnZlcnRleFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzJdfSxyLnZlcnRleFN0YXJ0SW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzJdPXR9LHIubGluZVN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzNdfSxyLmxpbmVTdGFydEluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXT10fSxyLmxpbmVMZW5ndGguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzRdfSxyLmxpbmVMZW5ndGguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzRdPXR9LHIuc2VnbWVudC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTBdfSxyLnNlZ21lbnQuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEwXT10fSxyLmxvd2VyU2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTFdfSxyLmxvd2VyU2l6ZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTFdPXR9LHIudXBwZXJTaXplLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMl19LHIudXBwZXJTaXplLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMl09dH0sci5saW5lT2Zmc2V0WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzddfSxyLmxpbmVPZmZzZXRYLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrN109dH0sci5saW5lT2Zmc2V0WS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzhdfSxyLmxpbmVPZmZzZXRZLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrOF09dH0sci53cml0aW5nTW9kZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszNl19LHIud3JpdGluZ01vZGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzZdPXR9LHIucGxhY2VkT3JpZW50YXRpb24uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzddfSxyLnBsYWNlZE9yaWVudGF0aW9uLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM3XT10fSxyLmhpZGRlbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszOF19LHIuaGlkZGVuLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM4XT10fSxyLmNyb3NzVGlsZUlELmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCsxMF19LHIuY3Jvc3NUaWxlSUQuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzEwXT10fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShYbik7X2EucHJvdG90eXBlLnNpemU9NDQ7dmFyIHdhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgX2EodGhpcyx0KX0sZX0oY2EpO2RuKCJQbGFjZWRTeW1ib2xBcnJheSIsd2EpO3ZhciBrYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2FuY2hvclg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yWTp7Y29uZmlndXJhYmxlOiEwfSxyaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxjZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sbGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxrZXk6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dEJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dEJveEVuZEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljYWxUZXh0Qm94RW5kSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0saWNvbkJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0saWNvbkJveEVuZEluZGV4Ontjb25maWd1cmFibGU6ITB9LGZlYXR1cmVJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlczp7Y29uZmlndXJhYmxlOiEwfSxudW1WZXJ0aWNhbEdseXBoVmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH0sbnVtSWNvblZlcnRpY2VzOntjb25maWd1cmFibGU6ITB9LGNyb3NzVGlsZUlEOntjb25maWd1cmFibGU6ITB9LHRleHRCb3hTY2FsZTp7Y29uZmlndXJhYmxlOiEwfSxyYWRpYWxUZXh0T2Zmc2V0Ontjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLmFuY2hvclguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF09dH0sci5hbmNob3JZLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLmFuY2hvclkuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV09dH0sci5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXX0sci5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXT10fSxyLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiszXX0sci5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrM109dH0sci5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzRdfSxyLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNF09dH0sci52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis1XX0sci52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMis1XT10fSxyLmtleS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrNl19LHIua2V5LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis2XT10fSxyLnRleHRCb3hTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis3XX0sci50ZXh0Qm94U3RhcnRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrN109dH0sci50ZXh0Qm94RW5kSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzhdfSxyLnRleHRCb3hFbmRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOF09dH0sci52ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis5XX0sci52ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis5XT10fSxyLnZlcnRpY2FsVGV4dEJveEVuZEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMF19LHIudmVydGljYWxUZXh0Qm94RW5kSW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzEwXT10fSxyLmljb25Cb3hTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMV19LHIuaWNvbkJveFN0YXJ0SW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXT10fSxyLmljb25Cb3hFbmRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTJdfSxyLmljb25Cb3hFbmRJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTJdPXR9LHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxM119LHIuZmVhdHVyZUluZGV4LnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxM109dH0sci5udW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTRdfSxyLm51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxNF09dH0sci5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzE1XX0sci5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzE1XT10fSxyLm51bUljb25WZXJ0aWNlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTZdfSxyLm51bUljb25WZXJ0aWNlcy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTZdPXR9LHIuY3Jvc3NUaWxlSUQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzldfSxyLmNyb3NzVGlsZUlELnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCs5XT10fSxyLnRleHRCb3hTY2FsZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzEwXX0sci50ZXh0Qm94U2NhbGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCsxMF09dH0sci5yYWRpYWxUZXh0T2Zmc2V0LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTFdfSxyLnJhZGlhbFRleHRPZmZzZXQuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCsxMV09dH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oWG4pO2thLnByb3RvdHlwZS5zaXplPTQ4O3ZhciBUYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGthKHRoaXMsdCl9LGV9KHVhKTtkbigiU3ltYm9sSW5zdGFuY2VBcnJheSIsVGEpO3ZhciBNYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e29mZnNldFg6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLm9mZnNldFguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCswXX0sci5vZmZzZXRYLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMF09dH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oWG4pO01hLnByb3RvdHlwZS5zaXplPTQ7dmFyIEFhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0b2Zmc2V0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mbG9hdDMyWzEqdCswXX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTWEodGhpcyx0KX0sZX0oaGEpO2RuKCJHbHlwaE9mZnNldEFycmF5IixBYSk7dmFyIFNhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17eDp7Y29uZmlndXJhYmxlOiEwfSx5Ontjb25maWd1cmFibGU6ITB9LHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci54LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLnguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMF09dH0sci55LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzFdfSxyLnkuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV09dH0sci50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvci5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXX0sci50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvci5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyXT10fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShYbik7U2EucHJvdG90eXBlLnNpemU9Njt2YXIgRWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXR4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludDE2WzMqdCswXX0sZS5wcm90b3R5cGUuZ2V0eT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMV19LGUucHJvdG90eXBlLmdldHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludDE2WzMqdCsyXX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgU2EodGhpcyx0KX0sZX0oZmEpO2RuKCJTeW1ib2xMaW5lVmVydGV4QXJyYXkiLEVhKTt2YXIgTGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXtmZWF0dXJlSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sc291cmNlTGF5ZXJJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxidWNrZXRJbmRleDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCswXX0sci5mZWF0dXJlSW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzBdPXR9LHIuc291cmNlTGF5ZXJJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl19LHIuc291cmNlTGF5ZXJJbmRleC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl09dH0sci5idWNrZXRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrM119LHIuYnVja2V0SW5kZXguc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzNdPXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KFhuKTtMYS5wcm90b3R5cGUuc2l6ZT04O3ZhciBDYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IExhKHRoaXMsdCl9LGV9KHBhKTtkbigiRmVhdHVyZUluZGV4QXJyYXkiLENhKTt2YXIgUGE9Sm4oW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dLDQpLm1lbWJlcnMsT2E9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9W10pLHRoaXMuc2VnbWVudHM9dH07ZnVuY3Rpb24gemEodCxlKXtyZXR1cm4gMjU2Kih0PWMoTWF0aC5mbG9vcih0KSwwLDI1NSkpK2MoTWF0aC5mbG9vcihlKSwwLDI1NSl9T2EucHJvdG90eXBlLnByZXBhcmVTZWdtZW50PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXRoaXMuc2VnbWVudHNbdGhpcy5zZWdtZW50cy5sZW5ndGgtMV07cmV0dXJuIHQ+T2EuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgmJncoIk1heCB2ZXJ0aWNlcyBwZXIgc2VnbWVudCBpcyAiK09hLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIKyI6IGJ1Y2tldCByZXF1ZXN0ZWQgIit0KSwoIWF8fGEudmVydGV4TGVuZ3RoK3Q+T2EuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEh8fGEuc29ydEtleSE9PW4pJiYoYT17dmVydGV4T2Zmc2V0OmUubGVuZ3RoLHByaW1pdGl2ZU9mZnNldDpyLmxlbmd0aCx2ZXJ0ZXhMZW5ndGg6MCxwcmltaXRpdmVMZW5ndGg6MH0sdm9pZCAwIT09biYmKGEuc29ydEtleT1uKSx0aGlzLnNlZ21lbnRzLnB1c2goYSkpLGF9LE9hLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWdtZW50c30sT2EucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuc2VnbWVudHM7dDxlLmxlbmd0aDt0Kz0xKXt2YXIgcj1lW3RdO2Zvcih2YXIgbiBpbiByLnZhb3Mpci52YW9zW25dLmRlc3Ryb3koKX19LE9hLnNpbXBsZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG5ldyBPYShbe3ZlcnRleE9mZnNldDp0LHByaW1pdGl2ZU9mZnNldDplLHZlcnRleExlbmd0aDpyLHByaW1pdGl2ZUxlbmd0aDpuLHZhb3M6e30sc29ydEtleTowfV0pfSxPYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSD1NYXRoLnBvdygyLDE2KS0xLGRuKCJTZWdtZW50VmVjdG9yIixPYSk7dmFyIElhPWZ1bmN0aW9uKCl7dGhpcy5pZHM9W10sdGhpcy5wb3NpdGlvbnM9W10sdGhpcy5pbmRleGVkPSExfTtmdW5jdGlvbiBEYSh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufUlhLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5pZHMucHVzaCh0KSx0aGlzLnBvc2l0aW9ucy5wdXNoKGUscixuKX0sSWEucHJvdG90eXBlLmdldFBvc2l0aW9ucz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuaWRzLmxlbmd0aC0xO2U8cjspe3ZhciBuPWUrcj4+MTt0aGlzLmlkc1tuXT49dD9yPW46ZT1uKzF9Zm9yKHZhciBhPVtdO3RoaXMuaWRzW2VdPT09dDspe3ZhciBpPXRoaXMucG9zaXRpb25zWzMqZV0sbz10aGlzLnBvc2l0aW9uc1szKmUrMV0scz10aGlzLnBvc2l0aW9uc1szKmUrMl07YS5wdXNoKHtpbmRleDppLHN0YXJ0Om8sZW5kOnN9KSxlKyt9cmV0dXJuIGF9LElhLnNlcmlhbGl6ZT1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBGbG9hdDY0QXJyYXkodC5pZHMpLG49bmV3IFVpbnQzMkFycmF5KHQucG9zaXRpb25zKTtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixhKXtpZighKG4+PWEpKXtmb3IodmFyIGk9ZVtuK2E+PjFdLG89bi0xLHM9YSsxOzspe2Rve28rK313aGlsZShlW29dPGkpO2Rve3MtLX13aGlsZShlW3NdPmkpO2lmKG8+PXMpYnJlYWs7RGEoZSxvLHMpLERhKHIsMypvLDMqcyksRGEociwzKm8rMSwzKnMrMSksRGEociwzKm8rMiwzKnMrMil9dChlLHIsbixzKSx0KGUscixzKzEsYSl9fShyLG4sMCxyLmxlbmd0aC0xKSxlLnB1c2goci5idWZmZXIsbi5idWZmZXIpLHtpZHM6cixwb3NpdGlvbnM6bn19LElhLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBJYTtyZXR1cm4gZS5pZHM9dC5pZHMsZS5wb3NpdGlvbnM9dC5wb3NpdGlvbnMsZS5pbmRleGVkPSEwLGV9LGRuKCJGZWF0dXJlUG9zaXRpb25NYXAiLElhKTt2YXIgUmE9ZnVuY3Rpb24odCxlKXt0aGlzLmdsPXQuZ2wsdGhpcy5sb2NhdGlvbj1lfSxGYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmN1cnJlbnQ9MH1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm0xaSh0aGlzLmxvY2F0aW9uLHQpKX0sZX0oUmEpLEJhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuY3VycmVudD0wfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50IT09dCYmKHRoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybTFmKHRoaXMubG9jYXRpb24sdCkpfSxlfShSYSksTmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PVswLDBdfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dFswXT09PXRoaXMuY3VycmVudFswXSYmdFsxXT09PXRoaXMuY3VycmVudFsxXXx8KHRoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybTJmKHRoaXMubG9jYXRpb24sdFswXSx0WzFdKSl9LGV9KFJhKSxqYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmN1cnJlbnQ9WzAsMCwwXX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RbMF09PT10aGlzLmN1cnJlbnRbMF0mJnRbMV09PT10aGlzLmN1cnJlbnRbMV0mJnRbMl09PT10aGlzLmN1cnJlbnRbMl18fCh0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm0zZih0aGlzLmxvY2F0aW9uLHRbMF0sdFsxXSx0WzJdKSl9LGV9KFJhKSxWYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmN1cnJlbnQ9WzAsMCwwLDBdfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dFswXT09PXRoaXMuY3VycmVudFswXSYmdFsxXT09PXRoaXMuY3VycmVudFsxXSYmdFsyXT09PXRoaXMuY3VycmVudFsyXSYmdFszXT09PXRoaXMuY3VycmVudFszXXx8KHRoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybTRmKHRoaXMubG9jYXRpb24sdFswXSx0WzFdLHRbMl0sdFszXSkpfSxlfShSYSksVWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PVd0LnRyYW5zcGFyZW50fXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dC5yPT09dGhpcy5jdXJyZW50LnImJnQuZz09PXRoaXMuY3VycmVudC5nJiZ0LmI9PT10aGlzLmN1cnJlbnQuYiYmdC5hPT09dGhpcy5jdXJyZW50LmF8fCh0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm00Zih0aGlzLmxvY2F0aW9uLHQucix0LmcsdC5iLHQuYSkpfSxlfShSYSkscWE9bmV3IEZsb2F0MzJBcnJheSgxNiksSGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PXFhfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodFsxMl0hPT10aGlzLmN1cnJlbnRbMTJdfHx0WzBdIT09dGhpcy5jdXJyZW50WzBdKXJldHVybiB0aGlzLmN1cnJlbnQ9dCx2b2lkIHRoaXMuZ2wudW5pZm9ybU1hdHJpeDRmdih0aGlzLmxvY2F0aW9uLCExLHQpO2Zvcih2YXIgZT0xO2U8MTY7ZSsrKWlmKHRbZV0hPT10aGlzLmN1cnJlbnRbZV0pe3RoaXMuY3VycmVudD10LHRoaXMuZ2wudW5pZm9ybU1hdHJpeDRmdih0aGlzLmxvY2F0aW9uLCExLHQpO2JyZWFrfX0sZX0oUmEpO2Z1bmN0aW9uIEdhKHQpe3JldHVyblt6YSgyNTUqdC5yLDI1NSp0LmcpLHphKDI1NSp0LmIsMjU1KnQuYSldfXZhciBZYT1mdW5jdGlvbih0LGUscil7dGhpcy52YWx1ZT10LHRoaXMubmFtZXM9ZSx0aGlzLnVuaWZvcm1OYW1lcz10aGlzLm5hbWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4idV8iK3R9KSx0aGlzLnR5cGU9cix0aGlzLm1heFZhbHVlPS0xLzB9O1lhLnByb3RvdHlwZS5kZWZpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiIjZGVmaW5lIEhBU19VTklGT1JNX3VfIit0fSl9LFlhLnByb3RvdHlwZS5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnM9ZnVuY3Rpb24oKXt9LFlhLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24oKXt9LFlhLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5PWZ1bmN0aW9uKCl7fSxZYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKCl7fSxZYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30sWWEucHJvdG90eXBlLnNldFVuaWZvcm1zPWZ1bmN0aW9uKHQsZSxyLG4pe2Uuc2V0KG4uY29uc3RhbnRPcih0aGlzLnZhbHVlKSl9LFlhLnByb3RvdHlwZS5nZXRCaW5kaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuImNvbG9yIj09PXRoaXMudHlwZT9uZXcgVWEodCxlKTpuZXcgQmEodCxlKX0sWWEuc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBlPXQudmFsdWUscj10Lm5hbWVzLG49dC50eXBlO3JldHVybnt2YWx1ZTp2bihlKSxuYW1lczpyLHR5cGU6bn19LFlhLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBlPXQudmFsdWUscj10Lm5hbWVzLG49dC50eXBlO3JldHVybiBuZXcgWWEobW4oZSkscixuKX07dmFyIFdhPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnZhbHVlPXQsdGhpcy5uYW1lcz1lLHRoaXMudW5pZm9ybU5hbWVzPXRoaXMubmFtZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJ1XyIrdH0pLHRoaXMudHlwZT1yLHRoaXMubWF4VmFsdWU9LTEvMCx0aGlzLnBhdHRlcm5Qb3NpdGlvbnM9e3BhdHRlcm5UbzpudWxsLHBhdHRlcm5Gcm9tOm51bGx9fTtXYS5wcm90b3R5cGUuZGVmaW5lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iI2RlZmluZSBIQVNfVU5JRk9STV91XyIrdH0pfSxXYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKCl7fSxXYS5wcm90b3R5cGUudXBkYXRlUGFpbnRBcnJheT1mdW5jdGlvbigpe30sV2EucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbigpe30sV2EucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LFdhLnByb3RvdHlwZS5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnM9ZnVuY3Rpb24odCxlKXt0aGlzLnBhdHRlcm5Qb3NpdGlvbnMucGF0dGVyblRvPXQudGxicix0aGlzLnBhdHRlcm5Qb3NpdGlvbnMucGF0dGVybkZyb209ZS50bGJyfSxXYS5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgaT10aGlzLnBhdHRlcm5Qb3NpdGlvbnM7InVfcGF0dGVybl90byI9PT1hJiZpLnBhdHRlcm5UbyYmZS5zZXQoaS5wYXR0ZXJuVG8pLCJ1X3BhdHRlcm5fZnJvbSI9PT1hJiZpLnBhdHRlcm5Gcm9tJiZlLnNldChpLnBhdHRlcm5Gcm9tKX0sV2EucHJvdG90eXBlLmdldEJpbmRpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFZhKHQsZSl9O3ZhciBYYT1mdW5jdGlvbih0LGUscixuKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLm5hbWVzPWUsdGhpcy50eXBlPXIsdGhpcy51bmlmb3JtTmFtZXM9dGhpcy5uYW1lcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImFfIit0fSksdGhpcy5tYXhWYWx1ZT0tMS8wLHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybntuYW1lOiJhXyIrdCx0eXBlOiJGbG9hdDMyIixjb21wb25lbnRzOiJjb2xvciI9PT1yPzI6MSxvZmZzZXQ6MH19KSx0aGlzLnBhaW50VmVydGV4QXJyYXk9bmV3IG59O1hhLnByb3RvdHlwZS5kZWZpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LFhhLnByb3RvdHlwZS5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnM9ZnVuY3Rpb24oKXt9LFhhLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dGhpcy5wYWludFZlcnRleEFycmF5LGk9YS5sZW5ndGg7YS5yZXNlcnZlKHQpO3ZhciBvPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgUG4oMCksZSx7fSxuKTtpZigiY29sb3IiPT09dGhpcy50eXBlKWZvcih2YXIgcz1HYShvKSxsPWk7bDx0O2wrKylhLmVtcGxhY2VCYWNrKHNbMF0sc1sxXSk7ZWxzZXtmb3IodmFyIGM9aTtjPHQ7YysrKWEuZW1wbGFjZUJhY2sobyk7dGhpcy5tYXhWYWx1ZT1NYXRoLm1heCh0aGlzLm1heFZhbHVlLG8pfX0sWGEucHJvdG90eXBlLnVwZGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dGhpcy5wYWludFZlcnRleEFycmF5LGk9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOjB9LHIsbik7aWYoImNvbG9yIj09PXRoaXMudHlwZSlmb3IodmFyIG89R2EoaSkscz10O3M8ZTtzKyspYS5lbXBsYWNlKHMsb1swXSxvWzFdKTtlbHNle2Zvcih2YXIgbD10O2w8ZTtsKyspYS5lbXBsYWNlKGwsaSk7dGhpcy5tYXhWYWx1ZT1NYXRoLm1heCh0aGlzLm1heFZhbHVlLGkpfX0sWGEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJnRoaXMucGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciYmKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuYnVmZmVyP3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnBhaW50VmVydGV4QXJyYXkpOnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSl9LFhhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9LFhhLnByb3RvdHlwZS5zZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUpe2Uuc2V0KDApfSxYYS5wcm90b3R5cGUuZ2V0QmluZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgQmEodCxlKX07dmFyIFphPWZ1bmN0aW9uKHQsZSxyLG4sYSxpKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLm5hbWVzPWUsdGhpcy51bmlmb3JtTmFtZXM9dGhpcy5uYW1lcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInVfIit0KyJfdCJ9KSx0aGlzLnR5cGU9cix0aGlzLnVzZUludGVnZXJab29tPW4sdGhpcy56b29tPWEsdGhpcy5tYXhWYWx1ZT0tMS8wO3ZhciBvPWk7dGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXM9ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6ImFfIit0LHR5cGU6IkZsb2F0MzIiLGNvbXBvbmVudHM6ImNvbG9yIj09PXI/NDoyLG9mZnNldDowfX0pLHRoaXMucGFpbnRWZXJ0ZXhBcnJheT1uZXcgb307WmEucHJvdG90eXBlLmRlZmluZXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sWmEucHJvdG90eXBlLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucz1mdW5jdGlvbigpe30sWmEucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUscixuKXt2YXIgYT10aGlzLnBhaW50VmVydGV4QXJyYXksaT1hLmxlbmd0aDthLnJlc2VydmUodCk7dmFyIG89dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBQbih0aGlzLnpvb20pLGUse30sbikscz10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IFBuKHRoaXMuem9vbSsxKSxlLHt9LG4pO2lmKCJjb2xvciI9PT10aGlzLnR5cGUpZm9yKHZhciBsPUdhKG8pLGM9R2EocyksdT1pO3U8dDt1KyspYS5lbXBsYWNlQmFjayhsWzBdLGxbMV0sY1swXSxjWzFdKTtlbHNle2Zvcih2YXIgaD1pO2g8dDtoKyspYS5lbXBsYWNlQmFjayhvLHMpO3RoaXMubWF4VmFsdWU9TWF0aC5tYXgodGhpcy5tYXhWYWx1ZSxvLHMpfX0sWmEucHJvdG90eXBlLnVwZGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dGhpcy5wYWludFZlcnRleEFycmF5LGk9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOnRoaXMuem9vbX0scixuKSxvPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTp0aGlzLnpvb20rMX0scixuKTtpZigiY29sb3IiPT09dGhpcy50eXBlKWZvcih2YXIgcz1HYShpKSxsPUdhKG8pLGM9dDtjPGU7YysrKWEuZW1wbGFjZShjLHNbMF0sc1sxXSxsWzBdLGxbMV0pO2Vsc2V7Zm9yKHZhciB1PXQ7dTxlO3UrKylhLmVtcGxhY2UodSxpLG8pO3RoaXMubWF4VmFsdWU9TWF0aC5tYXgodGhpcy5tYXhWYWx1ZSxpLG8pfX0sWmEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJnRoaXMucGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciYmKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuYnVmZmVyP3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnBhaW50VmVydGV4QXJyYXkpOnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSl9LFphLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9LFphLnByb3RvdHlwZS5pbnRlcnBvbGF0aW9uRmFjdG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVzZUludGVnZXJab29tP3RoaXMuZXhwcmVzc2lvbi5pbnRlcnBvbGF0aW9uRmFjdG9yKE1hdGguZmxvb3IodCksdGhpcy56b29tLHRoaXMuem9vbSsxKTp0aGlzLmV4cHJlc3Npb24uaW50ZXJwb2xhdGlvbkZhY3Rvcih0LHRoaXMuem9vbSx0aGlzLnpvb20rMSl9LFphLnByb3RvdHlwZS5zZXRVbmlmb3Jtcz1mdW5jdGlvbih0LGUscil7ZS5zZXQodGhpcy5pbnRlcnBvbGF0aW9uRmFjdG9yKHIuem9vbSkpfSxaYS5wcm90b3R5cGUuZ2V0QmluZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgQmEodCxlKX07dmFyIEphPWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8pe3RoaXMuZXhwcmVzc2lvbj10LHRoaXMubmFtZXM9ZSx0aGlzLnR5cGU9cix0aGlzLnVuaWZvcm1OYW1lcz10aGlzLm5hbWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4idV8iK3QrIl90In0pLHRoaXMudXNlSW50ZWdlclpvb209bix0aGlzLnpvb209YSx0aGlzLm1heFZhbHVlPS0xLzAsdGhpcy5sYXllcklkPW8sdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXM9ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6ImFfIit0LHR5cGU6IlVpbnQxNiIsY29tcG9uZW50czo0LG9mZnNldDowfX0pLHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheT1uZXcgaSx0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5PW5ldyBpfTtKYS5wcm90b3R5cGUuZGVmaW5lcz1mdW5jdGlvbigpe3JldHVybltdfSxKYS5wcm90b3R5cGUuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zPWZ1bmN0aW9uKCl7fSxKYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXksYT10aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LGk9dGhpcy5sYXllcklkLG89bi5sZW5ndGg7aWYobi5yZXNlcnZlKHQpLGEucmVzZXJ2ZSh0KSxyJiZlLnBhdHRlcm5zJiZlLnBhdHRlcm5zW2ldKXt2YXIgcz1lLnBhdHRlcm5zW2ldLGw9cy5taW4sYz1zLm1pZCx1PXMubWF4LGg9cltsXSxmPXJbY10scD1yW3VdO2lmKCFofHwhZnx8IXApcmV0dXJuO2Zvcih2YXIgZD1vO2Q8dDtkKyspbi5lbXBsYWNlQmFjayhmLnRsWzBdLGYudGxbMV0sZi5iclswXSxmLmJyWzFdLGgudGxbMF0saC50bFsxXSxoLmJyWzBdLGguYnJbMV0pLGEuZW1wbGFjZUJhY2soZi50bFswXSxmLnRsWzFdLGYuYnJbMF0sZi5iclsxXSxwLnRsWzBdLHAudGxbMV0scC5iclswXSxwLmJyWzFdKX19LEphLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIGk9dGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LG89dGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheSxzPXRoaXMubGF5ZXJJZDtpZihhJiZyLnBhdHRlcm5zJiZyLnBhdHRlcm5zW3NdKXt2YXIgbD1yLnBhdHRlcm5zW3NdLGM9bC5taW4sdT1sLm1pZCxoPWwubWF4LGY9YVtjXSxwPWFbdV0sZD1hW2hdO2lmKCFmfHwhcHx8IWQpcmV0dXJuO2Zvcih2YXIgZz10O2c8ZTtnKyspaS5lbXBsYWNlKGcscC50bFswXSxwLnRsWzFdLHAuYnJbMF0scC5iclsxXSxmLnRsWzBdLGYudGxbMV0sZi5iclswXSxmLmJyWzFdKSxvLmVtcGxhY2UoZyxwLnRsWzBdLHAudGxbMV0scC5iclswXSxwLmJyWzFdLGQudGxbMF0sZC50bFsxXSxkLmJyWzBdLGQuYnJbMV0pfX0sSmEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkmJnRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciYmdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheSYmdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciYmKHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSx0aGlzLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSl9LEphLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMuem9vbU91dFBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyJiZ0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKX0sSmEucHJvdG90eXBlLnNldFVuaWZvcm1zPWZ1bmN0aW9uKHQsZSl7ZS5zZXQoMCl9LEphLnByb3RvdHlwZS5nZXRCaW5kaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBCYSh0LGUpfTt2YXIgS2E9ZnVuY3Rpb24oKXt0aGlzLmJpbmRlcnM9e30sdGhpcy5jYWNoZUtleT0iIix0aGlzLl9idWZmZXJzPVtdLHRoaXMuX2ZlYXR1cmVNYXA9bmV3IElhLHRoaXMuX2J1ZmZlck9mZnNldD0wfTtLYS5jcmVhdGVEeW5hbWljPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgS2EsYT1bXTtmb3IodmFyIGkgaW4gdC5wYWludC5fdmFsdWVzKWlmKHIoaSkpe3ZhciBvPXQucGFpbnQuZ2V0KGkpO2lmKG8gaW5zdGFuY2VvZiBCbiYmdXIoby5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKSl7dmFyIHM9JGEoaSx0LnR5cGUpLGw9by5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGUsYz1vLnByb3BlcnR5LnVzZUludGVnZXJab29tO2lmKCJjcm9zcy1mYWRlZCI9PT1vLnByb3BlcnR5LnNwZWNpZmljYXRpb25bInByb3BlcnR5LXR5cGUiXXx8ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIj09PW8ucHJvcGVydHkuc3BlY2lmaWNhdGlvblsicHJvcGVydHktdHlwZSJdKWlmKCJjb25zdGFudCI9PT1vLnZhbHVlLmtpbmQpbi5iaW5kZXJzW2ldPW5ldyBXYShvLnZhbHVlLnZhbHVlLHMsbCksYS5wdXNoKCIvdV8iK2kpO2Vsc2V7dmFyIHU9dGkoaSxsLCJzb3VyY2UiKTtuLmJpbmRlcnNbaV09bmV3IEphKG8udmFsdWUscyxsLGMsZSx1LHQuaWQpLGEucHVzaCgiL2FfIitpKX1lbHNlIGlmKCJjb25zdGFudCI9PT1vLnZhbHVlLmtpbmQpbi5iaW5kZXJzW2ldPW5ldyBZYShvLnZhbHVlLnZhbHVlLHMsbCksYS5wdXNoKCIvdV8iK2kpO2Vsc2UgaWYoInNvdXJjZSI9PT1vLnZhbHVlLmtpbmQpe3ZhciBoPXRpKGksbCwic291cmNlIik7bi5iaW5kZXJzW2ldPW5ldyBYYShvLnZhbHVlLHMsbCxoKSxhLnB1c2goIi9hXyIraSl9ZWxzZXt2YXIgZj10aShpLGwsImNvbXBvc2l0ZSIpO24uYmluZGVyc1tpXT1uZXcgWmEoby52YWx1ZSxzLGwsYyxlLGYpLGEucHVzaCgiL3pfIitpKX19fXJldHVybiBuLmNhY2hlS2V5PWEuc29ydCgpLmpvaW4oIiIpLG59LEthLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXlzPWZ1bmN0aW9uKHQsZSxyLG4sYSl7Zm9yKHZhciBpIGluIHRoaXMuYmluZGVycyl0aGlzLmJpbmRlcnNbaV0ucG9wdWxhdGVQYWludEFycmF5KHQsZSxuLGEpO3ZvaWQgMCE9PWUuaWQmJnRoaXMuX2ZlYXR1cmVNYXAuYWRkKCtlLmlkLHIsdGhpcy5fYnVmZmVyT2Zmc2V0LHQpLHRoaXMuX2J1ZmZlck9mZnNldD10fSxLYS5wcm90b3R5cGUuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHRoaXMuYmluZGVycyl0aGlzLmJpbmRlcnNbcl0uc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHQsZSl9LEthLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT0hMTtmb3IodmFyIGkgaW4gdClmb3IodmFyIG89MCxzPXRoaXMuX2ZlYXR1cmVNYXAuZ2V0UG9zaXRpb25zKCtpKTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1lLmZlYXR1cmUobC5pbmRleCk7Zm9yKHZhciB1IGluIHRoaXMuYmluZGVycyl7dmFyIGg9dGhpcy5iaW5kZXJzW3VdO2lmKCEoaCBpbnN0YW5jZW9mIFlhfHxoIGluc3RhbmNlb2YgV2EpJiYhMD09PWguZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KXt2YXIgZj1yLnBhaW50LmdldCh1KTtoLmV4cHJlc3Npb249Zi52YWx1ZSxoLnVwZGF0ZVBhaW50QXJyYXkobC5zdGFydCxsLmVuZCxjLHRbaV0sbiksYT0hMH19fXJldHVybiBhfSxLYS5wcm90b3R5cGUuZGVmaW5lcz1mdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLmJpbmRlcnMpdC5wdXNoLmFwcGx5KHQsdGhpcy5iaW5kZXJzW2VdLmRlZmluZXMoKSk7cmV0dXJuIHR9LEthLnByb3RvdHlwZS5nZXRQYWludFZlcnRleEJ1ZmZlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVmZmVyc30sS2EucHJvdG90eXBlLmdldFVuaWZvcm1zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107Zm9yKHZhciBuIGluIHRoaXMuYmluZGVycylmb3IodmFyIGE9dGhpcy5iaW5kZXJzW25dLGk9MCxvPWEudW5pZm9ybU5hbWVzO2k8by5sZW5ndGg7aSs9MSl7dmFyIHM9b1tpXTtpZihlW3NdKXt2YXIgbD1hLmdldEJpbmRpbmcodCxlW3NdKTtyLnB1c2goe25hbWU6cyxwcm9wZXJ0eTpuLGJpbmRpbmc6bH0pfX1yZXR1cm4gcn0sS2EucHJvdG90eXBlLnNldFVuaWZvcm1zPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT0wLGk9ZTthPGkubGVuZ3RoO2ErPTEpe3ZhciBvPWlbYV0scz1vLm5hbWUsbD1vLnByb3BlcnR5LGM9by5iaW5kaW5nO3RoaXMuYmluZGVyc1tsXS5zZXRVbmlmb3Jtcyh0LGMsbixyLmdldChsKSxzKX19LEthLnByb3RvdHlwZS51cGRhdGVQYXR0ZXJuUGFpbnRCdWZmZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0aGlzLmJpbmRlcnMpe3ZhciBuPXRoaXMuYmluZGVyc1tyXTtpZihuIGluc3RhbmNlb2YgSmEpe3ZhciBhPTI9PT10LmZyb21TY2FsZT9uLnpvb21JblBhaW50VmVydGV4QnVmZmVyOm4uem9vbU91dFBhaW50VmVydGV4QnVmZmVyO2EmJmUucHVzaChhKX1lbHNlKG4gaW5zdGFuY2VvZiBYYXx8biBpbnN0YW5jZW9mIFphKSYmbi5wYWludFZlcnRleEJ1ZmZlciYmZS5wdXNoKG4ucGFpbnRWZXJ0ZXhCdWZmZXIpfXRoaXMuX2J1ZmZlcnM9ZX0sS2EucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5iaW5kZXJzKXRoaXMuYmluZGVyc1tlXS51cGxvYWQodCk7dmFyIHI9W107Zm9yKHZhciBuIGluIHRoaXMuYmluZGVycyl7dmFyIGE9dGhpcy5iaW5kZXJzW25dOyhhIGluc3RhbmNlb2YgWGF8fGEgaW5zdGFuY2VvZiBaYSkmJmEucGFpbnRWZXJ0ZXhCdWZmZXImJnIucHVzaChhLnBhaW50VmVydGV4QnVmZmVyKX10aGlzLl9idWZmZXJzPXJ9LEthLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuYmluZGVycyl0aGlzLmJpbmRlcnNbdF0uZGVzdHJveSgpfTt2YXIgUWE9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49ZnVuY3Rpb24oKXtyZXR1cm4hMH0pLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPXt9O2Zvcih2YXIgYT0wLGk9ZTthPGkubGVuZ3RoO2ErPTEpe3ZhciBvPWlbYV07dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbby5pZF09S2EuY3JlYXRlRHluYW1pYyhvLHIsbiksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbby5pZF0ubGF5b3V0QXR0cmlidXRlcz10fXRoaXMubmVlZHNVcGxvYWQ9ITF9O2Z1bmN0aW9uICRhKHQsZSl7cmV0dXJueyJ0ZXh0LW9wYWNpdHkiOlsib3BhY2l0eSJdLCJpY29uLW9wYWNpdHkiOlsib3BhY2l0eSJdLCJ0ZXh0LWNvbG9yIjpbImZpbGxfY29sb3IiXSwiaWNvbi1jb2xvciI6WyJmaWxsX2NvbG9yIl0sInRleHQtaGFsby1jb2xvciI6WyJoYWxvX2NvbG9yIl0sImljb24taGFsby1jb2xvciI6WyJoYWxvX2NvbG9yIl0sInRleHQtaGFsby1ibHVyIjpbImhhbG9fYmx1ciJdLCJpY29uLWhhbG8tYmx1ciI6WyJoYWxvX2JsdXIiXSwidGV4dC1oYWxvLXdpZHRoIjpbImhhbG9fd2lkdGgiXSwiaWNvbi1oYWxvLXdpZHRoIjpbImhhbG9fd2lkdGgiXSwibGluZS1nYXAtd2lkdGgiOlsiZ2Fwd2lkdGgiXSwibGluZS1wYXR0ZXJuIjpbInBhdHRlcm5fdG8iLCJwYXR0ZXJuX2Zyb20iXSwiZmlsbC1wYXR0ZXJuIjpbInBhdHRlcm5fdG8iLCJwYXR0ZXJuX2Zyb20iXSwiZmlsbC1leHRydXNpb24tcGF0dGVybiI6WyJwYXR0ZXJuX3RvIiwicGF0dGVybl9mcm9tIl19W3RdfHxbdC5yZXBsYWNlKGUrIi0iLCIiKS5yZXBsYWNlKC8tL2csIl8iKV19ZnVuY3Rpb24gdGkodCxlLHIpe3ZhciBuPXtjb2xvcjp7c291cmNlOm1hLGNvbXBvc2l0ZTp5YX0sbnVtYmVyOntzb3VyY2U6aGEsY29tcG9zaXRlOm1hfX0sYT1mdW5jdGlvbih0KXtyZXR1cm57ImxpbmUtcGF0dGVybiI6e3NvdXJjZTpyYSxjb21wb3NpdGU6cmF9LCJmaWxsLXBhdHRlcm4iOntzb3VyY2U6cmEsY29tcG9zaXRlOnJhfSwiZmlsbC1leHRydXNpb24tcGF0dGVybiI6e3NvdXJjZTpyYSxjb21wb3NpdGU6cmF9fVt0XX0odCk7cmV0dXJuIGEmJmFbcl18fG5bZV1bcl19UWEucHJvdG90eXBlLnBvcHVsYXRlUGFpbnRBcnJheXM9ZnVuY3Rpb24odCxlLHIsbixhKXtmb3IodmFyIGkgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbaV0ucG9wdWxhdGVQYWludEFycmF5cyh0LGUscixuLGEpO3RoaXMubmVlZHNVcGxvYWQ9ITB9LFFhLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGE9MCxpPXI7YTxpLmxlbmd0aDthKz0xKXt2YXIgbz1pW2FdO3RoaXMubmVlZHNVcGxvYWQ9dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbby5pZF0udXBkYXRlUGFpbnRBcnJheXModCxlLG8sbil8fHRoaXMubmVlZHNVcGxvYWR9fSxRYS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1t0XX0sUWEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXtpZih0aGlzLm5lZWRzVXBsb2FkKXtmb3IodmFyIGUgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbZV0udXBsb2FkKHQpO3RoaXMubmVlZHNVcGxvYWQ9ITF9fSxRYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyl0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1t0XS5kZXN0cm95KCl9LGRuKCJDb25zdGFudEJpbmRlciIsWWEpLGRuKCJDcm9zc0ZhZGVkQ29uc3RhbnRCaW5kZXIiLFdhKSxkbigiU291cmNlRXhwcmVzc2lvbkJpbmRlciIsWGEpLGRuKCJDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyIixKYSksZG4oIkNvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIiLFphKSxkbigiUHJvZ3JhbUNvbmZpZ3VyYXRpb24iLEthLHtvbWl0OlsiX2J1ZmZlcnMiXX0pLGRuKCJQcm9ncmFtQ29uZmlndXJhdGlvblNldCIsUWEpO3ZhciBlaT04MTkyLHJpPSgxNSx7bWluOi0xKk1hdGgucG93KDIsMTQpLG1heDpNYXRoLnBvdygyLDE0KS0xfSk7ZnVuY3Rpb24gbmkodCl7Zm9yKHZhciBlPWVpL3QuZXh0ZW50LHI9dC5sb2FkR2VvbWV0cnkoKSxuPTA7bjxyLmxlbmd0aDtuKyspZm9yKHZhciBhPXJbbl0saT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgbz1hW2ldO28ueD1NYXRoLnJvdW5kKG8ueCplKSxvLnk9TWF0aC5yb3VuZChvLnkqZSksKG8ueDxyaS5taW58fG8ueD5yaS5tYXh8fG8ueTxyaS5taW58fG8ueT5yaS5tYXgpJiYodygiR2VvbWV0cnkgZXhjZWVkcyBhbGxvd2VkIGV4dGVudCwgcmVkdWNlIHlvdXIgdmVjdG9yIHRpbGUgYnVmZmVyIHNpemUiKSxvLng9YyhvLngscmkubWluLHJpLm1heCksby55PWMoby55LHJpLm1pbixyaS5tYXgpKX1yZXR1cm4gcn1mdW5jdGlvbiBhaSh0LGUscixuLGEpe3QuZW1wbGFjZUJhY2soMiplKyhuKzEpLzIsMipyKyhhKzEpLzIpfXZhciBpaT1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmhhc1BhdHRlcm49ITEsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgUW4sdGhpcy5pbmRleEFycmF5PW5ldyBkYSx0aGlzLnNlZ21lbnRzPW5ldyBPYSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgUWEoUGEsdC5sYXllcnMsdC56b29tKSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHM9dGhpcy5sYXllcnMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzU3RhdGVEZXBlbmRlbnQoKX0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pfTtmdW5jdGlvbiBvaSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKGdpKGUsdFtyXSkpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoZ2kodCxlW25dKSlyZXR1cm4hMDtyZXR1cm4hIXVpKHQsZSl9ZnVuY3Rpb24gc2kodCxlLHIpe3JldHVybiEhZ2kodCxlKXx8ISFmaShlLHQscil9ZnVuY3Rpb24gbGkodCxlKXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIGRpKGUsdFswXSk7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZm9yKHZhciBuPWVbcl0sYT0wO2E8bi5sZW5ndGg7YSsrKWlmKGdpKHQsblthXSkpcmV0dXJuITA7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspaWYoZGkoZSx0W2ldKSlyZXR1cm4hMDtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKylpZih1aSh0LGVbb10pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGNpKHQsZSxyKXtpZih0Lmxlbmd0aD4xKXtpZih1aSh0LGUpKXJldHVybiEwO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGZpKGVbbl0sdCxyKSlyZXR1cm4hMH1mb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpZihmaSh0W2FdLGUscikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gdWkodCxlKXtpZigwPT09dC5sZW5ndGh8fDA9PT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoLTE7cisrKWZvcih2YXIgbj10W3JdLGE9dFtyKzFdLGk9MDtpPGUubGVuZ3RoLTE7aSsrKWlmKGhpKG4sYSxlW2ldLGVbaSsxXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaGkodCxlLHIsbil7cmV0dXJuIGsodCxyLG4pIT09ayhlLHIsbikmJmsodCxlLHIpIT09ayh0LGUsbil9ZnVuY3Rpb24gZmkodCxlLHIpe3ZhciBuPXIqcjtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHQuZGlzdFNxcihlWzBdKTxuO2Zvcih2YXIgYT0xO2E8ZS5sZW5ndGg7YSsrKWlmKHBpKHQsZVthLTFdLGVbYV0pPG4pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gcGkodCxlLHIpe3ZhciBuPWUuZGlzdFNxcihyKTtpZigwPT09bilyZXR1cm4gdC5kaXN0U3FyKGUpO3ZhciBhPSgodC54LWUueCkqKHIueC1lLngpKyh0LnktZS55KSooci55LWUueSkpL247cmV0dXJuIGE8MD90LmRpc3RTcXIoZSk6YT4xP3QuZGlzdFNxcihyKTp0LmRpc3RTcXIoci5zdWIoZSkuX211bHQoYSkuX2FkZChlKSl9ZnVuY3Rpb24gZGkodCxlKXtmb3IodmFyIHIsbixhLGk9ITEsbz0wO288dC5sZW5ndGg7bysrKWZvcih2YXIgcz0wLGw9KHI9dFtvXSkubGVuZ3RoLTE7czxyLmxlbmd0aDtsPXMrKyluPXJbc10sYT1yW2xdLG4ueT5lLnkhPWEueT5lLnkmJmUueDwoYS54LW4ueCkqKGUueS1uLnkpLyhhLnktbi55KStuLngmJihpPSFpKTtyZXR1cm4gaX1mdW5jdGlvbiBnaSh0LGUpe2Zvcih2YXIgcj0hMSxuPTAsYT10Lmxlbmd0aC0xO248dC5sZW5ndGg7YT1uKyspe3ZhciBpPXRbbl0sbz10W2FdO2kueT5lLnkhPW8ueT5lLnkmJmUueDwoby54LWkueCkqKGUueS1pLnkpLyhvLnktaS55KStpLngmJihyPSFyKX1yZXR1cm4gcn1mdW5jdGlvbiB2aSh0LGUscil7dmFyIG49clswXSxhPXJbMl07aWYodC54PG4ueCYmZS54PG4ueHx8dC54PmEueCYmZS54PmEueHx8dC55PG4ueSYmZS55PG4ueXx8dC55PmEueSYmZS55PmEueSlyZXR1cm4hMTt2YXIgaT1rKHQsZSxyWzBdKTtyZXR1cm4gaSE9PWsodCxlLHJbMV0pfHxpIT09ayh0LGUsclsyXSl8fGkhPT1rKHQsZSxyWzNdKX1mdW5jdGlvbiBtaSh0LGUscil7dmFyIG49ZS5wYWludC5nZXQodCkudmFsdWU7cmV0dXJuImNvbnN0YW50Ij09PW4ua2luZD9uLnZhbHVlOnIucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChlLmlkKS5iaW5kZXJzW3RdLm1heFZhbHVlfWZ1bmN0aW9uIHlpKHQpe3JldHVybiBNYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSl9ZnVuY3Rpb24geGkodCxlLHIsbixpKXtpZighZVswXSYmIWVbMV0pcmV0dXJuIHQ7dmFyIG89YS5jb252ZXJ0KGUpLl9tdWx0KGkpOyJ2aWV3cG9ydCI9PT1yJiZvLl9yb3RhdGUoLW4pO2Zvcih2YXIgcz1bXSxsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPXRbbF07cy5wdXNoKGMuc3ViKG8pKX1yZXR1cm4gc31paS5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheWVyc1swXSxuPVtdLGE9bnVsbDsiY2lyY2xlIj09PXIudHlwZSYmKGE9ci5sYXlvdXQuZ2V0KCJjaXJjbGUtc29ydC1rZXkiKSk7Zm9yKHZhciBpPTAsbz10O2k8by5sZW5ndGg7aSs9MSl7dmFyIHM9b1tpXSxsPXMuZmVhdHVyZSxjPXMuaW5kZXgsdT1zLnNvdXJjZUxheWVySW5kZXg7aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIobmV3IFBuKHRoaXMuem9vbSksbCkpe3ZhciBoPW5pKGwpLGY9YT9hLmV2YWx1YXRlKGwse30pOnZvaWQgMCxwPXtpZDpsLmlkLHByb3BlcnRpZXM6bC5wcm9wZXJ0aWVzLHR5cGU6bC50eXBlLHNvdXJjZUxheWVySW5kZXg6dSxpbmRleDpjLGdlb21ldHJ5OmgscGF0dGVybnM6e30sc29ydEtleTpmfTtuLnB1c2gocCl9fWEmJm4uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNvcnRLZXktZS5zb3J0S2V5fSk7Zm9yKHZhciBkPTAsZz1uO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIHY9Z1tkXSxtPXYseT1tLmdlb21ldHJ5LHg9bS5pbmRleCxiPW0uc291cmNlTGF5ZXJJbmRleCxfPXRbeF0uZmVhdHVyZTt0aGlzLmFkZEZlYXR1cmUodix5LHgpLGUuZmVhdHVyZUluZGV4Lmluc2VydChfLHkseCxiLHRoaXMuaW5kZXgpfX0saWkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgmJnRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLHIpfSxpaS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LGlpLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfSxpaS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMudXBsb2FkZWR8fCh0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LFBhKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpLHRoaXMudXBsb2FkZWQ9ITB9LGlpLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0saWkucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGE9ZTtuPGEubGVuZ3RoO24rPTEpZm9yKHZhciBpPTAsbz1hW25dO2k8by5sZW5ndGg7aSs9MSl7dmFyIHM9b1tpXSxsPXMueCxjPXMueTtpZighKGw8MHx8bD49ZWl8fGM8MHx8Yz49ZWkpKXt2YXIgdT10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXksdC5zb3J0S2V5KSxoPXUudmVydGV4TGVuZ3RoO2FpKHRoaXMubGF5b3V0VmVydGV4QXJyYXksbCxjLC0xLC0xKSxhaSh0aGlzLmxheW91dFZlcnRleEFycmF5LGwsYywxLC0xKSxhaSh0aGlzLmxheW91dFZlcnRleEFycmF5LGwsYywxLDEpLGFpKHRoaXMubGF5b3V0VmVydGV4QXJyYXksbCxjLC0xLDEpLHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhoLGgrMSxoKzIpLHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhoLGgrMyxoKzIpLHUudmVydGV4TGVuZ3RoKz00LHUucHJpbWl0aXZlTGVuZ3RoKz0yfX10aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQscix7fSl9LGRuKCJDaXJjbGVCdWNrZXQiLGlpLHtvbWl0OlsibGF5ZXJzIl19KTt2YXIgYmksX2k9bmV3IEduKHsiY2lyY2xlLXNvcnQta2V5IjpuZXcgVm4oVHQubGF5b3V0X2NpcmNsZVsiY2lyY2xlLXNvcnQta2V5Il0pfSksd2k9e3BhaW50Om5ldyBHbih7ImNpcmNsZS1yYWRpdXMiOm5ldyBWbihUdC5wYWludF9jaXJjbGVbImNpcmNsZS1yYWRpdXMiXSksImNpcmNsZS1jb2xvciI6bmV3IFZuKFR0LnBhaW50X2NpcmNsZVsiY2lyY2xlLWNvbG9yIl0pLCJjaXJjbGUtYmx1ciI6bmV3IFZuKFR0LnBhaW50X2NpcmNsZVsiY2lyY2xlLWJsdXIiXSksImNpcmNsZS1vcGFjaXR5IjpuZXcgVm4oVHQucGFpbnRfY2lyY2xlWyJjaXJjbGUtb3BhY2l0eSJdKSwiY2lyY2xlLXRyYW5zbGF0ZSI6bmV3IGpuKFR0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXRyYW5zbGF0ZSJdKSwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyBqbihUdC5wYWludF9jaXJjbGVbImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yIl0pLCJjaXJjbGUtcGl0Y2gtc2NhbGUiOm5ldyBqbihUdC5wYWludF9jaXJjbGVbImNpcmNsZS1waXRjaC1zY2FsZSJdKSwiY2lyY2xlLXBpdGNoLWFsaWdubWVudCI6bmV3IGpuKFR0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXBpdGNoLWFsaWdubWVudCJdKSwiY2lyY2xlLXN0cm9rZS13aWR0aCI6bmV3IFZuKFR0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXN0cm9rZS13aWR0aCJdKSwiY2lyY2xlLXN0cm9rZS1jb2xvciI6bmV3IFZuKFR0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXN0cm9rZS1jb2xvciJdKSwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5IjpuZXcgVm4oVHQucGFpbnRfY2lyY2xlWyJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiXSl9KSxsYXlvdXQ6X2l9LGtpPSJ1bmRlZmluZWQiIT10eXBlb2YgRmxvYXQzMkFycmF5P0Zsb2F0MzJBcnJheTpBcnJheTtmdW5jdGlvbiBUaSh0LGUscil7dmFyIG49ZVswXSxhPWVbMV0saT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSphK3JbOF0qaStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qYStyWzldKmkrclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmErclsxMF0qaStyWzE0XSpvLHRbM109clszXSpuK3JbN10qYStyWzExXSppK3JbMTVdKm8sdH1NYXRoLmh5cG90fHwoTWF0aC5oeXBvdD1mdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMsZT0wLHI9YXJndW1lbnRzLmxlbmd0aDtyLS07KWUrPXRbcl0qdFtyXTtyZXR1cm4gTWF0aC5zcXJ0KGUpfSksYmk9bmV3IGtpKDMpLGtpIT1GbG9hdDMyQXJyYXkmJihiaVswXT0wLGJpWzFdPTAsYmlbMl09MCksZnVuY3Rpb24oKXt2YXIgdD1uZXcga2koNCk7a2khPUZsb2F0MzJBcnJheSYmKHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MCl9KCk7dmFyIE1pPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSx3aSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGlpKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbih0KXt2YXIgZT10O3JldHVybiBtaSgiY2lyY2xlLXJhZGl1cyIsdGhpcyxlKSttaSgiY2lyY2xlLXN0cm9rZS13aWR0aCIsdGhpcyxlKSt5aSh0aGlzLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZSIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGEsaSxvLHMpe2Zvcih2YXIgbD14aSh0LHRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtdHJhbnNsYXRlIiksdGhpcy5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yIiksaS5hbmdsZSxvKSxjPXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcmFkaXVzIikuZXZhbHVhdGUoZSxyKSt0aGlzLnBhaW50LmdldCgiY2lyY2xlLXN0cm9rZS13aWR0aCIpLmV2YWx1YXRlKGUsciksdT0ibWFwIj09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50IiksaD11P2w6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEFpKHQsZSl9KX0oMCxzKSxmPXU/YypvOmMscD0wLGQ9bjtwPGQubGVuZ3RoO3ArPTEpZm9yKHZhciBnPTAsdj1kW3BdO2c8di5sZW5ndGg7Zys9MSl7dmFyIG09dltnXSx5PXU/bTpBaShtLHMpLHg9ZixiPVRpKFtdLFttLngsbS55LDAsMV0scyk7aWYoInZpZXdwb3J0Ij09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtc2NhbGUiKSYmIm1hcCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLWFsaWdubWVudCIpP3gqPWJbM10vaS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlOiJtYXAiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1zY2FsZSIpJiYidmlld3BvcnQiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiKSYmKHgqPWkuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9iWzNdKSxzaShoLHkseCkpcmV0dXJuITB9cmV0dXJuITF9LGV9KFluKTtmdW5jdGlvbiBBaSh0LGUpe3ZhciByPVRpKFtdLFt0LngsdC55LDAsMV0sZSk7cmV0dXJuIG5ldyBhKHJbMF0vclszXSxyWzFdL3JbM10pfXZhciBTaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KGlpKTtmdW5jdGlvbiBFaSh0LGUscixuKXt2YXIgYT1lLndpZHRoLGk9ZS5oZWlnaHQ7aWYobil7aWYobiBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KW49bmV3IFVpbnQ4QXJyYXkobi5idWZmZXIpO2Vsc2UgaWYobi5sZW5ndGghPT1hKmkqcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigibWlzbWF0Y2hlZCBpbWFnZSBzaXplIil9ZWxzZSBuPW5ldyBVaW50OEFycmF5KGEqaSpyKTtyZXR1cm4gdC53aWR0aD1hLHQuaGVpZ2h0PWksdC5kYXRhPW4sdH1mdW5jdGlvbiBMaSh0LGUscil7dmFyIG49ZS53aWR0aCxhPWUuaGVpZ2h0O2lmKG4hPT10LndpZHRofHxhIT09dC5oZWlnaHQpe3ZhciBpPUVpKHt9LHt3aWR0aDpuLGhlaWdodDphfSxyKTtDaSh0LGkse3g6MCx5OjB9LHt4OjAseTowfSx7d2lkdGg6TWF0aC5taW4odC53aWR0aCxuKSxoZWlnaHQ6TWF0aC5taW4odC5oZWlnaHQsYSl9LHIpLHQud2lkdGg9bix0LmhlaWdodD1hLHQuZGF0YT1pLmRhdGF9fWZ1bmN0aW9uIENpKHQsZSxyLG4sYSxpKXtpZigwPT09YS53aWR0aHx8MD09PWEuaGVpZ2h0KXJldHVybiBlO2lmKGEud2lkdGg+dC53aWR0aHx8YS5oZWlnaHQ+dC5oZWlnaHR8fHIueD50LndpZHRoLWEud2lkdGh8fHIueT50LmhlaWdodC1hLmhlaWdodCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIHNvdXJjZSBjb29yZGluYXRlcyBmb3IgaW1hZ2UgY29weSIpO2lmKGEud2lkdGg+ZS53aWR0aHx8YS5oZWlnaHQ+ZS5oZWlnaHR8fG4ueD5lLndpZHRoLWEud2lkdGh8fG4ueT5lLmhlaWdodC1hLmhlaWdodCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGRlc3RpbmF0aW9uIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5Iik7Zm9yKHZhciBvPXQuZGF0YSxzPWUuZGF0YSxsPTA7bDxhLmhlaWdodDtsKyspZm9yKHZhciBjPSgoci55K2wpKnQud2lkdGgrci54KSppLHU9KChuLnkrbCkqZS53aWR0aCtuLngpKmksaD0wO2g8YS53aWR0aCppO2grKylzW3UraF09b1tjK2hdO3JldHVybiBlfWRuKCJIZWF0bWFwQnVja2V0IixTaSx7b21pdDpbImxheWVycyJdfSk7dmFyIFBpPWZ1bmN0aW9uKHQsZSl7RWkodGhpcyx0LDEsZSl9O1BpLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7TGkodGhpcyx0LDEpfSxQaS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBpKHt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH0sbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSl9LFBpLmNvcHk9ZnVuY3Rpb24odCxlLHIsbixhKXtDaSh0LGUscixuLGEsMSl9O3ZhciBPaT1mdW5jdGlvbih0LGUpe0VpKHRoaXMsdCw0LGUpfTtPaS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe0xpKHRoaXMsdCw0KX0sT2kucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24odCxlKXtlP3RoaXMuZGF0YS5zZXQodCk6dCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P3RoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcik6dGhpcy5kYXRhPXR9LE9pLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgT2koe3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKX0sT2kuY29weT1mdW5jdGlvbih0LGUscixuLGEpe0NpKHQsZSxyLG4sYSw0KX0sZG4oIkFscGhhSW1hZ2UiLFBpKSxkbigiUkdCQUltYWdlIixPaSk7dmFyIHppPXtwYWludDpuZXcgR24oeyJoZWF0bWFwLXJhZGl1cyI6bmV3IFZuKFR0LnBhaW50X2hlYXRtYXBbImhlYXRtYXAtcmFkaXVzIl0pLCJoZWF0bWFwLXdlaWdodCI6bmV3IFZuKFR0LnBhaW50X2hlYXRtYXBbImhlYXRtYXAtd2VpZ2h0Il0pLCJoZWF0bWFwLWludGVuc2l0eSI6bmV3IGpuKFR0LnBhaW50X2hlYXRtYXBbImhlYXRtYXAtaW50ZW5zaXR5Il0pLCJoZWF0bWFwLWNvbG9yIjpuZXcgSG4oVHQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1jb2xvciJdKSwiaGVhdG1hcC1vcGFjaXR5IjpuZXcgam4oVHQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1vcGFjaXR5Il0pfSl9O2Z1bmN0aW9uIElpKHQsZSl7Zm9yKHZhciByPW5ldyBVaW50OEFycmF5KDEwMjQpLG49e30sYT0wLGk9MDthPDI1NjthKyssaSs9NCl7bltlXT1hLzI1NTt2YXIgbz10LmV2YWx1YXRlKG4pO3JbaSswXT1NYXRoLmZsb29yKDI1NSpvLnIvby5hKSxyW2krMV09TWF0aC5mbG9vcigyNTUqby5nL28uYSkscltpKzJdPU1hdGguZmxvb3IoMjU1Km8uYi9vLmEpLHJbaSszXT1NYXRoLmZsb29yKDI1NSpvLmEpfXJldHVybiBuZXcgT2koe3dpZHRoOjI1NixoZWlnaHQ6MX0scil9dmFyIERpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSx6aSksdGhpcy5fdXBkYXRlQ29sb3JSYW1wKCl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFNpKHQpfSxlLnByb3RvdHlwZS5faGFuZGxlU3BlY2lhbFBhaW50UHJvcGVydHlVcGRhdGU9ZnVuY3Rpb24odCl7ImhlYXRtYXAtY29sb3IiPT09dCYmdGhpcy5fdXBkYXRlQ29sb3JSYW1wKCl9LGUucHJvdG90eXBlLl91cGRhdGVDb2xvclJhbXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbImhlYXRtYXAtY29sb3IiXS52YWx1ZS5leHByZXNzaW9uO3RoaXMuY29sb3JSYW1wPUlpKHQsImhlYXRtYXBEZW5zaXR5IiksdGhpcy5jb2xvclJhbXBUZXh0dXJlPW51bGx9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe3RoaXMuaGVhdG1hcEZibyYmKHRoaXMuaGVhdG1hcEZiby5kZXN0cm95KCksdGhpcy5oZWF0bWFwRmJvPW51bGwpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiAwfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMucGFpbnQuZ2V0KCJoZWF0bWFwLW9wYWNpdHkiKSYmIm5vbmUiIT09dGhpcy52aXNpYmlsaXR5fSxlfShZbiksUmk9e3BhaW50Om5ldyBHbih7ImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIjpuZXcgam4oVHQucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvbiJdKSwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3IiOm5ldyBqbihUdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yIl0pLCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uIjpuZXcgam4oVHQucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uIl0pLCJoaWxsc2hhZGUtc2hhZG93LWNvbG9yIjpuZXcgam4oVHQucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtc2hhZG93LWNvbG9yIl0pLCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yIjpuZXcgam4oVHQucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yIl0pLCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yIjpuZXcgam4oVHQucGFpbnRfaGlsbHNoYWRlWyJoaWxsc2hhZGUtYWNjZW50LWNvbG9yIl0pfSl9LEZpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxSaSl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMucGFpbnQuZ2V0KCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uIikmJiJub25lIiE9PXRoaXMudmlzaWJpbGl0eX0sZX0oWW4pLEJpPUpuKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSw0KS5tZW1iZXJzLE5pPVZpLGppPVZpO2Z1bmN0aW9uIFZpKHQsZSxyKXtyPXJ8fDI7dmFyIG4sYSxpLG8scyxsLGMsdT1lJiZlLmxlbmd0aCxoPXU/ZVswXSpyOnQubGVuZ3RoLGY9VWkodCwwLGgsciwhMCkscD1bXTtpZighZnx8Zi5uZXh0PT09Zi5wcmV2KXJldHVybiBwO2lmKHUmJihmPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGksbyxzPVtdO2ZvcihhPTAsaT1lLmxlbmd0aDthPGk7YSsrKShvPVVpKHQsZVthXSpuLGE8aS0xP2VbYSsxXSpuOnQubGVuZ3RoLG4sITEpKT09PW8ubmV4dCYmKG8uc3RlaW5lcj0hMCkscy5wdXNoKCRpKG8pKTtmb3Iocy5zb3J0KFppKSxhPTA7YTxzLmxlbmd0aDthKyspSmkoc1thXSxyKSxyPXFpKHIsci5uZXh0KTtyZXR1cm4gcn0odCxlLGYscikpLHQubGVuZ3RoPjgwKnIpe249aT10WzBdLGE9bz10WzFdO2Zvcih2YXIgZD1yO2Q8aDtkKz1yKShzPXRbZF0pPG4mJihuPXMpLChsPXRbZCsxXSk8YSYmKGE9bCkscz5pJiYoaT1zKSxsPm8mJihvPWwpO2M9MCE9PShjPU1hdGgubWF4KGktbixvLWEpKT8xL2M6MH1yZXR1cm4gSGkoZixwLHIsbixhLGMpLHB9ZnVuY3Rpb24gVWkodCxlLHIsbixhKXt2YXIgaSxvO2lmKGE9PT1mbyh0LGUscixuKT4wKWZvcihpPWU7aTxyO2krPW4pbz1jbyhpLHRbaV0sdFtpKzFdLG8pO2Vsc2UgZm9yKGk9ci1uO2k+PWU7aS09bilvPWNvKGksdFtpXSx0W2krMV0sbyk7cmV0dXJuIG8mJm5vKG8sby5uZXh0KSYmKHVvKG8pLG89by5uZXh0KSxvfWZ1bmN0aW9uIHFpKHQsZSl7aWYoIXQpcmV0dXJuIHQ7ZXx8KGU9dCk7dmFyIHIsbj10O2Rve2lmKHI9ITEsbi5zdGVpbmVyfHwhbm8obixuLm5leHQpJiYwIT09cm8obi5wcmV2LG4sbi5uZXh0KSluPW4ubmV4dDtlbHNle2lmKHVvKG4pLChuPWU9bi5wcmV2KT09PW4ubmV4dClicmVhaztyPSEwfX13aGlsZShyfHxuIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gSGkodCxlLHIsbixhLGksbyl7aWYodCl7IW8mJmkmJmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXQ7ZG97bnVsbD09PWEueiYmKGEuej1RaShhLngsYS55LGUscixuKSksYS5wcmV2Wj1hLnByZXYsYS5uZXh0Wj1hLm5leHQsYT1hLm5leHR9d2hpbGUoYSE9PXQpO2EucHJldloubmV4dFo9bnVsbCxhLnByZXZaPW51bGwsZnVuY3Rpb24odCl7dmFyIGUscixuLGEsaSxvLHMsbCxjPTE7ZG97Zm9yKHI9dCx0PW51bGwsaT1udWxsLG89MDtyOyl7Zm9yKG8rKyxuPXIscz0wLGU9MDtlPGMmJihzKyssbj1uLm5leHRaKTtlKyspO2ZvcihsPWM7cz4wfHxsPjAmJm47KTAhPT1zJiYoMD09PWx8fCFufHxyLno8PW4ueik/KGE9cixyPXIubmV4dFoscy0tKTooYT1uLG49bi5uZXh0WixsLS0pLGk/aS5uZXh0Wj1hOnQ9YSxhLnByZXZaPWksaT1hO3I9bn1pLm5leHRaPW51bGwsYyo9Mn13aGlsZShvPjEpfShhKX0odCxuLGEsaSk7Zm9yKHZhciBzLGwsYz10O3QucHJldiE9PXQubmV4dDspaWYocz10LnByZXYsbD10Lm5leHQsaT9ZaSh0LG4sYSxpKTpHaSh0KSllLnB1c2gocy5pL3IpLGUucHVzaCh0LmkvciksZS5wdXNoKGwuaS9yKSx1byh0KSx0PWwubmV4dCxjPWwubmV4dDtlbHNlIGlmKCh0PWwpPT09Yyl7bz8xPT09bz9IaSh0PVdpKHFpKHQpLGUsciksZSxyLG4sYSxpLDIpOjI9PT1vJiZYaSh0LGUscixuLGEsaSk6SGkocWkodCksZSxyLG4sYSxpLDEpO2JyZWFrfX19ZnVuY3Rpb24gR2kodCl7dmFyIGU9dC5wcmV2LHI9dCxuPXQubmV4dDtpZihybyhlLHIsbik+PTApcmV0dXJuITE7Zm9yKHZhciBhPXQubmV4dC5uZXh0O2EhPT10LnByZXY7KXtpZih0byhlLngsZS55LHIueCxyLnksbi54LG4ueSxhLngsYS55KSYmcm8oYS5wcmV2LGEsYS5uZXh0KT49MClyZXR1cm4hMTthPWEubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBZaSh0LGUscixuKXt2YXIgYT10LnByZXYsaT10LG89dC5uZXh0O2lmKHJvKGEsaSxvKT49MClyZXR1cm4hMTtmb3IodmFyIHM9YS54PGkueD9hLng8by54P2EueDpvLng6aS54PG8ueD9pLng6by54LGw9YS55PGkueT9hLnk8by55P2EueTpvLnk6aS55PG8ueT9pLnk6by55LGM9YS54PmkueD9hLng+by54P2EueDpvLng6aS54Pm8ueD9pLng6by54LHU9YS55PmkueT9hLnk+by55P2EueTpvLnk6aS55Pm8ueT9pLnk6by55LGg9UWkocyxsLGUscixuKSxmPVFpKGMsdSxlLHIsbikscD10LnByZXZaLGQ9dC5uZXh0WjtwJiZwLno+PWgmJmQmJmQuejw9Zjspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJnRvKGEueCxhLnksaS54LGkueSxvLngsby55LHAueCxwLnkpJiZybyhwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO2lmKHA9cC5wcmV2WixkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZ0byhhLngsYS55LGkueCxpLnksby54LG8ueSxkLngsZC55KSYmcm8oZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQubmV4dFp9Zm9yKDtwJiZwLno+PWg7KXtpZihwIT09dC5wcmV2JiZwIT09dC5uZXh0JiZ0byhhLngsYS55LGkueCxpLnksby54LG8ueSxwLngscC55KSYmcm8ocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtwPXAucHJldlp9Zm9yKDtkJiZkLno8PWY7KXtpZihkIT09dC5wcmV2JiZkIT09dC5uZXh0JiZ0byhhLngsYS55LGkueCxpLnksby54LG8ueSxkLngsZC55KSYmcm8oZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gV2kodCxlLHIpe3ZhciBuPXQ7ZG97dmFyIGE9bi5wcmV2LGk9bi5uZXh0Lm5leHQ7IW5vKGEsaSkmJmFvKGEsbixuLm5leHQsaSkmJnNvKGEsaSkmJnNvKGksYSkmJihlLnB1c2goYS5pL3IpLGUucHVzaChuLmkvciksZS5wdXNoKGkuaS9yKSx1byhuKSx1byhuLm5leHQpLG49dD1pKSxuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuIHFpKG4pfWZ1bmN0aW9uIFhpKHQsZSxyLG4sYSxpKXt2YXIgbz10O2Rve2Zvcih2YXIgcz1vLm5leHQubmV4dDtzIT09by5wcmV2Oyl7aWYoby5pIT09cy5pJiZlbyhvLHMpKXt2YXIgbD1sbyhvLHMpO3JldHVybiBvPXFpKG8sby5uZXh0KSxsPXFpKGwsbC5uZXh0KSxIaShvLGUscixuLGEsaSksdm9pZCBIaShsLGUscixuLGEsaSl9cz1zLm5leHR9bz1vLm5leHR9d2hpbGUobyE9PXQpfWZ1bmN0aW9uIFppKHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gSmkodCxlKXtpZihlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGE9dC54LGk9dC55LG89LTEvMDtkb3tpZihpPD1uLnkmJmk+PW4ubmV4dC55JiZuLm5leHQueSE9PW4ueSl7dmFyIHM9bi54KyhpLW4ueSkqKG4ubmV4dC54LW4ueCkvKG4ubmV4dC55LW4ueSk7aWYoczw9YSYmcz5vKXtpZihvPXMscz09PWEpe2lmKGk9PT1uLnkpcmV0dXJuIG47aWYoaT09PW4ubmV4dC55KXJldHVybiBuLm5leHR9cj1uLng8bi5uZXh0Lng/bjpuLm5leHR9fW49bi5uZXh0fXdoaWxlKG4hPT1lKTtpZighcilyZXR1cm4gbnVsbDtpZihhPT09bylyZXR1cm4gcjt2YXIgbCxjPXIsdT1yLngsaD1yLnksZj0xLzA7bj1yO2Rve2E+PW4ueCYmbi54Pj11JiZhIT09bi54JiZ0byhpPGg/YTpvLGksdSxoLGk8aD9vOmEsaSxuLngsbi55KSYmKGw9TWF0aC5hYnMoaS1uLnkpLyhhLW4ueCksc28obix0KSYmKGw8Znx8bD09PWYmJihuLng+ci54fHxuLng9PT1yLngmJktpKHIsbikpKSYmKHI9bixmPWwpKSxuPW4ubmV4dH13aGlsZShuIT09Yyk7cmV0dXJuIHJ9KHQsZSkpe3ZhciByPWxvKGUsdCk7cWkocixyLm5leHQpfX1mdW5jdGlvbiBLaSh0LGUpe3JldHVybiBybyh0LnByZXYsdCxlLnByZXYpPDAmJnJvKGUubmV4dCx0LHQubmV4dCk8MH1mdW5jdGlvbiBRaSh0LGUscixuLGEpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtcikqYSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGU9MzI3NjcqKGUtbikqYSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfWZ1bmN0aW9uICRpKHQpe3ZhciBlPXQscj10O2RveyhlLng8ci54fHxlLng9PT1yLngmJmUueTxyLnkpJiYocj1lKSxlPWUubmV4dH13aGlsZShlIT09dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gdG8odCxlLHIsbixhLGksbyxzKXtyZXR1cm4oYS1vKSooZS1zKS0odC1vKSooaS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihpLXMpLShhLW8pKihuLXMpPj0wfWZ1bmN0aW9uIGVvKHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIWZ1bmN0aW9uKHQsZSl7dmFyIHI9dDtkb3tpZihyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZhbyhyLHIubmV4dCx0LGUpKXJldHVybiEwO3I9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4hMX0odCxlKSYmKHNvKHQsZSkmJnNvKGUsdCkmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9dCxuPSExLGE9KHQueCtlLngpLzIsaT0odC55K2UueSkvMjtkb3tyLnk+aSE9ci5uZXh0Lnk+aSYmci5uZXh0LnkhPT1yLnkmJmE8KHIubmV4dC54LXIueCkqKGktci55KS8oci5uZXh0Lnktci55KStyLngmJihuPSFuKSxyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuIG59KHQsZSkmJihybyh0LnByZXYsdCxlLnByZXYpfHxybyh0LGUucHJldixlKSl8fG5vKHQsZSkmJnJvKHQucHJldix0LHQubmV4dCk+MCYmcm8oZS5wcmV2LGUsZS5uZXh0KT4wKX1mdW5jdGlvbiBybyh0LGUscil7cmV0dXJuKGUueS10LnkpKihyLngtZS54KS0oZS54LXQueCkqKHIueS1lLnkpfWZ1bmN0aW9uIG5vKHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIGFvKHQsZSxyLG4pe3ZhciBhPW9vKHJvKHQsZSxyKSksaT1vbyhybyh0LGUsbikpLG89b28ocm8ocixuLHQpKSxzPW9vKHJvKHIsbixlKSk7cmV0dXJuIGEhPT1pJiZvIT09c3x8ISgwIT09YXx8IWlvKHQscixlKSl8fCEoMCE9PWl8fCFpbyh0LG4sZSkpfHwhKDAhPT1vfHwhaW8ocix0LG4pKXx8ISgwIT09c3x8IWlvKHIsZSxuKSl9ZnVuY3Rpb24gaW8odCxlLHIpe3JldHVybiBlLng8PU1hdGgubWF4KHQueCxyLngpJiZlLng+PU1hdGgubWluKHQueCxyLngpJiZlLnk8PU1hdGgubWF4KHQueSxyLnkpJiZlLnk+PU1hdGgubWluKHQueSxyLnkpfWZ1bmN0aW9uIG9vKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBzbyh0LGUpe3JldHVybiBybyh0LnByZXYsdCx0Lm5leHQpPDA/cm8odCxlLHQubmV4dCk+PTAmJnJvKHQsdC5wcmV2LGUpPj0wOnJvKHQsZSx0LnByZXYpPDB8fHJvKHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gbG8odCxlKXt2YXIgcj1uZXcgaG8odC5pLHQueCx0LnkpLG49bmV3IGhvKGUuaSxlLngsZS55KSxhPXQubmV4dCxpPWUucHJldjtyZXR1cm4gdC5uZXh0PWUsZS5wcmV2PXQsci5uZXh0PWEsYS5wcmV2PXIsbi5uZXh0PXIsci5wcmV2PW4saS5uZXh0PW4sbi5wcmV2PWksbn1mdW5jdGlvbiBjbyh0LGUscixuKXt2YXIgYT1uZXcgaG8odCxlLHIpO3JldHVybiBuPyhhLm5leHQ9bi5uZXh0LGEucHJldj1uLG4ubmV4dC5wcmV2PWEsbi5uZXh0PWEpOihhLnByZXY9YSxhLm5leHQ9YSksYX1mdW5jdGlvbiB1byh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIGhvKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBmbyh0LGUscixuKXtmb3IodmFyIGE9MCxpPWUsbz1yLW47aTxyO2krPW4pYSs9KHRbb10tdFtpXSkqKHRbaSsxXSt0W28rMV0pLG89aTtyZXR1cm4gYX1mdW5jdGlvbiBwbyh0LGUscixuLGEpeyFmdW5jdGlvbiB0KGUscixuLGEsaSl7Zm9yKDthPm47KXtpZihhLW4+NjAwKXt2YXIgbz1hLW4rMSxzPXItbisxLGw9TWF0aC5sb2cobyksYz0uNSpNYXRoLmV4cCgyKmwvMyksdT0uNSpNYXRoLnNxcnQobCpjKihvLWMpL28pKihzLW8vMjwwPy0xOjEpO3QoZSxyLE1hdGgubWF4KG4sTWF0aC5mbG9vcihyLXMqYy9vK3UpKSxNYXRoLm1pbihhLE1hdGguZmxvb3Iocisoby1zKSpjL28rdSkpLGkpfXZhciBoPWVbcl0sZj1uLHA9YTtmb3IoZ28oZSxuLHIpLGkoZVthXSxoKT4wJiZnbyhlLG4sYSk7ZjxwOyl7Zm9yKGdvKGUsZixwKSxmKysscC0tO2koZVtmXSxoKTwwOylmKys7Zm9yKDtpKGVbcF0saCk+MDspcC0tfTA9PT1pKGVbbl0saCk/Z28oZSxuLHApOmdvKGUsKytwLGEpLHA8PXImJihuPXArMSkscjw9cCYmKGE9cC0xKX19KHQsZSxyfHwwLG58fHQubGVuZ3RoLTEsYXx8dm8pfWZ1bmN0aW9uIGdvKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gdm8odCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gbW8odCxlKXt2YXIgcj10Lmxlbmd0aDtpZihyPD0xKXJldHVyblt0XTtmb3IodmFyIG4sYSxpPVtdLG89MDtvPHI7bysrKXt2YXIgcz1UKHRbb10pOzAhPT1zJiYodFtvXS5hcmVhPU1hdGguYWJzKHMpLHZvaWQgMD09PWEmJihhPXM8MCksYT09PXM8MD8obiYmaS5wdXNoKG4pLG49W3Rbb11dKTpuLnB1c2godFtvXSkpfWlmKG4mJmkucHVzaChuKSxlPjEpZm9yKHZhciBsPTA7bDxpLmxlbmd0aDtsKyspaVtsXS5sZW5ndGg8PWV8fChwbyhpW2xdLGUsMSxpW2xdLmxlbmd0aC0xLHlvKSxpW2xdPWlbbF0uc2xpY2UoMCxlKSk7cmV0dXJuIGl9ZnVuY3Rpb24geW8odCxlKXtyZXR1cm4gZS5hcmVhLXQuYXJlYX1mdW5jdGlvbiB4byh0LGUscil7Zm9yKHZhciBuPXIucGF0dGVybkRlcGVuZGVuY2llcyxhPSExLGk9MCxvPWU7aTxvLmxlbmd0aDtpKz0xKXt2YXIgcz1vW2ldLnBhaW50LmdldCh0KyItcGF0dGVybiIpO3MuaXNDb25zdGFudCgpfHwoYT0hMCk7dmFyIGw9cy5jb25zdGFudE9yKG51bGwpO2wmJihhPSEwLG5bbC50b109ITAsbltsLmZyb21dPSEwKX1yZXR1cm4gYX1mdW5jdGlvbiBibyh0LGUscixuLGEpe2Zvcih2YXIgaT1hLnBhdHRlcm5EZXBlbmRlbmNpZXMsbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1sLnBhaW50LmdldCh0KyItcGF0dGVybiIpLnZhbHVlO2lmKCJjb25zdGFudCIhPT1jLmtpbmQpe3ZhciB1PWMuZXZhbHVhdGUoe3pvb206bi0xfSxyLHt9KSxoPWMuZXZhbHVhdGUoe3pvb206bn0scix7fSksZj1jLmV2YWx1YXRlKHt6b29tOm4rMX0scix7fSk7aVt1XT0hMCxpW2hdPSEwLGlbZl09ITAsci5wYXR0ZXJuc1tsLmlkXT17bWluOnUsbWlkOmgsbWF4OmZ9fX1yZXR1cm4gcn1WaS5kZXZpYXRpb249ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9ZSYmZS5sZW5ndGgsaT1hP2VbMF0qcjp0Lmxlbmd0aCxvPU1hdGguYWJzKGZvKHQsMCxpLHIpKTtpZihhKWZvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9ZVtzXSpyLHU9czxsLTE/ZVtzKzFdKnI6dC5sZW5ndGg7by09TWF0aC5hYnMoZm8odCxjLHUscikpfXZhciBoPTA7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrPTMpe3ZhciBmPW5bc10qcixwPW5bcysxXSpyLGQ9bltzKzJdKnI7aCs9TWF0aC5hYnMoKHRbZl0tdFtkXSkqKHRbcCsxXS10W2YrMV0pLSh0W2ZdLXRbcF0pKih0W2QrMV0tdFtmKzFdKSl9cmV0dXJuIDA9PT1vJiYwPT09aD8wOk1hdGguYWJzKChoLW8pL28pfSxWaS5mbGF0dGVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdWzBdLmxlbmd0aCxyPXt2ZXJ0aWNlczpbXSxob2xlczpbXSxkaW1lbnNpb25zOmV9LG49MCxhPTA7YTx0Lmxlbmd0aDthKyspe2Zvcih2YXIgaT0wO2k8dFthXS5sZW5ndGg7aSsrKWZvcih2YXIgbz0wO288ZTtvKyspci52ZXJ0aWNlcy5wdXNoKHRbYV1baV1bb10pO2E+MCYmKG4rPXRbYS0xXS5sZW5ndGgsci5ob2xlcy5wdXNoKG4pKX1yZXR1cm4gcn0sTmkuZGVmYXVsdD1qaTt2YXIgX289ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5oYXNQYXR0ZXJuPSExLHRoaXMucGF0dGVybkZlYXR1cmVzPVtdLHRoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IFFuLHRoaXMuaW5kZXhBcnJheT1uZXcgZGEsdGhpcy5pbmRleEFycmF5Mj1uZXcgZ2EsdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9bmV3IFFhKEJpLHQubGF5ZXJzLHQuem9vbSksdGhpcy5zZWdtZW50cz1uZXcgT2EsdGhpcy5zZWdtZW50czI9bmV3IE9hLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcz10aGlzLmxheWVycy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNTdGF0ZURlcGVuZGVudCgpfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSl9O19vLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUpe3RoaXMuaGFzUGF0dGVybj14bygiZmlsbCIsdGhpcy5sYXllcnMsZSk7Zm9yKHZhciByPXRoaXMubGF5ZXJzWzBdLmxheW91dC5nZXQoImZpbGwtc29ydC1rZXkiKSxuPVtdLGE9MCxpPXQ7YTxpLmxlbmd0aDthKz0xKXt2YXIgbz1pW2FdLHM9by5mZWF0dXJlLGw9by5pbmRleCxjPW8uc291cmNlTGF5ZXJJbmRleDtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlcihuZXcgUG4odGhpcy56b29tKSxzKSl7dmFyIHU9bmkocyksaD1yP3IuZXZhbHVhdGUocyx7fSk6dm9pZCAwLGY9e2lkOnMuaWQscHJvcGVydGllczpzLnByb3BlcnRpZXMsdHlwZTpzLnR5cGUsc291cmNlTGF5ZXJJbmRleDpjLGluZGV4OmwsZ2VvbWV0cnk6dSxwYXR0ZXJuczp7fSxzb3J0S2V5Omh9O24ucHVzaChmKX19ciYmbi5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KTtmb3IodmFyIHA9MCxkPW47cDxkLmxlbmd0aDtwKz0xKXt2YXIgZz1kW3BdLHY9ZyxtPXYuZ2VvbWV0cnkseT12LmluZGV4LHg9di5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMuaGFzUGF0dGVybil7dmFyIGI9Ym8oImZpbGwiLHRoaXMubGF5ZXJzLGcsdGhpcy56b29tLGUpO3RoaXMucGF0dGVybkZlYXR1cmVzLnB1c2goYil9ZWxzZSB0aGlzLmFkZEZlYXR1cmUoZyxtLHkse30pO3ZhciBfPXRbeV0uZmVhdHVyZTtlLmZlYXR1cmVJbmRleC5pbnNlcnQoXyxtLHkseCx0aGlzLmluZGV4KX19LF9vLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoJiZ0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyh0LGUsdGhpcy5zdGF0ZURlcGVuZGVudExheWVycyxyKX0sX28ucHJvdG90eXBlLmFkZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10aGlzLnBhdHRlcm5GZWF0dXJlcztyPG4ubGVuZ3RoO3IrPTEpe3ZhciBhPW5bcl07dGhpcy5hZGRGZWF0dXJlKGEsYS5nZW9tZXRyeSxhLmluZGV4LGUpfX0sX28ucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSxfby5wcm90b3R5cGUudXBsb2FkUGVuZGluZz1mdW5jdGlvbigpe3JldHVybiF0aGlzLnVwbG9hZGVkfHx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZH0sX28ucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnVwbG9hZGVkfHwodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxCaSksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSksdGhpcy5pbmRleEJ1ZmZlcjI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkyKSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpLHRoaXMudXBsb2FkZWQ9ITB9LF9vLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlcjIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzMi5kZXN0cm95KCkpfSxfby5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGE9MCxpPW1vKGUsNTAwKTthPGkubGVuZ3RoO2ErPTEpe2Zvcih2YXIgbz1pW2FdLHM9MCxsPTAsYz1vO2w8Yy5sZW5ndGg7bCs9MSlzKz1jW2xdLmxlbmd0aDtmb3IodmFyIHU9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChzLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSxoPXUudmVydGV4TGVuZ3RoLGY9W10scD1bXSxkPTAsZz1vO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIHY9Z1tkXTtpZigwIT09di5sZW5ndGgpe3YhPT1vWzBdJiZwLnB1c2goZi5sZW5ndGgvMik7dmFyIG09dGhpcy5zZWdtZW50czIucHJlcGFyZVNlZ21lbnQodi5sZW5ndGgsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkyKSx5PW0udmVydGV4TGVuZ3RoO3RoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2sodlswXS54LHZbMF0ueSksdGhpcy5pbmRleEFycmF5Mi5lbXBsYWNlQmFjayh5K3YubGVuZ3RoLTEseSksZi5wdXNoKHZbMF0ueCksZi5wdXNoKHZbMF0ueSk7Zm9yKHZhciB4PTE7eDx2Lmxlbmd0aDt4KyspdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayh2W3hdLngsdlt4XS55KSx0aGlzLmluZGV4QXJyYXkyLmVtcGxhY2VCYWNrKHkreC0xLHkreCksZi5wdXNoKHZbeF0ueCksZi5wdXNoKHZbeF0ueSk7bS52ZXJ0ZXhMZW5ndGgrPXYubGVuZ3RoLG0ucHJpbWl0aXZlTGVuZ3RoKz12Lmxlbmd0aH19Zm9yKHZhciBiPU5pKGYscCksXz0wO188Yi5sZW5ndGg7Xys9Myl0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaCtiW19dLGgrYltfKzFdLGgrYltfKzJdKTt1LnZlcnRleExlbmd0aCs9cyx1LnByaW1pdGl2ZUxlbmd0aCs9Yi5sZW5ndGgvM310aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQscixuKX0sZG4oIkZpbGxCdWNrZXQiLF9vLHtvbWl0OlsibGF5ZXJzIiwicGF0dGVybkZlYXR1cmVzIl19KTt2YXIgd289bmV3IEduKHsiZmlsbC1zb3J0LWtleSI6bmV3IFZuKFR0LmxheW91dF9maWxsWyJmaWxsLXNvcnQta2V5Il0pfSksa289e3BhaW50Om5ldyBHbih7ImZpbGwtYW50aWFsaWFzIjpuZXcgam4oVHQucGFpbnRfZmlsbFsiZmlsbC1hbnRpYWxpYXMiXSksImZpbGwtb3BhY2l0eSI6bmV3IFZuKFR0LnBhaW50X2ZpbGxbImZpbGwtb3BhY2l0eSJdKSwiZmlsbC1jb2xvciI6bmV3IFZuKFR0LnBhaW50X2ZpbGxbImZpbGwtY29sb3IiXSksImZpbGwtb3V0bGluZS1jb2xvciI6bmV3IFZuKFR0LnBhaW50X2ZpbGxbImZpbGwtb3V0bGluZS1jb2xvciJdKSwiZmlsbC10cmFuc2xhdGUiOm5ldyBqbihUdC5wYWludF9maWxsWyJmaWxsLXRyYW5zbGF0ZSJdKSwiZmlsbC10cmFuc2xhdGUtYW5jaG9yIjpuZXcgam4oVHQucGFpbnRfZmlsbFsiZmlsbC10cmFuc2xhdGUtYW5jaG9yIl0pLCJmaWxsLXBhdHRlcm4iOm5ldyBVbihUdC5wYWludF9maWxsWyJmaWxsLXBhdHRlcm4iXSl9KSxsYXlvdXQ6d299LFRvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxrbyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLnJlY2FsY3VsYXRlLmNhbGwodGhpcyxlKTt2YXIgcj10aGlzLnBhaW50Ll92YWx1ZXNbImZpbGwtb3V0bGluZS1jb2xvciJdOyJjb25zdGFudCI9PT1yLnZhbHVlLmtpbmQmJnZvaWQgMD09PXIudmFsdWUudmFsdWUmJih0aGlzLnBhaW50Ll92YWx1ZXNbImZpbGwtb3V0bGluZS1jb2xvciJdPXRoaXMucGFpbnQuX3ZhbHVlc1siZmlsbC1jb2xvciJdKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgX28odCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIHlpKHRoaXMucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZSIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGEsaSxvKXtyZXR1cm4gbGkoeGkodCx0aGlzLnBhaW50LmdldCgiZmlsbC10cmFuc2xhdGUiKSx0aGlzLnBhaW50LmdldCgiZmlsbC10cmFuc2xhdGUtYW5jaG9yIiksaS5hbmdsZSxvKSxuKX0sZS5wcm90b3R5cGUuaXNUaWxlQ2xpcHBlZD1mdW5jdGlvbigpe3JldHVybiEwfSxlfShZbiksTW89Sm4oW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfbm9ybWFsX2VkIixjb21wb25lbnRzOjQsdHlwZToiSW50MTYifV0sNCkubWVtYmVycyxBbz1TbztmdW5jdGlvbiBTbyh0LGUscixuLGEpe3RoaXMucHJvcGVydGllcz17fSx0aGlzLmV4dGVudD1yLHRoaXMudHlwZT0wLHRoaXMuX3BiZj10LHRoaXMuX2dlb21ldHJ5PS0xLHRoaXMuX2tleXM9bix0aGlzLl92YWx1ZXM9YSx0LnJlYWRGaWVsZHMoRW8sdGhpcyxlKX1mdW5jdGlvbiBFbyh0LGUscil7MT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PXQ/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5yZWFkVmFyaW50KCkrdC5wb3M7dC5wb3M8cjspe3ZhciBuPWUuX2tleXNbdC5yZWFkVmFyaW50KCldLGE9ZS5fdmFsdWVzW3QucmVhZFZhcmludCgpXTtlLnByb3BlcnRpZXNbbl09YX19KHIsZSk6Mz09dD9lLnR5cGU9ci5yZWFkVmFyaW50KCk6ND09dCYmKGUuX2dlb21ldHJ5PXIucG9zKX1mdW5jdGlvbiBMbyh0KXtmb3IodmFyIGUscixuPTAsYT0wLGk9dC5sZW5ndGgsbz1pLTE7YTxpO289YSsrKWU9dFthXSxuKz0oKHI9dFtvXSkueC1lLngpKihlLnkrci55KTtyZXR1cm4gbn1Tby50eXBlcz1bIlVua25vd24iLCJQb2ludCIsIkxpbmVTdHJpbmciLCJQb2x5Z29uIl0sU28ucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtmb3IodmFyIGUscj10LnJlYWRWYXJpbnQoKSt0LnBvcyxuPTEsaT0wLG89MCxzPTAsbD1bXTt0LnBvczxyOyl7aWYoaTw9MCl7dmFyIGM9dC5yZWFkVmFyaW50KCk7bj03JmMsaT1jPj4zfWlmKGktLSwxPT09bnx8Mj09PW4pbys9dC5yZWFkU1ZhcmludCgpLHMrPXQucmVhZFNWYXJpbnQoKSwxPT09biYmKGUmJmwucHVzaChlKSxlPVtdKSxlLnB1c2gobmV3IGEobyxzKSk7ZWxzZXtpZig3IT09bil0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY29tbWFuZCAiK24pO2UmJmUucHVzaChlWzBdLmNsb25lKCkpfX1yZXR1cm4gZSYmbC5wdXNoKGUpLGx9LFNvLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2Zvcih2YXIgZT10LnJlYWRWYXJpbnQoKSt0LnBvcyxyPTEsbj0wLGE9MCxpPTAsbz0xLzAscz0tMS8wLGw9MS8wLGM9LTEvMDt0LnBvczxlOyl7aWYobjw9MCl7dmFyIHU9dC5yZWFkVmFyaW50KCk7cj03JnUsbj11Pj4zfWlmKG4tLSwxPT09cnx8Mj09PXIpKGErPXQucmVhZFNWYXJpbnQoKSk8byYmKG89YSksYT5zJiYocz1hKSwoaSs9dC5yZWFkU1ZhcmludCgpKTxsJiYobD1pKSxpPmMmJihjPWkpO2Vsc2UgaWYoNyE9PXIpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGNvbW1hbmQgIityKX1yZXR1cm5bbyxsLHMsY119LFNvLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsaT10aGlzLmV4dGVudCpNYXRoLnBvdygyLHIpLG89dGhpcy5leHRlbnQqdCxzPXRoaXMuZXh0ZW50KmUsbD10aGlzLmxvYWRHZW9tZXRyeSgpLGM9U28udHlwZXNbdGhpcy50eXBlXTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdLG49MTgwLTM2MCooci55K3MpL2k7dFtlXT1bMzYwKihyLngrbykvaS0xODAsMzYwL01hdGguUEkqTWF0aC5hdGFuKE1hdGguZXhwKG4qTWF0aC5QSS8xODApKS05MF19fXN3aXRjaCh0aGlzLnR5cGUpe2Nhc2UgMTp2YXIgaD1bXTtmb3Iobj0wO248bC5sZW5ndGg7bisrKWhbbl09bFtuXVswXTt1KGw9aCk7YnJlYWs7Y2FzZSAyOmZvcihuPTA7bjxsLmxlbmd0aDtuKyspdShsW25dKTticmVhaztjYXNlIDM6Zm9yKGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9MSlyZXR1cm5bdF07Zm9yKHZhciByLG4sYT1bXSxpPTA7aTxlO2krKyl7dmFyIG89TG8odFtpXSk7MCE9PW8mJih2b2lkIDA9PT1uJiYobj1vPDApLG49PT1vPDA/KHImJmEucHVzaChyKSxyPVt0W2ldXSk6ci5wdXNoKHRbaV0pKX1yZXR1cm4gciYmYS5wdXNoKHIpLGF9KGwpLG49MDtuPGwubGVuZ3RoO24rKylmb3IoYT0wO2E8bFtuXS5sZW5ndGg7YSsrKXUobFtuXVthXSl9MT09PWwubGVuZ3RoP2w9bFswXTpjPSJNdWx0aSIrYzt2YXIgZj17dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6Yyxjb29yZGluYXRlczpsfSxwcm9wZXJ0aWVzOnRoaXMucHJvcGVydGllc307cmV0dXJuImlkImluIHRoaXMmJihmLmlkPXRoaXMuaWQpLGZ9O3ZhciBDbz1QbztmdW5jdGlvbiBQbyh0LGUpe3RoaXMudmVyc2lvbj0xLHRoaXMubmFtZT1udWxsLHRoaXMuZXh0ZW50PTQwOTYsdGhpcy5sZW5ndGg9MCx0aGlzLl9wYmY9dCx0aGlzLl9rZXlzPVtdLHRoaXMuX3ZhbHVlcz1bXSx0aGlzLl9mZWF0dXJlcz1bXSx0LnJlYWRGaWVsZHMoT28sdGhpcyxlKSx0aGlzLmxlbmd0aD10aGlzLl9mZWF0dXJlcy5sZW5ndGh9ZnVuY3Rpb24gT28odCxlLHIpezE1PT09dD9lLnZlcnNpb249ci5yZWFkVmFyaW50KCk6MT09PXQ/ZS5uYW1lPXIucmVhZFN0cmluZygpOjU9PT10P2UuZXh0ZW50PXIucmVhZFZhcmludCgpOjI9PT10P2UuX2ZlYXR1cmVzLnB1c2goci5wb3MpOjM9PT10P2UuX2tleXMucHVzaChyLnJlYWRTdHJpbmcoKSk6ND09PXQmJmUuX3ZhbHVlcy5wdXNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1udWxsLHI9dC5yZWFkVmFyaW50KCkrdC5wb3M7dC5wb3M8cjspe3ZhciBuPXQucmVhZFZhcmludCgpPj4zO2U9MT09PW4/dC5yZWFkU3RyaW5nKCk6Mj09PW4/dC5yZWFkRmxvYXQoKTozPT09bj90LnJlYWREb3VibGUoKTo0PT09bj90LnJlYWRWYXJpbnQ2NCgpOjU9PT1uP3QucmVhZFZhcmludCgpOjY9PT1uP3QucmVhZFNWYXJpbnQoKTo3PT09bj90LnJlYWRCb29sZWFuKCk6bnVsbH1yZXR1cm4gZX0ocikpfWZ1bmN0aW9uIHpvKHQsZSxyKXtpZigzPT09dCl7dmFyIG49bmV3IENvKHIsci5yZWFkVmFyaW50KCkrci5wb3MpO24ubGVuZ3RoJiYoZVtuLm5hbWVdPW4pfX1Qby5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtpZih0PDB8fHQ+PXRoaXMuX2ZlYXR1cmVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImZlYXR1cmUgaW5kZXggb3V0IG9mIGJvdW5kcyIpO3RoaXMuX3BiZi5wb3M9dGhpcy5fZmVhdHVyZXNbdF07dmFyIGU9dGhpcy5fcGJmLnJlYWRWYXJpbnQoKSt0aGlzLl9wYmYucG9zO3JldHVybiBuZXcgQW8odGhpcy5fcGJmLGUsdGhpcy5leHRlbnQsdGhpcy5fa2V5cyx0aGlzLl92YWx1ZXMpfTt2YXIgSW89e1ZlY3RvclRpbGU6ZnVuY3Rpb24odCxlKXt0aGlzLmxheWVycz10LnJlYWRGaWVsZHMoem8se30sZSl9LFZlY3RvclRpbGVGZWF0dXJlOkFvLFZlY3RvclRpbGVMYXllcjpDb30sRG89SW8uVmVjdG9yVGlsZUZlYXR1cmUudHlwZXMsUm89TWF0aC5wb3coMiwxMyk7ZnVuY3Rpb24gRm8odCxlLHIsbixhLGksbyxzKXt0LmVtcGxhY2VCYWNrKGUsciwyKk1hdGguZmxvb3IobipSbykrbyxhKlJvKjIsaSpSbyoyLE1hdGgucm91bmQocykpfXZhciBCbz1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmhhc1BhdHRlcm49ITEsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgdGEsdGhpcy5pbmRleEFycmF5PW5ldyBkYSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgUWEoTW8sdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBPYSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHM9dGhpcy5sYXllcnMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzU3RhdGVEZXBlbmRlbnQoKX0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pfTtmdW5jdGlvbiBObyh0LGUpe3JldHVybiB0Lng9PT1lLngmJih0Lng8MHx8dC54PmVpKXx8dC55PT09ZS55JiYodC55PDB8fHQueT5laSl9ZnVuY3Rpb24gam8odCl7cmV0dXJuIHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQueDwwfSl8fHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQueD5laX0pfHx0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0Lnk8MH0pfHx0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0Lnk+ZWl9KX1Cby5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLmZlYXR1cmVzPVtdLHRoaXMuaGFzUGF0dGVybj14bygiZmlsbC1leHRydXNpb24iLHRoaXMubGF5ZXJzLGUpO2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBhPW5bcl0saT1hLmZlYXR1cmUsbz1hLmluZGV4LHM9YS5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyKG5ldyBQbih0aGlzLnpvb20pLGkpKXt2YXIgbD1uaShpKSxjPXtzb3VyY2VMYXllckluZGV4OnMsaW5kZXg6byxnZW9tZXRyeTpsLHByb3BlcnRpZXM6aS5wcm9wZXJ0aWVzLHR5cGU6aS50eXBlLHBhdHRlcm5zOnt9fTt2b2lkIDAhPT1pLmlkJiYoYy5pZD1pLmlkKSx0aGlzLmhhc1BhdHRlcm4/dGhpcy5mZWF0dXJlcy5wdXNoKGJvKCJmaWxsLWV4dHJ1c2lvbiIsdGhpcy5sYXllcnMsYyx0aGlzLnpvb20sZSkpOnRoaXMuYWRkRmVhdHVyZShjLGwsbyx7fSksZS5mZWF0dXJlSW5kZXguaW5zZXJ0KGksbCxvLHMsdGhpcy5pbmRleCwhMCl9fX0sQm8ucHJvdG90eXBlLmFkZEZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj10aGlzLmZlYXR1cmVzO3I8bi5sZW5ndGg7cis9MSl7dmFyIGE9bltyXSxpPWEuZ2VvbWV0cnk7dGhpcy5hZGRGZWF0dXJlKGEsaSxhLmluZGV4LGUpfX0sQm8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgmJnRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLHIpfSxCby5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LEJvLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfSxCby5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMudXBsb2FkZWR8fCh0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LE1vKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpLHRoaXMudXBsb2FkZWQ9ITB9LEJvLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0sQm8ucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhPTAsaT1tbyhlLDUwMCk7YTxpLmxlbmd0aDthKz0xKXtmb3IodmFyIG89aVthXSxzPTAsbD0wLGM9bztsPGMubGVuZ3RoO2wrPTEpcys9Y1tsXS5sZW5ndGg7Zm9yKHZhciB1PXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSksaD0wLGY9bztoPGYubGVuZ3RoO2grPTEpe3ZhciBwPWZbaF07aWYoMCE9PXAubGVuZ3RoJiYham8ocCkpZm9yKHZhciBkPTAsZz0wO2c8cC5sZW5ndGg7ZysrKXt2YXIgdj1wW2ddO2lmKGc+PTEpe3ZhciBtPXBbZy0xXTtpZighTm8odixtKSl7dS52ZXJ0ZXhMZW5ndGgrND5PYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmKHU9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSk7dmFyIHk9di5zdWIobSkuX3BlcnAoKS5fdW5pdCgpLHg9bS5kaXN0KHYpO2QreD4zMjc2OCYmKGQ9MCksRm8odGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx2Lngsdi55LHkueCx5LnksMCwwLGQpLEZvKHRoaXMubGF5b3V0VmVydGV4QXJyYXksdi54LHYueSx5LngseS55LDAsMSxkKSxkKz14LEZvKHRoaXMubGF5b3V0VmVydGV4QXJyYXksbS54LG0ueSx5LngseS55LDAsMCxkKSxGbyh0aGlzLmxheW91dFZlcnRleEFycmF5LG0ueCxtLnkseS54LHkueSwwLDEsZCk7dmFyIGI9dS52ZXJ0ZXhMZW5ndGg7dGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGIsYisyLGIrMSksdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGIrMSxiKzIsYiszKSx1LnZlcnRleExlbmd0aCs9NCx1LnByaW1pdGl2ZUxlbmd0aCs9Mn19fX1pZih1LnZlcnRleExlbmd0aCtzPk9hLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIJiYodT10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KHMsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpKSwiUG9seWdvbiI9PT1Eb1t0LnR5cGVdKXtmb3IodmFyIF89W10sdz1bXSxrPXUudmVydGV4TGVuZ3RoLFQ9MCxNPW87VDxNLmxlbmd0aDtUKz0xKXt2YXIgQT1NW1RdO2lmKDAhPT1BLmxlbmd0aCl7QSE9PW9bMF0mJncucHVzaChfLmxlbmd0aC8yKTtmb3IodmFyIFM9MDtTPEEubGVuZ3RoO1MrKyl7dmFyIEU9QVtTXTtGbyh0aGlzLmxheW91dFZlcnRleEFycmF5LEUueCxFLnksMCwwLDEsMSwwKSxfLnB1c2goRS54KSxfLnB1c2goRS55KX19fWZvcih2YXIgTD1OaShfLHcpLEM9MDtDPEwubGVuZ3RoO0MrPTMpdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGsrTFtDXSxrK0xbQysyXSxrK0xbQysxXSk7dS5wcmltaXRpdmVMZW5ndGgrPUwubGVuZ3RoLzMsdS52ZXJ0ZXhMZW5ndGgrPXN9fXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsdCxyLG4pfSxkbigiRmlsbEV4dHJ1c2lvbkJ1Y2tldCIsQm8se29taXQ6WyJsYXllcnMiLCJmZWF0dXJlcyJdfSk7dmFyIFZvPXtwYWludDpuZXcgR24oeyJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5IjpuZXcgam4oVHRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiXSksImZpbGwtZXh0cnVzaW9uLWNvbG9yIjpuZXcgVm4oVHRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLWNvbG9yIl0pLCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiOm5ldyBqbihUdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIl0pLCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yIjpuZXcgam4oVHRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiXSksImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iOm5ldyBVbihUdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tcGF0dGVybiJdKSwiZmlsbC1leHRydXNpb24taGVpZ2h0IjpuZXcgVm4oVHRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLWhlaWdodCJdKSwiZmlsbC1leHRydXNpb24tYmFzZSI6bmV3IFZuKFR0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi1iYXNlIl0pLCJmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCI6bmV3IGpuKFR0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCJdKX0pfSxVbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsVm8pfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCbyh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4geWkodGhpcy5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSIpKX0sZS5wcm90b3R5cGUuaXMzRD1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSxvLHMsbCl7dmFyIGM9eGkodCx0aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIiksdGhpcy5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiKSxvLmFuZ2xlLHMpLHU9dGhpcy5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLWhlaWdodCIpLmV2YWx1YXRlKGUsciksaD10aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tYmFzZSIpLmV2YWx1YXRlKGUsciksZj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9W10sbz0wLHM9dDtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1bbC54LGwueSwwLDFdO1RpKGMsYyxlKSxpLnB1c2gobmV3IGEoY1swXS9jWzNdLGNbMV0vY1szXSkpfXJldHVybiBpfShjLGwpLHA9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPVtdLG89W10scz1uWzhdKmUsbD1uWzldKmUsYz1uWzEwXSplLHU9blsxMV0qZSxoPW5bOF0qcixmPW5bOV0qcixwPW5bMTBdKnIsZD1uWzExXSpyLGc9MCx2PXQ7Zzx2Lmxlbmd0aDtnKz0xKXtmb3IodmFyIG09W10seT1bXSx4PTAsYj12W2ddO3g8Yi5sZW5ndGg7eCs9MSl7dmFyIF89Ylt4XSx3PV8ueCxrPV8ueSxUPW5bMF0qdytuWzRdKmsrblsxMl0sTT1uWzFdKncrbls1XSprK25bMTNdLEE9blsyXSp3K25bNl0qaytuWzE0XSxTPW5bM10qdytuWzddKmsrblsxNV0sRT1BK2MsTD1TK3UsQz1UK2gsUD1NK2YsTz1BK3Asej1TK2QsST1uZXcgYSgoVCtzKS9MLChNK2wpL0wpO0kuej1FL0wsbS5wdXNoKEkpO3ZhciBEPW5ldyBhKEMveixQL3opO0Quej1PL3oseS5wdXNoKEQpfWkucHVzaChtKSxvLnB1c2goeSl9cmV0dXJuW2ksb119KG4saCx1LGwpO3JldHVybiBmdW5jdGlvbih0LGUscil7dmFyIG49MS8wO2xpKHIsZSkmJihuPUhvKHIsZVswXSkpO2Zvcih2YXIgYT0wO2E8ZS5sZW5ndGg7YSsrKWZvcih2YXIgaT1lW2FdLG89dFthXSxzPTA7czxpLmxlbmd0aC0xO3MrKyl7dmFyIGw9aVtzXSxjPWlbcysxXSx1PW9bc10saD1bbCxjLG9bcysxXSx1LGxdO29pKHIsaCkmJihuPU1hdGgubWluKG4sSG8ocixoKSkpfXJldHVybiBuIT09MS8wJiZufShwWzBdLHBbMV0sZil9LGV9KFluKTtmdW5jdGlvbiBxbyh0LGUpe3JldHVybiB0LngqZS54K3QueSplLnl9ZnVuY3Rpb24gSG8odCxlKXtpZigxPT09dC5sZW5ndGgpe3ZhciByPWVbMF0sbj1lWzFdLGE9ZVszXSxpPXRbMF0sbz1uLnN1YihyKSxzPWEuc3ViKHIpLGw9aS5zdWIociksYz1xbyhvLG8pLHU9cW8obyxzKSxoPXFvKHMscyksZj1xbyhsLG8pLHA9cW8obCxzKSxkPWMqaC11KnUsZz0oaCpmLXUqcCkvZCx2PShjKnAtdSpmKS9kLG09MS1nLXY7cmV0dXJuIHIueiptK24ueipnK2Eueip2fWZvcih2YXIgeT0xLzAseD0wLGI9ZTt4PGIubGVuZ3RoO3grPTEpe3ZhciBfPWJbeF07eT1NYXRoLm1pbih5LF8ueil9cmV0dXJuIHl9dmFyIEdvPUpuKFt7bmFtZToiYV9wb3Nfbm9ybWFsIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifSx7bmFtZToiYV9kYXRhIixjb21wb25lbnRzOjQsdHlwZToiVWludDgifV0sNCkubWVtYmVycyxZbz1Jby5WZWN0b3JUaWxlRmVhdHVyZS50eXBlcyxXbz1NYXRoLmNvcyhNYXRoLlBJLzE4MCozNy41KSxYbz1NYXRoLnBvdygyLDE0KS8uNSxabz1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmhhc1BhdHRlcm49ITEsdGhpcy5wYXR0ZXJuRmVhdHVyZXM9W10sdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgZWEsdGhpcy5pbmRleEFycmF5PW5ldyBkYSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgUWEoR28sdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBPYSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHM9dGhpcy5sYXllcnMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzU3RhdGVEZXBlbmRlbnQoKX0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pfTtaby5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLmhhc1BhdHRlcm49eG8oImxpbmUiLHRoaXMubGF5ZXJzLGUpO2Zvcih2YXIgcj10aGlzLmxheWVyc1swXS5sYXlvdXQuZ2V0KCJsaW5lLXNvcnQta2V5Iiksbj1bXSxhPTAsaT10O2E8aS5sZW5ndGg7YSs9MSl7dmFyIG89aVthXSxzPW8uZmVhdHVyZSxsPW8uaW5kZXgsYz1vLnNvdXJjZUxheWVySW5kZXg7aWYodGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIobmV3IFBuKHRoaXMuem9vbSkscykpe3ZhciB1PW5pKHMpLGg9cj9yLmV2YWx1YXRlKHMse30pOnZvaWQgMCxmPXtpZDpzLmlkLHByb3BlcnRpZXM6cy5wcm9wZXJ0aWVzLHR5cGU6cy50eXBlLHNvdXJjZUxheWVySW5kZXg6YyxpbmRleDpsLGdlb21ldHJ5OnUscGF0dGVybnM6e30sc29ydEtleTpofTtuLnB1c2goZil9fXImJm4uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNvcnRLZXktZS5zb3J0S2V5fSk7Zm9yKHZhciBwPTAsZD1uO3A8ZC5sZW5ndGg7cCs9MSl7dmFyIGc9ZFtwXSx2PWcsbT12Lmdlb21ldHJ5LHk9di5pbmRleCx4PXYuc291cmNlTGF5ZXJJbmRleDtpZih0aGlzLmhhc1BhdHRlcm4pe3ZhciBiPWJvKCJsaW5lIix0aGlzLmxheWVycyxnLHRoaXMuem9vbSxlKTt0aGlzLnBhdHRlcm5GZWF0dXJlcy5wdXNoKGIpfWVsc2UgdGhpcy5hZGRGZWF0dXJlKGcsbSx5LHt9KTt2YXIgXz10W3ldLmZlYXR1cmU7ZS5mZWF0dXJlSW5kZXguaW5zZXJ0KF8sbSx5LHgsdGhpcy5pbmRleCl9fSxaby5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCYmdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXModCxlLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMscil9LFpvLnByb3RvdHlwZS5hZGRGZWF0dXJlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dGhpcy5wYXR0ZXJuRmVhdHVyZXM7cjxuLmxlbmd0aDtyKz0xKXt2YXIgYT1uW3JdO3RoaXMuYWRkRmVhdHVyZShhLGEuZ2VvbWV0cnksYS5pbmRleCxlKX19LFpvLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aH0sWm8ucHJvdG90eXBlLnVwbG9hZFBlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy51cGxvYWRlZHx8dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWR9LFpvLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy51cGxvYWRlZHx8KHRoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksR28pLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCksdGhpcy51cGxvYWRlZD0hMH0sWm8ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCkpfSxaby5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGE9dGhpcy5sYXllcnNbMF0ubGF5b3V0LGk9YS5nZXQoImxpbmUtam9pbiIpLmV2YWx1YXRlKHQse30pLG89YS5nZXQoImxpbmUtY2FwIikscz1hLmdldCgibGluZS1taXRlci1saW1pdCIpLGw9YS5nZXQoImxpbmUtcm91bmQtbGltaXQiKSxjPTAsdT1lO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXTt0aGlzLmFkZExpbmUoaCx0LGksbyxzLGwscixuKX19LFpvLnByb3RvdHlwZS5hZGRMaW5lPWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8scyl7aWYodGhpcy5kaXN0YW5jZT0wLHRoaXMuc2NhbGVkRGlzdGFuY2U9MCx0aGlzLnRvdGFsRGlzdGFuY2U9MCxlLnByb3BlcnRpZXMmJmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgibWFwYm94X2NsaXBfc3RhcnQiKSYmZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCJtYXBib3hfY2xpcF9lbmQiKSl7dGhpcy5jbGlwU3RhcnQ9K2UucHJvcGVydGllcy5tYXBib3hfY2xpcF9zdGFydCx0aGlzLmNsaXBFbmQ9K2UucHJvcGVydGllcy5tYXBib3hfY2xpcF9lbmQ7Zm9yKHZhciBsPTA7bDx0Lmxlbmd0aC0xO2wrKyl0aGlzLnRvdGFsRGlzdGFuY2UrPXRbbF0uZGlzdCh0W2wrMV0pfWZvcih2YXIgYz0iUG9seWdvbiI9PT1Zb1tlLnR5cGVdLHU9dC5sZW5ndGg7dT49MiYmdFt1LTFdLmVxdWFscyh0W3UtMl0pOyl1LS07Zm9yKHZhciBoPTA7aDx1LTEmJnRbaF0uZXF1YWxzKHRbaCsxXSk7KWgrKztpZighKHU8KGM/MzoyKSkpeyJiZXZlbCI9PT1yJiYoYT0xLjA1KTt2YXIgZixwPWVpLyg1MTIqdGhpcy5vdmVyc2NhbGluZykqMTUsZD10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDEwKnUsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpLGc9dm9pZCAwLHY9dm9pZCAwLG09dm9pZCAwLHk9dm9pZCAwO3RoaXMuZTE9dGhpcy5lMj0tMSxjJiYoZj10W3UtMl0seT10W2hdLnN1YihmKS5fdW5pdCgpLl9wZXJwKCkpO2Zvcih2YXIgeD1oO3g8dTt4KyspaWYoISh2PWMmJng9PT11LTE/dFtoKzFdOnRbeCsxXSl8fCF0W3hdLmVxdWFscyh2KSl7eSYmKG09eSksZiYmKGc9ZiksZj10W3hdLHk9dj92LnN1YihmKS5fdW5pdCgpLl9wZXJwKCk6bTt2YXIgYj0obT1tfHx5KS5hZGQoeSk7MD09PWIueCYmMD09PWIueXx8Yi5fdW5pdCgpO3ZhciBfPW0ueCp5LngrbS55KnkueSx3PWIueCp5LngrYi55KnkueSxrPTAhPT13PzEvdzoxLzAsVD0yKk1hdGguc3FydCgyLTIqdyksTT13PFdvJiZnJiZ2LEE9bS54KnkueS1tLnkqeS54PjA7aWYoTSYmeD5oKXt2YXIgUz1mLmRpc3QoZyk7aWYoUz4yKnApe3ZhciBFPWYuc3ViKGYuc3ViKGcpLl9tdWx0KHAvUykuX3JvdW5kKCkpO3RoaXMudXBkYXRlRGlzdGFuY2UoZyxFKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoRSxtLDAsMCxkKSxnPUV9fXZhciBMPWcmJnYsQz1MP3I6Yz8iYnV0dCI6bjtpZihMJiYicm91bmQiPT09QyYmKGs8aT9DPSJtaXRlciI6azw9MiYmKEM9ImZha2Vyb3VuZCIpKSwibWl0ZXIiPT09QyYmaz5hJiYoQz0iYmV2ZWwiKSwiYmV2ZWwiPT09QyYmKGs+MiYmKEM9ImZsaXBiZXZlbCIpLGs8YSYmKEM9Im1pdGVyIikpLGcmJnRoaXMudXBkYXRlRGlzdGFuY2UoZyxmKSwibWl0ZXIiPT09QyliLl9tdWx0KGspLHRoaXMuYWRkQ3VycmVudFZlcnRleChmLGIsMCwwLGQpO2Vsc2UgaWYoImZsaXBiZXZlbCI9PT1DKXtpZihrPjEwMCliPXkubXVsdCgtMSk7ZWxzZXt2YXIgUD1rKm0uYWRkKHkpLm1hZygpL20uc3ViKHkpLm1hZygpO2IuX3BlcnAoKS5fbXVsdChQKihBPy0xOjEpKX10aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoZixiLDAsMCxkKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoZixiLm11bHQoLTEpLDAsMCxkKX1lbHNlIGlmKCJiZXZlbCI9PT1DfHwiZmFrZXJvdW5kIj09PUMpe3ZhciBPPS1NYXRoLnNxcnQoayprLTEpLHo9QT9POjAsST1BPzA6TztpZihnJiZ0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoZixtLHosSSxkKSwiZmFrZXJvdW5kIj09PUMpZm9yKHZhciBEPU1hdGgucm91bmQoMTgwKlQvTWF0aC5QSS8yMCksUj0xO1I8RDtSKyspe3ZhciBGPVIvRDtpZiguNSE9PUYpe3ZhciBCPUYtLjU7Ris9RipCKihGLTEpKigoMS4wOTA0K18qKF8qKDMuNTU2NDUtMS40MzUxOSpfKS0zLjI0NTIpKSpCKkIrKC44NDgwMTMrXyooLjIxNTYzOCpfLTEuMDYwMjEpKSl9dmFyIE49eS5zdWIobSkuX211bHQoRikuX2FkZChtKS5fdW5pdCgpLl9tdWx0KEE/LTE6MSk7dGhpcy5hZGRIYWxmVmVydGV4KGYsTi54LE4ueSwhMSxBLDAsZCl9diYmdGhpcy5hZGRDdXJyZW50VmVydGV4KGYseSwteiwtSSxkKX1lbHNlIGlmKCJidXR0Ij09PUMpdGhpcy5hZGRDdXJyZW50VmVydGV4KGYsYiwwLDAsZCk7ZWxzZSBpZigic3F1YXJlIj09PUMpe3ZhciBqPWc/MTotMTt0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoZixiLGosaixkKX1lbHNlInJvdW5kIj09PUMmJihnJiYodGhpcy5hZGRDdXJyZW50VmVydGV4KGYsbSwwLDAsZCksdGhpcy5hZGRDdXJyZW50VmVydGV4KGYsbSwxLDEsZCwhMCkpLHYmJih0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoZix5LC0xLC0xLGQsITApLHRoaXMuYWRkQ3VycmVudFZlcnRleChmLHksMCwwLGQpKSk7aWYoTSYmeDx1LTEpe3ZhciBWPWYuZGlzdCh2KTtpZihWPjIqcCl7dmFyIFU9Zi5hZGQodi5zdWIoZikuX211bHQocC9WKS5fcm91bmQoKSk7dGhpcy51cGRhdGVEaXN0YW5jZShmLFUpLHRoaXMuYWRkQ3VycmVudFZlcnRleChVLHksMCwwLGQpLGY9VX19fXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsZSxvLHMpfX0sWm8ucHJvdG90eXBlLmFkZEN1cnJlbnRWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPSExKTt2YXIgbz1lLngrZS55KnIscz1lLnktZS54KnIsbD0tZS54K2UueSpuLGM9LWUueS1lLngqbjt0aGlzLmFkZEhhbGZWZXJ0ZXgodCxvLHMsaSwhMSxyLGEpLHRoaXMuYWRkSGFsZlZlcnRleCh0LGwsYyxpLCEwLC1uLGEpLHRoaXMuZGlzdGFuY2U+WG8vMiYmMD09PXRoaXMudG90YWxEaXN0YW5jZSYmKHRoaXMuZGlzdGFuY2U9MCx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodCxlLHIsbixhLGkpKX0sWm8ucHJvdG90eXBlLmFkZEhhbGZWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixhLGksbyl7dmFyIHM9dC54LGw9dC55LGM9LjUqdGhpcy5zY2FsZWREaXN0YW5jZTt0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKChzPDwxKSsobj8xOjApLChsPDwxKSsoYT8xOjApLE1hdGgucm91bmQoNjMqZSkrMTI4LE1hdGgucm91bmQoNjMqcikrMTI4LDErKDA9PT1pPzA6aTwwPy0xOjEpfCg2MyZjKTw8MixjPj42KTt2YXIgdT1vLnZlcnRleExlbmd0aCsrO3RoaXMuZTE+PTAmJnRoaXMuZTI+PTAmJih0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodGhpcy5lMSx0aGlzLmUyLHUpLG8ucHJpbWl0aXZlTGVuZ3RoKyspLGE/dGhpcy5lMj11OnRoaXMuZTE9dX0sWm8ucHJvdG90eXBlLnVwZGF0ZURpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5kaXN0YW5jZSs9dC5kaXN0KGUpLHRoaXMuc2NhbGVkRGlzdGFuY2U9dGhpcy50b3RhbERpc3RhbmNlPjA/KHRoaXMuY2xpcFN0YXJ0Kyh0aGlzLmNsaXBFbmQtdGhpcy5jbGlwU3RhcnQpKnRoaXMuZGlzdGFuY2UvdGhpcy50b3RhbERpc3RhbmNlKSooWG8tMSk6dGhpcy5kaXN0YW5jZX0sZG4oIkxpbmVCdWNrZXQiLFpvLHtvbWl0OlsibGF5ZXJzIiwicGF0dGVybkZlYXR1cmVzIl19KTt2YXIgSm89bmV3IEduKHsibGluZS1jYXAiOm5ldyBqbihUdC5sYXlvdXRfbGluZVsibGluZS1jYXAiXSksImxpbmUtam9pbiI6bmV3IFZuKFR0LmxheW91dF9saW5lWyJsaW5lLWpvaW4iXSksImxpbmUtbWl0ZXItbGltaXQiOm5ldyBqbihUdC5sYXlvdXRfbGluZVsibGluZS1taXRlci1saW1pdCJdKSwibGluZS1yb3VuZC1saW1pdCI6bmV3IGpuKFR0LmxheW91dF9saW5lWyJsaW5lLXJvdW5kLWxpbWl0Il0pLCJsaW5lLXNvcnQta2V5IjpuZXcgVm4oVHQubGF5b3V0X2xpbmVbImxpbmUtc29ydC1rZXkiXSl9KSxLbz17cGFpbnQ6bmV3IEduKHsibGluZS1vcGFjaXR5IjpuZXcgVm4oVHQucGFpbnRfbGluZVsibGluZS1vcGFjaXR5Il0pLCJsaW5lLWNvbG9yIjpuZXcgVm4oVHQucGFpbnRfbGluZVsibGluZS1jb2xvciJdKSwibGluZS10cmFuc2xhdGUiOm5ldyBqbihUdC5wYWludF9saW5lWyJsaW5lLXRyYW5zbGF0ZSJdKSwibGluZS10cmFuc2xhdGUtYW5jaG9yIjpuZXcgam4oVHQucGFpbnRfbGluZVsibGluZS10cmFuc2xhdGUtYW5jaG9yIl0pLCJsaW5lLXdpZHRoIjpuZXcgVm4oVHQucGFpbnRfbGluZVsibGluZS13aWR0aCJdKSwibGluZS1nYXAtd2lkdGgiOm5ldyBWbihUdC5wYWludF9saW5lWyJsaW5lLWdhcC13aWR0aCJdKSwibGluZS1vZmZzZXQiOm5ldyBWbihUdC5wYWludF9saW5lWyJsaW5lLW9mZnNldCJdKSwibGluZS1ibHVyIjpuZXcgVm4oVHQucGFpbnRfbGluZVsibGluZS1ibHVyIl0pLCJsaW5lLWRhc2hhcnJheSI6bmV3IHFuKFR0LnBhaW50X2xpbmVbImxpbmUtZGFzaGFycmF5Il0pLCJsaW5lLXBhdHRlcm4iOm5ldyBVbihUdC5wYWludF9saW5lWyJsaW5lLXBhdHRlcm4iXSksImxpbmUtZ3JhZGllbnQiOm5ldyBIbihUdC5wYWludF9saW5lWyJsaW5lLWdyYWRpZW50Il0pfSksbGF5b3V0OkpvfSxRbz1uZXcoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuIHI9bmV3IFBuKE1hdGguZmxvb3Ioci56b29tKSx7bm93OnIubm93LGZhZGVEdXJhdGlvbjpyLmZhZGVEdXJhdGlvbix6b29tSGlzdG9yeTpyLnpvb21IaXN0b3J5LHRyYW5zaXRpb246ci50cmFuc2l0aW9ufSksdC5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZS5jYWxsKHRoaXMsZSxyKX0sZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSxyLG4sYSl7cmV0dXJuIHI9aCh7fSxyLHt6b29tOk1hdGguZmxvb3Ioci56b29tKX0pLHQucHJvdG90eXBlLmV2YWx1YXRlLmNhbGwodGhpcyxlLHIsbixhKX0sZX0oVm4pKShLby5wYWludC5wcm9wZXJ0aWVzWyJsaW5lLXdpZHRoIl0uc3BlY2lmaWNhdGlvbik7UW8udXNlSW50ZWdlclpvb209ITA7dmFyICRvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxLbyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZT1mdW5jdGlvbih0KXsibGluZS1ncmFkaWVudCI9PT10JiZ0aGlzLl91cGRhdGVHcmFkaWVudCgpfSxlLnByb3RvdHlwZS5fdXBkYXRlR3JhZGllbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbImxpbmUtZ3JhZGllbnQiXS52YWx1ZS5leHByZXNzaW9uO3RoaXMuZ3JhZGllbnQ9SWkodCwibGluZVByb2dyZXNzIiksdGhpcy5ncmFkaWVudFRleHR1cmU9bnVsbH0sZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUucmVjYWxjdWxhdGUuY2FsbCh0aGlzLGUpLHRoaXMucGFpbnQuX3ZhbHVlc1sibGluZS1mbG9vcndpZHRoIl09UW8ucG9zc2libHlFdmFsdWF0ZSh0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQuX3ZhbHVlc1sibGluZS13aWR0aCJdLnZhbHVlLGUpfSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBabyh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24odCl7dmFyIGU9dCxyPXRzKG1pKCJsaW5lLXdpZHRoIix0aGlzLGUpLG1pKCJsaW5lLWdhcC13aWR0aCIsdGhpcyxlKSksbj1taSgibGluZS1vZmZzZXQiLHRoaXMsZSk7cmV0dXJuIHIvMitNYXRoLmFicyhuKSt5aSh0aGlzLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUiKSl9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLG8scyl7dmFyIGw9eGkodCx0aGlzLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUiKSx0aGlzLnBhaW50LmdldCgibGluZS10cmFuc2xhdGUtYW5jaG9yIiksby5hbmdsZSxzKSxjPXMvMip0cyh0aGlzLnBhaW50LmdldCgibGluZS13aWR0aCIpLmV2YWx1YXRlKGUsciksdGhpcy5wYWludC5nZXQoImxpbmUtZ2FwLXdpZHRoIikuZXZhbHVhdGUoZSxyKSksdT10aGlzLnBhaW50LmdldCgibGluZS1vZmZzZXQiKS5ldmFsdWF0ZShlLHIpO3JldHVybiB1JiYobj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPW5ldyBhKDAsMCksaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIG89dFtpXSxzPVtdLGw9MDtsPG8ubGVuZ3RoO2wrKyl7dmFyIGM9b1tsLTFdLHU9b1tsXSxoPW9bbCsxXSxmPTA9PT1sP246dS5zdWIoYykuX3VuaXQoKS5fcGVycCgpLHA9bD09PW8ubGVuZ3RoLTE/bjpoLnN1Yih1KS5fdW5pdCgpLl9wZXJwKCksZD1mLl9hZGQocCkuX3VuaXQoKSxnPWQueCpwLngrZC55KnAueTtkLl9tdWx0KDEvZykscy5wdXNoKGQuX211bHQoZSkuX2FkZCh1KSl9ci5wdXNoKHMpfXJldHVybiByfShuLHUqcykpLGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXTtpZih0Lmxlbmd0aD49Mylmb3IodmFyIGk9MDtpPGEubGVuZ3RoO2krKylpZihnaSh0LGFbaV0pKXJldHVybiEwO2lmKGNpKHQsYSxyKSlyZXR1cm4hMH1yZXR1cm4hMX0obCxuLGMpfSxlLnByb3RvdHlwZS5pc1RpbGVDbGlwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGV9KFluKTtmdW5jdGlvbiB0cyh0LGUpe3JldHVybiBlPjA/ZSsyKnQ6dH12YXIgZXM9Sm4oW3tuYW1lOiJhX3Bvc19vZmZzZXQiLGNvbXBvbmVudHM6NCx0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2RhdGEiLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50MTYifV0pLHJzPUpuKFt7bmFtZToiYV9wcm9qZWN0ZWRfcG9zIixjb21wb25lbnRzOjMsdHlwZToiRmxvYXQzMiJ9XSw0KSxucz0oSm4oW3tuYW1lOiJhX2ZhZGVfb3BhY2l0eSIsY29tcG9uZW50czoxLHR5cGU6IlVpbnQzMiJ9XSw0KSxKbihbe25hbWU6ImFfcGxhY2VkIixjb21wb25lbnRzOjIsdHlwZToiVWludDgifSx7bmFtZToiYV9zaGlmdCIsY29tcG9uZW50czoyLHR5cGU6IkZsb2F0MzIifV0pKSxhcz0oSm4oW3t0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yUG9pbnRYIn0se3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JQb2ludFkifSx7dHlwZToiSW50MTYiLG5hbWU6IngxIn0se3R5cGU6IkludDE2IixuYW1lOiJ5MSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieDIifSx7dHlwZToiSW50MTYiLG5hbWU6InkyIn0se3R5cGU6IlVpbnQzMiIsbmFtZToiZmVhdHVyZUluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToic291cmNlTGF5ZXJJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6ImJ1Y2tldEluZGV4In0se3R5cGU6IkludDE2IixuYW1lOiJyYWRpdXMifSx7dHlwZToiSW50MTYiLG5hbWU6InNpZ25lZERpc3RhbmNlRnJvbUFuY2hvciJ9XSksSm4oW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfYW5jaG9yX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfZXh0cnVkZSIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dLDQpKSxpcz1Kbihbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifSx7bmFtZToiYV9hbmNob3JfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifSx7bmFtZToiYV9leHRydWRlIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifV0sNCk7ZnVuY3Rpb24gb3ModCxlLHIpe3JldHVybiB0LnNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24odCl7dC50ZXh0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmxheW91dC5nZXQoInRleHQtdHJhbnNmb3JtIikuZXZhbHVhdGUocix7fSk7cmV0dXJuInVwcGVyY2FzZSI9PT1uP3Q9dC50b0xvY2FsZVVwcGVyQ2FzZSgpOiJsb3dlcmNhc2UiPT09biYmKHQ9dC50b0xvY2FsZUxvd2VyQ2FzZSgpKSxDbi5hcHBseUFyYWJpY1NoYXBpbmcmJih0PUNuLmFwcGx5QXJhYmljU2hhcGluZyh0KSksdH0odC50ZXh0LGUscil9KSx0fUpuKFt7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclkifSx7dHlwZToiVWludDE2IixuYW1lOiJnbHlwaFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1HbHlwaHMifSx7dHlwZToiVWludDMyIixuYW1lOiJ2ZXJ0ZXhTdGFydEluZGV4In0se3R5cGU6IlVpbnQzMiIsbmFtZToibGluZVN0YXJ0SW5kZXgifSx7dHlwZToiVWludDMyIixuYW1lOiJsaW5lTGVuZ3RoIn0se3R5cGU6IlVpbnQxNiIsbmFtZToic2VnbWVudCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Imxvd2VyU2l6ZSJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InVwcGVyU2l6ZSJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJsaW5lT2Zmc2V0WCJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJsaW5lT2Zmc2V0WSJ9LHt0eXBlOiJVaW50OCIsbmFtZToid3JpdGluZ01vZGUifSx7dHlwZToiVWludDgiLG5hbWU6InBsYWNlZE9yaWVudGF0aW9uIn0se3R5cGU6IlVpbnQ4IixuYW1lOiJoaWRkZW4ifSx7dHlwZToiVWludDMyIixuYW1lOiJjcm9zc1RpbGVJRCJ9XSksSm4oW3t0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yWCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYW5jaG9yWSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToicmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6ImNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToibGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCJ9LHt0eXBlOiJJbnQxNiIsbmFtZToidmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJrZXkifSx7dHlwZToiVWludDE2IixuYW1lOiJ0ZXh0Qm94U3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InRleHRCb3hFbmRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJ2ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Imljb25Cb3hTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiaWNvbkJveEVuZEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiZmVhdHVyZUluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToibnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1WZXJ0aWNhbEdseXBoVmVydGljZXMifSx7dHlwZToiVWludDE2IixuYW1lOiJudW1JY29uVmVydGljZXMifSx7dHlwZToiVWludDMyIixuYW1lOiJjcm9zc1RpbGVJRCJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJ0ZXh0Qm94U2NhbGUifSx7dHlwZToiRmxvYXQzMiIsbmFtZToicmFkaWFsVGV4dE9mZnNldCJ9XSksSm4oW3t0eXBlOiJGbG9hdDMyIixuYW1lOiJvZmZzZXRYIn1dKSxKbihbe3R5cGU6IkludDE2IixuYW1lOiJ4In0se3R5cGU6IkludDE2IixuYW1lOiJ5In0se3R5cGU6IkludDE2IixuYW1lOiJ0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvciJ9XSk7dmFyIHNzPXsiISI6Ilx1ZmUxNSIsIiMiOiJcdWZmMDMiLCQ6Ilx1ZmYwNCIsIiUiOiJcdWZmMDUiLCImIjoiXHVmZjA2IiwiKCI6Ilx1ZmUzNSIsIikiOiJcdWZlMzYiLCIqIjoiXHVmZjBhIiwiKyI6Ilx1ZmYwYiIsIiwiOiJcdWZlMTAiLCItIjoiXHVmZTMyIiwiLiI6Ilx1MzBmYiIsIi8iOiJcdWZmMGYiLCI6IjoiXHVmZTEzIiwiOyI6Ilx1ZmUxNCIsIjwiOiJcdWZlM2YiLCI9IjoiXHVmZjFkIiwiPiI6Ilx1ZmU0MCIsIj8iOiJcdWZlMTYiLCJAIjoiXHVmZjIwIiwiWyI6Ilx1ZmU0NyIsIlxcIjoiXHVmZjNjIiwiXSI6Ilx1ZmU0OCIsIl4iOiJcdWZmM2UiLF86Ilx1ZmUzMyIsImAiOiJcdWZmNDAiLCJ7IjoiXHVmZTM3IiwifCI6Ilx1MjAxNSIsIn0iOiJcdWZlMzgiLCJ+IjoiXHVmZjVlIiwiXHhhMiI6Ilx1ZmZlMCIsIlx4YTMiOiJcdWZmZTEiLCJceGE1IjoiXHVmZmU1IiwiXHhhNiI6Ilx1ZmZlNCIsIlx4YWMiOiJcdWZmZTIiLCJceGFmIjoiXHVmZmUzIiwiXHUyMDEzIjoiXHVmZTMyIiwiXHUyMDE0IjoiXHVmZTMxIiwiXHUyMDE4IjoiXHVmZTQzIiwiXHUyMDE5IjoiXHVmZTQ0IiwiXHUyMDFjIjoiXHVmZTQxIiwiXHUyMDFkIjoiXHVmZTQyIiwiXHUyMDI2IjoiXHVmZTE5IiwiXHUyMDI3IjoiXHUzMGZiIiwiXHUyMGE5IjoiXHVmZmU2IiwiXHUzMDAxIjoiXHVmZTExIiwiXHUzMDAyIjoiXHVmZTEyIiwiXHUzMDA4IjoiXHVmZTNmIiwiXHUzMDA5IjoiXHVmZTQwIiwiXHUzMDBhIjoiXHVmZTNkIiwiXHUzMDBiIjoiXHVmZTNlIiwiXHUzMDBjIjoiXHVmZTQxIiwiXHUzMDBkIjoiXHVmZTQyIiwiXHUzMDBlIjoiXHVmZTQzIiwiXHUzMDBmIjoiXHVmZTQ0IiwiXHUzMDEwIjoiXHVmZTNiIiwiXHUzMDExIjoiXHVmZTNjIiwiXHUzMDE0IjoiXHVmZTM5IiwiXHUzMDE1IjoiXHVmZTNhIiwiXHUzMDE2IjoiXHVmZTE3IiwiXHUzMDE3IjoiXHVmZTE4IiwiXHVmZjAxIjoiXHVmZTE1IiwiXHVmZjA4IjoiXHVmZTM1IiwiXHVmZjA5IjoiXHVmZTM2IiwiXHVmZjBjIjoiXHVmZTEwIiwiXHVmZjBkIjoiXHVmZTMyIiwiXHVmZjBlIjoiXHUzMGZiIiwiXHVmZjFhIjoiXHVmZTEzIiwiXHVmZjFiIjoiXHVmZTE0IiwiXHVmZjFjIjoiXHVmZTNmIiwiXHVmZjFlIjoiXHVmZTQwIiwiXHVmZjFmIjoiXHVmZTE2IiwiXHVmZjNiIjoiXHVmZTQ3IiwiXHVmZjNkIjoiXHVmZTQ4IiwiXHVmZjNmIjoiXHVmZTMzIiwiXHVmZjViIjoiXHVmZTM3IiwiXHVmZjVjIjoiXHUyMDE1IiwiXHVmZjVkIjoiXHVmZTM4IiwiXHVmZjVmIjoiXHVmZTM1IiwiXHVmZjYwIjoiXHVmZTM2IiwiXHVmZjYxIjoiXHVmZTEyIiwiXHVmZjYyIjoiXHVmZTQxIiwiXHVmZjYzIjoiXHVmZTQyIn0sbHM9MjQsY3M9e2hvcml6b250YWw6MSx2ZXJ0aWNhbDoyLGhvcml6b250YWxPbmx5OjN9LHVzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PSIiLHRoaXMuc2VjdGlvbkluZGV4PVtdLHRoaXMuc2VjdGlvbnM9W119O2Z1bmN0aW9uIGhzKHQsZSxyLG4sYSxpLG8scyxsLGMsdSl7dmFyIGgsZj11cy5mcm9tRmVhdHVyZSh0LHIpO2M9PT1jcy52ZXJ0aWNhbCYmZi52ZXJ0aWNhbGl6ZVB1bmN0dWF0aW9uKCk7dmFyIHA9Q24ucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0LGQ9Q24ucHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0O2lmKHAmJjE9PT1mLnNlY3Rpb25zLmxlbmd0aCl7aD1bXTtmb3IodmFyIGc9MCx2PXAoZi50b1N0cmluZygpLG1zKGYscyxuLGUpKTtnPHYubGVuZ3RoO2crPTEpe3ZhciBtPXZbZ10seT1uZXcgdXM7eS50ZXh0PW0seS5zZWN0aW9ucz1mLnNlY3Rpb25zO2Zvcih2YXIgeD0wO3g8bS5sZW5ndGg7eCsrKXkuc2VjdGlvbkluZGV4LnB1c2goMCk7aC5wdXNoKHkpfX1lbHNlIGlmKGQpe2g9W107Zm9yKHZhciBiPTAsXz1kKGYudGV4dCxmLnNlY3Rpb25JbmRleCxtcyhmLHMsbixlKSk7YjxfLmxlbmd0aDtiKz0xKXt2YXIgdz1fW2JdLGs9bmV3IHVzO2sudGV4dD13WzBdLGsuc2VjdGlvbkluZGV4PXdbMV0say5zZWN0aW9ucz1mLnNlY3Rpb25zLGgucHVzaChrKX19ZWxzZSBoPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dC50ZXh0LGE9MCxpPTAsbz1lO2k8by5sZW5ndGg7aSs9MSl7dmFyIHM9b1tpXTtyLnB1c2godC5zdWJzdHJpbmcoYSxzKSksYT1zfXJldHVybiBhPG4ubGVuZ3RoJiZyLnB1c2godC5zdWJzdHJpbmcoYSxuLmxlbmd0aCkpLHJ9KGYsbXMoZixzLG4sZSkpO3ZhciBUPVtdLE09e3Bvc2l0aW9uZWRHbHlwaHM6VCx0ZXh0OmYudG9TdHJpbmcoKSx0b3A6bFsxXSxib3R0b206bFsxXSxsZWZ0OmxbMF0scmlnaHQ6bFswXSx3cml0aW5nTW9kZTpjLGxpbmVDb3VudDpoLmxlbmd0aCx5T2Zmc2V0Oi0xN307cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8scyxsKXtmb3IodmFyIGM9MCx1PXQueU9mZnNldCxoPTAsZj10LnBvc2l0aW9uZWRHbHlwaHMscD0icmlnaHQiPT09aT8xOiJsZWZ0Ij09PWk/MDouNSxkPTAsZz1yO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIHY9Z1tkXTt2LnRyaW0oKTt2YXIgbT12LmdldE1heFNjYWxlKCk7aWYodi5sZW5ndGgoKSl7Zm9yKHZhciB5PWYubGVuZ3RoLHg9MDt4PHYubGVuZ3RoKCk7eCsrKXt2YXIgYj12LmdldFNlY3Rpb24oeCksXz12LmdldFNlY3Rpb25JbmRleCh4KSx3PXYuZ2V0Q2hhckNvZGUoeCksaz0yNCoobS1iLnNjYWxlKSxUPWVbYi5mb250U3RhY2tdLE09VCYmVFt3XTtNJiYobz09PWNzLmhvcml6b250YWx8fCFsJiYhd24odyl8fGwmJihmc1t3XXx8KFM9dyx4bi5BcmFiaWMoUyl8fHhuWyJBcmFiaWMgU3VwcGxlbWVudCJdKFMpfHx4blsiQXJhYmljIEV4dGVuZGVkLUEiXShTKXx8eG5bIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSJdKFMpfHx4blsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIl0oUykpKT8oZi5wdXNoKHtnbHlwaDp3LHg6Yyx5OnUrayx2ZXJ0aWNhbDohMSxzY2FsZTpiLnNjYWxlLGZvbnRTdGFjazpiLmZvbnRTdGFjayxzZWN0aW9uSW5kZXg6X30pLGMrPU0ubWV0cmljcy5hZHZhbmNlKmIuc2NhbGUrcyk6KGYucHVzaCh7Z2x5cGg6dyx4OmMseTp1K2ssdmVydGljYWw6ITAsc2NhbGU6Yi5zY2FsZSxmb250U3RhY2s6Yi5mb250U3RhY2ssc2VjdGlvbkluZGV4Ol99KSxjKz1scypiLnNjYWxlK3MpKX1pZihmLmxlbmd0aCE9PXkpe3ZhciBBPWMtcztoPU1hdGgubWF4KEEsaCkseHMoZixlLHksZi5sZW5ndGgtMSxwKX1jPTAsdSs9biptfWVsc2UgdSs9bn12YXIgUyxFPXlzKGEpLEw9RS5ob3Jpem9udGFsQWxpZ24sQz1FLnZlcnRpY2FsQWxpZ247IWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8pe2Zvcih2YXIgcz0oZS1yKSphLGw9KC1uKm8rLjUpKmksYz0wO2M8dC5sZW5ndGg7YysrKXRbY10ueCs9cyx0W2NdLnkrPWx9KGYscCxMLEMsaCxuLHIubGVuZ3RoKTt2YXIgUD11LXQueU9mZnNldDt0LnRvcCs9LUMqUCx0LmJvdHRvbT10LnRvcCtQLHQubGVmdCs9LUwqaCx0LnJpZ2h0PXQubGVmdCtofShNLGUsaCxhLGksbyxjLHMsdSksISFULmxlbmd0aCYmTX11cy5mcm9tRmVhdHVyZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgdXMsbj0wO248dC5zZWN0aW9ucy5sZW5ndGg7bisrKXt2YXIgYT10LnNlY3Rpb25zW25dO3Iuc2VjdGlvbnMucHVzaCh7c2NhbGU6YS5zY2FsZXx8MSxmb250U3RhY2s6YS5mb250U3RhY2t8fGV9KSxyLnRleHQrPWEudGV4dDtmb3IodmFyIGk9MDtpPGEudGV4dC5sZW5ndGg7aSsrKXIuc2VjdGlvbkluZGV4LnB1c2gobil9cmV0dXJuIHJ9LHVzLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0Lmxlbmd0aH0sdXMucHJvdG90eXBlLmdldFNlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VjdGlvbnNbdGhpcy5zZWN0aW9uSW5kZXhbdF1dfSx1cy5wcm90b3R5cGUuZ2V0U2VjdGlvbkluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlY3Rpb25JbmRleFt0XX0sdXMucHJvdG90eXBlLmdldENoYXJDb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRleHQuY2hhckNvZGVBdCh0KX0sdXMucHJvdG90eXBlLnZlcnRpY2FsaXplUHVuY3R1YXRpb249ZnVuY3Rpb24oKXt0aGlzLnRleHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dC5jaGFyQ29kZUF0KHIrMSl8fG51bGwsYT10LmNoYXJDb2RlQXQoci0xKXx8bnVsbDtuJiZrbihuKSYmIXNzW3RbcisxXV18fGEmJmtuKGEpJiYhc3NbdFtyLTFdXXx8IXNzW3Rbcl1dP2UrPXRbcl06ZSs9c3NbdFtyXV19cmV0dXJuIGV9KHRoaXMudGV4dCl9LHVzLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy50ZXh0Lmxlbmd0aCYmZnNbdGhpcy50ZXh0LmNoYXJDb2RlQXQoZSldO2UrKyl0Kys7Zm9yKHZhciByPXRoaXMudGV4dC5sZW5ndGgsbj10aGlzLnRleHQubGVuZ3RoLTE7bj49MCYmbj49dCYmZnNbdGhpcy50ZXh0LmNoYXJDb2RlQXQobildO24tLSlyLS07dGhpcy50ZXh0PXRoaXMudGV4dC5zdWJzdHJpbmcodCxyKSx0aGlzLnNlY3Rpb25JbmRleD10aGlzLnNlY3Rpb25JbmRleC5zbGljZSh0LHIpfSx1cy5wcm90b3R5cGUuc3Vic3RyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHVzO3JldHVybiByLnRleHQ9dGhpcy50ZXh0LnN1YnN0cmluZyh0LGUpLHIuc2VjdGlvbkluZGV4PXRoaXMuc2VjdGlvbkluZGV4LnNsaWNlKHQsZSksci5zZWN0aW9ucz10aGlzLnNlY3Rpb25zLHJ9LHVzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHR9LHVzLnByb3RvdHlwZS5nZXRNYXhTY2FsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuc2VjdGlvbkluZGV4LnJlZHVjZShmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLm1heChlLHQuc2VjdGlvbnNbcl0uc2NhbGUpfSwwKX07dmFyIGZzPXs5OiEwLDEwOiEwLDExOiEwLDEyOiEwLDEzOiEwLDMyOiEwfSxwcz17fTtmdW5jdGlvbiBkcyh0LGUscixuKXt2YXIgYT1NYXRoLnBvdyh0LWUsMik7cmV0dXJuIG4/dDxlP2EvMjoyKmE6YStNYXRoLmFicyhyKSpyfWZ1bmN0aW9uIGdzKHQsZSxyKXt2YXIgbj0wO3JldHVybiAxMD09PXQmJihuLT0xZTQpLHImJihuKz0xNTApLDQwIT09dCYmNjUyODghPT10fHwobis9NTApLDQxIT09ZSYmNjUyODkhPT1lfHwobis9NTApLG59ZnVuY3Rpb24gdnModCxlLHIsbixhLGkpe2Zvcih2YXIgbz1udWxsLHM9ZHMoZSxyLGEsaSksbD0wLGM9bjtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0saD1kcyhlLXUueCxyLGEsaSkrdS5iYWRuZXNzO2g8PXMmJihvPXUscz1oKX1yZXR1cm57aW5kZXg6dCx4OmUscHJpb3JCcmVhazpvLGJhZG5lc3M6c319ZnVuY3Rpb24gbXModCxlLHIsbil7aWYoIXIpcmV0dXJuW107aWYoIXQpcmV0dXJuW107Zm9yKHZhciBhLGk9W10sbz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGE9MCxpPTA7aTx0Lmxlbmd0aCgpO2krKyl7dmFyIG89dC5nZXRTZWN0aW9uKGkpLHM9bltvLmZvbnRTdGFja10sbD1zJiZzW3QuZ2V0Q2hhckNvZGUoaSldO2wmJihhKz1sLm1ldHJpY3MuYWR2YW5jZSpvLnNjYWxlK2UpfXJldHVybiBhL01hdGgubWF4KDEsTWF0aC5jZWlsKGEvcikpfSh0LGUscixuKSxzPXQudGV4dC5pbmRleE9mKCJcdTIwMGIiKT49MCxsPTAsYz0wO2M8dC5sZW5ndGgoKTtjKyspe3ZhciB1PXQuZ2V0U2VjdGlvbihjKSxoPXQuZ2V0Q2hhckNvZGUoYyksZj1uW3UuZm9udFN0YWNrXSxwPWYmJmZbaF07aWYocCYmIWZzW2hdJiYobCs9cC5tZXRyaWNzLmFkdmFuY2UqdS5zY2FsZStlKSxjPHQubGVuZ3RoKCktMSl7dmFyIGQ9ISgoYT1oKTwxMTkwNHx8ISh4blsiQm9wb21vZm8gRXh0ZW5kZWQiXShhKXx8eG4uQm9wb21vZm8oYSl8fHhuWyJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyJdKGEpfHx4blsiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyJdKGEpfHx4blsiQ0pLIENvbXBhdGliaWxpdHkiXShhKXx8eG5bIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50Il0oYSl8fHhuWyJDSksgU3Ryb2tlcyJdKGEpfHx4blsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0oYSl8fHhuWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBIl0oYSl8fHhuWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIl0oYSl8fHhuWyJFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzIl0oYSl8fHhuWyJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyJdKGEpfHx4bi5IaXJhZ2FuYShhKXx8eG5bIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMiXShhKXx8eG5bIkthbmd4aSBSYWRpY2FscyJdKGEpfHx4blsiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyJdKGEpfHx4bi5LYXRha2FuYShhKXx8eG5bIlZlcnRpY2FsIEZvcm1zIl0oYSl8fHhuWyJZaSBSYWRpY2FscyJdKGEpfHx4blsiWWkgU3lsbGFibGVzIl0oYSkpKTsocHNbaF18fGQpJiZpLnB1c2godnMoYysxLGwsbyxpLGdzKGgsdC5nZXRDaGFyQ29kZShjKzEpLGQmJnMpLCExKSl9fXJldHVybiBmdW5jdGlvbiB0KGUpe3JldHVybiBlP3QoZS5wcmlvckJyZWFrKS5jb25jYXQoZS5pbmRleCk6W119KHZzKHQubGVuZ3RoKCksbCxvLGksMCwhMCkpfWZ1bmN0aW9uIHlzKHQpe3ZhciBlPS41LHI9LjU7c3dpdGNoKHQpe2Nhc2UicmlnaHQiOmNhc2UidG9wLXJpZ2h0IjpjYXNlImJvdHRvbS1yaWdodCI6ZT0xO2JyZWFrO2Nhc2UibGVmdCI6Y2FzZSJ0b3AtbGVmdCI6Y2FzZSJib3R0b20tbGVmdCI6ZT0wfXN3aXRjaCh0KXtjYXNlImJvdHRvbSI6Y2FzZSJib3R0b20tcmlnaHQiOmNhc2UiYm90dG9tLWxlZnQiOnI9MTticmVhaztjYXNlInRvcCI6Y2FzZSJ0b3AtcmlnaHQiOmNhc2UidG9wLWxlZnQiOnI9MH1yZXR1cm57aG9yaXpvbnRhbEFsaWduOmUsdmVydGljYWxBbGlnbjpyfX1mdW5jdGlvbiB4cyh0LGUscixuLGEpe2lmKGEpe3ZhciBpPXRbbl0sbz1lW2kuZm9udFN0YWNrXSxzPW8mJm9baS5nbHlwaF07aWYocylmb3IodmFyIGw9cy5tZXRyaWNzLmFkdmFuY2UqaS5zY2FsZSxjPSh0W25dLngrbCkqYSx1PXI7dTw9bjt1KyspdFt1XS54LT1jfX1wc1sxMF09ITAscHNbMzJdPSEwLHBzWzM4XT0hMCxwc1s0MF09ITAscHNbNDFdPSEwLHBzWzQzXT0hMCxwc1s0NV09ITAscHNbNDddPSEwLHBzWzE3M109ITAscHNbMTgzXT0hMCxwc1s4MjAzXT0hMCxwc1s4MjA4XT0hMCxwc1s4MjExXT0hMCxwc1s4MjMxXT0hMDt2YXIgYnM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbixhKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuYW5nbGU9bix2b2lkIDAhPT1hJiYodGhpcy5zZWdtZW50PWEpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLngsdGhpcy55LHRoaXMuYW5nbGUsdGhpcy5zZWdtZW50KX0sZX0oYSk7ZG4oIkFuY2hvciIsYnMpO3ZhciBfcz0yNTY7ZnVuY3Rpb24gd3ModCxlKXt2YXIgcj1lLmV4cHJlc3Npb247aWYoImNvbnN0YW50Ij09PXIua2luZClyZXR1cm57a2luZDoiY29uc3RhbnQiLGxheW91dFNpemU6ci5ldmFsdWF0ZShuZXcgUG4odCsxKSl9O2lmKCJzb3VyY2UiPT09ci5raW5kKXJldHVybntraW5kOiJzb3VyY2UifTtmb3IodmFyIG49ci56b29tU3RvcHMsYT1yLmludGVycG9sYXRpb25UeXBlLGk9MDtpPG4ubGVuZ3RoJiZuW2ldPD10OylpKys7Zm9yKHZhciBvPWk9TWF0aC5tYXgoMCxpLTEpO288bi5sZW5ndGgmJm5bb108dCsxOylvKys7bz1NYXRoLm1pbihuLmxlbmd0aC0xLG8pO3ZhciBzPW5baV0sbD1uW29dO3JldHVybiJjb21wb3NpdGUiPT09ci5raW5kP3traW5kOiJjb21wb3NpdGUiLG1pblpvb206cyxtYXhab29tOmwsaW50ZXJwb2xhdGlvblR5cGU6YX06e2tpbmQ6ImNhbWVyYSIsbWluWm9vbTpzLG1heFpvb206bCxtaW5TaXplOnIuZXZhbHVhdGUobmV3IFBuKHMpKSxtYXhTaXplOnIuZXZhbHVhdGUobmV3IFBuKGwpKSxpbnRlcnBvbGF0aW9uVHlwZTphfX1mdW5jdGlvbiBrcyh0LGUscil7dmFyIG49ZS51U2l6ZSxhPWUudVNpemVULGk9ci5sb3dlclNpemUsbz1yLnVwcGVyU2l6ZTtyZXR1cm4ic291cmNlIj09PXQua2luZD9pL19zOiJjb21wb3NpdGUiPT09dC5raW5kP3llKGkvX3Msby9fcyxhKTpufWZ1bmN0aW9uIFRzKHQsZSl7dmFyIHI9MCxuPTA7aWYoImNvbnN0YW50Ij09PXQua2luZCluPXQubGF5b3V0U2l6ZTtlbHNlIGlmKCJzb3VyY2UiIT09dC5raW5kKXt2YXIgYT10LmludGVycG9sYXRpb25UeXBlLGk9dC5taW5ab29tLG89dC5tYXhab29tLHM9YT9jKE5lLmludGVycG9sYXRpb25GYWN0b3IoYSxlLGksbyksMCwxKTowOyJjYW1lcmEiPT09dC5raW5kP249eWUodC5taW5TaXplLHQubWF4U2l6ZSxzKTpyPXN9cmV0dXJue3VTaXplVDpyLHVTaXplOm59fXZhciBNcz1PYmplY3QuZnJlZXplKHtnZXRTaXplRGF0YTp3cyxldmFsdWF0ZVNpemVGb3JGZWF0dXJlOmtzLGV2YWx1YXRlU2l6ZUZvclpvb206VHMsU0laRV9QQUNLX0ZBQ1RPUjpfc30pLEFzPUlvLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLFNzPVt7bmFtZToiYV9mYWRlX29wYWNpdHkiLGNvbXBvbmVudHM6MSx0eXBlOiJVaW50OCIsb2Zmc2V0OjB9XTtmdW5jdGlvbiBFcyh0LGUscixuLGEsaSxvLHMpe3QuZW1wbGFjZUJhY2soZSxyLE1hdGgucm91bmQoMzIqbiksTWF0aC5yb3VuZCgzMiphKSxpLG8scz9zWzBdOjAscz9zWzFdOjApfWZ1bmN0aW9uIExzKHQsZSxyKXt0LmVtcGxhY2VCYWNrKGUueCxlLnksciksdC5lbXBsYWNlQmFjayhlLngsZS55LHIpLHQuZW1wbGFjZUJhY2soZS54LGUueSxyKSx0LmVtcGxhY2VCYWNrKGUueCxlLnkscil9dmFyIENzPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IG5hLHRoaXMuaW5kZXhBcnJheT1uZXcgZGEsdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9dCx0aGlzLnNlZ21lbnRzPW5ldyBPYSx0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheT1uZXcgYWEsdGhpcy5vcGFjaXR5VmVydGV4QXJyYXk9bmV3IGlhLHRoaXMucGxhY2VkU3ltYm9sQXJyYXk9bmV3IHdhfTtDcy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQsZSxyLG4pe3ImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LGVzLm1lbWJlcnMpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXksZSksdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5LHJzLm1lbWJlcnMsITApLHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheSxTcywhMCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLml0ZW1TaXplPTEpLChyfHxuKSYmdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpfSxDcy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSx0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlci5kZXN0cm95KCkpfSxkbigiU3ltYm9sQnVmZmVycyIsQ3MpO3ZhciBQcz1mdW5jdGlvbih0LGUscil7dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgdCx0aGlzLmxheW91dEF0dHJpYnV0ZXM9ZSx0aGlzLmluZGV4QXJyYXk9bmV3IHIsdGhpcy5zZWdtZW50cz1uZXcgT2EsdGhpcy5jb2xsaXNpb25WZXJ0ZXhBcnJheT1uZXcgbGF9O1BzLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmxheW91dEF0dHJpYnV0ZXMpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpLHRoaXMuY29sbGlzaW9uVmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXksbnMubWVtYmVycywhMCl9LFBzLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCksdGhpcy5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIuZGVzdHJveSgpKX0sZG4oIkNvbGxpc2lvbkJ1ZmZlcnMiLFBzKTt2YXIgT3M9ZnVuY3Rpb24odCl7dGhpcy5jb2xsaXNpb25Cb3hBcnJheT10LmNvbGxpc2lvbkJveEFycmF5LHRoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXJzPXQubGF5ZXJzLHRoaXMubGF5ZXJJZHM9dGhpcy5sYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMucGl4ZWxSYXRpbz10LnBpeGVsUmF0aW8sdGhpcy5zb3VyY2VMYXllckluZGV4PXQuc291cmNlTGF5ZXJJbmRleCx0aGlzLmhhc1BhdHRlcm49ITEsdGhpcy5oYXNQYWludE92ZXJyaWRlcz0hMTt2YXIgZT10aGlzLmxheWVyc1swXS5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlczt0aGlzLnRleHRTaXplRGF0YT13cyh0aGlzLnpvb20sZVsidGV4dC1zaXplIl0pLHRoaXMuaWNvblNpemVEYXRhPXdzKHRoaXMuem9vbSxlWyJpY29uLXNpemUiXSk7dmFyIHI9dGhpcy5sYXllcnNbMF0ubGF5b3V0LG49ci5nZXQoInN5bWJvbC1zb3J0LWtleSIpLGE9ci5nZXQoInN5bWJvbC16LW9yZGVyIik7dGhpcy5zb3J0RmVhdHVyZXNCeUtleT0idmlld3BvcnQteSIhPT1hJiZ2b2lkIDAhPT1uLmNvbnN0YW50T3IoMSk7dmFyIGk9InZpZXdwb3J0LXkiPT09YXx8ImF1dG8iPT09YSYmIXRoaXMuc29ydEZlYXR1cmVzQnlLZXk7dGhpcy5zb3J0RmVhdHVyZXNCeVk9aSYmKHIuZ2V0KCJ0ZXh0LWFsbG93LW92ZXJsYXAiKXx8ci5nZXQoImljb24tYWxsb3ctb3ZlcmxhcCIpfHxyLmdldCgidGV4dC1pZ25vcmUtcGxhY2VtZW50Iil8fHIuZ2V0KCJpY29uLWlnbm9yZS1wbGFjZW1lbnQiKSksInBvaW50Ij09PXIuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IikmJih0aGlzLndyaXRpbmdNb2Rlcz1yLmdldCgidGV4dC13cml0aW5nLW1vZGUiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGNzW3RdfSkpLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcz10aGlzLmxheWVycy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNTdGF0ZURlcGVuZGVudCgpfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSksdGhpcy5zb3VyY2VJRD10LnNvdXJjZUlEfTtPcy5wcm90b3R5cGUuY3JlYXRlQXJyYXlzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sYXllcnNbMF0ubGF5b3V0O3RoaXMuaGFzUGFpbnRPdmVycmlkZXM9UnMuaGFzUGFpbnRPdmVycmlkZXModCksdGhpcy50ZXh0PW5ldyBDcyhuZXcgUWEoZXMubWVtYmVycyx0aGlzLmxheWVycyx0aGlzLnpvb20sZnVuY3Rpb24odCl7cmV0dXJuL150ZXh0Ly50ZXN0KHQpfSkpLHRoaXMuaWNvbj1uZXcgQ3MobmV3IFFhKGVzLm1lbWJlcnMsdGhpcy5sYXllcnMsdGhpcy56b29tLGZ1bmN0aW9uKHQpe3JldHVybi9eaWNvbi8udGVzdCh0KX0pKSx0aGlzLmNvbGxpc2lvbkJveD1uZXcgUHMoc2EsYXMubWVtYmVycyxnYSksdGhpcy5jb2xsaXNpb25DaXJjbGU9bmV3IFBzKHNhLGlzLm1lbWJlcnMsZGEpLHRoaXMuZ2x5cGhPZmZzZXRBcnJheT1uZXcgQWEsdGhpcy5saW5lVmVydGV4QXJyYXk9bmV3IEVhLHRoaXMuc3ltYm9sSW5zdGFuY2VzPW5ldyBUYX0sT3MucHJvdG90eXBlLmNhbGN1bGF0ZUdseXBoRGVwZW5kZW5jaWVzPWZ1bmN0aW9uKHQsZSxyLG4sYSl7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspaWYoZVt0LmNoYXJDb2RlQXQoaSldPSEwLChyfHxuKSYmYSl7dmFyIG89c3NbdC5jaGFyQXQoaSldO28mJihlW28uY2hhckNvZGVBdCgwKV09ITApfX0sT3MucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sYXllcnNbMF0sbj1yLmxheW91dCxhPW4uZ2V0KCJ0ZXh0LWZvbnQiKSxpPW4uZ2V0KCJ0ZXh0LWZpZWxkIiksbz1uLmdldCgiaWNvbi1pbWFnZSIpLHM9KCJjb25zdGFudCIhPT1pLnZhbHVlLmtpbmR8fGkudmFsdWUudmFsdWUudG9TdHJpbmcoKS5sZW5ndGg+MCkmJigiY29uc3RhbnQiIT09YS52YWx1ZS5raW5kfHxhLnZhbHVlLnZhbHVlLmxlbmd0aD4wKSxsPSJjb25zdGFudCIhPT1vLnZhbHVlLmtpbmR8fG8udmFsdWUudmFsdWUmJm8udmFsdWUudmFsdWUubGVuZ3RoPjAsYz1uLmdldCgic3ltYm9sLXNvcnQta2V5Iik7aWYodGhpcy5mZWF0dXJlcz1bXSxzfHxsKXtmb3IodmFyIHU9ZS5pY29uRGVwZW5kZW5jaWVzLGg9ZS5nbHlwaERlcGVuZGVuY2llcyxmPW5ldyBQbih0aGlzLnpvb20pLHA9MCxkPXQ7cDxkLmxlbmd0aDtwKz0xKXt2YXIgZz1kW3BdLHY9Zy5mZWF0dXJlLG09Zy5pbmRleCx5PWcuc291cmNlTGF5ZXJJbmRleDtpZihyLl9mZWF0dXJlRmlsdGVyKGYsdikpe3ZhciB4PXZvaWQgMDtpZihzKXt2YXIgYj1yLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucygidGV4dC1maWVsZCIsdik7eD1vcyhiIGluc3RhbmNlb2YgSnQ/YjpKdC5mcm9tU3RyaW5nKGIpLHIsdil9dmFyIF89dm9pZCAwO2lmKGwmJihfPXIuZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zKCJpY29uLWltYWdlIix2KSkseHx8Xyl7dmFyIHc9dGhpcy5zb3J0RmVhdHVyZXNCeUtleT9jLmV2YWx1YXRlKHYse30pOnZvaWQgMCxrPXt0ZXh0OngsaWNvbjpfLGluZGV4Om0sc291cmNlTGF5ZXJJbmRleDp5LGdlb21ldHJ5Om5pKHYpLHByb3BlcnRpZXM6di5wcm9wZXJ0aWVzLHR5cGU6QXNbdi50eXBlXSxzb3J0S2V5Ond9O2lmKHZvaWQgMCE9PXYuaWQmJihrLmlkPXYuaWQpLHRoaXMuZmVhdHVyZXMucHVzaChrKSxfJiYodVtfXT0hMCkseCl7dmFyIFQ9YS5ldmFsdWF0ZSh2LHt9KS5qb2luKCIsIiksTT0ibWFwIj09PW4uZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpJiYicG9pbnQiIT09bi5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKTt0aGlzLmFsbG93VmVydGljYWxQbGFjZW1lbnQ9dGhpcy53cml0aW5nTW9kZXMmJnRoaXMud3JpdGluZ01vZGVzLmluZGV4T2YoY3MudmVydGljYWwpPj0wO2Zvcih2YXIgQT0wLFM9eC5zZWN0aW9ucztBPFMubGVuZ3RoO0ErPTEpe3ZhciBFPVNbQV0sTD1ibih4LnRvU3RyaW5nKCkpLEM9RS5mb250U3RhY2t8fFQsUD1oW0NdPWhbQ118fHt9O3RoaXMuY2FsY3VsYXRlR2x5cGhEZXBlbmRlbmNpZXMoRS50ZXh0LFAsTSx0aGlzLmFsbG93VmVydGljYWxQbGFjZW1lbnQsTCl9fX19fSJsaW5lIj09PW4uZ2V0KCJzeW1ib2wtcGxhY2VtZW50IikmJih0aGlzLmZlYXR1cmVzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9e30sbj1bXSxhPTA7ZnVuY3Rpb24gaShlKXtuLnB1c2godFtlXSksYSsrfWZ1bmN0aW9uIG8odCxlLGEpe3ZhciBpPXJbdF07cmV0dXJuIGRlbGV0ZSByW3RdLHJbZV09aSxuW2ldLmdlb21ldHJ5WzBdLnBvcCgpLG5baV0uZ2VvbWV0cnlbMF09bltpXS5nZW9tZXRyeVswXS5jb25jYXQoYVswXSksaX1mdW5jdGlvbiBzKHQscixhKXt2YXIgaT1lW3JdO3JldHVybiBkZWxldGUgZVtyXSxlW3RdPWksbltpXS5nZW9tZXRyeVswXS5zaGlmdCgpLG5baV0uZ2VvbWV0cnlbMF09YVswXS5jb25jYXQobltpXS5nZW9tZXRyeVswXSksaX1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj1yP2VbMF1bZVswXS5sZW5ndGgtMV06ZVswXVswXTtyZXR1cm4gdCsiOiIrbi54KyI6IituLnl9Zm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciB1PXRbY10saD11Lmdlb21ldHJ5LGY9dS50ZXh0P3UudGV4dC50b1N0cmluZygpOm51bGw7aWYoZil7dmFyIHA9bChmLGgpLGQ9bChmLGgsITApO2lmKHAgaW4gciYmZCBpbiBlJiZyW3BdIT09ZVtkXSl7dmFyIGc9cyhwLGQsaCksdj1vKHAsZCxuW2ddLmdlb21ldHJ5KTtkZWxldGUgZVtwXSxkZWxldGUgcltkXSxyW2woZixuW3ZdLmdlb21ldHJ5LCEwKV09dixuW2ddLmdlb21ldHJ5PW51bGx9ZWxzZSBwIGluIHI/byhwLGQsaCk6ZCBpbiBlP3MocCxkLGgpOihpKGMpLGVbcF09YS0xLHJbZF09YS0xKX1lbHNlIGkoYyl9cmV0dXJuIG4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdlb21ldHJ5fSl9KHRoaXMuZmVhdHVyZXMpKSx0aGlzLnNvcnRGZWF0dXJlc0J5S2V5JiZ0aGlzLmZlYXR1cmVzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pfX0sT3MucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgmJih0aGlzLnRleHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLmxheWVycyxyKSx0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLmxheWVycyxyKSl9LE9zLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGh9LE9zLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMudGV4dC5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWR8fHRoaXMuaWNvbi5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWR9LE9zLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7dGhpcy51cGxvYWRlZHx8KHRoaXMuY29sbGlzaW9uQm94LnVwbG9hZCh0KSx0aGlzLmNvbGxpc2lvbkNpcmNsZS51cGxvYWQodCkpLHRoaXMudGV4dC51cGxvYWQodCx0aGlzLnNvcnRGZWF0dXJlc0J5WSwhdGhpcy51cGxvYWRlZCx0aGlzLnRleHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkKSx0aGlzLmljb24udXBsb2FkKHQsdGhpcy5zb3J0RmVhdHVyZXNCeVksIXRoaXMudXBsb2FkZWQsdGhpcy5pY29uLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZCksdGhpcy51cGxvYWRlZD0hMH0sT3MucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLnRleHQuZGVzdHJveSgpLHRoaXMuaWNvbi5kZXN0cm95KCksdGhpcy5jb2xsaXNpb25Cb3guZGVzdHJveSgpLHRoaXMuY29sbGlzaW9uQ2lyY2xlLmRlc3Ryb3koKX0sT3MucHJvdG90eXBlLmFkZFRvTGluZVZlcnRleEFycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5saW5lVmVydGV4QXJyYXkubGVuZ3RoO2lmKHZvaWQgMCE9PXQuc2VnbWVudCl7Zm9yKHZhciBuPXQuZGlzdChlW3Quc2VnbWVudCsxXSksYT10LmRpc3QoZVt0LnNlZ21lbnRdKSxpPXt9LG89dC5zZWdtZW50KzE7bzxlLmxlbmd0aDtvKyspaVtvXT17eDplW29dLngseTplW29dLnksdGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3I6bn0sbzxlLmxlbmd0aC0xJiYobis9ZVtvKzFdLmRpc3QoZVtvXSkpO2Zvcih2YXIgcz10LnNlZ21lbnR8fDA7cz49MDtzLS0paVtzXT17eDplW3NdLngseTplW3NdLnksdGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3I6YX0scz4wJiYoYSs9ZVtzLTFdLmRpc3QoZVtzXSkpO2Zvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1pW2xdO3RoaXMubGluZVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKGMueCxjLnksYy50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcil9fXJldHVybntsaW5lU3RhcnRJbmRleDpyLGxpbmVMZW5ndGg6dGhpcy5saW5lVmVydGV4QXJyYXkubGVuZ3RoLXJ9fSxPcy5wcm90b3R5cGUuYWRkU3ltYm9scz1mdW5jdGlvbih0LGUscixuLGEsaSxvLHMsbCxjKXt2YXIgdT10aGlzLGg9dC5pbmRleEFycmF5LGY9dC5sYXlvdXRWZXJ0ZXhBcnJheSxwPXQuZHluYW1pY0xheW91dFZlcnRleEFycmF5LGQ9dC5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0KmUubGVuZ3RoLHQubGF5b3V0VmVydGV4QXJyYXksdC5pbmRleEFycmF5LGkuc29ydEtleSksZz10aGlzLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoLHY9ZC52ZXJ0ZXhMZW5ndGgsbT10aGlzLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJm89PT1jcy52ZXJ0aWNhbD9NYXRoLlBJLzI6MCx5PWZ1bmN0aW9uKHQpe3ZhciBlPXQudGwsbj10LnRyLGE9dC5ibCxpPXQuYnIsbz10LnRleCxsPWQudmVydGV4TGVuZ3RoLGM9dC5nbHlwaE9mZnNldFsxXTtFcyhmLHMueCxzLnksZS54LGMrZS55LG8ueCxvLnksciksRXMoZixzLngscy55LG4ueCxjK24ueSxvLngrby53LG8ueSxyKSxFcyhmLHMueCxzLnksYS54LGMrYS55LG8ueCxvLnkrby5oLHIpLEVzKGYscy54LHMueSxpLngsYytpLnksby54K28udyxvLnkrby5oLHIpLExzKHAscyxtKSxoLmVtcGxhY2VCYWNrKGwsbCsxLGwrMiksaC5lbXBsYWNlQmFjayhsKzEsbCsyLGwrMyksZC52ZXJ0ZXhMZW5ndGgrPTQsZC5wcmltaXRpdmVMZW5ndGgrPTIsdS5nbHlwaE9mZnNldEFycmF5LmVtcGxhY2VCYWNrKHQuZ2x5cGhPZmZzZXRbMF0pfTtpZihpLnRleHQmJmkudGV4dC5zZWN0aW9ucyl7dmFyIHg9aS50ZXh0LnNlY3Rpb25zO2lmKHRoaXMuaGFzUGFpbnRPdmVycmlkZXMpe2Zvcih2YXIgYixfPWZ1bmN0aW9uKGUscil7dm9pZCAwPT09Ynx8Yj09PWUmJiFyfHx0LnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHQubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLGksaS5pbmRleCx7fSx4W2JdKSxiPWV9LHc9MCxrPWU7dzxrLmxlbmd0aDt3Kz0xKXt2YXIgVD1rW3ddO18oVC5zZWN0aW9uSW5kZXgsITEpLHkoVCl9XyhiLCEwKX1lbHNle2Zvcih2YXIgTT0wLEE9ZTtNPEEubGVuZ3RoO00rPTEpeShBW01dKTt0LnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHQubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLGksaS5pbmRleCx7fSx4WzBdKX19ZWxzZXtmb3IodmFyIFM9MCxFPWU7UzxFLmxlbmd0aDtTKz0xKXkoRVtTXSk7dC5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0LmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCxpLGkuaW5kZXgse30pfXQucGxhY2VkU3ltYm9sQXJyYXkuZW1wbGFjZUJhY2socy54LHMueSxnLHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGgtZyx2LGwsYyxzLnNlZ21lbnQscj9yWzBdOjAscj9yWzFdOjAsblswXSxuWzFdLG8sMCwhMSwwKX0sT3MucHJvdG90eXBlLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleD1mdW5jdGlvbih0LGUscixuLGEsaSl7cmV0dXJuIGUuZW1wbGFjZUJhY2soMCwwKSx0LmVtcGxhY2VCYWNrKHIueCxyLnksbixhLE1hdGgucm91bmQoaS54KSxNYXRoLnJvdW5kKGkueSkpfSxPcy5wcm90b3R5cGUuYWRkQ29sbGlzaW9uRGVidWdWZXJ0aWNlcz1mdW5jdGlvbih0LGUscixuLGksbyxzLGwpe3ZhciBjPWkuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCxpLmxheW91dFZlcnRleEFycmF5LGkuaW5kZXhBcnJheSksdT1jLnZlcnRleExlbmd0aCxoPWkubGF5b3V0VmVydGV4QXJyYXksZj1pLmNvbGxpc2lvblZlcnRleEFycmF5LHA9cy5hbmNob3JYLGQ9cy5hbmNob3JZO2lmKHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGgsZixvLHAsZCxuZXcgYSh0LGUpKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChoLGYsbyxwLGQsbmV3IGEocixlKSksdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgoaCxmLG8scCxkLG5ldyBhKHIsbikpLHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGgsZixvLHAsZCxuZXcgYSh0LG4pKSxjLnZlcnRleExlbmd0aCs9NCxsKXt2YXIgZz1pLmluZGV4QXJyYXk7Zy5lbXBsYWNlQmFjayh1LHUrMSx1KzIpLGcuZW1wbGFjZUJhY2sodSx1KzIsdSszKSxjLnByaW1pdGl2ZUxlbmd0aCs9Mn1lbHNle3ZhciB2PWkuaW5kZXhBcnJheTt2LmVtcGxhY2VCYWNrKHUsdSsxKSx2LmVtcGxhY2VCYWNrKHUrMSx1KzIpLHYuZW1wbGFjZUJhY2sodSsyLHUrMyksdi5lbXBsYWNlQmFjayh1KzMsdSksYy5wcmltaXRpdmVMZW5ndGgrPTR9fSxPcy5wcm90b3R5cGUuYWRkRGVidWdDb2xsaXNpb25Cb3hlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQ7bjxlO24rKyl7dmFyIGE9dGhpcy5jb2xsaXNpb25Cb3hBcnJheS5nZXQobiksaT1hLngxLG89YS55MSxzPWEueDIsbD1hLnkyLGM9YS5yYWRpdXM+MDt0aGlzLmFkZENvbGxpc2lvbkRlYnVnVmVydGljZXMoaSxvLHMsbCxjP3RoaXMuY29sbGlzaW9uQ2lyY2xlOnRoaXMuY29sbGlzaW9uQm94LGEuYW5jaG9yUG9pbnQscixjKX19LE9zLnByb3RvdHlwZS5nZW5lcmF0ZUNvbGxpc2lvbkRlYnVnQnVmZmVycz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO3QrKyl7dmFyIGU9dGhpcy5zeW1ib2xJbnN0YW5jZXMuZ2V0KHQpO3RoaXMuYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhlLnRleHRCb3hTdGFydEluZGV4LGUudGV4dEJveEVuZEluZGV4LGUpLHRoaXMuYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhlLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgsZS52ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCxlKSx0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoZS5pY29uQm94U3RhcnRJbmRleCxlLmljb25Cb3hFbmRJbmRleCxlKX19LE9zLnByb3RvdHlwZS5fZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlc0ZvclN5bWJvbD1mdW5jdGlvbih0LGUscixuLGEsaSxvKXtmb3IodmFyIHM9e30sbD1lO2w8cjtsKyspe3ZhciBjPXQuZ2V0KGwpO2lmKDA9PT1jLnJhZGl1cyl7cy50ZXh0Qm94PXt4MTpjLngxLHkxOmMueTEseDI6Yy54Mix5MjpjLnkyLGFuY2hvclBvaW50WDpjLmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6Yy5hbmNob3JQb2ludFl9LHMudGV4dEZlYXR1cmVJbmRleD1jLmZlYXR1cmVJbmRleDticmVha31zLnRleHRDaXJjbGVzfHwocy50ZXh0Q2lyY2xlcz1bXSxzLnRleHRGZWF0dXJlSW5kZXg9Yy5mZWF0dXJlSW5kZXgpLHMudGV4dENpcmNsZXMucHVzaChjLmFuY2hvclBvaW50WCxjLmFuY2hvclBvaW50WSxjLnJhZGl1cyxjLnNpZ25lZERpc3RhbmNlRnJvbUFuY2hvciwxKX1mb3IodmFyIHU9bjt1PGE7dSsrKXt2YXIgaD10LmdldCh1KTtpZigwPT09aC5yYWRpdXMpe3MudmVydGljYWxUZXh0Qm94PXt4MTpoLngxLHkxOmgueTEseDI6aC54Mix5MjpoLnkyLGFuY2hvclBvaW50WDpoLmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6aC5hbmNob3JQb2ludFl9LHMudmVydGljYWxUZXh0RmVhdHVyZUluZGV4PWguZmVhdHVyZUluZGV4O2JyZWFrfX1mb3IodmFyIGY9aTtmPG87ZisrKXt2YXIgcD10LmdldChmKTtpZigwPT09cC5yYWRpdXMpe3MuaWNvbkJveD17eDE6cC54MSx5MTpwLnkxLHgyOnAueDIseTI6cC55MixhbmNob3JQb2ludFg6cC5hbmNob3JQb2ludFgsYW5jaG9yUG9pbnRZOnAuYW5jaG9yUG9pbnRZfSxzLmljb25GZWF0dXJlSW5kZXg9cC5mZWF0dXJlSW5kZXg7YnJlYWt9fXJldHVybiBzfSxPcy5wcm90b3R5cGUuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcz1mdW5jdGlvbih0KXt0aGlzLmNvbGxpc2lvbkFycmF5cz1bXTtmb3IodmFyIGU9MDtlPHRoaXMuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDtlKyspe3ZhciByPXRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldChlKTt0aGlzLmNvbGxpc2lvbkFycmF5cy5wdXNoKHRoaXMuX2Rlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXNGb3JTeW1ib2wodCxyLnRleHRCb3hTdGFydEluZGV4LHIudGV4dEJveEVuZEluZGV4LHIudmVydGljYWxUZXh0Qm94U3RhcnRJbmRleCxyLnZlcnRpY2FsVGV4dEJveEVuZEluZGV4LHIuaWNvbkJveFN0YXJ0SW5kZXgsci5pY29uQm94RW5kSW5kZXgpKX19LE9zLnByb3RvdHlwZS5oYXNUZXh0RGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LE9zLnByb3RvdHlwZS5oYXNJY29uRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmljb24uc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjB9LE9zLnByb3RvdHlwZS5oYXNDb2xsaXNpb25Cb3hEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sbGlzaW9uQm94LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxPcy5wcm90b3R5cGUuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbGxpc2lvbkNpcmNsZS5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MH0sT3MucHJvdG90eXBlLmFkZEluZGljZXNGb3JQbGFjZWRUZXh0U3ltYm9sPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHQpLHI9ZS52ZXJ0ZXhTdGFydEluZGV4KzQqZS5udW1HbHlwaHMsbj1lLnZlcnRleFN0YXJ0SW5kZXg7bjxyO24rPTQpdGhpcy50ZXh0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2sobixuKzEsbisyKSx0aGlzLnRleHQuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhuKzEsbisyLG4rMyl9LE9zLnByb3RvdHlwZS5nZXRTb3J0ZWRTeW1ib2xJbmRleGVzPWZ1bmN0aW9uKHQpe2lmKHRoaXMuc29ydGVkQW5nbGU9PT10JiZ2b2lkIDAhPT10aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcylyZXR1cm4gdGhpcy5zeW1ib2xJbnN0YW5jZUluZGV4ZXM7Zm9yKHZhciBlPU1hdGguc2luKHQpLHI9TWF0aC5jb3ModCksbj1bXSxhPVtdLGk9W10sbz0wO288dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoOysrbyl7aS5wdXNoKG8pO3ZhciBzPXRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldChvKTtuLnB1c2goMHxNYXRoLnJvdW5kKGUqcy5hbmNob3JYK3Iqcy5hbmNob3JZKSksYS5wdXNoKHMuZmVhdHVyZUluZGV4KX1yZXR1cm4gaS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5bdF0tbltlXXx8YVtlXS1hW3RdfSksaX0sT3MucHJvdG90eXBlLnNvcnRGZWF0dXJlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuc29ydEZlYXR1cmVzQnlZJiZ0aGlzLnNvcnRlZEFuZ2xlIT09dCYmISh0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjF8fHRoaXMuaWNvbi5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MSkpe3RoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzPXRoaXMuZ2V0U29ydGVkU3ltYm9sSW5kZXhlcyh0KSx0aGlzLnNvcnRlZEFuZ2xlPXQsdGhpcy50ZXh0LmluZGV4QXJyYXkuY2xlYXIoKSx0aGlzLmljb24uaW5kZXhBcnJheS5jbGVhcigpLHRoaXMuZmVhdHVyZVNvcnRPcmRlcj1bXTtmb3IodmFyIHI9MCxuPXRoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzO3I8bi5sZW5ndGg7cis9MSl7dmFyIGE9bltyXSxpPXRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldChhKTt0aGlzLmZlYXR1cmVTb3J0T3JkZXIucHVzaChpLmZlYXR1cmVJbmRleCksW2kucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsaS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsaS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XS5mb3JFYWNoKGZ1bmN0aW9uKHQscixuKXt0Pj0wJiZuLmluZGV4T2YodCk9PT1yJiZlLmFkZEluZGljZXNGb3JQbGFjZWRUZXh0U3ltYm9sKHQpfSksaS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleD49MCYmdGhpcy5hZGRJbmRpY2VzRm9yUGxhY2VkVGV4dFN5bWJvbChpLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KTt2YXIgbz10aGlzLmljb24ucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGEpO2lmKG8ubnVtR2x5cGhzKXt2YXIgcz1vLnZlcnRleFN0YXJ0SW5kZXg7dGhpcy5pY29uLmluZGV4QXJyYXkuZW1wbGFjZUJhY2socyxzKzEscysyKSx0aGlzLmljb24uaW5kZXhBcnJheS5lbXBsYWNlQmFjayhzKzEscysyLHMrMyl9fXRoaXMudGV4dC5pbmRleEJ1ZmZlciYmdGhpcy50ZXh0LmluZGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy50ZXh0LmluZGV4QXJyYXkpLHRoaXMuaWNvbi5pbmRleEJ1ZmZlciYmdGhpcy5pY29uLmluZGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy5pY29uLmluZGV4QXJyYXkpfX0sZG4oIlN5bWJvbEJ1Y2tldCIsT3Mse29taXQ6WyJsYXllcnMiLCJjb2xsaXNpb25Cb3hBcnJheSIsImZlYXR1cmVzIiwiY29tcGFyZVRleHQiXX0pLE9zLk1BWF9HTFlQSFM9NjU1MzUsT3MuYWRkRHluYW1pY0F0dHJpYnV0ZXM9THM7dmFyIHpzPW5ldyBHbih7InN5bWJvbC1wbGFjZW1lbnQiOm5ldyBqbihUdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtcGxhY2VtZW50Il0pLCJzeW1ib2wtc3BhY2luZyI6bmV3IGpuKFR0LmxheW91dF9zeW1ib2xbInN5bWJvbC1zcGFjaW5nIl0pLCJzeW1ib2wtYXZvaWQtZWRnZXMiOm5ldyBqbihUdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtYXZvaWQtZWRnZXMiXSksInN5bWJvbC1zb3J0LWtleSI6bmV3IFZuKFR0LmxheW91dF9zeW1ib2xbInN5bWJvbC1zb3J0LWtleSJdKSwic3ltYm9sLXotb3JkZXIiOm5ldyBqbihUdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtei1vcmRlciJdKSwiaWNvbi1hbGxvdy1vdmVybGFwIjpuZXcgam4oVHQubGF5b3V0X3N5bWJvbFsiaWNvbi1hbGxvdy1vdmVybGFwIl0pLCJpY29uLWlnbm9yZS1wbGFjZW1lbnQiOm5ldyBqbihUdC5sYXlvdXRfc3ltYm9sWyJpY29uLWlnbm9yZS1wbGFjZW1lbnQiXSksImljb24tb3B0aW9uYWwiOm5ldyBqbihUdC5sYXlvdXRfc3ltYm9sWyJpY29uLW9wdGlvbmFsIl0pLCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCI6bmV3IGpuKFR0LmxheW91dF9zeW1ib2xbImljb24tcm90YXRpb24tYWxpZ25tZW50Il0pLCJpY29uLXNpemUiOm5ldyBWbihUdC5sYXlvdXRfc3ltYm9sWyJpY29uLXNpemUiXSksImljb24tdGV4dC1maXQiOm5ldyBqbihUdC5sYXlvdXRfc3ltYm9sWyJpY29uLXRleHQtZml0Il0pLCJpY29uLXRleHQtZml0LXBhZGRpbmciOm5ldyBqbihUdC5sYXlvdXRfc3ltYm9sWyJpY29uLXRleHQtZml0LXBhZGRpbmciXSksImljb24taW1hZ2UiOm5ldyBWbihUdC5sYXlvdXRfc3ltYm9sWyJpY29uLWltYWdlIl0pLCJpY29uLXJvdGF0ZSI6bmV3IFZuKFR0LmxheW91dF9zeW1ib2xbImljb24tcm90YXRlIl0pLCJpY29uLXBhZGRpbmciOm5ldyBqbihUdC5sYXlvdXRfc3ltYm9sWyJpY29uLXBhZGRpbmciXSksImljb24ta2VlcC11cHJpZ2h0IjpuZXcgam4oVHQubGF5b3V0X3N5bWJvbFsiaWNvbi1rZWVwLXVwcmlnaHQiXSksImljb24tb2Zmc2V0IjpuZXcgVm4oVHQubGF5b3V0X3N5bWJvbFsiaWNvbi1vZmZzZXQiXSksImljb24tYW5jaG9yIjpuZXcgVm4oVHQubGF5b3V0X3N5bWJvbFsiaWNvbi1hbmNob3IiXSksImljb24tcGl0Y2gtYWxpZ25tZW50IjpuZXcgam4oVHQubGF5b3V0X3N5bWJvbFsiaWNvbi1waXRjaC1hbGlnbm1lbnQiXSksInRleHQtcGl0Y2gtYWxpZ25tZW50IjpuZXcgam4oVHQubGF5b3V0X3N5bWJvbFsidGV4dC1waXRjaC1hbGlnbm1lbnQiXSksInRleHQtcm90YXRpb24tYWxpZ25tZW50IjpuZXcgam4oVHQubGF5b3V0X3N5bWJvbFsidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiXSksInRleHQtZmllbGQiOm5ldyBWbihUdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWZpZWxkIl0pLCJ0ZXh0LWZvbnQiOm5ldyBWbihUdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWZvbnQiXSksInRleHQtc2l6ZSI6bmV3IFZuKFR0LmxheW91dF9zeW1ib2xbInRleHQtc2l6ZSJdKSwidGV4dC1tYXgtd2lkdGgiOm5ldyBWbihUdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LW1heC13aWR0aCJdKSwidGV4dC1saW5lLWhlaWdodCI6bmV3IGpuKFR0LmxheW91dF9zeW1ib2xbInRleHQtbGluZS1oZWlnaHQiXSksInRleHQtbGV0dGVyLXNwYWNpbmciOm5ldyBWbihUdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWxldHRlci1zcGFjaW5nIl0pLCJ0ZXh0LWp1c3RpZnkiOm5ldyBWbihUdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWp1c3RpZnkiXSksInRleHQtcmFkaWFsLW9mZnNldCI6bmV3IFZuKFR0LmxheW91dF9zeW1ib2xbInRleHQtcmFkaWFsLW9mZnNldCJdKSwidGV4dC12YXJpYWJsZS1hbmNob3IiOm5ldyBqbihUdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXZhcmlhYmxlLWFuY2hvciJdKSwidGV4dC1hbmNob3IiOm5ldyBWbihUdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWFuY2hvciJdKSwidGV4dC1tYXgtYW5nbGUiOm5ldyBqbihUdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LW1heC1hbmdsZSJdKSwidGV4dC13cml0aW5nLW1vZGUiOm5ldyBqbihUdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXdyaXRpbmctbW9kZSJdKSwidGV4dC1yb3RhdGUiOm5ldyBWbihUdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXJvdGF0ZSJdKSwidGV4dC1wYWRkaW5nIjpuZXcgam4oVHQubGF5b3V0X3N5bWJvbFsidGV4dC1wYWRkaW5nIl0pLCJ0ZXh0LWtlZXAtdXByaWdodCI6bmV3IGpuKFR0LmxheW91dF9zeW1ib2xbInRleHQta2VlcC11cHJpZ2h0Il0pLCJ0ZXh0LXRyYW5zZm9ybSI6bmV3IFZuKFR0LmxheW91dF9zeW1ib2xbInRleHQtdHJhbnNmb3JtIl0pLCJ0ZXh0LW9mZnNldCI6bmV3IFZuKFR0LmxheW91dF9zeW1ib2xbInRleHQtb2Zmc2V0Il0pLCJ0ZXh0LWFsbG93LW92ZXJsYXAiOm5ldyBqbihUdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWFsbG93LW92ZXJsYXAiXSksInRleHQtaWdub3JlLXBsYWNlbWVudCI6bmV3IGpuKFR0LmxheW91dF9zeW1ib2xbInRleHQtaWdub3JlLXBsYWNlbWVudCJdKSwidGV4dC1vcHRpb25hbCI6bmV3IGpuKFR0LmxheW91dF9zeW1ib2xbInRleHQtb3B0aW9uYWwiXSl9KSxJcz17cGFpbnQ6bmV3IEduKHsiaWNvbi1vcGFjaXR5IjpuZXcgVm4oVHQucGFpbnRfc3ltYm9sWyJpY29uLW9wYWNpdHkiXSksImljb24tY29sb3IiOm5ldyBWbihUdC5wYWludF9zeW1ib2xbImljb24tY29sb3IiXSksImljb24taGFsby1jb2xvciI6bmV3IFZuKFR0LnBhaW50X3N5bWJvbFsiaWNvbi1oYWxvLWNvbG9yIl0pLCJpY29uLWhhbG8td2lkdGgiOm5ldyBWbihUdC5wYWludF9zeW1ib2xbImljb24taGFsby13aWR0aCJdKSwiaWNvbi1oYWxvLWJsdXIiOm5ldyBWbihUdC5wYWludF9zeW1ib2xbImljb24taGFsby1ibHVyIl0pLCJpY29uLXRyYW5zbGF0ZSI6bmV3IGpuKFR0LnBhaW50X3N5bWJvbFsiaWNvbi10cmFuc2xhdGUiXSksImljb24tdHJhbnNsYXRlLWFuY2hvciI6bmV3IGpuKFR0LnBhaW50X3N5bWJvbFsiaWNvbi10cmFuc2xhdGUtYW5jaG9yIl0pLCJ0ZXh0LW9wYWNpdHkiOm5ldyBWbihUdC5wYWludF9zeW1ib2xbInRleHQtb3BhY2l0eSJdKSwidGV4dC1jb2xvciI6bmV3IFZuKFR0LnBhaW50X3N5bWJvbFsidGV4dC1jb2xvciJdLHtydW50aW1lVHlwZTpGdCxnZXRPdmVycmlkZTpmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0Q29sb3J9LGhhc092ZXJyaWRlOmZ1bmN0aW9uKHQpe3JldHVybiEhdC50ZXh0Q29sb3J9fSksInRleHQtaGFsby1jb2xvciI6bmV3IFZuKFR0LnBhaW50X3N5bWJvbFsidGV4dC1oYWxvLWNvbG9yIl0pLCJ0ZXh0LWhhbG8td2lkdGgiOm5ldyBWbihUdC5wYWludF9zeW1ib2xbInRleHQtaGFsby13aWR0aCJdKSwidGV4dC1oYWxvLWJsdXIiOm5ldyBWbihUdC5wYWludF9zeW1ib2xbInRleHQtaGFsby1ibHVyIl0pLCJ0ZXh0LXRyYW5zbGF0ZSI6bmV3IGpuKFR0LnBhaW50X3N5bWJvbFsidGV4dC10cmFuc2xhdGUiXSksInRleHQtdHJhbnNsYXRlLWFuY2hvciI6bmV3IGpuKFR0LnBhaW50X3N5bWJvbFsidGV4dC10cmFuc2xhdGUtYW5jaG9yIl0pfSksbGF5b3V0OnpzfSxEcz1mdW5jdGlvbih0KXt0aGlzLnR5cGU9dC5wcm9wZXJ0eS5vdmVycmlkZXM/dC5wcm9wZXJ0eS5vdmVycmlkZXMucnVudGltZVR5cGU6enQsdGhpcy5kZWZhdWx0VmFsdWU9dH07RHMucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2lmKHQuZm9ybWF0dGVkU2VjdGlvbil7dmFyIGU9dGhpcy5kZWZhdWx0VmFsdWUucHJvcGVydHkub3ZlcnJpZGVzO2lmKGUmJmUuaGFzT3ZlcnJpZGUodC5mb3JtYXR0ZWRTZWN0aW9uKSlyZXR1cm4gZS5nZXRPdmVycmlkZSh0LmZvcm1hdHRlZFNlY3Rpb24pfXJldHVybiB0LmZlYXR1cmUmJnQuZmVhdHVyZVN0YXRlP3RoaXMuZGVmYXVsdFZhbHVlLmV2YWx1YXRlKHQuZmVhdHVyZSx0LmZlYXR1cmVTdGF0ZSk6dGhpcy5kZWZhdWx0VmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbi5kZWZhdWx0fSxEcy5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuZGVmYXVsdFZhbHVlLmlzQ29uc3RhbnQoKXx8dCh0aGlzLmRlZmF1bHRWYWx1ZS52YWx1ZS5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24pfSxEcy5wcm90b3R5cGUucG9zc2libGVPdXRwdXRzPWZ1bmN0aW9uKCl7cmV0dXJuW3ZvaWQgMF19LERzLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZG4oIkZvcm1hdFNlY3Rpb25PdmVycmlkZSIsRHMse29taXQ6WyJkZWZhdWx0VmFsdWUiXX0pO3ZhciBScz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsSXMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbihlKXtpZih0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZS5jYWxsKHRoaXMsZSksImF1dG8iPT09dGhpcy5sYXlvdXQuZ2V0KCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCIpJiYoInBvaW50IiE9PXRoaXMubGF5b3V0LmdldCgic3ltYm9sLXBsYWNlbWVudCIpP3RoaXMubGF5b3V0Ll92YWx1ZXNbImljb24tcm90YXRpb24tYWxpZ25tZW50Il09Im1hcCI6dGhpcy5sYXlvdXQuX3ZhbHVlc1siaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiXT0idmlld3BvcnQiKSwiYXV0byI9PT10aGlzLmxheW91dC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikmJigicG9pbnQiIT09dGhpcy5sYXlvdXQuZ2V0KCJzeW1ib2wtcGxhY2VtZW50Iik/dGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiXT0ibWFwIjp0aGlzLmxheW91dC5fdmFsdWVzWyJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCJdPSJ2aWV3cG9ydCIpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSYmKHRoaXMubGF5b3V0Ll92YWx1ZXNbInRleHQtcGl0Y2gtYWxpZ25tZW50Il09dGhpcy5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpKSwiYXV0byI9PT10aGlzLmxheW91dC5nZXQoImljb24tcGl0Y2gtYWxpZ25tZW50IikmJih0aGlzLmxheW91dC5fdmFsdWVzWyJpY29uLXBpdGNoLWFsaWdubWVudCJdPXRoaXMubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSksInBvaW50Ij09PXRoaXMubGF5b3V0LmdldCgic3ltYm9sLXBsYWNlbWVudCIpKXt2YXIgcj10aGlzLmxheW91dC5nZXQoInRleHQtd3JpdGluZy1tb2RlIik7aWYocil7Zm9yKHZhciBuPVtdLGE9MCxpPXI7YTxpLmxlbmd0aDthKz0xKXt2YXIgbz1pW2FdO24uaW5kZXhPZihvKTwwJiZuLnB1c2gobyl9dGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC13cml0aW5nLW1vZGUiXT1ufWVsc2UgdGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC13cml0aW5nLW1vZGUiXT1bImhvcml6b250YWwiXX10aGlzLl9zZXRQYWludE92ZXJyaWRlcygpfSxlLnByb3RvdHlwZS5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheW91dC5nZXQodCkuZXZhbHVhdGUoZSx7fSksbj10aGlzLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzW3RdO3JldHVybiBuLmlzRGF0YURyaXZlbigpfHx3cihuLnZhbHVlKT9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIucmVwbGFjZSgveyhbXnt9XSspfS9nLGZ1bmN0aW9uKGUscil7cmV0dXJuIHIgaW4gdD9TdHJpbmcodFtyXSk6IiJ9KX0oZS5wcm9wZXJ0aWVzKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgT3ModCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuX3NldFBhaW50T3ZlcnJpZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAscj1Jcy5wYWludC5vdmVycmlkYWJsZVByb3BlcnRpZXM7dDxyLmxlbmd0aDt0Kz0xKXt2YXIgbj1yW3RdO2lmKGUuaGFzUGFpbnRPdmVycmlkZSh0aGlzLmxheW91dCxuKSl7dmFyIGEsaT10aGlzLnBhaW50LmdldChuKSxvPW5ldyBEcyhpKSxzPW5ldyBfcihvLGkucHJvcGVydHkuc3BlY2lmaWNhdGlvbik7YT0iY29uc3RhbnQiPT09aS52YWx1ZS5raW5kfHwic291cmNlIj09PWkudmFsdWUua2luZD9uZXcgVHIoInNvdXJjZSIscyk6bmV3IE1yKCJjb21wb3NpdGUiLHMsaS52YWx1ZS56b29tU3RvcHMsaS52YWx1ZS5faW50ZXJwb2xhdGlvblR5cGUpLHRoaXMucGFpbnQuX3ZhbHVlc1tuXT1uZXcgQm4oaS5wcm9wZXJ0eSxhLGkucGFyYW1ldGVycyl9fX0sZS5wcm90b3R5cGUuX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZT1mdW5jdGlvbih0LHIsbil7cmV0dXJuISghdGhpcy5sYXlvdXR8fHIuaXNEYXRhRHJpdmVuKCl8fG4uaXNEYXRhRHJpdmVuKCkpJiZlLmhhc1BhaW50T3ZlcnJpZGUodGhpcy5sYXlvdXQsdCl9LGUuaGFzUGFpbnRPdmVycmlkZT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2V0KCJ0ZXh0LWZpZWxkIiksbj1Jcy5wYWludC5wcm9wZXJ0aWVzW2VdLGE9ITEsaT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgaT1yW2VdO2lmKG4ub3ZlcnJpZGVzJiZuLm92ZXJyaWRlcy5oYXNPdmVycmlkZShpKSlyZXR1cm4gdm9pZChhPSEwKX19O2lmKCJjb25zdGFudCI9PT1yLnZhbHVlLmtpbmQmJnIudmFsdWUudmFsdWUgaW5zdGFuY2VvZiBKdClpKHIudmFsdWUudmFsdWUuc2VjdGlvbnMpO2Vsc2UgaWYoInNvdXJjZSI9PT1yLnZhbHVlLmtpbmQpe3ZhciBvPWZ1bmN0aW9uKHQpe2lmKCFhKWlmKHQgaW5zdGFuY2VvZiB0ZSYmUXQodC52YWx1ZSk9PT1WdCl7dmFyIGU9dC52YWx1ZTtpKGUuc2VjdGlvbnMpfWVsc2UgdCBpbnN0YW5jZW9mIGFlP2kodC5zZWN0aW9ucyk6dC5lYWNoQ2hpbGQobyl9LHM9ci52YWx1ZTtzLl9zdHlsZUV4cHJlc3Npb24mJm8ocy5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24pfXJldHVybiBhfSxlLmhhc1BhaW50T3ZlcnJpZGVzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0wLG49SXMucGFpbnQub3ZlcnJpZGFibGVQcm9wZXJ0aWVzO3I8bi5sZW5ndGg7cis9MSl7dmFyIGE9bltyXTtpZihlLmhhc1BhaW50T3ZlcnJpZGUodCxhKSlyZXR1cm4hMH1yZXR1cm4hMX0sZX0oWW4pLEZzPXtwYWludDpuZXcgR24oeyJiYWNrZ3JvdW5kLWNvbG9yIjpuZXcgam4oVHQucGFpbnRfYmFja2dyb3VuZFsiYmFja2dyb3VuZC1jb2xvciJdKSwiYmFja2dyb3VuZC1wYXR0ZXJuIjpuZXcgcW4oVHQucGFpbnRfYmFja2dyb3VuZFsiYmFja2dyb3VuZC1wYXR0ZXJuIl0pLCJiYWNrZ3JvdW5kLW9wYWNpdHkiOm5ldyBqbihUdC5wYWludF9iYWNrZ3JvdW5kWyJiYWNrZ3JvdW5kLW9wYWNpdHkiXSl9KX0sQnM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLEZzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oWW4pLE5zPXtwYWludDpuZXcgR24oeyJyYXN0ZXItb3BhY2l0eSI6bmV3IGpuKFR0LnBhaW50X3Jhc3RlclsicmFzdGVyLW9wYWNpdHkiXSksInJhc3Rlci1odWUtcm90YXRlIjpuZXcgam4oVHQucGFpbnRfcmFzdGVyWyJyYXN0ZXItaHVlLXJvdGF0ZSJdKSwicmFzdGVyLWJyaWdodG5lc3MtbWluIjpuZXcgam4oVHQucGFpbnRfcmFzdGVyWyJyYXN0ZXItYnJpZ2h0bmVzcy1taW4iXSksInJhc3Rlci1icmlnaHRuZXNzLW1heCI6bmV3IGpuKFR0LnBhaW50X3Jhc3RlclsicmFzdGVyLWJyaWdodG5lc3MtbWF4Il0pLCJyYXN0ZXItc2F0dXJhdGlvbiI6bmV3IGpuKFR0LnBhaW50X3Jhc3RlclsicmFzdGVyLXNhdHVyYXRpb24iXSksInJhc3Rlci1jb250cmFzdCI6bmV3IGpuKFR0LnBhaW50X3Jhc3RlclsicmFzdGVyLWNvbnRyYXN0Il0pLCJyYXN0ZXItcmVzYW1wbGluZyI6bmV3IGpuKFR0LnBhaW50X3Jhc3RlclsicmFzdGVyLXJlc2FtcGxpbmciXSksInJhc3Rlci1mYWRlLWR1cmF0aW9uIjpuZXcgam4oVHQucGFpbnRfcmFzdGVyWyJyYXN0ZXItZmFkZS1kdXJhdGlvbiJdKX0pfSxqcz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsTnMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShZbiksVnM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLHt9KSx0aGlzLmltcGxlbWVudGF0aW9uPWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmlzM0Q9ZnVuY3Rpb24oKXtyZXR1cm4iM2QiPT09dGhpcy5pbXBsZW1lbnRhdGlvbi5yZW5kZXJpbmdNb2RlfSxlLnByb3RvdHlwZS5oYXNPZmZzY3JlZW5QYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuaW1wbGVtZW50YXRpb24ucHJlcmVuZGVyfSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUudXBkYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5pbXBsZW1lbnRhdGlvbi5vbkFkZCYmdGhpcy5pbXBsZW1lbnRhdGlvbi5vbkFkZCh0LHQucGFpbnRlci5jb250ZXh0LmdsKX0sZS5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24odCl7dGhpcy5pbXBsZW1lbnRhdGlvbi5vblJlbW92ZSYmdGhpcy5pbXBsZW1lbnRhdGlvbi5vblJlbW92ZSh0LHQucGFpbnRlci5jb250ZXh0LmdsKX0sZX0oWW4pLFVzPXtjaXJjbGU6TWksaGVhdG1hcDpEaSxoaWxsc2hhZGU6RmksZmlsbDpUbywiZmlsbC1leHRydXNpb24iOlVvLGxpbmU6JG8sc3ltYm9sOlJzLGJhY2tncm91bmQ6QnMscmFzdGVyOmpzfTtmdW5jdGlvbiBxcyh0KXtmb3IodmFyIGU9MCxyPTAsbj0wLGE9dDtuPGEubGVuZ3RoO24rPTEpe3ZhciBpPWFbbl07ZSs9aS53KmkuaCxyPU1hdGgubWF4KHIsaS53KX10LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5oLXQuaH0pO2Zvcih2YXIgbz1be3g6MCx5OjAsdzpNYXRoLm1heChNYXRoLmNlaWwoTWF0aC5zcXJ0KGUvLjk1KSksciksaDoxLzB9XSxzPTAsbD0wLGM9MCx1PXQ7Yzx1Lmxlbmd0aDtjKz0xKWZvcih2YXIgaD11W2NdLGY9by5sZW5ndGgtMTtmPj0wO2YtLSl7dmFyIHA9b1tmXTtpZighKGgudz5wLnd8fGguaD5wLmgpKXtpZihoLng9cC54LGgueT1wLnksbD1NYXRoLm1heChsLGgueStoLmgpLHM9TWF0aC5tYXgocyxoLngraC53KSxoLnc9PT1wLncmJmguaD09PXAuaCl7dmFyIGQ9by5wb3AoKTtmPG8ubGVuZ3RoJiYob1tmXT1kKX1lbHNlIGguaD09PXAuaD8ocC54Kz1oLncscC53LT1oLncpOmgudz09PXAudz8ocC55Kz1oLmgscC5oLT1oLmgpOihvLnB1c2goe3g6cC54K2gudyx5OnAueSx3OnAudy1oLncsaDpoLmh9KSxwLnkrPWguaCxwLmgtPWguaCk7YnJlYWt9fXJldHVybnt3OnMsaDpsLGZpbGw6ZS8ocypsKXx8MH19dmFyIEhzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5waXhlbFJhdGlvLG49ZS52ZXJzaW9uO3RoaXMucGFkZGVkUmVjdD10LHRoaXMucGl4ZWxSYXRpbz1yLHRoaXMudmVyc2lvbj1ufSxHcz17dGw6e2NvbmZpZ3VyYWJsZTohMH0sYnI6e2NvbmZpZ3VyYWJsZTohMH0sdGxicjp7Y29uZmlndXJhYmxlOiEwfSxkaXNwbGF5U2l6ZTp7Y29uZmlndXJhYmxlOiEwfX07R3MudGwuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMucGFkZGVkUmVjdC54KzEsdGhpcy5wYWRkZWRSZWN0LnkrMV19LEdzLmJyLmdldD1mdW5jdGlvbigpe3JldHVyblt0aGlzLnBhZGRlZFJlY3QueCt0aGlzLnBhZGRlZFJlY3Qudy0xLHRoaXMucGFkZGVkUmVjdC55K3RoaXMucGFkZGVkUmVjdC5oLTFdfSxHcy50bGJyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRsLmNvbmNhdCh0aGlzLmJyKX0sR3MuZGlzcGxheVNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuWyh0aGlzLnBhZGRlZFJlY3Qudy0yKS90aGlzLnBpeGVsUmF0aW8sKHRoaXMucGFkZGVkUmVjdC5oLTIpL3RoaXMucGl4ZWxSYXRpb119LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEhzLnByb3RvdHlwZSxHcyk7dmFyIFlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e30sbj17fTt0aGlzLmhhdmVSZW5kZXJDYWxsYmFja3M9W107dmFyIGE9W107dGhpcy5hZGRJbWFnZXModCxyLGEpLHRoaXMuYWRkSW1hZ2VzKGUsbixhKTt2YXIgaT1xcyhhKSxvPWkudyxzPWkuaCxsPW5ldyBPaSh7d2lkdGg6b3x8MSxoZWlnaHQ6c3x8MX0pO2Zvcih2YXIgYyBpbiB0KXt2YXIgdT10W2NdLGg9cltjXS5wYWRkZWRSZWN0O09pLmNvcHkodS5kYXRhLGwse3g6MCx5OjB9LHt4OmgueCsxLHk6aC55KzF9LHUuZGF0YSl9Zm9yKHZhciBmIGluIGUpe3ZhciBwPWVbZl0sZD1uW2ZdLnBhZGRlZFJlY3QsZz1kLngrMSx2PWQueSsxLG09cC5kYXRhLndpZHRoLHk9cC5kYXRhLmhlaWdodDtPaS5jb3B5KHAuZGF0YSxsLHt4OjAseTowfSx7eDpnLHk6dn0scC5kYXRhKSxPaS5jb3B5KHAuZGF0YSxsLHt4OjAseTp5LTF9LHt4OmcseTp2LTF9LHt3aWR0aDptLGhlaWdodDoxfSksT2kuY29weShwLmRhdGEsbCx7eDowLHk6MH0se3g6Zyx5OnYreX0se3dpZHRoOm0saGVpZ2h0OjF9KSxPaS5jb3B5KHAuZGF0YSxsLHt4Om0tMSx5OjB9LHt4OmctMSx5OnZ9LHt3aWR0aDoxLGhlaWdodDp5fSksT2kuY29weShwLmRhdGEsbCx7eDowLHk6MH0se3g6ZyttLHk6dn0se3dpZHRoOjEsaGVpZ2h0Onl9KX10aGlzLmltYWdlPWwsdGhpcy5pY29uUG9zaXRpb25zPXIsdGhpcy5wYXR0ZXJuUG9zaXRpb25zPW59O1lzLnByb3RvdHlwZS5hZGRJbWFnZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiB0KXt2YXIgYT10W25dLGk9e3g6MCx5OjAsdzphLmRhdGEud2lkdGgrMixoOmEuZGF0YS5oZWlnaHQrMn07ci5wdXNoKGkpLGVbbl09bmV3IEhzKGksYSksYS5oYXNSZW5kZXJDYWxsYmFjayYmdGhpcy5oYXZlUmVuZGVyQ2FsbGJhY2tzLnB1c2gobil9fSxZcy5wcm90b3R5cGUucGF0Y2hVcGRhdGVkSW1hZ2VzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHQuZGlzcGF0Y2hSZW5kZXJDYWxsYmFja3ModGhpcy5oYXZlUmVuZGVyQ2FsbGJhY2tzKSx0LnVwZGF0ZWRJbWFnZXMpdGhpcy5wYXRjaFVwZGF0ZWRJbWFnZSh0aGlzLmljb25Qb3NpdGlvbnNbcl0sdC5nZXRJbWFnZShyKSxlKSx0aGlzLnBhdGNoVXBkYXRlZEltYWdlKHRoaXMucGF0dGVyblBvc2l0aW9uc1tyXSx0LmdldEltYWdlKHIpLGUpfSxZcy5wcm90b3R5cGUucGF0Y2hVcGRhdGVkSW1hZ2U9ZnVuY3Rpb24odCxlLHIpe2lmKHQmJmUmJnQudmVyc2lvbiE9PWUudmVyc2lvbil7dC52ZXJzaW9uPWUudmVyc2lvbjt2YXIgbj10LnRsLGE9blswXSxpPW5bMV07ci51cGRhdGUoZS5kYXRhLHZvaWQgMCx7eDphLHk6aX0pfX0sZG4oIkltYWdlUG9zaXRpb24iLEhzKSxkbigiSW1hZ2VBdGxhcyIsWXMpO3ZhciBXcz1zZWxmLkhUTUxJbWFnZUVsZW1lbnQsWHM9c2VsZi5IVE1MQ2FudmFzRWxlbWVudCxacz1zZWxmLkhUTUxWaWRlb0VsZW1lbnQsSnM9c2VsZi5JbWFnZURhdGEsS3M9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jb250ZXh0PXQsdGhpcy5mb3JtYXQ9cix0aGlzLnRleHR1cmU9dC5nbC5jcmVhdGVUZXh0dXJlKCksdGhpcy51cGRhdGUoZSxuKX07S3MucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dC53aWR0aCxhPXQuaGVpZ2h0LGk9ISh0aGlzLnNpemUmJnRoaXMuc2l6ZVswXT09PW4mJnRoaXMuc2l6ZVsxXT09PWF8fHIpLG89dGhpcy5jb250ZXh0LHM9by5nbDtpZih0aGlzLnVzZU1pcG1hcD1Cb29sZWFuKGUmJmUudXNlTWlwbWFwKSxzLmJpbmRUZXh0dXJlKHMuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLG8ucGl4ZWxTdG9yZVVucGFja0ZsaXBZLnNldCghMSksby5waXhlbFN0b3JlVW5wYWNrLnNldCgxKSxvLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldCh0aGlzLmZvcm1hdD09PXMuUkdCQSYmKCFlfHwhMSE9PWUucHJlbXVsdGlwbHkpKSxpKXRoaXMuc2l6ZT1bbixhXSx0IGluc3RhbmNlb2YgV3N8fHQgaW5zdGFuY2VvZiBYc3x8dCBpbnN0YW5jZW9mIFpzfHx0IGluc3RhbmNlb2YgSnM/cy50ZXhJbWFnZTJEKHMuVEVYVFVSRV8yRCwwLHRoaXMuZm9ybWF0LHRoaXMuZm9ybWF0LHMuVU5TSUdORURfQllURSx0KTpzLnRleEltYWdlMkQocy5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsbixhLDAsdGhpcy5mb3JtYXQscy5VTlNJR05FRF9CWVRFLHQuZGF0YSk7ZWxzZXt2YXIgbD1yfHx7eDowLHk6MH0sYz1sLngsdT1sLnk7dCBpbnN0YW5jZW9mIFdzfHx0IGluc3RhbmNlb2YgWHN8fHQgaW5zdGFuY2VvZiBac3x8dCBpbnN0YW5jZW9mIEpzP3MudGV4U3ViSW1hZ2UyRChzLlRFWFRVUkVfMkQsMCxjLHUscy5SR0JBLHMuVU5TSUdORURfQllURSx0KTpzLnRleFN1YkltYWdlMkQocy5URVhUVVJFXzJELDAsYyx1LG4sYSxzLlJHQkEscy5VTlNJR05FRF9CWVRFLHQuZGF0YSl9dGhpcy51c2VNaXBtYXAmJnRoaXMuaXNTaXplUG93ZXJPZlR3bygpJiZzLmdlbmVyYXRlTWlwbWFwKHMuVEVYVFVSRV8yRCl9LEtzLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmNvbnRleHQuZ2w7bi5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSxyIT09bi5MSU5FQVJfTUlQTUFQX05FQVJFU1R8fHRoaXMuaXNTaXplUG93ZXJPZlR3bygpfHwocj1uLkxJTkVBUiksdCE9PXRoaXMuZmlsdGVyJiYobi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfTUFHX0ZJTFRFUix0KSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLHJ8fHQpLHRoaXMuZmlsdGVyPXQpLGUhPT10aGlzLndyYXAmJihuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1MsZSksbi50ZXhQYXJhbWV0ZXJpKG4uVEVYVFVSRV8yRCxuLlRFWFRVUkVfV1JBUF9ULGUpLHRoaXMud3JhcD1lKX0sS3MucHJvdG90eXBlLmlzU2l6ZVBvd2VyT2ZUd289ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplWzBdPT09dGhpcy5zaXplWzFdJiZNYXRoLmxvZyh0aGlzLnNpemVbMF0pL01hdGguTE4yJTE9PTB9LEtzLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKSx0aGlzLnRleHR1cmU9bnVsbH07dmFyIFFzPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIGksbyxzPTgqYS1uLTEsbD0oMTw8cyktMSxjPWw+PjEsdT0tNyxoPXI/YS0xOjAsZj1yPy0xOjEscD10W2UraF07Zm9yKGgrPWYsaT1wJigxPDwtdSktMSxwPj49LXUsdSs9czt1PjA7aT0yNTYqaSt0W2UraF0saCs9Zix1LT04KTtmb3Iobz1pJigxPDwtdSktMSxpPj49LXUsdSs9bjt1PjA7bz0yNTYqbyt0W2UraF0saCs9Zix1LT04KTtpZigwPT09aSlpPTEtYztlbHNle2lmKGk9PT1sKXJldHVybiBvP05hTjoxLzAqKHA/LTE6MSk7bys9TWF0aC5wb3coMixuKSxpLT1jfXJldHVybihwPy0xOjEpKm8qTWF0aC5wb3coMixpLW4pfSwkcz1mdW5jdGlvbih0LGUscixuLGEsaSl7dmFyIG8scyxsLGM9OCppLWEtMSx1PSgxPDxjKS0xLGg9dT4+MSxmPTIzPT09YT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6aS0xLGQ9bj8xOi0xLGc9ZTwwfHwwPT09ZSYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhzPWlzTmFOKGUpPzE6MCxvPXUpOihvPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKGw9TWF0aC5wb3coMiwtbykpPDEmJihvLS0sbCo9MiksKGUrPW8raD49MT9mL2w6ZipNYXRoLnBvdygyLDEtaCkpKmw+PTImJihvKyssbC89MiksbytoPj11PyhzPTAsbz11KTpvK2g+PTE/KHM9KGUqbC0xKSpNYXRoLnBvdygyLGEpLG8rPWgpOihzPWUqTWF0aC5wb3coMixoLTEpKk1hdGgucG93KDIsYSksbz0wKSk7YT49ODt0W3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsYS09OCk7Zm9yKG89bzw8YXxzLGMrPWE7Yz4wO3RbcitwXT0yNTUmbyxwKz1kLG8vPTI1NixjLT04KTt0W3IrcC1kXXw9MTI4Kmd9LHRsPWVsO2Z1bmN0aW9uIGVsKHQpe3RoaXMuYnVmPUFycmF5QnVmZmVyLmlzVmlldyYmQXJyYXlCdWZmZXIuaXNWaWV3KHQpP3Q6bmV3IFVpbnQ4QXJyYXkodHx8MCksdGhpcy5wb3M9MCx0aGlzLnR5cGU9MCx0aGlzLmxlbmd0aD10aGlzLmJ1Zi5sZW5ndGh9ZnVuY3Rpb24gcmwodCl7cmV0dXJuIHQudHlwZT09PWVsLkJ5dGVzP3QucmVhZFZhcmludCgpK3QucG9zOnQucG9zKzF9ZnVuY3Rpb24gbmwodCxlLHIpe3JldHVybiByPzQyOTQ5NjcyOTYqZSsodD4+PjApOjQyOTQ5NjcyOTYqKGU+Pj4wKSsodD4+PjApfWZ1bmN0aW9uIGFsKHQsZSxyKXt2YXIgbj1lPD0xNjM4Mz8xOmU8PTIwOTcxNTE/MjplPD0yNjg0MzU0NTU/MzpNYXRoLmZsb29yKE1hdGgubG9nKGUpLyg3Kk1hdGguTE4yKSk7ci5yZWFsbG9jKG4pO2Zvcih2YXIgYT1yLnBvcy0xO2E+PXQ7YS0tKXIuYnVmW2Erbl09ci5idWZbYV19ZnVuY3Rpb24gaWwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlVmFyaW50KHRbcl0pfWZ1bmN0aW9uIG9sKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVNWYXJpbnQodFtyXSl9ZnVuY3Rpb24gc2wodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRmxvYXQodFtyXSl9ZnVuY3Rpb24gbGwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRG91YmxlKHRbcl0pfWZ1bmN0aW9uIGNsKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUJvb2xlYW4odFtyXSl9ZnVuY3Rpb24gdWwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRml4ZWQzMih0W3JdKX1mdW5jdGlvbiBobCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTRml4ZWQzMih0W3JdKX1mdW5jdGlvbiBmbCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGaXhlZDY0KHRbcl0pfWZ1bmN0aW9uIHBsKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVNGaXhlZDY0KHRbcl0pfWZ1bmN0aW9uIGRsKHQsZSl7cmV0dXJuKHRbZV18dFtlKzFdPDw4fHRbZSsyXTw8MTYpKzE2Nzc3MjE2KnRbZSszXX1mdW5jdGlvbiBnbCh0LGUscil7dFtyXT1lLHRbcisxXT1lPj4+OCx0W3IrMl09ZT4+PjE2LHRbciszXT1lPj4+MjR9ZnVuY3Rpb24gdmwodCxlKXtyZXR1cm4odFtlXXx0W2UrMV08PDh8dFtlKzJdPDwxNikrKHRbZSszXTw8MjQpfWVsLlZhcmludD0wLGVsLkZpeGVkNjQ9MSxlbC5CeXRlcz0yLGVsLkZpeGVkMzI9NSxlbC5wcm90b3R5cGU9e2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmJ1Zj1udWxsfSxyZWFkRmllbGRzOmZ1bmN0aW9uKHQsZSxyKXtmb3Iocj1yfHx0aGlzLmxlbmd0aDt0aGlzLnBvczxyOyl7dmFyIG49dGhpcy5yZWFkVmFyaW50KCksYT1uPj4zLGk9dGhpcy5wb3M7dGhpcy50eXBlPTcmbix0KGEsZSx0aGlzKSx0aGlzLnBvcz09PWkmJnRoaXMuc2tpcChuKX1yZXR1cm4gZX0scmVhZE1lc3NhZ2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZWFkRmllbGRzKHQsZSx0aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyl9LHJlYWRGaXhlZDMyOmZ1bmN0aW9uKCl7dmFyIHQ9ZGwodGhpcy5idWYsdGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkU0ZpeGVkMzI6ZnVuY3Rpb24oKXt2YXIgdD12bCh0aGlzLmJ1Zix0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz00LHR9LHJlYWRGaXhlZDY0OmZ1bmN0aW9uKCl7dmFyIHQ9ZGwodGhpcy5idWYsdGhpcy5wb3MpKzQyOTQ5NjcyOTYqZGwodGhpcy5idWYsdGhpcy5wb3MrNCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRTRml4ZWQ2NDpmdW5jdGlvbigpe3ZhciB0PWRsKHRoaXMuYnVmLHRoaXMucG9zKSs0Mjk0OTY3Mjk2KnZsKHRoaXMuYnVmLHRoaXMucG9zKzQpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkRmxvYXQ6ZnVuY3Rpb24oKXt2YXIgdD1Rcyh0aGlzLmJ1Zix0aGlzLnBvcywhMCwyMyw0KTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZERvdWJsZTpmdW5jdGlvbigpe3ZhciB0PVFzKHRoaXMuYnVmLHRoaXMucG9zLCEwLDUyLDgpO3JldHVybiB0aGlzLnBvcys9OCx0fSxyZWFkVmFyaW50OmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10aGlzLmJ1ZjtyZXR1cm4gZT0xMjcmKHI9blt0aGlzLnBvcysrXSkscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDcscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDE0LHI8MTI4P2U6KGV8PSgxMjcmKHI9blt0aGlzLnBvcysrXSkpPDwyMSxyPDEyOD9lOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLGk9ci5idWY7aWYobj0oMTEyJihhPWlbci5wb3MrK10pKT4+NCxhPDEyOClyZXR1cm4gbmwodCxuLGUpO2lmKG58PSgxMjcmKGE9aVtyLnBvcysrXSkpPDwzLGE8MTI4KXJldHVybiBubCh0LG4sZSk7aWYobnw9KDEyNyYoYT1pW3IucG9zKytdKSk8PDEwLGE8MTI4KXJldHVybiBubCh0LG4sZSk7aWYobnw9KDEyNyYoYT1pW3IucG9zKytdKSk8PDE3LGE8MTI4KXJldHVybiBubCh0LG4sZSk7aWYobnw9KDEyNyYoYT1pW3IucG9zKytdKSk8PDI0LGE8MTI4KXJldHVybiBubCh0LG4sZSk7aWYobnw9KDEmKGE9aVtyLnBvcysrXSkpPDwzMSxhPDEyOClyZXR1cm4gbmwodCxuLGUpO3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdmFyaW50IG5vdCBtb3JlIHRoYW4gMTAgYnl0ZXMiKX0oZXw9KDE1JihyPW5bdGhpcy5wb3NdKSk8PDI4LHQsdGhpcykpKSl9LHJlYWRWYXJpbnQ2NDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRWYXJpbnQoITApfSxyZWFkU1ZhcmludDpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpO3JldHVybiB0JTI9PTE/KHQrMSkvLTI6dC8yfSxyZWFkQm9vbGVhbjpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMucmVhZFZhcmludCgpKX0scmVhZFN0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0iIixhPWU7YTxyOyl7dmFyIGksbyxzLGw9dFthXSxjPW51bGwsdT1sPjIzOT80Omw+MjIzPzM6bD4xOTE/MjoxO2lmKGErdT5yKWJyZWFrOzE9PT11P2w8MTI4JiYoYz1sKToyPT09dT8xMjg9PSgxOTImKGk9dFthKzFdKSkmJihjPSgzMSZsKTw8Nnw2MyZpKTw9MTI3JiYoYz1udWxsKTozPT09dT8oaT10W2ErMV0sbz10W2ErMl0sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImbykmJigoYz0oMTUmbCk8PDEyfCg2MyZpKTw8Nnw2MyZvKTw9MjA0N3x8Yz49NTUyOTYmJmM8PTU3MzQzKSYmKGM9bnVsbCkpOjQ9PT11JiYoaT10W2ErMV0sbz10W2ErMl0scz10W2ErM10sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKChjPSgxNSZsKTw8MTh8KDYzJmkpPDwxMnwoNjMmbyk8PDZ8NjMmcyk8PTY1NTM1fHxjPj0xMTE0MTEyKSYmKGM9bnVsbCkpLG51bGw9PT1jPyhjPTY1NTMzLHU9MSk6Yz42NTUzNSYmKGMtPTY1NTM2LG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoYz4+PjEwJjEwMjN8NTUyOTYpLGM9NTYzMjB8MTAyMyZjKSxuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpLGErPXV9cmV0dXJuIG59KHRoaXMuYnVmLHRoaXMucG9zLHQpO3JldHVybiB0aGlzLnBvcz10LGV9LHJlYWRCeXRlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9dGhpcy5idWYuc3ViYXJyYXkodGhpcy5wb3MsdCk7cmV0dXJuIHRoaXMucG9zPXQsZX0scmVhZFBhY2tlZFZhcmludDpmdW5jdGlvbih0LGUpe2lmKHRoaXMudHlwZSE9PWVsLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkVmFyaW50KGUpKTt2YXIgcj1ybCh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxyOyl0LnB1c2godGhpcy5yZWFkVmFyaW50KGUpKTtyZXR1cm4gdH0scmVhZFBhY2tlZFNWYXJpbnQ6ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlIT09ZWwuQnl0ZXMpcmV0dXJuIHQucHVzaCh0aGlzLnJlYWRTVmFyaW50KCkpO3ZhciBlPXJsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRTVmFyaW50KCkpO3JldHVybiB0fSxyZWFkUGFja2VkQm9vbGVhbjpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1lbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7dmFyIGU9cmwodGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRGbG9hdDpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1lbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZEZsb2F0KCkpO3ZhciBlPXJsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGbG9hdCgpKTtyZXR1cm4gdH0scmVhZFBhY2tlZERvdWJsZTpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1lbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTt2YXIgZT1ybCh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRG91YmxlKCkpO3JldHVybiB0fSxyZWFkUGFja2VkRml4ZWQzMjpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1lbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7dmFyIGU9cmwodGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTRml4ZWQzMjpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1lbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZFNGaXhlZDMyKCkpO3ZhciBlPXJsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRTRml4ZWQzMigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZpeGVkNjQ6ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlIT09ZWwuQnl0ZXMpcmV0dXJuIHQucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO3ZhciBlPXJsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO3JldHVybiB0fSxyZWFkUGFja2VkU0ZpeGVkNjQ6ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlIT09ZWwuQnl0ZXMpcmV0dXJuIHQucHVzaCh0aGlzLnJlYWRTRml4ZWQ2NCgpKTt2YXIgZT1ybCh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkU0ZpeGVkNjQoKSk7cmV0dXJuIHR9LHNraXA6ZnVuY3Rpb24odCl7dmFyIGU9NyZ0O2lmKGU9PT1lbC5WYXJpbnQpZm9yKDt0aGlzLmJ1Zlt0aGlzLnBvcysrXT4xMjc7KTtlbHNlIGlmKGU9PT1lbC5CeXRlcyl0aGlzLnBvcz10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcztlbHNlIGlmKGU9PT1lbC5GaXhlZDMyKXRoaXMucG9zKz00O2Vsc2V7aWYoZSE9PWVsLkZpeGVkNjQpdGhyb3cgbmV3IEVycm9yKCJVbmltcGxlbWVudGVkIHR5cGU6ICIrZSk7dGhpcy5wb3MrPTh9fSx3cml0ZVRhZzpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVWYXJpbnQodDw8M3xlKX0scmVhbGxvYzpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5sZW5ndGh8fDE2O2U8dGhpcy5wb3MrdDspZSo9MjtpZihlIT09dGhpcy5sZW5ndGgpe3ZhciByPW5ldyBVaW50OEFycmF5KGUpO3Iuc2V0KHRoaXMuYnVmKSx0aGlzLmJ1Zj1yLHRoaXMubGVuZ3RoPWV9fSxmaW5pc2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg9dGhpcy5wb3MsdGhpcy5wb3M9MCx0aGlzLmJ1Zi5zdWJhcnJheSgwLHRoaXMubGVuZ3RoKX0sd3JpdGVGaXhlZDMyOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxnbCh0aGlzLmJ1Zix0LHRoaXMucG9zKSx0aGlzLnBvcys9NH0sd3JpdGVTRml4ZWQzMjpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoNCksZ2wodGhpcy5idWYsdCx0aGlzLnBvcyksdGhpcy5wb3MrPTR9LHdyaXRlRml4ZWQ2NDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksZ2wodGhpcy5idWYsLTEmdCx0aGlzLnBvcyksZ2wodGhpcy5idWYsTWF0aC5mbG9vcih0KigxLzQyOTQ5NjcyOTYpKSx0aGlzLnBvcys0KSx0aGlzLnBvcys9OH0sd3JpdGVTRml4ZWQ2NDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoOCksZ2wodGhpcy5idWYsLTEmdCx0aGlzLnBvcyksZ2wodGhpcy5idWYsTWF0aC5mbG9vcih0KigxLzQyOTQ5NjcyOTYpKSx0aGlzLnBvcys0KSx0aGlzLnBvcys9OH0sd3JpdGVWYXJpbnQ6ZnVuY3Rpb24odCl7KHQ9K3R8fDApPjI2ODQzNTQ1NXx8dDwwP2Z1bmN0aW9uKHQsZSl7dmFyIHIsbjtpZih0Pj0wPyhyPXQlNDI5NDk2NzI5NnwwLG49dC80Mjk0OTY3Mjk2fDApOihuPX4oLXQvNDI5NDk2NzI5NiksNDI5NDk2NzI5NV4ocj1+KC10JTQyOTQ5NjcyOTYpKT9yPXIrMXwwOihyPTAsbj1uKzF8MCkpLHQ+PTB4MTAwMDAwMDAwMDAwMDAwMDB8fHQ8LTB4MTAwMDAwMDAwMDAwMDAwMDApdGhyb3cgbmV3IEVycm9yKCJHaXZlbiB2YXJpbnQgZG9lc24ndCBmaXQgaW50byAxMCBieXRlcyIpO2UucmVhbGxvYygxMCksZnVuY3Rpb24odCxlLHIpe3IuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3NdPTEyNyZ0fShyLDAsZSksZnVuY3Rpb24odCxlKXt2YXIgcj0oNyZ0KTw8NDtlLmJ1ZltlLnBvcysrXXw9cnwoKHQ+Pj49Myk/MTI4OjApLHQmJihlLmJ1ZltlLnBvcysrXT0xMjcmdHwoKHQ+Pj49Nyk/MTI4OjApLHQmJihlLmJ1ZltlLnBvcysrXT0xMjcmdHwoKHQ+Pj49Nyk/MTI4OjApLHQmJihlLmJ1ZltlLnBvcysrXT0xMjcmdHwoKHQ+Pj49Nyk/MTI4OjApLHQmJihlLmJ1ZltlLnBvcysrXT0xMjcmdHwoKHQ+Pj49Nyk/MTI4OjApLHQmJihlLmJ1ZltlLnBvcysrXT0xMjcmdCkpKSkpfShuLGUpfSh0LHRoaXMpOih0aGlzLnJlYWxsb2MoNCksdGhpcy5idWZbdGhpcy5wb3MrK109MTI3JnR8KHQ+MTI3PzEyODowKSx0PD0xMjd8fCh0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmKHQ+Pj49Nyl8KHQ+MTI3PzEyODowKSx0PD0xMjd8fCh0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmKHQ+Pj49Nyl8KHQ+MTI3PzEyODowKSx0PD0xMjd8fCh0aGlzLmJ1Zlt0aGlzLnBvcysrXT10Pj4+NyYxMjcpKSkpfSx3cml0ZVNWYXJpbnQ6ZnVuY3Rpb24odCl7dGhpcy53cml0ZVZhcmludCh0PDA/MiotdC0xOjIqdCl9LHdyaXRlQm9vbGVhbjpmdW5jdGlvbih0KXt0aGlzLndyaXRlVmFyaW50KEJvb2xlYW4odCkpfSx3cml0ZVN0cmluZzpmdW5jdGlvbih0KXt0PVN0cmluZyh0KSx0aGlzLnJlYWxsb2MoNCp0Lmxlbmd0aCksdGhpcy5wb3MrKzt2YXIgZT10aGlzLnBvczt0aGlzLnBvcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGEsaT0wO2k8ZS5sZW5ndGg7aSsrKXtpZigobj1lLmNoYXJDb2RlQXQoaSkpPjU1Mjk1JiZuPDU3MzQ0KXtpZighYSl7bj41NjMxOXx8aSsxPT09ZS5sZW5ndGg/KHRbcisrXT0yMzksdFtyKytdPTE5MSx0W3IrK109MTg5KTphPW47Y29udGludWV9aWYobjw1NjMyMCl7dFtyKytdPTIzOSx0W3IrK109MTkxLHRbcisrXT0xODksYT1uO2NvbnRpbnVlfW49YS01NTI5Njw8MTB8bi01NjMyMHw2NTUzNixhPW51bGx9ZWxzZSBhJiYodFtyKytdPTIzOSx0W3IrK109MTkxLHRbcisrXT0xODksYT1udWxsKTtuPDEyOD90W3IrK109bjoobjwyMDQ4P3RbcisrXT1uPj42fDE5Mjoobjw2NTUzNj90W3IrK109bj4+MTJ8MjI0Oih0W3IrK109bj4+MTh8MjQwLHRbcisrXT1uPj4xMiY2M3wxMjgpLHRbcisrXT1uPj42JjYzfDEyOCksdFtyKytdPTYzJm58MTI4KX1yZXR1cm4gcn0odGhpcy5idWYsdCx0aGlzLnBvcyk7dmFyIHI9dGhpcy5wb3MtZTtyPj0xMjgmJmFsKGUscix0aGlzKSx0aGlzLnBvcz1lLTEsdGhpcy53cml0ZVZhcmludChyKSx0aGlzLnBvcys9cn0sd3JpdGVGbG9hdDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoNCksJHModGhpcy5idWYsdCx0aGlzLnBvcywhMCwyMyw0KSx0aGlzLnBvcys9NH0sd3JpdGVEb3VibGU6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDgpLCRzKHRoaXMuYnVmLHQsdGhpcy5wb3MsITAsNTIsOCksdGhpcy5wb3MrPTh9LHdyaXRlQnl0ZXM6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7dGhpcy53cml0ZVZhcmludChlKSx0aGlzLnJlYWxsb2MoZSk7Zm9yKHZhciByPTA7cjxlO3IrKyl0aGlzLmJ1Zlt0aGlzLnBvcysrXT10W3JdfSx3cml0ZVJhd01lc3NhZ2U6ZnVuY3Rpb24odCxlKXt0aGlzLnBvcysrO3ZhciByPXRoaXMucG9zO3QoZSx0aGlzKTt2YXIgbj10aGlzLnBvcy1yO24+PTEyOCYmYWwocixuLHRoaXMpLHRoaXMucG9zPXItMSx0aGlzLndyaXRlVmFyaW50KG4pLHRoaXMucG9zKz1ufSx3cml0ZU1lc3NhZ2U6ZnVuY3Rpb24odCxlLHIpe3RoaXMud3JpdGVUYWcodCxlbC5CeXRlcyksdGhpcy53cml0ZVJhd01lc3NhZ2UoZSxyKX0sd3JpdGVQYWNrZWRWYXJpbnQ6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxpbCxlKX0sd3JpdGVQYWNrZWRTVmFyaW50OmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsb2wsZSl9LHdyaXRlUGFja2VkQm9vbGVhbjpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LGNsLGUpfSx3cml0ZVBhY2tlZEZsb2F0OmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsc2wsZSl9LHdyaXRlUGFja2VkRG91YmxlOmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsbGwsZSl9LHdyaXRlUGFja2VkRml4ZWQzMjpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LHVsLGUpfSx3cml0ZVBhY2tlZFNGaXhlZDMyOmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsaGwsZSl9LHdyaXRlUGFja2VkRml4ZWQ2NDpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LGZsLGUpfSx3cml0ZVBhY2tlZFNGaXhlZDY0OmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQscGwsZSl9LHdyaXRlQnl0ZXNGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxlbC5CeXRlcyksdGhpcy53cml0ZUJ5dGVzKGUpfSx3cml0ZUZpeGVkMzJGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxlbC5GaXhlZDMyKSx0aGlzLndyaXRlRml4ZWQzMihlKX0sd3JpdGVTRml4ZWQzMkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGVsLkZpeGVkMzIpLHRoaXMud3JpdGVTRml4ZWQzMihlKX0sd3JpdGVGaXhlZDY0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsZWwuRml4ZWQ2NCksdGhpcy53cml0ZUZpeGVkNjQoZSl9LHdyaXRlU0ZpeGVkNjRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxlbC5GaXhlZDY0KSx0aGlzLndyaXRlU0ZpeGVkNjQoZSl9LHdyaXRlVmFyaW50RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsZWwuVmFyaW50KSx0aGlzLndyaXRlVmFyaW50KGUpfSx3cml0ZVNWYXJpbnRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxlbC5WYXJpbnQpLHRoaXMud3JpdGVTVmFyaW50KGUpfSx3cml0ZVN0cmluZ0ZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGVsLkJ5dGVzKSx0aGlzLndyaXRlU3RyaW5nKGUpfSx3cml0ZUZsb2F0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsZWwuRml4ZWQzMiksdGhpcy53cml0ZUZsb2F0KGUpfSx3cml0ZURvdWJsZUZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LGVsLkZpeGVkNjQpLHRoaXMud3JpdGVEb3VibGUoZSl9LHdyaXRlQm9vbGVhbkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVZhcmludEZpZWxkKHQsQm9vbGVhbihlKSl9fTt2YXIgbWw9MztmdW5jdGlvbiB5bCh0LGUscil7MT09PXQmJnIucmVhZE1lc3NhZ2UoeGwsZSl9ZnVuY3Rpb24geGwodCxlLHIpe2lmKDM9PT10KXt2YXIgbj1yLnJlYWRNZXNzYWdlKGJsLHt9KSxhPW4uaWQsaT1uLmJpdG1hcCxvPW4ud2lkdGgscz1uLmhlaWdodCxsPW4ubGVmdCxjPW4udG9wLHU9bi5hZHZhbmNlO2UucHVzaCh7aWQ6YSxiaXRtYXA6bmV3IFBpKHt3aWR0aDpvKzIqbWwsaGVpZ2h0OnMrMiptbH0saSksbWV0cmljczp7d2lkdGg6byxoZWlnaHQ6cyxsZWZ0OmwsdG9wOmMsYWR2YW5jZTp1fX0pfX1mdW5jdGlvbiBibCh0LGUscil7MT09PXQ/ZS5pZD1yLnJlYWRWYXJpbnQoKToyPT09dD9lLmJpdG1hcD1yLnJlYWRCeXRlcygpOjM9PT10P2Uud2lkdGg9ci5yZWFkVmFyaW50KCk6ND09PXQ/ZS5oZWlnaHQ9ci5yZWFkVmFyaW50KCk6NT09PXQ/ZS5sZWZ0PXIucmVhZFNWYXJpbnQoKTo2PT09dD9lLnRvcD1yLnJlYWRTVmFyaW50KCk6Nz09PXQmJihlLmFkdmFuY2U9ci5yZWFkVmFyaW50KCkpfXZhciBfbD1tbCx3bD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2NhbGxiYWNrPXQsdGhpcy5fdHJpZ2dlcmVkPSExLCJ1bmRlZmluZWQiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWwmJih0aGlzLl9jaGFubmVsPW5ldyBNZXNzYWdlQ2hhbm5lbCx0aGlzLl9jaGFubmVsLnBvcnQyLm9ubWVzc2FnZT1mdW5jdGlvbigpe2UuX3RyaWdnZXJlZD0hMSxlLl9jYWxsYmFjaygpfSl9O3dsLnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl90cmlnZ2VyZWR8fCh0aGlzLl90cmlnZ2VyZWQ9ITAsdGhpcy5fY2hhbm5lbD90aGlzLl9jaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKCEwKTpzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5fdHJpZ2dlcmVkPSExLHQuX2NhbGxiYWNrKCl9LDApKX07dmFyIGtsPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRhcmdldD10LHRoaXMucGFyZW50PWUsdGhpcy5tYXBJZD1yLHRoaXMuY2FsbGJhY2tzPXt9LHRoaXMudGFza3M9e30sdGhpcy50YXNrUXVldWU9W10sdGhpcy5jYW5jZWxDYWxsYmFja3M9e30sdihbInJlY2VpdmUiLCJwcm9jZXNzIl0sdGhpcyksdGhpcy5pbnZva2VyPW5ldyB3bCh0aGlzLnByb2Nlc3MpLHRoaXMudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMucmVjZWl2ZSwhMSl9O2Z1bmN0aW9uIFRsKHQsZSxyKXt2YXIgbj0yKk1hdGguUEkqNjM3ODEzNy8yNTYvTWF0aC5wb3coMixyKTtyZXR1cm5bdCpuLTIqTWF0aC5QSSo2Mzc4MTM3LzIsZSpuLTIqTWF0aC5QSSo2Mzc4MTM3LzJdfWtsLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXRoaXMsaT1NYXRoLnJvdW5kKDFlMTgqTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygwLDEwKTtyJiYodGhpcy5jYWxsYmFja3NbaV09cik7dmFyIG89W107cmV0dXJuIHRoaXMudGFyZ2V0LnBvc3RNZXNzYWdlKHtpZDppLHR5cGU6dCxoYXNDYWxsYmFjazohIXIsdGFyZ2V0TWFwSWQ6bixzb3VyY2VNYXBJZDp0aGlzLm1hcElkLGRhdGE6dm4oZSxvKX0sbykse2NhbmNlbDpmdW5jdGlvbigpe3ImJmRlbGV0ZSBhLmNhbGxiYWNrc1tpXSxhLnRhcmdldC5wb3N0TWVzc2FnZSh7aWQ6aSx0eXBlOiI8Y2FuY2VsPiIsdGFyZ2V0TWFwSWQ6bixzb3VyY2VNYXBJZDphLm1hcElkfSl9fX0sa2wucHJvdG90eXBlLnJlY2VpdmU9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhLHI9ZS5pZDtpZihyJiYoIWUudGFyZ2V0TWFwSWR8fHRoaXMubWFwSWQ9PT1lLnRhcmdldE1hcElkKSlpZigiPGNhbmNlbD4iPT09ZS50eXBlKXtkZWxldGUgdGhpcy50YXNrc1tyXTt2YXIgbj10aGlzLmNhbmNlbENhbGxiYWNrc1tyXTtkZWxldGUgdGhpcy5jYW5jZWxDYWxsYmFja3Nbcl0sbiYmbigpfWVsc2UgdGhpcy50YXNrc1tyXT1lLHRoaXMudGFza1F1ZXVlLnB1c2gociksdGhpcy5pbnZva2VyLnRyaWdnZXIoKX0sa2wucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMudGFza1F1ZXVlLmxlbmd0aCl7dmFyIGU9dGhpcy50YXNrUXVldWUuc2hpZnQoKSxyPXRoaXMudGFza3NbZV07aWYoZGVsZXRlIHRoaXMudGFza3NbZV0sdGhpcy50YXNrUXVldWUubGVuZ3RoJiZ0aGlzLmludm9rZXIudHJpZ2dlcigpLHIpaWYoIjxyZXNwb25zZT4iPT09ci50eXBlKXt2YXIgbj10aGlzLmNhbGxiYWNrc1tlXTtkZWxldGUgdGhpcy5jYWxsYmFja3NbZV0sbiYmKHIuZXJyb3I/bihtbihyLmVycm9yKSk6bihudWxsLG1uKHIuZGF0YSkpKX1lbHNle3ZhciBhPSExLGk9ci5oYXNDYWxsYmFjaz9mdW5jdGlvbihyLG4pe2E9ITAsZGVsZXRlIHQuY2FuY2VsQ2FsbGJhY2tzW2VdO3ZhciBpPVtdO3QudGFyZ2V0LnBvc3RNZXNzYWdlKHtpZDplLHR5cGU6IjxyZXNwb25zZT4iLHNvdXJjZU1hcElkOnQubWFwSWQsZXJyb3I6cj92bihyKTpudWxsLGRhdGE6dm4obixpKX0saSl9OmZ1bmN0aW9uKHQpe2E9ITB9LG89bnVsbCxzPW1uKHIuZGF0YSk7aWYodGhpcy5wYXJlbnRbci50eXBlXSlvPXRoaXMucGFyZW50W3IudHlwZV0oci5zb3VyY2VNYXBJZCxzLGkpO2Vsc2UgaWYodGhpcy5wYXJlbnQuZ2V0V29ya2VyU291cmNlKXt2YXIgbD1yLnR5cGUuc3BsaXQoIi4iKTtvPXRoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZShyLnNvdXJjZU1hcElkLGxbMF0scy5zb3VyY2UpW2xbMV1dKHMsaSl9ZWxzZSBpKG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgZnVuY3Rpb24gIityLnR5cGUpKTshYSYmbyYmby5jYW5jZWwmJih0aGlzLmNhbmNlbENhbGxiYWNrc1tlXT1vLmNhbmNlbCl9fX0sa2wucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMucmVjZWl2ZSwhMSl9O3ZhciBNbD1mdW5jdGlvbih0LGUpe3QmJihlP3RoaXMuc2V0U291dGhXZXN0KHQpLnNldE5vcnRoRWFzdChlKTo0PT09dC5sZW5ndGg/dGhpcy5zZXRTb3V0aFdlc3QoW3RbMF0sdFsxXV0pLnNldE5vcnRoRWFzdChbdFsyXSx0WzNdXSk6dGhpcy5zZXRTb3V0aFdlc3QodFswXSkuc2V0Tm9ydGhFYXN0KHRbMV0pKX07TWwucHJvdG90eXBlLnNldE5vcnRoRWFzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmU9dCBpbnN0YW5jZW9mIEFsP25ldyBBbCh0LmxuZyx0LmxhdCk6QWwuY29udmVydCh0KSx0aGlzfSxNbC5wcm90b3R5cGUuc2V0U291dGhXZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zdz10IGluc3RhbmNlb2YgQWw/bmV3IEFsKHQubG5nLHQubGF0KTpBbC5jb252ZXJ0KHQpLHRoaXN9LE1sLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuX3N3LGE9dGhpcy5fbmU7aWYodCBpbnN0YW5jZW9mIEFsKWU9dCxyPXQ7ZWxzZXtpZighKHQgaW5zdGFuY2VvZiBNbCkpcmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5ldmVyeShBcnJheS5pc0FycmF5KT90aGlzLmV4dGVuZChNbC5jb252ZXJ0KHQpKTp0aGlzLmV4dGVuZChBbC5jb252ZXJ0KHQpKTp0aGlzO2lmKGU9dC5fc3cscj10Ll9uZSwhZXx8IXIpcmV0dXJuIHRoaXN9cmV0dXJuIG58fGE/KG4ubG5nPU1hdGgubWluKGUubG5nLG4ubG5nKSxuLmxhdD1NYXRoLm1pbihlLmxhdCxuLmxhdCksYS5sbmc9TWF0aC5tYXgoci5sbmcsYS5sbmcpLGEubGF0PU1hdGgubWF4KHIubGF0LGEubGF0KSk6KHRoaXMuX3N3PW5ldyBBbChlLmxuZyxlLmxhdCksdGhpcy5fbmU9bmV3IEFsKHIubG5nLHIubGF0KSksdGhpc30sTWwucHJvdG90eXBlLmdldENlbnRlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgQWwoKHRoaXMuX3N3LmxuZyt0aGlzLl9uZS5sbmcpLzIsKHRoaXMuX3N3LmxhdCt0aGlzLl9uZS5sYXQpLzIpfSxNbC5wcm90b3R5cGUuZ2V0U291dGhXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3fSxNbC5wcm90b3R5cGUuZ2V0Tm9ydGhFYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lfSxNbC5wcm90b3R5cGUuZ2V0Tm9ydGhXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBbCh0aGlzLmdldFdlc3QoKSx0aGlzLmdldE5vcnRoKCkpfSxNbC5wcm90b3R5cGUuZ2V0U291dGhFYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBbCh0aGlzLmdldEVhc3QoKSx0aGlzLmdldFNvdXRoKCkpfSxNbC5wcm90b3R5cGUuZ2V0V2VzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdy5sbmd9LE1sLnByb3RvdHlwZS5nZXRTb3V0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdy5sYXR9LE1sLnByb3RvdHlwZS5nZXRFYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxuZ30sTWwucHJvdG90eXBlLmdldE5vcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxhdH0sTWwucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5fc3cudG9BcnJheSgpLHRoaXMuX25lLnRvQXJyYXkoKV19LE1sLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJMbmdMYXRCb3VuZHMoIit0aGlzLl9zdy50b1N0cmluZygpKyIsICIrdGhpcy5fbmUudG9TdHJpbmcoKSsiKSJ9LE1sLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLl9zdyYmdGhpcy5fbmUpfSxNbC5jb252ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiF0fHx0IGluc3RhbmNlb2YgTWw/dDpuZXcgTWwodCl9O3ZhciBBbD1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgTG5nTGF0IG9iamVjdDogKCIrdCsiLCAiK2UrIikiKTtpZih0aGlzLmxuZz0rdCx0aGlzLmxhdD0rZSx0aGlzLmxhdD45MHx8dGhpcy5sYXQ8LTkwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBMbmdMYXQgbGF0aXR1ZGUgdmFsdWU6IG11c3QgYmUgYmV0d2VlbiAtOTAgYW5kIDkwIil9O0FsLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBbCh1KHRoaXMubG5nLC0xODAsMTgwKSx0aGlzLmxhdCl9LEFsLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMubG5nLHRoaXMubGF0XX0sQWwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkxuZ0xhdCgiK3RoaXMubG5nKyIsICIrdGhpcy5sYXQrIikifSxBbC5wcm90b3R5cGUudG9Cb3VuZHM9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIGU9MzYwKnQvNDAwNzUwMTcscj1lL01hdGguY29zKE1hdGguUEkvMTgwKnRoaXMubGF0KTtyZXR1cm4gbmV3IE1sKG5ldyBBbCh0aGlzLmxuZy1yLHRoaXMubGF0LWUpLG5ldyBBbCh0aGlzLmxuZytyLHRoaXMubGF0K2UpKX0sQWwuY29udmVydD1mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgQWwpcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KSYmKDI9PT10Lmxlbmd0aHx8Mz09PXQubGVuZ3RoKSlyZXR1cm4gbmV3IEFsKE51bWJlcih0WzBdKSxOdW1iZXIodFsxXSkpO2lmKCFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10KXJldHVybiBuZXcgQWwoTnVtYmVyKCJsbmciaW4gdD90LmxuZzp0LmxvbiksTnVtYmVyKHQubGF0KSk7dGhyb3cgbmV3IEVycm9yKCJgTG5nTGF0TGlrZWAgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBMbmdMYXQgaW5zdGFuY2UsIGFuIG9iamVjdCB7bG5nOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIGFuIG9iamVjdCB7bG9uOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIG9yIGFuIGFycmF5IG9mIFs8bG5nPiwgPGxhdD5dIil9O3ZhciBTbD0yKk1hdGguUEkqNjM3ODEzNztmdW5jdGlvbiBFbCh0KXtyZXR1cm4gU2wqTWF0aC5jb3ModCpNYXRoLlBJLzE4MCl9ZnVuY3Rpb24gTGwodCl7cmV0dXJuKDE4MCt0KS8zNjB9ZnVuY3Rpb24gQ2wodCl7cmV0dXJuKDE4MC0xODAvTWF0aC5QSSpNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJLzQrdCpNYXRoLlBJLzM2MCkpKS8zNjB9ZnVuY3Rpb24gUGwodCxlKXtyZXR1cm4gdC9FbChlKX1mdW5jdGlvbiBPbCh0KXt2YXIgZT0xODAtMzYwKnQ7cmV0dXJuIDM2MC9NYXRoLlBJKk1hdGguYXRhbihNYXRoLmV4cChlKk1hdGguUEkvMTgwKSktOTB9dmFyIHpsPWZ1bmN0aW9uKHQsZSxyKXt2b2lkIDA9PT1yJiYocj0wKSx0aGlzLng9K3QsdGhpcy55PStlLHRoaXMuej0rcn07emwuZnJvbUxuZ0xhdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPTApO3ZhciByPUFsLmNvbnZlcnQodCk7cmV0dXJuIG5ldyB6bChMbChyLmxuZyksQ2woci5sYXQpLFBsKGUsci5sYXQpKX0semwucHJvdG90eXBlLnRvTG5nTGF0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBbCgzNjAqdGhpcy54LTE4MCxPbCh0aGlzLnkpKX0semwucHJvdG90eXBlLnRvQWx0aXR1ZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56KkVsKE9sKHRoaXMueSkpfSx6bC5wcm90b3R5cGUubWV0ZXJJbk1lcmNhdG9yQ29vcmRpbmF0ZVVuaXRzPWZ1bmN0aW9uKCl7cmV0dXJuIDEvU2wqKHQ9T2wodGhpcy55KSwxL01hdGguY29zKHQqTWF0aC5QSS8xODApKTt2YXIgdH07dmFyIElsPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLno9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLmtleT1GbCgwLHQsZSxyKX07SWwucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy56PT09dC56JiZ0aGlzLng9PT10LngmJnRoaXMueT09PXQueX0sSWwucHJvdG90eXBlLnVybD1mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxpLG8scz0ocj10aGlzLngsbj10aGlzLnksYT10aGlzLnosaT1UbCgyNTYqciwyNTYqKG49TWF0aC5wb3coMixhKS1uLTEpLGEpLG89VGwoMjU2KihyKzEpLDI1NioobisxKSxhKSxpWzBdKyIsIitpWzFdKyIsIitvWzBdKyIsIitvWzFdKSxsPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4sYT0iIixpPXQ7aT4wO2ktLSlhKz0oZSYobj0xPDxpLTEpPzE6MCkrKHImbj8yOjApO3JldHVybiBhfSh0aGlzLnosdGhpcy54LHRoaXMueSk7cmV0dXJuIHRbKHRoaXMueCt0aGlzLnkpJXQubGVuZ3RoXS5yZXBsYWNlKCJ7cHJlZml4fSIsKHRoaXMueCUxNikudG9TdHJpbmcoMTYpKyh0aGlzLnklMTYpLnRvU3RyaW5nKDE2KSkucmVwbGFjZSgie3p9IixTdHJpbmcodGhpcy56KSkucmVwbGFjZSgie3h9IixTdHJpbmcodGhpcy54KSkucmVwbGFjZSgie3l9IixTdHJpbmcoInRtcyI9PT1lP01hdGgucG93KDIsdGhpcy56KS10aGlzLnktMTp0aGlzLnkpKS5yZXBsYWNlKCJ7cXVhZGtleX0iLGwpLnJlcGxhY2UoIntiYm94LWVwc2ctMzg1N30iLHMpfSxJbC5wcm90b3R5cGUuZ2V0VGlsZVBvaW50PWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucG93KDIsdGhpcy56KTtyZXR1cm4gbmV3IGEoKHQueCplLXRoaXMueCkqZWksKHQueSplLXRoaXMueSkqZWkpfTt2YXIgRGw9ZnVuY3Rpb24odCxlKXt0aGlzLndyYXA9dCx0aGlzLmNhbm9uaWNhbD1lLHRoaXMua2V5PUZsKHQsZS56LGUueCxlLnkpfSxSbD1mdW5jdGlvbih0LGUscixuLGEpe3RoaXMub3ZlcnNjYWxlZFo9dCx0aGlzLndyYXA9ZSx0aGlzLmNhbm9uaWNhbD1uZXcgSWwociwrbiwrYSksdGhpcy5rZXk9RmwoZSx0LG4sYSl9O2Z1bmN0aW9uIEZsKHQsZSxyLG4peyh0Kj0yKTwwJiYodD0tMSp0LTEpO3ZhciBhPTE8PGU7cmV0dXJuIDMyKihhKmEqdCthKm4rcikrZX1SbC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm92ZXJzY2FsZWRaPT09dC5vdmVyc2NhbGVkWiYmdGhpcy53cmFwPT09dC53cmFwJiZ0aGlzLmNhbm9uaWNhbC5lcXVhbHModC5jYW5vbmljYWwpfSxSbC5wcm90b3R5cGUuc2NhbGVkVG89ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jYW5vbmljYWwuei10O3JldHVybiB0PnRoaXMuY2Fub25pY2FsLno/bmV3IFJsKHQsdGhpcy53cmFwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KTpuZXcgUmwodCx0aGlzLndyYXAsdCx0aGlzLmNhbm9uaWNhbC54Pj5lLHRoaXMuY2Fub25pY2FsLnk+PmUpfSxSbC5wcm90b3R5cGUuaXNDaGlsZE9mPWZ1bmN0aW9uKHQpe2lmKHQud3JhcCE9PXRoaXMud3JhcClyZXR1cm4hMTt2YXIgZT10aGlzLmNhbm9uaWNhbC56LXQuY2Fub25pY2FsLno7cmV0dXJuIDA9PT10Lm92ZXJzY2FsZWRafHx0Lm92ZXJzY2FsZWRaPHRoaXMub3ZlcnNjYWxlZFomJnQuY2Fub25pY2FsLng9PT10aGlzLmNhbm9uaWNhbC54Pj5lJiZ0LmNhbm9uaWNhbC55PT09dGhpcy5jYW5vbmljYWwueT4+ZX0sUmwucHJvdG90eXBlLmNoaWxkcmVuPWZ1bmN0aW9uKHQpe2lmKHRoaXMub3ZlcnNjYWxlZFo+PXQpcmV0dXJuW25ldyBSbCh0aGlzLm92ZXJzY2FsZWRaKzEsdGhpcy53cmFwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KV07dmFyIGU9dGhpcy5jYW5vbmljYWwueisxLHI9Mip0aGlzLmNhbm9uaWNhbC54LG49Mip0aGlzLmNhbm9uaWNhbC55O3JldHVybltuZXcgUmwoZSx0aGlzLndyYXAsZSxyLG4pLG5ldyBSbChlLHRoaXMud3JhcCxlLHIrMSxuKSxuZXcgUmwoZSx0aGlzLndyYXAsZSxyLG4rMSksbmV3IFJsKGUsdGhpcy53cmFwLGUscisxLG4rMSldfSxSbC5wcm90b3R5cGUuaXNMZXNzVGhhbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53cmFwPHQud3JhcHx8ISh0aGlzLndyYXA+dC53cmFwKSYmKHRoaXMub3ZlcnNjYWxlZFo8dC5vdmVyc2NhbGVkWnx8ISh0aGlzLm92ZXJzY2FsZWRaPnQub3ZlcnNjYWxlZFopJiYodGhpcy5jYW5vbmljYWwueDx0LmNhbm9uaWNhbC54fHwhKHRoaXMuY2Fub25pY2FsLng+dC5jYW5vbmljYWwueCkmJnRoaXMuY2Fub25pY2FsLnk8dC5jYW5vbmljYWwueSkpfSxSbC5wcm90b3R5cGUud3JhcHBlZD1mdW5jdGlvbigpe3JldHVybiBuZXcgUmwodGhpcy5vdmVyc2NhbGVkWiwwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KX0sUmwucHJvdG90eXBlLnVud3JhcFRvPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUmwodGhpcy5vdmVyc2NhbGVkWix0LHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KX0sUmwucHJvdG90eXBlLm92ZXJzY2FsZUZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiBNYXRoLnBvdygyLHRoaXMub3ZlcnNjYWxlZFotdGhpcy5jYW5vbmljYWwueil9LFJsLnByb3RvdHlwZS50b1Vud3JhcHBlZD1mdW5jdGlvbigpe3JldHVybiBuZXcgRGwodGhpcy53cmFwLHRoaXMuY2Fub25pY2FsKX0sUmwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3ZlcnNjYWxlZForIi8iK3RoaXMuY2Fub25pY2FsLngrIi8iK3RoaXMuY2Fub25pY2FsLnl9LFJsLnByb3RvdHlwZS5nZXRUaWxlUG9pbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2Fub25pY2FsLmdldFRpbGVQb2ludChuZXcgemwodC54LXRoaXMud3JhcCx0LnkpKX0sZG4oIkNhbm9uaWNhbFRpbGVJRCIsSWwpLGRuKCJPdmVyc2NhbGVkVGlsZUlEIixSbCx7b21pdDpbInBvc01hdHJpeCJdfSk7dmFyIEJsPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLnVpZD10LGUuaGVpZ2h0IT09ZS53aWR0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiREVNIHRpbGVzIG11c3QgYmUgc3F1YXJlIik7aWYociYmIm1hcGJveCIhPT1yJiYidGVycmFyaXVtIiE9PXIpcmV0dXJuIHcoJyInK3IrJyIgaXMgbm90IGEgdmFsaWQgZW5jb2RpbmcgdHlwZS4gVmFsaWQgdHlwZXMgaW5jbHVkZSAibWFwYm94IiBhbmQgInRlcnJhcml1bSIuJyk7dmFyIG49dGhpcy5kaW09ZS5oZWlnaHQ7dGhpcy5zdHJpZGU9dGhpcy5kaW0rMix0aGlzLmRhdGE9bmV3IEludDMyQXJyYXkodGhpcy5zdHJpZGUqdGhpcy5zdHJpZGUpO2Zvcih2YXIgYT1lLmRhdGEsaT0idGVycmFyaXVtIj09PXI/dGhpcy5fdW5wYWNrVGVycmFyaXVtOnRoaXMuX3VucGFja01hcGJveCxvPTA7bzxuO28rKylmb3IodmFyIHM9MDtzPG47cysrKXt2YXIgbD00KihvKm4rcyk7dGhpcy5zZXQocyxvLGkoYVtsXSxhW2wrMV0sYVtsKzJdKSl9Zm9yKHZhciBjPTA7YzxuO2MrKyl0aGlzLnNldCgtMSxjLHRoaXMuZ2V0KDAsYykpLHRoaXMuc2V0KG4sYyx0aGlzLmdldChuLTEsYykpLHRoaXMuc2V0KGMsLTEsdGhpcy5nZXQoYywwKSksdGhpcy5zZXQoYyxuLHRoaXMuZ2V0KGMsbi0xKSk7dGhpcy5zZXQoLTEsLTEsdGhpcy5nZXQoMCwwKSksdGhpcy5zZXQobiwtMSx0aGlzLmdldChuLTEsMCkpLHRoaXMuc2V0KC0xLG4sdGhpcy5nZXQoMCxuLTEpKSx0aGlzLnNldChuLG4sdGhpcy5nZXQobi0xLG4tMSkpfTtCbC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmRhdGFbdGhpcy5faWR4KHQsZSldPXIrNjU1MzZ9LEJsLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kYXRhW3RoaXMuX2lkeCh0LGUpXS02NTUzNn0sQmwucHJvdG90eXBlLl9pZHg9ZnVuY3Rpb24odCxlKXtpZih0PC0xfHx0Pj10aGlzLmRpbSsxfHxlPC0xfHxlPj10aGlzLmRpbSsxKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2Ugc291cmNlIGNvb3JkaW5hdGVzIGZvciBERU0gZGF0YSIpO3JldHVybihlKzEpKnRoaXMuc3RyaWRlKyh0KzEpfSxCbC5wcm90b3R5cGUuX3VucGFja01hcGJveD1mdW5jdGlvbih0LGUscil7cmV0dXJuKDI1Nip0KjI1NisyNTYqZStyKS8xMC0xZTR9LEJsLnByb3RvdHlwZS5fdW5wYWNrVGVycmFyaXVtPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMjU2KnQrZStyLzI1Ni0zMjc2OH0sQmwucHJvdG90eXBlLmdldFBpeGVscz1mdW5jdGlvbigpe3JldHVybiBuZXcgT2koe3dpZHRoOnRoaXMuc3RyaWRlLGhlaWdodDp0aGlzLnN0cmlkZX0sbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcikpfSxCbC5wcm90b3R5cGUuYmFja2ZpbGxCb3JkZXI9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuZGltIT09dC5kaW0pdGhyb3cgbmV3IEVycm9yKCJkZW0gZGltZW5zaW9uIG1pc21hdGNoIik7dmFyIG49ZSp0aGlzLmRpbSxhPWUqdGhpcy5kaW0rdGhpcy5kaW0saT1yKnRoaXMuZGltLG89cip0aGlzLmRpbSt0aGlzLmRpbTtzd2l0Y2goZSl7Y2FzZS0xOm49YS0xO2JyZWFrO2Nhc2UgMTphPW4rMX1zd2l0Y2gocil7Y2FzZS0xOmk9by0xO2JyZWFrO2Nhc2UgMTpvPWkrMX1mb3IodmFyIHM9LWUqdGhpcy5kaW0sbD0tcip0aGlzLmRpbSxjPWk7YzxvO2MrKylmb3IodmFyIHU9bjt1PGE7dSsrKXRoaXMuc2V0KHUsYyx0LmdldCh1K3MsYytsKSl9LGRuKCJERU1EYXRhIixCbCk7dmFyIE5sPUpuKFt7bmFtZToiYV9wb3MiLHR5cGU6IkludDE2Iixjb21wb25lbnRzOjJ9LHtuYW1lOiJhX3RleHR1cmVfcG9zIix0eXBlOiJJbnQxNiIsY29tcG9uZW50czoyfV0pLGpsPWZ1bmN0aW9uKHQpe3RoaXMuX3N0cmluZ1RvTnVtYmVyPXt9LHRoaXMuX251bWJlclRvU3RyaW5nPVtdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO3RoaXMuX3N0cmluZ1RvTnVtYmVyW3JdPWUsdGhpcy5fbnVtYmVyVG9TdHJpbmdbZV09cn19O2psLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3N0cmluZ1RvTnVtYmVyW3RdfSxqbC5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9udW1iZXJUb1N0cmluZ1t0XX07dmFyIFZsPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMudHlwZT0iRmVhdHVyZSIsdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmU9dCx0Ll96PWUsdC5feD1yLHQuX3k9bix0aGlzLnByb3BlcnRpZXM9dC5wcm9wZXJ0aWVzLG51bGwhPXQuaWQmJih0aGlzLmlkPXQuaWQpfSxVbD17Z2VvbWV0cnk6e2NvbmZpZ3VyYWJsZTohMH19O1VsLmdlb21ldHJ5LmdldD1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLl9nZW9tZXRyeSYmKHRoaXMuX2dlb21ldHJ5PXRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLnRvR2VvSlNPTih0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feCx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feSx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feikuZ2VvbWV0cnkpLHRoaXMuX2dlb21ldHJ5fSxVbC5nZW9tZXRyeS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fZ2VvbWV0cnk9dH0sVmwucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciB0PXtnZW9tZXRyeTp0aGlzLmdlb21ldHJ5fTtmb3IodmFyIGUgaW4gdGhpcykiX2dlb21ldHJ5IiE9PWUmJiJfdmVjdG9yVGlsZUZlYXR1cmUiIT09ZSYmKHRbZV09dGhpc1tlXSk7cmV0dXJuIHR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFZsLnByb3RvdHlwZSxVbCk7dmFyIHFsPWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT17fSx0aGlzLnN0YXRlQ2hhbmdlcz17fSx0aGlzLmRlbGV0ZWRTdGF0ZXM9e319O3FsLnByb3RvdHlwZS51cGRhdGVTdGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49U3RyaW5nKGUpO2lmKHRoaXMuc3RhdGVDaGFuZ2VzW3RdPXRoaXMuc3RhdGVDaGFuZ2VzW3RdfHx7fSx0aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXT10aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXXx8e30saCh0aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXSxyKSxudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW3RdKWZvcih2YXIgYSBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXNbdF09e30sdGhpcy5zdGF0ZVt0XSlhIT09biYmKHRoaXMuZGVsZXRlZFN0YXRlc1t0XVthXT1udWxsKTtlbHNlIGlmKHRoaXMuZGVsZXRlZFN0YXRlc1t0XSYmbnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXSlmb3IodmFyIGkgaW4gdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPXt9LHRoaXMuc3RhdGVbdF1bbl0pcltpXXx8KHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXVtpXT1udWxsKTtlbHNlIGZvcih2YXIgbyBpbiByKXRoaXMuZGVsZXRlZFN0YXRlc1t0XSYmdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dJiZudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW3RdW25dW29dJiZkZWxldGUgdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dW29dfSxxbC5wcm90b3R5cGUucmVtb3ZlRmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihudWxsIT09dGhpcy5kZWxldGVkU3RhdGVzW3RdKXt2YXIgbj1TdHJpbmcoZSk7aWYodGhpcy5kZWxldGVkU3RhdGVzW3RdPXRoaXMuZGVsZXRlZFN0YXRlc1t0XXx8e30sciYmdm9pZCAwIT09ZSYmZT49MCludWxsIT09dGhpcy5kZWxldGVkU3RhdGVzW3RdW25dJiYodGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXXx8e30sdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dW3JdPW51bGwpO2Vsc2UgaWYodm9pZCAwIT09ZSYmZT49MClpZih0aGlzLnN0YXRlQ2hhbmdlc1t0XSYmdGhpcy5zdGF0ZUNoYW5nZXNbdF1bbl0pZm9yKHIgaW4gdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPXt9LHRoaXMuc3RhdGVDaGFuZ2VzW3RdW25dKXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXVtyXT1udWxsO2Vsc2UgdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPW51bGw7ZWxzZSB0aGlzLmRlbGV0ZWRTdGF0ZXNbdF09bnVsbH19LHFsLnByb3RvdHlwZS5nZXRTdGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPVN0cmluZyhlKSxuPXRoaXMuc3RhdGVbdF18fHt9LGE9dGhpcy5zdGF0ZUNoYW5nZXNbdF18fHt9LGk9aCh7fSxuW3JdLGFbcl0pO2lmKG51bGw9PT10aGlzLmRlbGV0ZWRTdGF0ZXNbdF0pcmV0dXJue307aWYodGhpcy5kZWxldGVkU3RhdGVzW3RdKXt2YXIgbz10aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bZV07aWYobnVsbD09PW8pcmV0dXJue307Zm9yKHZhciBzIGluIG8pZGVsZXRlIGlbc119cmV0dXJuIGl9LHFsLnByb3RvdHlwZS5pbml0aWFsaXplVGlsZVN0YXRlPWZ1bmN0aW9uKHQsZSl7dC5zZXRGZWF0dXJlU3RhdGUodGhpcy5zdGF0ZSxlKX0scWwucHJvdG90eXBlLmNvYWxlc2NlQ2hhbmdlcz1mdW5jdGlvbih0LGUpe3ZhciByPXt9O2Zvcih2YXIgbiBpbiB0aGlzLnN0YXRlQ2hhbmdlcyl7dGhpcy5zdGF0ZVtuXT10aGlzLnN0YXRlW25dfHx7fTt2YXIgYT17fTtmb3IodmFyIGkgaW4gdGhpcy5zdGF0ZUNoYW5nZXNbbl0pdGhpcy5zdGF0ZVtuXVtpXXx8KHRoaXMuc3RhdGVbbl1baV09e30pLGgodGhpcy5zdGF0ZVtuXVtpXSx0aGlzLnN0YXRlQ2hhbmdlc1tuXVtpXSksYVtpXT10aGlzLnN0YXRlW25dW2ldO3Jbbl09YX1mb3IodmFyIG8gaW4gdGhpcy5kZWxldGVkU3RhdGVzKXt0aGlzLnN0YXRlW29dPXRoaXMuc3RhdGVbb118fHt9O3ZhciBzPXt9O2lmKG51bGw9PT10aGlzLmRlbGV0ZWRTdGF0ZXNbb10pZm9yKHZhciBsIGluIHRoaXMuc3RhdGVbb10pc1tsXT17fSx0aGlzLnN0YXRlW29dW2xdPXt9O2Vsc2UgZm9yKHZhciBjIGluIHRoaXMuZGVsZXRlZFN0YXRlc1tvXSl7aWYobnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1tvXVtjXSl0aGlzLnN0YXRlW29dW2NdPXt9O2Vsc2UgZm9yKHZhciB1PTAsZj1PYmplY3Qua2V5cyh0aGlzLmRlbGV0ZWRTdGF0ZXNbb11bY10pO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIHA9Zlt1XTtkZWxldGUgdGhpcy5zdGF0ZVtvXVtjXVtwXX1zW2NdPXRoaXMuc3RhdGVbb11bY119cltvXT1yW29dfHx7fSxoKHJbb10scyl9aWYodGhpcy5zdGF0ZUNoYW5nZXM9e30sdGhpcy5kZWxldGVkU3RhdGVzPXt9LDAhPT1PYmplY3Qua2V5cyhyKS5sZW5ndGgpZm9yKHZhciBkIGluIHQpdFtkXS5zZXRGZWF0dXJlU3RhdGUocixlKX07dmFyIEhsPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRpbGVJRD10LHRoaXMueD10LmNhbm9uaWNhbC54LHRoaXMueT10LmNhbm9uaWNhbC55LHRoaXMuej10LmNhbm9uaWNhbC56LHRoaXMuZ3JpZD1lfHxuZXcgY24oZWksMTYsMCksdGhpcy5ncmlkM0Q9bmV3IGNuKGVpLDE2LDApLHRoaXMuZmVhdHVyZUluZGV4QXJyYXk9cnx8bmV3IENhfTtmdW5jdGlvbiBHbCh0KXtmb3IodmFyIGU9MS8wLHI9MS8wLG49LTEvMCxhPS0xLzAsaT0wLG89dDtpPG8ubGVuZ3RoO2krPTEpe3ZhciBzPW9baV07ZT1NYXRoLm1pbihlLHMueCkscj1NYXRoLm1pbihyLHMueSksbj1NYXRoLm1heChuLHMueCksYT1NYXRoLm1heChhLHMueSl9cmV0dXJue21pblg6ZSxtaW5ZOnIsbWF4WDpuLG1heFk6YX19ZnVuY3Rpb24gWWwodCxlKXtyZXR1cm4gZS10fUhsLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixhLGkpe3ZhciBvPXRoaXMuZmVhdHVyZUluZGV4QXJyYXkubGVuZ3RoO3RoaXMuZmVhdHVyZUluZGV4QXJyYXkuZW1wbGFjZUJhY2socixuLGEpO2Zvcih2YXIgcz1pP3RoaXMuZ3JpZDNEOnRoaXMuZ3JpZCxsPTA7bDxlLmxlbmd0aDtsKyspe2Zvcih2YXIgYz1lW2xdLHU9WzEvMCwxLzAsLTEvMCwtMS8wXSxoPTA7aDxjLmxlbmd0aDtoKyspe3ZhciBmPWNbaF07dVswXT1NYXRoLm1pbih1WzBdLGYueCksdVsxXT1NYXRoLm1pbih1WzFdLGYueSksdVsyXT1NYXRoLm1heCh1WzJdLGYueCksdVszXT1NYXRoLm1heCh1WzNdLGYueSl9dVswXTxlaSYmdVsxXTxlaSYmdVsyXT49MCYmdVszXT49MCYmcy5pbnNlcnQobyx1WzBdLHVbMV0sdVsyXSx1WzNdKX19LEhsLnByb3RvdHlwZS5sb2FkVlRMYXllcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52dExheWVyc3x8KHRoaXMudnRMYXllcnM9bmV3IElvLlZlY3RvclRpbGUobmV3IHRsKHRoaXMucmF3VGlsZURhdGEpKS5sYXllcnMsdGhpcy5zb3VyY2VMYXllckNvZGVyPW5ldyBqbCh0aGlzLnZ0TGF5ZXJzP09iamVjdC5rZXlzKHRoaXMudnRMYXllcnMpLnNvcnQoKTpbIl9nZW9qc29uVGlsZUxheWVyIl0pKSx0aGlzLnZ0TGF5ZXJzfSxIbC5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXM7dGhpcy5sb2FkVlRMYXllcnMoKTtmb3IodmFyIGk9dC5wYXJhbXN8fHt9LG89ZWkvdC50aWxlU2l6ZS90LnNjYWxlLHM9UnIoaS5maWx0ZXIpLGw9dC5xdWVyeUdlb21ldHJ5LGM9dC5xdWVyeVBhZGRpbmcqbyx1PUdsKGwpLGg9dGhpcy5ncmlkLnF1ZXJ5KHUubWluWC1jLHUubWluWS1jLHUubWF4WCtjLHUubWF4WStjKSxmPUdsKHQuY2FtZXJhUXVlcnlHZW9tZXRyeSkscD0wLGQ9dGhpcy5ncmlkM0QucXVlcnkoZi5taW5YLWMsZi5taW5ZLWMsZi5tYXhYK2MsZi5tYXhZK2MsZnVuY3Rpb24oZSxyLG4saSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBvPTAscz10O288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTtpZihlPD1sLngmJnI8PWwueSYmbj49bC54JiZpPj1sLnkpcmV0dXJuITB9dmFyIGM9W25ldyBhKGUsciksbmV3IGEoZSxpKSxuZXcgYShuLGkpLG5ldyBhKG4scildO2lmKHQubGVuZ3RoPjIpZm9yKHZhciB1PTAsaD1jO3U8aC5sZW5ndGg7dSs9MSlpZihnaSh0LGhbdV0pKXJldHVybiEwO2Zvcih2YXIgZj0wO2Y8dC5sZW5ndGgtMTtmKyspaWYodmkodFtmXSx0W2YrMV0sYykpcmV0dXJuITA7cmV0dXJuITF9KHQuY2FtZXJhUXVlcnlHZW9tZXRyeSxlLWMsci1jLG4rYyxpK2MpfSk7cDxkLmxlbmd0aDtwKz0xKXt2YXIgZz1kW3BdO2gucHVzaChnKX1oLnNvcnQoWWwpO2Zvcih2YXIgdixtPXt9LHk9ZnVuY3Rpb24oYSl7dmFyIGM9aFthXTtpZihjIT09dil7dj1jO3ZhciB1PW4uZmVhdHVyZUluZGV4QXJyYXkuZ2V0KGMpLGY9bnVsbDtuLmxvYWRNYXRjaGluZ0ZlYXR1cmUobSx1LmJ1Y2tldEluZGV4LHUuc291cmNlTGF5ZXJJbmRleCx1LmZlYXR1cmVJbmRleCxzLGkubGF5ZXJzLGUsZnVuY3Rpb24oZSxhKXtmfHwoZj1uaShlKSk7dmFyIGk9e307cmV0dXJuIGUuaWQmJihpPXIuZ2V0U3RhdGUoYS5zb3VyY2VMYXllcnx8Il9nZW9qc29uVGlsZUxheWVyIixlLmlkKSksYS5xdWVyeUludGVyc2VjdHNGZWF0dXJlKGwsZSxpLGYsbi56LHQudHJhbnNmb3JtLG8sdC5waXhlbFBvc01hdHJpeCl9KX19LHg9MDt4PGgubGVuZ3RoO3grKyl5KHgpO3JldHVybiBtfSxIbC5wcm90b3R5cGUubG9hZE1hdGNoaW5nRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGEsaSxvLHMpe3ZhciBsPXRoaXMuYnVja2V0TGF5ZXJJRHNbZV07aWYoIWl8fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYoZS5pbmRleE9mKHRbcl0pPj0wKXJldHVybiEwO3JldHVybiExfShpLGwpKXt2YXIgYz10aGlzLnNvdXJjZUxheWVyQ29kZXIuZGVjb2RlKHIpLHU9dGhpcy52dExheWVyc1tjXS5mZWF0dXJlKG4pO2lmKGEobmV3IFBuKHRoaXMudGlsZUlELm92ZXJzY2FsZWRaKSx1KSlmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIGY9bFtoXTtpZighKGkmJmkuaW5kZXhPZihmKTwwKSl7dmFyIHA9b1tmXTtpZihwKXt2YXIgZD0hc3x8cyh1LHApO2lmKGQpe3ZhciBnPW5ldyBWbCh1LHRoaXMueix0aGlzLngsdGhpcy55KTtnLmxheWVyPXAuc2VyaWFsaXplKCk7dmFyIHY9dFtmXTt2b2lkIDA9PT12JiYodj10W2ZdPVtdKSx2LnB1c2goe2ZlYXR1cmVJbmRleDpuLGZlYXR1cmU6ZyxpbnRlcnNlY3Rpb25aOmR9KX19fX19fSxIbC5wcm90b3R5cGUubG9va3VwU3ltYm9sRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIsbixhLGkpe3ZhciBvPXt9O3RoaXMubG9hZFZUTGF5ZXJzKCk7Zm9yKHZhciBzPVJyKG4pLGw9MCxjPXQ7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdO3RoaXMubG9hZE1hdGNoaW5nRmVhdHVyZShvLGUscix1LHMsYSxpKX1yZXR1cm4gb30sSGwucHJvdG90eXBlLmhhc0xheWVyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5idWNrZXRMYXllcklEcztlPHIubGVuZ3RoO2UrPTEpZm9yKHZhciBuPTAsYT1yW2VdO248YS5sZW5ndGg7bis9MSlpZih0PT09YVtuXSlyZXR1cm4hMDtyZXR1cm4hMX0sZG4oIkZlYXR1cmVJbmRleCIsSGwse29taXQ6WyJyYXdUaWxlRGF0YSIsInNvdXJjZUxheWVyQ29kZXIiXX0pO3ZhciBXbD1mdW5jdGlvbih0LGUpe3RoaXMudGlsZUlEPXQsdGhpcy51aWQ9cCgpLHRoaXMudXNlcz0wLHRoaXMudGlsZVNpemU9ZSx0aGlzLmJ1Y2tldHM9e30sdGhpcy5leHBpcmF0aW9uVGltZT1udWxsLHRoaXMucXVlcnlQYWRkaW5nPTAsdGhpcy5oYXNTeW1ib2xCdWNrZXRzPSExLHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuc3RhdGU9ImxvYWRpbmcifTtmdW5jdGlvbiBYbCh0LGUscixuLGEpe2lmKHZvaWQgMD09PWUuc2VnbWVudClyZXR1cm4hMDtmb3IodmFyIGk9ZSxvPWUuc2VnbWVudCsxLHM9MDtzPi1yLzI7KXtpZigtLW88MClyZXR1cm4hMTtzLT10W29dLmRpc3QoaSksaT10W29dfXMrPXRbb10uZGlzdCh0W28rMV0pLG8rKztmb3IodmFyIGw9W10sYz0wO3M8ci8yOyl7dmFyIHU9dFtvLTFdLGg9dFtvXSxmPXRbbysxXTtpZighZilyZXR1cm4hMTt2YXIgcD11LmFuZ2xlVG8oaCktaC5hbmdsZVRvKGYpO2ZvcihwPU1hdGguYWJzKChwKzMqTWF0aC5QSSklKDIqTWF0aC5QSSktTWF0aC5QSSksbC5wdXNoKHtkaXN0YW5jZTpzLGFuZ2xlRGVsdGE6cH0pLGMrPXA7cy1sWzBdLmRpc3RhbmNlPm47KWMtPWwuc2hpZnQoKS5hbmdsZURlbHRhO2lmKGM+YSlyZXR1cm4hMTtvKysscys9aC5kaXN0KGYpfXJldHVybiEwfWZ1bmN0aW9uIFpsKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoLTE7cisrKWUrPXRbcl0uZGlzdCh0W3IrMV0pO3JldHVybiBlfWZ1bmN0aW9uIEpsKHQsZSxyKXtyZXR1cm4gdD8uNiplKnI6MH1mdW5jdGlvbiBLbCh0LGUpe3JldHVybiBNYXRoLm1heCh0P3QucmlnaHQtdC5sZWZ0OjAsZT9lLnJpZ2h0LWUubGVmdDowKX1mdW5jdGlvbiBRbCh0LGUscixuLGEsaSl7Zm9yKHZhciBvPUpsKHIsYSxpKSxzPUtsKHIsbikqaSxsPTAsYz1abCh0KS8yLHU9MDt1PHQubGVuZ3RoLTE7dSsrKXt2YXIgaD10W3VdLGY9dFt1KzFdLHA9aC5kaXN0KGYpO2lmKGwrcD5jKXt2YXIgZD0oYy1sKS9wLGc9eWUoaC54LGYueCxkKSx2PXllKGgueSxmLnksZCksbT1uZXcgYnMoZyx2LGYuYW5nbGVUbyhoKSx1KTtyZXR1cm4gbS5fcm91bmQoKSwhb3x8WGwodCxtLHMsbyxlKT9tOnZvaWQgMH1sKz1wfX1mdW5jdGlvbiAkbCh0LGUscixuLGEsaSxvLHMsbCl7dmFyIGM9SmwobixpLG8pLHU9S2wobixhKSxoPXUqbyxmPTA9PT10WzBdLnh8fHRbMF0ueD09PWx8fDA9PT10WzBdLnl8fHRbMF0ueT09PWw7cmV0dXJuIGUtaDxlLzQmJihlPWgrZS80KSxmdW5jdGlvbiB0KGUscixuLGEsaSxvLHMsbCxjKXtmb3IodmFyIHU9by8yLGg9WmwoZSksZj0wLHA9ci1uLGQ9W10sZz0wO2c8ZS5sZW5ndGgtMTtnKyspe2Zvcih2YXIgdj1lW2ddLG09ZVtnKzFdLHk9di5kaXN0KG0pLHg9bS5hbmdsZVRvKHYpO3ArbjxmK3k7KXt2YXIgYj0oKHArPW4pLWYpL3ksXz15ZSh2LngsbS54LGIpLHc9eWUodi55LG0ueSxiKTtpZihfPj0wJiZfPGMmJnc+PTAmJnc8YyYmcC11Pj0wJiZwK3U8PWgpe3ZhciBrPW5ldyBicyhfLHcseCxnKTtrLl9yb3VuZCgpLGEmJiFYbChlLGssbyxhLGkpfHxkLnB1c2goayl9fWYrPXl9cmV0dXJuIGx8fGQubGVuZ3RofHxzfHwoZD10KGUsZi8yLG4sYSxpLG8scywhMCxjKSksZH0odCxmP2UvMipzJWU6KHUvMisyKmkpKm8qcyVlLGUsYyxyLGgsZiwhMSxsKX1XbC5wcm90b3R5cGUucmVnaXN0ZXJGYWRlRHVyYXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dCt0aGlzLnRpbWVBZGRlZDtlPEkubm93KCl8fHRoaXMuZmFkZUVuZFRpbWUmJmU8dGhpcy5mYWRlRW5kVGltZXx8KHRoaXMuZmFkZUVuZFRpbWU9ZSl9LFdsLnByb3RvdHlwZS53YXNSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4iZXJyb3JlZCI9PT10aGlzLnN0YXRlfHwibG9hZGVkIj09PXRoaXMuc3RhdGV8fCJyZWxvYWRpbmciPT09dGhpcy5zdGF0ZX0sV2wucHJvdG90eXBlLmxvYWRWZWN0b3JEYXRhPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmhhc0RhdGEoKSYmdGhpcy51bmxvYWRWZWN0b3JEYXRhKCksdGhpcy5zdGF0ZT0ibG9hZGVkIix0KXtmb3IodmFyIG4gaW4gdC5mZWF0dXJlSW5kZXgmJih0aGlzLmxhdGVzdEZlYXR1cmVJbmRleD10LmZlYXR1cmVJbmRleCx0LnJhd1RpbGVEYXRhPyh0aGlzLmxhdGVzdFJhd1RpbGVEYXRhPXQucmF3VGlsZURhdGEsdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE9dC5yYXdUaWxlRGF0YSk6dGhpcy5sYXRlc3RSYXdUaWxlRGF0YSYmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhPXRoaXMubGF0ZXN0UmF3VGlsZURhdGEpKSx0aGlzLmNvbGxpc2lvbkJveEFycmF5PXQuY29sbGlzaW9uQm94QXJyYXksdGhpcy5idWNrZXRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307aWYoIWUpcmV0dXJuIHI7Zm9yKHZhciBuPWZ1bmN0aW9uKCl7dmFyIHQ9aVthXSxuPXQubGF5ZXJJZHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLmdldExheWVyKHQpfSkuZmlsdGVyKEJvb2xlYW4pO2lmKDAhPT1uLmxlbmd0aCl7dC5sYXllcnM9bix0LnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMmJih0LnN0YXRlRGVwZW5kZW50TGF5ZXJzPXQuc3RhdGVEZXBlbmRlbnRMYXllcklkcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09dH0pWzBdfSkpO2Zvcih2YXIgbz0wLHM9bjtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb107cltsLmlkXT10fX19LGE9MCxpPXQ7YTxpLmxlbmd0aDthKz0xKW4oKTtyZXR1cm4gcn0odC5idWNrZXRzLGUuc3R5bGUpLHRoaXMuaGFzU3ltYm9sQnVja2V0cz0hMSx0aGlzLmJ1Y2tldHMpe3ZhciBhPXRoaXMuYnVja2V0c1tuXTtpZihhIGluc3RhbmNlb2YgT3Mpe2lmKHRoaXMuaGFzU3ltYm9sQnVja2V0cz0hMCwhcilicmVhazthLmp1c3RSZWxvYWRlZD0hMH19Zm9yKHZhciBpIGluIHRoaXMucXVlcnlQYWRkaW5nPTAsdGhpcy5idWNrZXRzKXt2YXIgbz10aGlzLmJ1Y2tldHNbaV07dGhpcy5xdWVyeVBhZGRpbmc9TWF0aC5tYXgodGhpcy5xdWVyeVBhZGRpbmcsZS5zdHlsZS5nZXRMYXllcihpKS5xdWVyeVJhZGl1cyhvKSl9dC5pbWFnZUF0bGFzJiYodGhpcy5pbWFnZUF0bGFzPXQuaW1hZ2VBdGxhcyksdC5nbHlwaEF0bGFzSW1hZ2UmJih0aGlzLmdseXBoQXRsYXNJbWFnZT10LmdseXBoQXRsYXNJbWFnZSl9ZWxzZSB0aGlzLmNvbGxpc2lvbkJveEFycmF5PW5ldyBiYX0sV2wucHJvdG90eXBlLnVubG9hZFZlY3RvckRhdGE9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5idWNrZXRzKXRoaXMuYnVja2V0c1t0XS5kZXN0cm95KCk7dGhpcy5idWNrZXRzPXt9LHRoaXMuaW1hZ2VBdGxhc1RleHR1cmUmJnRoaXMuaW1hZ2VBdGxhc1RleHR1cmUuZGVzdHJveSgpLHRoaXMuaW1hZ2VBdGxhcyYmKHRoaXMuaW1hZ2VBdGxhcz1udWxsKSx0aGlzLmdseXBoQXRsYXNUZXh0dXJlJiZ0aGlzLmdseXBoQXRsYXNUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLmxhdGVzdEZlYXR1cmVJbmRleD1udWxsLHRoaXMuc3RhdGU9InVubG9hZGVkIn0sV2wucHJvdG90eXBlLnVubG9hZERFTURhdGE9ZnVuY3Rpb24oKXt0aGlzLmRlbT1udWxsLHRoaXMubmVpZ2hib3JpbmdUaWxlcz1udWxsLHRoaXMuc3RhdGU9InVubG9hZGVkIn0sV2wucHJvdG90eXBlLmdldEJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5idWNrZXRzW3QuaWRdfSxXbC5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLmJ1Y2tldHMpe3ZhciByPXRoaXMuYnVja2V0c1tlXTtyLnVwbG9hZFBlbmRpbmcoKSYmci51cGxvYWQodCl9dmFyIG49dC5nbDt0aGlzLmltYWdlQXRsYXMmJiF0aGlzLmltYWdlQXRsYXMudXBsb2FkZWQmJih0aGlzLmltYWdlQXRsYXNUZXh0dXJlPW5ldyBLcyh0LHRoaXMuaW1hZ2VBdGxhcy5pbWFnZSxuLlJHQkEpLHRoaXMuaW1hZ2VBdGxhcy51cGxvYWRlZD0hMCksdGhpcy5nbHlwaEF0bGFzSW1hZ2UmJih0aGlzLmdseXBoQXRsYXNUZXh0dXJlPW5ldyBLcyh0LHRoaXMuZ2x5cGhBdGxhc0ltYWdlLG4uQUxQSEEpLHRoaXMuZ2x5cGhBdGxhc0ltYWdlPW51bGwpfSxXbC5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbih0KXt0aGlzLmltYWdlQXRsYXMmJnRoaXMuaW1hZ2VBdGxhcy5wYXRjaFVwZGF0ZWRJbWFnZXModCx0aGlzLmltYWdlQXRsYXNUZXh0dXJlKX0sV2wucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcz1mdW5jdGlvbih0LGUscixuLGEsaSxvLHMsbCl7cmV0dXJuIHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4JiZ0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YT90aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5xdWVyeSh7cXVlcnlHZW9tZXRyeTpyLGNhbWVyYVF1ZXJ5R2VvbWV0cnk6bixzY2FsZTphLHRpbGVTaXplOnRoaXMudGlsZVNpemUscGl4ZWxQb3NNYXRyaXg6bCx0cmFuc2Zvcm06byxwYXJhbXM6aSxxdWVyeVBhZGRpbmc6dGhpcy5xdWVyeVBhZGRpbmcqc30sdCxlKTp7fX0sV2wucHJvdG90eXBlLnF1ZXJ5U291cmNlRmVhdHVyZXM9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCYmdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGEpe3ZhciByPXRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LmxvYWRWVExheWVycygpLG49ZT9lLnNvdXJjZUxheWVyOiIiLGE9ci5fZ2VvanNvblRpbGVMYXllcnx8cltuXTtpZihhKWZvcih2YXIgaT1ScihlJiZlLmZpbHRlciksbz10aGlzLnRpbGVJRC5jYW5vbmljYWwscz1vLnosbD1vLngsYz1vLnksdT17ejpzLHg6bCx5OmN9LGg9MDtoPGEubGVuZ3RoO2grKyl7dmFyIGY9YS5mZWF0dXJlKGgpO2lmKGkobmV3IFBuKHRoaXMudGlsZUlELm92ZXJzY2FsZWRaKSxmKSl7dmFyIHA9bmV3IFZsKGYscyxsLGMpO3AudGlsZT11LHQucHVzaChwKX19fX0sV2wucHJvdG90eXBlLmNsZWFyTWFzaz1mdW5jdGlvbigpe3RoaXMuc2VnbWVudHMmJih0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5zZWdtZW50cyksdGhpcy5tYXNrZWRCb3VuZHNCdWZmZXImJih0aGlzLm1hc2tlZEJvdW5kc0J1ZmZlci5kZXN0cm95KCksZGVsZXRlIHRoaXMubWFza2VkQm91bmRzQnVmZmVyKSx0aGlzLm1hc2tlZEluZGV4QnVmZmVyJiYodGhpcy5tYXNrZWRJbmRleEJ1ZmZlci5kZXN0cm95KCksZGVsZXRlIHRoaXMubWFza2VkSW5kZXhCdWZmZXIpfSxXbC5wcm90b3R5cGUuc2V0TWFzaz1mdW5jdGlvbih0LGUpe2lmKCFvKHRoaXMubWFzayx0KSYmKHRoaXMubWFzaz10LHRoaXMuY2xlYXJNYXNrKCksIW8odCx7MDohMH0pKSl7dmFyIHI9bmV3ICRuLG49bmV3IGRhO3RoaXMuc2VnbWVudHM9bmV3IE9hLHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoMCxyLG4pO2Zvcih2YXIgaT1PYmplY3Qua2V5cyh0KSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPXRbK2lbc11dLGM9ZWk+Pmwueix1PW5ldyBhKGwueCpjLGwueSpjKSxoPW5ldyBhKHUueCtjLHUueStjKSxmPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCxyLG4pO3IuZW1wbGFjZUJhY2sodS54LHUueSx1LngsdS55KSxyLmVtcGxhY2VCYWNrKGgueCx1LnksaC54LHUueSksci5lbXBsYWNlQmFjayh1LngsaC55LHUueCxoLnkpLHIuZW1wbGFjZUJhY2soaC54LGgueSxoLngsaC55KTt2YXIgcD1mLnZlcnRleExlbmd0aDtuLmVtcGxhY2VCYWNrKHAscCsxLHArMiksbi5lbXBsYWNlQmFjayhwKzEscCsyLHArMyksZi52ZXJ0ZXhMZW5ndGgrPTQsZi5wcmltaXRpdmVMZW5ndGgrPTJ9dGhpcy5tYXNrZWRCb3VuZHNCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIocixObC5tZW1iZXJzKSx0aGlzLm1hc2tlZEluZGV4QnVmZmVyPWUuY3JlYXRlSW5kZXhCdWZmZXIobil9fSxXbC5wcm90b3R5cGUuaGFzRGF0YT1mdW5jdGlvbigpe3JldHVybiJsb2FkZWQiPT09dGhpcy5zdGF0ZXx8InJlbG9hZGluZyI9PT10aGlzLnN0YXRlfHwiZXhwaXJlZCI9PT10aGlzLnN0YXRlfSxXbC5wcm90b3R5cGUucGF0dGVybnNMb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbWFnZUF0bGFzJiYhIU9iamVjdC5rZXlzKHRoaXMuaW1hZ2VBdGxhcy5wYXR0ZXJuUG9zaXRpb25zKS5sZW5ndGh9LFdsLnByb3RvdHlwZS5zZXRFeHBpcnlEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZXhwaXJhdGlvblRpbWU7aWYodC5jYWNoZUNvbnRyb2wpe3ZhciByPU0odC5jYWNoZUNvbnRyb2wpO3JbIm1heC1hZ2UiXSYmKHRoaXMuZXhwaXJhdGlvblRpbWU9RGF0ZS5ub3coKSsxZTMqclsibWF4LWFnZSJdKX1lbHNlIHQuZXhwaXJlcyYmKHRoaXMuZXhwaXJhdGlvblRpbWU9bmV3IERhdGUodC5leHBpcmVzKS5nZXRUaW1lKCkpO2lmKHRoaXMuZXhwaXJhdGlvblRpbWUpe3ZhciBuPURhdGUubm93KCksYT0hMTtpZih0aGlzLmV4cGlyYXRpb25UaW1lPm4pYT0hMTtlbHNlIGlmKGUpaWYodGhpcy5leHBpcmF0aW9uVGltZTxlKWE9ITA7ZWxzZXt2YXIgaT10aGlzLmV4cGlyYXRpb25UaW1lLWU7aT90aGlzLmV4cGlyYXRpb25UaW1lPW4rTWF0aC5tYXgoaSwzZTQpOmE9ITB9ZWxzZSBhPSEwO2E/KHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCsrLHRoaXMuc3RhdGU9ImV4cGlyZWQiKTp0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQ9MH19LFdsLnByb3RvdHlwZS5nZXRFeHBpcnlUaW1lb3V0PWZ1bmN0aW9uKCl7aWYodGhpcy5leHBpcmF0aW9uVGltZSlyZXR1cm4gdGhpcy5leHBpcmVkUmVxdWVzdENvdW50PzFlMyooMTw8TWF0aC5taW4odGhpcy5leHBpcmVkUmVxdWVzdENvdW50LTEsMzEpKTpNYXRoLm1pbih0aGlzLmV4cGlyYXRpb25UaW1lLShuZXcgRGF0ZSkuZ2V0VGltZSgpLE1hdGgucG93KDIsMzEpLTEpfSxXbC5wcm90b3R5cGUuc2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgmJnRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhJiYwIT09T2JqZWN0LmtleXModCkubGVuZ3RoKXt2YXIgcj10aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5sb2FkVlRMYXllcnMoKTtmb3IodmFyIG4gaW4gdGhpcy5idWNrZXRzKXt2YXIgYT10aGlzLmJ1Y2tldHNbbl0saT1hLmxheWVyc1swXS5zb3VyY2VMYXllcnx8Il9nZW9qc29uVGlsZUxheWVyIixvPXJbaV0scz10W2ldO28mJnMmJjAhPT1PYmplY3Qua2V5cyhzKS5sZW5ndGgmJihhLnVwZGF0ZShzLG8sdGhpcy5pbWFnZUF0bGFzJiZ0aGlzLmltYWdlQXRsYXMucGF0dGVyblBvc2l0aW9uc3x8e30pLGUmJmUuc3R5bGUmJih0aGlzLnF1ZXJ5UGFkZGluZz1NYXRoLm1heCh0aGlzLnF1ZXJ5UGFkZGluZyxlLnN0eWxlLmdldExheWVyKG4pLnF1ZXJ5UmFkaXVzKGEpKSkpfX19LFdsLnByb3RvdHlwZS5ob2xkaW5nRm9yRmFkZT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLnN5bWJvbEZhZGVIb2xkVW50aWx9LFdsLnByb3RvdHlwZS5zeW1ib2xGYWRlRmluaXNoZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsfHx0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWw8SS5ub3coKX0sV2wucHJvdG90eXBlLmNsZWFyRmFkZUhvbGQ9ZnVuY3Rpb24oKXt0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWw9dm9pZCAwfSxXbC5wcm90b3R5cGUuc2V0SG9sZER1cmF0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbD1JLm5vdygpK3R9O3ZhciB0Yz1mdW5jdGlvbih0LGUscixuLGksbyxzLGwsYyx1LGgsZil7dmFyIHA9cy50b3AqbC1jLGQ9cy5ib3R0b20qbCtjLGc9cy5sZWZ0KmwtYyx2PXMucmlnaHQqbCtjO2lmKHRoaXMuYm94U3RhcnRJbmRleD10Lmxlbmd0aCx1KXt2YXIgbT1kLXAseT12LWc7bT4wJiYobT1NYXRoLm1heCgxMCpsLG0pLHRoaXMuX2FkZExpbmVDb2xsaXNpb25DaXJjbGVzKHQsZSxyLHIuc2VnbWVudCx5LG0sbixpLG8saCkpfWVsc2V7aWYoZil7dmFyIHg9bmV3IGEoZyxwKSxiPW5ldyBhKHYscCksXz1uZXcgYShnLGQpLHc9bmV3IGEodixkKSxrPWYqTWF0aC5QSS8xODA7eC5fcm90YXRlKGspLGIuX3JvdGF0ZShrKSxfLl9yb3RhdGUoayksdy5fcm90YXRlKGspLGc9TWF0aC5taW4oeC54LGIueCxfLngsdy54KSx2PU1hdGgubWF4KHgueCxiLngsXy54LHcueCkscD1NYXRoLm1pbih4LnksYi55LF8ueSx3LnkpLGQ9TWF0aC5tYXgoeC55LGIueSxfLnksdy55KX10LmVtcGxhY2VCYWNrKHIueCxyLnksZyxwLHYsZCxuLGksbywwLDApfXRoaXMuYm94RW5kSW5kZXg9dC5sZW5ndGh9O3RjLnByb3RvdHlwZS5fYWRkTGluZUNvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24odCxlLHIsbixhLGksbyxzLGwsYyl7dmFyIHU9aS8yLGg9TWF0aC5mbG9vcihhL3UpfHwxLGY9MSsuNCpNYXRoLmxvZyhjKS9NYXRoLkxOMixwPU1hdGguZmxvb3IoaCpmLzIpLGQ9LWkvMixnPXIsdj1uKzEsbT1kLHk9LWEvMix4PXktYS80O2Rve2lmKC0tdjwwKXtpZihtPnkpcmV0dXJuO3Y9MDticmVha31tLT1lW3ZdLmRpc3QoZyksZz1lW3ZdfXdoaWxlKG0+eCk7Zm9yKHZhciBiPWVbdl0uZGlzdChlW3YrMV0pLF89LXA7XzxoK3A7XysrKXt2YXIgdz1fKnUsaz15K3c7aWYodzwwJiYoays9dyksdz5hJiYoays9dy1hKSwhKGs8bSkpe2Zvcig7bStiPGs7KXtpZihtKz1iLCsrdisxPj1lLmxlbmd0aClyZXR1cm47Yj1lW3ZdLmRpc3QoZVt2KzFdKX12YXIgVD1rLW0sTT1lW3ZdLEE9ZVt2KzFdLnN1YihNKS5fdW5pdCgpLl9tdWx0KFQpLl9hZGQoTSkuX3JvdW5kKCksUz1NYXRoLmFicyhrLWQpPHU/MDouOCooay1kKTt0LmVtcGxhY2VCYWNrKEEueCxBLnksLWkvMiwtaS8yLGkvMixpLzIsbyxzLGwsaS8yLFMpfX19O3ZhciBlYz1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PXQmJih0PVtdKSx2b2lkIDA9PT1lJiYoZT1yYyksdGhpcy5kYXRhPXQsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmNvbXBhcmU9ZSx0aGlzLmxlbmd0aD4wKWZvcih2YXIgcj0odGhpcy5sZW5ndGg+PjEpLTE7cj49MDtyLS0pdGhpcy5fZG93bihyKX07ZnVuY3Rpb24gcmModCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gbmModCxlLHIpe3ZvaWQgMD09PWUmJihlPTEpLHZvaWQgMD09PXImJihyPSExKTtmb3IodmFyIG49MS8wLGk9MS8wLG89LTEvMCxzPS0xLzAsbD10WzBdLGM9MDtjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bFtjXTsoIWN8fHUueDxuKSYmKG49dS54KSwoIWN8fHUueTxpKSYmKGk9dS55KSwoIWN8fHUueD5vKSYmKG89dS54KSwoIWN8fHUueT5zKSYmKHM9dS55KX12YXIgaD1vLW4sZj1zLWkscD1NYXRoLm1pbihoLGYpLGQ9cC8yLGc9bmV3IGVjKFtdLGFjKTtpZigwPT09cClyZXR1cm4gbmV3IGEobixpKTtmb3IodmFyIHY9bjt2PG87dis9cClmb3IodmFyIG09aTttPHM7bSs9cClnLnB1c2gobmV3IGljKHYrZCxtK2QsZCx0KSk7Zm9yKHZhciB5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MCxuPTAsYT10WzBdLGk9MCxvPWEubGVuZ3RoLHM9by0xO2k8bztzPWkrKyl7dmFyIGw9YVtpXSxjPWFbc10sdT1sLngqYy55LWMueCpsLnk7cis9KGwueCtjLngpKnUsbis9KGwueStjLnkpKnUsZSs9Myp1fXJldHVybiBuZXcgaWMoci9lLG4vZSwwLHQpfSh0KSx4PWcubGVuZ3RoO2cubGVuZ3RoOyl7dmFyIGI9Zy5wb3AoKTsoYi5kPnkuZHx8IXkuZCkmJih5PWIsciYmY29uc29sZS5sb2coImZvdW5kIGJlc3QgJWQgYWZ0ZXIgJWQgcHJvYmVzIixNYXRoLnJvdW5kKDFlNCpiLmQpLzFlNCx4KSksYi5tYXgteS5kPD1lfHwoZD1iLmgvMixnLnB1c2gobmV3IGljKGIucC54LWQsYi5wLnktZCxkLHQpKSxnLnB1c2gobmV3IGljKGIucC54K2QsYi5wLnktZCxkLHQpKSxnLnB1c2gobmV3IGljKGIucC54LWQsYi5wLnkrZCxkLHQpKSxnLnB1c2gobmV3IGljKGIucC54K2QsYi5wLnkrZCxkLHQpKSx4Kz00KX1yZXR1cm4gciYmKGNvbnNvbGUubG9nKCJudW0gcHJvYmVzOiAiK3gpLGNvbnNvbGUubG9nKCJiZXN0IGRpc3RhbmNlOiAiK3kuZCkpLHkucH1mdW5jdGlvbiBhYyh0LGUpe3JldHVybiBlLm1heC10Lm1heH1mdW5jdGlvbiBpYyh0LGUscixuKXt0aGlzLnA9bmV3IGEodCxlKSx0aGlzLmg9cix0aGlzLmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ITEsbj0xLzAsYT0wO2E8ZS5sZW5ndGg7YSsrKWZvcih2YXIgaT1lW2FdLG89MCxzPWkubGVuZ3RoLGw9cy0xO288cztsPW8rKyl7dmFyIGM9aVtvXSx1PWlbbF07Yy55PnQueSE9dS55PnQueSYmdC54PCh1LngtYy54KSoodC55LWMueSkvKHUueS1jLnkpK2MueCYmKHI9IXIpLG49TWF0aC5taW4obixwaSh0LGMsdSkpfXJldHVybihyPzE6LTEpKk1hdGguc3FydChuKX0odGhpcy5wLG4pLHRoaXMubWF4PXRoaXMuZCt0aGlzLmgqTWF0aC5TUVJUMn1lYy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0KXt0aGlzLmRhdGEucHVzaCh0KSx0aGlzLmxlbmd0aCsrLHRoaXMuX3VwKHRoaXMubGVuZ3RoLTEpfSxlYy5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgdD10aGlzLmRhdGFbMF0sZT10aGlzLmRhdGEucG9wKCk7cmV0dXJuIHRoaXMubGVuZ3RoLS0sdGhpcy5sZW5ndGg+MCYmKHRoaXMuZGF0YVswXT1lLHRoaXMuX2Rvd24oMCkpLHR9fSxlYy5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGFbMF19LGVjLnByb3RvdHlwZS5fdXA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YSxyPXRoaXMuY29tcGFyZSxuPWVbdF07dD4wOyl7dmFyIGE9dC0xPj4xLGk9ZVthXTtpZihyKG4saSk+PTApYnJlYWs7ZVt0XT1pLHQ9YX1lW3RdPW59LGVjLnByb3RvdHlwZS5fZG93bj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5kYXRhLHI9dGhpcy5jb21wYXJlLG49dGhpcy5sZW5ndGg+PjEsYT1lW3RdO3Q8bjspe3ZhciBpPTErKHQ8PDEpLG89ZVtpXSxzPWkrMTtpZihzPHRoaXMubGVuZ3RoJiZyKGVbc10sbyk8MCYmKGk9cyxvPWVbc10pLHIobyxhKT49MClicmVhaztlW3RdPW8sdD1pfWVbdF09YX07dmFyIG9jPWUoZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhLGksbyxzLGwsYztmb3Iocj0zJnQubGVuZ3RoLG49dC5sZW5ndGgtcixhPWUsbz0zNDMyOTE4MzUzLHM9NDYxODQ1OTA3LGM9MDtjPG47KWw9MjU1JnQuY2hhckNvZGVBdChjKXwoMjU1JnQuY2hhckNvZGVBdCgrK2MpKTw8OHwoMjU1JnQuY2hhckNvZGVBdCgrK2MpKTw8MTZ8KDI1NSZ0LmNoYXJDb2RlQXQoKytjKSk8PDI0LCsrYyxhPTI3NDkyKyg2NTUzNSYoaT01Kig2NTUzNSYoYT0oYV49bD0oNjU1MzUmKGw9KGw9KDY1NTM1JmwpKm8rKCgobD4+PjE2KSpvJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTUpPDwxNXxsPj4+MTcpKSpzKygoKGw+Pj4xNikqcyY2NTUzNSk8PDE2KSY0Mjk0OTY3Mjk1KTw8MTN8YT4+PjE5KSkrKCg1KihhPj4+MTYpJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTUpKSsoKDU4OTY0KyhpPj4+MTYpJjY1NTM1KTw8MTYpO3N3aXRjaChsPTAscil7Y2FzZSAzOmxePSgyNTUmdC5jaGFyQ29kZUF0KGMrMikpPDwxNjtjYXNlIDI6bF49KDI1NSZ0LmNoYXJDb2RlQXQoYysxKSk8PDg7Y2FzZSAxOmFePWw9KDY1NTM1JihsPShsPSg2NTUzNSYobF49MjU1JnQuY2hhckNvZGVBdChjKSkpKm8rKCgobD4+PjE2KSpvJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTUpPDwxNXxsPj4+MTcpKSpzKygoKGw+Pj4xNikqcyY2NTUzNSk8PDE2KSY0Mjk0OTY3Mjk1fXJldHVybiBhXj10Lmxlbmd0aCxhPTIyNDY4MjI1MDcqKDY1NTM1JihhXj1hPj4+MTYpKSsoKDIyNDY4MjI1MDcqKGE+Pj4xNikmNjU1MzUpPDwxNikmNDI5NDk2NzI5NSxhPTMyNjY0ODk5MDkqKDY1NTM1JihhXj1hPj4+MTMpKSsoKDMyNjY0ODk5MDkqKGE+Pj4xNikmNjU1MzUpPDwxNikmNDI5NDk2NzI5NSwoYV49YT4+PjE2KT4+PjB9fSksc2M9ZShmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10Lmxlbmd0aCxhPWVebixpPTA7bj49NDspcj0xNTQwNDgzNDc3Kig2NTUzNSYocj0yNTUmdC5jaGFyQ29kZUF0KGkpfCgyNTUmdC5jaGFyQ29kZUF0KCsraSkpPDw4fCgyNTUmdC5jaGFyQ29kZUF0KCsraSkpPDwxNnwoMjU1JnQuY2hhckNvZGVBdCgrK2kpKTw8MjQpKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNiksYT0xNTQwNDgzNDc3Kig2NTUzNSZhKSsoKDE1NDA0ODM0NzcqKGE+Pj4xNikmNjU1MzUpPDwxNileKHI9MTU0MDQ4MzQ3NyooNjU1MzUmKHJePXI+Pj4yNCkpKygoMTU0MDQ4MzQ3Nyoocj4+PjE2KSY2NTUzNSk8PDE2KSksbi09NCwrK2k7c3dpdGNoKG4pe2Nhc2UgMzphXj0oMjU1JnQuY2hhckNvZGVBdChpKzIpKTw8MTY7Y2FzZSAyOmFePSgyNTUmdC5jaGFyQ29kZUF0KGkrMSkpPDw4O2Nhc2UgMTphPTE1NDA0ODM0NzcqKDY1NTM1JihhXj0yNTUmdC5jaGFyQ29kZUF0KGkpKSkrKCgxNTQwNDgzNDc3KihhPj4+MTYpJjY1NTM1KTw8MTYpfXJldHVybiBhPTE1NDA0ODM0NzcqKDY1NTM1JihhXj1hPj4+MTMpKSsoKDE1NDA0ODM0NzcqKGE+Pj4xNikmNjU1MzUpPDwxNiksKGFePWE+Pj4xNSk+Pj4wfX0pLGxjPW9jLGNjPW9jLHVjPXNjO2xjLm11cm11cjM9Y2MsbGMubXVybXVyMj11Yzt2YXIgaGM9NztmdW5jdGlvbiBmYyh0LGUpe3ZhciByPTAsbj0wLGE9ZS9NYXRoLnNxcnQoMik7c3dpdGNoKHQpe2Nhc2UidG9wLXJpZ2h0IjpjYXNlInRvcC1sZWZ0IjpuPWEtaGM7YnJlYWs7Y2FzZSJib3R0b20tcmlnaHQiOmNhc2UiYm90dG9tLWxlZnQiOm49LWEraGM7YnJlYWs7Y2FzZSJib3R0b20iOm49LWUraGM7YnJlYWs7Y2FzZSJ0b3AiOm49ZS1oY31zd2l0Y2godCl7Y2FzZSJ0b3AtcmlnaHQiOmNhc2UiYm90dG9tLXJpZ2h0IjpyPS1hO2JyZWFrO2Nhc2UidG9wLWxlZnQiOmNhc2UiYm90dG9tLWxlZnQiOnI9YTticmVhaztjYXNlImxlZnQiOnI9ZTticmVhaztjYXNlInJpZ2h0IjpyPS1lfXJldHVybltyLG5dfWZ1bmN0aW9uIHBjKHQpe3N3aXRjaCh0KXtjYXNlInJpZ2h0IjpjYXNlInRvcC1yaWdodCI6Y2FzZSJib3R0b20tcmlnaHQiOnJldHVybiJyaWdodCI7Y2FzZSJsZWZ0IjpjYXNlInRvcC1sZWZ0IjpjYXNlImJvdHRvbS1sZWZ0IjpyZXR1cm4ibGVmdCJ9cmV0dXJuImNlbnRlciJ9dmFyIGRjPTY1NTM1O2Z1bmN0aW9uIGdjKHQsZSxyLG4saSxvLHMsbCxjLHUsaCxmLHApe3ZhciBkPWZ1bmN0aW9uKHQsZSxyLG4saSxvLHMsbCl7Zm9yKHZhciBjPW4ubGF5b3V0LmdldCgidGV4dC1yb3RhdGUiKS5ldmFsdWF0ZShvLHt9KSpNYXRoLlBJLzE4MCx1PWUucG9zaXRpb25lZEdseXBocyxoPVtdLGY9MDtmPHUubGVuZ3RoO2YrKyl7dmFyIHA9dVtmXSxkPXNbcC5mb250U3RhY2tdLGc9ZCYmZFtwLmdseXBoXTtpZihnKXt2YXIgdj1nLnJlY3Q7aWYodil7dmFyIG09X2wrMSx5PWcubWV0cmljcy5hZHZhbmNlKnAuc2NhbGUvMix4PWk/W3AueCt5LHAueV06WzAsMF0sYj1pP1swLDBdOltwLngreStyWzBdLHAueStyWzFdXSxfPShpfHxsKSYmcC52ZXJ0aWNhbCx3PVswLDBdO18mJih3PWIsYj1bMCwwXSk7dmFyIGs9KGcubWV0cmljcy5sZWZ0LW0pKnAuc2NhbGUteStiWzBdLFQ9KC1nLm1ldHJpY3MudG9wLW0pKnAuc2NhbGUrYlsxXSxNPWsrdi53KnAuc2NhbGUsQT1UK3YuaCpwLnNjYWxlLFM9bmV3IGEoayxUKSxFPW5ldyBhKE0sVCksTD1uZXcgYShrLEEpLEM9bmV3IGEoTSxBKTtpZihfKXt2YXIgUD1uZXcgYSgteSx5LWUueU9mZnNldCksTz0tTWF0aC5QSS8yLHo9bHMvMi15LEk9bmV3IGEoNS1lLnlPZmZzZXQteiwwKSxEPW5ldyhGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShhLFtudWxsXS5jb25jYXQodykpKTtTLl9yb3RhdGVBcm91bmQoTyxQKS5fYWRkKEkpLl9hZGQoRCksRS5fcm90YXRlQXJvdW5kKE8sUCkuX2FkZChJKS5fYWRkKEQpLEwuX3JvdGF0ZUFyb3VuZChPLFApLl9hZGQoSSkuX2FkZChEKSxDLl9yb3RhdGVBcm91bmQoTyxQKS5fYWRkKEkpLl9hZGQoRCl9aWYoYyl7dmFyIFI9TWF0aC5zaW4oYyksRj1NYXRoLmNvcyhjKSxCPVtGLC1SLFIsRl07Uy5fbWF0TXVsdChCKSxFLl9tYXRNdWx0KEIpLEwuX21hdE11bHQoQiksQy5fbWF0TXVsdChCKX1oLnB1c2goe3RsOlMsdHI6RSxibDpMLGJyOkMsdGV4OnYsd3JpdGluZ01vZGU6ZS53cml0aW5nTW9kZSxnbHlwaE9mZnNldDp4LHNlY3Rpb25JbmRleDpwLnNlY3Rpb25JbmRleH0pfX19cmV0dXJuIGh9KDAscixzLG4saSxvLGYsdC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50KSxnPXQudGV4dFNpemVEYXRhLHY9bnVsbDsic291cmNlIj09PWcua2luZD8odj1bX3Mqbi5sYXlvdXQuZ2V0KCJ0ZXh0LXNpemUiKS5ldmFsdWF0ZShvLHt9KV0pWzBdPmRjJiZ3KHQubGF5ZXJJZHNbMF0rJzogVmFsdWUgZm9yICJ0ZXh0LXNpemUiIGlzID49IDI1Ni4gUmVkdWNlIHlvdXIgInRleHQtc2l6ZSIuJyk6ImNvbXBvc2l0ZSI9PT1nLmtpbmQmJigodj1bX3MqcC5jb21wb3NpdGVUZXh0U2l6ZXNbMF0uZXZhbHVhdGUobyx7fSksX3MqcC5jb21wb3NpdGVUZXh0U2l6ZXNbMV0uZXZhbHVhdGUobyx7fSldKVswXT5kY3x8dlsxXT5kYykmJncodC5sYXllcklkc1swXSsnOiBWYWx1ZSBmb3IgInRleHQtc2l6ZSIgaXMgPj0gMjU2LiBSZWR1Y2UgeW91ciAidGV4dC1zaXplIi4nKSx0LmFkZFN5bWJvbHModC50ZXh0LGQsdixzLGksbyxjLGUsbC5saW5lU3RhcnRJbmRleCxsLmxpbmVMZW5ndGgpO2Zvcih2YXIgbT0wLHk9dTttPHkubGVuZ3RoO20rPTEpaFt5W21dXT10LnRleHQucGxhY2VkU3ltYm9sQXJyYXkubGVuZ3RoLTE7cmV0dXJuIDQqZC5sZW5ndGh9ZnVuY3Rpb24gdmModCl7Zm9yKHZhciBlIGluIHQpcmV0dXJuIHRbZV07cmV0dXJuIG51bGx9ZnVuY3Rpb24gbWModCxlLHIsbil7dmFyIGE9dC5jb21wYXJlVGV4dDtpZihlIGluIGEpe2Zvcih2YXIgaT1hW2VdLG89aS5sZW5ndGgtMTtvPj0wO28tLSlpZihuLmRpc3QoaVtvXSk8cilyZXR1cm4hMH1lbHNlIGFbZV09W107cmV0dXJuIGFbZV0ucHVzaChuKSwhMX10LkFjdG9yPWtsLHQuQWxwaGFJbWFnZT1QaSx0LkNhbm9uaWNhbFRpbGVJRD1JbCx0LkNvbGxpc2lvbkJveEFycmF5PWJhLHQuQ29sb3I9V3QsdC5ERU1EYXRhPUJsLHQuRGF0YUNvbnN0YW50UHJvcGVydHk9am4sdC5EaWN0aW9uYXJ5Q29kZXI9amwsdC5FWFRFTlQ9ZWksdC5FcnJvckV2ZW50PXd0LHQuRXZhbHVhdGlvblBhcmFtZXRlcnM9UG4sdC5FdmVudD1fdCx0LkV2ZW50ZWQ9a3QsdC5GZWF0dXJlSW5kZXg9SGwsdC5GaWxsQnVja2V0PV9vLHQuRmlsbEV4dHJ1c2lvbkJ1Y2tldD1Cbyx0LkltYWdlQXRsYXM9WXMsdC5JbWFnZVBvc2l0aW9uPUhzLHQuTGluZUJ1Y2tldD1abyx0LkxuZ0xhdD1BbCx0LkxuZ0xhdEJvdW5kcz1NbCx0Lk1lcmNhdG9yQ29vcmRpbmF0ZT16bCx0Lk9ORV9FTT1scyx0Lk92ZXJzY2FsZWRUaWxlSUQ9UmwsdC5Qb2ludD1hLHQuUG9pbnQkMT1hLHQuUHJvZ3JhbUNvbmZpZ3VyYXRpb249S2EsdC5Qcm9wZXJ0aWVzPUduLHQuUHJvdG9idWY9dGwsdC5SR0JBSW1hZ2U9T2ksdC5SZXF1ZXN0TWFuYWdlcj1WLHQuUmVzb3VyY2VUeXBlPWx0LHQuU2VnbWVudFZlY3Rvcj1PYSx0LlNvdXJjZUZlYXR1cmVTdGF0ZT1xbCx0LlN0cnVjdEFycmF5TGF5b3V0MXVpMj12YSx0LlN0cnVjdEFycmF5TGF5b3V0Mmk0PVFuLHQuU3RydWN0QXJyYXlMYXlvdXQydWk0PWdhLHQuU3RydWN0QXJyYXlMYXlvdXQzdWk2PWRhLHQuU3RydWN0QXJyYXlMYXlvdXQ0aTg9JG4sdC5TeW1ib2xCdWNrZXQ9T3MsdC5UZXh0dXJlPUtzLHQuVGlsZT1XbCx0LlRyYW5zaXRpb25hYmxlPUluLHQuVW5pZm9ybTFmPUJhLHQuVW5pZm9ybTFpPUZhLHQuVW5pZm9ybTJmPU5hLHQuVW5pZm9ybTNmPWphLHQuVW5pZm9ybTRmPVZhLHQuVW5pZm9ybUNvbG9yPVVhLHQuVW5pZm9ybU1hdHJpeDRmPUhhLHQuVW53cmFwcGVkVGlsZUlEPURsLHQuVmFsaWRhdGlvbkVycm9yPU10LHQuV3JpdGluZ01vZGU9Y3MsdC5ab29tSGlzdG9yeT15bix0LmFkZER5bmFtaWNBdHRyaWJ1dGVzPUxzLHQuYXN5bmNBbGw9ZnVuY3Rpb24odCxlLHIpe2lmKCF0Lmxlbmd0aClyZXR1cm4gcihudWxsLFtdKTt2YXIgbj10Lmxlbmd0aCxhPW5ldyBBcnJheSh0Lmxlbmd0aCksaT1udWxsO3QuZm9yRWFjaChmdW5jdGlvbih0LG8pe2UodCxmdW5jdGlvbih0LGUpe3QmJihpPXQpLGFbb109ZSwwPT0tLW4mJnIoaSxhKX0pfSl9LHQuYmV6aWVyPXMsdC5iaW5kQWxsPXYsdC5icm93c2VyPUksdC5jYWNoZUVudHJ5UG9zc2libHlBZGRlZD1mdW5jdGlvbih0KXsrK3N0PmF0JiYodC5nZXRBY3RvcigpLnNlbmQoImVuZm9yY2VDYWNoZVNpemVMaW1pdCIsbnQpLHN0PTApfSx0LmNsYW1wPWMsdC5jbGVhclRpbGVDYWNoZT1mdW5jdGlvbih0KXt2YXIgZT1zZWxmLmNhY2hlcy5kZWxldGUocnQpO3QmJmUuY2F0Y2godCkudGhlbihmdW5jdGlvbigpe3JldHVybiB0KCl9KX0sdC5jbG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcga2koMTYpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlWzldPXRbOV0sZVsxMF09dFsxMF0sZVsxMV09dFsxMV0sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0sZX0sdC5jbG9uZSQxPWIsdC5jb25maWc9RCx0LmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBraSgxNik7cmV0dXJuIGtpIT1GbG9hdDMyQXJyYXkmJih0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTApLHRbMF09MSx0WzVdPTEsdFsxMF09MSx0WzE1XT0xLHR9LHQuY3JlYXRlJDE9ZnVuY3Rpb24oKXt2YXIgdD1uZXcga2koOSk7cmV0dXJuIGtpIT1GbG9hdDMyQXJyYXkmJih0WzFdPTAsdFsyXT0wLHRbM109MCx0WzVdPTAsdFs2XT0wLHRbN109MCksdFswXT0xLHRbNF09MSx0WzhdPTEsdH0sdC5jcmVhdGUkMj1mdW5jdGlvbigpe3ZhciB0PW5ldyBraSg0KTtyZXR1cm4ga2khPUZsb2F0MzJBcnJheSYmKHRbMV09MCx0WzJdPTApLHRbMF09MSx0WzNdPTEsdH0sdC5jcmVhdGVDb21tb25qc01vZHVsZT1lLHQuY3JlYXRlRXhwcmVzc2lvbj1rcix0LmNyZWF0ZUxheW91dD1Kbix0LmNyZWF0ZVN0eWxlTGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuImN1c3RvbSI9PT10LnR5cGU/bmV3IFZzKHQpOm5ldyBVc1t0LnR5cGVdKHQpfSx0LmRlZXBFcXVhbD1vLHQuZWFzZT1sLHQuZW1pdFZhbGlkYXRpb25FcnJvcnM9bG4sdC5lbmRzV2l0aD1tLHQuZW5mb3JjZUNhY2hlU2l6ZUxpbWl0PWZ1bmN0aW9uKHQpe3NlbGYuY2FjaGVzJiZzZWxmLmNhY2hlcy5vcGVuKHJ0KS50aGVuKGZ1bmN0aW9uKGUpe2Uua2V5cygpLnRoZW4oZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aC10O24rKyllLmRlbGV0ZShyW25dKX0pfSl9LHQuZXZhbHVhdGVSYWRpYWxPZmZzZXQ9ZmMsdC5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlPWtzLHQuZXZhbHVhdGVTaXplRm9yWm9vbT1Ucyx0LmV2ZW50ZWQ9TG4sdC5leHRlbmQ9aCx0LmZlYXR1cmVGaWx0ZXI9UnIsdC5maWx0ZXJPYmplY3Q9eCx0LmZyb21Sb3RhdGlvbj1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPXIsdFsyXT0wLHRbM109LXIsdFs0XT1uLHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09MSx0fSx0LmdldEFuY2hvckFsaWdubWVudD15cyx0LmdldEFuY2hvckp1c3RpZmljYXRpb249cGMsdC5nZXRBcnJheUJ1ZmZlcj12dCx0LmdldEltYWdlPXl0LHQuZ2V0SlNPTj1mdW5jdGlvbih0LGUpe3JldHVybiBndChoKHQse3R5cGU6Impzb24ifSksZSl9LHQuZ2V0UmVmZXJyZXI9aHQsdC5nZXRWaWRlbz1mdW5jdGlvbih0LGUpe3ZhciByLG4sYT1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7YS5tdXRlZD0hMCxhLm9ubG9hZHN0YXJ0PWZ1bmN0aW9uKCl7ZShudWxsLGEpfTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzb3VyY2UiKTtyPXRbaV0sbj12b2lkIDAsKG49c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLmhyZWY9ciwobi5wcm90b2NvbCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2x8fG4uaG9zdCE9PXNlbGYuZG9jdW1lbnQubG9jYXRpb24uaG9zdCkmJihhLmNyb3NzT3JpZ2luPSJBbm9ueW1vdXMiKSxvLnNyYz10W2ldLGEuYXBwZW5kQ2hpbGQobyl9cmV0dXJue2NhbmNlbDpmdW5jdGlvbigpe319fSx0LmlkZW50aXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0sdC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxhPWVbMl0saT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0saD1lWzldLGY9ZVsxMF0scD1lWzExXSxkPWVbMTJdLGc9ZVsxM10sdj1lWzE0XSxtPWVbMTVdLHk9cipzLW4qbyx4PXIqbC1hKm8sYj1yKmMtaSpvLF89bipsLWEqcyx3PW4qYy1pKnMsaz1hKmMtaSpsLFQ9dSpnLWgqZCxNPXUqdi1mKmQsQT11Km0tcCpkLFM9aCp2LWYqZyxFPWgqbS1wKmcsTD1mKm0tcCp2LEM9eSpMLXgqRStiKlMrXypBLXcqTStrKlQ7cmV0dXJuIEM/KEM9MS9DLHRbMF09KHMqTC1sKkUrYypTKSpDLHRbMV09KGEqRS1uKkwtaSpTKSpDLHRbMl09KGcqay12KncrbSpfKSpDLHRbM109KGYqdy1oKmstcCpfKSpDLHRbNF09KGwqQS1vKkwtYypNKSpDLHRbNV09KHIqTC1hKkEraSpNKSpDLHRbNl09KHYqYi1kKmstbSp4KSpDLHRbN109KHUqay1mKmIrcCp4KSpDLHRbOF09KG8qRS1zKkErYypUKSpDLHRbOV09KG4qQS1yKkUtaSpUKSpDLHRbMTBdPShkKnctZypiK20qeSkqQyx0WzExXT0oaCpiLXUqdy1wKnkpKkMsdFsxMl09KHMqTS1vKlMtbCpUKSpDLHRbMTNdPShyKlMtbipNK2EqVCkqQyx0WzE0XT0oZyp4LWQqXy12KnkpKkMsdFsxNV09KHUqXy1oKngrZip5KSpDLHQpOm51bGx9LHQuaXNDaGFyPXhuLHQuaXNNYXBib3hVUkw9VSx0LmtleXNEaWZmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107Zm9yKHZhciBuIGluIHQpbiBpbiBlfHxyLnB1c2gobik7cmV0dXJuIHJ9LHQubWFrZVJlcXVlc3Q9Z3QsdC5tYXBPYmplY3Q9eSx0Lm1lcmNhdG9yWGZyb21Mbmc9TGwsdC5tZXJjYXRvcllmcm9tTGF0PUNsLHQubWVyY2F0b3JaZnJvbUFsdGl0dWRlPVBsLHQubXVsdGlwbHk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0sYT1lWzFdLGk9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGg9ZVs4XSxmPWVbOV0scD1lWzEwXSxkPWVbMTFdLGc9ZVsxMl0sdj1lWzEzXSxtPWVbMTRdLHk9ZVsxNV0seD1yWzBdLGI9clsxXSxfPXJbMl0sdz1yWzNdO3JldHVybiB0WzBdPXgqbitiKnMrXypoK3cqZyx0WzFdPXgqYStiKmwrXypmK3cqdix0WzJdPXgqaStiKmMrXypwK3cqbSx0WzNdPXgqbytiKnUrXypkK3cqeSx4PXJbNF0sYj1yWzVdLF89cls2XSx3PXJbN10sdFs0XT14Km4rYipzK18qaCt3KmcsdFs1XT14KmErYipsK18qZit3KnYsdFs2XT14KmkrYipjK18qcCt3Km0sdFs3XT14Km8rYip1K18qZCt3KnkseD1yWzhdLGI9cls5XSxfPXJbMTBdLHc9clsxMV0sdFs4XT14Km4rYipzK18qaCt3KmcsdFs5XT14KmErYipsK18qZit3KnYsdFsxMF09eCppK2IqYytfKnArdyptLHRbMTFdPXgqbytiKnUrXypkK3cqeSx4PXJbMTJdLGI9clsxM10sXz1yWzE0XSx3PXJbMTVdLHRbMTJdPXgqbitiKnMrXypoK3cqZyx0WzEzXT14KmErYipsK18qZit3KnYsdFsxNF09eCppK2IqYytfKnArdyptLHRbMTVdPXgqbytiKnUrXypkK3cqeSx0fSx0Lm12dD1Jbyx0Lm51bWJlcj15ZSx0Lm9ydGhvPWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8pe3ZhciBzPTEvKGUtciksbD0xLyhuLWEpLGM9MS8oaS1vKTtyZXR1cm4gdFswXT0tMipzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPS0yKmwsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTIqYyx0WzExXT0wLHRbMTJdPShlK3IpKnMsdFsxM109KGErbikqbCx0WzE0XT0obytpKSpjLHRbMTVdPTEsdH0sdC5wYXJzZUdseXBoUEJGPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdGwodCkucmVhZEZpZWxkcyh5bCxbXSl9LHQucGJmPXRsLHQucGVyZm9ybVN5bWJvbExheW91dD1mdW5jdGlvbih0LGUscixuLGksbyl7dC5jcmVhdGVBcnJheXMoKTt2YXIgcz01MTIqdC5vdmVyc2NhbGluZzt0LnRpbGVQaXhlbFJhdGlvPWVpL3MsdC5jb21wYXJlVGV4dD17fSx0Lmljb25zTmVlZExpbmVhcj0hMTt2YXIgbD10LmxheWVyc1swXS5sYXlvdXQsYz10LmxheWVyc1swXS5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlcyx1PXt9O2lmKCJjb21wb3NpdGUiPT09dC50ZXh0U2l6ZURhdGEua2luZCl7dmFyIGg9dC50ZXh0U2l6ZURhdGEsZj1oLm1pblpvb20scD1oLm1heFpvb207dS5jb21wb3NpdGVUZXh0U2l6ZXM9W2NbInRleHQtc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IFBuKGYpKSxjWyJ0ZXh0LXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBQbihwKSldfWlmKCJjb21wb3NpdGUiPT09dC5pY29uU2l6ZURhdGEua2luZCl7dmFyIGQ9dC5pY29uU2l6ZURhdGEsZz1kLm1pblpvb20sdj1kLm1heFpvb207dS5jb21wb3NpdGVJY29uU2l6ZXM9W2NbImljb24tc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IFBuKGcpKSxjWyJpY29uLXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBQbih2KSldfXUubGF5b3V0VGV4dFNpemU9Y1sidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgUG4odC56b29tKzEpKSx1LmxheW91dEljb25TaXplPWNbImljb24tc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IFBuKHQuem9vbSsxKSksdS50ZXh0TWF4U2l6ZT1jWyJ0ZXh0LXNpemUiXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBQbigxOCkpO2Zvcih2YXIgbT1sLmdldCgidGV4dC1saW5lLWhlaWdodCIpKmxzLHk9Im1hcCI9PT1sLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmInBvaW50IiE9PWwuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IikseD1sLmdldCgidGV4dC1rZWVwLXVwcmlnaHQiKSxiPWZ1bmN0aW9uKCl7dmFyIG89a1tfXSxzPWwuZ2V0KCJ0ZXh0LWZvbnQiKS5ldmFsdWF0ZShvLHt9KS5qb2luKCIsIiksYz1yLGg9e2hvcml6b250YWw6e30sdmVydGljYWw6dm9pZCAwfSxmPW8udGV4dCxwPVswLDBdO2lmKGYpe3ZhciBkPWYudG9TdHJpbmcoKSxnPWwuZ2V0KCJ0ZXh0LWxldHRlci1zcGFjaW5nIikuZXZhbHVhdGUobyx7fSkqbHMsdj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPWQ7ZTxyLmxlbmd0aDtlKz0xKWlmKCFfbihyW2VdLmNoYXJDb2RlQXQoMCkpKXJldHVybiExO3JldHVybiEwfSgpP2c6MCxiPWwuZ2V0KCJ0ZXh0LWFuY2hvciIpLmV2YWx1YXRlKG8se30pLFQ9bC5nZXQoInRleHQtdmFyaWFibGUtYW5jaG9yIiksTT1sLmdldCgidGV4dC1yYWRpYWwtb2Zmc2V0IikuZXZhbHVhdGUobyx7fSk7VHx8KHA9TT9mYyhiLE0qbHMpOmwuZ2V0KCJ0ZXh0LW9mZnNldCIpLmV2YWx1YXRlKG8se30pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdCpsc30pKTt2YXIgQT15PyJjZW50ZXIiOmwuZ2V0KCJ0ZXh0LWp1c3RpZnkiKS5ldmFsdWF0ZShvLHt9KSxTPSJwb2ludCI9PT1sLmdldCgic3ltYm9sLXBsYWNlbWVudCIpP2wuZ2V0KCJ0ZXh0LW1heC13aWR0aCIpLmV2YWx1YXRlKG8se30pKmxzOjAsRT1mdW5jdGlvbigpe3QuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmYm4oZCkmJihoLnZlcnRpY2FsPWhzKGYsZSxzLFMsbSxiLCJsZWZ0Iix2LHAsY3MudmVydGljYWwsITApKX07aWYoIXkmJlQpe2Zvcih2YXIgTD0iYXV0byI9PT1BP1QubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBwYyh0KX0pOltBXSxDPSExLFA9MDtQPEwubGVuZ3RoO1ArKyl7dmFyIE89TFtQXTtpZighaC5ob3Jpem9udGFsW09dKWlmKEMpaC5ob3Jpem9udGFsW09dPWguaG9yaXpvbnRhbFswXTtlbHNle3ZhciB6PWhzKGYsZSxzLFMsbSwiY2VudGVyIixPLHYscCxjcy5ob3Jpem9udGFsLCExKTt6JiYoaC5ob3Jpem9udGFsW09dPXosQz0xPT09ei5saW5lQ291bnQpfX1FKCl9ZWxzZXsiYXV0byI9PT1BJiYoQT1wYyhiKSk7dmFyIEk9aHMoZixlLHMsUyxtLGIsQSx2LHAsY3MuaG9yaXpvbnRhbCwhMSk7SSYmKGguaG9yaXpvbnRhbFtBXT1JKSxFKCksYm4oZCkmJnkmJngmJihoLnZlcnRpY2FsPWhzKGYsZSxzLFMsbSxiLEEsdixwLGNzLnZlcnRpY2FsLCExKSl9fXZhciBEPXZvaWQgMDtpZihvLmljb24pe3ZhciBSPW5bby5pY29uXTtSJiYoRD1mdW5jdGlvbih0LGUscil7dmFyIG49eXMociksYT1uLmhvcml6b250YWxBbGlnbixpPW4udmVydGljYWxBbGlnbixvPWVbMF0scz1lWzFdLGw9by10LmRpc3BsYXlTaXplWzBdKmEsYz1sK3QuZGlzcGxheVNpemVbMF0sdT1zLXQuZGlzcGxheVNpemVbMV0qaTtyZXR1cm57aW1hZ2U6dCx0b3A6dSxib3R0b206dSt0LmRpc3BsYXlTaXplWzFdLGxlZnQ6bCxyaWdodDpjfX0oaVtvLmljb25dLGwuZ2V0KCJpY29uLW9mZnNldCIpLmV2YWx1YXRlKG8se30pLGwuZ2V0KCJpY29uLWFuY2hvciIpLmV2YWx1YXRlKG8se30pKSx2b2lkIDA9PT10LnNkZkljb25zP3Quc2RmSWNvbnM9Ui5zZGY6dC5zZGZJY29ucyE9PVIuc2RmJiZ3KCJTdHlsZSBzaGVldCB3YXJuaW5nOiBDYW5ub3QgbWl4IFNERiBhbmQgbm9uLVNERiBpY29ucyBpbiBvbmUgYnVmZmVyIiksUi5waXhlbFJhdGlvIT09dC5waXhlbFJhdGlvP3QuaWNvbnNOZWVkTGluZWFyPSEwOjAhPT1sLmdldCgiaWNvbi1yb3RhdGUiKS5jb25zdGFudE9yKDEpJiYodC5pY29uc05lZWRMaW5lYXI9ITApKX0oT2JqZWN0LmtleXMoaC5ob3Jpem9udGFsKS5sZW5ndGh8fEQpJiZmdW5jdGlvbih0LGUscixuLGksbyxzKXt2YXIgbD1vLmxheW91dFRleHRTaXplLmV2YWx1YXRlKGUse30pLGM9by5sYXlvdXRJY29uU2l6ZS5ldmFsdWF0ZShlLHt9KSx1PW8udGV4dE1heFNpemUuZXZhbHVhdGUoZSx7fSk7dm9pZCAwPT09dSYmKHU9bCk7dmFyIGg9dC5sYXllcnNbMF0ubGF5b3V0LGY9aC5nZXQoImljb24tb2Zmc2V0IikuZXZhbHVhdGUoZSx7fSkscD12YyhyLmhvcml6b250YWwpLGQ9bC8yNCxnPXQudGlsZVBpeGVsUmF0aW8qZCx2PXQudGlsZVBpeGVsUmF0aW8qdS8yNCxtPXQudGlsZVBpeGVsUmF0aW8qYyx5PXQudGlsZVBpeGVsUmF0aW8qaC5nZXQoInN5bWJvbC1zcGFjaW5nIikseD1oLmdldCgidGV4dC1wYWRkaW5nIikqdC50aWxlUGl4ZWxSYXRpbyxiPWguZ2V0KCJpY29uLXBhZGRpbmciKSp0LnRpbGVQaXhlbFJhdGlvLF89aC5nZXQoInRleHQtbWF4LWFuZ2xlIikvMTgwKk1hdGguUEksaz0ibWFwIj09PWguZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpJiYicG9pbnQiIT09aC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSxUPSJtYXAiPT09aC5nZXQoImljb24tcm90YXRpb24tYWxpZ25tZW50IikmJiJwb2ludCIhPT1oLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLE09aC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSxBPXkvMixTPWZ1bmN0aW9uKGwsYyl7Yy54PDB8fGMueD49ZWl8fGMueTwwfHxjLnk+PWVpfHxmdW5jdGlvbih0LGUscixuLGksbyxzLGwsYyx1LGgsZixwLGQsZyx2LG0seSx4LGIsXyl7dmFyIGssVCxNLEE9dC5hZGRUb0xpbmVWZXJ0ZXhBcnJheShlLHIpLFM9MCxFPTAsTD0wLEM9e30sUD1sYygiIiksTz0oby5sYXlvdXQuZ2V0KCJ0ZXh0LXJhZGlhbC1vZmZzZXQiKS5ldmFsdWF0ZSh4LHt9KXx8MCkqbHM7aWYodC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZuLnZlcnRpY2FsKXt2YXIgej1vLmxheW91dC5nZXQoInRleHQtcm90YXRlIikuZXZhbHVhdGUoeCx7fSkrOTAsST1uLnZlcnRpY2FsO009bmV3IHRjKHMscixlLGwsYyx1LEksaCxmLHAsdC5vdmVyc2NhbGluZyx6KX1mb3IodmFyIEQgaW4gbi5ob3Jpem9udGFsKXt2YXIgUj1uLmhvcml6b250YWxbRF07aWYoIWspe1A9bGMoUi50ZXh0KTt2YXIgRj1vLmxheW91dC5nZXQoInRleHQtcm90YXRlIikuZXZhbHVhdGUoeCx7fSk7az1uZXcgdGMocyxyLGUsbCxjLHUsUixoLGYscCx0Lm92ZXJzY2FsaW5nLEYpfXZhciBCPTE9PT1SLmxpbmVDb3VudDtpZihFKz1nYyh0LGUsUixvLHAseCxkLEEsbi52ZXJ0aWNhbD9jcy5ob3Jpem9udGFsOmNzLmhvcml6b250YWxPbmx5LEI/T2JqZWN0LmtleXMobi5ob3Jpem9udGFsKTpbRF0sQyxiLF8pLEIpYnJlYWt9bi52ZXJ0aWNhbCYmKEwrPWdjKHQsZSxuLnZlcnRpY2FsLG8scCx4LGQsQSxjcy52ZXJ0aWNhbCxbInZlcnRpY2FsIl0sQyxiLF8pKTt2YXIgTj1rP2suYm94U3RhcnRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxqPWs/ay5ib3hFbmRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxWPU0/TS5ib3hTdGFydEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLFU9TT9NLmJveEVuZEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO2lmKGkpe3ZhciBxPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXt2YXIgcyxsLGMsdSxoPWUuaW1hZ2UsZj1yLmxheW91dCxwPWUudG9wLTEvaC5waXhlbFJhdGlvLGQ9ZS5sZWZ0LTEvaC5waXhlbFJhdGlvLGc9ZS5ib3R0b20rMS9oLnBpeGVsUmF0aW8sdj1lLnJpZ2h0KzEvaC5waXhlbFJhdGlvO2lmKCJub25lIiE9PWYuZ2V0KCJpY29uLXRleHQtZml0IikmJmkpe3ZhciBtPXYtZCx5PWctcCx4PWYuZ2V0KCJ0ZXh0LXNpemUiKS5ldmFsdWF0ZShvLHt9KS8yNCxiPWkubGVmdCp4LF89aS5yaWdodCp4LHc9aS50b3AqeCxrPV8tYixUPWkuYm90dG9tKngtdyxNPWYuZ2V0KCJpY29uLXRleHQtZml0LXBhZGRpbmciKVswXSxBPWYuZ2V0KCJpY29uLXRleHQtZml0LXBhZGRpbmciKVsxXSxTPWYuZ2V0KCJpY29uLXRleHQtZml0LXBhZGRpbmciKVsyXSxFPWYuZ2V0KCJpY29uLXRleHQtZml0LXBhZGRpbmciKVszXSxMPSJ3aWR0aCI9PT1mLmdldCgiaWNvbi10ZXh0LWZpdCIpPy41KihULXkpOjAsQz0iaGVpZ2h0Ij09PWYuZ2V0KCJpY29uLXRleHQtZml0Iik/LjUqKGstbSk6MCxQPSJ3aWR0aCI9PT1mLmdldCgiaWNvbi10ZXh0LWZpdCIpfHwiYm90aCI9PT1mLmdldCgiaWNvbi10ZXh0LWZpdCIpP2s6bSxPPSJoZWlnaHQiPT09Zi5nZXQoImljb24tdGV4dC1maXQiKXx8ImJvdGgiPT09Zi5nZXQoImljb24tdGV4dC1maXQiKT9UOnk7cz1uZXcgYShiK0MtRSx3K0wtTSksbD1uZXcgYShiK0MrQStQLHcrTC1NKSxjPW5ldyBhKGIrQytBK1AsdytMK1MrTyksdT1uZXcgYShiK0MtRSx3K0wrUytPKX1lbHNlIHM9bmV3IGEoZCxwKSxsPW5ldyBhKHYscCksYz1uZXcgYSh2LGcpLHU9bmV3IGEoZCxnKTt2YXIgej1yLmxheW91dC5nZXQoImljb24tcm90YXRlIikuZXZhbHVhdGUobyx7fSkqTWF0aC5QSS8xODA7aWYoeil7dmFyIEk9TWF0aC5zaW4oeiksRD1NYXRoLmNvcyh6KSxSPVtELC1JLEksRF07cy5fbWF0TXVsdChSKSxsLl9tYXRNdWx0KFIpLHUuX21hdE11bHQoUiksYy5fbWF0TXVsdChSKX1yZXR1cm5be3RsOnMsdHI6bCxibDp1LGJyOmMsdGV4OmgucGFkZGVkUmVjdCx3cml0aW5nTW9kZTp2b2lkIDAsZ2x5cGhPZmZzZXQ6WzAsMF0sc2VjdGlvbkluZGV4OjB9XX0oMCxpLG8sMCx2YyhuLmhvcml6b250YWwpLHgpLEg9by5sYXlvdXQuZ2V0KCJpY29uLXJvdGF0ZSIpLmV2YWx1YXRlKHgse30pO1Q9bmV3IHRjKHMscixlLGwsYyx1LGksZyx2LCExLHQub3ZlcnNjYWxpbmcsSCksUz00KnEubGVuZ3RoO3ZhciBHPXQuaWNvblNpemVEYXRhLFk9bnVsbDsic291cmNlIj09PUcua2luZD8oWT1bX3Mqby5sYXlvdXQuZ2V0KCJpY29uLXNpemUiKS5ldmFsdWF0ZSh4LHt9KV0pWzBdPmRjJiZ3KHQubGF5ZXJJZHNbMF0rJzogVmFsdWUgZm9yICJpY29uLXNpemUiIGlzID49IDI1Ni4gUmVkdWNlIHlvdXIgImljb24tc2l6ZSIuJyk6ImNvbXBvc2l0ZSI9PT1HLmtpbmQmJigoWT1bX3MqXy5jb21wb3NpdGVJY29uU2l6ZXNbMF0uZXZhbHVhdGUoeCx7fSksX3MqXy5jb21wb3NpdGVJY29uU2l6ZXNbMV0uZXZhbHVhdGUoeCx7fSldKVswXT5kY3x8WVsxXT5kYykmJncodC5sYXllcklkc1swXSsnOiBWYWx1ZSBmb3IgImljb24tc2l6ZSIgaXMgPj0gMjU2LiBSZWR1Y2UgeW91ciAiaWNvbi1zaXplIi4nKSx0LmFkZFN5bWJvbHModC5pY29uLHEsWSx5LG0seCwhMSxlLEEubGluZVN0YXJ0SW5kZXgsQS5saW5lTGVuZ3RoKX12YXIgVz1UP1QuYm94U3RhcnRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxYPVQ/VC5ib3hFbmRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDt0LmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoPj1Pcy5NQVhfR0xZUEhTJiZ3KCJUb28gbWFueSBnbHlwaHMgYmVpbmcgcmVuZGVyZWQgaW4gYSB0aWxlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzI5MDciKSx0LnN5bWJvbEluc3RhbmNlcy5lbXBsYWNlQmFjayhlLngsZS55LEMucmlnaHQ+PTA/Qy5yaWdodDotMSxDLmNlbnRlcj49MD9DLmNlbnRlcjotMSxDLmxlZnQ+PTA/Qy5sZWZ0Oi0xLEMudmVydGljYWx8fC0xLFAsTixqLFYsVSxXLFgsbCxFLEwsUywwLGgsTyl9KHQsYyxsLHIsbix0LmxheWVyc1swXSx0LmNvbGxpc2lvbkJveEFycmF5LGUuaW5kZXgsZS5zb3VyY2VMYXllckluZGV4LHQuaW5kZXgsZyx4LGsscyxtLGIsVCxmLGUsaSxvKX07aWYoImxpbmUiPT09TSlmb3IodmFyIEU9MCxMPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKylmb3IodmFyIGw9dFtzXSxjPXZvaWQgMCx1PTA7dTxsLmxlbmd0aC0xO3UrKyl7dmFyIGg9bFt1XSxmPWxbdSsxXTtoLng8MCYmZi54PDB8fChoLng8MD9oPW5ldyBhKDAsaC55KyhmLnktaC55KSooKDAtaC54KS8oZi54LWgueCkpKS5fcm91bmQoKTpmLng8MCYmKGY9bmV3IGEoMCxoLnkrKGYueS1oLnkpKigoMC1oLngpLyhmLngtaC54KSkpLl9yb3VuZCgpKSxoLnk8MCYmZi55PDB8fChoLnk8MD9oPW5ldyBhKGgueCsoZi54LWgueCkqKCgwLWgueSkvKGYueS1oLnkpKSwwKS5fcm91bmQoKTpmLnk8MCYmKGY9bmV3IGEoaC54KyhmLngtaC54KSooKDAtaC55KS8oZi55LWgueSkpLDApLl9yb3VuZCgpKSxoLng+PW4mJmYueD49bnx8KGgueD49bj9oPW5ldyBhKG4saC55KyhmLnktaC55KSooKG4taC54KS8oZi54LWgueCkpKS5fcm91bmQoKTpmLng+PW4mJihmPW5ldyBhKG4saC55KyhmLnktaC55KSooKG4taC54KS8oZi54LWgueCkpKS5fcm91bmQoKSksaC55Pj1pJiZmLnk+PWl8fChoLnk+PWk/aD1uZXcgYShoLngrKGYueC1oLngpKigoaS1oLnkpLyhmLnktaC55KSksaSkuX3JvdW5kKCk6Zi55Pj1pJiYoZj1uZXcgYShoLngrKGYueC1oLngpKigoaS1oLnkpLyhmLnktaC55KSksaSkuX3JvdW5kKCkpLGMmJmguZXF1YWxzKGNbYy5sZW5ndGgtMV0pfHwoYz1baF0sby5wdXNoKGMpKSxjLnB1c2goZikpKSkpfXJldHVybiBvfShlLmdlb21ldHJ5LDAsMCxlaSxlaSk7RTxMLmxlbmd0aDtFKz0xKWZvcih2YXIgQz1MW0VdLFA9MCxPPSRsKEMseSxfLHIudmVydGljYWx8fHAsbiwyNCx2LHQub3ZlcnNjYWxpbmcsZWkpO1A8Ty5sZW5ndGg7UCs9MSl7dmFyIHo9T1tQXTtwJiZtYyh0LHAudGV4dCxBLHopfHxTKEMseil9ZWxzZSBpZigibGluZS1jZW50ZXIiPT09TSlmb3IodmFyIEk9MCxEPWUuZ2VvbWV0cnk7STxELmxlbmd0aDtJKz0xKXt2YXIgUj1EW0ldO2lmKFIubGVuZ3RoPjEpe3ZhciBGPVFsKFIsXyxyLnZlcnRpY2FsfHxwLG4sMjQsdik7RiYmUyhSLEYpfX1lbHNlIGlmKCJQb2x5Z29uIj09PWUudHlwZSlmb3IodmFyIEI9MCxOPW1vKGUuZ2VvbWV0cnksMCk7QjxOLmxlbmd0aDtCKz0xKXt2YXIgaj1OW0JdLFY9bmMoaiwxNik7UyhqWzBdLG5ldyBicyhWLngsVi55LDApKX1lbHNlIGlmKCJMaW5lU3RyaW5nIj09PWUudHlwZSlmb3IodmFyIFU9MCxxPWUuZ2VvbWV0cnk7VTxxLmxlbmd0aDtVKz0xKXt2YXIgSD1xW1VdO1MoSCxuZXcgYnMoSFswXS54LEhbMF0ueSwwKSl9ZWxzZSBpZigiUG9pbnQiPT09ZS50eXBlKWZvcih2YXIgRz0wLFk9ZS5nZW9tZXRyeTtHPFkubGVuZ3RoO0crPTEpZm9yKHZhciBXPTAsWD1ZW0ddO1c8WC5sZW5ndGg7Vys9MSl7dmFyIFo9WFtXXTtTKFtaXSxuZXcgYnMoWi54LFoueSwwKSl9fSh0LG8saCxELGMsdSxwKX0sXz0wLGs9dC5mZWF0dXJlcztfPGsubGVuZ3RoO18rPTEpYigpO28mJnQuZ2VuZXJhdGVDb2xsaXNpb25EZWJ1Z0J1ZmZlcnMoKX0sdC5wZXJzcGVjdGl2ZT1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBpLG89MS9NYXRoLnRhbihlLzIpO3JldHVybiB0WzBdPW8vcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1vLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzExXT0tMSx0WzEyXT0wLHRbMTNdPTAsdFsxNV09MCxudWxsIT1hJiZhIT09MS8wPyhpPTEvKG4tYSksdFsxMF09KGErbikqaSx0WzE0XT0yKmEqbippKToodFsxMF09LTEsdFsxNF09LTIqbiksdH0sdC5waWNrPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXTthIGluIHQmJihyW2FdPXRbYV0pfXJldHVybiByfSx0LnBsdWdpbj1Dbix0LnBvbHlnb25JbnRlcnNlY3RzUG9seWdvbj1vaSx0LnBvc3RNYXBMb2FkRXZlbnQ9ZXQsdC5wb3N0VHVybnN0aWxlRXZlbnQ9JCx0LnBvdHBhY2s9cXMsdC5yYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzPU5sLHQucmVmUHJvcGVydGllcz1bInR5cGUiLCJzb3VyY2UiLCJzb3VyY2UtbGF5ZXIiLCJtaW56b29tIiwibWF4em9vbSIsImZpbHRlciIsImxheW91dCJdLHQucmVnaXN0ZXI9ZG4sdC5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eT1mdW5jdGlvbih0KXtyZXR1cm4gU24/dCh7cGx1Z2luVVJMOlNuLGNvbXBsZXRpb25DYWxsYmFjazpNbn0pOkxuLm9uY2UoInBsdWdpbkF2YWlsYWJsZSIsdCksdH0sdC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0sYT1lWzFdLGk9ZVsyXSxvPWVbM10scz1NYXRoLnNpbihyKSxsPU1hdGguY29zKHIpO3JldHVybiB0WzBdPW4qbCtpKnMsdFsxXT1hKmwrbypzLHRbMl09biotcytpKmwsdFszXT1hKi1zK28qbCx0fSx0LnJvdGF0ZVg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGE9TWF0aC5jb3MociksaT1lWzRdLG89ZVs1XSxzPWVbNl0sbD1lWzddLGM9ZVs4XSx1PWVbOV0saD1lWzEwXSxmPWVbMTFdO3JldHVybiBlIT09dCYmKHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFs0XT1pKmErYypuLHRbNV09byphK3Uqbix0WzZdPXMqYStoKm4sdFs3XT1sKmErZipuLHRbOF09YyphLWkqbix0WzldPXUqYS1vKm4sdFsxMF09aCphLXMqbix0WzExXT1mKmEtbCpuLHR9LHQucm90YXRlWj1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxpPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzRdLHU9ZVs1XSxoPWVbNl0sZj1lWzddO3JldHVybiBlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbMF09aSphK2Mqbix0WzFdPW8qYSt1Km4sdFsyXT1zKmEraCpuLHRbM109bCphK2Yqbix0WzRdPWMqYS1pKm4sdFs1XT11KmEtbypuLHRbNl09aCphLXMqbix0WzddPWYqYS1sKm4sdH0sdC5zY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49clswXSxhPXJbMV0saT1yWzJdO3JldHVybiB0WzBdPWVbMF0qbix0WzFdPWVbMV0qbix0WzJdPWVbMl0qbix0WzNdPWVbM10qbix0WzRdPWVbNF0qYSx0WzVdPWVbNV0qYSx0WzZdPWVbNl0qYSx0WzddPWVbN10qYSx0WzhdPWVbOF0qaSx0WzldPWVbOV0qaSx0WzEwXT1lWzEwXSppLHRbMTFdPWVbMTFdKmksdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0sdH0sdC5zZXRDYWNoZUxpbWl0cz1mdW5jdGlvbih0LGUpe250PXQsYXQ9ZX0sdC5zZXRSVExUZXh0UGx1Z2luPWZ1bmN0aW9uKHQsZSl7aWYoQW4pdGhyb3cgbmV3IEVycm9yKCJzZXRSVExUZXh0UGx1Z2luIGNhbm5vdCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIik7QW49ITAsU249SS5yZXNvbHZlVVJMKHQpLE1uPWZ1bmN0aW9uKHQpe3Q/KEFuPSExLFNuPW51bGwsZSYmZSh0KSk6RW49ITB9LExuLmZpcmUobmV3IF90KCJwbHVnaW5BdmFpbGFibGUiLHtwbHVnaW5VUkw6U24sY29tcGxldGlvbkNhbGxiYWNrOk1ufSkpfSx0LnNwaGVyaWNhbFRvQ2FydGVzaWFuPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4gcis9OTAscio9TWF0aC5QSS8xODAsbio9TWF0aC5QSS8xODAse3g6ZSpNYXRoLmNvcyhyKSpNYXRoLnNpbihuKSx5OmUqTWF0aC5zaW4ocikqTWF0aC5zaW4obiksejplKk1hdGguY29zKG4pfX0sdC5zdHlsZVNwZWM9VHQsdC5zeW1ib2xTaXplPU1zLHQudHJhbnNmb3JtTWF0Mz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxhPWVbMV0saT1lWzJdO3JldHVybiB0WzBdPW4qclswXSthKnJbM10raSpyWzZdLHRbMV09bipyWzFdK2Eqcls0XStpKnJbN10sdFsyXT1uKnJbMl0rYSpyWzVdK2kqcls4XSx0fSx0LnRyYW5zZm9ybU1hdDQ9VGksdC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsaSxvLHMsbCxjLHUsaCxmLHAsZCxnPXJbMF0sdj1yWzFdLG09clsyXTtyZXR1cm4gZT09PXQ/KHRbMTJdPWVbMF0qZytlWzRdKnYrZVs4XSptK2VbMTJdLHRbMTNdPWVbMV0qZytlWzVdKnYrZVs5XSptK2VbMTNdLHRbMTRdPWVbMl0qZytlWzZdKnYrZVsxMF0qbStlWzE0XSx0WzE1XT1lWzNdKmcrZVs3XSp2K2VbMTFdKm0rZVsxNV0pOihuPWVbMF0sYT1lWzFdLGk9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGg9ZVs4XSxmPWVbOV0scD1lWzEwXSxkPWVbMTFdLHRbMF09bix0WzFdPWEsdFsyXT1pLHRbM109byx0WzRdPXMsdFs1XT1sLHRbNl09Yyx0WzddPXUsdFs4XT1oLHRbOV09Zix0WzEwXT1wLHRbMTFdPWQsdFsxMl09bipnK3MqditoKm0rZVsxMl0sdFsxM109YSpnK2wqditmKm0rZVsxM10sdFsxNF09aSpnK2MqditwKm0rZVsxNF0sdFsxNV09bypnK3UqditkKm0rZVsxNV0pLHR9LHQudW5pcXVlSWQ9cCx0LnZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcj1mdW5jdGlvbih0KXt2YXIgZT1bXSxyPXQuaWQ7cmV0dXJuIHZvaWQgMD09PXImJmUucHVzaCh7bWVzc2FnZToibGF5ZXJzLiIrcisnOiBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJpZCInfSksdm9pZCAwPT09dC5yZW5kZXImJmUucHVzaCh7bWVzc2FnZToibGF5ZXJzLiIrcisnOiBtaXNzaW5nIHJlcXVpcmVkIG1ldGhvZCAicmVuZGVyIid9KSx0LnJlbmRlcmluZ01vZGUmJiIyZCIhPT10LnJlbmRlcmluZ01vZGUmJiIzZCIhPT10LnJlbmRlcmluZ01vZGUmJmUucHVzaCh7bWVzc2FnZToibGF5ZXJzLiIrcisnOiBwcm9wZXJ0eSAicmVuZGVyaW5nTW9kZSIgbXVzdCBiZSBlaXRoZXIgIjJkIiBvciAiM2QiJ30pLGV9LHQudmFsaWRhdGVMaWdodD1hbix0LnZhbGlkYXRlU3R5bGU9bm4sdC52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx0LnZlY3RvclRpbGU9SW8sdC52ZXJzaW9uPSIxLjMuMiIsdC53YXJuT25jZT13LHQud2VicFN1cHBvcnRlZD1SLHQud2luZG93PXNlbGYsdC53cmFwPXV9KSxuKDAsZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj10eXBlb2YgdDtpZigibnVtYmVyIj09PXJ8fCJib29sZWFuIj09PXJ8fCJzdHJpbmciPT09cnx8bnVsbD09dClyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBuPSJbIixhPTAsaT10O2E8aS5sZW5ndGg7YSs9MSluKz1lKGlbYV0pKyIsIjtyZXR1cm4gbisiXSJ9Zm9yKHZhciBvPU9iamVjdC5rZXlzKHQpLnNvcnQoKSxzPSJ7IixsPTA7bDxvLmxlbmd0aDtsKyspcys9SlNPTi5zdHJpbmdpZnkob1tsXSkrIjoiK2UodFtvW2xdXSkrIiwiO3JldHVybiBzKyJ9In1mdW5jdGlvbiByKHIpe2Zvcih2YXIgbj0iIixhPTAsaT10LnJlZlByb3BlcnRpZXM7YTxpLmxlbmd0aDthKz0xKW4rPSIvIitlKHJbaVthXV0pO3JldHVybiBufXZhciBuPWZ1bmN0aW9uKHQpe3RoaXMua2V5Q2FjaGU9e30sdCYmdGhpcy5yZXBsYWNlKHQpfTtuLnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKHQpe3RoaXMuX2xheWVyQ29uZmlncz17fSx0aGlzLl9sYXllcnM9e30sdGhpcy51cGRhdGUodCxbXSl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLG4pe2Zvcih2YXIgYT10aGlzLGk9MCxvPWU7aTxvLmxlbmd0aDtpKz0xKXt2YXIgcz1vW2ldO3RoaXMuX2xheWVyQ29uZmlnc1tzLmlkXT1zO3ZhciBsPXRoaXMuX2xheWVyc1tzLmlkXT10LmNyZWF0ZVN0eWxlTGF5ZXIocyk7bC5fZmVhdHVyZUZpbHRlcj10LmZlYXR1cmVGaWx0ZXIobC5maWx0ZXIpLHRoaXMua2V5Q2FjaGVbcy5pZF0mJmRlbGV0ZSB0aGlzLmtleUNhY2hlW3MuaWRdfWZvcih2YXIgYz0wLHU9bjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBoPXVbY107ZGVsZXRlIHRoaXMua2V5Q2FjaGVbaF0sZGVsZXRlIHRoaXMuX2xheWVyQ29uZmlnc1toXSxkZWxldGUgdGhpcy5fbGF5ZXJzW2hdfXRoaXMuZmFtaWxpZXNCeVNvdXJjZT17fTtmb3IodmFyIGY9MCxwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXt9LGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIGk9ZSYmZVt0W2FdLmlkXXx8cih0W2FdKTtlJiYoZVt0W2FdLmlkXT1pKTt2YXIgbz1uW2ldO298fChvPW5baV09W10pLG8ucHVzaCh0W2FdKX12YXIgcz1bXTtmb3IodmFyIGwgaW4gbilzLnB1c2gobltsXSk7cmV0dXJuIHN9KHQudmFsdWVzKHRoaXMuX2xheWVyQ29uZmlncyksdGhpcy5rZXlDYWNoZSk7ZjxwLmxlbmd0aDtmKz0xKXt2YXIgZD1wW2ZdLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gYS5fbGF5ZXJzW3QuaWRdfSksZz1kWzBdO2lmKCJub25lIiE9PWcudmlzaWJpbGl0eSl7dmFyIHY9Zy5zb3VyY2V8fCIiLG09dGhpcy5mYW1pbGllc0J5U291cmNlW3ZdO218fChtPXRoaXMuZmFtaWxpZXNCeVNvdXJjZVt2XT17fSk7dmFyIHk9Zy5zb3VyY2VMYXllcnx8Il9nZW9qc29uVGlsZUxheWVyIix4PW1beV07eHx8KHg9bVt5XT1bXSkseC5wdXNoKGQpfX19O3ZhciBhPWZ1bmN0aW9uKGUpe3ZhciByPXt9LG49W107Zm9yKHZhciBhIGluIGUpe3ZhciBpPWVbYV0sbz1yW2FdPXt9O2Zvcih2YXIgcyBpbiBpKXt2YXIgbD1pWytzXTtpZihsJiYwIT09bC5iaXRtYXAud2lkdGgmJjAhPT1sLmJpdG1hcC5oZWlnaHQpe3ZhciBjPXt4OjAseTowLHc6bC5iaXRtYXAud2lkdGgrMixoOmwuYml0bWFwLmhlaWdodCsyfTtuLnB1c2goYyksb1tzXT17cmVjdDpjLG1ldHJpY3M6bC5tZXRyaWNzfX19fXZhciB1PXQucG90cGFjayhuKSxoPXUudyxmPXUuaCxwPW5ldyB0LkFscGhhSW1hZ2Uoe3dpZHRoOmh8fDEsaGVpZ2h0OmZ8fDF9KTtmb3IodmFyIGQgaW4gZSl7dmFyIGc9ZVtkXTtmb3IodmFyIHYgaW4gZyl7dmFyIG09Z1srdl07aWYobSYmMCE9PW0uYml0bWFwLndpZHRoJiYwIT09bS5iaXRtYXAuaGVpZ2h0KXt2YXIgeT1yW2RdW3ZdLnJlY3Q7dC5BbHBoYUltYWdlLmNvcHkobS5iaXRtYXAscCx7eDowLHk6MH0se3g6eS54KzEseTp5LnkrMX0sbS5iaXRtYXApfX19dGhpcy5pbWFnZT1wLHRoaXMucG9zaXRpb25zPXJ9O3QucmVnaXN0ZXIoIkdseXBoQXRsYXMiLGEpO3ZhciBpPWZ1bmN0aW9uKGUpe3RoaXMudGlsZUlEPW5ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS50aWxlSUQub3ZlcnNjYWxlZFosZS50aWxlSUQud3JhcCxlLnRpbGVJRC5jYW5vbmljYWwueixlLnRpbGVJRC5jYW5vbmljYWwueCxlLnRpbGVJRC5jYW5vbmljYWwueSksdGhpcy51aWQ9ZS51aWQsdGhpcy56b29tPWUuem9vbSx0aGlzLnBpeGVsUmF0aW89ZS5waXhlbFJhdGlvLHRoaXMudGlsZVNpemU9ZS50aWxlU2l6ZSx0aGlzLnNvdXJjZT1lLnNvdXJjZSx0aGlzLm92ZXJzY2FsaW5nPXRoaXMudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzPWUuc2hvd0NvbGxpc2lvbkJveGVzLHRoaXMuY29sbGVjdFJlc291cmNlVGltaW5nPSEhZS5jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdGhpcy5yZXR1cm5EZXBlbmRlbmNpZXM9ISFlLnJldHVybkRlcGVuZGVuY2llc307ZnVuY3Rpb24gbyhlLHIpe2Zvcih2YXIgbj1uZXcgdC5FdmFsdWF0aW9uUGFyYW1ldGVycyhyKSxhPTAsaT1lO2E8aS5sZW5ndGg7YSs9MSlpW2FdLnJlY2FsY3VsYXRlKG4pfWkucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBzPXRoaXM7dGhpcy5zdGF0dXM9InBhcnNpbmciLHRoaXMuZGF0YT1lLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9bmV3IHQuQ29sbGlzaW9uQm94QXJyYXk7dmFyIGw9bmV3IHQuRGljdGlvbmFyeUNvZGVyKE9iamVjdC5rZXlzKGUubGF5ZXJzKS5zb3J0KCkpLGM9bmV3IHQuRmVhdHVyZUluZGV4KHRoaXMudGlsZUlEKTtjLmJ1Y2tldExheWVySURzPVtdO3ZhciB1LGgsZixwLGQ9e30sZz17ZmVhdHVyZUluZGV4OmMsaWNvbkRlcGVuZGVuY2llczp7fSxwYXR0ZXJuRGVwZW5kZW5jaWVzOnt9LGdseXBoRGVwZW5kZW5jaWVzOnt9fSx2PXIuZmFtaWxpZXNCeVNvdXJjZVt0aGlzLnNvdXJjZV07Zm9yKHZhciBtIGluIHYpe3ZhciB5PWUubGF5ZXJzW21dO2lmKHkpezE9PT15LnZlcnNpb24mJnQud2Fybk9uY2UoJ1ZlY3RvciB0aWxlIHNvdXJjZSAiJyt0aGlzLnNvdXJjZSsnIiBsYXllciAiJyttKyciIGRvZXMgbm90IHVzZSB2ZWN0b3IgdGlsZSBzcGVjIHYyIGFuZCB0aGVyZWZvcmUgbWF5IGhhdmUgc29tZSByZW5kZXJpbmcgZXJyb3JzLicpO2Zvcih2YXIgeD1sLmVuY29kZShtKSxiPVtdLF89MDtfPHkubGVuZ3RoO18rKyl7dmFyIHc9eS5mZWF0dXJlKF8pO2IucHVzaCh7ZmVhdHVyZTp3LGluZGV4Ol8sc291cmNlTGF5ZXJJbmRleDp4fSl9Zm9yKHZhciBrPTAsVD12W21dO2s8VC5sZW5ndGg7ays9MSl7dmFyIE09VFtrXSxBPU1bMF07QS5taW56b29tJiZ0aGlzLnpvb208TWF0aC5mbG9vcihBLm1pbnpvb20pfHxBLm1heHpvb20mJnRoaXMuem9vbT49QS5tYXh6b29tfHwibm9uZSIhPT1BLnZpc2liaWxpdHkmJihvKE0sdGhpcy56b29tKSwoZFtBLmlkXT1BLmNyZWF0ZUJ1Y2tldCh7aW5kZXg6Yy5idWNrZXRMYXllcklEcy5sZW5ndGgsbGF5ZXJzOk0sem9vbTp0aGlzLnpvb20scGl4ZWxSYXRpbzp0aGlzLnBpeGVsUmF0aW8sb3ZlcnNjYWxpbmc6dGhpcy5vdmVyc2NhbGluZyxjb2xsaXNpb25Cb3hBcnJheTp0aGlzLmNvbGxpc2lvbkJveEFycmF5LHNvdXJjZUxheWVySW5kZXg6eCxzb3VyY2VJRDp0aGlzLnNvdXJjZX0pKS5wb3B1bGF0ZShiLGcpLGMuYnVja2V0TGF5ZXJJRHMucHVzaChNLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSl9fX12YXIgUz10Lm1hcE9iamVjdChnLmdseXBoRGVwZW5kZW5jaWVzLGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAoTnVtYmVyKX0pO09iamVjdC5rZXlzKFMpLmxlbmd0aD9uLnNlbmQoImdldEdseXBocyIse3VpZDp0aGlzLnVpZCxzdGFja3M6U30sZnVuY3Rpb24odCxlKXt1fHwodT10LGg9ZSxDLmNhbGwocykpfSk6aD17fTt2YXIgRT1PYmplY3Qua2V5cyhnLmljb25EZXBlbmRlbmNpZXMpO0UubGVuZ3RoP24uc2VuZCgiZ2V0SW1hZ2VzIix7aWNvbnM6RX0sZnVuY3Rpb24odCxlKXt1fHwodT10LGY9ZSxDLmNhbGwocykpfSk6Zj17fTt2YXIgTD1PYmplY3Qua2V5cyhnLnBhdHRlcm5EZXBlbmRlbmNpZXMpO2Z1bmN0aW9uIEMoKXtpZih1KXJldHVybiBpKHUpO2lmKGgmJmYmJnApe3ZhciBlPW5ldyBhKGgpLHI9bmV3IHQuSW1hZ2VBdGxhcyhmLHApO2Zvcih2YXIgbiBpbiBkKXt2YXIgcz1kW25dO3MgaW5zdGFuY2VvZiB0LlN5bWJvbEJ1Y2tldD8obyhzLmxheWVycyx0aGlzLnpvb20pLHQucGVyZm9ybVN5bWJvbExheW91dChzLGgsZS5wb3NpdGlvbnMsZixyLmljb25Qb3NpdGlvbnMsdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMpKTpzLmhhc1BhdHRlcm4mJihzIGluc3RhbmNlb2YgdC5MaW5lQnVja2V0fHxzIGluc3RhbmNlb2YgdC5GaWxsQnVja2V0fHxzIGluc3RhbmNlb2YgdC5GaWxsRXh0cnVzaW9uQnVja2V0KSYmKG8ocy5sYXllcnMsdGhpcy56b29tKSxzLmFkZEZlYXR1cmVzKGcsci5wYXR0ZXJuUG9zaXRpb25zKSl9dGhpcy5zdGF0dXM9ImRvbmUiLGkobnVsbCx7YnVja2V0czp0LnZhbHVlcyhkKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuaXNFbXB0eSgpfSksZmVhdHVyZUluZGV4OmMsY29sbGlzaW9uQm94QXJyYXk6dGhpcy5jb2xsaXNpb25Cb3hBcnJheSxnbHlwaEF0bGFzSW1hZ2U6ZS5pbWFnZSxpbWFnZUF0bGFzOnIsZ2x5cGhNYXA6dGhpcy5yZXR1cm5EZXBlbmRlbmNpZXM/aDpudWxsLGljb25NYXA6dGhpcy5yZXR1cm5EZXBlbmRlbmNpZXM/ZjpudWxsLGdseXBoUG9zaXRpb25zOnRoaXMucmV0dXJuRGVwZW5kZW5jaWVzP2UucG9zaXRpb25zOm51bGx9KX19TC5sZW5ndGg/bi5zZW5kKCJnZXRJbWFnZXMiLHtpY29uczpMfSxmdW5jdGlvbih0LGUpe3V8fCh1PXQscD1lLEMuY2FsbChzKSl9KTpwPXt9LEMuY2FsbCh0aGlzKX07dmFyIHM9InVuZGVmaW5lZCIhPXR5cGVvZiBwZXJmb3JtYW5jZSxsPXtnZXRFbnRyaWVzQnlOYW1lOmZ1bmN0aW9uKHQpe3JldHVybiEhKHMmJnBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKSYmcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZSh0KX0sbWFyazpmdW5jdGlvbih0KXtyZXR1cm4hIShzJiZwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2UubWFyaykmJnBlcmZvcm1hbmNlLm1hcmsodCl9LG1lYXN1cmU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiEhKHMmJnBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5tZWFzdXJlKSYmcGVyZm9ybWFuY2UubWVhc3VyZSh0LGUscil9LGNsZWFyTWFya3M6ZnVuY3Rpb24odCl7cmV0dXJuISEocyYmcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLmNsZWFyTWFya3MpJiZwZXJmb3JtYW5jZS5jbGVhck1hcmtzKHQpfSxjbGVhck1lYXN1cmVzOmZ1bmN0aW9uKHQpe3JldHVybiEhKHMmJnBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5jbGVhck1lYXN1cmVzKSYmcGVyZm9ybWFuY2UuY2xlYXJNZWFzdXJlcyh0KX19LGM9ZnVuY3Rpb24odCl7dGhpcy5fbWFya3M9e3N0YXJ0Olt0LnVybCwic3RhcnQiXS5qb2luKCIjIiksZW5kOlt0LnVybCwiZW5kIl0uam9pbigiIyIpLG1lYXN1cmU6dC51cmwudG9TdHJpbmcoKX0sbC5tYXJrKHRoaXMuX21hcmtzLnN0YXJ0KX07ZnVuY3Rpb24gdShlLHIpe3ZhciBuPXQuZ2V0QXJyYXlCdWZmZXIoZS5yZXF1ZXN0LGZ1bmN0aW9uKGUsbixhLGkpe2U/cihlKTpuJiZyKG51bGwse3ZlY3RvclRpbGU6bmV3IHQudmVjdG9yVGlsZS5WZWN0b3JUaWxlKG5ldyB0LnBiZihuKSkscmF3RGF0YTpuLGNhY2hlQ29udHJvbDphLGV4cGlyZXM6aX0pfSk7cmV0dXJuIGZ1bmN0aW9uKCl7bi5jYW5jZWwoKSxyKCl9fWMucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe2wubWFyayh0aGlzLl9tYXJrcy5lbmQpO3ZhciB0PWwuZ2V0RW50cmllc0J5TmFtZSh0aGlzLl9tYXJrcy5tZWFzdXJlKTtyZXR1cm4gMD09PXQubGVuZ3RoJiYobC5tZWFzdXJlKHRoaXMuX21hcmtzLm1lYXN1cmUsdGhpcy5fbWFya3Muc3RhcnQsdGhpcy5fbWFya3MuZW5kKSx0PWwuZ2V0RW50cmllc0J5TmFtZSh0aGlzLl9tYXJrcy5tZWFzdXJlKSxsLmNsZWFyTWFya3ModGhpcy5fbWFya3Muc3RhcnQpLGwuY2xlYXJNYXJrcyh0aGlzLl9tYXJrcy5lbmQpLGwuY2xlYXJNZWFzdXJlcyh0aGlzLl9tYXJrcy5tZWFzdXJlKSksdH0sbC5QZXJmb3JtYW5jZT1jO3ZhciBoPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmFjdG9yPXQsdGhpcy5sYXllckluZGV4PWUsdGhpcy5sb2FkVmVjdG9yRGF0YT1yfHx1LHRoaXMubG9hZGluZz17fSx0aGlzLmxvYWRlZD17fX07aC5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGE9ZS51aWQ7dGhpcy5sb2FkaW5nfHwodGhpcy5sb2FkaW5nPXt9KTt2YXIgbz0hIShlJiZlLnJlcXVlc3QmJmUucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcpJiZuZXcgbC5QZXJmb3JtYW5jZShlLnJlcXVlc3QpLHM9dGhpcy5sb2FkaW5nW2FdPW5ldyBpKGUpO3MuYWJvcnQ9dGhpcy5sb2FkVmVjdG9yRGF0YShlLGZ1bmN0aW9uKGUsaSl7aWYoZGVsZXRlIG4ubG9hZGluZ1thXSxlfHwhaSlyZXR1cm4gcy5zdGF0dXM9ImRvbmUiLG4ubG9hZGVkW2FdPXMscihlKTt2YXIgbD1pLnJhd0RhdGEsYz17fTtpLmV4cGlyZXMmJihjLmV4cGlyZXM9aS5leHBpcmVzKSxpLmNhY2hlQ29udHJvbCYmKGMuY2FjaGVDb250cm9sPWkuY2FjaGVDb250cm9sKTt2YXIgdT17fTtpZihvKXt2YXIgaD1vLmZpbmlzaCgpO2gmJih1LnJlc291cmNlVGltaW5nPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaCkpKX1zLnZlY3RvclRpbGU9aS52ZWN0b3JUaWxlLHMucGFyc2UoaS52ZWN0b3JUaWxlLG4ubGF5ZXJJbmRleCxuLmFjdG9yLGZ1bmN0aW9uKGUsbil7aWYoZXx8IW4pcmV0dXJuIHIoZSk7cihudWxsLHQuZXh0ZW5kKHtyYXdUaWxlRGF0YTpsLnNsaWNlKDApfSxuLGMsdSkpfSksbi5sb2FkZWQ9bi5sb2FkZWR8fHt9LG4ubG9hZGVkW2FdPXN9KX0saC5wcm90b3R5cGUucmVsb2FkVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGVkLG49dC51aWQsYT10aGlzO2lmKHImJnJbbl0pe3ZhciBpPXJbbl07aS5zaG93Q29sbGlzaW9uQm94ZXM9dC5zaG93Q29sbGlzaW9uQm94ZXM7dmFyIG89ZnVuY3Rpb24odCxyKXt2YXIgbj1pLnJlbG9hZENhbGxiYWNrO24mJihkZWxldGUgaS5yZWxvYWRDYWxsYmFjayxpLnBhcnNlKGkudmVjdG9yVGlsZSxhLmxheWVySW5kZXgsYS5hY3RvcixuKSksZSh0LHIpfTsicGFyc2luZyI9PT1pLnN0YXR1cz9pLnJlbG9hZENhbGxiYWNrPW86ImRvbmUiPT09aS5zdGF0dXMmJihpLnZlY3RvclRpbGU/aS5wYXJzZShpLnZlY3RvclRpbGUsdGhpcy5sYXllckluZGV4LHRoaXMuYWN0b3Isbyk6bygpKX19LGgucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGluZyxuPXQudWlkO3ImJnJbbl0mJnJbbl0uYWJvcnQmJihyW25dLmFib3J0KCksZGVsZXRlIHJbbl0pLGUoKX0saC5wcm90b3R5cGUucmVtb3ZlVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGVkLG49dC51aWQ7ciYmcltuXSYmZGVsZXRlIHJbbl0sZSgpfTt2YXIgZj1mdW5jdGlvbigpe3RoaXMubG9hZGVkPXt9fTtmLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPWUudWlkLGE9ZS5lbmNvZGluZyxpPWUucmF3SW1hZ2VEYXRhLG89bmV3IHQuREVNRGF0YShuLGksYSk7dGhpcy5sb2FkZWQ9dGhpcy5sb2FkZWR8fHt9LHRoaXMubG9hZGVkW25dPW8scihudWxsLG8pfSxmLnByb3RvdHlwZS5yZW1vdmVUaWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubG9hZGVkLHI9dC51aWQ7ZSYmZVtyXSYmZGVsZXRlIGVbcl19O3ZhciBwPXtSQURJVVM6NjM3ODEzNyxGTEFUVEVOSU5HOjEvMjk4LjI1NzIyMzU2MyxQT0xBUl9SQURJVVM6NjM1Njc1Mi4zMTQyfTtmdW5jdGlvbiBkKHQpe3ZhciBlPTA7aWYodCYmdC5sZW5ndGg+MCl7ZSs9TWF0aC5hYnMoZyh0WzBdKSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspZS09TWF0aC5hYnMoZyh0W3JdKSl9cmV0dXJuIGV9ZnVuY3Rpb24gZyh0KXt2YXIgZSxyLG4sYSxpLG8scz0wLGw9dC5sZW5ndGg7aWYobD4yKXtmb3Iobz0wO288bDtvKyspbz09PWwtMj8obj1sLTIsYT1sLTEsaT0wKTpvPT09bC0xPyhuPWwtMSxhPTAsaT0xKToobj1vLGE9bysxLGk9bysyKSxlPXRbbl0scj10W2FdLHMrPSh2KHRbaV1bMF0pLXYoZVswXSkpKk1hdGguc2luKHYoclsxXSkpO3M9cypwLlJBRElVUypwLlJBRElVUy8yfXJldHVybiBzfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQqTWF0aC5QSS8xODB9dmFyIG09e2dlb21ldHJ5OmZ1bmN0aW9uIHQoZSl7dmFyIHIsbj0wO3N3aXRjaChlLnR5cGUpe2Nhc2UiUG9seWdvbiI6cmV0dXJuIGQoZS5jb29yZGluYXRlcyk7Y2FzZSJNdWx0aVBvbHlnb24iOmZvcihyPTA7cjxlLmNvb3JkaW5hdGVzLmxlbmd0aDtyKyspbis9ZChlLmNvb3JkaW5hdGVzW3JdKTtyZXR1cm4gbjtjYXNlIlBvaW50IjpjYXNlIk11bHRpUG9pbnQiOmNhc2UiTGluZVN0cmluZyI6Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnJldHVybiAwO2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpmb3Iocj0wO3I8ZS5nZW9tZXRyaWVzLmxlbmd0aDtyKyspbis9dChlLmdlb21ldHJpZXNbcl0pO3JldHVybiBufX0scmluZzpnfTtmdW5jdGlvbiB5KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KHIsZSl9fWZ1bmN0aW9uIHgodCxlKXtlPSEhZSx0WzBdPWIodFswXSxlKTtmb3IodmFyIHI9MTtyPHQubGVuZ3RoO3IrKyl0W3JdPWIodFtyXSwhZSk7cmV0dXJuIHR9ZnVuY3Rpb24gYih0LGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbS5yaW5nKHQpPj0wfSh0KT09PWU/dDp0LnJldmVyc2UoKX12YXIgXz10LnZlY3RvclRpbGUuVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLnRvR2VvSlNPTix3PWZ1bmN0aW9uKGUpe3RoaXMuX2ZlYXR1cmU9ZSx0aGlzLmV4dGVudD10LkVYVEVOVCx0aGlzLnR5cGU9ZS50eXBlLHRoaXMucHJvcGVydGllcz1lLnRhZ3MsImlkImluIGUmJiFpc05hTihlLmlkKSYmKHRoaXMuaWQ9cGFyc2VJbnQoZS5pZCwxMCkpfTt3LnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXtpZigxPT09dGhpcy5fZmVhdHVyZS50eXBlKXtmb3IodmFyIGU9W10scj0wLG49dGhpcy5fZmVhdHVyZS5nZW9tZXRyeTtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBhPW5bcl07ZS5wdXNoKFtuZXcgdC5Qb2ludCQxKGFbMF0sYVsxXSldKX1yZXR1cm4gZX1mb3IodmFyIGk9W10sbz0wLHM9dGhpcy5fZmVhdHVyZS5nZW9tZXRyeTtvPHMubGVuZ3RoO28rPTEpe2Zvcih2YXIgbD1bXSxjPTAsdT1zW29dO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXTtsLnB1c2gobmV3IHQuUG9pbnQkMShoWzBdLGhbMV0pKX1pLnB1c2gobCl9cmV0dXJuIGl9LHcucHJvdG90eXBlLnRvR2VvSlNPTj1mdW5jdGlvbih0LGUscil7cmV0dXJuIF8uY2FsbCh0aGlzLHQsZSxyKX07dmFyIGs9ZnVuY3Rpb24oZSl7dGhpcy5sYXllcnM9e19nZW9qc29uVGlsZUxheWVyOnRoaXN9LHRoaXMubmFtZT0iX2dlb2pzb25UaWxlTGF5ZXIiLHRoaXMuZXh0ZW50PXQuRVhURU5ULHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuX2ZlYXR1cmVzPWV9O2sucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB3KHRoaXMuX2ZlYXR1cmVzW3RdKX07dmFyIFQ9dC52ZWN0b3JUaWxlLlZlY3RvclRpbGVGZWF0dXJlLE09QTtmdW5jdGlvbiBBKHQsZSl7dGhpcy5vcHRpb25zPWV8fHt9LHRoaXMuZmVhdHVyZXM9dCx0aGlzLmxlbmd0aD10Lmxlbmd0aH1mdW5jdGlvbiBTKHQsZSl7dGhpcy5pZD0ibnVtYmVyIj09dHlwZW9mIHQuaWQ/dC5pZDp2b2lkIDAsdGhpcy50eXBlPXQudHlwZSx0aGlzLnJhd0dlb21ldHJ5PTE9PT10LnR5cGU/W3QuZ2VvbWV0cnldOnQuZ2VvbWV0cnksdGhpcy5wcm9wZXJ0aWVzPXQudGFncyx0aGlzLmV4dGVudD1lfHw0MDk2fUEucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBTKHRoaXMuZmVhdHVyZXNbdF0sdGhpcy5vcHRpb25zLmV4dGVudCl9LFMucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmF3R2VvbWV0cnk7dGhpcy5nZW9tZXRyeT1bXTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7Zm9yKHZhciBuPWVbcl0sYT1bXSxpPTA7aTxuLmxlbmd0aDtpKyspYS5wdXNoKG5ldyB0LlBvaW50JDEobltpXVswXSxuW2ldWzFdKSk7dGhpcy5nZW9tZXRyeS5wdXNoKGEpfXJldHVybiB0aGlzLmdlb21ldHJ5fSxTLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dGhpcy5nZW9tZXRyeXx8dGhpcy5sb2FkR2VvbWV0cnkoKTtmb3IodmFyIHQ9dGhpcy5nZW9tZXRyeSxlPTEvMCxyPS0xLzAsbj0xLzAsYT0tMS8wLGk9MDtpPHQubGVuZ3RoO2krKylmb3IodmFyIG89dFtpXSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107ZT1NYXRoLm1pbihlLGwueCkscj1NYXRoLm1heChyLGwueCksbj1NYXRoLm1pbihuLGwueSksYT1NYXRoLm1heChhLGwueSl9cmV0dXJuW2UsbixyLGFdfSxTLnByb3RvdHlwZS50b0dlb0pTT049VC5wcm90b3R5cGUudG9HZW9KU09OO3ZhciBFPVAsTD1QLEM9TTtmdW5jdGlvbiBQKGUpe3ZhciByPW5ldyB0LnBiZjtyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdC5sYXllcnMpZS53cml0ZU1lc3NhZ2UoMyxPLHQubGF5ZXJzW3JdKX0oZSxyKSxyLmZpbmlzaCgpfWZ1bmN0aW9uIE8odCxlKXt2YXIgcjtlLndyaXRlVmFyaW50RmllbGQoMTUsdC52ZXJzaW9ufHwxKSxlLndyaXRlU3RyaW5nRmllbGQoMSx0Lm5hbWV8fCIiKSxlLndyaXRlVmFyaW50RmllbGQoNSx0LmV4dGVudHx8NDA5Nik7dmFyIG49e2tleXM6W10sdmFsdWVzOltdLGtleWNhY2hlOnt9LHZhbHVlY2FjaGU6e319O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspbi5mZWF0dXJlPXQuZmVhdHVyZShyKSxlLndyaXRlTWVzc2FnZSgyLHosbik7dmFyIGE9bi5rZXlzO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspZS53cml0ZVN0cmluZ0ZpZWxkKDMsYVtyXSk7dmFyIGk9bi52YWx1ZXM7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyllLndyaXRlTWVzc2FnZSg0LEIsaVtyXSl9ZnVuY3Rpb24geih0LGUpe3ZhciByPXQuZmVhdHVyZTt2b2lkIDAhPT1yLmlkJiZlLndyaXRlVmFyaW50RmllbGQoMSxyLmlkKSxlLndyaXRlTWVzc2FnZSgyLEksdCksZS53cml0ZVZhcmludEZpZWxkKDMsci50eXBlKSxlLndyaXRlTWVzc2FnZSg0LEYscil9ZnVuY3Rpb24gSSh0LGUpe3ZhciByPXQuZmVhdHVyZSxuPXQua2V5cyxhPXQudmFsdWVzLGk9dC5rZXljYWNoZSxvPXQudmFsdWVjYWNoZTtmb3IodmFyIHMgaW4gci5wcm9wZXJ0aWVzKXt2YXIgbD1pW3NdO3ZvaWQgMD09PWwmJihuLnB1c2gocyksbD1uLmxlbmd0aC0xLGlbc109bCksZS53cml0ZVZhcmludChsKTt2YXIgYz1yLnByb3BlcnRpZXNbc10sdT10eXBlb2YgYzsic3RyaW5nIiE9PXUmJiJib29sZWFuIiE9PXUmJiJudW1iZXIiIT09dSYmKGM9SlNPTi5zdHJpbmdpZnkoYykpO3ZhciBoPXUrIjoiK2MsZj1vW2hdO3ZvaWQgMD09PWYmJihhLnB1c2goYyksZj1hLmxlbmd0aC0xLG9baF09ZiksZS53cml0ZVZhcmludChmKX19ZnVuY3Rpb24gRCh0LGUpe3JldHVybihlPDwzKSsoNyZ0KX1mdW5jdGlvbiBSKHQpe3JldHVybiB0PDwxXnQ+PjMxfWZ1bmN0aW9uIEYodCxlKXtmb3IodmFyIHI9dC5sb2FkR2VvbWV0cnkoKSxuPXQudHlwZSxhPTAsaT0wLG89ci5sZW5ndGgscz0wO3M8bztzKyspe3ZhciBsPXJbc10sYz0xOzE9PT1uJiYoYz1sLmxlbmd0aCksZS53cml0ZVZhcmludChEKDEsYykpO2Zvcih2YXIgdT0zPT09bj9sLmxlbmd0aC0xOmwubGVuZ3RoLGg9MDtoPHU7aCsrKXsxPT09aCYmMSE9PW4mJmUud3JpdGVWYXJpbnQoRCgyLHUtMSkpO3ZhciBmPWxbaF0ueC1hLHA9bFtoXS55LWk7ZS53cml0ZVZhcmludChSKGYpKSxlLndyaXRlVmFyaW50KFIocCkpLGErPWYsaSs9cH0zPT09biYmZS53cml0ZVZhcmludChEKDcsMSkpfX1mdW5jdGlvbiBCKHQsZSl7dmFyIHI9dHlwZW9mIHQ7InN0cmluZyI9PT1yP2Uud3JpdGVTdHJpbmdGaWVsZCgxLHQpOiJib29sZWFuIj09PXI/ZS53cml0ZUJvb2xlYW5GaWVsZCg3LHQpOiJudW1iZXIiPT09ciYmKHQlMSE9MD9lLndyaXRlRG91YmxlRmllbGQoMyx0KTp0PDA/ZS53cml0ZVNWYXJpbnRGaWVsZCg2LHQpOmUud3JpdGVWYXJpbnRGaWVsZCg1LHQpKX1mdW5jdGlvbiBOKHQsZSxyLG4pe2oodCxyLG4pLGooZSwyKnIsMipuKSxqKGUsMipyKzEsMipuKzEpfWZ1bmN0aW9uIGoodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiBWKHQsZSxyLG4pe3ZhciBhPXQtcixpPWUtbjtyZXR1cm4gYSphK2kqaX1FLmZyb21WZWN0b3JUaWxlSnM9TCxFLmZyb21HZW9qc29uVnQ9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXt9O2Zvcih2YXIgbiBpbiB0KXJbbl09bmV3IE0odFtuXS5mZWF0dXJlcyxlKSxyW25dLm5hbWU9bixyW25dLnZlcnNpb249ZS52ZXJzaW9uLHJbbl0uZXh0ZW50PWUuZXh0ZW50O3JldHVybiBQKHtsYXllcnM6cn0pfSxFLkdlb0pTT05XcmFwcGVyPUM7dmFyIFU9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19LHE9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMV19LEg9ZnVuY3Rpb24odCxlLHIsbixhKXt2b2lkIDA9PT1lJiYoZT1VKSx2b2lkIDA9PT1yJiYocj1xKSx2b2lkIDA9PT1uJiYobj02NCksdm9pZCAwPT09YSYmKGE9RmxvYXQ2NEFycmF5KSx0aGlzLm5vZGVTaXplPW4sdGhpcy5wb2ludHM9dDtmb3IodmFyIGk9dC5sZW5ndGg8NjU1MzY/VWludDE2QXJyYXk6VWludDMyQXJyYXksbz10aGlzLmlkcz1uZXcgaSh0Lmxlbmd0aCkscz10aGlzLmNvb3Jkcz1uZXcgYSgyKnQubGVuZ3RoKSxsPTA7bDx0Lmxlbmd0aDtsKyspb1tsXT1sLHNbMipsXT1lKHRbbF0pLHNbMipsKzFdPXIodFtsXSk7IWZ1bmN0aW9uIHQoZSxyLG4sYSxpLG8pe2lmKCEoaS1hPD1uKSl7dmFyIHM9YStpPj4xOyFmdW5jdGlvbiB0KGUscixuLGEsaSxvKXtmb3IoO2k+YTspe2lmKGktYT42MDApe3ZhciBzPWktYSsxLGw9bi1hKzEsYz1NYXRoLmxvZyhzKSx1PS41Kk1hdGguZXhwKDIqYy8zKSxoPS41Kk1hdGguc3FydChjKnUqKHMtdSkvcykqKGwtcy8yPDA/LTE6MSk7dChlLHIsbixNYXRoLm1heChhLE1hdGguZmxvb3Iobi1sKnUvcytoKSksTWF0aC5taW4oaSxNYXRoLmZsb29yKG4rKHMtbCkqdS9zK2gpKSxvKX12YXIgZj1yWzIqbitvXSxwPWEsZD1pO2ZvcihOKGUscixhLG4pLHJbMippK29dPmYmJk4oZSxyLGEsaSk7cDxkOyl7Zm9yKE4oZSxyLHAsZCkscCsrLGQtLTtyWzIqcCtvXTxmOylwKys7Zm9yKDtyWzIqZCtvXT5mOylkLS19clsyKmErb109PT1mP04oZSxyLGEsZCk6TihlLHIsKytkLGkpLGQ8PW4mJihhPWQrMSksbjw9ZCYmKGk9ZC0xKX19KGUscixzLGEsaSxvJTIpLHQoZSxyLG4sYSxzLTEsbysxKSx0KGUscixuLHMrMSxpLG8rMSl9fShvLHMsbiwwLG8ubGVuZ3RoLTEsMCl9O0gucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbih0LGUscixuLGEsaSxvKXtmb3IodmFyIHMsbCxjPVswLHQubGVuZ3RoLTEsMF0sdT1bXTtjLmxlbmd0aDspe3ZhciBoPWMucG9wKCksZj1jLnBvcCgpLHA9Yy5wb3AoKTtpZihmLXA8PW8pZm9yKHZhciBkPXA7ZDw9ZjtkKyspcz1lWzIqZF0sbD1lWzIqZCsxXSxzPj1yJiZzPD1hJiZsPj1uJiZsPD1pJiZ1LnB1c2godFtkXSk7ZWxzZXt2YXIgZz1NYXRoLmZsb29yKChwK2YpLzIpO3M9ZVsyKmddLGw9ZVsyKmcrMV0scz49ciYmczw9YSYmbD49biYmbDw9aSYmdS5wdXNoKHRbZ10pO3ZhciB2PShoKzEpJTI7KDA9PT1oP3I8PXM6bjw9bCkmJihjLnB1c2gocCksYy5wdXNoKGctMSksYy5wdXNoKHYpKSwoMD09PWg/YT49czppPj1sKSYmKGMucHVzaChnKzEpLGMucHVzaChmKSxjLnB1c2godikpfX1yZXR1cm4gdX0odGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsbix0aGlzLm5vZGVTaXplKX0sSC5wcm90b3R5cGUud2l0aGluPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixhLGkpe2Zvcih2YXIgbz1bMCx0Lmxlbmd0aC0xLDBdLHM9W10sbD1hKmE7by5sZW5ndGg7KXt2YXIgYz1vLnBvcCgpLHU9by5wb3AoKSxoPW8ucG9wKCk7aWYodS1oPD1pKWZvcih2YXIgZj1oO2Y8PXU7ZisrKVYoZVsyKmZdLGVbMipmKzFdLHIsbik8PWwmJnMucHVzaCh0W2ZdKTtlbHNle3ZhciBwPU1hdGguZmxvb3IoKGgrdSkvMiksZD1lWzIqcF0sZz1lWzIqcCsxXTtWKGQsZyxyLG4pPD1sJiZzLnB1c2godFtwXSk7dmFyIHY9KGMrMSklMjsoMD09PWM/ci1hPD1kOm4tYTw9ZykmJihvLnB1c2goaCksby5wdXNoKHAtMSksby5wdXNoKHYpKSwoMD09PWM/cithPj1kOm4rYT49ZykmJihvLnB1c2gocCsxKSxvLnB1c2godSksby5wdXNoKHYpKX19cmV0dXJuIHN9KHRoaXMuaWRzLHRoaXMuY29vcmRzLHQsZSxyLHRoaXMubm9kZVNpemUpfTt2YXIgRz17bWluWm9vbTowLG1heFpvb206MTYscmFkaXVzOjQwLGV4dGVudDo1MTIsbm9kZVNpemU6NjQsbG9nOiExLHJlZHVjZTpudWxsLG1hcDpmdW5jdGlvbih0KXtyZXR1cm4gdH19LFk9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPSQoT2JqZWN0LmNyZWF0ZShHKSx0KSx0aGlzLnRyZWVzPW5ldyBBcnJheSh0aGlzLm9wdGlvbnMubWF4Wm9vbSsxKX07ZnVuY3Rpb24gVyh0LGUscixuLGEpe3JldHVybnt4OnQseTplLHpvb206MS8wLGlkOnIscGFyZW50SWQ6LTEsbnVtUG9pbnRzOm4scHJvcGVydGllczphfX1mdW5jdGlvbiBYKHQsZSl7dmFyIHI9dC5nZW9tZXRyeS5jb29yZGluYXRlcyxuPXJbMF0sYT1yWzFdO3JldHVybnt4OksobikseTpRKGEpLHpvb206MS8wLGluZGV4OmUscGFyZW50SWQ6LTF9fWZ1bmN0aW9uIFoodCl7cmV0dXJue3R5cGU6IkZlYXR1cmUiLGlkOnQuaWQscHJvcGVydGllczpKKHQpLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6WyhuPXQueCwzNjAqKG4tLjUpKSwoZT10Lnkscj0oMTgwLTM2MCplKSpNYXRoLlBJLzE4MCwzNjAqTWF0aC5hdGFuKE1hdGguZXhwKHIpKS9NYXRoLlBJLTkwKV19fTt2YXIgZSxyLG59ZnVuY3Rpb24gSih0KXt2YXIgZT10Lm51bVBvaW50cyxyPWU+PTFlND9NYXRoLnJvdW5kKGUvMWUzKSsiayI6ZT49MWUzP01hdGgucm91bmQoZS8xMDApLzEwKyJrIjplO3JldHVybiAkKCQoe30sdC5wcm9wZXJ0aWVzKSx7Y2x1c3RlcjohMCxjbHVzdGVyX2lkOnQuaWQscG9pbnRfY291bnQ6ZSxwb2ludF9jb3VudF9hYmJyZXZpYXRlZDpyfSl9ZnVuY3Rpb24gSyh0KXtyZXR1cm4gdC8zNjArLjV9ZnVuY3Rpb24gUSh0KXt2YXIgZT1NYXRoLnNpbih0Kk1hdGguUEkvMTgwKSxyPS41LS4yNSpNYXRoLmxvZygoMStlKS8oMS1lKSkvTWF0aC5QSTtyZXR1cm4gcjwwPzA6cj4xPzE6cn1mdW5jdGlvbiAkKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdO3JldHVybiB0fWZ1bmN0aW9uIHR0KHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gZXQodCl7cmV0dXJuIHQueX1mdW5jdGlvbiBydCh0LGUscixuLGEsaSl7dmFyIG89YS1yLHM9aS1uO2lmKDAhPT1vfHwwIT09cyl7dmFyIGw9KCh0LXIpKm8rKGUtbikqcykvKG8qbytzKnMpO2w+MT8ocj1hLG49aSk6bD4wJiYocis9bypsLG4rPXMqbCl9cmV0dXJuKG89dC1yKSpvKyhzPWUtbikqc31mdW5jdGlvbiBudCh0LGUscixuKXt2YXIgYT17aWQ6dm9pZCAwPT09dD9udWxsOnQsdHlwZTplLGdlb21ldHJ5OnIsdGFnczpuLG1pblg6MS8wLG1pblk6MS8wLG1heFg6LTEvMCxtYXhZOi0xLzB9O3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10Lmdlb21ldHJ5LHI9dC50eXBlO2lmKCJQb2ludCI9PT1yfHwiTXVsdGlQb2ludCI9PT1yfHwiTGluZVN0cmluZyI9PT1yKWF0KHQsZSk7ZWxzZSBpZigiUG9seWdvbiI9PT1yfHwiTXVsdGlMaW5lU3RyaW5nIj09PXIpZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspYXQodCxlW25dKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09cilmb3Iobj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgYT0wO2E8ZVtuXS5sZW5ndGg7YSsrKWF0KHQsZVtuXVthXSl9KGEpLGF9ZnVuY3Rpb24gYXQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrPTMpdC5taW5YPU1hdGgubWluKHQubWluWCxlW3JdKSx0Lm1pblk9TWF0aC5taW4odC5taW5ZLGVbcisxXSksdC5tYXhYPU1hdGgubWF4KHQubWF4WCxlW3JdKSx0Lm1heFk9TWF0aC5tYXgodC5tYXhZLGVbcisxXSl9ZnVuY3Rpb24gaXQodCxlLHIsbil7aWYoZS5nZW9tZXRyeSl7dmFyIGE9ZS5nZW9tZXRyeS5jb29yZGluYXRlcyxpPWUuZ2VvbWV0cnkudHlwZSxvPU1hdGgucG93KHIudG9sZXJhbmNlLygoMTw8ci5tYXhab29tKSpyLmV4dGVudCksMikscz1bXSxsPWUuaWQ7aWYoci5wcm9tb3RlSWQ/bD1lLnByb3BlcnRpZXNbci5wcm9tb3RlSWRdOnIuZ2VuZXJhdGVJZCYmKGw9bnx8MCksIlBvaW50Ij09PWkpb3QoYSxzKTtlbHNlIGlmKCJNdWx0aVBvaW50Ij09PWkpZm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspb3QoYVtjXSxzKTtlbHNlIGlmKCJMaW5lU3RyaW5nIj09PWkpc3QoYSxzLG8sITEpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1pKXtpZihyLmxpbmVNZXRyaWNzKXtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXM9W10sc3QoYVtjXSxzLG8sITEpLHQucHVzaChudChsLCJMaW5lU3RyaW5nIixzLGUucHJvcGVydGllcykpO3JldHVybn1sdChhLHMsbywhMSl9ZWxzZSBpZigiUG9seWdvbiI9PT1pKWx0KGEscyxvLCEwKTtlbHNle2lmKCJNdWx0aVBvbHlnb24iIT09aSl7aWYoIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1pKXtmb3IoYz0wO2M8ZS5nZW9tZXRyeS5nZW9tZXRyaWVzLmxlbmd0aDtjKyspaXQodCx7aWQ6bCxnZW9tZXRyeTplLmdlb21ldHJ5Lmdlb21ldHJpZXNbY10scHJvcGVydGllczplLnByb3BlcnRpZXN9LHIsbik7cmV0dXJufXRocm93IG5ldyBFcnJvcigiSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4iKX1mb3IoYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1bXTtsdChhW2NdLHUsbywhMCkscy5wdXNoKHUpfX10LnB1c2gobnQobCxpLHMsZS5wcm9wZXJ0aWVzKSl9fWZ1bmN0aW9uIG90KHQsZSl7ZS5wdXNoKGN0KHRbMF0pKSxlLnB1c2godXQodFsxXSkpLGUucHVzaCgwKX1mdW5jdGlvbiBzdCh0LGUscixuKXtmb3IodmFyIGEsaSxvPTAscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD1jdCh0W3NdWzBdKSxjPXV0KHRbc11bMV0pO2UucHVzaChsKSxlLnB1c2goYyksZS5wdXNoKDApLHM+MCYmKG8rPW4/KGEqYy1sKmkpLzI6TWF0aC5zcXJ0KE1hdGgucG93KGwtYSwyKStNYXRoLnBvdyhjLWksMikpKSxhPWwsaT1jfXZhciB1PWUubGVuZ3RoLTM7ZVsyXT0xLGZ1bmN0aW9uIHQoZSxyLG4sYSl7Zm9yKHZhciBpLG89YSxzPW4tcj4+MSxsPW4tcixjPWVbcl0sdT1lW3IrMV0saD1lW25dLGY9ZVtuKzFdLHA9ciszO3A8bjtwKz0zKXt2YXIgZD1ydChlW3BdLGVbcCsxXSxjLHUsaCxmKTtpZihkPm8paT1wLG89ZDtlbHNlIGlmKGQ9PT1vKXt2YXIgZz1NYXRoLmFicyhwLXMpO2c8bCYmKGk9cCxsPWcpfX1vPmEmJihpLXI+MyYmdChlLHIsaSxhKSxlW2krMl09byxuLWk+MyYmdChlLGksbixhKSl9KGUsMCx1LHIpLGVbdSsyXT0xLGUuc2l6ZT1NYXRoLmFicyhvKSxlLnN0YXJ0PTAsZS5lbmQ9ZS5zaXplfWZ1bmN0aW9uIGx0KHQsZSxyLG4pe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgaT1bXTtzdCh0W2FdLGkscixuKSxlLnB1c2goaSl9fWZ1bmN0aW9uIGN0KHQpe3JldHVybiB0LzM2MCsuNX1mdW5jdGlvbiB1dCh0KXt2YXIgZT1NYXRoLnNpbih0Kk1hdGguUEkvMTgwKSxyPS41LS4yNSpNYXRoLmxvZygoMStlKS8oMS1lKSkvTWF0aC5QSTtyZXR1cm4gcjwwPzA6cj4xPzE6cn1mdW5jdGlvbiBodCh0LGUscixuLGEsaSxvLHMpe2lmKG4vPWUsaT49KHIvPWUpJiZvPG4pcmV0dXJuIHQ7aWYobzxyfHxpPj1uKXJldHVybiBudWxsO2Zvcih2YXIgbD1bXSxjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciB1PXRbY10saD11Lmdlb21ldHJ5LGY9dS50eXBlLHA9MD09PWE/dS5taW5YOnUubWluWSxkPTA9PT1hP3UubWF4WDp1Lm1heFk7aWYocD49ciYmZDxuKWwucHVzaCh1KTtlbHNlIGlmKCEoZDxyfHxwPj1uKSl7dmFyIGc9W107aWYoIlBvaW50Ij09PWZ8fCJNdWx0aVBvaW50Ij09PWYpZnQoaCxnLHIsbixhKTtlbHNlIGlmKCJMaW5lU3RyaW5nIj09PWYpcHQoaCxnLHIsbixhLCExLHMubGluZU1ldHJpY3MpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1mKWd0KGgsZyxyLG4sYSwhMSk7ZWxzZSBpZigiUG9seWdvbiI9PT1mKWd0KGgsZyxyLG4sYSwhMCk7ZWxzZSBpZigiTXVsdGlQb2x5Z29uIj09PWYpZm9yKHZhciB2PTA7djxoLmxlbmd0aDt2Kyspe3ZhciBtPVtdO2d0KGhbdl0sbSxyLG4sYSwhMCksbS5sZW5ndGgmJmcucHVzaChtKX1pZihnLmxlbmd0aCl7aWYocy5saW5lTWV0cmljcyYmIkxpbmVTdHJpbmciPT09Zil7Zm9yKHY9MDt2PGcubGVuZ3RoO3YrKylsLnB1c2gobnQodS5pZCxmLGdbdl0sdS50YWdzKSk7Y29udGludWV9IkxpbmVTdHJpbmciIT09ZiYmIk11bHRpTGluZVN0cmluZyIhPT1mfHwoMT09PWcubGVuZ3RoPyhmPSJMaW5lU3RyaW5nIixnPWdbMF0pOmY9Ik11bHRpTGluZVN0cmluZyIpLCJQb2ludCIhPT1mJiYiTXVsdGlQb2ludCIhPT1mfHwoZj0zPT09Zy5sZW5ndGg/IlBvaW50IjoiTXVsdGlQb2ludCIpLGwucHVzaChudCh1LmlkLGYsZyx1LnRhZ3MpKX19fXJldHVybiBsLmxlbmd0aD9sOm51bGx9ZnVuY3Rpb24gZnQodCxlLHIsbixhKXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krPTMpe3ZhciBvPXRbaSthXTtvPj1yJiZvPD1uJiYoZS5wdXNoKHRbaV0pLGUucHVzaCh0W2krMV0pLGUucHVzaCh0W2krMl0pKX19ZnVuY3Rpb24gcHQodCxlLHIsbixhLGksbyl7Zm9yKHZhciBzLGwsYz1kdCh0KSx1PTA9PT1hP210Onl0LGg9dC5zdGFydCxmPTA7Zjx0Lmxlbmd0aC0zO2YrPTMpe3ZhciBwPXRbZl0sZD10W2YrMV0sZz10W2YrMl0sdj10W2YrM10sbT10W2YrNF0seT0wPT09YT9wOmQseD0wPT09YT92Om0sYj0hMTtvJiYocz1NYXRoLnNxcnQoTWF0aC5wb3cocC12LDIpK01hdGgucG93KGQtbSwyKSkpLHk8cj94PnImJihsPXUoYyxwLGQsdixtLHIpLG8mJihjLnN0YXJ0PWgrcypsKSk6eT5uP3g8biYmKGw9dShjLHAsZCx2LG0sbiksbyYmKGMuc3RhcnQ9aCtzKmwpKTp2dChjLHAsZCxnKSx4PHImJnk+PXImJihsPXUoYyxwLGQsdixtLHIpLGI9ITApLHg+biYmeTw9biYmKGw9dShjLHAsZCx2LG0sbiksYj0hMCksIWkmJmImJihvJiYoYy5lbmQ9aCtzKmwpLGUucHVzaChjKSxjPWR0KHQpKSxvJiYoaCs9cyl9dmFyIF89dC5sZW5ndGgtMztwPXRbX10sZD10W18rMV0sZz10W18rMl0sKHk9MD09PWE/cDpkKT49ciYmeTw9biYmdnQoYyxwLGQsZyksXz1jLmxlbmd0aC0zLGkmJl8+PTMmJihjW19dIT09Y1swXXx8Y1tfKzFdIT09Y1sxXSkmJnZ0KGMsY1swXSxjWzFdLGNbMl0pLGMubGVuZ3RoJiZlLnB1c2goYyl9ZnVuY3Rpb24gZHQodCl7dmFyIGU9W107cmV0dXJuIGUuc2l6ZT10LnNpemUsZS5zdGFydD10LnN0YXJ0LGUuZW5kPXQuZW5kLGV9ZnVuY3Rpb24gZ3QodCxlLHIsbixhLGkpe2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXB0KHRbb10sZSxyLG4sYSxpLCExKX1mdW5jdGlvbiB2dCh0LGUscixuKXt0LnB1c2goZSksdC5wdXNoKHIpLHQucHVzaChuKX1mdW5jdGlvbiBtdCh0LGUscixuLGEsaSl7dmFyIG89KGktZSkvKG4tZSk7cmV0dXJuIHQucHVzaChpKSx0LnB1c2gocisoYS1yKSpvKSx0LnB1c2goMSksb31mdW5jdGlvbiB5dCh0LGUscixuLGEsaSl7dmFyIG89KGktcikvKGEtcik7cmV0dXJuIHQucHVzaChlKyhuLWUpKm8pLHQucHVzaChpKSx0LnB1c2goMSksb31mdW5jdGlvbiB4dCh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBhLGk9dFtuXSxvPWkudHlwZTtpZigiUG9pbnQiPT09b3x8Ik11bHRpUG9pbnQiPT09b3x8IkxpbmVTdHJpbmciPT09bylhPWJ0KGkuZ2VvbWV0cnksZSk7ZWxzZSBpZigiTXVsdGlMaW5lU3RyaW5nIj09PW98fCJQb2x5Z29uIj09PW8pe2E9W107Zm9yKHZhciBzPTA7czxpLmdlb21ldHJ5Lmxlbmd0aDtzKyspYS5wdXNoKGJ0KGkuZ2VvbWV0cnlbc10sZSkpfWVsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1vKWZvcihhPVtdLHM9MDtzPGkuZ2VvbWV0cnkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPVtdLGM9MDtjPGkuZ2VvbWV0cnlbc10ubGVuZ3RoO2MrKylsLnB1c2goYnQoaS5nZW9tZXRyeVtzXVtjXSxlKSk7YS5wdXNoKGwpfXIucHVzaChudChpLmlkLG8sYSxpLnRhZ3MpKX1yZXR1cm4gcn1mdW5jdGlvbiBidCh0LGUpe3ZhciByPVtdO3Iuc2l6ZT10LnNpemUsdm9pZCAwIT09dC5zdGFydCYmKHIuc3RhcnQ9dC5zdGFydCxyLmVuZD10LmVuZCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz0zKXIucHVzaCh0W25dK2UsdFtuKzFdLHRbbisyXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gX3QodCxlKXtpZih0LnRyYW5zZm9ybWVkKXJldHVybiB0O3ZhciByLG4sYSxpPTE8PHQueixvPXQueCxzPXQueTtmb3Iocj0wO3I8dC5mZWF0dXJlcy5sZW5ndGg7cisrKXt2YXIgbD10LmZlYXR1cmVzW3JdLGM9bC5nZW9tZXRyeSx1PWwudHlwZTtpZihsLmdlb21ldHJ5PVtdLDE9PT11KWZvcihuPTA7bjxjLmxlbmd0aDtuKz0yKWwuZ2VvbWV0cnkucHVzaCh3dChjW25dLGNbbisxXSxlLGksbyxzKSk7ZWxzZSBmb3Iobj0wO248Yy5sZW5ndGg7bisrKXt2YXIgaD1bXTtmb3IoYT0wO2E8Y1tuXS5sZW5ndGg7YSs9MiloLnB1c2god3QoY1tuXVthXSxjW25dW2ErMV0sZSxpLG8scykpO2wuZ2VvbWV0cnkucHVzaChoKX19cmV0dXJuIHQudHJhbnNmb3JtZWQ9ITAsdH1mdW5jdGlvbiB3dCh0LGUscixuLGEsaSl7cmV0dXJuW01hdGgucm91bmQocioodCpuLWEpKSxNYXRoLnJvdW5kKHIqKGUqbi1pKSldfWZ1bmN0aW9uIGt0KHQsZSxyLG4sYSl7Zm9yKHZhciBpPWU9PT1hLm1heFpvb20/MDphLnRvbGVyYW5jZS8oKDE8PGUpKmEuZXh0ZW50KSxvPXtmZWF0dXJlczpbXSxudW1Qb2ludHM6MCxudW1TaW1wbGlmaWVkOjAsbnVtRmVhdHVyZXM6MCxzb3VyY2U6bnVsbCx4OnIseTpuLHo6ZSx0cmFuc2Zvcm1lZDohMSxtaW5YOjIsbWluWToxLG1heFg6LTEsbWF4WTowfSxzPTA7czx0Lmxlbmd0aDtzKyspe28ubnVtRmVhdHVyZXMrKyxUdChvLHRbc10saSxhKTt2YXIgbD10W3NdLm1pblgsYz10W3NdLm1pblksdT10W3NdLm1heFgsaD10W3NdLm1heFk7bDxvLm1pblgmJihvLm1pblg9bCksYzxvLm1pblkmJihvLm1pblk9YyksdT5vLm1heFgmJihvLm1heFg9dSksaD5vLm1heFkmJihvLm1heFk9aCl9cmV0dXJuIG99ZnVuY3Rpb24gVHQodCxlLHIsbil7dmFyIGE9ZS5nZW9tZXRyeSxpPWUudHlwZSxvPVtdO2lmKCJQb2ludCI9PT1pfHwiTXVsdGlQb2ludCI9PT1pKWZvcih2YXIgcz0wO3M8YS5sZW5ndGg7cys9MylvLnB1c2goYVtzXSksby5wdXNoKGFbcysxXSksdC5udW1Qb2ludHMrKyx0Lm51bVNpbXBsaWZpZWQrKztlbHNlIGlmKCJMaW5lU3RyaW5nIj09PWkpTXQobyxhLHQsciwhMSwhMSk7ZWxzZSBpZigiTXVsdGlMaW5lU3RyaW5nIj09PWl8fCJQb2x5Z29uIj09PWkpZm9yKHM9MDtzPGEubGVuZ3RoO3MrKylNdChvLGFbc10sdCxyLCJQb2x5Z29uIj09PWksMD09PXMpO2Vsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1pKWZvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKXt2YXIgYz1hW2xdO2ZvcihzPTA7czxjLmxlbmd0aDtzKyspTXQobyxjW3NdLHQsciwhMCwwPT09cyl9aWYoby5sZW5ndGgpe3ZhciB1PWUudGFnc3x8bnVsbDtpZigiTGluZVN0cmluZyI9PT1pJiZuLmxpbmVNZXRyaWNzKXtmb3IodmFyIGggaW4gdT17fSxlLnRhZ3MpdVtoXT1lLnRhZ3NbaF07dS5tYXBib3hfY2xpcF9zdGFydD1hLnN0YXJ0L2Euc2l6ZSx1Lm1hcGJveF9jbGlwX2VuZD1hLmVuZC9hLnNpemV9dmFyIGY9e2dlb21ldHJ5Om8sdHlwZToiUG9seWdvbiI9PT1pfHwiTXVsdGlQb2x5Z29uIj09PWk/MzoiTGluZVN0cmluZyI9PT1pfHwiTXVsdGlMaW5lU3RyaW5nIj09PWk/MjoxLHRhZ3M6dX07bnVsbCE9PWUuaWQmJihmLmlkPWUuaWQpLHQuZmVhdHVyZXMucHVzaChmKX19ZnVuY3Rpb24gTXQodCxlLHIsbixhLGkpe3ZhciBvPW4qbjtpZihuPjAmJmUuc2l6ZTwoYT9vOm4pKXIubnVtUG9pbnRzKz1lLmxlbmd0aC8zO2Vsc2V7Zm9yKHZhciBzPVtdLGw9MDtsPGUubGVuZ3RoO2wrPTMpKDA9PT1ufHxlW2wrMl0+bykmJihyLm51bVNpbXBsaWZpZWQrKyxzLnB1c2goZVtsXSkscy5wdXNoKGVbbCsxXSkpLHIubnVtUG9pbnRzKys7YSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsYT10Lmxlbmd0aCxpPWEtMjtuPGE7aT1uLG4rPTIpcis9KHRbbl0tdFtpXSkqKHRbbisxXSt0W2krMV0pO2lmKHI+MD09PWUpZm9yKG49MCxhPXQubGVuZ3RoO248YS8yO24rPTIpe3ZhciBvPXRbbl0scz10W24rMV07dFtuXT10W2EtMi1uXSx0W24rMV09dFthLTEtbl0sdFthLTItbl09byx0W2EtMS1uXT1zfX0ocyxpKSx0LnB1c2gocyl9fWZ1bmN0aW9uIEF0KHQsZSl7dmFyIHI9KGU9dGhpcy5vcHRpb25zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdO3JldHVybiB0fShPYmplY3QuY3JlYXRlKHRoaXMub3B0aW9ucyksZSkpLmRlYnVnO2lmKHImJmNvbnNvbGUudGltZSgicHJlcHJvY2VzcyBkYXRhIiksZS5tYXhab29tPDB8fGUubWF4Wm9vbT4yNCl0aHJvdyBuZXcgRXJyb3IoIm1heFpvb20gc2hvdWxkIGJlIGluIHRoZSAwLTI0IHJhbmdlIik7aWYoZS5wcm9tb3RlSWQmJmUuZ2VuZXJhdGVJZCl0aHJvdyBuZXcgRXJyb3IoInByb21vdGVJZCBhbmQgZ2VuZXJhdGVJZCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iKTt2YXIgbj1mdW5jdGlvbih0LGUpe3ZhciByPVtdO2lmKCJGZWF0dXJlQ29sbGVjdGlvbiI9PT10LnR5cGUpZm9yKHZhciBuPTA7bjx0LmZlYXR1cmVzLmxlbmd0aDtuKyspaXQocix0LmZlYXR1cmVzW25dLGUsbik7ZWxzZSJGZWF0dXJlIj09PXQudHlwZT9pdChyLHQsZSk6aXQocix7Z2VvbWV0cnk6dH0sZSk7cmV0dXJuIHJ9KHQsZSk7dGhpcy50aWxlcz17fSx0aGlzLnRpbGVDb29yZHM9W10sciYmKGNvbnNvbGUudGltZUVuZCgicHJlcHJvY2VzcyBkYXRhIiksY29uc29sZS5sb2coImluZGV4OiBtYXhab29tOiAlZCwgbWF4UG9pbnRzOiAlZCIsZS5pbmRleE1heFpvb20sZS5pbmRleE1heFBvaW50cyksY29uc29sZS50aW1lKCJnZW5lcmF0ZSB0aWxlcyIpLHRoaXMuc3RhdHM9e30sdGhpcy50b3RhbD0wKSwobj1mdW5jdGlvbih0LGUpe3ZhciByPWUuYnVmZmVyL2UuZXh0ZW50LG49dCxhPWh0KHQsMSwtMS1yLHIsMCwtMSwyLGUpLGk9aHQodCwxLDEtciwyK3IsMCwtMSwyLGUpO3JldHVybihhfHxpKSYmKG49aHQodCwxLC1yLDErciwwLC0xLDIsZSl8fFtdLGEmJihuPXh0KGEsMSkuY29uY2F0KG4pKSxpJiYobj1uLmNvbmNhdCh4dChpLC0xKSkpKSxufShuLGUpKS5sZW5ndGgmJnRoaXMuc3BsaXRUaWxlKG4sMCwwLDApLHImJihuLmxlbmd0aCYmY29uc29sZS5sb2coImZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCIsdGhpcy50aWxlc1swXS5udW1GZWF0dXJlcyx0aGlzLnRpbGVzWzBdLm51bVBvaW50cyksY29uc29sZS50aW1lRW5kKCJnZW5lcmF0ZSB0aWxlcyIpLGNvbnNvbGUubG9nKCJ0aWxlcyBnZW5lcmF0ZWQ6Iix0aGlzLnRvdGFsLEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdHMpKSl9ZnVuY3Rpb24gU3QodCxlLHIpe3JldHVybiAzMiooKDE8PHQpKnIrZSkrdH1mdW5jdGlvbiBFdCh0LGUpe3ZhciByPXQudGlsZUlELmNhbm9uaWNhbDtpZighdGhpcy5fZ2VvSlNPTkluZGV4KXJldHVybiBlKG51bGwsbnVsbCk7dmFyIG49dGhpcy5fZ2VvSlNPTkluZGV4LmdldFRpbGUoci56LHIueCxyLnkpO2lmKCFuKXJldHVybiBlKG51bGwsbnVsbCk7dmFyIGE9bmV3IGsobi5mZWF0dXJlcyksaT1FKGEpOzA9PT1pLmJ5dGVPZmZzZXQmJmkuYnl0ZUxlbmd0aD09PWkuYnVmZmVyLmJ5dGVMZW5ndGh8fChpPW5ldyBVaW50OEFycmF5KGkpKSxlKG51bGwse3ZlY3RvclRpbGU6YSxyYXdEYXRhOmkuYnVmZmVyfSl9WS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMscj1lLmxvZyxuPWUubWluWm9vbSxhPWUubWF4Wm9vbSxpPWUubm9kZVNpemU7ciYmY29uc29sZS50aW1lKCJ0b3RhbCB0aW1lIik7dmFyIG89InByZXBhcmUgIit0Lmxlbmd0aCsiIHBvaW50cyI7ciYmY29uc29sZS50aW1lKG8pLHRoaXMucG9pbnRzPXQ7Zm9yKHZhciBzPVtdLGw9MDtsPHQubGVuZ3RoO2wrKyl0W2xdLmdlb21ldHJ5JiZzLnB1c2goWCh0W2xdLGwpKTt0aGlzLnRyZWVzW2ErMV09bmV3IEgocyx0dCxldCxpLEZsb2F0MzJBcnJheSksciYmY29uc29sZS50aW1lRW5kKG8pO2Zvcih2YXIgYz1hO2M+PW47Yy0tKXt2YXIgdT0rRGF0ZS5ub3coKTtzPXRoaXMuX2NsdXN0ZXIocyxjKSx0aGlzLnRyZWVzW2NdPW5ldyBIKHMsdHQsZXQsaSxGbG9hdDMyQXJyYXkpLHImJmNvbnNvbGUubG9nKCJ6JWQ6ICVkIGNsdXN0ZXJzIGluICVkbXMiLGMscy5sZW5ndGgsK0RhdGUubm93KCktdSl9cmV0dXJuIHImJmNvbnNvbGUudGltZUVuZCgidG90YWwgdGltZSIpLHRoaXN9LFkucHJvdG90eXBlLmdldENsdXN0ZXJzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KCh0WzBdKzE4MCklMzYwKzM2MCklMzYwLTE4MCxuPU1hdGgubWF4KC05MCxNYXRoLm1pbig5MCx0WzFdKSksYT0xODA9PT10WzJdPzE4MDooKHRbMl0rMTgwKSUzNjArMzYwKSUzNjAtMTgwLGk9TWF0aC5tYXgoLTkwLE1hdGgubWluKDkwLHRbM10pKTtpZih0WzJdLXRbMF0+PTM2MClyPS0xODAsYT0xODA7ZWxzZSBpZihyPmEpe3ZhciBvPXRoaXMuZ2V0Q2x1c3RlcnMoW3IsbiwxODAsaV0sZSkscz10aGlzLmdldENsdXN0ZXJzKFstMTgwLG4sYSxpXSxlKTtyZXR1cm4gby5jb25jYXQocyl9Zm9yKHZhciBsPXRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKGUpXSxjPVtdLHU9MCxoPWwucmFuZ2UoSyhyKSxRKGkpLEsoYSksUShuKSk7dTxoLmxlbmd0aDt1Kz0xKXt2YXIgZj1oW3VdLHA9bC5wb2ludHNbZl07Yy5wdXNoKHAubnVtUG9pbnRzP1oocCk6dGhpcy5wb2ludHNbcC5pbmRleF0pfXJldHVybiBjfSxZLnByb3RvdHlwZS5nZXRDaGlsZHJlbj1mdW5jdGlvbih0KXt2YXIgZT10Pj41LHI9dCUzMixuPSJObyBjbHVzdGVyIHdpdGggdGhlIHNwZWNpZmllZCBpZC4iLGE9dGhpcy50cmVlc1tyXTtpZighYSl0aHJvdyBuZXcgRXJyb3Iobik7dmFyIGk9YS5wb2ludHNbZV07aWYoIWkpdGhyb3cgbmV3IEVycm9yKG4pO2Zvcih2YXIgbz10aGlzLm9wdGlvbnMucmFkaXVzLyh0aGlzLm9wdGlvbnMuZXh0ZW50Kk1hdGgucG93KDIsci0xKSkscz1bXSxsPTAsYz1hLndpdGhpbihpLngsaS55LG8pO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXSxoPWEucG9pbnRzW3VdO2gucGFyZW50SWQ9PT10JiZzLnB1c2goaC5udW1Qb2ludHM/WihoKTp0aGlzLnBvaW50c1toLmluZGV4XSl9aWYoMD09PXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihuKTtyZXR1cm4gc30sWS5wcm90b3R5cGUuZ2V0TGVhdmVzPWZ1bmN0aW9uKHQsZSxyKXtlPWV8fDEwLHI9cnx8MDt2YXIgbj1bXTtyZXR1cm4gdGhpcy5fYXBwZW5kTGVhdmVzKG4sdCxlLHIsMCksbn0sWS5wcm90b3R5cGUuZ2V0VGlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20odCldLGE9TWF0aC5wb3coMix0KSxpPXRoaXMub3B0aW9ucyxvPWkuZXh0ZW50LHM9aS5yYWRpdXMvbyxsPShyLXMpL2EsYz0ocisxK3MpL2EsdT17ZmVhdHVyZXM6W119O3JldHVybiB0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgoZS1zKS9hLGwsKGUrMStzKS9hLGMpLG4ucG9pbnRzLGUscixhLHUpLDA9PT1lJiZ0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgxLXMvYSxsLDEsYyksbi5wb2ludHMsYSxyLGEsdSksZT09PWEtMSYmdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoMCxsLHMvYSxjKSxuLnBvaW50cywtMSxyLGEsdSksdS5mZWF0dXJlcy5sZW5ndGg/dTpudWxsfSxZLnByb3RvdHlwZS5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dCUzMi0xO2U8PXRoaXMub3B0aW9ucy5tYXhab29tOyl7dmFyIHI9dGhpcy5nZXRDaGlsZHJlbih0KTtpZihlKyssMSE9PXIubGVuZ3RoKWJyZWFrO3Q9clswXS5wcm9wZXJ0aWVzLmNsdXN0ZXJfaWR9cmV0dXJuIGV9LFkucHJvdG90eXBlLl9hcHBlbmRMZWF2ZXM9ZnVuY3Rpb24odCxlLHIsbixhKXtmb3IodmFyIGk9MCxvPXRoaXMuZ2V0Q2hpbGRyZW4oZSk7aTxvLmxlbmd0aDtpKz0xKXt2YXIgcz1vW2ldLGw9cy5wcm9wZXJ0aWVzO2lmKGwmJmwuY2x1c3Rlcj9hK2wucG9pbnRfY291bnQ8PW4/YSs9bC5wb2ludF9jb3VudDphPXRoaXMuX2FwcGVuZExlYXZlcyh0LGwuY2x1c3Rlcl9pZCxyLG4sYSk6YTxuP2ErKzp0LnB1c2gocyksdC5sZW5ndGg9PT1yKWJyZWFrfXJldHVybiBhfSxZLnByb3RvdHlwZS5fYWRkVGlsZUZlYXR1cmVzPWZ1bmN0aW9uKHQsZSxyLG4sYSxpKXtmb3IodmFyIG89MCxzPXQ7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1lW3Nbb11dLGM9e3R5cGU6MSxnZW9tZXRyeTpbW01hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCoobC54KmEtcikpLE1hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCoobC55KmEtbikpXV0sdGFnczpsLm51bVBvaW50cz9KKGwpOnRoaXMucG9pbnRzW2wuaW5kZXhdLnByb3BlcnRpZXN9LHU9bC5udW1Qb2ludHM/bC5pZDp0aGlzLnBvaW50c1tsLmluZGV4XS5pZDt2b2lkIDAhPT11JiYoYy5pZD11KSxpLmZlYXR1cmVzLnB1c2goYyl9fSxZLnByb3RvdHlwZS5fbGltaXRab29tPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCh0aGlzLm9wdGlvbnMubWluWm9vbSxNYXRoLm1pbih0LHRoaXMub3B0aW9ucy5tYXhab29tKzEpKX0sWS5wcm90b3R5cGUuX2NsdXN0ZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj10aGlzLm9wdGlvbnMsYT1uLnJhZGl1cyxpPW4uZXh0ZW50LG89bi5yZWR1Y2Uscz1hLyhpKk1hdGgucG93KDIsZSkpLGw9MDtsPHQubGVuZ3RoO2wrKyl7dmFyIGM9dFtsXTtpZighKGMuem9vbTw9ZSkpe2Muem9vbT1lO2Zvcih2YXIgdT10aGlzLnRyZWVzW2UrMV0saD11LndpdGhpbihjLngsYy55LHMpLGY9Yy5udW1Qb2ludHN8fDEscD1jLngqZixkPWMueSpmLGc9byYmZj4xP3RoaXMuX21hcChjLCEwKTpudWxsLHY9KGw8PDUpKyhlKzEpLG09MCx5PWg7bTx5Lmxlbmd0aDttKz0xKXt2YXIgeD15W21dLGI9dS5wb2ludHNbeF07aWYoIShiLnpvb208PWUpKXtiLnpvb209ZTt2YXIgXz1iLm51bVBvaW50c3x8MTtwKz1iLngqXyxkKz1iLnkqXyxmKz1fLGIucGFyZW50SWQ9dixvJiYoZ3x8KGc9dGhpcy5fbWFwKGMsITApKSxvKGcsdGhpcy5fbWFwKGIpKSl9fTE9PT1mP3IucHVzaChjKTooYy5wYXJlbnRJZD12LHIucHVzaChXKHAvZixkL2YsdixmLGcpKSl9fXJldHVybiByfSxZLnByb3RvdHlwZS5fbWFwPWZ1bmN0aW9uKHQsZSl7aWYodC5udW1Qb2ludHMpcmV0dXJuIGU/JCh7fSx0LnByb3BlcnRpZXMpOnQucHJvcGVydGllczt2YXIgcj10aGlzLnBvaW50c1t0LmluZGV4XS5wcm9wZXJ0aWVzLG49dGhpcy5vcHRpb25zLm1hcChyKTtyZXR1cm4gZSYmbj09PXI/JCh7fSxuKTpufSxBdC5wcm90b3R5cGUub3B0aW9ucz17bWF4Wm9vbToxNCxpbmRleE1heFpvb206NSxpbmRleE1heFBvaW50czoxZTUsdG9sZXJhbmNlOjMsZXh0ZW50OjQwOTYsYnVmZmVyOjY0LGxpbmVNZXRyaWNzOiExLHByb21vdGVJZDpudWxsLGdlbmVyYXRlSWQ6ITEsZGVidWc6MH0sQXQucHJvdG90eXBlLnNwbGl0VGlsZT1mdW5jdGlvbih0LGUscixuLGEsaSxvKXtmb3IodmFyIHM9W3QsZSxyLG5dLGw9dGhpcy5vcHRpb25zLGM9bC5kZWJ1ZztzLmxlbmd0aDspe249cy5wb3AoKSxyPXMucG9wKCksZT1zLnBvcCgpLHQ9cy5wb3AoKTt2YXIgdT0xPDxlLGg9U3QoZSxyLG4pLGY9dGhpcy50aWxlc1toXTtpZighZiYmKGM+MSYmY29uc29sZS50aW1lKCJjcmVhdGlvbiIpLGY9dGhpcy50aWxlc1toXT1rdCh0LGUscixuLGwpLHRoaXMudGlsZUNvb3Jkcy5wdXNoKHt6OmUseDpyLHk6bn0pLGMpKXtjPjEmJihjb25zb2xlLmxvZygidGlsZSB6JWQtJWQtJWQgKGZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCwgc2ltcGxpZmllZDogJWQpIixlLHIsbixmLm51bUZlYXR1cmVzLGYubnVtUG9pbnRzLGYubnVtU2ltcGxpZmllZCksY29uc29sZS50aW1lRW5kKCJjcmVhdGlvbiIpKTt2YXIgcD0ieiIrZTt0aGlzLnN0YXRzW3BdPSh0aGlzLnN0YXRzW3BdfHwwKSsxLHRoaXMudG90YWwrK31pZihmLnNvdXJjZT10LGEpe2lmKGU9PT1sLm1heFpvb218fGU9PT1hKWNvbnRpbnVlO3ZhciBkPTE8PGEtZTtpZihyIT09TWF0aC5mbG9vcihpL2QpfHxuIT09TWF0aC5mbG9vcihvL2QpKWNvbnRpbnVlfWVsc2UgaWYoZT09PWwuaW5kZXhNYXhab29tfHxmLm51bVBvaW50czw9bC5pbmRleE1heFBvaW50cyljb250aW51ZTtpZihmLnNvdXJjZT1udWxsLDAhPT10Lmxlbmd0aCl7Yz4xJiZjb25zb2xlLnRpbWUoImNsaXBwaW5nIik7dmFyIGcsdixtLHkseCxiLF89LjUqbC5idWZmZXIvbC5leHRlbnQsdz0uNS1fLGs9LjUrXyxUPTErXztnPXY9bT15PW51bGwseD1odCh0LHUsci1fLHIraywwLGYubWluWCxmLm1heFgsbCksYj1odCh0LHUscit3LHIrVCwwLGYubWluWCxmLm1heFgsbCksdD1udWxsLHgmJihnPWh0KHgsdSxuLV8sbitrLDEsZi5taW5ZLGYubWF4WSxsKSx2PWh0KHgsdSxuK3csbitULDEsZi5taW5ZLGYubWF4WSxsKSx4PW51bGwpLGImJihtPWh0KGIsdSxuLV8sbitrLDEsZi5taW5ZLGYubWF4WSxsKSx5PWh0KGIsdSxuK3csbitULDEsZi5taW5ZLGYubWF4WSxsKSxiPW51bGwpLGM+MSYmY29uc29sZS50aW1lRW5kKCJjbGlwcGluZyIpLHMucHVzaChnfHxbXSxlKzEsMipyLDIqbikscy5wdXNoKHZ8fFtdLGUrMSwyKnIsMipuKzEpLHMucHVzaChtfHxbXSxlKzEsMipyKzEsMipuKSxzLnB1c2goeXx8W10sZSsxLDIqcisxLDIqbisxKX19fSxBdC5wcm90b3R5cGUuZ2V0VGlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5vcHRpb25zLGE9bi5leHRlbnQsaT1uLmRlYnVnO2lmKHQ8MHx8dD4yNClyZXR1cm4gbnVsbDt2YXIgbz0xPDx0LHM9U3QodCxlPShlJW8rbyklbyxyKTtpZih0aGlzLnRpbGVzW3NdKXJldHVybiBfdCh0aGlzLnRpbGVzW3NdLGEpO2k+MSYmY29uc29sZS5sb2coImRyaWxsaW5nIGRvd24gdG8geiVkLSVkLSVkIix0LGUscik7Zm9yKHZhciBsLGM9dCx1PWUsaD1yOyFsJiZjPjA7KWMtLSx1PU1hdGguZmxvb3IodS8yKSxoPU1hdGguZmxvb3IoaC8yKSxsPXRoaXMudGlsZXNbU3QoYyx1LGgpXTtyZXR1cm4gbCYmbC5zb3VyY2U/KGk+MSYmY29uc29sZS5sb2coImZvdW5kIHBhcmVudCB0aWxlIHolZC0lZC0lZCIsYyx1LGgpLGk+MSYmY29uc29sZS50aW1lKCJkcmlsbGluZyBkb3duIiksdGhpcy5zcGxpdFRpbGUobC5zb3VyY2UsYyx1LGgsdCxlLHIpLGk+MSYmY29uc29sZS50aW1lRW5kKCJkcmlsbGluZyBkb3duIiksdGhpcy50aWxlc1tzXT9fdCh0aGlzLnRpbGVzW3NdLGEpOm51bGwpOm51bGx9O3ZhciBMdD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscixuKXtlLmNhbGwodGhpcyx0LHIsRXQpLG4mJih0aGlzLmxvYWRHZW9KU09OPW4pfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuX3BlbmRpbmdDYWxsYmFjayYmdGhpcy5fcGVuZGluZ0NhbGxiYWNrKG51bGwse2FiYW5kb25lZDohMH0pLHRoaXMuX3BlbmRpbmdDYWxsYmFjaz1lLHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcz10LHRoaXMuX3N0YXRlJiYiSWRsZSIhPT10aGlzLl9zdGF0ZT90aGlzLl9zdGF0ZT0iTmVlZHNMb2FkRGF0YSI6KHRoaXMuX3N0YXRlPSJDb2FsZXNjaW5nIix0aGlzLl9sb2FkRGF0YSgpKX0sci5wcm90b3R5cGUuX2xvYWREYXRhPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLl9wZW5kaW5nQ2FsbGJhY2smJnRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcyl7dmFyIHI9dGhpcy5fcGVuZGluZ0NhbGxiYWNrLG49dGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zO2RlbGV0ZSB0aGlzLl9wZW5kaW5nQ2FsbGJhY2ssZGVsZXRlIHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtczt2YXIgYT0hIShuJiZuLnJlcXVlc3QmJm4ucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcpJiZuZXcgbC5QZXJmb3JtYW5jZShuLnJlcXVlc3QpO3RoaXMubG9hZEdlb0pTT04obixmdW5jdGlvbihpLG8pe2lmKGl8fCFvKXJldHVybiByKGkpO2lmKCJvYmplY3QiIT10eXBlb2YgbylyZXR1cm4gcihuZXcgRXJyb3IoIklucHV0IGRhdGEgZ2l2ZW4gdG8gJyIrbi5zb3VyY2UrIicgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIikpOyFmdW5jdGlvbiB0KGUscil7c3dpdGNoKGUmJmUudHlwZXx8bnVsbCl7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6cmV0dXJuIGUuZmVhdHVyZXM9ZS5mZWF0dXJlcy5tYXAoeSh0LHIpKSxlO2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpyZXR1cm4gZS5nZW9tZXRyaWVzPWUuZ2VvbWV0cmllcy5tYXAoeSh0LHIpKSxlO2Nhc2UiRmVhdHVyZSI6cmV0dXJuIGUuZ2VvbWV0cnk9dChlLmdlb21ldHJ5LHIpLGU7Y2FzZSJQb2x5Z29uIjpjYXNlIk11bHRpUG9seWdvbiI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIlBvbHlnb24iPT09dC50eXBlP3QuY29vcmRpbmF0ZXM9eCh0LmNvb3JkaW5hdGVzLGUpOiJNdWx0aVBvbHlnb24iPT09dC50eXBlJiYodC5jb29yZGluYXRlcz10LmNvb3JkaW5hdGVzLm1hcCh5KHgsZSkpKSx0fShlLHIpO2RlZmF1bHQ6cmV0dXJuIGV9fShvLCEwKTt0cnl7ZS5fZ2VvSlNPTkluZGV4PW4uY2x1c3Rlcj9uZXcgWShmdW5jdGlvbihlKXt2YXIgcj1lLnN1cGVyY2x1c3Rlck9wdGlvbnMsbj1lLmNsdXN0ZXJQcm9wZXJ0aWVzO2lmKCFufHwhcilyZXR1cm4gcjtmb3IodmFyIGE9e30saT17fSxvPXthY2N1bXVsYXRlZDpudWxsLHpvb206MH0scz17cHJvcGVydGllczpudWxsfSxsPU9iamVjdC5rZXlzKG4pLGM9MCx1PWw7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdLGY9bltoXSxwPWZbMF0sZD1mWzFdLGc9dC5jcmVhdGVFeHByZXNzaW9uKGQpLHY9dC5jcmVhdGVFeHByZXNzaW9uKCJzdHJpbmciPT10eXBlb2YgcD9bcCxbImFjY3VtdWxhdGVkIl0sWyJnZXQiLGhdXTpwKTthW2hdPWcudmFsdWUsaVtoXT12LnZhbHVlfXJldHVybiByLm1hcD1mdW5jdGlvbih0KXtzLnByb3BlcnRpZXM9dDtmb3IodmFyIGU9e30scj0wLG49bDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07ZVtpXT1hW2ldLmV2YWx1YXRlKG8scyl9cmV0dXJuIGV9LHIucmVkdWNlPWZ1bmN0aW9uKHQsZSl7cy5wcm9wZXJ0aWVzPWU7Zm9yKHZhciByPTAsbj1sO3I8bi5sZW5ndGg7cis9MSl7dmFyIGE9bltyXTtvLmFjY3VtdWxhdGVkPXRbYV0sdFthXT1pW2FdLmV2YWx1YXRlKG8scyl9fSxyfShuKSkubG9hZChvLmZlYXR1cmVzKTpuZXcgQXQobyxuLmdlb2pzb25WdE9wdGlvbnMpfWNhdGNoKGkpe3JldHVybiByKGkpfWUubG9hZGVkPXt9O3ZhciBzPXt9O2lmKGEpe3ZhciBsPWEuZmluaXNoKCk7bCYmKHMucmVzb3VyY2VUaW1pbmc9e30scy5yZXNvdXJjZVRpbWluZ1tuLnNvdXJjZV09SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsKSkpfXIobnVsbCxzKX0pfX0sci5wcm90b3R5cGUuY29hbGVzY2U9ZnVuY3Rpb24oKXsiQ29hbGVzY2luZyI9PT10aGlzLl9zdGF0ZT90aGlzLl9zdGF0ZT0iSWRsZSI6Ik5lZWRzTG9hZERhdGEiPT09dGhpcy5fc3RhdGUmJih0aGlzLl9zdGF0ZT0iQ29hbGVzY2luZyIsdGhpcy5fbG9hZERhdGEoKSl9LHIucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLmxvYWRlZCxhPXQudWlkO3JldHVybiBuJiZuW2FdP2UucHJvdG90eXBlLnJlbG9hZFRpbGUuY2FsbCh0aGlzLHQscik6dGhpcy5sb2FkVGlsZSh0LHIpfSxyLnByb3RvdHlwZS5sb2FkR2VvSlNPTj1mdW5jdGlvbihlLHIpe2lmKGUucmVxdWVzdCl0LmdldEpTT04oZS5yZXF1ZXN0LHIpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBlLmRhdGEpcmV0dXJuIHIobmV3IEVycm9yKCJJbnB1dCBkYXRhIGdpdmVuIHRvICciK2Uuc291cmNlKyInIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpKTt0cnl7cmV0dXJuIHIobnVsbCxKU09OLnBhcnNlKGUuZGF0YSkpfWNhdGNoKHQpe3JldHVybiByKG5ldyBFcnJvcigiSW5wdXQgZGF0YSBnaXZlbiB0byAnIitlLnNvdXJjZSsiJyBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4iKSl9fX0sci5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCx7YWJhbmRvbmVkOiEwfSksZSgpfSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbT1mdW5jdGlvbih0LGUpe2UobnVsbCx0aGlzLl9nZW9KU09OSW5kZXguZ2V0Q2x1c3RlckV4cGFuc2lvblpvb20odC5jbHVzdGVySWQpKX0sci5wcm90b3R5cGUuZ2V0Q2x1c3RlckNoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7ZShudWxsLHRoaXMuX2dlb0pTT05JbmRleC5nZXRDaGlsZHJlbih0LmNsdXN0ZXJJZCkpfSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyTGVhdmVzPWZ1bmN0aW9uKHQsZSl7ZShudWxsLHRoaXMuX2dlb0pTT05JbmRleC5nZXRMZWF2ZXModC5jbHVzdGVySWQsdC5saW1pdCx0Lm9mZnNldCkpfSxyfShoKSxDdD1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3RoaXMuc2VsZj1lLHRoaXMuYWN0b3I9bmV3IHQuQWN0b3IoZSx0aGlzKSx0aGlzLmxheWVySW5kZXhlcz17fSx0aGlzLndvcmtlclNvdXJjZVR5cGVzPXt2ZWN0b3I6aCxnZW9qc29uOkx0fSx0aGlzLndvcmtlclNvdXJjZXM9e30sdGhpcy5kZW1Xb3JrZXJTb3VyY2VzPXt9LHRoaXMuc2VsZi5yZWdpc3RlcldvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUpe2lmKHIud29ya2VyU291cmNlVHlwZXNbdF0pdGhyb3cgbmV3IEVycm9yKCdXb3JrZXIgc291cmNlIHdpdGggbmFtZSAiJyt0KyciIGFscmVhZHkgcmVnaXN0ZXJlZC4nKTtyLndvcmtlclNvdXJjZVR5cGVzW3RdPWV9LHRoaXMuc2VsZi5yZWdpc3RlclJUTFRleHRQbHVnaW49ZnVuY3Rpb24oZSl7aWYodC5wbHVnaW4uaXNMb2FkZWQoKSl0aHJvdyBuZXcgRXJyb3IoIlJUTCB0ZXh0IHBsdWdpbiBhbHJlYWR5IHJlZ2lzdGVyZWQuIik7dC5wbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nPWUuYXBwbHlBcmFiaWNTaGFwaW5nLHQucGx1Z2luLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dD1lLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dCx0LnBsdWdpbi5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ9ZS5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHR9fTtyZXR1cm4gQ3QucHJvdG90eXBlLnNldFJlZmVycmVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWZlcnJlcj1lfSxDdC5wcm90b3R5cGUuc2V0TGF5ZXJzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldExheWVySW5kZXgodCkucmVwbGFjZShlKSxyKCl9LEN0LnByb3RvdHlwZS51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0TGF5ZXJJbmRleCh0KS51cGRhdGUoZS5sYXllcnMsZS5yZW1vdmVkSWRzKSxyKCl9LEN0LnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRXb3JrZXJTb3VyY2UodCxlLnR5cGUsZS5zb3VyY2UpLmxvYWRUaWxlKGUscil9LEN0LnByb3RvdHlwZS5sb2FkREVNVGlsZT1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRERU1Xb3JrZXJTb3VyY2UodCxlLnNvdXJjZSkubG9hZFRpbGUoZSxyKX0sQ3QucHJvdG90eXBlLnJlbG9hZFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5yZWxvYWRUaWxlKGUscil9LEN0LnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5hYm9ydFRpbGUoZSxyKX0sQ3QucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5yZW1vdmVUaWxlKGUscil9LEN0LnByb3RvdHlwZS5yZW1vdmVERU1UaWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy5nZXRERU1Xb3JrZXJTb3VyY2UodCxlLnNvdXJjZSkucmVtb3ZlVGlsZShlKX0sQ3QucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy53b3JrZXJTb3VyY2VzW3RdJiZ0aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXSYmdGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV1bZS5zb3VyY2VdKXt2YXIgbj10aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXVtlLnNvdXJjZV07ZGVsZXRlIHRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdW2Uuc291cmNlXSx2b2lkIDAhPT1uLnJlbW92ZVNvdXJjZT9uLnJlbW92ZVNvdXJjZShlLHIpOnIoKX19LEN0LnByb3RvdHlwZS5sb2FkV29ya2VyU291cmNlPWZ1bmN0aW9uKHQsZSxyKXt0cnl7dGhpcy5zZWxmLmltcG9ydFNjcmlwdHMoZS51cmwpLHIoKX1jYXRjaCh0KXtyKHQudG9TdHJpbmcoKSl9fSxDdC5wcm90b3R5cGUubG9hZFJUTFRleHRQbHVnaW49ZnVuY3Rpb24oZSxyLG4pe3RyeXt0LnBsdWdpbi5pc0xvYWRlZCgpfHwodGhpcy5zZWxmLmltcG9ydFNjcmlwdHMociksbih0LnBsdWdpbi5pc0xvYWRlZCgpP251bGw6bmV3IEVycm9yKCJSVEwgVGV4dCBQbHVnaW4gZmFpbGVkIHRvIGltcG9ydCBzY3JpcHRzIGZyb20gIityKSkpfWNhdGNoKHQpe24odC50b1N0cmluZygpKX19LEN0LnByb3RvdHlwZS5nZXRMYXllckluZGV4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGF5ZXJJbmRleGVzW3RdO3JldHVybiBlfHwoZT10aGlzLmxheWVySW5kZXhlc1t0XT1uZXcgbiksZX0sQ3QucHJvdG90eXBlLmdldFdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcztpZih0aGlzLndvcmtlclNvdXJjZXNbdF18fCh0aGlzLndvcmtlclNvdXJjZXNbdF09e30pLHRoaXMud29ya2VyU291cmNlc1t0XVtlXXx8KHRoaXMud29ya2VyU291cmNlc1t0XVtlXT17fSksIXRoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXSl7dmFyIGE9e3NlbmQ6ZnVuY3Rpb24oZSxyLGEpe24uYWN0b3Iuc2VuZChlLHIsYSx0KX19O3RoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXT1uZXcgdGhpcy53b3JrZXJTb3VyY2VUeXBlc1tlXShhLHRoaXMuZ2V0TGF5ZXJJbmRleCh0KSl9cmV0dXJuIHRoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXX0sQ3QucHJvdG90eXBlLmdldERFTVdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF18fCh0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF09e30pLHRoaXMuZGVtV29ya2VyU291cmNlc1t0XVtlXXx8KHRoaXMuZGVtV29ya2VyU291cmNlc1t0XVtlXT1uZXcgZiksdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdW2VdfSxDdC5wcm90b3R5cGUuZW5mb3JjZUNhY2hlU2l6ZUxpbWl0PWZ1bmN0aW9uKGUscil7dC5lbmZvcmNlQ2FjaGVTaXplTGltaXQocil9LCJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnZvaWQgMCE9PXQud2luZG93JiZ0LndpbmRvdyBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiYodC53aW5kb3cud29ya2VyPW5ldyBDdCh0LndpbmRvdykpLEN0fSksbigwLGZ1bmN0aW9uKHQpe3ZhciBlPXQuY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4hISgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmQXJyYXkucHJvdG90eXBlJiZBcnJheS5wcm90b3R5cGUuZXZlcnkmJkFycmF5LnByb3RvdHlwZS5maWx0ZXImJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoJiZBcnJheS5wcm90b3R5cGUuaW5kZXhPZiYmQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mJiZBcnJheS5wcm90b3R5cGUubWFwJiZBcnJheS5wcm90b3R5cGUuc29tZSYmQXJyYXkucHJvdG90eXBlLnJlZHVjZSYmQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0JiZBcnJheS5pc0FycmF5JiZGdW5jdGlvbi5wcm90b3R5cGUmJkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kJiZPYmplY3Qua2V5cyYmT2JqZWN0LmNyZWF0ZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmT2JqZWN0LmlzU2VhbGVkJiZPYmplY3QuaXNGcm96ZW4mJk9iamVjdC5pc0V4dGVuc2libGUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmRlZmluZVByb3BlcnRpZXMmJk9iamVjdC5zZWFsJiZPYmplY3QuZnJlZXplJiZPYmplY3QucHJldmVudEV4dGVuc2lvbnMmJiJKU09OImluIHdpbmRvdyYmInBhcnNlImluIEpTT04mJiJzdHJpbmdpZnkiaW4gSlNPTiYmZnVuY3Rpb24oKXtpZighKCJXb3JrZXIiaW4gd2luZG93JiYiQmxvYiJpbiB3aW5kb3cmJiJVUkwiaW4gd2luZG93KSlyZXR1cm4hMTt2YXIgdCxlLHI9bmV3IEJsb2IoWyIiXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pLG49VVJMLmNyZWF0ZU9iamVjdFVSTChyKTt0cnl7ZT1uZXcgV29ya2VyKG4pLHQ9ITB9Y2F0Y2goZSl7dD0hMX1yZXR1cm4gZSYmZS50ZXJtaW5hdGUoKSxVUkwucmV2b2tlT2JqZWN0VVJMKG4pLHR9KCkmJiJVaW50OENsYW1wZWRBcnJheSJpbiB3aW5kb3cmJkFycmF5QnVmZmVyLmlzVmlldyYmZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXJbdF0mJihyW3RdPWZ1bmN0aW9uKHQpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLG49T2JqZWN0LmNyZWF0ZShlLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMpO3JldHVybiBuLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9dCxyLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0P3IucHJvYmFibHlTdXBwb3J0c0NvbnRleHQoIndlYmdsIixuKXx8ci5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixuKTpyLnN1cHBvcnRzQ29udGV4dD9yLnN1cHBvcnRzQ29udGV4dCgid2ViZ2wiLG4pfHxyLnN1cHBvcnRzQ29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixuKTpyLmdldENvbnRleHQoIndlYmdsIixuKXx8ci5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLG4pfSh0KSksclt0XX0odCYmdC5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KSl9dC5leHBvcnRzP3QuZXhwb3J0cz1lOndpbmRvdyYmKHdpbmRvdy5tYXBib3hnbD13aW5kb3cubWFwYm94Z2x8fHt9LHdpbmRvdy5tYXBib3hnbC5zdXBwb3J0ZWQ9ZSk7dmFyIHI9e307ZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzPXthbnRpYWxpYXM6ITEsYWxwaGE6ITAsc3RlbmNpbDohMCxkZXB0aDohMH19KSxyPXtjcmVhdGU6ZnVuY3Rpb24oZSxyLG4pe3ZhciBhPXQud2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuIHZvaWQgMCE9PXImJihhLmNsYXNzTmFtZT1yKSxuJiZuLmFwcGVuZENoaWxkKGEpLGF9LGNyZWF0ZU5TOmZ1bmN0aW9uKGUscil7cmV0dXJuIHQud2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLHIpfX0sbj10LndpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU7ZnVuY3Rpb24gYSh0KXtpZighbilyZXR1cm4gdFswXTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdaW4gbilyZXR1cm4gdFtlXTtyZXR1cm4gdFswXX12YXIgaSxvPWEoWyJ1c2VyU2VsZWN0IiwiTW96VXNlclNlbGVjdCIsIldlYmtpdFVzZXJTZWxlY3QiLCJtc1VzZXJTZWxlY3QiXSk7ci5kaXNhYmxlRHJhZz1mdW5jdGlvbigpe24mJm8mJihpPW5bb10sbltvXT0ibm9uZSIpfSxyLmVuYWJsZURyYWc9ZnVuY3Rpb24oKXtuJiZvJiYobltvXT1pKX07dmFyIHM9YShbInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSJdKTtyLnNldFRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe3Quc3R5bGVbc109ZX07dmFyIGw9ITE7dHJ5e3ZhciBjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe2w9ITB9fSk7dC53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsYyxjKSx0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixjLGMpfWNhdGNoKHQpe2w9ITF9ci5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSwicGFzc2l2ZSJpbiBuJiZsP3QuYWRkRXZlbnRMaXN0ZW5lcihlLHIsbik6dC5hZGRFdmVudExpc3RlbmVyKGUscixuLmNhcHR1cmUpfSxyLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49e30pLCJwYXNzaXZlImluIG4mJmw/dC5yZW1vdmVFdmVudExpc3RlbmVyKGUscixuKTp0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLG4uY2FwdHVyZSl9O3ZhciB1PWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHQud2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix1LCEwKX07ZnVuY3Rpb24gaCh0KXt2YXIgZT10LnVzZXJJbWFnZTtyZXR1cm4hIShlJiZlLnJlbmRlciYmZS5yZW5kZXIoKSkmJih0LmRhdGEucmVwbGFjZShuZXcgVWludDhBcnJheShlLmRhdGEuYnVmZmVyKSksITApfXIuc3VwcHJlc3NDbGljaz1mdW5jdGlvbigpe3Qud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix1LCEwKSx0LndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHUsITApfSwwKX0sci5tb3VzZVBvcz1mdW5jdGlvbihlLHIpe3ZhciBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT10LndpbmRvdy5Ub3VjaEV2ZW50JiZyIGluc3RhbmNlb2YgdC53aW5kb3cuVG91Y2hFdmVudD9yLnRvdWNoZXNbMF06cjtyZXR1cm4gbmV3IHQuUG9pbnQoYS5jbGllbnRYLW4ubGVmdC1lLmNsaWVudExlZnQsYS5jbGllbnRZLW4udG9wLWUuY2xpZW50VG9wKX0sci50b3VjaFBvcz1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9W10saT0idG91Y2hlbmQiPT09ci50eXBlP3IuY2hhbmdlZFRvdWNoZXM6ci50b3VjaGVzLG89MDtvPGkubGVuZ3RoO28rKylhLnB1c2gobmV3IHQuUG9pbnQoaVtvXS5jbGllbnRYLW4ubGVmdC1lLmNsaWVudExlZnQsaVtvXS5jbGllbnRZLW4udG9wLWUuY2xpZW50VG9wKSk7cmV0dXJuIGF9LHIubW91c2VCdXR0b249ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXQud2luZG93Lkluc3RhbGxUcmlnZ2VyJiYyPT09ZS5idXR0b24mJmUuY3RybEtleSYmdC53aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiTUFDIik+PTA/MDplLmJ1dHRvbn0sci5yZW1vdmU9ZnVuY3Rpb24odCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9O3ZhciBmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtlLmNhbGwodGhpcyksdGhpcy5pbWFnZXM9e30sdGhpcy51cGRhdGVkSW1hZ2VzPXt9LHRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lPXt9LHRoaXMubG9hZGVkPSExLHRoaXMucmVxdWVzdG9ycz1bXSx0aGlzLnBhdHRlcm5zPXt9LHRoaXMuYXRsYXNJbWFnZT1uZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLmRpcnR5PSEwfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5pc0xvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvYWRlZH0sci5wcm90b3R5cGUuc2V0TG9hZGVkPWZ1bmN0aW9uKHQpe2lmKHRoaXMubG9hZGVkIT09dCYmKHRoaXMubG9hZGVkPXQsdCkpe2Zvcih2YXIgZT0wLHI9dGhpcy5yZXF1ZXN0b3JzO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxhPW4uaWRzLGk9bi5jYWxsYmFjazt0aGlzLl9ub3RpZnkoYSxpKX10aGlzLnJlcXVlc3RvcnM9W119fSxyLnByb3RvdHlwZS5nZXRJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbWFnZXNbdF19LHIucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKHQsZSl7dGhpcy5pbWFnZXNbdF09ZX0sci5wcm90b3R5cGUudXBkYXRlSW1hZ2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmltYWdlc1t0XTtlLnZlcnNpb249ci52ZXJzaW9uKzEsdGhpcy5pbWFnZXNbdF09ZSx0aGlzLnVwZGF0ZWRJbWFnZXNbdF09ITB9LHIucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1hZ2VzW3RdO2RlbGV0ZSB0aGlzLmltYWdlc1t0XSxkZWxldGUgdGhpcy5wYXR0ZXJuc1t0XSxlLnVzZXJJbWFnZSYmZS51c2VySW1hZ2Uub25SZW1vdmUmJmUudXNlckltYWdlLm9uUmVtb3ZlKCl9LHIucHJvdG90eXBlLmxpc3RJbWFnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5pbWFnZXMpfSxyLnByb3RvdHlwZS5nZXRJbWFnZXM9ZnVuY3Rpb24odCxlKXt2YXIgcj0hMDtpZighdGhpcy5pc0xvYWRlZCgpKWZvcih2YXIgbj0wLGE9dDtuPGEubGVuZ3RoO24rPTEpe3ZhciBpPWFbbl07dGhpcy5pbWFnZXNbaV18fChyPSExKX10aGlzLmlzTG9hZGVkKCl8fHI/dGhpcy5fbm90aWZ5KHQsZSk6dGhpcy5yZXF1ZXN0b3JzLnB1c2goe2lkczp0LGNhbGxiYWNrOmV9KX0sci5wcm90b3R5cGUuX25vdGlmeT1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj17fSxhPTAsaT1lO2E8aS5sZW5ndGg7YSs9MSl7dmFyIG89aVthXTt0aGlzLmltYWdlc1tvXXx8dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJzdHlsZWltYWdlbWlzc2luZyIse2lkOm99KSk7dmFyIHM9dGhpcy5pbWFnZXNbb107cz9uW29dPXtkYXRhOnMuZGF0YS5jbG9uZSgpLHBpeGVsUmF0aW86cy5waXhlbFJhdGlvLHNkZjpzLnNkZix2ZXJzaW9uOnMudmVyc2lvbixoYXNSZW5kZXJDYWxsYmFjazpCb29sZWFuKHMudXNlckltYWdlJiZzLnVzZXJJbWFnZS5yZW5kZXIpfTp0Lndhcm5PbmNlKCdJbWFnZSAiJytvKyciIGNvdWxkIG5vdCBiZSBsb2FkZWQuIFBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgYWRkZWQgdGhlIGltYWdlIHdpdGggbWFwLmFkZEltYWdlKCkgb3IgYSAic3ByaXRlIiBwcm9wZXJ0eSBpbiB5b3VyIHN0eWxlLiBZb3UgY2FuIHByb3ZpZGUgbWlzc2luZyBpbWFnZXMgYnkgbGlzdGVuaW5nIGZvciB0aGUgInN0eWxlaW1hZ2VtaXNzaW5nIiBtYXAgZXZlbnQuJyl9cihudWxsLG4pfSxyLnByb3RvdHlwZS5nZXRQaXhlbFNpemU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmF0bGFzSW1hZ2U7cmV0dXJue3dpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX0sci5wcm90b3R5cGUuZ2V0UGF0dGVybj1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnBhdHRlcm5zW2VdLG49dGhpcy5nZXRJbWFnZShlKTtpZighbilyZXR1cm4gbnVsbDtpZihyJiZyLnBvc2l0aW9uLnZlcnNpb249PT1uLnZlcnNpb24pcmV0dXJuIHIucG9zaXRpb247aWYocilyLnBvc2l0aW9uLnZlcnNpb249bi52ZXJzaW9uO2Vsc2V7dmFyIGE9e3c6bi5kYXRhLndpZHRoKzIsaDpuLmRhdGEuaGVpZ2h0KzIseDowLHk6MH0saT1uZXcgdC5JbWFnZVBvc2l0aW9uKGEsbik7dGhpcy5wYXR0ZXJuc1tlXT17YmluOmEscG9zaXRpb246aX19cmV0dXJuIHRoaXMuX3VwZGF0ZVBhdHRlcm5BdGxhcygpLHRoaXMucGF0dGVybnNbZV0ucG9zaXRpb259LHIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5nbDt0aGlzLmF0bGFzVGV4dHVyZT90aGlzLmRpcnR5JiYodGhpcy5hdGxhc1RleHR1cmUudXBkYXRlKHRoaXMuYXRsYXNJbWFnZSksdGhpcy5kaXJ0eT0hMSk6dGhpcy5hdGxhc1RleHR1cmU9bmV3IHQuVGV4dHVyZShlLHRoaXMuYXRsYXNJbWFnZSxyLlJHQkEpLHRoaXMuYXRsYXNUZXh0dXJlLmJpbmQoci5MSU5FQVIsci5DTEFNUF9UT19FREdFKX0sci5wcm90b3R5cGUuX3VwZGF0ZVBhdHRlcm5BdGxhcz1mdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0aGlzLnBhdHRlcm5zKWUucHVzaCh0aGlzLnBhdHRlcm5zW3JdLmJpbik7dmFyIG49dC5wb3RwYWNrKGUpLGE9bi53LGk9bi5oLG89dGhpcy5hdGxhc0ltYWdlO2Zvcih2YXIgcyBpbiBvLnJlc2l6ZSh7d2lkdGg6YXx8MSxoZWlnaHQ6aXx8MX0pLHRoaXMucGF0dGVybnMpe3ZhciBsPXRoaXMucGF0dGVybnNbc10uYmluLGM9bC54KzEsdT1sLnkrMSxoPXRoaXMuaW1hZ2VzW3NdLmRhdGEsZj1oLndpZHRoLHA9aC5oZWlnaHQ7dC5SR0JBSW1hZ2UuY29weShoLG8se3g6MCx5OjB9LHt4OmMseTp1fSx7d2lkdGg6ZixoZWlnaHQ6cH0pLHQuUkdCQUltYWdlLmNvcHkoaCxvLHt4OjAseTpwLTF9LHt4OmMseTp1LTF9LHt3aWR0aDpmLGhlaWdodDoxfSksdC5SR0JBSW1hZ2UuY29weShoLG8se3g6MCx5OjB9LHt4OmMseTp1K3B9LHt3aWR0aDpmLGhlaWdodDoxfSksdC5SR0JBSW1hZ2UuY29weShoLG8se3g6Zi0xLHk6MH0se3g6Yy0xLHk6dX0se3dpZHRoOjEsaGVpZ2h0OnB9KSx0LlJHQkFJbWFnZS5jb3B5KGgsbyx7eDowLHk6MH0se3g6YytmLHk6dX0se3dpZHRoOjEsaGVpZ2h0OnB9KX10aGlzLmRpcnR5PSEwfSxyLnByb3RvdHlwZS5iZWdpbkZyYW1lPWZ1bmN0aW9uKCl7dGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWU9e319LHIucHJvdG90eXBlLmRpc3BhdGNoUmVuZGVyQ2FsbGJhY2tzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07aWYoIXRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lW25dKXt0aGlzLmNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZVtuXT0hMDt2YXIgYT10aGlzLmltYWdlc1tuXTtoKGEpJiZ0aGlzLnVwZGF0ZUltYWdlKG4sYSl9fX0scn0odC5FdmVudGVkKSxwPXYsZD12LGc9MWUyMDtmdW5jdGlvbiB2KHQsZSxyLG4sYSxpKXt0aGlzLmZvbnRTaXplPXR8fDI0LHRoaXMuYnVmZmVyPXZvaWQgMD09PWU/MzplLHRoaXMuY3V0b2ZmPW58fC4yNSx0aGlzLmZvbnRGYW1pbHk9YXx8InNhbnMtc2VyaWYiLHRoaXMuZm9udFdlaWdodD1pfHwibm9ybWFsIix0aGlzLnJhZGl1cz1yfHw4O3ZhciBvPXRoaXMuc2l6ZT10aGlzLmZvbnRTaXplKzIqdGhpcy5idWZmZXI7dGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMuaGVpZ2h0PW8sdGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSx0aGlzLmN0eC5mb250PXRoaXMuZm9udFdlaWdodCsiICIrdGhpcy5mb250U2l6ZSsicHggIit0aGlzLmZvbnRGYW1pbHksdGhpcy5jdHgudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHRoaXMuY3R4LmZpbGxTdHlsZT0iYmxhY2siLHRoaXMuZ3JpZE91dGVyPW5ldyBGbG9hdDY0QXJyYXkobypvKSx0aGlzLmdyaWRJbm5lcj1uZXcgRmxvYXQ2NEFycmF5KG8qbyksdGhpcy5mPW5ldyBGbG9hdDY0QXJyYXkobyksdGhpcy5kPW5ldyBGbG9hdDY0QXJyYXkobyksdGhpcy56PW5ldyBGbG9hdDY0QXJyYXkobysxKSx0aGlzLnY9bmV3IEludDE2QXJyYXkobyksdGhpcy5taWRkbGU9TWF0aC5yb3VuZChvLzIqKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiR2Vja28vIik+PTA/MS4yOjEpKX1mdW5jdGlvbiBtKHQsZSxyLG4sYSxpLG8pe2Zvcih2YXIgcz0wO3M8ZTtzKyspe2Zvcih2YXIgbD0wO2w8cjtsKyspbltsXT10W2wqZStzXTtmb3IoeShuLGEsaSxvLHIpLGw9MDtsPHI7bCsrKXRbbCplK3NdPWFbbF19Zm9yKGw9MDtsPHI7bCsrKXtmb3Iocz0wO3M8ZTtzKyspbltzXT10W2wqZStzXTtmb3IoeShuLGEsaSxvLGUpLHM9MDtzPGU7cysrKXRbbCplK3NdPU1hdGguc3FydChhW3NdKX19ZnVuY3Rpb24geSh0LGUscixuLGEpe3JbMF09MCxuWzBdPS1nLG5bMV09K2c7Zm9yKHZhciBpPTEsbz0wO2k8YTtpKyspe2Zvcih2YXIgcz0odFtpXStpKmktKHRbcltvXV0rcltvXSpyW29dKSkvKDIqaS0yKnJbb10pO3M8PW5bb107KW8tLSxzPSh0W2ldK2kqaS0odFtyW29dXStyW29dKnJbb10pKS8oMippLTIqcltvXSk7clsrK29dPWksbltvXT1zLG5bbysxXT0rZ31mb3IoaT0wLG89MDtpPGE7aSsrKXtmb3IoO25bbysxXTxpOylvKys7ZVtpXT0oaS1yW29dKSooaS1yW29dKSt0W3Jbb11dfX12LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQpe3RoaXMuY3R4LmNsZWFyUmVjdCgwLDAsdGhpcy5zaXplLHRoaXMuc2l6ZSksdGhpcy5jdHguZmlsbFRleHQodCx0aGlzLmJ1ZmZlcix0aGlzLm1pZGRsZSk7Zm9yKHZhciBlPXRoaXMuY3R4LmdldEltYWdlRGF0YSgwLDAsdGhpcy5zaXplLHRoaXMuc2l6ZSkscj1uZXcgVWludDhDbGFtcGVkQXJyYXkodGhpcy5zaXplKnRoaXMuc2l6ZSksbj0wO248dGhpcy5zaXplKnRoaXMuc2l6ZTtuKyspe3ZhciBhPWUuZGF0YVs0Km4rM10vMjU1O3RoaXMuZ3JpZE91dGVyW25dPTE9PT1hPzA6MD09PWE/ZzpNYXRoLnBvdyhNYXRoLm1heCgwLC41LWEpLDIpLHRoaXMuZ3JpZElubmVyW25dPTE9PT1hP2c6MD09PWE/MDpNYXRoLnBvdyhNYXRoLm1heCgwLGEtLjUpLDIpfWZvcihtKHRoaXMuZ3JpZE91dGVyLHRoaXMuc2l6ZSx0aGlzLnNpemUsdGhpcy5mLHRoaXMuZCx0aGlzLnYsdGhpcy56KSxtKHRoaXMuZ3JpZElubmVyLHRoaXMuc2l6ZSx0aGlzLnNpemUsdGhpcy5mLHRoaXMuZCx0aGlzLnYsdGhpcy56KSxuPTA7bjx0aGlzLnNpemUqdGhpcy5zaXplO24rKyl7dmFyIGk9dGhpcy5ncmlkT3V0ZXJbbl0tdGhpcy5ncmlkSW5uZXJbbl07cltuXT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI1NS0yNTUqKGkvdGhpcy5yYWRpdXMrdGhpcy5jdXRvZmYpKSkpfXJldHVybiByfSxwLmRlZmF1bHQ9ZDt2YXIgeD1mdW5jdGlvbih0LGUpe3RoaXMucmVxdWVzdE1hbmFnZXI9dCx0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1lLHRoaXMuZW50cmllcz17fX07eC5wcm90b3R5cGUuc2V0VVJMPWZ1bmN0aW9uKHQpe3RoaXMudXJsPXR9LHgucHJvdG90eXBlLmdldEdseXBocz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsYT1bXTtmb3IodmFyIGkgaW4gZSlmb3IodmFyIG89MCxzPWVbaV07bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO2EucHVzaCh7c3RhY2s6aSxpZDpsfSl9dC5hc3luY0FsbChhLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGFjayxhPXQuaWQsaT1uLmVudHJpZXNbcl07aXx8KGk9bi5lbnRyaWVzW3JdPXtnbHlwaHM6e30scmVxdWVzdHM6e319KTt2YXIgbz1pLmdseXBoc1thXTtpZih2b2lkIDA9PT1vKXtpZihvPW4uX3RpbnlTREYoaSxyLGEpKXJldHVybiBpLmdseXBoc1thXT1vLHZvaWQgZShudWxsLHtzdGFjazpyLGlkOmEsZ2x5cGg6b30pO3ZhciBzPU1hdGguZmxvb3IoYS8yNTYpO2lmKDI1NipzPjY1NTM1KWUobmV3IEVycm9yKCJnbHlwaHMgPiA2NTUzNSBub3Qgc3VwcG9ydGVkIikpO2Vsc2V7dmFyIGw9aS5yZXF1ZXN0c1tzXTtsfHwobD1pLnJlcXVlc3RzW3NdPVtdLHgubG9hZEdseXBoUmFuZ2UocixzLG4udXJsLG4ucmVxdWVzdE1hbmFnZXIsZnVuY3Rpb24odCxlKXtpZihlKWZvcih2YXIgciBpbiBlKW4uX2RvZXNDaGFyU3VwcG9ydExvY2FsR2x5cGgoK3IpfHwoaS5nbHlwaHNbK3JdPWVbK3JdKTtmb3IodmFyIGE9MCxvPWw7YTxvLmxlbmd0aDthKz0xKSgwLG9bYV0pKHQsZSk7ZGVsZXRlIGkucmVxdWVzdHNbc119KSksbC5wdXNoKGZ1bmN0aW9uKHQsbil7dD9lKHQpOm4mJmUobnVsbCx7c3RhY2s6cixpZDphLGdseXBoOm5bYV18fG51bGx9KX0pfX1lbHNlIGUobnVsbCx7c3RhY2s6cixpZDphLGdseXBoOm99KX0sZnVuY3Rpb24odCxlKXtpZih0KXIodCk7ZWxzZSBpZihlKXtmb3IodmFyIG49e30sYT0wLGk9ZTthPGkubGVuZ3RoO2ErPTEpe3ZhciBvPWlbYV0scz1vLnN0YWNrLGw9by5pZCxjPW8uZ2x5cGg7KG5bc118fChuW3NdPXt9KSlbbF09YyYme2lkOmMuaWQsYml0bWFwOmMuYml0bWFwLmNsb25lKCksbWV0cmljczpjLm1ldHJpY3N9fXIobnVsbCxuKX19KX0seC5wcm90b3R5cGUuX2RvZXNDaGFyU3VwcG9ydExvY2FsR2x5cGg9ZnVuY3Rpb24oZSl7cmV0dXJuISF0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSYmKHQuaXNDaGFyWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIl0oZSl8fHQuaXNDaGFyWyJIYW5ndWwgU3lsbGFibGVzIl0oZSl8fHQuaXNDaGFyLkhpcmFnYW5hKGUpfHx0LmlzQ2hhci5LYXRha2FuYShlKSl9LHgucHJvdG90eXBlLl90aW55U0RGPWZ1bmN0aW9uKGUscixuKXt2YXIgYT10aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTtpZihhJiZ0aGlzLl9kb2VzQ2hhclN1cHBvcnRMb2NhbEdseXBoKG4pKXt2YXIgaT1lLnRpbnlTREY7aWYoIWkpe3ZhciBvPSI0MDAiOy9ib2xkL2kudGVzdChyKT9vPSI5MDAiOi9tZWRpdW0vaS50ZXN0KHIpP289IjUwMCI6L2xpZ2h0L2kudGVzdChyKSYmKG89IjIwMCIpLGk9ZS50aW55U0RGPW5ldyB4LlRpbnlTREYoMjQsMyw4LC4yNSxhLG8pfXJldHVybntpZDpuLGJpdG1hcDpuZXcgdC5BbHBoYUltYWdlKHt3aWR0aDozMCxoZWlnaHQ6MzB9LGkuZHJhdyhTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKSksbWV0cmljczp7d2lkdGg6MjQsaGVpZ2h0OjI0LGxlZnQ6MCx0b3A6LTgsYWR2YW5jZToyNH19fX0seC5sb2FkR2x5cGhSYW5nZT1mdW5jdGlvbihlLHIsbixhLGkpe3ZhciBvPTI1NipyLHM9bysyNTUsbD1hLnRyYW5zZm9ybVJlcXVlc3QoYS5ub3JtYWxpemVHbHlwaHNVUkwobikucmVwbGFjZSgie2ZvbnRzdGFja30iLGUpLnJlcGxhY2UoIntyYW5nZX0iLG8rIi0iK3MpLHQuUmVzb3VyY2VUeXBlLkdseXBocyk7dC5nZXRBcnJheUJ1ZmZlcihsLGZ1bmN0aW9uKGUscil7aWYoZSlpKGUpO2Vsc2UgaWYocil7Zm9yKHZhciBuPXt9LGE9MCxvPXQucGFyc2VHbHlwaFBCRihyKTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07bltzLmlkXT1zfWkobnVsbCxuKX19KX0seC5UaW55U0RGPXA7dmFyIGI9ZnVuY3Rpb24oKXt0aGlzLnNwZWNpZmljYXRpb249dC5zdHlsZVNwZWMubGlnaHQucG9zaXRpb259O2IucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5zcGhlcmljYWxUb0NhcnRlc2lhbihlLmV4cHJlc3Npb24uZXZhbHVhdGUocikpfSxiLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihlLHIsbil7cmV0dXJue3g6dC5udW1iZXIoZS54LHIueCxuKSx5OnQubnVtYmVyKGUueSxyLnksbiksejp0Lm51bWJlcihlLnosci56LG4pfX07dmFyIF89bmV3IHQuUHJvcGVydGllcyh7YW5jaG9yOm5ldyB0LkRhdGFDb25zdGFudFByb3BlcnR5KHQuc3R5bGVTcGVjLmxpZ2h0LmFuY2hvcikscG9zaXRpb246bmV3IGIsY29sb3I6bmV3IHQuRGF0YUNvbnN0YW50UHJvcGVydHkodC5zdHlsZVNwZWMubGlnaHQuY29sb3IpLGludGVuc2l0eTpuZXcgdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eSh0LnN0eWxlU3BlYy5saWdodC5pbnRlbnNpdHkpfSksdz1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIpe2UuY2FsbCh0aGlzKSx0aGlzLl90cmFuc2l0aW9uYWJsZT1uZXcgdC5UcmFuc2l0aW9uYWJsZShfKSx0aGlzLnNldExpZ2h0KHIpLHRoaXMuX3RyYW5zaXRpb25pbmc9dGhpcy5fdHJhbnNpdGlvbmFibGUudW50cmFuc2l0aW9uZWQoKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuZ2V0TGlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmFibGUuc2VyaWFsaXplKCl9LHIucHJvdG90eXBlLnNldExpZ2h0PWZ1bmN0aW9uKGUscil7aWYodm9pZCAwPT09ciYmKHI9e30pLCF0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlTGlnaHQsZSxyKSlmb3IodmFyIG4gaW4gZSl7dmFyIGE9ZVtuXTt0LmVuZHNXaXRoKG4sIi10cmFuc2l0aW9uIik/dGhpcy5fdHJhbnNpdGlvbmFibGUuc2V0VHJhbnNpdGlvbihuLnNsaWNlKDAsLSItdHJhbnNpdGlvbiIubGVuZ3RoKSxhKTp0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRWYWx1ZShuLGEpfX0sci5wcm90b3R5cGUudXBkYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7dGhpcy5fdHJhbnNpdGlvbmluZz10aGlzLl90cmFuc2l0aW9uYWJsZS50cmFuc2l0aW9uZWQodCx0aGlzLl90cmFuc2l0aW9uaW5nKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uaW5nLmhhc1RyYW5zaXRpb24oKX0sci5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24odCl7dGhpcy5wcm9wZXJ0aWVzPXRoaXMuX3RyYW5zaXRpb25pbmcucG9zc2libHlFdmFsdWF0ZSh0KX0sci5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4oIW58fCExIT09bi52YWxpZGF0ZSkmJnQuZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcyxlLmNhbGwodC52YWxpZGF0ZVN0eWxlLHQuZXh0ZW5kKHt2YWx1ZTpyLHN0eWxlOntnbHlwaHM6ITAsc3ByaXRlOiEwfSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9KSkpfSxyfSh0LkV2ZW50ZWQpLGs9ZnVuY3Rpb24odCxlKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLm5leHRSb3c9MCx0aGlzLmJ5dGVzPTQsdGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHRoaXMud2lkdGgqdGhpcy5oZWlnaHQqdGhpcy5ieXRlcyksdGhpcy5wb3NpdGlvbnM9e319O2sucHJvdG90eXBlLmdldERhc2g9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmpvaW4oIiwiKStTdHJpbmcoZSk7cmV0dXJuIHRoaXMucG9zaXRpb25zW3JdfHwodGhpcy5wb3NpdGlvbnNbcl09dGhpcy5hZGREYXNoKHQsZSkpLHRoaXMucG9zaXRpb25zW3JdfSxrLnByb3RvdHlwZS5hZGREYXNoPWZ1bmN0aW9uKGUscil7dmFyIG49cj83OjAsYT0yKm4rMTtpZih0aGlzLm5leHRSb3crYT50aGlzLmhlaWdodClyZXR1cm4gdC53YXJuT25jZSgiTGluZUF0bGFzIG91dCBvZiBzcGFjZSIpLG51bGw7Zm9yKHZhciBpPTAsbz0wO288ZS5sZW5ndGg7bysrKWkrPWVbb107Zm9yKHZhciBzPXRoaXMud2lkdGgvaSxsPXMvMixjPWUubGVuZ3RoJTI9PTEsdT0tbjt1PD1uO3UrKylmb3IodmFyIGg9dGhpcy5uZXh0Um93K24rdSxmPXRoaXMud2lkdGgqaCxwPWM/LWVbZS5sZW5ndGgtMV06MCxkPWVbMF0sZz0xLHY9MDt2PHRoaXMud2lkdGg7disrKXtmb3IoO2Q8di9zOylwPWQsZCs9ZVtnXSxjJiZnPT09ZS5sZW5ndGgtMSYmKGQrPWVbMF0pLGcrKzt2YXIgbT1NYXRoLmFicyh2LXAqcykseT1NYXRoLmFicyh2LWQqcykseD1NYXRoLm1pbihtLHkpLGI9ZyUyPT0xLF89dm9pZCAwO2lmKHIpe3ZhciB3PW4/dS9uKihsKzEpOjA7aWYoYil7dmFyIGs9bC1NYXRoLmFicyh3KTtfPU1hdGguc3FydCh4KngrayprKX1lbHNlIF89bC1NYXRoLnNxcnQoeCp4K3cqdyl9ZWxzZSBfPShiPzE6LTEpKng7dGhpcy5kYXRhWzMrNCooZit2KV09TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsXysxMjgpKX12YXIgVD17eToodGhpcy5uZXh0Um93K24rLjUpL3RoaXMuaGVpZ2h0LGhlaWdodDoyKm4vdGhpcy5oZWlnaHQsd2lkdGg6aX07cmV0dXJuIHRoaXMubmV4dFJvdys9YSx0aGlzLmRpcnR5PSEwLFR9LGsucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbDt0aGlzLnRleHR1cmU/KGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksdGhpcy5kaXJ0eSYmKHRoaXMuZGlydHk9ITEsZS50ZXhTdWJJbWFnZTJEKGUuVEVYVFVSRV8yRCwwLDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsdGhpcy5kYXRhKSkpOih0aGlzLnRleHR1cmU9ZS5jcmVhdGVUZXh0dXJlKCksZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1MsZS5SRVBFQVQpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX1dSQVBfVCxlLlJFUEVBVCksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUlOX0ZJTFRFUixlLkxJTkVBUiksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUFHX0ZJTFRFUixlLkxJTkVBUiksZS50ZXhJbWFnZTJEKGUuVEVYVFVSRV8yRCwwLGUuUkdCQSx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LDAsZS5SR0JBLGUuVU5TSUdORURfQllURSx0aGlzLmRhdGEpKX07dmFyIFQ9ZnVuY3Rpb24gZShyLG4pe3RoaXMud29ya2VyUG9vbD1yLHRoaXMuYWN0b3JzPVtdLHRoaXMuY3VycmVudEFjdG9yPTAsdGhpcy5pZD10LnVuaXF1ZUlkKCk7Zm9yKHZhciBhPXRoaXMud29ya2VyUG9vbC5hY3F1aXJlKHRoaXMuaWQpLGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIG89YVtpXSxzPW5ldyBlLkFjdG9yKG8sbix0aGlzLmlkKTtzLm5hbWU9IldvcmtlciAiK2ksdGhpcy5hY3RvcnMucHVzaChzKX19O2Z1bmN0aW9uIE0oZSxyLG4pe3ZhciBhPWZ1bmN0aW9uKGEsaSl7aWYoYSlyZXR1cm4gbihhKTtpZihpKXt2YXIgbz10LnBpY2sodC5leHRlbmQoaSxlKSxbInRpbGVzIiwibWluem9vbSIsIm1heHpvb20iLCJhdHRyaWJ1dGlvbiIsIm1hcGJveF9sb2dvIiwiYm91bmRzIiwic2NoZW1lIiwidGlsZVNpemUiLCJlbmNvZGluZyJdKTtpLnZlY3Rvcl9sYXllcnMmJihvLnZlY3RvckxheWVycz1pLnZlY3Rvcl9sYXllcnMsby52ZWN0b3JMYXllcklkcz1vLnZlY3RvckxheWVycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSksZS51cmwmJihvLnRpbGVzPXIuY2Fub25pY2FsaXplVGlsZXNldChvLGUudXJsKSksbihudWxsLG8pfX07cmV0dXJuIGUudXJsP3QuZ2V0SlNPTihyLnRyYW5zZm9ybVJlcXVlc3Qoci5ub3JtYWxpemVTb3VyY2VVUkwoZS51cmwpLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSksYSk6dC5icm93c2VyLmZyYW1lKGZ1bmN0aW9uKCl7cmV0dXJuIGEobnVsbCxlKX0pfVQucHJvdG90eXBlLmJyb2FkY2FzdD1mdW5jdGlvbihlLHIsbil7bj1ufHxmdW5jdGlvbigpe30sdC5hc3luY0FsbCh0aGlzLmFjdG9ycyxmdW5jdGlvbih0LG4pe3Quc2VuZChlLHIsbil9LG4pfSxULnByb3RvdHlwZS5nZXRBY3Rvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRBY3Rvcj0odGhpcy5jdXJyZW50QWN0b3IrMSkldGhpcy5hY3RvcnMubGVuZ3RoLHRoaXMuYWN0b3JzW3RoaXMuY3VycmVudEFjdG9yXX0sVC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5hY3RvcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnJlbW92ZSgpfSksdGhpcy5hY3RvcnM9W10sdGhpcy53b3JrZXJQb29sLnJlbGVhc2UodGhpcy5pZCl9LFQuQWN0b3I9dC5BY3Rvcjt2YXIgQT1mdW5jdGlvbihlLHIsbil7dGhpcy5ib3VuZHM9dC5MbmdMYXRCb3VuZHMuY29udmVydCh0aGlzLnZhbGlkYXRlQm91bmRzKGUpKSx0aGlzLm1pbnpvb209cnx8MCx0aGlzLm1heHpvb209bnx8MjR9O0EucHJvdG90eXBlLnZhbGlkYXRlQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiY0PT09dC5sZW5ndGg/W01hdGgubWF4KC0xODAsdFswXSksTWF0aC5tYXgoLTkwLHRbMV0pLE1hdGgubWluKDE4MCx0WzJdKSxNYXRoLm1pbig5MCx0WzNdKV06Wy0xODAsLTkwLDE4MCw5MF19LEEucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGUpe3ZhciByPU1hdGgucG93KDIsZS56KSxuPU1hdGguZmxvb3IodC5tZXJjYXRvclhmcm9tTG5nKHRoaXMuYm91bmRzLmdldFdlc3QoKSkqciksYT1NYXRoLmZsb29yKHQubWVyY2F0b3JZZnJvbUxhdCh0aGlzLmJvdW5kcy5nZXROb3J0aCgpKSpyKSxpPU1hdGguY2VpbCh0Lm1lcmNhdG9yWGZyb21MbmcodGhpcy5ib3VuZHMuZ2V0RWFzdCgpKSpyKSxvPU1hdGguY2VpbCh0Lm1lcmNhdG9yWWZyb21MYXQodGhpcy5ib3VuZHMuZ2V0U291dGgoKSkqcik7cmV0dXJuIGUueD49biYmZS54PGkmJmUueT49YSYmZS55PG99O3ZhciBTPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGEsaSl7aWYoZS5jYWxsKHRoaXMpLHRoaXMuaWQ9cix0aGlzLmRpc3BhdGNoZXI9YSx0aGlzLnR5cGU9InZlY3RvciIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTIyLHRoaXMuc2NoZW1lPSJ4eXoiLHRoaXMudGlsZVNpemU9NTEyLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9ITAsdGhpcy5pc1RpbGVDbGlwcGVkPSEwLHRoaXMuX2xvYWRlZD0hMSx0LmV4dGVuZCh0aGlzLHQucGljayhuLFsidXJsIiwic2NoZW1lIiwidGlsZVNpemUiXSkpLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe3R5cGU6InZlY3RvciJ9LG4pLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1uLmNvbGxlY3RSZXNvdXJjZVRpbWluZyw1MTIhPT10aGlzLnRpbGVTaXplKXRocm93IG5ldyBFcnJvcigidmVjdG9yIHRpbGUgc291cmNlcyBtdXN0IGhhdmUgYSB0aWxlU2l6ZSBvZiA1MTIiKTt0aGlzLnNldEV2ZW50ZWRQYXJlbnQoaSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2xvYWRlZD0hMSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksdGhpcy5fdGlsZUpTT05SZXF1ZXN0PU0odGhpcy5fb3B0aW9ucyx0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsZnVuY3Rpb24ocixuKXtlLl90aWxlSlNPTlJlcXVlc3Q9bnVsbCxlLl9sb2FkZWQ9ITAscj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKHQuZXh0ZW5kKGUsbiksbi5ib3VuZHMmJihlLnRpbGVCb3VuZHM9bmV3IEEobi5ib3VuZHMsZS5taW56b29tLGUubWF4em9vbSkpLHQucG9zdFR1cm5zdGlsZUV2ZW50KG4udGlsZXMsZS5tYXAuX3JlcXVlc3RNYW5hZ2VyLl9jdXN0b21BY2Nlc3NUb2tlbiksdC5wb3N0TWFwTG9hZEV2ZW50KG4udGlsZXMsZS5tYXAuX2dldE1hcElkKCksZS5tYXAuX3JlcXVlc3RNYW5hZ2VyLl9za3VUb2tlbixlLm1hcC5fcmVxdWVzdE1hbmFnZXIuX2N1c3RvbUFjY2Vzc1Rva2VuKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSl9KX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRlZH0sci5wcm90b3R5cGUuaGFzVGlsZT1mdW5jdGlvbih0KXtyZXR1cm4hdGhpcy50aWxlQm91bmRzfHx0aGlzLnRpbGVCb3VuZHMuY29udGFpbnModC5jYW5vbmljYWwpfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3RpbGVKU09OUmVxdWVzdCYmKHRoaXMuX3RpbGVKU09OUmVxdWVzdC5jYW5jZWwoKSx0aGlzLl90aWxlSlNPTlJlcXVlc3Q9bnVsbCl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7fSx0aGlzLl9vcHRpb25zKX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTChlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpLHRoaXMudXJsLG51bGwpLGE9e3JlcXVlc3Q6dGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3Qobix0LlJlc291cmNlVHlwZS5UaWxlKSx1aWQ6ZS51aWQsdGlsZUlEOmUudGlsZUlELHpvb206ZS50aWxlSUQub3ZlcnNjYWxlZFosdGlsZVNpemU6dGhpcy50aWxlU2l6ZSplLnRpbGVJRC5vdmVyc2NhbGVGYWN0b3IoKSx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZCxwaXhlbFJhdGlvOnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHNob3dDb2xsaXNpb25Cb3hlczp0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXN9O2Z1bmN0aW9uIGkobixhKXtyZXR1cm4gZGVsZXRlIGUucmVxdWVzdCxlLmFib3J0ZWQ/cihudWxsKTpuJiY0MDQhPT1uLnN0YXR1cz9yKG4pOihhJiZhLnJlc291cmNlVGltaW5nJiYoZS5yZXNvdXJjZVRpbWluZz1hLnJlc291cmNlVGltaW5nKSx0aGlzLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmYSYmZS5zZXRFeHBpcnlEYXRhKGEpLGUubG9hZFZlY3RvckRhdGEoYSx0aGlzLm1hcC5wYWludGVyKSx0LmNhY2hlRW50cnlQb3NzaWJseUFkZGVkKHRoaXMuZGlzcGF0Y2hlcikscihudWxsKSx2b2lkKGUucmVsb2FkQ2FsbGJhY2smJih0aGlzLmxvYWRUaWxlKGUsZS5yZWxvYWRDYWxsYmFjayksZS5yZWxvYWRDYWxsYmFjaz1udWxsKSkpfWEucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9dGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nLGUuYWN0b3ImJiJleHBpcmVkIiE9PWUuc3RhdGU/ImxvYWRpbmciPT09ZS5zdGF0ZT9lLnJlbG9hZENhbGxiYWNrPXI6ZS5yZXF1ZXN0PWUuYWN0b3Iuc2VuZCgicmVsb2FkVGlsZSIsYSxpLmJpbmQodGhpcykpOihlLmFjdG9yPXRoaXMuZGlzcGF0Y2hlci5nZXRBY3RvcigpLGUucmVxdWVzdD1lLmFjdG9yLnNlbmQoImxvYWRUaWxlIixhLGkuYmluZCh0aGlzKSkpfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCl7dC5yZXF1ZXN0JiYodC5yZXF1ZXN0LmNhbmNlbCgpLGRlbGV0ZSB0LnJlcXVlc3QpLHQuYWN0b3ImJnQuYWN0b3Iuc2VuZCgiYWJvcnRUaWxlIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSx2b2lkIDApfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe3QudW5sb2FkVmVjdG9yRGF0YSgpLHQuYWN0b3ImJnQuYWN0b3Iuc2VuZCgicmVtb3ZlVGlsZSIse3VpZDp0LnVpZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0sdm9pZCAwKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLEU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4sYSxpKXtlLmNhbGwodGhpcyksdGhpcy5pZD1yLHRoaXMuZGlzcGF0Y2hlcj1hLHRoaXMuc2V0RXZlbnRlZFBhcmVudChpKSx0aGlzLnR5cGU9InJhc3RlciIsdGhpcy5taW56b29tPTAsdGhpcy5tYXh6b29tPTIyLHRoaXMucm91bmRab29tPSEwLHRoaXMuc2NoZW1lPSJ4eXoiLHRoaXMudGlsZVNpemU9NTEyLHRoaXMuX2xvYWRlZD0hMSx0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt0eXBlOiJyYXN0ZXIifSxuKSx0LmV4dGVuZCh0aGlzLHQucGljayhuLFsidXJsIiwic2NoZW1lIiwidGlsZVNpemUiXSkpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9sb2FkZWQ9ITEsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMuX3RpbGVKU09OUmVxdWVzdD1NKHRoaXMuX29wdGlvbnMsdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLGZ1bmN0aW9uKHIsbil7ZS5fdGlsZUpTT05SZXF1ZXN0PW51bGwsZS5fbG9hZGVkPSEwLHI/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJih0LmV4dGVuZChlLG4pLG4uYm91bmRzJiYoZS50aWxlQm91bmRzPW5ldyBBKG4uYm91bmRzLGUubWluem9vbSxlLm1heHpvb20pKSx0LnBvc3RUdXJuc3RpbGVFdmVudChuLnRpbGVzKSx0LnBvc3RNYXBMb2FkRXZlbnQobi50aWxlcyxlLm1hcC5fZ2V0TWFwSWQoKSxlLm1hcC5fcmVxdWVzdE1hbmFnZXIuX3NrdVRva2VuKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSl9KX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRlZH0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl90aWxlSlNPTlJlcXVlc3QmJih0aGlzLl90aWxlSlNPTlJlcXVlc3QuY2FuY2VsKCksdGhpcy5fdGlsZUpTT05SZXF1ZXN0PW51bGwpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LHIucHJvdG90eXBlLmhhc1RpbGU9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMudGlsZUJvdW5kc3x8dGhpcy50aWxlQm91bmRzLmNvbnRhaW5zKHQuY2Fub25pY2FsKX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGE9dGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVRpbGVVUkwoZS50aWxlSUQuY2Fub25pY2FsLnVybCh0aGlzLnRpbGVzLHRoaXMuc2NoZW1lKSx0aGlzLnVybCx0aGlzLnRpbGVTaXplKTtlLnJlcXVlc3Q9dC5nZXRJbWFnZSh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChhLHQuUmVzb3VyY2VUeXBlLlRpbGUpLGZ1bmN0aW9uKGEsaSl7aWYoZGVsZXRlIGUucmVxdWVzdCxlLmFib3J0ZWQpZS5zdGF0ZT0idW5sb2FkZWQiLHIobnVsbCk7ZWxzZSBpZihhKWUuc3RhdGU9ImVycm9yZWQiLHIoYSk7ZWxzZSBpZihpKXtuLm1hcC5fcmVmcmVzaEV4cGlyZWRUaWxlcyYmZS5zZXRFeHBpcnlEYXRhKGkpLGRlbGV0ZSBpLmNhY2hlQ29udHJvbCxkZWxldGUgaS5leHBpcmVzO3ZhciBvPW4ubWFwLnBhaW50ZXIuY29udGV4dCxzPW8uZ2w7ZS50ZXh0dXJlPW4ubWFwLnBhaW50ZXIuZ2V0VGlsZVRleHR1cmUoaS53aWR0aCksZS50ZXh0dXJlP2UudGV4dHVyZS51cGRhdGUoaSx7dXNlTWlwbWFwOiEwfSk6KGUudGV4dHVyZT1uZXcgdC5UZXh0dXJlKG8saSxzLlJHQkEse3VzZU1pcG1hcDohMH0pLGUudGV4dHVyZS5iaW5kKHMuTElORUFSLHMuQ0xBTVBfVE9fRURHRSxzLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksby5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMmJnMudGV4UGFyYW1ldGVyZihzLlRFWFRVUkVfMkQsby5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsby5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXgpKSxlLnN0YXRlPSJsb2FkZWQiLHQuY2FjaGVFbnRyeVBvc3NpYmx5QWRkZWQobi5kaXNwYXRjaGVyKSxyKG51bGwpfX0pfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlKXt0LnJlcXVlc3QmJih0LnJlcXVlc3QuY2FuY2VsKCksZGVsZXRlIHQucmVxdWVzdCksZSgpfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dC50ZXh0dXJlJiZ0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0LnRleHR1cmUpLGUoKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLEw9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4sYSxpKXtlLmNhbGwodGhpcyxyLG4sYSxpKSx0aGlzLnR5cGU9InJhc3Rlci1kZW0iLHRoaXMubWF4em9vbT0yMix0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt0eXBlOiJyYXN0ZXItZGVtIn0sbiksdGhpcy5lbmNvZGluZz1uLmVuY29kaW5nfHwibWFwYm94In1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6InJhc3Rlci1kZW0iLHVybDp0aGlzLnVybCx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplLHRpbGVzOnRoaXMudGlsZXMsYm91bmRzOnRoaXMuYm91bmRzLGVuY29kaW5nOnRoaXMuZW5jb2Rpbmd9fSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVUaWxlVVJMKGUudGlsZUlELmNhbm9uaWNhbC51cmwodGhpcy50aWxlcyx0aGlzLnNjaGVtZSksdGhpcy51cmwsdGhpcy50aWxlU2l6ZSk7ZS5yZXF1ZXN0PXQuZ2V0SW1hZ2UodGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3Qobix0LlJlc291cmNlVHlwZS5UaWxlKSxmdW5jdGlvbihuLGEpe2lmKGRlbGV0ZSBlLnJlcXVlc3QsZS5hYm9ydGVkKWUuc3RhdGU9InVubG9hZGVkIixyKG51bGwpO2Vsc2UgaWYobillLnN0YXRlPSJlcnJvcmVkIixyKG4pO2Vsc2UgaWYoYSl7dGhpcy5tYXAuX3JlZnJlc2hFeHBpcmVkVGlsZXMmJmUuc2V0RXhwaXJ5RGF0YShhKSxkZWxldGUgYS5jYWNoZUNvbnRyb2wsZGVsZXRlIGEuZXhwaXJlczt2YXIgaT10LmJyb3dzZXIuZ2V0SW1hZ2VEYXRhKGEpLG89e3VpZDplLnVpZCxjb29yZDplLnRpbGVJRCxzb3VyY2U6dGhpcy5pZCxyYXdJbWFnZURhdGE6aSxlbmNvZGluZzp0aGlzLmVuY29kaW5nfTtlLmFjdG9yJiYiZXhwaXJlZCIhPT1lLnN0YXRlfHwoZS5hY3Rvcj10aGlzLmRpc3BhdGNoZXIuZ2V0QWN0b3IoKSxlLmFjdG9yLnNlbmQoImxvYWRERU1UaWxlIixvLGZ1bmN0aW9uKHQsbil7dCYmKGUuc3RhdGU9ImVycm9yZWQiLHIodCkpLG4mJihlLmRlbT1uLGUubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSEwLGUuc3RhdGU9ImxvYWRlZCIscihudWxsKSl9LmJpbmQodGhpcykpKX19LmJpbmQodGhpcykpLGUubmVpZ2hib3JpbmdUaWxlcz10aGlzLl9nZXROZWlnaGJvcmluZ1RpbGVzKGUudGlsZUlEKX0sci5wcm90b3R5cGUuX2dldE5laWdoYm9yaW5nVGlsZXM9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5jYW5vbmljYWwsbj1NYXRoLnBvdygyLHIueiksYT0oci54LTErbiklbixpPTA9PT1yLng/ZS53cmFwLTE6ZS53cmFwLG89KHIueCsxK24pJW4scz1yLngrMT09PW4/ZS53cmFwKzE6ZS53cmFwLGw9e307cmV0dXJuIGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGksci56LGEsci55KS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixzLHIueixvLHIueSkua2V5XT17YmFja2ZpbGxlZDohMX0sci55PjAmJihsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixpLHIueixhLHIueS0xKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixlLndyYXAsci56LHIueCxyLnktMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFoscyxyLnosbyxyLnktMSkua2V5XT17YmFja2ZpbGxlZDohMX0pLHIueSsxPG4mJihsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixpLHIueixhLHIueSsxKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixlLndyYXAsci56LHIueCxyLnkrMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFoscyxyLnosbyxyLnkrMSkua2V5XT17YmFja2ZpbGxlZDohMX0pLGx9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCl7dC5kZW1UZXh0dXJlJiZ0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0LmRlbVRleHR1cmUpLHQuZmJvJiYodC5mYm8uZGVzdHJveSgpLGRlbGV0ZSB0LmZibyksdC5kZW0mJmRlbGV0ZSB0LmRlbSxkZWxldGUgdC5uZWlnaGJvcmluZ1RpbGVzLHQuc3RhdGU9InVubG9hZGVkIix0LmFjdG9yJiZ0LmFjdG9yLnNlbmQoInJlbW92ZURFTVRpbGUiLHt1aWQ6dC51aWQsc291cmNlOnRoaXMuaWR9KX0scn0oRSksQz1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixhLGkpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy50eXBlPSJnZW9qc29uIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MTgsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy5pc1RpbGVDbGlwcGVkPSEwLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9ITAsdGhpcy5fcmVtb3ZlZD0hMSx0aGlzLl9sb2FkZWQ9ITEsdGhpcy5hY3Rvcj1hLmdldEFjdG9yKCksdGhpcy5zZXRFdmVudGVkUGFyZW50KGkpLHRoaXMuX2RhdGE9bi5kYXRhLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe30sbiksdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nPW4uY29sbGVjdFJlc291cmNlVGltaW5nLHRoaXMuX3Jlc291cmNlVGltaW5nPVtdLHZvaWQgMCE9PW4ubWF4em9vbSYmKHRoaXMubWF4em9vbT1uLm1heHpvb20pLG4udHlwZSYmKHRoaXMudHlwZT1uLnR5cGUpLG4uYXR0cmlidXRpb24mJih0aGlzLmF0dHJpYnV0aW9uPW4uYXR0cmlidXRpb24pO3ZhciBvPXQuRVhURU5UL3RoaXMudGlsZVNpemU7dGhpcy53b3JrZXJPcHRpb25zPXQuZXh0ZW5kKHtzb3VyY2U6dGhpcy5pZCxjbHVzdGVyOm4uY2x1c3Rlcnx8ITEsZ2VvanNvblZ0T3B0aW9uczp7YnVmZmVyOih2b2lkIDAhPT1uLmJ1ZmZlcj9uLmJ1ZmZlcjoxMjgpKm8sdG9sZXJhbmNlOih2b2lkIDAhPT1uLnRvbGVyYW5jZT9uLnRvbGVyYW5jZTouMzc1KSpvLGV4dGVudDp0LkVYVEVOVCxtYXhab29tOnRoaXMubWF4em9vbSxsaW5lTWV0cmljczpuLmxpbmVNZXRyaWNzfHwhMSxnZW5lcmF0ZUlkOm4uZ2VuZXJhdGVJZHx8ITF9LHN1cGVyY2x1c3Rlck9wdGlvbnM6e21heFpvb206dm9pZCAwIT09bi5jbHVzdGVyTWF4Wm9vbT9NYXRoLm1pbihuLmNsdXN0ZXJNYXhab29tLHRoaXMubWF4em9vbS0xKTp0aGlzLm1heHpvb20tMSxleHRlbnQ6dC5FWFRFTlQscmFkaXVzOihuLmNsdXN0ZXJSYWRpdXN8fDUwKSpvLGxvZzohMX0sY2x1c3RlclByb3BlcnRpZXM6bi5jbHVzdGVyUHJvcGVydGllc30sbi53b3JrZXJPcHRpb25zKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoZnVuY3Rpb24ocil7aWYocillLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk7ZWxzZXt2YXIgbj17ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIn07ZS5fY29sbGVjdFJlc291cmNlVGltaW5nJiZlLl9yZXNvdXJjZVRpbWluZyYmZS5fcmVzb3VyY2VUaW1pbmcubGVuZ3RoPjAmJihuLnJlc291cmNlVGltaW5nPWUuX3Jlc291cmNlVGltaW5nLGUuX3Jlc291cmNlVGltaW5nPVtdKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLG4pKX19KX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9kYXRhPWUsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoZnVuY3Rpb24oZSl7aWYoZSlyLmZpcmUobmV3IHQuRXJyb3JFdmVudChlKSk7ZWxzZXt2YXIgbj17ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6ImNvbnRlbnQifTtyLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcmJnIuX3Jlc291cmNlVGltaW5nJiZyLl9yZXNvdXJjZVRpbWluZy5sZW5ndGg+MCYmKG4ucmVzb3VyY2VUaW1pbmc9ci5fcmVzb3VyY2VUaW1pbmcsci5fcmVzb3VyY2VUaW1pbmc9W10pLHIuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIsbikpfX0pLHRoaXN9LHIucHJvdG90eXBlLmdldENsdXN0ZXJFeHBhbnNpb25ab29tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWN0b3Iuc2VuZCgiZ2VvanNvbi5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbSIse2NsdXN0ZXJJZDp0LHNvdXJjZTp0aGlzLmlkfSxlKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hY3Rvci5zZW5kKCJnZW9qc29uLmdldENsdXN0ZXJDaGlsZHJlbiIse2NsdXN0ZXJJZDp0LHNvdXJjZTp0aGlzLmlkfSxlKSx0aGlzfSxyLnByb3RvdHlwZS5nZXRDbHVzdGVyTGVhdmVzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLmFjdG9yLnNlbmQoImdlb2pzb24uZ2V0Q2x1c3RlckxlYXZlcyIse3NvdXJjZTp0aGlzLmlkLGNsdXN0ZXJJZDp0LGxpbWl0OmUsb2Zmc2V0OnJ9LG4pLHRoaXN9LHIucHJvdG90eXBlLl91cGRhdGVXb3JrZXJEYXRhPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7dGhpcy5fbG9hZGVkPSExO3ZhciBuPXQuZXh0ZW5kKHt9LHRoaXMud29ya2VyT3B0aW9ucyksYT10aGlzLl9kYXRhOyJzdHJpbmciPT10eXBlb2YgYT8obi5yZXF1ZXN0PXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHQuYnJvd3Nlci5yZXNvbHZlVVJMKGEpLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSksbi5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZz10aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcpOm4uZGF0YT1KU09OLnN0cmluZ2lmeShhKSx0aGlzLmFjdG9yLnNlbmQodGhpcy50eXBlKyIubG9hZERhdGEiLG4sZnVuY3Rpb24odCxhKXtyLl9yZW1vdmVkfHxhJiZhLmFiYW5kb25lZHx8KHIuX2xvYWRlZD0hMCxhJiZhLnJlc291cmNlVGltaW5nJiZhLnJlc291cmNlVGltaW5nW3IuaWRdJiYoci5fcmVzb3VyY2VUaW1pbmc9YS5yZXNvdXJjZVRpbWluZ1tyLmlkXS5zbGljZSgwKSksci5hY3Rvci5zZW5kKHIudHlwZSsiLmNvYWxlc2NlIix7c291cmNlOm4uc291cmNlfSxudWxsKSxlKHQpKX0pfSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkfSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMsYT1lLmFjdG9yPyJyZWxvYWRUaWxlIjoibG9hZFRpbGUiO2UuYWN0b3I9dGhpcy5hY3Rvcjt2YXIgaT17dHlwZTp0aGlzLnR5cGUsdWlkOmUudWlkLHRpbGVJRDplLnRpbGVJRCx6b29tOmUudGlsZUlELm92ZXJzY2FsZWRaLG1heFpvb206dGhpcy5tYXh6b29tLHRpbGVTaXplOnRoaXMudGlsZVNpemUsc291cmNlOnRoaXMuaWQscGl4ZWxSYXRpbzp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxzaG93Q29sbGlzaW9uQm94ZXM6dGhpcy5tYXAuc2hvd0NvbGxpc2lvbkJveGVzfTtlLnJlcXVlc3Q9dGhpcy5hY3Rvci5zZW5kKGEsaSxmdW5jdGlvbih0LGkpe3JldHVybiBkZWxldGUgZS5yZXF1ZXN0LGUudW5sb2FkVmVjdG9yRGF0YSgpLGUuYWJvcnRlZD9yKG51bGwpOnQ/cih0KTooZS5sb2FkVmVjdG9yRGF0YShpLG4ubWFwLnBhaW50ZXIsInJlbG9hZFRpbGUiPT09YSkscihudWxsKSl9KX0sci5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQpe3QucmVxdWVzdCYmKHQucmVxdWVzdC5jYW5jZWwoKSxkZWxldGUgdC5yZXF1ZXN0KSx0LmFib3J0ZWQ9ITB9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCl7dC51bmxvYWRWZWN0b3JEYXRhKCksdGhpcy5hY3Rvci5zZW5kKCJyZW1vdmVUaWxlIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlZD0hMCx0aGlzLmFjdG9yLnNlbmQoInJlbW92ZVNvdXJjZSIse3R5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7fSx0aGlzLl9vcHRpb25zLHt0eXBlOnRoaXMudHlwZSxkYXRhOnRoaXMuX2RhdGF9KX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLFA9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixhKXtlLmNhbGwodGhpcyksdGhpcy5pZD10LHRoaXMuZGlzcGF0Y2hlcj1uLHRoaXMuY29vcmRpbmF0ZXM9ci5jb29yZGluYXRlcyx0aGlzLnR5cGU9ImltYWdlIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MjIsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy50aWxlcz17fSx0aGlzLl9sb2FkZWQ9ITEsdGhpcy5zZXRFdmVudGVkUGFyZW50KGEpLHRoaXMub3B0aW9ucz1yfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt0aGlzLl9sb2FkZWQ9ITEsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMudXJsPXRoaXMub3B0aW9ucy51cmwsdC5nZXRJbWFnZSh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh0aGlzLnVybCx0LlJlc291cmNlVHlwZS5JbWFnZSksZnVuY3Rpb24oYSxpKXtuLl9sb2FkZWQ9ITAsYT9uLmZpcmUobmV3IHQuRXJyb3JFdmVudChhKSk6aSYmKG4uaW1hZ2U9aSxlJiYobi5jb29yZGluYXRlcz1lKSxyJiZyKCksbi5fZmluaXNoTG9hZGluZygpKX0pfSxyLnByb3RvdHlwZS5sb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVkfSxyLnByb3RvdHlwZS51cGRhdGVJbWFnZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmltYWdlJiZ0LnVybD8odGhpcy5vcHRpb25zLnVybD10LnVybCx0aGlzLmxvYWQodC5jb29yZGluYXRlcyxmdW5jdGlvbigpe2UudGV4dHVyZT1udWxsfSksdGhpcyk6dGhpc30sci5wcm90b3R5cGUuX2ZpbmlzaExvYWRpbmc9ZnVuY3Rpb24oKXt0aGlzLm1hcCYmKHRoaXMuc2V0Q29vcmRpbmF0ZXModGhpcy5jb29yZGluYXRlcyksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIn0pKSl9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCl9LHIucHJvdG90eXBlLnNldENvb3JkaW5hdGVzPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7dGhpcy5jb29yZGluYXRlcz1lO3ZhciBuPWUubWFwKHQuTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQpO3RoaXMudGlsZUlEPWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0xLzAsbj0xLzAsYT0tMS8wLGk9LTEvMCxvPTAscz1lO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTtyPU1hdGgubWluKHIsbC54KSxuPU1hdGgubWluKG4sbC55KSxhPU1hdGgubWF4KGEsbC54KSxpPU1hdGgubWF4KGksbC55KX12YXIgYz1hLXIsdT1pLW4saD1NYXRoLm1heChjLHUpLGY9TWF0aC5tYXgoMCxNYXRoLmZsb29yKC1NYXRoLmxvZyhoKS9NYXRoLkxOMikpLHA9TWF0aC5wb3coMixmKTtyZXR1cm4gbmV3IHQuQ2Fub25pY2FsVGlsZUlEKGYsTWF0aC5mbG9vcigocithKS8yKnApLE1hdGguZmxvb3IoKG4raSkvMipwKSl9KG4pLHRoaXMubWluem9vbT10aGlzLm1heHpvb209dGhpcy50aWxlSUQuejt2YXIgYT1uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gci50aWxlSUQuZ2V0VGlsZVBvaW50KHQpLl9yb3VuZCgpfSk7cmV0dXJuIHRoaXMuX2JvdW5kc0FycmF5PW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0NGk4LHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGFbMF0ueCxhWzBdLnksMCwwKSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhhWzFdLngsYVsxXS55LHQuRVhURU5ULDApLHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGFbM10ueCxhWzNdLnksMCx0LkVYVEVOVCksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soYVsyXS54LGFbMl0ueSx0LkVYVEVOVCx0LkVYVEVOVCksdGhpcy5ib3VuZHNCdWZmZXImJih0aGlzLmJvdW5kc0J1ZmZlci5kZXN0cm95KCksZGVsZXRlIHRoaXMuYm91bmRzQnVmZmVyKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToiY29udGVudCJ9KSksdGhpc30sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2lmKDAhPT1PYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGgmJnRoaXMuaW1hZ2Upe3ZhciBlPXRoaXMubWFwLnBhaW50ZXIuY29udGV4dCxyPWUuZ2w7Zm9yKHZhciBuIGluIHRoaXMuYm91bmRzQnVmZmVyfHwodGhpcy5ib3VuZHNCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5fYm91bmRzQXJyYXksdC5yYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpKSx0aGlzLmJvdW5kc1NlZ21lbnRzfHwodGhpcy5ib3VuZHNTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKSksdGhpcy50ZXh0dXJlfHwodGhpcy50ZXh0dXJlPW5ldyB0LlRleHR1cmUoZSx0aGlzLmltYWdlLHIuUkdCQSksdGhpcy50ZXh0dXJlLmJpbmQoci5MSU5FQVIsci5DTEFNUF9UT19FREdFKSksdGhpcy50aWxlcyl7dmFyIGE9dGhpcy50aWxlc1tuXTsibG9hZGVkIiE9PWEuc3RhdGUmJihhLnN0YXRlPSJsb2FkZWQiLGEudGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy50aWxlSUQmJnRoaXMudGlsZUlELmVxdWFscyh0LnRpbGVJRC5jYW5vbmljYWwpPyh0aGlzLnRpbGVzW1N0cmluZyh0LnRpbGVJRC53cmFwKV09dCx0LmJ1Y2tldHM9e30sZShudWxsKSk6KHQuc3RhdGU9ImVycm9yZWQiLGUobnVsbCkpfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiaW1hZ2UiLHVybDp0aGlzLm9wdGlvbnMudXJsLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksTz1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscixuLGEpe2UuY2FsbCh0aGlzLHQscixuLGEpLHRoaXMucm91bmRab29tPSEwLHRoaXMudHlwZT0idmlkZW8iLHRoaXMub3B0aW9ucz1yfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9sb2FkZWQ9ITE7dmFyIHI9dGhpcy5vcHRpb25zO3RoaXMudXJscz1bXTtmb3IodmFyIG49MCxhPXIudXJscztuPGEubGVuZ3RoO24rPTEpe3ZhciBpPWFbbl07dGhpcy51cmxzLnB1c2godGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QoaSx0LlJlc291cmNlVHlwZS5Tb3VyY2UpLnVybCl9dC5nZXRWaWRlbyh0aGlzLnVybHMsZnVuY3Rpb24ocixuKXtlLl9sb2FkZWQ9ITAscj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKGUudmlkZW89bixlLnZpZGVvLmxvb3A9ITAsZS52aWRlby5hZGRFdmVudExpc3RlbmVyKCJwbGF5aW5nIixmdW5jdGlvbigpe2UubWFwLnRyaWdnZXJSZXBhaW50KCl9KSxlLm1hcCYmZS52aWRlby5wbGF5KCksZS5fZmluaXNoTG9hZGluZygpKX0pfSxyLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMudmlkZW8mJnRoaXMudmlkZW8ucGF1c2UoKX0sci5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMudmlkZW8mJnRoaXMudmlkZW8ucGxheSgpfSxyLnByb3RvdHlwZS5zZWVrPWZ1bmN0aW9uKGUpe2lmKHRoaXMudmlkZW8pe3ZhciByPXRoaXMudmlkZW8uc2Vla2FibGU7ZTxyLnN0YXJ0KDApfHxlPnIuZW5kKDApP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigiUGxheWJhY2sgZm9yIHRoaXMgdmlkZW8gY2FuIGJlIHNldCBvbmx5IGJldHdlZW4gdGhlICIrci5zdGFydCgwKSsiIGFuZCAiK3IuZW5kKDApKyItc2Vjb25kIG1hcmsuIikpKTp0aGlzLnZpZGVvLmN1cnJlbnRUaW1lPWV9fSxyLnByb3RvdHlwZS5nZXRWaWRlbz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZGVvfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcHx8KHRoaXMubWFwPXQsdGhpcy5sb2FkKCksdGhpcy52aWRlbyYmKHRoaXMudmlkZW8ucGxheSgpLHRoaXMuc2V0Q29vcmRpbmF0ZXModGhpcy5jb29yZGluYXRlcykpKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2lmKCEoMD09PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aHx8dGhpcy52aWRlby5yZWFkeVN0YXRlPDIpKXt2YXIgZT10aGlzLm1hcC5wYWludGVyLmNvbnRleHQscj1lLmdsO2Zvcih2YXIgbiBpbiB0aGlzLmJvdW5kc0J1ZmZlcnx8KHRoaXMuYm91bmRzQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LHQucmFzdGVyQm91bmRzQXR0cmlidXRlcy5tZW1iZXJzKSksdGhpcy5ib3VuZHNTZWdtZW50c3x8KHRoaXMuYm91bmRzU2VnbWVudHM9dC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwwLDQsMikpLHRoaXMudGV4dHVyZT90aGlzLnZpZGVvLnBhdXNlZHx8KHRoaXMudGV4dHVyZS5iaW5kKHIuTElORUFSLHIuQ0xBTVBfVE9fRURHRSksci50ZXhTdWJJbWFnZTJEKHIuVEVYVFVSRV8yRCwwLDAsMCxyLlJHQkEsci5VTlNJR05FRF9CWVRFLHRoaXMudmlkZW8pKToodGhpcy50ZXh0dXJlPW5ldyB0LlRleHR1cmUoZSx0aGlzLnZpZGVvLHIuUkdCQSksdGhpcy50ZXh0dXJlLmJpbmQoci5MSU5FQVIsci5DTEFNUF9UT19FREdFKSksdGhpcy50aWxlcyl7dmFyIGE9dGhpcy50aWxlc1tuXTsibG9hZGVkIiE9PWEuc3RhdGUmJihhLnN0YXRlPSJsb2FkZWQiLGEudGV4dHVyZT10aGlzLnRleHR1cmUpfX19LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJ2aWRlbyIsdXJsczp0aGlzLnVybHMsY29vcmRpbmF0ZXM6dGhpcy5jb29yZGluYXRlc319LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWRlbyYmIXRoaXMudmlkZW8ucGF1c2VkfSxyfShQKSx6PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuLGEsaSl7ZS5jYWxsKHRoaXMscixuLGEsaSksbi5jb29yZGluYXRlcz9BcnJheS5pc0FycmF5KG4uY29vcmRpbmF0ZXMpJiY0PT09bi5jb29yZGluYXRlcy5sZW5ndGgmJiFuLmNvb3JkaW5hdGVzLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIUFycmF5LmlzQXJyYXkodCl8fDIhPT10Lmxlbmd0aHx8dC5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdH0pfSl8fHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3IsbnVsbCwnImNvb3JkaW5hdGVzIiBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5IG9mIDQgbG9uZ2l0dWRlL2xhdGl0dWRlIGFycmF5IHBhaXJzJykpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5WYWxpZGF0aW9uRXJyb3IoInNvdXJjZXMuIityLG51bGwsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgImNvb3JkaW5hdGVzIicpKSksbi5hbmltYXRlJiYiYm9vbGVhbiIhPXR5cGVvZiBuLmFuaW1hdGUmJnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3IsbnVsbCwnb3B0aW9uYWwgImFuaW1hdGUiIHByb3BlcnR5IG11c3QgYmUgYSBib29sZWFuIHZhbHVlJykpKSxuLmNhbnZhcz8ic3RyaW5nIj09dHlwZW9mIG4uY2FudmFzfHxuLmNhbnZhcyBpbnN0YW5jZW9mIHQud2luZG93LkhUTUxDYW52YXNFbGVtZW50fHx0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgdC5WYWxpZGF0aW9uRXJyb3IoInNvdXJjZXMuIityLG51bGwsJyJjYW52YXMiIG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgSUQgb2YgdGhlIGNhbnZhcyBlbGVtZW50IGZyb20gd2hpY2ggdG8gcmVhZCwgb3IgYW4gSFRNTENhbnZhc0VsZW1lbnQgaW5zdGFuY2UnKSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3IsbnVsbCwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiY2FudmFzIicpKSksdGhpcy5vcHRpb25zPW4sdGhpcy5hbmltYXRlPXZvaWQgMD09PW4uYW5pbWF0ZXx8bi5hbmltYXRlfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dGhpcy5fbG9hZGVkPSEwLHRoaXMuY2FudmFzfHwodGhpcy5jYW52YXM9dGhpcy5vcHRpb25zLmNhbnZhcyBpbnN0YW5jZW9mIHQud2luZG93LkhUTUxDYW52YXNFbGVtZW50P3RoaXMub3B0aW9ucy5jYW52YXM6dC53aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5vcHRpb25zLmNhbnZhcykpLHRoaXMud2lkdGg9dGhpcy5jYW52YXMud2lkdGgsdGhpcy5oZWlnaHQ9dGhpcy5jYW52YXMuaGVpZ2h0LHRoaXMuX2hhc0ludmFsaWREaW1lbnNpb25zKCk/dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJDYW52YXMgZGltZW5zaW9ucyBjYW5ub3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8uIikpKToodGhpcy5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5fcGxheWluZz0hMCx0aGlzLm1hcC50cmlnZ2VyUmVwYWludCgpfSx0aGlzLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5fcGxheWluZyYmKHRoaXMucHJlcGFyZSgpLHRoaXMuX3BsYXlpbmc9ITEpfSx0aGlzLl9maW5pc2hMb2FkaW5nKCkpfSxyLnByb3RvdHlwZS5nZXRDYW52YXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW52YXN9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCksdGhpcy5jYW52YXMmJnRoaXMuYW5pbWF0ZSYmdGhpcy5wbGF5KCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5wYXVzZSgpfSxyLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7dmFyIGU9ITE7aWYodGhpcy5jYW52YXMud2lkdGghPT10aGlzLndpZHRoJiYodGhpcy53aWR0aD10aGlzLmNhbnZhcy53aWR0aCxlPSEwKSx0aGlzLmNhbnZhcy5oZWlnaHQhPT10aGlzLmhlaWdodCYmKHRoaXMuaGVpZ2h0PXRoaXMuY2FudmFzLmhlaWdodCxlPSEwKSwhdGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKSYmMCE9PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aCl7dmFyIHI9dGhpcy5tYXAucGFpbnRlci5jb250ZXh0LG49ci5nbDtmb3IodmFyIGEgaW4gdGhpcy5ib3VuZHNCdWZmZXJ8fCh0aGlzLmJvdW5kc0J1ZmZlcj1yLmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSx0LnJhc3RlckJvdW5kc0F0dHJpYnV0ZXMubWVtYmVycykpLHRoaXMuYm91bmRzU2VnbWVudHN8fCh0aGlzLmJvdW5kc1NlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDIpKSx0aGlzLnRleHR1cmU/KGV8fHRoaXMuX3BsYXlpbmcpJiZ0aGlzLnRleHR1cmUudXBkYXRlKHRoaXMuY2FudmFzLHtwcmVtdWx0aXBseTohMH0pOnRoaXMudGV4dHVyZT1uZXcgdC5UZXh0dXJlKHIsdGhpcy5jYW52YXMsbi5SR0JBLHtwcmVtdWx0aXBseTohMH0pLHRoaXMudGlsZXMpe3ZhciBpPXRoaXMudGlsZXNbYV07ImxvYWRlZCIhPT1pLnN0YXRlJiYoaS5zdGF0ZT0ibG9hZGVkIixpLnRleHR1cmU9dGhpcy50ZXh0dXJlKX19fSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiY2FudmFzIixjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wbGF5aW5nfSxyLnByb3RvdHlwZS5faGFzSW52YWxpZERpbWVuc2lvbnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPVt0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHRdO3Q8ZS5sZW5ndGg7dCs9MSl7dmFyIHI9ZVt0XTtpZihpc05hTihyKXx8cjw9MClyZXR1cm4hMH1yZXR1cm4hMX0scn0oUCksST17dmVjdG9yOlMscmFzdGVyOkUsInJhc3Rlci1kZW0iOkwsZ2VvanNvbjpDLHZpZGVvOk8saW1hZ2U6UCxjYW52YXM6en0sRD1mdW5jdGlvbihlLHIsbixhKXt2YXIgaT1uZXcgSVtyLnR5cGVdKGUscixuLGEpO2lmKGkuaWQhPT1lKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgU291cmNlIGlkIHRvIGJlICIrZSsiIGluc3RlYWQgb2YgIitpLmlkKTtyZXR1cm4gdC5iaW5kQWxsKFsibG9hZCIsImFib3J0IiwidW5sb2FkIiwic2VyaWFsaXplIiwicHJlcGFyZSJdLGkpLGl9O2Z1bmN0aW9uIFIoZSxyKXt2YXIgbj10LmlkZW50aXR5KFtdKTtyZXR1cm4gdC50cmFuc2xhdGUobixuLFsxLDEsMF0pLHQuc2NhbGUobixuLFsuNSplLndpZHRoLC41KmUuaGVpZ2h0LDFdKSx0Lm11bHRpcGx5KG4sbixlLmNhbGN1bGF0ZVBvc01hdHJpeChyLnRvVW53cmFwcGVkKCkpKX1mdW5jdGlvbiBGKHQsZSxyLG4sYSl7dmFyIGk9ZnVuY3Rpb24odCxlLHIpe2lmKHQpZm9yKHZhciBuPTAsYT10O248YS5sZW5ndGg7bis9MSl7dmFyIGk9ZVthW25dXTtpZihpJiZpLnNvdXJjZT09PXImJiJmaWxsLWV4dHJ1c2lvbiI9PT1pLnR5cGUpcmV0dXJuITB9ZWxzZSBmb3IodmFyIG8gaW4gZSl7dmFyIHM9ZVtvXTtpZihzLnNvdXJjZT09PXImJiJmaWxsLWV4dHJ1c2lvbiI9PT1zLnR5cGUpcmV0dXJuITB9cmV0dXJuITF9KG4mJm4ubGF5ZXJzLGUsdC5pZCksbz1hLm1heFBpdGNoU2NhbGVGYWN0b3IoKSxzPXQudGlsZXNJbihyLG8saSk7cy5zb3J0KEIpO2Zvcih2YXIgbD1bXSxjPTAsdT1zO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXTtsLnB1c2goe3dyYXBwZWRUaWxlSUQ6aC50aWxlSUQud3JhcHBlZCgpLmtleSxxdWVyeVJlc3VsdHM6aC50aWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhlLHQuX3N0YXRlLGgucXVlcnlHZW9tZXRyeSxoLmNhbWVyYVF1ZXJ5R2VvbWV0cnksaC5zY2FsZSxuLGEsbyxSKHQudHJhbnNmb3JtLGgudGlsZUlEKSl9KX12YXIgZj1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj17fSxuPTAsYT10O248YS5sZW5ndGg7bis9MSl7dmFyIGk9YVtuXSxvPWkucXVlcnlSZXN1bHRzLHM9aS53cmFwcGVkVGlsZUlELGw9cltzXT1yW3NdfHx7fTtmb3IodmFyIGMgaW4gbylmb3IodmFyIHU9b1tjXSxoPWxbY109bFtjXXx8e30sZj1lW2NdPWVbY118fFtdLHA9MCxkPXU7cDxkLmxlbmd0aDtwKz0xKXt2YXIgZz1kW3BdO2hbZy5mZWF0dXJlSW5kZXhdfHwoaFtnLmZlYXR1cmVJbmRleF09ITAsZi5wdXNoKGcpKX19cmV0dXJuIGV9KGwpO2Zvcih2YXIgcCBpbiBmKWZbcF0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1lLmZlYXR1cmUsbj10LmdldEZlYXR1cmVTdGF0ZShyLmxheWVyWyJzb3VyY2UtbGF5ZXIiXSxyLmlkKTtyLnNvdXJjZT1yLmxheWVyLnNvdXJjZSxyLmxheWVyWyJzb3VyY2UtbGF5ZXIiXSYmKHIuc291cmNlTGF5ZXI9ci5sYXllclsic291cmNlLWxheWVyIl0pLHIuc3RhdGU9bn0pO3JldHVybiBmfWZ1bmN0aW9uIEIodCxlKXt2YXIgcj10LnRpbGVJRCxuPWUudGlsZUlEO3JldHVybiByLm92ZXJzY2FsZWRaLW4ub3ZlcnNjYWxlZFp8fHIuY2Fub25pY2FsLnktbi5jYW5vbmljYWwueXx8ci53cmFwLW4ud3JhcHx8ci5jYW5vbmljYWwueC1uLmNhbm9uaWNhbC54fXZhciBOPWZ1bmN0aW9uKHQsZSl7dGhpcy5tYXg9dCx0aGlzLm9uUmVtb3ZlPWUsdGhpcy5yZXNldCgpfTtOLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmRhdGEpZm9yKHZhciBlPTAscj10aGlzLmRhdGFbdF07ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO24udGltZW91dCYmY2xlYXJUaW1lb3V0KG4udGltZW91dCksdGhpcy5vblJlbW92ZShuLnZhbHVlKX1yZXR1cm4gdGhpcy5kYXRhPXt9LHRoaXMub3JkZXI9W10sdGhpc30sTi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGE9dC53cmFwcGVkKCkua2V5O3ZvaWQgMD09PXRoaXMuZGF0YVthXSYmKHRoaXMuZGF0YVthXT1bXSk7dmFyIGk9e3ZhbHVlOmUsdGltZW91dDp2b2lkIDB9O2lmKHZvaWQgMCE9PXImJihpLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe24ucmVtb3ZlKHQsaSl9LHIpKSx0aGlzLmRhdGFbYV0ucHVzaChpKSx0aGlzLm9yZGVyLnB1c2goYSksdGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXgpe3ZhciBvPXRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO28mJnRoaXMub25SZW1vdmUobyl9cmV0dXJuIHRoaXN9LE4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdC53cmFwcGVkKCkua2V5IGluIHRoaXMuZGF0YX0sTi5wcm90b3R5cGUuZ2V0QW5kUmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhcyh0KT90aGlzLl9nZXRBbmRSZW1vdmVCeUtleSh0LndyYXBwZWQoKS5rZXkpOm51bGx9LE4ucHJvdG90eXBlLl9nZXRBbmRSZW1vdmVCeUtleT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRhdGFbdF0uc2hpZnQoKTtyZXR1cm4gZS50aW1lb3V0JiZjbGVhclRpbWVvdXQoZS50aW1lb3V0KSwwPT09dGhpcy5kYXRhW3RdLmxlbmd0aCYmZGVsZXRlIHRoaXMuZGF0YVt0XSx0aGlzLm9yZGVyLnNwbGljZSh0aGlzLm9yZGVyLmluZGV4T2YodCksMSksZS52YWx1ZX0sTi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhcyh0KT90aGlzLmRhdGFbdC53cmFwcGVkKCkua2V5XVswXS52YWx1ZTpudWxsfSxOLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5oYXModCkpcmV0dXJuIHRoaXM7dmFyIHI9dC53cmFwcGVkKCkua2V5LG49dm9pZCAwPT09ZT8wOnRoaXMuZGF0YVtyXS5pbmRleE9mKGUpLGE9dGhpcy5kYXRhW3JdW25dO3JldHVybiB0aGlzLmRhdGFbcl0uc3BsaWNlKG4sMSksYS50aW1lb3V0JiZjbGVhclRpbWVvdXQoYS50aW1lb3V0KSwwPT09dGhpcy5kYXRhW3JdLmxlbmd0aCYmZGVsZXRlIHRoaXMuZGF0YVtyXSx0aGlzLm9uUmVtb3ZlKGEudmFsdWUpLHRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZihyKSwxKSx0aGlzfSxOLnByb3RvdHlwZS5zZXRNYXhTaXplPWZ1bmN0aW9uKHQpe2Zvcih0aGlzLm1heD10O3RoaXMub3JkZXIubGVuZ3RoPnRoaXMubWF4Oyl7dmFyIGU9dGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGhpcy5vcmRlclswXSk7ZSYmdGhpcy5vblJlbW92ZShlKX1yZXR1cm4gdGhpc307dmFyIGo9ZnVuY3Rpb24odCxlLHIpe3RoaXMuY29udGV4dD10O3ZhciBuPXQuZ2w7dGhpcy5idWZmZXI9bi5jcmVhdGVCdWZmZXIoKSx0aGlzLmR5bmFtaWNEcmF3PUJvb2xlYW4ociksdGhpcy5jb250ZXh0LnVuYmluZFZBTygpLHQuYmluZEVsZW1lbnRCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKSxuLmJ1ZmZlckRhdGEobi5FTEVNRU5UX0FSUkFZX0JVRkZFUixlLmFycmF5QnVmZmVyLHRoaXMuZHluYW1pY0RyYXc/bi5EWU5BTUlDX0RSQVc6bi5TVEFUSUNfRFJBVyksdGhpcy5keW5hbWljRHJhd3x8ZGVsZXRlIGUuYXJyYXlCdWZmZXJ9O2oucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuYmluZEVsZW1lbnRCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKX0sai5wcm90b3R5cGUudXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5jb250ZXh0LnVuYmluZFZBTygpLHRoaXMuYmluZCgpLGUuYnVmZmVyU3ViRGF0YShlLkVMRU1FTlRfQVJSQVlfQlVGRkVSLDAsdC5hcnJheUJ1ZmZlcil9LGoucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2w7dGhpcy5idWZmZXImJih0LmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlciksZGVsZXRlIHRoaXMuYnVmZmVyKX07dmFyIFY9e0ludDg6IkJZVEUiLFVpbnQ4OiJVTlNJR05FRF9CWVRFIixJbnQxNjoiU0hPUlQiLFVpbnQxNjoiVU5TSUdORURfU0hPUlQiLEludDMyOiJJTlQiLFVpbnQzMjoiVU5TSUdORURfSU5UIixGbG9hdDMyOiJGTE9BVCJ9LFU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5hdHRyaWJ1dGVzPXIsdGhpcy5pdGVtU2l6ZT1lLmJ5dGVzUGVyRWxlbWVudCx0aGlzLmR5bmFtaWNEcmF3PW4sdGhpcy5jb250ZXh0PXQ7dmFyIGE9dC5nbDt0aGlzLmJ1ZmZlcj1hLmNyZWF0ZUJ1ZmZlcigpLHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpLGEuYnVmZmVyRGF0YShhLkFSUkFZX0JVRkZFUixlLmFycmF5QnVmZmVyLHRoaXMuZHluYW1pY0RyYXc/YS5EWU5BTUlDX0RSQVc6YS5TVEFUSUNfRFJBVyksdGhpcy5keW5hbWljRHJhd3x8ZGVsZXRlIGUuYXJyYXlCdWZmZXJ9O1UucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpfSxVLnByb3RvdHlwZS51cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGV4dC5nbDt0aGlzLmJpbmQoKSxlLmJ1ZmZlclN1YkRhdGEoZS5BUlJBWV9CVUZGRVIsMCx0LmFycmF5QnVmZmVyKX0sVS5wcm90b3R5cGUuZW5hYmxlQXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtyKyspe3ZhciBuPXRoaXMuYXR0cmlidXRlc1tyXSxhPWUuYXR0cmlidXRlc1tuLm5hbWVdO3ZvaWQgMCE9PWEmJnQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYSl9fSxVLnByb3RvdHlwZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoO24rKyl7dmFyIGE9dGhpcy5hdHRyaWJ1dGVzW25dLGk9ZS5hdHRyaWJ1dGVzW2EubmFtZV07dm9pZCAwIT09aSYmdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGksYS5jb21wb25lbnRzLHRbVlthLnR5cGVdXSwhMSx0aGlzLml0ZW1TaXplLGEub2Zmc2V0K3RoaXMuaXRlbVNpemUqKHJ8fDApKX19LFUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2w7dGhpcy5idWZmZXImJih0LmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlciksZGVsZXRlIHRoaXMuYnVmZmVyKX07dmFyIHE9ZnVuY3Rpb24odCl7dGhpcy5nbD10LmdsLHRoaXMuZGVmYXVsdD10aGlzLmdldERlZmF1bHQoKSx0aGlzLmN1cnJlbnQ9dGhpcy5kZWZhdWx0LHRoaXMuZGlydHk9ITF9O3EucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnR9LHEucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt9LHEucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0fSxxLnByb3RvdHlwZS5zZXREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5zZXQodGhpcy5kZWZhdWx0KX07dmFyIEg9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcigpe2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuQ29sb3IudHJhbnNwYXJlbnR9LHIucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHQuciE9PWUucnx8dC5nIT09ZS5nfHx0LmIhPT1lLmJ8fHQuYSE9PWUuYXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmNsZWFyQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0scn0ocSksRz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuY2xlYXJEZXB0aCh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksWT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuY2xlYXJTdGVuY2lsKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShxKSxXPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVyblshMCwhMCwhMCwhMF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXXx8dFsyXSE9PWVbMl18fHRbM10hPT1lWzNdfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuY29sb3JNYXNrKHRbMF0sdFsxXSx0WzJdLHRbM10pLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShxKSxYPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5kZXB0aE1hc2sodCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KHEpLFo9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIDI1NX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuc3RlbmNpbE1hc2sodCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KHEpLEo9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJue2Z1bmM6dGhpcy5nbC5BTFdBWVMscmVmOjAsbWFzazoyNTV9fSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0LmZ1bmMhPT1lLmZ1bmN8fHQucmVmIT09ZS5yZWZ8fHQubWFzayE9PWUubWFza3x8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLnN0ZW5jaWxGdW5jKHQuZnVuYyx0LnJlZix0Lm1hc2spLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShxKSxLPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7cmV0dXJuW3QuS0VFUCx0LktFRVAsdC5LRUVQXX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdfHx0WzJdIT09ZVsyXXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLnN0ZW5jaWxPcCh0WzBdLHRbMV0sdFsyXSksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KHEpLFE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO3Q/ZS5lbmFibGUoZS5TVEVOQ0lMX1RFU1QpOmUuZGlzYWJsZShlLlNURU5DSUxfVEVTVCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KHEpLCQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuWzAsMV19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmRlcHRoUmFuZ2UodFswXSx0WzFdKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksdHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO3Q/ZS5lbmFibGUoZS5ERVBUSF9URVNUKTplLmRpc2FibGUoZS5ERVBUSF9URVNUKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0ocSksZXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2wuTEVTU30sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuZGVwdGhGdW5jKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShxKSxydD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7dD9lLmVuYWJsZShlLkJMRU5EKTplLmRpc2FibGUoZS5CTEVORCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KHEpLG50PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7cmV0dXJuW3QuT05FLHQuWkVST119LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmJsZW5kRnVuYyh0WzBdLHRbMV0pLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShxKSxhdD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5Db2xvci50cmFuc3BhcmVudH0sci5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodC5yIT09ZS5yfHx0LmchPT1lLmd8fHQuYiE9PWUuYnx8dC5hIT09ZS5hfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuYmxlbmRDb2xvcih0LnIsdC5nLHQuYix0LmEpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxyfShxKSxpdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5GVU5DX0FERH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuYmxlbmRFcXVhdGlvbih0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksb3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO3Q/ZS5lbmFibGUoZS5DVUxMX0ZBQ0UpOmUuZGlzYWJsZShlLkNVTExfRkFDRSksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KHEpLHN0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdsLkJBQ0t9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmN1bGxGYWNlKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShxKSxsdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5DQ1d9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmZyb250RmFjZSh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksY3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLnVzZVByb2dyYW0odCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KHEpLHV0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdsLlRFWFRVUkUwfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5hY3RpdmVUZXh0dXJlKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShxKSxodD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3JldHVyblswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodFswXSE9PWVbMF18fHRbMV0hPT1lWzFdfHx0WzJdIT09ZVsyXXx8dFszXSE9PWVbM118fHRoaXMuZGlydHkpJiYodGhpcy5nbC52aWV3cG9ydCh0WzBdLHRbMV0sdFsyXSx0WzNdKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSksZnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UuYmluZEZyYW1lYnVmZmVyKGUuRlJBTUVCVUZGRVIsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KHEpLHB0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDtlLmJpbmRSZW5kZXJidWZmZXIoZS5SRU5ERVJCVUZGRVIsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KHEpLGR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDtlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCx0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0ocSksZ3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UuYmluZEJ1ZmZlcihlLkFSUkFZX0JVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0ocSksdnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsO2UuYmluZEJ1ZmZlcihlLkVMRU1FTlRfQVJSQVlfQlVGRkVSLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9LGV9KHEpLG10PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSksdGhpcy52YW89ZS5leHRWZXJ0ZXhBcnJheU9iamVjdH1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy52YW8mJih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMudmFvLmJpbmRWZXJ0ZXhBcnJheU9FUyh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0ocSkseXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIDR9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfQUxJR05NRU5ULHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShxKSx4dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5waXhlbFN0b3JlaShlLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCx0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0ocSksYnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfRkxJUF9ZX1dFQkdMLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShxKSxfdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSksdGhpcy5jb250ZXh0PWUsdGhpcy5wYXJlbnQ9cn1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlfShxKSx3dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT0hMH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3RoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KHRoaXMucGFyZW50KTt2YXIgZT10aGlzLmdsO2UuZnJhbWVidWZmZXJUZXh0dXJlMkQoZS5GUkFNRUJVRkZFUixlLkNPTE9SX0FUVEFDSE1FTlQwLGUuVEVYVFVSRV8yRCx0LDApLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShfdCksa3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpO3ZhciBlPXRoaXMuZ2w7ZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihlLkZSQU1FQlVGRkVSLGUuREVQVEhfQVRUQUNITUVOVCxlLlJFTkRFUkJVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oX3QpLFR0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmNvbnRleHQ9dCx0aGlzLndpZHRoPWUsdGhpcy5oZWlnaHQ9cjt2YXIgbj10LmdsLGE9dGhpcy5mcmFtZWJ1ZmZlcj1uLmNyZWF0ZUZyYW1lYnVmZmVyKCk7dGhpcy5jb2xvckF0dGFjaG1lbnQ9bmV3IHd0KHQsYSksdGhpcy5kZXB0aEF0dGFjaG1lbnQ9bmV3IGt0KHQsYSl9O1R0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0LmdsLGU9dGhpcy5jb2xvckF0dGFjaG1lbnQuZ2V0KCk7ZSYmdC5kZWxldGVUZXh0dXJlKGUpO3ZhciByPXRoaXMuZGVwdGhBdHRhY2htZW50LmdldCgpO3ImJnQuZGVsZXRlUmVuZGVyYnVmZmVyKHIpLHQuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcil9O3ZhciBNdD1mdW5jdGlvbih0LGUscil7dGhpcy5mdW5jPXQsdGhpcy5tYXNrPWUsdGhpcy5yYW5nZT1yfTtNdC5SZWFkT25seT0hMSxNdC5SZWFkV3JpdGU9ITAsTXQuZGlzYWJsZWQ9bmV3IE10KDUxOSxNdC5SZWFkT25seSxbMCwxXSk7dmFyIEF0PWZ1bmN0aW9uKHQsZSxyLG4sYSxpKXt0aGlzLnRlc3Q9dCx0aGlzLnJlZj1lLHRoaXMubWFzaz1yLHRoaXMuZmFpbD1uLHRoaXMuZGVwdGhGYWlsPWEsdGhpcy5wYXNzPWl9O0F0LmRpc2FibGVkPW5ldyBBdCh7ZnVuYzo1MTksbWFzazowfSwwLDAsNzY4MCw3NjgwLDc2ODApO3ZhciBTdD1mdW5jdGlvbih0LGUscil7dGhpcy5ibGVuZEZ1bmN0aW9uPXQsdGhpcy5ibGVuZENvbG9yPWUsdGhpcy5tYXNrPXJ9O1N0LmRpc2FibGVkPW5ldyBTdChTdC5SZXBsYWNlPVsxLDBdLHQuQ29sb3IudHJhbnNwYXJlbnQsWyExLCExLCExLCExXSksU3QudW5ibGVuZGVkPW5ldyBTdChTdC5SZXBsYWNlLHQuQ29sb3IudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSksU3QuYWxwaGFCbGVuZGVkPW5ldyBTdChbMSw3NzFdLHQuQ29sb3IudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSk7dmFyIEV0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmVuYWJsZT10LHRoaXMubW9kZT1lLHRoaXMuZnJvbnRGYWNlPXJ9O0V0LmRpc2FibGVkPW5ldyBFdCghMSwxMDI5LDIzMDUpLEV0LmJhY2tDQ1c9bmV3IEV0KCEwLDEwMjksMjMwNSk7dmFyIEx0PWZ1bmN0aW9uKHQpe3RoaXMuZ2w9dCx0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0PXRoaXMuZ2wuZ2V0RXh0ZW5zaW9uKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLHRoaXMuY2xlYXJDb2xvcj1uZXcgSCh0aGlzKSx0aGlzLmNsZWFyRGVwdGg9bmV3IEcodGhpcyksdGhpcy5jbGVhclN0ZW5jaWw9bmV3IFkodGhpcyksdGhpcy5jb2xvck1hc2s9bmV3IFcodGhpcyksdGhpcy5kZXB0aE1hc2s9bmV3IFgodGhpcyksdGhpcy5zdGVuY2lsTWFzaz1uZXcgWih0aGlzKSx0aGlzLnN0ZW5jaWxGdW5jPW5ldyBKKHRoaXMpLHRoaXMuc3RlbmNpbE9wPW5ldyBLKHRoaXMpLHRoaXMuc3RlbmNpbFRlc3Q9bmV3IFEodGhpcyksdGhpcy5kZXB0aFJhbmdlPW5ldyAkKHRoaXMpLHRoaXMuZGVwdGhUZXN0PW5ldyB0dCh0aGlzKSx0aGlzLmRlcHRoRnVuYz1uZXcgZXQodGhpcyksdGhpcy5ibGVuZD1uZXcgcnQodGhpcyksdGhpcy5ibGVuZEZ1bmM9bmV3IG50KHRoaXMpLHRoaXMuYmxlbmRDb2xvcj1uZXcgYXQodGhpcyksdGhpcy5ibGVuZEVxdWF0aW9uPW5ldyBpdCh0aGlzKSx0aGlzLmN1bGxGYWNlPW5ldyBvdCh0aGlzKSx0aGlzLmN1bGxGYWNlU2lkZT1uZXcgc3QodGhpcyksdGhpcy5mcm9udEZhY2U9bmV3IGx0KHRoaXMpLHRoaXMucHJvZ3JhbT1uZXcgY3QodGhpcyksdGhpcy5hY3RpdmVUZXh0dXJlPW5ldyB1dCh0aGlzKSx0aGlzLnZpZXdwb3J0PW5ldyBodCh0aGlzKSx0aGlzLmJpbmRGcmFtZWJ1ZmZlcj1uZXcgZnQodGhpcyksdGhpcy5iaW5kUmVuZGVyYnVmZmVyPW5ldyBwdCh0aGlzKSx0aGlzLmJpbmRUZXh0dXJlPW5ldyBkdCh0aGlzKSx0aGlzLmJpbmRWZXJ0ZXhCdWZmZXI9bmV3IGd0KHRoaXMpLHRoaXMuYmluZEVsZW1lbnRCdWZmZXI9bmV3IHZ0KHRoaXMpLHRoaXMuYmluZFZlcnRleEFycmF5T0VTPXRoaXMuZXh0VmVydGV4QXJyYXlPYmplY3QmJm5ldyBtdCh0aGlzKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2s9bmV3IHl0KHRoaXMpLHRoaXMucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGE9bmV3IHh0KHRoaXMpLHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZPW5ldyBidCh0aGlzKSx0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz10LmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fHQuZ2V0RXh0ZW5zaW9uKCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fHQuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIiksdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMmJih0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY01heD10LmdldFBhcmFtZXRlcih0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpKSx0aGlzLmV4dFRleHR1cmVIYWxmRmxvYXQ9dC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSx0aGlzLmV4dFRleHR1cmVIYWxmRmxvYXQmJnQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpfTtMdC5wcm90b3R5cGUuc2V0RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMudW5iaW5kVkFPKCksdGhpcy5jbGVhckNvbG9yLnNldERlZmF1bHQoKSx0aGlzLmNsZWFyRGVwdGguc2V0RGVmYXVsdCgpLHRoaXMuY2xlYXJTdGVuY2lsLnNldERlZmF1bHQoKSx0aGlzLmNvbG9yTWFzay5zZXREZWZhdWx0KCksdGhpcy5kZXB0aE1hc2suc2V0RGVmYXVsdCgpLHRoaXMuc3RlbmNpbE1hc2suc2V0RGVmYXVsdCgpLHRoaXMuc3RlbmNpbEZ1bmMuc2V0RGVmYXVsdCgpLHRoaXMuc3RlbmNpbE9wLnNldERlZmF1bHQoKSx0aGlzLnN0ZW5jaWxUZXN0LnNldERlZmF1bHQoKSx0aGlzLmRlcHRoUmFuZ2Uuc2V0RGVmYXVsdCgpLHRoaXMuZGVwdGhUZXN0LnNldERlZmF1bHQoKSx0aGlzLmRlcHRoRnVuYy5zZXREZWZhdWx0KCksdGhpcy5ibGVuZC5zZXREZWZhdWx0KCksdGhpcy5ibGVuZEZ1bmMuc2V0RGVmYXVsdCgpLHRoaXMuYmxlbmRDb2xvci5zZXREZWZhdWx0KCksdGhpcy5ibGVuZEVxdWF0aW9uLnNldERlZmF1bHQoKSx0aGlzLmN1bGxGYWNlLnNldERlZmF1bHQoKSx0aGlzLmN1bGxGYWNlU2lkZS5zZXREZWZhdWx0KCksdGhpcy5mcm9udEZhY2Uuc2V0RGVmYXVsdCgpLHRoaXMucHJvZ3JhbS5zZXREZWZhdWx0KCksdGhpcy5hY3RpdmVUZXh0dXJlLnNldERlZmF1bHQoKSx0aGlzLmJpbmRGcmFtZWJ1ZmZlci5zZXREZWZhdWx0KCksdGhpcy5waXhlbFN0b3JlVW5wYWNrLnNldERlZmF1bHQoKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldERlZmF1bHQoKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2tGbGlwWS5zZXREZWZhdWx0KCl9LEx0LnByb3RvdHlwZS5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuY2xlYXJDb2xvci5kaXJ0eT0hMCx0aGlzLmNsZWFyRGVwdGguZGlydHk9ITAsdGhpcy5jbGVhclN0ZW5jaWwuZGlydHk9ITAsdGhpcy5jb2xvck1hc2suZGlydHk9ITAsdGhpcy5kZXB0aE1hc2suZGlydHk9ITAsdGhpcy5zdGVuY2lsTWFzay5kaXJ0eT0hMCx0aGlzLnN0ZW5jaWxGdW5jLmRpcnR5PSEwLHRoaXMuc3RlbmNpbE9wLmRpcnR5PSEwLHRoaXMuc3RlbmNpbFRlc3QuZGlydHk9ITAsdGhpcy5kZXB0aFJhbmdlLmRpcnR5PSEwLHRoaXMuZGVwdGhUZXN0LmRpcnR5PSEwLHRoaXMuZGVwdGhGdW5jLmRpcnR5PSEwLHRoaXMuYmxlbmQuZGlydHk9ITAsdGhpcy5ibGVuZEZ1bmMuZGlydHk9ITAsdGhpcy5ibGVuZENvbG9yLmRpcnR5PSEwLHRoaXMuYmxlbmRFcXVhdGlvbi5kaXJ0eT0hMCx0aGlzLmN1bGxGYWNlLmRpcnR5PSEwLHRoaXMuY3VsbEZhY2VTaWRlLmRpcnR5PSEwLHRoaXMuZnJvbnRGYWNlLmRpcnR5PSEwLHRoaXMucHJvZ3JhbS5kaXJ0eT0hMCx0aGlzLmFjdGl2ZVRleHR1cmUuZGlydHk9ITAsdGhpcy52aWV3cG9ydC5kaXJ0eT0hMCx0aGlzLmJpbmRGcmFtZWJ1ZmZlci5kaXJ0eT0hMCx0aGlzLmJpbmRSZW5kZXJidWZmZXIuZGlydHk9ITAsdGhpcy5iaW5kVGV4dHVyZS5kaXJ0eT0hMCx0aGlzLmJpbmRWZXJ0ZXhCdWZmZXIuZGlydHk9ITAsdGhpcy5iaW5kRWxlbWVudEJ1ZmZlci5kaXJ0eT0hMCx0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0JiYodGhpcy5iaW5kVmVydGV4QXJyYXlPRVMuZGlydHk9ITApLHRoaXMucGl4ZWxTdG9yZVVucGFjay5kaXJ0eT0hMCx0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLmRpcnR5PSEwLHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZLmRpcnR5PSEwfSxMdC5wcm90b3R5cGUuY3JlYXRlSW5kZXhCdWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGoodGhpcyx0LGUpfSxMdC5wcm90b3R5cGUuY3JlYXRlVmVydGV4QnVmZmVyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IFUodGhpcyx0LGUscil9LEx0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJidWZmZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2wsYT1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO3JldHVybiB0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KGEpLG4ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUix0LGUsciksdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChudWxsKSxhfSxMdC5wcm90b3R5cGUuY3JlYXRlRnJhbWVidWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFR0KHRoaXMsdCxlKX0sTHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY29sb3Iscj10LmRlcHRoLG49dGhpcy5nbCxhPTA7ZSYmKGF8PW4uQ09MT1JfQlVGRkVSX0JJVCx0aGlzLmNsZWFyQ29sb3Iuc2V0KGUpLHRoaXMuY29sb3JNYXNrLnNldChbITAsITAsITAsITBdKSksdm9pZCAwIT09ciYmKGF8PW4uREVQVEhfQlVGRkVSX0JJVCx0aGlzLmRlcHRoUmFuZ2Uuc2V0KFswLDFdKSx0aGlzLmNsZWFyRGVwdGguc2V0KHIpLHRoaXMuZGVwdGhNYXNrLnNldCghMCkpLG4uY2xlYXIoYSl9LEx0LnByb3RvdHlwZS5zZXRDdWxsRmFjZT1mdW5jdGlvbih0KXshMT09PXQuZW5hYmxlP3RoaXMuY3VsbEZhY2Uuc2V0KCExKToodGhpcy5jdWxsRmFjZS5zZXQoITApLHRoaXMuY3VsbEZhY2VTaWRlLnNldCh0Lm1vZGUpLHRoaXMuZnJvbnRGYWNlLnNldCh0LmZyb250RmFjZSkpfSxMdC5wcm90b3R5cGUuc2V0RGVwdGhNb2RlPWZ1bmN0aW9uKHQpe3QuZnVuYyE9PXRoaXMuZ2wuQUxXQVlTfHx0Lm1hc2s/KHRoaXMuZGVwdGhUZXN0LnNldCghMCksdGhpcy5kZXB0aEZ1bmMuc2V0KHQuZnVuYyksdGhpcy5kZXB0aE1hc2suc2V0KHQubWFzayksdGhpcy5kZXB0aFJhbmdlLnNldCh0LnJhbmdlKSk6dGhpcy5kZXB0aFRlc3Quc2V0KCExKX0sTHQucHJvdG90eXBlLnNldFN0ZW5jaWxNb2RlPWZ1bmN0aW9uKHQpe3QudGVzdC5mdW5jIT09dGhpcy5nbC5BTFdBWVN8fHQubWFzaz8odGhpcy5zdGVuY2lsVGVzdC5zZXQoITApLHRoaXMuc3RlbmNpbE1hc2suc2V0KHQubWFzayksdGhpcy5zdGVuY2lsT3Auc2V0KFt0LmZhaWwsdC5kZXB0aEZhaWwsdC5wYXNzXSksdGhpcy5zdGVuY2lsRnVuYy5zZXQoe2Z1bmM6dC50ZXN0LmZ1bmMscmVmOnQucmVmLG1hc2s6dC50ZXN0Lm1hc2t9KSk6dGhpcy5zdGVuY2lsVGVzdC5zZXQoITEpfSxMdC5wcm90b3R5cGUuc2V0Q29sb3JNb2RlPWZ1bmN0aW9uKGUpe3QuZGVlcEVxdWFsKGUuYmxlbmRGdW5jdGlvbixTdC5SZXBsYWNlKT90aGlzLmJsZW5kLnNldCghMSk6KHRoaXMuYmxlbmQuc2V0KCEwKSx0aGlzLmJsZW5kRnVuYy5zZXQoZS5ibGVuZEZ1bmN0aW9uKSx0aGlzLmJsZW5kQ29sb3Iuc2V0KGUuYmxlbmRDb2xvcikpLHRoaXMuY29sb3JNYXNrLnNldChlLm1hc2spfSxMdC5wcm90b3R5cGUudW5iaW5kVkFPPWZ1bmN0aW9uKCl7dGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdCYmdGhpcy5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KG51bGwpfTt2YXIgQ3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4sYSl7dmFyIGk9dGhpcztlLmNhbGwodGhpcyksdGhpcy5pZD1yLHRoaXMuZGlzcGF0Y2hlcj1hLHRoaXMub24oImRhdGEiLGZ1bmN0aW9uKHQpeyJzb3VyY2UiPT09dC5kYXRhVHlwZSYmIm1ldGFkYXRhIj09PXQuc291cmNlRGF0YVR5cGUmJihpLl9zb3VyY2VMb2FkZWQ9ITApLGkuX3NvdXJjZUxvYWRlZCYmIWkuX3BhdXNlZCYmInNvdXJjZSI9PT10LmRhdGFUeXBlJiYiY29udGVudCI9PT10LnNvdXJjZURhdGFUeXBlJiYoaS5yZWxvYWQoKSxpLnRyYW5zZm9ybSYmaS51cGRhdGUoaS50cmFuc2Zvcm0pKX0pLHRoaXMub24oImVycm9yIixmdW5jdGlvbigpe2kuX3NvdXJjZUVycm9yZWQ9ITB9KSx0aGlzLl9zb3VyY2U9RChyLG4sYSx0aGlzKSx0aGlzLl90aWxlcz17fSx0aGlzLl9jYWNoZT1uZXcgTigwLHRoaXMuX3VubG9hZFRpbGUuYmluZCh0aGlzKSksdGhpcy5fdGltZXJzPXt9LHRoaXMuX2NhY2hlVGltZXJzPXt9LHRoaXMuX21heFRpbGVDYWNoZVNpemU9bnVsbCx0aGlzLl9jb3ZlcmVkVGlsZXM9e30sdGhpcy5fc3RhdGU9bmV3IHQuU291cmNlRmVhdHVyZVN0YXRlfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMuX21heFRpbGVDYWNoZVNpemU9dD90Ll9tYXhUaWxlQ2FjaGVTaXplOm51bGwsdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2Uub25BZGQmJnRoaXMuX3NvdXJjZS5vbkFkZCh0KX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2Uub25SZW1vdmUmJnRoaXMuX3NvdXJjZS5vblJlbW92ZSh0KX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5fc291cmNlRXJyb3JlZClyZXR1cm4hMDtpZighdGhpcy5fc291cmNlTG9hZGVkKXJldHVybiExO2lmKCF0aGlzLl9zb3VyY2UubG9hZGVkKCkpcmV0dXJuITE7Zm9yKHZhciB0IGluIHRoaXMuX3RpbGVzKXt2YXIgZT10aGlzLl90aWxlc1t0XTtpZigibG9hZGVkIiE9PWUuc3RhdGUmJiJlcnJvcmVkIiE9PWUuc3RhdGUpcmV0dXJuITF9cmV0dXJuITB9LHIucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2V9LHIucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSEwfSxyLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtpZih0aGlzLl9wYXVzZWQpe3ZhciB0PXRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lO3RoaXMuX3BhdXNlZD0hMSx0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZT0hMSx0JiZ0aGlzLnJlbG9hZCgpLHRoaXMudHJhbnNmb3JtJiZ0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSl9fSxyLnByb3RvdHlwZS5fbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fc291cmNlLmxvYWRUaWxlKHQsZSl9LHIucHJvdG90eXBlLl91bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3NvdXJjZS51bmxvYWRUaWxlKXJldHVybiB0aGlzLl9zb3VyY2UudW5sb2FkVGlsZSh0LGZ1bmN0aW9uKCl7fSl9LHIucHJvdG90eXBlLl9hYm9ydFRpbGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fc291cmNlLmFib3J0VGlsZSlyZXR1cm4gdGhpcy5fc291cmNlLmFib3J0VGlsZSh0LGZ1bmN0aW9uKCl7fSl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2Uuc2VyaWFsaXplKCl9LHIucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX3NvdXJjZS5wcmVwYXJlJiZ0aGlzLl9zb3VyY2UucHJlcGFyZSgpLHRoaXMuX3N0YXRlLmNvYWxlc2NlQ2hhbmdlcyh0aGlzLl90aWxlcyx0aGlzLm1hcD90aGlzLm1hcC5wYWludGVyOm51bGwpLHRoaXMuX3RpbGVzKXt2YXIgcj10aGlzLl90aWxlc1tlXTtyLnVwbG9hZCh0KSxyLnByZXBhcmUodGhpcy5tYXAuc3R5bGUuaW1hZ2VNYW5hZ2VyKX19LHIucHJvdG90eXBlLmdldElkcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl90aWxlcykubWFwKE51bWJlcikuc29ydChQdCl9LHIucHJvdG90eXBlLmdldFJlbmRlcmFibGVJZHM9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPVtdO2Zvcih2YXIgYSBpbiB0aGlzLl90aWxlcyl0aGlzLl9pc0lkUmVuZGVyYWJsZSgrYSxlKSYmbi5wdXNoKCthKTtyZXR1cm4gZT9uLnNvcnQoZnVuY3Rpb24oZSxuKXt2YXIgYT1yLl90aWxlc1tlXS50aWxlSUQsaT1yLl90aWxlc1tuXS50aWxlSUQsbz1uZXcgdC5Qb2ludChhLmNhbm9uaWNhbC54LGEuY2Fub25pY2FsLnkpLl9yb3RhdGUoci50cmFuc2Zvcm0uYW5nbGUpLHM9bmV3IHQuUG9pbnQoaS5jYW5vbmljYWwueCxpLmNhbm9uaWNhbC55KS5fcm90YXRlKHIudHJhbnNmb3JtLmFuZ2xlKTtyZXR1cm4gYS5vdmVyc2NhbGVkWi1pLm92ZXJzY2FsZWRafHxzLnktby55fHxzLngtby54fSk6bi5zb3J0KFB0KX0sci5wcm90b3R5cGUuaGFzUmVuZGVyYWJsZVBhcmVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZpbmRMb2FkZWRQYXJlbnQodCwwKTtyZXR1cm4hIWUmJnRoaXMuX2lzSWRSZW5kZXJhYmxlKGUudGlsZUlELmtleSl9LHIucHJvdG90eXBlLl9pc0lkUmVuZGVyYWJsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl90aWxlc1t0XSYmdGhpcy5fdGlsZXNbdF0uaGFzRGF0YSgpJiYhdGhpcy5fY292ZXJlZFRpbGVzW3RdJiYoZXx8IXRoaXMuX3RpbGVzW3RdLmhvbGRpbmdGb3JGYWRlKCkpfSxyLnByb3RvdHlwZS5yZWxvYWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9wYXVzZWQpdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITA7ZWxzZSBmb3IodmFyIHQgaW4gdGhpcy5fY2FjaGUucmVzZXQoKSx0aGlzLl90aWxlcykiZXJyb3JlZCIhPT10aGlzLl90aWxlc1t0XS5zdGF0ZSYmdGhpcy5fcmVsb2FkVGlsZSh0LCJyZWxvYWRpbmciKX0sci5wcm90b3R5cGUuX3JlbG9hZFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl90aWxlc1t0XTtyJiYoImxvYWRpbmciIT09ci5zdGF0ZSYmKHIuc3RhdGU9ZSksdGhpcy5fbG9hZFRpbGUocix0aGlzLl90aWxlTG9hZGVkLmJpbmQodGhpcyxyLHQsZSkpKX0sci5wcm90b3R5cGUuX3RpbGVMb2FkZWQ9ZnVuY3Rpb24oZSxyLG4sYSl7aWYoYSlyZXR1cm4gZS5zdGF0ZT0iZXJyb3JlZCIsdm9pZCg0MDQhPT1hLnN0YXR1cz90aGlzLl9zb3VyY2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KGEse3RpbGU6ZX0pKTp0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSkpO2UudGltZUFkZGVkPXQuYnJvd3Nlci5ub3coKSwiZXhwaXJlZCI9PT1uJiYoZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbj0hMCksdGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKHIsZSksInJhc3Rlci1kZW0iPT09dGhpcy5nZXRTb3VyY2UoKS50eXBlJiZlLmRlbSYmdGhpcy5fYmFja2ZpbGxERU0oZSksdGhpcy5fc3RhdGUuaW5pdGlhbGl6ZVRpbGVTdGF0ZShlLHRoaXMubWFwP3RoaXMubWFwLnBhaW50ZXI6bnVsbCksdGhpcy5fc291cmNlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIix0aWxlOmUsY29vcmQ6ZS50aWxlSUR9KSl9LHIucHJvdG90eXBlLl9iYWNrZmlsbERFTT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5nZXRSZW5kZXJhYmxlSWRzKCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO2lmKHQubmVpZ2hib3JpbmdUaWxlcyYmdC5uZWlnaGJvcmluZ1RpbGVzW25dKXt2YXIgYT10aGlzLmdldFRpbGVCeUlEKG4pO2kodCxhKSxpKGEsdCl9fWZ1bmN0aW9uIGkodCxlKXt0Lm5lZWRzSGlsbHNoYWRlUHJlcGFyZT0hMDt2YXIgcj1lLnRpbGVJRC5jYW5vbmljYWwueC10LnRpbGVJRC5jYW5vbmljYWwueCxuPWUudGlsZUlELmNhbm9uaWNhbC55LXQudGlsZUlELmNhbm9uaWNhbC55LGE9TWF0aC5wb3coMix0LnRpbGVJRC5jYW5vbmljYWwueiksaT1lLnRpbGVJRC5rZXk7MD09PXImJjA9PT1ufHxNYXRoLmFicyhuKT4xfHwoTWF0aC5hYnMocik+MSYmKDE9PT1NYXRoLmFicyhyK2EpP3IrPWE6MT09PU1hdGguYWJzKHItYSkmJihyLT1hKSksZS5kZW0mJnQuZGVtJiYodC5kZW0uYmFja2ZpbGxCb3JkZXIoZS5kZW0scixuKSx0Lm5laWdoYm9yaW5nVGlsZXMmJnQubmVpZ2hib3JpbmdUaWxlc1tpXSYmKHQubmVpZ2hib3JpbmdUaWxlc1tpXS5iYWNrZmlsbGVkPSEwKSkpfX0sci5wcm90b3R5cGUuZ2V0VGlsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRUaWxlQnlJRCh0LmtleSl9LHIucHJvdG90eXBlLmdldFRpbGVCeUlEPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90aWxlc1t0XX0sci5wcm90b3R5cGUuZ2V0Wm9vbT1mdW5jdGlvbih0KXtyZXR1cm4gdC56b29tK3Quc2NhbGVab29tKHQudGlsZVNpemUvdGhpcy5fc291cmNlLnRpbGVTaXplKX0sci5wcm90b3R5cGUuX3JldGFpbkxvYWRlZENoaWxkcmVuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYSBpbiB0aGlzLl90aWxlcyl7dmFyIGk9dGhpcy5fdGlsZXNbYV07aWYoIShuW2FdfHwhaS5oYXNEYXRhKCl8fGkudGlsZUlELm92ZXJzY2FsZWRaPD1lfHxpLnRpbGVJRC5vdmVyc2NhbGVkWj5yKSl7Zm9yKHZhciBvPWkudGlsZUlEO2kmJmkudGlsZUlELm92ZXJzY2FsZWRaPmUrMTspe3ZhciBzPWkudGlsZUlELnNjYWxlZFRvKGkudGlsZUlELm92ZXJzY2FsZWRaLTEpOyhpPXRoaXMuX3RpbGVzW3Mua2V5XSkmJmkuaGFzRGF0YSgpJiYobz1zKX1mb3IodmFyIGw9bztsLm92ZXJzY2FsZWRaPmU7KWlmKHRbKGw9bC5zY2FsZWRUbyhsLm92ZXJzY2FsZWRaLTEpKS5rZXldKXtuW28ua2V5XT1vO2JyZWFrfX19fSxyLnByb3RvdHlwZS5maW5kTG9hZGVkUGFyZW50PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQub3ZlcnNjYWxlZFotMTtyPj1lO3ItLSl7dmFyIG49dC5zY2FsZWRUbyhyKTtpZighbilyZXR1cm47dmFyIGE9U3RyaW5nKG4ua2V5KSxpPXRoaXMuX3RpbGVzW2FdO2lmKGkmJmkuaGFzRGF0YSgpKXJldHVybiBpO2lmKHRoaXMuX2NhY2hlLmhhcyhuKSlyZXR1cm4gdGhpcy5fY2FjaGUuZ2V0KG4pfX0sci5wcm90b3R5cGUudXBkYXRlQ2FjaGVTaXplPWZ1bmN0aW9uKHQpe3ZhciBlPShNYXRoLmNlaWwodC53aWR0aC90aGlzLl9zb3VyY2UudGlsZVNpemUpKzEpKihNYXRoLmNlaWwodC5oZWlnaHQvdGhpcy5fc291cmNlLnRpbGVTaXplKSsxKSxyPU1hdGguZmxvb3IoNSplKSxuPSJudW1iZXIiPT10eXBlb2YgdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT9NYXRoLm1pbih0aGlzLl9tYXhUaWxlQ2FjaGVTaXplLHIpOnI7dGhpcy5fY2FjaGUuc2V0TWF4U2l6ZShuKX0sci5wcm90b3R5cGUuaGFuZGxlV3JhcEp1bXA9ZnVuY3Rpb24odCl7dmFyIGU9KHQtKHZvaWQgMD09PXRoaXMuX3ByZXZMbmc/dDp0aGlzLl9wcmV2TG5nKSkvMzYwLHI9TWF0aC5yb3VuZChlKTtpZih0aGlzLl9wcmV2TG5nPXQscil7dmFyIG49e307Zm9yKHZhciBhIGluIHRoaXMuX3RpbGVzKXt2YXIgaT10aGlzLl90aWxlc1thXTtpLnRpbGVJRD1pLnRpbGVJRC51bndyYXBUbyhpLnRpbGVJRC53cmFwK3IpLG5baS50aWxlSUQua2V5XT1pfWZvcih2YXIgbyBpbiB0aGlzLl90aWxlcz1uLHRoaXMuX3RpbWVycyljbGVhclRpbWVvdXQodGhpcy5fdGltZXJzW29dKSxkZWxldGUgdGhpcy5fdGltZXJzW29dO2Zvcih2YXIgcyBpbiB0aGlzLl90aWxlcyl7dmFyIGw9dGhpcy5fdGlsZXNbc107dGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKHMsbCl9fX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYodGhpcy50cmFuc2Zvcm09ZSx0aGlzLl9zb3VyY2VMb2FkZWQmJiF0aGlzLl9wYXVzZWQpe3ZhciBhO3RoaXMudXBkYXRlQ2FjaGVTaXplKGUpLHRoaXMuaGFuZGxlV3JhcEp1bXAodGhpcy50cmFuc2Zvcm0uY2VudGVyLmxuZyksdGhpcy5fY292ZXJlZFRpbGVzPXt9LHRoaXMudXNlZD90aGlzLl9zb3VyY2UudGlsZUlEP2E9ZS5nZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXModGhpcy5fc291cmNlLnRpbGVJRCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUuY2Fub25pY2FsLnosZS53cmFwLGUuY2Fub25pY2FsLnosZS5jYW5vbmljYWwueCxlLmNhbm9uaWNhbC55KX0pOihhPWUuY292ZXJpbmdUaWxlcyh7dGlsZVNpemU6dGhpcy5fc291cmNlLnRpbGVTaXplLG1pbnpvb206dGhpcy5fc291cmNlLm1pbnpvb20sbWF4em9vbTp0aGlzLl9zb3VyY2UubWF4em9vbSxyb3VuZFpvb206dGhpcy5fc291cmNlLnJvdW5kWm9vbSxyZXBhcnNlT3ZlcnNjYWxlZDp0aGlzLl9zb3VyY2UucmVwYXJzZU92ZXJzY2FsZWR9KSx0aGlzLl9zb3VyY2UuaGFzVGlsZSYmKGE9YS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIG4uX3NvdXJjZS5oYXNUaWxlKHQpfSkpKTphPVtdO3ZhciBpPSh0aGlzLl9zb3VyY2Uucm91bmRab29tP01hdGgucm91bmQ6TWF0aC5mbG9vcikodGhpcy5nZXRab29tKGUpKSxvPU1hdGgubWF4KGktci5tYXhPdmVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSkscz1NYXRoLm1heChpK3IubWF4VW5kZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSxsPXRoaXMuX3VwZGF0ZVJldGFpbmVkVGlsZXMoYSxpKTtpZihPdCh0aGlzLl9zb3VyY2UudHlwZSkpe2Zvcih2YXIgYz17fSx1PXt9LGg9MCxmPU9iamVjdC5rZXlzKGwpO2g8Zi5sZW5ndGg7aCs9MSl7dmFyIHA9ZltoXSxkPWxbcF0sZz10aGlzLl90aWxlc1twXTtpZihnJiYhKGcuZmFkZUVuZFRpbWUmJmcuZmFkZUVuZFRpbWU8PXQuYnJvd3Nlci5ub3coKSkpe3ZhciB2PXRoaXMuZmluZExvYWRlZFBhcmVudChkLG8pO3YmJih0aGlzLl9hZGRUaWxlKHYudGlsZUlEKSxjW3YudGlsZUlELmtleV09di50aWxlSUQpLHVbcF09ZH19Zm9yKHZhciBtIGluIHRoaXMuX3JldGFpbkxvYWRlZENoaWxkcmVuKHUsaSxzLGwpLGMpbFttXXx8KHRoaXMuX2NvdmVyZWRUaWxlc1ttXT0hMCxsW21dPWNbbV0pfWZvcih2YXIgeSBpbiBsKXRoaXMuX3RpbGVzW3ldLmNsZWFyRmFkZUhvbGQoKTtmb3IodmFyIHg9MCxiPXQua2V5c0RpZmZlcmVuY2UodGhpcy5fdGlsZXMsbCk7eDxiLmxlbmd0aDt4Kz0xKXt2YXIgXz1iW3hdLHc9dGhpcy5fdGlsZXNbX107dy5oYXNTeW1ib2xCdWNrZXRzJiYhdy5ob2xkaW5nRm9yRmFkZSgpP3cuc2V0SG9sZER1cmF0aW9uKHRoaXMubWFwLl9mYWRlRHVyYXRpb24pOncuaGFzU3ltYm9sQnVja2V0cyYmIXcuc3ltYm9sRmFkZUZpbmlzaGVkKCl8fHRoaXMuX3JlbW92ZVRpbGUoXyl9fX0sci5wcm90b3R5cGUucmVsZWFzZVN5bWJvbEZhZGVUaWxlcz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl0aGlzLl90aWxlc1t0XS5ob2xkaW5nRm9yRmFkZSgpJiZ0aGlzLl9yZW1vdmVUaWxlKHQpfSxyLnByb3RvdHlwZS5fdXBkYXRlUmV0YWluZWRUaWxlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj17fSxhPXt9LGk9TWF0aC5tYXgoZS1yLm1heE92ZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSxvPU1hdGgubWF4KGUrci5tYXhVbmRlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLHM9e30sbD0wLGM9dDtsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF0saD10aGlzLl9hZGRUaWxlKHUpO25bdS5rZXldPXUsaC5oYXNEYXRhKCl8fGU8dGhpcy5fc291cmNlLm1heHpvb20mJihzW3Uua2V5XT11KX10aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbihzLGUsbyxuKTtmb3IodmFyIGY9MCxwPXQ7ZjxwLmxlbmd0aDtmKz0xKXt2YXIgZD1wW2ZdLGc9dGhpcy5fdGlsZXNbZC5rZXldO2lmKCFnLmhhc0RhdGEoKSl7aWYoZSsxPnRoaXMuX3NvdXJjZS5tYXh6b29tKXt2YXIgdj1kLmNoaWxkcmVuKHRoaXMuX3NvdXJjZS5tYXh6b29tKVswXSxtPXRoaXMuZ2V0VGlsZSh2KTtpZihtJiZtLmhhc0RhdGEoKSl7blt2LmtleV09djtjb250aW51ZX19ZWxzZXt2YXIgeT1kLmNoaWxkcmVuKHRoaXMuX3NvdXJjZS5tYXh6b29tKTtpZihuW3lbMF0ua2V5XSYmblt5WzFdLmtleV0mJm5beVsyXS5rZXldJiZuW3lbM10ua2V5XSljb250aW51ZX1mb3IodmFyIHg9Zy53YXNSZXF1ZXN0ZWQoKSxiPWQub3ZlcnNjYWxlZFotMTtiPj1pOy0tYil7dmFyIF89ZC5zY2FsZWRUbyhiKTtpZihhW18ua2V5XSlicmVhaztpZihhW18ua2V5XT0hMCwhKGc9dGhpcy5nZXRUaWxlKF8pKSYmeCYmKGc9dGhpcy5fYWRkVGlsZShfKSksZyYmKG5bXy5rZXldPV8seD1nLndhc1JlcXVlc3RlZCgpLGcuaGFzRGF0YSgpKSlicmVha319fXJldHVybiBufSxyLnByb3RvdHlwZS5fYWRkVGlsZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl90aWxlc1tlLmtleV07aWYocilyZXR1cm4gcjsocj10aGlzLl9jYWNoZS5nZXRBbmRSZW1vdmUoZSkpJiYodGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKGUua2V5LHIpLHIudGlsZUlEPWUsdGhpcy5fc3RhdGUuaW5pdGlhbGl6ZVRpbGVTdGF0ZShyLHRoaXMubWFwP3RoaXMubWFwLnBhaW50ZXI6bnVsbCksdGhpcy5fY2FjaGVUaW1lcnNbZS5rZXldJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2NhY2hlVGltZXJzW2Uua2V5XSksZGVsZXRlIHRoaXMuX2NhY2hlVGltZXJzW2Uua2V5XSx0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIoZS5rZXkscikpKTt2YXIgbj1Cb29sZWFuKHIpO3JldHVybiBufHwocj1uZXcgdC5UaWxlKGUsdGhpcy5fc291cmNlLnRpbGVTaXplKmUub3ZlcnNjYWxlRmFjdG9yKCkpLHRoaXMuX2xvYWRUaWxlKHIsdGhpcy5fdGlsZUxvYWRlZC5iaW5kKHRoaXMscixlLmtleSxyLnN0YXRlKSkpLHI/KHIudXNlcysrLHRoaXMuX3RpbGVzW2Uua2V5XT1yLG58fHRoaXMuX3NvdXJjZS5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse3RpbGU6cixjb29yZDpyLnRpbGVJRCxkYXRhVHlwZToic291cmNlIn0pKSxyKTpudWxsfSxyLnByb3RvdHlwZS5fc2V0VGlsZVJlbG9hZFRpbWVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpczt0IGluIHRoaXMuX3RpbWVycyYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbdF0pLGRlbGV0ZSB0aGlzLl90aW1lcnNbdF0pO3ZhciBuPWUuZ2V0RXhwaXJ5VGltZW91dCgpO24mJih0aGlzLl90aW1lcnNbdF09c2V0VGltZW91dChmdW5jdGlvbigpe3IuX3JlbG9hZFRpbGUodCwiZXhwaXJlZCIpLGRlbGV0ZSByLl90aW1lcnNbdF19LG4pKX0sci5wcm90b3R5cGUuX3JlbW92ZVRpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZXNbdF07ZSYmKGUudXNlcy0tLGRlbGV0ZSB0aGlzLl90aWxlc1t0XSx0aGlzLl90aW1lcnNbdF0mJihjbGVhclRpbWVvdXQodGhpcy5fdGltZXJzW3RdKSxkZWxldGUgdGhpcy5fdGltZXJzW3RdKSxlLnVzZXM+MHx8KGUuaGFzRGF0YSgpJiYicmVsb2FkaW5nIiE9PWUuc3RhdGU/dGhpcy5fY2FjaGUuYWRkKGUudGlsZUlELGUsZS5nZXRFeHBpcnlUaW1lb3V0KCkpOihlLmFib3J0ZWQ9ITAsdGhpcy5fYWJvcnRUaWxlKGUpLHRoaXMuX3VubG9hZFRpbGUoZSkpKSl9LHIucHJvdG90eXBlLmNsZWFyVGlsZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITEsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3RpbGVzKXRoaXMuX3JlbW92ZVRpbGUodCk7dGhpcy5fY2FjaGUucmVzZXQoKX0sci5wcm90b3R5cGUudGlsZXNJbj1mdW5jdGlvbihlLHIsbil7dmFyIGE9dGhpcyxpPVtdLG89dGhpcy50cmFuc2Zvcm07aWYoIW8pcmV0dXJuIGk7Zm9yKHZhciBzPW4/by5nZXRDYW1lcmFRdWVyeUdlb21ldHJ5KGUpOmUsbD1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gby5wb2ludENvb3JkaW5hdGUodCl9KSxjPXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50Q29vcmRpbmF0ZSh0KX0pLHU9dGhpcy5nZXRJZHMoKSxoPTEvMCxmPTEvMCxwPS0xLzAsZD0tMS8wLGc9MCx2PWM7Zzx2Lmxlbmd0aDtnKz0xKXt2YXIgbT12W2ddO2g9TWF0aC5taW4oaCxtLngpLGY9TWF0aC5taW4oZixtLnkpLHA9TWF0aC5tYXgocCxtLngpLGQ9TWF0aC5tYXgoZCxtLnkpfWZvcih2YXIgeT1mdW5jdGlvbihlKXt2YXIgbj1hLl90aWxlc1t1W2VdXTtpZighbi5ob2xkaW5nRm9yRmFkZSgpKXt2YXIgcz1uLnRpbGVJRCxnPU1hdGgucG93KDIsby56b29tLW4udGlsZUlELm92ZXJzY2FsZWRaKSx2PXIqbi5xdWVyeVBhZGRpbmcqdC5FWFRFTlQvbi50aWxlU2l6ZS9nLG09W3MuZ2V0VGlsZVBvaW50KG5ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZShoLGYpKSxzLmdldFRpbGVQb2ludChuZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUocCxkKSldO2lmKG1bMF0ueC12PHQuRVhURU5UJiZtWzBdLnktdjx0LkVYVEVOVCYmbVsxXS54K3Y+PTAmJm1bMV0ueSt2Pj0wKXt2YXIgeT1sLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcy5nZXRUaWxlUG9pbnQodCl9KSx4PWMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBzLmdldFRpbGVQb2ludCh0KX0pO2kucHVzaCh7dGlsZTpuLHRpbGVJRDpzLHF1ZXJ5R2VvbWV0cnk6eSxjYW1lcmFRdWVyeUdlb21ldHJ5Ongsc2NhbGU6Z30pfX19LHg9MDt4PHUubGVuZ3RoO3grKyl5KHgpO3JldHVybiBpfSxyLnByb3RvdHlwZS5nZXRWaXNpYmxlQ29vcmRpbmF0ZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj10aGlzLmdldFJlbmRlcmFibGVJZHModCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90aWxlc1t0XS50aWxlSUR9KSxuPTAsYT1yO248YS5sZW5ndGg7bis9MSl7dmFyIGk9YVtuXTtpLnBvc01hdHJpeD10aGlzLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoaS50b1Vud3JhcHBlZCgpKX1yZXR1cm4gcn0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuX3NvdXJjZS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7aWYoT3QodGhpcy5fc291cmNlLnR5cGUpKWZvcih2YXIgZSBpbiB0aGlzLl90aWxlcyl7dmFyIHI9dGhpcy5fdGlsZXNbZV07aWYodm9pZCAwIT09ci5mYWRlRW5kVGltZSYmci5mYWRlRW5kVGltZT49dC5icm93c2VyLm5vdygpKXJldHVybiEwfXJldHVybiExfSxyLnByb3RvdHlwZS5zZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCxlLHIpe3Q9dHx8Il9nZW9qc29uVGlsZUxheWVyIix0aGlzLl9zdGF0ZS51cGRhdGVTdGF0ZSh0LGUscil9LHIucHJvdG90eXBlLnJlbW92ZUZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0LGUscil7dD10fHwiX2dlb2pzb25UaWxlTGF5ZXIiLHRoaXMuX3N0YXRlLnJlbW92ZUZlYXR1cmVTdGF0ZSh0LGUscil9LHIucHJvdG90eXBlLmdldEZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0PXR8fCJfZ2VvanNvblRpbGVMYXllciIsdGhpcy5fc3RhdGUuZ2V0U3RhdGUodCxlKX0scn0odC5FdmVudGVkKTtmdW5jdGlvbiBQdCh0LGUpe3JldHVybiB0JTMyLWUlMzJ8fGUtdH1mdW5jdGlvbiBPdCh0KXtyZXR1cm4icmFzdGVyIj09PXR8fCJpbWFnZSI9PT10fHwidmlkZW8iPT09dH1mdW5jdGlvbiB6dCgpe3JldHVybiBuZXcgdC53aW5kb3cuV29ya2VyKCRuLndvcmtlclVybCl9Q3QubWF4T3Zlcnpvb21pbmc9MTAsQ3QubWF4VW5kZXJ6b29taW5nPTM7dmFyIEl0PWZ1bmN0aW9uKCl7dGhpcy5hY3RpdmU9e319O0l0LnByb3RvdHlwZS5hY3F1aXJlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLndvcmtlcnMpZm9yKHRoaXMud29ya2Vycz1bXTt0aGlzLndvcmtlcnMubGVuZ3RoPEl0LndvcmtlckNvdW50Oyl0aGlzLndvcmtlcnMucHVzaChuZXcgenQpO3JldHVybiB0aGlzLmFjdGl2ZVt0XT0hMCx0aGlzLndvcmtlcnMuc2xpY2UoKX0sSXQucHJvdG90eXBlLnJlbGVhc2U9ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMuYWN0aXZlW3RdLDA9PT1PYmplY3Qua2V5cyh0aGlzLmFjdGl2ZSkubGVuZ3RoJiYodGhpcy53b3JrZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC50ZXJtaW5hdGUoKX0pLHRoaXMud29ya2Vycz1udWxsKX07dmFyIER0LFJ0PU1hdGguZmxvb3IodC5icm93c2VyLmhhcmR3YXJlQ29uY3VycmVuY3kvMik7ZnVuY3Rpb24gRnQoZSxyKXt2YXIgbj17fTtmb3IodmFyIGEgaW4gZSkicmVmIiE9PWEmJihuW2FdPWVbYV0pO3JldHVybiB0LnJlZlByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0IGluIHImJihuW3RdPXJbdF0pfSksbn1mdW5jdGlvbiBCdCh0KXt0PXQuc2xpY2UoKTtmb3IodmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPTA7cjx0Lmxlbmd0aDtyKyspZVt0W3JdLmlkXT10W3JdO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKSJyZWYiaW4gdFtuXSYmKHRbbl09RnQodFtuXSxlW3Rbbl0ucmVmXSkpO3JldHVybiB0fUl0LndvcmtlckNvdW50PU1hdGgubWF4KE1hdGgubWluKFJ0LDYpLDEpO3ZhciBOdD17c2V0U3R5bGU6InNldFN0eWxlIixhZGRMYXllcjoiYWRkTGF5ZXIiLHJlbW92ZUxheWVyOiJyZW1vdmVMYXllciIsc2V0UGFpbnRQcm9wZXJ0eToic2V0UGFpbnRQcm9wZXJ0eSIsc2V0TGF5b3V0UHJvcGVydHk6InNldExheW91dFByb3BlcnR5IixzZXRGaWx0ZXI6InNldEZpbHRlciIsYWRkU291cmNlOiJhZGRTb3VyY2UiLHJlbW92ZVNvdXJjZToicmVtb3ZlU291cmNlIixzZXRHZW9KU09OU291cmNlRGF0YToic2V0R2VvSlNPTlNvdXJjZURhdGEiLHNldExheWVyWm9vbVJhbmdlOiJzZXRMYXllclpvb21SYW5nZSIsc2V0TGF5ZXJQcm9wZXJ0eToic2V0TGF5ZXJQcm9wZXJ0eSIsc2V0Q2VudGVyOiJzZXRDZW50ZXIiLHNldFpvb206InNldFpvb20iLHNldEJlYXJpbmc6InNldEJlYXJpbmciLHNldFBpdGNoOiJzZXRQaXRjaCIsc2V0U3ByaXRlOiJzZXRTcHJpdGUiLHNldEdseXBoczoic2V0R2x5cGhzIixzZXRUcmFuc2l0aW9uOiJzZXRUcmFuc2l0aW9uIixzZXRMaWdodDoic2V0TGlnaHQifTtmdW5jdGlvbiBqdCh0LGUscil7ci5wdXNoKHtjb21tYW5kOk50LmFkZFNvdXJjZSxhcmdzOlt0LGVbdF1dfSl9ZnVuY3Rpb24gVnQodCxlLHIpe2UucHVzaCh7Y29tbWFuZDpOdC5yZW1vdmVTb3VyY2UsYXJnczpbdF19KSxyW3RdPSEwfWZ1bmN0aW9uIFV0KHQsZSxyLG4pe1Z0KHQscixuKSxqdCh0LGUscil9ZnVuY3Rpb24gcXQoZSxyLG4pe3ZhciBhO2ZvcihhIGluIGVbbl0paWYoZVtuXS5oYXNPd25Qcm9wZXJ0eShhKSYmImRhdGEiIT09YSYmIXQuZGVlcEVxdWFsKGVbbl1bYV0scltuXVthXSkpcmV0dXJuITE7Zm9yKGEgaW4gcltuXSlpZihyW25dLmhhc093blByb3BlcnR5KGEpJiYiZGF0YSIhPT1hJiYhdC5kZWVwRXF1YWwoZVtuXVthXSxyW25dW2FdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBIdChlLHIsbixhLGksbyl7dmFyIHM7Zm9yKHMgaW4gcj1yfHx7fSxlPWV8fHt9KWUuaGFzT3duUHJvcGVydHkocykmJih0LmRlZXBFcXVhbChlW3NdLHJbc10pfHxuLnB1c2goe2NvbW1hbmQ6byxhcmdzOlthLHMscltzXSxpXX0pKTtmb3IocyBpbiByKXIuaGFzT3duUHJvcGVydHkocykmJiFlLmhhc093blByb3BlcnR5KHMpJiYodC5kZWVwRXF1YWwoZVtzXSxyW3NdKXx8bi5wdXNoKHtjb21tYW5kOm8sYXJnczpbYSxzLHJbc10saV19KSl9ZnVuY3Rpb24gR3QodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gWXQodCxlKXtyZXR1cm4gdFtlLmlkXT1lLHR9dmFyIFd0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmJveENlbGxzPVtdLGE9dGhpcy5jaXJjbGVDZWxscz1bXTt0aGlzLnhDZWxsQ291bnQ9TWF0aC5jZWlsKHQvciksdGhpcy55Q2VsbENvdW50PU1hdGguY2VpbChlL3IpO2Zvcih2YXIgaT0wO2k8dGhpcy54Q2VsbENvdW50KnRoaXMueUNlbGxDb3VudDtpKyspbi5wdXNoKFtdKSxhLnB1c2goW10pO3RoaXMuY2lyY2xlS2V5cz1bXSx0aGlzLmJveEtleXM9W10sdGhpcy5iYm94ZXM9W10sdGhpcy5jaXJjbGVzPVtdLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMueFNjYWxlPXRoaXMueENlbGxDb3VudC90LHRoaXMueVNjYWxlPXRoaXMueUNlbGxDb3VudC9lLHRoaXMuYm94VWlkPTAsdGhpcy5jaXJjbGVVaWQ9MH07ZnVuY3Rpb24gWHQoZSxyLG4sYSxpKXt2YXIgbz10LmNyZWF0ZSgpO3JldHVybiByPyh0LnNjYWxlKG8sbyxbMS9pLDEvaSwxXSksbnx8dC5yb3RhdGVaKG8sbyxhLmFuZ2xlKSk6dC5tdWx0aXBseShvLGEubGFiZWxQbGFuZU1hdHJpeCxlKSxvfWZ1bmN0aW9uIFp0KGUscixuLGEsaSl7aWYocil7dmFyIG89dC5jbG9uZShlKTtyZXR1cm4gdC5zY2FsZShvLG8sW2ksaSwxXSksbnx8dC5yb3RhdGVaKG8sbywtYS5hbmdsZSksb31yZXR1cm4gYS5nbENvb3JkTWF0cml4fWZ1bmN0aW9uIEp0KGUscil7dmFyIG49W2UueCxlLnksMCwxXTtvZShuLG4scik7dmFyIGE9blszXTtyZXR1cm57cG9pbnQ6bmV3IHQuUG9pbnQoblswXS9hLG5bMV0vYSksc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhOmF9fWZ1bmN0aW9uIEt0KHQsZSl7dmFyIHI9dFswXS90WzNdLG49dFsxXS90WzNdO3JldHVybiByPj0tZVswXSYmcjw9ZVswXSYmbj49LWVbMV0mJm48PWVbMV19ZnVuY3Rpb24gUXQoZSxyLG4sYSxpLG8scyxsKXt2YXIgYz1hP2UudGV4dFNpemVEYXRhOmUuaWNvblNpemVEYXRhLHU9dC5ldmFsdWF0ZVNpemVGb3Jab29tKGMsbi50cmFuc2Zvcm0uem9vbSksaD1bMjU2L24ud2lkdGgqMisxLDI1Ni9uLmhlaWdodCoyKzFdLGY9YT9lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEFycmF5OmUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk7Zi5jbGVhcigpO2Zvcih2YXIgcD1lLmxpbmVWZXJ0ZXhBcnJheSxkPWE/ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5OmUuaWNvbi5wbGFjZWRTeW1ib2xBcnJheSxnPW4udHJhbnNmb3JtLndpZHRoL24udHJhbnNmb3JtLmhlaWdodCx2PSExLG09MDttPGQubGVuZ3RoO20rKyl7dmFyIHk9ZC5nZXQobSk7aWYoeS5oaWRkZW58fHkud3JpdGluZ01vZGU9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsJiYhdilpZSh5Lm51bUdseXBocyxmKTtlbHNle3Y9ITE7dmFyIHg9W3kuYW5jaG9yWCx5LmFuY2hvclksMCwxXTtpZih0LnRyYW5zZm9ybU1hdDQoeCx4LHIpLEt0KHgsaCkpe3ZhciBiPS41K3hbM10vbi50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSouNSxfPXQuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShjLHUseSksdz1zP18qYjpfL2Isaz1uZXcgdC5Qb2ludCh5LmFuY2hvclgseS5hbmNob3JZKSxUPUp0KGssaSkucG9pbnQsTT17fSxBPWVlKHksdywhMSxsLHIsaSxvLGUuZ2x5cGhPZmZzZXRBcnJheSxwLGYsVCxrLE0sZyk7dj1BLnVzZVZlcnRpY2FsLChBLm5vdEVub3VnaFJvb218fHZ8fEEubmVlZHNGbGlwcGluZyYmZWUoeSx3LCEwLGwscixpLG8sZS5nbHlwaE9mZnNldEFycmF5LHAsZixULGssTSxnKS5ub3RFbm91Z2hSb29tKSYmaWUoeS5udW1HbHlwaHMsZil9ZWxzZSBpZSh5Lm51bUdseXBocyxmKX19YT9lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGYpOmUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZil9ZnVuY3Rpb24gJHQodCxlLHIsbixhLGksbyxzLGwsYyx1LGgpe3ZhciBmPXMuZ2x5cGhTdGFydEluZGV4K3MubnVtR2x5cGhzLHA9cy5saW5lU3RhcnRJbmRleCxkPXMubGluZVN0YXJ0SW5kZXgrcy5saW5lTGVuZ3RoLGc9ZS5nZXRvZmZzZXRYKHMuZ2x5cGhTdGFydEluZGV4KSx2PWUuZ2V0b2Zmc2V0WChmLTEpLG09bmUodCpnLHIsbixhLGksbyxzLnNlZ21lbnQscCxkLGwsYyx1LGgpO2lmKCFtKXJldHVybiBudWxsO3ZhciB5PW5lKHQqdixyLG4sYSxpLG8scy5zZWdtZW50LHAsZCxsLGMsdSxoKTtyZXR1cm4geT97Zmlyc3Q6bSxsYXN0Onl9Om51bGx9ZnVuY3Rpb24gdGUoZSxyLG4sYSl7cmV0dXJuIGU9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWwmJk1hdGguYWJzKG4ueS1yLnkpPk1hdGguYWJzKG4ueC1yLngpKmE/e3VzZVZlcnRpY2FsOiEwfTooZT09PXQuV3JpdGluZ01vZGUudmVydGljYWw/ci55PG4ueTpyLng+bi54KT97bmVlZHNGbGlwcGluZzohMH06bnVsbH1mdW5jdGlvbiBlZShlLHIsbixhLGksbyxzLGwsYyx1LGgsZixwLGQpe3ZhciBnLHY9ci8yNCxtPWUubGluZU9mZnNldFgqdix5PWUubGluZU9mZnNldFkqdjtpZihlLm51bUdseXBocz4xKXt2YXIgeD1lLmdseXBoU3RhcnRJbmRleCtlLm51bUdseXBocyxiPWUubGluZVN0YXJ0SW5kZXgsXz1lLmxpbmVTdGFydEluZGV4K2UubGluZUxlbmd0aCx3PSR0KHYsbCxtLHksbixoLGYsZSxjLG8scCwhMSk7aWYoIXcpcmV0dXJue25vdEVub3VnaFJvb206ITB9O3ZhciBrPUp0KHcuZmlyc3QucG9pbnQscykucG9pbnQsVD1KdCh3Lmxhc3QucG9pbnQscykucG9pbnQ7aWYoYSYmIW4pe3ZhciBNPXRlKGUud3JpdGluZ01vZGUsayxULGQpO2lmKE0pcmV0dXJuIE19Zz1bdy5maXJzdF07Zm9yKHZhciBBPWUuZ2x5cGhTdGFydEluZGV4KzE7QTx4LTE7QSsrKWcucHVzaChuZSh2KmwuZ2V0b2Zmc2V0WChBKSxtLHksbixoLGYsZS5zZWdtZW50LGIsXyxjLG8scCwhMSkpO2cucHVzaCh3Lmxhc3QpfWVsc2V7aWYoYSYmIW4pe3ZhciBTPUp0KGYsaSkucG9pbnQsRT1lLmxpbmVTdGFydEluZGV4K2Uuc2VnbWVudCsxLEw9bmV3IHQuUG9pbnQoYy5nZXR4KEUpLGMuZ2V0eShFKSksQz1KdChMLGkpLFA9Qy5zaWduZWREaXN0YW5jZUZyb21DYW1lcmE+MD9DLnBvaW50OnJlKGYsTCxTLDEsaSksTz10ZShlLndyaXRpbmdNb2RlLFMsUCxkKTtpZihPKXJldHVybiBPfXZhciB6PW5lKHYqbC5nZXRvZmZzZXRYKGUuZ2x5cGhTdGFydEluZGV4KSxtLHksbixoLGYsZS5zZWdtZW50LGUubGluZVN0YXJ0SW5kZXgsZS5saW5lU3RhcnRJbmRleCtlLmxpbmVMZW5ndGgsYyxvLHAsITEpO2lmKCF6KXJldHVybntub3RFbm91Z2hSb29tOiEwfTtnPVt6XX1mb3IodmFyIEk9MCxEPWc7STxELmxlbmd0aDtJKz0xKXt2YXIgUj1EW0ldO3QuYWRkRHluYW1pY0F0dHJpYnV0ZXModSxSLnBvaW50LFIuYW5nbGUpfXJldHVybnt9fWZ1bmN0aW9uIHJlKHQsZSxyLG4sYSl7dmFyIGk9SnQodC5hZGQodC5zdWIoZSkuX3VuaXQoKSksYSkucG9pbnQsbz1yLnN1YihpKTtyZXR1cm4gci5hZGQoby5fbXVsdChuL28ubWFnKCkpKX1mdW5jdGlvbiBuZShlLHIsbixhLGksbyxzLGwsYyx1LGgsZixwKXt2YXIgZD1hP2UtcjplK3IsZz1kPjA/MTotMSx2PTA7YSYmKGcqPS0xLHY9TWF0aC5QSSksZzwwJiYodis9TWF0aC5QSSk7Zm9yKHZhciBtPWc+MD9sK3M6bCtzKzEseT1tLHg9aSxiPWksXz0wLHc9MCxrPU1hdGguYWJzKGQpO18rdzw9azspe2lmKChtKz1nKTxsfHxtPj1jKXJldHVybiBudWxsO2lmKGI9eCx2b2lkIDA9PT0oeD1mW21dKSl7dmFyIFQ9bmV3IHQuUG9pbnQodS5nZXR4KG0pLHUuZ2V0eShtKSksTT1KdChULGgpO2lmKE0uc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhPjApeD1mW21dPU0ucG9pbnQ7ZWxzZXt2YXIgQT1tLWc7eD1yZSgwPT09Xz9vOm5ldyB0LlBvaW50KHUuZ2V0eChBKSx1LmdldHkoQSkpLFQsYixrLV8rMSxoKX19Xys9dyx3PWIuZGlzdCh4KX12YXIgUz0oay1fKS93LEU9eC5zdWIoYiksTD1FLm11bHQoUykuX2FkZChiKTtyZXR1cm4gTC5fYWRkKEUuX3VuaXQoKS5fcGVycCgpLl9tdWx0KG4qZykpLHtwb2ludDpMLGFuZ2xlOnYrTWF0aC5hdGFuMih4LnktYi55LHgueC1iLngpLHRpbGVEaXN0YW5jZTpwP3twcmV2VGlsZURpc3RhbmNlOm0tZz09PXk/MDp1LmdldHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yKG0tZyksbGFzdFNlZ21lbnRWaWV3cG9ydERpc3RhbmNlOmstX306bnVsbH19V3QucHJvdG90eXBlLmtleXNMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3hLZXlzLmxlbmd0aCt0aGlzLmNpcmNsZUtleXMubGVuZ3RofSxXdC5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4sYSl7dGhpcy5fZm9yRWFjaENlbGwoZSxyLG4sYSx0aGlzLl9pbnNlcnRCb3hDZWxsLHRoaXMuYm94VWlkKyspLHRoaXMuYm94S2V5cy5wdXNoKHQpLHRoaXMuYmJveGVzLnB1c2goZSksdGhpcy5iYm94ZXMucHVzaChyKSx0aGlzLmJib3hlcy5wdXNoKG4pLHRoaXMuYmJveGVzLnB1c2goYSl9LFd0LnByb3RvdHlwZS5pbnNlcnRDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fZm9yRWFjaENlbGwoZS1uLHItbixlK24scituLHRoaXMuX2luc2VydENpcmNsZUNlbGwsdGhpcy5jaXJjbGVVaWQrKyksdGhpcy5jaXJjbGVLZXlzLnB1c2godCksdGhpcy5jaXJjbGVzLnB1c2goZSksdGhpcy5jaXJjbGVzLnB1c2gociksdGhpcy5jaXJjbGVzLnB1c2gobil9LFd0LnByb3RvdHlwZS5faW5zZXJ0Qm94Q2VsbD1mdW5jdGlvbih0LGUscixuLGEsaSl7dGhpcy5ib3hDZWxsc1thXS5wdXNoKGkpfSxXdC5wcm90b3R5cGUuX2luc2VydENpcmNsZUNlbGw9ZnVuY3Rpb24odCxlLHIsbixhLGkpe3RoaXMuY2lyY2xlQ2VsbHNbYV0ucHVzaChpKX0sV3QucHJvdG90eXBlLl9xdWVyeT1mdW5jdGlvbih0LGUscixuLGEsaSl7aWYocjwwfHx0PnRoaXMud2lkdGh8fG48MHx8ZT50aGlzLmhlaWdodClyZXR1cm4hYSYmW107dmFyIG89W107aWYodDw9MCYmZTw9MCYmdGhpcy53aWR0aDw9ciYmdGhpcy5oZWlnaHQ8PW4pe2lmKGEpcmV0dXJuITA7Zm9yKHZhciBzPTA7czx0aGlzLmJveEtleXMubGVuZ3RoO3MrKylvLnB1c2goe2tleTp0aGlzLmJveEtleXNbc10seDE6dGhpcy5iYm94ZXNbNCpzXSx5MTp0aGlzLmJib3hlc1s0KnMrMV0seDI6dGhpcy5iYm94ZXNbNCpzKzJdLHkyOnRoaXMuYmJveGVzWzQqcyszXX0pO2Zvcih2YXIgbD0wO2w8dGhpcy5jaXJjbGVLZXlzLmxlbmd0aDtsKyspe3ZhciBjPXRoaXMuY2lyY2xlc1szKmxdLHU9dGhpcy5jaXJjbGVzWzMqbCsxXSxoPXRoaXMuY2lyY2xlc1szKmwrMl07by5wdXNoKHtrZXk6dGhpcy5jaXJjbGVLZXlzW2xdLHgxOmMtaCx5MTp1LWgseDI6YytoLHkyOnUraH0pfXJldHVybiBpP28uZmlsdGVyKGkpOm99dmFyIGY9e2hpdFRlc3Q6YSxzZWVuVWlkczp7Ym94Ont9LGNpcmNsZTp7fX19O3JldHVybiB0aGlzLl9mb3JFYWNoQ2VsbCh0LGUscixuLHRoaXMuX3F1ZXJ5Q2VsbCxvLGYsaSksYT9vLmxlbmd0aD4wOm99LFd0LnByb3RvdHlwZS5fcXVlcnlDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgaT10LXIsbz10K3Iscz1lLXIsbD1lK3I7aWYobzwwfHxpPnRoaXMud2lkdGh8fGw8MHx8cz50aGlzLmhlaWdodClyZXR1cm4hbiYmW107dmFyIGM9W10sdT17aGl0VGVzdDpuLGNpcmNsZTp7eDp0LHk6ZSxyYWRpdXM6cn0sc2VlblVpZHM6e2JveDp7fSxjaXJjbGU6e319fTtyZXR1cm4gdGhpcy5fZm9yRWFjaENlbGwoaSxzLG8sbCx0aGlzLl9xdWVyeUNlbGxDaXJjbGUsYyx1LGEpLG4/Yy5sZW5ndGg+MDpjfSxXdC5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLHIsbixhKXtyZXR1cm4gdGhpcy5fcXVlcnkodCxlLHIsbiwhMSxhKX0sV3QucHJvdG90eXBlLmhpdFRlc3Q9ZnVuY3Rpb24odCxlLHIsbixhKXtyZXR1cm4gdGhpcy5fcXVlcnkodCxlLHIsbiwhMCxhKX0sV3QucHJvdG90eXBlLmhpdFRlc3RDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuX3F1ZXJ5Q2lyY2xlKHQsZSxyLCEwLG4pfSxXdC5wcm90b3R5cGUuX3F1ZXJ5Q2VsbD1mdW5jdGlvbih0LGUscixuLGEsaSxvLHMpe3ZhciBsPW8uc2VlblVpZHMsYz10aGlzLmJveENlbGxzW2FdO2lmKG51bGwhPT1jKWZvcih2YXIgdT10aGlzLmJib3hlcyxoPTAsZj1jO2g8Zi5sZW5ndGg7aCs9MSl7dmFyIHA9ZltoXTtpZighbC5ib3hbcF0pe2wuYm94W3BdPSEwO3ZhciBkPTQqcDtpZih0PD11W2QrMl0mJmU8PXVbZCszXSYmcj49dVtkKzBdJiZuPj11W2QrMV0mJighc3x8cyh0aGlzLmJveEtleXNbcF0pKSl7aWYoby5oaXRUZXN0KXJldHVybiBpLnB1c2goITApLCEwO2kucHVzaCh7a2V5OnRoaXMuYm94S2V5c1twXSx4MTp1W2RdLHkxOnVbZCsxXSx4Mjp1W2QrMl0seTI6dVtkKzNdfSl9fX12YXIgZz10aGlzLmNpcmNsZUNlbGxzW2FdO2lmKG51bGwhPT1nKWZvcih2YXIgdj10aGlzLmNpcmNsZXMsbT0wLHk9ZzttPHkubGVuZ3RoO20rPTEpe3ZhciB4PXlbbV07aWYoIWwuY2lyY2xlW3hdKXtsLmNpcmNsZVt4XT0hMDt2YXIgYj0zKng7aWYodGhpcy5fY2lyY2xlQW5kUmVjdENvbGxpZGUodltiXSx2W2IrMV0sdltiKzJdLHQsZSxyLG4pJiYoIXN8fHModGhpcy5jaXJjbGVLZXlzW3hdKSkpe2lmKG8uaGl0VGVzdClyZXR1cm4gaS5wdXNoKCEwKSwhMDt2YXIgXz12W2JdLHc9dltiKzFdLGs9dltiKzJdO2kucHVzaCh7a2V5OnRoaXMuY2lyY2xlS2V5c1t4XSx4MTpfLWsseTE6dy1rLHgyOl8rayx5Mjp3K2t9KX19fX0sV3QucHJvdG90eXBlLl9xdWVyeUNlbGxDaXJjbGU9ZnVuY3Rpb24odCxlLHIsbixhLGksbyxzKXt2YXIgbD1vLmNpcmNsZSxjPW8uc2VlblVpZHMsdT10aGlzLmJveENlbGxzW2FdO2lmKG51bGwhPT11KWZvcih2YXIgaD10aGlzLmJib3hlcyxmPTAscD11O2Y8cC5sZW5ndGg7Zis9MSl7dmFyIGQ9cFtmXTtpZighYy5ib3hbZF0pe2MuYm94W2RdPSEwO3ZhciBnPTQqZDtpZih0aGlzLl9jaXJjbGVBbmRSZWN0Q29sbGlkZShsLngsbC55LGwucmFkaXVzLGhbZyswXSxoW2crMV0saFtnKzJdLGhbZyszXSkmJighc3x8cyh0aGlzLmJveEtleXNbZF0pKSlyZXR1cm4gaS5wdXNoKCEwKSwhMH19dmFyIHY9dGhpcy5jaXJjbGVDZWxsc1thXTtpZihudWxsIT09dilmb3IodmFyIG09dGhpcy5jaXJjbGVzLHk9MCx4PXY7eTx4Lmxlbmd0aDt5Kz0xKXt2YXIgYj14W3ldO2lmKCFjLmNpcmNsZVtiXSl7Yy5jaXJjbGVbYl09ITA7dmFyIF89MypiO2lmKHRoaXMuX2NpcmNsZXNDb2xsaWRlKG1bX10sbVtfKzFdLG1bXysyXSxsLngsbC55LGwucmFkaXVzKSYmKCFzfHxzKHRoaXMuY2lyY2xlS2V5c1tiXSkpKXJldHVybiBpLnB1c2goITApLCEwfX19LFd0LnByb3RvdHlwZS5fZm9yRWFjaENlbGw9ZnVuY3Rpb24odCxlLHIsbixhLGksbyxzKXtmb3IodmFyIGw9dGhpcy5fY29udmVydFRvWENlbGxDb29yZCh0KSxjPXRoaXMuX2NvbnZlcnRUb1lDZWxsQ29vcmQoZSksdT10aGlzLl9jb252ZXJ0VG9YQ2VsbENvb3JkKHIpLGg9dGhpcy5fY29udmVydFRvWUNlbGxDb29yZChuKSxmPWw7Zjw9dTtmKyspZm9yKHZhciBwPWM7cDw9aDtwKyspe3ZhciBkPXRoaXMueENlbGxDb3VudCpwK2Y7aWYoYS5jYWxsKHRoaXMsdCxlLHIsbixkLGksbyxzKSlyZXR1cm59fSxXdC5wcm90b3R5cGUuX2NvbnZlcnRUb1hDZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy54Q2VsbENvdW50LTEsTWF0aC5mbG9vcih0KnRoaXMueFNjYWxlKSkpfSxXdC5wcm90b3R5cGUuX2NvbnZlcnRUb1lDZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odGhpcy55Q2VsbENvdW50LTEsTWF0aC5mbG9vcih0KnRoaXMueVNjYWxlKSkpfSxXdC5wcm90b3R5cGUuX2NpcmNsZXNDb2xsaWRlPWZ1bmN0aW9uKHQsZSxyLG4sYSxpKXt2YXIgbz1uLXQscz1hLWUsbD1yK2k7cmV0dXJuIGwqbD5vKm8rcypzfSxXdC5wcm90b3R5cGUuX2NpcmNsZUFuZFJlY3RDb2xsaWRlPWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8pe3ZhciBzPShpLW4pLzIsbD1NYXRoLmFicyh0LShuK3MpKTtpZihsPnMrcilyZXR1cm4hMTt2YXIgYz0oby1hKS8yLHU9TWF0aC5hYnMoZS0oYStjKSk7aWYodT5jK3IpcmV0dXJuITE7aWYobDw9c3x8dTw9YylyZXR1cm4hMDt2YXIgaD1sLXMsZj11LWM7cmV0dXJuIGgqaCtmKmY8PXIqcn07dmFyIGFlPW5ldyBGbG9hdDMyQXJyYXkoWy0xLzAsLTEvMCwwLC0xLzAsLTEvMCwwLC0xLzAsLTEvMCwwLC0xLzAsLTEvMCwwXSk7ZnVuY3Rpb24gaWUodCxlKXtmb3IodmFyIHI9MDtyPHQ7cisrKXt2YXIgbj1lLmxlbmd0aDtlLnJlc2l6ZShuKzQpLGUuZmxvYXQzMi5zZXQoYWUsMypuKX19ZnVuY3Rpb24gb2UodCxlLHIpe3ZhciBuPWVbMF0sYT1lWzFdO3JldHVybiB0WzBdPXJbMF0qbityWzRdKmErclsxMl0sdFsxXT1yWzFdKm4rcls1XSphK3JbMTNdLHRbM109clszXSpuK3JbN10qYStyWzE1XSx0fXZhciBzZT1mdW5jdGlvbih0LGUscil7dm9pZCAwPT09ZSYmKGU9bmV3IFd0KHQud2lkdGgrMjAwLHQuaGVpZ2h0KzIwMCwyNSkpLHZvaWQgMD09PXImJihyPW5ldyBXdCh0LndpZHRoKzIwMCx0LmhlaWdodCsyMDAsMjUpKSx0aGlzLnRyYW5zZm9ybT10LHRoaXMuZ3JpZD1lLHRoaXMuaWdub3JlZEdyaWQ9cix0aGlzLnBpdGNoZmFjdG9yPU1hdGguY29zKHQuX3BpdGNoKSp0LmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdGhpcy5zY3JlZW5SaWdodEJvdW5kYXJ5PXQud2lkdGgrMTAwLHRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnk9dC5oZWlnaHQrMTAwLHRoaXMuZ3JpZFJpZ2h0Qm91bmRhcnk9dC53aWR0aCsyMDAsdGhpcy5ncmlkQm90dG9tQm91bmRhcnk9dC5oZWlnaHQrMjAwfTtmdW5jdGlvbiBsZSh0LGUscil7dFtlKzRdPXI/MTowfWZ1bmN0aW9uIGNlKGUscixuKXtyZXR1cm4gcioodC5FWFRFTlQvKGUudGlsZVNpemUqTWF0aC5wb3coMixuLWUudGlsZUlELm92ZXJzY2FsZWRaKSkpfXNlLnByb3RvdHlwZS5wbGFjZUNvbGxpc2lvbkJveD1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBpPXRoaXMucHJvamVjdEFuZEdldFBlcnNwZWN0aXZlUmF0aW8obix0LmFuY2hvclBvaW50WCx0LmFuY2hvclBvaW50WSksbz1yKmkucGVyc3BlY3RpdmVSYXRpbyxzPXQueDEqbytpLnBvaW50LngsbD10LnkxKm8raS5wb2ludC55LGM9dC54MipvK2kucG9pbnQueCx1PXQueTIqbytpLnBvaW50Lnk7cmV0dXJuIXRoaXMuaXNJbnNpZGVHcmlkKHMsbCxjLHUpfHwhZSYmdGhpcy5ncmlkLmhpdFRlc3QocyxsLGMsdSxhKT97Ym94OltdLG9mZnNjcmVlbjohMX06e2JveDpbcyxsLGMsdV0sb2Zmc2NyZWVuOnRoaXMuaXNPZmZzY3JlZW4ocyxsLGMsdSl9fSxzZS5wcm90b3R5cGUuYXBwcm94aW1hdGVUaWxlRGlzdGFuY2U9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgaT1hPzE6bi90aGlzLnBpdGNoZmFjdG9yLG89dC5sYXN0U2VnbWVudFZpZXdwb3J0RGlzdGFuY2UqcjtyZXR1cm4gdC5wcmV2VGlsZURpc3RhbmNlK28rKGktMSkqbypNYXRoLmFicyhNYXRoLnNpbihlKSl9LHNlLnByb3RvdHlwZS5wbGFjZUNvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24oZSxyLG4sYSxpLG8scyxsLGMsdSxoLGYscCl7dmFyIGQ9W10sZz10aGlzLnByb2plY3RBbmNob3IoYyxpLmFuY2hvclgsaS5hbmNob3JZKSx2PWwvMjQsbT1pLmxpbmVPZmZzZXRYKmwseT1pLmxpbmVPZmZzZXRZKmwseD1uZXcgdC5Qb2ludChpLmFuY2hvclgsaS5hbmNob3JZKSxiPSR0KHYscyxtLHksITEsSnQoeCx1KS5wb2ludCx4LGksbyx1LHt9LCEwKSxfPSExLHc9ITEsaz0hMCxUPWcucGVyc3BlY3RpdmVSYXRpbyphLE09MS8oYSpuKSxBPTAsUz0wO2ImJihBPXRoaXMuYXBwcm94aW1hdGVUaWxlRGlzdGFuY2UoYi5maXJzdC50aWxlRGlzdGFuY2UsYi5maXJzdC5hbmdsZSxNLGcuY2FtZXJhRGlzdGFuY2UsZiksUz10aGlzLmFwcHJveGltYXRlVGlsZURpc3RhbmNlKGIubGFzdC50aWxlRGlzdGFuY2UsYi5sYXN0LmFuZ2xlLE0sZy5jYW1lcmFEaXN0YW5jZSxmKSk7Zm9yKHZhciBFPTA7RTxlLmxlbmd0aDtFKz01KXt2YXIgTD1lW0VdLEM9ZVtFKzFdLFA9ZVtFKzJdLE89ZVtFKzNdO2lmKCFifHxPPC1BfHxPPlMpbGUoZSxFLCExKTtlbHNle3ZhciB6PXRoaXMucHJvamVjdFBvaW50KGMsTCxDKSxJPVAqVDtpZihkLmxlbmd0aD4wKXt2YXIgRD16LngtZFtkLmxlbmd0aC00XSxSPXoueS1kW2QubGVuZ3RoLTNdO2lmKEkqSSoyPkQqRCtSKlImJkUrODxlLmxlbmd0aCl7dmFyIEY9ZVtFKzhdO2lmKEY+LUEmJkY8Uyl7bGUoZSxFLCExKTtjb250aW51ZX19fXZhciBCPUUvNTtkLnB1c2goei54LHoueSxJLEIpLGxlKGUsRSwhMCk7dmFyIE49ei54LUksaj16LnktSSxWPXoueCtJLFU9ei55K0k7aWYoaz1rJiZ0aGlzLmlzT2Zmc2NyZWVuKE4saixWLFUpLHc9d3x8dGhpcy5pc0luc2lkZUdyaWQoTixqLFYsVSksIXImJnRoaXMuZ3JpZC5oaXRUZXN0Q2lyY2xlKHoueCx6LnksSSxwKSl7aWYoIWgpcmV0dXJue2NpcmNsZXM6W10sb2Zmc2NyZWVuOiExfTtfPSEwfX19cmV0dXJue2NpcmNsZXM6X3x8IXc/W106ZCxvZmZzY3JlZW46a319LHNlLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkU3ltYm9scz1mdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmdyaWQua2V5c0xlbmd0aCgpJiYwPT09dGhpcy5pZ25vcmVkR3JpZC5rZXlzTGVuZ3RoKCkpcmV0dXJue307Zm9yKHZhciByPVtdLG49MS8wLGE9MS8wLGk9LTEvMCxvPS0xLzAscz0wLGw9ZTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc10sdT1uZXcgdC5Qb2ludChjLngrMTAwLGMueSsxMDApO249TWF0aC5taW4obix1LngpLGE9TWF0aC5taW4oYSx1LnkpLGk9TWF0aC5tYXgoaSx1LngpLG89TWF0aC5tYXgobyx1LnkpLHIucHVzaCh1KX1mb3IodmFyIGg9e30sZj17fSxwPTAsZD10aGlzLmdyaWQucXVlcnkobixhLGksbykuY29uY2F0KHRoaXMuaWdub3JlZEdyaWQucXVlcnkobixhLGksbykpO3A8ZC5sZW5ndGg7cCs9MSl7dmFyIGc9ZFtwXSx2PWcua2V5O2lmKHZvaWQgMD09PWhbdi5idWNrZXRJbnN0YW5jZUlkXSYmKGhbdi5idWNrZXRJbnN0YW5jZUlkXT17fSksIWhbdi5idWNrZXRJbnN0YW5jZUlkXVt2LmZlYXR1cmVJbmRleF0pe3ZhciBtPVtuZXcgdC5Qb2ludChnLngxLGcueTEpLG5ldyB0LlBvaW50KGcueDIsZy55MSksbmV3IHQuUG9pbnQoZy54MixnLnkyKSxuZXcgdC5Qb2ludChnLngxLGcueTIpXTt0LnBvbHlnb25JbnRlcnNlY3RzUG9seWdvbihyLG0pJiYoaFt2LmJ1Y2tldEluc3RhbmNlSWRdW3YuZmVhdHVyZUluZGV4XT0hMCx2b2lkIDA9PT1mW3YuYnVja2V0SW5zdGFuY2VJZF0mJihmW3YuYnVja2V0SW5zdGFuY2VJZF09W10pLGZbdi5idWNrZXRJbnN0YW5jZUlkXS5wdXNoKHYuZmVhdHVyZUluZGV4KSl9fXJldHVybiBmfSxzZS5wcm90b3R5cGUuaW5zZXJ0Q29sbGlzaW9uQm94PWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIGk9e2J1Y2tldEluc3RhbmNlSWQ6cixmZWF0dXJlSW5kZXg6bixjb2xsaXNpb25Hcm91cElEOmF9OyhlP3RoaXMuaWdub3JlZEdyaWQ6dGhpcy5ncmlkKS5pbnNlcnQoaSx0WzBdLHRbMV0sdFsyXSx0WzNdKX0sc2UucHJvdG90eXBlLmluc2VydENvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24odCxlLHIsbixhKXtmb3IodmFyIGk9ZT90aGlzLmlnbm9yZWRHcmlkOnRoaXMuZ3JpZCxvPXtidWNrZXRJbnN0YW5jZUlkOnIsZmVhdHVyZUluZGV4Om4sY29sbGlzaW9uR3JvdXBJRDphfSxzPTA7czx0Lmxlbmd0aDtzKz00KWkuaW5zZXJ0Q2lyY2xlKG8sdFtzXSx0W3MrMV0sdFtzKzJdKX0sc2UucHJvdG90eXBlLnByb2plY3RBbmNob3I9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtlLHIsMCwxXTtyZXR1cm4gb2UobixuLHQpLHtwZXJzcGVjdGl2ZVJhdGlvOi41K3RoaXMudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvblszXSouNSxjYW1lcmFEaXN0YW5jZTpuWzNdfX0sc2UucHJvdG90eXBlLnByb2plY3RQb2ludD1mdW5jdGlvbihlLHIsbil7dmFyIGE9W3IsbiwwLDFdO3JldHVybiBvZShhLGEsZSksbmV3IHQuUG9pbnQoKGFbMF0vYVszXSsxKS8yKnRoaXMudHJhbnNmb3JtLndpZHRoKzEwMCwoLWFbMV0vYVszXSsxKS8yKnRoaXMudHJhbnNmb3JtLmhlaWdodCsxMDApfSxzZS5wcm90b3R5cGUucHJvamVjdEFuZEdldFBlcnNwZWN0aXZlUmF0aW89ZnVuY3Rpb24oZSxyLG4pe3ZhciBhPVtyLG4sMCwxXTtyZXR1cm4gb2UoYSxhLGUpLHtwb2ludDpuZXcgdC5Qb2ludCgoYVswXS9hWzNdKzEpLzIqdGhpcy50cmFuc2Zvcm0ud2lkdGgrMTAwLCgtYVsxXS9hWzNdKzEpLzIqdGhpcy50cmFuc2Zvcm0uaGVpZ2h0KzEwMCkscGVyc3BlY3RpdmVSYXRpbzouNSt0aGlzLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlL2FbM10qLjV9fSxzZS5wcm90b3R5cGUuaXNPZmZzY3JlZW49ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHI8MTAwfHx0Pj10aGlzLnNjcmVlblJpZ2h0Qm91bmRhcnl8fG48MTAwfHxlPnRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnl9LHNlLnByb3RvdHlwZS5pc0luc2lkZUdyaWQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHI+PTAmJnQ8dGhpcy5ncmlkUmlnaHRCb3VuZGFyeSYmbj49MCYmZTx0aGlzLmdyaWRCb3R0b21Cb3VuZGFyeX07dmFyIHVlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMub3BhY2l0eT10P01hdGgubWF4KDAsTWF0aC5taW4oMSx0Lm9wYWNpdHkrKHQucGxhY2VkP2U6LWUpKSk6biYmcj8xOjAsdGhpcy5wbGFjZWQ9cn07dWUucHJvdG90eXBlLmlzSGlkZGVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLm9wYWNpdHkmJiF0aGlzLnBsYWNlZH07dmFyIGhlPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dGhpcy50ZXh0PW5ldyB1ZSh0P3QudGV4dDpudWxsLGUscixhKSx0aGlzLmljb249bmV3IHVlKHQ/dC5pY29uOm51bGwsZSxuLGEpfTtoZS5wcm90b3R5cGUuaXNIaWRkZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0LmlzSGlkZGVuKCkmJnRoaXMuaWNvbi5pc0hpZGRlbigpfTt2YXIgZmU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGV4dD10LHRoaXMuaWNvbj1lLHRoaXMuc2tpcEZhZGU9cn0scGU9ZnVuY3Rpb24odCxlLHIsbixhKXt0aGlzLmJ1Y2tldEluc3RhbmNlSWQ9dCx0aGlzLmZlYXR1cmVJbmRleD1lLHRoaXMuc291cmNlTGF5ZXJJbmRleD1yLHRoaXMuYnVja2V0SW5kZXg9bix0aGlzLnRpbGVJRD1hfSxkZT1mdW5jdGlvbih0KXt0aGlzLmNyb3NzU291cmNlQ29sbGlzaW9ucz10LHRoaXMubWF4R3JvdXBJRD0wLHRoaXMuY29sbGlzaW9uR3JvdXBzPXt9fTtmdW5jdGlvbiBnZShlLHIsbixhLGkpe3ZhciBvPXQuZ2V0QW5jaG9yQWxpZ25tZW50KGUpLHM9LShvLmhvcml6b250YWxBbGlnbi0uNSkqcixsPS0oby52ZXJ0aWNhbEFsaWduLS41KSpuLGM9dC5ldmFsdWF0ZVJhZGlhbE9mZnNldChlLGEpO3JldHVybiBuZXcgdC5Qb2ludChzK2NbMF0qaSxsK2NbMV0qaSl9ZGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLmNyb3NzU291cmNlQ29sbGlzaW9ucylyZXR1cm57SUQ6MCxwcmVkaWNhdGU6bnVsbH07aWYoIXRoaXMuY29sbGlzaW9uR3JvdXBzW3RdKXt2YXIgZT0rK3RoaXMubWF4R3JvdXBJRDt0aGlzLmNvbGxpc2lvbkdyb3Vwc1t0XT17SUQ6ZSxwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sbGlzaW9uR3JvdXBJRD09PWV9fX1yZXR1cm4gdGhpcy5jb2xsaXNpb25Hcm91cHNbdF19O3ZhciB2ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLnRyYW5zZm9ybT10LmNsb25lKCksdGhpcy5jb2xsaXNpb25JbmRleD1uZXcgc2UodGhpcy50cmFuc2Zvcm0pLHRoaXMucGxhY2VtZW50cz17fSx0aGlzLm9wYWNpdGllcz17fSx0aGlzLnZhcmlhYmxlT2Zmc2V0cz17fSx0aGlzLnN0YWxlPSExLHRoaXMuY29tbWl0VGltZT0wLHRoaXMuZmFkZUR1cmF0aW9uPWUsdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YT17fSx0aGlzLmNvbGxpc2lvbkdyb3Vwcz1uZXcgZGUociksdGhpcy5wcmV2UGxhY2VtZW50PW4sbiYmKG4ucHJldlBsYWNlbWVudD12b2lkIDApLHRoaXMucGxhY2VkT3JpZW50YXRpb25zPXt9fTtmdW5jdGlvbiBtZSh0LGUscixuLGEpe3QuZW1wbGFjZUJhY2soZT8xOjAscj8xOjAsbnx8MCxhfHwwKSx0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowLG58fDAsYXx8MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCxufHwwLGF8fDApLHQuZW1wbGFjZUJhY2soZT8xOjAscj8xOjAsbnx8MCxhfHwwKX12ZS5wcm90b3R5cGUucGxhY2VMYXllclRpbGU9ZnVuY3Rpb24oZSxyLG4sYSl7dmFyIGk9ci5nZXRCdWNrZXQoZSksbz1yLmxhdGVzdEZlYXR1cmVJbmRleDtpZihpJiZvJiZlLmlkPT09aS5sYXllcklkc1swXSl7dmFyIHM9ci5jb2xsaXNpb25Cb3hBcnJheSxsPWkubGF5ZXJzWzBdLmxheW91dCxjPU1hdGgucG93KDIsdGhpcy50cmFuc2Zvcm0uem9vbS1yLnRpbGVJRC5vdmVyc2NhbGVkWiksdT1yLnRpbGVTaXplL3QuRVhURU5ULGg9dGhpcy50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHIudGlsZUlELnRvVW53cmFwcGVkKCkpLGY9WHQoaCwibWFwIj09PWwuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpLCJtYXAiPT09bC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IiksdGhpcy50cmFuc2Zvcm0sY2UociwxLHRoaXMudHJhbnNmb3JtLnpvb20pKSxwPVh0KGgsIm1hcCI9PT1sLmdldCgiaWNvbi1waXRjaC1hbGlnbm1lbnQiKSwibWFwIj09PWwuZ2V0KCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCIpLHRoaXMudHJhbnNmb3JtLGNlKHIsMSx0aGlzLnRyYW5zZm9ybS56b29tKSk7dGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVtpLmJ1Y2tldEluc3RhbmNlSWRdPW5ldyBwZShpLmJ1Y2tldEluc3RhbmNlSWQsbyxpLnNvdXJjZUxheWVySW5kZXgsaS5pbmRleCxyLnRpbGVJRCksdGhpcy5wbGFjZUxheWVyQnVja2V0KGksaCxmLHAsYyx1LG4sci5ob2xkaW5nRm9yRmFkZSgpLGEscyl9fSx2ZS5wcm90b3R5cGUuYXR0ZW1wdEFuY2hvclBsYWNlbWVudD1mdW5jdGlvbihlLHIsbixhLGksbyxzLGwsYyx1LGgsZixwLGQsZyl7dmFyIHYsbT1nZShlLG4sYSxpLG8pLHk9dGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChmdW5jdGlvbihlLHIsbixhLGksbyl7dmFyIHM9ZS54MSxsPWUueDIsYz1lLnkxLHU9ZS55MixoPWUuYW5jaG9yUG9pbnRYLGY9ZS5hbmNob3JQb2ludFkscD1uZXcgdC5Qb2ludChyLG4pO3JldHVybiBhJiZwLl9yb3RhdGUoaT9vOi1vKSx7eDE6cytwLngseTE6YytwLnkseDI6bCtwLngseTI6dStwLnksYW5jaG9yUG9pbnRYOmgsYW5jaG9yUG9pbnRZOmZ9fShyLG0ueCxtLnkscyxsLHRoaXMudHJhbnNmb3JtLmFuZ2xlKSxmLGMsdSxoLnByZWRpY2F0ZSk7aWYoeS5ib3gubGVuZ3RoPjApcmV0dXJuIHRoaXMucHJldlBsYWNlbWVudCYmdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1twLmNyb3NzVGlsZUlEXSYmdGhpcy5wcmV2UGxhY2VtZW50LnBsYWNlbWVudHNbcC5jcm9zc1RpbGVJRF0mJnRoaXMucHJldlBsYWNlbWVudC5wbGFjZW1lbnRzW3AuY3Jvc3NUaWxlSURdLnRleHQmJih2PXRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbcC5jcm9zc1RpbGVJRF0uYW5jaG9yKSx0aGlzLnZhcmlhYmxlT2Zmc2V0c1twLmNyb3NzVGlsZUlEXT17cmFkaWFsT2Zmc2V0Omksd2lkdGg6bixoZWlnaHQ6YSxhbmNob3I6ZSx0ZXh0Qm94U2NhbGU6byxwcmV2QW5jaG9yOnZ9LHRoaXMubWFya1VzZWRKdXN0aWZpY2F0aW9uKGQsZSxwLGcpLGQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmKHRoaXMubWFya1VzZWRPcmllbnRhdGlvbihkLGcscCksdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbcC5jcm9zc1RpbGVJRF09ZykseX0sdmUucHJvdG90eXBlLnBsYWNlTGF5ZXJCdWNrZXQ9ZnVuY3Rpb24oZSxyLG4sYSxpLG8scyxsLGMsdSl7dmFyIGg9dGhpcyxmPWUubGF5ZXJzWzBdLmxheW91dCxwPXQuZXZhbHVhdGVTaXplRm9yWm9vbShlLnRleHRTaXplRGF0YSx0aGlzLnRyYW5zZm9ybS56b29tKSxkPWYuZ2V0KCJ0ZXh0LW9wdGlvbmFsIiksZz1mLmdldCgiaWNvbi1vcHRpb25hbCIpLHY9Zi5nZXQoInRleHQtYWxsb3ctb3ZlcmxhcCIpLG09Zi5nZXQoImljb24tYWxsb3ctb3ZlcmxhcCIpLHk9diYmKG18fCFlLmhhc0ljb25EYXRhKCl8fGcpLHg9bSYmKHZ8fCFlLmhhc1RleHREYXRhKCl8fGQpLGI9dGhpcy5jb2xsaXNpb25Hcm91cHMuZ2V0KGUuc291cmNlSUQpLF89Im1hcCI9PT1mLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSx3PSJtYXAiPT09Zi5nZXQoInRleHQtcGl0Y2gtYWxpZ25tZW50Iiksaz0idmlld3BvcnQteSI9PT1mLmdldCgic3ltYm9sLXotb3JkZXIiKTshZS5jb2xsaXNpb25BcnJheXMmJnUmJmUuZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyh1KTt2YXIgVD1mdW5jdGlvbihhLHUpe2lmKCFjW2EuY3Jvc3NUaWxlSURdKWlmKGwpaC5wbGFjZW1lbnRzW2EuY3Jvc3NUaWxlSURdPW5ldyBmZSghMSwhMSwhMSk7ZWxzZXt2YXIgbSxrPSExLFQ9ITEsTT0hMCxBPXtib3g6bnVsbCxvZmZzY3JlZW46bnVsbH0sUz17Ym94Om51bGwsb2Zmc2NyZWVuOm51bGx9LEU9bnVsbCxMPW51bGwsQz0wLFA9MCxPPTA7dS50ZXh0RmVhdHVyZUluZGV4JiYoQz11LnRleHRGZWF0dXJlSW5kZXgpLHUudmVydGljYWxUZXh0RmVhdHVyZUluZGV4JiYoUD11LnZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCk7dmFyIHo9dS50ZXh0Qm94O2lmKHope3ZhciBJPWZ1bmN0aW9uKHIpe3ZhciBuPXQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbDtpZihlLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJiFyJiZoLnByZXZQbGFjZW1lbnQpe3ZhciBpPWgucHJldlBsYWNlbWVudC5wbGFjZWRPcmllbnRhdGlvbnNbYS5jcm9zc1RpbGVJRF07aSYmKGgucGxhY2VkT3JpZW50YXRpb25zW2EuY3Jvc3NUaWxlSURdPWksbj1pLGgubWFya1VzZWRPcmllbnRhdGlvbihlLG4sYSkpfXJldHVybiBufSxEPWZ1bmN0aW9uKHIsbil7aWYoZS5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZhLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcz4wJiZ1LnZlcnRpY2FsVGV4dEJveClmb3IodmFyIGk9MCxvPWUud3JpdGluZ01vZGVzO2k8by5sZW5ndGgmJihvW2ldPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbD8oQT1uKCksUz1BKTpBPXIoKSwhKEEmJkEuYm94JiZBLmJveC5sZW5ndGgpKTtpKz0xKTtlbHNlIEE9cigpfTtpZihmLmdldCgidGV4dC12YXJpYWJsZS1hbmNob3IiKSl7dmFyIFI9Zi5nZXQoInRleHQtdmFyaWFibGUtYW5jaG9yIik7aWYoaC5wcmV2UGxhY2VtZW50JiZoLnByZXZQbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzW2EuY3Jvc3NUaWxlSURdKXt2YXIgRj1oLnByZXZQbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzW2EuY3Jvc3NUaWxlSURdO1IuaW5kZXhPZihGLmFuY2hvcik+MCYmKFI9Ui5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1GLmFuY2hvcn0pKS51bnNoaWZ0KEYuYW5jaG9yKX12YXIgQj1mdW5jdGlvbih0LG4pe2Zvcih2YXIgaT10LngyLXQueDEscz10LnkyLXQueTEsbD1hLnRleHRCb3hTY2FsZSxjPXtib3g6W10sb2Zmc2NyZWVuOiExfSx1PXY/MipSLmxlbmd0aDpSLmxlbmd0aCxmPTA7Zjx1OysrZil7dmFyIHA9UltmJVIubGVuZ3RoXSxkPWY+PVIubGVuZ3RoO2lmKChjPWguYXR0ZW1wdEFuY2hvclBsYWNlbWVudChwLHQsaSxzLGEucmFkaWFsVGV4dE9mZnNldCxsLF8sdyxvLHIsYixkLGEsZSxuKSkmJmMuYm94JiZjLmJveC5sZW5ndGgpe2s9ITA7YnJlYWt9fXJldHVybiBjfTtEKGZ1bmN0aW9uKCl7cmV0dXJuIEIoeix0LldyaXRpbmdNb2RlLmhvcml6b250YWwpfSxmdW5jdGlvbigpe3ZhciByPXUudmVydGljYWxUZXh0Qm94LG49QSYmQS5ib3gmJkEuYm94Lmxlbmd0aDtyZXR1cm4gZS5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiYhbiYmYS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXM+MCYmcj9CKHIsdC5Xcml0aW5nTW9kZS52ZXJ0aWNhbCk6e2JveDpudWxsLG9mZnNjcmVlbjpudWxsfX0pLEEmJihrPUEuYm94LE09QS5vZmZzY3JlZW4pO3ZhciBOPUkoQSYmQS5ib3gpO2lmKCFrJiZoLnByZXZQbGFjZW1lbnQpe3ZhciBqPWgucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbYS5jcm9zc1RpbGVJRF07aiYmKGgudmFyaWFibGVPZmZzZXRzW2EuY3Jvc3NUaWxlSURdPWosaC5tYXJrVXNlZEp1c3RpZmljYXRpb24oZSxqLmFuY2hvcixhLE4pKX19ZWxzZXt2YXIgVj1mdW5jdGlvbih0LG4pe3ZhciBpPWguY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3godCxmLmdldCgidGV4dC1hbGxvdy1vdmVybGFwIiksbyxyLGIucHJlZGljYXRlKTtyZXR1cm4gaSYmaS5ib3gmJmkuYm94Lmxlbmd0aCYmKGgubWFya1VzZWRPcmllbnRhdGlvbihlLG4sYSksaC5wbGFjZWRPcmllbnRhdGlvbnNbYS5jcm9zc1RpbGVJRF09biksaX07RChmdW5jdGlvbigpe3JldHVybiBWKHosdC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsKX0sZnVuY3Rpb24oKXt2YXIgcj11LnZlcnRpY2FsVGV4dEJveDtyZXR1cm4gZS5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZhLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcz4wJiZyP1Yocix0LldyaXRpbmdNb2RlLnZlcnRpY2FsKTp7Ym94Om51bGwsb2Zmc2NyZWVuOm51bGx9fSksSShBJiZBLmJveCYmQS5ib3gubGVuZ3RoKX19az0obT1BKSYmbS5ib3gmJm0uYm94Lmxlbmd0aD4wLE09bSYmbS5vZmZzY3JlZW47dmFyIFU9dS50ZXh0Q2lyY2xlcztpZihVKXt2YXIgcT1lLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGEuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4KSxIPXQuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShlLnRleHRTaXplRGF0YSxwLHEpO0U9aC5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkNpcmNsZXMoVSxmLmdldCgidGV4dC1hbGxvdy1vdmVybGFwIiksaSxvLHEsZS5saW5lVmVydGV4QXJyYXksZS5nbHlwaE9mZnNldEFycmF5LEgscixuLHMsdyxiLnByZWRpY2F0ZSksaz1mLmdldCgidGV4dC1hbGxvdy1vdmVybGFwIil8fEUuY2lyY2xlcy5sZW5ndGg+MCxNPU0mJkUub2Zmc2NyZWVufXUuaWNvbkZlYXR1cmVJbmRleCYmKE89dS5pY29uRmVhdHVyZUluZGV4KSx1Lmljb25Cb3gmJihUPShMPWguY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3godS5pY29uQm94LGYuZ2V0KCJpY29uLWFsbG93LW92ZXJsYXAiKSxvLHIsYi5wcmVkaWNhdGUpKS5ib3gubGVuZ3RoPjAsTT1NJiZMLm9mZnNjcmVlbik7dmFyIEc9ZHx8MD09PWEubnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMmJjA9PT1hLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyxZPWd8fDA9PT1hLm51bUljb25WZXJ0aWNlcztHfHxZP1k/R3x8KFQ9VCYmayk6az1UJiZrOlQ9az1UJiZrLGsmJm0mJm0uYm94JiYoUyYmUy5ib3gmJlA/aC5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3gobS5ib3gsZi5nZXQoInRleHQtaWdub3JlLXBsYWNlbWVudCIpLGUuYnVja2V0SW5zdGFuY2VJZCxQLGIuSUQpOmguY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KG0uYm94LGYuZ2V0KCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiKSxlLmJ1Y2tldEluc3RhbmNlSWQsQyxiLklEKSksVCYmTCYmaC5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3goTC5ib3gsZi5nZXQoImljb24taWdub3JlLXBsYWNlbWVudCIpLGUuYnVja2V0SW5zdGFuY2VJZCxPLGIuSUQpLGsmJkUmJmguY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhFLmNpcmNsZXMsZi5nZXQoInRleHQtaWdub3JlLXBsYWNlbWVudCIpLGUuYnVja2V0SW5zdGFuY2VJZCxDLGIuSUQpLGgucGxhY2VtZW50c1thLmNyb3NzVGlsZUlEXT1uZXcgZmUoa3x8eSxUfHx4LE18fGUuanVzdFJlbG9hZGVkKSxjW2EuY3Jvc3NUaWxlSURdPSEwfX07aWYoaylmb3IodmFyIE09ZS5nZXRTb3J0ZWRTeW1ib2xJbmRleGVzKHRoaXMudHJhbnNmb3JtLmFuZ2xlKSxBPU0ubGVuZ3RoLTE7QT49MDstLUEpe3ZhciBTPU1bQV07VChlLnN5bWJvbEluc3RhbmNlcy5nZXQoUyksZS5jb2xsaXNpb25BcnJheXNbU10pfWVsc2UgZm9yKHZhciBFPTA7RTxlLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7KytFKVQoZS5zeW1ib2xJbnN0YW5jZXMuZ2V0KEUpLGUuY29sbGlzaW9uQXJyYXlzW0VdKTtlLmp1c3RSZWxvYWRlZD0hMX0sdmUucHJvdG90eXBlLm1hcmtVc2VkSnVzdGlmaWNhdGlvbj1mdW5jdGlvbihlLHIsbixhKXt2YXIgaSxvPXtsZWZ0Om4ubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxjZW50ZXI6bi5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgscmlnaHQ6bi5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleH07aT1hPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbD9uLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4Om9bdC5nZXRBbmNob3JKdXN0aWZpY2F0aW9uKHIpXTtmb3IodmFyIHM9MCxsPVtuLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsbi5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsbi5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxuLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4XTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc107Yz49MCYmKGUudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoYykuY3Jvc3NUaWxlSUQ9aT49MCYmYyE9PWk/MDpuLmNyb3NzVGlsZUlEKX19LHZlLnByb3RvdHlwZS5tYXJrVXNlZE9yaWVudGF0aW9uPWZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGE9cj09PXQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbHx8cj09PXQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbE9ubHk/cjowLGk9cj09PXQuV3JpdGluZ01vZGUudmVydGljYWw/cjowLG89MCxzPVtuLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsbi5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsbi5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleF07bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO2UudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQobCkucGxhY2VkT3JpZW50YXRpb249YX1uLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4JiYoZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChuLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KS5wbGFjZWRPcmllbnRhdGlvbj1pKX0sdmUucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbih0KXt0aGlzLmNvbW1pdFRpbWU9dDt2YXIgZT10aGlzLnByZXZQbGFjZW1lbnQscj0hMSxuPWUmJjAhPT10aGlzLmZhZGVEdXJhdGlvbj8odGhpcy5jb21taXRUaW1lLWUuY29tbWl0VGltZSkvdGhpcy5mYWRlRHVyYXRpb246MSxhPWU/ZS5vcGFjaXRpZXM6e30saT1lP2UudmFyaWFibGVPZmZzZXRzOnt9LG89ZT9lLnBsYWNlZE9yaWVudGF0aW9uczp7fTtmb3IodmFyIHMgaW4gdGhpcy5wbGFjZW1lbnRzKXt2YXIgbD10aGlzLnBsYWNlbWVudHNbc10sYz1hW3NdO2M/KHRoaXMub3BhY2l0aWVzW3NdPW5ldyBoZShjLG4sbC50ZXh0LGwuaWNvbikscj1yfHxsLnRleHQhPT1jLnRleHQucGxhY2VkfHxsLmljb24hPT1jLmljb24ucGxhY2VkKToodGhpcy5vcGFjaXRpZXNbc109bmV3IGhlKG51bGwsbixsLnRleHQsbC5pY29uLGwuc2tpcEZhZGUpLHI9cnx8bC50ZXh0fHxsLmljb24pfWZvcih2YXIgdSBpbiBhKXt2YXIgaD1hW3VdO2lmKCF0aGlzLm9wYWNpdGllc1t1XSl7dmFyIGY9bmV3IGhlKGgsbiwhMSwhMSk7Zi5pc0hpZGRlbigpfHwodGhpcy5vcGFjaXRpZXNbdV09ZixyPXJ8fGgudGV4dC5wbGFjZWR8fGguaWNvbi5wbGFjZWQpfX1mb3IodmFyIHAgaW4gaSl0aGlzLnZhcmlhYmxlT2Zmc2V0c1twXXx8IXRoaXMub3BhY2l0aWVzW3BdfHx0aGlzLm9wYWNpdGllc1twXS5pc0hpZGRlbigpfHwodGhpcy52YXJpYWJsZU9mZnNldHNbcF09aVtwXSk7Zm9yKHZhciBkIGluIG8pdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbZF18fCF0aGlzLm9wYWNpdGllc1tkXXx8dGhpcy5vcGFjaXRpZXNbZF0uaXNIaWRkZW4oKXx8KHRoaXMucGxhY2VkT3JpZW50YXRpb25zW2RdPW9bZF0pO3I/dGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZT10OiJudW1iZXIiIT10eXBlb2YgdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZSYmKHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWU9ZT9lLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lOnQpfSx2ZS5wcm90b3R5cGUudXBkYXRlTGF5ZXJPcGFjaXRpZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wLGE9ZTtuPGEubGVuZ3RoO24rPTEpe3ZhciBpPWFbbl0sbz1pLmdldEJ1Y2tldCh0KTtvJiZpLmxhdGVzdEZlYXR1cmVJbmRleCYmdC5pZD09PW8ubGF5ZXJJZHNbMF0mJnRoaXMudXBkYXRlQnVja2V0T3BhY2l0aWVzKG8scixpLmNvbGxpc2lvbkJveEFycmF5KX19LHZlLnByb3RvdHlwZS51cGRhdGVCdWNrZXRPcGFjaXRpZXM9ZnVuY3Rpb24oZSxyLG4pe2UuaGFzVGV4dERhdGEoKSYmZS50ZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpLGUuaGFzSWNvbkRhdGEoKSYmZS5pY29uLm9wYWNpdHlWZXJ0ZXhBcnJheS5jbGVhcigpLGUuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZlLmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpLGUuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YSgpJiZlLmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpO3ZhciBhPWUubGF5ZXJzWzBdLmxheW91dCxpPW5ldyBoZShudWxsLDAsITEsITEsITApLG89YS5nZXQoInRleHQtYWxsb3ctb3ZlcmxhcCIpLHM9YS5nZXQoImljb24tYWxsb3ctb3ZlcmxhcCIpLGw9YS5nZXQoInRleHQtdmFyaWFibGUtYW5jaG9yIiksYz0ibWFwIj09PWEuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpLHU9Im1hcCI9PT1hLmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSxoPW5ldyBoZShudWxsLDAsbyYmKHN8fCFlLmhhc0ljb25EYXRhKCl8fGEuZ2V0KCJpY29uLW9wdGlvbmFsIikpLHMmJihvfHwhZS5oYXNUZXh0RGF0YSgpfHxhLmdldCgidGV4dC1vcHRpb25hbCIpKSwhMCk7IWUuY29sbGlzaW9uQXJyYXlzJiZuJiYoZS5oYXNDb2xsaXNpb25Cb3hEYXRhKCl8fGUuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YSgpKSYmZS5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzKG4pO2Zvcih2YXIgZj0wO2Y8ZS5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO2YrKyl7dmFyIHA9ZS5zeW1ib2xJbnN0YW5jZXMuZ2V0KGYpLGQ9cC5udW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyxnPXAubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzLHY9cC5jcm9zc1RpbGVJRCxtPXJbdl0seT10aGlzLm9wYWNpdGllc1t2XTttP3k9aTp5fHwoeT1oLHRoaXMub3BhY2l0aWVzW3ZdPXkpLHJbdl09ITA7dmFyIHg9ZD4wfHxnPjAsYj1wLm51bUljb25WZXJ0aWNlcz4wO2lmKHgpe2Zvcih2YXIgXz1NZSh5LnRleHQpLHc9KGQrZykvNCxrPTA7azx3O2srKyllLnRleHQub3BhY2l0eVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKF8pO3ZhciBUPXkudGV4dC5pc0hpZGRlbigpPzE6MCxNPXRoaXMucGxhY2VkT3JpZW50YXRpb25zW3AuY3Jvc3NUaWxlSURdLEE9TT09PXQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbHx8TT09PXQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbE9ubHk/MTowLFM9TT09PXQuV3JpdGluZ01vZGUudmVydGljYWw/MTowO1twLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LHAuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LHAubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleF0uZm9yRWFjaChmdW5jdGlvbih0KXt0Pj0wJiYoZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldCh0KS5oaWRkZW49VHx8Uyl9KSxwLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4Pj0wJiYoZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChwLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KS5oaWRkZW49VHx8QSk7dmFyIEU9dGhpcy52YXJpYWJsZU9mZnNldHNbcC5jcm9zc1RpbGVJRF07RSYmdGhpcy5tYXJrVXNlZEp1c3RpZmljYXRpb24oZSxFLmFuY2hvcixwLE0pO3ZhciBMPXRoaXMucGxhY2VkT3JpZW50YXRpb25zW3AuY3Jvc3NUaWxlSURdO0wmJih0aGlzLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihlLCJsZWZ0IixwLEwpLHRoaXMubWFya1VzZWRPcmllbnRhdGlvbihlLEwscCkpfWlmKGIpe2Zvcih2YXIgQz1NZSh5Lmljb24pLFA9MDtQPHAubnVtSWNvblZlcnRpY2VzLzQ7UCsrKWUuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soQyk7ZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChmKS5oaWRkZW49eS5pY29uLmlzSGlkZGVuKCl9aWYoZS5oYXNDb2xsaXNpb25Cb3hEYXRhKCl8fGUuaGFzQ29sbGlzaW9uQ2lyY2xlRGF0YSgpKXt2YXIgTz1lLmNvbGxpc2lvbkFycmF5c1tmXTtpZihPKXtpZihPLnRleHRCb3gpe3ZhciB6PW5ldyB0LlBvaW50KDAsMCksST0hMDtpZihsKXt2YXIgRD10aGlzLnZhcmlhYmxlT2Zmc2V0c1t2XTtEPyh6PWdlKEQuYW5jaG9yLEQud2lkdGgsRC5oZWlnaHQsRC5yYWRpYWxPZmZzZXQsRC50ZXh0Qm94U2NhbGUpLGMmJnouX3JvdGF0ZSh1P3RoaXMudHJhbnNmb3JtLmFuZ2xlOi10aGlzLnRyYW5zZm9ybS5hbmdsZSkpOkk9ITF9bWUoZS5jb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkseS50ZXh0LnBsYWNlZCwhSSx6Lngsei55KX1PLmljb25Cb3gmJm1lKGUuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LHkuaWNvbi5wbGFjZWQsITEpO3ZhciBSPU8udGV4dENpcmNsZXM7aWYoUiYmZS5oYXNDb2xsaXNpb25DaXJjbGVEYXRhKCkpZm9yKHZhciBGPTA7RjxSLmxlbmd0aDtGKz01KXt2YXIgQj1tfHwwPT09UltGKzRdO21lKGUuY29sbGlzaW9uQ2lyY2xlLmNvbGxpc2lvblZlcnRleEFycmF5LHkudGV4dC5wbGFjZWQsQil9fX19ZS5zb3J0RmVhdHVyZXModGhpcy50cmFuc2Zvcm0uYW5nbGUpLHRoaXMucmV0YWluZWRRdWVyeURhdGFbZS5idWNrZXRJbnN0YW5jZUlkXSYmKHRoaXMucmV0YWluZWRRdWVyeURhdGFbZS5idWNrZXRJbnN0YW5jZUlkXS5mZWF0dXJlU29ydE9yZGVyPWUuZmVhdHVyZVNvcnRPcmRlciksZS5oYXNUZXh0RGF0YSgpJiZlLnRleHQub3BhY2l0eVZlcnRleEJ1ZmZlciYmZS50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShlLnRleHQub3BhY2l0eVZlcnRleEFycmF5KSxlLmhhc0ljb25EYXRhKCkmJmUuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyJiZlLmljb24ub3BhY2l0eVZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGUuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkpLGUuaGFzQ29sbGlzaW9uQm94RGF0YSgpJiZlLmNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXImJmUuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGUuY29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5KSxlLmhhc0NvbGxpc2lvbkNpcmNsZURhdGEoKSYmZS5jb2xsaXNpb25DaXJjbGUuY29sbGlzaW9uVmVydGV4QnVmZmVyJiZlLmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShlLmNvbGxpc2lvbkNpcmNsZS5jb2xsaXNpb25WZXJ0ZXhBcnJheSl9LHZlLnByb3RvdHlwZS5zeW1ib2xGYWRlQ2hhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5mYWRlRHVyYXRpb24/MToodC10aGlzLmNvbW1pdFRpbWUpL3RoaXMuZmFkZUR1cmF0aW9ufSx2ZS5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RhbGV8fHQtdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZTx0aGlzLmZhZGVEdXJhdGlvbn0sdmUucHJvdG90eXBlLnN0aWxsUmVjZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvbW1pdFRpbWUrdGhpcy5mYWRlRHVyYXRpb24+dH0sdmUucHJvdG90eXBlLnNldFN0YWxlPWZ1bmN0aW9uKCl7dGhpcy5zdGFsZT0hMH07dmFyIHllPU1hdGgucG93KDIsMjUpLHhlPU1hdGgucG93KDIsMjQpLGJlPU1hdGgucG93KDIsMTcpLF9lPU1hdGgucG93KDIsMTYpLHdlPU1hdGgucG93KDIsOSksa2U9TWF0aC5wb3coMiw4KSxUZT1NYXRoLnBvdygyLDEpO2Z1bmN0aW9uIE1lKHQpe2lmKDA9PT10Lm9wYWNpdHkmJiF0LnBsYWNlZClyZXR1cm4gMDtpZigxPT09dC5vcGFjaXR5JiZ0LnBsYWNlZClyZXR1cm4gNDI5NDk2NzI5NTt2YXIgZT10LnBsYWNlZD8xOjAscj1NYXRoLmZsb29yKDEyNyp0Lm9wYWNpdHkpO3JldHVybiByKnllK2UqeGUrcipiZStlKl9lK3Iqd2UrZSprZStyKlRlK2V9dmFyIEFlPWZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudFRpbGVJbmRleD0wLHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHM9e319O0FlLnByb3RvdHlwZS5jb250aW51ZVBsYWNlbWVudD1mdW5jdGlvbih0LGUscixuLGEpe2Zvcig7dGhpcy5fY3VycmVudFRpbGVJbmRleDx0Lmxlbmd0aDspe3ZhciBpPXRbdGhpcy5fY3VycmVudFRpbGVJbmRleF07aWYoZS5wbGFjZUxheWVyVGlsZShuLGkscix0aGlzLl9zZWVuQ3Jvc3NUaWxlSURzKSx0aGlzLl9jdXJyZW50VGlsZUluZGV4KyssYSgpKXJldHVybiEwfX07dmFyIFNlPWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8pe3RoaXMucGxhY2VtZW50PW5ldyB2ZSh0LGEsaSxvKSx0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXg9ZS5sZW5ndGgtMSx0aGlzLl9mb3JjZUZ1bGxQbGFjZW1lbnQ9cix0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXM9bix0aGlzLl9kb25lPSExfTtTZS5wcm90b3R5cGUuaXNEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvbmV9LFNlLnByb3RvdHlwZS5jb250aW51ZVBsYWNlbWVudD1mdW5jdGlvbihlLHIsbil7Zm9yKHZhciBhPXRoaXMsaT10LmJyb3dzZXIubm93KCksbz1mdW5jdGlvbigpe3ZhciBlPXQuYnJvd3Nlci5ub3coKS1pO3JldHVybiFhLl9mb3JjZUZ1bGxQbGFjZW1lbnQmJmU+Mn07dGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4Pj0wOyl7dmFyIHM9cltlW3RoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleF1dLGw9dGhpcy5wbGFjZW1lbnQuY29sbGlzaW9uSW5kZXgudHJhbnNmb3JtLnpvb207aWYoInN5bWJvbCI9PT1zLnR5cGUmJighcy5taW56b29tfHxzLm1pbnpvb208PWwpJiYoIXMubWF4em9vbXx8cy5tYXh6b29tPmwpKXtpZih0aGlzLl9pblByb2dyZXNzTGF5ZXJ8fCh0aGlzLl9pblByb2dyZXNzTGF5ZXI9bmV3IEFlKSx0aGlzLl9pblByb2dyZXNzTGF5ZXIuY29udGludWVQbGFjZW1lbnQobltzLnNvdXJjZV0sdGhpcy5wbGFjZW1lbnQsdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzLHMsbykpcmV0dXJuO2RlbGV0ZSB0aGlzLl9pblByb2dyZXNzTGF5ZXJ9dGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4LS19dGhpcy5fZG9uZT0hMH0sU2UucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wbGFjZW1lbnQuY29tbWl0KHQpLHRoaXMucGxhY2VtZW50fTt2YXIgRWU9NTEyL3QuRVhURU5ULzIsTGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGlsZUlEPXQsdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzPXt9LHRoaXMuYnVja2V0SW5zdGFuY2VJZD1yO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgYT1lLmdldChuKSxpPWEua2V5O3RoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1tpXXx8KHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1tpXT1bXSksdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2ldLnB1c2goe2Nyb3NzVGlsZUlEOmEuY3Jvc3NUaWxlSUQsY29vcmQ6dGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhhLHQpfSl9fTtMZS5wcm90b3R5cGUuZ2V0U2NhbGVkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSxyKXt2YXIgbj1yLmNhbm9uaWNhbC56LXRoaXMudGlsZUlELmNhbm9uaWNhbC56LGE9RWUvTWF0aC5wb3coMixuKTtyZXR1cm57eDpNYXRoLmZsb29yKChyLmNhbm9uaWNhbC54KnQuRVhURU5UK2UuYW5jaG9yWCkqYSkseTpNYXRoLmZsb29yKChyLmNhbm9uaWNhbC55KnQuRVhURU5UK2UuYW5jaG9yWSkqYSl9fSxMZS5wcm90b3R5cGUuZmluZE1hdGNoZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10aGlzLnRpbGVJRC5jYW5vbmljYWwuejxlLmNhbm9uaWNhbC56PzE6TWF0aC5wb3coMix0aGlzLnRpbGVJRC5jYW5vbmljYWwuei1lLmNhbm9uaWNhbC56KSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBpPXQuZ2V0KGEpO2lmKCFpLmNyb3NzVGlsZUlEKXt2YXIgbz10aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbaS5rZXldO2lmKG8pZm9yKHZhciBzPXRoaXMuZ2V0U2NhbGVkQ29vcmRpbmF0ZXMoaSxlKSxsPTAsYz1vO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXTtpZihNYXRoLmFicyh1LmNvb3JkLngtcy54KTw9biYmTWF0aC5hYnModS5jb29yZC55LXMueSk8PW4mJiFyW3UuY3Jvc3NUaWxlSURdKXtyW3UuY3Jvc3NUaWxlSURdPSEwLGkuY3Jvc3NUaWxlSUQ9dS5jcm9zc1RpbGVJRDticmVha319fX19O3ZhciBDZT1mdW5jdGlvbigpe3RoaXMubWF4Q3Jvc3NUaWxlSUQ9MH07Q2UucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLm1heENyb3NzVGlsZUlEfTt2YXIgUGU9ZnVuY3Rpb24oKXt0aGlzLmluZGV4ZXM9e30sdGhpcy51c2VkQ3Jvc3NUaWxlSURzPXt9LHRoaXMubG5nPTB9O1BlLnByb3RvdHlwZS5oYW5kbGVXcmFwSnVtcD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKCh0LXRoaXMubG5nKS8zNjApO2lmKDAhPT1lKWZvcih2YXIgciBpbiB0aGlzLmluZGV4ZXMpe3ZhciBuPXRoaXMuaW5kZXhlc1tyXSxhPXt9O2Zvcih2YXIgaSBpbiBuKXt2YXIgbz1uW2ldO28udGlsZUlEPW8udGlsZUlELnVud3JhcFRvKG8udGlsZUlELndyYXArZSksYVtvLnRpbGVJRC5rZXldPW99dGhpcy5pbmRleGVzW3JdPWF9dGhpcy5sbmc9dH0sUGUucHJvdG90eXBlLmFkZEJ1Y2tldD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdJiZ0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldKXtpZih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldLmJ1Y2tldEluc3RhbmNlSWQ9PT1lLmJ1Y2tldEluc3RhbmNlSWQpcmV0dXJuITE7dGhpcy5yZW1vdmVCdWNrZXRDcm9zc1RpbGVJRHModC5vdmVyc2NhbGVkWix0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldKX1mb3IodmFyIG49MDtuPGUuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDtuKyspZS5zeW1ib2xJbnN0YW5jZXMuZ2V0KG4pLmNyb3NzVGlsZUlEPTA7dGhpcy51c2VkQ3Jvc3NUaWxlSURzW3Qub3ZlcnNjYWxlZFpdfHwodGhpcy51c2VkQ3Jvc3NUaWxlSURzW3Qub3ZlcnNjYWxlZFpdPXt9KTt2YXIgYT10aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl07Zm9yKHZhciBpIGluIHRoaXMuaW5kZXhlcyl7dmFyIG89dGhpcy5pbmRleGVzW2ldO2lmKE51bWJlcihpKT50Lm92ZXJzY2FsZWRaKWZvcih2YXIgcyBpbiBvKXt2YXIgbD1vW3NdO2wudGlsZUlELmlzQ2hpbGRPZih0KSYmbC5maW5kTWF0Y2hlcyhlLnN5bWJvbEluc3RhbmNlcyx0LGEpfWVsc2V7dmFyIGM9b1t0LnNjYWxlZFRvKE51bWJlcihpKSkua2V5XTtjJiZjLmZpbmRNYXRjaGVzKGUuc3ltYm9sSW5zdGFuY2VzLHQsYSl9fWZvcih2YXIgdT0wO3U8ZS5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoO3UrKyl7dmFyIGg9ZS5zeW1ib2xJbnN0YW5jZXMuZ2V0KHUpO2guY3Jvc3NUaWxlSUR8fChoLmNyb3NzVGlsZUlEPXIuZ2VuZXJhdGUoKSxhW2guY3Jvc3NUaWxlSURdPSEwKX1yZXR1cm4gdm9pZCAwPT09dGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdJiYodGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdPXt9KSx0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl1bdC5rZXldPW5ldyBMZSh0LGUuc3ltYm9sSW5zdGFuY2VzLGUuYnVja2V0SW5zdGFuY2VJZCksITB9LFBlLnByb3RvdHlwZS5yZW1vdmVCdWNrZXRDcm9zc1RpbGVJRHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZS5pbmRleGVkU3ltYm9sSW5zdGFuY2VzKWZvcih2YXIgbj0wLGE9ZS5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW3JdO248YS5sZW5ndGg7bis9MSl7dmFyIGk9YVtuXTtkZWxldGUgdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3RdW2kuY3Jvc3NUaWxlSURdfX0sUGUucHJvdG90eXBlLnJlbW92ZVN0YWxlQnVja2V0cz1mdW5jdGlvbih0KXt2YXIgZT0hMTtmb3IodmFyIHIgaW4gdGhpcy5pbmRleGVzKXt2YXIgbj10aGlzLmluZGV4ZXNbcl07Zm9yKHZhciBhIGluIG4pdFtuW2FdLmJ1Y2tldEluc3RhbmNlSWRdfHwodGhpcy5yZW1vdmVCdWNrZXRDcm9zc1RpbGVJRHMocixuW2FdKSxkZWxldGUgblthXSxlPSEwKX1yZXR1cm4gZX07dmFyIE9lPWZ1bmN0aW9uKCl7dGhpcy5sYXllckluZGV4ZXM9e30sdGhpcy5jcm9zc1RpbGVJRHM9bmV3IENlLHRoaXMubWF4QnVja2V0SW5zdGFuY2VJZD0wLHRoaXMuYnVja2V0c0luQ3VycmVudFBsYWNlbWVudD17fX07T2UucHJvdG90eXBlLmFkZExheWVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxheWVySW5kZXhlc1t0LmlkXTt2b2lkIDA9PT1uJiYobj10aGlzLmxheWVySW5kZXhlc1t0LmlkXT1uZXcgUGUpO3ZhciBhPSExLGk9e307bi5oYW5kbGVXcmFwSnVtcChyKTtmb3IodmFyIG89MCxzPWU7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9bC5nZXRCdWNrZXQodCk7YyYmdC5pZD09PWMubGF5ZXJJZHNbMF0mJihjLmJ1Y2tldEluc3RhbmNlSWR8fChjLmJ1Y2tldEluc3RhbmNlSWQ9Kyt0aGlzLm1heEJ1Y2tldEluc3RhbmNlSWQpLG4uYWRkQnVja2V0KGwudGlsZUlELGMsdGhpcy5jcm9zc1RpbGVJRHMpJiYoYT0hMCksaVtjLmJ1Y2tldEluc3RhbmNlSWRdPSEwKX1yZXR1cm4gbi5yZW1vdmVTdGFsZUJ1Y2tldHMoaSkmJihhPSEwKSxhfSxPZS5wcm90b3R5cGUucHJ1bmVVbnVzZWRMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPSEwfSksdGhpcy5sYXllckluZGV4ZXMpZVtyXXx8ZGVsZXRlIHRoaXMubGF5ZXJJbmRleGVzW3JdfTt2YXIgemU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5lbWl0VmFsaWRhdGlvbkVycm9ycyhlLHImJnIuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiJzb3VyY2UuY2FudmFzIiE9PXQuaWRlbnRpZmllcn0pKX0sSWU9dC5waWNrKE50LFsiYWRkTGF5ZXIiLCJyZW1vdmVMYXllciIsInNldFBhaW50UHJvcGVydHkiLCJzZXRMYXlvdXRQcm9wZXJ0eSIsInNldEZpbHRlciIsImFkZFNvdXJjZSIsInJlbW92ZVNvdXJjZSIsInNldExheWVyWm9vbVJhbmdlIiwic2V0TGlnaHQiLCJzZXRUcmFuc2l0aW9uIiwic2V0R2VvSlNPTlNvdXJjZURhdGEiXSksRGU9dC5waWNrKE50LFsic2V0Q2VudGVyIiwic2V0Wm9vbSIsInNldEJlYXJpbmciLCJzZXRQaXRjaCJdKSxSZT1mdW5jdGlvbihlKXtmdW5jdGlvbiByKG4sYSl7dmFyIGk9dGhpczt2b2lkIDA9PT1hJiYoYT17fSksZS5jYWxsKHRoaXMpLHRoaXMubWFwPW4sdGhpcy5kaXNwYXRjaGVyPW5ldyBUKChEdHx8KER0PW5ldyBJdCksRHQpLHRoaXMpLHRoaXMuaW1hZ2VNYW5hZ2VyPW5ldyBmLHRoaXMuaW1hZ2VNYW5hZ2VyLnNldEV2ZW50ZWRQYXJlbnQodGhpcyksdGhpcy5nbHlwaE1hbmFnZXI9bmV3IHgobi5fcmVxdWVzdE1hbmFnZXIsYS5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkpLHRoaXMubGluZUF0bGFzPW5ldyBrKDI1Niw1MTIpLHRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXg9bmV3IE9lLHRoaXMuX2xheWVycz17fSx0aGlzLl9vcmRlcj1bXSx0aGlzLnNvdXJjZUNhY2hlcz17fSx0aGlzLnpvb21IaXN0b3J5PW5ldyB0Llpvb21IaXN0b3J5LHRoaXMuX2xvYWRlZD0hMSx0aGlzLl9yZXNldFVwZGF0ZXMoKSx0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJzZXRSZWZlcnJlciIsdC5nZXRSZWZlcnJlcigpKTt2YXIgbz10aGlzO3RoaXMuX3J0bFRleHRQbHVnaW5DYWxsYmFjaz1yLnJlZ2lzdGVyRm9yUGx1Z2luQXZhaWxhYmlsaXR5KGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiBvLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJsb2FkUlRMVGV4dFBsdWdpbiIsdC5wbHVnaW5VUkwsdC5jb21wbGV0aW9uQ2FsbGJhY2spLG8uc291cmNlQ2FjaGVzKW8uc291cmNlQ2FjaGVzW2VdLnJlbG9hZCgpfSksdGhpcy5vbigiZGF0YSIsZnVuY3Rpb24odCl7aWYoInNvdXJjZSI9PT10LmRhdGFUeXBlJiYibWV0YWRhdGEiPT09dC5zb3VyY2VEYXRhVHlwZSl7dmFyIGU9aS5zb3VyY2VDYWNoZXNbdC5zb3VyY2VJZF07aWYoZSl7dmFyIHI9ZS5nZXRTb3VyY2UoKTtpZihyJiZyLnZlY3RvckxheWVySWRzKWZvcih2YXIgbiBpbiBpLl9sYXllcnMpe3ZhciBhPWkuX2xheWVyc1tuXTthLnNvdXJjZT09PXIuaWQmJmkuX3ZhbGlkYXRlTGF5ZXIoYSl9fX19KX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZFVSTD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dm9pZCAwPT09ciYmKHI9e30pLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic3R5bGUifSkpO3ZhciBhPSJib29sZWFuIj09dHlwZW9mIHIudmFsaWRhdGU/ci52YWxpZGF0ZTohdC5pc01hcGJveFVSTChlKTtlPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTChlLHIuYWNjZXNzVG9rZW4pO3ZhciBpPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGUsdC5SZXNvdXJjZVR5cGUuU3R5bGUpO3RoaXMuX3JlcXVlc3Q9dC5nZXRKU09OKGksZnVuY3Rpb24oZSxyKXtuLl9yZXF1ZXN0PW51bGwsZT9uLmZpcmUobmV3IHQuRXJyb3JFdmVudChlKSk6ciYmbi5fbG9hZChyLGEpfSl9LHIucHJvdG90eXBlLmxvYWRKU09OPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt2b2lkIDA9PT1yJiYocj17fSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzdHlsZSJ9KSksdGhpcy5fcmVxdWVzdD10LmJyb3dzZXIuZnJhbWUoZnVuY3Rpb24oKXtuLl9yZXF1ZXN0PW51bGwsbi5fbG9hZChlLCExIT09ci52YWxpZGF0ZSl9KX0sci5wcm90b3R5cGUuX2xvYWQ9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO2lmKCFyfHwhemUodGhpcyx0LnZhbGlkYXRlU3R5bGUoZSkpKXtmb3IodmFyIGEgaW4gdGhpcy5fbG9hZGVkPSEwLHRoaXMuc3R5bGVzaGVldD1lLGUuc291cmNlcyl0aGlzLmFkZFNvdXJjZShhLGUuc291cmNlc1thXSx7dmFsaWRhdGU6ITF9KTtlLnNwcml0ZT90aGlzLl9zcHJpdGVSZXF1ZXN0PWZ1bmN0aW9uKGUscixuKXt2YXIgYSxpLG8scz10LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbz4xPyJAMngiOiIiLGw9dC5nZXRKU09OKHIudHJhbnNmb3JtUmVxdWVzdChyLm5vcm1hbGl6ZVNwcml0ZVVSTChlLHMsIi5qc29uIiksdC5SZXNvdXJjZVR5cGUuU3ByaXRlSlNPTiksZnVuY3Rpb24odCxlKXtsPW51bGwsb3x8KG89dCxhPWUsdSgpKX0pLGM9dC5nZXRJbWFnZShyLnRyYW5zZm9ybVJlcXVlc3Qoci5ub3JtYWxpemVTcHJpdGVVUkwoZSxzLCIucG5nIiksdC5SZXNvdXJjZVR5cGUuU3ByaXRlSW1hZ2UpLGZ1bmN0aW9uKHQsZSl7Yz1udWxsLG98fChvPXQsaT1lLHUoKSl9KTtmdW5jdGlvbiB1KCl7aWYobyluKG8pO2Vsc2UgaWYoYSYmaSl7dmFyIGU9dC5icm93c2VyLmdldEltYWdlRGF0YShpKSxyPXt9O2Zvcih2YXIgcyBpbiBhKXt2YXIgbD1hW3NdLGM9bC53aWR0aCx1PWwuaGVpZ2h0LGg9bC54LGY9bC55LHA9bC5zZGYsZD1sLnBpeGVsUmF0aW8sZz1uZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOmMsaGVpZ2h0OnV9KTt0LlJHQkFJbWFnZS5jb3B5KGUsZyx7eDpoLHk6Zn0se3g6MCx5OjB9LHt3aWR0aDpjLGhlaWdodDp1fSkscltzXT17ZGF0YTpnLHBpeGVsUmF0aW86ZCxzZGY6cH19bihudWxsLHIpfX1yZXR1cm57Y2FuY2VsOmZ1bmN0aW9uKCl7bCYmKGwuY2FuY2VsKCksbD1udWxsKSxjJiYoYy5jYW5jZWwoKSxjPW51bGwpfX19KGUuc3ByaXRlLHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlcixmdW5jdGlvbihlLHIpe2lmKG4uX3Nwcml0ZVJlcXVlc3Q9bnVsbCxlKW4uZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTtlbHNlIGlmKHIpZm9yKHZhciBhIGluIHIpbi5pbWFnZU1hbmFnZXIuYWRkSW1hZ2UoYSxyW2FdKTtuLmltYWdlTWFuYWdlci5zZXRMb2FkZWQoITApLG4uZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9KTp0aGlzLmltYWdlTWFuYWdlci5zZXRMb2FkZWQoITApLHRoaXMuZ2x5cGhNYW5hZ2VyLnNldFVSTChlLmdseXBocyk7dmFyIGk9QnQodGhpcy5zdHlsZXNoZWV0LmxheWVycyk7dGhpcy5fb3JkZXI9aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSx0aGlzLl9sYXllcnM9e307Zm9yKHZhciBvPTAscz1pO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTsobD10LmNyZWF0ZVN0eWxlTGF5ZXIobCkpLnNldEV2ZW50ZWRQYXJlbnQodGhpcyx7bGF5ZXI6e2lkOmwuaWR9fSksdGhpcy5fbGF5ZXJzW2wuaWRdPWx9dGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgic2V0TGF5ZXJzIix0aGlzLl9zZXJpYWxpemVMYXllcnModGhpcy5fb3JkZXIpKSx0aGlzLmxpZ2h0PW5ldyB3KHRoaXMuc3R5bGVzaGVldC5saWdodCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInN0eWxlLmxvYWQiKSl9fSxyLnByb3RvdHlwZS5fdmFsaWRhdGVMYXllcj1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnNvdXJjZUNhY2hlc1tlLnNvdXJjZV07aWYocil7dmFyIG49ZS5zb3VyY2VMYXllcjtpZihuKXt2YXIgYT1yLmdldFNvdXJjZSgpOygiZ2VvanNvbiI9PT1hLnR5cGV8fGEudmVjdG9yTGF5ZXJJZHMmJi0xPT09YS52ZWN0b3JMYXllcklkcy5pbmRleE9mKG4pKSYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdTb3VyY2UgbGF5ZXIgIicrbisnIiBkb2VzIG5vdCBleGlzdCBvbiBzb3VyY2UgIicrYS5pZCsnIiBhcyBzcGVjaWZpZWQgYnkgc3R5bGUgbGF5ZXIgIicrZS5pZCsnIicpKSl9fX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZClyZXR1cm4hMTtpZihPYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkU291cmNlcykubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcylpZighdGhpcy5zb3VyY2VDYWNoZXNbdF0ubG9hZGVkKCkpcmV0dXJuITE7cmV0dXJuISF0aGlzLmltYWdlTWFuYWdlci5pc0xvYWRlZCgpfSxyLnByb3RvdHlwZS5fc2VyaWFsaXplTGF5ZXJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGE9bltyXSxpPXRoaXMuX2xheWVyc1thXTsiY3VzdG9tIiE9PWkudHlwZSYmZS5wdXNoKGkuc2VyaWFsaXplKCkpfXJldHVybiBlfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9ucz1mdW5jdGlvbigpe2lmKHRoaXMubGlnaHQmJnRoaXMubGlnaHQuaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcylpZih0aGlzLnNvdXJjZUNhY2hlc1t0XS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycylpZih0aGlzLl9sYXllcnNbZV0uaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO3JldHVybiExfSxyLnByb3RvdHlwZS5fY2hlY2tMb2FkZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXRocm93IG5ldyBFcnJvcigiU3R5bGUgaXMgbm90IGRvbmUgbG9hZGluZyIpfSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbG9hZGVkKXt2YXIgcj10aGlzLl9jaGFuZ2VkO2lmKHRoaXMuX2NoYW5nZWQpe3ZhciBuPU9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZWRMYXllcnMpLGE9T2JqZWN0LmtleXModGhpcy5fcmVtb3ZlZExheWVycyk7Zm9yKHZhciBpIGluKG4ubGVuZ3RofHxhLmxlbmd0aCkmJnRoaXMuX3VwZGF0ZVdvcmtlckxheWVycyhuLGEpLHRoaXMuX3VwZGF0ZWRTb3VyY2VzKXt2YXIgbz10aGlzLl91cGRhdGVkU291cmNlc1tpXTsicmVsb2FkIj09PW8/dGhpcy5fcmVsb2FkU291cmNlKGkpOiJjbGVhciI9PT1vJiZ0aGlzLl9jbGVhclNvdXJjZShpKX1mb3IodmFyIHMgaW4gdGhpcy5fdXBkYXRlZFBhaW50UHJvcHMpdGhpcy5fbGF5ZXJzW3NdLnVwZGF0ZVRyYW5zaXRpb25zKGUpO3RoaXMubGlnaHQudXBkYXRlVHJhbnNpdGlvbnMoZSksdGhpcy5fcmVzZXRVcGRhdGVzKCl9Zm9yKHZhciBsIGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW2xdLnVzZWQ9ITE7Zm9yKHZhciBjPTAsdT10aGlzLl9vcmRlcjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBoPXVbY10sZj10aGlzLl9sYXllcnNbaF07Zi5yZWNhbGN1bGF0ZShlKSwhZi5pc0hpZGRlbihlLnpvb20pJiZmLnNvdXJjZSYmKHRoaXMuc291cmNlQ2FjaGVzW2Yuc291cmNlXS51c2VkPSEwKX10aGlzLmxpZ2h0LnJlY2FsY3VsYXRlKGUpLHRoaXMuej1lLnpvb20sciYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKX19LHIucHJvdG90eXBlLl91cGRhdGVXb3JrZXJMYXllcnM9ZnVuY3Rpb24odCxlKXt0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJ1cGRhdGVMYXllcnMiLHtsYXllcnM6dGhpcy5fc2VyaWFsaXplTGF5ZXJzKHQpLHJlbW92ZWRJZHM6ZX0pfSxyLnByb3RvdHlwZS5fcmVzZXRVcGRhdGVzPWZ1bmN0aW9uKCl7dGhpcy5fY2hhbmdlZD0hMSx0aGlzLl91cGRhdGVkTGF5ZXJzPXt9LHRoaXMuX3JlbW92ZWRMYXllcnM9e30sdGhpcy5fdXBkYXRlZFNvdXJjZXM9e30sdGhpcy5fdXBkYXRlZFBhaW50UHJvcHM9e319LHIucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSx6ZSh0aGlzLHQudmFsaWRhdGVTdHlsZShlKSkpcmV0dXJuITE7KGU9dC5jbG9uZSQxKGUpKS5sYXllcnM9QnQoZS5sYXllcnMpO3ZhciBuPWZ1bmN0aW9uKGUscil7aWYoIWUpcmV0dXJuW3tjb21tYW5kOk50LnNldFN0eWxlLGFyZ3M6W3JdfV07dmFyIG49W107dHJ5e2lmKCF0LmRlZXBFcXVhbChlLnZlcnNpb24sci52ZXJzaW9uKSlyZXR1cm5be2NvbW1hbmQ6TnQuc2V0U3R5bGUsYXJnczpbcl19XTt0LmRlZXBFcXVhbChlLmNlbnRlcixyLmNlbnRlcil8fG4ucHVzaCh7Y29tbWFuZDpOdC5zZXRDZW50ZXIsYXJnczpbci5jZW50ZXJdfSksdC5kZWVwRXF1YWwoZS56b29tLHIuem9vbSl8fG4ucHVzaCh7Y29tbWFuZDpOdC5zZXRab29tLGFyZ3M6W3Iuem9vbV19KSx0LmRlZXBFcXVhbChlLmJlYXJpbmcsci5iZWFyaW5nKXx8bi5wdXNoKHtjb21tYW5kOk50LnNldEJlYXJpbmcsYXJnczpbci5iZWFyaW5nXX0pLHQuZGVlcEVxdWFsKGUucGl0Y2gsci5waXRjaCl8fG4ucHVzaCh7Y29tbWFuZDpOdC5zZXRQaXRjaCxhcmdzOltyLnBpdGNoXX0pLHQuZGVlcEVxdWFsKGUuc3ByaXRlLHIuc3ByaXRlKXx8bi5wdXNoKHtjb21tYW5kOk50LnNldFNwcml0ZSxhcmdzOltyLnNwcml0ZV19KSx0LmRlZXBFcXVhbChlLmdseXBocyxyLmdseXBocyl8fG4ucHVzaCh7Y29tbWFuZDpOdC5zZXRHbHlwaHMsYXJnczpbci5nbHlwaHNdfSksdC5kZWVwRXF1YWwoZS50cmFuc2l0aW9uLHIudHJhbnNpdGlvbil8fG4ucHVzaCh7Y29tbWFuZDpOdC5zZXRUcmFuc2l0aW9uLGFyZ3M6W3IudHJhbnNpdGlvbl19KSx0LmRlZXBFcXVhbChlLmxpZ2h0LHIubGlnaHQpfHxuLnB1c2goe2NvbW1hbmQ6TnQuc2V0TGlnaHQsYXJnczpbci5saWdodF19KTt2YXIgYT17fSxpPVtdOyFmdW5jdGlvbihlLHIsbixhKXt2YXIgaTtmb3IoaSBpbiByPXJ8fHt9LGU9ZXx8e30pZS5oYXNPd25Qcm9wZXJ0eShpKSYmKHIuaGFzT3duUHJvcGVydHkoaSl8fFZ0KGksbixhKSk7Zm9yKGkgaW4gcilyLmhhc093blByb3BlcnR5KGkpJiYoZS5oYXNPd25Qcm9wZXJ0eShpKT90LmRlZXBFcXVhbChlW2ldLHJbaV0pfHwoImdlb2pzb24iPT09ZVtpXS50eXBlJiYiZ2VvanNvbiI9PT1yW2ldLnR5cGUmJnF0KGUscixpKT9uLnB1c2goe2NvbW1hbmQ6TnQuc2V0R2VvSlNPTlNvdXJjZURhdGEsYXJnczpbaSxyW2ldLmRhdGFdfSk6VXQoaSxyLG4sYSkpOmp0KGkscixuKSl9KGUuc291cmNlcyxyLnNvdXJjZXMsaSxhKTt2YXIgbz1bXTtlLmxheWVycyYmZS5sYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXthW3Quc291cmNlXT9uLnB1c2goe2NvbW1hbmQ6TnQucmVtb3ZlTGF5ZXIsYXJnczpbdC5pZF19KTpvLnB1c2godCl9KSxuPW4uY29uY2F0KGkpLGZ1bmN0aW9uKGUscixuKXtyPXJ8fFtdO3ZhciBhLGksbyxzLGwsYyx1LGg9KGU9ZXx8W10pLm1hcChHdCksZj1yLm1hcChHdCkscD1lLnJlZHVjZShZdCx7fSksZD1yLnJlZHVjZShZdCx7fSksZz1oLnNsaWNlKCksdj1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihhPTAsaT0wO2E8aC5sZW5ndGg7YSsrKW89aFthXSxkLmhhc093blByb3BlcnR5KG8pP2krKzoobi5wdXNoKHtjb21tYW5kOk50LnJlbW92ZUxheWVyLGFyZ3M6W29dfSksZy5zcGxpY2UoZy5pbmRleE9mKG8saSksMSkpO2ZvcihhPTAsaT0wO2E8Zi5sZW5ndGg7YSsrKW89ZltmLmxlbmd0aC0xLWFdLGdbZy5sZW5ndGgtMS1hXSE9PW8mJihwLmhhc093blByb3BlcnR5KG8pPyhuLnB1c2goe2NvbW1hbmQ6TnQucmVtb3ZlTGF5ZXIsYXJnczpbb119KSxnLnNwbGljZShnLmxhc3RJbmRleE9mKG8sZy5sZW5ndGgtaSksMSkpOmkrKyxjPWdbZy5sZW5ndGgtYV0sbi5wdXNoKHtjb21tYW5kOk50LmFkZExheWVyLGFyZ3M6W2Rbb10sY119KSxnLnNwbGljZShnLmxlbmd0aC1hLDAsbyksdltvXT0hMCk7Zm9yKGE9MDthPGYubGVuZ3RoO2ErKylpZihzPXBbbz1mW2FdXSxsPWRbb10sIXZbb10mJiF0LmRlZXBFcXVhbChzLGwpKWlmKHQuZGVlcEVxdWFsKHMuc291cmNlLGwuc291cmNlKSYmdC5kZWVwRXF1YWwoc1sic291cmNlLWxheWVyIl0sbFsic291cmNlLWxheWVyIl0pJiZ0LmRlZXBFcXVhbChzLnR5cGUsbC50eXBlKSl7Zm9yKHUgaW4gSHQocy5sYXlvdXQsbC5sYXlvdXQsbixvLG51bGwsTnQuc2V0TGF5b3V0UHJvcGVydHkpLEh0KHMucGFpbnQsbC5wYWludCxuLG8sbnVsbCxOdC5zZXRQYWludFByb3BlcnR5KSx0LmRlZXBFcXVhbChzLmZpbHRlcixsLmZpbHRlcil8fG4ucHVzaCh7Y29tbWFuZDpOdC5zZXRGaWx0ZXIsYXJnczpbbyxsLmZpbHRlcl19KSx0LmRlZXBFcXVhbChzLm1pbnpvb20sbC5taW56b29tKSYmdC5kZWVwRXF1YWwocy5tYXh6b29tLGwubWF4em9vbSl8fG4ucHVzaCh7Y29tbWFuZDpOdC5zZXRMYXllclpvb21SYW5nZSxhcmdzOltvLGwubWluem9vbSxsLm1heHpvb21dfSkscylzLmhhc093blByb3BlcnR5KHUpJiYibGF5b3V0IiE9PXUmJiJwYWludCIhPT11JiYiZmlsdGVyIiE9PXUmJiJtZXRhZGF0YSIhPT11JiYibWluem9vbSIhPT11JiYibWF4em9vbSIhPT11JiYoMD09PXUuaW5kZXhPZigicGFpbnQuIik/SHQoc1t1XSxsW3VdLG4sbyx1LnNsaWNlKDYpLE50LnNldFBhaW50UHJvcGVydHkpOnQuZGVlcEVxdWFsKHNbdV0sbFt1XSl8fG4ucHVzaCh7Y29tbWFuZDpOdC5zZXRMYXllclByb3BlcnR5LGFyZ3M6W28sdSxsW3VdXX0pKTtmb3IodSBpbiBsKWwuaGFzT3duUHJvcGVydHkodSkmJiFzLmhhc093blByb3BlcnR5KHUpJiYibGF5b3V0IiE9PXUmJiJwYWludCIhPT11JiYiZmlsdGVyIiE9PXUmJiJtZXRhZGF0YSIhPT11JiYibWluem9vbSIhPT11JiYibWF4em9vbSIhPT11JiYoMD09PXUuaW5kZXhPZigicGFpbnQuIik/SHQoc1t1XSxsW3VdLG4sbyx1LnNsaWNlKDYpLE50LnNldFBhaW50UHJvcGVydHkpOnQuZGVlcEVxdWFsKHNbdV0sbFt1XSl8fG4ucHVzaCh7Y29tbWFuZDpOdC5zZXRMYXllclByb3BlcnR5LGFyZ3M6W28sdSxsW3VdXX0pKX1lbHNlIG4ucHVzaCh7Y29tbWFuZDpOdC5yZW1vdmVMYXllcixhcmdzOltvXX0pLGM9Z1tnLmxhc3RJbmRleE9mKG8pKzFdLG4ucHVzaCh7Y29tbWFuZDpOdC5hZGRMYXllcixhcmdzOltsLGNdfSl9KG8sci5sYXllcnMsbil9Y2F0Y2godCl7Y29uc29sZS53YXJuKCJVbmFibGUgdG8gY29tcHV0ZSBzdHlsZSBkaWZmOiIsdCksbj1be2NvbW1hbmQ6TnQuc2V0U3R5bGUsYXJnczpbcl19XX1yZXR1cm4gbn0odGhpcy5zZXJpYWxpemUoKSxlKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNvbW1hbmQgaW4gRGUpfSk7aWYoMD09PW4ubGVuZ3RoKXJldHVybiExO3ZhciBhPW4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEodC5jb21tYW5kIGluIEllKX0pO2lmKGEubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCJVbmltcGxlbWVudGVkOiAiK2EubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbW1hbmR9KS5qb2luKCIsICIpKyIuIik7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXsic2V0VHJhbnNpdGlvbiIhPT10LmNvbW1hbmQmJnJbdC5jb21tYW5kXS5hcHBseShyLHQuYXJncyl9KSx0aGlzLnN0eWxlc2hlZXQ9ZSwhMH0sci5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24oZSxyKXtpZih0aGlzLmdldEltYWdlKGUpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkFuIGltYWdlIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLiIpKSk7dGhpcy5pbWFnZU1hbmFnZXIuYWRkSW1hZ2UoZSxyKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic3R5bGUifSkpfSxyLnByb3RvdHlwZS51cGRhdGVJbWFnZT1mdW5jdGlvbih0LGUpe3RoaXMuaW1hZ2VNYW5hZ2VyLnVwZGF0ZUltYWdlKHQsZSl9LHIucHJvdG90eXBlLmdldEltYWdlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltYWdlTWFuYWdlci5nZXRJbWFnZSh0KX0sci5wcm90b3R5cGUucmVtb3ZlSW1hZ2U9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZ2V0SW1hZ2UoZSkpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiTm8gaW1hZ2Ugd2l0aCB0aGlzIG5hbWUgZXhpc3RzLiIpKSk7dGhpcy5pbWFnZU1hbmFnZXIucmVtb3ZlSW1hZ2UoZSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKX0sci5wcm90b3R5cGUubGlzdEltYWdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja0xvYWRlZCgpLHRoaXMuaW1hZ2VNYW5hZ2VyLmxpc3RJbWFnZXMoKX0sci5wcm90b3R5cGUuYWRkU291cmNlPWZ1bmN0aW9uKGUscixuKXt2YXIgYT10aGlzO2lmKHZvaWQgMD09PW4mJihuPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMCE9PXRoaXMuc291cmNlQ2FjaGVzW2VdKXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgYWxyZWFkeSBhIHNvdXJjZSB3aXRoIHRoaXMgSUQiKTtpZighci50eXBlKXRocm93IG5ldyBFcnJvcigiVGhlIHR5cGUgcHJvcGVydHkgbXVzdCBiZSBkZWZpbmVkLCBidXQgdGhlIG9ubHkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHdlcmUgZ2l2ZW46ICIrT2JqZWN0LmtleXMocikuam9pbigiLCAiKSsiLiIpO2lmKCEoWyJ2ZWN0b3IiLCJyYXN0ZXIiLCJnZW9qc29uIiwidmlkZW8iLCJpbWFnZSJdLmluZGV4T2Yoci50eXBlKT49MCYmdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLnNvdXJjZSwic291cmNlcy4iK2UscixudWxsLG4pKSl7dGhpcy5tYXAmJnRoaXMubWFwLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcmJihyLmNvbGxlY3RSZXNvdXJjZVRpbWluZz0hMCk7dmFyIGk9dGhpcy5zb3VyY2VDYWNoZXNbZV09bmV3IEN0KGUscix0aGlzLmRpc3BhdGNoZXIpO2kuc3R5bGU9dGhpcyxpLnNldEV2ZW50ZWRQYXJlbnQodGhpcyxmdW5jdGlvbigpe3JldHVybntpc1NvdXJjZUxvYWRlZDphLmxvYWRlZCgpLHNvdXJjZTppLnNlcmlhbGl6ZSgpLHNvdXJjZUlkOmV9fSksaS5vbkFkZCh0aGlzLm1hcCksdGhpcy5fY2hhbmdlZD0hMH19LHIucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbihlKXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMD09PXRoaXMuc291cmNlQ2FjaGVzW2VdKXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgbm8gc291cmNlIHdpdGggdGhpcyBJRCIpO2Zvcih2YXIgciBpbiB0aGlzLl9sYXllcnMpaWYodGhpcy5fbGF5ZXJzW3JdLnNvdXJjZT09PWUpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignU291cmNlICInK2UrJyIgY2Fubm90IGJlIHJlbW92ZWQgd2hpbGUgbGF5ZXIgIicrcisnIiBpcyB1c2luZyBpdC4nKSkpO3ZhciBuPXRoaXMuc291cmNlQ2FjaGVzW2VdO2RlbGV0ZSB0aGlzLnNvdXJjZUNhY2hlc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZFNvdXJjZXNbZV0sbi5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7c291cmNlRGF0YVR5cGU6Im1ldGFkYXRhIixkYXRhVHlwZToic291cmNlIixzb3VyY2VJZDplfSkpLG4uc2V0RXZlbnRlZFBhcmVudChudWxsKSxuLmNsZWFyVGlsZXMoKSxuLm9uUmVtb3ZlJiZuLm9uUmVtb3ZlKHRoaXMubWFwKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5zZXRHZW9KU09OU291cmNlRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuX2NoZWNrTG9hZGVkKCksdGhpcy5zb3VyY2VDYWNoZXNbdF0uZ2V0U291cmNlKCkuc2V0RGF0YShlKSx0aGlzLl9jaGFuZ2VkPSEwfSxyLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlQ2FjaGVzW3RdJiZ0aGlzLnNvdXJjZUNhY2hlc1t0XS5nZXRTb3VyY2UoKX0sci5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24oZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBhPWUuaWQ7aWYodGhpcy5nZXRMYXllcihhKSl0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0xheWVyIHdpdGggaWQgIicrYSsnIiBhbHJlYWR5IGV4aXN0cyBvbiB0aGlzIG1hcCcpKSk7ZWxzZXt2YXIgaTtpZigiY3VzdG9tIj09PWUudHlwZSl7aWYoemUodGhpcyx0LnZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcihlKSkpcmV0dXJuO2k9dC5jcmVhdGVTdHlsZUxheWVyKGUpfWVsc2V7aWYoIm9iamVjdCI9PXR5cGVvZiBlLnNvdXJjZSYmKHRoaXMuYWRkU291cmNlKGEsZS5zb3VyY2UpLGU9dC5jbG9uZSQxKGUpLGU9dC5leHRlbmQoZSx7c291cmNlOmF9KSksdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmxheWVyLCJsYXllcnMuIithLGUse2FycmF5SW5kZXg6LTF9LG4pKXJldHVybjtpPXQuY3JlYXRlU3R5bGVMYXllcihlKSx0aGlzLl92YWxpZGF0ZUxheWVyKGkpLGkuc2V0RXZlbnRlZFBhcmVudCh0aGlzLHtsYXllcjp7aWQ6YX19KX12YXIgbz1yP3RoaXMuX29yZGVyLmluZGV4T2Yocik6dGhpcy5fb3JkZXIubGVuZ3RoO2lmKHImJi0xPT09byl0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0xheWVyIHdpdGggaWQgIicrcisnIiBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIG1hcC4nKSkpO2Vsc2V7aWYodGhpcy5fb3JkZXIuc3BsaWNlKG8sMCxhKSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMCx0aGlzLl9sYXllcnNbYV09aSx0aGlzLl9yZW1vdmVkTGF5ZXJzW2FdJiZpLnNvdXJjZSYmImN1c3RvbSIhPT1pLnR5cGUpe3ZhciBzPXRoaXMuX3JlbW92ZWRMYXllcnNbYV07ZGVsZXRlIHRoaXMuX3JlbW92ZWRMYXllcnNbYV0scy50eXBlIT09aS50eXBlP3RoaXMuX3VwZGF0ZWRTb3VyY2VzW2kuc291cmNlXT0iY2xlYXIiOih0aGlzLl91cGRhdGVkU291cmNlc1tpLnNvdXJjZV09InJlbG9hZCIsdGhpcy5zb3VyY2VDYWNoZXNbaS5zb3VyY2VdLnBhdXNlKCkpfXRoaXMuX3VwZGF0ZUxheWVyKGkpLGkub25BZGQmJmkub25BZGQodGhpcy5tYXApfX19LHIucHJvdG90eXBlLm1vdmVMYXllcj1mdW5jdGlvbihlLHIpe2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl9sYXllcnNbZV0pe2lmKGUhPT1yKXt2YXIgbj10aGlzLl9vcmRlci5pbmRleE9mKGUpO3RoaXMuX29yZGVyLnNwbGljZShuLDEpO3ZhciBhPXI/dGhpcy5fb3JkZXIuaW5kZXhPZihyKTp0aGlzLl9vcmRlci5sZW5ndGg7ciYmLTE9PT1hP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignTGF5ZXIgd2l0aCBpZCAiJytyKyciIGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgbWFwLicpKSk6KHRoaXMuX29yZGVyLnNwbGljZShhLDAsZSksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITApfX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgbW92ZWQuIikpKX0sci5wcm90b3R5cGUucmVtb3ZlTGF5ZXI9ZnVuY3Rpb24oZSl7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgcj10aGlzLl9sYXllcnNbZV07aWYocil7ci5zZXRFdmVudGVkUGFyZW50KG51bGwpO3ZhciBuPXRoaXMuX29yZGVyLmluZGV4T2YoZSk7dGhpcy5fb3JkZXIuc3BsaWNlKG4sMSksdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQ9ITAsdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl9yZW1vdmVkTGF5ZXJzW2VdPXIsZGVsZXRlIHRoaXMuX2xheWVyc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZExheWVyc1tlXSxkZWxldGUgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbZV0sci5vblJlbW92ZSYmci5vblJlbW92ZSh0aGlzLm1hcCl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHJlbW92ZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xheWVyc1t0XX0sci5wcm90b3R5cGUuc2V0TGF5ZXJab29tUmFuZ2U9ZnVuY3Rpb24oZSxyLG4pe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGE9dGhpcy5nZXRMYXllcihlKTthP2EubWluem9vbT09PXImJmEubWF4em9vbT09PW58fChudWxsIT1yJiYoYS5taW56b29tPXIpLG51bGwhPW4mJihhLm1heHpvb209biksdGhpcy5fdXBkYXRlTGF5ZXIoYSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgaGF2ZSB6b29tIGV4dGVudC4iKSkpfSxyLnByb3RvdHlwZS5zZXRGaWx0ZXI9ZnVuY3Rpb24oZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBhPXRoaXMuZ2V0TGF5ZXIoZSk7aWYoYSl7aWYoIXQuZGVlcEVxdWFsKGEuZmlsdGVyLHIpKXJldHVybiBudWxsPT1yPyhhLmZpbHRlcj12b2lkIDAsdm9pZCB0aGlzLl91cGRhdGVMYXllcihhKSk6dm9pZCh0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLCJsYXllcnMuIithLmlkKyIuZmlsdGVyIixyLG51bGwsbil8fChhLmZpbHRlcj10LmNsb25lJDEociksdGhpcy5fdXBkYXRlTGF5ZXIoYSkpKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgZmlsdGVyZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0RmlsdGVyPWZ1bmN0aW9uKGUpe3JldHVybiB0LmNsb25lJDEodGhpcy5nZXRMYXllcihlKS5maWx0ZXIpfSxyLnByb3RvdHlwZS5zZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbixhKXt2b2lkIDA9PT1hJiYoYT17fSksdGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgaT10aGlzLmdldExheWVyKGUpO2k/dC5kZWVwRXF1YWwoaS5nZXRMYXlvdXRQcm9wZXJ0eShyKSxuKXx8KGkuc2V0TGF5b3V0UHJvcGVydHkocixuLGEpLHRoaXMuX3VwZGF0ZUxheWVyKGkpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHN0eWxlZC4iKSkpfSxyLnByb3RvdHlwZS5nZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuZ2V0TGF5ZXIoZSk7aWYobilyZXR1cm4gbi5nZXRMYXlvdXRQcm9wZXJ0eShyKTt0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS4iKSkpfSxyLnByb3RvdHlwZS5zZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKGUscixuLGEpe3ZvaWQgMD09PWEmJihhPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZSk7aT90LmRlZXBFcXVhbChpLmdldFBhaW50UHJvcGVydHkociksbil8fChpLnNldFBhaW50UHJvcGVydHkocixuLGEpJiZ0aGlzLl91cGRhdGVMYXllcihpKSx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuX3VwZGF0ZWRQYWludFByb3BzW2VdPSEwKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHN0eWxlZC4iKSkpfSxyLnByb3RvdHlwZS5nZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0TGF5ZXIodCkuZ2V0UGFpbnRQcm9wZXJ0eShlKX0sci5wcm90b3R5cGUuc2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKGUscil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgbj1lLnNvdXJjZSxhPWUuc291cmNlTGF5ZXIsaT10aGlzLnNvdXJjZUNhY2hlc1tuXSxvPXBhcnNlSW50KGUuaWQsMTApO2lmKHZvaWQgMCE9PWkpe3ZhciBzPWkuZ2V0U291cmNlKCkudHlwZTsiZ2VvanNvbiI9PT1zJiZhP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiR2VvSlNPTiBzb3VyY2VzIGNhbm5vdCBoYXZlIGEgc291cmNlTGF5ZXIgcGFyYW1ldGVyLiIpKSk6InZlY3RvciIhPT1zfHxhP2lzTmFOKG8pfHxvPDA/dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgZmVhdHVyZSBpZCBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZCBhbmQgbm9uLW5lZ2F0aXZlLiIpKSk6aS5zZXRGZWF0dXJlU3RhdGUoYSxvLHIpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLiIpKSl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBzb3VyY2UgJyIrbisiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUuIikpKX0sci5wcm90b3R5cGUucmVtb3ZlRmVhdHVyZVN0YXRlPWZ1bmN0aW9uKGUscil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgbj1lLnNvdXJjZSxhPXRoaXMuc291cmNlQ2FjaGVzW25dO2lmKHZvaWQgMCE9PWEpe3ZhciBpPWEuZ2V0U291cmNlKCkudHlwZSxvPSJ2ZWN0b3IiPT09aT9lLnNvdXJjZUxheWVyOnZvaWQgMCxzPXBhcnNlSW50KGUuaWQsMTApOyJ2ZWN0b3IiIT09aXx8bz92b2lkIDAhPT1lLmlkJiZpc05hTihzKXx8czwwP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGZlYXR1cmUgaWQgcGFyYW1ldGVyIG11c3QgYmUgbm9uLW5lZ2F0aXZlLiIpKSk6ciYmInN0cmluZyIhPXR5cGVvZiBlLmlkJiYibnVtYmVyIiE9dHlwZW9mIGUuaWQ/dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJBIGZlYXR1cmUgaWQgaXMgcmVxdXJlZCB0byByZW1vdmUgaXRzIHNwZWNpZmljIHN0YXRlIHByb3BlcnR5LiIpKSk6YS5yZW1vdmVGZWF0dXJlU3RhdGUobyxzLHIpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLiIpKSl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBzb3VyY2UgJyIrbisiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUuIikpKX0sci5wcm90b3R5cGUuZ2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIHI9ZS5zb3VyY2Usbj1lLnNvdXJjZUxheWVyLGE9dGhpcy5zb3VyY2VDYWNoZXNbcl0saT1wYXJzZUludChlLmlkLDEwKTtpZih2b2lkIDAhPT1hKWlmKCJ2ZWN0b3IiIT09YS5nZXRTb3VyY2UoKS50eXBlfHxuKXtpZighKGlzTmFOKGkpfHxpPDApKXJldHVybiBhLmdldEZlYXR1cmVTdGF0ZShuLGkpO3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGZlYXR1cmUgaWQgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgYW5kIG5vbi1uZWdhdGl2ZS4iKSkpfWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgc291cmNlTGF5ZXIgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQgZm9yIHZlY3RvciBzb3VyY2UgdHlwZXMuIikpKTtlbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZSAnIityKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS4iKSkpfSxyLnByb3RvdHlwZS5nZXRUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHtkdXJhdGlvbjozMDAsZGVsYXk6MH0sdGhpcy5zdHlsZXNoZWV0JiZ0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbil9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmZpbHRlck9iamVjdCh7dmVyc2lvbjp0aGlzLnN0eWxlc2hlZXQudmVyc2lvbixuYW1lOnRoaXMuc3R5bGVzaGVldC5uYW1lLG1ldGFkYXRhOnRoaXMuc3R5bGVzaGVldC5tZXRhZGF0YSxsaWdodDp0aGlzLnN0eWxlc2hlZXQubGlnaHQsY2VudGVyOnRoaXMuc3R5bGVzaGVldC5jZW50ZXIsem9vbTp0aGlzLnN0eWxlc2hlZXQuem9vbSxiZWFyaW5nOnRoaXMuc3R5bGVzaGVldC5iZWFyaW5nLHBpdGNoOnRoaXMuc3R5bGVzaGVldC5waXRjaCxzcHJpdGU6dGhpcy5zdHlsZXNoZWV0LnNwcml0ZSxnbHlwaHM6dGhpcy5zdHlsZXNoZWV0LmdseXBocyx0cmFuc2l0aW9uOnRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uLHNvdXJjZXM6dC5tYXBPYmplY3QodGhpcy5zb3VyY2VDYWNoZXMsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KSxsYXllcnM6dGhpcy5fc2VyaWFsaXplTGF5ZXJzKHRoaXMuX29yZGVyKX0sZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXR9KX0sci5wcm90b3R5cGUuX3VwZGF0ZUxheWVyPWZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZWRMYXllcnNbdC5pZF09ITAsdC5zb3VyY2UmJiF0aGlzLl91cGRhdGVkU291cmNlc1t0LnNvdXJjZV0mJih0aGlzLl91cGRhdGVkU291cmNlc1t0LnNvdXJjZV09InJlbG9hZCIsdGhpcy5zb3VyY2VDYWNoZXNbdC5zb3VyY2VdLnBhdXNlKCkpLHRoaXMuX2NoYW5nZWQ9ITB9LHIucHJvdG90eXBlLl9mbGF0dGVuQW5kU29ydFJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1mdW5jdGlvbih0KXtyZXR1cm4iZmlsbC1leHRydXNpb24iPT09ZS5fbGF5ZXJzW3RdLnR5cGV9LG49e30sYT1bXSxpPXRoaXMuX29yZGVyLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgbz10aGlzLl9vcmRlcltpXTtpZihyKG8pKXtuW29dPWk7Zm9yKHZhciBzPTAsbD10O3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXVtvXTtpZihjKWZvcih2YXIgdT0wLGg9Yzt1PGgubGVuZ3RoO3UrPTEpe3ZhciBmPWhbdV07YS5wdXNoKGYpfX19fWEuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlLmludGVyc2VjdGlvblotdC5pbnRlcnNlY3Rpb25afSk7Zm9yKHZhciBwPVtdLGQ9dGhpcy5fb3JkZXIubGVuZ3RoLTE7ZD49MDtkLS0pe3ZhciBnPXRoaXMuX29yZGVyW2RdO2lmKHIoZykpZm9yKHZhciB2PWEubGVuZ3RoLTE7dj49MDt2LS0pe3ZhciBtPWFbdl0uZmVhdHVyZTtpZihuW20ubGF5ZXIuaWRdPGQpYnJlYWs7cC5wdXNoKG0pLGEucG9wKCl9ZWxzZSBmb3IodmFyIHk9MCx4PXQ7eTx4Lmxlbmd0aDt5Kz0xKXt2YXIgYj14W3ldW2ddO2lmKGIpZm9yKHZhciBfPTAsdz1iO188dy5sZW5ndGg7Xys9MSl7dmFyIGs9d1tfXTtwLnB1c2goay5mZWF0dXJlKX19fXJldHVybiBwfSxyLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24oZSxyLG4pe3ImJnIuZmlsdGVyJiZ0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLCJxdWVyeVJlbmRlcmVkRmVhdHVyZXMuZmlsdGVyIixyLmZpbHRlcixudWxsLHIpO3ZhciBhPXt9O2lmKHImJnIubGF5ZXJzKXtpZighQXJyYXkuaXNBcnJheShyLmxheWVycykpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigicGFyYW1ldGVycy5sYXllcnMgbXVzdCBiZSBhbiBBcnJheS4iKSkpLFtdO2Zvcih2YXIgaT0wLG89ci5sYXllcnM7aTxvLmxlbmd0aDtpKz0xKXt2YXIgcz1vW2ldLGw9dGhpcy5fbGF5ZXJzW3NdO2lmKCFsKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitzKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHF1ZXJpZWQgZm9yIGZlYXR1cmVzLiIpKSksW107YVtsLnNvdXJjZV09ITB9fXZhciBjPVtdO2Zvcih2YXIgdSBpbiB0aGlzLnNvdXJjZUNhY2hlcylyLmxheWVycyYmIWFbdV18fGMucHVzaChGKHRoaXMuc291cmNlQ2FjaGVzW3VdLHRoaXMuX2xheWVycyxlLHIsbikpO3JldHVybiB0aGlzLnBsYWNlbWVudCYmYy5wdXNoKGZ1bmN0aW9uKHQsZSxyLG4sYSxpKXtmb3IodmFyIG89e30scz1hLnF1ZXJ5UmVuZGVyZWRTeW1ib2xzKHIpLGw9W10sYz0wLHU9T2JqZWN0LmtleXMocykubWFwKE51bWJlcik7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdO2wucHVzaChpW2hdKX1sLnNvcnQoQik7Zm9yKHZhciBmPWZ1bmN0aW9uKCl7dmFyIGU9ZFtwXSxyPWUuZmVhdHVyZUluZGV4Lmxvb2t1cFN5bWJvbEZlYXR1cmVzKHNbZS5idWNrZXRJbnN0YW5jZUlkXSxlLmJ1Y2tldEluZGV4LGUuc291cmNlTGF5ZXJJbmRleCxuLmZpbHRlcixuLmxheWVycyx0KTtmb3IodmFyIGEgaW4gcil7dmFyIGk9b1thXT1vW2FdfHxbXSxsPXJbYV07bC5zb3J0KGZ1bmN0aW9uKHQscil7dmFyIG49ZS5mZWF0dXJlU29ydE9yZGVyO2lmKG4pe3ZhciBhPW4uaW5kZXhPZih0LmZlYXR1cmVJbmRleCk7cmV0dXJuIG4uaW5kZXhPZihyLmZlYXR1cmVJbmRleCktYX1yZXR1cm4gci5mZWF0dXJlSW5kZXgtdC5mZWF0dXJlSW5kZXh9KTtmb3IodmFyIGM9MCx1PWw7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdO2kucHVzaChoKX19fSxwPTAsZD1sO3A8ZC5sZW5ndGg7cCs9MSlmKCk7dmFyIGc9ZnVuY3Rpb24ocil7b1tyXS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBhPW4uZmVhdHVyZSxpPXRbcl0sbz1lW2kuc291cmNlXS5nZXRGZWF0dXJlU3RhdGUoYS5sYXllclsic291cmNlLWxheWVyIl0sYS5pZCk7YS5zb3VyY2U9YS5sYXllci5zb3VyY2UsYS5sYXllclsic291cmNlLWxheWVyIl0mJihhLnNvdXJjZUxheWVyPWEubGF5ZXJbInNvdXJjZS1sYXllciJdKSxhLnN0YXRlPW99KX07Zm9yKHZhciB2IGluIG8pZyh2KTtyZXR1cm4gb30odGhpcy5fbGF5ZXJzLHRoaXMuc291cmNlQ2FjaGVzLGUscix0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleCx0aGlzLnBsYWNlbWVudC5yZXRhaW5lZFF1ZXJ5RGF0YSkpLHRoaXMuX2ZsYXR0ZW5BbmRTb3J0UmVuZGVyZWRGZWF0dXJlcyhjKX0sci5wcm90b3R5cGUucXVlcnlTb3VyY2VGZWF0dXJlcz1mdW5jdGlvbihlLHIpe3ImJnIuZmlsdGVyJiZ0aGlzLl92YWxpZGF0ZSh0LnZhbGlkYXRlU3R5bGUuZmlsdGVyLCJxdWVyeVNvdXJjZUZlYXR1cmVzLmZpbHRlciIsci5maWx0ZXIsbnVsbCxyKTt2YXIgbj10aGlzLnNvdXJjZUNhY2hlc1tlXTtyZXR1cm4gbj9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFJlbmRlcmFibGVJZHMoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0VGlsZUJ5SUQoZSl9KSxuPVtdLGE9e30saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldLHM9by50aWxlSUQuY2Fub25pY2FsLmtleTthW3NdfHwoYVtzXT0hMCxvLnF1ZXJ5U291cmNlRmVhdHVyZXMobixlKSl9cmV0dXJuIG59KG4scik6W119LHIucHJvdG90eXBlLmFkZFNvdXJjZVR5cGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLmdldFNvdXJjZVR5cGUodCk/bihuZXcgRXJyb3IoJ0Egc291cmNlIHR5cGUgY2FsbGVkICInK3QrJyIgYWxyZWFkeSBleGlzdHMuJykpOihyLnNldFNvdXJjZVR5cGUodCxlKSxlLndvcmtlclNvdXJjZVVSTD92b2lkIHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoImxvYWRXb3JrZXJTb3VyY2UiLHtuYW1lOnQsdXJsOmUud29ya2VyU291cmNlVVJMfSxuKTpuKG51bGwsbnVsbCkpfSxyLnByb3RvdHlwZS5nZXRMaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxpZ2h0LmdldExpZ2h0KCl9LHIucHJvdG90eXBlLnNldExpZ2h0PWZ1bmN0aW9uKGUscil7dm9pZCAwPT09ciYmKHI9e30pLHRoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIG49dGhpcy5saWdodC5nZXRMaWdodCgpLGE9ITE7Zm9yKHZhciBpIGluIGUpaWYoIXQuZGVlcEVxdWFsKGVbaV0sbltpXSkpe2E9ITA7YnJlYWt9aWYoYSl7dmFyIG89e25vdzp0LmJyb3dzZXIubm93KCksdHJhbnNpdGlvbjp0LmV4dGVuZCh7ZHVyYXRpb246MzAwLGRlbGF5OjB9LHRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uKX07dGhpcy5saWdodC5zZXRMaWdodChlLHIpLHRoaXMubGlnaHQudXBkYXRlVHJhbnNpdGlvbnMobyl9fSxyLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oZSxyLG4sYSxpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9e30pLCghaXx8ITEhPT1pLnZhbGlkYXRlKSYmemUodGhpcyxlLmNhbGwodC52YWxpZGF0ZVN0eWxlLHQuZXh0ZW5kKHtrZXk6cixzdHlsZTp0aGlzLnNlcmlhbGl6ZSgpLHZhbHVlOm4sc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSxhKSkpfSxyLnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuX3JlcXVlc3QmJih0aGlzLl9yZXF1ZXN0LmNhbmNlbCgpLHRoaXMuX3JlcXVlc3Q9bnVsbCksdGhpcy5fc3ByaXRlUmVxdWVzdCYmKHRoaXMuX3Nwcml0ZVJlcXVlc3QuY2FuY2VsKCksdGhpcy5fc3ByaXRlUmVxdWVzdD1udWxsKSx0LmV2ZW50ZWQub2ZmKCJwbHVnaW5BdmFpbGFibGUiLHRoaXMuX3J0bFRleHRQbHVnaW5DYWxsYmFjayksdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbZV0uY2xlYXJUaWxlcygpO3RoaXMuZGlzcGF0Y2hlci5yZW1vdmUoKX0sci5wcm90b3R5cGUuX2NsZWFyU291cmNlPWZ1bmN0aW9uKHQpe3RoaXMuc291cmNlQ2FjaGVzW3RdLmNsZWFyVGlsZXMoKX0sci5wcm90b3R5cGUuX3JlbG9hZFNvdXJjZT1mdW5jdGlvbih0KXt0aGlzLnNvdXJjZUNhY2hlc1t0XS5yZXN1bWUoKSx0aGlzLnNvdXJjZUNhY2hlc1t0XS5yZWxvYWQoKX0sci5wcm90b3R5cGUuX3VwZGF0ZVNvdXJjZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW2VdLnVwZGF0ZSh0KX0sci5wcm90b3R5cGUuX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5fcmVsb2FkU291cmNlKHQpfSxyLnByb3RvdHlwZS5fdXBkYXRlUGxhY2VtZW50PWZ1bmN0aW9uKGUscixuLGEpe2Zvcih2YXIgaT0hMSxvPSExLHM9e30sbD0wLGM9dGhpcy5fb3JkZXI7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGg9dGhpcy5fbGF5ZXJzW3VdO2lmKCJzeW1ib2wiPT09aC50eXBlKXtpZighc1toLnNvdXJjZV0pe3ZhciBmPXRoaXMuc291cmNlQ2FjaGVzW2guc291cmNlXTtzW2guc291cmNlXT1mLmdldFJlbmRlcmFibGVJZHMoITApLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZi5nZXRUaWxlQnlJRCh0KX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS50aWxlSUQub3ZlcnNjYWxlZFotdC50aWxlSUQub3ZlcnNjYWxlZFp8fCh0LnRpbGVJRC5pc0xlc3NUaGFuKGUudGlsZUlEKT8tMToxKX0pfXZhciBwPXRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXguYWRkTGF5ZXIoaCxzW2guc291cmNlXSxlLmNlbnRlci5sbmcpO2k9aXx8cH19dGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleC5wcnVuZVVudXNlZExheWVycyh0aGlzLl9vcmRlcik7dmFyIGQ9dGhpcy5fbGF5ZXJPcmRlckNoYW5nZWR8fDA9PT1uO2lmKChkfHwhdGhpcy5wYXVzZWFibGVQbGFjZW1lbnR8fHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpJiYhdGhpcy5wbGFjZW1lbnQuc3RpbGxSZWNlbnQodC5icm93c2VyLm5vdygpKSkmJih0aGlzLnBhdXNlYWJsZVBsYWNlbWVudD1uZXcgU2UoZSx0aGlzLl9vcmRlcixkLHIsbixhLHRoaXMucGxhY2VtZW50KSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMSksdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCk/dGhpcy5wbGFjZW1lbnQuc2V0U3RhbGUoKToodGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29udGludWVQbGFjZW1lbnQodGhpcy5fb3JkZXIsdGhpcy5fbGF5ZXJzLHMpLHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpJiYodGhpcy5wbGFjZW1lbnQ9dGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29tbWl0KHQuYnJvd3Nlci5ub3coKSksbz0hMCksaSYmdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQucGxhY2VtZW50LnNldFN0YWxlKCkpLG98fGkpZm9yKHZhciBnPTAsdj10aGlzLl9vcmRlcjtnPHYubGVuZ3RoO2crPTEpe3ZhciBtPXZbZ10seT10aGlzLl9sYXllcnNbbV07InN5bWJvbCI9PT15LnR5cGUmJnRoaXMucGxhY2VtZW50LnVwZGF0ZUxheWVyT3BhY2l0aWVzKHksc1t5LnNvdXJjZV0pfXJldHVybiF0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKXx8dGhpcy5wbGFjZW1lbnQuaGFzVHJhbnNpdGlvbnModC5icm93c2VyLm5vdygpKX0sci5wcm90b3R5cGUuX3JlbGVhc2VTeW1ib2xGYWRlVGlsZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbdF0ucmVsZWFzZVN5bWJvbEZhZGVUaWxlcygpfSxyLnByb3RvdHlwZS5nZXRJbWFnZXM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuaW1hZ2VNYW5hZ2VyLmdldEltYWdlcyhlLmljb25zLHIpfSxyLnByb3RvdHlwZS5nZXRHbHlwaHM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2x5cGhNYW5hZ2VyLmdldEdseXBocyhlLnN0YWNrcyxyKX0sci5wcm90b3R5cGUuZ2V0UmVzb3VyY2U9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0Lm1ha2VSZXF1ZXN0KHIsbil9LHJ9KHQuRXZlbnRlZCk7UmUuZ2V0U291cmNlVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gSVt0XX0sUmUuc2V0U291cmNlVHlwZT1mdW5jdGlvbih0LGUpe0lbdF09ZX0sUmUucmVnaXN0ZXJGb3JQbHVnaW5BdmFpbGFiaWxpdHk9dC5yZWdpc3RlckZvclBsdWdpbkF2YWlsYWJpbGl0eTt2YXIgRmU9dC5jcmVhdGVMYXlvdXQoW3tuYW1lOiJhX3BvcyIsdHlwZToiSW50MTYiLGNvbXBvbmVudHM6Mn1dKSxCZT1jcigiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbHNlXG4jaWYgIWRlZmluZWQobG93cClcbiNkZWZpbmUgbG93cFxuI2VuZGlmXG4jaWYgIWRlZmluZWQobWVkaXVtcClcbiNkZWZpbmUgbWVkaXVtcFxuI2VuZGlmXG4jaWYgIWRlZmluZWQoaGlnaHApXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcbiNlbmRpZiIsIiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNpZiAhZGVmaW5lZChsb3dwKVxuI2RlZmluZSBsb3dwXG4jZW5kaWZcbiNpZiAhZGVmaW5lZChtZWRpdW1wKVxuI2RlZmluZSBtZWRpdW1wXG4jZW5kaWZcbiNpZiAhZGVmaW5lZChoaWdocClcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuI2VuZGlmXG52ZWMyIHVucGFja19mbG9hdChjb25zdCBmbG9hdCBwYWNrZWRWYWx1ZSkge2ludCBwYWNrZWRJbnRWYWx1ZT1pbnQocGFja2VkVmFsdWUpO2ludCB2MD1wYWNrZWRJbnRWYWx1ZS8yNTY7cmV0dXJuIHZlYzIodjAscGFja2VkSW50VmFsdWUtdjAqMjU2KTt9dmVjMiB1bnBhY2tfb3BhY2l0eShjb25zdCBmbG9hdCBwYWNrZWRPcGFjaXR5KSB7aW50IGludE9wYWNpdHk9aW50KHBhY2tlZE9wYWNpdHkpLzI7cmV0dXJuIHZlYzIoZmxvYXQoaW50T3BhY2l0eSkvMTI3LjAsbW9kKHBhY2tlZE9wYWNpdHksMi4wKSk7fXZlYzQgZGVjb2RlX2NvbG9yKGNvbnN0IHZlYzIgZW5jb2RlZENvbG9yKSB7cmV0dXJuIHZlYzQodW5wYWNrX2Zsb2F0KGVuY29kZWRDb2xvclswXSkvMjU1LjAsdW5wYWNrX2Zsb2F0KGVuY29kZWRDb2xvclsxXSkvMjU1LjBcbik7fWZsb2F0IHVucGFja19taXhfdmVjMihjb25zdCB2ZWMyIHBhY2tlZFZhbHVlLGNvbnN0IGZsb2F0IHQpIHtyZXR1cm4gbWl4KHBhY2tlZFZhbHVlWzBdLHBhY2tlZFZhbHVlWzFdLHQpO312ZWM0IHVucGFja19taXhfY29sb3IoY29uc3QgdmVjNCBwYWNrZWRDb2xvcnMsY29uc3QgZmxvYXQgdCkge3ZlYzQgbWluQ29sb3I9ZGVjb2RlX2NvbG9yKHZlYzIocGFja2VkQ29sb3JzWzBdLHBhY2tlZENvbG9yc1sxXSkpO3ZlYzQgbWF4Q29sb3I9ZGVjb2RlX2NvbG9yKHZlYzIocGFja2VkQ29sb3JzWzJdLHBhY2tlZENvbG9yc1szXSkpO3JldHVybiBtaXgobWluQ29sb3IsbWF4Q29sb3IsdCk7fXZlYzIgZ2V0X3BhdHRlcm5fcG9zKGNvbnN0IHZlYzIgcGl4ZWxfY29vcmRfdXBwZXIsY29uc3QgdmVjMiBwaXhlbF9jb29yZF9sb3dlcixjb25zdCB2ZWMyIHBhdHRlcm5fc2l6ZSxjb25zdCBmbG9hdCB0aWxlX3VuaXRzX3RvX3BpeGVscyxjb25zdCB2ZWMyIHBvcykge3ZlYzIgb2Zmc2V0PW1vZChtb2QobW9kKHBpeGVsX2Nvb3JkX3VwcGVyLHBhdHRlcm5fc2l6ZSkqMjU2LjAscGF0dGVybl9zaXplKSoyNTYuMCtwaXhlbF9jb29yZF9sb3dlcixwYXR0ZXJuX3NpemUpO3JldHVybiAodGlsZV91bml0c190b19waXhlbHMqcG9zK29mZnNldCkvcGF0dGVybl9zaXplO30iKSxOZT1jcigidW5pZm9ybSB2ZWM0IHVfY29sb3I7dW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7dm9pZCBtYWluKCkge2dsX0ZyYWdDb2xvcj11X2NvbG9yKnVfb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJhdHRyaWJ1dGUgdmVjMiBhX3Bvczt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dm9pZCBtYWluKCkge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt9IiksamU9Y3IoInVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYTt1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7dW5pZm9ybSB2ZWMyIHVfcGF0dGVybl90bF9iO3VuaWZvcm0gdmVjMiB1X3BhdHRlcm5fYnJfYjt1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3VuaWZvcm0gZmxvYXQgdV9taXg7dW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjt2b2lkIG1haW4oKSB7dmVjMiBpbWFnZWNvb3JkPW1vZCh2X3Bvc19hLDEuMCk7dmVjMiBwb3M9bWl4KHVfcGF0dGVybl90bF9hL3VfdGV4c2l6ZSx1X3BhdHRlcm5fYnJfYS91X3RleHNpemUsaW1hZ2Vjb29yZCk7dmVjNCBjb2xvcjE9dGV4dHVyZTJEKHVfaW1hZ2UscG9zKTt2ZWMyIGltYWdlY29vcmRfYj1tb2Qodl9wb3NfYiwxLjApO3ZlYzIgcG9zMj1taXgodV9wYXR0ZXJuX3RsX2IvdV90ZXhzaXplLHVfcGF0dGVybl9icl9iL3VfdGV4c2l6ZSxpbWFnZWNvb3JkX2IpO3ZlYzQgY29sb3IyPXRleHR1cmUyRCh1X2ltYWdlLHBvczIpO2dsX0ZyYWdDb2xvcj1taXgoY29sb3IxLGNvbG9yMix1X21peCkqdV9vcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYTt1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYjt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjt1bmlmb3JtIGZsb2F0IHVfc2NhbGVfYTt1bmlmb3JtIGZsb2F0IHVfc2NhbGVfYjt1bmlmb3JtIGZsb2F0IHVfdGlsZV91bml0c190b19waXhlbHM7YXR0cmlidXRlIHZlYzIgYV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dm9pZCBtYWluKCkge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt2X3Bvc19hPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsdV9zY2FsZV9hKnVfcGF0dGVybl9zaXplX2EsdV90aWxlX3VuaXRzX3RvX3BpeGVscyxhX3Bvcyk7dl9wb3NfYj1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLHVfc2NhbGVfYip1X3BhdHRlcm5fc2l6ZV9iLHVfdGlsZV91bml0c190b19waXhlbHMsYV9wb3MpO30iKSxWZT1jcigidmFyeWluZyB2ZWMzIHZfZGF0YTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgc3Ryb2tlX29wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XG52ZWMyIGV4dHJ1ZGU9dl9kYXRhLnh5O2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoPWxlbmd0aChleHRydWRlKTtsb3dwIGZsb2F0IGFudGlhbGlhc2JsdXI9dl9kYXRhLno7ZmxvYXQgYW50aWFsaWFzZWRfYmx1cj0tbWF4KGJsdXIsYW50aWFsaWFzYmx1cik7ZmxvYXQgb3BhY2l0eV90PXNtb290aHN0ZXAoMC4wLGFudGlhbGlhc2VkX2JsdXIsZXh0cnVkZV9sZW5ndGgtMS4wKTtmbG9hdCBjb2xvcl90PXN0cm9rZV93aWR0aCA8IDAuMDEgPyAwLjAgOiBzbW9vdGhzdGVwKGFudGlhbGlhc2VkX2JsdXIsMC4wLGV4dHJ1ZGVfbGVuZ3RoLXJhZGl1cy8ocmFkaXVzK3N0cm9rZV93aWR0aCkpO2dsX0ZyYWdDb2xvcj1vcGFjaXR5X3QqbWl4KGNvbG9yKm9wYWNpdHksc3Ryb2tlX2NvbG9yKnN0cm9rZV9vcGFjaXR5LGNvbG9yX3QpO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIGJvb2wgdV9zY2FsZV93aXRoX21hcDt1bmlmb3JtIGJvb2wgdV9waXRjaF93aXRoX21hcDt1bmlmb3JtIHZlYzIgdV9leHRydWRlX3NjYWxlO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzMgdl9kYXRhO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBzdHJva2Vfd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxudm9pZCBtYWluKHZvaWQpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBzdHJva2VfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XG52ZWMyIGV4dHJ1ZGU9dmVjMihtb2QoYV9wb3MsMi4wKSoyLjAtMS4wKTt2ZWMyIGNpcmNsZV9jZW50ZXI9Zmxvb3IoYV9wb3MqMC41KTtpZiAodV9waXRjaF93aXRoX21hcCkge3ZlYzIgY29ybmVyX3Bvc2l0aW9uPWNpcmNsZV9jZW50ZXI7aWYgKHVfc2NhbGVfd2l0aF9tYXApIHtjb3JuZXJfcG9zaXRpb24rPWV4dHJ1ZGUqKHJhZGl1cytzdHJva2Vfd2lkdGgpKnVfZXh0cnVkZV9zY2FsZTt9IGVsc2Uge3ZlYzQgcHJvamVjdGVkX2NlbnRlcj11X21hdHJpeCp2ZWM0KGNpcmNsZV9jZW50ZXIsMCwxKTtjb3JuZXJfcG9zaXRpb24rPWV4dHJ1ZGUqKHJhZGl1cytzdHJva2Vfd2lkdGgpKnVfZXh0cnVkZV9zY2FsZSoocHJvamVjdGVkX2NlbnRlci53L3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSk7fWdsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoY29ybmVyX3Bvc2l0aW9uLDAsMSk7fSBlbHNlIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGNpcmNsZV9jZW50ZXIsMCwxKTtpZiAodV9zY2FsZV93aXRoX21hcCkge2dsX1Bvc2l0aW9uLnh5Kz1leHRydWRlKihyYWRpdXMrc3Ryb2tlX3dpZHRoKSp1X2V4dHJ1ZGVfc2NhbGUqdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO30gZWxzZSB7Z2xfUG9zaXRpb24ueHkrPWV4dHJ1ZGUqKHJhZGl1cytzdHJva2Vfd2lkdGgpKnVfZXh0cnVkZV9zY2FsZSpnbF9Qb3NpdGlvbi53O319bG93cCBmbG9hdCBhbnRpYWxpYXNibHVyPTEuMC91X2RldmljZV9waXhlbF9yYXRpby8ocmFkaXVzK3N0cm9rZV93aWR0aCk7dl9kYXRhPXZlYzMoZXh0cnVkZS54LGV4dHJ1ZGUueSxhbnRpYWxpYXNibHVyKTt9IiksVWU9Y3IoInZvaWQgbWFpbigpIHtnbF9GcmFnQ29sb3I9dmVjNCgxLjApO30iLCJhdHRyaWJ1dGUgdmVjMiBhX3Bvczt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dm9pZCBtYWluKCkge2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt9IikscWU9Y3IoInVuaWZvcm0gaGlnaHAgZmxvYXQgdV9pbnRlbnNpdHk7dmFyeWluZyB2ZWMyIHZfZXh0cnVkZTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgZmxvYXQgd2VpZ2h0XG4jZGVmaW5lIEdBVVNTX0NPRUYgMC4zOTg5NDIyODA0MDE0MzI3XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCB3ZWlnaHRcbmZsb2F0IGQ9LTAuNSozLjAqMy4wKmRvdCh2X2V4dHJ1ZGUsdl9leHRydWRlKTtmbG9hdCB2YWw9d2VpZ2h0KnVfaW50ZW5zaXR5KkdBVVNTX0NPRUYqZXhwKGQpO2dsX0ZyYWdDb2xvcj12ZWM0KHZhbCwxLjAsMS4wLDEuMCk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gZmxvYXQgdV9leHRydWRlX3NjYWxlO3VuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O3VuaWZvcm0gZmxvYXQgdV9pbnRlbnNpdHk7YXR0cmlidXRlIHZlYzIgYV9wb3M7dmFyeWluZyB2ZWMyIHZfZXh0cnVkZTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgZmxvYXQgd2VpZ2h0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG5jb25zdCBoaWdocCBmbG9hdCBaRVJPPTEuMC8yNTUuMC8xNi4wO1xuI2RlZmluZSBHQVVTU19DT0VGIDAuMzk4OTQyMjgwNDAxNDMyN1xudm9pZCBtYWluKHZvaWQpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIGZsb2F0IHdlaWdodFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbnZlYzIgdW5zY2FsZWRfZXh0cnVkZT12ZWMyKG1vZChhX3BvcywyLjApKjIuMC0xLjApO2Zsb2F0IFM9c3FydCgtMi4wKmxvZyhaRVJPL3dlaWdodC91X2ludGVuc2l0eS9HQVVTU19DT0VGKSkvMy4wO3ZfZXh0cnVkZT1TKnVuc2NhbGVkX2V4dHJ1ZGU7dmVjMiBleHRydWRlPXZfZXh0cnVkZSpyYWRpdXMqdV9leHRydWRlX3NjYWxlO3ZlYzQgcG9zPXZlYzQoZmxvb3IoYV9wb3MqMC41KStleHRydWRlLDAsMSk7Z2xfUG9zaXRpb249dV9tYXRyaXgqcG9zO30iKSxIZT1jcigidW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt1bmlmb3JtIHNhbXBsZXIyRCB1X2NvbG9yX3JhbXA7dW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7dmFyeWluZyB2ZWMyIHZfcG9zO3ZvaWQgbWFpbigpIHtmbG9hdCB0PXRleHR1cmUyRCh1X2ltYWdlLHZfcG9zKS5yO3ZlYzQgY29sb3I9dGV4dHVyZTJEKHVfY29sb3JfcmFtcCx2ZWMyKHQsMC41KSk7Z2xfRnJhZ0NvbG9yPWNvbG9yKnVfb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDAuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfd29ybGQ7YXR0cmlidXRlIHZlYzIgYV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zO3ZvaWQgbWFpbigpIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zKnVfd29ybGQsMCwxKTt2X3Bvcy54PWFfcG9zLng7dl9wb3MueT0xLjAtYV9wb3MueTt9IiksR2U9Y3IoInZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7dmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7dm9pZCBtYWluKCkge2Zsb2F0IGFscGhhPTAuNTtnbF9GcmFnQ29sb3I9dmVjNCgxLjAsMC4wLDAuMCwxLjApKmFscGhhO2lmICh2X3BsYWNlZCA+IDAuNSkge2dsX0ZyYWdDb2xvcj12ZWM0KDAuMCwwLjAsMS4wLDAuNSkqYWxwaGE7fWlmICh2X25vdFVzZWQgPiAwLjUpIHtnbF9GcmFnQ29sb3IqPS4xO319IiwiYXR0cmlidXRlIHZlYzIgYV9wb3M7YXR0cmlidXRlIHZlYzIgYV9hbmNob3JfcG9zO2F0dHJpYnV0ZSB2ZWMyIGFfZXh0cnVkZTthdHRyaWJ1dGUgdmVjMiBhX3BsYWNlZDthdHRyaWJ1dGUgdmVjMiBhX3NoaWZ0O3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV9leHRydWRlX3NjYWxlO3VuaWZvcm0gZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO3ZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7dmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7dm9pZCBtYWluKCkge3ZlYzQgcHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX2FuY2hvcl9wb3MsMCwxKTtoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlPXByb2plY3RlZFBvaW50Lnc7aGlnaHAgZmxvYXQgY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvPWNsYW1wKDAuNSswLjUqKHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZS9jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlKSwwLjAsNC4wKTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAuMCwxLjApO2dsX1Bvc2l0aW9uLnh5Kz0oYV9leHRydWRlK2Ffc2hpZnQpKnVfZXh0cnVkZV9zY2FsZSpnbF9Qb3NpdGlvbi53KmNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbzt2X3BsYWNlZD1hX3BsYWNlZC54O3Zfbm90VXNlZD1hX3BsYWNlZC55O30iKSxZZT1jcigidW5pZm9ybSBmbG9hdCB1X292ZXJzY2FsZV9mYWN0b3I7dmFyeWluZyBmbG9hdCB2X3BsYWNlZDt2YXJ5aW5nIGZsb2F0IHZfbm90VXNlZDt2YXJ5aW5nIGZsb2F0IHZfcmFkaXVzO3ZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7dmFyeWluZyB2ZWMyIHZfZXh0cnVkZV9zY2FsZTt2b2lkIG1haW4oKSB7ZmxvYXQgYWxwaGE9MC41O3ZlYzQgY29sb3I9dmVjNCgxLjAsMC4wLDAuMCwxLjApKmFscGhhO2lmICh2X3BsYWNlZCA+IDAuNSkge2NvbG9yPXZlYzQoMC4wLDAuMCwxLjAsMC41KSphbHBoYTt9aWYgKHZfbm90VXNlZCA+IDAuNSkge2NvbG9yKj0uMjt9ZmxvYXQgZXh0cnVkZV9zY2FsZV9sZW5ndGg9bGVuZ3RoKHZfZXh0cnVkZV9zY2FsZSk7ZmxvYXQgZXh0cnVkZV9sZW5ndGg9bGVuZ3RoKHZfZXh0cnVkZSkqZXh0cnVkZV9zY2FsZV9sZW5ndGg7ZmxvYXQgc3Ryb2tlX3dpZHRoPTE1LjAqZXh0cnVkZV9zY2FsZV9sZW5ndGgvdV9vdmVyc2NhbGVfZmFjdG9yO2Zsb2F0IHJhZGl1cz12X3JhZGl1cypleHRydWRlX3NjYWxlX2xlbmd0aDtmbG9hdCBkaXN0YW5jZV90b19lZGdlPWFicyhleHRydWRlX2xlbmd0aC1yYWRpdXMpO2Zsb2F0IG9wYWNpdHlfdD1zbW9vdGhzdGVwKC1zdHJva2Vfd2lkdGgsMC4wLC1kaXN0YW5jZV90b19lZGdlKTtnbF9GcmFnQ29sb3I9b3BhY2l0eV90KmNvbG9yO30iLCJhdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjMiBhX2FuY2hvcl9wb3M7YXR0cmlidXRlIHZlYzIgYV9leHRydWRlO2F0dHJpYnV0ZSB2ZWMyIGFfcGxhY2VkO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV9leHRydWRlX3NjYWxlO3VuaWZvcm0gZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO3ZhcnlpbmcgZmxvYXQgdl9wbGFjZWQ7dmFyeWluZyBmbG9hdCB2X25vdFVzZWQ7dmFyeWluZyBmbG9hdCB2X3JhZGl1czt2YXJ5aW5nIHZlYzIgdl9leHRydWRlO3ZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGVfc2NhbGU7dm9pZCBtYWluKCkge3ZlYzQgcHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX2FuY2hvcl9wb3MsMCwxKTtoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlPXByb2plY3RlZFBvaW50Lnc7aGlnaHAgZmxvYXQgY29sbGlzaW9uX3BlcnNwZWN0aXZlX3JhdGlvPWNsYW1wKDAuNSswLjUqKHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZS9jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlKSwwLjAsNC4wKTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAuMCwxLjApO2hpZ2hwIGZsb2F0IHBhZGRpbmdfZmFjdG9yPTEuMjtnbF9Qb3NpdGlvbi54eSs9YV9leHRydWRlKnVfZXh0cnVkZV9zY2FsZSpwYWRkaW5nX2ZhY3RvcipnbF9Qb3NpdGlvbi53KmNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbzt2X3BsYWNlZD1hX3BsYWNlZC54O3Zfbm90VXNlZD1hX3BsYWNlZC55O3ZfcmFkaXVzPWFicyhhX2V4dHJ1ZGUueSk7dl9leHRydWRlPWFfZXh0cnVkZSpwYWRkaW5nX2ZhY3Rvcjt2X2V4dHJ1ZGVfc2NhbGU9dV9leHRydWRlX3NjYWxlKnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSpjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW87fSIpLFdlPWNyKCJ1bmlmb3JtIGhpZ2hwIHZlYzQgdV9jb2xvcjt2b2lkIG1haW4oKSB7Z2xfRnJhZ0NvbG9yPXVfY29sb3I7fSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO30iKSxYZT1jcigiI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5nbF9GcmFnQ29sb3I9Y29sb3Iqb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJhdHRyaWJ1dGUgdmVjMiBhX3Bvczt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbmdsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt9IiksWmU9Y3IoInZhcnlpbmcgdmVjMiB2X3BvcztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBvdXRsaW5lX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBvdXRsaW5lX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbmZsb2F0IGRpc3Q9bGVuZ3RoKHZfcG9zLWdsX0ZyYWdDb29yZC54eSk7ZmxvYXQgYWxwaGE9MS4wLXNtb290aHN0ZXAoMC4wLDEuMCxkaXN0KTtnbF9GcmFnQ29sb3I9b3V0bGluZV9jb2xvciooYWxwaGEqb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiYXR0cmlidXRlIHZlYzIgYV9wb3M7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3dvcmxkO3ZhcnlpbmcgdmVjMiB2X3BvcztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBvdXRsaW5lX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBvdXRsaW5lX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbmdsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt2X3Bvcz0oZ2xfUG9zaXRpb24ueHkvZ2xfUG9zaXRpb24udysxLjApLzIuMCp1X3dvcmxkO30iKSxKZT1jcigidW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3VuaWZvcm0gZmxvYXQgdV9mYWRlO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO3ZhcnlpbmcgdmVjMiB2X3BvcztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O3ZlYzIgaW1hZ2Vjb29yZD1tb2Qodl9wb3NfYSwxLjApO3ZlYzIgcG9zPW1peChwYXR0ZXJuX3RsX2EvdV90ZXhzaXplLHBhdHRlcm5fYnJfYS91X3RleHNpemUsaW1hZ2Vjb29yZCk7dmVjNCBjb2xvcjE9dGV4dHVyZTJEKHVfaW1hZ2UscG9zKTt2ZWMyIGltYWdlY29vcmRfYj1tb2Qodl9wb3NfYiwxLjApO3ZlYzIgcG9zMj1taXgocGF0dGVybl90bF9iL3VfdGV4c2l6ZSxwYXR0ZXJuX2JyX2IvdV90ZXhzaXplLGltYWdlY29vcmRfYik7dmVjNCBjb2xvcjI9dGV4dHVyZTJEKHVfaW1hZ2UscG9zMik7ZmxvYXQgZGlzdD1sZW5ndGgodl9wb3MtZ2xfRnJhZ0Nvb3JkLnh5KTtmbG9hdCBhbHBoYT0xLjAtc21vb3Roc3RlcCgwLjAsMS4wLGRpc3QpO2dsX0ZyYWdDb2xvcj1taXgoY29sb3IxLGNvbG9yMix1X2ZhZGUpKmFscGhhKm9wYWNpdHk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3dvcmxkO3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO3VuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX2xvd2VyO3VuaWZvcm0gdmVjNCB1X3NjYWxlO2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO3ZhcnlpbmcgdmVjMiB2X3BvcztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O2Zsb2F0IHBpeGVsUmF0aW89dV9zY2FsZS54O2Zsb2F0IHRpbGVSYXRpbz11X3NjYWxlLnk7ZmxvYXQgZnJvbVNjYWxlPXVfc2NhbGUuejtmbG9hdCB0b1NjYWxlPXVfc2NhbGUudztnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7dmVjMiBkaXNwbGF5X3NpemVfYT12ZWMyKChwYXR0ZXJuX2JyX2EueC1wYXR0ZXJuX3RsX2EueCkvcGl4ZWxSYXRpbywocGF0dGVybl9icl9hLnktcGF0dGVybl90bF9hLnkpL3BpeGVsUmF0aW8pO3ZlYzIgZGlzcGxheV9zaXplX2I9dmVjMigocGF0dGVybl9icl9iLngtcGF0dGVybl90bF9iLngpL3BpeGVsUmF0aW8sKHBhdHRlcm5fYnJfYi55LXBhdHRlcm5fdGxfYi55KS9waXhlbFJhdGlvKTt2X3Bvc19hPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsZnJvbVNjYWxlKmRpc3BsYXlfc2l6ZV9hLHRpbGVSYXRpbyxhX3Bvcyk7dl9wb3NfYj1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLHRvU2NhbGUqZGlzcGxheV9zaXplX2IsdGlsZVJhdGlvLGFfcG9zKTt2X3Bvcz0oZ2xfUG9zaXRpb24ueHkvZ2xfUG9zaXRpb24udysxLjApLzIuMCp1X3dvcmxkO30iKSxLZT1jcigidW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt1bmlmb3JtIGZsb2F0IHVfZmFkZTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xudmVjMiBwYXR0ZXJuX3RsX2E9cGF0dGVybl9mcm9tLnh5O3ZlYzIgcGF0dGVybl9icl9hPXBhdHRlcm5fZnJvbS56dzt2ZWMyIHBhdHRlcm5fdGxfYj1wYXR0ZXJuX3RvLnh5O3ZlYzIgcGF0dGVybl9icl9iPXBhdHRlcm5fdG8uenc7dmVjMiBpbWFnZWNvb3JkPW1vZCh2X3Bvc19hLDEuMCk7dmVjMiBwb3M9bWl4KHBhdHRlcm5fdGxfYS91X3RleHNpemUscGF0dGVybl9icl9hL3VfdGV4c2l6ZSxpbWFnZWNvb3JkKTt2ZWM0IGNvbG9yMT10ZXh0dXJlMkQodV9pbWFnZSxwb3MpO3ZlYzIgaW1hZ2Vjb29yZF9iPW1vZCh2X3Bvc19iLDEuMCk7dmVjMiBwb3MyPW1peChwYXR0ZXJuX3RsX2IvdV90ZXhzaXplLHBhdHRlcm5fYnJfYi91X3RleHNpemUsaW1hZ2Vjb29yZF9iKTt2ZWM0IGNvbG9yMj10ZXh0dXJlMkQodV9pbWFnZSxwb3MyKTtnbF9GcmFnQ29sb3I9bWl4KGNvbG9yMSxjb2xvcjIsdV9mYWRlKSpvcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjt1bmlmb3JtIHZlYzQgdV9zY2FsZTthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O2Zsb2F0IHBpeGVsUmF0aW89dV9zY2FsZS54O2Zsb2F0IHRpbGVab29tUmF0aW89dV9zY2FsZS55O2Zsb2F0IGZyb21TY2FsZT11X3NjYWxlLno7ZmxvYXQgdG9TY2FsZT11X3NjYWxlLnc7dmVjMiBkaXNwbGF5X3NpemVfYT12ZWMyKChwYXR0ZXJuX2JyX2EueC1wYXR0ZXJuX3RsX2EueCkvcGl4ZWxSYXRpbywocGF0dGVybl9icl9hLnktcGF0dGVybl90bF9hLnkpL3BpeGVsUmF0aW8pO3ZlYzIgZGlzcGxheV9zaXplX2I9dmVjMigocGF0dGVybl9icl9iLngtcGF0dGVybl90bF9iLngpL3BpeGVsUmF0aW8sKHBhdHRlcm5fYnJfYi55LXBhdHRlcm5fdGxfYi55KS9waXhlbFJhdGlvKTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7dl9wb3NfYT1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLGZyb21TY2FsZSpkaXNwbGF5X3NpemVfYSx0aWxlWm9vbVJhdGlvLGFfcG9zKTt2X3Bvc19iPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsdG9TY2FsZSpkaXNwbGF5X3NpemVfYix0aWxlWm9vbVJhdGlvLGFfcG9zKTt9IiksUWU9Y3IoInZhcnlpbmcgdmVjNCB2X2NvbG9yO3ZvaWQgbWFpbigpIHtnbF9GcmFnQ29sb3I9dl9jb2xvcjtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMzIHVfbGlnaHRjb2xvcjt1bmlmb3JtIGxvd3AgdmVjMyB1X2xpZ2h0cG9zO3VuaWZvcm0gbG93cCBmbG9hdCB1X2xpZ2h0aW50ZW5zaXR5O3VuaWZvcm0gZmxvYXQgdV92ZXJ0aWNhbF9ncmFkaWVudDt1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5O2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSB2ZWM0IGFfbm9ybWFsX2VkO3ZhcnlpbmcgdmVjNCB2X2NvbG9yO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCBoZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbnZlYzMgbm9ybWFsPWFfbm9ybWFsX2VkLnh5ejtiYXNlPW1heCgwLjAsYmFzZSk7aGVpZ2h0PW1heCgwLjAsaGVpZ2h0KTtmbG9hdCB0PW1vZChub3JtYWwueCwyLjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsdCA+IDAuMCA/IGhlaWdodCA6IGJhc2UsMSk7ZmxvYXQgY29sb3J2YWx1ZT1jb2xvci5yKjAuMjEyNitjb2xvci5nKjAuNzE1Mitjb2xvci5iKjAuMDcyMjt2X2NvbG9yPXZlYzQoMC4wLDAuMCwwLjAsMS4wKTt2ZWM0IGFtYmllbnRsaWdodD12ZWM0KDAuMDMsMC4wMywwLjAzLDEuMCk7Y29sb3IrPWFtYmllbnRsaWdodDtmbG9hdCBkaXJlY3Rpb25hbD1jbGFtcChkb3Qobm9ybWFsLzE2Mzg0LjAsdV9saWdodHBvcyksMC4wLDEuMCk7ZGlyZWN0aW9uYWw9bWl4KCgxLjAtdV9saWdodGludGVuc2l0eSksbWF4KCgxLjAtY29sb3J2YWx1ZSt1X2xpZ2h0aW50ZW5zaXR5KSwxLjApLGRpcmVjdGlvbmFsKTtpZiAobm9ybWFsLnkgIT0wLjApIHtkaXJlY3Rpb25hbCo9KCgxLjAtdV92ZXJ0aWNhbF9ncmFkaWVudCkrKHVfdmVydGljYWxfZ3JhZGllbnQqY2xhbXAoKHQrYmFzZSkqcG93KGhlaWdodC8xNTAuMCwwLjUpLG1peCgwLjcsMC45OCwxLjAtdV9saWdodGludGVuc2l0eSksMS4wKSkpO312X2NvbG9yLnIrPWNsYW1wKGNvbG9yLnIqZGlyZWN0aW9uYWwqdV9saWdodGNvbG9yLnIsbWl4KDAuMCwwLjMsMS4wLXVfbGlnaHRjb2xvci5yKSwxLjApO3ZfY29sb3IuZys9Y2xhbXAoY29sb3IuZypkaXJlY3Rpb25hbCp1X2xpZ2h0Y29sb3IuZyxtaXgoMC4wLDAuMywxLjAtdV9saWdodGNvbG9yLmcpLDEuMCk7dl9jb2xvci5iKz1jbGFtcChjb2xvci5iKmRpcmVjdGlvbmFsKnVfbGlnaHRjb2xvci5iLG1peCgwLjAsMC4zLDEuMC11X2xpZ2h0Y29sb3IuYiksMS4wKTt2X2NvbG9yKj11X29wYWNpdHk7fSIpLCRlPWNyKCJ1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3VuaWZvcm0gZmxvYXQgdV9mYWRlO3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xudmVjMiBwYXR0ZXJuX3RsX2E9cGF0dGVybl9mcm9tLnh5O3ZlYzIgcGF0dGVybl9icl9hPXBhdHRlcm5fZnJvbS56dzt2ZWMyIHBhdHRlcm5fdGxfYj1wYXR0ZXJuX3RvLnh5O3ZlYzIgcGF0dGVybl9icl9iPXBhdHRlcm5fdG8uenc7dmVjMiBpbWFnZWNvb3JkPW1vZCh2X3Bvc19hLDEuMCk7dmVjMiBwb3M9bWl4KHBhdHRlcm5fdGxfYS91X3RleHNpemUscGF0dGVybl9icl9hL3VfdGV4c2l6ZSxpbWFnZWNvb3JkKTt2ZWM0IGNvbG9yMT10ZXh0dXJlMkQodV9pbWFnZSxwb3MpO3ZlYzIgaW1hZ2Vjb29yZF9iPW1vZCh2X3Bvc19iLDEuMCk7dmVjMiBwb3MyPW1peChwYXR0ZXJuX3RsX2IvdV90ZXhzaXplLHBhdHRlcm5fYnJfYi91X3RleHNpemUsaW1hZ2Vjb29yZF9iKTt2ZWM0IGNvbG9yMj10ZXh0dXJlMkQodV9pbWFnZSxwb3MyKTt2ZWM0IG1peGVkQ29sb3I9bWl4KGNvbG9yMSxjb2xvcjIsdV9mYWRlKTtnbF9GcmFnQ29sb3I9bWl4ZWRDb2xvcip2X2xpZ2h0aW5nO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjt1bmlmb3JtIGZsb2F0IHVfaGVpZ2h0X2ZhY3Rvcjt1bmlmb3JtIHZlYzQgdV9zY2FsZTt1bmlmb3JtIGZsb2F0IHVfdmVydGljYWxfZ3JhZGllbnQ7dW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTt1bmlmb3JtIHZlYzMgdV9saWdodGNvbG9yO3VuaWZvcm0gbG93cCB2ZWMzIHVfbGlnaHRwb3M7dW5pZm9ybSBsb3dwIGZsb2F0IHVfbGlnaHRpbnRlbnNpdHk7YXR0cmlidXRlIHZlYzIgYV9wb3M7YXR0cmlidXRlIHZlYzQgYV9ub3JtYWxfZWQ7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dmFyeWluZyB2ZWM0IHZfbGlnaHRpbmc7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJhc2VcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xudmVjMiBwYXR0ZXJuX3RsX2E9cGF0dGVybl9mcm9tLnh5O3ZlYzIgcGF0dGVybl9icl9hPXBhdHRlcm5fZnJvbS56dzt2ZWMyIHBhdHRlcm5fdGxfYj1wYXR0ZXJuX3RvLnh5O3ZlYzIgcGF0dGVybl9icl9iPXBhdHRlcm5fdG8uenc7ZmxvYXQgcGl4ZWxSYXRpbz11X3NjYWxlLng7ZmxvYXQgdGlsZVJhdGlvPXVfc2NhbGUueTtmbG9hdCBmcm9tU2NhbGU9dV9zY2FsZS56O2Zsb2F0IHRvU2NhbGU9dV9zY2FsZS53O3ZlYzMgbm9ybWFsPWFfbm9ybWFsX2VkLnh5ejtmbG9hdCBlZGdlZGlzdGFuY2U9YV9ub3JtYWxfZWQudzt2ZWMyIGRpc3BsYXlfc2l6ZV9hPXZlYzIoKHBhdHRlcm5fYnJfYS54LXBhdHRlcm5fdGxfYS54KS9waXhlbFJhdGlvLChwYXR0ZXJuX2JyX2EueS1wYXR0ZXJuX3RsX2EueSkvcGl4ZWxSYXRpbyk7dmVjMiBkaXNwbGF5X3NpemVfYj12ZWMyKChwYXR0ZXJuX2JyX2IueC1wYXR0ZXJuX3RsX2IueCkvcGl4ZWxSYXRpbywocGF0dGVybl9icl9iLnktcGF0dGVybl90bF9iLnkpL3BpeGVsUmF0aW8pO2Jhc2U9bWF4KDAuMCxiYXNlKTtoZWlnaHQ9bWF4KDAuMCxoZWlnaHQpO2Zsb2F0IHQ9bW9kKG5vcm1hbC54LDIuMCk7ZmxvYXQgej10ID4gMC4wID8gaGVpZ2h0IDogYmFzZTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLHosMSk7dmVjMiBwb3M9bm9ybWFsLng9PTEuMCAmJiBub3JtYWwueT09MC4wICYmIG5vcm1hbC56PT0xNjM4NC4wXG4/IGFfcG9zXG46IHZlYzIoZWRnZWRpc3RhbmNlLHoqdV9oZWlnaHRfZmFjdG9yKTt2X3Bvc19hPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsZnJvbVNjYWxlKmRpc3BsYXlfc2l6ZV9hLHRpbGVSYXRpbyxwb3MpO3ZfcG9zX2I9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcix0b1NjYWxlKmRpc3BsYXlfc2l6ZV9iLHRpbGVSYXRpbyxwb3MpO3ZfbGlnaHRpbmc9dmVjNCgwLjAsMC4wLDAuMCwxLjApO2Zsb2F0IGRpcmVjdGlvbmFsPWNsYW1wKGRvdChub3JtYWwvMTYzODMuMCx1X2xpZ2h0cG9zKSwwLjAsMS4wKTtkaXJlY3Rpb25hbD1taXgoKDEuMC11X2xpZ2h0aW50ZW5zaXR5KSxtYXgoKDAuNSt1X2xpZ2h0aW50ZW5zaXR5KSwxLjApLGRpcmVjdGlvbmFsKTtpZiAobm9ybWFsLnkgIT0wLjApIHtkaXJlY3Rpb25hbCo9KCgxLjAtdV92ZXJ0aWNhbF9ncmFkaWVudCkrKHVfdmVydGljYWxfZ3JhZGllbnQqY2xhbXAoKHQrYmFzZSkqcG93KGhlaWdodC8xNTAuMCwwLjUpLG1peCgwLjcsMC45OCwxLjAtdV9saWdodGludGVuc2l0eSksMS4wKSkpO312X2xpZ2h0aW5nLnJnYis9Y2xhbXAoZGlyZWN0aW9uYWwqdV9saWdodGNvbG9yLG1peCh2ZWMzKDAuMCksdmVjMygwLjMpLDEuMC11X2xpZ2h0Y29sb3IpLHZlYzMoMS4wKSk7dl9saWdodGluZyo9dV9vcGFjaXR5O30iKSx0cj1jcigiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZW5kaWZcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfcG9zO3VuaWZvcm0gdmVjMiB1X2RpbWVuc2lvbjt1bmlmb3JtIGZsb2F0IHVfem9vbTt1bmlmb3JtIGZsb2F0IHVfbWF4em9vbTtmbG9hdCBnZXRFbGV2YXRpb24odmVjMiBjb29yZCxmbG9hdCBiaWFzKSB7dmVjNCBkYXRhPXRleHR1cmUyRCh1X2ltYWdlLGNvb3JkKSoyNTUuMDtyZXR1cm4gKGRhdGEucitkYXRhLmcqMjU2LjArZGF0YS5iKjI1Ni4wKjI1Ni4wKS80LjA7fXZvaWQgbWFpbigpIHt2ZWMyIGVwc2lsb249MS4wL3VfZGltZW5zaW9uO2Zsb2F0IGE9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoLWVwc2lsb24ueCwtZXBzaWxvbi55KSwwLjApO2Zsb2F0IGI9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoMCwtZXBzaWxvbi55KSwwLjApO2Zsb2F0IGM9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoZXBzaWxvbi54LC1lcHNpbG9uLnkpLDAuMCk7ZmxvYXQgZD1nZXRFbGV2YXRpb24odl9wb3MrdmVjMigtZXBzaWxvbi54LDApLDAuMCk7ZmxvYXQgZT1nZXRFbGV2YXRpb24odl9wb3MsMC4wKTtmbG9hdCBmPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKGVwc2lsb24ueCwwKSwwLjApO2Zsb2F0IGc9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoLWVwc2lsb24ueCxlcHNpbG9uLnkpLDAuMCk7ZmxvYXQgaD1nZXRFbGV2YXRpb24odl9wb3MrdmVjMigwLGVwc2lsb24ueSksMC4wKTtmbG9hdCBpPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKGVwc2lsb24ueCxlcHNpbG9uLnkpLDAuMCk7ZmxvYXQgZXhhZ2dlcmF0aW9uPXVfem9vbSA8IDIuMCA/IDAuNCA6IHVfem9vbSA8IDQuNSA/IDAuMzUgOiAwLjM7dmVjMiBkZXJpdj12ZWMyKChjK2YrZitpKS0oYStkK2QrZyksKGcraCtoK2kpLShhK2IrYitjKSkvIHBvdygyLjAsKHVfem9vbS11X21heHpvb20pKmV4YWdnZXJhdGlvbisxOS4yNTYyLXVfem9vbSk7Z2xfRnJhZ0NvbG9yPWNsYW1wKHZlYzQoZGVyaXYueC8yLjArMC41LGRlcml2LnkvMi4wKzAuNSwxLjAsMS4wKSwwLjAsMS4wKTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfZGltZW5zaW9uO2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zO3ZvaWQgbWFpbigpIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7aGlnaHAgdmVjMiBlcHNpbG9uPTEuMC91X2RpbWVuc2lvbjtmbG9hdCBzY2FsZT0odV9kaW1lbnNpb24ueC0yLjApL3VfZGltZW5zaW9uLng7dl9wb3M9KGFfdGV4dHVyZV9wb3MvODE5Mi4wKSpzY2FsZStlcHNpbG9uO30iKSxlcj1jcigidW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt2YXJ5aW5nIHZlYzIgdl9wb3M7dW5pZm9ybSB2ZWMyIHVfbGF0cmFuZ2U7dW5pZm9ybSB2ZWMyIHVfbGlnaHQ7dW5pZm9ybSB2ZWM0IHVfc2hhZG93O3VuaWZvcm0gdmVjNCB1X2hpZ2hsaWdodDt1bmlmb3JtIHZlYzQgdV9hY2NlbnQ7XG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzXG52b2lkIG1haW4oKSB7dmVjNCBwaXhlbD10ZXh0dXJlMkQodV9pbWFnZSx2X3Bvcyk7dmVjMiBkZXJpdj0oKHBpeGVsLnJnKjIuMCktMS4wKTtmbG9hdCBzY2FsZUZhY3Rvcj1jb3MocmFkaWFucygodV9sYXRyYW5nZVswXS11X2xhdHJhbmdlWzFdKSooMS4wLXZfcG9zLnkpK3VfbGF0cmFuZ2VbMV0pKTtmbG9hdCBzbG9wZT1hdGFuKDEuMjUqbGVuZ3RoKGRlcml2KS9zY2FsZUZhY3Rvcik7ZmxvYXQgYXNwZWN0PWRlcml2LnggIT0wLjAgPyBhdGFuKGRlcml2LnksLWRlcml2LngpIDogUEkvMi4wKihkZXJpdi55ID4gMC4wID8gMS4wIDotMS4wKTtmbG9hdCBpbnRlbnNpdHk9dV9saWdodC54O2Zsb2F0IGF6aW11dGg9dV9saWdodC55K1BJO2Zsb2F0IGJhc2U9MS44NzUtaW50ZW5zaXR5KjEuNzU7ZmxvYXQgbWF4VmFsdWU9MC41KlBJO2Zsb2F0IHNjYWxlZFNsb3BlPWludGVuc2l0eSAhPTAuNSA/ICgocG93KGJhc2Usc2xvcGUpLTEuMCkvKHBvdyhiYXNlLG1heFZhbHVlKS0xLjApKSptYXhWYWx1ZSA6IHNsb3BlO2Zsb2F0IGFjY2VudD1jb3Moc2NhbGVkU2xvcGUpO3ZlYzQgYWNjZW50X2NvbG9yPSgxLjAtYWNjZW50KSp1X2FjY2VudCpjbGFtcChpbnRlbnNpdHkqMi4wLDAuMCwxLjApO2Zsb2F0IHNoYWRlPWFicyhtb2QoKGFzcGVjdCthemltdXRoKS9QSSswLjUsMi4wKS0xLjApO3ZlYzQgc2hhZGVfY29sb3I9bWl4KHVfc2hhZG93LHVfaGlnaGxpZ2h0LHNoYWRlKSpzaW4oc2NhbGVkU2xvcGUpKmNsYW1wKGludGVuc2l0eSoyLjAsMC4wLDEuMCk7Z2xfRnJhZ0NvbG9yPWFjY2VudF9jb2xvciooMS4wLXNoYWRlX2NvbG9yLmEpK3NoYWRlX2NvbG9yO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDthdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO3ZhcnlpbmcgdmVjMiB2X3Bvczt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZfcG9zPWFfdGV4dHVyZV9wb3MvODE5Mi4wO30iKSxycj1jcigidW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5mbG9hdCBkaXN0PWxlbmd0aCh2X25vcm1hbCkqdl93aWR0aDIucztmbG9hdCBibHVyMj0oYmx1cisxLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8pKnZfZ2FtbWFfc2NhbGU7ZmxvYXQgYWxwaGE9Y2xhbXAobWluKGRpc3QtKHZfd2lkdGgyLnQtYmx1cjIpLHZfd2lkdGgyLnMtZGlzdCkvYmx1cjIsMC4wLDEuMCk7Z2xfRnJhZ0NvbG9yPWNvbG9yKihhbHBoYSpvcGFjaXR5KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zX25vcm1hbDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO3VuaWZvcm0gdmVjMiB1X3VuaXRzX3RvX3BpeGVsczt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7dmFyeWluZyBoaWdocCBmbG9hdCB2X2xpbmVzb2ZhcjtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG5mbG9hdCBBTlRJQUxJQVNJTkc9MS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvLzIuMDt2ZWMyIGFfZXh0cnVkZT1hX2RhdGEueHktMTI4LjA7ZmxvYXQgYV9kaXJlY3Rpb249bW9kKGFfZGF0YS56LDQuMCktMS4wO3ZfbGluZXNvZmFyPShmbG9vcihhX2RhdGEuei80LjApK2FfZGF0YS53KjY0LjApKjIuMDt2ZWMyIHBvcz1mbG9vcihhX3Bvc19ub3JtYWwqMC41KTttZWRpdW1wIHZlYzIgbm9ybWFsPWFfcG9zX25vcm1hbC0yLjAqcG9zO25vcm1hbC55PW5vcm1hbC55KjIuMC0xLjA7dl9ub3JtYWw9bm9ybWFsO2dhcHdpZHRoPWdhcHdpZHRoLzIuMDtmbG9hdCBoYWxmd2lkdGg9d2lkdGgvMi4wO29mZnNldD0tMS4wKm9mZnNldDtmbG9hdCBpbnNldD1nYXB3aWR0aCsoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO2Zsb2F0IG91dHNldD1nYXB3aWR0aCtoYWxmd2lkdGgqKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSsoaGFsZndpZHRoPT0wLjAgPyAwLjAgOiBBTlRJQUxJQVNJTkcpO21lZGl1bXAgdmVjMiBkaXN0PW91dHNldCphX2V4dHJ1ZGUqc2NhbGU7bWVkaXVtcCBmbG9hdCB1PTAuNSphX2RpcmVjdGlvbjttZWRpdW1wIGZsb2F0IHQ9MS4wLWFicyh1KTttZWRpdW1wIHZlYzIgb2Zmc2V0Mj1vZmZzZXQqYV9leHRydWRlKnNjYWxlKm5vcm1hbC55Km1hdDIodCwtdSx1LHQpO3ZlYzQgcHJvamVjdGVkX2V4dHJ1ZGU9dV9tYXRyaXgqdmVjNChkaXN0L3VfcmF0aW8sMC4wLDAuMCk7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChwb3Mrb2Zmc2V0Mi91X3JhdGlvLDAuMCwxLjApK3Byb2plY3RlZF9leHRydWRlO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmU9bGVuZ3RoKGRpc3QpO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU9bGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5L2dsX1Bvc2l0aW9uLncqdV91bml0c190b19waXhlbHMpO3ZfZ2FtbWFfc2NhbGU9ZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZS9leHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO3Zfd2lkdGgyPXZlYzIob3V0c2V0LGluc2V0KTt9IiksbnI9Y3IoInVuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO3ZhcnlpbmcgaGlnaHAgZmxvYXQgdl9saW5lcHJvZ3Jlc3M7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5mbG9hdCBkaXN0PWxlbmd0aCh2X25vcm1hbCkqdl93aWR0aDIucztmbG9hdCBibHVyMj0oYmx1cisxLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8pKnZfZ2FtbWFfc2NhbGU7ZmxvYXQgYWxwaGE9Y2xhbXAobWluKGRpc3QtKHZfd2lkdGgyLnQtYmx1cjIpLHZfd2lkdGgyLnMtZGlzdCkvYmx1cjIsMC4wLDEuMCk7dmVjNCBjb2xvcj10ZXh0dXJlMkQodV9pbWFnZSx2ZWMyKHZfbGluZXByb2dyZXNzLDAuNSkpO2dsX0ZyYWdDb2xvcj1jb2xvciooYWxwaGEqb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiXG4jZGVmaW5lIE1BWF9MSU5FX0RJU1RBTkNFIDMyNzY3LjBcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zX25vcm1hbDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIHZlYzIgdV91bml0c190b19waXhlbHM7dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7dmFyeWluZyBoaWdocCBmbG9hdCB2X2xpbmVwcm9ncmVzcztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuZmxvYXQgQU5USUFMSUFTSU5HPTEuMC91X2RldmljZV9waXhlbF9yYXRpby8yLjA7dmVjMiBhX2V4dHJ1ZGU9YV9kYXRhLnh5LTEyOC4wO2Zsb2F0IGFfZGlyZWN0aW9uPW1vZChhX2RhdGEueiw0LjApLTEuMDt2X2xpbmVwcm9ncmVzcz0oZmxvb3IoYV9kYXRhLnovNC4wKSthX2RhdGEudyo2NC4wKSoyLjAvTUFYX0xJTkVfRElTVEFOQ0U7dmVjMiBwb3M9Zmxvb3IoYV9wb3Nfbm9ybWFsKjAuNSk7bWVkaXVtcCB2ZWMyIG5vcm1hbD1hX3Bvc19ub3JtYWwtMi4wKnBvcztub3JtYWwueT1ub3JtYWwueSoyLjAtMS4wO3Zfbm9ybWFsPW5vcm1hbDtnYXB3aWR0aD1nYXB3aWR0aC8yLjA7ZmxvYXQgaGFsZndpZHRoPXdpZHRoLzIuMDtvZmZzZXQ9LTEuMCpvZmZzZXQ7ZmxvYXQgaW5zZXQ9Z2Fwd2lkdGgrKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtmbG9hdCBvdXRzZXQ9Z2Fwd2lkdGgraGFsZndpZHRoKihnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkrKGhhbGZ3aWR0aD09MC4wID8gMC4wIDogQU5USUFMSUFTSU5HKTttZWRpdW1wIHZlYzIgZGlzdD1vdXRzZXQqYV9leHRydWRlKnNjYWxlO21lZGl1bXAgZmxvYXQgdT0wLjUqYV9kaXJlY3Rpb247bWVkaXVtcCBmbG9hdCB0PTEuMC1hYnModSk7bWVkaXVtcCB2ZWMyIG9mZnNldDI9b2Zmc2V0KmFfZXh0cnVkZSpzY2FsZSpub3JtYWwueSptYXQyKHQsLXUsdSx0KTt2ZWM0IHByb2plY3RlZF9leHRydWRlPXVfbWF0cml4KnZlYzQoZGlzdC91X3JhdGlvLDAuMCwwLjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQocG9zK29mZnNldDIvdV9yYXRpbywwLjAsMS4wKStwcm9qZWN0ZWRfZXh0cnVkZTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlPWxlbmd0aChkaXN0KTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlPWxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eS9nbF9Qb3NpdGlvbi53KnVfdW5pdHNfdG9fcGl4ZWxzKTt2X2dhbW1hX3NjYWxlPWV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUvZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTt2X3dpZHRoMj12ZWMyKG91dHNldCxpbnNldCk7fSIpLGFyPWNyKCJ1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt1bmlmb3JtIGZsb2F0IHVfZmFkZTt1bmlmb3JtIG1lZGl1bXAgdmVjNCB1X3NjYWxlO3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIGZsb2F0IHZfbGluZXNvZmFyO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O2Zsb2F0IHBpeGVsUmF0aW89dV9zY2FsZS54O2Zsb2F0IHRpbGVab29tUmF0aW89dV9zY2FsZS55O2Zsb2F0IGZyb21TY2FsZT11X3NjYWxlLno7ZmxvYXQgdG9TY2FsZT11X3NjYWxlLnc7dmVjMiBkaXNwbGF5X3NpemVfYT12ZWMyKChwYXR0ZXJuX2JyX2EueC1wYXR0ZXJuX3RsX2EueCkvcGl4ZWxSYXRpbywocGF0dGVybl9icl9hLnktcGF0dGVybl90bF9hLnkpL3BpeGVsUmF0aW8pO3ZlYzIgZGlzcGxheV9zaXplX2I9dmVjMigocGF0dGVybl9icl9iLngtcGF0dGVybl90bF9iLngpL3BpeGVsUmF0aW8sKHBhdHRlcm5fYnJfYi55LXBhdHRlcm5fdGxfYi55KS9waXhlbFJhdGlvKTt2ZWMyIHBhdHRlcm5fc2l6ZV9hPXZlYzIoZGlzcGxheV9zaXplX2EueCpmcm9tU2NhbGUvdGlsZVpvb21SYXRpbyxkaXNwbGF5X3NpemVfYS55KTt2ZWMyIHBhdHRlcm5fc2l6ZV9iPXZlYzIoZGlzcGxheV9zaXplX2IueCp0b1NjYWxlL3RpbGVab29tUmF0aW8sZGlzcGxheV9zaXplX2IueSk7ZmxvYXQgZGlzdD1sZW5ndGgodl9ub3JtYWwpKnZfd2lkdGgyLnM7ZmxvYXQgYmx1cjI9KGJsdXIrMS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvKSp2X2dhbW1hX3NjYWxlO2Zsb2F0IGFscGhhPWNsYW1wKG1pbihkaXN0LSh2X3dpZHRoMi50LWJsdXIyKSx2X3dpZHRoMi5zLWRpc3QpL2JsdXIyLDAuMCwxLjApO2Zsb2F0IHhfYT1tb2Qodl9saW5lc29mYXIvcGF0dGVybl9zaXplX2EueCwxLjApO2Zsb2F0IHhfYj1tb2Qodl9saW5lc29mYXIvcGF0dGVybl9zaXplX2IueCwxLjApO2Zsb2F0IHlfYT0wLjUrKHZfbm9ybWFsLnkqY2xhbXAodl93aWR0aDIucywwLjAsKHBhdHRlcm5fc2l6ZV9hLnkrMi4wKS8yLjApL3BhdHRlcm5fc2l6ZV9hLnkpO2Zsb2F0IHlfYj0wLjUrKHZfbm9ybWFsLnkqY2xhbXAodl93aWR0aDIucywwLjAsKHBhdHRlcm5fc2l6ZV9iLnkrMi4wKS8yLjApL3BhdHRlcm5fc2l6ZV9iLnkpO3ZlYzIgcG9zX2E9bWl4KHBhdHRlcm5fdGxfYS91X3RleHNpemUscGF0dGVybl9icl9hL3VfdGV4c2l6ZSx2ZWMyKHhfYSx5X2EpKTt2ZWMyIHBvc19iPW1peChwYXR0ZXJuX3RsX2IvdV90ZXhzaXplLHBhdHRlcm5fYnJfYi91X3RleHNpemUsdmVjMih4X2IseV9iKSk7dmVjNCBjb2xvcj1taXgodGV4dHVyZTJEKHVfaW1hZ2UscG9zX2EpLHRleHR1cmUyRCh1X2ltYWdlLHBvc19iKSx1X2ZhZGUpO2dsX0ZyYWdDb2xvcj1jb2xvciphbHBoYSpvcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsIlxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxuI2RlZmluZSBMSU5FX0RJU1RBTkNFX1NDQUxFIDIuMFxuYXR0cmlidXRlIHZlYzIgYV9wb3Nfbm9ybWFsO2F0dHJpYnV0ZSB2ZWM0IGFfZGF0YTt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfdW5pdHNfdG9fcGl4ZWxzO3VuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyB2ZWMyIHZfd2lkdGgyO3ZhcnlpbmcgZmxvYXQgdl9saW5lc29mYXI7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG5mbG9hdCBBTlRJQUxJQVNJTkc9MS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvLzIuMDt2ZWMyIGFfZXh0cnVkZT1hX2RhdGEueHktMTI4LjA7ZmxvYXQgYV9kaXJlY3Rpb249bW9kKGFfZGF0YS56LDQuMCktMS4wO2Zsb2F0IGFfbGluZXNvZmFyPShmbG9vcihhX2RhdGEuei80LjApK2FfZGF0YS53KjY0LjApKkxJTkVfRElTVEFOQ0VfU0NBTEU7dmVjMiBwb3M9Zmxvb3IoYV9wb3Nfbm9ybWFsKjAuNSk7bWVkaXVtcCB2ZWMyIG5vcm1hbD1hX3Bvc19ub3JtYWwtMi4wKnBvcztub3JtYWwueT1ub3JtYWwueSoyLjAtMS4wO3Zfbm9ybWFsPW5vcm1hbDtnYXB3aWR0aD1nYXB3aWR0aC8yLjA7ZmxvYXQgaGFsZndpZHRoPXdpZHRoLzIuMDtvZmZzZXQ9LTEuMCpvZmZzZXQ7ZmxvYXQgaW5zZXQ9Z2Fwd2lkdGgrKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtmbG9hdCBvdXRzZXQ9Z2Fwd2lkdGgraGFsZndpZHRoKihnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkrKGhhbGZ3aWR0aD09MC4wID8gMC4wIDogQU5USUFMSUFTSU5HKTttZWRpdW1wIHZlYzIgZGlzdD1vdXRzZXQqYV9leHRydWRlKnNjYWxlO21lZGl1bXAgZmxvYXQgdT0wLjUqYV9kaXJlY3Rpb247bWVkaXVtcCBmbG9hdCB0PTEuMC1hYnModSk7bWVkaXVtcCB2ZWMyIG9mZnNldDI9b2Zmc2V0KmFfZXh0cnVkZSpzY2FsZSpub3JtYWwueSptYXQyKHQsLXUsdSx0KTt2ZWM0IHByb2plY3RlZF9leHRydWRlPXVfbWF0cml4KnZlYzQoZGlzdC91X3JhdGlvLDAuMCwwLjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQocG9zK29mZnNldDIvdV9yYXRpbywwLjAsMS4wKStwcm9qZWN0ZWRfZXh0cnVkZTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlPWxlbmd0aChkaXN0KTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlPWxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eS9nbF9Qb3NpdGlvbi53KnVfdW5pdHNfdG9fcGl4ZWxzKTt2X2dhbW1hX3NjYWxlPWV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUvZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTt2X2xpbmVzb2Zhcj1hX2xpbmVzb2Zhcjt2X3dpZHRoMj12ZWMyKG91dHNldCxpbnNldCk7fSIpLGlyPWNyKCJ1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt1bmlmb3JtIGZsb2F0IHVfc2RmZ2FtbWE7dW5pZm9ybSBmbG9hdCB1X21peDt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyB2ZWMyIHZfd2lkdGgyO3ZhcnlpbmcgdmVjMiB2X3RleF9hO3ZhcnlpbmcgdmVjMiB2X3RleF9iO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG5mbG9hdCBkaXN0PWxlbmd0aCh2X25vcm1hbCkqdl93aWR0aDIucztmbG9hdCBibHVyMj0oYmx1cisxLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8pKnZfZ2FtbWFfc2NhbGU7ZmxvYXQgYWxwaGE9Y2xhbXAobWluKGRpc3QtKHZfd2lkdGgyLnQtYmx1cjIpLHZfd2lkdGgyLnMtZGlzdCkvYmx1cjIsMC4wLDEuMCk7ZmxvYXQgc2RmZGlzdF9hPXRleHR1cmUyRCh1X2ltYWdlLHZfdGV4X2EpLmE7ZmxvYXQgc2RmZGlzdF9iPXRleHR1cmUyRCh1X2ltYWdlLHZfdGV4X2IpLmE7ZmxvYXQgc2RmZGlzdD1taXgoc2RmZGlzdF9hLHNkZmRpc3RfYix1X21peCk7YWxwaGEqPXNtb290aHN0ZXAoMC41LXVfc2RmZ2FtbWEvZmxvb3J3aWR0aCwwLjUrdV9zZGZnYW1tYS9mbG9vcndpZHRoLHNkZmRpc3QpO2dsX0ZyYWdDb2xvcj1jb2xvciooYWxwaGEqb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXG5hdHRyaWJ1dGUgdmVjMiBhX3Bvc19ub3JtYWw7YXR0cmlidXRlIHZlYzQgYV9kYXRhO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbzt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSB2ZWMyIHVfcGF0dGVybnNjYWxlX2E7dW5pZm9ybSBmbG9hdCB1X3RleF95X2E7dW5pZm9ybSB2ZWMyIHVfcGF0dGVybnNjYWxlX2I7dW5pZm9ybSBmbG9hdCB1X3RleF95X2I7dW5pZm9ybSB2ZWMyIHVfdW5pdHNfdG9fcGl4ZWxzO3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyB2ZWMyIHZfdGV4X2E7dmFyeWluZyB2ZWMyIHZfdGV4X2I7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcbmZsb2F0IEFOVElBTElBU0lORz0xLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8vMi4wO3ZlYzIgYV9leHRydWRlPWFfZGF0YS54eS0xMjguMDtmbG9hdCBhX2RpcmVjdGlvbj1tb2QoYV9kYXRhLnosNC4wKS0xLjA7ZmxvYXQgYV9saW5lc29mYXI9KGZsb29yKGFfZGF0YS56LzQuMCkrYV9kYXRhLncqNjQuMCkqTElORV9ESVNUQU5DRV9TQ0FMRTt2ZWMyIHBvcz1mbG9vcihhX3Bvc19ub3JtYWwqMC41KTttZWRpdW1wIHZlYzIgbm9ybWFsPWFfcG9zX25vcm1hbC0yLjAqcG9zO25vcm1hbC55PW5vcm1hbC55KjIuMC0xLjA7dl9ub3JtYWw9bm9ybWFsO2dhcHdpZHRoPWdhcHdpZHRoLzIuMDtmbG9hdCBoYWxmd2lkdGg9d2lkdGgvMi4wO29mZnNldD0tMS4wKm9mZnNldDtmbG9hdCBpbnNldD1nYXB3aWR0aCsoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO2Zsb2F0IG91dHNldD1nYXB3aWR0aCtoYWxmd2lkdGgqKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSsoaGFsZndpZHRoPT0wLjAgPyAwLjAgOiBBTlRJQUxJQVNJTkcpO21lZGl1bXAgdmVjMiBkaXN0PW91dHNldCphX2V4dHJ1ZGUqc2NhbGU7bWVkaXVtcCBmbG9hdCB1PTAuNSphX2RpcmVjdGlvbjttZWRpdW1wIGZsb2F0IHQ9MS4wLWFicyh1KTttZWRpdW1wIHZlYzIgb2Zmc2V0Mj1vZmZzZXQqYV9leHRydWRlKnNjYWxlKm5vcm1hbC55Km1hdDIodCwtdSx1LHQpO3ZlYzQgcHJvamVjdGVkX2V4dHJ1ZGU9dV9tYXRyaXgqdmVjNChkaXN0L3VfcmF0aW8sMC4wLDAuMCk7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChwb3Mrb2Zmc2V0Mi91X3JhdGlvLDAuMCwxLjApK3Byb2plY3RlZF9leHRydWRlO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmU9bGVuZ3RoKGRpc3QpO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU9bGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5L2dsX1Bvc2l0aW9uLncqdV91bml0c190b19waXhlbHMpO3ZfZ2FtbWFfc2NhbGU9ZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZS9leHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO3ZfdGV4X2E9dmVjMihhX2xpbmVzb2Zhcip1X3BhdHRlcm5zY2FsZV9hLngvZmxvb3J3aWR0aCxub3JtYWwueSp1X3BhdHRlcm5zY2FsZV9hLnkrdV90ZXhfeV9hKTt2X3RleF9iPXZlYzIoYV9saW5lc29mYXIqdV9wYXR0ZXJuc2NhbGVfYi54L2Zsb29yd2lkdGgsbm9ybWFsLnkqdV9wYXR0ZXJuc2NhbGVfYi55K3VfdGV4X3lfYik7dl93aWR0aDI9dmVjMihvdXRzZXQsaW5zZXQpO30iKSxvcj1jcigidW5pZm9ybSBmbG9hdCB1X2ZhZGVfdDt1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlMDt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlMTt2YXJ5aW5nIHZlYzIgdl9wb3MwO3ZhcnlpbmcgdmVjMiB2X3BvczE7dW5pZm9ybSBmbG9hdCB1X2JyaWdodG5lc3NfbG93O3VuaWZvcm0gZmxvYXQgdV9icmlnaHRuZXNzX2hpZ2g7dW5pZm9ybSBmbG9hdCB1X3NhdHVyYXRpb25fZmFjdG9yO3VuaWZvcm0gZmxvYXQgdV9jb250cmFzdF9mYWN0b3I7dW5pZm9ybSB2ZWMzIHVfc3Bpbl93ZWlnaHRzO3ZvaWQgbWFpbigpIHt2ZWM0IGNvbG9yMD10ZXh0dXJlMkQodV9pbWFnZTAsdl9wb3MwKTt2ZWM0IGNvbG9yMT10ZXh0dXJlMkQodV9pbWFnZTEsdl9wb3MxKTtpZiAoY29sb3IwLmEgPiAwLjApIHtjb2xvcjAucmdiPWNvbG9yMC5yZ2IvY29sb3IwLmE7fWlmIChjb2xvcjEuYSA+IDAuMCkge2NvbG9yMS5yZ2I9Y29sb3IxLnJnYi9jb2xvcjEuYTt9dmVjNCBjb2xvcj1taXgoY29sb3IwLGNvbG9yMSx1X2ZhZGVfdCk7Y29sb3IuYSo9dV9vcGFjaXR5O3ZlYzMgcmdiPWNvbG9yLnJnYjtyZ2I9dmVjMyhkb3QocmdiLHVfc3Bpbl93ZWlnaHRzLnh5eiksZG90KHJnYix1X3NwaW5fd2VpZ2h0cy56eHkpLGRvdChyZ2IsdV9zcGluX3dlaWdodHMueXp4KSk7ZmxvYXQgYXZlcmFnZT0oY29sb3Iucitjb2xvci5nK2NvbG9yLmIpLzMuMDtyZ2IrPShhdmVyYWdlLXJnYikqdV9zYXR1cmF0aW9uX2ZhY3RvcjtyZ2I9KHJnYi0wLjUpKnVfY29udHJhc3RfZmFjdG9yKzAuNTt2ZWMzIHVfaGlnaF92ZWM9dmVjMyh1X2JyaWdodG5lc3NfbG93LHVfYnJpZ2h0bmVzc19sb3csdV9icmlnaHRuZXNzX2xvdyk7dmVjMyB1X2xvd192ZWM9dmVjMyh1X2JyaWdodG5lc3NfaGlnaCx1X2JyaWdodG5lc3NfaGlnaCx1X2JyaWdodG5lc3NfaGlnaCk7Z2xfRnJhZ0NvbG9yPXZlYzQobWl4KHVfaGlnaF92ZWMsdV9sb3dfdmVjLHJnYikqY29sb3IuYSxjb2xvci5hKTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfdGxfcGFyZW50O3VuaWZvcm0gZmxvYXQgdV9zY2FsZV9wYXJlbnQ7dW5pZm9ybSBmbG9hdCB1X2J1ZmZlcl9zY2FsZTthdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO3ZhcnlpbmcgdmVjMiB2X3BvczA7dmFyeWluZyB2ZWMyIHZfcG9zMTt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZfcG9zMD0oKChhX3RleHR1cmVfcG9zLzgxOTIuMCktMC41KS91X2J1ZmZlcl9zY2FsZSApKzAuNTt2X3BvczE9KHZfcG9zMCp1X3NjYWxlX3BhcmVudCkrdV90bF9wYXJlbnQ7fSIpLHNyPWNyKCJ1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7dmFyeWluZyB2ZWMyIHZfdGV4O3ZhcnlpbmcgZmxvYXQgdl9mYWRlX29wYWNpdHk7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5sb3dwIGZsb2F0IGFscGhhPW9wYWNpdHkqdl9mYWRlX29wYWNpdHk7Z2xfRnJhZ0NvbG9yPXRleHR1cmUyRCh1X3RleHR1cmUsdl90ZXgpKmFscGhhO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImNvbnN0IGZsb2F0IFBJPTMuMTQxNTkyNjUzNTg5NzkzO2F0dHJpYnV0ZSB2ZWM0IGFfcG9zX29mZnNldDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7YXR0cmlidXRlIHZlYzMgYV9wcm9qZWN0ZWRfcG9zO2F0dHJpYnV0ZSBmbG9hdCBhX2ZhZGVfb3BhY2l0eTt1bmlmb3JtIGJvb2wgdV9pc19zaXplX3pvb21fY29uc3RhbnQ7dW5pZm9ybSBib29sIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50O3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplX3Q7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemU7dW5pZm9ybSBoaWdocCBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3BpdGNoO3VuaWZvcm0gYm9vbCB1X3JvdGF0ZV9zeW1ib2w7dW5pZm9ybSBoaWdocCBmbG9hdCB1X2FzcGVjdF9yYXRpbzt1bmlmb3JtIGZsb2F0IHVfZmFkZV9jaGFuZ2U7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWF0NCB1X2xhYmVsX3BsYW5lX21hdHJpeDt1bmlmb3JtIG1hdDQgdV9jb29yZF9tYXRyaXg7dW5pZm9ybSBib29sIHVfaXNfdGV4dDt1bmlmb3JtIGJvb2wgdV9waXRjaF93aXRoX21hcDt1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3ZhcnlpbmcgdmVjMiB2X3RleDt2YXJ5aW5nIGZsb2F0IHZfZmFkZV9vcGFjaXR5O1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxudmVjMiBhX3Bvcz1hX3Bvc19vZmZzZXQueHk7dmVjMiBhX29mZnNldD1hX3Bvc19vZmZzZXQuenc7dmVjMiBhX3RleD1hX2RhdGEueHk7dmVjMiBhX3NpemU9YV9kYXRhLnp3O2hpZ2hwIGZsb2F0IHNlZ21lbnRfYW5nbGU9LWFfcHJvamVjdGVkX3Bvc1syXTtmbG9hdCBzaXplO2lmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7c2l6ZT1taXgoYV9zaXplWzBdLGFfc2l6ZVsxXSx1X3NpemVfdCkvMjU2LjA7fSBlbHNlIGlmICh1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiAhdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtzaXplPWFfc2l6ZVswXS8yNTYuMDt9IGVsc2UgaWYgKCF1X2lzX3NpemVfem9vbV9jb25zdGFudCAmJiB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9dV9zaXplO30gZWxzZSB7c2l6ZT11X3NpemU7fXZlYzQgcHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO2hpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U9cHJvamVjdGVkUG9pbnQudztoaWdocCBmbG9hdCBkaXN0YW5jZV9yYXRpbz11X3BpdGNoX3dpdGhfbWFwID9cbmNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UvdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIDpcbnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZS9jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlO2hpZ2hwIGZsb2F0IHBlcnNwZWN0aXZlX3JhdGlvPWNsYW1wKDAuNSswLjUqZGlzdGFuY2VfcmF0aW8sMC4wLDQuMCk7c2l6ZSo9cGVyc3BlY3RpdmVfcmF0aW87ZmxvYXQgZm9udFNjYWxlPXVfaXNfdGV4dCA/IHNpemUvMjQuMCA6IHNpemU7aGlnaHAgZmxvYXQgc3ltYm9sX3JvdGF0aW9uPTAuMDtpZiAodV9yb3RhdGVfc3ltYm9sKSB7dmVjNCBvZmZzZXRQcm9qZWN0ZWRQb2ludD11X21hdHJpeCp2ZWM0KGFfcG9zK3ZlYzIoMSwwKSwwLDEpO3ZlYzIgYT1wcm9qZWN0ZWRQb2ludC54eS9wcm9qZWN0ZWRQb2ludC53O3ZlYzIgYj1vZmZzZXRQcm9qZWN0ZWRQb2ludC54eS9vZmZzZXRQcm9qZWN0ZWRQb2ludC53O3N5bWJvbF9yb3RhdGlvbj1hdGFuKChiLnktYS55KS91X2FzcGVjdF9yYXRpbyxiLngtYS54KTt9aGlnaHAgZmxvYXQgYW5nbGVfc2luPXNpbihzZWdtZW50X2FuZ2xlK3N5bWJvbF9yb3RhdGlvbik7aGlnaHAgZmxvYXQgYW5nbGVfY29zPWNvcyhzZWdtZW50X2FuZ2xlK3N5bWJvbF9yb3RhdGlvbik7bWF0MiByb3RhdGlvbl9tYXRyaXg9bWF0MihhbmdsZV9jb3MsLTEuMCphbmdsZV9zaW4sYW5nbGVfc2luLGFuZ2xlX2Nvcyk7dmVjNCBwcm9qZWN0ZWRfcG9zPXVfbGFiZWxfcGxhbmVfbWF0cml4KnZlYzQoYV9wcm9qZWN0ZWRfcG9zLnh5LDAuMCwxLjApO2dsX1Bvc2l0aW9uPXVfY29vcmRfbWF0cml4KnZlYzQocHJvamVjdGVkX3Bvcy54eS9wcm9qZWN0ZWRfcG9zLncrcm90YXRpb25fbWF0cml4KihhX29mZnNldC8zMi4wKmZvbnRTY2FsZSksMC4wLDEuMCk7dl90ZXg9YV90ZXgvdV90ZXhzaXplO3ZlYzIgZmFkZV9vcGFjaXR5PXVucGFja19vcGFjaXR5KGFfZmFkZV9vcGFjaXR5KTtmbG9hdCBmYWRlX2NoYW5nZT1mYWRlX29wYWNpdHlbMV0gPiAwLjUgPyB1X2ZhZGVfY2hhbmdlIDotdV9mYWRlX2NoYW5nZTt2X2ZhZGVfb3BhY2l0eT1tYXgoMC4wLG1pbigxLjAsZmFkZV9vcGFjaXR5WzBdK2ZhZGVfY2hhbmdlKSk7fSIpLGxyPWNyKCIjZGVmaW5lIFNERl9QWCA4LjBcbnVuaWZvcm0gYm9vbCB1X2lzX2hhbG87dW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9nYW1tYV9zY2FsZTt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSBib29sIHVfaXNfdGV4dDt2YXJ5aW5nIHZlYzIgdl9kYXRhMDt2YXJ5aW5nIHZlYzMgdl9kYXRhMTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXG5mbG9hdCBFREdFX0dBTU1BPTAuMTA1L3VfZGV2aWNlX3BpeGVsX3JhdGlvO3ZlYzIgdGV4PXZfZGF0YTAueHk7ZmxvYXQgZ2FtbWFfc2NhbGU9dl9kYXRhMS54O2Zsb2F0IHNpemU9dl9kYXRhMS55O2Zsb2F0IGZhZGVfb3BhY2l0eT12X2RhdGExWzJdO2Zsb2F0IGZvbnRTY2FsZT11X2lzX3RleHQgPyBzaXplLzI0LjAgOiBzaXplO2xvd3AgdmVjNCBjb2xvcj1maWxsX2NvbG9yO2hpZ2hwIGZsb2F0IGdhbW1hPUVER0VfR0FNTUEvKGZvbnRTY2FsZSp1X2dhbW1hX3NjYWxlKTtsb3dwIGZsb2F0IGJ1ZmY9KDI1Ni4wLTY0LjApLzI1Ni4wO2lmICh1X2lzX2hhbG8pIHtjb2xvcj1oYWxvX2NvbG9yO2dhbW1hPShoYWxvX2JsdXIqMS4xOS9TREZfUFgrRURHRV9HQU1NQSkvKGZvbnRTY2FsZSp1X2dhbW1hX3NjYWxlKTtidWZmPSg2LjAtaGFsb193aWR0aC9mb250U2NhbGUpL1NERl9QWDt9bG93cCBmbG9hdCBkaXN0PXRleHR1cmUyRCh1X3RleHR1cmUsdGV4KS5hO2hpZ2hwIGZsb2F0IGdhbW1hX3NjYWxlZD1nYW1tYSpnYW1tYV9zY2FsZTtoaWdocCBmbG9hdCBhbHBoYT1zbW9vdGhzdGVwKGJ1ZmYtZ2FtbWFfc2NhbGVkLGJ1ZmYrZ2FtbWFfc2NhbGVkLGRpc3QpO2dsX0ZyYWdDb2xvcj1jb2xvciooYWxwaGEqb3BhY2l0eSpmYWRlX29wYWNpdHkpO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImNvbnN0IGZsb2F0IFBJPTMuMTQxNTkyNjUzNTg5NzkzO2F0dHJpYnV0ZSB2ZWM0IGFfcG9zX29mZnNldDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7YXR0cmlidXRlIHZlYzMgYV9wcm9qZWN0ZWRfcG9zO2F0dHJpYnV0ZSBmbG9hdCBhX2ZhZGVfb3BhY2l0eTt1bmlmb3JtIGJvb2wgdV9pc19zaXplX3pvb21fY29uc3RhbnQ7dW5pZm9ybSBib29sIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50O3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplX3Q7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemU7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWF0NCB1X2xhYmVsX3BsYW5lX21hdHJpeDt1bmlmb3JtIG1hdDQgdV9jb29yZF9tYXRyaXg7dW5pZm9ybSBib29sIHVfaXNfdGV4dDt1bmlmb3JtIGJvb2wgdV9waXRjaF93aXRoX21hcDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfcGl0Y2g7dW5pZm9ybSBib29sIHVfcm90YXRlX3N5bWJvbDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYXNwZWN0X3JhdGlvO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO3VuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTt1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3ZhcnlpbmcgdmVjMiB2X2RhdGEwO3ZhcnlpbmcgdmVjMyB2X2RhdGExO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbnZlYzIgYV9wb3M9YV9wb3Nfb2Zmc2V0Lnh5O3ZlYzIgYV9vZmZzZXQ9YV9wb3Nfb2Zmc2V0Lnp3O3ZlYzIgYV90ZXg9YV9kYXRhLnh5O3ZlYzIgYV9zaXplPWFfZGF0YS56dztoaWdocCBmbG9hdCBzZWdtZW50X2FuZ2xlPS1hX3Byb2plY3RlZF9wb3NbMl07ZmxvYXQgc2l6ZTtpZiAoIXVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9bWl4KGFfc2l6ZVswXSxhX3NpemVbMV0sdV9zaXplX3QpLzI1Ni4wO30gZWxzZSBpZiAodV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7c2l6ZT1hX3NpemVbMF0vMjU2LjA7fSBlbHNlIGlmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgdV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpIHtzaXplPXVfc2l6ZTt9IGVsc2Uge3NpemU9dV9zaXplO312ZWM0IHByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTtoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlPXByb2plY3RlZFBvaW50Lnc7aGlnaHAgZmxvYXQgZGlzdGFuY2VfcmF0aW89dV9waXRjaF93aXRoX21hcCA/XG5jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlL3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSA6XG51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UvY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZTtoaWdocCBmbG9hdCBwZXJzcGVjdGl2ZV9yYXRpbz1jbGFtcCgwLjUrMC41KmRpc3RhbmNlX3JhdGlvLDAuMCw0LjApO3NpemUqPXBlcnNwZWN0aXZlX3JhdGlvO2Zsb2F0IGZvbnRTY2FsZT11X2lzX3RleHQgPyBzaXplLzI0LjAgOiBzaXplO2hpZ2hwIGZsb2F0IHN5bWJvbF9yb3RhdGlvbj0wLjA7aWYgKHVfcm90YXRlX3N5bWJvbCkge3ZlYzQgb2Zmc2V0UHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX3Bvcyt2ZWMyKDEsMCksMCwxKTt2ZWMyIGE9cHJvamVjdGVkUG9pbnQueHkvcHJvamVjdGVkUG9pbnQudzt2ZWMyIGI9b2Zmc2V0UHJvamVjdGVkUG9pbnQueHkvb2Zmc2V0UHJvamVjdGVkUG9pbnQudztzeW1ib2xfcm90YXRpb249YXRhbigoYi55LWEueSkvdV9hc3BlY3RfcmF0aW8sYi54LWEueCk7fWhpZ2hwIGZsb2F0IGFuZ2xlX3Npbj1zaW4oc2VnbWVudF9hbmdsZStzeW1ib2xfcm90YXRpb24pO2hpZ2hwIGZsb2F0IGFuZ2xlX2Nvcz1jb3Moc2VnbWVudF9hbmdsZStzeW1ib2xfcm90YXRpb24pO21hdDIgcm90YXRpb25fbWF0cml4PW1hdDIoYW5nbGVfY29zLC0xLjAqYW5nbGVfc2luLGFuZ2xlX3NpbixhbmdsZV9jb3MpO3ZlYzQgcHJvamVjdGVkX3Bvcz11X2xhYmVsX3BsYW5lX21hdHJpeCp2ZWM0KGFfcHJvamVjdGVkX3Bvcy54eSwwLjAsMS4wKTtnbF9Qb3NpdGlvbj11X2Nvb3JkX21hdHJpeCp2ZWM0KHByb2plY3RlZF9wb3MueHkvcHJvamVjdGVkX3Bvcy53K3JvdGF0aW9uX21hdHJpeCooYV9vZmZzZXQvMzIuMCpmb250U2NhbGUpLDAuMCwxLjApO2Zsb2F0IGdhbW1hX3NjYWxlPWdsX1Bvc2l0aW9uLnc7dmVjMiB0ZXg9YV90ZXgvdV90ZXhzaXplO3ZlYzIgZmFkZV9vcGFjaXR5PXVucGFja19vcGFjaXR5KGFfZmFkZV9vcGFjaXR5KTtmbG9hdCBmYWRlX2NoYW5nZT1mYWRlX29wYWNpdHlbMV0gPiAwLjUgPyB1X2ZhZGVfY2hhbmdlIDotdV9mYWRlX2NoYW5nZTtmbG9hdCBpbnRlcnBvbGF0ZWRfZmFkZV9vcGFjaXR5PW1heCgwLjAsbWluKDEuMCxmYWRlX29wYWNpdHlbMF0rZmFkZV9jaGFuZ2UpKTt2X2RhdGEwPXZlYzIodGV4LngsdGV4LnkpO3ZfZGF0YTE9dmVjMyhnYW1tYV9zY2FsZSxzaXplLGludGVycG9sYXRlZF9mYWRlX29wYWNpdHkpO30iKTtmdW5jdGlvbiBjcih0LGUpe3ZhciByPS8jcHJhZ21hIG1hcGJveDogKFtcd10rKSAoW1x3XSspIChbXHddKykgKFtcd10rKS9nLG49e307cmV0dXJue2ZyYWdtZW50U291cmNlOnQ9dC5yZXBsYWNlKHIsZnVuY3Rpb24odCxlLHIsYSxpKXtyZXR1cm4gbltpXT0hMCwiZGVmaW5lIj09PWU/IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIraSsiXG52YXJ5aW5nICIrcisiICIrYSsiICIraSsiO1xuI2Vsc2VcbnVuaWZvcm0gIityKyIgIithKyIgdV8iK2krIjtcbiNlbmRpZlxuIjoiXG4jaWZkZWYgSEFTX1VOSUZPUk1fdV8iK2krIlxuICAgICIrcisiICIrYSsiICIraSsiID0gdV8iK2krIjtcbiNlbmRpZlxuIn0pLHZlcnRleFNvdXJjZTplPWUucmVwbGFjZShyLGZ1bmN0aW9uKHQsZSxyLGEsaSl7dmFyIG89ImZsb2F0Ij09PWE/InZlYzIiOiJ2ZWM0IixzPWkubWF0Y2goL2NvbG9yLyk/ImNvbG9yIjpvO3JldHVybiBuW2ldPyJkZWZpbmUiPT09ZT8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIitpKyJcbnVuaWZvcm0gbG93cCBmbG9hdCB1XyIraSsiX3Q7XG5hdHRyaWJ1dGUgIityKyIgIitvKyIgYV8iK2krIjtcbnZhcnlpbmcgIityKyIgIithKyIgIitpKyI7XG4jZWxzZVxudW5pZm9ybSAiK3IrIiAiK2ErIiB1XyIraSsiO1xuI2VuZGlmXG4iOiJ2ZWM0Ij09PXM/IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIraSsiXG4gICAgIitpKyIgPSBhXyIraSsiO1xuI2Vsc2VcbiAgICAiK3IrIiAiK2ErIiAiK2krIiA9IHVfIitpKyI7XG4jZW5kaWZcbiI6IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIraSsiXG4gICAgIitpKyIgPSB1bnBhY2tfbWl4XyIrcysiKGFfIitpKyIsIHVfIitpKyJfdCk7XG4jZWxzZVxuICAgICIrcisiICIrYSsiICIraSsiID0gdV8iK2krIjtcbiNlbmRpZlxuIjoiZGVmaW5lIj09PWU/IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIraSsiXG51bmlmb3JtIGxvd3AgZmxvYXQgdV8iK2krIl90O1xuYXR0cmlidXRlICIrcisiICIrbysiIGFfIitpKyI7XG4jZWxzZVxudW5pZm9ybSAiK3IrIiAiK2ErIiB1XyIraSsiO1xuI2VuZGlmXG4iOiJ2ZWM0Ij09PXM/IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIraSsiXG4gICAgIityKyIgIithKyIgIitpKyIgPSBhXyIraSsiO1xuI2Vsc2VcbiAgICAiK3IrIiAiK2ErIiAiK2krIiA9IHVfIitpKyI7XG4jZW5kaWZcbiI6IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIraSsiXG4gICAgIityKyIgIithKyIgIitpKyIgPSB1bnBhY2tfbWl4XyIrcysiKGFfIitpKyIsIHVfIitpKyJfdCk7XG4jZWxzZVxuICAgICIrcisiICIrYSsiICIraSsiID0gdV8iK2krIjtcbiNlbmRpZlxuIn0pfX12YXIgdXI9T2JqZWN0LmZyZWV6ZSh7cHJlbHVkZTpCZSxiYWNrZ3JvdW5kOk5lLGJhY2tncm91bmRQYXR0ZXJuOmplLGNpcmNsZTpWZSxjbGlwcGluZ01hc2s6VWUsaGVhdG1hcDpxZSxoZWF0bWFwVGV4dHVyZTpIZSxjb2xsaXNpb25Cb3g6R2UsY29sbGlzaW9uQ2lyY2xlOlllLGRlYnVnOldlLGZpbGw6WGUsZmlsbE91dGxpbmU6WmUsZmlsbE91dGxpbmVQYXR0ZXJuOkplLGZpbGxQYXR0ZXJuOktlLGZpbGxFeHRydXNpb246UWUsZmlsbEV4dHJ1c2lvblBhdHRlcm46JGUsaGlsbHNoYWRlUHJlcGFyZTp0cixoaWxsc2hhZGU6ZXIsbGluZTpycixsaW5lR3JhZGllbnQ6bnIsbGluZVBhdHRlcm46YXIsbGluZVNERjppcixyYXN0ZXI6b3Isc3ltYm9sSWNvbjpzcixzeW1ib2xTREY6bHJ9KSxocj1mdW5jdGlvbigpe3RoaXMuYm91bmRQcm9ncmFtPW51bGwsdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlcj1udWxsLHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnM9W10sdGhpcy5ib3VuZEluZGV4QnVmZmVyPW51bGwsdGhpcy5ib3VuZFZlcnRleE9mZnNldD1udWxsLHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyPW51bGwsdGhpcy52YW89bnVsbH07aHIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCxlLHIsbixhLGksbyxzKXt0aGlzLmNvbnRleHQ9dDtmb3IodmFyIGw9dGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycy5sZW5ndGghPT1uLmxlbmd0aCxjPTA7IWwmJmM8bi5sZW5ndGg7YysrKXRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnNbY10hPT1uW2NdJiYobD0hMCk7dmFyIHU9IXRoaXMudmFvfHx0aGlzLmJvdW5kUHJvZ3JhbSE9PWV8fHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXIhPT1yfHxsfHx0aGlzLmJvdW5kSW5kZXhCdWZmZXIhPT1hfHx0aGlzLmJvdW5kVmVydGV4T2Zmc2V0IT09aXx8dGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXIhPT1vfHx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjIhPT1zOyF0LmV4dFZlcnRleEFycmF5T2JqZWN0fHx1P3RoaXMuZnJlc2hCaW5kKGUscixuLGEsaSxvLHMpOih0LmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQodGhpcy52YW8pLG8mJm8uYmluZCgpLGEmJmEuZHluYW1pY0RyYXcmJmEuYmluZCgpLHMmJnMuYmluZCgpKX0saHIucHJvdG90eXBlLmZyZXNoQmluZD1mdW5jdGlvbih0LGUscixuLGEsaSxvKXt2YXIgcyxsPXQubnVtQXR0cmlidXRlcyxjPXRoaXMuY29udGV4dCx1PWMuZ2w7aWYoYy5leHRWZXJ0ZXhBcnJheU9iamVjdCl0aGlzLnZhbyYmdGhpcy5kZXN0cm95KCksdGhpcy52YW89Yy5leHRWZXJ0ZXhBcnJheU9iamVjdC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpLGMuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbykscz0wLHRoaXMuYm91bmRQcm9ncmFtPXQsdGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlcj1lLHRoaXMuYm91bmRQYWludFZlcnRleEJ1ZmZlcnM9cix0aGlzLmJvdW5kSW5kZXhCdWZmZXI9bix0aGlzLmJvdW5kVmVydGV4T2Zmc2V0PWEsdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI9aSx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjI9bztlbHNle3M9Yy5jdXJyZW50TnVtQXR0cmlidXRlc3x8MDtmb3IodmFyIGg9bDtoPHM7aCsrKXUuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGgpfWUuZW5hYmxlQXR0cmlidXRlcyh1LHQpO2Zvcih2YXIgZj0wLHA9cjtmPHAubGVuZ3RoO2YrPTEpcFtmXS5lbmFibGVBdHRyaWJ1dGVzKHUsdCk7aSYmaS5lbmFibGVBdHRyaWJ1dGVzKHUsdCksbyYmby5lbmFibGVBdHRyaWJ1dGVzKHUsdCksZS5iaW5kKCksZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsYSk7Zm9yKHZhciBkPTAsZz1yO2Q8Zy5sZW5ndGg7ZCs9MSl7dmFyIHY9Z1tkXTt2LmJpbmQoKSx2LnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxhKX1pJiYoaS5iaW5kKCksaS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsYSkpLG4mJm4uYmluZCgpLG8mJihvLmJpbmQoKSxvLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxhKSksYy5jdXJyZW50TnVtQXR0cmlidXRlcz1sfSxoci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudmFvJiYodGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMudmFvKSx0aGlzLnZhbz1udWxsKX07dmFyIGZyPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIGk9dC5nbDt0aGlzLnByb2dyYW09aS5jcmVhdGVQcm9ncmFtKCk7dmFyIG89ci5kZWZpbmVzKCk7YSYmby5wdXNoKCIjZGVmaW5lIE9WRVJEUkFXX0lOU1BFQ1RPUjsiKTt2YXIgcz1vLmNvbmNhdChCZS5mcmFnbWVudFNvdXJjZSxlLmZyYWdtZW50U291cmNlKS5qb2luKCJcbiIpLGw9by5jb25jYXQoQmUudmVydGV4U291cmNlLGUudmVydGV4U291cmNlKS5qb2luKCJcbiIpLGM9aS5jcmVhdGVTaGFkZXIoaS5GUkFHTUVOVF9TSEFERVIpO2kuc2hhZGVyU291cmNlKGMscyksaS5jb21waWxlU2hhZGVyKGMpLGkuYXR0YWNoU2hhZGVyKHRoaXMucHJvZ3JhbSxjKTt2YXIgdT1pLmNyZWF0ZVNoYWRlcihpLlZFUlRFWF9TSEFERVIpO2kuc2hhZGVyU291cmNlKHUsbCksaS5jb21waWxlU2hhZGVyKHUpLGkuYXR0YWNoU2hhZGVyKHRoaXMucHJvZ3JhbSx1KTtmb3IodmFyIGg9ci5sYXlvdXRBdHRyaWJ1dGVzfHxbXSxmPTA7ZjxoLmxlbmd0aDtmKyspaS5iaW5kQXR0cmliTG9jYXRpb24odGhpcy5wcm9ncmFtLGYsaFtmXS5uYW1lKTtpLmxpbmtQcm9ncmFtKHRoaXMucHJvZ3JhbSksdGhpcy5udW1BdHRyaWJ1dGVzPWkuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0saS5BQ1RJVkVfQVRUUklCVVRFUyksdGhpcy5hdHRyaWJ1dGVzPXt9O2Zvcih2YXIgcD17fSxkPTA7ZDx0aGlzLm51bUF0dHJpYnV0ZXM7ZCsrKXt2YXIgZz1pLmdldEFjdGl2ZUF0dHJpYih0aGlzLnByb2dyYW0sZCk7ZyYmKHRoaXMuYXR0cmlidXRlc1tnLm5hbWVdPWkuZ2V0QXR0cmliTG9jYXRpb24odGhpcy5wcm9ncmFtLGcubmFtZSkpfWZvcih2YXIgdj1pLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLGkuQUNUSVZFX1VOSUZPUk1TKSxtPTA7bTx2O20rKyl7dmFyIHk9aS5nZXRBY3RpdmVVbmlmb3JtKHRoaXMucHJvZ3JhbSxtKTt5JiYocFt5Lm5hbWVdPWkuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMucHJvZ3JhbSx5Lm5hbWUpKX10aGlzLmZpeGVkVW5pZm9ybXM9bih0LHApLHRoaXMuYmluZGVyVW5pZm9ybXM9ci5nZXRVbmlmb3Jtcyh0LHApfTtmdW5jdGlvbiBwcihlLHIsbil7dmFyIGE9MS9jZShuLDEsci50cmFuc2Zvcm0udGlsZVpvb20pLGk9TWF0aC5wb3coMixuLnRpbGVJRC5vdmVyc2NhbGVkWiksbz1uLnRpbGVTaXplKk1hdGgucG93KDIsci50cmFuc2Zvcm0udGlsZVpvb20pL2kscz1vKihuLnRpbGVJRC5jYW5vbmljYWwueCtuLnRpbGVJRC53cmFwKmkpLGw9bypuLnRpbGVJRC5jYW5vbmljYWwueTtyZXR1cm57dV9pbWFnZTowLHVfdGV4c2l6ZTpuLmltYWdlQXRsYXNUZXh0dXJlLnNpemUsdV9zY2FsZTpbdC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sYSxlLmZyb21TY2FsZSxlLnRvU2NhbGVdLHVfZmFkZTplLnQsdV9waXhlbF9jb29yZF91cHBlcjpbcz4+MTYsbD4+MTZdLHVfcGl4ZWxfY29vcmRfbG93ZXI6WzY1NTM1JnMsNjU1MzUmbF19fWZyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8scyxsLGMsdSxoLGYscCxkLGcpe3ZhciB2LG09dC5nbDtmb3IodmFyIHkgaW4gdC5wcm9ncmFtLnNldCh0aGlzLnByb2dyYW0pLHQuc2V0RGVwdGhNb2RlKHIpLHQuc2V0U3RlbmNpbE1vZGUobiksdC5zZXRDb2xvck1vZGUoYSksdC5zZXRDdWxsRmFjZShpKSx0aGlzLmZpeGVkVW5pZm9ybXMpdGhpcy5maXhlZFVuaWZvcm1zW3ldLnNldChvW3ldKTtwJiZwLnNldFVuaWZvcm1zKHQsdGhpcy5iaW5kZXJVbmlmb3JtcyxoLHt6b29tOmZ9KTtmb3IodmFyIHg9KHY9e30sdlttLkxJTkVTXT0yLHZbbS5UUklBTkdMRVNdPTMsdlttLkxJTkVfU1RSSVBdPTEsdilbZV0sYj0wLF89dS5nZXQoKTtiPF8ubGVuZ3RoO2IrPTEpe3ZhciB3PV9bYl0saz13LnZhb3N8fCh3LnZhb3M9e30pOyhrW3NdfHwoa1tzXT1uZXcgaHIpKS5iaW5kKHQsdGhpcyxsLHA/cC5nZXRQYWludFZlcnRleEJ1ZmZlcnMoKTpbXSxjLHcudmVydGV4T2Zmc2V0LGQsZyksbS5kcmF3RWxlbWVudHMoZSx3LnByaW1pdGl2ZUxlbmd0aCp4LG0uVU5TSUdORURfU0hPUlQsdy5wcmltaXRpdmVPZmZzZXQqeCoyKX19O3ZhciBkcj1mdW5jdGlvbihlLHIsbixhKXt2YXIgaT1yLnN0eWxlLmxpZ2h0LG89aS5wcm9wZXJ0aWVzLmdldCgicG9zaXRpb24iKSxzPVtvLngsby55LG8uel0sbD10LmNyZWF0ZSQxKCk7InZpZXdwb3J0Ij09PWkucHJvcGVydGllcy5nZXQoImFuY2hvciIpJiZ0LmZyb21Sb3RhdGlvbihsLC1yLnRyYW5zZm9ybS5hbmdsZSksdC50cmFuc2Zvcm1NYXQzKHMscyxsKTt2YXIgYz1pLnByb3BlcnRpZXMuZ2V0KCJjb2xvciIpO3JldHVybnt1X21hdHJpeDplLHVfbGlnaHRwb3M6cyx1X2xpZ2h0aW50ZW5zaXR5OmkucHJvcGVydGllcy5nZXQoImludGVuc2l0eSIpLHVfbGlnaHRjb2xvcjpbYy5yLGMuZyxjLmJdLHVfdmVydGljYWxfZ3JhZGllbnQ6K24sdV9vcGFjaXR5OmF9fSxncj1mdW5jdGlvbihlLHIsbixhLGksbyxzKXtyZXR1cm4gdC5leHRlbmQoZHIoZSxyLG4sYSkscHIobyxyLHMpLHt1X2hlaWdodF9mYWN0b3I6LU1hdGgucG93KDIsaS5vdmVyc2NhbGVkWikvcy50aWxlU2l6ZS84fSl9LHZyPWZ1bmN0aW9uKHQpe3JldHVybnt1X21hdHJpeDp0fX0sbXI9ZnVuY3Rpb24oZSxyLG4sYSl7cmV0dXJuIHQuZXh0ZW5kKHZyKGUpLHByKG4scixhKSl9LHlyPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3VfbWF0cml4OnQsdV93b3JsZDplfX0seHI9ZnVuY3Rpb24oZSxyLG4sYSxpKXtyZXR1cm4gdC5leHRlbmQobXIoZSxyLG4sYSkse3Vfd29ybGQ6aX0pfSxicj1mdW5jdGlvbihlLHIsbixhKXt2YXIgaSxvLHM9ZS50cmFuc2Zvcm07aWYoIm1hcCI9PT1hLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLWFsaWdubWVudCIpKXt2YXIgbD1jZShuLDEscy56b29tKTtpPSEwLG89W2wsbF19ZWxzZSBpPSExLG89cy5waXhlbHNUb0dMVW5pdHM7cmV0dXJue3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdV9zY2FsZV93aXRoX21hcDorKCJtYXAiPT09YS5wYWludC5nZXQoImNpcmNsZS1waXRjaC1zY2FsZSIpKSx1X21hdHJpeDplLnRyYW5zbGF0ZVBvc01hdHJpeChyLnBvc01hdHJpeCxuLGEucGFpbnQuZ2V0KCJjaXJjbGUtdHJhbnNsYXRlIiksYS5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yIikpLHVfcGl0Y2hfd2l0aF9tYXA6K2ksdV9kZXZpY2VfcGl4ZWxfcmF0aW86dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sdV9leHRydWRlX3NjYWxlOm99fSxfcj1mdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6bmV3IHQuVW5pZm9ybTFmKGUsci51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLHVfcGl4ZWxzX3RvX3RpbGVfdW5pdHM6bmV3IHQuVW5pZm9ybTFmKGUsci51X3BpeGVsc190b190aWxlX3VuaXRzKSx1X2V4dHJ1ZGVfc2NhbGU6bmV3IHQuVW5pZm9ybTJmKGUsci51X2V4dHJ1ZGVfc2NhbGUpLHVfb3ZlcnNjYWxlX2ZhY3RvcjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3ZlcnNjYWxlX2ZhY3Rvcil9fSx3cj1mdW5jdGlvbih0LGUscil7dmFyIG49Y2UociwxLGUuem9vbSksYT1NYXRoLnBvdygyLGUuem9vbS1yLnRpbGVJRC5vdmVyc2NhbGVkWiksaT1yLnRpbGVJRC5vdmVyc2NhbGVGYWN0b3IoKTtyZXR1cm57dV9tYXRyaXg6dCx1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6ZS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLHVfcGl4ZWxzX3RvX3RpbGVfdW5pdHM6bix1X2V4dHJ1ZGVfc2NhbGU6W2UucGl4ZWxzVG9HTFVuaXRzWzBdLyhuKmEpLGUucGl4ZWxzVG9HTFVuaXRzWzFdLyhuKmEpXSx1X292ZXJzY2FsZV9mYWN0b3I6aX19LGtyPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3VfbWF0cml4OnQsdV9jb2xvcjplfX0sVHI9ZnVuY3Rpb24odCl7cmV0dXJue3VfbWF0cml4OnR9fSxNcj1mdW5jdGlvbih0LGUscixuKXtyZXR1cm57dV9tYXRyaXg6dCx1X2V4dHJ1ZGVfc2NhbGU6Y2UoZSwxLHIpLHVfaW50ZW5zaXR5Om59fSxBcj1mdW5jdGlvbih0LGUscil7dmFyIG49ci5wYWludC5nZXQoImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiKSxhPXIucGFpbnQuZ2V0KCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yIiksaT1yLnBhaW50LmdldCgiaGlsbHNoYWRlLWFjY2VudC1jb2xvciIpLG89ci5wYWludC5nZXQoImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIikqKE1hdGguUEkvMTgwKTsidmlld3BvcnQiPT09ci5wYWludC5nZXQoImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yIikmJihvLT10LnRyYW5zZm9ybS5hbmdsZSk7dmFyIHM9IXQub3B0aW9ucy5tb3Zpbmc7cmV0dXJue3VfbWF0cml4OnQudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChlLnRpbGVJRC50b1Vud3JhcHBlZCgpLHMpLHVfaW1hZ2U6MCx1X2xhdHJhbmdlOkVyKHQsZS50aWxlSUQpLHVfbGlnaHQ6W3IucGFpbnQuZ2V0KCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uIiksb10sdV9zaGFkb3c6bix1X2hpZ2hsaWdodDphLHVfYWNjZW50Oml9fSxTcj1mdW5jdGlvbihlLHIpe3ZhciBuPWUuZGVtLnN0cmlkZSxhPXQuY3JlYXRlKCk7cmV0dXJuIHQub3J0aG8oYSwwLHQuRVhURU5ULC10LkVYVEVOVCwwLDAsMSksdC50cmFuc2xhdGUoYSxhLFswLC10LkVYVEVOVCwwXSkse3VfbWF0cml4OmEsdV9pbWFnZToxLHVfZGltZW5zaW9uOltuLG5dLHVfem9vbTplLnRpbGVJRC5vdmVyc2NhbGVkWix1X21heHpvb206cn19O2Z1bmN0aW9uIEVyKGUscil7dmFyIG49TWF0aC5wb3coMixyLmNhbm9uaWNhbC56KSxhPXIuY2Fub25pY2FsLnk7cmV0dXJuW25ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZSgwLGEvbikudG9MbmdMYXQoKS5sYXQsbmV3IHQuTWVyY2F0b3JDb29yZGluYXRlKDAsKGErMSkvbikudG9MbmdMYXQoKS5sYXRdfXZhciBMcj1mdW5jdGlvbihlLHIsbil7dmFyIGE9ZS50cmFuc2Zvcm07cmV0dXJue3VfbWF0cml4OklyKGUscixuKSx1X3JhdGlvOjEvY2UociwxLGEuem9vbSksdV9kZXZpY2VfcGl4ZWxfcmF0aW86dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sdV91bml0c190b19waXhlbHM6WzEvYS5waXhlbHNUb0dMVW5pdHNbMF0sMS9hLnBpeGVsc1RvR0xVbml0c1sxXV19fSxDcj1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuZXh0ZW5kKExyKGUscixuKSx7dV9pbWFnZTowfSl9LFByPWZ1bmN0aW9uKGUscixuLGEpe3ZhciBpPWUudHJhbnNmb3JtLG89enIocixpKTtyZXR1cm57dV9tYXRyaXg6SXIoZSxyLG4pLHVfdGV4c2l6ZTpyLmltYWdlQXRsYXNUZXh0dXJlLnNpemUsdV9yYXRpbzoxL2NlKHIsMSxpLnpvb20pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHVfaW1hZ2U6MCx1X3NjYWxlOlt0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxvLGEuZnJvbVNjYWxlLGEudG9TY2FsZV0sdV9mYWRlOmEudCx1X3VuaXRzX3RvX3BpeGVsczpbMS9pLnBpeGVsc1RvR0xVbml0c1swXSwxL2kucGl4ZWxzVG9HTFVuaXRzWzFdXX19LE9yPWZ1bmN0aW9uKGUscixuLGEsaSl7dmFyIG89ZS50cmFuc2Zvcm0scz1lLmxpbmVBdGxhcyxsPXpyKHIsbyksYz0icm91bmQiPT09bi5sYXlvdXQuZ2V0KCJsaW5lLWNhcCIpLHU9cy5nZXREYXNoKGEuZnJvbSxjKSxoPXMuZ2V0RGFzaChhLnRvLGMpLGY9dS53aWR0aCppLmZyb21TY2FsZSxwPWgud2lkdGgqaS50b1NjYWxlO3JldHVybiB0LmV4dGVuZChMcihlLHIsbikse3VfcGF0dGVybnNjYWxlX2E6W2wvZiwtdS5oZWlnaHQvMl0sdV9wYXR0ZXJuc2NhbGVfYjpbbC9wLC1oLmhlaWdodC8yXSx1X3NkZmdhbW1hOnMud2lkdGgvKDI1NipNYXRoLm1pbihmLHApKnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvKS8yLHVfaW1hZ2U6MCx1X3RleF95X2E6dS55LHVfdGV4X3lfYjpoLnksdV9taXg6aS50fSl9O2Z1bmN0aW9uIHpyKHQsZSl7cmV0dXJuIDEvY2UodCwxLGUudGlsZVpvb20pfWZ1bmN0aW9uIElyKHQsZSxyKXtyZXR1cm4gdC50cmFuc2xhdGVQb3NNYXRyaXgoZS50aWxlSUQucG9zTWF0cml4LGUsci5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlIiksci5wYWludC5nZXQoImxpbmUtdHJhbnNsYXRlLWFuY2hvciIpKX12YXIgRHI9ZnVuY3Rpb24odCxlLHIsbixhKXtyZXR1cm57dV9tYXRyaXg6dCx1X3RsX3BhcmVudDplLHVfc2NhbGVfcGFyZW50OnIsdV9idWZmZXJfc2NhbGU6MSx1X2ZhZGVfdDpuLm1peCx1X29wYWNpdHk6bi5vcGFjaXR5KmEucGFpbnQuZ2V0KCJyYXN0ZXItb3BhY2l0eSIpLHVfaW1hZ2UwOjAsdV9pbWFnZTE6MSx1X2JyaWdodG5lc3NfbG93OmEucGFpbnQuZ2V0KCJyYXN0ZXItYnJpZ2h0bmVzcy1taW4iKSx1X2JyaWdodG5lc3NfaGlnaDphLnBhaW50LmdldCgicmFzdGVyLWJyaWdodG5lc3MtbWF4IiksdV9zYXR1cmF0aW9uX2ZhY3Rvcjoobz1hLnBhaW50LmdldCgicmFzdGVyLXNhdHVyYXRpb24iKSxvPjA/MS0xLygxLjAwMS1vKTotbyksdV9jb250cmFzdF9mYWN0b3I6KGk9YS5wYWludC5nZXQoInJhc3Rlci1jb250cmFzdCIpLGk+MD8xLygxLWkpOjEraSksdV9zcGluX3dlaWdodHM6UnIoYS5wYWludC5nZXQoInJhc3Rlci1odWUtcm90YXRlIikpfTt2YXIgaSxvfTtmdW5jdGlvbiBScih0KXt0Kj1NYXRoLlBJLzE4MDt2YXIgZT1NYXRoLnNpbih0KSxyPU1hdGguY29zKHQpO3JldHVyblsoMipyKzEpLzMsKC1NYXRoLnNxcnQoMykqZS1yKzEpLzMsKE1hdGguc3FydCgzKSplLXIrMSkvM119dmFyIEZyPWZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8scyxsLGMpe3ZhciB1PWEudHJhbnNmb3JtO3JldHVybnt1X2lzX3NpemVfem9vbV9jb25zdGFudDorKCJjb25zdGFudCI9PT10fHwic291cmNlIj09PXQpLHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50OisoImNvbnN0YW50Ij09PXR8fCJjYW1lcmEiPT09dCksdV9zaXplX3Q6ZT9lLnVTaXplVDowLHVfc2l6ZTplP2UudVNpemU6MCx1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U6dS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLHVfcGl0Y2g6dS5waXRjaC8zNjAqMipNYXRoLlBJLHVfcm90YXRlX3N5bWJvbDorcix1X2FzcGVjdF9yYXRpbzp1LndpZHRoL3UuaGVpZ2h0LHVfZmFkZV9jaGFuZ2U6YS5vcHRpb25zLmZhZGVEdXJhdGlvbj9hLnN5bWJvbEZhZGVDaGFuZ2U6MSx1X21hdHJpeDppLHVfbGFiZWxfcGxhbmVfbWF0cml4Om8sdV9jb29yZF9tYXRyaXg6cyx1X2lzX3RleHQ6K2wsdV9waXRjaF93aXRoX21hcDorbix1X3RleHNpemU6Yyx1X3RleHR1cmU6MH19LEJyPWZ1bmN0aW9uKGUscixuLGEsaSxvLHMsbCxjLHUsaCl7dmFyIGY9aS50cmFuc2Zvcm07cmV0dXJuIHQuZXh0ZW5kKEZyKGUscixuLGEsaSxvLHMsbCxjLHUpLHt1X2dhbW1hX3NjYWxlOmE/TWF0aC5jb3MoZi5fcGl0Y2gpKmYuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZToxLHVfZGV2aWNlX3BpeGVsX3JhdGlvOnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHVfaXNfaGFsbzoraH0pfSxOcj1mdW5jdGlvbih0LGUscil7cmV0dXJue3VfbWF0cml4OnQsdV9vcGFjaXR5OmUsdV9jb2xvcjpyfX0sanI9ZnVuY3Rpb24oZSxyLG4sYSxpLG8pe3JldHVybiB0LmV4dGVuZChmdW5jdGlvbih0LGUscixuKXt2YXIgYT1yLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQuZnJvbSksaT1yLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQudG8pLG89ci5pbWFnZU1hbmFnZXIuZ2V0UGl4ZWxTaXplKCkscz1vLndpZHRoLGw9by5oZWlnaHQsYz1NYXRoLnBvdygyLG4udGlsZUlELm92ZXJzY2FsZWRaKSx1PW4udGlsZVNpemUqTWF0aC5wb3coMixyLnRyYW5zZm9ybS50aWxlWm9vbSkvYyxoPXUqKG4udGlsZUlELmNhbm9uaWNhbC54K24udGlsZUlELndyYXAqYyksZj11Km4udGlsZUlELmNhbm9uaWNhbC55O3JldHVybnt1X2ltYWdlOjAsdV9wYXR0ZXJuX3RsX2E6YS50bCx1X3BhdHRlcm5fYnJfYTphLmJyLHVfcGF0dGVybl90bF9iOmkudGwsdV9wYXR0ZXJuX2JyX2I6aS5icix1X3RleHNpemU6W3MsbF0sdV9taXg6ZS50LHVfcGF0dGVybl9zaXplX2E6YS5kaXNwbGF5U2l6ZSx1X3BhdHRlcm5fc2l6ZV9iOmkuZGlzcGxheVNpemUsdV9zY2FsZV9hOmUuZnJvbVNjYWxlLHVfc2NhbGVfYjplLnRvU2NhbGUsdV90aWxlX3VuaXRzX3RvX3BpeGVsczoxL2NlKG4sMSxyLnRyYW5zZm9ybS50aWxlWm9vbSksdV9waXhlbF9jb29yZF91cHBlcjpbaD4+MTYsZj4+MTZdLHVfcGl4ZWxfY29vcmRfbG93ZXI6WzY1NTM1JmgsNjU1MzUmZl19fShhLG8sbixpKSx7dV9tYXRyaXg6ZSx1X29wYWNpdHk6cn0pfSxWcj17ZmlsbEV4dHJ1c2lvbjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2xpZ2h0cG9zOm5ldyB0LlVuaWZvcm0zZihlLHIudV9saWdodHBvcyksdV9saWdodGludGVuc2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfbGlnaHRpbnRlbnNpdHkpLHVfbGlnaHRjb2xvcjpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfbGlnaHRjb2xvciksdV92ZXJ0aWNhbF9ncmFkaWVudDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfdmVydGljYWxfZ3JhZGllbnQpLHVfb3BhY2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3BhY2l0eSl9fSxmaWxsRXh0cnVzaW9uUGF0dGVybjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2xpZ2h0cG9zOm5ldyB0LlVuaWZvcm0zZihlLHIudV9saWdodHBvcyksdV9saWdodGludGVuc2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfbGlnaHRpbnRlbnNpdHkpLHVfbGlnaHRjb2xvcjpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfbGlnaHRjb2xvciksdV92ZXJ0aWNhbF9ncmFkaWVudDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfdmVydGljYWxfZ3JhZGllbnQpLHVfaGVpZ2h0X2ZhY3RvcjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfaGVpZ2h0X2ZhY3RvciksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV9waXhlbF9jb29yZF91cHBlcjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGl4ZWxfY29vcmRfdXBwZXIpLHVfcGl4ZWxfY29vcmRfbG93ZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX2xvd2VyKSx1X3NjYWxlOm5ldyB0LlVuaWZvcm00ZihlLHIudV9zY2FsZSksdV9mYWRlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9mYWRlKSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpfX0sZmlsbDpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KX19LGZpbGxQYXR0ZXJuOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfcGl4ZWxfY29vcmRfdXBwZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX3VwcGVyKSx1X3BpeGVsX2Nvb3JkX2xvd2VyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF9sb3dlciksdV9zY2FsZTpuZXcgdC5Vbmlmb3JtNGYoZSxyLnVfc2NhbGUpLHVfZmFkZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZSl9fSxmaWxsT3V0bGluZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3dvcmxkOm5ldyB0LlVuaWZvcm0yZihlLHIudV93b3JsZCl9fSxmaWxsT3V0bGluZVBhdHRlcm46ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV93b3JsZDpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfd29ybGQpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfcGl4ZWxfY29vcmRfdXBwZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX3VwcGVyKSx1X3BpeGVsX2Nvb3JkX2xvd2VyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF9sb3dlciksdV9zY2FsZTpuZXcgdC5Vbmlmb3JtNGYoZSxyLnVfc2NhbGUpLHVfZmFkZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZSl9fSxjaXJjbGU6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSx1X3NjYWxlX3dpdGhfbWFwOm5ldyB0LlVuaWZvcm0xaShlLHIudV9zY2FsZV93aXRoX21hcCksdV9waXRjaF93aXRoX21hcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcGl0Y2hfd2l0aF9tYXApLHVfZXh0cnVkZV9zY2FsZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfZXh0cnVkZV9zY2FsZSksdV9kZXZpY2VfcGl4ZWxfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2RldmljZV9waXhlbF9yYXRpbyksdV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCl9fSxjb2xsaXNpb25Cb3g6X3IsY29sbGlzaW9uQ2lyY2xlOl9yLGRlYnVnOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfY29sb3I6bmV3IHQuVW5pZm9ybUNvbG9yKGUsci51X2NvbG9yKSx1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KX19LGNsaXBwaW5nTWFzazpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KX19LGhlYXRtYXA6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9leHRydWRlX3NjYWxlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9leHRydWRlX3NjYWxlKSx1X2ludGVuc2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfaW50ZW5zaXR5KSx1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KX19LGhlYXRtYXBUZXh0dXJlOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfd29ybGQ6bmV3IHQuVW5pZm9ybTJmKGUsci51X3dvcmxkKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV9jb2xvcl9yYW1wOm5ldyB0LlVuaWZvcm0xaShlLHIudV9jb2xvcl9yYW1wKSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpfX0saGlsbHNoYWRlOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X2xhdHJhbmdlOm5ldyB0LlVuaWZvcm0yZihlLHIudV9sYXRyYW5nZSksdV9saWdodDpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfbGlnaHQpLHVfc2hhZG93Om5ldyB0LlVuaWZvcm1Db2xvcihlLHIudV9zaGFkb3cpLHVfaGlnaGxpZ2h0Om5ldyB0LlVuaWZvcm1Db2xvcihlLHIudV9oaWdobGlnaHQpLHVfYWNjZW50Om5ldyB0LlVuaWZvcm1Db2xvcihlLHIudV9hY2NlbnQpfX0saGlsbHNoYWRlUHJlcGFyZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV9kaW1lbnNpb246bmV3IHQuVW5pZm9ybTJmKGUsci51X2RpbWVuc2lvbiksdV96b29tOm5ldyB0LlVuaWZvcm0xZihlLHIudV96b29tKSx1X21heHpvb206bmV3IHQuVW5pZm9ybTFmKGUsci51X21heHpvb20pfX0sbGluZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9yYXRpbyksdV9kZXZpY2VfcGl4ZWxfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2RldmljZV9waXhlbF9yYXRpbyksdV91bml0c190b19waXhlbHM6bmV3IHQuVW5pZm9ybTJmKGUsci51X3VuaXRzX3RvX3BpeGVscyl9fSxsaW5lR3JhZGllbnQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcmF0aW8pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfdW5pdHNfdG9fcGl4ZWxzOm5ldyB0LlVuaWZvcm0yZihlLHIudV91bml0c190b19waXhlbHMpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKX19LGxpbmVQYXR0ZXJuOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcmF0aW8pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3VuaXRzX3RvX3BpeGVsczpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdW5pdHNfdG9fcGl4ZWxzKSx1X3NjYWxlOm5ldyB0LlVuaWZvcm00ZihlLHIudV9zY2FsZSksdV9mYWRlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9mYWRlKX19LGxpbmVTREY6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcmF0aW8pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfdW5pdHNfdG9fcGl4ZWxzOm5ldyB0LlVuaWZvcm0yZihlLHIudV91bml0c190b19waXhlbHMpLHVfcGF0dGVybnNjYWxlX2E6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BhdHRlcm5zY2FsZV9hKSx1X3BhdHRlcm5zY2FsZV9iOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuc2NhbGVfYiksdV9zZGZnYW1tYTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2RmZ2FtbWEpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3RleF95X2E6bmV3IHQuVW5pZm9ybTFmKGUsci51X3RleF95X2EpLHVfdGV4X3lfYjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfdGV4X3lfYiksdV9taXg6bmV3IHQuVW5pZm9ybTFmKGUsci51X21peCl9fSxyYXN0ZXI6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV90bF9wYXJlbnQ6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RsX3BhcmVudCksdV9zY2FsZV9wYXJlbnQ6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NjYWxlX3BhcmVudCksdV9idWZmZXJfc2NhbGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X2J1ZmZlcl9zY2FsZSksdV9mYWRlX3Q6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGVfdCksdV9vcGFjaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9vcGFjaXR5KSx1X2ltYWdlMDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UwKSx1X2ltYWdlMTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UxKSx1X2JyaWdodG5lc3NfbG93Om5ldyB0LlVuaWZvcm0xZihlLHIudV9icmlnaHRuZXNzX2xvdyksdV9icmlnaHRuZXNzX2hpZ2g6bmV3IHQuVW5pZm9ybTFmKGUsci51X2JyaWdodG5lc3NfaGlnaCksdV9zYXR1cmF0aW9uX2ZhY3RvcjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2F0dXJhdGlvbl9mYWN0b3IpLHVfY29udHJhc3RfZmFjdG9yOm5ldyB0LlVuaWZvcm0xZihlLHIudV9jb250cmFzdF9mYWN0b3IpLHVfc3Bpbl93ZWlnaHRzOm5ldyB0LlVuaWZvcm0zZihlLHIudV9zcGluX3dlaWdodHMpfX0sc3ltYm9sSWNvbjpmdW5jdGlvbihlLHIpe3JldHVybnt1X2lzX3NpemVfem9vbV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSx1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSx1X3NpemVfdDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2l6ZV90KSx1X3NpemU6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemUpLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV9waXRjaDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcGl0Y2gpLHVfcm90YXRlX3N5bWJvbDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcm90YXRlX3N5bWJvbCksdV9hc3BlY3RfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2FzcGVjdF9yYXRpbyksdV9mYWRlX2NoYW5nZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZV9jaGFuZ2UpLHVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfbGFiZWxfcGxhbmVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9sYWJlbF9wbGFuZV9tYXRyaXgpLHVfY29vcmRfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9jb29yZF9tYXRyaXgpLHVfaXNfdGV4dDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfaXNfdGV4dCksdV9waXRjaF93aXRoX21hcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcGl0Y2hfd2l0aF9tYXApLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV90ZXh0dXJlOm5ldyB0LlVuaWZvcm0xaShlLHIudV90ZXh0dXJlKX19LHN5bWJvbFNERjpmdW5jdGlvbihlLHIpe3JldHVybnt1X2lzX3NpemVfem9vbV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSx1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSx1X3NpemVfdDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2l6ZV90KSx1X3NpemU6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemUpLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV9waXRjaDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcGl0Y2gpLHVfcm90YXRlX3N5bWJvbDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcm90YXRlX3N5bWJvbCksdV9hc3BlY3RfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2FzcGVjdF9yYXRpbyksdV9mYWRlX2NoYW5nZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZV9jaGFuZ2UpLHVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfbGFiZWxfcGxhbmVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9sYWJlbF9wbGFuZV9tYXRyaXgpLHVfY29vcmRfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9jb29yZF9tYXRyaXgpLHVfaXNfdGV4dDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfaXNfdGV4dCksdV9waXRjaF93aXRoX21hcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcGl0Y2hfd2l0aF9tYXApLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV90ZXh0dXJlOm5ldyB0LlVuaWZvcm0xaShlLHIudV90ZXh0dXJlKSx1X2dhbW1hX3NjYWxlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9nYW1tYV9zY2FsZSksdV9kZXZpY2VfcGl4ZWxfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2RldmljZV9waXhlbF9yYXRpbyksdV9pc19oYWxvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9pc19oYWxvKX19LGJhY2tncm91bmQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9vcGFjaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9vcGFjaXR5KSx1X2NvbG9yOm5ldyB0LlVuaWZvcm1Db2xvcihlLHIudV9jb2xvcil9fSxiYWNrZ3JvdW5kUGF0dGVybjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3BhdHRlcm5fdGxfYTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl90bF9hKSx1X3BhdHRlcm5fYnJfYTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl9icl9hKSx1X3BhdHRlcm5fdGxfYjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl90bF9iKSx1X3BhdHRlcm5fYnJfYjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl9icl9iKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfbWl4Om5ldyB0LlVuaWZvcm0xZihlLHIudV9taXgpLHVfcGF0dGVybl9zaXplX2E6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BhdHRlcm5fc2l6ZV9hKSx1X3BhdHRlcm5fc2l6ZV9iOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuX3NpemVfYiksdV9zY2FsZV9hOm5ldyB0LlVuaWZvcm0xZihlLHIudV9zY2FsZV9hKSx1X3NjYWxlX2I6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NjYWxlX2IpLHVfcGl4ZWxfY29vcmRfdXBwZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX3VwcGVyKSx1X3BpeGVsX2Nvb3JkX2xvd2VyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF9sb3dlciksdV90aWxlX3VuaXRzX3RvX3BpeGVsczpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfdGlsZV91bml0c190b19waXhlbHMpfX19O2Z1bmN0aW9uIFVyKGUscil7Zm9yKHZhciBuPWUuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnRpbGVJRC5pc0xlc3NUaGFuKGUudGlsZUlEKT8tMTplLnRpbGVJRC5pc0xlc3NUaGFuKHQudGlsZUlEKT8xOjB9KSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBpPXt9LG89blthXSxzPW4uc2xpY2UoYSsxKTtxcihvLnRpbGVJRC53cmFwcGVkKCksby50aWxlSUQscyxuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKDAsby50aWxlSUQud3JhcCsxLDAsMCwwKSxpKSxvLnNldE1hc2soaSxyKX19ZnVuY3Rpb24gcXIoZSxyLG4sYSxpKXtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9bltvXTtpZihhLmlzTGVzc1RoYW4ocy50aWxlSUQpKWJyZWFrO2lmKHIua2V5PT09cy50aWxlSUQua2V5KXJldHVybjtpZihzLnRpbGVJRC5pc0NoaWxkT2Yocikpe2Zvcih2YXIgbD1yLmNoaWxkcmVuKDEvMCksYz0wO2M8bC5sZW5ndGg7YysrKXFyKGUsbFtjXSxuLnNsaWNlKG8pLGEsaSk7cmV0dXJufX12YXIgdT1yLm92ZXJzY2FsZWRaLWUub3ZlcnNjYWxlZFosaD1uZXcgdC5DYW5vbmljYWxUaWxlSUQodSxyLmNhbm9uaWNhbC54LShlLmNhbm9uaWNhbC54PDx1KSxyLmNhbm9uaWNhbC55LShlLmNhbm9uaWNhbC55PDx1KSk7aVtoLmtleV09aVtoLmtleV18fGh9ZnVuY3Rpb24gSHIodCxlLHIsbixhKXtmb3IodmFyIGk9dC5jb250ZXh0LG89aS5nbCxzPWE/dC51c2VQcm9ncmFtKCJjb2xsaXNpb25DaXJjbGUiKTp0LnVzZVByb2dyYW0oImNvbGxpc2lvbkJveCIpLGw9MDtsPG4ubGVuZ3RoO2wrKyl7dmFyIGM9bltsXSx1PWUuZ2V0VGlsZShjKSxoPXUuZ2V0QnVja2V0KHIpO2lmKGgpe3ZhciBmPWE/aC5jb2xsaXNpb25DaXJjbGU6aC5jb2xsaXNpb25Cb3g7ZiYmcy5kcmF3KGksYT9vLlRSSUFOR0xFUzpvLkxJTkVTLE10LmRpc2FibGVkLEF0LmRpc2FibGVkLHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLEV0LmRpc2FibGVkLHdyKGMucG9zTWF0cml4LHQudHJhbnNmb3JtLHUpLHIuaWQsZi5sYXlvdXRWZXJ0ZXhCdWZmZXIsZi5pbmRleEJ1ZmZlcixmLnNlZ21lbnRzLG51bGwsdC50cmFuc2Zvcm0uem9vbSxudWxsLG51bGwsZi5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIpfX19dmFyIEdyPXQuaWRlbnRpdHkobmV3IEZsb2F0MzJBcnJheSgxNikpO2Z1bmN0aW9uIFlyKGUscixuLGEsaSxvKXt2YXIgcz10LmdldEFuY2hvckFsaWdubWVudChlKSxsPS0ocy5ob3Jpem9udGFsQWxpZ24tLjUpKnIsYz0tKHMudmVydGljYWxBbGlnbi0uNSkqbix1PXQuZXZhbHVhdGVSYWRpYWxPZmZzZXQoZSxhKTtyZXR1cm4gbmV3IHQuUG9pbnQoKGwvaSt1WzBdKSpvLChjL2krdVsxXSkqbyl9ZnVuY3Rpb24gV3IoZSxyLG4sYSxpLG8scyxsLGMsdSl7dmFyIGg9ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LGY9ZS50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTtmLmNsZWFyKCk7Zm9yKHZhciBwPTA7cDxoLmxlbmd0aDtwKyspe3ZhciBkPWguZ2V0KHApLGc9ZS5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiYhZC5wbGFjZWRPcmllbnRhdGlvbix2PWQuaGlkZGVufHwhZC5jcm9zc1RpbGVJRHx8Zz9udWxsOmFbZC5jcm9zc1RpbGVJRF07aWYodil7dmFyIG09bmV3IHQuUG9pbnQoZC5hbmNob3JYLGQuYW5jaG9yWSkseT1KdChtLG4/bDpzKSx4PS41K28uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS95LnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYSouNSxiPWkuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShlLnRleHRTaXplRGF0YSx1LGQpKngvdC5PTkVfRU07biYmKGIqPWUudGlsZVBpeGVsUmF0aW8vYyk7Zm9yKHZhciBfPXYud2lkdGgsdz12LmhlaWdodCxrPXYucmFkaWFsT2Zmc2V0LFQ9di50ZXh0Qm94U2NhbGUsTT1Zcih2LmFuY2hvcixfLHcsayxULGIpLEE9bj9KdChtLmFkZChNKSxzKS5wb2ludDp5LnBvaW50LmFkZChyP00ucm90YXRlKC1vLmFuZ2xlKTpNKSxTPWUuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmZC5wbGFjZWRPcmllbnRhdGlvbj09PXQuV3JpdGluZ01vZGUudmVydGljYWw/TWF0aC5QSS8yOjAsRT0wO0U8ZC5udW1HbHlwaHM7RSsrKXQuYWRkRHluYW1pY0F0dHJpYnV0ZXMoZixBLFMpfWVsc2UgaWUoZC5udW1HbHlwaHMsZil9ZS50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShmKX1mdW5jdGlvbiBYcihlKXt2YXIgcj1lLnRleHQucGxhY2VkU3ltYm9sQXJyYXksbj1lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEFycmF5O24uY2xlYXIoKTtmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIGk9ci5nZXQoYSk7aWYoaS5oaWRkZW58fCFpLnBsYWNlZE9yaWVudGF0aW9uKWllKGkubnVtR2x5cGhzLG4pO2Vsc2UgZm9yKHZhciBvPW5ldyB0LlBvaW50KGkuYW5jaG9yWCxpLmFuY2hvclkpLHM9ZS5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZpLnBsYWNlZE9yaWVudGF0aW9uPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbD9NYXRoLlBJLzI6MCxsPTA7bDxpLm51bUdseXBocztsKyspdC5hZGREeW5hbWljQXR0cmlidXRlcyhuLG8scyl9ZS50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShuKX1mdW5jdGlvbiBacihlLHIsbixhLGksbyxzLGwsYyx1LGgsZixwKXtmb3IodmFyIGQsZyx2PWUuY29udGV4dCxtPXYuZ2wseT1lLnRyYW5zZm9ybSx4PSJtYXAiPT09bCxiPSJtYXAiPT09YyxfPXgmJiJwb2ludCIhPT1uLmxheW91dC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSx3PXgmJiFiJiYhXyxrPXZvaWQgMCE9PW4ubGF5b3V0LmdldCgic3ltYm9sLXNvcnQta2V5IikuY29uc3RhbnRPcigxKSxUPWUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxNdC5SZWFkT25seSksTT1uLmxheW91dC5nZXQoInRleHQtdmFyaWFibGUtYW5jaG9yIiksQT1bXSxTPTAsRT1hO1M8RS5sZW5ndGg7Uys9MSl7dmFyIEw9RVtTXSxDPXIuZ2V0VGlsZShMKSxQPUMuZ2V0QnVja2V0KG4pO2lmKFApe3ZhciBPPWk/UC50ZXh0OlAuaWNvbjtpZihPJiZPLnNlZ21lbnRzLmdldCgpLmxlbmd0aCl7dmFyIHo9Ty5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KG4uaWQpLEk9aXx8UC5zZGZJY29ucyxEPWk/UC50ZXh0U2l6ZURhdGE6UC5pY29uU2l6ZURhdGE7ZHx8KGQ9ZS51c2VQcm9ncmFtKEk/InN5bWJvbFNERiI6InN5bWJvbEljb24iLHopLGc9dC5ldmFsdWF0ZVNpemVGb3Jab29tKEQseS56b29tKSksdi5hY3RpdmVUZXh0dXJlLnNldChtLlRFWFRVUkUwKTt2YXIgUj12b2lkIDAsRj12b2lkIDAsQj12b2lkIDA7aWYoaSlGPUMuZ2x5cGhBdGxhc1RleHR1cmUsQj1tLkxJTkVBUixSPUMuZ2x5cGhBdGxhc1RleHR1cmUuc2l6ZTtlbHNle3ZhciBOPTEhPT1uLmxheW91dC5nZXQoImljb24tc2l6ZSIpLmNvbnN0YW50T3IoMCl8fFAuaWNvbnNOZWVkTGluZWFyLGo9Ynx8MCE9PXkucGl0Y2g7Rj1DLmltYWdlQXRsYXNUZXh0dXJlLEI9SXx8ZS5vcHRpb25zLnJvdGF0aW5nfHxlLm9wdGlvbnMuem9vbWluZ3x8Tnx8aj9tLkxJTkVBUjptLk5FQVJFU1QsUj1DLmltYWdlQXRsYXNUZXh0dXJlLnNpemV9dmFyIFY9Y2UoQywxLGUudHJhbnNmb3JtLnpvb20pLFU9WHQoTC5wb3NNYXRyaXgsYix4LGUudHJhbnNmb3JtLFYpLHE9WnQoTC5wb3NNYXRyaXgsYix4LGUudHJhbnNmb3JtLFYpO2lmKF8pUXQoUCxMLnBvc01hdHJpeCxlLGksVSxxLGIsdSk7ZWxzZSBpZihpJiZnJiZNKXt2YXIgSD1NYXRoLnBvdygyLHkuem9vbS1DLnRpbGVJRC5vdmVyc2NhbGVkWik7V3IoUCx4LGIscCx0LnN5bWJvbFNpemUseSxVLEwucG9zTWF0cml4LEgsZyl9ZWxzZSBpJiZnJiZQLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJlhyKFApO3ZhciBHPWUudHJhbnNsYXRlUG9zTWF0cml4KEwucG9zTWF0cml4LEMsbyxzKSxZPV98fGkmJk0/R3I6VSxXPWUudHJhbnNsYXRlUG9zTWF0cml4KHEsQyxvLHMsITApLFg9SSYmMCE9PW4ucGFpbnQuZ2V0KGk/InRleHQtaGFsby13aWR0aCI6Imljb24taGFsby13aWR0aCIpLmNvbnN0YW50T3IoMSksWj17cHJvZ3JhbTpkLGJ1ZmZlcnM6Tyx1bmlmb3JtVmFsdWVzOkk/QnIoRC5raW5kLGcsdyxiLGUsRyxZLFcsaSxSLCEwKTpGcihELmtpbmQsZyx3LGIsZSxHLFksVyxpLFIpLGF0bGFzVGV4dHVyZTpGLGF0bGFzSW50ZXJwb2xhdGlvbjpCLGlzU0RGOkksaGFzSGFsbzpYfTtpZihrKWZvcih2YXIgSj0wLEs9Ty5zZWdtZW50cy5nZXQoKTtKPEsubGVuZ3RoO0orPTEpe3ZhciBRPUtbSl07QS5wdXNoKHtzZWdtZW50czpuZXcgdC5TZWdtZW50VmVjdG9yKFtRXSksc29ydEtleTpRLnNvcnRLZXksc3RhdGU6Wn0pfWVsc2UgQS5wdXNoKHtzZWdtZW50czpPLnNlZ21lbnRzLHNvcnRLZXk6MCxzdGF0ZTpafSl9fX1rJiZBLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pO2Zvcih2YXIgJD0wLHR0PUE7JDx0dC5sZW5ndGg7JCs9MSl7dmFyIGV0PXR0WyRdLHJ0PWV0LnN0YXRlO2lmKHJ0LmF0bGFzVGV4dHVyZS5iaW5kKHJ0LmF0bGFzSW50ZXJwb2xhdGlvbixtLkNMQU1QX1RPX0VER0UpLHJ0LmlzU0RGKXt2YXIgbnQ9cnQudW5pZm9ybVZhbHVlcztydC5oYXNIYWxvJiYobnQudV9pc19oYWxvPTEsSnIocnQuYnVmZmVycyxldC5zZWdtZW50cyxuLGUscnQucHJvZ3JhbSxULGgsZixudCkpLG50LnVfaXNfaGFsbz0wfUpyKHJ0LmJ1ZmZlcnMsZXQuc2VnbWVudHMsbixlLHJ0LnByb2dyYW0sVCxoLGYscnQudW5pZm9ybVZhbHVlcyl9fWZ1bmN0aW9uIEpyKHQsZSxyLG4sYSxpLG8scyxsKXt2YXIgYz1uLmNvbnRleHQsdT1jLmdsO2EuZHJhdyhjLHUuVFJJQU5HTEVTLGksbyxzLEV0LmRpc2FibGVkLGwsci5pZCx0LmxheW91dFZlcnRleEJ1ZmZlcix0LmluZGV4QnVmZmVyLGUsci5wYWludCxuLnRyYW5zZm9ybS56b29tLHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSx0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIsdC5vcGFjaXR5VmVydGV4QnVmZmVyKX1mdW5jdGlvbiBLcih0LGUscixuLGEsaSxvKXt2YXIgcyxsLGMsdSxoLGY9dC5jb250ZXh0LmdsLHA9ci5wYWludC5nZXQoImZpbGwtcGF0dGVybiIpLGQ9cCYmcC5jb25zdGFudE9yKDEpLGc9ci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk7bz8obD1kJiYhci5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT8iZmlsbE91dGxpbmVQYXR0ZXJuIjoiZmlsbE91dGxpbmUiLHM9Zi5MSU5FUyk6KGw9ZD8iZmlsbFBhdHRlcm4iOiJmaWxsIixzPWYuVFJJQU5HTEVTKTtmb3IodmFyIHY9MCxtPW47djxtLmxlbmd0aDt2Kz0xKXt2YXIgeT1tW3ZdLHg9ZS5nZXRUaWxlKHkpO2lmKCFkfHx4LnBhdHRlcm5zTG9hZGVkKCkpe3ZhciBiPXguZ2V0QnVja2V0KHIpO2lmKGIpe3ZhciBfPWIucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSx3PXQudXNlUHJvZ3JhbShsLF8pO2QmJih0LmNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZi5URVhUVVJFMCkseC5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKGYuTElORUFSLGYuQ0xBTVBfVE9fRURHRSksXy51cGRhdGVQYXR0ZXJuUGFpbnRCdWZmZXJzKGcpKTt2YXIgaz1wLmNvbnN0YW50T3IobnVsbCk7aWYoayYmeC5pbWFnZUF0bGFzKXt2YXIgVD14LmltYWdlQXRsYXMucGF0dGVyblBvc2l0aW9uc1trLnRvXSxNPXguaW1hZ2VBdGxhcy5wYXR0ZXJuUG9zaXRpb25zW2suZnJvbV07VCYmTSYmXy5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMoVCxNKX12YXIgQT10LnRyYW5zbGF0ZVBvc01hdHJpeCh5LnBvc01hdHJpeCx4LHIucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZSIpLHIucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiKSk7aWYobyl7dT1iLmluZGV4QnVmZmVyMixoPWIuc2VnbWVudHMyO3ZhciBTPVtmLmRyYXdpbmdCdWZmZXJXaWR0aCxmLmRyYXdpbmdCdWZmZXJIZWlnaHRdO2M9ImZpbGxPdXRsaW5lUGF0dGVybiI9PT1sJiZkP3hyKEEsdCxnLHgsUyk6eXIoQSxTKX1lbHNlIHU9Yi5pbmRleEJ1ZmZlcixoPWIuc2VnbWVudHMsYz1kP21yKEEsdCxnLHgpOnZyKEEpO3cuZHJhdyh0LmNvbnRleHQscyxhLHQuc3RlbmNpbE1vZGVGb3JDbGlwcGluZyh5KSxpLEV0LmRpc2FibGVkLGMsci5pZCxiLmxheW91dFZlcnRleEJ1ZmZlcix1LGgsci5wYWludCx0LnRyYW5zZm9ybS56b29tLF8pfX19fWZ1bmN0aW9uIFFyKHQsZSxyLG4sYSxpLG8pe2Zvcih2YXIgcz10LmNvbnRleHQsbD1zLmdsLGM9ci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iKSx1PWMuY29uc3RhbnRPcigxKSxoPXIuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpLGY9ci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiKSxwPTAsZD1uO3A8ZC5sZW5ndGg7cCs9MSl7dmFyIGc9ZFtwXSx2PWUuZ2V0VGlsZShnKSxtPXYuZ2V0QnVja2V0KHIpO2lmKG0pe3ZhciB5PW0ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSx4PXQudXNlUHJvZ3JhbSh1PyJmaWxsRXh0cnVzaW9uUGF0dGVybiI6ImZpbGxFeHRydXNpb24iLHkpO3UmJih0LmNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQobC5URVhUVVJFMCksdi5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKGwuTElORUFSLGwuQ0xBTVBfVE9fRURHRSkseS51cGRhdGVQYXR0ZXJuUGFpbnRCdWZmZXJzKGgpKTt2YXIgYj1jLmNvbnN0YW50T3IobnVsbCk7aWYoYiYmdi5pbWFnZUF0bGFzKXt2YXIgXz12LmltYWdlQXRsYXMucGF0dGVyblBvc2l0aW9uc1tiLnRvXSx3PXYuaW1hZ2VBdGxhcy5wYXR0ZXJuUG9zaXRpb25zW2IuZnJvbV07XyYmdyYmeS5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMoXyx3KX12YXIgaz10LnRyYW5zbGF0ZVBvc01hdHJpeChnLnBvc01hdHJpeCx2LHIucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiKSxyLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciIpKSxUPXIucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCIpLE09dT9ncihrLHQsVCxmLGcsaCx2KTpkcihrLHQsVCxmKTt4LmRyYXcocyxzLmdsLlRSSUFOR0xFUyxhLGksbyxFdC5iYWNrQ0NXLE0sci5pZCxtLmxheW91dFZlcnRleEJ1ZmZlcixtLmluZGV4QnVmZmVyLG0uc2VnbWVudHMsci5wYWludCx0LnRyYW5zZm9ybS56b29tLHkpfX19ZnVuY3Rpb24gJHIodCxlLHIsbixhLGkpe3ZhciBvPXQuY29udGV4dCxzPW8uZ2wsbD1lLmZibztpZihsKXt2YXIgYz10LnVzZVByb2dyYW0oImhpbGxzaGFkZSIpO28uYWN0aXZlVGV4dHVyZS5zZXQocy5URVhUVVJFMCkscy5iaW5kVGV4dHVyZShzLlRFWFRVUkVfMkQsbC5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpO3ZhciB1PUFyKHQsZSxyKTtlLm1hc2tlZEJvdW5kc0J1ZmZlciYmZS5tYXNrZWRJbmRleEJ1ZmZlciYmZS5zZWdtZW50cz9jLmRyYXcobyxzLlRSSUFOR0xFUyxuLGEsaSxFdC5kaXNhYmxlZCx1LHIuaWQsZS5tYXNrZWRCb3VuZHNCdWZmZXIsZS5tYXNrZWRJbmRleEJ1ZmZlcixlLnNlZ21lbnRzKTpjLmRyYXcobyxzLlRSSUFOR0xFUyxuLGEsaSxFdC5kaXNhYmxlZCx1LHIuaWQsdC5yYXN0ZXJCb3VuZHNCdWZmZXIsdC5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcix0LnJhc3RlckJvdW5kc1NlZ21lbnRzKX19ZnVuY3Rpb24gdG4oZSxyLG4sYSxpLG8scyl7dmFyIGw9ZS5jb250ZXh0LGM9bC5nbDtpZihyLmRlbSYmci5kZW0uZGF0YSl7dmFyIHU9ci5kZW0uZGltLGg9ci5kZW0uc3RyaWRlLGY9ci5kZW0uZ2V0UGl4ZWxzKCk7aWYobC5hY3RpdmVUZXh0dXJlLnNldChjLlRFWFRVUkUxKSxsLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldCghMSksci5kZW1UZXh0dXJlPXIuZGVtVGV4dHVyZXx8ZS5nZXRUaWxlVGV4dHVyZShoKSxyLmRlbVRleHR1cmUpe3ZhciBwPXIuZGVtVGV4dHVyZTtwLnVwZGF0ZShmLHtwcmVtdWx0aXBseTohMX0pLHAuYmluZChjLk5FQVJFU1QsYy5DTEFNUF9UT19FREdFKX1lbHNlIHIuZGVtVGV4dHVyZT1uZXcgdC5UZXh0dXJlKGwsZixjLlJHQkEse3ByZW11bHRpcGx5OiExfSksci5kZW1UZXh0dXJlLmJpbmQoYy5ORUFSRVNULGMuQ0xBTVBfVE9fRURHRSk7bC5hY3RpdmVUZXh0dXJlLnNldChjLlRFWFRVUkUwKTt2YXIgZD1yLmZibztpZighZCl7dmFyIGc9bmV3IHQuVGV4dHVyZShsLHt3aWR0aDp1LGhlaWdodDp1LGRhdGE6bnVsbH0sYy5SR0JBKTtnLmJpbmQoYy5MSU5FQVIsYy5DTEFNUF9UT19FREdFKSwoZD1yLmZibz1sLmNyZWF0ZUZyYW1lYnVmZmVyKHUsdSkpLmNvbG9yQXR0YWNobWVudC5zZXQoZy50ZXh0dXJlKX1sLmJpbmRGcmFtZWJ1ZmZlci5zZXQoZC5mcmFtZWJ1ZmZlciksbC52aWV3cG9ydC5zZXQoWzAsMCx1LHVdKSxlLnVzZVByb2dyYW0oImhpbGxzaGFkZVByZXBhcmUiKS5kcmF3KGwsYy5UUklBTkdMRVMsaSxvLHMsRXQuZGlzYWJsZWQsU3IocixhKSxuLmlkLGUucmFzdGVyQm91bmRzQnVmZmVyLGUucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsZS5yYXN0ZXJCb3VuZHNTZWdtZW50cyksci5uZWVkc0hpbGxzaGFkZVByZXBhcmU9ITF9fWZ1bmN0aW9uIGVuKGUscixuLGEsaSl7dmFyIG89YS5wYWludC5nZXQoInJhc3Rlci1mYWRlLWR1cmF0aW9uIik7aWYobz4wKXt2YXIgcz10LmJyb3dzZXIubm93KCksbD0ocy1lLnRpbWVBZGRlZCkvbyxjPXI/KHMtci50aW1lQWRkZWQpL286LTEsdT1uLmdldFNvdXJjZSgpLGg9aS5jb3ZlcmluZ1pvb21MZXZlbCh7dGlsZVNpemU6dS50aWxlU2l6ZSxyb3VuZFpvb206dS5yb3VuZFpvb219KSxmPSFyfHxNYXRoLmFicyhyLnRpbGVJRC5vdmVyc2NhbGVkWi1oKT5NYXRoLmFicyhlLnRpbGVJRC5vdmVyc2NhbGVkWi1oKSxwPWYmJmUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24/MTp0LmNsYW1wKGY/bDoxLWMsMCwxKTtyZXR1cm4gZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbiYmbD49MSYmKGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb249ITEpLHI/e29wYWNpdHk6MSxtaXg6MS1wfTp7b3BhY2l0eTpwLG1peDowfX1yZXR1cm57b3BhY2l0eToxLG1peDowfX1mdW5jdGlvbiBybihlLHIsbil7dmFyIGE9ZS5jb250ZXh0LGk9YS5nbCxvPW4ucG9zTWF0cml4LHM9ZS51c2VQcm9ncmFtKCJkZWJ1ZyIpLGw9TXQuZGlzYWJsZWQsYz1BdC5kaXNhYmxlZCx1PWUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGg9IiRkZWJ1ZyI7cy5kcmF3KGEsaS5MSU5FX1NUUklQLGwsYyx1LEV0LmRpc2FibGVkLGtyKG8sdC5Db2xvci5yZWQpLGgsZS5kZWJ1Z0J1ZmZlcixlLnRpbGVCb3JkZXJJbmRleEJ1ZmZlcixlLmRlYnVnU2VnbWVudHMpO2Zvcih2YXIgZj1yLmdldFRpbGVCeUlEKG4ua2V5KS5sYXRlc3RSYXdUaWxlRGF0YSxwPWYmJmYuYnl0ZUxlbmd0aHx8MCxkPU1hdGguZmxvb3IocC8xMDI0KSxnPXIuZ2V0VGlsZShuKS50aWxlU2l6ZSx2PTUxMi9NYXRoLm1pbihnLDUxMiksbT1mdW5jdGlvbih0LGUscixuKXtuPW58fDE7dmFyIGEsaSxvLHMsbCxjLHUsaCxmPVtdO2ZvcihhPTAsaT10Lmxlbmd0aDthPGk7YSsrKWlmKGw9bm5bdFthXV0pe2ZvcihoPW51bGwsbz0wLHM9bFsxXS5sZW5ndGg7bzxzO28rPTIpLTE9PT1sWzFdW29dJiYtMT09PWxbMV1bbysxXT9oPW51bGw6KGM9ZStsWzFdW29dKm4sdT1yLWxbMV1bbysxXSpuLGgmJmYucHVzaChoLngsaC55LGMsdSksaD17eDpjLHk6dX0pO2UrPWxbMF0qbn1yZXR1cm4gZn0obi50b1N0cmluZygpKyIgIitkKyJrYiIsNTAsMjAwKnYsNSp2KSx5PW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0Mmk0LHg9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQydWk0LGI9MDtiPG0ubGVuZ3RoO2IrPTIpeS5lbXBsYWNlQmFjayhtW2JdLG1bYisxXSkseC5lbXBsYWNlQmFjayhiLGIrMSk7Zm9yKHZhciBfPWEuY3JlYXRlVmVydGV4QnVmZmVyKHksRmUubWVtYmVycyksdz1hLmNyZWF0ZUluZGV4QnVmZmVyKHgpLGs9dC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwwLHkubGVuZ3RoLzIseS5sZW5ndGgvMiksVD10LkVYVEVOVC8oTWF0aC5wb3coMixlLnRyYW5zZm9ybS56b29tLW4ub3ZlcnNjYWxlZFopKmcqdiksTT1bXSxBPS0xO0E8PTE7QSsrKWZvcih2YXIgUz0tMTtTPD0xJiYoMCE9PUF8fDAhPT1TKTtTKyspTS5wdXNoKFtBLFNdKTtmb3IodmFyIEU9MDtFPE0ubGVuZ3RoO0UrKyl7dmFyIEw9TVtFXTtzLmRyYXcoYSxpLkxJTkVTLGwsYyx1LEV0LmRpc2FibGVkLGtyKHQudHJhbnNsYXRlKFtdLG8sW1QqTFswXSxUKkxbMV0sMF0pLHQuQ29sb3Iud2hpdGUpLGgsXyx3LGspfXMuZHJhdyhhLGkuTElORVMsbCxjLHUsRXQuZGlzYWJsZWQsa3Iobyx0LkNvbG9yLmJsYWNrKSxoLF8sdyxrKX12YXIgbm49eyIgIjpbMTYsW11dLCIhIjpbMTAsWzUsMjEsNSw3LC0xLC0xLDUsMiw0LDEsNSwwLDYsMSw1LDJdXSwnIic6WzE2LFs0LDIxLDQsMTQsLTEsLTEsMTIsMjEsMTIsMTRdXSwiIyI6WzIxLFsxMSwyNSw0LC03LC0xLC0xLDE3LDI1LDEwLC03LC0xLC0xLDQsMTIsMTgsMTIsLTEsLTEsMyw2LDE3LDZdXSwkOlsyMCxbOCwyNSw4LC00LC0xLC0xLDEyLDI1LDEyLC00LC0xLC0xLDE3LDE4LDE1LDIwLDEyLDIxLDgsMjEsNSwyMCwzLDE4LDMsMTYsNCwxNCw1LDEzLDcsMTIsMTMsMTAsMTUsOSwxNiw4LDE3LDYsMTcsMywxNSwxLDEyLDAsOCwwLDUsMSwzLDNdXSwiJSI6WzI0LFsyMSwyMSwzLDAsLTEsLTEsOCwyMSwxMCwxOSwxMCwxNyw5LDE1LDcsMTQsNSwxNCwzLDE2LDMsMTgsNCwyMCw2LDIxLDgsMjEsMTAsMjAsMTMsMTksMTYsMTksMTksMjAsMjEsMjEsLTEsLTEsMTcsNywxNSw2LDE0LDQsMTQsMiwxNiwwLDE4LDAsMjAsMSwyMSwzLDIxLDUsMTksNywxNyw3XV0sIiYiOlsyNixbMjMsMTIsMjMsMTMsMjIsMTQsMjEsMTQsMjAsMTMsMTksMTEsMTcsNiwxNSwzLDEzLDEsMTEsMCw3LDAsNSwxLDQsMiwzLDQsMyw2LDQsOCw1LDksMTIsMTMsMTMsMTQsMTQsMTYsMTQsMTgsMTMsMjAsMTEsMjEsOSwyMCw4LDE4LDgsMTYsOSwxMywxMSwxMCwxNiwzLDE4LDEsMjAsMCwyMiwwLDIzLDEsMjMsMl1dLCInIjpbMTAsWzUsMTksNCwyMCw1LDIxLDYsMjAsNiwxOCw1LDE2LDQsMTVdXSwiKCI6WzE0LFsxMSwyNSw5LDIzLDcsMjAsNSwxNiw0LDExLDQsNyw1LDIsNywtMiw5LC01LDExLC03XV0sIikiOlsxNCxbMywyNSw1LDIzLDcsMjAsOSwxNiwxMCwxMSwxMCw3LDksMiw3LC0yLDUsLTUsMywtN11dLCIqIjpbMTYsWzgsMjEsOCw5LC0xLC0xLDMsMTgsMTMsMTIsLTEsLTEsMTMsMTgsMywxMl1dLCIrIjpbMjYsWzEzLDE4LDEzLDAsLTEsLTEsNCw5LDIyLDldXSwiLCI6WzEwLFs2LDEsNSwwLDQsMSw1LDIsNiwxLDYsLTEsNSwtMyw0LC00XV0sIi0iOlsyNixbNCw5LDIyLDldXSwiLiI6WzEwLFs1LDIsNCwxLDUsMCw2LDEsNSwyXV0sIi8iOlsyMixbMjAsMjUsMiwtN11dLDA6WzIwLFs5LDIxLDYsMjAsNCwxNywzLDEyLDMsOSw0LDQsNiwxLDksMCwxMSwwLDE0LDEsMTYsNCwxNyw5LDE3LDEyLDE2LDE3LDE0LDIwLDExLDIxLDksMjFdXSwxOlsyMCxbNiwxNyw4LDE4LDExLDIxLDExLDBdXSwyOlsyMCxbNCwxNiw0LDE3LDUsMTksNiwyMCw4LDIxLDEyLDIxLDE0LDIwLDE1LDE5LDE2LDE3LDE2LDE1LDE1LDEzLDEzLDEwLDMsMCwxNywwXV0sMzpbMjAsWzUsMjEsMTYsMjEsMTAsMTMsMTMsMTMsMTUsMTIsMTYsMTEsMTcsOCwxNyw2LDE2LDMsMTQsMSwxMSwwLDgsMCw1LDEsNCwyLDMsNF1dLDQ6WzIwLFsxMywyMSwzLDcsMTgsNywtMSwtMSwxMywyMSwxMywwXV0sNTpbMjAsWzE1LDIxLDUsMjEsNCwxMiw1LDEzLDgsMTQsMTEsMTQsMTQsMTMsMTYsMTEsMTcsOCwxNyw2LDE2LDMsMTQsMSwxMSwwLDgsMCw1LDEsNCwyLDMsNF1dLDY6WzIwLFsxNiwxOCwxNSwyMCwxMiwyMSwxMCwyMSw3LDIwLDUsMTcsNCwxMiw0LDcsNSwzLDcsMSwxMCwwLDExLDAsMTQsMSwxNiwzLDE3LDYsMTcsNywxNiwxMCwxNCwxMiwxMSwxMywxMCwxMyw3LDEyLDUsMTAsNCw3XV0sNzpbMjAsWzE3LDIxLDcsMCwtMSwtMSwzLDIxLDE3LDIxXV0sODpbMjAsWzgsMjEsNSwyMCw0LDE4LDQsMTYsNSwxNCw3LDEzLDExLDEyLDE0LDExLDE2LDksMTcsNywxNyw0LDE2LDIsMTUsMSwxMiwwLDgsMCw1LDEsNCwyLDMsNCwzLDcsNCw5LDYsMTEsOSwxMiwxMywxMywxNSwxNCwxNiwxNiwxNiwxOCwxNSwyMCwxMiwyMSw4LDIxXV0sOTpbMjAsWzE2LDE0LDE1LDExLDEzLDksMTAsOCw5LDgsNiw5LDQsMTEsMywxNCwzLDE1LDQsMTgsNiwyMCw5LDIxLDEwLDIxLDEzLDIwLDE1LDE4LDE2LDE0LDE2LDksMTUsNCwxMywxLDEwLDAsOCwwLDUsMSw0LDNdXSwiOiI6WzEwLFs1LDE0LDQsMTMsNSwxMiw2LDEzLDUsMTQsLTEsLTEsNSwyLDQsMSw1LDAsNiwxLDUsMl1dLCI7IjpbMTAsWzUsMTQsNCwxMyw1LDEyLDYsMTMsNSwxNCwtMSwtMSw2LDEsNSwwLDQsMSw1LDIsNiwxLDYsLTEsNSwtMyw0LC00XV0sIjwiOlsyNCxbMjAsMTgsNCw5LDIwLDBdXSwiPSI6WzI2LFs0LDEyLDIyLDEyLC0xLC0xLDQsNiwyMiw2XV0sIj4iOlsyNCxbNCwxOCwyMCw5LDQsMF1dLCI/IjpbMTgsWzMsMTYsMywxNyw0LDE5LDUsMjAsNywyMSwxMSwyMSwxMywyMCwxNCwxOSwxNSwxNywxNSwxNSwxNCwxMywxMywxMiw5LDEwLDksNywtMSwtMSw5LDIsOCwxLDksMCwxMCwxLDksMl1dLCJAIjpbMjcsWzE4LDEzLDE3LDE1LDE1LDE2LDEyLDE2LDEwLDE1LDksMTQsOCwxMSw4LDgsOSw2LDExLDUsMTQsNSwxNiw2LDE3LDgsLTEsLTEsMTIsMTYsMTAsMTQsOSwxMSw5LDgsMTAsNiwxMSw1LC0xLC0xLDE4LDE2LDE3LDgsMTcsNiwxOSw1LDIxLDUsMjMsNywyNCwxMCwyNCwxMiwyMywxNSwyMiwxNywyMCwxOSwxOCwyMCwxNSwyMSwxMiwyMSw5LDIwLDcsMTksNSwxNyw0LDE1LDMsMTIsMyw5LDQsNiw1LDQsNywyLDksMSwxMiwwLDE1LDAsMTgsMSwyMCwyLDIxLDMsLTEsLTEsMTksMTYsMTgsOCwxOCw2LDE5LDVdXSxBOlsxOCxbOSwyMSwxLDAsLTEsLTEsOSwyMSwxNywwLC0xLC0xLDQsNywxNCw3XV0sQjpbMjEsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTMsMjEsMTYsMjAsMTcsMTksMTgsMTcsMTgsMTUsMTcsMTMsMTYsMTIsMTMsMTEsLTEsLTEsNCwxMSwxMywxMSwxNiwxMCwxNyw5LDE4LDcsMTgsNCwxNywyLDE2LDEsMTMsMCw0LDBdXSxDOlsyMSxbMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNV1dLEQ6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDExLDIxLDE0LDIwLDE2LDE4LDE3LDE2LDE4LDEzLDE4LDgsMTcsNSwxNiwzLDE0LDEsMTEsMCw0LDBdXSxFOlsxOSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxNywyMSwtMSwtMSw0LDExLDEyLDExLC0xLC0xLDQsMCwxNywwXV0sRjpbMTgsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTcsMjEsLTEsLTEsNCwxMSwxMiwxMV1dLEc6WzIxLFsxOCwxNiwxNywxOCwxNSwyMCwxMywyMSw5LDIxLDcsMjAsNSwxOCw0LDE2LDMsMTMsMyw4LDQsNSw1LDMsNywxLDksMCwxMywwLDE1LDEsMTcsMywxOCw1LDE4LDgsLTEsLTEsMTMsOCwxOCw4XV0sSDpbMjIsWzQsMjEsNCwwLC0xLC0xLDE4LDIxLDE4LDAsLTEsLTEsNCwxMSwxOCwxMV1dLEk6WzgsWzQsMjEsNCwwXV0sSjpbMTYsWzEyLDIxLDEyLDUsMTEsMiwxMCwxLDgsMCw2LDAsNCwxLDMsMiwyLDUsMiw3XV0sSzpbMjEsWzQsMjEsNCwwLC0xLC0xLDE4LDIxLDQsNywtMSwtMSw5LDEyLDE4LDBdXSxMOlsxNyxbNCwyMSw0LDAsLTEsLTEsNCwwLDE2LDBdXSxNOlsyNCxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMiwwLC0xLC0xLDIwLDIxLDEyLDAsLTEsLTEsMjAsMjEsMjAsMF1dLE46WzIyLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDE4LDAsLTEsLTEsMTgsMjEsMTgsMF1dLE86WzIyLFs5LDIxLDcsMjAsNSwxOCw0LDE2LDMsMTMsMyw4LDQsNSw1LDMsNywxLDksMCwxMywwLDE1LDEsMTcsMywxOCw1LDE5LDgsMTksMTMsMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMV1dLFA6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE0LDE3LDEyLDE2LDExLDEzLDEwLDQsMTBdXSxROlsyMixbOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOSw4LDE5LDEzLDE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjEsLTEsLTEsMTIsNCwxOCwtMl1dLFI6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE1LDE3LDEzLDE2LDEyLDEzLDExLDQsMTEsLTEsLTEsMTEsMTEsMTgsMF1dLFM6WzIwLFsxNywxOCwxNSwyMCwxMiwyMSw4LDIxLDUsMjAsMywxOCwzLDE2LDQsMTQsNSwxMyw3LDEyLDEzLDEwLDE1LDksMTYsOCwxNyw2LDE3LDMsMTUsMSwxMiwwLDgsMCw1LDEsMywzXV0sVDpbMTYsWzgsMjEsOCwwLC0xLC0xLDEsMjEsMTUsMjFdXSxVOlsyMixbNCwyMSw0LDYsNSwzLDcsMSwxMCwwLDEyLDAsMTUsMSwxNywzLDE4LDYsMTgsMjFdXSxWOlsxOCxbMSwyMSw5LDAsLTEsLTEsMTcsMjEsOSwwXV0sVzpbMjQsWzIsMjEsNywwLC0xLC0xLDEyLDIxLDcsMCwtMSwtMSwxMiwyMSwxNywwLC0xLC0xLDIyLDIxLDE3LDBdXSxYOlsyMCxbMywyMSwxNywwLC0xLC0xLDE3LDIxLDMsMF1dLFk6WzE4LFsxLDIxLDksMTEsOSwwLC0xLC0xLDE3LDIxLDksMTFdXSxaOlsyMCxbMTcsMjEsMywwLC0xLC0xLDMsMjEsMTcsMjEsLTEsLTEsMywwLDE3LDBdXSwiWyI6WzE0LFs0LDI1LDQsLTcsLTEsLTEsNSwyNSw1LC03LC0xLC0xLDQsMjUsMTEsMjUsLTEsLTEsNCwtNywxMSwtN11dLCJcXCI6WzE0LFswLDIxLDE0LC0zXV0sIl0iOlsxNCxbOSwyNSw5LC03LC0xLC0xLDEwLDI1LDEwLC03LC0xLC0xLDMsMjUsMTAsMjUsLTEsLTEsMywtNywxMCwtN11dLCJeIjpbMTYsWzYsMTUsOCwxOCwxMCwxNSwtMSwtMSwzLDEyLDgsMTcsMTMsMTIsLTEsLTEsOCwxNyw4LDBdXSxfOlsxNixbMCwtMiwxNiwtMl1dLCJgIjpbMTAsWzYsMjEsNSwyMCw0LDE4LDQsMTYsNSwxNSw2LDE2LDUsMTddXSxhOlsxOSxbMTUsMTQsMTUsMCwtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sYjpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMTEsNiwxMyw4LDE0LDExLDE0LDEzLDEzLDE1LDExLDE2LDgsMTYsNiwxNSwzLDEzLDEsMTEsMCw4LDAsNiwxLDQsM11dLGM6WzE4LFsxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sZDpbMTksWzE1LDIxLDE1LDAsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGU6WzE4LFszLDgsMTUsOCwxNSwxMCwxNCwxMiwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0sZjpbMTIsWzEwLDIxLDgsMjEsNiwyMCw1LDE3LDUsMCwtMSwtMSwyLDE0LDksMTRdXSxnOlsxOSxbMTUsMTQsMTUsLTIsMTQsLTUsMTMsLTYsMTEsLTcsOCwtNyw2LC02LC0xLC0xLDE1LDExLDEzLDEzLDExLDE0LDgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDNdXSxoOlsxOSxbNCwyMSw0LDAsLTEsLTEsNCwxMCw3LDEzLDksMTQsMTIsMTQsMTQsMTMsMTUsMTAsMTUsMF1dLGk6WzgsWzMsMjEsNCwyMCw1LDIxLDQsMjIsMywyMSwtMSwtMSw0LDE0LDQsMF1dLGo6WzEwLFs1LDIxLDYsMjAsNywyMSw2LDIyLDUsMjEsLTEsLTEsNiwxNCw2LC0zLDUsLTYsMywtNywxLC03XV0sazpbMTcsWzQsMjEsNCwwLC0xLC0xLDE0LDE0LDQsNCwtMSwtMSw4LDgsMTUsMF1dLGw6WzgsWzQsMjEsNCwwXV0sbTpbMzAsWzQsMTQsNCwwLC0xLC0xLDQsMTAsNywxMyw5LDE0LDEyLDE0LDE0LDEzLDE1LDEwLDE1LDAsLTEsLTEsMTUsMTAsMTgsMTMsMjAsMTQsMjMsMTQsMjUsMTMsMjYsMTAsMjYsMF1dLG46WzE5LFs0LDE0LDQsMCwtMSwtMSw0LDEwLDcsMTMsOSwxNCwxMiwxNCwxNCwxMywxNSwxMCwxNSwwXV0sbzpbMTksWzgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDMsMTYsNiwxNiw4LDE1LDExLDEzLDEzLDExLDE0LDgsMTRdXSxwOlsxOSxbNCwxNCw0LC03LC0xLC0xLDQsMTEsNiwxMyw4LDE0LDExLDE0LDEzLDEzLDE1LDExLDE2LDgsMTYsNiwxNSwzLDEzLDEsMTEsMCw4LDAsNiwxLDQsM11dLHE6WzE5LFsxNSwxNCwxNSwtNywtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0scjpbMTMsWzQsMTQsNCwwLC0xLC0xLDQsOCw1LDExLDcsMTMsOSwxNCwxMiwxNF1dLHM6WzE3LFsxNCwxMSwxMywxMywxMCwxNCw3LDE0LDQsMTMsMywxMSw0LDksNiw4LDExLDcsMTMsNiwxNCw0LDE0LDMsMTMsMSwxMCwwLDcsMCw0LDEsMywzXV0sdDpbMTIsWzUsMjEsNSw0LDYsMSw4LDAsMTAsMCwtMSwtMSwyLDE0LDksMTRdXSx1OlsxOSxbNCwxNCw0LDQsNSwxLDcsMCwxMCwwLDEyLDEsMTUsNCwtMSwtMSwxNSwxNCwxNSwwXV0sdjpbMTYsWzIsMTQsOCwwLC0xLC0xLDE0LDE0LDgsMF1dLHc6WzIyLFszLDE0LDcsMCwtMSwtMSwxMSwxNCw3LDAsLTEsLTEsMTEsMTQsMTUsMCwtMSwtMSwxOSwxNCwxNSwwXV0seDpbMTcsWzMsMTQsMTQsMCwtMSwtMSwxNCwxNCwzLDBdXSx5OlsxNixbMiwxNCw4LDAsLTEsLTEsMTQsMTQsOCwwLDYsLTQsNCwtNiwyLC03LDEsLTddXSx6OlsxNyxbMTQsMTQsMywwLC0xLC0xLDMsMTQsMTQsMTQsLTEsLTEsMywwLDE0LDBdXSwieyI6WzE0LFs5LDI1LDcsMjQsNiwyMyw1LDIxLDUsMTksNiwxNyw3LDE2LDgsMTQsOCwxMiw2LDEwLC0xLC0xLDcsMjQsNiwyMiw2LDIwLDcsMTgsOCwxNyw5LDE1LDksMTMsOCwxMSw0LDksOCw3LDksNSw5LDMsOCwxLDcsMCw2LC0yLDYsLTQsNywtNiwtMSwtMSw2LDgsOCw2LDgsNCw3LDIsNiwxLDUsLTEsNSwtMyw2LC01LDcsLTYsOSwtN11dLCJ8IjpbOCxbNCwyNSw0LC03XV0sIn0iOlsxNCxbNSwyNSw3LDI0LDgsMjMsOSwyMSw5LDE5LDgsMTcsNywxNiw2LDE0LDYsMTIsOCwxMCwtMSwtMSw3LDI0LDgsMjIsOCwyMCw3LDE4LDYsMTcsNSwxNSw1LDEzLDYsMTEsMTAsOSw2LDcsNSw1LDUsMyw2LDEsNywwLDgsLTIsOCwtNCw3LC02LC0xLC0xLDgsOCw2LDYsNiw0LDcsMiw4LDEsOSwtMSw5LC0zLDgsLTUsNywtNiw1LC03XV0sIn4iOlsyNCxbMyw2LDMsOCw0LDExLDYsMTIsOCwxMiwxMCwxMSwxNCw4LDE2LDcsMTgsNywyMCw4LDIxLDEwLC0xLC0xLDMsOCw0LDEwLDYsMTEsOCwxMSwxMCwxMCwxNCw3LDE2LDYsMTgsNiwyMCw3LDIxLDEwLDIxLDEyXV19LGFuPXtzeW1ib2w6ZnVuY3Rpb24odCxlLHIsbixhKXtpZigidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzKXt2YXIgaT1BdC5kaXNhYmxlZCxvPXQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpOzAhPT1yLnBhaW50LmdldCgiaWNvbi1vcGFjaXR5IikuY29uc3RhbnRPcigxKSYmWnIodCxlLHIsbiwhMSxyLnBhaW50LmdldCgiaWNvbi10cmFuc2xhdGUiKSxyLnBhaW50LmdldCgiaWNvbi10cmFuc2xhdGUtYW5jaG9yIiksci5sYXlvdXQuZ2V0KCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCIpLHIubGF5b3V0LmdldCgiaWNvbi1waXRjaC1hbGlnbm1lbnQiKSxyLmxheW91dC5nZXQoImljb24ta2VlcC11cHJpZ2h0IiksaSxvLGEpLDAhPT1yLnBhaW50LmdldCgidGV4dC1vcGFjaXR5IikuY29uc3RhbnRPcigxKSYmWnIodCxlLHIsbiwhMCxyLnBhaW50LmdldCgidGV4dC10cmFuc2xhdGUiKSxyLnBhaW50LmdldCgidGV4dC10cmFuc2xhdGUtYW5jaG9yIiksci5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpLHIubGF5b3V0LmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSxyLmxheW91dC5nZXQoInRleHQta2VlcC11cHJpZ2h0IiksaSxvLGEpLGUubWFwLnNob3dDb2xsaXNpb25Cb3hlcyYmZnVuY3Rpb24odCxlLHIsbil7SHIodCxlLHIsbiwhMSksSHIodCxlLHIsbiwhMCl9KHQsZSxyLG4pfX0sY2lyY2xlOmZ1bmN0aW9uKGUscixuLGEpe2lmKCJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3Mpe3ZhciBpPW4ucGFpbnQuZ2V0KCJjaXJjbGUtb3BhY2l0eSIpLG89bi5wYWludC5nZXQoImNpcmNsZS1zdHJva2Utd2lkdGgiKSxzPW4ucGFpbnQuZ2V0KCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiKSxsPXZvaWQgMCE9PW4ubGF5b3V0LmdldCgiY2lyY2xlLXNvcnQta2V5IikuY29uc3RhbnRPcigxKTtpZigwIT09aS5jb25zdGFudE9yKDEpfHwwIT09by5jb25zdGFudE9yKDEpJiYwIT09cy5jb25zdGFudE9yKDEpKXtmb3IodmFyIGM9ZS5jb250ZXh0LHU9Yy5nbCxoPWUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxNdC5SZWFkT25seSksZj1BdC5kaXNhYmxlZCxwPWUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGQ9W10sZz0wO2c8YS5sZW5ndGg7ZysrKXt2YXIgdj1hW2ddLG09ci5nZXRUaWxlKHYpLHk9bS5nZXRCdWNrZXQobik7aWYoeSl7dmFyIHg9eS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KG4uaWQpLGI9e3Byb2dyYW1Db25maWd1cmF0aW9uOngscHJvZ3JhbTplLnVzZVByb2dyYW0oImNpcmNsZSIseCksbGF5b3V0VmVydGV4QnVmZmVyOnkubGF5b3V0VmVydGV4QnVmZmVyLGluZGV4QnVmZmVyOnkuaW5kZXhCdWZmZXIsdW5pZm9ybVZhbHVlczpicihlLHYsbSxuKX07aWYobClmb3IodmFyIF89MCx3PXkuc2VnbWVudHMuZ2V0KCk7Xzx3Lmxlbmd0aDtfKz0xKXt2YXIgaz13W19dO2QucHVzaCh7c2VnbWVudHM6bmV3IHQuU2VnbWVudFZlY3Rvcihba10pLHNvcnRLZXk6ay5zb3J0S2V5LHN0YXRlOmJ9KX1lbHNlIGQucHVzaCh7c2VnbWVudHM6eS5zZWdtZW50cyxzb3J0S2V5OjAsc3RhdGU6Yn0pfX1sJiZkLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pO2Zvcih2YXIgVD0wLE09ZDtUPE0ubGVuZ3RoO1QrPTEpe3ZhciBBPU1bVF0sUz1BLnN0YXRlLEU9Uy5wcm9ncmFtQ29uZmlndXJhdGlvbixMPVMucHJvZ3JhbSxDPVMubGF5b3V0VmVydGV4QnVmZmVyLFA9Uy5pbmRleEJ1ZmZlcixPPVMudW5pZm9ybVZhbHVlcyx6PUEuc2VnbWVudHM7TC5kcmF3KGMsdS5UUklBTkdMRVMsaCxmLHAsRXQuZGlzYWJsZWQsTyxuLmlkLEMsUCx6LG4ucGFpbnQsZS50cmFuc2Zvcm0uem9vbSxFKX19fX0saGVhdG1hcDpmdW5jdGlvbihlLHIsbixhKXtpZigwIT09bi5wYWludC5nZXQoImhlYXRtYXAtb3BhY2l0eSIpKWlmKCJvZmZzY3JlZW4iPT09ZS5yZW5kZXJQYXNzKXt2YXIgaT1lLmNvbnRleHQsbz1pLmdsLHM9ZS5kZXB0aE1vZGVGb3JTdWJsYXllcigwLE10LlJlYWRPbmx5KSxsPUF0LmRpc2FibGVkLGM9bmV3IFN0KFtvLk9ORSxvLk9ORV0sdC5Db2xvci50cmFuc3BhcmVudCxbITAsITAsITAsITBdKTshZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuZ2w7dC5hY3RpdmVUZXh0dXJlLnNldChuLlRFWFRVUkUxKSx0LnZpZXdwb3J0LnNldChbMCwwLGUud2lkdGgvNCxlLmhlaWdodC80XSk7dmFyIGE9ci5oZWF0bWFwRmJvO2lmKGEpbi5iaW5kVGV4dHVyZShuLlRFWFRVUkVfMkQsYS5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpLHQuYmluZEZyYW1lYnVmZmVyLnNldChhLmZyYW1lYnVmZmVyKTtlbHNle3ZhciBpPW4uY3JlYXRlVGV4dHVyZSgpO24uYmluZFRleHR1cmUobi5URVhUVVJFXzJELGkpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfUyxuLkNMQU1QX1RPX0VER0UpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfVCxuLkNMQU1QX1RPX0VER0UpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01JTl9GSUxURVIsbi5MSU5FQVIpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01BR19GSUxURVIsbi5MSU5FQVIpLGE9ci5oZWF0bWFwRmJvPXQuY3JlYXRlRnJhbWVidWZmZXIoZS53aWR0aC80LGUuaGVpZ2h0LzQpLGZ1bmN0aW9uIHQoZSxyLG4sYSl7dmFyIGk9ZS5nbDtpLnRleEltYWdlMkQoaS5URVhUVVJFXzJELDAsaS5SR0JBLHIud2lkdGgvNCxyLmhlaWdodC80LDAsaS5SR0JBLGUuZXh0VGV4dHVyZUhhbGZGbG9hdD9lLmV4dFRleHR1cmVIYWxmRmxvYXQuSEFMRl9GTE9BVF9PRVM6aS5VTlNJR05FRF9CWVRFLG51bGwpLGEuY29sb3JBdHRhY2htZW50LnNldChuKSxlLmV4dFRleHR1cmVIYWxmRmxvYXQmJmkuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhpLkZSQU1FQlVGRkVSKSE9PWkuRlJBTUVCVUZGRVJfQ09NUExFVEUmJihlLmV4dFRleHR1cmVIYWxmRmxvYXQ9bnVsbCxhLmNvbG9yQXR0YWNobWVudC5zZXREaXJ0eSgpLHQoZSxyLG4sYSkpfSh0LGUsaSxhKX19KGksZSxuKSxpLmNsZWFyKHtjb2xvcjp0LkNvbG9yLnRyYW5zcGFyZW50fSk7Zm9yKHZhciB1PTA7dTxhLmxlbmd0aDt1Kyspe3ZhciBoPWFbdV07aWYoIXIuaGFzUmVuZGVyYWJsZVBhcmVudChoKSl7dmFyIGY9ci5nZXRUaWxlKGgpLHA9Zi5nZXRCdWNrZXQobik7aWYocCl7dmFyIGQ9cC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KG4uaWQpLGc9ZS51c2VQcm9ncmFtKCJoZWF0bWFwIixkKSx2PWUudHJhbnNmb3JtLnpvb207Zy5kcmF3KGksby5UUklBTkdMRVMscyxsLGMsRXQuZGlzYWJsZWQsTXIoaC5wb3NNYXRyaXgsZix2LG4ucGFpbnQuZ2V0KCJoZWF0bWFwLWludGVuc2l0eSIpKSxuLmlkLHAubGF5b3V0VmVydGV4QnVmZmVyLHAuaW5kZXhCdWZmZXIscC5zZWdtZW50cyxuLnBhaW50LGUudHJhbnNmb3JtLnpvb20sZCl9fX1pLnZpZXdwb3J0LnNldChbMCwwLGUud2lkdGgsZS5oZWlnaHRdKX1lbHNlInRyYW5zbHVjZW50Ij09PWUucmVuZGVyUGFzcyYmKGUuY29udGV4dC5zZXRDb2xvck1vZGUoZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpLGZ1bmN0aW9uKGUscil7dmFyIG49ZS5jb250ZXh0LGE9bi5nbCxpPXIuaGVhdG1hcEZibztpZihpKXtuLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTApLGEuYmluZFRleHR1cmUoYS5URVhUVVJFXzJELGkuY29sb3JBdHRhY2htZW50LmdldCgpKSxuLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTEpO3ZhciBvPXIuY29sb3JSYW1wVGV4dHVyZTtvfHwobz1yLmNvbG9yUmFtcFRleHR1cmU9bmV3IHQuVGV4dHVyZShuLHIuY29sb3JSYW1wLGEuUkdCQSkpLG8uYmluZChhLkxJTkVBUixhLkNMQU1QX1RPX0VER0UpLGUudXNlUHJvZ3JhbSgiaGVhdG1hcFRleHR1cmUiKS5kcmF3KG4sYS5UUklBTkdMRVMsTXQuZGlzYWJsZWQsQXQuZGlzYWJsZWQsZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksRXQuZGlzYWJsZWQsZnVuY3Rpb24oZSxyLG4sYSl7dmFyIGk9dC5jcmVhdGUoKTt0Lm9ydGhvKGksMCxlLndpZHRoLGUuaGVpZ2h0LDAsMCwxKTt2YXIgbz1lLmNvbnRleHQuZ2w7cmV0dXJue3VfbWF0cml4OmksdV93b3JsZDpbby5kcmF3aW5nQnVmZmVyV2lkdGgsby5kcmF3aW5nQnVmZmVySGVpZ2h0XSx1X2ltYWdlOm4sdV9jb2xvcl9yYW1wOmEsdV9vcGFjaXR5OnIucGFpbnQuZ2V0KCJoZWF0bWFwLW9wYWNpdHkiKX19KGUsciwwLDEpLHIuaWQsZS52aWV3cG9ydEJ1ZmZlcixlLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLGUudmlld3BvcnRTZWdtZW50cyxyLnBhaW50LGUudHJhbnNmb3JtLnpvb20pfX0oZSxuKSl9LGxpbmU6ZnVuY3Rpb24oZSxyLG4sYSl7aWYoInRyYW5zbHVjZW50Ij09PWUucmVuZGVyUGFzcyl7dmFyIGk9bi5wYWludC5nZXQoImxpbmUtb3BhY2l0eSIpLG89bi5wYWludC5nZXQoImxpbmUtd2lkdGgiKTtpZigwIT09aS5jb25zdGFudE9yKDEpJiYwIT09by5jb25zdGFudE9yKDEpKXt2YXIgcz1lLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsTXQuUmVhZE9ubHkpLGw9ZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksYz1uLnBhaW50LmdldCgibGluZS1kYXNoYXJyYXkiKSx1PW4ucGFpbnQuZ2V0KCJsaW5lLXBhdHRlcm4iKSxoPXUuY29uc3RhbnRPcigxKSxmPW4ucGFpbnQuZ2V0KCJsaW5lLWdyYWRpZW50IikscD1uLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKSxkPWM/ImxpbmVTREYiOmg/ImxpbmVQYXR0ZXJuIjpmPyJsaW5lR3JhZGllbnQiOiJsaW5lIixnPWUuY29udGV4dCx2PWcuZ2wsbT0hMDtpZihmKXtnLmFjdGl2ZVRleHR1cmUuc2V0KHYuVEVYVFVSRTApO3ZhciB5PW4uZ3JhZGllbnRUZXh0dXJlO2lmKCFuLmdyYWRpZW50KXJldHVybjt5fHwoeT1uLmdyYWRpZW50VGV4dHVyZT1uZXcgdC5UZXh0dXJlKGcsbi5ncmFkaWVudCx2LlJHQkEpKSx5LmJpbmQodi5MSU5FQVIsdi5DTEFNUF9UT19FREdFKX1mb3IodmFyIHg9MCxiPWE7eDxiLmxlbmd0aDt4Kz0xKXt2YXIgXz1iW3hdLHc9ci5nZXRUaWxlKF8pO2lmKCFofHx3LnBhdHRlcm5zTG9hZGVkKCkpe3ZhciBrPXcuZ2V0QnVja2V0KG4pO2lmKGspe3ZhciBUPWsucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChuLmlkKSxNPWUuY29udGV4dC5wcm9ncmFtLmdldCgpLEE9ZS51c2VQcm9ncmFtKGQsVCksUz1tfHxBLnByb2dyYW0hPT1NLEU9dS5jb25zdGFudE9yKG51bGwpO2lmKEUmJncuaW1hZ2VBdGxhcyl7dmFyIEw9dy5pbWFnZUF0bGFzLnBhdHRlcm5Qb3NpdGlvbnNbRS50b10sQz13LmltYWdlQXRsYXMucGF0dGVyblBvc2l0aW9uc1tFLmZyb21dO0wmJkMmJlQuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKEwsQyl9dmFyIFA9Yz9PcihlLHcsbixjLHApOmg/UHIoZSx3LG4scCk6Zj9DcihlLHcsbik6THIoZSx3LG4pO2MmJihTfHxlLmxpbmVBdGxhcy5kaXJ0eSk/KGcuYWN0aXZlVGV4dHVyZS5zZXQodi5URVhUVVJFMCksZS5saW5lQXRsYXMuYmluZChnKSk6aCYmKGcuYWN0aXZlVGV4dHVyZS5zZXQodi5URVhUVVJFMCksdy5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKHYuTElORUFSLHYuQ0xBTVBfVE9fRURHRSksVC51cGRhdGVQYXR0ZXJuUGFpbnRCdWZmZXJzKHApKSxBLmRyYXcoZyx2LlRSSUFOR0xFUyxzLGUuc3RlbmNpbE1vZGVGb3JDbGlwcGluZyhfKSxsLEV0LmRpc2FibGVkLFAsbi5pZCxrLmxheW91dFZlcnRleEJ1ZmZlcixrLmluZGV4QnVmZmVyLGsuc2VnbWVudHMsbi5wYWludCxlLnRyYW5zZm9ybS56b29tLFQpLG09ITF9fX19fX0sZmlsbDpmdW5jdGlvbihlLHIsbixhKXt2YXIgaT1uLnBhaW50LmdldCgiZmlsbC1jb2xvciIpLG89bi5wYWludC5nZXQoImZpbGwtb3BhY2l0eSIpO2lmKDAhPT1vLmNvbnN0YW50T3IoMSkpe3ZhciBzPWUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGw9bi5wYWludC5nZXQoImZpbGwtcGF0dGVybiIpLGM9ZS5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCkmJiFsLmNvbnN0YW50T3IoMSkmJjE9PT1pLmNvbnN0YW50T3IodC5Db2xvci50cmFuc3BhcmVudCkuYSYmMT09PW8uY29uc3RhbnRPcigwKT8ib3BhcXVlIjoidHJhbnNsdWNlbnQiO2lmKGUucmVuZGVyUGFzcz09PWMpe3ZhciB1PWUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMSwib3BhcXVlIj09PWUucmVuZGVyUGFzcz9NdC5SZWFkV3JpdGU6TXQuUmVhZE9ubHkpO0tyKGUscixuLGEsdSxzLCExKX1pZigidHJhbnNsdWNlbnQiPT09ZS5yZW5kZXJQYXNzJiZuLnBhaW50LmdldCgiZmlsbC1hbnRpYWxpYXMiKSl7dmFyIGg9ZS5kZXB0aE1vZGVGb3JTdWJsYXllcihuLmdldFBhaW50UHJvcGVydHkoImZpbGwtb3V0bGluZS1jb2xvciIpPzI6MCxNdC5SZWFkT25seSk7S3IoZSxyLG4sYSxoLHMsITApfX19LCJmaWxsLWV4dHJ1c2lvbiI6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9ci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiKTtpZigwIT09YSYmInRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyl7dmFyIGk9bmV3IE10KHQuY29udGV4dC5nbC5MRVFVQUwsTXQuUmVhZFdyaXRlLHQuZGVwdGhSYW5nZUZvcjNEKTtpZigxIT09YXx8ci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iKS5jb25zdGFudE9yKDEpKVFyKHQsZSxyLG4saSxBdC5kaXNhYmxlZCxTdC5kaXNhYmxlZCksUXIodCxlLHIsbixpLHQuc3RlbmNpbE1vZGVGb3IzRCgpLHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtlbHNle3ZhciBvPXQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1FyKHQsZSxyLG4saSxBdC5kaXNhYmxlZCxvKX19fSxoaWxsc2hhZGU6ZnVuY3Rpb24odCxlLHIsbil7aWYoIm9mZnNjcmVlbiI9PT10LnJlbmRlclBhc3N8fCJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3Mpe2Zvcih2YXIgYT10LmNvbnRleHQsaT1lLmdldFNvdXJjZSgpLm1heHpvb20sbz10LmRlcHRoTW9kZUZvclN1YmxheWVyKDAsTXQuUmVhZE9ubHkpLHM9QXQuZGlzYWJsZWQsbD10LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxjPTAsdT1uO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGg9dVtjXSxmPWUuZ2V0VGlsZShoKTtmLm5lZWRzSGlsbHNoYWRlUHJlcGFyZSYmIm9mZnNjcmVlbiI9PT10LnJlbmRlclBhc3M/dG4odCxmLHIsaSxvLHMsbCk6InRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyYmJHIodCxmLHIsbyxzLGwpfWEudmlld3BvcnQuc2V0KFswLDAsdC53aWR0aCx0LmhlaWdodF0pfX0scmFzdGVyOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3MmJjAhPT1yLnBhaW50LmdldCgicmFzdGVyLW9wYWNpdHkiKSlmb3IodmFyIGE9dC5jb250ZXh0LGk9YS5nbCxvPWUuZ2V0U291cmNlKCkscz10LnVzZVByb2dyYW0oInJhc3RlciIpLGw9QXQuZGlzYWJsZWQsYz10LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSx1PW4ubGVuZ3RoJiZuWzBdLm92ZXJzY2FsZWRaLGg9IXQub3B0aW9ucy5tb3ZpbmcsZj0wLHA9bjtmPHAubGVuZ3RoO2YrPTEpe3ZhciBkPXBbZl0sZz10LmRlcHRoTW9kZUZvclN1YmxheWVyKGQub3ZlcnNjYWxlZFotdSwxPT09ci5wYWludC5nZXQoInJhc3Rlci1vcGFjaXR5Iik/TXQuUmVhZFdyaXRlOk10LlJlYWRPbmx5LGkuTEVTUyksdj1lLmdldFRpbGUoZCksbT10LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoZC50b1Vud3JhcHBlZCgpLGgpO3YucmVnaXN0ZXJGYWRlRHVyYXRpb24oci5wYWludC5nZXQoInJhc3Rlci1mYWRlLWR1cmF0aW9uIikpO3ZhciB5PWUuZmluZExvYWRlZFBhcmVudChkLDApLHg9ZW4odix5LGUscix0LnRyYW5zZm9ybSksYj12b2lkIDAsXz12b2lkIDAsdz0ibmVhcmVzdCI9PT1yLnBhaW50LmdldCgicmFzdGVyLXJlc2FtcGxpbmciKT9pLk5FQVJFU1Q6aS5MSU5FQVI7YS5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUwKSx2LnRleHR1cmUuYmluZCh3LGkuQ0xBTVBfVE9fRURHRSxpLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksYS5hY3RpdmVUZXh0dXJlLnNldChpLlRFWFRVUkUxKSx5Pyh5LnRleHR1cmUuYmluZCh3LGkuQ0xBTVBfVE9fRURHRSxpLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksYj1NYXRoLnBvdygyLHkudGlsZUlELm92ZXJzY2FsZWRaLXYudGlsZUlELm92ZXJzY2FsZWRaKSxfPVt2LnRpbGVJRC5jYW5vbmljYWwueCpiJTEsdi50aWxlSUQuY2Fub25pY2FsLnkqYiUxXSk6di50ZXh0dXJlLmJpbmQodyxpLkNMQU1QX1RPX0VER0UsaS5MSU5FQVJfTUlQTUFQX05FQVJFU1QpO3ZhciBrPURyKG0sX3x8WzAsMF0sYnx8MSx4LHIpO28gaW5zdGFuY2VvZiBQP3MuZHJhdyhhLGkuVFJJQU5HTEVTLGcsbCxjLEV0LmRpc2FibGVkLGssci5pZCxvLmJvdW5kc0J1ZmZlcix0LnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLG8uYm91bmRzU2VnbWVudHMpOnYubWFza2VkQm91bmRzQnVmZmVyJiZ2Lm1hc2tlZEluZGV4QnVmZmVyJiZ2LnNlZ21lbnRzP3MuZHJhdyhhLGkuVFJJQU5HTEVTLGcsbCxjLEV0LmRpc2FibGVkLGssci5pZCx2Lm1hc2tlZEJvdW5kc0J1ZmZlcix2Lm1hc2tlZEluZGV4QnVmZmVyLHYuc2VnbWVudHMsci5wYWludCx0LnRyYW5zZm9ybS56b29tKTpzLmRyYXcoYSxpLlRSSUFOR0xFUyxnLGwsYyxFdC5kaXNhYmxlZCxrLHIuaWQsdC5yYXN0ZXJCb3VuZHNCdWZmZXIsdC5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcix0LnJhc3RlckJvdW5kc1NlZ21lbnRzKX19LGJhY2tncm91bmQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIucGFpbnQuZ2V0KCJiYWNrZ3JvdW5kLWNvbG9yIiksYT1yLnBhaW50LmdldCgiYmFja2dyb3VuZC1vcGFjaXR5Iik7aWYoMCE9PWEpe3ZhciBpPXQuY29udGV4dCxvPWkuZ2wscz10LnRyYW5zZm9ybSxsPXMudGlsZVNpemUsYz1yLnBhaW50LmdldCgiYmFja2dyb3VuZC1wYXR0ZXJuIik7aWYoIXQuaXNQYXR0ZXJuTWlzc2luZyhjKSl7dmFyIHU9IWMmJjE9PT1uLmEmJjE9PT1hJiZ0Lm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKT8ib3BhcXVlIjoidHJhbnNsdWNlbnQiO2lmKHQucmVuZGVyUGFzcz09PXUpe3ZhciBoPUF0LmRpc2FibGVkLGY9dC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCJvcGFxdWUiPT09dT9NdC5SZWFkV3JpdGU6TXQuUmVhZE9ubHkpLHA9dC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksZD10LnVzZVByb2dyYW0oYz8iYmFja2dyb3VuZFBhdHRlcm4iOiJiYWNrZ3JvdW5kIiksZz1zLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplOmx9KTtjJiYoaS5hY3RpdmVUZXh0dXJlLnNldChvLlRFWFRVUkUwKSx0LmltYWdlTWFuYWdlci5iaW5kKHQuY29udGV4dCkpO2Zvcih2YXIgdj1yLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKSxtPTAseT1nO208eS5sZW5ndGg7bSs9MSl7dmFyIHg9eVttXSxiPXQudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeCh4LnRvVW53cmFwcGVkKCkpLF89Yz9qcihiLGEsdCxjLHt0aWxlSUQ6eCx0aWxlU2l6ZTpsfSx2KTpOcihiLGEsbik7ZC5kcmF3KGksby5UUklBTkdMRVMsZixoLHAsRXQuZGlzYWJsZWQsXyxyLmlkLHQudGlsZUV4dGVudEJ1ZmZlcix0LnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLHQudGlsZUV4dGVudFNlZ21lbnRzKX19fX19LGRlYnVnOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKylybih0LGUscltuXSl9LGN1c3RvbTpmdW5jdGlvbih0LGUscil7dmFyIG49dC5jb250ZXh0LGE9ci5pbXBsZW1lbnRhdGlvbjtpZigib2Zmc2NyZWVuIj09PXQucmVuZGVyUGFzcyl7dmFyIGk9YS5wcmVyZW5kZXI7aSYmKHQuc2V0Q3VzdG9tTGF5ZXJEZWZhdWx0cygpLG4uc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxpLmNhbGwoYSxuLmdsLHQudHJhbnNmb3JtLmN1c3RvbUxheWVyTWF0cml4KCkpLG4uc2V0RGlydHkoKSx0LnNldEJhc2VTdGF0ZSgpKX1lbHNlIGlmKCJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3Mpe3Quc2V0Q3VzdG9tTGF5ZXJEZWZhdWx0cygpLG4uc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxuLnNldFN0ZW5jaWxNb2RlKEF0LmRpc2FibGVkKTt2YXIgbz0iM2QiPT09YS5yZW5kZXJpbmdNb2RlP25ldyBNdCh0LmNvbnRleHQuZ2wuTEVRVUFMLE10LlJlYWRXcml0ZSx0LmRlcHRoUmFuZ2VGb3IzRCk6dC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLE10LlJlYWRPbmx5KTtuLnNldERlcHRoTW9kZShvKSxhLnJlbmRlcihuLmdsLHQudHJhbnNmb3JtLmN1c3RvbUxheWVyTWF0cml4KCkpLG4uc2V0RGlydHkoKSx0LnNldEJhc2VTdGF0ZSgpLG4uYmluZEZyYW1lYnVmZmVyLnNldChudWxsKX19fSxvbj1mdW5jdGlvbihlLHIpe3RoaXMuY29udGV4dD1uZXcgTHQoZSksdGhpcy50cmFuc2Zvcm09cix0aGlzLl90aWxlVGV4dHVyZXM9e30sdGhpcy5zZXR1cCgpLHRoaXMubnVtU3VibGF5ZXJzPUN0Lm1heFVuZGVyem9vbWluZytDdC5tYXhPdmVyem9vbWluZysxLHRoaXMuZGVwdGhFcHNpbG9uPTEvTWF0aC5wb3coMiwxNiksdGhpcy5kZXB0aFJib05lZWRzQ2xlYXI9ITAsdGhpcy5lbXB0eVByb2dyYW1Db25maWd1cmF0aW9uPW5ldyB0LlByb2dyYW1Db25maWd1cmF0aW9uLHRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXg9bmV3IE9lfTtmdW5jdGlvbiBzbih0LGUpe2lmKHQueT5lLnkpe3ZhciByPXQ7dD1lLGU9cn1yZXR1cm57eDA6dC54LHkwOnQueSx4MTplLngseTE6ZS55LGR4OmUueC10LngsZHk6ZS55LXQueX19ZnVuY3Rpb24gbG4odCxlLHIsbixhKXt2YXIgaT1NYXRoLm1heChyLE1hdGguZmxvb3IoZS55MCkpLG89TWF0aC5taW4obixNYXRoLmNlaWwoZS55MSkpO2lmKHQueDA9PT1lLngwJiZ0LnkwPT09ZS55MD90LngwK2UuZHkvdC5keSp0LmR4PGUueDE6dC54MS1lLmR5L3QuZHkqdC5keDxlLngwKXt2YXIgcz10O3Q9ZSxlPXN9Zm9yKHZhciBsPXQuZHgvdC5keSxjPWUuZHgvZS5keSx1PXQuZHg+MCxoPWUuZHg8MCxmPWk7ZjxvO2YrKyl7dmFyIHA9bCpNYXRoLm1heCgwLE1hdGgubWluKHQuZHksZit1LXQueTApKSt0LngwLGQ9YypNYXRoLm1heCgwLE1hdGgubWluKGUuZHksZitoLWUueTApKStlLngwO2EoTWF0aC5mbG9vcihkKSxNYXRoLmNlaWwocCksZil9fWZ1bmN0aW9uIGNuKHQsZSxyLG4sYSxpKXt2YXIgbyxzPXNuKHQsZSksbD1zbihlLHIpLGM9c24ocix0KTtzLmR5PmwuZHkmJihvPXMscz1sLGw9bykscy5keT5jLmR5JiYobz1zLHM9YyxjPW8pLGwuZHk+Yy5keSYmKG89bCxsPWMsYz1vKSxzLmR5JiZsbihjLHMsbixhLGkpLGwuZHkmJmxuKGMsbCxuLGEsaSl9b24ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuY29udGV4dC5nbDtpZih0aGlzLndpZHRoPWUqdC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sdGhpcy5oZWlnaHQ9cip0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodF0pLHRoaXMuc3R5bGUpZm9yKHZhciBhPTAsaT10aGlzLnN0eWxlLl9vcmRlcjthPGkubGVuZ3RoO2ErPTEpe3ZhciBvPWlbYV07dGhpcy5zdHlsZS5fbGF5ZXJzW29dLnJlc2l6ZSgpfXRoaXMuZGVwdGhSYm8mJihuLmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLmRlcHRoUmJvKSx0aGlzLmRlcHRoUmJvPW51bGwpfSxvbi5wcm90b3R5cGUuc2V0dXA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQscj1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDJpNDtyLmVtcGxhY2VCYWNrKDAsMCksci5lbXBsYWNlQmFjayh0LkVYVEVOVCwwKSxyLmVtcGxhY2VCYWNrKDAsdC5FWFRFTlQpLHIuZW1wbGFjZUJhY2sodC5FWFRFTlQsdC5FWFRFTlQpLHRoaXMudGlsZUV4dGVudEJ1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihyLEZlLm1lbWJlcnMpLHRoaXMudGlsZUV4dGVudFNlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDIpO3ZhciBuPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0Mmk0O24uZW1wbGFjZUJhY2soMCwwKSxuLmVtcGxhY2VCYWNrKHQuRVhURU5ULDApLG4uZW1wbGFjZUJhY2soMCx0LkVYVEVOVCksbi5lbXBsYWNlQmFjayh0LkVYVEVOVCx0LkVYVEVOVCksdGhpcy5kZWJ1Z0J1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihuLEZlLm1lbWJlcnMpLHRoaXMuZGVidWdTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCw1KTt2YXIgYT1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDRpODthLmVtcGxhY2VCYWNrKDAsMCwwLDApLGEuZW1wbGFjZUJhY2sodC5FWFRFTlQsMCx0LkVYVEVOVCwwKSxhLmVtcGxhY2VCYWNrKDAsdC5FWFRFTlQsMCx0LkVYVEVOVCksYS5lbXBsYWNlQmFjayh0LkVYVEVOVCx0LkVYVEVOVCx0LkVYVEVOVCx0LkVYVEVOVCksdGhpcy5yYXN0ZXJCb3VuZHNCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIoYSx0LnJhc3RlckJvdW5kc0F0dHJpYnV0ZXMubWVtYmVycyksdGhpcy5yYXN0ZXJCb3VuZHNTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKTt2YXIgaT1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDJpNDtpLmVtcGxhY2VCYWNrKDAsMCksaS5lbXBsYWNlQmFjaygxLDApLGkuZW1wbGFjZUJhY2soMCwxKSxpLmVtcGxhY2VCYWNrKDEsMSksdGhpcy52aWV3cG9ydEJ1ZmZlcj1lLmNyZWF0ZVZlcnRleEJ1ZmZlcihpLEZlLm1lbWJlcnMpLHRoaXMudmlld3BvcnRTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKTt2YXIgbz1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDF1aTI7by5lbXBsYWNlQmFjaygwKSxvLmVtcGxhY2VCYWNrKDEpLG8uZW1wbGFjZUJhY2soMyksby5lbXBsYWNlQmFjaygyKSxvLmVtcGxhY2VCYWNrKDApLHRoaXMudGlsZUJvcmRlckluZGV4QnVmZmVyPWUuY3JlYXRlSW5kZXhCdWZmZXIobyk7dmFyIHM9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQzdWk2O3MuZW1wbGFjZUJhY2soMCwxLDIpLHMuZW1wbGFjZUJhY2soMiwxLDMpLHRoaXMucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXI9ZS5jcmVhdGVJbmRleEJ1ZmZlcihzKTt2YXIgbD10aGlzLmNvbnRleHQuZ2w7dGhpcy5zdGVuY2lsQ2xlYXJNb2RlPW5ldyBBdCh7ZnVuYzpsLkFMV0FZUyxtYXNrOjB9LDAsMjU1LGwuWkVSTyxsLlpFUk8sbC5aRVJPKX0sb24ucHJvdG90eXBlLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dCxyPWUuZ2w7dGhpcy5uZXh0U3RlbmNpbElEPTEsdGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZT12b2lkIDA7dmFyIG49dC5jcmVhdGUoKTt0Lm9ydGhvKG4sMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LDAsMCwxKSx0LnNjYWxlKG4sbixbci5kcmF3aW5nQnVmZmVyV2lkdGgsci5kcmF3aW5nQnVmZmVySGVpZ2h0LDBdKSx0aGlzLnVzZVByb2dyYW0oImNsaXBwaW5nTWFzayIpLmRyYXcoZSxyLlRSSUFOR0xFUyxNdC5kaXNhYmxlZCx0aGlzLnN0ZW5jaWxDbGVhck1vZGUsU3QuZGlzYWJsZWQsRXQuZGlzYWJsZWQsVHIobiksIiRjbGlwcGluZyIsdGhpcy52aWV3cG9ydEJ1ZmZlcix0aGlzLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLHRoaXMudmlld3BvcnRTZWdtZW50cyl9LG9uLnByb3RvdHlwZS5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3M9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlIT09dC5zb3VyY2UmJnQuaXNUaWxlQ2xpcHBlZCgpJiZlJiZlLmxlbmd0aCl7dGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZT10LnNvdXJjZTt2YXIgcj10aGlzLmNvbnRleHQsbj1yLmdsO3RoaXMubmV4dFN0ZW5jaWxJRCtlLmxlbmd0aD4yNTYmJnRoaXMuY2xlYXJTdGVuY2lsKCksci5zZXRDb2xvck1vZGUoU3QuZGlzYWJsZWQpLHIuc2V0RGVwdGhNb2RlKE10LmRpc2FibGVkKTt2YXIgYT10aGlzLnVzZVByb2dyYW0oImNsaXBwaW5nTWFzayIpO3RoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHM9e307Zm9yKHZhciBpPTAsbz1lO2k8by5sZW5ndGg7aSs9MSl7dmFyIHM9b1tpXSxsPXRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbcy5rZXldPXRoaXMubmV4dFN0ZW5jaWxJRCsrO2EuZHJhdyhyLG4uVFJJQU5HTEVTLE10LmRpc2FibGVkLG5ldyBBdCh7ZnVuYzpuLkFMV0FZUyxtYXNrOjB9LGwsMjU1LG4uS0VFUCxuLktFRVAsbi5SRVBMQUNFKSxTdC5kaXNhYmxlZCxFdC5kaXNhYmxlZCxUcihzLnBvc01hdHJpeCksIiRjbGlwcGluZyIsdGhpcy50aWxlRXh0ZW50QnVmZmVyLHRoaXMucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsdGhpcy50aWxlRXh0ZW50U2VnbWVudHMpfX19LG9uLnByb3RvdHlwZS5zdGVuY2lsTW9kZUZvcjNEPWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZT12b2lkIDAsdGhpcy5uZXh0U3RlbmNpbElEKzE+MjU2JiZ0aGlzLmNsZWFyU3RlbmNpbCgpO3ZhciB0PXRoaXMubmV4dFN0ZW5jaWxJRCsrLGU9dGhpcy5jb250ZXh0LmdsO3JldHVybiBuZXcgQXQoe2Z1bmM6ZS5OT1RFUVVBTCxtYXNrOjI1NX0sdCwyNTUsZS5LRUVQLGUuS0VFUCxlLlJFUExBQ0UpfSxvbi5wcm90b3R5cGUuc3RlbmNpbE1vZGVGb3JDbGlwcGluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7cmV0dXJuIG5ldyBBdCh7ZnVuYzplLkVRVUFMLG1hc2s6MjU1fSx0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzW3Qua2V5XSwwLGUuS0VFUCxlLktFRVAsZS5SRVBMQUNFKX0sb24ucHJvdG90eXBlLmNvbG9yTW9kZUZvclJlbmRlclBhc3M9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7cmV0dXJuIHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj9uZXcgU3QoW2UuQ09OU1RBTlRfQ09MT1IsZS5PTkVdLG5ldyB0LkNvbG9yKDEvOCwxLzgsMS84LDApLFshMCwhMCwhMCwhMF0pOiJvcGFxdWUiPT09dGhpcy5yZW5kZXJQYXNzP1N0LnVuYmxlbmRlZDpTdC5hbHBoYUJsZW5kZWR9LG9uLnByb3RvdHlwZS5kZXB0aE1vZGVGb3JTdWJsYXllcj1mdW5jdGlvbih0LGUscil7aWYoIXRoaXMub3BhcXVlUGFzc0VuYWJsZWRGb3JMYXllcigpKXJldHVybiBNdC5kaXNhYmxlZDt2YXIgbj0xLSgoMSt0aGlzLmN1cnJlbnRMYXllcikqdGhpcy5udW1TdWJsYXllcnMrdCkqdGhpcy5kZXB0aEVwc2lsb247cmV0dXJuIG5ldyBNdChyfHx0aGlzLmNvbnRleHQuZ2wuTEVRVUFMLGUsW24sbl0pfSxvbi5wcm90b3R5cGUub3BhcXVlUGFzc0VuYWJsZWRGb3JMYXllcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRMYXllcjx0aGlzLm9wYXF1ZVBhc3NDdXRvZmZ9LG9uLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSxyKXt0aGlzLnN0eWxlPWUsdGhpcy5vcHRpb25zPXIsdGhpcy5saW5lQXRsYXM9ZS5saW5lQXRsYXMsdGhpcy5pbWFnZU1hbmFnZXI9ZS5pbWFnZU1hbmFnZXIsdGhpcy5nbHlwaE1hbmFnZXI9ZS5nbHlwaE1hbmFnZXIsdGhpcy5zeW1ib2xGYWRlQ2hhbmdlPWUucGxhY2VtZW50LnN5bWJvbEZhZGVDaGFuZ2UodC5icm93c2VyLm5vdygpKSx0aGlzLmltYWdlTWFuYWdlci5iZWdpbkZyYW1lKCk7dmFyIG49dGhpcy5zdHlsZS5fb3JkZXIsYT10aGlzLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIGkgaW4gYSl7dmFyIG89YVtpXTtvLnVzZWQmJm8ucHJlcGFyZSh0aGlzLmNvbnRleHQpfXZhciBzPXt9LGw9e30sYz17fTtmb3IodmFyIHUgaW4gYSl7dmFyIGg9YVt1XTtzW3VdPWguZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCksbFt1XT1zW3VdLnNsaWNlKCkucmV2ZXJzZSgpLGNbdV09aC5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoITApLnJldmVyc2UoKX1mb3IodmFyIGYgaW4gYSl7dmFyIHA9YVtmXSxkPXAuZ2V0U291cmNlKCk7aWYoInJhc3RlciI9PT1kLnR5cGV8fCJyYXN0ZXItZGVtIj09PWQudHlwZSl7Zm9yKHZhciBnPVtdLHY9MCxtPXNbZl07djxtLmxlbmd0aDt2Kz0xKXt2YXIgeT1tW3ZdO2cucHVzaChwLmdldFRpbGUoeSkpfVVyKGcsdGhpcy5jb250ZXh0KX19dGhpcy5vcGFxdWVQYXNzQ3V0b2ZmPTEvMDtmb3IodmFyIHg9MDt4PG4ubGVuZ3RoO3grKyl7dmFyIGI9blt4XTtpZih0aGlzLnN0eWxlLl9sYXllcnNbYl0uaXMzRCgpKXt0aGlzLm9wYXF1ZVBhc3NDdXRvZmY9eDticmVha319dGhpcy5yZW5kZXJQYXNzPSJvZmZzY3JlZW4iLHRoaXMuZGVwdGhSYm9OZWVkc0NsZWFyPSEwO2Zvcih2YXIgXz0wLHc9bjtfPHcubGVuZ3RoO18rPTEpe3ZhciBrPXdbX10sVD10aGlzLnN0eWxlLl9sYXllcnNba107aWYoVC5oYXNPZmZzY3JlZW5QYXNzKCkmJiFULmlzSGlkZGVuKHRoaXMudHJhbnNmb3JtLnpvb20pKXt2YXIgTT1sW1Quc291cmNlXTsoImN1c3RvbSI9PT1ULnR5cGV8fE0ubGVuZ3RoKSYmdGhpcy5yZW5kZXJMYXllcih0aGlzLGFbVC5zb3VyY2VdLFQsTSl9fWZvcih0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldChudWxsKSx0aGlzLmNvbnRleHQuY2xlYXIoe2NvbG9yOnIuc2hvd092ZXJkcmF3SW5zcGVjdG9yP3QuQ29sb3IuYmxhY2s6dC5Db2xvci50cmFuc3BhcmVudCxkZXB0aDoxfSksdGhpcy5jbGVhclN0ZW5jaWwoKSx0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I9ci5zaG93T3ZlcmRyYXdJbnNwZWN0b3IsdGhpcy5kZXB0aFJhbmdlRm9yM0Q9WzAsMS0oZS5fb3JkZXIubGVuZ3RoKzIpKnRoaXMubnVtU3VibGF5ZXJzKnRoaXMuZGVwdGhFcHNpbG9uXSx0aGlzLnJlbmRlclBhc3M9Im9wYXF1ZSIsdGhpcy5jdXJyZW50TGF5ZXI9bi5sZW5ndGgtMTt0aGlzLmN1cnJlbnRMYXllcj49MDt0aGlzLmN1cnJlbnRMYXllci0tKXt2YXIgQT10aGlzLnN0eWxlLl9sYXllcnNbblt0aGlzLmN1cnJlbnRMYXllcl1dLFM9YVtBLnNvdXJjZV0sRT1zW0Euc291cmNlXTt0aGlzLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcyhBLEUpLHRoaXMucmVuZGVyTGF5ZXIodGhpcyxTLEEsRSl9Zm9yKHRoaXMucmVuZGVyUGFzcz0idHJhbnNsdWNlbnQiLHRoaXMuY3VycmVudExheWVyPTA7dGhpcy5jdXJyZW50TGF5ZXI8bi5sZW5ndGg7dGhpcy5jdXJyZW50TGF5ZXIrKyl7dmFyIEw9dGhpcy5zdHlsZS5fbGF5ZXJzW25bdGhpcy5jdXJyZW50TGF5ZXJdXSxDPWFbTC5zb3VyY2VdLFA9KCJzeW1ib2wiPT09TC50eXBlP2M6bClbTC5zb3VyY2VdO3RoaXMuX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzKEwsc1tMLnNvdXJjZV0pLHRoaXMucmVuZGVyTGF5ZXIodGhpcyxDLEwsUCl9aWYodGhpcy5vcHRpb25zLnNob3dUaWxlQm91bmRhcmllcylmb3IodmFyIE8gaW4gYSl7YW4uZGVidWcodGhpcyxhW09dLHNbT10pO2JyZWFrfXRoaXMuY29udGV4dC5zZXREZWZhdWx0KCl9LG9uLnByb3RvdHlwZS5zZXR1cE9mZnNjcmVlbkRlcHRoUmVuZGVyYnVmZmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0O3RoaXMuZGVwdGhSYm98fCh0aGlzLmRlcHRoUmJvPXQuY3JlYXRlUmVuZGVyYnVmZmVyKHQuZ2wuREVQVEhfQ09NUE9ORU5UMTYsdGhpcy53aWR0aCx0aGlzLmhlaWdodCkpfSxvbi5wcm90b3R5cGUucmVuZGVyTGF5ZXI9ZnVuY3Rpb24odCxlLHIsbil7ci5pc0hpZGRlbih0aGlzLnRyYW5zZm9ybS56b29tKXx8KCJiYWNrZ3JvdW5kIj09PXIudHlwZXx8ImN1c3RvbSI9PT1yLnR5cGV8fG4ubGVuZ3RoKSYmKHRoaXMuaWQ9ci5pZCxhbltyLnR5cGVdKHQsZSxyLG4sdGhpcy5zdHlsZS5wbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzKSl9LG9uLnByb3RvdHlwZS50cmFuc2xhdGVQb3NNYXRyaXg9ZnVuY3Rpb24oZSxyLG4sYSxpKXtpZighblswXSYmIW5bMV0pcmV0dXJuIGU7dmFyIG89aT8ibWFwIj09PWE/dGhpcy50cmFuc2Zvcm0uYW5nbGU6MDoidmlld3BvcnQiPT09YT8tdGhpcy50cmFuc2Zvcm0uYW5nbGU6MDtpZihvKXt2YXIgcz1NYXRoLnNpbihvKSxsPU1hdGguY29zKG8pO249W25bMF0qbC1uWzFdKnMsblswXSpzK25bMV0qbF19dmFyIGM9W2k/blswXTpjZShyLG5bMF0sdGhpcy50cmFuc2Zvcm0uem9vbSksaT9uWzFdOmNlKHIsblsxXSx0aGlzLnRyYW5zZm9ybS56b29tKSwwXSx1PW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiB0LnRyYW5zbGF0ZSh1LGUsYyksdX0sb24ucHJvdG90eXBlLnNhdmVUaWxlVGV4dHVyZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlVGV4dHVyZXNbdC5zaXplWzBdXTtlP2UucHVzaCh0KTp0aGlzLl90aWxlVGV4dHVyZXNbdC5zaXplWzBdXT1bdF19LG9uLnByb3RvdHlwZS5nZXRUaWxlVGV4dHVyZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlVGV4dHVyZXNbdF07cmV0dXJuIGUmJmUubGVuZ3RoPjA/ZS5wb3AoKTpudWxsfSxvbi5wcm90b3R5cGUuaXNQYXR0ZXJuTWlzc2luZz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4hMTt2YXIgZT10aGlzLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQuZnJvbSkscj10aGlzLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQudG8pO3JldHVybiFlfHwhcn0sb24ucHJvdG90eXBlLnVzZVByb2dyYW09ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT10aGlzLmVtcHR5UHJvZ3JhbUNvbmZpZ3VyYXRpb24pLHRoaXMuY2FjaGU9dGhpcy5jYWNoZXx8e307dmFyIHI9IiIrdCsoZS5jYWNoZUtleXx8IiIpKyh0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I/Ii9vdmVyZHJhdyI6IiIpO3JldHVybiB0aGlzLmNhY2hlW3JdfHwodGhpcy5jYWNoZVtyXT1uZXcgZnIodGhpcy5jb250ZXh0LHVyW3RdLGUsVnJbdF0sdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yKSksdGhpcy5jYWNoZVtyXX0sb24ucHJvdG90eXBlLnNldEN1c3RvbUxheWVyRGVmYXVsdHM9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQudW5iaW5kVkFPKCksdGhpcy5jb250ZXh0LmN1bGxGYWNlLnNldERlZmF1bHQoKSx0aGlzLmNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXREZWZhdWx0KCksdGhpcy5jb250ZXh0LnBpeGVsU3RvcmVVbnBhY2suc2V0RGVmYXVsdCgpLHRoaXMuY29udGV4dC5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXREZWZhdWx0KCksdGhpcy5jb250ZXh0LnBpeGVsU3RvcmVVbnBhY2tGbGlwWS5zZXREZWZhdWx0KCl9LG9uLnByb3RvdHlwZS5zZXRCYXNlU3RhdGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2w7dGhpcy5jb250ZXh0LmN1bGxGYWNlLnNldCghMSksdGhpcy5jb250ZXh0LnZpZXdwb3J0LnNldChbMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHRdKSx0aGlzLmNvbnRleHQuYmxlbmRFcXVhdGlvbi5zZXQodC5GVU5DX0FERCl9O3ZhciB1bj1mdW5jdGlvbihlLHIsbil7dGhpcy50aWxlU2l6ZT01MTIsdGhpcy5tYXhWYWxpZExhdGl0dWRlPTg1LjA1MTEyOSx0aGlzLl9yZW5kZXJXb3JsZENvcGllcz12b2lkIDA9PT1ufHxuLHRoaXMuX21pblpvb209ZXx8MCx0aGlzLl9tYXhab29tPXJ8fDIyLHRoaXMuc2V0TWF4Qm91bmRzKCksdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsdGhpcy5fY2VudGVyPW5ldyB0LkxuZ0xhdCgwLDApLHRoaXMuem9vbT0wLHRoaXMuYW5nbGU9MCx0aGlzLl9mb3Y9LjY0MzUwMTEwODc5MzI4NDQsdGhpcy5fcGl0Y2g9MCx0aGlzLl91bm1vZGlmaWVkPSEwLHRoaXMuX3Bvc01hdHJpeENhY2hlPXt9LHRoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZT17fX0saG49e21pblpvb206e2NvbmZpZ3VyYWJsZTohMH0sbWF4Wm9vbTp7Y29uZmlndXJhYmxlOiEwfSxyZW5kZXJXb3JsZENvcGllczp7Y29uZmlndXJhYmxlOiEwfSx3b3JsZFNpemU6e2NvbmZpZ3VyYWJsZTohMH0sY2VudGVyUG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH0sc2l6ZTp7Y29uZmlndXJhYmxlOiEwfSxiZWFyaW5nOntjb25maWd1cmFibGU6ITB9LHBpdGNoOntjb25maWd1cmFibGU6ITB9LGZvdjp7Y29uZmlndXJhYmxlOiEwfSx6b29tOntjb25maWd1cmFibGU6ITB9LGNlbnRlcjp7Y29uZmlndXJhYmxlOiEwfSx1bm1vZGlmaWVkOntjb25maWd1cmFibGU6ITB9LHBvaW50Ontjb25maWd1cmFibGU6ITB9fTt1bi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgdW4odGhpcy5fbWluWm9vbSx0aGlzLl9tYXhab29tLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKTtyZXR1cm4gdC50aWxlU2l6ZT10aGlzLnRpbGVTaXplLHQubGF0UmFuZ2U9dGhpcy5sYXRSYW5nZSx0LndpZHRoPXRoaXMud2lkdGgsdC5oZWlnaHQ9dGhpcy5oZWlnaHQsdC5fY2VudGVyPXRoaXMuX2NlbnRlcix0Lnpvb209dGhpcy56b29tLHQuYW5nbGU9dGhpcy5hbmdsZSx0Ll9mb3Y9dGhpcy5fZm92LHQuX3BpdGNoPXRoaXMuX3BpdGNoLHQuX3VubW9kaWZpZWQ9dGhpcy5fdW5tb2RpZmllZCx0Ll9jYWxjTWF0cmljZXMoKSx0fSxobi5taW5ab29tLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5ab29tfSxobi5taW5ab29tLnNldD1mdW5jdGlvbih0KXt0aGlzLl9taW5ab29tIT09dCYmKHRoaXMuX21pblpvb209dCx0aGlzLnpvb209TWF0aC5tYXgodGhpcy56b29tLHQpKX0saG4ubWF4Wm9vbS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4Wm9vbX0saG4ubWF4Wm9vbS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fbWF4Wm9vbSE9PXQmJih0aGlzLl9tYXhab29tPXQsdGhpcy56b29tPU1hdGgubWluKHRoaXMuem9vbSx0KSl9LGhuLnJlbmRlcldvcmxkQ29waWVzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJXb3JsZENvcGllc30saG4ucmVuZGVyV29ybGRDb3BpZXMuc2V0PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQ/dD0hMDpudWxsPT09dCYmKHQ9ITEpLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzPXR9LGhuLndvcmxkU2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50aWxlU2l6ZSp0aGlzLnNjYWxlfSxobi5jZW50ZXJQb2ludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplLl9kaXYoMil9LGhuLnNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0LlBvaW50KHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfSxobi5iZWFyaW5nLmdldD1mdW5jdGlvbigpe3JldHVybi10aGlzLmFuZ2xlL01hdGguUEkqMTgwfSxobi5iZWFyaW5nLnNldD1mdW5jdGlvbihlKXt2YXIgcj0tdC53cmFwKGUsLTE4MCwxODApKk1hdGguUEkvMTgwO3RoaXMuYW5nbGUhPT1yJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLmFuZ2xlPXIsdGhpcy5fY2FsY01hdHJpY2VzKCksdGhpcy5yb3RhdGlvbk1hdHJpeD10LmNyZWF0ZSQyKCksdC5yb3RhdGUodGhpcy5yb3RhdGlvbk1hdHJpeCx0aGlzLnJvdGF0aW9uTWF0cml4LHRoaXMuYW5nbGUpKX0saG4ucGl0Y2guZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BpdGNoL01hdGguUEkqMTgwfSxobi5waXRjaC5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHI9dC5jbGFtcChlLDAsNjApLzE4MCpNYXRoLlBJO3RoaXMuX3BpdGNoIT09ciYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fcGl0Y2g9cix0aGlzLl9jYWxjTWF0cmljZXMoKSl9LGhuLmZvdi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm92L01hdGguUEkqMTgwfSxobi5mb3Yuc2V0PWZ1bmN0aW9uKHQpe3Q9TWF0aC5tYXgoLjAxLE1hdGgubWluKDYwLHQpKSx0aGlzLl9mb3YhPT10JiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9mb3Y9dC8xODAqTWF0aC5QSSx0aGlzLl9jYWxjTWF0cmljZXMoKSl9LGhuLnpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb219LGhuLnpvb20uc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWluKE1hdGgubWF4KHQsdGhpcy5taW5ab29tKSx0aGlzLm1heFpvb20pO3RoaXMuX3pvb20hPT1lJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl96b29tPWUsdGhpcy5zY2FsZT10aGlzLnpvb21TY2FsZShlKSx0aGlzLnRpbGVab29tPU1hdGguZmxvb3IoZSksdGhpcy56b29tRnJhY3Rpb249ZS10aGlzLnRpbGVab29tLHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0saG4uY2VudGVyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jZW50ZXJ9LGhuLmNlbnRlci5zZXQ9ZnVuY3Rpb24odCl7dC5sYXQ9PT10aGlzLl9jZW50ZXIubGF0JiZ0LmxuZz09PXRoaXMuX2NlbnRlci5sbmd8fCh0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2NlbnRlcj10LHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sdW4ucHJvdG90eXBlLmNvdmVyaW5nWm9vbUxldmVsPWZ1bmN0aW9uKHQpe3JldHVybih0LnJvdW5kWm9vbT9NYXRoLnJvdW5kOk1hdGguZmxvb3IpKHRoaXMuem9vbSt0aGlzLnNjYWxlWm9vbSh0aGlzLnRpbGVTaXplL3QudGlsZVNpemUpKX0sdW4ucHJvdG90eXBlLmdldFZpc2libGVVbndyYXBwZWRDb29yZGluYXRlcz1mdW5jdGlvbihlKXt2YXIgcj1bbmV3IHQuVW53cmFwcGVkVGlsZUlEKDAsZSldO2lmKHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKWZvcih2YXIgbj10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5Qb2ludCgwLDApKSxhPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LlBvaW50KHRoaXMud2lkdGgsMCkpLGk9dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuUG9pbnQodGhpcy53aWR0aCx0aGlzLmhlaWdodCkpLG89dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuUG9pbnQoMCx0aGlzLmhlaWdodCkpLHM9TWF0aC5mbG9vcihNYXRoLm1pbihuLngsYS54LGkueCxvLngpKSxsPU1hdGguZmxvb3IoTWF0aC5tYXgobi54LGEueCxpLngsby54KSksYz1zLTE7Yzw9bCsxO2MrKykwIT09YyYmci5wdXNoKG5ldyB0LlVud3JhcHBlZFRpbGVJRChjLGUpKTtyZXR1cm4gcn0sdW4ucHJvdG90eXBlLmNvdmVyaW5nVGlsZXM9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jb3ZlcmluZ1pvb21MZXZlbChlKSxuPXI7aWYodm9pZCAwIT09ZS5taW56b29tJiZyPGUubWluem9vbSlyZXR1cm5bXTt2b2lkIDAhPT1lLm1heHpvb20mJnI+ZS5tYXh6b29tJiYocj1lLm1heHpvb20pO3ZhciBhPXQuTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQodGhpcy5jZW50ZXIpLGk9TWF0aC5wb3coMixyKSxvPW5ldyB0LlBvaW50KGkqYS54LS41LGkqYS55LS41KTtyZXR1cm4gZnVuY3Rpb24oZSxyLG4sYSl7dm9pZCAwPT09YSYmKGE9ITApO3ZhciBpPTE8PGUsbz17fTtmdW5jdGlvbiBzKHIscyxsKXt2YXIgYyx1LGgsZjtpZihsPj0wJiZsPD1pKWZvcihjPXI7YzxzO2MrKyl1PU1hdGguZmxvb3IoYy9pKSxoPShjJWkraSklaSwwIT09dSYmITAhPT1hfHwoZj1uZXcgdC5PdmVyc2NhbGVkVGlsZUlEKG4sdSxlLGgsbCksb1tmLmtleV09Zil9dmFyIGw9ci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0LlBvaW50KGUueCxlLnkpLl9tdWx0KGkpfSk7cmV0dXJuIGNuKGxbMF0sbFsxXSxsWzJdLDAsaSxzKSxjbihsWzJdLGxbM10sbFswXSwwLGkscyksT2JqZWN0LmtleXMobykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvW3RdfSl9KHIsW3RoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LlBvaW50KDAsMCkpLHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LlBvaW50KHRoaXMud2lkdGgsMCkpLHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LlBvaW50KHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKSx0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5Qb2ludCgwLHRoaXMuaGVpZ2h0KSldLGUucmVwYXJzZU92ZXJzY2FsZWQ/bjpyLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uZGlzdCh0LmNhbm9uaWNhbCktby5kaXN0KGUuY2Fub25pY2FsKX0pfSx1bi5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQsZSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5waXhlbHNUb0dMVW5pdHM9WzIvdCwtMi9lXSx0aGlzLl9jb25zdHJhaW4oKSx0aGlzLl9jYWxjTWF0cmljZXMoKX0saG4udW5tb2RpZmllZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdW5tb2RpZmllZH0sdW4ucHJvdG90eXBlLnpvb21TY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMix0KX0sdW4ucHJvdG90eXBlLnNjYWxlWm9vbT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjJ9LHVuLnByb3RvdHlwZS5wcm9qZWN0PWZ1bmN0aW9uKGUpe3ZhciByPXQuY2xhbXAoZS5sYXQsLXRoaXMubWF4VmFsaWRMYXRpdHVkZSx0aGlzLm1heFZhbGlkTGF0aXR1ZGUpO3JldHVybiBuZXcgdC5Qb2ludCh0Lm1lcmNhdG9yWGZyb21MbmcoZS5sbmcpKnRoaXMud29ybGRTaXplLHQubWVyY2F0b3JZZnJvbUxhdChyKSp0aGlzLndvcmxkU2l6ZSl9LHVuLnByb3RvdHlwZS51bnByb2plY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZShlLngvdGhpcy53b3JsZFNpemUsZS55L3RoaXMud29ybGRTaXplKS50b0xuZ0xhdCgpfSxobi5wb2ludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9qZWN0KHRoaXMuY2VudGVyKX0sdW4ucHJvdG90eXBlLnNldExvY2F0aW9uQXRQb2ludD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMucG9pbnRDb29yZGluYXRlKHIpLGE9dGhpcy5wb2ludENvb3JkaW5hdGUodGhpcy5jZW50ZXJQb2ludCksaT10aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZShlKSxvPW5ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZShpLngtKG4ueC1hLngpLGkueS0obi55LWEueSkpO3RoaXMuY2VudGVyPXRoaXMuY29vcmRpbmF0ZUxvY2F0aW9uKG8pLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzJiYodGhpcy5jZW50ZXI9dGhpcy5jZW50ZXIud3JhcCgpKX0sdW4ucHJvdG90eXBlLmxvY2F0aW9uUG9pbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29vcmRpbmF0ZVBvaW50KHRoaXMubG9jYXRpb25Db29yZGluYXRlKHQpKX0sdW4ucHJvdG90eXBlLnBvaW50TG9jYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29vcmRpbmF0ZUxvY2F0aW9uKHRoaXMucG9pbnRDb29yZGluYXRlKHQpKX0sdW4ucHJvdG90eXBlLmxvY2F0aW9uQ29vcmRpbmF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5NZXJjYXRvckNvb3JkaW5hdGUuZnJvbUxuZ0xhdChlKX0sdW4ucHJvdG90eXBlLmNvb3JkaW5hdGVMb2NhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdC50b0xuZ0xhdCgpfSx1bi5wcm90b3R5cGUucG9pbnRDb29yZGluYXRlPWZ1bmN0aW9uKGUpe3ZhciByPVtlLngsZS55LDAsMV0sbj1bZS54LGUueSwxLDFdO3QudHJhbnNmb3JtTWF0NChyLHIsdGhpcy5waXhlbE1hdHJpeEludmVyc2UpLHQudHJhbnNmb3JtTWF0NChuLG4sdGhpcy5waXhlbE1hdHJpeEludmVyc2UpO3ZhciBhPXJbM10saT1uWzNdLG89clswXS9hLHM9blswXS9pLGw9clsxXS9hLGM9blsxXS9pLHU9clsyXS9hLGg9blsyXS9pLGY9dT09PWg/MDooMC11KS8oaC11KTtyZXR1cm4gbmV3IHQuTWVyY2F0b3JDb29yZGluYXRlKHQubnVtYmVyKG8scyxmKS90aGlzLndvcmxkU2l6ZSx0Lm51bWJlcihsLGMsZikvdGhpcy53b3JsZFNpemUpfSx1bi5wcm90b3R5cGUuY29vcmRpbmF0ZVBvaW50PWZ1bmN0aW9uKGUpe3ZhciByPVtlLngqdGhpcy53b3JsZFNpemUsZS55KnRoaXMud29ybGRTaXplLDAsMV07cmV0dXJuIHQudHJhbnNmb3JtTWF0NChyLHIsdGhpcy5waXhlbE1hdHJpeCksbmV3IHQuUG9pbnQoclswXS9yWzNdLHJbMV0vclszXSl9LHVuLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHQuTG5nTGF0Qm91bmRzKS5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyB0LlBvaW50KDAsMCkpKS5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyB0LlBvaW50KHRoaXMud2lkdGgsMCkpKS5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyB0LlBvaW50KHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKSkuZXh0ZW5kKHRoaXMucG9pbnRMb2NhdGlvbihuZXcgdC5Qb2ludCgwLHRoaXMuaGVpZ2h0KSkpfSx1bi5wcm90b3R5cGUuZ2V0TWF4Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF0UmFuZ2UmJjI9PT10aGlzLmxhdFJhbmdlLmxlbmd0aCYmdGhpcy5sbmdSYW5nZSYmMj09PXRoaXMubG5nUmFuZ2UubGVuZ3RoP25ldyB0LkxuZ0xhdEJvdW5kcyhbdGhpcy5sbmdSYW5nZVswXSx0aGlzLmxhdFJhbmdlWzBdXSxbdGhpcy5sbmdSYW5nZVsxXSx0aGlzLmxhdFJhbmdlWzFdXSk6bnVsbH0sdW4ucHJvdG90eXBlLnNldE1heEJvdW5kcz1mdW5jdGlvbih0KXt0Pyh0aGlzLmxuZ1JhbmdlPVt0LmdldFdlc3QoKSx0LmdldEVhc3QoKV0sdGhpcy5sYXRSYW5nZT1bdC5nZXRTb3V0aCgpLHQuZ2V0Tm9ydGgoKV0sdGhpcy5fY29uc3RyYWluKCkpOih0aGlzLmxuZ1JhbmdlPW51bGwsdGhpcy5sYXRSYW5nZT1bLXRoaXMubWF4VmFsaWRMYXRpdHVkZSx0aGlzLm1heFZhbGlkTGF0aXR1ZGVdKX0sdW4ucHJvdG90eXBlLmNhbGN1bGF0ZVBvc01hdHJpeD1mdW5jdGlvbihlLHIpe3ZvaWQgMD09PXImJihyPSExKTt2YXIgbj1lLmtleSxhPXI/dGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlOnRoaXMuX3Bvc01hdHJpeENhY2hlO2lmKGFbbl0pcmV0dXJuIGFbbl07dmFyIGk9ZS5jYW5vbmljYWwsbz10aGlzLndvcmxkU2l6ZS90aGlzLnpvb21TY2FsZShpLnopLHM9aS54K01hdGgucG93KDIsaS56KSplLndyYXAsbD10LmlkZW50aXR5KG5ldyBGbG9hdDY0QXJyYXkoMTYpKTtyZXR1cm4gdC50cmFuc2xhdGUobCxsLFtzKm8saS55Km8sMF0pLHQuc2NhbGUobCxsLFtvL3QuRVhURU5ULG8vdC5FWFRFTlQsMV0pLHQubXVsdGlwbHkobCxyP3RoaXMuYWxpZ25lZFByb2pNYXRyaXg6dGhpcy5wcm9qTWF0cml4LGwpLGFbbl09bmV3IEZsb2F0MzJBcnJheShsKSxhW25dfSx1bi5wcm90b3R5cGUuY3VzdG9tTGF5ZXJNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXJjYXRvck1hdHJpeC5zbGljZSgpfSx1bi5wcm90b3R5cGUuX2NvbnN0cmFpbj1mdW5jdGlvbigpe2lmKHRoaXMuY2VudGVyJiZ0aGlzLndpZHRoJiZ0aGlzLmhlaWdodCYmIXRoaXMuX2NvbnN0cmFpbmluZyl7dGhpcy5fY29uc3RyYWluaW5nPSEwO3ZhciBlLHIsbixhLGk9LTkwLG89OTAscz0tMTgwLGw9MTgwLGM9dGhpcy5zaXplLHU9dGhpcy5fdW5tb2RpZmllZDtpZih0aGlzLmxhdFJhbmdlKXt2YXIgaD10aGlzLmxhdFJhbmdlO2k9dC5tZXJjYXRvcllmcm9tTGF0KGhbMV0pKnRoaXMud29ybGRTaXplLGU9KG89dC5tZXJjYXRvcllmcm9tTGF0KGhbMF0pKnRoaXMud29ybGRTaXplKS1pPGMueT9jLnkvKG8taSk6MH1pZih0aGlzLmxuZ1JhbmdlKXt2YXIgZj10aGlzLmxuZ1JhbmdlO3M9dC5tZXJjYXRvclhmcm9tTG5nKGZbMF0pKnRoaXMud29ybGRTaXplLHI9KGw9dC5tZXJjYXRvclhmcm9tTG5nKGZbMV0pKnRoaXMud29ybGRTaXplKS1zPGMueD9jLngvKGwtcyk6MH12YXIgcD10aGlzLnBvaW50LGQ9TWF0aC5tYXgocnx8MCxlfHwwKTtpZihkKXJldHVybiB0aGlzLmNlbnRlcj10aGlzLnVucHJvamVjdChuZXcgdC5Qb2ludChyPyhsK3MpLzI6cC54LGU/KG8raSkvMjpwLnkpKSx0aGlzLnpvb20rPXRoaXMuc2NhbGVab29tKGQpLHRoaXMuX3VubW9kaWZpZWQ9dSx2b2lkKHRoaXMuX2NvbnN0cmFpbmluZz0hMSk7aWYodGhpcy5sYXRSYW5nZSl7dmFyIGc9cC55LHY9Yy55LzI7Zy12PGkmJihhPWkrdiksZyt2Pm8mJihhPW8tdil9aWYodGhpcy5sbmdSYW5nZSl7dmFyIG09cC54LHk9Yy54LzI7bS15PHMmJihuPXMreSksbSt5PmwmJihuPWwteSl9dm9pZCAwPT09biYmdm9pZCAwPT09YXx8KHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyB0LlBvaW50KHZvaWQgMCE9PW4/bjpwLngsdm9pZCAwIT09YT9hOnAueSkpKSx0aGlzLl91bm1vZGlmaWVkPXUsdGhpcy5fY29uc3RyYWluaW5nPSExfX0sdW4ucHJvdG90eXBlLl9jYWxjTWF0cmljZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmhlaWdodCl7dGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlPS41L01hdGgudGFuKHRoaXMuX2Zvdi8yKSp0aGlzLmhlaWdodDt2YXIgZT10aGlzLl9mb3YvMixyPU1hdGguUEkvMit0aGlzLl9waXRjaCxuPU1hdGguc2luKGUpKnRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9NYXRoLnNpbihNYXRoLlBJLXItZSksYT10aGlzLnBvaW50LGk9YS54LG89YS55LHM9MS4wMSooTWF0aC5jb3MoTWF0aC5QSS8yLXRoaXMuX3BpdGNoKSpuK3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSksbD10aGlzLmhlaWdodC81MCxjPW5ldyBGbG9hdDY0QXJyYXkoMTYpO3QucGVyc3BlY3RpdmUoYyx0aGlzLl9mb3YsdGhpcy53aWR0aC90aGlzLmhlaWdodCxsLHMpLHQuc2NhbGUoYyxjLFsxLC0xLDFdKSx0LnRyYW5zbGF0ZShjLGMsWzAsMCwtdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlXSksdC5yb3RhdGVYKGMsYyx0aGlzLl9waXRjaCksdC5yb3RhdGVaKGMsYyx0aGlzLmFuZ2xlKSx0LnRyYW5zbGF0ZShjLGMsWy1pLC1vLDBdKSx0aGlzLm1lcmNhdG9yTWF0cml4PXQuc2NhbGUoW10sYyxbdGhpcy53b3JsZFNpemUsdGhpcy53b3JsZFNpemUsdGhpcy53b3JsZFNpemVdKSx0LnNjYWxlKGMsYyxbMSwxLHQubWVyY2F0b3JaZnJvbUFsdGl0dWRlKDEsdGhpcy5jZW50ZXIubGF0KSp0aGlzLndvcmxkU2l6ZSwxXSksdGhpcy5wcm9qTWF0cml4PWM7dmFyIHU9dGhpcy53aWR0aCUyLzIsaD10aGlzLmhlaWdodCUyLzIsZj1NYXRoLmNvcyh0aGlzLmFuZ2xlKSxwPU1hdGguc2luKHRoaXMuYW5nbGUpLGQ9aS1NYXRoLnJvdW5kKGkpK2YqdStwKmgsZz1vLU1hdGgucm91bmQobykrZipoK3AqdSx2PW5ldyBGbG9hdDY0QXJyYXkoYyk7aWYodC50cmFuc2xhdGUodix2LFtkPi41P2QtMTpkLGc+LjU/Zy0xOmcsMF0pLHRoaXMuYWxpZ25lZFByb2pNYXRyaXg9dixjPXQuY3JlYXRlKCksdC5zY2FsZShjLGMsW3RoaXMud2lkdGgvMiwtdGhpcy5oZWlnaHQvMiwxXSksdC50cmFuc2xhdGUoYyxjLFsxLC0xLDBdKSx0aGlzLmxhYmVsUGxhbmVNYXRyaXg9YyxjPXQuY3JlYXRlKCksdC5zY2FsZShjLGMsWzEsLTEsMV0pLHQudHJhbnNsYXRlKGMsYyxbLTEsLTEsMF0pLHQuc2NhbGUoYyxjLFsyL3RoaXMud2lkdGgsMi90aGlzLmhlaWdodCwxXSksdGhpcy5nbENvb3JkTWF0cml4PWMsdGhpcy5waXhlbE1hdHJpeD10Lm11bHRpcGx5KG5ldyBGbG9hdDY0QXJyYXkoMTYpLHRoaXMubGFiZWxQbGFuZU1hdHJpeCx0aGlzLnByb2pNYXRyaXgpLCEoYz10LmludmVydChuZXcgRmxvYXQ2NEFycmF5KDE2KSx0aGlzLnBpeGVsTWF0cml4KSkpdGhyb3cgbmV3IEVycm9yKCJmYWlsZWQgdG8gaW52ZXJ0IG1hdHJpeCIpO3RoaXMucGl4ZWxNYXRyaXhJbnZlcnNlPWMsdGhpcy5fcG9zTWF0cml4Q2FjaGU9e30sdGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlPXt9fX0sdW4ucHJvdG90eXBlLm1heFBpdGNoU2NhbGVGYWN0b3I9ZnVuY3Rpb24oKXtpZighdGhpcy5waXhlbE1hdHJpeEludmVyc2UpcmV0dXJuIDE7dmFyIGU9dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuUG9pbnQoMCwwKSkscj1bZS54KnRoaXMud29ybGRTaXplLGUueSp0aGlzLndvcmxkU2l6ZSwwLDFdO3JldHVybiB0LnRyYW5zZm9ybU1hdDQocixyLHRoaXMucGl4ZWxNYXRyaXgpWzNdL3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZX0sdW4ucHJvdG90eXBlLmdldENhbWVyYVBvaW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcGl0Y2gscj1NYXRoLnRhbihlKSoodGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlfHwxKTtyZXR1cm4gdGhpcy5jZW50ZXJQb2ludC5hZGQobmV3IHQuUG9pbnQoMCxyKSl9LHVuLnByb3RvdHlwZS5nZXRDYW1lcmFRdWVyeUdlb21ldHJ5PWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuZ2V0Q2FtZXJhUG9pbnQoKTtpZigxPT09ZS5sZW5ndGgpcmV0dXJuW2VbMF0scl07Zm9yKHZhciBuPXIueCxhPXIueSxpPXIueCxvPXIueSxzPTAsbD1lO3M8bC5sZW5ndGg7cys9MSl7dmFyIGM9bFtzXTtuPU1hdGgubWluKG4sYy54KSxhPU1hdGgubWluKGEsYy55KSxpPU1hdGgubWF4KGksYy54KSxvPU1hdGgubWF4KG8sYy55KX1yZXR1cm5bbmV3IHQuUG9pbnQobixhKSxuZXcgdC5Qb2ludChpLGEpLG5ldyB0LlBvaW50KGksbyksbmV3IHQuUG9pbnQobixvKSxuZXcgdC5Qb2ludChuLGEpXX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXModW4ucHJvdG90eXBlLGhuKTt2YXIgZm49ZnVuY3Rpb24oKXt2YXIgZSxyLG4sYTt0LmJpbmRBbGwoWyJfb25IYXNoQ2hhbmdlIiwiX3VwZGF0ZUhhc2giXSx0aGlzKSx0aGlzLl91cGRhdGVIYXNoPShlPXRoaXMuX3VwZGF0ZUhhc2hVbnRocm90dGxlZC5iaW5kKHRoaXMpLDMwMCxyPSExLG49bnVsbCxhPWZ1bmN0aW9uKCl7bj1udWxsLHImJihlKCksbj1zZXRUaW1lb3V0KGEsMzAwKSxyPSExKX0sZnVuY3Rpb24oKXtyZXR1cm4gcj0hMCxufHxhKCksbn0pfTtmbi5wcm90b3R5cGUuYWRkVG89ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX21hcD1lLHQud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHRoaXMuX29uSGFzaENoYW5nZSwhMSksdGhpcy5fbWFwLm9uKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVIYXNoKSx0aGlzfSxmbi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHQud2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHRoaXMuX29uSGFzaENoYW5nZSwhMSksdGhpcy5fbWFwLm9mZigibW92ZWVuZCIsdGhpcy5fdXBkYXRlSGFzaCksY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZUhhc2goKSksZGVsZXRlIHRoaXMuX21hcCx0aGlzfSxmbi5wcm90b3R5cGUuZ2V0SGFzaFN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAuZ2V0Q2VudGVyKCkscj1NYXRoLnJvdW5kKDEwMCp0aGlzLl9tYXAuZ2V0Wm9vbSgpKS8xMDAsbj1NYXRoLmNlaWwoKHIqTWF0aC5MTjIrTWF0aC5sb2coNTEyLzM2MC8uNSkpL01hdGguTE4xMCksYT1NYXRoLnBvdygxMCxuKSxpPU1hdGgucm91bmQoZS5sbmcqYSkvYSxvPU1hdGgucm91bmQoZS5sYXQqYSkvYSxzPXRoaXMuX21hcC5nZXRCZWFyaW5nKCksbD10aGlzLl9tYXAuZ2V0UGl0Y2goKSxjPSIiO3JldHVybiBjKz10PyIjLyIraSsiLyIrbysiLyIrcjoiIyIrcisiLyIrbysiLyIraSwoc3x8bCkmJihjKz0iLyIrTWF0aC5yb3VuZCgxMCpzKS8xMCksbCYmKGMrPSIvIitNYXRoLnJvdW5kKGwpKSxjfSxmbi5wcm90b3R5cGUuX29uSGFzaENoYW5nZT1mdW5jdGlvbigpe3ZhciBlPXQud2luZG93LmxvY2F0aW9uLmhhc2gucmVwbGFjZSgiIyIsIiIpLnNwbGl0KCIvIik7cmV0dXJuIGUubGVuZ3RoPj0zJiYodGhpcy5fbWFwLmp1bXBUbyh7Y2VudGVyOlsrZVsyXSwrZVsxXV0sem9vbTorZVswXSxiZWFyaW5nOisoZVszXXx8MCkscGl0Y2g6KyhlWzRdfHwwKX0pLCEwKX0sZm4ucHJvdG90eXBlLl91cGRhdGVIYXNoVW50aHJvdHRsZWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEhhc2hTdHJpbmcoKTt0cnl7dC53aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUodC53aW5kb3cuaGlzdG9yeS5zdGF0ZSwiIixlKX1jYXRjaCh0KXt9fTt2YXIgcG49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLGEsaSxvKXt2b2lkIDA9PT1vJiYobz17fSk7dmFyIHM9ci5tb3VzZVBvcyhhLmdldENhbnZhc0NvbnRhaW5lcigpLGkpLGw9YS51bnByb2plY3Qocyk7ZS5jYWxsKHRoaXMsbix0LmV4dGVuZCh7cG9pbnQ6cyxsbmdMYXQ6bCxvcmlnaW5hbEV2ZW50Oml9LG8pKSx0aGlzLl9kZWZhdWx0UHJldmVudGVkPSExLHRoaXMudGFyZ2V0PWF9ZSYmKG4uX19wcm90b19fPWUpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW47dmFyIGE9e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiBuLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LGEuZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobi5wcm90b3R5cGUsYSksbn0odC5FdmVudCksZG49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLGEsaSl7dmFyIG89ci50b3VjaFBvcyhhLmdldENhbnZhc0NvbnRhaW5lcigpLGkpLHM9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGEudW5wcm9qZWN0KHQpfSksbD1vLnJlZHVjZShmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdC5hZGQoZS5kaXYobi5sZW5ndGgpKX0sbmV3IHQuUG9pbnQoMCwwKSksYz1hLnVucHJvamVjdChsKTtlLmNhbGwodGhpcyxuLHtwb2ludHM6byxwb2ludDpsLGxuZ0xhdHM6cyxsbmdMYXQ6YyxvcmlnaW5hbEV2ZW50Oml9KSx0aGlzLl9kZWZhdWx0UHJldmVudGVkPSExfWUmJihuLl9fcHJvdG9fXz1lKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uO3ZhciBhPXtkZWZhdWx0UHJldmVudGVkOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gbi5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0UHJldmVudGVkPSEwfSxhLmRlZmF1bHRQcmV2ZW50ZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4ucHJvdG90eXBlLGEpLG59KHQuRXZlbnQpLGduPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pe3QuY2FsbCh0aGlzLGUse29yaWdpbmFsRXZlbnQ6bn0pLHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITF9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2RlZmF1bHRQcmV2ZW50ZWQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiBlLnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ9ITB9LHIuZGVmYXVsdFByZXZlbnRlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0odC5FdmVudCksdm49ZnVuY3Rpb24oZSl7dGhpcy5fbWFwPWUsdGhpcy5fZWw9ZS5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9kZWx0YT0wLHRoaXMuX2RlZmF1bHRab29tUmF0ZT0uMDEsdGhpcy5fd2hlZWxab29tUmF0ZT0xLzQ1MCx0LmJpbmRBbGwoWyJfb25XaGVlbCIsIl9vblRpbWVvdXQiLCJfb25TY3JvbGxGcmFtZSIsIl9vblNjcm9sbEZpbmlzaGVkIl0sdGhpcyl9O3ZuLnByb3RvdHlwZS5zZXRab29tUmF0ZT1mdW5jdGlvbih0KXt0aGlzLl9kZWZhdWx0Wm9vbVJhdGU9dH0sdm4ucHJvdG90eXBlLnNldFdoZWVsWm9vbVJhdGU9ZnVuY3Rpb24odCl7dGhpcy5fd2hlZWxab29tUmF0ZT10fSx2bi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSx2bi5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2FjdGl2ZX0sdm4ucHJvdG90eXBlLmlzWm9vbWluZz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fem9vbWluZ30sdm4ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCx0aGlzLl9hcm91bmRDZW50ZXI9dCYmImNlbnRlciI9PT10LmFyb3VuZCl9LHZuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VuYWJsZWQ9ITEpfSx2bi5wcm90b3R5cGUub25XaGVlbD1mdW5jdGlvbihlKXtpZih0aGlzLmlzRW5hYmxlZCgpKXt2YXIgcj1lLmRlbHRhTW9kZT09PXQud2luZG93LldoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/NDAqZS5kZWx0YVk6ZS5kZWx0YVksbj10LmJyb3dzZXIubm93KCksYT1uLSh0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWV8fDApO3RoaXMuX2xhc3RXaGVlbEV2ZW50VGltZT1uLDAhPT1yJiZyJTQuMDAwMjQ0MTQwNjI1PT0wP3RoaXMuX3R5cGU9IndoZWVsIjowIT09ciYmTWF0aC5hYnMocik8ND90aGlzLl90eXBlPSJ0cmFja3BhZCI6YT40MDA/KHRoaXMuX3R5cGU9bnVsbCx0aGlzLl9sYXN0VmFsdWU9cix0aGlzLl90aW1lb3V0PXNldFRpbWVvdXQodGhpcy5fb25UaW1lb3V0LDQwLGUpKTp0aGlzLl90eXBlfHwodGhpcy5fdHlwZT1NYXRoLmFicyhhKnIpPDIwMD8idHJhY2twYWQiOiJ3aGVlbCIsdGhpcy5fdGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KSx0aGlzLl90aW1lb3V0PW51bGwscis9dGhpcy5fbGFzdFZhbHVlKSksZS5zaGlmdEtleSYmciYmKHIvPTQpLHRoaXMuX3R5cGUmJih0aGlzLl9sYXN0V2hlZWxFdmVudD1lLHRoaXMuX2RlbHRhLT1yLHRoaXMuaXNBY3RpdmUoKXx8dGhpcy5fc3RhcnQoZSkpLGUucHJldmVudERlZmF1bHQoKX19LHZuLnByb3RvdHlwZS5fb25UaW1lb3V0PWZ1bmN0aW9uKHQpe3RoaXMuX3R5cGU9IndoZWVsIix0aGlzLl9kZWx0YS09dGhpcy5fbGFzdFZhbHVlLHRoaXMuaXNBY3RpdmUoKXx8dGhpcy5fc3RhcnQodCl9LHZuLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5fZGVsdGEpe3RoaXMuX2ZyYW1lSWQmJih0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX2ZyYW1lSWQ9bnVsbCksdGhpcy5fYWN0aXZlPSEwLHRoaXMuaXNab29taW5nKCl8fCh0aGlzLl96b29taW5nPSEwLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KCJtb3Zlc3RhcnQiLHtvcmlnaW5hbEV2ZW50OmV9KSksdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoInpvb21zdGFydCIse29yaWdpbmFsRXZlbnQ6ZX0pKSksdGhpcy5fZmluaXNoVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX2ZpbmlzaFRpbWVvdXQpO3ZhciBuPXIubW91c2VQb3ModGhpcy5fZWwsZSk7dGhpcy5fYXJvdW5kPXQuTG5nTGF0LmNvbnZlcnQodGhpcy5fYXJvdW5kQ2VudGVyP3RoaXMuX21hcC5nZXRDZW50ZXIoKTp0aGlzLl9tYXAudW5wcm9qZWN0KG4pKSx0aGlzLl9hcm91bmRQb2ludD10aGlzLl9tYXAudHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQodGhpcy5fYXJvdW5kKSx0aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD10aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9vblNjcm9sbEZyYW1lKSl9fSx2bi5wcm90b3R5cGUuX29uU2Nyb2xsRnJhbWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLmlzQWN0aXZlKCkpe3ZhciByPXRoaXMuX21hcC50cmFuc2Zvcm07aWYoMCE9PXRoaXMuX2RlbHRhKXt2YXIgbj0id2hlZWwiPT09dGhpcy5fdHlwZSYmTWF0aC5hYnModGhpcy5fZGVsdGEpPjQuMDAwMjQ0MTQwNjI1P3RoaXMuX3doZWVsWm9vbVJhdGU6dGhpcy5fZGVmYXVsdFpvb21SYXRlLGE9Mi8oMStNYXRoLmV4cCgtTWF0aC5hYnModGhpcy5fZGVsdGEqbikpKTt0aGlzLl9kZWx0YTwwJiYwIT09YSYmKGE9MS9hKTt2YXIgaT0ibnVtYmVyIj09dHlwZW9mIHRoaXMuX3RhcmdldFpvb20/ci56b29tU2NhbGUodGhpcy5fdGFyZ2V0Wm9vbSk6ci5zY2FsZTt0aGlzLl90YXJnZXRab29tPU1hdGgubWluKHIubWF4Wm9vbSxNYXRoLm1heChyLm1pblpvb20sci5zY2FsZVpvb20oaSphKSkpLCJ3aGVlbCI9PT10aGlzLl90eXBlJiYodGhpcy5fc3RhcnRab29tPXIuem9vbSx0aGlzLl9lYXNpbmc9dGhpcy5fc21vb3RoT3V0RWFzaW5nKDIwMCkpLHRoaXMuX2RlbHRhPTB9dmFyIG89Im51bWJlciI9PXR5cGVvZiB0aGlzLl90YXJnZXRab29tP3RoaXMuX3RhcmdldFpvb206ci56b29tLHM9dGhpcy5fc3RhcnRab29tLGw9dGhpcy5fZWFzaW5nLGM9ITE7aWYoIndoZWVsIj09PXRoaXMuX3R5cGUmJnMmJmwpe3ZhciB1PU1hdGgubWluKCh0LmJyb3dzZXIubm93KCktdGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lKS8yMDAsMSksaD1sKHUpO3Iuem9vbT10Lm51bWJlcihzLG8saCksdTwxP3RoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uU2Nyb2xsRnJhbWUpKTpjPSEwfWVsc2Ugci56b29tPW8sYz0hMDtyLnNldExvY2F0aW9uQXRQb2ludCh0aGlzLl9hcm91bmQsdGhpcy5fYXJvdW5kUG9pbnQpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlIix7b3JpZ2luYWxFdmVudDp0aGlzLl9sYXN0V2hlZWxFdmVudH0pKSx0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudCgiem9vbSIse29yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdFdoZWVsRXZlbnR9KSksYyYmKHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9maW5pc2hUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl96b29taW5nPSExLGUuX21hcC5maXJlKG5ldyB0LkV2ZW50KCJ6b29tZW5kIix7b3JpZ2luYWxFdmVudDplLl9sYXN0V2hlZWxFdmVudH0pKSxlLl9tYXAuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIse29yaWdpbmFsRXZlbnQ6ZS5fbGFzdFdoZWVsRXZlbnR9KSksZGVsZXRlIGUuX3RhcmdldFpvb219LDIwMCkpfX0sdm4ucHJvdG90eXBlLl9zbW9vdGhPdXRFYXNpbmc9ZnVuY3Rpb24oZSl7dmFyIHI9dC5lYXNlO2lmKHRoaXMuX3ByZXZFYXNlKXt2YXIgbj10aGlzLl9wcmV2RWFzZSxhPSh0LmJyb3dzZXIubm93KCktbi5zdGFydCkvbi5kdXJhdGlvbixpPW4uZWFzaW5nKGErLjAxKS1uLmVhc2luZyhhKSxvPS4yNy9NYXRoLnNxcnQoaSppKzFlLTQpKi4wMSxzPU1hdGguc3FydCguMDcyOS1vKm8pO3I9dC5iZXppZXIobyxzLC4yNSwxKX1yZXR1cm4gdGhpcy5fcHJldkVhc2U9e3N0YXJ0OnQuYnJvd3Nlci5ub3coKSxkdXJhdGlvbjplLGVhc2luZzpyfSxyfTt2YXIgbW49ZnVuY3Rpb24oZSxyKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lcj1lLmdldENvbnRhaW5lcigpLHRoaXMuX2NsaWNrVG9sZXJhbmNlPXIuY2xpY2tUb2xlcmFuY2V8fDEsdC5iaW5kQWxsKFsiX29uTW91c2VNb3ZlIiwiX29uTW91c2VVcCIsIl9vbktleURvd24iXSx0aGlzKX07bW4ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sbW4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hY3RpdmV9LG1uLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCl9LG1uLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VuYWJsZWQ9ITEpfSxtbi5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24oZSl7dGhpcy5pc0VuYWJsZWQoKSYmZS5zaGlmdEtleSYmMD09PWUuYnV0dG9uJiYodC53aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSwhMSksdC53aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLCExKSx0LndpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXAsITEpLHIuZGlzYWJsZURyYWcoKSx0aGlzLl9zdGFydFBvcz10aGlzLl9sYXN0UG9zPXIubW91c2VQb3ModGhpcy5fZWwsZSksdGhpcy5fYWN0aXZlPSEwKX0sbW4ucHJvdG90eXBlLl9vbk1vdXNlTW92ZT1mdW5jdGlvbih0KXt2YXIgZT1yLm1vdXNlUG9zKHRoaXMuX2VsLHQpO2lmKCEodGhpcy5fbGFzdFBvcy5lcXVhbHMoZSl8fCF0aGlzLl9ib3gmJmUuZGlzdCh0aGlzLl9zdGFydFBvcyk8dGhpcy5fY2xpY2tUb2xlcmFuY2UpKXt2YXIgbj10aGlzLl9zdGFydFBvczt0aGlzLl9sYXN0UG9zPWUsdGhpcy5fYm94fHwodGhpcy5fYm94PXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1ib3h6b29tIix0aGlzLl9jb250YWluZXIpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jcm9zc2hhaXIiKSx0aGlzLl9maXJlRXZlbnQoImJveHpvb21zdGFydCIsdCkpO3ZhciBhPU1hdGgubWluKG4ueCxlLngpLGk9TWF0aC5tYXgobi54LGUueCksbz1NYXRoLm1pbihuLnksZS55KSxzPU1hdGgubWF4KG4ueSxlLnkpO3Iuc2V0VHJhbnNmb3JtKHRoaXMuX2JveCwidHJhbnNsYXRlKCIrYSsicHgsIitvKyJweCkiKSx0aGlzLl9ib3guc3R5bGUud2lkdGg9aS1hKyJweCIsdGhpcy5fYm94LnN0eWxlLmhlaWdodD1zLW8rInB4In19LG1uLnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKGUpe2lmKDA9PT1lLmJ1dHRvbil7dmFyIG49dGhpcy5fc3RhcnRQb3MsYT1yLm1vdXNlUG9zKHRoaXMuX2VsLGUpO3RoaXMuX2ZpbmlzaCgpLHIuc3VwcHJlc3NDbGljaygpLG4ueD09PWEueCYmbi55PT09YS55P3RoaXMuX2ZpcmVFdmVudCgiYm94em9vbWNhbmNlbCIsZSk6dGhpcy5fbWFwLmZpdFNjcmVlbkNvb3JkaW5hdGVzKG4sYSx0aGlzLl9tYXAuZ2V0QmVhcmluZygpLHtsaW5lYXI6ITB9KS5maXJlKG5ldyB0LkV2ZW50KCJib3h6b29tZW5kIix7b3JpZ2luYWxFdmVudDplfSkpfX0sbW4ucHJvdG90eXBlLl9vbktleURvd249ZnVuY3Rpb24odCl7Mjc9PT10LmtleUNvZGUmJih0aGlzLl9maW5pc2goKSx0aGlzLl9maXJlRXZlbnQoImJveHpvb21jYW5jZWwiLHQpKX0sbW4ucHJvdG90eXBlLl9maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsdC53aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSwhMSksdC53aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLCExKSx0LndpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXAsITEpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jcm9zc2hhaXIiKSx0aGlzLl9ib3gmJihyLnJlbW92ZSh0aGlzLl9ib3gpLHRoaXMuX2JveD1udWxsKSxyLmVuYWJsZURyYWcoKSxkZWxldGUgdGhpcy5fc3RhcnRQb3MsZGVsZXRlIHRoaXMuX2xhc3RQb3N9LG1uLnByb3RvdHlwZS5fZmlyZUV2ZW50PWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KGUse29yaWdpbmFsRXZlbnQ6cn0pKX07dmFyIHluPXQuYmV6aWVyKDAsMCwuMjUsMSkseG49ZnVuY3Rpb24oZSxyKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1yLmVsZW1lbnR8fGUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5fc3RhdGU9ImRpc2FibGVkIix0aGlzLl9idXR0b249ci5idXR0b258fCJyaWdodCIsdGhpcy5fYmVhcmluZ1NuYXA9ci5iZWFyaW5nU25hcHx8MCx0aGlzLl9waXRjaFdpdGhSb3RhdGU9ITEhPT1yLnBpdGNoV2l0aFJvdGF0ZSx0LmJpbmRBbGwoWyJvbk1vdXNlRG93biIsIl9vbk1vdXNlTW92ZSIsIl9vbk1vdXNlVXAiLCJfb25CbHVyIiwiX29uRHJhZ0ZyYW1lIl0sdGhpcyl9O3huLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4iZGlzYWJsZWQiIT09dGhpcy5fc3RhdGV9LHhuLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiJhY3RpdmUiPT09dGhpcy5fc3RhdGV9LHhuLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fc3RhdGU9ImVuYWJsZWQiKX0seG4ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW5hYmxlZCgpKXN3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZSJhY3RpdmUiOnRoaXMuX3N0YXRlPSJkaXNhYmxlZCIsdGhpcy5fdW5iaW5kKCksdGhpcy5fZGVhY3RpdmF0ZSgpLHRoaXMuX2ZpcmVFdmVudCgicm90YXRlZW5kIiksdGhpcy5fcGl0Y2hXaXRoUm90YXRlJiZ0aGlzLl9maXJlRXZlbnQoInBpdGNoZW5kIiksdGhpcy5fZmlyZUV2ZW50KCJtb3ZlZW5kIik7YnJlYWs7Y2FzZSJwZW5kaW5nIjp0aGlzLl9zdGF0ZT0iZGlzYWJsZWQiLHRoaXMuX3VuYmluZCgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fc3RhdGU9ImRpc2FibGVkIn19LHhuLnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihlKXtpZigiZW5hYmxlZCI9PT10aGlzLl9zdGF0ZSl7dmFyIG49InRvdWNoc3RhcnQiPT09ZS50eXBlO2lmKG4pdGhpcy5fc3RhcnRUaW1lPURhdGUubm93KCk7ZWxzZSBpZigicmlnaHQiPT09dGhpcy5fYnV0dG9uKXtpZih0aGlzLl9ldmVudEJ1dHRvbj1yLm1vdXNlQnV0dG9uKGUpLHRoaXMuX2V2ZW50QnV0dG9uIT09KGUuY3RybEtleT8wOjIpKXJldHVybn1lbHNle2lmKGUuY3RybEtleXx8MCE9PXIubW91c2VCdXR0b24oZSkpcmV0dXJuO3RoaXMuX2V2ZW50QnV0dG9uPTB9ci5kaXNhYmxlRHJhZygpLG4/KHQud2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUse2NhcHR1cmU6ITB9KSx0LndpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fb25Nb3VzZVVwKSk6KHQud2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUse2NhcHR1cmU6ITB9KSx0LndpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApKSx0LndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXIpLHRoaXMuX3N0YXRlPSJwZW5kaW5nIix0aGlzLl9pbmVydGlhPVtbdC5icm93c2VyLm5vdygpLHRoaXMuX21hcC5nZXRCZWFyaW5nKCldXSx0aGlzLl9zdGFydFBvcz10aGlzLl9wcmV2UG9zPXRoaXMuX2xhc3RQb3M9ci5tb3VzZVBvcyh0aGlzLl9lbCxlKSx0aGlzLl9jZW50ZXI9dGhpcy5fbWFwLnRyYW5zZm9ybS5jZW50ZXJQb2ludCxlLnByZXZlbnREZWZhdWx0KCl9fSx4bi5wcm90b3R5cGUuX29uTW91c2VNb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXIubW91c2VQb3ModGhpcy5fZWwsdCk7dGhpcy5fbGFzdFBvcy5lcXVhbHMoZSl8fCh0aGlzLl9sYXN0TW92ZUV2ZW50PXQsdGhpcy5fbGFzdFBvcz1lLCJwZW5kaW5nIj09PXRoaXMuX3N0YXRlJiYodGhpcy5fc3RhdGU9ImFjdGl2ZSIsdGhpcy5fZmlyZUV2ZW50KCJyb3RhdGVzdGFydCIsdCksdGhpcy5fZmlyZUV2ZW50KCJtb3Zlc3RhcnQiLHQpLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSYmdGhpcy5fZmlyZUV2ZW50KCJwaXRjaHN0YXJ0Iix0KSksdGhpcy5fZnJhbWVJZHx8KHRoaXMuX2ZyYW1lSWQ9dGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fb25EcmFnRnJhbWUpKSl9LHhuLnByb3RvdHlwZS5fb25EcmFnRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkPW51bGw7dmFyIGU9dGhpcy5fbGFzdE1vdmVFdmVudDtpZihlKXt2YXIgcj10aGlzLl9tYXAudHJhbnNmb3JtLG49dGhpcy5fcHJldlBvcyxhPXRoaXMuX2xhc3RQb3MsaT0uOCoobi54LWEueCksbz0tLjUqKG4ueS1hLnkpLHM9ci5iZWFyaW5nLWksbD1yLnBpdGNoLW8sYz10aGlzLl9pbmVydGlhLHU9Y1tjLmxlbmd0aC0xXTt0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSxjLnB1c2goW3QuYnJvd3Nlci5ub3coKSx0aGlzLl9tYXAuX25vcm1hbGl6ZUJlYXJpbmcocyx1WzFdKV0pLHIuYmVhcmluZz1zLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSYmKHRoaXMuX2ZpcmVFdmVudCgicGl0Y2giLGUpLHIucGl0Y2g9bCksdGhpcy5fZmlyZUV2ZW50KCJyb3RhdGUiLGUpLHRoaXMuX2ZpcmVFdmVudCgibW92ZSIsZSksZGVsZXRlIHRoaXMuX2xhc3RNb3ZlRXZlbnQsdGhpcy5fcHJldlBvcz10aGlzLl9sYXN0UG9zfX0seG4ucHJvdG90eXBlLl9vbk1vdXNlVXA9ZnVuY3Rpb24odCl7aWYoInRvdWNoZW5kIj09PXQudHlwZSYmdGhpcy5fc3RhcnRQb3M9PT10aGlzLl9sYXN0UG9zJiZEYXRlLm5vdygpLXRoaXMuX3N0YXJ0VGltZTwzMDAmJnRoaXMuX2VsLmNsaWNrKCksci5tb3VzZUJ1dHRvbih0KT09PXRoaXMuX2V2ZW50QnV0dG9uKXN3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZSJhY3RpdmUiOnRoaXMuX3N0YXRlPSJlbmFibGVkIixyLnN1cHByZXNzQ2xpY2soKSx0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5faW5lcnRpYWxSb3RhdGUodCk7YnJlYWs7Y2FzZSJwZW5kaW5nIjp0aGlzLl9zdGF0ZT0iZW5hYmxlZCIsdGhpcy5fdW5iaW5kKCl9fSx4bi5wcm90b3R5cGUuX29uQmx1cj1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5fc3RhdGUpe2Nhc2UiYWN0aXZlIjp0aGlzLl9zdGF0ZT0iZW5hYmxlZCIsdGhpcy5fdW5iaW5kKCksdGhpcy5fZGVhY3RpdmF0ZSgpLHRoaXMuX2ZpcmVFdmVudCgicm90YXRlZW5kIix0KSx0aGlzLl9waXRjaFdpdGhSb3RhdGUmJnRoaXMuX2ZpcmVFdmVudCgicGl0Y2hlbmQiLHQpLHRoaXMuX2ZpcmVFdmVudCgibW92ZWVuZCIsdCk7YnJlYWs7Y2FzZSJwZW5kaW5nIjp0aGlzLl9zdGF0ZT0iZW5hYmxlZCIsdGhpcy5fdW5iaW5kKCl9fSx4bi5wcm90b3R5cGUuX3VuYmluZD1mdW5jdGlvbigpe3Qud2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUse2NhcHR1cmU6ITB9KSx0LndpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApLHQud2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUse2NhcHR1cmU6ITB9KSx0LndpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fb25Nb3VzZVVwKSx0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXIpLHIuZW5hYmxlRHJhZygpfSx4bi5wcm90b3R5cGUuX2RlYWN0aXZhdGU9ZnVuY3Rpb24oKXt0aGlzLl9mcmFtZUlkJiYodGhpcy5fbWFwLl9jYW5jZWxSZW5kZXJGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLl9mcmFtZUlkPW51bGwpLGRlbGV0ZSB0aGlzLl9sYXN0TW92ZUV2ZW50LGRlbGV0ZSB0aGlzLl9zdGFydFBvcyxkZWxldGUgdGhpcy5fcHJldlBvcyxkZWxldGUgdGhpcy5fbGFzdFBvc30seG4ucHJvdG90eXBlLl9pbmVydGlhbFJvdGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2ZpcmVFdmVudCgicm90YXRlZW5kIix0KSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTt2YXIgcj10aGlzLl9tYXAsbj1yLmdldEJlYXJpbmcoKSxhPXRoaXMuX2luZXJ0aWEsaT1mdW5jdGlvbigpe01hdGguYWJzKG4pPGUuX2JlYXJpbmdTbmFwP3IucmVzZXROb3J0aCh7bm9Nb3ZlU3RhcnQ6ITB9LHtvcmlnaW5hbEV2ZW50OnR9KTplLl9maXJlRXZlbnQoIm1vdmVlbmQiLHQpLGUuX3BpdGNoV2l0aFJvdGF0ZSYmZS5fZmlyZUV2ZW50KCJwaXRjaGVuZCIsdCl9O2lmKGEubGVuZ3RoPDIpaSgpO2Vsc2V7dmFyIG89YVswXSxzPWFbYS5sZW5ndGgtMV0sbD1hW2EubGVuZ3RoLTJdLGM9ci5fbm9ybWFsaXplQmVhcmluZyhuLGxbMV0pLHU9c1sxXS1vWzFdLGg9dTwwPy0xOjEsZj0oc1swXS1vWzBdKS8xZTM7aWYoMCE9PXUmJjAhPT1mKXt2YXIgcD1NYXRoLmFicyh1KiguMjUvZikpO3A+MTgwJiYocD0xODApO3ZhciBkPXAvMTgwO2MrPWgqcCooZC8yKSxNYXRoLmFicyhyLl9ub3JtYWxpemVCZWFyaW5nKGMsMCkpPHRoaXMuX2JlYXJpbmdTbmFwJiYoYz1yLl9ub3JtYWxpemVCZWFyaW5nKDAsYykpLHIucm90YXRlVG8oYyx7ZHVyYXRpb246MWUzKmQsZWFzaW5nOnluLG5vTW92ZVN0YXJ0OiEwfSx7b3JpZ2luYWxFdmVudDp0fSl9ZWxzZSBpKCl9fSx4bi5wcm90b3R5cGUuX2ZpcmVFdmVudD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHI/e29yaWdpbmFsRXZlbnQ6cn06e30pKX0seG4ucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5faW5lcnRpYSxyPXQuYnJvd3Nlci5ub3coKTtlLmxlbmd0aD4wJiZyLWVbMF1bMF0+MTYwOyllLnNoaWZ0KCl9O3ZhciBibj10LmJlemllcigwLDAsLjMsMSksX249ZnVuY3Rpb24oZSxyKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD1lLmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX3N0YXRlPSJkaXNhYmxlZCIsdGhpcy5fY2xpY2tUb2xlcmFuY2U9ci5jbGlja1RvbGVyYW5jZXx8MSx0LmJpbmRBbGwoWyJfb25Nb3ZlIiwiX29uTW91c2VVcCIsIl9vblRvdWNoRW5kIiwiX29uQmx1ciIsIl9vbkRyYWdGcmFtZSJdLHRoaXMpfTtfbi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuImRpc2FibGVkIiE9PXRoaXMuX3N0YXRlfSxfbi5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4iYWN0aXZlIj09PXRoaXMuX3N0YXRlfSxfbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXRvdWNoLWRyYWctcGFuIiksdGhpcy5fc3RhdGU9ImVuYWJsZWQiKX0sX24ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW5hYmxlZCgpKXN3aXRjaCh0aGlzLl9lbC5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC10b3VjaC1kcmFnLXBhbiIpLHRoaXMuX3N0YXRlKXtjYXNlImFjdGl2ZSI6dGhpcy5fc3RhdGU9ImRpc2FibGVkIix0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5fZmlyZUV2ZW50KCJkcmFnZW5kIiksdGhpcy5fZmlyZUV2ZW50KCJtb3ZlZW5kIik7YnJlYWs7Y2FzZSJwZW5kaW5nIjp0aGlzLl9zdGF0ZT0iZGlzYWJsZWQiLHRoaXMuX3VuYmluZCgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fc3RhdGU9ImRpc2FibGVkIn19LF9uLnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihlKXsiZW5hYmxlZCI9PT10aGlzLl9zdGF0ZSYmKGUuY3RybEtleXx8MCE9PXIubW91c2VCdXR0b24oZSl8fChyLmFkZEV2ZW50TGlzdGVuZXIodC53aW5kb3cuZG9jdW1lbnQsIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3ZlLHtjYXB0dXJlOiEwfSksci5hZGRFdmVudExpc3RlbmVyKHQud2luZG93LmRvY3VtZW50LCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApLHRoaXMuX3N0YXJ0KGUpKSl9LF9uLnByb3RvdHlwZS5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24oZSl7ImVuYWJsZWQiPT09dGhpcy5fc3RhdGUmJihlLnRvdWNoZXMubGVuZ3RoPjF8fChyLmFkZEV2ZW50TGlzdGVuZXIodC53aW5kb3cuZG9jdW1lbnQsInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSxyLmFkZEV2ZW50TGlzdGVuZXIodC53aW5kb3cuZG9jdW1lbnQsInRvdWNoZW5kIix0aGlzLl9vblRvdWNoRW5kKSx0aGlzLl9zdGFydChlKSkpfSxfbi5wcm90b3R5cGUuX3N0YXJ0PWZ1bmN0aW9uKGUpe3Qud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX29uQmx1ciksdGhpcy5fc3RhdGU9InBlbmRpbmciLHRoaXMuX3N0YXJ0UG9zPXRoaXMuX21vdXNlRG93blBvcz10aGlzLl9wcmV2UG9zPXRoaXMuX2xhc3RQb3M9ci5tb3VzZVBvcyh0aGlzLl9lbCxlKSx0aGlzLl9pbmVydGlhPVtbdC5icm93c2VyLm5vdygpLHRoaXMuX3N0YXJ0UG9zXV19LF9uLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTt2YXIgbj1yLm1vdXNlUG9zKHRoaXMuX2VsLGUpO3RoaXMuX2xhc3RQb3MuZXF1YWxzKG4pfHwicGVuZGluZyI9PT10aGlzLl9zdGF0ZSYmbi5kaXN0KHRoaXMuX21vdXNlRG93blBvcyk8dGhpcy5fY2xpY2tUb2xlcmFuY2V8fCh0aGlzLl9sYXN0TW92ZUV2ZW50PWUsdGhpcy5fbGFzdFBvcz1uLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpLHRoaXMuX2luZXJ0aWEucHVzaChbdC5icm93c2VyLm5vdygpLHRoaXMuX2xhc3RQb3NdKSwicGVuZGluZyI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPSJhY3RpdmUiLHRoaXMuX2ZpcmVFdmVudCgiZHJhZ3N0YXJ0IixlKSx0aGlzLl9maXJlRXZlbnQoIm1vdmVzdGFydCIsZSkpLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uRHJhZ0ZyYW1lKSkpfSxfbi5wcm90b3R5cGUuX29uRHJhZ0ZyYW1lPWZ1bmN0aW9uKCl7dGhpcy5fZnJhbWVJZD1udWxsO3ZhciB0PXRoaXMuX2xhc3RNb3ZlRXZlbnQ7aWYodCl7dmFyIGU9dGhpcy5fbWFwLnRyYW5zZm9ybTtlLnNldExvY2F0aW9uQXRQb2ludChlLnBvaW50TG9jYXRpb24odGhpcy5fcHJldlBvcyksdGhpcy5fbGFzdFBvcyksdGhpcy5fZmlyZUV2ZW50KCJkcmFnIix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmUiLHQpLHRoaXMuX3ByZXZQb3M9dGhpcy5fbGFzdFBvcyxkZWxldGUgdGhpcy5fbGFzdE1vdmVFdmVudH19LF9uLnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKHQpe2lmKDA9PT1yLm1vdXNlQnV0dG9uKHQpKXN3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZSJhY3RpdmUiOnRoaXMuX3N0YXRlPSJlbmFibGVkIixyLnN1cHByZXNzQ2xpY2soKSx0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5faW5lcnRpYWxQYW4odCk7YnJlYWs7Y2FzZSJwZW5kaW5nIjp0aGlzLl9zdGF0ZT0iZW5hYmxlZCIsdGhpcy5fdW5iaW5kKCl9fSxfbi5wcm90b3R5cGUuX29uVG91Y2hFbmQ9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuX3N0YXRlKXtjYXNlImFjdGl2ZSI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHRoaXMuX3VuYmluZCgpLHRoaXMuX2RlYWN0aXZhdGUoKSx0aGlzLl9pbmVydGlhbFBhbih0KTticmVhaztjYXNlInBlbmRpbmciOnRoaXMuX3N0YXRlPSJlbmFibGVkIix0aGlzLl91bmJpbmQoKX19LF9uLnByb3RvdHlwZS5fb25CbHVyPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLl9zdGF0ZSl7Y2FzZSJhY3RpdmUiOnRoaXMuX3N0YXRlPSJlbmFibGVkIix0aGlzLl91bmJpbmQoKSx0aGlzLl9kZWFjdGl2YXRlKCksdGhpcy5fZmlyZUV2ZW50KCJkcmFnZW5kIix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmVlbmQiLHQpO2JyZWFrO2Nhc2UicGVuZGluZyI6dGhpcy5fc3RhdGU9ImVuYWJsZWQiLHRoaXMuX3VuYmluZCgpfX0sX24ucHJvdG90eXBlLl91bmJpbmQ9ZnVuY3Rpb24oKXtyLnJlbW92ZUV2ZW50TGlzdGVuZXIodC53aW5kb3cuZG9jdW1lbnQsInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodC53aW5kb3cuZG9jdW1lbnQsInRvdWNoZW5kIix0aGlzLl9vblRvdWNoRW5kKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodC53aW5kb3cuZG9jdW1lbnQsIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3ZlLHtjYXB0dXJlOiEwfSksci5yZW1vdmVFdmVudExpc3RlbmVyKHQud2luZG93LmRvY3VtZW50LCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LndpbmRvdywiYmx1ciIsdGhpcy5fb25CbHVyKX0sX24ucHJvdG90eXBlLl9kZWFjdGl2YXRlPWZ1bmN0aW9uKCl7dGhpcy5fZnJhbWVJZCYmKHRoaXMuX21hcC5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZnJhbWVJZCksdGhpcy5fZnJhbWVJZD1udWxsKSxkZWxldGUgdGhpcy5fbGFzdE1vdmVFdmVudCxkZWxldGUgdGhpcy5fc3RhcnRQb3MsZGVsZXRlIHRoaXMuX3ByZXZQb3MsZGVsZXRlIHRoaXMuX21vdXNlRG93blBvcyxkZWxldGUgdGhpcy5fbGFzdFBvc30sX24ucHJvdG90eXBlLl9pbmVydGlhbFBhbj1mdW5jdGlvbih0KXt0aGlzLl9maXJlRXZlbnQoImRyYWdlbmQiLHQpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO3ZhciBlPXRoaXMuX2luZXJ0aWE7aWYoZS5sZW5ndGg8Mil0aGlzLl9maXJlRXZlbnQoIm1vdmVlbmQiLHQpO2Vsc2V7dmFyIHI9ZVtlLmxlbmd0aC0xXSxuPWVbMF0sYT1yWzFdLnN1YihuWzFdKSxpPShyWzBdLW5bMF0pLzFlMztpZigwPT09aXx8clsxXS5lcXVhbHMoblsxXSkpdGhpcy5fZmlyZUV2ZW50KCJtb3ZlZW5kIix0KTtlbHNle3ZhciBvPWEubXVsdCguMy9pKSxzPW8ubWFnKCk7cz4xNDAwJiYocz0xNDAwLG8uX3VuaXQoKS5fbXVsdChzKSk7dmFyIGw9cy83NTAsYz1vLm11bHQoLWwvMik7dGhpcy5fbWFwLnBhbkJ5KGMse2R1cmF0aW9uOjFlMypsLGVhc2luZzpibixub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6dH0pfX19LF9uLnByb3RvdHlwZS5fZmlyZUV2ZW50PWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KGUscj97b3JpZ2luYWxFdmVudDpyfTp7fSkpfSxfbi5wcm90b3R5cGUuX2RyYWluSW5lcnRpYUJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLl9pbmVydGlhLHI9dC5icm93c2VyLm5vdygpO2UubGVuZ3RoPjAmJnItZVswXVswXT4xNjA7KWUuc2hpZnQoKX07dmFyIHduPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdC5iaW5kQWxsKFsiX29uS2V5RG93biJdLHRoaXMpfTtmdW5jdGlvbiBrbih0KXtyZXR1cm4gdCooMi10KX13bi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSx3bi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biwhMSksdGhpcy5fZW5hYmxlZD0hMCl9LHduLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biksdGhpcy5fZW5hYmxlZD0hMSl9LHduLnByb3RvdHlwZS5fb25LZXlEb3duPWZ1bmN0aW9uKHQpe2lmKCEodC5hbHRLZXl8fHQuY3RybEtleXx8dC5tZXRhS2V5KSl7dmFyIGU9MCxyPTAsbj0wLGE9MCxpPTA7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA2MTpjYXNlIDEwNzpjYXNlIDE3MTpjYXNlIDE4NzplPTE7YnJlYWs7Y2FzZSAxODk6Y2FzZSAxMDk6Y2FzZSAxNzM6ZT0tMTticmVhaztjYXNlIDM3OnQuc2hpZnRLZXk/cj0tMToodC5wcmV2ZW50RGVmYXVsdCgpLGE9LTEpO2JyZWFrO2Nhc2UgMzk6dC5zaGlmdEtleT9yPTE6KHQucHJldmVudERlZmF1bHQoKSxhPTEpO2JyZWFrO2Nhc2UgMzg6dC5zaGlmdEtleT9uPTE6KHQucHJldmVudERlZmF1bHQoKSxpPS0xKTticmVhaztjYXNlIDQwOnQuc2hpZnRLZXk/bj0tMTooaT0xLHQucHJldmVudERlZmF1bHQoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59dmFyIG89dGhpcy5fbWFwLHM9by5nZXRab29tKCksbD17ZHVyYXRpb246MzAwLGRlbGF5RW5kRXZlbnRzOjUwMCxlYXNpbmc6a24sem9vbTplP01hdGgucm91bmQocykrZSoodC5zaGlmdEtleT8yOjEpOnMsYmVhcmluZzpvLmdldEJlYXJpbmcoKSsxNSpyLHBpdGNoOm8uZ2V0UGl0Y2goKSsxMCpuLG9mZnNldDpbMTAwKi1hLDEwMCotaV0sY2VudGVyOm8uZ2V0Q2VudGVyKCl9O28uZWFzZVRvKGwse29yaWdpbmFsRXZlbnQ6dH0pfX07dmFyIFRuPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHQuYmluZEFsbChbIl9vbkRibENsaWNrIiwiX29uWm9vbUVuZCJdLHRoaXMpfTtUbi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lbmFibGVkfSxUbi5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2FjdGl2ZX0sVG4ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbmFibGVkPSEwKX0sVG4ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZW5hYmxlZD0hMSl9LFRuLnByb3RvdHlwZS5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLmlzRW5hYmxlZCgpJiYhKHQucG9pbnRzLmxlbmd0aD4xKSlpZih0aGlzLl90YXBwZWQpe3ZhciByPXQucG9pbnRzWzBdLG49dGhpcy5fdGFwcGVkUG9pbnQ7aWYobiYmbi5kaXN0KHIpPD0zMCl7dC5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7dmFyIGE9ZnVuY3Rpb24oKXtlLl90YXBwZWQmJmUuX3pvb20odCksZS5fbWFwLm9mZigidG91Y2hjYW5jZWwiLGkpLGUuX3Jlc2V0VGFwcGVkKCl9LGk9ZnVuY3Rpb24oKXtlLl9tYXAub2ZmKCJ0b3VjaGVuZCIsYSksZS5fcmVzZXRUYXBwZWQoKX07dGhpcy5fbWFwLm9uY2UoInRvdWNoZW5kIixhKSx0aGlzLl9tYXAub25jZSgidG91Y2hjYW5jZWwiLGkpfWVsc2UgdGhpcy5fcmVzZXRUYXBwZWQoKX1lbHNlIHRoaXMuX3RhcHBlZFBvaW50PXQucG9pbnRzWzBdLHRoaXMuX3RhcHBlZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5fdGFwcGVkPW51bGwsZS5fdGFwcGVkUG9pbnQ9bnVsbH0sMzAwKX0sVG4ucHJvdG90eXBlLl9yZXNldFRhcHBlZD1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLl90YXBwZWQpLHRoaXMuX3RhcHBlZD1udWxsLHRoaXMuX3RhcHBlZFBvaW50PW51bGx9LFRuLnByb3RvdHlwZS5vbkRibENsaWNrPWZ1bmN0aW9uKHQpe3RoaXMuaXNFbmFibGVkKCkmJih0Lm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKSx0aGlzLl96b29tKHQpKX0sVG4ucHJvdG90eXBlLl96b29tPWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZT0hMCx0aGlzLl9tYXAub24oInpvb21lbmQiLHRoaXMuX29uWm9vbUVuZCksdGhpcy5fbWFwLnpvb21Ubyh0aGlzLl9tYXAuZ2V0Wm9vbSgpKyh0Lm9yaWdpbmFsRXZlbnQuc2hpZnRLZXk/LTE6MSkse2Fyb3VuZDp0LmxuZ0xhdH0sdCl9LFRuLnByb3RvdHlwZS5fb25ab29tRW5kPWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLHRoaXMuX21hcC5vZmYoInpvb21lbmQiLHRoaXMuX29uWm9vbUVuZCl9O3ZhciBNbj10LmJlemllcigwLDAsLjE1LDEpLEFuPWZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdC5iaW5kQWxsKFsiX29uTW92ZSIsIl9vbkVuZCIsIl9vblRvdWNoRnJhbWUiXSx0aGlzKX07QW4ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sQW4ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZWwuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtdG91Y2gtem9vbS1yb3RhdGUiKSx0aGlzLl9lbmFibGVkPSEwLHRoaXMuX2Fyb3VuZENlbnRlcj0hIXQmJiJjZW50ZXIiPT09dC5hcm91bmQpfSxBbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9lbC5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZSIpLHRoaXMuX2VuYWJsZWQ9ITEpfSxBbi5wcm90b3R5cGUuZGlzYWJsZVJvdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fcm90YXRpb25EaXNhYmxlZD0hMH0sQW4ucHJvdG90eXBlLmVuYWJsZVJvdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5fcm90YXRpb25EaXNhYmxlZD0hMX0sQW4ucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5pc0VuYWJsZWQoKSYmMj09PWUudG91Y2hlcy5sZW5ndGgpe3ZhciBuPXIubW91c2VQb3ModGhpcy5fZWwsZS50b3VjaGVzWzBdKSxhPXIubW91c2VQb3ModGhpcy5fZWwsZS50b3VjaGVzWzFdKSxpPW4uYWRkKGEpLmRpdigyKTt0aGlzLl9zdGFydFZlYz1uLnN1YihhKSx0aGlzLl9zdGFydEFyb3VuZD10aGlzLl9tYXAudHJhbnNmb3JtLnBvaW50TG9jYXRpb24oaSksdGhpcy5fZ2VzdHVyZUludGVudD12b2lkIDAsdGhpcy5faW5lcnRpYT1bXSxyLmFkZEV2ZW50TGlzdGVuZXIodC53aW5kb3cuZG9jdW1lbnQsInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlLHtwYXNzaXZlOiExfSksci5hZGRFdmVudExpc3RlbmVyKHQud2luZG93LmRvY3VtZW50LCJ0b3VjaGVuZCIsdGhpcy5fb25FbmQpfX0sQW4ucHJvdG90eXBlLl9nZXRUb3VjaEV2ZW50RGF0YT1mdW5jdGlvbih0KXt2YXIgZT1yLm1vdXNlUG9zKHRoaXMuX2VsLHQudG91Y2hlc1swXSksbj1yLm1vdXNlUG9zKHRoaXMuX2VsLHQudG91Y2hlc1sxXSksYT1lLnN1YihuKTtyZXR1cm57dmVjOmEsY2VudGVyOmUuYWRkKG4pLmRpdigyKSxzY2FsZTphLm1hZygpL3RoaXMuX3N0YXJ0VmVjLm1hZygpLGJlYXJpbmc6dGhpcy5fcm90YXRpb25EaXNhYmxlZD8wOjE4MCphLmFuZ2xlV2l0aCh0aGlzLl9zdGFydFZlYykvTWF0aC5QSX19LEFuLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKGUpe2lmKDI9PT1lLnRvdWNoZXMubGVuZ3RoKXt2YXIgcj10aGlzLl9nZXRUb3VjaEV2ZW50RGF0YShlKSxuPXIudmVjLGE9ci5zY2FsZSxpPXIuYmVhcmluZztpZighdGhpcy5fZ2VzdHVyZUludGVudCl7dmFyIG89dGhpcy5fcm90YXRpb25EaXNhYmxlZCYmMSE9PWF8fE1hdGguYWJzKDEtYSk+LjE1O01hdGguYWJzKGkpPjEwP3RoaXMuX2dlc3R1cmVJbnRlbnQ9InJvdGF0ZSI6byYmKHRoaXMuX2dlc3R1cmVJbnRlbnQ9Inpvb20iKSx0aGlzLl9nZXN0dXJlSW50ZW50JiYodGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQodGhpcy5fZ2VzdHVyZUludGVudCsic3RhcnQiLHtvcmlnaW5hbEV2ZW50OmV9KSksdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVzdGFydCIse29yaWdpbmFsRXZlbnQ6ZX0pKSx0aGlzLl9zdGFydFZlYz1uKX10aGlzLl9sYXN0VG91Y2hFdmVudD1lLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPXRoaXMuX21hcC5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX29uVG91Y2hGcmFtZSkpLGUucHJldmVudERlZmF1bHQoKX19LEFuLnByb3RvdHlwZS5fb25Ub3VjaEZyYW1lPWZ1bmN0aW9uKCl7dGhpcy5fZnJhbWVJZD1udWxsO3ZhciBlPXRoaXMuX2dlc3R1cmVJbnRlbnQ7aWYoZSl7dmFyIHI9dGhpcy5fbWFwLnRyYW5zZm9ybTt0aGlzLl9zdGFydFNjYWxlfHwodGhpcy5fc3RhcnRTY2FsZT1yLnNjYWxlLHRoaXMuX3N0YXJ0QmVhcmluZz1yLmJlYXJpbmcpO3ZhciBuPXRoaXMuX2dldFRvdWNoRXZlbnREYXRhKHRoaXMuX2xhc3RUb3VjaEV2ZW50KSxhPW4uY2VudGVyLGk9bi5iZWFyaW5nLG89bi5zY2FsZSxzPXIucG9pbnRMb2NhdGlvbihhKSxsPXIubG9jYXRpb25Qb2ludChzKTsicm90YXRlIj09PWUmJihyLmJlYXJpbmc9dGhpcy5fc3RhcnRCZWFyaW5nK2kpLHIuem9vbT1yLnNjYWxlWm9vbSh0aGlzLl9zdGFydFNjYWxlKm8pLHIuc2V0TG9jYXRpb25BdFBvaW50KHRoaXMuX3N0YXJ0QXJvdW5kLGwpLHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KGUse29yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdFRvdWNoRXZlbnR9KSksdGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoIm1vdmUiLHtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RUb3VjaEV2ZW50fSkpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpLHRoaXMuX2luZXJ0aWEucHVzaChbdC5icm93c2VyLm5vdygpLG8sYV0pfX0sQW4ucHJvdG90eXBlLl9vbkVuZD1mdW5jdGlvbihlKXtyLnJlbW92ZUV2ZW50TGlzdGVuZXIodC53aW5kb3cuZG9jdW1lbnQsInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlLHtwYXNzaXZlOiExfSksci5yZW1vdmVFdmVudExpc3RlbmVyKHQud2luZG93LmRvY3VtZW50LCJ0b3VjaGVuZCIsdGhpcy5fb25FbmQpO3ZhciBuPXRoaXMuX2dlc3R1cmVJbnRlbnQsYT10aGlzLl9zdGFydFNjYWxlO2lmKHRoaXMuX2ZyYW1lSWQmJih0aGlzLl9tYXAuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuX2ZyYW1lSWQ9bnVsbCksZGVsZXRlIHRoaXMuX2dlc3R1cmVJbnRlbnQsZGVsZXRlIHRoaXMuX3N0YXJ0U2NhbGUsZGVsZXRlIHRoaXMuX3N0YXJ0QmVhcmluZyxkZWxldGUgdGhpcy5fbGFzdFRvdWNoRXZlbnQsbil7dGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQobisiZW5kIix7b3JpZ2luYWxFdmVudDplfSkpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO3ZhciBpPXRoaXMuX2luZXJ0aWEsbz10aGlzLl9tYXA7aWYoaS5sZW5ndGg8MilvLnNuYXBUb05vcnRoKHt9LHtvcmlnaW5hbEV2ZW50OmV9KTtlbHNle3ZhciBzPWlbaS5sZW5ndGgtMV0sbD1pWzBdLGM9by50cmFuc2Zvcm0uc2NhbGVab29tKGEqc1sxXSksdT1vLnRyYW5zZm9ybS5zY2FsZVpvb20oYSpsWzFdKSxoPWMtdSxmPShzWzBdLWxbMF0pLzFlMyxwPXNbMl07aWYoMCE9PWYmJmMhPT11KXt2YXIgZD0uMTUqaC9mO01hdGguYWJzKGQpPjIuNSYmKGQ9ZD4wPzIuNTotMi41KTt2YXIgZz0xZTMqTWF0aC5hYnMoZC8oMTIqLjE1KSksdj1jK2QqZy8yZTM7djwwJiYodj0wKSxvLmVhc2VUbyh7em9vbTp2LGR1cmF0aW9uOmcsZWFzaW5nOk1uLGFyb3VuZDp0aGlzLl9hcm91bmRDZW50ZXI/by5nZXRDZW50ZXIoKTpvLnVucHJvamVjdChwKSxub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6ZX0pfWVsc2Ugby5zbmFwVG9Ob3J0aCh7fSx7b3JpZ2luYWxFdmVudDplfSl9fX0sQW4ucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5faW5lcnRpYSxyPXQuYnJvd3Nlci5ub3coKTtlLmxlbmd0aD4yJiZyLWVbMF1bMF0+MTYwOyllLnNoaWZ0KCl9O3ZhciBTbj17c2Nyb2xsWm9vbTp2bixib3hab29tOm1uLGRyYWdSb3RhdGU6eG4sZHJhZ1BhbjpfbixrZXlib2FyZDp3bixkb3VibGVDbGlja1pvb206VG4sdG91Y2hab29tUm90YXRlOkFufSxFbj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbil7ZS5jYWxsKHRoaXMpLHRoaXMuX21vdmluZz0hMSx0aGlzLl96b29taW5nPSExLHRoaXMudHJhbnNmb3JtPXIsdGhpcy5fYmVhcmluZ1NuYXA9bi5iZWFyaW5nU25hcCx0LmJpbmRBbGwoWyJfcmVuZGVyRnJhbWVDYWxsYmFjayJdLHRoaXMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQuTG5nTGF0KHRoaXMudHJhbnNmb3JtLmNlbnRlci5sbmcsdGhpcy50cmFuc2Zvcm0uY2VudGVyLmxhdCl9LHIucHJvdG90eXBlLnNldENlbnRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7Y2VudGVyOnR9LGUpfSxyLnByb3RvdHlwZS5wYW5CeT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9dC5Qb2ludC5jb252ZXJ0KGUpLm11bHQoLTEpLHRoaXMucGFuVG8odGhpcy50cmFuc2Zvcm0uY2VudGVyLHQuZXh0ZW5kKHtvZmZzZXQ6ZX0sciksbil9LHIucHJvdG90eXBlLnBhblRvPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe2NlbnRlcjplfSxyKSxuKX0sci5wcm90b3R5cGUuZ2V0Wm9vbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS56b29tfSxyLnByb3RvdHlwZS5zZXRab29tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHt6b29tOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21Ubz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHt6b29tOmV9LHIpLG4pfSxyLnByb3RvdHlwZS56b29tSW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCkrMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLnpvb21PdXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCktMSx0LGUpLHRoaXN9LHIucHJvdG90eXBlLmdldEJlYXJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uYmVhcmluZ30sci5wcm90b3R5cGUuc2V0QmVhcmluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7YmVhcmluZzp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS5yb3RhdGVUbz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHtiZWFyaW5nOmV9LHIpLG4pfSxyLnByb3RvdHlwZS5yZXNldE5vcnRoPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMucm90YXRlVG8oMCx0LmV4dGVuZCh7ZHVyYXRpb246MWUzfSxlKSxyKSx0aGlzfSxyLnByb3RvdHlwZS5yZXNldE5vcnRoUGl0Y2g9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe2JlYXJpbmc6MCxwaXRjaDowLGR1cmF0aW9uOjFlM30sZSksciksdGhpc30sci5wcm90b3R5cGUuc25hcFRvTm9ydGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModGhpcy5nZXRCZWFyaW5nKCkpPHRoaXMuX2JlYXJpbmdTbmFwP3RoaXMucmVzZXROb3J0aCh0LGUpOnRoaXN9LHIucHJvdG90eXBlLmdldFBpdGNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnBpdGNofSxyLnByb3RvdHlwZS5zZXRQaXRjaD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7cGl0Y2g6dH0sZSksdGhpc30sci5wcm90b3R5cGUuY2FtZXJhRm9yQm91bmRzPWZ1bmN0aW9uKGUscil7cmV0dXJuIGU9dC5MbmdMYXRCb3VuZHMuY29udmVydChlKSx0aGlzLl9jYW1lcmFGb3JCb3hBbmRCZWFyaW5nKGUuZ2V0Tm9ydGhXZXN0KCksZS5nZXRTb3V0aEVhc3QoKSwwLHIpfSxyLnByb3RvdHlwZS5fY2FtZXJhRm9yQm94QW5kQmVhcmluZz1mdW5jdGlvbihlLHIsbixhKXtpZigibnVtYmVyIj09dHlwZW9mKGE9dC5leHRlbmQoe3BhZGRpbmc6e3RvcDowLGJvdHRvbTowLHJpZ2h0OjAsbGVmdDowfSxvZmZzZXQ6WzAsMF0sbWF4Wm9vbTp0aGlzLnRyYW5zZm9ybS5tYXhab29tfSxhKSkucGFkZGluZyl7dmFyIGk9YS5wYWRkaW5nO2EucGFkZGluZz17dG9wOmksYm90dG9tOmkscmlnaHQ6aSxsZWZ0Oml9fWlmKHQuZGVlcEVxdWFsKE9iamVjdC5rZXlzKGEucGFkZGluZykuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH0pLFsiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwidG9wIl0pKXt2YXIgbz10aGlzLnRyYW5zZm9ybSxzPW8ucHJvamVjdCh0LkxuZ0xhdC5jb252ZXJ0KGUpKSxsPW8ucHJvamVjdCh0LkxuZ0xhdC5jb252ZXJ0KHIpKSxjPXMucm90YXRlKC1uKk1hdGguUEkvMTgwKSx1PWwucm90YXRlKC1uKk1hdGguUEkvMTgwKSxoPW5ldyB0LlBvaW50KE1hdGgubWF4KGMueCx1LngpLE1hdGgubWF4KGMueSx1LnkpKSxmPW5ldyB0LlBvaW50KE1hdGgubWluKGMueCx1LngpLE1hdGgubWluKGMueSx1LnkpKSxwPWguc3ViKGYpLGQ9KG8ud2lkdGgtYS5wYWRkaW5nLmxlZnQtYS5wYWRkaW5nLnJpZ2h0KS9wLngsZz0oby5oZWlnaHQtYS5wYWRkaW5nLnRvcC1hLnBhZGRpbmcuYm90dG9tKS9wLnk7aWYoIShnPDB8fGQ8MCkpe3ZhciB2PU1hdGgubWluKG8uc2NhbGVab29tKG8uc2NhbGUqTWF0aC5taW4oZCxnKSksYS5tYXhab29tKSxtPXQuUG9pbnQuY29udmVydChhLm9mZnNldCkseT0oYS5wYWRkaW5nLmxlZnQtYS5wYWRkaW5nLnJpZ2h0KS8yLHg9KGEucGFkZGluZy50b3AtYS5wYWRkaW5nLmJvdHRvbSkvMixiPW5ldyB0LlBvaW50KG0ueCt5LG0ueSt4KS5tdWx0KG8uc2NhbGUvby56b29tU2NhbGUodikpO3JldHVybntjZW50ZXI6by51bnByb2plY3Qocy5hZGQobCkuZGl2KDIpLnN1YihiKSksem9vbTp2LGJlYXJpbmc6bn19dC53YXJuT25jZSgiTWFwIGNhbm5vdCBmaXQgd2l0aGluIGNhbnZhcyB3aXRoIHRoZSBnaXZlbiBib3VuZHMsIHBhZGRpbmcsIGFuZC9vciBvZmZzZXQuIil9ZWxzZSB0Lndhcm5PbmNlKCJvcHRpb25zLnBhZGRpbmcgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciwgb3IgYW4gT2JqZWN0IHdpdGgga2V5cyAnYm90dG9tJywgJ2xlZnQnLCAncmlnaHQnLCAndG9wJyIpfSxyLnByb3RvdHlwZS5maXRCb3VuZHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9maXRJbnRlcm5hbCh0aGlzLmNhbWVyYUZvckJvdW5kcyh0LGUpLGUscil9LHIucHJvdG90eXBlLmZpdFNjcmVlbkNvb3JkaW5hdGVzPWZ1bmN0aW9uKGUscixuLGEsaSl7cmV0dXJuIHRoaXMuX2ZpdEludGVybmFsKHRoaXMuX2NhbWVyYUZvckJveEFuZEJlYXJpbmcodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbih0LlBvaW50LmNvbnZlcnQoZSkpLHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24odC5Qb2ludC5jb252ZXJ0KHIpKSxuLGEpLGEsaSl9LHIucHJvdG90eXBlLl9maXRJbnRlcm5hbD1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU/KHI9dC5leHRlbmQoZSxyKSkubGluZWFyP3RoaXMuZWFzZVRvKHIsbik6dGhpcy5mbHlUbyhyLG4pOnRoaXN9LHIucHJvdG90eXBlLmp1bXBUbz1mdW5jdGlvbihlLHIpe3RoaXMuc3RvcCgpO3ZhciBuPXRoaXMudHJhbnNmb3JtLGE9ITEsaT0hMSxvPSExO3JldHVybiJ6b29tImluIGUmJm4uem9vbSE9PStlLnpvb20mJihhPSEwLG4uem9vbT0rZS56b29tKSx2b2lkIDAhPT1lLmNlbnRlciYmKG4uY2VudGVyPXQuTG5nTGF0LmNvbnZlcnQoZS5jZW50ZXIpKSwiYmVhcmluZyJpbiBlJiZuLmJlYXJpbmchPT0rZS5iZWFyaW5nJiYoaT0hMCxuLmJlYXJpbmc9K2UuYmVhcmluZyksInBpdGNoImluIGUmJm4ucGl0Y2ghPT0rZS5waXRjaCYmKG89ITAsbi5waXRjaD0rZS5waXRjaCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3Zlc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlIixyKSksYSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ6b29tc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJ6b29tIixyKSkuZmlyZShuZXcgdC5FdmVudCgiem9vbWVuZCIscikpLGkmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicm90YXRlc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGUiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGVlbmQiLHIpKSxvJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoc3RhcnQiLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaCIscikpLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoZW5kIixyKSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlZW5kIixyKSl9LHIucHJvdG90eXBlLmVhc2VUbz1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dGhpcy5zdG9wKCksKCExPT09KGU9dC5leHRlbmQoe29mZnNldDpbMCwwXSxkdXJhdGlvbjo1MDAsZWFzaW5nOnQuZWFzZX0sZSkpLmFuaW1hdGV8fHQuYnJvd3Nlci5wcmVmZXJzUmVkdWNlZE1vdGlvbikmJihlLmR1cmF0aW9uPTApO3ZhciBhPXRoaXMudHJhbnNmb3JtLGk9dGhpcy5nZXRab29tKCksbz10aGlzLmdldEJlYXJpbmcoKSxzPXRoaXMuZ2V0UGl0Y2goKSxsPSJ6b29tImluIGU/K2Uuem9vbTppLGM9ImJlYXJpbmciaW4gZT90aGlzLl9ub3JtYWxpemVCZWFyaW5nKGUuYmVhcmluZyxvKTpvLHU9InBpdGNoImluIGU/K2UucGl0Y2g6cyxoPWEuY2VudGVyUG9pbnQuYWRkKHQuUG9pbnQuY29udmVydChlLm9mZnNldCkpLGY9YS5wb2ludExvY2F0aW9uKGgpLHA9dC5MbmdMYXQuY29udmVydChlLmNlbnRlcnx8Zik7dGhpcy5fbm9ybWFsaXplQ2VudGVyKHApO3ZhciBkLGcsdj1hLnByb2plY3QoZiksbT1hLnByb2plY3QocCkuc3ViKHYpLHk9YS56b29tU2NhbGUobC1pKTtyZXR1cm4gZS5hcm91bmQmJihkPXQuTG5nTGF0LmNvbnZlcnQoZS5hcm91bmQpLGc9YS5sb2NhdGlvblBvaW50KGQpKSx0aGlzLl96b29taW5nPWwhPT1pLHRoaXMuX3JvdGF0aW5nPW8hPT1jLHRoaXMuX3BpdGNoaW5nPXUhPT1zLHRoaXMuX3ByZXBhcmVFYXNlKHIsZS5ub01vdmVTdGFydCksY2xlYXJUaW1lb3V0KHRoaXMuX2Vhc2VFbmRUaW1lb3V0SUQpLHRoaXMuX2Vhc2UoZnVuY3Rpb24oZSl7aWYobi5fem9vbWluZyYmKGEuem9vbT10Lm51bWJlcihpLGwsZSkpLG4uX3JvdGF0aW5nJiYoYS5iZWFyaW5nPXQubnVtYmVyKG8sYyxlKSksbi5fcGl0Y2hpbmcmJihhLnBpdGNoPXQubnVtYmVyKHMsdSxlKSksZClhLnNldExvY2F0aW9uQXRQb2ludChkLGcpO2Vsc2V7dmFyIGY9YS56b29tU2NhbGUoYS56b29tLWkpLHA9bD5pP01hdGgubWluKDIseSk6TWF0aC5tYXgoLjUseSkseD1NYXRoLnBvdyhwLDEtZSksYj1hLnVucHJvamVjdCh2LmFkZChtLm11bHQoZSp4KSkubXVsdChmKSk7YS5zZXRMb2NhdGlvbkF0UG9pbnQoYS5yZW5kZXJXb3JsZENvcGllcz9iLndyYXAoKTpiLGgpfW4uX2ZpcmVNb3ZlRXZlbnRzKHIpfSxmdW5jdGlvbigpe2UuZGVsYXlFbmRFdmVudHM/bi5fZWFzZUVuZFRpbWVvdXRJRD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2FmdGVyRWFzZShyKX0sZS5kZWxheUVuZEV2ZW50cyk6bi5fYWZ0ZXJFYXNlKHIpfSxlKSx0aGlzfSxyLnByb3RvdHlwZS5fcHJlcGFyZUVhc2U9ZnVuY3Rpb24oZSxyKXt0aGlzLl9tb3Zpbmc9ITAscnx8dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3Zlc3RhcnQiLGUpKSx0aGlzLl96b29taW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInpvb21zdGFydCIsZSkpLHRoaXMuX3JvdGF0aW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZXN0YXJ0IixlKSksdGhpcy5fcGl0Y2hpbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicGl0Y2hzdGFydCIsZSkpfSxyLnByb3RvdHlwZS5fZmlyZU1vdmVFdmVudHM9ZnVuY3Rpb24oZSl7dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlIixlKSksdGhpcy5fem9vbWluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ6b29tIixlKSksdGhpcy5fcm90YXRpbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicm90YXRlIixlKSksdGhpcy5fcGl0Y2hpbmcmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicGl0Y2giLGUpKX0sci5wcm90b3R5cGUuX2FmdGVyRWFzZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl96b29taW5nLG49dGhpcy5fcm90YXRpbmcsYT10aGlzLl9waXRjaGluZzt0aGlzLl9tb3Zpbmc9ITEsdGhpcy5fem9vbWluZz0hMSx0aGlzLl9yb3RhdGluZz0hMSx0aGlzLl9waXRjaGluZz0hMSxyJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInpvb21lbmQiLGUpKSxuJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZWVuZCIsZSkpLGEmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicGl0Y2hlbmQiLGUpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVlbmQiLGUpKX0sci5wcm90b3R5cGUuZmx5VG89ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO2lmKHQuYnJvd3Nlci5wcmVmZXJzUmVkdWNlZE1vdGlvbil7dmFyIGE9dC5waWNrKGUsWyJjZW50ZXIiLCJ6b29tIiwiYmVhcmluZyIsInBpdGNoIiwiYXJvdW5kIl0pO3JldHVybiB0aGlzLmp1bXBUbyhhLHIpfXRoaXMuc3RvcCgpLGU9dC5leHRlbmQoe29mZnNldDpbMCwwXSxzcGVlZDoxLjIsY3VydmU6MS40MixlYXNpbmc6dC5lYXNlfSxlKTt2YXIgaT10aGlzLnRyYW5zZm9ybSxvPXRoaXMuZ2V0Wm9vbSgpLHM9dGhpcy5nZXRCZWFyaW5nKCksbD10aGlzLmdldFBpdGNoKCksYz0iem9vbSJpbiBlP3QuY2xhbXAoK2Uuem9vbSxpLm1pblpvb20saS5tYXhab29tKTpvLHU9ImJlYXJpbmciaW4gZT90aGlzLl9ub3JtYWxpemVCZWFyaW5nKGUuYmVhcmluZyxzKTpzLGg9InBpdGNoImluIGU/K2UucGl0Y2g6bCxmPWkuem9vbVNjYWxlKGMtbykscD1pLmNlbnRlclBvaW50LmFkZCh0LlBvaW50LmNvbnZlcnQoZS5vZmZzZXQpKSxkPWkucG9pbnRMb2NhdGlvbihwKSxnPXQuTG5nTGF0LmNvbnZlcnQoZS5jZW50ZXJ8fGQpO3RoaXMuX25vcm1hbGl6ZUNlbnRlcihnKTt2YXIgdj1pLnByb2plY3QoZCksbT1pLnByb2plY3QoZykuc3ViKHYpLHk9ZS5jdXJ2ZSx4PU1hdGgubWF4KGkud2lkdGgsaS5oZWlnaHQpLGI9eC9mLF89bS5tYWcoKTtpZigibWluWm9vbSJpbiBlKXt2YXIgdz10LmNsYW1wKE1hdGgubWluKGUubWluWm9vbSxvLGMpLGkubWluWm9vbSxpLm1heFpvb20pLGs9eC9pLnpvb21TY2FsZSh3LW8pO3k9TWF0aC5zcXJ0KGsvXyoyKX12YXIgVD15Knk7ZnVuY3Rpb24gTSh0KXt2YXIgZT0oYipiLXgqeCsodD8tMToxKSpUKlQqXypfKS8oMioodD9iOngpKlQqXyk7cmV0dXJuIE1hdGgubG9nKE1hdGguc3FydChlKmUrMSktZSl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4oTWF0aC5leHAodCktTWF0aC5leHAoLXQpKS8yfWZ1bmN0aW9uIFModCl7cmV0dXJuKE1hdGguZXhwKHQpK01hdGguZXhwKC10KSkvMn12YXIgRT1NKDApLEw9ZnVuY3Rpb24odCl7cmV0dXJuIFMoRSkvUyhFK3kqdCl9LEM9ZnVuY3Rpb24odCl7cmV0dXJuIHgqKChTKEUpKihBKGU9RSt5KnQpL1MoZSkpLUEoRSkpL1QpL187dmFyIGV9LFA9KE0oMSktRSkveTtpZihNYXRoLmFicyhfKTwxZS02fHwhaXNGaW5pdGUoUCkpe2lmKE1hdGguYWJzKHgtYik8MWUtNilyZXR1cm4gdGhpcy5lYXNlVG8oZSxyKTt2YXIgTz1iPHg/LTE6MTtQPU1hdGguYWJzKE1hdGgubG9nKGIveCkpL3ksQz1mdW5jdGlvbigpe3JldHVybiAwfSxMPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmV4cChPKnkqdCl9fWlmKCJkdXJhdGlvbiJpbiBlKWUuZHVyYXRpb249K2UuZHVyYXRpb247ZWxzZXt2YXIgej0ic2NyZWVuU3BlZWQiaW4gZT8rZS5zY3JlZW5TcGVlZC95OitlLnNwZWVkO2UuZHVyYXRpb249MWUzKlAven1yZXR1cm4gZS5tYXhEdXJhdGlvbiYmZS5kdXJhdGlvbj5lLm1heER1cmF0aW9uJiYoZS5kdXJhdGlvbj0wKSx0aGlzLl96b29taW5nPSEwLHRoaXMuX3JvdGF0aW5nPXMhPT11LHRoaXMuX3BpdGNoaW5nPWghPT1sLHRoaXMuX3ByZXBhcmVFYXNlKHIsITEpLHRoaXMuX2Vhc2UoZnVuY3Rpb24oZSl7dmFyIGE9ZSpQLGY9MS9MKGEpO2kuem9vbT0xPT09ZT9jOm8raS5zY2FsZVpvb20oZiksbi5fcm90YXRpbmcmJihpLmJlYXJpbmc9dC5udW1iZXIocyx1LGUpKSxuLl9waXRjaGluZyYmKGkucGl0Y2g9dC5udW1iZXIobCxoLGUpKTt2YXIgZD0xPT09ZT9nOmkudW5wcm9qZWN0KHYuYWRkKG0ubXVsdChDKGEpKSkubXVsdChmKSk7aS5zZXRMb2NhdGlvbkF0UG9pbnQoaS5yZW5kZXJXb3JsZENvcGllcz9kLndyYXAoKTpkLHApLG4uX2ZpcmVNb3ZlRXZlbnRzKHIpfSxmdW5jdGlvbigpe3JldHVybiBuLl9hZnRlckVhc2Uocil9LGUpLHRoaXN9LHIucHJvdG90eXBlLmlzRWFzaW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9lYXNlRnJhbWVJZH0sci5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe2lmKHRoaXMuX2Vhc2VGcmFtZUlkJiYodGhpcy5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZWFzZUZyYW1lSWQpLGRlbGV0ZSB0aGlzLl9lYXNlRnJhbWVJZCxkZWxldGUgdGhpcy5fb25FYXNlRnJhbWUpLHRoaXMuX29uRWFzZUVuZCl7dmFyIHQ9dGhpcy5fb25FYXNlRW5kO2RlbGV0ZSB0aGlzLl9vbkVhc2VFbmQsdC5jYWxsKHRoaXMpfXJldHVybiB0aGlzfSxyLnByb3RvdHlwZS5fZWFzZT1mdW5jdGlvbihlLHIsbil7ITE9PT1uLmFuaW1hdGV8fDA9PT1uLmR1cmF0aW9uPyhlKDEpLHIoKSk6KHRoaXMuX2Vhc2VTdGFydD10LmJyb3dzZXIubm93KCksdGhpcy5fZWFzZU9wdGlvbnM9bix0aGlzLl9vbkVhc2VGcmFtZT1lLHRoaXMuX29uRWFzZUVuZD1yLHRoaXMuX2Vhc2VGcmFtZUlkPXRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKSl9LHIucHJvdG90eXBlLl9yZW5kZXJGcmFtZUNhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIGU9TWF0aC5taW4oKHQuYnJvd3Nlci5ub3coKS10aGlzLl9lYXNlU3RhcnQpL3RoaXMuX2Vhc2VPcHRpb25zLmR1cmF0aW9uLDEpO3RoaXMuX29uRWFzZUZyYW1lKHRoaXMuX2Vhc2VPcHRpb25zLmVhc2luZyhlKSksZTwxP3RoaXMuX2Vhc2VGcmFtZUlkPXRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKTp0aGlzLnN0b3AoKX0sci5wcm90b3R5cGUuX25vcm1hbGl6ZUJlYXJpbmc9ZnVuY3Rpb24oZSxyKXtlPXQud3JhcChlLC0xODAsMTgwKTt2YXIgbj1NYXRoLmFicyhlLXIpO3JldHVybiBNYXRoLmFicyhlLTM2MC1yKTxuJiYoZS09MzYwKSxNYXRoLmFicyhlKzM2MC1yKTxuJiYoZSs9MzYwKSxlfSxyLnByb3RvdHlwZS5fbm9ybWFsaXplQ2VudGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudHJhbnNmb3JtO2lmKGUucmVuZGVyV29ybGRDb3BpZXMmJiFlLmxuZ1JhbmdlKXt2YXIgcj10LmxuZy1lLmNlbnRlci5sbmc7dC5sbmcrPXI+MTgwPy0zNjA6cjwtMTgwPzM2MDowfX0scn0odC5FdmVudGVkKSxMbj1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5vcHRpb25zPWUsdC5iaW5kQWxsKFsiX3VwZGF0ZUVkaXRMaW5rIiwiX3VwZGF0ZURhdGEiLCJfdXBkYXRlQ29tcGFjdCJdLHRoaXMpfTtMbi5wcm90b3R5cGUuZ2V0RGVmYXVsdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuImJvdHRvbS1yaWdodCJ9LExuLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5jb21wYWN0O3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1hdHRyaWIiKSx0aGlzLl9pbm5lckNvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybC1hdHRyaWItaW5uZXIiLHRoaXMuX2NvbnRhaW5lciksZSYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWNvbXBhY3QiKSx0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbnMoKSx0aGlzLl91cGRhdGVFZGl0TGluaygpLHRoaXMuX21hcC5vbigic3R5bGVkYXRhIix0aGlzLl91cGRhdGVEYXRhKSx0aGlzLl9tYXAub24oInNvdXJjZWRhdGEiLHRoaXMuX3VwZGF0ZURhdGEpLHRoaXMuX21hcC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlRWRpdExpbmspLHZvaWQgMD09PWUmJih0aGlzLl9tYXAub24oInJlc2l6ZSIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fdXBkYXRlQ29tcGFjdCgpKSx0aGlzLl9jb250YWluZXJ9LExuLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3IucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZigic3R5bGVkYXRhIix0aGlzLl91cGRhdGVEYXRhKSx0aGlzLl9tYXAub2ZmKCJzb3VyY2VkYXRhIix0aGlzLl91cGRhdGVEYXRhKSx0aGlzLl9tYXAub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVFZGl0TGluayksdGhpcy5fbWFwLm9mZigicmVzaXplIix0aGlzLl91cGRhdGVDb21wYWN0KSx0aGlzLl9tYXA9dm9pZCAwfSxMbi5wcm90b3R5cGUuX3VwZGF0ZUVkaXRMaW5rPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZWRpdExpbms7ZXx8KGU9dGhpcy5fZWRpdExpbms9dGhpcy5fY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5tYXBib3gtaW1wcm92ZS1tYXAiKSk7dmFyIHI9W3trZXk6Im93bmVyIix2YWx1ZTp0aGlzLnN0eWxlT3duZXJ9LHtrZXk6ImlkIix2YWx1ZTp0aGlzLnN0eWxlSWR9LHtrZXk6ImFjY2Vzc190b2tlbiIsdmFsdWU6dGhpcy5fbWFwLl9yZXF1ZXN0TWFuYWdlci5fY3VzdG9tQWNjZXNzVG9rZW58fHQuY29uZmlnLkFDQ0VTU19UT0tFTn1dO2lmKGUpe3ZhciBuPXIucmVkdWNlKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZS52YWx1ZSYmKHQrPWUua2V5KyI9IitlLnZhbHVlKyhuPHIubGVuZ3RoLTE/IiYiOiIiKSksdH0sIj8iKTtlLmhyZWY9dC5jb25maWcuRkVFREJBQ0tfVVJMKyIvIituKyh0aGlzLl9tYXAuX2hhc2g/dGhpcy5fbWFwLl9oYXNoLmdldEhhc2hTdHJpbmcoITApOiIiKSxlLnJlbD0ibm9vcGVuZXIgbm9mb2xsb3cifX0sTG4ucHJvdG90eXBlLl91cGRhdGVEYXRhPWZ1bmN0aW9uKHQpeyF0fHwibWV0YWRhdGEiIT09dC5zb3VyY2VEYXRhVHlwZSYmInN0eWxlIiE9PXQuZGF0YVR5cGV8fCh0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbnMoKSx0aGlzLl91cGRhdGVFZGl0TGluaygpKX0sTG4ucHJvdG90eXBlLl91cGRhdGVBdHRyaWJ1dGlvbnM9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAuc3R5bGUpe3ZhciB0PVtdO2lmKHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbiYmKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uKT90PXQuY29uY2F0KHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0PyIiOnR9KSk6InN0cmluZyI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24mJnQucHVzaCh0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24pKSx0aGlzLl9tYXAuc3R5bGUuc3R5bGVzaGVldCl7dmFyIGU9dGhpcy5fbWFwLnN0eWxlLnN0eWxlc2hlZXQ7dGhpcy5zdHlsZU93bmVyPWUub3duZXIsdGhpcy5zdHlsZUlkPWUuaWR9dmFyIHI9dGhpcy5fbWFwLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIG4gaW4gcil7dmFyIGE9cltuXTtpZihhLnVzZWQpe3ZhciBpPWEuZ2V0U291cmNlKCk7aS5hdHRyaWJ1dGlvbiYmdC5pbmRleE9mKGkuYXR0cmlidXRpb24pPDAmJnQucHVzaChpLmF0dHJpYnV0aW9uKX19dC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoLWUubGVuZ3RofSk7dmFyIG89KHQ9dC5maWx0ZXIoZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49cisxO248dC5sZW5ndGg7bisrKWlmKHRbbl0uaW5kZXhPZihlKT49MClyZXR1cm4hMTtyZXR1cm4hMH0pKS5qb2luKCIgfCAiKTtvIT09dGhpcy5fYXR0cmliSFRNTCYmKHRoaXMuX2F0dHJpYkhUTUw9byx0Lmxlbmd0aD8odGhpcy5faW5uZXJDb250YWluZXIuaW5uZXJIVE1MPW8sdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWF0dHJpYi1lbXB0eSIpKTp0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtYXR0cmliLWVtcHR5IiksdGhpcy5fZWRpdExpbms9bnVsbCl9fSxMbi5wcm90b3R5cGUuX3VwZGF0ZUNvbXBhY3Q9ZnVuY3Rpb24oKXt0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGg8PTY0MD90aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY29tcGFjdCIpOnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jb21wYWN0Iil9O3ZhciBDbj1mdW5jdGlvbigpe3QuYmluZEFsbChbIl91cGRhdGVMb2dvIl0sdGhpcyksdC5iaW5kQWxsKFsiX3VwZGF0ZUNvbXBhY3QiXSx0aGlzKX07Q24ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCIpO3ZhciBlPXIuY3JlYXRlKCJhIiwibWFwYm94Z2wtY3RybC1sb2dvIik7cmV0dXJuIGUudGFyZ2V0PSJfYmxhbmsiLGUucmVsPSJub29wZW5lciBub2ZvbGxvdyIsZS5ocmVmPSJodHRwczovL3d3dy5tYXBib3guY29tLyIsZS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJNYXBib3ggbG9nbyIpLGUuc2V0QXR0cmlidXRlKCJyZWwiLCJub29wZW5lciBub2ZvbGxvdyIpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChlKSx0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fbWFwLm9uKCJzb3VyY2VkYXRhIix0aGlzLl91cGRhdGVMb2dvKSx0aGlzLl91cGRhdGVMb2dvKCksdGhpcy5fbWFwLm9uKCJyZXNpemUiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpLHRoaXMuX3VwZGF0ZUNvbXBhY3QoKSx0aGlzLl9jb250YWluZXJ9LENuLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3IucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZigic291cmNlZGF0YSIsdGhpcy5fdXBkYXRlTG9nbyksdGhpcy5fbWFwLm9mZigicmVzaXplIix0aGlzLl91cGRhdGVDb21wYWN0KX0sQ24ucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiJib3R0b20tbGVmdCJ9LENuLnByb3RvdHlwZS5fdXBkYXRlTG9nbz1mdW5jdGlvbih0KXt0JiYibWV0YWRhdGEiIT09dC5zb3VyY2VEYXRhVHlwZXx8KHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PXRoaXMuX2xvZ29SZXF1aXJlZCgpPyJibG9jayI6Im5vbmUiKX0sQ24ucHJvdG90eXBlLl9sb2dvUmVxdWlyZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAuc3R5bGUpe3ZhciB0PXRoaXMuX21hcC5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBlIGluIHQpaWYodFtlXS5nZXRTb3VyY2UoKS5tYXBib3hfbG9nbylyZXR1cm4hMDtyZXR1cm4hMX19LENuLnByb3RvdHlwZS5fdXBkYXRlQ29tcGFjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lci5jaGlsZHJlbjtpZih0Lmxlbmd0aCl7dmFyIGU9dFswXTt0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGg8MjUwP2UuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY29tcGFjdCIpOmUuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY29tcGFjdCIpfX07dmFyIFBuPWZ1bmN0aW9uKCl7dGhpcy5fcXVldWU9W10sdGhpcy5faWQ9MCx0aGlzLl9jbGVhcmVkPSExLHRoaXMuX2N1cnJlbnRseVJ1bm5pbmc9ITF9O1BuLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU9Kyt0aGlzLl9pZDtyZXR1cm4gdGhpcy5fcXVldWUucHVzaCh7Y2FsbGJhY2s6dCxpZDplLGNhbmNlbGxlZDohMX0pLGV9LFBuLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2N1cnJlbnRseVJ1bm5pbmcscj0wLG49ZT90aGlzLl9xdWV1ZS5jb25jYXQoZSk6dGhpcy5fcXVldWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgYT1uW3JdO2lmKGEuaWQ9PT10KXJldHVybiB2b2lkKGEuY2FuY2VsbGVkPSEwKX19LFBuLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jdXJyZW50bHlSdW5uaW5nPXRoaXMuX3F1ZXVlO3RoaXMuX3F1ZXVlPVtdO2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07aWYoIW4uY2FuY2VsbGVkJiYobi5jYWxsYmFjaygpLHRoaXMuX2NsZWFyZWQpKWJyZWFrfXRoaXMuX2NsZWFyZWQ9ITEsdGhpcy5fY3VycmVudGx5UnVubmluZz0hMX0sUG4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudGx5UnVubmluZyYmKHRoaXMuX2NsZWFyZWQ9ITApLHRoaXMuX3F1ZXVlPVtdfTt2YXIgT249dC53aW5kb3cuSFRNTEltYWdlRWxlbWVudCx6bj10LndpbmRvdy5IVE1MRWxlbWVudCxJbj17Y2VudGVyOlswLDBdLHpvb206MCxiZWFyaW5nOjAscGl0Y2g6MCxtaW5ab29tOjAsbWF4Wm9vbToyMixpbnRlcmFjdGl2ZTohMCxzY3JvbGxab29tOiEwLGJveFpvb206ITAsZHJhZ1JvdGF0ZTohMCxkcmFnUGFuOiEwLGtleWJvYXJkOiEwLGRvdWJsZUNsaWNrWm9vbTohMCx0b3VjaFpvb21Sb3RhdGU6ITAsYmVhcmluZ1NuYXA6NyxjbGlja1RvbGVyYW5jZTozLGhhc2g6ITEsYXR0cmlidXRpb25Db250cm9sOiEwLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6ITEscHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLHRyYWNrUmVzaXplOiEwLHJlbmRlcldvcmxkQ29waWVzOiEwLHJlZnJlc2hFeHBpcmVkVGlsZXM6ITAsbWF4VGlsZUNhY2hlU2l6ZTpudWxsLGxvY2FsSWRlb2dyYXBoRm9udEZhbWlseToic2Fucy1zZXJpZiIsdHJhbnNmb3JtUmVxdWVzdDpudWxsLGFjY2Vzc1Rva2VuOm51bGwsZmFkZUR1cmF0aW9uOjMwMCxjcm9zc1NvdXJjZUNvbGxpc2lvbnM6ITB9LERuPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIGEoZSl7dmFyIGE9dGhpcztpZihudWxsIT0oZT10LmV4dGVuZCh7fSxJbixlKSkubWluWm9vbSYmbnVsbCE9ZS5tYXhab29tJiZlLm1pblpvb20+ZS5tYXhab29tKXRocm93IG5ldyBFcnJvcigibWF4Wm9vbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW5ab29tIik7dmFyIGk9bmV3IHVuKGUubWluWm9vbSxlLm1heFpvb20sZS5yZW5kZXJXb3JsZENvcGllcyk7aWYobi5jYWxsKHRoaXMsaSxlKSx0aGlzLl9pbnRlcmFjdGl2ZT1lLmludGVyYWN0aXZlLHRoaXMuX21heFRpbGVDYWNoZVNpemU9ZS5tYXhUaWxlQ2FjaGVTaXplLHRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9ZS5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0LHRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcj1lLnByZXNlcnZlRHJhd2luZ0J1ZmZlcix0aGlzLl9hbnRpYWxpYXM9ZS5hbnRpYWxpYXMsdGhpcy5fdHJhY2tSZXNpemU9ZS50cmFja1Jlc2l6ZSx0aGlzLl9iZWFyaW5nU25hcD1lLmJlYXJpbmdTbmFwLHRoaXMuX3JlZnJlc2hFeHBpcmVkVGlsZXM9ZS5yZWZyZXNoRXhwaXJlZFRpbGVzLHRoaXMuX2ZhZGVEdXJhdGlvbj1lLmZhZGVEdXJhdGlvbix0aGlzLl9jcm9zc1NvdXJjZUNvbGxpc2lvbnM9ZS5jcm9zc1NvdXJjZUNvbGxpc2lvbnMsdGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3I9MSx0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmc9ZS5jb2xsZWN0UmVzb3VyY2VUaW1pbmcsdGhpcy5fcmVuZGVyVGFza1F1ZXVlPW5ldyBQbix0aGlzLl9jb250cm9scz1bXSx0aGlzLl9tYXBJZD10LnVuaXF1ZUlkKCksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IHQuUmVxdWVzdE1hbmFnZXIoZS50cmFuc2Zvcm1SZXF1ZXN0LGUuYWNjZXNzVG9rZW4pLCJzdHJpbmciPT10eXBlb2YgZS5jb250YWluZXIpe2lmKHRoaXMuX2NvbnRhaW5lcj10LndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLmNvbnRhaW5lciksIXRoaXMuX2NvbnRhaW5lcil0aHJvdyBuZXcgRXJyb3IoIkNvbnRhaW5lciAnIitlLmNvbnRhaW5lcisiJyBub3QgZm91bmQuIil9ZWxzZXtpZighKGUuY29udGFpbmVyIGluc3RhbmNlb2Ygem4pKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0eXBlOiAnY29udGFpbmVyJyBtdXN0IGJlIGEgU3RyaW5nIG9yIEhUTUxFbGVtZW50LiIpO3RoaXMuX2NvbnRhaW5lcj1lLmNvbnRhaW5lcn1pZihlLm1heEJvdW5kcyYmdGhpcy5zZXRNYXhCb3VuZHMoZS5tYXhCb3VuZHMpLHQuYmluZEFsbChbIl9vbldpbmRvd09ubGluZSIsIl9vbldpbmRvd1Jlc2l6ZSIsIl9jb250ZXh0TG9zdCIsIl9jb250ZXh0UmVzdG9yZWQiXSx0aGlzKSx0aGlzLl9zZXR1cENvbnRhaW5lcigpLHRoaXMuX3NldHVwUGFpbnRlcigpLHZvaWQgMD09PXRoaXMucGFpbnRlcil0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIFdlYkdMLiIpO3RoaXMub24oIm1vdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGEuX3VwZGF0ZSghMSl9KSx0aGlzLm9uKCJtb3ZlZW5kIixmdW5jdGlvbigpe3JldHVybiBhLl91cGRhdGUoITEpfSksdGhpcy5vbigiem9vbSIsZnVuY3Rpb24oKXtyZXR1cm4gYS5fdXBkYXRlKCEwKX0pLHZvaWQgMCE9PXQud2luZG93JiYodC53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigib25saW5lIix0aGlzLl9vbldpbmRvd09ubGluZSwhMSksdC53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9vbldpbmRvd1Jlc2l6ZSwhMSkpLGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5nZXRDYW52YXNDb250YWluZXIoKSxhPW51bGwsaT0hMSxvPW51bGw7Zm9yKHZhciBzIGluIFNuKXRbc109bmV3IFNuW3NdKHQsZSksZS5pbnRlcmFjdGl2ZSYmZVtzXSYmdFtzXS5lbmFibGUoZVtzXSk7ci5hZGRFdmVudExpc3RlbmVyKG4sIm1vdXNlb3V0IixmdW5jdGlvbihlKXt0LmZpcmUobmV3IHBuKCJtb3VzZW91dCIsdCxlKSl9KSxyLmFkZEV2ZW50TGlzdGVuZXIobiwibW91c2Vkb3duIixmdW5jdGlvbihhKXtpPSEwLG89ci5tb3VzZVBvcyhuLGEpO3ZhciBzPW5ldyBwbigibW91c2Vkb3duIix0LGEpO3QuZmlyZShzKSxzLmRlZmF1bHRQcmV2ZW50ZWR8fChlLmludGVyYWN0aXZlJiYhdC5kb3VibGVDbGlja1pvb20uaXNBY3RpdmUoKSYmdC5zdG9wKCksdC5ib3hab29tLm9uTW91c2VEb3duKGEpLHQuYm94Wm9vbS5pc0FjdGl2ZSgpfHx0LmRyYWdQYW4uaXNBY3RpdmUoKXx8dC5kcmFnUm90YXRlLm9uTW91c2VEb3duKGEpLHQuYm94Wm9vbS5pc0FjdGl2ZSgpfHx0LmRyYWdSb3RhdGUuaXNBY3RpdmUoKXx8dC5kcmFnUGFuLm9uTW91c2VEb3duKGEpKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcihuLCJtb3VzZXVwIixmdW5jdGlvbihlKXt2YXIgcj10LmRyYWdSb3RhdGUuaXNBY3RpdmUoKTthJiYhciYmdC5maXJlKG5ldyBwbigiY29udGV4dG1lbnUiLHQsYSkpLGE9bnVsbCxpPSExLHQuZmlyZShuZXcgcG4oIm1vdXNldXAiLHQsZSkpfSksci5hZGRFdmVudExpc3RlbmVyKG4sIm1vdXNlbW92ZSIsZnVuY3Rpb24oZSl7aWYoIXQuZHJhZ1Bhbi5pc0FjdGl2ZSgpJiYhdC5kcmFnUm90YXRlLmlzQWN0aXZlKCkpe2Zvcih2YXIgcj1lLnRhcmdldDtyJiZyIT09bjspcj1yLnBhcmVudE5vZGU7cj09PW4mJnQuZmlyZShuZXcgcG4oIm1vdXNlbW92ZSIsdCxlKSl9fSksci5hZGRFdmVudExpc3RlbmVyKG4sIm1vdXNlb3ZlciIsZnVuY3Rpb24oZSl7Zm9yKHZhciByPWUudGFyZ2V0O3ImJnIhPT1uOylyPXIucGFyZW50Tm9kZTtyPT09biYmdC5maXJlKG5ldyBwbigibW91c2VvdmVyIix0LGUpKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcihuLCJ0b3VjaHN0YXJ0IixmdW5jdGlvbihyKXt2YXIgbj1uZXcgZG4oInRvdWNoc3RhcnQiLHQscik7dC5maXJlKG4pLG4uZGVmYXVsdFByZXZlbnRlZHx8KGUuaW50ZXJhY3RpdmUmJnQuc3RvcCgpLHQuYm94Wm9vbS5pc0FjdGl2ZSgpfHx0LmRyYWdSb3RhdGUuaXNBY3RpdmUoKXx8dC5kcmFnUGFuLm9uVG91Y2hTdGFydChyKSx0LnRvdWNoWm9vbVJvdGF0ZS5vblN0YXJ0KHIpLHQuZG91YmxlQ2xpY2tab29tLm9uVG91Y2hTdGFydChuKSl9LHtwYXNzaXZlOiExfSksci5hZGRFdmVudExpc3RlbmVyKG4sInRvdWNobW92ZSIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBkbigidG91Y2htb3ZlIix0LGUpKX0se3Bhc3NpdmU6ITF9KSxyLmFkZEV2ZW50TGlzdGVuZXIobiwidG91Y2hlbmQiLGZ1bmN0aW9uKGUpe3QuZmlyZShuZXcgZG4oInRvdWNoZW5kIix0LGUpKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcihuLCJ0b3VjaGNhbmNlbCIsZnVuY3Rpb24oZSl7dC5maXJlKG5ldyBkbigidG91Y2hjYW5jZWwiLHQsZSkpfSksci5hZGRFdmVudExpc3RlbmVyKG4sImNsaWNrIixmdW5jdGlvbihhKXt2YXIgaT1yLm1vdXNlUG9zKG4sYSk7KCFvfHxpLmVxdWFscyhvKXx8aS5kaXN0KG8pPGUuY2xpY2tUb2xlcmFuY2UpJiZ0LmZpcmUobmV3IHBuKCJjbGljayIsdCxhKSl9KSxyLmFkZEV2ZW50TGlzdGVuZXIobiwiZGJsY2xpY2siLGZ1bmN0aW9uKGUpe3ZhciByPW5ldyBwbigiZGJsY2xpY2siLHQsZSk7dC5maXJlKHIpLHIuZGVmYXVsdFByZXZlbnRlZHx8dC5kb3VibGVDbGlja1pvb20ub25EYmxDbGljayhyKX0pLHIuYWRkRXZlbnRMaXN0ZW5lcihuLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oZSl7dmFyIHI9dC5kcmFnUm90YXRlLmlzQWN0aXZlKCk7aXx8cj9pJiYoYT1lKTp0LmZpcmUobmV3IHBuKCJjb250ZXh0bWVudSIsdCxlKSksKHQuZHJhZ1JvdGF0ZS5pc0VuYWJsZWQoKXx8dC5saXN0ZW5zKCJjb250ZXh0bWVudSIpKSYmZS5wcmV2ZW50RGVmYXVsdCgpfSksci5hZGRFdmVudExpc3RlbmVyKG4sIndoZWVsIixmdW5jdGlvbihyKXtlLmludGVyYWN0aXZlJiZ0LnN0b3AoKTt2YXIgbj1uZXcgZ24oIndoZWVsIix0LHIpO3QuZmlyZShuKSxuLmRlZmF1bHRQcmV2ZW50ZWR8fHQuc2Nyb2xsWm9vbS5vbldoZWVsKHIpfSx7cGFzc2l2ZTohMX0pfSh0aGlzLGUpLHRoaXMuX2hhc2g9ZS5oYXNoJiYobmV3IGZuKS5hZGRUbyh0aGlzKSx0aGlzLl9oYXNoJiZ0aGlzLl9oYXNoLl9vbkhhc2hDaGFuZ2UoKXx8KHRoaXMuanVtcFRvKHtjZW50ZXI6ZS5jZW50ZXIsem9vbTplLnpvb20sYmVhcmluZzplLmJlYXJpbmcscGl0Y2g6ZS5waXRjaH0pLGUuYm91bmRzJiYodGhpcy5yZXNpemUoKSx0aGlzLmZpdEJvdW5kcyhlLmJvdW5kcyx0LmV4dGVuZCh7fSxlLmZpdEJvdW5kc09wdGlvbnMse2R1cmF0aW9uOjB9KSkpKSx0aGlzLnJlc2l6ZSgpLHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1lLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSxlLnN0eWxlJiZ0aGlzLnNldFN0eWxlKGUuc3R5bGUse2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTplLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseX0pLGUuYXR0cmlidXRpb25Db250cm9sJiZ0aGlzLmFkZENvbnRyb2wobmV3IExuKHtjdXN0b21BdHRyaWJ1dGlvbjplLmN1c3RvbUF0dHJpYnV0aW9ufSkpLHRoaXMuYWRkQ29udHJvbChuZXcgQ24sZS5sb2dvUG9zaXRpb24pLHRoaXMub24oInN0eWxlLmxvYWQiLGZ1bmN0aW9uKCl7YS50cmFuc2Zvcm0udW5tb2RpZmllZCYmYS5qdW1wVG8oYS5zdHlsZS5zdHlsZXNoZWV0KX0pLHRoaXMub24oImRhdGEiLGZ1bmN0aW9uKGUpe2EuX3VwZGF0ZSgic3R5bGUiPT09ZS5kYXRhVHlwZSksYS5maXJlKG5ldyB0LkV2ZW50KGUuZGF0YVR5cGUrImRhdGEiLGUpKX0pLHRoaXMub24oImRhdGFsb2FkaW5nIixmdW5jdGlvbihlKXthLmZpcmUobmV3IHQuRXZlbnQoZS5kYXRhVHlwZSsiZGF0YWxvYWRpbmciLGUpKX0pfW4mJihhLl9fcHJvdG9fXz1uKSxhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4mJm4ucHJvdG90eXBlKSxhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hO3ZhciBpPXtzaG93VGlsZUJvdW5kYXJpZXM6e2NvbmZpZ3VyYWJsZTohMH0sc2hvd0NvbGxpc2lvbkJveGVzOntjb25maWd1cmFibGU6ITB9LHNob3dPdmVyZHJhd0luc3BlY3Rvcjp7Y29uZmlndXJhYmxlOiEwfSxyZXBhaW50Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2VzOntjb25maWd1cmFibGU6ITB9LHZlcnNpb246e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiBhLnByb3RvdHlwZS5fZ2V0TWFwSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwSWR9LGEucHJvdG90eXBlLmFkZENvbnRyb2w9ZnVuY3Rpb24oZSxyKXtpZih2b2lkIDA9PT1yJiZlLmdldERlZmF1bHRQb3NpdGlvbiYmKHI9ZS5nZXREZWZhdWx0UG9zaXRpb24oKSksdm9pZCAwPT09ciYmKHI9InRvcC1yaWdodCIpLCFlfHwhZS5vbkFkZClyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50IHRvIG1hcC5hZGRDb250cm9sKCkuIEFyZ3VtZW50IG11c3QgYmUgYSBjb250cm9sIHdpdGggb25BZGQgYW5kIG9uUmVtb3ZlIG1ldGhvZHMuIikpKTt2YXIgbj1lLm9uQWRkKHRoaXMpO3RoaXMuX2NvbnRyb2xzLnB1c2goZSk7dmFyIGE9dGhpcy5fY29udHJvbFBvc2l0aW9uc1tyXTtyZXR1cm4tMSE9PXIuaW5kZXhPZigiYm90dG9tIik/YS5pbnNlcnRCZWZvcmUobixhLmZpcnN0Q2hpbGQpOmEuYXBwZW5kQ2hpbGQobiksdGhpc30sYS5wcm90b3R5cGUucmVtb3ZlQ29udHJvbD1mdW5jdGlvbihlKXtpZighZXx8IWUub25SZW1vdmUpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiSW52YWxpZCBhcmd1bWVudCB0byBtYXAucmVtb3ZlQ29udHJvbCgpLiBBcmd1bWVudCBtdXN0IGJlIGEgY29udHJvbCB3aXRoIG9uQWRkIGFuZCBvblJlbW92ZSBtZXRob2RzLiIpKSk7dmFyIHI9dGhpcy5fY29udHJvbHMuaW5kZXhPZihlKTtyZXR1cm4gcj4tMSYmdGhpcy5fY29udHJvbHMuc3BsaWNlKHIsMSksZS5vblJlbW92ZSh0aGlzKSx0aGlzfSxhLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fY29udGFpbmVyRGltZW5zaW9ucygpLG49clswXSxhPXJbMV07cmV0dXJuIHRoaXMuX3Jlc2l6ZUNhbnZhcyhuLGEpLHRoaXMudHJhbnNmb3JtLnJlc2l6ZShuLGEpLHRoaXMucGFpbnRlci5yZXNpemUobixhKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVzdGFydCIsZSkpLmZpcmUobmV3IHQuRXZlbnQoIm1vdmUiLGUpKS5maXJlKG5ldyB0LkV2ZW50KCJyZXNpemUiLGUpKS5maXJlKG5ldyB0LkV2ZW50KCJtb3ZlZW5kIixlKSksdGhpc30sYS5wcm90b3R5cGUuZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmdldEJvdW5kcygpfSxhLnByb3RvdHlwZS5nZXRNYXhCb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uZ2V0TWF4Qm91bmRzKCl9LGEucHJvdG90eXBlLnNldE1heEJvdW5kcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uc2V0TWF4Qm91bmRzKHQuTG5nTGF0Qm91bmRzLmNvbnZlcnQoZSkpLHRoaXMuX3VwZGF0ZSgpfSxhLnByb3RvdHlwZS5zZXRNaW5ab29tPWZ1bmN0aW9uKHQpe2lmKCh0PW51bGw9PXQ/MDp0KT49MCYmdDw9dGhpcy50cmFuc2Zvcm0ubWF4Wm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPHQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWluWm9vbSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgdGhlIGN1cnJlbnQgbWF4Wm9vbSwgaW5jbHVzaXZlIil9LGEucHJvdG90eXBlLmdldE1pblpvb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbX0sYS5wcm90b3R5cGUuc2V0TWF4Wm9vbT1mdW5jdGlvbih0KXtpZigodD1udWxsPT10PzIyOnQpPj10aGlzLnRyYW5zZm9ybS5taW5ab29tKXJldHVybiB0aGlzLnRyYW5zZm9ybS5tYXhab29tPXQsdGhpcy5fdXBkYXRlKCksdGhpcy5nZXRab29tKCk+dCYmdGhpcy5zZXRab29tKHQpLHRoaXM7dGhyb3cgbmV3IEVycm9yKCJtYXhab29tIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG1pblpvb20iKX0sYS5wcm90b3R5cGUuZ2V0UmVuZGVyV29ybGRDb3BpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXN9LGEucHJvdG90eXBlLnNldFJlbmRlcldvcmxkQ29waWVzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcz10LHRoaXMuX3VwZGF0ZSgpfSxhLnByb3RvdHlwZS5nZXRNYXhab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFpvb219LGEucHJvdG90eXBlLnByb2plY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQodC5MbmdMYXQuY29udmVydChlKSl9LGEucHJvdG90eXBlLnVucHJvamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbih0LlBvaW50LmNvbnZlcnQoZSkpfSxhLnByb3RvdHlwZS5pc01vdmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3Zpbmd8fHRoaXMuZHJhZ1Bhbi5pc0FjdGl2ZSgpfHx0aGlzLmRyYWdSb3RhdGUuaXNBY3RpdmUoKXx8dGhpcy5zY3JvbGxab29tLmlzQWN0aXZlKCl9LGEucHJvdG90eXBlLmlzWm9vbWluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl96b29taW5nfHx0aGlzLnNjcm9sbFpvb20uaXNab29taW5nKCl9LGEucHJvdG90eXBlLmlzUm90YXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm90YXRpbmd8fHRoaXMuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpfSxhLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUscil7dmFyIGE9dGhpcztpZih2b2lkIDA9PT1yKXJldHVybiBuLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsdCxlKTt2YXIgaT1mdW5jdGlvbigpe3ZhciBuO2lmKCJtb3VzZWVudGVyIj09PXR8fCJtb3VzZW92ZXIiPT09dCl7dmFyIGk9ITE7cmV0dXJue2xheWVyOmUsbGlzdGVuZXI6cixkZWxlZ2F0ZXM6e21vdXNlbW92ZTpmdW5jdGlvbihuKXt2YXIgbz1hLmdldExheWVyKGUpP2EucXVlcnlSZW5kZXJlZEZlYXR1cmVzKG4ucG9pbnQse2xheWVyczpbZV19KTpbXTtvLmxlbmd0aD9pfHwoaT0hMCxyLmNhbGwoYSxuZXcgcG4odCxhLG4ub3JpZ2luYWxFdmVudCx7ZmVhdHVyZXM6b30pKSk6aT0hMX0sbW91c2VvdXQ6ZnVuY3Rpb24oKXtpPSExfX19fWlmKCJtb3VzZWxlYXZlIj09PXR8fCJtb3VzZW91dCI9PT10KXt2YXIgbz0hMTtyZXR1cm57bGF5ZXI6ZSxsaXN0ZW5lcjpyLGRlbGVnYXRlczp7bW91c2Vtb3ZlOmZ1bmN0aW9uKG4peyhhLmdldExheWVyKGUpP2EucXVlcnlSZW5kZXJlZEZlYXR1cmVzKG4ucG9pbnQse2xheWVyczpbZV19KTpbXSkubGVuZ3RoP289ITA6byYmKG89ITEsci5jYWxsKGEsbmV3IHBuKHQsYSxuLm9yaWdpbmFsRXZlbnQpKSl9LG1vdXNlb3V0OmZ1bmN0aW9uKGUpe28mJihvPSExLHIuY2FsbChhLG5ldyBwbih0LGEsZS5vcmlnaW5hbEV2ZW50KSkpfX19fXJldHVybntsYXllcjplLGxpc3RlbmVyOnIsZGVsZWdhdGVzOihuPXt9LG5bdF09ZnVuY3Rpb24odCl7dmFyIG49YS5nZXRMYXllcihlKT9hLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh0LnBvaW50LHtsYXllcnM6W2VdfSk6W107bi5sZW5ndGgmJih0LmZlYXR1cmVzPW4sci5jYWxsKGEsdCksZGVsZXRlIHQuZmVhdHVyZXMpfSxuKX19KCk7Zm9yKHZhciBvIGluIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycz10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnN8fHt9LHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XT10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF18fFtdLHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XS5wdXNoKGkpLGkuZGVsZWdhdGVzKXRoaXMub24obyxpLmRlbGVnYXRlc1tvXSk7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwPT09cilyZXR1cm4gbi5wcm90b3R5cGUub2ZmLmNhbGwodGhpcyx0LGUpO2lmKHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyYmdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdKWZvcih2YXIgYT10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF0saT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgbz1hW2ldO2lmKG8ubGF5ZXI9PT1lJiZvLmxpc3RlbmVyPT09cil7Zm9yKHZhciBzIGluIG8uZGVsZWdhdGVzKXRoaXMub2ZmKHMsby5kZWxlZ2F0ZXNbc10pO3JldHVybiBhLnNwbGljZShpLDEpLHRoaXN9fXJldHVybiB0aGlzfSxhLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXM9ZnVuY3Rpb24oZSxyKXtpZighdGhpcy5zdHlsZSlyZXR1cm5bXTt2YXIgbjtpZih2b2lkIDAhPT1yfHx2b2lkIDA9PT1lfHxlIGluc3RhbmNlb2YgdC5Qb2ludHx8QXJyYXkuaXNBcnJheShlKXx8KHI9ZSxlPXZvaWQgMCkscj1yfHx7fSwoZT1lfHxbWzAsMF0sW3RoaXMudHJhbnNmb3JtLndpZHRoLHRoaXMudHJhbnNmb3JtLmhlaWdodF1dKWluc3RhbmNlb2YgdC5Qb2ludHx8Im51bWJlciI9PXR5cGVvZiBlWzBdKW49W3QuUG9pbnQuY29udmVydChlKV07ZWxzZXt2YXIgYT10LlBvaW50LmNvbnZlcnQoZVswXSksaT10LlBvaW50LmNvbnZlcnQoZVsxXSk7bj1bYSxuZXcgdC5Qb2ludChpLngsYS55KSxpLG5ldyB0LlBvaW50KGEueCxpLnkpLGFdfXJldHVybiB0aGlzLnN0eWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhuLHIsdGhpcy50cmFuc2Zvcm0pfSxhLnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUucXVlcnlTb3VyY2VGZWF0dXJlcyh0LGUpfSxhLnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbihlLHIpe3JldHVybiExIT09KHI9dC5leHRlbmQoe30se2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTp0aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHl9LHIpKS5kaWZmJiZyLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT09PXRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseSYmdGhpcy5zdHlsZSYmZT8odGhpcy5fZGlmZlN0eWxlKGUsciksdGhpcyk6KHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseT1yLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSx0aGlzLl91cGRhdGVTdHlsZShlLHIpKX0sYS5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUmJih0aGlzLnN0eWxlLnNldEV2ZW50ZWRQYXJlbnQobnVsbCksdGhpcy5zdHlsZS5fcmVtb3ZlKCkpLHQ/KHRoaXMuc3R5bGU9bmV3IFJlKHRoaXMsZXx8e30pLHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudCh0aGlzLHtzdHlsZTp0aGlzLnN0eWxlfSksInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuc3R5bGUubG9hZFVSTCh0KTp0aGlzLnN0eWxlLmxvYWRKU09OKHQpLHRoaXMpOihkZWxldGUgdGhpcy5zdHlsZSx0aGlzKX0sYS5wcm90b3R5cGUuX2RpZmZTdHlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgYT10aGlzLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTChlKSxpPXRoaXMuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QoYSx0LlJlc291cmNlVHlwZS5TdHlsZSk7dC5nZXRKU09OKGksZnVuY3Rpb24oZSxhKXtlP24uZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTphJiZuLl91cGRhdGVEaWZmKGEscil9KX1lbHNlIm9iamVjdCI9PXR5cGVvZiBlJiZ0aGlzLl91cGRhdGVEaWZmKGUscil9LGEucHJvdG90eXBlLl91cGRhdGVEaWZmPWZ1bmN0aW9uKGUscil7dHJ5e3RoaXMuc3R5bGUuc2V0U3RhdGUoZSkmJnRoaXMuX3VwZGF0ZSghMCl9Y2F0Y2gobil7dC53YXJuT25jZSgiVW5hYmxlIHRvIHBlcmZvcm0gc3R5bGUgZGlmZjogIisobi5tZXNzYWdlfHxuLmVycm9yfHxuKSsiLiAgUmVidWlsZGluZyB0aGUgc3R5bGUgZnJvbSBzY3JhdGNoLiIpLHRoaXMuX3VwZGF0ZVN0eWxlKGUscil9fSxhLnByb3RvdHlwZS5nZXRTdHlsZT1mdW5jdGlvbigpe2lmKHRoaXMuc3R5bGUpcmV0dXJuIHRoaXMuc3R5bGUuc2VyaWFsaXplKCl9LGEucHJvdG90eXBlLmlzU3R5bGVMb2FkZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHlsZT90aGlzLnN0eWxlLmxvYWRlZCgpOnQud2Fybk9uY2UoIlRoZXJlIGlzIG5vIHN0eWxlIGFkZGVkIHRvIHRoZSBtYXAuIil9LGEucHJvdG90eXBlLmFkZFNvdXJjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmFkZFNvdXJjZSh0LGUpLHRoaXMuX3VwZGF0ZSghMCl9LGEucHJvdG90eXBlLmlzU291cmNlTG9hZGVkPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuc291cmNlQ2FjaGVzW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIubG9hZGVkKCk7dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCBJRCAnIitlKyInIikpKX0sYS5wcm90b3R5cGUuYXJlVGlsZXNMb2FkZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIGUgaW4gdCl7dmFyIHI9dFtlXS5fdGlsZXM7Zm9yKHZhciBuIGluIHIpe3ZhciBhPXJbbl07aWYoImxvYWRlZCIhPT1hLnN0YXRlJiYiZXJyb3JlZCIhPT1hLnN0YXRlKXJldHVybiExfX1yZXR1cm4hMH0sYS5wcm90b3R5cGUuYWRkU291cmNlVHlwZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuYWRkU291cmNlVHlwZSh0LGUscil9LGEucHJvdG90eXBlLnJlbW92ZVNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5yZW1vdmVTb3VyY2UodCksdGhpcy5fdXBkYXRlKCEwKX0sYS5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldFNvdXJjZSh0KX0sYS5wcm90b3R5cGUuYWRkSW1hZ2U9ZnVuY3Rpb24oZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgYT1uLnBpeGVsUmF0aW87dm9pZCAwPT09YSYmKGE9MSk7dmFyIGk9bi5zZGY7aWYodm9pZCAwPT09aSYmKGk9ITEpLHIgaW5zdGFuY2VvZiBPbil7dmFyIG89dC5icm93c2VyLmdldEltYWdlRGF0YShyKSxzPW8ud2lkdGgsbD1vLmhlaWdodCxjPW8uZGF0YTt0aGlzLnN0eWxlLmFkZEltYWdlKGUse2RhdGE6bmV3IHQuUkdCQUltYWdlKHt3aWR0aDpzLGhlaWdodDpsfSxjKSxwaXhlbFJhdGlvOmEsc2RmOmksdmVyc2lvbjowfSl9ZWxzZXtpZih2b2lkIDA9PT1yLndpZHRofHx2b2lkIDA9PT1yLmhlaWdodClyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50cyB0byBtYXAuYWRkSW1hZ2UoKS4gVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGFuIGBIVE1MSW1hZ2VFbGVtZW50YCwgYEltYWdlRGF0YWAsIG9yIG9iamVjdCB3aXRoIGB3aWR0aGAsIGBoZWlnaHRgLCBhbmQgYGRhdGFgIHByb3BlcnRpZXMgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgYEltYWdlRGF0YWAiKSkpO3ZhciB1PXIud2lkdGgsaD1yLmhlaWdodCxmPXIuZGF0YSxwPXI7dGhpcy5zdHlsZS5hZGRJbWFnZShlLHtkYXRhOm5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6dSxoZWlnaHQ6aH0sbmV3IFVpbnQ4QXJyYXkoZikpLHBpeGVsUmF0aW86YSxzZGY6aSx2ZXJzaW9uOjAsdXNlckltYWdlOnB9KSxwLm9uQWRkJiZwLm9uQWRkKHRoaXMsZSl9fSxhLnByb3RvdHlwZS51cGRhdGVJbWFnZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuc3R5bGUuZ2V0SW1hZ2UoZSk7aWYoIW4pcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIG1hcCBoYXMgbm8gaW1hZ2Ugd2l0aCB0aGF0IGlkLiBJZiB5b3UgYXJlIGFkZGluZyBhIG5ldyBpbWFnZSB1c2UgYG1hcC5hZGRJbWFnZSguLi4pYCBpbnN0ZWFkLiIpKSk7dmFyIGE9ciBpbnN0YW5jZW9mIE9uP3QuYnJvd3Nlci5nZXRJbWFnZURhdGEocik6cixpPWEud2lkdGgsbz1hLmhlaWdodCxzPWEuZGF0YTtpZih2b2lkIDA9PT1pfHx2b2lkIDA9PT1vKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIG1hcC51cGRhdGVJbWFnZSgpLiBUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWAgcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYCIpKSk7aWYoaSE9PW4uZGF0YS53aWR0aHx8byE9PW4uZGF0YS5oZWlnaHQpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHVwZGF0ZWQgaW1hZ2UgbXVzdCBiZSB0aGF0IHNhbWUgYXMgdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIGltYWdlIikpKTt2YXIgbD0hKHIgaW5zdGFuY2VvZiBPbik7bi5kYXRhLnJlcGxhY2UocyxsKSx0aGlzLnN0eWxlLnVwZGF0ZUltYWdlKGUsbil9LGEucHJvdG90eXBlLmhhc0ltYWdlPWZ1bmN0aW9uKGUpe3JldHVybiBlPyEhdGhpcy5zdHlsZS5nZXRJbWFnZShlKToodGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVpcmVkIGltYWdlIGlkIikpKSwhMSl9LGEucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKHQpe3RoaXMuc3R5bGUucmVtb3ZlSW1hZ2UodCl9LGEucHJvdG90eXBlLmxvYWRJbWFnZT1mdW5jdGlvbihlLHIpe3QuZ2V0SW1hZ2UodGhpcy5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChlLHQuUmVzb3VyY2VUeXBlLkltYWdlKSxyKX0sYS5wcm90b3R5cGUubGlzdEltYWdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0eWxlLmxpc3RJbWFnZXMoKX0sYS5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5hZGRMYXllcih0LGUpLHRoaXMuX3VwZGF0ZSghMCl9LGEucHJvdG90eXBlLm1vdmVMYXllcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLm1vdmVMYXllcih0LGUpLHRoaXMuX3VwZGF0ZSghMCl9LGEucHJvdG90eXBlLnJlbW92ZUxheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLnJlbW92ZUxheWVyKHQpLHRoaXMuX3VwZGF0ZSghMCl9LGEucHJvdG90eXBlLmdldExheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldExheWVyKHQpfSxhLnByb3RvdHlwZS5zZXRGaWx0ZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj17fSksdGhpcy5zdHlsZS5zZXRGaWx0ZXIodCxlLHIpLHRoaXMuX3VwZGF0ZSghMCl9LGEucHJvdG90eXBlLnNldExheWVyWm9vbVJhbmdlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRMYXllclpvb21SYW5nZSh0LGUsciksdGhpcy5fdXBkYXRlKCEwKX0sYS5wcm90b3R5cGUuZ2V0RmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldEZpbHRlcih0KX0sYS5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLHRoaXMuc3R5bGUuc2V0UGFpbnRQcm9wZXJ0eSh0LGUscixuKSx0aGlzLl91cGRhdGUoITApfSxhLnByb3RvdHlwZS5nZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0UGFpbnRQcm9wZXJ0eSh0LGUpfSxhLnByb3RvdHlwZS5zZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLHRoaXMuc3R5bGUuc2V0TGF5b3V0UHJvcGVydHkodCxlLHIsbiksdGhpcy5fdXBkYXRlKCEwKX0sYS5wcm90b3R5cGUuZ2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRMYXlvdXRQcm9wZXJ0eSh0LGUpfSxhLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5zdHlsZS5zZXRMaWdodCh0LGUpLHRoaXMuX3VwZGF0ZSghMCl9LGEucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGlnaHQoKX0sYS5wcm90b3R5cGUuc2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuc2V0RmVhdHVyZVN0YXRlKHQsZSksdGhpcy5fdXBkYXRlKCl9LGEucHJvdG90eXBlLnJlbW92ZUZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLnJlbW92ZUZlYXR1cmVTdGF0ZSh0LGUpLHRoaXMuX3VwZGF0ZSgpfSxhLnByb3RvdHlwZS5nZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0RmVhdHVyZVN0YXRlKHQpfSxhLnByb3RvdHlwZS5nZXRDb250YWluZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxhLnByb3RvdHlwZS5nZXRDYW52YXNDb250YWluZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FudmFzQ29udGFpbmVyfSxhLnByb3RvdHlwZS5nZXRDYW52YXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FudmFzfSxhLnByb3RvdHlwZS5fY29udGFpbmVyRGltZW5zaW9ucz1mdW5jdGlvbigpe3ZhciB0PTAsZT0wO3JldHVybiB0aGlzLl9jb250YWluZXImJih0PXRoaXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aHx8NDAwLGU9dGhpcy5fY29udGFpbmVyLmNsaWVudEhlaWdodHx8MzAwKSxbdCxlXX0sYS5wcm90b3R5cGUuX2RldGVjdE1pc3NpbmdDU1M9ZnVuY3Rpb24oKXsicmdiKDI1MCwgMTI4LCAxMTQpIiE9PXQud2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5fbWlzc2luZ0NTU0NhbmFyeSkuZ2V0UHJvcGVydHlWYWx1ZSgiYmFja2dyb3VuZC1jb2xvciIpJiZ0Lndhcm5PbmNlKCJUaGlzIHBhZ2UgYXBwZWFycyB0byBiZSBtaXNzaW5nIENTUyBkZWNsYXJhdGlvbnMgZm9yIE1hcGJveCBHTCBKUywgd2hpY2ggbWF5IGNhdXNlIHRoZSBtYXAgdG8gZGlzcGxheSBpbmNvcnJlY3RseS4gUGxlYXNlIGVuc3VyZSB5b3VyIHBhZ2UgaW5jbHVkZXMgbWFwYm94LWdsLmNzcywgYXMgZGVzY3JpYmVkIGluIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2FwaS8uIil9LGEucHJvdG90eXBlLl9zZXR1cENvbnRhaW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcjt0LmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLW1hcCIpLCh0aGlzLl9taXNzaW5nQ1NTQ2FuYXJ5PXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jYW5hcnkiLHQpKS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLHRoaXMuX2RldGVjdE1pc3NpbmdDU1MoKTt2YXIgZT10aGlzLl9jYW52YXNDb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWNhbnZhcy1jb250YWluZXIiLHQpO3RoaXMuX2ludGVyYWN0aXZlJiZlLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWludGVyYWN0aXZlIiksdGhpcy5fY2FudmFzPXIuY3JlYXRlKCJjYW52YXMiLCJtYXBib3hnbC1jYW52YXMiLGUpLHRoaXMuX2NhbnZhcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0Iix0aGlzLl9jb250ZXh0TG9zdCwhMSksdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIix0aGlzLl9jb250ZXh0UmVzdG9yZWQsITEpLHRoaXMuX2NhbnZhcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLHRoaXMuX2NhbnZhcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJNYXAiKTt2YXIgbj10aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCk7dGhpcy5fcmVzaXplQ2FudmFzKG5bMF0sblsxXSk7dmFyIGE9dGhpcy5fY29udHJvbENvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY29udHJvbC1jb250YWluZXIiLHQpLGk9dGhpcy5fY29udHJvbFBvc2l0aW9ucz17fTtbInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwiYm90dG9tLWxlZnQiLCJib3R0b20tcmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lbdF09ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwtIit0LGEpfSl9LGEucHJvdG90eXBlLl9yZXNpemVDYW52YXM9ZnVuY3Rpb24oZSxyKXt2YXIgbj10LndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO3RoaXMuX2NhbnZhcy53aWR0aD1uKmUsdGhpcy5fY2FudmFzLmhlaWdodD1uKnIsdGhpcy5fY2FudmFzLnN0eWxlLndpZHRoPWUrInB4Iix0aGlzLl9jYW52YXMuc3R5bGUuaGVpZ2h0PXIrInB4In0sYS5wcm90b3R5cGUuX3NldHVwUGFpbnRlcj1mdW5jdGlvbigpe3ZhciByPXQuZXh0ZW5kKHt9LGUud2ViR0xDb250ZXh0QXR0cmlidXRlcyx7ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDp0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0LHByZXNlcnZlRHJhd2luZ0J1ZmZlcjp0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsYW50aWFsaWFzOnRoaXMuX2FudGlhbGlhc3x8ITF9KSxuPXRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCJ3ZWJnbCIscil8fHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLHIpO24/KHRoaXMucGFpbnRlcj1uZXcgb24obix0aGlzLnRyYW5zZm9ybSksdC53ZWJwU3VwcG9ydGVkLnRlc3RTdXBwb3J0KG4pKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIFdlYkdMIikpKX0sYS5wcm90b3R5cGUuX2NvbnRleHRMb3N0PWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLl9mcmFtZSYmKHRoaXMuX2ZyYW1lLmNhbmNlbCgpLHRoaXMuX2ZyYW1lPW51bGwpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgid2ViZ2xjb250ZXh0bG9zdCIse29yaWdpbmFsRXZlbnQ6ZX0pKX0sYS5wcm90b3R5cGUuX2NvbnRleHRSZXN0b3JlZD1mdW5jdGlvbihlKXt0aGlzLl9zZXR1cFBhaW50ZXIoKSx0aGlzLnJlc2l6ZSgpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHtvcmlnaW5hbEV2ZW50OmV9KSl9LGEucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9zdHlsZURpcnR5JiYhdGhpcy5fc291cmNlc0RpcnR5JiYhIXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUubG9hZGVkKCl9LGEucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGU/KHRoaXMuX3N0eWxlRGlydHk9dGhpcy5fc3R5bGVEaXJ0eXx8dCx0aGlzLl9zb3VyY2VzRGlydHk9ITAsdGhpcy50cmlnZ2VyUmVwYWludCgpLHRoaXMpOnRoaXN9LGEucHJvdG90eXBlLl9yZXF1ZXN0UmVuZGVyRnJhbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5hZGQodCl9LGEucHJvdG90eXBlLl9jYW5jZWxSZW5kZXJGcmFtZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJUYXNrUXVldWUucmVtb3ZlKHQpfSxhLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5wYWludGVyLmNvbnRleHQuc2V0RGlydHkoKSx0aGlzLnBhaW50ZXIuc2V0QmFzZVN0YXRlKCksdGhpcy5fcmVuZGVyVGFza1F1ZXVlLnJ1bigpO3ZhciBlPSExO2lmKHRoaXMuc3R5bGUmJnRoaXMuX3N0eWxlRGlydHkpe3RoaXMuX3N0eWxlRGlydHk9ITE7dmFyIHI9dGhpcy50cmFuc2Zvcm0uem9vbSxuPXQuYnJvd3Nlci5ub3coKTt0aGlzLnN0eWxlLnpvb21IaXN0b3J5LnVwZGF0ZShyLG4pO3ZhciBhPW5ldyB0LkV2YWx1YXRpb25QYXJhbWV0ZXJzKHIse25vdzpuLGZhZGVEdXJhdGlvbjp0aGlzLl9mYWRlRHVyYXRpb24sem9vbUhpc3Rvcnk6dGhpcy5zdHlsZS56b29tSGlzdG9yeSx0cmFuc2l0aW9uOnRoaXMuc3R5bGUuZ2V0VHJhbnNpdGlvbigpfSksaT1hLmNyb3NzRmFkaW5nRmFjdG9yKCk7MT09PWkmJmk9PT10aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcnx8KGU9ITAsdGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3I9aSksdGhpcy5zdHlsZS51cGRhdGUoYSl9cmV0dXJuIHRoaXMuc3R5bGUmJnRoaXMuX3NvdXJjZXNEaXJ0eSYmKHRoaXMuX3NvdXJjZXNEaXJ0eT0hMSx0aGlzLnN0eWxlLl91cGRhdGVTb3VyY2VzKHRoaXMudHJhbnNmb3JtKSksdGhpcy5fcGxhY2VtZW50RGlydHk9dGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5fdXBkYXRlUGxhY2VtZW50KHRoaXMucGFpbnRlci50cmFuc2Zvcm0sdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy5fZmFkZUR1cmF0aW9uLHRoaXMuX2Nyb3NzU291cmNlQ29sbGlzaW9ucyksdGhpcy5wYWludGVyLnJlbmRlcih0aGlzLnN0eWxlLHtzaG93VGlsZUJvdW5kYXJpZXM6dGhpcy5zaG93VGlsZUJvdW5kYXJpZXMsc2hvd092ZXJkcmF3SW5zcGVjdG9yOnRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcixyb3RhdGluZzp0aGlzLmlzUm90YXRpbmcoKSx6b29taW5nOnRoaXMuaXNab29taW5nKCksbW92aW5nOnRoaXMuaXNNb3ZpbmcoKSxmYWRlRHVyYXRpb246dGhpcy5fZmFkZUR1cmF0aW9ufSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyZW5kZXIiKSksdGhpcy5sb2FkZWQoKSYmIXRoaXMuX2xvYWRlZCYmKHRoaXMuX2xvYWRlZD0hMCx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImxvYWQiKSkpLHRoaXMuc3R5bGUmJih0aGlzLnN0eWxlLmhhc1RyYW5zaXRpb25zKCl8fGUpJiYodGhpcy5fc3R5bGVEaXJ0eT0hMCksdGhpcy5zdHlsZSYmIXRoaXMuX3BsYWNlbWVudERpcnR5JiZ0aGlzLnN0eWxlLl9yZWxlYXNlU3ltYm9sRmFkZVRpbGVzKCksdGhpcy5fc291cmNlc0RpcnR5fHx0aGlzLl9yZXBhaW50fHx0aGlzLl9zdHlsZURpcnR5fHx0aGlzLl9wbGFjZW1lbnREaXJ0eT90aGlzLnRyaWdnZXJSZXBhaW50KCk6IXRoaXMuaXNNb3ZpbmcoKSYmdGhpcy5sb2FkZWQoKSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJpZGxlIikpLHRoaXN9LGEucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX2hhc2gmJnRoaXMuX2hhc2gucmVtb3ZlKCk7Zm9yKHZhciBlPTAscj10aGlzLl9jb250cm9scztlPHIubGVuZ3RoO2UrPTEpcltlXS5vblJlbW92ZSh0aGlzKTt0aGlzLl9jb250cm9scz1bXSx0aGlzLl9mcmFtZSYmKHRoaXMuX2ZyYW1lLmNhbmNlbCgpLHRoaXMuX2ZyYW1lPW51bGwpLHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5jbGVhcigpLHRoaXMuc2V0U3R5bGUobnVsbCksdm9pZCAwIT09dC53aW5kb3cmJih0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX29uV2luZG93UmVzaXplLCExKSx0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJvbmxpbmUiLHRoaXMuX29uV2luZG93T25saW5lLCExKSk7dmFyIG49dGhpcy5wYWludGVyLmNvbnRleHQuZ2wuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9sb3NlX2NvbnRleHQiKTtuJiZuLmxvc2VDb250ZXh0KCksUm4odGhpcy5fY2FudmFzQ29udGFpbmVyKSxSbih0aGlzLl9jb250cm9sQ29udGFpbmVyKSxSbih0aGlzLl9taXNzaW5nQ1NTQ2FuYXJ5KSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtbWFwIiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyZW1vdmUiKSl9LGEucHJvdG90eXBlLnRyaWdnZXJSZXBhaW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnN0eWxlJiYhdGhpcy5fZnJhbWUmJih0aGlzLl9mcmFtZT10LmJyb3dzZXIuZnJhbWUoZnVuY3Rpb24oKXtlLl9mcmFtZT1udWxsLGUuX3JlbmRlcigpfSkpfSxhLnByb3RvdHlwZS5fb25XaW5kb3dPbmxpbmU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGUoKX0sYS5wcm90b3R5cGUuX29uV2luZG93UmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5fdHJhY2tSZXNpemUmJnRoaXMucmVzaXplKCkuX3VwZGF0ZSgpfSxpLnNob3dUaWxlQm91bmRhcmllcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dUaWxlQm91bmRhcmllc30saS5zaG93VGlsZUJvdW5kYXJpZXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dUaWxlQm91bmRhcmllcyE9PXQmJih0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXM9dCx0aGlzLl91cGRhdGUoKSl9LGkuc2hvd0NvbGxpc2lvbkJveGVzLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzfSxpLnNob3dDb2xsaXNpb25Cb3hlcy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzIT09dCYmKHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcz10LHQ/dGhpcy5zdHlsZS5fZ2VuZXJhdGVDb2xsaXNpb25Cb3hlcygpOnRoaXMuX3VwZGF0ZSgpKX0saS5zaG93T3ZlcmRyYXdJbnNwZWN0b3IuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3J9LGkuc2hvd092ZXJkcmF3SW5zcGVjdG9yLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IhPT10JiYodGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yPXQsdGhpcy5fdXBkYXRlKCkpfSxpLnJlcGFpbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9yZXBhaW50fSxpLnJlcGFpbnQuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3JlcGFpbnQhPT10JiYodGhpcy5fcmVwYWludD10LHRoaXMudHJpZ2dlclJlcGFpbnQoKSl9LGkudmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl92ZXJ0aWNlc30saS52ZXJ0aWNlcy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fdmVydGljZXM9dCx0aGlzLl91cGRhdGUoKX0sYS5wcm90b3R5cGUuX3NldENhY2hlTGltaXRzPWZ1bmN0aW9uKGUscil7dC5zZXRDYWNoZUxpbWl0cyhlLHIpfSxpLnZlcnNpb24uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHQudmVyc2lvbn0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYS5wcm90b3R5cGUsaSksYX0oRW4pO2Z1bmN0aW9uIFJuKHQpe3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfXZhciBGbj17c2hvd0NvbXBhc3M6ITAsc2hvd1pvb206ITAsdmlzdWFsaXplUGl0Y2g6ITF9LEJuPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7dGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LEZuLGUpLHRoaXMuX2NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWdyb3VwIiksdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfSksdGhpcy5vcHRpb25zLnNob3dab29tJiYodC5iaW5kQWxsKFsiX3VwZGF0ZVpvb21CdXR0b25zIl0sdGhpcyksdGhpcy5fem9vbUluQnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbigibWFwYm94Z2wtY3RybC1pY29uIG1hcGJveGdsLWN0cmwtem9vbS1pbiIsIlpvb20gaW4iLGZ1bmN0aW9uKCl7cmV0dXJuIG4uX21hcC56b29tSW4oKX0pLHRoaXMuX3pvb21PdXRCdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC16b29tLW91dCIsIlpvb20gb3V0IixmdW5jdGlvbigpe3JldHVybiBuLl9tYXAuem9vbU91dCgpfSkpLHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcyYmKHQuYmluZEFsbChbIl9yb3RhdGVDb21wYXNzQXJyb3ciXSx0aGlzKSx0aGlzLl9jb21wYXNzPXRoaXMuX2NyZWF0ZUJ1dHRvbigibWFwYm94Z2wtY3RybC1pY29uIG1hcGJveGdsLWN0cmwtY29tcGFzcyIsIlJlc2V0IGJlYXJpbmcgdG8gbm9ydGgiLGZ1bmN0aW9uKCl7bi5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoP24uX21hcC5yZXNldE5vcnRoUGl0Y2goKTpuLl9tYXAucmVzZXROb3J0aCgpfSksdGhpcy5fY29tcGFzc0Fycm93PXIuY3JlYXRlKCJzcGFuIiwibWFwYm94Z2wtY3RybC1jb21wYXNzLWFycm93Iix0aGlzLl9jb21wYXNzKSl9O2Z1bmN0aW9uIE5uKGUscixuKXtpZihlPW5ldyB0LkxuZ0xhdChlLmxuZyxlLmxhdCkscil7dmFyIGE9bmV3IHQuTG5nTGF0KGUubG5nLTM2MCxlLmxhdCksaT1uZXcgdC5MbmdMYXQoZS5sbmcrMzYwLGUubGF0KSxvPW4ubG9jYXRpb25Qb2ludChlKS5kaXN0U3FyKHIpO24ubG9jYXRpb25Qb2ludChhKS5kaXN0U3FyKHIpPG8/ZT1hOm4ubG9jYXRpb25Qb2ludChpKS5kaXN0U3FyKHIpPG8mJihlPWkpfWZvcig7TWF0aC5hYnMoZS5sbmctbi5jZW50ZXIubG5nKT4xODA7KXt2YXIgcz1uLmxvY2F0aW9uUG9pbnQoZSk7aWYocy54Pj0wJiZzLnk+PTAmJnMueDw9bi53aWR0aCYmcy55PD1uLmhlaWdodClicmVhaztlLmxuZz5uLmNlbnRlci5sbmc/ZS5sbmctPTM2MDplLmxuZys9MzYwfXJldHVybiBlfUJuLnByb3RvdHlwZS5fdXBkYXRlWm9vbUJ1dHRvbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuZ2V0Wm9vbSgpO3Q9PT10aGlzLl9tYXAuZ2V0TWF4Wm9vbSgpP3RoaXMuX3pvb21JbkJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWljb24tZGlzYWJsZWQiKTp0aGlzLl96b29tSW5CdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1pY29uLWRpc2FibGVkIiksdD09PXRoaXMuX21hcC5nZXRNaW5ab29tKCk/dGhpcy5fem9vbU91dEJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWljb24tZGlzYWJsZWQiKTp0aGlzLl96b29tT3V0QnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtaWNvbi1kaXNhYmxlZCIpfSxCbi5wcm90b3R5cGUuX3JvdGF0ZUNvbXBhc3NBcnJvdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaD8ic2NhbGUoIisxL01hdGgucG93KE1hdGguY29zKHRoaXMuX21hcC50cmFuc2Zvcm0ucGl0Y2gqKE1hdGguUEkvMTgwKSksLjUpKyIpIHJvdGF0ZVgoIit0aGlzLl9tYXAudHJhbnNmb3JtLnBpdGNoKyJkZWcpIHJvdGF0ZVooIit0aGlzLl9tYXAudHJhbnNmb3JtLmFuZ2xlKigxODAvTWF0aC5QSSkrImRlZykiOiJyb3RhdGUoIit0aGlzLl9tYXAudHJhbnNmb3JtLmFuZ2xlKigxODAvTWF0aC5QSSkrImRlZykiO3RoaXMuX2NvbXBhc3NBcnJvdy5zdHlsZS50cmFuc2Zvcm09dH0sQm4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLm9wdGlvbnMuc2hvd1pvb20mJih0aGlzLl9tYXAub24oInpvb20iLHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKSx0aGlzLl91cGRhdGVab29tQnV0dG9ucygpKSx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0aGlzLm9wdGlvbnMudmlzdWFsaXplUGl0Y2gmJnRoaXMuX21hcC5vbigicGl0Y2giLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5fbWFwLm9uKCJyb3RhdGUiLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KCksdGhpcy5faGFuZGxlcj1uZXcgeG4odCx7YnV0dG9uOiJsZWZ0IixlbGVtZW50OnRoaXMuX2NvbXBhc3N9KSxyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fY29tcGFzcywibW91c2Vkb3duIix0aGlzLl9oYW5kbGVyLm9uTW91c2VEb3duKSxyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fY29tcGFzcywidG91Y2hzdGFydCIsdGhpcy5faGFuZGxlci5vbk1vdXNlRG93bix7cGFzc2l2ZTohMX0pLHRoaXMuX2hhbmRsZXIuZW5hYmxlKCkpLHRoaXMuX2NvbnRhaW5lcn0sQm4ucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7ci5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLm9wdGlvbnMuc2hvd1pvb20mJnRoaXMuX21hcC5vZmYoInpvb20iLHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKSx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0aGlzLm9wdGlvbnMudmlzdWFsaXplUGl0Y2gmJnRoaXMuX21hcC5vZmYoInBpdGNoIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX21hcC5vZmYoInJvdGF0ZSIsdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fY29tcGFzcywibW91c2Vkb3duIix0aGlzLl9oYW5kbGVyLm9uTW91c2VEb3duKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fY29tcGFzcywidG91Y2hzdGFydCIsdGhpcy5faGFuZGxlci5vbk1vdXNlRG93bix7cGFzc2l2ZTohMX0pLHRoaXMuX2hhbmRsZXIuZGlzYWJsZSgpLGRlbGV0ZSB0aGlzLl9oYW5kbGVyKSxkZWxldGUgdGhpcy5fbWFwfSxCbi5wcm90b3R5cGUuX2NyZWF0ZUJ1dHRvbj1mdW5jdGlvbih0LGUsbil7dmFyIGE9ci5jcmVhdGUoImJ1dHRvbiIsdCx0aGlzLl9jb250YWluZXIpO3JldHVybiBhLnR5cGU9ImJ1dHRvbiIsYS50aXRsZT1lLGEuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixlKSxhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixuKSxhfTt2YXIgam49e2NlbnRlcjoidHJhbnNsYXRlKC01MCUsLTUwJSkiLHRvcDoidHJhbnNsYXRlKC01MCUsMCkiLCJ0b3AtbGVmdCI6InRyYW5zbGF0ZSgwLDApIiwidG9wLXJpZ2h0IjoidHJhbnNsYXRlKC0xMDAlLDApIixib3R0b206InRyYW5zbGF0ZSgtNTAlLC0xMDAlKSIsImJvdHRvbS1sZWZ0IjoidHJhbnNsYXRlKDAsLTEwMCUpIiwiYm90dG9tLXJpZ2h0IjoidHJhbnNsYXRlKC0xMDAlLC0xMDAlKSIsbGVmdDoidHJhbnNsYXRlKDAsLTUwJSkiLHJpZ2h0OiJ0cmFuc2xhdGUoLTEwMCUsLTUwJSkifTtmdW5jdGlvbiBWbih0LGUscil7dmFyIG49dC5jbGFzc0xpc3Q7Zm9yKHZhciBhIGluIGpuKW4ucmVtb3ZlKCJtYXBib3hnbC0iK3IrIi1hbmNob3ItIithKTtuLmFkZCgibWFwYm94Z2wtIityKyItYW5jaG9yLSIrZSl9dmFyIFVuLHFuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixhKXtpZihlLmNhbGwodGhpcyksKG4gaW5zdGFuY2VvZiB0LndpbmRvdy5IVE1MRWxlbWVudHx8YSkmJihuPXQuZXh0ZW5kKHtlbGVtZW50Om59LGEpKSx0LmJpbmRBbGwoWyJfdXBkYXRlIiwiX29uTW92ZSIsIl9vblVwIiwiX2FkZERyYWdIYW5kbGVyIiwiX29uTWFwQ2xpY2siXSx0aGlzKSx0aGlzLl9hbmNob3I9biYmbi5hbmNob3J8fCJjZW50ZXIiLHRoaXMuX2NvbG9yPW4mJm4uY29sb3J8fCIjM0ZCMUNFIix0aGlzLl9kcmFnZ2FibGU9biYmbi5kcmFnZ2FibGV8fCExLHRoaXMuX3N0YXRlPSJpbmFjdGl2ZSIsbiYmbi5lbGVtZW50KXRoaXMuX2VsZW1lbnQ9bi5lbGVtZW50LHRoaXMuX29mZnNldD10LlBvaW50LmNvbnZlcnQobiYmbi5vZmZzZXR8fFswLDBdKTtlbHNle3RoaXMuX2RlZmF1bHRNYXJrZXI9ITAsdGhpcy5fZWxlbWVudD1yLmNyZWF0ZSgiZGl2Iik7dmFyIGk9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTtpLnNldEF0dHJpYnV0ZU5TKG51bGwsImRpc3BsYXkiLCJibG9jayIpLGkuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IiwiNDFweCIpLGkuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLCIyN3B4IiksaS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ2aWV3Qm94IiwiMCAwIDI3IDQxIik7dmFyIG89ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7by5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UiLCJub25lIiksby5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2Utd2lkdGgiLCIxIiksby5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwibm9uZSIpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbC1ydWxlIiwiZXZlbm9kZCIpO3ZhciBzPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO3Muc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbC1ydWxlIiwibm9uemVybyIpO3ZhciBsPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO2wuc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlKDMuMCwgMjkuMCkiKSxsLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjMDAwMDAwIik7Zm9yKHZhciBjPTAsdT1be3J4OiIxMC41IixyeToiNS4yNTAwMjI3MyJ9LHtyeDoiMTAuNSIscnk6IjUuMjUwMDIyNzMifSx7cng6IjkuNSIscnk6IjQuNzcyNzUwMDcifSx7cng6IjguNSIscnk6IjQuMjk1NDk5MzYifSx7cng6IjcuNSIscnk6IjMuODE4MjIzMDgifSx7cng6IjYuNSIscnk6IjMuMzQwOTQ2NzkifSx7cng6IjUuNSIscnk6IjIuODYzNjcwNTEifSx7cng6IjQuNSIscnk6IjIuMzg2MzY4NjQifV07Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgaD11W2NdLGY9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJlbGxpcHNlIik7Zi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJvcGFjaXR5IiwiMC4wNCIpLGYuc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLCIxMC41IiksZi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeSIsIjUuODAwMjkwMDgiKSxmLnNldEF0dHJpYnV0ZU5TKG51bGwsInJ4IixoLnJ4KSxmLnNldEF0dHJpYnV0ZU5TKG51bGwsInJ5IixoLnJ5KSxsLmFwcGVuZENoaWxkKGYpfXZhciBwPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO3Auc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsdGhpcy5fY29sb3IpO3ZhciBkPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2Quc2V0QXR0cmlidXRlTlMobnVsbCwiZCIsIk0yNywxMy41IEMyNywxOS4wNzQ2NDQgMjAuMjUwMDAxLDI3LjAwMDAwMiAxNC43NSwzNC41MDAwMDIgQzE0LjAxNjY2NSwzNS41MDAwMDQgMTIuOTgzMzM1LDM1LjUwMDAwNCAxMi4yNSwzNC41MDAwMDIgQzYuNzQ5OTk5MywyNy4wMDAwMDIgMCwxOS4yMjI1NjIgMCwxMy41IEMwLDYuMDQ0MTU1OSA2LjA0NDE1NTksMCAxMy41LDAgQzIwLjk1NTg0NCwwIDI3LDYuMDQ0MTU1OSAyNywxMy41IFoiKSxwLmFwcGVuZENoaWxkKGQpO3ZhciBnPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO2cuc2V0QXR0cmlidXRlTlMobnVsbCwib3BhY2l0eSIsIjAuMjUiKSxnLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjMDAwMDAwIik7dmFyIHY9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7di5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIiwiTTEzLjUsMCBDNi4wNDQxNTU5LDAgMCw2LjA0NDE1NTkgMCwxMy41IEMwLDE5LjIyMjU2MiA2Ljc0OTk5OTMsMjcgMTIuMjUsMzQuNSBDMTMsMzUuNTIyNzI3IDE0LjAxNjY2NCwzNS41MDAwMDQgMTQuNzUsMzQuNSBDMjAuMjUwMDAxLDI3IDI3LDE5LjA3NDY0NCAyNywxMy41IEMyNyw2LjA0NDE1NTkgMjAuOTU1ODQ0LDAgMTMuNSwwIFogTTEzLjUsMSBDMjAuNDE1NDA0LDEgMjYsNi41ODQ1OTYgMjYsMTMuNSBDMjYsMTUuODk4NjU3IDI0LjQ5NTU4NCwxOS4xODE0MzEgMjIuMjIwNzAzLDIyLjczODI4MSBDMTkuOTQ1ODIzLDI2LjI5NTEzMiAxNi43MDUxMTksMzAuMTQyMTY3IDEzLjk0MzM1OSwzMy45MDgyMDMgQzEzLjc0MzQ0NSwzNC4xODA4MTQgMTMuNjEyNzE1LDM0LjMyMjczOCAxMy41LDM0LjQ0MTQwNiBDMTMuMzg3Mjg1LDM0LjMyMjczOCAxMy4yNTY1NTUsMzQuMTgwODE0IDEzLjA1NjY0MSwzMy45MDgyMDMgQzEwLjI4NDQ4MSwzMC4xMjc5ODUgNy40MTQ4Njg0LDI2LjMxNDE1OSA1LjAxNTYyNSwyMi43NzM0MzggQzIuNjE2MzgxNiwxOS4yMzI3MTUgMSwxNS45NTM1MzggMSwxMy41IEMxLDYuNTg0NTk2IDYuNTg0NTk2LDEgMTMuNSwxIFoiKSxnLmFwcGVuZENoaWxkKHYpO3ZhciBtPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO20uc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlKDYuMCwgNy4wKSIpLG0uc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiNGRkZGRkYiKTt2YXIgeT1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTt5LnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg4LjAsIDguMCkiKTt2YXIgeD1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNpcmNsZSIpO3guc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiMwMDAwMDAiKSx4LnNldEF0dHJpYnV0ZU5TKG51bGwsIm9wYWNpdHkiLCIwLjI1IikseC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeCIsIjUuNSIpLHguc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLCI1LjUiKSx4LnNldEF0dHJpYnV0ZU5TKG51bGwsInIiLCI1LjQ5OTk5NjIiKTt2YXIgYj1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNpcmNsZSIpO2Iuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIiNGRkZGRkYiKSxiLnNldEF0dHJpYnV0ZU5TKG51bGwsImN4IiwiNS41IiksYi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeSIsIjUuNSIpLGIuc2V0QXR0cmlidXRlTlMobnVsbCwiciIsIjUuNDk5OTk2MiIpLHkuYXBwZW5kQ2hpbGQoeCkseS5hcHBlbmRDaGlsZChiKSxzLmFwcGVuZENoaWxkKGwpLHMuYXBwZW5kQ2hpbGQocCkscy5hcHBlbmRDaGlsZChnKSxzLmFwcGVuZENoaWxkKG0pLHMuYXBwZW5kQ2hpbGQoeSksaS5hcHBlbmRDaGlsZChzKSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGkpLHRoaXMuX29mZnNldD10LlBvaW50LmNvbnZlcnQobiYmbi5vZmZzZXR8fFswLC0xNF0pfXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtbWFya2VyIiksdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0pLFZuKHRoaXMuX2VsZW1lbnQsdGhpcy5fYW5jaG9yLCJtYXJrZXIiKSx0aGlzLl9wb3B1cD1udWxsfXJldHVybiBlJiYobi5fX3Byb3RvX189ZSksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZW1vdmUoKSx0aGlzLl9tYXA9dCx0LmdldENhbnZhc0NvbnRhaW5lcigpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHQub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlKSx0aGlzLnNldERyYWdnYWJsZSh0aGlzLl9kcmFnZ2FibGUpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX21hcC5vbigiY2xpY2siLHRoaXMuX29uTWFwQ2xpY2spLHRoaXN9LG4ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJjbGljayIsdGhpcy5fb25NYXBDbGljayksdGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vZmYoIm1vdXNlZG93biIsdGhpcy5fYWRkRHJhZ0hhbmRsZXIpLHRoaXMuX21hcC5vZmYoInRvdWNoc3RhcnQiLHRoaXMuX2FkZERyYWdIYW5kbGVyKSx0aGlzLl9tYXAub2ZmKCJtb3VzZXVwIix0aGlzLl9vblVwKSx0aGlzLl9tYXAub2ZmKCJ0b3VjaGVuZCIsdGhpcy5fb25VcCksdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcC5vZmYoInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlKSxkZWxldGUgdGhpcy5fbWFwKSxyLnJlbW92ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAucmVtb3ZlKCksdGhpc30sbi5wcm90b3R5cGUuZ2V0TG5nTGF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xuZ0xhdH0sbi5wcm90b3R5cGUuc2V0TG5nTGF0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9sbmdMYXQ9dC5MbmdMYXQuY29udmVydChlKSx0aGlzLl9wb3M9bnVsbCx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCksdGhpcy5fdXBkYXRlKCksdGhpc30sbi5wcm90b3R5cGUuZ2V0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50fSxuLnByb3RvdHlwZS5zZXRQb3B1cD1mdW5jdGlvbih0KXtpZih0aGlzLl9wb3B1cCYmKHRoaXMuX3BvcHVwLnJlbW92ZSgpLHRoaXMuX3BvcHVwPW51bGwpLHQpe2lmKCEoIm9mZnNldCJpbiB0Lm9wdGlvbnMpKXt2YXIgZT1NYXRoLnNxcnQoTWF0aC5wb3coMTMuNSwyKS8yKTt0Lm9wdGlvbnMub2Zmc2V0PXRoaXMuX2RlZmF1bHRNYXJrZXI/e3RvcDpbMCwwXSwidG9wLWxlZnQiOlswLDBdLCJ0b3AtcmlnaHQiOlswLDBdLGJvdHRvbTpbMCwtMzguMV0sImJvdHRvbS1sZWZ0IjpbZSwtMSooMjQuNitlKV0sImJvdHRvbS1yaWdodCI6Wy1lLC0xKigyNC42K2UpXSxsZWZ0OlsxMy41LC0yNC42XSxyaWdodDpbLTEzLjUsLTI0LjZdfTp0aGlzLl9vZmZzZXR9dGhpcy5fcG9wdXA9dCx0aGlzLl9sbmdMYXQmJnRoaXMuX3BvcHVwLnNldExuZ0xhdCh0aGlzLl9sbmdMYXQpfXJldHVybiB0aGlzfSxuLnByb3RvdHlwZS5fb25NYXBDbGljaz1mdW5jdGlvbih0KXt2YXIgZT10Lm9yaWdpbmFsRXZlbnQudGFyZ2V0LHI9dGhpcy5fZWxlbWVudDt0aGlzLl9wb3B1cCYmKGU9PT1yfHxyLmNvbnRhaW5zKGUpKSYmdGhpcy50b2dnbGVQb3B1cCgpfSxuLnByb3RvdHlwZS5nZXRQb3B1cD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cH0sbi5wcm90b3R5cGUudG9nZ2xlUG9wdXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wb3B1cDtyZXR1cm4gdD8odC5pc09wZW4oKT90LnJlbW92ZSgpOnQuYWRkVG8odGhpcy5fbWFwKSx0aGlzKTp0aGlzfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX21hcCYmKHRoaXMuX21hcC50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMmJih0aGlzLl9sbmdMYXQ9Tm4odGhpcy5fbG5nTGF0LHRoaXMuX3Bvcyx0aGlzLl9tYXAudHJhbnNmb3JtKSksdGhpcy5fcG9zPXRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCkuX2FkZCh0aGlzLl9vZmZzZXQpLHQmJiJtb3ZlZW5kIiE9PXQudHlwZXx8KHRoaXMuX3Bvcz10aGlzLl9wb3Mucm91bmQoKSksci5zZXRUcmFuc2Zvcm0odGhpcy5fZWxlbWVudCxqblt0aGlzLl9hbmNob3JdKyIgdHJhbnNsYXRlKCIrdGhpcy5fcG9zLngrInB4LCAiK3RoaXMuX3Bvcy55KyJweCkiKSl9LG4ucHJvdG90eXBlLmdldE9mZnNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vZmZzZXR9LG4ucHJvdG90eXBlLnNldE9mZnNldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fb2Zmc2V0PXQuUG9pbnQuY29udmVydChlKSx0aGlzLl91cGRhdGUoKSx0aGlzfSxuLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKGUpe3RoaXMuX3Bvcz1lLnBvaW50LnN1Yih0aGlzLl9wb3NpdGlvbkRlbHRhKSx0aGlzLl9sbmdMYXQ9dGhpcy5fbWFwLnVucHJvamVjdCh0aGlzLl9wb3MpLHRoaXMuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCksdGhpcy5fZWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIiwicGVuZGluZyI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPSJhY3RpdmUiLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZHJhZ3N0YXJ0IikpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRyYWciKSl9LG4ucHJvdG90eXBlLl9vblVwPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzPSJhdXRvIix0aGlzLl9wb3NpdGlvbkRlbHRhPW51bGwsdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcC5vZmYoInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlKSwiYWN0aXZlIj09PXRoaXMuX3N0YXRlJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRyYWdlbmQiKSksdGhpcy5fc3RhdGU9ImluYWN0aXZlIn0sbi5wcm90b3R5cGUuX2FkZERyYWdIYW5kbGVyPWZ1bmN0aW9uKHQpe3RoaXMuX2VsZW1lbnQuY29udGFpbnModC5vcmlnaW5hbEV2ZW50LnRhcmdldCkmJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fcG9zaXRpb25EZWx0YT10LnBvaW50LnN1Yih0aGlzLl9wb3MpLmFkZCh0aGlzLl9vZmZzZXQpLHRoaXMuX3N0YXRlPSJwZW5kaW5nIix0aGlzLl9tYXAub24oIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3ZlKSx0aGlzLl9tYXAub24oInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlKSx0aGlzLl9tYXAub25jZSgibW91c2V1cCIsdGhpcy5fb25VcCksdGhpcy5fbWFwLm9uY2UoInRvdWNoZW5kIix0aGlzLl9vblVwKSl9LG4ucHJvdG90eXBlLnNldERyYWdnYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ2dhYmxlPSEhdCx0aGlzLl9tYXAmJih0Pyh0aGlzLl9tYXAub24oIm1vdXNlZG93biIsdGhpcy5fYWRkRHJhZ0hhbmRsZXIpLHRoaXMuX21hcC5vbigidG91Y2hzdGFydCIsdGhpcy5fYWRkRHJhZ0hhbmRsZXIpKToodGhpcy5fbWFwLm9mZigibW91c2Vkb3duIix0aGlzLl9hZGREcmFnSGFuZGxlciksdGhpcy5fbWFwLm9mZigidG91Y2hzdGFydCIsdGhpcy5fYWRkRHJhZ0hhbmRsZXIpKSksdGhpc30sbi5wcm90b3R5cGUuaXNEcmFnZ2FibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ2dhYmxlfSxufSh0LkV2ZW50ZWQpLEhuPXtwb3NpdGlvbk9wdGlvbnM6e2VuYWJsZUhpZ2hBY2N1cmFjeTohMSxtYXhpbXVtQWdlOjAsdGltZW91dDo2ZTN9LGZpdEJvdW5kc09wdGlvbnM6e21heFpvb206MTV9LHRyYWNrVXNlckxvY2F0aW9uOiExLHNob3dVc2VyTG9jYXRpb246ITB9LEduPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4ocil7ZS5jYWxsKHRoaXMpLHRoaXMub3B0aW9ucz10LmV4dGVuZCh7fSxIbixyKSx0LmJpbmRBbGwoWyJfb25TdWNjZXNzIiwiX29uRXJyb3IiLCJfZmluaXNoIiwiX3NldHVwVUkiLCJfdXBkYXRlQ2FtZXJhIiwiX3VwZGF0ZU1hcmtlciJdLHRoaXMpfXJldHVybiBlJiYobi5fX3Byb3RvX189ZSksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gdGhpcy5fbWFwPWUsdGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXAiKSxuPXRoaXMuX3NldHVwVUksdm9pZCAwIT09VW4/bihVbik6dm9pZCAwIT09dC53aW5kb3cubmF2aWdhdG9yLnBlcm1pc3Npb25zP3Qud2luZG93Lm5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZToiZ2VvbG9jYXRpb24ifSkudGhlbihmdW5jdGlvbih0KXtVbj0iZGVuaWVkIiE9PXQuc3RhdGUsbihVbil9KTooVW49ISF0LndpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24sbihVbikpLHRoaXMuX2NvbnRhaW5lcn0sbi5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQmJih0LndpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpLHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD12b2lkIDApLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXImJnRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKSxyLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcD12b2lkIDB9LG4ucHJvdG90eXBlLl9vblN1Y2Nlc3M9ZnVuY3Rpb24oZSl7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKXN3aXRjaCh0aGlzLl9sYXN0S25vd25Qb3NpdGlvbj1lLHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2UiV0FJVElOR19BQ1RJVkUiOmNhc2UiQUNUSVZFX0xPQ0siOmNhc2UiQUNUSVZFX0VSUk9SIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfTE9DSyIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpO2JyZWFrO2Nhc2UiQkFDS0dST1VORCI6Y2FzZSJCQUNLR1JPVU5EX0VSUk9SIjp0aGlzLl93YXRjaFN0YXRlPSJCQUNLR1JPVU5EIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKX10aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmIk9GRiIhPT10aGlzLl93YXRjaFN0YXRlJiZ0aGlzLl91cGRhdGVNYXJrZXIoZSksdGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiYiQUNUSVZFX0xPQ0siIT09dGhpcy5fd2F0Y2hTdGF0ZXx8dGhpcy5fdXBkYXRlQ2FtZXJhKGUpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl9kb3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlIiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJnZW9sb2NhdGUiLGUpKSx0aGlzLl9maW5pc2goKX0sbi5wcm90b3R5cGUuX3VwZGF0ZUNhbWVyYT1mdW5jdGlvbihlKXt2YXIgcj1uZXcgdC5MbmdMYXQoZS5jb29yZHMubG9uZ2l0dWRlLGUuY29vcmRzLmxhdGl0dWRlKSxuPWUuY29vcmRzLmFjY3VyYWN5LGE9dGhpcy5fbWFwLmdldEJlYXJpbmcoKSxpPXQuZXh0ZW5kKHtiZWFyaW5nOmF9LHRoaXMub3B0aW9ucy5maXRCb3VuZHNPcHRpb25zKTt0aGlzLl9tYXAuZml0Qm91bmRzKHIudG9Cb3VuZHMobiksaSx7Z2VvbG9jYXRlU291cmNlOiEwfSl9LG4ucHJvdG90eXBlLl91cGRhdGVNYXJrZXI9ZnVuY3Rpb24odCl7dD90aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIuc2V0TG5nTGF0KFt0LmNvb3Jkcy5sb25naXR1ZGUsdC5jb29yZHMubGF0aXR1ZGVdKS5hZGRUbyh0aGlzLl9tYXApOnRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKX0sbi5wcm90b3R5cGUuX29uRXJyb3I9ZnVuY3Rpb24oZSl7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKWlmKDE9PT1lLmNvZGUpdGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpLHZvaWQgMCE9PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCYmdGhpcy5fY2xlYXJXYXRjaCgpO2Vsc2Ugc3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2UiV0FJVElOR19BQ1RJVkUiOnRoaXMuX3dhdGNoU3RhdGU9IkFDVElWRV9FUlJPUiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3IiKTticmVhaztjYXNlIkFDVElWRV9MT0NLIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfRVJST1IiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKTticmVhaztjYXNlIkJBQ0tHUk9VTkQiOnRoaXMuX3dhdGNoU3RhdGU9IkJBQ0tHUk9VTkRfRVJST1IiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpfSJPRkYiIT09dGhpcy5fd2F0Y2hTdGF0ZSYmdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24mJnRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3Qtc3RhbGUiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImVycm9yIixlKSksdGhpcy5fZmluaXNoKCl9LG4ucHJvdG90eXBlLl9maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl90aW1lb3V0SWQmJmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJZD12b2lkIDB9LG4ucHJvdG90eXBlLl9zZXR1cFVJPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7ITEhPT1lPyh0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9KSx0aGlzLl9nZW9sb2NhdGVCdXR0b249ci5jcmVhdGUoImJ1dHRvbiIsIm1hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZSIsdGhpcy5fY29udGFpbmVyKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24udHlwZT0iYnV0dG9uIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiR2VvbG9jYXRlIiksdGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiYodGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKSx0aGlzLl93YXRjaFN0YXRlPSJPRkYiKSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmKHRoaXMuX2RvdEVsZW1lbnQ9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXVzZXItbG9jYXRpb24tZG90IiksdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyPW5ldyBxbih0aGlzLl9kb3RFbGVtZW50KSx0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJih0aGlzLl93YXRjaFN0YXRlPSJPRkYiKSksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLnRyaWdnZXIuYmluZCh0aGlzKSksdGhpcy5fc2V0dXA9ITAsdGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiZ0aGlzLl9tYXAub24oIm1vdmVzdGFydCIsZnVuY3Rpb24oZSl7ZS5nZW9sb2NhdGVTb3VyY2V8fCJBQ1RJVkVfTE9DSyIhPT1uLl93YXRjaFN0YXRlfHwobi5fd2F0Y2hTdGF0ZT0iQkFDS0dST1VORCIsbi5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSxuLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksbi5maXJlKG5ldyB0LkV2ZW50KCJ0cmFja3VzZXJsb2NhdGlvbmVuZCIpKSl9KSk6dC53YXJuT25jZSgiR2VvbG9jYXRpb24gc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLCB0aGUgR2VvbG9jYXRlQ29udHJvbCB3aWxsIG5vdCBiZSB2aXNpYmxlLiIpfSxuLnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3NldHVwKXJldHVybiB0Lndhcm5PbmNlKCJHZW9sb2NhdGUgY29udHJvbCB0cmlnZ2VyZWQgYmVmb3JlIGFkZGVkIHRvIGEgbWFwIiksITE7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKXtzd2l0Y2godGhpcy5fd2F0Y2hTdGF0ZSl7Y2FzZSJPRkYiOnRoaXMuX3dhdGNoU3RhdGU9IldBSVRJTkdfQUNUSVZFIix0aGlzLmZpcmUobmV3IHQuRXZlbnQoInRyYWNrdXNlcmxvY2F0aW9uc3RhcnQiKSk7YnJlYWs7Y2FzZSJXQUlUSU5HX0FDVElWRSI6Y2FzZSJBQ1RJVkVfTE9DSyI6Y2FzZSJBQ1RJVkVfRVJST1IiOmNhc2UiQkFDS0dST1VORF9FUlJPUiI6dGhpcy5fd2F0Y2hTdGF0ZT0iT0ZGIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgidHJhY2t1c2VybG9jYXRpb25lbmQiKSk7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfTE9DSyIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSx0aGlzLl9sYXN0S25vd25Qb3NpdGlvbiYmdGhpcy5fdXBkYXRlQ2FtZXJhKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInRyYWNrdXNlcmxvY2F0aW9uc3RhcnQiKSl9c3dpdGNoKHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2UiV0FJVElOR19BQ1RJVkUiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpO2JyZWFrO2Nhc2UiQUNUSVZFX0xPQ0siOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKTticmVhaztjYXNlIkFDVElWRV9FUlJPUiI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIik7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpO2JyZWFrO2Nhc2UiQkFDS0dST1VORF9FUlJPUiI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvciIpfSJPRkYiPT09dGhpcy5fd2F0Y2hTdGF0ZSYmdm9pZCAwIT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEP3RoaXMuX2NsZWFyV2F0Y2goKTp2b2lkIDA9PT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQmJih0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsInRydWUiKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dC53aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24odGhpcy5fb25TdWNjZXNzLHRoaXMuX29uRXJyb3IsdGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucykpfWVsc2UgdC53aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbih0aGlzLl9vblN1Y2Nlc3MsdGhpcy5fb25FcnJvcix0aGlzLm9wdGlvbnMucG9zaXRpb25PcHRpb25zKSx0aGlzLl90aW1lb3V0SWQ9c2V0VGltZW91dCh0aGlzLl9maW5pc2gsMWU0KTtyZXR1cm4hMH0sbi5wcm90b3R5cGUuX2NsZWFyV2F0Y2g9ZnVuY3Rpb24oKXt0LndpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpLHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRD12b2lkIDAsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl91cGRhdGVNYXJrZXIobnVsbCl9LG59KHQuRXZlbnRlZCksWW49e21heFdpZHRoOjEwMCx1bml0OiJtZXRyaWMifSxXbj1mdW5jdGlvbihlKXt0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sWW4sZSksdC5iaW5kQWxsKFsiX29uTW92ZSIsInNldFVuaXQiXSx0aGlzKX07ZnVuY3Rpb24gWG4odCxlLHIpe3ZhciBuLGEsaSxvLHMsbCxjPXImJnIubWF4V2lkdGh8fDEwMCx1PXQuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQvMixoPShuPXQudW5wcm9qZWN0KFswLHVdKSxhPXQudW5wcm9qZWN0KFtjLHVdKSxpPU1hdGguUEkvMTgwLG89bi5sYXQqaSxzPWEubGF0KmksbD1NYXRoLnNpbihvKSpNYXRoLnNpbihzKStNYXRoLmNvcyhvKSpNYXRoLmNvcyhzKSpNYXRoLmNvcygoYS5sbmctbi5sbmcpKmkpLDYzNzFlMypNYXRoLmFjb3MoTWF0aC5taW4obCwxKSkpO2lmKHImJiJpbXBlcmlhbCI9PT1yLnVuaXQpe3ZhciBmPTMuMjgwOCpoO2Y+NTI4MD9abihlLGMsZi81MjgwLCJtaSIpOlpuKGUsYyxmLCJmdCIpfWVsc2UgciYmIm5hdXRpY2FsIj09PXIudW5pdD9abihlLGMsaC8xODUyLCJubSIpOlpuKGUsYyxoLCJtIil9ZnVuY3Rpb24gWm4odCxlLHIsbil7dmFyIGEsaSxvLHM9KGE9ciwoaT1NYXRoLnBvdygxMCwoIiIrTWF0aC5mbG9vcihhKSkubGVuZ3RoLTEpKSoobz0obz1hL2kpPj0xMD8xMDpvPj01PzU6bz49Mz8zOm8+PTI/MjpvPj0xPzE6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5wb3coMTAsTWF0aC5jZWlsKC1NYXRoLmxvZyh0KS9NYXRoLkxOMTApKTtyZXR1cm4gTWF0aC5yb3VuZCh0KmUpL2V9KG8pKSksbD1zL3I7Im0iPT09biYmcz49MWUzJiYocy89MWUzLG49ImttIiksdC5zdHlsZS53aWR0aD1lKmwrInB4Iix0LmlubmVySFRNTD1zK259V24ucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiJib3R0b20tbGVmdCJ9LFduLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKCl7WG4odGhpcy5fbWFwLHRoaXMuX2NvbnRhaW5lcix0aGlzLm9wdGlvbnMpfSxXbi5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLXNjYWxlIix0LmdldENvbnRhaW5lcigpKSx0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fb25Nb3ZlKCksdGhpcy5fY29udGFpbmVyfSxXbi5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtyLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fbWFwPXZvaWQgMH0sV24ucHJvdG90eXBlLnNldFVuaXQ9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zLnVuaXQ9dCxYbih0aGlzLl9tYXAsdGhpcy5fY29udGFpbmVyLHRoaXMub3B0aW9ucyl9O3ZhciBKbj1mdW5jdGlvbihlKXt0aGlzLl9mdWxsc2NyZWVuPSExLGUmJmUuY29udGFpbmVyJiYoZS5jb250YWluZXIgaW5zdGFuY2VvZiB0LndpbmRvdy5IVE1MRWxlbWVudD90aGlzLl9jb250YWluZXI9ZS5jb250YWluZXI6dC53YXJuT25jZSgiRnVsbCBzY3JlZW4gY29udHJvbCAnY29udGFpbmVyJyBtdXN0IGJlIGEgRE9NIGVsZW1lbnQuIikpLHQuYmluZEFsbChbIl9vbkNsaWNrRnVsbHNjcmVlbiIsIl9jaGFuZ2VJY29uIl0sdGhpcyksIm9uZnVsbHNjcmVlbmNoYW5nZSJpbiB0LndpbmRvdy5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJmdWxsc2NyZWVuY2hhbmdlIjoib25tb3pmdWxsc2NyZWVuY2hhbmdlImluIHQud2luZG93LmRvY3VtZW50P3RoaXMuX2Z1bGxzY3JlZW5jaGFuZ2U9Im1vemZ1bGxzY3JlZW5jaGFuZ2UiOiJvbndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiaW4gdC53aW5kb3cuZG9jdW1lbnQ/dGhpcy5fZnVsbHNjcmVlbmNoYW5nZT0id2Via2l0ZnVsbHNjcmVlbmNoYW5nZSI6Im9ubXNmdWxsc2NyZWVuY2hhbmdlImluIHQud2luZG93LmRvY3VtZW50JiYodGhpcy5fZnVsbHNjcmVlbmNoYW5nZT0iTVNGdWxsc2NyZWVuQ2hhbmdlIiksdGhpcy5fY2xhc3NOYW1lPSJtYXBib3hnbC1jdHJsIn07Sm4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9jb250YWluZXI9dGhpcy5fbWFwLmdldENvbnRhaW5lcigpKSx0aGlzLl9jb250cm9sQ29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLHRoaXMuX2NsYXNzTmFtZSsiIG1hcGJveGdsLWN0cmwtZ3JvdXAiKSx0aGlzLl9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0KCk/dGhpcy5fc2V0dXBVSSgpOih0aGlzLl9jb250cm9sQ29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQud2Fybk9uY2UoIlRoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgZnVsbHNjcmVlbiBtb2RlLiIpKSx0aGlzLl9jb250cm9sQ29udGFpbmVyfSxKbi5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtyLnJlbW92ZSh0aGlzLl9jb250cm9sQ29udGFpbmVyKSx0aGlzLl9tYXA9bnVsbCx0LndpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UsdGhpcy5fY2hhbmdlSWNvbil9LEpuLnByb3RvdHlwZS5fY2hlY2tGdWxsc2NyZWVuU3VwcG9ydD1mdW5jdGlvbigpe3JldHVybiEhKHQud2luZG93LmRvY3VtZW50LmZ1bGxzY3JlZW5FbmFibGVkfHx0LndpbmRvdy5kb2N1bWVudC5tb3pGdWxsU2NyZWVuRW5hYmxlZHx8dC53aW5kb3cuZG9jdW1lbnQubXNGdWxsc2NyZWVuRW5hYmxlZHx8dC53aW5kb3cuZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVuYWJsZWQpfSxKbi5wcm90b3R5cGUuX3NldHVwVUk9ZnVuY3Rpb24oKXsodGhpcy5fZnVsbHNjcmVlbkJ1dHRvbj1yLmNyZWF0ZSgiYnV0dG9uIix0aGlzLl9jbGFzc05hbWUrIi1pY29uICIrdGhpcy5fY2xhc3NOYW1lKyItZnVsbHNjcmVlbiIsdGhpcy5fY29udHJvbENvbnRhaW5lcikpLnR5cGU9ImJ1dHRvbiIsdGhpcy5fdXBkYXRlVGl0bGUoKSx0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9vbkNsaWNrRnVsbHNjcmVlbiksdC53aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlLHRoaXMuX2NoYW5nZUljb24pfSxKbi5wcm90b3R5cGUuX3VwZGF0ZVRpdGxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faXNGdWxsc2NyZWVuKCk/IkV4aXQgZnVsbHNjcmVlbiI6IkVudGVyIGZ1bGxzY3JlZW4iO3RoaXMuX2Z1bGxzY3JlZW5CdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0KSx0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLnRpdGxlPXR9LEpuLnByb3RvdHlwZS5faXNGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Z1bGxzY3JlZW59LEpuLnByb3RvdHlwZS5fY2hhbmdlSWNvbj1mdW5jdGlvbigpeyh0LndpbmRvdy5kb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudHx8dC53aW5kb3cuZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnR8fHQud2luZG93LmRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHx0LndpbmRvdy5kb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50KT09PXRoaXMuX2NvbnRhaW5lciE9PXRoaXMuX2Z1bGxzY3JlZW4mJih0aGlzLl9mdWxsc2NyZWVuPSF0aGlzLl9mdWxsc2NyZWVuLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSh0aGlzLl9jbGFzc05hbWUrIi1zaHJpbmsiKSx0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLmNsYXNzTGlzdC50b2dnbGUodGhpcy5fY2xhc3NOYW1lKyItZnVsbHNjcmVlbiIpLHRoaXMuX3VwZGF0ZVRpdGxlKCkpfSxKbi5wcm90b3R5cGUuX29uQ2xpY2tGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7dGhpcy5faXNGdWxsc2NyZWVuKCk/dC53aW5kb3cuZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4/dC53aW5kb3cuZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTp0LndpbmRvdy5kb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuP3Qud2luZG93LmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTp0LndpbmRvdy5kb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuP3Qud2luZG93LmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4oKTp0LndpbmRvdy5kb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuJiZ0LndpbmRvdy5kb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk6dGhpcy5fY29udGFpbmVyLnJlcXVlc3RGdWxsc2NyZWVuP3RoaXMuX2NvbnRhaW5lci5yZXF1ZXN0RnVsbHNjcmVlbigpOnRoaXMuX2NvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbj90aGlzLl9jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTp0aGlzLl9jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbj90aGlzLl9jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpOnRoaXMuX2NvbnRhaW5lci53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiYmdGhpcy5fY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCl9O3ZhciBLbj17Y2xvc2VCdXR0b246ITAsY2xvc2VPbkNsaWNrOiEwLGNsYXNzTmFtZToiIixtYXhXaWR0aDoiMjQwcHgifSxRbj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKHIpe2UuY2FsbCh0aGlzKSx0aGlzLm9wdGlvbnM9dC5leHRlbmQoT2JqZWN0LmNyZWF0ZShLbiksciksdC5iaW5kQWxsKFsiX3VwZGF0ZSIsIl9vbkNsaWNrQ2xvc2UiLCJyZW1vdmUiXSx0aGlzKX1yZXR1cm4gZSYmKG4uX19wcm90b19fPWUpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4sbi5wcm90b3R5cGUuYWRkVG89ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fbWFwPWUsdGhpcy5vcHRpb25zLmNsb3NlT25DbGljayYmdGhpcy5fbWFwLm9uKCJjbGljayIsdGhpcy5fb25DbGlja0Nsb3NlKSx0aGlzLl9tYXAub24oInJlbW92ZSIsdGhpcy5yZW1vdmUpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3RyYWNrUG9pbnRlcj8odGhpcy5fbWFwLm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHQpe3IuX3VwZGF0ZSh0LnBvaW50KX0pLHRoaXMuX21hcC5vbigibW91c2V1cCIsZnVuY3Rpb24odCl7ci5fdXBkYXRlKHQucG9pbnQpfSksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXIiKSx0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10cmFjay1wb2ludGVyIikpOnRoaXMuX21hcC5vbigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm9wZW4iKSksdGhpc30sbi5wcm90b3R5cGUuaXNPcGVuPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9tYXB9LG4ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50JiZyLnJlbW92ZSh0aGlzLl9jb250ZW50KSx0aGlzLl9jb250YWluZXImJihyLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLGRlbGV0ZSB0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcCYmKHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9mZigiY2xpY2siLHRoaXMuX29uQ2xpY2tDbG9zZSksdGhpcy5fbWFwLm9mZigicmVtb3ZlIix0aGlzLnJlbW92ZSksdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIiksZGVsZXRlIHRoaXMuX21hcCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJjbG9zZSIpKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRMbmdMYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxuLnByb3RvdHlwZS5zZXRMbmdMYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2xuZ0xhdD10LkxuZ0xhdC5jb252ZXJ0KGUpLHRoaXMuX3Bvcz1udWxsLHRoaXMuX3RyYWNrUG9pbnRlcj0hMSx0aGlzLl91cGRhdGUoKSx0aGlzLl9tYXAmJih0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIiksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXIiKSx0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC10cmFjay1wb2ludGVyIikpLHRoaXN9LG4ucHJvdG90eXBlLnRyYWNrUG9pbnRlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuX3RyYWNrUG9pbnRlcj0hMCx0aGlzLl9wb3M9bnVsbCx0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vbigibW91c2Vtb3ZlIixmdW5jdGlvbihlKXt0Ll91cGRhdGUoZS5wb2ludCl9KSx0aGlzLl9tYXAub24oImRyYWciLGZ1bmN0aW9uKGUpe3QuX3VwZGF0ZShlLnBvaW50KX0pLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyIiksdGhpcy5fbWFwLl9jYW52YXNDb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtdHJhY2stcG9pbnRlciIpKSx0aGlzfSxuLnByb3RvdHlwZS5nZXRFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sbi5wcm90b3R5cGUuc2V0VGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZXRET01Db250ZW50KHQud2luZG93LmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpKX0sbi5wcm90b3R5cGUuc2V0SFRNTD1mdW5jdGlvbihlKXt2YXIgcixuPXQud2luZG93LmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxhPXQud2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvZHkiKTtmb3IoYS5pbm5lckhUTUw9ZTtyPWEuZmlyc3RDaGlsZDspbi5hcHBlbmRDaGlsZChyKTtyZXR1cm4gdGhpcy5zZXRET01Db250ZW50KG4pfSxuLnByb3RvdHlwZS5nZXRNYXhXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXIuc3R5bGUubWF4V2lkdGh9LG4ucHJvdG90eXBlLnNldE1heFdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMubWF4V2lkdGg9dCx0aGlzLl91cGRhdGUoKSx0aGlzfSxuLnByb3RvdHlwZS5zZXRET01Db250ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVDb250ZW50KCksdGhpcy5fY29udGVudC5hcHBlbmRDaGlsZCh0KSx0aGlzLl91cGRhdGUoKSx0aGlzfSxuLnByb3RvdHlwZS5fY3JlYXRlQ29udGVudD1mdW5jdGlvbigpe3RoaXMuX2NvbnRlbnQmJnIucmVtb3ZlKHRoaXMuX2NvbnRlbnQpLHRoaXMuX2NvbnRlbnQ9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXBvcHVwLWNvbnRlbnQiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uJiYodGhpcy5fY2xvc2VCdXR0b249ci5jcmVhdGUoImJ1dHRvbiIsIm1hcGJveGdsLXBvcHVwLWNsb3NlLWJ1dHRvbiIsdGhpcy5fY29udGVudCksdGhpcy5fY2xvc2VCdXR0b24udHlwZT0iYnV0dG9uIix0aGlzLl9jbG9zZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJDbG9zZSBwb3B1cCIpLHRoaXMuX2Nsb3NlQnV0dG9uLmlubmVySFRNTD0iJiMyMTU7Iix0aGlzLl9jbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fb25DbGlja0Nsb3NlKSl9LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcyxhPXRoaXMuX2xuZ0xhdHx8dGhpcy5fdHJhY2tQb2ludGVyO2lmKHRoaXMuX21hcCYmYSYmdGhpcy5fY29udGVudCYmKHRoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtcG9wdXAiLHRoaXMuX21hcC5nZXRDb250YWluZXIoKSksdGhpcy5fdGlwPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cC10aXAiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnQpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUmJnRoaXMub3B0aW9ucy5jbGFzc05hbWUuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCh0KX0pKSx0aGlzLm9wdGlvbnMubWF4V2lkdGgmJnRoaXMuX2NvbnRhaW5lci5zdHlsZS5tYXhXaWR0aCE9PXRoaXMub3B0aW9ucy5tYXhXaWR0aCYmKHRoaXMuX2NvbnRhaW5lci5zdHlsZS5tYXhXaWR0aD10aGlzLm9wdGlvbnMubWF4V2lkdGgpLHRoaXMuX21hcC50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMmJiF0aGlzLl90cmFja1BvaW50ZXImJih0aGlzLl9sbmdMYXQ9Tm4odGhpcy5fbG5nTGF0LHRoaXMuX3Bvcyx0aGlzLl9tYXAudHJhbnNmb3JtKSksIXRoaXMuX3RyYWNrUG9pbnRlcnx8ZSkpe3ZhciBpPXRoaXMuX3Bvcz10aGlzLl90cmFja1BvaW50ZXImJmU/ZTp0aGlzLl9tYXAucHJvamVjdCh0aGlzLl9sbmdMYXQpLG89dGhpcy5vcHRpb25zLmFuY2hvcixzPWZ1bmN0aW9uIGUocil7aWYocil7aWYoIm51bWJlciI9PXR5cGVvZiByKXt2YXIgbj1NYXRoLnJvdW5kKE1hdGguc3FydCguNSpNYXRoLnBvdyhyLDIpKSk7cmV0dXJue2NlbnRlcjpuZXcgdC5Qb2ludCgwLDApLHRvcDpuZXcgdC5Qb2ludCgwLHIpLCJ0b3AtbGVmdCI6bmV3IHQuUG9pbnQobixuKSwidG9wLXJpZ2h0IjpuZXcgdC5Qb2ludCgtbixuKSxib3R0b206bmV3IHQuUG9pbnQoMCwtciksImJvdHRvbS1sZWZ0IjpuZXcgdC5Qb2ludChuLC1uKSwiYm90dG9tLXJpZ2h0IjpuZXcgdC5Qb2ludCgtbiwtbiksbGVmdDpuZXcgdC5Qb2ludChyLDApLHJpZ2h0Om5ldyB0LlBvaW50KC1yLDApfX1pZihyIGluc3RhbmNlb2YgdC5Qb2ludHx8QXJyYXkuaXNBcnJheShyKSl7dmFyIGE9dC5Qb2ludC5jb252ZXJ0KHIpO3JldHVybntjZW50ZXI6YSx0b3A6YSwidG9wLWxlZnQiOmEsInRvcC1yaWdodCI6YSxib3R0b206YSwiYm90dG9tLWxlZnQiOmEsImJvdHRvbS1yaWdodCI6YSxsZWZ0OmEscmlnaHQ6YX19cmV0dXJue2NlbnRlcjp0LlBvaW50LmNvbnZlcnQoci5jZW50ZXJ8fFswLDBdKSx0b3A6dC5Qb2ludC5jb252ZXJ0KHIudG9wfHxbMCwwXSksInRvcC1sZWZ0Ijp0LlBvaW50LmNvbnZlcnQoclsidG9wLWxlZnQiXXx8WzAsMF0pLCJ0b3AtcmlnaHQiOnQuUG9pbnQuY29udmVydChyWyJ0b3AtcmlnaHQiXXx8WzAsMF0pLGJvdHRvbTp0LlBvaW50LmNvbnZlcnQoci5ib3R0b218fFswLDBdKSwiYm90dG9tLWxlZnQiOnQuUG9pbnQuY29udmVydChyWyJib3R0b20tbGVmdCJdfHxbMCwwXSksImJvdHRvbS1yaWdodCI6dC5Qb2ludC5jb252ZXJ0KHJbImJvdHRvbS1yaWdodCJdfHxbMCwwXSksbGVmdDp0LlBvaW50LmNvbnZlcnQoci5sZWZ0fHxbMCwwXSkscmlnaHQ6dC5Qb2ludC5jb252ZXJ0KHIucmlnaHR8fFswLDBdKX19cmV0dXJuIGUobmV3IHQuUG9pbnQoMCwwKSl9KHRoaXMub3B0aW9ucy5vZmZzZXQpO2lmKCFvKXt2YXIgbCxjPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aCx1PXRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHQ7bD1pLnkrcy5ib3R0b20ueTx1P1sidG9wIl06aS55PnRoaXMuX21hcC50cmFuc2Zvcm0uaGVpZ2h0LXU/WyJib3R0b20iXTpbXSxpLng8Yy8yP2wucHVzaCgibGVmdCIpOmkueD50aGlzLl9tYXAudHJhbnNmb3JtLndpZHRoLWMvMiYmbC5wdXNoKCJyaWdodCIpLG89MD09PWwubGVuZ3RoPyJib3R0b20iOmwuam9pbigiLSIpfXZhciBoPWkuYWRkKHNbb10pLnJvdW5kKCk7ci5zZXRUcmFuc2Zvcm0odGhpcy5fY29udGFpbmVyLGpuW29dKyIgdHJhbnNsYXRlKCIraC54KyJweCwiK2gueSsicHgpIiksVm4odGhpcy5fY29udGFpbmVyLG8sInBvcHVwIil9fSxuLnByb3RvdHlwZS5fb25DbGlja0Nsb3NlPWZ1bmN0aW9uKCl7dGhpcy5yZW1vdmUoKX0sbn0odC5FdmVudGVkKSwkbj17dmVyc2lvbjp0LnZlcnNpb24sc3VwcG9ydGVkOmUsc2V0UlRMVGV4dFBsdWdpbjp0LnNldFJUTFRleHRQbHVnaW4sTWFwOkRuLE5hdmlnYXRpb25Db250cm9sOkJuLEdlb2xvY2F0ZUNvbnRyb2w6R24sQXR0cmlidXRpb25Db250cm9sOkxuLFNjYWxlQ29udHJvbDpXbixGdWxsc2NyZWVuQ29udHJvbDpKbixQb3B1cDpRbixNYXJrZXI6cW4sU3R5bGU6UmUsTG5nTGF0OnQuTG5nTGF0LExuZ0xhdEJvdW5kczp0LkxuZ0xhdEJvdW5kcyxQb2ludDp0LlBvaW50LE1lcmNhdG9yQ29vcmRpbmF0ZTp0Lk1lcmNhdG9yQ29vcmRpbmF0ZSxFdmVudGVkOnQuRXZlbnRlZCxjb25maWc6dC5jb25maWcsZ2V0IGFjY2Vzc1Rva2VuKCl7cmV0dXJuIHQuY29uZmlnLkFDQ0VTU19UT0tFTn0sc2V0IGFjY2Vzc1Rva2VuKGUpe3QuY29uZmlnLkFDQ0VTU19UT0tFTj1lfSxnZXQgYmFzZUFwaVVybCgpe3JldHVybiB0LmNvbmZpZy5BUElfVVJMfSxzZXQgYmFzZUFwaVVybChlKXt0LmNvbmZpZy5BUElfVVJMPWV9LGdldCB3b3JrZXJDb3VudCgpe3JldHVybiBJdC53b3JrZXJDb3VudH0sc2V0IHdvcmtlckNvdW50KHQpe0l0LndvcmtlckNvdW50PXR9LGdldCBtYXhQYXJhbGxlbEltYWdlUmVxdWVzdHMoKXtyZXR1cm4gdC5jb25maWcuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTfSxzZXQgbWF4UGFyYWxsZWxJbWFnZVJlcXVlc3RzKGUpe3QuY29uZmlnLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUz1lfSxjbGVhclN0b3JhZ2U6ZnVuY3Rpb24oZSl7dC5jbGVhclRpbGVDYWNoZShlKX0sd29ya2VyVXJsOiIifTtyZXR1cm4gJG59KSxyfSwib2JqZWN0Ij09dHlwZW9mIHImJiJ1bmRlZmluZWQiIT10eXBlb2YgZT9lLmV4cG9ydHM9YSgpOihuPW58fHNlbGYpLm1hcGJveGdsPWEoKX0se31dLDQyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE8PHQrMSxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPWkodCxuKTtyZXR1cm4gcn07dmFyIG49dCgiY29udmV4LWh1bGwiKTtmdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KHQpLGE9MDthPHQ7KythKW5bYV09MCxhPT09ZSYmKG5bYV0rPS41KSxhPT09ciYmKG5bYV0rPS41KTtyZXR1cm4gbn1mdW5jdGlvbiBpKHQsZSl7aWYoMD09PWV8fGU9PT0oMTw8dCsxKS0xKXJldHVybltdO2Zvcih2YXIgcj1bXSxpPVtdLG89MDtvPD10OysrbylpZihlJjE8PG8pe3IucHVzaChhKHQsby0xLG8tMSkpLGkucHVzaChudWxsKTtmb3IodmFyIHM9MDtzPD10Oysrcyl+ZSYxPDxzJiYoci5wdXNoKGEodCxvLTEscy0xKSksaS5wdXNoKFtvLHNdKSl9dmFyIGw9bihyKSxjPVtdO3Q6Zm9yKG89MDtvPGwubGVuZ3RoOysrbyl7dmFyIHU9bFtvXSxoPVtdO2ZvcihzPTA7czx1Lmxlbmd0aDsrK3Mpe2lmKCFpW3Vbc11dKWNvbnRpbnVlIHQ7aC5wdXNoKGlbdVtzXV0uc2xpY2UoKSl9Yy5wdXNoKGgpfXJldHVybiBjfX0seyJjb252ZXgtaHVsbCI6MTMyfV0sNDMwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9ub3JtYWxpemUiKSxhPXQoImdsLW1hdDQvY3JlYXRlIiksaT10KCJnbC1tYXQ0L2Nsb25lIiksbz10KCJnbC1tYXQ0L2RldGVybWluYW50Iikscz10KCJnbC1tYXQ0L2ludmVydCIpLGw9dCgiZ2wtbWF0NC90cmFuc3Bvc2UiKSxjPXtsZW5ndGg6dCgiZ2wtdmVjMy9sZW5ndGgiKSxub3JtYWxpemU6dCgiZ2wtdmVjMy9ub3JtYWxpemUiKSxkb3Q6dCgiZ2wtdmVjMy9kb3QiKSxjcm9zczp0KCJnbC12ZWMzL2Nyb3NzIil9LHU9YSgpLGg9YSgpLGY9WzAsMCwwLDBdLHA9W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxkPVswLDAsMF07ZnVuY3Rpb24gZyh0LGUscixuLGEpe3RbMF09ZVswXSpuK3JbMF0qYSx0WzFdPWVbMV0qbityWzFdKmEsdFsyXT1lWzJdKm4rclsyXSphfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLHYsbSl7aWYoZXx8KGU9WzAsMCwwXSkscnx8KHI9WzAsMCwwXSksYXx8KGE9WzAsMCwwXSksdnx8KHY9WzAsMCwwLDFdKSxtfHwobT1bMCwwLDAsMV0pLCFuKHUsdCkpcmV0dXJuITE7aWYoaShoLHUpLGhbM109MCxoWzddPTAsaFsxMV09MCxoWzE1XT0xLE1hdGguYWJzKG8oaCk8MWUtOCkpcmV0dXJuITE7dmFyIHkseCxiLF8sdyxrLFQsTT11WzNdLEE9dVs3XSxTPXVbMTFdLEU9dVsxMl0sTD11WzEzXSxDPXVbMTRdLFA9dVsxNV07aWYoMCE9PU18fDAhPT1BfHwwIT09Uyl7aWYoZlswXT1NLGZbMV09QSxmWzJdPVMsZlszXT1QLCFzKGgsaCkpcmV0dXJuITE7bChoLGgpLHk9dixiPWgsXz0oeD1mKVswXSx3PXhbMV0saz14WzJdLFQ9eFszXSx5WzBdPWJbMF0qXytiWzRdKncrYls4XSprK2JbMTJdKlQseVsxXT1iWzFdKl8rYls1XSp3K2JbOV0qaytiWzEzXSpULHlbMl09YlsyXSpfK2JbNl0qdytiWzEwXSprK2JbMTRdKlQseVszXT1iWzNdKl8rYls3XSp3K2JbMTFdKmsrYlsxNV0qVH1lbHNlIHZbMF09dlsxXT12WzJdPTAsdlszXT0xO2lmKGVbMF09RSxlWzFdPUwsZVsyXT1DLGZ1bmN0aW9uKHQsZSl7dFswXVswXT1lWzBdLHRbMF1bMV09ZVsxXSx0WzBdWzJdPWVbMl0sdFsxXVswXT1lWzRdLHRbMV1bMV09ZVs1XSx0WzFdWzJdPWVbNl0sdFsyXVswXT1lWzhdLHRbMl1bMV09ZVs5XSx0WzJdWzJdPWVbMTBdfShwLHUpLHJbMF09Yy5sZW5ndGgocFswXSksYy5ub3JtYWxpemUocFswXSxwWzBdKSxhWzBdPWMuZG90KHBbMF0scFsxXSksZyhwWzFdLHBbMV0scFswXSwxLC1hWzBdKSxyWzFdPWMubGVuZ3RoKHBbMV0pLGMubm9ybWFsaXplKHBbMV0scFsxXSksYVswXS89clsxXSxhWzFdPWMuZG90KHBbMF0scFsyXSksZyhwWzJdLHBbMl0scFswXSwxLC1hWzFdKSxhWzJdPWMuZG90KHBbMV0scFsyXSksZyhwWzJdLHBbMl0scFsxXSwxLC1hWzJdKSxyWzJdPWMubGVuZ3RoKHBbMl0pLGMubm9ybWFsaXplKHBbMl0scFsyXSksYVsxXS89clsyXSxhWzJdLz1yWzJdLGMuY3Jvc3MoZCxwWzFdLHBbMl0pLGMuZG90KHBbMF0sZCk8MClmb3IodmFyIE89MDtPPDM7TysrKXJbT10qPS0xLHBbT11bMF0qPS0xLHBbT11bMV0qPS0xLHBbT11bMl0qPS0xO3JldHVybiBtWzBdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0tcFsxXVsxXS1wWzJdWzJdLDApKSxtWzFdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0rcFsxXVsxXS1wWzJdWzJdLDApKSxtWzJdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0tcFsxXVsxXStwWzJdWzJdLDApKSxtWzNdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0rcFsxXVsxXStwWzJdWzJdLDApKSxwWzJdWzFdPnBbMV1bMl0mJihtWzBdPS1tWzBdKSxwWzBdWzJdPnBbMl1bMF0mJihtWzFdPS1tWzFdKSxwWzFdWzBdPnBbMF1bMV0mJihtWzJdPS1tWzJdKSwhMH19LHsiLi9ub3JtYWxpemUiOjQzMSwiZ2wtbWF0NC9jbG9uZSI6MjYyLCJnbC1tYXQ0L2NyZWF0ZSI6MjYzLCJnbC1tYXQ0L2RldGVybWluYW50IjoyNjQsImdsLW1hdDQvaW52ZXJ0IjoyNjgsImdsLW1hdDQvdHJhbnNwb3NlIjoyNzksImdsLXZlYzMvY3Jvc3MiOjMzNiwiZ2wtdmVjMy9kb3QiOjM0MSwiZ2wtdmVjMy9sZW5ndGgiOjM1MSwiZ2wtdmVjMy9ub3JtYWxpemUiOjM1OH1dLDQzMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMTVdO2lmKDA9PT1yKXJldHVybiExO2Zvcih2YXIgbj0xL3IsYT0wO2E8MTY7YSsrKXRbYV09ZVthXSpuO3JldHVybiEwfX0se31dLDQzMjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXZlYzMvbGVycCIpLGE9dCgibWF0NC1yZWNvbXBvc2UiKSxpPXQoIm1hdDQtZGVjb21wb3NlIiksbz10KCJnbC1tYXQ0L2RldGVybWluYW50Iikscz10KCJxdWF0LXNsZXJwIiksbD1oKCksYz1oKCksdT1oKCk7ZnVuY3Rpb24gaCgpe3JldHVybnt0cmFuc2xhdGU6ZigpLHNjYWxlOmYoMSksc2tldzpmKCkscGVyc3BlY3RpdmU6WzAsMCwwLDFdLHF1YXRlcm5pb246WzAsMCwwLDFdfX1mdW5jdGlvbiBmKHQpe3JldHVyblt0fHwwLHR8fDAsdHx8MF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2lmKDA9PT1vKGUpfHwwPT09byhyKSlyZXR1cm4hMTt2YXIgZj1pKGUsbC50cmFuc2xhdGUsbC5zY2FsZSxsLnNrZXcsbC5wZXJzcGVjdGl2ZSxsLnF1YXRlcm5pb24pLHA9aShyLGMudHJhbnNsYXRlLGMuc2NhbGUsYy5za2V3LGMucGVyc3BlY3RpdmUsYy5xdWF0ZXJuaW9uKTtyZXR1cm4hKCFmfHwhcHx8KG4odS50cmFuc2xhdGUsbC50cmFuc2xhdGUsYy50cmFuc2xhdGUsaCksbih1LnNrZXcsbC5za2V3LGMuc2tldyxoKSxuKHUuc2NhbGUsbC5zY2FsZSxjLnNjYWxlLGgpLG4odS5wZXJzcGVjdGl2ZSxsLnBlcnNwZWN0aXZlLGMucGVyc3BlY3RpdmUsaCkscyh1LnF1YXRlcm5pb24sbC5xdWF0ZXJuaW9uLGMucXVhdGVybmlvbixoKSxhKHQsdS50cmFuc2xhdGUsdS5zY2FsZSx1LnNrZXcsdS5wZXJzcGVjdGl2ZSx1LnF1YXRlcm5pb24pLDApKX19LHsiZ2wtbWF0NC9kZXRlcm1pbmFudCI6MjY0LCJnbC12ZWMzL2xlcnAiOjM1MiwibWF0NC1kZWNvbXBvc2UiOjQzMCwibWF0NC1yZWNvbXBvc2UiOjQzMywicXVhdC1zbGVycCI6NDg1fV0sNDMzOltmdW5jdGlvbih0LGUscil7dmFyIG49e2lkZW50aXR5OnQoImdsLW1hdDQvaWRlbnRpdHkiKSx0cmFuc2xhdGU6dCgiZ2wtbWF0NC90cmFuc2xhdGUiKSxtdWx0aXBseTp0KCJnbC1tYXQ0L211bHRpcGx5IiksY3JlYXRlOnQoImdsLW1hdDQvY3JlYXRlIiksc2NhbGU6dCgiZ2wtbWF0NC9zY2FsZSIpLGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uOnQoImdsLW1hdDQvZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24iKX0sYT0obi5jcmVhdGUoKSxuLmNyZWF0ZSgpKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxvLHMpe3JldHVybiBuLmlkZW50aXR5KHQpLG4uZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24odCxzLGUpLHRbM109b1swXSx0WzddPW9bMV0sdFsxMV09b1syXSx0WzE1XT1vWzNdLG4uaWRlbnRpdHkoYSksMCE9PWlbMl0mJihhWzldPWlbMl0sbi5tdWx0aXBseSh0LHQsYSkpLDAhPT1pWzFdJiYoYVs5XT0wLGFbOF09aVsxXSxuLm11bHRpcGx5KHQsdCxhKSksMCE9PWlbMF0mJihhWzhdPTAsYVs0XT1pWzBdLG4ubXVsdGlwbHkodCx0LGEpKSxuLnNjYWxlKHQsdCxyKSx0fX0seyJnbC1tYXQ0L2NyZWF0ZSI6MjYzLCJnbC1tYXQ0L2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uIjoyNjYsImdsLW1hdDQvaWRlbnRpdHkiOjI2NywiZ2wtbWF0NC9tdWx0aXBseSI6MjcwLCJnbC1tYXQ0L3NjYWxlIjoyNzcsImdsLW1hdDQvdHJhbnNsYXRlIjoyNzh9XSw0MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPU1hdGgubG9nMnx8ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpKk1hdGguTE9HMkV9fSx7fV0sNDM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksYT10KCJtYXQ0LWludGVycG9sYXRlIiksaT10KCJnbC1tYXQ0L2ludmVydCIpLG89dCgiZ2wtbWF0NC9yb3RhdGVYIikscz10KCJnbC1tYXQ0L3JvdGF0ZVkiKSxsPXQoImdsLW1hdDQvcm90YXRlWiIpLGM9dCgiZ2wtbWF0NC9sb29rQXQiKSx1PXQoImdsLW1hdDQvdHJhbnNsYXRlIiksaD0odCgiZ2wtbWF0NC9zY2FsZSIpLHQoImdsLXZlYzMvbm9ybWFsaXplIikpLGY9WzAsMCwwXTtmdW5jdGlvbiBwKHQpe3RoaXMuX2NvbXBvbmVudHM9dC5zbGljZSgpLHRoaXMuX3RpbWU9WzBdLHRoaXMucHJldk1hdHJpeD10LnNsaWNlKCksdGhpcy5uZXh0TWF0cml4PXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkTWF0cml4PXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkSW52ZXJzZT10LnNsaWNlKCksdGhpcy5jb21wdXRlZEV5ZT1bMCwwLDBdLHRoaXMuY29tcHV0ZWRVcD1bMCwwLDBdLHRoaXMuY29tcHV0ZWRDZW50ZXI9WzAsMCwwXSx0aGlzLmNvbXB1dGVkUmFkaXVzPVswXSx0aGlzLl9saW1pdHM9Wy0xLzAsMS8wXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwKCh0PXR8fHt9KS5tYXRyaXh8fFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSl9O3ZhciBkPXAucHJvdG90eXBlO2QucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbWUscj1uLmxlKGUsdCksbz10aGlzLmNvbXB1dGVkTWF0cml4O2lmKCEocjwwKSl7dmFyIHM9dGhpcy5fY29tcG9uZW50cztpZihyPT09ZS5sZW5ndGgtMSlmb3IodmFyIGw9MTYqcixjPTA7YzwxNjsrK2Mpb1tjXT1zW2wrK107ZWxzZXt2YXIgdT1lW3IrMV0tZVtyXSxmPShsPTE2KnIsdGhpcy5wcmV2TWF0cml4KSxwPSEwO2ZvcihjPTA7YzwxNjsrK2MpZltjXT1zW2wrK107dmFyIGQ9dGhpcy5uZXh0TWF0cml4O2ZvcihjPTA7YzwxNjsrK2MpZFtjXT1zW2wrK10scD1wJiZmW2NdPT09ZFtjXTtpZih1PDFlLTZ8fHApZm9yKGM9MDtjPDE2OysrYylvW2NdPWZbY107ZWxzZSBhKG8sZixkLCh0LWVbcl0pL3UpfXZhciBnPXRoaXMuY29tcHV0ZWRVcDtnWzBdPW9bMV0sZ1sxXT1vWzVdLGdbMl09b1s5XSxoKGcsZyk7dmFyIHY9dGhpcy5jb21wdXRlZEludmVyc2U7aSh2LG8pO3ZhciBtPXRoaXMuY29tcHV0ZWRFeWUseT12WzE1XTttWzBdPXZbMTJdL3ksbVsxXT12WzEzXS95LG1bMl09dlsxNF0veTt2YXIgeD10aGlzLmNvbXB1dGVkQ2VudGVyLGI9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7Zm9yKGM9MDtjPDM7KytjKXhbY109bVtjXS1vWzIrNCpjXSpifX0sZC5pZGxlPWZ1bmN0aW9uKHQpe2lmKCEodDx0aGlzLmxhc3RUKCkpKXtmb3IodmFyIGU9dGhpcy5fY29tcG9uZW50cyxyPWUubGVuZ3RoLTE2LG49MDtuPDE2OysrbillLnB1c2goZVtyKytdKTt0aGlzLl90aW1lLnB1c2godCl9fSxkLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPW4uZ3QodGhpcy5fdGltZSx0KS0yO2U8MHx8KHRoaXMuX3RpbWUuc3BsaWNlKDAsZSksdGhpcy5fY29tcG9uZW50cy5zcGxpY2UoMCwxNiplKSl9LGQubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGltZVt0aGlzLl90aW1lLmxlbmd0aC0xXX0sZC5sb29rQXQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCksZT1lfHx0aGlzLmNvbXB1dGVkRXllLHI9cnx8ZixuPW58fHRoaXMuY29tcHV0ZWRVcCx0aGlzLnNldE1hdHJpeCh0LGModGhpcy5jb21wdXRlZE1hdHJpeCxlLHIsbikpO2Zvcih2YXIgYT0wLGk9MDtpPDM7KytpKWErPU1hdGgucG93KHJbaV0tZVtpXSwyKTthPU1hdGgubG9nKE1hdGguc3FydChhKSksdGhpcy5jb21wdXRlZFJhZGl1c1swXT1hfSxkLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgYT10aGlzLmNvbXB1dGVkSW52ZXJzZTtlJiZzKGEsYSxlKSxyJiZvKGEsYSxyKSxuJiZsKGEsYSxuKSx0aGlzLnNldE1hdHJpeCh0LGkodGhpcy5jb21wdXRlZE1hdHJpeCxhKSl9O3ZhciBnPVswLDAsMF07ZC5wYW49ZnVuY3Rpb24odCxlLHIsbil7Z1swXT0tKGV8fDApLGdbMV09LShyfHwwKSxnWzJdPS0obnx8MCksdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGE9dGhpcy5jb21wdXRlZEludmVyc2U7dShhLGEsZyksdGhpcy5zZXRNYXRyaXgodCxpKGEsYSkpfSxkLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscixuKXtnWzBdPWV8fDAsZ1sxXT1yfHwwLGdbMl09bnx8MCx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgYT10aGlzLmNvbXB1dGVkTWF0cml4O3UoYSxhLGcpLHRoaXMuc2V0TWF0cml4KHQsYSl9LGQuc2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7aWYoISh0PHRoaXMubGFzdFQoKSkpe3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIHI9MDtyPDE2Oysrcil0aGlzLl9jb21wb25lbnRzLnB1c2goZVtyXSl9fSxkLnNldERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5jb21wdXRlZFJhZGl1c1swXT1lfSxkLnNldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fbGltaXRzO3JbMF09dCxyWzFdPWV9LGQuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbGltaXRzO3JldHVybiB0Pyh0WzBdPWVbMF0sdFsxXT1lWzFdLHQpOmV9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo5MywiZ2wtbWF0NC9pbnZlcnQiOjI2OCwiZ2wtbWF0NC9sb29rQXQiOjI2OSwiZ2wtbWF0NC9yb3RhdGVYIjoyNzQsImdsLW1hdDQvcm90YXRlWSI6Mjc1LCJnbC1tYXQ0L3JvdGF0ZVoiOjI3NiwiZ2wtbWF0NC9zY2FsZSI6Mjc3LCJnbC1tYXQ0L3RyYW5zbGF0ZSI6Mjc4LCJnbC12ZWMzL25vcm1hbGl6ZSI6MzU4LCJtYXQ0LWludGVycG9sYXRlIjo0MzJ9XSw0MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8Myl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxhPTA7YTxlOysrYSlyW2FdPWE7cmV0dXJuIDI9PT1lJiZ0WzBdWzBdPT09dFsxXVswXSYmdFswXVsxXT09PXRbMV1bMV0/WzBdOnJ9Zm9yKHZhciBpPW5ldyBBcnJheShlKSxhPTA7YTxlOysrYSlpW2FdPWE7aS5zb3J0KGZ1bmN0aW9uKGUscil7dmFyIG49dFtlXVswXS10W3JdWzBdO3JldHVybiBufHx0W2VdWzFdLXRbcl1bMV19KTtmb3IodmFyIG89W2lbMF0saVsxXV0scz1baVswXSxpWzFdXSxhPTI7YTxlOysrYSl7Zm9yKHZhciBsPWlbYV0sYz10W2xdLHU9by5sZW5ndGg7dT4xJiZuKHRbb1t1LTJdXSx0W29bdS0xXV0sYyk8PTA7KXUtPTEsby5wb3AoKTtmb3Ioby5wdXNoKGwpLHU9cy5sZW5ndGg7dT4xJiZuKHRbc1t1LTJdXSx0W3NbdS0xXV0sYyk+PTA7KXUtPTEscy5wb3AoKTtzLnB1c2gobCl9Zm9yKHZhciByPW5ldyBBcnJheShzLmxlbmd0aCtvLmxlbmd0aC0yKSxoPTAsYT0wLGY9by5sZW5ndGg7YTxmOysrYSlyW2grK109b1thXTtmb3IodmFyIHA9cy5sZW5ndGgtMjtwPjA7LS1wKXJbaCsrXT1zW3BdO3JldHVybiByfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjUwOX1dLDQzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT10LHQ9d2luZG93KTt2YXIgcj0wLGE9MCxpPTAsbz17c2hpZnQ6ITEsYWx0OiExLGNvbnRyb2w6ITEsbWV0YTohMX0scz0hMTtmdW5jdGlvbiBsKHQpe3ZhciBlPSExO3JldHVybiJhbHRLZXkiaW4gdCYmKGU9ZXx8dC5hbHRLZXkhPT1vLmFsdCxvLmFsdD0hIXQuYWx0S2V5KSwic2hpZnRLZXkiaW4gdCYmKGU9ZXx8dC5zaGlmdEtleSE9PW8uc2hpZnQsby5zaGlmdD0hIXQuc2hpZnRLZXkpLCJjdHJsS2V5ImluIHQmJihlPWV8fHQuY3RybEtleSE9PW8uY29udHJvbCxvLmNvbnRyb2w9ISF0LmN0cmxLZXkpLCJtZXRhS2V5ImluIHQmJihlPWV8fHQubWV0YUtleSE9PW8ubWV0YSxvLm1ldGE9ISF0Lm1ldGFLZXkpLGV9ZnVuY3Rpb24gYyh0LHMpe3ZhciBjPW4ueChzKSx1PW4ueShzKTsiYnV0dG9ucyJpbiBzJiYodD0wfHMuYnV0dG9ucyksKHQhPT1yfHxjIT09YXx8dSE9PWl8fGwocykpJiYocj0wfHQsYT1jfHwwLGk9dXx8MCxlJiZlKHIsYSxpLG8pKX1mdW5jdGlvbiB1KHQpe2MoMCx0KX1mdW5jdGlvbiBoKCl7KHJ8fGF8fGl8fG8uc2hpZnR8fG8uYWx0fHxvLm1ldGF8fG8uY29udHJvbCkmJihhPWk9MCxyPTAsby5zaGlmdD1vLmFsdD1vLmNvbnRyb2w9by5tZXRhPSExLGUmJmUoMCwwLDAsbykpfWZ1bmN0aW9uIGYodCl7bCh0KSYmZSYmZShyLGEsaSxvKX1mdW5jdGlvbiBwKHQpezA9PT1uLmJ1dHRvbnModCk/YygwLHQpOmMocix0KX1mdW5jdGlvbiBkKHQpe2MocnxuLmJ1dHRvbnModCksdCl9ZnVuY3Rpb24gZyh0KXtjKHImfm4uYnV0dG9ucyh0KSx0KX1mdW5jdGlvbiB2KCl7c3x8KHM9ITAsdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHApLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixkKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGcpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0Iix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJibHVyIixoKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixmKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGYpLHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGYpLHQhPT13aW5kb3cmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsaCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixmKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIixmKSkpfXYoKTt2YXIgbT17ZWxlbWVudDp0fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobSx7ZW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlKXtlP3YoKTpzJiYocz0hMSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIscCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGQpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZyksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix1KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGgpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGYpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZiksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsZiksdCE9PXdpbmRvdyYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixoKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGYpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixmKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGYpKSl9LGVudW1lcmFibGU6ITB9LGJ1dHRvbnM6e2dldDpmdW5jdGlvbigpe3JldHVybiByfSxlbnVtZXJhYmxlOiEwfSx4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZW51bWVyYWJsZTohMH0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LGVudW1lcmFibGU6ITB9LG1vZHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBvfSxlbnVtZXJhYmxlOiEwfX0pLG19O3ZhciBuPXQoIm1vdXNlLWV2ZW50Iil9LHsibW91c2UtZXZlbnQiOjQzOX1dLDQzODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtsZWZ0OjAsdG9wOjB9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZT1lfHx0LmN1cnJlbnRUYXJnZXR8fHQuc3JjRWxlbWVudCxBcnJheS5pc0FycmF5KHIpfHwocj1bMCwwXSk7dmFyIGE9dC5jbGllbnRYfHwwLGk9dC5jbGllbnRZfHwwLG89KHM9ZSxzPT09d2luZG93fHxzPT09ZG9jdW1lbnR8fHM9PT1kb2N1bWVudC5ib2R5P246cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7dmFyIHM7cmV0dXJuIHJbMF09YS1vLmxlZnQsclsxXT1pLW8udG9wLHJ9fSx7fV0sNDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQudGFyZ2V0fHx0LnNyY0VsZW1lbnR8fHdpbmRvd31yLmJ1dHRvbnM9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigiYnV0dG9ucyJpbiB0KXJldHVybiB0LmJ1dHRvbnM7aWYoIndoaWNoImluIHQpe2lmKDI9PT0oZT10LndoaWNoKSlyZXR1cm4gNDtpZigzPT09ZSlyZXR1cm4gMjtpZihlPjApcmV0dXJuIDE8PGUtMX1lbHNlIGlmKCJidXR0b24iaW4gdCl7dmFyIGU7aWYoMT09PShlPXQuYnV0dG9uKSlyZXR1cm4gNDtpZigyPT09ZSlyZXR1cm4gMjtpZihlPj0wKXJldHVybiAxPDxlfX1yZXR1cm4gMH0sci5lbGVtZW50PW4sci54PWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoIm9mZnNldFgiaW4gdClyZXR1cm4gdC5vZmZzZXRYO3ZhciBlPW4odCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WC1lLmxlZnR9cmV0dXJuIDB9LHIueT1mdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe2lmKCJvZmZzZXRZImluIHQpcmV0dXJuIHQub2Zmc2V0WTt2YXIgZT1uKHQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB0LmNsaWVudFktZS50b3B9cmV0dXJuIDB9fSx7fV0sNDQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRvLXB4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHI9ISFlLGU9dCx0PXdpbmRvdyk7dmFyIGE9bigiZXgiLHQpLGk9ZnVuY3Rpb24odCl7ciYmdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuPXQuZGVsdGFYfHwwLGk9dC5kZWx0YVl8fDAsbz10LmRlbHRhWnx8MCxzPXQuZGVsdGFNb2RlLGw9MTtzd2l0Y2gocyl7Y2FzZSAxOmw9YTticmVhaztjYXNlIDI6bD13aW5kb3cuaW5uZXJIZWlnaHR9aWYoaSo9bCxvKj1sLChuKj1sKXx8aXx8bylyZXR1cm4gZShuLGksbyx0KX07cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGkpLGl9fSx7InRvLXB4Ijo1Mzh9XSw0NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidHlwZWRhcnJheS1wb29sIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm4iYSIrdH1mdW5jdGlvbiBpKHQpe3JldHVybiJkIit0fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4iYyIrdCsiXyIrZX1mdW5jdGlvbiBzKHQpe3JldHVybiJzIit0fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4idCIrdCsiXyIrZX1mdW5jdGlvbiBjKHQpe3JldHVybiJvIit0fWZ1bmN0aW9uIHUodCl7cmV0dXJuIngiK3R9ZnVuY3Rpb24gaCh0KXtyZXR1cm4icCIrdH1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuImQiK3QrIl8iK2V9ZnVuY3Rpb24gcCh0KXtyZXR1cm4iaSIrdH1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuInUiK3QrIl8iK2V9ZnVuY3Rpb24gZyh0KXtyZXR1cm4iYiIrdH1mdW5jdGlvbiB2KHQpe3JldHVybiJ5Iit0fWZ1bmN0aW9uIG0odCl7cmV0dXJuImUiK3R9ZnVuY3Rpb24geSh0KXtyZXR1cm4idiIrdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZXh0cmFjdC1jb250b3VyOiAiK3QpfSJvYmplY3QiIT10eXBlb2YgdCYmZSgiTXVzdCBzcGVjaWZ5IGFyZ3VtZW50cyIpO3ZhciByPXQub3JkZXI7QXJyYXkuaXNBcnJheShyKXx8ZSgiTXVzdCBzcGVjaWZ5IG9yZGVyIik7dmFyIEE9dC5hcnJheUFyZ3VtZW50c3x8MTtBPDEmJmUoIk11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYXJyYXkgYXJndW1lbnQiKTt2YXIgUz10LnNjYWxhckFyZ3VtZW50c3x8MDtTPDAmJmUoIlNjYWxhciBhcmcgY291bnQgbXVzdCBiZSA+IDAiKTsiZnVuY3Rpb24iIT10eXBlb2YgdC52ZXJ0ZXgmJmUoIk11c3Qgc3BlY2lmeSB2ZXJ0ZXggY3JlYXRpb24gZnVuY3Rpb24iKTsiZnVuY3Rpb24iIT10eXBlb2YgdC5jZWxsJiZlKCJNdXN0IHNwZWNpZnkgY2VsbCBjcmVhdGlvbiBmdW5jdGlvbiIpOyJmdW5jdGlvbiIhPXR5cGVvZiB0LnBoYXNlJiZlKCJNdXN0IHNwZWNpZnkgcGhhc2UgZnVuY3Rpb24iKTtmb3IodmFyIEU9dC5nZXR0ZXJzfHxbXSxMPW5ldyBBcnJheShBKSxDPTA7QzxBOysrQylFLmluZGV4T2YoQyk+PTA/TFtDXT0hMDpMW0NdPSExO3JldHVybiBmdW5jdGlvbih0LGUscixBLFMsRSl7dmFyIEw9RS5sZW5ndGgsQz1TLmxlbmd0aDtpZihDPDIpdGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWV4dHJhY3QtY29udG91cjogRGltZW5zaW9uIG11c3QgYmUgYXQgbGVhc3QgMiIpO2Zvcih2YXIgUD0iZXh0cmFjdENvbnRvdXIiK1Muam9pbigiXyIpLE89W10sej1bXSxJPVtdLEQ9MDtEPEw7KytEKUkucHVzaChhKEQpKTtmb3IodmFyIEQ9MDtEPEE7KytEKUkucHVzaCh1KEQpKTtmb3IodmFyIEQ9MDtEPEM7KytEKXoucHVzaChzKEQpKyI9IithKDApKyIuc2hhcGVbIitEKyJdfDAiKTtmb3IodmFyIEQ9MDtEPEw7KytEKXt6LnB1c2goaShEKSsiPSIrYShEKSsiLmRhdGEiLGMoRCkrIj0iK2EoRCkrIi5vZmZzZXR8MCIpO2Zvcih2YXIgUj0wO1I8QzsrK1Ipei5wdXNoKGwoRCxSKSsiPSIrYShEKSsiLnN0cmlkZVsiK1IrIl18MCIpfWZvcih2YXIgRD0wO0Q8TDsrK0Qpe3oucHVzaChoKEQpKyI9IitjKEQpKSx6LnB1c2gobyhELDApKTtmb3IodmFyIFI9MTtSPDE8PEM7KytSKXtmb3IodmFyIEY9W10sQj0wO0I8QzsrK0IpUiYxPDxCJiZGLnB1c2goIi0iK2woRCxCKSk7ei5wdXNoKGYoRCxSKSsiPSgiK0Yuam9pbigiIikrIil8MCIpLHoucHVzaChvKEQsUikrIj0wIil9fWZvcih2YXIgRD0wO0Q8TDsrK0QpZm9yKHZhciBSPTA7UjxDOysrUil7dmFyIE49W2woRCxTW1JdKV07Uj4wJiZOLnB1c2gobChELFNbUi0xXSkrIioiK3MoU1tSLTFdKSksei5wdXNoKGQoRCxTW1JdKSsiPSgiK04uam9pbigiLSIpKyIpfDAiKX1mb3IodmFyIEQ9MDtEPEM7KytEKXoucHVzaChwKEQpKyI9MCIpO3oucHVzaChfKyI9MCIpO2Zvcih2YXIgaj1bIjIiXSxEPUMtMjtEPj0wOy0tRClqLnB1c2gocyhTW0RdKSk7ei5wdXNoKHcrIj0oIitqLmpvaW4oIioiKSsiKXwwIixiKyI9bWFsbG9jVWludDMyKCIrdysiKSIseCsiPW1hbGxvY1VpbnQzMigiK3crIikiLGsrIj0wIiksei5wdXNoKGcoMCkrIj0wIik7Zm9yKHZhciBSPTE7UjwxPDxDOysrUil7Zm9yKHZhciBWPVtdLFU9W10sQj0wO0I8QzsrK0IpUiYxPDxCJiYoMD09PVUubGVuZ3RoP1YucHVzaCgiMSIpOlYudW5zaGlmdChVLmpvaW4oIioiKSkpLFUucHVzaChzKFNbQl0pKTt2YXIgcT0iIjtWWzBdLmluZGV4T2YocyhTW0MtMl0pKTwwJiYocT0iLSIpO3ZhciBIPU0oQyxSLFMpO3oucHVzaChtKEgpKyI9KC0iK1Yuam9pbigiLSIpKyIpfDAiLHYoSCkrIj0oIitxK1Yuam9pbigiLSIpKyIpfDAiLGcoSCkrIj0wIil9ZnVuY3Rpb24gRyh0LGUpe08ucHVzaCgiZm9yKCIscChTW3RdKSwiPSIsZSwiOyIscChTW3RdKSwiPCIscyhTW3RdKSwiOyIsIisrIixwKFNbdF0pLCIpeyIpfWZ1bmN0aW9uIFkodCl7Zm9yKHZhciBlPTA7ZTxMOysrZSlPLnB1c2goaChlKSwiKz0iLGQoZSxTW3RdKSwiOyIpO08ucHVzaCgifSIpfWZ1bmN0aW9uIFcoKXtmb3IodmFyIHQ9MTt0PDE8PEM7Kyt0KU8ucHVzaChULCI9IixtKHQpLCI7IixtKHQpLCI9Iix2KHQpLCI7Iix2KHQpLCI9IixULCI7Iil9ei5wdXNoKHkoMCkrIj0wIixUKyI9MCIpLGZ1bmN0aW9uIHQoZSxyKXtpZihlPDApcmV0dXJuIHZvaWQgZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxMOysrZSlFW2VdP08ucHVzaChvKGUsMCksIj0iLGkoZSksIi5nZXQoIixoKGUpLCIpOyIpOk8ucHVzaChvKGUsMCksIj0iLGkoZSksIlsiLGgoZSksIl07Iik7Zm9yKHZhciByPVtdLGU9MDtlPEw7KytlKXIucHVzaChvKGUsMCkpO2Zvcih2YXIgZT0wO2U8QTsrK2Upci5wdXNoKHUoZSkpO08ucHVzaChnKDApLCI9IixiLCJbIixrLCJdPXBoYXNlKCIsci5qb2luKCksIik7Iik7Zm9yKHZhciBuPTE7bjwxPDxDOysrbilPLnB1c2goZyhuKSwiPSIsYiwiWyIsaywiKyIsbShuKSwiXTsiKTtmb3IodmFyIGE9W10sbj0xO248MTw8QzsrK24pYS5wdXNoKCIoIitnKDApKyIhPT0iK2cobikrIikiKTtPLnB1c2goImlmKCIsYS5qb2luKCJ8fCIpLCIpeyIpO2Zvcih2YXIgcz1bXSxlPTA7ZTxDOysrZSlzLnB1c2gocChlKSk7Zm9yKHZhciBlPTA7ZTxMOysrZSl7cy5wdXNoKG8oZSwwKSk7Zm9yKHZhciBuPTE7bjwxPDxDOysrbilFW2VdP08ucHVzaChvKGUsbiksIj0iLGkoZSksIi5nZXQoIixoKGUpLCIrIixmKGUsbiksIik7Iik6Ty5wdXNoKG8oZSxuKSwiPSIsaShlKSwiWyIsaChlKSwiKyIsZihlLG4pLCJdOyIpLHMucHVzaChvKGUsbikpfWZvcih2YXIgZT0wO2U8MTw8QzsrK2Upcy5wdXNoKGcoZSkpO2Zvcih2YXIgZT0wO2U8QTsrK2Upcy5wdXNoKHUoZSkpO08ucHVzaCgidmVydGV4KCIscy5qb2luKCksIik7Iix5KDApLCI9Iix4LCJbIixrLCJdPSIsXywiKys7Iik7Zm9yKHZhciBsPSgxPDxDKS0xLGM9ZyhsKSxuPTA7bjxDOysrbilpZigwPT0odCZ+KDE8PG4pKSl7Zm9yKHZhciBkPWxeMTw8bix2PWcoZCksdz1bXSxUPWQ7VD4wO1Q9VC0xJmQpdy5wdXNoKHgrIlsiK2srIisiK20oVCkrIl0iKTt3LnB1c2goeSgwKSk7Zm9yKHZhciBUPTA7VDxMOysrVCkxJm4/dy5wdXNoKG8oVCxsKSxvKFQsZCkpOncucHVzaChvKFQsZCksbyhULGwpKTsxJm4/dy5wdXNoKGMsdik6dy5wdXNoKHYsYyk7Zm9yKHZhciBUPTA7VDxBOysrVCl3LnB1c2godShUKSk7Ty5wdXNoKCJpZigiLGMsIiE9PSIsdiwiKXsiLCJmYWNlKCIsdy5qb2luKCksIil9Iil9Ty5wdXNoKCJ9IixrLCIrPTE7Iil9KHIpOyFmdW5jdGlvbih0KXtmb3IodmFyIGU9dC0xO2U+PTA7LS1lKUcoZSwwKTtmb3IodmFyIHI9W10sZT0wO2U8TDsrK2UpRVtlXT9yLnB1c2goaShlKSsiLmdldCgiK2goZSkrIikiKTpyLnB1c2goaShlKSsiWyIraChlKSsiXSIpO2Zvcih2YXIgZT0wO2U8QTsrK2Upci5wdXNoKHUoZSkpO08ucHVzaChiLCJbIixrLCIrK109cGhhc2UoIixyLmpvaW4oKSwiKTsiKTtmb3IodmFyIGU9MDtlPHQ7KytlKVkoZSk7Zm9yKHZhciBuPTA7bjxMOysrbilPLnB1c2goaChuKSwiKz0iLGQobixTW3RdKSwiOyIpfShlKTtPLnB1c2goImlmKCIscyhTW2VdKSwiPjApeyIscChTW2VdKSwiPTE7Iik7dChlLTEscnwxPDxTW2VdKTtmb3IodmFyIG49MDtuPEw7KytuKU8ucHVzaChoKG4pLCIrPSIsZChuLFNbZV0pLCI7Iik7ZT09PUMtMSYmKE8ucHVzaChrLCI9MDsiKSxXKCkpO0coZSwyKTt0KGUtMSxyKTtlPT09Qy0xJiYoTy5wdXNoKCJpZigiLHAoU1tDLTFdKSwiJjEpeyIsaywiPTA7fSIpLFcoKSk7WShlKTtPLnB1c2goIn0iKX0oQy0xLDApLE8ucHVzaCgiZnJlZVVpbnQzMigiLHgsIik7ZnJlZVVpbnQzMigiLGIsIik7Iik7dmFyIFg9WyIndXNlIHN0cmljdCc7IiwiZnVuY3Rpb24gIixQLCIoIixJLmpvaW4oKSwiKXsiLCJ2YXIgIix6LmpvaW4oKSwiOyIsTy5qb2luKCIiKSwifSIsInJldHVybiAiLFBdLmpvaW4oIiIpO3JldHVybiBuZXcgRnVuY3Rpb24oInZlcnRleCIsImZhY2UiLCJwaGFzZSIsIm1hbGxvY1VpbnQzMiIsImZyZWVVaW50MzIiLFgpKHQsZSxyLG4ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMil9KHQudmVydGV4LHQuY2VsbCx0LnBoYXNlLFMscixMKX07dmFyIHg9IlYiLGI9IlAiLF89Ik4iLHc9IlEiLGs9IlgiLFQ9IlQiO2Z1bmN0aW9uIE0odCxlLHIpe2Zvcih2YXIgbj0wLGE9MDthPHQ7KythKWUmMTw8YSYmKG58PTE8PHJbYV0pO3JldHVybiBufX0seyJ0eXBlZGFycmF5LXBvb2wiOjU0NH1dLDQ0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjd2lzZS9saWIvd3JhcHBlciIpKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNjYWxhciJdLHByZTp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7X2lubGluZV8xX2FyZzFfPV9pbmxpbmVfMV9hcmcyXy5hcHBseSh2b2lkIDAsX2lubGluZV8xX2FyZzBfKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6ImN3aXNlIixibG9ja1NpemU6NjR9KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUpLHR9fSx7ImN3aXNlL2xpYi93cmFwcGVyIjoxNTF9XSw0NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihBcnJheS5pc0FycmF5KHIpKXtpZihyLmxlbmd0aCE9PWUuZGltZW5zaW9uKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogaW52YWxpZCBib3VuZGFyeSBjb25kaXRpb25zIil9ZWxzZSByPW4oZS5kaW1lbnNpb24sInN0cmluZyI9PXR5cGVvZiByP3I6ImNsYW1wIik7aWYodC5kaW1lbnNpb24hPT1lLmRpbWVuc2lvbisxKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogb3V0cHV0IGRpbWVuc2lvbiBtdXN0IGJlICsxIGlucHV0IGRpbWVuc2lvbiIpO2lmKHQuc2hhcGVbZS5kaW1lbnNpb25dIT09ZS5kaW1lbnNpb24pdGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWdyYWRpZW50OiBvdXRwdXQgc2hhcGUgbXVzdCBtYXRjaCBpbnB1dCBzaGFwZSIpO2Zvcih2YXIgYT0wO2E8ZS5kaW1lbnNpb247KythKWlmKHQuc2hhcGVbYV0hPT1lLnNoYXBlW2FdKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogc2hhcGUgbWlzbWF0Y2giKTtpZigwPT09ZS5zaXplKXJldHVybiB0O2lmKGUuZGltZW5zaW9uPD0wKXJldHVybiB0LnNldCgwKSx0O3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LmpvaW4oKTtpZihtPW9bZV0pcmV0dXJuIG07dmFyIHI9dC5sZW5ndGgsbj1bImZ1bmN0aW9uIGdyYWRpZW50KGRzdCxzcmMpe3ZhciBzPXNyYy5zaGFwZS5zbGljZSgpOyJdO2Z1bmN0aW9uIGEoZSl7Zm9yKHZhciBhPXItZS5sZW5ndGgsaT1bXSxvPVtdLHM9W10sbD0wO2w8cjsrK2wpZS5pbmRleE9mKGwrMSk+PTA/cy5wdXNoKCIwIik6ZS5pbmRleE9mKC0obCsxKSk+PTA/cy5wdXNoKCJzWyIrbCsiXS0xIik6KHMucHVzaCgiLTEiKSxpLnB1c2goIjEiKSxvLnB1c2goInNbIitsKyJdLTIiKSk7dmFyIGM9Ii5sbygiK2kuam9pbigpKyIpLmhpKCIrby5qb2luKCkrIikiO2lmKDA9PT1pLmxlbmd0aCYmKGM9IiIpLGE+MCl7bi5wdXNoKCJpZigxIik7Zm9yKHZhciBsPTA7bDxyOysrbCllLmluZGV4T2YobCsxKT49MHx8ZS5pbmRleE9mKC0obCsxKSk+PTB8fG4ucHVzaCgiJiZzWyIsbCwiXT4yIik7bi5wdXNoKCIpe2dyYWQiLGEsIihzcmMucGljaygiLHMuam9pbigpLCIpIixjKTtmb3IodmFyIGw9MDtsPHI7KytsKWUuaW5kZXhPZihsKzEpPj0wfHxlLmluZGV4T2YoLShsKzEpKT49MHx8bi5wdXNoKCIsZHN0LnBpY2soIixzLmpvaW4oKSwiLCIsbCwiKSIsYyk7bi5wdXNoKCIpOyIpfWZvcih2YXIgbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgdT1NYXRoLmFicyhlW2xdKS0xLGg9ImRzdC5waWNrKCIrcy5qb2luKCkrIiwiK3UrIikiK2M7c3dpdGNoKHRbdV0pe2Nhc2UiY2xhbXAiOnZhciBmPXMuc2xpY2UoKSxwPXMuc2xpY2UoKTtlW2xdPDA/Zlt1XT0ic1siK3UrIl0tMiI6cFt1XT0iMSIsMD09PWE/bi5wdXNoKCJpZihzWyIsdSwiXT4xKXtkc3Quc2V0KCIscy5qb2luKCksIiwiLHUsIiwwLjUqKHNyYy5nZXQoIixmLmpvaW4oKSwiKS1zcmMuZ2V0KCIscC5qb2luKCksIikpKX1lbHNle2RzdC5zZXQoIixzLmpvaW4oKSwiLCIsdSwiLDApfTsiKTpuLnB1c2goImlmKHNbIix1LCJdPjEpe2RpZmYoIixoLCIsc3JjLnBpY2soIixmLmpvaW4oKSwiKSIsYywiLHNyYy5waWNrKCIscC5qb2luKCksIikiLGMsIik7fWVsc2V7emVybygiLGgsIik7fTsiKTticmVhaztjYXNlIm1pcnJvciI6MD09PWE/bi5wdXNoKCJkc3Quc2V0KCIscy5qb2luKCksIiwiLHUsIiwwKTsiKTpuLnB1c2goInplcm8oIixoLCIpOyIpO2JyZWFrO2Nhc2Uid3JhcCI6dmFyIGQ9cy5zbGljZSgpLGc9cy5zbGljZSgpO2VbbF08MD8oZFt1XT0ic1siK3UrIl0tMiIsZ1t1XT0iMCIpOihkW3VdPSJzWyIrdSsiXS0xIixnW3VdPSIxIiksMD09PWE/bi5wdXNoKCJpZihzWyIsdSwiXT4yKXtkc3Quc2V0KCIscy5qb2luKCksIiwiLHUsIiwwLjUqKHNyYy5nZXQoIixkLmpvaW4oKSwiKS1zcmMuZ2V0KCIsZy5qb2luKCksIikpKX1lbHNle2RzdC5zZXQoIixzLmpvaW4oKSwiLCIsdSwiLDApfTsiKTpuLnB1c2goImlmKHNbIix1LCJdPjIpe2RpZmYoIixoLCIsc3JjLnBpY2soIixkLmpvaW4oKSwiKSIsYywiLHNyYy5waWNrKCIsZy5qb2luKCksIikiLGMsIik7fWVsc2V7emVybygiLGgsIik7fTsiKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogSW52YWxpZCBib3VuZGFyeSBjb25kaXRpb24iKX19YT4wJiZuLnB1c2goIn07Iil9Zm9yKHZhciBzPTA7czwxPDxyOysrcyl7Zm9yKHZhciBoPVtdLGY9MDtmPHI7KytmKXMmMTw8ZiYmaC5wdXNoKGYrMSk7Zm9yKHZhciBwPTA7cDwxPDxoLmxlbmd0aDsrK3Ape2Zvcih2YXIgZD1oLnNsaWNlKCksZj0wO2Y8aC5sZW5ndGg7KytmKXAmMTw8ZiYmKGRbZl09LWRbZl0pO2EoZCl9fW4ucHVzaCgicmV0dXJuIGRzdDt9O3JldHVybiBncmFkaWVudCIpO2Zvcih2YXIgZz1bImRpZmYiLCJ6ZXJvIl0sdj1bbCxjXSxzPTE7czw9cjsrK3MpZy5wdXNoKCJncmFkIitzKSx2LnB1c2godShzKSk7Zy5wdXNoKG4uam9pbigiIikpO3ZhciBtPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxnKS5hcHBseSh2b2lkIDAsdik7cmV0dXJuIGlbZV09bSxtfShyKSh0LGUpfTt2YXIgbj10KCJkdXAiKSxhPXQoImN3aXNlLWNvbXBpbGVyIiksaT17fSxvPXt9LHM9e2JvZHk6IiIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGw9YSh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJhcnJheSJdLHByZTpzLHBvc3Q6cyxib2R5OnthcmdzOlt7bmFtZToib3V0IixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJsZWZ0IixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJyaWdodCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keToib3V0PTAuNSoobGVmdC1yaWdodCkiLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZnVuY05hbWU6ImNkaWZmIn0pLGM9YSh7YXJnczpbImFycmF5Il0scHJlOnMscG9zdDpzLGJvZHk6e2FyZ3M6W3tuYW1lOiJvdXQiLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX1dLGJvZHk6Im91dD0wIix0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJ6ZXJvIn0pO2Z1bmN0aW9uIHUodCl7aWYodCBpbiBpKXJldHVybiBpW3RdO2Zvcih2YXIgZT1bXSxyPTA7cjx0OysrcillLnB1c2goIm91dCIsciwicz0wLjUqKGlucCIsciwibC1pbnAiLHIsInIpOyIpO3ZhciBvPVsiYXJyYXkiXSxsPVsianVuayJdO2ZvcihyPTA7cjx0Oysrcil7by5wdXNoKCJhcnJheSIpLGwucHVzaCgib3V0IityKyJzIik7dmFyIGM9bih0KTtjW3JdPS0xLG8ucHVzaCh7YXJyYXk6MCxvZmZzZXQ6Yy5zbGljZSgpfSksY1tyXT0xLG8ucHVzaCh7YXJyYXk6MCxvZmZzZXQ6Yy5zbGljZSgpfSksbC5wdXNoKCJpbnAiK3IrImwiLCJpbnAiK3IrInIiKX1yZXR1cm4gaVt0XT1hKHthcmdzOm8scHJlOnMscG9zdDpzLGJvZHk6e2JvZHk6ZS5qb2luKCIiKSxhcmdzOmwubWFwKGZ1bmN0aW9uKHQpe3JldHVybntuYW1lOnQsbHZhbHVlOjA9PT10LmluZGV4T2YoIm91dCIpLHJ2YWx1ZTowPT09dC5pbmRleE9mKCJpbnAiKSxjb3VudDoianVuayIhPT10fDB9fSksdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZToiZmRUZW1wbGF0ZSIrdH0pfX0seyJjd2lzZS1jb21waWxlciI6MTQ4LGR1cDoxNzJ9XSw0NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheS13YXJwIiksYT10KCJnbC1tYXRyaXgtaW52ZXJ0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLmRpbWVuc2lvbixvPWEoW10scik7cmV0dXJuIG4odCxlLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxpOysrcil7dFtyXT1vWyhpKzEpKmkrcl07Zm9yKHZhciBuPTA7bjxpOysrbil0W3JdKz1vWyhpKzEpKm4rcl0qZVtuXX12YXIgYT1vWyhpKzEpKihpKzEpLTFdO2ZvcihuPTA7bjxpOysrbilhKz1vWyhpKzEpKm4raV0qZVtuXTt2YXIgcz0xL2E7Zm9yKHI9MDtyPGk7KytyKXRbcl0qPXM7cmV0dXJuIHR9KSx0fX0seyJnbC1tYXRyaXgtaW52ZXJ0IjoyODAsIm5kYXJyYXktd2FycCI6NDUxfV0sNDQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1NYXRoLmZsb29yKGUpLG49ZS1yLGE9MDw9ciYmcjx0LnNoYXBlWzBdLGk9MDw9cisxJiZyKzE8dC5zaGFwZVswXTtyZXR1cm4oMS1uKSooYT8rdC5nZXQocik6MCkrbiooaT8rdC5nZXQocisxKTowKX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj1NYXRoLmZsb29yKGUpLGE9ZS1uLGk9MDw9biYmbjx0LnNoYXBlWzBdLG89MDw9bisxJiZuKzE8dC5zaGFwZVswXSxzPU1hdGguZmxvb3IociksbD1yLXMsYz0wPD1zJiZzPHQuc2hhcGVbMV0sdT0wPD1zKzEmJnMrMTx0LnNoYXBlWzFdLGg9aSYmYz90LmdldChuLHMpOjAsZj1pJiZ1P3QuZ2V0KG4scysxKTowO3JldHVybigxLWwpKigoMS1hKSpoK2EqKG8mJmM/dC5nZXQobisxLHMpOjApKStsKigoMS1hKSpmK2EqKG8mJnU/dC5nZXQobisxLHMrMSk6MCkpfWZ1bmN0aW9uIGkodCxlLHIsbil7dmFyIGE9TWF0aC5mbG9vcihlKSxpPWUtYSxvPTA8PWEmJmE8dC5zaGFwZVswXSxzPTA8PWErMSYmYSsxPHQuc2hhcGVbMF0sbD1NYXRoLmZsb29yKHIpLGM9ci1sLHU9MDw9bCYmbDx0LnNoYXBlWzFdLGg9MDw9bCsxJiZsKzE8dC5zaGFwZVsxXSxmPU1hdGguZmxvb3IobikscD1uLWYsZD0wPD1mJiZmPHQuc2hhcGVbMl0sZz0wPD1mKzEmJmYrMTx0LnNoYXBlWzJdLHY9byYmdSYmZD90LmdldChhLGwsZik6MCxtPW8mJmgmJmQ/dC5nZXQoYSxsKzEsZik6MCx5PXMmJnUmJmQ/dC5nZXQoYSsxLGwsZik6MCx4PXMmJmgmJmQ/dC5nZXQoYSsxLGwrMSxmKTowLGI9byYmdSYmZz90LmdldChhLGwsZisxKTowLF89byYmaCYmZz90LmdldChhLGwrMSxmKzEpOjA7cmV0dXJuKDEtcCkqKCgxLWMpKigoMS1pKSp2K2kqeSkrYyooKDEtaSkqbStpKngpKStwKigoMS1jKSooKDEtaSkqYitpKihzJiZ1JiZnP3QuZ2V0KGErMSxsLGYrMSk6MCkpK2MqKCgxLWkpKl8raSoocyYmaCYmZz90LmdldChhKzEsbCsxLGYrMSk6MCkpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7c3dpdGNoKHQuc2hhcGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiBuKHQsZSk7Y2FzZSAyOnJldHVybiBhKHQsZSxyKTtjYXNlIDM6cmV0dXJuIGkodCxlLHIsbyk7ZGVmYXVsdDpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUscixuPTB8dC5zaGFwZS5sZW5ndGgsYT1uZXcgQXJyYXkobiksaT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47KytlKXI9K2FyZ3VtZW50c1tlKzFdLGFbZV09TWF0aC5mbG9vcihyKSxpW2VdPXItYVtlXSxvW2VdPTA8PWFbZV0mJmFbZV08dC5zaGFwZVtlXSxzW2VdPTA8PWFbZV0rMSYmYVtlXSsxPHQuc2hhcGVbZV07dmFyIGwsYyx1LGg9MDt0OmZvcihlPTA7ZTwxPDxuOysrZSl7Zm9yKGM9MSx1PXQub2Zmc2V0LGw9MDtsPG47KytsKWlmKGUmMTw8bCl7aWYoIXNbbF0pY29udGludWUgdDtjKj1pW2xdLHUrPXQuc3RyaWRlW2xdKihhW2xdKzEpfWVsc2V7aWYoIW9bbF0pY29udGludWUgdDtjKj0xLWlbbF0sdSs9dC5zdHJpZGVbbF0qYVtsXX1oKz1jKnQuZGF0YVt1XX1yZXR1cm4gaH0uYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fSxlLmV4cG9ydHMuZDE9bixlLmV4cG9ydHMuZDI9YSxlLmV4cG9ydHMuZDM9aX0se31dLDQ0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjd2lzZS1jb21waWxlciIpLGE9e2JvZHk6IiIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119O2Z1bmN0aW9uIGkodCl7aWYoIXQpcmV0dXJuIGE7Zm9yKHZhciBlPTA7ZTx0LmFyZ3MubGVuZ3RoOysrZSl7dmFyIHI9dC5hcmdzW2VdO3QuYXJnc1tlXT0wPT09ZT97bmFtZTpyLGx2YWx1ZTohMCxydmFsdWU6ISF0LnJ2YWx1ZSxjb3VudDp0LmNvdW50fHwxfTp7bmFtZTpyLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX19cmV0dXJuIHQudGhpc1ZhcnN8fCh0LnRoaXNWYXJzPVtdKSx0LmxvY2FsVmFyc3x8KHQubG9jYWxWYXJzPVtdKSx0fWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQuYXJncy5sZW5ndGg7KytyKWUucHVzaCgiYSIrcik7cmV0dXJuIG5ldyBGdW5jdGlvbigiUCIsWyJyZXR1cm4gZnVuY3Rpb24gIix0LmZ1bmNOYW1lLCJfbmRhcnJheW9wcygiLGUuam9pbigiLCIpLCIpIHtQKCIsZS5qb2luKCIsIiksIik7cmV0dXJuIGEwfSJdLmpvaW4oIiIpKShmdW5jdGlvbih0KXtyZXR1cm4gbih7YXJnczp0LmFyZ3MscHJlOmkodC5wcmUpLGJvZHk6aSh0LmJvZHkpLHBvc3Q6aSh0LnByb2MpLGZ1bmNOYW1lOnQuZnVuY05hbWV9KX0odCkpfXZhciBzPXthZGQ6IisiLHN1YjoiLSIsbXVsOiIqIixkaXY6Ii8iLG1vZDoiJSIsYmFuZDoiJiIsYm9yOiJ8IixieG9yOiJeIixsc2hpZnQ6Ijw8Iixyc2hpZnQ6Ij4+IixycnNoaWZ0OiI+Pj4ifTshZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gcyl7dmFyIGU9c1t0XTtyW3RdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5IiwiYXJyYXkiXSxib2R5OnthcmdzOlsiYSIsImIiLCJjIl0sYm9keToiYT1iIitlKyJjIn0sZnVuY05hbWU6dH0pLHJbdCsiZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImEiK2UrIj1iIn0scnZhbHVlOiEwLGZ1bmNOYW1lOnQrImVxIn0pLHJbdCsicyJdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Iiwic2NhbGFyIl0sYm9keTp7YXJnczpbImEiLCJiIiwicyJdLGJvZHk6ImE9YiIrZSsicyJ9LGZ1bmNOYW1lOnQrInMifSksclt0KyJzZXEiXT1vKHthcmdzOlsiYXJyYXkiLCJzY2FsYXIiXSxib2R5OnthcmdzOlsiYSIsInMiXSxib2R5OiJhIitlKyI9cyJ9LHJ2YWx1ZTohMCxmdW5jTmFtZTp0KyJzZXEifSl9fSgpO3ZhciBsPXtub3Q6IiEiLGJub3Q6In4iLG5lZzoiLSIscmVjaXA6IjEuMC8ifTshZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gbCl7dmFyIGU9bFt0XTtyW3RdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT0iK2UrImIifSxmdW5jTmFtZTp0fSksclt0KyJlcSJdPW8oe2FyZ3M6WyJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIl0sYm9keToiYT0iK2UrImEifSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTp0KyJlcSJ9KX19KCk7dmFyIGM9e2FuZDoiJiYiLG9yOiJ8fCIsZXE6Ij09PSIsbmVxOiIhPT0iLGx0OiI8IixndDoiPiIsbGVxOiI8PSIsZ2VxOiI+PSJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBjKXt2YXIgZT1jW3RdO3JbdF09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPWIiK2UrImMifSxmdW5jTmFtZTp0fSksclt0KyJzIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxib2R5OnthcmdzOlsiYSIsImIiLCJzIl0sYm9keToiYT1iIitlKyJzIn0sZnVuY05hbWU6dCsicyJ9KSxyW3QrImVxIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPWEiK2UrImIifSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTp0KyJlcSJ9KSxyW3QrInNlcSJdPW8oe2FyZ3M6WyJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwicyJdLGJvZHk6ImE9YSIrZSsicyJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrInNlcSJ9KX19KCk7dmFyIHU9WyJhYnMiLCJhY29zIiwiYXNpbiIsImF0YW4iLCJjZWlsIiwiY29zIiwiZXhwIiwiZmxvb3IiLCJsb2ciLCJyb3VuZCIsInNpbiIsInNxcnQiLCJ0YW4iXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHUubGVuZ3RoOysrdCl7dmFyIGU9dVt0XTtyW2VdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPXRoaXNfZihiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sZnVuY05hbWU6ZX0pLHJbZSsiZXEiXT1vKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIl0sYm9keToiYT10aGlzX2YoYSkiLHRoaXNWYXJzOlsidGhpc19mIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrImVxIn0pfX0oKTt2YXIgaD1bIm1heCIsIm1pbiIsImF0YW4yIiwicG93Il07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxoLmxlbmd0aDsrK3Qpe3ZhciBlPWhbdF07cltlXT1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiLCJjIl0sYm9keToiYT10aGlzX2YoYixjKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sZnVuY05hbWU6ZX0pLHJbZSsicyJdPW8oe2FyZ3M6WyJhcnJheSIsImFycmF5Iiwic2NhbGFyIl0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiLCJjIl0sYm9keToiYT10aGlzX2YoYixjKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sZnVuY05hbWU6ZSsicyJ9KSxyW2UrImVxIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGEsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrImVxIn0pLHJbZSsic2VxIl09byh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPXRoaXNfZihhLGIpIix0aGlzVmFyczpbInRoaXNfZiJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplKyJzZXEifSl9fSgpO3ZhciBmPVsiYXRhbjIiLCJwb3ciXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGYubGVuZ3RoOysrdCl7dmFyIGU9Zlt0XTtyW2UrIm9wIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9dGhpc19mKGMsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LGZ1bmNOYW1lOmUrIm9wIn0pLHJbZSsib3BzIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPXRoaXNfZihjLGIpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplKyJvcHMifSkscltlKyJvcGVxIl09byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGIsYSkiLHRoaXNWYXJzOlsidGhpc19mIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrIm9wZXEifSkscltlKyJvcHNlcSJdPW8oe2FyZ3M6WyJhcnJheSIsInNjYWxhciJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT10aGlzX2YoYixhKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsib3BzZXEifSl9fSgpLHIuYW55PW4oe2FyZ3M6WyJhcnJheSJdLHByZTphLGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJpZihhKXtyZXR1cm4gdHJ1ZX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W10sYm9keToicmV0dXJuIGZhbHNlIn0sZnVuY05hbWU6ImFueSJ9KSxyLmFsbD1uKHthcmdzOlsiYXJyYXkiXSxwcmU6YSxib2R5OnthcmdzOlt7bmFtZToieCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keToiaWYoIXgpe3JldHVybiBmYWxzZX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W10sYm9keToicmV0dXJuIHRydWUifSxmdW5jTmFtZToiYWxsIn0pLHIuc3VtPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJ0aGlzX3MrPWEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToic3VtIn0pLHIucHJvZD1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToidGhpc19zPTEifSxib2R5OnthcmdzOlt7bmFtZToiYSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keToidGhpc19zKj1hIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gdGhpc19zIn0sZnVuY05hbWU6InByb2QifSksci5ub3JtMnNxdWFyZWQ9bih7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLGJvZHk6InRoaXNfcys9YSphIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gdGhpc19zIn0sZnVuY05hbWU6Im5vcm0yc3F1YXJlZCJ9KSxyLm5vcm0yPW4oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSxib2R5OiJ0aGlzX3MrPWEqYSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToicmV0dXJuIE1hdGguc3FydCh0aGlzX3MpIn0sZnVuY05hbWU6Im5vcm0yIn0pLHIubm9ybWluZj1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToidGhpc19zPTAifSxib2R5OnthcmdzOlt7bmFtZToiYSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sYm9keToiaWYoLWE+dGhpc19zKXt0aGlzX3M9LWF9ZWxzZSBpZihhPnRoaXNfcyl7dGhpc19zPWF9Iixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gdGhpc19zIn0sZnVuY05hbWU6Im5vcm1pbmYifSksci5ub3JtMT1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToidGhpc19zPTAifSxib2R5OnthcmdzOlt7bmFtZToiYSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDozfV0sYm9keToidGhpc19zKz1hPDA/LWE6YSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToicmV0dXJuIHRoaXNfcyJ9LGZ1bmNOYW1lOiJub3JtMSJ9KSxyLnN1cD1uKHthcmdzOlsiYXJyYXkiXSxwcmU6e2JvZHk6InRoaXNfaD0tSW5maW5pdHkiLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2giXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6ImlmKF9pbmxpbmVfMV9hcmcwXz50aGlzX2gpdGhpc19oPV9pbmxpbmVfMV9hcmcwXyIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6WyJ0aGlzX2giXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6InJldHVybiB0aGlzX2giLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2giXSxsb2NhbFZhcnM6W119fSksci5pbmY9bih7YXJnczpbImFycmF5Il0scHJlOntib2R5OiJ0aGlzX2g9SW5maW5pdHkiLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2giXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6ImlmKF9pbmxpbmVfMV9hcmcwXzx0aGlzX2gpdGhpc19oPV9pbmxpbmVfMV9hcmcwXyIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6WyJ0aGlzX2giXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6InJldHVybiB0aGlzX2giLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2giXSxsb2NhbFZhcnM6W119fSksci5hcmdtaW49bih7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzaGFwZSJdLHByZTp7Ym9keToie3RoaXNfdj1JbmZpbml0eTt0aGlzX2k9X2lubGluZV8wX2FyZzJfLnNsaWNlKDApfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMF9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8wX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzBfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc19pIiwidGhpc192Il0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7aWYoX2lubGluZV8xX2FyZzFfPHRoaXNfdil7dGhpc192PV9pbmxpbmVfMV9hcmcxXztmb3IodmFyIF9pbmxpbmVfMV9rPTA7X2lubGluZV8xX2s8X2lubGluZV8xX2FyZzBfLmxlbmd0aDsrK19pbmxpbmVfMV9rKXt0aGlzX2lbX2lubGluZV8xX2tdPV9pbmxpbmVfMV9hcmcwX1tfaW5saW5lXzFfa119fX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6WyJ0aGlzX2kiLCJ0aGlzX3YiXSxsb2NhbFZhcnM6WyJfaW5saW5lXzFfayJdfSxwb3N0Ontib2R5OiJ7cmV0dXJuIHRoaXNfaX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2kiXSxsb2NhbFZhcnM6W119fSksci5hcmdtYXg9bih7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzaGFwZSJdLHByZTp7Ym9keToie3RoaXNfdj0tSW5maW5pdHk7dGhpc19pPV9pbmxpbmVfMF9hcmcyXy5zbGljZSgwKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzBfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfMF9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8wX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfaSIsInRoaXNfdiJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie2lmKF9pbmxpbmVfMV9hcmcxXz50aGlzX3Ype3RoaXNfdj1faW5saW5lXzFfYXJnMV87Zm9yKHZhciBfaW5saW5lXzFfaz0wO19pbmxpbmVfMV9rPF9pbmxpbmVfMV9hcmcwXy5sZW5ndGg7KytfaW5saW5lXzFfayl7dGhpc19pW19pbmxpbmVfMV9rXT1faW5saW5lXzFfYXJnMF9bX2lubGluZV8xX2tdfX19IixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9LHtuYW1lOiJfaW5saW5lXzFfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLHRoaXNWYXJzOlsidGhpc19pIiwidGhpc192Il0sbG9jYWxWYXJzOlsiX2lubGluZV8xX2siXX0scG9zdDp7Ym9keToie3JldHVybiB0aGlzX2l9IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc19pIl0sbG9jYWxWYXJzOltdfX0pLHIucmFuZG9tPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC5yYW5kb20iLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIl0sYm9keToiYT10aGlzX2YoKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sZnVuY05hbWU6InJhbmRvbSJ9KSxyLmFzc2lnbj1vKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9YiJ9LGZ1bmNOYW1lOiJhc3NpZ24ifSksci5hc3NpZ25zPW8oe2FyZ3M6WyJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9YiJ9LGZ1bmNOYW1lOiJhc3NpZ25zIn0pLHIuZXF1YWxzPW4oe2FyZ3M6WyJhcnJheSIsImFycmF5Il0scHJlOmEsYm9keTp7YXJnczpbe25hbWU6IngiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6InkiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6ImlmKHghPT15KXtyZXR1cm4gZmFsc2V9Iixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W119LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdLGJvZHk6InJldHVybiB0cnVlIn0sZnVuY05hbWU6ImVxdWFscyJ9KX0seyJjd2lzZS1jb21waWxlciI6MTQ4fV0sNDQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm5kYXJyYXkiKSxhPXQoIi4vZG9Db252ZXJ0LmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGk9dCxvPTE7QXJyYXkuaXNBcnJheShpKTspci5wdXNoKGkubGVuZ3RoKSxvKj1pLmxlbmd0aCxpPWlbMF07cmV0dXJuIDA9PT1yLmxlbmd0aD9uKCk6KGV8fChlPW4obmV3IEZsb2F0NjRBcnJheShvKSxyKSksYShlLHQpLGUpfX0seyIuL2RvQ29udmVydC5qcyI6NDQ4LG5kYXJyYXk6NDUyfV0sNDQ4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImN3aXNlLWNvbXBpbGVyIikoe2FyZ3M6WyJhcnJheSIsInNjYWxhciIsImluZGV4Il0scHJlOntib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntcbnZhciBfaW5saW5lXzFfdj1faW5saW5lXzFfYXJnMV8sX2lubGluZV8xX2lcbmZvcihfaW5saW5lXzFfaT0wO19pbmxpbmVfMV9pPF9pbmxpbmVfMV9hcmcyXy5sZW5ndGgtMTsrK19pbmxpbmVfMV9pKSB7XG5faW5saW5lXzFfdj1faW5saW5lXzFfdltfaW5saW5lXzFfYXJnMl9bX2lubGluZV8xX2ldXVxufVxuX2lubGluZV8xX2FyZzBfPV9pbmxpbmVfMV92W19pbmxpbmVfMV9hcmcyX1tfaW5saW5lXzFfYXJnMl8ubGVuZ3RoLTFdXVxufSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6NH1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbIl9pbmxpbmVfMV9pIiwiX2lubGluZV8xX3YiXX0scG9zdDp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZToiY29udmVydCIsYmxvY2tTaXplOjY0fSl9LHsiY3dpc2UtY29tcGlsZXIiOjE0OH1dLDQ0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKSxhPTMyO2Z1bmN0aW9uIGkodCl7c3dpdGNoKHQpe2Nhc2UidWludDgiOnJldHVybltuLm1hbGxvY1VpbnQ4LG4uZnJlZVVpbnQ4XTtjYXNlInVpbnQxNiI6cmV0dXJuW24ubWFsbG9jVWludDE2LG4uZnJlZVVpbnQxNl07Y2FzZSJ1aW50MzIiOnJldHVybltuLm1hbGxvY1VpbnQzMixuLmZyZWVVaW50MzJdO2Nhc2UiaW50OCI6cmV0dXJuW24ubWFsbG9jSW50OCxuLmZyZWVJbnQ4XTtjYXNlImludDE2IjpyZXR1cm5bbi5tYWxsb2NJbnQxNixuLmZyZWVJbnQxNl07Y2FzZSJpbnQzMiI6cmV0dXJuW24ubWFsbG9jSW50MzIsbi5mcmVlSW50MzJdO2Nhc2UiZmxvYXQzMiI6cmV0dXJuW24ubWFsbG9jRmxvYXQsbi5mcmVlRmxvYXRdO2Nhc2UiZmxvYXQ2NCI6cmV0dXJuW24ubWFsbG9jRG91YmxlLG4uZnJlZURvdWJsZV07ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj0wO3I8dDsrK3IpZS5wdXNoKCJzIityKTtmb3Iocj0wO3I8dDsrK3IpZS5wdXNoKCJuIityKTtmb3Iocj0xO3I8dDsrK3IpZS5wdXNoKCJkIityKTtmb3Iocj0xO3I8dDsrK3IpZS5wdXNoKCJlIityKTtmb3Iocj0xO3I8dDsrK3IpZS5wdXNoKCJmIityKTtyZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bIid1c2Ugc3RyaWN0JyJdLG49WyJuZGFycmF5U29ydFdyYXBwZXIiLHQuam9pbigiZCIpLGVdLmpvaW4oIiIpO3IucHVzaChbImZ1bmN0aW9uICIsbiwiKCIsWyJhcnJheSJdLmpvaW4oIiwiKSwiKXsiXS5qb2luKCIiKSk7Zm9yKHZhciBzPVsiZGF0YT1hcnJheS5kYXRhLG9mZnNldD1hcnJheS5vZmZzZXR8MCxzaGFwZT1hcnJheS5zaGFwZSxzdHJpZGU9YXJyYXkuc3RyaWRlIl0sbD0wO2w8dC5sZW5ndGg7KytsKXMucHVzaChbInMiLGwsIj1zdHJpZGVbIixsLCJdfDAsbiIsbCwiPXNoYXBlWyIsbCwiXXwwIl0uam9pbigiIikpO3ZhciBjPW5ldyBBcnJheSh0Lmxlbmd0aCksdT1bXTtmb3IobD0wO2w8dC5sZW5ndGg7KytsKTAhPT0ocD10W2xdKSYmKDA9PT11Lmxlbmd0aD9jW3BdPSIxIjpjW3BdPXUuam9pbigiKiIpLHUucHVzaCgibiIrcCkpO3ZhciBoPS0xLGY9LTE7Zm9yKGw9MDtsPHQubGVuZ3RoOysrbCl7dmFyIHAsZD10W2xdOzAhPT1kJiYoaD4wP3MucHVzaChbImQiLGQsIj1zIixkLCItZCIsaCwiKm4iLGhdLmpvaW4oIiIpKTpzLnB1c2goWyJkIixkLCI9cyIsZF0uam9pbigiIikpLGg9ZCksMCE9KHA9dC5sZW5ndGgtMS1sKSYmKGY+MD9zLnB1c2goWyJlIixwLCI9cyIscCwiLWUiLGYsIipuIixmLCIsZiIscCwiPSIsY1twXSwiLWYiLGYsIipuIixmXS5qb2luKCIiKSk6cy5wdXNoKFsiZSIscCwiPXMiLHAsIixmIixwLCI9IixjW3BdXS5qb2luKCIiKSksZj1wKX1yLnB1c2goInZhciAiK3Muam9pbigiLCIpKTt2YXIgZz1bIjAiLCJuMC0xIiwiZGF0YSIsIm9mZnNldCJdLmNvbmNhdChvKHQubGVuZ3RoKSk7ci5wdXNoKFsiaWYobjA8PSIsYSwiKXsiLCJpbnNlcnRpb25Tb3J0KCIsZy5qb2luKCIsIiksIil9ZWxzZXsiLCJxdWlja1NvcnQoIixnLmpvaW4oIiwiKSwiKX0iXS5qb2luKCIiKSksci5wdXNoKCJ9cmV0dXJuICIrbik7dmFyIHY9bmV3IEZ1bmN0aW9uKCJpbnNlcnRpb25Tb3J0IiwicXVpY2tTb3J0IixyLmpvaW4oIlxuIikpLG09ZnVuY3Rpb24odCxlKXt2YXIgcj1bIid1c2Ugc3RyaWN0JyJdLG49WyJuZGFycmF5SW5zZXJ0aW9uU29ydCIsdC5qb2luKCJkIiksZV0uam9pbigiIiksYT1bImxlZnQiLCJyaWdodCIsImRhdGEiLCJvZmZzZXQiXS5jb25jYXQobyh0Lmxlbmd0aCkpLHM9aShlKSxsPVsiaSxqLGNwdHIscHRyPWxlZnQqczArb2Zmc2V0Il07aWYodC5sZW5ndGg+MSl7Zm9yKHZhciBjPVtdLHU9MTt1PHQubGVuZ3RoOysrdSlsLnB1c2goImkiK3UpLGMucHVzaCgibiIrdSk7cz9sLnB1c2goInNjcmF0Y2g9bWFsbG9jKCIrYy5qb2luKCIqIikrIikiKTpsLnB1c2goInNjcmF0Y2g9bmV3IEFycmF5KCIrYy5qb2luKCIqIikrIikiKSxsLnB1c2goImRwdHIiLCJzcHRyIiwiYSIsImIiKX1lbHNlIGwucHVzaCgic2NyYXRjaCIpO2Z1bmN0aW9uIGgodCl7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuZ2V0KCIsdCwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl0iXS5qb2luKCIiKX1mdW5jdGlvbiBmKHQscil7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuc2V0KCIsdCwiLCIsciwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl09IixyXS5qb2luKCIiKX1pZihyLnB1c2goWyJmdW5jdGlvbiAiLG4sIigiLGEuam9pbigiLCIpLCIpe3ZhciAiLGwuam9pbigiLCIpXS5qb2luKCIiKSwiZm9yKGk9bGVmdCsxO2k8PXJpZ2h0OysraSl7Iiwiaj1pO3B0cis9czAiLCJjcHRyPXB0ciIpLHQubGVuZ3RoPjEpe2ZvcihyLnB1c2goImRwdHI9MDtzcHRyPXB0ciIpLHU9dC5sZW5ndGgtMTt1Pj0wOy0tdSkwIT09KHA9dFt1XSkmJnIucHVzaChbImZvcihpIixwLCI9MDtpIixwLCI8biIscCwiOysraSIscCwiKXsiXS5qb2luKCIiKSk7Zm9yKHIucHVzaCgic2NyYXRjaFtkcHRyKytdPSIsaCgic3B0ciIpKSx1PTA7dTx0Lmxlbmd0aDsrK3UpMCE9PShwPXRbdV0pJiZyLnB1c2goInNwdHIrPWQiK3AsIn0iKTtmb3Ioci5wdXNoKCJfX2c6d2hpbGUoai0tXHgzZWxlZnQpeyIsImRwdHI9MCIsInNwdHI9Y3B0ci1zMCIpLHU9MTt1PHQubGVuZ3RoOysrdSkxPT09dSYmci5wdXNoKCJfX2w6Iiksci5wdXNoKFsiZm9yKGkiLHUsIj0wO2kiLHUsIjxuIix1LCI7KytpIix1LCIpeyJdLmpvaW4oIiIpKTtmb3Ioci5wdXNoKFsiYT0iLGgoInNwdHIiKSwiXG5iPXNjcmF0Y2hbZHB0cl1cbmlmKGE8Yil7YnJlYWsgX19nfVxuaWYoYT5iKXticmVhayBfX2x9Il0uam9pbigiIikpLHU9dC5sZW5ndGgtMTt1Pj0xOy0tdSlyLnB1c2goInNwdHIrPWUiK3UsImRwdHIrPWYiK3UsIn0iKTtmb3Ioci5wdXNoKCJkcHRyPWNwdHI7c3B0cj1jcHRyLXMwIiksdT10Lmxlbmd0aC0xO3U+PTA7LS11KTAhPT0ocD10W3VdKSYmci5wdXNoKFsiZm9yKGkiLHAsIj0wO2kiLHAsIjxuIixwLCI7KytpIixwLCIpeyJdLmpvaW4oIiIpKTtmb3Ioci5wdXNoKGYoImRwdHIiLGgoInNwdHIiKSkpLHU9MDt1PHQubGVuZ3RoOysrdSkwIT09KHA9dFt1XSkmJnIucHVzaChbImRwdHIrPWQiLHAsIjtzcHRyKz1kIixwXS5qb2luKCIiKSwifSIpO2ZvcihyLnB1c2goImNwdHItPXMwXG59Iiksci5wdXNoKCJkcHRyPWNwdHI7c3B0cj0wIiksdT10Lmxlbmd0aC0xO3U+PTA7LS11KTAhPT0ocD10W3VdKSYmci5wdXNoKFsiZm9yKGkiLHAsIj0wO2kiLHAsIjxuIixwLCI7KytpIixwLCIpeyJdLmpvaW4oIiIpKTtmb3Ioci5wdXNoKGYoImRwdHIiLCJzY3JhdGNoW3NwdHIrK10iKSksdT0wO3U8dC5sZW5ndGg7Kyt1KXt2YXIgcDswIT09KHA9dFt1XSkmJnIucHVzaCgiZHB0cis9ZCIrcCwifSIpfX1lbHNlIHIucHVzaCgic2NyYXRjaD0iK2goInB0ciIpLCJ3aGlsZSgoai0tXHgzZWxlZnQpJiYoIitoKCJjcHRyLXMwIikrIj5zY3JhdGNoKSl7IixmKCJjcHRyIixoKCJjcHRyLXMwIikpLCJjcHRyLT1zMCIsIn0iLGYoImNwdHIiLCJzY3JhdGNoIikpO3JldHVybiByLnB1c2goIn0iKSx0Lmxlbmd0aD4xJiZzJiZyLnB1c2goImZyZWUoc2NyYXRjaCkiKSxyLnB1c2goIn0gcmV0dXJuICIrbikscz9uZXcgRnVuY3Rpb24oIm1hbGxvYyIsImZyZWUiLHIuam9pbigiXG4iKSkoc1swXSxzWzFdKTpuZXcgRnVuY3Rpb24oci5qb2luKCJcbiIpKSgpfSh0LGUpLHk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVsiJ3VzZSBzdHJpY3QnIl0scz1bIm5kYXJyYXlRdWlja1NvcnQiLHQuam9pbigiZCIpLGVdLmpvaW4oIiIpLGw9WyJsZWZ0IiwicmlnaHQiLCJkYXRhIiwib2Zmc2V0Il0uY29uY2F0KG8odC5sZW5ndGgpKSxjPWkoZSksdT0wO24ucHVzaChbImZ1bmN0aW9uICIscywiKCIsbC5qb2luKCIsIiksIil7Il0uam9pbigiIikpO3ZhciBoPVsic2l4dGg9KChyaWdodC1sZWZ0KzEpLzYpfDAiLCJpbmRleDE9bGVmdCtzaXh0aCIsImluZGV4NT1yaWdodC1zaXh0aCIsImluZGV4Mz0obGVmdCtyaWdodCk+PjEiLCJpbmRleDI9aW5kZXgzLXNpeHRoIiwiaW5kZXg0PWluZGV4MytzaXh0aCIsImVsMT1pbmRleDEiLCJlbDI9aW5kZXgyIiwiZWwzPWluZGV4MyIsImVsND1pbmRleDQiLCJlbDU9aW5kZXg1IiwibGVzcz1sZWZ0KzEiLCJncmVhdD1yaWdodC0xIiwicGl2b3RzX2FyZV9lcXVhbD10cnVlIiwidG1wIiwidG1wMCIsIngiLCJ5IiwieiIsImsiLCJwdHIwIiwicHRyMSIsInB0cjIiLCJjb21wX3Bpdm90MT0wIiwiY29tcF9waXZvdDI9MCIsImNvbXA9MCJdO2lmKHQubGVuZ3RoPjEpe2Zvcih2YXIgZj1bXSxwPTE7cDx0Lmxlbmd0aDsrK3ApZi5wdXNoKCJuIitwKSxoLnB1c2goImkiK3ApO2ZvcihwPTA7cDw4OysrcCloLnB1c2goImJfcHRyIitwKTtoLnB1c2goInB0cjMiLCJwdHI0IiwicHRyNSIsInB0cjYiLCJwdHI3IiwicGl2b3RfcHRyIiwicHRyX3NoaWZ0IiwiZWxlbWVudFNpemU9IitmLmpvaW4oIioiKSksYz9oLnB1c2goInBpdm90MT1tYWxsb2MoZWxlbWVudFNpemUpIiwicGl2b3QyPW1hbGxvYyhlbGVtZW50U2l6ZSkiKTpoLnB1c2goInBpdm90MT1uZXcgQXJyYXkoZWxlbWVudFNpemUpLHBpdm90Mj1uZXcgQXJyYXkoZWxlbWVudFNpemUpIil9ZWxzZSBoLnB1c2goInBpdm90MSIsInBpdm90MiIpO2Z1bmN0aW9uIGQodCl7cmV0dXJuWyIob2Zmc2V0KyIsdCwiKnMwKSJdLmpvaW4oIiIpfWZ1bmN0aW9uIGcodCl7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuZ2V0KCIsdCwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl0iXS5qb2luKCIiKX1mdW5jdGlvbiB2KHQscil7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuc2V0KCIsdCwiLCIsciwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl09IixyXS5qb2luKCIiKX1mdW5jdGlvbiBtKGUscixhKXtpZigxPT09ZS5sZW5ndGgpbi5wdXNoKCJwdHIwPSIrZChlWzBdKSk7ZWxzZSBmb3IodmFyIGk9MDtpPGUubGVuZ3RoOysraSluLnB1c2goWyJiX3B0ciIsaSwiPXMwKiIsZVtpXV0uam9pbigiIikpO2ZvcihyJiZuLnB1c2goInBpdm90X3B0cj0wIiksbi5wdXNoKCJwdHJfc2hpZnQ9b2Zmc2V0IiksaT10Lmxlbmd0aC0xO2k+PTA7LS1pKTAhPT0obz10W2ldKSYmbi5wdXNoKFsiZm9yKGkiLG8sIj0wO2kiLG8sIjxuIixvLCI7KytpIixvLCIpeyJdLmpvaW4oIiIpKTtpZihlLmxlbmd0aD4xKWZvcihpPTA7aTxlLmxlbmd0aDsrK2kpbi5wdXNoKFsicHRyIixpLCI9Yl9wdHIiLGksIitwdHJfc2hpZnQiXS5qb2luKCIiKSk7Zm9yKG4ucHVzaChhKSxyJiZuLnB1c2goIisrcGl2b3RfcHRyIiksaT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbzswIT09KG89dFtpXSkmJihlLmxlbmd0aD4xP24ucHVzaCgicHRyX3NoaWZ0Kz1kIitvKTpuLnB1c2goInB0cjArPWQiK28pLG4ucHVzaCgifSIpKX19ZnVuY3Rpb24geShlLHIsYSxpKXtpZigxPT09ci5sZW5ndGgpbi5wdXNoKCJwdHIwPSIrZChyWzBdKSk7ZWxzZXtmb3IodmFyIG89MDtvPHIubGVuZ3RoOysrbyluLnB1c2goWyJiX3B0ciIsbywiPXMwKiIscltvXV0uam9pbigiIikpO24ucHVzaCgicHRyX3NoaWZ0PW9mZnNldCIpfWZvcihhJiZuLnB1c2goInBpdm90X3B0cj0wIiksZSYmbi5wdXNoKGUrIjoiKSxvPTE7bzx0Lmxlbmd0aDsrK28pbi5wdXNoKFsiZm9yKGkiLG8sIj0wO2kiLG8sIjxuIixvLCI7KytpIixvLCIpeyJdLmpvaW4oIiIpKTtpZihyLmxlbmd0aD4xKWZvcihvPTA7bzxyLmxlbmd0aDsrK28pbi5wdXNoKFsicHRyIixvLCI9Yl9wdHIiLG8sIitwdHJfc2hpZnQiXS5qb2luKCIiKSk7Zm9yKG4ucHVzaChpKSxvPXQubGVuZ3RoLTE7bz49MTstLW8pYSYmbi5wdXNoKCJwaXZvdF9wdHIrPWYiK28pLHIubGVuZ3RoPjE/bi5wdXNoKCJwdHJfc2hpZnQrPWUiK28pOm4ucHVzaCgicHRyMCs9ZSIrbyksbi5wdXNoKCJ9Iil9ZnVuY3Rpb24geCgpe3QubGVuZ3RoPjEmJmMmJm4ucHVzaCgiZnJlZShwaXZvdDEpIiwiZnJlZShwaXZvdDIpIil9ZnVuY3Rpb24gYihlLHIpe3ZhciBhPSJlbCIrZSxpPSJlbCIrcjtpZih0Lmxlbmd0aD4xKXt2YXIgbz0iX19sIisgKyt1O3kobyxbYSxpXSwhMSxbImNvbXA9IixnKCJwdHIwIiksIi0iLGcoInB0cjEiKSwiXG4iLCJpZihjb21wPjApe3RtcDA9IixhLCI7IixhLCI9IixpLCI7IixpLCI9dG1wMDticmVhayAiLG8sIn1cbiIsImlmKGNvbXA8MCl7YnJlYWsgIixvLCJ9Il0uam9pbigiIikpfWVsc2Ugbi5wdXNoKFsiaWYoIixnKGQoYSkpLCI+IixnKGQoaSkpLCIpe3RtcDA9IixhLCI7IixhLCI9IixpLCI7IixpLCI9dG1wMH0iXS5qb2luKCIiKSl9ZnVuY3Rpb24gXyhlLHIpe3QubGVuZ3RoPjE/bShbZSxyXSwhMSx2KCJwdHIwIixnKCJwdHIxIikpKTpuLnB1c2godihkKGUpLGcoZChyKSkpKX1mdW5jdGlvbiB3KGUscixhKXtpZih0Lmxlbmd0aD4xKXt2YXIgaT0iX19sIisgKyt1O3koaSxbcl0sITAsW2UsIj0iLGcoInB0cjAiKSwiLXBpdm90IixhLCJbcGl2b3RfcHRyXVxuIiwiaWYoIixlLCIhPT0wKXticmVhayAiLGksIn0iXS5qb2luKCIiKSl9ZWxzZSBuLnB1c2goW2UsIj0iLGcoZChyKSksIi1waXZvdCIsYV0uam9pbigiIikpfWZ1bmN0aW9uIGsoZSxyKXt0Lmxlbmd0aD4xP20oW2Uscl0sITEsWyJ0bXA9IixnKCJwdHIwIiksIlxuIix2KCJwdHIwIixnKCJwdHIxIikpLCJcbiIsdigicHRyMSIsInRtcCIpXS5qb2luKCIiKSk6bi5wdXNoKFsicHRyMD0iLGQoZSksIlxuIiwicHRyMT0iLGQociksIlxuIiwidG1wPSIsZygicHRyMCIpLCJcbiIsdigicHRyMCIsZygicHRyMSIpKSwiXG4iLHYoInB0cjEiLCJ0bXAiKV0uam9pbigiIikpfWZ1bmN0aW9uIFQoZSxyLGEpe3QubGVuZ3RoPjE/KG0oW2UscixhXSwhMSxbInRtcD0iLGcoInB0cjAiKSwiXG4iLHYoInB0cjAiLGcoInB0cjEiKSksIlxuIix2KCJwdHIxIixnKCJwdHIyIikpLCJcbiIsdigicHRyMiIsInRtcCIpXS5qb2luKCIiKSksbi5wdXNoKCIrKyIrciwiLS0iK2EpKTpuLnB1c2goWyJwdHIwPSIsZChlKSwiXG4iLCJwdHIxPSIsZChyKSwiXG4iLCJwdHIyPSIsZChhKSwiXG4iLCIrKyIsciwiXG4iLCItLSIsYSwiXG4iLCJ0bXA9IixnKCJwdHIwIiksIlxuIix2KCJwdHIwIixnKCJwdHIxIikpLCJcbiIsdigicHRyMSIsZygicHRyMiIpKSwiXG4iLHYoInB0cjIiLCJ0bXAiKV0uam9pbigiIikpfWZ1bmN0aW9uIE0odCxlKXtrKHQsZSksbi5wdXNoKCItLSIrZSl9ZnVuY3Rpb24gQShlLHIsYSl7dC5sZW5ndGg+MT9tKFtlLHJdLCEwLFt2KCJwdHIwIixnKCJwdHIxIikpLCJcbiIsdigicHRyMSIsWyJwaXZvdCIsYSwiW3Bpdm90X3B0cl0iXS5qb2luKCIiKSldLmpvaW4oIiIpKTpuLnB1c2godihkKGUpLGcoZChyKSkpLHYoZChyKSwicGl2b3QiK2EpKX1mdW5jdGlvbiBTKGUscil7bi5wdXNoKFsiaWYoKCIsciwiLSIsZSwiKTw9IixhLCIpe1xuIiwiaW5zZXJ0aW9uU29ydCgiLGUsIiwiLHIsIixkYXRhLG9mZnNldCwiLG8odC5sZW5ndGgpLmpvaW4oIiwiKSwiKVxuIiwifWVsc2V7XG4iLHMsIigiLGUsIiwiLHIsIixkYXRhLG9mZnNldCwiLG8odC5sZW5ndGgpLmpvaW4oIiwiKSwiKVxuIiwifSJdLmpvaW4oIiIpKX1mdW5jdGlvbiBFKGUscixhKXt0Lmxlbmd0aD4xPyhuLnB1c2goWyJfX2wiLCsrdSwiOndoaWxlKHRydWUpeyJdLmpvaW4oIiIpKSxtKFtlXSwhMCxbImlmKCIsZygicHRyMCIpLCIhPT1waXZvdCIsciwiW3Bpdm90X3B0cl0pe2JyZWFrIF9fbCIsdSwifSJdLmpvaW4oIiIpKSxuLnB1c2goYSwifSIpKTpuLnB1c2goWyJ3aGlsZSgiLGcoZChlKSksIj09PXBpdm90IixyLCIpeyIsYSwifSJdLmpvaW4oIiIpKX1yZXR1cm4gbi5wdXNoKCJ2YXIgIitoLmpvaW4oIiwiKSksYigxLDIpLGIoNCw1KSxiKDEsMyksYigyLDMpLGIoMSw0KSxiKDMsNCksYigyLDUpLGIoMiwzKSxiKDQsNSksdC5sZW5ndGg+MT9tKFsiZWwxIiwiZWwyIiwiZWwzIiwiZWw0IiwiZWw1IiwiaW5kZXgxIiwiaW5kZXgzIiwiaW5kZXg1Il0sITAsWyJwaXZvdDFbcGl2b3RfcHRyXT0iLGcoInB0cjEiKSwiXG4iLCJwaXZvdDJbcGl2b3RfcHRyXT0iLGcoInB0cjMiKSwiXG4iLCJwaXZvdHNfYXJlX2VxdWFsPXBpdm90c19hcmVfZXF1YWwmJihwaXZvdDFbcGl2b3RfcHRyXT09PXBpdm90MltwaXZvdF9wdHJdKVxuIiwieD0iLGcoInB0cjAiKSwiXG4iLCJ5PSIsZygicHRyMiIpLCJcbiIsIno9IixnKCJwdHI0IiksIlxuIix2KCJwdHI1IiwieCIpLCJcbiIsdigicHRyNiIsInkiKSwiXG4iLHYoInB0cjciLCJ6IildLmpvaW4oIiIpKTpuLnB1c2goWyJwaXZvdDE9IixnKGQoImVsMiIpKSwiXG4iLCJwaXZvdDI9IixnKGQoImVsNCIpKSwiXG4iLCJwaXZvdHNfYXJlX2VxdWFsPXBpdm90MT09PXBpdm90MlxuIiwieD0iLGcoZCgiZWwxIikpLCJcbiIsInk9IixnKGQoImVsMyIpKSwiXG4iLCJ6PSIsZyhkKCJlbDUiKSksIlxuIix2KGQoImluZGV4MSIpLCJ4IiksIlxuIix2KGQoImluZGV4MyIpLCJ5IiksIlxuIix2KGQoImluZGV4NSIpLCJ6IildLmpvaW4oIiIpKSxfKCJpbmRleDIiLCJsZWZ0IiksXygiaW5kZXg0IiwicmlnaHQiKSxuLnB1c2goImlmKHBpdm90c19hcmVfZXF1YWwpeyIpLG4ucHVzaCgiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2speyIpLHcoImNvbXAiLCJrIiwxKSxuLnB1c2goImlmKGNvbXA9PT0wKXtjb250aW51ZX0iKSxuLnB1c2goImlmKGNvbXA8MCl7Iiksbi5wdXNoKCJpZihrIT09bGVzcyl7IiksaygiayIsImxlc3MiKSxuLnB1c2goIn0iKSxuLnB1c2goIisrbGVzcyIpLG4ucHVzaCgifWVsc2V7Iiksbi5wdXNoKCJ3aGlsZSh0cnVlKXsiKSx3KCJjb21wIiwiZ3JlYXQiLDEpLG4ucHVzaCgiaWYoY29tcD4wKXsiKSxuLnB1c2goImdyZWF0LS0iKSxuLnB1c2goIn1lbHNlIGlmKGNvbXA8MCl7IiksVCgiayIsImxlc3MiLCJncmVhdCIpLG4ucHVzaCgiYnJlYWsiKSxuLnB1c2goIn1lbHNleyIpLE0oImsiLCJncmVhdCIpLG4ucHVzaCgiYnJlYWsiKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn0iKSxuLnB1c2goIn1lbHNleyIpLG4ucHVzaCgiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2speyIpLHcoImNvbXBfcGl2b3QxIiwiayIsMSksbi5wdXNoKCJpZihjb21wX3Bpdm90MTwwKXsiKSxuLnB1c2goImlmKGshPT1sZXNzKXsiKSxrKCJrIiwibGVzcyIpLG4ucHVzaCgifSIpLG4ucHVzaCgiKytsZXNzIiksbi5wdXNoKCJ9ZWxzZXsiKSx3KCJjb21wX3Bpdm90MiIsImsiLDIpLG4ucHVzaCgiaWYoY29tcF9waXZvdDI+MCl7Iiksbi5wdXNoKCJ3aGlsZSh0cnVlKXsiKSx3KCJjb21wIiwiZ3JlYXQiLDIpLG4ucHVzaCgiaWYoY29tcD4wKXsiKSxuLnB1c2goImlmKC0tZ3JlYXQ8ayl7YnJlYWt9Iiksbi5wdXNoKCJjb250aW51ZSIpLG4ucHVzaCgifWVsc2V7IiksdygiY29tcCIsImdyZWF0IiwxKSxuLnB1c2goImlmKGNvbXA8MCl7IiksVCgiayIsImxlc3MiLCJncmVhdCIpLG4ucHVzaCgifWVsc2V7IiksTSgiayIsImdyZWF0Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJicmVhayIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLG4ucHVzaCgifSIpLEEoImxlZnQiLCIobGVzcy0xKSIsMSksQSgicmlnaHQiLCIoZ3JlYXQrMSkiLDIpLFMoImxlZnQiLCIobGVzcy0yKSIpLFMoIihncmVhdCsyKSIsInJpZ2h0Iiksbi5wdXNoKCJpZihwaXZvdHNfYXJlX2VxdWFsKXsiKSx4KCksbi5wdXNoKCJyZXR1cm4iKSxuLnB1c2goIn0iKSxuLnB1c2goImlmKGxlc3M8aW5kZXgxJiZncmVhdD5pbmRleDUpeyIpLEUoImxlc3MiLDEsIisrbGVzcyIpLEUoImdyZWF0IiwyLCItLWdyZWF0Iiksbi5wdXNoKCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7IiksdygiY29tcF9waXZvdDEiLCJrIiwxKSxuLnB1c2goImlmKGNvbXBfcGl2b3QxPT09MCl7Iiksbi5wdXNoKCJpZihrIT09bGVzcyl7IiksaygiayIsImxlc3MiKSxuLnB1c2goIn0iKSxuLnB1c2goIisrbGVzcyIpLG4ucHVzaCgifWVsc2V7IiksdygiY29tcF9waXZvdDIiLCJrIiwyKSxuLnB1c2goImlmKGNvbXBfcGl2b3QyPT09MCl7Iiksbi5wdXNoKCJ3aGlsZSh0cnVlKXsiKSx3KCJjb21wIiwiZ3JlYXQiLDIpLG4ucHVzaCgiaWYoY29tcD09PTApeyIpLG4ucHVzaCgiaWYoLS1ncmVhdDxrKXticmVha30iKSxuLnB1c2goImNvbnRpbnVlIiksbi5wdXNoKCJ9ZWxzZXsiKSx3KCJjb21wIiwiZ3JlYXQiLDEpLG4ucHVzaCgiaWYoY29tcDwwKXsiKSxUKCJrIiwibGVzcyIsImdyZWF0Iiksbi5wdXNoKCJ9ZWxzZXsiKSxNKCJrIiwiZ3JlYXQiKSxuLnB1c2goIn0iKSxuLnB1c2goImJyZWFrIiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9Iiksbi5wdXNoKCJ9IikseCgpLFMoImxlc3MiLCJncmVhdCIpLG4ucHVzaCgifXJldHVybiAiK3MpLHQubGVuZ3RoPjEmJmM/bmV3IEZ1bmN0aW9uKCJpbnNlcnRpb25Tb3J0IiwibWFsbG9jIiwiZnJlZSIsbi5qb2luKCJcbiIpKShyLGNbMF0sY1sxXSk6bmV3IEZ1bmN0aW9uKCJpbnNlcnRpb25Tb3J0IixuLmpvaW4oIlxuIikpKHIpfSh0LGUsbSk7cmV0dXJuIHYobSx5KX19LHsidHlwZWRhcnJheS1wb29sIjo1NDR9XSw0NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvY29tcGlsZV9zb3J0LmpzIiksYT17fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5vcmRlcixyPXQuZHR5cGUsaT1bZSxyXS5qb2luKCI6Iiksbz1hW2ldO3JldHVybiBvfHwoYVtpXT1vPW4oZSxyKSksbyh0KSx0fX0seyIuL2xpYi9jb21waWxlX3NvcnQuanMiOjQ0OX1dLDQ1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJuZGFycmF5LWxpbmVhci1pbnRlcnBvbGF0ZSIpLGE9dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzY2FsYXIiLCJzY2FsYXIiLCJzY2FsYXIiXSxwcmU6e2JvZHk6Int0aGlzX3dhcnBlZD1uZXcgQXJyYXkoX2lubGluZV8zX2FyZzRfKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzNfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfM19hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8zX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzNfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfM19hcmc0XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6WyJ0aGlzX3dhcnBlZCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie19pbmxpbmVfNF9hcmcyXyh0aGlzX3dhcnBlZCxfaW5saW5lXzRfYXJnMF8pLF9pbmxpbmVfNF9hcmcxXz1faW5saW5lXzRfYXJnM18uYXBwbHkodm9pZCAwLHRoaXNfd2FycGVkKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzRfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNF9hcmcxXyIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZToiX2lubGluZV80X2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzRfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfNF9hcmc0XyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfV0sdGhpc1ZhcnM6WyJ0aGlzX3dhcnBlZCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZToid2FycE5EIixibG9ja1NpemU6NjR9KSxpPXQoImN3aXNlL2xpYi93cmFwcGVyIikoe2FyZ3M6WyJpbmRleCIsImFycmF5Iiwic2NhbGFyIiwic2NhbGFyIiwic2NhbGFyIl0scHJlOntib2R5OiJ7dGhpc193YXJwZWQ9WzBdfSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7X2lubGluZV83X2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfN19hcmcwXyksX2lubGluZV83X2FyZzFfPV9pbmxpbmVfN19hcmczXyhfaW5saW5lXzdfYXJnNF8sdGhpc193YXJwZWRbMF0pfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfN19hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV83X2FyZzFfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzdfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfN19hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV83X2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOiJ3YXJwMUQiLGJsb2NrU2l6ZTo2NH0pLG89dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzY2FsYXIiLCJzY2FsYXIiLCJzY2FsYXIiXSxwcmU6e2JvZHk6Int0aGlzX3dhcnBlZD1bMCwwXX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX3dhcnBlZCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie19pbmxpbmVfMTBfYXJnMl8odGhpc193YXJwZWQsX2lubGluZV8xMF9hcmcwXyksX2lubGluZV8xMF9hcmcxXz1faW5saW5lXzEwX2FyZzNfKF9pbmxpbmVfMTBfYXJnNF8sdGhpc193YXJwZWRbMF0sdGhpc193YXJwZWRbMV0pfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMTBfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTBfYXJnMV8iLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTBfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTBfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTBfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6IndhcnAyRCIsYmxvY2tTaXplOjY0fSkscz10KCJjd2lzZS9saWIvd3JhcHBlciIpKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNjYWxhciIsInNjYWxhciIsInNjYWxhciJdLHByZTp7Ym9keToie3RoaXNfd2FycGVkPVswLDAsMF19IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntfaW5saW5lXzEzX2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfMTNfYXJnMF8pLF9pbmxpbmVfMTNfYXJnMV89X2lubGluZV8xM19hcmczXyhfaW5saW5lXzEzX2FyZzRfLHRoaXNfd2FycGVkWzBdLHRoaXNfd2FycGVkWzFdLHRoaXNfd2FycGVkWzJdKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzEzX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzFfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOiJ3YXJwM0QiLGJsb2NrU2l6ZTo2NH0pO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGUuc2hhcGUubGVuZ3RoKXtjYXNlIDE6aSh0LHIsbi5kMSxlKTticmVhaztjYXNlIDI6byh0LHIsbi5kMixlKTticmVhaztjYXNlIDM6cyh0LHIsbi5kMyxlKTticmVhaztkZWZhdWx0OmEodCxyLG4uYmluZCh2b2lkIDAsZSksZS5zaGFwZS5sZW5ndGgpfXJldHVybiB0fX0seyJjd2lzZS9saWIvd3JhcHBlciI6MTUxLCJuZGFycmF5LWxpbmVhci1pbnRlcnBvbGF0ZSI6NDQ1fV0sNDUyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiaW90YS1hcnJheSIpLGE9dCgiaXMtYnVmZmVyIiksaT0idW5kZWZpbmVkIiE9dHlwZW9mIEZsb2F0NjRBcnJheTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBzKCl7dmFyIHQsZT10aGlzLnN0cmlkZSxyPW5ldyBBcnJheShlLmxlbmd0aCk7Zm9yKHQ9MDt0PHIubGVuZ3RoOysrdClyW3RdPVtNYXRoLmFicyhlW3RdKSx0XTtyLnNvcnQobyk7dmFyIG49bmV3IEFycmF5KHIubGVuZ3RoKTtmb3IodD0wO3Q8bi5sZW5ndGg7Kyt0KW5bdF09clt0XVsxXTtyZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9WyJWaWV3IixlLCJkIix0XS5qb2luKCIiKTtlPDAmJihyPSJWaWV3X05pbCIrdCk7dmFyIGE9ImdlbmVyaWMiPT09dDtpZigtMT09PWUpe3ZhciBpPSJmdW5jdGlvbiAiK3IrIihhKXt0aGlzLmRhdGE9YTt9O3ZhciBwcm90bz0iK3IrIi5wcm90b3R5cGU7cHJvdG8uZHR5cGU9JyIrdCsiJztwcm90by5pbmRleD1mdW5jdGlvbigpe3JldHVybiAtMX07cHJvdG8uc2l6ZT0wO3Byb3RvLmRpbWVuc2lvbj0tMTtwcm90by5zaGFwZT1wcm90by5zdHJpZGU9cHJvdG8ub3JkZXI9W107cHJvdG8ubG89cHJvdG8uaGk9cHJvdG8udHJhbnNwb3NlPXByb3RvLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSk7fTtwcm90by5nZXQ9cHJvdG8uc2V0PWZ1bmN0aW9uKCl7fTtwcm90by5waWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9O3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RfIityKyIoYSl7cmV0dXJuIG5ldyAiK3IrIihhKTt9IjtyZXR1cm4gbmV3IEZ1bmN0aW9uKGkpKCl9aWYoMD09PWUpe2k9ImZ1bmN0aW9uICIrcisiKGEsZCkge3RoaXMuZGF0YSA9IGE7dGhpcy5vZmZzZXQgPSBkfTt2YXIgcHJvdG89IityKyIucHJvdG90eXBlO3Byb3RvLmR0eXBlPSciK3QrIic7cHJvdG8uaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXR9O3Byb3RvLmRpbWVuc2lvbj0wO3Byb3RvLnNpemU9MTtwcm90by5zaGFwZT1wcm90by5zdHJpZGU9cHJvdG8ub3JkZXI9W107cHJvdG8ubG89cHJvdG8uaGk9cHJvdG8udHJhbnNwb3NlPXByb3RvLnN0ZXA9ZnVuY3Rpb24gIityKyJfY29weSgpIHtyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSx0aGlzLm9mZnNldCl9O3Byb3RvLnBpY2s9ZnVuY3Rpb24gIityKyJfcGljaygpe3JldHVybiBUcml2aWFsQXJyYXkodGhpcy5kYXRhKTt9O3Byb3RvLnZhbHVlT2Y9cHJvdG8uZ2V0PWZ1bmN0aW9uICIrcisiX2dldCgpe3JldHVybiAiKyhhPyJ0aGlzLmRhdGEuZ2V0KHRoaXMub2Zmc2V0KSI6InRoaXMuZGF0YVt0aGlzLm9mZnNldF0iKSsifTtwcm90by5zZXQ9ZnVuY3Rpb24gIityKyJfc2V0KHYpe3JldHVybiAiKyhhPyJ0aGlzLmRhdGEuc2V0KHRoaXMub2Zmc2V0LHYpIjoidGhpcy5kYXRhW3RoaXMub2Zmc2V0XT12IikrIn07cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdF8iK3IrIihhLGIsYyxkKXtyZXR1cm4gbmV3ICIrcisiKGEsZCl9IjtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJUcml2aWFsQXJyYXkiLGkpKGNbdF1bMF0pfWk9WyIndXNlIHN0cmljdCciXTt2YXIgbz1uKGUpLGw9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImkiK3R9KSx1PSJ0aGlzLm9mZnNldCsiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJ0aGlzLnN0cmlkZVsiK3QrIl0qaSIrdH0pLmpvaW4oIisiKSxoPW8ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJiIit0fSkuam9pbigiLCIpLGY9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImMiK3R9KS5qb2luKCIsIik7aS5wdXNoKCJmdW5jdGlvbiAiK3IrIihhLCIraCsiLCIrZisiLGQpe3RoaXMuZGF0YT1hIiwidGhpcy5zaGFwZT1bIitoKyJdIiwidGhpcy5zdHJpZGU9WyIrZisiXSIsInRoaXMub2Zmc2V0PWR8MH0iLCJ2YXIgcHJvdG89IityKyIucHJvdG90eXBlIiwicHJvdG8uZHR5cGU9JyIrdCsiJyIsInByb3RvLmRpbWVuc2lvbj0iK2UpLGkucHVzaCgiT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCdzaXplJyx7Z2V0OmZ1bmN0aW9uICIrcisiX3NpemUoKXtyZXR1cm4gIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4idGhpcy5zaGFwZVsiK3QrIl0ifSkuam9pbigiKiIpLCJ9fSkiKSwxPT09ZT9pLnB1c2goInByb3RvLm9yZGVyPVswXSIpOihpLnB1c2goIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywnb3JkZXInLHtnZXQ6IiksZTw0PyhpLnB1c2goImZ1bmN0aW9uICIrcisiX29yZGVyKCl7IiksMj09PWU/aS5wdXNoKCJyZXR1cm4gKE1hdGguYWJzKHRoaXMuc3RyaWRlWzBdKT5NYXRoLmFicyh0aGlzLnN0cmlkZVsxXSkpP1sxLDBdOlswLDFdfX0pIik6Mz09PWUmJmkucHVzaCgidmFyIHMwPU1hdGguYWJzKHRoaXMuc3RyaWRlWzBdKSxzMT1NYXRoLmFicyh0aGlzLnN0cmlkZVsxXSksczI9TWF0aC5hYnModGhpcy5zdHJpZGVbMl0pO2lmKHMwPnMxKXtpZihzMT5zMil7cmV0dXJuIFsyLDEsMF07fWVsc2UgaWYoczA+czIpe3JldHVybiBbMSwyLDBdO31lbHNle3JldHVybiBbMSwwLDJdO319ZWxzZSBpZihzMD5zMil7cmV0dXJuIFsyLDAsMV07fWVsc2UgaWYoczI+czEpe3JldHVybiBbMCwxLDJdO31lbHNle3JldHVybiBbMCwyLDFdO319fSkiKSk6aS5wdXNoKCJPUkRFUn0pIikpLGkucHVzaCgicHJvdG8uc2V0PWZ1bmN0aW9uICIrcisiX3NldCgiK2wuam9pbigiLCIpKyIsdil7IiksYT9pLnB1c2goInJldHVybiB0aGlzLmRhdGEuc2V0KCIrdSsiLHYpfSIpOmkucHVzaCgicmV0dXJuIHRoaXMuZGF0YVsiK3UrIl09dn0iKSxpLnB1c2goInByb3RvLmdldD1mdW5jdGlvbiAiK3IrIl9nZXQoIitsLmpvaW4oIiwiKSsiKXsiKSxhP2kucHVzaCgicmV0dXJuIHRoaXMuZGF0YS5nZXQoIit1KyIpfSIpOmkucHVzaCgicmV0dXJuIHRoaXMuZGF0YVsiK3UrIl19IiksaS5wdXNoKCJwcm90by5pbmRleD1mdW5jdGlvbiAiK3IrIl9pbmRleCgiLGwuam9pbigpLCIpe3JldHVybiAiK3UrIn0iKSxpLnB1c2goInByb3RvLmhpPWZ1bmN0aW9uICIrcisiX2hpKCIrbC5qb2luKCIsIikrIil7cmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bIih0eXBlb2YgaSIsdCwiIT09J251bWJlcid8fGkiLHQsIjwwKT90aGlzLnNoYXBlWyIsdCwiXTppIix0LCJ8MCJdLmpvaW4oIiIpfSkuam9pbigiLCIpKyIsIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4idGhpcy5zdHJpZGVbIit0KyJdIn0pLmpvaW4oIiwiKSsiLHRoaXMub2Zmc2V0KX0iKTt2YXIgcD1vLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYSIrdCsiPXRoaXMuc2hhcGVbIit0KyJdIn0pLGQ9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImMiK3QrIj10aGlzLnN0cmlkZVsiK3QrIl0ifSk7aS5wdXNoKCJwcm90by5sbz1mdW5jdGlvbiAiK3IrIl9sbygiK2wuam9pbigiLCIpKyIpe3ZhciBiPXRoaXMub2Zmc2V0LGQ9MCwiK3Auam9pbigiLCIpKyIsIitkLmpvaW4oIiwiKSk7Zm9yKHZhciBnPTA7ZzxlOysrZylpLnB1c2goImlmKHR5cGVvZiBpIitnKyI9PT0nbnVtYmVyJyYmaSIrZysiPj0wKXtkPWkiK2crInwwO2IrPWMiK2crIipkO2EiK2crIi09ZH0iKTtpLnB1c2goInJldHVybiBuZXcgIityKyIodGhpcy5kYXRhLCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImEiK3R9KS5qb2luKCIsIikrIiwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJjIit0fSkuam9pbigiLCIpKyIsYil9IiksaS5wdXNoKCJwcm90by5zdGVwPWZ1bmN0aW9uICIrcisiX3N0ZXAoIitsLmpvaW4oIiwiKSsiKXt2YXIgIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYSIrdCsiPXRoaXMuc2hhcGVbIit0KyJdIn0pLmpvaW4oIiwiKSsiLCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImIiK3QrIj10aGlzLnN0cmlkZVsiK3QrIl0ifSkuam9pbigiLCIpKyIsYz10aGlzLm9mZnNldCxkPTAsY2VpbD1NYXRoLmNlaWwiKTtmb3IoZz0wO2c8ZTsrK2cpaS5wdXNoKCJpZih0eXBlb2YgaSIrZysiPT09J251bWJlcicpe2Q9aSIrZysifDA7aWYoZDwwKXtjKz1iIitnKyIqKGEiK2crIi0xKTthIitnKyI9Y2VpbCgtYSIrZysiL2QpfWVsc2V7YSIrZysiPWNlaWwoYSIrZysiL2QpfWIiK2crIio9ZH0iKTtpLnB1c2goInJldHVybiBuZXcgIityKyIodGhpcy5kYXRhLCIrby5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImEiK3R9KS5qb2luKCIsIikrIiwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJiIit0fSkuam9pbigiLCIpKyIsYyl9Iik7dmFyIHY9bmV3IEFycmF5KGUpLG09bmV3IEFycmF5KGUpO2ZvcihnPTA7ZzxlOysrZyl2W2ddPSJhW2kiK2crIl0iLG1bZ109ImJbaSIrZysiXSI7aS5wdXNoKCJwcm90by50cmFuc3Bvc2U9ZnVuY3Rpb24gIityKyJfdHJhbnNwb3NlKCIrbCsiKXsiK2wubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIj0oIit0KyI9PT11bmRlZmluZWQ/IitlKyI6Iit0KyJ8MCkifSkuam9pbigiOyIpLCJ2YXIgYT10aGlzLnNoYXBlLGI9dGhpcy5zdHJpZGU7cmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIit2LmpvaW4oIiwiKSsiLCIrbS5qb2luKCIsIikrIix0aGlzLm9mZnNldCl9IiksaS5wdXNoKCJwcm90by5waWNrPWZ1bmN0aW9uICIrcisiX3BpY2soIitsKyIpe3ZhciBhPVtdLGI9W10sYz10aGlzLm9mZnNldCIpO2ZvcihnPTA7ZzxlOysrZylpLnB1c2goImlmKHR5cGVvZiBpIitnKyI9PT0nbnVtYmVyJyYmaSIrZysiPj0wKXtjPShjK3RoaXMuc3RyaWRlWyIrZysiXSppIitnKyIpfDB9ZWxzZXthLnB1c2godGhpcy5zaGFwZVsiK2crIl0pO2IucHVzaCh0aGlzLnN0cmlkZVsiK2crIl0pfSIpO3JldHVybiBpLnB1c2goInZhciBjdG9yPUNUT1JfTElTVFthLmxlbmd0aCsxXTtyZXR1cm4gY3Rvcih0aGlzLmRhdGEsYSxiLGMpfSIpLGkucHVzaCgicmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdF8iK3IrIihkYXRhLHNoYXBlLHN0cmlkZSxvZmZzZXQpe3JldHVybiBuZXcgIityKyIoZGF0YSwiK28ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJzaGFwZVsiK3QrIl0ifSkuam9pbigiLCIpKyIsIitvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4ic3RyaWRlWyIrdCsiXSJ9KS5qb2luKCIsIikrIixvZmZzZXQpfSIpLG5ldyBGdW5jdGlvbigiQ1RPUl9MSVNUIiwiT1JERVIiLGkuam9pbigiXG4iKSkoY1t0XSxzKX12YXIgYz17ZmxvYXQzMjpbXSxmbG9hdDY0OltdLGludDg6W10saW50MTY6W10saW50MzI6W10sdWludDg6W10sdWludDE2OltdLHVpbnQzMjpbXSxhcnJheTpbXSx1aW50OF9jbGFtcGVkOltdLGJ1ZmZlcjpbXSxnZW5lcmljOltdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09dClyZXR1cm4oMCxjLmFycmF5WzBdKShbXSk7Im51bWJlciI9PXR5cGVvZiB0JiYodD1bdF0pLHZvaWQgMD09PWUmJihlPVt0Lmxlbmd0aF0pO3ZhciBvPWUubGVuZ3RoO2lmKHZvaWQgMD09PXIpe3I9bmV3IEFycmF5KG8pO2Zvcih2YXIgcz1vLTEsdT0xO3M+PTA7LS1zKXJbc109dSx1Kj1lW3NdfWlmKHZvaWQgMD09PW4pZm9yKG49MCxzPTA7czxvOysrcylyW3NdPDAmJihuLT0oZVtzXS0xKSpyW3NdKTtmb3IodmFyIGg9ZnVuY3Rpb24odCl7aWYoYSh0KSlyZXR1cm4iYnVmZmVyIjtpZihpKXN3aXRjaChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpe2Nhc2UiW29iamVjdCBGbG9hdDY0QXJyYXldIjpyZXR1cm4iZmxvYXQ2NCI7Y2FzZSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOnJldHVybiJmbG9hdDMyIjtjYXNlIltvYmplY3QgSW50OEFycmF5XSI6cmV0dXJuImludDgiO2Nhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6cmV0dXJuImludDE2IjtjYXNlIltvYmplY3QgSW50MzJBcnJheV0iOnJldHVybiJpbnQzMiI7Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpyZXR1cm4idWludDgiO2Nhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOnJldHVybiJ1aW50MTYiO2Nhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiJ1aW50MzIiO2Nhc2UiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOnJldHVybiJ1aW50OF9jbGFtcGVkIn1yZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8iYXJyYXkiOiJnZW5lcmljIn0odCksZj1jW2hdO2YubGVuZ3RoPD1vKzE7KWYucHVzaChsKGgsZi5sZW5ndGgtMSkpO3JldHVybigwLGZbbysxXSkodCxlLHIsbil9fSx7ImlvdGEtYXJyYXkiOjQxOCwiaXMtYnVmZmVyIjo0MjB9XSw0NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZG91YmxlLWJpdHMiKSxhPU1hdGgucG93KDIsLTEwNzQpLGk9LTE+Pj4wO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSlyZXR1cm4gTmFOO2lmKHQ9PT1lKXJldHVybiB0O2lmKDA9PT10KXJldHVybiBlPDA/LWE6YTt2YXIgcj1uLmhpKHQpLG89bi5sbyh0KTtlPnQ9PXQ+MD9vPT09aT8ocis9MSxvPTApOm8rPTE6MD09PW8/KG89aSxyLT0xKTpvLT0xO3JldHVybiBuLnBhY2sobyxyKX19LHsiZG91YmxlLWJpdHMiOjE2OX1dLDQ1NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguUEksYT1jKDEyMCk7ZnVuY3Rpb24gaSh0LGUscixuKXtyZXR1cm5bIkMiLHQsZSxyLG4scixuXX1mdW5jdGlvbiBvKHQsZSxyLG4sYSxpKXtyZXR1cm5bIkMiLHQvMysyLzMqcixlLzMrMi8zKm4sYS8zKzIvMypyLGkvMysyLzMqbixhLGldfWZ1bmN0aW9uIHModCxlLHIsaSxvLGMsdSxoLGYscCl7aWYocClrPXBbMF0sVD1wWzFdLF89cFsyXSx3PXBbM107ZWxzZXt2YXIgZD1sKHQsZSwtbyk7dD1kLngsZT1kLnk7dmFyIGc9KHQtKGg9KGQ9bChoLGYsLW8pKS54KSkvMix2PShlLShmPWQueSkpLzIsbT1nKmcvKHIqcikrdip2LyhpKmkpO20+MSYmKHIqPW09TWF0aC5zcXJ0KG0pLGkqPW0pO3ZhciB5PXIqcix4PWkqaSxiPShjPT11Py0xOjEpKk1hdGguc3FydChNYXRoLmFicygoeSp4LXkqdip2LXgqZypnKS8oeSp2KnYreCpnKmcpKSk7Yj09MS8wJiYoYj0xKTt2YXIgXz1iKnIqdi9pKyh0K2gpLzIsdz1iKi1pKmcvcisoZStmKS8yLGs9TWF0aC5hc2luKCgoZS13KS9pKS50b0ZpeGVkKDkpKSxUPU1hdGguYXNpbigoKGYtdykvaSkudG9GaXhlZCg5KSk7KGs9dDxfP24tazprKTwwJiYoaz0yKm4rayksKFQ9aDxfP24tVDpUKTwwJiYoVD0yKm4rVCksdSYmaz5UJiYoay09MipuKSwhdSYmVD5rJiYoVC09MipuKX1pZihNYXRoLmFicyhULWspPmEpe3ZhciBNPVQsQT1oLFM9ZjtUPWsrYSoodSYmVD5rPzE6LTEpO3ZhciBFPXMoaD1fK3IqTWF0aC5jb3MoVCksZj13K2kqTWF0aC5zaW4oVCkscixpLG8sMCx1LEEsUyxbVCxNLF8sd10pfXZhciBMPU1hdGgudGFuKChULWspLzQpLEM9NC8zKnIqTCxQPTQvMyppKkwsTz1bMip0LSh0K0MqTWF0aC5zaW4oaykpLDIqZS0oZS1QKk1hdGguY29zKGspKSxoK0MqTWF0aC5zaW4oVCksZi1QKk1hdGguY29zKFQpLGgsZl07aWYocClyZXR1cm4gTztFJiYoTz1PLmNvbmNhdChFKSk7Zm9yKHZhciB6PTA7ejxPLmxlbmd0aDspe3ZhciBJPWwoT1t6XSxPW3orMV0sbyk7T1t6KytdPUkueCxPW3orK109SS55fXJldHVybiBPfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybnt4OnQqTWF0aC5jb3MociktZSpNYXRoLnNpbihyKSx5OnQqTWF0aC5zaW4ocikrZSpNYXRoLmNvcyhyKX19ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdCoobi8xODApfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj1bXSxuPTAsYT0wLGw9MCx1PTAsaD1udWxsLGY9bnVsbCxwPTAsZD0wLGc9MCx2PXQubGVuZ3RoO2c8djtnKyspe3ZhciBtPXRbZ10seT1tWzBdO3N3aXRjaCh5KXtjYXNlIk0iOmw9bVsxXSx1PW1bMl07YnJlYWs7Y2FzZSJBIjoobT1zKHAsZCxtWzFdLG1bMl0sYyhtWzNdKSxtWzRdLG1bNV0sbVs2XSxtWzddKSkudW5zaGlmdCgiQyIpLG0ubGVuZ3RoPjcmJihyLnB1c2gobS5zcGxpY2UoMCw3KSksbS51bnNoaWZ0KCJDIikpO2JyZWFrO2Nhc2UiUyI6dmFyIHg9cCxiPWQ7IkMiIT1lJiYiUyIhPWV8fCh4Kz14LW4sYis9Yi1hKSxtPVsiQyIseCxiLG1bMV0sbVsyXSxtWzNdLG1bNF1dO2JyZWFrO2Nhc2UiVCI6IlEiPT1lfHwiVCI9PWU/KGg9MipwLWgsZj0yKmQtZik6KGg9cCxmPWQpLG09byhwLGQsaCxmLG1bMV0sbVsyXSk7YnJlYWs7Y2FzZSJRIjpoPW1bMV0sZj1tWzJdLG09byhwLGQsbVsxXSxtWzJdLG1bM10sbVs0XSk7YnJlYWs7Y2FzZSJMIjptPWkocCxkLG1bMV0sbVsyXSk7YnJlYWs7Y2FzZSJIIjptPWkocCxkLG1bMV0sZCk7YnJlYWs7Y2FzZSJWIjptPWkocCxkLHAsbVsxXSk7YnJlYWs7Y2FzZSJaIjptPWkocCxkLGwsdSl9ZT15LHA9bVttLmxlbmd0aC0yXSxkPW1bbS5sZW5ndGgtMV0sbS5sZW5ndGg+ND8obj1tW20ubGVuZ3RoLTRdLGE9bVttLmxlbmd0aC0zXSk6KG49cCxhPWQpLHIucHVzaChtKX1yZXR1cm4gcn19LHt9XSw0NTU6W2Z1bmN0aW9uKHQsZSxyKXtyLnZlcnRleE5vcm1hbHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxhPW5ldyBBcnJheShuKSxpPXZvaWQgMD09PXI/MWUtNjpyLG89MDtvPG47KytvKWFbb109WzAsMCwwXTtmb3Iobz0wO288dC5sZW5ndGg7KytvKWZvcih2YXIgcz10W29dLGw9MCxjPXNbcy5sZW5ndGgtMV0sdT1zWzBdLGg9MDtoPHMubGVuZ3RoOysraCl7bD1jLGM9dSx1PXNbKGgrMSklcy5sZW5ndGhdO2Zvcih2YXIgZj1lW2xdLHA9ZVtjXSxkPWVbdV0sZz1uZXcgQXJyYXkoMyksdj0wLG09bmV3IEFycmF5KDMpLHk9MCx4PTA7eDwzOysreClnW3hdPWZbeF0tcFt4XSx2Kz1nW3hdKmdbeF0sbVt4XT1kW3hdLXBbeF0seSs9bVt4XSptW3hdO2lmKHYqeT5pKXt2YXIgYj1hW2NdLF89MS9NYXRoLnNxcnQodip5KTtmb3IoeD0wO3g8MzsrK3gpe3ZhciB3PSh4KzEpJTMsaz0oeCsyKSUzO2JbeF0rPV8qKG1bd10qZ1trXS1tW2tdKmdbd10pfX19Zm9yKG89MDtvPG47KytvKXtiPWFbb107dmFyIFQ9MDtmb3IoeD0wO3g8MzsrK3gpVCs9Ylt4XSpiW3hdO2lmKFQ+aSlmb3IoXz0xL01hdGguc3FydChUKSx4PTA7eDwzOysreCliW3hdKj1fO2Vsc2UgZm9yKHg9MDt4PDM7Kyt4KWJbeF09MH1yZXR1cm4gYX0sci5mYWNlTm9ybWFscz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLGE9bmV3IEFycmF5KG4pLGk9dm9pZCAwPT09cj8xZS02OnIsbz0wO288bjsrK28pe2Zvcih2YXIgcz10W29dLGw9bmV3IEFycmF5KDMpLGM9MDtjPDM7KytjKWxbY109ZVtzW2NdXTt2YXIgdT1uZXcgQXJyYXkoMyksaD1uZXcgQXJyYXkoMyk7Zm9yKGM9MDtjPDM7KytjKXVbY109bFsxXVtjXS1sWzBdW2NdLGhbY109bFsyXVtjXS1sWzBdW2NdO3ZhciBmPW5ldyBBcnJheSgzKSxwPTA7Zm9yKGM9MDtjPDM7KytjKXt2YXIgZD0oYysxKSUzLGc9KGMrMiklMztmW2NdPXVbZF0qaFtnXS11W2ddKmhbZF0scCs9ZltjXSpmW2NdfXA9cD5pPzEvTWF0aC5zcXJ0KHApOjA7Zm9yKGM9MDtjPDM7KytjKWZbY10qPXA7YVtvXT1mfXJldHVybiBhfX0se31dLDQ1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxpPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciB0PW5ldyBTdHJpbmcoImFiYyIpO2lmKHRbNV09ImRlIiwiNSI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KVswXSlyZXR1cm4hMTtmb3IodmFyIGU9e30scj0wO3I8MTA7cisrKWVbIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUocildPXI7aWYoIjAxMjM0NTY3ODkiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkuam9pbigiIikpcmV0dXJuITE7dmFyIG49e307cmV0dXJuImFiY2RlZmdoaWprbG1ub3BxcnN0Ii5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbih0KXtuW3RdPXR9KSwiYWJjZGVmZ2hpamtsbW5vcHFyc3QiPT09T2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxuKSkuam9pbigiIil9Y2F0Y2godCl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbyxzPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gT2JqZWN0KHQpfSh0KSxsPTE7bDxhcmd1bWVudHMubGVuZ3RoO2wrKyl7Zm9yKHZhciBjIGluIHI9T2JqZWN0KGFyZ3VtZW50c1tsXSkpYS5jYWxsKHIsYykmJihzW2NdPXJbY10pO2lmKG4pe289bihyKTtmb3IodmFyIHU9MDt1PG8ubGVuZ3RoO3UrKylpLmNhbGwocixvW3VdKSYmKHNbb1t1XV09cltvW3VdXSl9fXJldHVybiBzfX0se31dLDQ1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixhLGksbyxzLGwsYyl7dmFyIHU9ZStpK2M7aWYoaD4wKXt2YXIgaD1NYXRoLnNxcnQodSsxKTt0WzBdPS41KihvLWwpL2gsdFsxXT0uNSoocy1uKS9oLHRbMl09LjUqKHItaSkvaCx0WzNdPS41Kmh9ZWxzZXt2YXIgZj1NYXRoLm1heChlLGksYyksaD1NYXRoLnNxcnQoMipmLXUrMSk7ZT49Zj8odFswXT0uNSpoLHRbMV09LjUqKGErcikvaCx0WzJdPS41KihzK24pL2gsdFszXT0uNSooby1sKS9oKTppPj1mPyh0WzBdPS41KihyK2EpL2gsdFsxXT0uNSpoLHRbMl09LjUqKGwrbykvaCx0WzNdPS41KihzLW4pL2gpOih0WzBdPS41KihuK3MpL2gsdFsxXT0uNSoobytsKS9oLHRbMl09LjUqaCx0WzNdPS41KihyLWEpL2gpfXJldHVybiB0fX0se31dLDQ1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLmNlbnRlcnx8WzAsMCwwXSxyPXQucm90YXRpb258fFswLDAsMCwxXSxuPXQucmFkaXVzfHwxO2U9W10uc2xpY2UuY2FsbChlLDAsMyksdShyPVtdLnNsaWNlLmNhbGwociwwLDQpLHIpO3ZhciBhPW5ldyBoKHIsZSxNYXRoLmxvZyhuKSk7YS5zZXREaXN0YW5jZUxpbWl0cyh0Lnpvb21NaW4sdC56b29tTWF4KSwoImV5ZSJpbiB0fHwidXAiaW4gdCkmJmEubG9va0F0KDAsdC5leWUsdC5jZW50ZXIsdC51cCk7cmV0dXJuIGF9O3ZhciBuPXQoImZpbHRlcmVkLXZlY3RvciIpLGE9dCgiZ2wtbWF0NC9sb29rQXQiKSxpPXQoImdsLW1hdDQvZnJvbVF1YXQiKSxvPXQoImdsLW1hdDQvaW52ZXJ0Iikscz10KCIuL2xpYi9xdWF0RnJvbUZyYW1lIik7ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0LDIpK01hdGgucG93KGUsMikrTWF0aC5wb3cociwyKSl9ZnVuY3Rpb24gYyh0LGUscixuKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpK01hdGgucG93KG4sMikpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxhPWVbMl0saT1lWzNdLG89YyhyLG4sYSxpKTtvPjFlLTY/KHRbMF09ci9vLHRbMV09bi9vLHRbMl09YS9vLHRbM109aS9vKToodFswXT10WzFdPXRbMl09MCx0WzNdPTEpfWZ1bmN0aW9uIGgodCxlLHIpe3RoaXMucmFkaXVzPW4oW3JdKSx0aGlzLmNlbnRlcj1uKGUpLHRoaXMucm90YXRpb249bih0KSx0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMucmFkaXVzLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5jZW50ZXIuY3VydmUoMCksdGhpcy5jb21wdXRlZFJvdGF0aW9uPXRoaXMucm90YXRpb24uY3VydmUoMCksdGhpcy5jb21wdXRlZFVwPVsuMSwwLDBdLHRoaXMuY29tcHV0ZWRFeWU9Wy4xLDAsMF0sdGhpcy5jb21wdXRlZE1hdHJpeD1bLjEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLHRoaXMucmVjYWxjTWF0cml4KDApfXZhciBmPWgucHJvdG90eXBlO2YubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5yYWRpdXMubGFzdFQoKSx0aGlzLmNlbnRlci5sYXN0VCgpLHRoaXMucm90YXRpb24ubGFzdFQoKSl9LGYucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3RoaXMucmFkaXVzLmN1cnZlKHQpLHRoaXMuY2VudGVyLmN1cnZlKHQpLHRoaXMucm90YXRpb24uY3VydmUodCk7dmFyIGU9dGhpcy5jb21wdXRlZFJvdGF0aW9uO3UoZSxlKTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2kocixlKTt2YXIgbj10aGlzLmNvbXB1dGVkQ2VudGVyLGE9dGhpcy5jb21wdXRlZEV5ZSxvPXRoaXMuY29tcHV0ZWRVcCxzPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO2FbMF09blswXStzKnJbMl0sYVsxXT1uWzFdK3Mqcls2XSxhWzJdPW5bMl0rcypyWzEwXSxvWzBdPXJbMV0sb1sxXT1yWzVdLG9bMl09cls5XTtmb3IodmFyIGw9MDtsPDM7KytsKXtmb3IodmFyIGM9MCxoPTA7aDwzOysraCljKz1yW2wrNCpoXSphW2hdO3JbMTIrbF09LWN9fSxmLmdldE1hdHJpeD1mdW5jdGlvbih0LGUpe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoZSl7Zm9yKHZhciBuPTA7bjwxNjsrK24pZVtuXT1yW25dO3JldHVybiBlfXJldHVybiByfSxmLmlkbGU9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuaWRsZSh0KSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMucm90YXRpb24uaWRsZSh0KX0sZi5mbHVzaD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5mbHVzaCh0KSx0aGlzLnJhZGl1cy5mbHVzaCh0KSx0aGlzLnJvdGF0aW9uLmZsdXNoKHQpfSxmLnBhbj1mdW5jdGlvbih0LGUscixuKXtlPWV8fDAscj1yfHwwLG49bnx8MCx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgYT10aGlzLmNvbXB1dGVkTWF0cml4LGk9YVsxXSxvPWFbNV0scz1hWzldLGM9bChpLG8scyk7aS89YyxvLz1jLHMvPWM7dmFyIHU9YVswXSxoPWFbNF0sZj1hWzhdLHA9dSppK2gqbytmKnMsZD1sKHUtPWkqcCxoLT1vKnAsZi09cypwKTt1Lz1kLGgvPWQsZi89ZDt2YXIgZz1hWzJdLHY9YVs2XSxtPWFbMTBdLHk9ZyppK3YqbyttKnMseD1nKnUrdipoK20qZixiPWwoZy09eSppK3gqdSx2LT15Km8reCpoLG0tPXkqcyt4KmYpO2cvPWIsdi89YixtLz1iO3ZhciBfPXUqZStpKnIsdz1oKmUrbypyLGs9ZiplK3Mqcjt0aGlzLmNlbnRlci5tb3ZlKHQsXyx3LGspO3ZhciBUPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO1Q9TWF0aC5tYXgoMWUtNCxUK24pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKFQpKX0sZi5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCksZT1lfHwwLHI9cnx8MDt2YXIgYT10aGlzLmNvbXB1dGVkTWF0cml4LGk9YVswXSxvPWFbNF0scz1hWzhdLHU9YVsxXSxoPWFbNV0sZj1hWzldLHA9YVsyXSxkPWFbNl0sZz1hWzEwXSx2PWUqaStyKnUsbT1lKm8rcipoLHk9ZSpzK3IqZix4PS0oZCp5LWcqbSksYj0tKGcqdi1wKnkpLF89LShwKm0tZCp2KSx3PU1hdGguc3FydChNYXRoLm1heCgwLDEtTWF0aC5wb3coeCwyKS1NYXRoLnBvdyhiLDIpLU1hdGgucG93KF8sMikpKSxrPWMoeCxiLF8sdyk7az4xZS02Pyh4Lz1rLGIvPWssXy89ayx3Lz1rKTooeD1iPV89MCx3PTEpO3ZhciBUPXRoaXMuY29tcHV0ZWRSb3RhdGlvbixNPVRbMF0sQT1UWzFdLFM9VFsyXSxFPVRbM10sTD1NKncrRSp4K0EqXy1TKmIsQz1BKncrRSpiK1MqeC1NKl8sUD1TKncrRSpfK00qYi1BKngsTz1FKnctTSp4LUEqYi1TKl87aWYobil7eD1wLGI9ZCxfPWc7dmFyIHo9TWF0aC5zaW4obikvbCh4LGIsXyk7eCo9eixiKj16LF8qPXosTz1PKih3PU1hdGguY29zKGUpKS0oTD1MKncrTyp4K0MqXy1QKmIpKngtKEM9Qyp3K08qYitQKngtTCpfKSpiLShQPVAqdytPKl8rTCpiLUMqeCkqX312YXIgST1jKEwsQyxQLE8pO0k+MWUtNj8oTC89SSxDLz1JLFAvPUksTy89SSk6KEw9Qz1QPTAsTz0xKSx0aGlzLnJvdGF0aW9uLnNldCh0LEwsQyxQLE8pfSxmLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxyPXJ8fHRoaXMuY29tcHV0ZWRDZW50ZXIsZT1lfHx0aGlzLmNvbXB1dGVkRXllLG49bnx8dGhpcy5jb21wdXRlZFVwO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7YShpLGUscixuKTt2YXIgbz10aGlzLmNvbXB1dGVkUm90YXRpb247cyhvLGlbMF0saVsxXSxpWzJdLGlbNF0saVs1XSxpWzZdLGlbOF0saVs5XSxpWzEwXSksdShvLG8pLHRoaXMucm90YXRpb24uc2V0KHQsb1swXSxvWzFdLG9bMl0sb1szXSk7Zm9yKHZhciBsPTAsYz0wO2M8MzsrK2MpbCs9TWF0aC5wb3cocltjXS1lW2NdLDIpO3RoaXMucmFkaXVzLnNldCh0LC41Kk1hdGgubG9nKE1hdGgubWF4KGwsMWUtNikpKSx0aGlzLmNlbnRlci5zZXQodCxyWzBdLHJbMV0sclsyXSl9LGYudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY2VudGVyLm1vdmUodCxlfHwwLHJ8fDAsbnx8MCl9LGYuc2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jb21wdXRlZFJvdGF0aW9uO3MocixlWzBdLGVbMV0sZVsyXSxlWzRdLGVbNV0sZVs2XSxlWzhdLGVbOV0sZVsxMF0pLHUocixyKSx0aGlzLnJvdGF0aW9uLnNldCh0LHJbMF0sclsxXSxyWzJdLHJbM10pO3ZhciBuPXRoaXMuY29tcHV0ZWRNYXRyaXg7byhuLGUpO3ZhciBhPW5bMTVdO2lmKE1hdGguYWJzKGEpPjFlLTYpe3ZhciBpPW5bMTJdL2EsbD1uWzEzXS9hLGM9blsxNF0vYTt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaD1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt0aGlzLmNlbnRlci5zZXQodCxpLW5bMl0qaCxsLW5bNl0qaCxjLW5bMTBdKmgpLHRoaXMucmFkaXVzLmlkbGUodCl9ZWxzZSB0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCl9LGYuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtlPjAmJnRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGUpKX0sZi5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3Q9dD4wP01hdGgubG9nKHQpOi0xLzAsZT1lPjA/TWF0aC5sb2coZSk6MS8wLGU9TWF0aC5tYXgoZSx0KSx0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF09dCx0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF09ZX0sZi5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJhZGl1cy5ib3VuZHM7cmV0dXJuIHQ/KHRbMF09TWF0aC5leHAoZVswXVswXSksdFsxXT1NYXRoLmV4cChlWzFdWzBdKSx0KTpbTWF0aC5leHAoZVswXVswXSksTWF0aC5leHAoZVsxXVswXSldfSxmLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY2FsY01hdHJpeCh0aGlzLmxhc3RUKCkpLHtjZW50ZXI6dGhpcy5jb21wdXRlZENlbnRlci5zbGljZSgpLHJvdGF0aW9uOnRoaXMuY29tcHV0ZWRSb3RhdGlvbi5zbGljZSgpLGRpc3RhbmNlOk1hdGgubG9nKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLHpvb21NaW46dGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdLHpvb21NYXg6dGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdfX0sZi5mcm9tSlNPTj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10LmNlbnRlcjtyJiZ0aGlzLmNlbnRlci5zZXQoZSxyWzBdLHJbMV0sclsyXSk7dmFyIG49dC5yb3RhdGlvbjtuJiZ0aGlzLnJvdGF0aW9uLnNldChlLG5bMF0sblsxXSxuWzJdLG5bM10pO3ZhciBhPXQuZGlzdGFuY2U7YSYmYT4wJiZ0aGlzLnJhZGl1cy5zZXQoZSxNYXRoLmxvZyhhKSksdGhpcy5zZXREaXN0YW5jZUxpbWl0cyh0Lnpvb21NaW4sdC56b29tTWF4KX19LHsiLi9saWIvcXVhdEZyb21GcmFtZSI6NDU3LCJmaWx0ZXJlZC12ZWN0b3IiOjIyOSwiZ2wtbWF0NC9mcm9tUXVhdCI6MjY1LCJnbC1tYXQ0L2ludmVydCI6MjY4LCJnbC1tYXQ0L2xvb2tBdCI6MjY5fV0sNDU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlcGVhdC1zdHJpbmciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKHI9InVuZGVmaW5lZCIhPXR5cGVvZiByP3IrIiI6IiAiLGUpK3R9fSx7InJlcGVhdC1zdHJpbmciOjUwMn1dLDQ2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVyblt0XTt2YXIgcj1bdF07InN0cmluZyI9PXR5cGVvZiBlfHxBcnJheS5pc0FycmF5KGUpP2U9e2JyYWNrZXRzOmV9OmV8fChlPXt9KTt2YXIgbj1lLmJyYWNrZXRzP0FycmF5LmlzQXJyYXkoZS5icmFja2V0cyk/ZS5icmFja2V0czpbZS5icmFja2V0c106WyJ7fSIsIltdIiwiKCkiXSxhPWUuZXNjYXBlfHwiX19fIixpPSEhZS5mbGF0O24uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1uZXcgUmVnRXhwKFsiXFwiLHRbMF0sIlteXFwiLHRbMF0sIlxcIix0WzFdLCJdKlxcIix0WzFdXS5qb2luKCIiKSksbj1bXTtmdW5jdGlvbiBpKGUsaSxvKXt2YXIgcz1yLnB1c2goZS5zbGljZSh0WzBdLmxlbmd0aCwtdFsxXS5sZW5ndGgpKS0xO3JldHVybiBuLnB1c2gocyksYStzK2F9ci5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7Zm9yKHZhciBhLG89MDt0IT1hOylpZihhPXQsdD10LnJlcGxhY2UoZSxpKSxvKys+MWU0KXRocm93IEVycm9yKCJSZWZlcmVuY2VzIGhhdmUgY2lyY3VsYXIgZGVwZW5kZW5jeS4gUGxlYXNlLCBjaGVjayB0aGVtLiIpO3Jbbl09dH0pLG49bi5yZXZlcnNlKCkscj1yLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKHIpe2U9ZS5yZXBsYWNlKG5ldyBSZWdFeHAoIihcXCIrYStyKyJcXCIrYSsiKSIsImciKSx0WzBdKyIkMSIrdFsxXSl9KSxlfSl9KTt2YXIgbz1uZXcgUmVnRXhwKCJcXCIrYSsiKFswLTldKylcXCIrYSk7cmV0dXJuIGk/cjpmdW5jdGlvbiB0KGUscixuKXtmb3IodmFyIGEsaT1bXSxzPTA7YT1vLmV4ZWMoZSk7KXtpZihzKys+MWU0KXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2VzIGluIHBhcmVudGhlc2lzIik7aS5wdXNoKGUuc2xpY2UoMCxhLmluZGV4KSksaS5wdXNoKHQoclthWzFdXSxyKSksZT1lLnNsaWNlKGEuaW5kZXgrYVswXS5sZW5ndGgpfXJldHVybiBpLnB1c2goZSksaX0oclswXSxyKX1mdW5jdGlvbiBhKHQsZSl7aWYoZSYmZS5mbGF0KXt2YXIgcixuPWUmJmUuZXNjYXBlfHwiX19fIixhPXRbMF07aWYoIWEpcmV0dXJuIiI7Zm9yKHZhciBpPW5ldyBSZWdFeHAoIlxcIituKyIoWzAtOV0rKVxcIituKSxvPTA7YSE9cjspe2lmKG8rKz4xZTQpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gIit0KTtyPWEsYT1hLnJlcGxhY2UoaSxzKX1yZXR1cm4gYX1yZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24gdChlLHIpe3JldHVybiBBcnJheS5pc0FycmF5KHIpJiYocj1yLnJlZHVjZSh0LCIiKSksZStyfSwiIik7ZnVuY3Rpb24gcyhlLHIpe2lmKG51bGw9PXRbcl0pdGhyb3cgRXJyb3IoIlJlZmVyZW5jZSAiK3IrImlzIHVuZGVmaW5lZCIpO3JldHVybiB0W3JdfX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/YSh0LGUpOm4odCxlKX1pLnBhcnNlPW4saS5zdHJpbmdpZnk9YSxlLmV4cG9ydHM9aX0se31dLDQ2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwaWNrLWJ5LWFsaWFzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2FyZ3VtZW50cy5sZW5ndGg+MSYmKHQ9YXJndW1lbnRzKTsic3RyaW5nIj09dHlwZW9mIHQ/dD10LnNwbGl0KC9ccy8pLm1hcChwYXJzZUZsb2F0KToibnVtYmVyIj09dHlwZW9mIHQmJih0PVt0XSk7dC5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgdFswXT9lPTE9PT10Lmxlbmd0aD97d2lkdGg6dFswXSxoZWlnaHQ6dFswXSx4OjAseTowfToyPT09dC5sZW5ndGg/e3dpZHRoOnRbMF0saGVpZ2h0OnRbMV0seDowLHk6MH06e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdfHwwLGhlaWdodDp0WzNdLXRbMV18fDB9OnQmJih0PW4odCx7bGVmdDoieCBsIGxlZnQgTGVmdCIsdG9wOiJ5IHQgdG9wIFRvcCIsd2lkdGg6Incgd2lkdGggVyBXaWR0aCIsaGVpZ2h0OiJoIGhlaWdodCBXIFdpZHRoIixib3R0b206ImIgYm90dG9tIEJvdHRvbSIscmlnaHQ6InIgcmlnaHQgUmlnaHQifSksZT17eDp0LmxlZnR8fDAseTp0LnRvcHx8MH0sbnVsbD09dC53aWR0aD90LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD0wOmUud2lkdGg9dC53aWR0aCxudWxsPT10LmhlaWdodD90LmJvdHRvbT9lLmhlaWdodD10LmJvdHRvbS1lLnk6ZS5oZWlnaHQ9MDplLmhlaWdodD10LmhlaWdodCk7cmV0dXJuIGV9fSx7InBpY2stYnktYWxpYXMiOjQ2N31dLDQ2MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gdC5yZXBsYWNlKGEsZnVuY3Rpb24odCxyLGEpe3ZhciBvPXIudG9Mb3dlckNhc2UoKTtmb3IoYT1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKGkpO3JldHVybiBlP2UubWFwKE51bWJlcik6W119KGEpLCJtIj09byYmYS5sZW5ndGg+MiYmKGUucHVzaChbcl0uY29uY2F0KGEuc3BsaWNlKDAsMikpKSxvPSJsIixyPSJtIj09cj8ibCI6IkwiKTs7KXtpZihhLmxlbmd0aD09bltvXSlyZXR1cm4gYS51bnNoaWZ0KHIpLGUucHVzaChhKTtpZihhLmxlbmd0aDxuW29dKXRocm93IG5ldyBFcnJvcigibWFsZm9ybWVkIHBhdGggZGF0YSIpO2UucHVzaChbcl0uY29uY2F0KGEuc3BsaWNlKDAsbltvXSkpKX19KSxlfTt2YXIgbj17YTo3LGM6NixoOjEsbDoyLG06MixxOjQsczo0LHQ6Mix2OjEsejowfSxhPS8oW2FzdHZ6cW1obGNdKShbXmFzdHZ6cW1obGNdKikvZ2k7dmFyIGk9Ly0/WzAtOV0qXC4/WzAtOV0rKD86ZVstK10/XGQrKT8vZ2l9LHt9XSw0NjM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT1bMCwiIl0pLHQ9U3RyaW5nKHQpO3ZhciByPXBhcnNlRmxvYXQodCwxMCk7cmV0dXJuIGVbMF09cixlWzFdPXQubWF0Y2goL1tcZC5cLVwrXSpccyooLiopLylbMV18fCIiLGV9fSx7fV0sNDY0OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpe3ZhciByLG4sYSxpLG8sczsidW5kZWZpbmVkIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiZudWxsIT09cGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9lLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OiJ1bmRlZmluZWQiIT10eXBlb2YgdCYmbnVsbCE9PXQmJnQuaHJ0aW1lPyhlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4ocigpLW8pLzFlNn0sbj10LmhydGltZSxpPShyPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIDFlOSoodD1uKCkpWzBdK3RbMV19KSgpLHM9MWU5KnQudXB0aW1lKCksbz1pLXMpOkRhdGUubm93PyhlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKS1hfSxhPURhdGUubm93KCkpOihlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKS1hfSxhPShuZXcgRGF0ZSkuZ2V0VGltZSgpKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo0ODR9XSw0NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8bil7Zm9yKHZhciByPTEsaT0wO2k8ZTsrK2kpZm9yKHZhciBvPTA7bzxpOysrbylpZih0W2ldPHRbb10pcj0tcjtlbHNlIGlmKHRbaV09PT10W29dKXJldHVybiAwO3JldHVybiByfWZvcih2YXIgcz1hLm1hbGxvY1VpbnQ4KGUpLGk9MDtpPGU7KytpKXNbaV09MDtmb3IodmFyIHI9MSxpPTA7aTxlOysraSlpZighc1tpXSl7dmFyIGw9MTtzW2ldPTE7Zm9yKHZhciBvPXRbaV07byE9PWk7bz10W29dKXtpZihzW29dKXJldHVybiBhLmZyZWVVaW50OChzKSwwO2wrPTEsc1tvXT0xfTEmbHx8KHI9LXIpfXJldHVybiBhLmZyZWVVaW50OChzKSxyfTt2YXIgbj0zMixhPXQoInR5cGVkYXJyYXktcG9vbCIpfSx7InR5cGVkYXJyYXktcG9vbCI6NTQ0fV0sNDY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGE9dCgiaW52ZXJ0LXBlcm11dGF0aW9uIik7ci5yYW5rPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3N3aXRjaChlKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwO2Nhc2UgMjpyZXR1cm4gdFsxXX12YXIgcixpLG8scz1uLm1hbGxvY1VpbnQzMihlKSxsPW4ubWFsbG9jVWludDMyKGUpLGM9MDtmb3IoYSh0LGwpLG89MDtvPGU7KytvKXNbb109dFtvXTtmb3Iobz1lLTE7bz4wOy0tbylpPWxbb10scj1zW29dLHNbb109c1tpXSxzW2ldPXIsbFtvXT1sW3JdLGxbcl09aSxjPShjK3IpKm87cmV0dXJuIG4uZnJlZVVpbnQzMihsKSxuLmZyZWVVaW50MzIocyksY30sci51bnJhbms9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHJ8fFtdO2Nhc2UgMTpyZXR1cm4gcj8oclswXT0wLHIpOlswXTtjYXNlIDI6cmV0dXJuIHI/KGU/KHJbMF09MCxyWzFdPTEpOihyWzBdPTEsclsxXT0wKSxyKTplP1swLDFdOlsxLDBdfXZhciBuLGEsaSxvPTE7Zm9yKChyPXJ8fG5ldyBBcnJheSh0KSlbMF09MCxpPTE7aTx0OysraSlyW2ldPWksbz1vKml8MDtmb3IoaT10LTE7aT4wOy0taSllPWUtKG49ZS9vfDApKm98MCxvPW8vaXwwLGE9MHxyW2ldLHJbaV09MHxyW25dLHJbbl09MHxhO3JldHVybiByfX0seyJpbnZlcnQtcGVybXV0YXRpb24iOjQxNywidHlwZWRhcnJheS1wb29sIjo1NDR9XSw0Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLG89e307aWYoInN0cmluZyI9PXR5cGVvZiBlJiYoZT1hKGUpKSxBcnJheS5pc0FycmF5KGUpKXt2YXIgcz17fTtmb3IoaT0wO2k8ZS5sZW5ndGg7aSsrKXNbZVtpXV09ITA7ZT1zfWZvcihuIGluIGUpZVtuXT1hKGVbbl0pO3ZhciBsPXt9O2ZvcihuIGluIGUpe3ZhciBjPWVbbl07aWYoQXJyYXkuaXNBcnJheShjKSlmb3IoaT0wO2k8Yy5sZW5ndGg7aSsrKXt2YXIgdT1jW2ldO2lmKHImJihsW3VdPSEwKSx1IGluIHQpe2lmKG9bbl09dFt1XSxyKWZvcih2YXIgaD1pO2g8Yy5sZW5ndGg7aCsrKWxbY1toXV09ITA7YnJlYWt9fWVsc2UgbiBpbiB0JiYoZVtuXSYmKG9bbl09dFtuXSksciYmKGxbbl09ITApKX1pZihyKWZvcihuIGluIHQpbFtuXXx8KG9bbl09dFtuXSk7cmV0dXJuIG99O3ZhciBuPXt9O2Z1bmN0aW9uIGEodCl7cmV0dXJuIG5bdF0/blt0XTooInN0cmluZyI9PXR5cGVvZiB0JiYodD1uW3RdPXQuc3BsaXQoL1xzKixccyp8XHMrLykpLHQpfX0se31dLDQ2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MHxlLmxlbmd0aCxhPXQubGVuZ3RoLGk9W25ldyBBcnJheShyKSxuZXcgQXJyYXkocildLG89MDtvPHI7KytvKWlbMF1bb109W10saVsxXVtvXT1bXTtmb3IodmFyIG89MDtvPGE7KytvKXt2YXIgcz10W29dO2lbMF1bc1swXV0ucHVzaChzKSxpWzFdW3NbMV1dLnB1c2gocyl9Zm9yKHZhciBsPVtdLG89MDtvPHI7KytvKWlbMF1bb10ubGVuZ3RoK2lbMV1bb10ubGVuZ3RoPT09MCYmbC5wdXNoKFtvXSk7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWlbZV1bdFtlXV07ci5zcGxpY2Uoci5pbmRleE9mKHQpLDEpfWZ1bmN0aW9uIHUodCxyLGEpe2Zvcih2YXIgbyxzLGwsdT0wO3U8MjsrK3UpaWYoaVt1XVtyXS5sZW5ndGg+MCl7bz1pW3VdW3JdWzBdLGw9dTticmVha31zPW9bMV5sXTtmb3IodmFyIGg9MDtoPDI7KytoKWZvcih2YXIgZj1pW2hdW3JdLHA9MDtwPGYubGVuZ3RoOysrcCl7dmFyIGQ9ZltwXSxnPWRbMV5oXSx2PW4oZVt0XSxlW3JdLGVbc10sZVtnXSk7dj4wJiYobz1kLHM9ZyxsPWgpfXJldHVybiBhP3M6KG8mJmMobyxsKSxzKX1mdW5jdGlvbiBoKHQscil7dmFyIGE9aVtyXVt0XVswXSxvPVt0XTtjKGEscik7Zm9yKHZhciBzPWFbMV5yXTs7KXtmb3IoO3MhPT10OylvLnB1c2gocykscz11KG9bby5sZW5ndGgtMl0scywhMSk7aWYoaVswXVt0XS5sZW5ndGgraVsxXVt0XS5sZW5ndGg9PT0wKWJyZWFrO3ZhciBsPW9bby5sZW5ndGgtMV0saD10LGY9b1sxXSxwPXUobCxoLCEwKTtpZihuKGVbbF0sZVtoXSxlW2ZdLGVbcF0pPDApYnJlYWs7by5wdXNoKHQpLHM9dShsLGgpfXJldHVybiBvfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gZVsxXT09PWVbZS5sZW5ndGgtMV19Zm9yKHZhciBvPTA7bzxyOysrbylmb3IodmFyIHA9MDtwPDI7KytwKXtmb3IodmFyIGQ9W107aVtwXVtvXS5sZW5ndGg+MDspe2lbMF1bb10ubGVuZ3RoO3ZhciBnPWgobyxwKTtmKGQsZyk/ZC5wdXNoLmFwcGx5KGQsZyk6KGQubGVuZ3RoPjAmJmwucHVzaChkKSxkPWcpfWQubGVuZ3RoPjAmJmwucHVzaChkKX1yZXR1cm4gbH07dmFyIG49dCgiY29tcGFyZS1hbmdsZSIpfSx7ImNvbXBhcmUtYW5nbGUiOjEyOX1dLDQ2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bih0LGUubGVuZ3RoKSxhPW5ldyBBcnJheShlLmxlbmd0aCksaT1uZXcgQXJyYXkoZS5sZW5ndGgpLG89W10scz0wO3M8ZS5sZW5ndGg7KytzKXt2YXIgbD1yW3NdLmxlbmd0aDtpW3NdPWwsYVtzXT0hMCxsPD0xJiZvLnB1c2gocyl9Zm9yKDtvLmxlbmd0aD4wOyl7dmFyIGM9by5wb3AoKTthW2NdPSExO2Zvcih2YXIgdT1yW2NdLHM9MDtzPHUubGVuZ3RoOysrcyl7dmFyIGg9dVtzXTswPT0tLWlbaF0mJm8ucHVzaChoKX19Zm9yKHZhciBmPW5ldyBBcnJheShlLmxlbmd0aCkscD1bXSxzPTA7czxlLmxlbmd0aDsrK3MpaWYoYVtzXSl7dmFyIGM9cC5sZW5ndGg7ZltzXT1jLHAucHVzaChlW3NdKX1lbHNlIGZbc109LTE7Zm9yKHZhciBkPVtdLHM9MDtzPHQubGVuZ3RoOysrcyl7dmFyIGc9dFtzXTthW2dbMF1dJiZhW2dbMV1dJiZkLnB1c2goW2ZbZ1swXV0sZltnWzFdXV0pfXJldHVybltkLHBdfTt2YXIgbj10KCJlZGdlcy10by1hZGphY2VuY3ktbGlzdCIpfSx7ImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0IjoxNzR9XSw0NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Yyh0LGUpO3Q9clswXTtmb3IodmFyIGg9KGU9clsxXSkubGVuZ3RoLGY9KHQubGVuZ3RoLG4odCxlLmxlbmd0aCkpLHA9MDtwPGg7KytwKWlmKGZbcF0ubGVuZ3RoJTI9PTEpdGhyb3cgbmV3IEVycm9yKCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmU6IGdyYXBoIG11c3QgYmUgbWFuaWZvbGQiKTt2YXIgZD1hKHQsZSk7Zm9yKHZhciBnPShkPWQuZmlsdGVyKGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPVswXSxhPTA7YTxyOysrYSl7dmFyIGk9ZVt0W2FdXSxsPWVbdFsoYSsxKSVyXV0sYz1vKC1pWzBdLGlbMV0pLHU9bygtaVswXSxsWzFdKSxoPW8obFswXSxpWzFdKSxmPW8obFswXSxsWzFdKTtuPXMobixzKHMoYyx1KSxzKGgsZikpKX1yZXR1cm4gbltuLmxlbmd0aC0xXT4wfSkpLmxlbmd0aCx2PW5ldyBBcnJheShnKSxtPW5ldyBBcnJheShnKSxwPTA7cDxnOysrcCl7dltwXT1wO3ZhciB5PW5ldyBBcnJheShnKSx4PWRbcF0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSksYj1pKFt4XSksXz0wO3Q6Zm9yKHZhciB3PTA7dzxnOysrdylpZih5W3ddPTAscCE9PXcpe2Zvcih2YXIgaz1kW3ddLFQ9ay5sZW5ndGgsTT0wO008VDsrK00pe3ZhciBBPWIoZVtrW01dXSk7aWYoMCE9PUEpe0E8MCYmKHlbd109MSxfKz0xKTtjb250aW51ZSB0fX15W3ddPTEsXys9MX1tW3BdPVtfLHAseV19bS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0tdFswXX0pO2Zvcih2YXIgcD0wO3A8ZzsrK3ApZm9yKHZhciB5PW1bcF0sUz15WzFdLEU9eVsyXSx3PTA7dzxnOysrdylFW3ddJiYodlt3XT1TKTtmb3IodmFyIEw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrcillW3JdPVtdO3JldHVybiBlfShnKSxwPTA7cDxnOysrcClMW3BdLnB1c2godltwXSksTFt2W3BdXS5wdXNoKHApO2Zvcih2YXIgQz17fSxQPXUoaCwhMSkscD0wO3A8ZzsrK3ApZm9yKHZhciBrPWRbcF0sVD1rLmxlbmd0aCx3PTA7dzxUOysrdyl7dmFyIE89a1t3XSx6PWtbKHcrMSklVF0sST1NYXRoLm1pbihPLHopKyI6IitNYXRoLm1heChPLHopO2lmKEkgaW4gQyl7dmFyIEQ9Q1tJXTtMW0RdLnB1c2gocCksTFtwXS5wdXNoKEQpLFBbT109UFt6XT0hMH1lbHNlIENbSV09cH1mdW5jdGlvbiBSKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTA7cjxlOysrcilpZighUFt0W3JdXSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IodmFyIEY9W10sQj11KGcsLTEpLHA9MDtwPGc7KytwKXZbcF0hPT1wfHxSKGRbcF0pP0JbcF09LTE6KEYucHVzaChwKSxCW3BdPTApO3ZhciByPVtdO2Zvcig7Ri5sZW5ndGg+MDspe3ZhciBOPUYucG9wKCksaj1MW05dO2woaixmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KTt2YXIgVixVPWoubGVuZ3RoLHE9QltOXTtpZigwPT09cSl7dmFyIGs9ZFtOXTtWPVtrXX1mb3IodmFyIHA9MDtwPFU7KytwKXt2YXIgSD1qW3BdO2lmKCEoQltIXT49MCkmJihCW0hdPTFecSxGLnB1c2goSCksMD09PXEpKXt2YXIgaz1kW0hdO1Ioayl8fChrLnJldmVyc2UoKSxWLnB1c2goaykpfX0wPT09cSYmci5wdXNoKFYpfXJldHVybiByfTt2YXIgbj10KCJlZGdlcy10by1hZGphY2VuY3ktbGlzdCIpLGE9dCgicGxhbmFyLWR1YWwiKSxpPXQoInBvaW50LWluLWJpZy1wb2x5Z29uIiksbz10KCJ0d28tcHJvZHVjdCIpLHM9dCgicm9idXN0LXN1bSIpLGw9dCgidW5pcSIpLGM9dCgiLi9saWIvdHJpbS1sZWF2ZXMiKTtmdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9fSx7Ii4vbGliL3RyaW0tbGVhdmVzIjo0NjksImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0IjoxNzQsInBsYW5hci1kdWFsIjo0NjgsInBvaW50LWluLWJpZy1wb2x5Z29uIjo0NzQsInJvYnVzdC1zdW0iOjUxNCwidHdvLXByb2R1Y3QiOjU0Mix1bmlxOjU0Nn1dLDQ3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9xdWFkIil9LHsiLi9xdWFkIjo0NzN9XSw0NzI6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTEzXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MTEzfV0sNDczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksYT10KCJjbGFtcCIpLGk9dCgicGFyc2UtcmVjdCIpLG89dCgiYXJyYXktYm91bmRzIikscz10KCJwaWNrLWJ5LWFsaWFzIiksbD10KCJkZWZpbmVkIiksYz10KCJmbGF0dGVuLXZlcnRleC1kYXRhIiksdT10KCJpcy1vYmoiKSxoPXQoImR0eXBlIiksZj10KCJtYXRoLWxvZzIiKSxwPTEwNzM3NDE4MjQ7ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj1lWzBdLG49ZVsxXSxpPTEvKGVbMl0tciksbz0xLyhlWzNdLW4pLHM9bmV3IEFycmF5KHQubGVuZ3RoKSxsPTAsYz10Lmxlbmd0aC8yO2w8YztsKyspc1syKmxdPWEoKHRbMipsXS1yKSppLDAsMSksc1syKmwrMV09YSgodFsyKmwrMV0tbikqbywwLDEpO3JldHVybiBzfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPXt9KSx0PWModCwiZmxvYXQ2NCIpLGU9cyhlLHtib3VuZHM6InJhbmdlIGJvdW5kcyBkYXRhQm94IGRhdGFib3giLG1heERlcHRoOiJkZXB0aCBtYXhEZXB0aCBtYXhkZXB0aCBsZXZlbCBtYXhMZXZlbCBtYXhsZXZlbCBsZXZlbHMiLGR0eXBlOiJ0eXBlIGR0eXBlIGZvcm1hdCBvdXQgZHN0IG91dHB1dCBkZXN0aW5hdGlvbiJ9KTt2YXIgcj1sKGUubWF4RGVwdGgsMjU1KSxhPWwoZS5ib3VuZHMsbyh0LDIpKTthWzBdPT09YVsyXSYmYVsyXSsrLGFbMV09PT1hWzNdJiZhWzNdKys7dmFyIGcsdj1kKHQsYSksbT10Lmxlbmd0aD4+PjE7ZS5kdHlwZXx8KGUuZHR5cGU9ImFycmF5IiksInN0cmluZyI9PXR5cGVvZiBlLmR0eXBlP2c9bmV3KGgoZS5kdHlwZSkpKG0pOmUuZHR5cGUmJihnPWUuZHR5cGUsQXJyYXkuaXNBcnJheShnKSYmKGcubGVuZ3RoPW0pKTtmb3IodmFyIHk9MDt5PG07Kyt5KWdbeV09eTt2YXIgeD1bXSxiPVtdLF89W10sdz1bXTshZnVuY3Rpb24gdChlLG4sYSxpLG8scyl7aWYoIWkubGVuZ3RoKXJldHVybiBudWxsO3ZhciBsPXhbb118fCh4W29dPVtdKTt2YXIgYz1fW29dfHwoX1tvXT1bXSk7dmFyIHU9YltvXXx8KGJbb109W10pO3ZhciBoPWwubGVuZ3RoO28rKztpZihvPnJ8fHM+cCl7Zm9yKHZhciBmPTA7ZjxpLmxlbmd0aDtmKyspbC5wdXNoKGlbZl0pLGMucHVzaChzKSx1LnB1c2gobnVsbCxudWxsLG51bGwsbnVsbCk7cmV0dXJuIGh9bC5wdXNoKGlbMF0pO2MucHVzaChzKTtpZihpLmxlbmd0aDw9MSlyZXR1cm4gdS5wdXNoKG51bGwsbnVsbCxudWxsLG51bGwpLGg7dmFyIGQ9LjUqYTt2YXIgZz1lK2QsbT1uK2Q7dmFyIHk9W10sdz1bXSxrPVtdLFQ9W107Zm9yKHZhciBNPTEsQT1pLmxlbmd0aDtNPEE7TSsrKXt2YXIgUz1pW01dLEU9dlsyKlNdLEw9dlsyKlMrMV07RTxnP0w8bT95LnB1c2goUyk6dy5wdXNoKFMpOkw8bT9rLnB1c2goUyk6VC5wdXNoKFMpfXM8PD0yO3UucHVzaCh0KGUsbixkLHksbyxzKSx0KGUsbSxkLHcsbyxzKzEpLHQoZyxuLGQsayxvLHMrMiksdChnLG0sZCxULG8scyszKSk7cmV0dXJuIGh9KDAsMCwxLGcsMCwxKTtmb3IodmFyIGs9MCxUPTA7VDx4Lmxlbmd0aDtUKyspe3ZhciBNPXhbVF07aWYoZy5zZXQpZy5zZXQoTSxrKTtlbHNlIGZvcih2YXIgQT0wLFM9TS5sZW5ndGg7QTxTO0ErKylnW0Era109TVtBXTt2YXIgRT1rK3hbVF0ubGVuZ3RoO3dbVF09W2ssRV0saz1FfXJldHVybiBnLnJhbmdlPWZ1bmN0aW9uKCl7dmFyIGUscj1bXSxvPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKDtvLS07KXJbb109YXJndW1lbnRzW29dO2lmKHUocltyLmxlbmd0aC0xXSkpe3ZhciBjPXIucG9wKCk7ci5sZW5ndGh8fG51bGw9PWMueCYmbnVsbD09Yy5sJiZudWxsPT1jLmxlZnR8fChyPVtjXSxlPXt9KSxlPXMoYyx7bGV2ZWw6ImxldmVsIG1heExldmVsIixkOiJkIGRpYW0gZGlhbWV0ZXIgciByYWRpdXMgcHggcHhTaXplIHBpeGVsIHBpeGVsU2l6ZSBtYXhEIHNpemUgbWluU2l6ZSIsbG9kOiJsb2QgZGV0YWlscyByYW5nZXMgb2Zmc2V0cyJ9KX1lbHNlIGU9e307ci5sZW5ndGh8fChyPWEpO3ZhciBoPWkuYXBwbHkodm9pZCAwLHIpLHA9W01hdGgubWluKGgueCxoLngraC53aWR0aCksTWF0aC5taW4oaC55LGgueStoLmhlaWdodCksTWF0aC5tYXgoaC54LGgueCtoLndpZHRoKSxNYXRoLm1heChoLnksaC55K2guaGVpZ2h0KV0sZz1wWzBdLHY9cFsxXSxtPXBbMl0seT1wWzNdLGs9ZChbZyx2LG0seV0sYSksVD1rWzBdLE09a1sxXSxBPWtbMl0sUz1rWzNdLEU9bChlLmxldmVsLHgubGVuZ3RoKTtpZihudWxsIT1lLmQpe3ZhciBDOyJudW1iZXIiPT10eXBlb2YgZS5kP0M9W2UuZCxlLmRdOmUuZC5sZW5ndGgmJihDPWUuZCksRT1NYXRoLm1pbihNYXRoLm1heChNYXRoLmNlaWwoLWYoTWF0aC5hYnMoQ1swXSkvKGFbMl0tYVswXSkpKSxNYXRoLmNlaWwoLWYoTWF0aC5hYnMoQ1sxXSkvKGFbM10tYVsxXSkpKSksRSl9aWYoRT1NYXRoLm1pbihFLHgubGVuZ3RoKSxlLmxvZClyZXR1cm4gZnVuY3Rpb24odCxlLHIsYSxpKXtmb3IodmFyIG89W10scz0wO3M8aTtzKyspe3ZhciBsPV9bc10sYz13W3NdWzBdLHU9TCh0LGUscyksaD1MKHIsYSxzKSxmPW4uZ2UobCx1KSxwPW4uZ3QobCxoLGYsbC5sZW5ndGgtMSk7b1tzXT1bZitjLHArY119cmV0dXJuIG99KFQsTSxBLFMsRSk7dmFyIFA9W107cmV0dXJuIGZ1bmN0aW9uIGUocixuLGEsaSxvLHMpe2lmKG51bGwhPT1vJiZudWxsIT09cyl7dmFyIGw9cithLGM9bithO2lmKCEoVD5sfHxNPmN8fEE8cnx8UzxufHxpPj1FfHxvPT09cykpe3ZhciB1PXhbaV07dm9pZCAwPT09cyYmKHM9dS5sZW5ndGgpO2Zvcih2YXIgaD1vO2g8cztoKyspe3ZhciBmPXVbaF0scD10WzIqZl0sZD10WzIqZisxXTtwPj1nJiZwPD1tJiZkPj12JiZkPD15JiZQLnB1c2goZil9dmFyIF89YltpXSx3PV9bNCpvKzBdLGs9X1s0Km8rMV0sTD1fWzQqbysyXSxDPV9bNCpvKzNdLE89ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bnVsbCxuPTA7bnVsbD09PXI7KWlmKHI9dFs0KmUrbl0sKytuPnQubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiByfShfLG8rMSksej0uNSphLEk9aSsxO2UocixuLHosSSx3LGt8fEx8fEN8fE8pLGUocixuK3oseixJLGssTHx8Q3x8TyksZShyK3osbix6LEksTCxDfHxPKSxlKHIreixuK3oseixJLEMsTyl9fX0oMCwwLDEsMCwwLDEpLFB9LGc7ZnVuY3Rpb24gTCh0LGUscil7Zm9yKHZhciBuPTEsYT0uNSxpPS41LG89LjUscz0wO3M8cjtzKyspbjw8PTIsbis9dDxhP2U8aT8wOjE6ZTxpPzI6MyxvKj0uNSxhKz10PGE/LW86byxpKz1lPGk/LW86bztyZXR1cm4gbn19fSx7ImFycmF5LWJvdW5kcyI6NjgsImJpbmFyeS1zZWFyY2gtYm91bmRzIjo0NzIsY2xhbXA6MTE3LGRlZmluZWQ6MTY2LGR0eXBlOjE3MSwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjMwLCJpcy1vYmoiOjQyMywibWF0aC1sb2cyIjo0MzQsInBhcnNlLXJlY3QiOjQ2MSwicGljay1ieS1hbGlhcyI6NDY3fV0sNDc0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVtdLGk9W10scz0wO3M8ZTsrK3MpZm9yKHZhciB1PXRbc10saD11Lmxlbmd0aCxmPWgtMSxwPTA7cDxoO2Y9cCsrKXt2YXIgZD11W2ZdLGc9dVtwXTtkWzBdPT09Z1swXT9pLnB1c2goW2QsZ10pOnIucHVzaChbZCxnXSl9aWYoMD09PXIubGVuZ3RoKXJldHVybiAwPT09aS5sZW5ndGg/Yzoodj1sKGkpLGZ1bmN0aW9uKHQpe3JldHVybiB2KHRbMF0sdFsxXSk/MDoxfSk7dmFyIHY7dmFyIG09YShyKSx5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBhPW8ubGUoZSxyWzBdKTtpZihhPDApcmV0dXJuIDE7dmFyIGk9dFthXTtpZighaSl7aWYoIShhPjAmJmVbYV09PT1yWzBdKSlyZXR1cm4gMTtpPXRbYS0xXX1mb3IodmFyIHM9MTtpOyl7dmFyIGw9aS5rZXksYz1uKHIsbFswXSxsWzFdKTtpZihsWzBdWzBdPGxbMV1bMF0paWYoYzwwKWk9aS5sZWZ0O2Vsc2V7aWYoIShjPjApKXJldHVybiAwO3M9LTEsaT1pLnJpZ2h0fWVsc2UgaWYoYz4wKWk9aS5sZWZ0O2Vsc2V7aWYoIShjPDApKXJldHVybiAwO3M9MSxpPWkucmlnaHR9fXJldHVybiBzfX0obS5zbGFicyxtLmNvb3JkaW5hdGVzKTtyZXR1cm4gMD09PWkubGVuZ3RoP3k6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoclswXSxyWzFdKT8wOmUocil9fShsKGkpLHkpfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXSxhPXQoInNsYWItZGVjb21wb3NpdGlvbiIpLGk9dCgiaW50ZXJ2YWwtdHJlZS0xZCIpLG89dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBzKCl7cmV0dXJuITB9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9e30scj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdLGE9blswXVswXSxvPW5bMF1bMV0sbD1uWzFdWzFdLGM9W01hdGgubWluKG8sbCksTWF0aC5tYXgobyxsKV07YSBpbiBlP2VbYV0ucHVzaChjKTplW2FdPVtjXX12YXIgdT17fSxoPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxoLmxlbmd0aDsrK3Ipe3ZhciBmPWVbaFtyXV07dVtoW3JdXT1pKGYpfXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj10W2VdO3JldHVybiEhbiYmISFuLnF1ZXJ5UG9pbnQocixzKX19KHUpfWZ1bmN0aW9uIGModCl7cmV0dXJuIDF9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo5MywiaW50ZXJ2YWwtdHJlZS0xZCI6NDE2LCJyb2J1c3Qtb3JpZW50YXRpb24iOjUwOSwic2xhYi1kZWNvbXBvc2l0aW9uIjo1MjV9XSw0NzU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixhPXQoIi4vbGliL2J1aWxkLWxvZyIpLGk9dCgiLi9saWIvZXBzaWxvbiIpLG89dCgiLi9saWIvaW50ZXJzZWN0ZXIiKSxzPXQoIi4vbGliL3NlZ21lbnQtY2hhaW5lciIpLGw9dCgiLi9saWIvc2VnbWVudC1zZWxlY3RvciIpLGM9dCgiLi9saWIvZ2VvanNvbiIpLHU9ITEsaD1pKCk7ZnVuY3Rpb24gZih0LGUscil7dmFyIGE9bi5zZWdtZW50cyh0KSxpPW4uc2VnbWVudHMoZSksbz1yKG4uY29tYmluZShhLGkpKTtyZXR1cm4gbi5wb2x5Z29uKG8pfW49e2J1aWxkTG9nOmZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD91PWEoKTohMT09PXQmJih1PSExKSwhMSE9PXUmJnUubGlzdH0sZXBzaWxvbjpmdW5jdGlvbih0KXtyZXR1cm4gaC5lcHNpbG9uKHQpfSxzZWdtZW50czpmdW5jdGlvbih0KXt2YXIgZT1vKCEwLGgsdSk7cmV0dXJuIHQucmVnaW9ucy5mb3JFYWNoKGUuYWRkUmVnaW9uKSx7c2VnbWVudHM6ZS5jYWxjdWxhdGUodC5pbnZlcnRlZCksaW52ZXJ0ZWQ6dC5pbnZlcnRlZH19LGNvbWJpbmU6ZnVuY3Rpb24odCxlKXtyZXR1cm57Y29tYmluZWQ6byghMSxoLHUpLmNhbGN1bGF0ZSh0LnNlZ21lbnRzLHQuaW52ZXJ0ZWQsZS5zZWdtZW50cyxlLmludmVydGVkKSxpbnZlcnRlZDE6dC5pbnZlcnRlZCxpbnZlcnRlZDI6ZS5pbnZlcnRlZH19LHNlbGVjdFVuaW9uOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnVuaW9uKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDF8fHQuaW52ZXJ0ZWQyfX0sc2VsZWN0SW50ZXJzZWN0OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmludGVyc2VjdCh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiZ0LmludmVydGVkMn19LHNlbGVjdERpZmZlcmVuY2U6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuZGlmZmVyZW5jZSh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiYhdC5pbnZlcnRlZDJ9fSxzZWxlY3REaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmRpZmZlcmVuY2VSZXYodC5jb21iaW5lZCx1KSxpbnZlcnRlZDohdC5pbnZlcnRlZDEmJnQuaW52ZXJ0ZWQyfX0sc2VsZWN0WG9yOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnhvcih0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxIT09dC5pbnZlcnRlZDJ9fSxwb2x5Z29uOmZ1bmN0aW9uKHQpe3JldHVybntyZWdpb25zOnModC5zZWdtZW50cyxoLHUpLGludmVydGVkOnQuaW52ZXJ0ZWR9fSxwb2x5Z29uRnJvbUdlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMudG9Qb2x5Z29uKG4sdCl9LHBvbHlnb25Ub0dlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMuZnJvbVBvbHlnb24obixoLHQpfSx1bmlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBmKHQsZSxuLnNlbGVjdFVuaW9uKX0saW50ZXJzZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0SW50ZXJzZWN0KX0sZGlmZmVyZW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiBmKHQsZSxuLnNlbGVjdERpZmZlcmVuY2UpfSxkaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodCxlLG4uc2VsZWN0RGlmZmVyZW5jZVJldil9LHhvcjpmdW5jdGlvbih0LGUpe3JldHVybiBmKHQsZSxuLnNlbGVjdFhvcil9fSwib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5Qb2x5Qm9vbD1uKSxlLmV4cG9ydHM9bn0seyIuL2xpYi9idWlsZC1sb2ciOjQ3NiwiLi9saWIvZXBzaWxvbiI6NDc3LCIuL2xpYi9nZW9qc29uIjo0NzgsIi4vbGliL2ludGVyc2VjdGVyIjo0NzksIi4vbGliL3NlZ21lbnQtY2hhaW5lciI6NDgxLCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yIjo0ODJ9XSw0NzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlPTAscj0hMTtmdW5jdGlvbiBuKGUscil7cmV0dXJuIHQubGlzdC5wdXNoKHt0eXBlOmUsZGF0YTpyP0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocikpOnZvaWQgMH0pLHR9cmV0dXJuIHQ9e2xpc3Q6W10sc2VnbWVudElkOmZ1bmN0aW9uKCl7cmV0dXJuIGUrK30sY2hlY2tJbnRlcnNlY3Rpb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hlY2siLHtzZWcxOnQsc2VnMjplfSl9LHNlZ21lbnRDaG9wOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImRpdl9zZWciLHtzZWc6dCxwdDplfSksbigiY2hvcCIse3NlZzp0LHB0OmV9KX0sc3RhdHVzUmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJwb3Bfc2VnIix7c2VnOnR9KX0sc2VnbWVudFVwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbigic2VnX3VwZGF0ZSIse3NlZzp0fSl9LHNlZ21lbnROZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigibmV3X3NlZyIse3NlZzp0LHByaW1hcnk6ZX0pfSxzZWdtZW50UmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJyZW1fc2VnIix7c2VnOnR9KX0sdGVtcFN0YXR1czpmdW5jdGlvbih0LGUscil7cmV0dXJuIG4oInRlbXBfc3RhdHVzIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHJld2luZDpmdW5jdGlvbih0KXtyZXR1cm4gbigicmV3aW5kIix7c2VnOnR9KX0sc3RhdHVzOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigic3RhdHVzIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHZlcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1yP3Q6KHI9ZSxuKCJ2ZXJ0Iix7eDplfSkpfSxsb2c6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0JiYodD1KU09OLnN0cmluZ2lmeSh0LCExLCIgICIpKSxuKCJsb2ciLHt0eHQ6dH0pfSxyZXNldDpmdW5jdGlvbigpe3JldHVybiBuKCJyZXNldCIpfSxzZWxlY3RlZDpmdW5jdGlvbih0KXtyZXR1cm4gbigic2VsZWN0ZWQiLHtzZWdzOnR9KX0sY2hhaW5TdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gbigiY2hhaW5fc3RhcnQiLHtzZWc6dH0pfSxjaGFpblJlbW92ZUhlYWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fcmVtX2hlYWQiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5SZW1vdmVUYWlsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX3JlbV90YWlsIix7aW5kZXg6dCxwdDplfSl9LGNoYWluTmV3OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX25ldyIse3B0MTp0LHB0MjplfSl9LGNoYWluTWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIG4oImNoYWluX21hdGNoIix7aW5kZXg6dH0pfSxjaGFpbkNsb3NlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9jbG9zZSIse2luZGV4OnR9KX0sY2hhaW5BZGRIZWFkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX2FkZF9oZWFkIix7aW5kZXg6dCxwdDplfSl9LGNoYWluQWRkVGFpbDpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9hZGRfdGFpbCIse2luZGV4OnQscHQ6ZX0pfSxjaGFpbkNvbm5lY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fY29uIix7aW5kZXgxOnQsaW5kZXgyOmV9KX0sY2hhaW5SZXZlcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9yZXYiLHtpbmRleDp0fSl9LGNoYWluSm9pbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9qb2luIix7aW5kZXgxOnQsaW5kZXgyOmV9KX0sZG9uZTpmdW5jdGlvbigpe3JldHVybiBuKCJkb25lIil9fX19LHt9XSw0Nzc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Im51bWJlciIhPXR5cGVvZiB0JiYodD0xZS0xMCk7dmFyIGU9e2Vwc2lsb246ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiYodD1lKSx0fSxwb2ludEFib3ZlT3JPbkxpbmU6ZnVuY3Rpb24oZSxyLG4pe3ZhciBhPXJbMF0saT1yWzFdLG89blswXSxzPW5bMV0sbD1lWzBdO3JldHVybihvLWEpKihlWzFdLWkpLShzLWkpKihsLWEpPj0tdH0scG9pbnRCZXR3ZWVuOmZ1bmN0aW9uKGUscixuKXt2YXIgYT1lWzFdLXJbMV0saT1uWzBdLXJbMF0sbz1lWzBdLXJbMF0scz1uWzFdLXJbMV0sbD1vKmkrYSpzO3JldHVybiEobDx0fHxsLShpKmkrcypzKT4tdCl9LHBvaW50c1NhbWVYOmZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGguYWJzKGVbMF0tclswXSk8dH0scG9pbnRzU2FtZVk6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoZVsxXS1yWzFdKTx0fSxwb2ludHNTYW1lOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUucG9pbnRzU2FtZVgodCxyKSYmZS5wb2ludHNTYW1lWSh0LHIpfSxwb2ludHNDb21wYXJlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUucG9pbnRzU2FtZVgodCxyKT9lLnBvaW50c1NhbWVZKHQscik/MDp0WzFdPHJbMV0/LTE6MTp0WzBdPHJbMF0/LTE6MX0scG9pbnRzQ29sbGluZWFyOmZ1bmN0aW9uKGUscixuKXt2YXIgYT1lWzBdLXJbMF0saT1lWzFdLXJbMV0sbz1yWzBdLW5bMF0scz1yWzFdLW5bMV07cmV0dXJuIE1hdGguYWJzKGEqcy1vKmkpPHR9LGxpbmVzSW50ZXJzZWN0OmZ1bmN0aW9uKGUscixuLGEpe3ZhciBpPXJbMF0tZVswXSxvPXJbMV0tZVsxXSxzPWFbMF0tblswXSxsPWFbMV0tblsxXSxjPWkqbC1vKnM7aWYoTWF0aC5hYnMoYyk8dClyZXR1cm4hMTt2YXIgdT1lWzBdLW5bMF0saD1lWzFdLW5bMV0sZj0ocypoLWwqdSkvYyxwPShpKmgtbyp1KS9jLGQ9e2Fsb25nQTowLGFsb25nQjowLHB0OltlWzBdK2YqaSxlWzFdK2Yqb119O3JldHVybiBkLmFsb25nQT1mPD0tdD8tMjpmPHQ/LTE6Zi0xPD0tdD8wOmYtMTx0PzE6MixkLmFsb25nQj1wPD0tdD8tMjpwPHQ/LTE6cC0xPD0tdD8wOnAtMTx0PzE6MixkfSxwb2ludEluc2lkZVJlZ2lvbjpmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lWzBdLGE9ZVsxXSxpPXJbci5sZW5ndGgtMV1bMF0sbz1yW3IubGVuZ3RoLTFdWzFdLHM9ITEsbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1yW2xdWzBdLHU9cltsXVsxXTt1LWE+dCE9by1hPnQmJihpLWMpKihhLXUpLyhvLXUpK2Mtbj50JiYocz0hcyksaT1jLG89dX1yZXR1cm4gc319O3JldHVybiBlfX0se31dLDQ3ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt0b1BvbHlnb246ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe2lmKGUubGVuZ3RoPD0wKXJldHVybiB0LnNlZ21lbnRzKHtpbnZlcnRlZDohMSxyZWdpb25zOltdfSk7ZnVuY3Rpb24gcihlKXt2YXIgcj1lLnNsaWNlKDAsZS5sZW5ndGgtMSk7cmV0dXJuIHQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W3JdfSl9Zm9yKHZhciBuPXIoZVswXSksYT0xO2E8ZS5sZW5ndGg7YSsrKW49dC5zZWxlY3REaWZmZXJlbmNlKHQuY29tYmluZShuLHIoZVthXSkpKTtyZXR1cm4gbn1pZigiUG9seWdvbiI9PT1lLnR5cGUpcmV0dXJuIHQucG9seWdvbihyKGUuY29vcmRpbmF0ZXMpKTtpZigiTXVsdGlQb2x5Z29uIj09PWUudHlwZSl7Zm9yKHZhciBuPXQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W119KSxhPTA7YTxlLmNvb3JkaW5hdGVzLmxlbmd0aDthKyspbj10LnNlbGVjdFVuaW9uKHQuY29tYmluZShuLHIoZS5jb29yZGluYXRlc1thXSkpKTtyZXR1cm4gdC5wb2x5Z29uKG4pfXRocm93IG5ldyBFcnJvcigiUG9seUJvb2w6IENhbm5vdCBjb252ZXJ0IEdlb0pTT04gb2JqZWN0IHRvIFBvbHlCb29sIHBvbHlnb24iKX0sZnJvbVBvbHlnb246ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxyKXtyZXR1cm4gZS5wb2ludEluc2lkZVJlZ2lvbihbLjUqKHRbMF1bMF0rdFsxXVswXSksLjUqKHRbMF1bMV0rdFsxXVsxXSldLHIpfWZ1bmN0aW9uIGEodCl7cmV0dXJue3JlZ2lvbjp0LGNoaWxkcmVuOltdfX1yPXQucG9seWdvbih0LnNlZ21lbnRzKHIpKTt2YXIgaT1hKG51bGwpO2Z1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyl7aWYobihlLChzPXQuY2hpbGRyZW5bcl0pLnJlZ2lvbikpcmV0dXJuIHZvaWQgbyhzLGUpfXZhciBpPWEoZSk7Zm9yKHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyl7dmFyIHM7bigocz10LmNoaWxkcmVuW3JdKS5yZWdpb24sZSkmJihpLmNoaWxkcmVuLnB1c2gocyksdC5jaGlsZHJlbi5zcGxpY2UociwxKSxyLS0pfXQuY2hpbGRyZW4ucHVzaChpKX1mb3IodmFyIHM9MDtzPHIucmVnaW9ucy5sZW5ndGg7cysrKXt2YXIgbD1yLnJlZ2lvbnNbc107bC5sZW5ndGg8M3x8byhpLGwpfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MCxuPXRbdC5sZW5ndGgtMV1bMF0sYT10W3QubGVuZ3RoLTFdWzFdLGk9W10sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dWzBdLGw9dFtvXVsxXTtpLnB1c2goW3MsbF0pLHIrPWwqbi1zKmEsbj1zLGE9bH1yZXR1cm4gcjwwIT09ZSYmaS5yZXZlcnNlKCksaS5wdXNoKFtpWzBdWzBdLGlbMF1bMV1dKSxpfXZhciB1PVtdO2Z1bmN0aW9uIGgodCl7dmFyIGU9W2ModC5yZWdpb24sITEpXTt1LnB1c2goZSk7Zm9yKHZhciByPTA7cjx0LmNoaWxkcmVuLmxlbmd0aDtyKyspZS5wdXNoKGYodC5jaGlsZHJlbltyXSkpfWZ1bmN0aW9uIGYodCl7Zm9yKHZhciBlPTA7ZTx0LmNoaWxkcmVuLmxlbmd0aDtlKyspaCh0LmNoaWxkcmVuW2VdKTtyZXR1cm4gYyh0LnJlZ2lvbiwhMCl9Zm9yKHM9MDtzPGkuY2hpbGRyZW4ubGVuZ3RoO3MrKyloKGkuY2hpbGRyZW5bc10pO3JldHVybiB1Lmxlbmd0aDw9MD97dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W119OjE9PXUubGVuZ3RoP3t0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp1WzBdfTp7dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp1fX19O2UuZXhwb3J0cz1ufSx7fV0sNDc5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9saW5rZWQtbGlzdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYSh0LGUsbil7cmV0dXJue2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDp0LGVuZDplLG15RmlsbDp7YWJvdmU6bi5teUZpbGwuYWJvdmUsYmVsb3c6bi5teUZpbGwuYmVsb3d9LG90aGVyRmlsbDpudWxsfX12YXIgaT1uLmNyZWF0ZSgpO2Z1bmN0aW9uIG8odCxyKXtpLmluc2VydEJlZm9yZSh0LGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LHIsbixhLGksbyl7dmFyIHM9ZS5wb2ludHNDb21wYXJlKHIsaSk7cmV0dXJuIDAhPT1zP3M6ZS5wb2ludHNTYW1lKG4sbyk/MDp0IT09YT90PzE6LTE6ZS5wb2ludEFib3ZlT3JPbkxpbmUobixhP2k6byxhP286aSk/MTotMX0odC5pc1N0YXJ0LHQucHQscixuLmlzU3RhcnQsbi5wdCxuLm90aGVyLnB0KTwwfSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5ub2RlKHtpc1N0YXJ0OiEwLHB0OnQuc3RhcnQsc2VnOnQscHJpbWFyeTplLG90aGVyOm51bGwsc3RhdHVzOm51bGx9KTtyZXR1cm4gbyhyLHQuZW5kKSxyfSh0LGUpO3JldHVybiBmdW5jdGlvbih0LGUscil7dmFyIGE9bi5ub2RlKHtpc1N0YXJ0OiExLHB0OmUuZW5kLHNlZzplLHByaW1hcnk6cixvdGhlcjp0LHN0YXR1czpudWxsfSk7dC5vdGhlcj1hLG8oYSx0LnB0KX0ocix0LGUpLHJ9ZnVuY3Rpb24gbCh0LGUpe3ZhciBuPWEoZSx0LnNlZy5lbmQsdC5zZWcpO3JldHVybiBmdW5jdGlvbih0LGUpe3ImJnIuc2VnbWVudENob3AodC5zZWcsZSksdC5vdGhlci5yZW1vdmUoKSx0LnNlZy5lbmQ9ZSx0Lm90aGVyLnB0PWUsbyh0Lm90aGVyLHQucHQpfSh0LGUpLHMobix0LnByaW1hcnkpfWZ1bmN0aW9uIGMoYSxvKXt2YXIgcz1uLmNyZWF0ZSgpO2Z1bmN0aW9uIGModCl7cmV0dXJuIHMuZmluZFRyYW5zaXRpb24oZnVuY3Rpb24ocil7dmFyIG4sYSxpLG8scyxsO3JldHVybiBuPXQsYT1yLmV2LGk9bi5zZWcuc3RhcnQsbz1uLnNlZy5lbmQscz1hLnNlZy5zdGFydCxsPWEuc2VnLmVuZCwoZS5wb2ludHNDb2xsaW5lYXIoaSxzLGwpP2UucG9pbnRzQ29sbGluZWFyKG8scyxsKT8xOmUucG9pbnRBYm92ZU9yT25MaW5lKG8scyxsKT8xOi0xOmUucG9pbnRBYm92ZU9yT25MaW5lKGkscyxsKT8xOi0xKT4wfSl9ZnVuY3Rpb24gdSh0LG4pe3ZhciBhPXQuc2VnLGk9bi5zZWcsbz1hLnN0YXJ0LHM9YS5lbmQsYz1pLnN0YXJ0LHU9aS5lbmQ7ciYmci5jaGVja0ludGVyc2VjdGlvbihhLGkpO3ZhciBoPWUubGluZXNJbnRlcnNlY3QobyxzLGMsdSk7aWYoITE9PT1oKXtpZighZS5wb2ludHNDb2xsaW5lYXIobyxzLGMpKXJldHVybiExO2lmKGUucG9pbnRzU2FtZShvLHUpfHxlLnBvaW50c1NhbWUocyxjKSlyZXR1cm4hMTt2YXIgZj1lLnBvaW50c1NhbWUobyxjKSxwPWUucG9pbnRzU2FtZShzLHUpO2lmKGYmJnApcmV0dXJuIG47dmFyIGQ9IWYmJmUucG9pbnRCZXR3ZWVuKG8sYyx1KSxnPSFwJiZlLnBvaW50QmV0d2VlbihzLGMsdSk7aWYoZilyZXR1cm4gZz9sKG4scyk6bCh0LHUpLG47ZCYmKHB8fChnP2wobixzKTpsKHQsdSkpLGwobixvKSl9ZWxzZSAwPT09aC5hbG9uZ0EmJigtMT09PWguYWxvbmdCP2wodCxjKTowPT09aC5hbG9uZ0I/bCh0LGgucHQpOjE9PT1oLmFsb25nQiYmbCh0LHUpKSwwPT09aC5hbG9uZ0ImJigtMT09PWguYWxvbmdBP2wobixvKTowPT09aC5hbG9uZ0E/bChuLGgucHQpOjE9PT1oLmFsb25nQSYmbChuLHMpKTtyZXR1cm4hMX1mb3IodmFyIGg9W107IWkuaXNFbXB0eSgpOyl7dmFyIGY9aS5nZXRIZWFkKCk7aWYociYmci52ZXJ0KGYucHRbMF0pLGYuaXNTdGFydCl7ciYmci5zZWdtZW50TmV3KGYuc2VnLGYucHJpbWFyeSk7dmFyIHA9YyhmKSxkPXAuYmVmb3JlP3AuYmVmb3JlLmV2Om51bGwsZz1wLmFmdGVyP3AuYWZ0ZXIuZXY6bnVsbDtmdW5jdGlvbiB2KCl7aWYoZCl7dmFyIHQ9dShmLGQpO2lmKHQpcmV0dXJuIHR9cmV0dXJuISFnJiZ1KGYsZyl9ciYmci50ZW1wU3RhdHVzKGYuc2VnLCEhZCYmZC5zZWcsISFnJiZnLnNlZyk7dmFyIG0seSx4PXYoKTtpZih4KXQ/KHk9bnVsbD09PWYuc2VnLm15RmlsbC5iZWxvd3x8Zi5zZWcubXlGaWxsLmFib3ZlIT09Zi5zZWcubXlGaWxsLmJlbG93KSYmKHguc2VnLm15RmlsbC5hYm92ZT0heC5zZWcubXlGaWxsLmFib3ZlKTp4LnNlZy5vdGhlckZpbGw9Zi5zZWcubXlGaWxsLHImJnIuc2VnbWVudFVwZGF0ZSh4LnNlZyksZi5vdGhlci5yZW1vdmUoKSxmLnJlbW92ZSgpO2lmKGkuZ2V0SGVhZCgpIT09Zil7ciYmci5yZXdpbmQoZi5zZWcpO2NvbnRpbnVlfXQ/KHk9bnVsbD09PWYuc2VnLm15RmlsbC5iZWxvd3x8Zi5zZWcubXlGaWxsLmFib3ZlIT09Zi5zZWcubXlGaWxsLmJlbG93LGYuc2VnLm15RmlsbC5iZWxvdz1nP2cuc2VnLm15RmlsbC5hYm92ZTphLGYuc2VnLm15RmlsbC5hYm92ZT15PyFmLnNlZy5teUZpbGwuYmVsb3c6Zi5zZWcubXlGaWxsLmJlbG93KTpudWxsPT09Zi5zZWcub3RoZXJGaWxsJiYobT1nP2YucHJpbWFyeT09PWcucHJpbWFyeT9nLnNlZy5vdGhlckZpbGwuYWJvdmU6Zy5zZWcubXlGaWxsLmFib3ZlOmYucHJpbWFyeT9vOmEsZi5zZWcub3RoZXJGaWxsPXthYm92ZTptLGJlbG93Om19KSxyJiZyLnN0YXR1cyhmLnNlZywhIWQmJmQuc2VnLCEhZyYmZy5zZWcpLGYub3RoZXIuc3RhdHVzPXAuaW5zZXJ0KG4ubm9kZSh7ZXY6Zn0pKX1lbHNle3ZhciBiPWYuc3RhdHVzO2lmKG51bGw9PT1iKXRocm93IG5ldyBFcnJvcigiUG9seUJvb2w6IFplcm8tbGVuZ3RoIHNlZ21lbnQgZGV0ZWN0ZWQ7IHlvdXIgZXBzaWxvbiBpcyBwcm9iYWJseSB0b28gc21hbGwgb3IgdG9vIGxhcmdlIik7aWYocy5leGlzdHMoYi5wcmV2KSYmcy5leGlzdHMoYi5uZXh0KSYmdShiLnByZXYuZXYsYi5uZXh0LmV2KSxyJiZyLnN0YXR1c1JlbW92ZShiLmV2LnNlZyksYi5yZW1vdmUoKSwhZi5wcmltYXJ5KXt2YXIgXz1mLnNlZy5teUZpbGw7Zi5zZWcubXlGaWxsPWYuc2VnLm90aGVyRmlsbCxmLnNlZy5vdGhlckZpbGw9X31oLnB1c2goZi5zZWcpfWkuZ2V0SGVhZCgpLnJlbW92ZSgpfXJldHVybiByJiZyLmRvbmUoKSxofXJldHVybiB0P3thZGRSZWdpb246ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGEsaSxvPXRbdC5sZW5ndGgtMV0sbD0wO2w8dC5sZW5ndGg7bCsrKXtuPW8sbz10W2xdO3ZhciBjPWUucG9pbnRzQ29tcGFyZShuLG8pOzAhPT1jJiZzKChhPWM8MD9uOm8saT1jPDA/bzpuLHtpZDpyP3Iuc2VnbWVudElkKCk6LTEsc3RhcnQ6YSxlbmQ6aSxteUZpbGw6e2Fib3ZlOm51bGwsYmVsb3c6bnVsbH0sb3RoZXJGaWxsOm51bGx9KSwhMCl9fSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwhMSl9fTp7Y2FsY3VsYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7cyhhKHQuc3RhcnQsdC5lbmQsdCksITApfSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3MoYSh0LnN0YXJ0LHQuZW5kLHQpLCExKX0pLGMoZSxuKX19fX0seyIuL2xpbmtlZC1saXN0Ijo0ODB9XSw0ODA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PXtyb290Ontyb290OiEwLG5leHQ6bnVsbH0sZXhpc3RzOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmZSE9PXQucm9vdH0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09dC5yb290Lm5leHR9LGdldEhlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5yb290Lm5leHR9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj10LnJvb3QsYT10LnJvb3QubmV4dDtudWxsIT09YTspe2lmKHIoYSkpcmV0dXJuIGUucHJldj1hLnByZXYsZS5uZXh0PWEsYS5wcmV2Lm5leHQ9ZSx2b2lkKGEucHJldj1lKTtuPWEsYT1hLm5leHR9bi5uZXh0PWUsZS5wcmV2PW4sZS5uZXh0PW51bGx9LGZpbmRUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10LnJvb3Qsbj10LnJvb3QubmV4dDtudWxsIT09biYmIWUobik7KXI9bixuPW4ubmV4dDtyZXR1cm57YmVmb3JlOnI9PT10LnJvb3Q/bnVsbDpyLGFmdGVyOm4saW5zZXJ0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXY9cix0Lm5leHQ9bixyLm5leHQ9dCxudWxsIT09biYmKG4ucHJldj10KSx0fX19fTtyZXR1cm4gdH0sbm9kZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2PW51bGwsdC5uZXh0PW51bGwsdC5yZW1vdmU9ZnVuY3Rpb24oKXt0LnByZXYubmV4dD10Lm5leHQsdC5uZXh0JiYodC5uZXh0LnByZXY9dC5wcmV2KSx0LnByZXY9bnVsbCx0Lm5leHQ9bnVsbH0sdH19fSx7fV0sNDgxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bXSxhPVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9dC5zdGFydCxvPXQuZW5kO2lmKGUucG9pbnRzU2FtZShpLG8pKWNvbnNvbGUud2FybigiUG9seUJvb2w6IFdhcm5pbmc6IFplcm8tbGVuZ3RoIHNlZ21lbnQgZGV0ZWN0ZWQ7IHlvdXIgZXBzaWxvbiBpcyBwcm9iYWJseSB0b28gc21hbGwgb3IgdG9vIGxhcmdlIik7ZWxzZXtyJiZyLmNoYWluU3RhcnQodCk7Zm9yKHZhciBzPXtpbmRleDowLG1hdGNoZXNfaGVhZDohMSxtYXRjaGVzX3B0MTohMX0sbD17aW5kZXg6MCxtYXRjaGVzX2hlYWQ6ITEsbWF0Y2hlc19wdDE6ITF9LGM9cyx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPSh2PW5bdV0pWzBdLGY9KHZbMV0sdlt2Lmxlbmd0aC0xXSk7aWYodlt2Lmxlbmd0aC0yXSxlLnBvaW50c1NhbWUoaCxpKSl7aWYoVCh1LCEwLCEwKSlicmVha31lbHNlIGlmKGUucG9pbnRzU2FtZShoLG8pKXtpZihUKHUsITAsITEpKWJyZWFrfWVsc2UgaWYoZS5wb2ludHNTYW1lKGYsaSkpe2lmKFQodSwhMSwhMCkpYnJlYWt9ZWxzZSBpZihlLnBvaW50c1NhbWUoZixvKSYmVCh1LCExLCExKSlicmVha31pZihjPT09cylyZXR1cm4gbi5wdXNoKFtpLG9dKSx2b2lkKHImJnIuY2hhaW5OZXcoaSxvKSk7aWYoYz09PWwpe3ImJnIuY2hhaW5NYXRjaChzLmluZGV4KTt2YXIgcD1zLmluZGV4LGQ9cy5tYXRjaGVzX3B0MT9vOmksZz1zLm1hdGNoZXNfaGVhZCx2PW5bcF0sbT1nP3ZbMF06dlt2Lmxlbmd0aC0xXSx5PWc/dlsxXTp2W3YubGVuZ3RoLTJdLHg9Zz92W3YubGVuZ3RoLTFdOnZbMF0sYj1nP3Zbdi5sZW5ndGgtMl06dlsxXTtyZXR1cm4gZS5wb2ludHNDb2xsaW5lYXIoeSxtLGQpJiYoZz8ociYmci5jaGFpblJlbW92ZUhlYWQocy5pbmRleCxkKSx2LnNoaWZ0KCkpOihyJiZyLmNoYWluUmVtb3ZlVGFpbChzLmluZGV4LGQpLHYucG9wKCkpLG09eSksZS5wb2ludHNTYW1lKHgsZCk/KG4uc3BsaWNlKHAsMSksZS5wb2ludHNDb2xsaW5lYXIoYix4LG0pJiYoZz8ociYmci5jaGFpblJlbW92ZVRhaWwocy5pbmRleCxtKSx2LnBvcCgpKToociYmci5jaGFpblJlbW92ZUhlYWQocy5pbmRleCxtKSx2LnNoaWZ0KCkpKSxyJiZyLmNoYWluQ2xvc2Uocy5pbmRleCksdm9pZCBhLnB1c2godikpOnZvaWQoZz8ociYmci5jaGFpbkFkZEhlYWQocy5pbmRleCxkKSx2LnVuc2hpZnQoZCkpOihyJiZyLmNoYWluQWRkVGFpbChzLmluZGV4LGQpLHYucHVzaChkKSkpfXZhciBfPXMuaW5kZXgsdz1sLmluZGV4O3ImJnIuY2hhaW5Db25uZWN0KF8sdyk7dmFyIGs9bltfXS5sZW5ndGg8blt3XS5sZW5ndGg7cy5tYXRjaGVzX2hlYWQ/bC5tYXRjaGVzX2hlYWQ/az8oTShfKSxBKF8sdykpOihNKHcpLEEodyxfKSk6QSh3LF8pOmwubWF0Y2hlc19oZWFkP0EoXyx3KTprPyhNKF8pLEEodyxfKSk6KE0odyksQShfLHcpKX1mdW5jdGlvbiBUKHQsZSxyKXtyZXR1cm4gYy5pbmRleD10LGMubWF0Y2hlc19oZWFkPWUsYy5tYXRjaGVzX3B0MT1yLGM9PT1zPyhjPWwsITEpOihjPW51bGwsITApfWZ1bmN0aW9uIE0odCl7ciYmci5jaGFpblJldmVyc2UodCksblt0XS5yZXZlcnNlKCl9ZnVuY3Rpb24gQSh0LGEpe3ZhciBpPW5bdF0sbz1uW2FdLHM9aVtpLmxlbmd0aC0xXSxsPWlbaS5sZW5ndGgtMl0sYz1vWzBdLHU9b1sxXTtlLnBvaW50c0NvbGxpbmVhcihsLHMsYykmJihyJiZyLmNoYWluUmVtb3ZlVGFpbCh0LHMpLGkucG9wKCkscz1sKSxlLnBvaW50c0NvbGxpbmVhcihzLGMsdSkmJihyJiZyLmNoYWluUmVtb3ZlSGVhZChhLGMpLG8uc2hpZnQoKSksciYmci5jaGFpbkpvaW4odCxhKSxuW3RdPWkuY29uY2F0KG8pLG4uc3BsaWNlKGEsMSl9fSksYX19LHt9XSw0ODI6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPSh0Lm15RmlsbC5hYm92ZT84OjApKyh0Lm15RmlsbC5iZWxvdz80OjApKyh0Lm90aGVyRmlsbCYmdC5vdGhlckZpbGwuYWJvdmU/MjowKSsodC5vdGhlckZpbGwmJnQub3RoZXJGaWxsLmJlbG93PzE6MCk7MCE9PWVbYV0mJm4ucHVzaCh7aWQ6cj9yLnNlZ21lbnRJZCgpOi0xLHN0YXJ0OnQuc3RhcnQsZW5kOnQuZW5kLG15RmlsbDp7YWJvdmU6MT09PWVbYV0sYmVsb3c6Mj09PWVbYV19LG90aGVyRmlsbDpudWxsfSl9KSxyJiZyLnNlbGVjdGVkKG4pLG59dmFyIGE9e3VuaW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwyLDEsMCwyLDIsMCwwLDEsMCwxLDAsMCwwLDAsMF0sZSl9LGludGVyc2VjdDpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMCwwLDAsMCwyLDAsMiwwLDAsMSwxLDAsMiwxLDBdLGUpfSxkaWZmZXJlbmNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwwLDAsMCwyLDAsMiwwLDEsMSwwLDAsMCwxLDIsMF0sZSl9LGRpZmZlcmVuY2VSZXY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDIsMSwwLDAsMCwxLDEsMCwyLDAsMiwwLDAsMCwwXSxlKX0seG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwyLDEsMCwyLDAsMCwxLDEsMCwwLDIsMCwxLDIsMF0sZSl9fTtlLmV4cG9ydHM9YX0se31dLDQ4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1uZXcgRmxvYXQ2NEFycmF5KDQpLGE9bmV3IEZsb2F0NjRBcnJheSg0KSxpPW5ldyBGbG9hdDY0QXJyYXkoNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyl7bi5sZW5ndGg8by5sZW5ndGgmJihuPW5ldyBGbG9hdDY0QXJyYXkoby5sZW5ndGgpLGE9bmV3IEZsb2F0NjRBcnJheShvLmxlbmd0aCksaT1uZXcgRmxvYXQ2NEFycmF5KG8ubGVuZ3RoKSk7Zm9yKHZhciBsPTA7bDxvLmxlbmd0aDsrK2wpbltsXT10W2xdLW9bbF0sYVtsXT1lW2xdLXRbbF0saVtsXT1yW2xdLXRbbF07dmFyIGM9MCx1PTAsaD0wLGY9MCxwPTAsZD0wO2ZvcihsPTA7bDxvLmxlbmd0aDsrK2wpe3ZhciBnPWFbbF0sdj1pW2xdLG09bltsXTtjKz1nKmcsdSs9Zyp2LGgrPXYqdixmKz1tKmcscCs9bSp2LGQrPW0qbX12YXIgeSx4LGIsXyx3LGs9TWF0aC5hYnMoYypoLXUqdSksVD11KnAtaCpmLE09dSpmLWMqcDtpZihUK008PWspaWYoVDwwKU08MCYmZjwwPyhNPTAsLWY+PWM/KFQ9MSx5PWMrMipmK2QpOnk9ZiooVD0tZi9jKStkKTooVD0wLHA+PTA/KE09MCx5PWQpOi1wPj1oPyhNPTEseT1oKzIqcCtkKTp5PXAqKE09LXAvaCkrZCk7ZWxzZSBpZihNPDApTT0wLGY+PTA/KFQ9MCx5PWQpOi1mPj1jPyhUPTEseT1jKzIqZitkKTp5PWYqKFQ9LWYvYykrZDtlbHNle3ZhciBBPTEvazt5PShUKj1BKSooYypUK3UqKE0qPUEpKzIqZikrTSoodSpUK2gqTSsyKnApK2R9ZWxzZSBUPDA/KGI9aCtwKT4oeD11K2YpPyhfPWIteCk+PSh3PWMtMip1K2gpPyhUPTEsTT0wLHk9YysyKmYrZCk6eT0oVD1fL3cpKihjKlQrdSooTT0xLVQpKzIqZikrTSoodSpUK2gqTSsyKnApK2Q6KFQ9MCxiPD0wPyhNPTEseT1oKzIqcCtkKTpwPj0wPyhNPTAseT1kKTp5PXAqKE09LXAvaCkrZCk6TTwwPyhiPWMrZik+KHg9dStwKT8oXz1iLXgpPj0odz1jLTIqdStoKT8oTT0xLFQ9MCx5PWgrMipwK2QpOnk9KFQ9MS0oTT1fL3cpKSooYypUK3UqTSsyKmYpK00qKHUqVCtoKk0rMipwKStkOihNPTAsYjw9MD8oVD0xLHk9YysyKmYrZCk6Zj49MD8oVD0wLHk9ZCk6eT1mKihUPS1mL2MpK2QpOihfPWgrcC11LWYpPD0wPyhUPTAsTT0xLHk9aCsyKnArZCk6Xz49KHc9Yy0yKnUraCk/KFQ9MSxNPTAseT1jKzIqZitkKTp5PShUPV8vdykqKGMqVCt1KihNPTEtVCkrMipmKStNKih1KlQraCpNKzIqcCkrZDt2YXIgUz0xLVQtTTtmb3IobD0wO2w8by5sZW5ndGg7KytsKXNbbF09Uyp0W2xdK1QqZVtsXStNKnJbbF07cmV0dXJuIHk8MD8wOnl9fSx7fV0sNDg0OltmdW5jdGlvbih0LGUscil7dmFyIG4sYSxpPWUuZXhwb3J0cz17fTtmdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcygpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gbCh0KXtpZihuPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChuPT09b3x8IW4pJiZzZXRUaW1lb3V0KXJldHVybiBuPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gbih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCwwKX19fSFmdW5jdGlvbigpe3RyeXtuPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6b31jYXRjaCh0KXtuPW99dHJ5e2E9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6c31jYXRjaCh0KXthPXN9fSgpO3ZhciBjLHU9W10saD0hMSxmPS0xO2Z1bmN0aW9uIHAoKXtoJiZjJiYoaD0hMSxjLmxlbmd0aD91PWMuY29uY2F0KHUpOmY9LTEsdS5sZW5ndGgmJmQoKSl9ZnVuY3Rpb24gZCgpe2lmKCFoKXt2YXIgdD1sKHApO2g9ITA7Zm9yKHZhciBlPXUubGVuZ3RoO2U7KXtmb3IoYz11LHU9W107KytmPGU7KWMmJmNbZl0ucnVuKCk7Zj0tMSxlPXUubGVuZ3RofWM9bnVsbCxoPSExLGZ1bmN0aW9uKHQpe2lmKGE9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dCh0KTtpZigoYT09PXN8fCFhKSYmY2xlYXJUaW1lb3V0KXJldHVybiBhPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQodCk7dHJ5e2EodCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBhLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gYS5jYWxsKHRoaXMsdCl9fX0odCl9fWZ1bmN0aW9uIGcodCxlKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9ZX1mdW5jdGlvbiB2KCl7fWkubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZVtyLTFdPWFyZ3VtZW50c1tyXTt1LnB1c2gobmV3IGcodCxlKSksMSE9PXUubGVuZ3RofHxofHxsKGQpfSxnLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxpLnRpdGxlPSJicm93c2VyIixpLmJyb3dzZXI9ITAsaS5lbnY9e30saS5hcmd2PVtdLGkudmVyc2lvbj0iIixpLnZlcnNpb25zPXt9LGkub249dixpLmFkZExpc3RlbmVyPXYsaS5vbmNlPXYsaS5vZmY9dixpLnJlbW92ZUxpc3RlbmVyPXYsaS5yZW1vdmVBbGxMaXN0ZW5lcnM9dixpLmVtaXQ9dixpLnByZXBlbmRMaXN0ZW5lcj12LGkucHJlcGVuZE9uY2VMaXN0ZW5lcj12LGkubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybltdfSxpLmJpbmRpbmc9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxpLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0saS5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxpLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7fV0sNDg1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImdsLXF1YXQvc2xlcnAiKX0seyJnbC1xdWF0L3NsZXJwIjoyOTZ9XSw0ODY6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7Zm9yKHZhciBuPXQoInBlcmZvcm1hbmNlLW5vdyIpLGE9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/cjp3aW5kb3csaT1bIm1veiIsIndlYmtpdCJdLG89IkFuaW1hdGlvbkZyYW1lIixzPWFbInJlcXVlc3QiK29dLGw9YVsiY2FuY2VsIitvXXx8YVsiY2FuY2VsUmVxdWVzdCIrb10sYz0wOyFzJiZjPGkubGVuZ3RoO2MrKylzPWFbaVtjXSsiUmVxdWVzdCIrb10sbD1hW2lbY10rIkNhbmNlbCIrb118fGFbaVtjXSsiQ2FuY2VsUmVxdWVzdCIrb107aWYoIXN8fCFsKXt2YXIgdT0wLGg9MCxmPVtdO3M9ZnVuY3Rpb24odCl7aWYoMD09PWYubGVuZ3RoKXt2YXIgZT1uKCkscj1NYXRoLm1heCgwLDFlMy82MC0oZS11KSk7dT1yK2Usc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0PWYuc2xpY2UoMCk7Zi5sZW5ndGg9MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZighdFtlXS5jYW5jZWxsZWQpdHJ5e3RbZV0uY2FsbGJhY2sodSl9Y2F0Y2godCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IHR9LDApfX0sTWF0aC5yb3VuZChyKSl9cmV0dXJuIGYucHVzaCh7aGFuZGxlOisraCxjYWxsYmFjazp0LGNhbmNlbGxlZDohMX0pLGh9LGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxmLmxlbmd0aDtlKyspZltlXS5oYW5kbGU9PT10JiYoZltlXS5jYW5jZWxsZWQ9ITApfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHMuY2FsbChhLHQpfSxlLmV4cG9ydHMuY2FuY2VsPWZ1bmN0aW9uKCl7bC5hcHBseShhLGFyZ3VtZW50cyl9LGUuZXhwb3J0cy5wb2x5ZmlsbD1mdW5jdGlvbih0KXt0fHwodD1hKSx0LnJlcXVlc3RBbmltYXRpb25GcmFtZT1zLHQuY2FuY2VsQW5pbWF0aW9uRnJhbWU9bH19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsicGVyZm9ybWFuY2Utbm93Ijo0NjR9XSw0ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmlnLXJhdC9hZGQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsYT1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpYVtpXT1uKHRbaV0sZVtpXSk7cmV0dXJuIGF9fSx7ImJpZy1yYXQvYWRkIjo3N31dLDQ4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKWVbcl09bih0W3JdKTtyZXR1cm4gZX07dmFyIG49dCgiYmlnLXJhdCIpfSx7ImJpZy1yYXQiOjgwfV0sNDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpZy1yYXQiKSxhPXQoImJpZy1yYXQvbXVsIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW4oZSksaT10Lmxlbmd0aCxvPW5ldyBBcnJheShpKSxzPTA7czxpOysrcylvW3NdPWEodFtzXSxyKTtyZXR1cm4gb319LHsiYmlnLXJhdCI6ODAsImJpZy1yYXQvbXVsIjo4OX1dLDQ5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaWctcmF0L3N1YiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxhPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlhW2ldPW4odFtpXSxlW2ldKTtyZXR1cm4gYX19LHsiYmlnLXJhdC9zdWIiOjkxfV0sNDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbXBhcmUtY2VsbCIpLGE9dCgiY29tcGFyZS1vcmllbnRlZC1jZWxsIiksaT10KCJjZWxsLW9yaWVudGF0aW9uIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3Quc29ydChhKTtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG89MDtvPGU7KytvKXt2YXIgcz10W29dLGw9aShzKTtpZigwIT09bCl7aWYocj4wKXt2YXIgYz10W3ItMV07aWYoMD09PW4ocyxjKSYmaShjKSE9PWwpe3ItPTE7Y29udGludWV9fXRbcisrXT1zfX1yZXR1cm4gdC5sZW5ndGg9cix0fX0seyJjZWxsLW9yaWVudGF0aW9uIjoxMTQsImNvbXBhcmUtY2VsbCI6MTMwLCJjb21wYXJlLW9yaWVudGVkLWNlbGwiOjEzMX1dLDQ5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJhcnJheS1ib3VuZHMiKSxhPXQoImNvbG9yLW5vcm1hbGl6ZSIpLGk9dCgidXBkYXRlLWRpZmYiKSxvPXQoInBpY2stYnktYWxpYXMiKSxzPXQoIm9iamVjdC1hc3NpZ24iKSxsPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSxjPXQoInRvLWZsb2F0MzIiKSx1PWMuZmxvYXQzMixoPWMuZnJhY3QzMjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsiZnVuY3Rpb24iPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTplPXQ7ZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKTtpZighKHQ9ZS5yZWdsKS5oYXNFeHRlbnNpb24oIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSl0aHJvdyBFcnJvcigicmVnbC1lcnJvcjJkOiBgQU5HTEVfaW5zdGFuY2VkX2FycmF5c2AgZXh0ZW5zaW9uIHNob3VsZCBiZSBlbmFibGVkIik7dmFyIHIsYyxwLGQsZyx2LG09dC5fZ2wseT17Y29sb3I6ImJsYWNrIixjYXBTaXplOjUsbGluZVdpZHRoOjEsb3BhY2l0eToxLHZpZXdwb3J0Om51bGwscmFuZ2U6bnVsbCxvZmZzZXQ6MCxjb3VudDowLGJvdW5kczpudWxsLHBvc2l0aW9uczpbXSxlcnJvcnM6W119LHg9W107cmV0dXJuIGQ9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLGM9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLHA9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLGc9dC5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJmbG9hdCIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLHY9dC5idWZmZXIoe3VzYWdlOiJzdGF0aWMiLHR5cGU6ImZsb2F0IixkYXRhOmZ9KSxrKGUpLHI9dCh7dmVydDoiXG5cdFx0cHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5cdFx0YXR0cmlidXRlIHZlYzIgcG9zaXRpb24sIHBvc2l0aW9uRnJhY3Q7XG5cdFx0YXR0cmlidXRlIHZlYzQgZXJyb3I7XG5cdFx0YXR0cmlidXRlIHZlYzQgY29sb3I7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMiBkaXJlY3Rpb24sIGxpbmVPZmZzZXQsIGNhcE9mZnNldDtcblxuXHRcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblx0XHR1bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCwgY2FwU2l6ZTtcblx0XHR1bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3Q7XG5cblx0XHR2YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5cdFx0dm9pZCBtYWluKCkge1xuXHRcdFx0ZnJhZ0NvbG9yID0gY29sb3IgLyAyNTUuO1xuXG5cdFx0XHR2ZWMyIHBpeGVsT2Zmc2V0ID0gbGluZVdpZHRoICogbGluZU9mZnNldCArIChjYXBTaXplICsgbGluZVdpZHRoKSAqIGNhcE9mZnNldDtcblxuXHRcdFx0dmVjMiBkeHkgPSAtc3RlcCguNSwgZGlyZWN0aW9uLnh5KSAqIGVycm9yLnh6ICsgc3RlcChkaXJlY3Rpb24ueHksIHZlYzIoLS41KSkgKiBlcnJvci55dztcblxuXHRcdFx0dmVjMiBwb3NpdGlvbiA9IHBvc2l0aW9uICsgZHh5O1xuXG5cdFx0XHR2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxuXHRcdFx0XHQrIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVcblx0XHRcdFx0KyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxuXHRcdFx0XHQrIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcblxuXHRcdFx0cG9zICs9IHBpeGVsT2Zmc2V0IC8gdmlld3BvcnQuenc7XG5cblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKiAyLiAtIDEuLCAwLCAxKTtcblx0XHR9XG5cdFx0IixmcmFnOiJcblx0XHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cblx0XHR2YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5cdFx0dW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG5cdFx0dm9pZCBtYWluKCkge1xuXHRcdFx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xuXHRcdFx0Z2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTtcblx0XHR9XG5cdFx0Iix1bmlmb3Jtczp7cmFuZ2U6dC5wcm9wKCJyYW5nZSIpLGxpbmVXaWR0aDp0LnByb3AoImxpbmVXaWR0aCIpLGNhcFNpemU6dC5wcm9wKCJjYXBTaXplIiksb3BhY2l0eTp0LnByb3AoIm9wYWNpdHkiKSxzY2FsZTp0LnByb3AoInNjYWxlIiksdHJhbnNsYXRlOnQucHJvcCgidHJhbnNsYXRlIiksc2NhbGVGcmFjdDp0LnByb3AoInNjYWxlRnJhY3QiKSx0cmFuc2xhdGVGcmFjdDp0LnByb3AoInRyYW5zbGF0ZUZyYWN0Iiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19fSxhdHRyaWJ1dGVzOntjb2xvcjp7YnVmZmVyOmQsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDQqZS5vZmZzZXR9LGRpdmlzb3I6MX0scG9zaXRpb246e2J1ZmZlcjpjLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiA4KmUub2Zmc2V0fSxkaXZpc29yOjF9LHBvc2l0aW9uRnJhY3Q6e2J1ZmZlcjpwLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiA4KmUub2Zmc2V0fSxkaXZpc29yOjF9LGVycm9yOntidWZmZXI6ZyxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMTYqZS5vZmZzZXR9LGRpdmlzb3I6MX0sZGlyZWN0aW9uOntidWZmZXI6dixzdHJpZGU6MjQsb2Zmc2V0OjB9LGxpbmVPZmZzZXQ6e2J1ZmZlcjp2LHN0cmlkZToyNCxvZmZzZXQ6OH0sY2FwT2Zmc2V0OntidWZmZXI6dixzdHJpZGU6MjQsb2Zmc2V0OjE2fX0scHJpbWl0aXZlOiJ0cmlhbmdsZXMiLGJsZW5kOntlbmFibGU6ITAsY29sb3I6WzAsMCwwLDBdLGVxdWF0aW9uOntyZ2I6ImFkZCIsYWxwaGE6ImFkZCJ9LGZ1bmM6e3NyY1JHQjoic3JjIGFscGhhIixkc3RSR0I6Im9uZSBtaW51cyBzcmMgYWxwaGEiLHNyY0FscGhhOiJvbmUgbWludXMgZHN0IGFscGhhIixkc3RBbHBoYToib25lIn19LGRlcHRoOntlbmFibGU6ITF9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKCJ2aWV3cG9ydCIpfSx2aWV3cG9ydDp0LnByb3AoInZpZXdwb3J0Iiksc3RlbmNpbDohMSxpbnN0YW5jZXM6dC5wcm9wKCJjb3VudCIpLGNvdW50OmYubGVuZ3RofSkscyhiLHt1cGRhdGU6ayxkcmF3Ol8sZGVzdHJveTpULHJlZ2w6dCxnbDptLGNhbnZhczptLmNhbnZhcyxncm91cHM6eH0pLGI7ZnVuY3Rpb24gYih0KXt0P2sodCk6bnVsbD09PXQmJlQoKSxfKCl9ZnVuY3Rpb24gXyhlKXtpZigibnVtYmVyIj09dHlwZW9mIGUpcmV0dXJuIHcoZSk7ZSYmIUFycmF5LmlzQXJyYXkoZSkmJihlPVtlXSksdC5fcmVmcmVzaCgpLHguZm9yRWFjaChmdW5jdGlvbih0LHIpe3QmJihlJiYoZVtyXT90LmRyYXc9ITA6dC5kcmF3PSExKSx0LmRyYXc/dyhyKTp0LmRyYXc9ITApfSl9ZnVuY3Rpb24gdyh0KXsibnVtYmVyIj09dHlwZW9mIHQmJih0PXhbdF0pLG51bGwhPXQmJnQmJnQuY291bnQmJnQuY29sb3ImJnQub3BhY2l0eSYmdC5wb3NpdGlvbnMmJnQucG9zaXRpb25zLmxlbmd0aD4xJiYodC5zY2FsZVJhdGlvPVt0LnNjYWxlWzBdKnQudmlld3BvcnQud2lkdGgsdC5zY2FsZVsxXSp0LnZpZXdwb3J0LmhlaWdodF0scih0KSx0LmFmdGVyJiZ0LmFmdGVyKHQpKX1mdW5jdGlvbiBrKHQpe2lmKHQpe251bGwhPXQubGVuZ3RoPyJudW1iZXIiPT10eXBlb2YgdFswXSYmKHQ9W3twb3NpdGlvbnM6dH1dKTpBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBlPTAscj0wO2lmKGIuZ3JvdXBzPXg9dC5tYXAoZnVuY3Rpb24odCxjKXt2YXIgdT14W2NdO3JldHVybiB0PygiZnVuY3Rpb24iPT10eXBlb2YgdD90PXthZnRlcjp0fToibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PXtwb3NpdGlvbnM6dH0pLHQ9byh0LHtjb2xvcjoiY29sb3IgY29sb3JzIGZpbGwiLGNhcFNpemU6ImNhcFNpemUgY2FwIGNhcHNpemUgY2FwLXNpemUiLGxpbmVXaWR0aDoibGluZVdpZHRoIGxpbmUtd2lkdGggd2lkdGggbGluZSB0aGlja25lc3MiLG9wYWNpdHk6Im9wYWNpdHkgYWxwaGEiLHJhbmdlOiJyYW5nZSBkYXRhQm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld0JveCIsZXJyb3JzOiJlcnJvcnMgZXJyb3IiLHBvc2l0aW9uczoicG9zaXRpb25zIHBvc2l0aW9uIGRhdGEgcG9pbnRzIn0pLHV8fCh4W2NdPXU9e2lkOmMsc2NhbGU6bnVsbCx0cmFuc2xhdGU6bnVsbCxzY2FsZUZyYWN0Om51bGwsdHJhbnNsYXRlRnJhY3Q6bnVsbCxkcmF3OiEwfSx0PXMoe30seSx0KSksaSh1LHQsW3tsaW5lV2lkdGg6ZnVuY3Rpb24odCl7cmV0dXJuLjUqK3R9LGNhcFNpemU6ZnVuY3Rpb24odCl7cmV0dXJuLjUqK3R9LG9wYWNpdHk6cGFyc2VGbG9hdCxlcnJvcnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bCh0KSxyKz10Lmxlbmd0aCx0fSxwb3NpdGlvbnM6ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD1sKHQsImZsb2F0NjQiKSxyLmNvdW50PU1hdGguZmxvb3IodC5sZW5ndGgvMiksci5ib3VuZHM9bih0LDIpLHIub2Zmc2V0PWUsZSs9ci5jb3VudCx0fX0se2NvbG9yOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5jb3VudDtpZih0fHwodD0idHJhbnNwYXJlbnQiKSwhQXJyYXkuaXNBcnJheSh0KXx8Im51bWJlciI9PXR5cGVvZiB0WzBdKXt2YXIgbj10O3Q9QXJyYXkocik7Zm9yKHZhciBpPTA7aTxyO2krKyl0W2ldPW59aWYodC5sZW5ndGg8cil0aHJvdyBFcnJvcigiTm90IGVub3VnaCBjb2xvcnMiKTtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkoNCpyKSxzPTA7czxyO3MrKyl7dmFyIGw9YSh0W3NdLCJ1aW50OCIpO28uc2V0KGwsNCpzKX1yZXR1cm4gb30scmFuZ2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuYm91bmRzO3JldHVybiB0fHwodD1uKSxlLnNjYWxlPVsxLyh0WzJdLXRbMF0pLDEvKHRbM10tdFsxXSldLGUudHJhbnNsYXRlPVstdFswXSwtdFsxXV0sZS5zY2FsZUZyYWN0PWgoZS5zY2FsZSksZS50cmFuc2xhdGVGcmFjdD1oKGUudHJhbnNsYXRlKSx0fSx2aWV3cG9ydDpmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9lPXt4OnRbMF0seTp0WzFdLHdpZHRoOnRbMl0tdFswXSxoZWlnaHQ6dFszXS10WzFdfTp0PyhlPXt4OnQueHx8dC5sZWZ0fHwwLHk6dC55fHx0LnRvcHx8MH0sdC5yaWdodD9lLndpZHRoPXQucmlnaHQtZS54OmUud2lkdGg9dC53fHx0LndpZHRofHwwLHQuYm90dG9tP2UuaGVpZ2h0PXQuYm90dG9tLWUueTplLmhlaWdodD10Lmh8fHQuaGVpZ2h0fHwwKTplPXt4OjAseTowLHdpZHRoOm0uZHJhd2luZ0J1ZmZlcldpZHRoLGhlaWdodDptLmRyYXdpbmdCdWZmZXJIZWlnaHR9LGV9fV0pLHUpOnV9KSxlfHxyKXt2YXIgZj14LnJlZHVjZShmdW5jdGlvbih0LGUscil7cmV0dXJuIHQrKGU/ZS5jb3VudDowKX0sMCksdj1uZXcgRmxvYXQ2NEFycmF5KDIqZiksXz1uZXcgVWludDhBcnJheSg0KmYpLHc9bmV3IEZsb2F0MzJBcnJheSg0KmYpO3guZm9yRWFjaChmdW5jdGlvbih0LGUpe2lmKHQpe3ZhciByPXQucG9zaXRpb25zLG49dC5jb3VudCxhPXQub2Zmc2V0LGk9dC5jb2xvcixvPXQuZXJyb3JzO24mJihfLnNldChpLDQqYSksdy5zZXQobyw0KmEpLHYuc2V0KHIsMiphKSl9fSksYyh1KHYpKSxwKGgodikpLGQoXyksZyh3KX19fWZ1bmN0aW9uIFQoKXtjLmRlc3Ryb3koKSxwLmRlc3Ryb3koKSxkLmRlc3Ryb3koKSxnLmRlc3Ryb3koKSx2LmRlc3Ryb3koKX19O3ZhciBmPVtbMSwwLDAsMSwwLDBdLFsxLDAsMCwtMSwwLDBdLFstMSwwLDAsLTEsMCwwXSxbLTEsMCwwLC0xLDAsMF0sWy0xLDAsMCwxLDAsMF0sWzEsMCwwLDEsMCwwXSxbMSwwLC0xLDAsMCwxXSxbMSwwLC0xLDAsMCwtMV0sWzEsMCwxLDAsMCwtMV0sWzEsMCwxLDAsMCwtMV0sWzEsMCwxLDAsMCwxXSxbMSwwLC0xLDAsMCwxXSxbLTEsMCwtMSwwLDAsMV0sWy0xLDAsLTEsMCwwLC0xXSxbLTEsMCwxLDAsMCwtMV0sWy0xLDAsMSwwLDAsLTFdLFstMSwwLDEsMCwwLDFdLFstMSwwLC0xLDAsMCwxXSxbMCwxLDEsMCwwLDBdLFswLDEsLTEsMCwwLDBdLFswLC0xLC0xLDAsMCwwXSxbMCwtMSwtMSwwLDAsMF0sWzAsMSwxLDAsMCwwXSxbMCwtMSwxLDAsMCwwXSxbMCwxLDAsLTEsMSwwXSxbMCwxLDAsLTEsLTEsMF0sWzAsMSwwLDEsLTEsMF0sWzAsMSwwLDEsMSwwXSxbMCwxLDAsLTEsMSwwXSxbMCwxLDAsMSwtMSwwXSxbMCwtMSwwLC0xLDEsMF0sWzAsLTEsMCwtMSwtMSwwXSxbMCwtMSwwLDEsLTEsMF0sWzAsLTEsMCwxLDEsMF0sWzAsLTEsMCwtMSwxLDBdLFswLC0xLDAsMSwtMSwwXV19LHsiYXJyYXktYm91bmRzIjo2OCwiY29sb3Itbm9ybWFsaXplIjoxMjIsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjIzMCwib2JqZWN0LWFzc2lnbiI6NDU2LCJwaWNrLWJ5LWFsaWFzIjo0NjcsInRvLWZsb2F0MzIiOjUzNywidXBkYXRlLWRpZmYiOjU0OH1dLDQ5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb2xvci1ub3JtYWxpemUiKSxhPXQoImFycmF5LWJvdW5kcyIpLGk9dCgib2JqZWN0LWFzc2lnbiIpLG89dCgiZ2xzbGlmeSIpLHM9dCgicGljay1ieS1hbGlhcyIpLGw9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLGM9dCgiZWFyY3V0IiksdT10KCJhcnJheS1ub3JtYWxpemUiKSxoPXQoInRvLWZsb2F0MzIiKSxmPWguZmxvYXQzMixwPWguZnJhY3QzMixkPXQoImVzNi13ZWFrLW1hcCIpLGc9dCgicGFyc2UtcmVjdCIpO2Z1bmN0aW9uIHYodCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB2KSlyZXR1cm4gbmV3IHYodCxlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTplPXQsZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKSwhKHQ9ZS5yZWdsKS5oYXNFeHRlbnNpb24oIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSl0aHJvdyBFcnJvcigicmVnbC1lcnJvcjJkOiBgQU5HTEVfaW5zdGFuY2VkX2FycmF5c2AgZXh0ZW5zaW9uIHNob3VsZCBiZSBlbmFibGVkIik7dGhpcy5nbD10Ll9nbCx0aGlzLnJlZ2w9dCx0aGlzLnBhc3Nlcz1bXSx0aGlzLnNoYWRlcnM9di5zaGFkZXJzLmhhcyh0KT92LnNoYWRlcnMuZ2V0KHQpOnYuc2hhZGVycy5zZXQodCx2LmNyZWF0ZVNoYWRlcnModCkpLmdldCh0KSx0aGlzLnVwZGF0ZShlKX1lLmV4cG9ydHM9dix2LmRhc2hNdWx0PTIsdi5tYXhQYXR0ZXJuTGVuZ3RoPTI1Nix2LnByZWNpc2lvblRocmVzaG9sZD0zZTYsdi5tYXhQb2ludHM9MWU0LHYubWF4TGluZXM9MjA0OCx2LnNoYWRlcnM9bmV3IGQsdi5jcmVhdGVTaGFkZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5idWZmZXIoe3VzYWdlOiJzdGF0aWMiLHR5cGU6ImZsb2F0IixkYXRhOlswLDEsMCwwLDEsMSwxLDBdfSksbj17cHJpbWl0aXZlOiJ0cmlhbmdsZSBzdHJpcCIsaW5zdGFuY2VzOnQucHJvcCgiY291bnQiKSxjb3VudDo0LG9mZnNldDowLHVuaWZvcm1zOnttaXRlck1vZGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4icm91bmQiPT09ZS5qb2luPzI6MX0sbWl0ZXJMaW1pdDp0LnByb3AoIm1pdGVyTGltaXQiKSxzY2FsZTp0LnByb3AoInNjYWxlIiksc2NhbGVGcmFjdDp0LnByb3AoInNjYWxlRnJhY3QiKSx0cmFuc2xhdGVGcmFjdDp0LnByb3AoInRyYW5zbGF0ZUZyYWN0IiksdHJhbnNsYXRlOnQucHJvcCgidHJhbnNsYXRlIiksdGhpY2tuZXNzOnQucHJvcCgidGhpY2tuZXNzIiksZGFzaFBhdHRlcm46dC5wcm9wKCJkYXNoVGV4dHVyZSIpLG9wYWNpdHk6dC5wcm9wKCJvcGFjaXR5IikscGl4ZWxSYXRpbzp0LmNvbnRleHQoInBpeGVsUmF0aW8iKSxpZDp0LnByb3AoImlkIiksZGFzaFNpemU6dC5wcm9wKCJkYXNoTGVuZ3RoIiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19LGRlcHRoOnQucHJvcCgiZGVwdGgiKX0sYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMF0sZXF1YXRpb246e3JnYjoiYWRkIixhbHBoYToiYWRkIn0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sZGVwdGg6e2VuYWJsZTpmdW5jdGlvbih0LGUpe3JldHVybiFlLm92ZXJsYXl9fSxzdGVuY2lsOntlbmFibGU6ITF9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKCJ2aWV3cG9ydCIpfSx2aWV3cG9ydDp0LnByb3AoInZpZXdwb3J0Iil9LGE9dChpKHt2ZXJ0Om8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBhQ29vcmQsIGJDb29yZCwgYUNvb3JkRnJhY3QsIGJDb29yZEZyYWN0O1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZUVuZCwgbGluZVRvcDtcblxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xudW5pZm9ybSBmbG9hdCB0aGlja25lc3MsIHBpeGVsUmF0aW8sIGlkLCBkZXB0aDtcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xuXG52ZWMyIHByb2plY3QodmVjMiBwb3NpdGlvbiwgdmVjMiBwb3NpdGlvbkZyYWN0LCB2ZWMyIHNjYWxlLCB2ZWMyIHNjYWxlRnJhY3QsIHZlYzIgdHJhbnNsYXRlLCB2ZWMyIHRyYW5zbGF0ZUZyYWN0KSB7XG5cdC8vIHRoZSBvcmRlciBpcyBpbXBvcnRhbnRcblx0cmV0dXJuIHBvc2l0aW9uICogc2NhbGUgKyB0cmFuc2xhdGVcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZSArIHRyYW5zbGF0ZUZyYWN0XG4gICAgICAgKyBwb3NpdGlvbiAqIHNjYWxlRnJhY3RcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZUZyYWN0O1xufVxuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGxpbmVTdGFydCA9IDEuIC0gbGluZUVuZDtcblx0ZmxvYXQgbGluZU9mZnNldCA9IGxpbmVUb3AgKiAyLiAtIDEuO1xuXG5cdHZlYzIgZGlmZiA9IChiQ29vcmQgKyBiQ29vcmRGcmFjdCAtIGFDb29yZCAtIGFDb29yZEZyYWN0KTtcblx0dGFuZ2VudCA9IG5vcm1hbGl6ZShkaWZmICogc2NhbGUgKiB2aWV3cG9ydC56dyk7XG5cdHZlYzIgbm9ybWFsID0gdmVjMigtdGFuZ2VudC55LCB0YW5nZW50LngpO1xuXG5cdHZlYzIgcG9zaXRpb24gPSBwcm9qZWN0KGFDb29yZCwgYUNvb3JkRnJhY3QsIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0KSAqIGxpbmVTdGFydFxuXHRcdCsgcHJvamVjdChiQ29vcmQsIGJDb29yZEZyYWN0LCBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdCkgKiBsaW5lRW5kXG5cblx0XHQrIHRoaWNrbmVzcyAqIG5vcm1hbCAqIC41ICogbGluZU9mZnNldCAvIHZpZXdwb3J0Lnp3O1xuXG5cdGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGZyYWdDb2xvciA9IGNvbG9yIC8gMjU1Ljtcbn1cbiJdKSxmcmFnOm8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoUGF0dGVybjtcblxudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZSwgcGl4ZWxSYXRpbywgdGhpY2tuZXNzLCBvcGFjaXR5LCBpZDtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGFscGhhID0gMS47XG5cblx0ZmxvYXQgdCA9IGZyYWN0KGRvdCh0YW5nZW50LCBnbF9GcmFnQ29vcmQueHkpIC8gZGFzaFNpemUpICogLjUgKyAuMjU7XG5cdGZsb2F0IGRhc2ggPSB0ZXh0dXJlMkQoZGFzaFBhdHRlcm4sIHZlYzIodCwgLjUpKS5yO1xuXG5cdGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcblx0Z2xfRnJhZ0NvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5ICogZGFzaDtcbn1cbiJdKSxhdHRyaWJ1dGVzOntsaW5lRW5kOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjB9LGxpbmVUb3A6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6NH0sYUNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDo4LGRpdmlzb3I6MX0sYkNvb3JkOntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDoxNixkaXZpc29yOjF9LGFDb29yZEZyYWN0OntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkZyYWN0QnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjgsZGl2aXNvcjoxfSxiQ29vcmRGcmFjdDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25GcmFjdEJ1ZmZlciIpLHN0cmlkZTo4LG9mZnNldDoxNixkaXZpc29yOjF9LGNvbG9yOntidWZmZXI6dC5wcm9wKCJjb2xvckJ1ZmZlciIpLHN0cmlkZTo0LG9mZnNldDowLGRpdmlzb3I6MX19fSxuKSk7dHJ5e2U9dChpKHtjdWxsOntlbmFibGU6ITAsZmFjZToiYmFjayJ9LHZlcnQ6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGFDb29yZCwgYkNvb3JkLCBuZXh0Q29vcmQsIHByZXZDb29yZDtcbmF0dHJpYnV0ZSB2ZWM0IGFDb2xvciwgYkNvbG9yO1xuYXR0cmlidXRlIGZsb2F0IGxpbmVFbmQsIGxpbmVUb3A7XG5cbnVuaWZvcm0gdmVjMiBzY2FsZSwgdHJhbnNsYXRlO1xudW5pZm9ybSBmbG9hdCB0aGlja25lc3MsIHBpeGVsUmF0aW8sIGlkLCBkZXB0aDtcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcbnVuaWZvcm0gZmxvYXQgbWl0ZXJMaW1pdCwgbWl0ZXJNb2RlO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWM0IHN0YXJ0Q3V0b2ZmLCBlbmRDdXRvZmY7XG52YXJ5aW5nIHZlYzIgdGFuZ2VudDtcbnZhcnlpbmcgdmVjMiBzdGFydENvb3JkLCBlbmRDb29yZDtcbnZhcnlpbmcgZmxvYXQgZW5hYmxlU3RhcnRNaXRlciwgZW5hYmxlRW5kTWl0ZXI7XG5cbmNvbnN0IGZsb2F0IFJFVkVSU0VfVEhSRVNIT0xEID0gLS44NzU7XG5jb25zdCBmbG9hdCBNSU5fRElGRiA9IDFlLTY7XG5cbi8vIFRPRE86IHBvc3NpYmxlIG9wdGltaXphdGlvbnM6IGF2b2lkIG92ZXJjYWxjdWxhdGluZyBhbGwgZm9yIHZlcnRpY2VzIGFuZCBjYWxjIGp1c3Qgb25lIGluc3RlYWRcbi8vIFRPRE86IHByZWNhbGN1bGF0ZSBkb3QgcHJvZHVjdHMsIG5vcm1hbGl6ZSB0aGluZ3MgYmVmb3JlaGVhZCBldGMuXG4vLyBUT0RPOiByZWZhY3RvciB0byByZWN0YW5ndWxhciBhbGdvcml0aG1cblxuZmxvYXQgZGlzdFRvTGluZSh2ZWMyIHAsIHZlYzIgYSwgdmVjMiBiKSB7XG5cdHZlYzIgZGlmZiA9IGIgLSBhO1xuXHR2ZWMyIHBlcnAgPSBub3JtYWxpemUodmVjMigtZGlmZi55LCBkaWZmLngpKTtcblx0cmV0dXJuIGRvdChwIC0gYSwgcGVycCk7XG59XG5cbmJvb2wgaXNOYU4oIGZsb2F0IHZhbCApe1xuICByZXR1cm4gKCB2YWwgPCAwLjAgfHwgMC4wIDwgdmFsIHx8IHZhbCA9PSAwLjAgKSA/IGZhbHNlIDogdHJ1ZTtcbn1cblxudm9pZCBtYWluKCkge1xuXHR2ZWMyIGFDb29yZCA9IGFDb29yZCwgYkNvb3JkID0gYkNvb3JkLCBwcmV2Q29vcmQgPSBwcmV2Q29vcmQsIG5leHRDb29yZCA9IG5leHRDb29yZDtcblxuICB2ZWMyIGFkanVzdGVkU2NhbGU7XG4gIGFkanVzdGVkU2NhbGUueCA9IChhYnMoc2NhbGUueCkgPCBNSU5fRElGRikgPyBNSU5fRElGRiA6IHNjYWxlLng7XG4gIGFkanVzdGVkU2NhbGUueSA9IChhYnMoc2NhbGUueSkgPCBNSU5fRElGRikgPyBNSU5fRElGRiA6IHNjYWxlLnk7XG5cbiAgdmVjMiBzY2FsZVJhdGlvID0gYWRqdXN0ZWRTY2FsZSAqIHZpZXdwb3J0Lnp3O1xuXHR2ZWMyIG5vcm1hbFdpZHRoID0gdGhpY2tuZXNzIC8gc2NhbGVSYXRpbztcblxuXHRmbG9hdCBsaW5lU3RhcnQgPSAxLiAtIGxpbmVFbmQ7XG5cdGZsb2F0IGxpbmVCb3QgPSAxLiAtIGxpbmVUb3A7XG5cblx0ZnJhZ0NvbG9yID0gKGxpbmVTdGFydCAqIGFDb2xvciArIGxpbmVFbmQgKiBiQ29sb3IpIC8gMjU1LjtcblxuXHRpZiAoaXNOYU4oYUNvb3JkLngpIHx8IGlzTmFOKGFDb29yZC55KSB8fCBpc05hTihiQ29vcmQueCkgfHwgaXNOYU4oYkNvb3JkLnkpKSByZXR1cm47XG5cblx0aWYgKGFDb29yZCA9PSBwcmV2Q29vcmQpIHByZXZDb29yZCA9IGFDb29yZCArIG5vcm1hbGl6ZShiQ29vcmQgLSBhQ29vcmQpO1xuXHRpZiAoYkNvb3JkID09IG5leHRDb29yZCkgbmV4dENvb3JkID0gYkNvb3JkIC0gbm9ybWFsaXplKGJDb29yZCAtIGFDb29yZCk7XG5cblx0dmVjMiBwcmV2RGlmZiA9IGFDb29yZCAtIHByZXZDb29yZDtcblx0dmVjMiBjdXJyRGlmZiA9IGJDb29yZCAtIGFDb29yZDtcblx0dmVjMiBuZXh0RGlmZiA9IG5leHRDb29yZCAtIGJDb29yZDtcblxuXHR2ZWMyIHByZXZUYW5nZW50ID0gbm9ybWFsaXplKHByZXZEaWZmICogc2NhbGVSYXRpbyk7XG5cdHZlYzIgY3VyclRhbmdlbnQgPSBub3JtYWxpemUoY3VyckRpZmYgKiBzY2FsZVJhdGlvKTtcblx0dmVjMiBuZXh0VGFuZ2VudCA9IG5vcm1hbGl6ZShuZXh0RGlmZiAqIHNjYWxlUmF0aW8pO1xuXG5cdHZlYzIgcHJldk5vcm1hbCA9IHZlYzIoLXByZXZUYW5nZW50LnksIHByZXZUYW5nZW50LngpO1xuXHR2ZWMyIGN1cnJOb3JtYWwgPSB2ZWMyKC1jdXJyVGFuZ2VudC55LCBjdXJyVGFuZ2VudC54KTtcblx0dmVjMiBuZXh0Tm9ybWFsID0gdmVjMigtbmV4dFRhbmdlbnQueSwgbmV4dFRhbmdlbnQueCk7XG5cblx0dmVjMiBzdGFydEpvaW5EaXJlY3Rpb24gPSBub3JtYWxpemUocHJldlRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XG5cdHZlYzIgZW5kSm9pbkRpcmVjdGlvbiA9IG5vcm1hbGl6ZShjdXJyVGFuZ2VudCAtIG5leHRUYW5nZW50KTtcblxuXHQvLyBjb2xsYXBzZWQvdW5pZGlyZWN0aW9uYWwgc2VnbWVudCBjYXNlc1xuXHQvLyBGSVhNRTogdGhlcmUgc2hvdWxkIGJlIG1vcmUgZWxlZ2FudCBzb2x1dGlvblxuXHR2ZWMyIHByZXZUYW5EaWZmID0gYWJzKHByZXZUYW5nZW50IC0gY3VyclRhbmdlbnQpO1xuXHR2ZWMyIG5leHRUYW5EaWZmID0gYWJzKG5leHRUYW5nZW50IC0gY3VyclRhbmdlbnQpO1xuXHRpZiAobWF4KHByZXZUYW5EaWZmLngsIHByZXZUYW5EaWZmLnkpIDwgTUlOX0RJRkYpIHtcblx0XHRzdGFydEpvaW5EaXJlY3Rpb24gPSBjdXJyTm9ybWFsO1xuXHR9XG5cdGlmIChtYXgobmV4dFRhbkRpZmYueCwgbmV4dFRhbkRpZmYueSkgPCBNSU5fRElGRikge1xuXHRcdGVuZEpvaW5EaXJlY3Rpb24gPSBjdXJyTm9ybWFsO1xuXHR9XG5cdGlmIChhQ29vcmQgPT0gYkNvb3JkKSB7XG5cdFx0ZW5kSm9pbkRpcmVjdGlvbiA9IHN0YXJ0Sm9pbkRpcmVjdGlvbjtcblx0XHRjdXJyTm9ybWFsID0gcHJldk5vcm1hbDtcblx0XHRjdXJyVGFuZ2VudCA9IHByZXZUYW5nZW50O1xuXHR9XG5cblx0dGFuZ2VudCA9IGN1cnJUYW5nZW50O1xuXG5cdC8vY2FsY3VsYXRlIGpvaW4gc2hpZnRzIHJlbGF0aXZlIHRvIG5vcm1hbHNcblx0ZmxvYXQgc3RhcnRKb2luU2hpZnQgPSBkb3QoY3Vyck5vcm1hbCwgc3RhcnRKb2luRGlyZWN0aW9uKTtcblx0ZmxvYXQgZW5kSm9pblNoaWZ0ID0gZG90KGN1cnJOb3JtYWwsIGVuZEpvaW5EaXJlY3Rpb24pO1xuXG5cdGZsb2F0IHN0YXJ0TWl0ZXJSYXRpbyA9IGFicygxLiAvIHN0YXJ0Sm9pblNoaWZ0KTtcblx0ZmxvYXQgZW5kTWl0ZXJSYXRpbyA9IGFicygxLiAvIGVuZEpvaW5TaGlmdCk7XG5cblx0dmVjMiBzdGFydEpvaW4gPSBzdGFydEpvaW5EaXJlY3Rpb24gKiBzdGFydE1pdGVyUmF0aW87XG5cdHZlYzIgZW5kSm9pbiA9IGVuZEpvaW5EaXJlY3Rpb24gKiBlbmRNaXRlclJhdGlvO1xuXG5cdHZlYzIgc3RhcnRUb3BKb2luLCBzdGFydEJvdEpvaW4sIGVuZFRvcEpvaW4sIGVuZEJvdEpvaW47XG5cdHN0YXJ0VG9wSm9pbiA9IHNpZ24oc3RhcnRKb2luU2hpZnQpICogc3RhcnRKb2luICogLjU7XG5cdHN0YXJ0Qm90Sm9pbiA9IC1zdGFydFRvcEpvaW47XG5cblx0ZW5kVG9wSm9pbiA9IHNpZ24oZW5kSm9pblNoaWZ0KSAqIGVuZEpvaW4gKiAuNTtcblx0ZW5kQm90Sm9pbiA9IC1lbmRUb3BKb2luO1xuXG5cdHZlYzIgYVRvcENvb3JkID0gYUNvb3JkICsgbm9ybWFsV2lkdGggKiBzdGFydFRvcEpvaW47XG5cdHZlYzIgYlRvcENvb3JkID0gYkNvb3JkICsgbm9ybWFsV2lkdGggKiBlbmRUb3BKb2luO1xuXHR2ZWMyIGFCb3RDb29yZCA9IGFDb29yZCArIG5vcm1hbFdpZHRoICogc3RhcnRCb3RKb2luO1xuXHR2ZWMyIGJCb3RDb29yZCA9IGJDb29yZCArIG5vcm1hbFdpZHRoICogZW5kQm90Sm9pbjtcblxuXHQvL21pdGVyIGFudGktY2xpcHBpbmdcblx0ZmxvYXQgYmFDbGlwcGluZyA9IGRpc3RUb0xpbmUoYkNvb3JkLCBhQ29vcmQsIGFCb3RDb29yZCkgLyBkb3Qobm9ybWFsaXplKG5vcm1hbFdpZHRoICogZW5kQm90Sm9pbiksIG5vcm1hbGl6ZShub3JtYWxXaWR0aC55eCAqIHZlYzIoLXN0YXJ0Qm90Sm9pbi55LCBzdGFydEJvdEpvaW4ueCkpKTtcblx0ZmxvYXQgYWJDbGlwcGluZyA9IGRpc3RUb0xpbmUoYUNvb3JkLCBiQ29vcmQsIGJUb3BDb29yZCkgLyBkb3Qobm9ybWFsaXplKG5vcm1hbFdpZHRoICogc3RhcnRCb3RKb2luKSwgbm9ybWFsaXplKG5vcm1hbFdpZHRoLnl4ICogdmVjMigtZW5kQm90Sm9pbi55LCBlbmRCb3RKb2luLngpKSk7XG5cblx0Ly9wcmV2ZW50IGNsb3NlIHRvIHJldmVyc2UgZGlyZWN0aW9uIHN3aXRjaFxuXHRib29sIHByZXZSZXZlcnNlID0gZG90KGN1cnJUYW5nZW50LCBwcmV2VGFuZ2VudCkgPD0gUkVWRVJTRV9USFJFU0hPTEQgJiYgYWJzKGRvdChjdXJyVGFuZ2VudCwgcHJldk5vcm1hbCkpICogbWluKGxlbmd0aChwcmV2RGlmZiksIGxlbmd0aChjdXJyRGlmZikpIDwgIGxlbmd0aChub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwpO1xuXHRib29sIG5leHRSZXZlcnNlID0gZG90KGN1cnJUYW5nZW50LCBuZXh0VGFuZ2VudCkgPD0gUkVWRVJTRV9USFJFU0hPTEQgJiYgYWJzKGRvdChjdXJyVGFuZ2VudCwgbmV4dE5vcm1hbCkpICogbWluKGxlbmd0aChuZXh0RGlmZiksIGxlbmd0aChjdXJyRGlmZikpIDwgIGxlbmd0aChub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwpO1xuXG5cdGlmIChwcmV2UmV2ZXJzZSkge1xuXHRcdC8vbWFrZSBqb2luIHJlY3Rhbmd1bGFyXG5cdFx0dmVjMiBtaXRlclNoaWZ0ID0gbm9ybWFsV2lkdGggKiBzdGFydEpvaW5EaXJlY3Rpb24gKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0ZmxvYXQgbm9ybWFsQWRqdXN0ID0gMS4gLSBtaW4obWl0ZXJMaW1pdCAvIHN0YXJ0TWl0ZXJSYXRpbywgMS4pO1xuXHRcdGFCb3RDb29yZCA9IGFDb29yZCArIG1pdGVyU2hpZnQgLSBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcblx0XHRhVG9wQ29vcmQgPSBhQ29vcmQgKyBtaXRlclNoaWZ0ICsgbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XG5cdH1cblx0ZWxzZSBpZiAoIW5leHRSZXZlcnNlICYmIGJhQ2xpcHBpbmcgPiAwLiAmJiBiYUNsaXBwaW5nIDwgbGVuZ3RoKG5vcm1hbFdpZHRoICogZW5kQm90Sm9pbikpIHtcblx0XHQvL2hhbmRsZSBtaXRlciBjbGlwcGluZ1xuXHRcdGJUb3BDb29yZCAtPSBub3JtYWxXaWR0aCAqIGVuZFRvcEpvaW47XG5cdFx0YlRvcENvb3JkICs9IG5vcm1hbGl6ZShlbmRUb3BKb2luICogbm9ybWFsV2lkdGgpICogYmFDbGlwcGluZztcblx0fVxuXG5cdGlmIChuZXh0UmV2ZXJzZSkge1xuXHRcdC8vbWFrZSBqb2luIHJlY3Rhbmd1bGFyXG5cdFx0dmVjMiBtaXRlclNoaWZ0ID0gbm9ybWFsV2lkdGggKiBlbmRKb2luRGlyZWN0aW9uICogbWl0ZXJMaW1pdCAqIC41O1xuXHRcdGZsb2F0IG5vcm1hbEFkanVzdCA9IDEuIC0gbWluKG1pdGVyTGltaXQgLyBlbmRNaXRlclJhdGlvLCAxLik7XG5cdFx0YkJvdENvb3JkID0gYkNvb3JkICsgbWl0ZXJTaGlmdCAtIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHRcdGJUb3BDb29yZCA9IGJDb29yZCArIG1pdGVyU2hpZnQgKyBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcblx0fVxuXHRlbHNlIGlmICghcHJldlJldmVyc2UgJiYgYWJDbGlwcGluZyA+IDAuICYmIGFiQ2xpcHBpbmcgPCBsZW5ndGgobm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW4pKSB7XG5cdFx0Ly9oYW5kbGUgbWl0ZXIgY2xpcHBpbmdcblx0XHRhQm90Q29vcmQgLT0gbm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW47XG5cdFx0YUJvdENvb3JkICs9IG5vcm1hbGl6ZShzdGFydEJvdEpvaW4gKiBub3JtYWxXaWR0aCkgKiBhYkNsaXBwaW5nO1xuXHR9XG5cblx0dmVjMiBhVG9wUG9zaXRpb24gPSAoYVRvcENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XG5cdHZlYzIgYUJvdFBvc2l0aW9uID0gKGFCb3RDb29yZCkgKiBhZGp1c3RlZFNjYWxlICsgdHJhbnNsYXRlO1xuXG5cdHZlYzIgYlRvcFBvc2l0aW9uID0gKGJUb3BDb29yZCkgKiBhZGp1c3RlZFNjYWxlICsgdHJhbnNsYXRlO1xuXHR2ZWMyIGJCb3RQb3NpdGlvbiA9IChiQm90Q29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcblxuXHQvL3Bvc2l0aW9uIGlzIG5vcm1hbGl6ZWQgMC4uMSBjb29yZCBvbiB0aGUgc2NyZWVuXG5cdHZlYzIgcG9zaXRpb24gPSAoYVRvcFBvc2l0aW9uICogbGluZVRvcCArIGFCb3RQb3NpdGlvbiAqIGxpbmVCb3QpICogbGluZVN0YXJ0ICsgKGJUb3BQb3NpdGlvbiAqIGxpbmVUb3AgKyBiQm90UG9zaXRpb24gKiBsaW5lQm90KSAqIGxpbmVFbmQ7XG5cblx0c3RhcnRDb29yZCA9IGFDb29yZCAqIHNjYWxlUmF0aW8gKyB0cmFuc2xhdGUgKiB2aWV3cG9ydC56dyArIHZpZXdwb3J0Lnh5O1xuXHRlbmRDb29yZCA9IGJDb29yZCAqIHNjYWxlUmF0aW8gKyB0cmFuc2xhdGUgKiB2aWV3cG9ydC56dyArIHZpZXdwb3J0Lnh5O1xuXG5cdGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiAgKiAyLjAgLSAxLjAsIGRlcHRoLCAxKTtcblxuXHRlbmFibGVTdGFydE1pdGVyID0gc3RlcChkb3QoY3VyclRhbmdlbnQsIHByZXZUYW5nZW50KSwgLjUpO1xuXHRlbmFibGVFbmRNaXRlciA9IHN0ZXAoZG90KGN1cnJUYW5nZW50LCBuZXh0VGFuZ2VudCksIC41KTtcblxuXHQvL2JldmVsIG1pdGVyIGN1dG9mZnNcblx0aWYgKG1pdGVyTW9kZSA9PSAxLikge1xuXHRcdGlmIChlbmFibGVTdGFydE1pdGVyID09IDEuKSB7XG5cdFx0XHR2ZWMyIHN0YXJ0TWl0ZXJXaWR0aCA9IHZlYzIoc3RhcnRKb2luRGlyZWN0aW9uKSAqIHRoaWNrbmVzcyAqIG1pdGVyTGltaXQgKiAuNTtcblx0XHRcdHN0YXJ0Q3V0b2ZmID0gdmVjNChhQ29vcmQsIGFDb29yZCk7XG5cdFx0XHRzdGFydEN1dG9mZi56dyArPSB2ZWMyKC1zdGFydEpvaW5EaXJlY3Rpb24ueSwgc3RhcnRKb2luRGlyZWN0aW9uLngpIC8gc2NhbGVSYXRpbztcblx0XHRcdHN0YXJ0Q3V0b2ZmID0gc3RhcnRDdXRvZmYgKiBzY2FsZVJhdGlvLnh5eHkgKyB0cmFuc2xhdGUueHl4eSAqIHZpZXdwb3J0Lnp3enc7XG5cdFx0XHRzdGFydEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xuXHRcdFx0c3RhcnRDdXRvZmYgKz0gc3RhcnRNaXRlcldpZHRoLnh5eHk7XG5cdFx0fVxuXG5cdFx0aWYgKGVuYWJsZUVuZE1pdGVyID09IDEuKSB7XG5cdFx0XHR2ZWMyIGVuZE1pdGVyV2lkdGggPSB2ZWMyKGVuZEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogbWl0ZXJMaW1pdCAqIC41O1xuXHRcdFx0ZW5kQ3V0b2ZmID0gdmVjNChiQ29vcmQsIGJDb29yZCk7XG5cdFx0XHRlbmRDdXRvZmYuencgKz0gdmVjMigtZW5kSm9pbkRpcmVjdGlvbi55LCBlbmRKb2luRGlyZWN0aW9uLngpICAvIHNjYWxlUmF0aW87XG5cdFx0XHRlbmRDdXRvZmYgPSBlbmRDdXRvZmYgKiBzY2FsZVJhdGlvLnh5eHkgKyB0cmFuc2xhdGUueHl4eSAqIHZpZXdwb3J0Lnp3enc7XG5cdFx0XHRlbmRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcblx0XHRcdGVuZEN1dG9mZiArPSBlbmRNaXRlcldpZHRoLnh5eHk7XG5cdFx0fVxuXHR9XG5cblx0Ly9yb3VuZCBtaXRlciBjdXRvZmZzXG5cdGVsc2UgaWYgKG1pdGVyTW9kZSA9PSAyLikge1xuXHRcdGlmIChlbmFibGVTdGFydE1pdGVyID09IDEuKSB7XG5cdFx0XHR2ZWMyIHN0YXJ0TWl0ZXJXaWR0aCA9IHZlYzIoc3RhcnRKb2luRGlyZWN0aW9uKSAqIHRoaWNrbmVzcyAqIGFicyhkb3Qoc3RhcnRKb2luRGlyZWN0aW9uLCBjdXJyTm9ybWFsKSkgKiAuNTtcblx0XHRcdHN0YXJ0Q3V0b2ZmID0gdmVjNChhQ29vcmQsIGFDb29yZCk7XG5cdFx0XHRzdGFydEN1dG9mZi56dyArPSB2ZWMyKC1zdGFydEpvaW5EaXJlY3Rpb24ueSwgc3RhcnRKb2luRGlyZWN0aW9uLngpIC8gc2NhbGVSYXRpbztcblx0XHRcdHN0YXJ0Q3V0b2ZmID0gc3RhcnRDdXRvZmYgKiBzY2FsZVJhdGlvLnh5eHkgKyB0cmFuc2xhdGUueHl4eSAqIHZpZXdwb3J0Lnp3enc7XG5cdFx0XHRzdGFydEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xuXHRcdFx0c3RhcnRDdXRvZmYgKz0gc3RhcnRNaXRlcldpZHRoLnh5eHk7XG5cdFx0fVxuXG5cdFx0aWYgKGVuYWJsZUVuZE1pdGVyID09IDEuKSB7XG5cdFx0XHR2ZWMyIGVuZE1pdGVyV2lkdGggPSB2ZWMyKGVuZEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogYWJzKGRvdChlbmRKb2luRGlyZWN0aW9uLCBjdXJyTm9ybWFsKSkgKiAuNTtcblx0XHRcdGVuZEN1dG9mZiA9IHZlYzQoYkNvb3JkLCBiQ29vcmQpO1xuXHRcdFx0ZW5kQ3V0b2ZmLnp3ICs9IHZlYzIoLWVuZEpvaW5EaXJlY3Rpb24ueSwgZW5kSm9pbkRpcmVjdGlvbi54KSAgLyBzY2FsZVJhdGlvO1xuXHRcdFx0ZW5kQ3V0b2ZmID0gZW5kQ3V0b2ZmICogc2NhbGVSYXRpby54eXh5ICsgdHJhbnNsYXRlLnh5eHkgKiB2aWV3cG9ydC56d3p3O1xuXHRcdFx0ZW5kQ3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRlbmRDdXRvZmYgKz0gZW5kTWl0ZXJXaWR0aC54eXh5O1xuXHRcdH1cblx0fVxufVxuIl0pLGZyYWc6byhbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hQYXR0ZXJuO1xudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZSwgcGl4ZWxSYXRpbywgdGhpY2tuZXNzLCBvcGFjaXR5LCBpZCwgbWl0ZXJNb2RlO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMyIHRhbmdlbnQ7XG52YXJ5aW5nIHZlYzQgc3RhcnRDdXRvZmYsIGVuZEN1dG9mZjtcbnZhcnlpbmcgdmVjMiBzdGFydENvb3JkLCBlbmRDb29yZDtcbnZhcnlpbmcgZmxvYXQgZW5hYmxlU3RhcnRNaXRlciwgZW5hYmxlRW5kTWl0ZXI7XG5cbmZsb2F0IGRpc3RUb0xpbmUodmVjMiBwLCB2ZWMyIGEsIHZlYzIgYikge1xuXHR2ZWMyIGRpZmYgPSBiIC0gYTtcblx0dmVjMiBwZXJwID0gbm9ybWFsaXplKHZlYzIoLWRpZmYueSwgZGlmZi54KSk7XG5cdHJldHVybiBkb3QocCAtIGEsIHBlcnApO1xufVxuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGFscGhhID0gMS4sIGRpc3RUb1N0YXJ0LCBkaXN0VG9FbmQ7XG5cdGZsb2F0IGN1dG9mZiA9IHRoaWNrbmVzcyAqIC41O1xuXG5cdC8vYmV2ZWwgbWl0ZXJcblx0aWYgKG1pdGVyTW9kZSA9PSAxLikge1xuXHRcdGlmIChlbmFibGVTdGFydE1pdGVyID09IDEuKSB7XG5cdFx0XHRkaXN0VG9TdGFydCA9IGRpc3RUb0xpbmUoZ2xfRnJhZ0Nvb3JkLnh5LCBzdGFydEN1dG9mZi54eSwgc3RhcnRDdXRvZmYuencpO1xuXHRcdFx0aWYgKGRpc3RUb1N0YXJ0IDwgLTEuKSB7XG5cdFx0XHRcdGRpc2NhcmQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGFscGhhICo9IG1pbihtYXgoZGlzdFRvU3RhcnQgKyAxLiwgMC4pLCAxLik7XG5cdFx0fVxuXG5cdFx0aWYgKGVuYWJsZUVuZE1pdGVyID09IDEuKSB7XG5cdFx0XHRkaXN0VG9FbmQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgZW5kQ3V0b2ZmLnh5LCBlbmRDdXRvZmYuencpO1xuXHRcdFx0aWYgKGRpc3RUb0VuZCA8IC0xLikge1xuXHRcdFx0XHRkaXNjYXJkO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhbHBoYSAqPSBtaW4obWF4KGRpc3RUb0VuZCArIDEuLCAwLiksIDEuKTtcblx0XHR9XG5cdH1cblxuXHQvLyByb3VuZCBtaXRlclxuXHRlbHNlIGlmIChtaXRlck1vZGUgPT0gMi4pIHtcblx0XHRpZiAoZW5hYmxlU3RhcnRNaXRlciA9PSAxLikge1xuXHRcdFx0ZGlzdFRvU3RhcnQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgc3RhcnRDdXRvZmYueHksIHN0YXJ0Q3V0b2ZmLnp3KTtcblx0XHRcdGlmIChkaXN0VG9TdGFydCA8IDAuKSB7XG5cdFx0XHRcdGZsb2F0IHJhZGl1cyA9IGxlbmd0aChnbF9GcmFnQ29vcmQueHkgLSBzdGFydENvb3JkKTtcblxuXHRcdFx0XHRpZihyYWRpdXMgPiBjdXRvZmYgKyAuNSkge1xuXHRcdFx0XHRcdGRpc2NhcmQ7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWxwaGEgLT0gc21vb3Roc3RlcChjdXRvZmYgLSAuNSwgY3V0b2ZmICsgLjUsIHJhZGl1cyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGVuYWJsZUVuZE1pdGVyID09IDEuKSB7XG5cdFx0XHRkaXN0VG9FbmQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgZW5kQ3V0b2ZmLnh5LCBlbmRDdXRvZmYuencpO1xuXHRcdFx0aWYgKGRpc3RUb0VuZCA8IDAuKSB7XG5cdFx0XHRcdGZsb2F0IHJhZGl1cyA9IGxlbmd0aChnbF9GcmFnQ29vcmQueHkgLSBlbmRDb29yZCk7XG5cblx0XHRcdFx0aWYocmFkaXVzID4gY3V0b2ZmICsgLjUpIHtcblx0XHRcdFx0XHRkaXNjYXJkO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFscGhhIC09IHNtb290aHN0ZXAoY3V0b2ZmIC0gLjUsIGN1dG9mZiArIC41LCByYWRpdXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZsb2F0IHQgPSBmcmFjdChkb3QodGFuZ2VudCwgZ2xfRnJhZ0Nvb3JkLnh5KSAvIGRhc2hTaXplKSAqIC41ICsgLjI1O1xuXHRmbG9hdCBkYXNoID0gdGV4dHVyZTJEKGRhc2hQYXR0ZXJuLCB2ZWMyKHQsIC41KSkucjtcblxuXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IGFscGhhICogb3BhY2l0eSAqIGRhc2g7XG59XG4iXSksYXR0cmlidXRlczp7bGluZUVuZDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDowfSxsaW5lVG9wOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjR9LGFDb2xvcjp7YnVmZmVyOnQucHJvcCgiY29sb3JCdWZmZXIiKSxzdHJpZGU6NCxvZmZzZXQ6MCxkaXZpc29yOjF9LGJDb2xvcjp7YnVmZmVyOnQucHJvcCgiY29sb3JCdWZmZXIiKSxzdHJpZGU6NCxvZmZzZXQ6NCxkaXZpc29yOjF9LHByZXZDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MCxkaXZpc29yOjF9LGFDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OCxkaXZpc29yOjF9LGJDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MTYsZGl2aXNvcjoxfSxuZXh0Q29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjI0LGRpdmlzb3I6MX19fSxuKSl9Y2F0Y2godCl7ZT1hfXJldHVybntmaWxsOnQoe3ByaW1pdGl2ZToidHJpYW5nbGUiLGVsZW1lbnRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudHJpYW5nbGVzfSxvZmZzZXQ6MCx2ZXJ0Om8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbiwgcG9zaXRpb25GcmFjdDtcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvLCBpZDtcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxuY29uc3QgZmxvYXQgTUFYX0xJTkVTID0gMjU2Ljtcblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCBkZXB0aCA9IChNQVhfTElORVMgLSA0LiAtIGlkKSAvIChNQVhfTElORVMpO1xuXG5cdHZlYzIgcG9zaXRpb24gPSBwb3NpdGlvbiAqIHNjYWxlICsgdHJhbnNsYXRlXG4gICAgICAgKyBwb3NpdGlvbkZyYWN0ICogc2NhbGUgKyB0cmFuc2xhdGVGcmFjdFxuICAgICAgICsgcG9zaXRpb24gKiBzY2FsZUZyYWN0XG4gICAgICAgKyBwb3NpdGlvbkZyYWN0ICogc2NhbGVGcmFjdDtcblxuXHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gKiAyLjAgLSAxLjAsIGRlcHRoLCAxKTtcblxuXHRmcmFnQ29sb3IgPSBjb2xvciAvIDI1NS47XG5cdGZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG59XG4iXSksZnJhZzpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59XG4iXSksdW5pZm9ybXM6e3NjYWxlOnQucHJvcCgic2NhbGUiKSxjb2xvcjp0LnByb3AoImZpbGwiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSx0cmFuc2xhdGU6dC5wcm9wKCJ0cmFuc2xhdGUiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHBpeGVsUmF0aW86dC5jb250ZXh0KCJwaXhlbFJhdGlvIiksaWQ6dC5wcm9wKCJpZCIpLHZpZXdwb3J0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2Uudmlld3BvcnQueCxlLnZpZXdwb3J0LnksdC52aWV3cG9ydFdpZHRoLHQudmlld3BvcnRIZWlnaHRdfX0sYXR0cmlidXRlczp7cG9zaXRpb246e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0Ojh9LHBvc2l0aW9uRnJhY3Q6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uRnJhY3RCdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OH19LGJsZW5kOm4uYmxlbmQsZGVwdGg6e2VuYWJsZTohMX0sc2Npc3NvcjpuLnNjaXNzb3Isc3RlbmNpbDpuLnN0ZW5jaWwsdmlld3BvcnQ6bi52aWV3cG9ydH0pLHJlY3Q6YSxtaXRlcjplfX0sdi5kZWZhdWx0cz17ZGFzaGVzOm51bGwsam9pbjoibWl0ZXIiLG1pdGVyTGltaXQ6MSx0aGlja25lc3M6MTAsY2FwOiJzcXVhcmUiLGNvbG9yOiJibGFjayIsb3BhY2l0eToxLG92ZXJsYXk6ITEsdmlld3BvcnQ6bnVsbCxyYW5nZTpudWxsLGNsb3NlOiExLGZpbGw6bnVsbH0sdi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07ZS5sZW5ndGgmJih0PXRoaXMpLnVwZGF0ZS5hcHBseSh0LGUpLHRoaXMuZHJhdygpfSx2LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4oZS5sZW5ndGg/ZTp0aGlzLnBhc3NlcykuZm9yRWFjaChmdW5jdGlvbihlLHIpe3ZhciBuO2lmKGUmJkFycmF5LmlzQXJyYXkoZSkpcmV0dXJuKG49dCkuZHJhdy5hcHBseShuLGUpOyJudW1iZXIiPT10eXBlb2YgZSYmKGU9dC5wYXNzZXNbZV0pLGUmJmUuY291bnQ+MSYmZS5vcGFjaXR5JiYodC5yZWdsLl9yZWZyZXNoKCksZS5maWxsJiZlLnRyaWFuZ2xlcyYmZS50cmlhbmdsZXMubGVuZ3RoPjImJnQuc2hhZGVycy5maWxsKGUpLGUudGhpY2tuZXNzJiYoZS5zY2FsZVswXSplLnZpZXdwb3J0LndpZHRoPnYucHJlY2lzaW9uVGhyZXNob2xkfHxlLnNjYWxlWzFdKmUudmlld3BvcnQuaGVpZ2h0PnYucHJlY2lzaW9uVGhyZXNob2xkP3Quc2hhZGVycy5yZWN0KGUpOiJyZWN0Ij09PWUuam9pbnx8IWUuam9pbiYmKGUudGhpY2tuZXNzPD0yfHxlLmNvdW50Pj12Lm1heFBvaW50cyk/dC5zaGFkZXJzLnJlY3QoZSk6dC5zaGFkZXJzLm1pdGVyKGUpKSl9KSx0aGlzfSx2LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0KXtudWxsIT10Lmxlbmd0aD8ibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PVt7cG9zaXRpb25zOnR9XSk6QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgcj10aGlzLnJlZ2wsbz10aGlzLmdsO2lmKHQuZm9yRWFjaChmdW5jdGlvbih0LGgpe3ZhciBkPWUucGFzc2VzW2hdO2lmKHZvaWQgMCE9PXQpaWYobnVsbCE9PXQpe2lmKCJudW1iZXIiPT10eXBlb2YgdFswXSYmKHQ9e3Bvc2l0aW9uczp0fSksdD1zKHQse3Bvc2l0aW9uczoicG9zaXRpb25zIHBvaW50cyBkYXRhIGNvb3JkcyIsdGhpY2tuZXNzOiJ0aGlja25lc3MgbGluZVdpZHRoIGxpbmVXaWR0aHMgbGluZS13aWR0aCBsaW5ld2lkdGggd2lkdGggc3Ryb2tlLXdpZHRoIHN0cm9rZXdpZHRoIHN0cm9rZVdpZHRoIixqb2luOiJsaW5lSm9pbiBsaW5lam9pbiBqb2luIHR5cGUgbW9kZSIsbWl0ZXJMaW1pdDoibWl0ZXJsaW1pdCBtaXRlckxpbWl0IixkYXNoZXM6ImRhc2ggZGFzaGVzIGRhc2hhcnJheSBkYXNoLWFycmF5IGRhc2hBcnJheSIsY29sb3I6ImNvbG9yIGNvbG91ciBzdHJva2UgY29sb3JzIGNvbG91cnMgc3Ryb2tlLWNvbG9yIHN0cm9rZUNvbG9yIixmaWxsOiJmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIixvcGFjaXR5OiJhbHBoYSBvcGFjaXR5IixvdmVybGF5OiJvdmVybGF5IGNyZWFzZSBvdmVybGFwIGludGVyc2VjdCIsY2xvc2U6ImNsb3NlZCBjbG9zZSBjbG9zZWQtcGF0aCBjbG9zZVBhdGgiLHJhbmdlOiJyYW5nZSBkYXRhQm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld0JveCIsaG9sZToiaG9sZXMgaG9sZSBob2xsb3cifSksZHx8KGUucGFzc2VzW2hdPWQ9e2lkOmgsc2NhbGU6bnVsbCxzY2FsZUZyYWN0Om51bGwsdHJhbnNsYXRlOm51bGwsdHJhbnNsYXRlRnJhY3Q6bnVsbCxjb3VudDowLGhvbGU6W10sZGVwdGg6MCxkYXNoTGVuZ3RoOjEsZGFzaFRleHR1cmU6ci50ZXh0dXJlKHtjaGFubmVsczoxLGRhdGE6bmV3IFVpbnQ4QXJyYXkoWzI1NV0pLHdpZHRoOjEsaGVpZ2h0OjEsbWFnOiJsaW5lYXIiLG1pbjoibGluZWFyIn0pLGNvbG9yQnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToidWludDgiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxwb3NpdGlvbkJ1ZmZlcjpyLmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5fSkscG9zaXRpb25GcmFjdEJ1ZmZlcjpyLmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5fSl9LHQ9aSh7fSx2LmRlZmF1bHRzLHQpKSxudWxsIT10LnRoaWNrbmVzcyYmKGQudGhpY2tuZXNzPXBhcnNlRmxvYXQodC50aGlja25lc3MpKSxudWxsIT10Lm9wYWNpdHkmJihkLm9wYWNpdHk9cGFyc2VGbG9hdCh0Lm9wYWNpdHkpKSxudWxsIT10Lm1pdGVyTGltaXQmJihkLm1pdGVyTGltaXQ9cGFyc2VGbG9hdCh0Lm1pdGVyTGltaXQpKSxudWxsIT10Lm92ZXJsYXkmJihkLm92ZXJsYXk9ISF0Lm92ZXJsYXksaDx2Lm1heExpbmVzJiYoZC5kZXB0aD0yKih2Lm1heExpbmVzLTEtaCV2Lm1heExpbmVzKS92Lm1heExpbmVzLTEpKSxudWxsIT10LmpvaW4mJihkLmpvaW49dC5qb2luKSxudWxsIT10LmhvbGUmJihkLmhvbGU9dC5ob2xlKSxudWxsIT10LmZpbGwmJihkLmZpbGw9dC5maWxsP24odC5maWxsLCJ1aW50OCIpOm51bGwpLG51bGwhPXQudmlld3BvcnQmJihkLnZpZXdwb3J0PWcodC52aWV3cG9ydCkpLGQudmlld3BvcnR8fChkLnZpZXdwb3J0PWcoW28uZHJhd2luZ0J1ZmZlcldpZHRoLG8uZHJhd2luZ0J1ZmZlckhlaWdodF0pKSxudWxsIT10LmNsb3NlJiYoZC5jbG9zZT10LmNsb3NlKSxudWxsPT09dC5wb3NpdGlvbnMmJih0LnBvc2l0aW9ucz1bXSksdC5wb3NpdGlvbnMpe3ZhciBtLHk7aWYodC5wb3NpdGlvbnMueCYmdC5wb3NpdGlvbnMueSl7dmFyIHg9dC5wb3NpdGlvbnMueCxiPXQucG9zaXRpb25zLnk7eT1kLmNvdW50PU1hdGgubWF4KHgubGVuZ3RoLGIubGVuZ3RoKSxtPW5ldyBGbG9hdDY0QXJyYXkoMip5KTtmb3IodmFyIF89MDtfPHk7XysrKW1bMipfXT14W19dLG1bMipfKzFdPWJbX119ZWxzZSBtPWwodC5wb3NpdGlvbnMsImZsb2F0NjQiKSx5PWQuY291bnQ9TWF0aC5mbG9vcihtLmxlbmd0aC8yKTt2YXIgdz1kLmJvdW5kcz1hKG0sMik7aWYoZC5maWxsKXtmb3IodmFyIGs9W10sVD17fSxNPTAsQT0wLFM9MCxFPWQuY291bnQ7QTxFO0ErKyl7dmFyIEw9bVsyKkFdLEM9bVsyKkErMV07aXNOYU4oTCl8fGlzTmFOKEMpfHxudWxsPT1MfHxudWxsPT1DPyhMPW1bMipNXSxDPW1bMipNKzFdLFRbQV09TSk6TT1BLGtbUysrXT1MLGtbUysrXT1DfWZvcih2YXIgUD1jKGssZC5ob2xlfHxbXSksTz0wLHo9UC5sZW5ndGg7Tzx6O08rKyludWxsIT1UW1BbT11dJiYoUFtPXT1UW1BbT11dKTtkLnRyaWFuZ2xlcz1QfXZhciBJPW5ldyBGbG9hdDY0QXJyYXkobSk7dShJLDIsdyk7dmFyIEQ9bmV3IEZsb2F0NjRBcnJheSgyKnkrNik7ZC5jbG9zZT9tWzBdPT09bVsyKnktMl0mJm1bMV09PT1tWzIqeS0xXT8oRFswXT1JWzIqeS00XSxEWzFdPUlbMip5LTNdKTooRFswXT1JWzIqeS0yXSxEWzFdPUlbMip5LTFdKTooRFswXT1JWzBdLERbMV09SVsxXSksRC5zZXQoSSwyKSxkLmNsb3NlP21bMF09PT1tWzIqeS0yXSYmbVsxXT09PW1bMip5LTFdPyhEWzIqeSsyXT1JWzJdLERbMip5KzNdPUlbM10sZC5jb3VudC09MSk6KERbMip5KzJdPUlbMF0sRFsyKnkrM109SVsxXSxEWzIqeSs0XT1JWzJdLERbMip5KzVdPUlbM10pOihEWzIqeSsyXT1JWzIqeS0yXSxEWzIqeSszXT1JWzIqeS0xXSxEWzIqeSs0XT1JWzIqeS0yXSxEWzIqeSs1XT1JWzIqeS0xXSksZC5wb3NpdGlvbkJ1ZmZlcihmKEQpKSxkLnBvc2l0aW9uRnJhY3RCdWZmZXIocChEKSl9aWYodC5yYW5nZT9kLnJhbmdlPXQucmFuZ2U6ZC5yYW5nZXx8KGQucmFuZ2U9ZC5ib3VuZHMpLCh0LnJhbmdlfHx0LnBvc2l0aW9ucykmJmQuY291bnQpe3ZhciBSPWQuYm91bmRzLEY9UlsyXS1SWzBdLEI9UlszXS1SWzFdLE49ZC5yYW5nZVsyXS1kLnJhbmdlWzBdLGo9ZC5yYW5nZVszXS1kLnJhbmdlWzFdO2Quc2NhbGU9W0YvTixCL2pdLGQudHJhbnNsYXRlPVstZC5yYW5nZVswXS9OK1JbMF0vTnx8MCwtZC5yYW5nZVsxXS9qK1JbMV0vanx8MF0sZC5zY2FsZUZyYWN0PXAoZC5zY2FsZSksZC50cmFuc2xhdGVGcmFjdD1wKGQudHJhbnNsYXRlKX1pZih0LmRhc2hlcyl7dmFyIFYsVT0wO2lmKCF0LmRhc2hlc3x8dC5kYXNoZXMubGVuZ3RoPDIpVT0xLFY9bmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdKTtlbHNle1U9MDtmb3IodmFyIHE9MDtxPHQuZGFzaGVzLmxlbmd0aDsrK3EpVSs9dC5kYXNoZXNbcV07Vj1uZXcgVWludDhBcnJheShVKnYuZGFzaE11bHQpO2Zvcih2YXIgSD0wLEc9MjU1LFk9MDtZPDI7WSsrKWZvcih2YXIgVz0wO1c8dC5kYXNoZXMubGVuZ3RoOysrVyl7Zm9yKHZhciBYPTAsWj10LmRhc2hlc1tXXSp2LmRhc2hNdWx0Ki41O1g8WjsrK1gpVltIKytdPUc7R149MjU1fX1kLmRhc2hMZW5ndGg9VSxkLmRhc2hUZXh0dXJlKHtjaGFubmVsczoxLGRhdGE6Vix3aWR0aDpWLmxlbmd0aCxoZWlnaHQ6MSxtYWc6ImxpbmVhciIsbWluOiJsaW5lYXIifSwwLDApfWlmKHQuY29sb3Ipe3ZhciBKPWQuY291bnQsSz10LmNvbG9yO0t8fChLPSJ0cmFuc3BhcmVudCIpO3ZhciBRPW5ldyBVaW50OEFycmF5KDQqSis0KTtpZihBcnJheS5pc0FycmF5KEspJiYibnVtYmVyIiE9dHlwZW9mIEtbMF0pe2Zvcih2YXIgJD0wOyQ8SjskKyspe3ZhciB0dD1uKEtbJF0sInVpbnQ4Iik7US5zZXQodHQsNCokKX1RLnNldChuKEtbMF0sInVpbnQ4IiksNCpKKX1lbHNlIGZvcih2YXIgZXQ9bihLLCJ1aW50OCIpLHJ0PTA7cnQ8SisxO3J0KyspUS5zZXQoZXQsNCpydCk7ZC5jb2xvckJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4IixkYXRhOlF9KX19ZWxzZSBlLnBhc3Nlc1toXT1udWxsfSksdC5sZW5ndGg8dGhpcy5wYXNzZXMubGVuZ3RoKXtmb3IodmFyIGg9dC5sZW5ndGg7aDx0aGlzLnBhc3Nlcy5sZW5ndGg7aCsrKXt2YXIgZD1lLnBhc3Nlc1toXTtkJiYoZC5jb2xvckJ1ZmZlci5kZXN0cm95KCksZC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksZC5kYXNoVGV4dHVyZS5kZXN0cm95KCkpfXRoaXMucGFzc2VzLmxlbmd0aD10Lmxlbmd0aH1mb3IodmFyIG09W10seT0wO3k8dGhpcy5wYXNzZXMubGVuZ3RoO3krKyludWxsIT09ZS5wYXNzZXNbeV0mJm0ucHVzaChlLnBhc3Nlc1t5XSk7cmV0dXJuIHRoaXMucGFzc2VzPW0sdGhpc319LHYucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXNzZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNvbG9yQnVmZmVyLmRlc3Ryb3koKSx0LnBvc2l0aW9uQnVmZmVyLmRlc3Ryb3koKSx0LmRhc2hUZXh0dXJlLmRlc3Ryb3koKX0pLHRoaXMucGFzc2VzLmxlbmd0aD0wLHRoaXN9fSx7ImFycmF5LWJvdW5kcyI6NjgsImFycmF5LW5vcm1hbGl6ZSI6NDk0LCJjb2xvci1ub3JtYWxpemUiOjEyMixlYXJjdXQ6MTczLCJlczYtd2Vhay1tYXAiOjQ5NSwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjMwLGdsc2xpZnk6NDExLCJvYmplY3QtYXNzaWduIjo0NTYsInBhcnNlLXJlY3QiOjQ2MSwicGljay1ieS1hbGlhcyI6NDY3LCJ0by1mbG9hdDMyIjo1Mzd9XSw0OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYXJyYXktYm91bmRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZighdHx8bnVsbD09dC5sZW5ndGgpdGhyb3cgRXJyb3IoIkFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheSIpO251bGw9PWUmJihlPTEpO251bGw9PXImJihyPW4odCxlKSk7Zm9yKHZhciBhPTA7YTxlO2ErKyl7dmFyIGk9cltlK2FdLG89clthXSxzPWEsbD10Lmxlbmd0aDtpZihpPT09MS8wJiZvPT09LTEvMClmb3Iocz1hO3M8bDtzKz1lKXRbc109dFtzXT09PWk/MTp0W3NdPT09bz8wOi41O2Vsc2UgaWYoaT09PTEvMClmb3Iocz1hO3M8bDtzKz1lKXRbc109dFtzXT09PWk/MTowO2Vsc2UgaWYobz09PS0xLzApZm9yKHM9YTtzPGw7cys9ZSl0W3NdPXRbc109PT1vPzA6MTtlbHNle3ZhciBjPWktbztmb3Iocz1hO3M8bDtzKz1lKWlzTmFOKHRbc10pfHwodFtzXT0wPT09Yz8uNToodFtzXS1vKS9jKX19cmV0dXJuIHR9fSx7ImFycmF5LWJvdW5kcyI6Njh9XSw0OTU6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMzIwXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9pcy1pbXBsZW1lbnRlZCI6NDk2LCIuL3BvbHlmaWxsIjo0OTgsZHVwOjMyMH1dLDQ5NjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVszMjFdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDozMjF9XSw0OTc6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMzIyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MzIyfV0sNDk4OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzMyM11bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vaXMtbmF0aXZlLWltcGxlbWVudGVkIjo0OTcsZDoxNTMsZHVwOjMyMywiZXM1LWV4dC9vYmplY3QvaXMtdmFsdWUiOjE5NywiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiI6MjAzLCJlczUtZXh0L29iamVjdC92YWxpZC1vYmplY3QiOjIwNywiZXM1LWV4dC9vYmplY3QvdmFsaWQtdmFsdWUiOjIwOCwiZXM1LWV4dC9zdHJpbmcvcmFuZG9tLXVuaXEiOjIxMywiZXM2LWl0ZXJhdG9yL2Zvci1vZiI6MjE1LCJlczYtaXRlcmF0b3IvZ2V0IjoyMTYsImVzNi1zeW1ib2wiOjIyMn1dLDQ5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPVtdLG49ITAsYT0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhZXx8ci5sZW5ndGghPT1lKTtuPSEwKTt9Y2F0Y2godCl7YT0hMCxpPXR9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGl9fXJldHVybiByfSh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxyPW5ldyBBcnJheSh0Lmxlbmd0aCk7ZTx0Lmxlbmd0aDtlKyspcltlXT10W2VdO3JldHVybiByfX0odCl8fGZ1bmN0aW9uKHQpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfXZhciBpPXQoImNvbG9yLW5vcm1hbGl6ZSIpLG89dCgiYXJyYXktYm91bmRzIikscz10KCJjb2xvci1pZCIpLGw9dCgicG9pbnQtY2x1c3RlciIpLGM9dCgib2JqZWN0LWFzc2lnbiIpLHU9dCgiZ2xzbGlmeSIpLGg9dCgicGljay1ieS1hbGlhcyIpLGY9dCgidXBkYXRlLWRpZmYiKSxwPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSxkPXQoImlzLWlleHBsb3JlciIpLGc9dCgidG8tZmxvYXQzMiIpLHY9dCgicGFyc2UtcmVjdCIpLG09eTtmdW5jdGlvbiB5KHQsZSl7dmFyIHI9dGhpcztpZighKHRoaXMgaW5zdGFuY2VvZiB5KSlyZXR1cm4gbmV3IHkodCxlKTsiZnVuY3Rpb24iPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTooZT10LHQ9bnVsbCksZSYmZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKTt2YXIgbixhPSh0PWUucmVnbCkuX2dsLGk9W107dGhpcy50b29NYW55Q29sb3JzPWQsbj10LnRleHR1cmUoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMTAyMCksd2lkdGg6MjU1LGhlaWdodDoxLHR5cGU6InVpbnQ4Iixmb3JtYXQ6InJnYmEiLHdyYXBTOiJjbGFtcCIsd3JhcFQ6ImNsYW1wIixtYWc6Im5lYXJlc3QiLG1pbjoibmVhcmVzdCJ9KSxjKHRoaXMse3JlZ2w6dCxnbDphLGdyb3VwczpbXSxtYXJrZXJDYWNoZTpbbnVsbF0sbWFya2VyVGV4dHVyZXM6W251bGxdLHBhbGV0dGU6aSxwYWxldHRlSWRzOnt9LHBhbGV0dGVUZXh0dXJlOm4sbWF4Q29sb3JzOjI1NSxtYXhTaXplOjEwMCxjYW52YXM6YS5jYW52YXN9KSx0aGlzLnVwZGF0ZShlKTt2YXIgbz17dW5pZm9ybXM6e3BpeGVsUmF0aW86dC5jb250ZXh0KCJwaXhlbFJhdGlvIikscGFsZXR0ZTpuLHBhbGV0dGVTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW3IudG9vTWFueUNvbG9ycz8wOjI1NSxuLmhlaWdodF19LHNjYWxlOnQucHJvcCgic2NhbGUiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZTp0LnByb3AoInRyYW5zbGF0ZSIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLG1hcmtlcjp0LnByb3AoIm1hcmtlclRleHR1cmUiKX0sYXR0cmlidXRlczp7eDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnhBdHRyfHx7YnVmZmVyOmUucG9zaXRpb25CdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjB9fSx5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueUF0dHJ8fHtidWZmZXI6ZS5wb3NpdGlvbkJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6NH19LHhGcmFjdDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnhBdHRyP3tjb25zdGFudDpbMCwwXX06e2J1ZmZlcjplLnBvc2l0aW9uRnJhY3RCdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjB9fSx5RnJhY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS55QXR0cj97Y29uc3RhbnQ6WzAsMF19OntidWZmZXI6ZS5wb3NpdGlvbkZyYWN0QnVmZmVyLHN0cmlkZTo4LG9mZnNldDo0fX0sc2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBlLnNpemUubGVuZ3RoP3tidWZmZXI6ZS5zaXplQnVmZmVyLHN0cmlkZToyLG9mZnNldDowfTp7Y29uc3RhbnQ6W01hdGgucm91bmQoMjU1KmUuc2l6ZS9yLm1heFNpemUpXX19LGJvcmRlclNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5ib3JkZXJTaXplLmxlbmd0aD97YnVmZmVyOmUuc2l6ZUJ1ZmZlcixzdHJpZGU6MixvZmZzZXQ6MX06e2NvbnN0YW50OltNYXRoLnJvdW5kKDI1NSplLmJvcmRlclNpemUvci5tYXhTaXplKV19fSxjb2xvcklkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuY29sb3IubGVuZ3RoP3tidWZmZXI6ZS5jb2xvckJ1ZmZlcixzdHJpZGU6ci50b29NYW55Q29sb3JzPzg6NCxvZmZzZXQ6MH06e2NvbnN0YW50OnIudG9vTWFueUNvbG9ycz9pLnNsaWNlKDQqZS5jb2xvciw0KmUuY29sb3IrNCk6W2UuY29sb3JdfX0sYm9yZGVyQ29sb3JJZDpmdW5jdGlvbih0LGUpe3JldHVybiBlLmJvcmRlckNvbG9yLmxlbmd0aD97YnVmZmVyOmUuY29sb3JCdWZmZXIsc3RyaWRlOnIudG9vTWFueUNvbG9ycz84OjQsb2Zmc2V0OnIudG9vTWFueUNvbG9ycz80OjJ9Ontjb25zdGFudDpyLnRvb01hbnlDb2xvcnM/aS5zbGljZSg0KmUuYm9yZGVyQ29sb3IsNCplLmJvcmRlckNvbG9yKzQpOltlLmJvcmRlckNvbG9yXX19LGlzQWN0aXZlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuITA9PT1lLmFjdGl2YXRpb24/e2NvbnN0YW50OlsxXX06ZS5hY3RpdmF0aW9uP2UuYWN0aXZhdGlvbjp7Y29uc3RhbnQ6WzBdfX19LGJsZW5kOntlbmFibGU6ITAsY29sb3I6WzAsMCwwLDFdLGZ1bmM6e3NyY1JHQjoic3JjIGFscGhhIixkc3RSR0I6Im9uZSBtaW51cyBzcmMgYWxwaGEiLHNyY0FscGhhOiJvbmUgbWludXMgZHN0IGFscGhhIixkc3RBbHBoYToib25lIn19LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKCJ2aWV3cG9ydCIpfSx2aWV3cG9ydDp0LnByb3AoInZpZXdwb3J0Iiksc3RlbmNpbDp7ZW5hYmxlOiExfSxkZXB0aDp7ZW5hYmxlOiExfSxlbGVtZW50czp0LnByb3AoImVsZW1lbnRzIiksY291bnQ6dC5wcm9wKCJjb3VudCIpLG9mZnNldDp0LnByb3AoIm9mZnNldCIpLHByaW1pdGl2ZToicG9pbnRzIn0scz1jKHt9LG8pO3MuZnJhZz11KFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xudmFyeWluZyBmbG9hdCBmcmFnV2lkdGgsIGZyYWdCb3JkZXJDb2xvckxldmVsLCBmcmFnQ29sb3JMZXZlbDtcblxudW5pZm9ybSBzYW1wbGVyMkQgbWFya2VyO1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvLCBvcGFjaXR5O1xuXG5mbG9hdCBzbW9vdGhTdGVwKGZsb2F0IHgsIGZsb2F0IHkpIHtcbiAgcmV0dXJuIDEuMCAvICgxLjAgKyBleHAoNTAuMCooeCAtIHkpKSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgZGlzdCA9IHRleHR1cmUyRChtYXJrZXIsIGdsX1BvaW50Q29vcmQpLnIsIGRlbHRhID0gZnJhZ1dpZHRoO1xuXG4gIC8vIG1heC1kaXN0YW5jZSBhbHBoYVxuICBpZiAoZGlzdCA8IDAuMDAzKSBkaXNjYXJkO1xuXG4gIC8vIG51bGwtYm9yZGVyIGNhc2VcbiAgaWYgKGZyYWdCb3JkZXJDb2xvckxldmVsID09IGZyYWdDb2xvckxldmVsIHx8IGZyYWdCb3JkZXJDb2xvci5hID09IDAuKSB7XG4gICAgZmxvYXQgY29sb3JBbXQgPSBzbW9vdGhzdGVwKC41IC0gZGVsdGEsIC41ICsgZGVsdGEsIGRpc3QpO1xuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoZnJhZ0NvbG9yLnJnYiwgY29sb3JBbXQgKiBmcmFnQ29sb3IuYSAqIG9wYWNpdHkpO1xuICB9XG4gIGVsc2Uge1xuICAgIGZsb2F0IGJvcmRlckNvbG9yQW10ID0gc21vb3Roc3RlcChmcmFnQm9yZGVyQ29sb3JMZXZlbCAtIGRlbHRhLCBmcmFnQm9yZGVyQ29sb3JMZXZlbCArIGRlbHRhLCBkaXN0KTtcbiAgICBmbG9hdCBjb2xvckFtdCA9IHNtb290aHN0ZXAoZnJhZ0NvbG9yTGV2ZWwgLSBkZWx0YSwgZnJhZ0NvbG9yTGV2ZWwgKyBkZWx0YSwgZGlzdCk7XG5cbiAgICB2ZWM0IGNvbG9yID0gZnJhZ0JvcmRlckNvbG9yO1xuICAgIGNvbG9yLmEgKj0gYm9yZGVyQ29sb3JBbXQ7XG4gICAgY29sb3IgPSBtaXgoY29sb3IsIGZyYWdDb2xvciwgY29sb3JBbXQpO1xuICAgIGNvbG9yLmEgKj0gb3BhY2l0eTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xuICB9XG5cbn1cbiJdKSxzLnZlcnQ9dShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSBmbG9hdCB4LCB5LCB4RnJhY3QsIHlGcmFjdDtcbmF0dHJpYnV0ZSBmbG9hdCBzaXplLCBib3JkZXJTaXplO1xuYXR0cmlidXRlIHZlYzQgY29sb3JJZCwgYm9yZGVyQ29sb3JJZDtcbmF0dHJpYnV0ZSBmbG9hdCBpc0FjdGl2ZTtcblxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0LCBwYWxldHRlU2l6ZTtcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGU7XG5cbmNvbnN0IGZsb2F0IG1heFNpemUgPSAxMDAuO1xuY29uc3QgZmxvYXQgYm9yZGVyTGV2ZWwgPSAuNTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xudmFyeWluZyBmbG9hdCBmcmFnUG9pbnRTaXplLCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGgsIGZyYWdCb3JkZXJDb2xvckxldmVsLCBmcmFnQ29sb3JMZXZlbDtcblxuYm9vbCBpc0RpcmVjdCA9IChwYWxldHRlU2l6ZS54IDwgMS4pO1xuXG52ZWM0IGdldENvbG9yKHZlYzQgaWQpIHtcbiAgcmV0dXJuIGlzRGlyZWN0ID8gaWQgLyAyNTUuIDogdGV4dHVyZTJEKHBhbGV0dGUsXG4gICAgdmVjMihcbiAgICAgIChpZC54ICsgLjUpIC8gcGFsZXR0ZVNpemUueCxcbiAgICAgIChpZC55ICsgLjUpIC8gcGFsZXR0ZVNpemUueVxuICAgIClcbiAgKTtcbn1cblxudm9pZCBtYWluKCkge1xuICBpZiAoaXNBY3RpdmUgPT0gMC4pIHJldHVybjtcblxuICB2ZWMyIHBvc2l0aW9uID0gdmVjMih4LCB5KTtcbiAgdmVjMiBwb3NpdGlvbkZyYWN0ID0gdmVjMih4RnJhY3QsIHlGcmFjdCk7XG5cbiAgdmVjNCBjb2xvciA9IGdldENvbG9yKGNvbG9ySWQpO1xuICB2ZWM0IGJvcmRlckNvbG9yID0gZ2V0Q29sb3IoYm9yZGVyQ29sb3JJZCk7XG5cbiAgZmxvYXQgc2l6ZSA9IHNpemUgKiBtYXhTaXplIC8gMjU1LjtcbiAgZmxvYXQgYm9yZGVyU2l6ZSA9IGJvcmRlclNpemUgKiBtYXhTaXplIC8gMjU1LjtcblxuICBnbF9Qb2ludFNpemUgPSAyLiAqIHNpemUgKiBwaXhlbFJhdGlvO1xuICBmcmFnUG9pbnRTaXplID0gc2l6ZSAqIHBpeGVsUmF0aW87XG5cbiAgdmVjMiBwb3MgPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlRnJhY3Q7XG5cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyAqIDIuIC0gMS4sIDAsIDEpO1xuXG4gIGZyYWdDb2xvciA9IGNvbG9yO1xuICBmcmFnQm9yZGVyQ29sb3IgPSBib3JkZXJDb2xvcjtcbiAgZnJhZ1dpZHRoID0gMS4gLyBnbF9Qb2ludFNpemU7XG5cbiAgZnJhZ0JvcmRlckNvbG9yTGV2ZWwgPSBjbGFtcChib3JkZXJMZXZlbCAtIGJvcmRlckxldmVsICogYm9yZGVyU2l6ZSAvIHNpemUsIDAuLCAxLik7XG4gIGZyYWdDb2xvckxldmVsID0gY2xhbXAoYm9yZGVyTGV2ZWwgKyAoMS4gLSBib3JkZXJMZXZlbCkgKiBib3JkZXJTaXplIC8gc2l6ZSwgMC4sIDEuKTtcbn0iXSksdGhpcy5kcmF3TWFya2VyPXQocyk7dmFyIGw9Yyh7fSxvKTtsLmZyYWc9dShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcblxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyBmbG9hdCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGg7XG5cbmZsb2F0IHNtb290aFN0ZXAoZmxvYXQgZWRnZTAsIGZsb2F0IGVkZ2UxLCBmbG9hdCB4KSB7XG5cdGZsb2F0IHQ7XG5cdHQgPSBjbGFtcCgoeCAtIGVkZ2UwKSAvIChlZGdlMSAtIGVkZ2UwKSwgMC4wLCAxLjApO1xuXHRyZXR1cm4gdCAqIHQgKiAoMy4wIC0gMi4wICogdCk7XG59XG5cbnZvaWQgbWFpbigpIHtcblx0ZmxvYXQgcmFkaXVzLCBhbHBoYSA9IDEuMCwgZGVsdGEgPSBmcmFnV2lkdGg7XG5cblx0cmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xuXG5cdGlmIChyYWRpdXMgPiAxLjAgKyBkZWx0YSkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblxuXHRhbHBoYSAtPSBzbW9vdGhzdGVwKDEuMCAtIGRlbHRhLCAxLjAgKyBkZWx0YSwgcmFkaXVzKTtcblxuXHRmbG9hdCBib3JkZXJSYWRpdXMgPSBmcmFnQm9yZGVyUmFkaXVzO1xuXHRmbG9hdCByYXRpbyA9IHNtb290aHN0ZXAoYm9yZGVyUmFkaXVzIC0gZGVsdGEsIGJvcmRlclJhZGl1cyArIGRlbHRhLCByYWRpdXMpO1xuXHR2ZWM0IGNvbG9yID0gbWl4KGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yLCByYXRpbyk7XG5cdGNvbG9yLmEgKj0gYWxwaGEgKiBvcGFjaXR5O1xuXHRnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbn1cbiJdKSxsLnZlcnQ9dShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSBmbG9hdCB4LCB5LCB4RnJhY3QsIHlGcmFjdDtcbmF0dHJpYnV0ZSBmbG9hdCBzaXplLCBib3JkZXJTaXplO1xuYXR0cmlidXRlIHZlYzQgY29sb3JJZCwgYm9yZGVyQ29sb3JJZDtcbmF0dHJpYnV0ZSBmbG9hdCBpc0FjdGl2ZTtcblxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZTtcbnVuaWZvcm0gdmVjMiBwYWxldHRlU2l6ZTtcblxuY29uc3QgZmxvYXQgbWF4U2l6ZSA9IDEwMC47XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3IsIGZyYWdCb3JkZXJDb2xvcjtcbnZhcnlpbmcgZmxvYXQgZnJhZ0JvcmRlclJhZGl1cywgZnJhZ1dpZHRoO1xuXG5ib29sIGlzRGlyZWN0ID0gKHBhbGV0dGVTaXplLnggPCAxLik7XG5cbnZlYzQgZ2V0Q29sb3IodmVjNCBpZCkge1xuICByZXR1cm4gaXNEaXJlY3QgPyBpZCAvIDI1NS4gOiB0ZXh0dXJlMkQocGFsZXR0ZSxcbiAgICB2ZWMyKFxuICAgICAgKGlkLnggKyAuNSkgLyBwYWxldHRlU2l6ZS54LFxuICAgICAgKGlkLnkgKyAuNSkgLyBwYWxldHRlU2l6ZS55XG4gICAgKVxuICApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIC8vIGlnbm9yZSBpbmFjdGl2ZSBwb2ludHNcbiAgaWYgKGlzQWN0aXZlID09IDAuKSByZXR1cm47XG5cbiAgdmVjMiBwb3NpdGlvbiA9IHZlYzIoeCwgeSk7XG4gIHZlYzIgcG9zaXRpb25GcmFjdCA9IHZlYzIoeEZyYWN0LCB5RnJhY3QpO1xuXG4gIHZlYzQgY29sb3IgPSBnZXRDb2xvcihjb2xvcklkKTtcbiAgdmVjNCBib3JkZXJDb2xvciA9IGdldENvbG9yKGJvcmRlckNvbG9ySWQpO1xuXG4gIGZsb2F0IHNpemUgPSBzaXplICogbWF4U2l6ZSAvIDI1NS47XG4gIGZsb2F0IGJvcmRlclNpemUgPSBib3JkZXJTaXplICogbWF4U2l6ZSAvIDI1NS47XG5cbiAgZ2xfUG9pbnRTaXplID0gKHNpemUgKyBib3JkZXJTaXplKSAqIHBpeGVsUmF0aW87XG5cbiAgdmVjMiBwb3MgPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlRnJhY3Q7XG5cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyAqIDIuIC0gMS4sIDAsIDEpO1xuXG4gIGZyYWdCb3JkZXJSYWRpdXMgPSAxLiAtIDIuICogYm9yZGVyU2l6ZSAvIChzaXplICsgYm9yZGVyU2l6ZSk7XG4gIGZyYWdDb2xvciA9IGNvbG9yO1xuICBmcmFnQm9yZGVyQ29sb3IgPSBib3JkZXJDb2xvci5hID09IDAuIHx8IGJvcmRlclNpemUgPT0gMC4gPyB2ZWM0KGNvbG9yLnJnYiwgMC4pIDogYm9yZGVyQ29sb3I7XG4gIGZyYWdXaWR0aCA9IDEuIC8gZ2xfUG9pbnRTaXplO1xufVxuIl0pLGQmJihsLmZyYWc9bC5mcmFnLnJlcGxhY2UoInNtb290aHN0ZXAiLCJzbW9vdGhTdGVwIikscy5mcmFnPXMuZnJhZy5yZXBsYWNlKCJzbW9vdGhzdGVwIiwic21vb3RoU3RlcCIpKSx0aGlzLmRyYXdDaXJjbGU9dChsKX15LmRlZmF1bHRzPXtjb2xvcjoiYmxhY2siLGJvcmRlckNvbG9yOiJ0cmFuc3BhcmVudCIsYm9yZGVyU2l6ZTowLHNpemU6MTIsb3BhY2l0eToxLG1hcmtlcjp2b2lkIDAsdmlld3BvcnQ6bnVsbCxyYW5nZTpudWxsLHBpeGVsU2l6ZTpudWxsLGNvdW50OjAsb2Zmc2V0OjAsYm91bmRzOm51bGwscG9zaXRpb25zOltdLHNuYXA6MWU0fSx5LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYmdGhpcy51cGRhdGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuZHJhdygpLHRoaXN9LHkucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT1hcmd1bWVudHNbbl07dmFyIGE9dGhpcy5ncm91cHM7aWYoMT09PXIubGVuZ3RoJiZBcnJheS5pc0FycmF5KHJbMF0pJiYobnVsbD09PXJbMF1bMF18fEFycmF5LmlzQXJyYXkoclswXVswXSkpJiYocj1yWzBdKSx0aGlzLnJlZ2wuX3JlZnJlc2goKSxyLmxlbmd0aClmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl0aGlzLmRyYXdJdGVtKGkscltpXSk7ZWxzZSBhLmZvckVhY2goZnVuY3Rpb24oZSxyKXt0LmRyYXdJdGVtKHIpfSk7cmV0dXJuIHRoaXN9LHkucHJvdG90eXBlLmRyYXdJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ncm91cHMsbj1yW3RdO2lmKCJudW1iZXIiPT10eXBlb2YgZSYmKHQ9ZSxuPXJbZV0sZT1udWxsKSxuJiZuLmNvdW50JiZuLm9wYWNpdHkpe24uYWN0aXZhdGlvblswXSYmdGhpcy5kcmF3Q2lyY2xlKHRoaXMuZ2V0TWFya2VyRHJhd09wdGlvbnMoMCxuLGUpKTtmb3IodmFyIGk9W10sbz0xO288bi5hY3RpdmF0aW9uLmxlbmd0aDtvKyspbi5hY3RpdmF0aW9uW29dJiYoITA9PT1uLmFjdGl2YXRpb25bb118fG4uYWN0aXZhdGlvbltvXS5kYXRhLmxlbmd0aCkmJmkucHVzaC5hcHBseShpLGEodGhpcy5nZXRNYXJrZXJEcmF3T3B0aW9ucyhvLG4sZSkpKTtpLmxlbmd0aCYmdGhpcy5kcmF3TWFya2VyKGkpfX0seS5wcm90b3R5cGUuZ2V0TWFya2VyRHJhd09wdGlvbnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPWUucmFuZ2UsaT1lLnRyZWUsbz1lLnZpZXdwb3J0LHM9ZS5hY3RpdmF0aW9uLGw9ZS5zZWxlY3Rpb25CdWZmZXIsdT1lLmNvdW50O3RoaXMucmVnbDtpZighaSlyZXR1cm4gcj9bYyh7fSxlLHttYXJrZXJUZXh0dXJlOnRoaXMubWFya2VyVGV4dHVyZXNbdF0sYWN0aXZhdGlvbjpzW3RdLGNvdW50OnIubGVuZ3RoLGVsZW1lbnRzOnIsb2Zmc2V0OjB9KV06W2Moe30sZSx7bWFya2VyVGV4dHVyZTp0aGlzLm1hcmtlclRleHR1cmVzW3RdLGFjdGl2YXRpb246c1t0XSxvZmZzZXQ6MH0pXTt2YXIgaD1bXSxmPWkucmFuZ2UoYSx7bG9kOiEwLHB4OlsoYVsyXS1hWzBdKS9vLndpZHRoLChhWzNdLWFbMV0pL28uaGVpZ2h0XX0pO2lmKHIpe2Zvcih2YXIgcD1zW3RdLmRhdGEsZD1uZXcgVWludDhBcnJheSh1KSxnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciB2PXJbZ107ZFt2XT1wP3Bbdl06MX1sLnN1YmRhdGEoZCl9Zm9yKHZhciBtPWYubGVuZ3RoO20tLTspe3ZhciB5PW4oZlttXSwyKSx4PXlbMF0sYj15WzFdO2gucHVzaChjKHt9LGUse21hcmtlclRleHR1cmU6dGhpcy5tYXJrZXJUZXh0dXJlc1t0XSxhY3RpdmF0aW9uOnI/bDpzW3RdLG9mZnNldDp4LGNvdW50OmIteH0pKX1yZXR1cm4gaH0seS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO2lmKHIubGVuZ3RoKXsxPT09ci5sZW5ndGgmJkFycmF5LmlzQXJyYXkoclswXSkmJihyPXJbMF0pO3ZhciBhPXRoaXMuZ3JvdXBzLGk9dGhpcy5nbCxzPXRoaXMucmVnbCx1PXRoaXMubWF4U2l6ZSxkPXRoaXMubWF4Q29sb3JzLG09dGhpcy5wYWxldHRlO3RoaXMuZ3JvdXBzPWE9ci5tYXAoZnVuY3Rpb24oZSxyKXt2YXIgbj1hW3JdO2lmKHZvaWQgMD09PWUpcmV0dXJuIG47bnVsbD09PWU/ZT17cG9zaXRpb25zOm51bGx9OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U9e29uZHJhdzplfToibnVtYmVyIj09dHlwZW9mIGVbMF0mJihlPXtwb3NpdGlvbnM6ZX0pLG51bGw9PT0oZT1oKGUse3Bvc2l0aW9uczoicG9zaXRpb25zIGRhdGEgcG9pbnRzIixzbmFwOiJzbmFwIGNsdXN0ZXIgbG9kIHRyZWUiLHNpemU6InNpemVzIHNpemUgcmFkaXVzIixib3JkZXJTaXplOiJib3JkZXJTaXplcyBib3JkZXJTaXplIGJvcmRlci1zaXplIGJvcmRlcnNpemUgYm9yZGVyV2lkdGggYm9yZGVyV2lkdGhzIGJvcmRlci13aWR0aCBib3JkZXJ3aWR0aCBzdHJva2Utd2lkdGggc3Ryb2tlV2lkdGggc3Ryb2tld2lkdGggb3V0bGluZSIsY29sb3I6ImNvbG9ycyBjb2xvciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIixib3JkZXJDb2xvcjoiYm9yZGVyQ29sb3JzIGJvcmRlckNvbG9yIHN0cm9rZSBzdHJva2UtY29sb3Igc3Ryb2tlQ29sb3IiLG1hcmtlcjoibWFya2VycyBtYXJrZXIgc2hhcGUiLHJhbmdlOiJyYW5nZSBkYXRhQm94IGRhdGFib3giLHZpZXdwb3J0OiJ2aWV3cG9ydCB2aWV3UG9ydCB2aWV3Qm94IHZpZXdib3giLG9wYWNpdHk6Im9wYWNpdHkgYWxwaGEgdHJhbnNwYXJlbmN5Iixib3VuZHM6ImJvdW5kIGJvdW5kcyBib3VuZGFyaWVzIGxpbWl0cyIsdG9vTWFueUNvbG9yczoidG9vTWFueUNvbG9ycyBwYWxldHRlIHBhbGV0dGVNb2RlIG9wdGltaXplUGFsZXR0ZSBlbmFibGVQYWxldHRlIn0pKS5wb3NpdGlvbnMmJihlLnBvc2l0aW9ucz1bXSksbnVsbCE9ZS50b29NYW55Q29sb3JzJiYodC50b29NYW55Q29sb3JzPWUudG9vTWFueUNvbG9ycyksbnx8KGFbcl09bj17aWQ6cixzY2FsZTpudWxsLHRyYW5zbGF0ZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGFjdGl2YXRpb246W10sc2VsZWN0aW9uQnVmZmVyOnMuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJzdHJlYW0iLHR5cGU6InVpbnQ4In0pLHNpemVCdWZmZXI6cy5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4In0pLGNvbG9yQnVmZmVyOnMuYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCJ9KSxwb3NpdGlvbkJ1ZmZlcjpzLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQifSkscG9zaXRpb25GcmFjdEJ1ZmZlcjpzLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQifSl9LGU9Yyh7fSx5LmRlZmF1bHRzLGUpKSwhZS5wb3NpdGlvbnN8fCJtYXJrZXIiaW4gZXx8KGUubWFya2VyPW4ubWFya2VyLGRlbGV0ZSBuLm1hcmtlciksIWUubWFya2VyfHwicG9zaXRpb25zImluIGV8fChlLnBvc2l0aW9ucz1uLnBvc2l0aW9ucyxkZWxldGUgbi5wb3NpdGlvbnMpO3ZhciB4PTAsYj0wO2lmKGYobixlLFt7c25hcDohMCxzaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQmJih0PXkuZGVmYXVsdHMuc2l6ZSkseCs9dCYmdC5sZW5ndGg/MTowLHR9LGJvcmRlclNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dCYmKHQ9eS5kZWZhdWx0cy5ib3JkZXJTaXplKSx4Kz10JiZ0Lmxlbmd0aD8xOjAsdH0sb3BhY2l0eTpwYXJzZUZsb2F0LGNvbG9yOmZ1bmN0aW9uKGUscil7cmV0dXJuIG51bGw9PWUmJihlPXkuZGVmYXVsdHMuY29sb3IpLGU9dC51cGRhdGVDb2xvcihlKSxiKyssZX0sYm9yZGVyQ29sb3I6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbnVsbD09ZSYmKGU9eS5kZWZhdWx0cy5ib3JkZXJDb2xvciksZT10LnVwZGF0ZUNvbG9yKGUpLGIrKyxlfSxib3VuZHM6ZnVuY3Rpb24odCxlLHIpe3JldHVybiJyYW5nZSJpbiByfHwoci5yYW5nZT1udWxsKSx0fSxwb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuc25hcCxhPWUucG9zaXRpb25CdWZmZXIsaT1lLnBvc2l0aW9uRnJhY3RCdWZmZXIsYz1lLnNlbGVjdGlvbkJ1ZmZlcjtpZih0Lnh8fHQueSlyZXR1cm4gdC54Lmxlbmd0aD9lLnhBdHRyPXtidWZmZXI6cy5idWZmZXIodC54KSxvZmZzZXQ6MCxzdHJpZGU6NCxjb3VudDp0LngubGVuZ3RofTplLnhBdHRyPXtidWZmZXI6dC54LmJ1ZmZlcixvZmZzZXQ6NCp0Lngub2Zmc2V0fHwwLHN0cmlkZTo0Kih0Lnguc3RyaWRlfHwxKSxjb3VudDp0LnguY291bnR9LHQueS5sZW5ndGg/ZS55QXR0cj17YnVmZmVyOnMuYnVmZmVyKHQueSksb2Zmc2V0OjAsc3RyaWRlOjQsY291bnQ6dC55Lmxlbmd0aH06ZS55QXR0cj17YnVmZmVyOnQueS5idWZmZXIsb2Zmc2V0OjQqdC55Lm9mZnNldHx8MCxzdHJpZGU6NCoodC55LnN0cmlkZXx8MSksY291bnQ6dC55LmNvdW50fSxlLmNvdW50PU1hdGgubWF4KGUueEF0dHIuY291bnQsZS55QXR0ci5jb3VudCksdDt0PXAodCwiZmxvYXQ2NCIpO3ZhciB1PWUuY291bnQ9TWF0aC5mbG9vcih0Lmxlbmd0aC8yKSxoPWUuYm91bmRzPXU/byh0LDIpOm51bGw7aWYoci5yYW5nZXx8ZS5yYW5nZXx8KGRlbGV0ZSBlLnJhbmdlLHIucmFuZ2U9aCksci5tYXJrZXJ8fGUubWFya2VyfHwoZGVsZXRlIGUubWFya2VyLHIubWFya2VyPW51bGwpLG4mJighMD09PW58fHU+bik/ZS50cmVlPWwodCx7Ym91bmRzOmh9KTpuJiZuLmxlbmd0aCYmKGUudHJlZT1uKSxlLnRyZWUpe3ZhciBmPXtwcmltaXRpdmU6InBvaW50cyIsdXNhZ2U6InN0YXRpYyIsZGF0YTplLnRyZWUsdHlwZToidWludDMyIn07ZS5lbGVtZW50cz9lLmVsZW1lbnRzKGYpOmUuZWxlbWVudHM9cy5lbGVtZW50cyhmKX1yZXR1cm4gYSh7ZGF0YTpnLmZsb2F0KHQpLHVzYWdlOiJkeW5hbWljIn0pLGkoe2RhdGE6Zy5mcmFjdCh0KSx1c2FnZToiZHluYW1pYyJ9KSxjKHtkYXRhOm5ldyBVaW50OEFycmF5KHUpLHR5cGU6InVpbnQ4Iix1c2FnZToic3RyZWFtIn0pLHR9fSx7bWFya2VyOmZ1bmN0aW9uKGUscixuKXt2YXIgYT1yLmFjdGl2YXRpb247aWYoYS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmRlc3Ryb3kmJnQuZGVzdHJveSgpfSksYS5sZW5ndGg9MCxlJiYibnVtYmVyIiE9dHlwZW9mIGVbMF0pe2Zvcih2YXIgaT1bXSxvPTAsbD1NYXRoLm1pbihlLmxlbmd0aCxyLmNvdW50KTtvPGw7bysrKXt2YXIgYz10LmFkZE1hcmtlcihlW29dKTtpW2NdfHwoaVtjXT1uZXcgVWludDhBcnJheShyLmNvdW50KSksaVtjXVtvXT0xfWZvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKWlmKGlbdV0pe3ZhciBoPXtkYXRhOmlbdV0sdHlwZToidWludDgiLHVzYWdlOiJzdGF0aWMifTthW3VdP2FbdV0oaCk6YVt1XT1zLmJ1ZmZlcihoKSxhW3VdLmRhdGE9aVt1XX19ZWxzZXthW3QuYWRkTWFya2VyKGUpXT0hMH1yZXR1cm4gZX0scmFuZ2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuYm91bmRzO2lmKG4pcmV0dXJuIHR8fCh0PW4pLGUuc2NhbGU9WzEvKHRbMl0tdFswXSksMS8odFszXS10WzFdKV0sZS50cmFuc2xhdGU9Wy10WzBdLC10WzFdXSxlLnNjYWxlRnJhY3Q9Zy5mcmFjdChlLnNjYWxlKSxlLnRyYW5zbGF0ZUZyYWN0PWcuZnJhY3QoZS50cmFuc2xhdGUpLHR9LHZpZXdwb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB2KHR8fFtpLmRyYXdpbmdCdWZmZXJXaWR0aCxpLmRyYXdpbmdCdWZmZXJIZWlnaHRdKX19XSkseCl7dmFyIF89bix3PV8uY291bnQsaz1fLnNpemUsVD1fLmJvcmRlclNpemUsTT1fLnNpemVCdWZmZXIsQT1uZXcgVWludDhBcnJheSgyKncpO2lmKGsubGVuZ3RofHxULmxlbmd0aClmb3IodmFyIFM9MDtTPHc7UysrKUFbMipTXT1NYXRoLnJvdW5kKDI1NSoobnVsbD09a1tTXT9rOmtbU10pL3UpLEFbMipTKzFdPU1hdGgucm91bmQoMjU1KihudWxsPT1UW1NdP1Q6VFtTXSkvdSk7TSh7ZGF0YTpBLHVzYWdlOiJkeW5hbWljIn0pfWlmKGIpe3ZhciBFLEw9bixDPUwuY291bnQsUD1MLmNvbG9yLE89TC5ib3JkZXJDb2xvcix6PUwuY29sb3JCdWZmZXI7aWYodC50b29NYW55Q29sb3JzKXtpZihQLmxlbmd0aHx8Ty5sZW5ndGgpe0U9bmV3IFVpbnQ4QXJyYXkoOCpDKTtmb3IodmFyIEk9MDtJPEM7SSsrKXt2YXIgRD1QW0ldO0VbOCpJXT1tWzQqRF0sRVs4KkkrMV09bVs0KkQrMV0sRVs4KkkrMl09bVs0KkQrMl0sRVs4KkkrM109bVs0KkQrM107dmFyIFI9T1tJXTtFWzgqSSs0XT1tWzQqUl0sRVs4KkkrNV09bVs0KlIrMV0sRVs4KkkrNl09bVs0KlIrMl0sRVs4KkkrN109bVs0KlIrM119fX1lbHNlIGlmKFAubGVuZ3RofHxPLmxlbmd0aCl7RT1uZXcgVWludDhBcnJheSg0KkMrMik7Zm9yKHZhciBGPTA7RjxDO0YrKyludWxsIT1QW0ZdJiYoRVs0KkZdPVBbRl0lZCxFWzQqRisxXT1NYXRoLmZsb29yKFBbRl0vZCkpLG51bGwhPU9bRl0mJihFWzQqRisyXT1PW0ZdJWQsRVs0KkYrM109TWF0aC5mbG9vcihPW0ZdL2QpKX16KHtkYXRhOkV8fG5ldyBVaW50OEFycmF5KDApLHR5cGU6InVpbnQ4Iix1c2FnZToiZHluYW1pYyJ9KX1yZXR1cm4gbn0pfX0seS5wcm90b3R5cGUuYWRkTWFya2VyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5tYXJrZXJUZXh0dXJlcyxuPXRoaXMucmVnbCxhPXRoaXMubWFya2VyQ2FjaGUsaT1udWxsPT10PzA6YS5pbmRleE9mKHQpO2lmKGk+PTApcmV0dXJuIGk7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSllPXQ7ZWxzZXtlPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIG89MCxzPXQubGVuZ3RoO288cztvKyspZVtvXT0yNTUqdFtvXX12YXIgbD1NYXRoLmZsb29yKE1hdGguc3FydChlLmxlbmd0aCkpO3JldHVybiBpPXIubGVuZ3RoLGEucHVzaCh0KSxyLnB1c2gobi50ZXh0dXJlKHtjaGFubmVsczoxLGRhdGE6ZSxyYWRpdXM6bCxtYWc6ImxpbmVhciIsbWluOiJsaW5lYXIifSkpLGl9LHkucHJvdG90eXBlLnVwZGF0ZUNvbG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGFsZXR0ZUlkcyxyPXRoaXMucGFsZXR0ZSxuPXRoaXMubWF4Q29sb3JzO0FycmF5LmlzQXJyYXkodCl8fCh0PVt0XSk7dmFyIGE9W107aWYoIm51bWJlciI9PXR5cGVvZiB0WzBdKXt2YXIgbz1bXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCs9NClvLnB1c2godC5zbGljZShsLGwrNCkpO2Vsc2UgZm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtjKz00KW8ucHVzaCh0LnN1YmFycmF5KGMsYys0KSk7dD1vfWZvcih2YXIgdT0wO3U8dC5sZW5ndGg7dSsrKXt2YXIgaD10W3VdO2g9aShoLCJ1aW50OCIpO3ZhciBmPXMoaCwhMSk7aWYobnVsbD09ZVtmXSl7dmFyIHA9ci5sZW5ndGg7ZVtmXT1NYXRoLmZsb29yKHAvNCkscltwXT1oWzBdLHJbcCsxXT1oWzFdLHJbcCsyXT1oWzJdLHJbcCszXT1oWzNdfWFbdV09ZVtmXX1yZXR1cm4hdGhpcy50b29NYW55Q29sb3JzJiZyLmxlbmd0aD40Km4mJih0aGlzLnRvb01hbnlDb2xvcnM9ITApLHRoaXMudXBkYXRlUGFsZXR0ZShyKSwxPT09YS5sZW5ndGg/YVswXTphfSx5LnByb3RvdHlwZS51cGRhdGVQYWxldHRlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLnRvb01hbnlDb2xvcnMpe3ZhciBlPXRoaXMubWF4Q29sb3JzLHI9dGhpcy5wYWxldHRlVGV4dHVyZSxuPU1hdGguY2VpbCguMjUqdC5sZW5ndGgvZSk7aWYobj4xKWZvcih2YXIgYT0uMjUqKHQ9dC5zbGljZSgpKS5sZW5ndGglZTthPG4qZTthKyspdC5wdXNoKDAsMCwwLDApO3IuaGVpZ2h0PG4mJnIucmVzaXplKGUsbiksci5zdWJpbWFnZSh7d2lkdGg6TWF0aC5taW4oLjI1KnQubGVuZ3RoLGUpLGhlaWdodDpuLGRhdGE6dH0sMCwwKX19LHkucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cHMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnNpemVCdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25CdWZmZXIuZGVzdHJveSgpLHQucG9zaXRpb25GcmFjdEJ1ZmZlci5kZXN0cm95KCksdC5jb2xvckJ1ZmZlci5kZXN0cm95KCksdC5hY3RpdmF0aW9uLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSx0LnNlbGVjdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5lbGVtZW50cyYmdC5lbGVtZW50cy5kZXN0cm95KCl9KSx0aGlzLmdyb3Vwcy5sZW5ndGg9MCx0aGlzLnBhbGV0dGVUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLm1hcmtlclRleHR1cmVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSx0aGlzfTt2YXIgeD10KCJvYmplY3QtYXNzaWduIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IG0odCxlKSxuPXIucmVuZGVyLmJpbmQocik7cmV0dXJuIHgobix7cmVuZGVyOm4sdXBkYXRlOnIudXBkYXRlLmJpbmQociksZHJhdzpyLmRyYXcuYmluZChyKSxkZXN0cm95OnIuZGVzdHJveS5iaW5kKHIpLHJlZ2w6ci5yZWdsLGdsOnIuZ2wsY2FudmFzOnIuZ2wuY2FudmFzLGdyb3VwczpyLmdyb3VwcyxtYXJrZXJzOnIubWFya2VyQ2FjaGUscGFsZXR0ZTpyLnBhbGV0dGV9KSxufX0seyJhcnJheS1ib3VuZHMiOjY4LCJjb2xvci1pZCI6MTIwLCJjb2xvci1ub3JtYWxpemUiOjEyMiwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjMwLGdsc2xpZnk6NDExLCJpcy1pZXhwbG9yZXIiOjQyMSwib2JqZWN0LWFzc2lnbiI6NDU2LCJwYXJzZS1yZWN0Ijo0NjEsInBpY2stYnktYWxpYXMiOjQ2NywicG9pbnQtY2x1c3RlciI6NDcxLCJ0by1mbG9hdDMyIjo1MzcsInVwZGF0ZS1kaWZmIjo1NDh9XSw1MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicmVnbC1zY2F0dGVyMmQiKSxhPXQoInBpY2stYnktYWxpYXMiKSxpPXQoImFycmF5LWJvdW5kcyIpLG89dCgicmFmIikscz10KCJhcnJheS1yYW5nZSIpLGw9dCgicGFyc2UtcmVjdCIpLGM9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpO2Z1bmN0aW9uIHUodCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB1KSlyZXR1cm4gbmV3IHUodCxlKTt0aGlzLnRyYWNlcz1bXSx0aGlzLnBhc3Nlcz17fSx0aGlzLnJlZ2w9dCx0aGlzLnNjYXR0ZXI9bih0KSx0aGlzLmNhbnZhcz10aGlzLnNjYXR0ZXIuY2FudmFzfWZ1bmN0aW9uIGgodCxlLHIpe3JldHVybihudWxsIT10LmlkP3QuaWQ6dCk8PDE2fCgyNTUmZSk8PDh8MjU1JnJ9ZnVuY3Rpb24gZih0LGUscil7dmFyIG4sYSxpLG8scz10W2VdLGw9dFtyXTtyZXR1cm4gcy5sZW5ndGg+Mj8oc1swXSxzWzJdLG49c1sxXSxhPXNbM10pOnMubGVuZ3RoPyhuPXNbMF0sYT1zWzFdKToocy54LG49cy55LHMueCtzLndpZHRoLGE9cy55K3MuaGVpZ2h0KSxsLmxlbmd0aD4yPyhpPWxbMF0sbz1sWzJdLGxbMV0sbFszXSk6bC5sZW5ndGg/KGk9bFswXSxvPWxbMV0pOihpPWwueCxsLnksbz1sLngrbC53aWR0aCxsLnkrbC5oZWlnaHQpLFtpLG4sbyxhXX1mdW5jdGlvbiBwKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm5bdCx0LHQsdF07aWYoMj09PXQubGVuZ3RoKXJldHVyblt0WzBdLHRbMV0sdFswXSx0WzFdXTt2YXIgZT1sKHQpO3JldHVybltlLngsZS55LGUueCtlLndpZHRoLGUueStlLmhlaWdodF19ZS5leHBvcnRzPXUsdS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9dGhpcyxyPVtdLG49YXJndW1lbnRzLmxlbmd0aDtuLS07KXJbbl09YXJndW1lbnRzW25dO3JldHVybiByLmxlbmd0aCYmKHQ9dGhpcykudXBkYXRlLmFwcGx5KHQsciksdGhpcy5yZWdsLmF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyP3RoaXMuZHJhdygpOih0aGlzLmRpcnR5P251bGw9PXRoaXMucGxhbm5lZCYmKHRoaXMucGxhbm5lZD1vKGZ1bmN0aW9uKCl7ZS5kcmF3KCksZS5kaXJ0eT0hMCxlLnBsYW5uZWQ9bnVsbH0pKToodGhpcy5kcmF3KCksdGhpcy5kaXJ0eT0hMCxvKGZ1bmN0aW9uKCl7ZS5kaXJ0eT0hMX0pKSx0aGlzKX0sdS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07aWYoZS5sZW5ndGgpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMudXBkYXRlSXRlbShuLGVbbl0pO3RoaXMudHJhY2VzPXRoaXMudHJhY2VzLmZpbHRlcihCb29sZWFuKTtmb3IodmFyIGE9W10saT0wLG89MDtvPHRoaXMudHJhY2VzLmxlbmd0aDtvKyspe2Zvcih2YXIgcz10aGlzLnRyYWNlc1tvXSxsPXRoaXMudHJhY2VzW29dLnBhc3NlcyxjPTA7YzxsLmxlbmd0aDtjKyspYS5wdXNoKHRoaXMucGFzc2VzW2xbY11dKTtzLnBhc3NPZmZzZXQ9aSxpKz1zLnBhc3Nlcy5sZW5ndGh9cmV0dXJuKHQ9dGhpcy5zY2F0dGVyKS51cGRhdGUuYXBwbHkodCxhKSx0aGlzfX0sdS5wcm90b3R5cGUudXBkYXRlSXRlbT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucmVnbDtpZihudWxsPT09ZSlyZXR1cm4gdGhpcy50cmFjZXNbdF09bnVsbCx0aGlzO2lmKCFlKXJldHVybiB0aGlzO3ZhciBuLG89YShlLHtkYXRhOiJkYXRhIGl0ZW1zIGNvbHVtbnMgcm93cyB2YWx1ZXMgZGltZW5zaW9ucyBzYW1wbGVzIHgiLHNuYXA6InNuYXAgY2x1c3RlciIsc2l6ZToic2l6ZXMgc2l6ZSByYWRpdXMiLGNvbG9yOiJjb2xvcnMgY29sb3IgZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvciIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSB0cmFuc3BhcmVuY3kgb3BhcXVlIixib3JkZXJTaXplOiJib3JkZXJTaXplcyBib3JkZXJTaXplIGJvcmRlci1zaXplIGJvcmRlcnNpemUgYm9yZGVyV2lkdGggYm9yZGVyV2lkdGhzIGJvcmRlci13aWR0aCBib3JkZXJ3aWR0aCBzdHJva2Utd2lkdGggc3Ryb2tlV2lkdGggc3Ryb2tld2lkdGggb3V0bGluZSIsYm9yZGVyQ29sb3I6ImJvcmRlckNvbG9ycyBib3JkZXJDb2xvciBib3JkZXJjb2xvciBzdHJva2Ugc3Ryb2tlLWNvbG9yIHN0cm9rZUNvbG9yIixtYXJrZXI6Im1hcmtlcnMgbWFya2VyIHNoYXBlIixyYW5nZToicmFuZ2UgcmFuZ2VzIGRhdGFib3ggZGF0YUJveCIsdmlld3BvcnQ6InZpZXdwb3J0IHZpZXdCb3ggdmlld2JveCIsZG9tYWluOiJkb21haW4gZG9tYWlucyBhcmVhIGFyZWFzIixwYWRkaW5nOiJwYWQgcGFkZGluZyBwYWRkaW5ncyBwYWRzIG1hcmdpbiBtYXJnaW5zIix0cmFuc3Bvc2U6InRyYW5zcG9zZSB0cmFuc3Bvc2VkIixkaWFnb25hbDoiZGlhZ29uYWwgZGlhZyBzaG93RGlhZ29uYWwiLHVwcGVyOiJ1cHBlciB1cCB0b3AgdXBwZXJoYWxmIHVwcGVySGFsZiBzaG93dXBwZXJoYWxmIHNob3dVcHBlciBzaG93VXBwZXJIYWxmIixsb3dlcjoibG93ZXIgbG93IGJvdHRvbSBsb3dlcmhhbGYgbG93ZXJIYWxmIHNob3dsb3dlcmhhbGYgc2hvd0xvd2VySGFsZiBzaG93TG93ZXIifSkscz10aGlzLnRyYWNlc1t0XXx8KHRoaXMudHJhY2VzW3RdPXtpZDp0LGJ1ZmZlcjpyLmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5fSksY29sb3I6ImJsYWNrIixtYXJrZXI6bnVsbCxzaXplOjEyLGJvcmRlckNvbG9yOiJ0cmFuc3BhcmVudCIsYm9yZGVyU2l6ZToxLHZpZXdwb3J0OmwoW3IuX2dsLmRyYXdpbmdCdWZmZXJXaWR0aCxyLl9nbC5kcmF3aW5nQnVmZmVySGVpZ2h0XSkscGFkZGluZzpbMCwwLDAsMF0sb3BhY2l0eToxLGRpYWdvbmFsOiEwLHVwcGVyOiEwLGxvd2VyOiEwfSk7aWYobnVsbCE9by5jb2xvciYmKHMuY29sb3I9by5jb2xvciksbnVsbCE9by5zaXplJiYocy5zaXplPW8uc2l6ZSksbnVsbCE9by5tYXJrZXImJihzLm1hcmtlcj1vLm1hcmtlciksbnVsbCE9by5ib3JkZXJDb2xvciYmKHMuYm9yZGVyQ29sb3I9by5ib3JkZXJDb2xvciksbnVsbCE9by5ib3JkZXJTaXplJiYocy5ib3JkZXJTaXplPW8uYm9yZGVyU2l6ZSksbnVsbCE9by5vcGFjaXR5JiYocy5vcGFjaXR5PW8ub3BhY2l0eSksby52aWV3cG9ydCYmKHMudmlld3BvcnQ9bChvLnZpZXdwb3J0KSksbnVsbCE9by5kaWFnb25hbCYmKHMuZGlhZ29uYWw9by5kaWFnb25hbCksbnVsbCE9by51cHBlciYmKHMudXBwZXI9by51cHBlciksbnVsbCE9by5sb3dlciYmKHMubG93ZXI9by5sb3dlciksby5kYXRhKXtzLmJ1ZmZlcihjKG8uZGF0YSkpLHMuY29sdW1ucz1vLmRhdGEubGVuZ3RoLHMuY291bnQ9by5kYXRhWzBdLmxlbmd0aCxzLmJvdW5kcz1bXTtmb3IodmFyIHU9MDt1PHMuY29sdW1uczt1Kyspcy5ib3VuZHNbdV09aShvLmRhdGFbdV0sMSl9by5yYW5nZSYmKHMucmFuZ2U9by5yYW5nZSxuPXMucmFuZ2UmJiJudW1iZXIiIT10eXBlb2Ygcy5yYW5nZVswXSksby5kb21haW4mJihzLmRvbWFpbj1vLmRvbWFpbik7dmFyIGQ9ITE7bnVsbCE9by5wYWRkaW5nJiYoQXJyYXkuaXNBcnJheShvLnBhZGRpbmcpJiZvLnBhZGRpbmcubGVuZ3RoPT09cy5jb2x1bW5zJiYibnVtYmVyIj09dHlwZW9mIG8ucGFkZGluZ1tvLnBhZGRpbmcubGVuZ3RoLTFdPyhzLnBhZGRpbmc9by5wYWRkaW5nLm1hcChwKSxkPSEwKTpzLnBhZGRpbmc9cChvLnBhZGRpbmcpKTt2YXIgZz1zLmNvbHVtbnMsdj1zLmNvdW50LG09cy52aWV3cG9ydC53aWR0aCx5PXMudmlld3BvcnQuaGVpZ2h0LHg9cy52aWV3cG9ydC54LGI9cy52aWV3cG9ydC55LF89bS9nLHc9eS9nO3MucGFzc2VzPVtdO2Zvcih2YXIgaz0wO2s8ZztrKyspZm9yKHZhciBUPTA7VDxnO1QrKylpZigocy5kaWFnb25hbHx8VCE9PWspJiYocy51cHBlcnx8IShrPlQpKSYmKHMubG93ZXJ8fCEoazxUKSkpe3ZhciBNPWgocy5pZCxrLFQpLEE9dGhpcy5wYXNzZXNbTV18fCh0aGlzLnBhc3Nlc1tNXT17fSk7aWYoby5kYXRhJiYoby50cmFuc3Bvc2U/QS5wb3NpdGlvbnM9e3g6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6VCxjb3VudDp2LHN0cmlkZTpnfSx5OntidWZmZXI6cy5idWZmZXIsb2Zmc2V0OmssY291bnQ6dixzdHJpZGU6Z319OkEucG9zaXRpb25zPXt4OntidWZmZXI6cy5idWZmZXIsb2Zmc2V0OlQqdixjb3VudDp2fSx5OntidWZmZXI6cy5idWZmZXIsb2Zmc2V0Omsqdixjb3VudDp2fX0sQS5ib3VuZHM9ZihzLmJvdW5kcyxrLFQpKSxvLmRvbWFpbnx8by52aWV3cG9ydHx8by5kYXRhKXt2YXIgUz1kP2Yocy5wYWRkaW5nLGssVCk6cy5wYWRkaW5nO2lmKHMuZG9tYWluKXt2YXIgRT1mKHMuZG9tYWluLGssVCksTD1FWzBdLEM9RVsxXSxQPUVbMl0sTz1FWzNdO0Eudmlld3BvcnQ9W3grTCptK1NbMF0sYitDKnkrU1sxXSx4K1AqbS1TWzJdLGIrTyp5LVNbM11dfWVsc2UgQS52aWV3cG9ydD1beCtUKl8rXypTWzBdLGIrayp3K3cqU1sxXSx4KyhUKzEpKl8tXypTWzJdLGIrKGsrMSkqdy13KlNbM11dfW8uY29sb3ImJihBLmNvbG9yPXMuY29sb3IpLG8uc2l6ZSYmKEEuc2l6ZT1zLnNpemUpLG8ubWFya2VyJiYoQS5tYXJrZXI9cy5tYXJrZXIpLG8uYm9yZGVyU2l6ZSYmKEEuYm9yZGVyU2l6ZT1zLmJvcmRlclNpemUpLG8uYm9yZGVyQ29sb3ImJihBLmJvcmRlckNvbG9yPXMuYm9yZGVyQ29sb3IpLG8ub3BhY2l0eSYmKEEub3BhY2l0eT1zLm9wYWNpdHkpLG8ucmFuZ2UmJihBLnJhbmdlPW4/ZihzLnJhbmdlLGssVCk6cy5yYW5nZXx8QS5ib3VuZHMpLHMucGFzc2VzLnB1c2goTSl9cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtpZihlLmxlbmd0aCl7Zm9yKHZhciBuPVtdLGE9MDthPGUubGVuZ3RoO2ErKylpZigibnVtYmVyIj09dHlwZW9mIGVbYV0pe3ZhciBpPXRoaXMudHJhY2VzW2VbYV1dLG89aS5wYXNzZXMsbD1pLnBhc3NPZmZzZXQ7bi5wdXNoLmFwcGx5KG4scyhsLGwrby5sZW5ndGgpKX1lbHNlIGlmKGVbYV0ubGVuZ3RoKXt2YXIgYz1lW2FdLHU9dGhpcy50cmFjZXNbYV0saD11LnBhc3NlcyxmPXUucGFzc09mZnNldDtoPWgubWFwKGZ1bmN0aW9uKHQsZSl7bltmK2VdPWN9KX0odD10aGlzLnNjYXR0ZXIpLmRyYXcuYXBwbHkodCxuKX1lbHNlIHRoaXMuc2NhdHRlci5kcmF3KCk7cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFjZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmJ1ZmZlciYmdC5idWZmZXIuZGVzdHJveSYmdC5idWZmZXIuZGVzdHJveSgpfSksdGhpcy50cmFjZXM9bnVsbCx0aGlzLnBhc3Nlcz1udWxsLHRoaXMuc2NhdHRlci5kZXN0cm95KCksdGhpc319LHsiYXJyYXktYm91bmRzIjo2OCwiYXJyYXktcmFuZ2UiOjY5LCJmbGF0dGVuLXZlcnRleC1kYXRhIjoyMzAsInBhcnNlLXJlY3QiOjQ2MSwicGljay1ieS1hbGlhcyI6NDY3LHJhZjo0ODYsInJlZ2wtc2NhdHRlcjJkIjo0OTl9XSw1MDE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbixhO249dGhpcyxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuaWQ9VisrLHRoaXMudHlwZT10LHRoaXMuZGF0YT1lfWZ1bmN0aW9uIGUodCl7cmV0dXJuIlsiK2Z1bmN0aW9uIHQoZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybltdO3ZhciByPWUuY2hhckF0KDApLG49ZS5jaGFyQXQoZS5sZW5ndGgtMSk7aWYoMTxlLmxlbmd0aCYmcj09PW4mJignIic9PT1yfHwiJyI9PT1yKSlyZXR1cm5bJyInK2Uuc3Vic3RyKDEsZS5sZW5ndGgtMikucmVwbGFjZSgvXFwvZywiXFxcXCIpLnJlcGxhY2UoLyIvZywnXFwiJykrJyInXTtpZihyPS9cWyhmYWxzZXx0cnVlfG51bGx8XGQrfCdbXiddKid8IlteIl0qIilcXS8uZXhlYyhlKSlyZXR1cm4gdChlLnN1YnN0cigwLHIuaW5kZXgpKS5jb25jYXQodChyWzFdKSkuY29uY2F0KHQoZS5zdWJzdHIoci5pbmRleCtyWzBdLmxlbmd0aCkpKTtpZigxPT09KHI9ZS5zcGxpdCgiLiIpKS5sZW5ndGgpcmV0dXJuWyciJytlLnJlcGxhY2UoL1xcL2csIlxcXFwiKS5yZXBsYWNlKC8iL2csJ1xcIicpKyciJ107Zm9yKGU9W10sbj0wO248ci5sZW5ndGg7KytuKWU9ZS5jb25jYXQodChyW25dKSk7cmV0dXJuIGV9KHQpLmpvaW4oIl1bIikrIl0ifWZ1bmN0aW9uIHIodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoKTp0fWZ1bmN0aW9uIG4odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk6dH1mdW5jdGlvbiBhKHQpe3ZhciBlLGEsaSxvLHM9dHx8e307dD17fTt2YXIgbD1bXSxjPVtdLHU9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/MTp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxoPSExLGY9ZnVuY3Rpb24odCl7fSxwPWZ1bmN0aW9uKCl7fTtpZigic3RyaW5nIj09dHlwZW9mIHM/ZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpOiJvYmplY3QiPT10eXBlb2YgcyYmKCJzdHJpbmciPT10eXBlb2Ygcy5ub2RlTmFtZSYmImZ1bmN0aW9uIj09dHlwZW9mIHMuYXBwZW5kQ2hpbGQmJiJmdW5jdGlvbiI9PXR5cGVvZiBzLmdldEJvdW5kaW5nQ2xpZW50UmVjdD9lPXM6ImZ1bmN0aW9uIj09dHlwZW9mIHMuZHJhd0FycmF5c3x8ImZ1bmN0aW9uIj09dHlwZW9mIHMuZHJhd0VsZW1lbnRzP2k9KG89cykuY2FudmFzOigiZ2wiaW4gcz9vPXMuZ2w6ImNhbnZhcyJpbiBzP2k9bihzLmNhbnZhcyk6ImNvbnRhaW5lciJpbiBzJiYoYT1uKHMuY29udGFpbmVyKSksImF0dHJpYnV0ZXMiaW4gcyYmKHQ9cy5hdHRyaWJ1dGVzKSwiZXh0ZW5zaW9ucyJpbiBzJiYobD1yKHMuZXh0ZW5zaW9ucykpLCJvcHRpb25hbEV4dGVuc2lvbnMiaW4gcyYmKGM9cihzLm9wdGlvbmFsRXh0ZW5zaW9ucykpLCJvbkRvbmUiaW4gcyYmKGY9cy5vbkRvbmUpLCJwcm9maWxlImluIHMmJihoPSEhcy5wcm9maWxlKSwicGl4ZWxSYXRpbyJpbiBzJiYodT0rcy5waXhlbFJhdGlvKSkpLGUmJigiY2FudmFzIj09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT9pPWU6YT1lKSwhbyl7aWYoIWkpe2lmKCEoZT1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3ZhciBlPXdpbmRvdy5pbm5lcldpZHRoLG49d2luZG93LmlubmVySGVpZ2h0O3QhPT1kb2N1bWVudC5ib2R5JiYoZT0obj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKS5yaWdodC1uLmxlZnQsbj1uLmJvdHRvbS1uLnRvcCksYS53aWR0aD1yKmUsYS5oZWlnaHQ9cipuLGooYS5zdHlsZSx7d2lkdGg6ZSsicHgiLGhlaWdodDpuKyJweCJ9KX12YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4gaihhLnN0eWxlLHtib3JkZXI6MCxtYXJnaW46MCxwYWRkaW5nOjAsdG9wOjAsbGVmdDowfSksdC5hcHBlbmRDaGlsZChhKSx0PT09ZG9jdW1lbnQuYm9keSYmKGEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixqKHQuc3R5bGUse21hcmdpbjowLHBhZGRpbmc6MH0pKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixuLCExKSxuKCkse2NhbnZhczphLG9uRGVzdHJveTpmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLG4pLHQucmVtb3ZlQ2hpbGQoYSl9fX0oYXx8ZG9jdW1lbnQuYm9keSwwLHUpKSlyZXR1cm4gbnVsbDtpPWUuY2FudmFzLHA9ZS5vbkRlc3Ryb3l9bz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocil7dHJ5e3JldHVybiB0LmdldENvbnRleHQocixlKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19cmV0dXJuIHIoIndlYmdsIil8fHIoImV4cGVyaW1lbnRhbC13ZWJnbCIpfHxyKCJ3ZWJnbC1leHBlcmltZW50YWwiKX0oaSx0KX1yZXR1cm4gbz97Z2w6byxjYW52YXM6aSxjb250YWluZXI6YSxleHRlbnNpb25zOmwsb3B0aW9uYWxFeHRlbnNpb25zOmMscGl4ZWxSYXRpbzp1LHByb2ZpbGU6aCxvbkRvbmU6ZixvbkRlc3Ryb3k6cH06KHAoKSxmKCJ3ZWJnbCBub3Qgc3VwcG9ydGVkLCB0cnkgdXBncmFkaW5nIHlvdXIgYnJvd3NlciBvciBncmFwaGljcyBkcml2ZXJzIGh0dHA6Ly9nZXQud2ViZ2wub3JnIiksbnVsbCl9ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj1BcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobik7cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0KXt2YXIgZSxyO3JldHVybiBlPSg2NTUzNTx0KTw8NCxlfD1yPSgyNTU8KHQ+Pj49ZSkpPDwzLChlfD1yPSgxNTwodD4+Pj1yKSk8PDIpfChyPSgzPCh0Pj4+PXIpKTw8MSl8dD4+PnI+PjF9ZnVuY3Rpb24gcygpe2Z1bmN0aW9uIHQodCl7dDp7Zm9yKHZhciBlPTE2OzI2ODQzNTQ1Nj49ZTtlKj0xNilpZih0PD1lKXt0PWU7YnJlYWsgdH10PTB9cmV0dXJuIDA8KGU9cltvKHQpPj4yXSkubGVuZ3RoP2UucG9wKCk6bmV3IEFycmF5QnVmZmVyKHQpfWZ1bmN0aW9uIGUodCl7cltvKHQuYnl0ZUxlbmd0aCk+PjJdLnB1c2godCl9dmFyIHI9aSg4LGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm57YWxsb2M6dCxmcmVlOmUsYWxsb2NUeXBlOmZ1bmN0aW9uKGUscil7dmFyIG49bnVsbDtzd2l0Y2goZSl7Y2FzZSA1MTIwOm49bmV3IEludDhBcnJheSh0KHIpLDAscik7YnJlYWs7Y2FzZSA1MTIxOm49bmV3IFVpbnQ4QXJyYXkodChyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyMjpuPW5ldyBJbnQxNkFycmF5KHQoMipyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyMzpuPW5ldyBVaW50MTZBcnJheSh0KDIqciksMCxyKTticmVhaztjYXNlIDUxMjQ6bj1uZXcgSW50MzJBcnJheSh0KDQqciksMCxyKTticmVhaztjYXNlIDUxMjU6bj1uZXcgVWludDMyQXJyYXkodCg0KnIpLDAscik7YnJlYWs7Y2FzZSA1MTI2Om49bmV3IEZsb2F0MzJBcnJheSh0KDQqciksMCxyKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBuLmxlbmd0aCE9PXI/bi5zdWJhcnJheSgwLHIpOm59LGZyZWVUeXBlOmZ1bmN0aW9uKHQpe2UodC5idWZmZXIpfX19ZnVuY3Rpb24gbCh0KXtyZXR1cm4hIXQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0LnNoYXBlKSYmQXJyYXkuaXNBcnJheSh0LnN0cmlkZSkmJiJudW1iZXIiPT10eXBlb2YgdC5vZmZzZXQmJnQuc2hhcGUubGVuZ3RoPT09dC5zdHJpZGUubGVuZ3RoJiYoQXJyYXkuaXNBcnJheSh0LmRhdGEpfHxXKHQuZGF0YSkpfWZ1bmN0aW9uIGModCxlLHIsbixhLGkpe2Zvcih2YXIgbz0wO288ZTsrK28pZm9yKHZhciBzPXRbb10sbD0wO2w8cjsrK2wpZm9yKHZhciBjPXNbbF0sdT0wO3U8bjsrK3UpYVtpKytdPWNbdV19ZnVuY3Rpb24gdSh0KXtyZXR1cm4gMHxKW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KV19ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKXRbcl09ZVtyXX1mdW5jdGlvbiBmKHQsZSxyLG4sYSxpLG8pe2Zvcih2YXIgcz0wLGw9MDtsPHI7KytsKWZvcih2YXIgYz0wO2M8bjsrK2MpdFtzKytdPWVbYSpsK2kqYytvXX1mdW5jdGlvbiBwKHQsZSxyLG4pe2Z1bmN0aW9uIGEoZSl7dGhpcy5pZD1jKyssdGhpcy5idWZmZXI9dC5jcmVhdGVCdWZmZXIoKSx0aGlzLnR5cGU9ZSx0aGlzLnVzYWdlPTM1MDQ0LHRoaXMuYnl0ZUxlbmd0aD0wLHRoaXMuZGltZW5zaW9uPTEsdGhpcy5kdHlwZT01MTIxLHRoaXMucGVyc2lzdGVudERhdGE9bnVsbCxyLnByb2ZpbGUmJih0aGlzLnN0YXRzPXtzaXplOjB9KX1mdW5jdGlvbiBpKGUscixuKXtlLmJ5dGVMZW5ndGg9ci5ieXRlTGVuZ3RoLHQuYnVmZmVyRGF0YShlLnR5cGUscixuKX1mdW5jdGlvbiBvKHQsZSxyLG4sYSxvKXtpZih0LnVzYWdlPXIsQXJyYXkuaXNBcnJheShlKSl7aWYodC5kdHlwZT1ufHw1MTI2LDA8ZS5sZW5ndGgpaWYoQXJyYXkuaXNBcnJheShlWzBdKSl7YT10dChlKTtmb3IodmFyIHM9bj0xO3M8YS5sZW5ndGg7KytzKW4qPWFbc107dC5kaW1lbnNpb249bixpKHQsZT0kKGUsYSx0LmR0eXBlKSxyKSxvP3QucGVyc2lzdGVudERhdGE9ZTpHLmZyZWVUeXBlKGUpfWVsc2UibnVtYmVyIj09dHlwZW9mIGVbMF0/KHQuZGltZW5zaW9uPWEsaChhPUcuYWxsb2NUeXBlKHQuZHR5cGUsZS5sZW5ndGgpLGUpLGkodCxhLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1hOkcuZnJlZVR5cGUoYSkpOlcoZVswXSkmJih0LmRpbWVuc2lvbj1lWzBdLmxlbmd0aCx0LmR0eXBlPW58fHUoZVswXSl8fDUxMjYsaSh0LGU9JChlLFtlLmxlbmd0aCxlWzBdLmxlbmd0aF0sdC5kdHlwZSksciksbz90LnBlcnNpc3RlbnREYXRhPWU6Ry5mcmVlVHlwZShlKSl9ZWxzZSBpZihXKGUpKXQuZHR5cGU9bnx8dShlKSx0LmRpbWVuc2lvbj1hLGkodCxlLHIpLG8mJih0LnBlcnNpc3RlbnREYXRhPW5ldyBVaW50OEFycmF5KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSkpO2Vsc2UgaWYobChlKSl7YT1lLnNoYXBlO3ZhciBjPWUuc3RyaWRlLHA9KHM9ZS5vZmZzZXQsMCksZD0wLGc9MCx2PTA7MT09PWEubGVuZ3RoPyhwPWFbMF0sZD0xLGc9Y1swXSx2PTApOjI9PT1hLmxlbmd0aCYmKHA9YVswXSxkPWFbMV0sZz1jWzBdLHY9Y1sxXSksdC5kdHlwZT1ufHx1KGUuZGF0YSl8fDUxMjYsdC5kaW1lbnNpb249ZCxmKGE9Ry5hbGxvY1R5cGUodC5kdHlwZSxwKmQpLGUuZGF0YSxwLGQsZyx2LHMpLGkodCxhLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1hOkcuZnJlZVR5cGUoYSl9fWZ1bmN0aW9uIHMocil7ZS5idWZmZXJDb3VudC0tO2Zvcih2YXIgYT0wO2E8bi5zdGF0ZS5sZW5ndGg7KythKXt2YXIgaT1uLnN0YXRlW2FdO2kuYnVmZmVyPT09ciYmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGEpLGkuYnVmZmVyPW51bGwpfXQuZGVsZXRlQnVmZmVyKHIuYnVmZmVyKSxyLmJ1ZmZlcj1udWxsLGRlbGV0ZSBwW3IuaWRdfXZhciBjPTAscD17fTthLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dC5iaW5kQnVmZmVyKHRoaXMudHlwZSx0aGlzLmJ1ZmZlcil9LGEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtzKHRoaXMpfTt2YXIgZD1bXTtyZXR1cm4gci5wcm9maWxlJiYoZS5nZXRUb3RhbEJ1ZmZlclNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyhwKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrPXBbZV0uc3RhdHMuc2l6ZX0pLHR9KSx7Y3JlYXRlOmZ1bmN0aW9uKG4saSxjLGQpe2Z1bmN0aW9uIGcoZSl7dmFyIG49MzUwNDQsYT1udWxsLGk9MCxzPTAsYz0xO3JldHVybiBBcnJheS5pc0FycmF5KGUpfHxXKGUpfHxsKGUpP2E9ZToibnVtYmVyIj09dHlwZW9mIGU/aT0wfGU6ZSYmKCJkYXRhImluIGUmJihhPWUuZGF0YSksInVzYWdlImluIGUmJihuPVFbZS51c2FnZV0pLCJ0eXBlImluIGUmJihzPUtbZS50eXBlXSksImRpbWVuc2lvbiJpbiBlJiYoYz0wfGUuZGltZW5zaW9uKSwibGVuZ3RoImluIGUmJihpPTB8ZS5sZW5ndGgpKSx2LmJpbmQoKSxhP28odixhLG4scyxjLGQpOihpJiZ0LmJ1ZmZlckRhdGEodi50eXBlLGksbiksdi5kdHlwZT1zfHw1MTIxLHYudXNhZ2U9bix2LmRpbWVuc2lvbj1jLHYuYnl0ZUxlbmd0aD1pKSxyLnByb2ZpbGUmJih2LnN0YXRzLnNpemU9di5ieXRlTGVuZ3RoKmV0W3YuZHR5cGVdKSxnfWUuYnVmZmVyQ291bnQrKzt2YXIgdj1uZXcgYShpKTtyZXR1cm4gcFt2LmlkXT12LGN8fGcobiksZy5fcmVnbFR5cGU9ImJ1ZmZlciIsZy5fYnVmZmVyPXYsZy5zdWJkYXRhPWZ1bmN0aW9uKGUscil7dmFyIG4sYT0wfChyfHwwKTtpZih2LmJpbmQoKSxXKGUpKXQuYnVmZmVyU3ViRGF0YSh2LnR5cGUsYSxlKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe2lmKDA8ZS5sZW5ndGgpaWYoIm51bWJlciI9PXR5cGVvZiBlWzBdKXt2YXIgaT1HLmFsbG9jVHlwZSh2LmR0eXBlLGUubGVuZ3RoKTtoKGksZSksdC5idWZmZXJTdWJEYXRhKHYudHlwZSxhLGkpLEcuZnJlZVR5cGUoaSl9ZWxzZShBcnJheS5pc0FycmF5KGVbMF0pfHxXKGVbMF0pKSYmKG49dHQoZSksaT0kKGUsbix2LmR0eXBlKSx0LmJ1ZmZlclN1YkRhdGEodi50eXBlLGEsaSksRy5mcmVlVHlwZShpKSl9ZWxzZSBpZihsKGUpKXtuPWUuc2hhcGU7dmFyIG89ZS5zdHJpZGUscz1pPTAsYz0wLHA9MDsxPT09bi5sZW5ndGg/KGk9blswXSxzPTEsYz1vWzBdLHA9MCk6Mj09PW4ubGVuZ3RoJiYoaT1uWzBdLHM9blsxXSxjPW9bMF0scD1vWzFdKSxuPUFycmF5LmlzQXJyYXkoZS5kYXRhKT92LmR0eXBlOnUoZS5kYXRhKSxmKG49Ry5hbGxvY1R5cGUobixpKnMpLGUuZGF0YSxpLHMsYyxwLGUub2Zmc2V0KSx0LmJ1ZmZlclN1YkRhdGEodi50eXBlLGEsbiksRy5mcmVlVHlwZShuKX1yZXR1cm4gZ30sci5wcm9maWxlJiYoZy5zdGF0cz12LnN0YXRzKSxnLmRlc3Ryb3k9ZnVuY3Rpb24oKXtzKHYpfSxnfSxjcmVhdGVTdHJlYW06ZnVuY3Rpb24odCxlKXt2YXIgcj1kLnBvcCgpO3JldHVybiByfHwocj1uZXcgYSh0KSksci5iaW5kKCksbyhyLGUsMzUwNDAsMCwxLCExKSxyfSxkZXN0cm95U3RyZWFtOmZ1bmN0aW9uKHQpe2QucHVzaCh0KX0sY2xlYXI6ZnVuY3Rpb24oKXtYKHApLmZvckVhY2gocyksZC5mb3JFYWNoKHMpfSxnZXRCdWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuX2J1ZmZlciBpbnN0YW5jZW9mIGE/dC5fYnVmZmVyOm51bGx9LHJlc3RvcmU6ZnVuY3Rpb24oKXtYKHApLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5idWZmZXI9dC5jcmVhdGVCdWZmZXIoKSx0LmJpbmRCdWZmZXIoZS50eXBlLGUuYnVmZmVyKSx0LmJ1ZmZlckRhdGEoZS50eXBlLGUucGVyc2lzdGVudERhdGF8fGUuYnl0ZUxlbmd0aCxlLnVzYWdlKX0pfSxfaW5pdEJ1ZmZlcjpvfX1mdW5jdGlvbiBkKHQsZSxyLG4pe2Z1bmN0aW9uIGEodCl7dGhpcy5pZD1jKyssc1t0aGlzLmlkXT10aGlzLHRoaXMuYnVmZmVyPXQsdGhpcy5wcmltVHlwZT00LHRoaXMudHlwZT10aGlzLnZlcnRDb3VudD0wfWZ1bmN0aW9uIGkobixhLGksbyxzLGMsdSl7aWYobi5idWZmZXIuYmluZCgpLGEpe3ZhciBoPXU7dXx8VyhhKSYmKCFsKGEpfHxXKGEuZGF0YSkpfHwoaD1lLm9lc19lbGVtZW50X2luZGV4X3VpbnQ/NTEyNTo1MTIzKSxyLl9pbml0QnVmZmVyKG4uYnVmZmVyLGEsaSxoLDMpfWVsc2UgdC5idWZmZXJEYXRhKDM0OTYzLGMsaSksbi5idWZmZXIuZHR5cGU9aHx8NTEyMSxuLmJ1ZmZlci51c2FnZT1pLG4uYnVmZmVyLmRpbWVuc2lvbj0zLG4uYnVmZmVyLmJ5dGVMZW5ndGg9YztpZihoPXUsIXUpe3N3aXRjaChuLmJ1ZmZlci5kdHlwZSl7Y2FzZSA1MTIxOmNhc2UgNTEyMDpoPTUxMjE7YnJlYWs7Y2FzZSA1MTIzOmNhc2UgNTEyMjpoPTUxMjM7YnJlYWs7Y2FzZSA1MTI1OmNhc2UgNTEyNDpoPTUxMjV9bi5idWZmZXIuZHR5cGU9aH1uLnR5cGU9aCwwPihhPXMpJiYoYT1uLmJ1ZmZlci5ieXRlTGVuZ3RoLDUxMjM9PT1oP2E+Pj0xOjUxMjU9PT1oJiYoYT4+PTIpKSxuLnZlcnRDb3VudD1hLGE9bywwPm8mJihhPTQsMT09PShvPW4uYnVmZmVyLmRpbWVuc2lvbikmJihhPTApLDI9PT1vJiYoYT0xKSwzPT09byYmKGE9NCkpLG4ucHJpbVR5cGU9YX1mdW5jdGlvbiBvKHQpe24uZWxlbWVudHNDb3VudC0tLGRlbGV0ZSBzW3QuaWRdLHQuYnVmZmVyLmRlc3Ryb3koKSx0LmJ1ZmZlcj1udWxsfXZhciBzPXt9LGM9MCx1PXt1aW50ODo1MTIxLHVpbnQxNjo1MTIzfTtlLm9lc19lbGVtZW50X2luZGV4X3VpbnQmJih1LnVpbnQzMj01MTI1KSxhLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5idWZmZXIuYmluZCgpfTt2YXIgaD1bXTtyZXR1cm57Y3JlYXRlOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcyh0KXtpZih0KWlmKCJudW1iZXIiPT10eXBlb2YgdCljKHQpLGgucHJpbVR5cGU9NCxoLnZlcnRDb3VudD0wfHQsaC50eXBlPTUxMjE7ZWxzZXt2YXIgZT1udWxsLHI9MzUwNDQsbj0tMSxhPS0xLG89MCxmPTA7QXJyYXkuaXNBcnJheSh0KXx8Vyh0KXx8bCh0KT9lPXQ6KCJkYXRhImluIHQmJihlPXQuZGF0YSksInVzYWdlImluIHQmJihyPVFbdC51c2FnZV0pLCJwcmltaXRpdmUiaW4gdCYmKG49cnRbdC5wcmltaXRpdmVdKSwiY291bnQiaW4gdCYmKGE9MHx0LmNvdW50KSwidHlwZSJpbiB0JiYoZj11W3QudHlwZV0pLCJsZW5ndGgiaW4gdD9vPTB8dC5sZW5ndGg6KG89YSw1MTIzPT09Znx8NTEyMj09PWY/byo9Mjo1MTI1IT09ZiYmNTEyNCE9PWZ8fChvKj00KSkpLGkoaCxlLHIsbixhLG8sZil9ZWxzZSBjKCksaC5wcmltVHlwZT00LGgudmVydENvdW50PTAsaC50eXBlPTUxMjE7cmV0dXJuIHN9dmFyIGM9ci5jcmVhdGUobnVsbCwzNDk2MywhMCksaD1uZXcgYShjLl9idWZmZXIpO3JldHVybiBuLmVsZW1lbnRzQ291bnQrKyxzKHQpLHMuX3JlZ2xUeXBlPSJlbGVtZW50cyIscy5fZWxlbWVudHM9aCxzLnN1YmRhdGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYy5zdWJkYXRhKHQsZSksc30scy5kZXN0cm95PWZ1bmN0aW9uKCl7byhoKX0sc30sY3JlYXRlU3RyZWFtOmZ1bmN0aW9uKHQpe3ZhciBlPWgucG9wKCk7cmV0dXJuIGV8fChlPW5ldyBhKHIuY3JlYXRlKG51bGwsMzQ5NjMsITAsITEpLl9idWZmZXIpKSxpKGUsdCwzNTA0MCwtMSwtMSwwLDApLGV9LGRlc3Ryb3lTdHJlYW06ZnVuY3Rpb24odCl7aC5wdXNoKHQpfSxnZXRFbGVtZW50czpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5fZWxlbWVudHMgaW5zdGFuY2VvZiBhP3QuX2VsZW1lbnRzOm51bGx9LGNsZWFyOmZ1bmN0aW9uKCl7WChzKS5mb3JFYWNoKG8pfX19ZnVuY3Rpb24gZyh0KXtmb3IodmFyIGU9Ry5hbGxvY1R5cGUoNTEyMyx0Lmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKWlmKGlzTmFOKHRbcl0pKWVbcl09NjU1MzU7ZWxzZSBpZigxLzA9PT10W3JdKWVbcl09MzE3NDQ7ZWxzZSBpZigtMS8wPT09dFtyXSllW3JdPTY0NTEyO2Vsc2V7bnRbMF09dFtyXTt2YXIgbj0oaT1hdFswXSk+Pj4zMTw8MTUsYT0oaTw8MT4+PjI0KS0xMjcsaT1pPj4xMyYxMDIzO2Vbcl09LTI0PmE/bjotMTQ+YT9uKyhpKzEwMjQ+Pi0xNC1hKToxNTxhP24rMzE3NDQ6bisoYSsxNTw8MTApK2l9cmV0dXJuIGV9ZnVuY3Rpb24gdih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8Vyh0KX1mdW5jdGlvbiBtKHQpe3JldHVybiJbb2JqZWN0ICIrdCsiXSJ9ZnVuY3Rpb24geSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmKDA9PT10Lmxlbmd0aHx8Im51bWJlciI9PXR5cGVvZiB0WzBdKX1mdW5jdGlvbiB4KHQpe3JldHVybiEoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aHx8IXYodFswXSkpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBfKHQpe2lmKCF0KXJldHVybiExO3ZhciBlPWIodCk7cmV0dXJuIDA8PXB0LmluZGV4T2YoZSl8fCh5KHQpfHx4KHQpfHxsKHQpKX1mdW5jdGlvbiB3KHQsZSl7MzYxOTM9PT10LnR5cGU/KHQuZGF0YT1nKGUpLEcuZnJlZVR5cGUoZSkpOnQuZGF0YT1lfWZ1bmN0aW9uIGsodCxlLHIsbixhLGkpe2lmKHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBndFt0XT9ndFt0XTpzdFt0XSpkdFtlXSxpJiYodCo9NiksYSl7Zm9yKG49MDsxPD1yOyluKz10KnIqcixyLz0yO3JldHVybiBufXJldHVybiB0KnIqbn1mdW5jdGlvbiBUKHQsZSxyLG4sYSxpLG8pe2Z1bmN0aW9uIHMoKXt0aGlzLmZvcm1hdD10aGlzLmludGVybmFsZm9ybWF0PTY0MDgsdGhpcy50eXBlPTUxMjEsdGhpcy5mbGlwWT10aGlzLnByZW11bHRpcGx5QWxwaGE9dGhpcy5jb21wcmVzc2VkPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTEsdGhpcy5jb2xvclNwYWNlPTM3NDQ0LHRoaXMuY2hhbm5lbHM9dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wfWZ1bmN0aW9uIGModCxlKXt0LmludGVybmFsZm9ybWF0PWUuaW50ZXJuYWxmb3JtYXQsdC5mb3JtYXQ9ZS5mb3JtYXQsdC50eXBlPWUudHlwZSx0LmNvbXByZXNzZWQ9ZS5jb21wcmVzc2VkLHQucHJlbXVsdGlwbHlBbHBoYT1lLnByZW11bHRpcGx5QWxwaGEsdC5mbGlwWT1lLmZsaXBZLHQudW5wYWNrQWxpZ25tZW50PWUudW5wYWNrQWxpZ25tZW50LHQuY29sb3JTcGFjZT1lLmNvbG9yU3BhY2UsdC53aWR0aD1lLndpZHRoLHQuaGVpZ2h0PWUuaGVpZ2h0LHQuY2hhbm5lbHM9ZS5jaGFubmVsc31mdW5jdGlvbiB1KHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZlKXsicHJlbXVsdGlwbHlBbHBoYSJpbiBlJiYodC5wcmVtdWx0aXBseUFscGhhPWUucHJlbXVsdGlwbHlBbHBoYSksImZsaXBZImluIGUmJih0LmZsaXBZPWUuZmxpcFkpLCJhbGlnbm1lbnQiaW4gZSYmKHQudW5wYWNrQWxpZ25tZW50PWUuYWxpZ25tZW50KSwiY29sb3JTcGFjZSJpbiBlJiYodC5jb2xvclNwYWNlPXFbZS5jb2xvclNwYWNlXSksInR5cGUiaW4gZSYmKHQudHlwZT1IW2UudHlwZV0pO3ZhciByPXQud2lkdGgsbj10LmhlaWdodCxhPXQuY2hhbm5lbHMsaT0hMTsic2hhcGUiaW4gZT8ocj1lLnNoYXBlWzBdLG49ZS5zaGFwZVsxXSwzPT09ZS5zaGFwZS5sZW5ndGgmJihhPWUuc2hhcGVbMl0saT0hMCkpOigicmFkaXVzImluIGUmJihyPW49ZS5yYWRpdXMpLCJ3aWR0aCJpbiBlJiYocj1lLndpZHRoKSwiaGVpZ2h0ImluIGUmJihuPWUuaGVpZ2h0KSwiY2hhbm5lbHMiaW4gZSYmKGE9ZS5jaGFubmVscyxpPSEwKSksdC53aWR0aD0wfHIsdC5oZWlnaHQ9MHxuLHQuY2hhbm5lbHM9MHxhLHI9ITEsImZvcm1hdCJpbiBlJiYocj1lLmZvcm1hdCxuPXQuaW50ZXJuYWxmb3JtYXQ9WVtyXSx0LmZvcm1hdD1wdFtuXSxyIGluIEgmJiEoInR5cGUiaW4gZSkmJih0LnR5cGU9SFtyXSksciBpbiBLJiYodC5jb21wcmVzc2VkPSEwKSxyPSEwKSwhaSYmcj90LmNoYW5uZWxzPXN0W3QuZm9ybWF0XTppJiYhciYmdC5jaGFubmVscyE9PW90W3QuZm9ybWF0XSYmKHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9b3RbdC5jaGFubmVsc10pfX1mdW5jdGlvbiBoKGUpe3QucGl4ZWxTdG9yZWkoMzc0NDAsZS5mbGlwWSksdC5waXhlbFN0b3JlaSgzNzQ0MSxlLnByZW11bHRpcGx5QWxwaGEpLHQucGl4ZWxTdG9yZWkoMzc0NDMsZS5jb2xvclNwYWNlKSx0LnBpeGVsU3RvcmVpKDMzMTcsZS51bnBhY2tBbGlnbm1lbnQpfWZ1bmN0aW9uIGYoKXtzLmNhbGwodGhpcyksdGhpcy55T2Zmc2V0PXRoaXMueE9mZnNldD0wLHRoaXMuZGF0YT1udWxsLHRoaXMubmVlZHNGcmVlPSExLHRoaXMuZWxlbWVudD1udWxsLHRoaXMubmVlZHNDb3B5PSExfWZ1bmN0aW9uIHAodCxlKXt2YXIgcj1udWxsO2lmKF8oZSk/cj1lOmUmJih1KHQsZSksIngiaW4gZSYmKHQueE9mZnNldD0wfGUueCksInkiaW4gZSYmKHQueU9mZnNldD0wfGUueSksXyhlLmRhdGEpJiYocj1lLmRhdGEpKSxlLmNvcHkpe3ZhciBuPWEudmlld3BvcnRXaWR0aCxpPWEudmlld3BvcnRIZWlnaHQ7dC53aWR0aD10LndpZHRofHxuLXQueE9mZnNldCx0LmhlaWdodD10LmhlaWdodHx8aS10LnlPZmZzZXQsdC5uZWVkc0NvcHk9ITB9ZWxzZSBpZihyKXtpZihXKHIpKXQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NCx0LmRhdGE9ciwidHlwZSJpbiBlfHw1MTIxIT09dC50eXBlfHwodC50eXBlPTB8SltPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocildKTtlbHNlIGlmKHkocikpe3N3aXRjaCh0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDQsaT0obj1yKS5sZW5ndGgsdC50eXBlKXtjYXNlIDUxMjE6Y2FzZSA1MTIzOmNhc2UgNTEyNTpjYXNlIDUxMjY6KGk9Ry5hbGxvY1R5cGUodC50eXBlLGkpKS5zZXQobiksdC5kYXRhPWk7YnJlYWs7Y2FzZSAzNjE5Mzp0LmRhdGE9ZyhuKX10LmFsaWdubWVudD0xLHQubmVlZHNGcmVlPSEwfWVsc2UgaWYobChyKSl7bj1yLmRhdGEsQXJyYXkuaXNBcnJheShuKXx8NTEyMSE9PXQudHlwZXx8KHQudHlwZT0wfEpbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pXSk7aT1yLnNoYXBlO3ZhciBvLHMsYyxoLGY9ci5zdHJpZGU7Mz09PWkubGVuZ3RoPyhjPWlbMl0saD1mWzJdKTpoPWM9MSxvPWlbMF0scz1pWzFdLGk9ZlswXSxmPWZbMV0sdC5hbGlnbm1lbnQ9MSx0LndpZHRoPW8sdC5oZWlnaHQ9cyx0LmNoYW5uZWxzPWMsdC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1vdFtjXSx0Lm5lZWRzRnJlZT0hMCxvPWgscj1yLm9mZnNldCxjPXQud2lkdGgsaD10LmhlaWdodCxzPXQuY2hhbm5lbHM7Zm9yKHZhciBwPUcuYWxsb2NUeXBlKDM2MTkzPT09dC50eXBlPzUxMjY6dC50eXBlLGMqaCpzKSxkPTAsbT0wO208aDsrK20pZm9yKHZhciBrPTA7azxjOysraylmb3IodmFyIFQ9MDtUPHM7KytUKXBbZCsrXT1uW2kqaytmKm0rbypUK3JdO3codCxwKX1lbHNlIGlmKGIocik9PT1sdHx8YihyKT09PWN0KWIocik9PT1sdD90LmVsZW1lbnQ9cjp0LmVsZW1lbnQ9ci5jYW52YXMsdC53aWR0aD10LmVsZW1lbnQud2lkdGgsdC5oZWlnaHQ9dC5lbGVtZW50LmhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihiKHIpPT09dXQpdC5lbGVtZW50PXIsdC53aWR0aD1yLndpZHRoLHQuaGVpZ2h0PXIuaGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKGIocik9PT1odCl0LmVsZW1lbnQ9cix0LndpZHRoPXIubmF0dXJhbFdpZHRoLHQuaGVpZ2h0PXIubmF0dXJhbEhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihiKHIpPT09ZnQpdC5lbGVtZW50PXIsdC53aWR0aD1yLnZpZGVvV2lkdGgsdC5oZWlnaHQ9ci52aWRlb0hlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZih4KHIpKXtmb3Iobj10LndpZHRofHxyWzBdLmxlbmd0aCxpPXQuaGVpZ2h0fHxyLmxlbmd0aCxmPXQuY2hhbm5lbHMsZj12KHJbMF1bMF0pP2Z8fHJbMF1bMF0ubGVuZ3RoOmZ8fDEsbz1aLnNoYXBlKHIpLGM9MSxoPTA7aDxvLmxlbmd0aDsrK2gpYyo9b1toXTtjPUcuYWxsb2NUeXBlKDM2MTkzPT09dC50eXBlPzUxMjY6dC50eXBlLGMpLFouZmxhdHRlbihyLG8sIiIsYyksdyh0LGMpLHQuYWxpZ25tZW50PTEsdC53aWR0aD1uLHQuaGVpZ2h0PWksdC5jaGFubmVscz1mLHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9b3RbZl0sdC5uZWVkc0ZyZWU9ITB9fWVsc2UgdC53aWR0aD10LndpZHRofHwxLHQuaGVpZ2h0PXQuaGVpZ2h0fHwxLHQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NH1mdW5jdGlvbiBkKGUscixhLGksbyl7dmFyIHM9ZS5lbGVtZW50LGw9ZS5kYXRhLGM9ZS5pbnRlcm5hbGZvcm1hdCx1PWUuZm9ybWF0LGY9ZS50eXBlLHA9ZS53aWR0aCxkPWUuaGVpZ2h0O2goZSkscz90LnRleFN1YkltYWdlMkQocixvLGEsaSx1LGYscyk6ZS5jb21wcmVzc2VkP3QuY29tcHJlc3NlZFRleFN1YkltYWdlMkQocixvLGEsaSxjLHAsZCxsKTplLm5lZWRzQ29weT8obigpLHQuY29weVRleFN1YkltYWdlMkQocixvLGEsaSxlLnhPZmZzZXQsZS55T2Zmc2V0LHAsZCkpOnQudGV4U3ViSW1hZ2UyRChyLG8sYSxpLHAsZCx1LGYsbCl9ZnVuY3Rpb24gbSgpe3JldHVybiBkdC5wb3AoKXx8bmV3IGZ9ZnVuY3Rpb24gVCh0KXt0Lm5lZWRzRnJlZSYmRy5mcmVlVHlwZSh0LmRhdGEpLGYuY2FsbCh0KSxkdC5wdXNoKHQpfWZ1bmN0aW9uIE0oKXtzLmNhbGwodGhpcyksdGhpcy5nZW5NaXBtYXBzPSExLHRoaXMubWlwbWFwSGludD00MzUyLHRoaXMubWlwbWFzaz0wLHRoaXMuaW1hZ2VzPUFycmF5KDE2KX1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj10LmltYWdlc1swXT1tKCk7dC5taXBtYXNrPTEsbi53aWR0aD10LndpZHRoPWUsbi5oZWlnaHQ9dC5oZWlnaHQ9cixuLmNoYW5uZWxzPXQuY2hhbm5lbHM9NH1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9bnVsbDtpZihfKGUpKWMocj10LmltYWdlc1swXT1tKCksdCkscChyLGUpLHQubWlwbWFzaz0xO2Vsc2UgaWYodSh0LGUpLEFycmF5LmlzQXJyYXkoZS5taXBtYXApKWZvcih2YXIgbj1lLm1pcG1hcCxhPTA7YTxuLmxlbmd0aDsrK2EpYyhyPXQuaW1hZ2VzW2FdPW0oKSx0KSxyLndpZHRoPj49YSxyLmhlaWdodD4+PWEscChyLG5bYV0pLHQubWlwbWFza3w9MTw8YTtlbHNlIGMocj10LmltYWdlc1swXT1tKCksdCkscChyLGUpLHQubWlwbWFzaz0xO2ModCx0LmltYWdlc1swXSl9ZnVuY3Rpb24gRShlLHIpe2Zvcih2YXIgYT1lLmltYWdlcyxpPTA7aTxhLmxlbmd0aCYmYVtpXTsrK2kpe3ZhciBvPWFbaV0scz1yLGw9aSxjPW8uZWxlbWVudCx1PW8uZGF0YSxmPW8uaW50ZXJuYWxmb3JtYXQscD1vLmZvcm1hdCxkPW8udHlwZSxnPW8ud2lkdGgsdj1vLmhlaWdodCxtPW8uY2hhbm5lbHM7aChvKSxjP3QudGV4SW1hZ2UyRChzLGwscCxwLGQsYyk6by5jb21wcmVzc2VkP3QuY29tcHJlc3NlZFRleEltYWdlMkQocyxsLGYsZyx2LDAsdSk6by5uZWVkc0NvcHk/KG4oKSx0LmNvcHlUZXhJbWFnZTJEKHMsbCxwLG8ueE9mZnNldCxvLnlPZmZzZXQsZyx2LDApKTooKG89IXUpJiYodT1HLnplcm8uYWxsb2NUeXBlKGQsZyp2Km0pKSx0LnRleEltYWdlMkQocyxsLHAsZyx2LDAscCxkLHUpLG8mJnUmJkcuemVyby5mcmVlVHlwZSh1KSl9fWZ1bmN0aW9uIEwoKXt2YXIgdD1ndC5wb3AoKXx8bmV3IE07cy5jYWxsKHQpO2Zvcih2YXIgZT10Lm1pcG1hc2s9MDsxNj5lOysrZSl0LmltYWdlc1tlXT1udWxsO3JldHVybiB0fWZ1bmN0aW9uIEModCl7Zm9yKHZhciBlPXQuaW1hZ2VzLHI9MDtyPGUubGVuZ3RoOysrcillW3JdJiZUKGVbcl0pLGVbcl09bnVsbDtndC5wdXNoKHQpfWZ1bmN0aW9uIFAoKXt0aGlzLm1hZ0ZpbHRlcj10aGlzLm1pbkZpbHRlcj05NzI4LHRoaXMud3JhcFQ9dGhpcy53cmFwUz0zMzA3MSx0aGlzLmFuaXNvdHJvcGljPTEsdGhpcy5nZW5NaXBtYXBzPSExLHRoaXMubWlwbWFwSGludD00MzUyfWZ1bmN0aW9uIE8odCxlKXsibWluImluIGUmJih0Lm1pbkZpbHRlcj1VW2UubWluXSwwPD1pdC5pbmRleE9mKHQubWluRmlsdGVyKSYmISgiZmFjZXMiaW4gZSkmJih0Lmdlbk1pcG1hcHM9ITApKSwibWFnImluIGUmJih0Lm1hZ0ZpbHRlcj1WW2UubWFnXSk7dmFyIHI9dC53cmFwUyxuPXQud3JhcFQ7aWYoIndyYXAiaW4gZSl7dmFyIGE9ZS53cmFwOyJzdHJpbmciPT10eXBlb2YgYT9yPW49TlthXTpBcnJheS5pc0FycmF5KGEpJiYocj1OW2FbMF1dLG49TlthWzFdXSl9ZWxzZSJ3cmFwUyJpbiBlJiYocj1OW2Uud3JhcFNdKSwid3JhcFQiaW4gZSYmKG49TltlLndyYXBUXSk7aWYodC53cmFwUz1yLHQud3JhcFQ9biwiYW5pc290cm9waWMiaW4gZSYmKHQuYW5pc290cm9waWM9ZS5hbmlzb3Ryb3BpYyksIm1pcG1hcCJpbiBlKXtzd2l0Y2gocj0hMSx0eXBlb2YgZS5taXBtYXApe2Nhc2Uic3RyaW5nIjp0Lm1pcG1hcEhpbnQ9QltlLm1pcG1hcF0scj10Lmdlbk1pcG1hcHM9ITA7YnJlYWs7Y2FzZSJib29sZWFuIjpyPXQuZ2VuTWlwbWFwcz1lLm1pcG1hcDticmVhaztjYXNlIm9iamVjdCI6dC5nZW5NaXBtYXBzPSExLHI9ITB9IXJ8fCJtaW4iaW4gZXx8KHQubWluRmlsdGVyPTk5ODQpfX1mdW5jdGlvbiB6KHIsbil7dC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDEsci5taW5GaWx0ZXIpLHQudGV4UGFyYW1ldGVyaShuLDEwMjQwLHIubWFnRmlsdGVyKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MixyLndyYXBTKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MyxyLndyYXBUKSxlLmV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyYmdC50ZXhQYXJhbWV0ZXJpKG4sMzQwNDYsci5hbmlzb3Ryb3BpYyksci5nZW5NaXBtYXBzJiYodC5oaW50KDMzMTcwLHIubWlwbWFwSGludCksdC5nZW5lcmF0ZU1pcG1hcChuKSl9ZnVuY3Rpb24gSShlKXtzLmNhbGwodGhpcyksdGhpcy5taXBtYXNrPTAsdGhpcy5pbnRlcm5hbGZvcm1hdD02NDA4LHRoaXMuaWQ9dnQrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy50YXJnZXQ9ZSx0aGlzLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdGhpcy51bml0PS0xLHRoaXMuYmluZENvdW50PTAsdGhpcy50ZXhJbmZvPW5ldyBQLG8ucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIEQoZSl7dC5hY3RpdmVUZXh0dXJlKDMzOTg0KSx0LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSl9ZnVuY3Rpb24gUigpe3ZhciBlPXh0WzBdO2U/dC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpOnQuYmluZFRleHR1cmUoMzU1MyxudWxsKX1mdW5jdGlvbiBGKGUpe3ZhciByPWUudGV4dHVyZSxuPWUudW5pdCxhPWUudGFyZ2V0OzA8PW4mJih0LmFjdGl2ZVRleHR1cmUoMzM5ODQrbiksdC5iaW5kVGV4dHVyZShhLG51bGwpLHh0W25dPW51bGwpLHQuZGVsZXRlVGV4dHVyZShyKSxlLnRleHR1cmU9bnVsbCxlLnBhcmFtcz1udWxsLGUucGl4ZWxzPW51bGwsZS5yZWZDb3VudD0wLGRlbGV0ZSBtdFtlLmlkXSxpLnRleHR1cmVDb3VudC0tfXZhciBCPXsiZG9uJ3QgY2FyZSI6NDM1MiwiZG9udCBjYXJlIjo0MzUyLG5pY2U6NDM1NCxmYXN0OjQzNTN9LE49e3JlcGVhdDoxMDQ5NyxjbGFtcDozMzA3MSxtaXJyb3I6MzM2NDh9LFY9e25lYXJlc3Q6OTcyOCxsaW5lYXI6OTcyOX0sVT1qKHttaXBtYXA6OTk4NywibmVhcmVzdCBtaXBtYXAgbmVhcmVzdCI6OTk4NCwibGluZWFyIG1pcG1hcCBuZWFyZXN0Ijo5OTg1LCJuZWFyZXN0IG1pcG1hcCBsaW5lYXIiOjk5ODYsImxpbmVhciBtaXBtYXAgbGluZWFyIjo5OTg3fSxWKSxxPXtub25lOjAsYnJvd3NlcjozNzQ0NH0sSD17dWludDg6NTEyMSxyZ2JhNDozMjgxOSxyZ2I1NjU6MzM2MzUsInJnYjUgYTEiOjMyODIwfSxZPXthbHBoYTo2NDA2LGx1bWluYW5jZTo2NDA5LCJsdW1pbmFuY2UgYWxwaGEiOjY0MTAscmdiOjY0MDcscmdiYTo2NDA4LHJnYmE0OjMyODU0LCJyZ2I1IGExIjozMjg1NSxyZ2I1NjU6MzYxOTR9LEs9e307ZS5leHRfc3JnYiYmKFkuc3JnYj0zNTkwNCxZLnNyZ2JhPTM1OTA2KSxlLm9lc190ZXh0dXJlX2Zsb2F0JiYoSC5mbG9hdDMyPUguZmxvYXQ9NTEyNiksZS5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0JiYoSC5mbG9hdDE2PUhbImhhbGYgZmxvYXQiXT0zNjE5MyksZS53ZWJnbF9kZXB0aF90ZXh0dXJlJiYoaihZLHtkZXB0aDo2NDAyLCJkZXB0aCBzdGVuY2lsIjozNDA0MX0pLGooSCx7dWludDE2OjUxMjMsdWludDMyOjUxMjUsImRlcHRoIHN0ZW5jaWwiOjM0MDQyfSkpLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMmJmooSyx7InJnYiBzM3RjIGR4dDEiOjMzNzc2LCJyZ2JhIHMzdGMgZHh0MSI6MzM3NzcsInJnYmEgczN0YyBkeHQzIjozMzc3OCwicmdiYSBzM3RjIGR4dDUiOjMzNzc5fSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfYXRjJiZqKEsseyJyZ2IgYXRjIjozNTk4NiwicmdiYSBhdGMgZXhwbGljaXQgYWxwaGEiOjM1OTg3LCJyZ2JhIGF0YyBpbnRlcnBvbGF0ZWQgYWxwaGEiOjM0Nzk4fSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMmJmooSyx7InJnYiBwdnJ0YyA0YnBwdjEiOjM1ODQwLCJyZ2IgcHZydGMgMmJwcHYxIjozNTg0MSwicmdiYSBwdnJ0YyA0YnBwdjEiOjM1ODQyLCJyZ2JhIHB2cnRjIDJicHB2MSI6MzU4NDN9KSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxJiYoS1sicmdiIGV0YzEiXT0zNjE5Nik7dmFyIFE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5nZXRQYXJhbWV0ZXIoMzQ0NjcpKTtPYmplY3Qua2V5cyhLKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPUtbdF07MDw9US5pbmRleE9mKGUpJiYoWVt0XT1lKX0pO3ZhciAkPU9iamVjdC5rZXlzKFkpO3IudGV4dHVyZUZvcm1hdHM9JDt2YXIgdHQ9W107T2JqZWN0LmtleXMoWSkuZm9yRWFjaChmdW5jdGlvbih0KXt0dFtZW3RdXT10fSk7dmFyIGV0PVtdO09iamVjdC5rZXlzKEgpLmZvckVhY2goZnVuY3Rpb24odCl7ZXRbSFt0XV09dH0pO3ZhciBydD1bXTtPYmplY3Qua2V5cyhWKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3J0W1ZbdF1dPXR9KTt2YXIgbnQ9W107T2JqZWN0LmtleXMoVSkuZm9yRWFjaChmdW5jdGlvbih0KXtudFtVW3RdXT10fSk7dmFyIGF0PVtdO09iamVjdC5rZXlzKE4pLmZvckVhY2goZnVuY3Rpb24odCl7YXRbTlt0XV09dH0pO3ZhciBwdD0kLnJlZHVjZShmdW5jdGlvbih0LGUpe3ZhciByPVlbZV07cmV0dXJuIDY0MDk9PT1yfHw2NDA2PT09cnx8NjQwOT09PXJ8fDY0MTA9PT1yfHw2NDAyPT09cnx8MzQwNDE9PT1yP3Rbcl09cjozMjg1NT09PXJ8fDA8PWUuaW5kZXhPZigicmdiYSIpP3Rbcl09NjQwODp0W3JdPTY0MDcsdH0se30pLGR0PVtdLGd0PVtdLHZ0PTAsbXQ9e30seXQ9ci5tYXhUZXh0dXJlVW5pdHMseHQ9QXJyYXkoeXQpLm1hcChmdW5jdGlvbigpe3JldHVybiBudWxsfSk7cmV0dXJuIGooSS5wcm90b3R5cGUse2JpbmQ6ZnVuY3Rpb24oKXt0aGlzLmJpbmRDb3VudCs9MTt2YXIgZT10aGlzLnVuaXQ7aWYoMD5lKXtmb3IodmFyIHI9MDtyPHl0Oysrcil7dmFyIG49eHRbcl07aWYobil7aWYoMDxuLmJpbmRDb3VudCljb250aW51ZTtuLnVuaXQ9LTF9eHRbcl09dGhpcyxlPXI7YnJlYWt9by5wcm9maWxlJiZpLm1heFRleHR1cmVVbml0czxlKzEmJihpLm1heFRleHR1cmVVbml0cz1lKzEpLHRoaXMudW5pdD1lLHQuYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSx0LmJpbmRUZXh0dXJlKHRoaXMudGFyZ2V0LHRoaXMudGV4dHVyZSl9cmV0dXJuIGV9LHVuYmluZDpmdW5jdGlvbigpey0tdGhpcy5iaW5kQ291bnR9LGRlY1JlZjpmdW5jdGlvbigpezA+PS0tdGhpcy5yZWZDb3VudCYmRih0aGlzKX19KSxvLnByb2ZpbGUmJihpLmdldFRvdGFsVGV4dHVyZVNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyhtdCkuZm9yRWFjaChmdW5jdGlvbihlKXt0Kz1tdFtlXS5zdGF0cy5zaXplfSksdH0pLHtjcmVhdGUyRDpmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1hLnRleEluZm87UC5jYWxsKHIpO3ZhciBpPUwoKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/QShpLDB8dCwibnVtYmVyIj09dHlwZW9mIGU/MHxlOjB8dCk6dD8oTyhyLHQpLFMoaSx0KSk6QShpLDEsMSksci5nZW5NaXBtYXBzJiYoaS5taXBtYXNrPShpLndpZHRoPDwxKS0xKSxhLm1pcG1hc2s9aS5taXBtYXNrLGMoYSxpKSxhLmludGVybmFsZm9ybWF0PWkuaW50ZXJuYWxmb3JtYXQsbi53aWR0aD1pLndpZHRoLG4uaGVpZ2h0PWkuaGVpZ2h0LEQoYSksRShpLDM1NTMpLHoociwzNTUzKSxSKCksQyhpKSxvLnByb2ZpbGUmJihhLnN0YXRzLnNpemU9ayhhLmludGVybmFsZm9ybWF0LGEudHlwZSxpLndpZHRoLGkuaGVpZ2h0LHIuZ2VuTWlwbWFwcywhMSkpLG4uZm9ybWF0PXR0W2EuaW50ZXJuYWxmb3JtYXRdLG4udHlwZT1ldFthLnR5cGVdLG4ubWFnPXJ0W3IubWFnRmlsdGVyXSxuLm1pbj1udFtyLm1pbkZpbHRlcl0sbi53cmFwUz1hdFtyLndyYXBTXSxuLndyYXBUPWF0W3Iud3JhcFRdLG59dmFyIGE9bmV3IEkoMzU1Myk7cmV0dXJuIG10W2EuaWRdPWEsaS50ZXh0dXJlQ291bnQrKyxuKGUsciksbi5zdWJpbWFnZT1mdW5jdGlvbih0LGUscixpKXtlfD0wLHJ8PTAsaXw9MDt2YXIgbz1tKCk7cmV0dXJuIGMobyxhKSxvLndpZHRoPTAsby5oZWlnaHQ9MCxwKG8sdCksby53aWR0aD1vLndpZHRofHwoYS53aWR0aD4+aSktZSxvLmhlaWdodD1vLmhlaWdodHx8KGEuaGVpZ2h0Pj5pKS1yLEQoYSksZChvLDM1NTMsZSxyLGkpLFIoKSxUKG8pLG59LG4ucmVzaXplPWZ1bmN0aW9uKGUscil7dmFyIGk9MHxlLHM9MHxyfHxpO2lmKGk9PT1hLndpZHRoJiZzPT09YS5oZWlnaHQpcmV0dXJuIG47bi53aWR0aD1hLndpZHRoPWksbi5oZWlnaHQ9YS5oZWlnaHQ9cyxEKGEpO2Zvcih2YXIgbCxjPWEuY2hhbm5lbHMsdT1hLnR5cGUsaD0wO2EubWlwbWFzaz4+aDsrK2gpe3ZhciBmPWk+PmgscD1zPj5oO2lmKCFmfHwhcClicmVhaztsPUcuemVyby5hbGxvY1R5cGUodSxmKnAqYyksdC50ZXhJbWFnZTJEKDM1NTMsaCxhLmZvcm1hdCxmLHAsMCxhLmZvcm1hdCxhLnR5cGUsbCksbCYmRy56ZXJvLmZyZWVUeXBlKGwpfXJldHVybiBSKCksby5wcm9maWxlJiYoYS5zdGF0cy5zaXplPWsoYS5pbnRlcm5hbGZvcm1hdCxhLnR5cGUsaSxzLCExLCExKSksbn0sbi5fcmVnbFR5cGU9InRleHR1cmUyZCIsbi5fdGV4dHVyZT1hLG8ucHJvZmlsZSYmKG4uc3RhdHM9YS5zdGF0cyksbi5kZXN0cm95PWZ1bmN0aW9uKCl7YS5kZWNSZWYoKX0sbn0sY3JlYXRlQ3ViZTpmdW5jdGlvbihlLHIsbixhLHMsbCl7ZnVuY3Rpb24gaCh0LGUscixuLGEsaSl7dmFyIHMsbD1mLnRleEluZm87Zm9yKFAuY2FsbChsKSxzPTA7Nj5zOysrcylnW3NdPUwoKTtpZigibnVtYmVyIiE9dHlwZW9mIHQmJnQpe2lmKCJvYmplY3QiPT10eXBlb2YgdClpZihlKVMoZ1swXSx0KSxTKGdbMV0sZSksUyhnWzJdLHIpLFMoZ1szXSxuKSxTKGdbNF0sYSksUyhnWzVdLGkpO2Vsc2UgaWYoTyhsLHQpLHUoZix0KSwiZmFjZXMiaW4gdClmb3IodD10LmZhY2VzLHM9MDs2PnM7KytzKWMoZ1tzXSxmKSxTKGdbc10sdFtzXSk7ZWxzZSBmb3Iocz0wOzY+czsrK3MpUyhnW3NdLHQpfWVsc2UgZm9yKHQ9MHx0fHwxLHM9MDs2PnM7KytzKUEoZ1tzXSx0LHQpO2ZvcihjKGYsZ1swXSksZi5taXBtYXNrPWwuZ2VuTWlwbWFwcz8oZ1swXS53aWR0aDw8MSktMTpnWzBdLm1pcG1hc2ssZi5pbnRlcm5hbGZvcm1hdD1nWzBdLmludGVybmFsZm9ybWF0LGgud2lkdGg9Z1swXS53aWR0aCxoLmhlaWdodD1nWzBdLmhlaWdodCxEKGYpLHM9MDs2PnM7KytzKUUoZ1tzXSwzNDA2OStzKTtmb3IoeihsLDM0MDY3KSxSKCksby5wcm9maWxlJiYoZi5zdGF0cy5zaXplPWsoZi5pbnRlcm5hbGZvcm1hdCxmLnR5cGUsaC53aWR0aCxoLmhlaWdodCxsLmdlbk1pcG1hcHMsITApKSxoLmZvcm1hdD10dFtmLmludGVybmFsZm9ybWF0XSxoLnR5cGU9ZXRbZi50eXBlXSxoLm1hZz1ydFtsLm1hZ0ZpbHRlcl0saC5taW49bnRbbC5taW5GaWx0ZXJdLGgud3JhcFM9YXRbbC53cmFwU10saC53cmFwVD1hdFtsLndyYXBUXSxzPTA7Nj5zOysrcylDKGdbc10pO3JldHVybiBofXZhciBmPW5ldyBJKDM0MDY3KTttdFtmLmlkXT1mLGkuY3ViZUNvdW50Kys7dmFyIGc9QXJyYXkoNik7cmV0dXJuIGgoZSxyLG4sYSxzLGwpLGguc3ViaW1hZ2U9ZnVuY3Rpb24odCxlLHIsbixhKXtyfD0wLG58PTAsYXw9MDt2YXIgaT1tKCk7cmV0dXJuIGMoaSxmKSxpLndpZHRoPTAsaS5oZWlnaHQ9MCxwKGksZSksaS53aWR0aD1pLndpZHRofHwoZi53aWR0aD4+YSktcixpLmhlaWdodD1pLmhlaWdodHx8KGYuaGVpZ2h0Pj5hKS1uLEQoZiksZChpLDM0MDY5K3QscixuLGEpLFIoKSxUKGkpLGh9LGgucmVzaXplPWZ1bmN0aW9uKGUpe2lmKChlfD0wKSE9PWYud2lkdGgpe2gud2lkdGg9Zi53aWR0aD1lLGguaGVpZ2h0PWYuaGVpZ2h0PWUsRChmKTtmb3IodmFyIHI9MDs2PnI7KytyKWZvcih2YXIgbj0wO2YubWlwbWFzaz4+bjsrK24pdC50ZXhJbWFnZTJEKDM0MDY5K3IsbixmLmZvcm1hdCxlPj5uLGU+Pm4sMCxmLmZvcm1hdCxmLnR5cGUsbnVsbCk7cmV0dXJuIFIoKSxvLnByb2ZpbGUmJihmLnN0YXRzLnNpemU9ayhmLmludGVybmFsZm9ybWF0LGYudHlwZSxoLndpZHRoLGguaGVpZ2h0LCExLCEwKSksaH19LGguX3JlZ2xUeXBlPSJ0ZXh0dXJlQ3ViZSIsaC5fdGV4dHVyZT1mLG8ucHJvZmlsZSYmKGguc3RhdHM9Zi5zdGF0cyksaC5kZXN0cm95PWZ1bmN0aW9uKCl7Zi5kZWNSZWYoKX0saH0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHl0OysrZSl0LmFjdGl2ZVRleHR1cmUoMzM5ODQrZSksdC5iaW5kVGV4dHVyZSgzNTUzLG51bGwpLHh0W2VdPW51bGw7WChtdCkuZm9yRWFjaChGKSxpLmN1YmVDb3VudD0wLGkudGV4dHVyZUNvdW50PTB9LGdldFRleHR1cmU6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LHJlc3RvcmU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHl0OysrZSl7dmFyIHI9eHRbZV07ciYmKHIuYmluZENvdW50PTAsci51bml0PS0xLHh0W2VdPW51bGwpfVgobXQpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS50ZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHQuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKTtmb3IodmFyIHI9MDszMj5yOysrcilpZigwIT0oZS5taXBtYXNrJjE8PHIpKWlmKDM1NTM9PT1lLnRhcmdldCl0LnRleEltYWdlMkQoMzU1MyxyLGUuaW50ZXJuYWxmb3JtYXQsZS53aWR0aD4+cixlLmhlaWdodD4+ciwwLGUuaW50ZXJuYWxmb3JtYXQsZS50eXBlLG51bGwpO2Vsc2UgZm9yKHZhciBuPTA7Nj5uOysrbil0LnRleEltYWdlMkQoMzQwNjkrbixyLGUuaW50ZXJuYWxmb3JtYXQsZS53aWR0aD4+cixlLmhlaWdodD4+ciwwLGUuaW50ZXJuYWxmb3JtYXQsZS50eXBlLG51bGwpO3ooZS50ZXhJbmZvLGUudGFyZ2V0KX0pfX19ZnVuY3Rpb24gTSh0LGUscixuLGEsaSl7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy50YXJnZXQ9dCx0aGlzLnRleHR1cmU9ZSx0aGlzLnJlbmRlcmJ1ZmZlcj1yO3ZhciBuPXQ9MDtlPyh0PWUud2lkdGgsbj1lLmhlaWdodCk6ciYmKHQ9ci53aWR0aCxuPXIuaGVpZ2h0KSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9bn1mdW5jdGlvbiBzKHQpe3QmJih0LnRleHR1cmUmJnQudGV4dHVyZS5fdGV4dHVyZS5kZWNSZWYoKSx0LnJlbmRlcmJ1ZmZlciYmdC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5kZWNSZWYoKSl9ZnVuY3Rpb24gbCh0LGUscil7dCYmKHQudGV4dHVyZT90LnRleHR1cmUuX3RleHR1cmUucmVmQ291bnQrPTE6dC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5yZWZDb3VudCs9MSl9ZnVuY3Rpb24gYyhlLHIpe3ImJihyLnRleHR1cmU/dC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCxlLHIudGFyZ2V0LHIudGV4dHVyZS5fdGV4dHVyZS50ZXh0dXJlLDApOnQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsZSwzNjE2MSxyLnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLnJlbmRlcmJ1ZmZlcikpfWZ1bmN0aW9uIHUodCl7dmFyIGU9MzU1MyxyPW51bGwsbj1udWxsLGE9dDtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJihhPXQuZGF0YSwidGFyZ2V0ImluIHQmJihlPTB8dC50YXJnZXQpKSwidGV4dHVyZTJkIj09PSh0PWEuX3JlZ2xUeXBlKT9yPWE6InRleHR1cmVDdWJlIj09PXQ/cj1hOiJyZW5kZXJidWZmZXIiPT09dCYmKG49YSxlPTM2MTYxKSxuZXcgbyhlLHIsbil9ZnVuY3Rpb24gaCh0LGUscixpLHMpe3JldHVybiByPygodD1uLmNyZWF0ZTJEKHt3aWR0aDp0LGhlaWdodDplLGZvcm1hdDppLHR5cGU6c30pKS5fdGV4dHVyZS5yZWZDb3VudD0wLG5ldyBvKDM1NTMsdCxudWxsKSk6KCh0PWEuY3JlYXRlKHt3aWR0aDp0LGhlaWdodDplLGZvcm1hdDppfSkpLl9yZW5kZXJidWZmZXIucmVmQ291bnQ9MCxuZXcgbygzNjE2MSxudWxsLHQpKX1mdW5jdGlvbiBmKHQpe3JldHVybiB0JiYodC50ZXh0dXJlfHx0LnJlbmRlcmJ1ZmZlcil9ZnVuY3Rpb24gcCh0LGUscil7dCYmKHQudGV4dHVyZT90LnRleHR1cmUucmVzaXplKGUscik6dC5yZW5kZXJidWZmZXImJnQucmVuZGVyYnVmZmVyLnJlc2l6ZShlLHIpLHQud2lkdGg9ZSx0LmhlaWdodD1yKX1mdW5jdGlvbiBkKCl7dGhpcy5pZD1rKyssVFt0aGlzLmlkXT10aGlzLHRoaXMuZnJhbWVidWZmZXI9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpLHRoaXMuaGVpZ2h0PXRoaXMud2lkdGg9MCx0aGlzLmNvbG9yQXR0YWNobWVudHM9W10sdGhpcy5kZXB0aFN0ZW5jaWxBdHRhY2htZW50PXRoaXMuc3RlbmNpbEF0dGFjaG1lbnQ9dGhpcy5kZXB0aEF0dGFjaG1lbnQ9bnVsbH1mdW5jdGlvbiBnKHQpe3QuY29sb3JBdHRhY2htZW50cy5mb3JFYWNoKHMpLHModC5kZXB0aEF0dGFjaG1lbnQpLHModC5zdGVuY2lsQXR0YWNobWVudCkscyh0LmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQpfWZ1bmN0aW9uIHYoZSl7dC5kZWxldGVGcmFtZWJ1ZmZlcihlLmZyYW1lYnVmZmVyKSxlLmZyYW1lYnVmZmVyPW51bGwsaS5mcmFtZWJ1ZmZlckNvdW50LS0sZGVsZXRlIFRbZS5pZF19ZnVuY3Rpb24gbShlKXt2YXIgbjt0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxlLmZyYW1lYnVmZmVyKTt2YXIgYT1lLmNvbG9yQXR0YWNobWVudHM7Zm9yKG49MDtuPGEubGVuZ3RoOysrbiljKDM2MDY0K24sYVtuXSk7Zm9yKG49YS5sZW5ndGg7bjxyLm1heENvbG9yQXR0YWNobWVudHM7KytuKXQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQrbiwzNTUzLG51bGwsMCk7dC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLG51bGwsMCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLG51bGwsMCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjEyOCwzNTUzLG51bGwsMCksYygzNjA5NixlLmRlcHRoQXR0YWNobWVudCksYygzNjEyOCxlLnN0ZW5jaWxBdHRhY2htZW50KSxjKDMzMzA2LGUuZGVwdGhTdGVuY2lsQXR0YWNobWVudCksdC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKSx0LmlzQ29udGV4dExvc3QoKSx0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx4Lm5leHQ/eC5uZXh0LmZyYW1lYnVmZmVyOm51bGwpLHguY3VyPXgubmV4dCx0LmdldEVycm9yKCl9ZnVuY3Rpb24geSh0LGUpe2Z1bmN0aW9uIHIodCxlKXt2YXIgYSxpPTAsbz0wLHM9ITAsYz0hMDthPW51bGw7dmFyIHA9ITAsZD0icmdiYSIsdj0idWludDgiLHk9MSx4PW51bGwsdz1udWxsLGs9bnVsbCxUPSExOyJudW1iZXIiPT10eXBlb2YgdD8oaT0wfHQsbz0wfGV8fGkpOnQ/KCJzaGFwZSJpbiB0PyhpPShvPXQuc2hhcGUpWzBdLG89b1sxXSk6KCJyYWRpdXMiaW4gdCYmKGk9bz10LnJhZGl1cyksIndpZHRoImluIHQmJihpPXQud2lkdGgpLCJoZWlnaHQiaW4gdCYmKG89dC5oZWlnaHQpKSwoImNvbG9yImluIHR8fCJjb2xvcnMiaW4gdCkmJihhPXQuY29sb3J8fHQuY29sb3JzLEFycmF5LmlzQXJyYXkoYSkpLGF8fCgiY29sb3JDb3VudCJpbiB0JiYoeT0wfHQuY29sb3JDb3VudCksImNvbG9yVGV4dHVyZSJpbiB0JiYocD0hIXQuY29sb3JUZXh0dXJlLGQ9InJnYmE0IiksImNvbG9yVHlwZSJpbiB0JiYodj10LmNvbG9yVHlwZSwhcCkmJigiaGFsZiBmbG9hdCI9PT12fHwiZmxvYXQxNiI9PT12P2Q9InJnYmExNmYiOiJmbG9hdCIhPT12JiYiZmxvYXQzMiIhPT12fHwoZD0icmdiYTMyZiIpKSwiY29sb3JGb3JtYXQiaW4gdCYmKGQ9dC5jb2xvckZvcm1hdCwwPD1iLmluZGV4T2YoZCk/cD0hMDowPD1fLmluZGV4T2YoZCkmJihwPSExKSkpLCgiZGVwdGhUZXh0dXJlImluIHR8fCJkZXB0aFN0ZW5jaWxUZXh0dXJlImluIHQpJiYoVD0hKCF0LmRlcHRoVGV4dHVyZSYmIXQuZGVwdGhTdGVuY2lsVGV4dHVyZSkpLCJkZXB0aCJpbiB0JiYoImJvb2xlYW4iPT10eXBlb2YgdC5kZXB0aD9zPXQuZGVwdGg6KHg9dC5kZXB0aCxjPSExKSksInN0ZW5jaWwiaW4gdCYmKCJib29sZWFuIj09dHlwZW9mIHQuc3RlbmNpbD9jPXQuc3RlbmNpbDoodz10LnN0ZW5jaWwscz0hMSkpLCJkZXB0aFN0ZW5jaWwiaW4gdCYmKCJib29sZWFuIj09dHlwZW9mIHQuZGVwdGhTdGVuY2lsP3M9Yz10LmRlcHRoU3RlbmNpbDooaz10LmRlcHRoU3RlbmNpbCxjPXM9ITEpKSk6aT1vPTE7dmFyIE09bnVsbCxBPW51bGwsUz1udWxsLEU9bnVsbDtpZihBcnJheS5pc0FycmF5KGEpKU09YS5tYXAodSk7ZWxzZSBpZihhKU09W3UoYSldO2Vsc2UgZm9yKE09QXJyYXkoeSksYT0wO2E8eTsrK2EpTVthXT1oKGksbyxwLGQsdik7Zm9yKGk9aXx8TVswXS53aWR0aCxvPW98fE1bMF0uaGVpZ2h0LHg/QT11KHgpOnMmJiFjJiYoQT1oKGksbyxULCJkZXB0aCIsInVpbnQzMiIpKSx3P1M9dSh3KTpjJiYhcyYmKFM9aChpLG8sITEsInN0ZW5jaWwiLCJ1aW50OCIpKSxrP0U9dShrKToheCYmIXcmJmMmJnMmJihFPWgoaSxvLFQsImRlcHRoIHN0ZW5jaWwiLCJkZXB0aCBzdGVuY2lsIikpLHM9bnVsbCxhPTA7YTxNLmxlbmd0aDsrK2EpbChNW2FdKSxNW2FdJiZNW2FdLnRleHR1cmUmJihjPXl0W01bYV0udGV4dHVyZS5fdGV4dHVyZS5mb3JtYXRdKnh0W01bYV0udGV4dHVyZS5fdGV4dHVyZS50eXBlXSxudWxsPT09cyYmKHM9YykpO3JldHVybiBsKEEpLGwoUyksbChFKSxnKG4pLG4ud2lkdGg9aSxuLmhlaWdodD1vLG4uY29sb3JBdHRhY2htZW50cz1NLG4uZGVwdGhBdHRhY2htZW50PUEsbi5zdGVuY2lsQXR0YWNobWVudD1TLG4uZGVwdGhTdGVuY2lsQXR0YWNobWVudD1FLHIuY29sb3I9TS5tYXAoZiksci5kZXB0aD1mKEEpLHIuc3RlbmNpbD1mKFMpLHIuZGVwdGhTdGVuY2lsPWYoRSksci53aWR0aD1uLndpZHRoLHIuaGVpZ2h0PW4uaGVpZ2h0LG0obikscn12YXIgbj1uZXcgZDtyZXR1cm4gaS5mcmFtZWJ1ZmZlckNvdW50Kysscih0LGUpLGoocix7cmVzaXplOmZ1bmN0aW9uKHQsZSl7dmFyIGE9TWF0aC5tYXgoMHx0LDEpLGk9TWF0aC5tYXgoMHxlfHxhLDEpO2lmKGE9PT1uLndpZHRoJiZpPT09bi5oZWlnaHQpcmV0dXJuIHI7Zm9yKHZhciBvPW4uY29sb3JBdHRhY2htZW50cyxzPTA7czxvLmxlbmd0aDsrK3MpcChvW3NdLGEsaSk7cmV0dXJuIHAobi5kZXB0aEF0dGFjaG1lbnQsYSxpKSxwKG4uc3RlbmNpbEF0dGFjaG1lbnQsYSxpKSxwKG4uZGVwdGhTdGVuY2lsQXR0YWNobWVudCxhLGkpLG4ud2lkdGg9ci53aWR0aD1hLG4uaGVpZ2h0PXIuaGVpZ2h0PWksbShuKSxyfSxfcmVnbFR5cGU6ImZyYW1lYnVmZmVyIixfZnJhbWVidWZmZXI6bixkZXN0cm95OmZ1bmN0aW9uKCl7dihuKSxnKG4pfSx1c2U6ZnVuY3Rpb24odCl7eC5zZXRGQk8oe2ZyYW1lYnVmZmVyOnJ9LHQpfX0pfXZhciB4PXtjdXI6bnVsbCxuZXh0Om51bGwsZGlydHk6ITEsc2V0RkJPOm51bGx9LGI9WyJyZ2JhIl0sXz1bInJnYmE0IiwicmdiNTY1IiwicmdiNSBhMSJdO2UuZXh0X3NyZ2ImJl8ucHVzaCgic3JnYmEiKSxlLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCYmXy5wdXNoKCJyZ2JhMTZmIiwicmdiMTZmIiksZS53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQmJl8ucHVzaCgicmdiYTMyZiIpO3ZhciB3PVsidWludDgiXTtlLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQmJncucHVzaCgiaGFsZiBmbG9hdCIsImZsb2F0MTYiKSxlLm9lc190ZXh0dXJlX2Zsb2F0JiZ3LnB1c2goImZsb2F0IiwiZmxvYXQzMiIpO3ZhciBrPTAsVD17fTtyZXR1cm4gaih4LHtnZXRGcmFtZWJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmImZyYW1lYnVmZmVyIj09PXQuX3JlZ2xUeXBlJiYodD10Ll9mcmFtZWJ1ZmZlcilpbnN0YW5jZW9mIGQ/dDpudWxsfSxjcmVhdGU6eSxjcmVhdGVDdWJlOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGEsaT17Y29sb3I6bnVsbH0sbz0wLHM9bnVsbDthPSJyZ2JhIjt2YXIgbD0idWludDgiLGM9MTtpZigibnVtYmVyIj09dHlwZW9mIHQ/bz0wfHQ6dD8oInNoYXBlImluIHQ/bz10LnNoYXBlWzBdOigicmFkaXVzImluIHQmJihvPTB8dC5yYWRpdXMpLCJ3aWR0aCJpbiB0P289MHx0LndpZHRoOiJoZWlnaHQiaW4gdCYmKG89MHx0LmhlaWdodCkpLCgiY29sb3IiaW4gdHx8ImNvbG9ycyJpbiB0KSYmKHM9dC5jb2xvcnx8dC5jb2xvcnMsQXJyYXkuaXNBcnJheShzKSksc3x8KCJjb2xvckNvdW50ImluIHQmJihjPTB8dC5jb2xvckNvdW50KSwiY29sb3JUeXBlImluIHQmJihsPXQuY29sb3JUeXBlKSwiY29sb3JGb3JtYXQiaW4gdCYmKGE9dC5jb2xvckZvcm1hdCkpLCJkZXB0aCJpbiB0JiYoaS5kZXB0aD10LmRlcHRoKSwic3RlbmNpbCJpbiB0JiYoaS5zdGVuY2lsPXQuc3RlbmNpbCksImRlcHRoU3RlbmNpbCJpbiB0JiYoaS5kZXB0aFN0ZW5jaWw9dC5kZXB0aFN0ZW5jaWwpKTpvPTEscylpZihBcnJheS5pc0FycmF5KHMpKWZvcih0PVtdLGE9MDthPHMubGVuZ3RoOysrYSl0W2FdPXNbYV07ZWxzZSB0PVtzXTtlbHNlIGZvcih0PUFycmF5KGMpLHM9e3JhZGl1czpvLGZvcm1hdDphLHR5cGU6bH0sYT0wO2E8YzsrK2EpdFthXT1uLmNyZWF0ZUN1YmUocyk7Zm9yKGkuY29sb3I9QXJyYXkodC5sZW5ndGgpLGE9MDthPHQubGVuZ3RoOysrYSljPXRbYV0sbz1vfHxjLndpZHRoLGkuY29sb3JbYV09e3RhcmdldDozNDA2OSxkYXRhOnRbYV19O2ZvcihhPTA7Nj5hOysrYSl7Zm9yKGM9MDtjPHQubGVuZ3RoOysrYylpLmNvbG9yW2NdLnRhcmdldD0zNDA2OSthOzA8YSYmKGkuZGVwdGg9clswXS5kZXB0aCxpLnN0ZW5jaWw9clswXS5zdGVuY2lsLGkuZGVwdGhTdGVuY2lsPXJbMF0uZGVwdGhTdGVuY2lsKSxyW2FdP3JbYV0oaSk6clthXT15KGkpfXJldHVybiBqKGUse3dpZHRoOm8saGVpZ2h0Om8sY29sb3I6dH0pfXZhciByPUFycmF5KDYpO3JldHVybiBlKHQpLGooZSx7ZmFjZXM6cixyZXNpemU6ZnVuY3Rpb24odCl7dmFyIG49MHx0O2lmKG49PT1lLndpZHRoKXJldHVybiBlO3ZhciBhPWUuY29sb3I7Zm9yKHQ9MDt0PGEubGVuZ3RoOysrdClhW3RdLnJlc2l6ZShuKTtmb3IodD0wOzY+dDsrK3Qpclt0XS5yZXNpemUobik7cmV0dXJuIGUud2lkdGg9ZS5oZWlnaHQ9bixlfSxfcmVnbFR5cGU6ImZyYW1lYnVmZmVyQ3ViZSIsZGVzdHJveTpmdW5jdGlvbigpe3IuZm9yRWFjaChmdW5jdGlvbih0KXt0LmRlc3Ryb3koKX0pfX0pfSxjbGVhcjpmdW5jdGlvbigpe1goVCkuZm9yRWFjaCh2KX0scmVzdG9yZTpmdW5jdGlvbigpe3guY3VyPW51bGwseC5uZXh0PW51bGwseC5kaXJ0eT0hMCxYKFQpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5mcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksbShlKX0pfX0pfWZ1bmN0aW9uIEEoKXt0aGlzLnc9dGhpcy56PXRoaXMueT10aGlzLng9dGhpcy5zdGF0ZT0wLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5zaXplPTAsdGhpcy5ub3JtYWxpemVkPSExLHRoaXMudHlwZT01MTI2LHRoaXMuZGl2aXNvcj10aGlzLnN0cmlkZT10aGlzLm9mZnNldD0wfWZ1bmN0aW9uIFModCxlLHIsbil7ZnVuY3Rpb24gYSh0LGUscixuKXt0aGlzLm5hbWU9dCx0aGlzLmlkPWUsdGhpcy5sb2NhdGlvbj1yLHRoaXMuaW5mbz1ufWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZih0W3JdLmlkPT09ZS5pZClyZXR1cm4gdm9pZCh0W3JdLmxvY2F0aW9uPWUubG9jYXRpb24pO3QucHVzaChlKX1mdW5jdGlvbiBvKHIsbixhKXtpZighKG89KGE9MzU2MzI9PT1yP2M6dSlbbl0pKXt2YXIgaT1lLnN0cihuKSxvPXQuY3JlYXRlU2hhZGVyKHIpO3Quc2hhZGVyU291cmNlKG8saSksdC5jb21waWxlU2hhZGVyKG8pLGFbbl09b31yZXR1cm4gb31mdW5jdGlvbiBzKHQsZSl7dGhpcy5pZD1wKyssdGhpcy5mcmFnSWQ9dCx0aGlzLnZlcnRJZD1lLHRoaXMucHJvZ3JhbT1udWxsLHRoaXMudW5pZm9ybXM9W10sdGhpcy5hdHRyaWJ1dGVzPVtdLG4ucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3VuaWZvcm1zQ291bnQ6MCxhdHRyaWJ1dGVzQ291bnQ6MH0pfWZ1bmN0aW9uIGwocixzKXt2YXIgbCxjO2w9bygzNTYzMixyLmZyYWdJZCksYz1vKDM1NjMzLHIudmVydElkKTt2YXIgdT1yLnByb2dyYW09dC5jcmVhdGVQcm9ncmFtKCk7dC5hdHRhY2hTaGFkZXIodSxsKSx0LmF0dGFjaFNoYWRlcih1LGMpLHQubGlua1Byb2dyYW0odSk7dmFyIGg9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHUsMzU3MTgpO24ucHJvZmlsZSYmKHIuc3RhdHMudW5pZm9ybXNDb3VudD1oKTt2YXIgZj1yLnVuaWZvcm1zO2ZvcihsPTA7bDxoOysrbClpZihjPXQuZ2V0QWN0aXZlVW5pZm9ybSh1LGwpKWlmKDE8Yy5zaXplKWZvcih2YXIgcD0wO3A8Yy5zaXplOysrcCl7dmFyIGQ9Yy5uYW1lLnJlcGxhY2UoIlswXSIsIlsiK3ArIl0iKTtpKGYsbmV3IGEoZCxlLmlkKGQpLHQuZ2V0VW5pZm9ybUxvY2F0aW9uKHUsZCksYykpfWVsc2UgaShmLG5ldyBhKGMubmFtZSxlLmlkKGMubmFtZSksdC5nZXRVbmlmb3JtTG9jYXRpb24odSxjLm5hbWUpLGMpKTtmb3IoaD10LmdldFByb2dyYW1QYXJhbWV0ZXIodSwzNTcyMSksbi5wcm9maWxlJiYoci5zdGF0cy5hdHRyaWJ1dGVzQ291bnQ9aCksZj1yLmF0dHJpYnV0ZXMsbD0wO2w8aDsrK2wpKGM9dC5nZXRBY3RpdmVBdHRyaWIodSxsKSkmJmkoZixuZXcgYShjLm5hbWUsZS5pZChjLm5hbWUpLHQuZ2V0QXR0cmliTG9jYXRpb24odSxjLm5hbWUpLGMpKX12YXIgYz17fSx1PXt9LGg9e30sZj1bXSxwPTA7cmV0dXJuIG4ucHJvZmlsZSYmKHIuZ2V0TWF4VW5pZm9ybXNDb3VudD1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIGYuZm9yRWFjaChmdW5jdGlvbihlKXtlLnN0YXRzLnVuaWZvcm1zQ291bnQ+dCYmKHQ9ZS5zdGF0cy51bmlmb3Jtc0NvdW50KX0pLHR9LHIuZ2V0TWF4QXR0cmlidXRlc0NvdW50PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gZi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc3RhdHMuYXR0cmlidXRlc0NvdW50PnQmJih0PWUuc3RhdHMuYXR0cmlidXRlc0NvdW50KX0pLHR9KSx7Y2xlYXI6ZnVuY3Rpb24oKXt2YXIgZT10LmRlbGV0ZVNoYWRlci5iaW5kKHQpO1goYykuZm9yRWFjaChlKSxjPXt9LFgodSkuZm9yRWFjaChlKSx1PXt9LGYuZm9yRWFjaChmdW5jdGlvbihlKXt0LmRlbGV0ZVByb2dyYW0oZS5wcm9ncmFtKX0pLGYubGVuZ3RoPTAsaD17fSxyLnNoYWRlckNvdW50PTB9LHByb2dyYW06ZnVuY3Rpb24odCxlLG4pe3ZhciBhPWhbZV07YXx8KGE9aFtlXT17fSk7dmFyIGk9YVt0XTtyZXR1cm4gaXx8KGk9bmV3IHMoZSx0KSxyLnNoYWRlckNvdW50KyssbChpKSxhW3RdPWksZi5wdXNoKGkpKSxpfSxyZXN0b3JlOmZ1bmN0aW9uKCl7Yz17fSx1PXt9O2Zvcih2YXIgdD0wO3Q8Zi5sZW5ndGg7Kyt0KWwoZlt0XSl9LHNoYWRlcjpvLGZyYWc6LTEsdmVydDotMX19ZnVuY3Rpb24gRSh0LGUscixuLGEsaSxvKXtmdW5jdGlvbiBzKGEpe3ZhciBpO2k9bnVsbD09PWUubmV4dD81MTIxOmUubmV4dC5jb2xvckF0dGFjaG1lbnRzWzBdLnRleHR1cmUuX3RleHR1cmUudHlwZTt2YXIgbz0wLHM9MCxsPW4uZnJhbWVidWZmZXJXaWR0aCxjPW4uZnJhbWVidWZmZXJIZWlnaHQsdT1udWxsO3JldHVybiBXKGEpP3U9YTphJiYobz0wfGEueCxzPTB8YS55LGw9MHwoYS53aWR0aHx8bi5mcmFtZWJ1ZmZlcldpZHRoLW8pLGM9MHwoYS5oZWlnaHR8fG4uZnJhbWVidWZmZXJIZWlnaHQtcyksdT1hLmRhdGF8fG51bGwpLHIoKSxhPWwqYyo0LHV8fCg1MTIxPT09aT91PW5ldyBVaW50OEFycmF5KGEpOjUxMjY9PT1pJiYodT11fHxuZXcgRmxvYXQzMkFycmF5KGEpKSksdC5waXhlbFN0b3JlaSgzMzMzLDQpLHQucmVhZFBpeGVscyhvLHMsbCxjLDY0MDgsaSx1KSx1fXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZyYW1lYnVmZmVyImluIHQ/ZnVuY3Rpb24odCl7dmFyIHI7cmV0dXJuIGUuc2V0RkJPKHtmcmFtZWJ1ZmZlcjp0LmZyYW1lYnVmZmVyfSxmdW5jdGlvbigpe3I9cyh0KX0pLHJ9KHQpOnModCl9fWZ1bmN0aW9uIEwodCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpfWZ1bmN0aW9uIEModCl7cmV0dXJuIEwodCkuam9pbigiIil9ZnVuY3Rpb24gUCgpe2Z1bmN0aW9uIHQoKXt2YXIgdD1bXSxlPVtdO3JldHVybiBqKGZ1bmN0aW9uKCl7dC5wdXNoLmFwcGx5KHQsTChhcmd1bWVudHMpKX0se2RlZjpmdW5jdGlvbigpe3ZhciBuPSJ2IityKys7cmV0dXJuIGUucHVzaChuKSwwPGFyZ3VtZW50cy5sZW5ndGgmJih0LnB1c2gobiwiPSIpLHQucHVzaC5hcHBseSh0LEwoYXJndW1lbnRzKSksdC5wdXNoKCI7IikpLG59LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIEMoWzA8ZS5sZW5ndGg/InZhciAiK2UrIjsiOiIiLEModCldKX19KX1mdW5jdGlvbiBlKCl7ZnVuY3Rpb24gZSh0LGUpe24odCxlLCI9IixyLmRlZih0LGUpLCI7Iil9dmFyIHI9dCgpLG49dCgpLGE9ci50b1N0cmluZyxpPW4udG9TdHJpbmc7cmV0dXJuIGooZnVuY3Rpb24oKXtyLmFwcGx5KHIsTChhcmd1bWVudHMpKX0se2RlZjpyLmRlZixlbnRyeTpyLGV4aXQ6bixzYXZlOmUsc2V0OmZ1bmN0aW9uKHQsbixhKXtlKHQsbikscih0LG4sIj0iLGEsIjsiKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gYSgpK2koKX19KX12YXIgcj0wLG49W10sYT1bXSxpPXQoKSxvPXt9O3JldHVybntnbG9iYWw6aSxsaW5rOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7KytlKWlmKGFbZV09PT10KXJldHVybiBuW2VdO3JldHVybiBlPSJnIityKyssbi5wdXNoKGUpLGEucHVzaCh0KSxlfSxibG9jazp0LHByb2M6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7dmFyIHQ9ImEiK2EubGVuZ3RoO3JldHVybiBhLnB1c2godCksdH12YXIgYT1bXTtyPXJ8fDA7Zm9yKHZhciBpPTA7aTxyOysraSluKCk7dmFyIHM9KGk9ZSgpKS50b1N0cmluZztyZXR1cm4gb1t0XT1qKGkse2FyZzpuLHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIEMoWyJmdW5jdGlvbigiLGEuam9pbigpLCIpeyIscygpLCJ9Il0pfX0pfSxzY29wZTplLGNvbmQ6ZnVuY3Rpb24oKXt2YXIgdD1DKGFyZ3VtZW50cykscj1lKCksbj1lKCksYT1yLnRvU3RyaW5nLGk9bi50b1N0cmluZztyZXR1cm4gaihyLHt0aGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkocixMKGFyZ3VtZW50cykpLHRoaXN9LGVsc2U6ZnVuY3Rpb24oKXtyZXR1cm4gbi5hcHBseShuLEwoYXJndW1lbnRzKSksdGhpc30sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT1pKCk7cmV0dXJuIGUmJihlPSJlbHNleyIrZSsifSIpLEMoWyJpZigiLHQsIil7IixhKCksIn0iLGVdKX19KX0sY29tcGlsZTpmdW5jdGlvbigpe3ZhciB0PVsnInVzZSBzdHJpY3QiOycsaSwicmV0dXJuIHsiXTtPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QucHVzaCgnIicsZSwnIjonLG9bZV0udG9TdHJpbmcoKSwiLCIpfSksdC5wdXNoKCJ9Iik7dmFyIGU9Qyh0KS5yZXBsYWNlKC87L2csIjtcbiIpLnJlcGxhY2UoL30vZywifVxuIikucmVwbGFjZSgvey9nLCJ7XG4iKTtyZXR1cm4gRnVuY3Rpb24uYXBwbHkobnVsbCxuLmNvbmNhdChlKSkuYXBwbHkobnVsbCxhKX19fWZ1bmN0aW9uIE8odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fFcodCl8fGwodCl9ZnVuY3Rpb24geih0KXtyZXR1cm4gdC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuInZpZXdwb3J0Ij09PXQ/LTE6InZpZXdwb3J0Ij09PWU/MTp0PGU/LTE6MX0pfWZ1bmN0aW9uIEkodCxlLHIsbil7dGhpcy50aGlzRGVwPXQsdGhpcy5jb250ZXh0RGVwPWUsdGhpcy5wcm9wRGVwPXIsdGhpcy5hcHBlbmQ9bn1mdW5jdGlvbiBEKHQpe3JldHVybiB0JiYhKHQudGhpc0RlcHx8dC5jb250ZXh0RGVwfHx0LnByb3BEZXApfWZ1bmN0aW9uIFIodCl7cmV0dXJuIG5ldyBJKCExLCExLCExLHQpfWZ1bmN0aW9uIEYodCxlKXt2YXIgcj10LnR5cGU7cmV0dXJuIDA9PT1yP25ldyBJKCEwLDE8PShyPXQuZGF0YS5sZW5ndGgpLDI8PXIsZSk6ND09PXI/bmV3IEkoKHI9dC5kYXRhKS50aGlzRGVwLHIuY29udGV4dERlcCxyLnByb3BEZXAsZSk6bmV3IEkoMz09PXIsMj09PXIsMT09PXIsZSl9ZnVuY3Rpb24gQih0LGUscixuLGEsbyxzLGwsYyx1LGgsZixwLGQsZyl7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5yZXBsYWNlKCIuIiwiXyIpfWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPW0odCk7bnQucHVzaCh0KSxldFtuXT10dFtuXT0hIXIsYXRbbl09ZX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbj1tKHQpO250LnB1c2godCksQXJyYXkuaXNBcnJheShyKT8odHRbbl09ci5zbGljZSgpLGV0W25dPXIuc2xpY2UoKSk6dHRbbl09ZXRbbl09cixpdFtuXT1lfWZ1bmN0aW9uIGIoKXt2YXIgdD1QKCkscj10Lmxpbmssbj10Lmdsb2JhbDt0LmlkPWx0KyssdC5iYXRjaElkPSIwIjt2YXIgYT1yKG90KSxpPXQuc2hhcmVkPXtwcm9wczoiYTAifTtPYmplY3Qua2V5cyhvdCkuZm9yRWFjaChmdW5jdGlvbih0KXtpW3RdPW4uZGVmKGEsIi4iLHQpfSk7dmFyIG89dC5uZXh0PXt9LHM9dC5jdXJyZW50PXt9O09iamVjdC5rZXlzKGl0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodHRbdF0pJiYob1t0XT1uLmRlZihpLm5leHQsIi4iLHQpLHNbdF09bi5kZWYoaS5jdXJyZW50LCIuIix0KSl9KTt2YXIgbD10LmNvbnN0YW50cz17fTtPYmplY3Qua2V5cyhzdCkuZm9yRWFjaChmdW5jdGlvbih0KXtsW3RdPW4uZGVmKEpTT04uc3RyaW5naWZ5KHN0W3RdKSl9KSx0Lmludm9rZT1mdW5jdGlvbihlLG4pe3N3aXRjaChuLnR5cGUpe2Nhc2UgMDp2YXIgYT1bInRoaXMiLGkuY29udGV4dCxpLnByb3BzLHQuYmF0Y2hJZF07cmV0dXJuIGUuZGVmKHIobi5kYXRhKSwiLmNhbGwoIixhLnNsaWNlKDAsTWF0aC5tYXgobi5kYXRhLmxlbmd0aCsxLDQpKSwiKSIpO2Nhc2UgMTpyZXR1cm4gZS5kZWYoaS5wcm9wcyxuLmRhdGEpO2Nhc2UgMjpyZXR1cm4gZS5kZWYoaS5jb250ZXh0LG4uZGF0YSk7Y2FzZSAzOnJldHVybiBlLmRlZigidGhpcyIsbi5kYXRhKTtjYXNlIDQ6cmV0dXJuIG4uZGF0YS5hcHBlbmQodCxlKSxuLmRhdGEucmVmfX0sdC5hdHRyaWJDYWNoZT17fTt2YXIgYz17fTtyZXR1cm4gdC5zY29wZUF0dHJpYj1mdW5jdGlvbih0KXtpZigodD1lLmlkKHQpKWluIGMpcmV0dXJuIGNbdF07dmFyIG49dS5zY29wZVt0XTtyZXR1cm4gbnx8KG49dS5zY29wZVt0XT1uZXcgWiksY1t0XT1yKG4pfSx0fWZ1bmN0aW9uIF8odCxlKXt2YXIgcj10LnN0YXRpYyxuPXQuZHluYW1pYztpZigiZnJhbWVidWZmZXIiaW4gcil7dmFyIGE9ci5mcmFtZWJ1ZmZlcjtyZXR1cm4gYT8oYT1sLmdldEZyYW1lYnVmZmVyKGEpLFIoZnVuY3Rpb24odCxlKXt2YXIgcj10LmxpbmsoYSksbj10LnNoYXJlZDtyZXR1cm4gZS5zZXQobi5mcmFtZWJ1ZmZlciwiLm5leHQiLHIpLG49bi5jb250ZXh0LGUuc2V0KG4sIi5mcmFtZWJ1ZmZlcldpZHRoIixyKyIud2lkdGgiKSxlLnNldChuLCIuZnJhbWVidWZmZXJIZWlnaHQiLHIrIi5oZWlnaHQiKSxyfSkpOlIoZnVuY3Rpb24odCxlKXt2YXIgcj10LnNoYXJlZDtyZXR1cm4gZS5zZXQoci5mcmFtZWJ1ZmZlciwiLm5leHQiLCJudWxsIikscj1yLmNvbnRleHQsZS5zZXQociwiLmZyYW1lYnVmZmVyV2lkdGgiLHIrIi5kcmF3aW5nQnVmZmVyV2lkdGgiKSxlLnNldChyLCIuZnJhbWVidWZmZXJIZWlnaHQiLHIrIi5kcmF3aW5nQnVmZmVySGVpZ2h0IiksIm51bGwifSl9aWYoImZyYW1lYnVmZmVyImluIG4pe3ZhciBpPW4uZnJhbWVidWZmZXI7cmV0dXJuIEYoaSxmdW5jdGlvbih0LGUpe3ZhciByPXQuaW52b2tlKGUsaSksbj10LnNoYXJlZCxhPW4uZnJhbWVidWZmZXI7cj1lLmRlZihhLCIuZ2V0RnJhbWVidWZmZXIoIixyLCIpIik7cmV0dXJuIGUuc2V0KGEsIi5uZXh0IixyKSxuPW4uY29udGV4dCxlLnNldChuLCIuZnJhbWVidWZmZXJXaWR0aCIscisiPyIrcisiLndpZHRoOiIrbisiLmRyYXdpbmdCdWZmZXJXaWR0aCIpLGUuc2V0KG4sIi5mcmFtZWJ1ZmZlckhlaWdodCIscisiPyIrcisiLmhlaWdodDoiK24rIi5kcmF3aW5nQnVmZmVySGVpZ2h0Iikscn0pfXJldHVybiBudWxsfWZ1bmN0aW9uIHcodCl7ZnVuY3Rpb24gcih0KXtpZih0IGluIG4pe3ZhciByPWUuaWQoblt0XSk7cmV0dXJuKHQ9UihmdW5jdGlvbigpe3JldHVybiByfSkpLmlkPXIsdH1pZih0IGluIGEpe3ZhciBpPWFbdF07cmV0dXJuIEYoaSxmdW5jdGlvbih0LGUpe3ZhciByPXQuaW52b2tlKGUsaSk7cmV0dXJuIGUuZGVmKHQuc2hhcmVkLnN0cmluZ3MsIi5pZCgiLHIsIikiKX0pfXJldHVybiBudWxsfXZhciBuPXQuc3RhdGljLGE9dC5keW5hbWljLGk9cigiZnJhZyIpLG89cigidmVydCIpLHM9bnVsbDtyZXR1cm4gRChpKSYmRChvKT8ocz1oLnByb2dyYW0oby5pZCxpLmlkKSx0PVIoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saW5rKHMpfSkpOnQ9bmV3IEkoaSYmaS50aGlzRGVwfHxvJiZvLnRoaXNEZXAsaSYmaS5jb250ZXh0RGVwfHxvJiZvLmNvbnRleHREZXAsaSYmaS5wcm9wRGVwfHxvJiZvLnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcixuLGE9dC5zaGFyZWQuc2hhZGVyO3JldHVybiByPWk/aS5hcHBlbmQodCxlKTplLmRlZihhLCIuIiwiZnJhZyIpLG49bz9vLmFwcGVuZCh0LGUpOmUuZGVmKGEsIi4iLCJ2ZXJ0IiksZS5kZWYoYSsiLnByb2dyYW0oIituKyIsIityKyIpIil9KSx7ZnJhZzppLHZlcnQ6byxwcm9nVmFyOnQscHJvZ3JhbTpzfX1mdW5jdGlvbiBrKHQsZSl7ZnVuY3Rpb24gcih0LGUpe2lmKHQgaW4gbil7dmFyIHI9MHxuW3RdO3JldHVybiBSKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUmJih0Lk9GRlNFVD1yKSxyfSl9aWYodCBpbiBhKXt2YXIgbz1hW3RdO3JldHVybiBGKG8sZnVuY3Rpb24odCxyKXt2YXIgbj10Lmludm9rZShyLG8pO3JldHVybiBlJiYodC5PRkZTRVQ9biksbn0pfXJldHVybiBlJiZpP1IoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5PRkZTRVQ9IjAiLDB9KTpudWxsfXZhciBuPXQuc3RhdGljLGE9dC5keW5hbWljLGk9ZnVuY3Rpb24oKXtpZigiZWxlbWVudHMiaW4gbil7dmFyIHQ9bi5lbGVtZW50cztPKHQpP3Q9by5nZXRFbGVtZW50cyhvLmNyZWF0ZSh0LCEwKSk6dCYmKHQ9by5nZXRFbGVtZW50cyh0KSk7dmFyIGU9UihmdW5jdGlvbihlLHIpe2lmKHQpe3ZhciBuPWUubGluayh0KTtyZXR1cm4gZS5FTEVNRU5UUz1ufXJldHVybiBlLkVMRU1FTlRTPW51bGx9KTtyZXR1cm4gZS52YWx1ZT10LGV9aWYoImVsZW1lbnRzImluIGEpe3ZhciByPWEuZWxlbWVudHM7cmV0dXJuIEYocixmdW5jdGlvbih0LGUpe3ZhciBuPShhPXQuc2hhcmVkKS5pc0J1ZmZlckFyZ3MsYT1hLmVsZW1lbnRzLGk9dC5pbnZva2UoZSxyKSxvPWUuZGVmKCJudWxsIik7bj1lLmRlZihuLCIoIixpLCIpIiksaT10LmNvbmQobikudGhlbihvLCI9IixhLCIuY3JlYXRlU3RyZWFtKCIsaSwiKTsiKS5lbHNlKG8sIj0iLGEsIi5nZXRFbGVtZW50cygiLGksIik7Iik7cmV0dXJuIGUuZW50cnkoaSksZS5leGl0KHQuY29uZChuKS50aGVuKGEsIi5kZXN0cm95U3RyZWFtKCIsbywiKTsiKSksdC5FTEVNRU5UUz1vfSl9cmV0dXJuIG51bGx9KCkscz1yKCJvZmZzZXQiLCEwKTtyZXR1cm57ZWxlbWVudHM6aSxwcmltaXRpdmU6ZnVuY3Rpb24oKXtpZigicHJpbWl0aXZlImluIG4pe3ZhciB0PW4ucHJpbWl0aXZlO3JldHVybiBSKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ0W3RdfSl9aWYoInByaW1pdGl2ZSJpbiBhKXt2YXIgZT1hLnByaW1pdGl2ZTtyZXR1cm4gRihlLGZ1bmN0aW9uKHQscil7dmFyIG49dC5jb25zdGFudHMucHJpbVR5cGVzLGE9dC5pbnZva2UocixlKTtyZXR1cm4gci5kZWYobiwiWyIsYSwiXSIpfSl9cmV0dXJuIGk/RChpKT9pLnZhbHVlP1IoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnByaW1UeXBlIil9KTpSKGZ1bmN0aW9uKCl7cmV0dXJuIDR9KTpuZXcgSShpLnRoaXNEZXAsaS5jb250ZXh0RGVwLGkucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPXQuRUxFTUVOVFM7cmV0dXJuIGUuZGVmKHIsIj8iLHIsIi5wcmltVHlwZToiLDQpfSk6bnVsbH0oKSxjb3VudDpmdW5jdGlvbigpe2lmKCJjb3VudCJpbiBuKXt2YXIgdD0wfG4uY291bnQ7cmV0dXJuIFIoZnVuY3Rpb24oKXtyZXR1cm4gdH0pfWlmKCJjb3VudCJpbiBhKXt2YXIgZT1hLmNvdW50O3JldHVybiBGKGUsZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5pbnZva2UocixlKX0pfXJldHVybiBpP0QoaSk/aT9zP25ldyBJKHMudGhpc0RlcCxzLmNvbnRleHREZXAscy5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuRUxFTUVOVFMsIi52ZXJ0Q291bnQtIix0Lk9GRlNFVCl9KTpSKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuRUxFTUVOVFMsIi52ZXJ0Q291bnQiKX0pOlIoZnVuY3Rpb24oKXtyZXR1cm4tMX0pOm5ldyBJKGkudGhpc0RlcHx8cy50aGlzRGVwLGkuY29udGV4dERlcHx8cy5jb250ZXh0RGVwLGkucHJvcERlcHx8cy5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5FTEVNRU5UUztyZXR1cm4gdC5PRkZTRVQ/ZS5kZWYociwiPyIsciwiLnZlcnRDb3VudC0iLHQuT0ZGU0VULCI6LTEiKTplLmRlZihyLCI/IixyLCIudmVydENvdW50Oi0xIil9KTpudWxsfSgpLGluc3RhbmNlczpyKCJpbnN0YW5jZXMiLCExKSxvZmZzZXQ6c319ZnVuY3Rpb24gVCh0LHIpe3ZhciBuPXQuc3RhdGljLGk9dC5keW5hbWljLG89e307cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9blt0XSxpPWUuaWQodCkscz1uZXcgWjtpZihPKHIpKXMuc3RhdGU9MSxzLmJ1ZmZlcj1hLmdldEJ1ZmZlcihhLmNyZWF0ZShyLDM0OTYyLCExLCEwKSkscy50eXBlPTA7ZWxzZSBpZihjPWEuZ2V0QnVmZmVyKHIpKXMuc3RhdGU9MSxzLmJ1ZmZlcj1jLHMudHlwZT0wO2Vsc2UgaWYoImNvbnN0YW50ImluIHIpe3ZhciBsPXIuY29uc3RhbnQ7cy5idWZmZXI9Im51bGwiLHMuc3RhdGU9MiwibnVtYmVyIj09dHlwZW9mIGw/cy54PWw6YnQuZm9yRWFjaChmdW5jdGlvbih0LGUpe2U8bC5sZW5ndGgmJihzW3RdPWxbZV0pfSl9ZWxzZXt2YXIgYz1PKHIuYnVmZmVyKT9hLmdldEJ1ZmZlcihhLmNyZWF0ZShyLmJ1ZmZlciwzNDk2MiwhMSwhMCkpOmEuZ2V0QnVmZmVyKHIuYnVmZmVyKSx1PTB8ci5vZmZzZXQsaD0wfHIuc3RyaWRlLGY9MHxyLnNpemUscD0hIXIubm9ybWFsaXplZCxkPTA7InR5cGUiaW4gciYmKGQ9S1tyLnR5cGVdKSxyPTB8ci5kaXZpc29yLHMuYnVmZmVyPWMscy5zdGF0ZT0xLHMuc2l6ZT1mLHMubm9ybWFsaXplZD1wLHMudHlwZT1kfHxjLmR0eXBlLHMub2Zmc2V0PXUscy5zdHJpZGU9aCxzLmRpdmlzb3I9cn1vW3RdPVIoZnVuY3Rpb24odCxlKXt2YXIgcj10LmF0dHJpYkNhY2hlO2lmKGkgaW4gcilyZXR1cm4gcltpXTt2YXIgbj17aXNTdHJlYW06ITF9O3JldHVybiBPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09c1t0XX0pLHMuYnVmZmVyJiYobi5idWZmZXI9dC5saW5rKHMuYnVmZmVyKSxuLnR5cGU9bi50eXBlfHxuLmJ1ZmZlcisiLmR0eXBlIikscltpXT1ufSl9KSxPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWlbdF07b1t0XT1GKGUsZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKHQpe3IobFt0XSwiPSIsYSwiLiIsdCwifDA7Iil9dmFyIGE9dC5pbnZva2UocixlKSxpPXQuc2hhcmVkLG89aS5pc0J1ZmZlckFyZ3Mscz1pLmJ1ZmZlcixsPXtpc1N0cmVhbTpyLmRlZighMSl9LGM9bmV3IFo7Yy5zdGF0ZT0xLE9iamVjdC5rZXlzKGMpLmZvckVhY2goZnVuY3Rpb24odCl7bFt0XT1yLmRlZigiIitjW3RdKX0pO3ZhciB1PWwuYnVmZmVyLGg9bC50eXBlO3JldHVybiByKCJpZigiLG8sIigiLGEsIikpeyIsbC5pc1N0cmVhbSwiPXRydWU7Iix1LCI9IixzLCIuY3JlYXRlU3RyZWFtKCIsMzQ5NjIsIiwiLGEsIik7IixoLCI9Iix1LCIuZHR5cGU7IiwifWVsc2V7Iix1LCI9IixzLCIuZ2V0QnVmZmVyKCIsYSwiKTsiLCJpZigiLHUsIil7IixoLCI9Iix1LCIuZHR5cGU7IiwnfWVsc2UgaWYoImNvbnN0YW50IiBpbiAnLGEsIil7IixsLnN0YXRlLCI9IiwyLCI7IiwiaWYodHlwZW9mICIrYSsnLmNvbnN0YW50ID09PSAibnVtYmVyIil7JyxsW2J0WzBdXSwiPSIsYSwiLmNvbnN0YW50OyIsYnQuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBsW3RdfSkuam9pbigiPSIpLCI9MDsiLCJ9ZWxzZXsiLGJ0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBsW3RdKyI9IithKyIuY29uc3RhbnQubGVuZ3RoPiIrZSsiPyIrYSsiLmNvbnN0YW50WyIrZSsiXTowOyJ9KS5qb2luKCIiKSwifX1lbHNleyIsImlmKCIsbywiKCIsYSwiLmJ1ZmZlcikpeyIsdSwiPSIscywiLmNyZWF0ZVN0cmVhbSgiLDM0OTYyLCIsIixhLCIuYnVmZmVyKTsiLCJ9ZWxzZXsiLHUsIj0iLHMsIi5nZXRCdWZmZXIoIixhLCIuYnVmZmVyKTsiLCJ9IixoLCc9InR5cGUiIGluICcsYSwiPyIsaS5nbFR5cGVzLCJbIixhLCIudHlwZV06Iix1LCIuZHR5cGU7IixsLm5vcm1hbGl6ZWQsIj0hISIsYSwiLm5vcm1hbGl6ZWQ7Iiksbigic2l6ZSIpLG4oIm9mZnNldCIpLG4oInN0cmlkZSIpLG4oImRpdmlzb3IiKSxyKCJ9fSIpLHIuZXhpdCgiaWYoIixsLmlzU3RyZWFtLCIpeyIscywiLmRlc3Ryb3lTdHJlYW0oIix1LCIpOyIsIn0iKSxsfSl9KSxvfWZ1bmN0aW9uIE0odCxlLHIsbixhKXt2YXIgbz1fKHQpLHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7aWYodCBpbiBhKXt2YXIgcj1hW3RdO3Q9ITA7dmFyIG4sbyxzPTB8ci54LGw9MHxyLnk7cmV0dXJuIndpZHRoImluIHI/bj0wfHIud2lkdGg6dD0hMSwiaGVpZ2h0ImluIHI/bz0wfHIuaGVpZ2h0OnQ9ITEsbmV3IEkoIXQmJmUmJmUudGhpc0RlcCwhdCYmZSYmZS5jb250ZXh0RGVwLCF0JiZlJiZlLnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgYT10LnNoYXJlZC5jb250ZXh0LGk9bjsid2lkdGgiaW4gcnx8KGk9ZS5kZWYoYSwiLiIsImZyYW1lYnVmZmVyV2lkdGgiLCItIixzKSk7dmFyIGM9bztyZXR1cm4iaGVpZ2h0ImluIHJ8fChjPWUuZGVmKGEsIi4iLCJmcmFtZWJ1ZmZlckhlaWdodCIsIi0iLGwpKSxbcyxsLGksY119KX1pZih0IGluIGkpe3ZhciBjPWlbdF07cmV0dXJuIHQ9RihjLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxjKSxuPXQuc2hhcmVkLmNvbnRleHQsYT1lLmRlZihyLCIueHwwIiksaT1lLmRlZihyLCIueXwwIik7cmV0dXJuW2EsaSxlLmRlZignIndpZHRoIiBpbiAnLHIsIj8iLHIsIi53aWR0aHwwOiIsIigiLG4sIi4iLCJmcmFtZWJ1ZmZlcldpZHRoIiwiLSIsYSwiKSIpLHI9ZS5kZWYoJyJoZWlnaHQiIGluICcsciwiPyIsciwiLmhlaWdodHwwOiIsIigiLG4sIi4iLCJmcmFtZWJ1ZmZlckhlaWdodCIsIi0iLGksIikiKV19KSxlJiYodC50aGlzRGVwPXQudGhpc0RlcHx8ZS50aGlzRGVwLHQuY29udGV4dERlcD10LmNvbnRleHREZXB8fGUuY29udGV4dERlcCx0LnByb3BEZXA9dC5wcm9wRGVwfHxlLnByb3BEZXApLHR9cmV0dXJuIGU/bmV3IEkoZS50aGlzRGVwLGUuY29udGV4dERlcCxlLnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcj10LnNoYXJlZC5jb250ZXh0O3JldHVyblswLDAsZS5kZWYociwiLiIsImZyYW1lYnVmZmVyV2lkdGgiKSxlLmRlZihyLCIuIiwiZnJhbWVidWZmZXJIZWlnaHQiKV19KTpudWxsfXZhciBhPXQuc3RhdGljLGk9dC5keW5hbWljO2lmKHQ9bigidmlld3BvcnQiKSl7dmFyIG89dDt0PW5ldyBJKHQudGhpc0RlcCx0LmNvbnRleHREZXAsdC5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9by5hcHBlbmQodCxlKSxuPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuIGUuc2V0KG4sIi52aWV3cG9ydFdpZHRoIixyWzJdKSxlLnNldChuLCIudmlld3BvcnRIZWlnaHQiLHJbM10pLHJ9KX1yZXR1cm57dmlld3BvcnQ6dCxzY2lzc29yX2JveDpuKCJzY2lzc29yLmJveCIpfX0odCxvKSxsPWsodCksYz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhdGljLG49dC5keW5hbWljLGE9e307cmV0dXJuIG50LmZvckVhY2goZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLGkpe2lmKHQgaW4gcil7dmFyIHM9ZShyW3RdKTthW29dPVIoZnVuY3Rpb24oKXtyZXR1cm4gc30pfWVsc2UgaWYodCBpbiBuKXt2YXIgbD1uW3RdO2Fbb109RihsLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkodCxlLHQuaW52b2tlKGUsbCkpfSl9fXZhciBvPW0odCk7c3dpdGNoKHQpe2Nhc2UiY3VsbC5lbmFibGUiOmNhc2UiYmxlbmQuZW5hYmxlIjpjYXNlImRpdGhlciI6Y2FzZSJzdGVuY2lsLmVuYWJsZSI6Y2FzZSJkZXB0aC5lbmFibGUiOmNhc2Uic2Npc3Nvci5lbmFibGUiOmNhc2UicG9seWdvbk9mZnNldC5lbmFibGUiOmNhc2Uic2FtcGxlLmFscGhhIjpjYXNlInNhbXBsZS5lbmFibGUiOmNhc2UiZGVwdGgubWFzayI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuIHR9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcn0pO2Nhc2UiZGVwdGguZnVuYyI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuIGt0W3RdfSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHQuY29uc3RhbnRzLmNvbXBhcmVGdW5jcywiWyIsciwiXSIpfSk7Y2FzZSJkZXB0aC5yYW5nZSI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuIHR9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5kZWYoIisiLHIsIlswXSIpLGU9ZS5kZWYoIisiLHIsIlsxXSIpXX0pO2Nhc2UiYmxlbmQuZnVuYyI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuW3d0WyJzcmNSR0IiaW4gdD90LnNyY1JHQjp0LnNyY10sd3RbImRzdFJHQiJpbiB0P3QuZHN0UkdCOnQuZHN0XSx3dFsic3JjQWxwaGEiaW4gdD90LnNyY0FscGhhOnQuc3JjXSx3dFsiZHN0QWxwaGEiaW4gdD90LmRzdEFscGhhOnQuZHN0XV19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsbil7cmV0dXJuIGUuZGVmKCciJyx0LG4sJyIgaW4gJyxyLCI/IixyLCIuIix0LG4sIjoiLHIsIi4iLHQpfXQ9dC5jb25zdGFudHMuYmxlbmRGdW5jczt2YXIgYT1uKCJzcmMiLCJSR0IiKSxpPW4oImRzdCIsIlJHQiIpLG89KGE9ZS5kZWYodCwiWyIsYSwiXSIpLGUuZGVmKHQsIlsiLG4oInNyYyIsIkFscGhhIiksIl0iKSk7cmV0dXJuW2EsaT1lLmRlZih0LCJbIixpLCJdIiksbyx0PWUuZGVmKHQsIlsiLG4oImRzdCIsIkFscGhhIiksIl0iKV19KTtjYXNlImJsZW5kLmVxdWF0aW9uIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/W0pbdF0sSlt0XV06Im9iamVjdCI9PXR5cGVvZiB0P1tKW3QucmdiXSxKW3QuYWxwaGFdXTp2b2lkIDB9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmNvbnN0YW50cy5ibGVuZEVxdWF0aW9ucyxhPWUuZGVmKCksaT1lLmRlZigpO3JldHVybih0PXQuY29uZCgidHlwZW9mICIsciwnPT09InN0cmluZyInKSkudGhlbihhLCI9IixpLCI9IixuLCJbIixyLCJdOyIpLHQuZWxzZShhLCI9IixuLCJbIixyLCIucmdiXTsiLGksIj0iLG4sIlsiLHIsIi5hbHBoYV07IiksZSh0KSxbYSxpXX0pO2Nhc2UiYmxlbmQuY29sb3IiOnJldHVybiBlKGZ1bmN0aW9uKHQpe3JldHVybiBpKDQsZnVuY3Rpb24oZSl7cmV0dXJuK3RbZV19KX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBpKDQsZnVuY3Rpb24odCl7cmV0dXJuIGUuZGVmKCIrIixyLCJbIix0LCJdIil9KX0pO2Nhc2Uic3RlbmNpbC5tYXNrIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gMHx0fSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZGVmKHIsInwwIil9KTtjYXNlInN0ZW5jaWwuZnVuYyI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuW2t0W3QuY21wfHwia2VlcCJdLHQucmVmfHwwLCJtYXNrImluIHQ/dC5tYXNrOi0xXX0sZnVuY3Rpb24odCxlLHIpe3JldHVyblt0PWUuZGVmKCciY21wIiBpbiAnLHIsIj8iLHQuY29uc3RhbnRzLmNvbXBhcmVGdW5jcywiWyIsciwiLmNtcF0iLCI6Iiw3NjgwKSxlLmRlZihyLCIucmVmfDAiKSxlPWUuZGVmKCcibWFzayIgaW4gJyxyLCI/IixyLCIubWFza3wwOi0xIildfSk7Y2FzZSJzdGVuY2lsLm9wRnJvbnQiOmNhc2Uic3RlbmNpbC5vcEJhY2siOnJldHVybiBlKGZ1bmN0aW9uKGUpe3JldHVyblsic3RlbmNpbC5vcEJhY2siPT09dD8xMDI5OjEwMjgsVHRbZS5mYWlsfHwia2VlcCJdLFR0W2UuemZhaWx8fCJrZWVwIl0sVHRbZS56cGFzc3x8ImtlZXAiXV19LGZ1bmN0aW9uKGUscixuKXtmdW5jdGlvbiBhKHQpe3JldHVybiByLmRlZignIicsdCwnIiBpbiAnLG4sIj8iLGksIlsiLG4sIi4iLHQsIl06Iiw3NjgwKX12YXIgaT1lLmNvbnN0YW50cy5zdGVuY2lsT3BzO3JldHVyblsic3RlbmNpbC5vcEJhY2siPT09dD8xMDI5OjEwMjgsYSgiZmFpbCIpLGEoInpmYWlsIiksYSgienBhc3MiKV19KTtjYXNlInBvbHlnb25PZmZzZXQub2Zmc2V0IjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm5bMHx0LmZhY3RvciwwfHQudW5pdHNdfSxmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKHIsIi5mYWN0b3J8MCIpLGU9ZS5kZWYociwiLnVuaXRzfDAiKV19KTtjYXNlImN1bGwuZmFjZSI6cmV0dXJuIGUoZnVuY3Rpb24odCl7dmFyIGU9MDtyZXR1cm4iZnJvbnQiPT09dD9lPTEwMjg6ImJhY2siPT09dCYmKGU9MTAyOSksZX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmRlZihyLCc9PT0iZnJvbnQiPycsMTAyOCwiOiIsMTAyOSl9KTtjYXNlImxpbmVXaWR0aCI6cmV0dXJuIGUoZnVuY3Rpb24odCl7cmV0dXJuIHR9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcn0pO2Nhc2UiZnJvbnRGYWNlIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gTXRbdF19LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYocisnPT09ImN3Ij8yMzA0OjIzMDUnKX0pO2Nhc2UiY29sb3JNYXNrIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuISF0fSl9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaSg0LGZ1bmN0aW9uKHQpe3JldHVybiIhISIrcisiWyIrdCsiXSJ9KX0pO2Nhc2Uic2FtcGxlLmNvdmVyYWdlIjpyZXR1cm4gZShmdW5jdGlvbih0KXtyZXR1cm5bInZhbHVlImluIHQ/dC52YWx1ZToxLCEhdC5pbnZlcnRdfSxmdW5jdGlvbih0LGUscil7cmV0dXJuW2UuZGVmKCcidmFsdWUiIGluICcsciwiPysiLHIsIi52YWx1ZToxIiksZT1lLmRlZigiISEiLHIsIi5pbnZlcnQiKV19KX19KSxhfSh0KSx1PXcodCksaD1zLnZpZXdwb3J0O3JldHVybiBoJiYoYy52aWV3cG9ydD1oKSwocz1zW2g9bSgic2Npc3Nvci5ib3giKV0pJiYoY1toXT1zKSwobz17ZnJhbWVidWZmZXI6byxkcmF3Omwsc2hhZGVyOnUsc3RhdGU6YyxkaXJ0eTpzPTA8T2JqZWN0LmtleXMoYykubGVuZ3RofSkucHJvZmlsZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQuc3RhdGljO2lmKHQ9dC5keW5hbWljLCJwcm9maWxlImluIHIpe3ZhciBuPSEhci5wcm9maWxlOyhlPVIoZnVuY3Rpb24odCxlKXtyZXR1cm4gbn0pKS5lbmFibGU9bn1lbHNlIGlmKCJwcm9maWxlImluIHQpe3ZhciBhPXQucHJvZmlsZTtlPUYoYSxmdW5jdGlvbih0LGUpe3JldHVybiB0Lmludm9rZShlLGEpfSl9cmV0dXJuIGV9KHQpLG8udW5pZm9ybXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YXRpYyxuPXQuZHluYW1pYyxhPXt9O3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLG49clt0XTtpZigibnVtYmVyIj09dHlwZW9mIG58fCJib29sZWFuIj09dHlwZW9mIG4pZT1SKGZ1bmN0aW9uKCl7cmV0dXJuIG59KTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXt2YXIgbz1uLl9yZWdsVHlwZTsidGV4dHVyZTJkIj09PW98fCJ0ZXh0dXJlQ3ViZSI9PT1vP2U9UihmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rKG4pfSk6ImZyYW1lYnVmZmVyIiE9PW8mJiJmcmFtZWJ1ZmZlckN1YmUiIT09b3x8KGU9UihmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rKG4uY29sb3JbMF0pfSkpfWVsc2UgdihuKSYmKGU9UihmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWwuZGVmKCJbIixpKG4ubGVuZ3RoLGZ1bmN0aW9uKHQpe3JldHVybiBuW3RdfSksIl0iKX0pKTtlLnZhbHVlPW4sYVt0XT1lfSksT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1uW3RdO2FbdF09RihlLGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaW52b2tlKHIsZSl9KX0pLGF9KHIpLG8uYXR0cmlidXRlcz1UKGUpLG8uY29udGV4dD1mdW5jdGlvbih0KXt2YXIgZT10LnN0YXRpYyxyPXQuZHluYW1pYyxuPXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPWVbdF07blt0XT1SKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiByfHwiYm9vbGVhbiI9PXR5cGVvZiByPyIiK3I6dC5saW5rKHIpfSl9KSxPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXJbdF07blt0XT1GKGUsZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5pbnZva2UocixlKX0pfSksbn0obiksb31mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj10LnNoYXJlZC5jb250ZXh0LGE9dC5zY29wZSgpO09iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oaSl7ZS5zYXZlKG4sIi4iK2kpLGEobiwiLiIsaSwiPSIscltpXS5hcHBlbmQodCxlKSwiOyIpfSksZShhKX1mdW5jdGlvbiBTKHQsZSxyLG4pe3ZhciBhLGk9KHM9dC5zaGFyZWQpLmdsLG89cy5mcmFtZWJ1ZmZlcjskJiYoYT1lLmRlZihzLmV4dGVuc2lvbnMsIi53ZWJnbF9kcmF3X2J1ZmZlcnMiKSk7dmFyIHM9KGw9dC5jb25zdGFudHMpLmRyYXdCdWZmZXIsbD1sLmJhY2tCdWZmZXI7dD1yP3IuYXBwZW5kKHQsZSk6ZS5kZWYobywiLm5leHQiKSxufHxlKCJpZigiLHQsIiE9PSIsbywiLmN1cil7IiksZSgiaWYoIix0LCIpeyIsaSwiLmJpbmRGcmFtZWJ1ZmZlcigiLDM2MTYwLCIsIix0LCIuZnJhbWVidWZmZXIpOyIpLCQmJmUoYSwiLmRyYXdCdWZmZXJzV0VCR0woIixzLCJbIix0LCIuY29sb3JBdHRhY2htZW50cy5sZW5ndGhdKTsiKSxlKCJ9ZWxzZXsiLGksIi5iaW5kRnJhbWVidWZmZXIoIiwzNjE2MCwiLG51bGwpOyIpLCQmJmUoYSwiLmRyYXdCdWZmZXJzV0VCR0woIixsLCIpOyIpLGUoIn0iLG8sIi5jdXI9Iix0LCI7Iiksbnx8ZSgifSIpfWZ1bmN0aW9uIEUodCxlLHIpe3ZhciBuPXQuc2hhcmVkLGE9bi5nbCxvPXQuY3VycmVudCxzPXQubmV4dCxsPW4uY3VycmVudCxjPW4ubmV4dCx1PXQuY29uZChsLCIuZGlydHkiKTtudC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuLGg7aWYoISgoZT1tKGUpKWluIHIuc3RhdGUpKWlmKGUgaW4gcyl7bj1zW2VdLGg9b1tlXTt2YXIgZj1pKHR0W2VdLmxlbmd0aCxmdW5jdGlvbih0KXtyZXR1cm4gdS5kZWYobiwiWyIsdCwiXSIpfSk7dSh0LmNvbmQoZi5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCsiIT09IitoKyJbIitlKyJdIn0pLmpvaW4oInx8IikpLnRoZW4oYSwiLiIsaXRbZV0sIigiLGYsIik7IixmLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBoKyJbIitlKyJdPSIrdH0pLmpvaW4oIjsiKSwiOyIpKX1lbHNlIG49dS5kZWYoYywiLiIsZSksZj10LmNvbmQobiwiIT09IixsLCIuIixlKSx1KGYpLGUgaW4gYXQ/Zih0LmNvbmQobikudGhlbihhLCIuZW5hYmxlKCIsYXRbZV0sIik7IikuZWxzZShhLCIuZGlzYWJsZSgiLGF0W2VdLCIpOyIpLGwsIi4iLGUsIj0iLG4sIjsiKTpmKGEsIi4iLGl0W2VdLCIoIixuLCIpOyIsbCwiLiIsZSwiPSIsbiwiOyIpfSksMD09PU9iamVjdC5rZXlzKHIuc3RhdGUpLmxlbmd0aCYmdShsLCIuZGlydHk9ZmFsc2U7IiksZSh1KX1mdW5jdGlvbiBMKHQsZSxyLG4pe3ZhciBhPXQuc2hhcmVkLGk9dC5jdXJyZW50LG89YS5jdXJyZW50LHM9YS5nbDt6KE9iamVjdC5rZXlzKHIpKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBsPXJbYV07aWYoIW58fG4obCkpe3ZhciBjPWwuYXBwZW5kKHQsZSk7aWYoYXRbYV0pe3ZhciB1PWF0W2FdO0QobCk/ZShzLGM/Ii5lbmFibGUoIjoiLmRpc2FibGUoIix1LCIpOyIpOmUodC5jb25kKGMpLnRoZW4ocywiLmVuYWJsZSgiLHUsIik7IikuZWxzZShzLCIuZGlzYWJsZSgiLHUsIik7IikpLGUobywiLiIsYSwiPSIsYywiOyIpfWVsc2UgaWYodihjKSl7dmFyIGg9aVthXTtlKHMsIi4iLGl0W2FdLCIoIixjLCIpOyIsYy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gaCsiWyIrZSsiXT0iK3R9KS5qb2luKCI7IiksIjsiKX1lbHNlIGUocywiLiIsaXRbYV0sIigiLGMsIik7IixvLCIuIixhLCI9IixjLCI7Iil9fSl9ZnVuY3Rpb24gQyh0LGUpe1EmJih0Lmluc3RhbmNpbmc9ZS5kZWYodC5zaGFyZWQuZXh0ZW5zaW9ucywiLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMiKSl9ZnVuY3Rpb24gQih0LGUscixuLGEpe2Z1bmN0aW9uIGkoKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIHBlcmZvcm1hbmNlPyJEYXRlLm5vdygpIjoicGVyZm9ybWFuY2Uubm93KCkifWZ1bmN0aW9uIG8odCl7dChjPWUuZGVmKCksIj0iLGkoKSwiOyIpLCJzdHJpbmciPT10eXBlb2YgYT90KGYsIi5jb3VudCs9IixhLCI7Iik6dChmLCIuY291bnQrKzsiKSxkJiYobj90KHU9ZS5kZWYoKSwiPSIsZywiLmdldE51bVBlbmRpbmdRdWVyaWVzKCk7Iik6dChnLCIuYmVnaW5RdWVyeSgiLGYsIik7IikpfWZ1bmN0aW9uIHModCl7dChmLCIuY3B1VGltZSs9IixpKCksIi0iLGMsIjsiKSxkJiYobj90KGcsIi5wdXNoU2NvcGVTdGF0cygiLHUsIiwiLGcsIi5nZXROdW1QZW5kaW5nUXVlcmllcygpLCIsZiwiKTsiKTp0KGcsIi5lbmRRdWVyeSgpOyIpKX1mdW5jdGlvbiBsKHQpe3ZhciByPWUuZGVmKHAsIi5wcm9maWxlIik7ZShwLCIucHJvZmlsZT0iLHQsIjsiKSxlLmV4aXQocCwiLnByb2ZpbGU9IixyLCI7Iil9dmFyIGMsdSxoPXQuc2hhcmVkLGY9dC5zdGF0cyxwPWguY3VycmVudCxnPWgudGltZXI7aWYocj1yLnByb2ZpbGUpe2lmKEQocikpcmV0dXJuIHZvaWQoci5lbmFibGU/KG8oZSkscyhlLmV4aXQpLGwoInRydWUiKSk6bCgiZmFsc2UiKSk7bChyPXIuYXBwZW5kKHQsZSkpfWVsc2Ugcj1lLmRlZihwLCIucHJvZmlsZSIpO28oaD10LmJsb2NrKCkpLGUoImlmKCIsciwiKXsiLGgsIn0iKSxzKHQ9dC5ibG9jaygpKSxlLmV4aXQoImlmKCIsciwiKXsiLHQsIn0iKX1mdW5jdGlvbiBOKHQsZSxyLG4sYSl7ZnVuY3Rpb24gaShyLG4sYSl7ZnVuY3Rpb24gaSgpe2UoImlmKCEiLHUsIi5idWZmZXIpeyIsbCwiLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KCIsYywiKTt9Iik7dmFyIHIsaT1hLnR5cGU7cj1hLnNpemU/ZS5kZWYoYS5zaXplLCJ8fCIsbik6bixlKCJpZigiLHUsIi50eXBlIT09IixpLCJ8fCIsdSwiLnNpemUhPT0iLHIsInx8IixwLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdSsiLiIrdCsiIT09IithW3RdfSkuam9pbigifHwiKSwiKXsiLGwsIi5iaW5kQnVmZmVyKCIsMzQ5NjIsIiwiLGgsIi5idWZmZXIpOyIsbCwiLnZlcnRleEF0dHJpYlBvaW50ZXIoIixbYyxyLGksYS5ub3JtYWxpemVkLGEuc3RyaWRlLGEub2Zmc2V0XSwiKTsiLHUsIi50eXBlPSIsaSwiOyIsdSwiLnNpemU9IixyLCI7IixwLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdSsiLiIrdCsiPSIrYVt0XSsiOyJ9KS5qb2luKCIiKSwifSIpLFEmJihpPWEuZGl2aXNvcixlKCJpZigiLHUsIi5kaXZpc29yIT09IixpLCIpeyIsdC5pbnN0YW5jaW5nLCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCIsW2MsaV0sIik7Iix1LCIuZGl2aXNvcj0iLGksIjt9IikpfWZ1bmN0aW9uIHMoKXtlKCJpZigiLHUsIi5idWZmZXIpeyIsbCwiLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGMsIik7IiwifWlmKCIsYnQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUrIi4iK3QrIiE9PSIrZltlXX0pLmpvaW4oInx8IiksIil7IixsLCIudmVydGV4QXR0cmliNGYoIixjLCIsIixmLCIpOyIsYnQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUrIi4iK3QrIj0iK2ZbZV0rIjsifSkuam9pbigiIiksIn0iKX12YXIgbD1vLmdsLGM9ZS5kZWYociwiLmxvY2F0aW9uIiksdT1lLmRlZihvLmF0dHJpYnV0ZXMsIlsiLGMsIl0iKTtyPWEuc3RhdGU7dmFyIGg9YS5idWZmZXIsZj1bYS54LGEueSxhLnosYS53XSxwPVsiYnVmZmVyIiwibm9ybWFsaXplZCIsIm9mZnNldCIsInN0cmlkZSJdOzE9PT1yP2koKToyPT09cj9zKCk6KGUoImlmKCIsciwiPT09IiwxLCIpeyIpLGkoKSxlKCJ9ZWxzZXsiKSxzKCksZSgifSIpKX12YXIgbz10LnNoYXJlZDtuLmZvckVhY2goZnVuY3Rpb24obil7dmFyIG8scz1uLm5hbWUsbD1yLmF0dHJpYnV0ZXNbc107aWYobCl7aWYoIWEobCkpcmV0dXJuO289bC5hcHBlbmQodCxlKX1lbHNle2lmKCFhKEF0KSlyZXR1cm47dmFyIGM9dC5zY29wZUF0dHJpYihzKTtvPXt9LE9iamVjdC5rZXlzKG5ldyBaKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe29bdF09ZS5kZWYoYywiLiIsdCl9KX1pKHQubGluayhuKSxmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAzNTY2NDpjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIDI7Y2FzZSAzNTY2NTpjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIDM7Y2FzZSAzNTY2NjpjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIDQ7ZGVmYXVsdDpyZXR1cm4gMX19KG4uaW5mby50eXBlKSxvKX0pfWZ1bmN0aW9uIGoodCxyLG4sYSxvKXtmb3IodmFyIHMsbD10LnNoYXJlZCxjPWwuZ2wsdT0wO3U8YS5sZW5ndGg7Kyt1KXt2YXIgaCxmPShnPWFbdV0pLm5hbWUscD1nLmluZm8udHlwZSxkPW4udW5pZm9ybXNbZl0sZz10LmxpbmsoZykrIi5sb2NhdGlvbiI7aWYoZCl7aWYoIW8oZCkpY29udGludWU7aWYoRChkKSl7aWYoZj1kLnZhbHVlLDM1Njc4PT09cHx8MzU2ODA9PT1wKXIoYywiLnVuaWZvcm0xaSgiLGcsIiwiLChwPXQubGluayhmLl90ZXh0dXJlfHxmLmNvbG9yWzBdLl90ZXh0dXJlKSkrIi5iaW5kKCkpOyIpLHIuZXhpdChwLCIudW5iaW5kKCk7Iik7ZWxzZSBpZigzNTY3ND09PXB8fDM1Njc1PT09cHx8MzU2NzY9PT1wKWQ9MiwzNTY3NT09PXA/ZD0zOjM1Njc2PT09cCYmKGQ9NCkscihjLCIudW5pZm9ybU1hdHJpeCIsZCwiZnYoIixnLCIsZmFsc2UsIixmPXQuZ2xvYmFsLmRlZigibmV3IEZsb2F0MzJBcnJheShbIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmKSsiXSkiKSwiKTsiKTtlbHNle3N3aXRjaChwKXtjYXNlIDUxMjY6cz0iMWYiO2JyZWFrO2Nhc2UgMzU2NjQ6cz0iMmYiO2JyZWFrO2Nhc2UgMzU2NjU6cz0iM2YiO2JyZWFrO2Nhc2UgMzU2NjY6cz0iNGYiO2JyZWFrO2Nhc2UgMzU2NzA6Y2FzZSA1MTI0OnM9IjFpIjticmVhaztjYXNlIDM1NjcxOmNhc2UgMzU2Njc6cz0iMmkiO2JyZWFrO2Nhc2UgMzU2NzI6Y2FzZSAzNTY2ODpzPSIzaSI7YnJlYWs7Y2FzZSAzNTY3MzpzPSI0aSI7YnJlYWs7Y2FzZSAzNTY2OTpzPSI0aSJ9cihjLCIudW5pZm9ybSIscywiKCIsZywiLCIsdihmKT9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmKTpmLCIpOyIpfWNvbnRpbnVlfWg9ZC5hcHBlbmQodCxyKX1lbHNle2lmKCFvKEF0KSljb250aW51ZTtoPXIuZGVmKGwudW5pZm9ybXMsIlsiLGUuaWQoZiksIl0iKX1zd2l0Y2goMzU2Nzg9PT1wP3IoImlmKCIsaCwiJiYiLGgsJy5fcmVnbFR5cGU9PT0iZnJhbWVidWZmZXIiKXsnLGgsIj0iLGgsIi5jb2xvclswXTsiLCJ9Iik6MzU2ODA9PT1wJiZyKCJpZigiLGgsIiYmIixoLCcuX3JlZ2xUeXBlPT09ImZyYW1lYnVmZmVyQ3ViZSIpeycsaCwiPSIsaCwiLmNvbG9yWzBdOyIsIn0iKSxmPTEscCl7Y2FzZSAzNTY3ODpjYXNlIDM1NjgwOnA9ci5kZWYoaCwiLl90ZXh0dXJlIikscihjLCIudW5pZm9ybTFpKCIsZywiLCIscCwiLmJpbmQoKSk7Iiksci5leGl0KHAsIi51bmJpbmQoKTsiKTtjb250aW51ZTtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpzPSIxaSI7YnJlYWs7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnM9IjJpIixmPTI7YnJlYWs7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnM9IjNpIixmPTM7YnJlYWs7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnM9IjRpIixmPTQ7YnJlYWs7Y2FzZSA1MTI2OnM9IjFmIjticmVhaztjYXNlIDM1NjY0OnM9IjJmIixmPTI7YnJlYWs7Y2FzZSAzNTY2NTpzPSIzZiIsZj0zO2JyZWFrO2Nhc2UgMzU2NjY6cz0iNGYiLGY9NDticmVhaztjYXNlIDM1Njc0OnM9Ik1hdHJpeDJmdiI7YnJlYWs7Y2FzZSAzNTY3NTpzPSJNYXRyaXgzZnYiO2JyZWFrO2Nhc2UgMzU2NzY6cz0iTWF0cml4NGZ2In1pZihyKGMsIi51bmlmb3JtIixzLCIoIixnLCIsIiksIk0iPT09cy5jaGFyQXQoMCkpe2c9TWF0aC5wb3cocC0zNTY3NCsyLDIpO3ZhciBtPXQuZ2xvYmFsLmRlZigibmV3IEZsb2F0MzJBcnJheSgiLGcsIikiKTtyKCJmYWxzZSwoQXJyYXkuaXNBcnJheSgiLGgsIil8fCIsaCwiIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KT8iLGgsIjooIixpKGcsZnVuY3Rpb24odCl7cmV0dXJuIG0rIlsiK3QrIl09IitoKyJbIit0KyJdIn0pLCIsIixtLCIpIil9ZWxzZSByKDE8Zj9pKGYsZnVuY3Rpb24odCl7cmV0dXJuIGgrIlsiK3QrIl0ifSk6aCk7cigiKTsiKX19ZnVuY3Rpb24gVih0LGUscixuKXtmdW5jdGlvbiBhKGEpe3ZhciBpPWZbYV07cmV0dXJuIGk/aS5jb250ZXh0RGVwJiZuLmNvbnRleHREeW5hbWljfHxpLnByb3BEZXA/aS5hcHBlbmQodCxyKTppLmFwcGVuZCh0LGUpOmUuZGVmKGgsIi4iLGEpfWZ1bmN0aW9uIGkoKXtmdW5jdGlvbiB0KCl7cihsLCIuZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoIixbZCx2LG0sZysiPDwoKCIrbSsiLTUxMjEpPj4xKSIsc10sIik7Iil9ZnVuY3Rpb24gZSgpe3IobCwiLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSgiLFtkLGcsdixzXSwiKTsiKX1wP3k/dCgpOihyKCJpZigiLHAsIil7IiksdCgpLHIoIn1lbHNleyIpLGUoKSxyKCJ9IikpOmUoKX1mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gdCgpe3IodSsiLmRyYXdFbGVtZW50cygiK1tkLHYsbSxnKyI8PCgoIittKyItNTEyMSk+PjEpIl0rIik7Iil9ZnVuY3Rpb24gZSgpe3IodSsiLmRyYXdBcnJheXMoIitbZCxnLHZdKyIpOyIpfXA/eT90KCk6KHIoImlmKCIscCwiKXsiKSx0KCkscigifWVsc2V7IiksZSgpLHIoIn0iKSk6ZSgpfXZhciBzLGwsYz10LnNoYXJlZCx1PWMuZ2wsaD1jLmRyYXcsZj1uLmRyYXcscD1mdW5jdGlvbigpe3ZhciBhPWYuZWxlbWVudHMsaT1lO3JldHVybiBhPygoYS5jb250ZXh0RGVwJiZuLmNvbnRleHREeW5hbWljfHxhLnByb3BEZXApJiYoaT1yKSxhPWEuYXBwZW5kKHQsaSkpOmE9aS5kZWYoaCwiLiIsImVsZW1lbnRzIiksYSYmaSgiaWYoIithKyIpIit1KyIuYmluZEJ1ZmZlcigzNDk2MywiK2ErIi5idWZmZXIuYnVmZmVyKTsiKSxhfSgpLGQ9YSgicHJpbWl0aXZlIiksZz1hKCJvZmZzZXQiKSx2PWZ1bmN0aW9uKCl7dmFyIGE9Zi5jb3VudCxpPWU7cmV0dXJuIGE/KChhLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGEucHJvcERlcCkmJihpPXIpLGE9YS5hcHBlbmQodCxpKSk6YT1pLmRlZihoLCIuIiwiY291bnQiKSxhfSgpO2lmKCJudW1iZXIiPT10eXBlb2Ygdil7aWYoMD09PXYpcmV0dXJufWVsc2UgcigiaWYoIix2LCIpeyIpLHIuZXhpdCgifSIpO1EmJihzPWEoImluc3RhbmNlcyIpLGw9dC5pbnN0YW5jaW5nKTt2YXIgbT1wKyIudHlwZSIseT1mLmVsZW1lbnRzJiZEKGYuZWxlbWVudHMpO1EmJigibnVtYmVyIiE9dHlwZW9mIHN8fDA8PXMpPyJzdHJpbmciPT10eXBlb2Ygcz8ocigiaWYoIixzLCI+MCl7IiksaSgpLHIoIn1lbHNlIGlmKCIscywiPDApeyIpLG8oKSxyKCJ9IikpOmkoKTpvKCl9ZnVuY3Rpb24gcSh0LGUscixuLGEpe3JldHVybiBhPShlPWIoKSkucHJvYygiYm9keSIsYSksUSYmKGUuaW5zdGFuY2luZz1hLmRlZihlLnNoYXJlZC5leHRlbnNpb25zLCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpKSx0KGUsYSxyLG4pLGUuY29tcGlsZSgpLmJvZHl9ZnVuY3Rpb24gSCh0LGUscixuKXtDKHQsZSksTih0LGUscixuLmF0dHJpYnV0ZXMsZnVuY3Rpb24oKXtyZXR1cm4hMH0pLGoodCxlLHIsbi51bmlmb3JtcyxmdW5jdGlvbigpe3JldHVybiEwfSksVih0LGUsZSxyKX1mdW5jdGlvbiBHKHQsZSxyLG4pe2Z1bmN0aW9uIGEoKXtyZXR1cm4hMH10LmJhdGNoSWQ9ImExIixDKHQsZSksTih0LGUscixuLmF0dHJpYnV0ZXMsYSksaih0LGUscixuLnVuaWZvcm1zLGEpLFYodCxlLGUscil9ZnVuY3Rpb24gWSh0LGUscixuKXtmdW5jdGlvbiBhKHQpe3JldHVybiB0LmNvbnRleHREZXAmJm98fHQucHJvcERlcH1mdW5jdGlvbiBpKHQpe3JldHVybiFhKHQpfUModCxlKTt2YXIgbz1yLmNvbnRleHREZXAscz1lLmRlZigpLGw9ZS5kZWYoKTt0LnNoYXJlZC5wcm9wcz1sLHQuYmF0Y2hJZD1zO3ZhciBjPXQuc2NvcGUoKSx1PXQuc2NvcGUoKTtlKGMuZW50cnksImZvcigiLHMsIj0wOyIscywiPCIsImExIiwiOysrIixzLCIpeyIsbCwiPSIsImEwIiwiWyIscywiXTsiLHUsIn0iLGMuZXhpdCksci5uZWVkc0NvbnRleHQmJkEodCx1LHIuY29udGV4dCksci5uZWVkc0ZyYW1lYnVmZmVyJiZTKHQsdSxyLmZyYW1lYnVmZmVyKSxMKHQsdSxyLnN0YXRlLGEpLHIucHJvZmlsZSYmYShyLnByb2ZpbGUpJiZCKHQsdSxyLCExLCEwKSxuPyhOKHQsYyxyLG4uYXR0cmlidXRlcyxpKSxOKHQsdSxyLG4uYXR0cmlidXRlcyxhKSxqKHQsYyxyLG4udW5pZm9ybXMsaSksaih0LHUscixuLnVuaWZvcm1zLGEpLFYodCxjLHUscikpOihlPXQuZ2xvYmFsLmRlZigie30iKSxuPXIuc2hhZGVyLnByb2dWYXIuYXBwZW5kKHQsdSksbD11LmRlZihuLCIuaWQiKSxjPXUuZGVmKGUsIlsiLGwsIl0iKSx1KHQuc2hhcmVkLmdsLCIudXNlUHJvZ3JhbSgiLG4sIi5wcm9ncmFtKTsiLCJpZighIixjLCIpeyIsYywiPSIsZSwiWyIsbCwiXT0iLHQubGluayhmdW5jdGlvbihlKXtyZXR1cm4gcShHLHQscixlLDIpfSksIigiLG4sIik7fSIsYywiLmNhbGwodGhpcyxhMFsiLHMsIl0sIixzLCIpOyIpKX1mdW5jdGlvbiBXKHQscil7ZnVuY3Rpb24gbihlKXt2YXIgbj1yLnNoYWRlcltlXTtuJiZhLnNldChpLnNoYWRlciwiLiIrZSxuLmFwcGVuZCh0LGEpKX12YXIgYT10LnByb2MoInNjb3BlIiwzKTt0LmJhdGNoSWQ9ImEyIjt2YXIgaT10LnNoYXJlZCxvPWkuY3VycmVudDtBKHQsYSxyLmNvbnRleHQpLHIuZnJhbWVidWZmZXImJnIuZnJhbWVidWZmZXIuYXBwZW5kKHQsYSkseihPYmplY3Qua2V5cyhyLnN0YXRlKSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1yLnN0YXRlW2VdLmFwcGVuZCh0LGEpO3Yobik/bi5mb3JFYWNoKGZ1bmN0aW9uKHIsbil7YS5zZXQodC5uZXh0W2VdLCJbIituKyJdIixyKX0pOmEuc2V0KGkubmV4dCwiLiIrZSxuKX0pLEIodCxhLHIsITAsITApLFsiZWxlbWVudHMiLCJvZmZzZXQiLCJjb3VudCIsImluc3RhbmNlcyIsInByaW1pdGl2ZSJdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ci5kcmF3W2VdO24mJmEuc2V0KGkuZHJhdywiLiIrZSwiIituLmFwcGVuZCh0LGEpKX0pLE9iamVjdC5rZXlzKHIudW5pZm9ybXMpLmZvckVhY2goZnVuY3Rpb24obil7YS5zZXQoaS51bmlmb3JtcywiWyIrZS5pZChuKSsiXSIsci51bmlmb3Jtc1tuXS5hcHBlbmQodCxhKSl9KSxPYmplY3Qua2V5cyhyLmF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ci5hdHRyaWJ1dGVzW2VdLmFwcGVuZCh0LGEpLGk9dC5zY29wZUF0dHJpYihlKTtPYmplY3Qua2V5cyhuZXcgWikuZm9yRWFjaChmdW5jdGlvbih0KXthLnNldChpLCIuIit0LG5bdF0pfSl9KSxuKCJ2ZXJ0IiksbigiZnJhZyIpLDA8T2JqZWN0LmtleXMoci5zdGF0ZSkubGVuZ3RoJiYoYShvLCIuZGlydHk9dHJ1ZTsiKSxhLmV4aXQobywiLmRpcnR5PXRydWU7IikpLGEoImExKCIsdC5zaGFyZWQuY29udGV4dCwiLGEwLCIsdC5iYXRjaElkLCIpOyIpfWZ1bmN0aW9uIFgodCxlLHIpe3ZhciBuPWUuc3RhdGljW3JdO2lmKG4mJmZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCYmIXYodCkpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoVS5pc0R5bmFtaWModFtlW3JdXSkpcmV0dXJuITA7cmV0dXJuITF9fShuKSl7dmFyIGE9dC5nbG9iYWwsaT1PYmplY3Qua2V5cyhuKSxvPSExLHM9ITEsbD0hMSxjPXQuZ2xvYmFsLmRlZigie30iKTtpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bltlXTtpZihVLmlzRHluYW1pYyhyKSkiZnVuY3Rpb24iPT10eXBlb2YgciYmKHI9bltlXT1VLnVuYm94KHIpKSxlPUYocixudWxsKSxvPW98fGUudGhpc0RlcCxsPWx8fGUucHJvcERlcCxzPXN8fGUuY29udGV4dERlcDtlbHNle3N3aXRjaChhKGMsIi4iLGUsIj0iKSx0eXBlb2Ygcil7Y2FzZSJudW1iZXIiOmEocik7YnJlYWs7Y2FzZSJzdHJpbmciOmEoJyInLHIsJyInKTticmVhaztjYXNlIm9iamVjdCI6QXJyYXkuaXNBcnJheShyKSYmYSgiWyIsci5qb2luKCksIl0iKTticmVhaztkZWZhdWx0OmEodC5saW5rKHIpKX1hKCI7Iil9fSksZS5keW5hbWljW3JdPW5ldyBVLkR5bmFtaWNWYXJpYWJsZSg0LHt0aGlzRGVwOm8sY29udGV4dERlcDpzLHByb3BEZXA6bCxyZWY6YyxhcHBlbmQ6ZnVuY3Rpb24odCxlKXtpLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIGE9bltyXTtVLmlzRHluYW1pYyhhKSYmKGE9dC5pbnZva2UoZSxhKSxlKGMsIi4iLHIsIj0iLGEsIjsiKSl9KX19KSxkZWxldGUgZS5zdGF0aWNbcl19fXZhciBaPXUuUmVjb3JkLEo9e2FkZDozMjc3NCxzdWJ0cmFjdDozMjc3OCwicmV2ZXJzZSBzdWJ0cmFjdCI6MzI3Nzl9O3IuZXh0X2JsZW5kX21pbm1heCYmKEoubWluPTMyNzc1LEoubWF4PTMyNzc2KTt2YXIgUT1yLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMsJD1yLndlYmdsX2RyYXdfYnVmZmVycyx0dD17ZGlydHk6ITAscHJvZmlsZTpnLnByb2ZpbGV9LGV0PXt9LG50PVtdLGF0PXt9LGl0PXt9O3koImRpdGhlciIsMzAyNCkseSgiYmxlbmQuZW5hYmxlIiwzMDQyKSx4KCJibGVuZC5jb2xvciIsImJsZW5kQ29sb3IiLFswLDAsMCwwXSkseCgiYmxlbmQuZXF1YXRpb24iLCJibGVuZEVxdWF0aW9uU2VwYXJhdGUiLFszMjc3NCwzMjc3NF0pLHgoImJsZW5kLmZ1bmMiLCJibGVuZEZ1bmNTZXBhcmF0ZSIsWzEsMCwxLDBdKSx5KCJkZXB0aC5lbmFibGUiLDI5MjksITApLHgoImRlcHRoLmZ1bmMiLCJkZXB0aEZ1bmMiLDUxMykseCgiZGVwdGgucmFuZ2UiLCJkZXB0aFJhbmdlIixbMCwxXSkseCgiZGVwdGgubWFzayIsImRlcHRoTWFzayIsITApLHgoImNvbG9yTWFzayIsImNvbG9yTWFzayIsWyEwLCEwLCEwLCEwXSkseSgiY3VsbC5lbmFibGUiLDI4ODQpLHgoImN1bGwuZmFjZSIsImN1bGxGYWNlIiwxMDI5KSx4KCJmcm9udEZhY2UiLCJmcm9udEZhY2UiLDIzMDUpLHgoImxpbmVXaWR0aCIsImxpbmVXaWR0aCIsMSkseSgicG9seWdvbk9mZnNldC5lbmFibGUiLDMyODIzKSx4KCJwb2x5Z29uT2Zmc2V0Lm9mZnNldCIsInBvbHlnb25PZmZzZXQiLFswLDBdKSx5KCJzYW1wbGUuYWxwaGEiLDMyOTI2KSx5KCJzYW1wbGUuZW5hYmxlIiwzMjkyOCkseCgic2FtcGxlLmNvdmVyYWdlIiwic2FtcGxlQ292ZXJhZ2UiLFsxLCExXSkseSgic3RlbmNpbC5lbmFibGUiLDI5NjApLHgoInN0ZW5jaWwubWFzayIsInN0ZW5jaWxNYXNrIiwtMSkseCgic3RlbmNpbC5mdW5jIiwic3RlbmNpbEZ1bmMiLFs1MTksMCwtMV0pLHgoInN0ZW5jaWwub3BGcm9udCIsInN0ZW5jaWxPcFNlcGFyYXRlIixbMTAyOCw3NjgwLDc2ODAsNzY4MF0pLHgoInN0ZW5jaWwub3BCYWNrIiwic3RlbmNpbE9wU2VwYXJhdGUiLFsxMDI5LDc2ODAsNzY4MCw3NjgwXSkseSgic2Npc3Nvci5lbmFibGUiLDMwODkpLHgoInNjaXNzb3IuYm94Iiwic2Npc3NvciIsWzAsMCx0LmRyYXdpbmdCdWZmZXJXaWR0aCx0LmRyYXdpbmdCdWZmZXJIZWlnaHRdKSx4KCJ2aWV3cG9ydCIsInZpZXdwb3J0IixbMCwwLHQuZHJhd2luZ0J1ZmZlcldpZHRoLHQuZHJhd2luZ0J1ZmZlckhlaWdodF0pO3ZhciBvdD17Z2w6dCxjb250ZXh0OnAsc3RyaW5nczplLG5leHQ6ZXQsY3VycmVudDp0dCxkcmF3OmYsZWxlbWVudHM6byxidWZmZXI6YSxzaGFkZXI6aCxhdHRyaWJ1dGVzOnUuc3RhdGUsdW5pZm9ybXM6YyxmcmFtZWJ1ZmZlcjpsLGV4dGVuc2lvbnM6cix0aW1lcjpkLGlzQnVmZmVyQXJnczpPfSxzdD17cHJpbVR5cGVzOnJ0LGNvbXBhcmVGdW5jczprdCxibGVuZEZ1bmNzOnd0LGJsZW5kRXF1YXRpb25zOkosc3RlbmNpbE9wczpUdCxnbFR5cGVzOkssb3JpZW50YXRpb25UeXBlOk10fTskJiYoc3QuYmFja0J1ZmZlcj1bMTAyOV0sc3QuZHJhd0J1ZmZlcj1pKG4ubWF4RHJhd2J1ZmZlcnMsZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10P1swXTppKHQsZnVuY3Rpb24odCl7cmV0dXJuIDM2MDY0K3R9KX0pKTt2YXIgbHQ9MDtyZXR1cm57bmV4dDpldCxjdXJyZW50OnR0LHByb2NzOmZ1bmN0aW9uKCl7dmFyIHQ9YigpLGU9dC5wcm9jKCJwb2xsIikscj10LnByb2MoInJlZnJlc2giKSxhPXQuYmxvY2soKTtlKGEpLHIoYSk7dmFyIG8scz10LnNoYXJlZCxsPXMuZ2wsYz1zLm5leHQsdT1zLmN1cnJlbnQ7YSh1LCIuZGlydHk9ZmFsc2U7IiksUyh0LGUpLFModCxyLG51bGwsITApLFEmJihvPXQubGluayhRKSk7Zm9yKHZhciBoPTA7aDxuLm1heEF0dHJpYnV0ZXM7KytoKXt2YXIgZj1yLmRlZihzLmF0dHJpYnV0ZXMsIlsiLGgsIl0iKSxwPXQuY29uZChmLCIuYnVmZmVyIik7cC50aGVuKGwsIi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGgsIik7IixsLCIuYmluZEJ1ZmZlcigiLDM0OTYyLCIsIixmLCIuYnVmZmVyLmJ1ZmZlcik7IixsLCIudmVydGV4QXR0cmliUG9pbnRlcigiLGgsIiwiLGYsIi5zaXplLCIsZiwiLnR5cGUsIixmLCIubm9ybWFsaXplZCwiLGYsIi5zdHJpZGUsIixmLCIub2Zmc2V0KTsiKS5lbHNlKGwsIi5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoIixoLCIpOyIsbCwiLnZlcnRleEF0dHJpYjRmKCIsaCwiLCIsZiwiLngsIixmLCIueSwiLGYsIi56LCIsZiwiLncpOyIsZiwiLmJ1ZmZlcj1udWxsOyIpLHIocCksUSYmcihvLCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCIsaCwiLCIsZiwiLmRpdmlzb3IpOyIpfXJldHVybiBPYmplY3Qua2V5cyhhdCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1hdFtuXSxvPWEuZGVmKGMsIi4iLG4pLHM9dC5ibG9jaygpO3MoImlmKCIsbywiKXsiLGwsIi5lbmFibGUoIixpLCIpfWVsc2V7IixsLCIuZGlzYWJsZSgiLGksIil9Iix1LCIuIixuLCI9IixvLCI7IikscihzKSxlKCJpZigiLG8sIiE9PSIsdSwiLiIsbiwiKXsiLHMsIn0iKX0pLE9iamVjdC5rZXlzKGl0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBvLHMsaD1pdFtuXSxmPXR0W25dLHA9dC5ibG9jaygpO3AobCwiLiIsaCwiKCIpLHYoZik/KGg9Zi5sZW5ndGgsbz10Lmdsb2JhbC5kZWYoYywiLiIsbikscz10Lmdsb2JhbC5kZWYodSwiLiIsbikscChpKGgsZnVuY3Rpb24odCl7cmV0dXJuIG8rIlsiK3QrIl0ifSksIik7IixpKGgsZnVuY3Rpb24odCl7cmV0dXJuIHMrIlsiK3QrIl09IitvKyJbIit0KyJdOyJ9KS5qb2luKCIiKSksZSgiaWYoIixpKGgsZnVuY3Rpb24odCl7cmV0dXJuIG8rIlsiK3QrIl0hPT0iK3MrIlsiK3QrIl0ifSkuam9pbigifHwiKSwiKXsiLHAsIn0iKSk6KG89YS5kZWYoYywiLiIsbikscz1hLmRlZih1LCIuIixuKSxwKG8sIik7Iix1LCIuIixuLCI9IixvLCI7IiksZSgiaWYoIixvLCIhPT0iLHMsIil7IixwLCJ9IikpLHIocCl9KSx0LmNvbXBpbGUoKX0oKSxjb21waWxlOmZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIGk9YigpO3JldHVybiBpLnN0YXRzPWkubGluayhhKSxPYmplY3Qua2V5cyhlLnN0YXRpYykuZm9yRWFjaChmdW5jdGlvbih0KXtYKGksZSx0KX0pLF90LmZvckVhY2goZnVuY3Rpb24oZSl7WChpLHQsZSl9KSxyPU0odCxlLHIsbiksZnVuY3Rpb24odCxlKXt2YXIgcj10LnByb2MoImRyYXciLDEpO0ModCxyKSxBKHQscixlLmNvbnRleHQpLFModCxyLGUuZnJhbWVidWZmZXIpLEUodCxyLGUpLEwodCxyLGUuc3RhdGUpLEIodCxyLGUsITEsITApO3ZhciBuPWUuc2hhZGVyLnByb2dWYXIuYXBwZW5kKHQscik7aWYocih0LnNoYXJlZC5nbCwiLnVzZVByb2dyYW0oIixuLCIucHJvZ3JhbSk7IiksZS5zaGFkZXIucHJvZ3JhbSlIKHQscixlLGUuc2hhZGVyLnByb2dyYW0pO2Vsc2V7dmFyIGE9dC5nbG9iYWwuZGVmKCJ7fSIpLGk9ci5kZWYobiwiLmlkIiksbz1yLmRlZihhLCJbIixpLCJdIik7cih0LmNvbmQobykudGhlbihvLCIuY2FsbCh0aGlzLGEwKTsiKS5lbHNlKG8sIj0iLGEsIlsiLGksIl09Iix0LmxpbmsoZnVuY3Rpb24ocil7cmV0dXJuIHEoSCx0LGUsciwxKX0pLCIoIixuLCIpOyIsbywiLmNhbGwodGhpcyxhMCk7IikpfTA8T2JqZWN0LmtleXMoZS5zdGF0ZSkubGVuZ3RoJiZyKHQuc2hhcmVkLmN1cnJlbnQsIi5kaXJ0eT10cnVlOyIpfShpLHIpLFcoaSxyKSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQuY29udGV4dERlcCYmYXx8dC5wcm9wRGVwfXZhciBuPXQucHJvYygiYmF0Y2giLDIpO3QuYmF0Y2hJZD0iMCIsQyh0LG4pO3ZhciBhPSExLGk9ITA7T2JqZWN0LmtleXMoZS5jb250ZXh0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2E9YXx8ZS5jb250ZXh0W3RdLnByb3BEZXB9KSxhfHwoQSh0LG4sZS5jb250ZXh0KSxpPSExKTt2YXIgbz0hMTtpZigocz1lLmZyYW1lYnVmZmVyKT8ocy5wcm9wRGVwP2E9bz0hMDpzLmNvbnRleHREZXAmJmEmJihvPSEwKSxvfHxTKHQsbixzKSk6Uyh0LG4sbnVsbCksZS5zdGF0ZS52aWV3cG9ydCYmZS5zdGF0ZS52aWV3cG9ydC5wcm9wRGVwJiYoYT0hMCksRSh0LG4sZSksTCh0LG4sZS5zdGF0ZSxmdW5jdGlvbih0KXtyZXR1cm4hcih0KX0pLGUucHJvZmlsZSYmcihlLnByb2ZpbGUpfHxCKHQsbixlLCExLCJhMSIpLGUuY29udGV4dERlcD1hLGUubmVlZHNDb250ZXh0PWksZS5uZWVkc0ZyYW1lYnVmZmVyPW8sKGk9ZS5zaGFkZXIucHJvZ1ZhcikuY29udGV4dERlcCYmYXx8aS5wcm9wRGVwKVkodCxuLGUsbnVsbCk7ZWxzZSBpZihpPWkuYXBwZW5kKHQsbiksbih0LnNoYXJlZC5nbCwiLnVzZVByb2dyYW0oIixpLCIucHJvZ3JhbSk7IiksZS5zaGFkZXIucHJvZ3JhbSlZKHQsbixlLGUuc2hhZGVyLnByb2dyYW0pO2Vsc2V7dmFyIHM9dC5nbG9iYWwuZGVmKCJ7fSIpLGw9KG89bi5kZWYoaSwiLmlkIiksbi5kZWYocywiWyIsbywiXSIpKTtuKHQuY29uZChsKS50aGVuKGwsIi5jYWxsKHRoaXMsYTAsYTEpOyIpLmVsc2UobCwiPSIscywiWyIsbywiXT0iLHQubGluayhmdW5jdGlvbihyKXtyZXR1cm4gcShZLHQsZSxyLDIpfSksIigiLGksIik7IixsLCIuY2FsbCh0aGlzLGEwLGExKTsiKSl9MDxPYmplY3Qua2V5cyhlLnN0YXRlKS5sZW5ndGgmJm4odC5zaGFyZWQuY3VycmVudCwiLmRpcnR5PXRydWU7Iil9KGksciksaS5jb21waWxlKCl9fX1mdW5jdGlvbiBOKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYodFtyXT09PWUpcmV0dXJuIHI7cmV0dXJuLTF9dmFyIGo9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksbj0wO248ci5sZW5ndGg7KytuKXRbcltuXV09ZVtyW25dXTtyZXR1cm4gdH0sVj0wLFU9e0R5bmFtaWNWYXJpYWJsZTp0LGRlZmluZTpmdW5jdGlvbihyLG4pe3JldHVybiBuZXcgdChyLGUobisiIikpfSxpc0R5bmFtaWM6ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJiFlLl9yZWdsVHlwZXx8ZSBpbnN0YW5jZW9mIHR9LHVuYm94OmZ1bmN0aW9uKGUscil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/bmV3IHQoMCxlKTplfSxhY2Nlc3NvcjplfSxxPXtuZXh0OiJmdW5jdGlvbiI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/ZnVuY3Rpb24odCl7cmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KX06ZnVuY3Rpb24odCl7cmV0dXJuIHNldFRpbWVvdXQodCwxNil9LGNhbmNlbDoiZnVuY3Rpb24iPT10eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWU/ZnVuY3Rpb24odCl7cmV0dXJuIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHQpfTpjbGVhclRpbWVvdXR9LEg9InVuZGVmaW5lZCIhPXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0sRz1zKCk7Ry56ZXJvPXMoKTt2YXIgWT1mdW5jdGlvbih0LGUpe3ZhciByPTE7ZS5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMmJihyPXQuZ2V0UGFyYW1ldGVyKDM0MDQ3KSk7dmFyIG49MSxhPTE7ZS53ZWJnbF9kcmF3X2J1ZmZlcnMmJihuPXQuZ2V0UGFyYW1ldGVyKDM0ODUyKSxhPXQuZ2V0UGFyYW1ldGVyKDM2MDYzKSk7dmFyIGk9ISFlLm9lc190ZXh0dXJlX2Zsb2F0O2lmKGkpe2k9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZSgzNTUzLGkpLHQudGV4SW1hZ2UyRCgzNTUzLDAsNjQwOCwxLDEsMCw2NDA4LDUxMjYsbnVsbCk7dmFyIG89dC5jcmVhdGVGcmFtZWJ1ZmZlcigpO2lmKHQuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG8pLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzU1MyxpLDApLHQuYmluZFRleHR1cmUoMzU1MyxudWxsKSwzNjA1MyE9PXQuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCkpaT0hMTtlbHNle3Qudmlld3BvcnQoMCwwLDEsMSksdC5jbGVhckNvbG9yKDEsMCwwLDEpLHQuY2xlYXIoMTYzODQpO3ZhciBzPUcuYWxsb2NUeXBlKDUxMjYsNCk7dC5yZWFkUGl4ZWxzKDAsMCwxLDEsNjQwOCw1MTI2LHMpLHQuZ2V0RXJyb3IoKT9pPSExOih0LmRlbGV0ZUZyYW1lYnVmZmVyKG8pLHQuZGVsZXRlVGV4dHVyZShpKSxpPTE9PT1zWzBdKSxHLmZyZWVUeXBlKHMpfX1yZXR1cm4gcz0hMCwidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfHwvVHJpZGVudFwvLy50ZXN0KG5hdmlnYXRvci5hcHBWZXJzaW9uKXx8L0VkZ2UvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpfHwocz10LmNyZWF0ZVRleHR1cmUoKSxvPUcuYWxsb2NUeXBlKDUxMjEsMzYpLHQuYWN0aXZlVGV4dHVyZSgzMzk4NCksdC5iaW5kVGV4dHVyZSgzNDA2NyxzKSx0LnRleEltYWdlMkQoMzQwNjksMCw2NDA4LDMsMywwLDY0MDgsNTEyMSxvKSxHLmZyZWVUeXBlKG8pLHQuYmluZFRleHR1cmUoMzQwNjcsbnVsbCksdC5kZWxldGVUZXh0dXJlKHMpLHM9IXQuZ2V0RXJyb3IoKSkse2NvbG9yQml0czpbdC5nZXRQYXJhbWV0ZXIoMzQxMCksdC5nZXRQYXJhbWV0ZXIoMzQxMSksdC5nZXRQYXJhbWV0ZXIoMzQxMiksdC5nZXRQYXJhbWV0ZXIoMzQxMyldLGRlcHRoQml0czp0LmdldFBhcmFtZXRlcigzNDE0KSxzdGVuY2lsQml0czp0LmdldFBhcmFtZXRlcigzNDE1KSxzdWJwaXhlbEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQwOCksZXh0ZW5zaW9uczpPYmplY3Qua2V5cyhlKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISFlW3RdfSksbWF4QW5pc290cm9waWM6cixtYXhEcmF3YnVmZmVyczpuLG1heENvbG9yQXR0YWNobWVudHM6YSxwb2ludFNpemVEaW1zOnQuZ2V0UGFyYW1ldGVyKDMzOTAxKSxsaW5lV2lkdGhEaW1zOnQuZ2V0UGFyYW1ldGVyKDMzOTAyKSxtYXhWaWV3cG9ydERpbXM6dC5nZXRQYXJhbWV0ZXIoMzM4NiksbWF4Q29tYmluZWRUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzU2NjEpLG1heEN1YmVNYXBTaXplOnQuZ2V0UGFyYW1ldGVyKDM0MDc2KSxtYXhSZW5kZXJidWZmZXJTaXplOnQuZ2V0UGFyYW1ldGVyKDM0MDI0KSxtYXhUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzQ5MzApLG1heFRleHR1cmVTaXplOnQuZ2V0UGFyYW1ldGVyKDMzNzkpLG1heEF0dHJpYnV0ZXM6dC5nZXRQYXJhbWV0ZXIoMzQ5MjEpLG1heFZlcnRleFVuaWZvcm1zOnQuZ2V0UGFyYW1ldGVyKDM2MzQ3KSxtYXhWZXJ0ZXhUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzU2NjApLG1heFZhcnlpbmdWZWN0b3JzOnQuZ2V0UGFyYW1ldGVyKDM2MzQ4KSxtYXhGcmFnbWVudFVuaWZvcm1zOnQuZ2V0UGFyYW1ldGVyKDM2MzQ5KSxnbHNsOnQuZ2V0UGFyYW1ldGVyKDM1NzI0KSxyZW5kZXJlcjp0LmdldFBhcmFtZXRlcig3OTM3KSx2ZW5kb3I6dC5nZXRQYXJhbWV0ZXIoNzkzNiksdmVyc2lvbjp0LmdldFBhcmFtZXRlcig3OTM4KSxyZWFkRmxvYXQ6aSxucG90VGV4dHVyZUN1YmU6c319LFc9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDE2QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8dCBpbnN0YW5jZW9mIEludDhBcnJheXx8dCBpbnN0YW5jZW9mIEludDE2QXJyYXl8fHQgaW5zdGFuY2VvZiBJbnQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl9LFg9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSxaPXtzaGFwZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9W107dC5sZW5ndGg7dD10WzBdKWUucHVzaCh0Lmxlbmd0aCk7cmV0dXJuIGV9LGZsYXR0ZW46ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9MTtpZihlLmxlbmd0aClmb3IodmFyIGk9MDtpPGUubGVuZ3RoOysraSlhKj1lW2ldO2Vsc2UgYT0wO3N3aXRjaChyPW58fEcuYWxsb2NUeXBlKHIsYSksZS5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6Zm9yKG49ZVswXSxlPTA7ZTxuOysrZSlyW2VdPXRbZV07YnJlYWs7Y2FzZSAyOmZvcihuPWVbMF0sZT1lWzFdLGk9YT0wO2k8bjsrK2kpZm9yKHZhciBvPXRbaV0scz0wO3M8ZTsrK3MpclthKytdPW9bc107YnJlYWs7Y2FzZSAzOmModCxlWzBdLGVbMV0sZVsyXSxyLDApO2JyZWFrO2RlZmF1bHQ6IWZ1bmN0aW9uIHQoZSxyLG4sYSxpKXtmb3IodmFyIG89MSxzPW4rMTtzPHIubGVuZ3RoOysrcylvKj1yW3NdO3ZhciBsPXJbbl07aWYoND09ci5sZW5ndGgtbil7dmFyIHU9cltuKzFdLGg9cltuKzJdO2ZvcihyPXJbbiszXSxzPTA7czxsOysrcyljKGVbc10sdSxoLHIsYSxpKSxpKz1vfWVsc2UgZm9yKHM9MDtzPGw7KytzKXQoZVtzXSxyLG4rMSxhLGkpLGkrPW99KHQsZSwwLHIsMCl9cmV0dXJuIHJ9fSxKPXsiW29iamVjdCBJbnQ4QXJyYXldIjo1MTIwLCJbb2JqZWN0IEludDE2QXJyYXldIjo1MTIyLCJbb2JqZWN0IEludDMyQXJyYXldIjo1MTI0LCJbb2JqZWN0IFVpbnQ4QXJyYXldIjo1MTIxLCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI6NTEyMSwiW29iamVjdCBVaW50MTZBcnJheV0iOjUxMjMsIltvYmplY3QgVWludDMyQXJyYXldIjo1MTI1LCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOjUxMjYsIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6NTEyMSwiW29iamVjdCBBcnJheUJ1ZmZlcl0iOjUxMjF9LEs9e2ludDg6NTEyMCxpbnQxNjo1MTIyLGludDMyOjUxMjQsdWludDg6NTEyMSx1aW50MTY6NTEyMyx1aW50MzI6NTEyNSxmbG9hdDo1MTI2LGZsb2F0MzI6NTEyNn0sUT17ZHluYW1pYzozNTA0OCxzdHJlYW06MzUwNDAsc3RhdGljOjM1MDQ0fSwkPVouZmxhdHRlbix0dD1aLnNoYXBlLGV0PVtdO2V0WzUxMjBdPTEsZXRbNTEyMl09MixldFs1MTI0XT00LGV0WzUxMjFdPTEsZXRbNTEyM109MixldFs1MTI1XT00LGV0WzUxMjZdPTQ7dmFyIHJ0PXtwb2ludHM6MCxwb2ludDowLGxpbmVzOjEsbGluZToxLHRyaWFuZ2xlczo0LHRyaWFuZ2xlOjQsImxpbmUgbG9vcCI6MiwibGluZSBzdHJpcCI6MywidHJpYW5nbGUgc3RyaXAiOjUsInRyaWFuZ2xlIGZhbiI6Nn0sbnQ9bmV3IEZsb2F0MzJBcnJheSgxKSxhdD1uZXcgVWludDMyQXJyYXkobnQuYnVmZmVyKSxpdD1bOTk4NCw5OTg2LDk5ODUsOTk4N10sb3Q9WzAsNjQwOSw2NDEwLDY0MDcsNjQwOF0sc3Q9e307c3RbNjQwOV09c3RbNjQwNl09c3RbNjQwMl09MSxzdFszNDA0MV09c3RbNjQxMF09MixzdFs2NDA3XT1zdFszNTkwNF09MyxzdFs2NDA4XT1zdFszNTkwNl09NDt2YXIgbHQ9bSgiSFRNTENhbnZhc0VsZW1lbnQiKSxjdD1tKCJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQiKSx1dD1tKCJJbWFnZUJpdG1hcCIpLGh0PW0oIkhUTUxJbWFnZUVsZW1lbnQiKSxmdD1tKCJIVE1MVmlkZW9FbGVtZW50IikscHQ9T2JqZWN0LmtleXMoSikuY29uY2F0KFtsdCxjdCx1dCxodCxmdF0pLGR0PVtdO2R0WzUxMjFdPTEsZHRbNTEyNl09NCxkdFszNjE5M109MixkdFs1MTIzXT0yLGR0WzUxMjVdPTQ7dmFyIGd0PVtdO2d0WzMyODU0XT0yLGd0WzMyODU1XT0yLGd0WzM2MTk0XT0yLGd0WzM0MDQxXT00LGd0WzMzNzc2XT0uNSxndFszMzc3N109LjUsZ3RbMzM3NzhdPTEsZ3RbMzM3NzldPTEsZ3RbMzU5ODZdPS41LGd0WzM1OTg3XT0xLGd0WzM0Nzk4XT0xLGd0WzM1ODQwXT0uNSxndFszNTg0MV09LjI1LGd0WzM1ODQyXT0uNSxndFszNTg0M109LjI1LGd0WzM2MTk2XT0uNTt2YXIgdnQ9W107dnRbMzI4NTRdPTIsdnRbMzI4NTVdPTIsdnRbMzYxOTRdPTIsdnRbMzMxODldPTIsdnRbMzYxNjhdPTEsdnRbMzQwNDFdPTQsdnRbMzU5MDddPTQsdnRbMzQ4MzZdPTE2LHZ0WzM0ODQyXT04LHZ0WzM0ODQzXT02O3ZhciBtdD1mdW5jdGlvbih0LGUscixuLGEpe2Z1bmN0aW9uIGkodCl7dGhpcy5pZD1jKyssdGhpcy5yZWZDb3VudD0xLHRoaXMucmVuZGVyYnVmZmVyPXQsdGhpcy5mb3JtYXQ9MzI4NTQsdGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wLGEucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIG8oZSl7dmFyIHI9ZS5yZW5kZXJidWZmZXI7dC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLHQuZGVsZXRlUmVuZGVyYnVmZmVyKHIpLGUucmVuZGVyYnVmZmVyPW51bGwsZS5yZWZDb3VudD0wLGRlbGV0ZSB1W2UuaWRdLG4ucmVuZGVyYnVmZmVyQ291bnQtLX12YXIgcz17cmdiYTQ6MzI4NTQscmdiNTY1OjM2MTk0LCJyZ2I1IGExIjozMjg1NSxkZXB0aDozMzE4OSxzdGVuY2lsOjM2MTY4LCJkZXB0aCBzdGVuY2lsIjozNDA0MX07ZS5leHRfc3JnYiYmKHMuc3JnYmE9MzU5MDcpLGUuZXh0X2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0JiYocy5yZ2JhMTZmPTM0ODQyLHMucmdiMTZmPTM0ODQzKSxlLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCYmKHMucmdiYTMyZj0zNDgzNik7dmFyIGw9W107T2JqZWN0LmtleXMocykuZm9yRWFjaChmdW5jdGlvbih0KXtsW3NbdF1dPXR9KTt2YXIgYz0wLHU9e307cmV0dXJuIGkucHJvdG90eXBlLmRlY1JlZj1mdW5jdGlvbigpezA+PS0tdGhpcy5yZWZDb3VudCYmbyh0aGlzKX0sYS5wcm9maWxlJiYobi5nZXRUb3RhbFJlbmRlcmJ1ZmZlclNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyh1KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrPXVbZV0uc3RhdHMuc2l6ZX0pLHR9KSx7Y3JlYXRlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlLHIpe3ZhciBuPTAsaT0wLHU9MzI4NTQ7aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZlPygic2hhcGUiaW4gZT8obj0wfChpPWUuc2hhcGUpWzBdLGk9MHxpWzFdKTooInJhZGl1cyJpbiBlJiYobj1pPTB8ZS5yYWRpdXMpLCJ3aWR0aCJpbiBlJiYobj0wfGUud2lkdGgpLCJoZWlnaHQiaW4gZSYmKGk9MHxlLmhlaWdodCkpLCJmb3JtYXQiaW4gZSYmKHU9c1tlLmZvcm1hdF0pKToibnVtYmVyIj09dHlwZW9mIGU/KG49MHxlLGk9Im51bWJlciI9PXR5cGVvZiByPzB8cjpuKTplfHwobj1pPTEpLG4hPT1jLndpZHRofHxpIT09Yy5oZWlnaHR8fHUhPT1jLmZvcm1hdClyZXR1cm4gby53aWR0aD1jLndpZHRoPW4sby5oZWlnaHQ9Yy5oZWlnaHQ9aSxjLmZvcm1hdD11LHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxjLnJlbmRlcmJ1ZmZlciksdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLHUsbixpKSxhLnByb2ZpbGUmJihjLnN0YXRzLnNpemU9dnRbYy5mb3JtYXRdKmMud2lkdGgqYy5oZWlnaHQpLG8uZm9ybWF0PWxbYy5mb3JtYXRdLG99dmFyIGM9bmV3IGkodC5jcmVhdGVSZW5kZXJidWZmZXIoKSk7cmV0dXJuIHVbYy5pZF09YyxuLnJlbmRlcmJ1ZmZlckNvdW50KyssbyhlLHIpLG8ucmVzaXplPWZ1bmN0aW9uKGUscil7dmFyIG49MHxlLGk9MHxyfHxuO3JldHVybiBuPT09Yy53aWR0aCYmaT09PWMuaGVpZ2h0P286KG8ud2lkdGg9Yy53aWR0aD1uLG8uaGVpZ2h0PWMuaGVpZ2h0PWksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGMucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsYy5mb3JtYXQsbixpKSxhLnByb2ZpbGUmJihjLnN0YXRzLnNpemU9dnRbYy5mb3JtYXRdKmMud2lkdGgqYy5oZWlnaHQpLG8pfSxvLl9yZWdsVHlwZT0icmVuZGVyYnVmZmVyIixvLl9yZW5kZXJidWZmZXI9YyxhLnByb2ZpbGUmJihvLnN0YXRzPWMuc3RhdHMpLG8uZGVzdHJveT1mdW5jdGlvbigpe2MuZGVjUmVmKCl9LG99LGNsZWFyOmZ1bmN0aW9uKCl7WCh1KS5mb3JFYWNoKG8pfSxyZXN0b3JlOmZ1bmN0aW9uKCl7WCh1KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVuZGVyYnVmZmVyPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGUucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsZS5mb3JtYXQsZS53aWR0aCxlLmhlaWdodCl9KSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCl9fX0seXQ9W107eXRbNjQwOF09NCx5dFs2NDA3XT0zO3ZhciB4dD1bXTt4dFs1MTIxXT0xLHh0WzUxMjZdPTQseHRbMzYxOTNdPTI7dmFyIGJ0PVsieCIsInkiLCJ6IiwidyJdLF90PSJibGVuZC5mdW5jIGJsZW5kLmVxdWF0aW9uIHN0ZW5jaWwuZnVuYyBzdGVuY2lsLm9wRnJvbnQgc3RlbmNpbC5vcEJhY2sgc2FtcGxlLmNvdmVyYWdlIHZpZXdwb3J0IHNjaXNzb3IuYm94IHBvbHlnb25PZmZzZXQub2Zmc2V0Ii5zcGxpdCgiICIpLHd0PXswOjAsMToxLHplcm86MCxvbmU6MSwic3JjIGNvbG9yIjo3NjgsIm9uZSBtaW51cyBzcmMgY29sb3IiOjc2OSwic3JjIGFscGhhIjo3NzAsIm9uZSBtaW51cyBzcmMgYWxwaGEiOjc3MSwiZHN0IGNvbG9yIjo3NzQsIm9uZSBtaW51cyBkc3QgY29sb3IiOjc3NSwiZHN0IGFscGhhIjo3NzIsIm9uZSBtaW51cyBkc3QgYWxwaGEiOjc3MywiY29uc3RhbnQgY29sb3IiOjMyNzY5LCJvbmUgbWludXMgY29uc3RhbnQgY29sb3IiOjMyNzcwLCJjb25zdGFudCBhbHBoYSI6MzI3NzEsIm9uZSBtaW51cyBjb25zdGFudCBhbHBoYSI6MzI3NzIsInNyYyBhbHBoYSBzYXR1cmF0ZSI6Nzc2fSxrdD17bmV2ZXI6NTEyLGxlc3M6NTEzLCI8Ijo1MTMsZXF1YWw6NTE0LCI9Ijo1MTQsIj09Ijo1MTQsIj09PSI6NTE0LGxlcXVhbDo1MTUsIjw9Ijo1MTUsZ3JlYXRlcjo1MTYsIj4iOjUxNixub3RlcXVhbDo1MTcsIiE9Ijo1MTcsIiE9PSI6NTE3LGdlcXVhbDo1MTgsIj49Ijo1MTgsYWx3YXlzOjUxOX0sVHQ9ezA6MCx6ZXJvOjAsa2VlcDo3NjgwLHJlcGxhY2U6NzY4MSxpbmNyZW1lbnQ6NzY4MixkZWNyZW1lbnQ6NzY4MywiaW5jcmVtZW50IHdyYXAiOjM0MDU1LCJkZWNyZW1lbnQgd3JhcCI6MzQwNTYsaW52ZXJ0OjUzODZ9LE10PXtjdzoyMzA0LGNjdzoyMzA1fSxBdD1uZXcgSSghMSwhMSwhMSxmdW5jdGlvbigpe30pO3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7aWYoMD09PVoubGVuZ3RoKXcmJncudXBkYXRlKCksJD1udWxsO2Vsc2V7JD1xLm5leHQoZSksaCgpO2Zvcih2YXIgdD1aLmxlbmd0aC0xOzA8PXQ7LS10KXt2YXIgcj1aW3RdO3ImJnIoUCxudWxsLDApfXYuZmx1c2goKSx3JiZ3LnVwZGF0ZSgpfX1mdW5jdGlvbiByKCl7ISQmJjA8Wi5sZW5ndGgmJigkPXEubmV4dChlKSl9ZnVuY3Rpb24gbigpeyQmJihxLmNhbmNlbChlKSwkPW51bGwpfWZ1bmN0aW9uIGkodCl7dC5wcmV2ZW50RGVmYXVsdCgpLG4oKSxKLmZvckVhY2goZnVuY3Rpb24odCl7dCgpfSl9ZnVuY3Rpb24gbyh0KXt2LmdldEVycm9yKCkseS5yZXN0b3JlKCksRC5yZXN0b3JlKCksei5yZXN0b3JlKCksUi5yZXN0b3JlKCksRi5yZXN0b3JlKCksVi5yZXN0b3JlKCksdyYmdy5yZXN0b3JlKCksRy5wcm9jcy5yZWZyZXNoKCkscigpLEsuZm9yRWFjaChmdW5jdGlvbih0KXt0KCl9KX1mdW5jdGlvbiBzKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGU9e30scj17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgYT10W25dO1UuaXNEeW5hbWljKGEpP3Jbbl09VS51bmJveChhLG4pOmVbbl09YX0pLHtkeW5hbWljOnIsc3RhdGljOmV9fXZhciByPWUodC5jb250ZXh0fHx7fSksbj1lKHQudW5pZm9ybXN8fHt9KSxhPWUodC5hdHRyaWJ1dGVzfHx7fSksaT1lKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7aWYodCBpbiByKXt2YXIgZT1yW3RdO2RlbGV0ZSByW3RdLE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24obil7clt0KyIuIituXT1lW25dfSl9fXZhciByPWooe30sdCk7cmV0dXJuIGRlbGV0ZSByLnVuaWZvcm1zLGRlbGV0ZSByLmF0dHJpYnV0ZXMsZGVsZXRlIHIuY29udGV4dCwic3RlbmNpbCJpbiByJiZyLnN0ZW5jaWwub3AmJihyLnN0ZW5jaWwub3BCYWNrPXIuc3RlbmNpbC5vcEZyb250PXIuc3RlbmNpbC5vcCxkZWxldGUgci5zdGVuY2lsLm9wKSxlKCJibGVuZCIpLGUoImRlcHRoIiksZSgiY3VsbCIpLGUoInN0ZW5jaWwiKSxlKCJwb2x5Z29uT2Zmc2V0IiksZSgic2Npc3NvciIpLGUoInNhbXBsZSIpLHJ9KHQpKTt0PXtncHVUaW1lOjAsY3B1VGltZTowLGNvdW50OjB9O3ZhciBvPShyPUcuY29tcGlsZShpLGEsbixyLHQpKS5kcmF3LHM9ci5iYXRjaCxsPXIuc2NvcGUsYz1bXTtyZXR1cm4gaihmdW5jdGlvbih0LGUpe3ZhciByO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBsLmNhbGwodGhpcyxudWxsLHQsMCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpaWYoIm51bWJlciI9PXR5cGVvZiB0KWZvcihyPTA7cjx0OysrcilsLmNhbGwodGhpcyxudWxsLGUscik7ZWxzZXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gbC5jYWxsKHRoaXMsdCxlLDApO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3IpbC5jYWxsKHRoaXMsdFtyXSxlLHIpfWVsc2UgaWYoIm51bWJlciI9PXR5cGVvZiB0KXtpZigwPHQpcmV0dXJuIHMuY2FsbCh0aGlzLGZ1bmN0aW9uKHQpe2Zvcig7Yy5sZW5ndGg8dDspYy5wdXNoKG51bGwpO3JldHVybiBjfSgwfHQpLDB8dCl9ZWxzZXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gby5jYWxsKHRoaXMsdCk7aWYodC5sZW5ndGgpcmV0dXJuIHMuY2FsbCh0aGlzLHQsdC5sZW5ndGgpfX0se3N0YXRzOnR9KX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9MDtHLnByb2NzLnBvbGwoKTt2YXIgbj1lLmNvbG9yO24mJih2LmNsZWFyQ29sb3IoK25bMF18fDAsK25bMV18fDAsK25bMl18fDAsK25bM118fDApLHJ8PTE2Mzg0KSwiZGVwdGgiaW4gZSYmKHYuY2xlYXJEZXB0aCgrZS5kZXB0aCkscnw9MjU2KSwic3RlbmNpbCJpbiBlJiYodi5jbGVhclN0ZW5jaWwoMHxlLnN0ZW5jaWwpLHJ8PTEwMjQpLHYuY2xlYXIocil9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gWi5wdXNoKHQpLHIoKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7dmFyIGU9TihaLHQpO1pbZV09ZnVuY3Rpb24gdCgpe3ZhciBlPU4oWix0KTtaW2VdPVpbWi5sZW5ndGgtMV0sLS1aLmxlbmd0aCwwPj1aLmxlbmd0aCYmbigpfX19fWZ1bmN0aW9uIHUoKXt2YXIgdD1XLnZpZXdwb3J0LGU9Vy5zY2lzc29yX2JveDt0WzBdPXRbMV09ZVswXT1lWzFdPTAsUC52aWV3cG9ydFdpZHRoPVAuZnJhbWVidWZmZXJXaWR0aD1QLmRyYXdpbmdCdWZmZXJXaWR0aD10WzJdPWVbMl09di5kcmF3aW5nQnVmZmVyV2lkdGgsUC52aWV3cG9ydEhlaWdodD1QLmZyYW1lYnVmZmVySGVpZ2h0PVAuZHJhd2luZ0J1ZmZlckhlaWdodD10WzNdPWVbM109di5kcmF3aW5nQnVmZmVySGVpZ2h0fWZ1bmN0aW9uIGgoKXtQLnRpY2srPTEsUC50aW1lPWcoKSx1KCksRy5wcm9jcy5wb2xsKCl9ZnVuY3Rpb24gZigpe3UoKSxHLnByb2NzLnJlZnJlc2goKSx3JiZ3LnVwZGF0ZSgpfWZ1bmN0aW9uIGcoKXtyZXR1cm4oSCgpLWspLzFlM31pZighKHQ9YSh0KSkpcmV0dXJuIG51bGw7dmFyIHY9dC5nbCxtPXYuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTt2LmlzQ29udGV4dExvc3QoKTt2YXIgeT1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoZSl7dmFyIHI7ZT1lLnRvTG93ZXJDYXNlKCk7dHJ5e3I9bltlXT10LmdldEV4dGVuc2lvbihlKX1jYXRjaCh0KXt9cmV0dXJuISFyfWZvcih2YXIgbj17fSxhPTA7YTxlLmV4dGVuc2lvbnMubGVuZ3RoOysrYSl7dmFyIGk9ZS5leHRlbnNpb25zW2FdO2lmKCFyKGkpKXJldHVybiBlLm9uRGVzdHJveSgpLGUub25Eb25lKCciJytpKyciIGV4dGVuc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IFdlYkdMIGNvbnRleHQsIHRyeSB1cGdyYWRpbmcgeW91ciBzeXN0ZW0gb3IgYSBkaWZmZXJlbnQgYnJvd3NlcicpLG51bGx9cmV0dXJuIGUub3B0aW9uYWxFeHRlbnNpb25zLmZvckVhY2gocikse2V4dGVuc2lvbnM6bixyZXN0b3JlOmZ1bmN0aW9uKCl7T2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbih0KXtpZihuW3RdJiYhcih0KSl0aHJvdyBFcnJvcigiKHJlZ2wpOiBlcnJvciByZXN0b3JpbmcgZXh0ZW5zaW9uICIrdCl9KX19fSh2LHQpO2lmKCF5KXJldHVybiBudWxsO3ZhciB4PWZ1bmN0aW9uKCl7dmFyIHQ9eyIiOjB9LGU9WyIiXTtyZXR1cm57aWQ6ZnVuY3Rpb24ocil7dmFyIG49dFtyXTtyZXR1cm4gbnx8KG49dFtyXT1lLmxlbmd0aCxlLnB1c2gociksbil9LHN0cjpmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX19fSgpLGI9e2J1ZmZlckNvdW50OjAsZWxlbWVudHNDb3VudDowLGZyYW1lYnVmZmVyQ291bnQ6MCxzaGFkZXJDb3VudDowLHRleHR1cmVDb3VudDowLGN1YmVDb3VudDowLHJlbmRlcmJ1ZmZlckNvdW50OjAsbWF4VGV4dHVyZVVuaXRzOjB9LF89eS5leHRlbnNpb25zLHc9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7dGhpcy5lbmRRdWVyeUluZGV4PXRoaXMuc3RhcnRRdWVyeUluZGV4PS0xLHRoaXMuc3VtPTAsdGhpcy5zdGF0cz1udWxsfWZ1bmN0aW9uIG4odCxlLG4pe3ZhciBhPW8ucG9wKCl8fG5ldyByO2Euc3RhcnRRdWVyeUluZGV4PXQsYS5lbmRRdWVyeUluZGV4PWUsYS5zdW09MCxhLnN0YXRzPW4scy5wdXNoKGEpfWlmKCFlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeSlyZXR1cm4gbnVsbDt2YXIgYT1bXSxpPVtdLG89W10scz1bXSxsPVtdLGM9W107cmV0dXJue2JlZ2luUXVlcnk6ZnVuY3Rpb24odCl7dmFyIHI9YS5wb3AoKXx8ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuY3JlYXRlUXVlcnlFWFQoKTtlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5iZWdpblF1ZXJ5RVhUKDM1MDA3LHIpLGkucHVzaChyKSxuKGkubGVuZ3RoLTEsaS5sZW5ndGgsdCl9LGVuZFF1ZXJ5OmZ1bmN0aW9uKCl7ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZW5kUXVlcnlFWFQoMzUwMDcpfSxwdXNoU2NvcGVTdGF0czpuLHVwZGF0ZTpmdW5jdGlvbigpe3ZhciB0LHI7aWYoMCE9PSh0PWkubGVuZ3RoKSl7Yy5sZW5ndGg9TWF0aC5tYXgoYy5sZW5ndGgsdCsxKSxsLmxlbmd0aD1NYXRoLm1heChsLmxlbmd0aCx0KzEpLGxbMF09MDt2YXIgbj1jWzBdPTA7Zm9yKHI9dD0wO3I8aS5sZW5ndGg7KytyKXt2YXIgdT1pW3JdO2UuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKHUsMzQ5MTkpPyhuKz1lLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5nZXRRdWVyeU9iamVjdEVYVCh1LDM0OTE4KSxhLnB1c2godSkpOmlbdCsrXT11LGxbcisxXT1uLGNbcisxXT10fWZvcihpLmxlbmd0aD10LHI9dD0wO3I8cy5sZW5ndGg7KytyKXt2YXIgaD0obj1zW3JdKS5zdGFydFF1ZXJ5SW5kZXg7dT1uLmVuZFF1ZXJ5SW5kZXgsbi5zdW0rPWxbdV0tbFtoXSxoPWNbaF0sKHU9Y1t1XSk9PT1oPyhuLnN0YXRzLmdwdVRpbWUrPW4uc3VtLzFlNixvLnB1c2gobikpOihuLnN0YXJ0UXVlcnlJbmRleD1oLG4uZW5kUXVlcnlJbmRleD11LHNbdCsrXT1uKX1zLmxlbmd0aD10fX0sZ2V0TnVtUGVuZGluZ1F1ZXJpZXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5sZW5ndGh9LGNsZWFyOmZ1bmN0aW9uKCl7YS5wdXNoLmFwcGx5KGEsaSk7Zm9yKHZhciB0PTA7dDxhLmxlbmd0aDt0KyspZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZGVsZXRlUXVlcnlFWFQoYVt0XSk7aS5sZW5ndGg9MCxhLmxlbmd0aD0wfSxyZXN0b3JlOmZ1bmN0aW9uKCl7aS5sZW5ndGg9MCxhLmxlbmd0aD0wfX19KDAsXyksaz1IKCksTD12LmRyYXdpbmdCdWZmZXJXaWR0aCxDPXYuZHJhd2luZ0J1ZmZlckhlaWdodCxQPXt0aWNrOjAsdGltZTowLHZpZXdwb3J0V2lkdGg6TCx2aWV3cG9ydEhlaWdodDpDLGZyYW1lYnVmZmVyV2lkdGg6TCxmcmFtZWJ1ZmZlckhlaWdodDpDLGRyYXdpbmdCdWZmZXJXaWR0aDpMLGRyYXdpbmdCdWZmZXJIZWlnaHQ6QyxwaXhlbFJhdGlvOnQucGl4ZWxSYXRpb30sTz1ZKHYsXyksej0oTD1mdW5jdGlvbih0LGUscixuKXtmb3IodD1yLm1heEF0dHJpYnV0ZXMsZT1BcnJheSh0KSxyPTA7cjx0OysrcillW3JdPW5ldyBBO3JldHVybntSZWNvcmQ6QSxzY29wZTp7fSxzdGF0ZTplfX0odixfLE8pLHAodixiLHQsTCkpLEk9ZCh2LF8seixiKSxEPVModix4LGIsdCksUj1UKHYsXyxPLGZ1bmN0aW9uKCl7Ry5wcm9jcy5wb2xsKCl9LFAsYix0KSxGPW10KHYsXywwLGIsdCksVj1NKHYsXyxPLFIsRixiKSxHPUIodix4LF8sTyx6LEksMCxWLHt9LEwsRCx7ZWxlbWVudHM6bnVsbCxwcmltaXRpdmU6NCxjb3VudDotMSxvZmZzZXQ6MCxpbnN0YW5jZXM6LTF9LFAsdyx0KSxXPSh4PUUodixWLEcucHJvY3MucG9sbCxQKSxHLm5leHQpLFg9di5jYW52YXMsWj1bXSxKPVtdLEs9W10sUT1bdC5vbkRlc3Ryb3ldLCQ9bnVsbDtYJiYoWC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixpLCExKSxYLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixvLCExKSk7dmFyIHR0PVYuc2V0RkJPPXMoe2ZyYW1lYnVmZmVyOlUuZGVmaW5lLmNhbGwobnVsbCwxLCJmcmFtZWJ1ZmZlciIpfSk7cmV0dXJuIGYoKSxtPWoocyx7Y2xlYXI6ZnVuY3Rpb24odCl7aWYoImZyYW1lYnVmZmVyImluIHQpaWYodC5mcmFtZWJ1ZmZlciYmImZyYW1lYnVmZmVyQ3ViZSI9PT10LmZyYW1lYnVmZmVyX3JlZ2xUeXBlKWZvcih2YXIgZT0wOzY+ZTsrK2UpdHQoaih7ZnJhbWVidWZmZXI6dC5mcmFtZWJ1ZmZlci5mYWNlc1tlXX0sdCksbCk7ZWxzZSB0dCh0LGwpO2Vsc2UgbCgwLHQpfSxwcm9wOlUuZGVmaW5lLmJpbmQobnVsbCwxKSxjb250ZXh0OlUuZGVmaW5lLmJpbmQobnVsbCwyKSx0aGlzOlUuZGVmaW5lLmJpbmQobnVsbCwzKSxkcmF3OnMoe30pLGJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gei5jcmVhdGUodCwzNDk2MiwhMSwhMSl9LGVsZW1lbnRzOmZ1bmN0aW9uKHQpe3JldHVybiBJLmNyZWF0ZSh0LCExKX0sdGV4dHVyZTpSLmNyZWF0ZTJELGN1YmU6Ui5jcmVhdGVDdWJlLHJlbmRlcmJ1ZmZlcjpGLmNyZWF0ZSxmcmFtZWJ1ZmZlcjpWLmNyZWF0ZSxmcmFtZWJ1ZmZlckN1YmU6Vi5jcmVhdGVDdWJlLGF0dHJpYnV0ZXM6bSxmcmFtZTpjLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI7c3dpdGNoKHQpe2Nhc2UiZnJhbWUiOnJldHVybiBjKGUpO2Nhc2UibG9zdCI6cj1KO2JyZWFrO2Nhc2UicmVzdG9yZSI6cj1LO2JyZWFrO2Nhc2UiZGVzdHJveSI6cj1RfXJldHVybiByLnB1c2goZSkse2NhbmNlbDpmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ci5sZW5ndGg7Kyt0KWlmKHJbdF09PT1lKXtyW3RdPXJbci5sZW5ndGgtMV0sci5wb3AoKTticmVha319fX0sbGltaXRzOk8saGFzRXh0ZW5zaW9uOmZ1bmN0aW9uKHQpe3JldHVybiAwPD1PLmV4dGVuc2lvbnMuaW5kZXhPZih0LnRvTG93ZXJDYXNlKCkpfSxyZWFkOngsZGVzdHJveTpmdW5jdGlvbigpe1oubGVuZ3RoPTAsbigpLFgmJihYLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGkpLFgucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLG8pKSxELmNsZWFyKCksVi5jbGVhcigpLEYuY2xlYXIoKSxSLmNsZWFyKCksSS5jbGVhcigpLHouY2xlYXIoKSx3JiZ3LmNsZWFyKCksUS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QoKX0pfSxfZ2w6dixfcmVmcmVzaDpmLHBvbGw6ZnVuY3Rpb24oKXtoKCksdyYmdy51cGRhdGUoKX0sbm93Omcsc3RhdHM6Yn0pLHQub25Eb25lKG51bGwsbSksbX19LCJvYmplY3QiPT10eXBlb2YgciYmInVuZGVmaW5lZCIhPXR5cGVvZiBlP2UuZXhwb3J0cz1hKCk6bi5jcmVhdGVSRUdMPWEoKX0se31dLDUwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhPSIiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJleHBlY3RlZCBhIHN0cmluZyIpO2lmKDE9PT1lKXJldHVybiB0O2lmKDI9PT1lKXJldHVybiB0K3Q7dmFyIHI9dC5sZW5ndGgqZTtpZihuIT09dHx8InVuZGVmaW5lZCI9PXR5cGVvZiBuKW49dCxhPSIiO2Vsc2UgaWYoYS5sZW5ndGg+PXIpcmV0dXJuIGEuc3Vic3RyKDAscik7Zm9yKDtyPmEubGVuZ3RoJiZlPjE7KTEmZSYmKGErPXQpLGU+Pj0xLHQrPXQ7cmV0dXJuIGE9KGErPXQpLnN1YnN0cigwLHIpfX0se31dLDUwMzpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtlLmV4cG9ydHM9dC5wZXJmb3JtYW5jZSYmdC5wZXJmb3JtYW5jZS5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OkRhdGUubm93fHxmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSw1MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPXRbdC5sZW5ndGgtMV0sbj1lLGE9ZS0yO2E+PTA7LS1hKXt2YXIgaT1yLG89dFthXSxzPShyPWkrbyktaSxsPW8tcztsJiYodFstLW5dPXIscj1sKX1mb3IodmFyIGM9MCxhPW47YTxlOysrYSl7dmFyIGk9dFthXSxvPXIscz0ocj1pK28pLWksbD1vLXM7bCYmKHRbYysrXT1sKX1yZXR1cm4gdFtjKytdPXIsdC5sZW5ndGg9Yyx0fX0se31dLDUwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGE9dCgicm9idXN0LXN1bSIpLGk9dCgicm9idXN0LXNjYWxlIiksbz10KCJyb2J1c3QtY29tcHJlc3MiKSxzPTY7ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgtMSksbj0xO248dC5sZW5ndGg7KytuKWZvcih2YXIgYT1yW24tMV09bmV3IEFycmF5KHQubGVuZ3RoLTEpLGk9MCxvPTA7aTx0Lmxlbmd0aDsrK2kpaSE9PWUmJihhW28rK109dFtuXVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKXtlW3JdPW5ldyBBcnJheSh0KTtmb3IodmFyIG49MDtuPHQ7KytuKWVbcl1bbl09WyJtWyIsciwiXVsiLG4sIl0iXS5qb2luKCIiKX1yZXR1cm4gZX1mdW5jdGlvbiB1KHQpe2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bInN1bShwcm9kKCIsdFswXVswXSwiLCIsdFsxXVsxXSwiKSxwcm9kKC0iLHRbMF1bMV0sIiwiLHRbMV1bMF0sIikpIl0uam9pbigiIik7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goWyJzY2FsZSgiLHUobCh0LHIpKSwiLCIsKG49ciwxJm4/Ii0iOiIiKSx0WzBdW3JdLCIpIl0uam9pbigiIikpO3JldHVybiBmdW5jdGlvbiB0KGUpe2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gZVswXTtpZigyPT09ZS5sZW5ndGgpcmV0dXJuWyJzdW0oIixlWzBdLCIsIixlWzFdLCIpIl0uam9pbigiIik7dmFyIHI9ZS5sZW5ndGg+PjE7cmV0dXJuWyJzdW0oIix0KGUuc2xpY2UoMCxyKSksIiwiLHQoZS5zbGljZShyKSksIikiXS5qb2luKCIiKX0oZSk7dmFyIG59ZnVuY3Rpb24gaCh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzdW0iLCJzY2FsZSIsInByb2QiLCJjb21wcmVzcyIsWyJmdW5jdGlvbiByb2J1c3REZXRlcm1pbmFudCIsdCwiKG0pe3JldHVybiBjb21wcmVzcygiLHUoYyh0KSksIil9O3JldHVybiByb2J1c3REZXRlcm1pbmFudCIsdF0uam9pbigiIikpKGEsaSxuLG8pfXZhciBmPVtmdW5jdGlvbigpe3JldHVyblswXX0sZnVuY3Rpb24odCl7cmV0dXJuW3RbMF1bMF1dfV07IWZ1bmN0aW9uKCl7Zm9yKDtmLmxlbmd0aDxzOylmLnB1c2goaChmLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVsiZnVuY3Rpb24gcm9idXN0RGV0ZXJtaW5hbnQobSl7c3dpdGNoKG0ubGVuZ3RoKXsiXSxuPTA7bjxzOysrbil0LnB1c2goImRldCIrbiksci5wdXNoKCJjYXNlICIsbiwiOnJldHVybiBkZXQiLG4sIihtKTsiKTtyLnB1c2goIn12YXIgZGV0PUNBQ0hFW20ubGVuZ3RoXTtpZighZGV0KWRldD1DQUNIRVttLmxlbmd0aF09Z2VuKG0ubGVuZ3RoKTtyZXR1cm4gZGV0KG0pO31yZXR1cm4gcm9idXN0RGV0ZXJtaW5hbnQiKSx0LnB1c2goIkNBQ0hFIiwiZ2VuIixyLmpvaW4oIiIpKTt2YXIgYT1GdW5jdGlvbi5hcHBseSh2b2lkIDAsdCk7Zm9yKGUuZXhwb3J0cz1hLmFwcGx5KHZvaWQgMCxmLmNvbmNhdChbZixoXSkpLG49MDtuPGYubGVuZ3RoOysrbillLmV4cG9ydHNbbl09ZltuXX0oKX0seyJyb2J1c3QtY29tcHJlc3MiOjUwNCwicm9idXN0LXNjYWxlIjo1MTEsInJvYnVzdC1zdW0iOjUxNCwidHdvLXByb2R1Y3QiOjU0Mn1dLDUwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGE9dCgicm9idXN0LXN1bSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uKHRbMF0sZVswXSksaT0xO2k8dC5sZW5ndGg7KytpKXI9YShyLG4odFtpXSxlW2ldKSk7cmV0dXJuIHJ9fSx7InJvYnVzdC1zdW0iOjUxNCwidHdvLXByb2R1Y3QiOjU0Mn1dLDUwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGE9dCgicm9idXN0LXN1bSIpLGk9dCgicm9idXN0LXN1YnRyYWN0Iiksbz10KCJyb2J1c3Qtc2NhbGUiKSxzPTY7ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgtMSksbj0xO248dC5sZW5ndGg7KytuKWZvcih2YXIgYT1yW24tMV09bmV3IEFycmF5KHQubGVuZ3RoLTEpLGk9MCxvPTA7aTx0Lmxlbmd0aDsrK2kpaSE9PWUmJihhW28rK109dFtuXVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIHRbMF07aWYoMj09PXQubGVuZ3RoKXJldHVyblsic3VtKCIsdFswXSwiLCIsdFsxXSwiKSJdLmpvaW4oIiIpO3ZhciBlPXQubGVuZ3RoPj4xO3JldHVyblsic3VtKCIsYyh0LnNsaWNlKDAsZSkpLCIsIixjKHQuc2xpY2UoZSkpLCIpIl0uam9pbigiIil9ZnVuY3Rpb24gdSh0LGUpe2lmKCJtIj09PXQuY2hhckF0KDApKXtpZigidyI9PT1lLmNoYXJBdCgwKSl7dmFyIHI9dC5zcGxpdCgiWyIpO3JldHVyblsidyIsZS5zdWJzdHIoMSksIm0iLHJbMF0uc3Vic3RyKDEpXS5qb2luKCIiKX1yZXR1cm5bInByb2QoIix0LCIsIixlLCIpIl0uam9pbigiIil9cmV0dXJuIHUoZSx0KX1mdW5jdGlvbiBoKHQpe2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bWyJkaWZmKCIsdSh0WzBdWzBdLHRbMV1bMV0pLCIsIix1KHRbMV1bMF0sdFswXVsxXSksIikiXS5qb2luKCIiKV07Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goWyJzY2FsZSgiLGMoaChsKHQscikpKSwiLCIsKG49ciwhMCZuPyItIjoiIiksdFswXVtyXSwiKSJdLmpvaW4oIiIpKTtyZXR1cm4gZTt2YXIgbn1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPGUtMjsrK24pci5wdXNoKFsicHJvZChtIix0LCJbIixuLCJdLG0iLHQsIlsiLG4sIl0pIl0uam9pbigiIikpO3JldHVybiBjKHIpfWZ1bmN0aW9uIHAodCl7Zm9yKHZhciBlPVtdLHI9W10scz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKXtlW3JdPW5ldyBBcnJheSh0KTtmb3IodmFyIG49MDtuPHQ7KytuKWVbcl1bbl09WyJtIixuLCJbIix0LXItMiwiXSJdLmpvaW4oIiIpfXJldHVybiBlfSh0KSx1PTA7dTx0OysrdSlzWzBdW3VdPSIxIixzW3QtMV1bdV09InciK3U7Zm9yKHU9MDt1PHQ7Kyt1KTA9PSgxJnUpP2UucHVzaC5hcHBseShlLGgobChzLHUpKSk6ci5wdXNoLmFwcGx5KHIsaChsKHMsdSkpKTt2YXIgcD1jKGUpLGQ9YyhyKSxnPSJleGFjdEluU3BoZXJlIit0LHY9W107Zm9yKHU9MDt1PHQ7Kyt1KXYucHVzaCgibSIrdSk7dmFyIG09WyJmdW5jdGlvbiAiLGcsIigiLHYuam9pbigpLCIpeyJdO2Zvcih1PTA7dTx0OysrdSl7bS5wdXNoKCJ2YXIgdyIsdSwiPSIsZih1LHQpLCI7Iik7Zm9yKHZhciB5PTA7eTx0OysreSl5IT09dSYmbS5wdXNoKCJ2YXIgdyIsdSwibSIseSwiPXNjYWxlKHciLHUsIixtIix5LCJbMF0pOyIpfXJldHVybiBtLnB1c2goInZhciBwPSIscCwiLG49IixkLCIsZD1kaWZmKHAsbik7cmV0dXJuIGRbZC5sZW5ndGgtMV07fXJldHVybiAiLGcpLG5ldyBGdW5jdGlvbigic3VtIiwiZGlmZiIsInByb2QiLCJzY2FsZSIsbS5qb2luKCIiKSkoYSxpLG4sbyl9dmFyIGQ9W2Z1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9XTtmdW5jdGlvbiBnKHQpe3ZhciBlPWRbdC5sZW5ndGhdO3JldHVybiBlfHwoZT1kW3QubGVuZ3RoXT1wKHQubGVuZ3RoKSksZS5hcHBseSh2b2lkIDAsdCl9IWZ1bmN0aW9uKCl7Zm9yKDtkLmxlbmd0aDw9czspZC5wdXNoKHAoZC5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bInNsb3ciXSxuPTA7bjw9czsrK24pdC5wdXNoKCJhIituKSxyLnB1c2goIm8iK24pO3ZhciBhPVsiZnVuY3Rpb24gdGVzdEluU3BoZXJlKCIsdC5qb2luKCksIil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Il07Zm9yKG49MjtuPD1zOysrbilhLnB1c2goImNhc2UgIixuLCI6cmV0dXJuIG8iLG4sIigiLHQuc2xpY2UoMCxuKS5qb2luKCksIik7Iik7YS5wdXNoKCJ9dmFyIHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDsrK2kpe3NbaV09YXJndW1lbnRzW2ldfTtyZXR1cm4gc2xvdyhzKTt9cmV0dXJuIHRlc3RJblNwaGVyZSIpLHIucHVzaChhLmpvaW4oIiIpKTt2YXIgaT1GdW5jdGlvbi5hcHBseSh2b2lkIDAscik7Zm9yKGUuZXhwb3J0cz1pLmFwcGx5KHZvaWQgMCxbZ10uY29uY2F0KGQpKSxuPTA7bjw9czsrK24pZS5leHBvcnRzW25dPWRbbl19KCl9LHsicm9idXN0LXNjYWxlIjo1MTEsInJvYnVzdC1zdWJ0cmFjdCI6NTEzLCJyb2J1c3Qtc3VtIjo1MTQsInR3by1wcm9kdWN0Ijo1NDJ9XSw1MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicm9idXN0LWRldGVybWluYW50IiksYT02O2Z1bmN0aW9uIGkodCl7Zm9yKHZhciBlPSJyb2J1c3RMaW5lYXJTb2x2ZSIrdCsiZCIscj1bImZ1bmN0aW9uICIsZSwiKEEsYil7cmV0dXJuIFsiXSxhPTA7YTx0OysrYSl7ci5wdXNoKCJkZXQoWyIpO2Zvcih2YXIgaT0wO2k8dDsrK2kpe2k+MCYmci5wdXNoKCIsIiksci5wdXNoKCJbIik7Zm9yKHZhciBvPTA7bzx0OysrbylvPjAmJnIucHVzaCgiLCIpLG89PT1hP3IucHVzaCgiK2JbIixpLCJdIik6ci5wdXNoKCIrQVsiLGksIl1bIixvLCJdIik7ci5wdXNoKCJdIil9ci5wdXNoKCJdKSwiKX1yLnB1c2goImRldChBKV19cmV0dXJuICIsZSk7dmFyIHM9bmV3IEZ1bmN0aW9uKCJkZXQiLHIuam9pbigiIikpO3JldHVybiBzKHQ8Nj9uW3RdOm4pfXZhciBvPVtmdW5jdGlvbigpe3JldHVyblswXX0sZnVuY3Rpb24odCxlKXtyZXR1cm5bW2VbMF1dLFt0WzBdWzBdXV19XTshZnVuY3Rpb24oKXtmb3IoO28ubGVuZ3RoPGE7KW8ucHVzaChpKG8ubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9WyJmdW5jdGlvbiBkaXNwYXRjaExpbmVhclNvbHZlKEEsYil7c3dpdGNoKEEubGVuZ3RoKXsiXSxuPTA7bjxhOysrbil0LnB1c2goInMiK24pLHIucHVzaCgiY2FzZSAiLG4sIjpyZXR1cm4gcyIsbiwiKEEsYik7Iik7ci5wdXNoKCJ9dmFyIHM9Q0FDSEVbQS5sZW5ndGhdO2lmKCFzKXM9Q0FDSEVbQS5sZW5ndGhdPWcoQS5sZW5ndGgpO3JldHVybiBzKEEsYil9cmV0dXJuIGRpc3BhdGNoTGluZWFyU29sdmUiKSx0LnB1c2goIkNBQ0hFIiwiZyIsci5qb2luKCIiKSk7dmFyIHM9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHQpO2ZvcihlLmV4cG9ydHM9cy5hcHBseSh2b2lkIDAsby5jb25jYXQoW28saV0pKSxuPTA7bjxhOysrbillLmV4cG9ydHNbbl09b1tuXX0oKX0seyJyb2J1c3QtZGV0ZXJtaW5hbnQiOjUwNX1dLDUwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGE9dCgicm9idXN0LXN1bSIpLGk9dCgicm9idXN0LXNjYWxlIiksbz10KCJyb2J1c3Qtc3VidHJhY3QiKSxzPTU7ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgtMSksbj0xO248dC5sZW5ndGg7KytuKWZvcih2YXIgYT1yW24tMV09bmV3IEFycmF5KHQubGVuZ3RoLTEpLGk9MCxvPTA7aTx0Lmxlbmd0aDsrK2kpaSE9PWUmJihhW28rK109dFtuXVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIHRbMF07aWYoMj09PXQubGVuZ3RoKXJldHVyblsic3VtKCIsdFswXSwiLCIsdFsxXSwiKSJdLmpvaW4oIiIpO3ZhciBlPXQubGVuZ3RoPj4xO3JldHVyblsic3VtKCIsYyh0LnNsaWNlKDAsZSkpLCIsIixjKHQuc2xpY2UoZSkpLCIpIl0uam9pbigiIil9ZnVuY3Rpb24gdSh0KXtpZigyPT09dC5sZW5ndGgpcmV0dXJuW1sic3VtKHByb2QoIix0WzBdWzBdLCIsIix0WzFdWzFdLCIpLHByb2QoLSIsdFswXVsxXSwiLCIsdFsxXVswXSwiKSkiXS5qb2luKCIiKV07Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goWyJzY2FsZSgiLGModShsKHQscikpKSwiLCIsKG49ciwxJm4/Ii0iOiIiKSx0WzBdW3JdLCIpIl0uam9pbigiIikpO3JldHVybiBlO3ZhciBufWZ1bmN0aW9uIGgodCl7Zm9yKHZhciBlPVtdLHI9W10scz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKXtlW3JdPW5ldyBBcnJheSh0KTtmb3IodmFyIG49MDtuPHQ7KytuKWVbcl1bbl09WyJtIixuLCJbIix0LXItMSwiXSJdLmpvaW4oIiIpfXJldHVybiBlfSh0KSxoPVtdLGY9MDtmPHQ7KytmKTA9PSgxJmYpP2UucHVzaC5hcHBseShlLHUobChzLGYpKSk6ci5wdXNoLmFwcGx5KHIsdShsKHMsZikpKSxoLnB1c2goIm0iK2YpO3ZhciBwPWMoZSksZD1jKHIpLGc9Im9yaWVudGF0aW9uIit0KyJFeGFjdCIsdj1bImZ1bmN0aW9uICIsZywiKCIsaC5qb2luKCksIil7dmFyIHA9IixwLCIsbj0iLGQsIixkPXN1YihwLG4pO3JldHVybiBkW2QubGVuZ3RoLTFdO307cmV0dXJuICIsZ10uam9pbigiIik7cmV0dXJuIG5ldyBGdW5jdGlvbigic3VtIiwicHJvZCIsInNjYWxlIiwic3ViIix2KShhLG4saSxvKX12YXIgZj1oKDMpLHA9aCg0KSxkPVtmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLXRbMF19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhPSh0WzFdLXJbMV0pKihlWzBdLXJbMF0pLGk9KHRbMF0tclswXSkqKGVbMV0tclsxXSksbz1hLWk7aWYoYT4wKXtpZihpPD0wKXJldHVybiBvO249YStpfWVsc2V7aWYoIShhPDApKXJldHVybiBvO2lmKGk+PTApcmV0dXJuIG87bj0tKGEraSl9dmFyIHM9My4zMzA2NjkwNzM4NzU0NzE2ZS0xNipuO3JldHVybiBvPj1zfHxvPD0tcz9vOmYodCxlLHIpfSxmdW5jdGlvbih0LGUscixuKXt2YXIgYT10WzBdLW5bMF0saT1lWzBdLW5bMF0sbz1yWzBdLW5bMF0scz10WzFdLW5bMV0sbD1lWzFdLW5bMV0sYz1yWzFdLW5bMV0sdT10WzJdLW5bMl0saD1lWzJdLW5bMl0sZj1yWzJdLW5bMl0sZD1pKmMsZz1vKmwsdj1vKnMsbT1hKmMseT1hKmwseD1pKnMsYj11KihkLWcpK2gqKHYtbSkrZiooeS14KSxfPTcuNzcxNTYxMTcyMzc2MTAzZS0xNiooKE1hdGguYWJzKGQpK01hdGguYWJzKGcpKSpNYXRoLmFicyh1KSsoTWF0aC5hYnModikrTWF0aC5hYnMobSkpKk1hdGguYWJzKGgpKyhNYXRoLmFicyh5KStNYXRoLmFicyh4KSkqTWF0aC5hYnMoZikpO3JldHVybiBiPl98fC1iPl8/YjpwKHQsZSxyLG4pfV07ZnVuY3Rpb24gZyh0KXt2YXIgZT1kW3QubGVuZ3RoXTtyZXR1cm4gZXx8KGU9ZFt0Lmxlbmd0aF09aCh0Lmxlbmd0aCkpLGUuYXBwbHkodm9pZCAwLHQpfSFmdW5jdGlvbigpe2Zvcig7ZC5sZW5ndGg8PXM7KWQucHVzaChoKGQubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9WyJzbG93Il0sbj0wO248PXM7KytuKXQucHVzaCgiYSIrbiksci5wdXNoKCJvIituKTt2YXIgYT1bImZ1bmN0aW9uIGdldE9yaWVudGF0aW9uKCIsdC5qb2luKCksIil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Il07Zm9yKG49MjtuPD1zOysrbilhLnB1c2goImNhc2UgIixuLCI6cmV0dXJuIG8iLG4sIigiLHQuc2xpY2UoMCxuKS5qb2luKCksIik7Iik7YS5wdXNoKCJ9dmFyIHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDsrK2kpe3NbaV09YXJndW1lbnRzW2ldfTtyZXR1cm4gc2xvdyhzKTt9cmV0dXJuIGdldE9yaWVudGF0aW9uIiksci5wdXNoKGEuam9pbigiIikpO3ZhciBpPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxyKTtmb3IoZS5leHBvcnRzPWkuYXBwbHkodm9pZCAwLFtnXS5jb25jYXQoZCkpLG49MDtuPD1zOysrbillLmV4cG9ydHNbbl09ZFtuXX0oKX0seyJyb2J1c3Qtc2NhbGUiOjUxMSwicm9idXN0LXN1YnRyYWN0Ijo1MTMsInJvYnVzdC1zdW0iOjUxNCwidHdvLXByb2R1Y3QiOjU0Mn1dLDUxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc2NhbGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIGEoZSx0WzBdKTtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIGEodCxlWzBdKTtpZigwPT09dC5sZW5ndGh8fDA9PT1lLmxlbmd0aClyZXR1cm5bMF07dmFyIHI9WzBdO2lmKHQubGVuZ3RoPGUubGVuZ3RoKWZvcih2YXIgaT0wO2k8dC5sZW5ndGg7KytpKXI9bihyLGEoZSx0W2ldKSk7ZWxzZSBmb3IodmFyIGk9MDtpPGUubGVuZ3RoOysraSlyPW4ocixhKHQsZVtpXSkpO3JldHVybiByfX0seyJyb2J1c3Qtc2NhbGUiOjUxMSwicm9idXN0LXN1bSI6NTE0fV0sNTExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksYT10KCJ0d28tc3VtIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMT09PXIpe3ZhciBpPW4odFswXSxlKTtyZXR1cm4gaVswXT9pOltpWzFdXX12YXIgbz1uZXcgQXJyYXkoMipyKSxzPVsuMSwuMV0sbD1bLjEsLjFdLGM9MDtuKHRbMF0sZSxzKSxzWzBdJiYob1tjKytdPXNbMF0pO2Zvcih2YXIgdT0xO3U8cjsrK3Upe24odFt1XSxlLGwpO3ZhciBoPXNbMV07YShoLGxbMF0scyksc1swXSYmKG9bYysrXT1zWzBdKTt2YXIgZj1sWzFdLHA9c1sxXSxkPWYrcCxnPWQtZix2PXAtZztzWzFdPWQsdiYmKG9bYysrXT12KX1zWzFdJiYob1tjKytdPXNbMV0pOzA9PT1jJiYob1tjKytdPTApO3JldHVybiBvLmxlbmd0aD1jLG99fSx7InR3by1wcm9kdWN0Ijo1NDIsInR3by1zdW0iOjU0M31dLDUxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIGk9bih0LHIsYSksbz1uKGUscixhKTtpZihpPjAmJm8+MHx8aTwwJiZvPDApcmV0dXJuITE7dmFyIHM9bihyLHQsZSksbD1uKGEsdCxlKTtpZihzPjAmJmw+MHx8czwwJiZsPDApcmV0dXJuITE7aWYoMD09PWkmJjA9PT1vJiYwPT09cyYmMD09PWwpcmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT0wO2E8MjsrK2Epe3ZhciBpPXRbYV0sbz1lW2FdLHM9TWF0aC5taW4oaSxvKSxsPU1hdGgubWF4KGksbyksYz1yW2FdLHU9blthXSxoPU1hdGgubWluKGMsdSksZj1NYXRoLm1heChjLHUpO2lmKGY8c3x8bDxoKXJldHVybiExfXJldHVybiEwfSh0LGUscixhKTtyZXR1cm4hMH07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIilbM119LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MDl9XSw1MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MHx0Lmxlbmd0aCxuPTB8ZS5sZW5ndGg7aWYoMT09PXImJjE9PT1uKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPXQrZSxuPXItdCxhPXQtKHItbikrKGUtbik7aWYoYSlyZXR1cm5bYSxyXTtyZXR1cm5bcl19KHRbMF0sLWVbMF0pO3ZhciBhLGksbz1uZXcgQXJyYXkocituKSxzPTAsbD0wLGM9MCx1PU1hdGguYWJzLGg9dFtsXSxmPXUoaCkscD0tZVtjXSxkPXUocCk7ZjxkPyhpPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGk9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSk7bDxyJiZmPGR8fGM+PW4/KGE9aCwobCs9MSk8ciYmKGg9dFtsXSxmPXUoaCkpKTooYT1wLChjKz0xKTxuJiYocD0tZVtjXSxkPXUocCkpKTt2YXIgZyx2LG09YStpLHk9bS1hLHg9aS15LGI9eCxfPW07Zm9yKDtsPHImJmM8bjspZjxkPyhhPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGE9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSksKHg9KGk9YiktKHk9KG09YStpKS1hKSkmJihvW3MrK109eCksYj1fLSgoZz1fK20pLSh2PWctXykpKyhtLXYpLF89Zztmb3IoO2w8cjspKHg9KGk9YiktKHk9KG09KGE9aCkraSktYSkpJiYob1tzKytdPXgpLGI9Xy0oKGc9XyttKS0odj1nLV8pKSsobS12KSxfPWcsKGwrPTEpPHImJihoPXRbbF0pO2Zvcig7YzxuOykoeD0oaT1iKS0oeT0obT0oYT1wKStpKS1hKSkmJihvW3MrK109eCksYj1fLSgoZz1fK20pLSh2PWctXykpKyhtLXYpLF89ZywoYys9MSk8biYmKHA9LWVbY10pO2ImJihvW3MrK109Yik7XyYmKG9bcysrXT1fKTtzfHwob1tzKytdPTApO3JldHVybiBvLmxlbmd0aD1zLG99fSx7fV0sNTE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPTB8dC5sZW5ndGgsbj0wfGUubGVuZ3RoO2lmKDE9PT1yJiYxPT09bilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj10K2Usbj1yLXQsYT10LShyLW4pKyhlLW4pO2lmKGEpcmV0dXJuW2Escl07cmV0dXJuW3JdfSh0WzBdLGVbMF0pO3ZhciBhLGksbz1uZXcgQXJyYXkocituKSxzPTAsbD0wLGM9MCx1PU1hdGguYWJzLGg9dFtsXSxmPXUoaCkscD1lW2NdLGQ9dShwKTtmPGQ/KGk9aCwobCs9MSk8ciYmKGg9dFtsXSxmPXUoaCkpKTooaT1wLChjKz0xKTxuJiYocD1lW2NdLGQ9dShwKSkpO2w8ciYmZjxkfHxjPj1uPyhhPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGE9cCwoYys9MSk8biYmKHA9ZVtjXSxkPXUocCkpKTt2YXIgZyx2LG09YStpLHk9bS1hLHg9aS15LGI9eCxfPW07Zm9yKDtsPHImJmM8bjspZjxkPyhhPWgsKGwrPTEpPHImJihoPXRbbF0sZj11KGgpKSk6KGE9cCwoYys9MSk8biYmKHA9ZVtjXSxkPXUocCkpKSwoeD0oaT1iKS0oeT0obT1hK2kpLWEpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nO2Zvcig7bDxyOykoeD0oaT1iKS0oeT0obT0oYT1oKStpKS1hKSkmJihvW3MrK109eCksYj1fLSgoZz1fK20pLSh2PWctXykpKyhtLXYpLF89ZywobCs9MSk8ciYmKGg9dFtsXSk7Zm9yKDtjPG47KSh4PShpPWIpLSh5PShtPShhPXApK2kpLWEpKSYmKG9bcysrXT14KSxiPV8tKChnPV8rbSktKHY9Zy1fKSkrKG0tdiksXz1nLChjKz0xKTxuJiYocD1lW2NdKTtiJiYob1tzKytdPWIpO18mJihvW3MrK109Xyk7c3x8KG9bcysrXT0wKTtyZXR1cm4gby5sZW5ndGg9cyxvfX0se31dLDUxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ8MD8tMTp0PjA/MTowfX0se31dLDUxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEobih0KSl9O3ZhciBuPXQoImJvdW5kYXJ5LWNlbGxzIiksYT10KCJyZWR1Y2Utc2ltcGxpY2lhbC1jb21wbGV4Iil9LHsiYm91bmRhcnktY2VsbHMiOjk3LCJyZWR1Y2Utc2ltcGxpY2lhbC1jb21wbGV4Ijo0OTF9XSw1MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3I9cnx8MCwidW5kZWZpbmVkIj09dHlwZW9mIHMmJihzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTAsbj0wO248ZTsrK24pcj0wfE1hdGgubWF4KHIsdFtuXS5sZW5ndGgpO3JldHVybiByLTF9KHQpKTtpZigwPT09dC5sZW5ndGh8fHM8MSlyZXR1cm57Y2VsbHM6W10sdmVydGV4SWRzOltdLHZlcnRleFdlaWdodHM6W119O3ZhciBsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49YS5tYWxsb2NVaW50OChyKSxpPTA7aTxyOysraSluW2ldPXRbaV08ZXwwO3JldHVybiBufShlLCtyKSxjPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG89ZSooZSsxKS8yKnJ8MCxzPWEubWFsbG9jVWludDMyKDIqbyksbD0wLGM9MDtjPHI7KytjKWZvcih2YXIgdT10W2NdLGU9dS5sZW5ndGgsaD0wO2g8ZTsrK2gpZm9yKHZhciBmPTA7ZjxoOysrZil7dmFyIHA9dVtmXSxkPXVbaF07c1tsKytdPTB8TWF0aC5taW4ocCxkKSxzW2wrK109MHxNYXRoLm1heChwLGQpfWkobihzLFtsLzJ8MCwyXSkpO2Zvcih2YXIgZz0yLGM9MjtjPGw7Yys9MilzW2MtMl09PT1zW2NdJiZzW2MtMV09PT1zW2MrMV18fChzW2crK109c1tjXSxzW2crK109c1tjKzFdKTtyZXR1cm4gbihzLFtnLzJ8MCwyXSl9KHQscyksdT1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIG89dC5kYXRhLHM9dC5zaGFwZVswXSxsPWEubWFsbG9jRG91YmxlKHMpLGM9MCx1PTA7dTxzOysrdSl7dmFyIGg9b1syKnVdLGY9b1syKnUrMV07aWYocltoXSE9PXJbZl0pe3ZhciBwPWVbaF0sZD1lW2ZdO29bMipjXT1oLG9bMipjKzFdPWYsbFtjKytdPShkLWkpLyhkLXApfX1yZXR1cm4gdC5zaGFwZVswXT1jLG4obCxbY10pfShjLGUsbCwrciksaD1mdW5jdGlvbih0LGUpe3ZhciByPWEubWFsbG9jSW50MzIoMiplKSxuPXQuc2hhcGVbMF0saT10LmRhdGE7clswXT0wO2Zvcih2YXIgbz0wLHM9MDtzPG47KytzKXt2YXIgbD1pWzIqc107aWYobCE9PW8pe2ZvcihyWzIqbysxXT1zOysrbzxsOylyWzIqb109cyxyWzIqbysxXT1zO3JbMipvXT1zfX1yWzIqbysxXT1uO2Zvcig7KytvPGU7KXJbMipvXT1yWzIqbysxXT1uO3JldHVybiByfShjLDB8ZS5sZW5ndGgpLGY9byhzKSh0LGMuZGF0YSxoLGwpLHA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTB8dC5zaGFwZVswXSxyPXQuZGF0YSxuPW5ldyBBcnJheShlKSxhPTA7YTxlOysrYSluW2FdPVtyWzIqYV0sclsyKmErMV1dO3JldHVybiBufShjKSxkPVtdLnNsaWNlLmNhbGwodS5kYXRhLDAsdS5zaGFwZVswXSk7cmV0dXJuIGEuZnJlZShsKSxhLmZyZWUoYy5kYXRhKSxhLmZyZWUodS5kYXRhKSxhLmZyZWUoaCkse2NlbGxzOmYsdmVydGV4SWRzOnAsdmVydGV4V2VpZ2h0czpkfX07dmFyIG49dCgibmRhcnJheSIpLGE9dCgidHlwZWRhcnJheS1wb29sIiksaT10KCJuZGFycmF5LXNvcnQiKSxvPXQoIi4vbGliL2NvZGVnZW4iKX0seyIuL2xpYi9jb2RlZ2VuIjo1MTgsbmRhcnJheTo0NTIsIm5kYXJyYXktc29ydCI6NDUwLCJ0eXBlZGFycmF5LXBvb2wiOjU0NH1dLDUxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9aVt0XTtlfHwoZT1pW3RdPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj1uZXcgQXJyYXkodCsxKTtyWzBdPVtbXV07Zm9yKHZhciBpPTE7aTw9dDsrK2kpZm9yKHZhciBvPXJbaV09YShpKSxzPTA7czxvLmxlbmd0aDsrK3MpZT1NYXRoLm1heChlLG9baV0ubGVuZ3RoKTt2YXIgbD1bImZ1bmN0aW9uIEIoQyxFLGksail7IiwidmFyIGE9TWF0aC5taW4oaSxqKXwwLGI9TWF0aC5tYXgoaSxqKXwwLGw9Q1syKmFdLGg9Q1syKmErMV07Iiwid2hpbGUobDxoKXsiLCJ2YXIgbT0obCtoKT4+MSx2PUVbMiptKzFdOyIsImlmKHY9PT1iKXtyZXR1cm4gbX0iLCJpZihiPHYpe2g9bX1lbHNle2w9bSsxfSIsIn0iLCJyZXR1cm4gbDsiLCJ9OyIsImZ1bmN0aW9uIGdldENvbnRvdXIiLHQsImQoRixFLEMsUyl7IiwidmFyIG49Ri5sZW5ndGgsUj1bXTsiLCJmb3IodmFyIGk9MDtpPG47KytpKXt2YXIgYz1GW2ldLGw9Yy5sZW5ndGg7Il07ZnVuY3Rpb24gYyh0KXtpZighKHQubGVuZ3RoPD0wKSl7bC5wdXNoKCJSLnB1c2goIik7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2Upe3ZhciByPXRbZV07ZT4wJiZsLnB1c2goIiwiKSxsLnB1c2goIlsiKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoOysrbil7dmFyIGE9cltuXTtuPjAmJmwucHVzaCgiLCIpLGwucHVzaCgiQihDLEUsY1siLGFbMF0sIl0sY1siLGFbMV0sIl0pIil9bC5wdXNoKCJdIil9bC5wdXNoKCIpOyIpfX1mb3IodmFyIGk9dCsxO2k+MTstLWkpe2k8dCsxJiZsLnB1c2goImVsc2UgIiksbC5wdXNoKCJpZihsPT09IixpLCIpeyIpO2Zvcih2YXIgdT1bXSxzPTA7czxpOysrcyl1LnB1c2goIihTW2NbIitzKyJdXTw8IitzKyIpIik7bC5wdXNoKCJ2YXIgTT0iLHUuam9pbigiKyIpLCI7aWYoTT09PTB8fE09PT0iLCgxPDxpKS0xLCIpe2NvbnRpbnVlfXN3aXRjaChNKXsiKTtmb3IodmFyIG89cltpLTFdLHM9MDtzPG8ubGVuZ3RoOysrcylsLnB1c2goImNhc2UgIixzLCI6IiksYyhvW3NdKSxsLnB1c2goImJyZWFrOyIpO2wucHVzaCgifX0iKX1yZXR1cm4gbC5wdXNoKCJ9cmV0dXJuIFI7fTtyZXR1cm4gZ2V0Q29udG91ciIsdCwiZCIpLG5ldyBGdW5jdGlvbigicG9vbCIsbC5qb2luKCIiKSkobil9KHQpKTtyZXR1cm4gZX07dmFyIG49dCgidHlwZWRhcnJheS1wb29sIiksYT10KCJtYXJjaGluZy1zaW1wbGV4LXRhYmxlIiksaT17fX0seyJtYXJjaGluZy1zaW1wbGV4LXRhYmxlIjo0MjksInR5cGVkYXJyYXktcG9vbCI6NTQ0fV0sNTE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpdC10d2lkZGxlIiksYT10KCJ1bmlvbi1maW5kIik7ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXQubGVuZ3RoLG49dC5sZW5ndGgtZS5sZW5ndGgsYT1NYXRoLm1pbjtpZihuKXJldHVybiBuO3N3aXRjaChyKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSAxOnJldHVybiB0WzBdLWVbMF07Y2FzZSAyOnJldHVybihzPXRbMF0rdFsxXS1lWzBdLWVbMV0pfHxhKHRbMF0sdFsxXSktYShlWzBdLGVbMV0pO2Nhc2UgMzp2YXIgaT10WzBdK3RbMV0sbz1lWzBdK2VbMV07aWYocz1pK3RbMl0tKG8rZVsyXSkpcmV0dXJuIHM7dmFyIHMsbD1hKHRbMF0sdFsxXSksYz1hKGVbMF0sZVsxXSk7cmV0dXJuKHM9YShsLHRbMl0pLWEoYyxlWzJdKSl8fGEobCt0WzJdLGkpLWEoYytlWzJdLG8pO2RlZmF1bHQ6dmFyIHU9dC5zbGljZSgwKTt1LnNvcnQoKTt2YXIgaD1lLnNsaWNlKDApO2guc29ydCgpO2Zvcih2YXIgZj0wO2Y8cjsrK2YpaWYobj11W2ZdLWhbZl0pcmV0dXJuIG47cmV0dXJuIDB9fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gaSh0WzBdLGVbMF0pfWZ1bmN0aW9uIHModCxlKXtpZihlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpblthXT1bdFthXSxlW2FdXTtuLnNvcnQobyk7Zm9yKGE9MDthPHI7KythKXRbYV09blthXVswXSxlW2FdPW5bYV1bMV07cmV0dXJuIHR9cmV0dXJuIHQuc29ydChpKSx0fWZ1bmN0aW9uIGwodCl7aWYoMD09PXQubGVuZ3RoKXJldHVybltdO2Zvcih2YXIgZT0xLHI9dC5sZW5ndGgsbj0xO248cjsrK24pe3ZhciBhPXRbbl07aWYoaShhLHRbbi0xXSkpe2lmKG49PT1lKXtlKys7Y29udGludWV9dFtlKytdPWF9fXJldHVybiB0Lmxlbmd0aD1lLHR9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgtMSxhPS0xO3I8PW47KXt2YXIgbz1yK24+PjEscz1pKHRbb10sZSk7czw9MD8oMD09PXMmJihhPW8pLHI9bysxKTpzPjAmJihuPW8tMSl9cmV0dXJuIGF9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgpLGE9MCxvPXIubGVuZ3RoO2E8bzsrK2EpclthXT1bXTtmb3IodmFyIHM9W10sbD0oYT0wLGUubGVuZ3RoKTthPGw7KythKWZvcih2YXIgdT1lW2FdLGg9dS5sZW5ndGgsZj0xLHA9MTw8aDtmPHA7KytmKXtzLmxlbmd0aD1uLnBvcENvdW50KGYpO2Zvcih2YXIgZD0wLGc9MDtnPGg7KytnKWYmMTw8ZyYmKHNbZCsrXT11W2ddKTt2YXIgdj1jKHQscyk7aWYoISh2PDApKWZvcig7clt2KytdLnB1c2goYSksISh2Pj10Lmxlbmd0aHx8MCE9PWkodFt2XSxzKSk7KTt9cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0LGUpe2lmKGU8MClyZXR1cm5bXTtmb3IodmFyIHI9W10sYT0oMTw8ZSsxKS0xLGk9MDtpPHQubGVuZ3RoOysraSlmb3IodmFyIG89dFtpXSxsPWE7bDwxPDxvLmxlbmd0aDtsPW4ubmV4dENvbWJpbmF0aW9uKGwpKXtmb3IodmFyIGM9bmV3IEFycmF5KGUrMSksdT0wLGg9MDtoPG8ubGVuZ3RoOysraClsJjE8PGgmJihjW3UrK109b1toXSk7ci5wdXNoKGMpfXJldHVybiBzKHIpfXIuZGltZW5zaW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9TWF0aC5tYXgsbj0wLGE9dC5sZW5ndGg7bjxhOysrbillPXIoZSx0W25dLmxlbmd0aCk7cmV0dXJuIGUtMX0sci5jb3VudFZlcnRpY2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMSxyPU1hdGgubWF4LG49MCxhPXQubGVuZ3RoO248YTsrK24pZm9yKHZhciBpPXRbbl0sbz0wLHM9aS5sZW5ndGg7bzxzOysrbyllPXIoZSxpW29dKTtyZXR1cm4gZSsxfSxyLmNsb25lQ2VsbHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0wLG49dC5sZW5ndGg7cjxuOysrcillW3JdPXRbcl0uc2xpY2UoMCk7cmV0dXJuIGV9LHIuY29tcGFyZUNlbGxzPWksci5ub3JtYWxpemU9cyxyLnVuaXF1ZT1sLHIuZmluZENlbGw9YyxyLmluY2lkZW5jZT11LHIuZHVhbD1mdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiB1KGwoaCh0LDApKSx0KTtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09W107bj0wO2Zvcih2YXIgYT10Lmxlbmd0aDtuPGE7KytuKWZvcih2YXIgaT10W25dLG89MCxzPWkubGVuZ3RoO288czsrK28pcltpW29dXS5wdXNoKG4pO3JldHVybiByfSxyLmV4cGxvZGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBhPXRbcl0saT0wfGEubGVuZ3RoLG89MSxsPTE8PGk7bzxsOysrbyl7Zm9yKHZhciBjPVtdLHU9MDt1PGk7Kyt1KW8+Pj51JjEmJmMucHVzaChhW3VdKTtlLnB1c2goYyl9cmV0dXJuIHMoZSl9LHIuc2tlbGV0b249aCxyLmJvdW5kYXJ5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgYT10W3JdLGk9MCxvPWEubGVuZ3RoO2k8bzsrK2kpe2Zvcih2YXIgbD1uZXcgQXJyYXkoYS5sZW5ndGgtMSksYz0wLHU9MDtjPG87KytjKWMhPT1pJiYobFt1KytdPWFbY10pO2UucHVzaChsKX1yZXR1cm4gcyhlKX0sci5jb25uZWN0ZWRDb21wb25lbnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IGEoZSksbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT10W25dLG89MDtvPGkubGVuZ3RoOysrbylmb3IodmFyIHM9bysxO3M8aS5sZW5ndGg7KytzKXIubGluayhpW29dLGlbc10pO3ZhciBsPVtdLGM9ci5yYW5rcztmb3Iobj0wO248Yy5sZW5ndGg7KytuKWNbbl09LTE7Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIHU9ci5maW5kKHRbbl1bMF0pO2NbdV08MD8oY1t1XT1sLmxlbmd0aCxsLnB1c2goW3Rbbl0uc2xpY2UoMCldKSk6bFtjW3VdXS5wdXNoKHRbbl0uc2xpY2UoMCkpfXJldHVybiBsfSh0LGUpOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1sKHMoaCh0LDApKSkscj1uZXcgYShlLmxlbmd0aCksbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT10W25dLG89MDtvPGkubGVuZ3RoOysrbylmb3IodmFyIHU9YyhlLFtpW29dXSksZj1vKzE7ZjxpLmxlbmd0aDsrK2Ypci5saW5rKHUsYyhlLFtpW2ZdXSkpO3ZhciBwPVtdLGQ9ci5yYW5rcztmb3Iobj0wO248ZC5sZW5ndGg7KytuKWRbbl09LTE7Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGc9ci5maW5kKGMoZSxbdFtuXVswXV0pKTtkW2ddPDA/KGRbZ109cC5sZW5ndGgscC5wdXNoKFt0W25dLnNsaWNlKDApXSkpOnBbZFtnXV0ucHVzaCh0W25dLnNsaWNlKDApKX1yZXR1cm4gcH0odCl9fSx7ImJpdC10d2lkZGxlIjo5NCwidW5pb24tZmluZCI6NTQ1fV0sNTIwOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzk0XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6OTR9XSw1MjE6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bNTE5XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiYml0LXR3aWRkbGUiOjUyMCxkdXA6NTE5LCJ1bmlvbi1maW5kIjo1MjJ9XSw1MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLnJvb3RzPW5ldyBBcnJheSh0KSx0aGlzLnJhbmtzPW5ldyBBcnJheSh0KTtmb3IodmFyIGU9MDtlPHQ7KytlKXRoaXMucm9vdHNbZV09ZSx0aGlzLnJhbmtzW2VdPTB9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUubGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdHMubGVuZ3RofSxuLnByb3RvdHlwZS5tYWtlU2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yb290cy5sZW5ndGg7cmV0dXJuIHRoaXMucm9vdHMucHVzaCh0KSx0aGlzLnJhbmtzLnB1c2goMCksdH0sbi5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5yb290cztlW3RdIT09dDspe3ZhciByPWVbdF07ZVt0XT1lW3JdLHQ9cn1yZXR1cm4gdH0sbi5wcm90b3R5cGUubGluaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZmluZCh0KSxuPXRoaXMuZmluZChlKTtpZihyIT09bil7dmFyIGE9dGhpcy5yYW5rcyxpPXRoaXMucm9vdHMsbz1hW3JdLHM9YVtuXTtvPHM/aVtyXT1uOnM8bz9pW25dPXI6KGlbbl09ciwrK2Fbcl0pfX19LHt9XSw1MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGk9ZS5sZW5ndGgsbz10Lmxlbmd0aCxzPW5ldyBBcnJheShpKSxsPW5ldyBBcnJheShpKSxjPW5ldyBBcnJheShpKSx1PW5ldyBBcnJheShpKSxoPTA7aDxpOysraClzW2hdPWxbaF09LTEsY1toXT0xLzAsdVtoXT0hMTtmb3IodmFyIGg9MDtoPG87KytoKXt2YXIgZj10W2hdO2lmKDIhPT1mLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIklucHV0IG11c3QgYmUgYSBncmFwaCIpO3ZhciBwPWZbMV0sZD1mWzBdOy0xIT09bFtkXT9sW2RdPS0yOmxbZF09cCwtMSE9PXNbcF0/c1twXT0tMjpzW3BdPWR9ZnVuY3Rpb24gZyh0KXtpZih1W3RdKXJldHVybiAxLzA7dmFyIHIsYSxpLG8sYyxoPXNbdF0sZj1sW3RdO3JldHVybiBoPDB8fGY8MD8xLzA6KHI9ZVt0XSxhPWVbaF0saT1lW2ZdLG89TWF0aC5hYnMobihyLGEsaSkpLGM9TWF0aC5zcXJ0KE1hdGgucG93KGFbMF0taVswXSwyKStNYXRoLnBvdyhhWzFdLWlbMV0sMikpLG8vYyl9ZnVuY3Rpb24gdih0LGUpe3ZhciByPVRbdF0sbj1UW2VdO1RbdF09bixUW2VdPXIsTVtyXT1lLE1bbl09dH1mdW5jdGlvbiBtKHQpe3JldHVybiBjW1RbdF1dfWZ1bmN0aW9uIHkodCl7cmV0dXJuIDEmdD90LTE+PjE6KHQ+PjEpLTF9ZnVuY3Rpb24geCh0KXtmb3IodmFyIGU9bSh0KTs7KXt2YXIgcj1lLG49Mip0KzEsYT0yKih0KzEpLGk9dDtpZihuPFMpe3ZhciBvPW0obik7bzxyJiYoaT1uLHI9byl9aWYoYTxTKXt2YXIgcz1tKGEpO3M8ciYmKGk9YSl9aWYoaT09PXQpcmV0dXJuIHQ7dih0LGkpLHQ9aX19ZnVuY3Rpb24gYih0KXtmb3IodmFyIGU9bSh0KTt0PjA7KXt2YXIgcj15KHQpO2lmKHI+PTApe3ZhciBuPW0ocik7aWYoZTxuKXt2KHQsciksdD1yO2NvbnRpbnVlfX1yZXR1cm4gdH19ZnVuY3Rpb24gXygpe2lmKFM+MCl7dmFyIHQ9VFswXTtyZXR1cm4gdigwLFMtMSksUy09MSx4KDApLHR9cmV0dXJuLTF9ZnVuY3Rpb24gdyh0LGUpe3ZhciByPVRbdF07cmV0dXJuIGNbcl09PT1lP3Q6KGNbcl09LTEvMCxiKHQpLF8oKSxjW3JdPWUsYigoUys9MSktMSkpfWZ1bmN0aW9uIGsodCl7aWYoIXVbdF0pe3VbdF09ITA7dmFyIGU9c1t0XSxyPWxbdF07c1tyXT49MCYmKHNbcl09ZSksbFtlXT49MCYmKGxbZV09ciksTVtlXT49MCYmdyhNW2VdLGcoZSkpLE1bcl0+PTAmJncoTVtyXSxnKHIpKX19Zm9yKHZhciBUPVtdLE09bmV3IEFycmF5KGkpLGg9MDtoPGk7KytoKXt2YXIgQT1jW2hdPWcoaCk7QTwxLzA/KE1baF09VC5sZW5ndGgsVC5wdXNoKGgpKTpNW2hdPS0xfWZvcih2YXIgUz1ULmxlbmd0aCxoPVM+PjE7aD49MDstLWgpeChoKTtmb3IoOzspe3ZhciBFPV8oKTtpZihFPDB8fGNbRV0+cilicmVhaztrKEUpfWZvcih2YXIgTD1bXSxoPTA7aDxpOysraCl1W2hdfHwoTVtoXT1MLmxlbmd0aCxMLnB1c2goZVtoXS5zbGljZSgpKSk7TC5sZW5ndGg7ZnVuY3Rpb24gQyh0LGUpe2lmKHRbZV08MClyZXR1cm4gZTt2YXIgcj1lLG49ZTtkb3t2YXIgYT10W25dO2lmKCF1W25dfHxhPDB8fGE9PT1uKWJyZWFrO2lmKGE9dFtuPWFdLCF1W25dfHxhPDB8fGE9PT1uKWJyZWFrO249YSxyPXRbcl19d2hpbGUociE9PW4pO2Zvcih2YXIgaT1lO2khPT1uO2k9dFtpXSl0W2ldPW47cmV0dXJuIG59dmFyIFA9W107cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1DKHMsdFswXSkscj1DKGwsdFsxXSk7aWYoZT49MCYmcj49MCYmZSE9PXIpe3ZhciBuPU1bZV0sYT1NW3JdO24hPT1hJiZQLnB1c2goW24sYV0pfX0pLGEudW5pcXVlKGEubm9ybWFsaXplKFApKSx7cG9zaXRpb25zOkwsZWRnZXM6UH19O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLGE9dCgic2ltcGxpY2lhbC1jb21wbGV4Iil9LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MDksInNpbXBsaWNpYWwtY29tcGxleCI6NTIxfV0sNTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksbyxzO2lmKGVbMF1bMF08ZVsxXVswXSlyPWVbMF0saT1lWzFdO2Vsc2V7aWYoIShlWzBdWzBdPmVbMV1bMF0pKXJldHVybiBhKGUsdCk7cj1lWzFdLGk9ZVswXX1pZih0WzBdWzBdPHRbMV1bMF0pbz10WzBdLHM9dFsxXTtlbHNle2lmKCEodFswXVswXT50WzFdWzBdKSlyZXR1cm4tYSh0LGUpO289dFsxXSxzPXRbMF19dmFyIGw9bihyLGkscyksYz1uKHIsaSxvKTtpZihsPDApe2lmKGM8PTApcmV0dXJuIGx9ZWxzZSBpZihsPjApe2lmKGM+PTApcmV0dXJuIGx9ZWxzZSBpZihjKXJldHVybiBjO2lmKGw9bihzLG8saSksYz1uKHMsbyxyKSxsPDApe2lmKGM8PTApcmV0dXJuIGx9ZWxzZSBpZihsPjApe2lmKGM+PTApcmV0dXJuIGx9ZWxzZSBpZihjKXJldHVybiBjO3JldHVybiBpWzBdLXNbMF19O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcixhLGksbztpZihlWzBdWzBdPGVbMV1bMF0pcj1lWzBdLGE9ZVsxXTtlbHNle2lmKCEoZVswXVswXT5lWzFdWzBdKSl7dmFyIHM9TWF0aC5taW4odFswXVsxXSx0WzFdWzFdKSxsPU1hdGgubWF4KHRbMF1bMV0sdFsxXVsxXSksYz1NYXRoLm1pbihlWzBdWzFdLGVbMV1bMV0pLHU9TWF0aC5tYXgoZVswXVsxXSxlWzFdWzFdKTtyZXR1cm4gbDxjP2wtYzpzPnU/cy11OmwtdX1yPWVbMV0sYT1lWzBdfXRbMF1bMV08dFsxXVsxXT8oaT10WzBdLG89dFsxXSk6KGk9dFsxXSxvPXRbMF0pO3ZhciBoPW4oYSxyLGkpO3JldHVybiBofHwoKGg9bihhLHIsbykpfHxvLWEpfX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjUwOX1dLDUyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MiplLG49bmV3IEFycmF5KHIpLGk9MDtpPGU7KytpKXt2YXIgbD10W2ldLGM9bFswXVswXTxsWzFdWzBdO25bMippXT1uZXcgaChsWzBdWzBdLGwsYyxpKSxuWzIqaSsxXT1uZXcgaChsWzFdWzBdLGwsIWMsaSl9bi5zb3J0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LWUueDtyZXR1cm4gcnx8KChyPXQuY3JlYXRlLWUuY3JlYXRlKXx8TWF0aC5taW4odC5zZWdtZW50WzBdWzFdLHQuc2VnbWVudFsxXVsxXSktTWF0aC5taW4oZS5zZWdtZW50WzBdWzFdLGUuc2VnbWVudFsxXVsxXSkpfSk7Zm9yKHZhciBmPWEobykscD1bXSxkPVtdLGc9W10saT0wO2k8cjspe2Zvcih2YXIgdj1uW2ldLngsbT1bXTtpPHI7KXt2YXIgeT1uW2ldO2lmKHkueCE9PXYpYnJlYWs7aSs9MSx5LnNlZ21lbnRbMF1bMF09PT15LngmJnkuc2VnbWVudFsxXVswXT09PXkueD95LmNyZWF0ZSYmKHkuc2VnbWVudFswXVsxXTx5LnNlZ21lbnRbMV1bMV0/KG0ucHVzaChuZXcgdSh5LnNlZ21lbnRbMF1bMV0seS5pbmRleCwhMCwhMCkpLG0ucHVzaChuZXcgdSh5LnNlZ21lbnRbMV1bMV0seS5pbmRleCwhMSwhMSkpKToobS5wdXNoKG5ldyB1KHkuc2VnbWVudFsxXVsxXSx5LmluZGV4LCEwLCExKSksbS5wdXNoKG5ldyB1KHkuc2VnbWVudFswXVsxXSx5LmluZGV4LCExLCEwKSkpKTpmPXkuY3JlYXRlP2YuaW5zZXJ0KHkuc2VnbWVudCx5LmluZGV4KTpmLnJlbW92ZSh5LnNlZ21lbnQpfXAucHVzaChmLnJvb3QpLGQucHVzaCh2KSxnLnB1c2gobSl9cmV0dXJuIG5ldyBzKHAsZCxnKX07dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxhPXQoImZ1bmN0aW9uYWwtcmVkLWJsYWNrLXRyZWUiKSxpPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLG89dCgiLi9saWIvb3JkZXItc2VnbWVudHMiKTtmdW5jdGlvbiBzKHQsZSxyKXt0aGlzLnNsYWJzPXQsdGhpcy5jb29yZGluYXRlcz1lLHRoaXMuaG9yaXpvbnRhbD1yfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdC55LWV9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj1udWxsO3Q7KXt2YXIgbixhLG89dC5rZXk7b1swXVswXTxvWzFdWzBdPyhuPW9bMF0sYT1vWzFdKToobj1vWzFdLGE9b1swXSk7dmFyIHM9aShuLGEsZSk7aWYoczwwKXQ9dC5sZWZ0O2Vsc2UgaWYocz4wKWlmKGVbMF0hPT1vWzFdWzBdKXI9dCx0PXQucmlnaHQ7ZWxzZXtpZihsPWModC5yaWdodCxlKSlyZXR1cm4gbDt0PXQubGVmdH1lbHNle2lmKGVbMF0hPT1vWzFdWzBdKXJldHVybiB0O3ZhciBsO2lmKGw9Yyh0LnJpZ2h0LGUpKXJldHVybiBsO3Q9dC5sZWZ0fX1yZXR1cm4gcn1mdW5jdGlvbiB1KHQsZSxyLG4pe3RoaXMueT10LHRoaXMuaW5kZXg9ZSx0aGlzLnN0YXJ0PXIsdGhpcy5jbG9zZWQ9bn1mdW5jdGlvbiBoKHQsZSxyLG4pe3RoaXMueD10LHRoaXMuc2VnbWVudD1lLHRoaXMuY3JlYXRlPXIsdGhpcy5pbmRleD1ufXMucHJvdG90eXBlLmNhc3RVcD1mdW5jdGlvbih0KXt2YXIgZT1uLmxlKHRoaXMuY29vcmRpbmF0ZXMsdFswXSk7aWYoZTwwKXJldHVybi0xO3RoaXMuc2xhYnNbZV07dmFyIHI9Yyh0aGlzLnNsYWJzW2VdLHQpLGE9LTE7aWYociYmKGE9ci52YWx1ZSksdGhpcy5jb29yZGluYXRlc1tlXT09PXRbMF0pe3ZhciBzPW51bGw7aWYociYmKHM9ci5rZXkpLGU+MCl7dmFyIHU9Yyh0aGlzLnNsYWJzW2UtMV0sdCk7dSYmKHM/byh1LmtleSxzKT4wJiYocz11LmtleSxhPXUudmFsdWUpOihhPXUudmFsdWUscz11LmtleSkpfXZhciBoPXRoaXMuaG9yaXpvbnRhbFtlXTtpZihoLmxlbmd0aD4wKXt2YXIgZj1uLmdlKGgsdFsxXSxsKTtpZihmPGgubGVuZ3RoKXt2YXIgcD1oW2ZdO2lmKHRbMV09PT1wLnkpe2lmKHAuY2xvc2VkKXJldHVybiBwLmluZGV4O2Zvcig7ZjxoLmxlbmd0aC0xJiZoW2YrMV0ueT09PXRbMV07KWlmKChwPWhbZis9MV0pLmNsb3NlZClyZXR1cm4gcC5pbmRleDtpZihwLnk9PT10WzFdJiYhcC5zdGFydCl7aWYoKGYrPTEpPj1oLmxlbmd0aClyZXR1cm4gYTtwPWhbZl19fWlmKHAuc3RhcnQpaWYocyl7dmFyIGQ9aShzWzBdLHNbMV0sW3RbMF0scC55XSk7c1swXVswXT5zWzFdWzBdJiYoZD0tZCksZD4wJiYoYT1wLmluZGV4KX1lbHNlIGE9cC5pbmRleDtlbHNlIHAueSE9PXRbMV0mJihhPXAuaW5kZXgpfX19cmV0dXJuIGF9fSx7Ii4vbGliL29yZGVyLXNlZ21lbnRzIjo1MjQsImJpbmFyeS1zZWFyY2gtYm91bmRzIjo5MywiZnVuY3Rpb25hbC1yZWQtYmxhY2stdHJlZSI6MjMzLCJyb2J1c3Qtb3JpZW50YXRpb24iOjUwOX1dLDUyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyb2J1c3QtZG90LXByb2R1Y3QiKSxhPXQoInJvYnVzdC1zdW0iKTtmdW5jdGlvbiBpKHQsZSl7dmFyIHI9YShuKHQsZSksW2VbZS5sZW5ndGgtMV1dKTtyZXR1cm4gcltyLmxlbmd0aC0xXX1mdW5jdGlvbiBvKHQsZSxyLG4pe3ZhciBhPS1lLyhuLWUpO2E8MD9hPTA6YT4xJiYoYT0xKTtmb3IodmFyIGk9MS1hLG89dC5sZW5ndGgscz1uZXcgQXJyYXkobyksbD0wO2w8bzsrK2wpc1tsXT1hKnRbbF0raSpyW2xdO3JldHVybiBzfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPVtdLGE9aSh0W3QubGVuZ3RoLTFdLGUpLHM9dFt0Lmxlbmd0aC0xXSxsPXRbMF0sYz0wO2M8dC5sZW5ndGg7KytjLHM9bCl7dmFyIHU9aShsPXRbY10sZSk7aWYoYTwwJiZ1PjB8fGE+MCYmdTwwKXt2YXIgaD1vKHMsdSxsLGEpO3IucHVzaChoKSxuLnB1c2goaC5zbGljZSgpKX11PDA/bi5wdXNoKGwuc2xpY2UoKSk6dT4wP3IucHVzaChsLnNsaWNlKCkpOihyLnB1c2gobC5zbGljZSgpKSxuLnB1c2gobC5zbGljZSgpKSksYT11fXJldHVybntwb3NpdGl2ZTpyLG5lZ2F0aXZlOm59fSxlLmV4cG9ydHMucG9zaXRpdmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1pKHRbdC5sZW5ndGgtMV0sZSksYT10W3QubGVuZ3RoLTFdLHM9dFswXSxsPTA7bDx0Lmxlbmd0aDsrK2wsYT1zKXt2YXIgYz1pKHM9dFtsXSxlKTsobjwwJiZjPjB8fG4+MCYmYzwwKSYmci5wdXNoKG8oYSxjLHMsbikpLGM+PTAmJnIucHVzaChzLnNsaWNlKCkpLG49Y31yZXR1cm4gcn0sZS5leHBvcnRzLm5lZ2F0aXZlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49aSh0W3QubGVuZ3RoLTFdLGUpLGE9dFt0Lmxlbmd0aC0xXSxzPXRbMF0sbD0wO2w8dC5sZW5ndGg7KytsLGE9cyl7dmFyIGM9aShzPXRbbF0sZSk7KG48MCYmYz4wfHxuPjAmJmM8MCkmJnIucHVzaChvKGEsYyxzLG4pKSxjPD0wJiZyLnB1c2gocy5zbGljZSgpKSxuPWN9cmV0dXJuIHJ9fSx7InJvYnVzdC1kb3QtcHJvZHVjdCI6NTA2LCJyb2J1c3Qtc3VtIjo1MTR9XSw1Mjc6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9e25vdF9zdHJpbmc6L1tec10vLG5vdF9ib29sOi9bXnRdLyxub3RfdHlwZTovW15UXS8sbm90X3ByaW1pdGl2ZTovW152XS8sbnVtYmVyOi9bZGllZmddLyxudW1lcmljX2FyZzovW2JjZGllZmd1eFhdLyxqc29uOi9bal0vLG5vdF9qc29uOi9bXmpdLyx0ZXh0Oi9eW15ceDI1XSsvLG1vZHVsbzovXlx4MjV7Mn0vLHBsYWNlaG9sZGVyOi9eXHgyNSg/OihbMS05XVxkKilcJHxcKChbXildKylcKSk/KFwrKT8oMHwnW14kXSk/KC0pPyhcZCspPyg/OlwuKFxkKykpPyhbYi1naWpvc3RUdXZ4WF0pLyxrZXk6L14oW2Etel9dW2Etel9cZF0qKS9pLGtleV9hY2Nlc3M6L15cLihbYS16X11bYS16X1xkXSopL2ksaW5kZXhfYWNjZXNzOi9eXFsoXGQrKVxdLyxzaWduOi9eWystXS99O2Z1bmN0aW9uIGUocil7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGEsaSxvLHMsbCxjLHUsaCxmLHA9MSxkPXIubGVuZ3RoLGc9IiI7Zm9yKGk9MDtpPGQ7aSsrKWlmKCJzdHJpbmciPT10eXBlb2YgcltpXSlnKz1yW2ldO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiByW2ldKXtpZigocz1yW2ldKS5rZXlzKWZvcihhPW5bcF0sbz0wO288cy5rZXlzLmxlbmd0aDtvKyspe2lmKG51bGw9PWEpdGhyb3cgbmV3IEVycm9yKGUoJ1tzcHJpbnRmXSBDYW5ub3QgYWNjZXNzIHByb3BlcnR5ICIlcyIgb2YgdW5kZWZpbmVkIHZhbHVlICIlcyInLHMua2V5c1tvXSxzLmtleXNbby0xXSkpO2E9YVtzLmtleXNbb11dfWVsc2UgYT1zLnBhcmFtX25vP25bcy5wYXJhbV9ub106bltwKytdO2lmKHQubm90X3R5cGUudGVzdChzLnR5cGUpJiZ0Lm5vdF9wcmltaXRpdmUudGVzdChzLnR5cGUpJiZhIGluc3RhbmNlb2YgRnVuY3Rpb24mJihhPWEoKSksdC5udW1lcmljX2FyZy50ZXN0KHMudHlwZSkmJiJudW1iZXIiIT10eXBlb2YgYSYmaXNOYU4oYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihlKCJbc3ByaW50Zl0gZXhwZWN0aW5nIG51bWJlciBidXQgZm91bmQgJVQiLGEpKTtzd2l0Y2godC5udW1iZXIudGVzdChzLnR5cGUpJiYoaD1hPj0wKSxzLnR5cGUpe2Nhc2UiYiI6YT1wYXJzZUludChhLDEwKS50b1N0cmluZygyKTticmVhaztjYXNlImMiOmE9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhLDEwKSk7YnJlYWs7Y2FzZSJkIjpjYXNlImkiOmE9cGFyc2VJbnQoYSwxMCk7YnJlYWs7Y2FzZSJqIjphPUpTT04uc3RyaW5naWZ5KGEsbnVsbCxzLndpZHRoP3BhcnNlSW50KHMud2lkdGgpOjApO2JyZWFrO2Nhc2UiZSI6YT1zLnByZWNpc2lvbj9wYXJzZUZsb2F0KGEpLnRvRXhwb25lbnRpYWwocy5wcmVjaXNpb24pOnBhcnNlRmxvYXQoYSkudG9FeHBvbmVudGlhbCgpO2JyZWFrO2Nhc2UiZiI6YT1zLnByZWNpc2lvbj9wYXJzZUZsb2F0KGEpLnRvRml4ZWQocy5wcmVjaXNpb24pOnBhcnNlRmxvYXQoYSk7YnJlYWs7Y2FzZSJnIjphPXMucHJlY2lzaW9uP1N0cmluZyhOdW1iZXIoYS50b1ByZWNpc2lvbihzLnByZWNpc2lvbikpKTpwYXJzZUZsb2F0KGEpO2JyZWFrO2Nhc2UibyI6YT0ocGFyc2VJbnQoYSwxMCk+Pj4wKS50b1N0cmluZyg4KTticmVhaztjYXNlInMiOmE9U3RyaW5nKGEpLGE9cy5wcmVjaXNpb24/YS5zdWJzdHJpbmcoMCxzLnByZWNpc2lvbik6YTticmVhaztjYXNlInQiOmE9U3RyaW5nKCEhYSksYT1zLnByZWNpc2lvbj9hLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTphO2JyZWFrO2Nhc2UiVCI6YT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSxhPXMucHJlY2lzaW9uP2Euc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmE7YnJlYWs7Y2FzZSJ1IjphPXBhcnNlSW50KGEsMTApPj4+MDticmVhaztjYXNlInYiOmE9YS52YWx1ZU9mKCksYT1zLnByZWNpc2lvbj9hLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTphO2JyZWFrO2Nhc2UieCI6YT0ocGFyc2VJbnQoYSwxMCk+Pj4wKS50b1N0cmluZygxNik7YnJlYWs7Y2FzZSJYIjphPShwYXJzZUludChhLDEwKT4+PjApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfXQuanNvbi50ZXN0KHMudHlwZSk/Zys9YTooIXQubnVtYmVyLnRlc3Qocy50eXBlKXx8aCYmIXMuc2lnbj9mPSIiOihmPWg/IisiOiItIixhPWEudG9TdHJpbmcoKS5yZXBsYWNlKHQuc2lnbiwiIikpLGM9cy5wYWRfY2hhcj8iMCI9PT1zLnBhZF9jaGFyPyIwIjpzLnBhZF9jaGFyLmNoYXJBdCgxKToiICIsdT1zLndpZHRoLShmK2EpLmxlbmd0aCxsPXMud2lkdGgmJnU+MD9jLnJlcGVhdCh1KToiIixnKz1zLmFsaWduP2YrYStsOiIwIj09PWM/ZitsK2E6bCtmK2EpfXJldHVybiBnfShmdW5jdGlvbihlKXtpZihhW2VdKXJldHVybiBhW2VdO3ZhciByLG49ZSxpPVtdLG89MDtmb3IoO247KXtpZihudWxsIT09KHI9dC50ZXh0LmV4ZWMobikpKWkucHVzaChyWzBdKTtlbHNlIGlmKG51bGwhPT0ocj10Lm1vZHVsby5leGVjKG4pKSlpLnB1c2goIiUiKTtlbHNle2lmKG51bGw9PT0ocj10LnBsYWNlaG9sZGVyLmV4ZWMobikpKXRocm93IG5ldyBTeW50YXhFcnJvcigiW3NwcmludGZdIHVuZXhwZWN0ZWQgcGxhY2Vob2xkZXIiKTtpZihyWzJdKXtvfD0xO3ZhciBzPVtdLGw9clsyXSxjPVtdO2lmKG51bGw9PT0oYz10LmtleS5leGVjKGwpKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5Iik7Zm9yKHMucHVzaChjWzFdKTsiIiE9PShsPWwuc3Vic3RyaW5nKGNbMF0ubGVuZ3RoKSk7KWlmKG51bGwhPT0oYz10LmtleV9hY2Nlc3MuZXhlYyhsKSkpcy5wdXNoKGNbMV0pO2Vsc2V7aWYobnVsbD09PShjPXQuaW5kZXhfYWNjZXNzLmV4ZWMobCkpKXRocm93IG5ldyBTeW50YXhFcnJvcigiW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXkiKTtzLnB1c2goY1sxXSl9clsyXT1zfWVsc2Ugb3w9MjtpZigzPT09byl0aHJvdyBuZXcgRXJyb3IoIltzcHJpbnRmXSBtaXhpbmcgcG9zaXRpb25hbCBhbmQgbmFtZWQgcGxhY2Vob2xkZXJzIGlzIG5vdCAoeWV0KSBzdXBwb3J0ZWQiKTtpLnB1c2goe3BsYWNlaG9sZGVyOnJbMF0scGFyYW1fbm86clsxXSxrZXlzOnJbMl0sc2lnbjpyWzNdLHBhZF9jaGFyOnJbNF0sYWxpZ246cls1XSx3aWR0aDpyWzZdLHByZWNpc2lvbjpyWzddLHR5cGU6cls4XX0pfW49bi5zdWJzdHJpbmcoclswXS5sZW5ndGgpfXJldHVybiBhW2VdPWl9KHIpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbih0LHIpe3JldHVybiBlLmFwcGx5KG51bGwsW3RdLmNvbmNhdChyfHxbXSkpfXZhciBhPU9iamVjdC5jcmVhdGUobnVsbCk7InVuZGVmaW5lZCIhPXR5cGVvZiByJiYoci5zcHJpbnRmPWUsci52c3ByaW50Zj1uKSwidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5zcHJpbnRmPWUsd2luZG93LnZzcHJpbnRmPW4pfSgpfSx7fV0sNTI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBhcmVudGhlc2lzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihudWxsPT10KXRocm93IEVycm9yKCJGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYSBzdHJpbmciKTtpZihudWxsPT1lKXRocm93IEVycm9yKCJTZXBhcmF0b3Igc2hvdWxkIGJlIGEgc3RyaW5nIG9yIGEgUmVnRXhwIik7cj8oInN0cmluZyI9PXR5cGVvZiByfHxBcnJheS5pc0FycmF5KHIpKSYmKHI9e2lnbm9yZTpyfSk6cj17fSxudWxsPT1yLmVzY2FwZSYmKHIuZXNjYXBlPSEwKSxudWxsPT1yLmlnbm9yZT9yLmlnbm9yZT1bIltdIiwiKCkiLCJ7fSIsIjw+IiwnIiInLCInJyIsImBgIiwiXHUyMDFjXHUyMDFkIiwiXHhhYlx4YmIiXTooInN0cmluZyI9PXR5cGVvZiByLmlnbm9yZSYmKHIuaWdub3JlPVtyLmlnbm9yZV0pLHIuaWdub3JlPXIuaWdub3JlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoJiYodCs9dCksdH0pKTt2YXIgYT1uLnBhcnNlKHQse2ZsYXQ6ITAsYnJhY2tldHM6ci5pZ25vcmV9KSxpPWFbMF0uc3BsaXQoZSk7aWYoci5lc2NhcGUpe2Zvcih2YXIgbz1bXSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc10sYz1pW3MrMV07IlxcIj09PWxbbC5sZW5ndGgtMV0mJiJcXCIhPT1sW2wubGVuZ3RoLTJdPyhvLnB1c2gobCtlK2MpLHMrKyk6by5wdXNoKGwpfWk9b31mb3Iocz0wO3M8aS5sZW5ndGg7cysrKWFbMF09aVtzXSxpW3NdPW4uc3RyaW5naWZ5KGEse2ZsYXQ6ITB9KTtyZXR1cm4gaX19LHtwYXJlbnRoZXNpczo0NjB9XSw1Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPW5ldyBBcnJheShlKSxhPW5ldyBBcnJheShlKSxpPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheShlKSxzPW5ldyBBcnJheShlKSxsPTA7bDxlOysrbClyW2xdPS0xLG5bbF09MCxhW2xdPSExLGlbbF09MCxvW2xdPS0xLHNbbF09W107dmFyIGMsdT0wLGg9W10sZj1bXTtmdW5jdGlvbiBwKGUpe3ZhciBsPVtlXSxjPVtlXTtmb3IocltlXT1uW2VdPXUsYVtlXT0hMCx1Kz0xO2MubGVuZ3RoPjA7KXtlPWNbYy5sZW5ndGgtMV07dmFyIHA9dFtlXTtpZihpW2VdPHAubGVuZ3RoKXtmb3IodmFyIGQ9aVtlXTtkPHAubGVuZ3RoOysrZCl7dmFyIGc9cFtkXTtpZihyW2ddPDApe3JbZ109bltnXT11LGFbZ109ITAsdSs9MSxsLnB1c2goZyksYy5wdXNoKGcpO2JyZWFrfWFbZ10mJihuW2VdPTB8TWF0aC5taW4obltlXSxuW2ddKSksb1tnXT49MCYmc1tlXS5wdXNoKG9bZ10pfWlbZV09ZH1lbHNle2lmKG5bZV09PT1yW2VdKXtmb3IodmFyIHY9W10sbT1bXSx5PTAsZD1sLmxlbmd0aC0xO2Q+PTA7LS1kKXt2YXIgeD1sW2RdO2lmKGFbeF09ITEsdi5wdXNoKHgpLG0ucHVzaChzW3hdKSx5Kz1zW3hdLmxlbmd0aCxvW3hdPWgubGVuZ3RoLHg9PT1lKXtsLmxlbmd0aD1kO2JyZWFrfX1oLnB1c2godik7Zm9yKHZhciBiPW5ldyBBcnJheSh5KSxkPTA7ZDxtLmxlbmd0aDtkKyspZm9yKHZhciBfPTA7XzxtW2RdLmxlbmd0aDtfKyspYlstLXldPW1bZF1bX107Zi5wdXNoKGIpfWMucG9wKCl9fX1mb3IodmFyIGw9MDtsPGU7KytsKXJbbF08MCYmcChsKTtmb3IodmFyIGw9MDtsPGYubGVuZ3RoO2wrKyl7dmFyIGQ9ZltsXTtpZigwIT09ZC5sZW5ndGgpe2Quc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSxjPVtkWzBdXTtmb3IodmFyIGc9MTtnPGQubGVuZ3RoO2crKylkW2ddIT09ZFtnLTFdJiZjLnB1c2goZFtnXSk7ZltsXT1jfX1yZXR1cm57Y29tcG9uZW50czpoLGFkamFjZW5jeUxpc3Q6Zn19fSx7fV0sNTMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQuZGltZW5zaW9uPD0wKXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O2lmKDE9PT10LmRpbWVuc2lvbilyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9aSh0LGUpLG49ci5sZW5ndGgsYT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobikscz0wO3M8bjsrK3MpYVtzXT1bcltzXV0sb1tzXT1bc107cmV0dXJue3Bvc2l0aW9uczphLGNlbGxzOm99fSh0LGUpO3ZhciByPXQub3JkZXIuam9pbigpKyItIit0LmR0eXBlLHM9b1tyXSxlPStlfHwwO3N8fChzPW9bcl09ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aCxpPVsiJ3VzZSBzdHJpY3QnOyJdLG89InN1cmZhY2VOZXRzIit0LmpvaW4oIl8iKSsiZCIrZTtpLnB1c2goInZhciBjb250b3VyPWdlbkNvbnRvdXIoeyIsIm9yZGVyOlsiLHQuam9pbigpLCJdLCIsInNjYWxhckFyZ3VtZW50czogMywiLCJwaGFzZTpmdW5jdGlvbiBwaGFzZUZ1bmMocCxhLGIsYykgeyByZXR1cm4gKHAgPiBjKXwwIH0sIiksImdlbmVyaWMiPT09ZSYmaS5wdXNoKCJnZXR0ZXJzOlswXSwiKTtmb3IodmFyIHM9W10sbD1bXSxjPTA7YzxyOysrYylzLnB1c2goImQiK2MpLGwucHVzaCgiZCIrYyk7Zm9yKHZhciBjPTA7YzwxPDxyOysrYylzLnB1c2goInYiK2MpLGwucHVzaCgidiIrYyk7Zm9yKHZhciBjPTA7YzwxPDxyOysrYylzLnB1c2goInAiK2MpLGwucHVzaCgicCIrYyk7cy5wdXNoKCJhIiwiYiIsImMiKSxsLnB1c2goImEiLCJjIiksaS5wdXNoKCJ2ZXJ0ZXg6ZnVuY3Rpb24gdmVydGV4RnVuYygiLHMuam9pbigpLCIpeyIpO2Zvcih2YXIgdT1bXSxjPTA7YzwxPDxyOysrYyl1LnB1c2goIihwIitjKyI8PCIrYysiKSIpO2kucHVzaCgidmFyIG09KCIsdS5qb2luKCIrIiksIil8MDtpZihtPT09MHx8bT09PSIsKDE8PCgxPDxyKSktMSwiKXtyZXR1cm59Iik7dmFyIGg9W10sZj1bXTsxPDwoMTw8cik8PTEyOD8oaS5wdXNoKCJzd2l0Y2gobSl7IiksZj1pKTppLnB1c2goInN3aXRjaChtPj4+Nyl7Iik7Zm9yKHZhciBjPTA7YzwxPDwoMTw8cik7KytjKXtpZigxPDwoMTw8cik+MTI4JiZjJTEyOD09MCl7aC5sZW5ndGg+MCYmZi5wdXNoKCJ9fSIpO3ZhciBwPSJ2RXh0cmEiK2gubGVuZ3RoO2kucHVzaCgiY2FzZSAiLGM+Pj43LCI6IixwLCIobSYweDdmLCIsbC5qb2luKCksIik7YnJlYWs7IiksZj1bImZ1bmN0aW9uICIscCwiKG0sIixsLmpvaW4oKSwiKXtzd2l0Y2gobSl7Il0saC5wdXNoKGYpfWYucHVzaCgiY2FzZSAiLDEyNyZjLCI6Iik7Zm9yKHZhciBkPW5ldyBBcnJheShyKSxnPW5ldyBBcnJheShyKSx2PW5ldyBBcnJheShyKSxtPW5ldyBBcnJheShyKSx5PTAseD0wO3g8cjsrK3gpZFt4XT1bXSxnW3hdPVtdLHZbeF09MCxtW3hdPTA7Zm9yKHZhciB4PTA7eDwxPDxyOysreClmb3IodmFyIGI9MDtiPHI7KytiKXt2YXIgXz14XjE8PGI7aWYoIShfPngpJiYhKGMmMTw8XykhPSEoYyYxPDx4KSl7dmFyIHc9MTtjJjE8PF8/Z1tiXS5wdXNoKCJ2IitfKyItdiIreCk6KGdbYl0ucHVzaCgidiIreCsiLXYiK18pLHc9LXcpLHc8MD8oZFtiXS5wdXNoKCItdiIreCsiLXYiK18pLHZbYl0rPTIpOihkW2JdLnB1c2goInYiK3grIit2IitfKSx2W2JdLT0yKSx5Kz0xO2Zvcih2YXIgaz0wO2s8cjsrK2spayE9PWImJihfJjE8PGs/bVtrXSs9MTptW2tdLT0xKX19Zm9yKHZhciBUPVtdLGI9MDtiPHI7KytiKWlmKDA9PT1kW2JdLmxlbmd0aClULnB1c2goImQiK2IrIi0wLjUiKTtlbHNle3ZhciBNPSIiO3ZbYl08MD9NPXZbYl0rIipjIjp2W2JdPjAmJihNPSIrIit2W2JdKyIqYyIpO3ZhciBBPWRbYl0ubGVuZ3RoL3kqLjUsUz0uNSttW2JdL3kqLjU7VC5wdXNoKCJkIitiKyItIitTKyItIitBKyIqKCIrZFtiXS5qb2luKCIrIikrTSsiKS8oIitnW2JdLmpvaW4oIisiKSsiKSIpfWYucHVzaCgiYS5wdXNoKFsiLFQuam9pbigpLCJdKTsiLCJicmVhazsiKX1pLnB1c2goIn19LCIpLGgubGVuZ3RoPjAmJmYucHVzaCgifX0iKTtmb3IodmFyIEU9W10sYz0wO2M8MTw8ci0xOysrYylFLnB1c2goInYiK2MpO0UucHVzaCgiYzAiLCJjMSIsInAwIiwicDEiLCJhIiwiYiIsImMiKSxpLnB1c2goImNlbGw6ZnVuY3Rpb24gY2VsbEZ1bmMoIixFLmpvaW4oKSwiKXsiKTt2YXIgTD1hKHItMSk7aS5wdXNoKCJpZihwMCl7Yi5wdXNoKCIsTC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIlsiK3QubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJ2Iit0fSkrIl0ifSkuam9pbigpLCIpfWVsc2V7Yi5wdXNoKCIsTC5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC5zbGljZSgpO3JldHVybiBlLnJldmVyc2UoKSwiWyIrZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInYiK3R9KSsiXSJ9KS5qb2luKCksIil9fX0pO2Z1bmN0aW9uICIsbywiKGFycmF5LGxldmVsKXt2YXIgdmVydHM9W10sY2VsbHM9W107Y29udG91cihhcnJheSx2ZXJ0cyxjZWxscyxsZXZlbCk7cmV0dXJuIHtwb3NpdGlvbnM6dmVydHMsY2VsbHM6Y2VsbHN9O30gcmV0dXJuICIsbywiOyIpO2Zvcih2YXIgYz0wO2M8aC5sZW5ndGg7KytjKWkucHVzaChoW2NdLmpvaW4oIiIpKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJnZW5Db250b3VyIixpLmpvaW4oIiIpKShuKX0odC5vcmRlcix0LmR0eXBlKSk7cmV0dXJuIHModCxlKX07dmFyIG49dCgibmRhcnJheS1leHRyYWN0LWNvbnRvdXIiKSxhPXQoInRyaWFuZ3VsYXRlLWh5cGVyY3ViZSIpLGk9dCgiemVyby1jcm9zc2luZ3MiKTt2YXIgbz17fX0seyJuZGFycmF5LWV4dHJhY3QtY29udG91ciI6NDQxLCJ0cmlhbmd1bGF0ZS1oeXBlcmN1YmUiOjU0MCwiemVyby1jcm9zc2luZ3MiOjU3M31dLDUzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0O2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj0hMCxhPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIG8scz10W1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89cy5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKG8udmFsdWUpLCFlfHxyLmxlbmd0aCE9PWUpO249ITApO31jYXRjaCh0KXthPSEwLGk9dH1maW5hbGx5e3RyeXshbiYmcy5yZXR1cm4mJnMucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGl9fXJldHVybiByfSh0LGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCksYT0yKk1hdGguUEksaT1mdW5jdGlvbih0LGUscixuLGEsaSxvKXt2YXIgcz10LngsbD10Lnk7cmV0dXJue3g6bioocyo9ZSktYSoobCo9cikraSx5OmEqcytuKmwrb319LG89ZnVuY3Rpb24odCxlKXt2YXIgcj0uNTUxOTE1MDI0NDk0KihlPDA/LTE6MSksbj1NYXRoLmNvcyh0KSxhPU1hdGguc2luKHQpLGk9TWF0aC5jb3ModCtlKSxvPU1hdGguc2luKHQrZSk7cmV0dXJuW3t4Om4tYSpyLHk6YStuKnJ9LHt4OmkrbypyLHk6by1pKnJ9LHt4OmkseTpvfV19LHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dCpuLWUqcjwwPy0xOjEsaT0odCpyK2UqbikvKE1hdGguc3FydCh0KnQrZSplKSpNYXRoLnNxcnQodCp0K2UqZSkpO3JldHVybiBpPjEmJihpPTEpLGk8LTEmJihpPS0xKSxhKk1hdGguYWNvcyhpKX07ci5kZWZhdWx0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucHgscj10LnB5LGw9dC5jeCxjPXQuY3ksdT10LnJ4LGg9dC5yeSxmPXQueEF4aXNSb3RhdGlvbixwPXZvaWQgMD09PWY/MDpmLGQ9dC5sYXJnZUFyY0ZsYWcsZz12b2lkIDA9PT1kPzA6ZCx2PXQuc3dlZXBGbGFnLG09dm9pZCAwPT09dj8wOnYseT1bXTtpZigwPT09dXx8MD09PWgpcmV0dXJuW107dmFyIHg9TWF0aC5zaW4ocCphLzM2MCksYj1NYXRoLmNvcyhwKmEvMzYwKSxfPWIqKGUtbCkvMit4KihyLWMpLzIsdz0teCooZS1sKS8yK2IqKHItYykvMjtpZigwPT09XyYmMD09PXcpcmV0dXJuW107dT1NYXRoLmFicyh1KSxoPU1hdGguYWJzKGgpO3ZhciBrPU1hdGgucG93KF8sMikvTWF0aC5wb3codSwyKStNYXRoLnBvdyh3LDIpL01hdGgucG93KGgsMik7az4xJiYodSo9TWF0aC5zcXJ0KGspLGgqPU1hdGguc3FydChrKSk7dmFyIFQ9ZnVuY3Rpb24odCxlLHIsbixpLG8sbCxjLHUsaCxmLHApe3ZhciBkPU1hdGgucG93KGksMiksZz1NYXRoLnBvdyhvLDIpLHY9TWF0aC5wb3coZiwyKSxtPU1hdGgucG93KHAsMikseT1kKmctZCptLWcqdjt5PDAmJih5PTApLHkvPWQqbStnKnY7dmFyIHg9KHk9TWF0aC5zcXJ0KHkpKihsPT09Yz8tMToxKSkqaS9vKnAsYj15Ki1vL2kqZixfPWgqeC11KmIrKHQrcikvMix3PXUqeCtoKmIrKGUrbikvMixrPShmLXgpL2ksVD0ocC1iKS9vLE09KC1mLXgpL2ksQT0oLXAtYikvbyxTPXMoMSwwLGssVCksRT1zKGssVCxNLEEpO3JldHVybiAwPT09YyYmRT4wJiYoRS09YSksMT09PWMmJkU8MCYmKEUrPWEpLFtfLHcsUyxFXX0oZSxyLGwsYyx1LGgsZyxtLHgsYixfLHcpLE09bihULDQpLEE9TVswXSxTPU1bMV0sRT1NWzJdLEw9TVszXSxDPU1hdGguYWJzKEwpLyhhLzQpO01hdGguYWJzKDEtQyk8MWUtNyYmKEM9MSk7dmFyIFA9TWF0aC5tYXgoTWF0aC5jZWlsKEMpLDEpO0wvPVA7Zm9yKHZhciBPPTA7TzxQO08rKyl5LnB1c2gobyhFLEwpKSxFKz1MO3JldHVybiB5Lm1hcChmdW5jdGlvbih0KXt2YXIgZT1pKHRbMF0sdSxoLGIseCxBLFMpLHI9ZS54LG49ZS55LGE9aSh0WzFdLHUsaCxiLHgsQSxTKSxvPWEueCxzPWEueSxsPWkodFsyXSx1LGgsYix4LEEsUyk7cmV0dXJue3gxOnIseTE6bix4MjpvLHkyOnMseDpsLngseTpsLnl9fSl9LGUuZXhwb3J0cz1yLmRlZmF1bHR9LHt9XSw1MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyc2Utc3ZnLXBhdGgiKSxhPXQoImFicy1zdmctcGF0aCIpLGk9dCgibm9ybWFsaXplLXN2Zy1wYXRoIiksbz10KCJpcy1zdmctcGF0aCIpLHM9dCgiYXNzZXJ0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodCkmJjE9PT10Lmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiB0WzBdJiYodD10WzBdKTsic3RyaW5nIj09dHlwZW9mIHQmJihzKG8odCksIlN0cmluZyBpcyBub3QgYW4gU1ZHIHBhdGguIiksdD1uKHQpKTtpZihzKEFycmF5LmlzQXJyYXkodCksIkFyZ3VtZW50IHNob3VsZCBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzLiIpLHQ9YSh0KSwhKHQ9aSh0KSkubGVuZ3RoKXJldHVyblswLDAsMCwwXTtmb3IodmFyIGU9WzEvMCwxLzAsLTEvMCwtMS8wXSxyPTAsbD10Lmxlbmd0aDtyPGw7cisrKWZvcih2YXIgYz10W3JdLnNsaWNlKDEpLHU9MDt1PGMubGVuZ3RoO3UrPTIpY1t1KzBdPGVbMF0mJihlWzBdPWNbdSswXSksY1t1KzFdPGVbMV0mJihlWzFdPWNbdSsxXSksY1t1KzBdPmVbMl0mJihlWzJdPWNbdSswXSksY1t1KzFdPmVbM10mJihlWzNdPWNbdSsxXSk7cmV0dXJuIGV9fSx7ImFicy1zdmctcGF0aCI6NjMsYXNzZXJ0OjcwLCJpcy1zdmctcGF0aCI6NDI2LCJub3JtYWxpemUtc3ZnLXBhdGgiOjUzMywicGFyc2Utc3ZnLXBhdGgiOjQ2Mn1dLDUzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbz0wLHM9MCxsPTAsYz0wLHU9bnVsbCxoPW51bGwsZj0wLHA9MCxkPTAsZz10Lmxlbmd0aDtkPGc7ZCsrKXt2YXIgdj10W2RdLG09dlswXTtzd2l0Y2gobSl7Y2FzZSJNIjpsPXZbMV0sYz12WzJdO2JyZWFrO2Nhc2UiQSI6dmFyIHk9bih7cHg6ZixweTpwLGN4OnZbNl0sY3k6dls3XSxyeDp2WzFdLHJ5OnZbMl0seEF4aXNSb3RhdGlvbjp2WzNdLGxhcmdlQXJjRmxhZzp2WzRdLHN3ZWVwRmxhZzp2WzVdfSk7aWYoIXkubGVuZ3RoKWNvbnRpbnVlO2Zvcih2YXIgeCxiPTA7Yjx5Lmxlbmd0aDtiKyspeD15W2JdLHY9WyJDIix4LngxLHgueTEseC54Mix4LnkyLHgueCx4LnldLGI8eS5sZW5ndGgtMSYmci5wdXNoKHYpO2JyZWFrO2Nhc2UiUyI6dmFyIF89Zix3PXA7IkMiIT1lJiYiUyIhPWV8fChfKz1fLW8sdys9dy1zKSx2PVsiQyIsXyx3LHZbMV0sdlsyXSx2WzNdLHZbNF1dO2JyZWFrO2Nhc2UiVCI6IlEiPT1lfHwiVCI9PWU/KHU9MipmLXUsaD0yKnAtaCk6KHU9ZixoPXApLHY9aShmLHAsdSxoLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJRIjp1PXZbMV0saD12WzJdLHY9aShmLHAsdlsxXSx2WzJdLHZbM10sdls0XSk7YnJlYWs7Y2FzZSJMIjp2PWEoZixwLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJIIjp2PWEoZixwLHZbMV0scCk7YnJlYWs7Y2FzZSJWIjp2PWEoZixwLGYsdlsxXSk7YnJlYWs7Y2FzZSJaIjp2PWEoZixwLGwsYyl9ZT1tLGY9dlt2Lmxlbmd0aC0yXSxwPXZbdi5sZW5ndGgtMV0sdi5sZW5ndGg+ND8obz12W3YubGVuZ3RoLTRdLHM9dlt2Lmxlbmd0aC0zXSk6KG89ZixzPXApLHIucHVzaCh2KX1yZXR1cm4gcn07dmFyIG49dCgic3ZnLWFyYy10by1jdWJpYy1iZXppZXIiKTtmdW5jdGlvbiBhKHQsZSxyLG4pe3JldHVyblsiQyIsdCxlLHIsbixyLG5dfWZ1bmN0aW9uIGkodCxlLHIsbixhLGkpe3JldHVyblsiQyIsdC8zKzIvMypyLGUvMysyLzMqbixhLzMrMi8zKnIsaS8zKzIvMypuLGEsaV19fSx7InN2Zy1hcmMtdG8tY3ViaWMtYmV6aWVyIjo1MzF9XSw1MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4sYT10KCJzdmctcGF0aC1ib3VuZHMiKSxpPXQoInBhcnNlLXN2Zy1wYXRoIiksbz10KCJkcmF3LXN2Zy1wYXRoIikscz10KCJpcy1zdmctcGF0aCIpLGw9dCgiYml0bWFwLXNkZiIpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdT1jLmdldENvbnRleHQoIjJkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXModCkpdGhyb3cgRXJyb3IoIkFyZ3VtZW50IHNob3VsZCBiZSB2YWxpZCBzdmcgcGF0aCBzdHJpbmciKTtlfHwoZT17fSk7dmFyIHIsaDtlLnNoYXBlPyhyPWUuc2hhcGVbMF0saD1lLnNoYXBlWzFdKToocj1jLndpZHRoPWUud3x8ZS53aWR0aHx8MjAwLGg9Yy5oZWlnaHQ9ZS5ofHxlLmhlaWdodHx8MjAwKTt2YXIgZj1NYXRoLm1pbihyLGgpLHA9ZS5zdHJva2V8fDAsZD1lLnZpZXdib3h8fGUudmlld0JveHx8YSh0KSxnPVtyLyhkWzJdLWRbMF0pLGgvKGRbM10tZFsxXSldLHY9TWF0aC5taW4oZ1swXXx8MCxnWzFdfHwwKS8yO3UuZmlsbFN0eWxlPSJibGFjayIsdS5maWxsUmVjdCgwLDAscixoKSx1LmZpbGxTdHlsZT0id2hpdGUiLHAmJigibnVtYmVyIiE9dHlwZW9mIHAmJihwPTEpLHUuc3Ryb2tlU3R5bGU9cD4wPyJ3aGl0ZSI6ImJsYWNrIix1LmxpbmVXaWR0aD1NYXRoLmFicyhwKSk7aWYodS50cmFuc2xhdGUoLjUqciwuNSpoKSx1LnNjYWxlKHYsdiksZnVuY3Rpb24oKXtpZihudWxsIT1uKXJldHVybiBuO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIik7aWYodC5jYW52YXMud2lkdGg9dC5jYW52YXMuaGVpZ2h0PTEsIXdpbmRvdy5QYXRoMkQpcmV0dXJuIG49ITE7dmFyIGU9bmV3IFBhdGgyRCgiTTAsMGgxdjFoLTF2LTFaIik7dC5maWxsU3R5bGU9ImJsYWNrIix0LmZpbGwoZSk7dmFyIHI9dC5nZXRJbWFnZURhdGEoMCwwLDEsMSk7cmV0dXJuIG49ciYmci5kYXRhJiYyNTU9PT1yLmRhdGFbM119KCkpe3ZhciBtPW5ldyBQYXRoMkQodCk7dS5maWxsKG0pLHAmJnUuc3Ryb2tlKG0pfWVsc2V7dmFyIHk9aSh0KTtvKHUseSksdS5maWxsKCkscCYmdS5zdHJva2UoKX1yZXR1cm4gdS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGwodSx7Y3V0b2ZmOm51bGwhPWUuY3V0b2ZmP2UuY3V0b2ZmOi41LHJhZGl1czpudWxsIT1lLnJhZGl1cz9lLnJhZGl1czouNSpmfSl9fSx7ImJpdG1hcC1zZGYiOjk1LCJkcmF3LXN2Zy1wYXRoIjoxNzAsImlzLXN2Zy1wYXRoIjo0MjYsInBhcnNlLXN2Zy1wYXRoIjo0NjIsInN2Zy1wYXRoLWJvdW5kcyI6NTMyfV0sNTM1OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsYSl7dmFyIGE9YXx8e307dmFyIG89aVtlXTtvfHwobz1pW2VdPXsiICI6e2RhdGE6bmV3IEZsb2F0MzJBcnJheSgwKSxzaGFwZTouMn19KTt2YXIgcz1vW3JdO2lmKCFzKWlmKHIubGVuZ3RoPD0xfHwhL1xkLy50ZXN0KHIpKXM9b1tyXT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jZWxscyxyPXQucG9zaXRpb25zLG49bmV3IEZsb2F0MzJBcnJheSg2KmUubGVuZ3RoKSxhPTAsaT0wLG89MDtvPGUubGVuZ3RoOysrbylmb3IodmFyIHM9ZVtvXSxsPTA7bDwzOysrbCl7dmFyIGM9cltzW2xdXTtuW2ErK109Y1swXSxuW2ErK109Y1sxXSsxLjQsaT1NYXRoLm1heChjWzBdLGkpfXJldHVybntkYXRhOm4sc2hhcGU6aX19KG4ocix7dHJpYW5nbGVzOiEwLGZvbnQ6ZSx0ZXh0QWxpZ246YS50ZXh0QWxpZ258fCJsZWZ0Iix0ZXh0QmFzZWxpbmU6ImFscGhhYmV0aWMiLHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfX0pKTtlbHNle2Zvcih2YXIgbD1yLnNwbGl0KC8oXGR8XHMpLyksYz1uZXcgQXJyYXkobC5sZW5ndGgpLHU9MCxoPTAsZj0wO2Y8bC5sZW5ndGg7KytmKWNbZl09dChlLGxbZl0pLHUrPWNbZl0uZGF0YS5sZW5ndGgsaCs9Y1tmXS5zaGFwZSxmPjAmJihoKz0uMDIpO2Zvcih2YXIgcD1uZXcgRmxvYXQzMkFycmF5KHUpLGQ9MCxnPS0uNSpoLGY9MDtmPGMubGVuZ3RoOysrZil7Zm9yKHZhciB2PWNbZl0uZGF0YSxtPTA7bTx2Lmxlbmd0aDttKz0yKXBbZCsrXT12W21dK2cscFtkKytdPXZbbSsxXTtnKz1jW2ZdLnNoYXBlKy4wMn1zPW9bcl09e2RhdGE6cCxzaGFwZTpofX1yZXR1cm4gc307dmFyIG49dCgidmVjdG9yaXplLXRleHQiKSxhPXdpbmRvd3x8ci5nbG9iYWx8fHt9LGk9YS5fX1RFWFRfQ0FDSEV8fHt9O2EuX19URVhUX0NBQ0hFPXt9fSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7X3Byb2Nlc3M6NDg0LCJ2ZWN0b3JpemUtdGV4dCI6NTQ5fV0sNTM2OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQpe3ZhciByPS9eXHMrLyxuPS9ccyskLyxhPTAsaT10LnJvdW5kLG89dC5taW4scz10Lm1heCxsPXQucmFuZG9tO2Z1bmN0aW9uIGMoZSxsKXtpZihsPWx8fHt9LChlPWV8fCIiKWluc3RhbmNlb2YgYylyZXR1cm4gZTtpZighKHRoaXMgaW5zdGFuY2VvZiBjKSlyZXR1cm4gbmV3IGMoZSxsKTt2YXIgdT1mdW5jdGlvbihlKXt2YXIgYT17cjowLGc6MCxiOjB9LGk9MSxsPW51bGwsYz1udWxsLHU9bnVsbCxoPSExLGY9ITE7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1mdW5jdGlvbih0KXt0PXQucmVwbGFjZShyLCIiKS5yZXBsYWNlKG4sIiIpLnRvTG93ZXJDYXNlKCk7dmFyIGUsYT0hMTtpZihTW3RdKXQ9U1t0XSxhPSEwO2Vsc2UgaWYoInRyYW5zcGFyZW50Ij09dClyZXR1cm57cjowLGc6MCxiOjAsYTowLGZvcm1hdDoibmFtZSJ9O2lmKGU9ai5yZ2IuZXhlYyh0KSlyZXR1cm57cjplWzFdLGc6ZVsyXSxiOmVbM119O2lmKGU9ai5yZ2JhLmV4ZWModCkpcmV0dXJue3I6ZVsxXSxnOmVbMl0sYjplWzNdLGE6ZVs0XX07aWYoZT1qLmhzbC5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLGw6ZVszXX07aWYoZT1qLmhzbGEuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSxsOmVbM10sYTplWzRdfTtpZihlPWouaHN2LmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sdjplWzNdfTtpZihlPWouaHN2YS5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLHY6ZVszXSxhOmVbNF19O2lmKGU9ai5oZXg4LmV4ZWModCkpcmV0dXJue3I6TyhlWzFdKSxnOk8oZVsyXSksYjpPKGVbM10pLGE6UihlWzRdKSxmb3JtYXQ6YT8ibmFtZSI6ImhleDgifTtpZihlPWouaGV4Ni5leGVjKHQpKXJldHVybntyOk8oZVsxXSksZzpPKGVbMl0pLGI6TyhlWzNdKSxmb3JtYXQ6YT8ibmFtZSI6ImhleCJ9O2lmKGU9ai5oZXg0LmV4ZWModCkpcmV0dXJue3I6TyhlWzFdKyIiK2VbMV0pLGc6TyhlWzJdKyIiK2VbMl0pLGI6TyhlWzNdKyIiK2VbM10pLGE6UihlWzRdKyIiK2VbNF0pLGZvcm1hdDphPyJuYW1lIjoiaGV4OCJ9O2lmKGU9ai5oZXgzLmV4ZWModCkpcmV0dXJue3I6TyhlWzFdKyIiK2VbMV0pLGc6TyhlWzJdKyIiK2VbMl0pLGI6TyhlWzNdKyIiK2VbM10pLGZvcm1hdDphPyJuYW1lIjoiaGV4In07cmV0dXJuITF9KGUpKTsib2JqZWN0Ij09dHlwZW9mIGUmJihWKGUucikmJlYoZS5nKSYmVihlLmIpPyhwPWUucixkPWUuZyxnPWUuYixhPXtyOjI1NSpDKHAsMjU1KSxnOjI1NSpDKGQsMjU1KSxiOjI1NSpDKGcsMjU1KX0saD0hMCxmPSIlIj09PVN0cmluZyhlLnIpLnN1YnN0cigtMSk/InByZ2IiOiJyZ2IiKTpWKGUuaCkmJlYoZS5zKSYmVihlLnYpPyhsPUkoZS5zKSxjPUkoZS52KSxhPWZ1bmN0aW9uKGUscixuKXtlPTYqQyhlLDM2MCkscj1DKHIsMTAwKSxuPUMobiwxMDApO3ZhciBhPXQuZmxvb3IoZSksaT1lLWEsbz1uKigxLXIpLHM9biooMS1pKnIpLGw9biooMS0oMS1pKSpyKSxjPWElNjtyZXR1cm57cjoyNTUqW24scyxvLG8sbCxuXVtjXSxnOjI1NSpbbCxuLG4scyxvLG9dW2NdLGI6MjU1KltvLG8sbCxuLG4sc11bY119fShlLmgsbCxjKSxoPSEwLGY9ImhzdiIpOlYoZS5oKSYmVihlLnMpJiZWKGUubCkmJihsPUkoZS5zKSx1PUkoZS5sKSxhPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLGk7ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIHI8MCYmKHIrPTEpLHI+MSYmKHItPTEpLHI8MS82P3QrNiooZS10KSpyOnI8LjU/ZTpyPDIvMz90KyhlLXQpKigyLzMtcikqNjp0fWlmKHQ9Qyh0LDM2MCksZT1DKGUsMTAwKSxyPUMociwxMDApLDA9PT1lKW49YT1pPXI7ZWxzZXt2YXIgcz1yPC41P3IqKDErZSk6citlLXIqZSxsPTIqci1zO249byhsLHMsdCsxLzMpLGE9byhsLHMsdCksaT1vKGwscyx0LTEvMyl9cmV0dXJue3I6MjU1Km4sZzoyNTUqYSxiOjI1NSppfX0oZS5oLGwsdSksaD0hMCxmPSJoc2wiKSxlLmhhc093blByb3BlcnR5KCJhIikmJihpPWUuYSkpO3ZhciBwLGQsZztyZXR1cm4gaT1MKGkpLHtvazpoLGZvcm1hdDplLmZvcm1hdHx8ZixyOm8oMjU1LHMoYS5yLDApKSxnOm8oMjU1LHMoYS5nLDApKSxiOm8oMjU1LHMoYS5iLDApKSxhOml9fShlKTt0aGlzLl9vcmlnaW5hbElucHV0PWUsdGhpcy5fcj11LnIsdGhpcy5fZz11LmcsdGhpcy5fYj11LmIsdGhpcy5fYT11LmEsdGhpcy5fcm91bmRBPWkoMTAwKnRoaXMuX2EpLzEwMCx0aGlzLl9mb3JtYXQ9bC5mb3JtYXR8fHUuZm9ybWF0LHRoaXMuX2dyYWRpZW50VHlwZT1sLmdyYWRpZW50VHlwZSx0aGlzLl9yPDEmJih0aGlzLl9yPWkodGhpcy5fcikpLHRoaXMuX2c8MSYmKHRoaXMuX2c9aSh0aGlzLl9nKSksdGhpcy5fYjwxJiYodGhpcy5fYj1pKHRoaXMuX2IpKSx0aGlzLl9vaz11Lm9rLHRoaXMuX3RjX2lkPWErK31mdW5jdGlvbiB1KHQsZSxyKXt0PUModCwyNTUpLGU9QyhlLDI1NSkscj1DKHIsMjU1KTt2YXIgbixhLGk9cyh0LGUsciksbD1vKHQsZSxyKSxjPShpK2wpLzI7aWYoaT09bCluPWE9MDtlbHNle3ZhciB1PWktbDtzd2l0Y2goYT1jPi41P3UvKDItaS1sKTp1LyhpK2wpLGkpe2Nhc2UgdDpuPShlLXIpL3UrKGU8cj82OjApO2JyZWFrO2Nhc2UgZTpuPShyLXQpL3UrMjticmVhaztjYXNlIHI6bj0odC1lKS91KzR9bi89Nn1yZXR1cm57aDpuLHM6YSxsOmN9fWZ1bmN0aW9uIGgodCxlLHIpe3Q9Qyh0LDI1NSksZT1DKGUsMjU1KSxyPUMociwyNTUpO3ZhciBuLGEsaT1zKHQsZSxyKSxsPW8odCxlLHIpLGM9aSx1PWktbDtpZihhPTA9PT1pPzA6dS9pLGk9PWwpbj0wO2Vsc2V7c3dpdGNoKGkpe2Nhc2UgdDpuPShlLXIpL3UrKGU8cj82OjApO2JyZWFrO2Nhc2UgZTpuPShyLXQpL3UrMjticmVhaztjYXNlIHI6bj0odC1lKS91KzR9bi89Nn1yZXR1cm57aDpuLHM6YSx2OmN9fWZ1bmN0aW9uIGYodCxlLHIsbil7dmFyIGE9W3ooaSh0KS50b1N0cmluZygxNikpLHooaShlKS50b1N0cmluZygxNikpLHooaShyKS50b1N0cmluZygxNikpXTtyZXR1cm4gbiYmYVswXS5jaGFyQXQoMCk9PWFbMF0uY2hhckF0KDEpJiZhWzFdLmNoYXJBdCgwKT09YVsxXS5jaGFyQXQoMSkmJmFbMl0uY2hhckF0KDApPT1hWzJdLmNoYXJBdCgxKT9hWzBdLmNoYXJBdCgwKSthWzFdLmNoYXJBdCgwKSthWzJdLmNoYXJBdCgwKTphLmpvaW4oIiIpfWZ1bmN0aW9uIHAodCxlLHIsbil7cmV0dXJuW3ooRChuKSkseihpKHQpLnRvU3RyaW5nKDE2KSkseihpKGUpLnRvU3RyaW5nKDE2KSkseihpKHIpLnRvU3RyaW5nKDE2KSldLmpvaW4oIiIpfWZ1bmN0aW9uIGQodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLnMtPWUvMTAwLHIucz1QKHIucyksYyhyKX1mdW5jdGlvbiBnKHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5zKz1lLzEwMCxyLnM9UChyLnMpLGMocil9ZnVuY3Rpb24gdih0KXtyZXR1cm4gYyh0KS5kZXNhdHVyYXRlKDEwMCl9ZnVuY3Rpb24gbSh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIubCs9ZS8xMDAsci5sPVAoci5sKSxjKHIpfWZ1bmN0aW9uIHkodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b1JnYigpO3JldHVybiByLnI9cygwLG8oMjU1LHIuci1pKC1lLzEwMCoyNTUpKSksci5nPXMoMCxvKDI1NSxyLmctaSgtZS8xMDAqMjU1KSkpLHIuYj1zKDAsbygyNTUsci5iLWkoLWUvMTAwKjI1NSkpKSxjKHIpfWZ1bmN0aW9uIHgodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLmwtPWUvMTAwLHIubD1QKHIubCksYyhyKX1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9Yyh0KS50b0hzbCgpLG49KHIuaCtlKSUzNjA7cmV0dXJuIHIuaD1uPDA/MzYwK246bixjKHIpfWZ1bmN0aW9uIF8odCl7dmFyIGU9Yyh0KS50b0hzbCgpO3JldHVybiBlLmg9KGUuaCsxODApJTM2MCxjKGUpfWZ1bmN0aW9uIHcodCl7dmFyIGU9Yyh0KS50b0hzbCgpLHI9ZS5oO3JldHVybltjKHQpLGMoe2g6KHIrMTIwKSUzNjAsczplLnMsbDplLmx9KSxjKHtoOihyKzI0MCklMzYwLHM6ZS5zLGw6ZS5sfSldfWZ1bmN0aW9uIGsodCl7dmFyIGU9Yyh0KS50b0hzbCgpLHI9ZS5oO3JldHVybltjKHQpLGMoe2g6KHIrOTApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMTgwKSUzNjAsczplLnMsbDplLmx9KSxjKHtoOihyKzI3MCklMzYwLHM6ZS5zLGw6ZS5sfSldfWZ1bmN0aW9uIFQodCl7dmFyIGU9Yyh0KS50b0hzbCgpLHI9ZS5oO3JldHVybltjKHQpLGMoe2g6KHIrNzIpJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjE2KSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gTSh0LGUscil7ZT1lfHw2LHI9cnx8MzA7dmFyIG49Yyh0KS50b0hzbCgpLGE9MzYwL3IsaT1bYyh0KV07Zm9yKG4uaD0obi5oLShhKmU+PjEpKzcyMCklMzYwOy0tZTspbi5oPShuLmgrYSklMzYwLGkucHVzaChjKG4pKTtyZXR1cm4gaX1mdW5jdGlvbiBBKHQsZSl7ZT1lfHw2O2Zvcih2YXIgcj1jKHQpLnRvSHN2KCksbj1yLmgsYT1yLnMsaT1yLnYsbz1bXSxzPTEvZTtlLS07KW8ucHVzaChjKHtoOm4sczphLHY6aX0pKSxpPShpK3MpJTE7cmV0dXJuIG99Yy5wcm90b3R5cGU9e2lzRGFyazpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJyaWdodG5lc3MoKTwxMjh9LGlzTGlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0RhcmsoKX0saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9va30sZ2V0T3JpZ2luYWxJbnB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmlnaW5hbElucHV0fSxnZXRGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9ybWF0fSxnZXRBbHBoYTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hfSxnZXRCcmlnaHRuZXNzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b1JnYigpO3JldHVybigyOTkqdC5yKzU4Nyp0LmcrMTE0KnQuYikvMWUzfSxnZXRMdW1pbmFuY2U6ZnVuY3Rpb24oKXt2YXIgZSxyLG4sYT10aGlzLnRvUmdiKCk7cmV0dXJuIGU9YS5yLzI1NSxyPWEuZy8yNTUsbj1hLmIvMjU1LC4yMTI2KihlPD0uMDM5Mjg/ZS8xMi45Mjp0LnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpKSsuNzE1Mioocjw9LjAzOTI4P3IvMTIuOTI6dC5wb3coKHIrLjA1NSkvMS4wNTUsMi40KSkrLjA3MjIqKG48PS4wMzkyOD9uLzEyLjkyOnQucG93KChuKy4wNTUpLzEuMDU1LDIuNCkpfSxzZXRBbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYT1MKHQpLHRoaXMuX3JvdW5kQT1pKDEwMCp0aGlzLl9hKS8xMDAsdGhpc30sdG9Ic3Y6ZnVuY3Rpb24oKXt2YXIgdD1oKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKTtyZXR1cm57aDozNjAqdC5oLHM6dC5zLHY6dC52LGE6dGhpcy5fYX19LHRvSHN2U3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9aCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiksZT1pKDM2MCp0LmgpLHI9aSgxMDAqdC5zKSxuPWkoMTAwKnQudik7cmV0dXJuIDE9PXRoaXMuX2E/ImhzdigiK2UrIiwgIityKyIlLCAiK24rIiUpIjoiaHN2YSgiK2UrIiwgIityKyIlLCAiK24rIiUsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9Ic2w6ZnVuY3Rpb24oKXt2YXIgdD11KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKTtyZXR1cm57aDozNjAqdC5oLHM6dC5zLGw6dC5sLGE6dGhpcy5fYX19LHRvSHNsU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dSh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiksZT1pKDM2MCp0LmgpLHI9aSgxMDAqdC5zKSxuPWkoMTAwKnQubCk7cmV0dXJuIDE9PXRoaXMuX2E/ImhzbCgiK2UrIiwgIityKyIlLCAiK24rIiUpIjoiaHNsYSgiK2UrIiwgIityKyIlLCAiK24rIiUsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9IZXg6ZnVuY3Rpb24odCl7cmV0dXJuIGYodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdCl9LHRvSGV4U3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVybiIjIit0aGlzLnRvSGV4KHQpfSx0b0hleDg6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG89W3ooaSh0KS50b1N0cmluZygxNikpLHooaShlKS50b1N0cmluZygxNikpLHooaShyKS50b1N0cmluZygxNikpLHooRChuKSldO2lmKGEmJm9bMF0uY2hhckF0KDApPT1vWzBdLmNoYXJBdCgxKSYmb1sxXS5jaGFyQXQoMCk9PW9bMV0uY2hhckF0KDEpJiZvWzJdLmNoYXJBdCgwKT09b1syXS5jaGFyQXQoMSkmJm9bM10uY2hhckF0KDApPT1vWzNdLmNoYXJBdCgxKSlyZXR1cm4gb1swXS5jaGFyQXQoMCkrb1sxXS5jaGFyQXQoMCkrb1syXS5jaGFyQXQoMCkrb1szXS5jaGFyQXQoMCk7cmV0dXJuIG8uam9pbigiIil9KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EsdCl9LHRvSGV4OFN0cmluZzpmdW5jdGlvbih0KXtyZXR1cm4iIyIrdGhpcy50b0hleDgodCl9LHRvUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6aSh0aGlzLl9yKSxnOmkodGhpcy5fZyksYjppKHRoaXMuX2IpLGE6dGhpcy5fYX19LHRvUmdiU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PXRoaXMuX2E/InJnYigiK2kodGhpcy5fcikrIiwgIitpKHRoaXMuX2cpKyIsICIraSh0aGlzLl9iKSsiKSI6InJnYmEoIitpKHRoaXMuX3IpKyIsICIraSh0aGlzLl9nKSsiLCAiK2kodGhpcy5fYikrIiwgIit0aGlzLl9yb3VuZEErIikifSx0b1BlcmNlbnRhZ2VSZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjppKDEwMCpDKHRoaXMuX3IsMjU1KSkrIiUiLGc6aSgxMDAqQyh0aGlzLl9nLDI1NSkpKyIlIixiOmkoMTAwKkModGhpcy5fYiwyNTUpKSsiJSIsYTp0aGlzLl9hfX0sdG9QZXJjZW50YWdlUmdiU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PXRoaXMuX2E/InJnYigiK2koMTAwKkModGhpcy5fciwyNTUpKSsiJSwgIitpKDEwMCpDKHRoaXMuX2csMjU1KSkrIiUsICIraSgxMDAqQyh0aGlzLl9iLDI1NSkpKyIlKSI6InJnYmEoIitpKDEwMCpDKHRoaXMuX3IsMjU1KSkrIiUsICIraSgxMDAqQyh0aGlzLl9nLDI1NSkpKyIlLCAiK2koMTAwKkModGhpcy5fYiwyNTUpKSsiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b05hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuX2E/InRyYW5zcGFyZW50IjohKHRoaXMuX2E8MSkmJihFW2YodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsITApXXx8ITEpfSx0b0ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT0iIyIrcCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hKSxyPWUsbj10aGlzLl9ncmFkaWVudFR5cGU/IkdyYWRpZW50VHlwZSA9IDEsICI6IiI7aWYodCl7dmFyIGE9Yyh0KTtyPSIjIitwKGEuX3IsYS5fZyxhLl9iLGEuX2EpfXJldHVybiJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoIituKyJzdGFydENvbG9yc3RyPSIrZSsiLGVuZENvbG9yc3RyPSIrcisiKSJ9LHRvU3RyaW5nOmZ1bmN0aW9uKHQpe3ZhciBlPSEhdDt0PXR8fHRoaXMuX2Zvcm1hdDt2YXIgcj0hMSxuPXRoaXMuX2E8MSYmdGhpcy5fYT49MDtyZXR1cm4gZXx8IW58fCJoZXgiIT09dCYmImhleDYiIT09dCYmImhleDMiIT09dCYmImhleDQiIT09dCYmImhleDgiIT09dCYmIm5hbWUiIT09dD8oInJnYiI9PT10JiYocj10aGlzLnRvUmdiU3RyaW5nKCkpLCJwcmdiIj09PXQmJihyPXRoaXMudG9QZXJjZW50YWdlUmdiU3RyaW5nKCkpLCJoZXgiIT09dCYmImhleDYiIT09dHx8KHI9dGhpcy50b0hleFN0cmluZygpKSwiaGV4MyI9PT10JiYocj10aGlzLnRvSGV4U3RyaW5nKCEwKSksImhleDQiPT09dCYmKHI9dGhpcy50b0hleDhTdHJpbmcoITApKSwiaGV4OCI9PT10JiYocj10aGlzLnRvSGV4OFN0cmluZygpKSwibmFtZSI9PT10JiYocj10aGlzLnRvTmFtZSgpKSwiaHNsIj09PXQmJihyPXRoaXMudG9Ic2xTdHJpbmcoKSksImhzdiI9PT10JiYocj10aGlzLnRvSHN2U3RyaW5nKCkpLHJ8fHRoaXMudG9IZXhTdHJpbmcoKSk6Im5hbWUiPT09dCYmMD09PXRoaXMuX2E/dGhpcy50b05hbWUoKTp0aGlzLnRvUmdiU3RyaW5nKCl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcy50b1N0cmluZygpKX0sX2FwcGx5TW9kaWZpY2F0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbChlKSkpO3JldHVybiB0aGlzLl9yPXIuX3IsdGhpcy5fZz1yLl9nLHRoaXMuX2I9ci5fYix0aGlzLnNldEFscGhhKHIuX2EpLHRoaXN9LGxpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24obSxhcmd1bWVudHMpfSxicmlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih5LGFyZ3VtZW50cyl9LGRhcmtlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih4LGFyZ3VtZW50cyl9LGRlc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZCxhcmd1bWVudHMpfSxzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihnLGFyZ3VtZW50cyl9LGdyZXlzY2FsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih2LGFyZ3VtZW50cyl9LHNwaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oYixhcmd1bWVudHMpfSxfYXBwbHlDb21iaW5hdGlvbjpmdW5jdGlvbih0LGUpe3JldHVybiB0LmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGUpKSl9LGFuYWxvZ291czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKE0sYXJndW1lbnRzKX0sY29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKF8sYXJndW1lbnRzKX0sbW9ub2Nocm9tYXRpYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKEEsYXJndW1lbnRzKX0sc3BsaXRjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oVCxhcmd1bWVudHMpfSx0cmlhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHcsYXJndW1lbnRzKX0sdGV0cmFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oayxhcmd1bWVudHMpfX0sYy5mcm9tUmF0aW89ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciByPXt9O2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihyW25dPSJhIj09PW4/dFtuXTpJKHRbbl0pKTt0PXJ9cmV0dXJuIGModCxlKX0sYy5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKCF0fHwhZSkmJmModCkudG9SZ2JTdHJpbmcoKT09YyhlKS50b1JnYlN0cmluZygpfSxjLnJhbmRvbT1mdW5jdGlvbigpe3JldHVybiBjLmZyb21SYXRpbyh7cjpsKCksZzpsKCksYjpsKCl9KX0sYy5taXg9ZnVuY3Rpb24odCxlLHIpe3I9MD09PXI/MDpyfHw1MDt2YXIgbj1jKHQpLnRvUmdiKCksYT1jKGUpLnRvUmdiKCksaT1yLzEwMDtyZXR1cm4gYyh7cjooYS5yLW4ucikqaStuLnIsZzooYS5nLW4uZykqaStuLmcsYjooYS5iLW4uYikqaStuLmIsYTooYS5hLW4uYSkqaStuLmF9KX0sYy5yZWFkYWJpbGl0eT1mdW5jdGlvbihlLHIpe3ZhciBuPWMoZSksYT1jKHIpO3JldHVybih0Lm1heChuLmdldEx1bWluYW5jZSgpLGEuZ2V0THVtaW5hbmNlKCkpKy4wNSkvKHQubWluKG4uZ2V0THVtaW5hbmNlKCksYS5nZXRMdW1pbmFuY2UoKSkrLjA1KX0sYy5pc1JlYWRhYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLGk9Yy5yZWFkYWJpbGl0eSh0LGUpO3N3aXRjaChhPSExLChuPWZ1bmN0aW9uKHQpe3ZhciBlLHI7ZT0oKHQ9dHx8e2xldmVsOiJBQSIsc2l6ZToic21hbGwifSkubGV2ZWx8fCJBQSIpLnRvVXBwZXJDYXNlKCkscj0odC5zaXplfHwic21hbGwiKS50b0xvd2VyQ2FzZSgpLCJBQSIhPT1lJiYiQUFBIiE9PWUmJihlPSJBQSIpOyJzbWFsbCIhPT1yJiYibGFyZ2UiIT09ciYmKHI9InNtYWxsIik7cmV0dXJue2xldmVsOmUsc2l6ZTpyfX0ocikpLmxldmVsK24uc2l6ZSl7Y2FzZSJBQXNtYWxsIjpjYXNlIkFBQWxhcmdlIjphPWk+PTQuNTticmVhaztjYXNlIkFBbGFyZ2UiOmE9aT49MzticmVhaztjYXNlIkFBQXNtYWxsIjphPWk+PTd9cmV0dXJuIGF9LGMubW9zdFJlYWRhYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLGksbyxzPW51bGwsbD0wO2E9KHI9cnx8e30pLmluY2x1ZGVGYWxsYmFja0NvbG9ycyxpPXIubGV2ZWwsbz1yLnNpemU7Zm9yKHZhciB1PTA7dTxlLmxlbmd0aDt1KyspKG49Yy5yZWFkYWJpbGl0eSh0LGVbdV0pKT5sJiYobD1uLHM9YyhlW3VdKSk7cmV0dXJuIGMuaXNSZWFkYWJsZSh0LHMse2xldmVsOmksc2l6ZTpvfSl8fCFhP3M6KHIuaW5jbHVkZUZhbGxiYWNrQ29sb3JzPSExLGMubW9zdFJlYWRhYmxlKHQsWyIjZmZmIiwiIzAwMCJdLHIpKX07dmFyIFM9Yy5uYW1lcz17YWxpY2VibHVlOiJmMGY4ZmYiLGFudGlxdWV3aGl0ZToiZmFlYmQ3IixhcXVhOiIwZmYiLGFxdWFtYXJpbmU6IjdmZmZkNCIsYXp1cmU6ImYwZmZmZiIsYmVpZ2U6ImY1ZjVkYyIsYmlzcXVlOiJmZmU0YzQiLGJsYWNrOiIwMDAiLGJsYW5jaGVkYWxtb25kOiJmZmViY2QiLGJsdWU6IjAwZiIsYmx1ZXZpb2xldDoiOGEyYmUyIixicm93bjoiYTUyYTJhIixidXJseXdvb2Q6ImRlYjg4NyIsYnVybnRzaWVubmE6ImVhN2U1ZCIsY2FkZXRibHVlOiI1ZjllYTAiLGNoYXJ0cmV1c2U6IjdmZmYwMCIsY2hvY29sYXRlOiJkMjY5MWUiLGNvcmFsOiJmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiI2NDk1ZWQiLGNvcm5zaWxrOiJmZmY4ZGMiLGNyaW1zb246ImRjMTQzYyIsY3lhbjoiMGZmIixkYXJrYmx1ZToiMDAwMDhiIixkYXJrY3lhbjoiMDA4YjhiIixkYXJrZ29sZGVucm9kOiJiODg2MGIiLGRhcmtncmF5OiJhOWE5YTkiLGRhcmtncmVlbjoiMDA2NDAwIixkYXJrZ3JleToiYTlhOWE5IixkYXJra2hha2k6ImJkYjc2YiIsZGFya21hZ2VudGE6IjhiMDA4YiIsZGFya29saXZlZ3JlZW46IjU1NmIyZiIsZGFya29yYW5nZToiZmY4YzAwIixkYXJrb3JjaGlkOiI5OTMyY2MiLGRhcmtyZWQ6IjhiMDAwMCIsZGFya3NhbG1vbjoiZTk5NjdhIixkYXJrc2VhZ3JlZW46IjhmYmM4ZiIsZGFya3NsYXRlYmx1ZToiNDgzZDhiIixkYXJrc2xhdGVncmF5OiIyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IjJmNGY0ZiIsZGFya3R1cnF1b2lzZToiMDBjZWQxIixkYXJrdmlvbGV0OiI5NDAwZDMiLGRlZXBwaW5rOiJmZjE0OTMiLGRlZXBza3libHVlOiIwMGJmZmYiLGRpbWdyYXk6IjY5Njk2OSIsZGltZ3JleToiNjk2OTY5Iixkb2RnZXJibHVlOiIxZTkwZmYiLGZpcmVicmljazoiYjIyMjIyIixmbG9yYWx3aGl0ZToiZmZmYWYwIixmb3Jlc3RncmVlbjoiMjI4YjIyIixmdWNoc2lhOiJmMGYiLGdhaW5zYm9ybzoiZGNkY2RjIixnaG9zdHdoaXRlOiJmOGY4ZmYiLGdvbGQ6ImZmZDcwMCIsZ29sZGVucm9kOiJkYWE1MjAiLGdyYXk6IjgwODA4MCIsZ3JlZW46IjAwODAwMCIsZ3JlZW55ZWxsb3c6ImFkZmYyZiIsZ3JleToiODA4MDgwIixob25leWRldzoiZjBmZmYwIixob3RwaW5rOiJmZjY5YjQiLGluZGlhbnJlZDoiY2Q1YzVjIixpbmRpZ286IjRiMDA4MiIsaXZvcnk6ImZmZmZmMCIsa2hha2k6ImYwZTY4YyIsbGF2ZW5kZXI6ImU2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiZmZmMGY1IixsYXduZ3JlZW46IjdjZmMwMCIsbGVtb25jaGlmZm9uOiJmZmZhY2QiLGxpZ2h0Ymx1ZToiYWRkOGU2IixsaWdodGNvcmFsOiJmMDgwODAiLGxpZ2h0Y3lhbjoiZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiZmFmYWQyIixsaWdodGdyYXk6ImQzZDNkMyIsbGlnaHRncmVlbjoiOTBlZTkwIixsaWdodGdyZXk6ImQzZDNkMyIsbGlnaHRwaW5rOiJmZmI2YzEiLGxpZ2h0c2FsbW9uOiJmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IjIwYjJhYSIsbGlnaHRza3libHVlOiI4N2NlZmEiLGxpZ2h0c2xhdGVncmF5OiI3ODkiLGxpZ2h0c2xhdGVncmV5OiI3ODkiLGxpZ2h0c3RlZWxibHVlOiJiMGM0ZGUiLGxpZ2h0eWVsbG93OiJmZmZmZTAiLGxpbWU6IjBmMCIsbGltZWdyZWVuOiIzMmNkMzIiLGxpbmVuOiJmYWYwZTYiLG1hZ2VudGE6ImYwZiIsbWFyb29uOiI4MDAwMDAiLG1lZGl1bWFxdWFtYXJpbmU6IjY2Y2RhYSIsbWVkaXVtYmx1ZToiMDAwMGNkIixtZWRpdW1vcmNoaWQ6ImJhNTVkMyIsbWVkaXVtcHVycGxlOiI5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIzY2IzNzEiLG1lZGl1bXNsYXRlYmx1ZToiN2I2OGVlIixtZWRpdW1zcHJpbmdncmVlbjoiMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IjQ4ZDFjYyIsbWVkaXVtdmlvbGV0cmVkOiJjNzE1ODUiLG1pZG5pZ2h0Ymx1ZToiMTkxOTcwIixtaW50Y3JlYW06ImY1ZmZmYSIsbWlzdHlyb3NlOiJmZmU0ZTEiLG1vY2Nhc2luOiJmZmU0YjUiLG5hdmFqb3doaXRlOiJmZmRlYWQiLG5hdnk6IjAwMDA4MCIsb2xkbGFjZToiZmRmNWU2IixvbGl2ZToiODA4MDAwIixvbGl2ZWRyYWI6IjZiOGUyMyIsb3JhbmdlOiJmZmE1MDAiLG9yYW5nZXJlZDoiZmY0NTAwIixvcmNoaWQ6ImRhNzBkNiIscGFsZWdvbGRlbnJvZDoiZWVlOGFhIixwYWxlZ3JlZW46Ijk4ZmI5OCIscGFsZXR1cnF1b2lzZToiYWZlZWVlIixwYWxldmlvbGV0cmVkOiJkYjcwOTMiLHBhcGF5YXdoaXA6ImZmZWZkNSIscGVhY2hwdWZmOiJmZmRhYjkiLHBlcnU6ImNkODUzZiIscGluazoiZmZjMGNiIixwbHVtOiJkZGEwZGQiLHBvd2RlcmJsdWU6ImIwZTBlNiIscHVycGxlOiI4MDAwODAiLHJlYmVjY2FwdXJwbGU6IjY2MzM5OSIscmVkOiJmMDAiLHJvc3licm93bjoiYmM4ZjhmIixyb3lhbGJsdWU6IjQxNjllMSIsc2FkZGxlYnJvd246IjhiNDUxMyIsc2FsbW9uOiJmYTgwNzIiLHNhbmR5YnJvd246ImY0YTQ2MCIsc2VhZ3JlZW46IjJlOGI1NyIsc2Vhc2hlbGw6ImZmZjVlZSIsc2llbm5hOiJhMDUyMmQiLHNpbHZlcjoiYzBjMGMwIixza3libHVlOiI4N2NlZWIiLHNsYXRlYmx1ZToiNmE1YWNkIixzbGF0ZWdyYXk6IjcwODA5MCIsc2xhdGVncmV5OiI3MDgwOTAiLHNub3c6ImZmZmFmYSIsc3ByaW5nZ3JlZW46IjAwZmY3ZiIsc3RlZWxibHVlOiI0NjgyYjQiLHRhbjoiZDJiNDhjIix0ZWFsOiIwMDgwODAiLHRoaXN0bGU6ImQ4YmZkOCIsdG9tYXRvOiJmZjYzNDciLHR1cnF1b2lzZToiNDBlMGQwIix2aW9sZXQ6ImVlODJlZSIsd2hlYXQ6ImY1ZGViMyIsd2hpdGU6ImZmZiIsd2hpdGVzbW9rZToiZjVmNWY1Iix5ZWxsb3c6ImZmMCIseWVsbG93Z3JlZW46IjlhY2QzMiJ9LEU9Yy5oZXhOYW1lcz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVt0W3JdXT1yKTtyZXR1cm4gZX0oUyk7ZnVuY3Rpb24gTCh0KXtyZXR1cm4gdD1wYXJzZUZsb2F0KHQpLChpc05hTih0KXx8dDwwfHx0PjEpJiYodD0xKSx0fWZ1bmN0aW9uIEMoZSxyKXsoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYtMSE9dC5pbmRleE9mKCIuIikmJjE9PT1wYXJzZUZsb2F0KHQpfSkoZSkmJihlPSIxMDAlIik7dmFyIG49ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYtMSE9dC5pbmRleE9mKCIlIil9KGUpO3JldHVybiBlPW8ocixzKDAscGFyc2VGbG9hdChlKSkpLG4mJihlPXBhcnNlSW50KGUqciwxMCkvMTAwKSx0LmFicyhlLXIpPDFlLTY/MTplJXIvcGFyc2VGbG9hdChyKX1mdW5jdGlvbiBQKHQpe3JldHVybiBvKDEscygwLHQpKX1mdW5jdGlvbiBPKHQpe3JldHVybiBwYXJzZUludCh0LDE2KX1mdW5jdGlvbiB6KHQpe3JldHVybiAxPT10Lmxlbmd0aD8iMCIrdDoiIit0fWZ1bmN0aW9uIEkodCl7cmV0dXJuIHQ8PTEmJih0PTEwMCp0KyIlIiksdH1mdW5jdGlvbiBEKGUpe3JldHVybiB0LnJvdW5kKDI1NSpwYXJzZUZsb2F0KGUpKS50b1N0cmluZygxNil9ZnVuY3Rpb24gUih0KXtyZXR1cm4gTyh0KS8yNTV9dmFyIEYsQixOLGo9KEI9IltcXHN8XFwoXSsoIisoRj0iKD86Wy1cXCtdP1xcZCpcXC5cXGQrJT8pfCg/OlstXFwrXT9cXGQrJT8pIikrIilbLHxcXHNdKygiK0YrIilbLHxcXHNdKygiK0YrIilcXHMqXFwpPyIsTj0iW1xcc3xcXChdKygiK0YrIilbLHxcXHNdKygiK0YrIilbLHxcXHNdKygiK0YrIilbLHxcXHNdKygiK0YrIilcXHMqXFwpPyIse0NTU19VTklUOm5ldyBSZWdFeHAoRikscmdiOm5ldyBSZWdFeHAoInJnYiIrQikscmdiYTpuZXcgUmVnRXhwKCJyZ2JhIitOKSxoc2w6bmV3IFJlZ0V4cCgiaHNsIitCKSxoc2xhOm5ldyBSZWdFeHAoImhzbGEiK04pLGhzdjpuZXcgUmVnRXhwKCJoc3YiK0IpLGhzdmE6bmV3IFJlZ0V4cCgiaHN2YSIrTiksaGV4MzovXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4NjovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pJC8saGV4NDovXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KSQvLGhleDg6L14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkL30pO2Z1bmN0aW9uIFYodCl7cmV0dXJuISFqLkNTU19VTklULmV4ZWModCl9InVuZGVmaW5lZCIhPXR5cGVvZiBlJiZlLmV4cG9ydHM/ZS5leHBvcnRzPWM6d2luZG93LnRpbnljb2xvcj1jfShNYXRoKX0se31dLDUzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9YSxlLmV4cG9ydHMuZmxvYXQzMj1lLmV4cG9ydHMuZmxvYXQ9YSxlLmV4cG9ydHMuZnJhY3QzMj1lLmV4cG9ydHMuZnJhY3Q9ZnVuY3Rpb24odCl7aWYodC5sZW5ndGgpe2Zvcih2YXIgZT1hKHQpLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspZVtyXT10W3JdLWVbcl07cmV0dXJuIGV9cmV0dXJuIGEodC1hKHQpKX07dmFyIG49bmV3IEZsb2F0MzJBcnJheSgxKTtmdW5jdGlvbiBhKHQpe2lmKHQubGVuZ3RoKXtpZih0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KXJldHVybiB0O3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkodCk7cmV0dXJuIGUuc2V0KHQpLGV9cmV0dXJuIG5bMF09dCxuWzBdfX0se31dLDUzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwYXJzZS11bml0Iik7ZS5leHBvcnRzPW87dmFyIGE9OTY7ZnVuY3Rpb24gaSh0LGUpe3ZhciByPW4oZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpKTtyZXR1cm4gclswXSpvKHJbMV0sdCl9ZnVuY3Rpb24gbyh0LGUpe3N3aXRjaChlPWV8fGRvY3VtZW50LmJvZHksdD0odHx8InB4IikudHJpbSgpLnRvTG93ZXJDYXNlKCksZSE9PXdpbmRvdyYmZSE9PWRvY3VtZW50fHwoZT1kb2N1bWVudC5ib2R5KSx0KXtjYXNlIiUiOnJldHVybiBlLmNsaWVudEhlaWdodC8xMDA7Y2FzZSJjaCI6Y2FzZSJleCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5zdHlsZVsiZm9udC1zaXplIl09IjEyOCIrdCxlLmFwcGVuZENoaWxkKHIpO3ZhciBuPWkociwiZm9udC1zaXplIikvMTI4O3JldHVybiBlLnJlbW92ZUNoaWxkKHIpLG59KHQsZSk7Y2FzZSJlbSI6cmV0dXJuIGkoZSwiZm9udC1zaXplIik7Y2FzZSJyZW0iOnJldHVybiBpKGRvY3VtZW50LmJvZHksImZvbnQtc2l6ZSIpO2Nhc2UidnciOnJldHVybiB3aW5kb3cuaW5uZXJXaWR0aC8xMDA7Y2FzZSJ2aCI6cmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodC8xMDA7Y2FzZSJ2bWluIjpyZXR1cm4gTWF0aC5taW4od2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZSJ2bWF4IjpyZXR1cm4gTWF0aC5tYXgod2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZSJpbiI6cmV0dXJuIGE7Y2FzZSJjbSI6cmV0dXJuIGEvMi41NDtjYXNlIm1tIjpyZXR1cm4gYS8yNS40O2Nhc2UicHQiOnJldHVybiBhLzcyO2Nhc2UicGMiOnJldHVybiBhLzZ9cmV0dXJuIDF9fSx7InBhcnNlLXVuaXQiOjQ2M31dLDUzOTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuO249dGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHI9ZnVuY3Rpb24odCl7aWYobnVsbD09KHI9dC50cmFuc2Zvcm0pKXJldHVybiBlO3ZhciByLG4sYSxpPXIuc2NhbGVbMF0sbz1yLnNjYWxlWzFdLHM9ci50cmFuc2xhdGVbMF0sbD1yLnRyYW5zbGF0ZVsxXTtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KG49YT0wKSx0WzBdPShuKz10WzBdKSppK3MsdFsxXT0oYSs9dFsxXSkqbytsLHR9fSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXQuYmJveDtmdW5jdGlvbiBuKHQpe2xbMF09dFswXSxsWzFdPXRbMV0scyhsKSxsWzBdPGMmJihjPWxbMF0pLGxbMF0+aCYmKGg9bFswXSksbFsxXTx1JiYodT1sWzFdKSxsWzFdPmYmJihmPWxbMV0pfWZ1bmN0aW9uIGEodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnQuZ2VvbWV0cmllcy5mb3JFYWNoKGEpO2JyZWFrO2Nhc2UiUG9pbnQiOm4odC5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZSJNdWx0aVBvaW50Ijp0LmNvb3JkaW5hdGVzLmZvckVhY2gobil9fWlmKCFlKXt2YXIgaSxvLHM9cih0KSxsPW5ldyBBcnJheSgyKSxjPTEvMCx1PWMsaD0tYyxmPS1jO2ZvcihvIGluIHQuYXJjcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMSxyPXQubGVuZ3RoOysrZTxyOylpPXRbZV0sbFswXT1pWzBdLGxbMV09aVsxXSxzKGwsZSksbFswXTxjJiYoYz1sWzBdKSxsWzBdPmgmJihoPWxbMF0pLGxbMV08dSYmKHU9bFsxXSksbFsxXT5mJiYoZj1sWzFdKX0pLHQub2JqZWN0cylhKHQub2JqZWN0c1tvXSk7ZT10LmJib3g9W2MsdSxoLGZdfXJldHVybiBlfSxhPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5sZW5ndGgsYT1uLWU7YTwtLW47KXI9dFthXSx0W2ErK109dFtuXSx0W25dPXJ9O2Z1bmN0aW9uIGkodCxlKXt2YXIgcj1lLmlkLG49ZS5iYm94LGE9bnVsbD09ZS5wcm9wZXJ0aWVzP3t9OmUucHJvcGVydGllcyxpPW8odCxlKTtyZXR1cm4gbnVsbD09ciYmbnVsbD09bj97dHlwZToiRmVhdHVyZSIscHJvcGVydGllczphLGdlb21ldHJ5Oml9Om51bGw9PW4/e3R5cGU6IkZlYXR1cmUiLGlkOnIscHJvcGVydGllczphLGdlb21ldHJ5Oml9Ont0eXBlOiJGZWF0dXJlIixpZDpyLGJib3g6bixwcm9wZXJ0aWVzOmEsZ2VvbWV0cnk6aX19ZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXIodCksaT10LmFyY3M7ZnVuY3Rpb24gbyh0LGUpe2UubGVuZ3RoJiZlLnBvcCgpO2Zvcih2YXIgcj1pW3Q8MD9+dDp0XSxvPTAscz1yLmxlbmd0aDtvPHM7KytvKWUucHVzaChuKHJbb10uc2xpY2UoKSxvKSk7dDwwJiZhKGUscyl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbih0LnNsaWNlKCkpfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3Ipbyh0W3JdLGUpO3JldHVybiBlLmxlbmd0aDwyJiZlLnB1c2goZVswXS5zbGljZSgpKSxlfWZ1bmN0aW9uIGModCl7Zm9yKHZhciBlPWwodCk7ZS5sZW5ndGg8NDspZS5wdXNoKGVbMF0uc2xpY2UoKSk7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5tYXAoYyl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLnR5cGU7c3dpdGNoKG4pe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpyZXR1cm57dHlwZTpuLGdlb21ldHJpZXM6ZS5nZW9tZXRyaWVzLm1hcCh0KX07Y2FzZSJQb2ludCI6cj1zKGUuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2UiTXVsdGlQb2ludCI6cj1lLmNvb3JkaW5hdGVzLm1hcChzKTticmVhaztjYXNlIkxpbmVTdHJpbmciOnI9bChlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyPWUuYXJjcy5tYXAobCk7YnJlYWs7Y2FzZSJQb2x5Z29uIjpyPXUoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6cj1lLmFyY3MubWFwKHUpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJue3R5cGU6bixjb29yZGluYXRlczpyfX0oZSl9dmFyIHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fSxuPXt9LGE9e30saT1bXSxvPS0xO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIG4gaW4gdCl7dmFyIGE9dFtuXTtkZWxldGUgZVthLnN0YXJ0XSxkZWxldGUgYS5zdGFydCxkZWxldGUgYS5lbmQsYS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdDwwP350OnRdPTF9KSxpLnB1c2goYSl9fXJldHVybiBlLmZvckVhY2goZnVuY3Rpb24ocixuKXt2YXIgYSxpPXQuYXJjc1tyPDA/fnI6cl07aS5sZW5ndGg8MyYmIWlbMV1bMF0mJiFpWzFdWzFdJiYoYT1lWysrb10sZVtvXT1yLGVbbl09YSl9KSxlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHIsaSxvPWZ1bmN0aW9uKGUpe3ZhciByLG49dC5hcmNzW2U8MD9+ZTplXSxhPW5bMF07dC50cmFuc2Zvcm0/KHI9WzAsMF0sbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbMF0rPXRbMF0sclsxXSs9dFsxXX0pKTpyPW5bbi5sZW5ndGgtMV07cmV0dXJuIGU8MD9bcixhXTpbYSxyXX0oZSkscz1vWzBdLGw9b1sxXTtpZihyPWFbc10paWYoZGVsZXRlIGFbci5lbmRdLHIucHVzaChlKSxyLmVuZD1sLGk9bltsXSl7ZGVsZXRlIG5baS5zdGFydF07dmFyIGM9aT09PXI/cjpyLmNvbmNhdChpKTtuW2Muc3RhcnQ9ci5zdGFydF09YVtjLmVuZD1pLmVuZF09Y31lbHNlIG5bci5zdGFydF09YVtyLmVuZF09cjtlbHNlIGlmKHI9bltsXSlpZihkZWxldGUgbltyLnN0YXJ0XSxyLnVuc2hpZnQoZSksci5zdGFydD1zLGk9YVtzXSl7ZGVsZXRlIGFbaS5lbmRdO3ZhciB1PWk9PT1yP3I6aS5jb25jYXQocik7blt1LnN0YXJ0PWkuc3RhcnRdPWFbdS5lbmQ9ci5lbmRdPXV9ZWxzZSBuW3Iuc3RhcnRdPWFbci5lbmRdPXI7ZWxzZSBuWyhyPVtlXSkuc3RhcnQ9c109YVtyLmVuZD1sXT1yfSkscyhhLG4pLHMobixhKSxlLmZvckVhY2goZnVuY3Rpb24odCl7clt0PDA/fnQ6dF18fGkucHVzaChbdF0pfSksaX07ZnVuY3Rpb24gbCh0LGUscil7dmFyIG4sYSxpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSluPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhPVtdLGk9W107ZnVuY3Rpb24gbyh0KXt2YXIgZT10PDA/fnQ6dDsoaVtlXXx8KGlbZV09W10pKS5wdXNoKHtpOnQsZzpufSl9ZnVuY3Rpb24gcyh0KXt0LmZvckVhY2gobyl9ZnVuY3Rpb24gbCh0KXt0LmZvckVhY2gocyl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7c3dpdGNoKG49ZSxlLnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlIkxpbmVTdHJpbmciOnMoZS5hcmNzKTticmVhaztjYXNlIk11bHRpTGluZVN0cmluZyI6Y2FzZSJQb2x5Z29uIjpsKGUuYXJjcyk7YnJlYWs7Y2FzZSJNdWx0aVBvbHlnb24iOmUuYXJjcy5mb3JFYWNoKGwpfX0oZSksaS5mb3JFYWNoKG51bGw9PXI/ZnVuY3Rpb24odCl7YS5wdXNoKHRbMF0uaSl9OmZ1bmN0aW9uKHQpe3IodFswXS5nLHRbdC5sZW5ndGgtMV0uZykmJmEucHVzaCh0WzBdLmkpfSksYX0oMCxlLHIpO2Vsc2UgZm9yKGE9MCxuPW5ldyBBcnJheShpPXQuYXJjcy5sZW5ndGgpO2E8aTsrK2EpblthXT1hO3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGFyY3M6cyh0LG4pfX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9e30sbj1bXSxhPVtdO2Z1bmN0aW9uIGkodCl7dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXsocltlPWU8MD9+ZTplXXx8KHJbZV09W10pKS5wdXNoKHQpfSl9KSxuLnB1c2godCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsbj10Lmxlbmd0aCxhPXRbbi0xXSxpPTA7KytyPG47KWU9YSxhPXRbcl0saSs9ZVswXSphWzFdLWVbMV0qYVswXTtyZXR1cm4gTWF0aC5hYnMoaSl9KG8odCx7dHlwZToiUG9seWdvbiIsYXJjczpbZV19KS5jb29yZGluYXRlc1swXSl9cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbiB0KGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlIlBvbHlnb24iOmkoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6ZS5hcmNzLmZvckVhY2goaSl9fSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCF0Ll8pe3ZhciBlPVtdLG49W3RdO2Zvcih0Ll89MSxhLnB1c2goZSk7dD1uLnBvcCgpOyllLnB1c2godCksdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuX3x8KHQuXz0xLG4ucHVzaCh0KSl9KX0pfSl9fSksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RlbGV0ZSB0Ll99KSx7dHlwZToiTXVsdGlQb2x5Z29uIixhcmNzOmEubWFwKGZ1bmN0aW9uKGUpe3ZhciBuLGE9W107aWYoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0ubGVuZ3RoPDImJmEucHVzaCh0KX0pfSl9KSwobj0oYT1zKHQsYSkpLmxlbmd0aCk+MSlmb3IodmFyIGksbyxjPTEsdT1sKGFbMF0pO2M8bjsrK2MpKGk9bChhW2NdKSk+dSYmKG89YVswXSxhWzBdPWFbY10sYVtjXT1vLHU9aSk7cmV0dXJuIGF9KX19dmFyIHU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjspe3ZhciBhPXIrbj4+PjE7dFthXTxlP3I9YSsxOm49YX1yZXR1cm4gcn07dC5iYm94PW4sdC5mZWF0dXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGU/e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczplLmdlb21ldHJpZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBpKHQsZSl9KX06aSh0LGUpfSx0Lm1lc2g9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHQubWVzaEFyY3M9bCx0Lm1lcmdlPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQsYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSx0Lm1lcmdlQXJjcz1jLHQubmVpZ2hib3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIG4odCxyKXt0LmZvckVhY2goZnVuY3Rpb24odCl7dDwwJiYodD1+dCk7dmFyIG49ZVt0XTtuP24ucHVzaChyKTplW3RdPVtyXX0pfWZ1bmN0aW9uIGEodCxlKXt0LmZvckVhY2goZnVuY3Rpb24odCl7bih0LGUpfSl9dmFyIGk9e0xpbmVTdHJpbmc6bixNdWx0aUxpbmVTdHJpbmc6YSxQb2x5Z29uOmEsTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2EodCxlKX0pfX07Zm9yKHZhciBvIGluIHQuZm9yRWFjaChmdW5jdGlvbiB0KGUscil7Ikdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGU/ZS5nZW9tZXRyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7dChlLHIpfSk6ZS50eXBlIGluIGkmJmlbZS50eXBlXShlLmFyY3Mscil9KSxlKWZvcih2YXIgcz1lW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpZm9yKHZhciBoPWMrMTtoPGw7KytoKXt2YXIgZixwPXNbY10sZD1zW2hdOyhmPXJbcF0pW289dShmLGQpXSE9PWQmJmYuc3BsaWNlKG8sMCxkKSwoZj1yW2RdKVtvPXUoZixwKV0hPT1wJiZmLnNwbGljZShvLDAscCl9cmV0dXJuIHJ9LHQucXVhbnRpemU9ZnVuY3Rpb24odCxlKXtpZighKChlPU1hdGguZmxvb3IoZSkpPj0yKSl0aHJvdyBuZXcgRXJyb3IoIm4gbXVzdCBiZSBcdTIyNjUyIik7aWYodC50cmFuc2Zvcm0pdGhyb3cgbmV3IEVycm9yKCJhbHJlYWR5IHF1YW50aXplZCIpO3ZhciByLGE9bih0KSxpPWFbMF0sbz0oYVsyXS1pKS8oZS0xKXx8MSxzPWFbMV0sbD0oYVszXS1zKS8oZS0xKXx8MTtmdW5jdGlvbiBjKHQpe3RbMF09TWF0aC5yb3VuZCgodFswXS1pKS9vKSx0WzFdPU1hdGgucm91bmQoKHRbMV0tcykvbCl9ZnVuY3Rpb24gdSh0KXtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6dC5nZW9tZXRyaWVzLmZvckVhY2godSk7YnJlYWs7Y2FzZSJQb2ludCI6Yyh0LmNvb3JkaW5hdGVzKTticmVhaztjYXNlIk11bHRpUG9pbnQiOnQuY29vcmRpbmF0ZXMuZm9yRWFjaChjKX19Zm9yKHIgaW4gdC5hcmNzLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixhPTEsYz0xLHU9dC5sZW5ndGgsaD10WzBdLGY9aFswXT1NYXRoLnJvdW5kKChoWzBdLWkpL28pLHA9aFsxXT1NYXRoLnJvdW5kKChoWzFdLXMpL2wpO2E8dTsrK2EpaD10W2FdLHI9TWF0aC5yb3VuZCgoaFswXS1pKS9vKSxuPU1hdGgucm91bmQoKGhbMV0tcykvbCkscj09PWYmJm49PT1wfHwoKGU9dFtjKytdKVswXT1yLWYsZj1yLGVbMV09bi1wLHA9bik7YzwyJiYoKGU9dFtjKytdKVswXT0wLGVbMV09MCksdC5sZW5ndGg9Y30pLHQub2JqZWN0cyl1KHQub2JqZWN0c1tyXSk7cmV0dXJuIHQudHJhbnNmb3JtPXtzY2FsZTpbbyxsXSx0cmFuc2xhdGU6W2ksc119LHR9LHQudHJhbnNmb3JtPXIsdC51bnRyYW5zZm9ybT1mdW5jdGlvbih0KXtpZihudWxsPT0ocj10LnRyYW5zZm9ybSkpcmV0dXJuIGU7dmFyIHIsbixhLGk9ci5zY2FsZVswXSxvPXIuc2NhbGVbMV0scz1yLnRyYW5zbGF0ZVswXSxsPXIudHJhbnNsYXRlWzFdO3JldHVybiBmdW5jdGlvbih0LGUpe2V8fChuPWE9MCk7dmFyIHI9TWF0aC5yb3VuZCgodFswXS1zKS9pKSxjPU1hdGgucm91bmQoKHRbMV0tbCkvbyk7cmV0dXJuIHRbMF09ci1uLG49cix0WzFdPWMtYSxhPWMsdH19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0oIm9iamVjdCI9PXR5cGVvZiByJiYidW5kZWZpbmVkIiE9dHlwZW9mIGU/cjpuLnRvcG9qc29uPW4udG9wb2pzb258fHt9KX0se31dLDU0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybltdO2lmKDA9PT10KXJldHVybltbMF1dO2Zvcih2YXIgZT0wfE1hdGgucm91bmQoaSh0KzEpKSxyPVtdLG89MDtvPGU7KytvKXtmb3IodmFyIHM9bi51bnJhbmsodCxvKSxsPVswXSxjPTAsdT0wO3U8cy5sZW5ndGg7Kyt1KWMrPTE8PHNbdV0sbC5wdXNoKGMpO2Eocyk8MSYmKGxbMF09YyxsW3RdPTApLHIucHVzaChsKX1yZXR1cm4gcn07dmFyIG49dCgicGVybXV0YXRpb24tcmFuayIpLGE9dCgicGVybXV0YXRpb24tcGFyaXR5IiksaT10KCJnYW1tYSIpfSx7Z2FtbWE6MjM0LCJwZXJtdXRhdGlvbi1wYXJpdHkiOjQ2NSwicGVybXV0YXRpb24tcmFuayI6NDY2fV0sNTQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC51cHx8WzAsMSwwXSxuPXQucmlnaHR8fGgociksYT10LnJhZGl1c3x8MSxpPXQudGhldGF8fDAsdT10LnBoaXx8MDtpZihlPVtdLnNsaWNlLmNhbGwoZSwwLDMpLHI9W10uc2xpY2UuY2FsbChyLDAsMykscyhyLHIpLG49W10uc2xpY2UuY2FsbChuLDAsMykscyhuLG4pLCJleWUiaW4gdCl7dmFyIHA9dC5leWUsZD1bcFswXS1lWzBdLHBbMV0tZVsxXSxwWzJdLWVbMl1dO28obixkLHIpLGMoblswXSxuWzFdLG5bMl0pPDFlLTY/bj1oKHIpOnMobixuKSxhPWMoZFswXSxkWzFdLGRbMl0pO3ZhciBnPWwocixkKS9hLHY9bChuLGQpL2E7dT1NYXRoLmFjb3MoZyksaT1NYXRoLmFjb3Modil9cmV0dXJuIGE9TWF0aC5sb2coYSksbmV3IGYodC56b29tTWluLHQuem9vbU1heCxlLHIsbixhLGksdSl9O3ZhciBuPXQoImZpbHRlcmVkLXZlY3RvciIpLGE9dCgiZ2wtbWF0NC9pbnZlcnQiKSxpPXQoImdsLW1hdDQvcm90YXRlIiksbz10KCJnbC12ZWMzL2Nyb3NzIikscz10KCJnbC12ZWMzL25vcm1hbGl6ZSIpLGw9dCgiZ2wtdmVjMy9kb3QiKTtmdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiB1KHQpe3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KC0xLHQpKX1mdW5jdGlvbiBoKHQpe3ZhciBlPU1hdGguYWJzKHRbMF0pLHI9TWF0aC5hYnModFsxXSksbj1NYXRoLmFicyh0WzJdKSxhPVswLDAsMF07ZT5NYXRoLm1heChyLG4pP2FbMl09MTpyPk1hdGgubWF4KGUsbik/YVswXT0xOmFbMV09MTtmb3IodmFyIGk9MCxvPTAsbD0wO2w8MzsrK2wpaSs9dFtsXSp0W2xdLG8rPWFbbF0qdFtsXTtmb3IobD0wO2w8MzsrK2wpYVtsXS09by9pKnRbbF07cmV0dXJuIHMoYSxhKSxhfWZ1bmN0aW9uIGYodCxlLHIsYSxpLG8scyxsKXt0aGlzLmNlbnRlcj1uKHIpLHRoaXMudXA9bihhKSx0aGlzLnJpZ2h0PW4oaSksdGhpcy5yYWRpdXM9bihbb10pLHRoaXMuYW5nbGU9bihbcyxsXSksdGhpcy5hbmdsZS5ib3VuZHM9W1stMS8wLC1NYXRoLlBJLzJdLFsxLzAsTWF0aC5QSS8yXV0sdGhpcy5zZXREaXN0YW5jZUxpbWl0cyh0LGUpLHRoaXMuY29tcHV0ZWRDZW50ZXI9dGhpcy5jZW50ZXIuY3VydmUoMCksdGhpcy5jb21wdXRlZFVwPXRoaXMudXAuY3VydmUoMCksdGhpcy5jb21wdXRlZFJpZ2h0PXRoaXMucmlnaHQuY3VydmUoMCksdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLnJhZGl1cy5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkQW5nbGU9dGhpcy5hbmdsZS5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVG93YXJkPVswLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bMCwwLDBdLHRoaXMuY29tcHV0ZWRNYXRyaXg9bmV3IEFycmF5KDE2KTtmb3IodmFyIGM9MDtjPDE2OysrYyl0aGlzLmNvbXB1dGVkTWF0cml4W2NdPS41O3RoaXMucmVjYWxjTWF0cml4KDApfXZhciBwPWYucHJvdG90eXBlO3Auc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt0PXQ+MD9NYXRoLmxvZyh0KTotMS8wLGU9ZT4wP01hdGgubG9nKGUpOjEvMCxlPU1hdGgubWF4KGUsdCksdGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdPXQsdGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdPWV9LHAuZ2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yYWRpdXMuYm91bmRzWzBdO3JldHVybiB0Pyh0WzBdPU1hdGguZXhwKGVbMF1bMF0pLHRbMV09TWF0aC5leHAoZVsxXVswXSksdCk6W01hdGguZXhwKGVbMF1bMF0pLE1hdGguZXhwKGVbMV1bMF0pXX0scC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy51cC5jdXJ2ZSh0KSx0aGlzLnJpZ2h0LmN1cnZlKHQpLHRoaXMucmFkaXVzLmN1cnZlKHQpLHRoaXMuYW5nbGUuY3VydmUodCk7Zm9yKHZhciBlPXRoaXMuY29tcHV0ZWRVcCxyPXRoaXMuY29tcHV0ZWRSaWdodCxuPTAsYT0wLGk9MDtpPDM7KytpKWErPWVbaV0qcltpXSxuKz1lW2ldKmVbaV07dmFyIGw9TWF0aC5zcXJ0KG4pLHU9MDtmb3IoaT0wO2k8MzsrK2kpcltpXS09ZVtpXSphL24sdSs9cltpXSpyW2ldLGVbaV0vPWw7dmFyIGg9TWF0aC5zcXJ0KHUpO2ZvcihpPTA7aTwzOysraSlyW2ldLz1oO3ZhciBmPXRoaXMuY29tcHV0ZWRUb3dhcmQ7byhmLGUscikscyhmLGYpO3ZhciBwPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGQ9dGhpcy5jb21wdXRlZEFuZ2xlWzBdLGc9dGhpcy5jb21wdXRlZEFuZ2xlWzFdLHY9TWF0aC5jb3MoZCksbT1NYXRoLnNpbihkKSx5PU1hdGguY29zKGcpLHg9TWF0aC5zaW4oZyksYj10aGlzLmNvbXB1dGVkQ2VudGVyLF89dip5LHc9bSp5LGs9eCxUPS12KngsTT0tbSp4LEE9eSxTPXRoaXMuY29tcHV0ZWRFeWUsRT10aGlzLmNvbXB1dGVkTWF0cml4O2ZvcihpPTA7aTwzOysraSl7dmFyIEw9XypyW2ldK3cqZltpXStrKmVbaV07RVs0KmkrMV09VCpyW2ldK00qZltpXStBKmVbaV0sRVs0KmkrMl09TCxFWzQqaSszXT0wfXZhciBDPUVbMV0sUD1FWzVdLE89RVs5XSx6PUVbMl0sST1FWzZdLEQ9RVsxMF0sUj1QKkQtTypJLEY9Typ6LUMqRCxCPUMqSS1QKnosTj1jKFIsRixCKTtSLz1OLEYvPU4sQi89TixFWzBdPVIsRVs0XT1GLEVbOF09Qjtmb3IoaT0wO2k8MzsrK2kpU1tpXT1iW2ldK0VbMis0KmldKnA7Zm9yKGk9MDtpPDM7KytpKXt1PTA7Zm9yKHZhciBqPTA7ajwzOysrail1Kz1FW2krNCpqXSpTW2pdO0VbMTIraV09LXV9RVsxNV09MX0scC5nZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKGUpe2Zvcih2YXIgbj0wO248MTY7KytuKWVbbl09cltuXTtyZXR1cm4gZX1yZXR1cm4gcn07dmFyIGQ9WzAsMCwwXTtwLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXtpZih0aGlzLmFuZ2xlLm1vdmUodCxlLHIpLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBhPXRoaXMuY29tcHV0ZWRNYXRyaXg7ZFswXT1hWzJdLGRbMV09YVs2XSxkWzJdPWFbMTBdO2Zvcih2YXIgbz10aGlzLmNvbXB1dGVkVXAscz10aGlzLmNvbXB1dGVkUmlnaHQsbD10aGlzLmNvbXB1dGVkVG93YXJkLGM9MDtjPDM7KytjKWFbNCpjXT1vW2NdLGFbNCpjKzFdPXNbY10sYVs0KmMrMl09bFtjXTtpKGEsYSxuLGQpO2ZvcihjPTA7YzwzOysrYylvW2NdPWFbNCpjXSxzW2NdPWFbNCpjKzFdO3RoaXMudXAuc2V0KHQsb1swXSxvWzFdLG9bMl0pLHRoaXMucmlnaHQuc2V0KHQsc1swXSxzWzFdLHNbMl0pfX0scC5wYW49ZnVuY3Rpb24odCxlLHIsbil7ZT1lfHwwLHI9cnx8MCxuPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGE9dGhpcy5jb21wdXRlZE1hdHJpeCxpPShNYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKSxhWzFdKSxvPWFbNV0scz1hWzldLGw9YyhpLG8scyk7aS89bCxvLz1sLHMvPWw7dmFyIHU9YVswXSxoPWFbNF0sZj1hWzhdLHA9dSppK2gqbytmKnMsZD1jKHUtPWkqcCxoLT1vKnAsZi09cypwKSxnPSh1Lz1kKSplK2kqcix2PShoLz1kKSplK28qcixtPShmLz1kKSplK3Mqcjt0aGlzLmNlbnRlci5tb3ZlKHQsZyx2LG0pO3ZhciB5PU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3k9TWF0aC5tYXgoMWUtNCx5K24pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHkpKX0scC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0scC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MTsibnVtYmVyIj09dHlwZW9mIHImJihpPTB8ciksKGk8MHx8aT4zKSYmKGk9MSk7dmFyIG89KGkrMiklMztlfHwodGhpcy5yZWNhbGNNYXRyaXgodCksZT10aGlzLmNvbXB1dGVkTWF0cml4KTt2YXIgcz1lW2ldLGw9ZVtpKzRdLGg9ZVtpKzhdO2lmKG4pe3ZhciBmPU1hdGguYWJzKHMpLHA9TWF0aC5hYnMobCksZD1NYXRoLmFicyhoKSxnPU1hdGgubWF4KGYscCxkKTtmPT09Zz8ocz1zPDA/LTE6MSxsPWg9MCk6ZD09PWc/KGg9aDwwPy0xOjEscz1sPTApOihsPWw8MD8tMToxLHM9aD0wKX1lbHNle3ZhciB2PWMocyxsLGgpO3MvPXYsbC89dixoLz12fXZhciBtLHkseD1lW29dLGI9ZVtvKzRdLF89ZVtvKzhdLHc9eCpzK2IqbCtfKmgsaz1jKHgtPXMqdyxiLT1sKncsXy09aCp3KSxUPWwqKF8vPWspLWgqKGIvPWspLE09aCooeC89ayktcypfLEE9cypiLWwqeCxTPWMoVCxNLEEpO2lmKFQvPVMsTS89UyxBLz1TLHRoaXMuY2VudGVyLmp1bXAodCxILEcsWSksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLnVwLmp1bXAodCxzLGwsaCksdGhpcy5yaWdodC5qdW1wKHQseCxiLF8pLDI9PT1pKXt2YXIgRT1lWzFdLEw9ZVs1XSxDPWVbOV0sUD1FKngrTCpiK0MqXyxPPUUqVCtMKk0rQypBO209UjwwPy1NYXRoLlBJLzI6TWF0aC5QSS8yLHk9TWF0aC5hdGFuMihPLFApfWVsc2V7dmFyIHo9ZVsyXSxJPWVbNl0sRD1lWzEwXSxSPXoqcytJKmwrRCpoLEY9eip4K0kqYitEKl8sQj16KlQrSSpNK0QqQTttPU1hdGguYXNpbih1KFIpKSx5PU1hdGguYXRhbjIoQixGKX10aGlzLmFuZ2xlLmp1bXAodCx5LG0pLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBOPWVbMl0saj1lWzZdLFY9ZVsxMF0sVT10aGlzLmNvbXB1dGVkTWF0cml4O2EoVSxlKTt2YXIgcT1VWzE1XSxIPVVbMTJdL3EsRz1VWzEzXS9xLFk9VVsxNF0vcSxXPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLmp1bXAodCxILU4qVyxHLWoqVyxZLVYqVyl9LHAubGFzdFQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5jZW50ZXIubGFzdFQoKSx0aGlzLnVwLmxhc3RUKCksdGhpcy5yaWdodC5sYXN0VCgpLHRoaXMucmFkaXVzLmxhc3RUKCksdGhpcy5hbmdsZS5sYXN0VCgpKX0scC5pZGxlPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmlkbGUodCksdGhpcy51cC5pZGxlKHQpLHRoaXMucmlnaHQuaWRsZSh0KSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMuYW5nbGUuaWRsZSh0KX0scC5mbHVzaD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5mbHVzaCh0KSx0aGlzLnVwLmZsdXNoKHQpLHRoaXMucmlnaHQuZmx1c2godCksdGhpcy5yYWRpdXMuZmx1c2godCksdGhpcy5hbmdsZS5mbHVzaCh0KX0scC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxwLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fHRoaXMuY29tcHV0ZWRFeWUscj1yfHx0aGlzLmNvbXB1dGVkQ2VudGVyO3ZhciBhPShuPW58fHRoaXMuY29tcHV0ZWRVcClbMF0saT1uWzFdLG89blsyXSxzPWMoYSxpLG8pO2lmKCEoczwxZS02KSl7YS89cyxpLz1zLG8vPXM7dmFyIGw9ZVswXS1yWzBdLGg9ZVsxXS1yWzFdLGY9ZVsyXS1yWzJdLHA9YyhsLGgsZik7aWYoIShwPDFlLTYpKXtsLz1wLGgvPXAsZi89cDt2YXIgZD10aGlzLmNvbXB1dGVkUmlnaHQsZz1kWzBdLHY9ZFsxXSxtPWRbMl0seT1hKmcraSp2K28qbSx4PWMoZy09eSphLHYtPXkqaSxtLT15Km8pO2lmKCEoeDwuMDEmJih4PWMoZz1pKmYtbypoLHY9bypsLWEqZixtPWEqaC1pKmwpKTwxZS02KSl7Zy89eCx2Lz14LG0vPXgsdGhpcy51cC5zZXQodCxhLGksbyksdGhpcy5yaWdodC5zZXQodCxnLHYsbSksdGhpcy5jZW50ZXIuc2V0KHQsclswXSxyWzFdLHJbMl0pLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKHApKTt2YXIgYj1pKm0tbyp2LF89bypnLWEqbSx3PWEqdi1pKmcsaz1jKGIsXyx3KSxUPWEqbCtpKmgrbypmLE09ZypsK3YqaCttKmYsQT0oYi89aykqbCsoXy89aykqaCsody89aykqZixTPU1hdGguYXNpbih1KFQpKSxFPU1hdGguYXRhbjIoQSxNKSxMPXRoaXMuYW5nbGUuX3N0YXRlLEM9TFtMLmxlbmd0aC0xXSxQPUxbTC5sZW5ndGgtMl07QyU9MipNYXRoLlBJO3ZhciBPPU1hdGguYWJzKEMrMipNYXRoLlBJLUUpLHo9TWF0aC5hYnMoQy1FKSxJPU1hdGguYWJzKEMtMipNYXRoLlBJLUUpO088eiYmKEMrPTIqTWF0aC5QSSksSTx6JiYoQy09MipNYXRoLlBJKSx0aGlzLmFuZ2xlLmp1bXAodGhpcy5hbmdsZS5sYXN0VCgpLEMsUCksdGhpcy5hbmdsZS5zZXQodCxFLFMpfX19fX0seyJmaWx0ZXJlZC12ZWN0b3IiOjIyOSwiZ2wtbWF0NC9pbnZlcnQiOjI2OCwiZ2wtbWF0NC9yb3RhdGUiOjI3MywiZ2wtdmVjMy9jcm9zcyI6MzM2LCJnbC12ZWMzL2RvdCI6MzQxLCJnbC12ZWMzL25vcm1hbGl6ZSI6MzU4fV0sNTQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9dCplLGk9bip0LG89aS0oaS10KSxzPXQtbyxsPW4qZSxjPWwtKGwtZSksdT1lLWMsaD1zKnUtKGEtbypjLXMqYy1vKnUpO2lmKHIpcmV0dXJuIHJbMF09aCxyWzFdPWEscjtyZXR1cm5baCxhXX07dmFyIG49KyhNYXRoLnBvdygyLDI3KSsxKX0se31dLDU0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQrZSxhPW4tdCxpPWUtYSxvPXQtKG4tYSk7aWYocilyZXR1cm4gclswXT1vK2ksclsxXT1uLHI7cmV0dXJuW28raSxuXX19LHt9XSw1NDQ6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSxuKXsidXNlIHN0cmljdCI7dmFyIGE9dCgiYml0LXR3aWRkbGUiKSxpPXQoImR1cCIpO2UuX19UWVBFREFSUkFZX1BPT0x8fChlLl9fVFlQRURBUlJBWV9QT09MPXtVSU5UODppKFszMiwwXSksVUlOVDE2OmkoWzMyLDBdKSxVSU5UMzI6aShbMzIsMF0pLElOVDg6aShbMzIsMF0pLElOVDE2OmkoWzMyLDBdKSxJTlQzMjppKFszMiwwXSksRkxPQVQ6aShbMzIsMF0pLERPVUJMRTppKFszMiwwXSksREFUQTppKFszMiwwXSksVUlOVDhDOmkoWzMyLDBdKSxCVUZGRVI6aShbMzIsMF0pfSk7dmFyIG89InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheSxzPWUuX19UWVBFREFSUkFZX1BPT0w7cy5VSU5UOEN8fChzLlVJTlQ4Qz1pKFszMiwwXSkpLHMuQlVGRkVSfHwocy5CVUZGRVI9aShbMzIsMF0pKTt2YXIgbD1zLkRBVEEsYz1zLkJVRkZFUjtmdW5jdGlvbiB1KHQpe2lmKHQpe3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj1hLmxvZzIoZSk7bFtyXS5wdXNoKHQpfX1mdW5jdGlvbiBoKHQpe3Q9YS5uZXh0UG93Mih0KTt2YXIgZT1hLmxvZzIodCkscj1sW2VdO3JldHVybiByLmxlbmd0aD4wP3IucG9wKCk6bmV3IEFycmF5QnVmZmVyKHQpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGgodCksMCx0KX1mdW5jdGlvbiBwKHQpe3JldHVybiBuZXcgVWludDE2QXJyYXkoaCgyKnQpLDAsdCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gbmV3IFVpbnQzMkFycmF5KGgoNCp0KSwwLHQpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIG5ldyBJbnQ4QXJyYXkoaCh0KSwwLHQpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIG5ldyBJbnQxNkFycmF5KGgoMip0KSwwLHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG5ldyBJbnQzMkFycmF5KGgoNCp0KSwwLHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoaCg0KnQpLDAsdCl9ZnVuY3Rpb24geCh0KXtyZXR1cm4gbmV3IEZsb2F0NjRBcnJheShoKDgqdCksMCx0KX1mdW5jdGlvbiBiKHQpe3JldHVybiBvP25ldyBVaW50OENsYW1wZWRBcnJheShoKHQpLDAsdCk6Zih0KX1mdW5jdGlvbiBfKHQpe3JldHVybiBuZXcgRGF0YVZpZXcoaCh0KSwwLHQpfWZ1bmN0aW9uIHcodCl7dD1hLm5leHRQb3cyKHQpO3ZhciBlPWEubG9nMih0KSxyPWNbZV07cmV0dXJuIHIubGVuZ3RoPjA/ci5wb3AoKTpuZXcgbih0KX1yLmZyZWU9ZnVuY3Rpb24odCl7aWYobi5pc0J1ZmZlcih0KSljW2EubG9nMih0Lmxlbmd0aCldLnB1c2godCk7ZWxzZXtpZigiW29iamVjdCBBcnJheUJ1ZmZlcl0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiYodD10LmJ1ZmZlciksIXQpcmV0dXJuO3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj0wfGEubG9nMihlKTtsW3JdLnB1c2godCl9fSxyLmZyZWVVaW50OD1yLmZyZWVVaW50MTY9ci5mcmVlVWludDMyPXIuZnJlZUludDg9ci5mcmVlSW50MTY9ci5mcmVlSW50MzI9ci5mcmVlRmxvYXQzMj1yLmZyZWVGbG9hdD1yLmZyZWVGbG9hdDY0PXIuZnJlZURvdWJsZT1yLmZyZWVVaW50OENsYW1wZWQ9ci5mcmVlRGF0YVZpZXc9ZnVuY3Rpb24odCl7dSh0LmJ1ZmZlcil9LHIuZnJlZUFycmF5QnVmZmVyPXUsci5mcmVlQnVmZmVyPWZ1bmN0aW9uKHQpe2NbYS5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KX0sci5tYWxsb2M9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lfHwiYXJyYXlidWZmZXIiPT09ZSlyZXR1cm4gaCh0KTtzd2l0Y2goZSl7Y2FzZSJ1aW50OCI6cmV0dXJuIGYodCk7Y2FzZSJ1aW50MTYiOnJldHVybiBwKHQpO2Nhc2UidWludDMyIjpyZXR1cm4gZCh0KTtjYXNlImludDgiOnJldHVybiBnKHQpO2Nhc2UiaW50MTYiOnJldHVybiB2KHQpO2Nhc2UiaW50MzIiOnJldHVybiBtKHQpO2Nhc2UiZmxvYXQiOmNhc2UiZmxvYXQzMiI6cmV0dXJuIHkodCk7Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQ2NCI6cmV0dXJuIHgodCk7Y2FzZSJ1aW50OF9jbGFtcGVkIjpyZXR1cm4gYih0KTtjYXNlImJ1ZmZlciI6cmV0dXJuIHcodCk7Y2FzZSJkYXRhIjpjYXNlImRhdGF2aWV3IjpyZXR1cm4gXyh0KTtkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBudWxsfSxyLm1hbGxvY0FycmF5QnVmZmVyPWgsci5tYWxsb2NVaW50OD1mLHIubWFsbG9jVWludDE2PXAsci5tYWxsb2NVaW50MzI9ZCxyLm1hbGxvY0ludDg9ZyxyLm1hbGxvY0ludDE2PXYsci5tYWxsb2NJbnQzMj1tLHIubWFsbG9jRmxvYXQzMj1yLm1hbGxvY0Zsb2F0PXksci5tYWxsb2NGbG9hdDY0PXIubWFsbG9jRG91YmxlPXgsci5tYWxsb2NVaW50OENsYW1wZWQ9YixyLm1hbGxvY0RhdGFWaWV3PV8sci5tYWxsb2NCdWZmZXI9dyxyLmNsZWFyQ2FjaGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDMyOysrdClzLlVJTlQ4W3RdLmxlbmd0aD0wLHMuVUlOVDE2W3RdLmxlbmd0aD0wLHMuVUlOVDMyW3RdLmxlbmd0aD0wLHMuSU5UOFt0XS5sZW5ndGg9MCxzLklOVDE2W3RdLmxlbmd0aD0wLHMuSU5UMzJbdF0ubGVuZ3RoPTAscy5GTE9BVFt0XS5sZW5ndGg9MCxzLkRPVUJMRVt0XS5sZW5ndGg9MCxzLlVJTlQ4Q1t0XS5sZW5ndGg9MCxsW3RdLmxlbmd0aD0wLGNbdF0ubGVuZ3RoPTB9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30sdCgiYnVmZmVyIikuQnVmZmVyKX0seyJiaXQtdHdpZGRsZSI6OTQsYnVmZmVyOjEwNyxkdXA6MTcyfV0sNTQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5yb290cz1uZXcgQXJyYXkodCksdGhpcy5yYW5rcz1uZXcgQXJyYXkodCk7Zm9yKHZhciBlPTA7ZTx0OysrZSl0aGlzLnJvb3RzW2VdPWUsdGhpcy5yYW5rc1tlXT0wfWUuZXhwb3J0cz1uO3ZhciBhPW4ucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290cy5sZW5ndGh9fSksYS5tYWtlU2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yb290cy5sZW5ndGg7cmV0dXJuIHRoaXMucm9vdHMucHVzaCh0KSx0aGlzLnJhbmtzLnB1c2goMCksdH0sYS5maW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LHI9dGhpcy5yb290cztyW3RdIT09dDspdD1yW3RdO2Zvcig7cltlXSE9PXQ7KXt2YXIgbj1yW2VdO3JbZV09dCxlPW59cmV0dXJuIHR9LGEubGluaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZmluZCh0KSxuPXRoaXMuZmluZChlKTtpZihyIT09bil7dmFyIGE9dGhpcy5yYW5rcyxpPXRoaXMucm9vdHMsbz1hW3JdLHM9YVtuXTtvPHM/aVtyXT1uOnM8bz9pW25dPXI6KGlbbl09ciwrK2Fbcl0pfX19LHt9XSw1NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMD09PXQubGVuZ3RoP3Q6ZT8ocnx8dC5zb3J0KGUpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEsbj10Lmxlbmd0aCxhPXRbMF0saT10WzBdLG89MTtvPG47KytvKWlmKGk9YSxlKGE9dFtvXSxpKSl7aWYobz09PXIpe3IrKztjb250aW51ZX10W3IrK109YX1yZXR1cm4gdC5sZW5ndGg9cix0fSh0LGUpKToocnx8dC5zb3J0KCksZnVuY3Rpb24odCl7Zm9yKHZhciBlPTEscj10Lmxlbmd0aCxuPXRbMF0sYT10WzBdLGk9MTtpPHI7KytpLGE9bilpZihhPW4sKG49dFtpXSkhPT1hKXtpZihpPT09ZSl7ZSsrO2NvbnRpbnVlfXRbZSsrXT1ufXJldHVybiB0Lmxlbmd0aD1lLHR9KHQpKX19LHt9XSw1NDc6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj0vW1wnXCJdLztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KG4udGVzdCh0LmNoYXJBdCgwKSkmJih0PXQuc3Vic3RyKDEpKSxuLnRlc3QodC5jaGFyQXQodC5sZW5ndGgtMSkpJiYodD10LnN1YnN0cigwLHQubGVuZ3RoLTEpKSx0KToiIn19LHt9XSw1NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtBcnJheS5pc0FycmF5KHIpfHwocj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSk7Zm9yKHZhciBuPTAsYT1yLmxlbmd0aDtuPGE7bisrKXt2YXIgaT1yW25dO2Zvcih2YXIgbyBpbiBpKWlmKCh2b2lkIDA9PT1lW29dfHxBcnJheS5pc0FycmF5KGVbb10pfHx0W29dIT09ZVtvXSkmJm8gaW4gZSl7dmFyIHM7aWYoITA9PT1pW29dKXM9ZVtvXTtlbHNle2lmKCExPT09aVtvXSljb250aW51ZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgaVtvXSYmdm9pZCAwPT09KHM9aVtvXShlW29dLHQsZSkpKWNvbnRpbnVlfXRbb109c319cmV0dXJuIHR9fSx7fV0sNTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV8fChlPXt9KTtyZXR1cm4gbih0LGUuY2FudmFzfHxhLGUuY29udGV4dHx8aSxlKX07dmFyIG49dCgiLi9saWIvdnRleHQiKSxhPW51bGwsaT1udWxsOyJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJigoYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkud2lkdGg9ODE5MixhLmhlaWdodD0xMDI0LGk9YS5nZXRDb250ZXh0KCIyZCIpKX0seyIuL2xpYi92dGV4dCI6NTUwfV0sNTUwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTY0LG89MS4yNSxzPXticmVha2xpbmVzOiExLGJvbGRzOiExLGl0YWxpY3M6ITEsc3Vic2NyaXB0czohMSxzdXBlcnNjcmlwdHM6ITF9O24mJihuLnNpemUmJm4uc2l6ZT4wJiYoaT1uLnNpemUpLG4ubGluZVNwYWNpbmcmJm4ubGluZVNwYWNpbmc+MCYmKG89bi5saW5lU3BhY2luZyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLmJyZWFrbGluZXMmJihzLmJyZWFrbGluZXM9ISFuLnN0eWxldGFncy5icmVha2xpbmVzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3MuYm9sZHMmJihzLmJvbGRzPSEhbi5zdHlsZXRhZ3MuYm9sZHMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5pdGFsaWNzJiYocy5pdGFsaWNzPSEhbi5zdHlsZXRhZ3MuaXRhbGljcyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLnN1YnNjcmlwdHMmJihzLnN1YnNjcmlwdHM9ISFuLnN0eWxldGFncy5zdWJzY3JpcHRzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3Muc3VwZXJzY3JpcHRzJiYocy5zdXBlcnNjcmlwdHM9ISFuLnN0eWxldGFncy5zdXBlcnNjcmlwdHMpKTtyZXR1cm4gci5mb250PVtuLmZvbnRTdHlsZSxuLmZvbnRWYXJpYW50LG4uZm9udFdlaWdodCxpKyJweCIsbi5mb250XS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHR9KS5qb2luKCIgIiksci50ZXh0QWxpZ249InN0YXJ0IixyLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsci5kaXJlY3Rpb249Imx0ciIsdyhmdW5jdGlvbih0LGUscixuLGksbyl7cj1yLnJlcGxhY2UoL1xuL2csIiIpLHI9ITA9PT1vLmJyZWFrbGluZXM/ci5yZXBsYWNlKC9cPGJyXD4vZywiXG4iKTpyLnJlcGxhY2UoL1w8YnJcPi9nLCIgIik7dmFyIHM9IiIsbD1bXTtmb3Ioaz0wO2s8ci5sZW5ndGg7KytrKWxba109czshMD09PW8uYm9sZHMmJihsPXgoYyx1LHIsbCkpLCEwPT09by5pdGFsaWNzJiYobD14KGgsZixyLGwpKSwhMD09PW8uc3VwZXJzY3JpcHRzJiYobD14KHAsZyxyLGwpKSwhMD09PW8uc3Vic2NyaXB0cyYmKGw9eCh2LHkscixsKSk7dmFyIGI9W10sXz0iIjtmb3Ioaz0wO2s8ci5sZW5ndGg7KytrKW51bGwhPT1sW2tdJiYoXys9cltrXSxiLnB1c2gobFtrXSkpO3ZhciB3LGssVCxNLEEsUz1fLnNwbGl0KCJcbiIpLEU9Uy5sZW5ndGgsTD1NYXRoLnJvdW5kKGkqbiksQz1uLFA9MipuLE89MCx6PUUqTCtQO3QuaGVpZ2h0PHomJih0LmhlaWdodD16KSxlLmZpbGxTdHlsZT0iIzAwMCIsZS5maWxsUmVjdCgwLDAsdC53aWR0aCx0LmhlaWdodCksZS5maWxsU3R5bGU9IiNmZmYiO3ZhciBJPTAsRD0iIjtmdW5jdGlvbiBSKCl7aWYoIiIhPT1EKXt2YXIgdD1lLm1lYXN1cmVUZXh0KEQpLndpZHRoO2UuZmlsbFRleHQoRCxDK1QsUCtNKSxUKz10fX1mdW5jdGlvbiBGKCl7cmV0dXJuIE1hdGgucm91bmQoQSkrInB4ICJ9ZnVuY3Rpb24gQih0LHIpe3ZhciBuPSIiK2UuZm9udDtpZighMD09PW8uc3Vic2NyaXB0cyl7dmFyIGE9dC5pbmRleE9mKG0pLGk9ci5pbmRleE9mKG0pLHM9YT4tMT9wYXJzZUludCh0WzErYV0pOjAsbD1pPi0xP3BhcnNlSW50KHJbMStpXSk6MDtzIT09bCYmKG49bi5yZXBsYWNlKEYoKSwiP3B4ICIpLEEqPU1hdGgucG93KC43NSxsLXMpLG49bi5yZXBsYWNlKCI/cHggIixGKCkpKSxNKz0uMjUqTCoobC1zKX1pZighMD09PW8uc3VwZXJzY3JpcHRzKXt2YXIgYz10LmluZGV4T2YoZCksaD1yLmluZGV4T2YoZCkscD1jPi0xP3BhcnNlSW50KHRbMStjXSk6MCxnPWg+LTE/cGFyc2VJbnQoclsxK2hdKTowO3AhPT1nJiYobj1uLnJlcGxhY2UoRigpLCI/cHggIiksQSo9TWF0aC5wb3coLjc1LGctcCksbj1uLnJlcGxhY2UoIj9weCAiLEYoKSkpLE0tPS4yNSpMKihnLXApfWlmKCEwPT09by5ib2xkcyl7dmFyIHY9dC5pbmRleE9mKHUpPi0xLHk9ci5pbmRleE9mKHUpPi0xOyF2JiZ5JiYobj14P24ucmVwbGFjZSgiaXRhbGljICIsIml0YWxpYyBib2xkICIpOiJib2xkICIrbiksdiYmIXkmJihuPW4ucmVwbGFjZSgiYm9sZCAiLCIiKSl9aWYoITA9PT1vLml0YWxpY3Mpe3ZhciB4PXQuaW5kZXhPZihmKT4tMSxiPXIuaW5kZXhPZihmKT4tMTsheCYmYiYmKG49Iml0YWxpYyAiK24pLHgmJiFiJiYobj1uLnJlcGxhY2UoIml0YWxpYyAiLCIiKSl9ZS5mb250PW59Zm9yKHc9MDt3PEU7Kyt3KXt2YXIgTj1TW3ddKyJcbiI7Zm9yKFQ9MCxNPXcqTCxBPW4sRD0iIixrPTA7azxOLmxlbmd0aDsrK2spe3ZhciBqPWsrSTxiLmxlbmd0aD9iW2srSV06YltiLmxlbmd0aC0xXTtzPT09aj9EKz1OW2tdOihSKCksRD1OW2tdLHZvaWQgMCE9PWomJihCKHMsaikscz1qKSl9UigpLEkrPU4ubGVuZ3RoO3ZhciBWPTB8TWF0aC5yb3VuZChUKzIqQyk7TzxWJiYoTz1WKX12YXIgVT1PLHE9UCtMKkU7cmV0dXJuIGEoZS5nZXRJbWFnZURhdGEoMCwwLFUscSkuZGF0YSxbcSxVLDRdKS5waWNrKC0xLC0xLDApLnRyYW5zcG9zZSgxLDApfShlLHIsdCxpLG8scyksbixpKX0sZS5leHBvcnRzLnByb2Nlc3NQaXhlbHM9dzt2YXIgbj10KCJzdXJmYWNlLW5ldHMiKSxhPXQoIm5kYXJyYXkiKSxpPXQoInNpbXBsaWZ5LXBsYW5hci1ncmFwaCIpLG89dCgiY2xlYW4tcHNsZyIpLHM9dCgiY2R0MmQiKSxsPXQoInBsYW5hci1ncmFwaC10by1wb2x5bGluZSIpLGM9ImIiLHU9ImJ8IixoPSJpIixmPSJpfCIscD0ic3VwIixkPSIrIixnPSIrMSIsdj0ic3ViIixtPSItIix5PSItMSI7ZnVuY3Rpb24geCh0LGUscixuKXtmb3IodmFyIGE9IjwiK3QrIj4iLGk9IjwvIit0KyI+IixvPWEubGVuZ3RoLHM9aS5sZW5ndGgsbD1lWzBdPT09ZHx8ZVswXT09PW0sYz0wLHU9LXM7Yz4tMSYmLTEhPT0oYz1yLmluZGV4T2YoYSxjKSkmJi0xIT09KHU9ci5pbmRleE9mKGksYytvKSkmJiEodTw9Yyk7KXtmb3IodmFyIGg9YztoPHUrczsrK2gpaWYoaDxjK298fGg+PXUpbltoXT1udWxsLHI9ci5zdWJzdHIoMCxoKSsiICIrci5zdWJzdHIoaCsxKTtlbHNlIGlmKG51bGwhPT1uW2hdKXt2YXIgZj1uW2hdLmluZGV4T2YoZVswXSk7LTE9PT1mP25baF0rPWU6bCYmKG5baF09bltoXS5zdWJzdHIoMCxmKzEpKygxK3BhcnNlSW50KG5baF1bZisxXSkpK25baF0uc3Vic3RyKGYrMikpfXZhciBwPWMrbyxnPXIuc3Vic3RyKHAsdS1wKS5pbmRleE9mKGEpO2M9LTEhPT1nP2c6dStzfXJldHVybiBufWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1uKHQsMTI4KTtyZXR1cm4gZT9pKHIuY2VsbHMsci5wb3NpdGlvbnMsLjI1KTp7ZWRnZXM6ci5jZWxscyxwb3NpdGlvbnM6ci5wb3NpdGlvbnN9fWZ1bmN0aW9uIF8odCxlLHIsbil7dmFyIGE9Yih0LG4pLGk9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLnRleHRBbGlnbnx8InN0YXJ0IixhPWUudGV4dEJhc2VsaW5lfHwiYWxwaGFiZXRpYyIsaT1bMTw8MzAsMTw8MzBdLG89WzAsMF0scz10Lmxlbmd0aCxsPTA7bDxzOysrbClmb3IodmFyIGM9dFtsXSx1PTA7dTwyOysrdSlpW3VdPTB8TWF0aC5taW4oaVt1XSxjW3VdKSxvW3VdPTB8TWF0aC5tYXgob1t1XSxjW3VdKTt2YXIgaD0wO3N3aXRjaChuKXtjYXNlImNlbnRlciI6aD0tLjUqKGlbMF0rb1swXSk7YnJlYWs7Y2FzZSJyaWdodCI6Y2FzZSJlbmQiOmg9LW9bMF07YnJlYWs7Y2FzZSJsZWZ0IjpjYXNlInN0YXJ0IjpoPS1pWzBdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ2ZWN0b3JpemUtdGV4dDogVW5yZWNvZ25pemVkIHRleHRBbGlnbjogJyIrbisiJyIpfXZhciBmPTA7c3dpdGNoKGEpe2Nhc2UiaGFuZ2luZyI6Y2FzZSJ0b3AiOmY9LWlbMV07YnJlYWs7Y2FzZSJtaWRkbGUiOmY9LS41KihpWzFdK29bMV0pO2JyZWFrO2Nhc2UiYWxwaGFiZXRpYyI6Y2FzZSJpZGVvZ3JhcGhpYyI6Zj0tMypyO2JyZWFrO2Nhc2UiYm90dG9tIjpmPS1vWzFdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ2ZWN0b3JpemUtdGV4dDogVW5yZWNvZ2luaXplZCB0ZXh0QmFzZWxpbmU6ICciK2ErIiciKX12YXIgcD0xL3I7cmV0dXJuImxpbmVIZWlnaHQiaW4gZT9wKj0rZS5saW5lSGVpZ2h0OiJ3aWR0aCJpbiBlP3A9ZS53aWR0aC8ob1swXS1pWzBdKToiaGVpZ2h0ImluIGUmJihwPWUuaGVpZ2h0LyhvWzFdLWlbMV0pKSx0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm5bcCoodFswXStoKSxwKih0WzFdK2YpXX0pfShhLnBvc2l0aW9ucyxlLHIpLGM9YS5lZGdlcyx1PSJjY3ciPT09ZS5vcmllbnRhdGlvbjtpZihvKGksYyksZS5wb2x5Z29uc3x8ZS5wb2x5Z29ufHxlLnBvbHlsaW5lKXtmb3IodmFyIGg9bChjLGkpLGY9bmV3IEFycmF5KGgubGVuZ3RoKSxwPTA7cDxoLmxlbmd0aDsrK3Ape2Zvcih2YXIgZD1oW3BdLGc9bmV3IEFycmF5KGQubGVuZ3RoKSx2PTA7djxkLmxlbmd0aDsrK3Ype2Zvcih2YXIgbT1kW3ZdLHk9bmV3IEFycmF5KG0ubGVuZ3RoKSx4PTA7eDxtLmxlbmd0aDsrK3gpeVt4XT1pW21beF1dLnNsaWNlKCk7dSYmeS5yZXZlcnNlKCksZ1t2XT15fWZbcF09Z31yZXR1cm4gZn1yZXR1cm4gZS50cmlhbmdsZXN8fGUudHJpYW5ndWxhdGV8fGUudHJpYW5nbGU/e2NlbGxzOnMoaSxjLHtkZWxhdW5heTohMSxleHRlcmlvcjohMSxpbnRlcmlvcjohMH0pLHBvc2l0aW9uczppfTp7ZWRnZXM6Yyxwb3NpdGlvbnM6aX19ZnVuY3Rpb24gdyh0LGUscil7dHJ5e3JldHVybiBfKHQsZSxyLCEwKX1jYXRjaCh0KXt9dHJ5e3JldHVybiBfKHQsZSxyLCExKX1jYXRjaCh0KXt9cmV0dXJuIGUucG9seWdvbnN8fGUucG9seWxpbmV8fGUucG9seWdvbj9bXTplLnRyaWFuZ2xlc3x8ZS50cmlhbmd1bGF0ZXx8ZS50cmlhbmdsZT97Y2VsbHM6W10scG9zaXRpb25zOltdfTp7ZWRnZXM6W10scG9zaXRpb25zOltdfX19LHtjZHQyZDoxMDgsImNsZWFuLXBzbGciOjExOCxuZGFycmF5OjQ1MiwicGxhbmFyLWdyYXBoLXRvLXBvbHlsaW5lIjo0NzAsInNpbXBsaWZ5LXBsYW5hci1ncmFwaCI6NTIzLCJzdXJmYWNlLW5ldHMiOjUzMH1dLDU1MTpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtpZigidW5kZWZpbmVkIj09dHlwZW9mIHNlc3x8IXNlcy5va3x8c2VzLm9rKCkpeyJ1bmRlZmluZWQiIT10eXBlb2Ygc2VzJiYoc2VzLndlYWtNYXBQZXJtaXRIb3N0T2JqZWN0cz12KTt2YXIgdD0hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcCl7dmFyIHI9V2Vha01hcDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL0ZpcmVmb3gvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpO2Vsc2V7dmFyIG49bmV3IHIsYT1PYmplY3QuZnJlZXplKHt9KTtpZihuLnNldChhLDEpLDE9PT1uLmdldChhKSlyZXR1cm4gdm9pZChlLmV4cG9ydHM9V2Vha01hcCk7dD0hMH19T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxzPU9iamVjdC5pc0V4dGVuc2libGUsbD0id2Vha21hcDoiLGM9bCsiaWRlbnQ6IitNYXRoLnJhbmRvbSgpKyJfX18iO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgY3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheSl7dmFyIHU9bmV3IEFycmF5QnVmZmVyKDI1KSxoPW5ldyBVaW50OEFycmF5KHUpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoaCksYz1sKyJyYW5kOiIrQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGgsZnVuY3Rpb24odCl7cmV0dXJuKHQlMzYpLnRvU3RyaW5nKDM2KX0pLmpvaW4oIiIpKyJfX18ifWlmKG8oT2JqZWN0LCJnZXRPd25Qcm9wZXJ0eU5hbWVzIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkuZmlsdGVyKG0pfX0pLCJnZXRQcm9wZXJ0eU5hbWVzImluIE9iamVjdCl7dmFyIGY9T2JqZWN0LmdldFByb3BlcnR5TmFtZXM7byhPYmplY3QsImdldFByb3BlcnR5TmFtZXMiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZih0KS5maWx0ZXIobSl9fSl9IWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmZyZWV6ZTtvKE9iamVjdCwiZnJlZXplIix7dmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHkoZSksdChlKX19KTt2YXIgZT1PYmplY3Quc2VhbDtvKE9iamVjdCwic2VhbCIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB5KHQpLGUodCl9fSk7dmFyIHI9T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO28oT2JqZWN0LCJwcmV2ZW50RXh0ZW5zaW9ucyIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB5KHQpLHIodCl9fSl9KCk7dmFyIHA9ITEsZD0wLGc9ZnVuY3Rpb24oKXt0aGlzIGluc3RhbmNlb2YgZ3x8YigpO3ZhciB0PVtdLGU9W10scj1kKys7cmV0dXJuIE9iamVjdC5jcmVhdGUoZy5wcm90b3R5cGUse2dldF9fXzp7dmFsdWU6eChmdW5jdGlvbihuLGEpe3ZhciBpLG89eShuKTtyZXR1cm4gbz9yIGluIG8/b1tyXTphOihpPXQuaW5kZXhPZihuKSk+PTA/ZVtpXTphfSl9LGhhc19fXzp7dmFsdWU6eChmdW5jdGlvbihlKXt2YXIgbj15KGUpO3JldHVybiBuP3IgaW4gbjp0LmluZGV4T2YoZSk+PTB9KX0sc2V0X19fOnt2YWx1ZTp4KGZ1bmN0aW9uKG4sYSl7dmFyIGksbz15KG4pO3JldHVybiBvP29bcl09YTooaT10LmluZGV4T2YobikpPj0wP2VbaV09YTooaT10Lmxlbmd0aCxlW2ldPWEsdFtpXT1uKSx0aGlzfSl9LGRlbGV0ZV9fXzp7dmFsdWU6eChmdW5jdGlvbihuKXt2YXIgYSxpLG89eShuKTtyZXR1cm4gbz9yIGluIG8mJmRlbGV0ZSBvW3JdOiEoKGE9dC5pbmRleE9mKG4pKTwwfHwoaT10Lmxlbmd0aC0xLHRbYV09dm9pZCAwLGVbYV09ZVtpXSx0W2FdPXRbaV0sdC5sZW5ndGg9aSxlLmxlbmd0aD1pLDApKX0pfX0pfTtnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE9iamVjdC5wcm90b3R5cGUse2dldDp7dmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRfX18odCxlKX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxoYXM6e3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc19fXyh0KX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzZXQ6e3ZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0X19fKHQsZSl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sZGVsZXRlOnt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxldGVfX18odCl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSwiZnVuY3Rpb24iPT10eXBlb2Ygcj9mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt0aGlzIGluc3RhbmNlb2YgZ3x8YigpO3ZhciBlLG49bmV3IHIsYT12b2lkIDAsaT0hMTtyZXR1cm4gZT10P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2V0KHQsZSksbi5oYXModCl8fChhfHwoYT1uZXcgZyksYS5zZXQodCxlKSksdGhpc306ZnVuY3Rpb24odCxlKXtpZihpKXRyeXtuLnNldCh0LGUpfWNhdGNoKHIpe2F8fChhPW5ldyBnKSxhLnNldF9fXyh0LGUpfWVsc2Ugbi5zZXQodCxlKTtyZXR1cm4gdGhpc30sT2JqZWN0LmNyZWF0ZShnLnByb3RvdHlwZSx7Z2V0X19fOnt2YWx1ZTp4KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGE/bi5oYXModCk/bi5nZXQodCk6YS5nZXRfX18odCxlKTpuLmdldCh0LGUpfSl9LGhhc19fXzp7dmFsdWU6eChmdW5jdGlvbih0KXtyZXR1cm4gbi5oYXModCl8fCEhYSYmYS5oYXNfX18odCl9KX0sc2V0X19fOnt2YWx1ZTp4KGUpfSxkZWxldGVfX186e3ZhbHVlOngoZnVuY3Rpb24odCl7dmFyIGU9ISFuLmRlbGV0ZSh0KTtyZXR1cm4gYSYmYS5kZWxldGVfX18odCl8fGV9KX0scGVybWl0SG9zdE9iamVjdHNfX186e3ZhbHVlOngoZnVuY3Rpb24odCl7aWYodCE9PXYpdGhyb3cgbmV3IEVycm9yKCJib2d1cyBjYWxsIHRvIHBlcm1pdEhvc3RPYmplY3RzX19fIik7aT0hMH0pfX0pfXQmJiJ1bmRlZmluZWQiIT10eXBlb2YgUHJveHkmJihQcm94eT12b2lkIDApLG4ucHJvdG90eXBlPWcucHJvdG90eXBlLGUuZXhwb3J0cz1uLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWFrTWFwLnByb3RvdHlwZSwiY29uc3RydWN0b3IiLHt2YWx1ZTpXZWFrTWFwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9KCk6KCJ1bmRlZmluZWQiIT10eXBlb2YgUHJveHkmJihQcm94eT12b2lkIDApLGUuZXhwb3J0cz1nKX1mdW5jdGlvbiB2KHQpe3QucGVybWl0SG9zdE9iamVjdHNfX18mJnQucGVybWl0SG9zdE9iamVjdHNfX18odil9ZnVuY3Rpb24gbSh0KXtyZXR1cm4hKHQuc3Vic3RyKDAsbC5sZW5ndGgpPT1sJiYiX19fIj09PXQuc3Vic3RyKHQubGVuZ3RoLTMpKX1mdW5jdGlvbiB5KHQpe2lmKHQhPT1PYmplY3QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiTm90IGFuIG9iamVjdDogIit0KTt2YXIgZT10W2NdO2lmKGUmJmUua2V5PT09dClyZXR1cm4gZTtpZihzKHQpKXtlPXtrZXk6dH07dHJ5e3JldHVybiBvKHQsYyx7dmFsdWU6ZSx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMX0pLGV9Y2F0Y2godCl7cmV0dXJufX19ZnVuY3Rpb24geCh0KXtyZXR1cm4gdC5wcm90b3R5cGU9bnVsbCxPYmplY3QuZnJlZXplKHQpfWZ1bmN0aW9uIGIoKXtwfHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGV8fChwPSEwLGNvbnNvbGUud2FybigiV2Vha01hcCBzaG91bGQgYmUgaW52b2tlZCBhcyBuZXcgV2Vha01hcCgpLCBub3QgV2Vha01hcCgpLiBUaGlzIHdpbGwgYmUgYW4gZXJyb3IgaW4gdGhlIGZ1dHVyZS4iKSl9fSgpfSx7fV0sNTUyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9oaWRkZW4tc3RvcmUuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIldlYWttYXAtc2hpbTogS2V5IG11c3QgYmUgb2JqZWN0Iik7dmFyIHI9ZS52YWx1ZU9mKHQpO3JldHVybiByJiZyLmlkZW50aXR5PT09dD9yOm4oZSx0KX19fSx7Ii4vaGlkZGVuLXN0b3JlLmpzIjo1NTN9XSw1NTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17aWRlbnRpdHk6ZX0sbj10LnZhbHVlT2Y7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJ2YWx1ZU9mIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnJ9LHdyaXRhYmxlOiEwfSkscn19LHt9XSw1NTQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2NyZWF0ZS1zdG9yZS5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW4oKTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUscil7dmFyIG49dChlKTtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKT9uLnZhbHVlOnJ9LHNldDpmdW5jdGlvbihlLHIpe3JldHVybiB0KGUpLnZhbHVlPXIsdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiJ2YWx1ZSJpbiB0KGUpfSxkZWxldGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGRlbGV0ZSB0KGUpLnZhbHVlfX19fSx7Ii4vY3JlYXRlLXN0b3JlLmpzIjo1NTJ9XSw1NTU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnZXQtY2FudmFzLWNvbnRleHQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIndlYmdsIix0KX19LHsiZ2V0LWNhbnZhcy1jb250ZXh0IjoyMzV9XSw1NTY6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIiksaT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixhKG8ucHJvdG90eXBlLHtuYW1lOiJDaGluZXNlIixqZEVwb2NoOjE3MjE0MjUuNSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDowLGZpcnN0TW9udGg6MCxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJDaGluZXNlIixlcG9jaHM6WyJCRUMiLCJFQyJdLG1vbnRoTnVtYmVyczpmdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9dC5tYXRjaChsKTtyZXR1cm4gcj9yWzBdOiIifXZhciBuPXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxhPXQubW9udGgoKSxpPSIiK3RoaXMudG9DaGluZXNlTW9udGgobixhKTtyZXR1cm4gZSYmaS5sZW5ndGg8MiYmKGk9IjAiK2kpLHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKG4sYSkmJihpKz0iaSIpLGl9LG1vbnRoTmFtZXM6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT10Lm1hdGNoKGMpO3JldHVybiBlP2VbMF06IiJ9dmFyIHI9dGhpcy5fdmFsaWRhdGVZZWFyKHQpLG49dC5tb250aCgpLGE9WyJcdTRlMDBcdTY3MDgiLCJcdTRlOGNcdTY3MDgiLCJcdTRlMDlcdTY3MDgiLCJcdTU2ZGJcdTY3MDgiLCJcdTRlOTRcdTY3MDgiLCJcdTUxNmRcdTY3MDgiLCJcdTRlMDNcdTY3MDgiLCJcdTUxNmJcdTY3MDgiLCJcdTRlNWRcdTY3MDgiLCJcdTUzNDFcdTY3MDgiLCJcdTUzNDFcdTRlMDBcdTY3MDgiLCJcdTUzNDFcdTRlOGNcdTY3MDgiXVt0aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihhPSJcdTk1ZjAiK2EpLGF9LG1vbnRoTmFtZXNTaG9ydDpmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPXQubWF0Y2godSk7cmV0dXJuIGU/ZVswXToiIn12YXIgcj10aGlzLl92YWxpZGF0ZVllYXIodCksbj10Lm1vbnRoKCksYT1bIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSIsIlx1NTM0MVx1NGUwMCIsIlx1NTM0MVx1NGU4YyJdW3RoaXMudG9DaGluZXNlTW9udGgocixuKS0xXTtyZXR1cm4gdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgocixuKSYmKGE9Ilx1OTVmMCIrYSksYX0scGFyc2VNb250aDpmdW5jdGlvbih0LGUpe3Q9dGhpcy5fdmFsaWRhdGVZZWFyKHQpO3ZhciByLG49cGFyc2VJbnQoZSk7aWYoaXNOYU4obikpIlx1OTVmMCI9PT1lWzBdJiYocj0hMCxlPWUuc3Vic3RyaW5nKDEpKSwiXHU2NzA4Ij09PWVbZS5sZW5ndGgtMV0mJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMSkpLG49MStbIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSIsIlx1NTM0MVx1NGUwMCIsIlx1NTM0MVx1NGU4YyJdLmluZGV4T2YoZSk7ZWxzZXt2YXIgYT1lW2UubGVuZ3RoLTFdO3I9ImkiPT09YXx8IkkiPT09YX1yZXR1cm4gdGhpcy50b01vbnRoSW5kZXgodCxuLHIpfSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sX3ZhbGlkYXRlWWVhcjpmdW5jdGlvbih0LGUpe2lmKHQueWVhciYmKHQ9dC55ZWFyKCkpLCJudW1iZXIiIT10eXBlb2YgdHx8dDwxODg4fHx0PjIxMTEpdGhyb3cgZS5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gdH0sdG9Nb250aEluZGV4OmZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10aGlzLmludGVyY2FsYXJ5TW9udGgodCk7aWYociYmZSE9PWF8fGU8MXx8ZT4xMil0aHJvdyBuLmxvY2FsLmludmFsaWRNb250aC5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gYT8hciYmZTw9YT9lLTE6ZTplLTF9LHRvQ2hpbmVzZU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT0odD10LnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO2lmKGU8MHx8ZT4ocj8xMjoxMSkpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHI/ZTxyP2UrMTplOmUrMX0saW50ZXJjYWxhcnlNb250aDpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZVllYXIodCksaFt0LWhbMF1dPj4xM30saXNJbnRlcmNhbGFyeU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT0odD10LnllYXIoKSkubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO3JldHVybiEhciYmcj09PWV9LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvPXRoaXMuX3ZhbGlkYXRlWWVhcih0LG4ubG9jYWwuaW52YWxpZHllYXIpLHM9ZltvLWZbMF1dLGw9cz4+OSY0MDk1LGM9cz4+NSYxNSx1PTMxJnM7KGE9aS5uZXdEYXRlKGwsYyx1KSkuYWRkKDQtKGEuZGF5T2ZXZWVrKCl8fDcpLCJkIik7dmFyIGg9dGhpcy50b0pEKHQsZSxyKS1hLnRvSkQoKTtyZXR1cm4gMStNYXRoLmZsb29yKGgvNyl9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZWFwWWVhcih0KT8xMzoxMn0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KTt2YXIgcj1oW3QtaFswXV07aWYoZT4ocj4+MTM/MTI6MTEpKXRocm93IG4ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiByJjE8PDEyLWU/MzA6Mjl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXRoaXMuX3ZhbGlkYXRlKHQscyxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9dGhpcy5fdmFsaWRhdGVZZWFyKGEueWVhcigpKSxlPWEubW9udGgoKSxyPWEuZGF5KCk7dmFyIG89dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgodCxlKSxzPXRoaXMudG9DaGluZXNlTW9udGgodCxlKSxsPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIGksbyxzO2lmKCJvYmplY3QiPT10eXBlb2YgdClvPXQsaT1lfHx7fTtlbHNle3ZhciBsPSJudW1iZXIiPT10eXBlb2YgdCYmdD49MTg4OCYmdDw9MjExMTtpZighbCl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTEiKTt2YXIgYz0ibnVtYmVyIj09dHlwZW9mIGUmJmU+PTEmJmU8PTEyO2lmKCFjKXRocm93IG5ldyBFcnJvcigiTHVuYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTIiKTt2YXIgdSxwPSJudW1iZXIiPT10eXBlb2YgciYmcj49MSYmcjw9MzA7aWYoIXApdGhyb3cgbmV3IEVycm9yKCJMdW5hciBkYXkgb3V0c2lkZSByYW5nZSAxIC0gMzAiKTsib2JqZWN0Ij09dHlwZW9mIG4/KHU9ITEsaT1uKToodT0hIW4saT1hfHx7fSksbz17eWVhcjp0LG1vbnRoOmUsZGF5OnIsaXNJbnRlcmNhbGFyeTp1fX1zPW8uZGF5LTE7dmFyIGQsZz1oW28ueWVhci1oWzBdXSx2PWc+PjEzO2Q9dj9vLm1vbnRoPnY/by5tb250aDpvLmlzSW50ZXJjYWxhcnk/by5tb250aDpvLm1vbnRoLTE6by5tb250aC0xO2Zvcih2YXIgbT0wO208ZDttKyspe3ZhciB5PWcmMTw8MTItbT8zMDoyOTtzKz15fXZhciB4PWZbby55ZWFyLWZbMF1dLGI9bmV3IERhdGUoeD4+OSY0MDk1LCh4Pj41JjE1KS0xLCgzMSZ4KStzKTtyZXR1cm4gaS55ZWFyPWIuZ2V0RnVsbFllYXIoKSxpLm1vbnRoPTErYi5nZXRNb250aCgpLGkuZGF5PWIuZ2V0RGF0ZSgpLGl9KHQscyxyLG8pO3JldHVybiBpLnRvSkQobC55ZWFyLGwubW9udGgsbC5kYXkpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9aS5mcm9tSkQodCkscj1mdW5jdGlvbih0LGUscixuKXt2YXIgYSxpO2lmKCJvYmplY3QiPT10eXBlb2YgdClhPXQsaT1lfHx7fTtlbHNle3ZhciBvPSJudW1iZXIiPT10eXBlb2YgdCYmdD49MTg4OCYmdDw9MjExMTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTEiKTt2YXIgcz0ibnVtYmVyIj09dHlwZW9mIGUmJmU+PTEmJmU8PTEyO2lmKCFzKXRocm93IG5ldyBFcnJvcigiU29sYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTIiKTt2YXIgbD0ibnVtYmVyIj09dHlwZW9mIHImJnI+PTEmJnI8PTMxO2lmKCFsKXRocm93IG5ldyBFcnJvcigiU29sYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMxIik7YT17eWVhcjp0LG1vbnRoOmUsZGF5OnJ9LGk9bnx8e319dmFyIGM9ZlthLnllYXItZlswXV0sdT1hLnllYXI8PDl8YS5tb250aDw8NXxhLmRheTtpLnllYXI9dT49Yz9hLnllYXI6YS55ZWFyLTEsYz1mW2kueWVhci1mWzBdXTt2YXIgcCxkPW5ldyBEYXRlKGM+PjkmNDA5NSwoYz4+NSYxNSktMSwzMSZjKSxnPW5ldyBEYXRlKGEueWVhcixhLm1vbnRoLTEsYS5kYXkpO3A9TWF0aC5yb3VuZCgoZy1kKS84NjRlNSk7dmFyIHYsbT1oW2kueWVhci1oWzBdXTtmb3Iodj0wO3Y8MTM7disrKXt2YXIgeT1tJjE8PDEyLXY/MzA6Mjk7aWYocDx5KWJyZWFrO3AtPXl9dmFyIHg9bT4+MTM7IXh8fHY8eD8oaS5pc0ludGVyY2FsYXJ5PSExLGkubW9udGg9MSt2KTp2PT09eD8oaS5pc0ludGVyY2FsYXJ5PSEwLGkubW9udGg9dik6KGkuaXNJbnRlcmNhbGFyeT0hMSxpLm1vbnRoPXYpO3JldHVybiBpLmRheT0xK3AsaX0oZS55ZWFyKCksZS5tb250aCgpLGUuZGF5KCkpLG49dGhpcy50b01vbnRoSW5kZXgoci55ZWFyLHIubW9udGgsci5pc0ludGVyY2FsYXJ5KTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIueWVhcixuLHIuZGF5KX0sZnJvbVN0cmluZzpmdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKHMpLHI9dGhpcy5fdmFsaWRhdGVZZWFyKCtlWzFdKSxuPStlWzJdLGE9ISFlWzNdLGk9dGhpcy50b01vbnRoSW5kZXgocixuLGEpLG89K2VbNF07cmV0dXJuIHRoaXMubmV3RGF0ZShyLGksbyl9LGFkZDpmdW5jdGlvbih0LGUscil7dmFyIG49dC55ZWFyKCksYT10Lm1vbnRoKCksaT10aGlzLmlzSW50ZXJjYWxhcnlNb250aChuLGEpLHM9dGhpcy50b0NoaW5lc2VNb250aChuLGEpLGw9T2JqZWN0LmdldFByb3RvdHlwZU9mKG8ucHJvdG90eXBlKS5hZGQuY2FsbCh0aGlzLHQsZSxyKTtpZigieSI9PT1yKXt2YXIgYz1sLnllYXIoKSx1PWwubW9udGgoKSxoPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKGMscyksZj1pJiZoP3RoaXMudG9Nb250aEluZGV4KGMscywhMCk6dGhpcy50b01vbnRoSW5kZXgoYyxzLCExKTtmIT09dSYmbC5tb250aChmKX1yZXR1cm4gbH19KTt2YXIgcz0vXlxzKigtP1xkXGRcZFxkfFxkXGQpWy0vXShcZD9cZCkoW2lJXT8pWy0vXShcZD9cZCkvbSxsPS9eXGQ/XGRbaUldPy9tLGM9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdP1x1NjcwOC9tLHU9L15cdTk1ZjA/XHU1MzQxP1tcdTRlMDBcdTRlOGNcdTRlMDlcdTU2ZGJcdTRlOTRcdTUxNmRcdTRlMDNcdTUxNmJcdTRlNWRdPy9tO24uY2FsZW5kYXJzLmNoaW5lc2U9bzt2YXIgaD1bMTg4Nyw1NzgwLDU4MDIsMTkxNTcsMjc0Miw1MDM1OSwxMTk4LDI2NDYsNDYzNzgsNzQ2NiwzNDEyLDMwMTIyLDU0ODIsNjc5NDksMjM5Niw1Mjk0LDQzNTk3LDY3MzIsNjk1NCwzNjE4MSwyNzcyLDQ5NTQsMTg3ODEsMjM5Niw1NDQyNyw1Mjc0LDY3MzAsNDc3ODEsNTgwMCw2ODY4LDIxMjEwLDQ3OTAsNTk3MDMsMjM1MCw1MjcwLDQ2NjY3LDM0MDIsMzQ5NiwzODMyNSwxMzg4LDQ3ODIsMTg3MzUsMjM1MCw1MjM3NCw2ODA0LDc0OTgsNDQ0NTcsMjkwNiwxMzg4LDI5Mjk0LDQ3MDAsNjM3ODksNjQ0Miw2ODA0LDU2MTM4LDU4MDIsMjc3MiwzODIzNSwxMjEwLDQ2OTgsMjI4MjcsNTQxOCw2MzEyNSwzNDc2LDU4MDIsNDM3MDEsMjQ4NCw1MzAyLDI3MjIzLDI2NDYsNzA5NTQsNzQ2NiwzNDEyLDU0Njk4LDU0ODIsMjQxMiwzODA2Miw1Mjk0LDI2MzYsMzIwMzgsNjk1NCw2MDI0NSwyNzcyLDQ4MjYsNDMzNTcsMjM5NCw1Mjc0LDM5NTAxLDY3MzAsNzIzNTcsNTgwMCw1ODQ0LDUzOTc4LDQ3OTAsMjM1OCwzODAzOSw1MjcwLDg3NjI3LDM0MDIsMzQ5Niw1NDcwOCw1NDg0LDQ3ODIsNDMzMTEsMjM1MCwzMjIyLDI3OTc4LDc0OTgsNjg5NjUsMjkwNCw1NDg0LDQ1Njc3LDQ3MDAsNjQ0NCwzOTU3Myw2ODA0LDY5ODYsMTkyODUsMjc3Miw2MjgxMSwxMjEwLDQ2OTgsNDc0MDMsNTQxOCw1NzgwLDM4NTcwLDU1NDYsNzY0NjksMjQyMCw1MzAyLDUxNzk5LDI2NDYsNTQxNCwzNjUwMSwzNDEyLDU1NDYsMTg4NjksMjQxMiw1NDQ0Niw1Mjc2LDY3MzIsNDg0MjIsNjgyMiwyOTAwLDI4MDEwLDQ4MjYsOTI1MDksMjM5NCw1Mjc0LDU1ODgzLDY3MzAsNjgyMCw0Nzk1Niw1ODEyLDI3NzgsMTg3NzksMjM1OCw2MjYxNSw1MjcwLDU0NTAsNDY3NTcsMzQ5Miw1NTU2LDI3MzE4LDQ3MTgsNjc4ODcsMjM1MCwzMjIyLDUyNTU0LDc0OTgsMzQyOCwzODI1Miw1NDY4LDQ3MDAsMzEwMjIsNjQ0NCw2NDE0OSw2ODA0LDY5ODYsNDM4NjEsMjc3Miw1MzM4LDM1NDIxLDI2NTAsNzA5NTUsNTQxOCw1NzgwLDU0OTU0LDU1NDYsMjc0MCwzODA3NCw1MzAyLDI2NDYsMjk5OTEsMzM2Niw2MTAxMSwzNDEyLDU1NDYsNDM0NDUsMjQxMiw1Mjk0LDM1NDA2LDY3MzIsNzI5OTgsNjgyMCw2OTk2LDUyNTg2LDI3NzgsMjM5NiwzODA0NSw1Mjc0LDY2OTgsMjMzMzMsNjgyMCw2NDMzOCw1ODEyLDI3NDYsNDMzNTUsMjM1OCw1MjcwLDM5NDk5LDU0NTAsNzk1MjUsMzQ5Miw1NTQ4XSxmPVsxODg3LDk2NjczMiw5NjcyMzEsOTY3NzMzLDk2ODI2NSw5Njg3NjYsOTY5Mjk3LDk2OTc5OCw5NzAyOTgsOTcwODI5LDk3MTMzMCw5NzE4MzAsOTcyMzYyLDk3Mjg2Myw5NzMzOTUsOTczODk2LDk3NDM5Nyw5NzQ5MjgsOTc1NDI4LDk3NTkyOSw5NzY0NjEsOTc2OTYyLDk3NzQ2Miw5Nzc5OTQsOTc4NDk0LDk3OTAyNiw5Nzk1MjYsOTgwMDI2LDk4MDU1OCw5ODEwNTksOTgxNTU5LDk4MjA5MSw5ODI1OTMsOTgzMTI0LDk4MzYyNCw5ODQxMjQsOTg0NjU2LDk4NTE1Nyw5ODU2NTYsOTg2MTg5LDk4NjY5MCw5ODcxOTEsOTg3NzIyLDk4ODIyMiw5ODg3NTMsOTg5MjU0LDk4OTc1NCw5OTAyODYsOTkwNzg4LDk5MTI4OCw5OTE4MTksOTkyMzE5LDk5Mjg1MSw5OTMzNTIsOTkzODUxLDk5NDM4Myw5OTQ4ODUsOTk1Mzg1LDk5NTkxNyw5OTY0MTgsOTk2OTE4LDk5NzQ1MCw5OTc5NDksOTk4NDgxLDk5ODk4Miw5OTk0ODMsMTAwMDAxNCwxMDAwNTE1LDEwMDEwMTYsMTAwMTU0OCwxMDAyMDQ3LDEwMDI1NzgsMTAwMzA4MCwxMDAzNTgwLDEwMDQxMTEsMTAwNDYxMywxMDA1MTEzLDEwMDU2NDUsMTAwNjE0NiwxMDA2NjQ1LDEwMDcxNzcsMTAwNzY3OCwxMDA4MjA5LDEwMDg3MTAsMTAwOTIxMSwxMDA5NzQzLDEwMTAyNDMsMTAxMDc0MywxMDExMjc1LDEwMTE3NzUsMTAxMjMwNiwxMDEyODA3LDEwMTMzMDgsMTAxMzg0MCwxMDE0MzQxLDEwMTQ4NDEsMTAxNTM3MywxMDE1ODc0LDEwMTY0MDQsMTAxNjkwNSwxMDE3NDA1LDEwMTc5MzcsMTAxODQzOCwxMDE4OTM5LDEwMTk0NzEsMTAxOTk3MiwxMDIwNDcxLDEwMjEwMDIsMTAyMTUwMywxMDIyMDM1LDEwMjI1MzUsMTAyMzAzNiwxMDIzNTY4LDEwMjQwNjksMTAyNDU2OCwxMDI1MTAwLDEwMjU2MDEsMTAyNjEwMiwxMDI2NjMzLDEwMjcxMzMsMTAyNzY2NiwxMDI4MTY3LDEwMjg2NjYsMTAyOTE5OCwxMDI5Njk5LDEwMzAxOTksMTAzMDczMCwxMDMxMjMxLDEwMzE3NjMsMTAzMjI2NCwxMDMyNzY0LDEwMzMyOTYsMTAzMzc5NywxMDM0Mjk3LDEwMzQ4MjgsMTAzNTMyOSwxMDM1ODMwLDEwMzYzNjIsMTAzNjg2MSwxMDM3MzkzLDEwMzc4OTQsMTAzODM5NCwxMDM4OTI1LDEwMzk0MjcsMTAzOTkyNywxMDQwNDU5LDEwNDA5NTksMTA0MTQ5MSwxMDQxOTkyLDEwNDI0OTIsMTA0MzAyMywxMDQzNTI0LDEwNDQwMjQsMTA0NDU1NiwxMDQ1MDU3LDEwNDU1NTgsMTA0NjA5MCwxMDQ2NTkwLDEwNDcxMjEsMTA0NzYyMiwxMDQ4MTIyLDEwNDg2NTQsMTA0OTE1NCwxMDQ5NjU1LDEwNTAxODcsMTA1MDY4OSwxMDUxMjE5LDEwNTE3MjAsMTA1MjIyMCwxMDUyNzUxLDEwNTMyNTIsMTA1Mzc1MiwxMDU0Mjg0LDEwNTQ3ODYsMTA1NTI4NSwxMDU1ODE3LDEwNTYzMTcsMTA1Njg0OSwxMDU3MzQ5LDEwNTc4NTAsMTA1ODM4MiwxMDU4ODgzLDEwNTkzODMsMTA1OTkxNSwxMDYwNDE1LDEwNjA5NDcsMTA2MTQ0NywxMDYxOTQ3LDEwNjI0NzksMTA2Mjk4MSwxMDYzNDgwLDEwNjQwMTIsMTA2NDUxNCwxMDY1MDE0LDEwNjU1NDUsMTA2NjA0NSwxMDY2NTc3LDEwNjcwNzgsMTA2NzU3OCwxMDY4MTEwLDEwNjg2MTEsMTA2OTExMiwxMDY5NjQyLDEwNzAxNDIsMTA3MDY3NCwxMDcxMTc1LDEwNzE2NzUsMTA3MjIwNywxMDcyNzA5LDEwNzMyMDksMTA3Mzc0MCwxMDc0MjQxLDEwNzQ3NDEsMTA3NTI3MywxMDc1NzczLDEwNzYzMDUsMTA3NjgwNywxMDc3MzA4LDEwNzc4MzksMTA3ODM0MCwxMDc4ODQwLDEwNzkzNzIsMTA3OTg3MSwxMDgwNDAzLDEwODA5MDRdfSx7Ii4uL21haW4iOjU3MCwib2JqZWN0LWFzc2lnbiI6NDU2fV0sNTU3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGE9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGkodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1pLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsYShpLnByb3RvdHlwZSx7bmFtZToiQ29wdGljIixqZEVwb2NoOjE4MjUwMjkuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkNvcHRpYyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiVGhvdXQiLCJQYW9waSIsIkhhdGhvciIsIktvaWFrIiwiVG9iaSIsIk1lc2hpciIsIlBhcmVtaGF0IiwiUGFyZW1vdWRlIiwiUGFzaG9ucyIsIlBhb25pIiwiRXBpcCIsIk1lc29yaSIsIlBpIEtvZ2kgRW5hdm90Il0sbW9udGhOYW1lc1Nob3J0OlsiVGhvIiwiUGFvIiwiSGF0aCIsIktvaSIsIlRvYiIsIk1lc2giLCJQYXQiLCJQYWQiLCJQYXNoIiwiUGFvIiwiRXBpIiwiTWVzbyIsIlBpSyJdLGRheU5hbWVzOlsiVGt5cmlha2EiLCJQZXNuYXUiLCJQc2hvbWVudCIsIlBlZnRvb3UiLCJQdGlvdSIsIlBzb291IiwiUHNhYmJhdG9uIl0sZGF5TmFtZXNTaG9ydDpbIlRreSIsIlBlcyIsIlBzaCIsIlBlZiIsIlB0aSIsIlBzbyIsIlBzYSJdLGRheU5hbWVzTWluOlsiVGsiLCJQZXMiLCJQc2giLCJQZWYiLCJQdCIsIlBzbyIsIlBzYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkL21tL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCkrKGUueWVhcigpPDA/MTowKSklND09M3x8dCU0PT0tMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcnx8bi5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGE9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuKHQ9YS55ZWFyKCkpPDAmJnQrKyxhLmRheSgpKzMwKihhLm1vbnRoKCktMSkrMzY1Kih0LTEpK01hdGguZmxvb3IodC80KSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoLHI9TWF0aC5mbG9vcigoZS1NYXRoLmZsb29yKChlKzM2NikvMTQ2MSkpLzM2NSkrMTtyPD0wJiZyLS0sZT1NYXRoLmZsb29yKHQpKy41LXRoaXMubmV3RGF0ZShyLDEsMSkudG9KRCgpO3ZhciBuPU1hdGguZmxvb3IoZS8zMCkrMSxhPWUtMzAqKG4tMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsbixhKX19KSxuLmNhbGVuZGFycy5jb3B0aWM9aX0seyIuLi9tYWluIjo1NzAsIm9iamVjdC1hc3NpZ24iOjQ1Nn1dLDU1ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxhPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBpKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19aS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGEoaS5wcm90b3R5cGUse25hbWU6IkRpc2N3b3JsZCIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlsxNiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiRGlzY3dvcmxkIixlcG9jaHM6WyJCVUMiLCJVQyJdLG1vbnRoTmFtZXM6WyJJY2siLCJPZmZsZSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJHcnVuZSIsIkF1Z3VzdCIsIlNwdW5lIiwiU2VrdG9iZXIiLCJFbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSWNrIiwiT2ZmIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiR3J1IiwiQXVnIiwiU3B1IiwiU2VrIiwiRW1iIiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJPY3RlZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiT2N0IiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk9jIiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Mixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksITF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDEzfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksNDAwfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvOCkrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV19LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gOH0sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkuZGF5KCkrMSklOH0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5kYXlPZldlZWsodCxlLHIpO3JldHVybiBuPj0yJiZuPD02fSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybntjZW50dXJ5Om9bTWF0aC5mbG9vcigoYS55ZWFyKCktMSkvMTAwKSsxXXx8IiJ9fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1hLnllYXIoKSsoYS55ZWFyKCk8MD8xOjApLGU9YS5tb250aCgpLChyPWEuZGF5KCkpKyhlPjE/MTY6MCkrKGU+Mj8zMiooZS0yKTowKSs0MDAqKHQtMSkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCsuNSktTWF0aC5mbG9vcih0aGlzLmpkRXBvY2gpLTE7dmFyIGU9TWF0aC5mbG9vcih0LzQwMCkrMTt0LT00MDAqKGUtMSksdCs9dD4xNT8xNjowO3ZhciByPU1hdGguZmxvb3IodC8zMikrMSxuPXQtMzIqKHItMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGU8PTA/ZS0xOmUscixuKX19KTt2YXIgbz17MjA6IkZydWl0YmF0IiwyMToiQW5jaG92eSJ9O24uY2FsZW5kYXJzLmRpc2N3b3JsZD1pfSx7Ii4uL21haW4iOjU3MCwib2JqZWN0LWFzc2lnbiI6NDU2fV0sNTU5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGE9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGkodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1pLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsYShpLnByb3RvdHlwZSx7bmFtZToiRXRoaW9waWFuIixqZEVwb2NoOjE3MjQyMjAuNSxkYXlzUGVyTW9udGg6WzMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDMwLDVdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkV0aGlvcGlhbiIsZXBvY2hzOlsiQkVFIiwiRUUiXSxtb250aE5hbWVzOlsiTWVza2VyZW0iLCJUaWtlbWV0IiwiSGlkYXIiLCJUYWhlc2FzIiwiVGlyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc2UiLCJQYWd1bWUiXSxtb250aE5hbWVzU2hvcnQ6WyJNZXMiLCJUaWsiLCJIaWQiLCJUYWgiLCJUaXIiLCJZZWsiLCJNZWciLCJNaWEiLCJHZW4iLCJTZW4iLCJIYW0iLCJOZWgiLCJQYWciXSxkYXlOYW1lczpbIkVodWQiLCJTZWdubyIsIk1ha3NlZ25vIiwiSXJvYiIsIkhhbXVzIiwiQXJiIiwiS2lkYW1lIl0sZGF5TmFtZXNTaG9ydDpbIkVodSIsIlNlZyIsIk1hayIsIklybyIsIkhhbSIsIkFyYiIsIktpZCJdLGRheU5hbWVzTWluOlsiRWgiLCJTZSIsIk1hIiwiSXIiLCJIYSIsIkFyIiwiS2kiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTN8fHQlND09LTF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhciksMTN9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTM9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybih0PWEueWVhcigpKTwwJiZ0KyssYS5kYXkoKSszMCooYS5tb250aCgpLTEpKzM2NSoodC0xKStNYXRoLmZsb29yKHQvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKGUtTWF0aC5mbG9vcigoZSszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKGUvMzApKzEsYT1lLTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4sYSl9fSksbi5jYWxlbmRhcnMuZXRoaW9waWFuPWl9LHsiLi4vbWFpbiI6NTcwLCJvYmplY3QtYXNzaWduIjo0NTZ9XSw1NjA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gaSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC1lKk1hdGguZmxvb3IodC9lKX1pLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsYShpLnByb3RvdHlwZSx7bmFtZToiSGVicmV3IixqZEVwb2NoOjM0Nzk5NS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDo3LG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkhlYnJldyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW1tdXoiLCJBdiIsIkVsdWwiLCJUaXNocmVpIiwiQ2hlc2h2YW4iLCJLaXNsZXYiLCJUZXZldCIsIlNoZXZhdCIsIkFkYXIiLCJBZGFyIElJIl0sbW9udGhOYW1lc1Nob3J0OlsiTmlzIiwiSXlhIiwiU2l2IiwiVGFtIiwiQXYiLCJFbHUiLCJUaXMiLCJDaGUiLCJLaXMiLCJUZXYiLCJTaGUiLCJBZGEiLCJBZDIiXSxkYXlOYW1lczpbIllvbSBSaXNob24iLCJZb20gU2hlbmkiLCJZb20gU2hsaXNoaSIsIllvbSBSZXZpJ2kiLCJZb20gQ2hhbWlzaGkiLCJZb20gU2hpc2hpIiwiWW9tIFNoYWJiYXQiXSxkYXlOYW1lc1Nob3J0OlsiUmlzIiwiU2hlIiwiU2hsIiwiUmV2IiwiQ2hhIiwiU2hpIiwiU2hhIl0sZGF5TmFtZXNNaW46WyJSaSIsIlNoZSIsIlNobCIsIlJlIiwiQ2giLCJTaGkiLCJTaGEiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiB0aGlzLl9sZWFwWWVhcihlLnllYXIoKSl9LF9sZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gbyg3Kih0PXQ8MD90KzE6dCkrMSwxOSk8N30sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksdGhpcy5fbGVhcFllYXIodC55ZWFyP3QueWVhcigpOnQpPzEzOjEyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLHRoaXMudG9KRCgtMT09PXQ/MTp0KzEsNywxKS10aGlzLnRvSkQodCw3LDEpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLDEyPT09ZSYmdGhpcy5sZWFwWWVhcih0KT8zMDo4PT09ZSYmNT09PW8odGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8zMDo5PT09ZSYmMz09PW8odGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8yOTp0aGlzLmRheXNQZXJNb250aFtlLTFdfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNiE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm57eWVhclR5cGU6KHRoaXMubGVhcFllYXIoYSk/ImVtYm9saXNtaWMiOiJjb21tb24iKSsiICIrWyJkZWZpY2llbnQiLCJyZWd1bGFyIiwiY29tcGxldGUiXVt0aGlzLmRheXNJblllYXIoYSklMTAtM119fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PWEueWVhcigpLGU9YS5tb250aCgpLHI9YS5kYXkoKTt2YXIgaT10PD0wP3QrMTp0LG89dGhpcy5qZEVwb2NoK3RoaXMuX2RlbGF5MShpKSt0aGlzLl9kZWxheTIoaSkrcisxO2lmKGU8Nyl7Zm9yKHZhciBzPTc7czw9dGhpcy5tb250aHNJblllYXIodCk7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKTtmb3Iocz0xO3M8ZTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpfWVsc2UgZm9yKHM9NztzPGU7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKTtyZXR1cm4gb30sX2RlbGF5MTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKCgyMzUqdC0yMzQpLzE5KSxyPTEyMDg0KzEzNzUzKmUsbj0yOSplK01hdGguZmxvb3Ioci8yNTkyMCk7cmV0dXJuIG8oMyoobisxKSw3KTwzJiZuKyssbn0sX2RlbGF5MjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9kZWxheTEodC0xKSxyPXRoaXMuX2RlbGF5MSh0KTtyZXR1cm4gdGhpcy5fZGVsYXkxKHQrMSktcj09MzU2PzI6ci1lPT0zODI/MTowfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQpKy41O2Zvcih2YXIgZT1NYXRoLmZsb29yKDk4NDk2Kih0LXRoaXMuamRFcG9jaCkvMzU5NzUzNTEpLTE7dD49dGhpcy50b0pEKC0xPT09ZT8xOmUrMSw3LDEpOyllKys7Zm9yKHZhciByPXQ8dGhpcy50b0pEKGUsMSwxKT83OjE7dD50aGlzLnRvSkQoZSxyLHRoaXMuZGF5c0luTW9udGgoZSxyKSk7KXIrKzt2YXIgbj10LXRoaXMudG9KRChlLHIsMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGUscixuKX19KSxuLmNhbGVuZGFycy5oZWJyZXc9aX0seyIuLi9tYWluIjo1NzAsIm9iamVjdC1hc3NpZ24iOjQ1Nn1dLDU2MTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxhPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBpKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19aS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGEoaS5wcm90b3R5cGUse25hbWU6IklzbGFtaWMiLGpkRXBvY2g6MTk0ODQzOS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IklzbGFtaWMiLGVwb2NoczpbIkJIIiwiQUgiXSxtb250aE5hbWVzOlsiTXVoYXJyYW0iLCJTYWZhciIsIlJhYmknIGFsLWF3d2FsIiwiUmFiaScgYWwtdGhhbmkiLCJKdW1hZGEgYWwtYXd3YWwiLCJKdW1hZGEgYWwtdGhhbmkiLCJSYWphYiIsIlNoYSdhYmFuIiwiUmFtYWRhbiIsIlNoYXd3YWwiLCJEaHUgYWwtUWknZGFoIiwiRGh1IGFsLUhpamphaCJdLG1vbnRoTmFtZXNTaG9ydDpbIk11aCIsIlNhZiIsIlJhYjEiLCJSYWIyIiwiSnVtMSIsIkp1bTIiLCJSYWoiLCJTaGEnIiwiUmFtIiwiU2hhdyIsIkRodVEiLCJEaHVIIl0sZGF5TmFtZXM6WyJZYXdtIGFsLWFoYWQiLCJZYXdtIGFsLWl0aG5heW4iLCJZYXdtIGF0aC10aHVsYWF0aGFhJyIsIllhd20gYWwtYXJiaSdhYSciLCJZYXdtIGFsLWtoYW1cdTAxMmJzIiwiWWF3bSBhbC1qdW0nYSIsIllhd20gYXMtc2FidCJdLGRheU5hbWVzU2hvcnQ6WyJBaGEiLCJJdGgiLCJUaHUiLCJBcmIiLCJLaGEiLCJKdW0iLCJTYWIiXSxkYXlOYW1lc01pbjpbIkFoIiwiSXQiLCJUaCIsIkFyIiwiS2giLCJKdSIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybigxMSp0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpKzE0KSUzMDwxMX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVhcFllYXIodCk/MzU1OjM1NH0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGE9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9YS55ZWFyKCksZT1hLm1vbnRoKCksdD10PD0wP3QrMTp0LChyPWEuZGF5KCkpK01hdGguY2VpbCgyOS41KihlLTEpKSszNTQqKHQtMSkrTWF0aC5mbG9vcigoMysxMSp0KS8zMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjU7dmFyIGU9TWF0aC5mbG9vcigoMzAqKHQtdGhpcy5qZEVwb2NoKSsxMDY0NikvMTA2MzEpO2U9ZTw9MD9lLTE6ZTt2YXIgcj1NYXRoLm1pbigxMixNYXRoLmNlaWwoKHQtMjktdGhpcy50b0pEKGUsMSwxKSkvMjkuNSkrMSksbj10LXRoaXMudG9KRChlLHIsMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGUscixuKX19KSxuLmNhbGVuZGFycy5pc2xhbWljPWl9LHsiLi4vbWFpbiI6NTcwLCJvYmplY3QtYXNzaWduIjo0NTZ9XSw1NjI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gaSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWkucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixhKGkucHJvdG90eXBlLHtuYW1lOiJKdWxpYW4iLGpkRXBvY2g6MTcyMTQyMy41LGRheXNQZXJNb250aDpbMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ikp1bGlhbiIsZXBvY2hzOlsiQkMiLCJBRCJdLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Im1tL2RkL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuKHQ9ZS55ZWFyKCk8MD9lLnllYXIoKSsxOmUueWVhcigpKSU0PT0wfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCg0LShuLmRheU9mV2VlaygpfHw3KSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PWEueWVhcigpLGU9YS5tb250aCgpLHI9YS5kYXkoKSx0PDAmJnQrKyxlPD0yJiYodC0tLGUrPTEyKSxNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyLTE1MjQuNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCsuNSkrMTUyNCxyPU1hdGguZmxvb3IoKGUtMTIyLjEpLzM2NS4yNSksbj1NYXRoLmZsb29yKDM2NS4yNSpyKSxhPU1hdGguZmxvb3IoKGUtbikvMzAuNjAwMSksaT1hLU1hdGguZmxvb3IoYTwxND8xOjEzKSxvPXItTWF0aC5mbG9vcihpPjI/NDcxNjo0NzE1KSxzPWUtbi1NYXRoLmZsb29yKDMwLjYwMDEqYSk7cmV0dXJuIG88PTAmJm8tLSx0aGlzLm5ld0RhdGUobyxpLHMpfX0pLG4uY2FsZW5kYXJzLmp1bGlhbj1pfSx7Ii4uL21haW4iOjU3MCwib2JqZWN0LWFzc2lnbiI6NDU2fV0sNTYzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGE9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGkodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBvKHQtMSxlKSsxfWkucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixhKGkucHJvdG90eXBlLHtuYW1lOiJNYXlhbiIsamRFcG9jaDo1ODQyODIuNSxoYXNZZWFyWmVybzohMCxtaW5Nb250aDowLGZpcnN0TW9udGg6MCxtaW5EYXk6MCxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJNYXlhbiIsZXBvY2hzOlsiIiwiIl0sbW9udGhOYW1lczpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3Il0sbW9udGhOYW1lc1Nob3J0OlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciXSxkYXlOYW1lczpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSJdLGRheU5hbWVzU2hvcnQ6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkYXlOYW1lc01pbjpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6IllZWVkubS5kIixmaXJzdERheTowLGlzUlRMOiExLGhhYWJNb250aHM6WyJQb3AiLCJVbyIsIlppcCIsIlpvdHoiLCJUemVjIiwiWHVsIiwiWWF4a2luIiwiTW9sIiwiQ2hlbiIsIllheCIsIlphYyIsIkNlaCIsIk1hYyIsIkthbmtpbiIsIk11YW4iLCJQYXgiLCJLYXlhYiIsIkN1bWt1IiwiVWF5ZWIiXSx0em9sa2luTW9udGhzOlsiSW1peCIsIklrIiwiQWtiYWwiLCJLYW4iLCJDaGljY2hhbiIsIkNpbWkiLCJNYW5payIsIkxhbWF0IiwiTXVsdWMiLCJPYyIsIkNodWVuIiwiRWIiLCJCZW4iLCJJeCIsIk1lbiIsIkNpYiIsIkNhYmFuIiwiRXR6bmFiIiwiQ2F1YWMiLCJBaGF1Il19fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLCExfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKHQpe3Q9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKTt2YXIgZT1NYXRoLmZsb29yKHQvNDAwKTtyZXR1cm4gdCU9NDAwLHQrPXQ8MD80MDA6MCxlKyIuIitNYXRoLmZsb29yKHQvMjApKyIuIit0JTIwfSxmb3JZZWFyOmZ1bmN0aW9uKHQpe2lmKCh0PXQuc3BsaXQoIi4iKSkubGVuZ3RoPDMpdGhyb3ciSW52YWxpZCBNYXlhbiB5ZWFyIjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXBhcnNlSW50KHRbcl0sMTApO2lmKE1hdGguYWJzKG4pPjE5fHxyPjAmJm48MCl0aHJvdyJJbnZhbGlkIE1heWFuIHllYXIiO2U9MjAqZStufXJldHVybiBlfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwxOH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLDB9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwzNjB9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCksMjB9LGRheXNJbldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gNX0sZGF5T2ZXZWVrOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSkuZGF5KCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKSwhMH0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKS50b0pEKCksaT10aGlzLl90b0hhYWIoYSksbz10aGlzLl90b1R6b2xraW4oYSk7cmV0dXJue2hhYWJNb250aE5hbWU6dGhpcy5sb2NhbC5oYWFiTW9udGhzW2lbMF0tMV0saGFhYk1vbnRoOmlbMF0saGFhYkRheTppWzFdLHR6b2xraW5EYXlOYW1lOnRoaXMubG9jYWwudHpvbGtpbk1vbnRoc1tvWzBdLTFdLHR6b2xraW5EYXk6b1swXSx0em9sa2luVHJlY2VuYTpvWzFdfX0sX3RvSGFhYjpmdW5jdGlvbih0KXt2YXIgZT1vKCh0LT10aGlzLmpkRXBvY2gpKzgrMzQwLDM2NSk7cmV0dXJuW01hdGguZmxvb3IoZS8yMCkrMSxvKGUsMjApXX0sX3RvVHpvbGtpbjpmdW5jdGlvbih0KXtyZXR1cm5bcygodC09dGhpcy5qZEVwb2NoKSsyMCwyMCkscyh0KzQsMTMpXX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGE9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIGEuZGF5KCkrMjAqYS5tb250aCgpKzM2MCphLnllYXIoKSt0aGlzLmpkRXBvY2h9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoO3ZhciBlPU1hdGguZmxvb3IodC8zNjApO3QlPTM2MCx0Kz10PDA/MzYwOjA7dmFyIHI9TWF0aC5mbG9vcih0LzIwKSxuPXQlMjA7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksbi5jYWxlbmRhcnMubWF5YW49aX0seyIuLi9tYWluIjo1NzAsIm9iamVjdC1hc3NpZ24iOjQ1Nn1dLDU2NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxhPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBpKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19aS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyO3ZhciBvPW4uaW5zdGFuY2UoImdyZWdvcmlhbiIpO2EoaS5wcm90b3R5cGUse25hbWU6Ik5hbmFrc2hhaGkiLGpkRXBvY2g6MjI1NzY3My41LGRheXNQZXJNb250aDpbMzEsMzEsMzEsMzEsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5hbmFrc2hhaGkiLGVwb2NoczpbIkJOIiwiQU4iXSxtb250aE5hbWVzOlsiQ2hldCIsIlZhaXNha2giLCJKZXRoIiwiSGFyaCIsIlNhd2FuIiwiQmhhZG9uIiwiQXNzdSIsIkthdGFrIiwiTWFnaGFyIiwiUG9oIiwiTWFnaCIsIlBoYWd1biJdLG1vbnRoTmFtZXNTaG9ydDpbIkNoZSIsIlZhaSIsIkpldCIsIkhhciIsIlNhdyIsIkJoYSIsIkFzcyIsIkthdCIsIk1nciIsIlBvaCIsIk1naCIsIlBoYSJdLGRheU5hbWVzOlsiU29tdmFhciIsIk1hbmdhbHZhciIsIkJ1ZGh2YWFyIiwiVmVlcnZhYXIiLCJTaHVrYXJ2YWFyIiwiU2FuaWNoYXJ2YWFyIiwiRXR2YWFyIl0sZGF5TmFtZXNTaG9ydDpbIlNvbSIsIk1hbmdhbCIsIkJ1ZGgiLCJWZWVyIiwiU2h1a2FyIiwiU2FuaWNoYXIiLCJFdCJdLGRheU5hbWVzTWluOlsiU28iLCJNYSIsIkJ1IiwiVmUiLCJTaCIsIlNhIiwiRXQiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC1tbS15eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuIG8ubGVhcFllYXIoZS55ZWFyKCkrKGUueWVhcigpPDE/MTowKSsxNDY5KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoMS0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGE9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkTW9udGgpOyh0PWEueWVhcigpKTwwJiZ0Kys7Zm9yKHZhciBpPWEuZGF5KCkscz0xO3M8YS5tb250aCgpO3MrKylpKz10aGlzLmRheXNQZXJNb250aFtzLTFdO3JldHVybiBpK28udG9KRCh0KzE0NjgsMywxMyl9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCsuNSk7Zm9yKHZhciBlPU1hdGguZmxvb3IoKHQtKHRoaXMuamRFcG9jaC0xKSkvMzY2KTt0Pj10aGlzLnRvSkQoZSsxLDEsMSk7KWUrKztmb3IodmFyIHI9dC1NYXRoLmZsb29yKHRoaXMudG9KRChlLDEsMSkrLjUpKzEsbj0xO3I+dGhpcy5kYXlzSW5Nb250aChlLG4pOylyLT10aGlzLmRheXNJbk1vbnRoKGUsbiksbisrO3JldHVybiB0aGlzLm5ld0RhdGUoZSxuLHIpfX0pLG4uY2FsZW5kYXJzLm5hbmFrc2hhaGk9aX0seyIuLi9tYWluIjo1NzAsIm9iamVjdC1hc3NpZ24iOjQ1Nn1dLDU2NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxhPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBpKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19aS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGEoaS5wcm90b3R5cGUse25hbWU6Ik5lcGFsaSIsamRFcG9jaDoxNzAwNzA5LjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEsZGF5c1BlclllYXI6MzY1LHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5lcGFsaSIsZXBvY2hzOlsiQkJTIiwiQUJTIl0sbW9udGhOYW1lczpbIkJhaXNha2giLCJKZXN0aGEiLCJBc2hhZGgiLCJTaHJhd2FuIiwiQmhhZHJhIiwiQXNod2luIiwiS2FydGlrIiwiTWFuZ3NpciIsIlBhdXNoIiwiTWFuZ2giLCJGYWxndW4iLCJDaGFpdHJhIl0sbW9udGhOYW1lc1Nob3J0OlsiQmFpIiwiSmUiLCJBcyIsIlNocmEiLCJCaGEiLCJBc2giLCJLYXIiLCJNYW5nIiwiUGF1IiwiTWEiLCJGYWwiLCJDaGFpIl0sZGF5TmFtZXM6WyJBYWl0YWJhYXIiLCJTb21iYWFyIiwiTWFuZ2xiYWFyIiwiQnVkaGFiYWFyIiwiQmloaWJhYXIiLCJTaHVrcmFiYWFyIiwiU2hhbmliYWFyIl0sZGF5TmFtZXNTaG9ydDpbIkFhaXRhIiwiU29tIiwiTWFuZ2wiLCJCdWRoYSIsIkJpaGkiLCJTaHVrcmEiLCJTaGFuaSJdLGRheU5hbWVzTWluOlsiQWFpIiwiU28iLCJNYW4iLCJCdSIsIkJpIiwiU2h1IiwiU2hhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MSxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRheXNJblllYXIodCkhPT10aGlzLmRheXNQZXJZZWFyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtpZih0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCksInVuZGVmaW5lZCI9PXR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdKXJldHVybiB0aGlzLmRheXNQZXJZZWFyO2Zvcih2YXIgZT0wLHI9dGhpcy5taW5Nb250aDtyPD0xMjtyKyspZSs9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XVtyXTtyZXR1cm4gZX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSwidW5kZWZpbmVkIj09dHlwZW9mIHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF0/dGhpcy5kYXlzUGVyTW9udGhbZS0xXTp0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdW2VdfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNiE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGE9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1hLnllYXIoKSxlPWEubW9udGgoKSxyPWEuZGF5KCk7dmFyIGk9bi5pbnN0YW5jZSgpLG89MCxzPWUsbD10O3RoaXMuX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGEodCk7dmFyIGM9dC0ocz45fHw5PT09cyYmcj49dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXT81Njo1Nyk7Zm9yKDkhPT1lJiYobz1yLHMtLSk7OSE9PXM7KXM8PTAmJihzPTEyLGwtLSksbys9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVtzXSxzLS07cmV0dXJuIDk9PT1lPyhvKz1yLXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0pPDAmJihvKz1pLmRheXNJblllYXIoYykpOm8rPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bOV0tdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXSxpLm5ld0RhdGUoYywxLDEpLmFkZChvLCJkIikudG9KRCgpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9bi5pbnN0YW5jZSgpLmZyb21KRCh0KSxyPWUueWVhcigpLGE9ZS5kYXlPZlllYXIoKSxpPXIrNTY7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YShpKTtmb3IodmFyIG89OSxzPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbaV1bMF0sbD10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2ldW29dLXMrMTthPmw7KSsrbz4xMiYmKG89MSxpKyspLGwrPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbaV1bb107dmFyIGM9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtpXVtvXS0obC1hKTtyZXR1cm4gdGhpcy5uZXdEYXRlKGksbyxjKX0sX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGE6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXlzUGVyTW9udGguc2xpY2UoMCk7ZS51bnNoaWZ0KDE3KTtmb3IodmFyIHI9dC0xO3I8dCsyO3IrKykidW5kZWZpbmVkIj09dHlwZW9mIHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbcl0mJih0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3JdPWUpfSxORVBBTElfQ0FMRU5EQVJfREFUQTp7MTk3MDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzE6WzE4LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTcyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk3MzpbMTksMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5NzQ6WzE5LDMxLDMxLDMyLDMwLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc1OlsxOCwzMSwzMSwzMiwzMiwzMCwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5Nzc6WzE4LDMxLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDI5LDMwLDI5LDMxXSwxOTc4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3OTpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTgxOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMTk4MjpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5ODM6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4NTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDE5ODY6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg3OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4ODpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODk6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkwOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5OTI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTkzOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5NDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTU6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwxOTk2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk5NzpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTg6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAwMDpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDE6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAyOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwMzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDQ6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDA1OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNjpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMDc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDA4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAwOTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTA6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDExOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxMjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTM6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE0OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxNTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMTY6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDE3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxODpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDIwOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDIzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyNDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAyNzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI5OlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzMDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzFdLDIwMzE6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMxLDMxLDMxLDMxLDMxLDMxXSwyMDMyOlsxNywzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0sMjAzMzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM1OlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAzNjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMzc6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAzOTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDA6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQxOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDM6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDQ0OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNDY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDQ3OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0ODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDUwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1MTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTI6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDUzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA1NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDI5LDMwXSwyMDU2OlsxNywzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNTg6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDU5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDYyOlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMjA2MzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjQ6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA2NjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwNjc6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY4OlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDcxOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNzM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDc0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzY6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDc3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA3ODpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDgwOlsxNiwzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA4MTpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDgzOlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODU6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NzpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODg6WzE2LDMwLDMxLDMyLDMyLDMwLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTE6WzE2LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkyOlsxNiwzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwzMCwzMCwzMF0sMjA5NjpbMTcsMzAsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwOTc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwyOSwzMCwyOSwzMCwzMCwzMV0sMjA5OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMjksMzAsMzAsMzBdLDIxMDA6WzE3LDMxLDMyLDMxLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXX19KSxuLmNhbGVuZGFycy5uZXBhbGk9aX0seyIuLi9tYWluIjo1NzAsIm9iamVjdC1hc3NpZ24iOjQ1Nn1dLDU2NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxhPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBpKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfWkucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixhKGkucHJvdG90eXBlLHtuYW1lOiJQZXJzaWFuIixqZEVwb2NoOjE5NDgzMjAuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMxLDMxLDMxLDMxLDMwLDMwLDMwLDMwLDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJQZXJzaWFuIixlcG9jaHM6WyJCUCIsIkFQIl0sbW9udGhOYW1lczpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRheSIsIkJhaG1hbiIsIkVzZmFuZCJdLG1vbnRoTmFtZXNTaG9ydDpbIkZhciIsIk9yZCIsIktobyIsIlRpciIsIk1vciIsIlNoYSIsIk1laCIsIkFiYSIsIkF6YSIsIkRheSIsIkJhaCIsIkVzZiJdLGRheU5hbWVzOlsiWWVrc2hhbWJlIiwiRG9zaGFtYmUiLCJTZXNoYW1iZSIsIkNoXHhlNmhhcnNoYW1iZSIsIlBhbmpzaGFtYmUiLCJKb20nZSIsIlNoYW1iZSJdLGRheU5hbWVzU2hvcnQ6WyJZZWsiLCJEbyIsIlNlIiwiQ2hceGU2IiwiUGFuaiIsIkpvbSIsIlNoYSJdLGRheU5hbWVzTWluOlsiWWUiLCJEbyIsIlNlIiwiQ2giLCJQYSIsIkpvIiwiU2giXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiA2ODIqKChlLnllYXIoKS0oZS55ZWFyKCk+MD80NzQ6NDczKSklMjgyMCs0NzQrMzgpJTI4MTY8NjgyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtKG4uZGF5T2ZXZWVrKCkrMSklNywiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGE9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1hLnllYXIoKSxlPWEubW9udGgoKSxyPWEuZGF5KCk7dmFyIGk9dC0odD49MD80NzQ6NDczKSxzPTQ3NCtvKGksMjgyMCk7cmV0dXJuIHIrKGU8PTc/MzEqKGUtMSk6MzAqKGUtMSkrNikrTWF0aC5mbG9vcigoNjgyKnMtMTEwKS8yODE2KSszNjUqKHMtMSkrMTAyOTk4MypNYXRoLmZsb29yKGkvMjgyMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT0odD1NYXRoLmZsb29yKHQpKy41KS10aGlzLnRvSkQoNDc1LDEsMSkscj1NYXRoLmZsb29yKGUvMTAyOTk4Myksbj1vKGUsMTAyOTk4MyksYT0yODIwO2lmKDEwMjk5ODIhPT1uKXt2YXIgaT1NYXRoLmZsb29yKG4vMzY2KSxzPW8obiwzNjYpO2E9TWF0aC5mbG9vcigoMjEzNCppKzI4MTYqcysyODE1KS8xMDI4NTIyKStpKzF9dmFyIGw9YSsyODIwKnIrNDc0O2w9bDw9MD9sLTE6bDt2YXIgYz10LXRoaXMudG9KRChsLDEsMSkrMSx1PWM8PTE4Nj9NYXRoLmNlaWwoYy8zMSk6TWF0aC5jZWlsKChjLTYpLzMwKSxoPXQtdGhpcy50b0pEKGwsdSwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUobCx1LGgpfX0pLG4uY2FsZW5kYXJzLnBlcnNpYW49aSxuLmNhbGVuZGFycy5qYWxhbGk9aX0seyIuLi9tYWluIjo1NzAsIm9iamVjdC1hc3NpZ24iOjQ1Nn1dLDU2NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxhPXQoIm9iamVjdC1hc3NpZ24iKSxpPW4uaW5zdGFuY2UoKTtmdW5jdGlvbiBvKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19by5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGEoby5wcm90b3R5cGUse25hbWU6IlRhaXdhbiIsamRFcG9jaDoyNDE5NDAyLjUseWVhcnNPZmZzZXQ6MTkxMSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJUYWl3YW4iLGVwb2NoczpbIkJST0MiLCJST0MiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGkubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoYS55ZWFyKCkpO3JldHVybiBpLndlZWtPZlllYXIodCxhLm1vbnRoKCksYS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoYS55ZWFyKCkpO3JldHVybiBpLnRvSkQodCxhLm1vbnRoKCksYS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1pLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMueWVhcnNPZmZzZXQrKHQ+PS10aGlzLnllYXJzT2Zmc2V0JiZ0PD0tMT8xOjApfSxfZzJ0WWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnllYXJzT2Zmc2V0LSh0Pj0xJiZ0PD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9fSksbi5jYWxlbmRhcnMudGFpd2FuPW99LHsiLi4vbWFpbiI6NTcwLCJvYmplY3QtYXNzaWduIjo0NTZ9XSw1Njg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIiksaT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixhKG8ucHJvdG90eXBlLHtuYW1lOiJUaGFpIixqZEVwb2NoOjE1MjMwOTguNSx5ZWFyc09mZnNldDo1NDMsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiVGhhaSIsZXBvY2hzOlsiQkJFIiwiQkUiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3Q9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIGkubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoYS55ZWFyKCkpO3JldHVybiBpLndlZWtPZlllYXIodCxhLm1vbnRoKCksYS5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3QyZ1llYXIoYS55ZWFyKCkpO3JldHVybiBpLnRvSkQodCxhLm1vbnRoKCksYS5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1pLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMueWVhcnNPZmZzZXQtKHQ+PTEmJnQ8PXRoaXMueWVhcnNPZmZzZXQ/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQrdGhpcy55ZWFyc09mZnNldCsodD49LXRoaXMueWVhcnNPZmZzZXQmJnQ8PS0xPzE6MCl9fSksbi5jYWxlbmRhcnMudGhhaT1vfSx7Ii4uL21haW4iOjU3MCwib2JqZWN0LWFzc2lnbiI6NDU2fV0sNTY5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGE9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGkodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1pLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsYShpLnByb3RvdHlwZSx7bmFtZToiVW1tQWxRdXJhIixoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJVbW0gYWwtUXVyYSIsZXBvY2hzOlsiQkgiLCJBSCJdLG1vbnRoTmFtZXM6WyJBbC1NdWhhcnJhbSIsIlNhZmFyIiwiUmFiaScgYWwtYXd3YWwiLCJSYWJpJyBBbC1UaGFuaSIsIkp1bWFkYSBBbC1Bd3dhbCIsIkp1bWFkYSBBbC1UaGFuaSIsIlJhamFiIiwiU2hhJ2FiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodSBhbC1RaSdkYWgiLCJEaHUgYWwtSGlqamFoIl0sbW9udGhOYW1lc1Nob3J0OlsiTXVoIiwiU2FmIiwiUmFiMSIsIlJhYjIiLCJKdW0xIiwiSnVtMiIsIlJhaiIsIlNoYSciLCJSYW0iLCJTaGF3IiwiRGh1USIsIkRodUgiXSxkYXlOYW1lczpbIllhd20gYWwtQWhhZCIsIllhd20gYWwtSXRobmFpbiIsIllhd20gYWwtVGhhbFx1MDEwMXRoXHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1BcmJhXHUyMDE4XHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1LaGFtXHUwMTJicyIsIllhd20gYWwtSnVtXHUyMDE4YSIsIllhd20gYWwtU2FidCJdLGRheU5hbWVzTWluOlsiQWgiLCJJdGgiLCJUaCIsIkFyIiwiS2giLCJKdSIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMH19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gMzU1PT09dGhpcy5kYXlzSW5ZZWFyKGUueWVhcigpKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0xO3I8PTEyO3IrKyllKz10aGlzLmRheXNJbk1vbnRoKHQscik7cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCkudG9KRCgpLTI0ZTUrLjUsYT0wLGk9MDtpPG8ubGVuZ3RoO2krKyl7aWYob1tpXT5yKXJldHVybiBvW2FdLW9bYS0xXTthKyt9cmV0dXJuIDMwfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGE9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksaT0xMiooYS55ZWFyKCktMSkrYS5tb250aCgpLTE1MjkyO3JldHVybiBhLmRheSgpK29baS0xXS0xKzI0ZTUtLjV9LGZyb21KRDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC0yNGU1Ky41LHI9MCxuPTA7bjxvLmxlbmd0aCYmIShvW25dPmUpO24rKylyKys7dmFyIGE9cisxNTI5MixpPU1hdGguZmxvb3IoKGEtMSkvMTIpLHM9aSsxLGw9YS0xMippLGM9ZS1vW3ItMV0rMTtyZXR1cm4gdGhpcy5uZXdEYXRlKHMsbCxjKX0saXNWYWxpZDpmdW5jdGlvbih0LGUscil7dmFyIGE9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLmlzVmFsaWQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhJiYoYT0odD1udWxsIT10LnllYXI/dC55ZWFyOnQpPj0xMjc2JiZ0PD0xNTAwKSxhfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIGk9bi5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLl92YWxpZGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoaS55ZWFyPDEyNzZ8fGkueWVhcj4xNTAwKXRocm93IGEucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIGl9fSksbi5jYWxlbmRhcnMudW1tYWxxdXJhPWk7dmFyIG89WzIwLDUwLDc5LDEwOSwxMzgsMTY4LDE5NywyMjcsMjU2LDI4NiwzMTUsMzQ1LDM3NCw0MDQsNDMzLDQ2Myw0OTIsNTIyLDU1MSw1ODEsNjExLDY0MSw2NzAsNzAwLDcyOSw3NTksNzg4LDgxOCw4NDcsODc3LDkwNiw5MzYsOTY1LDk5NSwxMDI0LDEwNTQsMTA4MywxMTEzLDExNDIsMTE3MiwxMjAxLDEyMzEsMTI2MCwxMjkwLDEzMjAsMTM1MCwxMzc5LDE0MDksMTQzOCwxNDY4LDE0OTcsMTUyNywxNTU2LDE1ODYsMTYxNSwxNjQ1LDE2NzQsMTcwNCwxNzMzLDE3NjMsMTc5MiwxODIyLDE4NTEsMTg4MSwxOTEwLDE5NDAsMTk2OSwxOTk5LDIwMjgsMjA1OCwyMDg3LDIxMTcsMjE0NiwyMTc2LDIyMDUsMjIzNSwyMjY0LDIyOTQsMjMyMywyMzUzLDIzODMsMjQxMywyNDQyLDI0NzIsMjUwMSwyNTMxLDI1NjAsMjU5MCwyNjE5LDI2NDksMjY3OCwyNzA4LDI3MzcsMjc2NywyNzk2LDI4MjYsMjg1NSwyODg1LDI5MTQsMjk0NCwyOTczLDMwMDMsMzAzMiwzMDYyLDMwOTEsMzEyMSwzMTUwLDMxODAsMzIwOSwzMjM5LDMyNjgsMzI5OCwzMzI3LDMzNTcsMzM4NiwzNDE2LDM0NDYsMzQ3NiwzNTA1LDM1MzUsMzU2NCwzNTk0LDM2MjMsMzY1MywzNjgyLDM3MTIsMzc0MSwzNzcxLDM4MDAsMzgzMCwzODU5LDM4ODksMzkxOCwzOTQ4LDM5NzcsNDAwNyw0MDM2LDQwNjYsNDA5NSw0MTI1LDQxNTUsNDE4NSw0MjE0LDQyNDQsNDI3Myw0MzAzLDQzMzIsNDM2Miw0MzkxLDQ0MjEsNDQ1MCw0NDgwLDQ1MDksNDUzOSw0NTY4LDQ1OTgsNDYyNyw0NjU3LDQ2ODYsNDcxNiw0NzQ1LDQ3NzUsNDgwNCw0ODM0LDQ4NjMsNDg5Myw0OTIyLDQ5NTIsNDk4MSw1MDExLDUwNDAsNTA3MCw1MDk5LDUxMjksNTE1OCw1MTg4LDUyMTgsNTI0OCw1Mjc3LDUzMDcsNTMzNiw1MzY2LDUzOTUsNTQyNSw1NDU0LDU0ODQsNTUxMyw1NTQzLDU1NzIsNTYwMiw1NjMxLDU2NjEsNTY5MCw1NzIwLDU3NDksNTc3OSw1ODA4LDU4MzgsNTg2Nyw1ODk3LDU5MjYsNTk1Niw1OTg1LDYwMTUsNjA0NCw2MDc0LDYxMDMsNjEzMyw2MTYyLDYxOTIsNjIyMSw2MjUxLDYyODEsNjMxMSw2MzQwLDYzNzAsNjM5OSw2NDI5LDY0NTgsNjQ4OCw2NTE3LDY1NDcsNjU3Niw2NjA2LDY2MzUsNjY2NSw2Njk0LDY3MjQsNjc1Myw2NzgzLDY4MTIsNjg0Miw2ODcxLDY5MDEsNjkzMCw2OTYwLDY5ODksNzAxOSw3MDQ4LDcwNzgsNzEwNyw3MTM3LDcxNjYsNzE5Niw3MjI1LDcyNTUsNzI4NCw3MzE0LDczNDQsNzM3NCw3NDAzLDc0MzMsNzQ2Miw3NDkyLDc1MjEsNzU1MSw3NTgwLDc2MTAsNzYzOSw3NjY5LDc2OTgsNzcyOCw3NzU3LDc3ODcsNzgxNiw3ODQ2LDc4NzUsNzkwNSw3OTM0LDc5NjQsNzk5Myw4MDIzLDgwNTMsODA4Myw4MTEyLDgxNDIsODE3MSw4MjAxLDgyMzAsODI2MCw4Mjg5LDgzMTksODM0OCw4Mzc4LDg0MDcsODQzNyw4NDY2LDg0OTYsODUyNSw4NTU1LDg1ODQsODYxNCw4NjQzLDg2NzMsODcwMiw4NzMyLDg3NjEsODc5MSw4ODIxLDg4NTAsODg4MCw4OTA5LDg5MzgsODk2OCw4OTk3LDkwMjcsOTA1Niw5MDg2LDkxMTUsOTE0NSw5MTc1LDkyMDUsOTIzNCw5MjY0LDkyOTMsOTMyMiw5MzUyLDkzODEsOTQxMCw5NDQwLDk0NzAsOTQ5OSw5NTI5LDk1NTksOTU4OSw5NjE4LDk2NDgsOTY3Nyw5NzA2LDk3MzYsOTc2NSw5Nzk0LDk4MjQsOTg1Myw5ODgzLDk5MTMsOTk0Myw5OTcyLDEwMDAyLDEwMDMyLDEwMDYxLDEwMDkwLDEwMTIwLDEwMTQ5LDEwMTc4LDEwMjA4LDEwMjM3LDEwMjY3LDEwMjk3LDEwMzI2LDEwMzU2LDEwMzg2LDEwNDE1LDEwNDQ1LDEwNDc0LDEwNTA0LDEwNTMzLDEwNTYyLDEwNTkyLDEwNjIxLDEwNjUxLDEwNjgwLDEwNzEwLDEwNzQwLDEwNzcwLDEwNzk5LDEwODI5LDEwODU4LDEwODg4LDEwOTE3LDEwOTQ3LDEwOTc2LDExMDA1LDExMDM1LDExMDY0LDExMDk0LDExMTI0LDExMTUzLDExMTgzLDExMjEzLDExMjQyLDExMjcyLDExMzAxLDExMzMxLDExMzYwLDExMzg5LDExNDE5LDExNDQ4LDExNDc4LDExNTA3LDExNTM3LDExNTY3LDExNTk2LDExNjI2LDExNjU1LDExNjg1LDExNzE1LDExNzQ0LDExNzc0LDExODAzLDExODMyLDExODYyLDExODkxLDExOTIxLDExOTUwLDExOTgwLDEyMDEwLDEyMDM5LDEyMDY5LDEyMDk5LDEyMTI4LDEyMTU4LDEyMTg3LDEyMjE2LDEyMjQ2LDEyMjc1LDEyMzA0LDEyMzM0LDEyMzY0LDEyMzkzLDEyNDIzLDEyNDUzLDEyNDgzLDEyNTEyLDEyNTQyLDEyNTcxLDEyNjAwLDEyNjMwLDEyNjU5LDEyNjg4LDEyNzE4LDEyNzQ3LDEyNzc3LDEyODA3LDEyODM3LDEyODY2LDEyODk2LDEyOTI2LDEyOTU1LDEyOTg0LDEzMDE0LDEzMDQzLDEzMDcyLDEzMTAyLDEzMTMxLDEzMTYxLDEzMTkxLDEzMjIwLDEzMjUwLDEzMjgwLDEzMzEwLDEzMzM5LDEzMzY4LDEzMzk4LDEzNDI3LDEzNDU2LDEzNDg2LDEzNTE1LDEzNTQ1LDEzNTc0LDEzNjA0LDEzNjM0LDEzNjY0LDEzNjkzLDEzNzIzLDEzNzUyLDEzNzgyLDEzODExLDEzODQwLDEzODcwLDEzODk5LDEzOTI5LDEzOTU4LDEzOTg4LDE0MDE4LDE0MDQ3LDE0MDc3LDE0MTA3LDE0MTM2LDE0MTY2LDE0MTk1LDE0MjI0LDE0MjU0LDE0MjgzLDE0MzEzLDE0MzQyLDE0MzcyLDE0NDAxLDE0NDMxLDE0NDYxLDE0NDkwLDE0NTIwLDE0NTUwLDE0NTc5LDE0NjA5LDE0NjM4LDE0NjY3LDE0Njk3LDE0NzI2LDE0NzU2LDE0Nzg1LDE0ODE1LDE0ODQ0LDE0ODc0LDE0OTA0LDE0OTMzLDE0OTYzLDE0OTkzLDE1MDIxLDE1MDUxLDE1MDgxLDE1MTEwLDE1MTQwLDE1MTY5LDE1MTk5LDE1MjI4LDE1MjU4LDE1Mjg3LDE1MzE3LDE1MzQ3LDE1Mzc3LDE1NDA2LDE1NDM2LDE1NDY1LDE1NDk0LDE1NTI0LDE1NTUzLDE1NTgyLDE1NjEyLDE1NjQxLDE1NjcxLDE1NzAxLDE1NzMxLDE1NzYwLDE1NzkwLDE1ODIwLDE1ODQ5LDE1ODc4LDE1OTA4LDE1OTM3LDE1OTY2LDE1OTk2LDE2MDI1LDE2MDU1LDE2MDg1LDE2MTE0LDE2MTQ0LDE2MTc0LDE2MjA0LDE2MjMzLDE2MjYyLDE2MjkyLDE2MzIxLDE2MzUwLDE2MzgwLDE2NDA5LDE2NDM5LDE2NDY4LDE2NDk4LDE2NTI4LDE2NTU4LDE2NTg3LDE2NjE3LDE2NjQ2LDE2Njc2LDE2NzA1LDE2NzM0LDE2NzY0LDE2NzkzLDE2ODIzLDE2ODUyLDE2ODgyLDE2OTEyLDE2OTQxLDE2OTcxLDE3MDAxLDE3MDMwLDE3MDYwLDE3MDg5LDE3MTE4LDE3MTQ4LDE3MTc3LDE3MjA3LDE3MjM2LDE3MjY2LDE3Mjk1LDE3MzI1LDE3MzU1LDE3Mzg0LDE3NDE0LDE3NDQ0LDE3NDczLDE3NTAyLDE3NTMyLDE3NTYxLDE3NTkxLDE3NjIwLDE3NjUwLDE3Njc5LDE3NzA5LDE3NzM4LDE3NzY4LDE3Nzk4LDE3ODI3LDE3ODU3LDE3ODg2LDE3OTE2LDE3OTQ1LDE3OTc1LDE4MDA0LDE4MDM0LDE4MDYzLDE4MDkzLDE4MTIyLDE4MTUyLDE4MTgxLDE4MjExLDE4MjQxLDE4MjcwLDE4MzAwLDE4MzMwLDE4MzU5LDE4Mzg4LDE4NDE4LDE4NDQ3LDE4NDc2LDE4NTA2LDE4NTM1LDE4NTY1LDE4NTk1LDE4NjI1LDE4NjU0LDE4Njg0LDE4NzE0LDE4NzQzLDE4NzcyLDE4ODAyLDE4ODMxLDE4ODYwLDE4ODkwLDE4OTE5LDE4OTQ5LDE4OTc5LDE5MDA4LDE5MDM4LDE5MDY4LDE5MDk4LDE5MTI3LDE5MTU2LDE5MTg2LDE5MjE1LDE5MjQ0LDE5Mjc0LDE5MzAzLDE5MzMzLDE5MzYyLDE5MzkyLDE5NDIyLDE5NDUyLDE5NDgxLDE5NTExLDE5NTQwLDE5NTcwLDE5NTk5LDE5NjI4LDE5NjU4LDE5Njg3LDE5NzE3LDE5NzQ2LDE5Nzc2LDE5ODA2LDE5ODM2LDE5ODY1LDE5ODk1LDE5OTI0LDE5OTU0LDE5OTgzLDIwMDEyLDIwMDQyLDIwMDcxLDIwMTAxLDIwMTMwLDIwMTYwLDIwMTkwLDIwMjE5LDIwMjQ5LDIwMjc5LDIwMzA4LDIwMzM4LDIwMzY3LDIwMzk2LDIwNDI2LDIwNDU1LDIwNDg1LDIwNTE0LDIwNTQ0LDIwNTczLDIwNjAzLDIwNjMzLDIwNjYyLDIwNjkyLDIwNzIxLDIwNzUxLDIwNzgwLDIwODEwLDIwODM5LDIwODY5LDIwODk4LDIwOTI4LDIwOTU3LDIwOTg3LDIxMDE2LDIxMDQ2LDIxMDc2LDIxMTA1LDIxMTM1LDIxMTY0LDIxMTk0LDIxMjIzLDIxMjUzLDIxMjgyLDIxMzEyLDIxMzQxLDIxMzcxLDIxNDAwLDIxNDMwLDIxNDU5LDIxNDg5LDIxNTE5LDIxNTQ4LDIxNTc4LDIxNjA3LDIxNjM3LDIxNjY2LDIxNjk2LDIxNzI1LDIxNzU0LDIxNzg0LDIxODEzLDIxODQzLDIxODczLDIxOTAyLDIxOTMyLDIxOTYyLDIxOTkxLDIyMDIxLDIyMDUwLDIyMDgwLDIyMTA5LDIyMTM4LDIyMTY4LDIyMTk3LDIyMjI3LDIyMjU2LDIyMjg2LDIyMzE2LDIyMzQ2LDIyMzc1LDIyNDA1LDIyNDM0LDIyNDY0LDIyNDkzLDIyNTIyLDIyNTUyLDIyNTgxLDIyNjExLDIyNjQwLDIyNjcwLDIyNzAwLDIyNzMwLDIyNzU5LDIyNzg5LDIyODE4LDIyODQ4LDIyODc3LDIyOTA2LDIyOTM2LDIyOTY1LDIyOTk0LDIzMDI0LDIzMDU0LDIzMDgzLDIzMTEzLDIzMTQzLDIzMTczLDIzMjAyLDIzMjMyLDIzMjYxLDIzMjkwLDIzMzIwLDIzMzQ5LDIzMzc5LDIzNDA4LDIzNDM4LDIzNDY3LDIzNDk3LDIzNTI3LDIzNTU2LDIzNTg2LDIzNjE2LDIzNjQ1LDIzNjc0LDIzNzA0LDIzNzMzLDIzNzYzLDIzNzkyLDIzODIyLDIzODUxLDIzODgxLDIzOTEwLDIzOTQwLDIzOTcwLDIzOTk5LDI0MDI5LDI0MDU4LDI0MDg4LDI0MTE3LDI0MTQ3LDI0MTc2LDI0MjA2LDI0MjM1LDI0MjY1LDI0Mjk0LDI0MzI0LDI0MzUzLDI0MzgzLDI0NDEzLDI0NDQyLDI0NDcyLDI0NTAxLDI0NTMxLDI0NTYwLDI0NTkwLDI0NjE5LDI0NjQ4LDI0Njc4LDI0NzA3LDI0NzM3LDI0NzY3LDI0Nzk2LDI0ODI2LDI0ODU2LDI0ODg1LDI0OTE1LDI0OTQ0LDI0OTc0LDI1MDAzLDI1MDMyLDI1MDYyLDI1MDkxLDI1MTIxLDI1MTUwLDI1MTgwLDI1MjEwLDI1MjQwLDI1MjY5LDI1Mjk5LDI1MzI4LDI1MzU4LDI1Mzg3LDI1NDE2LDI1NDQ2LDI1NDc1LDI1NTA1LDI1NTM0LDI1NTY0LDI1NTk0LDI1NjI0LDI1NjUzLDI1NjgzLDI1NzEyLDI1NzQyLDI1NzcxLDI1ODAwLDI1ODMwLDI1ODU5LDI1ODg4LDI1OTE4LDI1OTQ4LDI1OTc3LDI2MDA3LDI2MDM3LDI2MDY3LDI2MDk2LDI2MTI2LDI2MTU1LDI2MTg0LDI2MjE0LDI2MjQzLDI2MjcyLDI2MzAyLDI2MzMyLDI2MzYxLDI2MzkxLDI2NDIxLDI2NDUxLDI2NDgwLDI2NTEwLDI2NTM5LDI2NTY4LDI2NTk4LDI2NjI3LDI2NjU2LDI2Njg2LDI2NzE1LDI2NzQ1LDI2Nzc1LDI2ODA1LDI2ODM0LDI2ODY0LDI2ODkzLDI2OTIzLDI2OTUyLDI2OTgyLDI3MDExLDI3MDQxLDI3MDcwLDI3MDk5LDI3MTI5LDI3MTU5LDI3MTg4LDI3MjE4LDI3MjQ4LDI3Mjc3LDI3MzA3LDI3MzM2LDI3MzY2LDI3Mzk1LDI3NDI1LDI3NDU0LDI3NDg0LDI3NTEzLDI3NTQyLDI3NTcyLDI3NjAyLDI3NjMxLDI3NjYxLDI3NjkxLDI3NzIwLDI3NzUwLDI3Nzc5LDI3ODA5LDI3ODM4LDI3ODY4LDI3ODk3LDI3OTI2LDI3OTU2LDI3OTg1LDI4MDE1LDI4MDQ1LDI4MDc0LDI4MTA0LDI4MTM0LDI4MTYzLDI4MTkzLDI4MjIyLDI4MjUyLDI4MjgxLDI4MzEwLDI4MzQwLDI4MzY5LDI4Mzk5LDI4NDI4LDI4NDU4LDI4NDg4LDI4NTE3LDI4NTQ3LDI4NTc3LDI4NjA3LDI4NjM2LDI4NjY1LDI4Njk1LDI4NzI0LDI4NzU0LDI4NzgzLDI4ODEzLDI4ODQzLDI4ODcyLDI4OTAxLDI4OTMxLDI4OTYwLDI4OTkwLDI5MDE5LDI5MDQ5LDI5MDc4LDI5MTA4LDI5MTM3LDI5MTY3LDI5MTk2LDI5MjI2LDI5MjU1LDI5Mjg1LDI5MzE1LDI5MzQ1LDI5Mzc1LDI5NDA0LDI5NDM0LDI5NDYzLDI5NDkyLDI5NTIyLDI5NTUxLDI5NTgwLDI5NjEwLDI5NjQwLDI5NjY5LDI5Njk5LDI5NzI5LDI5NzU5LDI5Nzg4LDI5ODE4LDI5ODQ3LDI5ODc2LDI5OTA2LDI5OTM1LDI5OTY0LDI5OTk0LDMwMDIzLDMwMDUzLDMwMDgyLDMwMTEyLDMwMTQxLDMwMTcxLDMwMjAwLDMwMjMwLDMwMjU5LDMwMjg5LDMwMzE4LDMwMzQ4LDMwMzc4LDMwNDA4LDMwNDM3LDMwNDY3LDMwNDk2LDMwNTI2LDMwNTU1LDMwNTg1LDMwNjE0LDMwNjQ0LDMwNjczLDMwNzAzLDMwNzMyLDMwNzYyLDMwNzkxLDMwODIxLDMwODUwLDMwODgwLDMwOTA5LDMwOTM5LDMwOTY4LDMwOTk4LDMxMDI3LDMxMDU3LDMxMDg2LDMxMTE2LDMxMTQ1LDMxMTc1LDMxMjA0LDMxMjM0LDMxMjYzLDMxMjkzLDMxMzIyLDMxMzUyLDMxMzgxLDMxNDExLDMxNDQxLDMxNDcxLDMxNTAwLDMxNTMwLDMxNTU5LDMxNTg5LDMxNjE4LDMxNjQ4LDMxNjc2LDMxNzA2LDMxNzM2LDMxNzY2LDMxNzk1LDMxODI1LDMxODU0LDMxODg0LDMxOTEzLDMxOTQzLDMxOTcyLDMyMDAyLDMyMDMxLDMyMDYxLDMyMDkwLDMyMTIwLDMyMTUwLDMyMTgwLDMyMjA5LDMyMjM5LDMyMjY4LDMyMjk4LDMyMzI3LDMyMzU3LDMyMzg2LDMyNDE2LDMyNDQ1LDMyNDc1LDMyNTA0LDMyNTM0LDMyNTYzLDMyNTkzLDMyNjIyLDMyNjUyLDMyNjgxLDMyNzExLDMyNzQwLDMyNzcwLDMyNzk5LDMyODI5LDMyODU4LDMyODg4LDMyOTE3LDMyOTQ3LDMyOTc2LDMzMDA2LDMzMDM1LDMzMDY1LDMzMDk0LDMzMTI0LDMzMTUzLDMzMTgzLDMzMjEzLDMzMjQzLDMzMjcyLDMzMzAyLDMzMzMxLDMzMzYxLDMzMzkwLDMzNDIwLDMzNDUwLDMzNDc5LDMzNTA5LDMzNTM5LDMzNTY4LDMzNTk4LDMzNjI3LDMzNjU3LDMzNjg2LDMzNzE2LDMzNzQ1LDMzNzc1LDMzODA0LDMzODM0LDMzODYzLDMzODkzLDMzOTIyLDMzOTUyLDMzOTgxLDM0MDExLDM0MDQwLDM0MDY5LDM0MDk5LDM0MTI4LDM0MTU4LDM0MTg3LDM0MjE3LDM0MjQ3LDM0Mjc3LDM0MzA2LDM0MzM2LDM0MzY1LDM0Mzk1LDM0NDI0LDM0NDU0LDM0NDgzLDM0NTEyLDM0NTQyLDM0NTcxLDM0NjAxLDM0NjMxLDM0NjYwLDM0NjkwLDM0NzE5LDM0NzQ5LDM0Nzc4LDM0ODA4LDM0ODM3LDM0ODY3LDM0ODk2LDM0OTI2LDM0OTU1LDM0OTg1LDM1MDE1LDM1MDQ0LDM1MDc0LDM1MTAzLDM1MTMzLDM1MTYyLDM1MTkyLDM1MjIyLDM1MjUxLDM1MjgwLDM1MzEwLDM1MzQwLDM1MzcwLDM1Mzk5LDM1NDI5LDM1NDU4LDM1NDg4LDM1NTE3LDM1NTQ3LDM1NTc2LDM1NjA1LDM1NjM1LDM1NjY1LDM1Njk0LDM1NzIzLDM1NzUzLDM1NzgyLDM1ODExLDM1ODQxLDM1ODcxLDM1OTAxLDM1OTMwLDM1OTYwLDM1OTg5LDM2MDE5LDM2MDQ4LDM2MDc4LDM2MTA3LDM2MTM2LDM2MTY2LDM2MTk1LDM2MjI1LDM2MjU0LDM2Mjg0LDM2MzE0LDM2MzQzLDM2MzczLDM2NDAzLDM2NDMzLDM2NDYyLDM2NDkyLDM2NTIxLDM2NTUxLDM2NTgwLDM2NjEwLDM2NjM5LDM2NjY5LDM2Njk4LDM2NzI4LDM2NzU3LDM2Nzg2LDM2ODE2LDM2ODQ1LDM2ODc1LDM2OTA0LDM2OTM0LDM2OTYzLDM2OTkzLDM3MDIyLDM3MDUyLDM3MDgxLDM3MTExLDM3MTQxLDM3MTcwLDM3MjAwLDM3MjI5LDM3MjU5LDM3Mjg4LDM3MzE4LDM3MzQ3LDM3Mzc3LDM3NDA2LDM3NDM2LDM3NDY1LDM3NDk1LDM3NTI0LDM3NTU0LDM3NTg0LDM3NjEzLDM3NjQzLDM3NjcyLDM3NzAxLDM3NzMxLDM3NzYwLDM3NzkwLDM3ODE5LDM3ODQ5LDM3ODc4LDM3OTA4LDM3OTM4LDM3OTY3LDM3OTk3LDM4MDI3LDM4MDU2LDM4MDg1LDM4MTE1LDM4MTQ0LDM4MTc0LDM4MjAzLDM4MjMzLDM4MjYyLDM4MjkyLDM4MzIyLDM4MzUxLDM4MzgxLDM4NDEwLDM4NDQwLDM4NDY5LDM4NDk5LDM4NTI4LDM4NTU4LDM4NTg3LDM4NjE3LDM4NjQ2LDM4Njc2LDM4NzA1LDM4NzM1LDM4NzY0LDM4Nzk0LDM4ODIzLDM4ODUzLDM4ODgyLDM4OTEyLDM4OTQxLDM4OTcxLDM5MDAxLDM5MDMwLDM5MDU5LDM5MDg5LDM5MTE4LDM5MTQ4LDM5MTc4LDM5MjA4LDM5MjM3LDM5MjY3LDM5Mjk3LDM5MzI2LDM5MzU1LDM5Mzg1LDM5NDE0LDM5NDQ0LDM5NDczLDM5NTAzLDM5NTMyLDM5NTYyLDM5NTkyLDM5NjIxLDM5NjUwLDM5NjgwLDM5NzA5LDM5NzM5LDM5NzY4LDM5Nzk4LDM5ODI3LDM5ODU3LDM5ODg2LDM5OTE2LDM5OTQ2LDM5OTc1LDQwMDA1LDQwMDM1LDQwMDY0LDQwMDk0LDQwMTIzLDQwMTUzLDQwMTgyLDQwMjEyLDQwMjQxLDQwMjcxLDQwMzAwLDQwMzMwLDQwMzU5LDQwMzg5LDQwNDE4LDQwNDQ4LDQwNDc3LDQwNTA3LDQwNTM2LDQwNTY2LDQwNTk1LDQwNjI1LDQwNjU1LDQwNjg1LDQwNzE0LDQwNzQ0LDQwNzczLDQwODAzLDQwODMyLDQwODYyLDQwODkyLDQwOTIxLDQwOTUxLDQwOTgwLDQxMDA5LDQxMDM5LDQxMDY4LDQxMDk4LDQxMTI3LDQxMTU3LDQxMTg2LDQxMjE2LDQxMjQ1LDQxMjc1LDQxMzA0LDQxMzM0LDQxMzY0LDQxMzkzLDQxNDIyLDQxNDUyLDQxNDgxLDQxNTExLDQxNTQwLDQxNTcwLDQxNTk5LDQxNjI5LDQxNjU4LDQxNjg4LDQxNzE4LDQxNzQ4LDQxNzc3LDQxODA3LDQxODM2LDQxODY1LDQxODk0LDQxOTI0LDQxOTUzLDQxOTgzLDQyMDEyLDQyMDQyLDQyMDcyLDQyMTAyLDQyMTMxLDQyMTYxLDQyMTkwLDQyMjIwLDQyMjQ5LDQyMjc5LDQyMzA4LDQyMzM3LDQyMzY3LDQyMzk3LDQyNDI2LDQyNDU2LDQyNDg1LDQyNTE1LDQyNTQ1LDQyNTc0LDQyNjA0LDQyNjMzLDQyNjYyLDQyNjkyLDQyNzIxLDQyNzUxLDQyNzgwLDQyODEwLDQyODM5LDQyODY5LDQyODk5LDQyOTI5LDQyOTU4LDQyOTg4LDQzMDE3LDQzMDQ2LDQzMDc2LDQzMTA1LDQzMTM1LDQzMTY0LDQzMTk0LDQzMjIzLDQzMjUzLDQzMjgzLDQzMzEyLDQzMzQyLDQzMzcxLDQzNDAxLDQzNDMwLDQzNDYwLDQzNDg5LDQzNTE5LDQzNTQ4LDQzNTc4LDQzNjA3LDQzNjM3LDQzNjY2LDQzNjk2LDQzNzI2LDQzNzU1LDQzNzg1LDQzODE0LDQzODQ0LDQzODczLDQzOTAzLDQzOTMyLDQzOTYyLDQzOTkxLDQ0MDIxLDQ0MDUwLDQ0MDgwLDQ0MTA5LDQ0MTM5LDQ0MTY5LDQ0MTk4LDQ0MjI4LDQ0MjU4LDQ0Mjg3LDQ0MzE3LDQ0MzQ2LDQ0Mzc1LDQ0NDA1LDQ0NDM0LDQ0NDY0LDQ0NDkzLDQ0NTIzLDQ0NTUzLDQ0NTgyLDQ0NjEyLDQ0NjQxLDQ0NjcxLDQ0NzAwLDQ0NzMwLDQ0NzU5LDQ0Nzg4LDQ0ODE4LDQ0ODQ3LDQ0ODc3LDQ0OTA2LDQ0OTM2LDQ0OTY2LDQ0OTk2LDQ1MDI1LDQ1MDU1LDQ1MDg0LDQ1MTE0LDQ1MTQzLDQ1MTcyLDQ1MjAyLDQ1MjMxLDQ1MjYxLDQ1MjkwLDQ1MzIwLDQ1MzUwLDQ1MzgwLDQ1NDA5LDQ1NDM5LDQ1NDY4LDQ1NDk4LDQ1NTI3LDQ1NTU2LDQ1NTg2LDQ1NjE1LDQ1NjQ0LDQ1Njc0LDQ1NzA0LDQ1NzMzLDQ1NzYzLDQ1NzkzLDQ1ODIzLDQ1ODUyLDQ1ODgyLDQ1OTExLDQ1OTQwLDQ1OTcwLDQ1OTk5LDQ2MDI4LDQ2MDU4LDQ2MDg4LDQ2MTE3LDQ2MTQ3LDQ2MTc3LDQ2MjA2LDQ2MjM2LDQ2MjY1LDQ2Mjk1LDQ2MzI0LDQ2MzU0LDQ2MzgzLDQ2NDEzLDQ2NDQyLDQ2NDcyLDQ2NTAxLDQ2NTMxLDQ2NTYwLDQ2NTkwLDQ2NjIwLDQ2NjQ5LDQ2Njc5LDQ2NzA4LDQ2NzM4LDQ2NzY3LDQ2Nzk3LDQ2ODI2LDQ2ODU2LDQ2ODg1LDQ2OTE1LDQ2OTQ0LDQ2OTc0LDQ3MDAzLDQ3MDMzLDQ3MDYzLDQ3MDkyLDQ3MTIyLDQ3MTUxLDQ3MTgxLDQ3MjEwLDQ3MjQwLDQ3MjY5LDQ3Mjk4LDQ3MzI4LDQ3MzU3LDQ3Mzg3LDQ3NDE3LDQ3NDQ2LDQ3NDc2LDQ3NTA2LDQ3NTM1LDQ3NTY1LDQ3NTk0LDQ3NjI0LDQ3NjUzLDQ3NjgyLDQ3NzEyLDQ3NzQxLDQ3NzcxLDQ3ODAwLDQ3ODMwLDQ3ODYwLDQ3ODkwLDQ3OTE5LDQ3OTQ5LDQ3OTc4LDQ4MDA4LDQ4MDM3LDQ4MDY2LDQ4MDk2LDQ4MTI1LDQ4MTU1LDQ4MTg0LDQ4MjE0LDQ4MjQ0LDQ4MjczLDQ4MzAzLDQ4MzMzLDQ4MzYyLDQ4MzkyLDQ4NDIxLDQ4NDUwLDQ4NDgwLDQ4NTA5LDQ4NTM4LDQ4NTY4LDQ4NTk4LDQ4NjI3LDQ4NjU3LDQ4Njg3LDQ4NzE3LDQ4NzQ2LDQ4Nzc2LDQ4ODA1LDQ4ODM0LDQ4ODY0LDQ4ODkzLDQ4OTIyLDQ4OTUyLDQ4OTgyLDQ5MDExLDQ5MDQxLDQ5MDcxLDQ5MTAwLDQ5MTMwLDQ5MTYwLDQ5MTg5LDQ5MjE4LDQ5MjQ4LDQ5Mjc3LDQ5MzA2LDQ5MzM2LDQ5MzY1LDQ5Mzk1LDQ5NDI1LDQ5NDU1LDQ5NDg0LDQ5NTE0LDQ5NTQzLDQ5NTczLDQ5NjAyLDQ5NjMyLDQ5NjYxLDQ5NjkwLDQ5NzIwLDQ5NzQ5LDQ5Nzc5LDQ5ODA5LDQ5ODM4LDQ5ODY4LDQ5ODk4LDQ5OTI3LDQ5OTU3LDQ5OTg2LDUwMDE2LDUwMDQ1LDUwMDc1LDUwMTA0LDUwMTMzLDUwMTYzLDUwMTkyLDUwMjIyLDUwMjUyLDUwMjgxLDUwMzExLDUwMzQwLDUwMzcwLDUwNDAwLDUwNDI5LDUwNDU5LDUwNDg4LDUwNTE4LDUwNTQ3LDUwNTc2LDUwNjA2LDUwNjM1LDUwNjY1LDUwNjk0LDUwNzI0LDUwNzU0LDUwNzg0LDUwODEzLDUwODQzLDUwODcyLDUwOTAyLDUwOTMxLDUwOTYwLDUwOTkwLDUxMDE5LDUxMDQ5LDUxMDc4LDUxMTA4LDUxMTM4LDUxMTY3LDUxMTk3LDUxMjI3LDUxMjU2LDUxMjg2LDUxMzE1LDUxMzQ1LDUxMzc0LDUxNDAzLDUxNDMzLDUxNDYyLDUxNDkyLDUxNTIyLDUxNTUyLDUxNTgyLDUxNjExLDUxNjQxLDUxNjcwLDUxNjk5LDUxNzI5LDUxNzU4LDUxNzg3LDUxODE2LDUxODQ2LDUxODc2LDUxOTA2LDUxOTM2LDUxOTY1LDUxOTk1LDUyMDI1LDUyMDU0LDUyMDgzLDUyMTEzLDUyMTQyLDUyMTcxLDUyMjAwLDUyMjMwLDUyMjYwLDUyMjkwLDUyMzE5LDUyMzQ5LDUyMzc5LDUyNDA4LDUyNDM4LDUyNDY3LDUyNDk3LDUyNTI2LDUyNTU1LDUyNTg1LDUyNjE0LDUyNjQ0LDUyNjczLDUyNzAzLDUyNzMzLDUyNzYyLDUyNzkyLDUyODIyLDUyODUxLDUyODgxLDUyOTEwLDUyOTM5LDUyOTY5LDUyOTk4LDUzMDI4LDUzMDU3LDUzMDg3LDUzMTE2LDUzMTQ2LDUzMTc2LDUzMjA1LDUzMjM1LDUzMjY0LDUzMjk0LDUzMzI0LDUzMzUzLDUzMzgzLDUzNDEyLDUzNDQxLDUzNDcxLDUzNTAwLDUzNTMwLDUzNTU5LDUzNTg5LDUzNjE5LDUzNjQ4LDUzNjc4LDUzNzA4LDUzNzM3LDUzNzY3LDUzNzk2LDUzODI1LDUzODU1LDUzODg0LDUzOTEzLDUzOTQzLDUzOTczLDU0MDAzLDU0MDMyLDU0MDYyLDU0MDkyLDU0MTIxLDU0MTUxLDU0MTgwLDU0MjA5LDU0MjM5LDU0MjY4LDU0Mjk3LDU0MzI3LDU0MzU3LDU0Mzg3LDU0NDE2LDU0NDQ2LDU0NDc2LDU0NTA1LDU0NTM1LDU0NTY0LDU0NTkzLDU0NjIzLDU0NjUyLDU0NjgxLDU0NzExLDU0NzQxLDU0NzcwLDU0ODAwLDU0ODMwLDU0ODU5LDU0ODg5LDU0OTE5LDU0OTQ4LDU0OTc3LDU1MDA3LDU1MDM2LDU1MDY2LDU1MDk1LDU1MTI1LDU1MTU0LDU1MTg0LDU1MjEzLDU1MjQzLDU1MjczLDU1MzAyLDU1MzMyLDU1MzYxLDU1MzkxLDU1NDIwLDU1NDUwLDU1NDc5LDU1NTA4LDU1NTM4LDU1NTY3LDU1NTk3LDU1NjI3LDU1NjU3LDU1Njg2LDU1NzE2LDU1NzQ1LDU1Nzc1LDU1ODA0LDU1ODM0LDU1ODYzLDU1ODkyLDU1OTIyLDU1OTUxLDU1OTgxLDU2MDExLDU2MDQwLDU2MDcwLDU2MTAwLDU2MTI5LDU2MTU5LDU2MTg4LDU2MjE4LDU2MjQ3LDU2Mjc2LDU2MzA2LDU2MzM1LDU2MzY1LDU2Mzk0LDU2NDI0LDU2NDU0LDU2NDgzLDU2NTEzLDU2NTQzLDU2NTcyLDU2NjAxLDU2NjMxLDU2NjYwLDU2NjkwLDU2NzE5LDU2NzQ5LDU2Nzc4LDU2ODA4LDU2ODM3LDU2ODY3LDU2ODk3LDU2OTI2LDU2OTU2LDU2OTg1LDU3MDE1LDU3MDQ0LDU3MDc0LDU3MTAzLDU3MTMzLDU3MTYyLDU3MTkyLDU3MjIxLDU3MjUxLDU3MjgwLDU3MzEwLDU3MzQwLDU3MzY5LDU3Mzk5LDU3NDI5LDU3NDU4LDU3NDg3LDU3NTE3LDU3NTQ2LDU3NTc2LDU3NjA1LDU3NjM0LDU3NjY0LDU3Njk0LDU3NzIzLDU3NzUzLDU3NzgzLDU3ODEzLDU3ODQyLDU3ODcxLDU3OTAxLDU3OTMwLDU3OTU5LDU3OTg5LDU4MDE4LDU4MDQ4LDU4MDc3LDU4MTA3LDU4MTM3LDU4MTY3LDU4MTk2LDU4MjI2LDU4MjU1LDU4Mjg1LDU4MzE0LDU4MzQzLDU4MzczLDU4NDAyLDU4NDMyLDU4NDYxLDU4NDkxLDU4NTIxLDU4NTUxLDU4NTgwLDU4NjEwLDU4NjM5LDU4NjY5LDU4Njk4LDU4NzI3LDU4NzU3LDU4Nzg2LDU4ODE2LDU4ODQ1LDU4ODc1LDU4OTA1LDU4OTM0LDU4OTY0LDU4OTk0LDU5MDIzLDU5MDUzLDU5MDgyLDU5MTExLDU5MTQxLDU5MTcwLDU5MjAwLDU5MjI5LDU5MjU5LDU5Mjg4LDU5MzE4LDU5MzQ4LDU5Mzc3LDU5NDA3LDU5NDM2LDU5NDY2LDU5NDk1LDU5NTI1LDU5NTU0LDU5NTg0LDU5NjEzLDU5NjQzLDU5NjcyLDU5NzAyLDU5NzMxLDU5NzYxLDU5NzkxLDU5ODIwLDU5ODUwLDU5ODc5LDU5OTA5LDU5OTM5LDU5OTY4LDU5OTk3LDYwMDI3LDYwMDU2LDYwMDg2LDYwMTE1LDYwMTQ1LDYwMTc0LDYwMjA0LDYwMjM0LDYwMjY0LDYwMjkzLDYwMzIzLDYwMzUyLDYwMzgxLDYwNDExLDYwNDQwLDYwNDY5LDYwNDk5LDYwNTI4LDYwNTU4LDYwNTg4LDYwNjE4LDYwNjQ4LDYwNjc3LDYwNzA3LDYwNzM2LDYwNzY1LDYwNzk1LDYwODI0LDYwODUzLDYwODgzLDYwOTEyLDYwOTQyLDYwOTcyLDYxMDAyLDYxMDMxLDYxMDYxLDYxMDkwLDYxMTIwLDYxMTQ5LDYxMTc5LDYxMjA4LDYxMjM3LDYxMjY3LDYxMjk2LDYxMzI2LDYxMzU2LDYxMzg1LDYxNDE1LDYxNDQ1LDYxNDc0LDYxNTA0LDYxNTMzLDYxNTYzLDYxNTkyLDYxNjIxLDYxNjUxLDYxNjgwLDYxNzEwLDYxNzM5LDYxNzY5LDYxNzk5LDYxODI4LDYxODU4LDYxODg4LDYxOTE3LDYxOTQ3LDYxOTc2LDYyMDA2LDYyMDM1LDYyMDY0LDYyMDk0LDYyMTIzLDYyMTUzLDYyMTgyLDYyMjEyLDYyMjQyLDYyMjcxLDYyMzAxLDYyMzMxLDYyMzYwLDYyMzkwLDYyNDE5LDYyNDQ4LDYyNDc4LDYyNTA3LDYyNTM3LDYyNTY2LDYyNTk2LDYyNjI1LDYyNjU1LDYyNjg1LDYyNzE1LDYyNzQ0LDYyNzc0LDYyODAzLDYyODMyLDYyODYyLDYyODkxLDYyOTIxLDYyOTUwLDYyOTgwLDYzMDA5LDYzMDM5LDYzMDY5LDYzMDk5LDYzMTI4LDYzMTU3LDYzMTg3LDYzMjE2LDYzMjQ2LDYzMjc1LDYzMzA1LDYzMzM0LDYzMzYzLDYzMzkzLDYzNDIzLDYzNDUzLDYzNDgyLDYzNTEyLDYzNTQxLDYzNTcxLDYzNjAwLDYzNjMwLDYzNjU5LDYzNjg5LDYzNzE4LDYzNzQ3LDYzNzc3LDYzODA3LDYzODM2LDYzODY2LDYzODk1LDYzOTI1LDYzOTU1LDYzOTg0LDY0MDE0LDY0MDQzLDY0MDczLDY0MTAyLDY0MTMxLDY0MTYxLDY0MTkwLDY0MjIwLDY0MjQ5LDY0Mjc5LDY0MzA5LDY0MzM5LDY0MzY4LDY0Mzk4LDY0NDI3LDY0NDU3LDY0NDg2LDY0NTE1LDY0NTQ1LDY0NTc0LDY0NjAzLDY0NjMzLDY0NjYzLDY0NjkyLDY0NzIyLDY0NzUyLDY0NzgyLDY0ODExLDY0ODQxLDY0ODcwLDY0ODk5LDY0OTI5LDY0OTU4LDY0OTg3LDY1MDE3LDY1MDQ3LDY1MDc2LDY1MTA2LDY1MTM2LDY1MTY2LDY1MTk1LDY1MjI1LDY1MjU0LDY1MjgzLDY1MzEzLDY1MzQyLDY1MzcxLDY1NDAxLDY1NDMxLDY1NDYwLDY1NDkwLDY1NTIwLDY1NTQ5LDY1NTc5LDY1NjA4LDY1NjM4LDY1NjY3LDY1Njk3LDY1NzI2LDY1NzU1LDY1Nzg1LDY1ODE1LDY1ODQ0LDY1ODc0LDY1OTAzLDY1OTMzLDY1OTYzLDY1OTkyLDY2MDIyLDY2MDUxLDY2MDgxLDY2MTEwLDY2MTQwLDY2MTY5LDY2MTk5LDY2MjI4LDY2MjU4LDY2Mjg3LDY2MzE3LDY2MzQ2LDY2Mzc2LDY2NDA1LDY2NDM1LDY2NDY1LDY2NDk0LDY2NTI0LDY2NTUzLDY2NTgzLDY2NjEyLDY2NjQxLDY2NjcxLDY2NzAwLDY2NzMwLDY2NzYwLDY2Nzg5LDY2ODE5LDY2ODQ5LDY2ODc4LDY2OTA4LDY2OTM3LDY2OTY3LDY2OTk2LDY3MDI1LDY3MDU1LDY3MDg0LDY3MTE0LDY3MTQzLDY3MTczLDY3MjAzLDY3MjMzLDY3MjYyLDY3MjkyLDY3MzIxLDY3MzUxLDY3MzgwLDY3NDA5LDY3NDM5LDY3NDY4LDY3NDk3LDY3NTI3LDY3NTU3LDY3NTg3LDY3NjE3LDY3NjQ2LDY3Njc2LDY3NzA1LDY3NzM1LDY3NzY0LDY3NzkzLDY3ODIzLDY3ODUyLDY3ODgyLDY3OTExLDY3OTQxLDY3OTcxLDY4ZTMsNjgwMzAsNjgwNjAsNjgwODksNjgxMTksNjgxNDgsNjgxNzcsNjgyMDcsNjgyMzYsNjgyNjYsNjgyOTUsNjgzMjUsNjgzNTQsNjgzODQsNjg0MTQsNjg0NDMsNjg0NzMsNjg1MDIsNjg1MzIsNjg1NjEsNjg1OTEsNjg2MjAsNjg2NTAsNjg2NzksNjg3MDgsNjg3MzgsNjg3NjgsNjg3OTcsNjg4MjcsNjg4NTcsNjg4ODYsNjg5MTYsNjg5NDYsNjg5NzUsNjkwMDQsNjkwMzQsNjkwNjMsNjkwOTIsNjkxMjIsNjkxNTIsNjkxODEsNjkyMTEsNjkyNDAsNjkyNzAsNjkzMDAsNjkzMzAsNjkzNTksNjkzODgsNjk0MTgsNjk0NDcsNjk0NzYsNjk1MDYsNjk1MzUsNjk1NjUsNjk1OTUsNjk2MjQsNjk2NTQsNjk2ODQsNjk3MTMsNjk3NDMsNjk3NzIsNjk4MDIsNjk4MzEsNjk4NjEsNjk4OTAsNjk5MTksNjk5NDksNjk5NzgsNzAwMDgsNzAwMzgsNzAwNjcsNzAwOTcsNzAxMjYsNzAxNTYsNzAxODYsNzAyMTUsNzAyNDUsNzAyNzQsNzAzMDMsNzAzMzMsNzAzNjIsNzAzOTIsNzA0MjEsNzA0NTEsNzA0ODEsNzA1MTAsNzA1NDAsNzA1NzAsNzA1OTksNzA2MjksNzA2NTgsNzA2ODcsNzA3MTcsNzA3NDYsNzA3NzYsNzA4MDUsNzA4MzUsNzA4NjQsNzA4OTQsNzA5MjQsNzA5NTQsNzA5ODMsNzEwMTMsNzEwNDIsNzEwNzEsNzExMDEsNzExMzAsNzExNTksNzExODksNzEyMTgsNzEyNDgsNzEyNzgsNzEzMDgsNzEzMzcsNzEzNjcsNzEzOTcsNzE0MjYsNzE0NTUsNzE0ODUsNzE1MTQsNzE1NDMsNzE1NzMsNzE2MDIsNzE2MzIsNzE2NjIsNzE2OTEsNzE3MjEsNzE3NTEsNzE3ODEsNzE4MTAsNzE4MzksNzE4NjksNzE4OTgsNzE5MjcsNzE5NTcsNzE5ODYsNzIwMTYsNzIwNDYsNzIwNzUsNzIxMDUsNzIxMzUsNzIxNjQsNzIxOTQsNzIyMjMsNzIyNTMsNzIyODIsNzIzMTEsNzIzNDEsNzIzNzAsNzI0MDAsNzI0MjksNzI0NTksNzI0ODksNzI1MTgsNzI1NDgsNzI1NzcsNzI2MDcsNzI2MzcsNzI2NjYsNzI2OTUsNzI3MjUsNzI3NTQsNzI3ODQsNzI4MTMsNzI4NDMsNzI4NzIsNzI5MDIsNzI5MzEsNzI5NjEsNzI5OTEsNzMwMjAsNzMwNTAsNzMwODAsNzMxMDksNzMxMzksNzMxNjgsNzMxOTcsNzMyMjcsNzMyNTYsNzMyODYsNzMzMTUsNzMzNDUsNzMzNzUsNzM0MDQsNzM0MzQsNzM0NjQsNzM0OTMsNzM1MjMsNzM1NTIsNzM1ODEsNzM2MTEsNzM2NDAsNzM2NjksNzM2OTksNzM3MjksNzM3NTgsNzM3ODgsNzM4MTgsNzM4NDgsNzM4NzcsNzM5MDcsNzM5MzYsNzM5NjUsNzM5OTUsNzQwMjQsNzQwNTMsNzQwODMsNzQxMTMsNzQxNDIsNzQxNzIsNzQyMDIsNzQyMzEsNzQyNjEsNzQyOTEsNzQzMjAsNzQzNDksNzQzNzksNzQ0MDgsNzQ0MzcsNzQ0NjcsNzQ0OTcsNzQ1MjYsNzQ1NTYsNzQ1ODYsNzQ2MTUsNzQ2NDUsNzQ2NzUsNzQ3MDQsNzQ3MzMsNzQ3NjMsNzQ3OTIsNzQ4MjIsNzQ4NTEsNzQ4ODEsNzQ5MTAsNzQ5NDAsNzQ5NjksNzQ5OTksNzUwMjksNzUwNTgsNzUwODgsNzUxMTcsNzUxNDcsNzUxNzYsNzUyMDYsNzUyMzUsNzUyNjQsNzUyOTQsNzUzMjMsNzUzNTMsNzUzODMsNzU0MTIsNzU0NDIsNzU0NzIsNzU1MDEsNzU1MzEsNzU1NjAsNzU1OTAsNzU2MTksNzU2NDgsNzU2NzgsNzU3MDcsNzU3MzcsNzU3NjYsNzU3OTYsNzU4MjYsNzU4NTYsNzU4ODUsNzU5MTUsNzU5NDQsNzU5NzQsNzYwMDMsNzYwMzIsNzYwNjIsNzYwOTEsNzYxMjEsNzYxNTAsNzYxODAsNzYyMTAsNzYyMzksNzYyNjksNzYyOTksNzYzMjgsNzYzNTgsNzYzODcsNzY0MTYsNzY0NDYsNzY0NzUsNzY1MDUsNzY1MzQsNzY1NjQsNzY1OTMsNzY2MjMsNzY2NTMsNzY2ODIsNzY3MTIsNzY3NDEsNzY3NzEsNzY4MDEsNzY4MzAsNzY4NTksNzY4ODksNzY5MTgsNzY5NDgsNzY5NzcsNzcwMDcsNzcwMzYsNzcwNjYsNzcwOTYsNzcxMjUsNzcxNTUsNzcxODUsNzcyMTQsNzcyNDMsNzcyNzMsNzczMDIsNzczMzIsNzczNjEsNzczOTAsNzc0MjAsNzc0NTAsNzc0NzksNzc1MDksNzc1MzksNzc1NjksNzc1OTgsNzc2MjcsNzc2NTcsNzc2ODYsNzc3MTUsNzc3NDUsNzc3NzQsNzc4MDQsNzc4MzMsNzc4NjMsNzc4OTMsNzc5MjMsNzc5NTIsNzc5ODIsNzgwMTEsNzgwNDEsNzgwNzAsNzgwOTksNzgxMjksNzgxNTgsNzgxODgsNzgyMTcsNzgyNDcsNzgyNzcsNzgzMDcsNzgzMzYsNzgzNjYsNzgzOTUsNzg0MjUsNzg0NTQsNzg0ODMsNzg1MTMsNzg1NDIsNzg1NzIsNzg2MDEsNzg2MzEsNzg2NjEsNzg2OTAsNzg3MjAsNzg3NTAsNzg3NzksNzg4MDgsNzg4MzgsNzg4NjcsNzg4OTcsNzg5MjYsNzg5NTYsNzg5ODUsNzkwMTUsNzkwNDQsNzkwNzQsNzkxMDQsNzkxMzMsNzkxNjMsNzkxOTIsNzkyMjIsNzkyNTEsNzkyODEsNzkzMTAsNzkzNDAsNzkzNjksNzkzOTksNzk0MjgsNzk0NTgsNzk0ODcsNzk1MTcsNzk1NDYsNzk1NzYsNzk2MDYsNzk2MzUsNzk2NjUsNzk2OTUsNzk3MjQsNzk3NTMsNzk3ODMsNzk4MTIsNzk4NDEsNzk4NzEsNzk5MDAsNzk5MzAsNzk5NjAsNzk5OTBdfSx7Ii4uL21haW4iOjU3MCwib2JqZWN0LWFzc2lnbiI6NDU2fV0sNTcwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEoKXt0aGlzLnJlZ2lvbmFsT3B0aW9ucz1bXSx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl09e2ludmFsaWRDYWxlbmRhcjoiQ2FsZW5kYXIgezB9IG5vdCBmb3VuZCIsaW52YWxpZERhdGU6IkludmFsaWQgezB9IGRhdGUiLGludmFsaWRNb250aDoiSW52YWxpZCB7MH0gbW9udGgiLGludmFsaWRZZWFyOiJJbnZhbGlkIHswfSB5ZWFyIixkaWZmZXJlbnRDYWxlbmRhcnM6IkNhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXMifSx0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zWyIiXSx0aGlzLmNhbGVuZGFycz17fSx0aGlzLl9sb2NhbENhbHM9e319ZnVuY3Rpb24gaSh0LGUscixuKXtpZih0aGlzLl9jYWxlbmRhcj10LHRoaXMuX3llYXI9ZSx0aGlzLl9tb250aD1yLHRoaXMuX2RheT1uLDA9PT10aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodGhpcy5feWVhcix0aGlzLl9tb250aCx0aGlzLl9kYXkpKXRocm93KGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4iMDAwMDAwIi5zdWJzdHJpbmcoMCxlLSh0PSIiK3QpLmxlbmd0aCkrdH1mdW5jdGlvbiBzKCl7dGhpcy5zaG9ydFllYXJDdXRvZmY9IisxMCJ9ZnVuY3Rpb24gbCh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3RdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19bihhLnByb3RvdHlwZSx7aW5zdGFuY2U6ZnVuY3Rpb24odCxlKXt0PSh0fHwiZ3JlZ29yaWFuIikudG9Mb3dlckNhc2UoKSxlPWV8fCIiO3ZhciByPXRoaXMuX2xvY2FsQ2Fsc1t0KyItIitlXTtpZighciYmdGhpcy5jYWxlbmRhcnNbdF0mJihyPW5ldyB0aGlzLmNhbGVuZGFyc1t0XShlKSx0aGlzLl9sb2NhbENhbHNbdCsiLSIrZV09ciksIXIpdGhyb3codGhpcy5sb2NhbC5pbnZhbGlkQ2FsZW5kYXJ8fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkQ2FsZW5kYXIpLnJlcGxhY2UoL1x7MFx9Lyx0KTtyZXR1cm4gcn0sbmV3RGF0ZTpmdW5jdGlvbih0LGUscixuLGEpe3JldHVybihuPShudWxsIT10JiZ0LnllYXI/dC5jYWxlbmRhcigpOiJzdHJpbmciPT10eXBlb2Ygbj90aGlzLmluc3RhbmNlKG4sYSk6bil8fHRoaXMuaW5zdGFuY2UoKSkubmV3RGF0ZSh0LGUscil9LHN1YnN0aXR1dGVEaWdpdHM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9fSxzdWJzdGl0dXRlQ2hpbmVzZURpZ2l0czpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIG49IiIsYT0wO3I+MDspe3ZhciBpPXIlMTA7bj0oMD09PWk/IiI6dFtpXStlW2FdKStuLGErKyxyPU1hdGguZmxvb3Ioci8xMCl9cmV0dXJuIDA9PT1uLmluZGV4T2YodFsxXStlWzFdKSYmKG49bi5zdWJzdHIoMSkpLG58fHRbMF19fX0pLG4oaS5wcm90b3R5cGUse25ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9jYWxlbmRhci5uZXdEYXRlKG51bGw9PXQ/dGhpczp0LGUscil9LHllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX3llYXI6dGhpcy5zZXQodCwieSIpfSxtb250aDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fbW9udGg6dGhpcy5zZXQodCwibSIpfSxkYXk6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2RheTp0aGlzLnNldCh0LCJkIil9LGRhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHQsZSxyKSl0aHJvdyhjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKTtyZXR1cm4gdGhpcy5feWVhcj10LHRoaXMuX21vbnRoPWUsdGhpcy5fZGF5PXIsdGhpc30sbGVhcFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubGVhcFllYXIodGhpcyl9LGVwb2NoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmVwb2NoKHRoaXMpfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZvcm1hdFllYXIodGhpcyl9LG1vbnRoT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtPZlllYXIodGhpcyl9LGRheXNJblllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luWWVhcih0aGlzKX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mWWVhcih0aGlzKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luTW9udGgodGhpcyl9LGRheU9mV2VlazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZldlZWsodGhpcyl9LHdlZWtEYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla0RheSh0aGlzKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmV4dHJhSW5mbyh0aGlzKX0sYWRkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmFkZCh0aGlzLHQsZSl9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jYWxlbmRhci5zZXQodGhpcyx0LGUpfSxjb21wYXJlVG86ZnVuY3Rpb24odCl7aWYodGhpcy5fY2FsZW5kYXIubmFtZSE9PXQuX2NhbGVuZGFyLm5hbWUpdGhyb3coYy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cezFcfS8sdC5fY2FsZW5kYXIubG9jYWwubmFtZSk7dmFyIGU9dGhpcy5feWVhciE9PXQuX3llYXI/dGhpcy5feWVhci10Ll95ZWFyOnRoaXMuX21vbnRoIT09dC5fbW9udGg/dGhpcy5tb250aE9mWWVhcigpLXQubW9udGhPZlllYXIoKTp0aGlzLl9kYXktdC5fZGF5O3JldHVybiAwPT09ZT8wOmU8MD8tMToxfSxjYWxlbmRhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhcn0sdG9KRDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci50b0pEKHRoaXMpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KRCh0KX0sdG9KU0RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIudG9KU0RhdGUodGhpcyl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KU0RhdGUodCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMueWVhcigpPDA/Ii0iOiIiKStvKE1hdGguYWJzKHRoaXMueWVhcigpKSw0KSsiLSIrbyh0aGlzLm1vbnRoKCksMikrIi0iK28odGhpcy5kYXkoKSwyKX19KSxuKHMucHJvdG90eXBlLHtfdmFsaWRhdGVMZXZlbDowLG5ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBudWxsPT10P3RoaXMudG9kYXkoKToodC55ZWFyJiYodGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSxyPXQuZGF5KCksZT10Lm1vbnRoKCksdD10LnllYXIoKSksbmV3IGkodGhpcyx0LGUscikpfSx0b2RheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZyb21KU0RhdGUobmV3IERhdGUpfSxlcG9jaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcikueWVhcigpPDA/dGhpcy5sb2NhbC5lcG9jaHNbMF06dGhpcy5sb2NhbC5lcG9jaHNbMV19LGZvcm1hdFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuKGUueWVhcigpPDA/Ii0iOiIiKStvKE1hdGguYWJzKGUueWVhcigpKSw0KX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxMn0sbW9udGhPZlllYXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpO3JldHVybihyLm1vbnRoKCkrdGhpcy5tb250aHNJblllYXIociktdGhpcy5maXJzdE1vbnRoKSV0aGlzLm1vbnRoc0luWWVhcihyKSt0aGlzLm1pbk1vbnRofSxmcm9tTW9udGhPZlllYXI6ZnVuY3Rpb24odCxlKXt2YXIgcj0oZSt0aGlzLmZpcnN0TW9udGgtMip0aGlzLm1pbk1vbnRoKSV0aGlzLm1vbnRoc0luWWVhcih0KSt0aGlzLm1pbk1vbnRoO3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHIsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpLHJ9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuIHRoaXMubGVhcFllYXIoZSk/MzY2OjM2NX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybiBuLnRvSkQoKS10aGlzLm5ld0RhdGUobi55ZWFyKCksdGhpcy5mcm9tTW9udGhPZlllYXIobi55ZWFyKCksdGhpcy5taW5Nb250aCksdGhpcy5taW5EYXkpLnRvSkQoKSsxfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDd9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTtyZXR1cm4oTWF0aC5mbG9vcih0aGlzLnRvSkQobikpKzIpJXRoaXMuZGF5c0luV2VlaygpfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHt9fSxhZGQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSx0aGlzLl9jb3JyZWN0QWRkKHQsdGhpcy5fYWRkKHQsZSxyKSxlLHIpfSxfYWRkOmZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl92YWxpZGF0ZUxldmVsKyssImQiPT09cnx8InciPT09cil7dmFyIG49dC50b0pEKCkrZSooInciPT09cj90aGlzLmRheXNJbldlZWsoKToxKSxhPXQuY2FsZW5kYXIoKS5mcm9tSkQobik7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxbYS55ZWFyKCksYS5tb250aCgpLGEuZGF5KCldfXRyeXt2YXIgaT10LnllYXIoKSsoInkiPT09cj9lOjApLG89dC5tb250aE9mWWVhcigpKygibSI9PT1yP2U6MCk7YT10LmRheSgpOyJ5Ij09PXI/KHQubW9udGgoKSE9PXRoaXMuZnJvbU1vbnRoT2ZZZWFyKGksbykmJihvPXRoaXMubmV3RGF0ZShpLHQubW9udGgoKSx0aGlzLm1pbkRheSkubW9udGhPZlllYXIoKSksbz1NYXRoLm1pbihvLHRoaXMubW9udGhzSW5ZZWFyKGkpKSxhPU1hdGgubWluKGEsdGhpcy5kYXlzSW5Nb250aChpLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGksbykpKSk6Im0iPT09ciYmKCFmdW5jdGlvbih0KXtmb3IoO288dC5taW5Nb250aDspaS0tLG8rPXQubW9udGhzSW5ZZWFyKGkpO2Zvcih2YXIgZT10Lm1vbnRoc0luWWVhcihpKTtvPmUtMSt0Lm1pbk1vbnRoOylpKyssby09ZSxlPXQubW9udGhzSW5ZZWFyKGkpfSh0aGlzKSxhPU1hdGgubWluKGEsdGhpcy5kYXlzSW5Nb250aChpLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGksbykpKSk7dmFyIHM9W2ksdGhpcy5mcm9tTW9udGhPZlllYXIoaSxvKSxhXTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHN9Y2F0Y2godCl7dGhyb3cgdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHR9fSxfY29ycmVjdEFkZDpmdW5jdGlvbih0LGUscixuKXtpZighKHRoaXMuaGFzWWVhclplcm98fCJ5IiE9PW4mJiJtIiE9PW58fDAhPT1lWzBdJiZ0LnllYXIoKT4wPT1lWzBdPjApKXt2YXIgYT17eTpbMSwxLCJ5Il0sbTpbMSx0aGlzLm1vbnRoc0luWWVhcigtMSksIm0iXSx3Olt0aGlzLmRheXNJbldlZWsoKSx0aGlzLmRheXNJblllYXIoLTEpLCJkIl0sZDpbMSx0aGlzLmRheXNJblllYXIoLTEpLCJkIl19W25dLGk9cjwwPy0xOjE7ZT10aGlzLl9hZGQodCxyKmFbMF0raSphWzFdLGFbMl0pfXJldHVybiB0LmRhdGUoZVswXSxlWzFdLGVbMl0pfSxzZXQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3ZhciBuPSJ5Ij09PXI/ZTp0LnllYXIoKSxhPSJtIj09PXI/ZTp0Lm1vbnRoKCksaT0iZCI9PT1yP2U6dC5kYXkoKTtyZXR1cm4ieSIhPT1yJiYibSIhPT1yfHwoaT1NYXRoLm1pbihpLHRoaXMuZGF5c0luTW9udGgobixhKSkpLHQuZGF0ZShuLGEsaSl9LGlzVmFsaWQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlTGV2ZWwrKzt2YXIgbj10aGlzLmhhc1llYXJaZXJvfHwwIT09dDtpZihuKXt2YXIgYT10aGlzLm5ld0RhdGUodCxlLHRoaXMubWluRGF5KTtuPWU+PXRoaXMubWluTW9udGgmJmUtdGhpcy5taW5Nb250aDx0aGlzLm1vbnRoc0luWWVhcihhKSYmcj49dGhpcy5taW5EYXkmJnItdGhpcy5taW5EYXk8dGhpcy5kYXlzSW5Nb250aChhKX1yZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLG59LHRvSlNEYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybiBjLmluc3RhbmNlKCkuZnJvbUpEKHRoaXMudG9KRChuKSkudG9KU0RhdGUoKX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tSkQoYy5pbnN0YW5jZSgpLmZyb21KU0RhdGUodCkudG9KRCgpKX0sX3ZhbGlkYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQueWVhcil7aWYoMD09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJnRoaXMubmFtZSE9PXQuY2FsZW5kYXIoKS5uYW1lKXRocm93KGMubG9jYWwuZGlmZmVyZW50Q2FsZW5kYXJzfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uZGlmZmVyZW50Q2FsZW5kYXJzKS5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cezFcfS8sdC5jYWxlbmRhcigpLmxvY2FsLm5hbWUpO3JldHVybiB0fXRyeXtpZih0aGlzLl92YWxpZGF0ZUxldmVsKyssMT09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJiF0aGlzLmlzVmFsaWQodCxlLHIpKXRocm93IG4ucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7dmFyIGE9dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLGF9Y2F0Y2godCl7dGhyb3cgdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHR9fX0pLGwucHJvdG90eXBlPW5ldyBzLG4obC5wcm90b3R5cGUse25hbWU6IkdyZWdvcmlhbiIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiR3JlZ29yaWFuIixlcG9jaHM6WyJCQ0UiLCJDRSJdLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Im1tL2RkL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKSsoZS55ZWFyKCk8MD8xOjApKSU0PT0wJiYodCUxMDAhPTB8fHQlNDAwPT0wKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZE1vbnRofHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3Q9bi55ZWFyKCksZT1uLm1vbnRoKCkscj1uLmRheSgpLHQ8MCYmdCsrLGU8MyYmKGUrPTEyLHQtLSk7dmFyIGE9TWF0aC5mbG9vcih0LzEwMCksaT0yLWErTWF0aC5mbG9vcihhLzQpO3JldHVybiBNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyK2ktMTUyNC41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0Ky41KSxyPU1hdGguZmxvb3IoKGUtMTg2NzIxNi4yNSkvMzY1MjQuMjUpLG49KHI9ZSsxK3ItTWF0aC5mbG9vcihyLzQpKSsxNTI0LGE9TWF0aC5mbG9vcigobi0xMjIuMSkvMzY1LjI1KSxpPU1hdGguZmxvb3IoMzY1LjI1KmEpLG89TWF0aC5mbG9vcigobi1pKS8zMC42MDAxKSxzPW4taS1NYXRoLmZsb29yKDMwLjYwMDEqbyksbD1vLShvPjEzLjU/MTM6MSksYz1hLShsPjIuNT80NzE2OjQ3MTUpO3JldHVybiBjPD0wJiZjLS0sdGhpcy5uZXdEYXRlKGMsbCxzKX0sdG9KU0RhdGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSksYT1uZXcgRGF0ZShuLnllYXIoKSxuLm1vbnRoKCktMSxuLmRheSgpKTtyZXR1cm4gYS5zZXRIb3VycygwKSxhLnNldE1pbnV0ZXMoMCksYS5zZXRTZWNvbmRzKDApLGEuc2V0TWlsbGlzZWNvbmRzKDApLGEuc2V0SG91cnMoYS5nZXRIb3VycygpPjEyP2EuZ2V0SG91cnMoKSsyOjApLGF9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubmV3RGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpKzEsdC5nZXREYXRlKCkpfX0pO3ZhciBjPWUuZXhwb3J0cz1uZXcgYTtjLmNkYXRlPWksYy5iYXNlQ2FsZW5kYXI9cyxjLmNhbGVuZGFycy5ncmVnb3JpYW49bH0seyJvYmplY3QtYXNzaWduIjo0NTZ9XSw1NzE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJvYmplY3QtYXNzaWduIiksYT10KCIuL21haW4iKTtuKGEucmVnaW9uYWxPcHRpb25zWyIiXSx7aW52YWxpZEFyZ3VtZW50czoiSW52YWxpZCBhcmd1bWVudHMiLGludmFsaWRGb3JtYXQ6IkNhbm5vdCBmb3JtYXQgYSBkYXRlIGZyb20gYW5vdGhlciBjYWxlbmRhciIsbWlzc2luZ051bWJlckF0OiJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiB7MH0iLHVua25vd25OYW1lQXQ6IlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiB7MH0iLHVuZXhwZWN0ZWRMaXRlcmFsQXQ6IlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiB7MH0iLHVuZXhwZWN0ZWRUZXh0OiJBZGRpdGlvbmFsIHRleHQgZm91bmQgYXQgZW5kIn0pLGEubG9jYWw9YS5yZWdpb25hbE9wdGlvbnNbIiJdLG4oYS5jZGF0ZS5wcm90b3R5cGUse2Zvcm1hdERhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJihlPXQsdD0iIiksdGhpcy5fY2FsZW5kYXIuZm9ybWF0RGF0ZSh0fHwiIix0aGlzLGUpfX0pLG4oYS5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLHtVTklYX0VQT0NIOmEuaW5zdGFuY2UoKS5uZXdEYXRlKDE5NzAsMSwxKS50b0pEKCksU0VDU19QRVJfREFZOjg2NDAwLFRJQ0tTX0VQT0NIOmEuaW5zdGFuY2UoKS5qZEVwb2NoLFRJQ0tTX1BFUl9EQVk6ODY0ZTksQVRPTToieXl5eS1tbS1kZCIsQ09PS0lFOiJELCBkZCBNIHl5eXkiLEZVTEw6IkRELCBNTSBkLCB5eXl5IixJU09fODYwMToieXl5eS1tbS1kZCIsSlVMSUFOOiJKIixSRkNfODIyOiJELCBkIE0geXkiLFJGQ184NTA6IkRELCBkZC1NLXl5IixSRkNfMTAzNjoiRCwgZCBNIHl5IixSRkNfMTEyMzoiRCwgZCBNIHl5eXkiLFJGQ18yODIyOiJELCBkIE0geXl5eSIsUlNTOiJELCBkIE0geXkiLFRJQ0tTOiIhIixUSU1FU1RBTVA6IkAiLFczQzoieXl5eS1tbS1kZCIsZm9ybWF0RGF0ZTpmdW5jdGlvbih0LGUscil7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYocj1lLGU9dCx0PSIiKSwhZSlyZXR1cm4iIjtpZihlLmNhbGVuZGFyKCkhPT10aGlzKXRocm93IGEubG9jYWwuaW52YWxpZEZvcm1hdHx8YS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRGb3JtYXQ7dD10fHx0aGlzLmxvY2FsLmRhdGVGb3JtYXQ7Zm9yKHZhciBuLGksbyxzLGw9KHI9cnx8e30pLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxjPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMsdT1yLm1vbnRoTnVtYmVyc3x8dGhpcy5sb2NhbC5tb250aE51bWJlcnMsaD1yLm1vbnRoTmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5tb250aE5hbWVzU2hvcnQsZj1yLm1vbnRoTmFtZXN8fHRoaXMubG9jYWwubW9udGhOYW1lcyxwPShyLmNhbGN1bGF0ZVdlZWt8fHRoaXMubG9jYWwuY2FsY3VsYXRlV2VlayxmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xO3crbjx0Lmxlbmd0aCYmdC5jaGFyQXQodytuKT09PWU7KW4rKztyZXR1cm4gdys9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9KSxkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPSIiK2U7aWYocCh0LG4pKWZvcig7YS5sZW5ndGg8cjspYT0iMCIrYTtyZXR1cm4gYX0sZz10aGlzLHY9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHU/dS5jYWxsKGcsdCxwKCJtIikpOngoZCgibSIsdC5tb250aCgpLDIpKX0sbT1mdW5jdGlvbih0LGUpe3JldHVybiBlPyJmdW5jdGlvbiI9PXR5cGVvZiBmP2YuY2FsbChnLHQpOmZbdC5tb250aCgpLWcubWluTW9udGhdOiJmdW5jdGlvbiI9PXR5cGVvZiBoP2guY2FsbChnLHQpOmhbdC5tb250aCgpLWcubWluTW9udGhdfSx5PXRoaXMubG9jYWwuZGlnaXRzLHg9ZnVuY3Rpb24odCl7cmV0dXJuIHIubG9jYWxOdW1iZXJzJiZ5P3kodCk6dH0sYj0iIixfPSExLHc9MDt3PHQubGVuZ3RoO3crKylpZihfKSInIiE9PXQuY2hhckF0KHcpfHxwKCInIik/Yis9dC5jaGFyQXQodyk6Xz0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdCh3KSl7Y2FzZSJkIjpiKz14KGQoImQiLGUuZGF5KCksMikpO2JyZWFrO2Nhc2UiRCI6Yis9KG49IkQiLGk9ZS5kYXlPZldlZWsoKSxvPWwscz1jLHAobik/c1tpXTpvW2ldKTticmVhaztjYXNlIm8iOmIrPWQoIm8iLGUuZGF5T2ZZZWFyKCksMyk7YnJlYWs7Y2FzZSJ3IjpiKz1kKCJ3IixlLndlZWtPZlllYXIoKSwyKTticmVhaztjYXNlIm0iOmIrPXYoZSk7YnJlYWs7Y2FzZSJNIjpiKz1tKGUscCgiTSIpKTticmVhaztjYXNlInkiOmIrPXAoInkiLDIpP2UueWVhcigpOihlLnllYXIoKSUxMDA8MTA/IjAiOiIiKStlLnllYXIoKSUxMDA7YnJlYWs7Y2FzZSJZIjpwKCJZIiwyKSxiKz1lLmZvcm1hdFllYXIoKTticmVhaztjYXNlIkoiOmIrPWUudG9KRCgpO2JyZWFrO2Nhc2UiQCI6Yis9KGUudG9KRCgpLXRoaXMuVU5JWF9FUE9DSCkqdGhpcy5TRUNTX1BFUl9EQVk7YnJlYWs7Y2FzZSIhIjpiKz0oZS50b0pEKCktdGhpcy5USUNLU19FUE9DSCkqdGhpcy5USUNLU19QRVJfREFZO2JyZWFrO2Nhc2UiJyI6cCgiJyIpP2IrPSInIjpfPSEwO2JyZWFrO2RlZmF1bHQ6Yis9dC5jaGFyQXQodyl9cmV0dXJuIGJ9LHBhcnNlRGF0ZTpmdW5jdGlvbih0LGUscil7aWYobnVsbD09ZSl0aHJvdyBhLmxvY2FsLmludmFsaWRBcmd1bWVudHN8fGEucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkQXJndW1lbnRzO2lmKCIiPT09KGU9Im9iamVjdCI9PXR5cGVvZiBlP2UudG9TdHJpbmcoKTplKyIiKSlyZXR1cm4gbnVsbDt0PXR8fHRoaXMubG9jYWwuZGF0ZUZvcm1hdDt2YXIgbj0ocj1yfHx7fSkuc2hvcnRZZWFyQ3V0b2ZmfHx0aGlzLnNob3J0WWVhckN1dG9mZjtuPSJzdHJpbmciIT10eXBlb2Ygbj9uOnRoaXMudG9kYXkoKS55ZWFyKCklMTAwK3BhcnNlSW50KG4sMTApO2Zvcih2YXIgaT1yLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxvPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMscz1yLnBhcnNlTW9udGh8fHRoaXMubG9jYWwucGFyc2VNb250aCxsPXIubW9udGhOdW1iZXJzfHx0aGlzLmxvY2FsLm1vbnRoTnVtYmVycyxjPXIubW9udGhOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydCx1PXIubW9udGhOYW1lc3x8dGhpcy5sb2NhbC5tb250aE5hbWVzLGg9LTEsZj0tMSxwPS0xLGQ9LTEsZz0tMSx2PSExLG09ITEseT1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xO0Erbjx0Lmxlbmd0aCYmdC5jaGFyQXQoQStuKT09PWU7KW4rKztyZXR1cm4gQSs9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9LHg9ZnVuY3Rpb24odCxyKXt2YXIgbj15KHQsciksaT1bMiwzLG4/NDoyLG4/NDoyLDEwLDExLDIwXVsib3lZSkAhIi5pbmRleE9mKHQpKzFdLG89bmV3IFJlZ0V4cCgiXi0/XFxkezEsIitpKyJ9Iikscz1lLnN1YnN0cmluZyhNKS5tYXRjaChvKTtpZighcyl0aHJvdyhhLmxvY2FsLm1pc3NpbmdOdW1iZXJBdHx8YS5yZWdpb25hbE9wdGlvbnNbIiJdLm1pc3NpbmdOdW1iZXJBdCkucmVwbGFjZSgvXHswXH0vLE0pO3JldHVybiBNKz1zWzBdLmxlbmd0aCxwYXJzZUludChzWzBdLDEwKX0sYj10aGlzLF89ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbCl7eSgibSIpO3ZhciB0PWwuY2FsbChiLGUuc3Vic3RyaW5nKE0pKTtyZXR1cm4gTSs9dC5sZW5ndGgsdH1yZXR1cm4geCgibSIpfSx3PWZ1bmN0aW9uKHQscixuLGkpe2Zvcih2YXIgbz15KHQsaSk/bjpyLHM9MDtzPG8ubGVuZ3RoO3MrKylpZihlLnN1YnN0cihNLG9bc10ubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09b1tzXS50b0xvd2VyQ2FzZSgpKXJldHVybiBNKz1vW3NdLmxlbmd0aCxzK2IubWluTW9udGg7dGhyb3coYS5sb2NhbC51bmtub3duTmFtZUF0fHxhLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5rbm93bk5hbWVBdCkucmVwbGFjZSgvXHswXH0vLE0pfSxrPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHUpe3ZhciB0PXkoIk0iKT91LmNhbGwoYixlLnN1YnN0cmluZyhNKSk6Yy5jYWxsKGIsZS5zdWJzdHJpbmcoTSkpO3JldHVybiBNKz10Lmxlbmd0aCx0fXJldHVybiB3KCJNIixjLHUpfSxUPWZ1bmN0aW9uKCl7aWYoZS5jaGFyQXQoTSkhPT10LmNoYXJBdChBKSl0aHJvdyhhLmxvY2FsLnVuZXhwZWN0ZWRMaXRlcmFsQXR8fGEucmVnaW9uYWxPcHRpb25zWyIiXS51bmV4cGVjdGVkTGl0ZXJhbEF0KS5yZXBsYWNlKC9cezBcfS8sTSk7TSsrfSxNPTAsQT0wO0E8dC5sZW5ndGg7QSsrKWlmKG0pIiciIT09dC5jaGFyQXQoQSl8fHkoIiciKT9UKCk6bT0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChBKSl7Y2FzZSJkIjpkPXgoImQiKTticmVhaztjYXNlIkQiOncoIkQiLGksbyk7YnJlYWs7Y2FzZSJvIjpnPXgoIm8iKTticmVhaztjYXNlInciOngoInciKTticmVhaztjYXNlIm0iOnA9XygpO2JyZWFrO2Nhc2UiTSI6cD1rKCk7YnJlYWs7Y2FzZSJ5Ijp2YXIgUz1BO3Y9IXkoInkiLDIpLEE9UyxmPXgoInkiLDIpO2JyZWFrO2Nhc2UiWSI6Zj14KCJZIiwyKTticmVhaztjYXNlIkoiOmg9eCgiSiIpKy41LCIuIj09PWUuY2hhckF0KE0pJiYoTSsrLHgoIkoiKSk7YnJlYWs7Y2FzZSJAIjpoPXgoIkAiKS90aGlzLlNFQ1NfUEVSX0RBWSt0aGlzLlVOSVhfRVBPQ0g7YnJlYWs7Y2FzZSIhIjpoPXgoIiEiKS90aGlzLlRJQ0tTX1BFUl9EQVkrdGhpcy5USUNLU19FUE9DSDticmVhaztjYXNlIioiOk09ZS5sZW5ndGg7YnJlYWs7Y2FzZSInIjp5KCInIik/VCgpOm09ITA7YnJlYWs7ZGVmYXVsdDpUKCl9aWYoTTxlLmxlbmd0aCl0aHJvdyBhLmxvY2FsLnVuZXhwZWN0ZWRUZXh0fHxhLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5leHBlY3RlZFRleHQ7aWYoLTE9PT1mP2Y9dGhpcy50b2RheSgpLnllYXIoKTpmPDEwMCYmdiYmKGYrPS0xPT09bj8xOTAwOnRoaXMudG9kYXkoKS55ZWFyKCktdGhpcy50b2RheSgpLnllYXIoKSUxMDAtKGY8PW4/MDoxMDApKSwic3RyaW5nIj09dHlwZW9mIHAmJihwPXMuY2FsbCh0aGlzLGYscCkpLGc+LTEpe3A9MSxkPWc7Zm9yKHZhciBFPXRoaXMuZGF5c0luTW9udGgoZixwKTtkPkU7RT10aGlzLmRheXNJbk1vbnRoKGYscCkpcCsrLGQtPUV9cmV0dXJuIGg+LTE/dGhpcy5mcm9tSkQoaCk6dGhpcy5uZXdEYXRlKGYscCxkKX0sZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbih0LGUscixuLGEpe3ImJiJvYmplY3QiIT10eXBlb2YgciYmKGE9bixuPXIscj1udWxsKSwic3RyaW5nIiE9dHlwZW9mIG4mJihhPW4sbj0iIik7dmFyIGk9dGhpcztyZXR1cm4gZT1lP2UubmV3RGF0ZSgpOm51bGwsdD1udWxsPT10P2U6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3RyeXtyZXR1cm4gaS5wYXJzZURhdGUobix0LGEpfWNhdGNoKHQpe31mb3IodmFyIGU9KCh0PXQudG9Mb3dlckNhc2UoKSkubWF0Y2goL15jLykmJnI/ci5uZXdEYXRlKCk6bnVsbCl8fGkudG9kYXkoKSxvPS8oWystXT9bMC05XSspXHMqKGR8d3xtfHkpPy9nLHM9by5leGVjKHQpO3M7KWUuYWRkKHBhcnNlSW50KHNbMV0sMTApLHNbMl18fCJkIikscz1vLmV4ZWModCk7cmV0dXJuIGV9KHQpOiJudW1iZXIiPT10eXBlb2YgdD9pc05hTih0KXx8dD09PTEvMHx8dD09PS0xLzA/ZTppLnRvZGF5KCkuYWRkKHQsImQiKTppLm5ld0RhdGUodCl9fSl9LHsiLi9tYWluIjo1NzAsIm9iamVjdC1hc3NpZ24iOjQ1Nn1dLDU3MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCJjd2lzZS1jb21waWxlciIpKHthcmdzOlsiYXJyYXkiLHtvZmZzZXQ6WzFdLGFycmF5OjB9LCJzY2FsYXIiLCJzY2FsYXIiLCJpbmRleCJdLHByZTp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntcbiAgICAgICAgdmFyIF9pbmxpbmVfMV9kYSA9IF9pbmxpbmVfMV9hcmcwXyAtIF9pbmxpbmVfMV9hcmczX1xuICAgICAgICB2YXIgX2lubGluZV8xX2RiID0gX2lubGluZV8xX2FyZzFfIC0gX2lubGluZV8xX2FyZzNfXG4gICAgICAgIGlmKChfaW5saW5lXzFfZGEgPj0gMCkgIT09IChfaW5saW5lXzFfZGIgPj0gMCkpIHtcbiAgICAgICAgICBfaW5saW5lXzFfYXJnMl8ucHVzaChfaW5saW5lXzFfYXJnNF9bMF0gKyAwLjUgKyAwLjUgKiAoX2lubGluZV8xX2RhICsgX2lubGluZV8xX2RiKSAvIChfaW5saW5lXzFfZGEgLSBfaW5saW5lXzFfZGIpKVxuICAgICAgICB9XG4gICAgICB9IixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9LHtuYW1lOiJfaW5saW5lXzFfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbIl9pbmxpbmVfMV9kYSIsIl9pbmxpbmVfMV9kYiJdfSxmdW5jTmFtZToiemVyb0Nyb3NzaW5ncyJ9KX0seyJjd2lzZS1jb21waWxlciI6MTQ4fV0sNTczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiBlPStlfHwwLG4odC5oaSh0LnNoYXBlWzBdLTEpLHIsZSkscn07dmFyIG49dCgiLi9saWIvemMtY29yZSIpfSx7Ii4vbGliL3pjLWNvcmUiOjU3Mn1dLDU3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9W3twYXRoOiIiLGJhY2tvZmY6MH0se3BhdGg6Ik0tMi40LC0zVjNMMC42LDBaIixiYWNrb2ZmOi42fSx7cGF0aDoiTS0zLjcsLTIuNVYyLjVMMS4zLDBaIixiYWNrb2ZmOjEuM30se3BhdGg6Ik0tNC40NSwtM0wtMS42NSwtMC4yVjAuMkwtNC40NSwzTDEuNTUsMFoiLGJhY2tvZmY6MS41NX0se3BhdGg6Ik0tMi4yLC0yLjJMLTAuMiwtMC4yVjAuMkwtMi4yLDIuMkwtMS40LDNMMS42LDBMLTEuNCwtM1oiLGJhY2tvZmY6MS42fSx7cGF0aDoiTS00LjQsLTIuMUwtMC42LC0wLjJWMC4yTC00LjQsMi4xTC00LDNMMiwwTC00LC0zWiIsYmFja29mZjoyfSx7cGF0aDoiTTIsMEEyLDIgMCAxLDEgMCwtMkEyLDIgMCAwLDEgMiwwWiIsYmFja29mZjowLG5vUm90YXRlOiEwfSx7cGF0aDoiTTIsMlYtMkgtMlYyWiIsYmFja29mZjowLG5vUm90YXRlOiEwfV19LHt9XSw1NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9hcnJvd19wYXRocyIpLGE9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksbz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPW8oImFubm90YXRpb24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sdGV4dGFuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGZvbnQ6YSh7ZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3Iixjb2xvckVkaXRUeXBlOiJhcnJheWRyYXcifSksd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJjZW50ZXIiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx2YWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYm9yZGVycGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc2hvd2Fycm93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGFycm93Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYXJyb3doZWFkOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxtYXg6bi5sZW5ndGgsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzdGFydGFycm93aGVhZDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4Om4ubGVuZ3RoLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sYXJyb3dzaWRlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJlbmQiLCJzdGFydCJdLGV4dHJhczpbIm5vbmUiXSxkZmx0OiJlbmQiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxhcnJvd3NpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4zLGRmbHQ6MSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxzdGFydGFycm93c2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46LjMsZGZsdDoxLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGFycm93d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4xLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHN0YW5kb2ZmOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxzdGFydHN0YW5kb2ZmOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxheDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxheTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxheHJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoicGl4ZWwiLHZhbHVlczpbInBpeGVsIixpLmlkUmVnZXgueC50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LGF5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJwaXhlbCIsdmFsdWVzOlsicGl4ZWwiLGkuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0seHJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLGkuaWRSZWdleC54LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0seDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoiYXV0byIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seHNoaWZ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsaS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSx5Ont2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJhdXRvIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5c2hpZnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGNsaWNrdG9zaG93Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExLCJvbm9mZiIsIm9ub3V0Il0sZGZsdDohMSxlZGl0VHlwZToiYXJyYXlkcmF3In0seGNsaWNrOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5Y2xpY2s6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiYXJyYXlkcmF3In0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxmb250OmEoe2VkaXRUeXBlOiJhcnJheWRyYXcifSksZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGNhcHR1cmVldmVudHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJhcnJheWRyYXcifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e3JlZjp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9fX0pfSx7Ii4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc1NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NzcxLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc5MSwiLi9hcnJvd19wYXRocyI6NTc0fV0sNTc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4vZHJhdyIpLmRyYXc7ZnVuY3Rpb24gbyh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O24uZmlsdGVyVmlzaWJsZShlLmFubm90YXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWEuZ2V0RnJvbUlkKHQsZS54cmVmKSxuPWEuZ2V0RnJvbUlkKHQsZS55cmVmKTtlLl9leHRyZW1lcz17fSxyJiZzKGUsciksbiYmcyhlLG4pfSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG49ZS5faWQsaT1uLmNoYXJBdCgwKSxvPXRbaV0scz10WyJhIitpXSxsPXRbaSsicmVmIl0sYz10WyJhIitpKyJyZWYiXSx1PXRbIl8iK2krInBhZHBsdXMiXSxoPXRbIl8iK2krInBhZG1pbnVzIl0sZj17eDoxLHk6LTF9W2ldKnRbaSsic2hpZnQiXSxwPTMqdC5hcnJvd3NpemUqdC5hcnJvd3dpZHRofHwwLGQ9cCtmLGc9cC1mLHY9Myp0LnN0YXJ0YXJyb3dzaXplKnQuYXJyb3d3aWR0aHx8MCxtPXYrZix5PXYtZjtpZihjPT09bCl7dmFyIHg9YS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpkLHBwYWRtaW51czpnfSksYj1hLmZpbmRFeHRyZW1lcyhlLFtlLnIyYyhzKV0se3BwYWRwbHVzOk1hdGgubWF4KHUsbSkscHBhZG1pbnVzOk1hdGgubWF4KGgseSl9KTtyPXttaW46W3gubWluWzBdLGIubWluWzBdXSxtYXg6W3gubWF4WzBdLGIubWF4WzBdXX19ZWxzZSBtPXM/bStzOm0seT1zP3ktczp5LHI9YS5maW5kRXh0cmVtZXMoZSxbZS5yMmMobyldLHtwcGFkcGx1czpNYXRoLm1heCh1LGQsbSkscHBhZG1pbnVzOk1hdGgubWF4KGgsZyx5KX0pO3QuX2V4dHJlbWVzW25dPXJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYobi5maWx0ZXJWaXNpYmxlKGUuYW5ub3RhdGlvbnMpLmxlbmd0aCYmdC5fZnVsbERhdGEubGVuZ3RoKXJldHVybiBuLnN5bmNPckFzeW5jKFtpLG9dLHQpfX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi9kcmF3Ijo1ODF9XSw1Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yO2Z1bmN0aW9uIG8odCxlKXt2YXIgcixuLGEsaSxvLGwsYyx1PXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMsaD1bXSxmPVtdLHA9W10sZD0oZXx8W10pLmxlbmd0aDtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKWlmKGk9KGE9dVtyXSkuY2xpY2t0b3Nob3cpe2ZvcihuPTA7bjxkO24rKylpZihsPShvPWVbbl0pLnhheGlzLGM9by55YXhpcyxsLl9pZD09PWEueHJlZiYmYy5faWQ9PT1hLnlyZWYmJmwuZDJyKG8ueCk9PT1zKGEuX3hjbGljayxsKSYmYy5kMnIoby55KT09PXMoYS5feWNsaWNrLGMpKXsoYS52aXNpYmxlPyJvbm91dCI9PT1pP2Y6cDpoKS5wdXNoKHIpO2JyZWFrfW49PT1kJiZhLnZpc2libGUmJiJvbm91dCI9PT1pJiZmLnB1c2gocil9cmV0dXJue29uOmgsb2ZmOmYsZXhwbGljaXRPZmY6cH19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiJsb2ciPT09ZS50eXBlP2UubDJyKHQpOmUuZDJyKHQpfWUuZXhwb3J0cz17aGFzQ2xpY2tUb1Nob3c6ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHQsZSk7cmV0dXJuIHIub24ubGVuZ3RoPjB8fHIuZXhwbGljaXRPZmYubGVuZ3RoPjB9LG9uQ2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcixzLGw9byh0LGUpLGM9bC5vbix1PWwub2ZmLmNvbmNhdChsLmV4cGxpY2l0T2ZmKSxoPXt9LGY9dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucztpZighYy5sZW5ndGgmJiF1Lmxlbmd0aClyZXR1cm47Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKykocz1pKHQubGF5b3V0LCJhbm5vdGF0aW9ucyIsZltjW3JdXSkpLm1vZGlmeUl0ZW0oInZpc2libGUiLCEwKSxuLmV4dGVuZEZsYXQoaCxzLmdldFVwZGF0ZU9iaigpKTtmb3Iocj0wO3I8dS5sZW5ndGg7cisrKShzPWkodC5sYXlvdXQsImFubm90YXRpb25zIixmW3Vbcl1dKSkubW9kaWZ5SXRlbSgidmlzaWJsZSIsITEpLG4uZXh0ZW5kRmxhdChoLHMuZ2V0VXBkYXRlT2JqKCkpO3JldHVybiBhLmNhbGwoInVwZGF0ZSIsdCx7fSxoKX19fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3NTUsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDZ9XSw1Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtpKCJvcGFjaXR5Iik7dmFyIG89aSgiYmdjb2xvciIpLHM9aSgiYm9yZGVyY29sb3IiKSxsPWEub3BhY2l0eShzKTtpKCJib3JkZXJwYWQiKTt2YXIgYz1pKCJib3JkZXJ3aWR0aCIpLHU9aSgic2hvd2Fycm93Iik7aWYoaSgidGV4dCIsdT8iICI6ci5fZGZsdFRpdGxlLmFubm90YXRpb24pLGkoInRleHRhbmdsZSIpLG4uY29lcmNlRm9udChpLCJmb250IixyLmZvbnQpLGkoIndpZHRoIiksaSgiYWxpZ24iKSxpKCJoZWlnaHQiKSYmaSgidmFsaWduIiksdSl7dmFyIGgsZixwPWkoImFycm93c2lkZSIpOy0xIT09cC5pbmRleE9mKCJlbmQiKSYmKGg9aSgiYXJyb3doZWFkIiksZj1pKCJhcnJvd3NpemUiKSksLTEhPT1wLmluZGV4T2YoInN0YXJ0IikmJihpKCJzdGFydGFycm93aGVhZCIsaCksaSgic3RhcnRhcnJvd3NpemUiLGYpKSxpKCJhcnJvd2NvbG9yIixsP2UuYm9yZGVyY29sb3I6YS5kZWZhdWx0TGluZSksaSgiYXJyb3d3aWR0aCIsMioobCYmY3x8MSkpLGkoInN0YW5kb2ZmIiksaSgic3RhcnRzdGFuZG9mZiIpfXZhciBkPWkoImhvdmVydGV4dCIpLGc9ci5ob3ZlcmxhYmVsfHx7fTtpZihkKXt2YXIgdj1pKCJob3ZlcmxhYmVsLmJnY29sb3IiLGcuYmdjb2xvcnx8KGEub3BhY2l0eShvKT9hLnJnYihvKTphLmRlZmF1bHRMaW5lKSksbT1pKCJob3ZlcmxhYmVsLmJvcmRlcmNvbG9yIixnLmJvcmRlcmNvbG9yfHxhLmNvbnRyYXN0KHYpKTtuLmNvZXJjZUZvbnQoaSwiaG92ZXJsYWJlbC5mb250Iix7ZmFtaWx5OmcuZm9udC5mYW1pbHksc2l6ZTpnLmZvbnQuc2l6ZSxjb2xvcjpnLmZvbnQuY29sb3J8fG19KX1pKCJjYXB0dXJlZXZlbnRzIiwhIWQpfX0seyIuLi8uLi9saWIiOjcxNywiLi4vY29sb3IiOjU5Mn1dLDU3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliL3RvX2xvZ19yYW5nZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtlPWV8fHt9O3ZhciBvPSJsb2ciPT09ciYmImxpbmVhciI9PT1lLnR5cGUscz0ibGluZWFyIj09PXImJiJsb2ciPT09ZS50eXBlO2lmKG98fHMpZm9yKHZhciBsLGMsdT10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLGg9ZS5faWQuY2hhckF0KDApLGY9MDtmPHUubGVuZ3RoO2YrKylsPXVbZl0sYz0iYW5ub3RhdGlvbnNbIitmKyJdLiIsbFtoKyJyZWYiXT09PWUuX2lkJiZwKGgpLGxbImEiK2grInJlZiJdPT09ZS5faWQmJnAoImEiK2gpO2Z1bmN0aW9uIHAodCl7dmFyIHI9bFt0XSxzPW51bGw7cz1vP2EocixlLnJhbmdlKTpNYXRoLnBvdygxMCxyKSxuKHMpfHwocz1udWxsKSxpKGMrdCxzKX19fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjc0MywiZmFzdC1pc251bWVyaWMiOjIyOH1dLDU4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vY29tbW9uX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBpKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsYSl9dmFyIGw9aSgidmlzaWJsZSIpLGM9aSgiY2xpY2t0b3Nob3ciKTtpZihsfHxjKXtvKHQsZSxyLGkpO2Zvcih2YXIgdT1lLnNob3dhcnJvdyxoPVsieCIsInkiXSxmPVstMTAsLTMwXSxwPXtfZnVsbExheW91dDpyfSxkPTA7ZDwyO2QrKyl7dmFyIGc9aFtkXSx2PWEuY29lcmNlUmVmKHQsZSxwLGcsIiIsInBhcGVyIik7aWYoInBhcGVyIiE9PXYpYS5nZXRGcm9tSWQocCx2KS5fYW5uSW5kaWNlcy5wdXNoKGUuX2luZGV4KTtpZihhLmNvZXJjZVBvc2l0aW9uKGUscCxpLHYsZywuNSksdSl7dmFyIG09ImEiK2cseT1hLmNvZXJjZVJlZih0LGUscCxtLCJwaXhlbCIpOyJwaXhlbCIhPT15JiZ5IT09diYmKHk9ZVttXT0icGl4ZWwiKTt2YXIgeD0icGl4ZWwiPT09eT9mW2RdOi40O2EuY29lcmNlUG9zaXRpb24oZSxwLGkseSxtLHgpfWkoZysiYW5jaG9yIiksaShnKyJzaGlmdCIpfWlmKG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLHUmJm4ubm9uZU9yQWxsKHQsZSxbImF4IiwiYXkiXSksYyl7dmFyIGI9aSgieGNsaWNrIiksXz1pKCJ5Y2xpY2siKTtlLl94Y2xpY2s9dm9pZCAwPT09Yj9lLng6YS5jbGVhblBvc2l0aW9uKGIscCxlLnhyZWYpLGUuX3ljbGljaz12b2lkIDA9PT1fP2UueTphLmNsZWFuUG9zaXRpb24oXyxwLGUueXJlZil9fX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpKHQsZSx7bmFtZToiYW5ub3RhdGlvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc2MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi9hdHRyaWJ1dGVzIjo1NzUsIi4vY29tbW9uX2RlZmF1bHRzIjo1Nzh9XSw1ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vY29sb3IiKSxjPXQoIi4uL2RyYXdpbmciKSx1PXQoIi4uL2Z4IiksaD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxmPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxwPXQoIi4uL2RyYWdlbGVtZW50IiksZD10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3IsZz10KCIuL2RyYXdfYXJyb3dfaGVhZCIpO2Z1bmN0aW9uIHYodCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zW2VdfHx7fSxuPXMuZ2V0RnJvbUlkKHQsci54cmVmKSxhPXMuZ2V0RnJvbUlkKHQsci55cmVmKTtuJiZuLnNldFNjYWxlKCksYSYmYS5zZXRTY2FsZSgpLG0odCxyLGUsITEsbixhKX1mdW5jdGlvbiBtKHQsZSxyLGkscyx2KXt2YXIgbSx5LHg9dC5fZnVsbExheW91dCxiPXQuX2Z1bGxMYXlvdXQuX3NpemUsXz10Ll9jb250ZXh0LmVkaXRzO2k/KG09ImFubm90YXRpb24tIitpLHk9aSsiLmFubm90YXRpb25zIik6KG09ImFubm90YXRpb24iLHk9ImFubm90YXRpb25zIik7dmFyIHc9ZCh0LmxheW91dCx5LGUpLGs9dy5tb2RpZnlCYXNlLFQ9dy5tb2RpZnlJdGVtLE09dy5nZXRVcGRhdGVPYmo7eC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrbSsnW2RhdGEtaW5kZXg9IicrcisnIl0nKS5yZW1vdmUoKTt2YXIgQT0iY2xpcCIreC5fdWlkKyJfYW5uIityO2lmKGUuX2lucHV0JiYhMSE9PWUudmlzaWJsZSl7dmFyIFM9e3g6e30seTp7fX0sRT0rZS50ZXh0YW5nbGV8fDAsTD14Ll9pbmZvbGF5ZXIuYXBwZW5kKCJnIikuY2xhc3NlZChtLCEwKS5hdHRyKCJkYXRhLWluZGV4IixTdHJpbmcocikpLnN0eWxlKCJvcGFjaXR5IixlLm9wYWNpdHkpLEM9TC5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQtZyIsITApLFA9X1tlLnNob3dhcnJvdz8iYW5ub3RhdGlvblRhaWwiOiJhbm5vdGF0aW9uUG9zaXRpb24iXSxPPWUuY2FwdHVyZWV2ZW50c3x8Xy5hbm5vdGF0aW9uVGV4dHx8UCx6PUMuYXBwZW5kKCJnIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIixPPyJhbGwiOm51bGwpLmNhbGwoZiwicG9pbnRlciIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXt0Ll9kcmFnZ2luZz0hMSx0LmVtaXQoInBsb3RseV9jbGlja2Fubm90YXRpb24iLHEobi5ldmVudCkpfSk7ZS5ob3ZlcnRleHQmJnoub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXt2YXIgcj1lLmhvdmVybGFiZWwsbj1yLmZvbnQsYT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt1LmxvbmVIb3Zlcih7eDA6YS5sZWZ0LWkubGVmdCx4MTphLnJpZ2h0LWkubGVmdCx5OihhLnRvcCthLmJvdHRvbSkvMi1pLnRvcCx0ZXh0OmUuaG92ZXJ0ZXh0LGNvbG9yOnIuYmdjb2xvcixib3JkZXJDb2xvcjpyLmJvcmRlcmNvbG9yLGZvbnRGYW1pbHk6bi5mYW1pbHksZm9udFNpemU6bi5zaXplLGZvbnRDb2xvcjpuLmNvbG9yfSx7Y29udGFpbmVyOnguX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnguX3BhcGVyLm5vZGUoKSxnZDp0fSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7dS5sb25lVW5ob3Zlcih4Ll9ob3ZlcmxheWVyLm5vZGUoKSl9KTt2YXIgST1lLmJvcmRlcndpZHRoLEQ9ZS5ib3JkZXJwYWQsUj1JK0QsRj16LmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmciKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixJKyJweCIpLmNhbGwobC5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChsLmZpbGwsZS5iZ2NvbG9yKSxCPWUud2lkdGh8fGUuaGVpZ2h0LE49eC5fdG9wY2xpcHMuc2VsZWN0QWxsKCIjIitBKS5kYXRhKEI/WzBdOltdKTtOLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImFubmNsaXAiLCEwKS5hdHRyKCJpZCIsQSkuYXBwZW5kKCJyZWN0IiksTi5leGl0KCkucmVtb3ZlKCk7dmFyIGo9ZS5mb250LFY9eC5fbWV0YT9vLnRlbXBsYXRlU3RyaW5nKGUudGV4dCx4Ll9tZXRhKTplLnRleHQsVT16LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImFubm90YXRpb24tdGV4dCIsITApLnRleHQoVik7Xy5hbm5vdGF0aW9uVGV4dD9VLmNhbGwoaC5tYWtlRWRpdGFibGUse2RlbGVnYXRlOnosZ2Q6dH0pLmNhbGwoSCkub24oImVkaXQiLGZ1bmN0aW9uKHIpe2UudGV4dD1yLHRoaXMuY2FsbChIKSxUKCJ0ZXh0IixyKSxzJiZzLmF1dG9yYW5nZSYmayhzLl9uYW1lKyIuYXV0b3JhbmdlIiwhMCksdiYmdi5hdXRvcmFuZ2UmJmsodi5fbmFtZSsiLmF1dG9yYW5nZSIsITApLGEuY2FsbCgiX2d1aVJlbGF5b3V0Iix0LE0oKSl9KTpVLmNhbGwoSCl9ZWxzZSBuLnNlbGVjdEFsbCgiIyIrQSkucmVtb3ZlKCk7ZnVuY3Rpb24gcSh0KXt2YXIgbj17aW5kZXg6cixhbm5vdGF0aW9uOmUuX2lucHV0LGZ1bGxBbm5vdGF0aW9uOmUsZXZlbnQ6dH07cmV0dXJuIGkmJihuLnN1YnBsb3RJZD1pKSxufWZ1bmN0aW9uIEgocil7cmV0dXJuIHIuY2FsbChjLmZvbnQsaikuYXR0cih7InRleHQtYW5jaG9yIjp7bGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifVtlLmFsaWduXXx8Im1pZGRsZSJ9KSxoLmNvbnZlcnRUb1RzcGFucyhyLHQsRykscn1mdW5jdGlvbiBHKCl7dmFyIHI9VS5zZWxlY3RBbGwoImEiKTsxPT09ci5zaXplKCkmJnIudGV4dCgpPT09VS50ZXh0KCkmJnouaW5zZXJ0KCJhIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7InhsaW5rOnhsaW5rOmhyZWYiOnIuYXR0cigieGxpbms6aHJlZiIpLCJ4bGluazp4bGluazpzaG93IjpyLmF0dHIoInhsaW5rOnNob3ciKX0pLnN0eWxlKHtjdXJzb3I6InBvaW50ZXIifSkubm9kZSgpLmFwcGVuZENoaWxkKEYubm9kZSgpKTt2YXIgbj16LnNlbGVjdCgiLmFubm90YXRpb24tdGV4dC1tYXRoLWdyb3VwIiksdT0hbi5lbXB0eSgpLGQ9Yy5iQm94KCh1P246VSkubm9kZSgpKSxtPWQud2lkdGgseT1kLmhlaWdodCx3PWUud2lkdGh8fG0sTz1lLmhlaWdodHx8eSxEPU1hdGgucm91bmQodysyKlIpLGo9TWF0aC5yb3VuZChPKzIqUik7ZnVuY3Rpb24gVih0LGUpe3JldHVybiJhdXRvIj09PWUmJihlPXQ8MS8zPyJsZWZ0Ijp0PjIvMz8icmlnaHQiOiJjZW50ZXIiKSx7Y2VudGVyOjAsbWlkZGxlOjAsbGVmdDouNSxib3R0b206LS41LHJpZ2h0Oi0uNSx0b3A6LjV9W2VdfWZvcih2YXIgSD0hMSxHPVsieCIsInkiXSxZPTA7WTxHLmxlbmd0aDtZKyspe3ZhciBXLFgsWixKLEssUT1HW1ldLCQ9ZVtRKyJyZWYiXXx8USx0dD1lWyJhIitRKyJyZWYiXSxldD17eDpzLHk6dn1bUV0scnQ9KEUrKCJ4Ij09PVE/MDotOTApKSpNYXRoLlBJLzE4MCxudD1EKk1hdGguY29zKHJ0KSxhdD1qKk1hdGguc2luKHJ0KSxpdD1NYXRoLmFicyhudCkrTWF0aC5hYnMoYXQpLG90PWVbUSsiYW5jaG9yIl0sc3Q9ZVtRKyJzaGlmdCJdKigieCI9PT1RPzE6LTEpLGx0PVNbUV07aWYoZXQpe3ZhciBjdD1ldC5yMmZyYWN0aW9uKGVbUV0pOyhjdDwwfHxjdD4xKSYmKHR0PT09JD8oKGN0PWV0LnIyZnJhY3Rpb24oZVsiYSIrUV0pKTwwfHxjdD4xKSYmKEg9ITApOkg9ITApLFc9ZXQuX29mZnNldCtldC5yMnAoZVtRXSksSj0uNX1lbHNlIngiPT09UT8oWj1lW1FdLFc9Yi5sK2IudypaKTooWj0xLWVbUV0sVz1iLnQrYi5oKlopLEo9ZS5zaG93YXJyb3c/LjU6WjtpZihlLnNob3dhcnJvdyl7bHQuaGVhZD1XO3ZhciB1dD1lWyJhIitRXTtLPW50KlYoLjUsZS54YW5jaG9yKS1hdCpWKC41LGUueWFuY2hvciksdHQ9PT0kPyhsdC50YWlsPWV0Ll9vZmZzZXQrZXQucjJwKHV0KSxYPUspOihsdC50YWlsPVcrdXQsWD1LK3V0KSxsdC50ZXh0PWx0LnRhaWwrSzt2YXIgaHQ9eFsieCI9PT1RPyJ3aWR0aCI6ImhlaWdodCJdO2lmKCJwYXBlciI9PT0kJiYobHQuaGVhZD1vLmNvbnN0cmFpbihsdC5oZWFkLDEsaHQtMSkpLCJwaXhlbCI9PT10dCl7dmFyIGZ0PS1NYXRoLm1heChsdC50YWlsLTMsbHQudGV4dCkscHQ9TWF0aC5taW4obHQudGFpbCszLGx0LnRleHQpLWh0O2Z0PjA/KGx0LnRhaWwrPWZ0LGx0LnRleHQrPWZ0KTpwdD4wJiYobHQudGFpbC09cHQsbHQudGV4dC09cHQpfWx0LnRhaWwrPXN0LGx0LmhlYWQrPXN0fWVsc2UgWD1LPWl0KlYoSixvdCksbHQudGV4dD1XK0s7bHQudGV4dCs9c3QsSys9c3QsWCs9c3QsZVsiXyIrUSsicGFkcGx1cyJdPWl0LzIrWCxlWyJfIitRKyJwYWRtaW51cyJdPWl0LzItWCxlWyJfIitRKyJzaXplIl09aXQsZVsiXyIrUSsic2hpZnQiXT1LfWlmKEgpei5yZW1vdmUoKTtlbHNle3ZhciBkdD0wLGd0PTA7aWYoImxlZnQiIT09ZS5hbGlnbiYmKGR0PSh3LW0pKigiY2VudGVyIj09PWUuYWxpZ24/LjU6MSkpLCJ0b3AiIT09ZS52YWxpZ24mJihndD0oTy15KSooIm1pZGRsZSI9PT1lLnZhbGlnbj8uNToxKSksdSluLnNlbGVjdCgic3ZnIikuYXR0cih7eDpSK2R0LTEseTpSK2d0fSkuY2FsbChjLnNldENsaXBVcmwsQj9BOm51bGwsdCk7ZWxzZXt2YXIgdnQ9UitndC1kLnRvcCxtdD1SK2R0LWQubGVmdDtVLmNhbGwoaC5wb3NpdGlvblRleHQsbXQsdnQpLmNhbGwoYy5zZXRDbGlwVXJsLEI/QTpudWxsLHQpfU4uc2VsZWN0KCJyZWN0IikuY2FsbChjLnNldFJlY3QsUixSLHcsTyksRi5jYWxsKGMuc2V0UmVjdCxJLzIsSS8yLEQtSSxqLUkpLHouY2FsbChjLnNldFRyYW5zbGF0ZSxNYXRoLnJvdW5kKFMueC50ZXh0LUQvMiksTWF0aC5yb3VuZChTLnkudGV4dC1qLzIpKSxDLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIrRSsiLCIrUy54LnRleHQrIiwiK1MueS50ZXh0KyIpIn0pO3ZhciB5dCx4dD1mdW5jdGlvbihyLG4pe0wuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1hcnJvdy1nIikucmVtb3ZlKCk7dmFyIHU9Uy54LmhlYWQsaD1TLnkuaGVhZCxmPVMueC50YWlsK3IsZD1TLnkudGFpbCtuLG09Uy54LnRleHQrcix5PVMueS50ZXh0K24seD1vLnJvdGF0aW9uWFlNYXRyaXgoRSxtLHkpLHc9by5hcHBseTJEVHJhbnNmb3JtKHgpLEE9by5hcHBseTJEVHJhbnNmb3JtMih4KSxQPStGLmF0dHIoIndpZHRoIiksTz0rRi5hdHRyKCJoZWlnaHQiKSxJPW0tLjUqUCxEPUkrUCxSPXktLjUqTyxCPVIrTyxOPVtbSSxSLEksQl0sW0ksQixELEJdLFtELEIsRCxSXSxbRCxSLEksUl1dLm1hcChBKTtpZighTi5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdF4hIW8uc2VnbWVudHNJbnRlcnNlY3QodSxoLHUrMWU2LGgrMWU2LGVbMF0sZVsxXSxlWzJdLGVbM10pfSwhMSkpe04uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1vLnNlZ21lbnRzSW50ZXJzZWN0KGYsZCx1LGgsdFswXSx0WzFdLHRbMl0sdFszXSk7ZSYmKGY9ZS54LGQ9ZS55KX0pO3ZhciBqPWUuYXJyb3d3aWR0aCxWPWUuYXJyb3djb2xvcixVPWUuYXJyb3dzaWRlLHE9TC5hcHBlbmQoImciKS5zdHlsZSh7b3BhY2l0eTpsLm9wYWNpdHkoVil9KS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93LWciLCEwKSxIPXEuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0iK2YrIiwiK2QrIkwiK3UrIiwiK2gpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGorInB4IikuY2FsbChsLnN0cm9rZSxsLnJnYihWKSk7aWYoZyhILFUsZSksXy5hbm5vdGF0aW9uUG9zaXRpb24mJkgubm9kZSgpLnBhcmVudE5vZGUmJiFpKXt2YXIgRz11LFk9aDtpZihlLnN0YW5kb2ZmKXt2YXIgVz1NYXRoLnNxcnQoTWF0aC5wb3codS1mLDIpK01hdGgucG93KGgtZCwyKSk7Rys9ZS5zdGFuZG9mZiooZi11KS9XLFkrPWUuc3RhbmRvZmYqKGQtaCkvV312YXIgWCxaLEo9cS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93IiwhMCkuY2xhc3NlZCgiYW5uZHJhZyIsITApLmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhMCkuYXR0cih7ZDoiTTMsM0gtM1YtM0gzWk0wLDBMIisoZi1HKSsiLCIrKGQtWSksdHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitHKyIsIitZKyIpIn0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLGorNisicHgiKS5jYWxsKGwuc3Ryb2tlLCJyZ2JhKDAsMCwwLDApIikuY2FsbChsLmZpbGwsInJnYmEoMCwwLDAsMCkiKTtwLmluaXQoe2VsZW1lbnQ6Si5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXt2YXIgdD1jLmdldFRyYW5zbGF0ZSh6KTtYPXQueCxaPXQueSxzJiZzLmF1dG9yYW5nZSYmayhzLl9uYW1lKyIuYXV0b3JhbmdlIiwhMCksdiYmdi5hdXRvcmFuZ2UmJmsodi5fbmFtZSsiLmF1dG9yYW5nZSIsITApfSxtb3ZlRm46ZnVuY3Rpb24odCxyKXt2YXIgbj13KFgsWiksYT1uWzBdK3QsaT1uWzFdK3I7ei5jYWxsKGMuc2V0VHJhbnNsYXRlLGEsaSksVCgieCIscz9zLnAycihzLnIycChlLngpK3QpOmUueCt0L2IudyksVCgieSIsdj92LnAycih2LnIycChlLnkpK3IpOmUueS1yL2IuaCksZS5heHJlZj09PWUueHJlZiYmVCgiYXgiLHMucDJyKHMucjJwKGUuYXgpK3QpKSxlLmF5cmVmPT09ZS55cmVmJiZUKCJheSIsdi5wMnIodi5yMnAoZS5heSkrcikpLHEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdCsiLCIrcisiKSIpLEMuYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitFKyIsIithKyIsIitpKyIpIn0pfSxkb25lRm46ZnVuY3Rpb24oKXthLmNhbGwoIl9ndWlSZWxheW91dCIsdCxNKCkpO3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5qcy1ub3Rlcy1ib3gtcGFuZWwiKTtlJiZlLnJlZHJhdyhlLnNlbGVjdGVkT2JqKX19KX19fTtpZihlLnNob3dhcnJvdyYmeHQoMCwwKSxQKXAuaW5pdCh7ZWxlbWVudDp6Lm5vZGUoKSxnZDp0LHByZXBGbjpmdW5jdGlvbigpe3l0PUMuYXR0cigidHJhbnNmb3JtIil9LG1vdmVGbjpmdW5jdGlvbih0LHIpe3ZhciBuPSJwb2ludGVyIjtpZihlLnNob3dhcnJvdyllLmF4cmVmPT09ZS54cmVmP1QoImF4IixzLnAycihzLnIycChlLmF4KSt0KSk6VCgiYXgiLGUuYXgrdCksZS5heXJlZj09PWUueXJlZj9UKCJheSIsdi5wMnIodi5yMnAoZS5heSkrcikpOlQoImF5IixlLmF5K3IpLHh0KHQscik7ZWxzZXtpZihpKXJldHVybjt2YXIgYSxvO2lmKHMpYT1zLnAycihzLnIycChlLngpK3QpO2Vsc2V7dmFyIGw9ZS5feHNpemUvYi53LGM9ZS54KyhlLl94c2hpZnQtZS54c2hpZnQpL2Iudy1sLzI7YT1wLmFsaWduKGMrdC9iLncsbCwwLDEsZS54YW5jaG9yKX1pZih2KW89di5wMnIodi5yMnAoZS55KStyKTtlbHNle3ZhciB1PWUuX3lzaXplL2IuaCxoPWUueS0oZS5feXNoaWZ0K2UueXNoaWZ0KS9iLmgtdS8yO289cC5hbGlnbihoLXIvYi5oLHUsMCwxLGUueWFuY2hvcil9VCgieCIsYSksVCgieSIsbykscyYmdnx8KG49cC5nZXRDdXJzb3Iocz8uNTphLHY/LjU6byxlLnhhbmNob3IsZS55YW5jaG9yKSl9Qy5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK3QrIiwiK3IrIikiK3l0fSksZih6LG4pfSxjbGlja0ZuOmZ1bmN0aW9uKHIsbil7ZS5jYXB0dXJlZXZlbnRzJiZ0LmVtaXQoInBsb3RseV9jbGlja2Fubm90YXRpb24iLHEobikpfSxkb25lRm46ZnVuY3Rpb24oKXtmKHopLGEuY2FsbCgiX2d1aVJlbGF5b3V0Iix0LE0oKSk7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmpzLW5vdGVzLWJveC1wYW5lbCIpO2UmJmUucmVkcmF3KGUuc2VsZWN0ZWRPYmopfX0pfX19ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24iKS5yZW1vdmUoKTtmb3IodmFyIHI9MDtyPGUuYW5ub3RhdGlvbnMubGVuZ3RoO3IrKyllLmFubm90YXRpb25zW3JdLnZpc2libGUmJnYodCxyKTtyZXR1cm4gaS5wcmV2aW91c1Byb21pc2VzKHQpfSxkcmF3T25lOnYsZHJhd1JhdzptfX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL3NldGN1cnNvciI6NzM3LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzU1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi8uLi9wbG90cy9wbG90cyI6ODI2LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuLi9jb2xvciI6NTkyLCIuLi9kcmFnZWxlbWVudCI6NjEwLCIuLi9kcmF3aW5nIjo2MTMsIi4uL2Z4Ijo2MzAsIi4vZHJhd19hcnJvd19oZWFkIjo1ODIsZDM6MTY1fV0sNTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi9jb2xvciIpLGk9dCgiLi9hcnJvd19wYXRocyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8scyxsLGMsdT10Lm5vZGUoKSxoPWlbci5hcnJvd2hlYWR8fDBdLGY9aVtyLnN0YXJ0YXJyb3doZWFkfHwwXSxwPShyLmFycm93d2lkdGh8fDEpKihyLmFycm93c2l6ZXx8MSksZD0oci5hcnJvd3dpZHRofHwxKSooci5zdGFydGFycm93c2l6ZXx8MSksZz1lLmluZGV4T2YoInN0YXJ0Iik+PTAsdj1lLmluZGV4T2YoImVuZCIpPj0wLG09aC5iYWNrb2ZmKnArci5zdGFuZG9mZix5PWYuYmFja29mZipkK3Iuc3RhcnRzdGFuZG9mZjtpZigibGluZSI9PT11Lm5vZGVOYW1lKXtvPXt4Oit0LmF0dHIoIngxIikseTordC5hdHRyKCJ5MSIpfSxzPXt4Oit0LmF0dHIoIngyIikseTordC5hdHRyKCJ5MiIpfTt2YXIgeD1vLngtcy54LGI9by55LXMueTtpZihjPShsPU1hdGguYXRhbjIoYix4KSkrTWF0aC5QSSxtJiZ5JiZtK3k+TWF0aC5zcXJ0KHgqeCtiKmIpKXJldHVybiB2b2lkIFAoKTtpZihtKXtpZihtKm0+eCp4K2IqYilyZXR1cm4gdm9pZCBQKCk7dmFyIF89bSpNYXRoLmNvcyhsKSx3PW0qTWF0aC5zaW4obCk7cy54Kz1fLHMueSs9dyx0LmF0dHIoe3gyOnMueCx5MjpzLnl9KX1pZih5KXtpZih5Knk+eCp4K2IqYilyZXR1cm4gdm9pZCBQKCk7dmFyIGs9eSpNYXRoLmNvcyhsKSxUPXkqTWF0aC5zaW4obCk7by54LT1rLG8ueS09VCx0LmF0dHIoe3gxOm8ueCx5MTpvLnl9KX19ZWxzZSBpZigicGF0aCI9PT11Lm5vZGVOYW1lKXt2YXIgTT11LmdldFRvdGFsTGVuZ3RoKCksQT0iIjtpZihNPG0reSlyZXR1cm4gdm9pZCBQKCk7dmFyIFM9dS5nZXRQb2ludEF0TGVuZ3RoKDApLEU9dS5nZXRQb2ludEF0TGVuZ3RoKC4xKTtsPU1hdGguYXRhbjIoUy55LUUueSxTLngtRS54KSxvPXUuZ2V0UG9pbnRBdExlbmd0aChNYXRoLm1pbih5LE0pKSxBPSIwcHgsIit5KyJweCwiO3ZhciBMPXUuZ2V0UG9pbnRBdExlbmd0aChNKSxDPXUuZ2V0UG9pbnRBdExlbmd0aChNLS4xKTtjPU1hdGguYXRhbjIoTC55LUMueSxMLngtQy54KSxzPXUuZ2V0UG9pbnRBdExlbmd0aChNYXRoLm1heCgwLE0tbSkpLEErPU0tKEE/eSttOm0pKyJweCwiK00rInB4Iix0LnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IixBKX1mdW5jdGlvbiBQKCl7dC5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjBweCwxMDBweCIpfWZ1bmN0aW9uIE8oZSxpLG8scyl7ZS5wYXRoJiYoZS5ub1JvdGF0ZSYmKG89MCksbi5zZWxlY3QodS5wYXJlbnROb2RlKS5hcHBlbmQoInBhdGgiKS5hdHRyKHtjbGFzczp0LmF0dHIoImNsYXNzIiksZDplLnBhdGgsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitpLngrIiwiK2kueSsiKSIrKG8/InJvdGF0ZSgiKzE4MCpvL01hdGguUEkrIikiOiIiKSsic2NhbGUoIitzKyIpIn0pLnN0eWxlKHtmaWxsOmEucmdiKHIuYXJyb3djb2xvciksInN0cm9rZS13aWR0aCI6MH0pKX1nJiZPKGYsbyxsLGQpLHYmJk8oaCxzLGMscCl9fSx7Ii4uL2NvbG9yIjo1OTIsIi4vYXJyb3dfcGF0aHMiOjU3NCxkMzoxNjV9XSw1ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9kcmF3IiksYT10KCIuL2NsaWNrIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImFubm90YXRpb25zIixsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxpbmNsdWRlQmFzZVBsb3Q6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2luY2x1ZGVfY29tcG9uZW50cyIpKCJhbm5vdGF0aW9ucyIpLGNhbGNBdXRvcmFuZ2U6dCgiLi9jYWxjX2F1dG9yYW5nZSIpLGRyYXc6bi5kcmF3LGRyYXdPbmU6bi5kcmF3T25lLGRyYXdSYXc6bi5kcmF3UmF3LGhhc0NsaWNrVG9TaG93OmEuaGFzQ2xpY2tUb1Nob3csb25DbGljazphLm9uQ2xpY2ssY29udmVydENvb3Jkczp0KCIuL2NvbnZlcnRfY29vcmRzIil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiOjc3NSwiLi9hdHRyaWJ1dGVzIjo1NzUsIi4vY2FsY19hdXRvcmFuZ2UiOjU3NiwiLi9jbGljayI6NTc3LCIuL2NvbnZlcnRfY29vcmRzIjo1NzksIi4vZGVmYXVsdHMiOjU4MCwiLi9kcmF3Ijo1ODF9XSw1ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz1hKGkoImFubm90YXRpb24iLHt2aXNpYmxlOm4udmlzaWJsZSx4Ont2YWxUeXBlOiJhbnkifSx5Ont2YWxUeXBlOiJhbnkifSx6Ont2YWxUeXBlOiJhbnkifSxheDp7dmFsVHlwZToibnVtYmVyIn0sYXk6e3ZhbFR5cGU6Im51bWJlciJ9LHhhbmNob3I6bi54YW5jaG9yLHhzaGlmdDpuLnhzaGlmdCx5YW5jaG9yOm4ueWFuY2hvcix5c2hpZnQ6bi55c2hpZnQsdGV4dDpuLnRleHQsdGV4dGFuZ2xlOm4udGV4dGFuZ2xlLGZvbnQ6bi5mb250LHdpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0LG9wYWNpdHk6bi5vcGFjaXR5LGFsaWduOm4uYWxpZ24sdmFsaWduOm4udmFsaWduLGJnY29sb3I6bi5iZ2NvbG9yLGJvcmRlcmNvbG9yOm4uYm9yZGVyY29sb3IsYm9yZGVycGFkOm4uYm9yZGVycGFkLGJvcmRlcndpZHRoOm4uYm9yZGVyd2lkdGgsc2hvd2Fycm93Om4uc2hvd2Fycm93LGFycm93Y29sb3I6bi5hcnJvd2NvbG9yLGFycm93aGVhZDpuLmFycm93aGVhZCxzdGFydGFycm93aGVhZDpuLnN0YXJ0YXJyb3doZWFkLGFycm93c2lkZTpuLmFycm93c2lkZSxhcnJvd3NpemU6bi5hcnJvd3NpemUsc3RhcnRhcnJvd3NpemU6bi5zdGFydGFycm93c2l6ZSxhcnJvd3dpZHRoOm4uYXJyb3d3aWR0aCxzdGFuZG9mZjpuLnN0YW5kb2ZmLHN0YXJ0c3RhbmRvZmY6bi5zdGFydHN0YW5kb2ZmLGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcmxhYmVsOm4uaG92ZXJsYWJlbCxjYXB0dXJlZXZlbnRzOm4uY2FwdHVyZWV2ZW50c30pLCJjYWxjIiwiZnJvbS1yb290Iil9LHsiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzQ4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3NTUsIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiOjU3NX1dLDU4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZnVuY3Rpb24gaSh0LGUpe3ZhciByPWUuZnVsbFNjZW5lTGF5b3V0LmRvbWFpbixpPWUuZnVsbExheW91dC5fc2l6ZSxvPXtwZGF0YTpudWxsLHR5cGU6ImxpbmVhciIsYXV0b3JhbmdlOiExLHJhbmdlOlstMS8wLDEvMF19O3QuX3hhPXt9LG4uZXh0ZW5kRmxhdCh0Ll94YSxvKSxhLnNldENvbnZlcnQodC5feGEpLHQuX3hhLl9vZmZzZXQ9aS5sK3IueFswXSppLncsdC5feGEubDJwPWZ1bmN0aW9uKCl7cmV0dXJuLjUqKDErdC5fcGRhdGFbMF0vdC5fcGRhdGFbM10pKmkudyooci54WzFdLXIueFswXSl9LHQuX3lhPXt9LG4uZXh0ZW5kRmxhdCh0Ll95YSxvKSxhLnNldENvbnZlcnQodC5feWEpLHQuX3lhLl9vZmZzZXQ9aS50KygxLXIueVsxXSkqaS5oLHQuX3lhLmwycD1mdW5jdGlvbigpe3JldHVybi41KigxLXQuX3BkYXRhWzFdL3QuX3BkYXRhWzNdKSppLmgqKHIueVsxXS1yLnlbMF0pfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZnVsbFNjZW5lTGF5b3V0LmFubm90YXRpb25zLHI9MDtyPGUubGVuZ3RoO3IrKylpKGVbcl0sdCk7dC5mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi0iK3QuaWQpLnJlbW92ZSgpfX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NX1dLDU4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4uL2Fubm90YXRpb25zL2NvbW1vbl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbCh0LGUscixpKXtmdW5jdGlvbiBsKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsYSl9ZnVuY3Rpb24gYyh0KXt2YXIgbj10KyJheGlzIixpPXtfZnVsbExheW91dDp7fX07cmV0dXJuIGkuX2Z1bGxMYXlvdXRbbl09cltuXSxhLmNvZXJjZVBvc2l0aW9uKGUsaSxsLHQsdCwuNSl9bCgidmlzaWJsZSIpJiYobyh0LGUsaS5mdWxsTGF5b3V0LGwpLGMoIngiKSxjKCJ5IiksYygieiIpLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5IiwieiJdKSxlLnhyZWY9IngiLGUueXJlZj0ieSIsZS56cmVmPSJ6IixsKCJ4YW5jaG9yIiksbCgieWFuY2hvciIpLGwoInhzaGlmdCIpLGwoInlzaGlmdCIpLGUuc2hvd2Fycm93JiYoZS5heHJlZj0icGl4ZWwiLGUuYXlyZWY9InBpeGVsIixsKCJheCIsLTEwKSxsKCJheSIsLTMwKSxuLm5vbmVPckFsbCh0LGUsWyJheCIsImF5Il0pKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpKHQsZSx7bmFtZToiYW5ub3RhdGlvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpsLGZ1bGxMYXlvdXQ6ci5mdWxsTGF5b3V0fSl9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc2MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi4vYW5ub3RhdGlvbnMvY29tbW9uX2RlZmF1bHRzIjo1NzgsIi4vYXR0cmlidXRlcyI6NTg0fV0sNTg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Fubm90YXRpb25zL2RyYXciKS5kcmF3UmF3LGE9dCgiLi4vLi4vcGxvdHMvZ2wzZC9wcm9qZWN0IiksaT1bIngiLCJ5IiwieiJdO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5mdWxsU2NlbmVMYXlvdXQscj10LmRhdGFTY2FsZSxvPWUuYW5ub3RhdGlvbnMscz0wO3M8by5sZW5ndGg7cysrKXtmb3IodmFyIGw9b1tzXSxjPSExLHU9MDt1PDM7dSsrKXt2YXIgaD1pW3VdLGY9bFtoXSxwPWVbaCsiYXhpcyJdLnIyZnJhY3Rpb24oZik7aWYocDwwfHxwPjEpe2M9ITA7YnJlYWt9fWM/dC5mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi0iK3QuaWQrJ1tkYXRhLWluZGV4PSInK3MrJyJdJykucmVtb3ZlKCk6KGwuX3BkYXRhPWEodC5nbHBsb3QuY2FtZXJhUGFyYW1zLFtlLnhheGlzLnIybChsLngpKnJbMF0sZS55YXhpcy5yMmwobC55KSpyWzFdLGUuemF4aXMucjJsKGwueikqclsyXV0pLG4odC5ncmFwaERpdixsLHMsdC5pZCxsLl94YSxsLl95YSkpfX19LHsiLi4vLi4vcGxvdHMvZ2wzZC9wcm9qZWN0Ijo4MTQsIi4uL2Fubm90YXRpb25zL2RyYXciOjU4MX1dLDU4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImFubm90YXRpb25zM2QiLHNjaGVtYTp7c3VicGxvdHM6e3NjZW5lOnthbm5vdGF0aW9uczp0KCIuL2F0dHJpYnV0ZXMiKX19fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxpbmNsdWRlQmFzZVBsb3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj1uLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZDtpZighcilyZXR1cm47Zm9yKHZhciBpPXIuYXR0clJlZ2V4LG89T2JqZWN0LmtleXModCkscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2kudGVzdChsKSYmKHRbbF0uYW5ub3RhdGlvbnN8fFtdKS5sZW5ndGgmJihhLnB1c2hVbmlxdWUoZS5fYmFzZVBsb3RNb2R1bGVzLHIpLGEucHVzaFVuaXF1ZShlLl9zdWJwbG90cy5nbDNkLGwpKX19LGNvbnZlcnQ6dCgiLi9jb252ZXJ0IiksZHJhdzp0KCIuL2RyYXciKX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4vYXR0cmlidXRlcyI6NTg0LCIuL2NvbnZlcnQiOjU4NSwiLi9kZWZhdWx0cyI6NTg2LCIuL2RyYXciOjU4N31dLDU4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvbWFpbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L3BsdXMiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY2hpbmVzZSIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jb3B0aWMiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZGlzY3dvcmxkIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2V0aGlvcGlhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9oZWJyZXciKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaXNsYW1pYyIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9qdWxpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbWF5YW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmFuYWtzaGFoaSIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uZXBhbGkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvcGVyc2lhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90YWl3YW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGhhaSIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy91bW1hbHF1cmEiKX0seyJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY2hpbmVzZSI6NTU2LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY29wdGljIjo1NTcsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9kaXNjd29ybGQiOjU1OCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2V0aGlvcGlhbiI6NTU5LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaGVicmV3Ijo1NjAsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9pc2xhbWljIjo1NjEsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9qdWxpYW4iOjU2Miwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL21heWFuIjo1NjMsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uYW5ha3NoYWhpIjo1NjQsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uZXBhbGkiOjU2NSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3BlcnNpYW4iOjU2Niwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RhaXdhbiI6NTY3LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGhhaSI6NTY4LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdW1tYWxxdXJhIjo1NjksIndvcmxkLWNhbGVuZGFycy9kaXN0L21haW4iOjU3MCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvcGx1cyI6NTcxfV0sNTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY2FsZW5kYXJzIiksYT10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxvPWkuRVBPQ0hKRCxzPWkuT05FREFZLGw9e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhuLmNhbGVuZGFycyksZWRpdFR5cGU6ImNhbGMiLGRmbHQ6ImdyZWdvcmlhbiJ9LGM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9e307cmV0dXJuIGlbcl09bCxhLmNvZXJjZSh0LGUsaSxyLG4pfSx1PSIjIyIsaD17ZDp7MDoiZGQiLCItIjoiZCJ9LGU6ezA6ImQiLCItIjoiZCJ9LGE6ezA6IkQiLCItIjoiRCJ9LEE6ezA6IkREIiwiLSI6IkREIn0sajp7MDoib28iLCItIjoibyJ9LFc6ezA6Ind3IiwiLSI6IncifSxtOnswOiJtbSIsIi0iOiJtIn0sYjp7MDoiTSIsIi0iOiJNIn0sQjp7MDoiTU0iLCItIjoiTU0ifSx5OnswOiJ5eSIsIi0iOiJ5eSJ9LFk6ezA6Inl5eXkiLCItIjoieXl5eSJ9LFU6dSx3OnUsYzp7MDoiRCBNIGQgJVggeXl5eSIsIi0iOiJEIE0gZCAlWCB5eXl5In0seDp7MDoibW0vZGQveXl5eSIsIi0iOiJtbS9kZC95eXl5In19O3ZhciBmPXt9O2Z1bmN0aW9uIHAodCl7dmFyIGU9Zlt0XTtyZXR1cm4gZXx8KGU9Zlt0XT1uLmluc3RhbmNlKHQpKX1mdW5jdGlvbiBkKHQpe3JldHVybiBhLmV4dGVuZEZsYXQoe30sbCx7ZGVzY3JpcHRpb246dH0pfWZ1bmN0aW9uIGcodCl7cmV0dXJuIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2Ugd2l0aCBgIit0KyJgIGRhdGUgZGF0YS4ifXZhciB2PXt4Y2FsZW5kYXI6ZChnKCJ4IikpfSxtPWEuZXh0ZW5kRmxhdCh7fSx2LHt5Y2FsZW5kYXI6ZChnKCJ5IikpfSkseT1hLmV4dGVuZEZsYXQoe30sbSx7emNhbGVuZGFyOmQoZygieiIpKX0pLHg9ZChbIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGByYW5nZWAgYW5kIGB0aWNrMGAiLCJpZiB0aGlzIGlzIGEgZGF0ZSBheGlzLiBUaGlzIGRvZXMgbm90IHNldCB0aGUgY2FsZW5kYXIgZm9yIiwiaW50ZXJwcmV0aW5nIGRhdGEgb24gdGhpcyBheGlzLCB0aGF0J3Mgc3BlY2lmaWVkIGluIHRoZSB0cmFjZSIsIm9yIHZpYSB0aGUgZ2xvYmFsIGBsYXlvdXQuY2FsZW5kYXJgIl0uam9pbigiICIpKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiY2FsZW5kYXJzIixzY2hlbWE6e3RyYWNlczp7c2NhdHRlcjptLGJhcjptLGJveDptLGhlYXRtYXA6bSxjb250b3VyOm0saGlzdG9ncmFtOm0saGlzdG9ncmFtMmQ6bSxoaXN0b2dyYW0yZGNvbnRvdXI6bSxzY2F0dGVyM2Q6eSxzdXJmYWNlOnksbWVzaDNkOnksc2NhdHRlcmdsOm0sb2hsYzp2LGNhbmRsZXN0aWNrOnZ9LGxheW91dDp7Y2FsZW5kYXI6ZChbIlNldHMgdGhlIGRlZmF1bHQgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgaW50ZXJwcmV0aW5nIGFuZCIsImRpc3BsYXlpbmcgZGF0ZXMgdGhyb3VnaG91dCB0aGUgcGxvdC4iXS5qb2luKCIgIikpfSxzdWJwbG90czp7eGF4aXM6e2NhbGVuZGFyOnh9LHlheGlzOntjYWxlbmRhcjp4fSxzY2VuZTp7eGF4aXM6e2NhbGVuZGFyOnh9LHlheGlzOntjYWxlbmRhcjp4fSx6YXhpczp7Y2FsZW5kYXI6eH19LHBvbGFyOntyYWRpYWxheGlzOntjYWxlbmRhcjp4fX19LHRyYW5zZm9ybXM6e2ZpbHRlcjp7dmFsdWVjYWxlbmRhcjpkKFsiU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgYHZhbHVlYCwgaWYgaXQgaXMgYSBkYXRlLiJdLmpvaW4oIiAiKSksdGFyZ2V0Y2FsZW5kYXI6ZChbIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGB0YXJnZXRgLCBpZiBpdCBpcyBhbiIsImFycmF5IG9mIGRhdGVzLiBJZiBgdGFyZ2V0YCBpcyBhIHN0cmluZyAoZWcgKngqKSB3ZSB1c2UgdGhlIiwiY29ycmVzcG9uZGluZyB0cmFjZSBhdHRyaWJ1dGUgKGVnIGB4Y2FsZW5kYXJgKSBpZiBpdCBleGlzdHMsIiwiZXZlbiBpZiBgdGFyZ2V0Y2FsZW5kYXJgIGlzIHByb3ZpZGVkLiJdLmpvaW4oIiAiKSl9fX0sbGF5b3V0QXR0cmlidXRlczpsLGhhbmRsZURlZmF1bHRzOmMsaGFuZGxlVHJhY2VEZWZhdWx0czpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKyljKHQsZSxyW2FdKyJjYWxlbmRhciIsbi5jYWxlbmRhcil9LENBTk9OSUNBTF9TVU5EQVk6e2NoaW5lc2U6IjIwMDAtMDEtMDIiLGNvcHRpYzoiMjAwMC0wMS0wMyIsZGlzY3dvcmxkOiIyMDAwLTAxLTAzIixldGhpb3BpYW46IjIwMDAtMDEtMDUiLGhlYnJldzoiNTAwMC0wMS0wMSIsaXNsYW1pYzoiMTAwMC0wMS0wMiIsanVsaWFuOiIyMDAwLTAxLTAzIixtYXlhbjoiNTAwMC0wMS0wMSIsbmFuYWtzaGFoaToiMTAwMC0wMS0wNSIsbmVwYWxpOiIyMDAwLTAxLTA1IixwZXJzaWFuOiIxMDAwLTAxLTAxIixqYWxhbGk6IjEwMDAtMDEtMDEiLHRhaXdhbjoiMTAwMC0wMS0wNCIsdGhhaToiMjAwMC0wMS0wNCIsdW1tYWxxdXJhOiIxNDAwLTAxLTA2In0sQ0FOT05JQ0FMX1RJQ0s6e2NoaW5lc2U6IjIwMDAtMDEtMDEiLGNvcHRpYzoiMjAwMC0wMS0wMSIsZGlzY3dvcmxkOiIyMDAwLTAxLTAxIixldGhpb3BpYW46IjIwMDAtMDEtMDEiLGhlYnJldzoiNTAwMC0wMS0wMSIsaXNsYW1pYzoiMTAwMC0wMS0wMSIsanVsaWFuOiIyMDAwLTAxLTAxIixtYXlhbjoiNTAwMC0wMS0wMSIsbmFuYWtzaGFoaToiMTAwMC0wMS0wMSIsbmVwYWxpOiIyMDAwLTAxLTAxIixwZXJzaWFuOiIxMDAwLTAxLTAxIixqYWxhbGk6IjEwMDAtMDEtMDEiLHRhaXdhbjoiMTAwMC0wMS0wMSIsdGhhaToiMjAwMC0wMS0wMSIsdW1tYWxxdXJhOiIxNDAwLTAxLTAxIn0sREZMVFJBTkdFOntjaGluZXNlOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXSxjb3B0aWM6WyIxNzAwLTAxLTAxIiwiMTcwMS0wMS0wMSJdLGRpc2N3b3JsZDpbIjE4MDAtMDEtMDEiLCIxODAxLTAxLTAxIl0sZXRoaW9waWFuOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXSxoZWJyZXc6WyI1NzAwLTAxLTAxIiwiNTcwMS0wMS0wMSJdLGlzbGFtaWM6WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdLGp1bGlhbjpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0sbWF5YW46WyI1MjAwLTAxLTAxIiwiNTIwMS0wMS0wMSJdLG5hbmFrc2hhaGk6WyIwNTAwLTAxLTAxIiwiMDUwMS0wMS0wMSJdLG5lcGFsaTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0scGVyc2lhbjpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl0samFsYWxpOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXSx0YWl3YW46WyIwMTAwLTAxLTAxIiwiMDEwMS0wMS0wMSJdLHRoYWk6WyIyNTAwLTAxLTAxIiwiMjUwMS0wMS0wMSJdLHVtbWFscXVyYTpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl19LGdldENhbDpwLHdvcmxkQ2FsRm10OmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4sYSxpLGwsYyxmPU1hdGguZmxvb3IoKGUrLjA1KS9zKStvLGQ9cChyKS5mcm9tSkQoZiksZz0wOy0xIT09KGc9dC5pbmRleE9mKCIlIixnKSk7KSIwIj09PShuPXQuY2hhckF0KGcrMSkpfHwiLSI9PT1ufHwiXyI9PT1uPyhpPTMsYT10LmNoYXJBdChnKzIpLCJfIj09PW4mJihuPSItIikpOihhPW4sbj0iMCIsaT0yKSwobD1oW2FdKT8oYz1sPT09dT91OmQuZm9ybWF0RGF0ZShsW25dKSx0PXQuc3Vic3RyKDAsZykrYyt0LnN1YnN0cihnK2kpLGcrPWMubGVuZ3RoKTpnKz1pO3JldHVybiB0fX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzLCIuLi8uLi9saWIiOjcxNywiLi9jYWxlbmRhcnMiOjU4OX1dLDU5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmRlZmF1bHRzPVsiIzFmNzdiNCIsIiNmZjdmMGUiLCIjMmNhMDJjIiwiI2Q2MjcyOCIsIiM5NDY3YmQiLCIjOGM1NjRiIiwiI2UzNzdjMiIsIiM3ZjdmN2YiLCIjYmNiZDIyIiwiIzE3YmVjZiJdLHIuZGVmYXVsdExpbmU9IiM0NDQiLHIubGlnaHRMaW5lPSIjZWVlIixyLmJhY2tncm91bmQ9IiNmZmYiLHIuYm9yZGVyTGluZT0iI0JFQzhEOSIsci5saWdodEZyYWN0aW9uPTFlMy8xMX0se31dLDU5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIiksYT10KCJmYXN0LWlzbnVtZXJpYyIpLGk9ZS5leHBvcnRzPXt9LG89dCgiLi9hdHRyaWJ1dGVzIik7aS5kZWZhdWx0cz1vLmRlZmF1bHRzO3ZhciBzPWkuZGVmYXVsdExpbmU9by5kZWZhdWx0TGluZTtpLmxpZ2h0TGluZT1vLmxpZ2h0TGluZTt2YXIgbD1pLmJhY2tncm91bmQ9by5iYWNrZ3JvdW5kO2Z1bmN0aW9uIGModCl7aWYoYSh0KXx8InN0cmluZyIhPXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPXQudHJpbSgpO2lmKCJyZ2IiIT09ZS5zdWJzdHIoMCwzKSlyZXR1cm4gdDt2YXIgcj1lLm1hdGNoKC9ecmdiYT9ccypcKChbXigpXSopXCkkLyk7aWYoIXIpcmV0dXJuIHQ7dmFyIG49clsxXS50cmltKCkuc3BsaXQoL1xzKltccyxdXHMqLyksaT0iYSI9PT1lLmNoYXJBdCgzKSYmND09PW4ubGVuZ3RoO2lmKCFpJiYzIT09bi5sZW5ndGgpcmV0dXJuIHQ7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspe2lmKCFuW29dLmxlbmd0aClyZXR1cm4gdDtpZihuW29dPU51bWJlcihuW29dKSwhKG5bb10+PTApKXJldHVybiB0O2lmKDM9PT1vKW5bb10+MSYmKG5bb109MSk7ZWxzZSBpZihuW29dPj0xKXJldHVybiB0fXZhciBzPU1hdGgucm91bmQoMjU1Km5bMF0pKyIsICIrTWF0aC5yb3VuZCgyNTUqblsxXSkrIiwgIitNYXRoLnJvdW5kKDI1NSpuWzJdKTtyZXR1cm4gaT8icmdiYSgiK3MrIiwgIituWzNdKyIpIjoicmdiKCIrcysiKSJ9aS50aW55UkdCPWZ1bmN0aW9uKHQpe3ZhciBlPXQudG9SZ2IoKTtyZXR1cm4icmdiKCIrTWF0aC5yb3VuZChlLnIpKyIsICIrTWF0aC5yb3VuZChlLmcpKyIsICIrTWF0aC5yb3VuZChlLmIpKyIpIn0saS5yZ2I9ZnVuY3Rpb24odCl7cmV0dXJuIGkudGlueVJHQihuKHQpKX0saS5vcGFjaXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0P24odCkuZ2V0QWxwaGEoKTowfSxpLmFkZE9wYWNpdHk9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQpLnRvUmdiKCk7cmV0dXJuInJnYmEoIitNYXRoLnJvdW5kKHIucikrIiwgIitNYXRoLnJvdW5kKHIuZykrIiwgIitNYXRoLnJvdW5kKHIuYikrIiwgIitlKyIpIn0saS5jb21iaW5lPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0KS50b1JnYigpO2lmKDE9PT1yLmEpcmV0dXJuIG4odCkudG9SZ2JTdHJpbmcoKTt2YXIgYT1uKGV8fGwpLnRvUmdiKCksaT0xPT09YS5hP2E6e3I6MjU1KigxLWEuYSkrYS5yKmEuYSxnOjI1NSooMS1hLmEpK2EuZyphLmEsYjoyNTUqKDEtYS5hKSthLmIqYS5hfSxvPXtyOmkuciooMS1yLmEpK3IucipyLmEsZzppLmcqKDEtci5hKStyLmcqci5hLGI6aS5iKigxLXIuYSkrci5iKnIuYX07cmV0dXJuIG4obykudG9SZ2JTdHJpbmcoKX0saS5jb250cmFzdD1mdW5jdGlvbih0LGUscil7dmFyIGE9bih0KTtyZXR1cm4gMSE9PWEuZ2V0QWxwaGEoKSYmKGE9bihpLmNvbWJpbmUodCxsKSkpLChhLmlzRGFyaygpP2U/YS5saWdodGVuKGUpOmw6cj9hLmRhcmtlbihyKTpzKS50b1N0cmluZygpfSxpLnN0cm9rZT1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSk7dC5zdHlsZSh7c3Ryb2tlOmkudGlueVJHQihyKSwic3Ryb2tlLW9wYWNpdHkiOnIuZ2V0QWxwaGEoKX0pfSxpLmZpbGw9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUpO3Quc3R5bGUoe2ZpbGw6aS50aW55UkdCKHIpLCJmaWxsLW9wYWNpdHkiOnIuZ2V0QWxwaGEoKX0pfSxpLmNsZWFuPWZ1bmN0aW9uKHQpe2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdCl7dmFyIGUscixuLGEsbz1PYmplY3Qua2V5cyh0KTtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKWlmKGE9dFtuPW9bZV1dLCJjb2xvciI9PT1uLnN1YnN0cihuLmxlbmd0aC01KSlpZihBcnJheS5pc0FycmF5KGEpKWZvcihyPTA7cjxhLmxlbmd0aDtyKyspYVtyXT1jKGFbcl0pO2Vsc2UgdFtuXT1jKGEpO2Vsc2UgaWYoImNvbG9yc2NhbGUiPT09bi5zdWJzdHIobi5sZW5ndGgtMTApJiZBcnJheS5pc0FycmF5KGEpKWZvcihyPTA7cjxhLmxlbmd0aDtyKyspQXJyYXkuaXNBcnJheShhW3JdKSYmKGFbcl1bMV09YyhhW3JdWzFdKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGEpKXt2YXIgcz1hWzBdO2lmKCFBcnJheS5pc0FycmF5KHMpJiZzJiYib2JqZWN0Ij09dHlwZW9mIHMpZm9yKHI9MDtyPGEubGVuZ3RoO3IrKylpLmNsZWFuKGFbcl0pfWVsc2UgYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZpLmNsZWFuKGEpfX19LHsiLi9hdHRyaWJ1dGVzIjo1OTEsImZhc3QtaXNudW1lcmljIjoyMjgsdGlueWNvbG9yMjo1MzZ9XSw1OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsO2UuZXhwb3J0cz1vKHt0aGlja25lc3Ntb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmFjdGlvbiIsInBpeGVscyJdLGRmbHQ6InBpeGVscyJ9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjMwfSxsZW5tb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmFjdGlvbiIsInBpeGVscyJdLGRmbHQ6ImZyYWN0aW9uIn0sbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0seDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEuMDIsbWluOi0yLG1heDozfSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0In0seHBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSx5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6LjUsbWluOi0yLG1heDozfSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJtaWRkbGUifSx5cGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTB9LG91dGxpbmVjb2xvcjpuLmxpbmVjb2xvcixvdXRsaW5ld2lkdGg6bi5saW5ld2lkdGgsYm9yZGVyY29sb3I6bi5saW5lY29sb3IsYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowfSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSJ9LHRpY2ttb2RlOm4udGlja21vZGUsbnRpY2tzOm4ubnRpY2tzLHRpY2swOm4udGljazAsZHRpY2s6bi5kdGljayx0aWNrdmFsczpuLnRpY2t2YWxzLHRpY2t0ZXh0Om4udGlja3RleHQsdGlja3M6aSh7fSxuLnRpY2tzLHtkZmx0OiIifSksdGlja2xlbjpuLnRpY2tsZW4sdGlja3dpZHRoOm4udGlja3dpZHRoLHRpY2tjb2xvcjpuLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczpuLnNob3d0aWNrbGFiZWxzLHRpY2tmb250OmEoe30pLHRpY2thbmdsZTpuLnRpY2thbmdsZSx0aWNrZm9ybWF0Om4udGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6bi50aWNrZm9ybWF0c3RvcHMsdGlja3ByZWZpeDpuLnRpY2twcmVmaXgsc2hvd3RpY2twcmVmaXg6bi5zaG93dGlja3ByZWZpeCx0aWNrc3VmZml4Om4udGlja3N1ZmZpeCxzaG93dGlja3N1ZmZpeDpuLnNob3d0aWNrc3VmZml4LHNlcGFyYXRldGhvdXNhbmRzOm4uc2VwYXJhdGV0aG91c2FuZHMsZXhwb25lbnRmb3JtYXQ6bi5leHBvbmVudGZvcm1hdCxzaG93ZXhwb25lbnQ6bi5zaG93ZXhwb25lbnQsdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyJ9LGZvbnQ6YSh7fSksc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmlnaHQiLCJ0b3AiLCJib3R0b20iXSxkZmx0OiJ0b3AifX0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOiJzdHJpbmcifSx0aXRsZWZvbnQ6YSh7fSksdGl0bGVzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyaWdodCIsInRvcCIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9fX0sImNvbG9yYmFycyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzQ4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3NywiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3OTF9XSw1OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjbjp7Y29sb3JiYXI6ImNvbG9yYmFyIixjYmJnOiJjYmJnIixjYmZpbGw6ImNiZmlsbCIsY2JmaWxsczoiY2JmaWxscyIsY2JsaW5lOiJjYmxpbmUiLGNibGluZXM6ImNibGluZXMiLGNiYXhpczoiY2JheGlzIixjYnRpdGxldW5zaGlmdDoiY2J0aXRsZXVuc2hpZnQiLGNidGl0bGU6ImNidGl0bGUiLGNib3V0bGluZToiY2JvdXRsaW5lIixjcmlzcDoiY3Jpc3AiLGpzUGxhY2Vob2xkZXI6ImpzLXBsYWNlaG9sZGVyIn19fSx7fV0sNTk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBjPWEubmV3Q29udGFpbmVyKGUsImNvbG9yYmFyIiksdT10LmNvbG9yYmFyfHx7fTtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIG4uY29lcmNlKHUsYyxsLHQsZSl9dmFyIGY9aCgidGhpY2tuZXNzbW9kZSIpO2goInRoaWNrbmVzcyIsImZyYWN0aW9uIj09PWY/MzAvKHIud2lkdGgtci5tYXJnaW4ubC1yLm1hcmdpbi5yKTozMCk7dmFyIHA9aCgibGVubW9kZSIpO2goImxlbiIsImZyYWN0aW9uIj09PXA/MTpyLmhlaWdodC1yLm1hcmdpbi50LXIubWFyZ2luLmIpLGgoIngiKSxoKCJ4YW5jaG9yIiksaCgieHBhZCIpLGgoInkiKSxoKCJ5YW5jaG9yIiksaCgieXBhZCIpLG4ubm9uZU9yQWxsKHUsYyxbIngiLCJ5Il0pLGgoIm91dGxpbmVjb2xvciIpLGgoIm91dGxpbmV3aWR0aCIpLGgoImJvcmRlcmNvbG9yIiksaCgiYm9yZGVyd2lkdGgiKSxoKCJiZ2NvbG9yIiksaSh1LGMsaCwibGluZWFyIik7dmFyIGQ9e291dGVyVGlja3M6ITEsZm9udDpyLmZvbnR9O3ModSxjLGgsImxpbmVhciIsZCksbyh1LGMsaCwibGluZWFyIixkKSxoKCJ0aXRsZS50ZXh0IixyLl9kZmx0VGl0bGUuY29sb3JiYXIpLG4uY29lcmNlRm9udChoLCJ0aXRsZS5mb250IixyLmZvbnQpLGgoInRpdGxlLnNpZGUiKX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc1NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc4NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6Nzg1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6Nzg2LCIuL2F0dHJpYnV0ZXMiOjU5M31dLDU5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgidGlueWNvbG9yMiIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vZHJhZ2VsZW1lbnQiKSxjPXQoIi4uLy4uL2xpYiIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksZj10KCIuLi9kcmF3aW5nIikscD10KCIuLi9jb2xvciIpLGQ9dCgiLi4vdGl0bGVzIiksZz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx2PXQoIi4uL2NvbG9yc2NhbGUvaGVscGVycyIpLmZsaXBTY2FsZSxtPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIikseT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiKSx4PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGI9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLF89Yi5MSU5FX1NQQUNJTkcsdz1iLkZST01fVEwsaz1iLkZST01fQlIsVD10KCIuL2NvbnN0YW50cyIpLmNuO2UuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLiIrVC5jb2xvcmJhcikuZGF0YShmdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxpPXQuX2Z1bGxMYXlvdXQsbz10LmNhbGNkYXRhLHM9W107ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdSh0LHtfZmlsbGNvbG9yOm51bGwsX2xpbmU6e2NvbG9yOm51bGwsd2lkdGg6bnVsbCxkYXNoOm51bGx9LF9sZXZlbHM6e3N0YXJ0Om51bGwsZW5kOm51bGwsc2l6ZTpudWxsfSxfZmlsbGxldmVsczpudWxsLF9maWxsZ3JhZGllbnQ6bnVsbCxfenJhbmdlOm51bGx9KX1mdW5jdGlvbiBjKCl7ImZ1bmN0aW9uIj09dHlwZW9mIGEuY2FsYz9hLmNhbGModCxuLGUpOihlLl9maWxsZ3JhZGllbnQ9ci5yZXZlcnNlc2NhbGU/dihyLmNvbG9yc2NhbGUpOnIuY29sb3JzY2FsZSxlLl96cmFuZ2U9W3JbYS5taW5dLHJbYS5tYXhdXSl9Zm9yKHZhciBoPTA7aDxvLmxlbmd0aDtoKyspe3ZhciBmPW9baF0scD0obj1mWzBdLnRyYWNlKS5fbW9kdWxlLmNvbG9yYmFyO2lmKCEwPT09bi52aXNpYmxlJiZwKWZvcih2YXIgZD1BcnJheS5pc0FycmF5KHApLGc9ZD9wOltwXSxtPTA7bTxnLmxlbmd0aDttKyspe3ZhciB5PShhPWdbbV0pLmNvbnRhaW5lcjsocj15P25beV06bikmJnIuc2hvd3NjYWxlJiYoKGU9bChyLmNvbG9yYmFyKSkuX2lkPSJjYiIrbi51aWQrKGQmJnk/Ii0iK3k6IiIpLGUuX3RyYWNlSW5kZXg9bi5pbmRleCxlLl9wcm9wUHJlZml4PSh5P3krIi4iOiIiKSsiY29sb3JiYXIuIixlLl9tZXRhPW4uX21ldGEsYygpLHMucHVzaChlKSl9fWZvcih2YXIgeCBpbiBpLl9jb2xvckF4ZXMpaWYoKHI9aVt4XSkuc2hvd3NjYWxlKXt2YXIgYj1pLl9jb2xvckF4ZXNbeF07KGU9bChyLmNvbG9yYmFyKSkuX2lkPSJjYiIreCxlLl9wcm9wUHJlZml4PXgrIi5jb2xvcmJhci4iLGUuX21ldGE9aS5fbWV0YSxhPXttaW46ImNtaW4iLG1heDoiY21heCJ9LCJoZWF0bWFwIiE9PWJbMF0mJihuPWJbMV0sYS5jYWxjPW4uX21vZHVsZS5jb2xvcmJhci5jYWxjKSxjKCkscy5wdXNoKGUpfXJldHVybiBzfSh0KSxmdW5jdGlvbih0KXtyZXR1cm4gdC5faWR9KTtlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9pZH0pLmNsYXNzZWQoVC5jb2xvcmJhciwhMCksZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2MuZW5zdXJlU2luZ2xlKHIsInJlY3QiLFQuY2JiZyksYy5lbnN1cmVTaW5nbGUociwiZyIsVC5jYmZpbGxzKSxjLmVuc3VyZVNpbmdsZShyLCJnIixULmNibGluZXMpLGMuZW5zdXJlU2luZ2xlKHIsImciLFQuY2JheGlzLGZ1bmN0aW9uKHQpe3QuY2xhc3NlZChULmNyaXNwLCEwKX0pLGMuZW5zdXJlU2luZ2xlKHIsImciLFQuY2J0aXRsZXVuc2hpZnQsZnVuY3Rpb24odCl7dC5hcHBlbmQoImciKS5jbGFzc2VkKFQuY2J0aXRsZSwhMCl9KSxjLmVuc3VyZVNpbmdsZShyLCJyZWN0IixULmNib3V0bGluZSk7dmFyIHY9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXIuX2Z1bGxMYXlvdXQsbD1vLl9zaXplLGg9ZS5fZmlsbGNvbG9yLHY9ZS5fbGluZSxiPWUudGl0bGUsTT1iLnNpZGUsQT1lLl96cmFuZ2V8fG4uZXh0ZW50KCgiZnVuY3Rpb24iPT10eXBlb2YgaD9oOnYuY29sb3IpLmRvbWFpbigpKSxTPSJmdW5jdGlvbiI9PXR5cGVvZiB2LmNvbG9yP3YuY29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdi5jb2xvcn0sRT0iZnVuY3Rpb24iPT10eXBlb2YgaD9oOmZ1bmN0aW9uKCl7cmV0dXJuIGh9LEw9ZS5fbGV2ZWxzLEM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsaT1lLl9sZXZlbHMsbz1bXSxzPVtdLGw9aS5lbmQraS5zaXplLzEwMCxjPWkuc2l6ZSx1PTEuMDAxKnJbMF0tLjAwMSpyWzFdLGg9MS4wMDEqclsxXS0uMDAxKnJbMF07Zm9yKGE9MDthPDFlNSYmKG49aS5zdGFydCthKmMsIShjPjA/bj49bDpuPD1sKSk7YSsrKW4+dSYmbjxoJiZvLnB1c2gobik7aWYoZS5fZmlsbGdyYWRpZW50KXM9WzBdO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuX2ZpbGxjb2xvcil7dmFyIGY9ZS5fZmlsbGxldmVscztpZihmKWZvcihsPWYuZW5kK2Yuc2l6ZS8xMDAsYz1mLnNpemUsYT0wO2E8MWU1JiYobj1mLnN0YXJ0K2EqYywhKGM+MD9uPj1sOm48PWwpKTthKyspbj5yWzBdJiZuPHJbMV0mJnMucHVzaChuKTtlbHNlKHM9by5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQtaS5zaXplLzJ9KSkucHVzaChzW3MubGVuZ3RoLTFdK2kuc2l6ZSl9ZWxzZSBlLl9maWxsY29sb3ImJiJzdHJpbmciPT10eXBlb2YgZS5fZmlsbGNvbG9yJiYocz1bMF0pO3JldHVybiBpLnNpemU8MCYmKG8ucmV2ZXJzZSgpLHMucmV2ZXJzZSgpKSx7bGluZTpvLGZpbGw6c319KDAsZSxBKSxQPUMuZmlsbCxPPUMubGluZSx6PU1hdGgucm91bmQoZS50aGlja25lc3MqKCJmcmFjdGlvbiI9PT1lLnRoaWNrbmVzc21vZGU/bC53OjEpKSxJPXovbC53LEQ9TWF0aC5yb3VuZChlLmxlbiooImZyYWN0aW9uIj09PWUubGVubW9kZT9sLmg6MSkpLFI9RC9sLmgsRj1lLnhwYWQvbC53LEI9KGUuYm9yZGVyd2lkdGgrZS5vdXRsaW5ld2lkdGgpLzIsTj1lLnlwYWQvbC5oLGo9TWF0aC5yb3VuZChlLngqbC53K2UueHBhZCksVj1lLngtSSooe21pZGRsZTouNSxyaWdodDoxfVtlLnhhbmNob3JdfHwwKSxVPWUueStSKigoe3RvcDotLjUsYm90dG9tOi41fVtlLnlhbmNob3JdfHwwKS0uNSkscT1NYXRoLnJvdW5kKGwuaCooMS1VKSksSD1xLUQ7ZS5fbGVuRnJhYz1SLGUuX3RoaWNrRnJhYz1JLGUuX3hMZWZ0RnJhYz1WLGUuX3lCb3R0b21GcmFjPVU7dmFyIEc9ZS5fYXhpcz1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dCxhPXt0eXBlOiJsaW5lYXIiLHJhbmdlOnIsdGlja21vZGU6ZS50aWNrbW9kZSxudGlja3M6ZS5udGlja3MsdGljazA6ZS50aWNrMCxkdGljazplLmR0aWNrLHRpY2t2YWxzOmUudGlja3ZhbHMsdGlja3RleHQ6ZS50aWNrdGV4dCx0aWNrczplLnRpY2tzLHRpY2tsZW46ZS50aWNrbGVuLHRpY2t3aWR0aDplLnRpY2t3aWR0aCx0aWNrY29sb3I6ZS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6ZS5zaG93dGlja2xhYmVscyx0aWNrZm9udDplLnRpY2tmb250LHRpY2thbmdsZTplLnRpY2thbmdsZSx0aWNrZm9ybWF0OmUudGlja2Zvcm1hdCxleHBvbmVudGZvcm1hdDplLmV4cG9uZW50Zm9ybWF0LHNlcGFyYXRldGhvdXNhbmRzOmUuc2VwYXJhdGV0aG91c2FuZHMsc2hvd2V4cG9uZW50OmUuc2hvd2V4cG9uZW50LHNob3d0aWNrcHJlZml4OmUuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDplLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6ZS5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OmUudGlja3N1ZmZpeCx0aXRsZTplLnRpdGxlLHNob3dsaW5lOiEwLGFuY2hvcjoiZnJlZSIsc2lkZToicmlnaHQiLHBvc2l0aW9uOjF9LGk9e3R5cGU6ImxpbmVhciIsX2lkOiJ5IitlLl9pZH0sbz17bGV0dGVyOiJ5Iixmb250Om4uZm9udCxub0hvdmVyOiEwLG5vVGlja3NvbjohMCxjYWxlbmRhcjpuLmNhbGVuZGFyfTtmdW5jdGlvbiBzKHQsZSl7cmV0dXJuIGMuY29lcmNlKGEsaSx4LHQsZSl9cmV0dXJuIG0oYSxpLHMsbyxuKSx5KGEsaSxzLG8pLGl9KHIsZSxBKTtpZihHLnBvc2l0aW9uPWUueCtGK0ksLTEhPT1bInRvcCIsImJvdHRvbSJdLmluZGV4T2YoTSkmJihHLnRpdGxlLnNpZGU9TSxHLnRpdGxleD1lLngrRixHLnRpdGxleT1VKygidG9wIj09PWIuc2lkZT9SLU46TikpLHYuY29sb3ImJiJhdXRvIj09PWUudGlja21vZGUpe0cudGlja21vZGU9ImxpbmVhciIsRy50aWNrMD1MLnN0YXJ0O3ZhciBZPUwuc2l6ZSxXPWMuY29uc3RyYWluKChxLUgpLzUwLDQsMTUpKzEsWD0oQVsxXS1BWzBdKS8oKGUubnRpY2tzfHxXKSpZKTtpZihYPjEpe3ZhciBaPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coWCkvTWF0aC5MTjEwKSk7WSo9WipjLnJvdW5kVXAoWC9aLFsyLDUsMTBdKSwoTWF0aC5hYnMoTC5zdGFydCkvTC5zaXplKzFlLTYpJTE8MmUtNiYmKEcudGljazA9MCl9Ry5kdGljaz1ZfUcuZG9tYWluPVtVK04sVStSLU5dLEcuc2V0U2NhbGUoKSx0LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK01hdGgucm91bmQobC5sKSsiLCIrTWF0aC5yb3VuZChsLnQpKyIpIik7dmFyIEosSz10LnNlbGVjdCgiLiIrVC5jYnRpdGxldW5zaGlmdCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKC0iK01hdGgucm91bmQobC5sKSsiLC0iK01hdGgucm91bmQobC50KSsiKSIpLFE9dC5zZWxlY3QoIi4iK1QuY2JheGlzKSwkPTA7ZnVuY3Rpb24gdHQobixhKXt2YXIgaT17cHJvcENvbnRhaW5lcjpHLHByb3BOYW1lOmUuX3Byb3BQcmVmaXgrInRpdGxlIix0cmFjZUluZGV4OmUuX3RyYWNlSW5kZXgsX21ldGE6ZS5fbWV0YSxwbGFjZWhvbGRlcjpvLl9kZmx0VGl0bGUuY29sb3JiYXIsY29udGFpbmVyR3JvdXA6dC5zZWxlY3QoIi4iK1QuY2J0aXRsZSl9LHM9ImgiPT09bi5jaGFyQXQoMCk/bi5zdWJzdHIoMSk6ImgiK247dC5zZWxlY3RBbGwoIi4iK3MrIiwuIitzKyItbWF0aC1ncm91cCIpLnJlbW92ZSgpLGQuZHJhdyhyLG4sdShpLGF8fHt9KSl9cmV0dXJuIGMuc3luY09yQXN5bmMoW2kucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKC0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0pKXt2YXIgdCxyPWwubCsoZS54K0YpKmwudyxuPUcudGl0bGUuZm9udC5zaXplO3Q9InRvcCI9PT1NPygxLShVK1ItTikpKmwuaCtsLnQrMysuNzUqbjooMS0oVStOKSkqbC5oK2wudC0zLS4yNSpuLHR0KEcuX2lkKyJ0aXRsZSIse2F0dHJpYnV0ZXM6e3g6cix5OnQsInRleHQtYW5jaG9yIjoic3RhcnQifX0pfX0sZnVuY3Rpb24oKXtpZigtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihNKSl7dmFyIGk9dC5zZWxlY3QoIi4iK1QuY2J0aXRsZSksbz1pLnNlbGVjdCgidGV4dCIpLHU9Wy1lLm91dGxpbmV3aWR0aC8yLGUub3V0bGluZXdpZHRoLzJdLGg9aS5zZWxlY3QoIi5oIitHLl9pZCsidGl0bGUtbWF0aC1ncm91cCIpLm5vZGUoKSxwPTE1LjY7aWYoby5ub2RlKCkmJihwPXBhcnNlSW50KG8ubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSpfKSxoPygkPWYuYkJveChoKS5oZWlnaHQpPnAmJih1WzFdLT0oJC1wKS8yKTpvLm5vZGUoKSYmIW8uY2xhc3NlZChULmpzUGxhY2Vob2xkZXIpJiYoJD1mLmJCb3goby5ub2RlKCkpLmhlaWdodCksJCl7aWYoJCs9NSwidG9wIj09PU0pRy5kb21haW5bMV0tPSQvbC5oLHVbMV0qPS0xO2Vsc2V7Ry5kb21haW5bMF0rPSQvbC5oO3ZhciBkPWcubGluZUNvdW50KG8pO3VbMV0rPSgxLWQpKnB9aS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit1KyIpIiksRy5zZXRTY2FsZSgpfX10LnNlbGVjdEFsbCgiLiIrVC5jYmZpbGxzKyIsLiIrVC5jYmxpbmVzKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK01hdGgucm91bmQobC5oKigxLUcuZG9tYWluWzFdKSkrIikiKSxRLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrTWF0aC5yb3VuZCgtbC50KSsiKSIpO3ZhciBtPXQuc2VsZWN0KCIuIitULmNiZmlsbHMpLnNlbGVjdEFsbCgicmVjdC4iK1QuY2JmaWxsKS5kYXRhKFApO20uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKFQuY2JmaWxsLCEwKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpLG0uZXhpdCgpLnJlbW92ZSgpO3ZhciB5PUEubWFwKEcuYzJwKS5tYXAoTWF0aC5yb3VuZCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KTttLmVhY2goZnVuY3Rpb24odCxpKXt2YXIgbz1bMD09PWk/QVswXTooUFtpXStQW2ktMV0pLzIsaT09PVAubGVuZ3RoLTE/QVsxXTooUFtpXStQW2krMV0pLzJdLm1hcChHLmMycCkubWFwKE1hdGgucm91bmQpO29bMV09Yy5jb25zdHJhaW4ob1sxXSsob1sxXT5vWzBdKT8xOi0xLHlbMF0seVsxXSk7dmFyIHM9bi5zZWxlY3QodGhpcykuYXR0cih7eDpqLHdpZHRoOk1hdGgubWF4KHosMikseTpuLm1pbihvKSxoZWlnaHQ6TWF0aC5tYXgobi5tYXgobyktbi5taW4obyksMil9KTtpZihlLl9maWxsZ3JhZGllbnQpZi5ncmFkaWVudChzLHIsZS5faWQsInZlcnRpY2FsIixlLl9maWxsZ3JhZGllbnQsImZpbGwiKTtlbHNle3ZhciBsPUUodCkucmVwbGFjZSgiZS0iLCIiKTtzLmF0dHIoImZpbGwiLGEobCkudG9IZXhTdHJpbmcoKSl9fSk7dmFyIHg9dC5zZWxlY3QoIi4iK1QuY2JsaW5lcykuc2VsZWN0QWxsKCJwYXRoLiIrVC5jYmxpbmUpLmRhdGEodi5jb2xvciYmdi53aWR0aD9POltdKTt4LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChULmNibGluZSwhMCkseC5leGl0KCkucmVtb3ZlKCkseC5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitqKyIsIisoTWF0aC5yb3VuZChHLmMycCh0KSkrdi53aWR0aC8yJTEpKyJoIit6KS5jYWxsKGYubGluZUdyb3VwU3R5bGUsdi53aWR0aCxTKHQpLHYuZGFzaCl9KSxRLnNlbGVjdEFsbCgiZy4iK0cuX2lkKyJ0aWNrLHBhdGgiKS5yZW1vdmUoKTt2YXIgYj1qK3orKGUub3V0bGluZXdpZHRofHwwKS8yLSgib3V0c2lkZSI9PT1lLnRpY2tzPzE6MCksdz1zLmNhbGNUaWNrcyhHKSxrPXMubWFrZVRyYW5zRm4oRyksTD1zLmdldFRpY2tTaWducyhHKVsyXTtyZXR1cm4gcy5kcmF3VGlja3MocixHLHt2YWxzOiJpbnNpZGUiPT09Ry50aWNrcz9zLmNsaXBFbmRzKEcsdyk6dyxsYXllcjpRLHBhdGg6cy5tYWtlVGlja1BhdGgoRyxiLEwpLHRyYW5zRm46a30pLHMuZHJhd0xhYmVscyhyLEcse3ZhbHM6dyxsYXllcjpRLHRyYW5zRm46ayxsYWJlbEZuczpzLm1ha2VMYWJlbEZucyhHLGIpfSl9LGZ1bmN0aW9uKCl7aWYoLTE9PT1bInRvcCIsImJvdHRvbSJdLmluZGV4T2YoTSkpe3ZhciB0PUcudGl0bGUuZm9udC5zaXplLGU9Ry5fb2Zmc2V0K0cuX2xlbmd0aC8yLGE9bC5sKyhHLnBvc2l0aW9ufHwwKSpsLncrKCJyaWdodCI9PT1HLnNpZGU/MTArdCooRy5zaG93dGlja2xhYmVscz8xOi41KTotMTAtdCooRy5zaG93dGlja2xhYmVscz8uNTowKSk7dHQoImgiK0cuX2lkKyJ0aXRsZSIse2F2b2lkOntzZWxlY3Rpb246bi5zZWxlY3Qocikuc2VsZWN0QWxsKCJnLiIrRy5faWQrInRpY2siKSxzaWRlOk0sb2Zmc2V0TGVmdDpsLmwsb2Zmc2V0VG9wOjAsbWF4U2hpZnQ6by53aWR0aH0sYXR0cmlidXRlczp7eDphLHk6ZSwidGV4dC1hbmNob3IiOiJtaWRkbGUifSx0cmFuc2Zvcm06e3JvdGF0ZToiLTkwIixvZmZzZXQ6MH19KX19LGkucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe3ZhciBuPXorZS5vdXRsaW5ld2lkdGgvMitmLmJCb3goUS5ub2RlKCkpLndpZHRoO2lmKChKPUsuc2VsZWN0KCJ0ZXh0IikpLm5vZGUoKSYmIUouY2xhc3NlZChULmpzUGxhY2Vob2xkZXIpKXt2YXIgYSxvPUsuc2VsZWN0KCIuaCIrRy5faWQrInRpdGxlLW1hdGgtZ3JvdXAiKS5ub2RlKCk7YT1vJiYtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihNKT9mLmJCb3gobykud2lkdGg6Zi5iQm94KEsubm9kZSgpKS5yaWdodC1qLWwubCxuPU1hdGgubWF4KG4sYSl9dmFyIHM9MiplLnhwYWQrbitlLmJvcmRlcndpZHRoK2Uub3V0bGluZXdpZHRoLzIsYz1xLUg7dC5zZWxlY3QoIi4iK1QuY2JiZykuYXR0cih7eDpqLWUueHBhZC0oZS5ib3JkZXJ3aWR0aCtlLm91dGxpbmV3aWR0aCkvMix5OkgtQix3aWR0aDpNYXRoLm1heChzLDIpLGhlaWdodDpNYXRoLm1heChjKzIqQiwyKX0pLmNhbGwocC5maWxsLGUuYmdjb2xvcikuY2FsbChwLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKSx0LnNlbGVjdEFsbCgiLiIrVC5jYm91dGxpbmUpLmF0dHIoe3g6aix5OkgrZS55cGFkKygidG9wIj09PU0/JDowKSx3aWR0aDpNYXRoLm1heCh6LDIpLGhlaWdodDpNYXRoLm1heChjLTIqZS55cGFkLSQsMil9KS5jYWxsKHAuc3Ryb2tlLGUub3V0bGluZWNvbG9yKS5zdHlsZSh7ZmlsbDoibm9uZSIsInN0cm9rZS13aWR0aCI6ZS5vdXRsaW5ld2lkdGh9KTt2YXIgdT0oe2NlbnRlcjouNSxyaWdodDoxfVtlLnhhbmNob3JdfHwwKSpzO3QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGwubC11KSsiLCIrbC50KyIpIik7dmFyIGg9e30sZD13W2UueWFuY2hvcl0sZz1rW2UueWFuY2hvcl07InBpeGVscyI9PT1lLmxlbm1vZGU/KGgueT1lLnksaC50PWMqZCxoLmI9YypnKTooaC50PWguYj0wLGgueXQ9ZS55K2UubGVuKmQsaC55Yj1lLnktZS5sZW4qZyk7dmFyIHY9d1tlLnhhbmNob3JdLG09a1tlLnhhbmNob3JdO2lmKCJwaXhlbHMiPT09ZS50aGlja25lc3Ntb2RlKWgueD1lLngsaC5sPXMqdixoLnI9cyptO2Vsc2V7dmFyIHk9cy16O2gubD15KnYsaC5yPXkqbSxoLnhsPWUueC1lLnRoaWNrbmVzcyp2LGgueHI9ZS54K2UudGhpY2tuZXNzKm19aS5hdXRvTWFyZ2luKHIsZS5faWQsaCl9XSxyKX0ocixlLHQpO3YmJnYudGhlbiYmKHQuX3Byb21pc2VzfHxbXSkucHVzaCh2KSx0Ll9jb250ZXh0LmVkaXRzLmNvbG9yYmFyUG9zaXRpb24mJmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLGkscz1yLl9mdWxsTGF5b3V0Ll9zaXplO2wuaW5pdCh7ZWxlbWVudDp0Lm5vZGUoKSxnZDpyLHByZXBGbjpmdW5jdGlvbigpe249dC5hdHRyKCJ0cmFuc2Zvcm0iKSxoKHQpfSxtb3ZlRm46ZnVuY3Rpb24ocixvKXt0LmF0dHIoInRyYW5zZm9ybSIsbisiIHRyYW5zbGF0ZSgiK3IrIiwiK28rIikiKSxhPWwuYWxpZ24oZS5feExlZnRGcmFjK3Ivcy53LGUuX3RoaWNrRnJhYywwLDEsZS54YW5jaG9yKSxpPWwuYWxpZ24oZS5feUJvdHRvbUZyYWMtby9zLmgsZS5fbGVuRnJhYywwLDEsZS55YW5jaG9yKTt2YXIgYz1sLmdldEN1cnNvcihhLGksZS54YW5jaG9yLGUueWFuY2hvcik7aCh0LGMpfSxkb25lRm46ZnVuY3Rpb24oKXtpZihoKHQpLHZvaWQgMCE9PWEmJnZvaWQgMCE9PWkpe3ZhciBuPXt9O25bZS5fcHJvcFByZWZpeCsieCJdPWEsbltlLl9wcm9wUHJlZml4KyJ5Il09aSx2b2lkIDAhPT1lLl90cmFjZUluZGV4P28uY2FsbCgiX2d1aVJlc3R5bGUiLHIsbixlLl90cmFjZUluZGV4KTpvLmNhbGwoIl9ndWlSZWxheW91dCIscixuKX19fSl9KHIsZSx0KX0pLGUuZXhpdCgpLmVhY2goZnVuY3Rpb24oZSl7aS5hdXRvTWFyZ2luKHQsZS5faWQpfSkucmVtb3ZlKCksZS5vcmRlcigpfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6Njg2LCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3MzcsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyI6NzY3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3NywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzIjo3ODAsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MjYsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4uL2NvbG9yIjo1OTIsIi4uL2NvbG9yc2NhbGUvaGVscGVycyI6NjAzLCIuLi9kcmFnZWxlbWVudCI6NjEwLCIuLi9kcmF3aW5nIjo2MTMsIi4uL3RpdGxlcyI6Njc5LCIuL2NvbnN0YW50cyI6NTk0LGQzOjE2NSx0aW55Y29sb3IyOjUzNn1dLDU5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uaXNQbGFpbk9iamVjdCh0LmNvbG9yYmFyKX19LHsiLi4vLi4vbGliIjo3MTd9XSw1OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImNvbG9yYmFyIixhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpLmRyYXcsaGFzQ29sb3JiYXI6dCgiLi9oYXNfY29sb3JiYXIiKX19LHsiLi9hdHRyaWJ1dGVzIjo1OTMsIi4vZGVmYXVsdHMiOjU5NSwiLi9kcmF3Ijo1OTYsIi4vaGFzX2NvbG9yYmFyIjo1OTd9XSw1OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29sb3JiYXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL3JlZ2V4IikuY291bnRlcixpPXQoIi4vc2NhbGVzLmpzIikuc2NhbGVzO09iamVjdC5rZXlzKGkpO2Z1bmN0aW9uIG8odCl7cmV0dXJuImAiK3QrImAifWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8IiI7dmFyIHIscz0oZT1lfHx7fSkuY0xldHRlcnx8ImMiLGw9KCJvbmx5SWZOdW1lcmljYWwiaW4gZT9lLm9ubHlJZk51bWVyaWNhbDpCb29sZWFuKHQpLCJub1NjYWxlImluIGU/ZS5ub1NjYWxlOiJtYXJrZXIubGluZSI9PT10KSxjPSJzaG93U2NhbGVEZmx0ImluIGU/ZS5zaG93U2NhbGVEZmx0OiJ6Ij09PXMsdT0ic3RyaW5nIj09dHlwZW9mIGUuY29sb3JzY2FsZURmbHQ/aVtlLmNvbG9yc2NhbGVEZmx0XTpudWxsLGg9ZS5lZGl0VHlwZU92ZXJyaWRlfHwiIixmPXQ/dCsiLiI6IiI7ImNvbG9yQXR0ciJpbiBlPyhyPWUuY29sb3JBdHRyLGUuY29sb3JBdHRyKTpvKGYrKHI9e3o6InoiLGM6ImNvbG9yIn1bc10pKTt2YXIgcD1zKyJhdXRvIixkPXMrIm1pbiIsZz1zKyJtYXgiLHY9cysibWlkIixtPShvKGYrcCksbyhmK2QpLG8oZitnKSx7fSk7bVtkXT1tW2ddPXZvaWQgMDt2YXIgeT17fTt5W3BdPSExO3ZhciB4PXt9O3JldHVybiJjb2xvciI9PT1yJiYoeC5jb2xvcj17dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6aHx8InN0eWxlIn0sZS5hbmltJiYoeC5jb2xvci5hbmltPSEwKSkseFtwXT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOm19LHhbZF09e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOmh8fCJwbG90IixpbXBsaWVkRWRpdHM6eX0seFtnXT17dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6aHx8InBsb3QiLGltcGxpZWRFZGl0czp5fSx4W3ZdPXt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOm19LHguY29sb3JzY2FsZT17dmFsVHlwZToiY29sb3JzY2FsZSIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6dSxpbXBsaWVkRWRpdHM6e2F1dG9jb2xvcnNjYWxlOiExfX0seC5hdXRvY29sb3JzY2FsZT17dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSE9PWUuYXV0b0NvbG9yRGZsdCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOntjb2xvcnNjYWxlOnZvaWQgMH19LHgucmV2ZXJzZXNjYWxlPXt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sbHx8KHguc2hvd3NjYWxlPXt2YWxUeXBlOiJib29sZWFuIixkZmx0OmMsZWRpdFR5cGU6ImNhbGMifSx4LmNvbG9yYmFyPW4pLGUubm9Db2xvckF4aXN8fCh4LmNvbG9yYXhpcz17dmFsVHlwZToic3VicGxvdGlkIixyZWdleDphKCJjb2xvcmF4aXMiKSxkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMifSkseH19LHsiLi4vLi4vbGliL3JlZ2V4Ijo3MzMsIi4uL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjU5MywiLi9zY2FsZXMuanMiOjYwN31dLDYwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuL2hlbHBlcnMiKS5leHRyYWN0T3B0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHM9dC5fZnVsbExheW91dCxsPXIudmFscyxjPXIuY29udGFpbmVyU3RyLHU9Yz9hLm5lc3RlZFByb3BlcnR5KGUsYykuZ2V0KCk6ZSxoPWkodSksZj0hMSE9PWguYXV0byxwPWgubWluLGQ9aC5tYXgsZz1oLm1pZCx2PWZ1bmN0aW9uKCl7cmV0dXJuIGEuYWdnTnVtcyhNYXRoLm1pbixudWxsLGwpfSxtPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYWdnTnVtcyhNYXRoLm1heCxudWxsLGwpfTsodm9pZCAwPT09cD9wPXYoKTpmJiYocD11Ll9jb2xvckF4JiZuKHApP01hdGgubWluKHAsdigpKTp2KCkpLHZvaWQgMD09PWQ/ZD1tKCk6ZiYmKGQ9dS5fY29sb3JBeCYmbihkKT9NYXRoLm1heChkLG0oKSk6bSgpKSxmJiZ2b2lkIDAhPT1nJiYoZC1nPmctcD9wPWctKGQtZyk6ZC1nPGctcCYmKGQ9ZysoZy1wKSkpLHA9PT1kJiYocC09LjUsZCs9LjUpLGguX3N5bmMoIm1pbiIscCksaC5fc3luYygibWF4IixkKSxoLmF1dG9jb2xvcnNjYWxlKSYmKG89cCpkPDA/cy5jb2xvcnNjYWxlLmRpdmVyZ2luZzpwPj0wP3MuY29sb3JzY2FsZS5zZXF1ZW50aWFsOnMuY29sb3JzY2FsZS5zZXF1ZW50aWFsbWludXMsaC5fc3luYygiY29sb3JzY2FsZSIsbykpfX0seyIuLi8uLi9saWIiOjcxNywiLi9oZWxwZXJzIjo2MDMsImZhc3QtaXNudW1lcmljIjoyMjh9XSw2MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGk9dCgiLi9oZWxwZXJzIikuZXh0cmFjdE9wdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciByPXRbIl8iK2VdO3ZvaWQgMCE9PXImJih0W2VdPXIpfWZ1bmN0aW9uIG8odCxhKXt2YXIgbz1hLmNvbnRhaW5lcj9uLm5lc3RlZFByb3BlcnR5KHQsYS5jb250YWluZXIpLmdldCgpOnQ7aWYobylpZihvLmNvbG9yYXhpcylvLl9jb2xvckF4PWVbby5jb2xvcmF4aXNdO2Vsc2V7dmFyIHM9aShvKSxsPXMuYXV0bzsobHx8dm9pZCAwPT09cy5taW4pJiZyKG8sYS5taW4pLChsfHx2b2lkIDA9PT1zLm1heCkmJnIobyxhLm1heCkscy5hdXRvY29sb3JzY2FsZSYmcihvLCJjb2xvcnNjYWxlIil9fWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdLGM9bC5fbW9kdWxlLmNvbG9yYmFyO2lmKGMpaWYoQXJyYXkuaXNBcnJheShjKSlmb3IodmFyIHU9MDt1PGMubGVuZ3RoO3UrKylvKGwsY1t1XSk7ZWxzZSBvKGwsYyk7YShsLCJtYXJrZXIubGluZSIpJiZvKGwse2NvbnRhaW5lcjoibWFya2VyLmxpbmUiLG1pbjoiY21pbiIsbWF4OiJjbWF4In0pfWZvcih2YXIgaCBpbiBlLl9jb2xvckF4ZXMpbyhlW2hdLHttaW46ImNtaW4iLG1heDoiY21heCJ9KX19LHsiLi4vLi4vbGliIjo3MTcsIi4vaGVscGVycyI6NjAzfV0sNjAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2NvbG9yYmFyL2hhc19jb2xvcmJhciIpLG89dCgiLi4vY29sb3JiYXIvZGVmYXVsdHMiKSxzPXQoIi4vc2NhbGVzIikuaXNWYWxpZCxsPXQoIi4uLy4uL3JlZ2lzdHJ5IikudHJhY2VJcztmdW5jdGlvbiBjKHQsZSl7dmFyIHI9ZS5zbGljZSgwLGUubGVuZ3RoLTEpO3JldHVybiBlP2EubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKXx8e306dH1lLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsdSxoLGYpe3ZhciBwPWYucHJlZml4LGQ9Zi5jTGV0dGVyLGc9Il9tb2R1bGUiaW4gcix2PWMoZSxwKSxtPWMocixwKSx5PWMoci5fdGVtcGxhdGV8fHt9LHApfHx7fSx4PWZ1bmN0aW9uKCl7cmV0dXJuIGRlbGV0ZSBlLmNvbG9yYXhpcyxkZWxldGUgci5jb2xvcmF4aXMsdChlLHIsdSxoLGYpfTtpZihnKXt2YXIgYj11Ll9jb2xvckF4ZXN8fHt9LF89aChwKyJjb2xvcmF4aXMiKTtpZihfKXt2YXIgdz1sKHIsImNvbnRvdXIiKSYmYS5uZXN0ZWRQcm9wZXJ0eShyLCJjb250b3Vycy5jb2xvcmluZyIpLmdldCgpfHwiaGVhdG1hcCIsaz1iW19dO3JldHVybiB2b2lkKGs/KGtbMl0ucHVzaCh4KSxrWzBdIT09dyYmKGtbMF09ITEsYS53YXJuKFsiSWdub3JpbmcgY29sb3JheGlzOiIsXywic2V0dGluZyIsImFzIGl0IGlzIGxpbmtlZCB0byBpbmNvbXBhdGlibGUgY29sb3JzY2FsZXMuIl0uam9pbigiICIpKSkpOmJbX109W3cscixbeF1dKX19dmFyIFQ9dltkKyJtaW4iXSxNPXZbZCsibWF4Il0sQT1uKFQpJiZuKE0pJiZUPE07aChwK2QrImF1dG8iLCFBKT9oKHArZCsibWlkIik6KGgocCtkKyJtaW4iKSxoKHArZCsibWF4IikpO3ZhciBTLEUsTD12LmNvbG9yc2NhbGUsQz15LmNvbG9yc2NhbGU7KHZvaWQgMCE9PUwmJihTPSFzKEwpKSx2b2lkIDAhPT1DJiYoUz0hcyhDKSksaChwKyJhdXRvY29sb3JzY2FsZSIsUyksaChwKyJjb2xvcnNjYWxlIiksaChwKyJyZXZlcnNlc2NhbGUiKSwibWFya2VyLmxpbmUuIiE9PXApJiYocCYmZyYmKEU9aSh2KSksaChwKyJzaG93c2NhbGUiLEUpJiYocCYmeSYmKG0uX3RlbXBsYXRlPXkpLG8odixtLHUpKSl9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuLi9jb2xvcmJhci9kZWZhdWx0cyI6NTk1LCIuLi9jb2xvcmJhci9oYXNfY29sb3JiYXIiOjU5NywiLi9zY2FsZXMiOjYwNywiZmFzdC1pc251bWVyaWMiOjIyOH1dLDYwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgidGlueWNvbG9yMiIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vY29sb3IiKSxsPXQoIi4vc2NhbGVzIikuaXNWYWxpZDt2YXIgYz1bInNob3dzY2FsZSIsImF1dG9jb2xvcnNjYWxlIiwiY29sb3JzY2FsZSIsInJldmVyc2VzY2FsZSIsImNvbG9yYmFyIl0sdT1bIm1pbiIsIm1heCIsIm1pZCIsImF1dG8iXTtmdW5jdGlvbiBoKHQpe3ZhciBlLHIsbixhPXQuX2NvbG9yQXgsaT1hfHx0LG89e307Zm9yKHI9MDtyPGMubGVuZ3RoO3IrKylvW249Y1tyXV09aVtuXTtpZihhKWZvcihlPSJjIixyPTA7cjx1Lmxlbmd0aDtyKyspb1tuPXVbcl1dPWlbImMiK25dO2Vsc2V7dmFyIHM7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKykocz0iYyIrKG49dVtyXSkpaW4gaT9vW25dPWlbc106KHM9InoiK24paW4gaSYmKG9bbl09aVtzXSk7ZT1zLmNoYXJBdCgwKX1yZXR1cm4gby5fc3luYz1mdW5jdGlvbih0LHIpe3ZhciBuPS0xIT09dS5pbmRleE9mKHQpP2UrdDp0O2lbbl09aVsiXyIrbl09cn0sb31mdW5jdGlvbiBmKHQpe2Zvcih2YXIgZT1oKHQpLHI9ZS5taW4sbj1lLm1heCxhPWUucmV2ZXJzZXNjYWxlP3AoZS5jb2xvcnNjYWxlKTplLmNvbG9yc2NhbGUsaT1hLmxlbmd0aCxvPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShpKSxsPTA7bDxpO2wrKyl7dmFyIGM9YVtsXTtvW2xdPXIrY1swXSoobi1yKSxzW2xdPWNbMV19cmV0dXJue2RvbWFpbjpvLHJhbmdlOnN9fWZ1bmN0aW9uIHAodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49ZS0xLGE9MDtuPj0wO24tLSxhKyspe3ZhciBpPXRbbl07clthXT1bMS1pWzBdLGlbMV1dfXJldHVybiByfWZ1bmN0aW9uIGQodCxlKXtlPWV8fHt9O2Zvcih2YXIgcj10LmRvbWFpbixvPXQucmFuZ2UsbD1vLmxlbmd0aCxjPW5ldyBBcnJheShsKSx1PTA7dTxsO3UrKyl7dmFyIGg9YShvW3VdKS50b1JnYigpO2NbdV09W2gucixoLmcsaC5iLGguYV19dmFyIGYscD1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihyKS5yYW5nZShjKS5jbGFtcCghMCksZD1lLm5vTnVtZXJpY0NoZWNrLHY9ZS5yZXR1cm5BcnJheTtyZXR1cm4oZj1kJiZ2P3A6ZD9mdW5jdGlvbih0KXtyZXR1cm4gZyhwKHQpKX06dj9mdW5jdGlvbih0KXtyZXR1cm4gaSh0KT9wKHQpOmEodCkuaXNWYWxpZCgpP3Q6cy5kZWZhdWx0TGluZX06ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/ZyhwKHQpKTphKHQpLmlzVmFsaWQoKT90OnMuZGVmYXVsdExpbmV9KS5kb21haW49cC5kb21haW4sZi5yYW5nZT1mdW5jdGlvbigpe3JldHVybiBvfSxmfWZ1bmN0aW9uIGcodCl7dmFyIGU9e3I6dFswXSxnOnRbMV0sYjp0WzJdLGE6dFszXX07cmV0dXJuIGEoZSkudG9SZ2JTdHJpbmcoKX1lLmV4cG9ydHM9e2hhc0NvbG9yc2NhbGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU/by5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpfHx7fTp0LGE9bltyfHwiY29sb3IiXSxzPSExO2lmKG8uaXNBcnJheU9yVHlwZWRBcnJheShhKSlmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihpKGFbY10pKXtzPSEwO2JyZWFrfXJldHVybiBvLmlzUGxhaW5PYmplY3QobikmJihzfHwhMD09PW4uc2hvd3NjYWxlfHxpKG4uY21pbikmJmkobi5jbWF4KXx8bChuLmNvbG9yc2NhbGUpfHxvLmlzUGxhaW5PYmplY3Qobi5jb2xvcmJhcikpfSxleHRyYWN0T3B0czpoLGV4dHJhY3RTY2FsZTpmLGZsaXBTY2FsZTpwLG1ha2VDb2xvclNjYWxlRnVuYzpkLG1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZTpmdW5jdGlvbih0LGUpe3JldHVybiBkKGYodCksZSl9fX0seyIuLi8uLi9saWIiOjcxNywiLi4vY29sb3IiOjU5MiwiLi9zY2FsZXMiOjYwNyxkMzoxNjUsImZhc3QtaXNudW1lcmljIjoyMjgsdGlueWNvbG9yMjo1MzZ9XSw2MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zY2FsZXMiKSxhPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJjb2xvcnNjYWxlIixhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksaGFuZGxlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxzY2FsZXM6bi5zY2FsZXMsZGVmYXVsdFNjYWxlOm4uZGVmYXVsdFNjYWxlLGdldFNjYWxlOm4uZ2V0LGlzVmFsaWRTY2FsZTpuLmlzVmFsaWQsaGFzQ29sb3JzY2FsZTphLmhhc0NvbG9yc2NhbGUsZXh0cmFjdE9wdHM6YS5leHRyYWN0T3B0cyxleHRyYWN0U2NhbGU6YS5leHRyYWN0U2NhbGUsZmxpcFNjYWxlOmEuZmxpcFNjYWxlLG1ha2VDb2xvclNjYWxlRnVuYzphLm1ha2VDb2xvclNjYWxlRnVuYyxtYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2U6YS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2V9fSx7Ii4vYXR0cmlidXRlcyI6NTk5LCIuL2NhbGMiOjYwMCwiLi9jcm9zc190cmFjZV9kZWZhdWx0cyI6NjAxLCIuL2RlZmF1bHRzIjo2MDIsIi4vaGVscGVycyI6NjAzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MDUsIi4vbGF5b3V0X2RlZmF1bHRzIjo2MDYsIi4vc2NhbGVzIjo2MDd9XSw2MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYT10KCIuL2F0dHJpYnV0ZXMiKSxpPXQoIi4vc2NhbGVzIikuc2NhbGVzO2UuZXhwb3J0cz17ZWRpdFR5cGU6ImNhbGMiLGNvbG9yc2NhbGU6e2VkaXRUeXBlOiJjYWxjIixzZXF1ZW50aWFsOnt2YWxUeXBlOiJjb2xvcnNjYWxlIixkZmx0OmkuUmVkcyxlZGl0VHlwZToiY2FsYyJ9LHNlcXVlbnRpYWxtaW51czp7dmFsVHlwZToiY29sb3JzY2FsZSIsZGZsdDppLkJsdWVzLGVkaXRUeXBlOiJjYWxjIn0sZGl2ZXJnaW5nOnt2YWxUeXBlOiJjb2xvcnNjYWxlIixkZmx0OmkuUmRCdSxlZGl0VHlwZToiY2FsYyJ9fSxjb2xvcmF4aXM6bih7X2lzU3VicGxvdE9iajohMCxlZGl0VHlwZToiY2FsYyJ9LGEoIiIse2NvbG9yQXR0cjoiY29ycmVzcG9uZGluZyB0cmFjZSBjb2xvciBhcnJheShzKSIsbm9Db2xvckF4aXM6ITAsc2hvd1NjYWxlRGZsdDohMH0pKX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuL2F0dHJpYnV0ZXMiOjU5OSwiLi9zY2FsZXMiOjYwN31dLDYwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPXQoIi4vZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cigiY29sb3JzY2FsZS5zZXF1ZW50aWFsIikscigiY29sb3JzY2FsZS5zZXF1ZW50aWFsbWludXMiKSxyKCJjb2xvcnNjYWxlLmRpdmVyZ2luZyIpO3ZhciBzLGwsYz1lLl9jb2xvckF4ZXM7ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBuLmNvZXJjZShzLGwsaS5jb2xvcmF4aXMsdCxlKX1mb3IodmFyIGggaW4gYyl7dmFyIGY9Y1toXTtpZihmWzBdKXM9dFtoXXx8e30sKGw9YS5uZXdDb250YWluZXIoZSxoLCJjb2xvcmF4aXMiKSkuX25hbWU9aCxvKHMsbCxlLHUse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pO2Vsc2V7Zm9yKHZhciBwPTA7cDxmWzJdLmxlbmd0aDtwKyspZlsyXVtwXSgpO2RlbGV0ZSBlLl9jb2xvckF4ZXNbaF19fX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc1NSwiLi9kZWZhdWx0cyI6NjAyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MDV9XSw2MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLGE9e0dyZXlzOltbMCwicmdiKDAsMCwwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLFlsR25CdTpbWzAsInJnYig4LDI5LDg4KSJdLFsuMTI1LCJyZ2IoMzcsNTIsMTQ4KSJdLFsuMjUsInJnYigzNCw5NCwxNjgpIl0sWy4zNzUsInJnYigyOSwxNDUsMTkyKSJdLFsuNSwicmdiKDY1LDE4MiwxOTYpIl0sWy42MjUsInJnYigxMjcsMjA1LDE4NykiXSxbLjc1LCJyZ2IoMTk5LDIzMywxODApIl0sWy44NzUsInJnYigyMzcsMjQ4LDIxNykiXSxbMSwicmdiKDI1NSwyNTUsMjE3KSJdXSxHcmVlbnM6W1swLCJyZ2IoMCw2OCwyNykiXSxbLjEyNSwicmdiKDAsMTA5LDQ0KSJdLFsuMjUsInJnYigzNSwxMzksNjkpIl0sWy4zNzUsInJnYig2NSwxNzEsOTMpIl0sWy41LCJyZ2IoMTE2LDE5NiwxMTgpIl0sWy42MjUsInJnYigxNjEsMjE3LDE1NSkiXSxbLjc1LCJyZ2IoMTk5LDIzMywxOTIpIl0sWy44NzUsInJnYigyMjksMjQ1LDIyNCkiXSxbMSwicmdiKDI0NywyNTIsMjQ1KSJdXSxZbE9yUmQ6W1swLCJyZ2IoMTI4LDAsMzgpIl0sWy4xMjUsInJnYigxODksMCwzOCkiXSxbLjI1LCJyZ2IoMjI3LDI2LDI4KSJdLFsuMzc1LCJyZ2IoMjUyLDc4LDQyKSJdLFsuNSwicmdiKDI1MywxNDEsNjApIl0sWy42MjUsInJnYigyNTQsMTc4LDc2KSJdLFsuNzUsInJnYigyNTQsMjE3LDExOCkiXSxbLjg3NSwicmdiKDI1NSwyMzcsMTYwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyMDQpIl1dLEJsdWVyZWQ6W1swLCJyZ2IoMCwwLDI1NSkiXSxbMSwicmdiKDI1NSwwLDApIl1dLFJkQnU6W1swLCJyZ2IoNSwxMCwxNzIpIl0sWy4zNSwicmdiKDEwNiwxMzcsMjQ3KSJdLFsuNSwicmdiKDE5MCwxOTAsMTkwKSJdLFsuNiwicmdiKDIyMCwxNzAsMTMyKSJdLFsuNywicmdiKDIzMCwxNDUsOTApIl0sWzEsInJnYigxNzgsMTAsMjgpIl1dLFJlZHM6W1swLCJyZ2IoMjIwLDIyMCwyMjApIl0sWy4yLCJyZ2IoMjQ1LDE5NSwxNTcpIl0sWy40LCJyZ2IoMjQ1LDE2MCwxMDUpIl0sWzEsInJnYigxNzgsMTAsMjgpIl1dLEJsdWVzOltbMCwicmdiKDUsMTAsMTcyKSJdLFsuMzUsInJnYig0MCw2MCwxOTApIl0sWy41LCJyZ2IoNzAsMTAwLDI0NSkiXSxbLjYsInJnYig5MCwxMjAsMjQ1KSJdLFsuNywicmdiKDEwNiwxMzcsMjQ3KSJdLFsxLCJyZ2IoMjIwLDIyMCwyMjApIl1dLFBpY25pYzpbWzAsInJnYigwLDAsMjU1KSJdLFsuMSwicmdiKDUxLDE1MywyNTUpIl0sWy4yLCJyZ2IoMTAyLDIwNCwyNTUpIl0sWy4zLCJyZ2IoMTUzLDIwNCwyNTUpIl0sWy40LCJyZ2IoMjA0LDIwNCwyNTUpIl0sWy41LCJyZ2IoMjU1LDI1NSwyNTUpIl0sWy42LCJyZ2IoMjU1LDIwNCwyNTUpIl0sWy43LCJyZ2IoMjU1LDE1MywyNTUpIl0sWy44LCJyZ2IoMjU1LDEwMiwyMDQpIl0sWy45LCJyZ2IoMjU1LDEwMiwxMDIpIl0sWzEsInJnYigyNTUsMCwwKSJdXSxSYWluYm93OltbMCwicmdiKDE1MCwwLDkwKSJdLFsuMTI1LCJyZ2IoMCwwLDIwMCkiXSxbLjI1LCJyZ2IoMCwyNSwyNTUpIl0sWy4zNzUsInJnYigwLDE1MiwyNTUpIl0sWy41LCJyZ2IoNDQsMjU1LDE1MCkiXSxbLjYyNSwicmdiKDE1MSwyNTUsMCkiXSxbLjc1LCJyZ2IoMjU1LDIzNCwwKSJdLFsuODc1LCJyZ2IoMjU1LDExMSwwKSJdLFsxLCJyZ2IoMjU1LDAsMCkiXV0sUG9ydGxhbmQ6W1swLCJyZ2IoMTIsNTEsMTMxKSJdLFsuMjUsInJnYigxMCwxMzYsMTg2KSJdLFsuNSwicmdiKDI0MiwyMTEsNTYpIl0sWy43NSwicmdiKDI0MiwxNDMsNTYpIl0sWzEsInJnYigyMTcsMzAsMzApIl1dLEpldDpbWzAsInJnYigwLDAsMTMxKSJdLFsuMTI1LCJyZ2IoMCw2MCwxNzApIl0sWy4zNzUsInJnYig1LDI1NSwyNTUpIl0sWy42MjUsInJnYigyNTUsMjU1LDApIl0sWy44NzUsInJnYigyNTAsMCwwKSJdLFsxLCJyZ2IoMTI4LDAsMCkiXV0sSG90OltbMCwicmdiKDAsMCwwKSJdLFsuMywicmdiKDIzMCwwLDApIl0sWy42LCJyZ2IoMjU1LDIxMCwwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLEJsYWNrYm9keTpbWzAsInJnYigwLDAsMCkiXSxbLjIsInJnYigyMzAsMCwwKSJdLFsuNCwicmdiKDIzMCwyMTAsMCkiXSxbLjcsInJnYigyNTUsMjU1LDI1NSkiXSxbMSwicmdiKDE2MCwyMDAsMjU1KSJdXSxFYXJ0aDpbWzAsInJnYigwLDAsMTMwKSJdLFsuMSwicmdiKDAsMTgwLDE4MCkiXSxbLjIsInJnYig0MCwyMTAsNDApIl0sWy40LCJyZ2IoMjMwLDIzMCw1MCkiXSxbLjYsInJnYigxMjAsNzAsMjApIl0sWzEsInJnYigyNTUsMjU1LDI1NSkiXV0sRWxlY3RyaWM6W1swLCJyZ2IoMCwwLDApIl0sWy4xNSwicmdiKDMwLDAsMTAwKSJdLFsuNCwicmdiKDEyMCwwLDEwMCkiXSxbLjYsInJnYigxNjAsOTAsMCkiXSxbLjgsInJnYigyMzAsMjAwLDApIl0sWzEsInJnYigyNTUsMjUwLDIyMCkiXV0sVmlyaWRpczpbWzAsIiM0NDAxNTQiXSxbLjA2Mjc0NTA5ODAzOTIxNTY5LCIjNDgxODZhIl0sWy4xMjU0OTAxOTYwNzg0MzEzNywiIzQ3MmQ3YiJdLFsuMTg4MjM1Mjk0MTE3NjQ3MDYsIiM0MjQwODYiXSxbLjI1MDk4MDM5MjE1Njg2Mjc0LCIjM2I1MjhiIl0sWy4zMTM3MjU0OTAxOTYwNzg0LCIjMzM2MzhkIl0sWy4zNzY0NzA1ODgyMzUyOTQxLCIjMmM3MjhlIl0sWy40MzkyMTU2ODYyNzQ1MDk4LCIjMjY4MjhlIl0sWy41MDE5NjA3ODQzMTM3MjU1LCIjMjE5MThjIl0sWy41NjQ3MDU4ODIzNTI5NDEyLCIjMWZhMDg4Il0sWy42Mjc0NTA5ODAzOTIxNTY5LCIjMjhhZTgwIl0sWy42OTAxOTYwNzg0MzEzNzI1LCIjM2ZiYzczIl0sWy43NTI5NDExNzY0NzA1ODgyLCIjNWVjOTYyIl0sWy44MTU2ODYyNzQ1MDk4MDM5LCIjODRkNDRiIl0sWy44Nzg0MzEzNzI1NDkwMTk2LCIjYWRkYzMwIl0sWy45NDExNzY0NzA1ODgyMzUzLCIjZDhlMjE5Il0sWzEsIiNmZGU3MjUiXV0sQ2l2aWRpczpbWzAsInJnYigwLDMyLDc2KSJdLFsuMDU4ODI0LCJyZ2IoMCw0MiwxMDIpIl0sWy4xMTc2NDcsInJnYigwLDUyLDExMCkiXSxbLjE3NjQ3MSwicmdiKDM5LDYzLDEwOCkiXSxbLjIzNTI5NCwicmdiKDYwLDc0LDEwNykiXSxbLjI5NDExOCwicmdiKDc2LDg1LDEwNykiXSxbLjM1Mjk0MSwicmdiKDkxLDk1LDEwOSkiXSxbLjQxMTc2NSwicmdiKDEwNCwxMDYsMTEyKSJdLFsuNDcwNTg4LCJyZ2IoMTE3LDExNywxMTcpIl0sWy41Mjk0MTIsInJnYigxMzEsMTI5LDEyMCkiXSxbLjU4ODIzNSwicmdiKDE0NiwxNDAsMTIwKSJdLFsuNjQ3MDU5LCJyZ2IoMTYxLDE1MiwxMTgpIl0sWy43MDU4ODIsInJnYigxNzYsMTY1LDExNCkiXSxbLjc2NDcwNiwicmdiKDE5MiwxNzcsMTA5KSJdLFsuODIzNTI5LCJyZ2IoMjA5LDE5MSwxMDIpIl0sWy44ODIzNTMsInJnYigyMjUsMjA0LDkyKSJdLFsuOTQxMTc2LCJyZ2IoMjQzLDIxOSw3OSkiXSxbMSwicmdiKDI1NSwyMzMsNjkpIl1dfSxpPWEuUmRCdTtmdW5jdGlvbiBvKHQpe3ZhciBlPTA7aWYoIUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDIpcmV0dXJuITE7aWYoIXRbMF18fCF0W3QubGVuZ3RoLTFdKXJldHVybiExO2lmKDAhPSt0WzBdWzBdfHwxIT0rdFt0Lmxlbmd0aC0xXVswXSlyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTtpZigyIT09YS5sZW5ndGh8fCthWzBdPGV8fCFuKGFbMV0pLmlzVmFsaWQoKSlyZXR1cm4hMTtlPSthWzBdfXJldHVybiEwfWUuZXhwb3J0cz17c2NhbGVzOmEsZGVmYXVsdFNjYWxlOmksZ2V0OmZ1bmN0aW9uKHQsZSl7aWYoZXx8KGU9aSksIXQpcmV0dXJuIGU7ZnVuY3Rpb24gcigpe3RyeXt0PWFbdF18fEpTT04ucGFyc2UodCl9Y2F0Y2gocil7dD1lfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJihyKCksInN0cmluZyI9PXR5cGVvZiB0JiZyKCkpLG8odCk/dDplfSxpc1ZhbGlkOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT1hW3RdfHxvKHQpfX19LHt0aW55Y29sb3IyOjUzNn1dLDYwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgaT0odC1yKS8obi1yKSxvPWkrZS8obi1yKSxzPShpK28pLzI7cmV0dXJuImxlZnQiPT09YXx8ImJvdHRvbSI9PT1hP2k6ImNlbnRlciI9PT1hfHwibWlkZGxlIj09PWE/czoicmlnaHQiPT09YXx8InRvcCI9PT1hP286aTwyLzMtcz9pOm8+NC8zLXM/bzpzfX0se31dLDYwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPVtbInN3LXJlc2l6ZSIsInMtcmVzaXplIiwic2UtcmVzaXplIl0sWyJ3LXJlc2l6ZSIsIm1vdmUiLCJlLXJlc2l6ZSJdLFsibnctcmVzaXplIiwibi1yZXNpemUiLCJuZS1yZXNpemUiXV07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiB0PSJsZWZ0Ij09PXI/MDoiY2VudGVyIj09PXI/MToicmlnaHQiPT09cj8yOm4uY29uc3RyYWluKE1hdGguZmxvb3IoMyp0KSwwLDIpLGU9ImJvdHRvbSI9PT1pPzA6Im1pZGRsZSI9PT1pPzE6InRvcCI9PT1pPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKmUpLDAsMiksYVtlXVt0XX19LHsiLi4vLi4vbGliIjo3MTd9XSw2MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibW91c2UtZXZlbnQtb2Zmc2V0IiksYT10KCJoYXMtaG92ZXIiKSxpPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpLG89dCgiLi4vLi4vbGliIikucmVtb3ZlRWxlbWVudCxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKSxsPWUuZXhwb3J0cz17fTtsLmFsaWduPXQoIi4vYWxpZ24iKSxsLmdldEN1cnNvcj10KCIuL2N1cnNvciIpO3ZhciBjPXQoIi4vdW5ob3ZlciIpO2Z1bmN0aW9uIHUoKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmNsYXNzTmFtZT0iZHJhZ2NvdmVyIjt2YXIgZT10LnN0eWxlO3JldHVybiBlLnBvc2l0aW9uPSJmaXhlZCIsZS5sZWZ0PTAsZS5yaWdodD0wLGUudG9wPTAsZS5ib3R0b209MCxlLnpJbmRleD05OTk5OTk5OTksZS5iYWNrZ3JvdW5kPSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHR9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gbih0LmNoYW5nZWRUb3VjaGVzP3QuY2hhbmdlZFRvdWNoZXNbMF06dCxkb2N1bWVudC5ib2R5KX1sLnVuaG92ZXI9Yy53cmFwcGVkLGwudW5ob3ZlclJhdz1jLnJhdyxsLmluaXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLGMsZixwLGQsZyx2PXQuZ2QsbT0xLHk9di5fY29udGV4dC5kb3VibGVDbGlja0RlbGF5LHg9dC5lbGVtZW50O3YuX21vdXNlRG93blRpbWV8fCh2Ll9tb3VzZURvd25UaW1lPTApLHguc3R5bGUucG9pbnRlckV2ZW50cz0iYWxsIix4Lm9ubW91c2Vkb3duPV8saT8oeC5fb250b3VjaHN0YXJ0JiZ4LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHguX29udG91Y2hzdGFydCkseC5fb250b3VjaHN0YXJ0PV8seC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixfLHtwYXNzaXZlOiExfSkpOngub250b3VjaHN0YXJ0PV87dmFyIGI9dC5jbGFtcEZufHxmdW5jdGlvbih0LGUscil7cmV0dXJuIE1hdGguYWJzKHQpPHImJih0PTApLE1hdGguYWJzKGUpPHImJihlPTApLFt0LGVdfTtmdW5jdGlvbiBfKGkpe3YuX2RyYWdnZWQ9ITEsdi5fZHJhZ2dpbmc9ITA7dmFyIG89aChpKTtlPW9bMF0scj1vWzFdLGQ9aS50YXJnZXQscD1pLGc9Mj09PWkuYnV0dG9uc3x8aS5jdHJsS2V5LCJ1bmRlZmluZWQiPT10eXBlb2YgaS5jbGllbnRYJiYidW5kZWZpbmVkIj09dHlwZW9mIGkuY2xpZW50WSYmKGkuY2xpZW50WD1lLGkuY2xpZW50WT1yKSwobj0obmV3IERhdGUpLmdldFRpbWUoKSktdi5fbW91c2VEb3duVGltZTx5P20rPTE6KG09MSx2Ll9tb3VzZURvd25UaW1lPW4pLHQucHJlcEZuJiZ0LnByZXBGbihpLGUsciksYSYmIWc/KGY9dSgpKS5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoeCkuY3Vyc29yOmF8fChmPWRvY3VtZW50LGM9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5jdXJzb3IsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvcj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh4KS5jdXJzb3IpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGspLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixrKSwhMSE9PXQuZHJhZ21vZGUmJihpLnByZXZlbnREZWZhdWx0KCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix3KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHcse3Bhc3NpdmU6ITF9KSl9ZnVuY3Rpb24gdyhuKXtuLnByZXZlbnREZWZhdWx0KCk7dmFyIGE9aChuKSxpPXQubWluRHJhZ3x8cy5NSU5EUkFHLG89YihhWzBdLWUsYVsxXS1yLGkpLGM9b1swXSx1PW9bMV07KGN8fHUpJiYodi5fZHJhZ2dlZD0hMCxsLnVuaG92ZXIodikpLHYuX2RyYWdnZWQmJnQubW92ZUZuJiYhZyYmKHYuX2RyYWdkYXRhPXtlbGVtZW50OngsZHg6YyxkeTp1fSx0Lm1vdmVGbihjLHUpKX1mdW5jdGlvbiBrKGUpe2lmKGRlbGV0ZSB2Ll9kcmFnZGF0YSwhMSE9PXQuZHJhZ21vZGUmJihlLnByZXZlbnREZWZhdWx0KCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix3KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHcpKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixrKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsayksYT9vKGYpOmMmJihmLmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I9YyxjPW51bGwpLHYuX2RyYWdnaW5nKXtpZih2Ll9kcmFnZ2luZz0hMSwobmV3IERhdGUpLmdldFRpbWUoKS12Ll9tb3VzZURvd25UaW1lPnkmJihtPU1hdGgubWF4KG0tMSwxKSksdi5fZHJhZ2dlZCl0LmRvbmVGbiYmdC5kb25lRm4oKTtlbHNlIGlmKHQuY2xpY2tGbiYmdC5jbGlja0ZuKG0scCksIWcpe3ZhciByO3RyeXtyPW5ldyBNb3VzZUV2ZW50KCJjbGljayIsZSl9Y2F0Y2godCl7dmFyIG49aChlKTsocj1kb2N1bWVudC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKSkuaW5pdE1vdXNlRXZlbnQoImNsaWNrIixlLmJ1YmJsZXMsZS5jYW5jZWxhYmxlLGUudmlldyxlLmRldGFpbCxlLnNjcmVlblgsZS5zY3JlZW5ZLG5bMF0sblsxXSxlLmN0cmxLZXksZS5hbHRLZXksZS5zaGlmdEtleSxlLm1ldGFLZXksZS5idXR0b24sZS5yZWxhdGVkVGFyZ2V0KX1kLmRpc3BhdGNoRXZlbnQocil9di5fZHJhZ2dpbmc9ITEsdi5fZHJhZ2dlZD0hMX1lbHNlIHYuX2RyYWdnZWQ9ITF9fSxsLmNvdmVyU2xpcD11fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3NzEsIi4vYWxpZ24iOjYwOCwiLi9jdXJzb3IiOjYwOSwiLi91bmhvdmVyIjo2MTEsImhhcy1ob3ZlciI6NDEyLCJoYXMtcGFzc2l2ZS1ldmVudHMiOjQxMywibW91c2UtZXZlbnQtb2Zmc2V0Ijo0Mzh9XSw2MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V2ZW50cyIpLGE9dCgiLi4vLi4vbGliL3Rocm90dGxlIiksaT10KCIuLi8uLi9saWIvZG9tIikuZ2V0R3JhcGhEaXYsbz10KCIuLi9meC9jb25zdGFudHMiKSxzPWUuZXhwb3J0cz17fTtzLndyYXBwZWQ9ZnVuY3Rpb24odCxlLHIpeyh0PWkodCkpLl9mdWxsTGF5b3V0JiZhLmNsZWFyKHQuX2Z1bGxMYXlvdXQuX3VpZCtvLkhPVkVSSUQpLHMucmF3KHQsZSxyKX0scy5yYXc9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGE9dC5faG92ZXJkYXRhO2V8fChlPXt9KSxlLnRhcmdldCYmITE9PT1uLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9iZWZvcmVob3ZlciIsZSl8fChyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksci5faG92ZXJsYXllci5zZWxlY3RBbGwoImNpcmNsZSIpLnJlbW92ZSgpLHQuX2hvdmVyZGF0YT12b2lkIDAsZS50YXJnZXQmJmEmJnQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDplLHBvaW50czphfSkpfX0seyIuLi8uLi9saWIvZG9tIjo3MDYsIi4uLy4uL2xpYi9ldmVudHMiOjcwNywiLi4vLi4vbGliL3Rocm90dGxlIjo3NDIsIi4uL2Z4L2NvbnN0YW50cyI6NjI1fV0sNjEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZGFzaD17dmFsVHlwZToic3RyaW5nIix2YWx1ZXM6WyJzb2xpZCIsImRvdCIsImRhc2giLCJsb25nZGFzaCIsImRhc2hkb3QiLCJsb25nZGFzaGRvdCJdLGRmbHQ6InNvbGlkIixlZGl0VHlwZToic3R5bGUifX0se31dLDYxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoInRpbnljb2xvcjIiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi9jb2xvciIpLGw9dCgiLi4vY29sb3JzY2FsZSIpLGM9dCgiLi4vLi4vbGliIiksdT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksZj10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLHA9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLGQ9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKSxnPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLHY9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlLG09ZS5leHBvcnRzPXt9O20uZm9udD1mdW5jdGlvbih0LGUscixuKXtjLmlzUGxhaW5PYmplY3QoZSkmJihuPWUuY29sb3Iscj1lLnNpemUsZT1lLmZhbWlseSksZSYmdC5zdHlsZSgiZm9udC1mYW1pbHkiLGUpLHIrMSYmdC5zdHlsZSgiZm9udC1zaXplIixyKyJweCIpLG4mJnQuY2FsbChzLmZpbGwsbil9LG0uc2V0UG9zaXRpb249ZnVuY3Rpb24odCxlLHIpe3QuYXR0cigieCIsZSkuYXR0cigieSIscil9LG0uc2V0U2l6ZT1mdW5jdGlvbih0LGUscil7dC5hdHRyKCJ3aWR0aCIsZSkuYXR0cigiaGVpZ2h0IixyKX0sbS5zZXRSZWN0PWZ1bmN0aW9uKHQsZSxyLG4sYSl7dC5jYWxsKG0uc2V0UG9zaXRpb24sZSxyKS5jYWxsKG0uc2V0U2l6ZSxuLGEpfSxtLnRyYW5zbGF0ZVBvaW50PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXIuYzJwKHQueCksbz1uLmMycCh0LnkpO3JldHVybiEhKGEoaSkmJmEobykmJmUubm9kZSgpKSYmKCJ0ZXh0Ij09PWUubm9kZSgpLm5vZGVOYW1lP2UuYXR0cigieCIsaSkuYXR0cigieSIsbyk6ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsIitvKyIpIiksITApfSxtLnRyYW5zbGF0ZVBvaW50cz1mdW5jdGlvbih0LGUscil7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPW4uc2VsZWN0KHRoaXMpO20udHJhbnNsYXRlUG9pbnQodCxhLGUscil9KX0sbS5oaWRlT3V0c2lkZVJhbmdlUG9pbnQ9ZnVuY3Rpb24odCxlLHIsbixhLGkpe2UuYXR0cigiZGlzcGxheSIsci5pc1B0V2l0aGluUmFuZ2UodCxhKSYmbi5pc1B0V2l0aGluUmFuZ2UodCxpKT9udWxsOiJub25lIil9LG0uaGlkZU91dHNpZGVSYW5nZVBvaW50cz1mdW5jdGlvbih0LGUpe2lmKGUuX2hhc0NsaXBPbkF4aXNGYWxzZSl7dmFyIHI9ZS54YXhpcyxhPWUueWF4aXM7dC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPWVbMF0udHJhY2Uscz1pLnhjYWxlbmRhcixsPWkueWNhbGVuZGFyLGM9by50cmFjZUlzKGksImJhci1saWtlIik/Ii5iYXJ0ZXh0IjoiLnBvaW50LC50ZXh0cG9pbnQiO3Quc2VsZWN0QWxsKGMpLmVhY2goZnVuY3Rpb24odCl7bS5oaWRlT3V0c2lkZVJhbmdlUG9pbnQodCxuLnNlbGVjdCh0aGlzKSxyLGEscyxsKX0pfSl9fSxtLmNyaXNwUm91bmQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlJiZhKGUpP3QuX2NvbnRleHQuc3RhdGljUGxvdD9lOmU8MT8xOk1hdGgucm91bmQoZSk6cnx8MH0sbS5zaW5nbGVMaW5lU3R5bGU9ZnVuY3Rpb24odCxlLHIsbixhKXtlLnN0eWxlKCJmaWxsIiwibm9uZSIpO3ZhciBpPSgoKHR8fFtdKVswXXx8e30pLnRyYWNlfHx7fSkubGluZXx8e30sbz1yfHxpLndpZHRofHwwLGw9YXx8aS5kYXNofHwiIjtzLnN0cm9rZShlLG58fGkuY29sb3IpLG0uZGFzaExpbmUoZSxsLG8pfSxtLmxpbmVHcm91cFN0eWxlPWZ1bmN0aW9uKHQsZSxyLGEpe3Quc3R5bGUoImZpbGwiLCJub25lIikuZWFjaChmdW5jdGlvbih0KXt2YXIgaT0oKCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmxpbmV8fHt9LG89ZXx8aS53aWR0aHx8MCxsPWF8fGkuZGFzaHx8IiI7bi5zZWxlY3QodGhpcykuY2FsbChzLnN0cm9rZSxyfHxpLmNvbG9yKS5jYWxsKG0uZGFzaExpbmUsbCxvKX0pfSxtLmRhc2hMaW5lPWZ1bmN0aW9uKHQsZSxyKXtyPStyfHwwLGU9bS5kYXNoU3R5bGUoZSxyKSx0LnN0eWxlKHsic3Ryb2tlLWRhc2hhcnJheSI6ZSwic3Ryb2tlLXdpZHRoIjpyKyJweCJ9KX0sbS5kYXNoU3R5bGU9ZnVuY3Rpb24odCxlKXtlPStlfHwxO3ZhciByPU1hdGgubWF4KGUsMyk7cmV0dXJuInNvbGlkIj09PXQ/dD0iIjoiZG90Ij09PXQ/dD1yKyJweCwiK3IrInB4IjoiZGFzaCI9PT10P3Q9MypyKyJweCwiKzMqcisicHgiOiJsb25nZGFzaCI9PT10P3Q9NSpyKyJweCwiKzUqcisicHgiOiJkYXNoZG90Ij09PXQ/dD0zKnIrInB4LCIrcisicHgsIityKyJweCwiK3IrInB4IjoibG9uZ2Rhc2hkb3QiPT09dCYmKHQ9NSpyKyJweCwiKzIqcisicHgsIityKyJweCwiKzIqcisicHgiKSx0fSxtLnNpbmdsZUZpbGxTdHlsZT1mdW5jdGlvbih0KXt2YXIgZT0oKChuLnNlbGVjdCh0Lm5vZGUoKSkuZGF0YSgpWzBdfHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmZpbGxjb2xvcjtlJiZ0LmNhbGwocy5maWxsLGUpfSxtLmZpbGxHcm91cFN0eWxlPWZ1bmN0aW9uKHQpe3Quc3R5bGUoInN0cm9rZS13aWR0aCIsMCkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKTt0WzBdLnRyYWNlJiZlLmNhbGwocy5maWxsLHRbMF0udHJhY2UuZmlsbGNvbG9yKX0pfTt2YXIgeT10KCIuL3N5bWJvbF9kZWZzIik7bS5zeW1ib2xOYW1lcz1bXSxtLnN5bWJvbEZ1bmNzPVtdLG0uc3ltYm9sTmVlZExpbmVzPXt9LG0uc3ltYm9sTm9Eb3Q9e30sbS5zeW1ib2xOb0ZpbGw9e30sbS5zeW1ib2xMaXN0PVtdLE9iamVjdC5rZXlzKHkpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9eVt0XSxyPWUubjttLnN5bWJvbExpc3QucHVzaChyLHQscisxMDAsdCsiLW9wZW4iKSxtLnN5bWJvbE5hbWVzW3JdPXQsbS5zeW1ib2xGdW5jc1tyXT1lLmYsZS5uZWVkTGluZSYmKG0uc3ltYm9sTmVlZExpbmVzW3JdPSEwKSxlLm5vRG90P20uc3ltYm9sTm9Eb3Rbcl09ITA6bS5zeW1ib2xMaXN0LnB1c2gocisyMDAsdCsiLWRvdCIsciszMDAsdCsiLW9wZW4tZG90IiksZS5ub0ZpbGwmJihtLnN5bWJvbE5vRmlsbFtyXT0hMCl9KTt2YXIgeD1tLnN5bWJvbE5hbWVzLmxlbmd0aCxiPSJNMCwwLjVMMC41LDBMMCwtMC41TC0wLjUsMFoiO2Z1bmN0aW9uIF8odCxlKXt2YXIgcj10JTEwMDtyZXR1cm4gbS5zeW1ib2xGdW5jc1tyXShlKSsodD49MjAwP2I6IiIpfW0uc3ltYm9sTnVtYmVyPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9MDt0LmluZGV4T2YoIi1vcGVuIik+MCYmKGU9MTAwLHQ9dC5yZXBsYWNlKCItb3BlbiIsIiIpKSx0LmluZGV4T2YoIi1kb3QiKT4wJiYoZSs9MjAwLHQ9dC5yZXBsYWNlKCItZG90IiwiIikpLCh0PW0uc3ltYm9sTmFtZXMuaW5kZXhPZih0KSk+PTAmJih0Kz1lKX1yZXR1cm4gdCUxMDA+PXh8fHQ+PTQwMD8wOk1hdGguZmxvb3IoTWF0aC5tYXgodCwwKSl9O3ZhciB3PXt4MToxLHgyOjAseTE6MCx5MjowfSxrPXt4MTowLHgyOjAseTE6MSx5MjowfSxUPW4uZm9ybWF0KCJ+LjFmIiksTT17cmFkaWFsOntub2RlOiJyYWRpYWxHcmFkaWVudCJ9LHJhZGlhbHJldmVyc2VkOntub2RlOiJyYWRpYWxHcmFkaWVudCIscmV2ZXJzZWQ6ITB9LGhvcml6b250YWw6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczp3fSxob3Jpem9udGFscmV2ZXJzZWQ6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczp3LHJldmVyc2VkOiEwfSx2ZXJ0aWNhbDp7bm9kZToibGluZWFyR3JhZGllbnQiLGF0dHJzOmt9LHZlcnRpY2FscmV2ZXJzZWQ6e25vZGU6ImxpbmVhckdyYWRpZW50IixhdHRyczprLHJldmVyc2VkOiEwfX07bS5ncmFkaWVudD1mdW5jdGlvbih0LGUscixhLG8sbCl7Zm9yKHZhciB1PW8ubGVuZ3RoLGg9TVthXSxmPW5ldyBBcnJheSh1KSxwPTA7cDx1O3ArKyloLnJldmVyc2VkP2ZbdS0xLXBdPVtUKDEwMCooMS1vW3BdWzBdKSksb1twXVsxXV06ZltwXT1bVCgxMDAqb1twXVswXSksb1twXVsxXV07dmFyIGQ9ZS5fZnVsbExheW91dCxnPSJnIitkLl91aWQrIi0iK3Isdj1kLl9kZWZzLnNlbGVjdCgiLmdyYWRpZW50cyIpLnNlbGVjdEFsbCgiIyIrZykuZGF0YShbYStmLmpvaW4oIjsiKV0sYy5pZGVudGl0eSk7di5leGl0KCkucmVtb3ZlKCksdi5lbnRlcigpLmFwcGVuZChoLm5vZGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtoLmF0dHJzJiZ0LmF0dHIoaC5hdHRycyksdC5hdHRyKCJpZCIsZyk7dmFyIGU9dC5zZWxlY3RBbGwoInN0b3AiKS5kYXRhKGYpO2UuZXhpdCgpLnJlbW92ZSgpLGUuZW50ZXIoKS5hcHBlbmQoInN0b3AiKSxlLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9aSh0WzFdKTtuLnNlbGVjdCh0aGlzKS5hdHRyKHtvZmZzZXQ6dFswXSsiJSIsInN0b3AtY29sb3IiOnMudGlueVJHQihlKSwic3RvcC1vcGFjaXR5IjplLmdldEFscGhhKCl9KX0pfSksdC5zdHlsZShsLEQoZyxlKSkuc3R5bGUobCsiLW9wYWNpdHkiLG51bGwpO3ZhciBtPWZ1bmN0aW9uKHQpe3JldHVybiIuIit0LmF0dHIoImNsYXNzIikucmVwbGFjZSgvXHMvZywiLiIpfSx5PW0obi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkpKyI+IittKHQpO2QuX2dyYWRpZW50VXJsUXVlcnlQYXJ0c1t5XT0xfSxtLmluaXRHcmFkaWVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtjLmVuc3VyZVNpbmdsZShlLl9kZWZzLCJnIiwiZ3JhZGllbnRzIikuc2VsZWN0QWxsKCJsaW5lYXJHcmFkaWVudCxyYWRpYWxHcmFkaWVudCIpLnJlbW92ZSgpLGUuX2dyYWRpZW50VXJsUXVlcnlQYXJ0cz17fX0sbS5wb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtpZih0LnNpemUoKSl7dmFyIGE9bS5tYWtlUG9pbnRTdHlsZUZucyhlKTt0LmVhY2goZnVuY3Rpb24odCl7bS5zaW5nbGVQb2ludFN0eWxlKHQsbi5zZWxlY3QodGhpcyksZSxhLHIpfSl9fSxtLnNpbmdsZVBvaW50U3R5bGU9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgaT1yLm1hcmtlcixvPWkubGluZTtpZihlLnN0eWxlKCJvcGFjaXR5IixuLnNlbGVjdGVkT3BhY2l0eUZuP24uc2VsZWN0ZWRPcGFjaXR5Rm4odCk6dm9pZCAwPT09dC5tbz9pLm9wYWNpdHk6dC5tbyksbi5tczJtcmMpe3ZhciBsO2w9InZhcmlvdXMiPT09dC5tc3x8InZhcmlvdXMiPT09aS5zaXplPzM6bi5tczJtcmModC5tcyksdC5tcmM9bCxuLnNlbGVjdGVkU2l6ZUZuJiYobD10Lm1yYz1uLnNlbGVjdGVkU2l6ZUZuKHQpKTt2YXIgdT1tLnN5bWJvbE51bWJlcih0Lm14fHxpLnN5bWJvbCl8fDA7dC5vbT11JTIwMD49MTAwLGUuYXR0cigiZCIsXyh1LGwpKX12YXIgaCxmLHAsZD0hMTtpZih0LnNvKXA9by5vdXRsaWVyd2lkdGgsZj1vLm91dGxpZXJjb2xvcixoPWkub3V0bGllcmNvbG9yO2Vsc2V7dmFyIGc9KG98fHt9KS53aWR0aDtwPSh0Lm1sdysxfHxnKzF8fCh0LnRyYWNlPyh0LnRyYWNlLm1hcmtlci5saW5lfHx7fSkud2lkdGg6MCkrMSktMXx8MCxmPSJtbGMiaW4gdD90Lm1sY2M9bi5saW5lU2NhbGUodC5tbGMpOmMuaXNBcnJheU9yVHlwZWRBcnJheShvLmNvbG9yKT9zLmRlZmF1bHRMaW5lOm8uY29sb3IsYy5pc0FycmF5T3JUeXBlZEFycmF5KGkuY29sb3IpJiYoaD1zLmRlZmF1bHRMaW5lLGQ9ITApLGg9Im1jImluIHQ/dC5tY2M9bi5tYXJrZXJTY2FsZSh0Lm1jKTppLmNvbG9yfHwicmdiYSgwLDAsMCwwKSIsbi5zZWxlY3RlZENvbG9yRm4mJihoPW4uc2VsZWN0ZWRDb2xvckZuKHQpKX1pZih0Lm9tKWUuY2FsbChzLnN0cm9rZSxoKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6KHB8fDEpKyJweCIsZmlsbDoibm9uZSJ9KTtlbHNle2Uuc3R5bGUoInN0cm9rZS13aWR0aCIsKHQuaXNCbGFuaz8wOnApKyJweCIpO3ZhciB2PWkuZ3JhZGllbnQseT10Lm1ndDtpZih5P2Q9ITA6eT12JiZ2LnR5cGUsQXJyYXkuaXNBcnJheSh5KSYmKHk9eVswXSxNW3ldfHwoeT0wKSkseSYmIm5vbmUiIT09eSl7dmFyIHg9dC5tZ2M7eD9kPSEwOng9di5jb2xvcjt2YXIgYj1yLnVpZDtkJiYoYis9Ii0iK3QuaSksbS5ncmFkaWVudChlLGEsYix5LFtbMCx4XSxbMSxoXV0sImZpbGwiKX1lbHNlIHMuZmlsbChlLGgpO3AmJnMuc3Ryb2tlKGUsZil9fSxtLm1ha2VQb2ludFN0eWxlRm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5tYXJrZXI7cmV0dXJuIGUubWFya2VyU2NhbGU9bS50cnlDb2xvcnNjYWxlKHIsIiIpLGUubGluZVNjYWxlPW0udHJ5Q29sb3JzY2FsZShyLCJsaW5lIiksby50cmFjZUlzKHQsInN5bWJvbHMiKSYmKGUubXMybXJjPWQuaXNCdWJibGUodCk/Zyh0KTpmdW5jdGlvbigpe3JldHVybihyLnNpemV8fDYpLzJ9KSx0LnNlbGVjdGVkcG9pbnRzJiZjLmV4dGVuZEZsYXQoZSxtLm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnModCkpLGV9LG0ubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXQuc2VsZWN0ZWR8fHt9LG49dC51bnNlbGVjdGVkfHx7fSxhPXQubWFya2VyfHx7fSxpPXIubWFya2VyfHx7fSxzPW4ubWFya2VyfHx7fSxsPWEub3BhY2l0eSx1PWkub3BhY2l0eSxoPXMub3BhY2l0eSxmPXZvaWQgMCE9PXUsZD12b2lkIDAhPT1oOyhjLmlzQXJyYXlPclR5cGVkQXJyYXkobCl8fGZ8fGQpJiYoZS5zZWxlY3RlZE9wYWNpdHlGbj1mdW5jdGlvbih0KXt2YXIgZT12b2lkIDA9PT10Lm1vP2Eub3BhY2l0eTp0Lm1vO3JldHVybiB0LnNlbGVjdGVkP2Y/dTplOmQ/aDpwKmV9KTt2YXIgZz1hLmNvbG9yLHY9aS5jb2xvcixtPXMuY29sb3I7KHZ8fG0pJiYoZS5zZWxlY3RlZENvbG9yRm49ZnVuY3Rpb24odCl7dmFyIGU9dC5tY2N8fGc7cmV0dXJuIHQuc2VsZWN0ZWQ/dnx8ZTptfHxlfSk7dmFyIHk9YS5zaXplLHg9aS5zaXplLGI9cy5zaXplLF89dm9pZCAwIT09eCx3PXZvaWQgMCE9PWI7cmV0dXJuIG8udHJhY2VJcyh0LCJzeW1ib2xzIikmJihffHx3KSYmKGUuc2VsZWN0ZWRTaXplRm49ZnVuY3Rpb24odCl7dmFyIGU9dC5tcmN8fHkvMjtyZXR1cm4gdC5zZWxlY3RlZD9fP3gvMjplOnc/Yi8yOmV9KSxlfSxtLm1ha2VTZWxlY3RlZFRleHRTdHlsZUZucz1mdW5jdGlvbih0KXt2YXIgZT17fSxyPXQuc2VsZWN0ZWR8fHt9LG49dC51bnNlbGVjdGVkfHx7fSxhPXQudGV4dGZvbnR8fHt9LGk9ci50ZXh0Zm9udHx8e30sbz1uLnRleHRmb250fHx7fSxsPWEuY29sb3IsYz1pLmNvbG9yLHU9by5jb2xvcjtyZXR1cm4gZS5zZWxlY3RlZFRleHRDb2xvckZuPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGN8fGw7cmV0dXJuIHQuc2VsZWN0ZWQ/Y3x8ZTp1fHwoYz9lOnMuYWRkT3BhY2l0eShlLHApKX0sZX0sbS5zZWxlY3RlZFBvaW50U3R5bGU9ZnVuY3Rpb24odCxlKXtpZih0LnNpemUoKSYmZS5zZWxlY3RlZHBvaW50cyl7dmFyIHI9bS5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKGUpLGE9ZS5tYXJrZXJ8fHt9LGk9W107ci5zZWxlY3RlZE9wYWNpdHlGbiYmaS5wdXNoKGZ1bmN0aW9uKHQsZSl7dC5zdHlsZSgib3BhY2l0eSIsci5zZWxlY3RlZE9wYWNpdHlGbihlKSl9KSxyLnNlbGVjdGVkQ29sb3JGbiYmaS5wdXNoKGZ1bmN0aW9uKHQsZSl7cy5maWxsKHQsci5zZWxlY3RlZENvbG9yRm4oZSkpfSksci5zZWxlY3RlZFNpemVGbiYmaS5wdXNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5teHx8YS5zeW1ib2x8fDAsaT1yLnNlbGVjdGVkU2l6ZUZuKGUpO3QuYXR0cigiZCIsXyhtLnN5bWJvbE51bWJlcihuKSxpKSksZS5tcmMyPWl9KSxpLmxlbmd0aCYmdC5lYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPTA7cjxpLmxlbmd0aDtyKyspaVtyXShlLHQpfSl9fSxtLnRyeUNvbG9yc2NhbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lP2MubmVzdGVkUHJvcGVydHkodCxlKS5nZXQoKTp0O2lmKHIpe3ZhciBuPXIuY29sb3I7aWYoKHIuY29sb3JzY2FsZXx8ci5fY29sb3JBeCkmJmMuaXNBcnJheU9yVHlwZWRBcnJheShuKSlyZXR1cm4gbC5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2Uocil9cmV0dXJuIGMuaWRlbnRpdHl9O3ZhciBBPXtzdGFydDoxLGVuZDotMSxtaWRkbGU6MCxib3R0b206MSx0b3A6LTF9O2Z1bmN0aW9uIFModCxlLHIsYSl7dmFyIGk9bi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSksbz0tMSE9PWUuaW5kZXhPZigidG9wIik/InRvcCI6LTEhPT1lLmluZGV4T2YoImJvdHRvbSIpPyJib3R0b20iOiJtaWRkbGUiLHM9LTEhPT1lLmluZGV4T2YoImxlZnQiKT8iZW5kIjotMSE9PWUuaW5kZXhPZigicmlnaHQiKT8ic3RhcnQiOiJtaWRkbGUiLGw9YT9hLy44KzE6MCxjPSh1LmxpbmVDb3VudCh0KS0xKSpmKzEsaD1BW3NdKmwscD0uNzUqcitBW29dKmwrKEFbb10tMSkqYypyLzI7dC5hdHRyKCJ0ZXh0LWFuY2hvciIscyksaS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitoKyIsIitwKyIpIil9ZnVuY3Rpb24gRSh0LGUpe3ZhciByPXQudHN8fGUudGV4dGZvbnQuc2l6ZTtyZXR1cm4gYShyKSYmcj4wP3I6MH1tLnRleHRQb2ludFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtpZih0LnNpemUoKSl7dmFyIGE7aWYoZS5zZWxlY3RlZHBvaW50cyl7dmFyIGk9bS5tYWtlU2VsZWN0ZWRUZXh0U3R5bGVGbnMoZSk7YT1pLnNlbGVjdGVkVGV4dENvbG9yRm59dmFyIG89ZS50ZXh0dGVtcGxhdGUscz1yLl9mdWxsTGF5b3V0O3QuZWFjaChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxsPW8/Yy5leHRyYWN0T3B0aW9uKHQsZSwidHh0IiwidGV4dHRlbXBsYXRlIik6Yy5leHRyYWN0T3B0aW9uKHQsZSwidHgiLCJ0ZXh0Iik7aWYobHx8MD09PWwpe2lmKG8pe3ZhciBoPWUuX21vZHVsZS5mb3JtYXRMYWJlbHM/ZS5fbW9kdWxlLmZvcm1hdExhYmVscyh0LGUscyk6e30sZj17fTt2KGYsZSx0LmkpO3ZhciBwPWUuX21ldGF8fHt9O2w9Yy50ZXh0dGVtcGxhdGVTdHJpbmcobCxoLHMuX2QzbG9jYWxlLGYsdCxwKX12YXIgZD10LnRwfHxlLnRleHRwb3NpdGlvbixnPUUodCxlKSx5PWE/YSh0KTp0LnRjfHxlLnRleHRmb250LmNvbG9yO2kuY2FsbChtLmZvbnQsdC50Znx8ZS50ZXh0Zm9udC5mYW1pbHksZyx5KS50ZXh0KGwpLmNhbGwodS5jb252ZXJ0VG9Uc3BhbnMscikuY2FsbChTLGQsZyx0Lm1yYyl9ZWxzZSBpLnJlbW92ZSgpfSl9fSxtLnNlbGVjdGVkVGV4dFN0eWxlPWZ1bmN0aW9uKHQsZSl7aWYodC5zaXplKCkmJmUuc2VsZWN0ZWRwb2ludHMpe3ZhciByPW0ubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zKGUpO3QuZWFjaChmdW5jdGlvbih0KXt2YXIgYT1uLnNlbGVjdCh0aGlzKSxpPXIuc2VsZWN0ZWRUZXh0Q29sb3JGbih0KSxvPXQudHB8fGUudGV4dHBvc2l0aW9uLGw9RSh0LGUpO3MuZmlsbChhLGkpLFMoYSxvLGwsdC5tcmMyfHx0Lm1yYyl9KX19O3ZhciBMPS41O2Z1bmN0aW9uIEModCxlLHIsYSl7dmFyIGk9dFswXS1lWzBdLG89dFsxXS1lWzFdLHM9clswXS1lWzBdLGw9clsxXS1lWzFdLGM9TWF0aC5wb3coaSppK28qbyxMLzIpLHU9TWF0aC5wb3cocypzK2wqbCxMLzIpLGg9KHUqdSppLWMqYypzKSphLGY9KHUqdSpvLWMqYypsKSphLHA9Myp1KihjK3UpLGQ9MypjKihjK3UpO3JldHVybltbbi5yb3VuZChlWzBdKyhwJiZoL3ApLDIpLG4ucm91bmQoZVsxXSsocCYmZi9wKSwyKV0sW24ucm91bmQoZVswXS0oZCYmaC9kKSwyKSxuLnJvdW5kKGVbMV0tKGQmJmYvZCksMildXX1tLnNtb290aG9wZW49ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwzKXJldHVybiJNIit0LmpvaW4oIkwiKTt2YXIgcixuPSJNIit0WzBdLGE9W107Zm9yKHI9MTtyPHQubGVuZ3RoLTE7cisrKWEucHVzaChDKHRbci0xXSx0W3JdLHRbcisxXSxlKSk7Zm9yKG4rPSJRIithWzBdWzBdKyIgIit0WzFdLHI9MjtyPHQubGVuZ3RoLTE7cisrKW4rPSJDIithW3ItMl1bMV0rIiAiK2Fbci0xXVswXSsiICIrdFtyXTtyZXR1cm4gbis9IlEiK2FbdC5sZW5ndGgtM11bMV0rIiAiK3RbdC5sZW5ndGgtMV19LG0uc21vb3RoY2xvc2VkPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MylyZXR1cm4iTSIrdC5qb2luKCJMIikrIloiO3ZhciByLG49Ik0iK3RbMF0sYT10Lmxlbmd0aC0xLGk9W0ModFthXSx0WzBdLHRbMV0sZSldO2ZvcihyPTE7cjxhO3IrKylpLnB1c2goQyh0W3ItMV0sdFtyXSx0W3IrMV0sZSkpO2ZvcihpLnB1c2goQyh0W2EtMV0sdFthXSx0WzBdLGUpKSxyPTE7cjw9YTtyKyspbis9IkMiK2lbci0xXVsxXSsiICIraVtyXVswXSsiICIrdFtyXTtyZXR1cm4gbis9IkMiK2lbYV1bMV0rIiAiK2lbMF1bMF0rIiAiK3RbMF0rIloifTt2YXIgUD17aHY6ZnVuY3Rpb24odCxlKXtyZXR1cm4iSCIrbi5yb3VuZChlWzBdLDIpKyJWIituLnJvdW5kKGVbMV0sMil9LHZoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIlYiK24ucm91bmQoZVsxXSwyKSsiSCIrbi5yb3VuZChlWzBdLDIpfSxodmg6ZnVuY3Rpb24odCxlKXtyZXR1cm4iSCIrbi5yb3VuZCgodFswXStlWzBdKS8yLDIpKyJWIituLnJvdW5kKGVbMV0sMikrIkgiK24ucm91bmQoZVswXSwyKX0sdmh2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIlYiK24ucm91bmQoKHRbMV0rZVsxXSkvMiwyKSsiSCIrbi5yb3VuZChlWzBdLDIpKyJWIituLnJvdW5kKGVbMV0sMil9fSxPPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIkwiK24ucm91bmQoZVswXSwyKSsiLCIrbi5yb3VuZChlWzFdLDIpfTttLnN0ZXBzPWZ1bmN0aW9uKHQpe3ZhciBlPVBbdF18fE87cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0iTSIrbi5yb3VuZCh0WzBdWzBdLDIpKyIsIituLnJvdW5kKHRbMF1bMV0sMiksYT0xO2E8dC5sZW5ndGg7YSsrKXIrPWUodFthLTFdLHRbYV0pO3JldHVybiByfX0sbS5tYWtlVGVzdGVyPWZ1bmN0aW9uKCl7dmFyIHQ9Yy5lbnN1cmVTaW5nbGVCeUlkKG4uc2VsZWN0KCJib2R5IiksInN2ZyIsImpzLXBsb3RseS10ZXN0ZXIiLGZ1bmN0aW9uKHQpe3QuYXR0cihoLnN2Z0F0dHJzKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiItMTAwMDBweCIsdG9wOiItMTAwMDBweCIsd2lkdGg6IjkwMDBweCIsaGVpZ2h0OiI5MDAwcHgiLCJ6LWluZGV4IjoiMSJ9KX0pLGU9Yy5lbnN1cmVTaW5nbGUodCwicGF0aCIsImpzLXJlZmVyZW5jZS1wb2ludCIsZnVuY3Rpb24odCl7dC5hdHRyKCJkIiwiTTAsMEgxVjFIMFoiKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6MCxmaWxsOiJibGFjayJ9KX0pO20udGVzdGVyPXQsbS50ZXN0cmVmPWV9LG0uc2F2ZWRCQm94ZXM9e307dmFyIHo9MDtmdW5jdGlvbiBJKHQpe3ZhciBlPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXVuZm9ybWF0dGVkIik7aWYobnVsbCE9PWUpcmV0dXJuIGUrdC5nZXRBdHRyaWJ1dGUoImRhdGEtbWF0aCIpK3QuZ2V0QXR0cmlidXRlKCJ0ZXh0LWFuY2hvciIpK3QuZ2V0QXR0cmlidXRlKCJzdHlsZSIpfWZ1bmN0aW9uIEQodCxlKXtpZighdClyZXR1cm4gbnVsbDt2YXIgcj1lLl9jb250ZXh0O3JldHVybiJ1cmwoJyIrKHIuX2V4cG9ydGVkUGxvdD8iIjpyLl9iYXNlVXJsfHwiIikrIiMiK3QrIicpIn1tLmJCb3g9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLGksbztpZihyfHwocj1JKHQpKSxyKXtpZihhPW0uc2F2ZWRCQm94ZXNbcl0pcmV0dXJuIGMuZXh0ZW5kRmxhdCh7fSxhKX1lbHNlIGlmKDE9PT10LmNoaWxkTm9kZXMubGVuZ3RoKXt2YXIgcz10LmNoaWxkTm9kZXNbMF07aWYocj1JKHMpKXt2YXIgbD0rcy5nZXRBdHRyaWJ1dGUoIngiKXx8MCxoPStzLmdldEF0dHJpYnV0ZSgieSIpfHwwLGY9cy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpO2lmKCFmKXt2YXIgcD1tLmJCb3gocywhMSxyKTtyZXR1cm4gbCYmKHAubGVmdCs9bCxwLnJpZ2h0Kz1sKSxoJiYocC50b3ArPWgscC5ib3R0b20rPWgpLHB9aWYocis9In4iK2wrIn4iK2grIn4iK2YsYT1tLnNhdmVkQkJveGVzW3JdKXJldHVybiBjLmV4dGVuZEZsYXQoe30sYSl9fWU/aT10OihvPW0udGVzdGVyLm5vZGUoKSxpPXQuY2xvbmVOb2RlKCEwKSxvLmFwcGVuZENoaWxkKGkpKSxuLnNlbGVjdChpKS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLmNhbGwodS5wb3NpdGlvblRleHQsMCwwKTt2YXIgZD1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGc9bS50ZXN0cmVmLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlfHxvLnJlbW92ZUNoaWxkKGkpO3ZhciB2PXtoZWlnaHQ6ZC5oZWlnaHQsd2lkdGg6ZC53aWR0aCxsZWZ0OmQubGVmdC1nLmxlZnQsdG9wOmQudG9wLWcudG9wLHJpZ2h0OmQucmlnaHQtZy5sZWZ0LGJvdHRvbTpkLmJvdHRvbS1nLnRvcH07cmV0dXJuIHo+PTFlNCYmKG0uc2F2ZWRCQm94ZXM9e30sej0wKSxyJiYobS5zYXZlZEJCb3hlc1tyXT12KSx6KyssYy5leHRlbmRGbGF0KHt9LHYpfSxtLnNldENsaXBVcmw9ZnVuY3Rpb24odCxlLHIpe3QuYXR0cigiY2xpcC1wYXRoIixEKGUscikpfSxtLmdldFRyYW5zbGF0ZT1mdW5jdGlvbih0KXt2YXIgZT0odFt0LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiXSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKC8uKlxidHJhbnNsYXRlXCgoLT9cZCpcLj9cZCopW14tXGRdKigtP1xkKlwuP1xkKilbXlxkXS4qLyxmdW5jdGlvbih0LGUscil7cmV0dXJuW2Uscl0uam9pbigiICIpfSkuc3BsaXQoIiAiKTtyZXR1cm57eDorZVswXXx8MCx5OitlWzFdfHwwfX0sbS5zZXRUcmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSIsYT10LmF0dHI/ImF0dHIiOiJzZXRBdHRyaWJ1dGUiLGk9dFtuXSgidHJhbnNmb3JtIil8fCIiO3JldHVybiBlPWV8fDAscj1yfHwwLGk9aS5yZXBsYWNlKC8oXGJ0cmFuc2xhdGVcKC4qP1wpOz8pLywiIikudHJpbSgpLGk9KGkrPSIgdHJhbnNsYXRlKCIrZSsiLCAiK3IrIikiKS50cmltKCksdFthXSgidHJhbnNmb3JtIixpKSxpfSxtLmdldFNjYWxlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0W3QuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSJdKCJ0cmFuc2Zvcm0iKXx8IiIpLnJlcGxhY2UoLy4qXGJzY2FsZVwoKFxkKlwuP1xkKilbXlxkXSooXGQqXC4/XGQqKVteXGRdLiovLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZSxyXS5qb2luKCIgIil9KS5zcGxpdCgiICIpO3JldHVybnt4OitlWzBdfHwxLHk6K2VbMV18fDF9fSxtLnNldFNjYWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLGE9dC5hdHRyPyJhdHRyIjoic2V0QXR0cmlidXRlIixpPXRbbl0oInRyYW5zZm9ybSIpfHwiIjtyZXR1cm4gZT1lfHwxLHI9cnx8MSxpPWkucmVwbGFjZSgvKFxic2NhbGVcKC4qP1wpOz8pLywiIikudHJpbSgpLGk9KGkrPSIgc2NhbGUoIitlKyIsICIrcisiKSIpLnRyaW0oKSx0W2FdKCJ0cmFuc2Zvcm0iLGkpLGl9O3ZhciBSPS9ccypzYy4qLzttLnNldFBvaW50R3JvdXBTY2FsZT1mdW5jdGlvbih0LGUscil7aWYoZT1lfHwxLHI9cnx8MSx0KXt2YXIgbj0xPT09ZSYmMT09PXI/IiI6IiBzY2FsZSgiK2UrIiwiK3IrIikiO3QuZWFjaChmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKFIsIiIpO3Q9KHQrPW4pLnRyaW0oKSx0aGlzLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KX0pfX07dmFyIEY9L3RyYW5zbGF0ZVwoW14pXSpcKVxzKiQvO20uc2V0VGV4dFBvaW50c1NjYWxlPWZ1bmN0aW9uKHQsZSxyKXt0JiZ0LmVhY2goZnVuY3Rpb24oKXt2YXIgdCxhPW4uc2VsZWN0KHRoaXMpLGk9YS5zZWxlY3QoInRleHQiKTtpZihpLm5vZGUoKSl7dmFyIG89cGFyc2VGbG9hdChpLmF0dHIoIngiKXx8MCkscz1wYXJzZUZsb2F0KGkuYXR0cigieSIpfHwwKSxsPShhLmF0dHIoInRyYW5zZm9ybSIpfHwiIikubWF0Y2goRik7dD0xPT09ZSYmMT09PXI/W106WyJ0cmFuc2xhdGUoIitvKyIsIitzKyIpIiwic2NhbGUoIitlKyIsIityKyIpIiwidHJhbnNsYXRlKCIrLW8rIiwiKy1zKyIpIl0sbCYmdC5wdXNoKGwpLGEuYXR0cigidHJhbnNmb3JtIix0LmpvaW4oIiAiKSl9fSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6NjI3LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2ODYsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjY5MiwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjY5NCwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQxLCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuLi8uLi90cmFjZXMvc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjExMzcsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjoxMTQ0LCIuLi9jb2xvciI6NTkyLCIuLi9jb2xvcnNjYWxlIjo2MDQsIi4vc3ltYm9sX2RlZnMiOjYxNCxkMzoxNjUsImZhc3QtaXNudW1lcmljIjoyMjgsdGlueWNvbG9yMjo1MzZ9XSw2MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKTtlLmV4cG9ydHM9e2NpcmNsZTp7bjowLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsMEEiK2UrIiwiK2UrIiAwIDEsMSAwLC0iK2UrIkEiK2UrIiwiK2UrIiAwIDAsMSAiK2UrIiwwWiJ9fSxzcXVhcmU6e246MSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiSC0iK2UrIlYtIitlKyJIIitlKyJaIn19LGRpYW1vbmQ6e246MixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMik7cmV0dXJuIk0iK2UrIiwwTDAsIitlKyJMLSIrZSsiLDBMMCwtIitlKyJaIn19LGNyb3NzOntuOjMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC40KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNIityKyIsIitlKyJIIitlKyJWIityKyJILSIrZSsiViIrZSsiSC0iK3IrIlYtIitlKyJILSIrZSsiVi0iK3IrIkgiK2UrIlYtIitlKyJIIityKyJaIn19LHg6e246NCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjgqdC9NYXRoLnNxcnQoMiksMikscj0ibCIrZSsiLCIrZSxhPSJsIitlKyIsLSIrZSxpPSJsLSIrZSsiLC0iK2Usbz0ibC0iK2UrIiwiK2U7cmV0dXJuIk0wLCIrZStyK2EraSthK2krbytpK28rcitvK3IrIloifX0sInRyaWFuZ2xlLXVwIjp7bjo1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrZSsiLCIrbi5yb3VuZCh0LzIsMikrIkgiK2UrIkwwLC0iK24ucm91bmQodCwyKSsiWiJ9fSwidHJpYW5nbGUtZG93biI6e246NixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTS0iK2UrIiwtIituLnJvdW5kKHQvMiwyKSsiSCIrZSsiTDAsIituLnJvdW5kKHQsMikrIloifX0sInRyaWFuZ2xlLWxlZnQiOntuOjcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0iK24ucm91bmQodC8yLDIpKyIsLSIrZSsiViIrZSsiTC0iK24ucm91bmQodCwyKSsiLDBaIn19LCJ0cmlhbmdsZS1yaWdodCI6e246OCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTS0iK24ucm91bmQodC8yLDIpKyIsLSIrZSsiViIrZSsiTCIrbi5yb3VuZCh0LDIpKyIsMFoifX0sInRyaWFuZ2xlLW5lIjp7bjo5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTS0iK3IrIiwtIitlKyJIIitlKyJWIityKyJaIn19LCJ0cmlhbmdsZS1zZSI6e246MTAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNIitlKyIsLSIrcisiViIrZSsiSC0iK3IrIloifX0sInRyaWFuZ2xlLXN3Ijp7bjoxMSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0iK3IrIiwiK2UrIkgtIitlKyJWLSIrcisiWiJ9fSwidHJpYW5nbGUtbnciOntuOjEyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTS0iK2UrIiwiK3IrIlYtIitlKyJIIityKyJaIn19LHBlbnRhZ29uOntuOjEzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOTUxKnQsMikscj1uLnJvdW5kKC41ODgqdCwyKSxhPW4ucm91bmQoLXQsMiksaT1uLnJvdW5kKC0uMzA5KnQsMik7cmV0dXJuIk0iK2UrIiwiK2krIkwiK3IrIiwiK24ucm91bmQoLjgwOSp0LDIpKyJILSIrcisiTC0iK2UrIiwiK2krIkwwLCIrYSsiWiJ9fSxoZXhhZ29uOntuOjE0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0LzIsMiksYT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpLzIsMik7cmV0dXJuIk0iK2ErIiwtIityKyJWIityKyJMMCwiK2UrIkwtIithKyIsIityKyJWLSIrcisiTDAsLSIrZSsiWiJ9fSxoZXhhZ29uMjp7bjoxNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC8yLDIpLGE9bi5yb3VuZCh0Kk1hdGguc3FydCgzKS8yLDIpO3JldHVybiJNLSIrcisiLCIrYSsiSCIrcisiTCIrZSsiLDBMIityKyIsLSIrYSsiSC0iK3IrIkwtIitlKyIsMFoifX0sb2N0YWdvbjp7bjoxNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjkyNCp0LDIpLHI9bi5yb3VuZCguMzgzKnQsMik7cmV0dXJuIk0tIityKyIsLSIrZSsiSCIrcisiTCIrZSsiLC0iK3IrIlYiK3IrIkwiK3IrIiwiK2UrIkgtIityKyJMLSIrZSsiLCIrcisiVi0iK3IrIloifX0sc3Rhcjp7bjoxNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPTEuNCp0LHI9bi5yb3VuZCguMjI1KmUsMiksYT1uLnJvdW5kKC45NTEqZSwyKSxpPW4ucm91bmQoLjM2MyplLDIpLG89bi5yb3VuZCguNTg4KmUsMikscz1uLnJvdW5kKC1lLDIpLGw9bi5yb3VuZCgtLjMwOSplLDIpLGM9bi5yb3VuZCguMTE4KmUsMiksdT1uLnJvdW5kKC44MDkqZSwyKTtyZXR1cm4iTSIrcisiLCIrbCsiSCIrYSsiTCIraSsiLCIrYysiTCIrbysiLCIrdSsiTDAsIituLnJvdW5kKC4zODIqZSwyKSsiTC0iK28rIiwiK3UrIkwtIitpKyIsIitjKyJMLSIrYSsiLCIrbCsiSC0iK3IrIkwwLCIrcysiWiJ9fSxoZXhhZ3JhbTp7bjoxOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjY2KnQsMikscj1uLnJvdW5kKC4zOCp0LDIpLGE9bi5yb3VuZCguNzYqdCwyKTtyZXR1cm4iTS0iK2ErIiwwbC0iK3IrIiwtIitlKyJoIithKyJsIityKyIsLSIrZSsibCIrcisiLCIrZSsiaCIrYSsibC0iK3IrIiwiK2UrImwiK3IrIiwiK2UrImgtIithKyJsLSIrcisiLCIrZSsibC0iK3IrIiwtIitlKyJoLSIrYSsiWiJ9fSwic3Rhci10cmlhbmdsZS11cCI6e246MTksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpKi44LDIpLHI9bi5yb3VuZCguOCp0LDIpLGE9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoNCp0LDIpLG89IkEgIitpKyIsIitpKyIgMCAwIDEgIjtyZXR1cm4iTS0iK2UrIiwiK3IrbytlKyIsIityK28rIjAsLSIrYStvKyItIitlKyIsIityKyJaIn19LCJzdGFyLXRyaWFuZ2xlLWRvd24iOntuOjIwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0Kk1hdGguc3FydCgzKSouOCwyKSxyPW4ucm91bmQoLjgqdCwyKSxhPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKDQqdCwyKSxvPSJBICIraSsiLCIraSsiIDAgMCAxICI7cmV0dXJuIk0iK2UrIiwtIityK28rIi0iK2UrIiwtIityK28rIjAsIithK28rZSsiLC0iK3IrIloifX0sInN0YXItc3F1YXJlIjp7bjoyMSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4xKnQsMikscj1uLnJvdW5kKDIqdCwyKSxhPSJBICIrcisiLCIrcisiIDAgMCAxICI7cmV0dXJuIk0tIitlKyIsLSIrZSthKyItIitlKyIsIitlK2ErZSsiLCIrZSthK2UrIiwtIitlK2ErIi0iK2UrIiwtIitlKyJaIn19LCJzdGFyLWRpYW1vbmQiOntuOjIyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKSxyPW4ucm91bmQoMS45KnQsMiksYT0iQSAiK3IrIiwiK3IrIiAwIDAgMSAiO3JldHVybiJNLSIrZSsiLDAiK2ErIjAsIitlK2ErZSsiLDAiK2ErIjAsLSIrZSthKyItIitlKyIsMFoifX0sImRpYW1vbmQtdGFsbCI6e246MjMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC43KnQsMikscj1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNMCwiK3IrIkwiK2UrIiwwTDAsLSIrcisiTC0iK2UrIiwwWiJ9fSwiZGlhbW9uZC13aWRlIjp7bjoyNCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMikscj1uLnJvdW5kKC43KnQsMik7cmV0dXJuIk0wLCIrcisiTCIrZSsiLDBMMCwtIityKyJMLSIrZSsiLDBaIn19LGhvdXJnbGFzczp7bjoyNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiSC0iK2UrIkwiK2UrIiwtIitlKyJILSIrZSsiWiJ9LG5vRG90OiEwfSxib3d0aWU6e246MjYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIlYtIitlKyJMLSIrZSsiLCIrZSsiVi0iK2UrIloifSxub0RvdDohMH0sImNpcmNsZS1jcm9zcyI6e246MjcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2UrIk0iK2UrIiwwQSIrZSsiLCIrZSsiIDAgMSwxIDAsLSIrZSsiQSIrZSsiLCIrZSsiIDAgMCwxICIrZSsiLDBaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJjaXJjbGUteCI6e246MjgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMikscj1uLnJvdW5kKHQvTWF0aC5zcXJ0KDIpLDIpO3JldHVybiJNIityKyIsIityKyJMLSIrcisiLC0iK3IrIk0iK3IrIiwtIityKyJMLSIrcisiLCIrcisiTSIrZSsiLDBBIitlKyIsIitlKyIgMCAxLDEgMCwtIitlKyJBIitlKyIsIitlKyIgMCAwLDEgIitlKyIsMFoifSxuZWVkTGluZTohMCxub0RvdDohMH0sInNxdWFyZS1jcm9zcyI6e246MjksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2UrIk0iK2UrIiwiK2UrIkgtIitlKyJWLSIrZSsiSCIrZSsiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwic3F1YXJlLXgiOntuOjMwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2UrIk0iK2UrIiwtIitlKyJMLSIrZSsiLCIrZSsiTSIrZSsiLCIrZSsiSC0iK2UrIlYtIitlKyJIIitlKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJkaWFtb25kLWNyb3NzIjp7bjozMSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMik7cmV0dXJuIk0iK2UrIiwwTDAsIitlKyJMLSIrZSsiLDBMMCwtIitlKyJaTTAsLSIrZSsiViIrZSsiTS0iK2UrIiwwSCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJkaWFtb25kLXgiOntuOjMyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKSxyPW4ucm91bmQoLjY1KnQsMik7cmV0dXJuIk0iK2UrIiwwTDAsIitlKyJMLSIrZSsiLDBMMCwtIitlKyJaTS0iK3IrIiwtIityKyJMIityKyIsIityKyJNLSIrcisiLCIrcisiTCIrcisiLC0iK3J9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiY3Jvc3MtdGhpbiI6e246MzMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJ4LXRoaW4iOntuOjM0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2UrIk0iK2UrIiwtIitlKyJMLSIrZSsiLCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxhc3Rlcmlzazp7bjozNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKC44NSp0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlKyJNIityKyIsIityKyJMLSIrcisiLC0iK3IrIk0iK3IrIiwtIityKyJMLSIrcisiLCIrcn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxoYXNoOntuOjM2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LzIsMikscj1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK3IrIlYtIityKyJtLSIrcisiLDBWIityKyJNIityKyIsIitlKyJILSIrcisibTAsLSIrcisiSCIrcn0sbmVlZExpbmU6ITAsbm9GaWxsOiEwfSwieS11cCI6e246MzcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxhPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTS0iK2UrIiwiK2ErIkwwLDBNIitlKyIsIithKyJMMCwwTTAsLSIrcisiTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktZG93biI6e246MzgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxhPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTS0iK2UrIiwtIithKyJMMCwwTSIrZSsiLC0iK2ErIkwwLDBNMCwiK3IrIkwwLDAifSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJ5LWxlZnQiOntuOjM5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksYT1uLnJvdW5kKC44KnQsMik7cmV0dXJuIk0iK2ErIiwiK2UrIkwwLDBNIithKyIsLSIrZSsiTDAsME0tIityKyIsMEwwLDAifSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJ5LXJpZ2h0Ijp7bjo0MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGE9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIrYSsiLCIrZSsiTDAsME0tIithKyIsLSIrZSsiTDAsME0iK3IrIiwwTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtZXciOntuOjQxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTSIrZSsiLDBILSIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwibGluZS1ucyI6e246NDIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLW5lIjp7bjo0MyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLC0iK2UrIkwtIitlKyIsIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLW53Ijp7bjo0NCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiTC0iK2UrIiwtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9fX0se2QzOjE2NX1dLDYxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJjYWxjIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGVyY2VudCIsImNvbnN0YW50Iiwic3FydCIsImRhdGEiXSxlZGl0VHlwZToiY2FsYyJ9LHN5bW1ldHJpYzp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxhcnJheTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxhcnJheW1pbnVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZW1pbnVzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSx0cmFjZXJlZjp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJzdHlsZSJ9LHRyYWNlcmVmbWludXM6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToic3R5bGUifSxjb3B5X3lzdHlsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InBsb3QifSxjb3B5X3pzdHlsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InN0eWxlIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOntvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJzdHlsZSJ9fX19LHt9XSw2MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuL2NvbXB1dGVfZXJyb3IiKTtmdW5jdGlvbiBsKHQsZSxyLGEpe3ZhciBsPWVbImVycm9yXyIrYV18fHt9LGM9W107aWYobC52aXNpYmxlJiYtMSE9PVsibGluZWFyIiwibG9nIl0uaW5kZXhPZihyLnR5cGUpKXtmb3IodmFyIHU9cyhsKSxoPTA7aDx0Lmxlbmd0aDtoKyspe3ZhciBmPXRbaF0scD1mLmk7aWYodm9pZCAwPT09cClwPWg7ZWxzZSBpZihudWxsPT09cCljb250aW51ZTt2YXIgZD1mW2FdO2lmKG4oci5jMmwoZCkpKXt2YXIgZz11KGQscCk7aWYobihnWzBdKSYmbihnWzFdKSl7dmFyIHY9ZlthKyJzIl09ZC1nWzBdLG09ZlthKyJoIl09ZCtnWzFdO2MucHVzaCh2LG0pfX19dmFyIHk9ci5faWQseD1lLl9leHRyZW1lc1t5XSxiPWkuZmluZEV4dHJlbWVzKHIsYyxvLmV4dGVuZEZsYXQoe3RvemVybzp4Lm9wdHMudG96ZXJvfSx7cGFkZGVkOiEwfSkpO3gubWluPXgubWluLmNvbmNhdChiLm1pbikseC5tYXg9eC5tYXguY29uY2F0KGIubWF4KX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNhbGNkYXRhLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxvPW5bMF0udHJhY2U7aWYoITA9PT1vLnZpc2libGUmJmEudHJhY2VJcyhvLCJlcnJvckJhcnNPSyIpKXt2YXIgcz1pLmdldEZyb21JZCh0LG8ueGF4aXMpLGM9aS5nZXRGcm9tSWQodCxvLnlheGlzKTtsKG4sbyxzLCJ4IiksbChuLG8sYywieSIpfX19fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuL2NvbXB1dGVfZXJyb3IiOjYxNywiZmFzdC1pc251bWVyaWMiOjIyOH1dLDYxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuInBlcmNlbnQiPT09dD9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModCplLzEwMCl9OiJjb25zdGFudCI9PT10P2Z1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKGUpfToic3FydCI9PT10P2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5hYnModCkpfTp2b2lkIDB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHlwZSxyPXQuc3ltbWV0cmljO2lmKCJkYXRhIj09PWUpe3ZhciBhPXQuYXJyYXl8fFtdO2lmKHIpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9K2FbZV07cmV0dXJuW3Iscl19O3ZhciBpPXQuYXJyYXltaW51c3x8W107cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9K2FbZV0sbj0raVtlXTtyZXR1cm4gaXNOYU4ocikmJmlzTmFOKG4pP1tOYU4sTmFOXTpbbnx8MCxyfHwwXX19dmFyIG89bihlLHQudmFsdWUpLHM9bihlLHQudmFsdWVtaW51cyk7cmV0dXJuIHJ8fHZvaWQgMD09PXQudmFsdWVtaW51cz9mdW5jdGlvbih0KXt2YXIgZT1vKHQpO3JldHVybltlLGVdfTpmdW5jdGlvbih0KXtyZXR1cm5bcyh0KSxvKHQpXX19fSx7fV0sNjE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7dmFyIGM9ImVycm9yXyIrbC5heGlzLHU9by5uZXdDb250YWluZXIoZSxjKSxoPXRbY118fHt9O2Z1bmN0aW9uIGYodCxlKXtyZXR1cm4gaS5jb2VyY2UoaCx1LHMsdCxlKX1pZighMSE9PWYoInZpc2libGUiLHZvaWQgMCE9PWguYXJyYXl8fHZvaWQgMCE9PWgudmFsdWV8fCJzcXJ0Ij09PWgudHlwZSkpe3ZhciBwPWYoInR5cGUiLCJhcnJheSJpbiBoPyJkYXRhIjoicGVyY2VudCIpLGQ9ITA7InNxcnQiIT09cCYmKGQ9Zigic3ltbWV0cmljIiwhKCgiZGF0YSI9PT1wPyJhcnJheW1pbnVzIjoidmFsdWVtaW51cyIpaW4gaCkpKSwiZGF0YSI9PT1wPyhmKCJhcnJheSIpLGYoInRyYWNlcmVmIiksZHx8KGYoImFycmF5bWludXMiKSxmKCJ0cmFjZXJlZm1pbnVzIikpKToicGVyY2VudCIhPT1wJiYiY29uc3RhbnQiIT09cHx8KGYoInZhbHVlIiksZHx8ZigidmFsdWVtaW51cyIpKTt2YXIgZz0iY29weV8iK2wuaW5oZXJpdCsic3R5bGUiO2lmKGwuaW5oZXJpdCkoZVsiZXJyb3JfIitsLmluaGVyaXRdfHx7fSkudmlzaWJsZSYmZihnLCEoaC5jb2xvcnx8bihoLnRoaWNrbmVzcyl8fG4oaC53aWR0aCkpKTtsLmluaGVyaXQmJnVbZ118fChmKCJjb2xvciIsciksZigidGhpY2tuZXNzIiksZigid2lkdGgiLGEudHJhY2VJcyhlLCJnbDNkIik/MDo0KSl9fX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzU1LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuL2F0dHJpYnV0ZXMiOjYxNSwiZmFzdC1pc251bWVyaWMiOjIyOH1dLDYxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxpPXQoIi4vYXR0cmlidXRlcyIpLG89e2Vycm9yX3g6bi5leHRlbmRGbGF0KHt9LGkpLGVycm9yX3k6bi5leHRlbmRGbGF0KHt9LGkpfTtkZWxldGUgby5lcnJvcl94LmNvcHlfenN0eWxlLGRlbGV0ZSBvLmVycm9yX3kuY29weV96c3R5bGUsZGVsZXRlIG8uZXJyb3JfeS5jb3B5X3lzdHlsZTt2YXIgcz17ZXJyb3JfeDpuLmV4dGVuZEZsYXQoe30saSksZXJyb3JfeTpuLmV4dGVuZEZsYXQoe30saSksZXJyb3JfejpuLmV4dGVuZEZsYXQoe30saSl9O2RlbGV0ZSBzLmVycm9yX3guY29weV95c3R5bGUsZGVsZXRlIHMuZXJyb3JfeS5jb3B5X3lzdHlsZSxkZWxldGUgcy5lcnJvcl96LmNvcHlfeXN0eWxlLGRlbGV0ZSBzLmVycm9yX3ouY29weV96c3R5bGUsZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImVycm9yYmFycyIsc2NoZW1hOnt0cmFjZXM6e3NjYXR0ZXI6byxiYXI6byxoaXN0b2dyYW06byxzY2F0dGVyM2Q6YShzLCJjYWxjIiwibmVzdGVkIiksc2NhdHRlcmdsOmEobywiY2FsYyIsIm5lc3RlZCIpfX0sc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksbWFrZUNvbXB1dGVFcnJvcjp0KCIuL2NvbXB1dGVfZXJyb3IiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKSxob3ZlckluZm86ZnVuY3Rpb24odCxlLHIpeyhlLmVycm9yX3l8fHt9KS52aXNpYmxlJiYoci55ZXJyPXQueWgtdC55LGUuZXJyb3JfeS5zeW1tZXRyaWN8fChyLnllcnJuZWc9dC55LXQueXMpKTsoZS5lcnJvcl94fHx7fSkudmlzaWJsZSYmKHIueGVycj10LnhoLXQueCxlLmVycm9yX3guc3ltbWV0cmljfHwoci54ZXJybmVnPXQueC10LnhzKSl9fX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzQ4LCIuL2F0dHJpYnV0ZXMiOjYxNSwiLi9jYWxjIjo2MTYsIi4vY29tcHV0ZV9lcnJvciI6NjE3LCIuL2RlZmF1bHRzIjo2MTgsIi4vcGxvdCI6NjIwLCIuL3N0eWxlIjo2MjF9XSw2MjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9kcmF3aW5nIiksbz10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXt2YXIgbD1yLnhheGlzLGM9ci55YXhpcyx1PXMmJnMuZHVyYXRpb24+MDtlLmVhY2goZnVuY3Rpb24oZSl7dmFyIGgsZj1lWzBdLnRyYWNlLHA9Zi5lcnJvcl94fHx7fSxkPWYuZXJyb3JfeXx8e307Zi5pZHMmJihoPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSk7dmFyIGc9by5oYXNNYXJrZXJzKGYpJiZmLm1hcmtlci5tYXhkaXNwbGF5ZWQ+MDtkLnZpc2libGV8fHAudmlzaWJsZXx8KGU9W10pO3ZhciB2PW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5lcnJvcmJhciIpLmRhdGEoZSxoKTtpZih2LmV4aXQoKS5yZW1vdmUoKSxlLmxlbmd0aCl7cC52aXNpYmxlfHx2LnNlbGVjdEFsbCgicGF0aC54ZXJyb3IiKS5yZW1vdmUoKSxkLnZpc2libGV8fHYuc2VsZWN0QWxsKCJwYXRoLnllcnJvciIpLnJlbW92ZSgpLHYuc3R5bGUoIm9wYWNpdHkiLDEpO3ZhciBtPXYuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJlcnJvcmJhciIsITApO3UmJm0uc3R5bGUoIm9wYWNpdHkiLDApLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMSksaS5zZXRDbGlwVXJsKHYsci5sYXllckNsaXBJZCx0KSx2LmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj1mdW5jdGlvbih0LGUscil7dmFyIG49e3g6ZS5jMnAodC54KSx5OnIuYzJwKHQueSl9O3ZvaWQgMCE9PXQueWgmJihuLnloPXIuYzJwKHQueWgpLG4ueXM9ci5jMnAodC55cyksYShuLnlzKXx8KG4ubm9ZUz0hMCxuLnlzPXIuYzJwKHQueXMsITApKSk7dm9pZCAwIT09dC54aCYmKG4ueGg9ZS5jMnAodC54aCksbi54cz1lLmMycCh0LnhzKSxhKG4ueHMpfHwobi5ub1hTPSEwLG4ueHM9ZS5jMnAodC54cywhMCkpKTtyZXR1cm4gbn0odCxsLGMpO2lmKCFnfHx0LnZpcyl7dmFyIGksbz1lLnNlbGVjdCgicGF0aC55ZXJyb3IiKTtpZihkLnZpc2libGUmJmEoci54KSYmYShyLnloKSYmYShyLnlzKSl7dmFyIGg9ZC53aWR0aDtpPSJNIisoci54LWgpKyIsIityLnloKyJoIisyKmgrIm0tIitoKyIsMFYiK3IueXMsci5ub1lTfHwoaSs9Im0tIitoKyIsMGgiKzIqaCksIW8uc2l6ZSgpP289ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNsYXNzZWQoInllcnJvciIsITApOnUmJihvPW8udHJhbnNpdGlvbigpLmR1cmF0aW9uKHMuZHVyYXRpb24pLmVhc2Uocy5lYXNpbmcpKSxvLmF0dHIoImQiLGkpfWVsc2Ugby5yZW1vdmUoKTt2YXIgZj1lLnNlbGVjdCgicGF0aC54ZXJyb3IiKTtpZihwLnZpc2libGUmJmEoci55KSYmYShyLnhoKSYmYShyLnhzKSl7dmFyIHY9KHAuY29weV95c3R5bGU/ZDpwKS53aWR0aDtpPSJNIityLnhoKyIsIisoci55LXYpKyJ2IisyKnYrIm0wLC0iK3YrIkgiK3IueHMsci5ub1hTfHwoaSs9Im0wLC0iK3YrInYiKzIqdiksIWYuc2l6ZSgpP2Y9ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNsYXNzZWQoInhlcnJvciIsITApOnUmJihmPWYudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMuZHVyYXRpb24pLmVhc2Uocy5lYXNpbmcpKSxmLmF0dHIoImQiLGkpfWVsc2UgZi5yZW1vdmUoKX19KX19KX19LHsiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjExNDQsIi4uL2RyYXdpbmciOjYxMyxkMzoxNjUsImZhc3QtaXNudW1lcmljIjoyMjh9XSw2MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uL2NvbG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ZS5lcnJvcl95fHx7fSxpPWUuZXJyb3JfeHx8e30sbz1uLnNlbGVjdCh0aGlzKTtvLnNlbGVjdEFsbCgicGF0aC55ZXJyb3IiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLnRoaWNrbmVzcysicHgiKS5jYWxsKGEuc3Ryb2tlLHIuY29sb3IpLGkuY29weV95c3R5bGUmJihpPXIpLG8uc2VsZWN0QWxsKCJwYXRoLnhlcnJvciIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGkudGhpY2tuZXNzKyJweCIpLmNhbGwoYS5zdHJva2UsaS5jb2xvcil9KX19LHsiLi4vY29sb3IiOjU5MixkMzoxNjV9XSw2MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIikuaG92ZXJsYWJlbCxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17aG92ZXJsYWJlbDp7Ymdjb2xvcjppKHt9LGEuYmdjb2xvcix7YXJyYXlPazohMH0pLGJvcmRlcmNvbG9yOmkoe30sYS5ib3JkZXJjb2xvcix7YXJyYXlPazohMH0pLGZvbnQ6bih7YXJyYXlPazohMCxlZGl0VHlwZToibm9uZSJ9KSxhbGlnbjppKHt9LGEuYWxpZ24se2FycmF5T2s6ITB9KSxuYW1lbGVuZ3RoOmkoe30sYS5uYW1lbGVuZ3RoLHthcnJheU9rOiEwfSksZWRpdFR5cGU6Im5vbmUifX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc5MSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjMxfV0sNjIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBpKHQsZSxyLGEpe2E9YXx8bi5pZGVudGl0eSxBcnJheS5pc0FycmF5KHQpJiYoZVswXVtyXT1hKHQpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5jYWxjZGF0YSxyPXQuX2Z1bGxMYXlvdXQ7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG4uY29lcmNlSG92ZXJpbmZvKHtob3ZlcmluZm86ZX0se19tb2R1bGU6dC5fbW9kdWxlfSxyKX19Zm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspe3ZhciBsPWVbc10sYz1sWzBdLnRyYWNlO2lmKCFhLnRyYWNlSXMoYywicGllLWxpa2UiKSl7dmFyIHU9YS50cmFjZUlzKGMsIjJkTWFwIik/aTpuLmZpbGxBcnJheTt1KGMuaG92ZXJpbmZvLGwsImhpIixvKGMpKSxjLmhvdmVydGVtcGxhdGUmJnUoYy5ob3ZlcnRlbXBsYXRlLGwsImh0IiksYy5ob3ZlcmxhYmVsJiYodShjLmhvdmVybGFiZWwuYmdjb2xvcixsLCJoYmciKSx1KGMuaG92ZXJsYWJlbC5ib3JkZXJjb2xvcixsLCJoYmMiKSx1KGMuaG92ZXJsYWJlbC5mb250LnNpemUsbCwiaHRzIiksdShjLmhvdmVybGFiZWwuZm9udC5jb2xvcixsLCJodGMiKSx1KGMuaG92ZXJsYWJlbC5mb250LmZhbWlseSxsLCJodGYiKSx1KGMuaG92ZXJsYWJlbC5uYW1lbGVuZ3RoLGwsImhubCIpLHUoYy5ob3ZlcmxhYmVsLmFsaWduLGwsImh0YSIpKX19fX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcmVnaXN0cnkiOjg0Nn1dLDYyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi9ob3ZlciIpLmhvdmVyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9bi5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwib25DbGljayIpKHQsdC5faG92ZXJkYXRhKTtmdW5jdGlvbiBvKCl7dC5lbWl0KCJwbG90bHlfY2xpY2siLHtwb2ludHM6dC5faG92ZXJkYXRhLGV2ZW50OmV9KX12b2lkIDAhPT1yJiZhKHQsZSxyLCEwKSx0Ll9ob3ZlcmRhdGEmJmUmJmUudGFyZ2V0JiYoaSYmaS50aGVuP2kudGhlbihvKTpvKCksZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfX0seyIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuL2hvdmVyIjo2Mjh9XSw2MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtZQU5HTEU6NjAsSE9WRVJBUlJPV1NJWkU6NixIT1ZFUlRFWFRQQUQ6MyxIT1ZFUkZPTlRTSVpFOjEzLEhPVkVSRk9OVDoiQXJpYWwsIHNhbnMtc2VyaWYiLEhPVkVSTUlOVElNRTo1MCxIT1ZFUklEOiItaG92ZXIifX0se31dLDYyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4vYXR0cmlidXRlcyIpLGk9dCgiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPW4uZXh0ZW5kRmxhdCh7fSxvLmhvdmVybGFiZWwpO2UuaG92ZXJ0ZW1wbGF0ZSYmKHMubmFtZWxlbmd0aD0tMSksaSh0LGUsZnVuY3Rpb24ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX0scyl9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuL2F0dHJpYnV0ZXMiOjYyMiwiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIjo2Mjl9XSw2Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ci5nZXRTdWJwbG90PWZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnBsb3R8fHQueGF4aXMrdC55YXhpc3x8dC5nZW99LHIuaXNUcmFjZUluU3VicGxvdHM9ZnVuY3Rpb24odCxlKXtpZigic3Bsb20iPT09dC50eXBlKXtmb3IodmFyIG49dC54YXhlc3x8W10sYT10LnlheGVzfHxbXSxpPTA7aTxuLmxlbmd0aDtpKyspZm9yKHZhciBvPTA7bzxhLmxlbmd0aDtvKyspaWYoLTEhPT1lLmluZGV4T2YobltpXSthW29dKSlyZXR1cm4hMDtyZXR1cm4hMX1yZXR1cm4tMSE9PWUuaW5kZXhPZihyLmdldFN1YnBsb3QodCkpfSxyLmZsYXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT1lO3JldHVybiByfSxyLnAyYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rKylyW25dPXRbbl0ucDJjKGUpO3JldHVybiByfSxyLmdldERpc3RhbmNlRnVuY3Rpb249ZnVuY3Rpb24odCxlLG4sYSl7cmV0dXJuImNsb3Nlc3QiPT09dD9hfHxyLnF1YWRyYXR1cmUoZSxuKToieCI9PT10P2U6bn0sci5nZXRDbG9zZXN0PWZ1bmN0aW9uKHQsZSxyKXtpZighMSE9PXIuaW5kZXgpci5pbmRleD49MCYmci5pbmRleDx0Lmxlbmd0aD9yLmRpc3RhbmNlPTA6ci5pbmRleD0hMTtlbHNlIGZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgYT1lKHRbbl0pO2E8PXIuZGlzdGFuY2UmJihyLmluZGV4PW4sci5kaXN0YW5jZT1hKX1yZXR1cm4gcn0sci5pbmJveD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQqZTwwfHwwPT09dD9yOjEvMH0sci5xdWFkcmF0dXJlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXQociksYT1lKHIpO3JldHVybiBNYXRoLnNxcnQobipuK2EqYSl9fSxyLm1ha2VFdmVudERhdGE9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPSJpbmRleCJpbiB0P3QuaW5kZXg6dC5wb2ludE51bWJlcixpPXtkYXRhOmUuX2lucHV0LGZ1bGxEYXRhOmUsY3VydmVOdW1iZXI6ZS5pbmRleCxwb2ludE51bWJlcjphfTtpZihlLl9pbmRleFRvUG9pbnRzKXt2YXIgbz1lLl9pbmRleFRvUG9pbnRzW2FdOzE9PT1vLmxlbmd0aD9pLnBvaW50SW5kZXg9b1swXTppLnBvaW50SW5kaWNlcz1vfWVsc2UgaS5wb2ludEluZGV4PWE7cmV0dXJuIGUuX21vZHVsZS5ldmVudERhdGE/aT1lLl9tb2R1bGUuZXZlbnREYXRhKGksdCxlLG4sYSk6KCJ4VmFsImluIHQ/aS54PXQueFZhbDoieCJpbiB0JiYoaS54PXQueCksInlWYWwiaW4gdD9pLnk9dC55VmFsOiJ5ImluIHQmJihpLnk9dC55KSx0LnhhJiYoaS54YXhpcz10LnhhKSx0LnlhJiYoaS55YXhpcz10LnlhKSx2b2lkIDAhPT10LnpMYWJlbFZhbCYmKGkuej10LnpMYWJlbFZhbCkpLHIuYXBwZW5kQXJyYXlQb2ludFZhbHVlKGksZSxhKSxpfSxyLmFwcGVuZEFycmF5UG9pbnRWYWx1ZT1mdW5jdGlvbih0LGUscil7dmFyIGE9ZS5fYXJyYXlBdHRycztpZihhKWZvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9aShsKTtpZih2b2lkIDA9PT10W2NdKXt2YXIgdT1vKG4ubmVzdGVkUHJvcGVydHkoZSxsKS5nZXQoKSxyKTt2b2lkIDAhPT11JiYodFtjXT11KX19fSxyLmFwcGVuZEFycmF5TXVsdGlQb2ludFZhbHVlcz1mdW5jdGlvbih0LGUscil7dmFyIGE9ZS5fYXJyYXlBdHRycztpZihhKWZvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9aShsKTtpZih2b2lkIDA9PT10W2NdKXtmb3IodmFyIHU9bi5uZXN0ZWRQcm9wZXJ0eShlLGwpLmdldCgpLGg9bmV3IEFycmF5KHIubGVuZ3RoKSxmPTA7ZjxyLmxlbmd0aDtmKyspaFtmXT1vKHUscltmXSk7dFtjXT1ofX19O3ZhciBhPXtpZHM6ImlkIixsb2NhdGlvbnM6ImxvY2F0aW9uIixsYWJlbHM6ImxhYmVsIix2YWx1ZXM6InZhbHVlIiwibWFya2VyLmNvbG9ycyI6ImNvbG9yIixwYXJlbnRzOiJwYXJlbnQifTtmdW5jdGlvbiBpKHQpe3JldHVybiBhW3RdfHx0fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9BcnJheS5pc0FycmF5KHQpJiZBcnJheS5pc0FycmF5KHRbZVswXV0pP3RbZVswXV1bZVsxXV06dm9pZCAwOnRbZV19fSx7Ii4uLy4uL2xpYiI6NzE3fV0sNjI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9saWIvZXZlbnRzIiksbD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxjPXQoIi4uLy4uL2xpYi9vdmVycmlkZV9jdXJzb3IiKSx1PXQoIi4uL2RyYXdpbmciKSxoPXQoIi4uL2NvbG9yIiksZj10KCIuLi9kcmFnZWxlbWVudCIpLHA9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxkPXQoIi4uLy4uL3JlZ2lzdHJ5IiksZz10KCIuL2hlbHBlcnMiKSx2PXQoIi4vY29uc3RhbnRzIiksbT12LllBTkdMRSx5PU1hdGguUEkqbS8xODAseD0xL01hdGguc2luKHkpLGI9TWF0aC5jb3MoeSksXz1NYXRoLnNpbih5KSx3PXYuSE9WRVJBUlJPV1NJWkUsaz12LkhPVkVSVEVYVFBBRDtyLmhvdmVyPWZ1bmN0aW9uKHQsZSxyLGkpe3Q9by5nZXRHcmFwaERpdih0KSxvLnRocm90dGxlKHQuX2Z1bGxMYXlvdXQuX3VpZCt2LkhPVkVSSUQsdi5IT1ZFUk1JTlRJTUUsZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlLHIsaSl7cnx8KHI9Inh5Iik7dmFyIGw9QXJyYXkuaXNBcnJheShyKT9yOltyXSx1PXQuX2Z1bGxMYXlvdXQscD11Ll9wbG90c3x8W10sdj1wW3JdLG09dS5faGFzKCJjYXJ0ZXNpYW4iKTtpZih2KXt2YXIgeT12Lm92ZXJsYXlzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pO2w9bC5jb25jYXQoeSl9Zm9yKHZhciBiPWwubGVuZ3RoLF89bmV3IEFycmF5KGIpLHc9bmV3IEFycmF5KGIpLGs9ITEsVD0wO1Q8YjtUKyspe3ZhciBDPWxbVF07aWYocFtDXSlrPSEwLF9bVF09cFtDXS54YXhpcyx3W1RdPXBbQ10ueWF4aXM7ZWxzZXtpZighdVtDXXx8IXVbQ10uX3N1YnBsb3QpcmV0dXJuIHZvaWQgby53YXJuKCJVbnJlY29nbml6ZWQgc3VicGxvdDogIitDKTt2YXIgUD11W0NdLl9zdWJwbG90O19bVF09UC54YXhpcyx3W1RdPVAueWF4aXN9fXZhciBPPWUuaG92ZXJtb2RlfHx1LmhvdmVybW9kZTtPJiYhayYmKE89ImNsb3Nlc3QiKTtpZigtMT09PVsieCIsInkiLCJjbG9zZXN0Il0uaW5kZXhPZihPKXx8IXQuY2FsY2RhdGF8fHQucXVlcnlTZWxlY3RvcigiLnpvb21ib3giKXx8dC5fZHJhZ2dpbmcpcmV0dXJuIGYudW5ob3ZlclJhdyh0LGUpO3ZhciB6LEksRCxSLEYsQixOLGosVixVLHEsSCxHLFk9LTE9PT11LmhvdmVyZGlzdGFuY2U/MS8wOnUuaG92ZXJkaXN0YW5jZSxXPS0xPT09dS5zcGlrZWRpc3RhbmNlPzEvMDp1LnNwaWtlZGlzdGFuY2UsWD1bXSxaPVtdLEo9e2hMaW5lUG9pbnQ6bnVsbCx2TGluZVBvaW50Om51bGx9LEs9ITE7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoTz0iYXJyYXkiLEQ9MDtEPGUubGVuZ3RoO0QrKykoRj10LmNhbGNkYXRhW2VbRF0uY3VydmVOdW1iZXJ8fDBdKSYmKEI9RlswXS50cmFjZSwic2tpcCIhPT1GWzBdLnRyYWNlLmhvdmVyaW5mbyYmKFoucHVzaChGKSwiaCI9PT1CLm9yaWVudGF0aW9uJiYoSz0hMCkpKTtlbHNle2ZvcihSPTA7Ujx0LmNhbGNkYXRhLmxlbmd0aDtSKyspRj10LmNhbGNkYXRhW1JdLCJza2lwIiE9PShCPUZbMF0udHJhY2UpLmhvdmVyaW5mbyYmZy5pc1RyYWNlSW5TdWJwbG90cyhCLGwpJiYoWi5wdXNoKEYpLCJoIj09PUIub3JpZW50YXRpb24mJihLPSEwKSk7dmFyIFEsJCx0dD0hZS50YXJnZXQ7aWYodHQpUT0ieHB4ImluIGU/ZS54cHg6X1swXS5fbGVuZ3RoLzIsJD0ieXB4ImluIGU/ZS55cHg6d1swXS5fbGVuZ3RoLzI7ZWxzZXtpZighMT09PXMudHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2JlZm9yZWhvdmVyIixlKSlyZXR1cm47dmFyIGV0PWUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKFE9ZS5jbGllbnRYLWV0LmxlZnQsJD1lLmNsaWVudFktZXQudG9wLFE8MHx8UT5fWzBdLl9sZW5ndGh8fCQ8MHx8JD53WzBdLl9sZW5ndGgpcmV0dXJuIGYudW5ob3ZlclJhdyh0LGUpfWlmKGUucG9pbnRlclg9UStfWzBdLl9vZmZzZXQsZS5wb2ludGVyWT0kK3dbMF0uX29mZnNldCx6PSJ4dmFsImluIGU/Zy5mbGF0KGwsZS54dmFsKTpnLnAyYyhfLFEpLEk9Inl2YWwiaW4gZT9nLmZsYXQobCxlLnl2YWwpOmcucDJjKHcsJCksIWEoelswXSl8fCFhKElbMF0pKXJldHVybiBvLndhcm4oIkZ4LmhvdmVyIGZhaWxlZCIsZSx0KSxmLnVuaG92ZXJSYXcodCxlKX12YXIgcnQ9MS8wO2ZvcihSPTA7UjxaLmxlbmd0aDtSKyspaWYoKEY9WltSXSkmJkZbMF0mJkZbMF0udHJhY2UmJiEwPT09KEI9RlswXS50cmFjZSkudmlzaWJsZSYmMCE9PUIuX2xlbmd0aCYmLTE9PT1bImNhcnBldCIsImNvbnRvdXJjYXJwZXQiXS5pbmRleE9mKEIuX21vZHVsZS5uYW1lKSl7aWYoInNwbG9tIj09PUIudHlwZT9OPWxbaj0wXTooTj1nLmdldFN1YnBsb3QoQiksaj1sLmluZGV4T2YoTikpLFY9TyxIPXtjZDpGLHRyYWNlOkIseGE6X1tqXSx5YTp3W2pdLG1heEhvdmVyRGlzdGFuY2U6WSxtYXhTcGlrZURpc3RhbmNlOlcsaW5kZXg6ITEsZGlzdGFuY2U6TWF0aC5taW4ocnQsWSksc3Bpa2VEaXN0YW5jZToxLzAseFNwaWtlOnZvaWQgMCx5U3Bpa2U6dm9pZCAwLGNvbG9yOmguZGVmYXVsdExpbmUsbmFtZTpCLm5hbWUseDA6dm9pZCAwLHgxOnZvaWQgMCx5MDp2b2lkIDAseTE6dm9pZCAwLHhMYWJlbFZhbDp2b2lkIDAseUxhYmVsVmFsOnZvaWQgMCx6TGFiZWxWYWw6dm9pZCAwLHRleHQ6dm9pZCAwfSx1W05dJiYoSC5zdWJwbG90PXVbTl0uX3N1YnBsb3QpLHUuX3NwbG9tU2NlbmVzJiZ1Ll9zcGxvbVNjZW5lc1tCLnVpZF0mJihILnNjZW5lPXUuX3NwbG9tU2NlbmVzW0IudWlkXSksRz1YLmxlbmd0aCwiYXJyYXkiPT09Vil7dmFyIG50PWVbUl07InBvaW50TnVtYmVyImluIG50PyhILmluZGV4PW50LnBvaW50TnVtYmVyLFY9ImNsb3Nlc3QiKTooVj0iIiwieHZhbCJpbiBudCYmKFU9bnQueHZhbCxWPSJ4IiksInl2YWwiaW4gbnQmJihxPW50Lnl2YWwsVj1WPyJjbG9zZXN0IjoieSIpKX1lbHNlIFU9eltqXSxxPUlbal07aWYoMCE9PVkpaWYoQi5fbW9kdWxlJiZCLl9tb2R1bGUuaG92ZXJQb2ludHMpe3ZhciBhdD1CLl9tb2R1bGUuaG92ZXJQb2ludHMoSCxVLHEsVix1Ll9ob3ZlcmxheWVyKTtpZihhdClmb3IodmFyIGl0LG90PTA7b3Q8YXQubGVuZ3RoO290KyspaXQ9YXRbb3RdLGEoaXQueDApJiZhKGl0LnkwKSYmWC5wdXNoKFMoaXQsTykpfWVsc2Ugby5sb2coIlVucmVjb2duaXplZCB0cmFjZSB0eXBlIGluIGhvdmVyOiIsQik7aWYoImNsb3Nlc3QiPT09TyYmWC5sZW5ndGg+RyYmKFguc3BsaWNlKDAsRykscnQ9WFswXS5kaXN0YW5jZSksbSYmMCE9PVcmJjA9PT1YLmxlbmd0aCl7SC5kaXN0YW5jZT1XLEguaW5kZXg9ITE7dmFyIHN0PUIuX21vZHVsZS5ob3ZlclBvaW50cyhILFUscSwiY2xvc2VzdCIsdS5faG92ZXJsYXllcik7aWYoc3QmJihzdD1zdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Bpa2VEaXN0YW5jZTw9V30pKSxzdCYmc3QubGVuZ3RoKXt2YXIgbHQsY3Q9c3QuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhhLnNob3dzcGlrZXN9KTtpZihjdC5sZW5ndGgpe3ZhciB1dD1jdFswXTthKHV0LngwKSYmYSh1dC55MCkmJihsdD1kdCh1dCksKCFKLnZMaW5lUG9pbnR8fEoudkxpbmVQb2ludC5zcGlrZURpc3RhbmNlPmx0LnNwaWtlRGlzdGFuY2UpJiYoSi52TGluZVBvaW50PWx0KSl9dmFyIGh0PXN0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC55YS5zaG93c3Bpa2VzfSk7aWYoaHQubGVuZ3RoKXt2YXIgZnQ9aHRbMF07YShmdC54MCkmJmEoZnQueTApJiYobHQ9ZHQoZnQpLCghSi5oTGluZVBvaW50fHxKLmhMaW5lUG9pbnQuc3Bpa2VEaXN0YW5jZT5sdC5zcGlrZURpc3RhbmNlKSYmKEouaExpbmVQb2ludD1sdCkpfX19fWZ1bmN0aW9uIHB0KHQsZSl7Zm9yKHZhciByLG49bnVsbCxhPTEvMCxpPTA7aTx0Lmxlbmd0aDtpKyspKHI9dFtpXS5zcGlrZURpc3RhbmNlKTxhJiZyPD1lJiYobj10W2ldLGE9cik7cmV0dXJuIG59ZnVuY3Rpb24gZHQodCl7cmV0dXJuIHQ/e3hhOnQueGEseWE6dC55YSx4OnZvaWQgMCE9PXQueFNwaWtlP3QueFNwaWtlOih0LngwK3QueDEpLzIseTp2b2lkIDAhPT10LnlTcGlrZT90LnlTcGlrZToodC55MCt0LnkxKS8yLGRpc3RhbmNlOnQuZGlzdGFuY2Usc3Bpa2VEaXN0YW5jZTp0LnNwaWtlRGlzdGFuY2UsY3VydmVOdW1iZXI6dC50cmFjZS5pbmRleCxjb2xvcjp0LmNvbG9yLHBvaW50TnVtYmVyOnQuaW5kZXh9Om51bGx9dmFyIGd0PXtmdWxsTGF5b3V0OnUsY29udGFpbmVyOnUuX2hvdmVybGF5ZXIsb3V0ZXJDb250YWluZXI6dS5fcGFwZXJkaXYsZXZlbnQ6ZX0sdnQ9dC5fc3Bpa2Vwb2ludHMsbXQ9e3ZMaW5lUG9pbnQ6Si52TGluZVBvaW50LGhMaW5lUG9pbnQ6Si5oTGluZVBvaW50fTtpZih0Ll9zcGlrZXBvaW50cz1tdCxtJiYwIT09VyYmMCE9PVgubGVuZ3RoKXt2YXIgeXQ9WC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueWEuc2hvd3NwaWtlc30pLHh0PXB0KHl0LFcpO0ouaExpbmVQb2ludD1kdCh4dCk7dmFyIGJ0PVguZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhhLnNob3dzcGlrZXN9KSxfdD1wdChidCxXKTtKLnZMaW5lUG9pbnQ9ZHQoX3QpfWlmKDA9PT1YLmxlbmd0aCl7dmFyIHd0PWYudW5ob3ZlclJhdyh0LGUpO3JldHVybiFtfHxudWxsPT09Si5oTGluZVBvaW50JiZudWxsPT09Si52TGluZVBvaW50fHxMKHZ0KSYmRSh0LEosZ3QpLHd0fW0mJkwodnQpJiZFKHQsSixndCk7WC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzdGFuY2UtZS5kaXN0YW5jZX0pO3ZhciBrdD10Ll9ob3ZlcmRhdGEsVHQ9W107Zm9yKEQ9MDtEPFgubGVuZ3RoO0QrKyl7dmFyIE10PVhbRF0sQXQ9Zy5tYWtlRXZlbnREYXRhKE10LE10LnRyYWNlLE10LmNkKTtpZighMSE9PU10LmhvdmVydGVtcGxhdGUpe3ZhciBTdD0hMTtNdC5jZFtNdC5pbmRleF0mJk10LmNkW010LmluZGV4XS5odCYmKFN0PU10LmNkW010LmluZGV4XS5odCksTXQuaG92ZXJ0ZW1wbGF0ZT1TdHx8TXQudHJhY2UuaG92ZXJ0ZW1wbGF0ZXx8ITF9TXQuZXZlbnREYXRhPVtBdF0sVHQucHVzaChBdCl9dC5faG92ZXJkYXRhPVR0O3ZhciBFdD0ieSI9PT1PJiYoWi5sZW5ndGg+MXx8WC5sZW5ndGg+MSl8fCJjbG9zZXN0Ij09PU8mJksmJlgubGVuZ3RoPjEsTHQ9aC5jb21iaW5lKHUucGxvdF9iZ2NvbG9yfHxoLmJhY2tncm91bmQsdS5wYXBlcl9iZ2NvbG9yKSxDdD17aG92ZXJtb2RlOk8scm90YXRlTGFiZWxzOkV0LGJnQ29sb3I6THQsY29udGFpbmVyOnUuX2hvdmVybGF5ZXIsb3V0ZXJDb250YWluZXI6dS5fcGFwZXJkaXYsY29tbW9uTGFiZWxPcHRzOnUuaG92ZXJsYWJlbCxob3ZlcmRpc3RhbmNlOnUuaG92ZXJkaXN0YW5jZX0sUHQ9TShYLEN0LHQpO2lmKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLGksbyxzLGwsYyx1PTAsaD0xLGY9dC5zaXplKCkscD1uZXcgQXJyYXkoZiksZD0wO2Z1bmN0aW9uIGcodCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07aWYoYT1lLnBtaW4tZS5wb3MtZS5kcCtlLnNpemUsaT1yLnBvcytyLmRwK3Iuc2l6ZS1lLnBtYXgsYT4uMDEpe2ZvcihzPXQubGVuZ3RoLTE7cz49MDtzLS0pdFtzXS5kcCs9YTtuPSExfWlmKCEoaTwuMDEpKXtpZihhPC0uMDEpe2ZvcihzPXQubGVuZ3RoLTE7cz49MDtzLS0pdFtzXS5kcC09aTtuPSExfWlmKG4pe3ZhciBjPTA7Zm9yKG89MDtvPHQubGVuZ3RoO28rKykobD10W29dKS5wb3MrbC5kcCtsLnNpemU+ZS5wbWF4JiZjKys7Zm9yKG89dC5sZW5ndGgtMTtvPj0wJiYhKGM8PTApO28tLSkobD10W29dKS5wb3M+ZS5wbWF4LTEmJihsLmRlbD0hMCxjLS0pO2ZvcihvPTA7bzx0Lmxlbmd0aCYmIShjPD0wKTtvKyspaWYoKGw9dFtvXSkucG9zPGUucG1pbisxKWZvcihsLmRlbD0hMCxjLS0saT0yKmwuc2l6ZSxzPXQubGVuZ3RoLTE7cz49MDtzLS0pdFtzXS5kcC09aTtmb3Iobz10Lmxlbmd0aC0xO28+PTAmJiEoYzw9MCk7by0tKShsPXRbb10pLnBvcytsLmRwK2wuc2l6ZT5lLnBtYXgmJihsLmRlbD0hMCxjLS0pfX19Zm9yKHQuZWFjaChmdW5jdGlvbih0KXt2YXIgbj10W2VdLGE9IngiPT09bi5faWQuY2hhckF0KDApLGk9bi5yYW5nZTswPT09ZCYmaSYmaVswXT5pWzFdIT09YSYmKGg9LTEpLHBbZCsrXT1be2RhdHVtOnQsdHJhY2VJbmRleDp0LnRyYWNlLmluZGV4LGRwOjAscG9zOnQucG9zLHBvc3JlZjp0LnBvc3JlZixzaXplOnQuYnkqKGE/eDoxKS8yLHBtaW46MCxwbWF4OmE/ci53aWR0aDpyLmhlaWdodH1dfSkscC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0ucG9zcmVmLWVbMF0ucG9zcmVmfHxoKihlWzBdLnRyYWNlSW5kZXgtdFswXS50cmFjZUluZGV4KX0pOyFuJiZ1PD1mOyl7Zm9yKHUrKyxuPSEwLG89MDtvPHAubGVuZ3RoLTE7KXt2YXIgdj1wW29dLG09cFtvKzFdLHk9dlt2Lmxlbmd0aC0xXSxiPW1bMF07aWYoKGE9eS5wb3MreS5kcCt5LnNpemUtYi5wb3MtYi5kcCtiLnNpemUpPi4wMSYmeS5wbWluPT09Yi5wbWluJiZ5LnBtYXg9PT1iLnBtYXgpe2ZvcihzPW0ubGVuZ3RoLTE7cz49MDtzLS0pbVtzXS5kcCs9YTtmb3Iodi5wdXNoLmFwcGx5KHYsbSkscC5zcGxpY2UobysxLDEpLGM9MCxzPXYubGVuZ3RoLTE7cz49MDtzLS0pYys9dltzXS5kcDtmb3IoaT1jL3YubGVuZ3RoLHM9di5sZW5ndGgtMTtzPj0wO3MtLSl2W3NdLmRwLT1pO249ITF9ZWxzZSBvKyt9cC5mb3JFYWNoKGcpfWZvcihvPXAubGVuZ3RoLTE7bz49MDtvLS0pe3ZhciBfPXBbb107Zm9yKHM9Xy5sZW5ndGgtMTtzPj0wO3MtLSl7dmFyIHc9X1tzXSxrPXcuZGF0dW07ay5vZmZzZXQ9dy5kcCxrLmRlbD13LmRlbH19fShQdCxFdD8ieGEiOiJ5YSIsdSksQShQdCxFdCksZS50YXJnZXQmJmUudGFyZ2V0LnRhZ05hbWUpe3ZhciBPdD1kLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJoYXNDbGlja1RvU2hvdyIpKHQsVHQpO2Mobi5zZWxlY3QoZS50YXJnZXQpLE90PyJwb2ludGVyIjoiIil9aWYoIWUudGFyZ2V0fHxpfHwhZnVuY3Rpb24odCxlLHIpe2lmKCFyfHxyLmxlbmd0aCE9PXQuX2hvdmVyZGF0YS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBuPXIubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBhPXJbbl0saT10Ll9ob3ZlcmRhdGFbbl07aWYoYS5jdXJ2ZU51bWJlciE9PWkuY3VydmVOdW1iZXJ8fFN0cmluZyhhLnBvaW50TnVtYmVyKSE9PVN0cmluZyhpLnBvaW50TnVtYmVyKXx8U3RyaW5nKGEucG9pbnROdW1iZXJzKSE9PVN0cmluZyhpLnBvaW50TnVtYmVycykpcmV0dXJuITB9cmV0dXJuITF9KHQsMCxrdCkpcmV0dXJuO2t0JiZ0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6a3R9KTt0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50OmUscG9pbnRzOnQuX2hvdmVyZGF0YSx4YXhlczpfLHlheGVzOncseHZhbHM6eix5dmFsczpJfSl9KHQsZSxyLGkpfSl9LHIubG9uZUhvdmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ITA7QXJyYXkuaXNBcnJheSh0KXx8KHI9ITEsdD1bdF0pO3ZhciBhPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybntjb2xvcjp0LmNvbG9yfHxoLmRlZmF1bHRMaW5lLHgwOnQueDB8fHQueHx8MCx4MTp0LngxfHx0Lnh8fDAseTA6dC55MHx8dC55fHwwLHkxOnQueTF8fHQueXx8MCx4TGFiZWw6dC54TGFiZWwseUxhYmVsOnQueUxhYmVsLHpMYWJlbDp0LnpMYWJlbCx0ZXh0OnQudGV4dCxuYW1lOnQubmFtZSxpZGVhbEFsaWduOnQuaWRlYWxBbGlnbixib3JkZXJDb2xvcjp0LmJvcmRlckNvbG9yLGZvbnRGYW1pbHk6dC5mb250RmFtaWx5LGZvbnRTaXplOnQuZm9udFNpemUsZm9udENvbG9yOnQuZm9udENvbG9yLG5hbWVMZW5ndGg6dC5uYW1lTGVuZ3RoLHRleHRBbGlnbjp0LnRleHRBbGlnbix0cmFjZTp0LnRyYWNlfHx7aW5kZXg6MCxob3ZlcmluZm86IiJ9LHhhOntfb2Zmc2V0OjB9LHlhOntfb2Zmc2V0OjB9LGluZGV4OjAsaG92ZXJ0ZW1wbGF0ZTp0LmhvdmVydGVtcGxhdGV8fCExLGV2ZW50RGF0YTp0LmV2ZW50RGF0YXx8ITEsaG92ZXJ0ZW1wbGF0ZUxhYmVsczp0LmhvdmVydGVtcGxhdGVMYWJlbHN8fCExfX0pLGk9bi5zZWxlY3QoZS5jb250YWluZXIpLG89ZS5vdXRlckNvbnRhaW5lcj9uLnNlbGVjdChlLm91dGVyQ29udGFpbmVyKTppLHM9e2hvdmVybW9kZToiY2xvc2VzdCIscm90YXRlTGFiZWxzOiExLGJnQ29sb3I6ZS5iZ0NvbG9yfHxoLmJhY2tncm91bmQsY29udGFpbmVyOmksb3V0ZXJDb250YWluZXI6b30sbD1NKGEscyxlLmdkKSxjPTAsdT0wO3JldHVybiBsLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55MC1lLnkwfSkuZWFjaChmdW5jdGlvbih0LHIpe3ZhciBuPXQueTAtdC5ieS8yO3Qub2Zmc2V0PW4tNTxjP2Mtbis1OjAsYz1uK3QuYnkrdC5vZmZzZXQscj09PWUuYW5jaG9ySW5kZXgmJih1PXQub2Zmc2V0KX0pLmVhY2goZnVuY3Rpb24odCl7dC5vZmZzZXQtPXV9KSxBKGwscy5yb3RhdGVMYWJlbHMpLHI/bDpsLm5vZGUoKX07dmFyIFQ9LzxleHRyYT4oW1xzXFNdKik8XC9leHRyYT4vO2Z1bmN0aW9uIE0odCxlLHIpe3ZhciBhPXIuX2Z1bGxMYXlvdXQsaT1lLmhvdmVybW9kZSxzPWUucm90YXRlTGFiZWxzLGM9ZS5iZ0NvbG9yLGY9ZS5jb250YWluZXIscD1lLm91dGVyQ29udGFpbmVyLGQ9ZS5jb21tb25MYWJlbE9wdHN8fHt9LGc9ZS5mb250RmFtaWx5fHx2LkhPVkVSRk9OVCx5PWUuZm9udFNpemV8fHYuSE9WRVJGT05UU0laRSx4PXRbMF0sYj14LnhhLF89eC55YSxNPSJ5Ij09PWk/InlMYWJlbCI6InhMYWJlbCIsQT14W01dLFM9KFN0cmluZyhBKXx8IiIpLnNwbGl0KCIgIilbMF0sRT1wLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxMPUUudG9wLFA9RS53aWR0aCxPPUUuaGVpZ2h0LHo9dm9pZCAwIT09QSYmeC5kaXN0YW5jZTw9ZS5ob3ZlcmRpc3RhbmNlJiYoIngiPT09aXx8InkiPT09aSk7aWYoeil7dmFyIEksRCxSPSEwO2ZvcihJPTA7STx0Lmxlbmd0aDtJKyspaWYoUiYmdm9pZCAwPT09dFtJXS56TGFiZWwmJihSPSExKSxEPXRbSV0uaG92ZXJpbmZvfHx0W0ldLnRyYWNlLmhvdmVyaW5mbyl7dmFyIEY9QXJyYXkuaXNBcnJheShEKT9EOkQuc3BsaXQoIisiKTtpZigtMT09PUYuaW5kZXhPZigiYWxsIikmJi0xPT09Ri5pbmRleE9mKGkpKXt6PSExO2JyZWFrfX1SJiYoej0hMSl9dmFyIEI9Zi5zZWxlY3RBbGwoImcuYXhpc3RleHQiKS5kYXRhKHo/WzBdOltdKTtCLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpc3RleHQiLCEwKSxCLmV4aXQoKS5yZW1vdmUoKSxCLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxzPW8uZW5zdXJlU2luZ2xlKGUsInBhdGgiLCIiLGZ1bmN0aW9uKHQpe3Quc3R5bGUoeyJzdHJva2Utd2lkdGgiOiIxcHgifSl9KSxjPW8uZW5zdXJlU2luZ2xlKGUsInRleHQiLCIiLGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSxmPWQuYmdjb2xvcnx8aC5kZWZhdWx0TGluZSxwPWQuYm9yZGVyY29sb3J8fGguY29udHJhc3QoZiksdj1oLmNvbnRyYXN0KGYpLG09e2ZhbWlseTpkLmZvbnQuZmFtaWx5fHxnLHNpemU6ZC5mb250LnNpemV8fHksY29sb3I6ZC5mb250LmNvbG9yfHx2fTtzLnN0eWxlKHtmaWxsOmYsc3Ryb2tlOnB9KSxjLnRleHQoQSkuY2FsbCh1LmZvbnQsbSkuY2FsbChsLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsciksZS5hdHRyKCJ0cmFuc2Zvcm0iLCIiKTt2YXIgVCxFLEM9Yy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIngiPT09aSl7dmFyIFA9InRvcCI9PT1iLnNpZGU/Ii0iOiIiO2MuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKGwucG9zaXRpb25UZXh0LDAsInRvcCI9PT1iLnNpZGU/TC1DLmJvdHRvbS13LWs6TC1DLnRvcCt3K2spLFQ9Yi5fb2Zmc2V0Kyh4LngwK3gueDEpLzIsRT1fLl9vZmZzZXQrKCJ0b3AiPT09Yi5zaWRlPzA6Xy5fbGVuZ3RoKTt2YXIgTz1DLndpZHRoLzIraztUPE8/KFQ9TyxzLmF0dHIoImQiLCJNLSIrKE8tdykrIiwwTC0iKyhPLTIqdykrIiwiK1ArdysiSCIrKGsrQy53aWR0aC8yKSsidiIrUCsoMiprK0MuaGVpZ2h0KSsiSC0iK08rIlYiK1ArdysiWiIpKTpUPmEud2lkdGgtTz8oVD1hLndpZHRoLU8scy5hdHRyKCJkIiwiTSIrKE8tdykrIiwwTCIrTysiLCIrUCt3KyJ2IitQKygyKmsrQy5oZWlnaHQpKyJILSIrTysiViIrUCt3KyJIIisoTy0yKncpKyJaIikpOnMuYXR0cigiZCIsIk0wLDBMIit3KyIsIitQK3crIkgiKyhrK0Mud2lkdGgvMikrInYiK1ArKDIqaytDLmhlaWdodCkrIkgtIisoaytDLndpZHRoLzIpKyJWIitQK3crIkgtIit3KyJaIil9ZWxzZXt2YXIgeixJLEQ7InJpZ2h0Ij09PV8uc2lkZT8oej0ic3RhcnQiLEk9MSxEPSIiLFQ9Yi5fb2Zmc2V0K2IuX2xlbmd0aCk6KHo9ImVuZCIsST0tMSxEPSItIixUPWIuX29mZnNldCksRT1fLl9vZmZzZXQrKHgueTAreC55MSkvMixjLmF0dHIoInRleHQtYW5jaG9yIix6KSxzLmF0dHIoImQiLCJNMCwwTCIrRCt3KyIsIit3KyJWIisoaytDLmhlaWdodC8yKSsiaCIrRCsoMiprK0Mud2lkdGgpKyJWLSIrKGsrQy5oZWlnaHQvMikrIkgiK0QrdysiVi0iK3crIloiKTt2YXIgUixGPUMuaGVpZ2h0LzIsQj1MLUMudG9wLUYsTj0iY2xpcCIrYS5fdWlkKyJjb21tb25sYWJlbCIrXy5faWQ7aWYoVDxDLndpZHRoKzIqayt3KXtSPSJNLSIrKHcraykrIi0iK0YrImgtIisoQy53aWR0aC1rKSsiViIrRisiaCIrKEMud2lkdGgtaykrIloiO3ZhciBqPUMud2lkdGgtVCtrO2wucG9zaXRpb25UZXh0KGMsaixCKSwiZW5kIj09PXomJmMuc2VsZWN0QWxsKCJ0c3BhbiIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPXUudGVzdGVyLmFwcGVuZCgidGV4dCIpLnRleHQodC50ZXh0KCkpLmNhbGwodS5mb250LG0pLHI9ZS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7TWF0aC5yb3VuZChyLndpZHRoKTxNYXRoLnJvdW5kKEMud2lkdGgpJiZ0LmF0dHIoIngiLGotci53aWR0aCksZS5yZW1vdmUoKX0pfWVsc2UgbC5wb3NpdGlvblRleHQoYyxJKihrK3cpLEIpLFI9bnVsbDt2YXIgVj1hLl90b3BjbGlwcy5zZWxlY3RBbGwoIiMiK04pLmRhdGEoUj9bMF06W10pO1YuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLE4pLmFwcGVuZCgicGF0aCIpLFYuZXhpdCgpLnJlbW92ZSgpLFYuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsUiksdS5zZXRDbGlwVXJsKGMsUj9OOm51bGwscil9ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitUKyIsIitFKyIpIiksdD10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dC56TGFiZWxWYWx8fCh0W01dfHwiIikuc3BsaXQoIiAiKVswXT09PVN9KX0pO3ZhciBOPWYuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLmRhdGEodCxmdW5jdGlvbih0KXtyZXR1cm5bdC50cmFjZS5pbmRleCx0LmluZGV4LHQueDAsdC55MCx0Lm5hbWUsdC5hdHRyLHQueGEsdC55YXx8IiJdLmpvaW4oIiwiKX0pO3JldHVybiBOLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiaG92ZXJ0ZXh0IiwhMCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJyZWN0IikuY2FsbChoLmZpbGwsaC5hZGRPcGFjaXR5KGMsLjgpKSx0LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoIm5hbWUiLCEwKSx0LmFwcGVuZCgicGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLCIxcHgiKSx0LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoIm51bXMiLCEwKS5jYWxsKHUuZm9udCxnLHkpfSksTi5leGl0KCkucmVtb3ZlKCksTi5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsIiIpLGY9IiIscD0iIixkPXQuYmdjb2xvcnx8dC5jb2xvcix2PWguY29tYmluZShoLm9wYWNpdHkoZCk/ZDpoLmRlZmF1bHRMaW5lLGMpLHg9aC5jb21iaW5lKGgub3BhY2l0eSh0LmNvbG9yKT90LmNvbG9yOmguZGVmYXVsdExpbmUsYyksYj10LmJvcmRlckNvbG9yfHxoLmNvbnRyYXN0KHYpO3ZvaWQgMCE9PXQubmFtZU92ZXJyaWRlJiYodC5uYW1lPXQubmFtZU92ZXJyaWRlKSx0Lm5hbWUmJih0LnRyYWNlLl9tZXRhJiYodC5uYW1lPW8udGVtcGxhdGVTdHJpbmcodC5uYW1lLHQudHJhY2UuX21ldGEpKSxmPUModC5uYW1lLHQubmFtZUxlbmd0aCkpLHZvaWQgMCE9PXQuekxhYmVsPyh2b2lkIDAhPT10LnhMYWJlbCYmKHArPSJ4OiAiK3QueExhYmVsKyI8YnI+Iiksdm9pZCAwIT09dC55TGFiZWwmJihwKz0ieTogIit0LnlMYWJlbCsiPGJyPiIpLCJjaG9yb3BsZXRoIiE9PXQudHJhY2UudHlwZSYmImNob3JvcGxldGhtYXBib3giIT09dC50cmFjZS50eXBlJiYocCs9KHA/Ino6ICI6IiIpK3QuekxhYmVsKSk6eiYmdFtpKyJMYWJlbCJdPT09QT9wPXRbKCJ4Ij09PWk/InkiOiJ4IikrIkxhYmVsIl18fCIiOnZvaWQgMD09PXQueExhYmVsP3ZvaWQgMCE9PXQueUxhYmVsJiYic2NhdHRlcmNhcnBldCIhPT10LnRyYWNlLnR5cGUmJihwPXQueUxhYmVsKTpwPXZvaWQgMD09PXQueUxhYmVsP3QueExhYmVsOiIoIit0LnhMYWJlbCsiLCAiK3QueUxhYmVsKyIpIiwhdC50ZXh0JiYwIT09dC50ZXh0fHxBcnJheS5pc0FycmF5KHQudGV4dCl8fChwKz0ocD8iPGJyPiI6IiIpK3QudGV4dCksdm9pZCAwIT09dC5leHRyYVRleHQmJihwKz0ocD8iPGJyPiI6IiIpK3QuZXh0cmFUZXh0KSwiIiE9PXB8fHQuaG92ZXJ0ZW1wbGF0ZXx8KCIiPT09ZiYmZS5yZW1vdmUoKSxwPWYpO3ZhciBfPWEuX2QzbG9jYWxlLE09dC5ob3ZlcnRlbXBsYXRlfHwhMSxTPXQuaG92ZXJ0ZW1wbGF0ZUxhYmVsc3x8dCxFPXQuZXZlbnREYXRhWzBdfHx7fTtNJiYocD0ocD1vLmhvdmVydGVtcGxhdGVTdHJpbmcoTSxTLF8sRSx0LnRyYWNlLl9tZXRhKSkucmVwbGFjZShULGZ1bmN0aW9uKGUscil7cmV0dXJuIGY9QyhyLHQubmFtZUxlbmd0aCksIiJ9KSk7dmFyIEk9ZS5zZWxlY3QoInRleHQubnVtcyIpLmNhbGwodS5mb250LHQuZm9udEZhbWlseXx8Zyx0LmZvbnRTaXplfHx5LHQuZm9udENvbG9yfHxiKS50ZXh0KHApLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwobC5wb3NpdGlvblRleHQsMCwwKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHIpLEQ9ZS5zZWxlY3QoInRleHQubmFtZSIpLFI9MCxGPTA7aWYoZiYmZiE9PXApe0QuY2FsbCh1LmZvbnQsdC5mb250RmFtaWx5fHxnLHQuZm9udFNpemV8fHkseCkudGV4dChmKS5hdHRyKCJkYXRhLW5vdGV4IiwxKS5jYWxsKGwucG9zaXRpb25UZXh0LDAsMCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxyKTt2YXIgQj1ELm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtSPUIud2lkdGgrMiprLEY9Qi5oZWlnaHQrMiprfWVsc2UgRC5yZW1vdmUoKSxlLnNlbGVjdCgicmVjdCIpLnJlbW92ZSgpO2Uuc2VsZWN0KCJwYXRoIikuc3R5bGUoe2ZpbGw6dixzdHJva2U6Yn0pO3ZhciBOLGosVj1JLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxVPXQueGEuX29mZnNldCsodC54MCt0LngxKS8yLHE9dC55YS5fb2Zmc2V0Kyh0LnkwK3QueTEpLzIsSD1NYXRoLmFicyh0LngxLXQueDApLEc9TWF0aC5hYnModC55MS10LnkwKSxZPVYud2lkdGgrdytrK1I7aWYodC50eTA9TC1WLnRvcCx0LmJ4PVYud2lkdGgrMiprLHQuYnk9TWF0aC5tYXgoVi5oZWlnaHQrMiprLEYpLHQuYW5jaG9yPSJzdGFydCIsdC50eHdpZHRoPVYud2lkdGgsdC50eDJ3aWR0aD1SLHQub2Zmc2V0PTAscyl0LnBvcz1VLE49cStHLzIrWTw9TyxqPXEtRy8yLVk+PTAsInRvcCIhPT10LmlkZWFsQWxpZ24mJk58fCFqP04/KHErPUcvMix0LmFuY2hvcj0ic3RhcnQiKTp0LmFuY2hvcj0ibWlkZGxlIjoocS09Ry8yLHQuYW5jaG9yPSJlbmQiKTtlbHNlIGlmKHQucG9zPXEsTj1VK0gvMitZPD1QLGo9VS1ILzItWT49MCwibGVmdCIhPT10LmlkZWFsQWxpZ24mJk58fCFqKWlmKE4pVSs9SC8yLHQuYW5jaG9yPSJzdGFydCI7ZWxzZXt0LmFuY2hvcj0ibWlkZGxlIjt2YXIgVz1ZLzIsWD1VK1ctUCxaPVUtVztYPjAmJihVLT1YKSxaPDAmJihVKz0tWil9ZWxzZSBVLT1ILzIsdC5hbmNob3I9ImVuZCI7SS5hdHRyKCJ0ZXh0LWFuY2hvciIsdC5hbmNob3IpLFImJkQuYXR0cigidGV4dC1hbmNob3IiLHQuYW5jaG9yKSxlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1UrIiwiK3ErIikiKyhzPyJyb3RhdGUoIittKyIpIjoiIikpfSksTn1mdW5jdGlvbiBBKHQsZSl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQuZGVsKXJldHVybiByLnJlbW92ZSgpO3ZhciBhPXIuc2VsZWN0KCJ0ZXh0Lm51bXMiKSxpPXQuYW5jaG9yLG89ImVuZCI9PT1pPy0xOjEscz17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W2ldLGM9cyoodytrKSxoPWMrcyoodC50eHdpZHRoK2spLGY9MCxwPXQub2Zmc2V0OyJtaWRkbGUiPT09aSYmKGMtPXQudHgyd2lkdGgvMixoKz10LnR4d2lkdGgvMitrKSxlJiYocCo9LV8sZj10Lm9mZnNldCpiKSxyLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLCJtaWRkbGUiPT09aT8iTS0iKyh0LmJ4LzIrdC50eDJ3aWR0aC8yKSsiLCIrKHAtdC5ieS8yKSsiaCIrdC5ieCsidiIrdC5ieSsiaC0iK3QuYngrIloiOiJNMCwwTCIrKG8qdytmKSsiLCIrKHcrcCkrInYiKyh0LmJ5LzItdykrImgiK28qdC5ieCsidi0iK3QuYnkrIkgiKyhvKncrZikrIlYiKyhwLXcpKyJaIik7dmFyIGQ9YytmLGc9cCt0LnR5MC10LmJ5LzIrayx2PXQudGV4dEFsaWdufHwiYXV0byI7ImF1dG8iIT09diYmKCJsZWZ0Ij09PXYmJiJzdGFydCIhPT1pPyhhLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKSxkPSJtaWRkbGUiPT09aT8tdC5ieC8yLXQudHgyd2lkdGgvMitrOi10LmJ4LWspOiJyaWdodCI9PT12JiYiZW5kIiE9PWkmJihhLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIiksZD0ibWlkZGxlIj09PWk/dC5ieC8yLXQudHgyd2lkdGgvMi1rOnQuYngraykpLGEuY2FsbChsLnBvc2l0aW9uVGV4dCxkLGcpLHQudHgyd2lkdGgmJihyLnNlbGVjdCgidGV4dC5uYW1lIikuY2FsbChsLnBvc2l0aW9uVGV4dCxoK3MqaytmLHArdC50eTAtdC5ieS8yK2spLHIuc2VsZWN0KCJyZWN0IikuY2FsbCh1LnNldFJlY3QsaCsocy0xKSp0LnR4MndpZHRoLzIrZixwLXQuYnkvMi0xLHQudHgyd2lkdGgsdC5ieSsyKSl9KX1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9dC5pbmRleCxuPXQudHJhY2V8fHt9LGk9dC5jZFswXSxzPXQuY2Rbcl18fHt9O2Z1bmN0aW9uIGwodCl7cmV0dXJuIHR8fGEodCkmJjA9PT10fXZhciBjPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24odCxlKXt2YXIgYT1vLmNhc3RPcHRpb24oaSxyLHQpO3JldHVybiBsKGEpP2E6by5leHRyYWN0T3B0aW9uKHt9LG4sIiIsZSl9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uZXh0cmFjdE9wdGlvbihzLG4sdCxlKX07ZnVuY3Rpb24gdShlLHIsbil7dmFyIGE9YyhyLG4pO2woYSkmJih0W2VdPWEpfWlmKHUoImhvdmVyaW5mbyIsImhpIiwiaG92ZXJpbmZvIiksdSgiYmdjb2xvciIsImhiZyIsImhvdmVybGFiZWwuYmdjb2xvciIpLHUoImJvcmRlckNvbG9yIiwiaGJjIiwiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIpLHUoImZvbnRGYW1pbHkiLCJodGYiLCJob3ZlcmxhYmVsLmZvbnQuZmFtaWx5IiksdSgiZm9udFNpemUiLCJodHMiLCJob3ZlcmxhYmVsLmZvbnQuc2l6ZSIpLHUoImZvbnRDb2xvciIsImh0YyIsImhvdmVybGFiZWwuZm9udC5jb2xvciIpLHUoIm5hbWVMZW5ndGgiLCJobmwiLCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiKSx1KCJ0ZXh0QWxpZ24iLCJodGEiLCJob3ZlcmxhYmVsLmFsaWduIiksdC5wb3NyZWY9InkiPT09ZXx8ImNsb3Nlc3QiPT09ZSYmImgiPT09bi5vcmllbnRhdGlvbj90LnhhLl9vZmZzZXQrKHQueDArdC54MSkvMjp0LnlhLl9vZmZzZXQrKHQueTArdC55MSkvMix0LngwPW8uY29uc3RyYWluKHQueDAsMCx0LnhhLl9sZW5ndGgpLHQueDE9by5jb25zdHJhaW4odC54MSwwLHQueGEuX2xlbmd0aCksdC55MD1vLmNvbnN0cmFpbih0LnkwLDAsdC55YS5fbGVuZ3RoKSx0LnkxPW8uY29uc3RyYWluKHQueTEsMCx0LnlhLl9sZW5ndGgpLHZvaWQgMCE9PXQueExhYmVsVmFsJiYodC54TGFiZWw9InhMYWJlbCJpbiB0P3QueExhYmVsOnAuaG92ZXJMYWJlbFRleHQodC54YSx0LnhMYWJlbFZhbCksdC54VmFsPXQueGEuYzJkKHQueExhYmVsVmFsKSksdm9pZCAwIT09dC55TGFiZWxWYWwmJih0LnlMYWJlbD0ieUxhYmVsImluIHQ/dC55TGFiZWw6cC5ob3ZlckxhYmVsVGV4dCh0LnlhLHQueUxhYmVsVmFsKSx0LnlWYWw9dC55YS5jMmQodC55TGFiZWxWYWwpKSx2b2lkIDAhPT10LnpMYWJlbFZhbCYmdm9pZCAwPT09dC56TGFiZWwmJih0LnpMYWJlbD1TdHJpbmcodC56TGFiZWxWYWwpKSwhKGlzTmFOKHQueGVycil8fCJsb2ciPT09dC54YS50eXBlJiZ0LnhlcnI8PTApKXt2YXIgaD1wLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueGVycm5lZz90LnhMYWJlbCs9IiArIitoKyIgLyAtIitwLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueExhYmVsKz0iIFx4YjEgIitoLCJ4Ij09PWUmJih0LmRpc3RhbmNlKz0xKX1pZighKGlzTmFOKHQueWVycil8fCJsb2ciPT09dC55YS50eXBlJiZ0LnllcnI8PTApKXt2YXIgZj1wLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueWVycm5lZz90LnlMYWJlbCs9IiArIitmKyIgLyAtIitwLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueUxhYmVsKz0iIFx4YjEgIitmLCJ5Ij09PWUmJih0LmRpc3RhbmNlKz0xKX12YXIgZD10LmhvdmVyaW5mb3x8dC50cmFjZS5ob3ZlcmluZm87cmV0dXJuIGQmJiJhbGwiIT09ZCYmKC0xPT09KGQ9QXJyYXkuaXNBcnJheShkKT9kOmQuc3BsaXQoIisiKSkuaW5kZXhPZigieCIpJiYodC54TGFiZWw9dm9pZCAwKSwtMT09PWQuaW5kZXhPZigieSIpJiYodC55TGFiZWw9dm9pZCAwKSwtMT09PWQuaW5kZXhPZigieiIpJiYodC56TGFiZWw9dm9pZCAwKSwtMT09PWQuaW5kZXhPZigidGV4dCIpJiYodC50ZXh0PXZvaWQgMCksLTE9PT1kLmluZGV4T2YoIm5hbWUiKSYmKHQubmFtZT12b2lkIDApKSx0fWZ1bmN0aW9uIEUodCxlLHIpe3ZhciBuLGEsbz1yLmNvbnRhaW5lcixzPXIuZnVsbExheW91dCxsPXMuX3NpemUsYz1yLmV2ZW50LGY9ISFlLmhMaW5lUG9pbnQsZD0hIWUudkxpbmVQb2ludDtpZihvLnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpLGR8fGYpe3ZhciBnPWguY29tYmluZShzLnBsb3RfYmdjb2xvcixzLnBhcGVyX2JnY29sb3IpO2lmKGYpe3ZhciB2LG0seT1lLmhMaW5lUG9pbnQ7bj15JiZ5LnhhLCJjdXJzb3IiPT09KGE9eSYmeS55YSkuc3Bpa2VzbmFwPyh2PWMucG9pbnRlclgsbT1jLnBvaW50ZXJZKToodj1uLl9vZmZzZXQreS54LG09YS5fb2Zmc2V0K3kueSk7dmFyIHgsYixfPWkucmVhZGFiaWxpdHkoeS5jb2xvcixnKTwxLjU/aC5jb250cmFzdChnKTp5LmNvbG9yLHc9YS5zcGlrZW1vZGUsaz1hLnNwaWtldGhpY2tuZXNzLFQ9YS5zcGlrZWNvbG9yfHxfLE09cC5nZXRQeFBvc2l0aW9uKHQsYSk7aWYoLTEhPT13LmluZGV4T2YoInRvYXhpcyIpfHwtMSE9PXcuaW5kZXhPZigiYWNyb3NzIikpe2lmKC0xIT09dy5pbmRleE9mKCJ0b2F4aXMiKSYmKHg9TSxiPXYpLC0xIT09dy5pbmRleE9mKCJhY3Jvc3MiKSl7dmFyIEE9YS5fY291bnRlckRvbWFpbk1pbixTPWEuX2NvdW50ZXJEb21haW5NYXg7ImZyZWUiPT09YS5hbmNob3ImJihBPU1hdGgubWluKEEsYS5wb3NpdGlvbiksUz1NYXRoLm1heChTLGEucG9zaXRpb24pKSx4PWwubCtBKmwudyxiPWwubCtTKmwud31vLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOngseDI6Yix5MTptLHkyOm0sInN0cm9rZS13aWR0aCI6ayxzdHJva2U6VCwic3Ryb2tlLWRhc2hhcnJheSI6dS5kYXNoU3R5bGUoYS5zcGlrZWRhc2gsayl9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApLG8uaW5zZXJ0KCJsaW5lIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7eDE6eCx4MjpiLHkxOm0seTI6bSwic3Ryb2tlLXdpZHRoIjprKzIsc3Ryb2tlOmd9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApfS0xIT09dy5pbmRleE9mKCJtYXJrZXIiKSYmby5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe2N4Ok0rKCJyaWdodCIhPT1hLnNpZGU/azotayksY3k6bSxyOmssZmlsbDpUfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCl9aWYoZCl7dmFyIEUsTCxDPWUudkxpbmVQb2ludDtuPUMmJkMueGEsYT1DJiZDLnlhLCJjdXJzb3IiPT09bi5zcGlrZXNuYXA/KEU9Yy5wb2ludGVyWCxMPWMucG9pbnRlclkpOihFPW4uX29mZnNldCtDLngsTD1hLl9vZmZzZXQrQy55KTt2YXIgUCxPLHo9aS5yZWFkYWJpbGl0eShDLmNvbG9yLGcpPDEuNT9oLmNvbnRyYXN0KGcpOkMuY29sb3IsST1uLnNwaWtlbW9kZSxEPW4uc3Bpa2V0aGlja25lc3MsUj1uLnNwaWtlY29sb3J8fHosRj1wLmdldFB4UG9zaXRpb24odCxuKTtpZigtMSE9PUkuaW5kZXhPZigidG9heGlzIil8fC0xIT09SS5pbmRleE9mKCJhY3Jvc3MiKSl7aWYoLTEhPT1JLmluZGV4T2YoInRvYXhpcyIpJiYoUD1GLE89TCksLTEhPT1JLmluZGV4T2YoImFjcm9zcyIpKXt2YXIgQj1uLl9jb3VudGVyRG9tYWluTWluLE49bi5fY291bnRlckRvbWFpbk1heDsiZnJlZSI9PT1uLmFuY2hvciYmKEI9TWF0aC5taW4oQixuLnBvc2l0aW9uKSxOPU1hdGgubWF4KE4sbi5wb3NpdGlvbikpLFA9bC50KygxLU4pKmwuaCxPPWwudCsoMS1CKSpsLmh9by5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTpFLHgyOkUseTE6UCx5MjpPLCJzdHJva2Utd2lkdGgiOkQsc3Ryb2tlOlIsInN0cm9rZS1kYXNoYXJyYXkiOnUuZGFzaFN0eWxlKG4uc3Bpa2VkYXNoLEQpfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxvLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOkUseDI6RSx5MTpQLHkyOk8sInN0cm9rZS13aWR0aCI6RCsyLHN0cm9rZTpnfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKX0tMSE9PUkuaW5kZXhPZigibWFya2VyIikmJm8uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHtjeDpFLGN5OkYtKCJ0b3AiIT09bi5zaWRlP0Q6LUQpLHI6RCxmaWxsOlJ9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKX19fWZ1bmN0aW9uIEwodCxlKXtyZXR1cm4hZXx8KGUudkxpbmVQb2ludCE9PXQuX3NwaWtlcG9pbnRzLnZMaW5lUG9pbnR8fGUuaExpbmVQb2ludCE9PXQuX3NwaWtlcG9pbnRzLmhMaW5lUG9pbnQpfWZ1bmN0aW9uIEModCxlKXtyZXR1cm4gbC5wbGFpblRleHQodHx8IiIse2xlbjplLGFsbG93ZWRUYWdzOlsiYnIiLCJzdWIiLCJzdXAiLCJiIiwiaSIsImVtIl19KX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL2xpYi9ldmVudHMiOjcwNywiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvciI6NzI4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi4vY29sb3IiOjU5MiwiLi4vZHJhZ2VsZW1lbnQiOjYxMCwiLi4vZHJhd2luZyI6NjEzLCIuL2NvbnN0YW50cyI6NjI1LCIuL2hlbHBlcnMiOjYyNyxkMzoxNjUsImZhc3QtaXNudW1lcmljIjoyMjgsdGlueWNvbG9yMjo1MzZ9XSw2Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3IoImhvdmVybGFiZWwuYmdjb2xvciIsKGE9YXx8e30pLmJnY29sb3IpLHIoImhvdmVybGFiZWwuYm9yZGVyY29sb3IiLGEuYm9yZGVyY29sb3IpLHIoImhvdmVybGFiZWwubmFtZWxlbmd0aCIsYS5uYW1lbGVuZ3RoKSxuLmNvZXJjZUZvbnQociwiaG92ZXJsYWJlbC5mb250IixhLmZvbnQpLHIoImhvdmVybGFiZWwuYWxpZ24iLGEuYWxpZ24pfX0seyIuLi8uLi9saWIiOjcxN31dLDYzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi9kcmFnZWxlbWVudCIpLG89dCgiLi9oZWxwZXJzIikscz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuL2hvdmVyIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImZ4Iixjb25zdGFudHM6dCgiLi9jb25zdGFudHMiKSxzY2hlbWE6e2xheW91dDpzfSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6cyxzdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0czp0KCIuL2xheW91dF9nbG9iYWxfZGVmYXVsdHMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGdldERpc3RhbmNlRnVuY3Rpb246by5nZXREaXN0YW5jZUZ1bmN0aW9uLGdldENsb3Nlc3Q6by5nZXRDbG9zZXN0LGluYm94Om8uaW5ib3gscXVhZHJhdHVyZTpvLnF1YWRyYXR1cmUsYXBwZW5kQXJyYXlQb2ludFZhbHVlOm8uYXBwZW5kQXJyYXlQb2ludFZhbHVlLGNhc3RIb3Zlck9wdGlvbjpmdW5jdGlvbih0LGUscil7cmV0dXJuIGEuY2FzdE9wdGlvbih0LGUsImhvdmVybGFiZWwuIityKX0sY2FzdEhvdmVyaW5mbzpmdW5jdGlvbih0LGUscil7cmV0dXJuIGEuY2FzdE9wdGlvbih0LHIsImhvdmVyaW5mbyIsZnVuY3Rpb24ocil7cmV0dXJuIGEuY29lcmNlSG92ZXJpbmZvKHtob3ZlcmluZm86cn0se19tb2R1bGU6dC5fbW9kdWxlfSxlKX0pfSxob3ZlcjpsLmhvdmVyLHVuaG92ZXI6aS51bmhvdmVyLGxvbmVIb3ZlcjpsLmxvbmVIb3Zlcixsb25lVW5ob3ZlcjpmdW5jdGlvbih0KXt2YXIgZT1hLmlzRDNTZWxlY3Rpb24odCk/dDpuLnNlbGVjdCh0KTtlLnNlbGVjdEFsbCgiZy5ob3ZlcnRleHQiKS5yZW1vdmUoKSxlLnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpfSxjbGljazp0KCIuL2NsaWNrIil9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi9kcmFnZWxlbWVudCI6NjEwLCIuL2F0dHJpYnV0ZXMiOjYyMiwiLi9jYWxjIjo2MjMsIi4vY2xpY2siOjYyNCwiLi9jb25zdGFudHMiOjYyNSwiLi9kZWZhdWx0cyI6NjI2LCIuL2hlbHBlcnMiOjYyNywiLi9ob3ZlciI6NjI4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MzEsIi4vbGF5b3V0X2RlZmF1bHRzIjo2MzIsIi4vbGF5b3V0X2dsb2JhbF9kZWZhdWx0cyI6NjMzLGQzOjE2NX1dLDYzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGE9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIikoe2VkaXRUeXBlOiJub25lIn0pO2EuZmFtaWx5LmRmbHQ9bi5IT1ZFUkZPTlQsYS5zaXplLmRmbHQ9bi5IT1ZFUkZPTlRTSVpFLGUuZXhwb3J0cz17Y2xpY2ttb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJldmVudCIsInNlbGVjdCJdLGRmbHQ6ImV2ZW50IixlZGl0VHlwZToicGxvdCIsZXh0cmFzOlsibm9uZSJdfSxkcmFnbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiem9vbSIsInBhbiIsInNlbGVjdCIsImxhc3NvIiwib3JiaXQiLCJ0dXJudGFibGUiLCExXSxkZmx0OiJ6b29tIixlZGl0VHlwZToibW9kZWJhciJ9LGhvdmVybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsieCIsInkiLCJjbG9zZXN0IiwhMV0sZWRpdFR5cGU6Im1vZGViYXIifSxob3ZlcmRpc3RhbmNlOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDoyMCxlZGl0VHlwZToibm9uZSJ9LHNwaWtlZGlzdGFuY2U6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjIwLGVkaXRUeXBlOiJub25lIn0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJub25lIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibm9uZSJ9LGZvbnQ6YSxhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsInJpZ2h0IiwiYXV0byJdLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJub25lIn0sbmFtZWxlbmd0aDp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6MTUsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToibm9uZSJ9LHNlbGVjdGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaCIsInYiLCJkIiwiYW55Il0sZGZsdDoiYW55IixlZGl0VHlwZToibm9uZSJ9fX0seyIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc5MSwiLi9jb25zdGFudHMiOjYyNX1dLDYzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGkocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbyxzPWkoImNsaWNrbW9kZSIpOyJzZWxlY3QiPT09aSgiZHJhZ21vZGUiKSYmaSgic2VsZWN0ZGlyZWN0aW9uIiksZS5faGFzKCJjYXJ0ZXNpYW4iKT9zLmluZGV4T2YoInNlbGVjdCIpPi0xP289ImNsb3Nlc3QiOihlLl9pc0hvcml6PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuX3NjYXR0ZXJTdGFja09wdHN8fHt9LG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGE9dFtuXSxpPWEueGF4aXMrYS55YXhpcyxvPXJbaV18fHt9LHM9b1thLnN0YWNrZ3JvdXBdfHx7fTtpZigiaCIhPT1hLm9yaWVudGF0aW9uJiYiaCIhPT1zLm9yaWVudGF0aW9uKXJldHVybiExfXJldHVybiEwfShyLGUpLG89ZS5faXNIb3Jpej8ieSI6IngiKTpvPSJjbG9zZXN0IixpKCJob3Zlcm1vZGUiLG8pJiYoaSgiaG92ZXJkaXN0YW5jZSIpLGkoInNwaWtlZGlzdGFuY2UiKSk7dmFyIGw9ZS5faGFzKCJtYXBib3giKSxjPWUuX2hhcygiZ2VvIiksdT1lLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoOyJ6b29tIj09PWUuZHJhZ21vZGUmJigobHx8YykmJjE9PT11fHxsJiZjJiYyPT09dSkmJihlLmRyYWdtb2RlPSJwYW4iKX19LHsiLi4vLi4vbGliIjo3MTcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjYzMX1dLDYzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EodCxlLGZ1bmN0aW9uKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9KX19LHsiLi4vLi4vbGliIjo3MTcsIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyI6NjI5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2MzF9XSw2MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9saWIvcmVnZXgiKS5jb3VudGVyLGk9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKS5pZFJlZ2V4LHM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGw9e3Jvd3M6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjoxLGVkaXRUeXBlOiJwbG90In0scm93b3JkZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCB0byBib3R0b20iLCJib3R0b20gdG8gdG9wIl0sZGZsdDoidG9wIHRvIGJvdHRvbSIsZWRpdFR5cGU6InBsb3QifSxjb2x1bW5zOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MSxlZGl0VHlwZToicGxvdCJ9LHN1YnBsb3RzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGRpbWVuc2lvbnM6MixpdGVtczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlthKCJ4eSIpLnRvU3RyaW5nKCksIiJdLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSx4YXhlczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltvLngudG9TdHJpbmcoKSwiIl0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHlheGVzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W28ueS50b1N0cmluZygpLCIiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0scGF0dGVybjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5kZXBlbmRlbnQiLCJjb3VwbGVkIl0sZGZsdDoiY291cGxlZCIsZWRpdFR5cGU6InBsb3QifSx4Z2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In0seWdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjppKHtuYW1lOiJncmlkIixlZGl0VHlwZToicGxvdCIsbm9HcmlkQ2VsbDohMH0se30pLHhzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJib3R0b20iLCJib3R0b20gcGxvdCIsInRvcCBwbG90IiwidG9wIl0sZGZsdDoiYm90dG9tIHBsb3QiLGVkaXRUeXBlOiJwbG90In0seXNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJsZWZ0IHBsb3QiLCJyaWdodCBwbG90IiwicmlnaHQiXSxkZmx0OiJsZWZ0IHBsb3QiLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifTtmdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj1lW3IrImF4ZXMiXSxhPU9iamVjdC5rZXlzKCh0Ll9zcGxvbUF4ZXN8fHt9KVtyXXx8e30pO3JldHVybiBBcnJheS5pc0FycmF5KG4pP246YS5sZW5ndGg/YTp2b2lkIDB9ZnVuY3Rpb24gdSh0LGUscixuLGEsaSl7dmFyIG89ZSh0KyJnYXAiLHIpLHM9ZSgiZG9tYWluLiIrdCk7ZSh0KyJzaWRlIixuKTtmb3IodmFyIGw9bmV3IEFycmF5KGEpLGM9c1swXSx1PShzWzFdLWMpLyhhLW8pLGg9dSooMS1vKSxmPTA7ZjxhO2YrKyl7dmFyIHA9Yyt1KmY7bFtpP2EtMS1mOmZdPVtwLHAraF19cmV0dXJuIGx9ZnVuY3Rpb24gaCh0LGUscixuLGEpe3ZhciBpLG89bmV3IEFycmF5KHIpO2Z1bmN0aW9uIHModCxyKXstMSE9PWUuaW5kZXhPZihyKSYmdm9pZCAwPT09bltyXT8ob1t0XT1yLG5bcl09dCk6b1t0XT0iIn1pZihBcnJheS5pc0FycmF5KHQpKWZvcihpPTA7aTxyO2krKylzKGksdFtpXSk7ZWxzZSBmb3IocygwLGEpLGk9MTtpPHI7aSsrKXMoaSxhKyhpKzEpKTtyZXR1cm4gb31lLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiZ3JpZCIsc2NoZW1hOntsYXlvdXQ6e2dyaWQ6bH19LGxheW91dEF0dHJpYnV0ZXM6bCxzaXplRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdyaWR8fHt9LGE9YyhlLHIsIngiKSxpPWMoZSxyLCJ5Iik7aWYodC5ncmlkfHxhfHxpKXt2YXIgbyxoLGY9QXJyYXkuaXNBcnJheShyLnN1YnBsb3RzKSYmQXJyYXkuaXNBcnJheShyLnN1YnBsb3RzWzBdKSxwPUFycmF5LmlzQXJyYXkoYSksZD1BcnJheS5pc0FycmF5KGkpLGc9cCYmYSE9PXIueGF4ZXMmJmQmJmkhPT1yLnlheGVzO2Y/KG89ci5zdWJwbG90cy5sZW5ndGgsaD1yLnN1YnBsb3RzWzBdLmxlbmd0aCk6KGQmJihvPWkubGVuZ3RoKSxwJiYoaD1hLmxlbmd0aCkpO3ZhciB2PXMubmV3Q29udGFpbmVyKGUsImdyaWQiKSxtPVQoInJvd3MiLG8pLHk9VCgiY29sdW1ucyIsaCk7aWYobSp5PjEpe2Z8fHB8fGR8fCJpbmRlcGVuZGVudCI9PT1UKCJwYXR0ZXJuIikmJihmPSEwKSx2Ll9oYXNTdWJwbG90R3JpZD1mO3ZhciB4LGIsXz0idG9wIHRvIGJvdHRvbSI9PT1UKCJyb3dvcmRlciIpLHc9Zj8uMjouMSxrPWY/LjM6LjE7ZyYmZS5fc3Bsb21HcmlkRGZsdCYmKHg9ZS5fc3Bsb21HcmlkRGZsdC54c2lkZSxiPWUuX3NwbG9tR3JpZERmbHQueXNpZGUpLHYuX2RvbWFpbnM9e3g6dSgieCIsVCx3LHgseSkseTp1KCJ5IixULGssYixtLF8pfX1lbHNlIGRlbGV0ZSBlLmdyaWR9ZnVuY3Rpb24gVCh0LGUpe3JldHVybiBuLmNvZXJjZShyLHYsbCx0LGUpfX0sY29udGVudERlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5ncmlkO2lmKHImJnIuX2RvbWFpbnMpe3ZhciBuLGEsaSxvLHMsbCx1LGY9dC5ncmlkfHx7fSxwPWUuX3N1YnBsb3RzLGQ9ci5faGFzU3VicGxvdEdyaWQsZz1yLnJvd3Msdj1yLmNvbHVtbnMsbT0iaW5kZXBlbmRlbnQiPT09ci5wYXR0ZXJuLHk9ci5fYXhpc01hcD17fTtpZihkKXt2YXIgeD1mLnN1YnBsb3RzfHxbXTtsPXIuc3VicGxvdHM9bmV3IEFycmF5KGcpO3ZhciBiPTE7Zm9yKG49MDtuPGc7bisrKXt2YXIgXz1sW25dPW5ldyBBcnJheSh2KSx3PXhbbl18fFtdO2ZvcihhPTA7YTx2O2ErKylpZihtPyhzPTE9PT1iPyJ4eSI6IngiK2IrInkiK2IsYisrKTpzPXdbYV0sX1thXT0iIiwtMSE9PXAuY2FydGVzaWFuLmluZGV4T2Yocykpe2lmKHU9cy5pbmRleE9mKCJ5IiksaT1zLnNsaWNlKDAsdSksbz1zLnNsaWNlKHUpLHZvaWQgMCE9PXlbaV0mJnlbaV0hPT1hfHx2b2lkIDAhPT15W29dJiZ5W29dIT09biljb250aW51ZTtfW2FdPXMseVtpXT1hLHlbb109bn19fWVsc2V7dmFyIGs9YyhlLGYsIngiKSxUPWMoZSxmLCJ5Iik7ci54YXhlcz1oKGsscC54YXhpcyx2LHksIngiKSxyLnlheGVzPWgoVCxwLnlheGlzLGcseSwieSIpfXZhciBNPXIuX2FuY2hvcnM9e30sQT0idG9wIHRvIGJvdHRvbSI9PT1yLnJvd29yZGVyO2Zvcih2YXIgUyBpbiB5KXt2YXIgRSxMLEMsUD1TLmNoYXJBdCgwKSxPPXJbUCsic2lkZSJdO2lmKE8ubGVuZ3RoPDgpTVtTXT0iZnJlZSI7ZWxzZSBpZigieCI9PT1QKXtpZigidCI9PT1PLmNoYXJBdCgwKT09PUE/KEU9MCxMPTEsQz1nKTooRT1nLTEsTD0tMSxDPS0xKSxkKXt2YXIgej15W1NdO2ZvcihuPUU7biE9PUM7bis9TClpZigocz1sW25dW3pdKSYmKHU9cy5pbmRleE9mKCJ5Iikscy5zbGljZSgwLHUpPT09Uykpe01bU109cy5zbGljZSh1KTticmVha319ZWxzZSBmb3Iobj1FO24hPT1DO24rPUwpaWYobz1yLnlheGVzW25dLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihTK28pKXtNW1NdPW87YnJlYWt9fWVsc2UgaWYoImwiPT09Ty5jaGFyQXQoMCk/KEU9MCxMPTEsQz12KTooRT12LTEsTD0tMSxDPS0xKSxkKXt2YXIgST15W1NdO2ZvcihuPUU7biE9PUM7bis9TClpZigocz1sW0ldW25dKSYmKHU9cy5pbmRleE9mKCJ5Iikscy5zbGljZSh1KT09PVMpKXtNW1NdPXMuc2xpY2UoMCx1KTticmVha319ZWxzZSBmb3Iobj1FO24hPT1DO24rPUwpaWYoaT1yLnhheGVzW25dLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihpK1MpKXtNW1NdPWk7YnJlYWt9fX19fX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL3JlZ2V4Ijo3MzMsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc1NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NzcxLCIuLi8uLi9wbG90cy9kb21haW4iOjc5MH1dLDYzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7ZS5leHBvcnRzPWEoImltYWdlIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiYXJyYXlkcmF3In0sc291cmNlOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJhcnJheWRyYXcifSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYmVsb3ciLCJhYm92ZSJdLGRmbHQ6ImFib3ZlIixlZGl0VHlwZToiYXJyYXlkcmF3In0sc2l6ZXg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzaXpleTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNpemluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZmlsbCIsImNvbnRhaW4iLCJzdHJldGNoIl0sZGZsdDoiY29udGFpbiIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4Ont2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0seTp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJ0b3AiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsbi5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZGZsdDoicGFwZXIiLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsbi5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZGZsdDoicGFwZXIiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxlZGl0VHlwZToiYXJyYXlkcmF3In0pfSx7Ii4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc1NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NzcxfV0sNjM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIvdG9fbG9nX3JhbmdlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2U9ZXx8e307dmFyIG89ImxvZyI9PT1yJiYibGluZWFyIj09PWUudHlwZSxzPSJsaW5lYXIiPT09ciYmImxvZyI9PT1lLnR5cGU7aWYob3x8cylmb3IodmFyIGwsYyx1PXQuX2Z1bGxMYXlvdXQuaW1hZ2VzLGg9ZS5faWQuY2hhckF0KDApLGY9MDtmPHUubGVuZ3RoO2YrKylpZihjPSJpbWFnZXNbIitmKyJdLiIsKGw9dVtmXSlbaCsicmVmIl09PT1lLl9pZCl7dmFyIHA9bFtoXSxkPWxbInNpemUiK2hdLGc9bnVsbCx2PW51bGw7aWYobyl7Zz1hKHAsZS5yYW5nZSk7dmFyIG09ZC9NYXRoLnBvdygxMCxnKS8yO3Y9MipNYXRoLmxvZyhtK01hdGguc3FydCgxK20qbSkpL01hdGguTE4xMH1lbHNlIHY9KGc9TWF0aC5wb3coMTAscCkpKihNYXRoLnBvdygxMCxkLzIpLU1hdGgucG93KDEwLC1kLzIpKTtuKGcpP24odil8fCh2PW51bGwpOihnPW51bGwsdj1udWxsKSxpKGMraCxnKSxpKGMrInNpemUiK2gsdil9fX0seyIuLi8uLi9saWIvdG9fbG9nX3JhbmdlIjo3NDMsImZhc3QtaXNudW1lcmljIjoyMjh9XSw2Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKHQsZSxyKXtmdW5jdGlvbiBpKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsYSl9dmFyIHM9aSgic291cmNlIik7aWYoIWkoInZpc2libGUiLCEhcykpcmV0dXJuIGU7aSgibGF5ZXIiKSxpKCJ4YW5jaG9yIiksaSgieWFuY2hvciIpLGkoInNpemV4IiksaSgic2l6ZXkiKSxpKCJzaXppbmciKSxpKCJvcGFjaXR5Iik7Zm9yKHZhciBsPXtfZnVsbExheW91dDpyfSxjPVsieCIsInkiXSx1PTA7dTwyO3UrKyl7dmFyIGg9Y1t1XSxmPWEuY29lcmNlUmVmKHQsZSxsLGgsInBhcGVyIik7aWYoInBhcGVyIiE9PWYpYS5nZXRGcm9tSWQobCxmKS5faW1nSW5kaWNlcy5wdXNoKGUuX2luZGV4KTthLmNvZXJjZVBvc2l0aW9uKGUsbCxpLGYsaCwwKX1yZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpKHQsZSx7bmFtZToiaW1hZ2VzIixoYW5kbGVJdGVtRGVmYXVsdHM6c30pfX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NjEsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsIi4vYXR0cmlidXRlcyI6NjM1fV0sNjM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi9kcmF3aW5nIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixzPXQuX2Z1bGxMYXlvdXQsbD1bXSxjPXt9LHU9W107Zm9yKHI9MDtyPHMuaW1hZ2VzLmxlbmd0aDtyKyspe3ZhciBoPXMuaW1hZ2VzW3JdO2lmKGgudmlzaWJsZSlpZigiYmVsb3ciPT09aC5sYXllciYmInBhcGVyIiE9PWgueHJlZiYmInBhcGVyIiE9PWgueXJlZil7ZT1oLnhyZWYraC55cmVmO3ZhciBmPXMuX3Bsb3RzW2VdO2lmKCFmKXt1LnB1c2goaCk7Y29udGludWV9Zi5tYWlucGxvdCYmKGU9Zi5tYWlucGxvdC5pZCksY1tlXXx8KGNbZV09W10pLGNbZV0ucHVzaChoKX1lbHNlImFib3ZlIj09PWgubGF5ZXI/bC5wdXNoKGgpOnUucHVzaChoKX12YXIgcD17eDp7bGVmdDp7c2l6aW5nOiJ4TWluIixvZmZzZXQ6MH0sY2VudGVyOntzaXppbmc6InhNaWQiLG9mZnNldDotLjV9LHJpZ2h0OntzaXppbmc6InhNYXgiLG9mZnNldDotMX19LHk6e3RvcDp7c2l6aW5nOiJZTWluIixvZmZzZXQ6MH0sbWlkZGxlOntzaXppbmc6IllNaWQiLG9mZnNldDotLjV9LGJvdHRvbTp7c2l6aW5nOiJZTWF4IixvZmZzZXQ6LTF9fX07ZnVuY3Rpb24gZChlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZih0aGlzLl9pbWdTcmMhPT1lLnNvdXJjZSlpZihyLmF0dHIoInhtbG5zIixvLnN2ZyksZS5zb3VyY2UmJiJkYXRhOiI9PT1lLnNvdXJjZS5zbGljZSgwLDUpKXIuYXR0cigieGxpbms6aHJlZiIsZS5zb3VyY2UpLHRoaXMuX2ltZ1NyYz1lLnNvdXJjZTtlbHNle3ZhciBhPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBJbWFnZTtmdW5jdGlvbiBhKCl7ci5yZW1vdmUoKSx0KCl9dGhpcy5pbWc9bixuLnNldEF0dHJpYnV0ZSgiY3Jvc3NPcmlnaW4iLCJhbm9ueW1vdXMiKSxuLm9uZXJyb3I9YSxuLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Uud2lkdGg9dGhpcy53aWR0aCxlLmhlaWdodD10aGlzLmhlaWdodCxlLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKHRoaXMsMCwwKTt2YXIgbj1lLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7ci5hdHRyKCJ4bGluazpocmVmIixuKSx0KCl9LHIub24oImVycm9yIixhKSxuLnNyYz1lLnNvdXJjZSx0aGlzLl9pbWdTcmM9ZS5zb3VyY2V9LmJpbmQodGhpcykpO3QuX3Byb21pc2VzLnB1c2goYSl9fWZ1bmN0aW9uIGcoZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbz1pLmdldEZyb21JZCh0LGUueHJlZiksbD1pLmdldEZyb21JZCh0LGUueXJlZiksYz1zLl9zaXplLHU9bz9NYXRoLmFicyhvLmwycChlLnNpemV4KS1vLmwycCgwKSk6ZS5zaXpleCpjLncsaD1sP01hdGguYWJzKGwubDJwKGUuc2l6ZXkpLWwubDJwKDApKTplLnNpemV5KmMuaCxmPXUqcC54W2UueGFuY2hvcl0ub2Zmc2V0LGQ9aCpwLnlbZS55YW5jaG9yXS5vZmZzZXQsZz1wLnhbZS54YW5jaG9yXS5zaXppbmcrcC55W2UueWFuY2hvcl0uc2l6aW5nLHY9KG8/by5yMnAoZS54KStvLl9vZmZzZXQ6ZS54KmMudytjLmwpK2YsbT0obD9sLnIycChlLnkpK2wuX29mZnNldDpjLmgtZS55KmMuaCtjLnQpK2Q7c3dpdGNoKGUuc2l6aW5nKXtjYXNlImZpbGwiOmcrPSIgc2xpY2UiO2JyZWFrO2Nhc2Uic3RyZXRjaCI6Zz0ibm9uZSJ9ci5hdHRyKHt4OnYseTptLHdpZHRoOnUsaGVpZ2h0OmgscHJlc2VydmVBc3BlY3RSYXRpbzpnLG9wYWNpdHk6ZS5vcGFjaXR5fSk7dmFyIHk9KG8/by5faWQ6IiIpKyhsP2wuX2lkOiIiKTthLnNldENsaXBVcmwocix5PyJjbGlwIitzLl91aWQreTpudWxsLHQpfXZhciB2PXMuX2ltYWdlTG93ZXJMYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YSh1KSxtPXMuX2ltYWdlVXBwZXJMYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YShsKTt2LmVudGVyKCkuYXBwZW5kKCJpbWFnZSIpLG0uZW50ZXIoKS5hcHBlbmQoImltYWdlIiksdi5leGl0KCkucmVtb3ZlKCksbS5leGl0KCkucmVtb3ZlKCksdi5lYWNoKGZ1bmN0aW9uKHQpe2QuYmluZCh0aGlzKSh0KSxnLmJpbmQodGhpcykodCl9KSxtLmVhY2goZnVuY3Rpb24odCl7ZC5iaW5kKHRoaXMpKHQpLGcuYmluZCh0aGlzKSh0KX0pO3ZhciB5PU9iamVjdC5rZXlzKHMuX3Bsb3RzKTtmb3Iocj0wO3I8eS5sZW5ndGg7cisrKXtlPXlbcl07dmFyIHg9cy5fcGxvdHNbZV07aWYoeC5pbWFnZWxheWVyKXt2YXIgYj14LmltYWdlbGF5ZXIuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoY1tlXXx8W10pO2IuZW50ZXIoKS5hcHBlbmQoImltYWdlIiksYi5leGl0KCkucmVtb3ZlKCksYi5lYWNoKGZ1bmN0aW9uKHQpe2QuYmluZCh0aGlzKSh0KSxnLmJpbmQodGhpcykodCl9KX19fX0seyIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6Njk0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi9kcmF3aW5nIjo2MTMsZDM6MTY1fV0sNjM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJpbWFnZXMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoImltYWdlcyIpLGRyYXc6dCgiLi9kcmF3IiksY29udmVydENvb3Jkczp0KCIuL2NvbnZlcnRfY29vcmRzIil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiOjc3NSwiLi9hdHRyaWJ1dGVzIjo2MzUsIi4vY29udmVydF9jb29yZHMiOjYzNiwiLi9kZWZhdWx0cyI6NjM3LCIuL2RyYXciOjYzOH1dLDY0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibGVnZW5kIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImxlZ2VuZCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToibGVnZW5kIn0sZm9udDpuKHtlZGl0VHlwZToibGVnZW5kIn0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6InYiLGVkaXRUeXBlOiJsZWdlbmQifSx0cmFjZW9yZGVyOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJyZXZlcnNlZCIsImdyb3VwZWQiXSxleHRyYXM6WyJub3JtYWwiXSxlZGl0VHlwZToibGVnZW5kIn0sdHJhY2Vncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOiJsZWdlbmQifSxpdGVtc2l6aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNvbnN0YW50Il0sZGZsdDoidHJhY2UiLGVkaXRUeXBlOiJsZWdlbmQifSxpdGVtY2xpY2s6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvZ2dsZSIsInRvZ2dsZW90aGVycyIsITFdLGRmbHQ6InRvZ2dsZSIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGl0ZW1kb3VibGVjbGljazp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9nZ2xlIiwidG9nZ2xlb3RoZXJzIiwhMV0sZGZsdDoidG9nZ2xlb3RoZXJzIixlZGl0VHlwZToibGVnZW5kIn0seDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6ImxlZ2VuZCJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0IixlZGl0VHlwZToibGVnZW5kIn0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6ImxlZ2VuZCJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxlZGl0VHlwZToibGVnZW5kIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHZhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIixlZGl0VHlwZToibGVnZW5kIn0sdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToibGVnZW5kIn0sZm9udDpuKHtlZGl0VHlwZToibGVnZW5kIn0pLHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsImxlZnQiLCJ0b3AgbGVmdCJdLGVkaXRUeXBlOiJsZWdlbmQifSxlZGl0VHlwZToibGVnZW5kIn0sZWRpdFR5cGU6ImxlZ2VuZCJ9fSx7Ii4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NzkxLCIuLi9jb2xvci9hdHRyaWJ1dGVzIjo1OTF9XSw2NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzY3JvbGxCYXJXaWR0aDo2LHNjcm9sbEJhck1pbkhlaWdodDoyMCxzY3JvbGxCYXJDb2xvcjoiIzgwOEJBNCIsc2Nyb2xsQmFyTWFyZ2luOjQsc2Nyb2xsQmFyRW50ZXJBdHRyczp7cng6MjAscnk6Myx3aWR0aDowLGhlaWdodDowfSx0aXRsZVBhZDoyLHRleHRHYXA6NDAsaXRlbUdhcDo1fX0se31dLDY0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYz10LmxlZ2VuZHx8e30sdT0wLGg9ITEsZj0ibm9ybWFsIixwPTA7cDxyLmxlbmd0aDtwKyspe3ZhciBkPXJbcF07ZC52aXNpYmxlJiYoKGQuc2hvd2xlZ2VuZHx8ZC5fZGZsdFNob3dMZWdlbmQmJiEoZC5fbW9kdWxlJiZkLl9tb2R1bGUuYXR0cmlidXRlcyYmZC5fbW9kdWxlLmF0dHJpYnV0ZXMuc2hvd2xlZ2VuZCYmITE9PT1kLl9tb2R1bGUuYXR0cmlidXRlcy5zaG93bGVnZW5kLmRmbHQpKSYmKHUrKyxkLnNob3dsZWdlbmQmJihoPSEwLChuLnRyYWNlSXMoZCwicGllLWxpa2UiKXx8ITA9PT1kLl9pbnB1dC5zaG93bGVnZW5kKSYmdSsrKSksKG4udHJhY2VJcyhkLCJiYXIiKSYmInN0YWNrIj09PWUuYmFybW9kZXx8LTEhPT1bInRvbmV4dHgiLCJ0b25leHR5Il0uaW5kZXhPZihkLmZpbGwpKSYmKGY9bC5pc0dyb3VwZWQoe3RyYWNlb3JkZXI6Zn0pPyJncm91cGVkK3JldmVyc2VkIjoicmV2ZXJzZWQiKSx2b2lkIDAhPT1kLmxlZ2VuZGdyb3VwJiYiIiE9PWQubGVnZW5kZ3JvdXAmJihmPWwuaXNSZXZlcnNlZCh7dHJhY2VvcmRlcjpmfSk/InJldmVyc2VkK2dyb3VwZWQiOiJncm91cGVkIikpfXZhciBnPWEuY29lcmNlKHQsZSxzLCJzaG93bGVnZW5kIixoJiZ1PjEpO2lmKCExIT09Z3x8Yy51aXJldmlzaW9uKXt2YXIgdj1pLm5ld0NvbnRhaW5lcihlLCJsZWdlbmQiKTtpZihfKCJ1aXJldmlzaW9uIixlLnVpcmV2aXNpb24pLCExIT09Zyl7XygiYmdjb2xvciIsZS5wYXBlcl9iZ2NvbG9yKSxfKCJib3JkZXJjb2xvciIpLF8oImJvcmRlcndpZHRoIiksYS5jb2VyY2VGb250KF8sImZvbnQiLGUuZm9udCk7dmFyIG0seSx4LGI9Xygib3JpZW50YXRpb24iKTsiaCI9PT1iPyhtPTAsbi5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikodC54YXhpcyk/KHk9MS4xLHg9ImJvdHRvbSIpOih5PS0uMSx4PSJ0b3AiKSk6KG09MS4wMix5PTEseD0iYXV0byIpLF8oInRyYWNlb3JkZXIiLGYpLGwuaXNHcm91cGVkKGUubGVnZW5kKSYmXygidHJhY2Vncm91cGdhcCIpLF8oIml0ZW1zaXppbmciKSxfKCJpdGVtY2xpY2siKSxfKCJpdGVtZG91YmxlY2xpY2siKSxfKCJ4IixtKSxfKCJ4YW5jaG9yIiksXygieSIseSksXygieWFuY2hvciIseCksXygidmFsaWduIiksYS5ub25lT3JBbGwoYyx2LFsieCIsInkiXSksXygidGl0bGUudGV4dCIpJiYoXygidGl0bGUuc2lkZSIsImgiPT09Yj8ibGVmdCI6InRvcCIpLGEuY29lcmNlRm9udChfLCJ0aXRsZS5mb250IixlLmZvbnQpKX19ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBhLmNvZXJjZShjLHYsbyx0LGUpfX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc1NSwiLi4vLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiOjgxNywiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi9hdHRyaWJ1dGVzIjo2NDAsIi4vaGVscGVycyI6NjQ2fV0sNjQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vbGliL2V2ZW50cyIpLGw9dCgiLi4vZHJhZ2VsZW1lbnQiKSxjPXQoIi4uL2RyYXdpbmciKSx1PXQoIi4uL2NvbG9yIiksaD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxmPXQoIi4vaGFuZGxlX2NsaWNrIikscD10KCIuL2NvbnN0YW50cyIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLGc9ZC5MSU5FX1NQQUNJTkcsdj1kLkZST01fVEwsbT1kLkZST01fQlIseT10KCIuL2dldF9sZWdlbmRfZGF0YSIpLHg9dCgiLi9zdHlsZSIpLGI9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gXyh0LGUscixuLGEpe3ZhciBpPXIuZGF0YSgpWzBdWzBdLnRyYWNlLGw9e2V2ZW50OmEsbm9kZTpyLm5vZGUoKSxjdXJ2ZU51bWJlcjppLmluZGV4LGV4cGFuZGVkSW5kZXg6aS5fZXhwYW5kZWRJbmRleCxkYXRhOnQuZGF0YSxsYXlvdXQ6dC5sYXlvdXQsZnJhbWVzOnQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsY29uZmlnOnQuX2NvbnRleHQsZnVsbERhdGE6dC5fZnVsbERhdGEsZnVsbExheW91dDp0Ll9mdWxsTGF5b3V0fTtpZihpLl9ncm91cCYmKGwuZ3JvdXA9aS5fZ3JvdXApLG8udHJhY2VJcyhpLCJwaWUtbGlrZSIpJiYobC5sYWJlbD1yLmRhdHVtKClbMF0ubGFiZWwpLCExIT09cy50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfbGVnZW5kY2xpY2siLGwpKWlmKDE9PT1uKWUuX2NsaWNrVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZihyLHQsbil9LHQuX2NvbnRleHQuZG91YmxlQ2xpY2tEZWxheSk7ZWxzZSBpZigyPT09bil7ZS5fY2xpY2tUaW1lb3V0JiZjbGVhclRpbWVvdXQoZS5fY2xpY2tUaW1lb3V0KSx0Ll9sZWdlbmRNb3VzZURvd25UaW1lPTAsITEhPT1zLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9sZWdlbmRkb3VibGVjbGljayIsbCkmJmYocix0LG4pfX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9dC5kYXRhKClbMF1bMF0sbj1lLl9mdWxsTGF5b3V0LmxlZ2VuZCxpPXIudHJhY2Uscz1vLnRyYWNlSXMoaSwicGllLWxpa2UiKSxsPWkuaW5kZXgsdT1lLl9jb250ZXh0LmVkaXRzLmxlZ2VuZFRleHQmJiFzLGY9bi5fbWF4TmFtZUxlbmd0aCxkPXM/ci5sYWJlbDppLm5hbWU7aS5fbWV0YSYmKGQ9YS50ZW1wbGF0ZVN0cmluZyhkLGkuX21ldGEpKTt2YXIgZz1hLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IiwibGVnZW5kdGV4dCIpO2cuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmNsYXNzZWQoInVzZXItc2VsZWN0LW5vbmUiLCEwKS5jYWxsKGMuZm9udCxuLmZvbnQpLnRleHQodT9rKGQsZik6ZCksaC5wb3NpdGlvblRleHQoZyxwLnRleHRHYXAsMCksdT9nLmNhbGwoaC5tYWtlRWRpdGFibGUse2dkOmUsdGV4dDpkfSkuY2FsbChNLHQsZSkub24oImVkaXQiLGZ1bmN0aW9uKG4pe3RoaXMudGV4dChrKG4sZikpLmNhbGwoTSx0LGUpO3ZhciBpPXIudHJhY2UuX2Z1bGxJbnB1dHx8e30scz17fTtpZihvLmhhc1RyYW5zZm9ybShpLCJncm91cGJ5Iikpe3ZhciBjPW8uZ2V0VHJhbnNmb3JtSW5kaWNlcyhpLCJncm91cGJ5IiksdT1jW2MubGVuZ3RoLTFdLGg9YS5rZXllZENvbnRhaW5lcihpLCJ0cmFuc2Zvcm1zWyIrdSsiXS5zdHlsZXMiLCJ0YXJnZXQiLCJ2YWx1ZS5uYW1lIik7aC5zZXQoci50cmFjZS5fZ3JvdXAsbikscz1oLmNvbnN0cnVjdFVwZGF0ZSgpfWVsc2Ugcy5uYW1lPW47cmV0dXJuIG8uY2FsbCgiX2d1aVJlc3R5bGUiLGUscyxsKX0pOk0oZyx0LGUpfWZ1bmN0aW9uIGsodCxlKXt2YXIgcj1NYXRoLm1heCg0LGUpO2lmKHQmJnQudHJpbSgpLmxlbmd0aD49ci8yKXJldHVybiB0O2Zvcih2YXIgbj1yLSh0PXR8fCIiKS5sZW5ndGg7bj4wO24tLSl0Kz0iICI7cmV0dXJuIHR9ZnVuY3Rpb24gVCh0LGUpe3ZhciByLGk9ZS5fY29udGV4dC5kb3VibGVDbGlja0RlbGF5LG89MSxzPWEuZW5zdXJlU2luZ2xlKHQsInJlY3QiLCJsZWdlbmR0b2dnbGUiLGZ1bmN0aW9uKHQpe3Quc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmNhbGwodS5maWxsLCJyZ2JhKDAsMCwwLDApIil9KTtzLm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7KHI9KG5ldyBEYXRlKS5nZXRUaW1lKCkpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU8aT9vKz0xOihvPTEsZS5fbGVnZW5kTW91c2VEb3duVGltZT1yKX0pLHMub24oIm1vdXNldXAiLGZ1bmN0aW9uKCl7aWYoIWUuX2RyYWdnZWQmJiFlLl9lZGl0aW5nKXt2YXIgcj1lLl9mdWxsTGF5b3V0LmxlZ2VuZDsobmV3IERhdGUpLmdldFRpbWUoKS1lLl9sZWdlbmRNb3VzZURvd25UaW1lPmkmJihvPU1hdGgubWF4KG8tMSwxKSksXyhlLHIsdCxvLG4uZXZlbnQpfX0pfWZ1bmN0aW9uIE0odCxlLHIpe2guY29udmVydFRvVHNwYW5zKHQscixmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUpe3ZhciByPXQuZGF0YSgpWzBdWzBdO2lmKHImJiFyLnRyYWNlLnNob3dsZWdlbmQpcmV0dXJuIHZvaWQgdC5yZW1vdmUoKTt2YXIgbixhLGk9dC5zZWxlY3QoImdbY2xhc3MqPW1hdGgtZ3JvdXBdIiksbz1pLm5vZGUoKSxzPWUuX2Z1bGxMYXlvdXQubGVnZW5kLmJvcmRlcndpZHRoLGw9ZS5fZnVsbExheW91dC5sZWdlbmQsdT0ocj9sOmwudGl0bGUpLmZvbnQuc2l6ZSpnO2lmKG8pe3ZhciBmPWMuYkJveChvKTtuPWYuaGVpZ2h0LGE9Zi53aWR0aCxyP2Muc2V0VHJhbnNsYXRlKGksMCwuMjUqbik6Yy5zZXRUcmFuc2xhdGUoaSxzLC43NSpuK3MpfWVsc2V7dmFyIGQ9dC5zZWxlY3Qocj8iLmxlZ2VuZHRleHQiOiIubGVnZW5kdGl0bGV0ZXh0Iiksdj1oLmxpbmVDb3VudChkKSxtPWQubm9kZSgpO249dSp2LGE9bT9jLmJCb3gobSkud2lkdGg6MDt2YXIgeT11Kigodi0xKS8yLS4zKTtyP2gucG9zaXRpb25UZXh0KGQscC50ZXh0R2FwLC15KTpoLnBvc2l0aW9uVGV4dChkLHAudGl0bGVQYWQrcyx1K3MpfXI/KHIubGluZUhlaWdodD11LHIuaGVpZ2h0PU1hdGgubWF4KG4sMTYpKzMsci53aWR0aD1hKToobC5fdGl0bGVXaWR0aD1hLGwuX3RpdGxlSGVpZ2h0PW4pfShlLHIpfSl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gYS5pc1JpZ2h0QW5jaG9yKHQpPyJyaWdodCI6YS5pc0NlbnRlckFuY2hvcih0KT8iY2VudGVyIjoibGVmdCJ9ZnVuY3Rpb24gUyh0KXtyZXR1cm4gYS5pc0JvdHRvbUFuY2hvcih0KT8iYm90dG9tIjphLmlzTWlkZGxlQW5jaG9yKHQpPyJtaWRkbGUiOiJ0b3AifWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ImxlZ2VuZCIrZS5fdWlkO2lmKGUuX2luZm9sYXllciYmdC5jYWxjZGF0YSl7dC5fbGVnZW5kTW91c2VEb3duVGltZXx8KHQuX2xlZ2VuZE1vdXNlRG93blRpbWU9MCk7dmFyIHM9ZS5sZWdlbmQsaD1lLnNob3dsZWdlbmQmJnkodC5jYWxjZGF0YSxzKSxmPWUuaGlkZGVubGFiZWxzfHxbXTtpZighZS5zaG93bGVnZW5kfHwhaC5sZW5ndGgpcmV0dXJuIGUuX2luZm9sYXllci5zZWxlY3RBbGwoIi5sZWdlbmQiKS5yZW1vdmUoKSxlLl90b3BkZWZzLnNlbGVjdCgiIyIrcikucmVtb3ZlKCksaS5hdXRvTWFyZ2luKHQsImxlZ2VuZCIpO3ZhciBkPWEuZW5zdXJlU2luZ2xlKGUuX2luZm9sYXllciwiZyIsImxlZ2VuZCIsZnVuY3Rpb24odCl7dC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSksZz1hLmVuc3VyZVNpbmdsZUJ5SWQoZS5fdG9wZGVmcywiY2xpcFBhdGgiLHIsZnVuY3Rpb24odCl7dC5hcHBlbmQoInJlY3QiKX0pLGs9YS5lbnN1cmVTaW5nbGUoZCwicmVjdCIsImJnIixmdW5jdGlvbih0KXt0LmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX0pO2suY2FsbCh1LnN0cm9rZSxzLmJvcmRlcmNvbG9yKS5jYWxsKHUuZmlsbCxzLmJnY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHMuYm9yZGVyd2lkdGgrInB4Iik7dmFyIEU9YS5lbnN1cmVTaW5nbGUoZCwiZyIsInNjcm9sbGJveCIpLEw9cy50aXRsZTtpZihzLl90aXRsZVdpZHRoPTAscy5fdGl0bGVIZWlnaHQ9MCxMLnRleHQpe3ZhciBDPWEuZW5zdXJlU2luZ2xlKEUsInRleHQiLCJsZWdlbmR0aXRsZXRleHQiKTtDLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKS5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuY2FsbChjLmZvbnQsTC5mb250KS50ZXh0KEwudGV4dCksTShDLEUsdCl9dmFyIFA9YS5lbnN1cmVTaW5nbGUoZCwicmVjdCIsInNjcm9sbGJhciIsZnVuY3Rpb24odCl7dC5hdHRyKHAuc2Nyb2xsQmFyRW50ZXJBdHRycykuY2FsbCh1LmZpbGwscC5zY3JvbGxCYXJDb2xvcil9KSxPPUUuc2VsZWN0QWxsKCJnLmdyb3VwcyIpLmRhdGEoaCk7Ty5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JvdXBzIiksTy5leGl0KCkucmVtb3ZlKCk7dmFyIHo9Ty5zZWxlY3RBbGwoImcudHJhY2VzIikuZGF0YShhLmlkZW50aXR5KTt6LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0cmFjZXMiKSx6LmV4aXQoKS5yZW1vdmUoKSx6LnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlO3JldHVybiBvLnRyYWNlSXMoZSwicGllLWxpa2UiKT8tMSE9PWYuaW5kZXhPZih0WzBdLmxhYmVsKT8uNToxOiJsZWdlbmRvbmx5Ij09PWUudmlzaWJsZT8uNToxfSkuZWFjaChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLmNhbGwodyx0KX0pLmNhbGwoeCx0KS5lYWNoKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuY2FsbChULHQpfSksYS5zeW5jT3JBc3luYyhbaS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10Ll9mdWxsTGF5b3V0LGk9YS5sZWdlbmQsbz1hLl9zaXplLHM9Yi5pc1ZlcnRpY2FsKGkpLGw9Yi5pc0dyb3VwZWQoaSksdT1pLmJvcmRlcndpZHRoLGg9Mip1LGY9cC50ZXh0R2FwLGQ9cC5pdGVtR2FwLGc9MioodStkKSx2PVMoaSksbT1pLnk8MHx8MD09PWkueSYmInRvcCI9PT12LHk9aS55PjF8fDE9PT1pLnkmJiJib3R0b20iPT09djtpLl9tYXhIZWlnaHQ9TWF0aC5tYXgobXx8eT9hLmhlaWdodC8yOm8uaCwzMCk7dmFyIHg9MDtpLl93aWR0aD0wLGkuX2hlaWdodD0wO3ZhciBfPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wLG49dC50aXRsZS5zaWRlO24mJigtMSE9PW4uaW5kZXhPZigibGVmdCIpJiYoZT10Ll90aXRsZVdpZHRoKSwtMSE9PW4uaW5kZXhPZigidG9wIikmJihyPXQuX3RpdGxlSGVpZ2h0KSk7cmV0dXJuW2Uscl19KGkpO2lmKHMpci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uaGVpZ2h0O2Muc2V0VHJhbnNsYXRlKHRoaXMsdStfWzBdLHUrX1sxXStpLl9oZWlnaHQrZS8yK2QpLGkuX2hlaWdodCs9ZSxpLl93aWR0aD1NYXRoLm1heChpLl93aWR0aCx0WzBdLndpZHRoKX0pLHg9ZitpLl93aWR0aCxpLl93aWR0aCs9ZCtmK2gsaS5faGVpZ2h0Kz1nLGwmJihlLmVhY2goZnVuY3Rpb24odCxlKXtjLnNldFRyYW5zbGF0ZSh0aGlzLDAsZSppLnRyYWNlZ3JvdXBnYXApfSksaS5faGVpZ2h0Kz0oaS5fbGdyb3Vwc0xlbmd0aC0xKSppLnRyYWNlZ3JvdXBnYXApO2Vsc2V7dmFyIHc9QShpKSxrPWkueDwwfHwwPT09aS54JiYicmlnaHQiPT09dyxUPWkueD4xfHwxPT09aS54JiYibGVmdCI9PT13LE09eXx8bSxFPWEud2lkdGgvMjtpLl9tYXhXaWR0aD1NYXRoLm1heChrP00mJiJsZWZ0Ij09PXc/by5sK28udzpFOlQ/TSYmInJpZ2h0Ij09PXc/by5yK28udzpFOm8udywyKmYpO3ZhciBMPTAsQz0wO3IuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLndpZHRoK2Y7TD1NYXRoLm1heChMLGUpLEMrPWV9KSx4PW51bGw7dmFyIFA9MDtpZihsKXt2YXIgTz0wLHo9MCxJPTA7ZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9MCxlPTA7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnRyYWNlcyIpLmVhY2goZnVuY3Rpb24ocil7dmFyIG49clswXS5oZWlnaHQ7Yy5zZXRUcmFuc2xhdGUodGhpcyxfWzBdLF9bMV0rdStkK24vMitlKSxlKz1uLHQ9TWF0aC5tYXgodCxmK3JbMF0ud2lkdGgpfSksTz1NYXRoLm1heChPLGUpO3ZhciByPXQrZDtyK3Urej5pLl9tYXhXaWR0aCYmKFA9TWF0aC5tYXgoUCx6KSx6PTAsSSs9TytpLnRyYWNlZ3JvdXBnYXAsTz1lKSxjLnNldFRyYW5zbGF0ZSh0aGlzLHosSSkseis9cn0pLGkuX3dpZHRoPU1hdGgubWF4KFAseikrdSxpLl9oZWlnaHQ9SStPK2d9ZWxzZXt2YXIgRD1yLnNpemUoKSxSPUMraCsoRC0xKSpkPGkuX21heFdpZHRoLEY9MCxCPTAsTj0wLGo9MDtyLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS5oZWlnaHQscj1mK3RbMF0ud2lkdGgsbj0oUj9yOkwpK2Q7bit1K0I+aS5fbWF4V2lkdGgmJihQPU1hdGgubWF4KFAsaiksQj0wLE4rPUYsaS5faGVpZ2h0Kz1GLEY9MCksYy5zZXRUcmFuc2xhdGUodGhpcyxfWzBdK3UrQixfWzFdK3UrTitlLzIrZCksaj1CK3IrZCxCKz1uLEY9TWF0aC5tYXgoRixlKX0pLFI/KGkuX3dpZHRoPUIraCxpLl9oZWlnaHQ9RitnKTooaS5fd2lkdGg9TWF0aC5tYXgoUCxqKStoLGkuX2hlaWdodCs9RitnKX19aS5fd2lkdGg9TWF0aC5jZWlsKE1hdGgubWF4KGkuX3dpZHRoK19bMF0saS5fdGl0bGVXaWR0aCsyKih1K3AudGl0bGVQYWQpKSksaS5faGVpZ2h0PU1hdGguY2VpbChNYXRoLm1heChpLl9oZWlnaHQrX1sxXSxpLl90aXRsZUhlaWdodCsyKih1K3AuaXRlbUdhcCkpKSxpLl9lZmZIZWlnaHQ9TWF0aC5taW4oaS5faGVpZ2h0LGkuX21heEhlaWdodCk7dmFyIFY9dC5fY29udGV4dC5lZGl0cyxVPVYubGVnZW5kVGV4dHx8Vi5sZWdlbmRQb3NpdGlvbjtyLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykuc2VsZWN0KCIubGVnZW5kdG9nZ2xlIikscj10WzBdLmhlaWdodCxhPVU/Zjp4fHxmK3RbMF0ud2lkdGg7c3x8KGErPWQvMiksYy5zZXRSZWN0KGUsMCwtci8yLGEscil9KX0odCxPLHopfSxmdW5jdGlvbigpe2lmKCFmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LmxlZ2VuZCxyPUEoZSksbj1TKGUpO3JldHVybiBpLmF1dG9NYXJnaW4odCwibGVnZW5kIix7eDplLngseTplLnksbDplLl93aWR0aCp2W3JdLHI6ZS5fd2lkdGgqbVtyXSxiOmUuX2VmZkhlaWdodCptW25dLHQ6ZS5fZWZmSGVpZ2h0KnZbbl19KX0odCkpe3ZhciB1LGgsZix5LHg9ZS5fc2l6ZSxiPXMuYm9yZGVyd2lkdGgsdz14LmwreC53KnMueC12W0EocyldKnMuX3dpZHRoLFQ9eC50K3guaCooMS1zLnkpLXZbUyhzKV0qcy5fZWZmSGVpZ2h0O2lmKGUubWFyZ2luLmF1dG9leHBhbmQpe3ZhciBNPXcsTD1UO3c9YS5jb25zdHJhaW4odywwLGUud2lkdGgtcy5fd2lkdGgpLFQ9YS5jb25zdHJhaW4oVCwwLGUuaGVpZ2h0LXMuX2VmZkhlaWdodCksdyE9PU0mJmEubG9nKCJDb25zdHJhaW4gbGVnZW5kLnggdG8gbWFrZSBsZWdlbmQgZml0IGluc2lkZSBncmFwaCIpLFQhPT1MJiZhLmxvZygiQ29uc3RyYWluIGxlZ2VuZC55IHRvIG1ha2UgbGVnZW5kIGZpdCBpbnNpZGUgZ3JhcGgiKX1pZihjLnNldFRyYW5zbGF0ZShkLHcsVCksUC5vbigiLmRyYWciLG51bGwpLGQub24oIndoZWVsIixudWxsKSxzLl9oZWlnaHQ8PXMuX21heEhlaWdodHx8dC5fY29udGV4dC5zdGF0aWNQbG90KWsuYXR0cih7d2lkdGg6cy5fd2lkdGgtYixoZWlnaHQ6cy5fZWZmSGVpZ2h0LWIseDpiLzIseTpiLzJ9KSxjLnNldFRyYW5zbGF0ZShFLDAsMCksZy5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDpzLl93aWR0aC0yKmIsaGVpZ2h0OnMuX2VmZkhlaWdodC0yKmIseDpiLHk6Yn0pLGMuc2V0Q2xpcFVybChFLHIsdCksYy5zZXRSZWN0KFAsMCwwLDAsMCksZGVsZXRlIHMuX3Njcm9sbFk7ZWxzZXt2YXIgQyxPLHosST1NYXRoLm1heChwLnNjcm9sbEJhck1pbkhlaWdodCxzLl9lZmZIZWlnaHQqcy5fZWZmSGVpZ2h0L3MuX2hlaWdodCksRD1zLl9lZmZIZWlnaHQtSS0yKnAuc2Nyb2xsQmFyTWFyZ2luLFI9cy5faGVpZ2h0LXMuX2VmZkhlaWdodCxGPUQvUixCPU1hdGgubWluKHMuX3Njcm9sbFl8fDAsUik7ay5hdHRyKHt3aWR0aDpzLl93aWR0aC0yKmIrcC5zY3JvbGxCYXJXaWR0aCtwLnNjcm9sbEJhck1hcmdpbixoZWlnaHQ6cy5fZWZmSGVpZ2h0LWIseDpiLzIseTpiLzJ9KSxnLnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOnMuX3dpZHRoLTIqYitwLnNjcm9sbEJhcldpZHRoK3Auc2Nyb2xsQmFyTWFyZ2luLGhlaWdodDpzLl9lZmZIZWlnaHQtMipiLHg6Yix5OmIrQn0pLGMuc2V0Q2xpcFVybChFLHIsdCksVihCLEksRiksZC5vbigid2hlZWwiLGZ1bmN0aW9uKCl7VihCPWEuY29uc3RyYWluKHMuX3Njcm9sbFkrbi5ldmVudC5kZWx0YVkvRCpSLDAsUiksSSxGKSwwIT09QiYmQiE9PVImJm4uZXZlbnQucHJldmVudERlZmF1bHQoKX0pO3ZhciBOPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKCl7dmFyIHQ9bi5ldmVudC5zb3VyY2VFdmVudDtDPSJ0b3VjaHN0YXJ0Ij09PXQudHlwZT90LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk6dC5jbGllbnRZLHo9Qn0pLm9uKCJkcmFnIixmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7Mj09PXQuYnV0dG9uc3x8dC5jdHJsS2V5fHwoTz0idG91Y2htb3ZlIj09PXQudHlwZT90LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk6dC5jbGllbnRZLFYoQj1mdW5jdGlvbih0LGUscil7dmFyIG49KHItZSkvRit0O3JldHVybiBhLmNvbnN0cmFpbihuLDAsUil9KHosQyxPKSxJLEYpKX0pO1AuY2FsbChOKTt2YXIgaj1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7InRvdWNoc3RhcnQiPT09dC50eXBlJiYoQz10LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFksej1CKX0pLm9uKCJkcmFnIixmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7InRvdWNobW92ZSI9PT10LnR5cGUmJihPPXQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WSxWKEI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPShlLXIpL0YrdDtyZXR1cm4gYS5jb25zdHJhaW4obiwwLFIpfSh6LEMsTyksSSxGKSl9KTtFLmNhbGwoail9aWYodC5fY29udGV4dC5lZGl0cy5sZWdlbmRQb3NpdGlvbilkLmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhMCksbC5pbml0KHtlbGVtZW50OmQubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9Yy5nZXRUcmFuc2xhdGUoZCk7Zj10LngseT10Lnl9LG1vdmVGbjpmdW5jdGlvbih0LGUpe3ZhciByPWYrdCxuPXkrZTtjLnNldFRyYW5zbGF0ZShkLHIsbiksdT1sLmFsaWduKHIsMCx4LmwseC5sK3gudyxzLnhhbmNob3IpLGg9bC5hbGlnbihuLDAseC50K3guaCx4LnQscy55YW5jaG9yKX0sZG9uZUZuOmZ1bmN0aW9uKCl7dm9pZCAwIT09dSYmdm9pZCAwIT09aCYmby5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQseyJsZWdlbmQueCI6dSwibGVnZW5kLnkiOmh9KX0sY2xpY2tGbjpmdW5jdGlvbihyLG4pe3ZhciBhPWUuX2luZm9sYXllci5zZWxlY3RBbGwoImcudHJhY2VzIikuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gbi5jbGllbnRYPj10LmxlZnQmJm4uY2xpZW50WDw9dC5yaWdodCYmbi5jbGllbnRZPj10LnRvcCYmbi5jbGllbnRZPD10LmJvdHRvbX0pO2Euc2l6ZSgpPjAmJl8odCxkLGEscixuKX19KX1mdW5jdGlvbiBWKGUscixuKXtzLl9zY3JvbGxZPXQuX2Z1bGxMYXlvdXQubGVnZW5kLl9zY3JvbGxZPWUsYy5zZXRUcmFuc2xhdGUoRSwwLC1lKSxjLnNldFJlY3QoUCxzLl93aWR0aCxwLnNjcm9sbEJhck1hcmdpbitlKm4scC5zY3JvbGxCYXJXaWR0aCxyKSxnLnNlbGVjdCgicmVjdCIpLmF0dHIoInkiLGIrZSl9fV0sdCl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2ODYsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvZXZlbnRzIjo3MDcsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQxLCIuLi8uLi9wbG90cy9wbG90cyI6ODI2LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuLi9jb2xvciI6NTkyLCIuLi9kcmFnZWxlbWVudCI6NjEwLCIuLi9kcmF3aW5nIjo2MTMsIi4vY29uc3RhbnRzIjo2NDEsIi4vZ2V0X2xlZ2VuZF9kYXRhIjo2NDQsIi4vaGFuZGxlX2NsaWNrIjo2NDUsIi4vaGVscGVycyI6NjQ2LCIuL3N0eWxlIjo2NDgsZDM6MTY1fV0sNjQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLG89e30scz1bXSxsPSExLGM9e30sdT0wLGg9MDtmdW5jdGlvbiBmKHQscil7aWYoIiIhPT10JiZhLmlzR3JvdXBlZChlKSktMT09PXMuaW5kZXhPZih0KT8ocy5wdXNoKHQpLGw9ITAsb1t0XT1bW3JdXSk6b1t0XS5wdXNoKFtyXSk7ZWxzZXt2YXIgbj0ifn5pIit1O3MucHVzaChuKSxvW25dPVtbcl1dLHUrK319Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIHA9dFtyXSxkPXBbMF0sZz1kLnRyYWNlLHY9Zy5sZWdlbmRncm91cDtpZihnLnZpc2libGUmJmcuc2hvd2xlZ2VuZClpZihuLnRyYWNlSXMoZywicGllLWxpa2UiKSlmb3IoY1t2XXx8KGNbdl09e30pLGk9MDtpPHAubGVuZ3RoO2krKyl7dmFyIG09cFtpXS5sYWJlbDtjW3ZdW21dfHwoZih2LHtsYWJlbDptLGNvbG9yOnBbaV0uY29sb3IsaTpwW2ldLmksdHJhY2U6ZyxwdHM6cFtpXS5wdHN9KSxjW3ZdW21dPSEwLGg9TWF0aC5tYXgoaCwobXx8IiIpLmxlbmd0aCkpfWVsc2UgZih2LGQpLGg9TWF0aC5tYXgoaCwoZy5uYW1lfHwiIikubGVuZ3RoKX1pZighcy5sZW5ndGgpcmV0dXJuW107dmFyIHkseCxiPXMubGVuZ3RoO2lmKGwmJmEuaXNHcm91cGVkKGUpKWZvcih4PW5ldyBBcnJheShiKSxyPTA7cjxiO3IrKyl5PW9bc1tyXV0seFtyXT1hLmlzUmV2ZXJzZWQoZSk/eS5yZXZlcnNlKCk6eTtlbHNle2Zvcih4PVtuZXcgQXJyYXkoYildLHI9MDtyPGI7cisrKXk9b1tzW3JdXVswXSx4WzBdW2EuaXNSZXZlcnNlZChlKT9iLXItMTpyXT15O2I9MX1yZXR1cm4gZS5fbGdyb3Vwc0xlbmd0aD1iLGUuX21heE5hbWVMZW5ndGg9aCx4fX0seyIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuL2hlbHBlcnMiOjY0Nn1dLDY0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT0hMDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPWUuX2Z1bGxMYXlvdXQ7aWYoIWUuX2RyYWdnZWQmJiFlLl9lZGl0aW5nKXt2YXIgcyxsPW8ubGVnZW5kLml0ZW1jbGljayxjPW8ubGVnZW5kLml0ZW1kb3VibGVjbGljaztpZigxPT09ciYmInRvZ2dsZSI9PT1sJiYidG9nZ2xlb3RoZXJzIj09PWMmJmkmJmUuZGF0YSYmZS5fY29udGV4dC5zaG93VGlwcz8obi5ub3RpZmllcihuLl8oZSwiRG91YmxlLWNsaWNrIG9uIGxlZ2VuZCB0byBpc29sYXRlIG9uZSB0cmFjZSIpLCJsb25nIiksaT0hMSk6aT0hMSwxPT09cj9zPWw6Mj09PXImJihzPWMpLHMpe3ZhciB1LGgsZixwLGQsZz1vLmhpZGRlbmxhYmVscz9vLmhpZGRlbmxhYmVscy5zbGljZSgpOltdLHY9dC5kYXRhKClbMF1bMF0sbT1lLl9mdWxsRGF0YSx5PXYudHJhY2UseD15LmxlZ2VuZGdyb3VwLGI9e30sXz1bXSx3PVtdLGs9W107aWYoYS50cmFjZUlzKHksInBpZS1saWtlIikpe3ZhciBUPXYubGFiZWwsTT1nLmluZGV4T2YoVCk7InRvZ2dsZSI9PT1zPy0xPT09TT9nLnB1c2goVCk6Zy5zcGxpY2UoTSwxKToidG9nZ2xlb3RoZXJzIj09PXMmJihnPVtdLGUuY2FsY2RhdGFbMF0uZm9yRWFjaChmdW5jdGlvbih0KXtUIT09dC5sYWJlbCYmZy5wdXNoKHQubGFiZWwpfSksZS5fZnVsbExheW91dC5oaWRkZW5sYWJlbHMmJmUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLmxlbmd0aD09PWcubGVuZ3RoJiYtMT09PU0mJihnPVtdKSksYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsImhpZGRlbmxhYmVscyIsZyl9ZWxzZXt2YXIgQSxTPXgmJngubGVuZ3RoLEU9W107aWYoUylmb3IodT0wO3U8bS5sZW5ndGg7dSsrKShBPW1bdV0pLnZpc2libGUmJkEubGVnZW5kZ3JvdXA9PT14JiZFLnB1c2godSk7aWYoInRvZ2dsZSI9PT1zKXt2YXIgTDtzd2l0Y2goeS52aXNpYmxlKXtjYXNlITA6TD0ibGVnZW5kb25seSI7YnJlYWs7Y2FzZSExOkw9ITE7YnJlYWs7Y2FzZSJsZWdlbmRvbmx5IjpMPSEwfWlmKFMpZm9yKHU9MDt1PG0ubGVuZ3RoO3UrKykhMSE9PW1bdV0udmlzaWJsZSYmbVt1XS5sZWdlbmRncm91cD09PXgmJkIobVt1XSxMKTtlbHNlIEIoeSxMKX1lbHNlIGlmKCJ0b2dnbGVvdGhlcnMiPT09cyl7dmFyIEMsUCxPLHosST0hMDtmb3IodT0wO3U8bS5sZW5ndGg7dSsrKWlmKEM9bVt1XT09PXksTz0hMCE9PW1bdV0uc2hvd2xlZ2VuZCwhKEN8fE98fChQPVMmJm1bdV0ubGVnZW5kZ3JvdXA9PT14KXx8ITAhPT1tW3VdLnZpc2libGV8fGEudHJhY2VJcyhtW3VdLCJub3RMZWdlbmRJc29sYXRhYmxlIikpKXtJPSExO2JyZWFrfWZvcih1PTA7dTxtLmxlbmd0aDt1KyspaWYoITEhPT1tW3VdLnZpc2libGUmJiFhLnRyYWNlSXMobVt1XSwibm90TGVnZW5kSXNvbGF0YWJsZSIpKXN3aXRjaCh5LnZpc2libGUpe2Nhc2UibGVnZW5kb25seSI6QihtW3VdLCEwKTticmVhaztjYXNlITA6ej0hIUl8fCJsZWdlbmRvbmx5IixDPW1bdV09PT15LE89ITAhPT1tW3VdLnNob3dsZWdlbmQmJiFtW3VdLmxlZ2VuZGdyb3VwLFA9Q3x8UyYmbVt1XS5sZWdlbmRncm91cD09PXgsQihtW3VdLCEoIVAmJiFPKXx8eil9fWZvcih1PTA7dTx3Lmxlbmd0aDt1KyspaWYoZj13W3VdKXt2YXIgRD1mLmNvbnN0cnVjdFVwZGF0ZSgpLFI9T2JqZWN0LmtleXMoRCk7Zm9yKGg9MDtoPFIubGVuZ3RoO2grKylwPVJbaF0sKGJbcF09YltwXXx8W10pW2tbdV1dPURbcF19Zm9yKGQ9T2JqZWN0LmtleXMoYiksdT0wO3U8ZC5sZW5ndGg7dSsrKWZvcihwPWRbdV0saD0wO2g8Xy5sZW5ndGg7aCsrKWJbcF0uaGFzT3duUHJvcGVydHkoaCl8fChiW3BdW2hdPXZvaWQgMCk7YS5jYWxsKCJfZ3VpUmVzdHlsZSIsZSxiLF8pfX19ZnVuY3Rpb24gRih0LGUscil7dmFyIG49Xy5pbmRleE9mKHQpLGE9YltlXTtyZXR1cm4gYXx8KGE9YltlXT1bXSksLTE9PT1fLmluZGV4T2YodCkmJihfLnB1c2godCksbj1fLmxlbmd0aC0xKSxhW25dPXIsbn1mdW5jdGlvbiBCKHQsZSl7dmFyIHI9dC5fZnVsbElucHV0O2lmKGEuaGFzVHJhbnNmb3JtKHIsImdyb3VwYnkiKSl7dmFyIGk9d1tyLmluZGV4XTtpZighaSl7dmFyIG89YS5nZXRUcmFuc2Zvcm1JbmRpY2VzKHIsImdyb3VwYnkiKSxzPW9bby5sZW5ndGgtMV07aT1uLmtleWVkQ29udGFpbmVyKHIsInRyYW5zZm9ybXNbIitzKyJdLnN0eWxlcyIsInRhcmdldCIsInZhbHVlLnZpc2libGUiKSx3W3IuaW5kZXhdPWl9dmFyIGw9aS5nZXQodC5fZ3JvdXApO3ZvaWQgMD09PWwmJihsPSEwKSwhMSE9PWwmJmkuc2V0KHQuX2dyb3VwLGUpLGtbci5pbmRleF09RihyLmluZGV4LCJ2aXNpYmxlIiwhMSE9PXIudmlzaWJsZSl9ZWxzZXt2YXIgYz0hMSE9PXIudmlzaWJsZSYmZTtGKHIuaW5kZXgsInZpc2libGUiLGMpfX19fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9yZWdpc3RyeSI6ODQ2fV0sNjQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuaXNHcm91cGVkPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09KHQudHJhY2VvcmRlcnx8IiIpLmluZGV4T2YoImdyb3VwZWQiKX0sci5pc1ZlcnRpY2FsPWZ1bmN0aW9uKHQpe3JldHVybiJoIiE9PXQub3JpZW50YXRpb259LHIuaXNSZXZlcnNlZD1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PSh0LnRyYWNlb3JkZXJ8fCIiKS5pbmRleE9mKCJyZXZlcnNlZCIpfX0se31dLDY0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToibGVnZW5kIixsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpLHN0eWxlOnQoIi4vc3R5bGUiKX19LHsiLi9hdHRyaWJ1dGVzIjo2NDAsIi4vZGVmYXVsdHMiOjY0MiwiLi9kcmF3Ijo2NDMsIi4vc3R5bGUiOjY0OH1dLDY0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vZHJhd2luZyIpLHM9dCgiLi4vY29sb3IiKSxsPXQoIi4uL2NvbG9yc2NhbGUvaGVscGVycyIpLmV4dHJhY3RPcHRzLGM9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKSx1PXQoIi4uLy4uL3RyYWNlcy9waWUvc3R5bGVfb25lIiksaD10KCIuLi8uLi90cmFjZXMvcGllL2hlbHBlcnMiKS5jYXN0T3B0aW9uLGY9MTIscD01LGQ9MixnPTEwLHY9NTtmdW5jdGlvbiBtKHQsZSl7cmV0dXJuKGU/InJhZGlhbCI6Imhvcml6b250YWwiKSsodD8iIjoicmV2ZXJzZWQiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLl9mdWxsTGF5b3V0LmxlZ2VuZCx5PSJjb25zdGFudCI9PT1yLml0ZW1zaXppbmcseD1mdW5jdGlvbih0LGUscixuKXt2YXIgYTtpZih0KzEpYT10O2Vsc2V7aWYoIShlJiZlLndpZHRoPjApKXJldHVybiAwO2E9ZS53aWR0aH1yZXR1cm4geT9uOk1hdGgubWluKGEscil9O2Z1bmN0aW9uIGIodCxlLHIpe3ZhciBpPXRbMF0udHJhY2Usbz1pLm1hcmtlcnx8e30sbD1vLmxpbmV8fHt9LGM9cj9pLnZpc2libGUmJmkudHlwZT09PXI6YS50cmFjZUlzKGksImJhciIpLHU9bi5zZWxlY3QoZSkuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQiK3IpLmRhdGEoYz9bdF06W10pO3UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmQiK3IsITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIiksdS5leGl0KCkucmVtb3ZlKCksdS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXSxhPXgoci5tbHcsby5saW5lLHYsZCk7ZS5zdHlsZSgic3Ryb2tlLXdpZHRoIixhKyJweCIpLmNhbGwocy5maWxsLHIubWN8fG8uY29sb3IpLGEmJnMuc3Ryb2tlKGUsci5tbGN8fGwuY29sb3IpfSl9ZnVuY3Rpb24gXyh0LGUscil7dmFyIG89dFswXSxzPW8udHJhY2UsbD1yP3MudmlzaWJsZSYmcy50eXBlPT09cjphLnRyYWNlSXMocyxyKSxjPW4uc2VsZWN0KGUpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kIityKS5kYXRhKGw/W3RdOltdKTtpZihjLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kIityLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLGMuZXhpdCgpLnJlbW92ZSgpLGMuc2l6ZSgpKXt2YXIgZj0ocy5tYXJrZXJ8fHt9KS5saW5lLHA9eChoKGYud2lkdGgsby5wdHMpLGYsdixkKSxnPWkubWluRXh0ZW5kKHMse21hcmtlcjp7bGluZTp7d2lkdGg6cH19fSk7Zy5tYXJrZXIubGluZS5jb2xvcj1mLmNvbG9yO3ZhciBtPWkubWluRXh0ZW5kKG8se3RyYWNlOmd9KTt1KGMsbSxnKX19dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGE9aS5lbnN1cmVTaW5nbGUoZSwiZyIsImxheWVycyIpO2Euc3R5bGUoIm9wYWNpdHkiLHRbMF0udHJhY2Uub3BhY2l0eSk7dmFyIG89ci52YWxpZ24scz10WzBdLmxpbmVIZWlnaHQsbD10WzBdLmhlaWdodDtpZigibWlkZGxlIiE9PW8mJnMmJmwpe3ZhciBjPXt0b3A6MSxib3R0b206LTF9W29dKiguNSoocy1sKzMpKTthLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrYysiKSIpfWVsc2UgYS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpO2Euc2VsZWN0QWxsKCJnLmxlZ2VuZGZpbGwiKS5kYXRhKFt0XSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmRmaWxsIiwhMCksYS5zZWxlY3RBbGwoImcubGVnZW5kbGluZXMiKS5kYXRhKFt0XSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmRsaW5lcyIsITApO3ZhciB1PWEuc2VsZWN0QWxsKCJnLmxlZ2VuZHN5bWJvbHMiKS5kYXRhKFt0XSk7dS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZHN5bWJvbHMiLCEwKSx1LnNlbGVjdEFsbCgiZy5sZWdlbmRwb2ludHMiKS5kYXRhKFt0XSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmRwb2ludHMiLCEwKX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIHIsYT10WzBdLnRyYWNlLGM9W107aWYoYS52aXNpYmxlKXN3aXRjaChhLnR5cGUpe2Nhc2UiaGlzdG9ncmFtMmQiOmNhc2UiaGVhdG1hcCI6Yz1bWyJNLTE1LC0yVjRIMTVWLTJaIl1dLHI9ITA7YnJlYWs7Y2FzZSJjaG9yb3BsZXRoIjpjYXNlImNob3JvcGxldGhtYXBib3giOmM9W1siTS02LC02VjZINlYtNloiXV0scj0hMDticmVhaztjYXNlImRlbnNpdHltYXBib3giOmM9W1siTS02LDAgYTYsNiAwIDEsMCAxMiwwIGEgNiw2IDAgMSwwIC0xMiwwIl1dLHI9InJhZGlhbCI7YnJlYWs7Y2FzZSJjb25lIjpjPVtbIk0tNiwyIEEyLDIgMCAwLDAgLTYsNiBWNkw2LDRaIl0sWyJNLTYsLTYgQTIsMiAwIDAsMCAtNiwtMiBMNiwtNFoiXSxbIk0tNiwtMiBBMiwyIDAgMCwwIC02LDIgTDYsMFoiXV0scj0hMTticmVhaztjYXNlInN0cmVhbXR1YmUiOmM9W1siTS02LDIgQTIsMiAwIDAsMCAtNiw2IEg2IEEyLDIgMCAwLDEgNiwyIFoiXSxbIk0tNiwtNiBBMiwyIDAgMCwwIC02LC0yIEg2IEEyLDIgMCAwLDEgNiwtNiBaIl0sWyJNLTYsLTIgQTIsMiAwIDAsMCAtNiwyIEg2IEEyLDIgMCAwLDEgNiwtMiBaIl1dLHI9ITE7YnJlYWs7Y2FzZSJzdXJmYWNlIjpjPVtbIk0tNiwtNiBBMiwzIDAgMCwwIC02LDAgSDYgQTIsMyAwIDAsMSA2LC02IFoiXSxbIk0tNiwxIEEyLDMgMCAwLDEgLTYsNiBINiBBMiwzIDAgMCwwIDYsMCBaIl1dLHI9ITA7YnJlYWs7Y2FzZSJtZXNoM2QiOmM9W1siTS02LDZIMEwtNiwtNloiXSxbIk02LDZIMEw2LC02WiJdLFsiTS02LC02SDZMMCw2WiJdXSxyPSExO2JyZWFrO2Nhc2Uidm9sdW1lIjpjPVtbIk0tNiw2SDBMLTYsLTZaIl0sWyJNNiw2SDBMNiwtNloiXSxbIk0tNiwtNkg2TDAsNloiXV0scj0hMDticmVhaztjYXNlImlzb3N1cmZhY2UiOmM9W1siTS02LDZIMEwtNiwtNloiXSxbIk02LDZIMEw2LC02WiJdLFsiTS02LC02IEExMiwyNCAwIDAsMCA2LC02IEwwLDZaIl1dLHI9ITF9dmFyIHU9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQzZGFuZGZyaWVuZHMiKS5kYXRhKGMpO3UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmQzZGFuZGZyaWVuZHMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaChmdW5jdGlvbih0LGMpe3ZhciB1LGg9bi5zZWxlY3QodGhpcyksZj1sKGEpLHA9Zi5jb2xvcnNjYWxlLGQ9Zi5yZXZlcnNlc2NhbGU7aWYocCl7aWYoIXIpe3ZhciBnPXAubGVuZ3RoO3U9MD09PWM/cFtkP2ctMTowXVsxXToxPT09Yz9wW2Q/MDpnLTFdWzFdOnBbTWF0aC5mbG9vcigoZy0xKS8yKV1bMV19fWVsc2V7dmFyIHY9YS52ZXJ0ZXhjb2xvcnx8YS5mYWNlY29sb3J8fGEuY29sb3I7dT1pLmlzQXJyYXlPclR5cGVkQXJyYXkodik/dltjXXx8dlswXTp2fWguYXR0cigiZCIsdFswXSksdT9oLmNhbGwocy5maWxsLHUpOmguY2FsbChmdW5jdGlvbih0KXtpZih0LnNpemUoKSl7dmFyIG49ImxlZ2VuZGZpbGwtIithLnVpZDtvLmdyYWRpZW50KHQsZSxuLG0oZCwicmFkaWFsIj09PXIpLHAsImZpbGwiKX19KX0pfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9W107ZS52aXNpYmxlJiYid2F0ZXJmYWxsIj09PWUudHlwZSYmKHI9dFswXS5oYXNUb3RhbHM/W1siaW5jcmVhc2luZyIsIk0tNiwtNlY2SDBaIl0sWyJ0b3RhbHMiLCJNNiw2SDBMLTYsLTZILTBaIl0sWyJkZWNyZWFzaW5nIiwiTTYsNlYtNkgwWiJdXTpbWyJpbmNyZWFzaW5nIiwiTS02LC02VjZINloiXSxbImRlY3JlYXNpbmciLCJNNiw2Vi02SC02WiJdXSk7dmFyIGE9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmR3YXRlcmZhbGwiKS5kYXRhKHIpO2EuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmR3YXRlcmZhbGwiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLGEuZXhpdCgpLnJlbW92ZSgpLGEuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxhPWVbdFswXV0ubWFya2VyLGk9eCh2b2lkIDAsYS5saW5lLHYsZCk7ci5hdHRyKCJkIix0WzFdKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixpKyJweCIpLmNhbGwocy5maWxsLGEuY29sb3IpLGkmJnIuY2FsbChzLnN0cm9rZSxhLmxpbmUuY29sb3IpfSl9KS5lYWNoKGZ1bmN0aW9uKHQpe2IodCx0aGlzLCJmdW5uZWwiKX0pLmVhY2goZnVuY3Rpb24odCl7Yih0LHRoaXMpfSkuZWFjaChmdW5jdGlvbih0KXt2YXIgcj10WzBdLnRyYWNlLGw9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRib3giKS5kYXRhKHIudmlzaWJsZSYmYS50cmFjZUlzKHIsImJveC12aW9saW4iKT9bdF06W10pO2wuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRib3giLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLGwuZXhpdCgpLnJlbW92ZSgpLGwuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2lmKCJhbGwiIT09ci5ib3hwb2ludHMmJiJhbGwiIT09ci5wb2ludHN8fDAhPT1zLm9wYWNpdHkoci5maWxsY29sb3IpfHwwIT09cy5vcGFjaXR5KChyLmxpbmV8fHt9KS5jb2xvcikpe3ZhciBhPXgodm9pZCAwLHIubGluZSx2LGQpO3Quc3R5bGUoInN0cm9rZS13aWR0aCIsYSsicHgiKS5jYWxsKHMuZmlsbCxyLmZpbGxjb2xvciksYSYmcy5zdHJva2UodCxyLmxpbmUuY29sb3IpfWVsc2V7dmFyIGM9aS5taW5FeHRlbmQocix7bWFya2VyOntzaXplOnk/ZjppLmNvbnN0cmFpbihyLm1hcmtlci5zaXplLDIsMTYpLHNpemVyZWY6MSxzaXplbWluOjEsc2l6ZW1vZGU6ImRpYW1ldGVyIn19KTtsLmNhbGwoby5wb2ludFN0eWxlLGMsZSl9fSl9KS5lYWNoKGZ1bmN0aW9uKHQpe18odCx0aGlzLCJmdW5uZWxhcmVhIil9KS5lYWNoKGZ1bmN0aW9uKHQpe18odCx0aGlzLCJwaWUiKX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIHIsYSxzPXRbMF0sdT1zLnRyYWNlLGg9dS52aXNpYmxlJiZ1LmZpbGwmJiJub25lIiE9PXUuZmlsbCxmPWMuaGFzTGluZXModSksZD11LmNvbnRvdXJzLHY9ITEseT0hMSxiPWwodSksXz1iLmNvbG9yc2NhbGUsdz1iLnJldmVyc2VzY2FsZTtpZihkKXt2YXIgaz1kLmNvbG9yaW5nOyJsaW5lcyI9PT1rP3Y9ITA6Zj0ibm9uZSI9PT1rfHwiaGVhdG1hcCI9PT1rfHxkLnNob3dsaW5lcywiY29uc3RyYWludCI9PT1kLnR5cGU/aD0iPSIhPT1kLl9vcGVyYXRpb246ImZpbGwiIT09ayYmImhlYXRtYXAiIT09a3x8KHk9ITApfXZhciBUPWMuaGFzTWFya2Vycyh1KXx8Yy5oYXNUZXh0KHUpLE09aHx8eSxBPWZ8fHYsUz1UfHwhTT8iTTUsMCI6QT8iTTUsLTIiOiJNNSwtMyIsRT1uLnNlbGVjdCh0aGlzKSxMPUUuc2VsZWN0KCIubGVnZW5kZmlsbCIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoaHx8eT9bdF06W10pO2lmKEwuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1maWxsIiwhMCksTC5leGl0KCkucmVtb3ZlKCksTC5hdHRyKCJkIixTKyJoMzB2NmgtMzB6IikuY2FsbChoP28uZmlsbEdyb3VwU3R5bGU6ZnVuY3Rpb24odCl7aWYodC5zaXplKCkpe3ZhciByPSJsZWdlbmRmaWxsLSIrdS51aWQ7by5ncmFkaWVudCh0LGUscixtKHcpLF8sImZpbGwiKX19KSxmfHx2KXt2YXIgQz14KHZvaWQgMCx1LmxpbmUsZyxwKTthPWkubWluRXh0ZW5kKHUse2xpbmU6e3dpZHRoOkN9fSkscj1baS5taW5FeHRlbmQocyx7dHJhY2U6YX0pXX12YXIgUD1FLnNlbGVjdCgiLmxlZ2VuZGxpbmVzIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShmfHx2P1tyXTpbXSk7UC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWxpbmUiLCEwKSxQLmV4aXQoKS5yZW1vdmUoKSxQLmF0dHIoImQiLFMrKHY/ImwzMCwwLjAwMDEiOiJoMzAiKSkuY2FsbChmP28ubGluZUdyb3VwU3R5bGU6ZnVuY3Rpb24odCl7aWYodC5zaXplKCkpe3ZhciByPSJsZWdlbmRsaW5lLSIrdS51aWQ7by5saW5lR3JvdXBTdHlsZSh0KSxvLmdyYWRpZW50KHQsZSxyLG0odyksXywic3Ryb2tlIil9fSl9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByLGEscz10WzBdLGw9cy50cmFjZSx1PWMuaGFzTWFya2VycyhsKSxoPWMuaGFzVGV4dChsKSxnPWMuaGFzTGluZXMobCk7ZnVuY3Rpb24gdih0LGUscixuKXt2YXIgYT1pLm5lc3RlZFByb3BlcnR5KGwsdCkuZ2V0KCksbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkoYSkmJmU/ZShhKTphO2lmKHkmJm8mJnZvaWQgMCE9PW4mJihvPW4pLHIpe2lmKG88clswXSlyZXR1cm4gclswXTtpZihvPnJbMV0pcmV0dXJuIHJbMV19cmV0dXJuIG99ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdFswXX1pZih1fHxofHxnKXt2YXIgeD17fSxiPXt9O2lmKHUpe3gubWM9digibWFya2VyLmNvbG9yIixtKSx4Lm14PXYoIm1hcmtlci5zeW1ib2wiLG0pLHgubW89digibWFya2VyLm9wYWNpdHkiLGkubWVhbixbLjIsMV0pLHgubWxjPXYoIm1hcmtlci5saW5lLmNvbG9yIixtKSx4Lm1sdz12KCJtYXJrZXIubGluZS53aWR0aCIsaS5tZWFuLFswLDVdLGQpLGIubWFya2VyPXtzaXplcmVmOjEsc2l6ZW1pbjoxLHNpemVtb2RlOiJkaWFtZXRlciJ9O3ZhciBfPXYoIm1hcmtlci5zaXplIixpLm1lYW4sWzIsMTZdLGYpO3gubXM9XyxiLm1hcmtlci5zaXplPV99ZyYmKGIubGluZT17d2lkdGg6digibGluZS53aWR0aCIsbSxbMCwxMF0scCl9KSxoJiYoeC50eD0iQWEiLHgudHA9digidGV4dHBvc2l0aW9uIixtKSx4LnRzPTEwLHgudGM9digidGV4dGZvbnQuY29sb3IiLG0pLHgudGY9digidGV4dGZvbnQuZmFtaWx5IixtKSkscj1baS5taW5FeHRlbmQocyx4KV0sKGE9aS5taW5FeHRlbmQobCxiKSkuc2VsZWN0ZWRwb2ludHM9bnVsbCxhLnRleHR0ZW1wbGF0ZT1udWxsfXZhciB3PW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKSxrPXcuc2VsZWN0QWxsKCJwYXRoLnNjYXR0ZXJwdHMiKS5kYXRhKHU/cjpbXSk7ay5lbnRlcigpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoInNjYXR0ZXJwdHMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKSxrLmV4aXQoKS5yZW1vdmUoKSxrLmNhbGwoby5wb2ludFN0eWxlLGEsZSksdSYmKHJbMF0ubXJjPTMpO3ZhciBUPXcuc2VsZWN0QWxsKCJnLnBvaW50dGV4dCIpLmRhdGEoaD9yOltdKTtULmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicG9pbnR0ZXh0IiwhMCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIiksVC5leGl0KCkucmVtb3ZlKCksVC5zZWxlY3RBbGwoInRleHQiKS5jYWxsKG8udGV4dFBvaW50U3R5bGUsYSxlKX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kY2FuZGxlIikuZGF0YShlLnZpc2libGUmJiJjYW5kbGVzdGljayI9PT1lLnR5cGU/W3QsdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRjYW5kbGUiLCEwKS5hdHRyKCJkIixmdW5jdGlvbih0LGUpe3JldHVybiBlPyJNLTE1LDBILThNLTgsNlYtNkg4WiI6Ik0xNSwwSDhNOCwtNlY2SC04WiJ9KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLHIuZXhpdCgpLnJlbW92ZSgpLHIuZWFjaChmdW5jdGlvbih0LHIpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLGk9ZVtyPyJpbmNyZWFzaW5nIjoiZGVjcmVhc2luZyJdLG89eCh2b2lkIDAsaS5saW5lLHYsZCk7YS5zdHlsZSgic3Ryb2tlLXdpZHRoIixvKyJweCIpLmNhbGwocy5maWxsLGkuZmlsbGNvbG9yKSxvJiZzLnN0cm9rZShhLGkubGluZS5jb2xvcil9KX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kb2hsYyIpLmRhdGEoZS52aXNpYmxlJiYib2hsYyI9PT1lLnR5cGU/W3QsdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRvaGxjIiwhMCkuYXR0cigiZCIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8iTS0xNSwwSDBNLTgsLTZWMCI6Ik0xNSwwSDBNOCw2VjAifSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIikuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goZnVuY3Rpb24odCxyKXt2YXIgYT1uLnNlbGVjdCh0aGlzKSxpPWVbcj8iaW5jcmVhc2luZyI6ImRlY3JlYXNpbmciXSxsPXgodm9pZCAwLGkubGluZSx2LGQpO2Euc3R5bGUoImZpbGwiLCJub25lIikuY2FsbChvLmRhc2hMaW5lLGkubGluZS5kYXNoLGwpLGwmJnMuc3Ryb2tlKGEsaS5saW5lLmNvbG9yKX0pfSl9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuLi8uLi90cmFjZXMvcGllL2hlbHBlcnMiOjEwOTksIi4uLy4uL3RyYWNlcy9waWUvc3R5bGVfb25lIjoxMTA1LCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MTE0NCwiLi4vY29sb3IiOjU5MiwiLi4vY29sb3JzY2FsZS9oZWxwZXJzIjo2MDMsIi4uL2RyYXdpbmciOjYxMyxkMzoxNjV9XSw2NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vZm9udHMvcGxvdGljb24iKSxsPW8uXyxjPWUuZXhwb3J0cz17fTtmdW5jdGlvbiB1KHQsZSl7dmFyIHIsYSxvPWUuY3VycmVudFRhcmdldCxzPW8uZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxsPW8uZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxjPXQuX2Z1bGxMYXlvdXQsdT17fSxoPWkubGlzdCh0LG51bGwsITApLGY9Yy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZDtpZigiem9vbSI9PT1zKXt2YXIgcCxkPSJpbiI9PT1sPy41OjIsZz0oMStkKS8yLHY9KDEtZCkvMjtmb3IoYT0wO2E8aC5sZW5ndGg7YSsrKWlmKCEocj1oW2FdKS5maXhlZHJhbmdlKWlmKHA9ci5fbmFtZSwiYXV0byI9PT1sKXVbcCsiLmF1dG9yYW5nZSJdPSEwO2Vsc2UgaWYoInJlc2V0Ij09PWwpe2lmKHZvaWQgMD09PXIuX3JhbmdlSW5pdGlhbCl1W3ArIi5hdXRvcmFuZ2UiXT0hMDtlbHNle3ZhciBtPXIuX3JhbmdlSW5pdGlhbC5zbGljZSgpO3VbcCsiLnJhbmdlWzBdIl09bVswXSx1W3ArIi5yYW5nZVsxXSJdPW1bMV19dm9pZCAwIT09ci5fc2hvd1NwaWtlSW5pdGlhbCYmKHVbcCsiLnNob3dzcGlrZXMiXT1yLl9zaG93U3Bpa2VJbml0aWFsLCJvbiIhPT1mfHxyLl9zaG93U3Bpa2VJbml0aWFsfHwoZj0ib2ZmIikpfWVsc2V7dmFyIHk9W3IucjJsKHIucmFuZ2VbMF0pLHIucjJsKHIucmFuZ2VbMV0pXSx4PVtnKnlbMF0rdip5WzFdLGcqeVsxXSt2KnlbMF1dO3VbcCsiLnJhbmdlWzBdIl09ci5sMnIoeFswXSksdVtwKyIucmFuZ2VbMV0iXT1yLmwycih4WzFdKX19ZWxzZSJob3Zlcm1vZGUiIT09c3x8IngiIT09bCYmInkiIT09bHx8KGw9Yy5faXNIb3Jpej8ieSI6IngiLG8uc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsbCkpLHVbc109bDtjLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPWYsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsdSl9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsYT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0Ll9zdWJwbG90cy5nbDNkfHxbXSxzPXt9LGw9YS5zcGxpdCgiLiIpLGM9MDtjPG8ubGVuZ3RoO2MrKylzW29bY10rIi4iK2xbMV1dPWk7dmFyIHU9InBhbiI9PT1pP2k6Inpvb20iO3MuZHJhZ21vZGU9dSxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxzKX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGE9dC5fZnVsbExheW91dCxpPWEuX3N1YnBsb3RzLmdsM2R8fFtdLG89e30scz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbCxjPWlbc10sdT1jKyIuY2FtZXJhIixoPWMrIi5hc3BlY3RyYXRpbyIsZj1hW2NdLl9zY2VuZTsicmVzZXRMYXN0U2F2ZSI9PT1yPyhvW3UrIi51cCJdPWYudmlld0luaXRpYWwudXAsb1t1KyIuZXllIl09Zi52aWV3SW5pdGlhbC5leWUsb1t1KyIuY2VudGVyIl09Zi52aWV3SW5pdGlhbC5jZW50ZXIsbD0hMCk6InJlc2V0RGVmYXVsdCI9PT1yJiYob1t1KyIudXAiXT1udWxsLG9bdSsiLmV5ZSJdPW51bGwsb1t1KyIuY2VudGVyIl09bnVsbCxsPSEwKSxsJiYob1toKyIueCJdPWYudmlld0luaXRpYWwuYXNwZWN0cmF0aW8ueCxvW2grIi55Il09Zi52aWV3SW5pdGlhbC5hc3BlY3RyYXRpby55LG9baCsiLnoiXT1mLnZpZXdJbml0aWFsLmFzcGVjdHJhdGlvLnopfW4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LG8pfWZ1bmN0aW9uIHAodCxlKXt2YXIgcj1lLmN1cnJlbnRUYXJnZXQsbj1yLl9wcmV2aW91c1ZhbCxhPXQuX2Z1bGxMYXlvdXQsaT1hLl9zdWJwbG90cy5nbDNkfHxbXSxvPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl0scz17fSxsPXt9O2lmKG4pbD1uLHIuX3ByZXZpb3VzVmFsPW51bGw7ZWxzZXtmb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9aVtjXSxoPWFbdV0sZj11KyIuaG92ZXJtb2RlIjtzW2ZdPWguaG92ZXJtb2RlLGxbZl09ITE7Zm9yKHZhciBwPTA7cDwzO3ArKyl7dmFyIGQ9b1twXSxnPXUrIi4iK2QrIi5zaG93c3Bpa2VzIjtsW2ddPSExLHNbZ109aFtkXS5zaG93c3Bpa2VzfX1yLl9wcmV2aW91c1ZhbD1zfXJldHVybiBsfWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9ZS5jdXJyZW50VGFyZ2V0LGE9ci5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGk9ci5nZXRBdHRyaWJ1dGUoImRhdGEtdmFsIil8fCEwLG89dC5fZnVsbExheW91dCxzPW8uX3N1YnBsb3RzLmdlb3x8W10sbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgYz1zW2xdLHU9b1tjXTtpZigiem9vbSI9PT1hKXt2YXIgaD11LnByb2plY3Rpb24uc2NhbGUsZj0iaW4iPT09aT8yKmg6LjUqaDtuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxjKyIucHJvamVjdGlvbi5zY2FsZSIsZil9fSJyZXNldCI9PT1hJiZ5KHQsImdlbyIpfWZ1bmN0aW9uIGcodCl7dmFyIGU9dC5fZnVsbExheW91dDtyZXR1cm4hZS5ob3Zlcm1vZGUmJihlLl9oYXMoImNhcnRlc2lhbiIpP2UuX2lzSG9yaXo/InkiOiJ4IjoiY2xvc2VzdCIpfWZ1bmN0aW9uIHYodCl7dmFyIGU9Zyh0KTtuLmNhbGwoIl9ndWlSZWxheW91dCIsdCwiaG92ZXJtb2RlIixlKX1mdW5jdGlvbiBtKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEtdmFsIiksYT10Ll9mdWxsTGF5b3V0LGk9YS5fc3VicGxvdHMubWFwYm94fHxbXSxvPXt9LHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPWFbbF0uem9vbSx1PSJpbiI9PT1yPzEuMDUqYzpjLzEuMDU7b1tsKyIuem9vbSJdPXV9bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsbyl9ZnVuY3Rpb24geSh0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LGE9ci5fc3VicGxvdHNbZV18fFtdLGk9e30sbz0wO288YS5sZW5ndGg7bysrKWZvcih2YXIgcz1hW29dLGw9cltzXS5fc3VicGxvdC52aWV3SW5pdGlhbCxjPU9iamVjdC5rZXlzKGwpLHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGg9Y1t1XTtpW3MrIi4iK2hdPWxbaF19bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsaSl9Yy50b0ltYWdlPXtuYW1lOiJ0b0ltYWdlIix0aXRsZTpmdW5jdGlvbih0KXt2YXIgZT0odC5fY29udGV4dC50b0ltYWdlQnV0dG9uT3B0aW9uc3x8e30pLmZvcm1hdHx8InBuZyI7cmV0dXJuIGwodCwicG5nIj09PWU/IkRvd25sb2FkIHBsb3QgYXMgYSBwbmciOiJEb3dubG9hZCBwbG90Iil9LGljb246cy5jYW1lcmEsY2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dC5fY29udGV4dC50b0ltYWdlQnV0dG9uT3B0aW9ucyxyPXtmb3JtYXQ6ZS5mb3JtYXR8fCJwbmcifTtvLm5vdGlmaWVyKGwodCwiVGFraW5nIHNuYXBzaG90IC0gdGhpcyBtYXkgdGFrZSBhIGZldyBzZWNvbmRzIiksImxvbmciKSwic3ZnIiE9PXIuZm9ybWF0JiZvLmlzSUUoKSYmKG8ubm90aWZpZXIobCh0LCJJRSBvbmx5IHN1cHBvcnRzIHN2Zy4gIENoYW5naW5nIGZvcm1hdCB0byBzdmcuIiksImxvbmciKSxyLmZvcm1hdD0ic3ZnIiksWyJmaWxlbmFtZSIsIndpZHRoIiwiaGVpZ2h0Iiwic2NhbGUiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QgaW4gZSYmKHJbdF09ZVt0XSl9KSxuLmNhbGwoImRvd25sb2FkSW1hZ2UiLHQscikudGhlbihmdW5jdGlvbihlKXtvLm5vdGlmaWVyKGwodCwiU25hcHNob3Qgc3VjY2VlZGVkIikrIiAtICIrZSwibG9uZyIpfSkuY2F0Y2goZnVuY3Rpb24oKXtvLm5vdGlmaWVyKGwodCwiU29ycnksIHRoZXJlIHdhcyBhIHByb2JsZW0gZG93bmxvYWRpbmcgeW91ciBzbmFwc2hvdCEiKSwibG9uZyIpfSl9fSxjLnNlbmREYXRhVG9DbG91ZD17bmFtZToic2VuZERhdGFUb0Nsb3VkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJFZGl0IGluIENoYXJ0IFN0dWRpbyIpfSxpY29uOnMuZGlzayxjbGljazpmdW5jdGlvbih0KXthLnNlbmREYXRhVG9DbG91ZCh0KX19LGMuZWRpdEluQ2hhcnRTdHVkaW89e25hbWU6ImVkaXRJbkNoYXJ0U3R1ZGlvIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJFZGl0IGluIENoYXJ0IFN0dWRpbyIpfSxpY29uOnMucGVuY2lsLGNsaWNrOmZ1bmN0aW9uKHQpe2Euc2VuZERhdGFUb0Nsb3VkKHQpfX0sYy56b29tMmQ9e25hbWU6Inpvb20yZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiWm9vbSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJ6b29tIixpY29uOnMuem9vbWJveCxjbGljazp1fSxjLnBhbjJkPXtuYW1lOiJwYW4yZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiUGFuIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6InBhbiIsaWNvbjpzLnBhbixjbGljazp1fSxjLnNlbGVjdDJkPXtuYW1lOiJzZWxlY3QyZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiQm94IFNlbGVjdCIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJzZWxlY3QiLGljb246cy5zZWxlY3Rib3gsY2xpY2s6dX0sYy5sYXNzbzJkPXtuYW1lOiJsYXNzbzJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJMYXNzbyBTZWxlY3QiKX0sYXR0cjoiZHJhZ21vZGUiLHZhbDoibGFzc28iLGljb246cy5sYXNzbyxjbGljazp1fSxjLnpvb21JbjJkPXtuYW1lOiJ6b29tSW4yZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiWm9vbSBpbiIpfSxhdHRyOiJ6b29tIix2YWw6ImluIixpY29uOnMuem9vbV9wbHVzLGNsaWNrOnV9LGMuem9vbU91dDJkPXtuYW1lOiJ6b29tT3V0MmQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlpvb20gb3V0Iil9LGF0dHI6Inpvb20iLHZhbDoib3V0IixpY29uOnMuem9vbV9taW51cyxjbGljazp1fSxjLmF1dG9TY2FsZTJkPXtuYW1lOiJhdXRvU2NhbGUyZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiQXV0b3NjYWxlIil9LGF0dHI6Inpvb20iLHZhbDoiYXV0byIsaWNvbjpzLmF1dG9zY2FsZSxjbGljazp1fSxjLnJlc2V0U2NhbGUyZD17bmFtZToicmVzZXRTY2FsZTJkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJSZXNldCBheGVzIil9LGF0dHI6Inpvb20iLHZhbDoicmVzZXQiLGljb246cy5ob21lLGNsaWNrOnV9LGMuaG92ZXJDbG9zZXN0Q2FydGVzaWFuPXtuYW1lOiJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW4iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOiJjbG9zZXN0IixpY29uOnMudG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6dX0sYy5ob3ZlckNvbXBhcmVDYXJ0ZXNpYW49e25hbWU6ImhvdmVyQ29tcGFyZUNhcnRlc2lhbiIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiQ29tcGFyZSBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9mdWxsTGF5b3V0Ll9pc0hvcml6PyJ5IjoieCJ9LGljb246cy50b29sdGlwX2NvbXBhcmUsZ3Jhdml0eToibmUiLGNsaWNrOnV9LGMuem9vbTNkPXtuYW1lOiJ6b29tM2QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlpvb20iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoiem9vbSIsaWNvbjpzLnpvb21ib3gsY2xpY2s6aH0sYy5wYW4zZD17bmFtZToicGFuM2QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlBhbiIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJwYW4iLGljb246cy5wYW4sY2xpY2s6aH0sYy5vcmJpdFJvdGF0aW9uPXtuYW1lOiJvcmJpdFJvdGF0aW9uIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJPcmJpdGFsIHJvdGF0aW9uIil9LGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6Im9yYml0IixpY29uOnNbIjNkX3JvdGF0ZSJdLGNsaWNrOmh9LGMudGFibGVSb3RhdGlvbj17bmFtZToidGFibGVSb3RhdGlvbiIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiVHVybnRhYmxlIHJvdGF0aW9uIil9LGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6InR1cm50YWJsZSIsaWNvbjpzWyJ6LWF4aXMiXSxjbGljazpofSxjLnJlc2V0Q2FtZXJhRGVmYXVsdDNkPXtuYW1lOiJyZXNldENhbWVyYURlZmF1bHQzZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiUmVzZXQgY2FtZXJhIHRvIGRlZmF1bHQiKX0sYXR0cjoicmVzZXREZWZhdWx0IixpY29uOnMuaG9tZSxjbGljazpmfSxjLnJlc2V0Q2FtZXJhTGFzdFNhdmUzZD17bmFtZToicmVzZXRDYW1lcmFMYXN0U2F2ZTNkIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJSZXNldCBjYW1lcmEgdG8gbGFzdCBzYXZlIil9LGF0dHI6InJlc2V0TGFzdFNhdmUiLGljb246cy5tb3ZpZSxjbGljazpmfSxjLmhvdmVyQ2xvc2VzdDNkPXtuYW1lOiJob3ZlckNsb3Nlc3QzZCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpmdW5jdGlvbih0LGUpe3ZhciByPXAodCxlKTtuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxyKX19LGMuem9vbUluR2VvPXtuYW1lOiJ6b29tSW5HZW8iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlpvb20gaW4iKX0sYXR0cjoiem9vbSIsdmFsOiJpbiIsaWNvbjpzLnpvb21fcGx1cyxjbGljazpkfSxjLnpvb21PdXRHZW89e25hbWU6Inpvb21PdXRHZW8iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlpvb20gb3V0Iil9LGF0dHI6Inpvb20iLHZhbDoib3V0IixpY29uOnMuem9vbV9taW51cyxjbGljazpkfSxjLnJlc2V0R2VvPXtuYW1lOiJyZXNldEdlbyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiUmVzZXQiKX0sYXR0cjoicmVzZXQiLHZhbDpudWxsLGljb246cy5hdXRvc2NhbGUsY2xpY2s6ZH0sYy5ob3ZlckNsb3Nlc3RHZW89e25hbWU6ImhvdmVyQ2xvc2VzdEdlbyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOm51bGwsdG9nZ2xlOiEwLGljb246cy50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazp2fSxjLmhvdmVyQ2xvc2VzdEdsMmQ9e25hbWU6ImhvdmVyQ2xvc2VzdEdsMmQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOnMudG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6dn0sYy5ob3ZlckNsb3Nlc3RQaWU9e25hbWU6ImhvdmVyQ2xvc2VzdFBpZSIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOiJjbG9zZXN0IixpY29uOnMudG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6dn0sYy5yZXNldFZpZXdTYW5rZXk9e25hbWU6InJlc2V0U2Fua2V5R3JvdXAiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlJlc2V0IHZpZXciKX0saWNvbjpzLmhvbWUsY2xpY2s6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXsibm9kZS5ncm91cHMiOltdLCJub2RlLngiOltdLCJub2RlLnkiOltdfSxyPTA7cjx0Ll9mdWxsRGF0YS5sZW5ndGg7cisrKXt2YXIgYT10Ll9mdWxsRGF0YVtyXS5fdmlld0luaXRpYWw7ZVsibm9kZS5ncm91cHMiXS5wdXNoKGEubm9kZS5ncm91cHMuc2xpY2UoKSksZVsibm9kZS54Il0ucHVzaChhLm5vZGUueC5zbGljZSgpKSxlWyJub2RlLnkiXS5wdXNoKGEubm9kZS55LnNsaWNlKCkpfW4uY2FsbCgicmVzdHlsZSIsdCxlKX19LGMudG9nZ2xlSG92ZXI9e25hbWU6InRvZ2dsZUhvdmVyIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpzLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHI9cCh0LGUpO3IuaG92ZXJtb2RlPWcodCksbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQscil9fSxjLnJlc2V0Vmlld3M9e25hbWU6InJlc2V0Vmlld3MiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlJlc2V0IHZpZXdzIil9LGljb246cy5ob21lLGNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5jdXJyZW50VGFyZ2V0O3Iuc2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiLCJ6b29tIiksci5zZXRBdHRyaWJ1dGUoImRhdGEtdmFsIiwicmVzZXQiKSx1KHQsZSksci5zZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIsInJlc2V0TGFzdFNhdmUiKSxmKHQsZSkseSh0LCJnZW8iKSx5KHQsIm1hcGJveCIpfX0sYy50b2dnbGVTcGlrZWxpbmVzPXtuYW1lOiJ0b2dnbGVTcGlrZWxpbmVzIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJUb2dnbGUgU3Bpa2UgTGluZXMiKX0saWNvbjpzLnNwaWtlbGluZSxhdHRyOiJfY2FydGVzaWFuU3Bpa2VzRW5hYmxlZCIsdmFsOiJvbiIsY2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWUuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ7ZS5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD0ib24iPT09cj8ib2ZmIjoib24iLG4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0ib24iPT09dC5fZnVsbExheW91dC5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZCxyPWkubGlzdCh0LG51bGwsITApLG49e30sYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgbz1yW2FdO25bby5fbmFtZSsiLnNob3dzcGlrZXMiXT0hIWV8fG8uX3Nob3dTcGlrZUluaXRpYWx9cmV0dXJuIG59KHQpKX19LGMucmVzZXRWaWV3TWFwYm94PXtuYW1lOiJyZXNldFZpZXdNYXBib3giLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsIlJlc2V0IHZpZXciKX0sYXR0cjoicmVzZXQiLGljb246cy5ob21lLGNsaWNrOmZ1bmN0aW9uKHQpe3kodCwibWFwYm94Iil9fSxjLnpvb21Jbk1hcGJveD17bmFtZToiem9vbUluTWFwYm94Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246cy56b29tX3BsdXMsY2xpY2s6bX0sYy56b29tT3V0TWFwYm94PXtuYW1lOiJ6b29tT3V0TWFwYm94Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LCJab29tIG91dCIpfSxhdHRyOiJ6b29tIix2YWw6Im91dCIsaWNvbjpzLnpvb21fbWludXMsY2xpY2s6bX19LHsiLi4vLi4vZm9udHMvcGxvdGljb24iOjY5NywiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzY4LCIuLi8uLi9wbG90cy9wbG90cyI6ODI2LCIuLi8uLi9yZWdpc3RyeSI6ODQ2fV0sNjUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IubWFuYWdlPXQoIi4vbWFuYWdlIil9LHsiLi9tYW5hZ2UiOjY1MX1dLDY1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxhPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi9tb2RlYmFyIikscz10KCIuL2J1dHRvbnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuX2NvbnRleHQsbD1lLl9tb2RlQmFyO2lmKHIuZGlzcGxheU1vZGVCYXJ8fHIud2F0ZXJtYXJrKXtpZighQXJyYXkuaXNBcnJheShyLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUpKXRocm93IG5ldyBFcnJvcihbIiptb2RlQmFyQnV0dG9uc1RvUmVtb3ZlKiBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJtdXN0IGJlIGFuIGFycmF5LiJdLmpvaW4oIiAiKSk7aWYoIUFycmF5LmlzQXJyYXkoci5tb2RlQmFyQnV0dG9uc1RvQWRkKSl0aHJvdyBuZXcgRXJyb3IoWyIqbW9kZUJhckJ1dHRvbnNUb0FkZCogY29uZmlndXJhdGlvbiBvcHRpb25zIiwibXVzdCBiZSBhbiBhcnJheS4iXS5qb2luKCIgIikpO3ZhciBjLHU9ci5tb2RlQmFyQnV0dG9ucztjPUFycmF5LmlzQXJyYXkodSkmJnUubGVuZ3RoP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWZvcih2YXIgcj10W2VdLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGE9cltuXTtpZigic3RyaW5nIj09dHlwZW9mIGEpe2lmKHZvaWQgMD09PXNbYV0pdGhyb3cgbmV3IEVycm9yKFsiKm1vZGVCYXJCdXR0b25zKiBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJpbnZhbGlkIGJ1dHRvbiBuYW1lIl0uam9pbigiICIpKTt0W2VdW25dPXNbYV19fXJldHVybiB0fSh1KTohci5kaXNwbGF5TW9kZUJhciYmci53YXRlcm1hcms/W106ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuX2Z1bGxEYXRhLG89dC5fY29udGV4dCxsPW8ubW9kZUJhckJ1dHRvbnNUb1JlbW92ZSxjPW8ubW9kZUJhckJ1dHRvbnNUb0FkZCx1PWUuX2hhcygiY2FydGVzaWFuIiksaD1lLl9oYXMoImdsM2QiKSxmPWUuX2hhcygiZ2VvIikscD1lLl9oYXMoInBpZSIpLGQ9ZS5faGFzKCJmdW5uZWxhcmVhIiksZz1lLl9oYXMoImdsMmQiKSx2PWUuX2hhcygidGVybmFyeSIpLG09ZS5faGFzKCJtYXBib3giKSx5PWUuX2hhcygicG9sYXIiKSx4PWUuX2hhcygic2Fua2V5IiksYj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bi5saXN0KHtfZnVsbExheW91dDp0fSxudWxsLCEwKSxyPTA7cjxlLmxlbmd0aDtyKyspaWYoIWVbcl0uZml4ZWRyYW5nZSlyZXR1cm4hMTtyZXR1cm4hMH0oZSksXz1bXTtmdW5jdGlvbiB3KHQpe2lmKHQubGVuZ3RoKXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdOy0xPT09bC5pbmRleE9mKG4pJiZlLnB1c2goc1tuXSl9Xy5wdXNoKGUpfX12YXIgaz1bInRvSW1hZ2UiXTtvLnNob3dFZGl0SW5DaGFydFN0dWRpbz9rLnB1c2goImVkaXRJbkNoYXJ0U3R1ZGlvIik6by5zaG93U2VuZFRvQ2xvdWQmJmsucHVzaCgic2VuZERhdGFUb0Nsb3VkIik7dyhrKTt2YXIgVD1bXSxNPVtdLEE9W10sUz1bXTsodXx8Z3x8cHx8ZHx8dikrZitoK20reT4xPyhNPVsidG9nZ2xlSG92ZXIiXSxBPVsicmVzZXRWaWV3cyJdKTpmPyhUPVsiem9vbUluR2VvIiwiem9vbU91dEdlbyJdLE09WyJob3ZlckNsb3Nlc3RHZW8iXSxBPVsicmVzZXRHZW8iXSk6aD8oTT1bImhvdmVyQ2xvc2VzdDNkIl0sQT1bInJlc2V0Q2FtZXJhRGVmYXVsdDNkIiwicmVzZXRDYW1lcmFMYXN0U2F2ZTNkIl0pOm0/KFQ9WyJ6b29tSW5NYXBib3giLCJ6b29tT3V0TWFwYm94Il0sTT1bInRvZ2dsZUhvdmVyIl0sQT1bInJlc2V0Vmlld01hcGJveCJdKTpnP009WyJob3ZlckNsb3Nlc3RHbDJkIl06cD9NPVsiaG92ZXJDbG9zZXN0UGllIl06eD8oTT1bImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIsImhvdmVyQ29tcGFyZUNhcnRlc2lhbiJdLEE9WyJyZXNldFZpZXdTYW5rZXkiXSk6TT1bInRvZ2dsZUhvdmVyIl07dSYmKE09WyJ0b2dnbGVTcGlrZWxpbmVzIiwiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIiwiaG92ZXJDb21wYXJlQ2FydGVzaWFuIl0pOyhmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZighaS50cmFjZUlzKHRbZV0sIm5vSG92ZXIiKSlyZXR1cm4hMTtyZXR1cm4hMH0pKHIpJiYoTT1bXSk7IXUmJiFnfHxifHwoVD1bInpvb21JbjJkIiwiem9vbU91dDJkIiwiYXV0b1NjYWxlMmQiXSwicmVzZXRWaWV3cyIhPT1BWzBdJiYoQT1bInJlc2V0U2NhbGUyZCJdKSk7aD9TPVsiem9vbTNkIiwicGFuM2QiLCJvcmJpdFJvdGF0aW9uIiwidGFibGVSb3RhdGlvbiJdOih1fHxnKSYmIWJ8fHY/Uz1bInpvb20yZCIsInBhbjJkIl06bXx8Zj9TPVsicGFuMmQiXTp5JiYoUz1bInpvb20yZCJdKTsoZnVuY3Rpb24odCl7Zm9yKHZhciBlPSExLHI9MDtyPHQubGVuZ3RoJiYhZTtyKyspe3ZhciBuPXRbcl07bi5fbW9kdWxlJiZuLl9tb2R1bGUuc2VsZWN0UG9pbnRzJiYoaS50cmFjZUlzKG4sInNjYXR0ZXItbGlrZSIpPyhhLmhhc01hcmtlcnMobil8fGEuaGFzVGV4dChuKSkmJihlPSEwKTppLnRyYWNlSXMobiwiYm94LXZpb2xpbiIpJiYiYWxsIiE9PW4uYm94cG9pbnRzJiYiYWxsIiE9PW4ucG9pbnRzfHwoZT0hMCkpfXJldHVybiBlfSkocikmJlMucHVzaCgic2VsZWN0MmQiLCJsYXNzbzJkIik7cmV0dXJuIHcoUyksdyhULmNvbmNhdChBKSksdyhNKSxmdW5jdGlvbih0LGUpe2lmKGUubGVuZ3RoKWlmKEFycmF5LmlzQXJyYXkoZVswXSkpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdC5wdXNoKGVbcl0pO2Vsc2UgdC5wdXNoKGUpO3JldHVybiB0fShfLGMpfSh0KSxsP2wudXBkYXRlKHQsYyk6ZS5fbW9kZUJhcj1vKHQsYyl9ZWxzZSBsJiYobC5kZXN0cm95KCksZGVsZXRlIGUuX21vZGVCYXIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc2OCwiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjExNDQsIi4vYnV0dG9ucyI6NjQ5LCIuL21vZGViYXIiOjY1Mn1dLDY1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vZm9udHMvcGxvdGljb24iKSxzPW5ldyBET01QYXJzZXI7ZnVuY3Rpb24gbCh0KXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy51cGRhdGUodC5ncmFwaEluZm8sdC5idXR0b25zKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpfXZhciBjPWwucHJvdG90eXBlO2MudXBkYXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5ncmFwaEluZm89dDt2YXIgcj10aGlzLmdyYXBoSW5mby5fY29udGV4dCxuPXRoaXMuZ3JhcGhJbmZvLl9mdWxsTGF5b3V0LGE9Im1vZGViYXItIituLl91aWQ7dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLGEpLHRoaXMuX3VpZD1hLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9Im1vZGViYXIiLCJob3ZlciI9PT1yLmRpc3BsYXlNb2RlQmFyJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9IiBtb2RlYmFyLS1ob3ZlciBlYXNlLWJnIiksInYiPT09bi5tb2RlYmFyLm9yaWVudGF0aW9uJiYodGhpcy5lbGVtZW50LmNsYXNzTmFtZSs9IiB2ZXJ0aWNhbCIsZT1lLnJldmVyc2UoKSk7dmFyIG89bi5tb2RlYmFyLHM9ImhvdmVyIj09PXIuZGlzcGxheU1vZGVCYXI/Ii5qcy1wbG90bHktcGxvdCAucGxvdGx5OmhvdmVyICI6IiI7aS5kZWxldGVSZWxhdGVkU3R5bGVSdWxlKGEpLGkuYWRkUmVsYXRlZFN0eWxlUnVsZShhLHMrIiMiK2ErIiAubW9kZWJhci1ncm91cCIsImJhY2tncm91bmQtY29sb3I6ICIrby5iZ2NvbG9yKSxpLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoYSwiIyIrYSsiIC5tb2RlYmFyLWJ0biAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmNvbG9yKSxpLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoYSwiIyIrYSsiIC5tb2RlYmFyLWJ0bjpob3ZlciAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmFjdGl2ZWNvbG9yKSxpLmFkZFJlbGF0ZWRTdHlsZVJ1bGUoYSwiIyIrYSsiIC5tb2RlYmFyLWJ0bi5hY3RpdmUgLmljb24gcGF0aCIsImZpbGw6ICIrby5hY3RpdmVjb2xvcik7dmFyIGw9IXRoaXMuaGFzQnV0dG9ucyhlKSxjPXRoaXMuaGFzTG9nbyE9PXIuZGlzcGxheWxvZ28sdT10aGlzLmxvY2FsZSE9PXIubG9jYWxlO2lmKHRoaXMubG9jYWxlPXIubG9jYWxlLChsfHxjfHx1KSYmKHRoaXMucmVtb3ZlQWxsQnV0dG9ucygpLHRoaXMudXBkYXRlQnV0dG9ucyhlKSxyLndhdGVybWFya3x8ci5kaXNwbGF5bG9nbykpe3ZhciBoPXRoaXMuZ2V0TG9nbygpO3Iud2F0ZXJtYXJrJiYoaC5jbGFzc05hbWU9aC5jbGFzc05hbWUrIiB3YXRlcm1hcmsiKSwidiI9PT1uLm1vZGViYXIub3JpZW50YXRpb24/dGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShoLHRoaXMuZWxlbWVudC5jaGlsZE5vZGVzWzBdKTp0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaCksdGhpcy5oYXNMb2dvPSEwfXRoaXMudXBkYXRlQWN0aXZlQnV0dG9uKCl9LGMudXBkYXRlQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuYnV0dG9ucz10LHRoaXMuYnV0dG9uRWxlbWVudHM9W10sdGhpcy5idXR0b25zTmFtZXM9W10sdGhpcy5idXR0b25zLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9ZS5jcmVhdGVHcm91cCgpO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10Lm5hbWU7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtdXN0IHByb3ZpZGUgYnV0dG9uICduYW1lJyBpbiBidXR0b24gY29uZmlnIik7aWYoLTEhPT1lLmJ1dHRvbnNOYW1lcy5pbmRleE9mKG4pKXRocm93IG5ldyBFcnJvcigiYnV0dG9uIG5hbWUgJyIrbisiJyBpcyB0YWtlbiIpO2UuYnV0dG9uc05hbWVzLnB1c2gobik7dmFyIGE9ZS5jcmVhdGVCdXR0b24odCk7ZS5idXR0b25FbGVtZW50cy5wdXNoKGEpLHIuYXBwZW5kQ2hpbGQoYSl9KSxlLmVsZW1lbnQuYXBwZW5kQ2hpbGQocil9KX0sYy5jcmVhdGVHcm91cD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmNsYXNzTmFtZT0ibW9kZWJhci1ncm91cCIsdH0sYy5jcmVhdGVCdXR0b249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyLnNldEF0dHJpYnV0ZSgicmVsIiwidG9vbHRpcCIpLHIuY2xhc3NOYW1lPSJtb2RlYmFyLWJ0biI7dmFyIGE9dC50aXRsZTt2b2lkIDA9PT1hP2E9dC5uYW1lOiJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoYT1hKHRoaXMuZ3JhcGhJbmZvKSksKGF8fDA9PT1hKSYmci5zZXRBdHRyaWJ1dGUoImRhdGEtdGl0bGUiLGEpLHZvaWQgMCE9PXQuYXR0ciYmci5zZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIsdC5hdHRyKTt2YXIgaT10LnZhbDtpZih2b2lkIDAhPT1pJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJihpPWkodGhpcy5ncmFwaEluZm8pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLGkpKSwiZnVuY3Rpb24iIT10eXBlb2YgdC5jbGljayl0aHJvdyBuZXcgRXJyb3IoIm11c3QgcHJvdmlkZSBidXR0b24gJ2NsaWNrJyBmdW5jdGlvbiBpbiBidXR0b24gY29uZmlnIik7ci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24ocil7dC5jbGljayhlLmdyYXBoSW5mbyxyKSxlLnVwZGF0ZUFjdGl2ZUJ1dHRvbihyLmN1cnJlbnRUYXJnZXQpfSksci5zZXRBdHRyaWJ1dGUoImRhdGEtdG9nZ2xlIix0LnRvZ2dsZXx8ITEpLHQudG9nZ2xlJiZuLnNlbGVjdChyKS5jbGFzc2VkKCJhY3RpdmUiLCEwKTt2YXIgcz10Lmljb247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHM/ci5hcHBlbmRDaGlsZChzKCkpOnIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uKHN8fG8ucXVlc3Rpb24pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1ncmF2aXR5Iix0LmdyYXZpdHl8fCJuIikscn0sYy5jcmVhdGVJY29uPWZ1bmN0aW9uKHQpe3ZhciBlLHI9YSh0LmhlaWdodCk/TnVtYmVyKHQuaGVpZ2h0KTp0LmFzY2VudC10LmRlc2NlbnQsbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO2lmKHQucGF0aCl7KGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG4sInN2ZyIpKS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFswLDAsdC53aWR0aCxyXS5qb2luKCIgIikpLGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsImljb24iKTt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobiwicGF0aCIpO2kuc2V0QXR0cmlidXRlKCJkIix0LnBhdGgpLHQudHJhbnNmb3JtP2kuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQudHJhbnNmb3JtKTp2b2lkIDAhPT10LmFzY2VudCYmaS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsIm1hdHJpeCgxIDAgMCAtMSAwICIrdC5hc2NlbnQrIikiKSxlLmFwcGVuZENoaWxkKGkpfXQuc3ZnJiYoZT1zLnBhcnNlRnJvbVN0cmluZyh0LnN2ZywiYXBwbGljYXRpb24veG1sIikuY2hpbGROb2Rlc1swXSk7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxZW0iKSxlLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxZW0iKSxlfSxjLnVwZGF0ZUFjdGl2ZUJ1dHRvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoSW5mby5fZnVsbExheW91dCxyPXZvaWQgMCE9PXQ/dC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpOm51bGw7dGhpcy5idXR0b25FbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxvPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxzPSJ0cnVlIj09PXQuZ2V0QXR0cmlidXRlKCJkYXRhLXRvZ2dsZSIpLGw9bi5zZWxlY3QodCk7aWYocylvPT09ciYmbC5jbGFzc2VkKCJhY3RpdmUiLCFsLmNsYXNzZWQoImFjdGl2ZSIpKTtlbHNle3ZhciBjPW51bGw9PT1vP286aS5uZXN0ZWRQcm9wZXJ0eShlLG8pLmdldCgpO2wuY2xhc3NlZCgiYWN0aXZlIixjPT09YSl9fSl9LGMuaGFzQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJ1dHRvbnM7aWYoIWUpcmV0dXJuITE7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7aWYodFtyXS5sZW5ndGghPT1lW3JdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoO24rKylpZih0W3JdW25dLm5hbWUhPT1lW3JdW25dLm5hbWUpcmV0dXJuITF9cmV0dXJuITB9LGMuZ2V0TG9nbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3JlYXRlR3JvdXAoKSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gZS5ocmVmPSJodHRwczovL3Bsb3QubHkvIixlLnRhcmdldD0iX2JsYW5rIixlLnNldEF0dHJpYnV0ZSgiZGF0YS10aXRsZSIsaS5fKHRoaXMuZ3JhcGhJbmZvLCJQcm9kdWNlZCB3aXRoIFBsb3RseSIpKSxlLmNsYXNzTmFtZT0ibW9kZWJhci1idG4gcGxvdGx5anNpY29uIG1vZGViYXItYnRuLS1sb2dvIixlLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlSWNvbihvLm5ld3Bsb3RseWxvZ28pKSx0LmFwcGVuZENoaWxkKGUpLHR9LGMucmVtb3ZlQWxsQnV0dG9ucz1mdW5jdGlvbigpe2Zvcig7dGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQ7KXRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCk7dGhpcy5oYXNMb2dvPSExfSxjLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpLnJlbW92ZUVsZW1lbnQodGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcigiLm1vZGViYXIiKSksaS5kZWxldGVSZWxhdGVkU3R5bGVSdWxlKHRoaXMuX3VpZCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsYT1uZXcgbCh7Z3JhcGhJbmZvOnQsY29udGFpbmVyOnIuX21vZGViYXJkaXYubm9kZSgpLGJ1dHRvbnM6ZX0pO3JldHVybiByLl9wcml2YXRlcGxvdCYmbi5zZWxlY3QoYS5lbGVtZW50KS5hcHBlbmQoInNwYW4iKS5jbGFzc2VkKCJiYWRnZS1wcml2YXRlIGZsb2F0LS1sZWZ0IiwhMCkudGV4dCgiUFJJVkFURSIpLGF9fSx7Ii4uLy4uL2ZvbnRzL3Bsb3RpY29uIjo2OTcsIi4uLy4uL2xpYiI6NzE3LGQzOjE2NSwiZmFzdC1pc251bWVyaWMiOjIyOH1dLDY1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPSgwLHQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSkoImJ1dHRvbiIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzdGVwOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJtb250aCIsInllYXIiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwiYWxsIl0sZGZsdDoibW9udGgiLGVkaXRUeXBlOiJwbG90In0sc3RlcG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJhY2t3YXJkIiwidG9kYXRlIl0sZGZsdDoiYmFja3dhcmQiLGVkaXRUeXBlOiJwbG90In0sY291bnQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9KTtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJwbG90In0sYnV0dG9uczppLHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJwbG90In0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQiLGVkaXRUeXBlOiJwbG90In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZWRpdFR5cGU6InBsb3QifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoiYm90dG9tIixlZGl0VHlwZToicGxvdCJ9LGZvbnQ6bih7ZWRpdFR5cGU6InBsb3QifSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5saWdodExpbmUsZWRpdFR5cGU6InBsb3QifSxhY3RpdmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6InBsb3QifSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9fSx7Ii4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc1NSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3OTEsIi4uL2NvbG9yL2F0dHJpYnV0ZXMiOjU5MX1dLDY1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3lQYWQ6LjAyLG1pbkJ1dHRvbldpZHRoOjMwLHJ4OjMscnk6MyxsaWdodEFtb3VudDoyNSxkYXJrQW1vdW50OjEwfX0se31dLDY1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2NvbG9yIiksaT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpLGw9dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBjKHQsZSxyLGEpe3ZhciBpPWEuY2FsZW5kYXI7ZnVuY3Rpb24gbyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUscy5idXR0b25zLHIsYSl9aWYobygidmlzaWJsZSIpKXt2YXIgbD1vKCJzdGVwIik7ImFsbCIhPT1sJiYoIWl8fCJncmVnb3JpYW4iPT09aXx8Im1vbnRoIiE9PWwmJiJ5ZWFyIiE9PWw/bygic3RlcG1vZGUiKTplLnN0ZXBtb2RlPSJiYWNrd2FyZCIsbygiY291bnQiKSksbygibGFiZWwiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUsaCl7dmFyIGY9dC5yYW5nZXNlbGVjdG9yfHx7fSxwPWkubmV3Q29udGFpbmVyKGUsInJhbmdlc2VsZWN0b3IiKTtmdW5jdGlvbiBkKHQsZSl7cmV0dXJuIG4uY29lcmNlKGYscCxzLHQsZSl9aWYoZCgidmlzaWJsZSIsbyhmLHAse25hbWU6ImJ1dHRvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjLGNhbGVuZGFyOmh9KS5sZW5ndGg+MCkpe3ZhciBnPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ci5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIGVbcl0uYW5jaG9yPT09dC5faWR9KSxhPTAsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1lW25baV1dLmRvbWFpbjtvJiYoYT1NYXRoLm1heChvWzFdLGEpKX1yZXR1cm5bdC5kb21haW5bMF0sYStsLnlQYWRdfShlLHIsdSk7ZCgieCIsZ1swXSksZCgieSIsZ1sxXSksbi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksZCgieGFuY2hvciIpLGQoInlhbmNob3IiKSxuLmNvZXJjZUZvbnQoZCwiZm9udCIsci5mb250KTt2YXIgdj1kKCJiZ2NvbG9yIik7ZCgiYWN0aXZlY29sb3IiLGEuY29udHJhc3QodixsLmxpZ2h0QW1vdW50LGwuZGFya0Ftb3VudCkpLGQoImJvcmRlcmNvbG9yIiksZCgiYm9yZGVyd2lkdGgiKX19fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3NTUsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzYxLCIuLi9jb2xvciI6NTkyLCIuL2F0dHJpYnV0ZXMiOjY1MywiLi9jb25zdGFudHMiOjY1NH1dLDY1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi9jb2xvciIpLHM9dCgiLi4vZHJhd2luZyIpLGw9dCgiLi4vLi4vbGliIiksYz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGg9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLGY9aC5MSU5FX1NQQUNJTkcscD1oLkZST01fVEwsZD1oLkZST01fQlIsZz10KCIuL2NvbnN0YW50cyIpLHY9dCgiLi9nZXRfdXBkYXRlX29iamVjdCIpO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHQuX2lkfWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPWwuZW5zdXJlU2luZ2xlKHQsInJlY3QiLCJzZWxlY3Rvci1yZWN0IixmdW5jdGlvbih0KXt0LmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX0pO24uYXR0cih7cng6Zy5yeCxyeTpnLnJ5fSksbi5jYWxsKG8uc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoby5maWxsLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuX2lzQWN0aXZlfHxlLl9pc0hvdmVyZWQ/dC5hY3RpdmVjb2xvcjp0LmJnY29sb3J9KGUscikpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyd2lkdGgrInB4Iil9ZnVuY3Rpb24geCh0LGUscixuKXtsLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0Iiwic2VsZWN0b3ItdGV4dCIsZnVuY3Rpb24odCl7dC5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKX0pLmNhbGwocy5mb250LGUuZm9udCkudGV4dChmdW5jdGlvbih0LGUpe2lmKHQubGFiZWwpcmV0dXJuIGU/bC50ZW1wbGF0ZVN0cmluZyh0LmxhYmVsLGUpOnQubGFiZWw7cmV0dXJuImFsbCI9PT10LnN0ZXA/ImFsbCI6dC5jb3VudCt0LnN0ZXAuY2hhckF0KDApfShyLG4uX2Z1bGxMYXlvdXQuX21ldGEpKS5jYWxsKGZ1bmN0aW9uKHQpe2MuY29udmVydFRvVHNwYW5zKHQsbil9KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLnJhbmdlc2VsZWN0b3IiKS5kYXRhKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT11Lmxpc3QodCwieCIsITApLHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgYT1lW25dO2EucmFuZ2VzZWxlY3RvciYmYS5yYW5nZXNlbGVjdG9yLnZpc2libGUmJnIucHVzaChhKX1yZXR1cm4gcn0odCksbSk7ZS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJhbmdlc2VsZWN0b3IiLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlLnN0eWxlKHtjdXJzb3I6InBvaW50ZXIiLCJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KSxlLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksbz1lLHU9by5yYW5nZXNlbGVjdG9yLGg9ci5zZWxlY3RBbGwoImcuYnV0dG9uIikuZGF0YShsLmZpbHRlclZpc2libGUodS5idXR0b25zKSk7aC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJ1dHRvbiIsITApLGguZXhpdCgpLnJlbW92ZSgpLGguZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPXYobyxlKTtlLl9pc0FjdGl2ZT1mdW5jdGlvbih0LGUscil7aWYoImFsbCI9PT1lLnN0ZXApcmV0dXJuITA9PT10LmF1dG9yYW5nZTt2YXIgbj1PYmplY3Qua2V5cyhyKTtyZXR1cm4gdC5yYW5nZVswXT09PXJbblswXV0mJnQucmFuZ2VbMV09PT1yW25bMV1dfShvLGUsaSksci5jYWxsKHksdSxlKSxyLmNhbGwoeCx1LGUsdCksci5vbigiY2xpY2siLGZ1bmN0aW9uKCl7dC5fZHJhZ2dlZHx8YS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsaSl9KSxyLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7ZS5faXNIb3ZlcmVkPSEwLHIuY2FsbCh5LHUsZSl9KSxyLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtlLl9pc0hvdmVyZWQ9ITEsci5jYWxsKHksdSxlKX0pfSksZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgdT0wLGg9MCx2PXIuYm9yZGVyd2lkdGg7ZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdCgiLnNlbGVjdG9yLXRleHQiKSxhPXIuZm9udC5zaXplKmYsaT1NYXRoLm1heChhKmMubGluZUNvdW50KGUpLDE2KSszO2g9TWF0aC5tYXgoaCxpKX0pLGUuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dC5zZWxlY3QoIi5zZWxlY3Rvci1yZWN0IiksYT10LnNlbGVjdCgiLnNlbGVjdG9yLXRleHQiKSxpPWEubm9kZSgpJiZzLmJCb3goYS5ub2RlKCkpLndpZHRoLG89ci5mb250LnNpemUqZixsPWMubGluZUNvdW50KGEpLHA9TWF0aC5tYXgoaSsxMCxnLm1pbkJ1dHRvbldpZHRoKTt0LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh2K3UpKyIsIit2KyIpIiksZS5hdHRyKHt4OjAseTowLHdpZHRoOnAsaGVpZ2h0Omh9KSxjLnBvc2l0aW9uVGV4dChhLHAvMixoLzItKGwtMSkqby8yKzMpLHUrPXArNX0pO3ZhciBtPXQuX2Z1bGxMYXlvdXQuX3NpemUseT1tLmwrbS53KnIueCx4PW0udCttLmgqKDEtci55KSxiPSJsZWZ0IjtsLmlzUmlnaHRBbmNob3IocikmJih5LT11LGI9InJpZ2h0Iik7bC5pc0NlbnRlckFuY2hvcihyKSYmKHktPXUvMixiPSJjZW50ZXIiKTt2YXIgXz0idG9wIjtsLmlzQm90dG9tQW5jaG9yKHIpJiYoeC09aCxfPSJib3R0b20iKTtsLmlzTWlkZGxlQW5jaG9yKHIpJiYoeC09aC8yLF89Im1pZGRsZSIpO3U9TWF0aC5jZWlsKHUpLGg9TWF0aC5jZWlsKGgpLHk9TWF0aC5yb3VuZCh5KSx4PU1hdGgucm91bmQoeCksaS5hdXRvTWFyZ2luKHQsYSsiLXJhbmdlLXNlbGVjdG9yIix7eDpyLngseTpyLnksbDp1KnBbYl0scjp1KmRbYl0sYjpoKmRbX10sdDpoKnBbX119KSxvLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3krIiwiK3grIikiKX0odCxoLHUsby5fbmFtZSxyKX0pfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2ODYsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NjgsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MjYsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4uL2NvbG9yIjo1OTIsIi4uL2RyYXdpbmciOjYxMywiLi9jb25zdGFudHMiOjY1NCwiLi9nZXRfdXBkYXRlX29iamVjdCI6NjU3LGQzOjE2NX1dLDY1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX25hbWUsYT17fTtpZigiYWxsIj09PWUuc3RlcClhW3IrIi5hdXRvcmFuZ2UiXT0hMDtlbHNle3ZhciBpPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYT10LnJhbmdlLGk9bmV3IERhdGUodC5yMmwoYVsxXSkpLG89ZS5zdGVwLHM9ZS5jb3VudDtzd2l0Y2goZS5zdGVwbW9kZSl7Y2FzZSJiYWNrd2FyZCI6cj10Lmwycigrbi50aW1lW29dLnV0Yy5vZmZzZXQoaSwtcykpO2JyZWFrO2Nhc2UidG9kYXRlIjp2YXIgbD1uLnRpbWVbb10udXRjLm9mZnNldChpLC1zKTtyPXQubDJyKCtuLnRpbWVbb10udXRjLmNlaWwobCkpfXZhciBjPWFbMV07cmV0dXJuW3IsY119KHQsZSk7YVtyKyIucmFuZ2VbMF0iXT1pWzBdLGFbcisiLnJhbmdlWzFdIl09aVsxXX1yZXR1cm4gYX19LHtkMzoxNjV9XSw2NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6InJhbmdlc2VsZWN0b3IiLHNjaGVtYTp7c3VicGxvdHM6e3hheGlzOntyYW5nZXNlbGVjdG9yOnQoIi4vYXR0cmlidXRlcyIpfX19LGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksaGFuZGxlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4vYXR0cmlidXRlcyI6NjUzLCIuL2RlZmF1bHRzIjo2NTUsIi4vZHJhdyI6NjU2fV0sNjU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uYmFja2dyb3VuZCxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6ImludGVnZXIiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZToicGxvdCJ9LGF1dG9yYW5nZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnsicmFuZ2VbMF0iOnZvaWQgMCwicmFuZ2VbMV0iOnZvaWQgMH19LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfX0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfX1dLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6e2F1dG9yYW5nZTohMX19LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi4xNSxtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9LHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9fSx7Ii4uL2NvbG9yL2F0dHJpYnV0ZXMiOjU5MX1dLDY2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKS5saXN0LGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmdldEF1dG9SYW5nZSxpPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uKHQsIngiLCEwKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBvPWVbcl0scz1vW2kubmFtZV07cyYmcy52aXNpYmxlJiZzLmF1dG9yYW5nZSYmKHMuX2lucHV0LmF1dG9yYW5nZT0hMCxzLl9pbnB1dC5yYW5nZT1zLnJhbmdlPWEodCxvKSl9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo3NjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzY4LCIuL2NvbnN0YW50cyI6NjYxfV0sNjYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToicmFuZ2VzbGlkZXIiLGNvbnRhaW5lckNsYXNzTmFtZToicmFuZ2VzbGlkZXItY29udGFpbmVyIixiZ0NsYXNzTmFtZToicmFuZ2VzbGlkZXItYmciLHJhbmdlUGxvdENsYXNzTmFtZToicmFuZ2VzbGlkZXItcmFuZ2VwbG90IixtYXNrTWluQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1pbiIsbWFza01heENsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1tYXgiLHNsaWRlQm94Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1zbGlkZWJveCIsZ3JhYmJlck1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmJlci1taW4iLGdyYWJBcmVhTWluQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1ncmFiYXJlYS1taW4iLGhhbmRsZU1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItaGFuZGxlLW1pbiIsZ3JhYmJlck1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmJlci1tYXgiLGdyYWJBcmVhTWF4Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1ncmFiYXJlYS1tYXgiLGhhbmRsZU1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItaGFuZGxlLW1heCIsbWFza01pbk9wcEF4aXNDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWluLW9wcC1heGlzIixtYXNrTWF4T3BwQXhpc0NsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1tYXgtb3BwLWF4aXMiLG1hc2tDb2xvcjoicmdiYSgwLDAsMCwwLjQpIixtYXNrT3BwQXhpc0NvbG9yOiJyZ2JhKDAsMCwwLDAuMikiLHNsaWRlQm94RmlsbDoidHJhbnNwYXJlbnQiLHNsaWRlQm94Q3Vyc29yOiJldy1yZXNpemUiLGdyYWJBcmVhRmlsbDoidHJhbnNwYXJlbnQiLGdyYWJBcmVhQ3Vyc29yOiJjb2wtcmVzaXplIixncmFiQXJlYVdpZHRoOjEwLGhhbmRsZVdpZHRoOjQsaGFuZGxlUmFkaXVzOjEsaGFuZGxlU3Ryb2tlV2lkdGg6MSxleHRyYVBhZDoxNX19LHt9XSw2NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi9vcHBheGlzX2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBsPXRbcl0sYz1lW3JdO2lmKGwucmFuZ2VzbGlkZXJ8fGUuX3JlcXVlc3RSYW5nZXNsaWRlcltjLl9pZF0pe24uaXNQbGFpbk9iamVjdChsLnJhbmdlc2xpZGVyKXx8KGwucmFuZ2VzbGlkZXI9e30pO3ZhciB1LGgsZj1sLnJhbmdlc2xpZGVyLHA9YS5uZXdDb250YWluZXIoYywicmFuZ2VzbGlkZXIiKTtpZihfKCJ2aXNpYmxlIikpe18oImJnY29sb3IiLGUucGxvdF9iZ2NvbG9yKSxfKCJib3JkZXJjb2xvciIpLF8oImJvcmRlcndpZHRoIiksXygidGhpY2tuZXNzIiksXygiYXV0b3JhbmdlIiwhYy5pc1ZhbGlkUmFuZ2UoZi5yYW5nZSkpLF8oInJhbmdlIik7dmFyIGQ9ZS5fc3VicGxvdHM7aWYoZClmb3IodmFyIGc9ZC5jYXJ0ZXNpYW4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnN0cigwLHQuaW5kZXhPZigieSIpKT09PWkubmFtZTJpZChyKX0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHIodC5pbmRleE9mKCJ5IiksdC5sZW5ndGgpfSksdj1uLnNpbXBsZU1hcChnLGkuaWQybmFtZSksbT0wO208di5sZW5ndGg7bSsrKXt2YXIgeT12W21dO3U9Zlt5XXx8e30saD1hLm5ld0NvbnRhaW5lcihwLHksInlheGlzIik7dmFyIHgsYj1lW3ldO3UucmFuZ2UmJmIuaXNWYWxpZFJhbmdlKHUucmFuZ2UpJiYoeD0iZml4ZWQiKSwibWF0Y2giIT09dygicmFuZ2Vtb2RlIix4KSYmdygicmFuZ2UiLGIucmFuZ2Uuc2xpY2UoKSl9cC5faW5wdXQ9Zn19ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBuLmNvZXJjZShmLHAsbyx0LGUpfWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gbi5jb2VyY2UodSxoLHMsdCxlKX19fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3NTUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzY4LCIuL2F0dHJpYnV0ZXMiOjY1OSwiLi9vcHBheGlzX2F0dHJpYnV0ZXMiOjY2Nn1dLDY2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uL2RyYXdpbmciKSxsPXQoIi4uL2NvbG9yIiksYz10KCIuLi90aXRsZXMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksZj10KCIuLi9kcmFnZWxlbWVudCIpLHA9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGQ9dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBhPW8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLGQuYmdDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHt4OjAseTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSksaT1uLmJvcmRlcndpZHRoJTI9PTA/bi5ib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLTEsbD0tbi5fb2Zmc2V0U2hpZnQsYz1zLmNyaXNwUm91bmQoZSxuLmJvcmRlcndpZHRoKTthLmF0dHIoe3dpZHRoOm4uX3dpZHRoK2ksaGVpZ2h0Om4uX2hlaWdodCtpLHRyYW5zZm9ybToidHJhbnNsYXRlKCIrbCsiLCIrbCsiKSIsZmlsbDpuLmJnY29sb3Isc3Ryb2tlOm4uYm9yZGVyY29sb3IsInN0cm9rZS13aWR0aCI6Y30pfWZ1bmN0aW9uIHYodCxlLHIsbil7dmFyIGE9ZS5fZnVsbExheW91dDtvLmVuc3VyZVNpbmdsZUJ5SWQoYS5fdG9wZGVmcywiY2xpcFBhdGgiLG4uX2NsaXBJZCxmdW5jdGlvbih0KXt0LmFwcGVuZCgicmVjdCIpLmF0dHIoe3g6MCx5OjB9KX0pLnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOm4uX3dpZHRoLGhlaWdodDpuLl9oZWlnaHR9KX1mdW5jdGlvbiBtKHQsZSxyLGEpe3ZhciBsLGM9ZS5jYWxjZGF0YSxmPXQuc2VsZWN0QWxsKCJnLiIrZC5yYW5nZVBsb3RDbGFzc05hbWUpLmRhdGEoci5fc3VicGxvdHNXaXRoLG8uaWRlbnRpdHkpO2YuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuIGQucmFuZ2VQbG90Q2xhc3NOYW1lKyIgIit0fSkuY2FsbChzLnNldENsaXBVcmwsYS5fY2xpcElkLGUpLGYub3JkZXIoKSxmLmV4aXQoKS5yZW1vdmUoKSxmLmVhY2goZnVuY3Rpb24odCxvKXt2YXIgcz1uLnNlbGVjdCh0aGlzKSxmPTA9PT1vLHA9aC5nZXRGcm9tSWQoZSx0LCJ5IiksZD1wLl9uYW1lLGc9YVtkXSx2PXtkYXRhOltdLGxheW91dDp7eGF4aXM6e3R5cGU6ci50eXBlLGRvbWFpbjpbMCwxXSxyYW5nZTphLnJhbmdlLnNsaWNlKCksY2FsZW5kYXI6ci5jYWxlbmRhcn0sd2lkdGg6YS5fd2lkdGgsaGVpZ2h0OmEuX2hlaWdodCxtYXJnaW46e3Q6MCxiOjAsbDowLHI6MH19LF9jb250ZXh0OmUuX2NvbnRleHR9O3YubGF5b3V0W2RdPXt0eXBlOnAudHlwZSxkb21haW46WzAsMV0scmFuZ2U6Im1hdGNoIiE9PWcucmFuZ2Vtb2RlP2cucmFuZ2Uuc2xpY2UoKTpwLnJhbmdlLnNsaWNlKCksY2FsZW5kYXI6cC5jYWxlbmRhcn0saS5zdXBwbHlEZWZhdWx0cyh2KTt2YXIgbT12Ll9mdWxsTGF5b3V0LnhheGlzLHk9di5fZnVsbExheW91dFtkXTttLmNsZWFyQ2FsYygpLG0uc2V0U2NhbGUoKSx5LmNsZWFyQ2FsYygpLHkuc2V0U2NhbGUoKTt2YXIgeD17aWQ6dCxwbG90Z3JvdXA6cyx4YXhpczptLHlheGlzOnksaXNSYW5nZVBsb3Q6ITB9O2Y/bD14Oih4Lm1haW5wbG90PSJ4eSIseC5tYWlucGxvdGluZm89bCksdS5yYW5nZVBsb3QoZSx4LGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGE9dFtuXSxpPWFbMF0udHJhY2U7aS54YXhpcytpLnlheGlzPT09ZSYmci5wdXNoKGEpfXJldHVybiByfShjLHQpKX0pfWZ1bmN0aW9uIHkodCxlLHIsbixhKXsoby5lbnN1cmVTaW5nbGUodCwicmVjdCIsZC5tYXNrTWluQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih7eDowLHk6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KS5jYWxsKGwuZmlsbCxkLm1hc2tDb2xvciksby5lbnN1cmVTaW5nbGUodCwicmVjdCIsZC5tYXNrTWF4Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih7eTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpLmNhbGwobC5maWxsLGQubWFza0NvbG9yKSwibWF0Y2giIT09YS5yYW5nZW1vZGUpJiYoby5lbnN1cmVTaW5nbGUodCwicmVjdCIsZC5tYXNrTWluT3BwQXhpc0NsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pLmF0dHIoIndpZHRoIixuLl93aWR0aCkuY2FsbChsLmZpbGwsZC5tYXNrT3BwQXhpc0NvbG9yKSxvLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixkLm1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cih7eTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkuYXR0cigid2lkdGgiLG4uX3dpZHRoKS5zdHlsZSgiYm9yZGVyLXRvcCIsZC5tYXNrT3BwQm9yZGVyKS5jYWxsKGwuZmlsbCxkLm1hc2tPcHBBeGlzQ29sb3IpKX1mdW5jdGlvbiB4KHQsZSxyLG4pe2UuX2NvbnRleHQuc3RhdGljUGxvdHx8by5lbnN1cmVTaW5nbGUodCwicmVjdCIsZC5zbGlkZUJveENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCxjdXJzb3I6ZC5zbGlkZUJveEN1cnNvciwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pLmF0dHIoe2hlaWdodDpuLl9oZWlnaHQsZmlsbDpkLnNsaWRlQm94RmlsbH0pfWZ1bmN0aW9uIGIodCxlLHIsbil7dmFyIGE9by5lbnN1cmVTaW5nbGUodCwiZyIsZC5ncmFiYmVyTWluQ2xhc3NOYW1lKSxpPW8uZW5zdXJlU2luZ2xlKHQsImciLGQuZ3JhYmJlck1heENsYXNzTmFtZSkscz17eDowLHdpZHRoOmQuaGFuZGxlV2lkdGgscng6ZC5oYW5kbGVSYWRpdXMsZmlsbDpsLmJhY2tncm91bmQsc3Ryb2tlOmwuZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6ZC5oYW5kbGVTdHJva2VXaWR0aCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9LGM9e3k6TWF0aC5yb3VuZChuLl9oZWlnaHQvNCksaGVpZ2h0Ok1hdGgucm91bmQobi5faGVpZ2h0LzIpfTtpZihvLmVuc3VyZVNpbmdsZShhLCJyZWN0IixkLmhhbmRsZU1pbkNsYXNzTmFtZSxmdW5jdGlvbih0KXt0LmF0dHIocyl9KS5hdHRyKGMpLG8uZW5zdXJlU2luZ2xlKGksInJlY3QiLGQuaGFuZGxlTWF4Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuYXR0cihzKX0pLmF0dHIoYyksIWUuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIHU9e3dpZHRoOmQuZ3JhYkFyZWFXaWR0aCx4OjAseTowLGZpbGw6ZC5ncmFiQXJlYUZpbGwsY3Vyc29yOmQuZ3JhYkFyZWFDdXJzb3J9O28uZW5zdXJlU2luZ2xlKGEsInJlY3QiLGQuZ3JhYkFyZWFNaW5DbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHUpfSkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpLG8uZW5zdXJlU2luZ2xlKGksInJlY3QiLGQuZ3JhYkFyZWFNYXhDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHUpfSkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9yYW5nZVNsaWRlckRhdGEsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgcz1yW2ldW2QubmFtZV07cy5fY2xpcElkPXMuX2lkKyItIitlLl91aWR9dmFyIGw9ZS5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK2QuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIsZnVuY3Rpb24odCl7cmV0dXJuIHQuX25hbWV9KTtsLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXRbZC5uYW1lXTtlLl90b3BkZWZzLnNlbGVjdCgiIyIrci5fY2xpcElkKS5yZW1vdmUoKX0pLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCYmKGwuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGQuY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLGwuZWFjaChmdW5jdGlvbihyKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxzPXJbZC5uYW1lXSxsPWVbaC5pZDJuYW1lKHIuYW5jaG9yKV0sdT1zW2guaWQybmFtZShyLmFuY2hvcildO2lmKHMucmFuZ2Upe3ZhciBfLHc9by5zaW1wbGVNYXAocy5yYW5nZSxyLnIybCksaz1vLnNpbXBsZU1hcChyLnJhbmdlLHIucjJsKTtfPWtbMF08a1sxXT9bTWF0aC5taW4od1swXSxrWzBdKSxNYXRoLm1heCh3WzFdLGtbMV0pXTpbTWF0aC5tYXgod1swXSxrWzBdKSxNYXRoLm1pbih3WzFdLGtbMV0pXSxzLnJhbmdlPXMuX2lucHV0LnJhbmdlPW8uc2ltcGxlTWFwKF8sci5sMnIpfXIuY2xlYW5SYW5nZSgicmFuZ2VzbGlkZXIucmFuZ2UiKTt2YXIgVD1lLl9zaXplLE09ci5kb21haW47cy5fd2lkdGg9VC53KihNWzFdLU1bMF0pO3ZhciBBPU1hdGgucm91bmQoVC5sK1QudypNWzBdKSxTPU1hdGgucm91bmQoVC50K1QuaCooMS1yLl9jb3VudGVyRG9tYWluTWluKSsoImJvdHRvbSI9PT1yLnNpZGU/ci5fZGVwdGg6MCkrcy5fb2Zmc2V0U2hpZnQrZC5leHRyYVBhZCk7aS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitBKyIsIitTKyIpIik7dmFyIEU9ci5yMmwocy5yYW5nZVswXSksTD1yLnIybChzLnJhbmdlWzFdKSxDPUwtRTtpZihzLnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gdC9zLl93aWR0aCpDK0V9LHMuZDJwPWZ1bmN0aW9uKHQpe3JldHVybih0LUUpL0Mqcy5fd2lkdGh9LHMuX3JsPVtFLExdLCJtYXRjaCIhPT11LnJhbmdlbW9kZSl7dmFyIFA9bC5yMmwodS5yYW5nZVswXSksTz1sLnIybCh1LnJhbmdlWzFdKS1QO3MuZDJwT3BwQXhpcz1mdW5jdGlvbih0KXtyZXR1cm4odC1QKS9PKnMuX2hlaWdodH19aS5jYWxsKGcsdCxyLHMpLmNhbGwodix0LHIscykuY2FsbChtLHQscixzKS5jYWxsKHksdCxyLHMsdSkuY2FsbCh4LHQscixzKS5jYWxsKGIsdCxyLHMpLGZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBzPXQuc2VsZWN0KCJyZWN0LiIrZC5zbGlkZUJveENsYXNzTmFtZSkubm9kZSgpLGw9dC5zZWxlY3QoInJlY3QuIitkLmdyYWJBcmVhTWluQ2xhc3NOYW1lKS5ub2RlKCksYz10LnNlbGVjdCgicmVjdC4iK2QuZ3JhYkFyZWFNYXhDbGFzc05hbWUpLm5vZGUoKTt0Lm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7dmFyIHU9bi5ldmVudCxoPXUudGFyZ2V0LGQ9dS5jbGllbnRYLGc9ZC10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LHY9aS5kMnAoci5fcmxbMF0pLG09aS5kMnAoci5fcmxbMV0pLHk9Zi5jb3ZlclNsaXAoKTtmdW5jdGlvbiB4KHQpe3ZhciB1LGYseCxiPSt0LmNsaWVudFgtZDtzd2l0Y2goaCl7Y2FzZSBzOng9ImV3LXJlc2l6ZSIsdT12K2IsZj1tK2I7YnJlYWs7Y2FzZSBsOng9ImNvbC1yZXNpemUiLHU9ditiLGY9bTticmVhaztjYXNlIGM6eD0iY29sLXJlc2l6ZSIsdT12LGY9bStiO2JyZWFrO2RlZmF1bHQ6eD0iZXctcmVzaXplIix1PWcsZj1nK2J9aWYoZjx1KXt2YXIgXz1mO2Y9dSx1PV99aS5fcGl4ZWxNaW49dSxpLl9waXhlbE1heD1mLHAobi5zZWxlY3QoeSkseCksZnVuY3Rpb24odCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gci5sMnIoby5jb25zdHJhaW4odCxuLl9ybFswXSxuLl9ybFsxXSkpfXZhciBzPWkobi5wMmQobi5fcGl4ZWxNaW4pKSxsPWkobi5wMmQobi5fcGl4ZWxNYXgpKTt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7YS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsci5fbmFtZSsiLnJhbmdlIixbcyxsXSl9KX0oMCxlLHIsaSl9eS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHgpLHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZnVuY3Rpb24gdCgpe3kucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix4KTt5LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHQpO28ucmVtb3ZlRWxlbWVudCh5KX0pfSl9KGksdCxyLHMpLGZ1bmN0aW9uKHQsZSxyLG4sYSxpKXt2YXIgcz1kLmhhbmRsZVdpZHRoLzI7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gby5jb25zdHJhaW4odCwwLG4uX3dpZHRoKX1mdW5jdGlvbiBjKHQpe3JldHVybiBvLmNvbnN0cmFpbih0LDAsbi5faGVpZ2h0KX1mdW5jdGlvbiB1KHQpe3JldHVybiBvLmNvbnN0cmFpbih0LC1zLG4uX3dpZHRoK3MpfXZhciBoPWwobi5kMnAoci5fcmxbMF0pKSxmPWwobi5kMnAoci5fcmxbMV0pKTtpZih0LnNlbGVjdCgicmVjdC4iK2Quc2xpZGVCb3hDbGFzc05hbWUpLmF0dHIoIngiLGgpLmF0dHIoIndpZHRoIixmLWgpLHQuc2VsZWN0KCJyZWN0LiIrZC5tYXNrTWluQ2xhc3NOYW1lKS5hdHRyKCJ3aWR0aCIsaCksdC5zZWxlY3QoInJlY3QuIitkLm1hc2tNYXhDbGFzc05hbWUpLmF0dHIoIngiLGYpLmF0dHIoIndpZHRoIixuLl93aWR0aC1mKSwibWF0Y2giIT09aS5yYW5nZW1vZGUpe3ZhciBwPW4uX2hlaWdodC1jKG4uZDJwT3BwQXhpcyhhLl9ybFsxXSkpLGc9bi5faGVpZ2h0LWMobi5kMnBPcHBBeGlzKGEuX3JsWzBdKSk7dC5zZWxlY3QoInJlY3QuIitkLm1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lKS5hdHRyKCJ4IixoKS5hdHRyKCJoZWlnaHQiLHApLmF0dHIoIndpZHRoIixmLWgpLHQuc2VsZWN0KCJyZWN0LiIrZC5tYXNrTWF4T3BwQXhpc0NsYXNzTmFtZSkuYXR0cigieCIsaCkuYXR0cigieSIsZykuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQtZykuYXR0cigid2lkdGgiLGYtaCksdC5zZWxlY3QoInJlY3QuIitkLnNsaWRlQm94Q2xhc3NOYW1lKS5hdHRyKCJ5IixwKS5hdHRyKCJoZWlnaHQiLGctcCl9dmFyIHY9TWF0aC5yb3VuZCh1KGgtcykpLS41LG09TWF0aC5yb3VuZCh1KGYtcykpKy41O3Quc2VsZWN0KCJnLiIrZC5ncmFiYmVyTWluQ2xhc3NOYW1lKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2KyIsMC41KSIpLHQuc2VsZWN0KCJnLiIrZC5ncmFiYmVyTWF4Q2xhc3NOYW1lKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIittKyIsMC41KSIpfShpLDAscixzLGwsdSksImJvdHRvbSI9PT1yLnNpZGUmJmMuZHJhdyh0LHIuX2lkKyJ0aXRsZSIse3Byb3BDb250YWluZXI6cixwcm9wTmFtZTpyLl9uYW1lKyIudGl0bGUiLHBsYWNlaG9sZGVyOmUuX2RmbHRUaXRsZS54LGF0dHJpYnV0ZXM6e3g6ci5fb2Zmc2V0K3IuX2xlbmd0aC8yLHk6UytzLl9oZWlnaHQrcy5fb2Zmc2V0U2hpZnQrMTArMS41KnIudGl0bGUuZm9udC5zaXplLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9KSl9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3MzcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc2OCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNiwiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi4vY29sb3IiOjU5MiwiLi4vZHJhZ2VsZW1lbnQiOjYxMCwiLi4vZHJhd2luZyI6NjEzLCIuLi90aXRsZXMiOjY3OSwiLi9jb25zdGFudHMiOjY2MSxkMzoxNjV9XSw2NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxpPXQoIi4vY29uc3RhbnRzIiksbz10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLHM9aS5uYW1lO2Z1bmN0aW9uIGwodCl7dmFyIGU9dCYmdFtzXTtyZXR1cm4gZSYmZS52aXNpYmxlfXIuaXNWaXNpYmxlPWwsci5tYWtlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT1uLmxpc3Qoe19mdWxsTGF5b3V0OnR9LCJ4IiwhMCkscj10Lm1hcmdpbixhPVtdO2lmKCF0Ll9oYXMoImdsMmQiKSlmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtpZihsKG8pKXthLnB1c2gobyk7dmFyIGM9b1tzXTtjLl9pZD1zK28uX2lkLGMuX2hlaWdodD0odC5oZWlnaHQtci5iLXIudCkqYy50aGlja25lc3MsYy5fb2Zmc2V0U2hpZnQ9TWF0aC5mbG9vcihjLmJvcmRlcndpZHRoLzIpfX10Ll9yYW5nZVNsaWRlckRhdGE9YX0sci5hdXRvTWFyZ2luT3B0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsbj1lW3NdLGw9ZS5faWQuY2hhckF0KDApLGM9MCx1PTA7ImJvdHRvbSI9PT1lLnNpZGUmJihjPWUuX2RlcHRoLGUudGl0bGUudGV4dCE9PXIuX2RmbHRUaXRsZVtsXSYmKHU9MS41KmUudGl0bGUuZm9udC5zaXplKzEwK24uX29mZnNldFNoaWZ0LHUrPShlLnRpdGxlLnRleHQubWF0Y2goYS5CUl9UQUdfQUxMKXx8W10pLmxlbmd0aCplLnRpdGxlLmZvbnQuc2l6ZSpvKSk7cmV0dXJue3g6MCx5OmUuX2NvdW50ZXJEb21haW5NaW4sbDowLHI6MCx0OjAsYjpuLl9oZWlnaHQrYytNYXRoLm1heChyLm1hcmdpbi5iLHUpLHBhZDppLmV4dHJhUGFkKzIqbi5fb2Zmc2V0U2hpZnR9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2ODYsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc2OCwiLi9jb25zdGFudHMiOjY2MX1dLDY2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4vYXR0cmlidXRlcyIpLGk9dCgiLi9vcHBheGlzX2F0dHJpYnV0ZXMiKSxvPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJyYW5nZXNsaWRlciIsc2NoZW1hOntzdWJwbG90czp7eGF4aXM6e3Jhbmdlc2xpZGVyOm4uZXh0ZW5kRmxhdCh7fSxhLHt5YXhpczppfSl9fX0sbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxoYW5kbGVEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsY0F1dG9yYW5nZTp0KCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzp0KCIuL2RyYXciKSxpc1Zpc2libGU6by5pc1Zpc2libGUsbWFrZURhdGE6by5tYWtlRGF0YSxhdXRvTWFyZ2luT3B0czpvLmF1dG9NYXJnaW5PcHRzfX0seyIuLi8uLi9saWIiOjcxNywiLi9hdHRyaWJ1dGVzIjo2NTksIi4vY2FsY19hdXRvcmFuZ2UiOjY2MCwiLi9kZWZhdWx0cyI6NjYyLCIuL2RyYXciOjY2MywiLi9oZWxwZXJzIjo2NjQsIi4vb3BwYXhpc19hdHRyaWJ1dGVzIjo2NjZ9XSw2NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtfaXNTdWJwbG90T2JqOiEwLHJhbmdlbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImZpeGVkIiwibWF0Y2giXSxkZmx0OiJtYXRjaCIsZWRpdFR5cGU6ImNhbGMifSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QifV0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyJ9fSx7fV0sNjY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiKS5saW5lLGk9dCgiLi4vZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz1zKCJzaGFwZSIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2lyY2xlIiwicmVjdCIsInBhdGgiLCJsaW5lIl0sZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJlbG93IiwiYWJvdmUiXSxkZmx0OiJhYm92ZSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhyZWY6byh7fSxuLnhyZWYse30pLHhzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2NhbGVkIiwicGl4ZWwiXSxkZmx0OiJzY2FsZWQiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHhhbmNob3I6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seDA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seDE6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seXJlZjpvKHt9LG4ueXJlZix7fSkseXNpemVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzY2FsZWQiLCJwaXhlbCJdLGRmbHQ6InNjYWxlZCIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seWFuY2hvcjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5MDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5MTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxwYXRoOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxsaW5lOntjb2xvcjpvKHt9LGEuY29sb3Ise2VkaXRUeXBlOiJhcnJheWRyYXcifSksd2lkdGg6byh7fSxhLndpZHRoLHtlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSksZGFzaDpvKHt9LGkse2VkaXRUeXBlOiJhcnJheWRyYXcifSksZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGVkaXRUeXBlOiJhcnJheWRyYXcifSl9LHsiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3NTUsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExMjAsIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiOjU3NSwiLi4vZHJhd2luZy9hdHRyaWJ1dGVzIjo2MTJ9XSw2Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi9jb25zdGFudHMiKSxvPXQoIi4vaGVscGVycyIpO2Z1bmN0aW9uIHModCl7cmV0dXJuIGModC5saW5lLndpZHRoLHQueHNpemVtb2RlLHQueDAsdC54MSx0LnBhdGgsITEpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGModC5saW5lLndpZHRoLHQueXNpemVtb2RlLHQueTAsdC55MSx0LnBhdGgsITApfWZ1bmN0aW9uIGModCxlLHIsYSxzLGwpe3ZhciBjPXQvMix1PWw7aWYoInBpeGVsIj09PWUpe3ZhciBoPXM/by5leHRyYWN0UGF0aENvb3JkcyhzLGw/aS5wYXJhbUlzWTppLnBhcmFtSXNYKTpbcixhXSxmPW4uYWdnTnVtcyhNYXRoLm1heCxudWxsLGgpLHA9bi5hZ2dOdW1zKE1hdGgubWluLG51bGwsaCksZD1wPDA/TWF0aC5hYnMocCkrYzpjLGc9Zj4wP2YrYzpjO3JldHVybntwcGFkOmMscHBhZHBsdXM6dT9kOmcscHBhZG1pbnVzOnU/ZzpkfX1yZXR1cm57cHBhZDpjfX1mdW5jdGlvbiB1KHQsZSxyLG4sYSl7dmFyIHM9ImNhdGVnb3J5Ij09PXQudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlP3QucjJjOnQuZDJjO2lmKHZvaWQgMCE9PWUpcmV0dXJuW3MoZSkscyhyKV07aWYobil7dmFyIGwsYyx1LGgsZj0xLzAscD0tMS8wLGQ9bi5tYXRjaChpLnNlZ21lbnRSRSk7Zm9yKCJkYXRlIj09PXQudHlwZSYmKHM9by5kZWNvZGVEYXRlKHMpKSxsPTA7bDxkLmxlbmd0aDtsKyspdm9pZCAwIT09KGM9YVtkW2xdLmNoYXJBdCgwKV0uZHJhd24pJiYoISh1PWRbbF0uc3Vic3RyKDEpLm1hdGNoKGkucGFyYW1SRSkpfHx1Lmxlbmd0aDxjfHwoKGg9cyh1W2NdKSk8ZiYmKGY9aCksaD5wJiYocD1oKSkpO3JldHVybiBwPj1mP1tmLHBdOnZvaWQgMH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1uLmZpbHRlclZpc2libGUoZS5zaGFwZXMpO2lmKHIubGVuZ3RoJiZ0Ll9mdWxsRGF0YS5sZW5ndGgpZm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBjLGgsZj1yW29dO2lmKGYuX2V4dHJlbWVzPXt9LCJwYXBlciIhPT1mLnhyZWYpe3ZhciBwPSJwaXhlbCI9PT1mLnhzaXplbW9kZT9mLnhhbmNob3I6Zi54MCxkPSJwaXhlbCI9PT1mLnhzaXplbW9kZT9mLnhhbmNob3I6Zi54MTsoaD11KGM9YS5nZXRGcm9tSWQodCxmLnhyZWYpLHAsZCxmLnBhdGgsaS5wYXJhbUlzWCkpJiYoZi5fZXh0cmVtZXNbYy5faWRdPWEuZmluZEV4dHJlbWVzKGMsaCxzKGYpKSl9aWYoInBhcGVyIiE9PWYueXJlZil7dmFyIGc9InBpeGVsIj09PWYueXNpemVtb2RlP2YueWFuY2hvcjpmLnkwLHY9InBpeGVsIj09PWYueXNpemVtb2RlP2YueWFuY2hvcjpmLnkxOyhoPXUoYz1hLmdldEZyb21JZCh0LGYueXJlZiksZyx2LGYucGF0aCxpLnBhcmFtSXNZKSkmJihmLl9leHRyZW1lc1tjLl9pZF09YS5maW5kRXh0cmVtZXMoYyxoLGwoZikpKX19fX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi9jb25zdGFudHMiOjY2OSwiLi9oZWxwZXJzIjo2NzJ9XSw2Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzZWdtZW50UkU6L1tNTEhWUUNUU1pdW15NTEhWUUNUU1pdKi9nLHBhcmFtUkU6L1teXHMsXSsvZyxwYXJhbUlzWDp7TTp7MDohMCxkcmF3bjowfSxMOnswOiEwLGRyYXduOjB9LEg6ezA6ITAsZHJhd246MH0sVjp7fSxROnswOiEwLDI6ITAsZHJhd246Mn0sQzp7MDohMCwyOiEwLDQ6ITAsZHJhd246NH0sVDp7MDohMCxkcmF3bjowfSxTOnswOiEwLDI6ITAsZHJhd246Mn0sWjp7fX0scGFyYW1Jc1k6e006ezE6ITAsZHJhd246MX0sTDp7MTohMCxkcmF3bjoxfSxIOnt9LFY6ezA6ITAsZHJhd246MH0sUTp7MTohMCwzOiEwLGRyYXduOjN9LEM6ezE6ITAsMzohMCw1OiEwLGRyYXduOjV9LFQ6ezE6ITAsZHJhd246MX0sUzp7MTohMCwzOiEwLGRyYXduOjV9LFo6e319LG51bVBhcmFtczp7TToyLEw6MixIOjEsVjoxLFE6NCxDOjYsVDoyLFM6NCxaOjB9fX0se31dLDY3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gaShyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGEpfWlmKGkoInZpc2libGUiKSl7aSgibGF5ZXIiKSxpKCJvcGFjaXR5IiksaSgiZmlsbGNvbG9yIiksaSgibGluZS5jb2xvciIpLGkoImxpbmUud2lkdGgiKSxpKCJsaW5lLmRhc2giKTtmb3IodmFyIGw9aSgidHlwZSIsdC5wYXRoPyJwYXRoIjoicmVjdCIpLGM9aSgieHNpemVtb2RlIiksdT1pKCJ5c2l6ZW1vZGUiKSxoPVsieCIsInkiXSxmPTA7ZjwyO2YrKyl7dmFyIHAsZCxnLHY9aFtmXSxtPXYrImFuY2hvciIseT0ieCI9PT12P2M6dSx4PXtfZnVsbExheW91dDpyfSxiPWEuY29lcmNlUmVmKHQsZSx4LHYsIiIsInBhcGVyIik7aWYoInBhcGVyIiE9PWI/KChwPWEuZ2V0RnJvbUlkKHgsYikpLl9zaGFwZUluZGljZXMucHVzaChlLl9pbmRleCksZz1zLnJhbmdlVG9TaGFwZVBvc2l0aW9uKHApLGQ9cy5zaGFwZVBvc2l0aW9uVG9SYW5nZShwKSk6ZD1nPW4uaWRlbnRpdHksInBhdGgiIT09bCl7dmFyIF89disiMCIsdz12KyIxIixrPXRbX10sVD10W3ddO3RbX109ZCh0W19dLCEwKSx0W3ddPWQodFt3XSwhMCksInBpeGVsIj09PXk/KGkoXywwKSxpKHcsMTApKTooYS5jb2VyY2VQb3NpdGlvbihlLHgsaSxiLF8sLjI1KSxhLmNvZXJjZVBvc2l0aW9uKGUseCxpLGIsdywuNzUpKSxlW19dPWcoZVtfXSksZVt3XT1nKGVbd10pLHRbX109ayx0W3ddPVR9aWYoInBpeGVsIj09PXkpe3ZhciBNPXRbbV07dFttXT1kKHRbbV0sITApLGEuY29lcmNlUG9zaXRpb24oZSx4LGksYixtLC4yNSksZVttXT1nKGVbbV0pLHRbbV09TX19InBhdGgiPT09bD9pKCJwYXRoIik6bi5ub25lT3JBbGwodCxlLFsieDAiLCJ4MSIsInkwIiwieTEiXSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2kodCxlLHtuYW1lOiJzaGFwZXMiLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc2MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi9hdHRyaWJ1dGVzIjo2NjcsIi4vaGVscGVycyI6NjcyfV0sNjcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi9jb2xvciIpLHM9dCgiLi4vZHJhd2luZyIpLGw9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLGM9dCgiLi4vZHJhZ2VsZW1lbnQiKSx1PXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxoPXQoIi4vY29uc3RhbnRzIiksZj10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBwKHQsZSl7dC5fZnVsbExheW91dC5fcGFwZXJkaXYuc2VsZWN0QWxsKCcuc2hhcGVsYXllciBbZGF0YS1pbmRleD0iJytlKyciXScpLnJlbW92ZSgpO3ZhciByPXQuX2Z1bGxMYXlvdXQuc2hhcGVzW2VdfHx7fTtpZihyLl9pbnB1dCYmITEhPT1yLnZpc2libGUpaWYoImJlbG93IiE9PXIubGF5ZXIpbSh0Ll9mdWxsTGF5b3V0Ll9zaGFwZVVwcGVyTGF5ZXIpO2Vsc2UgaWYoInBhcGVyIj09PXIueHJlZnx8InBhcGVyIj09PXIueXJlZiltKHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcik7ZWxzZXt2YXIgcD10Ll9mdWxsTGF5b3V0Ll9wbG90c1tyLnhyZWYrci55cmVmXTtpZihwKW0oKHAubWFpbnBsb3RpbmZvfHxwKS5zaGFwZWxheWVyKTtlbHNlIG0odC5fZnVsbExheW91dC5fc2hhcGVMb3dlckxheWVyKX1mdW5jdGlvbiBtKHApe3ZhciBtPXsiZGF0YS1pbmRleCI6ZSwiZmlsbC1ydWxlIjoiZXZlbm9kZCIsZDpnKHQscil9LHk9ci5saW5lLndpZHRoP3IubGluZS5jb2xvcjoicmdiYSgwLDAsMCwwKSIseD1wLmFwcGVuZCgicGF0aCIpLmF0dHIobSkuc3R5bGUoIm9wYWNpdHkiLHIub3BhY2l0eSkuY2FsbChvLnN0cm9rZSx5KS5jYWxsKG8uZmlsbCxyLmZpbGxjb2xvcikuY2FsbChzLmRhc2hMaW5lLHIubGluZS5kYXNoLHIubGluZS53aWR0aCk7ZCh4LHQsciksdC5fY29udGV4dC5lZGl0cy5zaGFwZVBvc2l0aW9uJiZmdW5jdGlvbih0LGUscixvLHApe3ZhciBtLHkseCxiLF8sdyxrLFQsTSxBLFMsRSxMLEMsUCxPLHo9MTAsST0xMCxEPSJwaXhlbCI9PT1yLnhzaXplbW9kZSxSPSJwaXhlbCI9PT1yLnlzaXplbW9kZSxGPSJsaW5lIj09PXIudHlwZSxCPSJwYXRoIj09PXIudHlwZSxOPWwodC5sYXlvdXQsInNoYXBlcyIsciksaj1OLm1vZGlmeUl0ZW0sVj1pLmdldEZyb21JZCh0LHIueHJlZiksVT1pLmdldEZyb21JZCh0LHIueXJlZikscT1mLmdldERhdGFUb1BpeGVsKHQsViksSD1mLmdldERhdGFUb1BpeGVsKHQsVSwhMCksRz1mLmdldFBpeGVsVG9EYXRhKHQsViksWT1mLmdldFBpeGVsVG9EYXRhKHQsVSwhMCksVz1GP2Z1bmN0aW9uKCl7dmFyIHQ9TWF0aC5tYXgoci5saW5lLndpZHRoLDEwKSxuPXAuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1pbmRleCIsbyk7bi5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixlLmF0dHIoImQiKSkuc3R5bGUoe2N1cnNvcjoibW92ZSIsInN0cm9rZS13aWR0aCI6dCwic3Ryb2tlLW9wYWNpdHkiOiIwIn0pO3ZhciBhPXsiZmlsbC1vcGFjaXR5IjoiMCJ9LGk9dC8yPjEwP3QvMjoxMDtyZXR1cm4gbi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoeyJkYXRhLWxpbmUtcG9pbnQiOiJzdGFydC1wb2ludCIsY3g6RD9xKHIueGFuY2hvcikrci54MDpxKHIueDApLGN5OlI/SChyLnlhbmNob3IpLXIueTA6SChyLnkwKSxyOml9KS5zdHlsZShhKS5jbGFzc2VkKCJjdXJzb3ItZ3JhYiIsITApLG4uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKHsiZGF0YS1saW5lLXBvaW50IjoiZW5kLXBvaW50IixjeDpEP3Eoci54YW5jaG9yKStyLngxOnEoci54MSksY3k6Uj9IKHIueWFuY2hvciktci55MTpIKHIueTEpLHI6aX0pLnN0eWxlKGEpLmNsYXNzZWQoImN1cnNvci1ncmFiIiwhMCksbn0oKTplLFg9e2VsZW1lbnQ6Vy5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24obil7RCYmKF89cShyLnhhbmNob3IpKTtSJiYodz1IKHIueWFuY2hvcikpOyJwYXRoIj09PXIudHlwZT9QPXIucGF0aDoobT1EP3IueDA6cShyLngwKSx5PVI/ci55MDpIKHIueTApLHg9RD9yLngxOnEoci54MSksYj1SP3IueTE6SChyLnkxKSk7bTx4PyhNPW0sTD0ieDAiLEE9eCxDPSJ4MSIpOihNPXgsTD0ieDEiLEE9bSxDPSJ4MCIpOyFSJiZ5PGJ8fFImJnk+Yj8oaz15LFM9InkwIixUPWIsRT0ieTEiKTooaz1iLFM9InkxIixUPXksRT0ieTAiKTtaKG4pLFEocCxyKSxmdW5jdGlvbih0LGUscil7dmFyIG49ZS54cmVmLGE9ZS55cmVmLG89aS5nZXRGcm9tSWQocixuKSxsPWkuZ2V0RnJvbUlkKHIsYSksYz0iIjsicGFwZXIiPT09bnx8by5hdXRvcmFuZ2V8fChjKz1uKTsicGFwZXIiPT09YXx8bC5hdXRvcmFuZ2V8fChjKz1hKTtzLnNldENsaXBVcmwodCxjPyJjbGlwIityLl9mdWxsTGF5b3V0Ll91aWQrYzpudWxsLHIpfShlLHIsdCksWC5tb3ZlRm49Im1vdmUiPT09Tz9KOkt9LGRvbmVGbjpmdW5jdGlvbigpe3UoZSksJChwKSxkKGUsdCxyKSxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxOLmdldFVwZGF0ZU9iaigpKX0sY2xpY2tGbjpmdW5jdGlvbigpeyQocCl9fTtmdW5jdGlvbiBaKHQpe2lmKEYpTz0icGF0aCI9PT10LnRhcmdldC50YWdOYW1lPyJtb3ZlIjoic3RhcnQtcG9pbnQiPT09dC50YXJnZXQuYXR0cmlidXRlc1siZGF0YS1saW5lLXBvaW50Il0udmFsdWU/InJlc2l6ZS1vdmVyLXN0YXJ0LXBvaW50IjoicmVzaXplLW92ZXItZW5kLXBvaW50IjtlbHNle3ZhciByPVguZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIucmlnaHQtci5sZWZ0LGE9ci5ib3R0b20tci50b3AsaT10LmNsaWVudFgtci5sZWZ0LG89dC5jbGllbnRZLXIudG9wLHM9IUImJm4+eiYmYT5JJiYhdC5zaGlmdEtleT9jLmdldEN1cnNvcihpL24sMS1vL2EpOiJtb3ZlIjt1KGUscyksTz1zLnNwbGl0KCItIilbMF19fWZ1bmN0aW9uIEoobixhKXtpZigicGF0aCI9PT1yLnR5cGUpe3ZhciBpPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxvPWkscz1pO0Q/aigieGFuY2hvciIsci54YW5jaG9yPUcoXytuKSk6KG89ZnVuY3Rpb24odCl7cmV0dXJuIEcocSh0KStuKX0sViYmImRhdGUiPT09Vi50eXBlJiYobz1mLmVuY29kZURhdGUobykpKSxSP2ooInlhbmNob3IiLHIueWFuY2hvcj1ZKHcrYSkpOihzPWZ1bmN0aW9uKHQpe3JldHVybiBZKEgodCkrYSl9LFUmJiJkYXRlIj09PVUudHlwZSYmKHM9Zi5lbmNvZGVEYXRlKHMpKSksaigicGF0aCIsci5wYXRoPXYoUCxvLHMpKX1lbHNlIEQ/aigieGFuY2hvciIsci54YW5jaG9yPUcoXytuKSk6KGooIngwIixyLngwPUcobStuKSksaigieDEiLHIueDE9Ryh4K24pKSksUj9qKCJ5YW5jaG9yIixyLnlhbmNob3I9WSh3K2EpKTooaigieTAiLHIueTA9WSh5K2EpKSxqKCJ5MSIsci55MT1ZKGIrYSkpKTtlLmF0dHIoImQiLGcodCxyKSksUShwLHIpfWZ1bmN0aW9uIEsobixhKXtpZihCKXt2YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sbz1pLHM9aTtEP2ooInhhbmNob3IiLHIueGFuY2hvcj1HKF8rbikpOihvPWZ1bmN0aW9uKHQpe3JldHVybiBHKHEodCkrbil9LFYmJiJkYXRlIj09PVYudHlwZSYmKG89Zi5lbmNvZGVEYXRlKG8pKSksUj9qKCJ5YW5jaG9yIixyLnlhbmNob3I9WSh3K2EpKToocz1mdW5jdGlvbih0KXtyZXR1cm4gWShIKHQpK2EpfSxVJiYiZGF0ZSI9PT1VLnR5cGUmJihzPWYuZW5jb2RlRGF0ZShzKSkpLGooInBhdGgiLHIucGF0aD12KFAsbyxzKSl9ZWxzZSBpZihGKXtpZigicmVzaXplLW92ZXItc3RhcnQtcG9pbnQiPT09Tyl7dmFyIGw9bStuLGM9Uj95LWE6eSthO2ooIngwIixyLngwPUQ/bDpHKGwpKSxqKCJ5MCIsci55MD1SP2M6WShjKSl9ZWxzZSBpZigicmVzaXplLW92ZXItZW5kLXBvaW50Ij09PU8pe3ZhciB1PXgrbixoPVI/Yi1hOmIrYTtqKCJ4MSIsci54MT1EP3U6Ryh1KSksaigieTEiLHIueTE9Uj9oOlkoaCkpfX1lbHNle3ZhciBkPX5PLmluZGV4T2YoIm4iKT9rK2E6ayxOPX5PLmluZGV4T2YoInMiKT9UK2E6VCxXPX5PLmluZGV4T2YoInciKT9NK246TSxYPX5PLmluZGV4T2YoImUiKT9BK246QTt+Ty5pbmRleE9mKCJuIikmJlImJihkPWstYSksfk8uaW5kZXhPZigicyIpJiZSJiYoTj1ULWEpLCghUiYmTi1kPkl8fFImJmQtTj5JKSYmKGooUyxyW1NdPVI/ZDpZKGQpKSxqKEUscltFXT1SP046WShOKSkpLFgtVz56JiYoaihMLHJbTF09RD9XOkcoVykpLGooQyxyW0NdPUQ/WDpHKFgpKSl9ZS5hdHRyKCJkIixnKHQscikpLFEocCxyKX1mdW5jdGlvbiBRKHQsZSl7KER8fFIpJiZmdW5jdGlvbigpe3ZhciByPSJwYXRoIiE9PWUudHlwZSxuPXQuc2VsZWN0QWxsKCIudmlzdWFsLWN1ZSIpLmRhdGEoWzBdKTtuLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cih7ZmlsbDoiI2ZmZiIsImZpbGwtcnVsZSI6ImV2ZW5vZGQiLHN0cm9rZToiIzAwMCIsInN0cm9rZS13aWR0aCI6MX0pLmNsYXNzZWQoInZpc3VhbC1jdWUiLCEwKTt2YXIgaT1xKEQ/ZS54YW5jaG9yOmEubWlkUmFuZ2Uocj9bZS54MCxlLngxXTpmLmV4dHJhY3RQYXRoQ29vcmRzKGUucGF0aCxoLnBhcmFtSXNYKSkpLG89SChSP2UueWFuY2hvcjphLm1pZFJhbmdlKHI/W2UueTAsZS55MV06Zi5leHRyYWN0UGF0aENvb3JkcyhlLnBhdGgsaC5wYXJhbUlzWSkpKTtpZihpPWYucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nKGksMSksbz1mLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZyhvLDEpLEQmJlIpe3ZhciBzPSJNIisoaS0xLTEpKyIsIisoby0xLTEpKyJoLTh2Mmg4IHY4aDJ2LTggaDh2LTJoLTggdi04aC0yIFoiO24uYXR0cigiZCIscyl9ZWxzZSBpZihEKXt2YXIgbD0iTSIrKGktMS0xKSsiLCIrKG8tOS0xKSsidjE4IGgyIHYtMTggWiI7bi5hdHRyKCJkIixsKX1lbHNle3ZhciBjPSJNIisoaS05LTEpKyIsIisoby0xLTEpKyJoMTggdjIgaC0xOCBaIjtuLmF0dHIoImQiLGMpfX0oKX1mdW5jdGlvbiAkKHQpe3Quc2VsZWN0QWxsKCIudmlzdWFsLWN1ZSIpLnJlbW92ZSgpfWMuaW5pdChYKSxXLm5vZGUoKS5vbm1vdXNlbW92ZT1afSh0LHgscixlLHApfX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj0oci54cmVmK3IueXJlZikucmVwbGFjZSgvcGFwZXIvZywiIik7cy5zZXRDbGlwVXJsKHQsbj8iY2xpcCIrZS5fZnVsbExheW91dC5fdWlkK246bnVsbCxlKX1mdW5jdGlvbiBnKHQsZSl7dmFyIHIsbixvLHMsbCxjLHUscCxkPWUudHlwZSxnPWkuZ2V0RnJvbUlkKHQsZS54cmVmKSx2PWkuZ2V0RnJvbUlkKHQsZS55cmVmKSxtPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZz8ocj1mLnNoYXBlUG9zaXRpb25Ub1JhbmdlKGcpLG49ZnVuY3Rpb24odCl7cmV0dXJuIGcuX29mZnNldCtnLnIycChyKHQsITApKX0pOm49ZnVuY3Rpb24odCl7cmV0dXJuIG0ubCttLncqdH0sdj8obz1mLnNoYXBlUG9zaXRpb25Ub1JhbmdlKHYpLHM9ZnVuY3Rpb24odCl7cmV0dXJuIHYuX29mZnNldCt2LnIycChvKHQsITApKX0pOnM9ZnVuY3Rpb24odCl7cmV0dXJuIG0udCttLmgqKDEtdCl9LCJwYXRoIj09PWQpcmV0dXJuIGcmJiJkYXRlIj09PWcudHlwZSYmKG49Zi5kZWNvZGVEYXRlKG4pKSx2JiYiZGF0ZSI9PT12LnR5cGUmJihzPWYuZGVjb2RlRGF0ZShzKSksZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQucGF0aCxpPXQueHNpemVtb2RlLG89dC55c2l6ZW1vZGUscz10LnhhbmNob3IsbD10LnlhbmNob3I7cmV0dXJuIG4ucmVwbGFjZShoLnNlZ21lbnRSRSxmdW5jdGlvbih0KXt2YXIgbj0wLGM9dC5jaGFyQXQoMCksdT1oLnBhcmFtSXNYW2NdLGY9aC5wYXJhbUlzWVtjXSxwPWgubnVtUGFyYW1zW2NdLGQ9dC5zdWJzdHIoMSkucmVwbGFjZShoLnBhcmFtUkUsZnVuY3Rpb24odCl7cmV0dXJuIHVbbl0/dD0icGl4ZWwiPT09aT9lKHMpK051bWJlcih0KTplKHQpOmZbbl0mJih0PSJwaXhlbCI9PT1vP3IobCktTnVtYmVyKHQpOnIodCkpLCsrbj5wJiYodD0iWCIpLHR9KTtyZXR1cm4gbj5wJiYoZD1kLnJlcGxhY2UoL1tccyxdKlguKi8sIiIpLGEubG9nKCJJZ25vcmluZyBleHRyYSBwYXJhbXMgaW4gc2VnbWVudCAiK3QpKSxjK2R9KX0oZSxuLHMpO2lmKCJwaXhlbCI9PT1lLnhzaXplbW9kZSl7dmFyIHk9bihlLnhhbmNob3IpO2w9eStlLngwLGM9eStlLngxfWVsc2UgbD1uKGUueDApLGM9bihlLngxKTtpZigicGl4ZWwiPT09ZS55c2l6ZW1vZGUpe3ZhciB4PXMoZS55YW5jaG9yKTt1PXgtZS55MCxwPXgtZS55MX1lbHNlIHU9cyhlLnkwKSxwPXMoZS55MSk7aWYoImxpbmUiPT09ZClyZXR1cm4iTSIrbCsiLCIrdSsiTCIrYysiLCIrcDtpZigicmVjdCI9PT1kKXJldHVybiJNIitsKyIsIit1KyJIIitjKyJWIitwKyJIIitsKyJaIjt2YXIgYj0obCtjKS8yLF89KHUrcCkvMix3PU1hdGguYWJzKGItbCksaz1NYXRoLmFicyhfLXUpLFQ9IkEiK3crIiwiK2ssTT1iK3crIiwiK187cmV0dXJuIk0iK00rVCsiIDAgMSwxICIrKGIrIiwiKyhfLWspKStUKyIgMCAwLDEgIitNKyJaIn1mdW5jdGlvbiB2KHQsZSxyKXtyZXR1cm4gdC5yZXBsYWNlKGguc2VnbWVudFJFLGZ1bmN0aW9uKHQpe3ZhciBuPTAsYT10LmNoYXJBdCgwKSxpPWgucGFyYW1Jc1hbYV0sbz1oLnBhcmFtSXNZW2FdLHM9aC5udW1QYXJhbXNbYV07cmV0dXJuIGErdC5zdWJzdHIoMSkucmVwbGFjZShoLnBhcmFtUkUsZnVuY3Rpb24odCl7cmV0dXJuIG4+PXM/dDooaVtuXT90PWUodCk6b1tuXSYmKHQ9cih0KSksbisrLHQpfSl9KX1lLmV4cG9ydHM9e2RyYXc6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtmb3IodmFyIHIgaW4gZS5fc2hhcGVVcHBlckxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLGUuX3NoYXBlTG93ZXJMYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxlLl9wbG90cyl7dmFyIG49ZS5fcGxvdHNbcl0uc2hhcGVsYXllcjtuJiZuLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpfWZvcih2YXIgYT0wO2E8ZS5zaGFwZXMubGVuZ3RoO2ErKyllLnNoYXBlc1thXS52aXNpYmxlJiZwKHQsYSl9LGRyYXdPbmU6cH19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjczNywiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzU1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuLi9jb2xvciI6NTkyLCIuLi9kcmFnZWxlbWVudCI6NjEwLCIuLi9kcmF3aW5nIjo2MTMsIi4vY29uc3RhbnRzIjo2NjksIi4vaGVscGVycyI6NjcyfV0sNjcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksYT10KCIuLi8uLi9saWIiKTtyLnJhbmdlVG9TaGFwZVBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiJsb2ciPT09dC50eXBlP3QucjJkOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sci5zaGFwZVBvc2l0aW9uVG9SYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4ibG9nIj09PXQudHlwZT90LmQycjpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHIuZGVjb2RlRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSYmKGU9ZS5yZXBsYWNlKCJfIiwiICIpKSx0KGUpfX0sci5lbmNvZGVEYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKS5yZXBsYWNlKCIgIiwiXyIpfX0sci5leHRyYWN0UGF0aENvb3Jkcz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiB0Lm1hdGNoKG4uc2VnbWVudFJFKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPWVbdC5jaGFyQXQoMCldLmRyYXduO2lmKHZvaWQgMCE9PWkpe3ZhciBvPXQuc3Vic3RyKDEpLm1hdGNoKG4ucGFyYW1SRSk7IW98fG8ubGVuZ3RoPGl8fHIucHVzaChhLmNsZWFuTnVtYmVyKG9baV0pKX19KSxyfSxyLmdldERhdGFUb1BpeGVsPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYSxpPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZSl7dmFyIG89ci5zaGFwZVBvc2l0aW9uVG9SYW5nZShlKTthPWZ1bmN0aW9uKHQpe3JldHVybiBlLl9vZmZzZXQrZS5yMnAobyh0LCEwKSl9LCJkYXRlIj09PWUudHlwZSYmKGE9ci5kZWNvZGVEYXRlKGEpKX1lbHNlIGE9bj9mdW5jdGlvbih0KXtyZXR1cm4gaS50K2kuaCooMS10KX06ZnVuY3Rpb24odCl7cmV0dXJuIGkubCtpLncqdH07cmV0dXJuIGF9LHIuZ2V0UGl4ZWxUb0RhdGE9ZnVuY3Rpb24odCxlLG4pe3ZhciBhLGk9dC5fZnVsbExheW91dC5fc2l6ZTtpZihlKXt2YXIgbz1yLnJhbmdlVG9TaGFwZVBvc2l0aW9uKGUpO2E9ZnVuY3Rpb24odCl7cmV0dXJuIG8oZS5wMnIodC1lLl9vZmZzZXQpKX19ZWxzZSBhPW4/ZnVuY3Rpb24odCl7cmV0dXJuIDEtKHQtaS50KS9pLmh9OmZ1bmN0aW9uKHQpe3JldHVybih0LWkubCkvaS53fTtyZXR1cm4gYX0sci5yb3VuZFBvc2l0aW9uRm9yU2hhcnBTdHJva2VSZW5kZXJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcj0xPT09TWF0aC5yb3VuZChlJTIpLG49TWF0aC5yb3VuZCh0KTtyZXR1cm4gcj9uKy41Om59fSx7Ii4uLy4uL2xpYiI6NzE3LCIuL2NvbnN0YW50cyI6NjY5fV0sNjczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJzaGFwZXMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoInNoYXBlcyIpLGNhbGNBdXRvcmFuZ2U6dCgiLi9jYWxjX2F1dG9yYW5nZSIpLGRyYXc6bi5kcmF3LGRyYXdPbmU6bi5kcmF3T25lfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIjo3NzUsIi4vYXR0cmlidXRlcyI6NjY3LCIuL2NhbGNfYXV0b3JhbmdlIjo2NjgsIi4vZGVmYXVsdHMiOjY3MCwiLi9kcmF3Ijo2NzF9XSw2NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZERlZXBBbGwsbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwscz10KCIuLi8uLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGM9dCgiLi9jb25zdGFudHMiKSx1PWwoInN0ZXAiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlc3R5bGUiLCJyZWxheW91dCIsImFuaW1hdGUiLCJ1cGRhdGUiLCJza2lwIl0sZGZsdDoicmVzdHlsZSJ9LGFyZ3M6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyJ9LHZhbHVlOnt2YWxUeXBlOiJzdHJpbmcifSxleGVjdXRlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0pO2UuZXhwb3J0cz1vKGwoInNsaWRlciIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGFjdGl2ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9LHN0ZXBzOnUsbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MH0scGFkOmkoYSh7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx7fSx7dDp7ZGZsdDoyMH19KSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MH0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9LHRyYW5zaXRpb246e2R1cmF0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTUwfSxlYXNpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpzLnRyYW5zaXRpb24uZWFzaW5nLnZhbHVlcyxkZmx0OiJjdWJpYy1pbi1vdXQifX0sY3VycmVudHZhbHVlOnt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0In0sb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTB9LHByZWZpeDp7dmFsVHlwZToic3RyaW5nIn0sc3VmZml4Ont2YWxUeXBlOiJzdHJpbmcifSxmb250Om4oe30pfSxmb250Om4oe30pLGFjdGl2ZWJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMuZ3JpcEJnQWN0aXZlQ29sb3J9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMucmFpbEJnQ29sb3J9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnJhaWxCb3JkZXJDb2xvcn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDpjLnJhaWxCb3JkZXJXaWR0aH0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OmMudGlja0xlbmd0aH0sdGlja2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnRpY2tDb2xvcn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sbWlub3J0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Yy5taW5vclRpY2tMZW5ndGh9fSksImFycmF5ZHJhdyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzQ4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3NTUsIi4uLy4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo3NjAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NzkxLCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyI6ODI1LCIuL2NvbnN0YW50cyI6Njc1fV0sNjc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToic2xpZGVycyIsY29udGFpbmVyQ2xhc3NOYW1lOiJzbGlkZXItY29udGFpbmVyIixncm91cENsYXNzTmFtZToic2xpZGVyLWdyb3VwIixpbnB1dEFyZWFDbGFzczoic2xpZGVyLWlucHV0LWFyZWEiLHJhaWxSZWN0Q2xhc3M6InNsaWRlci1yYWlsLXJlY3QiLHJhaWxUb3VjaFJlY3RDbGFzczoic2xpZGVyLXJhaWwtdG91Y2gtcmVjdCIsZ3JpcFJlY3RDbGFzczoic2xpZGVyLWdyaXAtcmVjdCIsdGlja1JlY3RDbGFzczoic2xpZGVyLXRpY2stcmVjdCIsaW5wdXRQcm94eUNsYXNzOiJzbGlkZXItaW5wdXQtcHJveHkiLGxhYmVsc0NsYXNzOiJzbGlkZXItbGFiZWxzIixsYWJlbEdyb3VwQ2xhc3M6InNsaWRlci1sYWJlbC1ncm91cCIsbGFiZWxDbGFzczoic2xpZGVyLWxhYmVsIixjdXJyZW50VmFsdWVDbGFzczoic2xpZGVyLWN1cnJlbnQtdmFsdWUiLHJhaWxIZWlnaHQ6NSxtZW51SW5kZXhBdHRyTmFtZToic2xpZGVyLWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoic2xpZGVyLSIsbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjQwLGFycm93T2Zmc2V0WDo0LHJhaWxSYWRpdXM6MixyYWlsV2lkdGg6NSxyYWlsQm9yZGVyOjQscmFpbEJvcmRlcldpZHRoOjEscmFpbEJvcmRlckNvbG9yOiIjYmVjOGQ5IixyYWlsQmdDb2xvcjoiI2Y4ZmFmYyIscmFpbEluc2V0Ojgsc3RlcEluc2V0OjEwLGdyaXBSYWRpdXM6MTAsZ3JpcFdpZHRoOjIwLGdyaXBIZWlnaHQ6MjAsZ3JpcEJvcmRlcjoyMCxncmlwQm9yZGVyV2lkdGg6MSxncmlwQm9yZGVyQ29sb3I6IiNiZWM4ZDkiLGdyaXBCZ0NvbG9yOiIjZjZmOGZhIixncmlwQmdBY3RpdmVDb2xvcjoiI2RiZGRlMCIsbGFiZWxQYWRkaW5nOjgsbGFiZWxPZmZzZXQ6MCx0aWNrV2lkdGg6MSx0aWNrQ29sb3I6IiMzMzMiLHRpY2tPZmZzZXQ6MjUsdGlja0xlbmd0aDo3LG1pbm9yVGlja09mZnNldDoyNSxtaW5vclRpY2tDb2xvcjoiIzMzMyIsbWlub3JUaWNrTGVuZ3RoOjQsY3VycmVudFZhbHVlUGFkZGluZzo4LGN1cnJlbnRWYWx1ZUluc2V0OjB9fSx7fV0sNjc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4vY29uc3RhbnRzIikubmFtZSxzPWkuc3RlcHM7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gbyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWZvcih2YXIgcz1hKHQsZSx7bmFtZToic3RlcHMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSksbD0wLHU9MDt1PHMubGVuZ3RoO3UrKylzW3VdLnZpc2libGUmJmwrKztpZihsPDI/ZS52aXNpYmxlPSExOm8oInZpc2libGUiKSl7ZS5fc3RlcENvdW50PWw7dmFyIGg9ZS5fdmlzaWJsZVN0ZXBzPW4uZmlsdGVyVmlzaWJsZShzKTsoc1tvKCJhY3RpdmUiKV18fHt9KS52aXNpYmxlfHwoZS5hY3RpdmU9aFswXS5faW5kZXgpLG8oIngiKSxvKCJ5Iiksbi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksbygieGFuY2hvciIpLG8oInlhbmNob3IiKSxvKCJsZW4iKSxvKCJsZW5tb2RlIiksbygicGFkLnQiKSxvKCJwYWQuciIpLG8oInBhZC5iIiksbygicGFkLmwiKSxuLmNvZXJjZUZvbnQobywiZm9udCIsci5mb250KSxvKCJjdXJyZW50dmFsdWUudmlzaWJsZSIpJiYobygiY3VycmVudHZhbHVlLnhhbmNob3IiKSxvKCJjdXJyZW50dmFsdWUucHJlZml4IiksbygiY3VycmVudHZhbHVlLnN1ZmZpeCIpLG8oImN1cnJlbnR2YWx1ZS5vZmZzZXQiKSxuLmNvZXJjZUZvbnQobywiY3VycmVudHZhbHVlLmZvbnQiLGUuZm9udCkpLG8oInRyYW5zaXRpb24uZHVyYXRpb24iKSxvKCJ0cmFuc2l0aW9uLmVhc2luZyIpLG8oImJnY29sb3IiKSxvKCJhY3RpdmViZ2NvbG9yIiksbygiYm9yZGVyY29sb3IiKSxvKCJib3JkZXJ3aWR0aCIpLG8oInRpY2tsZW4iKSxvKCJ0aWNrd2lkdGgiKSxvKCJ0aWNrY29sb3IiKSxvKCJtaW5vcnRpY2tsZW4iKX19ZnVuY3Rpb24gYyh0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixhKX1pZigic2tpcCI9PT10Lm1ldGhvZHx8QXJyYXkuaXNBcnJheSh0LmFyZ3MpP3IoInZpc2libGUiKTplLnZpc2libGU9ITEpe3IoIm1ldGhvZCIpLHIoImFyZ3MiKTt2YXIgYT1yKCJsYWJlbCIsInN0ZXAtIitlLl9pbmRleCk7cigidmFsdWUiLGEpLHIoImV4ZWN1dGUiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YSh0LGUse25hbWU6byxoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NjEsIi4vYXR0cmlidXRlcyI6Njc0LCIuL2NvbnN0YW50cyI6Njc1fV0sNjc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLGk9dCgiLi4vY29sb3IiKSxvPXQoIi4uL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikuYXJyYXlFZGl0b3IsdT10KCIuL2NvbnN0YW50cyIpLGg9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLGY9aC5MSU5FX1NQQUNJTkcscD1oLkZST01fVEwsZD1oLkZST01fQlI7ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdS5hdXRvTWFyZ2luSWRSb290K3QuX2luZGV4fWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQuX2luZGV4fWZ1bmN0aW9uIG0odCxlKXt2YXIgcj1vLnRlc3Rlci5zZWxlY3RBbGwoImcuIit1LmxhYmVsR3JvdXBDbGFzcykuZGF0YShlLl92aXNpYmxlU3RlcHMpO3IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHUubGFiZWxHcm91cENsYXNzLCEwKTt2YXIgaT0wLGM9MDtyLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9YihuLnNlbGVjdCh0aGlzKSx7c3RlcDp0fSxlKS5ub2RlKCk7aWYocil7dmFyIGE9by5iQm94KHIpO2M9TWF0aC5tYXgoYyxhLmhlaWdodCksaT1NYXRoLm1heChpLGEud2lkdGgpfX0pLHIucmVtb3ZlKCk7dmFyIGg9ZS5fZGltcz17fTtoLmlucHV0QXJlYVdpZHRoPU1hdGgubWF4KHUucmFpbFdpZHRoLHUuZ3JpcEhlaWdodCk7dmFyIGY9dC5fZnVsbExheW91dC5fc2l6ZTtoLmx4PWYubCtmLncqZS54LGgubHk9Zi50K2YuaCooMS1lLnkpLCJmcmFjdGlvbiI9PT1lLmxlbm1vZGU/aC5vdXRlckxlbmd0aD1NYXRoLnJvdW5kKGYudyplLmxlbik6aC5vdXRlckxlbmd0aD1lLmxlbixoLmlucHV0QXJlYVN0YXJ0PTAsaC5pbnB1dEFyZWFMZW5ndGg9TWF0aC5yb3VuZChoLm91dGVyTGVuZ3RoLWUucGFkLmwtZS5wYWQucik7dmFyIHY9KGguaW5wdXRBcmVhTGVuZ3RoLTIqdS5zdGVwSW5zZXQpLyhlLl9zdGVwQ291bnQtMSksbT1pK3UubGFiZWxQYWRkaW5nO2lmKGgubGFiZWxTdHJpZGU9TWF0aC5tYXgoMSxNYXRoLmNlaWwobS92KSksaC5sYWJlbEhlaWdodD1jLGguY3VycmVudFZhbHVlTWF4V2lkdGg9MCxoLmN1cnJlbnRWYWx1ZUhlaWdodD0wLGguY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9MCxoLmN1cnJlbnRWYWx1ZU1heExpbmVzPTEsZS5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIHg9by50ZXN0ZXIuYXBwZW5kKCJnIik7ci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXkoeCxlLHQubGFiZWwpLG49ci5ub2RlKCkmJm8uYkJveChyLm5vZGUoKSl8fHt3aWR0aDowLGhlaWdodDowfSxhPWwubGluZUNvdW50KHIpO2guY3VycmVudFZhbHVlTWF4V2lkdGg9TWF0aC5tYXgoaC5jdXJyZW50VmFsdWVNYXhXaWR0aCxNYXRoLmNlaWwobi53aWR0aCkpLGguY3VycmVudFZhbHVlSGVpZ2h0PU1hdGgubWF4KGguY3VycmVudFZhbHVlSGVpZ2h0LE1hdGguY2VpbChuLmhlaWdodCkpLGguY3VycmVudFZhbHVlTWF4TGluZXM9TWF0aC5tYXgoaC5jdXJyZW50VmFsdWVNYXhMaW5lcyxhKX0pLGguY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9aC5jdXJyZW50VmFsdWVIZWlnaHQrZS5jdXJyZW50dmFsdWUub2Zmc2V0LHgucmVtb3ZlKCl9aC5oZWlnaHQ9aC5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCt1LnRpY2tPZmZzZXQrZS50aWNrbGVuK3UubGFiZWxPZmZzZXQraC5sYWJlbEhlaWdodCtlLnBhZC50K2UucGFkLmI7dmFyIF89ImxlZnQiO3MuaXNSaWdodEFuY2hvcihlKSYmKGgubHgtPWgub3V0ZXJMZW5ndGgsXz0icmlnaHQiKSxzLmlzQ2VudGVyQW5jaG9yKGUpJiYoaC5seC09aC5vdXRlckxlbmd0aC8yLF89ImNlbnRlciIpO3ZhciB3PSJ0b3AiO3MuaXNCb3R0b21BbmNob3IoZSkmJihoLmx5LT1oLmhlaWdodCx3PSJib3R0b20iKSxzLmlzTWlkZGxlQW5jaG9yKGUpJiYoaC5seS09aC5oZWlnaHQvMix3PSJtaWRkbGUiKSxoLm91dGVyTGVuZ3RoPU1hdGguY2VpbChoLm91dGVyTGVuZ3RoKSxoLmhlaWdodD1NYXRoLmNlaWwoaC5oZWlnaHQpLGgubHg9TWF0aC5yb3VuZChoLmx4KSxoLmx5PU1hdGgucm91bmQoaC5seSk7dmFyIGs9e3k6ZS55LGI6aC5oZWlnaHQqZFt3XSx0OmguaGVpZ2h0KnBbd119OyJmcmFjdGlvbiI9PT1lLmxlbm1vZGU/KGsubD0wLGsueGw9ZS54LWUubGVuKnBbX10say5yPTAsay54cj1lLngrZS5sZW4qZFtfXSk6KGsueD1lLngsay5sPWgub3V0ZXJMZW5ndGgqcFtfXSxrLnI9aC5vdXRlckxlbmd0aCpkW19dKSxhLmF1dG9NYXJnaW4odCxnKGUpLGspfWZ1bmN0aW9uIHkodCxlLHIpe2lmKGUuY3VycmVudHZhbHVlLnZpc2libGUpe3ZhciBuLGEsaT1lLl9kaW1zO3N3aXRjaChlLmN1cnJlbnR2YWx1ZS54YW5jaG9yKXtjYXNlInJpZ2h0IjpuPWkuaW5wdXRBcmVhTGVuZ3RoLXUuY3VycmVudFZhbHVlSW5zZXQtaS5jdXJyZW50VmFsdWVNYXhXaWR0aCxhPSJsZWZ0IjticmVhaztjYXNlImNlbnRlciI6bj0uNSppLmlucHV0QXJlYUxlbmd0aCxhPSJtaWRkbGUiO2JyZWFrO2RlZmF1bHQ6bj11LmN1cnJlbnRWYWx1ZUluc2V0LGE9ImxlZnQifXZhciBjPXMuZW5zdXJlU2luZ2xlKHQsInRleHQiLHUubGFiZWxDbGFzcyxmdW5jdGlvbih0KXt0LmNsYXNzZWQoInVzZXItc2VsZWN0LW5vbmUiLCEwKS5hdHRyKHsidGV4dC1hbmNob3IiOmEsImRhdGEtbm90ZXgiOjF9KX0pLGg9ZS5jdXJyZW50dmFsdWUucHJlZml4P2UuY3VycmVudHZhbHVlLnByZWZpeDoiIjtpZigic3RyaW5nIj09dHlwZW9mIHIpaCs9cjtlbHNle3ZhciBwPWUuc3RlcHNbZS5hY3RpdmVdLmxhYmVsLGQ9ZS5fZ2QuX2Z1bGxMYXlvdXQuX21ldGE7ZCYmKHA9cy50ZW1wbGF0ZVN0cmluZyhwLGQpKSxoKz1wfWUuY3VycmVudHZhbHVlLnN1ZmZpeCYmKGgrPWUuY3VycmVudHZhbHVlLnN1ZmZpeCksYy5jYWxsKG8uZm9udCxlLmN1cnJlbnR2YWx1ZS5mb250KS50ZXh0KGgpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsZS5fZ2QpO3ZhciBnPWwubGluZUNvdW50KGMpLHY9KGkuY3VycmVudFZhbHVlTWF4TGluZXMrMS1nKSplLmN1cnJlbnR2YWx1ZS5mb250LnNpemUqZjtyZXR1cm4gbC5wb3NpdGlvblRleHQoYyxuLHYpLGN9fWZ1bmN0aW9uIHgodCxlLHIpe3MuZW5zdXJlU2luZ2xlKHQsInJlY3QiLHUuZ3JpcFJlY3RDbGFzcyxmdW5jdGlvbihuKXtuLmNhbGwoVCxlLHQscikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KS5hdHRyKHt3aWR0aDp1LmdyaXBXaWR0aCxoZWlnaHQ6dS5ncmlwSGVpZ2h0LHJ4OnUuZ3JpcFJhZGl1cyxyeTp1LmdyaXBSYWRpdXN9KS5jYWxsKGkuc3Ryb2tlLHIuYm9yZGVyY29sb3IpLmNhbGwoaS5maWxsLHIuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsci5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj1zLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0Iix1LmxhYmVsQ2xhc3MsZnVuY3Rpb24odCl7dC5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuYXR0cih7InRleHQtYW5jaG9yIjoibWlkZGxlIiwiZGF0YS1ub3RleCI6MX0pfSksYT1lLnN0ZXAubGFiZWwsaT1yLl9nZC5fZnVsbExheW91dC5fbWV0YTtyZXR1cm4gaSYmKGE9cy50ZW1wbGF0ZVN0cmluZyhhLGkpKSxuLmNhbGwoby5mb250LHIuZm9udCkudGV4dChhKS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHIuX2dkKSxufWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1zLmVuc3VyZVNpbmdsZSh0LCJnIix1LmxhYmVsc0NsYXNzKSxhPWUuX2RpbXMsaT1yLnNlbGVjdEFsbCgiZy4iK3UubGFiZWxHcm91cENsYXNzKS5kYXRhKGEubGFiZWxTdGVwcyk7aS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodS5sYWJlbEdyb3VwQ2xhc3MsITApLGkuZXhpdCgpLnJlbW92ZSgpLGkuZWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtyLmNhbGwoYix0LGUpLG8uc2V0VHJhbnNsYXRlKHIsUyhlLHQuZnJhY3Rpb24pLHUudGlja09mZnNldCtlLnRpY2tsZW4rZS5mb250LnNpemUqZit1LmxhYmVsT2Zmc2V0K2EuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfSl9ZnVuY3Rpb24gdyh0LGUscixuLGEpe3ZhciBpPU1hdGgucm91bmQobiooci5fc3RlcENvdW50LTEpKSxvPXIuX3Zpc2libGVTdGVwc1tpXS5faW5kZXg7byE9PXIuYWN0aXZlJiZrKHQsZSxyLG8sITAsYSl9ZnVuY3Rpb24gayh0LGUscixuLGksbyl7dmFyIHM9ci5hY3RpdmU7ci5hY3RpdmU9bixjKHQubGF5b3V0LHUubmFtZSxyKS5hcHBseVVwZGF0ZSgiYWN0aXZlIixuKTt2YXIgbD1yLnN0ZXBzW3IuYWN0aXZlXTtlLmNhbGwoQSxyLG8pLGUuY2FsbCh5LHIpLHQuZW1pdCgicGxvdGx5X3NsaWRlcmNoYW5nZSIse3NsaWRlcjpyLHN0ZXA6ci5zdGVwc1tyLmFjdGl2ZV0saW50ZXJhY3Rpb246aSxwcmV2aW91c0FjdGl2ZTpzfSksbCYmbC5tZXRob2QmJmkmJihlLl9uZXh0TWV0aG9kPyhlLl9uZXh0TWV0aG9kLnN0ZXA9bCxlLl9uZXh0TWV0aG9kLmRvQ2FsbGJhY2s9aSxlLl9uZXh0TWV0aG9kLmRvVHJhbnNpdGlvbj1vKTooZS5fbmV4dE1ldGhvZD17c3RlcDpsLGRvQ2FsbGJhY2s6aSxkb1RyYW5zaXRpb246b30sZS5fbmV4dE1ldGhvZFJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7dmFyIHI9ZS5fbmV4dE1ldGhvZC5zdGVwO3IubWV0aG9kJiYoci5leGVjdXRlJiZhLmV4ZWN1dGVBUElDb21tYW5kKHQsci5tZXRob2Qsci5hcmdzKSxlLl9uZXh0TWV0aG9kPW51bGwsZS5fbmV4dE1ldGhvZFJhZj1udWxsKX0pKSl9ZnVuY3Rpb24gVCh0LGUscil7dmFyIGE9ci5ub2RlKCksbz1uLnNlbGVjdChlKTtmdW5jdGlvbiBzKCl7cmV0dXJuIHIuZGF0YSgpWzBdfXQub24oIm1vdXNlZG93biIsZnVuY3Rpb24oKXt2YXIgdD1zKCk7ZS5lbWl0KCJwbG90bHlfc2xpZGVyc3RhcnQiLHtzbGlkZXI6dH0pO3ZhciBsPXIuc2VsZWN0KCIuIit1LmdyaXBSZWN0Q2xhc3MpO24uZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksbi5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLGwuY2FsbChpLmZpbGwsdC5hY3RpdmViZ2NvbG9yKTt2YXIgYz1FKHQsbi5tb3VzZShhKVswXSk7dyhlLHIsdCxjLCEwKSx0Ll9kcmFnZ2luZz0hMCxvLm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKCl7dmFyIHQ9cygpLGk9RSh0LG4ubW91c2UoYSlbMF0pO3coZSxyLHQsaSwhMSl9KSxvLm9uKCJtb3VzZXVwIixmdW5jdGlvbigpe3ZhciB0PXMoKTt0Ll9kcmFnZ2luZz0hMSxsLmNhbGwoaS5maWxsLHQuYmdjb2xvciksby5vbigibW91c2V1cCIsbnVsbCksby5vbigibW91c2Vtb3ZlIixudWxsKSxlLmVtaXQoInBsb3RseV9zbGlkZXJlbmQiLHtzbGlkZXI6dCxzdGVwOnQuc3RlcHNbdC5hY3RpdmVdfSl9KX0pfWZ1bmN0aW9uIE0odCxlKXt2YXIgcj10LnNlbGVjdEFsbCgicmVjdC4iK3UudGlja1JlY3RDbGFzcykuZGF0YShlLl92aXNpYmxlU3RlcHMpLGE9ZS5fZGltcztyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCh1LnRpY2tSZWN0Q2xhc3MsITApLHIuZXhpdCgpLnJlbW92ZSgpLHIuYXR0cih7d2lkdGg6ZS50aWNrd2lkdGgrInB4Iiwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KSxyLmVhY2goZnVuY3Rpb24odCxyKXt2YXIgcz1yJWEubGFiZWxTdHJpZGU9PTAsbD1uLnNlbGVjdCh0aGlzKTtsLmF0dHIoe2hlaWdodDpzP2UudGlja2xlbjplLm1pbm9ydGlja2xlbn0pLmNhbGwoaS5maWxsLGUudGlja2NvbG9yKSxvLnNldFRyYW5zbGF0ZShsLFMoZSxyLyhlLl9zdGVwQ291bnQtMSkpLS41KmUudGlja3dpZHRoLChzP3UudGlja09mZnNldDp1Lm1pbm9yVGlja09mZnNldCkrYS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9KX1mdW5jdGlvbiBBKHQsZSxyKXtmb3IodmFyIG49dC5zZWxlY3QoInJlY3QuIit1LmdyaXBSZWN0Q2xhc3MpLGE9MCxpPTA7aTxlLl9zdGVwQ291bnQ7aSsrKWlmKGUuX3Zpc2libGVTdGVwc1tpXS5faW5kZXg9PT1lLmFjdGl2ZSl7YT1pO2JyZWFrfXZhciBvPVMoZSxhLyhlLl9zdGVwQ291bnQtMSkpO2lmKCFlLl9pbnZva2luZ0NvbW1hbmQpe3ZhciBzPW47ciYmZS50cmFuc2l0aW9uLmR1cmF0aW9uPjAmJihzPXMudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUudHJhbnNpdGlvbi5kdXJhdGlvbikuZWFzZShlLnRyYW5zaXRpb24uZWFzaW5nKSkscy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoby0uNSp1LmdyaXBXaWR0aCkrIiwiK2UuX2RpbXMuY3VycmVudFZhbHVlVG90YWxIZWlnaHQrIikiKX19ZnVuY3Rpb24gUyh0LGUpe3ZhciByPXQuX2RpbXM7cmV0dXJuIHIuaW5wdXRBcmVhU3RhcnQrdS5zdGVwSW5zZXQrKHIuaW5wdXRBcmVhTGVuZ3RoLTIqdS5zdGVwSW5zZXQpKk1hdGgubWluKDEsTWF0aC5tYXgoMCxlKSl9ZnVuY3Rpb24gRSh0LGUpe3ZhciByPXQuX2RpbXM7cmV0dXJuIE1hdGgubWluKDEsTWF0aC5tYXgoMCwoZS11LnN0ZXBJbnNldC1yLmlucHV0QXJlYVN0YXJ0KS8oci5pbnB1dEFyZWFMZW5ndGgtMip1LnN0ZXBJbnNldC0yKnIuaW5wdXRBcmVhU3RhcnQpKSl9ZnVuY3Rpb24gTCh0LGUscil7dmFyIG49ci5fZGltcyxhPXMuZW5zdXJlU2luZ2xlKHQsInJlY3QiLHUucmFpbFRvdWNoUmVjdENsYXNzLGZ1bmN0aW9uKG4pe24uY2FsbChULGUsdCxyKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pO2EuYXR0cih7d2lkdGg6bi5pbnB1dEFyZWFMZW5ndGgsaGVpZ2h0Ok1hdGgubWF4KG4uaW5wdXRBcmVhV2lkdGgsdS50aWNrT2Zmc2V0K3IudGlja2xlbituLmxhYmVsSGVpZ2h0KX0pLmNhbGwoaS5maWxsLHIuYmdjb2xvcikuYXR0cigib3BhY2l0eSIsMCksby5zZXRUcmFuc2xhdGUoYSwwLG4uY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWZ1bmN0aW9uIEModCxlKXt2YXIgcj1lLl9kaW1zLG49ci5pbnB1dEFyZWFMZW5ndGgtMip1LnJhaWxJbnNldCxhPXMuZW5zdXJlU2luZ2xlKHQsInJlY3QiLHUucmFpbFJlY3RDbGFzcyk7YS5hdHRyKHt3aWR0aDpuLGhlaWdodDp1LnJhaWxXaWR0aCxyeDp1LnJhaWxSYWRpdXMscnk6dS5yYWlsUmFkaXVzLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pLmNhbGwoaS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChpLmZpbGwsZS5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpLG8uc2V0VHJhbnNsYXRlKGEsdS5yYWlsSW5zZXQsLjUqKHIuaW5wdXRBcmVhV2lkdGgtdS5yYWlsV2lkdGgpK3IuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dFt1Lm5hbWVdLG49W10sYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgaT1yW2FdO2kudmlzaWJsZSYmKGkuX2dkPWUsbi5wdXNoKGkpKX1yZXR1cm4gbn0oZSx0KSxpPWUuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIit1LmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7ZnVuY3Rpb24gcyhlKXtlLl9jb21tYW5kT2JzZXJ2ZXImJihlLl9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKCksZGVsZXRlIGUuX2NvbW1hbmRPYnNlcnZlciksYS5hdXRvTWFyZ2luKHQsZyhlKSl9aWYoaS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodS5jb250YWluZXJDbGFzc05hbWUsITApLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKSxpLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLiIrdS5ncm91cENsYXNzTmFtZSkuZWFjaChzKX0pLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCl7dmFyIGw9aS5zZWxlY3RBbGwoImcuIit1Lmdyb3VwQ2xhc3NOYW1lKS5kYXRhKHIsdik7bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodS5ncm91cENsYXNzTmFtZSwhMCksbC5leGl0KCkuZWFjaChzKS5yZW1vdmUoKTtmb3IodmFyIGM9MDtjPHIubGVuZ3RoO2MrKyl7dmFyIGg9cltjXTttKHQsaCl9bC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpOyFmdW5jdGlvbih0KXt2YXIgZT10Ll9kaW1zO2UubGFiZWxTdGVwcz1bXTtmb3IodmFyIHI9dC5fc3RlcENvdW50LG49MDtuPHI7bis9ZS5sYWJlbFN0cmlkZSllLmxhYmVsU3RlcHMucHVzaCh7ZnJhY3Rpb246bi8oci0xKSxzdGVwOnQuX3Zpc2libGVTdGVwc1tuXX0pfShlKSxhLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5fdmlzaWJsZVN0ZXBzLGZ1bmN0aW9uKGUpe3ZhciBuPXIuZGF0YSgpWzBdO24uYWN0aXZlIT09ZS5pbmRleCYmKG4uX2RyYWdnaW5nfHxrKHQscixuLGUuaW5kZXgsITEsITApKX0pLGZ1bmN0aW9uKHQsZSxyKXsoci5zdGVwc1tyLmFjdGl2ZV18fHt9KS52aXNpYmxlfHwoci5hY3RpdmU9ci5fdmlzaWJsZVN0ZXBzWzBdLl9pbmRleCk7ZS5jYWxsKHkscikuY2FsbChDLHIpLmNhbGwoXyxyKS5jYWxsKE0scikuY2FsbChMLHQscikuY2FsbCh4LHQscik7dmFyIG49ci5fZGltcztvLnNldFRyYW5zbGF0ZShlLG4ubHgrci5wYWQubCxuLmx5K3IucGFkLnQpLGUuY2FsbChBLHIsITEpLGUuY2FsbCh5LHIpfSh0LG4uc2VsZWN0KHRoaXMpLGUpfSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2ODYsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzU1LCIuLi8uLi9wbG90cy9wbG90cyI6ODI2LCIuLi9jb2xvciI6NTkyLCIuLi9kcmF3aW5nIjo2MTMsIi4vY29uc3RhbnRzIjo2NzUsZDM6MTY1fV0sNjc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6bi5uYW1lLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4vYXR0cmlidXRlcyI6Njc0LCIuL2NvbnN0YW50cyI6Njc1LCIuL2RlZmF1bHRzIjo2NzYsIi4vZHJhdyI6Njc3fV0sNjc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uL2RyYXdpbmciKSxjPXQoIi4uL2NvbG9yIiksdT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKSxmPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5PUFBPU0lURV9TSURFLHA9LyBbWFldWzAtOV0qIC87ZS5leHBvcnRzPXtkcmF3OmZ1bmN0aW9uKHQsZSxyKXt2YXIgZCxnPXIucHJvcENvbnRhaW5lcix2PXIucHJvcE5hbWUsbT1yLnBsYWNlaG9sZGVyLHk9ci50cmFjZUluZGV4LHg9ci5hdm9pZHx8e30sYj1yLmF0dHJpYnV0ZXMsXz1yLnRyYW5zZm9ybSx3PXIuY29udGFpbmVyR3JvdXAsaz10Ll9mdWxsTGF5b3V0LFQ9MSxNPSExLEE9Zy50aXRsZSxTPShBJiZBLnRleHQ/QS50ZXh0OiIiKS50cmltKCksRT1BJiZBLmZvbnQ/QS5mb250Ont9LEw9RS5mYW1pbHksQz1FLnNpemUsUD1FLmNvbG9yOyJ0aXRsZS50ZXh0Ij09PXY/ZD0idGl0bGVUZXh0IjotMSE9PXYuaW5kZXhPZigiYXhpcyIpP2Q9ImF4aXNUaXRsZVRleHQiOnYuaW5kZXhPZighMCkmJihkPSJjb2xvcmJhclRpdGxlVGV4dCIpO3ZhciBPPXQuX2NvbnRleHQuZWRpdHNbZF07IiI9PT1TP1Q9MDpTLnJlcGxhY2UocCwiICUgIik9PT1tLnJlcGxhY2UocCwiICUgIikmJihUPS4yLE09ITAsT3x8KFM9IiIpKSxyLl9tZXRhP1M9cy50ZW1wbGF0ZVN0cmluZyhTLHIuX21ldGEpOmsuX21ldGEmJihTPXMudGVtcGxhdGVTdHJpbmcoUyxrLl9tZXRhKSk7dmFyIHo9U3x8Tzt3fHwodz1zLmVuc3VyZVNpbmdsZShrLl9pbmZvbGF5ZXIsImciLCJnLSIrZSkpO3ZhciBJPXcuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YSh6P1swXTpbXSk7aWYoSS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLEkudGV4dChTKS5hdHRyKCJjbGFzcyIsZSksSS5leGl0KCkucmVtb3ZlKCksIXopcmV0dXJuIHc7ZnVuY3Rpb24gRCh0KXtzLnN5bmNPckFzeW5jKFtSLEZdLHQpfWZ1bmN0aW9uIFIoZSl7dmFyIHI7cmV0dXJuIF8/KHI9IiIsXy5yb3RhdGUmJihyKz0icm90YXRlKCIrW18ucm90YXRlLGIueCxiLnldKyIpIiksXy5vZmZzZXQmJihyKz0idHJhbnNsYXRlKDAsICIrXy5vZmZzZXQrIikiKSk6cj1udWxsLGUuYXR0cigidHJhbnNmb3JtIixyKSxlLnN0eWxlKHsiZm9udC1mYW1pbHkiOkwsImZvbnQtc2l6ZSI6bi5yb3VuZChDLDIpKyJweCIsZmlsbDpjLnJnYihQKSxvcGFjaXR5OlQqYy5vcGFjaXR5KFApLCJmb250LXdlaWdodCI6aS5mb250V2VpZ2h0fSkuYXR0cihiKS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHQpLGkucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBGKHQpe3ZhciBlPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKHgmJnguc2VsZWN0aW9uJiZ4LnNpZGUmJlMpe2UuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgcj1mW3guc2lkZV0saT0ibGVmdCI9PT14LnNpZGV8fCJ0b3AiPT09eC5zaWRlPy0xOjEsbz1hKHgucGFkKT94LnBhZDoyLGM9bC5iQm94KGUubm9kZSgpKSx1PXtsZWZ0OjAsdG9wOjAscmlnaHQ6ay53aWR0aCxib3R0b206ay5oZWlnaHR9LGg9eC5tYXhTaGlmdHx8aSoodVt4LnNpZGVdLWNbeC5zaWRlXSkscD0wO2lmKGg8MClwPWg7ZWxzZXt2YXIgZD14Lm9mZnNldExlZnR8fDAsZz14Lm9mZnNldFRvcHx8MDtjLmxlZnQtPWQsYy5yaWdodC09ZCxjLnRvcC09ZyxjLmJvdHRvbS09Zyx4LnNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bC5iQm94KHRoaXMpO3MuYkJveEludGVyc2VjdChjLHQsbykmJihwPU1hdGgubWF4KHAsaSoodFt4LnNpZGVdLWNbcl0pK28pKX0pLHA9TWF0aC5taW4oaCxwKX1pZihwPjB8fGg8MCl7dmFyIHY9e2xlZnQ6Wy1wLDBdLHJpZ2h0OltwLDBdLHRvcDpbMCwtcF0sYm90dG9tOlswLHBdfVt4LnNpZGVdO2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdisiKSIpfX19cmV0dXJuIEkuY2FsbChEKSxPJiYoUz9JLm9uKCIub3BhY2l0eSIsbnVsbCk6KFQ9MCxNPSEwLEkudGV4dChtKS5vbigibW91c2VvdmVyLm9wYWNpdHkiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGguU0hPV19QTEFDRUhPTERFUikuc3R5bGUoIm9wYWNpdHkiLDEpfSkub24oIm1vdXNlb3V0Lm9wYWNpdHkiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGguSElERV9QTEFDRUhPTERFUikuc3R5bGUoIm9wYWNpdHkiLDApfSkpLEkuY2FsbCh1Lm1ha2VFZGl0YWJsZSx7Z2Q6dH0pLm9uKCJlZGl0IixmdW5jdGlvbihlKXt2b2lkIDAhPT15P28uY2FsbCgiX2d1aVJlc3R5bGUiLHQsdixlLHkpOm8uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHYsZSl9KS5vbigiY2FuY2VsIixmdW5jdGlvbigpe3RoaXMudGV4dCh0aGlzLmF0dHIoImRhdGEtdW5mb3JtYXR0ZWQiKSkuY2FsbChEKX0pLm9uKCJpbnB1dCIsZnVuY3Rpb24odCl7dGhpcy50ZXh0KHR8fCIgIikuY2FsbCh1LnBvc2l0aW9uVGV4dCxiLngsYi55KX0pKSxJLmNsYXNzZWQoImpzLXBsYWNlaG9sZGVyIixNKSx3fX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6Njg2LCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo2OTIsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MSwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNiwiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi4vY29sb3IiOjU5MiwiLi4vZHJhd2luZyI6NjEzLGQzOjE2NSwiZmFzdC1pc251bWVyaWMiOjIyOH1dLDY4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHM9dCgiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxjPWwoImJ1dHRvbiIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlc3R5bGUiLCJyZWxheW91dCIsImFuaW1hdGUiLCJ1cGRhdGUiLCJza2lwIl0sZGZsdDoicmVzdHlsZSJ9LGFyZ3M6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sYXJnczI6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sZXhlY3V0ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH19KTtlLmV4cG9ydHM9byhsKCJ1cGRhdGVtZW51Iix7X2FycmF5QXR0clJlZ2V4cHM6Wy9edXBkYXRlbWVudXNcWygwfFsxLTldWzAtOV0rKVxdXC5idXR0b25zL10sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImRyb3Bkb3duIiwiYnV0dG9ucyJdLGRmbHQ6ImRyb3Bkb3duIn0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwicmlnaHQiLCJ1cCIsImRvd24iXSxkZmx0OiJkb3duIn0sYWN0aXZlOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDowfSxzaG93YWN0aXZlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxidXR0b25zOmMseDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDotLjA1fSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoicmlnaHQifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0OjF9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJ0b3AifSxwYWQ6aShzKHtlZGl0VHlwZToiYXJyYXlkcmF3In0pLHt9KSxmb250Om4oe30pLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuYm9yZGVyTGluZX0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifX0pLCJhcnJheWRyYXciLCJmcm9tLXJvb3QiKX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc0OCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzU1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc5MSwiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiOjgyNSwiLi4vY29sb3IvYXR0cmlidXRlcyI6NTkxfV0sNjgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToidXBkYXRlbWVudXMiLGNvbnRhaW5lckNsYXNzTmFtZToidXBkYXRlbWVudS1jb250YWluZXIiLGhlYWRlckdyb3VwQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlci1ncm91cCIsaGVhZGVyQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlciIsaGVhZGVyQXJyb3dDbGFzc05hbWU6InVwZGF0ZW1lbnUtaGVhZGVyLWFycm93Iixkcm9wZG93bkJ1dHRvbkdyb3VwQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWRyb3Bkb3duLWJ1dHRvbi1ncm91cCIsZHJvcGRvd25CdXR0b25DbGFzc05hbWU6InVwZGF0ZW1lbnUtZHJvcGRvd24tYnV0dG9uIixidXR0b25DbGFzc05hbWU6InVwZGF0ZW1lbnUtYnV0dG9uIixpdGVtUmVjdENsYXNzTmFtZToidXBkYXRlbWVudS1pdGVtLXJlY3QiLGl0ZW1UZXh0Q2xhc3NOYW1lOiJ1cGRhdGVtZW51LWl0ZW0tdGV4dCIsbWVudUluZGV4QXR0ck5hbWU6InVwZGF0ZW1lbnUtYWN0aXZlLWluZGV4IixhdXRvTWFyZ2luSWRSb290OiJ1cGRhdGVtZW51LSIsYmxhbmtIZWFkZXJPcHRzOntsYWJlbDoiICAifSxtaW5XaWR0aDozMCxtaW5IZWlnaHQ6MzAsdGV4dFBhZFg6MjQsYXJyb3dQYWRYOjE2LHJ4OjIscnk6Mix0ZXh0T2Zmc2V0WDoxMix0ZXh0T2Zmc2V0WTozLGFycm93T2Zmc2V0WDo0LGdhcEJ1dHRvbkhlYWRlcjo1LGdhcEJ1dHRvbjoyLGFjdGl2ZUNvbG9yOiIjRjRGQUZGIixob3ZlckNvbG9yOiIjRjRGQUZGIixhcnJvd1N5bWJvbDp7bGVmdDoiXHUyNWM0IixyaWdodDoiXHUyNWJhIix1cDoiXHUyNWIyIixkb3duOiJcdTI1YmMifX19LHt9XSw2ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxpPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi9jb25zdGFudHMiKS5uYW1lLHM9aS5idXR0b25zO2Z1bmN0aW9uIGwodCxlLHIpe2Z1bmN0aW9uIG8ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1vKCJ2aXNpYmxlIixhKHQsZSx7bmFtZToiYnV0dG9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOmN9KS5sZW5ndGg+MCkmJihvKCJhY3RpdmUiKSxvKCJkaXJlY3Rpb24iKSxvKCJ0eXBlIiksbygic2hvd2FjdGl2ZSIpLG8oIngiKSxvKCJ5Iiksbi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksbygieGFuY2hvciIpLG8oInlhbmNob3IiKSxvKCJwYWQudCIpLG8oInBhZC5yIiksbygicGFkLmIiKSxvKCJwYWQubCIpLG4uY29lcmNlRm9udChvLCJmb250IixyLmZvbnQpLG8oImJnY29sb3IiLHIucGFwZXJfYmdjb2xvciksbygiYm9yZGVyY29sb3IiKSxvKCJib3JkZXJ3aWR0aCIpKX1mdW5jdGlvbiBjKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGEpfXIoInZpc2libGUiLCJza2lwIj09PXQubWV0aG9kfHxBcnJheS5pc0FycmF5KHQuYXJncykpJiYocigibWV0aG9kIikscigiYXJncyIpLHIoImFyZ3MyIikscigibGFiZWwiKSxyKCJleGVjdXRlIikpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2EodCxlLHtuYW1lOm8saGFuZGxlSXRlbURlZmF1bHRzOmx9KX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzYxLCIuL2F0dHJpYnV0ZXMiOjY4MCwiLi9jb25zdGFudHMiOjY4MX1dLDY4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxpPXQoIi4uL2NvbG9yIiksbz10KCIuLi9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLHU9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyxoPXQoIi4vY29uc3RhbnRzIiksZj10KCIuL3Njcm9sbGJveCIpO2Z1bmN0aW9uIHAodCl7cmV0dXJuIHQuX2luZGV4fWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4rdC5hdHRyKGgubWVudUluZGV4QXR0ck5hbWUpPT09ZS5faW5kZXh9ZnVuY3Rpb24gZyh0LGUscixuLGEsaSxvLHMpe2UuYWN0aXZlPW8sYyh0LmxheW91dCxoLm5hbWUsZSkuYXBwbHlVcGRhdGUoImFjdGl2ZSIsbyksImJ1dHRvbnMiPT09ZS50eXBlP20odCxuLG51bGwsbnVsbCxlKToiZHJvcGRvd24iPT09ZS50eXBlJiYoYS5hdHRyKGgubWVudUluZGV4QXR0ck5hbWUsIi0xIiksdih0LG4sYSxpLGUpLHN8fG0odCxuLGEsaSxlKSl9ZnVuY3Rpb24gdih0LGUscixuLGEpe3ZhciBpPXMuZW5zdXJlU2luZ2xlKGUsImciLGguaGVhZGVyQ2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSxsPWEuX2RpbXMsYz1hLmFjdGl2ZSx1PWEuYnV0dG9uc1tjXXx8aC5ibGFua0hlYWRlck9wdHMsZj17eTphLnBhZC50LHlQYWQ6MCx4OmEucGFkLmwseFBhZDowLGluZGV4OjB9LHA9e3dpZHRoOmwuaGVhZGVyV2lkdGgsaGVpZ2h0OmwuaGVhZGVySGVpZ2h0fTtpLmNhbGwoeSxhLHUsdCkuY2FsbChBLGEsZixwKSxzLmVuc3VyZVNpbmdsZShlLCJ0ZXh0IixoLmhlYWRlckFycm93Q2xhc3NOYW1lLGZ1bmN0aW9uKHQpe3QuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikuY2FsbChvLmZvbnQsYS5mb250KS50ZXh0KGguYXJyb3dTeW1ib2xbYS5kaXJlY3Rpb25dKX0pLmF0dHIoe3g6bC5oZWFkZXJXaWR0aC1oLmFycm93T2Zmc2V0WCthLnBhZC5sLHk6bC5oZWFkZXJIZWlnaHQvMitoLnRleHRPZmZzZXRZK2EucGFkLnR9KSxpLm9uKCJjbGljayIsZnVuY3Rpb24oKXtyLmNhbGwoUyxTdHJpbmcoZChyLGEpPy0xOmEuX2luZGV4KSksbSh0LGUscixuLGEpfSksaS5vbigibW91c2VvdmVyIixmdW5jdGlvbigpe2kuY2FsbCh3KX0pLGkub24oIm1vdXNlb3V0IixmdW5jdGlvbigpe2kuY2FsbChrLGEpfSksby5zZXRUcmFuc2xhdGUoZSxsLmx4LGwubHkpfWZ1bmN0aW9uIG0odCxlLHIsaSxvKXtyfHwocj1lKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpO3ZhciBsPWZ1bmN0aW9uKHQpe3JldHVybi0xPT0rdC5hdHRyKGgubWVudUluZGV4QXR0ck5hbWUpfShyKSYmImJ1dHRvbnMiIT09by50eXBlP1tdOm8uYnV0dG9ucyxjPSJkcm9wZG93biI9PT1vLnR5cGU/aC5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZTpoLmJ1dHRvbkNsYXNzTmFtZSx1PXIuc2VsZWN0QWxsKCJnLiIrYykuZGF0YShzLmZpbHRlclZpc2libGUobCkpLGY9dS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoYywhMCkscD11LmV4aXQoKTsiZHJvcGRvd24iPT09by50eXBlPyhmLmF0dHIoIm9wYWNpdHkiLCIwIikudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIxIikscC50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjAiKS5yZW1vdmUoKSk6cC5yZW1vdmUoKTt2YXIgZD0wLHY9MCxtPW8uX2RpbXMseD0tMSE9PVsidXAiLCJkb3duIl0uaW5kZXhPZihvLmRpcmVjdGlvbik7ImRyb3Bkb3duIj09PW8udHlwZSYmKHg/dj1tLmhlYWRlckhlaWdodCtoLmdhcEJ1dHRvbkhlYWRlcjpkPW0uaGVhZGVyV2lkdGgraC5nYXBCdXR0b25IZWFkZXIpLCJkcm9wZG93biI9PT1vLnR5cGUmJiJ1cCI9PT1vLmRpcmVjdGlvbiYmKHY9LWguZ2FwQnV0dG9uSGVhZGVyK2guZ2FwQnV0dG9uLW0ub3BlbkhlaWdodCksImRyb3Bkb3duIj09PW8udHlwZSYmImxlZnQiPT09by5kaXJlY3Rpb24mJihkPS1oLmdhcEJ1dHRvbkhlYWRlcitoLmdhcEJ1dHRvbi1tLm9wZW5XaWR0aCk7dmFyIGI9e3g6bS5seCtkK28ucGFkLmwseTptLmx5K3Yrby5wYWQudCx5UGFkOmguZ2FwQnV0dG9uLHhQYWQ6aC5nYXBCdXR0b24saW5kZXg6MH0sVD17bDpiLngrby5ib3JkZXJ3aWR0aCx0OmIueStvLmJvcmRlcndpZHRofTt1LmVhY2goZnVuY3Rpb24ocyxsKXt2YXIgYz1uLnNlbGVjdCh0aGlzKTtjLmNhbGwoeSxvLHMsdCkuY2FsbChBLG8sYiksYy5vbigiY2xpY2siLGZ1bmN0aW9uKCl7bi5ldmVudC5kZWZhdWx0UHJldmVudGVkfHwocy5leGVjdXRlJiYocy5hcmdzMiYmby5hY3RpdmU9PT1sPyhnKHQsbywwLGUscixpLC0xKSxhLmV4ZWN1dGVBUElDb21tYW5kKHQscy5tZXRob2Qscy5hcmdzMikpOihnKHQsbywwLGUscixpLGwpLGEuZXhlY3V0ZUFQSUNvbW1hbmQodCxzLm1ldGhvZCxzLmFyZ3MpKSksdC5lbWl0KCJwbG90bHlfYnV0dG9uY2xpY2tlZCIse21lbnU6byxidXR0b246cyxhY3RpdmU6by5hY3RpdmV9KSl9KSxjLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7Yy5jYWxsKHcpfSksYy5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7Yy5jYWxsKGssbyksdS5jYWxsKF8sbyl9KX0pLHUuY2FsbChfLG8pLHg/KFQudz1NYXRoLm1heChtLm9wZW5XaWR0aCxtLmhlYWRlcldpZHRoKSxULmg9Yi55LVQudCk6KFQudz1iLngtVC5sLFQuaD1NYXRoLm1heChtLm9wZW5IZWlnaHQsbS5oZWFkZXJIZWlnaHQpKSxULmRpcmVjdGlvbj1vLmRpcmVjdGlvbixpJiYodS5zaXplKCk/ZnVuY3Rpb24odCxlLHIsbixhLGkpe3ZhciBvLHMsbCxjPWEuZGlyZWN0aW9uLHU9InVwIj09PWN8fCJkb3duIj09PWMsZj1hLl9kaW1zLHA9YS5hY3RpdmU7aWYodSlmb3Iocz0wLGw9MDtsPHA7bCsrKXMrPWYuaGVpZ2h0c1tsXStoLmdhcEJ1dHRvbjtlbHNlIGZvcihvPTAsbD0wO2w8cDtsKyspbys9Zi53aWR0aHNbbF0raC5nYXBCdXR0b247bi5lbmFibGUoaSxvLHMpLG4uaGJhciYmbi5oYmFyLmF0dHIoIm9wYWNpdHkiLCIwIikudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIxIik7bi52YmFyJiZuLnZiYXIuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKX0oMCwwLDAsaSxvLFQpOmZ1bmN0aW9uKHQpe3ZhciBlPSEhdC5oYmFyLHI9ISF0LnZiYXI7ZSYmdC5oYmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtlPSExLHJ8fHQuZGlzYWJsZSgpfSk7ciYmdC52YmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtyPSExLGV8fHQuZGlzYWJsZSgpfSl9KGkpKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3QuY2FsbCh4LGUpLmNhbGwoYixlLHIsbil9ZnVuY3Rpb24geCh0LGUpe3MuZW5zdXJlU2luZ2xlKHQsInJlY3QiLGguaXRlbVJlY3RDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5hdHRyKHtyeDpoLnJ4LHJ5OmgucnksInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KS5jYWxsKGkuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoaS5maWxsLGUuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBhPXMuZW5zdXJlU2luZ2xlKHQsInRleHQiLGguaXRlbVRleHRDbGFzc05hbWUsZnVuY3Rpb24odCl7dC5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuYXR0cih7InRleHQtYW5jaG9yIjoic3RhcnQiLCJkYXRhLW5vdGV4IjoxfSl9KSxpPXIubGFiZWwsYz1uLl9mdWxsTGF5b3V0Ll9tZXRhO2MmJihpPXMudGVtcGxhdGVTdHJpbmcoaSxjKSksYS5jYWxsKG8uZm9udCxlLmZvbnQpLnRleHQoaSkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxuKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9ZS5hY3RpdmU7dC5lYWNoKGZ1bmN0aW9uKHQsYSl7dmFyIG89bi5zZWxlY3QodGhpcyk7YT09PXImJmUuc2hvd2FjdGl2ZSYmby5zZWxlY3QoInJlY3QuIitoLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGkuZmlsbCxoLmFjdGl2ZUNvbG9yKX0pfWZ1bmN0aW9uIHcodCl7dC5zZWxlY3QoInJlY3QuIitoLml0ZW1SZWN0Q2xhc3NOYW1lKS5jYWxsKGkuZmlsbCxoLmhvdmVyQ29sb3IpfWZ1bmN0aW9uIGsodCxlKXt0LnNlbGVjdCgicmVjdC4iK2guaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoaS5maWxsLGUuYmdjb2xvcil9ZnVuY3Rpb24gVCh0LGUpe3ZhciByPWUuX2RpbXM9e3dpZHRoMTowLGhlaWdodDE6MCxoZWlnaHRzOltdLHdpZHRoczpbXSx0b3RhbFdpZHRoOjAsdG90YWxIZWlnaHQ6MCxvcGVuV2lkdGg6MCxvcGVuSGVpZ2h0OjAsbHg6MCxseTowfSxpPW8udGVzdGVyLnNlbGVjdEFsbCgiZy4iK2guZHJvcGRvd25CdXR0b25DbGFzc05hbWUpLmRhdGEocy5maWx0ZXJWaXNpYmxlKGUuYnV0dG9ucykpO2kuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGguZHJvcGRvd25CdXR0b25DbGFzc05hbWUsITApO3ZhciBjPS0xIT09WyJ1cCIsImRvd24iXS5pbmRleE9mKGUuZGlyZWN0aW9uKTtpLmVhY2goZnVuY3Rpb24oYSxpKXt2YXIgcz1uLnNlbGVjdCh0aGlzKTtzLmNhbGwoeSxlLGEsdCk7dmFyIGY9cy5zZWxlY3QoIi4iK2guaXRlbVRleHRDbGFzc05hbWUpLHA9Zi5ub2RlKCkmJm8uYkJveChmLm5vZGUoKSkud2lkdGgsZD1NYXRoLm1heChwK2gudGV4dFBhZFgsaC5taW5XaWR0aCksZz1lLmZvbnQuc2l6ZSp1LHY9bC5saW5lQ291bnQoZiksbT1NYXRoLm1heChnKnYsaC5taW5IZWlnaHQpK2gudGV4dE9mZnNldFk7bT1NYXRoLmNlaWwobSksZD1NYXRoLmNlaWwoZCksci53aWR0aHNbaV09ZCxyLmhlaWdodHNbaV09bSxyLmhlaWdodDE9TWF0aC5tYXgoci5oZWlnaHQxLG0pLHIud2lkdGgxPU1hdGgubWF4KHIud2lkdGgxLGQpLGM/KHIudG90YWxXaWR0aD1NYXRoLm1heChyLnRvdGFsV2lkdGgsZCksci5vcGVuV2lkdGg9ci50b3RhbFdpZHRoLHIudG90YWxIZWlnaHQrPW0raC5nYXBCdXR0b24sci5vcGVuSGVpZ2h0Kz1tK2guZ2FwQnV0dG9uKTooci50b3RhbFdpZHRoKz1kK2guZ2FwQnV0dG9uLHIub3BlbldpZHRoKz1kK2guZ2FwQnV0dG9uLHIudG90YWxIZWlnaHQ9TWF0aC5tYXgoci50b3RhbEhlaWdodCxtKSxyLm9wZW5IZWlnaHQ9ci50b3RhbEhlaWdodCl9KSxjP3IudG90YWxIZWlnaHQtPWguZ2FwQnV0dG9uOnIudG90YWxXaWR0aC09aC5nYXBCdXR0b24sci5oZWFkZXJXaWR0aD1yLndpZHRoMStoLmFycm93UGFkWCxyLmhlYWRlckhlaWdodD1yLmhlaWdodDEsImRyb3Bkb3duIj09PWUudHlwZSYmKGM/KHIud2lkdGgxKz1oLmFycm93UGFkWCxyLnRvdGFsSGVpZ2h0PXIuaGVpZ2h0MSk6ci50b3RhbFdpZHRoPXIud2lkdGgxLHIudG90YWxXaWR0aCs9aC5hcnJvd1BhZFgpLGkucmVtb3ZlKCk7dmFyIGY9ci50b3RhbFdpZHRoK2UucGFkLmwrZS5wYWQucixwPXIudG90YWxIZWlnaHQrZS5wYWQudCtlLnBhZC5iLGQ9dC5fZnVsbExheW91dC5fc2l6ZTtyLmx4PWQubCtkLncqZS54LHIubHk9ZC50K2QuaCooMS1lLnkpO3ZhciBnPSJsZWZ0IjtzLmlzUmlnaHRBbmNob3IoZSkmJihyLmx4LT1mLGc9InJpZ2h0Iikscy5pc0NlbnRlckFuY2hvcihlKSYmKHIubHgtPWYvMixnPSJjZW50ZXIiKTt2YXIgdj0idG9wIjtzLmlzQm90dG9tQW5jaG9yKGUpJiYoci5seS09cCx2PSJib3R0b20iKSxzLmlzTWlkZGxlQW5jaG9yKGUpJiYoci5seS09cC8yLHY9Im1pZGRsZSIpLHIudG90YWxXaWR0aD1NYXRoLmNlaWwoci50b3RhbFdpZHRoKSxyLnRvdGFsSGVpZ2h0PU1hdGguY2VpbChyLnRvdGFsSGVpZ2h0KSxyLmx4PU1hdGgucm91bmQoci5seCksci5seT1NYXRoLnJvdW5kKHIubHkpLGEuYXV0b01hcmdpbih0LE0oZSkse3g6ZS54LHk6ZS55LGw6Ziooe3JpZ2h0OjEsY2VudGVyOi41fVtnXXx8MCkscjpmKih7bGVmdDoxLGNlbnRlcjouNX1bZ118fDApLGI6cCooe3RvcDoxLG1pZGRsZTouNX1bdl18fDApLHQ6cCooe2JvdHRvbToxLG1pZGRsZTouNX1bdl18fDApfSl9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gaC5hdXRvTWFyZ2luSWRSb290K3QuX2luZGV4fWZ1bmN0aW9uIEEodCxlLHIsbil7bj1ufHx7fTt2YXIgYT10LnNlbGVjdCgiLiIraC5pdGVtUmVjdENsYXNzTmFtZSksaT10LnNlbGVjdCgiLiIraC5pdGVtVGV4dENsYXNzTmFtZSkscz1lLmJvcmRlcndpZHRoLGM9ci5pbmRleCxmPWUuX2RpbXM7by5zZXRUcmFuc2xhdGUodCxzK3IueCxzK3IueSk7dmFyIHA9LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2YoZS5kaXJlY3Rpb24pLGQ9bi5oZWlnaHR8fChwP2YuaGVpZ2h0c1tjXTpmLmhlaWdodDEpO2EuYXR0cih7eDowLHk6MCx3aWR0aDpuLndpZHRofHwocD9mLndpZHRoMTpmLndpZHRoc1tjXSksaGVpZ2h0OmR9KTt2YXIgZz1lLmZvbnQuc2l6ZSp1LHY9KGwubGluZUNvdW50KGkpLTEpKmcvMjtsLnBvc2l0aW9uVGV4dChpLGgudGV4dE9mZnNldFgsZC8yLXYraC50ZXh0T2Zmc2V0WSkscD9yLnkrPWYuaGVpZ2h0c1tjXStyLnlQYWQ6ci54Kz1mLndpZHRoc1tjXStyLnhQYWQsci5pbmRleCsrfWZ1bmN0aW9uIFModCxlKXt0LmF0dHIoaC5tZW51SW5kZXhBdHRyTmFtZSxlfHwiLTEiKS5zZWxlY3RBbGwoImcuIitoLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lKS5yZW1vdmUoKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXMuZmlsdGVyVmlzaWJsZShlW2gubmFtZV0pO2Z1bmN0aW9uIGkoZSl7YS5hdXRvTWFyZ2luKHQsTShlKSl9dmFyIG89ZS5fbWVudWxheWVyLnNlbGVjdEFsbCgiZy4iK2guY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIubGVuZ3RoPjA/WzBdOltdKTtpZihvLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChoLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKSxvLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLiIraC5oZWFkZXJHcm91cENsYXNzTmFtZSkuZWFjaChpKX0pLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCl7dmFyIGw9by5zZWxlY3RBbGwoImcuIitoLmhlYWRlckdyb3VwQ2xhc3NOYW1lKS5kYXRhKHIscCk7bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoaC5oZWFkZXJHcm91cENsYXNzTmFtZSwhMCk7Zm9yKHZhciBjPXMuZW5zdXJlU2luZ2xlKG8sImciLGguZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZSxmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSksdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgeT1yW3VdO1QodCx5KX12YXIgeD0idXBkYXRlbWVudXMiK2UuX3VpZCxiPW5ldyBmKHQsYyx4KTtsLmVudGVyKCkuc2l6ZSgpJiYoYy5ub2RlKCkucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjLm5vZGUoKSksYy5jYWxsKFMpKSxsLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKHQpe2MuY2FsbChTKSxpKHQpfSkucmVtb3ZlKCksbC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ImRyb3Bkb3duIj09PWUudHlwZT9jOm51bGw7YS5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIodCxlLGUuYnV0dG9ucyxmdW5jdGlvbihuKXtnKHQsZSxlLmJ1dHRvbnNbbi5pbmRleF0scixpLGIsbi5pbmRleCwhMCl9KSwiZHJvcGRvd24iPT09ZS50eXBlPyh2KHQscixjLGIsZSksZChjLGUpJiZtKHQscixjLGIsZSkpOm0odCxyLG51bGwsbnVsbCxlKX0pfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6Njg2LCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NDEsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc1NSwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNiwiLi4vY29sb3IiOjU5MiwiLi4vZHJhd2luZyI6NjEzLCIuL2NvbnN0YW50cyI6NjgxLCIuL3Njcm9sbGJveCI6Njg1LGQzOjE2NX1dLDY4NDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs2NzhdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL2F0dHJpYnV0ZXMiOjY4MCwiLi9jb25zdGFudHMiOjY4MSwiLi9kZWZhdWx0cyI6NjgyLCIuL2RyYXciOjY4MyxkdXA6Njc4fV0sNjg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1zO3ZhciBuPXQoImQzIiksYT10KCIuLi9jb2xvciIpLGk9dCgiLi4vZHJhd2luZyIpLG89dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gcyh0LGUscil7dGhpcy5nZD10LHRoaXMuY29udGFpbmVyPWUsdGhpcy5pZD1yLHRoaXMucG9zaXRpb249bnVsbCx0aGlzLnRyYW5zbGF0ZVg9bnVsbCx0aGlzLnRyYW5zbGF0ZVk9bnVsbCx0aGlzLmhiYXI9bnVsbCx0aGlzLnZiYXI9bnVsbCx0aGlzLmJnPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxib3gtYmciKS5kYXRhKFswXSksdGhpcy5iZy5leGl0KCkub24oIi5kcmFnIixudWxsKS5vbigid2hlZWwiLG51bGwpLnJlbW92ZSgpLHRoaXMuYmcuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzY3JvbGxib3gtYmciLCEwKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKHtvcGFjaXR5OjAseDowLHk6MCx3aWR0aDowLGhlaWdodDowfSl9cy5iYXJXaWR0aD0yLHMuYmFyTGVuZ3RoPTIwLHMuYmFyUmFkaXVzPTIscy5iYXJQYWQ9MSxzLmJhckNvbG9yPSIjODA4QkE0IixzLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXRoaXMuZ2QuX2Z1bGxMYXlvdXQsbD1vLndpZHRoLGM9by5oZWlnaHQ7dGhpcy5wb3NpdGlvbj10O3ZhciB1LGgsZixwLGQ9dGhpcy5wb3NpdGlvbi5sLGc9dGhpcy5wb3NpdGlvbi53LHY9dGhpcy5wb3NpdGlvbi50LG09dGhpcy5wb3NpdGlvbi5oLHk9dGhpcy5wb3NpdGlvbi5kaXJlY3Rpb24seD0iZG93biI9PT15LGI9ImxlZnQiPT09eSxfPSJ1cCI9PT15LHc9ZyxrPW07eHx8Ynx8InJpZ2h0Ij09PXl8fF98fCh0aGlzLnBvc2l0aW9uLmRpcmVjdGlvbj0iZG93biIseD0hMCkseHx8Xz8oaD0odT1kKSt3LHg/KGY9dixrPShwPU1hdGgubWluKGYrayxjKSktZik6az0ocD12K2spLShmPU1hdGgubWF4KHAtaywwKSkpOihwPShmPXYpK2ssYj93PShoPWQrdyktKHU9TWF0aC5tYXgoaC13LDApKToodT1kLHc9KGg9TWF0aC5taW4odSt3LGwpKS11KSksdGhpcy5fYm94PXtsOnUsdDpmLHc6dyxoOmt9O3ZhciBUPWc+dyxNPXMuYmFyTGVuZ3RoKzIqcy5iYXJQYWQsQT1zLmJhcldpZHRoKzIqcy5iYXJQYWQsUz1kLEU9dittO0UrQT5jJiYoRT1jLUEpO3ZhciBMPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxiYXItaG9yaXpvbnRhbCIpLmRhdGEoVD9bMF06W10pO0wuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksTC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci1ob3Jpem9udGFsIiwhMCkuY2FsbChhLmZpbGwscy5iYXJDb2xvciksVD8odGhpcy5oYmFyPUwuYXR0cih7cng6cy5iYXJSYWRpdXMscnk6cy5iYXJSYWRpdXMseDpTLHk6RSx3aWR0aDpNLGhlaWdodDpBfSksdGhpcy5faGJhclhNaW49UytNLzIsdGhpcy5faGJhclRyYW5zbGF0ZU1heD13LU0pOihkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCk7dmFyIEM9bT5rLFA9cy5iYXJXaWR0aCsyKnMuYmFyUGFkLE89cy5iYXJMZW5ndGgrMipzLmJhclBhZCx6PWQrZyxJPXY7eitQPmwmJih6PWwtUCk7dmFyIEQ9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJhci12ZXJ0aWNhbCIpLmRhdGEoQz9bMF06W10pO0QuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksRC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci12ZXJ0aWNhbCIsITApLmNhbGwoYS5maWxsLHMuYmFyQ29sb3IpLEM/KHRoaXMudmJhcj1ELmF0dHIoe3J4OnMuYmFyUmFkaXVzLHJ5OnMuYmFyUmFkaXVzLHg6eix5Okksd2lkdGg6UCxoZWlnaHQ6T30pLHRoaXMuX3ZiYXJZTWluPUkrTy8yLHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXg9ay1PKTooZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpO3ZhciBSPXRoaXMuaWQsRj11LS41LEI9Qz9oK1ArLjU6aCsuNSxOPWYtLjUsaj1UP3ArQSsuNTpwKy41LFY9by5fdG9wZGVmcy5zZWxlY3RBbGwoIiMiK1IpLmRhdGEoVHx8Qz9bMF06W10pO2lmKFYuZXhpdCgpLnJlbW92ZSgpLFYuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLFIpLmFwcGVuZCgicmVjdCIpLFR8fEM/KHRoaXMuX2NsaXBSZWN0PVYuc2VsZWN0KCJyZWN0IikuYXR0cih7eDpNYXRoLmZsb29yKEYpLHk6TWF0aC5mbG9vcihOKSx3aWR0aDpNYXRoLmNlaWwoQiktTWF0aC5mbG9vcihGKSxoZWlnaHQ6TWF0aC5jZWlsKGopLU1hdGguZmxvb3IoTil9KSx0aGlzLmNvbnRhaW5lci5jYWxsKGkuc2V0Q2xpcFVybCxSLHRoaXMuZ2QpLHRoaXMuYmcuYXR0cih7eDpkLHk6dix3aWR0aDpnLGhlaWdodDptfSkpOih0aGlzLmJnLmF0dHIoe3dpZHRoOjAsaGVpZ2h0OjB9KSx0aGlzLmNvbnRhaW5lci5vbigid2hlZWwiLG51bGwpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChpLnNldENsaXBVcmwsbnVsbCksZGVsZXRlIHRoaXMuX2NsaXBSZWN0KSxUfHxDKXt2YXIgVT1uLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbigpe24uZXZlbnQuc291cmNlRXZlbnQucHJldmVudERlZmF1bHQoKX0pLm9uKCJkcmFnIix0aGlzLl9vbkJveERyYWcuYmluZCh0aGlzKSk7dGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigid2hlZWwiLHRoaXMuX29uQm94V2hlZWwuYmluZCh0aGlzKSkub24oIi5kcmFnIixudWxsKS5jYWxsKFUpO3ZhciBxPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKCl7bi5ldmVudC5zb3VyY2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpLG4uZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiZHJhZyIsdGhpcy5fb25CYXJEcmFnLmJpbmQodGhpcykpO1QmJnRoaXMuaGJhci5vbigiLmRyYWciLG51bGwpLmNhbGwocSksQyYmdGhpcy52YmFyLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChxKX10aGlzLnNldFRyYW5zbGF0ZShlLHIpfSxzLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7KHRoaXMuaGJhcnx8dGhpcy52YmFyKSYmKHRoaXMuYmcuYXR0cih7d2lkdGg6MCxoZWlnaHQ6MH0pLHRoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIi5kcmFnIixudWxsKS5jYWxsKGkuc2V0Q2xpcFVybCxudWxsKSxkZWxldGUgdGhpcy5fY2xpcFJlY3QpLHRoaXMuaGJhciYmKHRoaXMuaGJhci5vbigiLmRyYWciLG51bGwpLHRoaXMuaGJhci5yZW1vdmUoKSxkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCksdGhpcy52YmFyJiYodGhpcy52YmFyLm9uKCIuZHJhZyIsbnVsbCksdGhpcy52YmFyLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLnZiYXIsZGVsZXRlIHRoaXMuX3ZiYXJZTWluLGRlbGV0ZSB0aGlzLl92YmFyVHJhbnNsYXRlTWF4KX0scy5wcm90b3R5cGUuX29uQm94RHJhZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudHJhbnNsYXRlWCxlPXRoaXMudHJhbnNsYXRlWTt0aGlzLmhiYXImJih0LT1uLmV2ZW50LmR4KSx0aGlzLnZiYXImJihlLT1uLmV2ZW50LmR5KSx0aGlzLnNldFRyYW5zbGF0ZSh0LGUpfSxzLnByb3RvdHlwZS5fb25Cb3hXaGVlbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMudHJhbnNsYXRlWCxlPXRoaXMudHJhbnNsYXRlWTt0aGlzLmhiYXImJih0Kz1uLmV2ZW50LmRlbHRhWSksdGhpcy52YmFyJiYoZSs9bi5ldmVudC5kZWx0YVkpLHRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLl9vbkJhckRyYWc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7aWYodGhpcy5oYmFyKXt2YXIgcj10K3RoaXMuX2hiYXJYTWluLGE9cit0aGlzLl9oYmFyVHJhbnNsYXRlTWF4O3Q9KG8uY29uc3RyYWluKG4uZXZlbnQueCxyLGEpLXIpLyhhLXIpKih0aGlzLnBvc2l0aW9uLnctdGhpcy5fYm94LncpfWlmKHRoaXMudmJhcil7dmFyIGk9ZSt0aGlzLl92YmFyWU1pbixzPWkrdGhpcy5fdmJhclRyYW5zbGF0ZU1heDtlPShvLmNvbnN0cmFpbihuLmV2ZW50LnksaSxzKS1pKS8ocy1pKSoodGhpcy5wb3NpdGlvbi5oLXRoaXMuX2JveC5oKX10aGlzLnNldFRyYW5zbGF0ZSh0LGUpfSxzLnByb3RvdHlwZS5zZXRUcmFuc2xhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBvc2l0aW9uLnctdGhpcy5fYm94Lncsbj10aGlzLnBvc2l0aW9uLmgtdGhpcy5fYm94Lmg7aWYodD1vLmNvbnN0cmFpbih0fHwwLDAsciksZT1vLmNvbnN0cmFpbihlfHwwLDAsbiksdGhpcy50cmFuc2xhdGVYPXQsdGhpcy50cmFuc2xhdGVZPWUsdGhpcy5jb250YWluZXIuY2FsbChpLnNldFRyYW5zbGF0ZSx0aGlzLl9ib3gubC10aGlzLnBvc2l0aW9uLmwtdCx0aGlzLl9ib3gudC10aGlzLnBvc2l0aW9uLnQtZSksdGhpcy5fY2xpcFJlY3QmJnRoaXMuX2NsaXBSZWN0LmF0dHIoe3g6TWF0aC5mbG9vcih0aGlzLnBvc2l0aW9uLmwrdC0uNSkseTpNYXRoLmZsb29yKHRoaXMucG9zaXRpb24udCtlLS41KX0pLHRoaXMuaGJhcil7dmFyIGE9dC9yO3RoaXMuaGJhci5jYWxsKGkuc2V0VHJhbnNsYXRlLHQrYSp0aGlzLl9oYmFyVHJhbnNsYXRlTWF4LGUpfWlmKHRoaXMudmJhcil7dmFyIHM9ZS9uO3RoaXMudmJhci5jYWxsKGkuc2V0VHJhbnNsYXRlLHQsZStzKnRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpfX19LHsiLi4vLi4vbGliIjo3MTcsIi4uL2NvbG9yIjo1OTIsIi4uL2RyYXdpbmciOjYxMyxkMzoxNjV9XSw2ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtGUk9NX0JMOntsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjEsYm90dG9tOjAsbWlkZGxlOi41LHRvcDoxfSxGUk9NX1RMOntsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjEsYm90dG9tOjEsbWlkZGxlOi41LHRvcDowfSxGUk9NX0JSOntsZWZ0OjEsY2VudGVyOi41LHJpZ2h0OjAsYm90dG9tOjAsbWlkZGxlOi41LHRvcDoxfSxMSU5FX1NQQUNJTkc6MS4zLENBUF9TSElGVDouNyxNSURfU0hJRlQ6LjM1LE9QUE9TSVRFX1NJREU6e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn19fSx7fV0sNjg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17SU5DUkVBU0lORzp7Q09MT1I6IiMzRDk5NzAiLFNZTUJPTDoiXHUyNWIyIn0sREVDUkVBU0lORzp7Q09MT1I6IiNGRjQxMzYiLFNZTUJPTDoiXHUyNWJjIn19fSx7fV0sNjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Rk9STUFUX0xJTks6Imh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy0zLngtYXBpLXJlZmVyZW5jZS9ibG9iL21hc3Rlci9Gb3JtYXR0aW5nLm1kI2QzX2Zvcm1hdCIsREFURV9GT1JNQVRfTElOSzoiaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLTMueC1hcGktcmVmZXJlbmNlL2Jsb2IvbWFzdGVyL1RpbWUtRm9ybWF0dGluZy5tZCNmb3JtYXQifX0se31dLDY4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0NPTVBBUklTT05fT1BTOlsiPSIsIiE9IiwiPCIsIj49IiwiPiIsIjw9Il0sQ09NUEFSSVNPTl9PUFMyOlsiPSIsIjwiLCI+PSIsIj4iLCI8PSJdLElOVEVSVkFMX09QUzpbIltdIiwiKCkiLCJbKSIsIihdIiwiXVsiLCIpKCIsIl0oIiwiKVsiXSxTRVRfT1BTOlsie30iLCJ9eyJdLENPTlNUUkFJTlRfUkVEVUNUSU9OOnsiPSI6Ij0iLCI8IjoiPCIsIjw9IjoiPCIsIj4iOiI+IiwiPj0iOiI+IiwiW10iOiJbXSIsIigpIjoiW10iLCJbKSI6IltdIiwiKF0iOiJbXSIsIl1bIjoiXVsiLCIpKCI6Il1bIiwiXSgiOiJdWyIsIilbIjoiXVsifX19LHt9XSw2OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzb2xpZDpbW10sMF0sZG90OltbLjUsMV0sMjAwXSxkYXNoOltbLjUsMV0sNTBdLGxvbmdkYXNoOltbLjUsMV0sMTBdLGRhc2hkb3Q6W1suNSwuNjI1LC44NzUsMV0sNTBdLGxvbmdkYXNoZG90OltbLjUsLjcsLjgsMV0sMTBdfX0se31dLDY5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NpcmNsZToiXHUyNWNmIiwiY2lyY2xlLW9wZW4iOiJcdTI1Y2IiLHNxdWFyZToiXHUyNWEwIiwic3F1YXJlLW9wZW4iOiJcdTI1YTEiLGRpYW1vbmQ6Ilx1MjVjNiIsImRpYW1vbmQtb3BlbiI6Ilx1MjVjNyIsY3Jvc3M6IisiLHg6Ilx1Mjc0YyJ9fSx7fV0sNjkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17U0hPV19QTEFDRUhPTERFUjoxMDAsSElERV9QTEFDRUhPTERFUjoxZTMsREVTRUxFQ1RESU06LjJ9fSx7fV0sNjkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17QkFETlVNOnZvaWQgMCxGUF9TQUZFOk51bWJlci5NQVhfVkFMVUUvMWU0LE9ORUFWR1lFQVI6MzE1NTc2ZTUsT05FQVZHTU9OVEg6MjYyOThlNSxPTkVEQVk6ODY0ZTUsT05FSE9VUjozNmU1LE9ORU1JTjo2ZTQsT05FU0VDOjFlMyxFUE9DSEpEOjI0NDA1ODcuNSxBTE1PU1RfRVFVQUw6MS0xZS02LExPR19DTElQOjEwLE1JTlVTX1NJR046Ilx1MjIxMiJ9fSx7fV0sNjk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IueG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIixyLnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHIueGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHIuc3ZnQXR0cnM9e3htbG5zOnIuc3ZnLCJ4bWxuczp4bGluayI6ci54bGlua319LHt9XSw2OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci52ZXJzaW9uPSIxLjUyLjIiLHQoImVzNi1wcm9taXNlIikucG9seWZpbGwoKSx0KCIuLi9idWlsZC9wbG90Y3NzIiksdCgiLi9mb250cy9tYXRoamF4X2NvbmZpZyIpKCk7Zm9yKHZhciBuPXQoIi4vcmVnaXN0cnkiKSxhPXIucmVnaXN0ZXI9bi5yZWdpc3RlcixpPXQoIi4vcGxvdF9hcGkiKSxvPU9iamVjdC5rZXlzKGkpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTsiXyIhPT1sLmNoYXJBdCgwKSYmKHJbbF09aVtsXSksYSh7bW9kdWxlVHlwZToiYXBpTWV0aG9kIixuYW1lOmwsZm46aVtsXX0pfWEodCgiLi90cmFjZXMvc2NhdHRlciIpKSxhKFt0KCIuL2NvbXBvbmVudHMvZngiKSx0KCIuL2NvbXBvbmVudHMvbGVnZW5kIiksdCgiLi9jb21wb25lbnRzL2Fubm90YXRpb25zIiksdCgiLi9jb21wb25lbnRzL2Fubm90YXRpb25zM2QiKSx0KCIuL2NvbXBvbmVudHMvc2hhcGVzIiksdCgiLi9jb21wb25lbnRzL2ltYWdlcyIpLHQoIi4vY29tcG9uZW50cy91cGRhdGVtZW51cyIpLHQoIi4vY29tcG9uZW50cy9zbGlkZXJzIiksdCgiLi9jb21wb25lbnRzL3Jhbmdlc2xpZGVyIiksdCgiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3IiKSx0KCIuL2NvbXBvbmVudHMvZ3JpZCIpLHQoIi4vY29tcG9uZW50cy9lcnJvcmJhcnMiKSx0KCIuL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHQoIi4vY29tcG9uZW50cy9jb2xvcmJhciIpXSksYShbdCgiLi9sb2NhbGUtZW4iKSx0KCIuL2xvY2FsZS1lbi11cyIpXSksd2luZG93LlBsb3RseUxvY2FsZXMmJkFycmF5LmlzQXJyYXkod2luZG93LlBsb3RseUxvY2FsZXMpJiYoYSh3aW5kb3cuUGxvdGx5TG9jYWxlcyksZGVsZXRlIHdpbmRvdy5QbG90bHlMb2NhbGVzKSxyLkljb25zPXQoIi4vZm9udHMvcGxvdGljb24iKSxyLlBsb3RzPXQoIi4vcGxvdHMvcGxvdHMiKSxyLkZ4PXQoIi4vY29tcG9uZW50cy9meCIpLHIuU25hcHNob3Q9dCgiLi9zbmFwc2hvdCIpLHIuUGxvdFNjaGVtYT10KCIuL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIiksci5RdWV1ZT10KCIuL2xpYi9xdWV1ZSIpLHIuZDM9dCgiZDMiKX0seyIuLi9idWlsZC9wbG90Y3NzIjoxLCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMiOjU4MywiLi9jb21wb25lbnRzL2Fubm90YXRpb25zM2QiOjU4OCwiLi9jb21wb25lbnRzL2NvbG9yYmFyIjo1OTgsIi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MDQsIi4vY29tcG9uZW50cy9lcnJvcmJhcnMiOjYxOSwiLi9jb21wb25lbnRzL2Z4Ijo2MzAsIi4vY29tcG9uZW50cy9ncmlkIjo2MzQsIi4vY29tcG9uZW50cy9pbWFnZXMiOjYzOSwiLi9jb21wb25lbnRzL2xlZ2VuZCI6NjQ3LCIuL2NvbXBvbmVudHMvcmFuZ2VzZWxlY3RvciI6NjU4LCIuL2NvbXBvbmVudHMvcmFuZ2VzbGlkZXIiOjY2NSwiLi9jb21wb25lbnRzL3NoYXBlcyI6NjczLCIuL2NvbXBvbmVudHMvc2xpZGVycyI6Njc4LCIuL2NvbXBvbmVudHMvdXBkYXRlbWVudXMiOjY4NCwiLi9mb250cy9tYXRoamF4X2NvbmZpZyI6Njk2LCIuL2ZvbnRzL3Bsb3RpY29uIjo2OTcsIi4vbGliL3F1ZXVlIjo3MzIsIi4vbG9jYWxlLWVuIjo3NDYsIi4vbG9jYWxlLWVuLXVzIjo3NDUsIi4vcGxvdF9hcGkiOjc1MCwiLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6NzU0LCIuL3Bsb3RzL3Bsb3RzIjo4MjYsIi4vcmVnaXN0cnkiOjg0NiwiLi9zbmFwc2hvdCI6ODUxLCIuL3RyYWNlcy9zY2F0dGVyIjoxMTMyLGQzOjE2NSwiZXM2LXByb21pc2UiOjIyMX1dLDY5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIE1hdGhKYXgmJigibG9jYWwiIT09KHdpbmRvdy5QbG90bHlDb25maWd8fHt9KS5NYXRoSmF4Q29uZmlnJiYoTWF0aEpheC5IdWIuQ29uZmlnKHttZXNzYWdlU3R5bGU6Im5vbmUiLHNraXBTdGFydHVwVHlwZXNldDohMCxkaXNwbGF5QWxpZ246ImxlZnQiLHRleDJqYXg6e2lubGluZU1hdGg6W1siJCIsIiQiXSxbIlxcKCIsIlxcKSJdXX19KSxNYXRoSmF4Lkh1Yi5Db25maWd1cmVkKCkpKX19LHt9XSw2OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt1bmRvOnt3aWR0aDo4NTcuMSxoZWlnaHQ6MWUzLHBhdGg6Im04NTcgMzUwcTAtODctMzQtMTY2dC05MS0xMzctMTM3LTkyLTE2Ni0zNHEtOTYgMC0xODMgNDF0LTE0NyAxMTRxLTQgNi00IDEzdDUgMTFsNzYgNzdxNiA1IDE0IDUgOS0xIDEzLTcgNDEtNTMgMTAwLTgydDEyNi0yOXE1OCAwIDExMCAyM3Q5MiA2MSA2MSA5MSAyMiAxMTEtMjIgMTExLTYxIDkxLTkyIDYxLTExMCAyM3EtNTUgMC0xMDUtMjB0LTkwLTU3bDc3LTc3cTE3LTE2IDgtMzgtMTAtMjMtMzMtMjNoLTI1MHEtMTUgMC0yNSAxMXQtMTEgMjV2MjUwcTAgMjQgMjIgMzMgMjIgMTAgMzktOGw3Mi03MnE2MCA1NyAxMzcgODh0MTU5IDMxcTg3IDAgMTY2LTM0dDEzNy05MiA5MS0xMzcgMzQtMTY2eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0saG9tZTp7d2lkdGg6OTI4LjYsaGVpZ2h0OjFlMyxwYXRoOiJtNzg2IDI5NnYtMjY3cTAtMTUtMTEtMjZ0LTI1LTEwaC0yMTR2MjE0aC0xNDN2LTIxNGgtMjE0cS0xNSAwLTI1IDEwdC0xMSAyNnYyNjdxMCAxIDAgMnQwIDJsMzIxIDI2NCAzMjEtMjY0cTEtMSAxLTR6IG0xMjQgMzlsLTM0LTQxcS01LTUtMTItNmgtMnEtNyAwLTEyIDNsLTM4NiAzMjItMzg2LTMyMnEtNy00LTEzLTQtNyAyLTEyIDdsLTM1IDQxcS00IDUtMyAxM3Q2IDEybDQwMSAzMzRxMTggMTUgNDIgMTV0NDMtMTVsMTM2LTExNHYxMDlxMCA4IDUgMTN0MTMgNWgxMDdxOCAwIDEzLTV0NS0xM3YtMjI3bDEyMi0xMDJxNS01IDYtMTJ0LTQtMTN6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSwiY2FtZXJhLXJldHJvIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTUxOCAzODZxMCA4LTUgMTN0LTEzIDVxLTM3IDAtNjMtMjd0LTI2LTYzcTAtOCA1LTEzdDEzLTUgMTIgNSA1IDEzcTAgMjMgMTYgMzh0MzggMTZxOCAwIDEzIDV0NSAxM3ogbTEyNS03M3EwLTU5LTQyLTEwMXQtMTAxLTQyLTEwMSA0Mi00MiAxMDEgNDIgMTAxIDEwMSA0MiAxMDEtNDIgNDItMTAxeiBtLTU3Mi0zMjBoODU4djcxaC04NTh2LTcxeiBtNjQzIDMyMHEwIDg5LTYyIDE1MnQtMTUyIDYyLTE1MS02Mi02My0xNTIgNjMtMTUxIDE1MS02MyAxNTIgNjMgNjIgMTUxeiBtLTU3MSAzNThoMjE0djcyaC0yMTR2LTcyeiBtLTcyLTEwN2g4NTh2MTQzaC00NjJsLTM2LTcxaC0zNjB2LTcyeiBtOTI5IDE0M3YtNzE0cTAtMzAtMjEtNTF0LTUwLTIxaC04NThxLTI5IDAtNTAgMjF0LTIxIDUxdjcxNHEwIDMwIDIxIDUxdDUwIDIxaDg1OHEyOSAwIDUwLTIxdDIxLTUxeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbWJveDp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTEwMDAtMjVsLTI1MCAyNTFjNDAgNjMgNjMgMTM4IDYzIDIxOCAwIDIyNC0xODIgNDA2LTQwNyA0MDYtMjI0IDAtNDA2LTE4Mi00MDYtNDA2czE4My00MDYgNDA3LTQwNmM4MCAwIDE1NSAyMiAyMTggNjJsMjUwLTI1MCAxMjUgMTI1eiBtLTgxMiAyNTBsMCA0MzggNDM3IDAgMC00MzgtNDM3IDB6IG02MiAzNzVsMzEzIDAgMC0zMTItMzEzIDAgMCAzMTJ6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxwYW46e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im0xMDAwIDM1MGwtMTg3IDE4OCAwLTEyNS0yNTAgMCAwIDI1MCAxMjUgMC0xODggMTg3LTE4Ny0xODcgMTI1IDAgMC0yNTAtMjUwIDAgMCAxMjUtMTg4LTE4OCAxODYtMTg3IDAgMTI1IDI1MiAwIDAtMjUwLTEyNSAwIDE4Ny0xODggMTg4IDE4OC0xMjUgMCAwIDI1MCAyNTAgMCAwLTEyNiAxODcgMTg4eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbV9wbHVzOnt3aWR0aDo4NzUsaGVpZ2h0OjFlMyxwYXRoOiJtMSA3ODdsMC04NzUgODc1IDAgMCA4NzUtODc1IDB6IG02ODctNTAwbC0xODcgMCAwLTE4Ny0xMjUgMCAwIDE4Ny0xODggMCAwIDEyNSAxODggMCAwIDE4NyAxMjUgMCAwLTE4NyAxODcgMCAwLTEyNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHpvb21fbWludXM6e3dpZHRoOjg3NSxoZWlnaHQ6MWUzLHBhdGg6Im0wIDc4OGwwLTg3NiA4NzUgMCAwIDg3Ni04NzUgMHogbTY4OC01MDBsLTUwMCAwIDAgMTI1IDUwMCAwIDAtMTI1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sYXV0b3NjYWxlOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMjUwIDg1MGwtMTg3IDAtNjMgMCAwLTYyIDAtMTg4IDYzIDAgMCAxODggMTg3IDAgMCA2MnogbTY4OCAwbC0xODggMCAwLTYyIDE4OCAwIDAtMTg4IDYyIDAgMCAxODggMCA2Mi02MiAweiBtLTg3NS05MzhsMCAxODgtNjMgMCAwLTE4OCAwLTYyIDYzIDAgMTg3IDAgMCA2Mi0xODcgMHogbTg3NSAxODhsMC0xODgtMTg4IDAgMC02MiAxODggMCA2MiAwIDAgNjIgMCAxODgtNjIgMHogbS0xMjUgMTg4bC0xIDAtOTMtOTQtMTU2IDE1NiAxNTYgMTU2IDkyLTkzIDIgMCAwIDI1MC0yNTAgMCAwLTIgOTMtOTItMTU2LTE1Ni0xNTYgMTU2IDk0IDkyIDAgMi0yNTAgMCAwLTI1MCAwIDAgOTMgOTMgMTU3LTE1Ni0xNTctMTU2LTkzIDk0IDAgMCAwLTI1MCAyNTAgMCAwIDAtOTQgOTMgMTU2IDE1NyAxNTYtMTU3LTkzLTkzIDAgMCAyNTAgMCAwIDI1MHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHRvb2x0aXBfYmFzaWM6e3dpZHRoOjE1MDAsaGVpZ2h0OjFlMyxwYXRoOiJtMzc1IDcyNWwwIDAtMzc1LTM3NSAzNzUtMzc0IDAtMSAxMTI1IDAgMCA3NTAtMTEyNSAweiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sdG9vbHRpcF9jb21wYXJlOnt3aWR0aDoxMTI1LGhlaWdodDoxZTMscGF0aDoibTE4NyA3ODZsMCAyLTE4Ny0xODggMTg4LTE4NyAwIDAgOTM3IDAgMCAzNzMtOTM4IDB6IG0wLTQ5OWwwIDEtMTg3LTE4OCAxODgtMTg4IDAgMCA5MzcgMCAwIDM3Ni05MzgtMXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHBsb3RseWxvZ286e3dpZHRoOjE1NDIsaGVpZ2h0OjFlMyxwYXRoOiJtMC0xMGgxODJ2LTE0MGgtMTgydjE0MHogbTIyOCAxNDZoMTgzdi0yODZoLTE4M3YyODZ6IG0yMjUgNzE0aDE4MnYtMTAwMGgtMTgydjEwMDB6IG0yMjUtMjg1aDE4MnYtNzE1aC0xODJ2NzE1eiBtMjI1IDE0MmgxODN2LTg1N2gtMTgzdjg1N3ogbTIzMS00MjhoMTgydi00MjloLTE4MnY0Mjl6IG0yMjUtMjkxaDE4M3YtMTM4aC0xODN2MTM4eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sInotYXhpcyI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im04MzMgNWwtMTcgMTA4djQxbC0xMzAtNjUgMTMwLTY2YzAgMCAwIDM4IDAgMzkgMC0xIDM2LTE0IDM5LTI1IDQtMTUtNi0yMi0xNi0zMC0xNS0xMi0zOS0xNi01Ni0yMC05MC0yMi0xODctMjMtMjc5LTIzLTI2MSAwLTM0MSAzNC0zNTMgNTkgMyA2MCAyMjggMTEwIDIyOCAxMTAtMTQwLTgtMzUxLTM1LTM1MS0xMTYgMC0xMjAgMjkzLTE0MiA0NzQtMTQyIDE1NSAwIDQ3NyAyMiA0NzcgMTQyIDAgNTAtNzQgNzktMTYzIDk2eiBtLTM3NCA5NGMtNTgtNS05OS0yMS05OS00MCAwLTI0IDY1LTQzIDE0NC00MyA3OSAwIDE0MyAxOSAxNDMgNDMgMCAxOS00MiAzNC05OCA0MHYyMTZoODdsLTEzMiAxMzUtMTMzLTEzNWg4OHYtMjE2eiBtMTY3IDUxNWgtMTM2djFjMTYgMTYgMzEgMzQgNDYgNTJsODQgMTA5djU0aC0yMzB2LTcxaDEyNHYtMWMtMTYtMTctMjgtMzItNDQtNTFsLTg5LTExNHYtNTFoMjQ1djcyeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sIjNkX3JvdGF0ZSI6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im05MjIgNjYwYy01IDQtOSA3LTE0IDExLTM1OSAyNjMtNTgwLTMxLTU4MC0zMWwtMTAyIDI4IDU4LTQwMGMwIDEgMSAxIDIgMiAxMTggMTA4IDM1MSAyNDkgMzUxIDI0OXMtNjIgMjctMTAwIDQyYzg4IDgzIDIyMiAxODMgMzQ3IDEyMiAxNi04IDMwLTE3IDQ0LTI3LTIgMS00IDItNiA0eiBtMzYtMzI5YzAgMCA2NCAyMjktODggMjk2LTYyIDI3LTEyNCAxNC0xNzUtMTEgMTU3LTc4IDIyNS0yMDggMjQ5LTI2NiA4LTE5IDExLTMxIDExLTMxIDIgNSA2IDE1IDExIDMyLTUtMTMtOC0yMC04LTIweiBtLTc3NS0yMzljNzAtMzEgMTE3LTUwIDE5OC0zMi0xMjEgODAtMTk5IDM0Ni0xOTkgMzQ2bC05Ni0xNS01OC0xMmMwIDAgNTUtMjI2IDE1NS0yODd6IG02MDMgMTMzbC0zMTctMTM5YzAgMCA0LTQgMTktMTQgNy01IDI0LTE1IDI0LTE1cy0xNzctMTQ3LTM4OSA0YzIzNS0yODcgNTM2LTExMiA1MzYtMTEybDMxLTIyIDEwMCAyOTktNC0xeiBtLTI5OC0xNTNjNi00IDE0LTkgMjQtMTUgMCAwLTE3IDEwLTI0IDE1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sY2FtZXJhOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtNTAwIDQ1MGMtODMgMC0xNTAtNjctMTUwLTE1MCAwLTgzIDY3LTE1MCAxNTAtMTUwIDgzIDAgMTUwIDY3IDE1MCAxNTAgMCA4My02NyAxNTAtMTUwIDE1MHogbTQwMCAxNTBoLTEyMGMtMTYgMC0zNCAxMy0zOSAyOWwtMzEgOTNjLTYgMTUtMjMgMjgtNDAgMjhoLTM0MGMtMTYgMC0zNC0xMy0zOS0yOGwtMzEtOTRjLTYtMTUtMjMtMjgtNDAtMjhoLTEyMGMtNTUgMC0xMDAtNDUtMTAwLTEwMHYtNDUwYzAtNTUgNDUtMTAwIDEwMC0xMDBoODAwYzU1IDAgMTAwIDQ1IDEwMCAxMDB2NDUwYzAgNTUtNDUgMTAwLTEwMCAxMDB6IG0tNDAwLTU1MGMtMTM4IDAtMjUwIDExMi0yNTAgMjUwIDAgMTM4IDExMiAyNTAgMjUwIDI1MCAxMzggMCAyNTAtMTEyIDI1MC0yNTAgMC0xMzgtMTEyLTI1MC0yNTAtMjUweiBtMzY1IDM4MGMtMTkgMC0zNSAxNi0zNSAzNSAwIDE5IDE2IDM1IDM1IDM1IDE5IDAgMzUtMTYgMzUtMzUgMC0xOS0xNi0zNS0zNS0zNXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LG1vdmllOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtOTM4IDQxM2wtMTg4LTEyNWMwIDM3LTE3IDcxLTQ0IDk0IDY0IDM4IDEwNyAxMDcgMTA3IDE4NyAwIDEyMS05OCAyMTktMjE5IDIxOS0xMjEgMC0yMTktOTgtMjE5LTIxOSAwLTYxIDI1LTExNyA2Ni0xNTZoLTExNWMzMCAzMyA0OSA3NiA0OSAxMjUgMCAxMDMtODQgMTg3LTE4NyAxODdzLTE4OC04NC0xODgtMTg3YzAtNTcgMjYtMTA3IDY1LTE0MS0zOC0yMi02NS02Mi02NS0xMDl2LTI1MGMwLTcwIDU2LTEyNiAxMjUtMTI2aDUwMGM2OSAwIDEyNSA1NiAxMjUgMTI2bDE4OC0xMjZjMzQgMCA2MiAyOCA2MiA2M3YzNzVjMCAzNS0yOCA2My02MiA2M3ogbS03NTAgMGMtNjkgMC0xMjUgNTYtMTI1IDEyNXM1NiAxMjUgMTI1IDEyNSAxMjUtNTYgMTI1LTEyNS01Ni0xMjUtMTI1LTEyNXogbTQwNi0xYy04NyAwLTE1NyA3MC0xNTcgMTU3IDAgODYgNzAgMTU2IDE1NyAxNTZzMTU2LTcwIDE1Ni0xNTYtNzAtMTU3LTE1Ni0xNTd6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxxdWVzdGlvbjp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtNTAwIDgydjEwN3EwIDgtNSAxM3QtMTMgNWgtMTA3cS04IDAtMTMtNXQtNS0xM3YtMTA3cTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTN6IG0xNDMgMzc1cTAgNDktMzEgOTF0LTc3IDY1LTk1IDIzcS0xMzYgMC0yMDctMTE5LTktMTQgNC0yNGw3NC01NXE0LTQgMTAtNCA5IDAgMTQgNyAzMCAzOCA0OCA1MSAxOSAxNCA0OCAxNCAyNyAwIDQ4LTE1dDIxLTMzcTAtMjEtMTEtMzR0LTM4LTI1cS0zNS0xNi02NS00OHQtMjktNzB2LTIwcTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTNxMCAxMCAxMiAyN3QzMCAyOHExOCAxMCAyOCAxNnQyNSAxOSAyNSAyNyAxNiAzNCA3IDQ1eiBtMjE0LTEwN3EwLTExNy01Ny0yMTV0LTE1Ni0xNTYtMjE1LTU4LTIxNiA1OC0xNTUgMTU2LTU4IDIxNSA1OCAyMTUgMTU1IDE1NiAyMTYgNTggMjE1LTU4IDE1Ni0xNTYgNTctMjE1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sZGlzazp7d2lkdGg6ODU3LjEsaGVpZ2h0OjFlMyxwYXRoOiJtMjE0LTdoNDI5djIxNGgtNDI5di0yMTR6IG01MDAgMGg3MnY1MDBxMCA4LTYgMjF0LTExIDIwbC0xNTcgMTU2cS01IDYtMTkgMTJ0LTIyIDV2LTIzMnEwLTIyLTE1LTM4dC0zOC0xNmgtMzIycS0yMiAwLTM3IDE2dC0xNiAzOHYyMzJoLTcydi03MTRoNzJ2MjMycTAgMjIgMTYgMzh0MzcgMTZoNDY1cTIyIDAgMzgtMTZ0MTUtMzh2LTIzMnogbS0yMTQgNTE4djE3OHEwIDgtNSAxM3QtMTMgNWgtMTA3cS03IDAtMTMtNXQtNS0xM3YtMTc4cTAtOCA1LTEzdDEzLTVoMTA3cTcgMCAxMyA1dDUgMTN6IG0zNTctMTh2LTUxOHEwLTIyLTE1LTM4dC0zOC0xNmgtNzUwcS0yMyAwLTM4IDE2dC0xNiAzOHY3NTBxMCAyMiAxNiAzOHQzOCAxNmg1MTdxMjMgMCA1MC0xMnQ0Mi0yNmwxNTYtMTU3cTE2LTE1IDI3LTQydDExLTQ5eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sbGFzc286e3dpZHRoOjEwMzEsaGVpZ2h0OjFlMyxwYXRoOiJtMTAxOCA1MzhjLTM2IDIwNy0yOTAgMzM2LTU2OCAyODYtMjc3LTQ4LTQ3My0yNTYtNDM2LTQ2MyAxMC01NyAzNi0xMDggNzYtMTUxLTEzLTY2IDExLTEzNyA2OC0xODMgMzQtMjggNzUtNDEgMTE0LTQybC01NS03MCAwIDBjLTItMS0zLTItNC0zLTEwLTE0LTgtMzQgNS00NSAxNC0xMSAzNC04IDQ1IDQgMSAxIDIgMyAyIDVsMCAwIDExMyAxNDBjMTYgMTEgMzEgMjQgNDUgNDAgNCAzIDYgNyA4IDExIDQ4LTMgMTAwIDAgMTUxIDkgMjc4IDQ4IDQ3MyAyNTUgNDM2IDQ2MnogbS02MjQtMzc5Yy04MCAxNC0xNDkgNDgtMTk3IDk2IDQyIDQyIDEwOSA0NyAxNTYgOSAzMy0yNiA0Ny02NiA0MS0xMDV6IG0tMTg3LTc0Yy0xOSAxNi0zMyAzNy0zOSA2MCA1MC0zMiAxMDktNTUgMTc0LTY4LTQyLTI1LTk1LTI0LTEzNSA4eiBtMzYwIDc1Yy0zNC03LTY5LTktMTAyLTggOCA2Mi0xNiAxMjgtNjggMTcwLTczIDU5LTE3NSA1NC0yNDQtNS05IDIwLTE2IDQwLTIwIDYxLTI4IDE1OSAxMjEgMzE3IDMzMyAzNTRzNDA3LTYwIDQzNC0yMTdjMjgtMTU5LTEyMS0zMTgtMzMzLTM1NXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHNlbGVjdGJveDp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTAgODUwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODZsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg1bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtODU3IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg1IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHNwaWtlbGluZTp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoiTTUxMiA0MDljMC01Ny00Ni0xMDQtMTAzLTEwNC01NyAwLTEwNCA0Ny0xMDQgMTA0IDAgNTcgNDcgMTAzIDEwNCAxMDMgNTcgMCAxMDMtNDYgMTAzLTEwM3ogbS0zMjctMzlsOTIgMCAwIDkyLTkyIDB6IG0tMTg1IDBsOTIgMCAwIDkyLTkyIDB6IG0zNzAtMTg2bDkyIDAgMCA5My05MiAweiBtMC0xODRsOTIgMCAwIDkyLTkyIDB6Iix0cmFuc2Zvcm06Im1hdHJpeCgxLjUgMCAwIC0xLjUgMCA4NTApIn0scGVuY2lsOnt3aWR0aDoxNzkyLGhlaWdodDoxNzkyLHBhdGg6Ik00OTEgMTUzNmw5MS05MS0yMzUtMjM1LTkxIDkxdjEwN2gxMjh2MTI4aDEwN3ptNTIzLTkyOHEwLTIyLTIyLTIyLTEwIDAtMTcgN2wtNTQyIDU0MnEtNyA3LTcgMTcgMCAyMiAyMiAyMiAxMCAwIDE3LTdsNTQyLTU0MnE3LTcgNy0xN3ptLTU0LTE5Mmw0MTYgNDE2LTgzMiA4MzJoLTQxNnYtNDE2em02ODMgOTZxMCA1My0zNyA5MGwtMTY2IDE2Ni00MTYtNDE2IDE2Ni0xNjVxMzYtMzggOTAtMzggNTMgMCA5MSAzOGwyMzUgMjM0cTM3IDM5IDM3IDkxeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAwIDEpIn0sbmV3cGxvdGx5bG9nbzp7bmFtZToibmV3cGxvdGx5bG9nbyIsc3ZnOiI8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDEzMiAxMzInPjxkZWZzPjxzdHlsZT4uY2xzLTEge2ZpbGw6ICMxMTlkZmY7fSAuY2xzLTIge2ZpbGw6ICMyNWZlZmQ7fSAuY2xzLTMge2ZpbGw6ICNmZmY7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5wbG90bHktbG9nb21hcms8L3RpdGxlPjxnIGlkPSdzeW1ib2wnPjxyZWN0IGNsYXNzPSdjbHMtMScgd2lkdGg9JzEzMicgaGVpZ2h0PScxMzInIHJ4PSc2JyByeT0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nNzgnIGN5PSc1NCcgcj0nNicvPjxjaXJjbGUgY2xhc3M9J2Nscy0yJyBjeD0nMTAyJyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9Jzc4JyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzU0JyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzMwJyBjeT0nMzAnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzMwJyBjeT0nNTQnIHI9JzYnLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J00zMCw3MmE2LDYsMCwwLDAtNiw2djI0YTYsNiwwLDAsMCwxMiwwVjc4QTYsNiwwLDAsMCwzMCw3MlonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J003OCw3MmE2LDYsMCwwLDAtNiw2djI0YTYsNiwwLDAsMCwxMiwwVjc4QTYsNiwwLDAsMCw3OCw3MlonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J001NCw0OGE2LDYsMCwwLDAtNiw2djQ4YTYsNiwwLDAsMCwxMiwwVjU0QTYsNiwwLDAsMCw1NCw0OFonLz48cGF0aCBjbGFzcz0nY2xzLTMnIGQ9J00xMDIsNDhhNiw2LDAsMCwwLTYsNnY0OGE2LDYsMCwwLDAsMTIsMFY1NEE2LDYsMCwwLDAsMTAyLDQ4WicvPjwvZz48L3N2Zz4ifX19LHt9XSw2OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5pc0xlZnRBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuImxlZnQiPT09dC54YW5jaG9yfHwiYXV0byI9PT10LnhhbmNob3ImJnQueDw9MS8zfSxyLmlzQ2VudGVyQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJjZW50ZXIiPT09dC54YW5jaG9yfHwiYXV0byI9PT10LnhhbmNob3ImJnQueD4xLzMmJnQueDwyLzN9LHIuaXNSaWdodEFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4icmlnaHQiPT09dC54YW5jaG9yfHwiYXV0byI9PT10LnhhbmNob3ImJnQueD49Mi8zfSxyLmlzVG9wQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJ0b3AiPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueT49Mi8zfSxyLmlzTWlkZGxlQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJtaWRkbGUiPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueT4xLzMmJnQueTwyLzN9LHIuaXNCb3R0b21BbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuImJvdHRvbSI9PT10LnlhbmNob3J8fCJhdXRvIj09PXQueWFuY2hvciYmdC55PD0xLzN9fSx7fV0sNjk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbW9kIiksYT1uLm1vZCxpPW4ubW9kSGFsZixvPU1hdGguUEkscz0yKm87ZnVuY3Rpb24gbCh0KXtyZXR1cm4gTWF0aC5hYnModFsxXS10WzBdKT5zLTFlLTE0fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gaShlLXQscyl9ZnVuY3Rpb24gdSh0LGUpe2lmKGwoZSkpcmV0dXJuITA7dmFyIHIsbjtlWzBdPGVbMV0/KHI9ZVswXSxuPWVbMV0pOihyPWVbMV0sbj1lWzBdKSwocj1hKHIscykpPihuPWEobixzKSkmJihuKz1zKTt2YXIgaT1hKHQscyksbz1pK3M7cmV0dXJuIGk+PXImJmk8PW58fG8+PXImJm88PW59ZnVuY3Rpb24gaCh0LGUscixuLGEsaSxjKXthPWF8fDAsaT1pfHwwO3ZhciB1LGgsZixwLGQsZz1sKFtyLG5dKTtmdW5jdGlvbiB2KHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSkrYSxpLXQqTWF0aC5zaW4oZSldfWc/KHU9MCxoPW8sZj1zKTpyPG4/KHU9cixmPW4pOih1PW4sZj1yKSx0PGU/KHA9dCxkPWUpOihwPWUsZD10KTt2YXIgbSx5PU1hdGguYWJzKGYtdSk8PW8/MDoxO2Z1bmN0aW9uIHgodCxlLHIpe3JldHVybiJBIitbdCx0XSsiICIrWzAseSxyXSsiICIrdih0LGUpfXJldHVybiBnP209bnVsbD09PXA/Ik0iK3YoZCx1KSt4KGQsaCwwKSt4KGQsZiwwKSsiWiI6Ik0iK3YocCx1KSt4KHAsaCwwKSt4KHAsZiwwKSsiWk0iK3YoZCx1KSt4KGQsaCwxKSt4KGQsZiwxKSsiWiI6bnVsbD09PXA/KG09Ik0iK3YoZCx1KSt4KGQsZiwwKSxjJiYobSs9IkwwLDBaIikpOm09Ik0iK3YocCx1KSsiTCIrdihkLHUpK3goZCxmLDApKyJMIit2KHAsZikreChwLHUsMSkrIloiLG19ZS5leHBvcnRzPXtkZWcycmFkOmZ1bmN0aW9uKHQpe3JldHVybiB0LzE4MCpvfSxyYWQyZGVnOmZ1bmN0aW9uKHQpe3JldHVybiB0L28qMTgwfSxhbmdsZURlbHRhOmMsYW5nbGVEaXN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYWJzKGModCxlKSl9LGlzRnVsbENpcmNsZTpsLGlzQW5nbGVJbnNpZGVTZWN0b3I6dSxpc1B0SW5zaWRlU2VjdG9yOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiEhdShlLG4pJiYoclswXTxyWzFdPyhhPXJbMF0saT1yWzFdKTooYT1yWzFdLGk9clswXSksdD49YSYmdDw9aSk7dmFyIGEsaX0scGF0aEFyYzpmdW5jdGlvbih0LGUscixuLGEpe3JldHVybiBoKG51bGwsdCxlLHIsbixhLDApfSxwYXRoU2VjdG9yOmZ1bmN0aW9uKHQsZSxyLG4sYSl7cmV0dXJuIGgobnVsbCx0LGUscixuLGEsMSl9LHBhdGhBbm51bHVzOmZ1bmN0aW9uKHQsZSxyLG4sYSxpKXtyZXR1cm4gaCh0LGUscixuLGEsaSwxKX19fSx7Ii4vbW9kIjo3MjR9XSw3MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49QXJyYXkuaXNBcnJheSxhPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlcjp7aXNWaWV3OmZ1bmN0aW9uKCl7cmV0dXJuITF9fSxpPSJ1bmRlZmluZWQiPT10eXBlb2YgRGF0YVZpZXc/ZnVuY3Rpb24oKXt9OkRhdGFWaWV3O2Z1bmN0aW9uIG8odCl7cmV0dXJuIGEuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBuKHQpfHxvKHQpfWZ1bmN0aW9uIGwodCxlLHIpe2lmKHModCkpe2lmKHModFswXSkpe2Zvcih2YXIgbj1yLGE9MDthPHQubGVuZ3RoO2ErKyluPWUobix0W2FdLmxlbmd0aCk7cmV0dXJuIG59cmV0dXJuIHQubGVuZ3RofXJldHVybiAwfXIuaXNUeXBlZEFycmF5PW8sci5pc0FycmF5T3JUeXBlZEFycmF5PXMsci5pc0FycmF5MUQ9ZnVuY3Rpb24odCl7cmV0dXJuIXModFswXSl9LHIuZW5zdXJlQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0KXx8KHQ9W10pLHQubGVuZ3RoPWUsdH0sci5jb25jYXQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsYSxpLG8scyxsLGM9W10sdT0hMCxoPTA7Zm9yKHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKShvPShhPWFyZ3VtZW50c1tyXSkubGVuZ3RoKSYmKGU/Yy5wdXNoKGEpOihlPWEsaT1vKSxuKGEpP3Q9ITE6KHU9ITEsaD90IT09YS5jb25zdHJ1Y3RvciYmKHQ9ITEpOnQ9YS5jb25zdHJ1Y3RvciksaCs9byk7aWYoIWgpcmV0dXJuW107aWYoIWMubGVuZ3RoKXJldHVybiBlO2lmKHUpcmV0dXJuIGUuY29uY2F0LmFwcGx5KGUsYyk7aWYodCl7Zm9yKChzPW5ldyB0KGgpKS5zZXQoZSkscj0wO3I8Yy5sZW5ndGg7cisrKWE9Y1tyXSxzLnNldChhLGkpLGkrPWEubGVuZ3RoO3JldHVybiBzfWZvcihzPW5ldyBBcnJheShoKSxsPTA7bDxlLmxlbmd0aDtsKyspc1tsXT1lW2xdO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspe2ZvcihhPWNbcl0sbD0wO2w8YS5sZW5ndGg7bCsrKXNbaStsXT1hW2xdO2krPWx9cmV0dXJuIHN9LHIubWF4Um93TGVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsTWF0aC5tYXgsMCl9LHIubWluUm93TGVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsTWF0aC5taW4sMS8wKX19LHt9XSw3MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0saT0vXlsnIiUsJCNccyddK3xbLCBdfFsnIiUsJCNccyddKyQvZztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYodD10LnJlcGxhY2UoaSwiIikpLG4odCk/TnVtYmVyKHQpOmF9fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY5MywiZmFzdC1pc251bWVyaWMiOjIyOH1dLDcwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9nbGNhbnZhcyYmZS5fZ2xjYW52YXMuc2l6ZSgpJiZlLl9nbGNhbnZhcy5lYWNoKGZ1bmN0aW9uKHQpe3QucmVnbCYmdC5yZWdsLmNsZWFyKHtjb2xvcjohMCxkZXB0aDohMH0pfSl9fSx7fV0sNzAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlciksZGVsZXRlIHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXIpfX0se31dLDcwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgidGlueWNvbG9yMiIpLGk9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlcyIpLHM9dCgiLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLGw9dCgiLi9uZXN0ZWRfcHJvcGVydHkiKSxjPXQoIi4vcmVnZXgiKS5jb3VudGVyLHU9dCgiLi9tb2QiKS5tb2RIYWxmLGg9dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZnVuY3Rpb24gZih0LGUpe3ZhciBuPXIudmFsT2JqZWN0TWV0YVtlLnZhbFR5cGVdO2lmKGUuYXJyYXlPayYmaCh0KSlyZXR1cm4hMDtpZihuLnZhbGlkYXRlRnVuY3Rpb24pcmV0dXJuIG4udmFsaWRhdGVGdW5jdGlvbih0LGUpO3ZhciBhPXt9LGk9YSxvPXtzZXQ6ZnVuY3Rpb24odCl7aT10fX07cmV0dXJuIG4uY29lcmNlRnVuY3Rpb24odCxvLGEsZSksaSE9PWF9ci52YWxPYmplY3RNZXRhPXtkYXRhX2FycmF5Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7aCh0KT9lLnNldCh0KTp2b2lkIDAhPT1yJiZlLnNldChyKX19LGVudW1lcmF0ZWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe24uY29lcmNlTnVtYmVyJiYodD0rdCksLTE9PT1uLnZhbHVlcy5pbmRleE9mKHQpP2Uuc2V0KHIpOmUuc2V0KHQpfSx2YWxpZGF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSl7ZS5jb2VyY2VOdW1iZXImJih0PSt0KTtmb3IodmFyIHI9ZS52YWx1ZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgYT1TdHJpbmcocltuXSk7aWYoIi8iPT09YS5jaGFyQXQoMCkmJiIvIj09PWEuY2hhckF0KGEubGVuZ3RoLTEpKXtpZihuZXcgUmVnRXhwKGEuc3Vic3RyKDEsYS5sZW5ndGgtMikpLnRlc3QodCkpcmV0dXJuITB9ZWxzZSBpZih0PT09cltuXSlyZXR1cm4hMH1yZXR1cm4hMX19LGJvb2xlYW46e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXshMD09PXR8fCExPT09dD9lLnNldCh0KTplLnNldChyKX19LG51bWJlcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsYSl7IW4odCl8fHZvaWQgMCE9PWEubWluJiZ0PGEubWlufHx2b2lkIDAhPT1hLm1heCYmdD5hLm1heD9lLnNldChyKTplLnNldCgrdCl9fSxpbnRlZ2VyOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixhKXt0JTF8fCFuKHQpfHx2b2lkIDAhPT1hLm1pbiYmdDxhLm1pbnx8dm9pZCAwIT09YS5tYXgmJnQ+YS5tYXg/ZS5zZXQocik6ZS5zZXQoK3QpfX0sc3RyaW5nOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBhPSJudW1iZXIiPT10eXBlb2YgdDshMCE9PW4uc3RyaWN0JiZhP2Uuc2V0KFN0cmluZyh0KSk6ZS5zZXQocil9ZWxzZSBuLm5vQmxhbmsmJiF0P2Uuc2V0KHIpOmUuc2V0KHQpfX0sY29sb3I6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXthKHQpLmlzVmFsaWQoKT9lLnNldCh0KTplLnNldChyKX19LGNvbG9ybGlzdDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe0FycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoJiZ0LmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiBhKHQpLmlzVmFsaWQoKX0pP2Uuc2V0KHQpOmUuc2V0KHIpfX0sY29sb3JzY2FsZTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe2Uuc2V0KG8uZ2V0KHQscikpfX0sYW5nbGU6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXsiYXV0byI9PT10P2Uuc2V0KCJhdXRvIik6bih0KT9lLnNldCh1KCt0LDM2MCkpOmUuc2V0KHIpfX0sc3VicGxvdGlkOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXt2YXIgYT1uLnJlZ2V4fHxjKHIpOyJzdHJpbmciPT10eXBlb2YgdCYmYS50ZXN0KHQpP2Uuc2V0KHQpOmUuc2V0KHIpfSx2YWxpZGF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5kZmx0O3JldHVybiB0PT09cnx8InN0cmluZyI9PXR5cGVvZiB0JiYhIWMocikudGVzdCh0KX19LGZsYWdsaXN0Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXtpZigic3RyaW5nIj09dHlwZW9mIHQpaWYoLTE9PT0obi5leHRyYXN8fFtdKS5pbmRleE9mKHQpKXtmb3IodmFyIGE9dC5zcGxpdCgiKyIpLGk9MDtpPGEubGVuZ3RoOyl7dmFyIG89YVtpXTstMT09PW4uZmxhZ3MuaW5kZXhPZihvKXx8YS5pbmRleE9mKG8pPGk/YS5zcGxpY2UoaSwxKTppKyt9YS5sZW5ndGg/ZS5zZXQoYS5qb2luKCIrIikpOmUuc2V0KHIpfWVsc2UgZS5zZXQodCk7ZWxzZSBlLnNldChyKX19LGFueTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXQ/ZS5zZXQocik6ZS5zZXQodCl9fSxpbmZvX2FycmF5Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUsbixhKXtmdW5jdGlvbiBpKHQsZSxuKXt2YXIgYSxpPXtzZXQ6ZnVuY3Rpb24odCl7YT10fX07cmV0dXJuIHZvaWQgMD09PW4mJihuPWUuZGZsdCksci52YWxPYmplY3RNZXRhW2UudmFsVHlwZV0uY29lcmNlRnVuY3Rpb24odCxpLG4sZSksYX12YXIgbz0yPT09YS5kaW1lbnNpb25zfHwiMS0yIj09PWEuZGltZW5zaW9ucyYmQXJyYXkuaXNBcnJheSh0KSYmQXJyYXkuaXNBcnJheSh0WzBdKTtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgcyxsLGMsdSxoLGYscD1hLml0ZW1zLGQ9W10sZz1BcnJheS5pc0FycmF5KHApLHY9ZyYmbyYmQXJyYXkuaXNBcnJheShwWzBdKSxtPW8mJmcmJiF2LHk9ZyYmIW0/cC5sZW5ndGg6dC5sZW5ndGg7aWYobj1BcnJheS5pc0FycmF5KG4pP246W10sbylmb3Iocz0wO3M8eTtzKyspZm9yKGRbc109W10sYz1BcnJheS5pc0FycmF5KHRbc10pP3Rbc106W10saD1tP3AubGVuZ3RoOmc/cFtzXS5sZW5ndGg6Yy5sZW5ndGgsbD0wO2w8aDtsKyspdT1tP3BbbF06Zz9wW3NdW2xdOnAsdm9pZCAwIT09KGY9aShjW2xdLHUsKG5bc118fFtdKVtsXSkpJiYoZFtzXVtsXT1mKTtlbHNlIGZvcihzPTA7czx5O3MrKyl2b2lkIDAhPT0oZj1pKHRbc10sZz9wW3NdOnAsbltzXSkpJiYoZFtzXT1mKTtlLnNldChkKX1lbHNlIGUuc2V0KG4pfSx2YWxpZGF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuITE7dmFyIHI9ZS5pdGVtcyxuPUFycmF5LmlzQXJyYXkociksYT0yPT09ZS5kaW1lbnNpb25zO2lmKCFlLmZyZWVMZW5ndGgmJnQubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspaWYoYSl7aWYoIUFycmF5LmlzQXJyYXkodFtpXSl8fCFlLmZyZWVMZW5ndGgmJnRbaV0ubGVuZ3RoIT09cltpXS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvPTA7bzx0W2ldLmxlbmd0aDtvKyspaWYoIWYodFtpXVtvXSxuP3JbaV1bb106cikpcmV0dXJuITF9ZWxzZSBpZighZih0W2ldLG4/cltpXTpyKSlyZXR1cm4hMTtyZXR1cm4hMH19fSxyLmNvZXJjZT1mdW5jdGlvbih0LGUsbixhLGkpe3ZhciBvPWwobixhKS5nZXQoKSxzPWwodCxhKSxjPWwoZSxhKSx1PXMuZ2V0KCkscD1lLl90ZW1wbGF0ZTtpZih2b2lkIDA9PT11JiZwJiYodT1sKHAsYSkuZ2V0KCkscD0wKSx2b2lkIDA9PT1pJiYoaT1vLmRmbHQpLG8uYXJyYXlPayYmaCh1KSlyZXR1cm4gYy5zZXQodSksdTt2YXIgZD1yLnZhbE9iamVjdE1ldGFbby52YWxUeXBlXS5jb2VyY2VGdW5jdGlvbjtkKHUsYyxpLG8pO3ZhciBnPWMuZ2V0KCk7cmV0dXJuIHAmJmc9PT1pJiYhZih1LG8pJiYoZCh1PWwocCxhKS5nZXQoKSxjLGksbyksZz1jLmdldCgpKSxnfSxyLmNvZXJjZTI9ZnVuY3Rpb24odCxlLG4sYSxpKXt2YXIgbz1sKHQsYSkscz1yLmNvZXJjZSh0LGUsbixhLGkpLGM9by5nZXQoKTtyZXR1cm4gbnVsbCE9YyYmc30sci5jb2VyY2VGb250PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj17fTtyZXR1cm4gcj1yfHx7fSxuLmZhbWlseT10KGUrIi5mYW1pbHkiLHIuZmFtaWx5KSxuLnNpemU9dChlKyIuc2l6ZSIsci5zaXplKSxuLmNvbG9yPXQoZSsiLmNvbG9yIixyLmNvbG9yKSxufSxyLmNvZXJjZUhvdmVyaW5mbz1mdW5jdGlvbih0LGUsbil7dmFyIGEsbz1lLl9tb2R1bGUuYXR0cmlidXRlcyxzPW8uaG92ZXJpbmZvP286aSxsPXMuaG92ZXJpbmZvO2lmKDE9PT1uLl9kYXRhTGVuZ3RoKXt2YXIgYz0iYWxsIj09PWwuZGZsdD9sLmZsYWdzLnNsaWNlKCk6bC5kZmx0LnNwbGl0KCIrIik7Yy5zcGxpY2UoYy5pbmRleE9mKCJuYW1lIiksMSksYT1jLmpvaW4oIisiKX1yZXR1cm4gci5jb2VyY2UodCxlLHMsImhvdmVyaW5mbyIsYSl9LHIuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eT1mdW5jdGlvbih0LGUpe2lmKHQubWFya2VyKXt2YXIgcixuLGE9dC5tYXJrZXIub3BhY2l0eTtpZih2b2lkIDAhPT1hKWgoYSl8fHQuc2VsZWN0ZWR8fHQudW5zZWxlY3RlZHx8KHI9YSxuPXMqYSksZSgic2VsZWN0ZWQubWFya2VyLm9wYWNpdHkiLHIpLGUoInVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHkiLG4pfX0sci52YWxpZGF0ZT1mfSx7Ii4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXMiOjYwNywiLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NjkyLCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4vYXJyYXkiOjcwMCwiLi9tb2QiOjcyNCwiLi9uZXN0ZWRfcHJvcGVydHkiOjcyNSwiLi9yZWdleCI6NzMzLCJmYXN0LWlzbnVtZXJpYyI6MjI4LHRpbnljb2xvcjI6NTM2fV0sNzA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGEsaT10KCJkMyIpLG89dCgiZmFzdC1pc251bWVyaWMiKSxzPXQoIi4vbG9nZ2VycyIpLGw9dCgiLi9tb2QiKS5tb2QsYz10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIiksdT1jLkJBRE5VTSxoPWMuT05FREFZLGY9Yy5PTkVIT1VSLHA9Yy5PTkVNSU4sZD1jLk9ORVNFQyxnPWMuRVBPQ0hKRCx2PXQoIi4uL3JlZ2lzdHJ5IiksbT1pLnRpbWUuZm9ybWF0LnV0Yyx5PS9eXHMqKC0/XGRcZFxkXGR8XGRcZCkoLShcZD9cZCkoLShcZD9cZCkoWyBUdF0oWzAxXT9cZHwyWzAtM10pKDooWzAtNV1cZCkoOihbMC01XVxkKFwuXGQrKT8pKT8oWnx6fFsrXC1dXGRcZDo/XGRcZCk/KT8pPyk/KT9ccyokL20seD0vXlxzKigtP1xkXGRcZFxkfFxkXGQpKC0oXGQ/XGRpPykoLShcZD9cZCkoWyBUdF0oWzAxXT9cZHwyWzAtM10pKDooWzAtNV1cZCkoOihbMC01XVxkKFwuXGQrKT8pKT8oWnx6fFsrXC1dXGRcZDo/XGRcZCk/KT8pPyk/KT9ccyokL20sYj0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktNzA7ZnVuY3Rpb24gXyh0KXtyZXR1cm4gdCYmdi5jb21wb25lbnRzUmVnaXN0cnkuY2FsZW5kYXJzJiYic3RyaW5nIj09dHlwZW9mIHQmJiJncmVnb3JpYW4iIT09dH1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIFN0cmluZyh0K01hdGgucG93KDEwLGUpKS5zdWJzdHIoMSl9ci5kYXRlVGljazA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gXyh0KT9lP3YuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJDQU5PTklDQUxfU1VOREFZIilbdF06di5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsIkNBTk9OSUNBTF9USUNLIilbdF06ZT8iMjAwMC0wMS0wMiI6IjIwMDAtMDEtMDEifSxyLmRmbHRSYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gXyh0KT92LmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiREZMVFJBTkdFIilbdF06WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdfSxyLmlzSlNEYXRlPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmdldFRpbWV9LHIuZGF0ZVRpbWUybXM9ZnVuY3Rpb24odCxlKXtpZihyLmlzSlNEYXRlKHQpKXt2YXIgaT10LmdldFRpbWV6b25lT2Zmc2V0KCkqcCxvPSh0LmdldFVUQ01pbnV0ZXMoKS10LmdldE1pbnV0ZXMoKSkqcCsodC5nZXRVVENTZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkpKmQrKHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCktdC5nZXRNaWxsaXNlY29uZHMoKSk7aWYobyl7dmFyIHM9MypwO2k9aS1zLzIrbChvLWkrcy8yLHMpfXJldHVybih0PU51bWJlcih0KS1pKT49biYmdDw9YT90OnV9aWYoInN0cmluZyIhPXR5cGVvZiB0JiYibnVtYmVyIiE9dHlwZW9mIHQpcmV0dXJuIHU7dD1TdHJpbmcodCk7dmFyIGM9XyhlKSxtPXQuY2hhckF0KDApOyFjfHwiRyIhPT1tJiYiZyIhPT1tfHwodD10LnN1YnN0cigxKSxlPSIiKTt2YXIgdz1jJiYiY2hpbmVzZSI9PT1lLnN1YnN0cigwLDcpLGs9dC5tYXRjaCh3P3g6eSk7aWYoIWspcmV0dXJuIHU7dmFyIFQ9a1sxXSxNPWtbM118fCIxIixBPU51bWJlcihrWzVdfHwxKSxTPU51bWJlcihrWzddfHwwKSxFPU51bWJlcihrWzldfHwwKSxMPU51bWJlcihrWzExXXx8MCk7aWYoYyl7aWYoMj09PVQubGVuZ3RoKXJldHVybiB1O3ZhciBDO1Q9TnVtYmVyKFQpO3RyeXt2YXIgUD12LmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikoZSk7aWYodyl7dmFyIE89ImkiPT09TS5jaGFyQXQoTS5sZW5ndGgtMSk7TT1wYXJzZUludChNLDEwKSxDPVAubmV3RGF0ZShULFAudG9Nb250aEluZGV4KFQsTSxPKSxBKX1lbHNlIEM9UC5uZXdEYXRlKFQsTnVtYmVyKE0pLEEpfWNhdGNoKHQpe3JldHVybiB1fXJldHVybiBDPyhDLnRvSkQoKS1nKSpoK1MqZitFKnArTCpkOnV9VD0yPT09VC5sZW5ndGg/KE51bWJlcihUKSsyZTMtYiklMTAwK2I6TnVtYmVyKFQpLE0tPTE7dmFyIHo9bmV3IERhdGUoRGF0ZS5VVEMoMmUzLE0sQSxTLEUpKTtyZXR1cm4gei5zZXRVVENGdWxsWWVhcihUKSx6LmdldFVUQ01vbnRoKCkhPT1NP3U6ei5nZXRVVENEYXRlKCkhPT1BP3U6ei5nZXRUaW1lKCkrTCpkfSxuPXIuTUlOX01TPXIuZGF0ZVRpbWUybXMoIi05OTk5IiksYT1yLk1BWF9NUz1yLmRhdGVUaW1lMm1zKCI5OTk5LTEyLTMxIDIzOjU5OjU5Ljk5OTkiKSxyLmlzRGF0ZVRpbWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kYXRlVGltZTJtcyh0LGUpIT09dX07dmFyIGs9OTAqaCxUPTMqZixNPTUqcDtmdW5jdGlvbiBBKHQsZSxyLG4sYSl7aWYoKGV8fHJ8fG58fGEpJiYodCs9IiAiK3coZSwyKSsiOiIrdyhyLDIpLChufHxhKSYmKHQrPSI6Iit3KG4sMiksYSkpKXtmb3IodmFyIGk9NDthJTEwPT0wOylpLT0xLGEvPTEwO3QrPSIuIit3KGEsaSl9cmV0dXJuIHR9ci5tczJEYXRlVGltZT1mdW5jdGlvbih0LGUscil7aWYoIm51bWJlciIhPXR5cGVvZiB0fHwhKHQ+PW4mJnQ8PWEpKXJldHVybiB1O2V8fChlPTApO3ZhciBpLG8scyxjLHkseCxiPU1hdGguZmxvb3IoMTAqbCh0Ky4wNSwxKSksdz1NYXRoLnJvdW5kKHQtYi8xMCk7aWYoXyhyKSl7dmFyIFM9TWF0aC5mbG9vcih3L2gpK2csRT1NYXRoLmZsb29yKGwodCxoKSk7dHJ5e2k9di5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImdldENhbCIpKHIpLmZyb21KRChTKS5mb3JtYXREYXRlKCJ5eXl5LW1tLWRkIil9Y2F0Y2godCl7aT1tKCJHJVktJW0tJWQiKShuZXcgRGF0ZSh3KSl9aWYoIi0iPT09aS5jaGFyQXQoMCkpZm9yKDtpLmxlbmd0aDwxMTspaT0iLTAiK2kuc3Vic3RyKDEpO2Vsc2UgZm9yKDtpLmxlbmd0aDwxMDspaT0iMCIraTtvPWU8az9NYXRoLmZsb29yKEUvZik6MCxzPWU8az9NYXRoLmZsb29yKEUlZi9wKTowLGM9ZTxUP01hdGguZmxvb3IoRSVwL2QpOjAseT1lPE0/RSVkKjEwK2I6MH1lbHNlIHg9bmV3IERhdGUodyksaT1tKCIlWS0lbS0lZCIpKHgpLG89ZTxrP3guZ2V0VVRDSG91cnMoKTowLHM9ZTxrP3guZ2V0VVRDTWludXRlcygpOjAsYz1lPFQ/eC5nZXRVVENTZWNvbmRzKCk6MCx5PWU8TT8xMCp4LmdldFVUQ01pbGxpc2Vjb25kcygpK2I6MDtyZXR1cm4gQShpLG8scyxjLHkpfSxyLm1zMkRhdGVUaW1lTG9jYWw9ZnVuY3Rpb24odCl7aWYoISh0Pj1uK2gmJnQ8PWEtaCkpcmV0dXJuIHU7dmFyIGU9TWF0aC5mbG9vcigxMCpsKHQrLjA1LDEpKSxyPW5ldyBEYXRlKE1hdGgucm91bmQodC1lLzEwKSk7cmV0dXJuIEEoaS50aW1lLmZvcm1hdCgiJVktJW0tJWQiKShyKSxyLmdldEhvdXJzKCksci5nZXRNaW51dGVzKCksci5nZXRTZWNvbmRzKCksMTAqci5nZXRVVENNaWxsaXNlY29uZHMoKStlKX0sci5jbGVhbkRhdGU9ZnVuY3Rpb24odCxlLG4pe2lmKHQ9PT11KXJldHVybiBlO2lmKHIuaXNKU0RhdGUodCl8fCJudW1iZXIiPT10eXBlb2YgdCYmaXNGaW5pdGUodCkpe2lmKF8obikpcmV0dXJuIHMuZXJyb3IoIkpTIERhdGVzIGFuZCBtaWxsaXNlY29uZHMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHdvcmxkIGNhbGVuZGFycyIsdCksZTtpZighKHQ9ci5tczJEYXRlVGltZUxvY2FsKCt0KSkmJnZvaWQgMCE9PWUpcmV0dXJuIGV9ZWxzZSBpZighci5pc0RhdGVUaW1lKHQsbikpcmV0dXJuIHMuZXJyb3IoInVucmVjb2duaXplZCBkYXRlIix0KSxlO3JldHVybiB0fTt2YXIgUz0vJVxkP2YvZztmdW5jdGlvbiBFKHQsZSxyLG4pe3Q9dC5yZXBsYWNlKFMsZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5taW4oK3QuY2hhckF0KDEpfHw2LDYpO3JldHVybihlLzFlMyUxKzIpLnRvRml4ZWQocikuc3Vic3RyKDIpLnJlcGxhY2UoLzArJC8sIiIpfHwiMCJ9KTt2YXIgYT1uZXcgRGF0ZShNYXRoLmZsb29yKGUrLjA1KSk7aWYoXyhuKSl0cnl7dD12LmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwid29ybGRDYWxGbXQiKSh0LGUsbil9Y2F0Y2godCl7cmV0dXJuIkludmFsaWQifXJldHVybiByKHQpKGEpfXZhciBMPVs1OSw1OS45LDU5Ljk5LDU5Ljk5OSw1OS45OTk5XTtyLmZvcm1hdERhdGU9ZnVuY3Rpb24odCxlLHIsbixhLGkpe2lmKGE9XyhhKSYmYSwhZSlpZigieSI9PT1yKWU9aS55ZWFyO2Vsc2UgaWYoIm0iPT09cillPWkubW9udGg7ZWxzZXtpZigiZCIhPT1yKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWwodCsuMDUsaCksbj13KE1hdGguZmxvb3Ioci9mKSwyKSsiOiIrdyhsKE1hdGguZmxvb3Ioci9wKSw2MCksMik7aWYoIk0iIT09ZSl7byhlKXx8KGU9MCk7dmFyIGE9KDEwMCtNYXRoLm1pbihsKHQvZCw2MCksTFtlXSkpLnRvRml4ZWQoZSkuc3Vic3RyKDEpO2U+MCYmKGE9YS5yZXBsYWNlKC8wKyQvLCIiKS5yZXBsYWNlKC9bXC5dJC8sIiIpKSxuKz0iOiIrYX1yZXR1cm4gbn0odCxyKSsiXG4iK0UoaS5kYXlNb250aFllYXIsdCxuLGEpO2U9aS5kYXlNb250aCsiXG4iK2kueWVhcn1yZXR1cm4gRShlLHQsbixhKX07dmFyIEM9MypoO3IuaW5jcmVtZW50TW9udGg9ZnVuY3Rpb24odCxlLHIpe3I9XyhyKSYmcjt2YXIgbj1sKHQsaCk7aWYodD1NYXRoLnJvdW5kKHQtbikscil0cnl7dmFyIGE9TWF0aC5yb3VuZCh0L2gpK2csaT12LmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikociksbz1pLmZyb21KRChhKTtyZXR1cm4gZSUxMj9pLmFkZChvLGUsIm0iKTppLmFkZChvLGUvMTIsInkiKSwoby50b0pEKCktZykqaCtufWNhdGNoKGUpe3MuZXJyb3IoImludmFsaWQgbXMgIit0KyIgaW4gY2FsZW5kYXIgIityKX12YXIgYz1uZXcgRGF0ZSh0K0MpO3JldHVybiBjLnNldFVUQ01vbnRoKGMuZ2V0VVRDTW9udGgoKStlKStuLUN9LHIuZmluZEV4YWN0RGF0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixhPTAsaT0wLHM9MCxsPTAsYz1fKGUpJiZ2LmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikoZSksdT0wO3U8dC5sZW5ndGg7dSsrKWlmKG49dFt1XSxvKG4pKXtpZighKG4laCkpaWYoYyl0cnl7MT09PShyPWMuZnJvbUpEKG4vaCtnKSkuZGF5KCk/MT09PXIubW9udGgoKT9hKys6aSsrOnMrK31jYXRjaCh0KXt9ZWxzZSAxPT09KHI9bmV3IERhdGUobikpLmdldFVUQ0RhdGUoKT8wPT09ci5nZXRVVENNb250aCgpP2ErKzppKys6cysrfWVsc2UgbCsrO3MrPWkrPWE7dmFyIGY9dC5sZW5ndGgtbDtyZXR1cm57ZXhhY3RZZWFyczphL2YsZXhhY3RNb250aHM6aS9mLGV4YWN0RGF5czpzL2Z9fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2OTMsIi4uL3JlZ2lzdHJ5Ijo4NDYsIi4vbG9nZ2VycyI6NzIxLCIuL21vZCI6NzI0LGQzOjE2NSwiZmFzdC1pc251bWVyaWMiOjIyOH1dLDcwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi9sb2dnZXJzIik7ZnVuY3Rpb24gaSh0KXt2YXIgZT10JiZ0LnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0KX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj0icGxvdGx5LmpzLXN0eWxlLSIrdCxpPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG4pO2l8fCgoaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoImlkIixuKSxpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChpKSk7dmFyIG89aS5zaGVldDtvLmluc2VydFJ1bGU/by5pbnNlcnRSdWxlKGUrInsiK3IrIn0iLDApOm8uYWRkUnVsZT9vLmFkZFJ1bGUoZSxyLDApOmEud2FybigiYWRkU3R5bGVSdWxlIGZhaWxlZCIpfWUuZXhwb3J0cz17Z2V0R3JhcGhEaXY6ZnVuY3Rpb24odCl7dmFyIGU7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZihudWxsPT09KGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCkpKXRocm93IG5ldyBFcnJvcigiTm8gRE9NIGVsZW1lbnQgd2l0aCBpZCAnIit0KyInIGV4aXN0cyBvbiB0aGUgcGFnZS4iKTtyZXR1cm4gZX1pZihudWxsPT10KXRocm93IG5ldyBFcnJvcigiRE9NIGVsZW1lbnQgcHJvdmlkZWQgaXMgbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gdH0saXNQbG90RGl2OmZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpO3JldHVybiBlLm5vZGUoKWluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmUuc2l6ZSgpJiZlLmNsYXNzZWQoImpzLXBsb3RseS1wbG90Iil9LHJlbW92ZUVsZW1lbnQ6aSxhZGRTdHlsZVJ1bGU6ZnVuY3Rpb24odCxlKXtvKCJnbG9iYWwiLHQsZSl9LGFkZFJlbGF0ZWRTdHlsZVJ1bGU6byxkZWxldGVSZWxhdGVkU3R5bGVSdWxlOmZ1bmN0aW9uKHQpe3ZhciBlPSJwbG90bHkuanMtc3R5bGUtIit0LHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7ciYmaShyKX19fSx7Ii4vbG9nZ2VycyI6NzIxLGQzOjE2NX1dLDcwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJldmVudHMiKS5FdmVudEVtaXR0ZXIsYT17aW5pdDpmdW5jdGlvbih0KXtpZih0Ll9ldiBpbnN0YW5jZW9mIG4pcmV0dXJuIHQ7dmFyIGU9bmV3IG4scj1uZXcgbjtyZXR1cm4gdC5fZXY9ZSx0Ll9pbnRlcm5hbEV2PXIsdC5vbj1lLm9uLmJpbmQoZSksdC5vbmNlPWUub25jZS5iaW5kKGUpLHQucmVtb3ZlTGlzdGVuZXI9ZS5yZW1vdmVMaXN0ZW5lci5iaW5kKGUpLHQucmVtb3ZlQWxsTGlzdGVuZXJzPWUucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoZSksdC5faW50ZXJuYWxPbj1yLm9uLmJpbmQociksdC5faW50ZXJuYWxPbmNlPXIub25jZS5iaW5kKHIpLHQuX3JlbW92ZUludGVybmFsTGlzdGVuZXI9ci5yZW1vdmVMaXN0ZW5lci5iaW5kKHIpLHQuX3JlbW92ZUFsbEludGVybmFsTGlzdGVuZXJzPXIucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQociksdC5lbWl0PWZ1bmN0aW9uKG4sYSl7InVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkmJmpRdWVyeSh0KS50cmlnZ2VyKG4sYSksZS5lbWl0KG4sYSksci5lbWl0KG4sYSl9LHR9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhOyJ1bmRlZmluZWQiIT10eXBlb2YgalF1ZXJ5JiYobj1qUXVlcnkodCkudHJpZ2dlckhhbmRsZXIoZSxyKSk7dmFyIGk9dC5fZXY7aWYoIWkpcmV0dXJuIG47dmFyIG8scz1pLl9ldmVudHNbZV07aWYoIXMpcmV0dXJuIG47ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC5saXN0ZW5lcj8oaS5yZW1vdmVMaXN0ZW5lcihlLHQubGlzdGVuZXIpLHQuZmlyZWQ/dm9pZCAwOih0LmZpcmVkPSEwLHQubGlzdGVuZXIuYXBwbHkoaSxbcl0pKSk6dC5hcHBseShpLFtyXSl9Zm9yKHM9QXJyYXkuaXNBcnJheShzKT9zOltzXSxvPTA7bzxzLmxlbmd0aC0xO28rKylsKHNbb10pO3JldHVybiBhPWwoc1tvXSksdm9pZCAwIT09bj9uOmF9LHB1cmdlOmZ1bmN0aW9uKHQpe3JldHVybiBkZWxldGUgdC5fZXYsZGVsZXRlIHQub24sZGVsZXRlIHQub25jZSxkZWxldGUgdC5yZW1vdmVMaXN0ZW5lcixkZWxldGUgdC5yZW1vdmVBbGxMaXN0ZW5lcnMsZGVsZXRlIHQuZW1pdCxkZWxldGUgdC5fZXYsZGVsZXRlIHQuX2ludGVybmFsRXYsZGVsZXRlIHQuX2ludGVybmFsT24sZGVsZXRlIHQuX2ludGVybmFsT25jZSxkZWxldGUgdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcixkZWxldGUgdC5fcmVtb3ZlQWxsSW50ZXJuYWxMaXN0ZW5lcnMsdH19O2UuZXhwb3J0cz1hfSx7ZXZlbnRzOjEwNn1dLDcwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzX3BsYWluX29iamVjdC5qcyIpLGE9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBpKHQsZSxyLG8pe3ZhciBzLGwsYyx1LGgsZixwPXRbMF0sZD10Lmxlbmd0aDtpZigyPT09ZCYmYShwKSYmYSh0WzFdKSYmMD09PXAubGVuZ3RoKXtpZihmdW5jdGlvbih0LGUpe3ZhciByLG47Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7aWYobnVsbCE9PShuPXRbcl0pJiYib2JqZWN0Ij09dHlwZW9mIG4pcmV0dXJuITE7dm9pZCAwIT09biYmKGVbcl09bil9cmV0dXJuITB9KHRbMV0scCkpcmV0dXJuIHA7cC5zcGxpY2UoMCxwLmxlbmd0aCl9Zm9yKHZhciBnPTE7ZzxkO2crKylmb3IobCBpbiBzPXRbZ10pYz1wW2xdLHU9c1tsXSxvJiZhKHUpP3BbbF09dTplJiZ1JiYobih1KXx8KGg9YSh1KSkpPyhoPyhoPSExLGY9YyYmYShjKT9jOltdKTpmPWMmJm4oYyk/Yzp7fSxwW2xdPWkoW2YsdV0sZSxyLG8pKTooInVuZGVmaW5lZCIhPXR5cGVvZiB1fHxyKSYmKHBbbF09dSk7cmV0dXJuIHB9ci5leHRlbmRGbGF0PWZ1bmN0aW9uKCl7cmV0dXJuIGkoYXJndW1lbnRzLCExLCExLCExKX0sci5leHRlbmREZWVwPWZ1bmN0aW9uKCl7cmV0dXJuIGkoYXJndW1lbnRzLCEwLCExLCExKX0sci5leHRlbmREZWVwQWxsPWZ1bmN0aW9uKCl7cmV0dXJuIGkoYXJndW1lbnRzLCEwLCEwLCExKX0sci5leHRlbmREZWVwTm9BcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gaShhcmd1bWVudHMsITAsITEsITApfX0seyIuL2lzX3BsYWluX29iamVjdC5qcyI6NzE4fV0sNzA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj1bXSxuPTAsYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgaT10W2FdOzEhPT1lW2ldJiYoZVtpXT0xLHJbbisrXT1pKX1yZXR1cm4gcn19LHt9XSw3MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4hMD09PXQudmlzaWJsZX1mdW5jdGlvbiBhKHQpe3ZhciBlPXRbMF0udHJhY2U7cmV0dXJuITA9PT1lLnZpc2libGUmJjAhPT1lLl9sZW5ndGh9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPShlPXQsQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheShlWzBdKSYmZVswXVswXSYmZVswXVswXS50cmFjZT9hOm4pLGk9W10sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO3IocykmJmkucHVzaChzKX1yZXR1cm4gaX19LHt9XSw3MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoImNvdW50cnktcmVnZXgiKSxpPXQoIkB0dXJmL2FyZWEiKSxvPXQoIkB0dXJmL2NlbnRyb2lkIikscz10KCJAdHVyZi9iYm94IiksbD10KCIuL2lkZW50aXR5IiksYz10KCIuL2xvZ2dlcnMiKSx1PXQoIi4vaXNfcGxhaW5fb2JqZWN0IiksaD10KCIuL25lc3RlZF9wcm9wZXJ0eSIpLGY9dCgiLi9wb2x5Z29uIikscD1PYmplY3Qua2V5cyhhKSxkPXsiSVNPLTMiOmwsIlVTQS1zdGF0ZXMiOmwsImNvdW50cnkgbmFtZXMiOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8cC5sZW5ndGg7ZSsrKXt2YXIgcj1wW2VdLG49bmV3IFJlZ0V4cChhW3JdKTtpZihuLnRlc3QodC50cmltKCkudG9Mb3dlckNhc2UoKSkpcmV0dXJuIHJ9cmV0dXJuIGMubG9nKCJVbnJlY29nbml6ZWQgY291bnRyeSBuYW1lOiAiK3QrIi4iKSwhMX19O2Z1bmN0aW9uIGcodCl7dmFyIGU9dC5nZW9qc29uLHI9d2luZG93LlBsb3RseUdlb0Fzc2V0c3x8e30sbj0ic3RyaW5nIj09dHlwZW9mIGU/cltlXTplO3JldHVybiB1KG4pP246KGMuZXJyb3IoIk9vcHMgLi4uIHNvbWV0aGluZyB3ZW50IHdyb25nIHdoZW4gZmV0Y2hpbmcgIitlKSwhMSl9ZS5leHBvcnRzPXtsb2NhdGlvblRvRmVhdHVyZTpmdW5jdGlvbih0LGUscil7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4hMTt2YXIgbixhLGksbz1kW3RdKGUpO2lmKG8pe2lmKCJVU0Etc3RhdGVzIj09PXQpZm9yKG49W10saT0wO2k8ci5sZW5ndGg7aSsrKShhPXJbaV0pLnByb3BlcnRpZXMmJmEucHJvcGVydGllcy5ndSYmIlVTQSI9PT1hLnByb3BlcnRpZXMuZ3UmJm4ucHVzaChhKTtlbHNlIG49cjtmb3IoaT0wO2k8bi5sZW5ndGg7aSsrKWlmKChhPW5baV0pLmlkPT09bylyZXR1cm4gYTtjLmxvZyhbIkxvY2F0aW9uIHdpdGggaWQiLG8sImRvZXMgbm90IGhhdmUgYSBtYXRjaGluZyB0b3BvanNvbiBmZWF0dXJlIGF0IHRoaXMgcmVzb2x1dGlvbi4iXS5qb2luKCIgIikpfXJldHVybiExfSxmZWF0dXJlMnBvbHlnb25zOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhLGk9dC5nZW9tZXRyeSxvPWkuY29vcmRpbmF0ZXMscz10LmlkLGw9W107ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoLTE7ZSsrKWlmKHRbZV1bMF0+MCYmdFtlKzFdWzBdPDApcmV0dXJuIGU7cmV0dXJuIG51bGx9c3dpdGNoKGU9IlJVUyI9PT1zfHwiRkpJIj09PXM/ZnVuY3Rpb24odCl7dmFyIGU7aWYobnVsbD09PWModCkpZT10O2Vsc2UgZm9yKGU9bmV3IEFycmF5KHQubGVuZ3RoKSxhPTA7YTx0Lmxlbmd0aDthKyspZVthXT1bdFthXVswXTwwP3RbYV1bMF0rMzYwOnRbYV1bMF0sdFthXVsxXV07bC5wdXNoKGYudGVzdGVyKGUpKX06IkFUQSI9PT1zP2Z1bmN0aW9uKHQpe3ZhciBlPWModCk7aWYobnVsbD09PWUpcmV0dXJuIGwucHVzaChmLnRlc3Rlcih0KSk7dmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKzEpLG49MDtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKWE+ZT9yW24rK109W3RbYV1bMF0rMzYwLHRbYV1bMV1dOmE9PT1lPyhyW24rK109dFthXSxyW24rK109W3RbYV1bMF0sLTkwXSk6cltuKytdPXRbYV07dmFyIGk9Zi50ZXN0ZXIocik7aS5wdHMucG9wKCksbC5wdXNoKGkpfTpmdW5jdGlvbih0KXtsLnB1c2goZi50ZXN0ZXIodCkpfSxpLnR5cGUpe2Nhc2UiTXVsdGlQb2x5Z29uIjpmb3Iocj0wO3I8by5sZW5ndGg7cisrKWZvcihuPTA7bjxvW3JdLmxlbmd0aDtuKyspZShvW3JdW25dKTticmVhaztjYXNlIlBvbHlnb24iOmZvcihyPTA7cjxvLmxlbmd0aDtyKyspZShvW3JdKX1yZXR1cm4gbH0sZ2V0VHJhY2VHZW9qc29uOmcsZXh0cmFjdFRyYWNlRmVhdHVyZTpmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ZyhlKTtpZighcilyZXR1cm4hMTt2YXIgbixhPXt9LHM9W107Zm9yKG49MDtuPGUuX2xlbmd0aDtuKyspe3ZhciBsPXRbbl07KGwubG9jfHwwPT09bC5sb2MpJiYoYVtsLmxvY109bCl9ZnVuY3Rpb24gdSh0KXt2YXIgcj1oKHQsZS5mZWF0dXJlaWRrZXl8fCJpZCIpLmdldCgpLG49YVtyXTtpZihuKXt2YXIgbD10Lmdlb21ldHJ5O2lmKCJQb2x5Z29uIj09PWwudHlwZXx8Ik11bHRpUG9seWdvbiI9PT1sLnR5cGUpe3ZhciB1PXt0eXBlOiJGZWF0dXJlIixpZDpyLGdlb21ldHJ5OmwscHJvcGVydGllczp7fX07dS5wcm9wZXJ0aWVzLmN0PWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5nZW9tZXRyeTtpZigiTXVsdGlQb2x5Z29uIj09PXIudHlwZSlmb3IodmFyIG49ci5jb29yZGluYXRlcyxhPTAscz0wO3M8bi5sZW5ndGg7cysrKXt2YXIgbD17dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6bltzXX0sYz1pLmRlZmF1bHQobCk7Yz5hJiYoYT1jLGU9bCl9ZWxzZSBlPXI7cmV0dXJuIG8uZGVmYXVsdChlKS5nZW9tZXRyeS5jb29yZGluYXRlc30odSksbi5mSW49dCxuLmZPdXQ9dSxzLnB1c2godSl9ZWxzZSBjLmxvZyhbIkxvY2F0aW9uIixuLmxvYywiZG9lcyBub3QgaGF2ZSBhIHZhbGlkIEdlb0pTT04gZ2VvbWV0cnkuIiwiVHJhY2VzIHdpdGggbG9jYXRpb25tb2RlICpnZW9qc29uLWlkKiBvbmx5IHN1cHBvcnQiLCIqUG9seWdvbiogYW5kICpNdWx0aVBvbHlnb24qIGdlb21ldHJpZXMuIl0uam9pbigiICIpKX1kZWxldGUgYVtyXX1zd2l0Y2goci50eXBlKXtjYXNlIkZlYXR1cmVDb2xsZWN0aW9uIjp2YXIgZj1yLmZlYXR1cmVzO2ZvcihuPTA7bjxmLmxlbmd0aDtuKyspdShmW25dKTticmVhaztjYXNlIkZlYXR1cmUiOnUocik7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gYy53YXJuKFsiSW52YWxpZCBHZW9KU09OIHR5cGUiLChyLnR5cGV8fCJub25lIikrIi4iLCJUcmFjZXMgd2l0aCBsb2NhdGlvbm1vZGUgKmdlb2pzb24taWQqIG9ubHkgc3VwcG9ydCIsIipGZWF0dXJlQ29sbGVjdGlvbiogYW5kICpGZWF0dXJlKiB0eXBlcy4iXS5qb2luKCIgIikpLCExfWZvcih2YXIgcCBpbiBhKWMubG9nKFsiTG9jYXRpb24gKiIrcCsiKiIsImRvZXMgbm90IGhhdmUgYSBtYXRjaGluZyBmZWF0dXJlIHdpdGggaWQta2V5IiwiKiIrZS5mZWF0dXJlaWRrZXkrIiouIl0uam9pbigiICIpKTtyZXR1cm4gc30sZmV0Y2hUcmFjZUdlb0RhdGE6ZnVuY3Rpb24odCl7dmFyIGU9d2luZG93LlBsb3RseUdlb0Fzc2V0c3x8e30scj1bXTtmdW5jdGlvbiBhKHQpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLGEpe24uanNvbih0LGZ1bmN0aW9uKG4saSl7aWYobil7ZGVsZXRlIGVbdF07dmFyIG89NDA0PT09bi5zdGF0dXM/J0dlb0pTT04gYXQgVVJMICInK3QrJyIgZG9lcyBub3QgZXhpc3QuJzoiVW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyBmcm9tICIrdDtyZXR1cm4gYShuZXcgRXJyb3IobykpfXJldHVybiBlW3RdPWkscihpKX0pfSl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixuKXt2YXIgYT0wLGk9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtyZXR1cm4gZVt0XSYmInBlbmRpbmciIT09ZVt0XT8oY2xlYXJJbnRlcnZhbChpKSxyKGVbdF0pKTphPjEwMD8oY2xlYXJJbnRlcnZhbChpKSxuKCJVbmV4cGVjdGVkIGVycm9yIHdoaWxlIGZldGNoaW5nIGZyb20gIit0KSk6dm9pZCBhKyt9LDUwKX0pfWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dWzBdLnRyYWNlLmdlb2pzb247InN0cmluZyI9PXR5cGVvZiBzJiYoZVtzXT8icGVuZGluZyI9PT1lW3NdJiZyLnB1c2goaShzKSk6KGVbc109InBlbmRpbmciLHIucHVzaChhKHMpKSkpfXJldHVybiByfSxjb21wdXRlQmJveDpmdW5jdGlvbih0KXtyZXR1cm4gcy5kZWZhdWx0KHQpfX19LHsiLi9pZGVudGl0eSI6NzE2LCIuL2lzX3BsYWluX29iamVjdCI6NzE4LCIuL2xvZ2dlcnMiOjcyMSwiLi9uZXN0ZWRfcHJvcGVydHkiOjcyNSwiLi9wb2x5Z29uIjo3MjksIkB0dXJmL2FyZWEiOjU3LCJAdHVyZi9iYm94Ijo1OCwiQHR1cmYvY2VudHJvaWQiOjU5LCJjb3VudHJ5LXJlZ2V4IjoxMzYsZDM6MTY1fV0sNzEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ci5jYWxjVHJhY2VUb0xpbmVDb29yZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0udHJhY2UuY29ubmVjdGdhcHMscj1bXSxhPVtdLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89dFtpXS5sb25sYXQ7b1swXSE9PW4/YS5wdXNoKG8pOiFlJiZhLmxlbmd0aD4wJiYoci5wdXNoKGEpLGE9W10pfXJldHVybiBhLmxlbmd0aD4wJiZyLnB1c2goYSkscn0sci5tYWtlTGluZT1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoP3t0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0WzBdfTp7dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fX0sci5tYWtlUG9seWdvbj1mdW5jdGlvbih0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOnR9O2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoO3IrKyllW3JdPVt0W3JdXTtyZXR1cm57dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczplfX0sci5tYWtlQmxhbms9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOltdfX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzfV0sNzEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGEsaSxvPXQoIi4vbW9kIikubW9kO2Z1bmN0aW9uIHModCxlLHIsbixhLGksbyxzKXt2YXIgbD1yLXQsYz1hLXQsdT1vLWEsaD1uLWUsZj1pLWUscD1zLWksZD1sKnAtdSpoO2lmKDA9PT1kKXJldHVybiBudWxsO3ZhciBnPShjKnAtdSpmKS9kLHY9KGMqaC1sKmYpL2Q7cmV0dXJuIHY8MHx8dj4xfHxnPDB8fGc+MT9udWxsOnt4OnQrbCpnLHk6ZStoKmd9fWZ1bmN0aW9uIGwodCxlLHIsbixhKXt2YXIgaT1uKnQrYSplO2lmKGk8MClyZXR1cm4gbipuK2EqYTtpZihpPnIpe3ZhciBvPW4tdCxzPWEtZTtyZXR1cm4gbypvK3Mqc312YXIgbD1uKmUtYSp0O3JldHVybiBsKmwvcn1yLnNlZ21lbnRzSW50ZXJzZWN0PXMsci5zZWdtZW50RGlzdGFuY2U9ZnVuY3Rpb24odCxlLHIsbixhLGksbyxjKXtpZihzKHQsZSxyLG4sYSxpLG8sYykpcmV0dXJuIDA7dmFyIHU9ci10LGg9bi1lLGY9by1hLHA9Yy1pLGQ9dSp1K2gqaCxnPWYqZitwKnAsdj1NYXRoLm1pbihsKHUsaCxkLGEtdCxpLWUpLGwodSxoLGQsby10LGMtZSksbChmLHAsZyx0LWEsZS1pKSxsKGYscCxnLHItYSxuLWkpKTtyZXR1cm4gTWF0aC5zcXJ0KHYpfSxyLmdldFRleHRMb2NhdGlvbj1mdW5jdGlvbih0LGUscixzKXtpZih0PT09YSYmcz09PWl8fChuPXt9LGE9dCxpPXMpLG5bcl0pcmV0dXJuIG5bcl07dmFyIGw9dC5nZXRQb2ludEF0TGVuZ3RoKG8oci1zLzIsZSkpLGM9dC5nZXRQb2ludEF0TGVuZ3RoKG8ocitzLzIsZSkpLHU9TWF0aC5hdGFuKChjLnktbC55KS8oYy54LWwueCkpLGg9dC5nZXRQb2ludEF0TGVuZ3RoKG8ocixlKSksZj17eDooNCpoLngrbC54K2MueCkvNix5Oig0KmgueStsLnkrYy55KS82LHRoZXRhOnV9O3JldHVybiBuW3JdPWYsZn0sci5jbGVhckxvY2F0aW9uQ2FjaGU9ZnVuY3Rpb24oKXthPW51bGx9LHIuZ2V0VmlzaWJsZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsaT1lLmxlZnQsbz1lLnJpZ2h0LHM9ZS50b3AsbD1lLmJvdHRvbSxjPTAsdT10LmdldFRvdGFsTGVuZ3RoKCksaD11O2Z1bmN0aW9uIGYoZSl7dmFyIHI9dC5nZXRQb2ludEF0TGVuZ3RoKGUpOzA9PT1lP249cjplPT09dSYmKGE9cik7dmFyIGM9ci54PGk/aS1yLng6ci54Pm8/ci54LW86MCxoPXIueTxzP3Mtci55OnIueT5sP3IueS1sOjA7cmV0dXJuIE1hdGguc3FydChjKmMraCpoKX1mb3IodmFyIHA9ZihjKTtwOyl7aWYoKGMrPXArcik+aClyZXR1cm47cD1mKGMpfWZvcihwPWYoaCk7cDspe2lmKGM+KGgtPXArcikpcmV0dXJuO3A9ZihoKX1yZXR1cm57bWluOmMsbWF4OmgsbGVuOmgtYyx0b3RhbDp1LGlzQ2xvc2VkOjA9PT1jJiZoPT09dSYmTWF0aC5hYnMobi54LWEueCk8LjEmJk1hdGguYWJzKG4ueS1hLnkpPC4xfX0sci5maW5kUG9pbnRPblBhdGg9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhLGksbyxzPShuPW58fHt9KS5wYXRoTGVuZ3RofHx0LmdldFRvdGFsTGVuZ3RoKCksbD1uLnRvbGVyYW5jZXx8LjAwMSxjPW4uaXRlcmF0aW9uTGltaXR8fDMwLHU9dC5nZXRQb2ludEF0TGVuZ3RoKDApW3JdPnQuZ2V0UG9pbnRBdExlbmd0aChzKVtyXT8tMToxLGg9MCxmPTAscD1zO2g8Yzspe2lmKGE9KGYrcCkvMixvPShpPXQuZ2V0UG9pbnRBdExlbmd0aChhKSlbcl0tZSxNYXRoLmFicyhvKTxsKXJldHVybiBpO3Uqbz4wP3A9YTpmPWEsaCsrfXJldHVybiBpfX0seyIuL21vZCI6NzI0fV0sNzE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksYT10KCJ0aW55Y29sb3IyIiksaT10KCJjb2xvci1ub3JtYWxpemUiKSxvPXQoIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikuZGVmYXVsdExpbmUsbD10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheSxjPWkocyksdT0xO2Z1bmN0aW9uIGgodCxlKXt2YXIgcj10O3JldHVybiByWzNdKj1lLHJ9ZnVuY3Rpb24gZih0KXtpZihuKHQpKXJldHVybiBjO3ZhciBlPWkodCk7cmV0dXJuIGUubGVuZ3RoP2U6Y31mdW5jdGlvbiBwKHQpe3JldHVybiBuKHQpP3Q6dX1lLmV4cG9ydHM9e2Zvcm1hdENvbG9yOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLHMsZCxnLHY9dC5jb2xvcixtPWwodikseT1sKGUpLHg9by5leHRyYWN0T3B0cyh0KSxiPVtdO2lmKG49dm9pZCAwIT09eC5jb2xvcnNjYWxlP28ubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlKHQpOmYsYT1tP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXRbZV0/YzppKG4odFtlXSkpfTpmLHM9eT9mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT10W2VdP3U6cCh0W2VdKX06cCxtfHx5KWZvcih2YXIgXz0wO188cjtfKyspZD1hKHYsXyksZz1zKGUsXyksYltfXT1oKGQsZyk7ZWxzZSBiPWgoaSh2KSxlKTtyZXR1cm4gYn0scGFyc2VDb2xvclNjYWxlOmZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9MSk7dmFyIHI9by5leHRyYWN0T3B0cyh0KTtyZXR1cm4oci5yZXZlcnNlc2NhbGU/by5mbGlwU2NhbGUoci5jb2xvcnNjYWxlKTpyLmNvbG9yc2NhbGUpLm1hcChmdW5jdGlvbih0KXt2YXIgcj10WzBdLG49YSh0WzFdKS50b1JnYigpO3JldHVybntpbmRleDpyLHJnYjpbbi5yLG4uZyxuLmIsZV19fSl9fX0seyIuLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjU5MSwiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MDQsIi4vYXJyYXkiOjcwMCwiY29sb3Itbm9ybWFsaXplIjoxMjIsImZhc3QtaXNudW1lcmljIjoyMjgsdGlueWNvbG9yMjo1MzZ9XSw3MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pZGVudGl0eSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuW3RdfWUuZXhwb3J0cz17a2V5RnVuOmZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0scmVwZWF0OmEsZGVzY2VuZDpuLHdyYXA6YSx1bndyYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19fX0seyIuL2lkZW50aXR5Ijo3MTZ9XSw3MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fX0se31dLDcxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxvPWkuRlBfU0FGRSxzPWkuQkFETlVNLGw9ZS5leHBvcnRzPXt9O2wubmVzdGVkUHJvcGVydHk9dCgiLi9uZXN0ZWRfcHJvcGVydHkiKSxsLmtleWVkQ29udGFpbmVyPXQoIi4va2V5ZWRfY29udGFpbmVyIiksbC5yZWxhdGl2ZUF0dHI9dCgiLi9yZWxhdGl2ZV9hdHRyIiksbC5pc1BsYWluT2JqZWN0PXQoIi4vaXNfcGxhaW5fb2JqZWN0IiksbC50b0xvZ1JhbmdlPXQoIi4vdG9fbG9nX3JhbmdlIiksbC5yZWxpbmtQcml2YXRlS2V5cz10KCIuL3JlbGlua19wcml2YXRlIik7dmFyIGM9dCgiLi9hcnJheSIpO2wuaXNUeXBlZEFycmF5PWMuaXNUeXBlZEFycmF5LGwuaXNBcnJheU9yVHlwZWRBcnJheT1jLmlzQXJyYXlPclR5cGVkQXJyYXksbC5pc0FycmF5MUQ9Yy5pc0FycmF5MUQsbC5lbnN1cmVBcnJheT1jLmVuc3VyZUFycmF5LGwuY29uY2F0PWMuY29uY2F0LGwubWF4Um93TGVuZ3RoPWMubWF4Um93TGVuZ3RoLGwubWluUm93TGVuZ3RoPWMubWluUm93TGVuZ3RoO3ZhciB1PXQoIi4vbW9kIik7bC5tb2Q9dS5tb2QsbC5tb2RIYWxmPXUubW9kSGFsZjt2YXIgaD10KCIuL2NvZXJjZSIpO2wudmFsT2JqZWN0TWV0YT1oLnZhbE9iamVjdE1ldGEsbC5jb2VyY2U9aC5jb2VyY2UsbC5jb2VyY2UyPWguY29lcmNlMixsLmNvZXJjZUZvbnQ9aC5jb2VyY2VGb250LGwuY29lcmNlSG92ZXJpbmZvPWguY29lcmNlSG92ZXJpbmZvLGwuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eT1oLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHksbC52YWxpZGF0ZT1oLnZhbGlkYXRlO3ZhciBmPXQoIi4vZGF0ZXMiKTtsLmRhdGVUaW1lMm1zPWYuZGF0ZVRpbWUybXMsbC5pc0RhdGVUaW1lPWYuaXNEYXRlVGltZSxsLm1zMkRhdGVUaW1lPWYubXMyRGF0ZVRpbWUsbC5tczJEYXRlVGltZUxvY2FsPWYubXMyRGF0ZVRpbWVMb2NhbCxsLmNsZWFuRGF0ZT1mLmNsZWFuRGF0ZSxsLmlzSlNEYXRlPWYuaXNKU0RhdGUsbC5mb3JtYXREYXRlPWYuZm9ybWF0RGF0ZSxsLmluY3JlbWVudE1vbnRoPWYuaW5jcmVtZW50TW9udGgsbC5kYXRlVGljazA9Zi5kYXRlVGljazAsbC5kZmx0UmFuZ2U9Zi5kZmx0UmFuZ2UsbC5maW5kRXhhY3REYXRlcz1mLmZpbmRFeGFjdERhdGVzLGwuTUlOX01TPWYuTUlOX01TLGwuTUFYX01TPWYuTUFYX01TO3ZhciBwPXQoIi4vc2VhcmNoIik7bC5maW5kQmluPXAuZmluZEJpbixsLnNvcnRlckFzYz1wLnNvcnRlckFzYyxsLnNvcnRlckRlcz1wLnNvcnRlckRlcyxsLmRpc3RpbmN0VmFscz1wLmRpc3RpbmN0VmFscyxsLnJvdW5kVXA9cC5yb3VuZFVwLGwuc29ydD1wLnNvcnQsbC5maW5kSW5kZXhPZk1pbj1wLmZpbmRJbmRleE9mTWluO3ZhciBkPXQoIi4vc3RhdHMiKTtsLmFnZ051bXM9ZC5hZ2dOdW1zLGwubGVuPWQubGVuLGwubWVhbj1kLm1lYW4sbC5tZWRpYW49ZC5tZWRpYW4sbC5taWRSYW5nZT1kLm1pZFJhbmdlLGwudmFyaWFuY2U9ZC52YXJpYW5jZSxsLnN0ZGV2PWQuc3RkZXYsbC5pbnRlcnA9ZC5pbnRlcnA7dmFyIGc9dCgiLi9tYXRyaXgiKTtsLmluaXQyZEFycmF5PWcuaW5pdDJkQXJyYXksbC50cmFuc3Bvc2VSYWdnZWQ9Zy50cmFuc3Bvc2VSYWdnZWQsbC5kb3Q9Zy5kb3QsbC50cmFuc2xhdGlvbk1hdHJpeD1nLnRyYW5zbGF0aW9uTWF0cml4LGwucm90YXRpb25NYXRyaXg9Zy5yb3RhdGlvbk1hdHJpeCxsLnJvdGF0aW9uWFlNYXRyaXg9Zy5yb3RhdGlvblhZTWF0cml4LGwuYXBwbHkyRFRyYW5zZm9ybT1nLmFwcGx5MkRUcmFuc2Zvcm0sbC5hcHBseTJEVHJhbnNmb3JtMj1nLmFwcGx5MkRUcmFuc2Zvcm0yO3ZhciB2PXQoIi4vYW5nbGVzIik7bC5kZWcycmFkPXYuZGVnMnJhZCxsLnJhZDJkZWc9di5yYWQyZGVnLGwuYW5nbGVEZWx0YT12LmFuZ2xlRGVsdGEsbC5hbmdsZURpc3Q9di5hbmdsZURpc3QsbC5pc0Z1bGxDaXJjbGU9di5pc0Z1bGxDaXJjbGUsbC5pc0FuZ2xlSW5zaWRlU2VjdG9yPXYuaXNBbmdsZUluc2lkZVNlY3RvcixsLmlzUHRJbnNpZGVTZWN0b3I9di5pc1B0SW5zaWRlU2VjdG9yLGwucGF0aEFyYz12LnBhdGhBcmMsbC5wYXRoU2VjdG9yPXYucGF0aFNlY3RvcixsLnBhdGhBbm51bHVzPXYucGF0aEFubnVsdXM7dmFyIG09dCgiLi9hbmNob3JfdXRpbHMiKTtsLmlzTGVmdEFuY2hvcj1tLmlzTGVmdEFuY2hvcixsLmlzQ2VudGVyQW5jaG9yPW0uaXNDZW50ZXJBbmNob3IsbC5pc1JpZ2h0QW5jaG9yPW0uaXNSaWdodEFuY2hvcixsLmlzVG9wQW5jaG9yPW0uaXNUb3BBbmNob3IsbC5pc01pZGRsZUFuY2hvcj1tLmlzTWlkZGxlQW5jaG9yLGwuaXNCb3R0b21BbmNob3I9bS5pc0JvdHRvbUFuY2hvcjt2YXIgeT10KCIuL2dlb21ldHJ5MmQiKTtsLnNlZ21lbnRzSW50ZXJzZWN0PXkuc2VnbWVudHNJbnRlcnNlY3QsbC5zZWdtZW50RGlzdGFuY2U9eS5zZWdtZW50RGlzdGFuY2UsbC5nZXRUZXh0TG9jYXRpb249eS5nZXRUZXh0TG9jYXRpb24sbC5jbGVhckxvY2F0aW9uQ2FjaGU9eS5jbGVhckxvY2F0aW9uQ2FjaGUsbC5nZXRWaXNpYmxlU2VnbWVudD15LmdldFZpc2libGVTZWdtZW50LGwuZmluZFBvaW50T25QYXRoPXkuZmluZFBvaW50T25QYXRoO3ZhciB4PXQoIi4vZXh0ZW5kIik7bC5leHRlbmRGbGF0PXguZXh0ZW5kRmxhdCxsLmV4dGVuZERlZXA9eC5leHRlbmREZWVwLGwuZXh0ZW5kRGVlcEFsbD14LmV4dGVuZERlZXBBbGwsbC5leHRlbmREZWVwTm9BcnJheXM9eC5leHRlbmREZWVwTm9BcnJheXM7dmFyIGI9dCgiLi9sb2dnZXJzIik7bC5sb2c9Yi5sb2csbC53YXJuPWIud2FybixsLmVycm9yPWIuZXJyb3I7dmFyIF89dCgiLi9yZWdleCIpO2wuY291bnRlclJlZ2V4PV8uY291bnRlcjt2YXIgdz10KCIuL3Rocm90dGxlIik7bC50aHJvdHRsZT13LnRocm90dGxlLGwudGhyb3R0bGVEb25lPXcuZG9uZSxsLmNsZWFyVGhyb3R0bGU9dy5jbGVhcjt2YXIgaz10KCIuL2RvbSIpO2Z1bmN0aW9uIFQodCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpZm9yKHZhciBuPXRbcl0sYT0wO2E8bi5sZW5ndGg7YSsrKWVbblthXV09K3I7cmV0dXJuIGV9bC5nZXRHcmFwaERpdj1rLmdldEdyYXBoRGl2LGwuaXNQbG90RGl2PWsuaXNQbG90RGl2LGwucmVtb3ZlRWxlbWVudD1rLnJlbW92ZUVsZW1lbnQsbC5hZGRTdHlsZVJ1bGU9ay5hZGRTdHlsZVJ1bGUsbC5hZGRSZWxhdGVkU3R5bGVSdWxlPWsuYWRkUmVsYXRlZFN0eWxlUnVsZSxsLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGU9ay5kZWxldGVSZWxhdGVkU3R5bGVSdWxlLGwuY2xlYXJSZXNwb25zaXZlPXQoIi4vY2xlYXJfcmVzcG9uc2l2ZSIpLGwubWFrZVRyYWNlR3JvdXBzPXQoIi4vbWFrZV90cmFjZV9ncm91cHMiKSxsLl89dCgiLi9sb2NhbGl6ZSIpLGwubm90aWZpZXI9dCgiLi9ub3RpZmllciIpLGwuZmlsdGVyVW5pcXVlPXQoIi4vZmlsdGVyX3VuaXF1ZSIpLGwuZmlsdGVyVmlzaWJsZT10KCIuL2ZpbHRlcl92aXNpYmxlIiksbC5wdXNoVW5pcXVlPXQoIi4vcHVzaF91bmlxdWUiKSxsLmNsZWFuTnVtYmVyPXQoIi4vY2xlYW5fbnVtYmVyIiksbC5lbnN1cmVOdW1iZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/KHQ9TnVtYmVyKHQpKTwtb3x8dD5vP3M6YSh0KT9OdW1iZXIodCk6czpzfSxsLmlzSW5kZXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKHZvaWQgMCE9PWUmJnQ+PWUpJiYoYSh0KSYmdD49MCYmdCUxPT0wKX0sbC5ub29wPXQoIi4vbm9vcCIpLGwuaWRlbnRpdHk9dCgiLi9pZGVudGl0eSIpLGwucmVwZWF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPXQ7cmV0dXJuIHJ9LGwuc3dhcEF0dHJzPWZ1bmN0aW9uKHQsZSxyLG4pe3J8fChyPSJ4Iiksbnx8KG49InkiKTtmb3IodmFyIGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIGk9ZVthXSxvPWwubmVzdGVkUHJvcGVydHkodCxpLnJlcGxhY2UoIj8iLHIpKSxzPWwubmVzdGVkUHJvcGVydHkodCxpLnJlcGxhY2UoIj8iLG4pKSxjPW8uZ2V0KCk7by5zZXQocy5nZXQoKSkscy5zZXQoYyl9fSxsLnJhaXNlVG9Ub3A9ZnVuY3Rpb24odCl7dC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHQpfSxsLmNhbmNlbFRyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApfSxsLmNvbnN0cmFpbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGU+cj9NYXRoLm1heChyLE1hdGgubWluKGUsdCkpOk1hdGgubWF4KGUsTWF0aC5taW4ocix0KSl9LGwuYkJveEludGVyc2VjdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHI9cnx8MCx0LmxlZnQ8PWUucmlnaHQrciYmZS5sZWZ0PD10LnJpZ2h0K3ImJnQudG9wPD1lLmJvdHRvbStyJiZlLnRvcDw9dC5ib3R0b20rcn0sbC5zaW1wbGVNYXA9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhPXQubGVuZ3RoLGk9bmV3IEFycmF5KGEpLG89MDtvPGE7bysrKWlbb109ZSh0W29dLHIsbik7cmV0dXJuIGl9LGwucmFuZHN0cj1mdW5jdGlvbiB0KGUscixuLGEpe2lmKG58fChuPTE2KSx2b2lkIDA9PT1yJiYocj0yNCkscjw9MClyZXR1cm4iMCI7dmFyIGksbyxzPU1hdGgubG9nKE1hdGgucG93KDIscikpL01hdGgubG9nKG4pLGM9IiI7Zm9yKGk9MjtzPT09MS8wO2kqPTIpcz1NYXRoLmxvZyhNYXRoLnBvdygyLHIvaSkpL01hdGgubG9nKG4pKmk7dmFyIHU9cy1NYXRoLmZsb29yKHMpO2ZvcihpPTA7aTxNYXRoLmZsb29yKHMpO2krKyljPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpuKS50b1N0cmluZyhuKStjO3UmJihvPU1hdGgucG93KG4sdSksYz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbykudG9TdHJpbmcobikrYyk7dmFyIGg9cGFyc2VJbnQoYyxuKTtyZXR1cm4gZSYmZVtjXXx8aCE9PTEvMCYmaD49TWF0aC5wb3coMixyKT9hPjEwPyhsLndhcm4oInJhbmRzdHIgZmFpbGVkIHVuaXF1ZW5lc3MiKSxjKTp0KGUscixuLChhfHwwKSsxKTpjfSxsLk9wdGlvbkNvbnRyb2w9ZnVuY3Rpb24odCxlKXt0fHwodD17fSksZXx8KGU9Im9wdCIpO3ZhciByPXtvcHRpb25MaXN0OltdLF9uZXdvcHRpb246ZnVuY3Rpb24obil7bltlXT10LHJbbi5uYW1lXT1uLHIub3B0aW9uTGlzdC5wdXNoKG4pfX07cmV0dXJuIHJbIl8iK2VdPXQscn0sbC5zbW9vdGg9ZnVuY3Rpb24odCxlKXtpZigoZT1NYXRoLnJvdW5kKGUpfHwwKTwyKXJldHVybiB0O3ZhciByLG4sYSxpLG89dC5sZW5ndGgscz0yKm8sbD0yKmUtMSxjPW5ldyBBcnJheShsKSx1PW5ldyBBcnJheShvKTtmb3Iocj0wO3I8bDtyKyspY1tyXT0oMS1NYXRoLmNvcyhNYXRoLlBJKihyKzEpL2UpKS8oMiplKTtmb3Iocj0wO3I8bztyKyspe2ZvcihpPTAsbj0wO248bDtuKyspKGE9cituKzEtZSk8LW8/YS09cypNYXRoLnJvdW5kKGEvcyk6YT49cyYmKGEtPXMqTWF0aC5mbG9vcihhL3MpKSxhPDA/YT0tMS1hOmE+PW8mJihhPXMtMS1hKSxpKz10W2FdKmNbbl07dVtyXT1pfXJldHVybiB1fSxsLnN5bmNPckFzeW5jPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtmdW5jdGlvbiBhKCl7cmV0dXJuIGwuc3luY09yQXN5bmModCxlLHIpfWZvcig7dC5sZW5ndGg7KWlmKChuPSgwLHQuc3BsaWNlKDAsMSlbMF0pKGUpKSYmbi50aGVuKXJldHVybiBuLnRoZW4oYSkudGhlbih2b2lkIDAsbC5wcm9taXNlRXJyb3IpO3JldHVybiByJiZyKGUpfSxsLnN0cmlwVHJhaWxpbmdTbGFzaD1mdW5jdGlvbih0KXtyZXR1cm4iLyI9PT10LnN1YnN0cigtMSk/dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKTp0fSxsLm5vbmVPckFsbD1mdW5jdGlvbih0LGUscil7aWYodCl7dmFyIG4sYT0hMSxpPSEwO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspbnVsbCE9dFtyW25dXT9hPSEwOmk9ITE7aWYoYSYmIWkpZm9yKG49MDtuPHIubGVuZ3RoO24rKyl0W3Jbbl1dPWVbcltuXV19fSxsLm1lcmdlQXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIG47aWYobC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKWZvcih2YXIgaT1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksbz0wO288aTtvKyspe3ZhciBzPXRbb107ZVtvXVtyXT1hP24ocyk6c319LGwubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGwubWVyZ2VBcnJheSh0LGUscixmdW5jdGlvbih0KXt2YXIgZT0rdDtyZXR1cm4gaXNGaW5pdGUoZSkmJmU+MD9lOjB9KX0sbC5maWxsQXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7aWYobj1ufHxsLmlkZW50aXR5LGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KSlmb3IodmFyIGE9MDthPGUubGVuZ3RoO2ErKyllW2FdW3JdPW4odFthXSl9LGwuY2FzdE9wdGlvbj1mdW5jdGlvbih0LGUscixuKXtuPW58fGwuaWRlbnRpdHk7dmFyIGE9bC5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpO3JldHVybiBsLmlzQXJyYXlPclR5cGVkQXJyYXkoYSk/QXJyYXkuaXNBcnJheShlKSYmbC5pc0FycmF5T3JUeXBlZEFycmF5KGFbZVswXV0pP24oYVtlWzBdXVtlWzFdXSk6bihhW2VdKTphfSxsLmV4dHJhY3RPcHRpb249ZnVuY3Rpb24odCxlLHIsbil7aWYociBpbiB0KXJldHVybiB0W3JdO3ZhciBhPWwubmVzdGVkUHJvcGVydHkoZSxuKS5nZXQoKTtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT92b2lkIDA6YX0sbC50YWdTZWxlY3RlZD1mdW5jdGlvbih0LGUscil7dmFyIG4sYSxpPWUuc2VsZWN0ZWRwb2ludHMsbz1lLl9pbmRleFRvUG9pbnRzO28mJihuPVQobykpO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgYz1pW3NdO2lmKGwuaXNJbmRleChjKXx8bC5pc0FycmF5T3JUeXBlZEFycmF5KGMpJiZsLmlzSW5kZXgoY1swXSkmJmwuaXNJbmRleChjWzFdKSl7dmFyIHU9bj9uW2NdOmMsaD1yP3JbdV06dTt2b2lkIDAhPT0oYT1oKSYmYTx0Lmxlbmd0aCYmKHRbaF0uc2VsZWN0ZWQ9MSl9fX0sbC5zZWxJbmRpY2VzMnNlbFBvaW50cz1mdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdGVkcG9pbnRzLHI9dC5faW5kZXhUb1BvaW50cztpZihyKXtmb3IodmFyIG49VChyKSxhPVtdLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtpZihsLmlzSW5kZXgobykpe3ZhciBzPW5bb107bC5pc0luZGV4KHMpJiZhLnB1c2gocyl9fXJldHVybiBhfXJldHVybiBlfSxsLmdldFRhcmdldEFycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS50YXJnZXQ7aWYoInN0cmluZyI9PXR5cGVvZiByJiZyKXt2YXIgbj1sLm5lc3RlZFByb3BlcnR5KHQscikuZ2V0KCk7cmV0dXJuISFBcnJheS5pc0FycmF5KG4pJiZufXJldHVybiEhQXJyYXkuaXNBcnJheShyKSYmcn0sbC5taW5FeHRlbmQ9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTsib2JqZWN0IiE9dHlwZW9mIGUmJihlPXt9KTt2YXIgbixhLGksbz1PYmplY3Qua2V5cyh0KTtmb3Iobj0wO248by5sZW5ndGg7bisrKWk9dFthPW9bbl1dLCJfIiE9PWEuY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgaSYmKCJtb2R1bGUiPT09YT9yW2FdPWk6QXJyYXkuaXNBcnJheShpKT9yW2FdPSJjb2xvcnNjYWxlIj09PWE/aS5zbGljZSgpOmkuc2xpY2UoMCwzKTpsLmlzVHlwZWRBcnJheShpKT9yW2FdPWkuc3ViYXJyYXkoMCwzKTpyW2FdPWkmJiJvYmplY3QiPT10eXBlb2YgaT9sLm1pbkV4dGVuZCh0W2FdLGVbYV0pOmkpO2ZvcihvPU9iamVjdC5rZXlzKGUpLG49MDtuPG8ubGVuZ3RoO24rKykib2JqZWN0Ij09dHlwZW9mKGk9ZVthPW9bbl1dKSYmYSBpbiByJiYib2JqZWN0Ij09dHlwZW9mIHJbYV18fChyW2FdPWkpO3JldHVybiByfSxsLnRpdGxlQ2FzZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnN1YnN0cigxKX0sbC5jb250YWluc0FueT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKC0xIT09dC5pbmRleE9mKGVbcl0pKXJldHVybiEwO3JldHVybiExfSxsLmlzSUU9ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYn07dmFyIE09L01TSUUgWzEtOV1cLi87bC5pc0lFOW9yQmVsb3c9ZnVuY3Rpb24oKXtyZXR1cm4gbC5pc0lFKCkmJk0udGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCl9O3ZhciBBPS9WZXJzaW9uXC9bXGRcLl0rLipTYWZhcmkvO2wuaXNTYWZhcmk9ZnVuY3Rpb24oKXtyZXR1cm4gQS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KX0sbC5pc0QzU2VsZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jbGFzc2VkfSxsLmVuc3VyZVNpbmdsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgYT10LnNlbGVjdChlKyhyPyIuIityOiIiKSk7aWYoYS5zaXplKCkpcmV0dXJuIGE7dmFyIGk9dC5hcHBlbmQoZSk7cmV0dXJuIHImJmkuY2xhc3NlZChyLCEwKSxuJiZpLmNhbGwobiksaX0sbC5lbnN1cmVTaW5nbGVCeUlkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXQuc2VsZWN0KGUrIiMiK3IpO2lmKGEuc2l6ZSgpKXJldHVybiBhO3ZhciBpPXQuYXBwZW5kKGUpLmF0dHIoImlkIixyKTtyZXR1cm4gbiYmaS5jYWxsKG4pLGl9LGwub2JqZWN0RnJvbVBhdGg9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10LnNwbGl0KCIuIiksYT1yPXt9LGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXSxzPW51bGwsbD1uW2ldLm1hdGNoKC8oLiopXFsoWzAtOV0rKVxdLyk7bD8obz1sWzFdLHM9bFsyXSxyPXJbb109W10saT09PW4ubGVuZ3RoLTE/cltzXT1lOnJbc109e30scj1yW3NdKTooaT09PW4ubGVuZ3RoLTE/cltvXT1lOnJbb109e30scj1yW29dKX1yZXR1cm4gYX07dmFyIFM9L14oW15cW1wuXSspXC4oLispPy8sRT0vXihbXlwuXSspXFsoWzAtOV0rKVxdKFwuKT8oLispPy87bC5leHBhbmRPYmplY3RQYXRocz1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxpLG8scztpZigib2JqZWN0Ij09dHlwZW9mIHQmJiFBcnJheS5pc0FycmF5KHQpKWZvcihyIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKChlPXIubWF0Y2goUykpPyhhPXRbcl0sbj1lWzFdLGRlbGV0ZSB0W3JdLHRbbl09bC5leHRlbmREZWVwTm9BcnJheXModFtuXXx8e30sbC5vYmplY3RGcm9tUGF0aChyLGwuZXhwYW5kT2JqZWN0UGF0aHMoYSkpW25dKSk6KGU9ci5tYXRjaChFKSk/KGE9dFtyXSxuPWVbMV0saT1wYXJzZUludChlWzJdKSxkZWxldGUgdFtyXSx0W25dPXRbbl18fFtdLCIuIj09PWVbM10/KHM9ZVs0XSxvPXRbbl1baV09dFtuXVtpXXx8e30sbC5leHRlbmREZWVwTm9BcnJheXMobyxsLm9iamVjdEZyb21QYXRoKHMsbC5leHBhbmRPYmplY3RQYXRocyhhKSkpKTp0W25dW2ldPWwuZXhwYW5kT2JqZWN0UGF0aHMoYSkpOnRbcl09bC5leHBhbmRPYmplY3RQYXRocyh0W3JdKSk7cmV0dXJuIHR9LGwubnVtU2VwYXJhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKHJ8fChyPSExKSwic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNlcGFyYXRvciBzdHJpbmcgcmVxdWlyZWQgZm9yIGZvcm1hdHRpbmchIik7Im51bWJlciI9PXR5cGVvZiB0JiYodD1TdHJpbmcodCkpO3ZhciBuPS8oXGQrKShcZHszfSkvLGE9ZS5jaGFyQXQoMCksaT1lLmNoYXJBdCgxKSxvPXQuc3BsaXQoIi4iKSxzPW9bMF0sbD1vLmxlbmd0aD4xP2Erb1sxXToiIjtpZihpJiYoby5sZW5ndGg+MXx8cy5sZW5ndGg+NHx8cikpZm9yKDtuLnRlc3Qocyk7KXM9cy5yZXBsYWNlKG4sIiQxIitpKyIkMiIpO3JldHVybiBzK2x9LGwuVEVNUExBVEVfU1RSSU5HX1JFR0VYPS8leyhbXlxzJXt9Ol0qKShbOnxcfF1bXn1dKik/fS9nO3ZhciBMPS9eXHcqJC87bC50ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbih0LGUpe3ZhciByPXt9O3JldHVybiB0LnJlcGxhY2UobC5URU1QTEFURV9TVFJJTkdfUkVHRVgsZnVuY3Rpb24odCxuKXt2YXIgYTtyZXR1cm4gTC50ZXN0KG4pP2E9ZVtuXToocltuXT1yW25dfHxsLm5lc3RlZFByb3BlcnR5KGUsbikuZ2V0LGE9cltuXSgpKSxsLmlzVmFsaWRUZXh0VmFsdWUoYSk/YToiIn0pfTt2YXIgQz17bWF4OjEwLGNvdW50OjAsbmFtZToiaG92ZXJ0ZW1wbGF0ZSJ9O2wuaG92ZXJ0ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiB6LmFwcGx5KEMsYXJndW1lbnRzKX07dmFyIFA9e21heDoxMCxjb3VudDowLG5hbWU6InRleHR0ZW1wbGF0ZSJ9O2wudGV4dHRlbXBsYXRlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHouYXBwbHkoUCxhcmd1bWVudHMpfTt2YXIgTz0vXls6fFx8XS87ZnVuY3Rpb24geih0LGUscil7dmFyIGE9dGhpcyxpPWFyZ3VtZW50cztlfHwoZT17fSk7dmFyIG89e307cmV0dXJuIHQucmVwbGFjZShsLlRFTVBMQVRFX1NUUklOR19SRUdFWCxmdW5jdGlvbih0LHMsYyl7dmFyIHUsaCxmLHA7Zm9yKGY9MztmPGkubGVuZ3RoO2YrKylpZih1PWlbZl0pe2lmKHUuaGFzT3duUHJvcGVydHkocykpe2g9dVtzXTticmVha31pZihMLnRlc3Qocyl8fChoPW9bc118fGwubmVzdGVkUHJvcGVydHkodSxzKS5nZXQoKSkmJihvW3NdPWgpLHZvaWQgMCE9PWgpYnJlYWt9aWYodm9pZCAwPT09aCYmYSlyZXR1cm4gYS5jb3VudDxhLm1heCYmKGwud2FybigiVmFyaWFibGUgJyIrcysiJyBpbiAiK2EubmFtZSsiIGNvdWxkIG5vdCBiZSBmb3VuZCEiKSxoPXQpLGEuY291bnQ9PT1hLm1heCYmbC53YXJuKCJUb28gbWFueSAiK2EubmFtZSsiIHdhcm5pbmdzIC0gYWRkaXRpb25hbCB3YXJuaW5ncyB3aWxsIGJlIHN1cHByZXNzZWQiKSxhLmNvdW50KyssdDtpZihjKXtpZigiOiI9PT1jWzBdJiYoaD0ocD1yP3IubnVtYmVyRm9ybWF0Om4uZm9ybWF0KShjLnJlcGxhY2UoTywiIikpKGgpKSwifCI9PT1jWzBdKXtwPXI/ci50aW1lRm9ybWF0LnV0YzpuLnRpbWUuZm9ybWF0LnV0Yzt2YXIgZD1sLmRhdGVUaW1lMm1zKGgpO2g9bC5mb3JtYXREYXRlKGQsYy5yZXBsYWNlKE8sIiIpLCExLHApfX1lbHNlIGUuaGFzT3duUHJvcGVydHkocysiTGFiZWwiKSYmKGg9ZVtzKyJMYWJlbCJdKTtyZXR1cm4gaH0pfWwuc3VicGxvdFNvcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpKzEsbj0wLGE9MCxpPTA7aTxyO2krKyl7dmFyIG89dC5jaGFyQ29kZUF0KGkpfHwwLHM9ZS5jaGFyQ29kZUF0KGkpfHwwLGw9bz49NDgmJm88PTU3LGM9cz49NDgmJnM8PTU3O2lmKGwmJihuPTEwKm4rby00OCksYyYmKGE9MTAqYStzLTQ4KSwhbHx8IWMpe2lmKG4hPT1hKXJldHVybiBuLWE7aWYobyE9PXMpcmV0dXJuIG8tc319cmV0dXJuIGEtbn07dmFyIEk9MmU5O2wuc2VlZFBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe0k9MmU5fSxsLnBzZXVkb1JhbmRvbT1mdW5jdGlvbigpe3ZhciB0PUk7cmV0dXJuIEk9KDY5MDY5KkkrMSklNDI5NDk2NzI5NixNYXRoLmFicyhJLXQpPDQyOTQ5NjcyOT9sLnBzZXVkb1JhbmRvbSgpOkkvNDI5NDk2NzI5Nn0sbC5maWxsVGV4dD1mdW5jdGlvbih0LGUscil7dmFyIG49QXJyYXkuaXNBcnJheShyKT9mdW5jdGlvbih0KXtyLnB1c2godCl9OmZ1bmN0aW9uKHQpe3IudGV4dD10fSxhPWwuZXh0cmFjdE9wdGlvbih0LGUsImh0eCIsImhvdmVydGV4dCIpO2lmKGwuaXNWYWxpZFRleHRWYWx1ZShhKSlyZXR1cm4gbihhKTt2YXIgaT1sLmV4dHJhY3RPcHRpb24odCxlLCJ0eCIsInRleHQiKTtyZXR1cm4gbC5pc1ZhbGlkVGV4dFZhbHVlKGkpP24oaSk6dm9pZCAwfSxsLmlzVmFsaWRUZXh0VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHR8fDA9PT10fSxsLmZvcm1hdFBlcmNlbnQ9ZnVuY3Rpb24odCxlKXtlPWV8fDA7Zm9yKHZhciByPShNYXRoLnJvdW5kKDEwMCp0Kk1hdGgucG93KDEwLGUpKSpNYXRoLnBvdyguMSxlKSkudG9GaXhlZChlKSsiJSIsbj0wO248ZTtuKyspLTEhPT1yLmluZGV4T2YoIi4iKSYmKHI9KHI9ci5yZXBsYWNlKCIwJSIsIiUiKSkucmVwbGFjZSgiLiUiLCIlIikpO3JldHVybiByfSxsLmlzSGlkZGVuPWZ1bmN0aW9uKHQpe3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLmRpc3BsYXk7cmV0dXJuIWV8fCJub25lIj09PWV9LGwuZ2V0VGV4dFRyYW5zZm9ybT1mdW5jdGlvbih0KXt2YXIgZT10Lm5vQ2VudGVyLHI9dC50ZXh0WCxuPXQudGV4dFksYT10LnRhcmdldFgsaT10LnRhcmdldFksbz10LmFuY2hvclh8fDAscz10LmFuY2hvcll8fDAsbD10LnJvdGF0ZSxjPXQuc2NhbGU7cmV0dXJuIGM/Yz4xJiYoYz0xKTpjPTAsInRyYW5zbGF0ZSgiKyhhLWMqKHIrbykpKyIsIisoaS1jKihuK3MpKSsiKSIrKGM8MT8ic2NhbGUoIitjKyIpIjoiIikrKGw/InJvdGF0ZSgiK2wrKGU/IiI6IiAiK3IrIiAiK24pKyIpIjoiIil9LGwuZW5zdXJlVW5pZm9ybUZvbnRTaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bC5leHRlbmRGbGF0KHt9LGUpO3JldHVybiByLnNpemU9TWF0aC5tYXgoZS5zaXplLHQuX2Z1bGxMYXlvdXQudW5pZm9ybXRleHQubWluc2l6ZXx8MCkscn19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzLCIuL2FuY2hvcl91dGlscyI6Njk4LCIuL2FuZ2xlcyI6Njk5LCIuL2FycmF5Ijo3MDAsIi4vY2xlYW5fbnVtYmVyIjo3MDEsIi4vY2xlYXJfcmVzcG9uc2l2ZSI6NzAzLCIuL2NvZXJjZSI6NzA0LCIuL2RhdGVzIjo3MDUsIi4vZG9tIjo3MDYsIi4vZXh0ZW5kIjo3MDgsIi4vZmlsdGVyX3VuaXF1ZSI6NzA5LCIuL2ZpbHRlcl92aXNpYmxlIjo3MTAsIi4vZ2VvbWV0cnkyZCI6NzEzLCIuL2lkZW50aXR5Ijo3MTYsIi4vaXNfcGxhaW5fb2JqZWN0Ijo3MTgsIi4va2V5ZWRfY29udGFpbmVyIjo3MTksIi4vbG9jYWxpemUiOjcyMCwiLi9sb2dnZXJzIjo3MjEsIi4vbWFrZV90cmFjZV9ncm91cHMiOjcyMiwiLi9tYXRyaXgiOjcyMywiLi9tb2QiOjcyNCwiLi9uZXN0ZWRfcHJvcGVydHkiOjcyNSwiLi9ub29wIjo3MjYsIi4vbm90aWZpZXIiOjcyNywiLi9wdXNoX3VuaXF1ZSI6NzMxLCIuL3JlZ2V4Ijo3MzMsIi4vcmVsYXRpdmVfYXR0ciI6NzM0LCIuL3JlbGlua19wcml2YXRlIjo3MzUsIi4vc2VhcmNoIjo3MzYsIi4vc3RhdHMiOjczOSwiLi90aHJvdHRsZSI6NzQyLCIuL3RvX2xvZ19yYW5nZSI6NzQzLGQzOjE2NSwiZmFzdC1pc251bWVyaWMiOjIyOH1dLDcxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHdpbmRvdyYmd2luZG93LnByb2Nlc3MmJndpbmRvdy5wcm9jZXNzLnZlcnNpb25zPyJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpOiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1PYmplY3QucHJvdG90eXBlfX0se31dLDcxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL25lc3RlZF9wcm9wZXJ0eSIpLGE9L15cdyokLztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIG8scyxsO3I9cnx8Im5hbWUiLGk9aXx8InZhbHVlIjt2YXIgYz17fTtlJiZlLmxlbmd0aD8obD1uKHQsZSkscz1sLmdldCgpKTpzPXQsZT1lfHwiIjt2YXIgdT17fTtpZihzKWZvcihvPTA7bzxzLmxlbmd0aDtvKyspdVtzW29dW3JdXT1vO3ZhciBoPWEudGVzdChpKSxmPXtzZXQ6ZnVuY3Rpb24odCxlKXt2YXIgYT1udWxsPT09ZT80OjA7aWYoIXMpe2lmKCFsfHw0PT09YSlyZXR1cm47cz1bXSxsLnNldChzKX12YXIgbz11W3RdO2lmKHZvaWQgMD09PW8pe2lmKDQ9PT1hKXJldHVybjthfD0zLG89cy5sZW5ndGgsdVt0XT1vfWVsc2UgZSE9PShoP3Nbb11baV06bihzW29dLGkpLmdldCgpKSYmKGF8PTIpO3ZhciBwPXNbb109c1tvXXx8e307cmV0dXJuIHBbcl09dCxoP3BbaV09ZTpuKHAsaSkuc2V0KGUpLG51bGwhPT1lJiYoYSY9LTUpLGNbb109Y1tvXXxhLGZ9LGdldDpmdW5jdGlvbih0KXtpZihzKXt2YXIgZT11W3RdO3JldHVybiB2b2lkIDA9PT1lP3ZvaWQgMDpoP3NbZV1baV06bihzW2VdLGkpLmdldCgpfX0scmVuYW1lOmZ1bmN0aW9uKHQsZSl7dmFyIG49dVt0XTtyZXR1cm4gdm9pZCAwPT09bj9mOihjW25dPTF8Y1tuXSx1W2VdPW4sZGVsZXRlIHVbdF0sc1tuXVtyXT1lLGYpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dVt0XTtpZih2b2lkIDA9PT1lKXJldHVybiBmO3ZhciBhPXNbZV07aWYoT2JqZWN0LmtleXMoYSkubGVuZ3RoPjIpcmV0dXJuIGNbZV09MnxjW2VdLGYuc2V0KHQsbnVsbCk7aWYoaCl7Zm9yKG89ZTtvPHMubGVuZ3RoO28rKyljW29dPTN8Y1tvXTtmb3Iobz1lO288cy5sZW5ndGg7bysrKXVbc1tvXVtyXV0tLTtzLnNwbGljZShlLDEpLGRlbGV0ZSB1W3RdfWVsc2UgbihhLGkpLnNldChudWxsKSxjW2VdPTZ8Y1tlXTtyZXR1cm4gZn0sY29uc3RydWN0VXBkYXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGEsbz17fSxsPU9iamVjdC5rZXlzKGMpLHU9MDt1PGwubGVuZ3RoO3UrKylhPWxbdV0sdD1lKyJbIithKyJdIixzW2FdPygxJmNbYV0mJihvW3QrIi4iK3JdPXNbYV1bcl0pLDImY1thXSYmKG9bdCsiLiIraV09aD80JmNbYV0/bnVsbDpzW2FdW2ldOjQmY1thXT9udWxsOm4oc1thXSxpKS5nZXQoKSkpOm9bdF09bnVsbDtyZXR1cm4gb319O3JldHVybiBmfX0seyIuL25lc3RlZF9wcm9wZXJ0eSI6NzI1fV0sNzIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2NvbnRleHQubG9jYWxlLGE9MDthPDI7YSsrKXtmb3IodmFyIGk9dC5fY29udGV4dC5sb2NhbGVzLG89MDtvPDI7bysrKXt2YXIgcz0oaVtyXXx8e30pLmRpY3Rpb25hcnk7aWYocyl7dmFyIGw9c1tlXTtpZihsKXJldHVybiBsfWk9bi5sb2NhbGVSZWdpc3RyeX12YXIgYz1yLnNwbGl0KCItIilbMF07aWYoYz09PXIpYnJlYWs7cj1jfXJldHVybiBlfX0seyIuLi9yZWdpc3RyeSI6ODQ2fV0sNzIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIikuZGZsdENvbmZpZyxhPXQoIi4vbm90aWZpZXIiKSxpPWUuZXhwb3J0cz17fTtmdW5jdGlvbiBvKHQsZSl7aWYodCYmdC5hcHBseSl0cnl7cmV0dXJuIHZvaWQgdC5hcHBseShjb25zb2xlLGUpfWNhdGNoKHQpe31mb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0cnl7dChlW3JdKX1jYXRjaCh0KXtjb25zb2xlLmxvZyhlW3JdKX19aS5sb2c9ZnVuY3Rpb24oKXt2YXIgdDtpZihuLmxvZ2dpbmc+MSl7dmFyIGU9WyJMT0c6Il07Zm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWUucHVzaChhcmd1bWVudHNbdF0pO28oY29uc29sZS50cmFjZXx8Y29uc29sZS5sb2csZSl9aWYobi5ub3RpZnlPbkxvZ2dpbmc+MSl7dmFyIHI9W107Zm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXIucHVzaChhcmd1bWVudHNbdF0pO2Eoci5qb2luKCI8YnI+IiksImxvbmciKX19LGkud2Fybj1mdW5jdGlvbigpe3ZhciB0O2lmKG4ubG9nZ2luZz4wKXt2YXIgZT1bIldBUk46Il07Zm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWUucHVzaChhcmd1bWVudHNbdF0pO28oY29uc29sZS50cmFjZXx8Y29uc29sZS5sb2csZSl9aWYobi5ub3RpZnlPbkxvZ2dpbmc+MCl7dmFyIHI9W107Zm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXIucHVzaChhcmd1bWVudHNbdF0pO2Eoci5qb2luKCI8YnI+IiksInN0aWNrIil9fSxpLmVycm9yPWZ1bmN0aW9uKCl7dmFyIHQ7aWYobi5sb2dnaW5nPjApe3ZhciBlPVsiRVJST1I6Il07Zm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWUucHVzaChhcmd1bWVudHNbdF0pO28oY29uc29sZS5lcnJvcixlKX1pZihuLm5vdGlmeU9uTG9nZ2luZz4wKXt2YXIgcj1bXTtmb3IodD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspci5wdXNoKGFyZ3VtZW50c1t0XSk7YShyLmpvaW4oIjxicj4iKSwic3RpY2siKX19fSx7Ii4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIjo3NTMsIi4vbm90aWZpZXIiOjcyN31dLDcyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9dC5zZWxlY3RBbGwoImcuIityLnJlcGxhY2UoL1xzL2csIi4iKSkuZGF0YShlLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsciksYS5vcmRlcigpO3ZhciBpPXQuY2xhc3NlZCgicmFuZ2VwbG90Iik/Im5vZGVSYW5nZVBsb3QzIjoibm9kZTMiO3JldHVybiBhLmVhY2goZnVuY3Rpb24odCl7dFswXVtpXT1uLnNlbGVjdCh0aGlzKX0pLGF9fSx7ZDM6MTY1fV0sNzIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuaW5pdDJkQXJyYXk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7bisrKXJbbl09bmV3IEFycmF5KGUpO3JldHVybiByfSxyLnRyYW5zcG9zZVJhZ2dlZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49MCxhPXQubGVuZ3RoO2ZvcihlPTA7ZTxhO2UrKyluPU1hdGgubWF4KG4sdFtlXS5sZW5ndGgpO3ZhciBpPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjtlKyspZm9yKGlbZV09bmV3IEFycmF5KGEpLHI9MDtyPGE7cisrKWlbZV1bcl09dFtyXVtlXTtyZXR1cm4gaX0sci5kb3Q9ZnVuY3Rpb24odCxlKXtpZighdC5sZW5ndGh8fCFlLmxlbmd0aHx8dC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgbixhLGk9dC5sZW5ndGg7aWYodFswXS5sZW5ndGgpZm9yKG49bmV3IEFycmF5KGkpLGE9MDthPGk7YSsrKW5bYV09ci5kb3QodFthXSxlKTtlbHNlIGlmKGVbMF0ubGVuZ3RoKXt2YXIgbz1yLnRyYW5zcG9zZVJhZ2dlZChlKTtmb3Iobj1uZXcgQXJyYXkoby5sZW5ndGgpLGE9MDthPG8ubGVuZ3RoO2ErKyluW2FdPXIuZG90KHQsb1thXSl9ZWxzZSBmb3Iobj0wLGE9MDthPGk7YSsrKW4rPXRbYV0qZVthXTtyZXR1cm4gbn0sci50cmFuc2xhdGlvbk1hdHJpeD1mdW5jdGlvbih0LGUpe3JldHVybltbMSwwLHRdLFswLDEsZV0sWzAsMCwxXV19LHIucm90YXRpb25NYXRyaXg9ZnVuY3Rpb24odCl7dmFyIGU9dCpNYXRoLlBJLzE4MDtyZXR1cm5bW01hdGguY29zKGUpLC1NYXRoLnNpbihlKSwwXSxbTWF0aC5zaW4oZSksTWF0aC5jb3MoZSksMF0sWzAsMCwxXV19LHIucm90YXRpb25YWU1hdHJpeD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuZG90KHIuZG90KHIudHJhbnNsYXRpb25NYXRyaXgoZSxuKSxyLnJvdGF0aW9uTWF0cml4KHQpKSxyLnRyYW5zbGF0aW9uTWF0cml4KC1lLC1uKSl9LHIuYXBwbHkyRFRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7Mz09PWUubGVuZ3RoJiYoZT1lWzBdKTt2YXIgbj0xPT09YXJndW1lbnRzLmxlbmd0aD9lWzBdOltlWzBdLGVbMV1dO3JldHVybiByLmRvdCh0LFtuWzBdLG5bMV0sMV0pLnNsaWNlKDAsMil9fSxyLmFwcGx5MkRUcmFuc2Zvcm0yPWZ1bmN0aW9uKHQpe3ZhciBlPXIuYXBwbHkyRFRyYW5zZm9ybSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodC5zbGljZSgwLDIpKS5jb25jYXQoZSh0LnNsaWNlKDIsNCkpKX19fSx7fV0sNzI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dCVlO3JldHVybiByPDA/citlOnJ9LG1vZEhhbGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModCk+ZS8yP3QtTWF0aC5yb3VuZCh0L2UpKmU6dH19fSx7fV0sNzI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiBpKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbixvLHMsbCxjPXQ7Zm9yKHM9MDtzPGUubGVuZ3RoLTE7cysrKXtpZigtMT09PShyPWVbc10pKXtmb3Iobj0hMCxvPVtdLGw9MDtsPGMubGVuZ3RoO2wrKylvW2xdPWkoY1tsXSxlLnNsaWNlKHMrMSkpKCksb1tsXSE9PW9bMF0mJihuPSExKTtyZXR1cm4gbj9vWzBdOm99aWYoIm51bWJlciI9PXR5cGVvZiByJiYhYShjKSlyZXR1cm47aWYoIm9iamVjdCIhPXR5cGVvZihjPWNbcl0pfHxudWxsPT09YylyZXR1cm59aWYoIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT09YyYmbnVsbCE9PShvPWNbZVtzXV0pKXJldHVybiBvfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihuKGUpKWU9U3RyaW5nKGUpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBlfHwiWy0xXSI9PT1lLnN1YnN0cihlLmxlbmd0aC00KSl0aHJvdyJiYWQgcHJvcGVydHkgc3RyaW5nIjtmb3IodmFyIHIsYSxvLHM9MCxjPWUuc3BsaXQoIi4iKTtzPGMubGVuZ3RoOyl7aWYocj1TdHJpbmcoY1tzXSkubWF0Y2goL14oW15cW1xdXSopKChcW1wtP1swLTldKlxdKSspJC8pKXtpZihyWzFdKWNbc109clsxXTtlbHNle2lmKDAhPT1zKXRocm93ImJhZCBwcm9wZXJ0eSBzdHJpbmciO2Muc3BsaWNlKDAsMSl9Zm9yKGE9clsyXS5zdWJzdHIoMSxyWzJdLmxlbmd0aC0yKS5zcGxpdCgiXVsiKSxvPTA7bzxhLmxlbmd0aDtvKyspcysrLGMuc3BsaWNlKHMsMCxOdW1iZXIoYVtvXSkpfXMrK31yZXR1cm4ib2JqZWN0IiE9dHlwZW9mIHQ/ZnVuY3Rpb24odCxlLHIpe3JldHVybntzZXQ6ZnVuY3Rpb24oKXt0aHJvdyJiYWQgY29udGFpbmVyIn0sZ2V0OmZ1bmN0aW9uKCl7fSxhc3RyOmUscGFydHM6cixvYmo6dH19KHQsZSxjKTp7c2V0OmwodCxjLGUpLGdldDppKHQsYyksYXN0cjplLHBhcnRzOmMsb2JqOnR9fTt2YXIgbz0vKF58XC4pYXJnc1xbLztmdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHZvaWQgMD09PXR8fG51bGw9PT10JiYhZS5tYXRjaChvKX1mdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGksbyxsPXQsZj0iIixwPVtbdCxmXV0sZD1zKG4scik7Zm9yKG89MDtvPGUubGVuZ3RoLTE7bysrKXtpZigibnVtYmVyIj09dHlwZW9mKGk9ZVtvXSkmJiFhKGwpKXRocm93ImFycmF5IGluZGV4IGJ1dCBjb250YWluZXIgaXMgbm90IGFuIGFycmF5IjtpZigtMT09PWkpe2lmKGQ9IXUobCxlLnNsaWNlKG8rMSksbixyKSlicmVhaztyZXR1cm59aWYoIWgobCxpLGVbbysxXSxkKSlicmVhaztpZigib2JqZWN0IiE9dHlwZW9mKGw9bFtpXSl8fG51bGw9PT1sKXRocm93ImNvbnRhaW5lciBpcyBub3QgYW4gb2JqZWN0IjtmPWMoZixpKSxwLnB1c2goW2wsZl0pfWlmKGQpe2lmKG89PT1lLmxlbmd0aC0xJiYoZGVsZXRlIGxbZVtvXV0sQXJyYXkuaXNBcnJheShsKSYmK2Vbb109PWwubGVuZ3RoLTEpKWZvcig7bC5sZW5ndGgmJnZvaWQgMD09PWxbbC5sZW5ndGgtMV07KWwucG9wKCl9ZWxzZSBsW2Vbb11dPW59fWZ1bmN0aW9uIGModCxlKXt2YXIgcj1lO3JldHVybiBuKGUpP3I9IlsiK2UrIl0iOnQmJihyPSIuIitlKSx0K3J9ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaSxvPWEociksYz0hMCx1PXIsZj1uLnJlcGxhY2UoIi0xIiwwKSxwPSFvJiZzKHIsZiksZD1lWzBdO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspZj1uLnJlcGxhY2UoIi0xIixpKSxvJiYocD1zKHU9cltpJXIubGVuZ3RoXSxmKSkscCYmKGM9ITEpLGgodCxpLGQscCkmJmwodFtpXSxlLG4ucmVwbGFjZSgiLTEiLGkpKSh1KTtyZXR1cm4gY31mdW5jdGlvbiBoKHQsZSxyLG4pe2lmKHZvaWQgMD09PXRbZV0pe2lmKG4pcmV0dXJuITE7dFtlXT0ibnVtYmVyIj09dHlwZW9mIHI/W106e319cmV0dXJuITB9fSx7Ii4vYXJyYXkiOjcwMCwiZmFzdC1pc251bWVyaWMiOjIyOH1dLDcyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSx7fV0sNzI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCJmYXN0LWlzbnVtZXJpYyIpLGk9W107ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoLTE9PT1pLmluZGV4T2YodCkpe2kucHVzaCh0KTt2YXIgcj0xZTM7YShlKT9yPWU6ImxvbmciPT09ZSYmKHI9M2UzKTt2YXIgbz1uLnNlbGVjdCgiYm9keSIpLnNlbGVjdEFsbCgiLnBsb3RseS1ub3RpZmllciIpLmRhdGEoWzBdKTtvLmVudGVyKCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJwbG90bHktbm90aWZpZXIiLCEwKSxvLnNlbGVjdEFsbCgiLm5vdGlmaWVyLW5vdGUiKS5kYXRhKGkpLmVudGVyKCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJub3RpZmllci1ub3RlIiwhMCkuc3R5bGUoIm9wYWNpdHkiLDApLmVhY2goZnVuY3Rpb24odCl7dmFyIGE9bi5zZWxlY3QodGhpcyk7YS5hcHBlbmQoImJ1dHRvbiIpLmNsYXNzZWQoIm5vdGlmaWVyLWNsb3NlIiwhMCkuaHRtbCgiJnRpbWVzOyIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXthLnRyYW5zaXRpb24oKS5jYWxsKHMpfSk7Zm9yKHZhciBpPWEuYXBwZW5kKCJwIiksbz10LnNwbGl0KC88YnJccypcLz8+L2cpLGw9MDtsPG8ubGVuZ3RoO2wrKylsJiZpLmFwcGVuZCgiYnIiKSxpLmFwcGVuZCgic3BhbiIpLnRleHQob1tsXSk7InN0aWNrIj09PWU/YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMzUwKS5zdHlsZSgib3BhY2l0eSIsMSk6YS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNzAwKS5zdHlsZSgib3BhY2l0eSIsMSkudHJhbnNpdGlvbigpLmRlbGF5KHIpLmNhbGwocyl9KX1mdW5jdGlvbiBzKHQpe3QuZHVyYXRpb24oNzAwKS5zdHlsZSgib3BhY2l0eSIsMCkuZWFjaCgiZW5kIixmdW5jdGlvbih0KXt2YXIgZT1pLmluZGV4T2YodCk7LTEhPT1lJiZpLnNwbGljZShlLDEpLG4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSl9fX0se2QzOjE2NSwiZmFzdC1pc251bWVyaWMiOjIyOH1dLDcyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NldGN1cnNvciIpLGE9ImRhdGEtc2F2ZWRjdXJzb3IiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuYXR0cihhKTtpZihlKXtpZighcil7Zm9yKHZhciBpPSh0LmF0dHIoImNsYXNzIil8fCIiKS5zcGxpdCgiICIpLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXTswPT09cy5pbmRleE9mKCJjdXJzb3ItIikmJnQuYXR0cihhLHMuc3Vic3RyKDcpKS5jbGFzc2VkKHMsITEpfXQuYXR0cihhKXx8dC5hdHRyKGEsIiEhIil9bih0LGUpfWVsc2UgciYmKHQuYXR0cihhLG51bGwpLCIhISI9PT1yP24odCk6bih0LHIpKX19LHsiLi9zZXRjdXJzb3IiOjczN31dLDcyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL21hdHJpeCIpLmRvdCxhPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0saT1lLmV4cG9ydHM9e307aS50ZXN0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscj10LnNsaWNlKCksbj1yWzBdWzBdLGk9bixvPXJbMF1bMV0scz1vO2ZvcihyLnB1c2goclswXSksZT0xO2U8ci5sZW5ndGg7ZSsrKW49TWF0aC5taW4obixyW2VdWzBdKSxpPU1hdGgubWF4KGkscltlXVswXSksbz1NYXRoLm1pbihvLHJbZV1bMV0pLHM9TWF0aC5tYXgocyxyW2VdWzFdKTt2YXIgbCxjPSExOzU9PT1yLmxlbmd0aCYmKHJbMF1bMF09PT1yWzFdWzBdP3JbMl1bMF09PT1yWzNdWzBdJiZyWzBdWzFdPT09clszXVsxXSYmclsxXVsxXT09PXJbMl1bMV0mJihjPSEwLGw9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1yWzBdWzBdfSk6clswXVsxXT09PXJbMV1bMV0mJnJbMl1bMV09PT1yWzNdWzFdJiZyWzBdWzBdPT09clszXVswXSYmclsxXVswXT09PXJbMl1bMF0mJihjPSEwLGw9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMV09PT1yWzBdWzFdfSkpO3ZhciB1PSEwLGg9clswXTtmb3IoZT0xO2U8ci5sZW5ndGg7ZSsrKWlmKGhbMF0hPT1yW2VdWzBdfHxoWzFdIT09cltlXVsxXSl7dT0hMTticmVha31yZXR1cm57eG1pbjpuLHhtYXg6aSx5bWluOm8seW1heDpzLHB0czpyLGNvbnRhaW5zOmM/ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLGM9dFsxXTtyZXR1cm4hKHI9PT1hfHxyPG58fHI+aXx8Yz09PWF8fGM8b3x8Yz5zfHxlJiZsKHQpKX06ZnVuY3Rpb24odCxlKXt2YXIgbD10WzBdLGM9dFsxXTtpZihsPT09YXx8bDxufHxsPml8fGM9PT1hfHxjPG98fGM+cylyZXR1cm4hMTt2YXIgdSxoLGYscCxkLGc9ci5sZW5ndGgsdj1yWzBdWzBdLG09clswXVsxXSx5PTA7Zm9yKHU9MTt1PGc7dSsrKWlmKGg9dixmPW0sdj1yW3VdWzBdLG09clt1XVsxXSwhKGw8KHA9TWF0aC5taW4oaCx2KSl8fGw+TWF0aC5tYXgoaCx2KXx8Yz5NYXRoLm1heChmLG0pKSlpZihjPE1hdGgubWluKGYsbSkpbCE9PXAmJnkrKztlbHNle2lmKGM9PT0oZD12PT09aD9jOmYrKGwtaCkqKG0tZikvKHYtaCkpKXJldHVybiAxIT09dXx8IWU7Yzw9ZCYmbCE9PXAmJnkrK31yZXR1cm4geSUyPT0xfSxpc1JlY3Q6YyxkZWdlbmVyYXRlOnV9fSxpLmlzU2VnbWVudEJlbnQ9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIGksbyxzLGw9dFtlXSxjPVt0W3JdWzBdLWxbMF0sdFtyXVsxXS1sWzFdXSx1PW4oYyxjKSxoPU1hdGguc3FydCh1KSxmPVstY1sxXS9oLGNbMF0vaF07Zm9yKGk9ZSsxO2k8cjtpKyspaWYobz1bdFtpXVswXS1sWzBdLHRbaV1bMV0tbFsxXV0sKHM9bihvLGMpKTwwfHxzPnV8fE1hdGguYWJzKG4obyxmKSk+YSlyZXR1cm4hMDtyZXR1cm4hMX0saS5maWx0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj1bdFswXV0sbj0wLGE9MDtmdW5jdGlvbiBvKG8pe3QucHVzaChvKTt2YXIgcz1yLmxlbmd0aCxsPW47ci5zcGxpY2UoYSsxKTtmb3IodmFyIGM9bCsxO2M8dC5sZW5ndGg7YysrKShjPT09dC5sZW5ndGgtMXx8aS5pc1NlZ21lbnRCZW50KHQsbCxjKzEsZSkpJiYoci5wdXNoKHRbY10pLHIubGVuZ3RoPHMtMiYmKG49YyxhPXIubGVuZ3RoLTEpLGw9Yyl9dC5sZW5ndGg+MSYmbyh0LnBvcCgpKTtyZXR1cm57YWRkUHQ6byxyYXc6dCxmaWx0ZXJlZDpyfX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzLCIuL21hdHJpeCI6NzIzfV0sNzMwOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3Nob3dfbm9fd2ViZ2xfbXNnIiksYT10KCJyZWdsIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5fZnVsbExheW91dCxvPSEwO3JldHVybiBpLl9nbGNhbnZhcy5lYWNoKGZ1bmN0aW9uKG4pe2lmKCFuLnJlZ2wmJighbi5waWNrfHxpLl9oYXMoInBhcmNvb3JkcyIpKSl7dHJ5e24ucmVnbD1hKHtjYW52YXM6dGhpcyxhdHRyaWJ1dGVzOnthbnRpYWxpYXM6IW4ucGljayxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITB9LHBpeGVsUmF0aW86dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvfHxyLmRldmljZVBpeGVsUmF0aW8sZXh0ZW5zaW9uczplfHxbXX0pfWNhdGNoKHQpe289ITF9byYmdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixmdW5jdGlvbihlKXt0JiZ0LmVtaXQmJnQuZW1pdCgicGxvdGx5X3dlYmdsY29udGV4dGxvc3QiLHtldmVudDplLGxheWVyOm4ua2V5fSl9LCExKX19KSxvfHxuKHtjb250YWluZXI6aS5fZ2xjb250YWluZXIubm9kZSgpfSksb319KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9zaG93X25vX3dlYmdsX21zZyI6NzM4LHJlZ2w6NTAxfV0sNzMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe2Zvcih2YXIgcj1lLnRvU3RyaW5nKCksbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl1pbnN0YW5jZW9mIFJlZ0V4cCYmdFtuXS50b1N0cmluZygpPT09cilyZXR1cm4gdDt0LnB1c2goZSl9ZWxzZSFlJiYwIT09ZXx8LTEhPT10LmluZGV4T2YoZSl8fHQucHVzaChlKTtyZXR1cm4gdH19LHt9XSw3MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksYT10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLmRmbHRDb25maWc7dmFyIGk9e2FkZDpmdW5jdGlvbih0LGUscixuLGkpe3ZhciBvLHM7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSxzPXQudW5kb1F1ZXVlLmluZGV4LHQuYXV0b3BsYXk/dC51bmRvUXVldWUuaW5TZXF1ZW5jZXx8KHQuYXV0b3BsYXk9ITEpOighdC51bmRvUXVldWUuc2VxdWVuY2V8fHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U/KG89e3VuZG86e2NhbGxzOltdLGFyZ3M6W119LHJlZG86e2NhbGxzOltdLGFyZ3M6W119fSx0LnVuZG9RdWV1ZS5xdWV1ZS5zcGxpY2Uocyx0LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgtcyxvKSx0LnVuZG9RdWV1ZS5pbmRleCs9MSk6bz10LnVuZG9RdWV1ZS5xdWV1ZVtzLTFdLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITEsbyYmKG8udW5kby5jYWxscy51bnNoaWZ0KGUpLG8udW5kby5hcmdzLnVuc2hpZnQociksby5yZWRvLmNhbGxzLnB1c2gobiksby5yZWRvLmFyZ3MucHVzaChpKSksdC51bmRvUXVldWUucXVldWUubGVuZ3RoPmEucXVldWVMZW5ndGgmJih0LnVuZG9RdWV1ZS5xdWV1ZS5zaGlmdCgpLHQudW5kb1F1ZXVlLmluZGV4LS0pKX0sc3RhcnRTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSEwLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITB9LHN0b3BTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSExLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITF9LHVuZG86ZnVuY3Rpb24odCl7dmFyIGUscjtpZih0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcil0LmZyYW1ld29yay51bmRvKCk7ZWxzZSBpZighKHZvaWQgMD09PXQudW5kb1F1ZXVlfHxpc05hTih0LnVuZG9RdWV1ZS5pbmRleCl8fHQudW5kb1F1ZXVlLmluZGV4PD0wKSl7Zm9yKHQudW5kb1F1ZXVlLmluZGV4LS0sZT10LnVuZG9RdWV1ZS5xdWV1ZVt0LnVuZG9RdWV1ZS5pbmRleF0sdC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjxlLnVuZG8uY2FsbHMubGVuZ3RoO3IrKylpLnBsb3REbyh0LGUudW5kby5jYWxsc1tyXSxlLnVuZG8uYXJnc1tyXSk7dC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSx0LmF1dG9wbGF5PSExfX0scmVkbzpmdW5jdGlvbih0KXt2YXIgZSxyO2lmKHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXQuZnJhbWV3b3JrLnJlZG8oKTtlbHNlIGlmKCEodm9pZCAwPT09dC51bmRvUXVldWV8fGlzTmFOKHQudW5kb1F1ZXVlLmluZGV4KXx8dC51bmRvUXVldWUuaW5kZXg+PXQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aCkpe2ZvcihlPXQudW5kb1F1ZXVlLnF1ZXVlW3QudW5kb1F1ZXVlLmluZGV4XSx0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSEwLHI9MDtyPGUucmVkby5jYWxscy5sZW5ndGg7cisrKWkucGxvdERvKHQsZS5yZWRvLmNhbGxzW3JdLGUucmVkby5hcmdzW3JdKTt0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSExLHQuYXV0b3BsYXk9ITEsdC51bmRvUXVldWUuaW5kZXgrK319fTtpLnBsb3REbz1mdW5jdGlvbih0LGUscil7dC5hdXRvcGxheT0hMCxyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLGE9W10saT0wO2k8ZS5sZW5ndGg7aSsrKXI9ZVtpXSxhW2ldPXI9PT10P3I6Im9iamVjdCI9PXR5cGVvZiByP0FycmF5LmlzQXJyYXkocik/bi5leHRlbmREZWVwKFtdLHIpOm4uZXh0ZW5kRGVlcEFsbCh7fSxyKTpyO3JldHVybiBhfSh0LHIpLGUuYXBwbHkobnVsbCxyKX0sZS5leHBvcnRzPWl9LHsiLi4vbGliIjo3MTcsIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIjo3NTN9XSw3MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5jb3VudGVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPShlfHwiIikrKHI/IiI6IiQiKSxpPSExPT09bj8iIjoiXiI7cmV0dXJuInh5Ij09PXQ/bmV3IFJlZ0V4cChpKyJ4KFsyLTldfFsxLTldWzAtOV0rKT95KFsyLTldfFsxLTldWzAtOV0rKT8iK2EpOm5ldyBSZWdFeHAoaSt0KyIoWzItOV18WzEtOV1bMC05XSspPyIrYSl9fSx7fV0sNzM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPS9eKC4qKShcLlteXC5cW1xdXSt8XFtcZFxdKSQvLGE9L15bXlwuXFtcXV0rJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKDtlOyl7dmFyIHI9dC5tYXRjaChuKTtpZihyKXQ9clsxXTtlbHNle2lmKCF0Lm1hdGNoKGEpKXRocm93IG5ldyBFcnJvcigiYmFkIHJlbGF0aXZlQXR0ciBjYWxsOiIrW3QsZV0pO3Q9IiJ9aWYoIl4iIT09ZS5jaGFyQXQoMCkpYnJlYWs7ZT1lLnNsaWNlKDEpfXJldHVybiB0JiYiWyIhPT1lLmNoYXJBdCgwKT90KyIuIitlOnQrZX19LHt9XSw3MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXksYT10KCIuL2lzX3BsYWluX29iamVjdCIpO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUscil7Zm9yKHZhciBpIGluIHIpe3ZhciBvPXJbaV0scz1lW2ldO2lmKHMhPT1vKWlmKCJfIj09PWkuY2hhckF0KDApfHwiZnVuY3Rpb24iPT10eXBlb2Ygbyl7aWYoaSBpbiBlKWNvbnRpbnVlO2VbaV09b31lbHNlIGlmKG4obykmJm4ocykmJmEob1swXSkpe2lmKCJjdXN0b21kYXRhIj09PWl8fCJpZHMiPT09aSljb250aW51ZTtmb3IodmFyIGw9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgpLGM9MDtjPGw7YysrKXNbY10hPT1vW2NdJiZhKG9bY10pJiZhKHNbY10pJiZ0KHNbY10sb1tjXSl9ZWxzZSBhKG8pJiZhKHMpJiYodChzLG8pLE9iamVjdC5rZXlzKHMpLmxlbmd0aHx8ZGVsZXRlIGVbaV0pfX19LHsiLi9hcnJheSI6NzAwLCIuL2lzX3BsYWluX29iamVjdCI6NzE4fV0sNzM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuL2xvZ2dlcnMiKSxpPXQoIi4vaWRlbnRpdHkiKTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQ8ZX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHQ8PWV9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0PmV9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0Pj1lfXIuZmluZEJpbj1mdW5jdGlvbih0LGUscil7aWYobihlLnN0YXJ0KSlyZXR1cm4gcj9NYXRoLmNlaWwoKHQtZS5zdGFydCkvZS5zaXplLTFlLTkpLTE6TWF0aC5mbG9vcigodC1lLnN0YXJ0KS9lLnNpemUrMWUtOSk7dmFyIGksdSxoPTAsZj1lLmxlbmd0aCxwPTAsZD1mPjE/KGVbZi0xXS1lWzBdKS8oZi0xKToxO2Zvcih1PWQ+PTA/cj9vOnM6cj9jOmwsdCs9MWUtOSpkKihyPy0xOjEpKihkPj0wPzE6LTEpO2g8ZiYmcCsrPDEwMDspdShlW2k9TWF0aC5mbG9vcigoaCtmKS8yKV0sdCk/aD1pKzE6Zj1pO3JldHVybiBwPjkwJiZhLmxvZygiTG9uZyBiaW5hcnkgc2VhcmNoLi4uIiksaC0xfSxyLnNvcnRlckFzYz1mdW5jdGlvbih0LGUpe3JldHVybiB0LWV9LHIuc29ydGVyRGVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0sci5kaXN0aW5jdFZhbHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zbGljZSgpO2Uuc29ydChyLnNvcnRlckFzYyk7Zm9yKHZhciBuPWUubGVuZ3RoLTEsYT1lW25dLWVbMF18fDEsaT1hLyhufHwxKS8xZTQsbz1bZVswXV0scz0wO3M8bjtzKyspZVtzKzFdPmVbc10raSYmKGE9TWF0aC5taW4oYSxlW3MrMV0tZVtzXSksby5wdXNoKGVbcysxXSkpO3JldHVybnt2YWxzOm8sbWluRGlmZjphfX0sci5yb3VuZFVwPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4sYT0wLGk9ZS5sZW5ndGgtMSxvPTAscz1yPzA6MSxsPXI/MTowLGM9cj9NYXRoLmNlaWw6TWF0aC5mbG9vcjthPGkmJm8rKzwxMDA7KWVbbj1jKChhK2kpLzIpXTw9dD9hPW4rczppPW4tbDtyZXR1cm4gZVthXX0sci5zb3J0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGE9MTthPHQubGVuZ3RoO2ErKyl7dmFyIGk9ZSh0W2FdLHRbYS0xXSk7aWYoaTwwP3I9MTppPjAmJihuPTEpLHImJm4pcmV0dXJuIHQuc29ydChlKX1yZXR1cm4gbj90OnQucmV2ZXJzZSgpfSxyLmZpbmRJbmRleE9mTWluPWZ1bmN0aW9uKHQsZSl7ZT1lfHxpO2Zvcih2YXIgcixuPTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPWUodFthXSk7bzxuJiYobj1vLHI9YSl9cmV0dXJuIHJ9fSx7Ii4vaWRlbnRpdHkiOjcxNiwiLi9sb2dnZXJzIjo3MjEsImZhc3QtaXNudW1lcmljIjoyMjh9XSw3Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7KHQuYXR0cigiY2xhc3MiKXx8IiIpLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXswPT09ZS5pbmRleE9mKCJjdXJzb3ItIikmJnQuY2xhc3NlZChlLCExKX0pLGUmJnQuY2xhc3NlZCgiY3Vyc29yLSIrZSwhMCl9fSx7fV0sNzM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxhPWZ1bmN0aW9uKCl7fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpImZ1bmN0aW9uIj09dHlwZW9mIHRbZV0mJih0W2VdPWEpO3QuZGVzdHJveT1mdW5jdGlvbigpe3QuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodC5jb250YWluZXIpfTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmNsYXNzTmFtZT0ibm8td2ViZ2wiLHIuc3R5bGUuY3Vyc29yPSJwb2ludGVyIixyLnN0eWxlLmZvbnRTaXplPSIyNHB4IixyLnN0eWxlLmNvbG9yPW4uZGVmYXVsdHNbMF0sci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUubGVmdD1yLnN0eWxlLnRvcD0iMHB4IixyLnN0eWxlLndpZHRoPXIuc3R5bGUuaGVpZ2h0PSIxMDAlIixyLnN0eWxlWyJiYWNrZ3JvdW5kLWNvbG9yIl09bi5saWdodExpbmUsci5zdHlsZVsiei1pbmRleCJdPTMwO3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtyZXR1cm4gaS50ZXh0Q29udGVudD0iV2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIgLSB2aXNpdCBodHRwczovL2dldC53ZWJnbC5vcmcgZm9yIG1vcmUgaW5mbyIsaS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGkuc3R5bGUudG9wPSI1MCUiLGkuc3R5bGUubGVmdD0iNTAlIixpLnN0eWxlLmhlaWdodD0iMzAlIixpLnN0eWxlLndpZHRoPSI1MCUiLGkuc3R5bGUubWFyZ2luPSItMTUlIDAgMCAtMjUlIixyLmFwcGVuZENoaWxkKGkpLHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHIpLHQuY29udGFpbmVyLnN0eWxlLmJhY2tncm91bmQ9IiNGRkZGRkYiLHQuY29udGFpbmVyLm9uY2xpY2s9ZnVuY3Rpb24oKXt3aW5kb3cub3BlbigiaHR0cHM6Ly9nZXQud2ViZ2wub3JnIil9LCExfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo1OTJ9XSw3Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4vYXJyYXkiKS5pc0FycmF5T3JUeXBlZEFycmF5O3IuYWdnTnVtcz1mdW5jdGlvbih0LGUsaSxvKXt2YXIgcyxsO2lmKCghb3x8bz5pLmxlbmd0aCkmJihvPWkubGVuZ3RoKSxuKGUpfHwoZT0hMSksYShpWzBdKSl7Zm9yKGw9bmV3IEFycmF5KG8pLHM9MDtzPG87cysrKWxbc109ci5hZ2dOdW1zKHQsZSxpW3NdKTtpPWx9Zm9yKHM9MDtzPG87cysrKW4oZSk/bihpW3NdKSYmKGU9dCgrZSwraVtzXSkpOmU9aVtzXTtyZXR1cm4gZX0sci5sZW49ZnVuY3Rpb24odCl7cmV0dXJuIHIuYWdnTnVtcyhmdW5jdGlvbih0KXtyZXR1cm4gdCsxfSwwLHQpfSxyLm1lYW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KGU9ci5sZW4odCkpLHIuYWdnTnVtcyhmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9LDAsdCkvZX0sci5taWRSYW5nZT1mdW5jdGlvbih0KXtpZih2b2lkIDAhPT10JiYwIT09dC5sZW5ndGgpcmV0dXJuKHIuYWdnTnVtcyhNYXRoLm1heCxudWxsLHQpK3IuYWdnTnVtcyhNYXRoLm1pbixudWxsLHQpKS8yfSxyLnZhcmlhbmNlPWZ1bmN0aW9uKHQsZSxhKXtyZXR1cm4gZXx8KGU9ci5sZW4odCkpLG4oYSl8fChhPXIubWVhbih0LGUpKSxyLmFnZ051bXMoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtNYXRoLnBvdyhlLWEsMil9LDAsdCkvZX0sci5zdGRldj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIE1hdGguc3FydChyLnZhcmlhbmNlKHQsZSxuKSl9LHIubWVkaWFuPWZ1bmN0aW9uKHQpe3ZhciBlPXQuc2xpY2UoKS5zb3J0KCk7cmV0dXJuIHIuaW50ZXJwKGUsLjUpfSxyLmludGVycD1mdW5jdGlvbih0LGUpe2lmKCFuKGUpKXRocm93Im4gc2hvdWxkIGJlIGEgZmluaXRlIG51bWJlciI7aWYoKGU9ZSp0Lmxlbmd0aC0uNSk8MClyZXR1cm4gdFswXTtpZihlPnQubGVuZ3RoLTEpcmV0dXJuIHRbdC5sZW5ndGgtMV07dmFyIHI9ZSUxO3JldHVybiByKnRbTWF0aC5jZWlsKGUpXSsoMS1yKSp0W01hdGguZmxvb3IoZSldfX0seyIuL2FycmF5Ijo3MDAsImZhc3QtaXNudW1lcmljIjoyMjh9XSw3NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3Itbm9ybWFsaXplIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0P24odCk6WzAsMCwwLDFdfX0seyJjb2xvci1ub3JtYWxpemUiOjEyMn1dLDc0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vbGliIiksaT10KCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLG89dCgiLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORztmdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2VdfXZhciBsPS8oW14kXSopKFskXStbXiRdKlskXSspKFteJF0qKS87ci5jb252ZXJ0VG9Uc3BhbnM9ZnVuY3Rpb24odCxlLEEpe3ZhciBTPXQudGV4dCgpLEw9IXQuYXR0cigiZGF0YS1ub3RleCIpJiYidW5kZWZpbmVkIiE9dHlwZW9mIE1hdGhKYXgmJlMubWF0Y2gobCksQz1uLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKTtpZighQy5lbXB0eSgpKXt2YXIgUD10LmF0dHIoImNsYXNzIik/dC5hdHRyKCJjbGFzcyIpLnNwbGl0KCIgIilbMF06InRleHQiO3JldHVybiBQKz0iLW1hdGgiLEMuc2VsZWN0QWxsKCJzdmcuIitQKS5yZW1vdmUoKSxDLnNlbGVjdEFsbCgiZy4iK1ArIi1ncm91cCIpLnJlbW92ZSgpLHQuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpTLCJkYXRhLW1hdGgiOiJOIn0pLEw/KGUmJmUuX3Byb21pc2VzfHxbXSkucHVzaChuZXcgUHJvbWlzZShmdW5jdGlvbihlKXt0LnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpO3ZhciByPXBhcnNlSW50KHQubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSxpPXtmb250U2l6ZTpyfTshZnVuY3Rpb24odCxlLHIpe3ZhciBpLG8scyxsO01hdGhKYXguSHViLlF1ZXVlKGZ1bmN0aW9uKCl7cmV0dXJuIG89YS5leHRlbmREZWVwQWxsKHt9LE1hdGhKYXguSHViLmNvbmZpZykscz1NYXRoSmF4Lkh1Yi5wcm9jZXNzU2VjdGlvbkRlbGF5LHZvaWQgMCE9PU1hdGhKYXguSHViLnByb2Nlc3NTZWN0aW9uRGVsYXkmJihNYXRoSmF4Lkh1Yi5wcm9jZXNzU2VjdGlvbkRlbGF5PTApLE1hdGhKYXguSHViLkNvbmZpZyh7bWVzc2FnZVN0eWxlOiJub25lIix0ZXgyamF4OntpbmxpbmVNYXRoOltbIiQiLCIkIl0sWyJcXCgiLCJcXCkiXV19LGRpc3BsYXlBbGlnbjoibGVmdCJ9KX0sZnVuY3Rpb24oKXtpZigiU1ZHIiE9PShpPU1hdGhKYXguSHViLmNvbmZpZy5tZW51U2V0dGluZ3MucmVuZGVyZXIpKXJldHVybiBNYXRoSmF4Lkh1Yi5zZXRSZW5kZXJlcigiU1ZHIil9LGZ1bmN0aW9uKCl7dmFyIHI9Im1hdGgtb3V0cHV0LSIrYS5yYW5kc3RyKHt9LDY0KTtyZXR1cm4gbD1uLnNlbGVjdCgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cih7aWQ6cn0pLnN0eWxlKHt2aXNpYmlsaXR5OiJoaWRkZW4iLHBvc2l0aW9uOiJhYnNvbHV0ZSJ9KS5zdHlsZSh7ImZvbnQtc2l6ZSI6ZS5mb250U2l6ZSsicHgifSkudGV4dCh0LnJlcGxhY2UoYywiXFxsdCAiKS5yZXBsYWNlKHUsIlxcZ3QgIikpLE1hdGhKYXguSHViLlR5cGVzZXQobC5ub2RlKCkpfSxmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KCJib2R5Iikuc2VsZWN0KCIjTWF0aEpheF9TVkdfZ2x5cGhzIik7aWYobC5zZWxlY3QoIi5NYXRoSmF4X1NWRyIpLmVtcHR5KCl8fCFsLnNlbGVjdCgic3ZnIikubm9kZSgpKWEubG9nKCJUaGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIHRleCBzeW50YXguIix0KSxyKCk7ZWxzZXt2YXIgbz1sLnNlbGVjdCgic3ZnIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3IobC5zZWxlY3QoIi5NYXRoSmF4X1NWRyIpLGUsbyl9aWYobC5yZW1vdmUoKSwiU1ZHIiE9PWkpcmV0dXJuIE1hdGhKYXguSHViLnNldFJlbmRlcmVyKGkpfSxmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT1zJiYoTWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheT1zKSxNYXRoSmF4Lkh1Yi5Db25maWcobyl9KX0oTFsyXSxpLGZ1bmN0aW9uKG4sYSxpKXtDLnNlbGVjdEFsbCgic3ZnLiIrUCkucmVtb3ZlKCksQy5zZWxlY3RBbGwoImcuIitQKyItZ3JvdXAiKS5yZW1vdmUoKTt2YXIgbz1uJiZuLnNlbGVjdCgic3ZnIik7aWYoIW98fCFvLm5vZGUoKSlyZXR1cm4gTygpLHZvaWQgZSgpO3ZhciBsPUMuYXBwZW5kKCJnIikuY2xhc3NlZChQKyItZ3JvdXAiLCEwKS5hdHRyKHsicG9pbnRlci1ldmVudHMiOiJub25lIiwiZGF0YS11bmZvcm1hdHRlZCI6UywiZGF0YS1tYXRoIjoiWSJ9KTtsLm5vZGUoKS5hcHBlbmRDaGlsZChvLm5vZGUoKSksYSYmYS5ub2RlKCkmJm8ubm9kZSgpLmluc2VydEJlZm9yZShhLm5vZGUoKS5jbG9uZU5vZGUoITApLG8ubm9kZSgpLmZpcnN0Q2hpbGQpLG8uYXR0cih7Y2xhc3M6UCxoZWlnaHQ6aS5oZWlnaHQscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4gbWVldCJ9KS5zdHlsZSh7b3ZlcmZsb3c6InZpc2libGUiLCJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSk7dmFyIGM9dC5ub2RlKCkuc3R5bGUuZmlsbHx8ImJsYWNrIix1PW8uc2VsZWN0KCJnIik7dS5hdHRyKHtmaWxsOmMsc3Ryb2tlOmN9KTt2YXIgaD1zKHUsIndpZHRoIiksZj1zKHUsImhlaWdodCIpLHA9K3QuYXR0cigieCIpLWgqe3N0YXJ0OjAsbWlkZGxlOi41LGVuZDoxfVt0LmF0dHIoInRleHQtYW5jaG9yIil8fCJzdGFydCJdLGQ9LShyfHxzKHQsImhlaWdodCIpKS80OyJ5Ij09PVBbMF0/KGwuYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitbLTkwLCt0LmF0dHIoIngiKSwrdC5hdHRyKCJ5IildKyIpIHRyYW5zbGF0ZSgiK1staC8yLGQtZi8yXSsiKSJ9KSxvLmF0dHIoe3g6K3QuYXR0cigieCIpLHk6K3QuYXR0cigieSIpfSkpOiJsIj09PVBbMF0/by5hdHRyKHt4OnQuYXR0cigieCIpLHk6ZC1mLzJ9KToiYSI9PT1QWzBdJiYwIT09UC5pbmRleE9mKCJhdGl0bGUiKT9vLmF0dHIoe3g6MCx5OmR9KTpvLmF0dHIoe3g6cCx5Oit0LmF0dHIoInkiKStkLWYvMn0pLEEmJkEuY2FsbCh0LGwpLGUobCl9KX0pKTpPKCksdH1mdW5jdGlvbiBPKCl7Qy5lbXB0eSgpfHwoUD10LmF0dHIoImNsYXNzIikrIi1tYXRoIixDLnNlbGVjdCgic3ZnLiIrUCkucmVtb3ZlKCkpLHQudGV4dCgiIikuc3R5bGUoIndoaXRlLXNwYWNlIiwicHJlIiksZnVuY3Rpb24odCxlKXtlPWUucmVwbGFjZSh2LCIgIik7dmFyIHIscz0hMSxsPVtdLGM9LTE7ZnVuY3Rpb24gdSgpe2MrKzt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoaS5zdmcsInRzcGFuIik7bi5zZWxlY3QoZSkuYXR0cih7Y2xhc3M6ImxpbmUiLGR5OmMqbysiZW0ifSksdC5hcHBlbmRDaGlsZChlKSxyPWU7dmFyIGE9bDtpZihsPVt7bm9kZTplfV0sYS5sZW5ndGg+MSlmb3IodmFyIHM9MTtzPGEubGVuZ3RoO3MrKylBKGFbc10pfWZ1bmN0aW9uIEEodCl7dmFyIGUsYT10LnR5cGUsbz17fTtpZigiYSI9PT1hKXtlPSJhIjt2YXIgcz10LnRhcmdldCxjPXQuaHJlZix1PXQucG9wdXA7YyYmKG89eyJ4bGluazp4bGluazpzaG93IjoiX2JsYW5rIj09PXN8fCJfIiE9PXMuY2hhckF0KDApPyJuZXciOiJyZXBsYWNlIix0YXJnZXQ6cywieGxpbms6eGxpbms6aHJlZiI6Y30sdSYmKG8ub25jbGljaz0nd2luZG93Lm9wZW4odGhpcy5ocmVmLmJhc2VWYWwsdGhpcy50YXJnZXQuYmFzZVZhbCwiJyt1KyciKTtyZXR1cm4gZmFsc2U7JykpfWVsc2UgZT0idHNwYW4iO3Quc3R5bGUmJihvLnN0eWxlPXQuc3R5bGUpO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhpLnN2ZyxlKTtpZigic3VwIj09PWF8fCJzdWIiPT09YSl7UyhyLGQpLHIuYXBwZW5kQ2hpbGQoaCk7dmFyIGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGkuc3ZnLCJ0c3BhbiIpO1MoZyxkKSxuLnNlbGVjdChnKS5hdHRyKCJkeSIscFthXSksby5keT1mW2FdLHIuYXBwZW5kQ2hpbGQoaCksci5hcHBlbmRDaGlsZChnKX1lbHNlIHIuYXBwZW5kQ2hpbGQoaCk7bi5zZWxlY3QoaCkuYXR0cihvKSxyPXQubm9kZT1oLGwucHVzaCh0KX1mdW5jdGlvbiBTKHQsZSl7dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9ZnVuY3Rpb24gTCh0KXtpZigxIT09bC5sZW5ndGgpe3ZhciBuPWwucG9wKCk7dCE9PW4udHlwZSYmYS5sb2coIlN0YXJ0IHRhZyA8IituLnR5cGUrIj4gZG9lc250IG1hdGNoIGVuZCB0YWcgPCIrdCsiPi4gUHJldGVuZGluZyBpdCBkaWQgbWF0Y2guIixlKSxyPWxbbC5sZW5ndGgtMV0ubm9kZX1lbHNlIGEubG9nKCJJZ25vcmluZyB1bmV4cGVjdGVkIGVuZCB0YWcgPC8iK3QrIj4uIixlKX14LnRlc3QoZSk/dSgpOihyPXQsbD1be25vZGU6dH1dKTtmb3IodmFyIEM9ZS5zcGxpdChtKSxQPTA7UDxDLmxlbmd0aDtQKyspe3ZhciBPPUNbUF0sej1PLm1hdGNoKHkpLEk9eiYmelsyXS50b0xvd2VyQ2FzZSgpLEQ9aFtJXTtpZigiYnIiPT09SSl1KCk7ZWxzZSBpZih2b2lkIDA9PT1EKVMocixFKE8pKTtlbHNlIGlmKHpbMV0pTChJKTtlbHNle3ZhciBSPXpbNF0sRj17dHlwZTpJfSxCPVQoUixiKTtpZihCPyhCPUIucmVwbGFjZShNLCIkMSBmaWxsOiIpLEQmJihCKz0iOyIrRCkpOkQmJihCPUQpLEImJihGLnN0eWxlPUIpLCJhIj09PUkpe3M9ITA7dmFyIE49VChSLF8pO2lmKE4pe3ZhciBqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtqLmhyZWY9TiwtMSE9PWcuaW5kZXhPZihqLnByb3RvY29sKSYmKEYuaHJlZj1lbmNvZGVVUkkoZGVjb2RlVVJJKE4pKSxGLnRhcmdldD1UKFIsdyl8fCJfYmxhbmsiLEYucG9wdXA9VChSLGspKX19QShGKX19cmV0dXJuIHN9KHQubm9kZSgpLFMpJiZ0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLHIucG9zaXRpb25UZXh0KHQpLEEmJkEuY2FsbCh0KX19O3ZhciBjPS8oPHwmbHQ7fCYjNjA7KS9nLHU9Lyg+fCZndDt8JiM2MjspL2c7dmFyIGg9e3N1cDoiZm9udC1zaXplOjcwJSIsc3ViOiJmb250LXNpemU6NzAlIixiOiJmb250LXdlaWdodDpib2xkIixpOiJmb250LXN0eWxlOml0YWxpYyIsYToiY3Vyc29yOnBvaW50ZXIiLHNwYW46IiIsZW06ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQifSxmPXtzdWI6IjAuM2VtIixzdXA6Ii0wLjZlbSJ9LHA9e3N1YjoiLTAuMjFlbSIsc3VwOiIwLjQyZW0ifSxkPSJcdTIwMGIiLGc9WyJodHRwOiIsImh0dHBzOiIsIm1haWx0bzoiLCIiLHZvaWQgMCwiOiJdLHY9ci5ORVdMSU5FUz0vKFxyXG4/fFxuKS9nLG09Lyg8W148Pl0qPikvLHk9LzwoXC8/KShbXiA+XSopKFxzKyguKikpPz4vaSx4PS88YnIoXHMrLiopPz4vaTtyLkJSX1RBR19BTEw9LzxicihccysuKik/Pi9naTt2YXIgYj0vKF58W1xzIiddKXN0eWxlXHMqPVxzKigiKFteIl0qKTs/InwnKFteJ10qKTs/JykvaSxfPS8oXnxbXHMiJ10paHJlZlxzKj1ccyooIihbXiJdKikifCcoW14nXSopJykvaSx3PS8oXnxbXHMiJ10pdGFyZ2V0XHMqPVxzKigiKFteIlxzXSopInwnKFteJ1xzXSopJykvaSxrPS8oXnxbXHMiJ10pcG9wdXBccyo9XHMqKCIoW1x3PSxdKikifCcoW1x3PSxdKiknKS9pO2Z1bmN0aW9uIFQodCxlKXtpZighdClyZXR1cm4gbnVsbDt2YXIgcj10Lm1hdGNoKGUpLG49ciYmKHJbM118fHJbNF0pO3JldHVybiBuJiZFKG4pfXZhciBNPS8oXnw7KVxzKmNvbG9yOi87ci5wbGFpblRleHQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dm9pZCAwIT09KGU9ZXx8e30pLmxlbiYmLTEhPT1lLmxlbj9lLmxlbjoxLzAsbj12b2lkIDAhPT1lLmFsbG93ZWRUYWdzP2UuYWxsb3dlZFRhZ3M6WyJiciJdLGE9Ii4uLiIubGVuZ3RoLGk9dC5zcGxpdChtKSxvPVtdLHM9IiIsbD0wLGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9aVtjXSxoPXUubWF0Y2goeSksZj1oJiZoWzJdLnRvTG93ZXJDYXNlKCk7aWYoZiktMSE9PW4uaW5kZXhPZihmKSYmKG8ucHVzaCh1KSxzPWYpO2Vsc2V7dmFyIHA9dS5sZW5ndGg7aWYobCtwPHIpby5wdXNoKHUpLGwrPXA7ZWxzZSBpZihsPHIpe3ZhciBkPXItbDtzJiYoImJyIiE9PXN8fGQ8PWF8fHA8PWEpJiZvLnBvcCgpLHI+YT9vLnB1c2godS5zdWJzdHIoMCxkLWEpKyIuLi4iKTpvLnB1c2godS5zdWJzdHIoMCxkKSk7YnJlYWt9cz0iIn19cmV0dXJuIG8uam9pbigiIil9O3ZhciBBPXttdToiXHUwM2JjIixhbXA6IiYiLGx0OiI8IixndDoiPiIsbmJzcDoiXHhhMCIsdGltZXM6Ilx4ZDciLHBsdXNtbjoiXHhiMSIsZGVnOiJceGIwIn0sUz0vJigjXGQrfCN4W1xkYS1mQS1GXSt8W2Etel0rKTsvZztmdW5jdGlvbiBFKHQpe3JldHVybiB0LnJlcGxhY2UoUyxmdW5jdGlvbih0LGUpe3JldHVybigiIyI9PT1lLmNoYXJBdCgwKT9mdW5jdGlvbih0KXtpZih0PjExMTQxMTEpcmV0dXJuO3ZhciBlPVN0cmluZy5mcm9tQ29kZVBvaW50O2lmKGUpcmV0dXJuIGUodCk7dmFyIHI9U3RyaW5nLmZyb21DaGFyQ29kZTtyZXR1cm4gdDw9NjU1MzU/cih0KTpyKDU1MjMyKyh0Pj4xMCksdCUxMDI0KzU2MzIwKX0oIngiPT09ZS5jaGFyQXQoMSk/cGFyc2VJbnQoZS5zdWJzdHIoMiksMTYpOnBhcnNlSW50KGUuc3Vic3RyKDEpLDEwKSk6QVtlXSl8fHR9KX1mdW5jdGlvbiBMKHQsZSxyKXt2YXIgbixhLGksbz1yLmhvcml6b250YWxBbGlnbixzPXIudmVydGljYWxBbGlnbnx8InRvcCIsbD10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPWUubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBhPSJib3R0b20iPT09cz9mdW5jdGlvbigpe3JldHVybiBsLmJvdHRvbS1uLmhlaWdodH06Im1pZGRsZSI9PT1zP2Z1bmN0aW9uKCl7cmV0dXJuIGwudG9wKyhsLmhlaWdodC1uLmhlaWdodCkvMn06ZnVuY3Rpb24oKXtyZXR1cm4gbC50b3B9LGk9InJpZ2h0Ij09PW8/ZnVuY3Rpb24oKXtyZXR1cm4gbC5yaWdodC1uLndpZHRofToiY2VudGVyIj09PW8/ZnVuY3Rpb24oKXtyZXR1cm4gbC5sZWZ0KyhsLndpZHRoLW4ud2lkdGgpLzJ9OmZ1bmN0aW9uKCl7cmV0dXJuIGwubGVmdH0sZnVuY3Rpb24oKXtyZXR1cm4gbj10aGlzLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLnN0eWxlKHt0b3A6YSgpLWMudG9wKyJweCIsbGVmdDppKCktYy5sZWZ0KyJweCIsInotaW5kZXgiOjFlM30pLHRoaXN9fXIuY29udmVydEVudGl0aWVzPUUsci5saW5lQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuc2l6ZSgpfHwxfSxyLnBvc2l0aW9uVGV4dD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2Z1bmN0aW9uIGEoZSxyKXtyZXR1cm4gdm9pZCAwPT09cj9udWxsPT09KHI9dC5hdHRyKGUpKSYmKHQuYXR0cihlLDApLHI9MCk6dC5hdHRyKGUscikscn12YXIgaT1hKCJ4IixlKSxvPWEoInkiLHIpOyJ0ZXh0Ij09PXRoaXMubm9kZU5hbWUmJnQuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuYXR0cih7eDppLHk6b30pfSl9LHIubWFrZUVkaXRhYmxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5nZCxhPWUuZGVsZWdhdGUsaT1uLmRpc3BhdGNoKCJlZGl0IiwiaW5wdXQiLCJjYW5jZWwiKSxvPWF8fHQ7aWYodC5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjphPyJub25lIjoiYWxsIn0pLDEhPT10LnNpemUoKSl0aHJvdyBuZXcgRXJyb3IoImJvbyIpO2Z1bmN0aW9uIHMoKXshZnVuY3Rpb24oKXt2YXIgYT1uLnNlbGVjdChyKS5zZWxlY3QoIi5zdmctY29udGFpbmVyIiksbz1hLmFwcGVuZCgiZGl2Iikscz10Lm5vZGUoKS5zdHlsZSxjPXBhcnNlRmxvYXQocy5mb250U2l6ZXx8MTIpLHU9ZS50ZXh0O3ZvaWQgMD09PXUmJih1PXQuYXR0cigiZGF0YS11bmZvcm1hdHRlZCIpKTtvLmNsYXNzZWQoInBsdWdpbi1lZGl0YWJsZSBlZGl0YWJsZSIsITApLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLCJmb250LWZhbWlseSI6cy5mb250RmFtaWx5fHwiQXJpYWwiLCJmb250LXNpemUiOmMsY29sb3I6ZS5maWxsfHxzLmZpbGx8fCJibGFjayIsb3BhY2l0eToxLCJiYWNrZ3JvdW5kLWNvbG9yIjplLmJhY2tncm91bmR8fCJ0cmFuc3BhcmVudCIsb3V0bGluZToiI2ZmZmZmZjMzIDFweCBzb2xpZCIsbWFyZ2luOlstYy84KzEsMCwwLC0xXS5qb2luKCJweCAiKSsicHgiLHBhZGRpbmc6IjAiLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCJ9KS5hdHRyKHtjb250ZW50ZWRpdGFibGU6ITB9KS50ZXh0KHUpLmNhbGwoTCh0LGEsZSkpLm9uKCJibHVyIixmdW5jdGlvbigpe3IuX2VkaXRpbmc9ITEsdC50ZXh0KHRoaXMudGV4dENvbnRlbnQpLnN0eWxlKHtvcGFjaXR5OjF9KTt2YXIgZSxhPW4uc2VsZWN0KHRoaXMpLmF0dHIoImNsYXNzIik7KGU9YT8iLiIrYS5zcGxpdCgiICIpWzBdKyItbWF0aC1ncm91cCI6IltjbGFzcyo9LW1hdGgtZ3JvdXBdIikmJm4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdChlKS5zdHlsZSh7b3BhY2l0eTowfSk7dmFyIG89dGhpcy50ZXh0Q29udGVudDtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkucmVtb3ZlKCksbi5zZWxlY3QoZG9jdW1lbnQpLm9uKCJtb3VzZXVwIixudWxsKSxpLmVkaXQuY2FsbCh0LG8pfSkub24oImZvY3VzIixmdW5jdGlvbigpe3ZhciB0PXRoaXM7ci5fZWRpdGluZz0hMCxuLnNlbGVjdChkb2N1bWVudCkub24oIm1vdXNldXAiLGZ1bmN0aW9uKCl7aWYobi5ldmVudC50YXJnZXQ9PT10KXJldHVybiExO2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1vLm5vZGUoKSYmby5ub2RlKCkuYmx1cigpfSl9KS5vbigia2V5dXAiLGZ1bmN0aW9uKCl7Mjc9PT1uLmV2ZW50LndoaWNoPyhyLl9lZGl0aW5nPSExLHQuc3R5bGUoe29wYWNpdHk6MX0pLG4uc2VsZWN0KHRoaXMpLnN0eWxlKHtvcGFjaXR5OjB9KS5vbigiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4hMX0pLnRyYW5zaXRpb24oKS5yZW1vdmUoKSxpLmNhbmNlbC5jYWxsKHQsdGhpcy50ZXh0Q29udGVudCkpOihpLmlucHV0LmNhbGwodCx0aGlzLnRleHRDb250ZW50KSxuLnNlbGVjdCh0aGlzKS5jYWxsKEwodCxhLGUpKSl9KS5vbigia2V5ZG93biIsZnVuY3Rpb24oKXsxMz09PW4uZXZlbnQud2hpY2gmJnRoaXMuYmx1cigpfSkuY2FsbChsKX0oKSx0LnN0eWxlKHtvcGFjaXR5OjB9KTt2YXIgYSxzPW8uYXR0cigiY2xhc3MiKTsoYT1zPyIuIitzLnNwbGl0KCIgIilbMF0rIi1tYXRoLWdyb3VwIjoiW2NsYXNzKj0tbWF0aC1ncm91cF0iKSYmbi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkuc2VsZWN0KGEpLnN0eWxlKHtvcGFjaXR5OjB9KX1mdW5jdGlvbiBsKHQpe3ZhciBlPXQubm9kZSgpLHI9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtyLnNlbGVjdE5vZGVDb250ZW50cyhlKTt2YXIgbj13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7bi5yZW1vdmVBbGxSYW5nZXMoKSxuLmFkZFJhbmdlKHIpLGUuZm9jdXMoKX1yZXR1cm4gZS5pbW1lZGlhdGU/cygpOm8ub24oImNsaWNrIixzKSxuLnJlYmluZCh0LGksIm9uIil9fSx7Ii4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY4NiwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjY5NCwiLi4vbGliIjo3MTcsZDM6MTY1fV0sNzQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O2Z1bmN0aW9uIGEodCl7dCYmbnVsbCE9PXQudGltZXImJihjbGVhclRpbWVvdXQodC50aW1lciksdC50aW1lcj1udWxsKX1yLnRocm90dGxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uW3RdLG89RGF0ZS5ub3coKTtpZighaSl7Zm9yKHZhciBzIGluIG4pbltzXS50czxvLTZlNCYmZGVsZXRlIG5bc107aT1uW3RdPXt0czowLHRpbWVyOm51bGx9fWZ1bmN0aW9uIGwoKXtyKCksaS50cz1EYXRlLm5vdygpLGkub25Eb25lJiYoaS5vbkRvbmUoKSxpLm9uRG9uZT1udWxsKX1hKGkpLG8+aS50cytlP2woKTppLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtsKCksaS50aW1lcj1udWxsfSxlKX0sci5kb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5bdF07cmV0dXJuIGUmJmUudGltZXI/bmV3IFByb21pc2UoZnVuY3Rpb24odCl7dmFyIHI9ZS5vbkRvbmU7ZS5vbkRvbmU9ZnVuY3Rpb24oKXtyJiZyKCksdCgpLGUub25Eb25lPW51bGx9fSk6UHJvbWlzZS5yZXNvbHZlKCl9LHIuY2xlYXI9ZnVuY3Rpb24odCl7aWYodClhKG5bdF0pLGRlbGV0ZSBuW3RdO2Vsc2UgZm9yKHZhciBlIGluIG4pci5jbGVhcihlKX19LHt9XSw3NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PjApcmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4xMDt2YXIgcj1NYXRoLmxvZyhNYXRoLm1pbihlWzBdLGVbMV0pKS9NYXRoLkxOMTA7cmV0dXJuIG4ocil8fChyPU1hdGgubG9nKE1hdGgubWF4KGVbMF0sZVsxXSkpL01hdGguTE4xMC02KSxyfX0seyJmYXN0LWlzbnVtZXJpYyI6MjI4fV0sNzQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWUuZXhwb3J0cz17fSxhPXQoIi4uL3Bsb3RzL2dlby9jb25zdGFudHMiKS5sb2NhdGlvbm1vZGVUb0xheWVyLGk9dCgidG9wb2pzb24tY2xpZW50IikuZmVhdHVyZTtuLmdldFRvcG9qc29uTmFtZT1mdW5jdGlvbih0KXtyZXR1cm5bdC5zY29wZS5yZXBsYWNlKC8gL2csIi0iKSwiXyIsdC5yZXNvbHV0aW9uLnRvU3RyaW5nKCksIm0iXS5qb2luKCIiKX0sbi5nZXRUb3BvanNvblBhdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlKyIuanNvbiJ9LG4uZ2V0VG9wb2pzb25GZWF0dXJlcz1mdW5jdGlvbih0LGUpe3ZhciByPWFbdC5sb2NhdGlvbm1vZGVdLG49ZS5vYmplY3RzW3JdO3JldHVybiBpKGUsbikuZmVhdHVyZXN9fSx7Ii4uL3Bsb3RzL2dlby9jb25zdGFudHMiOjc5MywidG9wb2pzb24tY2xpZW50Ijo1Mzl9XSw3NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJsb2NhbGUiLG5hbWU6ImVuLVVTIixkaWN0aW9uYXJ5OnsiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSI6IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUifSxmb3JtYXQ6e2RhdGU6IiVtLyVkLyVZIn19fSx7fV0sNzQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToibG9jYWxlIixuYW1lOiJlbiIsZGljdGlvbmFyeTp7IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUiOiJDbGljayB0byBlbnRlciBDb2xvdXJzY2FsZSB0aXRsZSJ9LGZvcm1hdDp7ZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF0ZVRpbWU6IiVhICViICVlICVYICVZIixkYXRlOiIlZC8lbS8lWSIsdGltZToiJUg6JU06JVMiLGRlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLHllYXI6IiVZIixtb250aDoiJWIgJVkiLGRheU1vbnRoOiIlYiAlLWQiLGRheU1vbnRoWWVhcjoiJWIgJS1kLCAlWSJ9fX0se31dLDc0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixhPW4ubGF5b3V0QXJyYXlDb250YWluZXJzLGk9bi5sYXlvdXRBcnJheVJlZ2V4ZXMsbz10LnNwbGl0KCJbIilbMF0scz0wO3M8aS5sZW5ndGg7cysrKWlmKChyPXQubWF0Y2goaVtzXSkpJiYwPT09ci5pbmRleCl7ZT1yWzBdO2JyZWFrfWlmKGV8fChlPWFbYS5pbmRleE9mKG8pXSksIWUpcmV0dXJuITE7dmFyIGw9dC5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiBsPyEhKHI9bC5tYXRjaCgvXlxbKDB8WzEtOV1bMC05XSopXF0oXC4oLispKT8kLykpJiZ7YXJyYXk6ZSxpbmRleDpOdW1iZXIoclsxXSkscHJvcGVydHk6clszXXx8IiJ9OnthcnJheTplLGluZGV4OiIiLHByb3BlcnR5OiIifX19LHsiLi4vcmVnaXN0cnkiOjg0Nn1dLDc0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxhPW4uZXh0ZW5kRmxhdCxpPW4uaXNQbGFpbk9iamVjdCxvPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsImNsZWFyQXhpc1R5cGVzIiwicGxvdCIsInN0eWxlIiwibWFya2VyU2l6ZSIsImNvbG9yYmFycyJdfSxzPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsInBsb3QiLCJsZWdlbmQiLCJ0aWNrcyIsImF4cmFuZ2UiLCJsYXlvdXRzdHlsZSIsIm1vZGViYXIiLCJjYW1lcmEiLCJhcnJheWRyYXciLCJjb2xvcmJhcnMiXX0sbD1vLmZsYWdzLnNsaWNlKCkuY29uY2F0KFsiZnVsbFJlcGxvdCJdKSxjPXMuZmxhZ3Muc2xpY2UoKS5jb25jYXQoImxheW91dFJlcGxvdCIpO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl1dPSExO3JldHVybiBlfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPWEoe30sdCk7Zm9yKHZhciBvIGluIG4pe3ZhciBzPW5bb107aShzKSYmKG5bb109ZihzLGUscixvKSl9cmV0dXJuImZyb20tcm9vdCI9PT1yJiYobi5lZGl0VHlwZT1lKSxufWZ1bmN0aW9uIGYodCxlLHIsbil7aWYodC52YWxUeXBlKXt2YXIgaT1hKHt9LHQpO2lmKGkuZWRpdFR5cGU9ZSxBcnJheS5pc0FycmF5KHQuaXRlbXMpKXtpLml0ZW1zPW5ldyBBcnJheSh0Lml0ZW1zLmxlbmd0aCk7Zm9yKHZhciBvPTA7bzx0Lml0ZW1zLmxlbmd0aDtvKyspaS5pdGVtc1tvXT1mKHQuaXRlbXNbb10sZSwiZnJvbS1yb290Iil9cmV0dXJuIGl9cmV0dXJuIGgodCxlLCJfIj09PW4uY2hhckF0KDApPyJuZXN0ZWQiOiJmcm9tLXJvb3QiKX1lLmV4cG9ydHM9e3RyYWNlczpvLGxheW91dDpzLHRyYWNlRmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShsKX0sbGF5b3V0RmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShjKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5lZGl0VHlwZTtpZihyJiYibm9uZSIhPT1yKWZvcih2YXIgbj1yLnNwbGl0KCIrIiksYT0wO2E8bi5sZW5ndGg7YSsrKXRbblthXV09ITB9LG92ZXJyaWRlQWxsOmh9fSx7Ii4uL2xpYiI6NzE3fV0sNzQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksYT10KCJnbC1tYXQ0L2Zyb21RdWF0IiksaT10KCIuLi9yZWdpc3RyeSIpLG89dCgiLi4vbGliIikscz10KCIuLi9wbG90cy9wbG90cyIpLGw9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYz10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksdT1sLmNsZWFuSWQsaD1sLmdldEZyb21UcmFjZSxmPWkudHJhY2VJcztmdW5jdGlvbiBwKHQsZSl7dmFyIHI9dFtlXSxuPWUuY2hhckF0KDApO3ImJiJwYXBlciIhPT1yJiYodFtlXT11KHIsbikpfWZ1bmN0aW9uIGQodCl7ZnVuY3Rpb24gZShlLHIpe3ZhciBuPXRbZV0sYT10LnRpdGxlJiZ0LnRpdGxlW3JdO24mJiFhJiYodC50aXRsZXx8KHQudGl0bGU9e30pLHQudGl0bGVbcl09dFtlXSxkZWxldGUgdFtlXSl9dCYmKCJzdHJpbmciIT10eXBlb2YgdC50aXRsZSYmIm51bWJlciIhPXR5cGVvZiB0LnRpdGxlfHwodC50aXRsZT17dGV4dDp0LnRpdGxlfSksZSgidGl0bGVmb250IiwiZm9udCIpLGUoInRpdGxlcG9zaXRpb24iLCJwb3NpdGlvbiIpLGUoInRpdGxlc2lkZSIsInNpZGUiKSxlKCJ0aXRsZW9mZnNldCIsIm9mZnNldCIpKX1mdW5jdGlvbiBnKHQpe2lmKCFvLmlzUGxhaW5PYmplY3QodCkpcmV0dXJuITE7dmFyIGU9dC5uYW1lO3JldHVybiBkZWxldGUgdC5uYW1lLGRlbGV0ZSB0LnNob3dsZWdlbmQsKCJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlKSYmU3RyaW5nKGUpfWZ1bmN0aW9uIHYodCxlLHIsbil7aWYociYmIW4pcmV0dXJuIHQ7aWYobiYmIXIpcmV0dXJuIGU7aWYoIXQudHJpbSgpKXJldHVybiBlO2lmKCFlLnRyaW0oKSlyZXR1cm4gdDt2YXIgYSxpPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtmb3IoYT0wO2E8aSYmdC5jaGFyQXQoYSk9PT1lLmNoYXJBdChhKTthKyspO3JldHVybiB0LnN1YnN0cigwLGEpLnRyaW0oKX1mdW5jdGlvbiBtKHQpe3ZhciBlPSJtaWRkbGUiLHI9ImNlbnRlciI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYoLTEhPT10LmluZGV4T2YoInRvcCIpP2U9InRvcCI6LTEhPT10LmluZGV4T2YoImJvdHRvbSIpJiYoZT0iYm90dG9tIiksLTEhPT10LmluZGV4T2YoImxlZnQiKT9yPSJsZWZ0IjotMSE9PXQuaW5kZXhPZigicmlnaHQiKSYmKHI9InJpZ2h0IikpLGUrIiAiK3J9ZnVuY3Rpb24geSh0LGUpe3JldHVybiBlIGluIHQmJiJvYmplY3QiPT10eXBlb2YgdFtlXSYmMD09PU9iamVjdC5rZXlzKHRbZV0pLmxlbmd0aH1yLmNsZWFyUHJvbWlzZVF1ZXVlPWZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodC5fcHJvbWlzZXMpJiZ0Ll9wcm9taXNlcy5sZW5ndGg+MCYmby5sb2coIkNsZWFyaW5nIHByZXZpb3VzIHJlamVjdGVkIHByb21pc2VzIGZyb20gcXVldWUuIiksdC5fcHJvbWlzZXM9W119LHIuY2xlYW5MYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGUsbjt0fHwodD17fSksdC54YXhpczEmJih0LnhheGlzfHwodC54YXhpcz10LnhheGlzMSksZGVsZXRlIHQueGF4aXMxKSx0LnlheGlzMSYmKHQueWF4aXN8fCh0LnlheGlzPXQueWF4aXMxKSxkZWxldGUgdC55YXhpczEpLHQuc2NlbmUxJiYodC5zY2VuZXx8KHQuc2NlbmU9dC5zY2VuZTEpLGRlbGV0ZSB0LnNjZW5lMSk7dmFyIGk9KHMuc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW58fHt9KS5hdHRyUmVnZXgsbD0ocy5zdWJwbG90c1JlZ2lzdHJ5LnBvbGFyfHx7fSkuYXR0clJlZ2V4LGg9KHMuc3VicGxvdHNSZWdpc3RyeS50ZXJuYXJ5fHx7fSkuYXR0clJlZ2V4LGY9KHMuc3VicGxvdHNSZWdpc3RyeS5nbDNkfHx7fSkuYXR0clJlZ2V4LGc9T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPGcubGVuZ3RoO2UrKyl7dmFyIHY9Z1tlXTtpZihpJiZpLnRlc3Qodikpe3ZhciBtPXRbdl07bS5hbmNob3ImJiJmcmVlIiE9PW0uYW5jaG9yJiYobS5hbmNob3I9dShtLmFuY2hvcikpLG0ub3ZlcmxheWluZyYmKG0ub3ZlcmxheWluZz11KG0ub3ZlcmxheWluZykpLG0udHlwZXx8KG0uaXNkYXRlP20udHlwZT0iZGF0ZSI6bS5pc2xvZz9tLnR5cGU9ImxvZyI6ITE9PT1tLmlzZGF0ZSYmITE9PT1tLmlzbG9nJiYobS50eXBlPSJsaW5lYXIiKSksIndpdGh6ZXJvIiE9PW0uYXV0b3JhbmdlJiYidG96ZXJvIiE9PW0uYXV0b3JhbmdlfHwobS5hdXRvcmFuZ2U9ITAsbS5yYW5nZW1vZGU9InRvemVybyIpLGRlbGV0ZSBtLmlzbG9nLGRlbGV0ZSBtLmlzZGF0ZSxkZWxldGUgbS5jYXRlZ29yaWVzLHkobSwiZG9tYWluIikmJmRlbGV0ZSBtLmRvbWFpbix2b2lkIDAhPT1tLmF1dG90aWNrJiYodm9pZCAwPT09bS50aWNrbW9kZSYmKG0udGlja21vZGU9bS5hdXRvdGljaz8iYXV0byI6ImxpbmVhciIpLGRlbGV0ZSBtLmF1dG90aWNrKSxkKG0pfWVsc2UgaWYobCYmbC50ZXN0KHYpKXtkKHRbdl0ucmFkaWFsYXhpcyl9ZWxzZSBpZihoJiZoLnRlc3Qodikpe3ZhciB4PXRbdl07ZCh4LmFheGlzKSxkKHguYmF4aXMpLGQoeC5jYXhpcyl9ZWxzZSBpZihmJiZmLnRlc3Qodikpe3ZhciBiPXRbdl0sXz1iLmNhbWVyYXBvc2l0aW9uO2lmKEFycmF5LmlzQXJyYXkoXykmJjQ9PT1fWzBdLmxlbmd0aCl7dmFyIHc9X1swXSxrPV9bMV0sVD1fWzJdLE09YShbXSx3KSxBPVtdO2ZvcihuPTA7bjwzOysrbilBW25dPWtbbl0rVCpNWzIrNCpuXTtiLmNhbWVyYT17ZXllOnt4OkFbMF0seTpBWzFdLHo6QVsyXX0sY2VudGVyOnt4OmtbMF0seTprWzFdLHo6a1syXX0sdXA6e3g6MCx5OjAsejoxfX0sZGVsZXRlIGIuY2FtZXJhcG9zaXRpb259ZChiLnhheGlzKSxkKGIueWF4aXMpLGQoYi56YXhpcyl9fXZhciBTPUFycmF5LmlzQXJyYXkodC5hbm5vdGF0aW9ucyk/dC5hbm5vdGF0aW9ucy5sZW5ndGg6MDtmb3IoZT0wO2U8UztlKyspe3ZhciBFPXQuYW5ub3RhdGlvbnNbZV07by5pc1BsYWluT2JqZWN0KEUpJiYoRS5yZWYmJigicGFwZXIiPT09RS5yZWY/KEUueHJlZj0icGFwZXIiLEUueXJlZj0icGFwZXIiKToiZGF0YSI9PT1FLnJlZiYmKEUueHJlZj0ieCIsRS55cmVmPSJ5IiksZGVsZXRlIEUucmVmKSxwKEUsInhyZWYiKSxwKEUsInlyZWYiKSl9dmFyIEw9QXJyYXkuaXNBcnJheSh0LnNoYXBlcyk/dC5zaGFwZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPEw7ZSsrKXt2YXIgQz10LnNoYXBlc1tlXTtvLmlzUGxhaW5PYmplY3QoQykmJihwKEMsInhyZWYiKSxwKEMsInlyZWYiKSl9dmFyIFA9dC5sZWdlbmQ7cmV0dXJuIFAmJihQLng+Mz8oUC54PTEuMDIsUC54YW5jaG9yPSJsZWZ0Iik6UC54PC0yJiYoUC54PS0uMDIsUC54YW5jaG9yPSJyaWdodCIpLFAueT4zPyhQLnk9MS4wMixQLnlhbmNob3I9ImJvdHRvbSIpOlAueTwtMiYmKFAueT0tLjAyLFAueWFuY2hvcj0idG9wIikpLGQodCksInJvdGF0ZSI9PT10LmRyYWdtb2RlJiYodC5kcmFnbW9kZT0ib3JiaXQiKSxjLmNsZWFuKHQpLHQudGVtcGxhdGUmJnQudGVtcGxhdGUubGF5b3V0JiZyLmNsZWFuTGF5b3V0KHQudGVtcGxhdGUubGF5b3V0KSx0fSxyLmNsZWFuRGF0YT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG4sYT10W2VdO2lmKCJoaXN0b2dyYW15Ij09PWEudHlwZSYmInhiaW5zImluIGEmJiEoInliaW5zImluIGEpJiYoYS55Ymlucz1hLnhiaW5zLGRlbGV0ZSBhLnhiaW5zKSxhLmVycm9yX3kmJiJvcGFjaXR5ImluIGEuZXJyb3JfeSl7dmFyIGw9Yy5kZWZhdWx0cyxoPWEuZXJyb3JfeS5jb2xvcnx8KGYoYSwiYmFyIik/Yy5kZWZhdWx0TGluZTpsW2UlbC5sZW5ndGhdKTthLmVycm9yX3kuY29sb3I9Yy5hZGRPcGFjaXR5KGMucmdiKGgpLGMub3BhY2l0eShoKSphLmVycm9yX3kub3BhY2l0eSksZGVsZXRlIGEuZXJyb3JfeS5vcGFjaXR5fWlmKCJiYXJkaXIiaW4gYSYmKCJoIiE9PWEuYmFyZGlyfHwhZihhLCJiYXIiKSYmImhpc3RvZ3JhbSIhPT1hLnR5cGUuc3Vic3RyKDAsOSl8fChhLm9yaWVudGF0aW9uPSJoIixyLnN3YXBYWURhdGEoYSkpLGRlbGV0ZSBhLmJhcmRpciksImhpc3RvZ3JhbXkiPT09YS50eXBlJiZyLnN3YXBYWURhdGEoYSksImhpc3RvZ3JhbXgiIT09YS50eXBlJiYiaGlzdG9ncmFteSIhPT1hLnR5cGV8fChhLnR5cGU9Imhpc3RvZ3JhbSIpLCJzY2wiaW4gYSYmISgiY29sb3JzY2FsZSJpbiBhKSYmKGEuY29sb3JzY2FsZT1hLnNjbCxkZWxldGUgYS5zY2wpLCJyZXZlcnNlc2NsImluIGEmJiEoInJldmVyc2VzY2FsZSJpbiBhKSYmKGEucmV2ZXJzZXNjYWxlPWEucmV2ZXJzZXNjbCxkZWxldGUgYS5yZXZlcnNlc2NsKSxhLnhheGlzJiYoYS54YXhpcz11KGEueGF4aXMsIngiKSksYS55YXhpcyYmKGEueWF4aXM9dShhLnlheGlzLCJ5IikpLGYoYSwiZ2wzZCIpJiZhLnNjZW5lJiYoYS5zY2VuZT1zLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZC5jbGVhbklkKGEuc2NlbmUpKSwhZihhLCJwaWUtbGlrZSIpJiYhZihhLCJiYXItbGlrZSIpKWlmKEFycmF5LmlzQXJyYXkoYS50ZXh0cG9zaXRpb24pKWZvcihuPTA7bjxhLnRleHRwb3NpdGlvbi5sZW5ndGg7bisrKWEudGV4dHBvc2l0aW9uW25dPW0oYS50ZXh0cG9zaXRpb25bbl0pO2Vsc2UgYS50ZXh0cG9zaXRpb24mJihhLnRleHRwb3NpdGlvbj1tKGEudGV4dHBvc2l0aW9uKSk7dmFyIHA9aS5nZXRNb2R1bGUoYSk7aWYocCYmcC5jb2xvcmJhcil7dmFyIHg9cC5jb2xvcmJhci5jb250YWluZXIsYj14P2FbeF06YTtiJiZiLmNvbG9yc2NhbGUmJigiWUlHbkJ1Ij09PWIuY29sb3JzY2FsZSYmKGIuY29sb3JzY2FsZT0iWWxHbkJ1IiksIllJT3JSZCI9PT1iLmNvbG9yc2NhbGUmJihiLmNvbG9yc2NhbGU9IllsT3JSZCIpKX1pZigic3VyZmFjZSI9PT1hLnR5cGUmJm8uaXNQbGFpbk9iamVjdChhLmNvbnRvdXJzKSl7dmFyIF89WyJ4IiwieSIsInoiXTtmb3Iobj0wO248Xy5sZW5ndGg7bisrKXt2YXIgdz1hLmNvbnRvdXJzW19bbl1dO28uaXNQbGFpbk9iamVjdCh3KSYmKHcuaGlnaGxpZ2h0Q29sb3ImJih3LmhpZ2hsaWdodGNvbG9yPXcuaGlnaGxpZ2h0Q29sb3IsZGVsZXRlIHcuaGlnaGxpZ2h0Q29sb3IpLHcuaGlnaGxpZ2h0V2lkdGgmJih3LmhpZ2hsaWdodHdpZHRoPXcuaGlnaGxpZ2h0V2lkdGgsZGVsZXRlIHcuaGlnaGxpZ2h0V2lkdGgpKX19aWYoImNhbmRsZXN0aWNrIj09PWEudHlwZXx8Im9obGMiPT09YS50eXBlKXt2YXIgaz0hMSE9PShhLmluY3JlYXNpbmd8fHt9KS5zaG93bGVnZW5kLFQ9ITEhPT0oYS5kZWNyZWFzaW5nfHx7fSkuc2hvd2xlZ2VuZCxNPWcoYS5pbmNyZWFzaW5nKSxBPWcoYS5kZWNyZWFzaW5nKTtpZighMSE9PU0mJiExIT09QSl7dmFyIFM9dihNLEEsayxUKTtTJiYoYS5uYW1lPVMpfWVsc2UhTSYmIUF8fGEubmFtZXx8KGEubmFtZT1NfHxBKX1pZihBcnJheS5pc0FycmF5KGEudHJhbnNmb3Jtcykpe3ZhciBFPWEudHJhbnNmb3Jtcztmb3Iobj0wO248RS5sZW5ndGg7bisrKXt2YXIgTD1FW25dO2lmKG8uaXNQbGFpbk9iamVjdChMKSlzd2l0Y2goTC50eXBlKXtjYXNlImZpbHRlciI6TC5maWx0ZXJzcmMmJihMLnRhcmdldD1MLmZpbHRlcnNyYyxkZWxldGUgTC5maWx0ZXJzcmMpLEwuY2FsZW5kYXImJihMLnZhbHVlY2FsZW5kYXJ8fChMLnZhbHVlY2FsZW5kYXI9TC5jYWxlbmRhciksZGVsZXRlIEwuY2FsZW5kYXIpO2JyZWFrO2Nhc2UiZ3JvdXBieSI6aWYoTC5zdHlsZXM9TC5zdHlsZXN8fEwuc3R5bGUsTC5zdHlsZXMmJiFBcnJheS5pc0FycmF5KEwuc3R5bGVzKSl7dmFyIEM9TC5zdHlsZXMsUD1PYmplY3Qua2V5cyhDKTtMLnN0eWxlcz1bXTtmb3IodmFyIE89MDtPPFAubGVuZ3RoO08rKylMLnN0eWxlcy5wdXNoKHt0YXJnZXQ6UFtPXSx2YWx1ZTpDW1BbT11dfSl9fX19eShhLCJsaW5lIikmJmRlbGV0ZSBhLmxpbmUsIm1hcmtlciJpbiBhJiYoeShhLm1hcmtlciwibGluZSIpJiZkZWxldGUgYS5tYXJrZXIubGluZSx5KGEsIm1hcmtlciIpJiZkZWxldGUgYS5tYXJrZXIpLGMuY2xlYW4oYSksYS5hdXRvYmlueCYmKGRlbGV0ZSBhLmF1dG9iaW54LGRlbGV0ZSBhLnhiaW5zKSxhLmF1dG9iaW55JiYoZGVsZXRlIGEuYXV0b2JpbnksZGVsZXRlIGEueWJpbnMpLGQoYSksYS5jb2xvcmJhciYmZChhLmNvbG9yYmFyKSxhLm1hcmtlciYmYS5tYXJrZXIuY29sb3JiYXImJmQoYS5tYXJrZXIuY29sb3JiYXIpLGEubGluZSYmYS5saW5lLmNvbG9yYmFyJiZkKGEubGluZS5jb2xvcmJhciksYS5hYXhpcyYmZChhLmFheGlzKSxhLmJheGlzJiZkKGEuYmF4aXMpfX0sci5zd2FwWFlEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKG8uc3dhcEF0dHJzKHQsWyI/IiwiPzAiLCJkPyIsIj9iaW5zIiwibmJpbnM/IiwiYXV0b2Jpbj8iLCI/c3JjIiwiZXJyb3JfPyJdKSxBcnJheS5pc0FycmF5KHQueikmJkFycmF5LmlzQXJyYXkodC56WzBdKSYmKHQudHJhbnNwb3NlP2RlbGV0ZSB0LnRyYW5zcG9zZTp0LnRyYW5zcG9zZT0hMCksdC5lcnJvcl94JiZ0LmVycm9yX3kpe3ZhciByPXQuZXJyb3JfeSxuPSJjb3B5X3lzdHlsZSJpbiByP3IuY29weV95c3R5bGU6IShyLmNvbG9yfHxyLnRoaWNrbmVzc3x8ci53aWR0aCk7by5zd2FwQXR0cnModCxbImVycm9yXz8uY29weV95c3R5bGUiXSksbiYmby5zd2FwQXR0cnModCxbImVycm9yXz8uY29sb3IiLCJlcnJvcl8/LnRoaWNrbmVzcyIsImVycm9yXz8ud2lkdGgiXSl9aWYoInN0cmluZyI9PXR5cGVvZiB0LmhvdmVyaW5mbyl7dmFyIGE9dC5ob3ZlcmluZm8uc3BsaXQoIisiKTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKSJ4Ij09PWFbZV0/YVtlXT0ieSI6InkiPT09YVtlXSYmKGFbZV09IngiKTt0LmhvdmVyaW5mbz1hLmpvaW4oIisiKX19LHIuY29lcmNlVHJhY2VJbmRpY2VzPWZ1bmN0aW9uKHQsZSl7aWYobihlKSlyZXR1cm5bZV07aWYoIUFycmF5LmlzQXJyYXkoZSl8fCFlLmxlbmd0aClyZXR1cm4gdC5kYXRhLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBlfSk7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciByPVtdLGE9MDthPGUubGVuZ3RoO2ErKylvLmlzSW5kZXgoZVthXSx0LmRhdGEubGVuZ3RoKT9yLnB1c2goZVthXSk6by53YXJuKCJ0cmFjZSBpbmRleCAoIixlW2FdLCIpIGlzIG5vdCBhIG51bWJlciBvciBpcyBvdXQgb2YgYm91bmRzIik7cmV0dXJuIHJ9cmV0dXJuIGV9LHIubWFuYWdlQXJyYXlDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10Lm9iaixpPXQucGFydHMscz1pLmxlbmd0aCxsPWlbcy0xXSxjPW4obCk7aWYoYyYmbnVsbD09PWUpe3ZhciB1PWkuc2xpY2UoMCxzLTEpLmpvaW4oIi4iKTtvLm5lc3RlZFByb3BlcnR5KGEsdSkuZ2V0KCkuc3BsaWNlKGwsMSl9ZWxzZSBjJiZ2b2lkIDA9PT10LmdldCgpPyh2b2lkIDA9PT10LmdldCgpJiYoclt0LmFzdHJdPW51bGwpLHQuc2V0KGUpKTp0LnNldChlKX07dmFyIHg9LyhcLlteXFtcXVwuXSt8XFtbXlxbXF1cLl0rXF0pJC87ZnVuY3Rpb24gYih0KXt2YXIgZT10LnNlYXJjaCh4KTtpZihlPjApcmV0dXJuIHQuc3Vic3RyKDAsZSl9ci5oYXNQYXJlbnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9YihlKTtyOyl7aWYociBpbiB0KXJldHVybiEwO3I9YihyKX1yZXR1cm4hMX07dmFyIF89WyJ4IiwieSIsInoiXTtyLmNsZWFyQXhpc1R5cGVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGE9dC5fZnVsbERhdGFbbl0saT0wO2k8MztpKyspe3ZhciBzPWgodCxhLF9baV0pO2lmKHMmJiJsb2ciIT09cy50eXBlKXt2YXIgbD1zLl9uYW1lLGM9cy5faWQuc3Vic3RyKDEpO2lmKCJzY2VuZSI9PT1jLnN1YnN0cigwLDUpKXtpZih2b2lkIDAhPT1yW2NdKWNvbnRpbnVlO2w9YysiLiIrbH12YXIgdT1sKyIudHlwZSI7dm9pZCAwPT09cltsXSYmdm9pZCAwPT09clt1XSYmby5uZXN0ZWRQcm9wZXJ0eSh0LmxheW91dCx1KS5zZXQobnVsbCl9fX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi9saWIiOjcxNywiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NjgsIi4uL3Bsb3RzL3Bsb3RzIjo4MjYsIi4uL3JlZ2lzdHJ5Ijo4NDYsImZhc3QtaXNudW1lcmljIjoyMjgsImdsLW1hdDQvZnJvbVF1YXQiOjI2NX1dLDc1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3Bsb3RfYXBpIik7ci5wbG90PW4ucGxvdCxyLm5ld1Bsb3Q9bi5uZXdQbG90LHIucmVzdHlsZT1uLnJlc3R5bGUsci5yZWxheW91dD1uLnJlbGF5b3V0LHIucmVkcmF3PW4ucmVkcmF3LHIudXBkYXRlPW4udXBkYXRlLHIuX2d1aVJlc3R5bGU9bi5fZ3VpUmVzdHlsZSxyLl9ndWlSZWxheW91dD1uLl9ndWlSZWxheW91dCxyLl9ndWlVcGRhdGU9bi5fZ3VpVXBkYXRlLHIuX3N0b3JlRGlyZWN0R1VJRWRpdD1uLl9zdG9yZURpcmVjdEdVSUVkaXQsci5yZWFjdD1uLnJlYWN0LHIuZXh0ZW5kVHJhY2VzPW4uZXh0ZW5kVHJhY2VzLHIucHJlcGVuZFRyYWNlcz1uLnByZXBlbmRUcmFjZXMsci5hZGRUcmFjZXM9bi5hZGRUcmFjZXMsci5kZWxldGVUcmFjZXM9bi5kZWxldGVUcmFjZXMsci5tb3ZlVHJhY2VzPW4ubW92ZVRyYWNlcyxyLnB1cmdlPW4ucHVyZ2Usci5hZGRGcmFtZXM9bi5hZGRGcmFtZXMsci5kZWxldGVGcmFtZXM9bi5kZWxldGVGcmFtZXMsci5hbmltYXRlPW4uYW5pbWF0ZSxyLnNldFBsb3RDb25maWc9bi5zZXRQbG90Q29uZmlnLHIudG9JbWFnZT10KCIuL3RvX2ltYWdlIiksci52YWxpZGF0ZT10KCIuL3ZhbGlkYXRlIiksci5kb3dubG9hZEltYWdlPXQoIi4uL3NuYXBzaG90L2Rvd25sb2FkIik7dmFyIGE9dCgiLi90ZW1wbGF0ZV9hcGkiKTtyLm1ha2VUZW1wbGF0ZT1hLm1ha2VUZW1wbGF0ZSxyLnZhbGlkYXRlVGVtcGxhdGU9YS52YWxpZGF0ZVRlbXBsYXRlfSx7Ii4uL3NuYXBzaG90L2Rvd25sb2FkIjo4NDgsIi4vcGxvdF9hcGkiOjc1MiwiLi90ZW1wbGF0ZV9hcGkiOjc1NywiLi90b19pbWFnZSI6NzU4LCIuL3ZhbGlkYXRlIjo3NTl9XSw3NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliL2lzX3BsYWluX29iamVjdCIpLGE9dCgiLi4vbGliL25vb3AiKSxpPXQoIi4uL2xpYi9sb2dnZXJzIiksbz10KCIuLi9saWIvc2VhcmNoIikuc29ydGVyQXNjLHM9dCgiLi4vcmVnaXN0cnkiKTtyLmNvbnRhaW5lckFycmF5TWF0Y2g9dCgiLi9jb250YWluZXJfYXJyYXlfbWF0Y2giKTt2YXIgbD1yLmlzQWRkVmFsPWZ1bmN0aW9uKHQpe3JldHVybiJhZGQiPT09dHx8bih0KX0sYz1yLmlzUmVtb3ZlVmFsPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dHx8InJlbW92ZSI9PT10fTtyLmFwcGx5Q29udGFpbmVyQXJyYXlDaGFuZ2VzPWZ1bmN0aW9uKHQsZSxyLG4sdSl7dmFyIGg9ZS5hc3RyLGY9cy5nZXRDb21wb25lbnRNZXRob2QoaCwic3VwcGx5TGF5b3V0RGVmYXVsdHMiKSxwPXMuZ2V0Q29tcG9uZW50TWV0aG9kKGgsImRyYXciKSxkPXMuZ2V0Q29tcG9uZW50TWV0aG9kKGgsImRyYXdPbmUiKSxnPW4ucmVwbG90fHxuLnJlY2FsY3x8Zj09PWF8fHA9PT1hLHY9dC5sYXlvdXQsbT10Ll9mdWxsTGF5b3V0O2lmKHJbIiJdKXtPYmplY3Qua2V5cyhyKS5sZW5ndGg+MSYmaS53YXJuKCJGdWxsIGFycmF5IGVkaXRzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBlZGl0cyIsaCk7dmFyIHk9clsiIl1bIiJdO2lmKGMoeSkpZS5zZXQobnVsbCk7ZWxzZXtpZighQXJyYXkuaXNBcnJheSh5KSlyZXR1cm4gaS53YXJuKCJVbnJlY29nbml6ZWQgZnVsbCBhcnJheSBlZGl0IHZhbHVlIixoLHkpLCEwO2Uuc2V0KHkpfXJldHVybiFnJiYoZih2LG0pLHAodCksITApfXZhciB4LGIsXyx3LGssVCxNLEEsUz1PYmplY3Qua2V5cyhyKS5tYXAoTnVtYmVyKS5zb3J0KG8pLEU9ZS5nZXQoKSxMPUV8fFtdLEM9dShtLGgpLmdldCgpLFA9W10sTz0tMSx6PUwubGVuZ3RoO2Zvcih4PTA7eDxTLmxlbmd0aDt4KyspaWYodz1yW189U1t4XV0saz1PYmplY3Qua2V5cyh3KSxUPXdbIiJdLE09bChUKSxfPDB8fF8+TC5sZW5ndGgtKE0/MDoxKSlpLndhcm4oImluZGV4IG91dCBvZiByYW5nZSIsaCxfKTtlbHNlIGlmKHZvaWQgMCE9PVQpay5sZW5ndGg+MSYmaS53YXJuKCJJbnNlcnRpb24gJiByZW1vdmFsIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBlZGl0cyB0byB0aGUgc2FtZSBpbmRleC4iLGgsXyksYyhUKT9QLnB1c2goXyk6TT8oImFkZCI9PT1UJiYoVD17fSksTC5zcGxpY2UoXywwLFQpLEMmJkMuc3BsaWNlKF8sMCx7fSkpOmkud2FybigiVW5yZWNvZ25pemVkIGZ1bGwgb2JqZWN0IGVkaXQgdmFsdWUiLGgsXyxUKSwtMT09PU8mJihPPV8pO2Vsc2UgZm9yKGI9MDtiPGsubGVuZ3RoO2IrKylBPWgrIlsiK18rIl0uIix1KExbX10sa1tiXSxBKS5zZXQod1trW2JdXSk7Zm9yKHg9UC5sZW5ndGgtMTt4Pj0wO3gtLSlMLnNwbGljZShQW3hdLDEpLEMmJkMuc3BsaWNlKFBbeF0sMSk7aWYoTC5sZW5ndGg/RXx8ZS5zZXQoTCk6ZS5zZXQobnVsbCksZylyZXR1cm4hMTtpZihmKHYsbSksZCE9PWEpe3ZhciBJO2lmKC0xPT09TylJPVM7ZWxzZXtmb3Ioej1NYXRoLm1heChMLmxlbmd0aCx6KSxJPVtdLHg9MDt4PFMubGVuZ3RoJiYhKChfPVNbeF0pPj1PKTt4KyspSS5wdXNoKF8pO2Zvcih4PU87eDx6O3grKylJLnB1c2goeCl9Zm9yKHg9MDt4PEkubGVuZ3RoO3grKylkKHQsSVt4XSl9ZWxzZSBwKHQpO3JldHVybiEwfX0seyIuLi9saWIvaXNfcGxhaW5fb2JqZWN0Ijo3MTgsIi4uL2xpYi9sb2dnZXJzIjo3MjEsIi4uL2xpYi9ub29wIjo3MjYsIi4uL2xpYi9zZWFyY2giOjczNiwiLi4vcmVnaXN0cnkiOjg0NiwiLi9jb250YWluZXJfYXJyYXlfbWF0Y2giOjc0N31dLDc1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoImhhcy1ob3ZlciIpLG89dCgiLi4vbGliIikscz1vLm5lc3RlZFByb3BlcnR5LGw9dCgiLi4vbGliL2V2ZW50cyIpLGM9dCgiLi4vbGliL3F1ZXVlIiksdT10KCIuLi9yZWdpc3RyeSIpLGg9dCgiLi9wbG90X3NjaGVtYSIpLGY9dCgiLi4vcGxvdHMvcGxvdHMiKSxwPXQoIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeSIpLGQ9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxnPXQoIi4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHY9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLG09dCgiLi4vcGxvdHMvY2FydGVzaWFuL2dyYXBoX2ludGVyYWN0IikuaW5pdEludGVyYWN0aW9ucyx5PXQoIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIikseD10KCIuLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxiPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdCxfPXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnLHc9dCgiLi9tYW5hZ2VfYXJyYXlzIiksaz10KCIuL2hlbHBlcnMiKSxUPXQoIi4vc3Vicm91dGluZXMiKSxNPXQoIi4vZWRpdF90eXBlcyIpLEE9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLkFYX05BTUVfUEFUVEVSTixTPTAsRT01O2Z1bmN0aW9uIEwodCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50P2UuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQtLTp0LmVtaXQoInBsb3RseV9hZnRlcnBsb3QiKX1mdW5jdGlvbiBDKHQsZSl7dHJ5e3QuX2Z1bGxMYXlvdXQuX3BhcGVyLnN0eWxlKCJiYWNrZ3JvdW5kIixlKX1jYXRjaCh0KXtvLmVycm9yKHQpfX1mdW5jdGlvbiBQKHQsZSl7Qyh0LHYuY29tYmluZShlLCJ3aGl0ZSIpKX1mdW5jdGlvbiBPKHQsZSl7aWYoIXQuX2NvbnRleHQpe3QuX2NvbnRleHQ9by5leHRlbmREZWVwKHt9LF8pO3ZhciByPW4uc2VsZWN0KCJiYXNlIik7dC5fY29udGV4dC5fYmFzZVVybD1yLnNpemUoKSYmci5hdHRyKCJocmVmIik/d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXToiIn12YXIgYSxzLGwsYz10Ll9jb250ZXh0O2lmKGUpe2ZvcihzPU9iamVjdC5rZXlzKGUpLGE9MDthPHMubGVuZ3RoO2ErKykiZWRpdGFibGUiIT09KGw9c1thXSkmJiJlZGl0cyIhPT1sJiZsIGluIGMmJigic2V0QmFja2dyb3VuZCI9PT1sJiYib3BhcXVlIj09PWVbbF0/Y1tsXT1QOmNbbF09ZVtsXSk7ZS5wbG90M2RQaXhlbFJhdGlvJiYhYy5wbG90R2xQaXhlbFJhdGlvJiYoYy5wbG90R2xQaXhlbFJhdGlvPWMucGxvdDNkUGl4ZWxSYXRpbyk7dmFyIHU9ZS5lZGl0YWJsZTtpZih2b2lkIDAhPT11KWZvcihjLmVkaXRhYmxlPXUscz1PYmplY3Qua2V5cyhjLmVkaXRzKSxhPTA7YTxzLmxlbmd0aDthKyspYy5lZGl0c1tzW2FdXT11O2lmKGUuZWRpdHMpZm9yKHM9T2JqZWN0LmtleXMoZS5lZGl0cyksYT0wO2E8cy5sZW5ndGg7YSsrKShsPXNbYV0paW4gYy5lZGl0cyYmKGMuZWRpdHNbbF09ZS5lZGl0c1tsXSk7Yy5fZXhwb3J0ZWRQbG90PWUuX2V4cG9ydGVkUGxvdH1jLnN0YXRpY1Bsb3QmJihjLmVkaXRhYmxlPSExLGMuZWRpdHM9e30sYy5hdXRvc2l6YWJsZT0hMSxjLnNjcm9sbFpvb209ITEsYy5kb3VibGVDbGljaz0hMSxjLnNob3dUaXBzPSExLGMuc2hvd0xpbms9ITEsYy5kaXNwbGF5TW9kZUJhcj0hMSksImhvdmVyIiE9PWMuZGlzcGxheU1vZGVCYXJ8fGl8fChjLmRpc3BsYXlNb2RlQmFyPSEwKSwidHJhbnNwYXJlbnQiIT09Yy5zZXRCYWNrZ3JvdW5kJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zZXRCYWNrZ3JvdW5kfHwoYy5zZXRCYWNrZ3JvdW5kPUMpLGMuX2hhc1plcm9IZWlnaHQ9Yy5faGFzWmVyb0hlaWdodHx8MD09PXQuY2xpZW50SGVpZ2h0LGMuX2hhc1plcm9XaWR0aD1jLl9oYXNaZXJvV2lkdGh8fDA9PT10LmNsaWVudFdpZHRoO3ZhciBoPWMuc2Nyb2xsWm9vbSxmPWMuX3Njcm9sbFpvb209e307aWYoITA9PT1oKWYuY2FydGVzaWFuPTEsZi5nbDNkPTEsZi5nZW89MSxmLm1hcGJveD0xO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBoKXt2YXIgcD1oLnNwbGl0KCIrIik7Zm9yKGE9MDthPHAubGVuZ3RoO2ErKylmW3BbYV1dPTF9ZWxzZSExIT09aCYmKGYuZ2wzZD0xLGYuZ2VvPTEsZi5tYXBib3g9MSl9ZnVuY3Rpb24geih0LGUpe3ZhciByLG4sYT1lKzEsaT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKShuPXRbcl0pPDA/aS5wdXNoKGErbik6aS5wdXNoKG4pO3JldHVybiBpfWZ1bmN0aW9uIEkodCxlLHIpe3ZhciBuLGE7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7aWYoKGE9ZVtuXSkhPT1wYXJzZUludChhLDEwKSl0aHJvdyBuZXcgRXJyb3IoImFsbCB2YWx1ZXMgaW4gIityKyIgbXVzdCBiZSBpbnRlZ2VycyIpO2lmKGE+PXQuZGF0YS5sZW5ndGh8fGE8LXQuZGF0YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKHIrIiBtdXN0IGJlIHZhbGlkIGluZGljZXMgZm9yIGdkLmRhdGEuIik7aWYoZS5pbmRleE9mKGEsbisxKT4tMXx8YT49MCYmZS5pbmRleE9mKC10LmRhdGEubGVuZ3RoK2EpPi0xfHxhPDAmJmUuaW5kZXhPZih0LmRhdGEubGVuZ3RoK2EpPi0xKXRocm93IG5ldyBFcnJvcigiZWFjaCBpbmRleCBpbiAiK3IrIiBtdXN0IGJlIHVuaXF1ZS4iKX19ZnVuY3Rpb24gRCh0LGUscil7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdkLmRhdGEgbXVzdCBiZSBhbiBhcnJheS4iKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJjdXJyZW50SW5kaWNlcyBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LiIpO2lmKEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksSSh0LGUsImN1cnJlbnRJbmRpY2VzIiksInVuZGVmaW5lZCI9PXR5cGVvZiByfHxBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLCJ1bmRlZmluZWQiIT10eXBlb2YgciYmSSh0LHIsIm5ld0luZGljZXMiKSwidW5kZWZpbmVkIiE9dHlwZW9mIHImJmUubGVuZ3RoIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjdXJyZW50IGFuZCBuZXcgaW5kaWNlcyBtdXN0IGJlIG9mIGVxdWFsIGxlbmd0aC4iKX1mdW5jdGlvbiBSKHQsZSxyLG4saSl7IWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPW8uaXNQbGFpbk9iamVjdChuKTtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5Iik7aWYoIW8uaXNQbGFpbk9iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZSBtdXN0IGJlIGEga2V5OnZhbHVlIG9iamVjdCIpO2lmKCJ1bmRlZmluZWQiPT10eXBlb2Ygcil0aHJvdyBuZXcgRXJyb3IoImluZGljZXMgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIGFycmF5IG9mIGludGVnZXJzIik7Zm9yKHZhciBpIGluIEkodCxyLCJpbmRpY2VzIiksZSl7aWYoIUFycmF5LmlzQXJyYXkoZVtpXSl8fGVbaV0ubGVuZ3RoIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhdHRyaWJ1dGUgIitpKyIgbXVzdCBiZSBhbiBhcnJheSBvZiBsZW5ndGggZXF1YWwgdG8gaW5kaWNlcyBhcnJheSBsZW5ndGgiKTtpZihhJiYoIShpIGluIG4pfHwhQXJyYXkuaXNBcnJheShuW2ldKXx8bltpXS5sZW5ndGghPT1lW2ldLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKCJ3aGVuIG1heFBvaW50cyBpcyBzZXQgYXMgYSBrZXk6dmFsdWUgb2JqZWN0IGl0IG11c3QgY29udGFpbiBhIDE6MSBjb3JyaXNwb25kZW5jZSB3aXRoIHRoZSBrZXlzIGFuZCBudW1iZXIgb2YgdHJhY2VzIGluIHRoZSB1cGRhdGUgb2JqZWN0Iil9fSh0LGUscixuKTtmb3IodmFyIGw9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksbCxjLHUsaCxmPW8uaXNQbGFpbk9iamVjdChuKSxwPVtdO2Zvcih2YXIgZCBpbiBBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLHI9eihyLHQuZGF0YS5sZW5ndGgtMSksZSlmb3IodmFyIGc9MDtnPHIubGVuZ3RoO2crKyl7aWYoaT10LmRhdGFbcltnXV0sbD0oYz1zKGksZCkpLmdldCgpLHU9ZVtkXVtnXSwhby5pc0FycmF5T3JUeXBlZEFycmF5KHUpKXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlOiAiK2QrIiBpbmRleDogIitnKyIgbXVzdCBiZSBhbiBhcnJheSIpO2lmKCFvLmlzQXJyYXlPclR5cGVkQXJyYXkobCkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZXh0ZW5kIG1pc3Npbmcgb3Igbm9uLWFycmF5IGF0dHJpYnV0ZTogIitkKTtpZihsLmNvbnN0cnVjdG9yIT09dS5jb25zdHJ1Y3Rvcil0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBleHRlbmQgYXJyYXkgd2l0aCBhbiBhcnJheSBvZiBhIGRpZmZlcmVudCB0eXBlOiAiK2QpO2g9Zj9uW2RdW2ddOm4sYShoKXx8KGg9LTEpLHAucHVzaCh7cHJvcDpjLHRhcmdldDpsLGluc2VydDp1LG1heHA6TWF0aC5mbG9vcihoKX0pfXJldHVybiBwfSh0LGUscixuKSxjPXt9LHU9e30saD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgZj1sW2hdLnByb3AscD1sW2hdLm1heHAsZD1pKGxbaF0udGFyZ2V0LGxbaF0uaW5zZXJ0LHApO2Yuc2V0KGRbMF0pLEFycmF5LmlzQXJyYXkoY1tmLmFzdHJdKXx8KGNbZi5hc3RyXT1bXSksY1tmLmFzdHJdLnB1c2goZFsxXSksQXJyYXkuaXNBcnJheSh1W2YuYXN0cl0pfHwodVtmLmFzdHJdPVtdKSx1W2YuYXN0cl0ucHVzaChsW2hdLnRhcmdldC5sZW5ndGgpfXJldHVybnt1cGRhdGU6YyxtYXhQb2ludHM6dX19ZnVuY3Rpb24gRih0LGUpe3ZhciByPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoKTtyZXR1cm4gci5zZXQodCksci5zZXQoZSx0Lmxlbmd0aCkscn1mdW5jdGlvbiBCKHQsZSxuLGEpe3Q9by5nZXRHcmFwaERpdih0KSxrLmNsZWFyUHJvbWlzZVF1ZXVlKHQpO3ZhciBpPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgZSlpW2VdPW47ZWxzZXtpZighby5pc1BsYWluT2JqZWN0KGUpKXJldHVybiBvLndhcm4oIlJlc3R5bGUgZmFpbC4iLGUsbixhKSxQcm9taXNlLnJlamVjdCgpO2k9by5leHRlbmRGbGF0KHt9LGUpLHZvaWQgMD09PWEmJihhPW4pfU9iamVjdC5rZXlzKGkpLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIHM9ay5jb2VyY2VUcmFjZUluZGljZXModCxhKSxsPVUodCxpLHMpLHU9bC5mbGFnczt1LmNhbGMmJih0LmNhbGNkYXRhPXZvaWQgMCksdS5jbGVhckF4aXNUeXBlcyYmay5jbGVhckF4aXNUeXBlcyh0LHMse30pO3ZhciBoPVtdO3UuZnVsbFJlcGxvdD9oLnB1c2goci5wbG90KTooaC5wdXNoKGYucHJldmlvdXNQcm9taXNlcyksZi5zdXBwbHlEZWZhdWx0cyh0KSx1Lm1hcmtlclNpemUmJihmLmRvQ2FsY2RhdGEodCksWShoKSksdS5zdHlsZSYmaC5wdXNoKFQuZG9UcmFjZVN0eWxlKSx1LmNvbG9yYmFycyYmaC5wdXNoKFQuZG9Db2xvckJhcnMpLGgucHVzaChMKSksaC5wdXNoKGYucmVob3ZlcixmLnJlZHJhZyksYy5hZGQodCxCLFt0LGwudW5kb2l0LGwudHJhY2VzXSxCLFt0LGwucmVkb2l0LGwudHJhY2VzXSk7dmFyIHA9by5zeW5jT3JBc3luYyhoLHQpO3JldHVybiBwJiZwLnRoZW58fChwPVByb21pc2UucmVzb2x2ZSgpKSxwLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfcmVzdHlsZSIsbC5ldmVudERhdGEpLHR9KX1mdW5jdGlvbiBOKHQpe3JldHVybiB2b2lkIDA9PT10P251bGw6dH1mdW5jdGlvbiBqKHQsZSl7cmV0dXJuIGU/ZnVuY3Rpb24oZSxyLG4pe3ZhciBhPXMoZSxyKSxpPWEuc2V0O3JldHVybiBhLnNldD1mdW5jdGlvbihlKXtWKChufHwiIikrcixhLmdldCgpLGUsdCksaShlKX0sYX06c31mdW5jdGlvbiBWKHQsZSxyLG4pe2lmKEFycmF5LmlzQXJyYXkoZSl8fEFycmF5LmlzQXJyYXkocikpZm9yKHZhciBhPUFycmF5LmlzQXJyYXkoZSk/ZTpbXSxpPUFycmF5LmlzQXJyYXkocik/cjpbXSxzPU1hdGgubWF4KGEubGVuZ3RoLGkubGVuZ3RoKSxsPTA7bDxzO2wrKylWKHQrIlsiK2wrIl0iLGFbbF0saVtsXSxuKTtlbHNlIGlmKG8uaXNQbGFpbk9iamVjdChlKXx8by5pc1BsYWluT2JqZWN0KHIpKXt2YXIgYz1vLmlzUGxhaW5PYmplY3QoZSk/ZTp7fSx1PW8uaXNQbGFpbk9iamVjdChyKT9yOnt9LGg9by5leHRlbmRGbGF0KHt9LGMsdSk7Zm9yKHZhciBmIGluIGgpVih0KyIuIitmLGNbZl0sdVtmXSxuKX1lbHNlIHZvaWQgMD09PW5bdF0mJihuW3RdPU4oZSkpfWZ1bmN0aW9uIFUodCxlLHIpe3ZhciBuLGE9dC5fZnVsbExheW91dCxpPXQuX2Z1bGxEYXRhLGw9dC5kYXRhLGM9YS5fZ3VpRWRpdGluZyxwPWooYS5fcHJlR1VJLGMpLGc9by5leHRlbmREZWVwQWxsKHt9LGUpO3EoZSk7dmFyIHYsbT1NLnRyYWNlRmxhZ3MoKSx5PXt9LHg9e307ZnVuY3Rpb24gYigpe3JldHVybiByLm1hcChmdW5jdGlvbigpe30pfWZ1bmN0aW9uIF8odCl7dmFyIGU9ZC5pZDJuYW1lKHQpOy0xPT09di5pbmRleE9mKGUpJiZ2LnB1c2goZSl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4iTEFZT1VUIit0KyIuYXV0b3JhbmdlIn1mdW5jdGlvbiBUKHQpe3JldHVybiJMQVlPVVQiK3QrIi5yYW5nZSJ9ZnVuY3Rpb24gQSh0KXtmb3IodmFyIGU9dDtlPGkubGVuZ3RoO2UrKylpZihpW2VdLl9pbnB1dD09PWxbdF0pcmV0dXJuIGlbZV19ZnVuY3Rpb24gUyhuLGksbyl7aWYoQXJyYXkuaXNBcnJheShuKSluLmZvckVhY2goZnVuY3Rpb24odCl7Uyh0LGksbyl9KTtlbHNlIGlmKCEobiBpbiBlfHxrLmhhc1BhcmVudChlLG4pKSl7dmFyIHM7aWYoIkxBWU9VVCI9PT1uLnN1YnN0cigwLDYpKXM9cCh0LmxheW91dCxuLnJlcGxhY2UoIkxBWU9VVCIsIiIpKTtlbHNle3ZhciB1PXJbb107cz1qKGEuX3RyYWNlUHJlR1VJW0EodSkuX2Z1bGxJbnB1dC51aWRdLGMpKGxbdV0sbil9biBpbiB4fHwoeFtuXT1iKCkpLHZvaWQgMD09PXhbbl1bb10mJih4W25dW29dPU4ocy5nZXQoKSkpLHZvaWQgMCE9PWkmJnMuc2V0KGkpfX1mdW5jdGlvbiBFKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gaVtlXVt0XX19ZnVuY3Rpb24gTCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4hMT09PWU/aVtyW25dXVt0XTpudWxsfX1mb3IodmFyIEMgaW4gZSl7aWYoay5oYXNQYXJlbnQoZSxDKSl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBzZXQgIitDKyIgYW5kIGEgcGFyZW50IGF0dHJpYnV0ZSBzaW11bHRhbmVvdXNseSIpO3ZhciBQLE8seixJLEQsUixGPWVbQ107aWYoImF1dG9iaW54IiE9PUMmJiJhdXRvYmlueSIhPT1DfHwoQz1DLmNoYXJBdChDLmxlbmd0aC0xKSsiYmlucyIsRj1BcnJheS5pc0FycmF5KEYpP0YubWFwKEwoQykpOiExPT09Rj9yLm1hcChFKEMpKTpudWxsKSx5W0NdPUYsIkxBWU9VVCIhPT1DLnN1YnN0cigwLDYpKXtmb3IoeFtDXT1iKCksbj0wO248ci5sZW5ndGg7bisrKXtpZihQPWxbcltuXV0sTz1BKHJbbl0pLEk9KHo9aihhLl90cmFjZVByZUdVSVtPLl9mdWxsSW5wdXQudWlkXSxjKShQLEMpKS5nZXQoKSx2b2lkIDAhPT0oRD1BcnJheS5pc0FycmF5KEYpP0ZbbiVGLmxlbmd0aF06Rikpe3ZhciBCPXoucGFydHNbei5wYXJ0cy5sZW5ndGgtMV0sVj1DLnN1YnN0cigwLEMubGVuZ3RoLUIubGVuZ3RoLTEpLFU9Vj9WKyIuIjoiIixIPVY/cyhPLFYpLmdldCgpOk87aWYoKFI9aC5nZXRUcmFjZVZhbE9iamVjdChPLHoucGFydHMpKSYmUi5pbXBsaWVkRWRpdHMmJm51bGwhPT1EKWZvcih2YXIgRyBpbiBSLmltcGxpZWRFZGl0cylTKG8ucmVsYXRpdmVBdHRyKEMsRyksUi5pbXBsaWVkRWRpdHNbR10sbik7ZWxzZSBpZigidGhpY2tuZXNzbW9kZSIhPT1CJiYibGVubW9kZSIhPT1CfHxJPT09RHx8ImZyYWN0aW9uIiE9PUQmJiJwaXhlbHMiIT09RHx8IUgpe2lmKCJ0eXBlIj09PUMmJigicGllIj09PUQhPSgicGllIj09PUkpfHwiZnVubmVsYXJlYSI9PT1EIT0oImZ1bm5lbGFyZWEiPT09SSkpKXt2YXIgWT0ieCIsVz0ieSI7ImJhciIhPT1EJiYiYmFyIiE9PUl8fCJoIiE9PVAub3JpZW50YXRpb258fChZPSJ5IixXPSJ4Iiksby5zd2FwQXR0cnMoUCxbIj8iLCI/c3JjIl0sImxhYmVscyIsWSksby5zd2FwQXR0cnMoUCxbImQ/IiwiPzAiXSwibGFiZWwiLFkpLG8uc3dhcEF0dHJzKFAsWyI/IiwiP3NyYyJdLCJ2YWx1ZXMiLFcpLCJwaWUiPT09SXx8ImZ1bm5lbGFyZWEiPT09ST8ocyhQLCJtYXJrZXIuY29sb3IiKS5zZXQocyhQLCJtYXJrZXIuY29sb3JzIikuZ2V0KCkpLGEuX3BpZWxheWVyLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpKTp1LnRyYWNlSXMoUCwiY2FydGVzaWFuIikmJnMoUCwibWFya2VyLmNvbG9ycyIpLnNldChzKFAsIm1hcmtlci5jb2xvciIpLmdldCgpKX19ZWxzZXt2YXIgWD1hLl9zaXplLFo9SC5vcmllbnQsSj0idG9wIj09PVp8fCJib3R0b20iPT09WjtpZigidGhpY2tuZXNzbW9kZSI9PT1CKXt2YXIgSz1KP1guaDpYLnc7UyhVKyJ0aGlja25lc3MiLEgudGhpY2tuZXNzKigiZnJhY3Rpb24iPT09RD8xL0s6Syksbil9ZWxzZXt2YXIgUT1KP1gudzpYLmg7UyhVKyJsZW4iLEgubGVuKigiZnJhY3Rpb24iPT09RD8xL1E6USksbil9fXhbQ11bbl09TihJKTtpZigtMSE9PVsic3dhcHh5Iiwic3dhcHh5YXhlcyIsIm9yaWVudGF0aW9uIiwib3JpZW50YXRpb25heGVzIl0uaW5kZXhPZihDKSl7aWYoIm9yaWVudGF0aW9uIj09PUMpe3ouc2V0KEQpO3ZhciAkPVAueCYmIVAueT8iaCI6InYiO2lmKCh6LmdldCgpfHwkKT09PU8ub3JpZW50YXRpb24pY29udGludWV9ZWxzZSJvcmllbnRhdGlvbmF4ZXMiPT09QyYmKFAub3JpZW50YXRpb249e3Y6ImgiLGg6InYifVtPLm9yaWVudGF0aW9uXSk7ay5zd2FwWFlEYXRhKFApLG0uY2FsYz1tLmNsZWFyQXhpc1R5cGVzPSEwfWVsc2UtMSE9PWYuZGF0YUFycmF5Q29udGFpbmVycy5pbmRleE9mKHoucGFydHNbMF0pPyhrLm1hbmFnZUFycmF5Q29udGFpbmVycyh6LEQseCksbS5jYWxjPSEwKTooUj9SLmFycmF5T2smJiF1LnRyYWNlSXMoTywicmVnbCIpJiYoby5pc0FycmF5T3JUeXBlZEFycmF5KEQpfHxvLmlzQXJyYXlPclR5cGVkQXJyYXkoSSkpP20uY2FsYz0hMDpNLnVwZGF0ZShtLFIpOm0uY2FsYz0hMCx6LnNldChEKSl9fWlmKC0xIT09WyJzd2FweHlheGVzIiwib3JpZW50YXRpb25heGVzIl0uaW5kZXhPZihDKSYmZC5zd2FwKHQsciksIm9yaWVudGF0aW9uYXhlcyI9PT1DKXt2YXIgdHQ9cyh0LmxheW91dCwiaG92ZXJtb2RlIik7IngiPT09dHQuZ2V0KCk/dHQuc2V0KCJ5Iik6InkiPT09dHQuZ2V0KCkmJnR0LnNldCgieCIpfWlmKC0xIT09WyJvcmllbnRhdGlvbiIsInR5cGUiXS5pbmRleE9mKEMpKXtmb3Iodj1bXSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBldD1sW3Jbbl1dO3UudHJhY2VJcyhldCwiY2FydGVzaWFuIikmJihfKGV0LnhheGlzfHwieCIpLF8oZXQueWF4aXN8fCJ5IikpfVModi5tYXAodyksITAsMCksUyh2Lm1hcChUKSxbMCwxXSwwKX19ZWxzZSB6PXAodC5sYXlvdXQsQy5yZXBsYWNlKCJMQVlPVVQiLCIiKSkseFtDXT1bTih6LmdldCgpKV0sei5zZXQoQXJyYXkuaXNBcnJheShGKT9GWzBdOkYpLG0uY2FsYz0hMH1yZXR1cm4obS5jYWxjfHxtLnBsb3QpJiYobS5mdWxsUmVwbG90PSEwKSx7ZmxhZ3M6bSx1bmRvaXQ6eCxyZWRvaXQ6eSx0cmFjZXM6cixldmVudERhdGE6by5leHRlbmREZWVwTm9BcnJheXMoW10sW2cscl0pfX1mdW5jdGlvbiBxKHQpe3ZhciBlLHIsbixhPW8uY291bnRlclJlZ2V4KCJheGlzIiwiLnRpdGxlIiwhMSwhMSksaT0vY29sb3JiYXJcLnRpdGxlJC8scz1PYmplY3Qua2V5cyh0KTtmb3IoZT0wO2U8cy5sZW5ndGg7ZSsrKXI9c1tlXSxuPXRbcl0sInRpdGxlIiE9PXImJiFhLnRlc3QocikmJiFpLnRlc3Qocil8fCJzdHJpbmciIT10eXBlb2YgbiYmIm51bWJlciIhPXR5cGVvZiBuP3IuaW5kZXhPZigidGl0bGVmb250Iik+LTE/bChyLHIucmVwbGFjZSgidGl0bGVmb250IiwidGl0bGUuZm9udCIpKTpyLmluZGV4T2YoInRpdGxlcG9zaXRpb24iKT4tMT9sKHIsci5yZXBsYWNlKCJ0aXRsZXBvc2l0aW9uIiwidGl0bGUucG9zaXRpb24iKSk6ci5pbmRleE9mKCJ0aXRsZXNpZGUiKT4tMT9sKHIsci5yZXBsYWNlKCJ0aXRsZXNpZGUiLCJ0aXRsZS5zaWRlIikpOnIuaW5kZXhPZigidGl0bGVvZmZzZXQiKT4tMSYmbChyLHIucmVwbGFjZSgidGl0bGVvZmZzZXQiLCJ0aXRsZS5vZmZzZXQiKSk6bChyLHIucmVwbGFjZSgidGl0bGUiLCJ0aXRsZS50ZXh0IikpO2Z1bmN0aW9uIGwoZSxyKXt0W3JdPXRbZV0sZGVsZXRlIHRbZV19fWZ1bmN0aW9uIEgodCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSxrLmNsZWFyUHJvbWlzZVF1ZXVlKHQpLHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXJldHVybiBQcm9taXNlLnJlc29sdmUodCk7dmFyIG49e307aWYoInN0cmluZyI9PXR5cGVvZiBlKW5bZV09cjtlbHNle2lmKCFvLmlzUGxhaW5PYmplY3QoZSkpcmV0dXJuIG8ud2FybigiUmVsYXlvdXQgZmFpbC4iLGUsciksUHJvbWlzZS5yZWplY3QoKTtuPW8uZXh0ZW5kRmxhdCh7fSxlKX1PYmplY3Qua2V5cyhuKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBhPUoodCxuKSxpPWEuZmxhZ3M7aS5jYWxjJiYodC5jYWxjZGF0YT12b2lkIDApO3ZhciBzPVtmLnByZXZpb3VzUHJvbWlzZXNdO2kubGF5b3V0UmVwbG90P3MucHVzaChULmxheW91dFJlcGxvdCk6T2JqZWN0LmtleXMobikubGVuZ3RoJiYoRyh0LGksYSl8fGYuc3VwcGx5RGVmYXVsdHModCksaS5sZWdlbmQmJnMucHVzaChULmRvTGVnZW5kKSxpLmxheW91dHN0eWxlJiZzLnB1c2goVC5sYXlvdXRTdHlsZXMpLGkuYXhyYW5nZSYmWShzLGEucmFuZ2VzQWx0ZXJlZCksaS50aWNrcyYmcy5wdXNoKFQuZG9UaWNrc1JlbGF5b3V0KSxpLm1vZGViYXImJnMucHVzaChULmRvTW9kZUJhciksaS5jYW1lcmEmJnMucHVzaChULmRvQ2FtZXJhKSxpLmNvbG9yYmFycyYmcy5wdXNoKFQuZG9Db2xvckJhcnMpLHMucHVzaChMKSkscy5wdXNoKGYucmVob3ZlcixmLnJlZHJhZyksYy5hZGQodCxILFt0LGEudW5kb2l0XSxILFt0LGEucmVkb2l0XSk7dmFyIGw9by5zeW5jT3JBc3luYyhzLHQpO3JldHVybiBsJiZsLnRoZW58fChsPVByb21pc2UucmVzb2x2ZSh0KSksbC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3JlbGF5b3V0IixhLmV2ZW50RGF0YSksdH0pfWZ1bmN0aW9uIEcodCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQ7aWYoIWUuYXhyYW5nZSlyZXR1cm4hMTtmb3IodmFyIGEgaW4gZSlpZigiYXhyYW5nZSIhPT1hJiZlW2FdKXJldHVybiExO2Zvcih2YXIgaSBpbiByLnJhbmdlc0FsdGVyZWQpe3ZhciBvPWQuaWQybmFtZShpKSxzPXQubGF5b3V0W29dLGw9bltvXTtpZihsLmF1dG9yYW5nZT1zLmF1dG9yYW5nZSxsLnJhbmdlPXMucmFuZ2Uuc2xpY2UoKSxsLmNsZWFuUmFuZ2UoKSxsLl9tYXRjaEdyb3VwKWZvcih2YXIgYyBpbiBsLl9tYXRjaEdyb3VwKWlmKGMhPT1pKXt2YXIgdT1uW2QuaWQybmFtZShjKV07dS5hdXRvcmFuZ2U9bC5hdXRvcmFuZ2UsdS5yYW5nZT1sLnJhbmdlLnNsaWNlKCksdS5faW5wdXQucmFuZ2U9bC5yYW5nZS5zbGljZSgpfX1yZXR1cm4hMH1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9ZT9mdW5jdGlvbih0KXt2YXIgcj1bXSxuPSEwO2Zvcih2YXIgYSBpbiBlKXt2YXIgaT1kLmdldEZyb21JZCh0LGEpO2lmKHIucHVzaChhKSxpLl9tYXRjaEdyb3VwKWZvcih2YXIgbyBpbiBpLl9tYXRjaEdyb3VwKWVbb118fHIucHVzaChvKTtpLmF1dG9tYXJnaW4mJihuPSExKX1yZXR1cm4gZC5kcmF3KHQscix7c2tpcFRpdGxlOm59KX06ZnVuY3Rpb24odCl7cmV0dXJuIGQuZHJhdyh0LCJyZWRyYXciKX07dC5wdXNoKGIsVC5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzLHIsVC5kcmF3RGF0YSxULmZpbmFsRHJhdyl9dmFyIFc9L15beHl6XWF4aXNbMC05XSpcLnJhbmdlKFxbWzB8MV1cXSk/JC8sWD0vXlt4eXpdYXhpc1swLTldKlwuYXV0b3JhbmdlJC8sWj0vXlt4eXpdYXhpc1swLTldKlwuZG9tYWluKFxbWzB8MV1cXSk/JC87ZnVuY3Rpb24gSih0LGUpe3ZhciByLG4sYSxpPXQubGF5b3V0LGw9dC5fZnVsbExheW91dCxjPWwuX2d1aUVkaXRpbmcsZj1qKGwuX3ByZUdVSSxjKSxwPU9iamVjdC5rZXlzKGUpLGc9ZC5saXN0KHQpLHY9by5leHRlbmREZWVwQWxsKHt9LGUpLG09e307Zm9yKHEoZSkscD1PYmplY3Qua2V5cyhlKSxuPTA7bjxwLmxlbmd0aDtuKyspaWYoMD09PXBbbl0uaW5kZXhPZigiYWxsYXhlcyIpKXtmb3IoYT0wO2E8Zy5sZW5ndGg7YSsrKXt2YXIgeT1nW2FdLl9pZC5zdWJzdHIoMSkseD0tMSE9PXkuaW5kZXhPZigic2NlbmUiKT95KyIuIjoiIixiPXBbbl0ucmVwbGFjZSgiYWxsYXhlcyIseCtnW2FdLl9uYW1lKTtlW2JdfHwoZVtiXT1lW3Bbbl1dKX1kZWxldGUgZVtwW25dXX12YXIgXz1NLmxheW91dEZsYWdzKCksVD17fSxTPXt9O2Z1bmN0aW9uIEUodCxyKXtpZihBcnJheS5pc0FycmF5KHQpKXQuZm9yRWFjaChmdW5jdGlvbih0KXtFKHQscil9KTtlbHNlIGlmKCEodCBpbiBlfHxrLmhhc1BhcmVudChlLHQpKSl7dmFyIG49ZihpLHQpO3QgaW4gU3x8KFNbdF09TihuLmdldCgpKSksdm9pZCAwIT09ciYmbi5zZXQocil9fXZhciBMLEM9e307ZnVuY3Rpb24gUCh0KXt2YXIgZT1kLm5hbWUyaWQodC5zcGxpdCgiLiIpWzBdKTtyZXR1cm4gQ1tlXT0xLGV9Zm9yKHZhciBPIGluIGUpe2lmKGsuaGFzUGFyZW50KGUsTykpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc2V0ICIrTysiIGFuZCBhIHBhcmVudCBhdHRyaWJ1dGUgc2ltdWx0YW5lb3VzbHkiKTtmb3IodmFyIHo9ZihpLE8pLEk9ZVtPXSxEPXoucGFydHMubGVuZ3RoLTE7RD4wJiYic3RyaW5nIiE9dHlwZW9mIHoucGFydHNbRF07KUQtLTt2YXIgUj16LnBhcnRzW0RdLEY9ei5wYXJ0c1tELTFdKyIuIitSLEI9ei5wYXJ0cy5zbGljZSgwLEQpLmpvaW4oIi4iKSxWPXModC5sYXlvdXQsQikuZ2V0KCksVT1zKGwsQikuZ2V0KCksSD16LmdldCgpO2lmKHZvaWQgMCE9PUkpe1RbT109SSxTW09dPSJyZXZlcnNlIj09PVI/STpOKEgpO3ZhciBHPWguZ2V0TGF5b3V0VmFsT2JqZWN0KGwsei5wYXJ0cyk7aWYoRyYmRy5pbXBsaWVkRWRpdHMmJm51bGwhPT1JKWZvcih2YXIgWSBpbiBHLmltcGxpZWRFZGl0cylFKG8ucmVsYXRpdmVBdHRyKE8sWSksRy5pbXBsaWVkRWRpdHNbWV0pO2lmKC0xIT09WyJ3aWR0aCIsImhlaWdodCJdLmluZGV4T2YoTykpaWYoSSl7RSgiYXV0b3NpemUiLG51bGwpO3ZhciBKPSJoZWlnaHQiPT09Tz8id2lkdGgiOiJoZWlnaHQiO0UoSixsW0pdKX1lbHNlIGxbT109dC5faW5pdGlhbEF1dG9TaXplW09dO2Vsc2UgaWYoImF1dG9zaXplIj09PU8pRSgid2lkdGgiLEk/bnVsbDpsLndpZHRoKSxFKCJoZWlnaHQiLEk/bnVsbDpsLmhlaWdodCk7ZWxzZSBpZihGLm1hdGNoKFcpKVAoRikscyhsLEIrIi5faW5wdXRSYW5nZSIpLnNldChudWxsKTtlbHNlIGlmKEYubWF0Y2goWCkpe1AoRikscyhsLEIrIi5faW5wdXRSYW5nZSIpLnNldChudWxsKTt2YXIgUT1zKGwsQikuZ2V0KCk7US5faW5wdXREb21haW4mJihRLl9pbnB1dC5kb21haW49US5faW5wdXREb21haW4uc2xpY2UoKSl9ZWxzZSBGLm1hdGNoKFopJiZzKGwsQisiLl9pbnB1dERvbWFpbiIpLnNldChudWxsKTtpZigidHlwZSI9PT1SKXt2YXIgJD1WLHR0PSJsaW5lYXIiPT09VS50eXBlJiYibG9nIj09PUksZXQ9ImxvZyI9PT1VLnR5cGUmJiJsaW5lYXIiPT09STtpZih0dHx8ZXQpe2lmKCQmJiQucmFuZ2UpaWYoVS5hdXRvcmFuZ2UpdHQmJigkLnJhbmdlPSQucmFuZ2VbMV0+JC5yYW5nZVswXT9bMSwyXTpbMiwxXSk7ZWxzZXt2YXIgcnQ9JC5yYW5nZVswXSxudD0kLnJhbmdlWzFdO3R0PyhydDw9MCYmbnQ8PTAmJkUoQisiLmF1dG9yYW5nZSIsITApLHJ0PD0wP3J0PW50LzFlNjpudDw9MCYmKG50PXJ0LzFlNiksRShCKyIucmFuZ2VbMF0iLE1hdGgubG9nKHJ0KS9NYXRoLkxOMTApLEUoQisiLnJhbmdlWzFdIixNYXRoLmxvZyhudCkvTWF0aC5MTjEwKSk6KEUoQisiLnJhbmdlWzBdIixNYXRoLnBvdygxMCxydCkpLEUoQisiLnJhbmdlWzFdIixNYXRoLnBvdygxMCxudCkpKX1lbHNlIEUoQisiLmF1dG9yYW5nZSIsITApO0FycmF5LmlzQXJyYXkobC5fc3VicGxvdHMucG9sYXIpJiZsLl9zdWJwbG90cy5wb2xhci5sZW5ndGgmJmxbei5wYXJ0c1swXV0mJiJyYWRpYWxheGlzIj09PXoucGFydHNbMV0mJmRlbGV0ZSBsW3oucGFydHNbMF1dLl9zdWJwbG90LnZpZXdJbml0aWFsWyJyYWRpYWxheGlzLnJhbmdlIl0sdS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY29udmVydENvb3JkcyIpKHQsVSxJLEUpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJjb252ZXJ0Q29vcmRzIikodCxVLEksRSl9ZWxzZSBFKEIrIi5hdXRvcmFuZ2UiLCEwKSxFKEIrIi5yYW5nZSIsbnVsbCk7cyhsLEIrIi5faW5wdXRSYW5nZSIpLnNldChudWxsKX1lbHNlIGlmKFIubWF0Y2goQSkpe3ZhciBhdD1zKGwsTykuZ2V0KCksaXQ9KEl8fHt9KS50eXBlO2l0JiYiLSIhPT1pdHx8KGl0PSJsaW5lYXIiKSx1LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJjb252ZXJ0Q29vcmRzIikodCxhdCxpdCxFKSx1LmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiY29udmVydENvb3JkcyIpKHQsYXQsaXQsRSl9dmFyIG90PXcuY29udGFpbmVyQXJyYXlNYXRjaChPKTtpZihvdCl7cj1vdC5hcnJheSxuPW90LmluZGV4O3ZhciBzdD1vdC5wcm9wZXJ0eSxsdD1HfHx7ZWRpdFR5cGU6ImNhbGMifTsiIiE9PW4mJiIiPT09c3QmJih3LmlzQWRkVmFsKEkpP1NbT109bnVsbDp3LmlzUmVtb3ZlVmFsKEkpP1NbT109KHMoaSxyKS5nZXQoKXx8W10pW25dOm8ud2FybigidW5yZWNvZ25pemVkIGZ1bGwgb2JqZWN0IHZhbHVlIixlKSksTS51cGRhdGUoXyxsdCksbVtyXXx8KG1bcl09e30pO3ZhciBjdD1tW3JdW25dO2N0fHwoY3Q9bVtyXVtuXT17fSksY3Rbc3RdPUksZGVsZXRlIGVbT119ZWxzZSJyZXZlcnNlIj09PVI/KFYucmFuZ2U/Vi5yYW5nZS5yZXZlcnNlKCk6KEUoQisiLmF1dG9yYW5nZSIsITApLFYucmFuZ2U9WzEsMF0pLFUuYXV0b3JhbmdlP18uY2FsYz0hMDpfLnBsb3Q9ITApOihsLl9oYXMoInNjYXR0ZXItbGlrZSIpJiZsLl9oYXMoInJlZ2wiKSYmImRyYWdtb2RlIj09PU8mJigibGFzc28iPT09SXx8InNlbGVjdCI9PT1JKSYmImxhc3NvIiE9PUgmJiJzZWxlY3QiIT09SD9fLnBsb3Q9ITA6bC5faGFzKCJnbDJkIik/Xy5wbG90PSEwOkc/TS51cGRhdGUoXyxHKTpfLmNhbGM9ITAsei5zZXQoSSkpfX1mb3IociBpbiBtKXt3LmFwcGx5Q29udGFpbmVyQXJyYXlDaGFuZ2VzKHQsZihpLHIpLG1bcl0sXyxmKXx8KF8ucGxvdD0hMCl9dmFyIHV0PWwuX2F4aXNDb25zdHJhaW50R3JvdXBzfHxbXTtmb3IoTCBpbiBDKWZvcihuPTA7bjx1dC5sZW5ndGg7bisrKXt2YXIgaHQ9dXRbbl07aWYoaHRbTF0pZm9yKHZhciBmdCBpbiBfLmNhbGM9ITAsaHQpQ1tmdF18fChkLmdldEZyb21JZCh0LGZ0KS5fY29uc3RyYWludFNocmlua2FibGU9ITApfXJldHVybihLKHQpfHxlLmhlaWdodHx8ZS53aWR0aCkmJihfLnBsb3Q9ITApLChfLnBsb3R8fF8uY2FsYykmJihfLmxheW91dFJlcGxvdD0hMCkse2ZsYWdzOl8scmFuZ2VzQWx0ZXJlZDpDLHVuZG9pdDpTLHJlZG9pdDpULGV2ZW50RGF0YTp2fX1mdW5jdGlvbiBLKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLndpZHRoLG49ZS5oZWlnaHQ7cmV0dXJuIHQubGF5b3V0LmF1dG9zaXplJiZmLnBsb3RBdXRvU2l6ZSh0LHQubGF5b3V0LGUpLGUud2lkdGghPT1yfHxlLmhlaWdodCE9PW59ZnVuY3Rpb24gUSh0LGUsbixhKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksay5jbGVhclByb21pc2VRdWV1ZSh0KSx0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHQpO28uaXNQbGFpbk9iamVjdChlKXx8KGU9e30pLG8uaXNQbGFpbk9iamVjdChuKXx8KG49e30pLE9iamVjdC5rZXlzKGUpLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCksT2JqZWN0LmtleXMobikubGVuZ3RoJiYodC5jaGFuZ2VkPSEwKTt2YXIgaT1rLmNvZXJjZVRyYWNlSW5kaWNlcyh0LGEpLHM9VSh0LG8uZXh0ZW5kRmxhdCh7fSxlKSxpKSxsPXMuZmxhZ3MsdT1KKHQsby5leHRlbmRGbGF0KHt9LG4pKSxoPXUuZmxhZ3M7KGwuY2FsY3x8aC5jYWxjKSYmKHQuY2FsY2RhdGE9dm9pZCAwKSxsLmNsZWFyQXhpc1R5cGVzJiZrLmNsZWFyQXhpc1R5cGVzKHQsaSxuKTt2YXIgcD1bXTtoLmxheW91dFJlcGxvdD9wLnB1c2goVC5sYXlvdXRSZXBsb3QpOmwuZnVsbFJlcGxvdD9wLnB1c2goci5wbG90KToocC5wdXNoKGYucHJldmlvdXNQcm9taXNlcyksRyh0LGgsdSl8fGYuc3VwcGx5RGVmYXVsdHModCksbC5zdHlsZSYmcC5wdXNoKFQuZG9UcmFjZVN0eWxlKSwobC5jb2xvcmJhcnN8fGguY29sb3JiYXJzKSYmcC5wdXNoKFQuZG9Db2xvckJhcnMpLGgubGVnZW5kJiZwLnB1c2goVC5kb0xlZ2VuZCksaC5sYXlvdXRzdHlsZSYmcC5wdXNoKFQubGF5b3V0U3R5bGVzKSxoLmF4cmFuZ2UmJlkocCx1LnJhbmdlc0FsdGVyZWQpLGgudGlja3MmJnAucHVzaChULmRvVGlja3NSZWxheW91dCksaC5tb2RlYmFyJiZwLnB1c2goVC5kb01vZGVCYXIpLGguY2FtZXJhJiZwLnB1c2goVC5kb0NhbWVyYSkscC5wdXNoKEwpKSxwLnB1c2goZi5yZWhvdmVyLGYucmVkcmFnKSxjLmFkZCh0LFEsW3Qscy51bmRvaXQsdS51bmRvaXQscy50cmFjZXNdLFEsW3Qscy5yZWRvaXQsdS5yZWRvaXQscy50cmFjZXNdKTt2YXIgZD1vLnN5bmNPckFzeW5jKHAsdCk7cmV0dXJuIGQmJmQudGhlbnx8KGQ9UHJvbWlzZS5yZXNvbHZlKHQpKSxkLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfdXBkYXRlIix7ZGF0YTpzLmV2ZW50RGF0YSxsYXlvdXQ6dS5ldmVudERhdGF9KSx0fSl9ZnVuY3Rpb24gJCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMDt2YXIgcj10LmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMSxyfX12YXIgdHQ9W3twYXR0ZXJuOi9eaGlkZGVubGFiZWxzLyxhdHRyOiJsZWdlbmQudWlyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9eKCh4fHkpYXhpc1xkKilcLigoYXV0byk/cmFuZ2V8dGl0bGVcLnRleHQpL30se3BhdHRlcm46L2F4aXNcZCpcLnNob3dzcGlrZXMkLyxhdHRyOiJtb2RlYmFyLnVpcmV2aXNpb24ifSx7cGF0dGVybjovKGhvdmVyfGRyYWcpbW9kZSQvLGF0dHI6Im1vZGViYXIudWlyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9eKHNjZW5lXGQqKVwuY2FtZXJhL30se3BhdHRlcm46L14oZ2VvXGQqKVwuKHByb2plY3Rpb258Y2VudGVyfGZpdGJvdW5kcykvfSx7cGF0dGVybjovXih0ZXJuYXJ5XGQqXC5bYWJjXWF4aXMpXC4obWlufHRpdGxlXC50ZXh0KSQvfSx7cGF0dGVybjovXihwb2xhclxkKlwucmFkaWFsYXhpcylcLigoYXV0byk/cmFuZ2V8YW5nbGV8dGl0bGVcLnRleHQpL30se3BhdHRlcm46L14ocG9sYXJcZCpcLmFuZ3VsYXJheGlzKVwucm90YXRpb24vfSx7cGF0dGVybjovXihtYXBib3hcZCopXC4oY2VudGVyfHpvb218YmVhcmluZ3xwaXRjaCkvfSx7cGF0dGVybjovXmxlZ2VuZFwuKHh8eSkkLyxhdHRyOiJlZGl0cmV2aXNpb24ifSx7cGF0dGVybjovXihzaGFwZXN8YW5ub3RhdGlvbnMpLyxhdHRyOiJlZGl0cmV2aXNpb24ifSx7cGF0dGVybjovXnRpdGxlXC50ZXh0JC8sYXR0cjoiZWRpdHJldmlzaW9uIn1dLGV0PVt7cGF0dGVybjovXnNlbGVjdGVkcG9pbnRzJC8sYXR0cjoic2VsZWN0aW9ucmV2aXNpb24ifSx7cGF0dGVybjovKF58dmFsdWVcLil2aXNpYmxlJC8sYXR0cjoibGVnZW5kLnVpcmV2aXNpb24ifSx7cGF0dGVybjovXmRpbWVuc2lvbnNcW1xkK1xdXC5jb25zdHJhaW50cmFuZ2UvfSx7cGF0dGVybjovXm5vZGVcLih4fHl8Z3JvdXBzKS99LHtwYXR0ZXJuOi9ebGV2ZWwkL30se3BhdHRlcm46LyhefHZhbHVlXC4pbmFtZSQvfSx7cGF0dGVybjovY29sb3JiYXJcLnRpdGxlXC50ZXh0JC99LHtwYXR0ZXJuOi9jb2xvcmJhclwuKHh8eSkkLyxhdHRyOiJlZGl0cmV2aXNpb24ifV07ZnVuY3Rpb24gcnQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxhPXQubWF0Y2gobi5wYXR0ZXJuKTtpZihhKXJldHVybntoZWFkOmFbMV0sYXR0cjpuLmF0dHJ9fX1mdW5jdGlvbiBudCh0LGUpe3ZhciByPXMoZSx0KS5nZXQoKTtpZih2b2lkIDAhPT1yKXJldHVybiByO3ZhciBuPXQuc3BsaXQoIi4iKTtmb3Iobi5wb3AoKTtuLmxlbmd0aD4xOylpZihuLnBvcCgpLHZvaWQgMCE9PShyPXMoZSxuLmpvaW4oIi4iKSsiLnVpcmV2aXNpb24iKS5nZXQoKSkpcmV0dXJuIHI7cmV0dXJuIGUudWlyZXZpc2lvbn1mdW5jdGlvbiBhdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0uX2Z1bGxJbnB1dC51aWQ9PT10KXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGl0KHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihlW25dLnVpZD09PXQpcmV0dXJuIG47cmV0dXJuIWVbcl18fGVbcl0udWlkPy0xOnJ9ZnVuY3Rpb24gb3QodCxlKXt2YXIgcj1vLmlzUGxhaW5PYmplY3QodCksbj1BcnJheS5pc0FycmF5KHQpO3JldHVybiByfHxuPyhyJiZvLmlzUGxhaW5PYmplY3QoZSl8fG4mJkFycmF5LmlzQXJyYXkoZSkpJiZKU09OLnN0cmluZ2lmeSh0KT09PUpTT04uc3RyaW5naWZ5KGUpOnQ9PT1lfWZ1bmN0aW9uIHN0KHQsZSxyLG4pe3ZhciBhLGksbCxjPW4uZ2V0VmFsT2JqZWN0LHU9bi5mbGFncyxoPW4uaW1tdXRhYmxlLGY9bi5pbkFycmF5LHA9bi5hcnJheUluZGV4O2Z1bmN0aW9uIGQoKXt2YXIgdD1hLmVkaXRUeXBlO2YmJi0xIT09dC5pbmRleE9mKCJhcnJheWRyYXciKT9vLnB1c2hVbmlxdWUodS5hcnJheXNbZl0scCk6KE0udXBkYXRlKHUsYSksIm5vbmUiIT09dCYmdS5uQ2hhbmdlcysrLG4udHJhbnNpdGlvbiYmYS5hbmltJiZ1Lm5DaGFuZ2VzQW5pbSsrLChXLnRlc3QobCl8fFgudGVzdChsKSkmJih1LnJhbmdlc0FsdGVyZWRbclswXV09MSksWi50ZXN0KGwpJiZzKGUsIl9pbnB1dERvbWFpbiIpLnNldChudWxsKSwiZGF0YXJldmlzaW9uIj09PWkmJih1Lm5ld0RhdGFSZXZpc2lvbj0xKSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4iZGF0YV9hcnJheSI9PT10LnZhbFR5cGV8fHQuYXJyYXlPa31mb3IoaSBpbiB0KXtpZih1LmNhbGMmJiFuLnRyYW5zaXRpb24pcmV0dXJuO3ZhciB2PXRbaV0sbT1lW2ldLHk9ci5jb25jYXQoaSk7aWYobD15LmpvaW4oIi4iKSwiXyIhPT1pLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIHYmJnYhPT1tKXtpZigoInRpY2swIj09PWl8fCJkdGljayI9PT1pKSYmImdlbyIhPT1yWzBdKXt2YXIgeD1lLnRpY2ttb2RlO2lmKCJhdXRvIj09PXh8fCJhcnJheSI9PT14fHwheCljb250aW51ZX1pZigoInJhbmdlIiE9PWl8fCFlLmF1dG9yYW5nZSkmJigiem1pbiIhPT1pJiYiem1heCIhPT1pfHwiY29udG91cmNhcnBldCIhPT1lLnR5cGUpJiYoYT1jKHkpKSYmKCFhLl9jb21wYXJlQXNKU09OfHxKU09OLnN0cmluZ2lmeSh2KSE9PUpTT04uc3RyaW5naWZ5KG0pKSl7dmFyIGIsXz1hLnZhbFR5cGUsdz1nKGEpLGs9QXJyYXkuaXNBcnJheSh2KSxUPUFycmF5LmlzQXJyYXkobSk7aWYoayYmVCl7dmFyIEE9Il9pbnB1dF8iK2ksUz10W0FdLEU9ZVtBXTtpZihBcnJheS5pc0FycmF5KFMpJiZTPT09RSljb250aW51ZX1pZih2b2lkIDA9PT1tKXcmJms/dS5jYWxjPSEwOmQoKTtlbHNlIGlmKGEuX2lzTGlua2VkVG9BcnJheSl7dmFyIEw9W10sQz0hMTtmfHwodS5hcnJheXNbaV09TCk7dmFyIFA9TWF0aC5taW4odi5sZW5ndGgsbS5sZW5ndGgpLE89TWF0aC5tYXgodi5sZW5ndGgsbS5sZW5ndGgpO2lmKFAhPT1PKXtpZigiYXJyYXlkcmF3IiE9PWEuZWRpdFR5cGUpe2QoKTtjb250aW51ZX1DPSEwfWZvcihiPTA7YjxQO2IrKylzdCh2W2JdLG1bYl0seS5jb25jYXQoYiksby5leHRlbmRGbGF0KHtpbkFycmF5OmksYXJyYXlJbmRleDpifSxuKSk7aWYoQylmb3IoYj1QO2I8TztiKyspTC5wdXNoKGIpfWVsc2UhXyYmby5pc1BsYWluT2JqZWN0KHYpP3N0KHYsbSx5LG4pOnc/ayYmVD8oaCYmKHUuY2FsYz0hMCksKGh8fG4ubmV3RGF0YVJldmlzaW9uKSYmZCgpKTprIT09VD91LmNhbGM9ITA6ZCgpOmsmJlQmJnYubGVuZ3RoPT09bS5sZW5ndGgmJlN0cmluZyh2KT09PVN0cmluZyhtKXx8ZCgpfX19Zm9yKGkgaW4gZSlpZighKGkgaW4gdHx8Il8iPT09aS5jaGFyQXQoMCl8fCJmdW5jdGlvbiI9PXR5cGVvZiBlW2ldKSl7aWYoZyhhPWMoci5jb25jYXQoaSkpKSYmQXJyYXkuaXNBcnJheShlW2ldKSlyZXR1cm4gdm9pZCh1LmNhbGM9ITApO2QoKX19ZnVuY3Rpb24gbHQodCl7dmFyIGU9bi5zZWxlY3QodCkscj10Ll9mdWxsTGF5b3V0O2lmKHIuX2NvbnRhaW5lcj1lLnNlbGVjdEFsbCgiLnBsb3QtY29udGFpbmVyIikuZGF0YShbMF0pLHIuX2NvbnRhaW5lci5lbnRlcigpLmluc2VydCgiZGl2IiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgicGxvdC1jb250YWluZXIiLCEwKS5jbGFzc2VkKCJwbG90bHkiLCEwKSxyLl9wYXBlcmRpdj1yLl9jb250YWluZXIuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpLmRhdGEoWzBdKSxyLl9wYXBlcmRpdi5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgic3ZnLWNvbnRhaW5lciIsITApLnN0eWxlKCJwb3NpdGlvbiIsInJlbGF0aXZlIiksci5fZ2xjb250YWluZXI9ci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIuZ2wtY29udGFpbmVyIikuZGF0YShbe31dKSxyLl9nbGNvbnRhaW5lci5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiZ2wtY29udGFpbmVyIiwhMCksci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIubWFpbi1zdmciKS5yZW1vdmUoKSxyLl9wYXBlcmRpdi5zZWxlY3QoIi5tb2RlYmFyLWNvbnRhaW5lciIpLnJlbW92ZSgpLHIuX3BhcGVyPXIuX3BhcGVyZGl2Lmluc2VydCgic3ZnIiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgibWFpbi1zdmciLCEwKSxyLl90b3BwYXBlcj1yLl9wYXBlcmRpdi5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoIm1haW4tc3ZnIiwhMCksci5fbW9kZWJhcmRpdj1yLl9wYXBlcmRpdi5hcHBlbmQoImRpdiIpLHIuX2hvdmVycGFwZXI9ci5fcGFwZXJkaXYuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJtYWluLXN2ZyIsITApLCFyLl91aWQpe3ZhciBhPXt9O24uc2VsZWN0QWxsKCJkZWZzIikuZWFjaChmdW5jdGlvbigpe3RoaXMuaWQmJihhW3RoaXMuaWQuc3BsaXQoIi0iKVsxXV09MSl9KSxyLl91aWQ9by5yYW5kc3RyKGEpfXIuX3BhcGVyZGl2LnNlbGVjdEFsbCgiLm1haW4tc3ZnIikuYXR0cih5LnN2Z0F0dHJzKSxyLl9kZWZzPXIuX3BhcGVyLmFwcGVuZCgiZGVmcyIpLmF0dHIoImlkIiwiZGVmcy0iK3IuX3VpZCksci5fY2xpcHM9ci5fZGVmcy5hcHBlbmQoImciKS5jbGFzc2VkKCJjbGlwcyIsITApLHIuX3RvcGRlZnM9ci5fdG9wcGFwZXIuYXBwZW5kKCJkZWZzIikuYXR0cigiaWQiLCJ0b3BkZWZzLSIrci5fdWlkKSxyLl90b3BjbGlwcz1yLl90b3BkZWZzLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNsaXBzIiwhMCksci5fYmdMYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJiZ2xheWVyIiwhMCksci5fZHJhZ2dlcnM9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZHJhZ2xheWVyIiwhMCk7dmFyIGk9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibGF5ZXItYmVsb3ciLCEwKTtyLl9pbWFnZUxvd2VyTGF5ZXI9aS5hcHBlbmQoImciKS5jbGFzc2VkKCJpbWFnZWxheWVyIiwhMCksci5fc2hhcGVMb3dlckxheWVyPWkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2hhcGVsYXllciIsITApLHIuX2NhcnRlc2lhbmxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNhcnRlc2lhbmxheWVyIiwhMCksci5fcG9sYXJsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2xhcmxheWVyIiwhMCksci5fdGVybmFyeWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRlcm5hcnlsYXllciIsITApLHIuX2dlb2xheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdlb2xheWVyIiwhMCksci5fZnVubmVsYXJlYWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImZ1bm5lbGFyZWFsYXllciIsITApLHIuX3BpZWxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBpZWxheWVyIiwhMCksci5fdHJlZW1hcGxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRyZWVtYXBsYXllciIsITApLHIuX3N1bmJ1cnN0bGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgic3VuYnVyc3RsYXllciIsITApLHIuX2luZGljYXRvcmxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImluZGljYXRvcmxheWVyIiwhMCksci5fZ2xpbWFnZXM9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ2xpbWFnZXMiLCEwKTt2YXIgcz1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJsYXllci1hYm92ZSIsITApO3IuX2ltYWdlVXBwZXJMYXllcj1zLmFwcGVuZCgiZyIpLmNsYXNzZWQoImltYWdlbGF5ZXIiLCEwKSxyLl9zaGFwZVVwcGVyTGF5ZXI9cy5hcHBlbmQoImciKS5jbGFzc2VkKCJzaGFwZWxheWVyIiwhMCksci5faW5mb2xheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImluZm9sYXllciIsITApLHIuX21lbnVsYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJtZW51bGF5ZXIiLCEwKSxyLl96b29tbGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiem9vbWxheWVyIiwhMCksci5faG92ZXJsYXllcj1yLl9ob3ZlcnBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImhvdmVybGF5ZXIiLCEwKSxyLl9tb2RlYmFyZGl2LmNsYXNzZWQoIm1vZGViYXItY29udGFpbmVyIiwhMCkuc3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5zdHlsZSgidG9wIiwiMHB4Iikuc3R5bGUoInJpZ2h0IiwiMHB4IiksdC5lbWl0KCJwbG90bHlfZnJhbWV3b3JrIil9ci5hbmltYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZih0PW8uZ2V0R3JhcGhEaXYodCksIW8uaXNQbG90RGl2KHQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBlbGVtZW50IGlzIG5vdCBhIFBsb3RseSBwbG90OiAiK3QrIi4gSXQncyBsaWtlbHkgdGhhdCB5b3UndmUgZmFpbGVkIHRvIGNyZWF0ZSBhIHBsb3QgYmVmb3JlIGFuaW1hdGluZyBpdC4gRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vcGxvdC5seS9qYXZhc2NyaXB0L2FuaW1hdGlvbnMvIik7dmFyIG49dC5fdHJhbnNpdGlvbkRhdGE7bi5fZnJhbWVRdWV1ZXx8KG4uX2ZyYW1lUXVldWU9W10pO3ZhciBhPShyPWYuc3VwcGx5QW5pbWF0aW9uRGVmYXVsdHMocikpLnRyYW5zaXRpb24saT1yLmZyYW1lO2Z1bmN0aW9uIHModCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/dD49YS5sZW5ndGg/YVswXTphW3RdOmF9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT90Pj1pLmxlbmd0aD9pWzBdOmlbdF06aX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9MDtyZXR1cm4gZnVuY3Rpb24oKXtpZih0JiYrK3I9PT1lKXJldHVybiB0KCl9fXJldHVybiB2b2lkIDA9PT1uLl9mcmFtZVdhaXRpbmdDbnQmJihuLl9mcmFtZVdhaXRpbmdDbnQ9MCksbmV3IFByb21pc2UoZnVuY3Rpb24oaSx1KXtmdW5jdGlvbiBoKCl7bi5fY3VycmVudEZyYW1lJiZuLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSYmbi5fY3VycmVudEZyYW1lLm9uQ29tcGxldGUoKTt2YXIgZT1uLl9jdXJyZW50RnJhbWU9bi5fZnJhbWVRdWV1ZS5zaGlmdCgpO2lmKGUpe3ZhciByPWUubmFtZT9lLm5hbWUudG9TdHJpbmcoKTpudWxsO3QuX2Z1bGxMYXlvdXQuX2N1cnJlbnRGcmFtZT1yLG4uX2xhc3RGcmFtZUF0PURhdGUubm93KCksbi5fdGltZVRvTmV4dD1lLmZyYW1lT3B0cy5kdXJhdGlvbixmLnRyYW5zaXRpb24odCxlLmZyYW1lLmRhdGEsZS5mcmFtZS5sYXlvdXQsay5jb2VyY2VUcmFjZUluZGljZXModCxlLmZyYW1lLnRyYWNlcyksZS5mcmFtZU9wdHMsZS50cmFuc2l0aW9uT3B0cykudGhlbihmdW5jdGlvbigpe2Uub25Db21wbGV0ZSYmZS5vbkNvbXBsZXRlKCl9KSx0LmVtaXQoInBsb3RseV9hbmltYXRpbmdmcmFtZSIse25hbWU6cixmcmFtZTplLmZyYW1lLGFuaW1hdGlvbjp7ZnJhbWU6ZS5mcmFtZU9wdHMsdHJhbnNpdGlvbjplLnRyYW5zaXRpb25PcHRzfX0pfWVsc2UgdC5lbWl0KCJwbG90bHlfYW5pbWF0ZWQiKSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUobi5fYW5pbWF0aW9uUmFmKSxuLl9hbmltYXRpb25SYWY9bnVsbH1mdW5jdGlvbiBwKCl7dC5lbWl0KCJwbG90bHlfYW5pbWF0aW5nIiksbi5fbGFzdEZyYW1lQXQ9LTEvMCxuLl90aW1lVG9OZXh0PTAsbi5fcnVubmluZ1RyYW5zaXRpb25zPTAsbi5fY3VycmVudEZyYW1lPW51bGw7dmFyIGU9ZnVuY3Rpb24oKXtuLl9hbmltYXRpb25SYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxEYXRlLm5vdygpLW4uX2xhc3RGcmFtZUF0Pm4uX3RpbWVUb05leHQmJmgoKX07ZSgpfXZhciBkLGcsdj0wO2Z1bmN0aW9uIG0odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/dj49YS5sZW5ndGg/dC50cmFuc2l0aW9uT3B0cz1hW3ZdOnQudHJhbnNpdGlvbk9wdHM9YVswXTp0LnRyYW5zaXRpb25PcHRzPWEsdisrLHR9dmFyIHk9W10seD1udWxsPT1lLGI9QXJyYXkuaXNBcnJheShlKTtpZih4fHxifHwhby5pc1BsYWluT2JqZWN0KGUpKXtpZih4fHwtMSE9PVsic3RyaW5nIiwibnVtYmVyIl0uaW5kZXhPZih0eXBlb2YgZSkpZm9yKGQ9MDtkPG4uX2ZyYW1lcy5sZW5ndGg7ZCsrKShnPW4uX2ZyYW1lc1tkXSkmJih4fHxTdHJpbmcoZy5ncm91cCk9PT1TdHJpbmcoZSkpJiZ5LnB1c2goe3R5cGU6ImJ5bmFtZSIsbmFtZTpTdHJpbmcoZy5uYW1lKSxkYXRhOm0oe25hbWU6Zy5uYW1lfSl9KTtlbHNlIGlmKGIpZm9yKGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIF89ZVtkXTstMSE9PVsibnVtYmVyIiwic3RyaW5nIl0uaW5kZXhPZih0eXBlb2YgXyk/KF89U3RyaW5nKF8pLHkucHVzaCh7dHlwZToiYnluYW1lIixuYW1lOl8sZGF0YTptKHtuYW1lOl99KX0pKTpvLmlzUGxhaW5PYmplY3QoXykmJnkucHVzaCh7dHlwZToib2JqZWN0IixkYXRhOm0oby5leHRlbmRGbGF0KHt9LF8pKX0pfX1lbHNlIHkucHVzaCh7dHlwZToib2JqZWN0IixkYXRhOm0oby5leHRlbmRGbGF0KHt9LGUpKX0pO2ZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspaWYoImJ5bmFtZSI9PT0oZz15W2RdKS50eXBlJiYhbi5fZnJhbWVIYXNoW2cuZGF0YS5uYW1lXSlyZXR1cm4gby53YXJuKCdhbmltYXRlIGZhaWx1cmU6IGZyYW1lIG5vdCBmb3VuZDogIicrZy5kYXRhLm5hbWUrJyInKSx2b2lkIHUoKTstMSE9PVsibmV4dCIsImltbWVkaWF0ZSJdLmluZGV4T2Yoci5tb2RlKSYmZnVuY3Rpb24oKXtpZigwIT09bi5fZnJhbWVRdWV1ZS5sZW5ndGgpe2Zvcig7bi5fZnJhbWVRdWV1ZS5sZW5ndGg7KXt2YXIgZT1uLl9mcmFtZVF1ZXVlLnBvcCgpO2Uub25JbnRlcnJ1cHQmJmUub25JbnRlcnJ1cHQoKX10LmVtaXQoInBsb3RseV9hbmltYXRpb25pbnRlcnJ1cHRlZCIsW10pfX0oKSwicmV2ZXJzZSI9PT1yLmRpcmVjdGlvbiYmeS5yZXZlcnNlKCk7dmFyIHc9dC5fZnVsbExheW91dC5fY3VycmVudEZyYW1lO2lmKHcmJnIuZnJvbWN1cnJlbnQpe3ZhciBUPS0xO2ZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspaWYoImJ5bmFtZSI9PT0oZz15W2RdKS50eXBlJiZnLm5hbWU9PT13KXtUPWQ7YnJlYWt9aWYoVD4wJiZUPHkubGVuZ3RoLTEpe3ZhciBNPVtdO2ZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspZz15W2RdLCgiYnluYW1lIiE9PXlbZF0udHlwZXx8ZD5UKSYmTS5wdXNoKGcpO3k9TX19eS5sZW5ndGg+MD9mdW5jdGlvbihlKXtpZigwIT09ZS5sZW5ndGgpe2Zvcih2YXIgYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbztvPSJieW5hbWUiPT09ZVthXS50eXBlP2YuY29tcHV0ZUZyYW1lKHQsZVthXS5uYW1lKTplW2FdLmRhdGE7dmFyIGg9bChhKSxkPXMoYSk7ZC5kdXJhdGlvbj1NYXRoLm1pbihkLmR1cmF0aW9uLGguZHVyYXRpb24pO3ZhciBnPXtmcmFtZTpvLG5hbWU6ZVthXS5uYW1lLGZyYW1lT3B0czpoLHRyYW5zaXRpb25PcHRzOmR9O2E9PT1lLmxlbmd0aC0xJiYoZy5vbkNvbXBsZXRlPWMoaSwyKSxnLm9uSW50ZXJydXB0PXUpLG4uX2ZyYW1lUXVldWUucHVzaChnKX0iaW1tZWRpYXRlIj09PXIubW9kZSYmKG4uX2xhc3RGcmFtZUF0PS0xLzApLG4uX2FuaW1hdGlvblJhZnx8cCgpfX0oeSk6KHQuZW1pdCgicGxvdGx5X2FuaW1hdGVkIiksaSgpKX0pfSxyLmFkZEZyYW1lcz1mdW5jdGlvbih0LGUscil7aWYodD1vLmdldEdyYXBoRGl2KHQpLG51bGw9PWUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2lmKCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KyIuIEl0J3MgbGlrZWx5IHRoYXQgeW91J3ZlIGZhaWxlZCB0byBjcmVhdGUgYSBwbG90IGJlZm9yZSBhZGRpbmcgZnJhbWVzLiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9wbG90Lmx5L2phdmFzY3JpcHQvYW5pbWF0aW9ucy8iKTt2YXIgbixhLGkscyxsPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsdT10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBFcnJvcigiYWRkRnJhbWVzIGZhaWx1cmU6IGZyYW1lTGlzdCBtdXN0IGJlIGFuIEFycmF5IG9mIGZyYW1lIGRlZmluaXRpb25zIitlKTt2YXIgaD1sLmxlbmd0aCsyKmUubGVuZ3RoLHA9W10sZD17fTtmb3Iobj1lLmxlbmd0aC0xO24+PTA7bi0tKWlmKG8uaXNQbGFpbk9iamVjdChlW25dKSl7dmFyIGc9ZVtuXS5uYW1lLHY9KHVbZ118fGRbZ118fHt9KS5uYW1lLG09ZVtuXS5uYW1lLHk9dVt2XXx8ZFt2XTt2JiZtJiYibnVtYmVyIj09dHlwZW9mIG0mJnkmJlM8RSYmKFMrKyxvLndhcm4oJ2FkZEZyYW1lczogb3ZlcndyaXRpbmcgZnJhbWUgIicrKHVbdl18fGRbdl0pLm5hbWUrJyIgd2l0aCBhIGZyYW1lIHdob3NlIG5hbWUgb2YgdHlwZSAibnVtYmVyIiBhbHNvIGVxdWF0ZXMgdG8gIicrdisnIi4gVGhpcyBpcyB2YWxpZCBidXQgbWF5IHBvdGVudGlhbGx5IGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBzaW5jZSBhbGwgcGxvdGx5LmpzIGZyYW1lIG5hbWVzIGFyZSBzdG9yZWQgaW50ZXJuYWxseSBhcyBzdHJpbmdzLicpLFM9PT1FJiZvLndhcm4oImFkZEZyYW1lczogVGhpcyBBUEkgY2FsbCBoYXMgeWllbGRlZCB0b28gbWFueSBvZiB0aGVzZSB3YXJuaW5ncy4gRm9yIHRoZSByZXN0IG9mIHRoaXMgY2FsbCwgZnVydGhlciB3YXJuaW5ncyBhYm91dCBudW1lcmljIGZyYW1lIG5hbWVzIHdpbGwgYmUgc3VwcHJlc3NlZC4iKSksZFtnXT17bmFtZTpnfSxwLnB1c2goe2ZyYW1lOmYuc3VwcGx5RnJhbWVEZWZhdWx0cyhlW25dKSxpbmRleDpyJiZ2b2lkIDAhPT1yW25dJiZudWxsIT09cltuXT9yW25dOmgrbn0pfXAuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmluZGV4PmUuaW5kZXg/LTE6dC5pbmRleDxlLmluZGV4PzE6MH0pO3ZhciB4PVtdLGI9W10sXz1sLmxlbmd0aDtmb3Iobj1wLmxlbmd0aC0xO24+PTA7bi0tKXtpZigibnVtYmVyIj09dHlwZW9mKGE9cFtuXS5mcmFtZSkubmFtZSYmby53YXJuKCJXYXJuaW5nOiBhZGRGcmFtZXMgYWNjZXB0cyBmcmFtZXMgd2l0aCBudW1lcmljIG5hbWVzLCBidXQgdGhlIG51bWJlcnMgYXJlaW1wbGljaXRseSBjYXN0IHRvIHN0cmluZ3MiKSwhYS5uYW1lKWZvcig7dVthLm5hbWU9ImZyYW1lICIrdC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXIrK107KTtpZih1W2EubmFtZV0pe2ZvcihpPTA7aTxsLmxlbmd0aCYmKGxbaV18fHt9KS5uYW1lIT09YS5uYW1lO2krKyk7eC5wdXNoKHt0eXBlOiJyZXBsYWNlIixpbmRleDppLHZhbHVlOmF9KSxiLnVuc2hpZnQoe3R5cGU6InJlcGxhY2UiLGluZGV4OmksdmFsdWU6bFtpXX0pfWVsc2Ugcz1NYXRoLm1heCgwLE1hdGgubWluKHBbbl0uaW5kZXgsXykpLHgucHVzaCh7dHlwZToiaW5zZXJ0IixpbmRleDpzLHZhbHVlOmF9KSxiLnVuc2hpZnQoe3R5cGU6ImRlbGV0ZSIsaW5kZXg6c30pLF8rK312YXIgdz1mLm1vZGlmeUZyYW1lcyxrPWYubW9kaWZ5RnJhbWVzLFQ9W3QsYl0sTT1bdCx4XTtyZXR1cm4gYyYmYy5hZGQodCx3LFQsayxNKSxmLm1vZGlmeUZyYW1lcyh0LHgpfSxyLmRlbGV0ZUZyYW1lcz1mdW5jdGlvbih0LGUpe2lmKHQ9by5nZXRHcmFwaERpdih0KSwhby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCk7dmFyIHIsbixhPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsaT1bXSxzPVtdO2lmKCFlKWZvcihlPVtdLHI9MDtyPGEubGVuZ3RoO3IrKyllLnB1c2gocik7Zm9yKChlPWUuc2xpY2UoKSkuc29ydCgpLHI9ZS5sZW5ndGgtMTtyPj0wO3ItLSluPWVbcl0saS5wdXNoKHt0eXBlOiJkZWxldGUiLGluZGV4Om59KSxzLnVuc2hpZnQoe3R5cGU6Imluc2VydCIsaW5kZXg6bix2YWx1ZTphW25dfSk7dmFyIGw9Zi5tb2RpZnlGcmFtZXMsdT1mLm1vZGlmeUZyYW1lcyxoPVt0LHNdLHA9W3QsaV07cmV0dXJuIGMmJmMuYWRkKHQsbCxoLHUscCksZi5tb2RpZnlGcmFtZXModCxpKX0sci5hZGRUcmFjZXM9ZnVuY3Rpb24gdChlLG4sYSl7ZT1vLmdldEdyYXBoRGl2KGUpO3ZhciBpLHMsbD1bXSx1PXIuZGVsZXRlVHJhY2VzLGg9dCxmPVtlLGxdLHA9W2Usbl07Zm9yKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhO2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuIik7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigidHJhY2VzIG11c3QgYmUgZGVmaW5lZC4iKTtmb3IoQXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoIm9iamVjdCIhPXR5cGVvZihhPWVbbl0pfHxBcnJheS5pc0FycmF5KGEpfHxudWxsPT09YSl0aHJvdyBuZXcgRXJyb3IoImFsbCB2YWx1ZXMgaW4gdHJhY2VzIGFycmF5IG11c3QgYmUgbm9uLWFycmF5IG9iamVjdHMiKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksInVuZGVmaW5lZCIhPXR5cGVvZiByJiZyLmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaWYgaW5kaWNlcyBpcyBzcGVjaWZpZWQsIHRyYWNlcy5sZW5ndGggbXVzdCBlcXVhbCBpbmRpY2VzLmxlbmd0aCIpfShlLG4sYSksQXJyYXkuaXNBcnJheShuKXx8KG49W25dKSxuPW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvLmV4dGVuZEZsYXQoe30sdCl9KSxrLmNsZWFuRGF0YShuKSxpPTA7aTxuLmxlbmd0aDtpKyspZS5kYXRhLnB1c2gobltpXSk7Zm9yKGk9MDtpPG4ubGVuZ3RoO2krKylsLnB1c2goLW4ubGVuZ3RoK2kpO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgYSlyZXR1cm4gcz1yLnJlZHJhdyhlKSxjLmFkZChlLHUsZixoLHApLHM7QXJyYXkuaXNBcnJheShhKXx8KGE9W2FdKTt0cnl7RChlLGwsYSl9Y2F0Y2godCl7dGhyb3cgZS5kYXRhLnNwbGljZShlLmRhdGEubGVuZ3RoLW4ubGVuZ3RoLG4ubGVuZ3RoKSx0fXJldHVybiBjLnN0YXJ0U2VxdWVuY2UoZSksYy5hZGQoZSx1LGYsaCxwKSxzPXIubW92ZVRyYWNlcyhlLGwsYSksYy5zdG9wU2VxdWVuY2UoZSksc30sci5kZWxldGVUcmFjZXM9ZnVuY3Rpb24gdChlLG4pe2U9by5nZXRHcmFwaERpdihlKTt2YXIgYSxpLHM9W10sbD1yLmFkZFRyYWNlcyx1PXQsaD1bZSxzLG5dLGY9W2Usbl07aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigiaW5kaWNlcyBtdXN0IGJlIGFuIGludGVnZXIgb3IgYXJyYXkgb2YgaW50ZWdlcnMuIik7Zm9yKEFycmF5LmlzQXJyYXkobil8fChuPVtuXSksSShlLG4sImluZGljZXMiKSwobj16KG4sZS5kYXRhLmxlbmd0aC0xKSkuc29ydChvLnNvcnRlckRlcyksYT0wO2E8bi5sZW5ndGg7YSs9MSlpPWUuZGF0YS5zcGxpY2UoblthXSwxKVswXSxzLnB1c2goaSk7dmFyIHA9ci5yZWRyYXcoZSk7cmV0dXJuIGMuYWRkKGUsbCxoLHUsZikscH0sci5leHRlbmRUcmFjZXM9ZnVuY3Rpb24gdChlLG4sYSxpKXt2YXIgcz1SKGU9by5nZXRHcmFwaERpdihlKSxuLGEsaSxmdW5jdGlvbih0LGUscil7dmFyIG4sYTtpZihvLmlzVHlwZWRBcnJheSh0KSlpZihyPDApe3ZhciBpPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9Rih0LGUpO3I8MD8obj1zLGE9aSk6KG49aSxhPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxhPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxhLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheShsKSksYS5zZXQodCksYS5zZXQoZS5zdWJhcnJheSgwLGwpLHQubGVuZ3RoKX1lbHNle3ZhciBjPXItZS5sZW5ndGgsdT10Lmxlbmd0aC1jO24uc2V0KHQuc3ViYXJyYXkodSkpLG4uc2V0KGUsYyksYS5zZXQodC5zdWJhcnJheSgwLHUpKX1lbHNlIG49dC5jb25jYXQoZSksYT1yPj0wJiZyPG4ubGVuZ3RoP24uc3BsaWNlKDAsbi5sZW5ndGgtcik6W107cmV0dXJuW24sYV19KSxsPXIucmVkcmF3KGUpLHU9W2Uscy51cGRhdGUsYSxzLm1heFBvaW50c107cmV0dXJuIGMuYWRkKGUsci5wcmVwZW5kVHJhY2VzLHUsdCxhcmd1bWVudHMpLGx9LHIubW92ZVRyYWNlcz1mdW5jdGlvbiB0KGUsbixhKXt2YXIgaSxzPVtdLGw9W10sdT10LGg9dCxmPVtlPW8uZ2V0R3JhcGhEaXYoZSksYSxuXSxwPVtlLG4sYV07aWYoRChlLG4sYSksbj1BcnJheS5pc0FycmF5KG4pP246W25dLCJ1bmRlZmluZWQiPT10eXBlb2YgYSlmb3IoYT1bXSxpPTA7aTxuLmxlbmd0aDtpKyspYS5wdXNoKC1uLmxlbmd0aCtpKTtmb3IoYT1BcnJheS5pc0FycmF5KGEpP2E6W2FdLG49eihuLGUuZGF0YS5sZW5ndGgtMSksYT16KGEsZS5kYXRhLmxlbmd0aC0xKSxpPTA7aTxlLmRhdGEubGVuZ3RoO2krKyktMT09PW4uaW5kZXhPZihpKSYmcy5wdXNoKGUuZGF0YVtpXSk7Zm9yKGk9MDtpPG4ubGVuZ3RoO2krKylsLnB1c2goe25ld0luZGV4OmFbaV0sdHJhY2U6ZS5kYXRhW25baV1dfSk7Zm9yKGwuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5ld0luZGV4LWUubmV3SW5kZXh9KSxpPTA7aTxsLmxlbmd0aDtpKz0xKXMuc3BsaWNlKGxbaV0ubmV3SW5kZXgsMCxsW2ldLnRyYWNlKTtlLmRhdGE9czt2YXIgZD1yLnJlZHJhdyhlKTtyZXR1cm4gYy5hZGQoZSx1LGYsaCxwKSxkfSxyLnByZXBlbmRUcmFjZXM9ZnVuY3Rpb24gdChlLG4sYSxpKXt2YXIgcz1SKGU9by5nZXRHcmFwaERpdihlKSxuLGEsaSxmdW5jdGlvbih0LGUscil7dmFyIG4sYTtpZihvLmlzVHlwZWRBcnJheSh0KSlpZihyPD0wKXt2YXIgaT1uZXcgdC5jb25zdHJ1Y3RvcigwKSxzPUYoZSx0KTtyPDA/KG49cyxhPWkpOihuPWksYT1zKX1lbHNlIGlmKG49bmV3IHQuY29uc3RydWN0b3IociksYT1uZXcgdC5jb25zdHJ1Y3Rvcih0Lmxlbmd0aCtlLmxlbmd0aC1yKSxyPT09ZS5sZW5ndGgpbi5zZXQoZSksYS5zZXQodCk7ZWxzZSBpZihyPGUubGVuZ3RoKXt2YXIgbD1lLmxlbmd0aC1yO24uc2V0KGUuc3ViYXJyYXkoMCxsKSksYS5zZXQoZS5zdWJhcnJheShsKSksYS5zZXQodCxsKX1lbHNle3ZhciBjPXItZS5sZW5ndGg7bi5zZXQoZSksbi5zZXQodC5zdWJhcnJheSgwLGMpLGUubGVuZ3RoKSxhLnNldCh0LnN1YmFycmF5KGMpKX1lbHNlIG49ZS5jb25jYXQodCksYT1yPj0wJiZyPG4ubGVuZ3RoP24uc3BsaWNlKHIsbi5sZW5ndGgpOltdO3JldHVybltuLGFdfSksbD1yLnJlZHJhdyhlKSx1PVtlLHMudXBkYXRlLGEscy5tYXhQb2ludHNdO3JldHVybiBjLmFkZChlLHIuZXh0ZW5kVHJhY2VzLHUsdCxhcmd1bWVudHMpLGx9LHIubmV3UGxvdD1mdW5jdGlvbih0LGUsbixhKXtyZXR1cm4gdD1vLmdldEdyYXBoRGl2KHQpLGYuY2xlYW5QbG90KFtdLHt9LHQuX2Z1bGxEYXRhfHxbXSx0Ll9mdWxsTGF5b3V0fHx7fSksZi5wdXJnZSh0KSxyLnBsb3QodCxlLG4sYSl9LHIucGxvdD1mdW5jdGlvbih0LGUsYSxpKXt2YXIgcztpZih0PW8uZ2V0R3JhcGhEaXYodCksbC5pbml0KHQpLG8uaXNQbGFpbk9iamVjdChlKSl7dmFyIGM9ZTtlPWMuZGF0YSxhPWMubGF5b3V0LGk9Yy5jb25maWcscz1jLmZyYW1lc31pZighMT09PWwudHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2JlZm9yZXBsb3QiLFtlLGEsaV0pKXJldHVybiBQcm9taXNlLnJlamVjdCgpO2V8fGF8fG8uaXNQbG90RGl2KHQpfHxvLndhcm4oIkNhbGxpbmcgUGxvdGx5LnBsb3QgYXMgaWYgcmVkcmF3aW5nIGJ1dCB0aGlzIGNvbnRhaW5lciBkb2Vzbid0IHlldCBoYXZlIGEgcGxvdC4iLHQpLE8odCxpKSxhfHwoYT17fSksbi5zZWxlY3QodCkuY2xhc3NlZCgianMtcGxvdGx5LXBsb3QiLCEwKSxnLm1ha2VUZXN0ZXIoKSxBcnJheS5pc0FycmF5KHQuX3Byb21pc2VzKXx8KHQuX3Byb21pc2VzPVtdKTt2YXIgaD0wPT09KHQuZGF0YXx8W10pLmxlbmd0aCYmQXJyYXkuaXNBcnJheShlKTtBcnJheS5pc0FycmF5KGUpJiYoay5jbGVhbkRhdGEoZSksaD90LmRhdGE9ZTp0LmRhdGEucHVzaC5hcHBseSh0LmRhdGEsZSksdC5lbXB0eT0hMSksdC5sYXlvdXQmJiFofHwodC5sYXlvdXQ9ay5jbGVhbkxheW91dChhKSksZi5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgdj10Ll9mdWxsTGF5b3V0LHk9di5faGFzKCJjYXJ0ZXNpYW4iKTtpZighdi5faGFzKCJwb2xhciIpJiZlJiZlWzBdJiZlWzBdLnIpcmV0dXJuIG8ubG9nKCJMZWdhY3kgcG9sYXIgY2hhcnRzIGFyZSBkZXByZWNhdGVkISIpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5wbG90LWNvbnRhaW5lciIpLmRhdGEoWzBdKTthLmVudGVyKCkuaW5zZXJ0KCJkaXYiLCI6Zmlyc3QtY2hpbGQiKS5jbGFzc2VkKCJwbG90LWNvbnRhaW5lciBwbG90bHkiLCEwKTt2YXIgaT1hLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKS5kYXRhKFswXSk7aS5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgic3ZnLWNvbnRhaW5lciIsITApLnN0eWxlKCJwb3NpdGlvbiIsInJlbGF0aXZlIiksaS5odG1sKCIiKSxlJiYodC5kYXRhPWUpLHImJih0LmxheW91dD1yKSxwLm1hbmFnZXIuZmlsbExheW91dCh0KSxpLnN0eWxlKHt3aWR0aDp0Ll9mdWxsTGF5b3V0LndpZHRoKyJweCIsaGVpZ2h0OnQuX2Z1bGxMYXlvdXQuaGVpZ2h0KyJweCJ9KSx0LmZyYW1ld29yaz1wLm1hbmFnZXIuZnJhbWV3b3JrKHQpLHQuZnJhbWV3b3JrKHtkYXRhOnQuZGF0YSxsYXlvdXQ6dC5sYXlvdXR9LGkubm9kZSgpKSx0LmZyYW1ld29yay5zZXRVbmRvUG9pbnQoKTt2YXIgcz10LmZyYW1ld29yay5zdmcoKSxsPTEsYz10Ll9mdWxsTGF5b3V0LnRpdGxlP3QuX2Z1bGxMYXlvdXQudGl0bGUudGV4dDoiIjsiIiE9PWMmJmN8fChsPTApO3ZhciB1PWZ1bmN0aW9uKCl7dGhpcy5jYWxsKHguY29udmVydFRvVHNwYW5zLHQpfSxoPXMuc2VsZWN0KCIudGl0bGUtZ3JvdXAgdGV4dCIpLmNhbGwodSk7aWYodC5fY29udGV4dC5lZGl0cy50aXRsZVRleHQpe3ZhciBkPW8uXyh0LCJDbGljayB0byBlbnRlciBQbG90IHRpdGxlIik7YyYmYyE9PWR8fChsPS4yLGguYXR0cih7ImRhdGEtdW5mb3JtYXR0ZWQiOmR9KS50ZXh0KGQpLnN0eWxlKHtvcGFjaXR5Omx9KS5vbigibW91c2VvdmVyLm9wYWNpdHkiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDEwMCkuc3R5bGUoIm9wYWNpdHkiLDEpfSkub24oIm1vdXNlb3V0Lm9wYWNpdHkiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDFlMykuc3R5bGUoIm9wYWNpdHkiLDApfSkpO3ZhciBnPWZ1bmN0aW9uKCl7dGhpcy5jYWxsKHgubWFrZUVkaXRhYmxlLHtnZDp0fSkub24oImVkaXQiLGZ1bmN0aW9uKGUpe3QuZnJhbWV3b3JrKHtsYXlvdXQ6e3RpdGxlOnt0ZXh0OmV9fX0pLHRoaXMudGV4dChlKS5jYWxsKHUpLHRoaXMuY2FsbChnKX0pLm9uKCJjYW5jZWwiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIik7dGhpcy50ZXh0KHQpLmNhbGwodSl9KX07aC5jYWxsKGcpfXJldHVybiB0Ll9jb250ZXh0LnNldEJhY2tncm91bmQodCx0Ll9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3IpLGYuYWRkTGlua3ModCksUHJvbWlzZS5yZXNvbHZlKCl9KHQsZSxhKTt2Ll9yZXBsb3R0aW5nPSEwLGgmJmx0KHQpLHQuZnJhbWV3b3JrIT09bHQmJih0LmZyYW1ld29yaz1sdCxsdCh0KSksZy5pbml0R3JhZGllbnRzKHQpLGgmJmQuc2F2ZVNob3dTcGlrZUluaXRpYWwodCk7dmFyIGI9IXQuY2FsY2RhdGF8fHQuY2FsY2RhdGEubGVuZ3RoIT09KHQuX2Z1bGxEYXRhfHxbXSkubGVuZ3RoO2ImJmYuZG9DYWxjZGF0YSh0KTtmb3IodmFyIF89MDtfPHQuY2FsY2RhdGEubGVuZ3RoO18rKyl0LmNhbGNkYXRhW19dWzBdLnRyYWNlPXQuX2Z1bGxEYXRhW19dO3QuX2NvbnRleHQucmVzcG9uc2l2ZT90Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyfHwodC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcj1mdW5jdGlvbigpe28uaXNIaWRkZW4odCl8fGYucmVzaXplKHQpfSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyKSk6by5jbGVhclJlc3BvbnNpdmUodCk7dmFyIHc9by5leHRlbmRGbGF0KHt9LHYuX3NpemUpLE09MDtmdW5jdGlvbiBBKCl7aWYoZi5jbGVhckF1dG9NYXJnaW5JZHModCksVC5kcmF3TWFyZ2luUHVzaGVycyh0KSxkLmFsbG93QXV0b01hcmdpbih0KSx2Ll9oYXMoInBpZSIpKWZvcih2YXIgZT10Ll9mdWxsRGF0YSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07InBpZSI9PT1uLnR5cGUmJm4uYXV0b21hcmdpbiYmZi5hbGxvd0F1dG9NYXJnaW4odCwicGllLiIrbi51aWQrIi5hdXRvbWFyZ2luIil9cmV0dXJuIGYuZG9BdXRvTWFyZ2luKHQpLGYucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBTKCl7dC5fdHJhbnNpdGlvbmluZ3x8KFQuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyh0KSxoJiZkLnNhdmVSYW5nZUluaXRpYWwodCksdS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiY2FsY0F1dG9yYW5nZSIpKHQpKX12YXIgRT1bZi5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7aWYocylyZXR1cm4gci5hZGRGcmFtZXModCxzKX0sZnVuY3Rpb24gZSgpe2Zvcih2YXIgcj12Ll9iYXNlUGxvdE1vZHVsZXMsbj0wO248ci5sZW5ndGg7bisrKXJbbl0uZHJhd0ZyYW1ld29yayYmcltuXS5kcmF3RnJhbWV3b3JrKHQpO2lmKCF2Ll9nbGNhbnZhcyYmdi5faGFzKCJnbCIpJiYodi5fZ2xjYW52YXM9di5fZ2xjb250YWluZXIuc2VsZWN0QWxsKCIuZ2wtY2FudmFzIikuZGF0YShbe2tleToiY29udGV4dExheWVyIixjb250ZXh0OiEwLHBpY2s6ITF9LHtrZXk6ImZvY3VzTGF5ZXIiLGNvbnRleHQ6ITEscGljazohMX0se2tleToicGlja0xheWVyIixjb250ZXh0OiExLHBpY2s6ITB9XSxmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9KSx2Ll9nbGNhbnZhcy5lbnRlcigpLmFwcGVuZCgiY2FudmFzIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJnbC1jYW52YXMgZ2wtY2FudmFzLSIrdC5rZXkucmVwbGFjZSgiTGF5ZXIiLCIiKX0pLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxvdmVyZmxvdzoidmlzaWJsZSIsInBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KSksdi5fZ2xjYW52YXMpe3YuX2dsY2FudmFzLmF0dHIoIndpZHRoIix2LndpZHRoKS5hdHRyKCJoZWlnaHQiLHYuaGVpZ2h0KTt2YXIgYT12Ll9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbDtpZihhJiYoTWF0aC5mbG9vcih2LndpZHRoKSE9PWEuX2dsLmRyYXdpbmdCdWZmZXJXaWR0aHx8TWF0aC5mbG9vcih2LmhlaWdodCkhPT1hLl9nbC5kcmF3aW5nQnVmZmVySGVpZ2h0KSl7dmFyIGk9IldlYkdMIGNvbnRleHQgYnVmZmVyIGFuZCBjYW52YXMgZGltZW5zaW9ucyBkbyBub3QgbWF0Y2ggZHVlIHRvIGJyb3dzZXIvV2ViR0wgYnVnLiI7aWYoIU0pcmV0dXJuIG8ubG9nKGkrIiBDbGVhcmluZyBncmFwaCBhbmQgcGxvdHRpbmcgYWdhaW4uIiksZi5jbGVhblBsb3QoW10se30sdC5fZnVsbERhdGEsdiksZi5zdXBwbHlEZWZhdWx0cyh0KSx2PXQuX2Z1bGxMYXlvdXQsZi5kb0NhbGNkYXRhKHQpLE0rKyxlKCk7by5lcnJvcihpKX19cmV0dXJuImgiPT09di5tb2RlYmFyLm9yaWVudGF0aW9uP3YuX21vZGViYXJkaXYuc3R5bGUoImhlaWdodCIsbnVsbCkuc3R5bGUoIndpZHRoIiwiMTAwJSIpOnYuX21vZGViYXJkaXYuc3R5bGUoIndpZHRoIixudWxsKS5zdHlsZSgiaGVpZ2h0Iix2LmhlaWdodCsicHgiKSxmLnByZXZpb3VzUHJvbWlzZXModCl9LEEsZnVuY3Rpb24oKXtpZihmLmRpZE1hcmdpbkNoYW5nZSh3LHYuX3NpemUpKXJldHVybiBvLnN5bmNPckFzeW5jKFtBLFQubGF5b3V0U3R5bGVzXSx0KX1dO3kmJkUucHVzaChmdW5jdGlvbigpe2lmKGIpcmV0dXJuIG8uc3luY09yQXN5bmMoW3UuZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJjYWxjQXV0b3JhbmdlIiksdS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY2FsY0F1dG9yYW5nZSIpLFNdLHQpO1MoKX0pLEUucHVzaChULmxheW91dFN0eWxlcykseSYmRS5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGQuZHJhdyh0LGg/IiI6InJlZHJhdyIpfSksRS5wdXNoKFQuZHJhd0RhdGEsVC5maW5hbERyYXcsbSxmLmFkZExpbmtzLGYucmVob3ZlcixmLnJlZHJhZyxmLmRvQXV0b01hcmdpbixmLnByZXZpb3VzUHJvbWlzZXMpO3ZhciBDPW8uc3luY09yQXN5bmMoRSx0KTtyZXR1cm4gQyYmQy50aGVufHwoQz1Qcm9taXNlLnJlc29sdmUoKSksQy50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIEwodCksdH0pfSxyLnB1cmdlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PW8uZ2V0R3JhcGhEaXYodCkpLl9mdWxsTGF5b3V0fHx7fSxyPXQuX2Z1bGxEYXRhfHxbXTtyZXR1cm4gZi5jbGVhblBsb3QoW10se30scixlKSxmLnB1cmdlKHQpLGwucHVyZ2UodCksZS5fY29udGFpbmVyJiZlLl9jb250YWluZXIucmVtb3ZlKCksZGVsZXRlIHQuX2NvbnRleHQsdH0sci5yZWFjdD1mdW5jdGlvbih0LGUsbixhKXt2YXIgaSxsO3Q9by5nZXRHcmFwaERpdih0KSxrLmNsZWFyUHJvbWlzZVF1ZXVlKHQpO3ZhciBjPXQuX2Z1bGxEYXRhLHA9dC5fZnVsbExheW91dDtpZihvLmlzUGxvdERpdih0KSYmYyYmcCl7aWYoby5pc1BsYWluT2JqZWN0KGUpKXt2YXIgZD1lO2U9ZC5kYXRhLG49ZC5sYXlvdXQsYT1kLmNvbmZpZyxpPWQuZnJhbWVzfXZhciBnPSExO2lmKGEpe3ZhciB2PW8uZXh0ZW5kRGVlcCh7fSx0Ll9jb250ZXh0KTt0Ll9jb250ZXh0PXZvaWQgMCxPKHQsYSksZz1mdW5jdGlvbiB0KGUscil7dmFyIG47Zm9yKG4gaW4gZSlpZigiXyIhPT1uLmNoYXJBdCgwKSl7dmFyIGE9ZVtuXSxpPXJbbl07aWYoYSE9PWkpaWYoby5pc1BsYWluT2JqZWN0KGEpJiZvLmlzUGxhaW5PYmplY3QoaSkpe2lmKHQoYSxpKSlyZXR1cm4hMH1lbHNle2lmKCFBcnJheS5pc0FycmF5KGEpfHwhQXJyYXkuaXNBcnJheShpKSlyZXR1cm4hMDtpZihhLmxlbmd0aCE9PWkubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKWlmKGFbc10hPT1pW3NdKXtpZighby5pc1BsYWluT2JqZWN0KGFbc10pfHwhby5pc1BsYWluT2JqZWN0KGlbc10pKXJldHVybiEwO2lmKHQoYVtzXSxpW3NdKSlyZXR1cm4hMH19fX0odix0Ll9jb250ZXh0KX10LmRhdGE9ZXx8W10say5jbGVhbkRhdGEodC5kYXRhKSx0LmxheW91dD1ufHx7fSxrLmNsZWFuTGF5b3V0KHQubGF5b3V0KSxmdW5jdGlvbih0LGUscixuKXt2YXIgYSxpLGwsYyx1LGgsZixwLGQ9bi5fcHJlR1VJLGc9W10sdj17fTtmb3IoYSBpbiBkKXtpZih1PXJ0KGEsdHQpKXtpZihpPXUuYXR0cnx8dS5oZWFkKyIudWlyZXZpc2lvbiIsKGM9KGw9cyhuLGkpLmdldCgpKSYmbnQoaSxlKSkmJmM9PT1sJiYobnVsbD09PShoPWRbYV0pJiYoaD12b2lkIDApLG90KHA9KGY9cyhlLGEpKS5nZXQoKSxoKSkpe3ZvaWQgMD09PXAmJiJhdXRvcmFuZ2UiPT09YS5zdWJzdHIoYS5sZW5ndGgtOSkmJmcucHVzaChhLnN1YnN0cigwLGEubGVuZ3RoLTEwKSksZi5zZXQoTihzKG4sYSkuZ2V0KCkpKTtjb250aW51ZX19ZWxzZSBvLndhcm4oInVucmVjb2duaXplZCBHVUkgZWRpdDogIithKTtkZWxldGUgZFthXSwicmFuZ2VbIj09PWEuc3Vic3RyKGEubGVuZ3RoLTgsNikmJih2W2Euc3Vic3RyKDAsYS5sZW5ndGgtOSldPTEpfWZvcih2YXIgbT0wO208Zy5sZW5ndGg7bSsrKXt2YXIgeT1nW21dO2lmKHZbeV0pe3ZhciB4PXMoZSx5KS5nZXQoKTt4JiZkZWxldGUgeC5hdXRvcmFuZ2V9fXZhciBiPW4uX3RyYWNlUHJlR1VJO2Zvcih2YXIgXyBpbiBiKXt2YXIgdyxrPWJbX10sVD1udWxsO2ZvcihhIGluIGspe2lmKCFUKXt2YXIgTT1hdChfLHIpO2lmKE08MCl7ZGVsZXRlIGJbX107YnJlYWt9dmFyIEE9aXQoXyx0LCh3PXJbTV0uX2Z1bGxJbnB1dCkuaW5kZXgpO2lmKEE8MCl7ZGVsZXRlIGJbX107YnJlYWt9VD10W0FdfWlmKHU9cnQoYSxldCkpe2lmKHUuYXR0cj9jPShsPXMobix1LmF0dHIpLmdldCgpKSYmbnQodS5hdHRyLGUpOihsPXcudWlyZXZpc2lvbix2b2lkIDA9PT0oYz1ULnVpcmV2aXNpb24pJiYoYz1lLnVpcmV2aXNpb24pKSxjJiZjPT09bCYmKG51bGw9PT0oaD1rW2FdKSYmKGg9dm9pZCAwKSxvdChwPShmPXMoVCxhKSkuZ2V0KCksaCkpKXtmLnNldChOKHModyxhKS5nZXQoKSkpO2NvbnRpbnVlfX1lbHNlIG8ud2FybigidW5yZWNvZ25pemVkIEdVSSBlZGl0OiAiK2ErIiBpbiB0cmFjZSB1aWQgIitfKTtkZWxldGUga1thXX19fSh0LmRhdGEsdC5sYXlvdXQsYyxwKSxmLnN1cHBseURlZmF1bHRzKHQse3NraXBVcGRhdGVDYWxjOiEwfSk7dmFyIG09dC5fZnVsbERhdGEseT10Ll9mdWxsTGF5b3V0LHg9dm9pZCAwPT09eS5kYXRhcmV2aXNpb24sYj15LnRyYW5zaXRpb24sXz1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBpPU0ubGF5b3V0RmxhZ3MoKTtyZXR1cm4gaS5hcnJheXM9e30saS5yYW5nZXNBbHRlcmVkPXt9LGkubkNoYW5nZXM9MCxpLm5DaGFuZ2VzQW5pbT0wLHN0KGUscixbXSx7Z2V0VmFsT2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBoLmdldExheW91dFZhbE9iamVjdChyLHQpfSxmbGFnczppLGltbXV0YWJsZTpuLHRyYW5zaXRpb246YSxnZDp0fSksKGkucGxvdHx8aS5jYWxjKSYmKGkubGF5b3V0UmVwbG90PSEwKSxhJiZpLm5DaGFuZ2VzJiZpLm5DaGFuZ2VzQW5pbSYmKGkuYW5pbT1pLm5DaGFuZ2VzPT09aS5uQ2hhbmdlc0FuaW0/ImFsbCI6InNvbWUiKSxpfSh0LHAseSx4LGIpLHc9Xy5uZXdEYXRhUmV2aXNpb24sQT1mdW5jdGlvbih0LGUscixuLGEsaSl7dmFyIG89ZS5sZW5ndGg9PT1yLmxlbmd0aDtpZighYSYmIW8pcmV0dXJue2Z1bGxSZXBsb3Q6ITAsY2FsYzohMH07dmFyIHMsbCxjPU0udHJhY2VGbGFncygpO2MuYXJyYXlzPXt9LGMubkNoYW5nZXM9MCxjLm5DaGFuZ2VzQW5pbT0wO3ZhciB1PXtnZXRWYWxPYmplY3Q6ZnVuY3Rpb24odCl7dmFyIGU9aC5nZXRUcmFjZVZhbE9iamVjdChsLHQpO3JldHVybiFsLl9tb2R1bGUuYW5pbWF0YWJsZSYmZS5hbmltJiYoZS5hbmltPSExKSxlfSxmbGFnczpjLGltbXV0YWJsZTpuLHRyYW5zaXRpb246YSxuZXdEYXRhUmV2aXNpb246aSxnZDp0fSxwPXt9O2ZvcihzPTA7czxlLmxlbmd0aDtzKyspaWYocltzXSl7aWYobD1yW3NdLl9mdWxsSW5wdXQsZi5oYXNNYWtlc0RhdGFUcmFuc2Zvcm0obCkmJihsPXJbc10pLHBbbC51aWRdKWNvbnRpbnVlO3BbbC51aWRdPTEsc3QoZVtzXS5fZnVsbElucHV0LGwsW10sdSl9cmV0dXJuKGMuY2FsY3x8Yy5wbG90KSYmKGMuZnVsbFJlcGxvdD0hMCksYSYmYy5uQ2hhbmdlcyYmYy5uQ2hhbmdlc0FuaW0mJihjLmFuaW09Yy5uQ2hhbmdlcz09PWMubkNoYW5nZXNBbmltJiZvPyJhbGwiOiJzb21lIiksY30odCxjLG0seCxiLHcpO0sodCkmJihfLmxheW91dFJlcGxvdD0hMCksQS5jYWxjfHxfLmNhbGM/dC5jYWxjZGF0YT12b2lkIDA6Zi5zdXBwbHlEZWZhdWx0c1VwZGF0ZUNhbGModC5jYWxjZGF0YSxtKTt2YXIgUz1bXTtpZihpJiYodC5fdHJhbnNpdGlvbkRhdGE9e30sZi5jcmVhdGVUcmFuc2l0aW9uRGF0YSh0KSxTLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gci5hZGRGcmFtZXModCxpKX0pKSx5LnRyYW5zaXRpb24mJiFnJiYoQS5hbmltfHxfLmFuaW0pKWYuZG9DYWxjZGF0YSh0KSxULmRvQXV0b1JhbmdlQW5kQ29uc3RyYWludHModCksUy5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGYudHJhbnNpdGlvbkZyb21SZWFjdCh0LEEsXyxwKX0pO2Vsc2UgaWYoQS5mdWxsUmVwbG90fHxfLmxheW91dFJlcGxvdHx8Zyl0Ll9mdWxsTGF5b3V0Ll9za2lwRGVmYXVsdHM9ITAsUy5wdXNoKHIucGxvdCk7ZWxzZXtmb3IodmFyIEUgaW4gXy5hcnJheXMpe3ZhciBDPV8uYXJyYXlzW0VdO2lmKEMubGVuZ3RoKXt2YXIgUD11LmdldENvbXBvbmVudE1ldGhvZChFLCJkcmF3T25lIik7aWYoUCE9PW8ubm9vcClmb3IodmFyIHo9MDt6PEMubGVuZ3RoO3orKylQKHQsQ1t6XSk7ZWxzZXt2YXIgST11LmdldENvbXBvbmVudE1ldGhvZChFLCJkcmF3Iik7aWYoST09PW8ubm9vcCl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBkcmF3IGNvbXBvbmVudHM6ICIrRSk7SSh0KX19fVMucHVzaChmLnByZXZpb3VzUHJvbWlzZXMpLEEuc3R5bGUmJlMucHVzaChULmRvVHJhY2VTdHlsZSksKEEuY29sb3JiYXJzfHxfLmNvbG9yYmFycykmJlMucHVzaChULmRvQ29sb3JCYXJzKSxfLmxlZ2VuZCYmUy5wdXNoKFQuZG9MZWdlbmQpLF8ubGF5b3V0c3R5bGUmJlMucHVzaChULmxheW91dFN0eWxlcyksXy5heHJhbmdlJiZZKFMpLF8udGlja3MmJlMucHVzaChULmRvVGlja3NSZWxheW91dCksXy5tb2RlYmFyJiZTLnB1c2goVC5kb01vZGVCYXIpLF8uY2FtZXJhJiZTLnB1c2goVC5kb0NhbWVyYSksUy5wdXNoKEwpfVMucHVzaChmLnJlaG92ZXIsZi5yZWRyYWcpLChsPW8uc3luY09yQXN5bmMoUyx0KSkmJmwudGhlbnx8KGw9UHJvbWlzZS5yZXNvbHZlKHQpKX1lbHNlIGw9ci5uZXdQbG90KHQsZSxuLGEpO3JldHVybiBsLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfcmVhY3QiLHtkYXRhOmUsbGF5b3V0Om59KSx0fSl9LHIucmVkcmF3PWZ1bmN0aW9uKHQpe2lmKHQ9by5nZXRHcmFwaERpdih0KSwhby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCk7cmV0dXJuIGsuY2xlYW5EYXRhKHQuZGF0YSksay5jbGVhbkxheW91dCh0LmxheW91dCksdC5jYWxjZGF0YT12b2lkIDAsci5wbG90KHQpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfcmVkcmF3IiksdH0pfSxyLnJlbGF5b3V0PUgsci5yZXN0eWxlPUIsci5zZXRQbG90Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBvLmV4dGVuZEZsYXQoXyx0KX0sci51cGRhdGU9USxyLl9ndWlSZWxheW91dD0kKEgpLHIuX2d1aVJlc3R5bGU9JChCKSxyLl9ndWlVcGRhdGU9JChRKSxyLl9zdG9yZURpcmVjdEdVSUVkaXQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiByKVYobixzKHQsbikuZ2V0KCkscltuXSxlKX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi9jb21wb25lbnRzL2RyYXdpbmciOjYxMywiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjY5NCwiLi4vbGliIjo3MTcsIi4uL2xpYi9ldmVudHMiOjcwNywiLi4vbGliL3F1ZXVlIjo3MzIsIi4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQxLCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3NzEsIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCI6Nzc0LCIuLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0Ijo3ODIsIi4uL3Bsb3RzL3Bsb3RzIjo4MjYsIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeSI6ODM0LCIuLi9yZWdpc3RyeSI6ODQ2LCIuL2VkaXRfdHlwZXMiOjc0OCwiLi9oZWxwZXJzIjo3NDksIi4vbWFuYWdlX2FycmF5cyI6NzUxLCIuL3Bsb3RfY29uZmlnIjo3NTMsIi4vcGxvdF9zY2hlbWEiOjc1NCwiLi9zdWJyb3V0aW5lcyI6NzU2LGQzOjE2NSwiZmFzdC1pc251bWVyaWMiOjIyOCwiaGFzLWhvdmVyIjo0MTJ9XSw3NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e3N0YXRpY1Bsb3Q6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHBsb3RseVNlcnZlclVSTDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJodHRwczovL3Bsb3QubHkifSxlZGl0YWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZWRpdHM6e2Fubm90YXRpb25Qb3NpdGlvbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYW5ub3RhdGlvblRhaWw6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGFubm90YXRpb25UZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxheGlzVGl0bGVUZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxjb2xvcmJhclBvc2l0aW9uOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxjb2xvcmJhclRpdGxlVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbGVnZW5kUG9zaXRpb246e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxlZ2VuZFRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHNoYXBlUG9zaXRpb246e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHRpdGxlVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX19LGF1dG9zaXphYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxyZXNwb25zaXZlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxmaWxsRnJhbWU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZyYW1lTWFyZ2luczp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsbWluOjAsbWF4Oi41fSxzY3JvbGxab29tOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJjYXJ0ZXNpYW4iLCJnbDNkIiwiZ2VvIiwibWFwYm94Il0sZXh0cmFzOlshMCwhMV0sZGZsdDoiZ2wzZCtnZW8rbWFwYm94In0sZG91YmxlQ2xpY2s6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITEsInJlc2V0IiwiYXV0b3NpemUiLCJyZXNldCthdXRvc2l6ZSJdLGRmbHQ6InJlc2V0K2F1dG9zaXplIn0sZG91YmxlQ2xpY2tEZWxheTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjMwMCxtaW46MH0sc2hvd0F4aXNEcmFnSGFuZGxlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd0F4aXNSYW5nZUVudHJ5Qm94ZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3dUaXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93TGluazp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbGlua1RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiRWRpdCBjaGFydCIsbm9CbGFuazohMH0sc2VuZERhdGE6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3dTb3VyY2VzOnt2YWxUeXBlOiJhbnkiLGRmbHQ6ITF9LGRpc3BsYXlNb2RlQmFyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJob3ZlciIsITAsITFdLGRmbHQ6ImhvdmVyIn0sc2hvd1NlbmRUb0Nsb3VkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzaG93RWRpdEluQ2hhcnRTdHVkaW86e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG1vZGVCYXJCdXR0b25zVG9SZW1vdmU6e3ZhbFR5cGU6ImFueSIsZGZsdDpbXX0sbW9kZUJhckJ1dHRvbnNUb0FkZDp7dmFsVHlwZToiYW55IixkZmx0OltdfSxtb2RlQmFyQnV0dG9uczp7dmFsVHlwZToiYW55IixkZmx0OiExfSx0b0ltYWdlQnV0dG9uT3B0aW9uczp7dmFsVHlwZToiYW55IixkZmx0Ont9fSxkaXNwbGF5bG9nbzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sd2F0ZXJtYXJrOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxwbG90R2xQaXhlbFJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MixtaW46MSxtYXg6NH0sc2V0QmFja2dyb3VuZDp7dmFsVHlwZToiYW55IixkZmx0OiJ0cmFuc3BhcmVudCJ9LHRvcG9qc29uVVJMOnt2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsZGZsdDoiaHR0cHM6Ly9jZG4ucGxvdC5seS8ifSxtYXBib3hBY2Nlc3NUb2tlbjp7dmFsVHlwZToic3RyaW5nIixkZmx0Om51bGx9LGxvZ2dpbmc6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLG1heDoyLGRmbHQ6MX0sbm90aWZ5T25Mb2dnaW5nOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxtYXg6MixkZmx0OjB9LHF1ZXVlTGVuZ3RoOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjB9LGdsb2JhbFRyYW5zZm9ybXM6e3ZhbFR5cGU6ImFueSIsZGZsdDpbXX0sbG9jYWxlOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6ImVuLVVTIn0sbG9jYWxlczp7dmFsVHlwZToiYW55IixkZmx0Ont9fX0sYT17fTshZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgbiBpbiBlKXt2YXIgYT1lW25dO2EudmFsVHlwZT9yW25dPWEuZGZsdDoocltuXXx8KHJbbl09e30pLHQoYSxyW25dKSl9fShuLGEpLGUuZXhwb3J0cz17Y29uZmlnQXR0cmlidXRlczpuLGRmbHRDb25maWc6YX19LHt9XSw3NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKSxhPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxzPXQoIi4uL3Bsb3RzL2ZyYW1lX2F0dHJpYnV0ZXMiKSxsPXQoIi4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksYz10KCIuL3Bsb3RfY29uZmlnIikuY29uZmlnQXR0cmlidXRlcyx1PXQoIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeS9hcmVhX2F0dHJpYnV0ZXMiKSxoPXQoIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeS9heGlzX2F0dHJpYnV0ZXMiKSxmPXQoIi4vZWRpdF90eXBlcyIpLHA9YS5leHRlbmRGbGF0LGQ9YS5leHRlbmREZWVwQWxsLGc9YS5pc1BsYWluT2JqZWN0LHY9YS5pc0FycmF5T3JUeXBlZEFycmF5LG09YS5uZXN0ZWRQcm9wZXJ0eSx5PWEudmFsT2JqZWN0TWV0YSx4PSJfaXNTdWJwbG90T2JqIixiPSJfaXNMaW5rZWRUb0FycmF5IixfPVt4LGIsIl9hcnJheUF0dHJSZWdleHBzIiwiX2RlcHJlY2F0ZWQiXTtmdW5jdGlvbiB3KHQsZSxyKXtpZighdClyZXR1cm4hMTtpZih0Ll9pc0xpbmtlZFRvQXJyYXkpaWYoayhlW3JdKSlyKys7ZWxzZSBpZihyPGUubGVuZ3RoKXJldHVybiExO2Zvcig7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXRbZVtyXV07aWYoIWcobikpYnJlYWs7aWYodD1uLHI9PT1lLmxlbmd0aC0xKWJyZWFrO2lmKHQuX2lzTGlua2VkVG9BcnJheSl7aWYoIWsoZVsrK3JdKSlyZXR1cm4hMX1lbHNlIGlmKCJpbmZvX2FycmF5Ij09PXQudmFsVHlwZSl7dmFyIGE9ZVsrK3JdO2lmKCFrKGEpKXJldHVybiExO3ZhciBpPXQuaXRlbXM7aWYoQXJyYXkuaXNBcnJheShpKSl7aWYoYT49aS5sZW5ndGgpcmV0dXJuITE7aWYoMj09PXQuZGltZW5zaW9ucyl7aWYocisrLGUubGVuZ3RoPT09cilyZXR1cm4gdDt2YXIgbz1lW3JdO2lmKCFrKG8pKXJldHVybiExO3Q9aVthXVtvXX1lbHNlIHQ9aVthXX1lbHNlIHQ9aX19cmV0dXJuIHR9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdD09PU1hdGgucm91bmQodCkmJnQ+PTB9ZnVuY3Rpb24gVCgpe3ZhciB0LGUscj17fTtmb3IodCBpbiBkKHIsbyksbi5zdWJwbG90c1JlZ2lzdHJ5KXtpZigoZT1uLnN1YnBsb3RzUmVnaXN0cnlbdF0pLmxheW91dEF0dHJpYnV0ZXMpaWYoQXJyYXkuaXNBcnJheShlLmF0dHIpKWZvcih2YXIgYT0wO2E8ZS5hdHRyLmxlbmd0aDthKyspUyhyLGUsZS5hdHRyW2FdKTtlbHNlIFMocixlLCJzdWJwbG90Ij09PWUuYXR0cj9lLm5hbWU6ZS5hdHRyKX1mb3IodCBpbiByPWZ1bmN0aW9uKHQpe3JldHVybiBwKHQse3JhZGlhbGF4aXM6aC5yYWRpYWxheGlzLGFuZ3VsYXJheGlzOmguYW5ndWxhcmF4aXN9KSxwKHQsaC5sYXlvdXQpLHR9KHIpLG4uY29tcG9uZW50c1JlZ2lzdHJ5KXt2YXIgaT0oZT1uLmNvbXBvbmVudHNSZWdpc3RyeVt0XSkuc2NoZW1hO2lmKGkmJihpLnN1YnBsb3RzfHxpLmxheW91dCkpe3ZhciBzPWkuc3VicGxvdHM7aWYocyYmcy54YXhpcyYmIXMueWF4aXMpZm9yKHZhciBsIGluIHMueGF4aXMpZGVsZXRlIHIueWF4aXNbbF19ZWxzZSJjb2xvcnNjYWxlIj09PWUubmFtZT9kKHIsZS5sYXlvdXRBdHRyaWJ1dGVzKTplLmxheW91dEF0dHJpYnV0ZXMmJkUocixlLmxheW91dEF0dHJpYnV0ZXMsZS5uYW1lKX1yZXR1cm57bGF5b3V0QXR0cmlidXRlczpBKHIpfX1mdW5jdGlvbiBNKCl7dmFyIHQ9e2ZyYW1lczpkKHt9LHMpfTtyZXR1cm4gQSh0KSx0LmZyYW1lc31mdW5jdGlvbiBBKHQpe3JldHVybiBmdW5jdGlvbih0KXtyLmNyYXdsKHQsZnVuY3Rpb24odCxlLG4pe3IuaXNWYWxPYmplY3QodCk/ImRhdGFfYXJyYXkiPT09dC52YWxUeXBlPyh0LnJvbGU9ImRhdGEiLG5bZSsic3JjIl09e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6Im5vbmUifSk6ITA9PT10LmFycmF5T2smJihuW2UrInNyYyJdPXt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJub25lIn0pOmcodCkmJih0LnJvbGU9Im9iamVjdCIpfSl9KHQpLGZ1bmN0aW9uKHQpe3IuY3Jhd2wodCxmdW5jdGlvbih0LGUscil7aWYoIXQpcmV0dXJuO3ZhciBuPXRbYl07aWYoIW4pcmV0dXJuO2RlbGV0ZSB0W2JdLHJbZV09e2l0ZW1zOnt9fSxyW2VdLml0ZW1zW25dPXQscltlXS5yb2xlPSJvYmplY3QifSl9KHQpLGZ1bmN0aW9uKHQpeyFmdW5jdGlvbiB0KGUpe2Zvcih2YXIgciBpbiBlKWlmKGcoZVtyXSkpdChlW3JdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZVtyXSkpZm9yKHZhciBuPTA7bjxlW3JdLmxlbmd0aDtuKyspdChlW3JdW25dKTtlbHNlIGVbcl1pbnN0YW5jZW9mIFJlZ0V4cCYmKGVbcl09ZVtyXS50b1N0cmluZygpKX0odCl9KHQpLHR9ZnVuY3Rpb24gUyh0LGUscil7dmFyIG49bSh0LHIpLGE9ZCh7fSxlLmxheW91dEF0dHJpYnV0ZXMpO2FbeF09ITAsbi5zZXQoYSl9ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49bSh0LHIpO24uc2V0KGQobi5nZXQoKXx8e30sZSkpfXIuSVNfU1VCUExPVF9PQko9eCxyLklTX0xJTktFRF9UT19BUlJBWT1iLHIuREVQUkVDQVRFRD0iX2RlcHJlY2F0ZWQiLHIuVU5ERVJTQ09SRV9BVFRSUz1fLHIuZ2V0PWZ1bmN0aW9uKCl7dmFyIHQ9e307bi5hbGxUeXBlcy5jb25jYXQoImFyZWEiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09ZnVuY3Rpb24odCl7dmFyIGUsYTsiYXJlYSI9PT10PyhlPXthdHRyaWJ1dGVzOnV9LGE9e30pOihlPW4ubW9kdWxlc1t0XS5fbW9kdWxlLGE9ZS5iYXNlUGxvdE1vZHVsZSk7dmFyIG89e3R5cGU6bnVsbH0scz1kKHt9LGkpLGw9ZCh7fSxlLmF0dHJpYnV0ZXMpO3IuY3Jhd2wobCxmdW5jdGlvbih0LGUscixuLGEpe20ocyxhKS5zZXQodm9pZCAwKSx2b2lkIDA9PT10JiZtKGwsYSkuc2V0KHZvaWQgMCl9KSxkKG8scyksbi50cmFjZUlzKHQsIm5vT3BhY2l0eSIpJiZkZWxldGUgby5vcGFjaXR5O24udHJhY2VJcyh0LCJzaG93TGVnZW5kIil8fChkZWxldGUgby5zaG93bGVnZW5kLGRlbGV0ZSBvLmxlZ2VuZGdyb3VwKTtuLnRyYWNlSXModCwibm9Ib3ZlciIpJiYoZGVsZXRlIG8uaG92ZXJpbmZvLGRlbGV0ZSBvLmhvdmVybGFiZWwpO2Uuc2VsZWN0UG9pbnRzfHxkZWxldGUgby5zZWxlY3RlZHBvaW50cztkKG8sbCksYS5hdHRyaWJ1dGVzJiZkKG8sYS5hdHRyaWJ1dGVzKTtvLnR5cGU9dDt2YXIgYz17bWV0YTplLm1ldGF8fHt9LGNhdGVnb3JpZXM6ZS5jYXRlZ29yaWVzfHx7fSxhbmltYXRhYmxlOkJvb2xlYW4oZS5hbmltYXRhYmxlKSx0eXBlOnQsYXR0cmlidXRlczpBKG8pfTtpZihlLmxheW91dEF0dHJpYnV0ZXMpe3ZhciBoPXt9O2QoaCxlLmxheW91dEF0dHJpYnV0ZXMpLGMubGF5b3V0QXR0cmlidXRlcz1BKGgpfWUuYW5pbWF0YWJsZXx8ci5jcmF3bChjLGZ1bmN0aW9uKHQpe3IuaXNWYWxPYmplY3QodCkmJiJhbmltImluIHQmJmRlbGV0ZSB0LmFuaW19KTtyZXR1cm4gY30oZSl9KTt2YXIgZT17fTtyZXR1cm4gT2JqZWN0LmtleXMobi50cmFuc2Zvcm1zUmVnaXN0cnkpLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1mdW5jdGlvbih0KXt2YXIgZT1uLnRyYW5zZm9ybXNSZWdpc3RyeVt0XSxyPWQoe30sZS5hdHRyaWJ1dGVzKTtyZXR1cm4gT2JqZWN0LmtleXMobi5jb21wb25lbnRzUmVnaXN0cnkpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIGE9bi5jb21wb25lbnRzUmVnaXN0cnlbZV07YS5zY2hlbWEmJmEuc2NoZW1hLnRyYW5zZm9ybXMmJmEuc2NoZW1hLnRyYW5zZm9ybXNbdF0mJk9iamVjdC5rZXlzKGEuc2NoZW1hLnRyYW5zZm9ybXNbdF0pLmZvckVhY2goZnVuY3Rpb24oZSl7RShyLGEuc2NoZW1hLnRyYW5zZm9ybXNbdF1bZV0sZSl9KX0pLHthdHRyaWJ1dGVzOkEocil9fSh0KX0pLHtkZWZzOnt2YWxPYmplY3RzOnksbWV0YUtleXM6Xy5jb25jYXQoWyJkZXNjcmlwdGlvbiIsInJvbGUiLCJlZGl0VHlwZSIsImltcGxpZWRFZGl0cyJdKSxlZGl0VHlwZTp7dHJhY2VzOmYudHJhY2VzLGxheW91dDpmLmxheW91dH0saW1wbGllZEVkaXRzOnt9fSx0cmFjZXM6dCxsYXlvdXQ6VCgpLHRyYW5zZm9ybXM6ZSxmcmFtZXM6TSgpLGFuaW1hdGlvbjpBKGwpLGNvbmZpZzpBKGMpfX0sci5jcmF3bD1mdW5jdGlvbih0LGUsbixhKXt2YXIgaT1ufHwwO2E9YXx8IiIsT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgbz10W25dO2lmKC0xPT09Xy5pbmRleE9mKG4pKXt2YXIgcz0oYT9hKyIuIjoiIikrbjtlKG8sbix0LGkscyksci5pc1ZhbE9iamVjdChvKXx8ZyhvKSYmImltcGxpZWRFZGl0cyIhPT1uJiZyLmNyYXdsKG8sZSxpKzEscyl9fSl9LHIuaXNWYWxPYmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnZvaWQgMCE9PXQudmFsVHlwZX0sci5maW5kQXJyYXlBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3ZhciBlLG4sYT1bXSxvPVtdLHM9W107ZnVuY3Rpb24gbCh0LHIsaSxsKXtvPW8uc2xpY2UoMCxsKS5jb25jYXQoW3JdKSxzPXMuc2xpY2UoMCxsKS5jb25jYXQoW3QmJnQuX2lzTGlua2VkVG9BcnJheV0pLHQmJigiZGF0YV9hcnJheSI9PT10LnZhbFR5cGV8fCEwPT09dC5hcnJheU9rKSYmISgiY29sb3JiYXIiPT09b1tsLTFdJiYoInRpY2t0ZXh0Ij09PXJ8fCJ0aWNrdmFscyI9PT1yKSkmJmZ1bmN0aW9uIHQoZSxyLGkpe3ZhciBsPWVbb1tyXV07dmFyIGM9aStvW3JdO2lmKHI9PT1vLmxlbmd0aC0xKXYobCkmJmEucHVzaChuK2MpO2Vsc2UgaWYoc1tyXSl7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IodmFyIHU9MDt1PGwubGVuZ3RoO3UrKylnKGxbdV0pJiZ0KGxbdV0scisxLGMrIlsiK3UrIl0uIil9ZWxzZSBnKGwpJiZ0KGwscisxLGMrIi4iKX0oZSwwLCIiKX1lPXQsbj0iIixyLmNyYXdsKGksbCksdC5fbW9kdWxlJiZ0Ll9tb2R1bGUuYXR0cmlidXRlcyYmci5jcmF3bCh0Ll9tb2R1bGUuYXR0cmlidXRlcyxsKTt2YXIgYz10LnRyYW5zZm9ybXM7aWYoYylmb3IodmFyIHU9MDt1PGMubGVuZ3RoO3UrKyl7dmFyIGg9Y1t1XSxmPWguX21vZHVsZTtmJiYobj0idHJhbnNmb3Jtc1siK3UrIl0uIixlPWgsci5jcmF3bChmLmF0dHJpYnV0ZXMsbCkpfXJldHVybiBhfSxyLmdldFRyYWNlVmFsT2JqZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvPWVbMF0scz0xO2lmKCJ0cmFuc2Zvcm1zIj09PW8pe2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gaS50cmFuc2Zvcm1zO3ZhciBsPXQudHJhbnNmb3JtcztpZighQXJyYXkuaXNBcnJheShsKXx8IWwubGVuZ3RoKXJldHVybiExO3ZhciBjPWVbMV07aWYoIWsoYyl8fGM+PWwubGVuZ3RoKXJldHVybiExO2E9KHI9KG4udHJhbnNmb3Jtc1JlZ2lzdHJ5W2xbY10udHlwZV18fHt9KS5hdHRyaWJ1dGVzKSYmcltlWzJdXSxzPTN9ZWxzZSBpZigiYXJlYSI9PT10LnR5cGUpYT11W29dO2Vsc2V7dmFyIGg9dC5fbW9kdWxlO2lmKGh8fChoPShuLm1vZHVsZXNbdC50eXBlfHxpLnR5cGUuZGZsdF18fHt9KS5fbW9kdWxlKSwhaClyZXR1cm4hMTtpZighKGE9KHI9aC5hdHRyaWJ1dGVzKSYmcltvXSkpe3ZhciBmPWguYmFzZVBsb3RNb2R1bGU7ZiYmZi5hdHRyaWJ1dGVzJiYoYT1mLmF0dHJpYnV0ZXNbb10pfWF8fChhPWlbb10pfXJldHVybiB3KGEsZSxzKX0sci5nZXRMYXlvdXRWYWxPYmplY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdyhmdW5jdGlvbih0LGUpe3ZhciByLGEsaSxzLGw9dC5fYmFzZVBsb3RNb2R1bGVzO2lmKGwpe3ZhciBjO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspe2lmKChpPWxbcl0pLmF0dHJSZWdleCYmaS5hdHRyUmVnZXgudGVzdChlKSl7aWYoaS5sYXlvdXRBdHRyT3ZlcnJpZGVzKXJldHVybiBpLmxheW91dEF0dHJPdmVycmlkZXM7IWMmJmkubGF5b3V0QXR0cmlidXRlcyYmKGM9aS5sYXlvdXRBdHRyaWJ1dGVzKX12YXIgdT1pLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzO2lmKHUmJmUgaW4gdSlyZXR1cm4gdVtlXX1pZihjKXJldHVybiBjfXZhciBmPXQuX21vZHVsZXM7aWYoZilmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKWlmKChzPWZbcl0ubGF5b3V0QXR0cmlidXRlcykmJmUgaW4gcylyZXR1cm4gc1tlXTtmb3IoYSBpbiBuLmNvbXBvbmVudHNSZWdpc3RyeSl7aWYoImNvbG9yc2NhbGUiPT09KGk9bi5jb21wb25lbnRzUmVnaXN0cnlbYV0pLm5hbWUmJjA9PT1lLmluZGV4T2YoImNvbG9yYXhpcyIpKXJldHVybiBpLmxheW91dEF0dHJpYnV0ZXNbZV07aWYoIWkuc2NoZW1hJiZlPT09aS5uYW1lKXJldHVybiBpLmxheW91dEF0dHJpYnV0ZXN9aWYoZSBpbiBvKXJldHVybiBvW2VdO2lmKCJyYWRpYWxheGlzIj09PWV8fCJhbmd1bGFyYXhpcyI9PT1lKXJldHVybiBoW2VdO3JldHVybiBoLmxheW91dFtlXXx8ITF9KHQsZVswXSksZSwxKX19LHsiLi4vbGliIjo3MTcsIi4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo3NjAsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc2MiwiLi4vcGxvdHMvZnJhbWVfYXR0cmlidXRlcyI6NzkyLCIuLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyI6ODE3LCIuLi9wbG90cy9wb2xhci9sZWdhY3kvYXJlYV9hdHRyaWJ1dGVzIjo4MzIsIi4uL3Bsb3RzL3BvbGFyL2xlZ2FjeS9heGlzX2F0dHJpYnV0ZXMiOjgzMywiLi4vcmVnaXN0cnkiOjg0NiwiLi9lZGl0X3R5cGVzIjo3NDgsIi4vcGxvdF9jb25maWciOjc1M31dLDc1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxhPXQoIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxpPSJ0ZW1wbGF0ZWl0ZW1uYW1lIixvPXtuYW1lOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJub25lIn19O2Z1bmN0aW9uIHModCl7cmV0dXJuIHQmJiJzdHJpbmciPT10eXBlb2YgdH1mdW5jdGlvbiBsKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuInMiIT09dC5jaGFyQXQoZSkmJm4ud2FybigiYmFkIGFyZ3VtZW50IHRvIGFycmF5RGVmYXVsdEtleTogIit0KSx0LnN1YnN0cigwLHQubGVuZ3RoLTEpKyJkZWZhdWx0cyJ9b1tpXT17dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHIudGVtcGxhdGVkQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5faXNMaW5rZWRUb0FycmF5PXQsZS5uYW1lPW8ubmFtZSxlW2ldPW9baV0sZX0sci50cmFjZVRlbXBsYXRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLGk9e307Zm9yKGUgaW4gdClyPXRbZV0sQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGgmJihpW2VdPTApO3JldHVybntuZXdUcmFjZTpmdW5jdGlvbihvKXt2YXIgcz17dHlwZTplPW4uY29lcmNlKG8se30sYSwidHlwZSIpLF90ZW1wbGF0ZTpudWxsfTtpZihlIGluIGkpe3I9dFtlXTt2YXIgbD1pW2VdJXIubGVuZ3RoO2lbZV0rKyxzLl90ZW1wbGF0ZT1yW2xdfXJldHVybiBzfX19LHIubmV3Q29udGFpbmVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10Ll90ZW1wbGF0ZSxpPWEmJihhW2VdfHxyJiZhW3JdKTtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KGkpfHwoaT1udWxsKSx0W2VdPXtfdGVtcGxhdGU6aX19LHIuYXJyYXlUZW1wbGF0ZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX3RlbXBsYXRlLGE9biYmbltsKGUpXSxvPW4mJm5bZV07QXJyYXkuaXNBcnJheShvKSYmby5sZW5ndGh8fChvPVtdKTt2YXIgYz17fTtyZXR1cm57bmV3SXRlbTpmdW5jdGlvbih0KXt2YXIgZT17bmFtZTp0Lm5hbWUsX2lucHV0OnR9LG49ZVtpXT10W2ldO2lmKCFzKG4pKXJldHVybiBlLl90ZW1wbGF0ZT1hLGU7Zm9yKHZhciBsPTA7bDxvLmxlbmd0aDtsKyspe3ZhciB1PW9bbF07aWYodS5uYW1lPT09bilyZXR1cm4gY1tuXT0xLGUuX3RlbXBsYXRlPXUsZX1yZXR1cm4gZVtyXT10W3JdfHwhMSxlLl90ZW1wbGF0ZT0hMSxlfSxkZWZhdWx0SXRlbXM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8by5sZW5ndGg7ZSsrKXt2YXIgcj1vW2VdLG49ci5uYW1lO2lmKHMobikmJiFjW25dKXt2YXIgYT17X3RlbXBsYXRlOnIsbmFtZTpuLF9pbnB1dDp7X3RlbXBsYXRlaXRlbW5hbWU6bn19O2FbaV09cltpXSx0LnB1c2goYSksY1tuXT0xfX1yZXR1cm4gdH19fSxyLmFycmF5RGVmYXVsdEtleT1sLHIuYXJyYXlFZGl0b3I9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPShuLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCl8fFtdKS5sZW5ndGgsbz1yLl9pbmRleCxzPW8+PWEmJihyLl9pbnB1dHx8e30pLl90ZW1wbGF0ZWl0ZW1uYW1lO3MmJihvPWEpO3ZhciBsLGM9ZSsiWyIrbysiXSI7ZnVuY3Rpb24gdSgpe2w9e30scyYmKGxbY109e30sbFtjXVtpXT1zKX1mdW5jdGlvbiBoKHQsZSl7cz9uLm5lc3RlZFByb3BlcnR5KGxbY10sdCkuc2V0KGUpOmxbYysiLiIrdF09ZX1mdW5jdGlvbiBmKCl7dmFyIHQ9bDtyZXR1cm4gdSgpLHR9cmV0dXJuIHUoKSx7bW9kaWZ5QmFzZTpmdW5jdGlvbih0LGUpe2xbdF09ZX0sbW9kaWZ5SXRlbTpoLGdldFVwZGF0ZU9iajpmLGFwcGx5VXBkYXRlOmZ1bmN0aW9uKGUscil7ZSYmaChlLHIpO3ZhciBhPWYoKTtmb3IodmFyIGkgaW4gYSluLm5lc3RlZFByb3BlcnR5KHQsaSkuc2V0KGFbaV0pfX19fSx7Ii4uL2xpYiI6NzE3LCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjJ9XSw3NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uL3JlZ2lzdHJ5IiksaT10KCIuLi9wbG90cy9wbG90cyIpLG89dCgiLi4vbGliIikscz10KCIuLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiKSxsPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxjPXQoIi4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHU9dCgiLi4vY29tcG9uZW50cy90aXRsZXMiKSxoPXQoIi4uL2NvbXBvbmVudHMvbW9kZWJhciIpLGY9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxwPXQoIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxkPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyIpLGc9ZC5lbmZvcmNlLHY9ZC5jbGVhbixtPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5kb0F1dG9SYW5nZSx5PSJzdGFydCIseD0ibWlkZGxlIixiPSJlbmQiO2Z1bmN0aW9uIF8odCxlLHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgYT1yW25dWzBdLGk9cltuXVsxXTtpZighKGFbMF0+PXRbMV18fGFbMV08PXRbMF0pJiYoaVswXTxlWzFdJiZpWzFdPmVbMF0pKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHcodCl7dmFyIGUsYSxzLHUsZCxnLHY9dC5fZnVsbExheW91dCxtPXYuX3NpemUseT1tLnAseD1mLmxpc3QodCwiIiwhMCk7aWYodi5fcGFwZXJkaXYuc3R5bGUoe3dpZHRoOnQuX2NvbnRleHQucmVzcG9uc2l2ZSYmdi5hdXRvc2l6ZSYmIXQuX2NvbnRleHQuX2hhc1plcm9XaWR0aCYmIXQubGF5b3V0LndpZHRoPyIxMDAlIjp2LndpZHRoKyJweCIsaGVpZ2h0OnQuX2NvbnRleHQucmVzcG9uc2l2ZSYmdi5hdXRvc2l6ZSYmIXQuX2NvbnRleHQuX2hhc1plcm9IZWlnaHQmJiF0LmxheW91dC5oZWlnaHQ/IjEwMCUiOnYuaGVpZ2h0KyJweCJ9KS5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLmNhbGwoYy5zZXRTaXplLHYud2lkdGgsdi5oZWlnaHQpLHQuX2NvbnRleHQuc2V0QmFja2dyb3VuZCh0LHYucGFwZXJfYmdjb2xvciksci5kcmF3TWFpblRpdGxlKHQpLGgubWFuYWdlKHQpLCF2Ll9oYXMoImNhcnRlc2lhbiIpKXJldHVybiBpLnByZXZpb3VzUHJvbWlzZXModCk7ZnVuY3Rpb24gYih0LGUscil7dmFyIG49dC5fbHcvMjtyZXR1cm4ieCI9PT10Ll9pZC5jaGFyQXQoMCk/ZT8idG9wIj09PXI/ZS5fb2Zmc2V0LXktbjplLl9vZmZzZXQrZS5fbGVuZ3RoK3krbjptLnQrbS5oKigxLSh0LnBvc2l0aW9ufHwwKSkrbiUxOmU/InJpZ2h0Ij09PXI/ZS5fb2Zmc2V0K2UuX2xlbmd0aCt5K246ZS5fb2Zmc2V0LXktbjptLmwrbS53Kih0LnBvc2l0aW9ufHwwKStuJTF9Zm9yKGU9MDtlPHgubGVuZ3RoO2UrKyl7dmFyIHc9KHU9eFtlXSkuX2FuY2hvckF4aXM7dS5fbGluZXBvc2l0aW9ucz17fSx1Ll9sdz1jLmNyaXNwUm91bmQodCx1LmxpbmV3aWR0aCwxKSx1Ll9tYWluTGluZVBvc2l0aW9uPWIodSx3LHUuc2lkZSksdS5fbWFpbk1pcnJvclBvc2l0aW9uPXUubWlycm9yJiZ3P2IodSx3LHAuT1BQT1NJVEVfU0lERVt1LnNpZGVdKTpudWxsfXZhciBUPVtdLEE9W10sUz1bXSxFPTE9PT1sLm9wYWNpdHkodi5wYXBlcl9iZ2NvbG9yKSYmMT09PWwub3BhY2l0eSh2LnBsb3RfYmdjb2xvcikmJnYucGFwZXJfYmdjb2xvcj09PXYucGxvdF9iZ2NvbG9yO2ZvcihhIGluIHYuX3Bsb3RzKWlmKChzPXYuX3Bsb3RzW2FdKS5tYWlucGxvdClzLmJnJiZzLmJnLnJlbW92ZSgpLHMuYmc9dm9pZCAwO2Vsc2V7dmFyIEw9cy54YXhpcy5kb21haW4sQz1zLnlheGlzLmRvbWFpbixQPXMucGxvdGdyb3VwO2lmKF8oTCxDLFMpKXt2YXIgTz1QLm5vZGUoKSx6PXMuYmc9by5lbnN1cmVTaW5nbGUoUCwicmVjdCIsImJnIik7Ty5pbnNlcnRCZWZvcmUoei5ub2RlKCksTy5jaGlsZE5vZGVzWzBdKSxBLnB1c2goYSl9ZWxzZSBQLnNlbGVjdCgicmVjdC5iZyIpLnJlbW92ZSgpLFMucHVzaChbTCxDXSksRXx8KFQucHVzaChhKSxBLnB1c2goYSkpfXZhciBJLEQsUixGLEIsTixqLFYsVSxxLEgsRyxZLFc9di5fYmdMYXllci5zZWxlY3RBbGwoIi5iZyIpLmRhdGEoVCk7Zm9yKFcuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJiZyIsITApLFcuZXhpdCgpLnJlbW92ZSgpLFcuZWFjaChmdW5jdGlvbih0KXt2Ll9wbG90c1t0XS5iZz1uLnNlbGVjdCh0aGlzKX0pLGU9MDtlPEEubGVuZ3RoO2UrKylzPXYuX3Bsb3RzW0FbZV1dLGQ9cy54YXhpcyxnPXMueWF4aXMscy5iZyYmcy5iZy5jYWxsKGMuc2V0UmVjdCxkLl9vZmZzZXQteSxnLl9vZmZzZXQteSxkLl9sZW5ndGgrMip5LGcuX2xlbmd0aCsyKnkpLmNhbGwobC5maWxsLHYucGxvdF9iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwwKTtpZighdi5faGFzT25seUxhcmdlU3Bsb21zKWZvcihhIGluIHYuX3Bsb3RzKXtzPXYuX3Bsb3RzW2FdLGQ9cy54YXhpcyxnPXMueWF4aXM7dmFyIFgsWixKPXMuY2xpcElkPSJjbGlwIit2Ll91aWQrYSsicGxvdCIsSz1vLmVuc3VyZVNpbmdsZUJ5SWQodi5fY2xpcHMsImNsaXBQYXRoIixKLGZ1bmN0aW9uKHQpe3QuY2xhc3NlZCgicGxvdGNsaXAiLCEwKS5hcHBlbmQoInJlY3QiKX0pO3MuY2xpcFJlY3Q9Sy5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDpkLl9sZW5ndGgsaGVpZ2h0OmcuX2xlbmd0aH0pLGMuc2V0VHJhbnNsYXRlKHMucGxvdCxkLl9vZmZzZXQsZy5fb2Zmc2V0KSxzLl9oYXNDbGlwT25BeGlzRmFsc2U/KFg9bnVsbCxaPUopOihYPUosWj1udWxsKSxjLnNldENsaXBVcmwocy5wbG90LFgsdCkscy5sYXllckNsaXBJZD1afWZ1bmN0aW9uIFEodCl7cmV0dXJuIk0iK0krIiwiK3QrIkgiK0R9ZnVuY3Rpb24gJCh0KXtyZXR1cm4iTSIrZC5fb2Zmc2V0KyIsIit0KyJoIitkLl9sZW5ndGh9ZnVuY3Rpb24gdHQodCl7cmV0dXJuIk0iK3QrIiwiK1YrIlYiK2p9ZnVuY3Rpb24gZXQodCl7cmV0dXJuIk0iK3QrIiwiK2cuX29mZnNldCsidiIrZy5fbGVuZ3RofWZ1bmN0aW9uIHJ0KHQsZSxyKXtpZighdC5zaG93bGluZXx8YSE9PXQuX21haW5TdWJwbG90KXJldHVybiIiO2lmKCF0Ll9hbmNob3JBeGlzKXJldHVybiByKHQuX21haW5MaW5lUG9zaXRpb24pO3ZhciBuPWUodC5fbWFpbkxpbmVQb3NpdGlvbik7cmV0dXJuIHQubWlycm9yJiYobis9ZSh0Ll9tYWluTWlycm9yUG9zaXRpb24pKSxufWZvcihhIGluIHYuX3Bsb3RzKXtzPXYuX3Bsb3RzW2FdLGQ9cy54YXhpcyxnPXMueWF4aXM7dmFyIG50PSJNMCwwIjtrKGQsYSkmJihCPU0oZCwibGVmdCIsZyx4KSxJPWQuX29mZnNldC0oQj95K0I6MCksTj1NKGQsInJpZ2h0IixnLHgpLEQ9ZC5fb2Zmc2V0K2QuX2xlbmd0aCsoTj95K046MCksUj1iKGQsZywiYm90dG9tIiksRj1iKGQsZywidG9wIiksIShZPSFkLl9hbmNob3JBeGlzfHxhIT09ZC5fbWFpblN1YnBsb3QpfHwiYWxsdGlja3MiIT09ZC5taXJyb3ImJiJhbGwiIT09ZC5taXJyb3J8fChkLl9saW5lcG9zaXRpb25zW2FdPVtSLEZdKSxudD1ydChkLFEsJCksWSYmZC5zaG93bGluZSYmKCJhbGwiPT09ZC5taXJyb3J8fCJhbGx0aWNrcyI9PT1kLm1pcnJvcikmJihudCs9UShSKStRKEYpKSxzLnhsaW5lcy5zdHlsZSgic3Ryb2tlLXdpZHRoIixkLl9sdysicHgiKS5jYWxsKGwuc3Ryb2tlLGQuc2hvd2xpbmU/ZC5saW5lY29sb3I6InJnYmEoMCwwLDAsMCkiKSkscy54bGluZXMuYXR0cigiZCIsbnQpO3ZhciBhdD0iTTAsMCI7ayhnLGEpJiYoSD1NKGcsImJvdHRvbSIsZCx4KSxqPWcuX29mZnNldCtnLl9sZW5ndGgrKEg/eTowKSxHPU0oZywidG9wIixkLHgpLFY9Zy5fb2Zmc2V0LShHP3k6MCksVT1iKGcsZCwibGVmdCIpLHE9YihnLGQsInJpZ2h0IiksIShZPSFnLl9hbmNob3JBeGlzfHxhIT09Zy5fbWFpblN1YnBsb3QpfHwiYWxsdGlja3MiIT09Zy5taXJyb3ImJiJhbGwiIT09Zy5taXJyb3J8fChnLl9saW5lcG9zaXRpb25zW2FdPVtVLHFdKSxhdD1ydChnLHR0LGV0KSxZJiZnLnNob3dsaW5lJiYoImFsbCI9PT1nLm1pcnJvcnx8ImFsbHRpY2tzIj09PWcubWlycm9yKSYmKGF0Kz10dChVKSt0dChxKSkscy55bGluZXMuc3R5bGUoInN0cm9rZS13aWR0aCIsZy5fbHcrInB4IikuY2FsbChsLnN0cm9rZSxnLnNob3dsaW5lP2cubGluZWNvbG9yOiJyZ2JhKDAsMCwwLDApIikpLHMueWxpbmVzLmF0dHIoImQiLGF0KX1yZXR1cm4gZi5tYWtlQ2xpcFBhdGhzKHQpLGkucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuKHQudGlja3N8fHQuc2hvd2xpbmUpJiYoZT09PXQuX21haW5TdWJwbG90fHwiYWxsIj09PXQubWlycm9yfHwiYWxsdGlja3MiPT09dC5taXJyb3IpfWZ1bmN0aW9uIFQodCxlLHIpe2lmKCFyLnNob3dsaW5lfHwhci5fbHcpcmV0dXJuITE7aWYoImFsbCI9PT1yLm1pcnJvcnx8ImFsbHRpY2tzIj09PXIubWlycm9yKXJldHVybiEwO3ZhciBuPXIuX2FuY2hvckF4aXM7aWYoIW4pcmV0dXJuITE7dmFyIGE9cC5GUk9NX0JMW2VdO3JldHVybiByLnNpZGU9PT1lP24uZG9tYWluW2FdPT09dC5kb21haW5bYV06ci5taXJyb3ImJm4uZG9tYWluWzEtYV09PT10LmRvbWFpblsxLWFdfWZ1bmN0aW9uIE0odCxlLHIsbil7aWYoVCh0LGUscikpcmV0dXJuIHIuX2x3O2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgaT1uW2FdO2lmKGkuX21haW5BeGlzPT09ci5fbWFpbkF4aXMmJlQodCxlLGkpKXJldHVybiBpLl9sd31yZXR1cm4gMH1mdW5jdGlvbiBBKHQsZSl7dmFyIHI9dC50aXRsZSxuPXQuX3NpemUsYT0wO3N3aXRjaChlPT09eT9hPXIucGFkLmw6ZT09PWImJihhPS1yLnBhZC5yKSxyLnhyZWYpe2Nhc2UicGFwZXIiOnJldHVybiBuLmwrbi53KnIueCthO2Nhc2UiY29udGFpbmVyIjpkZWZhdWx0OnJldHVybiB0LndpZHRoKnIueCthfX1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9dC50aXRsZSxuPXQuX3NpemUsYT0wO2lmKCIwZW0iIT09ZSYmZT9lPT09cC5DQVBfU0hJRlQrImVtIiYmKGE9ci5wYWQudCk6YT0tci5wYWQuYiwiYXV0byI9PT1yLnkpcmV0dXJuIG4udC8yO3N3aXRjaChyLnlyZWYpe2Nhc2UicGFwZXIiOnJldHVybiBuLnQrbi5oLW4uaCpyLnkrYTtjYXNlImNvbnRhaW5lciI6ZGVmYXVsdDpyZXR1cm4gdC5oZWlnaHQtdC5oZWlnaHQqci55K2F9fXIubGF5b3V0U3R5bGVzPWZ1bmN0aW9uKHQpe3JldHVybiBvLnN5bmNPckFzeW5jKFtpLmRvQXV0b01hcmdpbix3XSx0KX0sci5kcmF3TWFpblRpdGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9eDtvLmlzUmlnaHRBbmNob3IoZSk/cj1iOm8uaXNMZWZ0QW5jaG9yKGUpJiYocj15KTtyZXR1cm4gcn0oZSksbj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9IjBlbSI7by5pc1RvcEFuY2hvcihlKT9yPXAuQ0FQX1NISUZUKyJlbSI6by5pc01pZGRsZUFuY2hvcihlKSYmKHI9cC5NSURfU0hJRlQrImVtIik7cmV0dXJuIHJ9KGUpO3UuZHJhdyh0LCJndGl0bGUiLHtwcm9wQ29udGFpbmVyOmUscHJvcE5hbWU6InRpdGxlLnRleHQiLHBsYWNlaG9sZGVyOmUuX2RmbHRUaXRsZS5wbG90LGF0dHJpYnV0ZXM6e3g6QShlLHIpLHk6UyhlLG4pLCJ0ZXh0LWFuY2hvciI6cixkeTpufX0pfSxyLmRvVHJhY2VTdHlsZT1mdW5jdGlvbih0KXt2YXIgZSxuPXQuY2FsY2RhdGEsbz1bXTtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKXt2YXIgbD1uW2VdLGM9bFswXXx8e30sdT1jLnRyYWNlfHx7fSxoPXUuX21vZHVsZXx8e30sZj1oLmFycmF5c1RvQ2FsY2RhdGE7ZiYmZihsLHUpO3ZhciBwPWguZWRpdFN0eWxlO3AmJm8ucHVzaCh7Zm46cCxjZDA6Y30pfWlmKG8ubGVuZ3RoKXtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKXt2YXIgZD1vW2VdO2QuZm4odCxkLmNkMCl9cyh0KSxyLnJlZHJhd1JlZ2xUcmFjZXModCl9cmV0dXJuIGkuc3R5bGUodCksYS5nZXRDb21wb25lbnRNZXRob2QoImxlZ2VuZCIsImRyYXciKSh0KSxpLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9Db2xvckJhcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKSh0KSxpLnByZXZpb3VzUHJvbWlzZXModCl9LHIubGF5b3V0UmVwbG90PWZ1bmN0aW9uKHQpe3ZhciBlPXQubGF5b3V0O3JldHVybiB0LmxheW91dD12b2lkIDAsYS5jYWxsKCJwbG90Iix0LCIiLGUpfSxyLmRvTGVnZW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGkucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb1RpY2tzUmVsYXlvdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGYuZHJhdyh0LCJyZWRyYXciKSx0Ll9mdWxsTGF5b3V0Ll9oYXNPbmx5TGFyZ2VTcGxvbXMmJihhLnN1YnBsb3RzUmVnaXN0cnkuc3Bsb20udXBkYXRlR3JpZCh0KSxzKHQpLHIucmVkcmF3UmVnbFRyYWNlcyh0KSksci5kcmF3TWFpblRpdGxlKHQpLGkucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb01vZGVCYXI9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtoLm1hbmFnZSh0KTtmb3IodmFyIHI9MDtyPGUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg7cisrKXt2YXIgbj1lLl9iYXNlUGxvdE1vZHVsZXNbcl0udXBkYXRlRng7biYmbih0KX1yZXR1cm4gaS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvQ2FtZXJhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wzZCxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBhPWVbcltuXV07YS5fc2NlbmUuc2V0Vmlld3BvcnQoYSl9fSxyLmRyYXdEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7cyh0KTtmb3IodmFyIG49ZS5fYmFzZVBsb3RNb2R1bGVzLG89MDtvPG4ubGVuZ3RoO28rKyluW29dLnBsb3QodCk7cmV0dXJuIHIucmVkcmF3UmVnbFRyYWNlcyh0KSxpLnN0eWxlKHQpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJkcmF3IikodCksYS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJkcmF3IikodCksZS5fcmVwbG90dGluZz0hMSxpLnByZXZpb3VzUHJvbWlzZXModCl9LHIucmVkcmF3UmVnbFRyYWNlcz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2lmKGUuX2hhcygicmVnbCIpKXt2YXIgcixuLGE9dC5fZnVsbERhdGEsaT1bXSxzPVtdO2ZvcihlLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJmUuX3NwbG9tR3JpZC5kcmF3KCkscj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgbD1hW3JdOyEwPT09bC52aXNpYmxlJiYwIT09bC5fbGVuZ3RoJiYoInNwbG9tIj09PWwudHlwZT9lLl9zcGxvbVNjZW5lc1tsLnVpZF0uZHJhdygpOiJzY2F0dGVyZ2wiPT09bC50eXBlP28ucHVzaFVuaXF1ZShpLGwueGF4aXMrbC55YXhpcyk6InNjYXR0ZXJwb2xhcmdsIj09PWwudHlwZSYmby5wdXNoVW5pcXVlKHMsbC5zdWJwbG90KSl9Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKykobj1lLl9wbG90c1tpW3JdXSkuX3NjZW5lJiZuLl9zY2VuZS5kcmF3KCk7Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKykobj1lW3Nbcl1dLl9zdWJwbG90KS5fc2NlbmUmJm4uX3NjZW5lLmRyYXcoKX19LHIuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuPXQuX2Z1bGxMYXlvdXQsYT1mLmxpc3QodCwiIiwhMCksaT1uLl9heGlzTWF0Y2hHcm91cHN8fFtdLHM9e30sbD0wO2w8YS5sZW5ndGg7bCsrKWU9YVtsXSx2KHQsZSksbSh0LGUpLHNbZS5faWRdPTE7Zyh0KTt0OmZvcih2YXIgYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgdSxoPWlbY10scD1udWxsO2Zvcih1IGluIGgpaWYoc1soZT1mLmdldEZyb21JZCh0LHUpKS5faWRdKXtpZighMT09PWUuYXV0b3JhbmdlKWNvbnRpbnVlIHQ7cj1vLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKSxwP3BbMF08cFsxXT8ocFswXT1NYXRoLm1pbihwWzBdLHJbMF0pLHBbMV09TWF0aC5tYXgocFsxXSxyWzFdKSk6KHBbMF09TWF0aC5tYXgocFswXSxyWzBdKSxwWzFdPU1hdGgubWluKHBbMV0sclsxXSkpOnA9cn1mb3IodSBpbiBoKShlPWYuZ2V0RnJvbUlkKHQsdSkpLnJhbmdlPW8uc2ltcGxlTWFwKHAsZS5sMnIpLGUuX2lucHV0LnJhbmdlPWUucmFuZ2Uuc2xpY2UoKSxlLnNldFNjYWxlKCl9fSxyLmZpbmFsRHJhdz1mdW5jdGlvbih0KXthLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJkcmF3IikodCksYS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2VsZWN0b3IiLCJkcmF3IikodCl9LHIuZHJhd01hcmdpblB1c2hlcnM9ZnVuY3Rpb24odCl7YS5nZXRDb21wb25lbnRNZXRob2QoImxlZ2VuZCIsImRyYXciKSh0KSxhLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzZWxlY3RvciIsImRyYXciKSh0KSxhLmdldENvbXBvbmVudE1ldGhvZCgic2xpZGVycyIsImRyYXciKSh0KSxhLmdldENvbXBvbmVudE1ldGhvZCgidXBkYXRlbWVudXMiLCJkcmF3IikodCksYS5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yYmFyIiwiZHJhdyIpKHQpfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi9jb21wb25lbnRzL21vZGViYXIiOjY1MCwiLi4vY29tcG9uZW50cy90aXRsZXMiOjY3OSwiLi4vY29uc3RhbnRzL2FsaWdubWVudCI6Njg2LCIuLi9saWIiOjcxNywiLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIjo3MDIsIi4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjc2NCwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo3NzIsIi4uL3Bsb3RzL3Bsb3RzIjo4MjYsIi4uL3JlZ2lzdHJ5Ijo4NDYsZDM6MTY1fV0sNzU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGE9bi5pc1BsYWluT2JqZWN0LGk9dCgiLi9wbG90X3NjaGVtYSIpLG89dCgiLi4vcGxvdHMvcGxvdHMiKSxzPXQoIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPXQoIi4vcGxvdF90ZW1wbGF0ZSIpLGM9dCgiLi9wbG90X2NvbmZpZyIpLmRmbHRDb25maWc7ZnVuY3Rpb24gdSh0LGUpe3Q9bi5leHRlbmREZWVwKHt9LHQpO3ZhciByLGksbz1PYmplY3Qua2V5cyh0KS5zb3J0KCk7ZnVuY3Rpb24gcyhlLHIsbil7aWYoYShyKSYmYShlKSl1KGUscik7ZWxzZSBpZihBcnJheS5pc0FycmF5KHIpJiZBcnJheS5pc0FycmF5KGUpKXt2YXIgbz1sLmFycmF5VGVtcGxhdGVyKHtfdGVtcGxhdGU6dH0sbik7Zm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9cltpXSxjPW8ubmV3SXRlbShzKS5fdGVtcGxhdGU7YyYmdShjLHMpfXZhciBoPW8uZGVmYXVsdEl0ZW1zKCk7Zm9yKGk9MDtpPGgubGVuZ3RoO2krKylyLnB1c2goaFtpXS5fdGVtcGxhdGUpO2ZvcihpPTA7aTxyLmxlbmd0aDtpKyspZGVsZXRlIHJbaV0udGVtcGxhdGVpdGVtbmFtZX19Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyl7dmFyIGM9b1tyXSxmPXRbY107aWYoYyBpbiBlP3MoZixlW2NdLGMpOmVbY109ZixoKGMpPT09Yylmb3IodmFyIHAgaW4gZSl7dmFyIGQ9aChwKTtwPT09ZHx8ZCE9PWN8fHAgaW4gdHx8cyhmLGVbcF0sYyl9fX1mdW5jdGlvbiBoKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldKyQvLCIiKX1mdW5jdGlvbiBmKHQsZSxyLGksbyl7dmFyIHM9byYmcihvKTtmb3IodmFyIGMgaW4gdCl7dmFyIHU9dFtjXSxkPXAodCxjLGkpLGc9cCh0LGMsbyksdj1yKGcpO2lmKCF2KXt2YXIgbT1oKGMpO20hPT1jJiYodj1yKGc9cCh0LG0sbykpKX1pZigoIXN8fHMhPT12KSYmISghdnx8di5fbm9UZW1wbGF0aW5nfHwiZGF0YV9hcnJheSI9PT12LnZhbFR5cGV8fHYuYXJyYXlPayYmQXJyYXkuaXNBcnJheSh1KSkpaWYoIXYudmFsVHlwZSYmYSh1KSlmKHUsZSxyLGQsZyk7ZWxzZSBpZih2Ll9pc0xpbmtlZFRvQXJyYXkmJkFycmF5LmlzQXJyYXkodSkpZm9yKHZhciB5PSExLHg9MCxiPXt9LF89MDtfPHUubGVuZ3RoO18rKyl7dmFyIHc9dVtfXTtpZihhKHcpKXt2YXIgaz13Lm5hbWU7aWYoayliW2tdfHwoZih3LGUscixwKHUseCxkKSxwKHUseCxnKSkseCsrLGJba109MSk7ZWxzZSBpZigheSl7dmFyIFQ9cCh0LGwuYXJyYXlEZWZhdWx0S2V5KGMpLGkpLE09cCh1LHgsZCk7Zih3LGUscixNLHAodSx4LGcpKTt2YXIgQT1uLm5lc3RlZFByb3BlcnR5KGUsTSk7bi5uZXN0ZWRQcm9wZXJ0eShlLFQpLnNldChBLmdldCgpKSxBLnNldChudWxsKSx5PSEwfX19ZWxzZXtuLm5lc3RlZFByb3BlcnR5KGUsZCkuc2V0KHUpfX19ZnVuY3Rpb24gcCh0LGUscil7cmV0dXJuIHI/QXJyYXkuaXNBcnJheSh0KT9yKyJbIitlKyJdIjpyKyIuIitlOmV9ZnVuY3Rpb24gZCh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZihhKHRbZV0pKXJldHVybiEwfWZ1bmN0aW9uIGcodCl7dmFyIGU7c3dpdGNoKHQuY29kZSl7Y2FzZSJkYXRhIjplPSJUaGUgdGVtcGxhdGUgaGFzIG5vIGtleSBkYXRhLiI7YnJlYWs7Y2FzZSJsYXlvdXQiOmU9IlRoZSB0ZW1wbGF0ZSBoYXMgbm8ga2V5IGxheW91dC4iO2JyZWFrO2Nhc2UibWlzc2luZyI6ZT10LnBhdGg/IlRoZXJlIGFyZSBubyB0ZW1wbGF0ZXMgZm9yIGl0ZW0gIit0LnBhdGgrIiB3aXRoIG5hbWUgIit0LnRlbXBsYXRlaXRlbW5hbWU6IlRoZXJlIGFyZSBubyB0ZW1wbGF0ZXMgZm9yIHRyYWNlICIrdC5pbmRleCsiLCBvZiB0eXBlICIrdC50cmFjZVR5cGUrIi4iO2JyZWFrO2Nhc2UidW51c2VkIjplPXQucGF0aD8iVGhlIHRlbXBsYXRlIGl0ZW0gYXQgIit0LnBhdGgrIiB3YXMgbm90IHVzZWQgaW4gY29uc3RydWN0aW5nIHRoZSBwbG90LiI6dC5kYXRhQ291bnQ/IlNvbWUgb2YgdGhlIHRlbXBsYXRlcyBvZiB0eXBlICIrdC50cmFjZVR5cGUrIiB3ZXJlIG5vdCB1c2VkLiBUaGUgdGVtcGxhdGUgaGFzICIrdC50ZW1wbGF0ZUNvdW50KyIgdHJhY2VzLCB0aGUgZGF0YSBvbmx5IGhhcyAiK3QuZGF0YUNvdW50KyIgb2YgdGhpcyB0eXBlLiI6IlRoZSB0ZW1wbGF0ZSBoYXMgIit0LnRlbXBsYXRlQ291bnQrIiB0cmFjZXMgb2YgdHlwZSAiK3QudHJhY2VUeXBlKyIgYnV0IHRoZXJlIGFyZSBub25lIGluIHRoZSBkYXRhLiI7YnJlYWs7Y2FzZSJyZXVzZWQiOmU9IlNvbWUgb2YgdGhlIHRlbXBsYXRlcyBvZiB0eXBlICIrdC50cmFjZVR5cGUrIiB3ZXJlIHVzZWQgbW9yZSB0aGFuIG9uY2UuIFRoZSB0ZW1wbGF0ZSBoYXMgIit0LnRlbXBsYXRlQ291bnQrIiB0cmFjZXMsIHRoZSBkYXRhIGhhcyAiK3QuZGF0YUNvdW50KyIgb2YgdGhpcyB0eXBlLiJ9cmV0dXJuIHQubXNnPWUsdH1yLm1ha2VUZW1wbGF0ZT1mdW5jdGlvbih0KXt0PW4uaXNQbGFpbk9iamVjdCh0KT90Om4uZ2V0R3JhcGhEaXYodCksdD1uLmV4dGVuZERlZXAoe19jb250ZXh0OmN9LHtkYXRhOnQuZGF0YSxsYXlvdXQ6dC5sYXlvdXR9KSxvLnN1cHBseURlZmF1bHRzKHQpO3ZhciBlPXQuZGF0YXx8W10scj10LmxheW91dHx8e307ci5fYmFzZVBsb3RNb2R1bGVzPXQuX2Z1bGxMYXlvdXQuX2Jhc2VQbG90TW9kdWxlcyxyLl9tb2R1bGVzPXQuX2Z1bGxMYXlvdXQuX21vZHVsZXM7dmFyIGw9e2RhdGE6e30sbGF5b3V0Ont9fTtlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9e307Zih0LGUsZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5nZXRUcmFjZVZhbE9iamVjdCh0LG4ubmVzdGVkUHJvcGVydHkoe30sZSkucGFydHMpfS5iaW5kKG51bGwsdCkpO3ZhciByPW4uY29lcmNlKHQse30scywidHlwZSIpLGE9bC5kYXRhW3JdO2F8fChhPWwuZGF0YVtyXT1bXSksYS5wdXNoKGUpfSksZihyLGwubGF5b3V0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuZ2V0TGF5b3V0VmFsT2JqZWN0KHQsbi5uZXN0ZWRQcm9wZXJ0eSh7fSxlKS5wYXJ0cyl9LmJpbmQobnVsbCxyKSksZGVsZXRlIGwubGF5b3V0LnRlbXBsYXRlO3ZhciBoPXIudGVtcGxhdGU7aWYoYShoKSl7dmFyIHAsZCxnLHYsbSx5LHg9aC5sYXlvdXQ7YSh4KSYmdSh4LGwubGF5b3V0KTt2YXIgYj1oLmRhdGE7aWYoYShiKSl7Zm9yKGQgaW4gbC5kYXRhKWlmKGc9YltkXSxBcnJheS5pc0FycmF5KGcpKXtmb3IoeT0obT1sLmRhdGFbZF0pLmxlbmd0aCx2PWcubGVuZ3RoLHA9MDtwPHk7cCsrKXUoZ1twJXZdLG1bcF0pO2ZvcihwPXk7cDx2O3ArKyltLnB1c2gobi5leHRlbmREZWVwKHt9LGdbcF0pKX1mb3IoZCBpbiBiKWQgaW4gbC5kYXRhfHwobC5kYXRhW2RdPW4uZXh0ZW5kRGVlcChbXSxiW2RdKSl9fXJldHVybiBsfSxyLnZhbGlkYXRlVGVtcGxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmV4dGVuZERlZXAoe30se19jb250ZXh0OmMsZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSksaT1yLmxheW91dHx8e307YShlKXx8KGU9aS50ZW1wbGF0ZXx8e30pO3ZhciBzPWUubGF5b3V0LGw9ZS5kYXRhLHU9W107ci5sYXlvdXQ9aSxyLmxheW91dC50ZW1wbGF0ZT1lLG8uc3VwcGx5RGVmYXVsdHMocik7dmFyIGY9ci5fZnVsbExheW91dCx2PXIuX2Z1bGxEYXRhLG09e307aWYoYShzKT8oIWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigiXyIhPT1uLmNoYXJBdCgwKSYmYShlW25dKSl7dmFyIGksbz1oKG4pLHM9W107Zm9yKGk9MDtpPHIubGVuZ3RoO2krKylzLnB1c2gocChlLG4scltpXSkpLG8hPT1uJiZzLnB1c2gocChlLG8scltpXSkpO2ZvcihpPTA7aTxzLmxlbmd0aDtpKyspbVtzW2ldXT0xO3QoZVtuXSxzKX19KGYsWyJsYXlvdXQiXSksZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgbiBpbiBlKWlmKC0xPT09bi5pbmRleE9mKCJkZWZhdWx0cyIpJiZhKGVbbl0pKXt2YXIgaT1wKGUsbixyKTttW2ldP3QoZVtuXSxpKTp1LnB1c2goe2NvZGU6InVudXNlZCIscGF0aDppfSl9fShzLCJsYXlvdXQiKSk6dS5wdXNoKHtjb2RlOiJsYXlvdXQifSksYShsKSl7Zm9yKHZhciB5LHg9e30sYj0wO2I8di5sZW5ndGg7YisrKXt2YXIgXz12W2JdO3hbeT1fLnR5cGVdPSh4W3ldfHwwKSsxLF8uX2Z1bGxJbnB1dC5fdGVtcGxhdGV8fHUucHVzaCh7Y29kZToibWlzc2luZyIsaW5kZXg6Xy5fZnVsbElucHV0LmluZGV4LHRyYWNlVHlwZTp5fSl9Zm9yKHkgaW4gbCl7dmFyIHc9bFt5XS5sZW5ndGgsaz14W3ldfHwwO3c+az91LnB1c2goe2NvZGU6InVudXNlZCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDprfSk6az53JiZ1LnB1c2goe2NvZGU6InJldXNlZCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDprfSl9fWVsc2UgdS5wdXNoKHtjb2RlOiJkYXRhIn0pO2lmKGZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigiXyIhPT1uLmNoYXJBdCgwKSl7dmFyIGk9ZVtuXSxvPXAoZSxuLHIpO2EoaSk/KEFycmF5LmlzQXJyYXkoZSkmJiExPT09aS5fdGVtcGxhdGUmJmkudGVtcGxhdGVpdGVtbmFtZSYmdS5wdXNoKHtjb2RlOiJtaXNzaW5nIixwYXRoOm8sdGVtcGxhdGVpdGVtbmFtZTppLnRlbXBsYXRlaXRlbW5hbWV9KSx0KGksbykpOkFycmF5LmlzQXJyYXkoaSkmJmQoaSkmJnQoaSxvKX19KHtkYXRhOnYsbGF5b3V0OmZ9LCIiKSx1Lmxlbmd0aClyZXR1cm4gdS5tYXAoZyl9fSx7Ii4uL2xpYiI6NzE3LCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4uL3Bsb3RzL3Bsb3RzIjo4MjYsIi4vcGxvdF9jb25maWciOjc1MywiLi9wbG90X3NjaGVtYSI6NzU0LCIuL3Bsb3RfdGVtcGxhdGUiOjc1NX1dLDc1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi9wbG90X2FwaSIpLGk9dCgiLi4vbGliIiksbz10KCIuLi9zbmFwc2hvdC9oZWxwZXJzIikscz10KCIuLi9zbmFwc2hvdC90b3N2ZyIpLGw9dCgiLi4vc25hcHNob3Qvc3ZndG9pbWciKSxjPXtmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBuZyIsImpwZWciLCJ3ZWJwIiwic3ZnIl0sZGZsdDoicG5nIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjF9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6ITF9LGltYWdlRGF0YU9ubHk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGgsZjtmdW5jdGlvbiBwKHQpe3JldHVybiEodCBpbiBlKXx8aS52YWxpZGF0ZShlW3RdLGNbdF0pfWlmKGU9ZXx8e30saS5pc1BsYWluT2JqZWN0KHQpPyhyPXQuZGF0YXx8W10sdT10LmxheW91dHx8e30saD10LmNvbmZpZ3x8e30sZj17fSk6KHQ9aS5nZXRHcmFwaERpdih0KSxyPWkuZXh0ZW5kRGVlcChbXSx0LmRhdGEpLHU9aS5leHRlbmREZWVwKHt9LHQubGF5b3V0KSxoPXQuX2NvbnRleHQsZj10Ll9mdWxsTGF5b3V0fHx7fSksIXAoIndpZHRoIikmJm51bGwhPT1lLndpZHRofHwhcCgiaGVpZ2h0IikmJm51bGwhPT1lLmhlaWdodCl0aHJvdyBuZXcgRXJyb3IoIkhlaWdodCBhbmQgd2lkdGggc2hvdWxkIGJlIHBpeGVsIHZhbHVlcy4iKTtpZighcCgiZm9ybWF0IikpdGhyb3cgbmV3IEVycm9yKCJJbWFnZSBmb3JtYXQgaXMgbm90IGpwZWcsIHBuZywgc3ZnIG9yIHdlYnAuIik7dmFyIGQ9e307ZnVuY3Rpb24gZyh0LHIpe3JldHVybiBpLmNvZXJjZShlLGQsYyx0LHIpfXZhciB2PWcoImZvcm1hdCIpLG09Zygid2lkdGgiKSx5PWcoImhlaWdodCIpLHg9Zygic2NhbGUiKSxiPWcoInNldEJhY2tncm91bmQiKSxfPWcoImltYWdlRGF0YU9ubHkiKSx3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3cuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix3LnN0eWxlLmxlZnQ9Ii01MDAwcHgiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodyk7dmFyIGs9aS5leHRlbmRGbGF0KHt9LHUpO20/ay53aWR0aD1tOm51bGw9PT1lLndpZHRoJiZuKGYud2lkdGgpJiYoay53aWR0aD1mLndpZHRoKSx5P2suaGVpZ2h0PXk6bnVsbD09PWUuaGVpZ2h0JiZuKGYuaGVpZ2h0KSYmKGsuaGVpZ2h0PWYuaGVpZ2h0KTt2YXIgVD1pLmV4dGVuZEZsYXQoe30saCx7X2V4cG9ydGVkUGxvdDohMCxzdGF0aWNQbG90OiEwLHNldEJhY2tncm91bmQ6Yn0pLE09by5nZXRSZWRyYXdGdW5jKHcpO2Z1bmN0aW9uIEEoKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LG8uZ2V0RGVsYXkody5fZnVsbExheW91dCkpfSl9ZnVuY3Rpb24gUygpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe3ZhciByPXModyx2LHgpLG49dy5fZnVsbExheW91dC53aWR0aCxjPXcuX2Z1bGxMYXlvdXQuaGVpZ2h0O2lmKGEucHVyZ2UodyksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh3KSwic3ZnIj09PXYpcmV0dXJuIHQoXz9yOm8uZW5jb2RlU1ZHKHIpKTt2YXIgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTt1LmlkPWkucmFuZHN0cigpLGwoe2Zvcm1hdDp2LHdpZHRoOm4saGVpZ2h0OmMsc2NhbGU6eCxjYW52YXM6dSxzdmc6cixwcm9taXNlOiEwfSkudGhlbih0KS5jYXRjaChlKX0pfXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe2EucGxvdCh3LHIsayxUKS50aGVuKE0pLnRoZW4oQSkudGhlbihTKS50aGVuKGZ1bmN0aW9uKGUpe3QoZnVuY3Rpb24odCl7cmV0dXJuIF8/dC5yZXBsYWNlKG8uSU1BR0VfVVJMX1BSRUZJWCwiIik6dH0oZSkpfSkuY2F0Y2goZnVuY3Rpb24odCl7ZSh0KX0pfSl9fSx7Ii4uL2xpYiI6NzE3LCIuLi9zbmFwc2hvdC9oZWxwZXJzIjo4NTAsIi4uL3NuYXBzaG90L3N2Z3RvaW1nIjo4NTIsIi4uL3NuYXBzaG90L3Rvc3ZnIjo4NTQsIi4vcGxvdF9hcGkiOjc1MiwiZmFzdC1pc251bWVyaWMiOjIyOH1dLDc1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxhPXQoIi4uL3Bsb3RzL3Bsb3RzIiksaT10KCIuL3Bsb3Rfc2NoZW1hIiksbz10KCIuL3Bsb3RfY29uZmlnIikuZGZsdENvbmZpZyxzPW4uaXNQbGFpbk9iamVjdCxsPUFycmF5LmlzQXJyYXksYz1uLmlzQXJyYXlPclR5cGVkQXJyYXk7ZnVuY3Rpb24gdSh0LGUscixhLGksbyl7bz1vfHxbXTtmb3IodmFyIGg9T2JqZWN0LmtleXModCksZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgdj1oW2ZdO2lmKCJ0cmFuc2Zvcm1zIiE9PXYpe3ZhciBtPW8uc2xpY2UoKTttLnB1c2godik7dmFyIHk9dFt2XSx4PWVbdl0sYj1nKHIsdiksXz0oYnx8e30pLnZhbFR5cGUsdz0iaW5mb19hcnJheSI9PT1fLGs9ImNvbG9yc2NhbGUiPT09XyxUPShifHx7fSkuaXRlbXM7aWYoZChyLHYpKWlmKHMoeSkmJnMoeCkmJiJhbnkiIT09Xyl1KHkseCxiLGEsaSxtKTtlbHNlIGlmKHcmJmwoeSkpe3kubGVuZ3RoPngubGVuZ3RoJiZhLnB1c2gocCgidW51c2VkIixpLG0uY29uY2F0KHgubGVuZ3RoKSkpO3ZhciBNLEEsUyxFLEwsQz14Lmxlbmd0aCxQPUFycmF5LmlzQXJyYXkoVCk7aWYoUCYmKEM9TWF0aC5taW4oQyxULmxlbmd0aCkpLDI9PT1iLmRpbWVuc2lvbnMpZm9yKEE9MDtBPEM7QSsrKWlmKGwoeVtBXSkpe3lbQV0ubGVuZ3RoPnhbQV0ubGVuZ3RoJiZhLnB1c2gocCgidW51c2VkIixpLG0uY29uY2F0KEEseFtBXS5sZW5ndGgpKSk7dmFyIE89eFtBXS5sZW5ndGg7Zm9yKE09MDtNPChQP01hdGgubWluKE8sVFtBXS5sZW5ndGgpOk8pO00rKylTPVA/VFtBXVtNXTpULEU9eVtBXVtNXSxMPXhbQV1bTV0sbi52YWxpZGF0ZShFLFMpP0whPT1FJiZMIT09K0UmJmEucHVzaChwKCJkeW5hbWljIixpLG0uY29uY2F0KEEsTSksRSxMKSk6YS5wdXNoKHAoInZhbHVlIixpLG0uY29uY2F0KEEsTSksRSkpfWVsc2UgYS5wdXNoKHAoImFycmF5IixpLG0uY29uY2F0KEEpLHlbQV0pKTtlbHNlIGZvcihBPTA7QTxDO0ErKylTPVA/VFtBXTpULEU9eVtBXSxMPXhbQV0sbi52YWxpZGF0ZShFLFMpP0whPT1FJiZMIT09K0UmJmEucHVzaChwKCJkeW5hbWljIixpLG0uY29uY2F0KEEpLEUsTCkpOmEucHVzaChwKCJ2YWx1ZSIsaSxtLmNvbmNhdChBKSxFKSl9ZWxzZSBpZihiLml0ZW1zJiYhdyYmbCh5KSl7dmFyIHosSSxEPVRbT2JqZWN0LmtleXMoVClbMF1dLFI9W107Zm9yKHo9MDt6PHgubGVuZ3RoO3orKyl7dmFyIEY9eFt6XS5faW5kZXh8fHo7aWYoKEk9bS5zbGljZSgpKS5wdXNoKEYpLHMoeVtGXSkmJnMoeFt6XSkpe1IucHVzaChGKTt2YXIgQj15W0ZdLE49eFt6XTtzKEIpJiYhMSE9PUIudmlzaWJsZSYmITE9PT1OLnZpc2libGU/YS5wdXNoKHAoImludmlzaWJsZSIsaSxJKSk6dShCLE4sRCxhLGksSSl9fWZvcih6PTA7ejx5Lmxlbmd0aDt6KyspKEk9bS5zbGljZSgpKS5wdXNoKHopLHMoeVt6XSk/LTE9PT1SLmluZGV4T2YoeikmJmEucHVzaChwKCJ1bnVzZWQiLGksSSkpOmEucHVzaChwKCJvYmplY3QiLGksSSx5W3pdKSl9ZWxzZSFzKHkpJiZzKHgpP2EucHVzaChwKCJvYmplY3QiLGksbSx5KSk6Yyh5KXx8IWMoeCl8fHd8fGs/diBpbiBlP24udmFsaWRhdGUoeSxiKT8iZW51bWVyYXRlZCI9PT1iLnZhbFR5cGUmJihiLmNvZXJjZU51bWJlciYmeSE9PSt4fHx5IT09eCkmJmEucHVzaChwKCJkeW5hbWljIixpLG0seSx4KSk6YS5wdXNoKHAoInZhbHVlIixpLG0seSkpOmEucHVzaChwKCJ1bnVzZWQiLGksbSx5KSk6YS5wdXNoKHAoImFycmF5IixpLG0seSkpO2Vsc2UgYS5wdXNoKHAoInNjaGVtYSIsaSxtKSl9fXJldHVybiBhfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsaD1pLmdldCgpLGY9W10sZD17X2NvbnRleHQ6bi5leHRlbmRGbGF0KHt9LG8pfTtsKHQpPyhkLmRhdGE9bi5leHRlbmREZWVwKFtdLHQpLHI9dCk6KGQuZGF0YT1bXSxyPVtdLGYucHVzaChwKCJhcnJheSIsImRhdGEiKSkpLHMoZSk/KGQubGF5b3V0PW4uZXh0ZW5kRGVlcCh7fSxlKSxjPWUpOihkLmxheW91dD17fSxjPXt9LGFyZ3VtZW50cy5sZW5ndGg+MSYmZi5wdXNoKHAoIm9iamVjdCIsImxheW91dCIpKSksYS5zdXBwbHlEZWZhdWx0cyhkKTtmb3IodmFyIGc9ZC5fZnVsbERhdGEsdj1yLmxlbmd0aCxtPTA7bTx2O20rKyl7dmFyIHk9clttXSx4PVsiZGF0YSIsbV07aWYocyh5KSl7dmFyIGI9Z1ttXSxfPWIudHlwZSx3PWgudHJhY2VzW19dLmF0dHJpYnV0ZXM7dy50eXBlPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W19dfSwhMT09PWIudmlzaWJsZSYmITEhPT15LnZpc2libGUmJmYucHVzaChwKCJpbnZpc2libGUiLHgpKSx1KHksYix3LGYseCk7dmFyIGs9eS50cmFuc2Zvcm1zLFQ9Yi50cmFuc2Zvcm1zO2lmKGspe2woayl8fGYucHVzaChwKCJhcnJheSIseCxbInRyYW5zZm9ybXMiXSkpLHgucHVzaCgidHJhbnNmb3JtcyIpO2Zvcih2YXIgTT0wO008ay5sZW5ndGg7TSsrKXt2YXIgQT1bInRyYW5zZm9ybXMiLE1dLFM9a1tNXS50eXBlO2lmKHMoa1tNXSkpe3ZhciBFPWgudHJhbnNmb3Jtc1tTXT9oLnRyYW5zZm9ybXNbU10uYXR0cmlidXRlczp7fTtFLnR5cGU9e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhoLnRyYW5zZm9ybXMpfSx1KGtbTV0sVFtNXSxFLGYseCxBKX1lbHNlIGYucHVzaChwKCJvYmplY3QiLHgsQSkpfX19ZWxzZSBmLnB1c2gocCgib2JqZWN0Iix4KSl9cmV0dXJuIHUoYyxkLl9mdWxsTGF5b3V0LGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGF5b3V0LmxheW91dEF0dHJpYnV0ZXMsYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgaT1lW2FdLG89dC50cmFjZXNbaS50eXBlXSxzPW8ubGF5b3V0QXR0cmlidXRlcztzJiYoaS5zdWJwbG90P24uZXh0ZW5kRmxhdChyW28uYXR0cmlidXRlcy5zdWJwbG90LmRmbHRdLHMpOm4uZXh0ZW5kRmxhdChyLHMpKX1yZXR1cm4gcn0oaCxnKSxmLCJsYXlvdXQiKSwwPT09Zi5sZW5ndGg/dm9pZCAwOmZ9O3ZhciBoPXtvYmplY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4oImxheW91dCI9PT10JiYiIj09PWU/IlRoZSBsYXlvdXQgYXJndW1lbnQiOiJkYXRhIj09PXRbMF0mJiIiPT09ZT8iVHJhY2UgIit0WzFdKyIgaW4gdGhlIGRhdGEgYXJndW1lbnQiOmYodCkrImtleSAiK2UpKyIgbXVzdCBiZSBsaW5rZWQgdG8gYW4gb2JqZWN0IGNvbnRhaW5lciJ9LGFycmF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKCJkYXRhIj09PXQ/IlRoZSBkYXRhIGFyZ3VtZW50IjpmKHQpKyJrZXkgIitlKSsiIG11c3QgYmUgbGlua2VkIHRvIGFuIGFycmF5IGNvbnRhaW5lciJ9LHNjaGVtYTpmdW5jdGlvbih0LGUpe3JldHVybiBmKHQpKyJrZXkgIitlKyIgaXMgbm90IHBhcnQgb2YgdGhlIHNjaGVtYSJ9LHVudXNlZDpmdW5jdGlvbih0LGUscil7dmFyIG49cyhyKT8iY29udGFpbmVyIjoia2V5IjtyZXR1cm4gZih0KStuKyIgIitlKyIgZGlkIG5vdCBnZXQgY29lcmNlZCJ9LGR5bmFtaWM6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuW2YodCkrImtleSIsZSwiKHNldCB0byAnIityKyInKSIsImdvdCByZXNldCB0byIsIiciK24rIiciLCJkdXJpbmcgZGVmYXVsdHMuIl0uam9pbigiICIpfSxpbnZpc2libGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT9mKHQpKyJpdGVtICIrZToiVHJhY2UgIit0WzFdKSsiIGdvdCBkZWZhdWx0ZWQgdG8gYmUgbm90IHZpc2libGUifSx2YWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuW2YodCkrImtleSAiK2UsImlzIHNldCB0byBhbiBpbnZhbGlkIHZhbHVlICgiK3IrIikiXS5qb2luKCIgIil9fTtmdW5jdGlvbiBmKHQpe3JldHVybiBsKHQpPyJJbiBkYXRhIHRyYWNlICIrdFsxXSsiLCAiOiJJbiAiK3QrIiwgIn1mdW5jdGlvbiBwKHQsZSxyLGEsaSl7dmFyIG8scztyPXJ8fCIiLGwoZSk/KG89ZVswXSxzPWVbMV0pOihvPWUscz1udWxsKTt2YXIgYz1mdW5jdGlvbih0KXtpZighbCh0KSlyZXR1cm4gU3RyaW5nKHQpO2Zvcih2YXIgZT0iIixyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07Im51bWJlciI9PXR5cGVvZiBuP2U9ZS5zdWJzdHIoMCxlLmxlbmd0aC0xKSsiWyIrbisiXSI6ZSs9bixyPHQubGVuZ3RoLTEmJihlKz0iLiIpfXJldHVybiBlfShyKSx1PWhbdF0oZSxjLGEsaSk7cmV0dXJuIG4ubG9nKHUpLHtjb2RlOnQsY29udGFpbmVyOm8sdHJhY2U6cyxwYXRoOnIsYXN0cjpjLG1zZzp1fX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9bShlKSxuPXIua2V5TWludXNJZCxhPXIuaWQ7cmV0dXJuISEobiBpbiB0JiZ0W25dLl9pc1N1YnBsb3RPYmomJmEpfHxlIGluIHR9ZnVuY3Rpb24gZyh0LGUpe3JldHVybiBlIGluIHQ/dFtlXTp0W20oZSkua2V5TWludXNJZF19dmFyIHY9bi5jb3VudGVyUmVnZXgoIihbYS16XSspIik7ZnVuY3Rpb24gbSh0KXt2YXIgZT10Lm1hdGNoKHYpO3JldHVybntrZXlNaW51c0lkOmUmJmVbMV0saWQ6ZSYmZVsyXX19fSx7Ii4uL2xpYiI6NzE3LCIuLi9wbG90cy9wbG90cyI6ODI2LCIuL3Bsb3RfY29uZmlnIjo3NTMsIi4vcGxvdF9zY2hlbWEiOjc1NH1dLDc2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImFmdGVyYWxsIix2YWx1ZXM6WyJpbW1lZGlhdGUiLCJuZXh0IiwiYWZ0ZXJhbGwiXX0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmb3J3YXJkIiwicmV2ZXJzZSJdLGRmbHQ6ImZvcndhcmQifSxmcm9tY3VycmVudDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZnJhbWU6e2R1cmF0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NTAwfSxyZWRyYXc6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fSx0cmFuc2l0aW9uOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUwMCxlZGl0VHlwZToibm9uZSJ9LGVhc2luZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiY3ViaWMtaW4tb3V0Iix2YWx1ZXM6WyJsaW5lYXIiLCJxdWFkIiwiY3ViaWMiLCJzaW4iLCJleHAiLCJjaXJjbGUiLCJlbGFzdGljIiwiYmFjayIsImJvdW5jZSIsImxpbmVhci1pbiIsInF1YWQtaW4iLCJjdWJpYy1pbiIsInNpbi1pbiIsImV4cC1pbiIsImNpcmNsZS1pbiIsImVsYXN0aWMtaW4iLCJiYWNrLWluIiwiYm91bmNlLWluIiwibGluZWFyLW91dCIsInF1YWQtb3V0IiwiY3ViaWMtb3V0Iiwic2luLW91dCIsImV4cC1vdXQiLCJjaXJjbGUtb3V0IiwiZWxhc3RpYy1vdXQiLCJiYWNrLW91dCIsImJvdW5jZS1vdXQiLCJsaW5lYXItaW4tb3V0IiwicXVhZC1pbi1vdXQiLCJjdWJpYy1pbi1vdXQiLCJzaW4taW4tb3V0IiwiZXhwLWluLW91dCIsImNpcmNsZS1pbi1vdXQiLCJlbGFzdGljLWluLW91dCIsImJhY2staW4tb3V0IiwiYm91bmNlLWluLW91dCJdLGVkaXRUeXBlOiJub25lIn0sb3JkZXJpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxheW91dCBmaXJzdCIsInRyYWNlcyBmaXJzdCJdLGRmbHQ6ImxheW91dCBmaXJzdCIsZWRpdFR5cGU6Im5vbmUifX19fSx7fV0sNzYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGE9dCgiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksbyxzPXIubmFtZSxsPXIuaW5jbHVzaW9uQXR0cnx8InZpc2libGUiLGM9ZVtzXSx1PW4uaXNBcnJheU9yVHlwZWRBcnJheSh0W3NdKT90W3NdOltdLGg9ZVtzXT1bXSxmPWEuYXJyYXlUZW1wbGF0ZXIoZSxzLGwpO2ZvcihpPTA7aTx1Lmxlbmd0aDtpKyspe3ZhciBwPXVbaV07bi5pc1BsYWluT2JqZWN0KHApP289Zi5uZXdJdGVtKHApOihvPWYubmV3SXRlbSh7fSkpW2xdPSExLG8uX2luZGV4PWksITEhPT1vW2xdJiZyLmhhbmRsZUl0ZW1EZWZhdWx0cyhwLG8sZSxyKSxoLnB1c2gobyl9dmFyIGQ9Zi5kZWZhdWx0SXRlbXMoKTtmb3IoaT0wO2k8ZC5sZW5ndGg7aSsrKShvPWRbaV0pLl9pbmRleD1oLmxlbmd0aCxyLmhhbmRsZUl0ZW1EZWZhdWx0cyh7fSxvLGUscix7fSksaC5wdXNoKG8pO2lmKG4uaXNBcnJheU9yVHlwZWRBcnJheShjKSl7dmFyIGc9TWF0aC5taW4oYy5sZW5ndGgsaC5sZW5ndGgpO2ZvcihpPTA7aTxnO2krKyluLnJlbGlua1ByaXZhdGVLZXlzKGhbaV0sY1tpXSl9cmV0dXJuIGh9fSx7Ii4uL2xpYiI6NzE3LCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3NTV9XSw3NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W10sZGZsdDoic2NhdHRlciIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLF9ub1RlbXBsYXRpbmc6ITB9LHZpc2libGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsImxlZ2VuZG9ubHkiXSxkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xlZ2VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToic3R5bGUifSxsZWdlbmRncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJzdHlsZSJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9LG5hbWU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InN0eWxlIn0sdWlkOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90IixhbmltOiEwfSxpZHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIixhbmltOiEwfSxjdXN0b21kYXRhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1ldGE6e3ZhbFR5cGU6ImFueSIsYXJyYXlPazohMCxlZGl0VHlwZToicGxvdCJ9LHNlbGVjdGVkcG9pbnRzOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJpbmZvOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJ4IiwieSIsInoiLCJ0ZXh0IiwibmFtZSJdLGV4dHJhczpbImFsbCIsIm5vbmUiLCJza2lwIl0sYXJyYXlPazohMCxkZmx0OiJhbGwiLGVkaXRUeXBlOiJub25lIn0saG92ZXJsYWJlbDpuLmhvdmVybGFiZWwsc3RyZWFtOnt0b2tlbjp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMCxlZGl0VHlwZToiY2FsYyJ9LG1heHBvaW50czp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MWU0LGRmbHQ6NTAwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0cmFuc2Zvcm1zOntfaXNMaW5rZWRUb0FycmF5OiJ0cmFuc2Zvcm0iLGVkaXRUeXBlOiJjYWxjIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9fX0seyIuLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiOjYyMn1dLDc2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3hheGlzOnt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6IngiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seWF4aXM6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoieSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifX19LHt9XSw3NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkZQX1NBRkUsbz10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIHModCxlKXt2YXIgcixuLGk9W10sbz1sKGUpLHM9Yyh0LGUpLHU9cy5taW4saD1zLm1heDtpZigwPT09dS5sZW5ndGh8fDA9PT1oLmxlbmd0aClyZXR1cm4gYS5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7dmFyIGY9dVswXS52YWwscD1oWzBdLnZhbDtmb3Iocj0xO3I8dS5sZW5ndGgmJmY9PT1wO3IrKylmPU1hdGgubWluKGYsdVtyXS52YWwpO2ZvcihyPTE7cjxoLmxlbmd0aCYmZj09PXA7cisrKXA9TWF0aC5tYXgocCxoW3JdLnZhbCk7dmFyIGQ9ITE7aWYoZS5yYW5nZSl7dmFyIGc9YS5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7ZD1nWzFdPGdbMF19InJldmVyc2VkIj09PWUuYXV0b3JhbmdlJiYoZD0hMCxlLmF1dG9yYW5nZT0hMCk7dmFyIHYsbSx5LHgsYixfLHc9ZS5yYW5nZW1vZGUsaz0idG96ZXJvIj09PXcsVD0ibm9ubmVnYXRpdmUiPT09dyxNPWUuX2xlbmd0aCxBPU0vMTAsUz0wO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspZm9yKHY9dVtyXSxuPTA7bjxoLmxlbmd0aDtuKyspKF89KG09aFtuXSkudmFsLXYudmFsKT4wJiYoKGI9TS1vKHYpLW8obSkpPkE/Xy9iPlMmJih5PXYseD1tLFM9Xy9iKTpfL00+UyYmKHk9e3ZhbDp2LnZhbCxwYWQ6MH0seD17dmFsOm0udmFsLHBhZDowfSxTPV8vTSkpO2lmKGY9PT1wKXt2YXIgRT1mLTEsTD1mKzE7aWYoaylpZigwPT09ZilpPVswLDFdO2Vsc2V7dmFyIEM9KGY+MD9oOnUpLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LG8oZSkpfSwwKSxQPWYvKDEtTWF0aC5taW4oLjUsQy9NKSk7aT1mPjA/WzAsUF06W1AsMF19ZWxzZSBpPVQ/W01hdGgubWF4KDAsRSksTWF0aC5tYXgoMSxMKV06W0UsTF19ZWxzZSBrPyh5LnZhbD49MCYmKHk9e3ZhbDowLHBhZDowfSkseC52YWw8PTAmJih4PXt2YWw6MCxwYWQ6MH0pKTpUJiYoeS52YWwtUypvKHkpPDAmJih5PXt2YWw6MCxwYWQ6MH0pLHgudmFsPD0wJiYoeD17dmFsOjEscGFkOjB9KSksUz0oeC52YWwteS52YWwpLyhNLW8oeSktbyh4KSksaT1beS52YWwtUypvKHkpLHgudmFsK1Mqbyh4KV07cmV0dXJuIGQmJmkucmV2ZXJzZSgpLGEuc2ltcGxlTWFwKGksZS5sMnJ8fE51bWJlcil9ZnVuY3Rpb24gbCh0KXt2YXIgZT10Ll9sZW5ndGgvMjA7cmV0dXJuImRvbWFpbiI9PT10LmNvbnN0cmFpbiYmdC5faW5wdXREb21haW4mJihlKj0odC5faW5wdXREb21haW5bMV0tdC5faW5wdXREb21haW5bMF0pLyh0LmRvbWFpblsxXS10LmRvbWFpblswXSkpLGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhZCsodC5leHRyYXBhZD9lOjApfX1mdW5jdGlvbiBjKHQsZSl7dmFyIHIsbixhLGk9ZS5faWQsbz10Ll9mdWxsRGF0YSxzPXQuX2Z1bGxMYXlvdXQsbD1bXSxjPVtdO2Z1bmN0aW9uIGYodCxlKXtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz10W2Vbcl1dLHM9KG8uX2V4dHJlbWVzfHx7fSlbaV07aWYoITA9PT1vLnZpc2libGUmJnMpe2ZvcihuPTA7bjxzLm1pbi5sZW5ndGg7bisrKWE9cy5taW5bbl0sdShsLGEudmFsLGEucGFkLHtleHRyYXBhZDphLmV4dHJhcGFkfSk7Zm9yKG49MDtuPHMubWF4Lmxlbmd0aDtuKyspYT1zLm1heFtuXSxoKGMsYS52YWwsYS5wYWQse2V4dHJhcGFkOmEuZXh0cmFwYWR9KX19fXJldHVybiBmKG8sZS5fdHJhY2VJbmRpY2VzKSxmKHMuYW5ub3RhdGlvbnN8fFtdLGUuX2FubkluZGljZXN8fFtdKSxmKHMuc2hhcGVzfHxbXSxlLl9zaGFwZUluZGljZXN8fFtdKSx7bWluOmwsbWF4OmN9fWZ1bmN0aW9uIHUodCxlLHIsbil7Zih0LGUscixuLGQpfWZ1bmN0aW9uIGgodCxlLHIsbil7Zih0LGUscixuLGcpfWZ1bmN0aW9uIGYodCxlLHIsbixhKXtmb3IodmFyIGk9bi50b3plcm8sbz1uLmV4dHJhcGFkLHM9ITAsbD0wO2w8dC5sZW5ndGgmJnM7bCsrKXt2YXIgYz10W2xdO2lmKGEoYy52YWwsZSkmJmMucGFkPj1yJiYoYy5leHRyYXBhZHx8IW8pKXtzPSExO2JyZWFrfWEoZSxjLnZhbCkmJmMucGFkPD1yJiYob3x8IWMuZXh0cmFwYWQpJiYodC5zcGxpY2UobCwxKSxsLS0pfWlmKHMpe3ZhciB1PWkmJjA9PT1lO3QucHVzaCh7dmFsOmUscGFkOnU/MDpyLGV4dHJhcGFkOiF1JiZvfSl9fWZ1bmN0aW9uIHAodCl7cmV0dXJuIG4odCkmJk1hdGguYWJzKHQpPGl9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiB0PD1lfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gdD49ZX1lLmV4cG9ydHM9e2dldEF1dG9SYW5nZTpzLG1ha2VQYWRGbjpsLGRvQXV0b1JhbmdlOmZ1bmN0aW9uKHQsZSl7aWYoZS5zZXRTY2FsZSgpLGUuYXV0b3JhbmdlKXtlLnJhbmdlPXModCxlKSxlLl9yPWUucmFuZ2Uuc2xpY2UoKSxlLl9ybD1hLnNpbXBsZU1hcChlLl9yLGUucjJsKTt2YXIgcj1lLl9pbnB1dCxuPXt9O25bZS5fYXR0cisiLnJhbmdlIl09ZS5yYW5nZSxuW2UuX2F0dHIrIi5hdXRvcmFuZ2UiXT1lLmF1dG9yYW5nZSxvLmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLHQubGF5b3V0LHQuX2Z1bGxMYXlvdXQuX3ByZUdVSSxuKSxyLnJhbmdlPWUucmFuZ2Uuc2xpY2UoKSxyLmF1dG9yYW5nZT1lLmF1dG9yYW5nZX12YXIgaT1lLl9hbmNob3JBeGlzO2lmKGkmJmkucmFuZ2VzbGlkZXIpe3ZhciBsPWkucmFuZ2VzbGlkZXJbZS5fbmFtZV07bCYmImF1dG8iPT09bC5yYW5nZW1vZGUmJihsLnJhbmdlPXModCxlKSksaS5faW5wdXQucmFuZ2VzbGlkZXJbZS5fbmFtZV09YS5leHRlbmRGbGF0KHt9LGwpfX0sZmluZEV4dHJlbWVzOmZ1bmN0aW9uKHQsZSxyKXtyfHwocj17fSk7dC5fbXx8dC5zZXRTY2FsZSgpO3ZhciBhLG8scyxsLGMsZixkLGcsdixtPVtdLHk9W10seD1lLmxlbmd0aCxiPXIucGFkZGVkfHwhMSxfPXIudG96ZXJvJiYoImxpbmVhciI9PT10LnR5cGV8fCItIj09PXQudHlwZSksdz0ibG9nIj09PXQudHlwZSxrPSExLFQ9ci52cGFkTGluZWFyaXplZHx8ITE7ZnVuY3Rpb24gTSh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBrPSEwLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heChOdW1iZXIodFtlXXx8MCksMCl9O3ZhciBlPU1hdGgubWF4KE51bWJlcih0fHwwKSwwKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIEE9TSgodC5fbT4wP3IucHBhZHBsdXM6ci5wcGFkbWludXMpfHxyLnBwYWR8fDApLFM9TSgodC5fbT4wP3IucHBhZG1pbnVzOnIucHBhZHBsdXMpfHxyLnBwYWR8fDApLEU9TShyLnZwYWRwbHVzfHxyLnZwYWQpLEw9TShyLnZwYWRtaW51c3x8ci52cGFkKTtpZighayl7aWYoZz0xLzAsdj0tMS8wLHcpZm9yKGE9MDthPHg7YSsrKShvPWVbYV0pPGcmJm8+MCYmKGc9byksbz52JiZvPGkmJih2PW8pO2Vsc2UgZm9yKGE9MDthPHg7YSsrKShvPWVbYV0pPGcmJm8+LWkmJihnPW8pLG8+diYmbzxpJiYodj1vKTtlPVtnLHZdLHg9Mn12YXIgQz17dG96ZXJvOl8sZXh0cmFwYWQ6Yn07ZnVuY3Rpb24gUChyKXtzPWVbcl0sbihzKSYmKGY9QShyKSxkPVMociksVD8obD10LmMybChzKS1MKHIpLGM9dC5jMmwocykrRShyKSk6KGc9cy1MKHIpLHY9cytFKHIpLHcmJmc8di8xMCYmKGc9di8xMCksbD10LmMybChnKSxjPXQuYzJsKHYpKSxfJiYobD1NYXRoLm1pbigwLGwpLGM9TWF0aC5tYXgoMCxjKSkscChsKSYmdShtLGwsZCxDKSxwKGMpJiZoKHksYyxmLEMpKX12YXIgTz1NYXRoLm1pbig2LHgpO2ZvcihhPTA7YTxPO2ErKylQKGEpO2ZvcihhPXgtMTthPj1PO2EtLSlQKGEpO3JldHVybnttaW46bSxtYXg6eSxvcHRzOnJ9fSxjb25jYXRFeHRyZW1lczpjfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2OTMsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCJmYXN0LWlzbnVtZXJpYyI6MjI4fV0sNzY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy90aXRsZXMiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxoPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGY9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHA9dCgiLi9jbGVhbl90aWNrcyIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLGc9ZC5PTkVBVkdZRUFSLHY9ZC5PTkVBVkdNT05USCxtPWQuT05FREFZLHk9ZC5PTkVIT1VSLHg9ZC5PTkVNSU4sYj1kLk9ORVNFQyxfPWQuTUlOVVNfU0lHTix3PWQuQkFETlVNLGs9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLFQ9ay5NSURfU0hJRlQsTT1rLkNBUF9TSElGVCxBPWsuTElORV9TUEFDSU5HLFM9ay5PUFBPU0lURV9TSURFLEU9ZS5leHBvcnRzPXt9O0Uuc2V0Q29udmVydD10KCIuL3NldF9jb252ZXJ0Iik7dmFyIEw9dCgiLi9heGlzX2F1dG90eXBlIiksQz10KCIuL2F4aXNfaWRzIik7RS5pZDJuYW1lPUMuaWQybmFtZSxFLm5hbWUyaWQ9Qy5uYW1lMmlkLEUuY2xlYW5JZD1DLmNsZWFuSWQsRS5saXN0PUMubGlzdCxFLmxpc3RJZHM9Qy5saXN0SWRzLEUuZ2V0RnJvbUlkPUMuZ2V0RnJvbUlkLEUuZ2V0RnJvbVRyYWNlPUMuZ2V0RnJvbVRyYWNlO3ZhciBQPXQoIi4vYXV0b3JhbmdlIik7RS5nZXRBdXRvUmFuZ2U9UC5nZXRBdXRvUmFuZ2UsRS5maW5kRXh0cmVtZXM9UC5maW5kRXh0cmVtZXMsRS5jb2VyY2VSZWY9ZnVuY3Rpb24odCxlLHIsbixhLGkpe3ZhciBvPW4uY2hhckF0KG4ubGVuZ3RoLTEpLGw9ci5fZnVsbExheW91dC5fc3VicGxvdHNbbysiYXhpcyJdLGM9bisicmVmIix1PXt9O3JldHVybiBhfHwoYT1sWzBdfHxpKSxpfHwoaT1hKSx1W2NdPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6bC5jb25jYXQoaT9baV06W10pLGRmbHQ6YX0scy5jb2VyY2UodCxlLHUsYyl9LEUuY29lcmNlUG9zaXRpb249ZnVuY3Rpb24odCxlLHIsbixhLGkpe3ZhciBvLGw7aWYoInBhcGVyIj09PW58fCJwaXhlbCI9PT1uKW89cy5lbnN1cmVOdW1iZXIsbD1yKGEsaSk7ZWxzZXt2YXIgYz1FLmdldEZyb21JZChlLG4pO2w9cihhLGk9Yy5mcmFjdGlvbjJyKGkpKSxvPWMuY2xlYW5Qb3N9dFthXT1vKGwpfSxFLmNsZWFuUG9zaXRpb249ZnVuY3Rpb24odCxlLHIpe3JldHVybigicGFwZXIiPT09cnx8InBpeGVsIj09PXI/cy5lbnN1cmVOdW1iZXI6RS5nZXRGcm9tSWQoZSxyKS5jbGVhblBvcykodCl9LEUucmVkcmF3Q29tcG9uZW50cz1mdW5jdGlvbih0LGUpe2U9ZXx8RS5saXN0SWRzKHQpO3ZhciByPXQuX2Z1bGxMYXlvdXQ7ZnVuY3Rpb24gbihuLGEsaSxzKXtmb3IodmFyIGw9by5nZXRDb21wb25lbnRNZXRob2QobixhKSxjPXt9LHU9MDt1PGUubGVuZ3RoO3UrKylmb3IodmFyIGg9cltFLmlkMm5hbWUoZVt1XSldW2ldLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIHA9aFtmXTtpZighY1twXSYmKGwodCxwKSxjW3BdPTEscykpcmV0dXJufX1uKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiLCJfYW5uSW5kaWNlcyIpLG4oInNoYXBlcyIsImRyYXdPbmUiLCJfc2hhcGVJbmRpY2VzIiksbigiaW1hZ2VzIiwiZHJhdyIsIl9pbWdJbmRpY2VzIiwhMCl9O3ZhciBPPUUuZ2V0RGF0YUNvbnZlcnNpb25zPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGk9IngiPT09cnx8InkiPT09cnx8InoiPT09cj9yOm47aWYoQXJyYXkuaXNBcnJheShpKSl7aWYoYT17dHlwZTpMKG4pLF9jYXRlZ29yaWVzOltdfSxFLnNldENvbnZlcnQoYSksImNhdGVnb3J5Ij09PWEudHlwZSlmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylhLmQyYyhuW29dKX1lbHNlIGE9RS5nZXRGcm9tVHJhY2UodCxlLGkpO3JldHVybiBhP3tkMmM6YS5kMmMsYzJkOmEuYzJkfToiaWRzIj09PWk/e2QyYzpJLGMyZDpJfTp7ZDJjOnosYzJkOnp9fTtmdW5jdGlvbiB6KHQpe3JldHVybit0fWZ1bmN0aW9uIEkodCl7cmV0dXJuIFN0cmluZyh0KX1FLmdldERhdGFUb0Nvb3JkRnVuYz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gTyh0LGUscixuKS5kMmN9LEUuY291bnRlckxldHRlcj1mdW5jdGlvbih0KXt2YXIgZT10LmNoYXJBdCgwKTtyZXR1cm4ieCI9PT1lPyJ5IjoieSI9PT1lPyJ4Ijp2b2lkIDB9LEUubWluRHRpY2s9ZnVuY3Rpb24odCxlLHIsbil7LTE9PT1bImxvZyIsImNhdGVnb3J5IiwibXVsdGljYXRlZ29yeSJdLmluZGV4T2YodC50eXBlKSYmbj92b2lkIDA9PT10Ll9taW5EdGljaz8odC5fbWluRHRpY2s9ZSx0Ll9mb3JjZVRpY2swPXIpOnQuX21pbkR0aWNrJiYoKHQuX21pbkR0aWNrL2UrMWUtNiklMTwyZS02JiYoKHItdC5fZm9yY2VUaWNrMCkvZSUxKzEuMDAwMDAxKSUxPDJlLTY/KHQuX21pbkR0aWNrPWUsdC5fZm9yY2VUaWNrMD1yKTooKGUvdC5fbWluRHRpY2srMWUtNiklMT4yZS02fHwoKHItdC5fZm9yY2VUaWNrMCkvdC5fbWluRHRpY2slMSsxLjAwMDAwMSklMT4yZS02KSYmKHQuX21pbkR0aWNrPTApKTp0Ll9taW5EdGljaz0wfSxFLnNhdmVSYW5nZUluaXRpYWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9RS5saXN0KHQsIiIsITApLG49ITEsYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgaT1yW2FdLG89dm9pZCAwPT09aS5fcmFuZ2VJbml0aWFsLHM9b3x8IShpLnJhbmdlWzBdPT09aS5fcmFuZ2VJbml0aWFsWzBdJiZpLnJhbmdlWzFdPT09aS5fcmFuZ2VJbml0aWFsWzFdKTsobyYmITE9PT1pLmF1dG9yYW5nZXx8ZSYmcykmJihpLl9yYW5nZUluaXRpYWw9aS5yYW5nZS5zbGljZSgpLG49ITApfXJldHVybiBufSxFLnNhdmVTaG93U3Bpa2VJbml0aWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPUUubGlzdCh0LCIiLCEwKSxuPSExLGE9Im9uIixpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXJbaV0scz12b2lkIDA9PT1vLl9zaG93U3Bpa2VJbml0aWFsLGw9c3x8IShvLnNob3dzcGlrZXM9PT1vLl9zaG93c3Bpa2VzKTsoc3x8ZSYmbCkmJihvLl9zaG93U3Bpa2VJbml0aWFsPW8uc2hvd3NwaWtlcyxuPSEwKSwib24iIT09YXx8by5zaG93c3Bpa2VzfHwoYT0ib2ZmIil9cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9YSxufSxFLmF1dG9CaW49ZnVuY3Rpb24odCxlLHIsbixpLG8pe3ZhciBsLGM9cy5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCksdT1zLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KTtpZigiY2F0ZWdvcnkiPT09ZS50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUpcmV0dXJue3N0YXJ0OmMtLjUsZW5kOnUrLjUsc2l6ZTpNYXRoLm1heCgxLE1hdGgucm91bmQobyl8fDEpLF9kYXRhU3Bhbjp1LWN9O2lmKGl8fChpPWUuY2FsZW5kYXIpLGw9ImxvZyI9PT1lLnR5cGU/e3R5cGU6ImxpbmVhciIscmFuZ2U6W2MsdV19Ont0eXBlOmUudHlwZSxyYW5nZTpzLnNpbXBsZU1hcChbYyx1XSxlLmMyciwwLGkpLGNhbGVuZGFyOml9LEUuc2V0Q29udmVydChsKSxvPW8mJnAuZHRpY2sobyxsLnR5cGUpKWwuZHRpY2s9byxsLnRpY2swPXAudGljazAodm9pZCAwLGwudHlwZSxpKTtlbHNle3ZhciBoO2lmKHIpaD0odS1jKS9yO2Vsc2V7dmFyIGY9cy5kaXN0aW5jdFZhbHModCksZD1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGYubWluRGlmZikvTWF0aC5MTjEwKSksZz1kKnMucm91bmRVcChmLm1pbkRpZmYvZCxbLjksMS45LDQuOSw5LjldLCEwKTtoPU1hdGgubWF4KGcsMipzLnN0ZGV2KHQpL01hdGgucG93KHQubGVuZ3RoLG4/LjI1Oi40KSksYShoKXx8KGg9MSl9RS5hdXRvVGlja3MobCxoKX12YXIgdix5PWwuZHRpY2sseD1FLnRpY2tJbmNyZW1lbnQoRS50aWNrRmlyc3QobCkseSwicmV2ZXJzZSIsaSk7aWYoIm51bWJlciI9PXR5cGVvZiB5KXY9KHg9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz0wLHM9MCxsPTAsYz0wO2Z1bmN0aW9uIHUoZSl7cmV0dXJuKDErMTAwKihlLXQpL3IuZHRpY2spJTEwMDwyfWZvcih2YXIgaD0wO2g8ZS5sZW5ndGg7aCsrKWVbaF0lMT09MD9sKys6YShlW2hdKXx8YysrLHUoZVtoXSkmJm8rKyx1KGVbaF0rci5kdGljay8yKSYmcysrO3ZhciBmPWUubGVuZ3RoLWM7aWYobD09PWYmJiJkYXRlIiE9PXIudHlwZSlyLmR0aWNrPDE/dD1uLS41KnIuZHRpY2s6KHQtPS41KStyLmR0aWNrPG4mJih0Kz1yLmR0aWNrKTtlbHNlIGlmKHM8LjEqZiYmKG8+LjMqZnx8dShuKXx8dShpKSkpe3ZhciBwPXIuZHRpY2svMjt0Kz10K3A8bj9wOi1wfXJldHVybiB0fSh4LHQsbCxjLHUpKSsoMStNYXRoLmZsb29yKCh1LXgpL3kpKSp5O2Vsc2UgZm9yKCJNIj09PWwuZHRpY2suY2hhckF0KDApJiYoeD1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBpPXMuZmluZEV4YWN0RGF0ZXMoZSxhKTtpZihpLmV4YWN0RGF5cz4uOCl7dmFyIG89TnVtYmVyKHIuc3Vic3RyKDEpKTtpLmV4YWN0WWVhcnM+LjgmJm8lMTI9PTA/dD1FLnRpY2tJbmNyZW1lbnQodCwiTTYiLCJyZXZlcnNlIikrMS41Km06aS5leGFjdE1vbnRocz4uOD90PUUudGlja0luY3JlbWVudCh0LCJNMSIsInJldmVyc2UiKSsxNS41Km06dC09bS8yO3ZhciBsPUUudGlja0luY3JlbWVudCh0LHIpO2lmKGw8PW4pcmV0dXJuIGx9cmV0dXJuIHR9KHgsdCx5LGMsaSkpLHY9eCwwO3Y8PXU7KXY9RS50aWNrSW5jcmVtZW50KHYseSwhMSxpKSwwO3JldHVybntzdGFydDplLmMycih4LDAsaSksZW5kOmUuYzJyKHYsMCxpKSxzaXplOnksX2RhdGFTcGFuOnUtY319LEUucHJlcFRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBlPXMuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2lmKCJhdXRvIj09PXQudGlja21vZGV8fCF0LmR0aWNrKXt2YXIgcixuPXQubnRpY2tzO258fCgiY2F0ZWdvcnkiPT09dC50eXBlfHwibXVsdGljYXRlZ29yeSI9PT10LnR5cGU/KHI9dC50aWNrZm9udD8xLjIqKHQudGlja2ZvbnQuc2l6ZXx8MTIpOjE1LG49dC5fbGVuZ3RoL3IpOihyPSJ5Ij09PXQuX2lkLmNoYXJBdCgwKT80MDo4MCxuPXMuY29uc3RyYWluKHQuX2xlbmd0aC9yLDQsOSkrMSksInJhZGlhbGF4aXMiPT09dC5fbmFtZSYmKG4qPTIpKSwiYXJyYXkiPT09dC50aWNrbW9kZSYmKG4qPTEwMCksRS5hdXRvVGlja3ModCxNYXRoLmFicyhlWzFdLWVbMF0pL24pLHQuX21pbkR0aWNrPjAmJnQuZHRpY2s8Mip0Ll9taW5EdGljayYmKHQuZHRpY2s9dC5fbWluRHRpY2ssdC50aWNrMD10Lmwycih0Ll9mb3JjZVRpY2swKSl9dC50aWNrMHx8KHQudGljazA9ImRhdGUiPT09dC50eXBlPyIyMDAwLTAxLTAxIjowKSwiZGF0ZSI9PT10LnR5cGUmJnQuZHRpY2s8LjEmJih0LmR0aWNrPS4xKSxxKHQpfSxFLmNhbGNUaWNrcz1mdW5jdGlvbih0KXtFLnByZXBUaWNrcyh0KTt2YXIgZT1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKTtpZigiYXJyYXkiPT09dC50aWNrbW9kZSlyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC50aWNrdmFscyxyPXQudGlja3RleHQsbj1uZXcgQXJyYXkoZS5sZW5ndGgpLGE9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCksaT0xLjAwMDEqYVswXS0xZS00KmFbMV0sbz0xLjAwMDEqYVsxXS0xZS00KmFbMF0sbD1NYXRoLm1pbihpLG8pLGM9TWF0aC5tYXgoaSxvKSx1PTA7QXJyYXkuaXNBcnJheShyKXx8KHI9W10pO3ZhciBoPSJjYXRlZ29yeSI9PT10LnR5cGU/dC5kMmxfbm9hZGQ6dC5kMmw7ImxvZyI9PT10LnR5cGUmJiJMIiE9PVN0cmluZyh0LmR0aWNrKS5jaGFyQXQoMCkmJih0LmR0aWNrPSJMIitNYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubWluKHQucmFuZ2VbMF0sdC5yYW5nZVsxXSkpLTEpKTtmb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIHA9aChlW2ZdKTtwPmwmJnA8YyYmKHZvaWQgMD09PXJbZl0/blt1XT1FLnRpY2tUZXh0KHQscCk6blt1XT1IKHQscCxTdHJpbmcocltmXSkpLHUrKyl9dTxlLmxlbmd0aCYmbi5zcGxpY2UodSxlLmxlbmd0aC11KTtyZXR1cm4gbn0odCk7dC5fdG1pbj1FLnRpY2tGaXJzdCh0KTt2YXIgcj0xLjAwMDEqZVswXS0xZS00KmVbMV0sbj0xLjAwMDEqZVsxXS0xZS00KmVbMF0saT1lWzFdPGVbMF07aWYodC5fdG1pbjxyIT09aSlyZXR1cm5bXTt2YXIgbz1bXTsiY2F0ZWdvcnkiIT09dC50eXBlJiYibXVsdGljYXRlZ29yeSIhPT10LnR5cGV8fChuPWk/TWF0aC5tYXgoLS41LG4pOk1hdGgubWluKHQuX2NhdGVnb3JpZXMubGVuZ3RoLS41LG4pKTtmb3IodmFyIGw9ImxvZyI9PT10LnR5cGUmJiEoYSh0LmR0aWNrKXx8IkwiPT09dC5kdGljay5jaGFyQXQoMCkpLGM9bnVsbCx1PU1hdGgubWF4KDFlMyx0Ll9sZW5ndGh8fDApLGg9dC5fdG1pbjsoaT9oPj1uOmg8PW4pJiYhKG8ubGVuZ3RoPnV8fGg9PT1jKTtoPUUudGlja0luY3JlbWVudChoLHQuZHRpY2ssaSx0LmNhbGVuZGFyKSl7Yz1oO3ZhciBmPSExO2wmJmghPT0oMHxoKSYmKGY9ITApLG8ucHVzaCh7bWlub3I6Zix2YWx1ZTpofSl9b3QodCkmJjM2MD09PU1hdGguYWJzKGVbMV0tZVswXSkmJm8ucG9wKCksdC5fdG1heD0ob1tvLmxlbmd0aC0xXXx8e30pLnZhbHVlLHQuX3ByZXZEYXRlSGVhZD0iIix0Ll9pbkNhbGNUaWNrcz0hMDtmb3IodmFyIHA9bmV3IEFycmF5KG8ubGVuZ3RoKSxkPTA7ZDxvLmxlbmd0aDtkKyspcFtkXT1FLnRpY2tUZXh0KHQsb1tkXS52YWx1ZSwhMSxvW2RdLm1pbm9yKTtyZXR1cm4gdC5faW5DYWxjVGlja3M9ITEscH07dmFyIEQ9WzIsNSwxMF0sUj1bMSwyLDMsNiwxMl0sRj1bMSwyLDUsMTAsMTUsMzBdLEI9WzEsMiwzLDcsMTRdLE49Wy0uMDQ2LDAsLjMwMSwuNDc3LC42MDIsLjY5OSwuNzc4LC44NDUsLjkwMywuOTU0LDFdLGo9Wy0uMzAxLDAsLjMwMSwuNjk5LDFdLFY9WzE1LDMwLDQ1LDkwLDE4MF07ZnVuY3Rpb24gVSh0LGUscil7cmV0dXJuIGUqcy5yb3VuZFVwKHQvZSxyKX1mdW5jdGlvbiBxKHQpe3ZhciBlPXQuZHRpY2s7aWYodC5fdGlja2V4cG9uZW50PTAsYShlKXx8InN0cmluZyI9PXR5cGVvZiBlfHwoZT0xKSwiY2F0ZWdvcnkiIT09dC50eXBlJiYibXVsdGljYXRlZ29yeSIhPT10LnR5cGV8fCh0Ll90aWNrcm91bmQ9bnVsbCksImRhdGUiPT09dC50eXBlKXt2YXIgcj10LnIybCh0LnRpY2swKSxuPXQubDJyKHIpLnJlcGxhY2UoLyheLXxpKS9nLCIiKSxpPW4ubGVuZ3RoO2lmKCJNIj09PVN0cmluZyhlKS5jaGFyQXQoMCkpaT4xMHx8IjAxLTAxIiE9PW4uc3Vic3RyKDUpP3QuX3RpY2tyb3VuZD0iZCI6dC5fdGlja3JvdW5kPStlLnN1YnN0cigxKSUxMj09MD8ieSI6Im0iO2Vsc2UgaWYoZT49bSYmaTw9MTB8fGU+PTE1Km0pdC5fdGlja3JvdW5kPSJkIjtlbHNlIGlmKGU+PXgmJmk8PTE2fHxlPj15KXQuX3RpY2tyb3VuZD0iTSI7ZWxzZSBpZihlPj1iJiZpPD0xOXx8ZT49eCl0Ll90aWNrcm91bmQ9IlMiO2Vsc2V7dmFyIG89dC5sMnIocitlKS5yZXBsYWNlKC9eLS8sIiIpLmxlbmd0aDt0Ll90aWNrcm91bmQ9TWF0aC5tYXgoaSxvKS0yMCx0Ll90aWNrcm91bmQ8MCYmKHQuX3RpY2tyb3VuZD00KX19ZWxzZSBpZihhKGUpfHwiTCI9PT1lLmNoYXJBdCgwKSl7dmFyIHM9dC5yYW5nZS5tYXAodC5yMmR8fE51bWJlcik7YShlKXx8KGU9TnVtYmVyKGUuc3Vic3RyKDEpKSksdC5fdGlja3JvdW5kPTItTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTArLjAxKTt2YXIgbD1NYXRoLm1heChNYXRoLmFicyhzWzBdKSxNYXRoLmFicyhzWzFdKSksYz1NYXRoLmZsb29yKE1hdGgubG9nKGwpL01hdGguTE4xMCsuMDEpO01hdGguYWJzKGMpPjMmJihZKHQuZXhwb25lbnRmb3JtYXQpJiYhVyhjKT90Ll90aWNrZXhwb25lbnQ9MypNYXRoLnJvdW5kKChjLTEpLzMpOnQuX3RpY2tleHBvbmVudD1jKX1lbHNlIHQuX3RpY2tyb3VuZD1udWxsfWZ1bmN0aW9uIEgodCxlLHIpe3ZhciBuPXQudGlja2ZvbnR8fHt9O3JldHVybnt4OmUsZHg6MCxkeTowLHRleHQ6cnx8IiIsZm9udFNpemU6bi5zaXplLGZvbnQ6bi5mYW1pbHksZm9udENvbG9yOm4uY29sb3J9fUUuYXV0b1RpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gTWF0aC5wb3codCxNYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4xMCkpfWlmKCJkYXRlIj09PXQudHlwZSl7dC50aWNrMD1zLmRhdGVUaWNrMCh0LmNhbGVuZGFyKTt2YXIgaT0yKmU7aT5nPyhlLz1nLHI9bigxMCksdC5kdGljaz0iTSIrMTIqVShlLHIsRCkpOmk+dj8oZS89dix0LmR0aWNrPSJNIitVKGUsMSxSKSk6aT5tPyh0LmR0aWNrPVUoZSxtLEIpLHQudGljazA9cy5kYXRlVGljazAodC5jYWxlbmRhciwhMCkpOmk+eT90LmR0aWNrPVUoZSx5LFIpOmk+eD90LmR0aWNrPVUoZSx4LEYpOmk+Yj90LmR0aWNrPVUoZSxiLEYpOihyPW4oMTApLHQuZHRpY2s9VShlLHIsRCkpfWVsc2UgaWYoImxvZyI9PT10LnR5cGUpe3QudGljazA9MDt2YXIgbz1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKTtpZihlPi43KXQuZHRpY2s9TWF0aC5jZWlsKGUpO2Vsc2UgaWYoTWF0aC5hYnMob1sxXS1vWzBdKTwxKXt2YXIgbD0xLjUqTWF0aC5hYnMoKG9bMV0tb1swXSkvZSk7ZT1NYXRoLmFicyhNYXRoLnBvdygxMCxvWzFdKS1NYXRoLnBvdygxMCxvWzBdKSkvbCxyPW4oMTApLHQuZHRpY2s9IkwiK1UoZSxyLEQpfWVsc2UgdC5kdGljaz1lPi4zPyJEMiI6IkQxIn1lbHNlImNhdGVnb3J5Ij09PXQudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlPyh0LnRpY2swPTAsdC5kdGljaz1NYXRoLmNlaWwoTWF0aC5tYXgoZSwxKSkpOm90KHQpPyh0LnRpY2swPTAscj0xLHQuZHRpY2s9VShlLHIsVikpOih0LnRpY2swPTAscj1uKDEwKSx0LmR0aWNrPVUoZSxyLEQpKTtpZigwPT09dC5kdGljayYmKHQuZHRpY2s9MSksIWEodC5kdGljaykmJiJzdHJpbmciIT10eXBlb2YgdC5kdGljayl7dmFyIGM9dC5kdGljazt0aHJvdyB0LmR0aWNrPTEsImF4LmR0aWNrIGVycm9yOiAiK1N0cmluZyhjKX19LEUudGlja0luY3JlbWVudD1mdW5jdGlvbih0LGUscixpKXt2YXIgbz1yPy0xOjE7aWYoYShlKSlyZXR1cm4gdCtvKmU7dmFyIGw9ZS5jaGFyQXQoMCksYz1vKk51bWJlcihlLnN1YnN0cigxKSk7aWYoIk0iPT09bClyZXR1cm4gcy5pbmNyZW1lbnRNb250aCh0LGMsaSk7aWYoIkwiPT09bClyZXR1cm4gTWF0aC5sb2coTWF0aC5wb3coMTAsdCkrYykvTWF0aC5MTjEwO2lmKCJEIj09PWwpe3ZhciB1PSJEMiI9PT1lP2o6TixoPXQrLjAxKm8sZj1zLnJvdW5kVXAocy5tb2QoaCwxKSx1LHIpO3JldHVybiBNYXRoLmZsb29yKGgpK01hdGgubG9nKG4ucm91bmQoTWF0aC5wb3coMTAsZiksMSkpL01hdGguTE4xMH10aHJvdyJ1bnJlY29nbml6ZWQgZHRpY2sgIitTdHJpbmcoZSl9LEUudGlja0ZpcnN0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucjJsfHxOdW1iZXIscj1zLnNpbXBsZU1hcCh0LnJhbmdlLGUpLGk9clsxXTxyWzBdLG89aT9NYXRoLmZsb29yOk1hdGguY2VpbCxsPTEuMDAwMSpyWzBdLTFlLTQqclsxXSxjPXQuZHRpY2ssdT1lKHQudGljazApO2lmKGEoYykpe3ZhciBoPW8oKGwtdSkvYykqYyt1O3JldHVybiJjYXRlZ29yeSIhPT10LnR5cGUmJiJtdWx0aWNhdGVnb3J5IiE9PXQudHlwZXx8KGg9cy5jb25zdHJhaW4oaCwwLHQuX2NhdGVnb3JpZXMubGVuZ3RoLTEpKSxofXZhciBmPWMuY2hhckF0KDApLHA9TnVtYmVyKGMuc3Vic3RyKDEpKTtpZigiTSI9PT1mKXtmb3IodmFyIGQsZyx2LG09MCx5PXU7bTwxMDspe2lmKCgoZD1FLnRpY2tJbmNyZW1lbnQoeSxjLGksdC5jYWxlbmRhcikpLWwpKih5LWwpPD0wKXJldHVybiBpP01hdGgubWluKHksZCk6TWF0aC5tYXgoeSxkKTtnPShsLSh5K2QpLzIpLyhkLXkpLHY9ZisoTWF0aC5hYnMoTWF0aC5yb3VuZChnKSl8fDEpKnAseT1FLnRpY2tJbmNyZW1lbnQoeSx2LGc8MD8haTppLHQuY2FsZW5kYXIpLG0rK31yZXR1cm4gcy5lcnJvcigidGlja0ZpcnN0IGRpZCBub3QgY29udmVyZ2UiLHQpLHl9aWYoIkwiPT09ZilyZXR1cm4gTWF0aC5sb2cobygoTWF0aC5wb3coMTAsbCktdSkvcCkqcCt1KS9NYXRoLkxOMTA7aWYoIkQiPT09Zil7dmFyIHg9IkQyIj09PWM/ajpOLGI9cy5yb3VuZFVwKHMubW9kKGwsMSkseCxpKTtyZXR1cm4gTWF0aC5mbG9vcihsKStNYXRoLmxvZyhuLnJvdW5kKE1hdGgucG93KDEwLGIpLDEpKS9NYXRoLkxOMTB9dGhyb3cidW5yZWNvZ25pemVkIGR0aWNrICIrU3RyaW5nKGMpfSxFLnRpY2tUZXh0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLG89SCh0LGUpLGw9ImFycmF5Ij09PXQudGlja21vZGUsYz1yfHxsLHU9dC50eXBlLGg9ImNhdGVnb3J5Ij09PXU/dC5kMmxfbm9hZGQ6dC5kMmw7aWYobCYmQXJyYXkuaXNBcnJheSh0LnRpY2t0ZXh0KSl7dmFyIGY9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCkscD1NYXRoLmFicyhmWzFdLWZbMF0pLzFlNDtmb3IoaT0wO2k8dC50aWNrdGV4dC5sZW5ndGgmJiEoTWF0aC5hYnMoZS1oKHQudGlja3ZhbHNbaV0pKTxwKTtpKyspO2lmKGk8dC50aWNrdGV4dC5sZW5ndGgpcmV0dXJuIG8udGV4dD1TdHJpbmcodC50aWNrdGV4dFtpXSksb31mdW5jdGlvbiBkKG4pe2lmKHZvaWQgMD09PW4pcmV0dXJuITA7aWYocilyZXR1cm4ibm9uZSI9PT1uO3ZhciBhPXtmaXJzdDp0Ll90bWluLGxhc3Q6dC5fdG1heH1bbl07cmV0dXJuImFsbCIhPT1uJiZlIT09YX12YXIgZz1yPyJuZXZlciI6Im5vbmUiIT09dC5leHBvbmVudGZvcm1hdCYmZCh0LnNob3dleHBvbmVudCk/ImhpZGUiOiIiO2lmKCJkYXRlIj09PXU/ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fdGlja3JvdW5kLG89ciYmdC5ob3ZlcmZvcm1hdHx8RS5nZXRUaWNrRm9ybWF0KHQpO24mJihpPWEoaSk/NDp7eToibSIsbToiZCIsZDoiTSIsTToiUyIsUzo0fVtpXSk7dmFyIGwsYz1zLmZvcm1hdERhdGUoZS54LG8saSx0Ll9kYXRlRm9ybWF0LHQuY2FsZW5kYXIsdC5fZXh0cmFGb3JtYXQpLHU9Yy5pbmRleE9mKCJcbiIpOy0xIT09dSYmKGw9Yy5zdWJzdHIodSsxKSxjPWMuc3Vic3RyKDAsdSkpO24mJigiMDA6MDA6MDAiPT09Y3x8IjAwOjAwIj09PWM/KGM9bCxsPSIiKTo4PT09Yy5sZW5ndGgmJihjPWMucmVwbGFjZSgvOjAwJC8sIiIpKSk7bCYmKHI/ImQiPT09aT9jKz0iLCAiK2w6Yz1sKyhjPyIsICIrYzoiIik6dC5faW5DYWxjVGlja3MmJmw9PT10Ll9wcmV2RGF0ZUhlYWR8fChjKz0iPGJyPiIrbCx0Ll9wcmV2RGF0ZUhlYWQ9bCkpO2UudGV4dD1jfSh0LG8scixjKToibG9nIj09PXU/ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz10LmR0aWNrLGw9ZS54LGM9dC50aWNrZm9ybWF0LHU9InN0cmluZyI9PXR5cGVvZiBvJiZvLmNoYXJBdCgwKTsibmV2ZXIiPT09aSYmKGk9IiIpO24mJiJMIiE9PXUmJihvPSJMMyIsdT0iTCIpO2lmKGN8fCJMIj09PXUpZS50ZXh0PVgoTWF0aC5wb3coMTAsbCksdCxpLG4pO2Vsc2UgaWYoYShvKXx8IkQiPT09dSYmcy5tb2QobCsuMDEsMSk8LjEpe3ZhciBoPU1hdGgucm91bmQobCksZj1NYXRoLmFicyhoKSxwPXQuZXhwb25lbnRmb3JtYXQ7InBvd2VyIj09PXB8fFkocCkmJlcoaCk/KGUudGV4dD0wPT09aD8xOjE9PT1oPyIxMCI6IjEwPHN1cD4iKyhoPjE/IiI6XykrZisiPC9zdXA+IixlLmZvbnRTaXplKj0xLjI1KTooImUiPT09cHx8IkUiPT09cCkmJmY+Mj9lLnRleHQ9IjEiK3ArKGg+MD8iKyI6XykrZjooZS50ZXh0PVgoTWF0aC5wb3coMTAsbCksdCwiIiwiZmFrZWhvdmVyIiksIkQxIj09PW8mJiJ5Ij09PXQuX2lkLmNoYXJBdCgwKSYmKGUuZHktPWUuZm9udFNpemUvNikpfWVsc2V7aWYoIkQiIT09dSl0aHJvdyJ1bnJlY29nbml6ZWQgZHRpY2sgIitTdHJpbmcobyk7ZS50ZXh0PVN0cmluZyhNYXRoLnJvdW5kKE1hdGgucG93KDEwLHMubW9kKGwsMSkpKSksZS5mb250U2l6ZSo9Ljc1fWlmKCJEMSI9PT10LmR0aWNrKXt2YXIgZD1TdHJpbmcoZS50ZXh0KS5jaGFyQXQoMCk7IjAiIT09ZCYmIjEiIT09ZHx8KCJ5Ij09PXQuX2lkLmNoYXJBdCgwKT9lLmR4LT1lLmZvbnRTaXplLzQ6KGUuZHkrPWUuZm9udFNpemUvMixlLmR4Kz0odC5yYW5nZVsxXT50LnJhbmdlWzBdPzE6LTEpKmUuZm9udFNpemUqKGw8MD8uNTouMjUpKSl9fSh0LG8sMCxjLGcpOiJjYXRlZ29yeSI9PT11P2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5fY2F0ZWdvcmllc1tNYXRoLnJvdW5kKGUueCldO3ZvaWQgMD09PXImJihyPSIiKTtlLnRleHQ9U3RyaW5nKHIpfSh0LG8pOiJtdWx0aWNhdGVnb3J5Ij09PXU/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGgucm91bmQoZS54KSxhPXQuX2NhdGVnb3JpZXNbbl18fFtdLGk9dm9pZCAwPT09YVsxXT8iIjpTdHJpbmcoYVsxXSksbz12b2lkIDA9PT1hWzBdPyIiOlN0cmluZyhhWzBdKTtyP2UudGV4dD1vKyIgLSAiK2k6KGUudGV4dD1pLGUudGV4dDI9byl9KHQsbyxyKTpvdCh0KT9mdW5jdGlvbih0LGUscixuLGEpe2lmKCJyYWRpYW5zIiE9PXQudGhldGF1bml0fHxyKWUudGV4dD1YKGUueCx0LGEsbik7ZWxzZXt2YXIgaT1lLngvMTgwO2lmKDA9PT1pKWUudGV4dD0iMCI7ZWxzZXt2YXIgbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIE1hdGguYWJzKHQtZSk8PTFlLTZ9dmFyIHI9ZnVuY3Rpb24odCl7dmFyIHI9MTtmb3IoOyFlKE1hdGgucm91bmQodCpyKS9yLHQpOylyKj0xMDtyZXR1cm4gcn0odCksbj10KnIsYT1NYXRoLmFicyhmdW5jdGlvbiB0KHIsbil7cmV0dXJuIGUobiwwKT9yOnQobixyJW4pfShuLHIpKTtyZXR1cm5bTWF0aC5yb3VuZChuL2EpLE1hdGgucm91bmQoci9hKV19KGkpO2lmKG9bMV0+PTEwMCllLnRleHQ9WChzLmRlZzJyYWQoZS54KSx0LGEsbik7ZWxzZXt2YXIgbD1lLng8MDsxPT09b1sxXT8xPT09b1swXT9lLnRleHQ9Ilx1MDNjMCI6ZS50ZXh0PW9bMF0rIlx1MDNjMCI6ZS50ZXh0PVsiPHN1cD4iLG9bMF0sIjwvc3VwPiIsIlx1MjA0NCIsIjxzdWI+IixvWzFdLCI8L3N1Yj4iLCJcdTAzYzAiXS5qb2luKCIiKSxsJiYoZS50ZXh0PV8rZS50ZXh0KX19fX0odCxvLHIsYyxnKTpmdW5jdGlvbih0LGUscixuLGEpeyJuZXZlciI9PT1hP2E9IiI6ImFsbCI9PT10LnNob3dleHBvbmVudCYmTWF0aC5hYnMoZS54L3QuZHRpY2spPDFlLTYmJihhPSJoaWRlIik7ZS50ZXh0PVgoZS54LHQsYSxuKX0odCxvLDAsYyxnKSxufHwodC50aWNrcHJlZml4JiYhZCh0LnNob3d0aWNrcHJlZml4KSYmKG8udGV4dD10LnRpY2twcmVmaXgrby50ZXh0KSx0LnRpY2tzdWZmaXgmJiFkKHQuc2hvd3RpY2tzdWZmaXgpJiYoby50ZXh0Kz10LnRpY2tzdWZmaXgpKSwiYm91bmRhcmllcyI9PT10LnRpY2tzb258fHQuc2hvd2RpdmlkZXJzKXt2YXIgdj1mdW5jdGlvbihlKXt2YXIgcj10LmwycChlKTtyZXR1cm4gcj49MCYmcjw9dC5fbGVuZ3RoP2U6bnVsbH07by54Ym5kPVt2KG8ueC0uNSksdihvLngrdC5kdGljay0uNSldfXJldHVybiBvfSxFLmhvdmVyTGFiZWxUZXh0PWZ1bmN0aW9uKHQsZSxyKXtpZihyIT09dyYmciE9PWUpcmV0dXJuIEUuaG92ZXJMYWJlbFRleHQodCxlKSsiIC0gIitFLmhvdmVyTGFiZWxUZXh0KHQscik7dmFyIG49ImxvZyI9PT10LnR5cGUmJmU8PTAsYT1FLnRpY2tUZXh0KHQsdC5jMmwobj8tZTplKSwiaG92ZXIiKS50ZXh0O3JldHVybiBuPzA9PT1lPyIwIjpfK2E6YX07dmFyIEc9WyJmIiwicCIsIm4iLCJcdTAzYmMiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCJdO2Z1bmN0aW9uIFkodCl7cmV0dXJuIlNJIj09PXR8fCJCIj09PXR9ZnVuY3Rpb24gVyh0KXtyZXR1cm4gdD4xNHx8dDwtMTV9ZnVuY3Rpb24gWCh0LGUscixuKXt2YXIgaT10PDAsbz1lLl90aWNrcm91bmQsbD1yfHxlLmV4cG9uZW50Zm9ybWF0fHwiQiIsYz1lLl90aWNrZXhwb25lbnQsdT1FLmdldFRpY2tGb3JtYXQoZSksaD1lLnNlcGFyYXRldGhvdXNhbmRzO2lmKG4pe3ZhciBmPXtleHBvbmVudGZvcm1hdDpsLGR0aWNrOiJub25lIj09PWUuc2hvd2V4cG9uZW50P2UuZHRpY2s6YSh0KSYmTWF0aC5hYnModCl8fDEscmFuZ2U6Im5vbmUiPT09ZS5zaG93ZXhwb25lbnQ/ZS5yYW5nZS5tYXAoZS5yMmQpOlswLHR8fDFdfTtxKGYpLG89KE51bWJlcihmLl90aWNrcm91bmQpfHwwKSs0LGM9Zi5fdGlja2V4cG9uZW50LGUuaG92ZXJmb3JtYXQmJih1PWUuaG92ZXJmb3JtYXQpfWlmKHUpcmV0dXJuIGUuX251bUZvcm1hdCh1KSh0KS5yZXBsYWNlKC8tL2csXyk7dmFyIHAsZD1NYXRoLnBvdygxMCwtbykvMjtpZigibm9uZSI9PT1sJiYoYz0wKSwodD1NYXRoLmFicyh0KSk8ZCl0PSIwIixpPSExO2Vsc2V7aWYodCs9ZCxjJiYodCo9TWF0aC5wb3coMTAsLWMpLG8rPWMpLDA9PT1vKXQ9U3RyaW5nKE1hdGguZmxvb3IodCkpO2Vsc2UgaWYobzwwKXt0PSh0PVN0cmluZyhNYXRoLnJvdW5kKHQpKSkuc3Vic3RyKDAsdC5sZW5ndGgrbyk7Zm9yKHZhciBnPW87ZzwwO2crKyl0Kz0iMCJ9ZWxzZXt2YXIgdj0odD1TdHJpbmcodCkpLmluZGV4T2YoIi4iKSsxO3YmJih0PXQuc3Vic3RyKDAsditvKS5yZXBsYWNlKC9cLj8wKyQvLCIiKSl9dD1zLm51bVNlcGFyYXRlKHQsZS5fc2VwYXJhdG9ycyxoKX1jJiYiaGlkZSIhPT1sJiYoWShsKSYmVyhjKSYmKGw9InBvd2VyIikscD1jPDA/XystYzoicG93ZXIiIT09bD8iKyIrYzpTdHJpbmcoYyksImUiPT09bHx8IkUiPT09bD90Kz1sK3A6InBvd2VyIj09PWw/dCs9Ilx4ZDcxMDxzdXA+IitwKyI8L3N1cD4iOiJCIj09PWwmJjk9PT1jP3QrPSJCIjpZKGwpJiYodCs9R1tjLzMrNV0pKTtyZXR1cm4gaT9fK3Q6dH1mdW5jdGlvbiBaKHQsZSl7Zm9yKHZhciByPVtdLG49e30sYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgaT1lW2FdO25baS50ZXh0Ml0/bltpLnRleHQyXS5wdXNoKGkueCk6bltpLnRleHQyXT1baS54XX1mb3IodmFyIG8gaW4gbilyLnB1c2goSCh0LHMuaW50ZXJwKG5bb10sLjUpLG8pKTtyZXR1cm4gcn1mdW5jdGlvbiBKKHQpe3JldHVyblt0LnRleHQsdC54LHQuYXhJbmZvLHQuZm9udCx0LmZvbnRTaXplLHQuZm9udENvbG9yXS5qb2luKCJfIil9ZnVuY3Rpb24gSyh0KXt2YXIgZT10LnRpdGxlLmZvbnQuc2l6ZSxyPSh0LnRpdGxlLnRleHQubWF0Y2gobC5CUl9UQUdfQUxMKXx8W10pLmxlbmd0aDtyZXR1cm4gdC50aXRsZS5oYXNPd25Qcm9wZXJ0eSgic3RhbmRvZmYiKT9yP2UqKE0rcipBKTplKk06cj9lKihyKzEpKkE6ZX1mdW5jdGlvbiBRKHQsZSl7dmFyIHI9dC5sMnAoZSk7cmV0dXJuIHI+MSYmcjx0Ll9sZW5ndGgtMX1mdW5jdGlvbiAkKHQpe3ZhciBlPW4uc2VsZWN0KHQpLHI9ZS5zZWxlY3QoIi50ZXh0LW1hdGgtZ3JvdXAiKTtyZXR1cm4gci5lbXB0eSgpP2Uuc2VsZWN0KCJ0ZXh0Iik6cn1mdW5jdGlvbiB0dCh0KXtyZXR1cm4gdC5faWQrIi5hdXRvbWFyZ2luIn1mdW5jdGlvbiBldCh0KXtyZXR1cm4gdHQodCkrIi5taXJyb3IifWZ1bmN0aW9uIHJ0KHQpe3JldHVybiB0Ll9pZCsiLnJhbmdlc2xpZGVyIn1mdW5jdGlvbiBudCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKS0xPT09dC5pbmRleE9mKGVbcl0pJiZ0LnB1c2goZVtyXSl9ZnVuY3Rpb24gYXQodCxlLHIpe3ZhciBuLGEsaT1bXSxvPVtdLGw9dC5sYXlvdXQ7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpLnB1c2goRS5nZXRGcm9tSWQodCxlW25dKSk7Zm9yKG49MDtuPHIubGVuZ3RoO24rKylvLnB1c2goRS5nZXRGcm9tSWQodCxyW25dKSk7dmFyIGM9T2JqZWN0LmtleXMoZiksdT1bImFuY2hvciIsImRvbWFpbiIsIm92ZXJsYXlpbmciLCJwb3NpdGlvbiIsInNpZGUiLCJ0aWNrYW5nbGUiLCJlZGl0VHlwZSJdLGg9WyJsaW5lYXIiLCJsb2ciXTtmb3Iobj0wO248Yy5sZW5ndGg7bisrKXt2YXIgcD1jW25dLGQ9aVswXVtwXSxnPW9bMF1bcF0sdj0hMCxtPSExLHk9ITE7aWYoIl8iIT09cC5jaGFyQXQoMCkmJiJmdW5jdGlvbiIhPXR5cGVvZiBkJiYtMT09PXUuaW5kZXhPZihwKSl7Zm9yKGE9MTthPGkubGVuZ3RoJiZ2O2ErKyl7dmFyIHg9aVthXVtwXTsidHlwZSI9PT1wJiYtMSE9PWguaW5kZXhPZihkKSYmLTEhPT1oLmluZGV4T2YoeCkmJmQhPT14P209ITA6eCE9PWQmJih2PSExKX1mb3IoYT0xO2E8by5sZW5ndGgmJnY7YSsrKXt2YXIgYj1vW2FdW3BdOyJ0eXBlIj09PXAmJi0xIT09aC5pbmRleE9mKGcpJiYtMSE9PWguaW5kZXhPZihiKSYmZyE9PWI/eT0hMDpvW2FdW3BdIT09ZyYmKHY9ITEpfXYmJihtJiYobFtpWzBdLl9uYW1lXS50eXBlPSJsaW5lYXIiKSx5JiYobFtvWzBdLl9uYW1lXS50eXBlPSJsaW5lYXIiKSxpdChsLHAsaSxvLHQuX2Z1bGxMYXlvdXQuX2RmbHRUaXRsZSkpfX1mb3Iobj0wO248dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucy5sZW5ndGg7bisrKXt2YXIgXz10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zW25dOy0xIT09ZS5pbmRleE9mKF8ueHJlZikmJi0xIT09ci5pbmRleE9mKF8ueXJlZikmJnMuc3dhcEF0dHJzKGwuYW5ub3RhdGlvbnNbbl0sWyI/Il0pfX1mdW5jdGlvbiBpdCh0LGUscixuLGEpe3ZhciBpLG89cy5uZXN0ZWRQcm9wZXJ0eSxsPW8odFtyWzBdLl9uYW1lXSxlKS5nZXQoKSxjPW8odFtuWzBdLl9uYW1lXSxlKS5nZXQoKTtmb3IoInRpdGxlIj09PWUmJihsJiZsLnRleHQ9PT1hLngmJihsLnRleHQ9YS55KSxjJiZjLnRleHQ9PT1hLnkmJihjLnRleHQ9YS54KSksaT0wO2k8ci5sZW5ndGg7aSsrKW8odCxyW2ldLl9uYW1lKyIuIitlKS5zZXQoYyk7Zm9yKGk9MDtpPG4ubGVuZ3RoO2krKylvKHQsbltpXS5fbmFtZSsiLiIrZSkuc2V0KGwpfWZ1bmN0aW9uIG90KHQpe3JldHVybiJhbmd1bGFyYXhpcyI9PT10Ll9pZH1FLmdldFRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLGEsaSxvLHMsbDtmdW5jdGlvbiBjKHQpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdD90Ok51bWJlcih0LnJlcGxhY2UoIk0iLCIiKSkqdn1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9WyJMIiwiRCJdO2lmKHR5cGVvZiB0PT10eXBlb2YgZSl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0LWU7dmFyIG49ci5pbmRleE9mKHQuY2hhckF0KDApKSxhPXIuaW5kZXhPZihlLmNoYXJBdCgwKSk7cmV0dXJuIG49PT1hP051bWJlcih0LnJlcGxhY2UoLyhMfEQpL2csIiIpKS1OdW1iZXIoZS5yZXBsYWNlKC8oTHxEKS9nLCIiKSk6bi1hfXJldHVybiJudW1iZXIiPT10eXBlb2YgdD8xOi0xfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1udWxsPT09ZVswXSxuPW51bGw9PT1lWzFdLGE9dSh0LGVbMF0pPj0wLGk9dSh0LGVbMV0pPD0wO3JldHVybihyfHxhKSYmKG58fGkpfWlmKHQudGlja2Zvcm1hdHN0b3BzJiZ0LnRpY2tmb3JtYXRzdG9wcy5sZW5ndGg+MClzd2l0Y2godC50eXBlKXtjYXNlImRhdGUiOmNhc2UibGluZWFyIjpmb3IoZT0wO2U8dC50aWNrZm9ybWF0c3RvcHMubGVuZ3RoO2UrKylpZigobj10LnRpY2tmb3JtYXRzdG9wc1tlXSkuZW5hYmxlZCYmKGE9dC5kdGljayxpPW4uZHRpY2tyYW5nZSxvPXZvaWQgMCxzPXZvaWQgMCxsPXZvaWQgMCxvPWN8fGZ1bmN0aW9uKHQpe3JldHVybiB0fSxzPWlbMF0sbD1pWzFdLCghcyYmIm51bWJlciIhPXR5cGVvZiBzfHxvKHMpPD1vKGEpKSYmKCFsJiYibnVtYmVyIiE9dHlwZW9mIGx8fG8obCk+PW8oYSkpKSl7cj1uO2JyZWFrfWJyZWFrO2Nhc2UibG9nIjpmb3IoZT0wO2U8dC50aWNrZm9ybWF0c3RvcHMubGVuZ3RoO2UrKylpZigobj10LnRpY2tmb3JtYXRzdG9wc1tlXSkuZW5hYmxlZCYmaCh0LmR0aWNrLG4uZHRpY2tyYW5nZSkpe3I9bjticmVha319cmV0dXJuIHI/ci52YWx1ZTp0LnRpY2tmb3JtYXR9LEUuZ2V0U3VicGxvdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0Ll9zdWJwbG90cyxuPXIuY2FydGVzaWFuLmNvbmNhdChyLmdsMmR8fFtdKSxhPWU/RS5maW5kU3VicGxvdHNXaXRoQXhpcyhuLGUpOm47cmV0dXJuIGEuc29ydChmdW5jdGlvbih0LGUpe3ZhciByPXQuc3Vic3RyKDEpLnNwbGl0KCJ5Iiksbj1lLnN1YnN0cigxKS5zcGxpdCgieSIpO3JldHVybiByWzBdPT09blswXT8rclsxXS0rblsxXTorclswXS0rblswXX0pLGF9LEUuZmluZFN1YnBsb3RzV2l0aEF4aXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IFJlZ0V4cCgieCI9PT1lLl9pZC5jaGFyQXQoMCk/Il4iK2UuX2lkKyJ5IjplLl9pZCsiJCIpLG49W10sYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgaT10W2FdO3IudGVzdChpKSYmbi5wdXNoKGkpfXJldHVybiBufSxFLm1ha2VDbGlwUGF0aHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZighZS5faGFzT25seUxhcmdlU3Bsb21zKXt2YXIgcixhLGk9e19vZmZzZXQ6MCxfbGVuZ3RoOmUud2lkdGgsX2lkOiIifSxvPXtfb2Zmc2V0OjAsX2xlbmd0aDplLmhlaWdodCxfaWQ6IiJ9LHM9RS5saXN0KHQsIngiLCEwKSxsPUUubGlzdCh0LCJ5IiwhMCksYz1bXTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKWZvcihjLnB1c2goe3g6c1tyXSx5Om99KSxhPTA7YTxsLmxlbmd0aDthKyspMD09PXImJmMucHVzaCh7eDppLHk6bFthXX0pLGMucHVzaCh7eDpzW3JdLHk6bFthXX0pO3ZhciB1PWUuX2NsaXBzLnNlbGVjdEFsbCgiLmF4ZXNjbGlwIikuZGF0YShjLGZ1bmN0aW9uKHQpe3JldHVybiB0LnguX2lkK3QueS5faWR9KTt1LmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImF4ZXNjbGlwIiwhMCkuYXR0cigiaWQiLGZ1bmN0aW9uKHQpe3JldHVybiJjbGlwIitlLl91aWQrdC54Ll9pZCt0LnkuX2lkfSkuYXBwZW5kKCJyZWN0IiksdS5leGl0KCkucmVtb3ZlKCksdS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdCgicmVjdCIpLmF0dHIoe3g6dC54Ll9vZmZzZXR8fDAseTp0LnkuX29mZnNldHx8MCx3aWR0aDp0LnguX2xlbmd0aHx8MSxoZWlnaHQ6dC55Ll9sZW5ndGh8fDF9KX0pfX0sRS5kcmF3PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0OyJyZWRyYXciPT09ZSYmbi5fcGFwZXIuc2VsZWN0QWxsKCJnLnN1YnBsb3QiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1uLl9wbG90c1tlXSxhPXIueGF4aXMsaT1yLnlheGlzO3IueGF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2EuX2lkKyJ0aWNrIikucmVtb3ZlKCksci55YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIraS5faWQrInRpY2siKS5yZW1vdmUoKSxyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIithLl9pZCsidGljazIiKS5yZW1vdmUoKSxyLnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIitpLl9pZCsidGljazIiKS5yZW1vdmUoKSxyLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIithLl9pZCsiZGl2aWRlciIpLnJlbW92ZSgpLHIueWF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2kuX2lkKyJkaXZpZGVyIikucmVtb3ZlKCksci5ncmlkbGF5ZXImJnIuZ3JpZGxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLHIuemVyb2xpbmVsYXllciYmci56ZXJvbGluZWxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLG4uX2luZm9sYXllci5zZWxlY3QoIi5nLSIrYS5faWQrInRpdGxlIikucmVtb3ZlKCksbi5faW5mb2xheWVyLnNlbGVjdCgiLmctIitpLl9pZCsidGl0bGUiKS5yZW1vdmUoKX0pO3ZhciBhPWUmJiJyZWRyYXciIT09ZT9lOkUubGlzdElkcyh0KTtyZXR1cm4gcy5zeW5jT3JBc3luYyhhLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihlKXt2YXIgbj1FLmdldEZyb21JZCh0LGUpLGE9RS5kcmF3T25lKHQsbixyKTtyZXR1cm4gbi5fcj1uLnJhbmdlLnNsaWNlKCksbi5fcmw9cy5zaW1wbGVNYXAobi5fcixuLnIybCksYX19fSkpfSxFLmRyYXdPbmU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsbDtyPXJ8fHt9LGUuc2V0U2NhbGUoKTt2YXIgZj10Ll9mdWxsTGF5b3V0LHA9ZS5faWQsZD1wLmNoYXJBdCgwKSxnPUUuY291bnRlckxldHRlcihwKSx2PWYuX3Bsb3RzW2UuX21haW5TdWJwbG90XTtpZih2KXt2YXIgbT12W2QrImF4aXNsYXllciJdLHk9ZS5fbWFpbkxpbmVQb3NpdGlvbix4PWUuX21haW5NaXJyb3JQb3NpdGlvbixiPWUuX3ZhbHM9RS5jYWxjVGlja3MoZSksXz1bZS5taXJyb3IseSx4XS5qb2luKCJfIik7Zm9yKG49MDtuPGIubGVuZ3RoO24rKyliW25dLmF4SW5mbz1fO2UuX3NlbGVjdGlvbnM9e30sZS5fdGlja0FuZ2xlcyYmKGUuX3ByZXZUaWNrQW5nbGVzPWUuX3RpY2tBbmdsZXMpLGUuX3RpY2tBbmdsZXM9e30sZS5fZGVwdGg9bnVsbDt2YXIgdz17fTtpZihlLnZpc2libGUpe3ZhciBrLFQsTT1FLm1ha2VUcmFuc0ZuKGUpO2lmKCJib3VuZGFyaWVzIj09PWUudGlja3Nvbil7dmFyIEw9ZnVuY3Rpb24odCxlKXt2YXIgcixuPVtdLGE9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnhibmRbZV07bnVsbCE9PXImJm4ucHVzaChzLmV4dGVuZEZsYXQoe30sdCx7eDpyfSkpfTtpZihlLmxlbmd0aCl7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylhKGVbcl0sMCk7YShlW3ItMV0sMSl9cmV0dXJuIG59KDAsYik7VD1FLmNsaXBFbmRzKGUsTCksaz0iaW5zaWRlIj09PWUudGlja3M/VDpMfWVsc2UgVD1FLmNsaXBFbmRzKGUsYiksaz0iaW5zaWRlIj09PWUudGlja3M/VDpiO3ZhciBDPWUuX2dyaWRWYWxzPVQsUD1mdW5jdGlvbih0LGUpe3ZhciByLG4sYT1bXSxpPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54Ym5kW2VdO251bGwhPT1yJiZhLnB1c2gocy5leHRlbmRGbGF0KHt9LHQse3g6cn0pKX07aWYodC5zaG93ZGl2aWRlcnMmJmUubGVuZ3RoKXtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdO28udGV4dDIhPT1uJiZpKG8sMCksbj1vLnRleHQyfWkoZVtyLTFdLDEpfXJldHVybiBhfShlLGIpO2lmKCFmLl9oYXNPbmx5TGFyZ2VTcGxvbXMpe3ZhciBPPWUuX3N1YnBsb3RzV2l0aCx6PXt9O2ZvcihuPTA7bjxPLmxlbmd0aDtuKyspe2E9T1tuXTt2YXIgST0obD1mLl9wbG90c1thXSlbZysiYXhpcyJdLEQ9SS5fbWFpbkF4aXMuX2lkO2lmKCF6W0RdKXt6W0RdPTE7dmFyIFI9IngiPT09ZD8iTTAsIitJLl9vZmZzZXQrInYiK0kuX2xlbmd0aDoiTSIrSS5fb2Zmc2V0KyIsMGgiK0kuX2xlbmd0aDtFLmRyYXdHcmlkKHQsZSx7dmFsczpDLGNvdW50ZXJBeGlzOkksbGF5ZXI6bC5ncmlkbGF5ZXIuc2VsZWN0KCIuIitwKSxwYXRoOlIsdHJhbnNGbjpNfSksRS5kcmF3WmVyb0xpbmUodCxlLHtjb3VudGVyQXhpczpJLGxheWVyOmwuemVyb2xpbmVsYXllcixwYXRoOlIsdHJhbnNGbjpNfSl9fX12YXIgRj1FLmdldFRpY2tTaWducyhlKSxCPVtdO2lmKGUudGlja3Mpe3ZhciBOLGosVixVPUUubWFrZVRpY2tQYXRoKGUseSxGWzJdKTtpZihlLl9hbmNob3JBeGlzJiZlLm1pcnJvciYmITAhPT1lLm1pcnJvcj8oTj1FLm1ha2VUaWNrUGF0aChlLHgsRlszXSksaj1VK04pOihOPSIiLGo9VSksZS5zaG93ZGl2aWRlcnMmJiJvdXRzaWRlIj09PWUudGlja3MmJiJib3VuZGFyaWVzIj09PWUudGlja3Nvbil7dmFyIHE9e307Zm9yKG49MDtuPFAubGVuZ3RoO24rKylxW1Bbbl0ueF09MTtWPWZ1bmN0aW9uKHQpe3JldHVybiBxW3QueF0/TjpqfX1lbHNlIFY9ajtFLmRyYXdUaWNrcyh0LGUse3ZhbHM6ayxsYXllcjptLHBhdGg6Vix0cmFuc0ZuOk19KSwiYWxsdGlja3MiPT09ZS5taXJyb3ImJihCPU9iamVjdC5rZXlzKGUuX2xpbmVwb3NpdGlvbnN8fHt9KSl9Zm9yKG49MDtuPEIubGVuZ3RoO24rKyl7YT1CW25dLGw9Zi5fcGxvdHNbYV07dmFyIEg9ZS5fbGluZXBvc2l0aW9uc1thXXx8W10sRz1FLm1ha2VUaWNrUGF0aChlLEhbMF0sRlswXSkrRS5tYWtlVGlja1BhdGgoZSxIWzFdLEZbMV0pO0UuZHJhd1RpY2tzKHQsZSx7dmFsczprLGxheWVyOmxbZCsiYXhpc2xheWVyIl0scGF0aDpHLHRyYW5zRm46TX0pfXZhciBZPVtdO2lmKFkucHVzaChmdW5jdGlvbigpe3JldHVybiBFLmRyYXdMYWJlbHModCxlLHt2YWxzOmIsbGF5ZXI6bSx0cmFuc0ZuOk0sbGFiZWxGbnM6RS5tYWtlTGFiZWxGbnMoZSx5KX0pfSksIm11bHRpY2F0ZWdvcnkiPT09ZS50eXBlKXt2YXIgVz17eDoyLHk6MTB9W2RdO1kucHVzaChmdW5jdGlvbigpe3ZhciByPXt4OiJoZWlnaHQiLHk6IndpZHRoIn1bZF0sbj1RKClbcl0rVysoZS5fdGlja0FuZ2xlc1twKyJ0aWNrIl0/ZS50aWNrZm9udC5zaXplKkE6MCk7cmV0dXJuIEUuZHJhd0xhYmVscyh0LGUse3ZhbHM6WihlLGIpLGxheWVyOm0sY2xzOnArInRpY2syIixyZXBvc2l0aW9uT25VcGRhdGU6ITAsc2Vjb25kYXJ5OiEwLHRyYW5zRm46TSxsYWJlbEZuczpFLm1ha2VMYWJlbEZucyhlLHkrbipGWzRdKX0pfSksWS5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2RlcHRoPUZbNF0qKFEoInRpY2syIilbZS5zaWRlXS15KSxmdW5jdGlvbih0LGUscil7dmFyIG49ZS5faWQrImRpdmlkZXIiLGE9ci52YWxzLGk9ci5sYXllci5zZWxlY3RBbGwoInBhdGguIituKS5kYXRhKGEsSik7aS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKCJjcmlzcCIsMSkuY2FsbCh1LnN0cm9rZSxlLmRpdmlkZXJjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsaC5jcmlzcFJvdW5kKHQsZS5kaXZpZGVyd2lkdGgsMSkrInB4IiksaS5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbikuYXR0cigiZCIsci5wYXRoKX0odCxlLHt2YWxzOlAsbGF5ZXI6bSxwYXRoOkUubWFrZVRpY2tQYXRoKGUseSxGWzRdLGUuX2RlcHRoKSx0cmFuc0ZuOk19KX0pfWVsc2UgZS50aXRsZS5oYXNPd25Qcm9wZXJ0eSgic3RhbmRvZmYiKSYmWS5wdXNoKGZ1bmN0aW9uKCl7ZS5fZGVwdGg9Rls0XSooUSgpW2Uuc2lkZV0teSl9KTt2YXIgWD1vLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShlKTtyZXR1cm4gWS5wdXNoKGZ1bmN0aW9uKCl7dmFyIHIsbixhLHMsbD1lLnNpZGUuY2hhckF0KDApLGM9U1tlLnNpZGVdLmNoYXJBdCgwKSx1PUUuZ2V0UHhQb3NpdGlvbih0LGUpLGg9Im91dHNpZGUiPT09ZS50aWNrcz9lLnRpY2tsZW46MDtpZigoZS5hdXRvbWFyZ2lufHxYKSYmKCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZT9yPVEoInRpY2syIik6KHI9USgpLCJ4Ij09PWQmJiJiIj09PWwmJihlLl9kZXB0aD1NYXRoLm1heChyLndpZHRoPjA/ci5ib3R0b20tdTowLGgpKSkpLGUuYXV0b21hcmdpbil7bj17eDowLHk6MCxyOjAsbDowLHQ6MCxiOjB9O3ZhciBwPVswLDFdO2lmKCJ4Ij09PWQpe2lmKCJiIj09PWw/bltsXT1lLl9kZXB0aDoobltsXT1lLl9kZXB0aD1NYXRoLm1heChyLndpZHRoPjA/dS1yLnRvcDowLGgpLHAucmV2ZXJzZSgpKSxyLndpZHRoPjApe3ZhciB2PXIucmlnaHQtKGUuX29mZnNldCtlLl9sZW5ndGgpO3Y+MCYmKG4ueHI9MSxuLnI9dik7dmFyIG09ZS5fb2Zmc2V0LXIubGVmdDttPjAmJihuLnhsPTAsbi5sPW0pfX1lbHNlIGlmKCJsIj09PWw/bltsXT1lLl9kZXB0aD1NYXRoLm1heChyLmhlaWdodD4wP3Utci5sZWZ0OjAsaCk6KG5bbF09ZS5fZGVwdGg9TWF0aC5tYXgoci5oZWlnaHQ+MD9yLnJpZ2h0LXU6MCxoKSxwLnJldmVyc2UoKSksci5oZWlnaHQ+MCl7dmFyIHk9ci5ib3R0b20tKGUuX29mZnNldCtlLl9sZW5ndGgpO3k+MCYmKG4ueWI9MCxuLmI9eSk7dmFyIHg9ZS5fb2Zmc2V0LXIudG9wO3g+MCYmKG4ueXQ9MSxuLnQ9eCl9bltnXT0iZnJlZSI9PT1lLmFuY2hvcj9lLnBvc2l0aW9uOmUuX2FuY2hvckF4aXMuZG9tYWluW3BbMF1dLGUudGl0bGUudGV4dCE9PWYuX2RmbHRUaXRsZVtkXSYmKG5bbF0rPUsoZSkrKGUudGl0bGUuc3RhbmRvZmZ8fDApKSxlLm1pcnJvciYmImZyZWUiIT09ZS5hbmNob3ImJigoYT17eDowLHk6MCxyOjAsbDowLHQ6MCxiOjB9KVtjXT1lLmxpbmV3aWR0aCxlLm1pcnJvciYmITAhPT1lLm1pcnJvciYmKGFbY10rPWgpLCEwPT09ZS5taXJyb3J8fCJ0aWNrcyI9PT1lLm1pcnJvcj9hW2ddPWUuX2FuY2hvckF4aXMuZG9tYWluW3BbMV1dOiJhbGwiIT09ZS5taXJyb3ImJiJhbGx0aWNrcyIhPT1lLm1pcnJvcnx8KGFbZ109W2UuX2NvdW50ZXJEb21haW5NaW4sZS5fY291bnRlckRvbWFpbk1heF1bcFsxXV0pKX1YJiYocz1vLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJhdXRvTWFyZ2luT3B0cyIpKHQsZSkpLGkuYXV0b01hcmdpbih0LHR0KGUpLG4pLGkuYXV0b01hcmdpbih0LGV0KGUpLGEpLGkuYXV0b01hcmdpbih0LHJ0KGUpLHMpfSksci5za2lwVGl0bGV8fFgmJiJib3R0b20iPT09ZS5zaWRlfHxZLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuX2Z1bGxMYXlvdXQsYT1lLl9pZCxpPWEuY2hhckF0KDApLG89ZS50aXRsZS5mb250LnNpemU7aWYoZS50aXRsZS5oYXNPd25Qcm9wZXJ0eSgic3RhbmRvZmYiKSlyPWUuX2RlcHRoK2UudGl0bGUuc3RhbmRvZmYrSyhlKTtlbHNle2lmKCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZSlyPWUuX2RlcHRoO2Vsc2V7cj0xMCsxLjUqbysoZS5saW5ld2lkdGg/ZS5saW5ld2lkdGgtMTowKX1yKz0ieCI9PT1pPyJ0b3AiPT09ZS5zaWRlP28qKGUuc2hvd3RpY2tsYWJlbHM/MTowKTpvKihlLnNob3d0aWNrbGFiZWxzPzEuNTouNSk6InJpZ2h0Ij09PWUuc2lkZT9vKihlLnNob3d0aWNrbGFiZWxzPzE6LjUpOm8qKGUuc2hvd3RpY2tsYWJlbHM/LjU6MCl9dmFyIHMsbCx1LGYscD1FLmdldFB4UG9zaXRpb24odCxlKTsieCI9PT1pPyhsPWUuX29mZnNldCtlLl9sZW5ndGgvMix1PSJ0b3AiPT09ZS5zaWRlP3AtcjpwK3IpOih1PWUuX29mZnNldCtlLl9sZW5ndGgvMixsPSJyaWdodCI9PT1lLnNpZGU/cCtyOnAtcixzPXtyb3RhdGU6Ii05MCIsb2Zmc2V0OjB9KTtpZigibXVsdGljYXRlZ29yeSIhPT1lLnR5cGUpe3ZhciBkPWUuX3NlbGVjdGlvbnNbZS5faWQrInRpY2siXTtpZihmPXtzZWxlY3Rpb246ZCxzaWRlOmUuc2lkZX0sZCYmZC5ub2RlKCkmJmQubm9kZSgpLnBhcmVudE5vZGUpe3ZhciBnPWguZ2V0VHJhbnNsYXRlKGQubm9kZSgpLnBhcmVudE5vZGUpO2Yub2Zmc2V0TGVmdD1nLngsZi5vZmZzZXRUb3A9Zy55fWUudGl0bGUuaGFzT3duUHJvcGVydHkoInN0YW5kb2ZmIikmJihmLnBhZD0wKX1yZXR1cm4gYy5kcmF3KHQsYSsidGl0bGUiLHtwcm9wQ29udGFpbmVyOmUscHJvcE5hbWU6ZS5fbmFtZSsiLnRpdGxlLnRleHQiLHBsYWNlaG9sZGVyOm4uX2RmbHRUaXRsZVtpXSxhdm9pZDpmLHRyYW5zZm9ybTpzLGF0dHJpYnV0ZXM6e3g6bCx5OnUsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KX0odCxlKX0pLHMuc3luY09yQXN5bmMoWSl9fWZ1bmN0aW9uIFEodCl7dmFyIHI9cCsodHx8InRpY2siKTtyZXR1cm4gd1tyXXx8KHdbcl09ZnVuY3Rpb24odCxlKXt2YXIgcixuLGEsaTt0Ll9zZWxlY3Rpb25zW2VdLnNpemUoKT8ocj0xLzAsbj0tMS8wLGE9MS8wLGk9LTEvMCx0Ll9zZWxlY3Rpb25zW2VdLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0kKHRoaXMpLGU9aC5iQm94KHQubm9kZSgpLnBhcmVudE5vZGUpO3I9TWF0aC5taW4ocixlLnRvcCksbj1NYXRoLm1heChuLGUuYm90dG9tKSxhPU1hdGgubWluKGEsZS5sZWZ0KSxpPU1hdGgubWF4KGksZS5yaWdodCl9KSk6KHI9MCxuPTAsYT0wLGk9MCk7cmV0dXJue3RvcDpyLGJvdHRvbTpuLGxlZnQ6YSxyaWdodDppLGhlaWdodDpuLXIsd2lkdGg6aS1hfX0oZSxyKSksd1tyXX19LEUuZ2V0VGlja1NpZ25zPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2lkLmNoYXJBdCgwKSxyPXt4OiJ0b3AiLHk6InJpZ2h0In1bZV0sbj10LnNpZGU9PT1yPzE6LTEsYT1bLTEsMSxuLC1uXTtyZXR1cm4iaW5zaWRlIiE9PXQudGlja3M9PSgieCI9PT1lKSYmKGE9YS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuLXR9KSksdC5zaWRlJiZhLnB1c2goe2w6LTEsdDotMSxyOjEsYjoxfVt0LnNpZGUuY2hhckF0KDApXSksYX0sRS5tYWtlVHJhbnNGbj1mdW5jdGlvbih0KXt2YXIgZT10Ll9pZC5jaGFyQXQoMCkscj10Ll9vZmZzZXQ7cmV0dXJuIngiPT09ZT9mdW5jdGlvbihlKXtyZXR1cm4idHJhbnNsYXRlKCIrKHIrdC5sMnAoZS54KSkrIiwwKSJ9OmZ1bmN0aW9uKGUpe3JldHVybiJ0cmFuc2xhdGUoMCwiKyhyK3QubDJwKGUueCkpKyIpIn19LEUubWFrZVRpY2tQYXRoPWZ1bmN0aW9uKHQsZSxyLG4pe249dm9pZCAwIT09bj9uOnQudGlja2xlbjt2YXIgYT10Ll9pZC5jaGFyQXQoMCksaT0odC5saW5ld2lkdGh8fDEpLzI7cmV0dXJuIngiPT09YT8iTTAsIisoZStpKnIpKyJ2IituKnI6Ik0iKyhlK2kqcikrIiwwaCIrbipyfSxFLm1ha2VMYWJlbEZucz1mdW5jdGlvbih0LGUscil7dmFyIG49dC5faWQuY2hhckF0KDApLGk9ImJvdW5kYXJpZXMiIT09dC50aWNrc29uJiYib3V0c2lkZSI9PT10LnRpY2tzLG89MCxsPTA7aWYoaSYmKG8rPXQudGlja2xlbiksciYmIm91dHNpZGUiPT09dC50aWNrcyl7dmFyIGM9cy5kZWcycmFkKHIpO289dC50aWNrbGVuKk1hdGguY29zKGMpKzEsbD10LnRpY2tsZW4qTWF0aC5zaW4oYyl9dC5zaG93dGlja2xhYmVscyYmKGl8fHQuc2hvd2xpbmUpJiYobys9LjIqdC50aWNrZm9udC5zaXplKTt2YXIgdSxoLGYscCxkPXtsYWJlbFN0YW5kb2ZmOm8rPSh0LmxpbmV3aWR0aHx8MSkvMixsYWJlbFNoaWZ0Omx9O3JldHVybiJ4Ij09PW4/KHA9ImJvdHRvbSI9PT10LnNpZGU/MTotMSx1PWwqcCxoPWUrbypwLGY9ImJvdHRvbSI9PT10LnNpZGU/MTotLjIsZC54Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHgrdX0sZC55Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkraCt0LmZvbnRTaXplKmZ9LGQuYW5jaG9yRm49ZnVuY3Rpb24odCxlKXtyZXR1cm4gYShlKSYmMCE9PWUmJjE4MCE9PWU/ZSpwPDA/ImVuZCI6InN0YXJ0IjoibWlkZGxlIn0sZC5oZWlnaHRGbj1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHI8LTYwfHxyPjYwPy0uNSpuOiJ0b3AiPT09dC5zaWRlPy1uOjB9KToieSI9PT1uJiYocD0icmlnaHQiPT09dC5zaWRlPzE6LTEsdT1vLGg9LWwqcCxmPTkwPT09TWF0aC5hYnModC50aWNrYW5nbGUpPy41OjAsZC54Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHgrZSsodSt0LmZvbnRTaXplKmYpKnB9LGQueUZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR5K2grdC5mb250U2l6ZSpUfSxkLmFuY2hvckZuPWZ1bmN0aW9uKGUscil7cmV0dXJuIGEocikmJjkwPT09TWF0aC5hYnMocik/Im1pZGRsZSI6InJpZ2h0Ij09PXQuc2lkZT8ic3RhcnQiOiJlbmQifSxkLmhlaWdodEZuPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4ocio9ImxlZnQiPT09dC5zaWRlPzE6LTEpPC0zMD8tbjpyPDMwPy0uNSpuOjB9KSxkfSxFLmRyYXdUaWNrcz1mdW5jdGlvbih0LGUscil7cj1yfHx7fTt2YXIgbj1lLl9pZCsidGljayIsYT1yLmxheWVyLnNlbGVjdEFsbCgicGF0aC4iK24pLmRhdGEoZS50aWNrcz9yLnZhbHM6W10sSik7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKCJ0aWNrcyIsMSkuY2xhc3NlZCgiY3Jpc3AiLCExIT09ci5jcmlzcCkuY2FsbCh1LnN0cm9rZSxlLnRpY2tjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsaC5jcmlzcFJvdW5kKHQsZS50aWNrd2lkdGgsMSkrInB4IikuYXR0cigiZCIsci5wYXRoKSxhLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKX0sRS5kcmF3R3JpZD1mdW5jdGlvbih0LGUscil7cj1yfHx7fTt2YXIgbj1lLl9pZCsiZ3JpZCIsYT1yLnZhbHMsaT1yLmNvdW50ZXJBeGlzO2lmKCExPT09ZS5zaG93Z3JpZClhPVtdO2Vsc2UgaWYoaSYmRS5zaG91bGRTaG93WmVyb0xpbmUodCxlLGkpKWZvcih2YXIgbz0iYXJyYXkiPT09ZS50aWNrbW9kZSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10ueDtpZihvPyFsOk1hdGguYWJzKGwpPGUuZHRpY2svMTAwKXtpZihhPWEuc2xpY2UoMCxzKS5jb25jYXQoYS5zbGljZShzKzEpKSwhbylicmVhaztzLS19fXZhciBjPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShhLEopO2MuZXhpdCgpLnJlbW92ZSgpLGMuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG4sMSkuY2xhc3NlZCgiY3Jpc3AiLCExIT09ci5jcmlzcCksZS5fZ3c9aC5jcmlzcFJvdW5kKHQsZS5ncmlkd2lkdGgsMSksYy5hdHRyKCJ0cmFuc2Zvcm0iLHIudHJhbnNGbikuYXR0cigiZCIsci5wYXRoKS5jYWxsKHUuc3Ryb2tlLGUuZ3JpZGNvbG9yfHwiI2RkZCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGUuX2d3KyJweCIpLCJmdW5jdGlvbiI9PXR5cGVvZiByLnBhdGgmJmMuYXR0cigiZCIsci5wYXRoKX0sRS5kcmF3WmVyb0xpbmU9ZnVuY3Rpb24odCxlLHIpe3I9cnx8cjt2YXIgbj1lLl9pZCsiemwiLGE9RS5zaG91bGRTaG93WmVyb0xpbmUodCxlLHIuY291bnRlckF4aXMpLGk9ci5sYXllci5zZWxlY3RBbGwoInBhdGguIituKS5kYXRhKGE/W3t4OjAsaWQ6ZS5faWR9XTpbXSk7aS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKCJ6bCIsMSkuY2xhc3NlZCgiY3Jpc3AiLCExIT09ci5jcmlzcCkuZWFjaChmdW5jdGlvbigpe3IubGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBDLmlkU29ydCh0LmlkLGUuaWQpfSl9KSxpLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKS5hdHRyKCJkIixyLnBhdGgpLmNhbGwodS5zdHJva2UsZS56ZXJvbGluZWNvbG9yfHx1LmRlZmF1bHRMaW5lKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixoLmNyaXNwUm91bmQodCxlLnplcm9saW5ld2lkdGgsZS5fZ3d8fDEpKyJweCIpfSxFLmRyYXdMYWJlbHM9ZnVuY3Rpb24odCxlLHIpe3I9cnx8e307dmFyIGk9dC5fZnVsbExheW91dCxvPWUuX2lkLGM9by5jaGFyQXQoMCksdT1yLmNsc3x8bysidGljayIsZj1yLnZhbHMscD1yLmxhYmVsRm5zLGQ9ci5zZWNvbmRhcnk/MDplLnRpY2thbmdsZSxnPShlLl9wcmV2VGlja0FuZ2xlc3x8e30pW3VdLHY9ci5sYXllci5zZWxlY3RBbGwoImcuIit1KS5kYXRhKGUuc2hvd3RpY2tsYWJlbHM/ZjpbXSxKKSxtPVtdO2Z1bmN0aW9uIHkodCxlKXt0LmVhY2goZnVuY3Rpb24odCl7dmFyIGk9bi5zZWxlY3QodGhpcyksbz1pLnNlbGVjdCgiLnRleHQtbWF0aC1ncm91cCIpLHM9cC5hbmNob3JGbih0LGUpLGM9ci50cmFuc0ZuLmNhbGwoaS5ub2RlKCksdCkrKGEoZSkmJjAhPStlPyIgcm90YXRlKCIrZSsiLCIrcC54Rm4odCkrIiwiKyhwLnlGbih0KS10LmZvbnRTaXplLzIpKyIpIjoiIiksdT1sLmxpbmVDb3VudChpKSxmPUEqdC5mb250U2l6ZSxkPXAuaGVpZ2h0Rm4odCxhKGUpPytlOjAsKHUtMSkqZik7aWYoZCYmKGMrPSIgdHJhbnNsYXRlKDAsICIrZCsiKSIpLG8uZW1wdHkoKSlpLnNlbGVjdCgidGV4dCIpLmF0dHIoe3RyYW5zZm9ybTpjLCJ0ZXh0LWFuY2hvciI6c30pO2Vsc2V7dmFyIGc9aC5iQm94KG8ubm9kZSgpKS53aWR0aCp7ZW5kOi0uNSxzdGFydDouNX1bc107by5hdHRyKCJ0cmFuc2Zvcm0iLGMrKGc/InRyYW5zbGF0ZSgiK2crIiwwKSI6IiIpKX19KX12LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh1LDEpLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxhPXQuX3Byb21pc2VzLmxlbmd0aDtyLmNhbGwobC5wb3NpdGlvblRleHQscC54Rm4oZSkscC55Rm4oZSkpLmNhbGwoaC5mb250LGUuZm9udCxlLmZvbnRTaXplLGUuZm9udENvbG9yKS50ZXh0KGUudGV4dCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSx0Ll9wcm9taXNlc1thXT9tLnB1c2godC5fcHJvbWlzZXMucG9wKCkudGhlbihmdW5jdGlvbigpe3kocixkKX0pKTp5KHIsZCl9KSx2LmV4aXQoKS5yZW1vdmUoKSxyLnJlcG9zaXRpb25PblVwZGF0ZSYmdi5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLmNhbGwobC5wb3NpdGlvblRleHQscC54Rm4odCkscC55Rm4odCkpfSkseSh2LGcrMT9nOmQpO3ZhciB4PW51bGw7ZS5fc2VsZWN0aW9ucyYmKGUuX3NlbGVjdGlvbnNbdV09dik7dmFyIGI9W2Z1bmN0aW9uKCl7cmV0dXJuIG0ubGVuZ3RoJiZQcm9taXNlLmFsbChtKX1dO2UuYXV0b21hcmdpbiYmaS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudCYmOTA9PT1nPyh4PTkwLGIucHVzaChmdW5jdGlvbigpe3kodixnKX0pKTpiLnB1c2goZnVuY3Rpb24oKXtpZih5KHYsZCksZi5sZW5ndGgmJiJ4Ij09PWMmJiFhKGQpJiYoImxvZyIhPT1lLnR5cGV8fCJEIiE9PVN0cmluZyhlLmR0aWNrKS5jaGFyQXQoMCkpKXt4PTA7dmFyIHQsbj0wLGk9W107aWYodi5lYWNoKGZ1bmN0aW9uKHQpe249TWF0aC5tYXgobix0LmZvbnRTaXplKTt2YXIgcj1lLmwycCh0LngpLGE9JCh0aGlzKSxvPWguYkJveChhLm5vZGUoKSk7aS5wdXNoKHt0b3A6MCxib3R0b206MTAsaGVpZ2h0OjEwLGxlZnQ6ci1vLndpZHRoLzIscmlnaHQ6citvLndpZHRoLzIrMix3aWR0aDpvLndpZHRoKzJ9KX0pLCJib3VuZGFyaWVzIiE9PWUudGlja3NvbiYmIWUuc2hvd2RpdmlkZXJzfHxyLnNlY29uZGFyeSl7dmFyIG89Zi5sZW5ndGgsbD1NYXRoLmFicygoZltvLTFdLngtZlswXS54KSplLl9tKS8oby0xKTwyLjUqbnx8Im11bHRpY2F0ZWdvcnkiPT09ZS50eXBlO2Zvcih0PTA7dDxpLmxlbmd0aC0xO3QrKylpZihzLmJCb3hJbnRlcnNlY3QoaVt0XSxpW3QrMV0pKXt4PWw/OTA6MzA7YnJlYWt9fWVsc2V7dmFyIHU9Mjtmb3IoZS50aWNrcyYmKHUrPWUudGlja3dpZHRoLzIpLHQ9MDt0PGkubGVuZ3RoO3QrKyl7dmFyIHA9Zlt0XS54Ym5kLGc9aVt0XTtpZihudWxsIT09cFswXSYmZy5sZWZ0LWUubDJwKHBbMF0pPHV8fG51bGwhPT1wWzFdJiZlLmwycChwWzFdKS1nLnJpZ2h0PHUpe3g9OTA7YnJlYWt9fX14JiZ5KHYseCl9fSksZS5fdGlja0FuZ2xlcyYmYi5wdXNoKGZ1bmN0aW9uKCl7ZS5fdGlja0FuZ2xlc1t1XT1udWxsPT09eD9hKGQpP2Q6MDp4fSk7dmFyIF89cy5zeW5jT3JBc3luYyhiKTtyZXR1cm4gXyYmXy50aGVuJiZ0Ll9wcm9taXNlcy5wdXNoKF8pLF99LEUuZ2V0UHhQb3NpdGlvbj1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5fZnVsbExheW91dC5fc2l6ZSxhPWUuX2lkLmNoYXJBdCgwKSxpPWUuc2lkZTtyZXR1cm4iZnJlZSIhPT1lLmFuY2hvcj9yPWUuX2FuY2hvckF4aXM6IngiPT09YT9yPXtfb2Zmc2V0Om4udCsoMS0oZS5wb3NpdGlvbnx8MCkpKm4uaCxfbGVuZ3RoOjB9OiJ5Ij09PWEmJihyPXtfb2Zmc2V0Om4ubCsoZS5wb3NpdGlvbnx8MCkqbi53LF9sZW5ndGg6MH0pLCJ0b3AiPT09aXx8ImxlZnQiPT09aT9yLl9vZmZzZXQ6ImJvdHRvbSI9PT1pfHwicmlnaHQiPT09aT9yLl9vZmZzZXQrci5fbGVuZ3RoOnZvaWQgMH0sRS5zaG91bGRTaG93WmVyb0xpbmU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMuc2ltcGxlTWFwKGUucmFuZ2UsZS5yMmwpO3JldHVybiBuWzBdKm5bMV08PTAmJmUuemVyb2xpbmUmJigibGluZWFyIj09PWUudHlwZXx8Ii0iPT09ZS50eXBlKSYmKFEoZSwwKXx8IWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXIuX21haW5BeGlzO2lmKCFhKXJldHVybjt2YXIgaT10Ll9mdWxsTGF5b3V0LG89ZS5faWQuY2hhckF0KDApLHM9RS5jb3VudGVyTGV0dGVyKGUuX2lkKSxsPWUuX29mZnNldCsoTWF0aC5hYnMoblswXSk8TWF0aC5hYnMoblsxXSk9PSgieCI9PT1vKT8wOmUuX2xlbmd0aCk7ZnVuY3Rpb24gYyh0KXtpZighdC5zaG93bGluZXx8IXQubGluZXdpZHRoKXJldHVybiExO3ZhciByPU1hdGgubWF4KCh0LmxpbmV3aWR0aCtlLnplcm9saW5ld2lkdGgpLzIsMSk7ZnVuY3Rpb24gbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJk1hdGguYWJzKHQtbCk8cn1pZihuKHQuX21haW5MaW5lUG9zaXRpb24pfHxuKHQuX21haW5NaXJyb3JQb3NpdGlvbikpcmV0dXJuITA7dmFyIGE9dC5fbGluZXBvc2l0aW9uc3x8e307Zm9yKHZhciBpIGluIGEpaWYobihhW2ldWzBdKXx8bihhW2ldWzFdKSlyZXR1cm4hMH12YXIgdT1pLl9wbG90c1tyLl9tYWluU3VicGxvdF07aWYoISh1Lm1haW5wbG90aW5mb3x8dSkub3ZlcmxheXMubGVuZ3RoKXJldHVybiBjKHIpO2Zvcih2YXIgaD1FLmxpc3QodCxzKSxmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBwPWhbZl07aWYocC5fbWFpbkF4aXM9PT1hJiZjKHApKXJldHVybiEwfX0odCxlLHIsbil8fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxEYXRhLG49ZS5fbWFpblN1YnBsb3QsYT1lLl9pZC5jaGFyQXQoMCksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgcz1yW2ldO2lmKCEwPT09cy52aXNpYmxlJiZzLnhheGlzK3MueWF4aXM9PT1uKXtpZihvLnRyYWNlSXMocywiYmFyLWxpa2UiKSYmcy5vcmllbnRhdGlvbj09PXt4OiJoIix5OiJ2In1bYV0pcmV0dXJuITA7aWYocy5maWxsJiZzLmZpbGwuY2hhckF0KHMuZmlsbC5sZW5ndGgtMSk9PT1hKXJldHVybiEwfX1yZXR1cm4hMX0odCxlKSl9LEUuY2xpcEVuZHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIFEodCxlLngpfSl9LEUuYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1FLmxpc3QodCwiIiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uYXV0b21hcmdpbiYmKGkuYWxsb3dBdXRvTWFyZ2luKHQsdHQobikpLG4ubWlycm9yJiZpLmFsbG93QXV0b01hcmdpbih0LGV0KG4pKSksby5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikobikmJmkuYWxsb3dBdXRvTWFyZ2luKHQscnQobikpfX0sRS5zd2FwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhPVtdO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPVtdLG89dC5fZnVsbERhdGFbZVtyXV0ueGF4aXMscz10Ll9mdWxsRGF0YVtlW3JdXS55YXhpcztpZihvJiZzKXtmb3Iobj0wO248YS5sZW5ndGg7bisrKS0xPT09YVtuXS54LmluZGV4T2YobykmJi0xPT09YVtuXS55LmluZGV4T2Yocyl8fGkucHVzaChuKTtpZihpLmxlbmd0aCl7dmFyIGwsYz1hW2lbMF1dO2lmKGkubGVuZ3RoPjEpZm9yKG49MTtuPGkubGVuZ3RoO24rKylsPWFbaVtuXV0sbnQoYy54LGwueCksbnQoYy55LGwueSk7bnQoYy54LFtvXSksbnQoYy55LFtzXSl9ZWxzZSBhLnB1c2goe3g6W29dLHk6W3NdfSl9fXJldHVybiBhfSh0LGUpLG49MDtuPHIubGVuZ3RoO24rKylhdCh0LHJbbl0ueCxyW25dLnkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6Njc5LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2ODYsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY5MywiLi4vLi4vbGliIjo3MTcsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQxLCIuLi8uLi9wbG90cy9wbG90cyI6ODI2LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuL2F1dG9yYW5nZSI6NzY0LCIuL2F4aXNfYXV0b3R5cGUiOjc2NiwiLi9heGlzX2lkcyI6NzY4LCIuL2NsZWFuX3RpY2tzIjo3NzAsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3NywiLi9zZXRfY29udmVydCI6NzgzLGQzOjE2NSwiZmFzdC1pc251bWVyaWMiOjIyOH1dLDc2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIShyPXJ8fHt9KS5ub011bHRpQ2F0ZWdvcnkmJihvPXQsYS5pc0FycmF5T3JUeXBlZEFycmF5KG9bMF0pJiZhLmlzQXJyYXlPclR5cGVkQXJyYXkob1sxXSkpPyJtdWx0aWNhdGVnb3J5IjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1heCgxLCh0Lmxlbmd0aC0xKS8xZTMpLGk9MCxvPTAscz17fSxsPTA7bDx0Lmxlbmd0aDtsKz1yKXt2YXIgYz10W01hdGgucm91bmQobCldLHU9U3RyaW5nKGMpO3NbdV18fChzW3VdPTEsYS5pc0RhdGVUaW1lKGMsZSkmJihpKz0xKSxuKGMpJiYobys9MSkpfXJldHVybiBpPjIqb30odCxlKT8iZGF0ZSI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU1hdGgubWF4KDEsKHQubGVuZ3RoLTEpLzFlMykscj0wLG49MCxvPXt9LHM9MDtzPHQubGVuZ3RoO3MrPWUpe3ZhciBsPXRbTWF0aC5yb3VuZChzKV0sYz1TdHJpbmcobCk7b1tjXXx8KG9bY109MSwiYm9vbGVhbiI9PXR5cGVvZiBsP24rKzphLmNsZWFuTnVtYmVyKGwpIT09aT9yKys6InN0cmluZyI9PXR5cGVvZiBsJiZuKyspfXJldHVybiBuPjIqcn0odCk/ImNhdGVnb3J5IjpmdW5jdGlvbih0KXtpZighdClyZXR1cm4hMTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZihuKHRbZV0pKXJldHVybiEwO3JldHVybiExfSh0KT8ibGluZWFyIjoiLSI7dmFyIG99fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY5MywiLi4vLi4vbGliIjo3MTcsImZhc3QtaXNudW1lcmljIjoyMjh9XSw3Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi90aWNrX3ZhbHVlX2RlZmF1bHRzIikscz10KCIuL3RpY2tfbWFya19kZWZhdWx0cyIpLGw9dCgiLi90aWNrX2xhYmVsX2RlZmF1bHRzIiksYz10KCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIiksdT10KCIuL2xpbmVfZ3JpZF9kZWZhdWx0cyIpLGg9dCgiLi9zZXRfY29udmVydCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmLHApe3ZhciBkPWYubGV0dGVyLGc9Zi5mb250fHx7fSx2PWYuc3Bsb21TdGFzaHx8e30sbT1yKCJ2aXNpYmxlIiwhZi52aXNpYmxlRGZsdCkseT1lLnR5cGU7ImRhdGUiPT09eSYmbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIikodCxlLCJjYWxlbmRhciIsZi5jYWxlbmRhcik7aChlLHApO3ZhciB4PSFlLmlzVmFsaWRSYW5nZSh0LnJhbmdlKTt4JiZmLnJldmVyc2VEZmx0JiYoeD0icmV2ZXJzZWQiKSwhcigiYXV0b3JhbmdlIix4KXx8ImxpbmVhciIhPT15JiYiLSIhPT15fHxyKCJyYW5nZW1vZGUiKSxyKCJyYW5nZSIpLGUuY2xlYW5SYW5nZSgpLGModCxlLHIsZiksImNhdGVnb3J5Ij09PXl8fGYubm9Ib3Zlcnx8cigiaG92ZXJmb3JtYXQiKTt2YXIgYj1yKCJjb2xvciIpLF89YiE9PWkuY29sb3IuZGZsdD9iOmcuY29sb3Isdz12LmxhYmVsfHxwLl9kZmx0VGl0bGVbZF07aWYobCh0LGUscix5LGYse3Bhc3M6MX0pLCFtKXJldHVybiBlO3IoInRpdGxlLnRleHQiLHcpLGEuY29lcmNlRm9udChyLCJ0aXRsZS5mb250Iix7ZmFtaWx5OmcuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqZy5zaXplKSxjb2xvcjpffSksbyh0LGUscix5KSxsKHQsZSxyLHksZix7cGFzczoyfSkscyh0LGUscixmKSx1KHQsZSxyLHtkZmx0Q29sb3I6YixiZ0NvbG9yOmYuYmdDb2xvcixzaG93R3JpZDpmLnNob3dHcmlkLGF0dHJpYnV0ZXM6aX0pLChlLnNob3dsaW5lfHxlLnRpY2tzKSYmcigibWlycm9yIiksZi5hdXRvbWFyZ2luJiZyKCJhdXRvbWFyZ2luIik7dmFyIGssVD0ibXVsdGljYXRlZ29yeSI9PT1lLnR5cGU7Zi5ub1RpY2tzb258fCJjYXRlZ29yeSIhPT1lLnR5cGUmJiFUfHwhZS50aWNrcyYmIWUuc2hvd2dyaWR8fChUJiYoaz0iYm91bmRhcmllcyIpLHIoInRpY2tzb24iLGspKTtUJiYocigic2hvd2RpdmlkZXJzIikmJihyKCJkaXZpZGVyY29sb3IiKSxyKCJkaXZpZGVyd2lkdGgiKSkpO3JldHVybiBlfX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6NzY5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo3NzcsIi4vbGluZV9ncmlkX2RlZmF1bHRzIjo3NzksIi4vc2V0X2NvbnZlcnQiOjc4MywiLi90aWNrX2xhYmVsX2RlZmF1bHRzIjo3ODQsIi4vdGlja19tYXJrX2RlZmF1bHRzIjo3ODUsIi4vdGlja192YWx1ZV9kZWZhdWx0cyI6Nzg2fV0sNzY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuL2NvbnN0YW50cyIpO3IuaWQybmFtZT1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQmJnQubWF0Y2goYS5BWF9JRF9QQVRURVJOKSl7dmFyIGU9dC5zdWJzdHIoMSk7cmV0dXJuIjEiPT09ZSYmKGU9IiIpLHQuY2hhckF0KDApKyJheGlzIitlfX0sci5uYW1lMmlkPWZ1bmN0aW9uKHQpe2lmKHQubWF0Y2goYS5BWF9OQU1FX1BBVFRFUk4pKXt2YXIgZT10LnN1YnN0cig1KTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksdC5jaGFyQXQoMCkrZX19LHIuY2xlYW5JZD1mdW5jdGlvbih0LGUpe2lmKHQubWF0Y2goYS5BWF9JRF9QQVRURVJOKSYmKCFlfHx0LmNoYXJBdCgwKT09PWUpKXt2YXIgcj10LnN1YnN0cigxKS5yZXBsYWNlKC9eMCsvLCIiKTtyZXR1cm4iMSI9PT1yJiYocj0iIiksdC5jaGFyQXQoMCkrcn19LHIubGlzdD1mdW5jdGlvbih0LGUsbil7dmFyIGE9dC5fZnVsbExheW91dDtpZighYSlyZXR1cm5bXTt2YXIgaSxvPXIubGlzdElkcyh0LGUpLHM9bmV3IEFycmF5KG8ubGVuZ3RoKTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgbD1vW2ldO3NbaV09YVtsLmNoYXJBdCgwKSsiYXhpcyIrbC5zdWJzdHIoMSldfWlmKCFuKXt2YXIgYz1hLl9zdWJwbG90cy5nbDNkfHxbXTtmb3IoaT0wO2k8Yy5sZW5ndGg7aSsrKXt2YXIgdT1hW2NbaV1dO2U/cy5wdXNoKHVbZSsiYXhpcyJdKTpzLnB1c2godS54YXhpcyx1LnlheGlzLHUuemF4aXMpfX1yZXR1cm4gc30sci5saXN0SWRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtpZighcilyZXR1cm5bXTt2YXIgbj1yLl9zdWJwbG90cztyZXR1cm4gZT9uW2UrImF4aXMiXTpuLnhheGlzLmNvbmNhdChuLnlheGlzKX0sci5nZXRGcm9tSWQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPXQuX2Z1bGxMYXlvdXQ7cmV0dXJuIngiPT09bj9lPWUucmVwbGFjZSgveVswLTldKi8sIiIpOiJ5Ij09PW4mJihlPWUucmVwbGFjZSgveFswLTldKi8sIiIpKSxhW3IuaWQybmFtZShlKV19LHIuZ2V0RnJvbVRyYWNlPWZ1bmN0aW9uKHQsZSxhKXt2YXIgaT10Ll9mdWxsTGF5b3V0LG89bnVsbDtpZihuLnRyYWNlSXMoZSwiZ2wzZCIpKXt2YXIgcz1lLnNjZW5lOyJzY2VuZSI9PT1zLnN1YnN0cigwLDUpJiYobz1pW3NdW2ErImF4aXMiXSl9ZWxzZSBvPXIuZ2V0RnJvbUlkKHQsZVthKyJheGlzIl18fGEpO3JldHVybiBvfSxyLmlkU29ydD1mdW5jdGlvbih0LGUpe3ZhciByPXQuY2hhckF0KDApLG49ZS5jaGFyQXQoMCk7cmV0dXJuIHIhPT1uP3I+bj8xOi0xOisodC5zdWJzdHIoMSl8fDEpLSsoZS5zdWJzdHIoMSl8fDEpfSxyLmdldEF4aXNHcm91cD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9heGlzTWF0Y2hHcm91cHMsbj0wO248ci5sZW5ndGg7bisrKXtpZihyW25dW2VdKXJldHVybiJnIitufXJldHVybiBlfX0seyIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuL2NvbnN0YW50cyI6NzcxfV0sNzY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZigiY2F0ZWdvcnkiPT09ZS50eXBlKXt2YXIgYSxpPXQuY2F0ZWdvcnlhcnJheSxvPUFycmF5LmlzQXJyYXkoaSkmJmkubGVuZ3RoPjA7byYmKGE9ImFycmF5Iik7dmFyIHMsbD1yKCJjYXRlZ29yeW9yZGVyIixhKTsiYXJyYXkiPT09bCYmKHM9cigiY2F0ZWdvcnlhcnJheSIpKSxvfHwiYXJyYXkiIT09bHx8KGw9ZS5jYXRlZ29yeW9yZGVyPSJ0cmFjZSIpLCJ0cmFjZSI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPVtdOiJhcnJheSI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPXMuc2xpY2UoKToocz1mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxpPWUuZGF0YUF0dHJ8fHQuX2lkLmNoYXJBdCgwKSxvPXt9O2lmKGUuYXhEYXRhKXI9ZS5heERhdGE7ZWxzZSBmb3Iocj1bXSxuPTA7bjxlLmRhdGEubGVuZ3RoO24rKyl7dmFyIHM9ZS5kYXRhW25dO3NbaSsiYXhpcyJdPT09dC5faWQmJnIucHVzaChzKX1mb3Iobj0wO248ci5sZW5ndGg7bisrKXt2YXIgbD1yW25dW2ldO2ZvcihhPTA7YTxsLmxlbmd0aDthKyspe3ZhciBjPWxbYV07bnVsbCE9YyYmKG9bY109MSl9fXJldHVybiBPYmplY3Qua2V5cyhvKX0oZSxuKS5zb3J0KCksImNhdGVnb3J5IGFzY2VuZGluZyI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPXM6ImNhdGVnb3J5IGRlc2NlbmRpbmciPT09bCYmKGUuX2luaXRpYWxDYXRlZ29yaWVzPXMucmV2ZXJzZSgpKSl9fX0se31dLDc3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuT05FREFZO3IuZHRpY2s9ZnVuY3Rpb24odCxlKXt2YXIgcj0ibG9nIj09PWUsYT0iZGF0ZSI9PT1lLG89ImNhdGVnb3J5Ij09PWUscz1hP2k6MTtpZighdClyZXR1cm4gcztpZihuKHQpKXJldHVybih0PU51bWJlcih0KSk8PTA/czpvP01hdGgubWF4KDEsTWF0aC5yb3VuZCh0KSk6YT9NYXRoLm1heCguMSx0KTp0O2lmKCJzdHJpbmciIT10eXBlb2YgdHx8IWEmJiFyKXJldHVybiBzO3ZhciBsPXQuY2hhckF0KDApLGM9dC5zdWJzdHIoMSk7cmV0dXJuKGM9bihjKT9OdW1iZXIoYyk6MCk8PTB8fCEoYSYmIk0iPT09bCYmYz09PU1hdGgucm91bmQoYyl8fHImJiJMIj09PWx8fHImJiJEIj09PWwmJigxPT09Y3x8Mj09PWMpKT9zOnR9LHIudGljazA9ZnVuY3Rpb24odCxlLHIsaSl7cmV0dXJuImRhdGUiPT09ZT9hLmNsZWFuRGF0ZSh0LGEuZGF0ZVRpY2swKHIpKToiRDEiIT09aSYmIkQyIiE9PWk/bih0KT9OdW1iZXIodCk6MDp2b2lkIDB9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY5MywiLi4vLi4vbGliIjo3MTcsImZhc3QtaXNudW1lcmljIjoyMjh9XSw3NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL3JlZ2V4IikuY291bnRlcjtlLmV4cG9ydHM9e2lkUmVnZXg6e3g6bigieCIpLHk6bigieSIpfSxhdHRyUmVnZXg6bigiW3h5XWF4aXMiKSx4QXhpc01hdGNoOm4oInhheGlzIikseUF4aXNNYXRjaDpuKCJ5YXhpcyIpLEFYX0lEX1BBVFRFUk46L15beHl6XVswLTldKiQvLEFYX05BTUVfUEFUVEVSTjovXlt4eXpdYXhpc1swLTldKiQvLFNVQlBMT1RfUEFUVEVSTjovXngoWzAtOV0qKXkoWzAtOV0qKSQvLE1JTkRSQUc6OCxNSU5TRUxFQ1Q6MTIsTUlOWk9PTToyMCxEUkFHR0VSU0laRToyMCxCRU5EUFg6MS41LFJFRFJBV0RFTEFZOjUwLFNFTEVDVERFTEFZOjEwMCxTRUxFQ1RJRDoiLXNlbGVjdCIsREZMVFJBTkdFWDpbLTEsNl0sREZMVFJBTkdFWTpbLTEsNF0sdHJhY2VMYXllckNsYXNzZXM6WyJpbWFnZWxheWVyIiwiaGVhdG1hcGxheWVyIiwiY29udG91cmNhcnBldGxheWVyIiwiY29udG91cmxheWVyIiwiZnVubmVsbGF5ZXIiLCJ3YXRlcmZhbGxsYXllciIsImJhcmxheWVyIiwiY2FycGV0bGF5ZXIiLCJ2aW9saW5sYXllciIsImJveGxheWVyIiwib2hsY2xheWVyIiwic2NhdHRlcmNhcnBldGxheWVyIiwic2NhdHRlcmxheWVyIl0sY2xpcE9uQXhpc0ZhbHNlUXVlcnk6WyIuc2NhdHRlcmxheWVyIiwiLmJhcmxheWVyIiwiLmZ1bm5lbGxheWVyIiwiLndhdGVyZmFsbGxheWVyIl0sbGF5ZXJWYWx1ZTJsYXllckNsYXNzOnsiYWJvdmUgdHJhY2VzIjoiYWJvdmUiLCJiZWxvdyB0cmFjZXMiOiJiZWxvdyJ9fX0seyIuLi8uLi9saWIvcmVnZXgiOjczM31dLDc3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4vYXhpc19pZHMiKS5pZDJuYW1lLGk9dCgiLi9zY2FsZV96b29tIiksbz10KCIuL2F1dG9yYW5nZSIpLm1ha2VQYWRGbixzPXQoIi4vYXV0b3JhbmdlIikuY29uY2F0RXh0cmVtZXMsbD10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQUxNT1NUX0VRVUFMLGM9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkZST01fQkw7ZnVuY3Rpb24gdSh0LGUscixuLGkpe3ZhciBvLHMsbCxjLHU9InJhbmdlIiE9PWksaD1uW2EoZSldLnR5cGUsZj1bXTtmb3Iocz0wO3M8ci5sZW5ndGg7cysrKWlmKChsPXJbc10pIT09ZSYmKGM9blthKGwpXSkudHlwZT09PWgpaWYoYy5maXhlZHJhbmdlKXtpZih1JiZjLmFuY2hvcil7blthKGMuYW5jaG9yKV0uZml4ZWRyYW5nZSYmZi5wdXNoKGwpfX1lbHNlIGYucHVzaChsKTtmb3Iobz0wO288dC5sZW5ndGg7bysrKWlmKHRbb11bZV0pe3ZhciBwPXRbb10sZD1bXTtmb3Iocz0wO3M8Zi5sZW5ndGg7cysrKXBbbD1mW3NdXXx8ZC5wdXNoKGwpO3JldHVybntsaW5rYWJsZUF4ZXM6ZCx0aGlzR3JvdXA6cH19cmV0dXJue2xpbmthYmxlQXhlczpmLHRoaXNHcm91cDpudWxsfX1mdW5jdGlvbiBoKHQsZSxyLG4sYSl7dmFyIGksbyxzLGwsYztudWxsPT09ZT8oKGU9e30pW3JdPTEsYz10Lmxlbmd0aCx0LnB1c2goZSkpOmM9dC5pbmRleE9mKGUpO3ZhciB1PU9iamVjdC5rZXlzKGUpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaWYocz10W2ldLGkhPT1jJiZzW25dKXt2YXIgaD1zW25dO2ZvcihvPTA7bzx1Lmxlbmd0aDtvKyspc1tsPXVbb11dPWgqYSplW2xdO3JldHVybiB2b2lkIHQuc3BsaWNlKGMsMSl9aWYoMSE9PWEpZm9yKG89MDtvPHUubGVuZ3RoO28rKyllW3Vbb11dKj1hO2Vbbl09MX1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9dC5faW5wdXREb21haW4sbj1jW3QuY29uc3RyYWludG93YXJkXSxhPXJbMF0rKHJbMV0tclswXSkqbjt0LmRvbWFpbj10Ll9pbnB1dC5kb21haW49W2ErKHJbMF0tYSkvZSxhKyhyWzFdLWEpL2VdLHQuc2V0U2NhbGUoKX1yLmhhbmRsZUNvbnN0cmFpbnREZWZhdWx0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgaSxvLHMsbCxjPWEuYWxsQXhpc0lkcyxmPWEubGF5b3V0T3V0LHA9YS5zY2FsZWFuY2hvckRmbHQsZD1hLmNvbnN0cmFpbkRmbHQsZz1mLl9heGlzQ29uc3RyYWludEdyb3Vwcyx2PWYuX2F4aXNNYXRjaEdyb3VwcyxtPWUuX2lkLHk9bS5jaGFyQXQoMCkseD0oKGYuX3NwbG9tQXhlc3x8e30pW3ldfHx7fSlbbV18fHt9LGI9ZS5faWQsXz1iLmNoYXJBdCgwKSx3PXIoImNvbnN0cmFpbiIsZCk7aWYobi5jb2VyY2UodCxlLHtjb25zdHJhaW50b3dhcmQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczoieCI9PT1fP1sibGVmdCIsImNlbnRlciIsInJpZ2h0Il06WyJib3R0b20iLCJtaWRkbGUiLCJ0b3AiXSxkZmx0OiJ4Ij09PV8/ImNlbnRlciI6Im1pZGRsZSJ9fSwiY29uc3RyYWludG93YXJkIiksIXQubWF0Y2hlcyYmIXgubWF0Y2hlc3x8ZS5maXhlZHJhbmdlfHwobz11KHYsYixjLGYpLGk9bi5jb2VyY2UodCxlLHttYXRjaGVzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6by5saW5rYWJsZUF4ZXN8fFtdLGRmbHQ6eC5tYXRjaGVzfX0sIm1hdGNoZXMiKSksaXx8ZS5maXhlZHJhbmdlJiYiZG9tYWluIiE9PXd8fCF0LnNjYWxlYW5jaG9yJiYhcHx8KGw9dShnLGIsYyxmLHcpLHM9bi5jb2VyY2UodCxlLHtzY2FsZWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOmwubGlua2FibGVBeGVzfHxbXX19LCJzY2FsZWFuY2hvciIscCkpLGk/KGRlbGV0ZSBlLmNvbnN0cmFpbixoKHYsby50aGlzR3JvdXAsYixpLDEpKTotMSE9PWMuaW5kZXhPZih0Lm1hdGNoZXMpJiZuLndhcm4oImlnbm9yZWQgIitlLl9uYW1lKycubWF0Y2hlczogIicrdC5tYXRjaGVzKyciIHRvIGF2b2lkIGVpdGhlciBhbiBpbmZpbml0ZSBsb29wIG9yIGJlY2F1c2UgdGhlIHRhcmdldCBheGlzIGhhcyBmaXhlZCByYW5nZS4nKSxzKXt2YXIgaz1yKCJzY2FsZXJhdGlvIik7a3x8KGs9ZS5zY2FsZXJhdGlvPTEpLGgoZyxsLnRoaXNHcm91cCxiLHMsayl9ZWxzZS0xIT09Yy5pbmRleE9mKHQuc2NhbGVhbmNob3IpJiZuLndhcm4oImlnbm9yZWQgIitlLl9uYW1lKycuc2NhbGVhbmNob3I6ICInK3Quc2NhbGVhbmNob3IrJyIgdG8gYXZvaWQgZWl0aGVyIGFuIGluZmluaXRlIGxvb3AgYW5kIHBvc3NpYmx5IGluY29uc2lzdGVudCBzY2FsZXJhdGlvcywgb3IgYmVjYXVzZSB0aGUgdGFyZ2V0IGF4aXMgaGFzIGZpeGVkIHJhbmdlIG9yIHRoaXMgYXhpcyBkZWNsYXJlcyBhICptYXRjaGVzKiBjb25zdHJhaW50LicpfSxyLmVuZm9yY2U9ZnVuY3Rpb24odCl7dmFyIGUscixuLGMsdSxoLHAsZD10Ll9mdWxsTGF5b3V0LGc9ZC5fYXhpc0NvbnN0cmFpbnRHcm91cHN8fFtdO2ZvcihlPTA7ZTxnLmxlbmd0aDtlKyspe3ZhciB2PWdbZV0sbT1PYmplY3Qua2V5cyh2KSx5PTEvMCx4PTAsYj0xLzAsXz17fSx3PXt9LGs9ITE7Zm9yKHI9MDtyPG0ubGVuZ3RoO3IrKyl3W249bVtyXV09Yz1kW2EobildLGMuX2lucHV0RG9tYWluP2MuZG9tYWluPWMuX2lucHV0RG9tYWluLnNsaWNlKCk6Yy5faW5wdXREb21haW49Yy5kb21haW4uc2xpY2UoKSxjLl9pbnB1dFJhbmdlfHwoYy5faW5wdXRSYW5nZT1jLnJhbmdlLnNsaWNlKCkpLGMuc2V0U2NhbGUoKSxfW25dPXU9TWF0aC5hYnMoYy5fbSkvdltuXSx5PU1hdGgubWluKHksdSksImRvbWFpbiIhPT1jLmNvbnN0cmFpbiYmYy5fY29uc3RyYWludFNocmlua2FibGV8fChiPU1hdGgubWluKGIsdSkpLGRlbGV0ZSBjLl9jb25zdHJhaW50U2hyaW5rYWJsZSx4PU1hdGgubWF4KHgsdSksImRvbWFpbiI9PT1jLmNvbnN0cmFpbiYmKGs9ITApO2lmKCEoeT5sKngpfHxrKWZvcihyPTA7cjxtLmxlbmd0aDtyKyspaWYodT1fW249bVtyXV0saD0oYz13W25dKS5jb25zdHJhaW4sdSE9PWJ8fCJkb21haW4iPT09aClpZihwPXUvYiwicmFuZ2UiPT09aClpKGMscCk7ZWxzZXt2YXIgVD1jLl9pbnB1dERvbWFpbixNPShjLmRvbWFpblsxXS1jLmRvbWFpblswXSkvKFRbMV0tVFswXSksQT0oYy5yMmwoYy5yYW5nZVsxXSktYy5yMmwoYy5yYW5nZVswXSkpLyhjLnIybChjLl9pbnB1dFJhbmdlWzFdKS1jLnIybChjLl9pbnB1dFJhbmdlWzBdKSk7aWYoKHAvPU0pKkE8MSl7Yy5kb21haW49Yy5faW5wdXQuZG9tYWluPVQuc2xpY2UoKSxpKGMscCk7Y29udGludWV9aWYoQTwxJiYoYy5yYW5nZT1jLl9pbnB1dC5yYW5nZT1jLl9pbnB1dFJhbmdlLnNsaWNlKCkscCo9QSksYy5hdXRvcmFuZ2Upe3ZhciBTPWMucjJsKGMucmFuZ2VbMF0pLEU9Yy5yMmwoYy5yYW5nZVsxXSksTD0oUytFKS8yLEM9TCxQPUwsTz1NYXRoLmFicyhFLUwpLHo9TC1PKnAqMS4wMDAxLEk9TCtPKnAqMS4wMDAxLEQ9byhjKTtmKGMscCk7dmFyIFIsRixCPU1hdGguYWJzKGMuX20pLE49cyh0LGMpLGo9Ti5taW4sVj1OLm1heDtmb3IoRj0wO0Y8ai5sZW5ndGg7RisrKShSPWpbRl0udmFsLUQoaltGXSkvQik+eiYmUjxDJiYoQz1SKTtmb3IoRj0wO0Y8Vi5sZW5ndGg7RisrKShSPVZbRl0udmFsK0QoVltGXSkvQik8SSYmUj5QJiYoUD1SKTtwLz0oUC1DKS8oMipPKSxDPWMubDJyKEMpLFA9Yy5sMnIoUCksYy5yYW5nZT1jLl9pbnB1dC5yYW5nZT1TPEU/W0MsUF06W1AsQ119ZihjLHApfX19LHIuY2xlYW49ZnVuY3Rpb24odCxlKXtpZihlLl9pbnB1dERvbWFpbil7Zm9yKHZhciByPSExLG49ZS5faWQsYT10Ll9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3VwcyxpPTA7aTxhLmxlbmd0aDtpKyspaWYoYVtpXVtuXSl7cj0hMDticmVha31yJiYiZG9tYWluIj09PWUuY29uc3RyYWlufHwoZS5faW5wdXQuZG9tYWluPWUuZG9tYWluPWUuX2lucHV0RG9tYWluLGRlbGV0ZSBlLl9pbnB1dERvbWFpbil9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2ODYsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY5MywiLi4vLi4vbGliIjo3MTcsIi4vYXV0b3JhbmdlIjo3NjQsIi4vYXhpc19pZHMiOjc2OCwiLi9zY2FsZV96b29tIjo3ODF9XSw3NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoInRpbnljb2xvcjIiKSxpPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksdT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxoPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxmPXQoIi4vYXhlcyIpLHA9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGQ9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLGc9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkZST01fVEwsdj10KCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiKSxtPXQoIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIikucmVkcmF3UmVnbFRyYWNlcyx5PXQoIi4uL3Bsb3RzIikseD10KCIuL2F4aXNfaWRzIikuZ2V0RnJvbUlkLGI9dCgiLi9zZWxlY3QiKS5wcmVwU2VsZWN0LF89dCgiLi9zZWxlY3QiKS5jbGVhclNlbGVjdCx3PXQoIi4vc2VsZWN0Iikuc2VsZWN0T25DbGljayxrPXQoIi4vc2NhbGVfem9vbSIpLFQ9dCgiLi9jb25zdGFudHMiKSxNPVQuTUlORFJBRyxBPVQuTUlOWk9PTSxTPSEwO2Z1bmN0aW9uIEUodCxlLHIsbil7dmFyIGE9cy5lbnN1cmVTaW5nbGUodC5kcmFnbGF5ZXIsZSxyLGZ1bmN0aW9uKGUpe2UuY2xhc3NlZCgiZHJhZyIsITApLnN0eWxlKHtmaWxsOiJ0cmFuc3BhcmVudCIsInN0cm9rZS13aWR0aCI6MH0pLmF0dHIoImRhdGEtc3VicGxvdCIsdC5pZCl9KTtyZXR1cm4gYS5jYWxsKHAsbiksYS5ub2RlKCl9ZnVuY3Rpb24gTCh0LGUscixhLGksbyxzKXt2YXIgbD1FKHQsInJlY3QiLGUscik7cmV0dXJuIG4uc2VsZWN0KGwpLmNhbGwodS5zZXRSZWN0LGEsaSxvLHMpLGx9ZnVuY3Rpb24gQyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKCF0W3JdLmZpeGVkcmFuZ2UpcmV0dXJuIGU7cmV0dXJuIiJ9ZnVuY3Rpb24gUCh0LGUscixuLGEpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz10W2ldO2lmKCFvLmZpeGVkcmFuZ2Upe3ZhciBzPW8uX3JsWzBdLGw9by5fcmxbMV0tcztuW28uX25hbWUrIi5yYW5nZVswXSJdPW8ubDJyKHMrbCplKSxuW28uX25hbWUrIi5yYW5nZVsxXSJdPW8ubDJyKHMrbCpyKX19aWYoYSYmYS5sZW5ndGgpe3ZhciBjPShlKygxLXIpKS8yO1AoYSxjLDEtYyxuLFtdKX19ZnVuY3Rpb24gTyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZml4ZWRyYW5nZXx8KG4ucmFuZ2U9W24ubDJyKG4uX3JsWzBdLWUvbi5fbSksbi5sMnIobi5fcmxbMV0tZS9uLl9tKV0pfX1mdW5jdGlvbiB6KHQpe3JldHVybiAxLSh0Pj0wP01hdGgubWluKHQsLjkpOjEvKDEvTWF0aC5tYXgodCwtLjMpKzMuMjIyKSl9ZnVuY3Rpb24gSSh0LGUscixuLGEpe3JldHVybiB0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveCIpLnN0eWxlKHtmaWxsOmU+LjI/InJnYmEoMCwwLDAsMCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDApIiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcisiLCAiK24rIikiKS5hdHRyKCJkIixhKyJaIil9ZnVuY3Rpb24gRCh0LGUscil7cmV0dXJuIHQuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94LWNvcm5lcnMiKS5zdHlsZSh7ZmlsbDpjLmJhY2tncm91bmQsc3Ryb2tlOmMuZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6MSxvcGFjaXR5OjB9KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlKyIsICIrcisiKSIpLmF0dHIoImQiLCJNMCwwWiIpfWZ1bmN0aW9uIFIodCxlLHIsbixhLGkpe3QuYXR0cigiZCIsbisiTSIrci5sKyIsIityLnQrInYiK3IuaCsiaCIrci53KyJ2LSIrci5oKyJoLSIrci53KyJaIiksRih0LGUsYSxpKX1mdW5jdGlvbiBGKHQsZSxyLG4pe3J8fCh0LnRyYW5zaXRpb24oKS5zdHlsZSgiZmlsbCIsbj4uMj8icmdiYSgwLDAsMCwwLjQpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjMpIikuZHVyYXRpb24oMjAwKSxlLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSkuZHVyYXRpb24oMjAwKSl9ZnVuY3Rpb24gQih0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi56b29tYm94LC5qcy16b29tYm94LWJhY2tkcm9wLC5qcy16b29tYm94LW1lbnUsLnpvb21ib3gtY29ybmVycyIpLnJlbW92ZSgpfWZ1bmN0aW9uIE4odCl7UyYmdC5kYXRhJiZ0Ll9jb250ZXh0LnNob3dUaXBzJiYocy5ub3RpZmllcihzLl8odCwiRG91YmxlLWNsaWNrIHRvIHpvb20gYmFjayBvdXQiKSwibG9uZyIpLFM9ITEpfWZ1bmN0aW9uIGoodCl7cmV0dXJuImxhc3NvIj09PXR8fCJzZWxlY3QiPT09dH1mdW5jdGlvbiBWKHQpe3ZhciBlPU1hdGguZmxvb3IoTWF0aC5taW4odC5iLXQudCx0LnItdC5sLEEpLzIpO3JldHVybiJNIisodC5sLTMuNSkrIiwiKyh0LnQtLjUrZSkrImgzdiIrLWUrImgiK2UrInYtM2gtIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQudC0uNStlKSsiaC0zdiIrLWUrImgiKy1lKyJ2LTNoIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQuYisuNS1lKSsiaC0zdiIrZSsiaCIrLWUrInYzaCIrKGUrMykrIlpNIisodC5sLTMuNSkrIiwiKyh0LmIrLjUtZSkrImgzdiIrZSsiaCIrZSsidjNoLSIrKGUrMykrIloifWZ1bmN0aW9uIFUodCxlLHIsbil7Zm9yKHZhciBhLGksbyxsLGM9ITEsdT17fSxoPXt9LGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIHA9ZVtmXTtmb3IoYSBpbiByKWlmKHBbYV0pe2ZvcihvIGluIHApKCJ4Ij09PW8uY2hhckF0KDApP3I6bilbb118fCh1W29dPWEpO2ZvcihpIGluIG4pcFtpXSYmKGM9ITApfWZvcihpIGluIG4paWYocFtpXSlmb3IobCBpbiBwKSgieCI9PT1sLmNoYXJBdCgwKT9yOm4pW2xdfHwoaFtsXT1pKX1jJiYocy5leHRlbmRGbGF0KHUsaCksaD17fSk7dmFyIGQ9e30sZz1bXTtmb3IobyBpbiB1KXt2YXIgdj14KHQsbyk7Zy5wdXNoKHYpLGRbdi5faWRdPXZ9dmFyIG09e30seT1bXTtmb3IobCBpbiBoKXt2YXIgYj14KHQsbCk7eS5wdXNoKGIpLG1bYi5faWRdPWJ9cmV0dXJue3hhSGFzaDpkLHlhSGFzaDptLHhheGVzOmcseWF4ZXM6eSx4TGlua3M6dSx5TGlua3M6aCxpc1N1YnBsb3RDb25zdHJhaW5lZDpjfX1mdW5jdGlvbiBxKHQsZSl7aWYoaSl7dmFyIHI9dm9pZCAwIT09dC5vbndoZWVsPyJ3aGVlbCI6Im1vdXNld2hlZWwiO3QuX29ud2hlZWwmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLHQuX29ud2hlZWwpLHQuX29ud2hlZWw9ZSx0LmFkZEV2ZW50TGlzdGVuZXIocixlLHtwYXNzaXZlOiExfSl9ZWxzZSB2b2lkIDAhPT10Lm9ud2hlZWw/dC5vbndoZWVsPWU6dm9pZCAwIT09dC5vbm1vdXNld2hlZWwmJih0Lm9ubW91c2V3aGVlbD1lKX1mdW5jdGlvbiBIKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX1lLmV4cG9ydHM9e21ha2VEcmFnQm94OmZ1bmN0aW9uKHQsZSxyLGksYyxwLFMsRSl7dmFyIEYsRyxZLFcsWCxaLEosSyxRLCQsdHQsZXQscnQsbnQsYXQsaXQsb3Qsc3QsbHQsY3QsdXQsaHQ9dC5fZnVsbExheW91dC5fem9vbWxheWVyLGZ0PVMrRT09PSJuc2V3IixwdD0xPT09KFMrRSkubGVuZ3RoO2Z1bmN0aW9uIGR0KCl7aWYoRj1lLnhheGlzLEc9ZS55YXhpcyxRPUYuX2xlbmd0aCwkPUcuX2xlbmd0aCxKPUYuX29mZnNldCxLPUcuX29mZnNldCwoWT17fSlbRi5faWRdPUYsKFc9e30pW0cuX2lkXT1HLFMmJkUpZm9yKHZhciByPWUub3ZlcmxheXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgYT1yW25dLnhheGlzO1lbYS5faWRdPWE7dmFyIGk9cltuXS55YXhpcztXW2kuX2lkXT1pfVg9SChZKSxaPUgoVykscnQ9QyhYLEUpLG50PUMoWixTKSxhdD0hbnQmJiFydCx0dD1VKHQsdC5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsWSxXKSxldD1VKHQsdC5fZnVsbExheW91dC5fYXhpc01hdGNoR3JvdXBzLFksVyksaXQ9RXx8dHQuaXNTdWJwbG90Q29uc3RyYWluZWR8fGV0LmlzU3VicGxvdENvbnN0cmFpbmVkLG90PVN8fHR0LmlzU3VicGxvdENvbnN0cmFpbmVkfHxldC5pc1N1YnBsb3RDb25zdHJhaW5lZDt2YXIgbz10Ll9mdWxsTGF5b3V0O3N0PW8uX2hhcygic2NhdHRlcmdsIiksbHQ9by5faGFzKCJzcGxvbSIpLGN0PW8uX2hhcygic3ZnIil9ZHQoKTt2YXIgZ3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PyJuc2V3Ij09PXQ/cj8iIjoicGFuIj09PWU/Im1vdmUiOiJjcm9zc2hhaXIiOnQudG9Mb3dlckNhc2UoKSsiLXJlc2l6ZSI6InBvaW50ZXIifShudCtydCx0Ll9mdWxsTGF5b3V0LmRyYWdtb2RlLGZ0KSx2dD1MKGUsUytFKyJkcmFnIixndCxyLGksYyxwKTtpZihhdCYmIWZ0KXJldHVybiB2dC5vbm1vdXNlZG93bj1udWxsLHZ0LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHZ0O3ZhciBtdCx5dCx4dCxidCxfdCx3dCxrdCxUdCxNdCxBdCxTdD17ZWxlbWVudDp2dCxnZDp0LHBsb3RpbmZvOmV9O2Z1bmN0aW9uIEV0KCl7U3QucGxvdGluZm8uc2VsZWN0aW9uPSExLF8odCl9ZnVuY3Rpb24gTHQocixhKXt2YXIgaT10Ll9mdWxsTGF5b3V0LmNsaWNrbW9kZTtpZihCKHQpLDIhPT1yfHxwdHx8ZnVuY3Rpb24oKXtpZighdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbil7dmFyIGU9dC5fY29udGV4dC5kb3VibGVDbGljayxyPVtdO3J0JiYocj1yLmNvbmNhdChYKSksbnQmJihyPXIuY29uY2F0KFopKSxldC54YXhlcyYmKHI9ci5jb25jYXQoZXQueGF4ZXMpKSxldC55YXhlcyYmKHI9ci5jb25jYXQoZXQueWF4ZXMpKTt2YXIgbixhLGkscz17fTtpZigicmVzZXQrYXV0b3NpemUiPT09ZSlmb3IoZT0iYXV0b3NpemUiLGE9MDthPHIubGVuZ3RoO2ErKylpZigobj1yW2FdKS5fcmFuZ2VJbml0aWFsJiYobi5yYW5nZVswXSE9PW4uX3JhbmdlSW5pdGlhbFswXXx8bi5yYW5nZVsxXSE9PW4uX3JhbmdlSW5pdGlhbFsxXSl8fCFuLl9yYW5nZUluaXRpYWwmJiFuLmF1dG9yYW5nZSl7ZT0icmVzZXQiO2JyZWFrfWlmKCJhdXRvc2l6ZSI9PT1lKWZvcihhPTA7YTxyLmxlbmd0aDthKyspKG49clthXSkuZml4ZWRyYW5nZXx8KHNbbi5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKTtlbHNlIGlmKCJyZXNldCI9PT1lKWZvcigocnR8fHR0LmlzU3VicGxvdENvbnN0cmFpbmVkKSYmKHI9ci5jb25jYXQodHQueGF4ZXMpKSxudCYmIXR0LmlzU3VicGxvdENvbnN0cmFpbmVkJiYocj1yLmNvbmNhdCh0dC55YXhlcykpLHR0LmlzU3VicGxvdENvbnN0cmFpbmVkJiYocnQ/bnR8fChyPXIuY29uY2F0KFopKTpyPXIuY29uY2F0KFgpKSxhPTA7YTxyLmxlbmd0aDthKyspKG49clthXSkuZml4ZWRyYW5nZXx8KG4uX3JhbmdlSW5pdGlhbD8oaT1uLl9yYW5nZUluaXRpYWwsc1tuLl9uYW1lKyIucmFuZ2VbMF0iXT1pWzBdLHNbbi5fbmFtZSsiLnJhbmdlWzFdIl09aVsxXSk6c1tuLl9uYW1lKyIuYXV0b3JhbmdlIl09ITApO3QuZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKSxvLmNhbGwoIl9ndWlSZWxheW91dCIsdCxzKX19KCksZnQpaS5pbmRleE9mKCJzZWxlY3QiKT4tMSYmdyhhLHQsWCxaLGUuaWQsU3QpLGkuaW5kZXhPZigiZXZlbnQiKT4tMSYmaC5jbGljayh0LGEsZS5pZCk7ZWxzZSBpZigxPT09ciYmcHQpe3ZhciBzPVM/RzpGLGM9InMiPT09U3x8InciPT09RT8wOjEsdT1zLl9uYW1lKyIucmFuZ2VbIitjKyJdIixmPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYT10LnJhbmdlW2VdLGk9TWF0aC5hYnMoYS10LnJhbmdlWzEtZV0pO3JldHVybiJkYXRlIj09PXQudHlwZT9hOiJsb2ciPT09dC50eXBlPyhyPU1hdGguY2VpbChNYXRoLm1heCgwLC1NYXRoLmxvZyhpKS9NYXRoLkxOMTApKSszLG4uZm9ybWF0KCIuIityKyJnIikoTWF0aC5wb3coMTAsYSkpKToocj1NYXRoLmZsb29yKE1hdGgubG9nKE1hdGguYWJzKGEpKS9NYXRoLkxOMTApLU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSs0LG4uZm9ybWF0KCIuIitTdHJpbmcocikrImciKShhKSl9KHMsYykscD0ibGVmdCIsZD0ibWlkZGxlIjtpZihzLmZpeGVkcmFuZ2UpcmV0dXJuO1M/KGQ9Im4iPT09Uz8idG9wIjoiYm90dG9tIiwicmlnaHQiPT09cy5zaWRlJiYocD0icmlnaHQiKSk6ImUiPT09RSYmKHA9InJpZ2h0IiksdC5fY29udGV4dC5zaG93QXhpc1JhbmdlRW50cnlCb3hlcyYmbi5zZWxlY3QodnQpLmNhbGwobC5tYWtlRWRpdGFibGUse2dkOnQsaW1tZWRpYXRlOiEwLGJhY2tncm91bmQ6dC5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yLHRleHQ6U3RyaW5nKGYpLGZpbGw6cy50aWNrZm9udD9zLnRpY2tmb250LmNvbG9yOiIjNDQ0Iixob3Jpem9udGFsQWxpZ246cCx2ZXJ0aWNhbEFsaWduOmR9KS5vbigiZWRpdCIsZnVuY3Rpb24oZSl7dmFyIHI9cy5kMnIoZSk7dm9pZCAwIT09ciYmby5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsdSxyKX0pfX1mdW5jdGlvbiBDdChlLHIpe2lmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuITE7dmFyIG49TWF0aC5tYXgoMCxNYXRoLm1pbihRLGUrbXQpKSxhPU1hdGgubWF4KDAsTWF0aC5taW4oJCxyK3l0KSksaT1NYXRoLmFicyhuLW10KSxvPU1hdGguYWJzKGEteXQpO2Z1bmN0aW9uIHMoKXtrdD0iIix4dC5yPXh0LmwseHQudD14dC5iLE10LmF0dHIoImQiLCJNMCwwWiIpfWlmKHh0Lmw9TWF0aC5taW4obXQsbikseHQucj1NYXRoLm1heChtdCxuKSx4dC50PU1hdGgubWluKHl0LGEpLHh0LmI9TWF0aC5tYXgoeXQsYSksdHQuaXNTdWJwbG90Q29uc3RyYWluZWQpaT5BfHxvPkE/KGt0PSJ4eSIsaS9RPm8vJD8obz1pKiQvUSx5dD5hP3h0LnQ9eXQtbzp4dC5iPXl0K28pOihpPW8qUS8kLG10Pm4/eHQubD1tdC1pOnh0LnI9bXQraSksTXQuYXR0cigiZCIsVih4dCkpKTpzKCk7ZWxzZSBpZihldC5pc1N1YnBsb3RDb25zdHJhaW5lZClpZihpPkF8fG8+QSl7a3Q9Inh5Ijt2YXIgbD1NYXRoLm1pbih4dC5sL1EsKCQteHQuYikvJCksYz1NYXRoLm1heCh4dC5yL1EsKCQteHQudCkvJCk7eHQubD1sKlEseHQucj1jKlEseHQuYj0oMS1sKSokLHh0LnQ9KDEtYykqJCxNdC5hdHRyKCJkIixWKHh0KSl9ZWxzZSBzKCk7ZWxzZSFudHx8bzxNYXRoLm1pbihNYXRoLm1heCguNippLE0pLEEpP2k8TXx8IXJ0P3MoKTooeHQudD0wLHh0LmI9JCxrdD0ieCIsTXQuYXR0cigiZCIsZnVuY3Rpb24odCxlKXtyZXR1cm4iTSIrKHQubC0uNSkrIiwiKyhlLUEtLjUpKyJoLTN2IisoMipBKzEpKyJoM1pNIisodC5yKy41KSsiLCIrKGUtQS0uNSkrImgzdiIrKDIqQSsxKSsiaC0zWiJ9KHh0LHl0KSkpOiFydHx8aTxNYXRoLm1pbiguNipvLEEpPyh4dC5sPTAseHQucj1RLGt0PSJ5IixNdC5hdHRyKCJkIixmdW5jdGlvbih0LGUpe3JldHVybiJNIisoZS1BLS41KSsiLCIrKHQudC0uNSkrInYtM2giKygyKkErMSkrInYzWk0iKyhlLUEtLjUpKyIsIisodC5iKy41KSsidjNoIisoMipBKzEpKyJ2LTNaIn0oeHQsbXQpKSk6KGt0PSJ4eSIsTXQuYXR0cigiZCIsVih4dCkpKTt4dC53PXh0LnIteHQubCx4dC5oPXh0LmIteHQudCxrdCYmKEF0PSEwKSx0Ll9kcmFnZ2VkPUF0LFIoVHQsTXQseHQsX3Qsd3QsYnQpLFB0KCksdC5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHV0KSx3dD0hMH1mdW5jdGlvbiBQdCgpe3V0PXt9LCJ4eSIhPT1rdCYmIngiIT09a3R8fChQKFgseHQubC9RLHh0LnIvUSx1dCx0dC54YXhlcyksQnQoIngiLHV0KSksInh5IiE9PWt0JiYieSIhPT1rdHx8KFAoWiwoJC14dC5iKS8kLCgkLXh0LnQpLyQsdXQsdHQueWF4ZXMpLEJ0KCJ5Iix1dCkpfWZ1bmN0aW9uIE90KCl7UHQoKSxCKHQpLGp0KCksTih0KX1TdC5wcmVwRm49ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVN0LmRyYWdtb2RlLG89dC5fZnVsbExheW91dC5kcmFnbW9kZTtvIT09aSYmKFN0LmRyYWdtb2RlPW8pLGR0KCksYXR8fChmdD9lLnNoaWZ0S2V5PyJwYW4iPT09bz9vPSJ6b29tIjpqKG8pfHwobz0icGFuIik6ZS5jdHJsS2V5JiYobz0icGFuIik6bz0icGFuIiksU3QubWluRHJhZz0ibGFzc28iPT09bz8xOnZvaWQgMCxqKG8pPyhTdC54YXhlcz1YLFN0LnlheGVzPVosYihlLHIsbixTdCxvKSk6KFN0LmNsaWNrRm49THQsaihpKSYmRXQoKSxhdHx8KCJ6b29tIj09PW8/KFN0Lm1vdmVGbj1DdCxTdC5kb25lRm49T3QsU3QubWluRHJhZz0xLGZ1bmN0aW9uKGUscixuKXt2YXIgaT12dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTttdD1yLWkubGVmdCx5dD1uLWkudG9wLHh0PXtsOm10LHI6bXQsdzowLHQ6eXQsYjp5dCxoOjB9LGJ0PXQuX2htcGl4Y291bnQ/dC5faG1sdW1jb3VudC90Ll9obXBpeGNvdW50OmEodC5fZnVsbExheW91dC5wbG90X2JnY29sb3IpLmdldEx1bWluYW5jZSgpLHd0PSExLGt0PSJ4eSIsQXQ9ITEsVHQ9SShodCxidCxKLEssX3Q9Ik0wLDBIIitRKyJWIiskKyJIMFYwIiksTXQ9RChodCxKLEspfSgwLHIsbikpOiJwYW4iPT09byYmKFN0Lm1vdmVGbj1GdCxTdC5kb25lRm49anQpKSksdC5fZnVsbExheW91dC5fcmVkcmFnPWZ1bmN0aW9uKCl7dmFyIGU9dC5fZHJhZ2RhdGE7ZSYmZS5lbGVtZW50PT09dnQmJihqKHQuX2Z1bGxMYXlvdXQuZHJhZ21vZGUpfHwoZHQoKSxWdChbMCwwLFEsJF0pLFN0Lm1vdmVGbihlLmR4LGUuZHkpKSl9fSxkLmluaXQoU3QpO3ZhciB6dD1bMCwwLFEsJF0sSXQ9bnVsbCxEdD1ULlJFRFJBV0RFTEFZLFJ0PWUubWFpbnBsb3Q/dC5fZnVsbExheW91dC5fcGxvdHNbZS5tYWlucGxvdF06ZTtmdW5jdGlvbiBGdChlLHIpe2lmKCF0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXtpZih0Ll9mdWxsTGF5b3V0Ll9yZXBsb3R0aW5nPSEwLCJldyI9PT1ydHx8Im5zIj09PW50KXJldHVybiBydCYmKE8oWCxlKSxCdCgieCIpKSxudCYmKE8oWixyKSxCdCgieSIpKSxWdChbcnQ/LWU6MCxudD8tcjowLFEsJF0pLE50KCksdm9pZCB0LmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsdXQpO2lmKHR0LmlzU3VicGxvdENvbnN0cmFpbmVkJiZydCYmbnQpe3ZhciBuPSJ3Ij09PXJ0PT0oIm4iPT09bnQpPzE6LTEsYT0oZS9RK24qci8kKS8yO2U9YSpRLHI9biphKiR9InciPT09cnQ/ZT1sKFgsMCxlKToiZSI9PT1ydD9lPWwoWCwxLC1lKTpydHx8KGU9MCksIm4iPT09bnQ/cj1sKFosMSxyKToicyI9PT1udD9yPWwoWiwwLC1yKTpudHx8KHI9MCk7dmFyIGk9InciPT09cnQ/ZTowLG89Im4iPT09bnQ/cjowO2lmKHR0LmlzU3VicGxvdENvbnN0cmFpbmVkKXt2YXIgcztpZighcnQmJjE9PT1udC5sZW5ndGgpe2ZvcihzPTA7czxYLmxlbmd0aDtzKyspWFtzXS5yYW5nZT1YW3NdLl9yLnNsaWNlKCksayhYW3NdLDEtci8kKTtpPShlPXIqUS8kKS8yfWlmKCFudCYmMT09PXJ0Lmxlbmd0aCl7Zm9yKHM9MDtzPFoubGVuZ3RoO3MrKylaW3NdLnJhbmdlPVpbc10uX3Iuc2xpY2UoKSxrKFpbc10sMS1lL1EpO289KHI9ZSokL1EpLzJ9fUJ0KCJ4IiksQnQoInkiKSxWdChbaSxvLFEtZSwkLXJdKSxOdCgpLHQuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIix1dCl9ZnVuY3Rpb24gbCh0LGUscil7Zm9yKHZhciBuLGEsaT0xLWUsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dO2lmKCFzLmZpeGVkcmFuZ2Upe249cyxhPXMuX3JsW2ldKyhzLl9ybFtlXS1zLl9ybFtpXSkveihyL3MuX2xlbmd0aCk7dmFyIGw9cy5sMnIoYSk7ITEhPT1sJiZ2b2lkIDAhPT1sJiYocy5yYW5nZVtlXT1sKX19cmV0dXJuIG4uX2xlbmd0aCoobi5fcmxbZV0tYSkvKG4uX3JsW2VdLW4uX3JsW2ldKX19ZnVuY3Rpb24gQnQodCxlKXtmb3IodmFyIHI9ZXQuaXNTdWJwbG90Q29uc3RyYWluZWQ/e3g6Wix5Olh9W3RdOmV0W3QrImF4ZXMiXSxuPWV0LmlzU3VicGxvdENvbnN0cmFpbmVkP3t4OlgseTpafVt0XTpbXSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBpPXJbYV0sbz1pLl9pZCxzPWV0LnhMaW5rc1tvXXx8ZXQueUxpbmtzW29dLGw9blswXXx8WVtzXXx8V1tzXTtsJiYoZT8oZVtpLl9uYW1lKyIucmFuZ2VbMF0iXT1lW2wuX25hbWUrIi5yYW5nZVswXSJdLGVbaS5fbmFtZSsiLnJhbmdlWzFdIl09ZVtsLl9uYW1lKyIucmFuZ2VbMV0iXSk6aS5yYW5nZT1sLnJhbmdlLnNsaWNlKCkpfX1mdW5jdGlvbiBOdCgpe3ZhciBlLHI9W107ZnVuY3Rpb24gbih0KXtmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uZml4ZWRyYW5nZXx8ci5wdXNoKHRbZV0uX2lkKX1mb3IoaXQmJihuKFgpLG4odHQueGF4ZXMpLG4oZXQueGF4ZXMpKSxvdCYmKG4oWiksbih0dC55YXhlcyksbihldC55YXhlcykpLHV0PXt9LGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGE9cltlXSxpPXgodCxhKTtmLmRyYXdPbmUodCxpLHtza2lwVGl0bGU6ITB9KSx1dFtpLl9uYW1lKyIucmFuZ2VbMF0iXT1pLnJhbmdlWzBdLHV0W2kuX25hbWUrIi5yYW5nZVsxXSJdPWkucmFuZ2VbMV19Zi5yZWRyYXdDb21wb25lbnRzKHQscil9ZnVuY3Rpb24ganQoKXtWdChbMCwwLFEsJF0pLHMuc3luY09yQXN5bmMoW3kucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe3QuX2Z1bGxMYXlvdXQuX3JlcGxvdHRpbmc9ITEsby5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsdXQpfV0sdCl9ZnVuY3Rpb24gVnQoZSl7dmFyIHIsbixhLGksbD10Ll9mdWxsTGF5b3V0LGM9bC5fcGxvdHMsaD1sLl9zdWJwbG90cy5jYXJ0ZXNpYW47aWYobHQmJm8uc3VicGxvdHNSZWdpc3RyeS5zcGxvbS5kcmFnKHQpLHN0KWZvcihyPTA7cjxoLmxlbmd0aDtyKyspaWYoYT0obj1jW2hbcl1dKS54YXhpcyxpPW4ueWF4aXMsbi5fc2NlbmUpe3ZhciBmPXMuc2ltcGxlTWFwKGEucmFuZ2UsYS5yMmwpLHA9cy5zaW1wbGVNYXAoaS5yYW5nZSxpLnIybCk7bi5fc2NlbmUudXBkYXRlKHtyYW5nZTpbZlswXSxwWzBdLGZbMV0scFsxXV19KX1pZigobHR8fHN0KSYmKHYodCksbSh0KSksY3Qpe3ZhciBkPWVbMl0vRi5fbGVuZ3RoLGc9ZVszXS9HLl9sZW5ndGg7Zm9yKHI9MDtyPGgubGVuZ3RoO3IrKyl7YT0obj1jW2hbcl1dKS54YXhpcyxpPW4ueWF4aXM7dmFyIHkseCxiLF8sdz1pdCYmIWEuZml4ZWRyYW5nZSYmWVthLl9pZF0saz1vdCYmIWkuZml4ZWRyYW5nZSYmV1tpLl9pZF07aWYodz8oeT1kLGI9RT9lWzBdOkh0KGEseSkpOmV0LnhhSGFzaFthLl9pZF0/KHk9ZCxiPWVbMF0qYS5fbGVuZ3RoL0YuX2xlbmd0aCk6ZXQueWFIYXNoW2EuX2lkXT8oeT1nLGI9Im5zIj09PW50Py1lWzFdKmEuX2xlbmd0aC9HLl9sZW5ndGg6SHQoYSx5LHtuOiJ0b3AiLHM6ImJvdHRvbSJ9W250XSkpOmI9cXQoYSx5PVV0KGEsZCxnKSksaz8oeD1nLF89Uz9lWzFdOkh0KGkseCkpOmV0LnlhSGFzaFtpLl9pZF0/KHg9ZyxfPWVbMV0qaS5fbGVuZ3RoL0cuX2xlbmd0aCk6ZXQueGFIYXNoW2kuX2lkXT8oeD1kLF89ImV3Ij09PXJ0Py1lWzBdKmkuX2xlbmd0aC9GLl9sZW5ndGg6SHQoaSx4LHtlOiJyaWdodCIsdzoibGVmdCJ9W3J0XSkpOl89cXQoaSx4PVV0KGksZCxnKSkseXx8eCl7eXx8KHk9MSkseHx8KHg9MSk7dmFyIFQ9YS5fb2Zmc2V0LWIveSxNPWkuX29mZnNldC1fL3g7bi5jbGlwUmVjdC5jYWxsKHUuc2V0VHJhbnNsYXRlLGIsXykuY2FsbCh1LnNldFNjYWxlLHkseCksbi5wbG90LmNhbGwodS5zZXRUcmFuc2xhdGUsVCxNKS5jYWxsKHUuc2V0U2NhbGUsMS95LDEveCkseT09PW4ueFNjYWxlRmFjdG9yJiZ4PT09bi55U2NhbGVGYWN0b3J8fCh1LnNldFBvaW50R3JvdXBTY2FsZShuLnpvb21TY2FsZVB0cyx5LHgpLHUuc2V0VGV4dFBvaW50c1NjYWxlKG4uem9vbVNjYWxlVHh0LHkseCkpLHUuaGlkZU91dHNpZGVSYW5nZVBvaW50cyhuLmNsaXBPbkF4aXNGYWxzZVRyYWNlcyxuKSxuLnhTY2FsZUZhY3Rvcj15LG4ueVNjYWxlRmFjdG9yPXh9fX19ZnVuY3Rpb24gVXQodCxlLHIpe3JldHVybiB0LmZpeGVkcmFuZ2U/MDppdCYmdHQueGFIYXNoW3QuX2lkXT9lOm90JiYodHQuaXNTdWJwbG90Q29uc3RyYWluZWQ/dHQueGFIYXNoOnR0LnlhSGFzaClbdC5faWRdP3I6MH1mdW5jdGlvbiBxdCh0LGUpe3JldHVybiBlPyh0LnJhbmdlPXQuX3Iuc2xpY2UoKSxrKHQsZSksSHQodCxlKSk6MH1mdW5jdGlvbiBIdCh0LGUscil7cmV0dXJuIHQuX2xlbmd0aCooMS1lKSpnW3J8fHQuY29uc3RyYWludG93YXJkfHwibWlkZGxlIl19cmV0dXJuIFMubGVuZ3RoKkUubGVuZ3RoIT0xJiZxKHZ0LGZ1bmN0aW9uKGUpe2lmKHQuX2NvbnRleHQuX3Njcm9sbFpvb20uY2FydGVzaWFufHx0Ll9mdWxsTGF5b3V0Ll9lbmFibGVzY3JvbGx6b29tKXtpZihFdCgpLHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSx2b2lkIGUuc3RvcFByb3BhZ2F0aW9uKCk7ZHQoKSxjbGVhclRpbWVvdXQoSXQpO3ZhciByPS1lLmRlbHRhWTtpZihpc0Zpbml0ZShyKXx8KHI9ZS53aGVlbERlbHRhLzEwKSxpc0Zpbml0ZShyKSl7dmFyIG4sYT1NYXRoLmV4cCgtTWF0aC5taW4oTWF0aC5tYXgociwtMjApLDIwKS8yMDApLGk9UnQuZHJhZ2xheWVyLnNlbGVjdCgiLm5zZXdkcmFnIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89KGUuY2xpZW50WC1pLmxlZnQpL2kud2lkdGgsbD0oaS5ib3R0b20tZS5jbGllbnRZKS9pLmhlaWdodDtpZihpdCl7Zm9yKEV8fChvPS41KSxuPTA7bjxYLmxlbmd0aDtuKyspYyhYW25dLG8sYSk7QnQoIngiKSx6dFsyXSo9YSx6dFswXSs9enRbMl0qbyooMS9hLTEpfWlmKG90KXtmb3IoU3x8KGw9LjUpLG49MDtuPFoubGVuZ3RoO24rKyljKFpbbl0sbCxhKTtCdCgieSIpLHp0WzNdKj1hLHp0WzFdKz16dFszXSooMS1sKSooMS9hLTEpfVZ0KHp0KSxOdCgpLHQuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIix1dCksSXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3p0PVswLDAsUSwkXSxqdCgpfSxEdCksZS5wcmV2ZW50RGVmYXVsdCgpfWVsc2Ugcy5sb2coIkRpZCBub3QgZmluZCB3aGVlbCBtb3Rpb24gYXR0cmlidXRlczogIixlKX1mdW5jdGlvbiBjKHQsZSxyKXtpZighdC5maXhlZHJhbmdlKXt2YXIgbj1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxhPW5bMF0rKG5bMV0tblswXSkqZTt0LnJhbmdlPW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmwycihhKyhlLWEpKnIpfSl9fX0pLHZ0fSxtYWtlRHJhZ2dlcjpFLG1ha2VSZWN0RHJhZ2dlcjpMLG1ha2Vab29tYm94OkksbWFrZUNvcm5lcnM6RCx1cGRhdGVab29tYm94OlIseHlDb3JuZXJzOlYsdHJhbnNpdGlvblpvb21ib3g6RixyZW1vdmVab29tYm94OkIsc2hvd0RvdWJsZUNsaWNrTm90aWZpZXI6TixhdHRhY2hXaGVlbEV2ZW50SGFuZGxlcjpxfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjYxMCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYzMCwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6Njg2LCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIjo3MDIsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjczNywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NDEsIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIjo3NTYsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4uL3Bsb3RzIjo4MjYsIi4vYXhlcyI6NzY1LCIuL2F4aXNfaWRzIjo3NjgsIi4vY29uc3RhbnRzIjo3NzEsIi4vc2NhbGVfem9vbSI6NzgxLCIuL3NlbGVjdCI6NzgyLGQzOjE2NSwiaGFzLXBhc3NpdmUtZXZlbnRzIjo0MTMsdGlueWNvbG9yMjo1MzZ9XSw3NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxvPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxzPXQoIi4vZHJhZ2JveCIpLm1ha2VEcmFnQm94LGw9dCgiLi9jb25zdGFudHMiKS5EUkFHR0VSU0laRTtyLmluaXRJbnRlcmFjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZih0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpbi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuZHJhZyIpLnJlbW92ZSgpO2Vsc2UgaWYoZS5faGFzKCJjYXJ0ZXNpYW4iKXx8ZS5faGFzKCJzcGxvbSIpKXtPYmplY3Qua2V5cyhlLl9wbG90c3x8e30pLnNvcnQoZnVuY3Rpb24odCxyKXtpZigoZS5fcGxvdHNbdF0ubWFpbnBsb3QmJiEwKT09PShlLl9wbG90c1tyXS5tYWlucGxvdCYmITApKXt2YXIgbj10LnNwbGl0KCJ5IiksYT1yLnNwbGl0KCJ5Iik7cmV0dXJuIG5bMF09PT1hWzBdP051bWJlcihuWzFdfHwxKS1OdW1iZXIoYVsxXXx8MSk6TnVtYmVyKG5bMF18fDEpLU51bWJlcihhWzBdfHwxKX1yZXR1cm4gZS5fcGxvdHNbdF0ubWFpbnBsb3Q/MTotMX0pLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG49ZS5fcGxvdHNbcl0sbz1uLnhheGlzLGM9bi55YXhpcztpZighbi5tYWlucGxvdCl7dmFyIHU9cyh0LG4sby5fb2Zmc2V0LGMuX29mZnNldCxvLl9sZW5ndGgsYy5fbGVuZ3RoLCJucyIsImV3Iik7dS5vbm1vdXNlbW92ZT1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyPWZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PT09ciYmdC5fZnVsbExheW91dC5fcGxvdHNbcl0mJmEuaG92ZXIodCxlLHIpfSxhLmhvdmVyKHQsZSxyKSx0Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9dSx0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9cn0sdS5vbm1vdXNlb3V0PWZ1bmN0aW9uKGUpe3QuX2RyYWdnaW5nfHwodC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PW51bGwsaS51bmhvdmVyKHQsZSkpfSx0Ll9jb250ZXh0LnNob3dBeGlzRHJhZ0hhbmRsZXMmJihzKHQsbixvLl9vZmZzZXQtbCxjLl9vZmZzZXQtbCxsLGwsIm4iLCJ3Iikscyh0LG4sby5fb2Zmc2V0K28uX2xlbmd0aCxjLl9vZmZzZXQtbCxsLGwsIm4iLCJlIikscyh0LG4sby5fb2Zmc2V0LWwsYy5fb2Zmc2V0K2MuX2xlbmd0aCxsLGwsInMiLCJ3Iikscyh0LG4sby5fb2Zmc2V0K28uX2xlbmd0aCxjLl9vZmZzZXQrYy5fbGVuZ3RoLGwsbCwicyIsImUiKSl9aWYodC5fY29udGV4dC5zaG93QXhpc0RyYWdIYW5kbGVzKXtpZihyPT09by5fbWFpblN1YnBsb3Qpe3ZhciBoPW8uX21haW5MaW5lUG9zaXRpb247InRvcCI9PT1vLnNpZGUmJihoLT1sKSxzKHQsbixvLl9vZmZzZXQrLjEqby5fbGVuZ3RoLGgsLjgqby5fbGVuZ3RoLGwsIiIsImV3Iikscyh0LG4sby5fb2Zmc2V0LGgsLjEqby5fbGVuZ3RoLGwsIiIsInciKSxzKHQsbixvLl9vZmZzZXQrLjkqby5fbGVuZ3RoLGgsLjEqby5fbGVuZ3RoLGwsIiIsImUiKX1pZihyPT09Yy5fbWFpblN1YnBsb3Qpe3ZhciBmPWMuX21haW5MaW5lUG9zaXRpb247InJpZ2h0IiE9PWMuc2lkZSYmKGYtPWwpLHModCxuLGYsYy5fb2Zmc2V0Ky4xKmMuX2xlbmd0aCxsLC44KmMuX2xlbmd0aCwibnMiLCIiKSxzKHQsbixmLGMuX29mZnNldCsuOSpjLl9sZW5ndGgsbCwuMSpjLl9sZW5ndGgsInMiLCIiKSxzKHQsbixmLGMuX29mZnNldCxsLC4xKmMuX2xlbmd0aCwibiIsIiIpfX19KTt2YXIgbz1lLl9ob3ZlcmxheWVyLm5vZGUoKTtvLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHIpe3IudGFyZ2V0PXQuX2Z1bGxMYXlvdXQuX2xhc3Rob3ZlcixhLmhvdmVyKHQscixlLl9ob3ZlcnN1YnBsb3QpfSxvLm9uY2xpY2s9ZnVuY3Rpb24oZSl7ZS50YXJnZXQ9dC5fZnVsbExheW91dC5fbGFzdGhvdmVyLGEuY2xpY2sodCxlKX0sby5vbm1vdXNlZG93bj1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIub25tb3VzZWRvd24oZSl9LHIudXBkYXRlRngodCl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj0icGFuIj09PWUuZHJhZ21vZGU/Im1vdmUiOiJjcm9zc2hhaXIiO28oZS5fZHJhZ2dlcnMscil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjYxMCwiLi4vLi4vY29tcG9uZW50cy9meCI6NjMwLCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3MzcsIi4vY29uc3RhbnRzIjo3NzEsIi4vZHJhZ2JveCI6NzczLGQzOjE2NX1dLDc3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBpPWVbdF07aWYoQXJyYXkuaXNBcnJheShpKSlmb3IodmFyIG89bi5zdWJwbG90c1JlZ2lzdHJ5LmNhcnRlc2lhbixzPW8uaWRSZWdleCxsPXIuX3N1YnBsb3RzLGM9bC54YXhpcyx1PWwueWF4aXMsaD1sLmNhcnRlc2lhbixmPXIuX2hhcygiY2FydGVzaWFuIil8fHIuX2hhcygiZ2wyZCIpLHA9MDtwPGkubGVuZ3RoO3ArKyl7dmFyIGQ9aVtwXTtpZihhLmlzUGxhaW5PYmplY3QoZCkpe3ZhciBnPWQueHJlZix2PWQueXJlZixtPXMueC50ZXN0KGcpLHk9cy55LnRlc3Qodik7aWYobXx8eSl7Znx8YS5wdXNoVW5pcXVlKHIuX2Jhc2VQbG90TW9kdWxlcyxvKTt2YXIgeD0hMTttJiYtMT09PWMuaW5kZXhPZihnKSYmKGMucHVzaChnKSx4PSEwKSx5JiYtMT09PXUuaW5kZXhPZih2KSYmKHUucHVzaCh2KSx4PSEwKSx4JiZtJiZ5JiZoLnB1c2goZyt2KX19fX19fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9yZWdpc3RyeSI6ODQ2fV0sNzc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksbz10KCIuLi9wbG90cyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbD10KCIuLi9nZXRfZGF0YSIpLmdldE1vZHVsZUNhbGNEYXRhLGM9dCgiLi9heGlzX2lkcyIpLHU9dCgiLi9jb25zdGFudHMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksZj1pLmVuc3VyZVNpbmdsZTtmdW5jdGlvbiBwKHQsZSxyKXtyZXR1cm4gaS5lbnN1cmVTaW5nbGUodCxlLHIsZnVuY3Rpb24odCl7dC5kYXR1bShyKX0pfWZ1bmN0aW9uIGQodCxlLHIsaSxvKXtmb3IodmFyIGMsaCxmLHA9dS50cmFjZUxheWVyQ2xhc3NlcyxkPXQuX2Z1bGxMYXlvdXQsZz1kLl9tb2R1bGVzLHY9W10sbT1bXSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciB4PShjPWdbeV0pLm5hbWUsYj1hLm1vZHVsZXNbeF0uY2F0ZWdvcmllcztpZihiLnN2Zyl7dmFyIF89Yy5sYXllck5hbWV8fHgrImxheWVyIix3PWMucGxvdDtmPShoPWwocix3KSlbMF0scj1oWzFdLGYubGVuZ3RoJiZ2LnB1c2goe2k6cC5pbmRleE9mKF8pLGNsYXNzTmFtZTpfLHBsb3RNZXRob2Q6dyxjZE1vZHVsZTpmfSksYi56b29tU2NhbGUmJm0ucHVzaCgiLiIrXyl9fXYuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmktZS5pfSk7dmFyIGs9ZS5wbG90LnNlbGVjdEFsbCgiZy5tbGF5ZXIiKS5kYXRhKHYsZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lfSk7aWYoay5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jbGFzc05hbWV9KS5jbGFzc2VkKCJtbGF5ZXIiLCEwKS5jbGFzc2VkKCJyYW5nZXBsb3QiLGUuaXNSYW5nZVBsb3QpLGsuZXhpdCgpLnJlbW92ZSgpLGsub3JkZXIoKSxrLmVhY2goZnVuY3Rpb24ocil7dmFyIGE9bi5zZWxlY3QodGhpcyksbD1yLmNsYXNzTmFtZTtyLnBsb3RNZXRob2QodCxlLHIuY2RNb2R1bGUsYSxpLG8pLC0xPT09dS5jbGlwT25BeGlzRmFsc2VRdWVyeS5pbmRleE9mKCIuIitsKSYmcy5zZXRDbGlwVXJsKGEsZS5sYXllckNsaXBJZCx0KX0pLGQuX2hhcygic2NhdHRlcmdsIikmJihjPWEuZ2V0TW9kdWxlKCJzY2F0dGVyZ2wiKSxmPWwocixjKVswXSxjLnBsb3QodCxlLGYpKSwhdC5fY29udGV4dC5zdGF0aWNQbG90JiYoZS5faGFzQ2xpcE9uQXhpc0ZhbHNlJiYoZS5jbGlwT25BeGlzRmFsc2VUcmFjZXM9ZS5wbG90LnNlbGVjdEFsbCh1LmNsaXBPbkF4aXNGYWxzZVF1ZXJ5LmpvaW4oIiwiKSkuc2VsZWN0QWxsKCIudHJhY2UiKSksbS5sZW5ndGgpKXt2YXIgVD1lLnBsb3Quc2VsZWN0QWxsKG0uam9pbigiLCIpKS5zZWxlY3RBbGwoIi50cmFjZSIpO2Uuem9vbVNjYWxlUHRzPVQuc2VsZWN0QWxsKCJwYXRoLnBvaW50IiksZS56b29tU2NhbGVUeHQ9VC5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKX19ZnVuY3Rpb24gZyh0LGUpe3ZhciByPWUucGxvdGdyb3VwLG49ZS5pZCxhPXUubGF5ZXJWYWx1ZTJsYXllckNsYXNzW2UueGF4aXMubGF5ZXJdLGk9dS5sYXllclZhbHVlMmxheWVyQ2xhc3NbZS55YXhpcy5sYXllcl0sbz10Ll9mdWxsTGF5b3V0Ll9oYXNPbmx5TGFyZ2VTcGxvbXM7aWYoZS5tYWlucGxvdCl7dmFyIHM9ZS5tYWlucGxvdGluZm8sbD1zLnBsb3Rncm91cCxoPW4rIi14IixkPW4rIi15IjtlLmdyaWRsYXllcj1zLmdyaWRsYXllcixlLnplcm9saW5lbGF5ZXI9cy56ZXJvbGluZWxheWVyLGYocy5vdmVybGluZXNCZWxvdywicGF0aCIsaCksZihzLm92ZXJsaW5lc0JlbG93LCJwYXRoIixkKSxmKHMub3ZlcmF4ZXNCZWxvdywiZyIsaCksZihzLm92ZXJheGVzQmVsb3csImciLGQpLGUucGxvdD1mKHMub3ZlcnBsb3QsImciLG4pLGYocy5vdmVybGluZXNBYm92ZSwicGF0aCIsaCksZihzLm92ZXJsaW5lc0Fib3ZlLCJwYXRoIixkKSxmKHMub3ZlcmF4ZXNBYm92ZSwiZyIsaCksZihzLm92ZXJheGVzQWJvdmUsImciLGQpLGUueGxpbmVzPWwuc2VsZWN0KCIub3ZlcmxpbmVzLSIrYSkuc2VsZWN0KCIuIitoKSxlLnlsaW5lcz1sLnNlbGVjdCgiLm92ZXJsaW5lcy0iK2kpLnNlbGVjdCgiLiIrZCksZS54YXhpc2xheWVyPWwuc2VsZWN0KCIub3ZlcmF4ZXMtIithKS5zZWxlY3QoIi4iK2gpLGUueWF4aXNsYXllcj1sLnNlbGVjdCgiLm92ZXJheGVzLSIraSkuc2VsZWN0KCIuIitkKX1lbHNlIGlmKG8pZS54bGluZXM9ZihyLCJwYXRoIiwieGxpbmVzLWFib3ZlIiksZS55bGluZXM9ZihyLCJwYXRoIiwieWxpbmVzLWFib3ZlIiksZS54YXhpc2xheWVyPWYociwiZyIsInhheGlzbGF5ZXItYWJvdmUiKSxlLnlheGlzbGF5ZXI9ZihyLCJnIiwieWF4aXNsYXllci1hYm92ZSIpO2Vsc2V7dmFyIGc9ZihyLCJnIiwibGF5ZXItc3VicGxvdCIpO2Uuc2hhcGVsYXllcj1mKGcsImciLCJzaGFwZWxheWVyIiksZS5pbWFnZWxheWVyPWYoZywiZyIsImltYWdlbGF5ZXIiKSxlLmdyaWRsYXllcj1mKHIsImciLCJncmlkbGF5ZXIiKSxlLnplcm9saW5lbGF5ZXI9ZihyLCJnIiwiemVyb2xpbmVsYXllciIpLGYociwicGF0aCIsInhsaW5lcy1iZWxvdyIpLGYociwicGF0aCIsInlsaW5lcy1iZWxvdyIpLGUub3ZlcmxpbmVzQmVsb3c9ZihyLCJnIiwib3ZlcmxpbmVzLWJlbG93IiksZihyLCJnIiwieGF4aXNsYXllci1iZWxvdyIpLGYociwiZyIsInlheGlzbGF5ZXItYmVsb3ciKSxlLm92ZXJheGVzQmVsb3c9ZihyLCJnIiwib3ZlcmF4ZXMtYmVsb3ciKSxlLnBsb3Q9ZihyLCJnIiwicGxvdCIpLGUub3ZlcnBsb3Q9ZihyLCJnIiwib3ZlcnBsb3QiKSxlLnhsaW5lcz1mKHIsInBhdGgiLCJ4bGluZXMtYWJvdmUiKSxlLnlsaW5lcz1mKHIsInBhdGgiLCJ5bGluZXMtYWJvdmUiKSxlLm92ZXJsaW5lc0Fib3ZlPWYociwiZyIsIm92ZXJsaW5lcy1hYm92ZSIpLGYociwiZyIsInhheGlzbGF5ZXItYWJvdmUiKSxmKHIsImciLCJ5YXhpc2xheWVyLWFib3ZlIiksZS5vdmVyYXhlc0Fib3ZlPWYociwiZyIsIm92ZXJheGVzLWFib3ZlIiksZS54bGluZXM9ci5zZWxlY3QoIi54bGluZXMtIithKSxlLnlsaW5lcz1yLnNlbGVjdCgiLnlsaW5lcy0iK2kpLGUueGF4aXNsYXllcj1yLnNlbGVjdCgiLnhheGlzbGF5ZXItIithKSxlLnlheGlzbGF5ZXI9ci5zZWxlY3QoIi55YXhpc2xheWVyLSIraSl9b3x8KHAoZS5ncmlkbGF5ZXIsImciLGUueGF4aXMuX2lkKSxwKGUuZ3JpZGxheWVyLCJnIixlLnlheGlzLl9pZCksZS5ncmlkbGF5ZXIuc2VsZWN0QWxsKCJnIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkuc29ydChjLmlkU29ydCkpLGUueGxpbmVzLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNsYXNzZWQoImNyaXNwIiwhMCksZS55bGluZXMuc3R5bGUoImZpbGwiLCJub25lIikuY2xhc3NlZCgiY3Jpc3AiLCEwKX1mdW5jdGlvbiB2KHQsZSl7aWYodCl7dmFyIHI9e307Zm9yKHZhciBhIGluIHQuZWFjaChmdW5jdGlvbih0KXt2YXIgYT10WzBdO24uc2VsZWN0KHRoaXMpLnJlbW92ZSgpLG0oYSxlKSxyW2FdPSEwfSksZS5fcGxvdHMpZm9yKHZhciBpPWUuX3Bsb3RzW2FdLm92ZXJsYXlzfHxbXSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb107cltzLmlkXSYmcy5wbG90LnNlbGVjdEFsbCgiLnRyYWNlIikucmVtb3ZlKCl9fX1mdW5jdGlvbiBtKHQsZSl7ZS5fZHJhZ2dlcnMuc2VsZWN0QWxsKCJnLiIrdCkucmVtb3ZlKCksZS5fZGVmcy5zZWxlY3QoIiNjbGlwIitlLl91aWQrdCsicGxvdCIpLnJlbW92ZSgpfXIubmFtZT0iY2FydGVzaWFuIixyLmF0dHI9WyJ4YXhpcyIsInlheGlzIl0sci5pZFJvb3Q9WyJ4IiwieSJdLHIuaWRSZWdleD11LmlkUmVnZXgsci5hdHRyUmVnZXg9dS5hdHRyUmVnZXgsci5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLHIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLHIudHJhbnNpdGlvbkF4ZXM9dCgiLi90cmFuc2l0aW9uX2F4ZXMiKSxyLmZpbmFsaXplU3VicGxvdHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGEsbz1lLl9zdWJwbG90cyxzPW8ueGF4aXMsbD1vLnlheGlzLGg9by5jYXJ0ZXNpYW4sZj1oLmNvbmNhdChvLmdsMmR8fFtdKSxwPXt9LGQ9e307Zm9yKHI9MDtyPGYubGVuZ3RoO3IrKyl7dmFyIGc9ZltyXS5zcGxpdCgieSIpO3BbZ1swXV09MSxkWyJ5IitnWzFdXT0xfWZvcihyPTA7cjxzLmxlbmd0aDtyKyspcFtuPXNbcl1dfHwoYT0odFtjLmlkMm5hbWUobildfHx7fSkuYW5jaG9yLHUuaWRSZWdleC55LnRlc3QoYSl8fChhPSJ5IiksaC5wdXNoKG4rYSksZi5wdXNoKG4rYSksZFthXXx8KGRbYV09MSxpLnB1c2hVbmlxdWUobCxhKSkpO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspZFthPWxbcl1dfHwobj0odFtjLmlkMm5hbWUoYSldfHx7fSkuYW5jaG9yLHUuaWRSZWdleC54LnRlc3Qobil8fChuPSJ4IiksaC5wdXNoKG4rYSksZi5wdXNoKG4rYSkscFtuXXx8KHBbbl09MSxpLnB1c2hVbmlxdWUocyxuKSkpO2lmKCFmLmxlbmd0aCl7Zm9yKHZhciB2IGluIG49IiIsYT0iIix0KXtpZih1LmF0dHJSZWdleC50ZXN0KHYpKSJ4Ij09PXYuY2hhckF0KDApPyghbnx8K3Yuc3Vic3RyKDUpPCtuLnN1YnN0cig1KSkmJihuPXYpOighYXx8K3Yuc3Vic3RyKDUpPCthLnN1YnN0cig1KSkmJihhPXYpfW49bj9jLm5hbWUyaWQobik6IngiLGE9YT9jLm5hbWUyaWQoYSk6InkiLHMucHVzaChuKSxsLnB1c2goYSksaC5wdXNoKG4rYSl9fSxyLnBsb3Q9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGEsaT10Ll9mdWxsTGF5b3V0LG89aS5fc3VicGxvdHMuY2FydGVzaWFuLHM9dC5jYWxjZGF0YTtpZighQXJyYXkuaXNBcnJheShlKSlmb3IoZT1bXSxhPTA7YTxzLmxlbmd0aDthKyspZS5wdXNoKGEpO2ZvcihhPTA7YTxvLmxlbmd0aDthKyspe2Zvcih2YXIgbCxjPW9bYV0sdT1pLl9wbG90c1tjXSxoPVtdLGY9MDtmPHMubGVuZ3RoO2YrKyl7dmFyIHA9c1tmXSxnPXBbMF0udHJhY2U7Zy54YXhpcytnLnlheGlzPT09YyYmKCgtMSE9PWUuaW5kZXhPZihnLmluZGV4KXx8Zy5jYXJwZXQpJiYobCYmbFswXS50cmFjZS54YXhpcytsWzBdLnRyYWNlLnlheGlzPT09YyYmLTEhPT1bInRvbmV4dHgiLCJ0b25leHR5IiwidG9uZXh0Il0uaW5kZXhPZihnLmZpbGwpJiYtMT09PWguaW5kZXhPZihsKSYmaC5wdXNoKGwpLGgucHVzaChwKSksbD1wKX1kKHQsdSxoLHIsbil9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGksbyxzPW4uX3Bsb3RzfHx7fSxsPWUuX3Bsb3RzfHx7fSx1PW4uX3N1YnBsb3RzfHx7fTtpZihuLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJiFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMpZm9yKG8gaW4gcykoYT1zW29dKS5wbG90Z3JvdXAmJmEucGxvdGdyb3VwLnJlbW92ZSgpO3ZhciBoPW4uX2hhcyYmbi5faGFzKCJnbCIpLGY9ZS5faGFzJiZlLl9oYXMoImdsIik7aWYoaCYmIWYpZm9yKG8gaW4gcykoYT1zW29dKS5fc2NlbmUmJmEuX3NjZW5lLmRlc3Ryb3koKTtpZih1LnhheGlzJiZ1LnlheGlzKXt2YXIgcD1jLmxpc3RJZHMoe19mdWxsTGF5b3V0Om59KTtmb3IoaT0wO2k8cC5sZW5ndGg7aSsrKXt2YXIgZD1wW2ldO2VbYy5pZDJuYW1lKGQpXXx8bi5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmctIitkKyJ0aXRsZSIpLnJlbW92ZSgpfX12YXIgZz1uLl9oYXMmJm4uX2hhcygiY2FydGVzaWFuIikseT1lLl9oYXMmJmUuX2hhcygiY2FydGVzaWFuIik7aWYoZyYmIXkpdihuLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoIi5zdWJwbG90Iiksbiksbi5fZGVmcy5zZWxlY3RBbGwoIi5heGVzY2xpcCIpLnJlbW92ZSgpLGRlbGV0ZSBuLl9heGlzQ29uc3RyYWludEdyb3VwcztlbHNlIGlmKHUuY2FydGVzaWFuKWZvcihpPTA7aTx1LmNhcnRlc2lhbi5sZW5ndGg7aSsrKXt2YXIgeD11LmNhcnRlc2lhbltpXTtpZighbFt4XSl7dmFyIGI9Ii4iK3grIiwuIit4KyIteCwuIit4KyIteSI7bi5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKGIpLnJlbW92ZSgpLG0oeCxuKX19fSxyLmRyYXdGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhLGksbyxzPXQuX2Z1bGxMYXlvdXQsbD1zLl9zdWJwbG90cy5jYXJ0ZXNpYW4sYz1sLmxlbmd0aCx1PVtdLGg9W107Zm9yKGU9MDtlPGM7ZSsrKXtuPWxbZV0sYT1zLl9wbG90c1tuXSxpPWEueGF4aXMsbz1hLnlheGlzO3ZhciBmPWkuX21haW5BeGlzLHA9by5fbWFpbkF4aXMsZD1mLl9pZCtwLl9pZCxnPXMuX3Bsb3RzW2RdO2Eub3ZlcmxheXM9W10sZCE9PW4mJmc/KGEubWFpbnBsb3Q9ZCxhLm1haW5wbG90aW5mbz1nLGgucHVzaChuKSk6KGEubWFpbnBsb3Q9dm9pZCAwLGEubWFpblBsb3RpbmZvPXZvaWQgMCx1LnB1c2gobikpfWZvcihlPTA7ZTxoLmxlbmd0aDtlKyspbj1oW2VdLChhPXMuX3Bsb3RzW25dKS5tYWlucGxvdGluZm8ub3ZlcmxheXMucHVzaChhKTt2YXIgdj11LmNvbmNhdChoKSxtPW5ldyBBcnJheShjKTtmb3IoZT0wO2U8YztlKyspe249dltlXSxhPXMuX3Bsb3RzW25dLGk9YS54YXhpcyxvPWEueWF4aXM7dmFyIHk9W24saS5sYXllcixvLmxheWVyLGkub3ZlcmxheWluZ3x8IiIsby5vdmVybGF5aW5nfHwiIl07Zm9yKHI9MDtyPGEub3ZlcmxheXMubGVuZ3RoO3IrKyl5LnB1c2goYS5vdmVybGF5c1tyXS5pZCk7bVtlXT15fXJldHVybiBtfSh0KSxhPWUuX2NhcnRlc2lhbmxheWVyLnNlbGVjdEFsbCgiLnN1YnBsb3QiKS5kYXRhKHIsU3RyaW5nKTthLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJzdWJwbG90ICIrdFswXX0pLGEub3JkZXIoKSxhLmV4aXQoKS5jYWxsKHYsZSksYS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBhPXJbMF0saT1lLl9wbG90c1thXTtpLnBsb3Rncm91cD1uLnNlbGVjdCh0aGlzKSxnKHQsaSksaS5kcmFnbGF5ZXI9ZihlLl9kcmFnZ2VycywiZyIsYSl9KX0sci5yYW5nZVBsb3Q9ZnVuY3Rpb24odCxlLHIpe2codCxlKSxkKHQsZSxyKSxvLnN0eWxlKHQpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLHI9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO3IuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1yLnNpemUoKS0xfSkuc2VsZWN0QWxsKCIuZ2wtY2FudmFzLWNvbnRleHQsIC5nbC1jYW52YXMtZm9jdXMiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoImltYWdlL3BuZyIpO2UuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpoLnN2ZywieGxpbms6aHJlZiI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIix4OjAseTowLHdpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSl9KX0sci51cGRhdGVGeD10KCIuL2dyYXBoX2ludGVyYWN0IikudXBkYXRlRnh9LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2OTQsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuLi9nZXRfZGF0YSI6ODAwLCIuLi9wbG90cyI6ODI2LCIuL2F0dHJpYnV0ZXMiOjc2MywiLi9heGlzX2lkcyI6NzY4LCIuL2NvbnN0YW50cyI6NzcxLCIuL2dyYXBoX2ludGVyYWN0Ijo3NzQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3NywiLi9sYXlvdXRfZGVmYXVsdHMiOjc3OCwiLi90cmFuc2l0aW9uX2F4ZXMiOjc4NyxkMzoxNjV9XSw3Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGw9KHQoIi4uLy4uL2NvbnN0YW50cy9kb2NzIikuRk9STUFUX0xJTkssdCgiLi4vLi4vY29uc3RhbnRzL2RvY3MiKS5EQVRFX0ZPUk1BVF9MSU5LLHQoIi4vY29uc3RhbnRzIikpO2UuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZToidGlja3MifSx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToidGlja3MifSxmb250Om4oe2VkaXRUeXBlOiJ0aWNrcyJ9KSxzdGFuZG9mZjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToidGlja3MifSxlZGl0VHlwZToidGlja3MifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyItIiwibGluZWFyIiwibG9nIiwiZGF0ZSIsImNhdGVnb3J5IiwibXVsdGljYXRlZ29yeSJdLGRmbHQ6Ii0iLGVkaXRUeXBlOiJjYWxjIixfbm9UZW1wbGF0aW5nOiEwfSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsInJldmVyc2VkIl0sZGZsdDohMCxlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnsicmFuZ2VbMF0iOnZvaWQgMCwicmFuZ2VbMV0iOnZvaWQgMH19LHJhbmdlbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9ybWFsIiwidG96ZXJvIiwibm9ubmVnYXRpdmUiXSxkZmx0OiJub3JtYWwiLGVkaXRUeXBlOiJwbG90In0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9LGFuaW06ITB9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJheHJhbmdlIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX0sYW5pbTohMH1dLGVkaXRUeXBlOiJheHJhbmdlIixpbXBsaWVkRWRpdHM6e2F1dG9yYW5nZTohMX0sYW5pbTohMH0sZml4ZWRyYW5nZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LHNjYWxlYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W2wuaWRSZWdleC54LnRvU3RyaW5nKCksbC5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6InBsb3QifSxzY2FsZXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGNvbnN0cmFpbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmFuZ2UiLCJkb21haW4iXSxkZmx0OiJyYW5nZSIsZWRpdFR5cGU6InBsb3QifSxjb25zdHJhaW50b3dhcmQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGVkaXRUeXBlOiJwbG90In0sbWF0Y2hlczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltsLmlkUmVnZXgueC50b1N0cmluZygpLGwuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0sdGlja21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsaW5lYXIiLCJhcnJheSJdLGVkaXRUeXBlOiJ0aWNrcyIsaW1wbGllZEVkaXRzOnt0aWNrMDp2b2lkIDAsZHRpY2s6dm9pZCAwfX0sbnRpY2tzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InRpY2tzIn0sdGljazA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOiJsaW5lYXIifX0sZHRpY2s6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOiJsaW5lYXIifX0sdGlja3ZhbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2t0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToidGlja3MifSx0aWNrczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3V0c2lkZSIsImluc2lkZSIsIiJdLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tzb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxhYmVscyIsImJvdW5kYXJpZXMiXSxkZmx0OiJsYWJlbHMiLGVkaXRUeXBlOiJ0aWNrcyJ9LG1pcnJvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwidGlja3MiLCExLCJhbGwiLCJhbGx0aWNrcyJdLGRmbHQ6ITEsZWRpdFR5cGU6InRpY2tzK2xheW91dHN0eWxlIn0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUsZWRpdFR5cGU6InRpY2tzIn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSx0aWNrY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3RpY2tsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InRpY2tzIn0sYXV0b21hcmdpbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MifSxzaG93c3Bpa2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJtb2RlYmFyIn0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bnVsbCxlZGl0VHlwZToibm9uZSJ9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MyxlZGl0VHlwZToibm9uZSJ9LHNwaWtlZGFzaDpvKHt9LGkse2RmbHQ6ImRhc2giLGVkaXRUeXBlOiJub25lIn0pLHNwaWtlbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsidG9heGlzIiwiYWNyb3NzIiwibWFya2VyIl0sZGZsdDoidG9heGlzIixlZGl0VHlwZToibm9uZSJ9LHNwaWtlc25hcDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZGF0YSIsImN1cnNvciJdLGRmbHQ6ImRhdGEiLGVkaXRUeXBlOiJub25lIn0sdGlja2ZvbnQ6bih7ZWRpdFR5cGU6InRpY2tzIn0pLHRpY2thbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2twcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3N1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3d0aWNrc3VmZml4Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToidGlja3MifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJ0aWNrcyJ9LGV4cG9uZW50Zm9ybWF0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwiZSIsIkUiLCJwb3dlciIsIlNJIiwiQiJdLGRmbHQ6IkIiLGVkaXRUeXBlOiJ0aWNrcyJ9LHNlcGFyYXRldGhvdXNhbmRzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSx0aWNrZm9ybWF0c3RvcHM6cygidGlja2Zvcm1hdHN0b3AiLHtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJ0aWNrcyJ9LGR0aWNrcmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToidGlja3MifV0sZWRpdFR5cGU6InRpY2tzIn0sdmFsdWU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MifSxlZGl0VHlwZToidGlja3MifSksaG92ZXJmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToibm9uZSJ9LHNob3dsaW5lOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJ0aWNrcytsYXlvdXRzdHlsZSJ9LGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSxsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcytsYXlvdXRzdHlsZSJ9LHNob3dncmlkOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToidGlja3MifSxncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEubGlnaHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LGdyaWR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InRpY2tzIn0semVyb2xpbmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJ0aWNrcyJ9LHplcm9saW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0semVyb2xpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6InRpY2tzIn0sc2hvd2RpdmlkZXJzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJ0aWNrcyJ9LGRpdmlkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZToidGlja3MifSxkaXZpZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJ0aWNrcyJ9LGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJlZSIsbC5pZFJlZ2V4LngudG9TdHJpbmcoKSxsLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToicGxvdCJ9LHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLGVkaXRUeXBlOiJwbG90In0sb3ZlcmxheWluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJlZSIsbC5pZFJlZ2V4LngudG9TdHJpbmcoKSxsLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToicGxvdCJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhYm92ZSB0cmFjZXMiLCJiZWxvdyB0cmFjZXMiXSxkZmx0OiJhYm92ZSB0cmFjZXMiLGVkaXRUeXBlOiJwbG90In0sZG9tYWluOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9XSxkZmx0OlswLDFdLGVkaXRUeXBlOiJwbG90In0scG9zaXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidHJhY2UiLCJjYXRlZ29yeSBhc2NlbmRpbmciLCJjYXRlZ29yeSBkZXNjZW5kaW5nIiwiYXJyYXkiLCJ0b3RhbCBhc2NlbmRpbmciLCJ0b3RhbCBkZXNjZW5kaW5nIiwibWluIGFzY2VuZGluZyIsIm1pbiBkZXNjZW5kaW5nIiwibWF4IGFzY2VuZGluZyIsIm1heCBkZXNjZW5kaW5nIiwic3VtIGFzY2VuZGluZyIsInN1bSBkZXNjZW5kaW5nIiwibWVhbiBhc2NlbmRpbmciLCJtZWFuIGRlc2NlbmRpbmciLCJtZWRpYW4gYXNjZW5kaW5nIiwibWVkaWFuIGRlc2NlbmRpbmciXSxkZmx0OiJ0cmFjZSIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeWFycmF5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToiY2FsYyIsX2RlcHJlY2F0ZWQ6e2F1dG90aWNrOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToidGlja3MifSx0aXRsZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToidGlja3MifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6InRpY2tzIn0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo1OTEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2MTIsIi4uLy4uL2NvbnN0YW50cy9kb2NzIjo2ODgsIi4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzU1LCIuLi9mb250X2F0dHJpYnV0ZXMiOjc5MSwiLi9jb25zdGFudHMiOjc3MX1dLDc3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4uL2xheW91dF9hdHRyaWJ1dGVzIikscz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuL3R5cGVfZGVmYXVsdHMiKSxjPXQoIi4vYXhpc19kZWZhdWx0cyIpLHU9dCgiLi9jb25zdHJhaW50cyIpLmhhbmRsZUNvbnN0cmFpbnREZWZhdWx0cyxoPXQoIi4vcG9zaXRpb25fZGVmYXVsdHMiKSxmPXQoIi4vYXhpc19pZHMiKSxwPWYuaWQybmFtZSxkPWYubmFtZTJpZCxnPXQoIi4vY29uc3RhbnRzIikuQVhfSURfUEFUVEVSTix2PXQoIi4uLy4uL3JlZ2lzdHJ5IiksbT12LnRyYWNlSXMseT12LmdldENvbXBvbmVudE1ldGhvZDtmdW5jdGlvbiB4KHQsZSxyKXtBcnJheS5pc0FycmF5KHRbZV0pP3RbZV0ucHVzaChyKTp0W2VdPVtyXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBmLHYsYj17fSxfPXt9LHc9e30saz17fSxUPXt9LE09e30sQT17fSxTPXt9LEU9e30sTD17fTtmb3IoZj0wO2Y8ci5sZW5ndGg7ZisrKXt2YXIgQz1yW2ZdO2lmKG0oQywiY2FydGVzaWFuIil8fG0oQywiZ2wyZCIpKXt2YXIgUCxPO2lmKEMueGF4aXMpUD1wKEMueGF4aXMpLHgoYixQLEMpO2Vsc2UgaWYoQy54YXhlcylmb3Iodj0wO3Y8Qy54YXhlcy5sZW5ndGg7disrKXgoYixwKEMueGF4ZXNbdl0pLEMpO2lmKEMueWF4aXMpTz1wKEMueWF4aXMpLHgoYixPLEMpO2Vsc2UgaWYoQy55YXhlcylmb3Iodj0wO3Y8Qy55YXhlcy5sZW5ndGg7disrKXgoYixwKEMueWF4ZXNbdl0pLEMpO2lmKCJmdW5uZWwiPT09Qy50eXBlPyJoIj09PUMub3JpZW50YXRpb24/KFAmJihfW1BdPSEwKSxPJiYoQVtPXT0hMCkpOk8mJih3W09dPSEwKToiaW1hZ2UiPT09Qy50eXBlPyhPJiYoU1tPXT0hMCksUCYmKFNbUF09ITApKTooTyYmKFRbT109ITAsTVtPXT0hMCksbShDLCJjYXJwZXQiKSYmKCJjYXJwZXQiIT09Qy50eXBlfHxDLl9jaGVhdGVyKXx8UCYmKGtbUF09ITApKSwiY2FycGV0Ij09PUMudHlwZSYmQy5fY2hlYXRlciYmUCYmKF9bUF09ITApLG0oQywiMmRNYXAiKSYmKEVbUF09ITAsRVtPXT0hMCksbShDLCJvcmllbnRlZCIpKUxbImgiPT09Qy5vcmllbnRhdGlvbj9POlBdPSEwfX12YXIgej1lLl9zdWJwbG90cyxJPXoueGF4aXMsRD16LnlheGlzLFI9bi5zaW1wbGVNYXAoSSxwKSxGPW4uc2ltcGxlTWFwKEQscCksQj1SLmNvbmNhdChGKSxOPWEuYmFja2dyb3VuZDtJLmxlbmd0aCYmRC5sZW5ndGgmJihOPW4uY29lcmNlKHQsZSxvLCJwbG90X2JnY29sb3IiKSk7dmFyIGosVixVLHEsSCxHPWEuY29tYmluZShOLGUucGFwZXJfYmdjb2xvcik7ZnVuY3Rpb24gWSgpe3ZhciB0PWJbal18fFtdO0guX3RyYWNlSW5kaWNlcz10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5fZXhwYW5kZWRJbmRleH0pLEguX2FubkluZGljZXM9W10sSC5fc2hhcGVJbmRpY2VzPVtdLEguX2ltZ0luZGljZXM9W10sSC5fc3VicGxvdHNXaXRoPVtdLEguX2NvdW50ZXJBeGVzPVtdLEguX25hbWU9SC5fYXR0cj1qLEguX2lkPVZ9ZnVuY3Rpb24gVyh0LGUpe3JldHVybiBuLmNvZXJjZShxLEgscyx0LGUpfWZ1bmN0aW9uIFgodCxlKXtyZXR1cm4gbi5jb2VyY2UyKHEsSCxzLHQsZSl9ZnVuY3Rpb24gWih0KXtyZXR1cm4ieCI9PT10P0Q6SX1mdW5jdGlvbiBKKGUscil7Zm9yKHZhciBuPSJ4Ij09PWU/UjpGLGE9W10saT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO289PT1yfHwodFtvXXx8e30pLm92ZXJsYXlpbmd8fGEucHVzaChkKG8pKX1yZXR1cm4gYX12YXIgSz17eDpaKCJ4IikseTpaKCJ5Iil9LFE9Sy54LmNvbmNhdChLLnkpLCQ9e30sdHQ9W107ZnVuY3Rpb24gZXQoKXt2YXIgdD1xLm1hdGNoZXM7Zy50ZXN0KHQpJiYtMT09PVEuaW5kZXhPZih0KSYmKCRbdF09cS50eXBlLHR0PU9iamVjdC5rZXlzKCQpKX1mb3IoZj0wO2Y8Qi5sZW5ndGg7ZisrKXtqPUJbZl0sVj1kKGopLFU9ai5jaGFyQXQoMCksbi5pc1BsYWluT2JqZWN0KHRbal0pfHwodFtqXT17fSkscT10W2pdLEg9aS5uZXdDb250YWluZXIoZSxqLFUrImF4aXMiKSxZKCk7dmFyIHJ0PSJ4Ij09PVUmJiFrW2pdJiZfW2pdfHwieSI9PT1VJiYhVFtqXSYmd1tqXSxudD0ieSI9PT1VJiYoIU1bal0mJkFbal18fFNbal0pLGF0PXtsZXR0ZXI6VSxmb250OmUuZm9udCxvdXRlclRpY2tzOkVbal0sc2hvd0dyaWQ6IUxbal0sZGF0YTpiW2pdfHxbXSxiZ0NvbG9yOkcsY2FsZW5kYXI6ZS5jYWxlbmRhcixhdXRvbWFyZ2luOiEwLHZpc2libGVEZmx0OnJ0LHJldmVyc2VEZmx0Om50LHNwbG9tU3Rhc2g6KChlLl9zcGxvbUF4ZXN8fHt9KVtVXXx8e30pW1ZdfTtXKCJ1aXJldmlzaW9uIixlLnVpcmV2aXNpb24pLGwocSxILFcsYXQpLGMocSxILFcsYXQsZSk7dmFyIGl0PVgoInNwaWtlY29sb3IiKSxvdD1YKCJzcGlrZXRoaWNrbmVzcyIpLHN0PVgoInNwaWtlZGFzaCIpLGx0PVgoInNwaWtlbW9kZSIpLGN0PVgoInNwaWtlc25hcCIpO1coInNob3dzcGlrZXMiLCEhKGl0fHxvdHx8c3R8fGx0fHxjdCkpfHwoZGVsZXRlIEguc3Bpa2Vjb2xvcixkZWxldGUgSC5zcGlrZXRoaWNrbmVzcyxkZWxldGUgSC5zcGlrZWRhc2gsZGVsZXRlIEguc3Bpa2Vtb2RlLGRlbGV0ZSBILnNwaWtlc25hcCksaChxLEgsVyx7bGV0dGVyOlUsY291bnRlckF4ZXM6S1tVXSxvdmVybGF5YWJsZUF4ZXM6SihVLGopLGdyaWQ6ZS5ncmlkfSksVygidGl0bGUuc3RhbmRvZmYiKSxldCgpLEguX2lucHV0PXF9Zm9yKGY9MDtmPHR0Lmxlbmd0aDspe1Y9dHRbZisrXSxVPShqPXAoVikpLmNoYXJBdCgwKSxuLmlzUGxhaW5PYmplY3QodFtqXSl8fCh0W2pdPXt9KSxxPXRbal0sSD1pLm5ld0NvbnRhaW5lcihlLGosVSsiYXhpcyIpLFkoKTt2YXIgdXQ9e2xldHRlcjpVLGZvbnQ6ZS5mb250LG91dGVyVGlja3M6RVtqXSxzaG93R3JpZDohTFtqXSxkYXRhOltdLGJnQ29sb3I6RyxjYWxlbmRhcjplLmNhbGVuZGFyLGF1dG9tYXJnaW46ITAsdmlzaWJsZURmbHQ6ITEscmV2ZXJzZURmbHQ6ITEsc3Bsb21TdGFzaDooKGUuX3NwbG9tQXhlc3x8e30pW1VdfHx7fSlbVl19O1coInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbiksSC50eXBlPSRbVl18fCJsaW5lYXIiLGMocSxILFcsdXQsZSksaChxLEgsVyx7bGV0dGVyOlUsY291bnRlckF4ZXM6S1tVXSxvdmVybGF5YWJsZUF4ZXM6SihVLGopLGdyaWQ6ZS5ncmlkfSksVygiZml4ZWRyYW5nZSIpLGV0KCksSC5faW5wdXQ9cX12YXIgaHQ9eSgicmFuZ2VzbGlkZXIiLCJoYW5kbGVEZWZhdWx0cyIpLGZ0PXkoInJhbmdlc2VsZWN0b3IiLCJoYW5kbGVEZWZhdWx0cyIpO2ZvcihmPTA7ZjxSLmxlbmd0aDtmKyspaj1SW2ZdLHE9dFtqXSxIPWVbal0saHQodCxlLGopLCJkYXRlIj09PUgudHlwZSYmZnQocSxILGUsRixILmNhbGVuZGFyKSxXKCJmaXhlZHJhbmdlIik7Zm9yKGY9MDtmPEYubGVuZ3RoO2YrKyl7aj1GW2ZdLHE9dFtqXSxIPWVbal07dmFyIHB0PWVbcChILmFuY2hvcildO1coImZpeGVkcmFuZ2UiLHkoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikocHQpKX12YXIgZHQ9ZS5fYXhpc0NvbnN0cmFpbnRHcm91cHM9W10sZ3Q9ZS5fYXhpc01hdGNoR3JvdXBzPVtdLHZ0PVEuY29uY2F0KHR0KSxtdD1CLmNvbmNhdChuLnNpbXBsZU1hcCh0dCxwKSk7Zm9yKGY9MDtmPG10Lmxlbmd0aDtmKyspe3ZhciB5dCx4dDtVPShqPW10W2ZdKS5jaGFyQXQoMCkscT10W2pdLEg9ZVtqXSx5dD0ieSI9PT1VJiYhcS5oYXNPd25Qcm9wZXJ0eSgic2NhbGVhbmNob3IiKSYmU1tqXT9ILmFuY2hvcjp2b2lkIDAseHQ9IXEuaGFzT3duUHJvcGVydHkoImNvbnN0cmFpbiIpJiZTW2pdPyJkb21haW4iOnZvaWQgMCx1KHEsSCxXLHthbGxBeGlzSWRzOnZ0LGxheW91dE91dDplLHNjYWxlYW5jaG9yRGZsdDp5dCxjb25zdHJhaW5EZmx0Onh0fSl9Zm9yKGY9MDtmPGd0Lmxlbmd0aDtmKyspe3ZhciBidD1ndFtmXSxfdD1udWxsLHd0PW51bGw7Zm9yKFYgaW4gYnQpKEg9ZVtwKFYpXSkubWF0Y2hlc3x8KF90PUgucmFuZ2Usd3Q9SC5hdXRvcmFuZ2UpO2lmKG51bGw9PT1fdHx8bnVsbD09PXd0KWZvcihWIGluIGJ0KXtfdD0oSD1lW3AoVildKS5yYW5nZSx3dD1ILmF1dG9yYW5nZTticmVha31mb3IoViBpbiBidCkoSD1lW3AoVildKS5tYXRjaGVzJiYoSC5yYW5nZT1fdC5zbGljZSgpLEguYXV0b3JhbmdlPXd0KSxILl9tYXRjaEdyb3VwPWJ0O2lmKGR0Lmxlbmd0aClmb3IoViBpbiBidClmb3Iodj0wO3Y8ZHQubGVuZ3RoO3YrKyl7dmFyIGt0PWR0W3ZdO2Zvcih2YXIgVHQgaW4ga3QpVj09PVR0JiYobi53YXJuKCJBeGlzICIrVHQrIiBpcyBzZXQgd2l0aCBib3RoIGEgKnNjYWxlYW5jaG9yKiBhbmQgKm1hdGNoZXMqIGNvbnN0cmFpbnQ7IGlnbm9yaW5nIHRoZSBzY2FsZSBjb25zdHJhaW50LiIpLGRlbGV0ZSBrdFtUdF0sT2JqZWN0LmtleXMoa3QpLmxlbmd0aDwyJiZkdC5zcGxpY2UodiwxKSl9fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzU1LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuLi9sYXlvdXRfYXR0cmlidXRlcyI6ODE3LCIuL2F4aXNfZGVmYXVsdHMiOjc2NywiLi9heGlzX2lkcyI6NzY4LCIuL2NvbnN0YW50cyI6NzcxLCIuL2NvbnN0cmFpbnRzIjo3NzIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3NywiLi9wb3NpdGlvbl9kZWZhdWx0cyI6NzgwLCIuL3R5cGVfZGVmYXVsdHMiOjc4OH1dLDc3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIikubWl4LGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikubGlnaHRGcmFjdGlvbixpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcz0obz1vfHx7fSkuZGZsdENvbG9yO2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gaS5jb2VyY2UyKHQsZSxvLmF0dHJpYnV0ZXMscixuKX12YXIgYz1sKCJsaW5lY29sb3IiLHMpLHU9bCgibGluZXdpZHRoIik7cigic2hvd2xpbmUiLG8uc2hvd0xpbmV8fCEhY3x8ISF1KXx8KGRlbGV0ZSBlLmxpbmVjb2xvcixkZWxldGUgZS5saW5ld2lkdGgpO3ZhciBoPWwoImdyaWRjb2xvciIsbihzLG8uYmdDb2xvcixvLmJsZW5kfHxhKS50b1JnYlN0cmluZygpKSxmPWwoImdyaWR3aWR0aCIpO2lmKHIoInNob3dncmlkIixvLnNob3dHcmlkfHwhIWh8fCEhZil8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKSwhby5ub1plcm9MaW5lKXt2YXIgcD1sKCJ6ZXJvbGluZWNvbG9yIixzKSxkPWwoInplcm9saW5ld2lkdGgiKTtyKCJ6ZXJvbGluZSIsby5zaG93R3JpZHx8ISFwfHwhIWQpfHwoZGVsZXRlIGUuemVyb2xpbmVjb2xvcixkZWxldGUgZS56ZXJvbGluZXdpZHRoKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTkxLCIuLi8uLi9saWIiOjcxNyx0aW55Y29sb3IyOjUzNn1dLDc4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBvLHMsbCxjLHU9aS5jb3VudGVyQXhlc3x8W10saD1pLm92ZXJsYXlhYmxlQXhlc3x8W10sZj1pLmxldHRlcixwPWkuZ3JpZDtwJiYocz1wLl9kb21haW5zW2ZdW3AuX2F4aXNNYXBbZS5faWRdXSxvPXAuX2FuY2hvcnNbZS5faWRdLHMmJihsPXBbZisic2lkZSJdLnNwbGl0KCIgIilbMF0sYz1wLmRvbWFpbltmXVsicmlnaHQiPT09bHx8InRvcCI9PT1sPzE6MF0pKSxzPXN8fFswLDFdLG89b3x8KG4odC5wb3NpdGlvbik/ImZyZWUiOnVbMF18fCJmcmVlIiksbD1sfHwoIngiPT09Zj8iYm90dG9tIjoibGVmdCIpLGM9Y3x8MCwiZnJlZSI9PT1hLmNvZXJjZSh0LGUse2FuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJlZSJdLmNvbmNhdCh1KSxkZmx0Om99fSwiYW5jaG9yIikmJnIoInBvc2l0aW9uIixjKSxhLmNvZXJjZSh0LGUse3NpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczoieCI9PT1mP1siYm90dG9tIiwidG9wIl06WyJsZWZ0IiwicmlnaHQiXSxkZmx0Omx9fSwic2lkZSIpO3ZhciBkPSExO2lmKGgubGVuZ3RoJiYoZD1hLmNvZXJjZSh0LGUse292ZXJsYXlpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITFdLmNvbmNhdChoKSxkZmx0OiExfX0sIm92ZXJsYXlpbmciKSksIWQpe3ZhciBnPXIoImRvbWFpbiIscyk7Z1swXT5nWzFdLTEvNDA5NiYmKGUuZG9tYWluPXMpLGEubm9uZU9yQWxsKHQuZG9tYWluLGUuZG9tYWluLHMpfXJldHVybiByKCJsYXllciIpLGV9fSx7Ii4uLy4uL2xpYiI6NzE3LCJmYXN0LWlzbnVtZXJpYyI6MjI4fV0sNzgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX0JMO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dm9pZCAwPT09ciYmKHI9blt0LmNvbnN0cmFpbnRvd2FyZHx8ImNlbnRlciJdKTt2YXIgYT1bdC5yMmwodC5yYW5nZVswXSksdC5yMmwodC5yYW5nZVsxXSldLGk9YVswXSsoYVsxXS1hWzBdKSpyO3QucmFuZ2U9dC5faW5wdXQucmFuZ2U9W3QubDJyKGkrKGFbMF0taSkqZSksdC5sMnIoaSsoYVsxXS1pKSplKV19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY4Nn1dLDc4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwb2x5Ym9vbGpzIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9saWIvcG9seWdvbiIpLGM9dCgiLi4vLi4vbGliL3Rocm90dGxlIiksdT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5tYWtlRXZlbnREYXRhLGg9dCgiLi9heGlzX2lkcyIpLmdldEZyb21JZCxmPXQoIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLHA9dCgiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiKS5yZWRyYXdSZWdsVHJhY2VzLGQ9dCgiLi9jb25zdGFudHMiKSxnPWQuTUlOU0VMRUNULHY9bC5maWx0ZXIsbT1sLnRlc3RlcjtmdW5jdGlvbiB5KHQpe3JldHVybiB0Ll9pZH1mdW5jdGlvbiB4KHQsZSxyLG4sYSxpLG8pe3ZhciBzLGwsYyx1LGgsZixwLGQsZyx2PWUuX2hvdmVyZGF0YSxtPWUuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlLmluZGV4T2YoImV2ZW50Iik+LTEseT1bXTtpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmQXJyYXkuaXNBcnJheSh0KSYmITAhPT10WzBdLmhvdmVyT25Cb3h9KHYpKXtrKHQsZSxpKTt2YXIgeD1mdW5jdGlvbih0LGUpe3ZhciByLG4sYT10WzBdLGk9LTEsbz1bXTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWlmKHI9ZVtuXSxhLmZ1bGxEYXRhLl9leHBhbmRlZEluZGV4PT09ci5jZFswXS50cmFjZS5fZXhwYW5kZWRJbmRleCl7aWYoITA9PT1hLmhvdmVyT25Cb3gpYnJlYWs7dm9pZCAwIT09YS5wb2ludE51bWJlcj9pPWEucG9pbnROdW1iZXI6dm9pZCAwIT09YS5iaW5OdW1iZXImJihpPWEuYmluTnVtYmVyLG89YS5wb2ludE51bWJlcnMpO2JyZWFrfXJldHVybntwb2ludE51bWJlcjppLHBvaW50TnVtYmVyczpvLHNlYXJjaEluZm86cn19KHYscz1NKGUscixuLGEpKTtpZih4LnBvaW50TnVtYmVycy5sZW5ndGg+MD9mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxpPVtdO2ZvcihhPTA7YTx0Lmxlbmd0aDthKyspKHI9dFthXSkuY2RbMF0udHJhY2Uuc2VsZWN0ZWRwb2ludHMmJnIuY2RbMF0udHJhY2Uuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPjAmJmkucHVzaChyKTtpZigxPT09aS5sZW5ndGgmJmlbMF09PT1lLnNlYXJjaEluZm8mJihuPWUuc2VhcmNoSW5mby5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPT09ZS5wb2ludE51bWJlcnMubGVuZ3RoKXtmb3IoYT0wO2E8ZS5wb2ludE51bWJlcnMubGVuZ3RoO2ErKylpZihuLnNlbGVjdGVkcG9pbnRzLmluZGV4T2YoZS5wb2ludE51bWJlcnNbYV0pPDApcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9KHMseCk6ZnVuY3Rpb24odCl7dmFyIGUscixuLGE9MDtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKGU9dFtuXSwocj1lLmNkWzBdLnRyYWNlKS5zZWxlY3RlZHBvaW50cyl7aWYoci5zZWxlY3RlZHBvaW50cy5sZW5ndGg+MSlyZXR1cm4hMTtpZigoYSs9ci5zZWxlY3RlZHBvaW50cy5sZW5ndGgpPjEpcmV0dXJuITF9cmV0dXJuIDE9PT1hfShzKSYmKGY9Uyh4KSkpe2ZvcihvJiZvLnJlbW92ZSgpLGc9MDtnPHMubGVuZ3RoO2crKykobD1zW2ddKS5fbW9kdWxlLnNlbGVjdFBvaW50cyhsLCExKTtFKGUscyksVChpKSxtJiZlLmVtaXQoInBsb3RseV9kZXNlbGVjdCIsbnVsbCl9ZWxzZXtmb3IocD10LnNoaWZ0S2V5JiYodm9pZCAwIT09Zj9mOlMoeCkpLGM9ZnVuY3Rpb24odCxlLHIpe3JldHVybntwb2ludE51bWJlcjp0LHNlYXJjaEluZm86ZSxzdWJ0cmFjdDpyfX0oeC5wb2ludE51bWJlcix4LnNlYXJjaEluZm8scCksdT13KGkuc2VsZWN0aW9uRGVmcy5jb25jYXQoW2NdKSksZz0wO2c8cy5sZW5ndGg7ZysrKWlmKGg9TChzW2ddLl9tb2R1bGUuc2VsZWN0UG9pbnRzKHNbZ10sdSksc1tnXSkseS5sZW5ndGgpZm9yKHZhciBiPTA7YjxoLmxlbmd0aDtiKyspeS5wdXNoKGhbYl0pO2Vsc2UgeT1oO0UoZSxzLGQ9e3BvaW50czp5fSksYyYmaSYmaS5zZWxlY3Rpb25EZWZzLnB1c2goYyksbyYmQShpLm1lcmdlZFBvbHlnb25zLG8pLG0mJmUuZW1pdCgicGxvdGx5X3NlbGVjdGVkIixkKX19fWZ1bmN0aW9uIGIodCl7cmV0dXJuInBvaW50TnVtYmVyImluIHQmJiJzZWFyY2hJbmZvImluIHR9ZnVuY3Rpb24gXyh0KXtyZXR1cm57eG1pbjowLHhtYXg6MCx5bWluOjAseW1heDowLHB0czpbXSxjb250YWluczpmdW5jdGlvbihlLHIsbixhKXt2YXIgaT10LnNlYXJjaEluZm8uY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXg7cmV0dXJuIGEuY2RbMF0udHJhY2UuX2V4cGFuZGVkSW5kZXg9PT1pJiZuPT09dC5wb2ludE51bWJlcn0saXNSZWN0OiExLGRlZ2VuZXJhdGU6ITEsc3VidHJhY3Q6dC5zdWJ0cmFjdH19ZnVuY3Rpb24gdyh0KXtmb3IodmFyIGU9W10scj1iKHRbMF0pPzA6dFswXVswXVswXSxuPXIsYT1iKHRbMF0pPzA6dFswXVswXVsxXSxpPWEsbz0wO288dC5sZW5ndGg7bysrKWlmKGIodFtvXSkpZS5wdXNoKF8odFtvXSkpO2Vsc2V7dmFyIHM9bC50ZXN0ZXIodFtvXSk7cy5zdWJ0cmFjdD10W29dLnN1YnRyYWN0LGUucHVzaChzKSxyPU1hdGgubWluKHIscy54bWluKSxuPU1hdGgubWF4KG4scy54bWF4KSxhPU1hdGgubWluKGEscy55bWluKSxpPU1hdGgubWF4KGkscy55bWF4KX1yZXR1cm57eG1pbjpyLHhtYXg6bix5bWluOmEseW1heDppLHB0czpbXSxjb250YWluczpmdW5jdGlvbih0LHIsbixhKXtmb3IodmFyIGk9ITEsbz0wO288ZS5sZW5ndGg7bysrKWVbb10uY29udGFpbnModCxyLG4sYSkmJihpPSExPT09ZVtvXS5zdWJ0cmFjdCk7cmV0dXJuIGl9LGlzUmVjdDohMSxkZWdlbmVyYXRlOiExfX1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgbj1lLl9mdWxsTGF5b3V0LGE9ci5wbG90aW5mbyxpPW4uX2xhc3RTZWxlY3RlZFN1YnBsb3QmJm4uX2xhc3RTZWxlY3RlZFN1YnBsb3Q9PT1hLmlkLG89dC5zaGlmdEtleXx8dC5hbHRLZXk7aSYmbyYmYS5zZWxlY3Rpb24mJmEuc2VsZWN0aW9uLnNlbGVjdGlvbkRlZnMmJiFyLnNlbGVjdGlvbkRlZnM/KHIuc2VsZWN0aW9uRGVmcz1hLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzLHIubWVyZ2VkUG9seWdvbnM9YS5zZWxlY3Rpb24ubWVyZ2VkUG9seWdvbnMpOm8mJmEuc2VsZWN0aW9ufHxUKHIpLGl8fChDKGUpLG4uX2xhc3RTZWxlY3RlZFN1YnBsb3Q9YS5pZCl9ZnVuY3Rpb24gVCh0KXt2YXIgZT10LnBsb3RpbmZvO2Uuc2VsZWN0aW9uPXt9LGUuc2VsZWN0aW9uLnNlbGVjdGlvbkRlZnM9dC5zZWxlY3Rpb25EZWZzPVtdLGUuc2VsZWN0aW9uLm1lcmdlZFBvbHlnb25zPXQubWVyZ2VkUG9seWdvbnM9W119ZnVuY3Rpb24gTSh0LGUscixuKXt2YXIgYSxpLG8scz1bXSxsPWUubWFwKHkpLGM9ci5tYXAoeSk7Zm9yKG89MDtvPHQuY2FsY2RhdGEubGVuZ3RoO28rKylpZighMD09PShpPShhPXQuY2FsY2RhdGFbb10pWzBdLnRyYWNlKS52aXNpYmxlJiZpLl9tb2R1bGUmJmkuX21vZHVsZS5zZWxlY3RQb2ludHMpaWYoIW58fGkuc3VicGxvdCE9PW4mJmkuZ2VvIT09bilpZigic3Bsb20iPT09aS50eXBlJiZpLl94YXhlc1tsWzBdXSYmaS5feWF4ZXNbY1swXV0pe3ZhciB1PXAoaS5fbW9kdWxlLGEsZVswXSxyWzBdKTt1LnNjZW5lPXQuX2Z1bGxMYXlvdXQuX3NwbG9tU2NlbmVzW2kudWlkXSxzLnB1c2godSl9ZWxzZSBpZigic2Fua2V5Ij09PWkudHlwZSl7dmFyIGY9cChpLl9tb2R1bGUsYSxlWzBdLHJbMF0pO3MucHVzaChmKX1lbHNle2lmKC0xPT09bC5pbmRleE9mKGkueGF4aXMpKWNvbnRpbnVlO2lmKC0xPT09Yy5pbmRleE9mKGkueWF4aXMpKWNvbnRpbnVlO3MucHVzaChwKGkuX21vZHVsZSxhLGgodCxpLnhheGlzKSxoKHQsaS55YXhpcykpKX1lbHNlIHMucHVzaChwKGkuX21vZHVsZSxhLGVbMF0sclswXSkpO3JldHVybiBzO2Z1bmN0aW9uIHAodCxlLHIsbil7cmV0dXJue19tb2R1bGU6dCxjZDplLHhheGlzOnIseWF4aXM6bn19fWZ1bmN0aW9uIEEodCxlKXt2YXIgcixuLGE9W107Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dFtyXTthLnB1c2goaS5qb2luKCJMIikrIkwiK2lbMF0pfW49dC5sZW5ndGg+MD8iTSIrYS5qb2luKCJNIikrIloiOiJNMCwwWiIsZS5hdHRyKCJkIixuKX1mdW5jdGlvbiBTKHQpe3ZhciBlPXQuc2VhcmNoSW5mby5jZFswXS50cmFjZSxyPXQucG9pbnROdW1iZXIsbj10LnBvaW50TnVtYmVycyxhPW4ubGVuZ3RoPjA/blswXTpyO3JldHVybiEhZS5zZWxlY3RlZHBvaW50cyYmZS5zZWxlY3RlZHBvaW50cy5pbmRleE9mKGEpPi0xfWZ1bmN0aW9uIEUodCxlLHIpe3ZhciBuLGksbyxzO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBsPWVbbl0uY2RbMF0udHJhY2UuX2Z1bGxJbnB1dCxjPXQuX2Z1bGxMYXlvdXQuX3RyYWNlUHJlR1VJW2wudWlkXXx8e307dm9pZCAwPT09Yy5zZWxlY3RlZHBvaW50cyYmKGMuc2VsZWN0ZWRwb2ludHM9bC5faW5wdXQuc2VsZWN0ZWRwb2ludHN8fG51bGwpfWlmKHIpe3ZhciB1PXIucG9pbnRzfHxbXTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKShzPWVbbl0uY2RbMF0udHJhY2UpLl9pbnB1dC5zZWxlY3RlZHBvaW50cz1zLl9mdWxsSW5wdXQuc2VsZWN0ZWRwb2ludHM9W10scy5fZnVsbElucHV0IT09cyYmKHMuc2VsZWN0ZWRwb2ludHM9W10pO2ZvcihuPTA7bjx1Lmxlbmd0aDtuKyspe3ZhciBoPXVbbl0sZD1oLmRhdGEsZz1oLmZ1bGxEYXRhO2gucG9pbnRJbmRpY2VzPyhbXS5wdXNoLmFwcGx5KGQuc2VsZWN0ZWRwb2ludHMsaC5wb2ludEluZGljZXMpLHMuX2Z1bGxJbnB1dCE9PXMmJltdLnB1c2guYXBwbHkoZy5zZWxlY3RlZHBvaW50cyxoLnBvaW50SW5kaWNlcykpOihkLnNlbGVjdGVkcG9pbnRzLnB1c2goaC5wb2ludEluZGV4KSxzLl9mdWxsSW5wdXQhPT1zJiZnLnNlbGVjdGVkcG9pbnRzLnB1c2goaC5wb2ludEluZGV4KSl9fWVsc2UgZm9yKG49MDtuPGUubGVuZ3RoO24rKylkZWxldGUocz1lW25dLmNkWzBdLnRyYWNlKS5zZWxlY3RlZHBvaW50cyxkZWxldGUgcy5faW5wdXQuc2VsZWN0ZWRwb2ludHMscy5fZnVsbElucHV0IT09cyYmZGVsZXRlIHMuX2Z1bGxJbnB1dC5zZWxlY3RlZHBvaW50czt2YXIgdj0hMTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXtzPShvPShpPWVbbl0pLmNkKVswXS50cmFjZSxhLnRyYWNlSXMocywicmVnbCIpJiYodj0hMCk7dmFyIG09aS5fbW9kdWxlLHk9bS5zdHlsZU9uU2VsZWN0fHxtLnN0eWxlO3kmJih5KHQsbyxvWzBdLm5vZGUzKSxvWzBdLm5vZGVSYW5nZVBsb3QzJiZ5KHQsbyxvWzBdLm5vZGVSYW5nZVBsb3QzKSl9diYmKGYodCkscCh0KSl9ZnVuY3Rpb24gTCh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPWUuY2Qsbj1lLmNkWzBdLnRyYWNlLGE9MDthPHQubGVuZ3RoO2ErKyl0W2FdPXUodFthXSxuLHIpO3JldHVybiB0fWZ1bmN0aW9uIEModCl7dmFyIGU9KHQuX2Z1bGxMYXlvdXR8fHt9KS5fem9vbWxheWVyO2UmJmUuc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUiKS5yZW1vdmUoKX1lLmV4cG9ydHM9e3ByZXBTZWxlY3Q6ZnVuY3Rpb24odCxlLHIsYSxsKXt2YXIgdSxoLGYscCx5LGIsXyxTPWEuZ2QsQz1TLl9mdWxsTGF5b3V0LFA9Qy5fem9vbWxheWVyLE89YS5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHo9YS5wbG90aW5mbyxJPXoueGF4aXMuX29mZnNldCxEPXoueWF4aXMuX29mZnNldCxSPWUtTy5sZWZ0LEY9ci1PLnRvcCxCPVIsTj1GLGo9Ik0iK1IrIiwiK0YsVj1hLnhheGVzWzBdLl9sZW5ndGgsVT1hLnlheGVzWzBdLl9sZW5ndGgscT1hLnhheGVzLmNvbmNhdChhLnlheGVzKSxIPXQuYWx0S2V5O2sodCxTLGEpLCJsYXNzbyI9PT1sJiYodT12KFtbUixGXV0sZC5CRU5EUFgpKTt2YXIgRz1QLnNlbGVjdEFsbCgicGF0aC5zZWxlY3Qtb3V0bGluZS0iK3ouaWQpLmRhdGEoWzEsMl0pO0cuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuInNlbGVjdC1vdXRsaW5lIHNlbGVjdC1vdXRsaW5lLSIrdCsiIHNlbGVjdC1vdXRsaW5lLSIrei5pZH0pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0krIiwgIitEKyIpIikuYXR0cigiZCIsaisiWiIpO3ZhciBZLFc9UC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLnN0eWxlKHtmaWxsOmkuYmFja2dyb3VuZCxzdHJva2U6aS5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxfSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrSSsiLCAiK0QrIikiKS5hdHRyKCJkIiwiTTAsMFoiKSxYPUMuX3VpZCtkLlNFTEVDVElELFo9W10sSj1NKFMsYS54YXhlcyxhLnlheGVzLGEuc3VicGxvdCk7ZnVuY3Rpb24gSyh0LGUpe3JldHVybiJsb2ciPT09dC50eXBlP3QucDJkKGUpOnQucDJyKGUpfWZ1bmN0aW9uIFEodCl7dmFyIGU9InkiPT09dC5faWQuY2hhckF0KDApPzE6MDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIEsodCxyW2VdKX19ZnVuY3Rpb24gJCh0LGUpe3JldHVybiB0LWV9WT16LmZpbGxSYW5nZUl0ZW1zP3ouZmlsbFJhbmdlSXRlbXM6InNlbGVjdCI9PT1sP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYW5nZT17fTtmb3IoeT0wO3k8cS5sZW5ndGg7eSsrKXt2YXIgbj1xW3ldLGE9bi5faWQuY2hhckF0KDApO3Jbbi5faWRdPVtLKG4sZVthKyJtaW4iXSksSyhuLGVbYSsibWF4Il0pXS5zb3J0KCQpfX06ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQubGFzc29Qb2ludHM9e307Zm9yKHk9MDt5PHEubGVuZ3RoO3krKyl7dmFyIGE9cVt5XTtuW2EuX2lkXT1yLmZpbHRlcmVkLm1hcChRKGEpKX19LGEubW92ZUZuPWZ1bmN0aW9uKHQsZSl7Qj1NYXRoLm1heCgwLE1hdGgubWluKFYsdCtSKSksTj1NYXRoLm1heCgwLE1hdGgubWluKFUsZStGKSk7dmFyIHI9TWF0aC5hYnMoQi1SKSxpPU1hdGguYWJzKE4tRik7aWYoInNlbGVjdCI9PT1sKXt2YXIgbz1DLnNlbGVjdGRpcmVjdGlvbjsiaCI9PT0obz0iYW55Ij09PUMuc2VsZWN0ZGlyZWN0aW9uP2k8TWF0aC5taW4oLjYqcixnKT8iaCI6cjxNYXRoLm1pbiguNippLGcpPyJ2IjoiZCI6Qy5zZWxlY3RkaXJlY3Rpb24pPygocD1bW1IsMF0sW1IsVV0sW0IsVV0sW0IsMF1dKS54bWluPU1hdGgubWluKFIsQikscC54bWF4PU1hdGgubWF4KFIsQikscC55bWluPU1hdGgubWluKDAsVSkscC55bWF4PU1hdGgubWF4KDAsVSksVy5hdHRyKCJkIiwiTSIrcC54bWluKyIsIisoRi1nKSsiaC00diIrMipnKyJoNFpNIisocC54bWF4LTEpKyIsIisoRi1nKSsiaDR2IisyKmcrImgtNFoiKSk6InYiPT09bz8oKHA9W1swLEZdLFswLE5dLFtWLE5dLFtWLEZdXSkueG1pbj1NYXRoLm1pbigwLFYpLHAueG1heD1NYXRoLm1heCgwLFYpLHAueW1pbj1NYXRoLm1pbihGLE4pLHAueW1heD1NYXRoLm1heChGLE4pLFcuYXR0cigiZCIsIk0iKyhSLWcpKyIsIitwLnltaW4rInYtNGgiKzIqZysidjRaTSIrKFItZykrIiwiKyhwLnltYXgtMSkrInY0aCIrMipnKyJ2LTRaIikpOiJkIj09PW8mJigocD1bW1IsRl0sW1IsTl0sW0IsTl0sW0IsRl1dKS54bWluPU1hdGgubWluKFIsQikscC54bWF4PU1hdGgubWF4KFIsQikscC55bWluPU1hdGgubWluKEYsTikscC55bWF4PU1hdGgubWF4KEYsTiksVy5hdHRyKCJkIiwiTTAsMFoiKSl9ZWxzZSJsYXNzbyI9PT1sJiYodS5hZGRQdChbQixOXSkscD11LmZpbHRlcmVkKTthLnNlbGVjdGlvbkRlZnMmJmEuc2VsZWN0aW9uRGVmcy5sZW5ndGg/KGY9ZnVuY3Rpb24odCxlLHIpe3JldHVybiByP24uZGlmZmVyZW5jZSh7cmVnaW9uczp0LGludmVydGVkOiExfSx7cmVnaW9uczpbZV0saW52ZXJ0ZWQ6ITF9KS5yZWdpb25zOm4udW5pb24oe3JlZ2lvbnM6dCxpbnZlcnRlZDohMX0se3JlZ2lvbnM6W2VdLGludmVydGVkOiExfSkucmVnaW9uc30oYS5tZXJnZWRQb2x5Z29ucyxwLEgpLHAuc3VidHJhY3Q9SCxoPXcoYS5zZWxlY3Rpb25EZWZzLmNvbmNhdChbcF0pKSk6KGY9W3BdLGg9bShwKSksQShmLEcpLGMudGhyb3R0bGUoWCxkLlNFTEVDVERFTEFZLGZ1bmN0aW9uKCl7dmFyIHQ7Wj1bXTt2YXIgZSxyPVtdO2Zvcih5PTA7eTxKLmxlbmd0aDt5KyspaWYoZT0oYj1KW3ldKS5fbW9kdWxlLnNlbGVjdFBvaW50cyhiLGgpLHIucHVzaChlKSx0PUwoZSxiKSxaLmxlbmd0aClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylaLnB1c2godFtuXSk7ZWxzZSBaPXQ7RShTLEosXz17cG9pbnRzOlp9KSxZKF8scCx1KSxhLmdkLmVtaXQoInBsb3RseV9zZWxlY3RpbmciLF8pfSl9LGEuY2xpY2tGbj1mdW5jdGlvbih0LGUpe3ZhciByPUMuY2xpY2ttb2RlO1cucmVtb3ZlKCksYy5kb25lKFgpLnRoZW4oZnVuY3Rpb24oKXtpZihjLmNsZWFyKFgpLDI9PT10KXtmb3IoRy5yZW1vdmUoKSx5PTA7eTxKLmxlbmd0aDt5KyspKGI9Slt5XSkuX21vZHVsZS5zZWxlY3RQb2ludHMoYiwhMSk7RShTLEopLFQoYSksUy5lbWl0KCJwbG90bHlfZGVzZWxlY3QiLG51bGwpfWVsc2Ugci5pbmRleE9mKCJzZWxlY3QiKT4tMSYmeChlLFMsYS54YXhlcyxhLnlheGVzLGEuc3VicGxvdCxhLEcpLCJldmVudCI9PT1yJiZTLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsdm9pZCAwKTtvLmNsaWNrKFMsZSl9KS5jYXRjaChzLmVycm9yKX0sYS5kb25lRm49ZnVuY3Rpb24oKXtXLnJlbW92ZSgpLGMuZG9uZShYKS50aGVuKGZ1bmN0aW9uKCl7Yy5jbGVhcihYKSxhLmdkLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsXykscCYmYS5zZWxlY3Rpb25EZWZzJiYocC5zdWJ0cmFjdD1ILGEuc2VsZWN0aW9uRGVmcy5wdXNoKHApLGEubWVyZ2VkUG9seWdvbnMubGVuZ3RoPTAsW10ucHVzaC5hcHBseShhLm1lcmdlZFBvbHlnb25zLGYpKSxhLmRvbmVGbkNvbXBsZXRlZCYmYS5kb25lRm5Db21wbGV0ZWQoWil9KS5jYXRjaChzLmVycm9yKX19LGNsZWFyU2VsZWN0OkMsc2VsZWN0T25DbGljazp4fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYzMCwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2MjcsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiOjcwMiwiLi4vLi4vbGliL3BvbHlnb24iOjcyOSwiLi4vLi4vbGliL3Rocm90dGxlIjo3NDIsIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIjo3NTYsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4vYXhpc19pZHMiOjc2OCwiLi9jb25zdGFudHMiOjc3MSxwb2x5Ym9vbGpzOjQ3NX1dLDc4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLG89aS5jbGVhbk51bWJlcixzPWkubXMyRGF0ZVRpbWUsbD1pLmRhdGVUaW1lMm1zLGM9aS5lbnN1cmVOdW1iZXIsdT1pLmlzQXJyYXlPclR5cGVkQXJyYXksaD10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksZj1oLkZQX1NBRkUscD1oLkJBRE5VTSxkPWguTE9HX0NMSVAsZz10KCIuL2NvbnN0YW50cyIpLHY9dCgiLi9heGlzX2lkcyIpO2Z1bmN0aW9uIG0odCl7cmV0dXJuIE1hdGgucG93KDEwLHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIG51bGwhPXR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj10Ll9pZHx8IngiLGg9ci5jaGFyQXQoMCk7ZnVuY3Rpb24geChlLHIpe2lmKGU+MClyZXR1cm4gTWF0aC5sb2coZSkvTWF0aC5MTjEwO2lmKGU8PTAmJnImJnQucmFuZ2UmJjI9PT10LnJhbmdlLmxlbmd0aCl7dmFyIG49dC5yYW5nZVswXSxhPXQucmFuZ2VbMV07cmV0dXJuLjUqKG4rYS0yKmQqTWF0aC5hYnMobi1hKSl9cmV0dXJuIHB9ZnVuY3Rpb24gYihlLHIsbil7dmFyIG89bChlLG58fHQuY2FsZW5kYXIpO2lmKG89PT1wKXtpZighYShlKSlyZXR1cm4gcDtlPStlO3ZhciBzPU1hdGguZmxvb3IoMTAqaS5tb2QoZSsuMDUsMSkpLGM9TWF0aC5yb3VuZChlLXMvMTApO289bChuZXcgRGF0ZShjKSkrcy8xMH1yZXR1cm4gb31mdW5jdGlvbiBfKGUscixuKXtyZXR1cm4gcyhlLHIsbnx8dC5jYWxlbmRhcil9ZnVuY3Rpb24gdyhlKXtyZXR1cm4gdC5fY2F0ZWdvcmllc1tNYXRoLnJvdW5kKGUpXX1mdW5jdGlvbiBrKGUpe2lmKHkoZSkpe2lmKHZvaWQgMD09PXQuX2NhdGVnb3JpZXNNYXAmJih0Ll9jYXRlZ29yaWVzTWFwPXt9KSx2b2lkIDAhPT10Ll9jYXRlZ29yaWVzTWFwW2VdKXJldHVybiB0Ll9jYXRlZ29yaWVzTWFwW2VdO3QuX2NhdGVnb3JpZXMucHVzaCgibnVtYmVyIj09dHlwZW9mIGU/U3RyaW5nKGUpOmUpO3ZhciByPXQuX2NhdGVnb3JpZXMubGVuZ3RoLTE7cmV0dXJuIHQuX2NhdGVnb3JpZXNNYXBbZV09cixyfXJldHVybiBwfWZ1bmN0aW9uIFQoZSl7aWYodC5fY2F0ZWdvcmllc01hcClyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXX1mdW5jdGlvbiBNKHQpe3ZhciBlPVQodCk7cmV0dXJuIHZvaWQgMCE9PWU/ZTphKHQpPyt0OnZvaWQgMH1mdW5jdGlvbiBBKGUpe3JldHVybiBhKGUpP24ucm91bmQodC5fYit0Ll9tKmUsMik6cH1mdW5jdGlvbiBTKGUpe3JldHVybihlLXQuX2IpL3QuX219dC5jMmw9ImxvZyI9PT10LnR5cGU/eDpjLHQubDJjPSJsb2ciPT09dC50eXBlP206Yyx0LmwycD1BLHQucDJsPVMsdC5jMnA9ImxvZyI9PT10LnR5cGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gQSh4KHQsZSkpfTpBLHQucDJjPSJsb2ciPT09dC50eXBlP2Z1bmN0aW9uKHQpe3JldHVybiBtKFModCkpfTpTLC0xIT09WyJsaW5lYXIiLCItIl0uaW5kZXhPZih0LnR5cGUpPyh0LmQycj10LnIyZD10LmQyYz10LnIyYz10LmQybD10LnIybD1vLHQuYzJkPXQuYzJyPXQubDJkPXQubDJyPWMsdC5kMnA9dC5yMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKG8oZSkpfSx0LnAyZD10LnAycj1TLHQuY2xlYW5Qb3M9Yyk6ImxvZyI9PT10LnR5cGU/KHQuZDJyPXQuZDJsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHgobyh0KSxlKX0sdC5yMmQ9dC5yMmM9ZnVuY3Rpb24odCl7cmV0dXJuIG0obyh0KSl9LHQuZDJjPXQucjJsPW8sdC5jMmQ9dC5sMnI9Yyx0LmMycj14LHQubDJkPW0sdC5kMnA9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5sMnAodC5kMnIoZSxyKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiBtKFModCkpfSx0LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAobyhlKSl9LHQucDJyPVMsdC5jbGVhblBvcz1jKToiZGF0ZSI9PT10LnR5cGU/KHQuZDJyPXQucjJkPWkuaWRlbnRpdHksdC5kMmM9dC5yMmM9dC5kMmw9dC5yMmw9Yix0LmMyZD10LmMycj10LmwyZD10Lmwycj1fLHQuZDJwPXQucjJwPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5sMnAoYihlLDAsbikpfSx0LnAyZD10LnAycj1mdW5jdGlvbih0LGUscil7cmV0dXJuIF8oUyh0KSxlLHIpfSx0LmNsZWFuUG9zPWZ1bmN0aW9uKGUpe3JldHVybiBpLmNsZWFuRGF0ZShlLHAsdC5jYWxlbmRhcil9KToiY2F0ZWdvcnkiPT09dC50eXBlPyh0LmQyYz10LmQybD1rLHQucjJkPXQuYzJkPXQubDJkPXcsdC5kMnI9dC5kMmxfbm9hZGQ9TSx0LnIyYz1mdW5jdGlvbihlKXt2YXIgcj1NKGUpO3JldHVybiB2b2lkIDAhPT1yP3I6dC5mcmFjdGlvbjJyKC41KX0sdC5sMnI9dC5jMnI9Yyx0LnIybD1NLHQuZDJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycCh0LnIyYyhlKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiB3KFModCkpfSx0LnIycD10LmQycCx0LnAycj1TLHQuY2xlYW5Qb3M9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYiIiE9PXQ/dDpjKHQpfSk6Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlJiYodC5yMmQ9dC5jMmQ9dC5sMmQ9dyx0LmQycj10LmQybF9ub2FkZD1NLHQucjJjPWZ1bmN0aW9uKGUpe3ZhciByPU0oZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmZyYWN0aW9uMnIoLjUpfSx0LnIyY19qdXN0X2luZGljZXM9VCx0Lmwycj10LmMycj1jLHQucjJsPU0sdC5kMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKHQucjJjKGUpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHcoUyh0KSl9LHQucjJwPXQuZDJwLHQucDJyPVMsdC5jbGVhblBvcz1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8InN0cmluZyI9PXR5cGVvZiB0JiYiIiE9PXQ/dDpjKHQpfSx0LnNldHVwTXVsdGlDYXRlZ29yeT1mdW5jdGlvbihuKXt2YXIgYSxvLHM9dC5fdHJhY2VJbmRpY2VzLGw9ZS5fYXhpc01hdGNoR3JvdXBzO2lmKGwmJmwubGVuZ3RoJiYwPT09dC5fY2F0ZWdvcmllcy5sZW5ndGgpZm9yKGE9MDthPGwubGVuZ3RoO2ErKyl7dmFyIGM9bFthXTtpZihjW3JdKWZvcih2YXIgZiBpbiBjKWlmKGYhPT1yKXt2YXIgcD1lW3YuaWQybmFtZShmKV07cz1zLmNvbmNhdChwLl90cmFjZUluZGljZXMpfX12YXIgZD1bWzAse31dLFswLHt9XV0sZz1bXTtmb3IoYT0wO2E8cy5sZW5ndGg7YSsrKXt2YXIgbT1uW3NbYV1dO2lmKGggaW4gbSl7dmFyIHg9bVtoXSxiPW0uX2xlbmd0aHx8aS5taW5Sb3dMZW5ndGgoeCk7aWYodSh4WzBdKSYmdSh4WzFdKSlmb3Iobz0wO288YjtvKyspe3ZhciBfPXhbMF1bb10sdz14WzFdW29dO3koXykmJnkodykmJihnLnB1c2goW18sd10pLF8gaW4gZFswXVsxXXx8KGRbMF1bMV1bX109ZFswXVswXSsrKSx3IGluIGRbMV1bMV18fChkWzFdWzFdW3ddPWRbMV1bMF0rKykpfX19Zm9yKGcuc29ydChmdW5jdGlvbih0LGUpe3ZhciByPWRbMF1bMV0sbj1yW3RbMF1dLXJbZVswXV07aWYobilyZXR1cm4gbjt2YXIgYT1kWzFdWzFdO3JldHVybiBhW3RbMV1dLWFbZVsxXV19KSxhPTA7YTxnLmxlbmd0aDthKyspayhnW2FdKX0pLHQuZnJhY3Rpb24ycj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybiB0LmwycihyK2UqKG4tcikpfSx0LnIyZnJhY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHI9dC5yMmwodC5yYW5nZVswXSksbj10LnIybCh0LnJhbmdlWzFdKTtyZXR1cm4odC5yMmwoZSktcikvKG4tcil9LHQuY2xlYW5SYW5nZT1mdW5jdGlvbihlLHIpe3J8fChyPXt9KSxlfHwoZT0icmFuZ2UiKTt2YXIgbixvLHM9aS5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpO2lmKG89KG89ImRhdGUiPT09dC50eXBlP2kuZGZsdFJhbmdlKHQuY2FsZW5kYXIpOiJ5Ij09PWg/Zy5ERkxUUkFOR0VZOnIuZGZsdFJhbmdlfHxnLkRGTFRSQU5HRVgpLnNsaWNlKCksInRvemVybyIhPT10LnJhbmdlbW9kZSYmIm5vbm5lZ2F0aXZlIiE9PXQucmFuZ2Vtb2RlfHwob1swXT0wKSxzJiYyPT09cy5sZW5ndGgpZm9yKCJkYXRlIiE9PXQudHlwZXx8dC5hdXRvcmFuZ2V8fChzWzBdPWkuY2xlYW5EYXRlKHNbMF0scCx0LmNhbGVuZGFyKSxzWzFdPWkuY2xlYW5EYXRlKHNbMV0scCx0LmNhbGVuZGFyKSksbj0wO248MjtuKyspaWYoImRhdGUiPT09dC50eXBlKXtpZighaS5pc0RhdGVUaW1lKHNbbl0sdC5jYWxlbmRhcikpe3RbZV09bzticmVha31pZih0LnIybChzWzBdKT09PXQucjJsKHNbMV0pKXt2YXIgbD1pLmNvbnN0cmFpbih0LnIybChzWzBdKSxpLk1JTl9NUysxZTMsaS5NQVhfTVMtMWUzKTtzWzBdPXQubDJyKGwtMWUzKSxzWzFdPXQubDJyKGwrMWUzKTticmVha319ZWxzZXtpZighYShzW25dKSl7aWYoIWEoc1sxLW5dKSl7dFtlXT1vO2JyZWFrfXNbbl09c1sxLW5dKihuPzEwOi4xKX1pZihzW25dPC1mP3Nbbl09LWY6c1tuXT5mJiYoc1tuXT1mKSxzWzBdPT09c1sxXSl7dmFyIGM9TWF0aC5tYXgoMSxNYXRoLmFicygxZS02KnNbMF0pKTtzWzBdLT1jLHNbMV0rPWN9fWVsc2UgaS5uZXN0ZWRQcm9wZXJ0eSh0LGUpLnNldChvKX0sdC5zZXRTY2FsZT1mdW5jdGlvbihyKXt2YXIgbj1lLl9zaXplO2lmKHQub3ZlcmxheWluZyl7dmFyIGE9di5nZXRGcm9tSWQoe19mdWxsTGF5b3V0OmV9LHQub3ZlcmxheWluZyk7dC5kb21haW49YS5kb21haW59dmFyIGk9ciYmdC5fcj8iX3IiOiJyYW5nZSIsbz10LmNhbGVuZGFyO3QuY2xlYW5SYW5nZShpKTt2YXIgcz10LnIybCh0W2ldWzBdLG8pLGw9dC5yMmwodFtpXVsxXSxvKTtpZigieSI9PT1oPyh0Ll9vZmZzZXQ9bi50KygxLXQuZG9tYWluWzFdKSpuLmgsdC5fbGVuZ3RoPW4uaCoodC5kb21haW5bMV0tdC5kb21haW5bMF0pLHQuX209dC5fbGVuZ3RoLyhzLWwpLHQuX2I9LXQuX20qbCk6KHQuX29mZnNldD1uLmwrdC5kb21haW5bMF0qbi53LHQuX2xlbmd0aD1uLncqKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSx0Ll9tPXQuX2xlbmd0aC8obC1zKSx0Ll9iPS10Ll9tKnMpLCFpc0Zpbml0ZSh0Ll9tKXx8IWlzRmluaXRlKHQuX2IpfHx0Ll9sZW5ndGg8MCl0aHJvdyBlLl9yZXBsb3R0aW5nPSExLG5ldyBFcnJvcigiU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBheGlzIHNjYWxpbmciKX0sdC5tYWtlQ2FsY2RhdGE9ZnVuY3Rpb24oZSxyKXt2YXIgbixhLG8scyxsPXQudHlwZSxjPSJkYXRlIj09PWwmJmVbcisiY2FsZW5kYXIiXTtpZihyIGluIGUpe2lmKG49ZVtyXSxzPWUuX2xlbmd0aHx8aS5taW5Sb3dMZW5ndGgobiksaS5pc1R5cGVkQXJyYXkobikmJigibGluZWFyIj09PWx8fCJsb2ciPT09bCkpe2lmKHM9PT1uLmxlbmd0aClyZXR1cm4gbjtpZihuLnN1YmFycmF5KXJldHVybiBuLnN1YmFycmF5KDAscyl9aWYoIm11bHRpY2F0ZWdvcnkiPT09bClyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXt2YXIgYT0odFswXXx8W10pW25dLGk9KHRbMV18fFtdKVtuXTtyW25dPVQoW2EsaV0pfXJldHVybiByfShuLHMpO2ZvcihhPW5ldyBBcnJheShzKSxvPTA7bzxzO28rKylhW29dPXQuZDJjKG5bb10sMCxjKX1lbHNle3ZhciB1PXIrIjAiaW4gZT90LmQyYyhlW3IrIjAiXSwwLGMpOjAsaD1lWyJkIityXT9OdW1iZXIoZVsiZCIrcl0pOjE7Zm9yKG49ZVt7eDoieSIseToieCJ9W3JdXSxzPWUuX2xlbmd0aHx8bi5sZW5ndGgsYT1uZXcgQXJyYXkocyksbz0wO288cztvKyspYVtvXT11K28qaH1yZXR1cm4gYX0sdC5pc1ZhbGlkUmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJjI9PT1lLmxlbmd0aCYmYSh0LnIybChlWzBdKSkmJmEodC5yMmwoZVsxXSkpfSx0LmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbihlLHIpe3ZhciBuPXQuYzJsKGVbaF0sbnVsbCxyKSxhPXQucjJsKHQucmFuZ2VbMF0pLGk9dC5yMmwodC5yYW5nZVsxXSk7cmV0dXJuIGE8aT9hPD1uJiZuPD1pOmk8PW4mJm48PWF9LHQuY2xlYXJDYWxjPWZ1bmN0aW9uKCl7dmFyIG49ZnVuY3Rpb24oKXt0Ll9jYXRlZ29yaWVzPVtdLHQuX2NhdGVnb3JpZXNNYXA9e319LGE9ZS5fYXhpc01hdGNoR3JvdXBzO2lmKGEmJmEubGVuZ3RoKXtmb3IodmFyIGk9ITEsbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO2lmKHNbcl0pe2k9ITA7dmFyIGw9bnVsbCxjPW51bGw7Zm9yKHZhciB1IGluIHMpe3ZhciBoPWVbdi5pZDJuYW1lKHUpXTtpZihoLl9jYXRlZ29yaWVzKXtsPWguX2NhdGVnb3JpZXMsYz1oLl9jYXRlZ29yaWVzTWFwO2JyZWFrfX1sJiZjPyh0Ll9jYXRlZ29yaWVzPWwsdC5fY2F0ZWdvcmllc01hcD1jKTpuKCk7YnJlYWt9fWl8fG4oKX1lbHNlIG4oKTtpZih0Ll9pbml0aWFsQ2F0ZWdvcmllcylmb3IodmFyIGY9MDtmPHQuX2luaXRpYWxDYXRlZ29yaWVzLmxlbmd0aDtmKyspayh0Ll9pbml0aWFsQ2F0ZWdvcmllc1tmXSl9LHQuc29ydEJ5SW5pdGlhbENhdGVnb3JpZXM9ZnVuY3Rpb24oKXt2YXIgbj1bXTtpZih0Ll9jYXRlZ29yaWVzPVtdLHQuX2NhdGVnb3JpZXNNYXA9e30sdC5faW5pdGlhbENhdGVnb3JpZXMpZm9yKHZhciBhPTA7YTx0Ll9pbml0aWFsQ2F0ZWdvcmllcy5sZW5ndGg7YSsrKWsodC5faW5pdGlhbENhdGVnb3JpZXNbYV0pO249bi5jb25jYXQodC5fdHJhY2VJbmRpY2VzKTt2YXIgaT10Ll9tYXRjaEdyb3VwO2Zvcih2YXIgbyBpbiBpKWlmKHIhPT1vKXt2YXIgcz1lW3YuaWQybmFtZShvKV07cy5fY2F0ZWdvcmllcz10Ll9jYXRlZ29yaWVzLHMuX2NhdGVnb3JpZXNNYXA9dC5fY2F0ZWdvcmllc01hcCxuPW4uY29uY2F0KHMuX3RyYWNlSW5kaWNlcyl9cmV0dXJuIG59O3ZhciBFPWUuX2QzbG9jYWxlOyJkYXRlIj09PXQudHlwZSYmKHQuX2RhdGVGb3JtYXQ9RT9FLnRpbWVGb3JtYXQudXRjOm4udGltZS5mb3JtYXQudXRjLHQuX2V4dHJhRm9ybWF0PWUuX2V4dHJhRm9ybWF0KSx0Ll9zZXBhcmF0b3JzPWUuc2VwYXJhdG9ycyx0Ll9udW1Gb3JtYXQ9RT9FLm51bWJlckZvcm1hdDpuLmZvcm1hdCxkZWxldGUgdC5fbWluRHRpY2ssZGVsZXRlIHQuX2ZvcmNlVGljazB9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY5MywiLi4vLi4vbGliIjo3MTcsIi4vYXhpc19pZHMiOjc2OCwiLi9jb25zdGFudHMiOjc3MSxkMzoxNjUsImZhc3QtaXNudW1lcmljIjoyMjh9XSw3ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKTtmdW5jdGlvbiBvKHQpe3ZhciBlPVsic2hvd2V4cG9uZW50Iiwic2hvd3RpY2twcmVmaXgiLCJzaG93dGlja3N1ZmZpeCJdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dFtlXX0pO2lmKGUuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHRbcl09PT10W2VbMF1dfSl8fDE9PT1lLmxlbmd0aClyZXR1cm4gdFtlWzBdXX1mdW5jdGlvbiBzKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYS50aWNrZm9ybWF0c3RvcHMscixpKX1yKCJlbmFibGVkIikmJihyKCJkdGlja3JhbmdlIikscigidmFsdWUiKSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwsYyx1KXt1JiYxIT09dS5wYXNzfHxmdW5jdGlvbih0LGUscixuLGEpe3ZhciBpPW8odCk7cigidGlja3ByZWZpeCIpJiZyKCJzaG93dGlja3ByZWZpeCIsaSk7cigidGlja3N1ZmZpeCIsYS50aWNrU3VmZml4RGZsdCkmJnIoInNob3d0aWNrc3VmZml4IixpKX0odCwwLHIsMCxjKSx1JiYyIT09dS5wYXNzfHxmdW5jdGlvbih0LGUscixsLGMpe3ZhciB1PW8odCk7cigidGlja3ByZWZpeCIpJiZyKCJzaG93dGlja3ByZWZpeCIsdSk7cigidGlja3N1ZmZpeCIsYy50aWNrU3VmZml4RGZsdCkmJnIoInNob3d0aWNrc3VmZml4Iix1KTtpZihyKCJzaG93dGlja2xhYmVscyIpKXt2YXIgaD1jLmZvbnR8fHt9LGY9ZS5jb2xvcixwPWYmJmYhPT1hLmNvbG9yLmRmbHQ/ZjpoLmNvbG9yO2lmKG4uY29lcmNlRm9udChyLCJ0aWNrZm9udCIse2ZhbWlseTpoLmZhbWlseSxzaXplOmguc2l6ZSxjb2xvcjpwfSkscigidGlja2FuZ2xlIiksImNhdGVnb3J5IiE9PWwpe3ZhciBkPXIoInRpY2tmb3JtYXQiKSxnPXQudGlja2Zvcm1hdHN0b3BzO0FycmF5LmlzQXJyYXkoZykmJmcubGVuZ3RoJiZpKHQsZSx7bmFtZToidGlja2Zvcm1hdHN0b3BzIixpbmNsdXNpb25BdHRyOiJlbmFibGVkIixoYW5kbGVJdGVtRGVmYXVsdHM6c30pLGR8fCJkYXRlIj09PWx8fChyKCJzaG93ZXhwb25lbnQiLHUpLHIoImV4cG9uZW50Zm9ybWF0Iikscigic2VwYXJhdGV0aG91c2FuZHMiKSl9fX0odCxlLHIsbCxjKX19LHsiLi4vLi4vbGliIjo3MTcsIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzYxLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo3Nzd9XSw3ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBvPW4uY29lcmNlMih0LGUsYSwidGlja2xlbiIpLHM9bi5jb2VyY2UyKHQsZSxhLCJ0aWNrd2lkdGgiKSxsPW4uY29lcmNlMih0LGUsYSwidGlja2NvbG9yIixlLmNvbG9yKTtyKCJ0aWNrcyIsaS5vdXRlclRpY2tzfHxvfHxzfHxsPyJvdXRzaWRlIjoiIil8fChkZWxldGUgZS50aWNrbGVuLGRlbGV0ZSBlLnRpY2t3aWR0aCxkZWxldGUgZS50aWNrY29sb3IpfX0seyIuLi8uLi9saWIiOjcxNywiLi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc3fV0sNzg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY2xlYW5fdGlja3MiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIGk7ImFycmF5IiE9PXQudGlja21vZGV8fCJsb2ciIT09YSYmImRhdGUiIT09YT9pPXIoInRpY2ttb2RlIixBcnJheS5pc0FycmF5KHQudGlja3ZhbHMpPyJhcnJheSI6dC5kdGljaz8ibGluZWFyIjoiYXV0byIpOmk9ZS50aWNrbW9kZT0iYXV0byI7aWYoImF1dG8iPT09aSlyKCJudGlja3MiKTtlbHNlIGlmKCJsaW5lYXIiPT09aSl7dmFyIG89ZS5kdGljaz1uLmR0aWNrKHQuZHRpY2ssYSk7ZS50aWNrMD1uLnRpY2swKHQudGljazAsYSxlLmNhbGVuZGFyLG8pfWVsc2UgaWYoIm11bHRpY2F0ZWdvcnkiIT09YSl7dm9pZCAwPT09cigidGlja3ZhbHMiKT9lLnRpY2ttb2RlPSJhdXRvIjpyKCJ0aWNrdGV4dCIpfX19LHsiLi9jbGVhbl90aWNrcyI6NzcwfV0sNzg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz10Ll9mdWxsTGF5b3V0O2lmKDAhPT1lLmxlbmd0aCl7dmFyIHUsaCxmLHA7bCYmKHU9bCgpKTt2YXIgZD1uLmVhc2Uoci5lYXNpbmcpO3JldHVybiB0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHApLHA9bnVsbCxmdW5jdGlvbigpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl0sbz1pLnBsb3RpbmZvLnhheGlzLHM9aS5wbG90aW5mby55YXhpcztpLnhyMCYmKHJbby5fbmFtZSsiLnJhbmdlIl09aS54cjAuc2xpY2UoKSksaS55cjAmJihyW3MuX25hbWUrIi5yYW5nZSJdPWkueXIwLnNsaWNlKCkpfXJldHVybiBhLmNhbGwoInJlbGF5b3V0Iix0LHIpLnRoZW4oZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylnKGVbdF0ucGxvdGluZm8pfSl9KCl9KSxoPURhdGUubm93KCkscD13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIG4oKXtmPURhdGUubm93KCk7Zm9yKHZhciBpPU1hdGgubWluKDEsKGYtaCkvci5kdXJhdGlvbiksbz1kKGkpLHM9MDtzPGUubGVuZ3RoO3MrKyl2KGVbc10sbyk7Zi1oPnIuZHVyYXRpb24/KGZ1bmN0aW9uKCl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXSxvPWkucGxvdGluZm8ueGF4aXMscz1pLnBsb3RpbmZvLnlheGlzO2kueHIxJiYocltvLl9uYW1lKyIucmFuZ2UiXT1pLnhyMS5zbGljZSgpKSxpLnlyMSYmKHJbcy5fbmFtZSsiLnJhbmdlIl09aS55cjEuc2xpY2UoKSl9dSYmdSgpLGEuY2FsbCgicmVsYXlvdXQiLHQscikudGhlbihmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWcoZVt0XS5wbG90aW5mbyl9KX0oKSxwPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShuKSk6cD13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfSksUHJvbWlzZS5yZXNvbHZlKCl9ZnVuY3Rpb24gZyh0KXt2YXIgZT10LnhheGlzLHI9dC55YXhpcztjLl9kZWZzLnNlbGVjdCgiIyIrdC5jbGlwSWQrIj4gcmVjdCIpLmNhbGwoby5zZXRUcmFuc2xhdGUsMCwwKS5jYWxsKG8uc2V0U2NhbGUsMSwxKSx0LnBsb3QuY2FsbChvLnNldFRyYW5zbGF0ZSxlLl9vZmZzZXQsci5fb2Zmc2V0KS5jYWxsKG8uc2V0U2NhbGUsMSwxKTt2YXIgbj10LnBsb3Quc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyIC50cmFjZSIpO24uc2VsZWN0QWxsKCIucG9pbnQiKS5jYWxsKG8uc2V0UG9pbnRHcm91cFNjYWxlLDEsMSksbi5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKS5jYWxsKG8uc2V0VGV4dFBvaW50c1NjYWxlLDEsMSksbi5jYWxsKG8uaGlkZU91dHNpZGVSYW5nZVBvaW50cyx0KX1mdW5jdGlvbiB2KGUscil7dmFyIG49ZS5wbG90aW5mbyxhPW4ueGF4aXMsbD1uLnlheGlzLGM9YS5fbGVuZ3RoLHU9bC5fbGVuZ3RoLGg9ISFlLnhyMSxmPSEhZS55cjEscD1bXTtpZihoKXt2YXIgZD1pLnNpbXBsZU1hcChlLnhyMCxhLnIybCksZz1pLnNpbXBsZU1hcChlLnhyMSxhLnIybCksdj1kWzFdLWRbMF0sbT1nWzFdLWdbMF07cFswXT0oZFswXSooMS1yKStyKmdbMF0tZFswXSkvKGRbMV0tZFswXSkqYyxwWzJdPWMqKDEtcityKm0vdiksYS5yYW5nZVswXT1hLmwycihkWzBdKigxLXIpK3IqZ1swXSksYS5yYW5nZVsxXT1hLmwycihkWzFdKigxLXIpK3IqZ1sxXSl9ZWxzZSBwWzBdPTAscFsyXT1jO2lmKGYpe3ZhciB5PWkuc2ltcGxlTWFwKGUueXIwLGwucjJsKSx4PWkuc2ltcGxlTWFwKGUueXIxLGwucjJsKSxiPXlbMV0teVswXSxfPXhbMV0teFswXTtwWzFdPSh5WzFdKigxLXIpK3IqeFsxXS15WzFdKS8oeVswXS15WzFdKSp1LHBbM109dSooMS1yK3IqXy9iKSxsLnJhbmdlWzBdPWEubDJyKHlbMF0qKDEtcikrcip4WzBdKSxsLnJhbmdlWzFdPWwubDJyKHlbMV0qKDEtcikrcip4WzFdKX1lbHNlIHBbMV09MCxwWzNdPXU7cy5kcmF3T25lKHQsYSx7c2tpcFRpdGxlOiEwfSkscy5kcmF3T25lKHQsbCx7c2tpcFRpdGxlOiEwfSkscy5yZWRyYXdDb21wb25lbnRzKHQsW2EuX2lkLGwuX2lkXSk7dmFyIHc9aD9jL3BbMl06MSxrPWY/dS9wWzNdOjEsVD1oP3BbMF06MCxNPWY/cFsxXTowLEE9aD9wWzBdL3BbMl0qYzowLFM9Zj9wWzFdL3BbM10qdTowLEU9YS5fb2Zmc2V0LUEsTD1sLl9vZmZzZXQtUztuLmNsaXBSZWN0LmNhbGwoby5zZXRUcmFuc2xhdGUsVCxNKS5jYWxsKG8uc2V0U2NhbGUsMS93LDEvayksbi5wbG90LmNhbGwoby5zZXRUcmFuc2xhdGUsRSxMKS5jYWxsKG8uc2V0U2NhbGUsdyxrKSxvLnNldFBvaW50R3JvdXBTY2FsZShuLnpvb21TY2FsZVB0cywxL3csMS9rKSxvLnNldFRleHRQb2ludHNTY2FsZShuLnpvb21TY2FsZVR4dCwxL3csMS9rKX1zLnJlZHJhd0NvbXBvbmVudHModCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi9heGVzIjo3NjUsZDM6MTY1fV0sNzg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IikudHJhY2VJcyxhPXQoIi4vYXhpc19hdXRvdHlwZSIpO2Z1bmN0aW9uIGkodCl7cmV0dXJue3Y6IngiLGg6InkifVt0Lm9yaWVudGF0aW9ufHwidiJdfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1pKHQpLGE9bih0LCJib3gtdmlvbGluIiksbz1uKHQuX2Z1bGxJbnB1dHx8e30sImNhbmRsZXN0aWNrIik7cmV0dXJuIGEmJiFvJiZlPT09ciYmdm9pZCAwPT09dFtyXSYmdm9pZCAwPT09dFtyKyIwIl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpeyItIj09PXIoInR5cGUiLChzLnNwbG9tU3Rhc2h8fHt9KS50eXBlKSYmKCFmdW5jdGlvbih0LGUpe2lmKCItIiE9PXQudHlwZSlyZXR1cm47dmFyIHIscz10Ll9pZCxsPXMuY2hhckF0KDApOy0xIT09cy5pbmRleE9mKCJzY2VuZSIpJiYocz1sKTt2YXIgYz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBhPXRbbl07aWYoInNwbG9tIj09PWEudHlwZSYmYS5fbGVuZ3RoPjAmJihhWyJfIityKyJheGVzIl18fHt9KVtlXSlyZXR1cm4gYTtpZigoYVtyKyJheGlzIl18fHIpPT09ZSl7aWYobyhhLHIpKXJldHVybiBhO2lmKChhW3JdfHxbXSkubGVuZ3RofHxhW3IrIjAiXSlyZXR1cm4gYX19fShlLHMsbCk7aWYoIWMpcmV0dXJuO2lmKCJoaXN0b2dyYW0iPT09Yy50eXBlJiZsPT09e3Y6InkiLGg6IngifVtjLm9yaWVudGF0aW9ufHwidiJdKXJldHVybiB2b2lkKHQudHlwZT0ibGluZWFyIik7dmFyIHU9bCsiY2FsZW5kYXIiLGg9Y1t1XSxmPXtub011bHRpQ2F0ZWdvcnk6IW4oYywiY2FydGVzaWFuIil8fG4oYywibm9NdWx0aUNhdGVnb3J5Iil9OyJib3giPT09Yy50eXBlJiZjLl9oYXNQcmVDb21wU3RhdHMmJmw9PT17aDoieCIsdjoieSJ9W2Mub3JpZW50YXRpb258fCJ2Il0mJihmLm5vTXVsdGlDYXRlZ29yeT0hMCk7aWYobyhjLGwpKXt2YXIgcD1pKGMpLGQ9W107Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGc9ZVtyXTtuKGcsImJveC12aW9saW4iKSYmKGdbbCsiYXhpcyJdfHxsKT09PXMmJih2b2lkIDAhPT1nW3BdP2QucHVzaChnW3BdWzBdKTp2b2lkIDAhPT1nLm5hbWU/ZC5wdXNoKGcubmFtZSk6ZC5wdXNoKCJ0ZXh0IiksZ1t1XSE9PWgmJihoPXZvaWQgMCkpfXQudHlwZT1hKGQsaCxmKX1lbHNlIGlmKCJzcGxvbSI9PT1jLnR5cGUpe3ZhciB2PWMuZGltZW5zaW9ucyxtPXZbYy5fYXhlc0RpbVtzXV07bS52aXNpYmxlJiYodC50eXBlPWEobS52YWx1ZXMsaCxmKSl9ZWxzZSB0LnR5cGU9YShjW2xdfHxbY1tsKyIwIl1dLGgsZil9KGUscy5kYXRhKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOnQudHlwZT1lLnR5cGUpfX0seyIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuL2F4aXNfYXV0b3R5cGUiOjc2Nn1dLDc4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGE9dCgiLi4vbGliIik7ZnVuY3Rpb24gaSh0LGUscil7dmFyIG4saSxvLHM9ITE7aWYoImRhdGEiPT09ZS50eXBlKW49dC5fZnVsbERhdGFbbnVsbCE9PWUudHJhY2VzP2UudHJhY2VzWzBdOjBdO2Vsc2V7aWYoImxheW91dCIhPT1lLnR5cGUpcmV0dXJuITE7bj10Ll9mdWxsTGF5b3V0fXJldHVybiBpPWEubmVzdGVkUHJvcGVydHkobixlLnByb3ApLmdldCgpLChvPXJbZS50eXBlXT1yW2UudHlwZV18fHt9KS5oYXNPd25Qcm9wZXJ0eShlLnByb3ApJiZvW2UucHJvcF0hPT1pJiYocz0hMCksb1tlLnByb3BdPWkse2NoYW5nZWQ6cyx2YWx1ZTppfX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9W10sbj1lWzBdLGk9e307aWYoInN0cmluZyI9PXR5cGVvZiBuKWlbbl09ZVsxXTtlbHNle2lmKCFhLmlzUGxhaW5PYmplY3QobikpcmV0dXJuIHI7aT1ufXJldHVybiBsKGksZnVuY3Rpb24odCxlLG4pe3IucHVzaCh7dHlwZToibGF5b3V0Iixwcm9wOnQsdmFsdWU6bn0pfSwiIiwwKSxyfWZ1bmN0aW9uIHModCxlKXt2YXIgcixuLGksbyxzPVtdO2lmKG49ZVswXSxpPWVbMV0scj1lWzJdLG89e30sInN0cmluZyI9PXR5cGVvZiBuKW9bbl09aTtlbHNle2lmKCFhLmlzUGxhaW5PYmplY3QobikpcmV0dXJuIHM7bz1uLHZvaWQgMD09PXImJihyPWkpfXJldHVybiB2b2lkIDA9PT1yJiYocj1udWxsKSxsKG8sZnVuY3Rpb24oZSxuLGEpe3ZhciBpLG87aWYoQXJyYXkuaXNBcnJheShhKSl7bz1hLnNsaWNlKCk7dmFyIGw9TWF0aC5taW4oby5sZW5ndGgsdC5kYXRhLmxlbmd0aCk7ciYmKGw9TWF0aC5taW4obCxyLmxlbmd0aCkpLGk9W107Zm9yKHZhciBjPTA7YzxsO2MrKylpW2NdPXI/cltjXTpjfWVsc2Ugbz1hLGk9cj9yLnNsaWNlKCk6bnVsbDtpZihudWxsPT09aSlBcnJheS5pc0FycmF5KG8pJiYobz1vWzBdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoaSkpe2lmKCFBcnJheS5pc0FycmF5KG8pKXt2YXIgdT1vO289W107Zm9yKHZhciBoPTA7aDxpLmxlbmd0aDtoKyspb1toXT11fW8ubGVuZ3RoPU1hdGgubWluKGkubGVuZ3RoLG8ubGVuZ3RoKX1zLnB1c2goe3R5cGU6ImRhdGEiLHByb3A6ZSx0cmFjZXM6aSx2YWx1ZTpvfSl9LCIiLDApLHN9ZnVuY3Rpb24gbCh0LGUscixuKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPXRbaV07aWYoIl8iIT09aVswXSl7dmFyIHM9cisobj4wPyIuIjoiIikraTthLmlzUGxhaW5PYmplY3Qobyk/bChvLGUscyxuKzEpOmUocyxpLG8pfX0pfXIubWFuYWdlQ29tbWFuZE9ic2VydmVyPWZ1bmN0aW9uKHQsZSxuLG8pe3ZhciBzPXt9LGw9ITA7ZSYmZS5fY29tbWFuZE9ic2VydmVyJiYocz1lLl9jb21tYW5kT2JzZXJ2ZXIpLHMuY2FjaGV8fChzLmNhY2hlPXt9KSxzLmxvb2t1cFRhYmxlPXt9O3ZhciBjPXIuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzKHQsbixzLmxvb2t1cFRhYmxlKTtpZihlJiZlLl9jb21tYW5kT2JzZXJ2ZXIpe2lmKGMpcmV0dXJuIHM7aWYoZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSlyZXR1cm4gZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSgpLGUuX2NvbW1hbmRPYnNlcnZlcj1udWxsLHN9aWYoYyl7aSh0LGMscy5jYWNoZSkscy5jaGVjaz1mdW5jdGlvbigpe2lmKGwpe3ZhciBlPWkodCxjLHMuY2FjaGUpO3JldHVybiBlLmNoYW5nZWQmJm8mJnZvaWQgMCE9PXMubG9va3VwVGFibGVbZS52YWx1ZV0mJihzLmRpc2FibGUoKSxQcm9taXNlLnJlc29sdmUobyh7dmFsdWU6ZS52YWx1ZSx0eXBlOmMudHlwZSxwcm9wOmMucHJvcCx0cmFjZXM6Yy50cmFjZXMsaW5kZXg6cy5sb29rdXBUYWJsZVtlLnZhbHVlXX0pKS50aGVuKHMuZW5hYmxlLHMuZW5hYmxlKSksZS5jaGFuZ2VkfX07Zm9yKHZhciB1PVsicGxvdGx5X3JlbGF5b3V0IiwicGxvdGx5X3JlZHJhdyIsInBsb3RseV9yZXN0eWxlIiwicGxvdGx5X3VwZGF0ZSIsInBsb3RseV9hbmltYXRpbmdmcmFtZSIsInBsb3RseV9hZnRlcnBsb3QiXSxoPTA7aDx1Lmxlbmd0aDtoKyspdC5faW50ZXJuYWxPbih1W2hdLHMuY2hlY2spO3MucmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcih1W2VdLHMuY2hlY2spfX1lbHNlIGEubG9nKCJVbmFibGUgdG8gYXV0b21hdGljYWxseSBiaW5kIHBsb3QgdXBkYXRlcyB0byBBUEkgY29tbWFuZCIpLHMubG9va3VwVGFibGU9e30scy5yZW1vdmU9ZnVuY3Rpb24oKXt9O3JldHVybiBzLmRpc2FibGU9ZnVuY3Rpb24oKXtsPSExfSxzLmVuYWJsZT1mdW5jdGlvbigpe2w9ITB9LGUmJihlLl9jb21tYW5kT2JzZXJ2ZXI9cyksc30sci5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9ZnVuY3Rpb24odCxlLG4pe3ZhciBhLGksbz1lLmxlbmd0aDtmb3IoYT0wO2E8bzthKyspe3ZhciBzLGw9ZVthXSxjPWwubWV0aG9kLHU9bC5hcmdzO2lmKEFycmF5LmlzQXJyYXkodSl8fCh1PVtdKSwhYylyZXR1cm4hMTt2YXIgaD1yLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3ModCxjLHUpO2lmKDEhPT1oLmxlbmd0aClyZXR1cm4hMTtpZihpKXtpZigocz1oWzBdKS50eXBlIT09aS50eXBlKXJldHVybiExO2lmKHMucHJvcCE9PWkucHJvcClyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KGkudHJhY2VzKSl7aWYoIUFycmF5LmlzQXJyYXkocy50cmFjZXMpKXJldHVybiExO3MudHJhY2VzLnNvcnQoKTtmb3IodmFyIGY9MDtmPGkudHJhY2VzLmxlbmd0aDtmKyspaWYoaS50cmFjZXNbZl0hPT1zLnRyYWNlc1tmXSlyZXR1cm4hMX1lbHNlIGlmKHMucHJvcCE9PWkucHJvcClyZXR1cm4hMX1lbHNlIGk9aFswXSxBcnJheS5pc0FycmF5KGkudHJhY2VzKSYmaS50cmFjZXMuc29ydCgpO3ZhciBwPShzPWhbMF0pLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocCkpe2lmKDEhPT1wLmxlbmd0aClyZXR1cm4hMTtwPXBbMF19biYmKG5bcF09YSl9cmV0dXJuIGl9LHIuZXhlY3V0ZUFQSUNvbW1hbmQ9ZnVuY3Rpb24odCxlLHIpe2lmKCJza2lwIj09PWUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBpPW4uYXBpTWV0aG9kUmVnaXN0cnlbZV0sbz1bdF07QXJyYXkuaXNBcnJheShyKXx8KHI9W10pO2Zvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKW8ucHVzaChyW3NdKTtyZXR1cm4gaS5hcHBseShudWxsLG8pLmNhdGNoKGZ1bmN0aW9uKHQpe3JldHVybiBhLndhcm4oIkFQSSBjYWxsIHRvIFBsb3RseS4iK2UrIiByZWplY3RlZC4iLHQpLFByb21pc2UucmVqZWN0KHQpfSl9LHIuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncz1mdW5jdGlvbih0LGUscil7dmFyIG47c3dpdGNoKEFycmF5LmlzQXJyYXkocil8fChyPVtdKSxlKXtjYXNlInJlc3R5bGUiOm49cyh0LHIpO2JyZWFrO2Nhc2UicmVsYXlvdXQiOm49byh0LHIpO2JyZWFrO2Nhc2UidXBkYXRlIjpuPXModCxbclswXSxyWzJdXSkuY29uY2F0KG8odCxbclsxXV0pKTticmVhaztjYXNlImFuaW1hdGUiOm49ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlWzBdKSYmMT09PWVbMF0ubGVuZ3RoJiYtMSE9PVsic3RyaW5nIiwibnVtYmVyIl0uaW5kZXhPZih0eXBlb2YgZVswXVswXSk/W3t0eXBlOiJsYXlvdXQiLHByb3A6Il9jdXJyZW50RnJhbWUiLHZhbHVlOmVbMF1bMF0udG9TdHJpbmcoKX1dOltdfSgwLHIpO2JyZWFrO2RlZmF1bHQ6bj1bXX1yZXR1cm4gbn19LHsiLi4vbGliIjo3MTcsIi4uL3JlZ2lzdHJ5Ijo4NDZ9XSw3OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ci5hdHRyaWJ1dGVzPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj17dmFsVHlwZToiaW5mb19hcnJheSIsZWRpdFR5cGU6KHQ9dHx8e30pLmVkaXRUeXBlLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZTp0LmVkaXRUeXBlfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZTp0LmVkaXRUeXBlfV0sZGZsdDpbMCwxXX0sYT0odC5uYW1lJiZ0Lm5hbWUsdC50cmFjZSxlLmRlc2NyaXB0aW9uJiZlLmRlc2NyaXB0aW9uLHt4Om4oe30scix7fSkseTpuKHt9LHIse30pLGVkaXRUeXBlOnQuZWRpdFR5cGV9KTtyZXR1cm4gdC5ub0dyaWRDZWxsfHwoYS5yb3c9e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZTp0LmVkaXRUeXBlfSxhLmNvbHVtbj17dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOnQuZWRpdFR5cGV9KSxhfSxyLmRlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPW4mJm4ueHx8WzAsMV0saT1uJiZuLnl8fFswLDFdLG89ZS5ncmlkO2lmKG8pe3ZhciBzPXIoImRvbWFpbi5jb2x1bW4iKTt2b2lkIDAhPT1zJiYoczxvLmNvbHVtbnM/YT1vLl9kb21haW5zLnhbc106ZGVsZXRlIHQuZG9tYWluLmNvbHVtbik7dmFyIGw9cigiZG9tYWluLnJvdyIpO3ZvaWQgMCE9PWwmJihsPG8ucm93cz9pPW8uX2RvbWFpbnMueVtsXTpkZWxldGUgdC5kb21haW4ucm93KX12YXIgYz1yKCJkb21haW4ueCIsYSksdT1yKCJkb21haW4ueSIsaSk7Y1swXTxjWzFdfHwodC5kb21haW4ueD1hLnNsaWNlKCkpLHVbMF08dVsxXXx8KHQuZG9tYWluLnk9aS5zbGljZSgpKX19LHsiLi4vbGliL2V4dGVuZCI6NzA4fV0sNzkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVkaXRUeXBlLHI9dC5jb2xvckVkaXRUeXBlO3ZvaWQgMD09PXImJihyPWUpO3ZhciBuPXtmYW1pbHk6e3ZhbFR5cGU6InN0cmluZyIsbm9CbGFuazohMCxzdHJpY3Q6ITAsZWRpdFR5cGU6ZX0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MSxlZGl0VHlwZTplfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOnJ9LGVkaXRUeXBlOmV9O3JldHVybiB0LmFycmF5T2smJihuLmZhbWlseS5hcnJheU9rPSEwLG4uc2l6ZS5hcnJheU9rPSEwLG4uY29sb3IuYXJyYXlPaz0hMCksbn19LHt9XSw3OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtfaXNMaW5rZWRUb0FycmF5OiJmcmFtZXNfZW50cnkiLGdyb3VwOnt2YWxUeXBlOiJzdHJpbmcifSxuYW1lOnt2YWxUeXBlOiJzdHJpbmcifSx0cmFjZXM6e3ZhbFR5cGU6ImFueSJ9LGJhc2VmcmFtZTp7dmFsVHlwZToic3RyaW5nIn0sZGF0YTp7dmFsVHlwZToiYW55In0sbGF5b3V0Ont2YWxUeXBlOiJhbnkifX19LHt9XSw3OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5wcm9qTmFtZXM9e2VxdWlyZWN0YW5ndWxhcjoiZXF1aXJlY3Rhbmd1bGFyIixtZXJjYXRvcjoibWVyY2F0b3IiLG9ydGhvZ3JhcGhpYzoib3J0aG9ncmFwaGljIiwibmF0dXJhbCBlYXJ0aCI6Im5hdHVyYWxFYXJ0aCIsa2F2cmF5c2tpeTc6ImthdnJheXNraXk3IixtaWxsZXI6Im1pbGxlciIscm9iaW5zb246InJvYmluc29uIixlY2tlcnQ0OiJlY2tlcnQ0IiwiYXppbXV0aGFsIGVxdWFsIGFyZWEiOiJhemltdXRoYWxFcXVhbEFyZWEiLCJhemltdXRoYWwgZXF1aWRpc3RhbnQiOiJhemltdXRoYWxFcXVpZGlzdGFudCIsImNvbmljIGVxdWFsIGFyZWEiOiJjb25pY0VxdWFsQXJlYSIsImNvbmljIGNvbmZvcm1hbCI6ImNvbmljQ29uZm9ybWFsIiwiY29uaWMgZXF1aWRpc3RhbnQiOiJjb25pY0VxdWlkaXN0YW50Iixnbm9tb25pYzoiZ25vbW9uaWMiLHN0ZXJlb2dyYXBoaWM6InN0ZXJlb2dyYXBoaWMiLG1vbGx3ZWlkZToibW9sbHdlaWRlIixoYW1tZXI6ImhhbW1lciIsInRyYW5zdmVyc2UgbWVyY2F0b3IiOiJ0cmFuc3ZlcnNlTWVyY2F0b3IiLCJhbGJlcnMgdXNhIjoiYWxiZXJzVXNhIiwid2lua2VsIHRyaXBlbCI6IndpbmtlbDMiLGFpdG9mZjoiYWl0b2ZmIixzaW51c29pZGFsOiJzaW51c29pZGFsIn0sci5heGVzTmFtZXM9WyJsb25heGlzIiwibGF0YXhpcyJdLHIubG9uYXhpc1NwYW49e29ydGhvZ3JhcGhpYzoxODAsImF6aW11dGhhbCBlcXVhbCBhcmVhIjozNjAsImF6aW11dGhhbCBlcXVpZGlzdGFudCI6MzYwLCJjb25pYyBjb25mb3JtYWwiOjE4MCxnbm9tb25pYzoxNjAsc3RlcmVvZ3JhcGhpYzoxODAsInRyYW5zdmVyc2UgbWVyY2F0b3IiOjE4MCwiKiI6MzYwfSxyLmxhdGF4aXNTcGFuPXsiY29uaWMgY29uZm9ybWFsIjoxNTAsc3RlcmVvZ3JhcGhpYzoxNzkuNSwiKiI6MTgwfSxyLnNjb3BlRGVmYXVsdHM9e3dvcmxkOntsb25heGlzUmFuZ2U6Wy0xODAsMTgwXSxsYXRheGlzUmFuZ2U6Wy05MCw5MF0scHJvalR5cGU6ImVxdWlyZWN0YW5ndWxhciIscHJvalJvdGF0ZTpbMCwwLDBdfSx1c2E6e2xvbmF4aXNSYW5nZTpbLTE4MCwtNTBdLGxhdGF4aXNSYW5nZTpbMTUsODBdLHByb2pUeXBlOiJhbGJlcnMgdXNhIn0sZXVyb3BlOntsb25heGlzUmFuZ2U6Wy0zMCw2MF0sbGF0YXhpc1JhbmdlOlszMCw4NV0scHJvalR5cGU6ImNvbmljIGNvbmZvcm1hbCIscHJvalJvdGF0ZTpbMTUsMCwwXSxwcm9qUGFyYWxsZWxzOlswLDYwXX0sYXNpYTp7bG9uYXhpc1JhbmdlOlsyMiwxNjBdLGxhdGF4aXNSYW5nZTpbLTE1LDU1XSxwcm9qVHlwZToibWVyY2F0b3IiLHByb2pSb3RhdGU6WzAsMCwwXX0sYWZyaWNhOntsb25heGlzUmFuZ2U6Wy0zMCw2MF0sbGF0YXhpc1JhbmdlOlstNDAsNDBdLHByb2pUeXBlOiJtZXJjYXRvciIscHJvalJvdGF0ZTpbMCwwLDBdfSwibm9ydGggYW1lcmljYSI6e2xvbmF4aXNSYW5nZTpbLTE4MCwtNDVdLGxhdGF4aXNSYW5nZTpbNSw4NV0scHJvalR5cGU6ImNvbmljIGNvbmZvcm1hbCIscHJvalJvdGF0ZTpbLTEwMCwwLDBdLHByb2pQYXJhbGxlbHM6WzI5LjUsNDUuNV19LCJzb3V0aCBhbWVyaWNhIjp7bG9uYXhpc1JhbmdlOlstMTAwLC0zMF0sbGF0YXhpc1JhbmdlOlstNjAsMTVdLHByb2pUeXBlOiJtZXJjYXRvciIscHJvalJvdGF0ZTpbMCwwLDBdfX0sci5jbGlwUGFkPS4wMDEsci5wcmVjaXNpb249LjEsci5sYW5kQ29sb3I9IiNGMERDODIiLHIud2F0ZXJDb2xvcj0iIzMzOTlGRiIsci5sb2NhdGlvbm1vZGVUb0xheWVyPXsiSVNPLTMiOiJjb3VudHJpZXMiLCJVU0Etc3RhdGVzIjoic3VidW5pdHMiLCJjb3VudHJ5IG5hbWVzIjoiY291bnRyaWVzIn0sci5zcGhlcmVTVkc9e3R5cGU6IlNwaGVyZSJ9LHIuZmlsbExheWVycz17b2NlYW46MSxsYW5kOjEsbGFrZXM6MX0sci5saW5lTGF5ZXJzPXtzdWJ1bml0czoxLGNvdW50cmllczoxLGNvYXN0bGluZXM6MSxyaXZlcnM6MSxmcmFtZToxfSxyLmxheWVycz1bImJnIiwib2NlYW4iLCJsYW5kIiwibGFrZXMiLCJzdWJ1bml0cyIsImNvdW50cmllcyIsImNvYXN0bGluZXMiLCJyaXZlcnMiLCJsYXRheGlzIiwibG9uYXhpcyIsImZyYW1lIiwiYmFja3Bsb3QiLCJmcm9udHBsb3QiXSxyLmxheWVyc0ZvckNob3JvcGxldGg9WyJiZyIsIm9jZWFuIiwibGFuZCIsInN1YnVuaXRzIiwiY291bnRyaWVzIiwiY29hc3RsaW5lcyIsImxhdGF4aXMiLCJsb25heGlzIiwiZnJhbWUiLCJiYWNrcGxvdCIsInJpdmVycyIsImxha2VzIiwiZnJvbnRwbG90Il0sci5sYXllck5hbWVUb0FkamVjdGl2ZT17b2NlYW46Im9jZWFuIixsYW5kOiJsYW5kIixsYWtlczoibGFrZSIsc3VidW5pdHM6InN1YnVuaXQiLGNvdW50cmllczoiY291bnRyeSIsY29hc3RsaW5lczoiY29hc3RsaW5lIixyaXZlcnM6InJpdmVyIixmcmFtZToiZnJhbWUifX0se31dLDc5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYz10KCIuLi9wbG90cyIpLHU9dCgiLi4vY2FydGVzaWFuL2F4ZXMiKSxoPXQoIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5nZXRBdXRvUmFuZ2UsZj10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IikscD10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCxkPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLGc9dCgiLi96b29tIiksdj10KCIuL2NvbnN0YW50cyIpLG09dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLHk9dCgiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIikseD10KCJ0b3BvanNvbi1jbGllbnQiKS5mZWF0dXJlO2Z1bmN0aW9uIGIodCl7dGhpcy5pZD10LmlkLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLnRvcG9qc29uVVJMPXQudG9wb2pzb25VUkwsdGhpcy5pc1N0YXRpYz10LnN0YXRpY1Bsb3QsdGhpcy50b3BvanNvbk5hbWU9bnVsbCx0aGlzLnRvcG9qc29uPW51bGwsdGhpcy5wcm9qZWN0aW9uPW51bGwsdGhpcy5zY29wZT1udWxsLHRoaXMudmlld0luaXRpYWw9bnVsbCx0aGlzLmZpdFNjYWxlPW51bGwsdGhpcy5ib3VuZHM9bnVsbCx0aGlzLm1pZFB0PW51bGwsdGhpcy5oYXNDaG9yb3BsZXRoPSExLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJzPXt9LHRoaXMuYmFzZVBhdGhzPXt9LHRoaXMuZGF0YVBhdGhzPXt9LHRoaXMuZGF0YVBvaW50cz17fSx0aGlzLmNsaXBEZWY9bnVsbCx0aGlzLmNsaXBSZWN0PW51bGwsdGhpcy5iZ1JlY3Q9bnVsbCx0aGlzLm1ha2VGcmFtZXdvcmsoKX10KCIuL3Byb2plY3Rpb25zIikobik7dmFyIF89Yi5wcm90b3R5cGU7ZnVuY3Rpb24gdyh0LGUpe3ZhciByPXYuY2xpcFBhZCxuPXRbMF0rcixhPXRbMV0tcixpPWVbMF0rcixvPWVbMV0tcjtuPjAmJmE8MCYmKGErPTM2MCk7dmFyIHM9KGEtbikvNDtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W1tbbixpXSxbbixvXSxbbitzLG9dLFtuKzIqcyxvXSxbbiszKnMsb10sW2Esb10sW2EsaV0sW2EtcyxpXSxbYS0yKnMsaV0sW2EtMypzLGldLFtuLGldXV19fWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGIodCl9LF8ucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxhPWVbdGhpcy5pZF0saT1bXSxvPSExO2Zvcih2YXIgcyBpbiB2LmxheWVyTmFtZVRvQWRqZWN0aXZlKWlmKCJmcmFtZSIhPT1zJiZhWyJzaG93IitzXSl7bz0hMDticmVha31mb3IodmFyIGw9MDtsPHQubGVuZ3RoO2wrKylpZih0WzBdWzBdLnRyYWNlLmxvY2F0aW9ubW9kZSl7bz0hMDticmVha31pZihvKXt2YXIgYz15LmdldFRvcG9qc29uTmFtZShhKTtudWxsIT09bi50b3BvanNvbiYmYz09PW4udG9wb2pzb25OYW1lfHwobi50b3BvanNvbk5hbWU9Yyx2b2lkIDA9PT1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdJiZpLnB1c2gobi5mZXRjaFRvcG9qc29uKCkpKX1pPWkuY29uY2F0KG0uZmV0Y2hUcmFjZUdlb0RhdGEodCkpLHIucHVzaChuZXcgUHJvbWlzZShmdW5jdGlvbihyLGEpe1Byb21pc2UuYWxsKGkpLnRoZW4oZnVuY3Rpb24oKXtuLnRvcG9qc29uPVBsb3RseUdlb0Fzc2V0cy50b3BvanNvbltuLnRvcG9qc29uTmFtZV0sbi51cGRhdGUodCxlKSxyKCl9KS5jYXRjaChhKX0pKX0sXy5mZXRjaFRvcG9qc29uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXkuZ2V0VG9wb2pzb25QYXRoKHQudG9wb2pzb25VUkwsdC50b3BvanNvbk5hbWUpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLGEpe24uanNvbihlLGZ1bmN0aW9uKG4saSl7aWYobilyZXR1cm4gNDA0PT09bi5zdGF0dXM/YShuZXcgRXJyb3IoWyJwbG90bHkuanMgY291bGQgbm90IGZpbmQgdG9wb2pzb24gZmlsZSBhdCIsZSwiLiIsIk1ha2Ugc3VyZSB0aGUgKnRvcG9qc29uVVJMKiBwbG90IGNvbmZpZyBvcHRpb24iLCJpcyBzZXQgcHJvcGVybHkuIl0uam9pbigiICIpKSk6YShuZXcgRXJyb3IoWyJ1bmV4cGVjdGVkIGVycm9yIHdoaWxlIGZldGNoaW5nIHRvcG9qc29uIGZpbGUgYXQiLGVdLmpvaW4oIiAiKSkpO1Bsb3RseUdlb0Fzc2V0cy50b3BvanNvblt0LnRvcG9qc29uTmFtZV09aSxyKCl9KX0pfSxfLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbdGhpcy5pZF07dGhpcy5oYXNDaG9yb3BsZXRoPSExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgYT10W25dLGk9YVswXS50cmFjZTsiY2hvcm9wbGV0aCI9PT1pLnR5cGUmJih0aGlzLmhhc0Nob3JvcGxldGg9ITApLCEwPT09aS52aXNpYmxlJiZpLl9sZW5ndGg+MCYmaS5fbW9kdWxlLmNhbGNHZW9KU09OKGEsZSl9aWYoIXRoaXMudXBkYXRlUHJvamVjdGlvbih0LGUpKXt0aGlzLnZpZXdJbml0aWFsJiZ0aGlzLnNjb3BlPT09ci5zY29wZXx8dGhpcy5zYXZlVmlld0luaXRpYWwociksdGhpcy5zY29wZT1yLnNjb3BlLHRoaXMudXBkYXRlQmFzZUxheWVycyhlLHIpLHRoaXMudXBkYXRlRGltcyhlLHIpLHRoaXMudXBkYXRlRngoZSxyKSxjLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZSh0aGlzLmdyYXBoRGl2LHRoaXMsdCxyKTt2YXIgbz10aGlzLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCIuc2NhdHRlcmxheWVyIik7dGhpcy5kYXRhUG9pbnRzLnBvaW50PW8uc2VsZWN0QWxsKCIucG9pbnQiKSx0aGlzLmRhdGFQb2ludHMudGV4dD1vLnNlbGVjdEFsbCgidGV4dCIpLHRoaXMuZGF0YVBhdGhzLmxpbmU9by5zZWxlY3RBbGwoIi5qcy1saW5lIik7dmFyIHM9dGhpcy5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KCIuY2hvcm9wbGV0aGxheWVyIik7dGhpcy5kYXRhUGF0aHMuY2hvcm9wbGV0aD1zLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMucmVuZGVyKCl9fSxfLnVwZGF0ZVByb2plY3Rpb249ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdyYXBoRGl2LG89ZVt0aGlzLmlkXSxzPWUuX3NpemUsbD1vLmRvbWFpbixjPW8ucHJvamVjdGlvbix1PW8ubG9uYXhpcyxmPW8ubGF0YXhpcyxwPXUuX2F4LGQ9Zi5fYXgsZz10aGlzLnByb2plY3Rpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQucHJvamVjdGlvbi50eXBlLHI9bi5nZW9bdi5wcm9qTmFtZXNbZV1dKCksYT10Ll9pc0NsaXBwZWQ/di5sb25heGlzU3BhbltlXS8yOm51bGwsaT1bImNlbnRlciIsInJvdGF0ZSIsInBhcmFsbGVscyIsImNsaXBFeHRlbnQiXSxvPWZ1bmN0aW9uKHQpe3JldHVybiB0P3I6W119LHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXTsiZnVuY3Rpb24iIT10eXBlb2YgcltsXSYmKHJbbF09byl9ci5pc0xvbkxhdE92ZXJFZGdlcz1mdW5jdGlvbih0KXtpZihudWxsPT09cih0KSlyZXR1cm4hMDtpZihhKXt2YXIgZT1yLnJvdGF0ZSgpO3JldHVybiBuLmdlby5kaXN0YW5jZSh0LFstZVswXSwtZVsxXV0pPmEqTWF0aC5QSS8xODB9cmV0dXJuITF9LHIuZ2V0UGF0aD1mdW5jdGlvbigpe3JldHVybiBuLmdlby5wYXRoKCkucHJvamVjdGlvbihyKX0sci5nZXRCb3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZ2V0UGF0aCgpLmJvdW5kcyh0KX0sci5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10WzFdWzBdLXRbMF1bMF0sYT10WzFdWzFdLXRbMF1bMV0saT1yLmNsaXBFeHRlbnQmJnIuY2xpcEV4dGVudCgpO3Iuc2NhbGUoMTUwKS50cmFuc2xhdGUoWzAsMF0pLGkmJnIuY2xpcEV4dGVudChudWxsKTt2YXIgbz1yLmdldEJvdW5kcyhlKSxzPU1hdGgubWluKG4vKG9bMV1bMF0tb1swXVswXSksYS8ob1sxXVsxXS1vWzBdWzFdKSksbD0rdFswXVswXSsobi1zKihvWzFdWzBdK29bMF1bMF0pKS8yLGM9K3RbMF1bMV0rKGEtcyoob1sxXVsxXStvWzBdWzFdKSkvMjtyZXR1cm4gaSYmci5jbGlwRXh0ZW50KGkpLHIuc2NhbGUoMTUwKnMpLnRyYW5zbGF0ZShbbCxjXSl9LHIucHJlY2lzaW9uKHYucHJlY2lzaW9uKSxhJiZyLmNsaXBBbmdsZShhLXYuY2xpcFBhZCk7cmV0dXJuIHJ9KG8pLG09W1tzLmwrcy53KmwueFswXSxzLnQrcy5oKigxLWwueVsxXSldLFtzLmwrcy53KmwueFsxXSxzLnQrcy5oKigxLWwueVswXSldXSx5PW8uY2VudGVyfHx7fSx4PWMucm90YXRpb258fHt9LGI9dS5yYW5nZXx8W10sXz1mLnJhbmdlfHxbXTtpZihvLmZpdGJvdW5kcyl7cC5fbGVuZ3RoPW1bMV1bMF0tbVswXVswXSxkLl9sZW5ndGg9bVsxXVsxXS1tWzBdWzFdLHAucmFuZ2U9aChyLHApLGQucmFuZ2U9aChyLGQpO3ZhciBrPShwLnJhbmdlWzBdK3AucmFuZ2VbMV0pLzIsVD0oZC5yYW5nZVswXStkLnJhbmdlWzFdKS8yO2lmKG8uX2lzU2NvcGVkKXk9e2xvbjprLGxhdDpUfTtlbHNlIGlmKG8uX2lzQ2xpcHBlZCl7eT17bG9uOmssbGF0OlR9LHg9e2xvbjprLGxhdDpULHJvbGw6eC5yb2xsfTt2YXIgTT1jLnR5cGUsQT12LmxvbmF4aXNTcGFuW01dLzJ8fDE4MCxTPXYubGF0YXhpc1NwYW5bTV0vMnx8MTgwO2I9W2stQSxrK0FdLF89W1QtUyxUK1NdfWVsc2UgeT17bG9uOmssbGF0OlR9LHg9e2xvbjprLGxhdDp4LmxhdCxyb2xsOngucm9sbH19Zy5jZW50ZXIoW3kubG9uLXgubG9uLHkubGF0LXgubGF0XSkucm90YXRlKFsteC5sb24sLXgubGF0LHgucm9sbF0pLnBhcmFsbGVscyhjLnBhcmFsbGVscyk7dmFyIEU9dyhiLF8pO2cuZml0RXh0ZW50KG0sRSk7dmFyIEw9dGhpcy5ib3VuZHM9Zy5nZXRCb3VuZHMoRSksQz10aGlzLmZpdFNjYWxlPWcuc2NhbGUoKSxQPWcudHJhbnNsYXRlKCk7aWYoIWlzRmluaXRlKExbMF1bMF0pfHwhaXNGaW5pdGUoTFswXVsxXSl8fCFpc0Zpbml0ZShMWzFdWzBdKXx8IWlzRmluaXRlKExbMV1bMV0pfHxpc05hTihQWzBdKXx8aXNOYU4oUFswXSkpe2Zvcih2YXIgTz1bImZpdGJvdW5kcyIsInByb2plY3Rpb24ucm90YXRpb24iLCJjZW50ZXIiLCJsb25heGlzLnJhbmdlIiwibGF0YXhpcy5yYW5nZSJdLHo9IkludmFsaWQgZ2VvIHNldHRpbmdzLCByZWxheW91dCdpbmcgdG8gZGVmYXVsdCB2aWV3LiIsST17fSxEPTA7RDxPLmxlbmd0aDtEKyspSVt0aGlzLmlkKyIuIitPW0RdXT1udWxsO3JldHVybiB0aGlzLnZpZXdJbml0aWFsPW51bGwsaS53YXJuKHopLHIuX3Byb21pc2VzLnB1c2goYS5jYWxsKCJyZWxheW91dCIscixJKSksen1pZihvLmZpdGJvdW5kcyl7dmFyIFI9Zy5nZXRCb3VuZHModyhwLnJhbmdlLGQucmFuZ2UpKSxGPU1hdGgubWluKChMWzFdWzBdLUxbMF1bMF0pLyhSWzFdWzBdLVJbMF1bMF0pLChMWzFdWzFdLUxbMF1bMV0pLyhSWzFdWzFdLVJbMF1bMV0pKTtpc0Zpbml0ZShGKT9nLnNjYWxlKEYqQyk6aS53YXJuKCJTb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmciK3RoaXMuaWQrImZpdGJvdW5kcyBjb21wdXRhdGlvbnMuIil9ZWxzZSBnLnNjYWxlKGMuc2NhbGUqQyk7dmFyIEI9dGhpcy5taWRQdD1bKExbMF1bMF0rTFsxXVswXSkvMiwoTFswXVsxXStMWzFdWzFdKS8yXTtpZihnLnRyYW5zbGF0ZShbUFswXSsoQlswXS1QWzBdKSxQWzFdKyhCWzFdLVBbMV0pXSkuY2xpcEV4dGVudChMKSxvLl9pc0FsYmVyc1VzYSl7dmFyIE49ZyhbeS5sb24seS5sYXRdKSxqPWcudHJhbnNsYXRlKCk7Zy50cmFuc2xhdGUoW2pbMF0tKE5bMF0talswXSksalsxXS0oTlsxXS1qWzFdKV0pfX0sXy51cGRhdGVCYXNlTGF5ZXJzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxhPXIudG9wb2pzb24saT1yLmxheWVycyxsPXIuYmFzZVBhdGhzO2Z1bmN0aW9uIGModCl7cmV0dXJuImxvbmF4aXMiPT09dHx8ImxhdGF4aXMiPT09dH1mdW5jdGlvbiBoKHQpe3JldHVybiBCb29sZWFuKHYubGluZUxheWVyc1t0XSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gQm9vbGVhbih2LmZpbGxMYXllcnNbdF0pfXZhciBwPSh0aGlzLmhhc0Nob3JvcGxldGg/di5sYXllcnNGb3JDaG9yb3BsZXRoOnYubGF5ZXJzKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGgodCl8fGYodCk/ZVsic2hvdyIrdF06IWModCl8fGVbdF0uc2hvd2dyaWR9KSxkPXIuZnJhbWV3b3JrLnNlbGVjdEFsbCgiLmxheWVyIikuZGF0YShwLFN0cmluZyk7ZC5leGl0KCkuZWFjaChmdW5jdGlvbih0KXtkZWxldGUgaVt0XSxkZWxldGUgbFt0XSxuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pLGQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuImxheWVyICIrdH0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9aVt0XT1uLnNlbGVjdCh0aGlzKTsiYmciPT09dD9yLmJnUmVjdD1lLmFwcGVuZCgicmVjdCIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpOmModCk/bFt0XT1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJmaWxsIiwibm9uZSIpOiJiYWNrcGxvdCI9PT10P2UuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2hvcm9wbGV0aGxheWVyIiwhMCk6ImZyb250cGxvdCI9PT10P2UuYXBwZW5kKCJnIikuY2xhc3NlZCgic2NhdHRlcmxheWVyIiwhMCk6aCh0KT9sW3RdPWUuYXBwZW5kKCJwYXRoIikuc3R5bGUoImZpbGwiLCJub25lIikuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwyKTpmKHQpJiYobFt0XT1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJzdHJva2UiLCJub25lIikpfSksZC5vcmRlcigpLGQuZWFjaChmdW5jdGlvbihyKXt2YXIgbj1sW3JdLGk9di5sYXllck5hbWVUb0FkamVjdGl2ZVtyXTsiZnJhbWUiPT09cj9uLmRhdHVtKHYuc3BoZXJlU1ZHKTpoKHIpfHxmKHIpP24uZGF0dW0oeChhLGEub2JqZWN0c1tyXSkpOmMocikmJm4uZGF0dW0oZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsaSxvPWVbdF0scz12LnNjb3BlRGVmYXVsdHNbZS5zY29wZV07ImxvbmF4aXMiPT09dD8obj1zLmxvbmF4aXNSYW5nZSxhPXMubGF0YXhpc1JhbmdlLGk9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCxlXX0pOiJsYXRheGlzIj09PXQmJihuPXMubGF0YXhpc1JhbmdlLGE9cy5sb25heGlzUmFuZ2UsaT1mdW5jdGlvbih0LGUpe3JldHVybltlLHRdfSk7dmFyIGw9e3R5cGU6ImxpbmVhciIscmFuZ2U6W25bMF0sblsxXS0xZS02XSx0aWNrMDpvLnRpY2swLGR0aWNrOm8uZHRpY2t9O3Uuc2V0Q29udmVydChsLHIpO3ZhciBjPXUuY2FsY1RpY2tzKGwpO2UuaXNTY29wZWR8fCJsb25heGlzIiE9PXR8fGMucG9wKCk7Zm9yKHZhciBoPWMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHA9MDtwPGg7cCsrKWZvcih2YXIgZD1jW3BdLngsZz1mW3BdPVtdLG09YVswXTttPGFbMV0rMi41O20rPTIuNSlnLnB1c2goaShkLG0pKTtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczpmfX0ocixlLHQpKS5jYWxsKG8uc3Ryb2tlLGVbcl0uZ3JpZGNvbG9yKS5jYWxsKHMuZGFzaExpbmUsIiIsZVtyXS5ncmlkd2lkdGgpLGgocik/bi5jYWxsKG8uc3Ryb2tlLGVbaSsiY29sb3IiXSkuY2FsbChzLmRhc2hMaW5lLCIiLGVbaSsid2lkdGgiXSk6ZihyKSYmbi5jYWxsKG8uZmlsbCxlW2krImNvbG9yIl0pfSl9LF8udXBkYXRlRGltcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuYm91bmRzLG49KGUuZnJhbWV3aWR0aHx8MCkvMixhPXJbMF1bMF0tbixpPXJbMF1bMV0tbixsPXJbMV1bMF0tYStuLGM9clsxXVsxXS1pK247cy5zZXRSZWN0KHRoaXMuY2xpcFJlY3QsYSxpLGwsYyksdGhpcy5iZ1JlY3QuY2FsbChzLnNldFJlY3QsYSxpLGwsYykuY2FsbChvLmZpbGwsZS5iZ2NvbG9yKSx0aGlzLnhheGlzLl9vZmZzZXQ9YSx0aGlzLnhheGlzLl9sZW5ndGg9bCx0aGlzLnlheGlzLl9vZmZzZXQ9aSx0aGlzLnlheGlzLl9sZW5ndGg9Y30sXy51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsaT1yLmdyYXBoRGl2LG89ci5iZ1JlY3Qscz10LmRyYWdtb2RlLGM9dC5jbGlja21vZGU7aWYoIXIuaXNTdGF0aWMpe3ZhciB1OyJzZWxlY3QiPT09cz91PWZ1bmN0aW9uKHQsZSl7KHQucmFuZ2U9e30pW3IuaWRdPVt2KFtlLnhtaW4sZS55bWluXSksdihbZS54bWF4LGUueW1heF0pXX06Imxhc3NvIj09PXMmJih1PWZ1bmN0aW9uKHQsZSxuKXsodC5sYXNzb1BvaW50cz17fSlbci5pZF09bi5maWx0ZXJlZC5tYXAodil9KTt2YXIgaD17ZWxlbWVudDpyLmJnUmVjdC5ub2RlKCksZ2Q6aSxwbG90aW5mbzp7aWQ6ci5pZCx4YXhpczpyLnhheGlzLHlheGlzOnIueWF4aXMsZmlsbFJhbmdlSXRlbXM6dX0seGF4ZXM6W3IueGF4aXNdLHlheGVzOltyLnlheGlzXSxzdWJwbG90OnIuaWQsY2xpY2tGbjpmdW5jdGlvbihlKXsyPT09ZSYmdC5fem9vbWxheWVyLnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lIikucmVtb3ZlKCl9fTsicGFuIj09PXM/KG8ubm9kZSgpLm9ubW91c2Vkb3duPW51bGwsby5jYWxsKGcocixlKSksby5vbigiZGJsY2xpY2suem9vbSIsZnVuY3Rpb24oKXt2YXIgdD1yLnZpZXdJbml0aWFsLGU9e307Zm9yKHZhciBuIGluIHQpZVtyLmlkKyIuIituXT10W25dO2EuY2FsbCgiX2d1aVJlbGF5b3V0IixpLGUpLGkuZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKX0pLGkuX2NvbnRleHQuX3Njcm9sbFpvb20uZ2VvfHxvLm9uKCJ3aGVlbC56b29tIixudWxsKSk6InNlbGVjdCIhPT1zJiYibGFzc28iIT09c3x8KG8ub24oIi56b29tIixudWxsKSxoLnByZXBGbj1mdW5jdGlvbih0LGUscil7cCh0LGUscixoLHMpfSxmLmluaXQoaCkpLG8ub24oIm1vdXNlbW92ZSIsZnVuY3Rpb24oKXt2YXIgdD1yLnByb2plY3Rpb24uaW52ZXJ0KG4ubW91c2UodGhpcykpO2lmKCF0fHxpc05hTih0WzBdKXx8aXNOYU4odFsxXSkpcmV0dXJuIGYudW5ob3ZlcihpLG4uZXZlbnQpO3IueGF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIHRbMF19LHIueWF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIHRbMV19LGwuaG92ZXIoaSxuLmV2ZW50LHIuaWQpfSksby5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7aS5fZHJhZ2dpbmd8fGYudW5ob3ZlcihpLG4uZXZlbnQpfSksby5vbigiY2xpY2siLGZ1bmN0aW9uKCl7InNlbGVjdCIhPT1zJiYibGFzc28iIT09cyYmKGMuaW5kZXhPZigic2VsZWN0Iik+LTEmJmQobi5ldmVudCxpLFtyLnhheGlzXSxbci55YXhpc10sci5pZCxoKSxjLmluZGV4T2YoImV2ZW50Iik+LTEmJmwuY2xpY2soaSxuLmV2ZW50KSl9KX1mdW5jdGlvbiB2KHQpe3JldHVybiByLnByb2plY3Rpb24uaW52ZXJ0KFt0WzBdK3IueGF4aXMuX29mZnNldCx0WzFdK3IueWF4aXMuX29mZnNldF0pfX0sXy5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuZ3JhcGhEaXYscj1lLl9mdWxsTGF5b3V0LGE9ImNsaXAiK3IuX3VpZCt0LmlkO3QuY2xpcERlZj1yLl9jbGlwcy5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLGEpLHQuY2xpcFJlY3Q9dC5jbGlwRGVmLmFwcGVuZCgicmVjdCIpLHQuZnJhbWV3b3JrPW4uc2VsZWN0KHQuY29udGFpbmVyKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdlbyAiK3QuaWQpLmNhbGwocy5zZXRDbGlwVXJsLGEsZSksdC5wcm9qZWN0PWZ1bmN0aW9uKGUpe3ZhciByPXQucHJvamVjdGlvbihlKTtyZXR1cm4gcj9bclswXS10LnhheGlzLl9vZmZzZXQsclsxXS10LnlheGlzLl9vZmZzZXRdOltudWxsLG51bGxdfSx0LnhheGlzPXtfaWQ6IngiLGMycDpmdW5jdGlvbihlKXtyZXR1cm4gdC5wcm9qZWN0KGUpWzBdfX0sdC55YXhpcz17X2lkOiJ5IixjMnA6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvamVjdChlKVsxXX19LHQubW9ja0F4aXM9e3R5cGU6ImxpbmVhciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIn0sdS5zZXRDb252ZXJ0KHQubW9ja0F4aXMscil9LF8uc2F2ZVZpZXdJbml0aWFsPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5jZW50ZXJ8fHt9LG49dC5wcm9qZWN0aW9uLGE9bi5yb3RhdGlvbnx8e307dGhpcy52aWV3SW5pdGlhbD17Zml0Ym91bmRzOnQuZml0Ym91bmRzLCJwcm9qZWN0aW9uLnNjYWxlIjpuLnNjYWxlfSxlPXQuX2lzU2NvcGVkP3siY2VudGVyLmxvbiI6ci5sb24sImNlbnRlci5sYXQiOnIubGF0fTp0Ll9pc0NsaXBwZWQ/eyJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6YS5sb24sInByb2plY3Rpb24ucm90YXRpb24ubGF0IjphLmxhdH06eyJjZW50ZXIubG9uIjpyLmxvbiwiY2VudGVyLmxhdCI6ci5sYXQsInByb2plY3Rpb24ucm90YXRpb24ubG9uIjphLmxvbn0saS5leHRlbmRGbGF0KHRoaXMudmlld0luaXRpYWwsZSl9LF8ucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLnByb2plY3Rpb24scj1lLmdldFBhdGgoKTtmdW5jdGlvbiBuKHQpe3ZhciByPWUodC5sb25sYXQpO3JldHVybiByPyJ0cmFuc2xhdGUoIityWzBdKyIsIityWzFdKyIpIjpudWxsfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGUuaXNMb25MYXRPdmVyRWRnZXModC5sb25sYXQpPyJub25lIjpudWxsfWZvcih0IGluIHRoaXMuYmFzZVBhdGhzKXRoaXMuYmFzZVBhdGhzW3RdLmF0dHIoImQiLHIpO2Zvcih0IGluIHRoaXMuZGF0YVBhdGhzKXRoaXMuZGF0YVBhdGhzW3RdLmF0dHIoImQiLGZ1bmN0aW9uKHQpe3JldHVybiByKHQuZ2VvanNvbil9KTtmb3IodCBpbiB0aGlzLmRhdGFQb2ludHMpdGhpcy5kYXRhUG9pbnRzW3RdLmF0dHIoImRpc3BsYXkiLGEpLmF0dHIoInRyYW5zZm9ybSIsbil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjEwLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYxMywiLi4vLi4vY29tcG9uZW50cy9meCI6NjMwLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyI6NzExLCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiOjc0NCwiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSI6NzY0LCIuLi9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Ijo3ODIsIi4uL3Bsb3RzIjo4MjYsIi4vY29uc3RhbnRzIjo3OTMsIi4vcHJvamVjdGlvbnMiOjc5OCwiLi96b29tIjo3OTksZDM6MTY1LCJ0b3BvanNvbi1jbGllbnQiOjUzOX1dLDc5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9nZXRfZGF0YSIpLmdldFN1YnBsb3RDYWxjRGF0YSxhPXQoIi4uLy4uL2xpYiIpLmNvdW50ZXJSZWdleCxpPXQoIi4vZ2VvIiksbz0iZ2VvIixzPWEobyksbD17fTtsW29dPXt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6byxlZGl0VHlwZToiY2FsYyJ9LGUuZXhwb3J0cz17YXR0cjpvLG5hbWU6byxpZFJvb3Q6byxpZFJlZ2V4OnMsYXR0clJlZ2V4OnMsYXR0cmlidXRlczpsLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIikscGxvdDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsYT1lLl9zdWJwbG90c1tvXSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sYz1uKHIsbyxsKSx1PWVbbF0uX3N1YnBsb3Q7dXx8KHU9aSh7aWQ6bCxncmFwaERpdjp0LGNvbnRhaW5lcjplLl9nZW9sYXllci5ub2RlKCksdG9wb2pzb25VUkw6dC5fY29udGV4dC50b3BvanNvblVSTCxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdH0pLGVbbF0uX3N1YnBsb3Q9dSksdS5wbG90KGMsZSx0Ll9wcm9taXNlcyl9fSx1cGRhdGVGeDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzW29dLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGE9ZVtyW25dXTthLl9zdWJwbG90LnVwZGF0ZUZ4KGUsYSl9fSxjbGVhbjpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGE9bi5fc3VicGxvdHNbb118fFtdLGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIHM9YVtpXSxsPW5bc10uX3N1YnBsb3Q7IWVbc10mJmwmJihsLmZyYW1ld29yay5yZW1vdmUoKSxsLmNsaXBEZWYucmVtb3ZlKCkpfX19fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6ODAwLCIuL2dlbyI6Nzk0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo3OTYsIi4vbGF5b3V0X2RlZmF1bHRzIjo3OTd9XSw3OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi9kb21haW4iKS5hdHRyaWJ1dGVzLGk9dCgiLi9jb25zdGFudHMiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXtyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIifSx7dmFsVHlwZToibnVtYmVyIn1dfSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sdGljazA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxkdGljazp7dmFsVHlwZToibnVtYmVyIn0sZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmxpZ2h0TGluZX0sZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX19OyhlLmV4cG9ydHM9byh7ZG9tYWluOmEoe25hbWU6ImdlbyJ9LHt9KSxmaXRib3VuZHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITEsImxvY2F0aW9ucyIsImdlb2pzb24iXSxkZmx0OiExLGVkaXRUeXBlOiJwbG90In0scmVzb2x1dGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsxMTAsNTBdLGRmbHQ6MTEwLGNvZXJjZU51bWJlcjohMH0sc2NvcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhpLnNjb3BlRGVmYXVsdHMpLGRmbHQ6IndvcmxkIn0scHJvamVjdGlvbjp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGkucHJvak5hbWVzKX0scm90YXRpb246e2xvbjp7dmFsVHlwZToibnVtYmVyIn0sbGF0Ont2YWxUeXBlOiJudW1iZXIifSxyb2xsOnt2YWxUeXBlOiJudW1iZXIifX0scGFyYWxsZWxzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX19LGNlbnRlcjp7bG9uOnt2YWxUeXBlOiJudW1iZXIifSxsYXQ6e3ZhbFR5cGU6Im51bWJlciJ9fSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93Y29hc3RsaW5lczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvYXN0bGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxjb2FzdGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHNob3dsYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYW5kY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkubGFuZENvbG9yfSxzaG93b2NlYW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9jZWFuY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Omkud2F0ZXJDb2xvcn0sc2hvd2xha2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYWtlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Omkud2F0ZXJDb2xvcn0sc2hvd3JpdmVyczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scml2ZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS53YXRlckNvbG9yfSxyaXZlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2NvdW50cmllczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvdW50cnljb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sY291bnRyeXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd3N1YnVuaXRzOnt2YWxUeXBlOiJib29sZWFuIn0sc3VidW5pdGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzdWJ1bml0d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93ZnJhbWU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxmcmFtZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxmcmFtZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxsb25heGlzOnMsbGF0YXhpczpzfSwicGxvdCIsImZyb20tcm9vdCIpKS51aXJldmlzaW9uPXt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo1OTEsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc0OCwiLi4vZG9tYWluIjo3OTAsIi4vY29uc3RhbnRzIjo3OTN9XSw3OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi9zdWJwbG90X2RlZmF1bHRzIiksaT10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhLG89dCgiLi9jb25zdGFudHMiKSxzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPW8uYXhlc05hbWVzO2Z1bmN0aW9uIGModCxlLHIsYSl7dmFyIHM9aShhLmZ1bGxEYXRhLCJnZW8iLGEuaWQpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5fZXhwYW5kZWRJbmRleH0pLGM9cigicmVzb2x1dGlvbiIpLHU9cigic2NvcGUiKSxoPW8uc2NvcGVEZWZhdWx0c1t1XSxmPXIoInByb2plY3Rpb24udHlwZSIsaC5wcm9qVHlwZSkscD1lLl9pc0FsYmVyc1VzYT0iYWxiZXJzIHVzYSI9PT1mO3AmJih1PWUuc2NvcGU9InVzYSIpO3ZhciBkPWUuX2lzU2NvcGVkPSJ3b3JsZCIhPT11LGc9ZS5faXNDb25pYz0tMSE9PWYuaW5kZXhPZigiY29uaWMiKSx2PWUuX2lzQ2xpcHBlZD0hIW8ubG9uYXhpc1NwYW5bZl07aWYoITE9PT10LnZpc2libGUpe3ZhciBtPW4uZXh0ZW5kRGVlcCh7fSxlLl90ZW1wbGF0ZSk7bS5zaG93Y29hc3RsaW5lcz0hMSxtLnNob3djb3VudHJpZXM9ITEsbS5zaG93ZnJhbWU9ITEsbS5zaG93bGFrZXM9ITEsbS5zaG93bGFuZD0hMSxtLnNob3dvY2Vhbj0hMSxtLnNob3dyaXZlcnM9ITEsbS5zaG93c3VidW5pdHM9ITEsbS5sb25heGlzJiYobS5sb25heGlzLnNob3dncmlkPSExKSxtLmxhdGF4aXMmJihtLmxhdGF4aXMuc2hvd2dyaWQ9ITEpLGUuX3RlbXBsYXRlPW19Zm9yKHZhciB5PXIoInZpc2libGUiKSx4PTA7eDxsLmxlbmd0aDt4Kyspe3ZhciBiLF89bFt4XSx3PVszMCwxMF1beF07aWYoZCliPWhbXysiUmFuZ2UiXTtlbHNle3ZhciBrPW9bXysiU3BhbiJdLFQ9KGtbZl18fGtbIioiXSkvMixNPXIoInByb2plY3Rpb24ucm90YXRpb24uIitfLnN1YnN0cigwLDMpLGgucHJvalJvdGF0ZVt4XSk7Yj1bTS1ULE0rVF19dmFyIEE9cihfKyIucmFuZ2UiLGIpO3IoXysiLnRpY2swIikscihfKyIuZHRpY2siLHcpLHIoXysiLnNob3dncmlkIiwhIXkmJnZvaWQgMCkmJihyKF8rIi5ncmlkY29sb3IiKSxyKF8rIi5ncmlkd2lkdGgiKSksZVtfXS5fYXg9e3R5cGU6ImxpbmVhciIsX2lkOl8uc2xpY2UoMCwzKSxfdHJhY2VJbmRpY2VzOnMsc2V0U2NhbGU6bi5pZGVudGl0eSxjMmw6bi5pZGVudGl0eSxyMmw6bi5pZGVudGl0eSxhdXRvcmFuZ2U6ITAscmFuZ2U6QS5zbGljZSgpLF9tOjEsX2lucHV0Ont9fX12YXIgUz1lLmxvbmF4aXMucmFuZ2UsRT1lLmxhdGF4aXMucmFuZ2UsTD1TWzBdLEM9U1sxXTtMPjAmJkM8MCYmKEMrPTM2MCk7dmFyIFAsTyx6LEk9KEwrQykvMjtpZighcCl7dmFyIEQ9ZD9oLnByb2pSb3RhdGU6W0ksMCwwXTtQPXIoInByb2plY3Rpb24ucm90YXRpb24ubG9uIixEWzBdKSxyKCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCIsRFsxXSkscigicHJvamVjdGlvbi5yb3RhdGlvbi5yb2xsIixEWzJdKSxyKCJzaG93Y29hc3RsaW5lcyIsIWQmJnkpJiYocigiY29hc3RsaW5lY29sb3IiKSxyKCJjb2FzdGxpbmV3aWR0aCIpKSxyKCJzaG93b2NlYW4iLCEheSYmdm9pZCAwKSYmcigib2NlYW5jb2xvciIpfShwPyhPPS05Ni42LHo9MzguNyk6KE89ZD9JOlAsej0oRVswXStFWzFdKS8yKSxyKCJjZW50ZXIubG9uIixPKSxyKCJjZW50ZXIubGF0Iix6KSxnKSYmcigicHJvamVjdGlvbi5wYXJhbGxlbHMiLGgucHJvalBhcmFsbGVsc3x8WzAsNjBdKTtyKCJwcm9qZWN0aW9uLnNjYWxlIikscigic2hvd2xhbmQiLCEheSYmdm9pZCAwKSYmcigibGFuZGNvbG9yIikscigic2hvd2xha2VzIiwhIXkmJnZvaWQgMCkmJnIoImxha2Vjb2xvciIpLHIoInNob3dyaXZlcnMiLCEheSYmdm9pZCAwKSYmKHIoInJpdmVyY29sb3IiKSxyKCJyaXZlcndpZHRoIikpLHIoInNob3djb3VudHJpZXMiLGQmJiJ1c2EiIT09dSYmeSkmJihyKCJjb3VudHJ5Y29sb3IiKSxyKCJjb3VudHJ5d2lkdGgiKSksKCJ1c2EiPT09dXx8Im5vcnRoIGFtZXJpY2EiPT09dSYmNTA9PT1jKSYmKHIoInNob3dzdWJ1bml0cyIseSkscigic3VidW5pdGNvbG9yIikscigic3VidW5pdHdpZHRoIikpLGR8fHIoInNob3dmcmFtZSIseSkmJihyKCJmcmFtZWNvbG9yIikscigiZnJhbWV3aWR0aCIpKSxyKCJiZ2NvbG9yIikscigiZml0Ym91bmRzIikmJihkZWxldGUgZS5wcm9qZWN0aW9uLnNjYWxlLGQ/KGRlbGV0ZSBlLmNlbnRlci5sb24sZGVsZXRlIGUuY2VudGVyLmxhdCk6dj8oZGVsZXRlIGUuY2VudGVyLmxvbixkZWxldGUgZS5jZW50ZXIubGF0LGRlbGV0ZSBlLnByb2plY3Rpb24ucm90YXRpb24ubG9uLGRlbGV0ZSBlLnByb2plY3Rpb24ucm90YXRpb24ubGF0LGRlbGV0ZSBlLmxvbmF4aXMucmFuZ2UsZGVsZXRlIGUubGF0YXhpcy5yYW5nZSk6KGRlbGV0ZSBlLmNlbnRlci5sb24sZGVsZXRlIGUuY2VudGVyLmxhdCxkZWxldGUgZS5wcm9qZWN0aW9uLnJvdGF0aW9uLmxvbikpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7YSh0LGUscix7dHlwZToiZ2VvIixhdHRyaWJ1dGVzOnMsaGFuZGxlRGVmYXVsdHM6YyxmdWxsRGF0YTpyLHBhcnRpdGlvbjoieSJ9KX19LHsiLi4vLi4vbGliIjo3MTcsIi4uL2dldF9kYXRhIjo4MDAsIi4uL3N1YnBsb3RfZGVmYXVsdHMiOjg0MCwiLi9jb25zdGFudHMiOjc5MywiLi9sYXlvdXRfYXR0cmlidXRlcyI6Nzk2fV0sNzk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJue3R5cGU6IkZlYXR1cmUiLGlkOnQuaWQscHJvcGVydGllczp0LnByb3BlcnRpZXMsZ2VvbWV0cnk6cih0Lmdlb21ldHJ5LGUpfX1mdW5jdGlvbiByKGUsbil7aWYoIWUpcmV0dXJuIG51bGw7aWYoIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGUpcmV0dXJue3R5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiIsZ2VvbWV0cmllczpvYmplY3QuZ2VvbWV0cmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHIodCxuKX0pfTtpZighYy5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpKXJldHVybiBudWxsO3ZhciBhPWNbZS50eXBlXTtyZXR1cm4gdC5nZW8uc3RyZWFtKGUsbihhKSksYS5yZXN1bHQoKX10Lmdlby5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIGE9ZS5zdHJlYW07aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJub3QgeWV0IHN1cHBvcnRlZCIpO3JldHVybih0JiZuLmhhc093blByb3BlcnR5KHQudHlwZSk/blt0LnR5cGVdOnIpKHQsYSl9O3ZhciBuPXtGZWF0dXJlOmUsRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxyKXtyZXR1cm57dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOnQuZmVhdHVyZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQscil9KX19fSxhPVtdLGk9W10sbz17cG9pbnQ6ZnVuY3Rpb24odCxlKXthLnB1c2goW3QsZV0pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1hLmxlbmd0aD9hLmxlbmd0aDwyP3t0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6YVswXX06e3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOmF9Om51bGw7cmV0dXJuIGE9W10sdH19LHM9e2xpbmVTdGFydDp1LHBvaW50OmZ1bmN0aW9uKHQsZSl7YS5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe2EubGVuZ3RoJiYoaS5wdXNoKGEpLGE9W10pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1pLmxlbmd0aD9pLmxlbmd0aDwyP3t0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczppWzBdfTp7dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczppfTpudWxsO3JldHVybiBpPVtdLHR9fSxsPXtwb2x5Z29uU3RhcnQ6dSxsaW5lU3RhcnQ6dSxwb2ludDpmdW5jdGlvbih0LGUpe2EucHVzaChbdCxlXSl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD1hLmxlbmd0aDtpZih0KXtkb3thLnB1c2goYVswXS5zbGljZSgpKX13aGlsZSgrK3Q8NCk7aS5wdXNoKGEpLGE9W119fSxwb2x5Z29uRW5kOnUscmVzdWx0OmZ1bmN0aW9uKCl7aWYoIWkubGVuZ3RoKXJldHVybiBudWxsO3ZhciB0PVtdLGU9W107cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihyKXshZnVuY3Rpb24odCl7aWYoKGU9dC5sZW5ndGgpPDQpcmV0dXJuITE7Zm9yKHZhciBlLHI9MCxuPXRbZS0xXVsxXSp0WzBdWzBdLXRbZS0xXVswXSp0WzBdWzFdOysrcjxlOyluKz10W3ItMV1bMV0qdFtyXVswXS10W3ItMV1bMF0qdFtyXVsxXTtyZXR1cm4gbjw9MH0ocik/ZS5wdXNoKHIpOnQucHVzaChbcl0pfSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF07dC5zb21lKGZ1bmN0aW9uKHQpe2lmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWVbMF0sbj1lWzFdLGE9ITEsaT0wLG89dC5sZW5ndGgscz1vLTE7aTxvO3M9aSsrKXt2YXIgbD10W2ldLGM9bFswXSx1PWxbMV0saD10W3NdLGY9aFswXSxwPWhbMV07dT5uXnA+biYmcjwoZi1jKSoobi11KS8ocC11KStjJiYoYT0hYSl9cmV0dXJuIGF9KHRbMF0scikpcmV0dXJuIHQucHVzaChlKSwhMH0pfHx0LnB1c2goW2VdKX0pLGk9W10sdC5sZW5ndGg/dC5sZW5ndGg+MT97dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp0fTp7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dFswXX06bnVsbH19LGM9e1BvaW50Om8sTXVsdGlQb2ludDpvLExpbmVTdHJpbmc6cyxNdWx0aUxpbmVTdHJpbmc6cyxQb2x5Z29uOmwsTXVsdGlQb2x5Z29uOmwsU3BoZXJlOmx9O2Z1bmN0aW9uIHUoKXt9dmFyIGg9MWUtNixmPWgqaCxwPU1hdGguUEksZD1wLzIsZz0oTWF0aC5zcXJ0KHApLHAvMTgwKSx2PTE4MC9wO2Z1bmN0aW9uIG0odCl7cmV0dXJuIHQ+MT9kOnQ8LTE/LWQ6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/cDpNYXRoLmFjb3ModCl9dmFyIHg9dC5nZW8ucHJvamVjdGlvbixiPXQuZ2VvLnByb2plY3Rpb25NdXRhdG9yO2Z1bmN0aW9uIF8odCxlKXt2YXIgcj0oMitkKSpNYXRoLnNpbihlKTtlLz0yO2Zvcih2YXIgbj0wLGE9MS8wO248MTAmJk1hdGguYWJzKGEpPmg7bisrKXt2YXIgaT1NYXRoLmNvcyhlKTtlLT1hPShlK01hdGguc2luKGUpKihpKzIpLXIpLygyKmkqKDEraSkpfXJldHVyblsyL01hdGguc3FydChwKig0K3ApKSp0KigxK01hdGguY29zKGUpKSwyKk1hdGguc3FydChwLyg0K3ApKSpNYXRoLnNpbihlKV19dC5nZW8uaW50ZXJydXB0PWZ1bmN0aW9uKGUpe3ZhciByLG49W1tbWy1wLDBdLFswLGRdLFtwLDBdXV0sW1tbLXAsMF0sWzAsLWRdLFtwLDBdXV1dO2Z1bmN0aW9uIGEodCxyKXtmb3IodmFyIGE9cjwwPy0xOjEsaT1uWysocjwwKV0sbz0wLHM9aS5sZW5ndGgtMTtvPHMmJnQ+aVtvXVsyXVswXTsrK28pO3ZhciBsPWUodC1pW29dWzFdWzBdLHIpO3JldHVybiBsWzBdKz1lKGlbb11bMV1bMF0sYSpyPmEqaVtvXVswXVsxXT9pW29dWzBdWzFdOnIpWzBdLGx9ZS5pbnZlcnQmJihhLmludmVydD1mdW5jdGlvbih0LGkpe2Zvcih2YXIgbz1yWysoaTwwKV0scz1uWysoaTwwKV0sYz0wLHU9by5sZW5ndGg7Yzx1OysrYyl7dmFyIGg9b1tjXTtpZihoWzBdWzBdPD10JiZ0PGhbMV1bMF0mJmhbMF1bMV08PWkmJmk8aFsxXVsxXSl7dmFyIGY9ZS5pbnZlcnQodC1lKHNbY11bMV1bMF0sMClbMF0saSk7cmV0dXJuIGZbMF0rPXNbY11bMV1bMF0sbChhKGZbMF0sZlsxXSksW3QsaV0pP2Y6bnVsbH19fSk7dmFyIGk9dC5nZW8ucHJvamVjdGlvbihhKSxvPWkuc3RyZWFtO2Z1bmN0aW9uIHModCxlKXtmb3IodmFyIHIsbixhLGk9LTEsbz10Lmxlbmd0aCxzPXRbMF0sbD1bXTsrK2k8bzspe249KChyPXRbaV0pWzBdLXNbMF0pL2UsYT0oclsxXS1zWzFdKS9lO2Zvcih2YXIgYz0wO2M8ZTsrK2MpbC5wdXNoKFtzWzBdK2MqbixzWzFdK2MqYV0pO3M9cn1yZXR1cm4gbC5wdXNoKHIpLGx9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF0pPGgmJk1hdGguYWJzKHRbMV0tZVsxXSk8aH1yZXR1cm4gaS5zdHJlYW09ZnVuY3Rpb24oZSl7dmFyIHI9aS5yb3RhdGUoKSxhPW8oZSksbD0oaS5yb3RhdGUoWzAsMF0pLG8oZSkpO3JldHVybiBpLnJvdGF0ZShyKSxhLnNwaGVyZT1mdW5jdGlvbigpe3QuZ2VvLnN0cmVhbShmdW5jdGlvbigpe2Zvcih2YXIgZT0xZS02LHI9W10sYT0wLGk9blswXS5sZW5ndGg7YTxpOysrYSl7dmFyIG89blswXVthXSxsPTE4MCpvWzBdWzBdL3AsYz0xODAqb1swXVsxXS9wLHU9MTgwKm9bMV1bMV0vcCxoPTE4MCpvWzJdWzBdL3AsZj0xODAqb1syXVsxXS9wO3IucHVzaChzKFtbbCtlLGMrZV0sW2wrZSx1LWVdLFtoLWUsdS1lXSxbaC1lLGYrZV1dLDMwKSl9Zm9yKHZhciBhPW5bMV0ubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBvPW5bMV1bYV0sbD0xODAqb1swXVswXS9wLGM9MTgwKm9bMF1bMV0vcCx1PTE4MCpvWzFdWzFdL3AsaD0xODAqb1syXVswXS9wLGY9MTgwKm9bMl1bMV0vcDtyLnB1c2gocyhbW2gtZSxmLWVdLFtoLWUsdStlXSxbbCtlLHUrZV0sW2wrZSxjLWVdXSwzMCkpfXJldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdC5tZXJnZShyKV19fSgpLGwpfSxhfSxpLmxvYmVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm5bW3RbMF1bMF0qcC8xODAsdFswXVsxXSpwLzE4MF0sW3RbMV1bMF0qcC8xODAsdFsxXVsxXSpwLzE4MF0sW3RbMl1bMF0qcC8xODAsdFsyXVsxXSpwLzE4MF1dfSl9KSxyPW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXt2YXIgcixuPWUodFswXVswXSx0WzBdWzFdKVswXSxhPWUodFsyXVswXSx0WzJdWzFdKVswXSxpPWUodFsxXVswXSx0WzBdWzFdKVsxXSxvPWUodFsxXVswXSx0WzFdWzFdKVsxXTtyZXR1cm4gaT5vJiYocj1pLGk9byxvPXIpLFtbbixpXSxbYSxvXV19KX0pLGkpOm4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm5bWzE4MCp0WzBdWzBdL3AsMTgwKnRbMF1bMV0vcF0sWzE4MCp0WzFdWzBdL3AsMTgwKnRbMV1bMV0vcF0sWzE4MCp0WzJdWzBdL3AsMTgwKnRbMl1bMV0vcF1dfSl9KX0saX0sXy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0uNSplKk1hdGguc3FydCgoNCtwKS9wKSxuPW0ociksYT1NYXRoLmNvcyhuKTtyZXR1cm5bdC8oMi9NYXRoLnNxcnQocCooNCtwKSkqKDErYSkpLG0oKG4rciooYSsyKSkvKDIrZCkpXX0sKHQuZ2VvLmVja2VydDQ9ZnVuY3Rpb24oKXtyZXR1cm4geChfKX0pLnJhdz1fO3ZhciB3PXQuZ2VvLmF6aW11dGhhbEVxdWFsQXJlYS5yYXc7ZnVuY3Rpb24gayh0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9dCksMT09PWUpcmV0dXJuIHc7aWYoZT09PTEvMClyZXR1cm4gVDtmdW5jdGlvbiByKHIsbil7dmFyIGE9dyhyL2Usbik7cmV0dXJuIGFbMF0qPXQsYX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24ocixuKXt2YXIgYT13LmludmVydChyL3Qsbik7cmV0dXJuIGFbMF0qPWUsYX0scn1mdW5jdGlvbiBUKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSkvTWF0aC5jb3MoZS89MiksMipNYXRoLnNpbihlKV19ZnVuY3Rpb24gTSh0LGUpe3JldHVyblszKnQvKDIqcCkqTWF0aC5zcXJ0KHAqcC8zLWUqZSksZV19ZnVuY3Rpb24gQSh0LGUpe3JldHVyblt0LDEuMjUqTWF0aC5sb2coTWF0aC50YW4ocC80Ky40KmUpKV19ZnVuY3Rpb24gUyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsbj10Kk1hdGguc2luKGUpLGE9MzA7ZG97ZS09cj0oZStNYXRoLnNpbihlKS1uKS8oMStNYXRoLmNvcyhlKSl9d2hpbGUoTWF0aC5hYnMocik+aCYmLS1hPjApO3JldHVybiBlLzJ9fVQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9MiptKGUvMik7cmV0dXJuW3QqTWF0aC5jb3Moci8yKS9NYXRoLmNvcyhyKSxyXX0sKHQuZ2VvLmhhbW1lcj1mdW5jdGlvbigpe3ZhciB0PTIsZT1iKGspLHI9ZSh0KTtyZXR1cm4gci5jb2VmZmljaWVudD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHQ9K3IpOnR9LHJ9KS5yYXc9ayxNLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblsyLzMqcCp0L01hdGguc3FydChwKnAvMy1lKmUpLGVdfSwodC5nZW8ua2F2cmF5c2tpeTc9ZnVuY3Rpb24oKXtyZXR1cm4geChNKX0pLnJhdz1NLEEuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMi41Kk1hdGguYXRhbihNYXRoLmV4cCguOCplKSktLjYyNSpwXX0sKHQuZ2VvLm1pbGxlcj1mdW5jdGlvbigpe3JldHVybiB4KEEpfSkucmF3PUEsUyhwKTt2YXIgRT1mdW5jdGlvbih0LGUscil7dmFyIG49UyhyKTtmdW5jdGlvbiBhKHIsYSl7cmV0dXJuW3QqcipNYXRoLmNvcyhhPW4oYSkpLGUqTWF0aC5zaW4oYSldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihuLGEpe3ZhciBpPW0oYS9lKTtyZXR1cm5bbi8odCpNYXRoLmNvcyhpKSksbSgoMippK01hdGguc2luKDIqaSkpL3IpXX0sYX0oTWF0aC5TUVJUMi9kLE1hdGguU1FSVDIscCk7ZnVuY3Rpb24gTCh0LGUpe3ZhciByPWUqZSxuPXIqcjtyZXR1cm5bdCooLjg3MDctLjEzMTk3OSpyK24qKG4qKC4wMDM5NzEqci0uMDAxNTI5Km4pLS4wMTM3OTEpKSxlKigxLjAwNzIyNityKiguMDE1MDg1K24qKC4wMjg4NzQqci0uMDQ0NDc1LS4wMDU5MTYqbikpKV19KHQuZ2VvLm1vbGx3ZWlkZT1mdW5jdGlvbigpe3JldHVybiB4KEUpfSkucmF3PUUsTC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUsYT0yNTtkb3t2YXIgaT1uKm4sbz1pKmk7bi09cj0obiooMS4wMDcyMjYraSooLjAxNTA4NStvKiguMDI4ODc0KmktLjA0NDQ3NS0uMDA1OTE2Km8pKSktZSkvKDEuMDA3MjI2K2kqKC4wNDUyNTUrbyooLjI1OTg2NippLS4zMTEzMjUtLjAwNTkxNioxMSpvKSkpfXdoaWxlKE1hdGguYWJzKHIpPmgmJi0tYT4wKTtyZXR1cm5bdC8oLjg3MDcrKGk9bipuKSooaSooaSppKmkqKC4wMDM5NzEtLjAwMTUyOSppKS0uMDEzNzkxKS0uMTMxOTc5KSksbl19LCh0Lmdlby5uYXR1cmFsRWFydGg9ZnVuY3Rpb24oKXtyZXR1cm4geChMKX0pLnJhdz1MO3ZhciBDPVtbLjk5ODYsLS4wNjJdLFsxLDBdLFsuOTk4NiwuMDYyXSxbLjk5NTQsLjEyNF0sWy45OSwuMTg2XSxbLjk4MjIsLjI0OF0sWy45NzMsLjMxXSxbLjk2LC4zNzJdLFsuOTQyNywuNDM0XSxbLjkyMTYsLjQ5NThdLFsuODk2MiwuNTU3MV0sWy44Njc5LC42MTc2XSxbLjgzNSwuNjc2OV0sWy43OTg2LC43MzQ2XSxbLjc1OTcsLjc5MDNdLFsuNzE4NiwuODQzNV0sWy42NzMyLC44OTM2XSxbLjYyMTMsLjkzOTRdLFsuNTcyMiwuOTc2MV0sWy41MzIyLDFdXTtmdW5jdGlvbiBQKHQsZSl7dmFyIHIsbj1NYXRoLm1pbigxOCwzNipNYXRoLmFicyhlKS9wKSxhPU1hdGguZmxvb3IobiksaT1uLWEsbz0ocj1DW2FdKVswXSxzPXJbMV0sbD0ocj1DWysrYV0pWzBdLGM9clsxXSx1PShyPUNbTWF0aC5taW4oMTksKythKV0pWzBdLGg9clsxXTtyZXR1cm5bdCoobCtpKih1LW8pLzIraSppKih1LTIqbCtvKS8yKSwoZT4wP2Q6LWQpKihjK2kqKGgtcykvMitpKmkqKGgtMipjK3MpLzIpXX1mdW5jdGlvbiBPKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksZV19ZnVuY3Rpb24geih0LGUpe3ZhciByLG49TWF0aC5jb3MoZSksYT0ocj15KG4qTWF0aC5jb3ModC89MikpKT9yL01hdGguc2luKHIpOjE7cmV0dXJuWzIqbipNYXRoLnNpbih0KSphLE1hdGguc2luKGUpKmFdfWZ1bmN0aW9uIEkodCxlKXt2YXIgcj16KHQsZSk7cmV0dXJuWyhyWzBdK3QvZCkvMiwoclsxXStlKS8yXX1DLmZvckVhY2goZnVuY3Rpb24odCl7dFsxXSo9MS4wMTQ0fSksUC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lL2Qsbj05MCpyLGE9TWF0aC5taW4oMTgsTWF0aC5hYnMobi81KSksaT1NYXRoLm1heCgwLE1hdGguZmxvb3IoYSkpO2Rve3ZhciBvPUNbaV1bMV0scz1DW2krMV1bMV0sbD1DW01hdGgubWluKDE5LGkrMildWzFdLGM9bC1vLHU9bC0yKnMrbyxoPTIqKE1hdGguYWJzKHIpLXMpL2MscD11L2MsbT1oKigxLXAqaCooMS0yKnAqaCkpO2lmKG0+PTB8fDE9PT1pKXtuPShlPj0wPzU6LTUpKihtK2EpO3ZhciB5LHg9NTA7ZG97bT0oYT1NYXRoLm1pbigxOCxNYXRoLmFicyhuKS81KSktKGk9TWF0aC5mbG9vcihhKSksbz1DW2ldWzFdLHM9Q1tpKzFdWzFdLGw9Q1tNYXRoLm1pbigxOSxpKzIpXVsxXSxuLT0oeT0oZT49MD9kOi1kKSoocyttKihsLW8pLzIrbSptKihsLTIqcytvKS8yKS1lKSp2fXdoaWxlKE1hdGguYWJzKHkpPmYmJi0teD4wKTticmVha319d2hpbGUoLS1pPj0wKTt2YXIgYj1DW2ldWzBdLF89Q1tpKzFdWzBdLHc9Q1tNYXRoLm1pbigxOSxpKzIpXVswXTtyZXR1cm5bdC8oXyttKih3LWIpLzIrbSptKih3LTIqXytiKS8yKSxuKmddfSwodC5nZW8ucm9iaW5zb249ZnVuY3Rpb24oKXtyZXR1cm4geChQKX0pLnJhdz1QLE8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QvTWF0aC5jb3MoZSksZV19LCh0Lmdlby5zaW51c29pZGFsPWZ1bmN0aW9uKCl7cmV0dXJuIHgoTyl9KS5yYXc9Tyx6LmludmVydD1mdW5jdGlvbih0LGUpe2lmKCEodCp0KzQqZSplPnAqcCtoKSl7dmFyIHI9dCxuPWUsYT0yNTtkb3t2YXIgaSxvPU1hdGguc2luKHIpLHM9TWF0aC5zaW4oci8yKSxsPU1hdGguY29zKHIvMiksYz1NYXRoLnNpbihuKSx1PU1hdGguY29zKG4pLGY9TWF0aC5zaW4oMipuKSxkPWMqYyxnPXUqdSx2PXMqcyxtPTEtZypsKmwseD1tP3kodSpsKSpNYXRoLnNxcnQoaT0xL20pOmk9MCxiPTIqeCp1KnMtdCxfPXgqYy1lLHc9aSooZyp2K3gqdSpsKmQpLGs9aSooLjUqbypmLTIqeCpjKnMpLFQ9LjI1KmkqKGYqcy14KmMqZypvKSxNPWkqKGQqbCt4KnYqdSksQT1rKlQtTSp3O2lmKCFBKWJyZWFrO3ZhciBTPShfKmstYipNKS9BLEU9KGIqVC1fKncpL0E7ci09UyxuLT1FfXdoaWxlKChNYXRoLmFicyhTKT5ofHxNYXRoLmFicyhFKT5oKSYmLS1hPjApO3JldHVybltyLG5dfX0sKHQuZ2VvLmFpdG9mZj1mdW5jdGlvbigpe3JldHVybiB4KHopfSkucmF3PXosSS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ZSxhPTI1O2Rve3ZhciBpLG89TWF0aC5jb3Mobikscz1NYXRoLnNpbihuKSxsPU1hdGguc2luKDIqbiksYz1zKnMsdT1vKm8sZj1NYXRoLnNpbihyKSxwPU1hdGguY29zKHIvMiksZz1NYXRoLnNpbihyLzIpLHY9ZypnLG09MS11KnAqcCx4PW0/eShvKnApKk1hdGguc3FydChpPTEvbSk6aT0wLGI9LjUqKDIqeCpvKmcrci9kKS10LF89LjUqKHgqcytuKS1lLHc9LjUqaSoodSp2K3gqbypwKmMpKy41L2Qsaz1pKihmKmwvNC14KnMqZyksVD0uMTI1KmkqKGwqZy14KnMqdSpmKSxNPS41KmkqKGMqcCt4KnYqbykrLjUsQT1rKlQtTSp3LFM9KF8qay1iKk0pL0EsRT0oYipULV8qdykvQTtyLT1TLG4tPUV9d2hpbGUoKE1hdGguYWJzKFMpPmh8fE1hdGguYWJzKEUpPmgpJiYtLWE+MCk7cmV0dXJuW3Isbl19LCh0Lmdlby53aW5rZWwzPWZ1bmN0aW9uKCl7cmV0dXJuIHgoSSl9KS5yYXc9SX19LHt9XSw3OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPU1hdGguUEkvMTgwLHM9MTgwL01hdGguUEksbD17Y3Vyc29yOiJwb2ludGVyIn0sYz17Y3Vyc29yOiJhdXRvIn07ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBuLmJlaGF2aW9yLnpvb20oKS50cmFuc2xhdGUoZS50cmFuc2xhdGUoKSkuc2NhbGUoZS5zY2FsZSgpKX1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgbj10LmlkLG89dC5ncmFwaERpdixzPW8ubGF5b3V0LGw9c1tuXSxjPW8uX2Z1bGxMYXlvdXQsdT1jW25dLGg9e30sZj17fTtmdW5jdGlvbiBwKHQsZSl7aFtuKyIuIit0XT1hLm5lc3RlZFByb3BlcnR5KGwsdCkuZ2V0KCksaS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixzLGMuX3ByZUdVSSxoKTt2YXIgcj1hLm5lc3RlZFByb3BlcnR5KHUsdCk7ci5nZXQoKSE9PWUmJihyLnNldChlKSxhLm5lc3RlZFByb3BlcnR5KGwsdCkuc2V0KGUpLGZbbisiLiIrdF09ZSl9cihwKSxwKCJwcm9qZWN0aW9uLnNjYWxlIixlLnNjYWxlKCkvdC5maXRTY2FsZSkscCgiZml0Ym91bmRzIiwhMSksby5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGYpfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj11KDAsZSk7ZnVuY3Rpb24gYShyKXt2YXIgbj1lLmludmVydCh0Lm1pZFB0KTtyKCJjZW50ZXIubG9uIixuWzBdKSxyKCJjZW50ZXIubGF0IixuWzFdKX1yZXR1cm4gci5vbigiem9vbXN0YXJ0IixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGwpfSkub24oInpvb20iLGZ1bmN0aW9uKCl7ZS5zY2FsZShuLmV2ZW50LnNjYWxlKS50cmFuc2xhdGUobi5ldmVudC50cmFuc2xhdGUpLHQucmVuZGVyKCk7dmFyIHI9ZS5pbnZlcnQodC5taWRQdCk7dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHsiZ2VvLnByb2plY3Rpb24uc2NhbGUiOmUuc2NhbGUoKS90LmZpdFNjYWxlLCJnZW8uY2VudGVyLmxvbiI6clswXSwiZ2VvLmNlbnRlci5sYXQiOnJbMV19KX0pLm9uKCJ6b29tZW5kIixmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLGgodCxlLGEpfSkscn1mdW5jdGlvbiBwKHQsZSl7dmFyIHIsYSxpLG8scyxmLHAsZCxnLHY9dSgwLGUpLG09MjtmdW5jdGlvbiB5KHQpe3JldHVybiBlLmludmVydCh0KX1mdW5jdGlvbiB4KHIpe3ZhciBuPWUucm90YXRlKCksYT1lLmludmVydCh0Lm1pZFB0KTtyKCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiIsLW5bMF0pLHIoImNlbnRlci5sb24iLGFbMF0pLHIoImNlbnRlci5sYXQiLGFbMV0pfXJldHVybiB2Lm9uKCJ6b29tc3RhcnQiLGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCkscj1uLm1vdXNlKHRoaXMpLGE9ZS5yb3RhdGUoKSxpPWUudHJhbnNsYXRlKCksbz1hLHM9eShyKX0pLm9uKCJ6b29tIixmdW5jdGlvbigpe2lmKGY9bi5tb3VzZSh0aGlzKSxmdW5jdGlvbih0KXt2YXIgcj15KHQpO2lmKCFyKXJldHVybiEwO3ZhciBuPWUocik7cmV0dXJuIE1hdGguYWJzKG5bMF0tdFswXSk+bXx8TWF0aC5hYnMoblsxXS10WzFdKT5tfShyKSlyZXR1cm4gdi5zY2FsZShlLnNjYWxlKCkpLHZvaWQgdi50cmFuc2xhdGUoZS50cmFuc2xhdGUoKSk7ZS5zY2FsZShuLmV2ZW50LnNjYWxlKSxlLnRyYW5zbGF0ZShbaVswXSxuLmV2ZW50LnRyYW5zbGF0ZVsxXV0pLHM/eShmKSYmKGQ9eShmKSxwPVtvWzBdKyhkWzBdLXNbMF0pLGFbMV0sYVsyXV0sZS5yb3RhdGUocCksbz1wKTpzPXkocj1mKSxnPSEwLHQucmVuZGVyKCk7dmFyIGw9ZS5yb3RhdGUoKSxjPWUuaW52ZXJ0KHQubWlkUHQpO3QuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIix7Imdlby5wcm9qZWN0aW9uLnNjYWxlIjplLnNjYWxlKCkvdC5maXRTY2FsZSwiZ2VvLmNlbnRlci5sb24iOmNbMF0sImdlby5jZW50ZXIubGF0IjpjWzFdLCJnZW8ucHJvamVjdGlvbi5yb3RhdGlvbi5sb24iOi1sWzBdfSl9KS5vbigiem9vbWVuZCIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShjKSxnJiZoKHQsZSx4KX0pLHZ9ZnVuY3Rpb24gZCh0LGUpe3ZhciByLGE9e3I6ZS5yb3RhdGUoKSxrOmUuc2NhbGUoKX0saT11KDAsZSksZj1mdW5jdGlvbih0KXt2YXIgZT0wLHI9YXJndW1lbnRzLmxlbmd0aCxhPVtdO2Zvcig7KytlPHI7KWEucHVzaChhcmd1bWVudHNbZV0pO3ZhciBpPW4uZGlzcGF0Y2guYXBwbHkobnVsbCxhKTtyZXR1cm4gaS5vZj1mdW5jdGlvbihlLHIpe3JldHVybiBmdW5jdGlvbihhKXt2YXIgbzt0cnl7bz1hLnNvdXJjZUV2ZW50PW4uZXZlbnQsYS50YXJnZXQ9dCxuLmV2ZW50PWEsaVthLnR5cGVdLmFwcGx5KGUscil9ZmluYWxseXtuLmV2ZW50PW99fX0saX0oaSwiem9vbXN0YXJ0Iiwiem9vbSIsInpvb21lbmQiKSxwPTAsZD1pLm9uO2Z1bmN0aW9uIG0odCl7dmFyIHI9ZS5yb3RhdGUoKTt0KCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiIsLXJbMF0pLHQoInByb2plY3Rpb24ucm90YXRpb24ubGF0IiwtclsxXSl9cmV0dXJuIGkub24oInpvb21zdGFydCIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShsKTt2YXIgdCxjLHUsaCxtLGIsXyx3LGssVCxNLEE9bi5tb3VzZSh0aGlzKSxTPWUucm90YXRlKCksRT1TLEw9ZS50cmFuc2xhdGUoKSxDPShjPS41Kih0PVMpWzBdKm8sdT0uNSp0WzFdKm8saD0uNSp0WzJdKm8sbT1NYXRoLnNpbihjKSxiPU1hdGguY29zKGMpLF89TWF0aC5zaW4odSksdz1NYXRoLmNvcyh1KSxrPU1hdGguc2luKGgpLFQ9TWF0aC5jb3MoaCksW2IqdypUK20qXyprLG0qdypULWIqXyprLGIqXypUK20qdyprLGIqdyprLW0qXypUXSk7cj1nKGUsQSksZC5jYWxsKGksInpvb20iLGZ1bmN0aW9uKCl7dmFyIHQsaSxvLGwsYyx1LGgscCxkLG0sYj1uLm1vdXNlKHRoaXMpO2lmKGUuc2NhbGUoYS5rPW4uZXZlbnQuc2NhbGUpLHIpe2lmKGcoZSxiKSl7ZS5yb3RhdGUoUykudHJhbnNsYXRlKEwpO3ZhciBfPWcoZSxiKSx3PWZ1bmN0aW9uKHQsZSl7aWYoIXR8fCFlKXJldHVybjt2YXIgcj1mdW5jdGlvbih0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19KHQsZSksbj1NYXRoLnNxcnQoeChyLHIpKSxhPS41Kk1hdGguYWNvcyhNYXRoLm1heCgtMSxNYXRoLm1pbigxLHgodCxlKSkpKSxpPU1hdGguc2luKGEpL247cmV0dXJuIG4mJltNYXRoLmNvcyhhKSxyWzJdKmksLXJbMV0qaSxyWzBdKmldfShyLF8pLGs9ZnVuY3Rpb24odCl7cmV0dXJuW01hdGguYXRhbjIoMioodFswXSp0WzFdK3RbMl0qdFszXSksMS0yKih0WzFdKnRbMV0rdFsyXSp0WzJdKSkqcyxNYXRoLmFzaW4oTWF0aC5tYXgoLTEsTWF0aC5taW4oMSwyKih0WzBdKnRbMl0tdFszXSp0WzFdKSkpKSpzLE1hdGguYXRhbjIoMioodFswXSp0WzNdK3RbMV0qdFsyXSksMS0yKih0WzJdKnRbMl0rdFszXSp0WzNdKSkqc119KChpPXcsbz0odD1DKVswXSxsPXRbMV0sYz10WzJdLHU9dFszXSxoPWlbMF0scD1pWzFdLGQ9aVsyXSxtPWlbM10sW28qaC1sKnAtYypkLXUqbSxvKnArbCpoK2MqbS11KmQsbypkLWwqbStjKmgrdSpwLG8qbStsKmQtYypwK3UqaF0pKSxUPWEucj1mdW5jdGlvbih0LGUscil7dmFyIG49eShlLDIsdFswXSk7bj15KG4sMSx0WzFdKSxuPXkobiwwLHRbMl0tclsyXSk7dmFyIGEsaSxvPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PW5bMF0saD1uWzFdLGY9blsyXSxwPU1hdGguYXRhbjIobCxvKSpzLGQ9TWF0aC5zcXJ0KG8qbytsKmwpO01hdGguYWJzKGgpPmQ/KGk9KGg+MD85MDotOTApLXAsYT0wKTooaT1NYXRoLmFzaW4oaC9kKSpzLXAsYT1NYXRoLnNxcnQoZCpkLWgqaCkpO3ZhciBnPTE4MC1pLTIqcCxtPShNYXRoLmF0YW4yKGYsdSktTWF0aC5hdGFuMihjLGEpKSpzLHg9KE1hdGguYXRhbjIoZix1KS1NYXRoLmF0YW4yKGMsLWEpKSpzLGI9dihyWzBdLHJbMV0saSxtKSxfPXYoclswXSxyWzFdLGcseCk7cmV0dXJuIGI8PV8/W2ksbSxyWzJdXTpbZyx4LHJbMl1dfShrLHIsRSk7aXNGaW5pdGUoVFswXSkmJmlzRmluaXRlKFRbMV0pJiZpc0Zpbml0ZShUWzJdKXx8KFQ9RSksZS5yb3RhdGUoVCksRT1UfX1lbHNlIHI9ZyhlLEE9Yik7Zi5vZih0aGlzLGFyZ3VtZW50cykoe3R5cGU6Inpvb20ifSl9KSxNPWYub2YodGhpcyxhcmd1bWVudHMpLHArK3x8TSh7dHlwZToiem9vbXN0YXJ0In0pfSkub24oInpvb21lbmQiLGZ1bmN0aW9uKCl7dmFyIHI7bi5zZWxlY3QodGhpcykuc3R5bGUoYyksZC5jYWxsKGksInpvb20iLG51bGwpLHI9Zi5vZih0aGlzLGFyZ3VtZW50cyksLS1wfHxyKHt0eXBlOiJ6b29tZW5kIn0pLGgodCxlLG0pfSkub24oInpvb20ucmVkcmF3IixmdW5jdGlvbigpe3QucmVuZGVyKCk7dmFyIHI9ZS5yb3RhdGUoKTt0LmdyYXBoRGl2LmVtaXQoInBsb3RseV9yZWxheW91dGluZyIseyJnZW8ucHJvamVjdGlvbi5zY2FsZSI6ZS5zY2FsZSgpL3QuZml0U2NhbGUsImdlby5wcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6LXJbMF0sImdlby5wcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCI6LXJbMV19KX0pLG4ucmViaW5kKGksZiwib24iKX1mdW5jdGlvbiBnKHQsZSl7dmFyIHI9dC5pbnZlcnQoZSk7cmV0dXJuIHImJmlzRmluaXRlKHJbMF0pJiZpc0Zpbml0ZShyWzFdKSYmZnVuY3Rpb24odCl7dmFyIGU9dFswXSpvLHI9dFsxXSpvLG49TWF0aC5jb3Mocik7cmV0dXJuW24qTWF0aC5jb3MoZSksbipNYXRoLnNpbihlKSxNYXRoLnNpbihyKV19KHIpfWZ1bmN0aW9uIHYodCxlLHIsbil7dmFyIGE9bShyLXQpLGk9bShuLWUpO3JldHVybiBNYXRoLnNxcnQoYSphK2kqaSl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4odCUzNjArNTQwKSUzNjAtMTgwfWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBuPXIqbyxhPXQuc2xpY2UoKSxpPTA9PT1lPzE6MCxzPTI9PT1lPzE6MixsPU1hdGguY29zKG4pLGM9TWF0aC5zaW4obik7cmV0dXJuIGFbaV09dFtpXSpsLXRbc10qYyxhW3NdPXRbc10qbCt0W2ldKmMsYX1mdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByPTAsbj0wLGE9dC5sZW5ndGg7bjxhOysrbilyKz10W25dKmVbbl07cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5wcm9qZWN0aW9uO3JldHVybihlLl9pc1Njb3BlZD9mOmUuX2lzQ2xpcHBlZD9kOnApKHQscil9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LGQzOjE2NX1dLDgwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGE9dCgiLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuU1VCUExPVF9QQVRURVJOO3IuZ2V0U3VicGxvdENhbGNEYXRhPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1uLnN1YnBsb3RzUmVnaXN0cnlbZV07aWYoIWEpcmV0dXJuW107Zm9yKHZhciBpPWEuYXR0cixvPVtdLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXTtsWzBdLnRyYWNlW2ldPT09ciYmby5wdXNoKGwpfXJldHVybiBvfSxyLmdldE1vZHVsZUNhbGNEYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYT1bXSxpPVtdO2lmKCEocj0ic3RyaW5nIj09dHlwZW9mIGU/bi5nZXRNb2R1bGUoZSkucGxvdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmUucGxvdCkpcmV0dXJuW2EsdF07Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb10sbD1zWzBdLnRyYWNlOyEwPT09bC52aXNpYmxlJiYwIT09bC5fbGVuZ3RoJiYobC5fbW9kdWxlLnBsb3Q9PT1yP2EucHVzaChzKTppLnB1c2gocykpfXJldHVyblthLGldfSxyLmdldFN1YnBsb3REYXRhPWZ1bmN0aW9uKHQsZSxyKXtpZighbi5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybltdO3ZhciBpLG8scyxsPW4uc3VicGxvdHNSZWdpc3RyeVtlXS5hdHRyLGM9W107aWYoImdsMmQiPT09ZSl7dmFyIHU9ci5tYXRjaChhKTtvPSJ4Iit1WzFdLHM9InkiK3VbMl19Zm9yKHZhciBoPTA7aDx0Lmxlbmd0aDtoKyspaT10W2hdLCJnbDJkIj09PWUmJm4udHJhY2VJcyhpLCJnbDJkIik/aVtsWzBdXT09PW8mJmlbbFsxXV09PT1zJiZjLnB1c2goaSk6aVtsXT09PXImJmMucHVzaChpKTtyZXR1cm4gY319LHsiLi4vcmVnaXN0cnkiOjg0NiwiLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3NzF9XSw4MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibW91c2UtY2hhbmdlIiksYT10KCJtb3VzZS13aGVlbCIpLGk9dCgibW91c2UtZXZlbnQtb2Zmc2V0Iiksbz10KCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIikscz10KCJoYXMtcGFzc2l2ZS1ldmVudHMiKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5lbGVtZW50PXQsdGhpcy5wbG90PWUsdGhpcy5tb3VzZUxpc3RlbmVyPW51bGwsdGhpcy53aGVlbExpc3RlbmVyPW51bGwsdGhpcy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdGhpcy5sYXN0UG9zPVswLDBdLHRoaXMuYm94RW5hYmxlZD0hMSx0aGlzLmJveEluaXRlZD0hMSx0aGlzLmJveFN0YXJ0PVswLDBdLHRoaXMuYm94RW5kPVswLDBdLHRoaXMuZHJhZ1N0YXJ0PVswLDBdfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lm1vdXNlQ29udGFpbmVyLHI9dC5nbHBsb3QsYz1uZXcgbChlLHIpO2Z1bmN0aW9uIHUoKXt0LnhheGlzLmF1dG9yYW5nZT0hMSx0LnlheGlzLmF1dG9yYW5nZT0hMX1mdW5jdGlvbiBoKGUsbixhKXt2YXIgaSxzLGw9dC5jYWxjRGF0YUJveCgpLGg9ci52aWV3Qm94LGY9Yy5sYXN0UG9zWzBdLHA9Yy5sYXN0UG9zWzFdLGQ9by5NSU5EUkFHKnIucGl4ZWxSYXRpbyxnPW8uTUlOWk9PTSpyLnBpeGVsUmF0aW87ZnVuY3Rpb24gdihlLHIsbil7dmFyIGE9TWF0aC5taW4ocixuKSxpPU1hdGgubWF4KHIsbik7YSE9PWk/KGxbZV09YSxsW2UrMl09aSxjLmRhdGFCb3g9bCx0LnNldFJhbmdlcyhsKSk6KHQuc2VsZWN0Qm94LnNlbGVjdEJveD1bMCwwLDEsMV0sdC5nbHBsb3Quc2V0RGlydHkoKSl9c3dpdGNoKG4qPXIucGl4ZWxSYXRpbyxhKj1yLnBpeGVsUmF0aW8sYT1oWzNdLWhbMV0tYSx0LmZ1bGxMYXlvdXQuZHJhZ21vZGUpe2Nhc2Uiem9vbSI6aWYoZSl7dmFyIG09bi8oaFsyXS1oWzBdKSoobFsyXS1sWzBdKStsWzBdLHk9YS8oaFszXS1oWzFdKSoobFszXS1sWzFdKStsWzFdO2MuYm94SW5pdGVkfHwoYy5ib3hTdGFydFswXT1tLGMuYm94U3RhcnRbMV09eSxjLmRyYWdTdGFydFswXT1uLGMuZHJhZ1N0YXJ0WzFdPWEpLGMuYm94RW5kWzBdPW0sYy5ib3hFbmRbMV09eSxjLmJveEluaXRlZD0hMCxjLmJveEVuYWJsZWR8fGMuYm94U3RhcnRbMF09PT1jLmJveEVuZFswXSYmYy5ib3hTdGFydFsxXT09PWMuYm94RW5kWzFdfHwoYy5ib3hFbmFibGVkPSEwKTt2YXIgeD1NYXRoLmFicyhjLmRyYWdTdGFydFswXS1uKTxnLGI9TWF0aC5hYnMoYy5kcmFnU3RhcnRbMV0tYSk8ZztpZighZnVuY3Rpb24oKXtmb3IodmFyIGU9dC5ncmFwaERpdi5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMscj10LnhheGlzLl9pZCxuPXQueWF4aXMuX2lkLGE9MDthPGUubGVuZ3RoO2ErKylpZigtMSE9PWVbYV1bcl0pe2lmKC0xIT09ZVthXVtuXSlyZXR1cm4hMDticmVha31yZXR1cm4hMX0oKXx8eCYmYil4JiYoYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSksYiYmKGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0pO2Vsc2V7aT1jLmJveEVuZFswXS1jLmJveFN0YXJ0WzBdLHM9Yy5ib3hFbmRbMV0tYy5ib3hTdGFydFsxXTt2YXIgXz0obFszXS1sWzFdKS8obFsyXS1sWzBdKTtNYXRoLmFicyhpKl8pPk1hdGguYWJzKHMpPyhjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdK01hdGguYWJzKGkpKl8qKHM+PTA/MTotMSksYy5ib3hFbmRbMV08bFsxXT8oYy5ib3hFbmRbMV09bFsxXSxjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKyhsWzFdLWMuYm94U3RhcnRbMV0pL01hdGguYWJzKF8pKTpjLmJveEVuZFsxXT5sWzNdJiYoYy5ib3hFbmRbMV09bFszXSxjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdKyhsWzNdLWMuYm94U3RhcnRbMV0pL01hdGguYWJzKF8pKSk6KGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0rTWF0aC5hYnMocykvXyooaT49MD8xOi0xKSxjLmJveEVuZFswXTxsWzBdPyhjLmJveEVuZFswXT1sWzBdLGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rKGxbMF0tYy5ib3hTdGFydFswXSkqTWF0aC5hYnMoXykpOmMuYm94RW5kWzBdPmxbMl0mJihjLmJveEVuZFswXT1sWzJdLGMuYm94RW5kWzFdPWMuYm94U3RhcnRbMV0rKGxbMl0tYy5ib3hTdGFydFswXSkqTWF0aC5hYnMoXykpKX19ZWxzZSBjLmJveEVuYWJsZWQ/KGk9Yy5ib3hTdGFydFswXSE9PWMuYm94RW5kWzBdLHM9Yy5ib3hTdGFydFsxXSE9PWMuYm94RW5kWzFdLGl8fHM/KGkmJih2KDAsYy5ib3hTdGFydFswXSxjLmJveEVuZFswXSksdC54YXhpcy5hdXRvcmFuZ2U9ITEpLHMmJih2KDEsYy5ib3hTdGFydFsxXSxjLmJveEVuZFsxXSksdC55YXhpcy5hdXRvcmFuZ2U9ITEpLHQucmVsYXlvdXRDYWxsYmFjaygpKTp0LmdscGxvdC5zZXREaXJ0eSgpLGMuYm94RW5hYmxlZD0hMSxjLmJveEluaXRlZD0hMSk6Yy5ib3hJbml0ZWQmJihjLmJveEluaXRlZD0hMSk7YnJlYWs7Y2FzZSJwYW4iOmMuYm94RW5hYmxlZD0hMSxjLmJveEluaXRlZD0hMSxlPyhjLnBhbm5pbmd8fChjLmRyYWdTdGFydFswXT1uLGMuZHJhZ1N0YXJ0WzFdPWEpLE1hdGguYWJzKGMuZHJhZ1N0YXJ0WzBdLW4pPGQmJihuPWMuZHJhZ1N0YXJ0WzBdKSxNYXRoLmFicyhjLmRyYWdTdGFydFsxXS1hKTxkJiYoYT1jLmRyYWdTdGFydFsxXSksaT0oZi1uKSoobFsyXS1sWzBdKS8oci52aWV3Qm94WzJdLXIudmlld0JveFswXSkscz0ocC1hKSoobFszXS1sWzFdKS8oci52aWV3Qm94WzNdLXIudmlld0JveFsxXSksbFswXSs9aSxsWzJdKz1pLGxbMV0rPXMsbFszXSs9cyx0LnNldFJhbmdlcyhsKSxjLnBhbm5pbmc9ITAsYy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdSgpLHQuY2FtZXJhQ2hhbmdlZCgpLHQuaGFuZGxlQW5ub3RhdGlvbnMoKSk6Yy5wYW5uaW5nJiYoYy5wYW5uaW5nPSExLHQucmVsYXlvdXRDYWxsYmFjaygpKX1jLmxhc3RQb3NbMF09bixjLmxhc3RQb3NbMV09YX1yZXR1cm4gYy5tb3VzZUxpc3RlbmVyPW4oZSxoKSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLGZ1bmN0aW9uKHQpe3ZhciByPWkodC5jaGFuZ2VkVG91Y2hlc1swXSxlKTtoKDAsclswXSxyWzFdKSxoKDEsclswXSxyWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9LCEhcyYme3Bhc3NpdmU6ITF9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciByPWkodC5jaGFuZ2VkVG91Y2hlc1swXSxlKTtoKDEsclswXSxyWzFdKSx0LnByZXZlbnREZWZhdWx0KCl9LCEhcyYme3Bhc3NpdmU6ITF9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixmdW5jdGlvbih0KXtoKDAsYy5sYXN0UG9zWzBdLGMubGFzdFBvc1sxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSwhIXMmJntwYXNzaXZlOiExfSksYy53aGVlbExpc3RlbmVyPWEoZSxmdW5jdGlvbihlLG4pe2lmKCF0LnNjcm9sbFpvb20pcmV0dXJuITE7dmFyIGE9dC5jYWxjRGF0YUJveCgpLGk9ci52aWV3Qm94LG89Yy5sYXN0UG9zWzBdLHM9Yy5sYXN0UG9zWzFdLGw9TWF0aC5leHAoNSpuLyhpWzNdLWlbMV0pKSxoPW8vKGlbMl0taVswXSkqKGFbMl0tYVswXSkrYVswXSxmPXMvKGlbM10taVsxXSkqKGFbM10tYVsxXSkrYVsxXTtyZXR1cm4gYVswXT0oYVswXS1oKSpsK2gsYVsyXT0oYVsyXS1oKSpsK2gsYVsxXT0oYVsxXS1mKSpsK2YsYVszXT0oYVszXS1mKSpsK2YsdC5zZXRSYW5nZXMoYSksYy5sYXN0SW5wdXRUaW1lPURhdGUubm93KCksdSgpLHQuY2FtZXJhQ2hhbmdlZCgpLHQuaGFuZGxlQW5ub3RhdGlvbnMoKSx0LnJlbGF5b3V0Q2FsbGJhY2soKSwhMH0sITApLGN9fSx7Ii4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjc3MSwiaGFzLXBhc3NpdmUtZXZlbnRzIjo0MTMsIm1vdXNlLWNoYW5nZSI6NDM3LCJtb3VzZS1ldmVudC1vZmZzZXQiOjQzOCwibW91c2Utd2hlZWwiOjQ0MH1dLDgwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpO2Z1bmN0aW9uIGkodCl7dGhpcy5zY2VuZT10LHRoaXMuZ2w9dC5nbCx0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvLHRoaXMuc2NyZWVuQm94PVswLDAsMSwxXSx0aGlzLnZpZXdCb3g9WzAsMCwxLDFdLHRoaXMuZGF0YUJveD1bLTEsLTEsMSwxXSx0aGlzLmJvcmRlckxpbmVFbmFibGU9WyExLCExLCExLCExXSx0aGlzLmJvcmRlckxpbmVXaWR0aD1bMSwxLDEsMV0sdGhpcy5ib3JkZXJMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrcz1bW10sW11dLHRoaXMudGlja0VuYWJsZT1bITAsITAsITEsITFdLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tNYXJrTGVuZ3RoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrV2lkdGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVscz1bIngiLCJ5Il0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITEsITFdLHRoaXMubGFiZWxBbmdsZT1bMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0sdGhpcy5sYWJlbFBhZD1bMTUsMTUsMTUsMTVdLHRoaXMubGFiZWxTaXplPVsxMiwxMl0sdGhpcy5sYWJlbEZvbnQ9WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpdGxlPSIiLHRoaXMudGl0bGVFbmFibGU9ITAsdGhpcy50aXRsZUNlbnRlcj1bMCwwLDAsMF0sdGhpcy50aXRsZUFuZ2xlPTAsdGhpcy50aXRsZUNvbG9yPVswLDAsMCwxXSx0aGlzLnRpdGxlRm9udD0ic2Fucy1zZXJpZiIsdGhpcy50aXRsZVNpemU9MTgsdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVDb2xvcj1bWzAsMCwwLC41XSxbMCwwLDAsLjVdXSx0aGlzLmdyaWRMaW5lV2lkdGg9WzEsMV0sdGhpcy56ZXJvTGluZUVuYWJsZT1bITAsITBdLHRoaXMuemVyb0xpbmVXaWR0aD1bMSwxXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnN0YXRpYz10aGlzLnNjZW5lLnN0YXRpY1Bsb3R9dmFyIG89aS5wcm90b3R5cGUscz1bInhheGlzIiwieWF4aXMiXTtvLm1lcmdlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLG8sbCxjLHUsaCxmLHA7Zm9yKHRoaXMudGl0bGVFbmFibGU9ITEsdGhpcy5iYWNrZ3JvdW5kQ29sb3I9YSh0LnBsb3RfYmdjb2xvciksZj0wO2Y8MjsrK2Ype3ZhciBkPShlPXNbZl0pLmNoYXJBdCgwKTtmb3Iobj0ocj10W3RoaXMuc2NlbmVbZV0uX25hbWVdKS50aXRsZS50ZXh0PT09dGhpcy5zY2VuZS5mdWxsTGF5b3V0Ll9kZmx0VGl0bGVbZF0/IiI6ci50aXRsZS50ZXh0LHA9MDtwPD0yO3ArPTIpdGhpcy5sYWJlbEVuYWJsZVtmK3BdPSExLHRoaXMubGFiZWxzW2YrcF09bix0aGlzLmxhYmVsQ29sb3JbZitwXT1hKHIudGl0bGUuZm9udC5jb2xvciksdGhpcy5sYWJlbEZvbnRbZitwXT1yLnRpdGxlLmZvbnQuZmFtaWx5LHRoaXMubGFiZWxTaXplW2YrcF09ci50aXRsZS5mb250LnNpemUsdGhpcy5sYWJlbFBhZFtmK3BdPXRoaXMuZ2V0TGFiZWxQYWQoZSxyKSx0aGlzLnRpY2tFbmFibGVbZitwXT0hMSx0aGlzLnRpY2tDb2xvcltmK3BdPWEoKHIudGlja2ZvbnR8fHt9KS5jb2xvciksdGhpcy50aWNrQW5nbGVbZitwXT0iYXV0byI9PT1yLnRpY2thbmdsZT8wOk1hdGguUEkqLXIudGlja2FuZ2xlLzE4MCx0aGlzLnRpY2tQYWRbZitwXT10aGlzLmdldFRpY2tQYWQociksdGhpcy50aWNrTWFya0xlbmd0aFtmK3BdPTAsdGhpcy50aWNrTWFya1dpZHRoW2YrcF09ci50aWNrd2lkdGh8fDAsdGhpcy50aWNrTWFya0NvbG9yW2YrcF09YShyLnRpY2tjb2xvciksdGhpcy5ib3JkZXJMaW5lRW5hYmxlW2YrcF09ITEsdGhpcy5ib3JkZXJMaW5lQ29sb3JbZitwXT1hKHIubGluZWNvbG9yKSx0aGlzLmJvcmRlckxpbmVXaWR0aFtmK3BdPXIubGluZXdpZHRofHwwO2M9dGhpcy5oYXNTaGFyZWRBeGlzKHIpLG89dGhpcy5oYXNBeGlzSW5EZmx0UG9zKGUscikmJiFjLGw9dGhpcy5oYXNBeGlzSW5BbHRyUG9zKGUscikmJiFjLGk9ci5taXJyb3J8fCExLHU9Yz8tMSE9PVN0cmluZyhpKS5pbmRleE9mKCJhbGwiKTohIWksaD1jPyJhbGx0aWNrcyI9PT1pOi0xIT09U3RyaW5nKGkpLmluZGV4T2YoInRpY2tzIiksbz90aGlzLmxhYmVsRW5hYmxlW2ZdPSEwOmwmJih0aGlzLmxhYmVsRW5hYmxlW2YrMl09ITApLG8/dGhpcy50aWNrRW5hYmxlW2ZdPXIuc2hvd3RpY2tsYWJlbHM6bCYmKHRoaXMudGlja0VuYWJsZVtmKzJdPXIuc2hvd3RpY2tsYWJlbHMpLChvfHx1KSYmKHRoaXMuYm9yZGVyTGluZUVuYWJsZVtmXT1yLnNob3dsaW5lKSwobHx8dSkmJih0aGlzLmJvcmRlckxpbmVFbmFibGVbZisyXT1yLnNob3dsaW5lKSwob3x8aCkmJih0aGlzLnRpY2tNYXJrTGVuZ3RoW2ZdPXRoaXMuZ2V0VGlja01hcmtMZW5ndGgocikpLChsfHxoKSYmKHRoaXMudGlja01hcmtMZW5ndGhbZisyXT10aGlzLmdldFRpY2tNYXJrTGVuZ3RoKHIpKSx0aGlzLmdyaWRMaW5lRW5hYmxlW2ZdPXIuc2hvd2dyaWQsdGhpcy5ncmlkTGluZUNvbG9yW2ZdPWEoci5ncmlkY29sb3IpLHRoaXMuZ3JpZExpbmVXaWR0aFtmXT1yLmdyaWR3aWR0aCx0aGlzLnplcm9MaW5lRW5hYmxlW2ZdPXIuemVyb2xpbmUsdGhpcy56ZXJvTGluZUNvbG9yW2ZdPWEoci56ZXJvbGluZWNvbG9yKSx0aGlzLnplcm9MaW5lV2lkdGhbZl09ci56ZXJvbGluZXdpZHRofX0sby5oYXNTaGFyZWRBeGlzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxMYXlvdXQuX3N1YnBsb3RzLmdsMmQ7cmV0dXJuIDAhPT1uLmZpbmRTdWJwbG90c1dpdGhBeGlzKHIsdCkuaW5kZXhPZihlLmlkKX0sby5oYXNBeGlzSW5EZmx0UG9zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zaWRlO3JldHVybiJ4YXhpcyI9PT10PyJib3R0b20iPT09cjoieWF4aXMiPT09dD8ibGVmdCI9PT1yOnZvaWQgMH0sby5oYXNBeGlzSW5BbHRyUG9zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zaWRlO3JldHVybiJ4YXhpcyI9PT10PyJ0b3AiPT09cjoieWF4aXMiPT09dD8icmlnaHQiPT09cjp2b2lkIDB9LG8uZ2V0TGFiZWxQYWQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRpdGxlLmZvbnQuc2l6ZSxuPWUuc2hvd3RpY2tsYWJlbHM7cmV0dXJuInhheGlzIj09PXQ/InRvcCI9PT1lLnNpZGU/ciooMS41KyhuPzE6MCkpLTEwOnIqKDEuNSsobj8uNTowKSktMTA6InlheGlzIj09PXQ/InJpZ2h0Ij09PWUuc2lkZT8xMCtyKigxLjUrKG4/MTouNSkpOjEwK3IqKDEuNSsobj8uNTowKSk6dm9pZCAwfSxvLmdldFRpY2tQYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIm91dHNpZGUiPT09dC50aWNrcz8xMCt0LnRpY2tsZW46MTV9LG8uZ2V0VGlja01hcmtMZW5ndGg9ZnVuY3Rpb24odCl7aWYoIXQudGlja3MpcmV0dXJuIDA7dmFyIGU9dC50aWNrbGVuO3JldHVybiJpbnNpZGUiPT09dC50aWNrcz8tZTplfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpKHQpfX0seyIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDAsIi4uL2NhcnRlc2lhbi9heGVzIjo3NjV9XSw4MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGE9dCgiLi9zY2VuZTJkIiksaT10KCIuLi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxzPXQoIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiKSxsPXQoIi4uL2NhcnRlc2lhbiIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyIpLHU9dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YTtyLm5hbWU9ImdsMmQiLHIuYXR0cj1bInhheGlzIiwieWF4aXMiXSxyLmlkUm9vdD1bIngiLCJ5Il0sci5pZFJlZ2V4PXMuaWRSZWdleCxyLmF0dHJSZWdleD1zLmF0dHJSZWdleCxyLmF0dHJpYnV0ZXM9dCgiLi4vY2FydGVzaWFuL2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXtlLl9oYXMoImNhcnRlc2lhbiIpfHxsLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKX0sci5sYXlvdXRBdHRyT3ZlcnJpZGVzPW4obC5sYXlvdXRBdHRyaWJ1dGVzLCJwbG90IiwiZnJvbS1yb290Iiksci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtwbG90X2JnY29sb3I6aS5wbG90X2JnY29sb3IsaG92ZXJsYWJlbDpjLmhvdmVybGFiZWx9LCJwbG90IiwibmVzdGVkIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbj1lLl9zdWJwbG90cy5nbDJkLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXSxzPWUuX3Bsb3RzW29dLGw9dShyLCJnbDJkIixvKSxjPXMuX3NjZW5lMmQ7dm9pZCAwPT09YyYmKGM9bmV3IGEoe2lkOm8sZ3JhcGhEaXY6dCxjb250YWluZXI6dC5xdWVyeVNlbGVjdG9yKCIuZ2wtY29udGFpbmVyIiksc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW99LGUpLHMuX3NjZW5lMmQ9YyksYy5wbG90KGwsdC5jYWxjZGF0YSxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhPW4uX3N1YnBsb3RzLmdsMmR8fFtdLGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIG89YVtpXSxzPW4uX3Bsb3RzW29dO2lmKHMuX3NjZW5lMmQpMD09PXUodCwiZ2wyZCIsbykubGVuZ3RoJiYocy5fc2NlbmUyZC5kZXN0cm95KCksZGVsZXRlIG4uX3Bsb3RzW29dKX1sLmNsZWFuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sci5kcmF3RnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3QuX2NvbnRleHQuc3RhdGljUGxvdHx8bC5kcmF3RnJhbWV3b3JrKHQpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wyZCxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBhPWUuX3Bsb3RzW3Jbbl1dLl9zY2VuZTJkLGk9YS50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOm8uc3ZnLCJ4bGluazpocmVmIjppLHg6MCx5OjAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSxhLmRlc3Ryb3koKX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDJkLG49MDtuPHIubGVuZ3RoO24rKyl7ZS5fcGxvdHNbcltuXV0uX3NjZW5lMmQudXBkYXRlRngoZS5kcmFnbW9kZSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIjo2MzEsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2OTQsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc0OCwiLi4vY2FydGVzaWFuIjo3NzYsIi4uL2NhcnRlc2lhbi9hdHRyaWJ1dGVzIjo3NjMsIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjc3MSwiLi4vZ2V0X2RhdGEiOjgwMCwiLi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgxNywiLi9zY2VuZTJkIjo4MDR9XSw4MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4sYSxpPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGw9dCgiZ2wtcGxvdDJkIiksYz10KCJnbC1zcGlrZXMyZCIpLHU9dCgiZ2wtc2VsZWN0LWJveCIpLGg9dCgid2ViZ2wtY29udGV4dCIpLGY9dCgiLi9jb252ZXJ0IikscD10KCIuL2NhbWVyYSIpLGQ9dCgiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnIiksZz10KCIuLi9jYXJ0ZXNpYW4vY29uc3RyYWludHMiKSx2PWcuZW5mb3JjZSxtPWcuY2xlYW4seT10KCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZG9BdXRvUmFuZ2UseD1bInhheGlzIiwieWF4aXMiXSxiPXQoIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiKS5TVUJQTE9UX1BBVFRFUk47ZnVuY3Rpb24gXyh0LGUpe3RoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLnBpeGVsUmF0aW89dC5wbG90R2xQaXhlbFJhdGlvfHx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmlkPXQuaWQsdGhpcy5zdGF0aWNQbG90PSEhdC5zdGF0aWNQbG90LHRoaXMuc2Nyb2xsWm9vbT10aGlzLmdyYXBoRGl2Ll9jb250ZXh0Ll9zY3JvbGxab29tLmNhcnRlc2lhbix0aGlzLmZ1bGxEYXRhPW51bGwsdGhpcy51cGRhdGVSZWZzKGUpLHRoaXMubWFrZUZyYW1ld29yaygpLHRoaXMuc3RvcHBlZHx8KHRoaXMuZ2xwbG90T3B0aW9ucz1mKHRoaXMpLHRoaXMuZ2xwbG90T3B0aW9ucy5tZXJnZShlKSx0aGlzLmdscGxvdD1sKHRoaXMuZ2xwbG90T3B0aW9ucyksdGhpcy5jYW1lcmE9cCh0aGlzKSx0aGlzLnRyYWNlcz17fSx0aGlzLnNwaWtlcz1jKHRoaXMuZ2xwbG90KSx0aGlzLnNlbGVjdEJveD11KHRoaXMuZ2xwbG90LHtpbm5lckZpbGw6ITEsb3V0ZXJGaWxsOiEwfSksdGhpcy5sYXN0QnV0dG9uU3RhdGU9MCx0aGlzLnBpY2tSZXN1bHQ9bnVsbCx0aGlzLmlzTW91c2VPdmVyPSEwLHRoaXMuc3RvcHBlZD0hMSx0aGlzLnJlZHJhdz10aGlzLmRyYXcuYmluZCh0aGlzKSx0aGlzLnJlZHJhdygpKX1lLmV4cG9ydHM9Xzt2YXIgdz1fLnByb3RvdHlwZTt3Lm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24oKXtpZih0aGlzLnN0YXRpY1Bsb3Qpe2lmKCEoYXx8KG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksYT1oKHtjYW52YXM6bixwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSkpdGhyb3cgbmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBzdGF0aWMgY2FudmFzL2NvbnRleHQgZm9yIGltYWdlIHNlcnZlciIpO3RoaXMuY2FudmFzPW4sdGhpcy5nbD1hfWVsc2V7dmFyIHQ9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcigiLmdsLWNhbnZhcy1mb2N1cyIpLGU9aCh7Y2FudmFzOnQscHJlc2VydmVEcmF3aW5nQnVmZmVyOiEwLHByZW11bHRpcGxpZWRBbHBoYTohMH0pO2lmKCFlKXJldHVybiBkKHRoaXMpLHZvaWQodGhpcy5zdG9wcGVkPSEwKTt0aGlzLmNhbnZhcz10LHRoaXMuZ2w9ZX12YXIgcj10aGlzLmNhbnZhcztyLnN0eWxlLndpZHRoPSIxMDAlIixyLnN0eWxlLmhlaWdodD0iMTAwJSIsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUudG9wPSIwcHgiLHIuc3R5bGUubGVmdD0iMHB4IixyLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIix0aGlzLnVwZGF0ZVNpemUociksci5jbGFzc05hbWUrPSIgdXNlci1zZWxlY3Qtbm9uZSI7dmFyIGk9dGhpcy5zdmdDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO2kuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLnN0eWxlLnRvcD1pLnN0eWxlLmxlZnQ9IjBweCIsaS5zdHlsZS53aWR0aD1pLnN0eWxlLmhlaWdodD0iMTAwJSIsaS5zdHlsZVsiei1pbmRleCJdPTIwLGkuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiO3ZhciBvPXRoaXMubW91c2VDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7by5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLG8uc3R5bGVbInBvaW50ZXItZXZlbnRzIl09ImF1dG8iLHRoaXMucGlja0NhbnZhcz10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuZ2wtY2FudmFzLXBpY2siKTt2YXIgcz10aGlzLmNvbnRhaW5lcjtzLmFwcGVuZENoaWxkKGkpLHMuYXBwZW5kQ2hpbGQobyk7dmFyIGw9dGhpcztvLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixmdW5jdGlvbigpe2wuaXNNb3VzZU92ZXI9ITEsbC51bmhvdmVyKCl9KSxvLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtsLmlzTW91c2VPdmVyPSEwfSl9LHcudG9JbWFnZT1mdW5jdGlvbih0KXt0fHwodD0icG5nIiksdGhpcy5zdG9wcGVkPSEwLHRoaXMuc3RhdGljUGxvdCYmdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQobiksdGhpcy51cGRhdGVTaXplKHRoaXMuY2FudmFzKTt2YXIgZT10aGlzLmdscGxvdC5nbCxyPWUuZHJhd2luZ0J1ZmZlcldpZHRoLGE9ZS5kcmF3aW5nQnVmZmVySGVpZ2h0O2UuY2xlYXJDb2xvcigxLDEsMSwwKSxlLmNsZWFyKGUuQ09MT1JfQlVGRkVSX0JJVHxlLkRFUFRIX0JVRkZFUl9CSVQpLHRoaXMuZ2xwbG90LnNldERpcnR5KCksdGhpcy5nbHBsb3QuZHJhdygpLGUuYmluZEZyYW1lYnVmZmVyKGUuRlJBTUVCVUZGRVIsbnVsbCk7dmFyIGk9bmV3IFVpbnQ4QXJyYXkociphKjQpO2UucmVhZFBpeGVscygwLDAscixhLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsaSk7Zm9yKHZhciBvPTAscz1hLTE7bzxzOysrbywtLXMpZm9yKHZhciBsPTA7bDxyOysrbClmb3IodmFyIGM9MDtjPDQ7KytjKXt2YXIgdT1pWzQqKHIqbytsKStjXTtpWzQqKHIqbytsKStjXT1pWzQqKHIqcytsKStjXSxpWzQqKHIqcytsKStjXT11fXZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2gud2lkdGg9cixoLmhlaWdodD1hO3ZhciBmLHA9aC5nZXRDb250ZXh0KCIyZCIpLGQ9cC5jcmVhdGVJbWFnZURhdGEocixhKTtzd2l0Y2goZC5kYXRhLnNldChpKSxwLnB1dEltYWdlRGF0YShkLDAsMCksdCl7Y2FzZSJqcGVnIjpmPWgudG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJ3ZWJwIjpmPWgudG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7ZGVmYXVsdDpmPWgudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1yZXR1cm4gdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChuKSxmfSx3LnVwZGF0ZVNpemU9ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5jYW52YXMpO3ZhciBlPXRoaXMucGl4ZWxSYXRpbyxyPXRoaXMuZnVsbExheW91dCxuPXIud2lkdGgsYT1yLmhlaWdodCxpPTB8TWF0aC5jZWlsKGUqbiksbz0wfE1hdGguY2VpbChlKmEpO3JldHVybiB0LndpZHRoPT09aSYmdC5oZWlnaHQ9PT1vfHwodC53aWR0aD1pLHQuaGVpZ2h0PW8pLHR9LHcuY29tcHV0ZVRpY2tNYXJrcz1mdW5jdGlvbigpe3RoaXMueGF4aXMuc2V0U2NhbGUoKSx0aGlzLnlheGlzLnNldFNjYWxlKCk7Zm9yKHZhciB0PVtvLmNhbGNUaWNrcyh0aGlzLnhheGlzKSxvLmNhbGNUaWNrcyh0aGlzLnlheGlzKV0sZT0wO2U8MjsrK2UpZm9yKHZhciByPTA7cjx0W2VdLmxlbmd0aDsrK3IpdFtlXVtyXS50ZXh0PXRbZV1bcl0udGV4dCsiIjtyZXR1cm4gdH0sdy51cGRhdGVSZWZzPWZ1bmN0aW9uKHQpe3RoaXMuZnVsbExheW91dD10O3ZhciBlPXRoaXMuaWQubWF0Y2goYikscj0ieGF4aXMiK2VbMV0sbj0ieWF4aXMiK2VbMl07dGhpcy54YXhpcz10aGlzLmZ1bGxMYXlvdXRbcl0sdGhpcy55YXhpcz10aGlzLmZ1bGxMYXlvdXRbbl19LHcucmVsYXlvdXRDYWxsYmFjaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ3JhcGhEaXYsZT10aGlzLnhheGlzLHI9dGhpcy55YXhpcyxuPXQubGF5b3V0LGE9e30sbz1hW2UuX25hbWUrIi5yYW5nZSJdPWUucmFuZ2Uuc2xpY2UoKSxzPWFbci5fbmFtZSsiLnJhbmdlIl09ci5yYW5nZS5zbGljZSgpO2FbZS5fbmFtZSsiLmF1dG9yYW5nZSJdPWUuYXV0b3JhbmdlLGFbci5fbmFtZSsiLmF1dG9yYW5nZSJdPXIuYXV0b3JhbmdlLGkuY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIsdC5sYXlvdXQsdC5fZnVsbExheW91dC5fcHJlR1VJLGEpO3ZhciBsPW5bZS5fbmFtZV07bC5yYW5nZT1vLGwuYXV0b3JhbmdlPWUuYXV0b3JhbmdlO3ZhciBjPW5bci5fbmFtZV07Yy5yYW5nZT1zLGMuYXV0b3JhbmdlPXIuYXV0b3JhbmdlLGEubGFzdElucHV0VGltZT10aGlzLmNhbWVyYS5sYXN0SW5wdXRUaW1lLHQuZW1pdCgicGxvdGx5X3JlbGF5b3V0IixhKX0sdy5jYW1lcmFDaGFuZ2VkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jYW1lcmE7dGhpcy5nbHBsb3Quc2V0RGF0YUJveCh0aGlzLmNhbGNEYXRhQm94KCkpO3ZhciBlPXRoaXMuY29tcHV0ZVRpY2tNYXJrcygpOyhmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8MjsrK3Ipe3ZhciBuPXRbcl0sYT1lW3JdO2lmKG4ubGVuZ3RoIT09YS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDsrK2kpaWYobltpXS54IT09YVtpXS54KXJldHVybiEwfXJldHVybiExfSkoZSx0aGlzLmdscGxvdE9wdGlvbnMudGlja3MpJiYodGhpcy5nbHBsb3RPcHRpb25zLnRpY2tzPWUsdGhpcy5nbHBsb3RPcHRpb25zLmRhdGFCb3g9dC5kYXRhQm94LHRoaXMuZ2xwbG90LnVwZGF0ZSh0aGlzLmdscGxvdE9wdGlvbnMpLHRoaXMuaGFuZGxlQW5ub3RhdGlvbnMoKSl9LHcuaGFuZGxlQW5ub3RhdGlvbnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5ncmFwaERpdixlPXRoaXMuZnVsbExheW91dC5hbm5vdGF0aW9ucyxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi54cmVmPT09dGhpcy54YXhpcy5faWQmJm4ueXJlZj09PXRoaXMueWF4aXMuX2lkJiZpLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJkcmF3T25lIikodCxyKX19LHcuZGVzdHJveT1mdW5jdGlvbigpe2lmKHRoaXMuZ2xwbG90KXt2YXIgdD10aGlzLnRyYWNlczt0JiZPYmplY3Qua2V5cyh0KS5tYXAoZnVuY3Rpb24oZSl7dFtlXS5kaXNwb3NlKCksZGVsZXRlIHRbZV19KSx0aGlzLmdscGxvdC5kaXNwb3NlKCksdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5zdmdDb250YWluZXIpLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMubW91c2VDb250YWluZXIpLHRoaXMuZnVsbERhdGE9bnVsbCx0aGlzLmdscGxvdD1udWxsLHRoaXMuc3RvcHBlZD0hMCx0aGlzLmNhbWVyYS5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsdGhpcy5tb3VzZUNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsdGhpcy5jYW1lcmEud2hlZWxMaXN0ZW5lciksdGhpcy5jYW1lcmE9bnVsbH19LHcucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nbHBsb3Q7dGhpcy51cGRhdGVSZWZzKHIpLHRoaXMueGF4aXMuY2xlYXJDYWxjKCksdGhpcy55YXhpcy5jbGVhckNhbGMoKSx0aGlzLnVwZGF0ZVRyYWNlcyh0LGUpLHRoaXMudXBkYXRlRngoci5kcmFnbW9kZSk7dmFyIGE9ci53aWR0aCxpPXIuaGVpZ2h0O3RoaXMudXBkYXRlU2l6ZSh0aGlzLmNhbnZhcyk7dmFyIG89dGhpcy5nbHBsb3RPcHRpb25zO28ubWVyZ2Uociksby5zY3JlZW5Cb3g9WzAsMCxhLGldO3ZhciBzPXtfZnVsbExheW91dDp7X2F4aXNDb25zdHJhaW50R3JvdXBzOnRoaXMuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLHhheGlzOnRoaXMueGF4aXMseWF4aXM6dGhpcy55YXhpc319O20ocyx0aGlzLnhheGlzKSxtKHMsdGhpcy55YXhpcyk7dmFyIGwsYyx1PXIuX3NpemUsaD10aGlzLnhheGlzLmRvbWFpbixmPXRoaXMueWF4aXMuZG9tYWluO2ZvcihvLnZpZXdCb3g9W3UubCtoWzBdKnUudyx1LmIrZlswXSp1LmgsYS11LnItKDEtaFsxXSkqdS53LGktdS50LSgxLWZbMV0pKnUuaF0sdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS53aWR0aD11LncqKGhbMV0taFswXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmhlaWdodD11LmgqKGZbMV0tZlswXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLmhlaWdodD11LmgqKGZbMV0tZlswXSksdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5sZWZ0PXUubCtoWzBdKnUudysicHgiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUudG9wPXUudCsoMS1mWzFdKSp1LmgrInB4IixjPTA7YzwyOysrYykobD10aGlzW3hbY11dKS5fbGVuZ3RoPW8udmlld0JveFtjKzJdLW8udmlld0JveFtjXSx5KHRoaXMuZ3JhcGhEaXYsbCksbC5zZXRTY2FsZSgpO3Yocyksby50aWNrcz10aGlzLmNvbXB1dGVUaWNrTWFya3MoKSxvLmRhdGFCb3g9dGhpcy5jYWxjRGF0YUJveCgpLG8ubWVyZ2Uociksbi51cGRhdGUobyksdGhpcy5nbHBsb3QuZHJhdygpfSx3LmNhbGNEYXRhQm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54YXhpcyxlPXRoaXMueWF4aXMscj10LnJhbmdlLG49ZS5yYW5nZSxhPXQucjJsLGk9ZS5yMmw7cmV0dXJuW2EoclswXSksaShuWzBdKSxhKHJbMV0pLGkoblsxXSldfSx3LnNldFJhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnhheGlzLHI9dGhpcy55YXhpcyxuPWUubDJyLGE9ci5sMnI7ZS5yYW5nZT1bbih0WzBdKSxuKHRbMl0pXSxyLnJhbmdlPVthKHRbMV0pLGEodFszXSldfSx3LnVwZGF0ZVRyYWNlcz1mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxpPU9iamVjdC5rZXlzKHRoaXMudHJhY2VzKTt0aGlzLmZ1bGxEYXRhPXQ7dDpmb3Iocj0wO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1pW3JdLHM9dGhpcy50cmFjZXNbb107Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZigoYT10W25dKS51aWQ9PT1vJiZhLnR5cGU9PT1zLnR5cGUpY29udGludWUgdDtzLmRpc3Bvc2UoKSxkZWxldGUgdGhpcy50cmFjZXNbb119Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7YT10W3JdO3ZhciBsPWVbcl0sYz10aGlzLnRyYWNlc1thLnVpZF07Yz9jLnVwZGF0ZShhLGwpOihjPWEuX21vZHVsZS5wbG90KHRoaXMsYSxsKSx0aGlzLnRyYWNlc1thLnVpZF09Yyl9dGhpcy5nbHBsb3Qub2JqZWN0cy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyYWNlLmluZGV4LWUuX3RyYWNlLmluZGV4fSl9LHcudXBkYXRlRng9ZnVuY3Rpb24odCl7Imxhc3NvIj09PXR8fCJzZWxlY3QiPT09dD8odGhpcy5waWNrQ2FudmFzLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIik6KHRoaXMucGlja0NhbnZhcy5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0iYXV0byIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0iYXV0byIpLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUuY3Vyc29yPSJwYW4iPT09dD8ibW92ZSI6Inpvb20iPT09dD8iY3Jvc3NoYWlyIjpudWxsfSx3LmVtaXRQb2ludEFjdGlvbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPXQudHJhY2UudWlkLGE9dC5wb2ludEluZGV4LGk9MDtpPHRoaXMuZnVsbERhdGEubGVuZ3RoO2krKyl0aGlzLmZ1bGxEYXRhW2ldLnVpZD09PW4mJihyPXRoaXMuZnVsbERhdGFbaV0pO3ZhciBvPXt4OnQudHJhY2VDb29yZFswXSx5OnQudHJhY2VDb29yZFsxXSxjdXJ2ZU51bWJlcjpyLmluZGV4LHBvaW50TnVtYmVyOmEsZGF0YTpyLl9pbnB1dCxmdWxsRGF0YTp0aGlzLmZ1bGxEYXRhLHhheGlzOnRoaXMueGF4aXMseWF4aXM6dGhpcy55YXhpc307cy5hcHBlbmRBcnJheVBvaW50VmFsdWUobyxyLGEpLHRoaXMuZ3JhcGhEaXYuZW1pdChlLHtwb2ludHM6W29dfSl9LHcuZHJhdz1mdW5jdGlvbigpe2lmKCF0aGlzLnN0b3BwZWQpe3JlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJlZHJhdyk7dmFyIHQ9dGhpcy5nbHBsb3QsZT10aGlzLmNhbWVyYSxyPWUubW91c2VMaXN0ZW5lcixuPTE9PT10aGlzLmxhc3RCdXR0b25TdGF0ZSYmMD09PXIuYnV0dG9ucyxhPXRoaXMuZnVsbExheW91dDt0aGlzLmxhc3RCdXR0b25TdGF0ZT1yLmJ1dHRvbnMsdGhpcy5jYW1lcmFDaGFuZ2VkKCk7dmFyIGksbz1yLngqdC5waXhlbFJhdGlvLGw9dGhpcy5jYW52YXMuaGVpZ2h0LXQucGl4ZWxSYXRpbypyLnk7aWYoZS5ib3hFbmFibGVkJiYiem9vbSI9PT1hLmRyYWdtb2RlKXt0aGlzLnNlbGVjdEJveC5lbmFibGVkPSEwO2Zvcih2YXIgYz10aGlzLnNlbGVjdEJveC5zZWxlY3RCb3g9W01hdGgubWluKGUuYm94U3RhcnRbMF0sZS5ib3hFbmRbMF0pLE1hdGgubWluKGUuYm94U3RhcnRbMV0sZS5ib3hFbmRbMV0pLE1hdGgubWF4KGUuYm94U3RhcnRbMF0sZS5ib3hFbmRbMF0pLE1hdGgubWF4KGUuYm94U3RhcnRbMV0sZS5ib3hFbmRbMV0pXSx1PTA7dTwyO3UrKyllLmJveFN0YXJ0W3VdPT09ZS5ib3hFbmRbdV0mJihjW3VdPXQuZGF0YUJveFt1XSxjW3UrMl09dC5kYXRhQm94W3UrMl0pO3Quc2V0RGlydHkoKX1lbHNlIGlmKCFlLnBhbm5pbmcmJnRoaXMuaXNNb3VzZU92ZXIpe3RoaXMuc2VsZWN0Qm94LmVuYWJsZWQ9ITE7dmFyIGg9YS5fc2l6ZSxmPXRoaXMueGF4aXMuZG9tYWluLHA9dGhpcy55YXhpcy5kb21haW4sZD0oaT10LnBpY2soby90LnBpeGVsUmF0aW8raC5sK2ZbMF0qaC53LGwvdC5waXhlbFJhdGlvLShoLnQrKDEtcFsxXSkqaC5oKSkpJiZpLm9iamVjdC5fdHJhY2UuaGFuZGxlUGljayhpKTtpZihkJiZuJiZ0aGlzLmVtaXRQb2ludEFjdGlvbihkLCJwbG90bHlfY2xpY2siKSxpJiYic2tpcCIhPT1pLm9iamVjdC5fdHJhY2UuaG92ZXJpbmZvJiZhLmhvdmVybW9kZSYmZCYmKCF0aGlzLmxhc3RQaWNrUmVzdWx0fHx0aGlzLmxhc3RQaWNrUmVzdWx0LnRyYWNlVWlkIT09ZC50cmFjZS51aWR8fHRoaXMubGFzdFBpY2tSZXN1bHQuZGF0YUNvb3JkWzBdIT09ZC5kYXRhQ29vcmRbMF18fHRoaXMubGFzdFBpY2tSZXN1bHQuZGF0YUNvb3JkWzFdIT09ZC5kYXRhQ29vcmRbMV0pKXt2YXIgZz1kO3RoaXMubGFzdFBpY2tSZXN1bHQ9e3RyYWNlVWlkOmQudHJhY2U/ZC50cmFjZS51aWQ6bnVsbCxkYXRhQ29vcmQ6ZC5kYXRhQ29vcmQuc2xpY2UoKX0sdGhpcy5zcGlrZXMudXBkYXRlKHtjZW50ZXI6aS5kYXRhQ29vcmR9KSxnLnNjcmVlbkNvb3JkPVsoKHQudmlld0JveFsyXS10LnZpZXdCb3hbMF0pKihpLmRhdGFDb29yZFswXS10LmRhdGFCb3hbMF0pLyh0LmRhdGFCb3hbMl0tdC5kYXRhQm94WzBdKSt0LnZpZXdCb3hbMF0pL3QucGl4ZWxSYXRpbywodGhpcy5jYW52YXMuaGVpZ2h0LSh0LnZpZXdCb3hbM10tdC52aWV3Qm94WzFdKSooaS5kYXRhQ29vcmRbMV0tdC5kYXRhQm94WzFdKS8odC5kYXRhQm94WzNdLXQuZGF0YUJveFsxXSktdC52aWV3Qm94WzFdKS90LnBpeGVsUmF0aW9dLHRoaXMuZW1pdFBvaW50QWN0aW9uKGQsInBsb3RseV9ob3ZlciIpO3ZhciB2PXRoaXMuZnVsbERhdGFbZy50cmFjZS5pbmRleF18fHt9LG09Zy5wb2ludEluZGV4LHk9cy5jYXN0SG92ZXJpbmZvKHYsYSxtKTtpZih5JiYiYWxsIiE9PXkpe3ZhciB4PXkuc3BsaXQoIisiKTstMT09PXguaW5kZXhPZigieCIpJiYoZy50cmFjZUNvb3JkWzBdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoInkiKSYmKGcudHJhY2VDb29yZFsxXT12b2lkIDApLC0xPT09eC5pbmRleE9mKCJ6IikmJihnLnRyYWNlQ29vcmRbMl09dm9pZCAwKSwtMT09PXguaW5kZXhPZigidGV4dCIpJiYoZy50ZXh0TGFiZWw9dm9pZCAwKSwtMT09PXguaW5kZXhPZigibmFtZSIpJiYoZy5uYW1lPXZvaWQgMCl9cy5sb25lSG92ZXIoe3g6Zy5zY3JlZW5Db29yZFswXSx5Omcuc2NyZWVuQ29vcmRbMV0seExhYmVsOnRoaXMuaG92ZXJGb3JtYXR0ZXIoInhheGlzIixnLnRyYWNlQ29vcmRbMF0pLHlMYWJlbDp0aGlzLmhvdmVyRm9ybWF0dGVyKCJ5YXhpcyIsZy50cmFjZUNvb3JkWzFdKSx6TGFiZWw6Zy50cmFjZUNvb3JkWzJdLHRleHQ6Zy50ZXh0TGFiZWwsbmFtZTpnLm5hbWUsY29sb3I6cy5jYXN0SG92ZXJPcHRpb24odixtLCJiZ2NvbG9yIil8fGcuY29sb3IsYm9yZGVyQ29sb3I6cy5jYXN0SG92ZXJPcHRpb24odixtLCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6cy5jYXN0SG92ZXJPcHRpb24odixtLCJmb250LmZhbWlseSIpLGZvbnRTaXplOnMuY2FzdEhvdmVyT3B0aW9uKHYsbSwiZm9udC5zaXplIiksZm9udENvbG9yOnMuY2FzdEhvdmVyT3B0aW9uKHYsbSwiZm9udC5jb2xvciIpLG5hbWVMZW5ndGg6cy5jYXN0SG92ZXJPcHRpb24odixtLCJuYW1lbGVuZ3RoIiksdGV4dEFsaWduOnMuY2FzdEhvdmVyT3B0aW9uKHYsbSwiYWxpZ24iKX0se2NvbnRhaW5lcjp0aGlzLnN2Z0NvbnRhaW5lcixnZDp0aGlzLmdyYXBoRGl2fSl9fWl8fHRoaXMudW5ob3ZlcigpLHQuZHJhdygpfX0sdy51bmhvdmVyPWZ1bmN0aW9uKCl7dGhpcy5sYXN0UGlja1Jlc3VsdCYmKHRoaXMuc3Bpa2VzLnVwZGF0ZSh7fSksdGhpcy5sYXN0UGlja1Jlc3VsdD1udWxsLHRoaXMuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3VuaG92ZXIiKSxzLmxvbmVVbmhvdmVyKHRoaXMuc3ZnQ29udGFpbmVyKSl9LHcuaG92ZXJGb3JtYXR0ZXI9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT1lKXt2YXIgcj10aGlzW3RdO3JldHVybiBvLnRpY2tUZXh0KHIsci5jMmwoZSksImhvdmVyIikudGV4dH19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjYzMCwiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnIjo3MzgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjc2NCwiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6NzcxLCIuLi9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjc3MiwiLi9jYW1lcmEiOjgwMSwiLi9jb252ZXJ0Ijo4MDIsImdsLXBsb3QyZCI6MjkwLCJnbC1zZWxlY3QtYm94IjozMDIsImdsLXNwaWtlczJkIjozMTEsIndlYmdsLWNvbnRleHQiOjU1NX1dLDgwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuL3NjZW5lIiksbz10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO3IubmFtZT0iZ2wzZCIsci5hdHRyPSJzY2VuZSIsci5pZFJvb3Q9InNjZW5lIixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9cy5jb3VudGVyUmVnZXgoInNjZW5lIiksci5hdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe2hvdmVybGFiZWw6YS5ob3ZlcmxhYmVsfSwicGxvdCIsIm5lc3RlZCIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXQvZGVmYXVsdHMiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPWUuX3N1YnBsb3RzLmdsM2QsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgcz1uW2FdLGw9byhyLCJnbDNkIixzKSxjPWVbc10sdT1jLmNhbWVyYSxoPWMuX3NjZW5lO2h8fChoPW5ldyBpKHtpZDpzLGdyYXBoRGl2OnQsY29udGFpbmVyOnQucXVlcnlTZWxlY3RvcigiLmdsLWNvbnRhaW5lciIpLHN0YXRpY1Bsb3Q6dC5fY29udGV4dC5zdGF0aWNQbG90LHBsb3RHbFBpeGVsUmF0aW86dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvLGNhbWVyYTp1fSxlKSxjLl9zY2VuZT1oKSxoLnZpZXdJbml0aWFsfHwoaC52aWV3SW5pdGlhbD17dXA6e3g6dS51cC54LHk6dS51cC55LHo6dS51cC56fSxleWU6e3g6dS5leWUueCx5OnUuZXllLnksejp1LmV5ZS56fSxjZW50ZXI6e3g6dS5jZW50ZXIueCx5OnUuY2VudGVyLnksejp1LmNlbnRlci56fX0pLGgucGxvdChsLGUsdC5sYXlvdXQpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGE9bi5fc3VicGxvdHMuZ2wzZHx8W10saT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgbz1hW2ldOyFlW29dJiZuW29dLl9zY2VuZSYmKG5bb10uX3NjZW5lLmRlc3Ryb3koKSxuLl9pbmZvbGF5ZXImJm4uX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLSIrbykucmVtb3ZlKCkpfX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsM2Qsbj1lLl9zaXplLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIGk9ZVtyW2FdXSxvPWkuZG9tYWluLHM9aS5fc2NlbmUsYz1zLnRvSW1hZ2UoInBuZyIpO2UuX2dsaW1hZ2VzLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6bC5zdmcsInhsaW5rOmhyZWYiOmMseDpuLmwrbi53Km8ueFswXSx5Om4udCtuLmgqKDEtby55WzFdKSx3aWR0aDpuLncqKG8ueFsxXS1vLnhbMF0pLGhlaWdodDpuLmgqKG8ueVsxXS1vLnlbMF0pLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSkscy5kZXN0cm95KCl9fSxyLmNsZWFuSWQ9ZnVuY3Rpb24odCl7aWYodC5tYXRjaCgvXnNjZW5lWzAtOV0qJC8pKXt2YXIgZT10LnN1YnN0cig1KTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksInNjZW5lIitlfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsM2Qsbj0wO248ci5sZW5ndGg7bisrKXtlW3Jbbl1dLl9zY2VuZS51cGRhdGVGeChlLmRyYWdtb2RlLGUuaG92ZXJtb2RlKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXMiOjYzMSwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjY5NCwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc0OCwiLi4vZ2V0X2RhdGEiOjgwMCwiLi9sYXlvdXQvYXR0cmlidXRlcyI6ODA2LCIuL2xheW91dC9kZWZhdWx0cyI6ODEwLCIuL2xheW91dC9sYXlvdXRfYXR0cmlidXRlcyI6ODExLCIuL3NjZW5lIjo4MTV9XSw4MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzY2VuZTp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJzY2VuZSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifX19LHt9XSw4MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dmlzaWJsZTphLnZpc2libGUsc2hvd3NwaWtlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc3Bpa2VzaWRlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc3Bpa2V0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyfSxzcGlrZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzaG93YmFja2dyb3VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYmFja2dyb3VuZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgyMDQsIDIwNCwgMjA0LCAwLjUpIn0sc2hvd2F4ZXNsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGNvbG9yOmEuY29sb3IsY2F0ZWdvcnlvcmRlcjphLmNhdGVnb3J5b3JkZXIsY2F0ZWdvcnlhcnJheTphLmNhdGVnb3J5YXJyYXksdGl0bGU6e3RleHQ6YS50aXRsZS50ZXh0LGZvbnQ6YS50aXRsZS5mb250fSx0eXBlOmkoe30sYS50eXBlLHt2YWx1ZXM6WyItIiwibGluZWFyIiwibG9nIiwiZGF0ZSIsImNhdGVnb3J5Il19KSxhdXRvcmFuZ2U6YS5hdXRvcmFuZ2UscmFuZ2Vtb2RlOmEucmFuZ2Vtb2RlLHJhbmdlOmkoe30sYS5yYW5nZSx7aXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxhbmltOiExfSksdGlja21vZGU6YS50aWNrbW9kZSxudGlja3M6YS5udGlja3MsdGljazA6YS50aWNrMCxkdGljazphLmR0aWNrLHRpY2t2YWxzOmEudGlja3ZhbHMsdGlja3RleHQ6YS50aWNrdGV4dCx0aWNrczphLnRpY2tzLG1pcnJvcjphLm1pcnJvcix0aWNrbGVuOmEudGlja2xlbix0aWNrd2lkdGg6YS50aWNrd2lkdGgsdGlja2NvbG9yOmEudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmEuc2hvd3RpY2tsYWJlbHMsdGlja2ZvbnQ6YS50aWNrZm9udCx0aWNrYW5nbGU6YS50aWNrYW5nbGUsdGlja3ByZWZpeDphLnRpY2twcmVmaXgsc2hvd3RpY2twcmVmaXg6YS5zaG93dGlja3ByZWZpeCx0aWNrc3VmZml4OmEudGlja3N1ZmZpeCxzaG93dGlja3N1ZmZpeDphLnNob3d0aWNrc3VmZml4LHNob3dleHBvbmVudDphLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDphLmV4cG9uZW50Zm9ybWF0LHNlcGFyYXRldGhvdXNhbmRzOmEuc2VwYXJhdGV0aG91c2FuZHMsdGlja2Zvcm1hdDphLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmEudGlja2Zvcm1hdHN0b3BzLGhvdmVyZm9ybWF0OmEuaG92ZXJmb3JtYXQsc2hvd2xpbmU6YS5zaG93bGluZSxsaW5lY29sb3I6YS5saW5lY29sb3IsbGluZXdpZHRoOmEubGluZXdpZHRoLHNob3dncmlkOmEuc2hvd2dyaWQsZ3JpZGNvbG9yOmkoe30sYS5ncmlkY29sb3Ise2RmbHQ6InJnYigyMDQsIDIwNCwgMjA0KSJ9KSxncmlkd2lkdGg6YS5ncmlkd2lkdGgsemVyb2xpbmU6YS56ZXJvbGluZSx6ZXJvbGluZWNvbG9yOmEuemVyb2xpbmVjb2xvcix6ZXJvbGluZXdpZHRoOmEuemVyb2xpbmV3aWR0aCxfZGVwcmVjYXRlZDp7dGl0bGU6YS5fZGVwcmVjYXRlZC50aXRsZSx0aXRsZWZvbnQ6YS5fZGVwcmVjYXRlZC50aXRsZWZvbnR9fSwicGxvdCIsImZyb20tcm9vdCIpfSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3NDgsIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc3fV0sODA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRpbnljb2xvcjIiKS5taXgsYT10KCIuLi8uLi8uLi9saWIiKSxpPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4vYXhpc19hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jYXJ0ZXNpYW4vdHlwZV9kZWZhdWx0cyIpLGw9dCgiLi4vLi4vY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiKSxjPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdSxoO2Z1bmN0aW9uIGYodCxlKXtyZXR1cm4gYS5jb2VyY2UodSxoLG8sdCxlKX1mb3IodmFyIHA9MDtwPGMubGVuZ3RoO3ArKyl7dmFyIGQ9Y1twXTt1PXRbZF18fHt9LChoPWkubmV3Q29udGFpbmVyKGUsZCkpLl9pZD1kWzBdK3Iuc2NlbmUsaC5fbmFtZT1kLHModSxoLGYsciksbCh1LGgsZix7Zm9udDpyLmZvbnQsbGV0dGVyOmRbMF0sZGF0YTpyLmRhdGEsc2hvd0dyaWQ6ITAsbm9UaWNrc29uOiEwLGJnQ29sb3I6ci5iZ0NvbG9yLGNhbGVuZGFyOnIuY2FsZW5kYXJ9LHIuZnVsbExheW91dCksZigiZ3JpZGNvbG9yIixuKGguY29sb3Isci5iZ0NvbG9yLDEzNjAwLzE4NykudG9SZ2JTdHJpbmcoKSksZigidGl0bGUudGV4dCIsZFswXSksaC5zZXRTY2FsZT1hLm5vb3AsZigic2hvd3NwaWtlcyIpJiYoZigic3Bpa2VzaWRlcyIpLGYoInNwaWtldGhpY2tuZXNzIiksZigic3Bpa2Vjb2xvciIsaC5jb2xvcikpLGYoInNob3dheGVzbGFiZWxzIiksZigic2hvd2JhY2tncm91bmQiKSYmZigiYmFja2dyb3VuZGNvbG9yIil9fX0seyIuLi8uLi8uLi9saWIiOjcxNywiLi4vLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzU1LCIuLi8uLi9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyI6NzY3LCIuLi8uLi9jYXJ0ZXNpYW4vdHlwZV9kZWZhdWx0cyI6Nzg4LCIuL2F4aXNfYXR0cmlidXRlcyI6ODA3LHRpbnljb2xvcjI6NTM2fV0sODA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxhPXQoIi4uLy4uLy4uL2xpYiIpLGk9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXTtmdW5jdGlvbiBvKCl7dGhpcy5ib3VuZHM9W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sdGhpcy50aWNrcz1bW10sW10sW11dLHRoaXMudGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMudGlja0ZvbnQ9WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiXSx0aGlzLnRpY2tTaXplPVsxMiwxMiwxMl0sdGhpcy50aWNrQW5nbGU9WzAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTgsMTgsMThdLHRoaXMubGFiZWxzPVsieCIsInkiLCJ6Il0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITBdLHRoaXMubGFiZWxGb250PVsiT3BlbiBTYW5zIiwiT3BlbiBTYW5zIiwiT3BlbiBTYW5zIl0sdGhpcy5sYWJlbFNpemU9WzIwLDIwLDIwXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVszMCwzMCwzMF0sdGhpcy5saW5lRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGluZVRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVUaWNrTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lVGlja0xlbmd0aD1bMTAsMTAsMTBdLHRoaXMubGluZVRpY2tXaWR0aD1bMSwxLDFdLHRoaXMubGluZVRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZEVuYWJsZT1bITAsITAsITBdLHRoaXMuZ3JpZFdpZHRoPVsxLDEsMV0sdGhpcy5ncmlkQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9FbmFibGU9WyEwLCEwLCEwXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9MaW5lV2lkdGg9WzIsMiwyXSx0aGlzLmJhY2tncm91bmRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV1dLHRoaXMuX2RlZmF1bHRUaWNrUGFkPXRoaXMudGlja1BhZC5zbGljZSgpLHRoaXMuX2RlZmF1bHRMYWJlbFBhZD10aGlzLmxhYmVsUGFkLnNsaWNlKCksdGhpcy5fZGVmYXVsdExpbmVUaWNrTGVuZ3RoPXRoaXMubGluZVRpY2tMZW5ndGguc2xpY2UoKX1vLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8MzsrK3Ipe3ZhciBvPWVbaVtyXV07by52aXNpYmxlPyh0aGlzLmxhYmVsc1tyXT10Ll9tZXRhP2EudGVtcGxhdGVTdHJpbmcoby50aXRsZS50ZXh0LHQuX21ldGEpOm8udGl0bGUudGV4dCwiZm9udCJpbiBvLnRpdGxlJiYoby50aXRsZS5mb250LmNvbG9yJiYodGhpcy5sYWJlbENvbG9yW3JdPW4oby50aXRsZS5mb250LmNvbG9yKSksby50aXRsZS5mb250LmZhbWlseSYmKHRoaXMubGFiZWxGb250W3JdPW8udGl0bGUuZm9udC5mYW1pbHkpLG8udGl0bGUuZm9udC5zaXplJiYodGhpcy5sYWJlbFNpemVbcl09by50aXRsZS5mb250LnNpemUpKSwic2hvd2xpbmUiaW4gbyYmKHRoaXMubGluZUVuYWJsZVtyXT1vLnNob3dsaW5lKSwibGluZWNvbG9yImluIG8mJih0aGlzLmxpbmVDb2xvcltyXT1uKG8ubGluZWNvbG9yKSksImxpbmV3aWR0aCJpbiBvJiYodGhpcy5saW5lV2lkdGhbcl09by5saW5ld2lkdGgpLCJzaG93Z3JpZCJpbiBvJiYodGhpcy5ncmlkRW5hYmxlW3JdPW8uc2hvd2dyaWQpLCJncmlkY29sb3IiaW4gbyYmKHRoaXMuZ3JpZENvbG9yW3JdPW4oby5ncmlkY29sb3IpKSwiZ3JpZHdpZHRoImluIG8mJih0aGlzLmdyaWRXaWR0aFtyXT1vLmdyaWR3aWR0aCksImxvZyI9PT1vLnR5cGU/dGhpcy56ZXJvRW5hYmxlW3JdPSExOiJ6ZXJvbGluZSJpbiBvJiYodGhpcy56ZXJvRW5hYmxlW3JdPW8uemVyb2xpbmUpLCJ6ZXJvbGluZWNvbG9yImluIG8mJih0aGlzLnplcm9MaW5lQ29sb3Jbcl09bihvLnplcm9saW5lY29sb3IpKSwiemVyb2xpbmV3aWR0aCJpbiBvJiYodGhpcy56ZXJvTGluZVdpZHRoW3JdPW8uemVyb2xpbmV3aWR0aCksInRpY2tzImluIG8mJm8udGlja3M/dGhpcy5saW5lVGlja0VuYWJsZVtyXT0hMDp0aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSExLCJ0aWNrbGVuImluIG8mJih0aGlzLmxpbmVUaWNrTGVuZ3RoW3JdPXRoaXMuX2RlZmF1bHRMaW5lVGlja0xlbmd0aFtyXT1vLnRpY2tsZW4pLCJ0aWNrY29sb3IiaW4gbyYmKHRoaXMubGluZVRpY2tDb2xvcltyXT1uKG8udGlja2NvbG9yKSksInRpY2t3aWR0aCJpbiBvJiYodGhpcy5saW5lVGlja1dpZHRoW3JdPW8udGlja3dpZHRoKSwidGlja2FuZ2xlImluIG8mJih0aGlzLnRpY2tBbmdsZVtyXT0iYXV0byI9PT1vLnRpY2thbmdsZT8tMzYwMDpNYXRoLlBJKi1vLnRpY2thbmdsZS8xODApLCJzaG93dGlja2xhYmVscyJpbiBvJiYodGhpcy50aWNrRW5hYmxlW3JdPW8uc2hvd3RpY2tsYWJlbHMpLCJ0aWNrZm9udCJpbiBvJiYoby50aWNrZm9udC5jb2xvciYmKHRoaXMudGlja0NvbG9yW3JdPW4oby50aWNrZm9udC5jb2xvcikpLG8udGlja2ZvbnQuZmFtaWx5JiYodGhpcy50aWNrRm9udFtyXT1vLnRpY2tmb250LmZhbWlseSksby50aWNrZm9udC5zaXplJiYodGhpcy50aWNrU2l6ZVtyXT1vLnRpY2tmb250LnNpemUpKSwibWlycm9yImluIG8/LTEhPT1bInRpY2tzIiwiYWxsIiwiYWxsdGlja3MiXS5pbmRleE9mKG8ubWlycm9yKT8odGhpcy5saW5lVGlja01pcnJvcltyXT0hMCx0aGlzLmxpbmVNaXJyb3Jbcl09ITApOiEwPT09by5taXJyb3I/KHRoaXMubGluZVRpY2tNaXJyb3Jbcl09ITEsdGhpcy5saW5lTWlycm9yW3JdPSEwKToodGhpcy5saW5lVGlja01pcnJvcltyXT0hMSx0aGlzLmxpbmVNaXJyb3Jbcl09ITEpOnRoaXMubGluZU1pcnJvcltyXT0hMSwic2hvd2JhY2tncm91bmQiaW4gbyYmITEhPT1vLnNob3diYWNrZ3JvdW5kPyh0aGlzLmJhY2tncm91bmRFbmFibGVbcl09ITAsdGhpcy5iYWNrZ3JvdW5kQ29sb3Jbcl09bihvLmJhY2tncm91bmRjb2xvcikpOnRoaXMuYmFja2dyb3VuZEVuYWJsZVtyXT0hMSk6KHRoaXMudGlja0VuYWJsZVtyXT0hMSx0aGlzLmxhYmVsRW5hYmxlW3JdPSExLHRoaXMubGluZUVuYWJsZVtyXT0hMSx0aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSExLHRoaXMuZ3JpZEVuYWJsZVtyXT0hMSx0aGlzLnplcm9FbmFibGVbcl09ITEsdGhpcy5iYWNrZ3JvdW5kRW5hYmxlW3JdPSExKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBvO3JldHVybiByLm1lcmdlKHQsZSkscn19LHsiLi4vLi4vLi4vbGliIjo3MTcsIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjc0MH1dLDgxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9saWIiKSxhPXQoIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIikscz10KCIuL2F4aXNfZGVmYXVsdHMiKSxsPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2dldF9kYXRhIikuZ2V0U3VicGxvdERhdGEsdT0iZ2wzZCI7ZnVuY3Rpb24gaCh0LGUscixuKXtmb3IodmFyIG89cigiYmdjb2xvciIpLGw9YS5jb21iaW5lKG8sbi5wYXBlcl9iZ2NvbG9yKSxoPVsidXAiLCJjZW50ZXIiLCJleWUiXSxmPTA7ZjxoLmxlbmd0aDtmKyspcigiY2FtZXJhLiIraFtmXSsiLngiKSxyKCJjYW1lcmEuIitoW2ZdKyIueSIpLHIoImNhbWVyYS4iK2hbZl0rIi56Iik7cigiY2FtZXJhLnByb2plY3Rpb24udHlwZSIpO3ZhciBwPSEhcigiYXNwZWN0cmF0aW8ueCIpJiYhIXIoImFzcGVjdHJhdGlvLnkiKSYmISFyKCJhc3BlY3RyYXRpby56IiksZD1yKCJhc3BlY3Rtb2RlIixwPyJtYW51YWwiOiJhdXRvIik7cHx8KHQuYXNwZWN0cmF0aW89ZS5hc3BlY3RyYXRpbz17eDoxLHk6MSx6OjF9LCJtYW51YWwiPT09ZCYmKGUuYXNwZWN0bW9kZT0iYXV0byIpLHQuYXNwZWN0bW9kZT1lLmFzcGVjdG1vZGUpO3ZhciBnPWMobi5mdWxsRGF0YSx1LG4uaWQpO3ModCxlLHtmb250Om4uZm9udCxzY2VuZTpuLmlkLGRhdGE6ZyxiZ0NvbG9yOmwsY2FsZW5kYXI6bi5jYWxlbmRhcixmdWxsTGF5b3V0Om4uZnVsbExheW91dH0pLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsbik7dmFyIHY9bi5nZXREZmx0RnJvbUxheW91dCgiZHJhZ21vZGUiKTtpZighMSE9PXYmJiF2KWlmKHY9Im9yYml0Iix0LmNhbWVyYSYmdC5jYW1lcmEudXApe3ZhciBtPXQuY2FtZXJhLnVwLngseT10LmNhbWVyYS51cC55LHg9dC5jYW1lcmEudXAuejswIT09eCYmKG0mJnkmJng/eC9NYXRoLnNxcnQobSptK3kqeSt4KngpPi45OTkmJih2PSJ0dXJudGFibGUiKTp2PSJ0dXJudGFibGUiKX1lbHNlIHY9InR1cm50YWJsZSI7cigiZHJhZ21vZGUiLHYpLHIoImhvdmVybW9kZSIsbi5nZXREZmx0RnJvbUxheW91dCgiaG92ZXJtb2RlIikpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aD4xO28odCxlLHIse3R5cGU6dSxhdHRyaWJ1dGVzOmwsaGFuZGxlRGVmYXVsdHM6aCxmdWxsTGF5b3V0OmUsZm9udDplLmZvbnQsZnVsbERhdGE6cixnZXREZmx0RnJvbUxheW91dDpmdW5jdGlvbihlKXtpZighYSlyZXR1cm4gbi52YWxpZGF0ZSh0W2VdLGxbZV0pP3RbZV06dm9pZCAwfSxwYXBlcl9iZ2NvbG9yOmUucGFwZXJfYmdjb2xvcixjYWxlbmRhcjplLmNhbGVuZGFyfSl9fSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vLi4vbGliIjo3MTcsIi4uLy4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4uLy4uL2dldF9kYXRhIjo4MDAsIi4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiOjg0MCwiLi9heGlzX2RlZmF1bHRzIjo4MDgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgxMX1dLDgxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F4aXNfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vZG9tYWluIikuYXR0cmlidXRlcyxpPXQoIi4uLy4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vLi4vbGliIikuY291bnRlclJlZ2V4O2Z1bmN0aW9uIHModCxlLHIpe3JldHVybnt4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6dCxlZGl0VHlwZToiY2FtZXJhIn0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0OmUsZWRpdFR5cGU6ImNhbWVyYSJ9LHo6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpyLGVkaXRUeXBlOiJjYW1lcmEifSxlZGl0VHlwZToiY2FtZXJhIn19ZS5leHBvcnRzPXtfYXJyYXlBdHRyUmVnZXhwczpbbygic2NlbmUiLCIuYW5ub3RhdGlvbnMiLCEwKV0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJwbG90In0sY2FtZXJhOnt1cDppKHMoMCwwLDEpLHt9KSxjZW50ZXI6aShzKDAsMCwwKSx7fSksZXllOmkocygxLjI1LDEuMjUsMS4yNSkse30pLHByb2plY3Rpb246e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBlcnNwZWN0aXZlIiwib3J0aG9ncmFwaGljIl0sZGZsdDoicGVyc3BlY3RpdmUiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FtZXJhIn0sZG9tYWluOmEoe25hbWU6InNjZW5lIixlZGl0VHlwZToicGxvdCJ9KSxhc3BlY3Rtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwiY3ViZSIsImRhdGEiLCJtYW51YWwiXSxkZmx0OiJhdXRvIixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiYXNwZWN0cmF0aW8ueCI6dm9pZCAwLCJhc3BlY3RyYXRpby55Ijp2b2lkIDAsImFzcGVjdHJhdGlvLnoiOnZvaWQgMH19LGFzcGVjdHJhdGlvOnt4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXNwZWN0bW9kZSI6Im1hbnVhbCJ9fSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXNwZWN0bW9kZSI6Im1hbnVhbCJ9fSx6Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXNwZWN0bW9kZSI6Im1hbnVhbCJ9fSxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnthc3BlY3Rtb2RlOiJtYW51YWwifX0seGF4aXM6bix5YXhpczpuLHpheGlzOm4sZHJhZ21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm9yYml0IiwidHVybnRhYmxlIiwiem9vbSIsInBhbiIsITFdLGVkaXRUeXBlOiJwbG90In0saG92ZXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9zZXN0IiwhMV0sZGZsdDoiY2xvc2VzdCIsZWRpdFR5cGU6Im1vZGViYXIifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6InBsb3QiLF9kZXByZWNhdGVkOntjYW1lcmFwb3NpdGlvbjp7dmFsVHlwZToiaW5mb19hcnJheSIsZWRpdFR5cGU6ImNhbWVyYSJ9fX19LHsiLi4vLi4vLi4vbGliIjo3MTcsIi4uLy4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vZG9tYWluIjo3OTAsIi4vYXhpc19hdHRyaWJ1dGVzIjo4MDd9XSw4MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGE9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXTtmdW5jdGlvbiBpKCl7dGhpcy5lbmFibGVkPVshMCwhMCwhMF0sdGhpcy5jb2xvcnM9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmRyYXdTaWRlcz1bITAsITAsITBdLHRoaXMubGluZVdpZHRoPVsxLDEsMV19aS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTwzOysrZSl7dmFyIHI9dFthW2VdXTtyLnZpc2libGU/KHRoaXMuZW5hYmxlZFtlXT1yLnNob3dzcGlrZXMsdGhpcy5jb2xvcnNbZV09bihyLnNwaWtlY29sb3IpLHRoaXMuZHJhd1NpZGVzW2VdPXIuc3Bpa2VzaWRlcyx0aGlzLmxpbmVXaWR0aFtlXT1yLnNwaWtldGhpY2tuZXNzKToodGhpcy5lbmFibGVkW2VdPSExLHRoaXMuZHJhd1NpZGVzW2VdPSExKX19LGUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgaTtyZXR1cm4gZS5tZXJnZSh0KSxlfX0seyIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDB9XSw4MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmF4ZXNPcHRpb25zLHI9dC5nbHBsb3QuYXhlc1BpeGVscyxzPXQuZnVsbFNjZW5lTGF5b3V0LGw9W1tdLFtdLFtdXSxjPTA7YzwzOysrYyl7dmFyIHU9c1tpW2NdXTtpZih1Ll9sZW5ndGg9KHJbY10uaGktcltjXS5sbykqcltjXS5waXhlbHNQZXJEYXRhVW5pdC90LmRhdGFTY2FsZVtjXSxNYXRoLmFicyh1Ll9sZW5ndGgpPT09MS8wfHxpc05hTih1Ll9sZW5ndGgpKWxbY109W107ZWxzZXt1Ll9pbnB1dF9yYW5nZT11LnJhbmdlLnNsaWNlKCksdS5yYW5nZVswXT1yW2NdLmxvL3QuZGF0YVNjYWxlW2NdLHUucmFuZ2VbMV09cltjXS5oaS90LmRhdGFTY2FsZVtjXSx1Ll9tPTEvKHQuZGF0YVNjYWxlW2NdKnJbY10ucGl4ZWxzUGVyRGF0YVVuaXQpLHUucmFuZ2VbMF09PT11LnJhbmdlWzFdJiYodS5yYW5nZVswXS09MSx1LnJhbmdlWzFdKz0xKTt2YXIgaD11LnRpY2ttb2RlO2lmKCJhdXRvIj09PXUudGlja21vZGUpe3UudGlja21vZGU9ImxpbmVhciI7dmFyIGY9dS5udGlja3N8fGEuY29uc3RyYWluKHUuX2xlbmd0aC80MCw0LDkpO24uYXV0b1RpY2tzKHUsTWF0aC5hYnModS5yYW5nZVsxXS11LnJhbmdlWzBdKS9mKX1mb3IodmFyIHA9bi5jYWxjVGlja3ModSksZD0wO2Q8cC5sZW5ndGg7KytkKXBbZF0ueD1wW2RdLngqdC5kYXRhU2NhbGVbY10sImRhdGUiPT09dS50eXBlJiYocFtkXS50ZXh0PXBbZF0udGV4dC5yZXBsYWNlKC9cPGJyXD4vZywiICIpKTtsW2NdPXAsdS50aWNrbW9kZT1ofX1lLnRpY2tzPWw7Zm9yKHZhciBjPTA7YzwzOysrYyl7b1tjXT0uNSoodC5nbHBsb3QuYm91bmRzWzBdW2NdK3QuZ2xwbG90LmJvdW5kc1sxXVtjXSk7Zm9yKHZhciBkPTA7ZDwyOysrZCllLmJvdW5kc1tkXVtjXT10LmdscGxvdC5ib3VuZHNbZF1bY119dC5jb250b3VyTGV2ZWxzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkoMykscj0wO3I8MzsrK3Ipe2Zvcih2YXIgbj10W3JdLGE9bmV3IEFycmF5KG4ubGVuZ3RoKSxpPTA7aTxuLmxlbmd0aDsrK2kpYVtpXT1uW2ldLng7ZVtyXT1hfXJldHVybiBlfShsKX07dmFyIG49dCgiLi4vLi4vY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uLy4uL2xpYiIpLGk9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXSxvPVswLDAsMF19LHsiLi4vLi4vLi4vbGliIjo3MTcsIi4uLy4uL2NhcnRlc2lhbi9heGVzIjo3NjV9XSw4MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByLG4sYT1bMCwwLDAsMF07Zm9yKHI9MDtyPDQ7KytyKWZvcihuPTA7bjw0OysrbilhW25dKz10WzQqcituXSplW3JdO3JldHVybiBhfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQucHJvamVjdGlvbixuKHQudmlldyxuKHQubW9kZWwsW2VbMF0sZVsxXSxlWzJdLDFdKSkpfX0se31dLDgxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhLGk9dCgiZ2wtcGxvdDNkIiksbz1pLmNyZWF0ZUNhbWVyYSxzPWkuY3JlYXRlU2NlbmUsbD10KCJ3ZWJnbC1jb250ZXh0IiksYz10KCJoYXMtcGFzc2l2ZS1ldmVudHMiKSx1PXQoIi4uLy4uL3JlZ2lzdHJ5IiksaD10KCIuLi8uLi9saWIiKSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscD10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksZD10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksZz10KCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciKSx2PXQoIi4vcHJvamVjdCIpLG09dCgiLi9sYXlvdXQvY29udmVydCIpLHk9dCgiLi9sYXlvdXQvc3Bpa2VzIikseD10KCIuL2xheW91dC90aWNrX21hcmtzIiksYj10KCJpcy1tb2JpbGUiKSxfPWZ1bmN0aW9uKCl7aWYoIW5hdmlnYXRvcilyZXR1cm4hMTt2YXIgdDt0fHwidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8KHQ9bmF2aWdhdG9yLnVzZXJBZ2VudCk7dCYmdC5oZWFkZXJzJiYic3RyaW5nIj09dHlwZW9mIHQuaGVhZGVyc1sidXNlci1hZ2VudCJdJiYodD10LmhlYWRlcnNbInVzZXItYWdlbnQiXSk7aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiExO3ZhciBlPWIoe3VhOnQsdGFibGV0OiEwfSk7ITE9PT1lJiYtMSE9PXQuaW5kZXhPZigiTWFjaW50b3NoIikmJi0xIT09dC5pbmRleE9mKCJTYWZhcmkiKSYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjEmJihlPSEwKTtyZXR1cm4gZX0oKTtmdW5jdGlvbiB3KHQsZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksbj10LmNvbnRhaW5lcjt0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXY7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO2Euc3R5bGUucG9zaXRpb249ImFic29sdXRlIixhLnN0eWxlLnRvcD1hLnN0eWxlLmxlZnQ9IjBweCIsYS5zdHlsZS53aWR0aD1hLnN0eWxlLmhlaWdodD0iMTAwJSIsYS5zdHlsZVsiei1pbmRleCJdPTIwLGEuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHIuYXBwZW5kQ2hpbGQoYSksdGhpcy5zdmdDb250YWluZXI9YSxyLmlkPXQuaWQsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUudG9wPXIuc3R5bGUubGVmdD0iMHB4IixyLnN0eWxlLndpZHRoPXIuc3R5bGUuaGVpZ2h0PSIxMDAlIixuLmFwcGVuZENoaWxkKHIpLHRoaXMuZnVsbExheW91dD1lLHRoaXMuaWQ9dC5pZHx8InNjZW5lIix0aGlzLmZ1bGxTY2VuZUxheW91dD1lW3RoaXMuaWRdLHRoaXMucGxvdEFyZ3M9W1tdLHt9LHt9XSx0aGlzLmF4ZXNPcHRpb25zPW0oZSxlW3RoaXMuaWRdKSx0aGlzLnNwaWtlT3B0aW9ucz15KGVbdGhpcy5pZF0pLHRoaXMuY29udGFpbmVyPXIsdGhpcy5zdGF0aWNNb2RlPSEhdC5zdGF0aWNQbG90LHRoaXMucGl4ZWxSYXRpbz10aGlzLnBpeGVsUmF0aW98fHQucGxvdEdsUGl4ZWxSYXRpb3x8Mix0aGlzLmRhdGFTY2FsZT1bMSwxLDFdLHRoaXMuY29udG91ckxldmVscz1bW10sW10sW11dLHRoaXMuY29udmVydEFubm90YXRpb25zPXUuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiY29udmVydCIpLHRoaXMuZHJhd0Fubm90YXRpb25zPXUuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiZHJhdyIpLHRoaXMuaW5pdGlhbGl6ZUdMUGxvdCgpfXZhciBrPXcucHJvdG90eXBlO2sudHJ5Q3JlYXRlUGxvdD1mdW5jdGlvbigpe3ZhciB0PXtjYW52YXM6dGhpcy5jYW52YXMsZ2w6dGhpcy5nbCxnbE9wdGlvbnM6e3ByZXNlcnZlRHJhd2luZ0J1ZmZlcjpfLHByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITB9LGNvbnRhaW5lcjp0aGlzLmNvbnRhaW5lcixheGVzOnRoaXMuYXhlc09wdGlvbnMsc3Bpa2VzOnRoaXMuc3Bpa2VPcHRpb25zLHBpY2tSYWRpdXM6MTAsc25hcFRvRGF0YTohMCxhdXRvU2NhbGU6ITAsYXV0b0JvdW5kczohMSxjYW1lcmFPYmplY3Q6dGhpcy5jYW1lcmEscGl4ZWxSYXRpbzp0aGlzLnBpeGVsUmF0aW99O2lmKHRoaXMuc3RhdGljTW9kZSl7aWYoIShhfHwobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxhPWwoe2NhbnZhczpuLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMCxwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwfSkpKSl0aHJvdyBuZXcgRXJyb3IoImVycm9yIGNyZWF0aW5nIHN0YXRpYyBjYW52YXMvY29udGV4dCBmb3IgaW1hZ2Ugc2VydmVyIik7dC5nbD1hLHQuY2FudmFzPW59dmFyIGU9MDt0cnl7dGhpcy5nbHBsb3Q9cyh0KX1jYXRjaChyKXtlKys7dHJ5e3RoaXMuZ2xwbG90PXModCl9Y2F0Y2godCl7ZSsrfX1yZXR1cm4gZTwyfSxrLmluaXRpYWxpemVHTENhbWVyYT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZnVsbFNjZW5lTGF5b3V0LmNhbWVyYSxlPSJvcnRob2dyYXBoaWMiPT09dC5wcm9qZWN0aW9uLnR5cGU7dGhpcy5jYW1lcmE9byh0aGlzLmNvbnRhaW5lcix7Y2VudGVyOlt0LmNlbnRlci54LHQuY2VudGVyLnksdC5jZW50ZXIuel0sZXllOlt0LmV5ZS54LHQuZXllLnksdC5leWUuel0sdXA6W3QudXAueCx0LnVwLnksdC51cC56XSxfb3J0aG86ZSx6b29tTWluOi4wMSx6b29tTWF4OjEwMCxtb2RlOiJvcmJpdCJ9KX0say5pbml0aWFsaXplR0xQbG90PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0LmluaXRpYWxpemVHTENhbWVyYSgpLCF0LnRyeUNyZWF0ZVBsb3QoKSlyZXR1cm4gZyh0KTt0LnRyYWNlcz17fSx0Lm1ha2U0dGhEaW1lbnNpb24oKTt2YXIgZT10LmdyYXBoRGl2LHI9ZS5sYXlvdXQsbj1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiB0LmlzQ2FtZXJhQ2hhbmdlZChyKSYmKGVbdC5pZCsiLmNhbWVyYSJdPXQuZ2V0Q2FtZXJhKCkpLHQuaXNBc3BlY3RDaGFuZ2VkKHIpJiYoZVt0LmlkKyIuYXNwZWN0cmF0aW8iXT10LmdscGxvdC5nZXRBc3BlY3RyYXRpbygpKSxlfSxhPWZ1bmN0aW9uKHQpe2lmKCExIT09dC5mdWxsU2NlbmVMYXlvdXQuZHJhZ21vZGUpe3ZhciBlPW4oKTt0LnNhdmVMYXlvdXQociksdC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGUpfX07cmV0dXJuIHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixmdW5jdGlvbigpe2EodCl9KSx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGZ1bmN0aW9uKHIpe2lmKGUuX2NvbnRleHQuX3Njcm9sbFpvb20uZ2wzZCl7aWYodC5jYW1lcmEuX29ydGhvKXt2YXIgbj1yLmRlbHRhWD5yLmRlbHRhWT8xLjE6MS8xLjEsaT10LmdscGxvdC5nZXRBc3BlY3RyYXRpbygpO3QuZ2xwbG90LnNldEFzcGVjdHJhdGlvKHt4Om4qaS54LHk6bippLnksejpuKmkuen0pfWEodCl9fSwhIWMmJntwYXNzaXZlOiExfSksdC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsZnVuY3Rpb24oKXtpZighMSE9PXQuZnVsbFNjZW5lTGF5b3V0LmRyYWdtb2RlJiYwIT09dC5jYW1lcmEubW91c2VMaXN0ZW5lci5idXR0b25zKXt2YXIgZT1uKCk7dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGUpfX0pLHQuc3RhdGljTW9kZXx8dC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGZ1bmN0aW9uKHIpe2UmJmUuZW1pdCYmZS5lbWl0KCJwbG90bHlfd2ViZ2xjb250ZXh0bG9zdCIse2V2ZW50OnIsbGF5ZXI6dC5pZH0pfSwhMSksdC5nbHBsb3Qub25jb250ZXh0bG9zcz1mdW5jdGlvbigpe3QucmVjb3ZlckNvbnRleHQoKX0sdC5nbHBsb3Qub25yZW5kZXI9ZnVuY3Rpb24oKXt0LnJlbmRlcigpfSwhMH0say5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMscj1lLmdyYXBoRGl2LG49ZS5zdmdDb250YWluZXIsYT1lLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPWEud2lkdGgsbz1hLmhlaWdodDtuLnNldEF0dHJpYnV0ZU5TKG51bGwsInZpZXdCb3giLCIwIDAgIitpKyIgIitvKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixpKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsbykseChlKSxlLmdscGxvdC5heGVzLnVwZGF0ZShlLmF4ZXNPcHRpb25zKTtmb3IodmFyIHMsbD1PYmplY3Qua2V5cyhlLnRyYWNlcyksYz1udWxsLHU9ZS5nbHBsb3Quc2VsZWN0aW9uLGQ9MDtkPGwubGVuZ3RoOysrZCkic2tpcCIhPT0odD1lLnRyYWNlc1tsW2RdXSkuZGF0YS5ob3ZlcmluZm8mJnQuaGFuZGxlUGljayh1KSYmKGM9dCksdC5zZXRDb250b3VyTGV2ZWxzJiZ0LnNldENvbnRvdXJMZXZlbHMoKTtmdW5jdGlvbiBnKHQscil7dmFyIG49ZS5mdWxsU2NlbmVMYXlvdXRbdF07cmV0dXJuIGYudGlja1RleHQobixuLmQybChyKSwiaG92ZXIiKS50ZXh0fWlmKG51bGwhPT1jKXt2YXIgbT12KGUuZ2xwbG90LmNhbWVyYVBhcmFtcyx1LmRhdGFDb29yZGluYXRlKTt0PWMuZGF0YTt2YXIgeSxiPXIuX2Z1bGxEYXRhW3QuaW5kZXhdLF89dS5pbmRleCx3PXt4TGFiZWw6ZygieGF4aXMiLHUudHJhY2VDb29yZGluYXRlWzBdKSx5TGFiZWw6ZygieWF4aXMiLHUudHJhY2VDb29yZGluYXRlWzFdKSx6TGFiZWw6ZygiemF4aXMiLHUudHJhY2VDb29yZGluYXRlWzJdKX0saz1wLmNhc3RIb3ZlcmluZm8oYixlLmZ1bGxMYXlvdXQsXyksVD0oa3x8IiIpLnNwbGl0KCIrIiksTT1rJiYiYWxsIj09PWs7Yi5ob3ZlcnRlbXBsYXRlfHxNfHwoLTE9PT1ULmluZGV4T2YoIngiKSYmKHcueExhYmVsPXZvaWQgMCksLTE9PT1ULmluZGV4T2YoInkiKSYmKHcueUxhYmVsPXZvaWQgMCksLTE9PT1ULmluZGV4T2YoInoiKSYmKHcuekxhYmVsPXZvaWQgMCksLTE9PT1ULmluZGV4T2YoInRleHQiKSYmKHUudGV4dExhYmVsPXZvaWQgMCksLTE9PT1ULmluZGV4T2YoIm5hbWUiKSYmKGMubmFtZT12b2lkIDApKTt2YXIgQT1bXTsiY29uZSI9PT10LnR5cGV8fCJzdHJlYW10dWJlIj09PXQudHlwZT8ody51TGFiZWw9ZygieGF4aXMiLHUudHJhY2VDb29yZGluYXRlWzNdKSwoTXx8LTEhPT1ULmluZGV4T2YoInUiKSkmJkEucHVzaCgidTogIit3LnVMYWJlbCksdy52TGFiZWw9ZygieWF4aXMiLHUudHJhY2VDb29yZGluYXRlWzRdKSwoTXx8LTEhPT1ULmluZGV4T2YoInYiKSkmJkEucHVzaCgidjogIit3LnZMYWJlbCksdy53TGFiZWw9ZygiemF4aXMiLHUudHJhY2VDb29yZGluYXRlWzVdKSwoTXx8LTEhPT1ULmluZGV4T2YoInciKSkmJkEucHVzaCgidzogIit3LndMYWJlbCksdy5ub3JtTGFiZWw9dS50cmFjZUNvb3JkaW5hdGVbNl0udG9QcmVjaXNpb24oMyksKE18fC0xIT09VC5pbmRleE9mKCJub3JtIikpJiZBLnB1c2goIm5vcm06ICIrdy5ub3JtTGFiZWwpLCJzdHJlYW10dWJlIj09PXQudHlwZSYmKHcuZGl2ZXJnZW5jZUxhYmVsPXUudHJhY2VDb29yZGluYXRlWzddLnRvUHJlY2lzaW9uKDMpLChNfHwtMSE9PVQuaW5kZXhPZigiZGl2ZXJnZW5jZSIpKSYmQS5wdXNoKCJkaXZlcmdlbmNlOiAiK3cuZGl2ZXJnZW5jZUxhYmVsKSksdS50ZXh0TGFiZWwmJkEucHVzaCh1LnRleHRMYWJlbCkseT1BLmpvaW4oIjxicj4iKSk6Imlzb3N1cmZhY2UiPT09dC50eXBlfHwidm9sdW1lIj09PXQudHlwZT8ody52YWx1ZUxhYmVsPWYudGlja1RleHQoZS5fbW9ja0F4aXMsZS5fbW9ja0F4aXMuZDJsKHUudHJhY2VDb29yZGluYXRlWzNdKSwiaG92ZXIiKS50ZXh0LEEucHVzaCgidmFsdWU6ICIrdy52YWx1ZUxhYmVsKSx1LnRleHRMYWJlbCYmQS5wdXNoKHUudGV4dExhYmVsKSx5PUEuam9pbigiPGJyPiIpKTp5PXUudGV4dExhYmVsO3ZhciBTPXt4OnUudHJhY2VDb29yZGluYXRlWzBdLHk6dS50cmFjZUNvb3JkaW5hdGVbMV0sejp1LnRyYWNlQ29vcmRpbmF0ZVsyXSxkYXRhOmIuX2lucHV0LGZ1bGxEYXRhOmIsY3VydmVOdW1iZXI6Yi5pbmRleCxwb2ludE51bWJlcjpffTtwLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShTLGIsXyksdC5fbW9kdWxlLmV2ZW50RGF0YSYmKFM9Yi5fbW9kdWxlLmV2ZW50RGF0YShTLHUsYix7fSxfKSk7dmFyIEU9e3BvaW50czpbU119O2UuZnVsbFNjZW5lTGF5b3V0LmhvdmVybW9kZSYmcC5sb25lSG92ZXIoe3RyYWNlOmIseDooLjUrLjUqbVswXS9tWzNdKSppLHk6KC41LS41Km1bMV0vbVszXSkqbyx4TGFiZWw6dy54TGFiZWwseUxhYmVsOncueUxhYmVsLHpMYWJlbDp3LnpMYWJlbCx0ZXh0OnksbmFtZTpjLm5hbWUsY29sb3I6cC5jYXN0SG92ZXJPcHRpb24oYixfLCJiZ2NvbG9yIil8fGMuY29sb3IsYm9yZGVyQ29sb3I6cC5jYXN0SG92ZXJPcHRpb24oYixfLCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6cC5jYXN0SG92ZXJPcHRpb24oYixfLCJmb250LmZhbWlseSIpLGZvbnRTaXplOnAuY2FzdEhvdmVyT3B0aW9uKGIsXywiZm9udC5zaXplIiksZm9udENvbG9yOnAuY2FzdEhvdmVyT3B0aW9uKGIsXywiZm9udC5jb2xvciIpLG5hbWVMZW5ndGg6cC5jYXN0SG92ZXJPcHRpb24oYixfLCJuYW1lbGVuZ3RoIiksdGV4dEFsaWduOnAuY2FzdEhvdmVyT3B0aW9uKGIsXywiYWxpZ24iKSxob3ZlcnRlbXBsYXRlOmguY2FzdE9wdGlvbihiLF8sImhvdmVydGVtcGxhdGUiKSxob3ZlcnRlbXBsYXRlTGFiZWxzOmguZXh0ZW5kRmxhdCh7fSxTLHcpLGV2ZW50RGF0YTpbU119LHtjb250YWluZXI6bixnZDpyfSksdS5idXR0b25zJiZ1LmRpc3RhbmNlPDU/ci5lbWl0KCJwbG90bHlfY2xpY2siLEUpOnIuZW1pdCgicGxvdGx5X2hvdmVyIixFKSxzPUV9ZWxzZSBwLmxvbmVVbmhvdmVyKG4pLHIuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHMpO2UuZHJhd0Fubm90YXRpb25zKGUpfSxrLnJlY292ZXJDb250ZXh0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0LmdscGxvdC5kaXNwb3NlKCk7dmFyIGU9ZnVuY3Rpb24oKXt0LmdscGxvdC5nbC5pc0NvbnRleHRMb3N0KCk/cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOnQuaW5pdGlhbGl6ZUdMUGxvdCgpP3QucGxvdC5hcHBseSh0LHQucGxvdEFyZ3MpOmguZXJyb3IoIkNhdGFzdHJvcGhpYyBhbmQgdW5yZWNvdmVyYWJsZSBXZWJHTCBlcnJvci4gQ29udGV4dCBsb3N0LiIpfTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9O3ZhciBUPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07ZnVuY3Rpb24gTSh0LGUscil7Zm9yKHZhciBuPXQuZnVsbFNjZW5lTGF5b3V0LGE9MDthPDM7YSsrKXt2YXIgaT1UW2FdLG89aS5jaGFyQXQoMCkscz1uW2ldLGw9ZVtvXSxjPWVbbysiY2FsZW5kYXIiXSx1PWVbIl8iK28rImxlbmd0aCJdO2lmKGguaXNBcnJheU9yVHlwZWRBcnJheShsKSlmb3IodmFyIGYscD0wO3A8KHV8fGwubGVuZ3RoKTtwKyspaWYoaC5pc0FycmF5T3JUeXBlZEFycmF5KGxbcF0pKWZvcih2YXIgZD0wO2Q8bFtwXS5sZW5ndGg7KytkKWY9cy5kMmwobFtwXVtkXSwwLGMpLCFpc05hTihmKSYmaXNGaW5pdGUoZikmJihyWzBdW2FdPU1hdGgubWluKHJbMF1bYV0sZiksclsxXVthXT1NYXRoLm1heChyWzFdW2FdLGYpKTtlbHNlIGY9cy5kMmwobFtwXSwwLGMpLCFpc05hTihmKSYmaXNGaW5pdGUoZikmJihyWzBdW2FdPU1hdGgubWluKHJbMF1bYV0sZiksclsxXVthXT1NYXRoLm1heChyWzFdW2FdLGYpKTtlbHNlIHJbMF1bYV09TWF0aC5taW4oclswXVthXSwwKSxyWzFdW2FdPU1hdGgubWF4KHJbMV1bYV0sdS0xKX19ay5wbG90PWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLnBsb3RBcmdzPVt0LGUscl0sIXRoaXMuZ2xwbG90LmNvbnRleHRMb3N0KXt2YXIgbixhLGksbyxzLGwsYz1lW3RoaXMuaWRdLHU9clt0aGlzLmlkXTt0aGlzLmZ1bGxMYXlvdXQ9ZSx0aGlzLmZ1bGxTY2VuZUxheW91dD1jLHRoaXMuYXhlc09wdGlvbnMubWVyZ2UoZSxjKSx0aGlzLnNwaWtlT3B0aW9ucy5tZXJnZShjKSx0aGlzLnNldFZpZXdwb3J0KGMpLHRoaXMudXBkYXRlRngoYy5kcmFnbW9kZSxjLmhvdmVybW9kZSksdGhpcy5jYW1lcmEuZW5hYmxlV2hlZWw9dGhpcy5ncmFwaERpdi5fY29udGV4dC5fc2Nyb2xsWm9vbS5nbDNkLHRoaXMuZ2xwbG90LnNldENsZWFyQ29sb3IoZChjLmJnY29sb3IpKSx0aGlzLnNldENvbnZlcnQocyksdD9BcnJheS5pc0FycmF5KHQpfHwodD1bdF0pOnQ9W107dmFyIGg9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKGk9MDtpPHQubGVuZ3RoOysraSkhMD09PShuPXRbaV0pLnZpc2libGUmJjAhPT1uLl9sZW5ndGgmJk0odGhpcyxuLGgpOyFmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmZ1bGxTY2VuZUxheW91dCxuPXIuYW5ub3RhdGlvbnN8fFtdLGE9MDthPDM7YSsrKWZvcih2YXIgaT1UW2FdLG89aS5jaGFyQXQoMCkscz1yW2ldLGw9MDtsPG4ubGVuZ3RoO2wrKyl7dmFyIGM9bltsXTtpZihjLnZpc2libGUpe3ZhciB1PXMucjJsKGNbb10pOyFpc05hTih1KSYmaXNGaW5pdGUodSkmJihlWzBdW2FdPU1hdGgubWluKGVbMF1bYV0sdSksZVsxXVthXT1NYXRoLm1heChlWzFdW2FdLHUpKX19fSh0aGlzLGgpO3ZhciBmPVsxLDEsMV07Zm9yKG89MDtvPDM7KytvKWhbMV1bb109PT1oWzBdW29dP2Zbb109MTpmW29dPTEvKGhbMV1bb10taFswXVtvXSk7Zm9yKHRoaXMuZGF0YVNjYWxlPWYsdGhpcy5jb252ZXJ0QW5ub3RhdGlvbnModGhpcyksaT0wO2k8dC5sZW5ndGg7KytpKSEwPT09KG49dFtpXSkudmlzaWJsZSYmMCE9PW4uX2xlbmd0aCYmKChhPXRoaXMudHJhY2VzW24udWlkXSk/YS5kYXRhLnR5cGU9PT1uLnR5cGU/YS51cGRhdGUobik6KGEuZGlzcG9zZSgpLGE9bi5fbW9kdWxlLnBsb3QodGhpcyxuKSx0aGlzLnRyYWNlc1tuLnVpZF09YSk6KGE9bi5fbW9kdWxlLnBsb3QodGhpcyxuKSx0aGlzLnRyYWNlc1tuLnVpZF09YSksYS5uYW1lPW4ubmFtZSk7dmFyIHA9T2JqZWN0LmtleXModGhpcy50cmFjZXMpO3Q6Zm9yKGk9MDtpPHAubGVuZ3RoOysraSl7Zm9yKG89MDtvPHQubGVuZ3RoOysrbylpZih0W29dLnVpZD09PXBbaV0mJiEwPT09dFtvXS52aXNpYmxlJiYwIT09dFtvXS5fbGVuZ3RoKWNvbnRpbnVlIHQ7KGE9dGhpcy50cmFjZXNbcFtpXV0pLmRpc3Bvc2UoKSxkZWxldGUgdGhpcy50cmFjZXNbcFtpXV19dGhpcy5nbHBsb3Qub2JqZWN0cy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyYWNlLmRhdGEuaW5kZXgtZS5fdHJhY2UuZGF0YS5pbmRleH0pO3ZhciBnPVtbMCwwLDBdLFswLDAsMF1dLHY9W10sbT17fTtmb3IoaT0wO2k8MzsrK2kpe2lmKChsPShzPWNbVFtpXV0pLnR5cGUpaW4gbT8obVtsXS5hY2MqPWZbaV0sbVtsXS5jb3VudCs9MSk6bVtsXT17YWNjOmZbaV0sY291bnQ6MX0scy5hdXRvcmFuZ2Upe2dbMF1baV09MS8wLGdbMV1baV09LTEvMDt2YXIgeT10aGlzLmdscGxvdC5vYmplY3RzLHg9dGhpcy5mdWxsU2NlbmVMYXlvdXQuYW5ub3RhdGlvbnN8fFtdLGI9cy5fbmFtZS5jaGFyQXQoMCk7Zm9yKG89MDtvPHkubGVuZ3RoO28rKyl7dmFyIF89eVtvXSx3PV8uYm91bmRzLGs9Xy5fdHJhY2UuZGF0YS5fcGFkfHwwOyJFcnJvckJhcnMiPT09Xy5jb25zdHJ1Y3Rvci5uYW1lJiZzLl9sb3dlckxvZ0Vycm9yQm91bmQ/Z1swXVtpXT1NYXRoLm1pbihnWzBdW2ldLHMuX2xvd2VyTG9nRXJyb3JCb3VuZCk6Z1swXVtpXT1NYXRoLm1pbihnWzBdW2ldLHdbMF1baV0vZltpXS1rKSxnWzFdW2ldPU1hdGgubWF4KGdbMV1baV0sd1sxXVtpXS9mW2ldK2spfWZvcihvPTA7bzx4Lmxlbmd0aDtvKyspe3ZhciBBPXhbb107aWYoQS52aXNpYmxlKXt2YXIgUz1zLnIybChBW2JdKTtnWzBdW2ldPU1hdGgubWluKGdbMF1baV0sUyksZ1sxXVtpXT1NYXRoLm1heChnWzFdW2ldLFMpfX1pZigicmFuZ2Vtb2RlImluIHMmJiJ0b3plcm8iPT09cy5yYW5nZW1vZGUmJihnWzBdW2ldPU1hdGgubWluKGdbMF1baV0sMCksZ1sxXVtpXT1NYXRoLm1heChnWzFdW2ldLDApKSxnWzBdW2ldPmdbMV1baV0pZ1swXVtpXT0tMSxnWzFdW2ldPTE7ZWxzZXt2YXIgRT1nWzFdW2ldLWdbMF1baV07Z1swXVtpXS09RS8zMixnWzFdW2ldKz1FLzMyfWlmKCJyZXZlcnNlZCI9PT1zLmF1dG9yYW5nZSl7dmFyIEw9Z1swXVtpXTtnWzBdW2ldPWdbMV1baV0sZ1sxXVtpXT1MfX1lbHNle3ZhciBDPXMucmFuZ2U7Z1swXVtpXT1zLnIybChDWzBdKSxnWzFdW2ldPXMucjJsKENbMV0pfWdbMF1baV09PT1nWzFdW2ldJiYoZ1swXVtpXS09MSxnWzFdW2ldKz0xKSx2W2ldPWdbMV1baV0tZ1swXVtpXSx0aGlzLmdscGxvdC5zZXRCb3VuZHMoaSx7bWluOmdbMF1baV0qZltpXSxtYXg6Z1sxXVtpXSpmW2ldfSl9dmFyIFA9WzEsMSwxXTtmb3IoaT0wO2k8MzsrK2kpe3ZhciBPPW1bbD0ocz1jW1RbaV1dKS50eXBlXTtQW2ldPU1hdGgucG93KE8uYWNjLDEvTy5jb3VudCkvZltpXX12YXIgejtpZigiYXV0byI9PT1jLmFzcGVjdG1vZGUpej1NYXRoLm1heC5hcHBseShudWxsLFApL01hdGgubWluLmFwcGx5KG51bGwsUCk8PTQ/UDpbMSwxLDFdO2Vsc2UgaWYoImN1YmUiPT09Yy5hc3BlY3Rtb2RlKXo9WzEsMSwxXTtlbHNlIGlmKCJkYXRhIj09PWMuYXNwZWN0bW9kZSl6PVA7ZWxzZXtpZigibWFudWFsIiE9PWMuYXNwZWN0bW9kZSl0aHJvdyBuZXcgRXJyb3IoInNjZW5lLmpzIGFzcGVjdFJhdGlvIHdhcyBub3Qgb25lIG9mIHRoZSBlbnVtZXJhdGVkIHR5cGVzIik7dmFyIEk9Yy5hc3BlY3RyYXRpbzt6PVtJLngsSS55LEkuel19Yy5hc3BlY3RyYXRpby54PXUuYXNwZWN0cmF0aW8ueD16WzBdLGMuYXNwZWN0cmF0aW8ueT11LmFzcGVjdHJhdGlvLnk9elsxXSxjLmFzcGVjdHJhdGlvLno9dS5hc3BlY3RyYXRpby56PXpbMl0sdGhpcy5nbHBsb3Quc2V0QXNwZWN0cmF0aW8oYy5hc3BlY3RyYXRpbyksdGhpcy52aWV3SW5pdGlhbC5hc3BlY3RyYXRpb3x8KHRoaXMudmlld0luaXRpYWwuYXNwZWN0cmF0aW89e3g6Yy5hc3BlY3RyYXRpby54LHk6Yy5hc3BlY3RyYXRpby55LHo6Yy5hc3BlY3RyYXRpby56fSk7dmFyIEQ9Yy5kb21haW58fG51bGwsUj1lLl9zaXplfHxudWxsO2lmKEQmJlIpe3ZhciBGPXRoaXMuY29udGFpbmVyLnN0eWxlO0YucG9zaXRpb249ImFic29sdXRlIixGLmxlZnQ9Ui5sK0QueFswXSpSLncrInB4IixGLnRvcD1SLnQrKDEtRC55WzFdKSpSLmgrInB4IixGLndpZHRoPVIudyooRC54WzFdLUQueFswXSkrInB4IixGLmhlaWdodD1SLmgqKEQueVsxXS1ELnlbMF0pKyJweCJ9dGhpcy5nbHBsb3QucmVkcmF3KCl9fSxrLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmdscGxvdCYmKHRoaXMuY2FtZXJhLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSx0aGlzLmNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsdGhpcy5jYW1lcmEud2hlZWxMaXN0ZW5lciksdGhpcy5jYW1lcmE9bnVsbCx0aGlzLmdscGxvdC5kaXNwb3NlKCksdGhpcy5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lciksdGhpcy5nbHBsb3Q9bnVsbCl9LGsuZ2V0Q2FtZXJhPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuY2FtZXJhLnZpZXcucmVjYWxjTWF0cml4KHRoaXMuY2FtZXJhLnZpZXcubGFzdFQoKSkse3VwOnt4Oih0PXRoaXMuY2FtZXJhKS51cFswXSx5OnQudXBbMV0sejp0LnVwWzJdfSxjZW50ZXI6e3g6dC5jZW50ZXJbMF0seTp0LmNlbnRlclsxXSx6OnQuY2VudGVyWzJdfSxleWU6e3g6dC5leWVbMF0seTp0LmV5ZVsxXSx6OnQuZXllWzJdfSxwcm9qZWN0aW9uOnt0eXBlOiEwPT09dC5fb3J0aG8/Im9ydGhvZ3JhcGhpYyI6InBlcnNwZWN0aXZlIn19fSxrLnNldFZpZXdwb3J0PWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5jYW1lcmE7dGhpcy5jYW1lcmEubG9va0F0LmFwcGx5KHRoaXMsW1soZT1yKS5leWUueCxlLmV5ZS55LGUuZXllLnpdLFtlLmNlbnRlci54LGUuY2VudGVyLnksZS5jZW50ZXIuel0sW2UudXAueCxlLnVwLnksZS51cC56XV0pLHRoaXMuZ2xwbG90LnNldEFzcGVjdHJhdGlvKHQuYXNwZWN0cmF0aW8pLCJvcnRob2dyYXBoaWMiPT09ci5wcm9qZWN0aW9uLnR5cGUhPT10aGlzLmNhbWVyYS5fb3J0aG8mJih0aGlzLmdscGxvdC5yZWRyYXcoKSx0aGlzLmdscGxvdC5jbGVhclJHQkEoKSx0aGlzLmdscGxvdC5kaXNwb3NlKCksdGhpcy5pbml0aWFsaXplR0xQbG90KCkpfSxrLmlzQ2FtZXJhQ2hhbmdlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldENhbWVyYSgpLHI9aC5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrIi5jYW1lcmEiKS5nZXQoKTtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBhPVsidXAiLCJjZW50ZXIiLCJleWUiXSxpPVsieCIsInkiLCJ6Il07cmV0dXJuIGVbYVtyXV0mJnRbYVtyXV1baVtuXV09PT1lW2Fbcl1dW2lbbl1dfXZhciBhPSExO2lmKHZvaWQgMD09PXIpYT0hMDtlbHNle2Zvcih2YXIgaT0wO2k8MztpKyspZm9yKHZhciBvPTA7bzwzO28rKylpZighbihlLHIsaSxvKSl7YT0hMDticmVha30oIXIucHJvamVjdGlvbnx8ZS5wcm9qZWN0aW9uJiZlLnByb2plY3Rpb24udHlwZSE9PXIucHJvamVjdGlvbi50eXBlKSYmKGE9ITApfXJldHVybiBhfSxrLmlzQXNwZWN0Q2hhbmdlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdscGxvdC5nZXRBc3BlY3RyYXRpbygpLHI9aC5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrIi5hc3BlY3RyYXRpbyIpLmdldCgpO3JldHVybiB2b2lkIDA9PT1yfHxyLnghPT1lLnh8fHIueSE9PWUueXx8ci56IT09ZS56fSxrLnNhdmVMYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLGEsaSxvLHM9dGhpcy5mdWxsTGF5b3V0LGw9dGhpcy5pc0NhbWVyYUNoYW5nZWQodCksYz10aGlzLmlzQXNwZWN0Q2hhbmdlZCh0KSxmPWx8fGM7aWYoZil7dmFyIHA9e307aWYobCYmKGU9dGhpcy5nZXRDYW1lcmEoKSxuPShyPWgubmVzdGVkUHJvcGVydHkodCx0aGlzLmlkKyIuY2FtZXJhIikpLmdldCgpLHBbdGhpcy5pZCsiLmNhbWVyYSJdPW4pLGMmJihhPXRoaXMuZ2xwbG90LmdldEFzcGVjdHJhdGlvKCksbz0oaT1oLm5lc3RlZFByb3BlcnR5KHQsdGhpcy5pZCsiLmFzcGVjdHJhdGlvIikpLmdldCgpLHBbdGhpcy5pZCsiLmFzcGVjdHJhdGlvIl09byksdS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0Iix0LHMuX3ByZUdVSSxwKSxsKXIuc2V0KGUpLGgubmVzdGVkUHJvcGVydHkocyx0aGlzLmlkKyIuY2FtZXJhIikuc2V0KGUpO2lmKGMpaS5zZXQoYSksaC5uZXN0ZWRQcm9wZXJ0eShzLHRoaXMuaWQrIi5hc3BlY3RyYXRpbyIpLnNldChhKSx0aGlzLmdscGxvdC5yZWRyYXcoKX1yZXR1cm4gZn0say51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY2FtZXJhO2lmKHIpaWYoIm9yYml0Ij09PXQpci5tb2RlPSJvcmJpdCIsci5rZXlCaW5kaW5nTW9kZT0icm90YXRlIjtlbHNlIGlmKCJ0dXJudGFibGUiPT09dCl7ci51cD1bMCwwLDFdLHIubW9kZT0idHVybnRhYmxlIixyLmtleUJpbmRpbmdNb2RlPSJyb3RhdGUiO3ZhciBuPXRoaXMuZ3JhcGhEaXYsYT1uLl9mdWxsTGF5b3V0LGk9dGhpcy5mdWxsU2NlbmVMYXlvdXQuY2FtZXJhLG89aS51cC54LHM9aS51cC55LGw9aS51cC56O2lmKGwvTWF0aC5zcXJ0KG8qbytzKnMrbCpsKTwuOTk5KXt2YXIgYz10aGlzLmlkKyIuY2FtZXJhLnVwIixmPXt4OjAseTowLHo6MX0scD17fTtwW2NdPWY7dmFyIGQ9bi5sYXlvdXQ7dS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixkLGEuX3ByZUdVSSxwKSxpLnVwPWYsaC5uZXN0ZWRQcm9wZXJ0eShkLGMpLnNldChmKX19ZWxzZSByLmtleUJpbmRpbmdNb2RlPXQ7dGhpcy5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlPWV9LGsudG9JbWFnZT1mdW5jdGlvbih0KXt0fHwodD0icG5nIiksdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChuKSx0aGlzLmdscGxvdC5yZWRyYXcoKTt2YXIgZT10aGlzLmdscGxvdC5nbCxyPWUuZHJhd2luZ0J1ZmZlcldpZHRoLGE9ZS5kcmF3aW5nQnVmZmVySGVpZ2h0O2UuYmluZEZyYW1lYnVmZmVyKGUuRlJBTUVCVUZGRVIsbnVsbCk7dmFyIGk9bmV3IFVpbnQ4QXJyYXkociphKjQpO2UucmVhZFBpeGVscygwLDAscixhLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsaSk7Zm9yKHZhciBvPTAscz1hLTE7bzxzOysrbywtLXMpZm9yKHZhciBsPTA7bDxyOysrbClmb3IodmFyIGM9MDtjPDQ7KytjKXt2YXIgdT1pWzQqKHIqbytsKStjXTtpWzQqKHIqbytsKStjXT1pWzQqKHIqcytsKStjXSxpWzQqKHIqcytsKStjXT11fXZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2gud2lkdGg9cixoLmhlaWdodD1hO3ZhciBmLHA9aC5nZXRDb250ZXh0KCIyZCIpLGQ9cC5jcmVhdGVJbWFnZURhdGEocixhKTtzd2l0Y2goZC5kYXRhLnNldChpKSxwLnB1dEltYWdlRGF0YShkLDAsMCksdCl7Y2FzZSJqcGVnIjpmPWgudG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJ3ZWJwIjpmPWgudG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7ZGVmYXVsdDpmPWgudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1yZXR1cm4gdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChuKSxmfSxrLnNldENvbnZlcnQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDM7dCsrKXt2YXIgZT10aGlzLmZ1bGxTY2VuZUxheW91dFtUW3RdXTtmLnNldENvbnZlcnQoZSx0aGlzLmZ1bGxMYXlvdXQpLGUuc2V0U2NhbGU9aC5ub29wfX0say5tYWtlNHRoRGltZW5zaW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdi5fZnVsbExheW91dDt0aGlzLl9tb2NrQXhpcz17dHlwZToibGluZWFyIixzaG93ZXhwb25lbnQ6ImFsbCIsZXhwb25lbnRmb3JtYXQ6IkIifSxmLnNldENvbnZlcnQodGhpcy5fbW9ja0F4aXMsdCl9LGUuZXhwb3J0cz13fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjYzMCwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyI6NzM4LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4vbGF5b3V0L2NvbnZlcnQiOjgwOSwiLi9sYXlvdXQvc3Bpa2VzIjo4MTIsIi4vbGF5b3V0L3RpY2tfbWFya3MiOjgxMywiLi9wcm9qZWN0Ijo4MTQsImdsLXBsb3QzZCI6MjkzLCJoYXMtcGFzc2l2ZS1ldmVudHMiOjQxMywiaXMtbW9iaWxlIjo0MjIsIndlYmdsLWNvbnRleHQiOjU1NX1dLDgxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7bj1ufHx0Lmxlbmd0aDtmb3IodmFyIGE9bmV3IEFycmF5KG4pLGk9MDtpPG47aSsrKWFbaV09W3RbaV0sZVtpXSxyW2ldXTtyZXR1cm4gYX19LHt9XSw4MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLG89dCgiLi9wYWRfYXR0cmlidXRlcyIpLHM9dCgiLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD1uKHtlZGl0VHlwZToiY2FsYyJ9KTtsLmZhbWlseS5kZmx0PSciT3BlbiBTYW5zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLGwuc2l6ZS5kZmx0PTEyLGwuY29sb3IuZGZsdD1pLmRlZmF1bHRMaW5lLGUuZXhwb3J0cz17Zm9udDpsLHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImxheW91dHN0eWxlIn0pLHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImNvbnRhaW5lciIsdmFsdWVzOlsiY29udGFpbmVyIiwicGFwZXIiXSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJjb250YWluZXIiLHZhbHVlczpbImNvbnRhaW5lciIsInBhcGVyIl0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41LGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoiYXV0byIsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiYXV0byIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImF1dG8iLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSxwYWQ6cyhvKHtlZGl0VHlwZToibGF5b3V0c3R5bGUifSkse30pLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHVuaWZvcm10ZXh0Onttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExLCJoaWRlIiwic2hvdyJdLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxtaW5zaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sYXV0b3NpemU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6Im5vbmUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MTAsZGZsdDo3MDAsZWRpdFR5cGU6InBsb3QifSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEwLGRmbHQ6NDUwLGVkaXRUeXBlOiJwbG90In0sbWFyZ2luOntsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6InBsb3QifSxyOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6ODAsZWRpdFR5cGU6InBsb3QifSx0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAwLGVkaXRUeXBlOiJwbG90In0sYjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0scGFkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGF1dG9leHBhbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHBhcGVyX2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuYmFja2dyb3VuZCxlZGl0VHlwZToicGxvdCJ9LHBsb3RfYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5iYWNrZ3JvdW5kLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHNlcGFyYXRvcnM6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSxoaWRlc291cmNlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHNob3dsZWdlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJsZWdlbmQifSxjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixkZmx0OmkuZGVmYXVsdHMsZWRpdFR5cGU6ImNhbGMifSxkYXRhcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdHJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sc2VsZWN0aW9ucmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSx0ZW1wbGF0ZTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LG1vZGViYXI6e29yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6ImgiLGVkaXRUeXBlOiJtb2RlYmFyIn0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJtb2RlYmFyIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibW9kZWJhciJ9LGFjdGl2ZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im1vZGViYXIifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6Im1vZGViYXIifSxtZXRhOnt2YWxUeXBlOiJhbnkiLGFycmF5T2s6ITAsZWRpdFR5cGU6InBsb3QifSx0cmFuc2l0aW9uOnMoe30sYS50cmFuc2l0aW9uLHtlZGl0VHlwZToibm9uZSJ9KSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImxheW91dHN0eWxlIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9KX19fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTkxLCIuLi9saWIvZXh0ZW5kIjo3MDgsIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjc2MCwiLi9mb250X2F0dHJpYnV0ZXMiOjc5MSwiLi9wYWRfYXR0cmlidXRlcyI6ODI1fV0sODE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXsib3Blbi1zdHJlZXQtbWFwIjp7aWQ6Im9zbSIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktb3NtLXRpbGVzIjp7dHlwZToicmFzdGVyIixhdHRyaWJ1dGlvbjonPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9hYm91dC8iIHRhcmdldD0iX2JsYW5rIj5ceGE5IE9wZW5TdHJlZXRNYXA8L2E+Jyx0aWxlczpbImh0dHBzOi8vYS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZyIsImh0dHBzOi8vYi50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZyJdLHRpbGVTaXplOjI1Nn19LGxheWVyczpbe2lkOiJwbG90bHktb3NtLXRpbGVzIix0eXBlOiJyYXN0ZXIiLHNvdXJjZToicGxvdGx5LW9zbS10aWxlcyIsbWluem9vbTowLG1heHpvb206MjJ9XX0sIndoaXRlLWJnIjp7aWQ6IndoaXRlLWJnIix2ZXJzaW9uOjgsc291cmNlczp7fSxsYXllcnM6W3tpZDoid2hpdGUtYmciLHR5cGU6ImJhY2tncm91bmQiLHBhaW50OnsiYmFja2dyb3VuZC1jb2xvciI6IiNGRkZGRkYifSxtaW56b29tOjAsbWF4em9vbToyMn1dfSwiY2FydG8tcG9zaXRyb24iOntpZDoiY2FydG8tcG9zaXRyb24iLHZlcnNpb246OCxzb3VyY2VzOnsicGxvdGx5LWNhcnRvLXBvc2l0cm9uIjp7dHlwZToicmFzdGVyIixhdHRyaWJ1dGlvbjonPGEgaHJlZj0iaHR0cHM6Ly9jYXJ0by5jb20vIiB0YXJnZXQ9Il9ibGFuayI+XHhhOSBDQVJUTzwvYT4nLHRpbGVzOlsiaHR0cHM6Ly9jYXJ0b2RiLWJhc2VtYXBzLWMuZ2xvYmFsLnNzbC5mYXN0bHkubmV0L2xpZ2h0X2FsbC97en0ve3h9L3t5fS5wbmciXSx0aWxlU2l6ZToyNTZ9fSxsYXllcnM6W3tpZDoicGxvdGx5LWNhcnRvLXBvc2l0cm9uIix0eXBlOiJyYXN0ZXIiLHNvdXJjZToicGxvdGx5LWNhcnRvLXBvc2l0cm9uIixtaW56b29tOjAsbWF4em9vbToyMn1dfSwiY2FydG8tZGFya21hdHRlciI6e2lkOiJjYXJ0by1kYXJrbWF0dGVyIix2ZXJzaW9uOjgsc291cmNlczp7InBsb3RseS1jYXJ0by1kYXJrbWF0dGVyIjp7dHlwZToicmFzdGVyIixhdHRyaWJ1dGlvbjonPGEgaHJlZj0iaHR0cHM6Ly9jYXJ0by5jb20vIiB0YXJnZXQ9Il9ibGFuayI+XHhhOSBDQVJUTzwvYT4nLHRpbGVzOlsiaHR0cHM6Ly9jYXJ0b2RiLWJhc2VtYXBzLWMuZ2xvYmFsLnNzbC5mYXN0bHkubmV0L2RhcmtfYWxsL3t6fS97eH0ve3l9LnBuZyJdLHRpbGVTaXplOjI1Nn19LGxheWVyczpbe2lkOiJwbG90bHktY2FydG8tZGFya21hdHRlciIsdHlwZToicmFzdGVyIixzb3VyY2U6InBsb3RseS1jYXJ0by1kYXJrbWF0dGVyIixtaW56b29tOjAsbWF4em9vbToyMn1dfSwic3RhbWVuLXRlcnJhaW4iOntpZDoic3RhbWVuLXRlcnJhaW4iLHZlcnNpb246OCxzb3VyY2VzOnsicGxvdGx5LXN0YW1lbi10ZXJyYWluIjp7dHlwZToicmFzdGVyIixhdHRyaWJ1dGlvbjonTWFwIHRpbGVzIGJ5IDxhIGhyZWY9Imh0dHA6Ly9zdGFtZW4uY29tIj5TdGFtZW4gRGVzaWduPC9hPiwgdW5kZXIgPGEgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wIj5DQyBCWSAzLjA8L2E+IHwgRGF0YSBieSA8YSBocmVmPSJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmciPk9wZW5TdHJlZXRNYXA8L2E+LCB1bmRlciA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodCI+T0RiTDwvYT4uJyx0aWxlczpbImh0dHBzOi8vc3RhbWVuLXRpbGVzLmEuc3NsLmZhc3RseS5uZXQvdGVycmFpbi97en0ve3h9L3t5fS5wbmciXSx0aWxlU2l6ZToyNTZ9fSxsYXllcnM6W3tpZDoicGxvdGx5LXN0YW1lbi10ZXJyYWluIix0eXBlOiJyYXN0ZXIiLHNvdXJjZToicGxvdGx5LXN0YW1lbi10ZXJyYWluIixtaW56b29tOjAsbWF4em9vbToyMn1dfSwic3RhbWVuLXRvbmVyIjp7aWQ6InN0YW1lbi10b25lciIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktc3RhbWVuLXRvbmVyIjp7dHlwZToicmFzdGVyIixhdHRyaWJ1dGlvbjonTWFwIHRpbGVzIGJ5IDxhIGhyZWY9Imh0dHA6Ly9zdGFtZW4uY29tIj5TdGFtZW4gRGVzaWduPC9hPiwgdW5kZXIgPGEgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wIj5DQyBCWSAzLjA8L2E+IHwgRGF0YSBieSA8YSBocmVmPSJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmciPk9wZW5TdHJlZXRNYXA8L2E+LCB1bmRlciA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodCI+T0RiTDwvYT4uJyx0aWxlczpbImh0dHBzOi8vc3RhbWVuLXRpbGVzLmEuc3NsLmZhc3RseS5uZXQvdG9uZXIve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1zdGFtZW4tdG9uZXIiLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktc3RhbWVuLXRvbmVyIixtaW56b29tOjAsbWF4em9vbToyMn1dfSwic3RhbWVuLXdhdGVyY29sb3IiOntpZDoic3RhbWVuLXdhdGVyY29sb3IiLHZlcnNpb246OCxzb3VyY2VzOnsicGxvdGx5LXN0YW1lbi13YXRlcmNvbG9yIjp7dHlwZToicmFzdGVyIixhdHRyaWJ1dGlvbjonTWFwIHRpbGVzIGJ5IDxhIGhyZWY9Imh0dHA6Ly9zdGFtZW4uY29tIj5TdGFtZW4gRGVzaWduPC9hPiwgdW5kZXIgPGEgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wIj5DQyBCWSAzLjA8L2E+IHwgRGF0YSBieSA8YSBocmVmPSJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmciPk9wZW5TdHJlZXRNYXA8L2E+LCB1bmRlciA8YSBocmVmPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8zLjAiPkNDIEJZIFNBPC9hPi4nLHRpbGVzOlsiaHR0cHM6Ly9zdGFtZW4tdGlsZXMuYS5zc2wuZmFzdGx5Lm5ldC93YXRlcmNvbG9yL3t6fS97eH0ve3l9LnBuZyJdLHRpbGVTaXplOjI1Nn19LGxheWVyczpbe2lkOiJwbG90bHktc3RhbWVuLXdhdGVyY29sb3IiLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktc3RhbWVuLXdhdGVyY29sb3IiLG1pbnpvb206MCxtYXh6b29tOjIyfV19fSxhPU9iamVjdC5rZXlzKG4pO2UuZXhwb3J0cz17cmVxdWlyZWRWZXJzaW9uOiIxLjMuMiIsc3R5bGVVcmxQcmVmaXg6Im1hcGJveDovL3N0eWxlcy9tYXBib3gvIixzdHlsZVVybFN1ZmZpeDoidjkiLHN0eWxlVmFsdWVzTWFwYm94OlsiYmFzaWMiLCJzdHJlZXRzIiwib3V0ZG9vcnMiLCJsaWdodCIsImRhcmsiLCJzYXRlbGxpdGUiLCJzYXRlbGxpdGUtc3RyZWV0cyJdLHN0eWxlVmFsdWVEZmx0OiJiYXNpYyIsc3R5bGVzTm9uTWFwYm94Om4sc3R5bGVWYWx1ZXNOb25NYXBib3g6YSx0cmFjZUxheWVyUHJlZml4OiJwbG90bHktdHJhY2UtbGF5ZXItIixsYXlvdXRMYXllclByZWZpeDoicGxvdGx5LWxheW91dC1sYXllci0iLHdyb25nVmVyc2lvbkVycm9yTXNnOlsiWW91ciBjdXN0b20gcGxvdGx5LmpzIGJ1bmRsZSBpcyBub3QgdXNpbmcgdGhlIGNvcnJlY3QgbWFwYm94LWdsIHZlcnNpb24iLCJQbGVhc2UgaW5zdGFsbCBtYXBib3gtZ2xAMS4zLjIuIl0uam9pbigiXG4iKSxub0FjY2Vzc1Rva2VuRXJyb3JNc2c6WyJNaXNzaW5nIE1hcGJveCBhY2Nlc3MgdG9rZW4uIiwiTWFwYm94IHRyYWNlIHR5cGUgcmVxdWlyZSBhIE1hcGJveCBhY2Nlc3MgdG9rZW4gdG8gYmUgcmVnaXN0ZXJlZC4iLCJGb3IgZXhhbXBsZToiLCIgIFBsb3RseS5wbG90KGdkLCBkYXRhLCBsYXlvdXQsIHsgbWFwYm94QWNjZXNzVG9rZW46ICdteS1hY2Nlc3MtdG9rZW4nIH0pOyIsIk1vcmUgaW5mbyBoZXJlOiBodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvZGVmaW5lLWFjY2Vzcy10b2tlbi8iXS5qb2luKCJcbiIpLG1pc3NpbmdTdHlsZUVycm9yTXNnOlsiTm8gdmFsaWQgbWFwYm94IHN0eWxlIGZvdW5kLCBwbGVhc2Ugc2V0IGBtYXBib3guc3R5bGVgIHRvIG9uZSBvZjoiLGEuam9pbigiLCAiKSwib3IgcmVnaXN0ZXIgYSBNYXBib3ggYWNjZXNzIHRva2VuIHRvIHVzZSBhIE1hcGJveC1zZXJ2ZWQgc3R5bGUuIl0uam9pbigiXG4iKSxtdWx0aXBsZVRva2Vuc0Vycm9yTXNnOlsiU2V0IG11bHRpcGxlIG1hcGJveCBhY2Nlc3MgdG9rZW4gYWNyb3NzIGRpZmZlcmVudCBtYXBib3ggc3VicGxvdCwiLCJ1c2luZyBmaXJzdCB0b2tlbiBmb3VuZCBhcyBtYXBib3gtZ2wgZG9lcyBub3QgYWxsb3cgbXVsdGlwbGVhY2Nlc3MgdG9rZW5zIG9uIHRoZSBzYW1lIHBhZ2UuIl0uam9pbigiXG4iKSxtYXBPbkVycm9yTXNnOiJNYXBib3ggZXJyb3IuIixtYXBib3hMb2dvOntwYXRoMDoibSAxMC41LDEuMjQgYyAtNS4xMSwwIC05LjI1LDQuMTUgLTkuMjUsOS4yNSAwLDUuMSA0LjE1LDkuMjUgOS4yNSw5LjI1IDUuMSwwIDkuMjUsLTQuMTUgOS4yNSwtOS4yNSAwLC01LjExIC00LjE0LC05LjI1IC05LjI1LC05LjI1IHogbSA0LjM5LDExLjUzIGMgLTEuOTMsMS45MyAtNC43OCwyLjMxIC02LjcsMi4zMSAtMC43LDAgLTEuNDEsLTAuMDUgLTIuMSwtMC4xNiAwLDAgLTEuMDIsLTUuNjQgMi4xNCwtOC44MSAwLjgzLC0wLjgzIDEuOTUsLTEuMjggMy4xMywtMS4yOCAxLjI3LDAgMi40OSwwLjUxIDMuMzksMS40MiAxLjg0LDEuODQgMS44OSw0Ljc1IDAuMTQsNi41MiB6IixwYXRoMToiTSAxMC41LC0wLjAxIEMgNC43LC0wLjAxIDAsNC43IDAsMTAuNDkgYyAwLDUuNzkgNC43LDEwLjUgMTAuNSwxMC41IDUuOCwwIDEwLjUsLTQuNyAxMC41LC0xMC41IEMgMjAuOTksNC43IDE2LjMsLTAuMDEgMTAuNSwtMC4wMSBaIG0gMCwxOS43NSBjIC01LjExLDAgLTkuMjUsLTQuMTUgLTkuMjUsLTkuMjUgMCwtNS4xIDQuMTQsLTkuMjYgOS4yNSwtOS4yNiA1LjExLDAgOS4yNSw0LjE1IDkuMjUsOS4yNSAwLDUuMTMgLTQuMTQsOS4yNiAtOS4yNSw5LjI2IHoiLHBhdGgyOiJNIDE0Ljc0LDYuMjUgQyAxMi45LDQuNDEgOS45OCw0LjM1IDguMjMsNi4xIDUuMDcsOS4yNyA2LjA5LDE0LjkxIDYuMDksMTQuOTEgYyAwLDAgNS42NCwxLjAyIDguODEsLTIuMTQgQyAxNi42NCwxMSAxNi41OSw4LjA5IDE0Ljc0LDYuMjUgWiBtIC0yLjI3LDQuMDkgLTAuOTEsMS44NyAtMC45LC0xLjg3IC0xLjg2LC0wLjkxIDEuODYsLTAuOSAwLjksLTEuODcgMC45MSwxLjg3IDEuODYsMC45IHoiLHBvbHlnb246IjExLjU2LDEyLjIxIDEwLjY2LDEwLjM0IDguOCw5LjQzIDEwLjY2LDguNTMgMTEuNTYsNi42NiAxMi40Nyw4LjUzIDE0LjMzLDkuNDMgMTIuNDcsMTAuMzQifSxzdHlsZVJ1bGVzOnttYXA6Im92ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTsiLCJtaXNzaW5nLWNzcyI6ImRpc3BsYXk6bm9uZTsiLGNhbmFyeToiYmFja2dyb3VuZC1jb2xvcjpzYWxtb247IiwiY3RybC1ib3R0b20tbGVmdCI6InBvc2l0aW9uOiBhYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6IG5vbmU7IHotaW5kZXg6IDI7IGJvdHRvbTogMDsgbGVmdDogMDsiLCJjdHJsLWJvdHRvbS1yaWdodCI6InBvc2l0aW9uOiBhYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6IG5vbmU7IHotaW5kZXg6IDI7IHJpZ2h0OiAwOyBib3R0b206IDA7IixjdHJsOiJjbGVhcjogYm90aDsgcG9pbnRlci1ldmVudHM6IGF1dG87IHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOyIsImN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3QgLm1hcGJveGdsLWN0cmwtYXR0cmliLWlubmVyIjoiZGlzcGxheTogbm9uZTsiLCJjdHJsLWF0dHJpYi5tYXBib3hnbC1jb21wYWN0OmhvdmVyIC5tYXBib3hnbC1jdHJsLWF0dHJpYi1pbm5lciI6ImRpc3BsYXk6IGJsb2NrOyBtYXJnaW4tdG9wOjJweCIsImN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3Q6aG92ZXIiOiJwYWRkaW5nOiAycHggMjRweCAycHggNHB4OyB2aXNpYmlsaXR5OiB2aXNpYmxlOyBtYXJnaW4tdG9wOiA2cHg7IiwiY3RybC1hdHRyaWIubWFwYm94Z2wtY29tcGFjdDo6YWZ0ZXIiOidjb250ZW50OiAiIjsgY3Vyc29yOiBwb2ludGVyOyBwb3NpdGlvbjogYWJzb2x1dGU7IGJhY2tncm91bmQtaW1hZ2U6IHVybChcJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIlM0UgJTNDcGF0aCBmaWxsPSIlMjMzMzMzMzMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQsMTBhNiw2IDAgMSwwIDEyLDBhNiw2IDAgMSwwIC0xMiwwIE05LDdhMSwxIDAgMSwwIDIsMGExLDEgMCAxLDAgLTIsMCBNOSwxMGExLDEgMCAxLDEgMiwwbDAsM2ExLDEgMCAxLDEgLTIsMCIvJTNFICUzQy9zdmclM0VcJyk7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsgd2lkdGg6IDI0cHg7IGhlaWdodDogMjRweDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyLXJhZGl1czogMTJweDsnLCJjdHJsLWF0dHJpYi5tYXBib3hnbC1jb21wYWN0IjoibWluLWhlaWdodDogMjBweDsgcGFkZGluZzogMDsgbWFyZ2luOiAxMHB4OyBwb3NpdGlvbjogcmVsYXRpdmU7IGJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDNweCAxMnB4IDEycHggM3B4OyIsImN0cmwtYm90dG9tLXJpZ2h0ID4gLm1hcGJveGdsLWN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3Q6OmFmdGVyIjoiYm90dG9tOiAwOyByaWdodDogMCIsImN0cmwtYm90dG9tLWxlZnQgPiAubWFwYm94Z2wtY3RybC1hdHRyaWIubWFwYm94Z2wtY29tcGFjdDo6YWZ0ZXIiOiJib3R0b206IDA7IGxlZnQ6IDAiLCJjdHJsLWJvdHRvbS1sZWZ0IC5tYXBib3hnbC1jdHJsIjoibWFyZ2luOiAwIDAgMTBweCAxMHB4OyBmbG9hdDogbGVmdDsiLCJjdHJsLWJvdHRvbS1yaWdodCAubWFwYm94Z2wtY3RybCI6Im1hcmdpbjogMCAxMHB4IDEwcHggMDsgZmxvYXQ6IHJpZ2h0OyIsImN0cmwtYXR0cmliIjoiY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43NSk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC1zaXplOiAxMnB4IiwiY3RybC1hdHRyaWIgYSI6ImNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNzUpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMTJweCIsImN0cmwtYXR0cmliIGE6aG92ZXIiOiJjb2xvcjogaW5oZXJpdDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IiwiY3RybC1hdHRyaWIgLm1hcGJveC1pbXByb3ZlLW1hcCI6ImZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW4tbGVmdDogMnB4OyIsImF0dHJpYi1lbXB0eSI6ImRpc3BsYXk6IG5vbmU7IiwiY3RybC1sb2dvIjonZGlzcGxheTpibG9jazsgd2lkdGg6IDIxcHg7IGhlaWdodDogMjFweDsgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwnZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDP3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/JTNFICUzQ3N2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDIxIDIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyMSAyMTsiIHhtbDpzcGFjZT0icHJlc2VydmUiJTNFJTNDZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDAuMDEpIiUzRSUzQ3BhdGggZD0ibSAxMC41LDEuMjQgYyAtNS4xMSwwIC05LjI1LDQuMTUgLTkuMjUsOS4yNSAwLDUuMSA0LjE1LDkuMjUgOS4yNSw5LjI1IDUuMSwwIDkuMjUsLTQuMTUgOS4yNSwtOS4yNSAwLC01LjExIC00LjE0LC05LjI1IC05LjI1LC05LjI1IHogbSA0LjM5LDExLjUzIGMgLTEuOTMsMS45MyAtNC43OCwyLjMxIC02LjcsMi4zMSAtMC43LDAgLTEuNDEsLTAuMDUgLTIuMSwtMC4xNiAwLDAgLTEuMDIsLTUuNjQgMi4xNCwtOC44MSAwLjgzLC0wLjgzIDEuOTUsLTEuMjggMy4xMywtMS4yOCAxLjI3LDAgMi40OSwwLjUxIDMuMzksMS40MiAxLjg0LDEuODQgMS44OSw0Ljc1IDAuMTQsNi41MiB6IiBzdHlsZT0ib3BhY2l0eTowLjk7ZmlsbDolMjNmZmZmZmY7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiBjbGFzcz0ic3QwIi8lM0UlM0NwYXRoIGQ9Ik0gMTAuNSwtMC4wMSBDIDQuNywtMC4wMSAwLDQuNyAwLDEwLjQ5IGMgMCw1Ljc5IDQuNywxMC41IDEwLjUsMTAuNSA1LjgsMCAxMC41LC00LjcgMTAuNSwtMTAuNSBDIDIwLjk5LDQuNyAxNi4zLC0wLjAxIDEwLjUsLTAuMDEgWiBtIDAsMTkuNzUgYyAtNS4xMSwwIC05LjI1LC00LjE1IC05LjI1LC05LjI1IDAsLTUuMSA0LjE0LC05LjI2IDkuMjUsLTkuMjYgNS4xMSwwIDkuMjUsNC4xNSA5LjI1LDkuMjUgMCw1LjEzIC00LjE0LDkuMjYgLTkuMjUsOS4yNiB6IiBzdHlsZT0ib3BhY2l0eTowLjM1O2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgY2xhc3M9InN0MSIvJTNFJTNDcGF0aCBkPSJNIDE0Ljc0LDYuMjUgQyAxMi45LDQuNDEgOS45OCw0LjM1IDguMjMsNi4xIDUuMDcsOS4yNyA2LjA5LDE0LjkxIDYuMDksMTQuOTEgYyAwLDAgNS42NCwxLjAyIDguODEsLTIuMTQgQyAxNi42NCwxMSAxNi41OSw4LjA5IDE0Ljc0LDYuMjUgWiBtIC0yLjI3LDQuMDkgLTAuOTEsMS44NyAtMC45LC0xLjg3IC0xLjg2LC0wLjkxIDEuODYsLTAuOSAwLjksLTEuODcgMC45MSwxLjg3IDEuODYsMC45IHoiIHN0eWxlPSJvcGFjaXR5OjAuMzU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiBjbGFzcz0ic3QxIi8lM0UlM0Nwb2x5Z29uIHBvaW50cz0iMTEuNTYsMTIuMjEgMTAuNjYsMTAuMzQgOC44LDkuNDMgMTAuNjYsOC41MyAxMS41Niw2LjY2IDEyLjQ3LDguNTMgMTQuMzMsOS40MyAxMi40NywxMC4zNCAiIHN0eWxlPSJvcGFjaXR5OjAuOTtmaWxsOiUyM2ZmZmZmZjtlbmFibGUtYmFja2dyb3VuZDpuZXciIGNsYXNzPSJzdDAiLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVwnKSd9fX0se31dLDgxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnNwbGl0KCIgIiksYT1yWzBdLGk9clsxXSxvPW4uaXNBcnJheU9yVHlwZWRBcnJheShlKT9uLm1lYW4oZSk6ZSxzPS41K28vMTAwLGw9MS41K28vMTAwLGM9WyIiLCIiXSx1PVswLDBdO3N3aXRjaChhKXtjYXNlInRvcCI6Y1swXT0idG9wIix1WzFdPS1sO2JyZWFrO2Nhc2UiYm90dG9tIjpjWzBdPSJib3R0b20iLHVbMV09bH1zd2l0Y2goaSl7Y2FzZSJsZWZ0IjpjWzFdPSJyaWdodCIsdVswXT0tczticmVhaztjYXNlInJpZ2h0IjpjWzFdPSJsZWZ0Iix1WzBdPXN9cmV0dXJue2FuY2hvcjpjWzBdJiZjWzFdP2Muam9pbigiLSIpOmNbMF0/Y1swXTpjWzFdP2NbMV06ImNlbnRlciIsb2Zmc2V0OnV9fX0seyIuLi8uLi9saWIiOjcxN31dLDgyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJtYXBib3gtZ2wiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiZDMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdT10KCIuL21hcGJveCIpLGg9ci5jb25zdGFudHM9dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBmKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKC0xIT09aC5zdHlsZVZhbHVlc01hcGJveC5pbmRleE9mKHQpfHwwPT09dC5pbmRleE9mKCJtYXBib3g6Ly8iKSl9ci5uYW1lPSJtYXBib3giLHIuYXR0cj0ic3VicGxvdCIsci5pZFJvb3Q9Im1hcGJveCIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PWEuY291bnRlclJlZ2V4KCJtYXBib3giKSxyLmF0dHJpYnV0ZXM9e3N1YnBsb3Q6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoibWFwYm94IixlZGl0VHlwZToiY2FsYyJ9fSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsbz1lLl9zdWJwbG90cy5tYXBib3g7aWYobi52ZXJzaW9uIT09aC5yZXF1aXJlZFZlcnNpb24pdGhyb3cgbmV3IEVycm9yKGgud3JvbmdWZXJzaW9uRXJyb3JNc2cpO3ZhciBzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtpZigiIj09PXQuX2NvbnRleHQubWFwYm94QWNjZXNzVG9rZW4pcmV0dXJuIiI7Zm9yKHZhciBuPVtdLGk9W10sbz0hMSxzPSExLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGM9cltlW2xdXSx1PWMuYWNjZXNzdG9rZW47ZihjLnN0eWxlKSYmKHU/YS5wdXNoVW5pcXVlKG4sdSk6KGYoYy5faW5wdXQuc3R5bGUpJiYoYS5lcnJvcigiVXNlcyBNYXBib3ggbWFwIHN0eWxlLCBidXQgZGlkIG5vdCBzZXQgYW4gYWNjZXNzIHRva2VuLiIpLG89ITApLHM9ITApKSx1JiZhLnB1c2hVbmlxdWUoaSx1KX1pZihzKXt2YXIgcD1vP2gubm9BY2Nlc3NUb2tlbkVycm9yTXNnOmgubWlzc2luZ1N0eWxlRXJyb3JNc2c7dGhyb3cgYS5lcnJvcihwKSxuZXcgRXJyb3IocCl9cmV0dXJuIG4ubGVuZ3RoPyhuLmxlbmd0aD4xJiZhLndhcm4oaC5tdWx0aXBsZVRva2Vuc0Vycm9yTXNnKSxuWzBdKTooaS5sZW5ndGgmJmEubG9nKFsiTGlzdGVkIG1hcGJveCBhY2Nlc3MgdG9rZW4ocykiLGkuam9pbigiLCIpLCJidXQgZGlkIG5vdCB1c2UgYSBNYXBib3ggbWFwIHN0eWxlLCBpZ25vcmluZyB0b2tlbihzKS4iXS5qb2luKCIgIikpLCIiKX0odCxvKTtuLmFjY2Vzc1Rva2VuPXM7Zm9yKHZhciBsPTA7bDxvLmxlbmd0aDtsKyspe3ZhciBjPW9bbF0scD1pKHIsIm1hcGJveCIsYyksZD1lW2NdLGc9ZC5fc3VicGxvdDtnfHwoZz1uZXcgdSh0LGMpLGVbY10uX3N1YnBsb3Q9ZyksZy52aWV3SW5pdGlhbHx8KGcudmlld0luaXRpYWw9e2NlbnRlcjphLmV4dGVuZEZsYXQoe30sZC5jZW50ZXIpLHpvb206ZC56b29tLGJlYXJpbmc6ZC5iZWFyaW5nLHBpdGNoOmQucGl0Y2h9KSxnLnBsb3QocCxlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhPW4uX3N1YnBsb3RzLm1hcGJveHx8W10saT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgbz1hW2ldOyFlW29dJiZuW29dLl9zdWJwbG90JiZuW29dLl9zdWJwbG90LmRlc3Ryb3koKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5tYXBib3gsbj1lLl9zaXplLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIGk9ZVtyW2FdXSx1PWkuZG9tYWluLGY9aS5fc3VicGxvdC50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOm8uc3ZnLCJ4bGluazpocmVmIjpmLHg6bi5sK24udyp1LnhbMF0seTpuLnQrbi5oKigxLXUueVsxXSksd2lkdGg6bi53Kih1LnhbMV0tdS54WzBdKSxoZWlnaHQ6bi5oKih1LnlbMV0tdS55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pO3ZhciBwPXMuc2VsZWN0KGkuX3N1YnBsb3QuZGl2KTtpZighKG51bGw9PT1wLnNlbGVjdCgiLm1hcGJveGdsLWN0cmwtbG9nbyIpLm5vZGUoKS5vZmZzZXRQYXJlbnQpKXt2YXIgZD1lLl9nbGltYWdlcy5hcHBlbmQoImciKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhuLmwrbi53KnUueFswXSsxMCkrIiwgIisobi50K24uaCooMS11LnlbMF0pLTMxKSsiKSIpLGQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsaC5tYXBib3hMb2dvLnBhdGgwKS5zdHlsZSh7b3BhY2l0eTouOSxmaWxsOiIjZmZmZmZmIiwiZW5hYmxlLWJhY2tncm91bmQiOiJuZXcifSksZC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixoLm1hcGJveExvZ28ucGF0aDEpLnN0eWxlKCJvcGFjaXR5IiwuMzUpLnN0eWxlKCJlbmFibGUtYmFja2dyb3VuZCIsIm5ldyIpLGQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsaC5tYXBib3hMb2dvLnBhdGgyKS5zdHlsZSgib3BhY2l0eSIsLjM1KS5zdHlsZSgiZW5hYmxlLWJhY2tncm91bmQiLCJuZXciKSxkLmFwcGVuZCgicG9seWdvbiIpLmF0dHIoInBvaW50cyIsaC5tYXBib3hMb2dvLnBvbHlnb24pLnN0eWxlKHtvcGFjaXR5Oi45LGZpbGw6IiNmZmZmZmYiLCJlbmFibGUtYmFja2dyb3VuZCI6Im5ldyJ9KX12YXIgZz1wLnNlbGVjdCgiLm1hcGJveGdsLWN0cmwtYXR0cmliIikudGV4dCgpLnJlcGxhY2UoIkltcHJvdmUgdGhpcyBtYXAiLCIiKSx2PWUuX2dsaW1hZ2VzLmFwcGVuZCgiZyIpLG09di5hcHBlbmQoInRleHQiKTttLnRleHQoZykuY2xhc3NlZCgic3RhdGljLWF0dHJpYnV0aW9uIiwhMCkuYXR0cih7ImZvbnQtc2l6ZSI6MTIsImZvbnQtZmFtaWx5IjoiQXJpYWwiLGNvbG9yOiJyZ2JhKDAsIDAsIDAsIDAuNzUpIiwidGV4dC1hbmNob3IiOiJlbmQiLCJkYXRhLXVuZm9ybWF0dGVkIjpnfSk7dmFyIHk9bC5iQm94KG0ubm9kZSgpKSx4PW4udyoodS54WzFdLXUueFswXSk7aWYoeS53aWR0aD54LzIpe3ZhciBiPWcuc3BsaXQoInwiKS5qb2luKCI8YnI+Iik7bS50ZXh0KGIpLmF0dHIoImRhdGEtdW5mb3JtYXR0ZWQiLGIpLmNhbGwoYy5jb252ZXJ0VG9Uc3BhbnMsdCkseT1sLmJCb3gobS5ub2RlKCkpfW0uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKC0zLCAiKyg4LXkuaGVpZ2h0KSsiKSIpLHYuaW5zZXJ0KCJyZWN0IiwiLnN0YXRpYy1hdHRyaWJ1dGlvbiIpLmF0dHIoe3g6LXkud2lkdGgtNix5Oi15LmhlaWdodC0zLHdpZHRoOnkud2lkdGgrNixoZWlnaHQ6eS5oZWlnaHQrMyxmaWxsOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpIn0pO3ZhciBfPTE7eS53aWR0aCs2PngmJihfPXgvKHkud2lkdGgrNikpO3ZhciB3PVtuLmwrbi53KnUueFsxXSxuLnQrbi5oKigxLXUueVswXSldO3YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrd1swXSsiLCIrd1sxXSsiKSBzY2FsZSgiK18rIikiKX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5tYXBib3gsbj0wO248ci5sZW5ndGg7bisrKXtlW3Jbbl1dLl9zdWJwbG90LnVwZGF0ZUZ4KGUpfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2OTQsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MSwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjgwMCwiLi9jb25zdGFudHMiOjgxOCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODIyLCIuL2xheW91dF9kZWZhdWx0cyI6ODIzLCIuL21hcGJveCI6ODI0LGQzOjE2NSwibWFwYm94LWdsIjo0Mjh9XSw4MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuL2NvbnZlcnRfdGV4dF9vcHRzIiksaT10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIG8odCxlKXt0aGlzLnN1YnBsb3Q9dCx0aGlzLnVpZD10LnVpZCsiLSIrZSx0aGlzLmluZGV4PWUsdGhpcy5pZFNvdXJjZT0ic291cmNlLSIrdGhpcy51aWQsdGhpcy5pZExheWVyPWkubGF5b3V0TGF5ZXJQcmVmaXgrdGhpcy51aWQsdGhpcy5zb3VyY2VUeXBlPW51bGwsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLmxheWVyVHlwZT1udWxsLHRoaXMuYmVsb3c9bnVsbCx0aGlzLnZpc2libGU9ITF9dmFyIHM9by5wcm90b3R5cGU7ZnVuY3Rpb24gbCh0KXtpZighdC52aXNpYmxlKXJldHVybiExO3ZhciBlPXQuc291cmNlO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjApe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKCJzdHJpbmciIT10eXBlb2YgZVtyXXx8MD09PWVbcl0ubGVuZ3RoKXJldHVybiExO3JldHVybiEwfXJldHVybiBuLmlzUGxhaW5PYmplY3QoZSl8fCJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg+MH1mdW5jdGlvbiBjKHQpe3ZhciBlPXt9LHI9e307c3dpdGNoKHQudHlwZSl7Y2FzZSJjaXJjbGUiOm4uZXh0ZW5kRmxhdChyLHsiY2lyY2xlLXJhZGl1cyI6dC5jaXJjbGUucmFkaXVzLCJjaXJjbGUtY29sb3IiOnQuY29sb3IsImNpcmNsZS1vcGFjaXR5Ijp0Lm9wYWNpdHl9KTticmVhaztjYXNlImxpbmUiOm4uZXh0ZW5kRmxhdChyLHsibGluZS13aWR0aCI6dC5saW5lLndpZHRoLCJsaW5lLWNvbG9yIjp0LmNvbG9yLCJsaW5lLW9wYWNpdHkiOnQub3BhY2l0eSwibGluZS1kYXNoYXJyYXkiOnQubGluZS5kYXNofSk7YnJlYWs7Y2FzZSJmaWxsIjpuLmV4dGVuZEZsYXQocix7ImZpbGwtY29sb3IiOnQuY29sb3IsImZpbGwtb3V0bGluZS1jb2xvciI6dC5maWxsLm91dGxpbmVjb2xvciwiZmlsbC1vcGFjaXR5Ijp0Lm9wYWNpdHl9KTticmVhaztjYXNlInN5bWJvbCI6dmFyIGk9dC5zeW1ib2wsbz1hKGkudGV4dHBvc2l0aW9uLGkuaWNvbnNpemUpO24uZXh0ZW5kRmxhdChlLHsiaWNvbi1pbWFnZSI6aS5pY29uKyItMTUiLCJpY29uLXNpemUiOmkuaWNvbnNpemUvMTAsInRleHQtZmllbGQiOmkudGV4dCwidGV4dC1zaXplIjppLnRleHRmb250LnNpemUsInRleHQtYW5jaG9yIjpvLmFuY2hvciwidGV4dC1vZmZzZXQiOm8ub2Zmc2V0LCJzeW1ib2wtcGxhY2VtZW50IjppLnBsYWNlbWVudH0pLG4uZXh0ZW5kRmxhdChyLHsiaWNvbi1jb2xvciI6dC5jb2xvciwidGV4dC1jb2xvciI6aS50ZXh0Zm9udC5jb2xvciwidGV4dC1vcGFjaXR5Ijp0Lm9wYWNpdHl9KTticmVhaztjYXNlInJhc3RlciI6bi5leHRlbmRGbGF0KHIseyJyYXN0ZXItZmFkZS1kdXJhdGlvbiI6MCwicmFzdGVyLW9wYWNpdHkiOnQub3BhY2l0eX0pfXJldHVybntsYXlvdXQ6ZSxwYWludDpyfX1zLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLnZpc2libGU/dGhpcy5uZWVkc05ld0ltYWdlKHQpP3RoaXMudXBkYXRlSW1hZ2UodCk6dGhpcy5uZWVkc05ld1NvdXJjZSh0KT8odGhpcy5yZW1vdmVMYXllcigpLHRoaXMudXBkYXRlU291cmNlKHQpLHRoaXMudXBkYXRlTGF5ZXIodCkpOnRoaXMubmVlZHNOZXdMYXllcih0KT90aGlzLnVwZGF0ZUxheWVyKHQpOnRoaXMudXBkYXRlU3R5bGUodCk6KHRoaXMudXBkYXRlU291cmNlKHQpLHRoaXMudXBkYXRlTGF5ZXIodCkpLHRoaXMudmlzaWJsZT1sKHQpfSxzLm5lZWRzTmV3SW1hZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3VicGxvdC5tYXAuZ2V0U291cmNlKHRoaXMuaWRTb3VyY2UpJiYiaW1hZ2UiPT09dGhpcy5zb3VyY2VUeXBlJiYiaW1hZ2UiPT09dC5zb3VyY2V0eXBlJiYodGhpcy5zb3VyY2UhPT10LnNvdXJjZXx8SlNPTi5zdHJpbmdpZnkodGhpcy5jb29yZGluYXRlcykhPT1KU09OLnN0cmluZ2lmeSh0LmNvb3JkaW5hdGVzKSl9LHMubmVlZHNOZXdTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlVHlwZSE9PXQuc291cmNldHlwZXx8dGhpcy5zb3VyY2UhPT10LnNvdXJjZXx8dGhpcy5sYXllclR5cGUhPT10LnR5cGV9LHMubmVlZHNOZXdMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXllclR5cGUhPT10LnR5cGV8fHRoaXMuYmVsb3chPT10aGlzLnN1YnBsb3QuYmVsb3dMb29rdXBbImxheW91dC0iK3RoaXMuaW5kZXhdfSxzLnVwZGF0ZUltYWdlPWZ1bmN0aW9uKHQpe3RoaXMuc3VicGxvdC5tYXAuZ2V0U291cmNlKHRoaXMuaWRTb3VyY2UpLnVwZGF0ZUltYWdlKHt1cmw6dC5zb3VyY2UsY29vcmRpbmF0ZXM6dC5jb29yZGluYXRlc30pfSxzLnVwZGF0ZVNvdXJjZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YnBsb3QubWFwO2lmKGUuZ2V0U291cmNlKHRoaXMuaWRTb3VyY2UpJiZlLnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlKSx0aGlzLnNvdXJjZVR5cGU9dC5zb3VyY2V0eXBlLHRoaXMuc291cmNlPXQuc291cmNlLGwodCkpe3ZhciByPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zb3VyY2V0eXBlLG49dC5zb3VyY2UsYT17dHlwZTpyfTsiZ2VvanNvbiI9PT1yP2U9ImRhdGEiOiJ2ZWN0b3IiPT09cj9lPSJzdHJpbmciPT10eXBlb2Ygbj8idXJsIjoidGlsZXMiOiJyYXN0ZXIiPT09cj8oZT0idGlsZXMiLGEudGlsZVNpemU9MjU2KToiaW1hZ2UiPT09ciYmKGU9InVybCIsYS5jb29yZGluYXRlcz10LmNvb3JkaW5hdGVzKTthW2VdPW4sdC5zb3VyY2VhdHRyaWJ1dGlvbiYmKGEuYXR0cmlidXRpb249dC5zb3VyY2VhdHRyaWJ1dGlvbik7cmV0dXJuIGF9KHQpO2UuYWRkU291cmNlKHRoaXMuaWRTb3VyY2Uscil9fSxzLnVwZGF0ZUxheWVyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5zdWJwbG90LG49Yyh0KSxhPXRoaXMuc3VicGxvdC5iZWxvd0xvb2t1cFsibGF5b3V0LSIrdGhpcy5pbmRleF07aWYoInRyYWNlcyI9PT1hKWZvcih2YXIgbz1yLmdldE1hcExheWVycygpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIHU9b1tzXS5pZDtpZigic3RyaW5nIj09dHlwZW9mIHUmJjA9PT11LmluZGV4T2YoaS50cmFjZUxheWVyUHJlZml4KSl7ZT11O2JyZWFrfX1lbHNlIGU9YTt0aGlzLnJlbW92ZUxheWVyKCksbCh0KSYmci5hZGRMYXllcih7aWQ6dGhpcy5pZExheWVyLHNvdXJjZTp0aGlzLmlkU291cmNlLCJzb3VyY2UtbGF5ZXIiOnQuc291cmNlbGF5ZXJ8fCIiLHR5cGU6dC50eXBlLG1pbnpvb206dC5taW56b29tLG1heHpvb206dC5tYXh6b29tLGxheW91dDpuLmxheW91dCxwYWludDpuLnBhaW50fSxlKSx0aGlzLmxheWVyVHlwZT10LnR5cGUsdGhpcy5iZWxvdz1hfSxzLnVwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQpe2lmKGwodCkpe3ZhciBlPWModCk7dGhpcy5zdWJwbG90LnNldE9wdGlvbnModGhpcy5pZExheWVyLCJzZXRMYXlvdXRQcm9wZXJ0eSIsZS5sYXlvdXQpLHRoaXMuc3VicGxvdC5zZXRPcHRpb25zKHRoaXMuaWRMYXllciwic2V0UGFpbnRQcm9wZXJ0eSIsZS5wYWludCl9fSxzLnJlbW92ZUxheWVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdWJwbG90Lm1hcDt0LmdldExheWVyKHRoaXMuaWRMYXllcikmJnQucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyKX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdWJwbG90Lm1hcDt0LmdldExheWVyKHRoaXMuaWRMYXllcikmJnQucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyKSx0LmdldFNvdXJjZSh0aGlzLmlkU291cmNlKSYmdC5yZW1vdmVTb3VyY2UodGhpcy5pZFNvdXJjZSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IG8odCxlKTtyZXR1cm4gbi51cGRhdGUociksbn19LHsiLi4vLi4vbGliIjo3MTcsIi4vY29uc3RhbnRzIjo4MTgsIi4vY29udmVydF90ZXh0X29wdHMiOjgxOX1dLDgyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5kZWZhdWx0TGluZSxpPXQoIi4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbz10KCIuLi9mb250X2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiKS50ZXh0cG9zaXRpb24sbD10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsYz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXksdT10KCIuL2NvbnN0YW50cyIpLGg9byh7fSk7aC5mYW1pbHkuZGZsdD0iT3BlbiBTYW5zIFJlZ3VsYXIsIEFyaWFsIFVuaWNvZGUgTVMgUmVndWxhciIsKGUuZXhwb3J0cz1sKHtfYXJyYXlBdHRyUmVnZXhwczpbbi5jb3VudGVyUmVnZXgoIm1hcGJveCIsIi5sYXllcnMiLCEwKV0sZG9tYWluOmkoe25hbWU6Im1hcGJveCJ9KSxhY2Nlc3N0b2tlbjp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMH0sc3R5bGU6e3ZhbFR5cGU6ImFueSIsdmFsdWVzOnUuc3R5bGVWYWx1ZXNNYXBib3guY29uY2F0KHUuc3R5bGVWYWx1ZXNOb25NYXBib3gpLGRmbHQ6dS5zdHlsZVZhbHVlRGZsdH0sY2VudGVyOntsb246e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxsYXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfX0sem9vbTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjF9LGJlYXJpbmc6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxwaXRjaDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGxheWVyczpjKCJsYXllciIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNvdXJjZXR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImdlb2pzb24iLCJ2ZWN0b3IiLCJyYXN0ZXIiLCJpbWFnZSJdLGRmbHQ6Imdlb2pzb24ifSxzb3VyY2U6e3ZhbFR5cGU6ImFueSJ9LHNvdXJjZWxheWVyOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LHNvdXJjZWF0dHJpYnV0aW9uOnt2YWxUeXBlOiJzdHJpbmcifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjaXJjbGUiLCJsaW5lIiwiZmlsbCIsInN5bWJvbCIsInJhc3RlciJdLGRmbHQ6ImNpcmNsZSJ9LGNvb3JkaW5hdGVzOnt2YWxUeXBlOiJhbnkifSxiZWxvdzp7dmFsVHlwZToic3RyaW5nIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmF9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxtaW56b29tOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoyNCxkZmx0OjB9LG1heHpvb206e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjI0LGRmbHQ6MjR9LGNpcmNsZTp7cmFkaXVzOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTV9fSxsaW5lOnt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjJ9LGRhc2g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifX0sZmlsbDp7b3V0bGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphfX0sc3ltYm9sOntpY29uOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6Im1hcmtlciJ9LGljb25zaXplOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTB9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0scGxhY2VtZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwb2ludCIsImxpbmUiLCJsaW5lLWNlbnRlciJdLGRmbHQ6InBvaW50In0sdGV4dGZvbnQ6aCx0ZXh0cG9zaXRpb246bi5leHRlbmRGbGF0KHt9LHMse2FycmF5T2s6ITF9KX19KX0sInBsb3QiLCJmcm9tLXJvb3QiKSkudWlyZXZpc2lvbj17dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc0OCwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzU1LCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTIwLCIuLi9kb21haW4iOjc5MCwiLi4vZm9udF9hdHRyaWJ1dGVzIjo3OTEsIi4vY29uc3RhbnRzIjo4MTh9XSw4MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi9zdWJwbG90X2RlZmF1bHRzIiksaT10KCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3IoImFjY2Vzc3Rva2VuIixuLmFjY2Vzc1Rva2VuKSxyKCJzdHlsZSIpLHIoImNlbnRlci5sb24iKSxyKCJjZW50ZXIubGF0Iikscigiem9vbSIpLHIoImJlYXJpbmciKSxyKCJwaXRjaCIpLGkodCxlLHtuYW1lOiJsYXllcnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSksZS5faW5wdXQ9dH1mdW5jdGlvbiBsKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsby5sYXllcnMscixhKX1pZihyKCJ2aXNpYmxlIikpe3ZhciBhLGk9cigic291cmNldHlwZSIpLHM9InJhc3RlciI9PT1pfHwiaW1hZ2UiPT09aTtyKCJzb3VyY2UiKSxyKCJzb3VyY2VhdHRyaWJ1dGlvbiIpLCJ2ZWN0b3IiPT09aSYmcigic291cmNlbGF5ZXIiKSwiaW1hZ2UiPT09aSYmcigiY29vcmRpbmF0ZXMiKSxzJiYoYT0icmFzdGVyIik7dmFyIGw9cigidHlwZSIsYSk7cyYmInJhc3RlciIhPT1sJiYobD1lLnR5cGU9InJhc3RlciIsbi5sb2coIlNvdXJjZSB0eXBlcyAqcmFzdGVyKiBhbmQgKmltYWdlKiBtdXN0IGRyYXduICpyYXN0ZXIqIGxheWVyIHR5cGUuIikpLHIoImJlbG93IikscigiY29sb3IiKSxyKCJvcGFjaXR5IikscigibWluem9vbSIpLHIoIm1heHpvb20iKSwiY2lyY2xlIj09PWwmJnIoImNpcmNsZS5yYWRpdXMiKSwibGluZSI9PT1sJiYocigibGluZS53aWR0aCIpLHIoImxpbmUuZGFzaCIpKSwiZmlsbCI9PT1sJiZyKCJmaWxsLm91dGxpbmVjb2xvciIpLCJzeW1ib2wiPT09bCYmKHIoInN5bWJvbC5pY29uIikscigic3ltYm9sLmljb25zaXplIikscigic3ltYm9sLnRleHQiKSxuLmNvZXJjZUZvbnQociwic3ltYm9sLnRleHRmb250Iikscigic3ltYm9sLnRleHRwb3NpdGlvbiIpLHIoInN5bWJvbC5wbGFjZW1lbnQiKSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7YSh0LGUscix7dHlwZToibWFwYm94IixhdHRyaWJ1dGVzOm8saGFuZGxlRGVmYXVsdHM6cyxwYXJ0aXRpb246InkiLGFjY2Vzc1Rva2VuOmUuX21hcGJveEFjY2Vzc1Rva2VufSl9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc2MSwiLi4vc3VicGxvdF9kZWZhdWx0cyI6ODQwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MjJ9XSw4MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibWFwYm94LWdsIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiKSxzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLHU9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnByZXBTZWxlY3QsaD10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Iikuc2VsZWN0T25DbGljayxmPXQoIi4vY29uc3RhbnRzIikscD10KCIuL2xheWVycyIpO2Z1bmN0aW9uIGQodCxlKXt0aGlzLmlkPWUsdGhpcy5nZD10O3ZhciByPXQuX2Z1bGxMYXlvdXQsbj10Ll9jb250ZXh0O3RoaXMuY29udGFpbmVyPXIuX2dsY29udGFpbmVyLm5vZGUoKSx0aGlzLmlzU3RhdGljPW4uc3RhdGljUGxvdCx0aGlzLnVpZD1yLl91aWQrIi0iK3RoaXMuaWQsdGhpcy5kaXY9bnVsbCx0aGlzLnhheGlzPW51bGwsdGhpcy55YXhpcz1udWxsLHRoaXMuY3JlYXRlRnJhbWV3b3JrKHIpLHRoaXMubWFwPW51bGwsdGhpcy5hY2Nlc3NUb2tlbj1udWxsLHRoaXMuc3R5bGVPYmo9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVyTGlzdD1bXSx0aGlzLmJlbG93TG9va3VwPXt9LHRoaXMuZHJhZ2dpbmc9ITEsdGhpcy53aGVlbGluZz0hMX12YXIgZz1kLnByb3RvdHlwZTtnLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGE9dGhpcyxpPWVbYS5pZF07YS5tYXAmJmkuYWNjZXNzdG9rZW4hPT1hLmFjY2Vzc1Rva2VuJiYoYS5tYXAucmVtb3ZlKCksYS5tYXA9bnVsbCxhLnN0eWxlT2JqPW51bGwsYS50cmFjZUhhc2g9W10sYS5sYXllckxpc3Q9e30pLG49YS5tYXA/bmV3IFByb21pc2UoZnVuY3Rpb24ocixuKXthLnVwZGF0ZU1hcCh0LGUscixuKX0pOm5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7YS5jcmVhdGVNYXAodCxlLHIsbil9KSxyLnB1c2gobil9LGcuY3JlYXRlTWFwPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBpPXRoaXMscz1lW2kuaWRdLGw9aS5zdHlsZU9iaj1tKHMuc3R5bGUpO2kuYWNjZXNzVG9rZW49cy5hY2Nlc3N0b2tlbjt2YXIgYz1pLm1hcD1uZXcgbi5NYXAoe2NvbnRhaW5lcjppLmRpdixzdHlsZTpsLnN0eWxlLGNlbnRlcjp4KHMuY2VudGVyKSx6b29tOnMuem9vbSxiZWFyaW5nOnMuYmVhcmluZyxwaXRjaDpzLnBpdGNoLGludGVyYWN0aXZlOiFpLmlzU3RhdGljLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjppLmlzU3RhdGljLGRvdWJsZUNsaWNrWm9vbTohMSxib3hab29tOiExLGF0dHJpYnV0aW9uQ29udHJvbDohMX0pLmFkZENvbnRyb2wobmV3IG4uQXR0cmlidXRpb25Db250cm9sKHtjb21wYWN0OiEwfSkpO2MuX2NhbnZhcy5zdHlsZS5sZWZ0PSIwcHgiLGMuX2NhbnZhcy5zdHlsZS50b3A9IjBweCIsaS5yZWplY3RPbkVycm9yKGEpLGkuaXNTdGF0aWN8fGkuaW5pdEZ4KHQsZSk7dmFyIHU9W107dS5wdXNoKG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe2Mub25jZSgibG9hZCIsdCl9KSksdT11LmNvbmNhdChvLmZldGNoVHJhY2VHZW9EYXRhKHQpKSxQcm9taXNlLmFsbCh1KS50aGVuKGZ1bmN0aW9uKCl7aS5maWxsQmVsb3dMb29rdXAodCxlKSxpLnVwZGF0ZURhdGEodCksaS51cGRhdGVMYXlvdXQoZSksaS5yZXNvbHZlT25SZW5kZXIocil9KS5jYXRjaChhKX0sZy51cGRhdGVNYXA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dGhpcyxpPWEubWFwLHM9ZVt0aGlzLmlkXTthLnJlamVjdE9uRXJyb3Iobik7dmFyIGw9W10sYz1tKHMuc3R5bGUpO2Euc3R5bGVPYmouaWQhPT1jLmlkJiYoYS5zdHlsZU9iaj1jLGkuc2V0U3R5bGUoYy5zdHlsZSksYS50cmFjZUhhc2g9e30sbC5wdXNoKG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe2kub25jZSgic3R5bGVkYXRhIix0KX0pKSksbD1sLmNvbmNhdChvLmZldGNoVHJhY2VHZW9EYXRhKHQpKSxQcm9taXNlLmFsbChsKS50aGVuKGZ1bmN0aW9uKCl7YS5maWxsQmVsb3dMb29rdXAodCxlKSxhLnVwZGF0ZURhdGEodCksYS51cGRhdGVMYXlvdXQoZSksYS5yZXNvbHZlT25SZW5kZXIocil9KS5jYXRjaChuKX0sZy5maWxsQmVsb3dMb29rdXA9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGE9ZVt0aGlzLmlkXS5sYXllcnMsaT10aGlzLmJlbG93TG9va3VwPXt9LG89ITE7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIHM9dFtyXVswXS50cmFjZSxsPXMuX21vZHVsZTsic3RyaW5nIj09dHlwZW9mIHMuYmVsb3c/bj1zLmJlbG93OmwuZ2V0QmVsb3cmJihuPWwuZ2V0QmVsb3cocyx0aGlzKSksIiI9PT1uJiYobz0hMCksaVsidHJhY2UtIitzLnVpZF09bnx8IiJ9Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl7dmFyIGM9YVtyXTtuPSJzdHJpbmciPT10eXBlb2YgYy5iZWxvdz9jLmJlbG93Om8/InRyYWNlcyI6IiIsaVsibGF5b3V0LSIrcl09bn12YXIgdSxoLGY9e307Zm9yKHUgaW4gaSlmW249aVt1XV0/ZltuXS5wdXNoKHUpOmZbbl09W3VdO2ZvcihuIGluIGYpe3ZhciBwPWZbbl07aWYocC5sZW5ndGg+MSlmb3Iocj0wO3I8cC5sZW5ndGg7cisrKTA9PT0odT1wW3JdKS5pbmRleE9mKCJ0cmFjZS0iKT8oaD11LnNwbGl0KCJ0cmFjZS0iKVsxXSx0aGlzLnRyYWNlSGFzaFtoXSYmKHRoaXMudHJhY2VIYXNoW2hdLmJlbG93PW51bGwpKTowPT09dS5pbmRleE9mKCJsYXlvdXQtIikmJihoPXUuc3BsaXQoImxheW91dC0iKVsxXSx0aGlzLmxheWVyTGlzdFtoXSYmKHRoaXMubGF5ZXJMaXN0W2hdLmJlbG93PW51bGwpKX19O3ZhciB2PXtjaG9yb3BsZXRobWFwYm94OjAsZGVuc2l0eW1hcGJveDoxLHNjYXR0ZXJtYXBib3g6Mn07ZnVuY3Rpb24gbSh0KXt2YXIgZT17fTtyZXR1cm4gaS5pc1BsYWluT2JqZWN0KHQpPyhlLmlkPXQuaWQsZS5zdHlsZT10KToic3RyaW5nIj09dHlwZW9mIHQ/KGUuaWQ9dCwtMSE9PWYuc3R5bGVWYWx1ZXNNYXBib3guaW5kZXhPZih0KT9lLnN0eWxlPXkodCk6Zi5zdHlsZXNOb25NYXBib3hbdF0/ZS5zdHlsZT1mLnN0eWxlc05vbk1hcGJveFt0XTplLnN0eWxlPXQpOihlLmlkPWYuc3R5bGVWYWx1ZURmbHQsZS5zdHlsZT15KGYuc3R5bGVWYWx1ZURmbHQpKSxlLnRyYW5zaXRpb249e2R1cmF0aW9uOjAsZGVsYXk6MH0sZX1mdW5jdGlvbiB5KHQpe3JldHVybiBmLnN0eWxlVXJsUHJlZml4K3QrIi0iK2Yuc3R5bGVVcmxTdWZmaXh9ZnVuY3Rpb24geCh0KXtyZXR1cm5bdC5sb24sdC5sYXRdfWcudXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxpPXRoaXMudHJhY2VIYXNoLG89dC5zbGljZSgpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdlt0WzBdLnRyYWNlLnR5cGVdLXZbZVswXS50cmFjZS50eXBlXX0pO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspe3ZhciBzPW9bbl0sbD0hMTsoZT1pWyhyPXNbMF0udHJhY2UpLnVpZF0pJiYoZS50eXBlPT09ci50eXBlPyhlLnVwZGF0ZShzKSxsPSEwKTplLmRpc3Bvc2UoKSksIWwmJnIuX21vZHVsZSYmKGlbci51aWRdPXIuX21vZHVsZS5wbG90KHRoaXMscykpfXZhciBjPU9iamVjdC5rZXlzKGkpO3Q6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7dmFyIHU9Y1tuXTtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKWlmKHU9PT0ocj10W2FdWzBdLnRyYWNlKS51aWQpY29udGludWUgdDsoZT1pW3VdKS5kaXNwb3NlKCksZGVsZXRlIGlbdV19fSxnLnVwZGF0ZUxheW91dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcCxyPXRbdGhpcy5pZF07dGhpcy5kcmFnZ2luZ3x8dGhpcy53aGVlbGluZ3x8KGUuc2V0Q2VudGVyKHgoci5jZW50ZXIpKSxlLnNldFpvb20oci56b29tKSxlLnNldEJlYXJpbmcoci5iZWFyaW5nKSxlLnNldFBpdGNoKHIucGl0Y2gpKSx0aGlzLnVwZGF0ZUxheWVycyh0KSx0aGlzLnVwZGF0ZUZyYW1ld29yayh0KSx0aGlzLnVwZGF0ZUZ4KHQpLHRoaXMubWFwLnJlc2l6ZSgpLHRoaXMuZ2QuX2NvbnRleHQuX3Njcm9sbFpvb20ubWFwYm94P2Uuc2Nyb2xsWm9vbS5lbmFibGUoKTplLnNjcm9sbFpvb20uZGlzYWJsZSgpfSxnLnJlc29sdmVPblJlbmRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcDtlLm9uKCJyZW5kZXIiLGZ1bmN0aW9uIHIoKXtlLmxvYWRlZCgpJiYoZS5vZmYoInJlbmRlciIsciksc2V0VGltZW91dCh0LDEwKSl9KX0sZy5yZWplY3RPbkVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2Z1bmN0aW9uIHIoKXt0KG5ldyBFcnJvcihmLm1hcE9uRXJyb3JNc2cpKX1lLm9uY2UoImVycm9yIixyKSxlLm9uY2UoInN0eWxlLmVycm9yIixyKSxlLm9uY2UoInNvdXJjZS5lcnJvciIsciksZS5vbmNlKCJ0aWxlLmVycm9yIixyKSxlLm9uY2UoImxheWVyLmVycm9yIixyKX0sZy5jcmVhdGVGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3IuaWQ9ZS51aWQsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGUuY29udGFpbmVyLmFwcGVuZENoaWxkKHIpLGUueGF4aXM9e19pZDoieCIsYzJwOmZ1bmN0aW9uKHQpe3JldHVybiBlLnByb2plY3QodCkueH19LGUueWF4aXM9e19pZDoieSIsYzJwOmZ1bmN0aW9uKHQpe3JldHVybiBlLnByb2plY3QodCkueX19LGUudXBkYXRlRnJhbWV3b3JrKHQpLGUubW9ja0F4aXM9e3R5cGU6ImxpbmVhciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIn0sbC5zZXRDb252ZXJ0KGUubW9ja0F4aXMsdCl9LGcuaW5pdEZ4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLm1hcDtmdW5jdGlvbiBvKCl7YS5sb25lVW5ob3ZlcihlLl9ob3ZlcmxheWVyKX1mdW5jdGlvbiBsKCl7dmFyIHQ9ci5nZXRWaWV3KCk7bi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHIuZ2V0Vmlld0VkaXRzV2l0aERlcml2ZWQodCkpfWkub24oIm1vdmVlbmQiLGZ1bmN0aW9uKHQpe2lmKHIubWFwKXt2YXIgZT1uLl9mdWxsTGF5b3V0O2lmKHQub3JpZ2luYWxFdmVudHx8ci53aGVlbGluZyl7dmFyIGE9ZVtyLmlkXTtzLmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLG4ubGF5b3V0LGUuX3ByZUdVSSxyLmdldFZpZXdFZGl0cyhhKSk7dmFyIGk9ci5nZXRWaWV3KCk7YS5faW5wdXQuY2VudGVyPWEuY2VudGVyPWkuY2VudGVyLGEuX2lucHV0Lnpvb209YS56b29tPWkuem9vbSxhLl9pbnB1dC5iZWFyaW5nPWEuYmVhcmluZz1pLmJlYXJpbmcsYS5faW5wdXQucGl0Y2g9YS5waXRjaD1pLnBpdGNoLG4uZW1pdCgicGxvdGx5X3JlbGF5b3V0IixyLmdldFZpZXdFZGl0c1dpdGhEZXJpdmVkKGkpKX10Lm9yaWdpbmFsRXZlbnQmJiJtb3VzZXVwIj09PXQub3JpZ2luYWxFdmVudC50eXBlP3IuZHJhZ2dpbmc9ITE6ci53aGVlbGluZyYmKHIud2hlZWxpbmc9ITEpLGUuX3JlaG92ZXImJmUuX3JlaG92ZXIoKX19KSxpLm9uKCJ3aGVlbCIsZnVuY3Rpb24oKXtyLndoZWVsaW5nPSEwfSksaS5vbigibW91c2Vtb3ZlIixmdW5jdGlvbih0KXt2YXIgZT1yLmRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0LmNsaWVudFg9dC5wb2ludC54K2UubGVmdCx0LmNsaWVudFk9dC5wb2ludC55K2UudG9wLHQudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdD1mdW5jdGlvbigpe3JldHVybiBlfSxyLnhheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0LmxuZ0xhdC5sbmd9LHIueWF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIHQubG5nTGF0LmxhdH0sbi5fZnVsbExheW91dC5fcmVob3Zlcj1mdW5jdGlvbigpe24uX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD09PXIuaWQmJm4uX2Z1bGxMYXlvdXRbci5pZF0mJmEuaG92ZXIobix0LHIuaWQpfSxhLmhvdmVyKG4sdCxyLmlkKSxuLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9ci5pZH0pLGkub24oImRyYWdzdGFydCIsZnVuY3Rpb24oKXtyLmRyYWdnaW5nPSEwLG8oKX0pLGkub24oInpvb21zdGFydCIsbyksaS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7bi5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PW51bGx9KSxpLm9uKCJkcmFnIixsKSxpLm9uKCJ6b29tIixsKSxpLm9uKCJkYmxjbGljayIsZnVuY3Rpb24oKXt2YXIgdD1uLl9mdWxsTGF5b3V0W3IuaWRdO3MuY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIsbi5sYXlvdXQsbi5fZnVsbExheW91dC5fcHJlR1VJLHIuZ2V0Vmlld0VkaXRzKHQpKTt2YXIgZT1yLnZpZXdJbml0aWFsO2kuc2V0Q2VudGVyKHgoZS5jZW50ZXIpKSxpLnNldFpvb20oZS56b29tKSxpLnNldEJlYXJpbmcoZS5iZWFyaW5nKSxpLnNldFBpdGNoKGUucGl0Y2gpO3ZhciBhPXIuZ2V0VmlldygpO3QuX2lucHV0LmNlbnRlcj10LmNlbnRlcj1hLmNlbnRlcix0Ll9pbnB1dC56b29tPXQuem9vbT1hLnpvb20sdC5faW5wdXQuYmVhcmluZz10LmJlYXJpbmc9YS5iZWFyaW5nLHQuX2lucHV0LnBpdGNoPXQucGl0Y2g9YS5waXRjaCxuLmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksbi5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLHIuZ2V0Vmlld0VkaXRzV2l0aERlcml2ZWQoYSkpfSksci5jbGVhclNlbGVjdD1mdW5jdGlvbigpe24uX2Z1bGxMYXlvdXQuX3pvb21sYXllci5zZWxlY3RBbGwoIi5zZWxlY3Qtb3V0bGluZSIpLnJlbW92ZSgpfSxyLm9uQ2xpY2tJblBhbkZuPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT1uLl9mdWxsTGF5b3V0LmNsaWNrbW9kZTtpLmluZGV4T2YoInNlbGVjdCIpPi0xJiZoKGUub3JpZ2luYWxFdmVudCxuLFtyLnhheGlzXSxbci55YXhpc10sci5pZCx0KSxpLmluZGV4T2YoImV2ZW50Iik+LTEmJmEuY2xpY2sobixlLm9yaWdpbmFsRXZlbnQpfX19LGcudXBkYXRlRng9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUubWFwLG49ZS5nZDtpZighZS5pc1N0YXRpYyl7dmFyIGEsbz10LmRyYWdtb2RlO2E9InNlbGVjdCI9PT1vP2Z1bmN0aW9uKHQscil7KHQucmFuZ2U9e30pW2UuaWRdPVtsKFtyLnhtaW4sci55bWluXSksbChbci54bWF4LHIueW1heF0pXX06ZnVuY3Rpb24odCxyLG4peyh0Lmxhc3NvUG9pbnRzPXt9KVtlLmlkXT1uLmZpbHRlcmVkLm1hcChsKX07dmFyIHM9ZS5kcmFnT3B0aW9ucztlLmRyYWdPcHRpb25zPWkuZXh0ZW5kRGVlcChzfHx7fSx7ZWxlbWVudDplLmRpdixnZDpuLHBsb3RpbmZvOntpZDplLmlkLHhheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxmaWxsUmFuZ2VJdGVtczphfSx4YXhlczpbZS54YXhpc10seWF4ZXM6W2UueWF4aXNdLHN1YnBsb3Q6ZS5pZH0pLHIub2ZmKCJjbGljayIsZS5vbkNsaWNrSW5QYW5IYW5kbGVyKSwic2VsZWN0Ij09PW98fCJsYXNzbyI9PT1vPyhyLmRyYWdQYW4uZGlzYWJsZSgpLHIub24oInpvb21zdGFydCIsZS5jbGVhclNlbGVjdCksZS5kcmFnT3B0aW9ucy5wcmVwRm49ZnVuY3Rpb24odCxyLG4pe3UodCxyLG4sZS5kcmFnT3B0aW9ucyxvKX0sYy5pbml0KGUuZHJhZ09wdGlvbnMpKTooci5kcmFnUGFuLmVuYWJsZSgpLHIub2ZmKCJ6b29tc3RhcnQiLGUuY2xlYXJTZWxlY3QpLGUuZGl2Lm9ubW91c2Vkb3duPW51bGwsZS5vbkNsaWNrSW5QYW5IYW5kbGVyPWUub25DbGlja0luUGFuRm4oZS5kcmFnT3B0aW9ucyksci5vbigiY2xpY2siLGUub25DbGlja0luUGFuSGFuZGxlcikpfWZ1bmN0aW9uIGwodCl7dmFyIHI9ZS5tYXAudW5wcm9qZWN0KHQpO3JldHVybltyLmxuZyxyLmxhdF19fSxnLnVwZGF0ZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10W3RoaXMuaWRdLmRvbWFpbixyPXQuX3NpemUsbj10aGlzLmRpdi5zdHlsZTtuLndpZHRoPXIudyooZS54WzFdLWUueFswXSkrInB4IixuLmhlaWdodD1yLmgqKGUueVsxXS1lLnlbMF0pKyJweCIsbi5sZWZ0PXIubCtlLnhbMF0qci53KyJweCIsbi50b3A9ci50KygxLWUueVsxXSkqci5oKyJweCIsdGhpcy54YXhpcy5fb2Zmc2V0PXIubCtlLnhbMF0qci53LHRoaXMueGF4aXMuX2xlbmd0aD1yLncqKGUueFsxXS1lLnhbMF0pLHRoaXMueWF4aXMuX29mZnNldD1yLnQrKDEtZS55WzFdKSpyLmgsdGhpcy55YXhpcy5fbGVuZ3RoPXIuaCooZS55WzFdLWUueVswXSl9LGcudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dFt0aGlzLmlkXS5sYXllcnMsbj10aGlzLmxheWVyTGlzdDtpZihyLmxlbmd0aCE9PW4ubGVuZ3RoKXtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV0uZGlzcG9zZSgpO2ZvcihuPXRoaXMubGF5ZXJMaXN0PVtdLGU9MDtlPHIubGVuZ3RoO2UrKyluLnB1c2gocCh0aGlzLGUscltlXSkpfWVsc2UgZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyluW2VdLnVwZGF0ZShyW2VdKX0sZy5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5tYXAmJih0aGlzLm1hcC5yZW1vdmUoKSx0aGlzLm1hcD1udWxsLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuZGl2KSl9LGcudG9JbWFnZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcC5zdG9wKCksdGhpcy5tYXAuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKCl9LGcuc2V0T3B0aW9ucz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIHIpdGhpcy5tYXBbZV0odCxuLHJbbl0pfSxnLmdldE1hcExheWVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcC5nZXRTdHlsZSgpLmxheWVyc30sZy5hZGRMYXllcj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubWFwO2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoIiI9PT1lKXJldHVybiB2b2lkIHIuYWRkTGF5ZXIodCxlKTtmb3IodmFyIG49dGhpcy5nZXRNYXBMYXllcnMoKSxhPTA7YTxuLmxlbmd0aDthKyspaWYoZT09PW5bYV0uaWQpcmV0dXJuIHZvaWQgci5hZGRMYXllcih0LGUpO2kud2FybihbIlRyeWluZyB0byBhZGQgbGF5ZXIgd2l0aCAqYmVsb3cqIHZhbHVlIixlLCJyZWZlcmVuY2luZyBhIGxheWVyIHRoYXQgZG9lcyBub3QgZXhpc3QiLCJvciB0aGF0IGRvZXMgbm90IHlldCBleGlzdC4iXS5qb2luKCIgIikpfXIuYWRkTGF5ZXIodCl9LGcucHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAucHJvamVjdChuZXcgbi5MbmdMYXQodFswXSx0WzFdKSl9LGcuZ2V0Vmlldz1mdW5jdGlvbigpe3ZhciB0PXRoaXMubWFwLGU9dC5nZXRDZW50ZXIoKSxyPXtsb246ZS5sbmcsbGF0OmUubGF0fSxuPXQuZ2V0Q2FudmFzKCksYT1uLndpZHRoLGk9bi5oZWlnaHQ7cmV0dXJue2NlbnRlcjpyLHpvb206dC5nZXRab29tKCksYmVhcmluZzp0LmdldEJlYXJpbmcoKSxwaXRjaDp0LmdldFBpdGNoKCksX2Rlcml2ZWQ6e2Nvb3JkaW5hdGVzOlt0LnVucHJvamVjdChbMCwwXSkudG9BcnJheSgpLHQudW5wcm9qZWN0KFthLDBdKS50b0FycmF5KCksdC51bnByb2plY3QoW2EsaV0pLnRvQXJyYXkoKSx0LnVucHJvamVjdChbMCxpXSkudG9BcnJheSgpXX19fSxnLmdldFZpZXdFZGl0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5pZCxyPVsiY2VudGVyIiwiem9vbSIsImJlYXJpbmciLCJwaXRjaCJdLG49e30sYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgaT1yW2FdO25bZSsiLiIraV09dFtpXX1yZXR1cm4gbn0sZy5nZXRWaWV3RWRpdHNXaXRoRGVyaXZlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5nZXRWaWV3RWRpdHModCk7cmV0dXJuIHJbZSsiLl9kZXJpdmVkIl09dC5fZGVyaXZlZCxyfSxlLmV4cG9ydHM9ZH0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo2MTAsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYzMCwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiOjcxMSwiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi4vY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi4vY2FydGVzaWFuL3NlbGVjdCI6NzgyLCIuL2NvbnN0YW50cyI6ODE4LCIuL2xheWVycyI6ODIxLCJtYXBib3gtZ2wiOjQyOH1dLDgyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5lZGl0VHlwZTtyZXR1cm57dDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0scjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0sYjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0sbDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ZX0sZWRpdFR5cGU6ZX19fSx7fV0sODI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vcmVnaXN0cnkiKSxvPXQoIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIikscz10KCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbD10KCIuLi9saWIiKSxjPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSx1PXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0saD10KCIuL2NhcnRlc2lhbi9heGlzX2lkcyIpLGY9dCgiLi9hbmltYXRpb25fYXR0cmlidXRlcyIpLHA9dCgiLi9mcmFtZV9hdHRyaWJ1dGVzIiksZD10KCIuLi9wbG90cy9nZXRfZGF0YSIpLmdldE1vZHVsZUNhbGNEYXRhLGc9bC5yZWxpbmtQcml2YXRlS2V5cyx2PWwuXyxtPWUuZXhwb3J0cz17fTtsLmV4dGVuZEZsYXQobSxpKSxtLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbS5hdHRyaWJ1dGVzLnR5cGUudmFsdWVzPW0uYWxsVHlwZXMsbS5mb250QXR0cnM9dCgiLi9mb250X2F0dHJpYnV0ZXMiKSxtLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG0uZm9udFdlaWdodD0ibm9ybWFsIjt2YXIgeT1tLnRyYW5zZm9ybXNSZWdpc3RyeSx4PXQoIi4vY29tbWFuZCIpO20uZXhlY3V0ZUFQSUNvbW1hbmQ9eC5leGVjdXRlQVBJQ29tbWFuZCxtLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3M9eC5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzLG0ubWFuYWdlQ29tbWFuZE9ic2VydmVyPXgubWFuYWdlQ29tbWFuZE9ic2VydmVyLG0uaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzPXguaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzLG0ucmVkcmF3VGV4dD1mdW5jdGlvbih0KXt2YXIgZT0odD1sLmdldEdyYXBoRGl2KHQpKS5fZnVsbExheW91dHx8e307aWYoISghKGUuX2hhcyYmZS5faGFzKCJwb2xhciIpKSYmdC5kYXRhJiZ0LmRhdGFbMF0mJnQuZGF0YVswXS5yKSlyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7c2V0VGltZW91dChmdW5jdGlvbigpe2kuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKSh0KSxlKG0ucHJldmlvdXNQcm9taXNlcyh0KSl9LDMwMCl9KX0sbS5yZXNpemU9ZnVuY3Rpb24odCl7dmFyIGU7dD1sLmdldEdyYXBoRGl2KHQpO3ZhciByPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7dCYmIWwuaXNIaWRkZW4odCl8fG4obmV3IEVycm9yKCJSZXNpemUgbXVzdCBiZSBwYXNzZWQgYSBkaXNwbGF5ZWQgcGxvdCBkaXYgZWxlbWVudC4iKSksdC5fcmVkcmF3VGltZXImJmNsZWFyVGltZW91dCh0Ll9yZWRyYXdUaW1lciksdC5fcmVzb2x2ZVJlc2l6ZSYmKGU9dC5fcmVzb2x2ZVJlc2l6ZSksdC5fcmVzb2x2ZVJlc2l6ZT1yLHQuX3JlZHJhd1RpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZighdC5sYXlvdXR8fHQubGF5b3V0LndpZHRoJiZ0LmxheW91dC5oZWlnaHR8fGwuaXNIaWRkZW4odCkpcih0KTtlbHNle2RlbGV0ZSB0LmxheW91dC53aWR0aCxkZWxldGUgdC5sYXlvdXQuaGVpZ2h0O3ZhciBlPXQuY2hhbmdlZDt0LmF1dG9wbGF5PSEwLGkuY2FsbCgicmVsYXlvdXQiLHQse2F1dG9zaXplOiEwfSkudGhlbihmdW5jdGlvbigpe3QuY2hhbmdlZD1lLHQuX3Jlc29sdmVSZXNpemU9PT1yJiYoZGVsZXRlIHQuX3Jlc29sdmVSZXNpemUscih0KSl9KX19LDEwMCl9KTtyZXR1cm4gZSYmZShyKSxyfSxtLnByZXZpb3VzUHJvbWlzZXM9ZnVuY3Rpb24odCl7aWYoKHQuX3Byb21pc2VzfHxbXSkubGVuZ3RoKXJldHVybiBQcm9taXNlLmFsbCh0Ll9wcm9taXNlcykudGhlbihmdW5jdGlvbigpe3QuX3Byb21pc2VzPVtdfSl9LG0uYWRkTGlua3M9ZnVuY3Rpb24odCl7aWYodC5fY29udGV4dC5zaG93TGlua3x8dC5fY29udGV4dC5zaG93U291cmNlcyl7dmFyIGU9dC5fZnVsbExheW91dCxyPWwuZW5zdXJlU2luZ2xlKGUuX3BhcGVyLCJ0ZXh0IiwianMtcGxvdC1saW5rLWNvbnRhaW5lciIsZnVuY3Rpb24odCl7dC5zdHlsZSh7ImZvbnQtZmFtaWx5IjonIk9wZW4gU2FucyIsIEFyaWFsLCBzYW5zLXNlcmlmJywiZm9udC1zaXplIjoiMTJweCIsZmlsbDpjLmRlZmF1bHRMaW5lLCJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5hcHBlbmQoInRzcGFuIikuY2xhc3NlZCgianMtbGluay10by10b29sIiwhMCksdC5hcHBlbmQoInRzcGFuIikuY2xhc3NlZCgianMtbGluay1zcGFjZXIiLCEwKSx0LmFwcGVuZCgidHNwYW4iKS5jbGFzc2VkKCJqcy1zb3VyY2VsaW5rcyIsITApfSl9KSxhPXIubm9kZSgpLGk9e3k6ZS5fcGFwZXIuYXR0cigiaGVpZ2h0IiktOX07ZG9jdW1lbnQuYm9keS5jb250YWlucyhhKSYmYS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT49ZS53aWR0aC0yMD8oaVsidGV4dC1hbmNob3IiXT0ic3RhcnQiLGkueD01KTooaVsidGV4dC1hbmNob3IiXT0iZW5kIixpLng9ZS5fcGFwZXIuYXR0cigid2lkdGgiKS03KSxyLmF0dHIoaSk7dmFyIG89ci5zZWxlY3QoIi5qcy1saW5rLXRvLXRvb2wiKSxzPXIuc2VsZWN0KCIuanMtbGluay1zcGFjZXIiKSx1PXIuc2VsZWN0KCIuanMtc291cmNlbGlua3MiKTt0Ll9jb250ZXh0LnNob3dTb3VyY2VzJiZ0Ll9jb250ZXh0LnNob3dTb3VyY2VzKHQpLHQuX2NvbnRleHQuc2hvd0xpbmsmJmZ1bmN0aW9uKHQsZSl7ZS50ZXh0KCIiKTt2YXIgcj1lLmFwcGVuZCgiYSIpLmF0dHIoeyJ4bGluazp4bGluazpocmVmIjoiIyIsY2xhc3M6ImxpbmstLWltcHQgbGluay0tZW1iZWR2aWV3IiwiZm9udC13ZWlnaHQiOiJib2xkIn0pLnRleHQodC5fY29udGV4dC5saW5rVGV4dCsiICIrU3RyaW5nLmZyb21DaGFyQ29kZSgxODcpKTtpZih0Ll9jb250ZXh0LnNlbmREYXRhKXIub24oImNsaWNrIixmdW5jdGlvbigpe20uc2VuZERhdGFUb0Nsb3VkKHQpfSk7ZWxzZXt2YXIgbj13aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoIi8iKSxhPXdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7ci5hdHRyKHsieGxpbms6eGxpbms6c2hvdyI6Im5ldyIsInhsaW5rOnhsaW5rOmhyZWYiOiIvIituWzJdLnNwbGl0KCIuIilbMF0rIi8iK25bMV0rYX0pfX0odCxvKSxzLnRleHQoby50ZXh0KCkmJnUudGV4dCgpPyIgLSAiOiIiKX19LG0uc2VuZERhdGFUb0Nsb3VkPWZ1bmN0aW9uKHQpe3QuZW1pdCgicGxvdGx5X2JlZm9yZWV4cG9ydCIpO3ZhciBlPSh3aW5kb3cuUExPVExZRU5WfHx7fSkuQkFTRV9VUkx8fHQuX2NvbnRleHQucGxvdGx5U2VydmVyVVJMLHI9bi5zZWxlY3QodCkuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImhpZGRlbmZvcm0iKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxhPXIuYXBwZW5kKCJmb3JtIikuYXR0cih7YWN0aW9uOmUrIi9leHRlcm5hbCIsbWV0aG9kOiJwb3N0Iix0YXJnZXQ6Il9ibGFuayJ9KTtyZXR1cm4gYS5hcHBlbmQoImlucHV0IikuYXR0cih7dHlwZToidGV4dCIsbmFtZToiZGF0YSJ9KS5ub2RlKCkudmFsdWU9bS5ncmFwaEpzb24odCwhMSwia2VlcGRhdGEiKSxhLm5vZGUoKS5zdWJtaXQoKSxyLnJlbW92ZSgpLHQuZW1pdCgicGxvdGx5X2FmdGVyZXhwb3J0IiksITF9O3ZhciBiPVsiZGF5cyIsInNob3J0RGF5cyIsIm1vbnRocyIsInNob3J0TW9udGhzIiwicGVyaW9kcyIsImRhdGVUaW1lIiwiZGF0ZSIsInRpbWUiLCJkZWNpbWFsIiwidGhvdXNhbmRzIiwiZ3JvdXBpbmciLCJjdXJyZW5jeSJdLF89WyJ5ZWFyIiwibW9udGgiLCJkYXlNb250aCIsImRheU1vbnRoWWVhciJdO2Z1bmN0aW9uIHcodCxlKXt2YXIgcj10Ll9jb250ZXh0LmxvY2FsZSxuPSExLGE9e307ZnVuY3Rpb24gbyh0KXtmb3IodmFyIHI9ITAsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldO2Fbb118fCh0W29dP2Fbb109dFtvXTpyPSExKX1yJiYobj0hMCl9Zm9yKHZhciBzPTA7czwyO3MrKyl7Zm9yKHZhciBsPXQuX2NvbnRleHQubG9jYWxlcyxjPTA7YzwyO2MrKyl7dmFyIHU9KGxbcl18fHt9KS5mb3JtYXQ7aWYodSYmKG8odSksbikpYnJlYWs7bD1pLmxvY2FsZVJlZ2lzdHJ5fXZhciBoPXIuc3BsaXQoIi0iKVswXTtpZihufHxoPT09cilicmVhaztyPWh9cmV0dXJuIG58fG8oaS5sb2NhbGVSZWdpc3RyeS5lbi5mb3JtYXQpLGF9ZnVuY3Rpb24gayh0LGUpe3ZhciByPXtfZnVsbExheW91dDplfSxuPSJ4Ij09PXQuX2lkLmNoYXJBdCgwKSxhPXQuX21haW5BeGlzLl9hbmNob3JBeGlzLGk9IiIsbz0iIixzPSIiO2lmKGEmJihzPWEuX21haW5BeGlzLl9pZCxpPW4/dC5faWQrczpzK3QuX2lkKSwhaXx8IWUuX3Bsb3RzW2ldKXtpPSIiO2Zvcih2YXIgbD10Ll9jb3VudGVyQXhlcyxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciB1PWxbY10sZj1uP3QuX2lkK3U6dSt0Ll9pZDtvfHwobz1mKTt2YXIgcD1oLmdldEZyb21JZChyLHUpO2lmKHMmJnAub3ZlcmxheWluZz09PXMpe2k9ZjticmVha319fXJldHVybiBpfHxvfWZ1bmN0aW9uIFQodCl7dmFyIGU9dC50cmFuc2Zvcm1zO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdLGE9bi5fbW9kdWxlfHx5W24udHlwZV07aWYoYSYmYS5tYWtlc0RhdGEpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gTSh0LGUscixuKXtmb3IodmFyIGE9dC50cmFuc2Zvcm1zLGk9W3RdLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPXlbcy50eXBlXTtsJiZsLnRyYW5zZm9ybSYmKGk9bC50cmFuc2Zvcm0oaSx7dHJhbnNmb3JtOnMsZnVsbFRyYWNlOnQsZnVsbERhdGE6ZSxsYXlvdXQ6cixmdWxsTGF5b3V0Om4sdHJhbnNmb3JtSW5kZXg6b30pKX1yZXR1cm4gaX1mdW5jdGlvbiBBKHQpe3ZhciBlPXQubWFyZ2luO2lmKCF0Ll9zaXplKXt2YXIgcj10Ll9zaXplPXtsOk1hdGgucm91bmQoZS5sKSxyOk1hdGgucm91bmQoZS5yKSx0Ok1hdGgucm91bmQoZS50KSxiOk1hdGgucm91bmQoZS5iKSxwOk1hdGgucm91bmQoZS5wYWQpfTtyLnc9TWF0aC5yb3VuZCh0LndpZHRoKS1yLmwtci5yLHIuaD1NYXRoLnJvdW5kKHQuaGVpZ2h0KS1yLnQtci5ifXQuX3B1c2htYXJnaW58fCh0Ll9wdXNobWFyZ2luPXt9KSx0Ll9wdXNobWFyZ2luSWRzfHwodC5fcHVzaG1hcmdpbklkcz17fSl9bS5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUmJmUuc2tpcFVwZGF0ZUNhbGMsYT10Ll9mdWxsTGF5b3V0fHx7fTtpZihhLl9za2lwRGVmYXVsdHMpZGVsZXRlIGEuX3NraXBEZWZhdWx0cztlbHNle3ZhciBvLHM9dC5fZnVsbExheW91dD17fSxjPXQubGF5b3V0fHx7fSx1PXQuX2Z1bGxEYXRhfHxbXSxoPXQuX2Z1bGxEYXRhPVtdLGY9dC5kYXRhfHxbXSxwPXQuY2FsY2RhdGF8fFtdLGQ9dC5fY29udGV4dHx8e307dC5fdHJhbnNpdGlvbkRhdGF8fG0uY3JlYXRlVHJhbnNpdGlvbkRhdGEodCkscy5fZGZsdFRpdGxlPXtwbG90OnYodCwiQ2xpY2sgdG8gZW50ZXIgUGxvdCB0aXRsZSIpLHg6dih0LCJDbGljayB0byBlbnRlciBYIGF4aXMgdGl0bGUiKSx5OnYodCwiQ2xpY2sgdG8gZW50ZXIgWSBheGlzIHRpdGxlIiksY29sb3JiYXI6dih0LCJDbGljayB0byBlbnRlciBDb2xvcnNjYWxlIHRpdGxlIiksYW5ub3RhdGlvbjp2KHQsIm5ldyB0ZXh0Iil9LHMuX3RyYWNlV29yZD12KHQsInRyYWNlIik7dmFyIHk9dyh0LGIpO2lmKHMuX21hcGJveEFjY2Vzc1Rva2VuPWQubWFwYm94QWNjZXNzVG9rZW4sYS5faW5pdGlhbEF1dG9TaXplSXNEb25lKXt2YXIgeD1hLndpZHRoLGs9YS5oZWlnaHQ7bS5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyhjLHMseSksYy53aWR0aHx8KHMud2lkdGg9eCksYy5oZWlnaHR8fChzLmhlaWdodD1rKSxtLnNhbml0aXplTWFyZ2lucyhzKX1lbHNle20uc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMoYyxzLHkpO3ZhciBUPSFjLndpZHRofHwhYy5oZWlnaHQsTT1zLmF1dG9zaXplLFM9ZC5hdXRvc2l6YWJsZTtUJiYoTXx8Uyk/bS5wbG90QXV0b1NpemUodCxjLHMpOlQmJm0uc2FuaXRpemVNYXJnaW5zKHMpLCFNJiZUJiYoYy53aWR0aD1zLndpZHRoLGMuaGVpZ2h0PXMuaGVpZ2h0KX1zLl9kM2xvY2FsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmRlY2ltYWw9ZS5jaGFyQXQoMCksdC50aG91c2FuZHM9ZS5jaGFyQXQoMSksbi5sb2NhbGUodCl9KHkscy5zZXBhcmF0b3JzKSxzLl9leHRyYUZvcm1hdD13KHQsXykscy5faW5pdGlhbEF1dG9TaXplSXNEb25lPSEwLHMuX2RhdGFMZW5ndGg9Zi5sZW5ndGgscy5fbW9kdWxlcz1bXSxzLl92aXNpYmxlTW9kdWxlcz1bXSxzLl9iYXNlUGxvdE1vZHVsZXM9W107dmFyIEU9cy5fc3VicGxvdHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9aS5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcyxuPXt9O2lmKCFyKXtyPVtdO3ZhciBhPWkuc3VicGxvdHNSZWdpc3RyeTtmb3IodmFyIG8gaW4gYSl7dmFyIHM9YVtvXSxjPXMuYXR0cjtpZihjJiYoci5wdXNoKG8pLEFycmF5LmlzQXJyYXkoYykpKWZvcihlPTA7ZTxjLmxlbmd0aDtlKyspbC5wdXNoVW5pcXVlKHIsY1tlXSl9fWZvcih0PTA7dDxyLmxlbmd0aDt0KyspbltyW3RdXT1bXTtyZXR1cm4gbn0oKSxMPXMuX3NwbG9tQXhlcz17eDp7fSx5Ont9fSxDPXMuX3NwbG9tU3VicGxvdHM9e307cy5fc3Bsb21HcmlkRGZsdD17fSxzLl9zY2F0dGVyU3RhY2tPcHRzPXt9LHMuX2ZpcnN0U2NhdHRlcj17fSxzLl9hbGlnbm1lbnRPcHRzPXt9LHMuX2NvbG9yQXhlcz17fSxzLl9yZXF1ZXN0UmFuZ2VzbGlkZXI9e30scy5fdHJhY2VVaWRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhPWUubGVuZ3RoLGk9W107Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXS5fZnVsbElucHV0O28hPT1uJiZpLnB1c2gobyksbj1vfXZhciBzPWkubGVuZ3RoLGM9bmV3IEFycmF5KGEpLHU9e307ZnVuY3Rpb24gaCh0LGUpe2NbZV09dCx1W3RdPTF9ZnVuY3Rpb24gZih0LGUpe2lmKHQmJiJzdHJpbmciPT10eXBlb2YgdCYmIXVbdF0pcmV0dXJuIGgodCxlKSwhMH1mb3Iocj0wO3I8YTtyKyspe3ZhciBwPWVbcl0udWlkOyJudW1iZXIiPT10eXBlb2YgcCYmKHA9U3RyaW5nKHApKSxmKHAscil8fChyPHMmJmYoaVtyXS51aWQscil8fGgobC5yYW5kc3RyKHUpLHIpKX1yZXR1cm4gY30odSxmKSxzLl9nbG9iYWxUcmFuc2Zvcm1zPSh0Ll9jb250ZXh0fHx7fSkuZ2xvYmFsVHJhbnNmb3JtcyxtLnN1cHBseURhdGFEZWZhdWx0cyhmLGgsYyxzKTt2YXIgUD1PYmplY3Qua2V5cyhMLngpLE89T2JqZWN0LmtleXMoTC55KTtpZihQLmxlbmd0aD4xJiZPLmxlbmd0aD4xKXtmb3IoaS5nZXRDb21wb25lbnRNZXRob2QoImdyaWQiLCJzaXplRGVmYXVsdHMiKShjLHMpLG89MDtvPFAubGVuZ3RoO28rKylsLnB1c2hVbmlxdWUoRS54YXhpcyxQW29dKTtmb3Iobz0wO288Ty5sZW5ndGg7bysrKWwucHVzaFVuaXF1ZShFLnlheGlzLE9bb10pO2Zvcih2YXIgeiBpbiBDKWwucHVzaFVuaXF1ZShFLmNhcnRlc2lhbix6KX1pZihzLl9oYXM9bS5faGFzUGxvdFR5cGUuYmluZChzKSx1Lmxlbmd0aD09PWgubGVuZ3RoKWZvcihvPTA7bzxoLmxlbmd0aDtvKyspZyhoW29dLHVbb10pO20uc3VwcGx5TGF5b3V0TW9kdWxlRGVmYXVsdHMoYyxzLGgsdC5fdHJhbnNpdGlvbkRhdGEpO3ZhciBJPXMuX3Zpc2libGVNb2R1bGVzLEQ9W107Zm9yKG89MDtvPEkubGVuZ3RoO28rKyl7dmFyIFI9SVtvXS5jcm9zc1RyYWNlRGVmYXVsdHM7UiYmbC5wdXNoVW5pcXVlKEQsUil9Zm9yKG89MDtvPEQubGVuZ3RoO28rKylEW29dKGgscyk7cy5faGFzT25seUxhcmdlU3Bsb21zPTE9PT1zLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoJiYic3Bsb20iPT09cy5fYmFzZVBsb3RNb2R1bGVzWzBdLm5hbWUmJlAubGVuZ3RoPjE1JiZPLmxlbmd0aD4xNSYmMD09PXMuc2hhcGVzLmxlbmd0aCYmMD09PXMuaW1hZ2VzLmxlbmd0aCxzLl9oYXNDYXJ0ZXNpYW49cy5faGFzKCJjYXJ0ZXNpYW4iKSxzLl9oYXNHZW89cy5faGFzKCJnZW8iKSxzLl9oYXNHTDNEPXMuX2hhcygiZ2wzZCIpLHMuX2hhc0dMMkQ9cy5faGFzKCJnbDJkIikscy5faGFzVGVybmFyeT1zLl9oYXMoInRlcm5hcnkiKSxzLl9oYXNQaWU9cy5faGFzKCJwaWUiKSxtLmxpbmtTdWJwbG90cyhoLHMsdSxhKSxtLmNsZWFuUGxvdChoLHMsdSxhKSxhLl96b29tbGF5ZXImJiF0Ll9kcmFnZ2luZyYmYS5fem9vbWxheWVyLnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lIikucmVtb3ZlKCksZnVuY3Rpb24odCxlKXt2YXIgcixuPVtdO2UubWV0YSYmKHI9ZS5fbWV0YT17bWV0YTplLm1ldGEsbGF5b3V0OnttZXRhOmUubWV0YX19KTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIGk9dFthXTtpLm1ldGE/bltpLmluZGV4XT1pLl9tZXRhPXttZXRhOmkubWV0YX06ZS5tZXRhJiYoaS5fbWV0YT17bWV0YTplLm1ldGF9KSxlLm1ldGEmJihpLl9tZXRhLmxheW91dD17bWV0YTplLm1ldGF9KX1uLmxlbmd0aCYmKHJ8fChyPWUuX21ldGE9e30pLHIuZGF0YT1uKX0oaCxzKSxnKHMsYSksaS5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yc2NhbGUiLCJjcm9zc1RyYWNlRGVmYXVsdHMiKShoLHMpLHMuX3ByZUdVSXx8KHMuX3ByZUdVST17fSkscy5fdHJhY2VQcmVHVUl8fChzLl90cmFjZVByZUdVST17fSk7dmFyIEYsQj1zLl90cmFjZVByZUdVSSxOPXt9O2ZvcihGIGluIEIpTltGXT0ib2xkIjtmb3Iobz0wO288aC5sZW5ndGg7bysrKU5bRj1oW29dLl9mdWxsSW5wdXQudWlkXXx8KEJbRl09e30pLE5bRl09Im5ldyI7Zm9yKEYgaW4gTikib2xkIj09PU5bRl0mJmRlbGV0ZSBCW0ZdO0EocyksaS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwibWFrZURhdGEiKShzKSxyfHxwLmxlbmd0aCE9PWgubGVuZ3RofHxtLnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYyhwLGgpfX0sbS5zdXBwbHlEZWZhdWx0c1VwZGF0ZUNhbGM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxhPSh0W3JdfHxbXSlbMF07aWYoYSYmYS50cmFjZSl7dmFyIGk9YS50cmFjZTtpZihpLl9oYXNDYWxjVHJhbnNmb3JtKXt2YXIgbyxzLGMsdT1pLl9hcnJheUF0dHJzO2ZvcihvPTA7bzx1Lmxlbmd0aDtvKyspcz11W29dLGM9bC5uZXN0ZWRQcm9wZXJ0eShpLHMpLmdldCgpLnNsaWNlKCksbC5uZXN0ZWRQcm9wZXJ0eShuLHMpLnNldChjKX1hLnRyYWNlPW59fX0sbS5jcmVhdGVUcmFuc2l0aW9uRGF0YT1mdW5jdGlvbih0KXt0Ll90cmFuc2l0aW9uRGF0YXx8KHQuX3RyYW5zaXRpb25EYXRhPXt9KSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcz1bXSksdC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaHx8KHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9jb3VudGVyfHwodC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXI9MCksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrc3x8KHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3M9W10pfSxtLl9oYXNQbG90VHlwZT1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKylpZihyW2VdLm5hbWU9PT10KXJldHVybiEwO3ZhciBuPXRoaXMuX21vZHVsZXN8fFtdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe3ZhciBhPW5bZV0ubmFtZTtpZihhPT09dClyZXR1cm4hMDt2YXIgbz1pLm1vZHVsZXNbYV07aWYobyYmby5jYXRlZ29yaWVzW3RdKXJldHVybiEwfXJldHVybiExfSxtLmNsZWFuUGxvdD1mdW5jdGlvbih0LGUscixuKXt2YXIgYSxpLG89bi5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IoYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgcz1vW2FdO3MuY2xlYW4mJnMuY2xlYW4odCxlLHIsbil9dmFyIGw9bi5faGFzJiZuLl9oYXMoImdsIiksYz1lLl9oYXMmJmUuX2hhcygiZ2wiKTtsJiYhYyYmdm9pZCAwIT09bi5fZ2xjb250YWluZXImJihuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5yZW1vdmUoKSxuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5uby13ZWJnbCIpLnJlbW92ZSgpLG4uX2dsY2FudmFzPW51bGwpO3ZhciB1PSEhbi5faW5mb2xheWVyO3Q6Zm9yKGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIGg9clthXS51aWQ7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7aWYoaD09PXRbaV0udWlkKWNvbnRpbnVlIHR9dSYmbi5faW5mb2xheWVyLnNlbGVjdCgiLmNiIitoKS5yZW1vdmUoKX19LG0ubGlua1N1YnBsb3RzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLG8scz1uLl9wbG90c3x8e30sYz1lLl9wbG90cz17fSx1PWUuX3N1YnBsb3RzLGY9e19mdWxsRGF0YTp0LF9mdWxsTGF5b3V0OmV9LHA9dS5jYXJ0ZXNpYW4uY29uY2F0KHUuZ2wyZHx8W10pO2ZvcihhPTA7YTxwLmxlbmd0aDthKyspe3ZhciBkLGc9cFthXSx2PXNbZ10sbT1oLmdldEZyb21JZChmLGcsIngiKSx5PWguZ2V0RnJvbUlkKGYsZywieSIpO2Zvcih2P2Q9Y1tnXT12OihkPWNbZ109e30pLmlkPWcsbS5fY291bnRlckF4ZXMucHVzaCh5Ll9pZCkseS5fY291bnRlckF4ZXMucHVzaChtLl9pZCksbS5fc3VicGxvdHNXaXRoLnB1c2goZykseS5fc3VicGxvdHNXaXRoLnB1c2goZyksZC54YXhpcz1tLGQueWF4aXM9eSxkLl9oYXNDbGlwT25BeGlzRmFsc2U9ITEsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgeD10W29dO2lmKHgueGF4aXM9PT1kLnhheGlzLl9pZCYmeC55YXhpcz09PWQueWF4aXMuX2lkJiYhMT09PXguY2xpcG9uYXhpcyl7ZC5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX19dmFyIGIsXz1oLmxpc3QoZixudWxsLCEwKTtmb3IoYT0wO2E8Xy5sZW5ndGg7YSsrKXt2YXIgdz1udWxsOyhiPV9bYV0pLm92ZXJsYXlpbmcmJih3PWguZ2V0RnJvbUlkKGYsYi5vdmVybGF5aW5nKSkmJncub3ZlcmxheWluZyYmKGIub3ZlcmxheWluZz0hMSx3PW51bGwpLGIuX21haW5BeGlzPXd8fGIsdyYmKGIuZG9tYWluPXcuZG9tYWluLnNsaWNlKCkpLGIuX2FuY2hvckF4aXM9ImZyZWUiPT09Yi5hbmNob3I/bnVsbDpoLmdldEZyb21JZChmLGIuYW5jaG9yKX1mb3IoYT0wO2E8Xy5sZW5ndGg7YSsrKWlmKChiPV9bYV0pLl9jb3VudGVyQXhlcy5zb3J0KGguaWRTb3J0KSxiLl9zdWJwbG90c1dpdGguc29ydChsLnN1YnBsb3RTb3J0KSxiLl9tYWluU3VicGxvdD1rKGIsZSksYi5fY291bnRlckF4ZXMubGVuZ3RoJiYoYi5zcGlrZW1vZGUmJi0xIT09Yi5zcGlrZW1vZGUuaW5kZXhPZigiYWNyb3NzIil8fGIuYXV0b21hcmdpbiYmYi5taXJyb3ImJiJmcmVlIiE9PWIuYW5jaG9yfHxpLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShiKSkpe3ZhciBUPTEsTT0wO2ZvcihvPTA7bzxiLl9jb3VudGVyQXhlcy5sZW5ndGg7bysrKXt2YXIgQT1oLmdldEZyb21JZChmLGIuX2NvdW50ZXJBeGVzW29dKTtUPU1hdGgubWluKFQsQS5kb21haW5bMF0pLE09TWF0aC5tYXgoTSxBLmRvbWFpblsxXSl9VDxNJiYoYi5fY291bnRlckRvbWFpbk1pbj1ULGIuX2NvdW50ZXJEb21haW5NYXg9TSl9fSxtLmNsZWFyRXhwYW5kZWRUcmFjZURlZmF1bHRDb2xvcnM9ZnVuY3Rpb24odCl7dmFyIGUscixuO2ZvcihyPVtdLChlPXQuX21vZHVsZS5fY29sb3JBdHRycyl8fCh0Ll9tb2R1bGUuX2NvbG9yQXR0cnM9ZT1bXSxvLmNyYXdsKHQuX21vZHVsZS5hdHRyaWJ1dGVzLGZ1bmN0aW9uKHQsbixhLGkpe3JbaV09bixyLmxlbmd0aD1pKzEsImNvbG9yIj09PXQudmFsVHlwZSYmdm9pZCAwPT09dC5kZmx0JiZlLnB1c2goci5qb2luKCIuIikpfSkpLG49MDtuPGUubGVuZ3RoO24rKyl7bC5uZXN0ZWRQcm9wZXJ0eSh0LCJfaW5wdXQuIitlW25dKS5nZXQoKXx8bC5uZXN0ZWRQcm9wZXJ0eSh0LGVbbl0pLnNldChudWxsKX19LG0uc3VwcGx5RGF0YURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLG8sYyx1PW4uX21vZHVsZXMsaD1uLl92aXNpYmxlTW9kdWxlcyxmPW4uX2Jhc2VQbG90TW9kdWxlcyxwPTAsZD0wO2Z1bmN0aW9uIHYodCl7ZS5wdXNoKHQpO3ZhciByPXQuX21vZHVsZTtyJiYobC5wdXNoVW5pcXVlKHUsciksITA9PT10LnZpc2libGUmJmwucHVzaFVuaXF1ZShoLHIpLGwucHVzaFVuaXF1ZShmLHQuX21vZHVsZS5iYXNlUGxvdE1vZHVsZSkscCsrLCExIT09dC5faW5wdXQudmlzaWJsZSYmZCsrKX1uLl90cmFuc2Zvcm1Nb2R1bGVzPVtdO3ZhciB5PXt9LHg9W10sYj0oci50ZW1wbGF0ZXx8e30pLmRhdGF8fHt9LF89cy50cmFjZVRlbXBsYXRlcihiKTtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKXtpZihjPXRbYV0sKG89Xy5uZXdUcmFjZShjKSkudWlkPW4uX3RyYWNlVWlkc1thXSxtLnN1cHBseVRyYWNlRGVmYXVsdHMoYyxvLGQsbixhKSxvLmluZGV4PWEsby5faW5wdXQ9YyxvLl9leHBhbmRlZEluZGV4PXAsby50cmFuc2Zvcm1zJiZvLnRyYW5zZm9ybXMubGVuZ3RoKWZvcih2YXIgdz0hMSE9PWMudmlzaWJsZSYmITE9PT1vLnZpc2libGUsaz1NKG8sZSxyLG4pLFQ9MDtUPGsubGVuZ3RoO1QrKyl7dmFyIEE9a1tUXSxTPXtfdGVtcGxhdGU6by5fdGVtcGxhdGUsdHlwZTpvLnR5cGUsdWlkOm8udWlkK1R9O3cmJiExPT09QS52aXNpYmxlJiZkZWxldGUgQS52aXNpYmxlLG0uc3VwcGx5VHJhY2VEZWZhdWx0cyhBLFMscCxuLGEpLGcoUyxBKSxTLmluZGV4PWEsUy5faW5wdXQ9YyxTLl9mdWxsSW5wdXQ9byxTLl9leHBhbmRlZEluZGV4PXAsUy5fZXhwYW5kZWRJbnB1dD1BLHYoUyl9ZWxzZSBvLl9mdWxsSW5wdXQ9byxvLl9leHBhbmRlZElucHV0PW8sdihvKTtpLnRyYWNlSXMobywiY2FycGV0QXhpcyIpJiYoeVtvLmNhcnBldF09byksaS50cmFjZUlzKG8sImNhcnBldERlcGVuZGVudCIpJiZ4LnB1c2goYSl9Zm9yKGE9MDthPHgubGVuZ3RoO2ErKylpZigobz1lW3hbYV1dKS52aXNpYmxlKXt2YXIgRT15W28uY2FycGV0XTtvLl9jYXJwZXQ9RSxFJiZFLnZpc2libGU/KG8ueGF4aXM9RS54YXhpcyxvLnlheGlzPUUueWF4aXMpOm8udmlzaWJsZT0hMX19LG0uc3VwcGx5QW5pbWF0aW9uRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU7dD10fHx7fTt2YXIgcj17fTtmdW5jdGlvbiBuKGUsbil7cmV0dXJuIGwuY29lcmNlKHR8fHt9LHIsZixlLG4pfWlmKG4oIm1vZGUiKSxuKCJkaXJlY3Rpb24iKSxuKCJmcm9tY3VycmVudCIpLEFycmF5LmlzQXJyYXkodC5mcmFtZSkpZm9yKHIuZnJhbWU9W10sZT0wO2U8dC5mcmFtZS5sZW5ndGg7ZSsrKXIuZnJhbWVbZV09bS5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzKHQuZnJhbWVbZV18fHt9KTtlbHNlIHIuZnJhbWU9bS5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzKHQuZnJhbWV8fHt9KTtpZihBcnJheS5pc0FycmF5KHQudHJhbnNpdGlvbikpZm9yKHIudHJhbnNpdGlvbj1bXSxlPTA7ZTx0LnRyYW5zaXRpb24ubGVuZ3RoO2UrKylyLnRyYW5zaXRpb25bZV09bS5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHModC50cmFuc2l0aW9uW2VdfHx7fSk7ZWxzZSByLnRyYW5zaXRpb249bS5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHModC50cmFuc2l0aW9ufHx7fSk7cmV0dXJuIHJ9LG0uc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIGwuY29lcmNlKHR8fHt9LGUsZi5mcmFtZSxyLG4pfXJldHVybiByKCJkdXJhdGlvbiIpLHIoInJlZHJhdyIpLGV9LG0uc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gbC5jb2VyY2UodHx8e30sZSxmLnRyYW5zaXRpb24scixuKX1yZXR1cm4gcigiZHVyYXRpb24iKSxyKCJlYXNpbmciKSxlfSxtLnN1cHBseUZyYW1lRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiBsLmNvZXJjZSh0LGUscCxyLG4pfXJldHVybiByKCJncm91cCIpLHIoIm5hbWUiKSxyKCJ0cmFjZXMiKSxyKCJiYXNlZnJhbWUiKSxyKCJkYXRhIikscigibGF5b3V0IiksZX0sbS5zdXBwbHlUcmFjZURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG8scz1uLmNvbG9yd2F5fHxjLmRlZmF1bHRzLHU9c1tyJXMubGVuZ3RoXTtmdW5jdGlvbiBoKHIsbil7cmV0dXJuIGwuY29lcmNlKHQsZSxtLmF0dHJpYnV0ZXMscixuKX12YXIgZj1oKCJ2aXNpYmxlIik7aCgidHlwZSIpLGgoIm5hbWUiLG4uX3RyYWNlV29yZCsiICIrYSksaCgidWlyZXZpc2lvbiIsbi51aXJldmlzaW9uKTt2YXIgcD1tLmdldE1vZHVsZShlKTtpZihlLl9tb2R1bGU9cCxwKXt2YXIgZD1wLmJhc2VQbG90TW9kdWxlLGc9ZC5hdHRyLHY9ZC5hdHRyaWJ1dGVzO2lmKGcmJnYpe3ZhciB5PW4uX3N1YnBsb3RzLHg9IiI7aWYoZnx8ImdsMmQiIT09ZC5uYW1lKXtpZihBcnJheS5pc0FycmF5KGcpKWZvcihvPTA7bzxnLmxlbmd0aDtvKyspe3ZhciBiPWdbb10sXz1sLmNvZXJjZSh0LGUsdixiKTt5W2JdJiZsLnB1c2hVbmlxdWUoeVtiXSxfKSx4Kz1ffWVsc2UgeD1sLmNvZXJjZSh0LGUsdixnKTt5W2QubmFtZV0mJmwucHVzaFVuaXF1ZSh5W2QubmFtZV0seCl9fX1yZXR1cm4gZiYmKGgoImN1c3RvbWRhdGEiKSxoKCJpZHMiKSxoKCJtZXRhIiksaS50cmFjZUlzKGUsInNob3dMZWdlbmQiKT8obC5jb2VyY2UodCxlLHAuYXR0cmlidXRlcy5zaG93bGVnZW5kP3AuYXR0cmlidXRlczptLmF0dHJpYnV0ZXMsInNob3dsZWdlbmQiKSxoKCJsZWdlbmRncm91cCIpLGUuX2RmbHRTaG93TGVnZW5kPSEwKTplLl9kZmx0U2hvd0xlZ2VuZD0hMSxwJiZwLnN1cHBseURlZmF1bHRzKHQsZSx1LG4pLGkudHJhY2VJcyhlLCJub09wYWNpdHkiKXx8aCgib3BhY2l0eSIpLGkudHJhY2VJcyhlLCJub3RMZWdlbmRJc29sYXRhYmxlIikmJihlLnZpc2libGU9ISFlLnZpc2libGUpLGkudHJhY2VJcyhlLCJub0hvdmVyIil8fChlLmhvdmVydGVtcGxhdGV8fGwuY29lcmNlSG92ZXJpbmZvKHQsZSxuKSwicGFyY2F0cyIhPT1lLnR5cGUmJmkuZ2V0Q29tcG9uZW50TWV0aG9kKCJmeCIsInN1cHBseURlZmF1bHRzIikodCxlLHUsbikpLHAmJnAuc2VsZWN0UG9pbnRzJiZoKCJzZWxlY3RlZHBvaW50cyIpLG0uc3VwcGx5VHJhbnNmb3JtRGVmYXVsdHModCxlLG4pKSxlfSxtLmhhc01ha2VzRGF0YVRyYW5zZm9ybT1ULG0uc3VwcGx5VHJhbnNmb3JtRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2lmKGUuX2xlbmd0aHx8VCh0KSl7dmFyIG49ci5fZ2xvYmFsVHJhbnNmb3Jtc3x8W10sYT1yLl90cmFuc2Zvcm1Nb2R1bGVzfHxbXTtpZihBcnJheS5pc0FycmF5KHQudHJhbnNmb3Jtcyl8fDAhPT1uLmxlbmd0aClmb3IodmFyIGk9dC50cmFuc2Zvcm1zfHxbXSxvPW4uY29uY2F0KGkpLHM9ZS50cmFuc2Zvcm1zPVtdLGM9MDtjPG8ubGVuZ3RoO2MrKyl7dmFyIHUsaD1vW2NdLGY9aC50eXBlLHA9eVtmXSxkPSEoaC5fbW9kdWxlJiZoLl9tb2R1bGU9PT1wKSxnPXAmJiJmdW5jdGlvbiI9PXR5cGVvZiBwLnRyYW5zZm9ybTtwfHxsLndhcm4oIlVucmVjb2duaXplZCB0cmFuc2Zvcm0gdHlwZSAiK2YrIi4iKSxwJiZwLnN1cHBseURlZmF1bHRzJiYoZHx8Zyk/KCh1PXAuc3VwcGx5RGVmYXVsdHMoaCxlLHIsdCkpLnR5cGU9Zix1Ll9tb2R1bGU9cCxsLnB1c2hVbmlxdWUoYSxwKSk6dT1sLmV4dGVuZEZsYXQoe30saCkscy5wdXNoKHUpfX19LG0uc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gbC5jb2VyY2UodCxlLG0ubGF5b3V0QXR0cmlidXRlcyxyLG4pfXZhciBhPXQudGVtcGxhdGU7bC5pc1BsYWluT2JqZWN0KGEpJiYoZS50ZW1wbGF0ZT1hLGUuX3RlbXBsYXRlPWEubGF5b3V0LGUuX2RhdGFUZW1wbGF0ZT1hLmRhdGEpO3ZhciBvPWwuY29lcmNlRm9udChuLCJmb250Iik7bigidGl0bGUudGV4dCIsZS5fZGZsdFRpdGxlLnBsb3QpLGwuY29lcmNlRm9udChuLCJ0aXRsZS5mb250Iix7ZmFtaWx5Om8uZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjQqby5zaXplKSxjb2xvcjpvLmNvbG9yfSksbigidGl0bGUueHJlZiIpLG4oInRpdGxlLnlyZWYiKSxuKCJ0aXRsZS54IiksbigidGl0bGUueSIpLG4oInRpdGxlLnhhbmNob3IiKSxuKCJ0aXRsZS55YW5jaG9yIiksbigidGl0bGUucGFkLnQiKSxuKCJ0aXRsZS5wYWQuciIpLG4oInRpdGxlLnBhZC5iIiksbigidGl0bGUucGFkLmwiKSxuKCJ1bmlmb3JtdGV4dC5tb2RlIikmJm4oInVuaWZvcm10ZXh0Lm1pbnNpemUiKSxuKCJhdXRvc2l6ZSIsISh0LndpZHRoJiZ0LmhlaWdodCkpLG4oIndpZHRoIiksbigiaGVpZ2h0IiksbigibWFyZ2luLmwiKSxuKCJtYXJnaW4uciIpLG4oIm1hcmdpbi50IiksbigibWFyZ2luLmIiKSxuKCJtYXJnaW4ucGFkIiksbigibWFyZ2luLmF1dG9leHBhbmQiKSx0LndpZHRoJiZ0LmhlaWdodCYmbS5zYW5pdGl6ZU1hcmdpbnMoZSksaS5nZXRDb21wb25lbnRNZXRob2QoImdyaWQiLCJzaXplRGVmYXVsdHMiKSh0LGUpLG4oInBhcGVyX2JnY29sb3IiKSxuKCJzZXBhcmF0b3JzIixyLmRlY2ltYWwrci50aG91c2FuZHMpLG4oImhpZGVzb3VyY2VzIiksbigiY29sb3J3YXkiKSxuKCJkYXRhcmV2aXNpb24iKTt2YXIgcz1uKCJ1aXJldmlzaW9uIik7bigiZWRpdHJldmlzaW9uIixzKSxuKCJzZWxlY3Rpb25yZXZpc2lvbiIscyksbigibW9kZWJhci5vcmllbnRhdGlvbiIpLG4oIm1vZGViYXIuYmdjb2xvciIsYy5hZGRPcGFjaXR5KGUucGFwZXJfYmdjb2xvciwuNSkpO3ZhciB1PWMuY29udHJhc3QoYy5yZ2IoZS5tb2RlYmFyLmJnY29sb3IpKTtuKCJtb2RlYmFyLmNvbG9yIixjLmFkZE9wYWNpdHkodSwuMykpLG4oIm1vZGViYXIuYWN0aXZlY29sb3IiLGMuYWRkT3BhY2l0eSh1LC43KSksbigibW9kZWJhci51aXJldmlzaW9uIixzKSxuKCJtZXRhIiksbC5pc1BsYWluT2JqZWN0KHQudHJhbnNpdGlvbikmJihuKCJ0cmFuc2l0aW9uLmR1cmF0aW9uIiksbigidHJhbnNpdGlvbi5lYXNpbmciKSxuKCJ0cmFuc2l0aW9uLm9yZGVyaW5nIikpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVEZWZhdWx0cyIpKHQsZSwiY2FsZW5kYXIiKSxpLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJzdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyIpKHQsZSxuKX0sbS5wbG90QXV0b1NpemU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbz10Ll9jb250ZXh0fHx7fSxzPW8uZnJhbWVNYXJnaW5zLGM9bC5pc1Bsb3REaXYodCk7aWYoYyYmdC5lbWl0KCJwbG90bHlfYXV0b3NpemUiKSxvLmZpbGxGcmFtZSluPXdpbmRvdy5pbm5lcldpZHRoLGk9d2luZG93LmlubmVySGVpZ2h0LGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7ZWxzZXt2YXIgdT1jP3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpOnt9O2lmKG49cGFyc2VGbG9hdCh1LndpZHRoKXx8cGFyc2VGbG9hdCh1Lm1heFdpZHRoKXx8ci53aWR0aCxpPXBhcnNlRmxvYXQodS5oZWlnaHQpfHxwYXJzZUZsb2F0KHUubWF4SGVpZ2h0KXx8ci5oZWlnaHQsYShzKSYmcz4wKXt2YXIgaD0xLTIqcztuPU1hdGgucm91bmQoaCpuKSxpPU1hdGgucm91bmQoaCppKX19dmFyIGY9bS5sYXlvdXRBdHRyaWJ1dGVzLndpZHRoLm1pbixwPW0ubGF5b3V0QXR0cmlidXRlcy5oZWlnaHQubWluO248ZiYmKG49ZiksaTxwJiYoaT1wKTt2YXIgZD0hZS53aWR0aCYmTWF0aC5hYnMoci53aWR0aC1uKT4xLGc9IWUuaGVpZ2h0JiZNYXRoLmFicyhyLmhlaWdodC1pKT4xOyhnfHxkKSYmKGQmJihyLndpZHRoPW4pLGcmJihyLmhlaWdodD1pKSksdC5faW5pdGlhbEF1dG9TaXplfHwodC5faW5pdGlhbEF1dG9TaXplPXt3aWR0aDpuLGhlaWdodDppfSksbS5zYW5pdGl6ZU1hcmdpbnMocil9LG0uc3VwcGx5TGF5b3V0TW9kdWxlRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGEsbyxzLGM9aS5jb21wb25lbnRzUmVnaXN0cnksdT1lLl9iYXNlUGxvdE1vZHVsZXMsaD1pLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFuO2ZvcihhIGluIGMpKHM9Y1thXSkuaW5jbHVkZUJhc2VQbG90JiZzLmluY2x1ZGVCYXNlUGxvdCh0LGUpO2Zvcih2YXIgZiBpbiB1Lmxlbmd0aHx8dS5wdXNoKGgpLGUuX2hhcygiY2FydGVzaWFuIikmJihpLmdldENvbXBvbmVudE1ldGhvZCgiZ3JpZCIsImNvbnRlbnREZWZhdWx0cyIpKHQsZSksaC5maW5hbGl6ZVN1YnBsb3RzKHQsZSkpLGUuX3N1YnBsb3RzKWUuX3N1YnBsb3RzW2ZdLnNvcnQobC5zdWJwbG90U29ydCk7Zm9yKG89MDtvPHUubGVuZ3RoO28rKykocz11W29dKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmcy5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscik7dmFyIHA9ZS5fbW9kdWxlcztmb3Iobz0wO288cC5sZW5ndGg7bysrKShzPXBbb10pLnN1cHBseUxheW91dERlZmF1bHRzJiZzLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKTt2YXIgZD1lLl90cmFuc2Zvcm1Nb2R1bGVzO2ZvcihvPTA7bzxkLmxlbmd0aDtvKyspKHM9ZFtvXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJnMuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIsbik7Zm9yKGEgaW4gYykocz1jW2FdKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmcy5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscil9LG0ucHVyZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dHx8e307dm9pZCAwIT09ZS5fZ2xjb250YWluZXImJihlLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5yZW1vdmUoKSxlLl9nbGNvbnRhaW5lci5yZW1vdmUoKSxlLl9nbGNhbnZhcz1udWxsKSxlLl9tb2RlQmFyJiZlLl9tb2RlQmFyLmRlc3Ryb3koKSx0Ll90cmFuc2l0aW9uRGF0YSYmKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MmJih0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLmxlbmd0aD0wKSx0Ll90cmFuc2l0aW9uRGF0YS5fYW5pbWF0aW9uUmFmJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodC5fdHJhbnNpdGlvbkRhdGEuX2FuaW1hdGlvblJhZikpLGwuY2xlYXJUaHJvdHRsZSgpLGwuY2xlYXJSZXNwb25zaXZlKHQpLGRlbGV0ZSB0LmRhdGEsZGVsZXRlIHQubGF5b3V0LGRlbGV0ZSB0Ll9mdWxsRGF0YSxkZWxldGUgdC5fZnVsbExheW91dCxkZWxldGUgdC5jYWxjZGF0YSxkZWxldGUgdC5mcmFtZXdvcmssZGVsZXRlIHQuZW1wdHksZGVsZXRlIHQuZmlkLGRlbGV0ZSB0LnVuZG9xdWV1ZSxkZWxldGUgdC51bmRvbnVtLGRlbGV0ZSB0LmF1dG9wbGF5LGRlbGV0ZSB0LmNoYW5nZWQsZGVsZXRlIHQuX3Byb21pc2VzLGRlbGV0ZSB0Ll9yZWRyYXdUaW1lcixkZWxldGUgdC5faG1sdW1jb3VudCxkZWxldGUgdC5faG1waXhjb3VudCxkZWxldGUgdC5fdHJhbnNpdGlvbkRhdGEsZGVsZXRlIHQuX3RyYW5zaXRpb25pbmcsZGVsZXRlIHQuX2luaXRpYWxBdXRvU2l6ZSxkZWxldGUgdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbixkZWxldGUgdC5fZHJhZ2dpbmcsZGVsZXRlIHQuX2RyYWdnZWQsZGVsZXRlIHQuX2RyYWdkYXRhLGRlbGV0ZSB0Ll9ob3ZlcmRhdGEsZGVsZXRlIHQuX3NuYXBzaG90SW5Qcm9ncmVzcyxkZWxldGUgdC5fZWRpdGluZyxkZWxldGUgdC5fbW91c2VEb3duVGltZSxkZWxldGUgdC5fbGVnZW5kTW91c2VEb3duVGltZSx0LnJlbW92ZUFsbExpc3RlbmVycyYmdC5yZW1vdmVBbGxMaXN0ZW5lcnMoKX0sbS5zdHlsZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQuX2Z1bGxMYXlvdXQuX3Zpc2libGVNb2R1bGVzLG49W107Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGE9cltlXTthLnN0eWxlJiZsLnB1c2hVbmlxdWUobixhLnN0eWxlKX1mb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV0odCl9LG0uc2FuaXRpemVNYXJnaW5zPWZ1bmN0aW9uKHQpe2lmKHQmJnQubWFyZ2luKXt2YXIgZSxyPXQud2lkdGgsbj10LmhlaWdodCxhPXQubWFyZ2luLGk9ci0oYS5sK2Euciksbz1uLShhLnQrYS5iKTtpPDAmJihlPShyLTEpLyhhLmwrYS5yKSxhLmw9TWF0aC5mbG9vcihlKmEubCksYS5yPU1hdGguZmxvb3IoZSphLnIpKSxvPDAmJihlPShuLTEpLyhhLnQrYS5iKSxhLnQ9TWF0aC5mbG9vcihlKmEudCksYS5iPU1hdGguZmxvb3IoZSphLmIpKX19LG0uY2xlYXJBdXRvTWFyZ2luSWRzPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3B1c2htYXJnaW5JZHM9e319LG0uYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKHQsZSl7dC5fZnVsbExheW91dC5fcHVzaG1hcmdpbklkc1tlXT0xfSxtLmF1dG9NYXJnaW49ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsYT1uLl9wdXNobWFyZ2luLGk9bi5fcHVzaG1hcmdpbklkcztpZighMSE9PW4ubWFyZ2luLmF1dG9leHBhbmQpe2lmKHIpe3ZhciBvPXIucGFkO2lmKHZvaWQgMD09PW8pe3ZhciBzPW4ubWFyZ2luO289TWF0aC5taW4oMTIscy5sLHMucixzLnQscy5iKX1yLmwrci5yPi41Km4ud2lkdGgmJihsLmxvZygiTWFyZ2luIHB1c2giLGUsImlzIHRvbyBiaWcgaW4geCwgZHJvcHBpbmciKSxyLmw9ci5yPTApLHIuYityLnQ+LjUqbi5oZWlnaHQmJihsLmxvZygiTWFyZ2luIHB1c2giLGUsImlzIHRvbyBiaWcgaW4geSwgZHJvcHBpbmciKSxyLmI9ci50PTApO3ZhciBjPXZvaWQgMCE9PXIueGw/ci54bDpyLngsdT12b2lkIDAhPT1yLnhyP3IueHI6ci54LGg9dm9pZCAwIT09ci55dD9yLnl0OnIueSxmPXZvaWQgMCE9PXIueWI/ci55YjpyLnk7YVtlXT17bDp7dmFsOmMsc2l6ZTpyLmwrb30scjp7dmFsOnUsc2l6ZTpyLnIrb30sYjp7dmFsOmYsc2l6ZTpyLmIrb30sdDp7dmFsOmgsc2l6ZTpyLnQrb319LGlbZV09MX1lbHNlIGRlbGV0ZSBhW2VdLGRlbGV0ZSBpW2VdO2lmKCFuLl9yZXBsb3R0aW5nKXJldHVybiBtLmRvQXV0b01hcmdpbih0KX19LG0uZG9BdXRvTWFyZ2luPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fc2l6ZXx8KGUuX3NpemU9e30pLEEoZSk7dmFyIHI9ZS5fc2l6ZSxuPWUubWFyZ2luLG89bC5leHRlbmRGbGF0KHt9LHIpLHM9bi5sLGM9bi5yLHU9bi50LGg9bi5iLGY9ZS53aWR0aCxwPWUuaGVpZ2h0LGQ9ZS5fcHVzaG1hcmdpbixnPWUuX3B1c2htYXJnaW5JZHM7aWYoITEhPT1lLm1hcmdpbi5hdXRvZXhwYW5kKXtmb3IodmFyIHYgaW4gZClnW3ZdfHxkZWxldGUgZFt2XTtmb3IodmFyIHkgaW4gZC5iYXNlPXtsOnt2YWw6MCxzaXplOnN9LHI6e3ZhbDoxLHNpemU6Y30sdDp7dmFsOjEsc2l6ZTp1fSxiOnt2YWw6MCxzaXplOmh9fSxkKXt2YXIgeD1kW3ldLmx8fHt9LGI9ZFt5XS5ifHx7fSxfPXgudmFsLHc9eC5zaXplLGs9Yi52YWwsVD1iLnNpemU7Zm9yKHZhciBNIGluIGQpe2lmKGEodykmJmRbTV0ucil7dmFyIFM9ZFtNXS5yLnZhbCxFPWRbTV0uci5zaXplO2lmKFM+Xyl7dmFyIEw9KHcqUysoRS1mKSpfKS8oUy1fKSxDPShFKigxLV8pKyh3LWYpKigxLVMpKS8oUy1fKTtMPj0wJiZDPj0wJiZmLShMK0MpPjAmJkwrQz5zK2MmJihzPUwsYz1DKX19aWYoYShUKSYmZFtNXS50KXt2YXIgUD1kW01dLnQudmFsLE89ZFtNXS50LnNpemU7aWYoUD5rKXt2YXIgej0oVCpQKyhPLXApKmspLyhQLWspLEk9KE8qKDEtaykrKFQtcCkqKDEtUCkpLyhQLWspO3o+PTAmJkk+PTAmJnAtKEkreik+MCYmeitJPmgrdSYmKGg9eix1PUkpfX19fX1pZihyLmw9TWF0aC5yb3VuZChzKSxyLnI9TWF0aC5yb3VuZChjKSxyLnQ9TWF0aC5yb3VuZCh1KSxyLmI9TWF0aC5yb3VuZChoKSxyLnA9TWF0aC5yb3VuZChuLnBhZCksci53PU1hdGgucm91bmQoZiktci5sLXIucixyLmg9TWF0aC5yb3VuZChwKS1yLnQtci5iLCFlLl9yZXBsb3R0aW5nJiZtLmRpZE1hcmdpbkNoYW5nZShvLHIpKXsiX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQiaW4gZT9lLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50Kys6ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudD0xO3ZhciBEPTMqKDErT2JqZWN0LmtleXMoZykubGVuZ3RoKTtpZihlLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50PEQpcmV0dXJuIGkuY2FsbCgicGxvdCIsdCk7bC53YXJuKCJUb28gbWFueSBhdXRvLW1hcmdpbiByZWRyYXdzLiIpfX07dmFyIFM9WyJsIiwiciIsInQiLCJiIiwicCIsInciLCJoIl07ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49ITE7dmFyIGE9W20ucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKHQuX3RyYW5zaXRpb25EYXRhKXJldHVybiB0Ll90cmFuc2l0aW9uaW5nPSExLGZ1bmN0aW9uKHQpe3ZhciBlPVByb21pc2UucmVzb2x2ZSgpO2lmKCF0KXJldHVybiBlO2Zvcig7dC5sZW5ndGg7KWU9ZS50aGVuKHQuc2hpZnQoKSk7cmV0dXJuIGV9KHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MpfSxyLnByZXBhcmVGbixtLnJlaG92ZXIsZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfdHJhbnNpdGlvbmluZyIsW10pLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEpe3QuX3RyYW5zaXRpb25pbmc9ITAsZS5kdXJhdGlvbj4wJiYodC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbj0hMCksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7bj0hMH0pLHIucmVkcmF3JiZ0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gaS5jYWxsKCJyZWRyYXciLHQpfSksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCl7dC5lbWl0KCJwbG90bHlfdHJhbnNpdGlvbmludGVycnVwdGVkIixbXSl9KTt2YXIgbz0wLHM9MDtmdW5jdGlvbiBsKCl7cmV0dXJuIG8rKyxmdW5jdGlvbigpe3ZhciBlO3MrKyxufHxzIT09b3x8KGU9YSx0Ll90cmFuc2l0aW9uRGF0YSYmKGZ1bmN0aW9uKHQpe2lmKHQpZm9yKDt0Lmxlbmd0aDspdC5zaGlmdCgpfSh0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7aWYoci5yZWRyYXcpcmV0dXJuIGkuY2FsbCgicmVkcmF3Iix0KX0pLnRoZW4oZnVuY3Rpb24oKXt0Ll90cmFuc2l0aW9uaW5nPSExLHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb249ITEsdC5lbWl0KCJwbG90bHlfdHJhbnNpdGlvbmVkIixbXSl9KS50aGVuKGUpKSl9fXIucnVuRm4obCksc2V0VGltZW91dChsKCkpfSl9XSxvPWwuc3luY09yQXN5bmMoYSx0KTtyZXR1cm4gbyYmby50aGVufHwobz1Qcm9taXNlLnJlc29sdmUoKSksby50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KX1tLmRpZE1hcmdpbkNoYW5nZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8Uy5sZW5ndGg7cisrKXt2YXIgbj1TW3JdLGk9dFtuXSxvPWVbbl07aWYoIWEoaSl8fE1hdGguYWJzKG8taSk+MSlyZXR1cm4hMH1yZXR1cm4hMX0sbS5ncmFwaEpzb249ZnVuY3Rpb24odCxlLHIsbixhKXsoYSYmZSYmIXQuX2Z1bGxEYXRhfHxhJiYhZSYmIXQuX2Z1bGxMYXlvdXQpJiZtLnN1cHBseURlZmF1bHRzKHQpO3ZhciBpPWE/dC5fZnVsbERhdGE6dC5kYXRhLG89YT90Ll9mdWxsTGF5b3V0OnQubGF5b3V0LHM9KHQuX3RyYW5zaXRpb25EYXRhfHx7fSkuX2ZyYW1lcztmdW5jdGlvbiBjKHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBudWxsO2lmKGwuaXNQbGFpbk9iamVjdCh0KSl7dmFyIGUsbixhPXt9O2ZvcihlIGluIHQpaWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRbZV0mJi0xPT09WyJfIiwiWyJdLmluZGV4T2YoZS5jaGFyQXQoMCkpKXtpZigia2VlcGRhdGEiPT09cil7aWYoInNyYyI9PT1lLnN1YnN0cihlLmxlbmd0aC0zKSljb250aW51ZX1lbHNlIGlmKCJrZWVwc3RyZWFtIj09PXIpe2lmKCJzdHJpbmciPT10eXBlb2Yobj10W2UrInNyYyJdKSYmbi5pbmRleE9mKCI6Iik+MCYmIWwuaXNQbGFpbk9iamVjdCh0LnN0cmVhbSkpY29udGludWV9ZWxzZSBpZigia2VlcGFsbCIhPT1yJiYic3RyaW5nIj09dHlwZW9mKG49dFtlKyJzcmMiXSkmJm4uaW5kZXhPZigiOiIpPjApY29udGludWU7YVtlXT1jKHRbZV0pfXJldHVybiBhfXJldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKGMpOmwuaXNUeXBlZEFycmF5KHQpP2wuc2ltcGxlTWFwKHQsbC5pZGVudGl0eSk6bC5pc0pTRGF0ZSh0KT9sLm1zMkRhdGVUaW1lTG9jYWwoK3QpOnR9dmFyIHU9e2RhdGE6KGl8fFtdKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9Yyh0KTtyZXR1cm4gZSYmZGVsZXRlIHIuZml0LHJ9KX07cmV0dXJuIGV8fCh1LmxheW91dD1jKG8pKSx0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhciYmKHU9dC5mcmFtZXdvcmsuZ2V0Q29uZmlnKCkpLHMmJih1LmZyYW1lcz1jKHMpKSwib2JqZWN0Ij09PW4/dTpKU09OLnN0cmluZ2lmeSh1KX0sbS5tb2RpZnlGcmFtZXM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGEsaT10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG89dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXN3aXRjaCgobj1lW3JdKS50eXBlKXtjYXNlInJlcGxhY2UiOmE9bi52YWx1ZTt2YXIgcz0oaVtuLmluZGV4XXx8e30pLm5hbWUsbD1hLm5hbWU7aVtuLmluZGV4XT1vW2xdPWEsbCE9PXMmJihkZWxldGUgb1tzXSxvW2xdPWEpO2JyZWFrO2Nhc2UiaW5zZXJ0IjpvWyhhPW4udmFsdWUpLm5hbWVdPWEsaS5zcGxpY2Uobi5pbmRleCwwLGEpO2JyZWFrO2Nhc2UiZGVsZXRlIjpkZWxldGUgb1soYT1pW24uaW5kZXhdKS5uYW1lXSxpLnNwbGljZShuLmluZGV4LDEpfXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sbS5jb21wdXRlRnJhbWU9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGEsaSxvPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJjb21wdXRlRnJhbWUgbXVzdCBiZSBnaXZlbiBhIHN0cmluZyBmcmFtZSBuYW1lIik7dmFyIHM9b1tlLnRvU3RyaW5nKCldO2lmKCFzKXJldHVybiExO2Zvcih2YXIgbD1bc10sYz1bcy5uYW1lXTtzLmJhc2VmcmFtZSYmKHM9b1tzLmJhc2VmcmFtZS50b1N0cmluZygpXSkmJi0xPT09Yy5pbmRleE9mKHMubmFtZSk7KWwucHVzaChzKSxjLnB1c2gocy5uYW1lKTtmb3IodmFyIHU9e307cz1sLnBvcCgpOylpZihzLmxheW91dCYmKHUubGF5b3V0PW0uZXh0ZW5kTGF5b3V0KHUubGF5b3V0LHMubGF5b3V0KSkscy5kYXRhKXtpZih1LmRhdGF8fCh1LmRhdGE9W10pLCEobj1zLnRyYWNlcykpZm9yKG49W10scj0wO3I8cy5kYXRhLmxlbmd0aDtyKyspbltyXT1yO2Zvcih1LnRyYWNlc3x8KHUudHJhY2VzPVtdKSxyPTA7cjxzLmRhdGEubGVuZ3RoO3IrKyludWxsIT0oYT1uW3JdKSYmKC0xPT09KGk9dS50cmFjZXMuaW5kZXhPZihhKSkmJihpPXUuZGF0YS5sZW5ndGgsdS50cmFjZXNbaV09YSksdS5kYXRhW2ldPW0uZXh0ZW5kVHJhY2UodS5kYXRhW2ldLHMuZGF0YVtyXSkpfXJldHVybiB1fSxtLnJlY29tcHV0ZUZyYW1lSGFzaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSxyPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgYT1yW25dO2EmJmEubmFtZSYmKGVbYS5uYW1lXT1hKX19LG0uZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGEsaSxvLHMsYyx1LGg9bC5leHRlbmREZWVwTm9BcnJheXMoe30sZXx8e30pLGY9bC5leHBhbmRPYmplY3RQYXRocyhoKSxwPXt9O2lmKHImJnIubGVuZ3RoKWZvcihpPTA7aTxyLmxlbmd0aDtpKyspdm9pZCAwPT09KGE9KG49bC5uZXN0ZWRQcm9wZXJ0eShmLHJbaV0pKS5nZXQoKSk/bC5uZXN0ZWRQcm9wZXJ0eShwLHJbaV0pLnNldChudWxsKToobi5zZXQobnVsbCksbC5uZXN0ZWRQcm9wZXJ0eShwLHJbaV0pLnNldChhKSk7aWYodD1sLmV4dGVuZERlZXBOb0FycmF5cyh0fHx7fSxmKSxyJiZyLmxlbmd0aClmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKWlmKGM9bC5uZXN0ZWRQcm9wZXJ0eShwLHJbaV0pLmdldCgpKXtmb3IodT0ocz1sLm5lc3RlZFByb3BlcnR5KHQscltpXSkpLmdldCgpLEFycmF5LmlzQXJyYXkodSl8fCh1PVtdLHMuc2V0KHUpKSxvPTA7bzxjLmxlbmd0aDtvKyspe3ZhciBkPWNbb107dVtvXT1udWxsPT09ZD9udWxsOm0uZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModVtvXSxkKX1zLnNldCh1KX1yZXR1cm4gdH0sbS5kYXRhQXJyYXlDb250YWluZXJzPVsidHJhbnNmb3JtcyIsImRpbWVuc2lvbnMiXSxtLmxheW91dEFycmF5Q29udGFpbmVycz1pLmxheW91dEFycmF5Q29udGFpbmVycyxtLmV4dGVuZFRyYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG0uZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModCxlLG0uZGF0YUFycmF5Q29udGFpbmVycyl9LG0uZXh0ZW5kTGF5b3V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG0uZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModCxlLG0ubGF5b3V0QXJyYXlDb250YWluZXJzKX0sbS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSxyLG4sYSxpKXt2YXIgbz17cmVkcmF3OmEucmVkcmF3fSxzPXt9LGM9W107cmV0dXJuIG8ucHJlcGFyZUZuPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPUFycmF5LmlzQXJyYXkoZSk/ZS5sZW5ndGg6MCxpPW4uc2xpY2UoMCxhKSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciB1PWlbb10saD10Ll9mdWxsRGF0YVt1XS5fbW9kdWxlO2lmKGgpe2lmKGguYW5pbWF0YWJsZSl7dmFyIGY9aC5iYXNlUGxvdE1vZHVsZS5uYW1lO3NbZl18fChzW2ZdPVtdKSxzW2ZdLnB1c2godSl9dC5kYXRhW2lbb11dPW0uZXh0ZW5kVHJhY2UodC5kYXRhW2lbb11dLGVbb10pfX12YXIgcD1sLmV4cGFuZE9iamVjdFBhdGhzKGwuZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHIpKSxkPS9eW3h5XWF4aXNbMC05XSokLztmb3IodmFyIGcgaW4gcClkLnRlc3QoZykmJmRlbGV0ZSBwW2ddLnJhbmdlO20uZXh0ZW5kTGF5b3V0KHQubGF5b3V0LHApLGRlbGV0ZSB0LmNhbGNkYXRhLG0uc3VwcGx5RGVmYXVsdHModCksbS5kb0NhbGNkYXRhKHQpO3ZhciB2PWwuZXhwYW5kT2JqZWN0UGF0aHMocik7aWYodil7dmFyIHk9dC5fZnVsbExheW91dC5fcGxvdHM7Zm9yKHZhciB4IGluIHkpe3ZhciBiPXlbeF0sXz1iLnhheGlzLHc9Yi55YXhpcyxrPV8ucmFuZ2Uuc2xpY2UoKSxUPXcucmFuZ2Uuc2xpY2UoKSxNPW51bGwsQT1udWxsLFM9bnVsbCxFPW51bGw7QXJyYXkuaXNBcnJheSh2W18uX25hbWUrIi5yYW5nZSJdKT9NPXZbXy5fbmFtZSsiLnJhbmdlIl0uc2xpY2UoKTpBcnJheS5pc0FycmF5KCh2W18uX25hbWVdfHx7fSkucmFuZ2UpJiYoTT12W18uX25hbWVdLnJhbmdlLnNsaWNlKCkpLEFycmF5LmlzQXJyYXkodlt3Ll9uYW1lKyIucmFuZ2UiXSk/QT12W3cuX25hbWUrIi5yYW5nZSJdLnNsaWNlKCk6QXJyYXkuaXNBcnJheSgodlt3Ll9uYW1lXXx8e30pLnJhbmdlKSYmKEE9dlt3Ll9uYW1lXS5yYW5nZS5zbGljZSgpKSxrJiZNJiYoXy5yMmwoa1swXSkhPT1fLnIybChNWzBdKXx8Xy5yMmwoa1sxXSkhPT1fLnIybChNWzFdKSkmJihTPXt4cjA6ayx4cjE6TX0pLFQmJkEmJih3LnIybChUWzBdKSE9PXcucjJsKEFbMF0pfHx3LnIybChUWzFdKSE9PXcucjJsKEFbMV0pKSYmKEU9e3lyMDpULHlyMTpBfSksKFN8fEUpJiZjLnB1c2gobC5leHRlbmRGbGF0KHtwbG90aW5mbzpifSxTLEUpKX19cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxvLnJ1bkZuPWZ1bmN0aW9uKGUpe3ZhciBuLGEsbz10Ll9mdWxsTGF5b3V0Ll9iYXNlUGxvdE1vZHVsZXMsdT1jLmxlbmd0aDtpZihyKWZvcihhPTA7YTxvLmxlbmd0aDthKyspb1thXS50cmFuc2l0aW9uQXhlcyYmb1thXS50cmFuc2l0aW9uQXhlcyh0LGMsaSxlKTtmb3IodmFyIGggaW4gdT8oKG49bC5leHRlbmRGbGF0KHt9LGkpKS5kdXJhdGlvbj0wLGRlbGV0ZSBzLmNhcnRlc2lhbik6bj1pLHMpe3ZhciBmPXNbaF07dC5fZnVsbERhdGFbZlswXV0uX21vZHVsZS5iYXNlUGxvdE1vZHVsZS5wbG90KHQsZixuLGUpfX0sRSh0LGksbyl9LG0udHJhbnNpdGlvbkZyb21SZWFjdD1mdW5jdGlvbih0LGUscixuKXt2YXIgYT10Ll9mdWxsTGF5b3V0LGk9YS50cmFuc2l0aW9uLG89e30scz1bXTtyZXR1cm4gby5wcmVwYXJlRm49ZnVuY3Rpb24oKXt2YXIgdD1hLl9wbG90cztmb3IodmFyIGkgaW4gby5yZWRyYXc9ITEsInNvbWUiPT09ZS5hbmltJiYoby5yZWRyYXc9ITApLCJzb21lIj09PXIuYW5pbSYmKG8ucmVkcmF3PSEwKSx0KXt2YXIgYz10W2ldLHU9Yy54YXhpcyxoPWMueWF4aXMsZj1uW3UuX25hbWVdLnJhbmdlLnNsaWNlKCkscD1uW2guX25hbWVdLnJhbmdlLnNsaWNlKCksZD11LnJhbmdlLnNsaWNlKCksZz1oLnJhbmdlLnNsaWNlKCk7dS5zZXRTY2FsZSgpLGguc2V0U2NhbGUoKTt2YXIgdj1udWxsLG09bnVsbDt1LnIybChmWzBdKT09PXUucjJsKGRbMF0pJiZ1LnIybChmWzFdKT09PXUucjJsKGRbMV0pfHwodj17eHIwOmYseHIxOmR9KSxoLnIybChwWzBdKT09PWgucjJsKGdbMF0pJiZoLnIybChwWzFdKT09PWgucjJsKGdbMV0pfHwobT17eXIwOnAseXIxOmd9KSwodnx8bSkmJnMucHVzaChsLmV4dGVuZEZsYXQoe3Bsb3RpbmZvOmN9LHYsbSkpfXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sby5ydW5Gbj1mdW5jdGlvbihyKXtmb3IodmFyIG4sYSxvLGM9dC5fZnVsbERhdGEsdT10Ll9mdWxsTGF5b3V0Ll9iYXNlUGxvdE1vZHVsZXMsaD1bXSxmPTA7ZjxjLmxlbmd0aDtmKyspaC5wdXNoKGYpO2Z1bmN0aW9uIHAoKXtmb3IodmFyIGU9MDtlPHUubGVuZ3RoO2UrKyl1W2VdLnRyYW5zaXRpb25BeGVzJiZ1W2VdLnRyYW5zaXRpb25BeGVzKHQscyxuLHIpfWZ1bmN0aW9uIGQoKXtmb3IodmFyIGU9MDtlPHUubGVuZ3RoO2UrKyl1W2VdLnBsb3QodCxvLGEscil9cy5sZW5ndGgmJmUuYW5pbT8idHJhY2VzIGZpcnN0Ij09PWkub3JkZXJpbmc/KG49bC5leHRlbmRGbGF0KHt9LGkse2R1cmF0aW9uOjB9KSxvPWgsYT1pLHNldFRpbWVvdXQocCxpLmR1cmF0aW9uKSxkKCkpOihuPWksbz1udWxsLGE9bC5leHRlbmRGbGF0KHt9LGkse2R1cmF0aW9uOjB9KSxzZXRUaW1lb3V0KGQsbi5kdXJhdGlvbikscCgpKTpzLmxlbmd0aD8obj1pLHAoKSk6ZS5hbmltJiYobz1oLGE9aSxkKCkpfSxFKHQsaSxvKX0sbS5kb0NhbGNkYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhLHMsYz1oLmxpc3QodCksZj10Ll9mdWxsRGF0YSxwPXQuX2Z1bGxMYXlvdXQsZD1uZXcgQXJyYXkoZi5sZW5ndGgpLGc9KHQuY2FsY2RhdGF8fFtdKS5zbGljZSgpO2Zvcih0LmNhbGNkYXRhPWQscC5fbnVtQm94ZXM9MCxwLl9udW1WaW9saW5zPTAscC5fdmlvbGluU2NhbGVHcm91cFN0YXRzPXt9LHQuX2htcGl4Y291bnQ9MCx0Ll9obWx1bWNvdW50PTAscC5fcGllY29sb3JtYXA9e30scC5fc3VuYnVyc3Rjb2xvcm1hcD17fSxwLl90cmVlbWFwY29sb3JtYXA9e30scC5fZnVubmVsYXJlYWNvbG9ybWFwPXt9LGE9MDthPGYubGVuZ3RoO2ErKylBcnJheS5pc0FycmF5KGUpJiYtMT09PWUuaW5kZXhPZihhKSYmKGRbYV09Z1thXSk7Zm9yKGE9MDthPGYubGVuZ3RoO2ErKykocj1mW2FdKS5fYXJyYXlBdHRycz1vLmZpbmRBcnJheUF0dHJpYnV0ZXMociksci5fZXh0cmVtZXM9e307dmFyIHY9cC5fc3VicGxvdHMucG9sYXJ8fFtdO2ZvcihhPTA7YTx2Lmxlbmd0aDthKyspYy5wdXNoKHBbdlthXV0ucmFkaWFsYXhpcyxwW3ZbYV1dLmFuZ3VsYXJheGlzKTtmb3IodmFyIG0gaW4gcC5fY29sb3JBeGVzKXt2YXIgeD1wW21dOyExIT09eC5jYXV0byYmKGRlbGV0ZSB4LmNtaW4sZGVsZXRlIHguY21heCl9dmFyIGI9ITE7ZnVuY3Rpb24gXyhlKXtpZihyPWZbZV0sbj1yLl9tb2R1bGUsITA9PT1yLnZpc2libGUmJnIudHJhbnNmb3Jtcyl7aWYobiYmbi5jYWxjKXt2YXIgYT1uLmNhbGModCxyKTthWzBdJiZhWzBdLnQmJmFbMF0udC5fc2NlbmUmJmRlbGV0ZSBhWzBdLnQuX3NjZW5lLmRpcnR5fWZvcihzPTA7czxyLnRyYW5zZm9ybXMubGVuZ3RoO3MrKyl7dmFyIGk9ci50cmFuc2Zvcm1zW3NdOyhuPXlbaS50eXBlXSkmJm4uY2FsY1RyYW5zZm9ybSYmKHIuX2hhc0NhbGNUcmFuc2Zvcm09ITAsYj0hMCxuLmNhbGNUcmFuc2Zvcm0odCxyLGkpKX19fWZ1bmN0aW9uIHcoZSxhKXtpZihyPWZbZV0sISEobj1yLl9tb2R1bGUpLmlzQ29udGFpbmVyPT09YSl7dmFyIGk9W107aWYoITA9PT1yLnZpc2libGUmJjAhPT1yLl9sZW5ndGgpe2RlbGV0ZSByLl9pbmRleFRvUG9pbnRzO3ZhciBvPXIudHJhbnNmb3Jtc3x8W107Zm9yKHM9by5sZW5ndGgtMTtzPj0wO3MtLSlpZihvW3NdLmVuYWJsZWQpe3IuX2luZGV4VG9Qb2ludHM9b1tzXS5faW5kZXhUb1BvaW50czticmVha31uJiZuLmNhbGMmJihpPW4uY2FsYyh0LHIpKX1BcnJheS5pc0FycmF5KGkpJiZpWzBdfHwoaT1be3g6dSx5OnV9XSksaVswXS50fHwoaVswXS50PXt9KSxpWzBdLnRyYWNlPXIsZFtlXT1pfX1mb3IoQyhjLGYscCksYT0wO2E8Zi5sZW5ndGg7YSsrKXcoYSwhMCk7Zm9yKGE9MDthPGYubGVuZ3RoO2ErKylfKGEpO2ZvcihiJiZDKGMsZixwKSxhPTA7YTxmLmxlbmd0aDthKyspdyhhLCEwKTtmb3IoYT0wO2E8Zi5sZW5ndGg7YSsrKXcoYSwhMSk7UCh0KTt2YXIgaz1mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxvLHMsYz1bXTtmdW5jdGlvbiB1KHQscixuKXt2YXIgYT1yLl9pZC5jaGFyQXQoMCk7aWYoImhpc3RvZ3JhbTJkY29udG91ciI9PT10KXt2YXIgaT1yLl9jb3VudGVyQXhlc1swXSxvPWguZ2V0RnJvbUlkKGUsaSkscz0ieCI9PT1hfHwieCI9PT1pJiYiY2F0ZWdvcnkiPT09by50eXBlLGw9InkiPT09YXx8InkiPT09aSYmImNhdGVnb3J5Ij09PW8udHlwZTtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXR8fDA9PT1lPy0xOnMmJnQ9PT1uW2VdLmxlbmd0aC0xPy0xOmwmJmU9PT1uLmxlbmd0aC0xPy0xOigieSI9PT1hP2U6dCktMX19cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuInkiPT09YT9lOnR9fXZhciBmPXttaW46ZnVuY3Rpb24odCl7cmV0dXJuIGwuYWdnTnVtcyhNYXRoLm1pbixudWxsLHQpfSxtYXg6ZnVuY3Rpb24odCl7cmV0dXJuIGwuYWdnTnVtcyhNYXRoLm1heCxudWxsLHQpfSxzdW06ZnVuY3Rpb24odCl7cmV0dXJuIGwuYWdnTnVtcyhmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9LG51bGwsdCl9LHRvdGFsOmZ1bmN0aW9uKHQpe3JldHVybiBsLmFnZ051bXMoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSxudWxsLHQpfSxtZWFuOmZ1bmN0aW9uKHQpe3JldHVybiBsLm1lYW4odCl9LG1lZGlhbjpmdW5jdGlvbih0KXtyZXR1cm4gbC5tZWRpYW4odCl9fTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgcD10W3JdO2lmKCJjYXRlZ29yeSI9PT1wLnR5cGUpe3ZhciBkPXAuY2F0ZWdvcnlvcmRlci5tYXRjaChMKTtpZihkKXt2YXIgZz1kWzFdLHY9ZFsyXSxtPVtdO2ZvcihuPTA7bjxwLl9jYXRlZ29yaWVzLmxlbmd0aDtuKyspbS5wdXNoKFtwLl9jYXRlZ29yaWVzW25dLFtdXSk7Zm9yKG49MDtuPHAuX3RyYWNlSW5kaWNlcy5sZW5ndGg7bisrKXt2YXIgeT1wLl90cmFjZUluZGljZXNbbl0seD1lLl9mdWxsRGF0YVt5XSxiPXAuX2lkLmNoYXJBdCgwKTtpZighMD09PXgudmlzaWJsZSl7dmFyIF89eC50eXBlO2kudHJhY2VJcyh4LCJoaXN0b2dyYW0iKSYmKGRlbGV0ZSB4Ll94YXV0b0JpbkZpbmlzaGVkLGRlbGV0ZSB4Ll95YXV0b0JpbkZpbmlzaGVkKTt2YXIgdz1lLmNhbGNkYXRhW3ldO2ZvcihhPTA7YTx3Lmxlbmd0aDthKyspe3ZhciBrLFQsTSxBPXdbYV07aWYoInNwbG9tIj09PV8pe3ZhciBTPXguX2F4ZXNEaW1bcC5faWRdO2lmKCJ5Ij09PWIpe3ZhciBFPXguX2RpYWdbU11bMF07RSYmKHA9ZS5fZnVsbExheW91dFtoLmlkMm5hbWUoRSldKX12YXIgQz1BLnRyYWNlLmRpbWVuc2lvbnNbU10udmFsdWVzO2ZvcihvPTA7bzxDLmxlbmd0aDtvKyspZm9yKGs9Q1tvXSxUPXAuX2NhdGVnb3JpZXNNYXBba10scz0wO3M8QS50cmFjZS5kaW1lbnNpb25zLmxlbmd0aDtzKyspaWYocyE9PVMpe3ZhciBQPUEudHJhY2UuZGltZW5zaW9uc1tzXTttW1RdWzFdLnB1c2goUC52YWx1ZXNbb10pfX1lbHNlIGlmKCJzY2F0dGVyZ2wiPT09Xyl7Zm9yKG89MDtvPEEudC54Lmxlbmd0aDtvKyspIngiPT09YiYmKGs9QS50Lnhbb10sVD1rLE09QS50Lnlbb10pLCJ5Ij09PWImJihrPUEudC55W29dLFQ9ayxNPUEudC54W29dKSxtW1RdWzFdLnB1c2goTSk7QS50JiZBLnQuX3NjZW5lJiZkZWxldGUgQS50Ll9zY2VuZS5kaXJ0eX1lbHNlIGlmKEEuaGFzT3duUHJvcGVydHkoInoiKSl7TT1BLno7dmFyIE89dSh4LnR5cGUscCxNKTtmb3Iobz0wO288TS5sZW5ndGg7bysrKWZvcihzPTA7czxNW29dLmxlbmd0aDtzKyspKFQ9TyhzLG8pKSsxJiZtW1RdWzFdLnB1c2goTVtvXVtzXSl9ZWxzZSBmb3IoIngiPT09Yj8oaz1BLnArMT9BLnA6QS54LE09QS5zfHxBLnZ8fEEueSk6InkiPT09YiYmKGs9QS5wKzE/QS5wOkEueSxNPUEuc3x8QS52fHxBLngpLEFycmF5LmlzQXJyYXkoTSl8fChNPVtNXSksbz0wO288TS5sZW5ndGg7bysrKW1ba11bMV0ucHVzaChNW29dKX19fXAuX2NhdGVnb3JpZXNWYWx1ZT1tO3ZhciB6PVtdO2ZvcihuPTA7bjxtLmxlbmd0aDtuKyspei5wdXNoKFttW25dWzBdLGZbZ10obVtuXVsxXSldKTt6LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFsxXS1lWzFdfSkscC5fY2F0ZWdvcmllc0FnZ3JlZ2F0ZWRWYWx1ZT16LHAuX2luaXRpYWxDYXRlZ29yaWVzPXoubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSksImRlc2NlbmRpbmciPT09diYmcC5faW5pdGlhbENhdGVnb3JpZXMucmV2ZXJzZSgpLGM9Yy5jb25jYXQocC5zb3J0QnlJbml0aWFsQ2F0ZWdvcmllcygpKX19fXJldHVybiBjfShjLHQpO2lmKGsubGVuZ3RoKXtmb3IocC5fbnVtQm94ZXM9MCxwLl9udW1WaW9saW5zPTAsYT0wO2E8ay5sZW5ndGg7YSsrKXcoa1thXSwhMCk7Zm9yKGE9MDthPGsubGVuZ3RoO2ErKyl3KGtbYV0sITEpO1AodCl9aS5nZXRDb21wb25lbnRNZXRob2QoImZ4IiwiY2FsYyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJjYWxjIikodCl9O3ZhciBMPS8odG90YWx8c3VtfG1pbnxtYXh8bWVhbnxtZWRpYW4pIChhc2NlbmRpbmd8ZGVzY2VuZGluZykvO2Z1bmN0aW9uIEModCxlLHIpe3ZhciBuLGEsaSxvPXt9O2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaT0oYT10W25dKS5faWQsYS5jbGVhckNhbGMoKSwibXVsdGljYXRlZ29yeSI9PT1hLnR5cGUmJmEuc2V0dXBNdWx0aUNhdGVnb3J5KGUpLG9bYS5faWRdPTE7dmFyIHM9ci5fYXhpc01hdGNoR3JvdXBzfHxbXTtmb3Iobj0wO248cy5sZW5ndGg7bisrKWZvcihpIGluIHNbbl0pb1tpXXx8KGE9cltoLmlkMm5hbWUoaSldKS5jbGVhckNhbGMoKX1mdW5jdGlvbiBQKHQpe3ZhciBlLHIsbixhPXQuX2Z1bGxMYXlvdXQsaT1hLl92aXNpYmxlTW9kdWxlcyxvPXt9O2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBzPWlbcl0sYz1zLmNyb3NzVHJhY2VDYWxjO2lmKGMpe3ZhciB1PXMuYmFzZVBsb3RNb2R1bGUubmFtZTtvW3VdP2wucHVzaFVuaXF1ZShvW3VdLGMpOm9bdV09W2NdfX1mb3IobiBpbiBvKXt2YXIgaD1vW25dLGY9YS5fc3VicGxvdHNbbl07aWYoQXJyYXkuaXNBcnJheShmKSlmb3IoZT0wO2U8Zi5sZW5ndGg7ZSsrKXt2YXIgcD1mW2VdLGQ9ImNhcnRlc2lhbiI9PT1uP2EuX3Bsb3RzW3BdOmFbcF07Zm9yKHI9MDtyPGgubGVuZ3RoO3IrKyloW3JdKHQsZCxwKX1lbHNlIGZvcihyPTA7cjxoLmxlbmd0aDtyKyspaFtyXSh0KX19bS5yZWhvdmVyPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3JlaG92ZXImJnQuX2Z1bGxMYXlvdXQuX3JlaG92ZXIoKX0sbS5yZWRyYWc9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcmVkcmFnJiZ0Ll9mdWxsTGF5b3V0Ll9yZWRyYWcoKX0sbS5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGEsaT1lLnRyYWNlSGFzaCxvPXt9O2ZvcihhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sYz1zWzBdLnRyYWNlO2MudmlzaWJsZSYmKG9bYy50eXBlXT1vW2MudHlwZV18fFtdLG9bYy50eXBlXS5wdXNoKHMpKX1mb3IodmFyIHUgaW4gaSlpZighb1t1XSl7dmFyIGg9aVt1XVswXTtoWzBdLnRyYWNlLnZpc2libGU9ITEsb1t1XT1baF19Zm9yKHZhciBmIGluIG8pe3ZhciBwPW9bZl07cFswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QodCxlLGwuZmlsdGVyVmlzaWJsZShwKSxuKX1lLnRyYWNlSGFzaD1vfSxtLnBsb3RCYXNlUGxvdD1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPWkuZ2V0TW9kdWxlKHQpLHM9ZChlLmNhbGNkYXRhLG8pWzBdO28ucGxvdChlLHMsbixhKX0sbS5jbGVhbkJhc2VQbG90PWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIGk9YS5faGFzJiZhLl9oYXModCksbz1yLl9oYXMmJnIuX2hhcyh0KTtpJiYhbyYmYVsiXyIrdCsibGF5ZXIiXS5zZWxlY3RBbGwoImcudHJhY2UiKS5yZW1vdmUoKX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2OTMsIi4uL2xpYiI6NzE3LCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6NzU0LCIuLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3NTUsIi4uL3Bsb3RzL2dldF9kYXRhIjo4MDAsIi4uL3JlZ2lzdHJ5Ijo4NDYsIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjc2MCwiLi9hdHRyaWJ1dGVzIjo3NjIsIi4vY2FydGVzaWFuL2F4aXNfaWRzIjo3NjgsIi4vY29tbWFuZCI6Nzg5LCIuL2ZvbnRfYXR0cmlidXRlcyI6NzkxLCIuL2ZyYW1lX2F0dHJpYnV0ZXMiOjc5MiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODE3LGQzOjE2NSwiZmFzdC1pc251bWVyaWMiOjIyOH1dLDgyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHI6InN1YnBsb3QiLG5hbWU6InBvbGFyIixheGlzTmFtZXM6WyJhbmd1bGFyYXhpcyIsInJhZGlhbGF4aXMiXSxheGlzTmFtZTJkYXRhQXJyYXk6e2FuZ3VsYXJheGlzOiJ0aGV0YSIscmFkaWFsYXhpczoiciJ9LGxheWVyTmFtZXM6WyJkcmFnbGF5ZXIiLCJwbG90YmciLCJiYWNrcGxvdCIsImFuZ3VsYXItZ3JpZCIsInJhZGlhbC1ncmlkIiwiZnJvbnRwbG90IiwiYW5ndWxhci1saW5lIiwicmFkaWFsLWxpbmUiLCJhbmd1bGFyLWF4aXMiLCJyYWRpYWwtYXhpcyJdLHJhZGlhbERyYWdCb3hTaXplOjUwLGFuZ3VsYXJEcmFnQm94U2l6ZTozMCxjb3JuZXJMZW46MjUsY29ybmVySGFsZldpZHRoOjIsTUlORFJBRzo4LE1JTlpPT006MjAsT0ZGRURHRToyMH19LHt9XSw4Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9saWIvcG9seWdvbiIpLnRlc3RlcixpPW4uZmluZEluZGV4T2ZNaW4sbz1uLmlzQW5nbGVJbnNpZGVTZWN0b3Iscz1uLmFuZ2xlRGVsdGEsbD1uLmFuZ2xlRGlzdDtmdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBhLGksbz1uWzBdLHM9blsxXSxsPWgoTWF0aC5zaW4oZSktTWF0aC5zaW4odCkpLGM9aChNYXRoLmNvcyhlKS1NYXRoLmNvcyh0KSksdT1NYXRoLnRhbihyKSxmPWgoMS91KSxwPWwvYyxkPXMtcCpvO3JldHVybiBmP2wmJmM/aT11KihhPWQvKHUtcCkpOmM/KGE9cypmLGk9cyk6KGE9byxpPW8qdSk6bCYmYz8oYT0wLGk9ZCk6Yz8oYT0wLGk9cyk6YT1pPU5hTixbYSxpXX1mdW5jdGlvbiB1KHQsZSxyLGEpe3JldHVybiBuLmlzRnVsbENpcmNsZShbZSxyXSk/ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUubGVuZ3RoLGE9bmV3IEFycmF5KG4rMSk7Zm9yKHI9MDtyPG47cisrKXt2YXIgaT1lW3JdO2Fbcl09W3QqTWF0aC5jb3MoaSksdCpNYXRoLnNpbihpKV19cmV0dXJuIGFbcl09YVswXS5zbGljZSgpLGF9KHQsYSk6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIHMsdSxoPWEubGVuZ3RoLGY9W107ZnVuY3Rpb24gcChlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKGUpXX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gYyh0LGUscixwKHQpKX1mdW5jdGlvbiBnKHQpe3JldHVybiBuLm1vZCh0LGgpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIG8odCxbZSxyXSl9dmFyIG09aShhLGZ1bmN0aW9uKHQpe3JldHVybiB2KHQpP2wodCxlKToxLzB9KSx5PWQoYVttXSxhW2cobS0xKV0sZSk7Zm9yKGYucHVzaCh5KSxzPW0sdT0wO3U8aDtzKyssdSsrKXt2YXIgeD1hW2cocyldO2lmKCF2KHgpKWJyZWFrO2YucHVzaChwKHgpKX12YXIgYj1pKGEsZnVuY3Rpb24odCl7cmV0dXJuIHYodCk/bCh0LHIpOjEvMH0pLF89ZChhW2JdLGFbZyhiKzEpXSxyKTtyZXR1cm4gZi5wdXNoKF8pLGYucHVzaChbMCwwXSksZi5wdXNoKGZbMF0uc2xpY2UoKSksZn0odCxlLHIsYSl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gTWF0aC5hYnModCk+MWUtMTA/dDowfWZ1bmN0aW9uIGYodCxlLHIpe2U9ZXx8MCxyPXJ8fDA7Zm9yKHZhciBuPXQubGVuZ3RoLGE9bmV3IEFycmF5KG4pLGk9MDtpPG47aSsrKXt2YXIgbz10W2ldO2FbaV09W2Urb1swXSxyLW9bMV1dfXJldHVybiBhfWUuZXhwb3J0cz17aXNQdEluc2lkZVBvbHlnb246ZnVuY3Rpb24odCxlLHIsbixpKXtpZighbyhlLG4pKXJldHVybiExO3ZhciBzLGw7clswXTxyWzFdPyhzPXJbMF0sbD1yWzFdKToocz1yWzFdLGw9clswXSk7dmFyIGM9YSh1KHMsblswXSxuWzFdLGkpKSxoPWEodShsLG5bMF0sblsxXSxpKSksZj1bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKGUpXTtyZXR1cm4gaC5jb250YWlucyhmKSYmIWMuY29udGFpbnMoZil9LGZpbmRQb2x5Z29uT2Zmc2V0OmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT0xLzAsaT0xLzAsbz11KHQsZSxyLG4pLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTthPU1hdGgubWluKGEsbFswXSksaT1NYXRoLm1pbihpLC1sWzFdKX1yZXR1cm5bYSxpXX0sZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlczpmdW5jdGlvbih0LGUpe3ZhciByPWkoZSxmdW5jdGlvbihlKXt2YXIgcj1zKGUsdCk7cmV0dXJuIHI+MD9yOjEvMH0pLGE9bi5tb2QocisxLGUubGVuZ3RoKTtyZXR1cm5bZVtyXSxlW2FdXX0sZmluZEludGVyc2VjdGlvblhZOmMsZmluZFhZYXRMZW5ndGg6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9LWUqcixpPWUqZSsxLG89MiooZSphLXIpLHM9YSphK3Iqci10KnQsbD1NYXRoLnNxcnQobypvLTQqaSpzKSxjPSgtbytsKS8oMippKSx1PSgtby1sKS8oMippKTtyZXR1cm5bW2MsZSpjK2Erbl0sW3UsZSp1K2Erbl1dfSxjbGFtcFRpbnk6aCxwYXRoUG9seWdvbjpmdW5jdGlvbih0LGUscixuLGEsaSl7cmV0dXJuIk0iK2YodSh0LGUscixuKSxhLGkpLmpvaW4oIkwiKX0scGF0aFBvbHlnb25Bbm51bHVzOmZ1bmN0aW9uKHQsZSxyLG4sYSxpLG8pe3ZhciBzLGw7dDxlPyhzPXQsbD1lKToocz1lLGw9dCk7dmFyIGM9Zih1KHMscixuLGEpLGksbyk7cmV0dXJuIk0iK2YodShsLHIsbixhKSxpLG8pLnJldmVyc2UoKS5qb2luKCJMIikrIk0iK2Muam9pbigiTCIpfX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL2xpYi9wb2x5Z29uIjo3Mjl9XSw4Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsYT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXgsaT10KCIuL3BvbGFyIiksbz10KCIuL2NvbnN0YW50cyIpLHM9by5hdHRyLGw9by5uYW1lLGM9YShsKSx1PXt9O3Vbc109e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDpsLGVkaXRUeXBlOiJjYWxjIn0sZS5leHBvcnRzPXthdHRyOnMsbmFtZTpsLGlkUm9vdDpsLGlkUmVnZXg6YyxhdHRyUmVnZXg6YyxhdHRyaWJ1dGVzOnUsbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxwbG90OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxhPWUuX3N1YnBsb3RzW2xdLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxjPW4ocixsLHMpLHU9ZVtzXS5fc3VicGxvdDt1fHwodT1pKHQscyksZVtzXS5fc3VicGxvdD11KSx1LnBsb3QoYyxlLHQuX3Byb21pc2VzKX19LGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT1uLl9zdWJwbG90c1tsXXx8W10saT1uLl9oYXMmJm4uX2hhcygiZ2wiKSxvPWUuX2hhcyYmZS5faGFzKCJnbCIpLHM9aSYmIW8sYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGg9blt1XS5fc3VicGxvdDtpZighZVt1XSYmaClmb3IodmFyIGYgaW4gaC5mcmFtZXdvcmsucmVtb3ZlKCksaC5sYXllcnNbInJhZGlhbC1heGlzLXRpdGxlIl0ucmVtb3ZlKCksaC5jbGlwUGF0aHMpaC5jbGlwUGF0aHNbZl0ucmVtb3ZlKCk7cyYmaC5fc2NlbmUmJihoLl9zY2VuZS5kZXN0cm95KCksaC5fc2NlbmU9bnVsbCl9fSx0b1NWRzp0KCIuLi9jYXJ0ZXNpYW4iKS50b1NWR319LHsiLi4vLi4vbGliIjo3MTcsIi4uL2NhcnRlc2lhbiI6Nzc2LCIuLi9nZXRfZGF0YSI6ODAwLCIuL2NvbnN0YW50cyI6ODI3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MzAsIi4vbGF5b3V0X2RlZmF1bHRzIjo4MzEsIi4vcG9sYXIiOjgzOH1dLDgzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGk9dCgiLi4vZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQscz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbD1zKHtjb2xvcjphLmNvbG9yLHNob3dsaW5lOm8oe30sYS5zaG93bGluZSx7ZGZsdDohMH0pLGxpbmVjb2xvcjphLmxpbmVjb2xvcixsaW5ld2lkdGg6YS5saW5ld2lkdGgsc2hvd2dyaWQ6byh7fSxhLnNob3dncmlkLHtkZmx0OiEwfSksZ3JpZGNvbG9yOmEuZ3JpZGNvbG9yLGdyaWR3aWR0aDphLmdyaWR3aWR0aH0sInBsb3QiLCJmcm9tLXJvb3QiKSxjPXMoe3RpY2ttb2RlOmEudGlja21vZGUsbnRpY2tzOmEubnRpY2tzLHRpY2swOmEudGljazAsZHRpY2s6YS5kdGljayx0aWNrdmFsczphLnRpY2t2YWxzLHRpY2t0ZXh0OmEudGlja3RleHQsdGlja3M6YS50aWNrcyx0aWNrbGVuOmEudGlja2xlbix0aWNrd2lkdGg6YS50aWNrd2lkdGgsdGlja2NvbG9yOmEudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmEuc2hvd3RpY2tsYWJlbHMsc2hvd3RpY2twcmVmaXg6YS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OmEudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDphLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6YS50aWNrc3VmZml4LHNob3dleHBvbmVudDphLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDphLmV4cG9uZW50Zm9ybWF0LHNlcGFyYXRldGhvdXNhbmRzOmEuc2VwYXJhdGV0aG91c2FuZHMsdGlja2ZvbnQ6YS50aWNrZm9udCx0aWNrYW5nbGU6YS50aWNrYW5nbGUsdGlja2Zvcm1hdDphLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmEudGlja2Zvcm1hdHN0b3BzLGxheWVyOmEubGF5ZXJ9LCJwbG90IiwiZnJvbS1yb290IiksdT17dmlzaWJsZTpvKHt9LGEudmlzaWJsZSx7ZGZsdDohMH0pLHR5cGU6byh7fSxhLnR5cGUse3ZhbHVlczpbIi0iLCJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiXX0pLGF1dG9yYW5nZTpvKHt9LGEuYXV0b3JhbmdlLHtlZGl0VHlwZToicGxvdCJ9KSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvemVybyIsIm5vbm5lZ2F0aXZlIiwibm9ybWFsIl0sZGZsdDoidG96ZXJvIixlZGl0VHlwZToiY2FsYyJ9LHJhbmdlOm8oe30sYS5yYW5nZSx7aXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxlZGl0VHlwZToicGxvdCJ9KSxjYXRlZ29yeW9yZGVyOmEuY2F0ZWdvcnlvcmRlcixjYXRlZ29yeWFycmF5OmEuY2F0ZWdvcnlhcnJheSxhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdLGRmbHQ6ImNsb2Nrd2lzZSIsZWRpdFR5cGU6InBsb3QifSx0aXRsZTp7dGV4dDpvKHt9LGEudGl0bGUudGV4dCx7ZWRpdFR5cGU6InBsb3QiLGRmbHQ6IiJ9KSxmb250Om8oe30sYS50aXRsZS5mb250LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGhvdmVyZm9ybWF0OmEuaG92ZXJmb3JtYXQsdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJjYWxjIixfZGVwcmVjYXRlZDp7dGl0bGU6YS5fZGVwcmVjYXRlZC50aXRsZSx0aXRsZWZvbnQ6YS5fZGVwcmVjYXRlZC50aXRsZWZvbnR9fTtvKHUsbCxjKTt2YXIgaD17dmlzaWJsZTpvKHt9LGEudmlzaWJsZSx7ZGZsdDohMH0pLHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJjYXRlZ29yeSJdLGRmbHQ6Ii0iLGVkaXRUeXBlOiJjYWxjIixfbm9UZW1wbGF0aW5nOiEwfSxjYXRlZ29yeW9yZGVyOmEuY2F0ZWdvcnlvcmRlcixjYXRlZ29yeWFycmF5OmEuY2F0ZWdvcnlhcnJheSx0aGV0YXVuaXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhZGlhbnMiLCJkZWdyZWVzIl0sZGZsdDoiZGVncmVlcyIsZWRpdFR5cGU6ImNhbGMifSxwZXJpb2Q6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLG1pbjowfSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50ZXJjbG9ja3dpc2UiLCJjbG9ja3dpc2UiXSxkZmx0OiJjb3VudGVyY2xvY2t3aXNlIixlZGl0VHlwZToiY2FsYyJ9LHJvdGF0aW9uOnt2YWxUeXBlOiJhbmdsZSIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcmZvcm1hdDphLmhvdmVyZm9ybWF0LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToiY2FsYyJ9O28oaCxsLGMpLGUuZXhwb3J0cz17ZG9tYWluOmkoe25hbWU6InBvbGFyIixlZGl0VHlwZToicGxvdCJ9KSxzZWN0b3I6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In1dLGRmbHQ6WzAsMzYwXSxlZGl0VHlwZToicGxvdCJ9LGhvbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJwbG90IixkZmx0Om4uYmFja2dyb3VuZH0scmFkaWFsYXhpczp1LGFuZ3VsYXJheGlzOmgsZ3JpZHNoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjaXJjdWxhciIsImxpbmVhciJdLGRmbHQ6ImNpcmN1bGFyIixlZGl0VHlwZToicGxvdCJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToiY2FsYyJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTkxLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzQ4LCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3NywiLi4vZG9tYWluIjo3OTB9XSw4MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuLi9zdWJwbG90X2RlZmF1bHRzIikscz10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhLGw9dCgiLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxjPXQoIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSx1PXQoIi4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIiksaD10KCIuLi9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiKSxmPXQoIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHMiKSxwPXQoIi4uL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIiksZD10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksZz10KCIuL3NldF9jb252ZXJ0Iiksdj10KCIuL2NvbnN0YW50cyIpLG09di5heGlzTmFtZXM7ZnVuY3Rpb24geSh0LGUscixvKXt2YXIgcD1yKCJiZ2NvbG9yIik7by5iZ0NvbG9yPWEuY29tYmluZShwLG8ucGFwZXJfYmdjb2xvcik7dmFyIHk9cigic2VjdG9yIik7cigiaG9sZSIpO3ZhciBiLF89cyhvLmZ1bGxEYXRhLHYubmFtZSxvLmlkKSx3PW8ubGF5b3V0T3V0O2Z1bmN0aW9uIGsodCxlKXtyZXR1cm4gcihiKyIuIit0LGUpfWZvcih2YXIgVD0wO1Q8bS5sZW5ndGg7VCsrKXtiPW1bVF0sbi5pc1BsYWluT2JqZWN0KHRbYl0pfHwodFtiXT17fSk7dmFyIE09dFtiXSxBPWkubmV3Q29udGFpbmVyKGUsYik7QS5faWQ9QS5fbmFtZT1iLEEuX2F0dHI9by5pZCsiLiIrYixBLl90cmFjZUluZGljZXM9Xy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2V4cGFuZGVkSW5kZXh9KTt2YXIgUz12LmF4aXNOYW1lMmRhdGFBcnJheVtiXSxFPXgoTSxBLGssXyxTKTtoKE0sQSxrLHtheERhdGE6XyxkYXRhQXR0cjpTfSk7dmFyIEwsQyxQPWsoInZpc2libGUiKTtzd2l0Y2goZyhBLGUsdyksaygidWlyZXZpc2lvbiIsZS51aXJldmlzaW9uKSxQJiYoQz0oTD1rKCJjb2xvciIpKT09PU0uY29sb3I/TDpvLmZvbnQuY29sb3IpLEEuX209MSxiKXtjYXNlInJhZGlhbGF4aXMiOnZhciBPPWsoImF1dG9yYW5nZSIsIUEuaXNWYWxpZFJhbmdlKE0ucmFuZ2UpKTtNLmF1dG9yYW5nZT1PLCFPfHwibGluZWFyIiE9PUUmJiItIiE9PUV8fGsoInJhbmdlbW9kZSIpLCJyZXZlcnNlZCI9PT1PJiYoQS5fbT0tMSksaygicmFuZ2UiKSxBLmNsZWFuUmFuZ2UoInJhbmdlIix7ZGZsdFJhbmdlOlswLDFdfSksUCYmKGsoInNpZGUiKSxrKCJhbmdsZSIseVswXSksaygidGl0bGUudGV4dCIpLG4uY29lcmNlRm9udChrLCJ0aXRsZS5mb250Iix7ZmFtaWx5Om8uZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipvLmZvbnQuc2l6ZSksY29sb3I6Q30pKTticmVhaztjYXNlImFuZ3VsYXJheGlzIjppZigiZGF0ZSI9PT1FKXtuLmxvZygiUG9sYXIgcGxvdHMgZG8gbm90IHN1cHBvcnQgZGF0ZSBhbmd1bGFyIGF4ZXMgeWV0LiIpO2Zvcih2YXIgej0wO3o8Xy5sZW5ndGg7eisrKV9bel0udmlzaWJsZT0hMTtFPU0udHlwZT1BLnR5cGU9ImxpbmVhciJ9aygibGluZWFyIj09PUU/InRoZXRhdW5pdCI6InBlcmlvZCIpO3ZhciBJPWsoImRpcmVjdGlvbiIpO2soInJvdGF0aW9uIix7Y291bnRlcmNsb2Nrd2lzZTowLGNsb2Nrd2lzZTo5MH1bSV0pfWlmKFApbChNLEEsayxBLnR5cGUpLHUoTSxBLGssQS50eXBlLHt0aWNrU3VmZml4RGZsdDoiZGVncmVlcyI9PT1BLnRoZXRhdW5pdD8iXHhiMCI6dm9pZCAwfSksYyhNLEEsayx7b3V0ZXJUaWNrczohMH0pLGsoInNob3d0aWNrbGFiZWxzIikmJihuLmNvZXJjZUZvbnQoaywidGlja2ZvbnQiLHtmYW1pbHk6by5mb250LmZhbWlseSxzaXplOm8uZm9udC5zaXplLGNvbG9yOkN9KSxrKCJ0aWNrYW5nbGUiKSxrKCJ0aWNrZm9ybWF0IikpLGYoTSxBLGsse2RmbHRDb2xvcjpMLGJnQ29sb3I6by5iZ0NvbG9yLGJsZW5kOjYwLHNob3dMaW5lOiEwLHNob3dHcmlkOiEwLG5vWmVyb0xpbmU6ITAsYXR0cmlidXRlczpkW2JdfSksaygibGF5ZXIiKTsiY2F0ZWdvcnkiIT09RSYmaygiaG92ZXJmb3JtYXQiKSxBLl9pbnB1dD1NfSJjYXRlZ29yeSI9PT1lLmFuZ3VsYXJheGlzLnR5cGUmJnIoImdyaWRzaGFwZSIpfWZ1bmN0aW9uIHgodCxlLHIsbixhKXtpZigiLSI9PT1yKCJ0eXBlIikpe2Zvcih2YXIgaSxvPTA7bzxuLmxlbmd0aDtvKyspaWYobltvXS52aXNpYmxlKXtpPW5bb107YnJlYWt9aSYmaVthXSYmKGUudHlwZT1wKGlbYV0sImdyZWdvcmlhbiIpKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOnQudHlwZT1lLnR5cGV9cmV0dXJuIGUudHlwZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe28odCxlLHIse3R5cGU6di5uYW1lLGF0dHJpYnV0ZXM6ZCxoYW5kbGVEZWZhdWx0czp5LGZvbnQ6ZS5mb250LHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yLGZ1bGxEYXRhOnIsbGF5b3V0T3V0OmV9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzU1LCIuLi9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSI6NzY2LCIuLi9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiOjc2OSwiLi4vY2FydGVzaWFuL2xpbmVfZ3JpZF9kZWZhdWx0cyI6Nzc5LCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6Nzg0LCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIjo3ODUsIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo3ODYsIi4uL2dldF9kYXRhIjo4MDAsIi4uL3N1YnBsb3RfZGVmYXVsdHMiOjg0MCwiLi9jb25zdGFudHMiOjgyNywiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODMwLCIuL3NldF9jb252ZXJ0Ijo4Mzl9XSw4MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9bi5tYXJrZXIsaT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtbIkFyZWEgdHJhY2VzIGFyZSBkZXByZWNhdGVkISIsIlBsZWFzZSBzd2l0Y2ggdG8gdGhlICpiYXJwb2xhciogdHJhY2UgdHlwZS4iXS5qb2luKCIgIik7ZS5leHBvcnRzPXtyOmkoe30sbi5yLHt9KSx0Omkoe30sbi50LHt9KSxtYXJrZXI6e2NvbG9yOmkoe30sYS5jb2xvcix7fSksc2l6ZTppKHt9LGEuc2l6ZSx7fSksc3ltYm9sOmkoe30sYS5zeW1ib2wse30pLG9wYWNpdHk6aSh7fSxhLm9wYWNpdHkse30pLGVkaXRUeXBlOiJjYWxjIn19fSx7Ii4uLy4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTEyMH1dLDgzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGk9dCgiLi4vLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLG89WyJMZWdhY3kgcG9sYXIgY2hhcnRzIGFyZSBkZXByZWNhdGVkISIsIlBsZWFzZSBzd2l0Y2ggdG8gKnBvbGFyKiBzdWJwbG90cy4iXS5qb2luKCIgIikscz1hKHt9LG4uZG9tYWluLHt9KTtmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGEoe30sZSx7c2hvd2xpbmU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiYm9vbGVhbiJ9LHRpY2tvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaG9yaXpvbnRhbCIsInZlcnRpY2FsIl19LHRpY2tsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjB9LHRpY2tjb2xvcjp7dmFsVHlwZToiY29sb3IifSx0aWNrc3VmZml4Ont2YWxUeXBlOiJzdHJpbmcifSxlbmRwYWRkaW5nOnt2YWxUeXBlOiJudW1iZXIiLGRlc2NyaXB0aW9uOm99LHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4ifX0pfWUuZXhwb3J0cz1pKHtyYWRpYWxheGlzOmwoMCx7cmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIn0se3ZhbFR5cGU6Im51bWJlciJ9XX0sZG9tYWluOnMsb3JpZW50YXRpb246e3ZhbFR5cGU6Im51bWJlciJ9fSksYW5ndWxhcmF4aXM6bCgwLHtyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0se3ZhbFR5cGU6Im51bWJlciIsZGZsdDozNjB9XX0sZG9tYWluOnN9KSxsYXlvdXQ6e2RpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdfSxvcmllbnRhdGlvbjp7dmFsVHlwZToiYW5nbGUifX19LCJwbG90IiwibmVzdGVkIil9LHsiLi4vLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3NDgsIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc3fV0sODM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyhlLmV4cG9ydHM9dCgiLi9taWNyb3BvbGFyIikpLm1hbmFnZXI9dCgiLi9taWNyb3BvbGFyX21hbmFnZXIiKX0seyIuL21pY3JvcG9sYXIiOjgzNSwiLi9taWNyb3BvbGFyX21hbmFnZXIiOjgzNn1dLDgzNTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi8uLi9saWIiKS5leHRlbmREZWVwQWxsLGk9dCgiLi4vLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLk1JRF9TSElGVCxvPWUuZXhwb3J0cz17dmVyc2lvbjoiMC4yLjIifTtvLkF4aXM9ZnVuY3Rpb24oKXt2YXIgdCxlLHIscyxsPXtkYXRhOltdLGxheW91dDp7fX0sYz17fSx1PXt9LGg9bi5kaXNwYXRjaCgiaG92ZXIiKSxmPXt9O3JldHVybiBmLnJlbmRlcj1mdW5jdGlvbihjKXtyZXR1cm4gZnVuY3Rpb24oYyl7ZT1jfHxlO3ZhciBoPWwuZGF0YSxmPWwubGF5b3V0Oygic3RyaW5nIj09dHlwZW9mIGV8fGUubm9kZU5hbWUpJiYoZT1uLnNlbGVjdChlKSksZS5kYXR1bShoKS5lYWNoKGZ1bmN0aW9uKGUsbCl7dmFyIGM9ZS5zbGljZSgpO3U9e2RhdGE6by51dGlsLmNsb25lSnNvbihjKSxsYXlvdXQ6by51dGlsLmNsb25lSnNvbihmKX07dmFyIGg9MDtjLmZvckVhY2goZnVuY3Rpb24odCxlKXt0LmNvbG9yfHwodC5jb2xvcj1mLmRlZmF1bHRDb2xvclJhbmdlW2hdLGg9KGgrMSklZi5kZWZhdWx0Q29sb3JSYW5nZS5sZW5ndGgpLHQuc3Ryb2tlQ29sb3J8fCh0LnN0cm9rZUNvbG9yPSJMaW5lUGxvdCI9PT10Lmdlb21ldHJ5P3QuY29sb3I6bi5yZ2IodC5jb2xvcikuZGFya2VyKCkudG9TdHJpbmcoKSksdS5kYXRhW2VdLmNvbG9yPXQuY29sb3IsdS5kYXRhW2VdLnN0cm9rZUNvbG9yPXQuc3Ryb2tlQ29sb3IsdS5kYXRhW2VdLnN0cm9rZURhc2g9dC5zdHJva2VEYXNoLHUuZGF0YVtlXS5zdHJva2VTaXplPXQuc3Ryb2tlU2l6ZX0pO3ZhciBwPWMuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC52aXNpYmxlO3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2Ygcnx8ITA9PT1yfSksZD0hMSxnPXAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQ9ZHx8InVuZGVmaW5lZCIhPXR5cGVvZiB0Lmdyb3VwSWQsdH0pO2lmKGQpe3ZhciB2PW4ubmVzdCgpLmtleShmdW5jdGlvbih0LGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdC5ncm91cElkP3QuZ3JvdXBJZDoidW5zdGFja2VkIn0pLmVudHJpZXMoZyksbT1bXSx5PXYubWFwKGZ1bmN0aW9uKHQsZSl7aWYoInVuc3RhY2tlZCI9PT10LmtleSlyZXR1cm4gdC52YWx1ZXM7dmFyIHI9dC52YWx1ZXNbMF0uci5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gMH0pO3JldHVybiB0LnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSxuKXt0LnlTdGFjaz1bcl0sbS5wdXNoKHIpLHI9by51dGlsLnN1bUFycmF5cyh0LnIscil9KSx0LnZhbHVlc30pO3A9bi5tZXJnZSh5KX1wLmZvckVhY2goZnVuY3Rpb24odCxlKXt0LnQ9QXJyYXkuaXNBcnJheSh0LnRbMF0pP3QudDpbdC50XSx0LnI9QXJyYXkuaXNBcnJheSh0LnJbMF0pP3QucjpbdC5yXX0pO3ZhciB4PU1hdGgubWluKGYud2lkdGgtZi5tYXJnaW4ubGVmdC1mLm1hcmdpbi5yaWdodCxmLmhlaWdodC1mLm1hcmdpbi50b3AtZi5tYXJnaW4uYm90dG9tKS8yO3g9TWF0aC5tYXgoMTAseCk7dmFyIGIsXz1bZi5tYXJnaW4ubGVmdCt4LGYubWFyZ2luLnRvcCt4XTtiPWQ/WzAsbi5tYXgoby51dGlsLnN1bUFycmF5cyhvLnV0aWwuYXJyYXlMYXN0KHApLnJbMF0sby51dGlsLmFycmF5TGFzdChtKSkpXTpuLmV4dGVudChvLnV0aWwuZmxhdHRlbkFycmF5KHAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucn0pKSksZi5yYWRpYWxBeGlzLmRvbWFpbiE9by5EQVRBRVhURU5UJiYoYlswXT0wKSxyPW4uc2NhbGUubGluZWFyKCkuZG9tYWluKGYucmFkaWFsQXhpcy5kb21haW4hPW8uREFUQUVYVEVOVCYmZi5yYWRpYWxBeGlzLmRvbWFpbj9mLnJhZGlhbEF4aXMuZG9tYWluOmIpLnJhbmdlKFswLHhdKSx1LmxheW91dC5yYWRpYWxBeGlzLmRvbWFpbj1yLmRvbWFpbigpO3ZhciB3LGs9by51dGlsLmZsYXR0ZW5BcnJheShwLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LnR9KSksVD0ic3RyaW5nIj09dHlwZW9mIGtbMF07VCYmKGs9by51dGlsLmRlZHVwbGljYXRlKGspLHc9ay5zbGljZSgpLGs9bi5yYW5nZShrLmxlbmd0aCkscD1wLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPXQ7cmV0dXJuIHQudD1ba10sZCYmKHIueVN0YWNrPXQueVN0YWNrKSxyfSkpO3ZhciBNPXAuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIkxpbmVQbG90Ij09PXQuZ2VvbWV0cnl8fCJEb3RQbG90Ij09PXQuZ2VvbWV0cnl9KS5sZW5ndGg9PT1wLmxlbmd0aCxBPW51bGw9PT1mLm5lZWRzRW5kU3BhY2luZz9UfHwhTTpmLm5lZWRzRW5kU3BhY2luZyxTPWYuYW5ndWxhckF4aXMuZG9tYWluJiZmLmFuZ3VsYXJBeGlzLmRvbWFpbiE9by5EQVRBRVhURU5UJiYhVCYmZi5hbmd1bGFyQXhpcy5kb21haW5bMF0+PTA/Zi5hbmd1bGFyQXhpcy5kb21haW46bi5leHRlbnQoayksRT1NYXRoLmFicyhrWzFdLWtbMF0pO00mJiFUJiYoRT0wKTt2YXIgTD1TLnNsaWNlKCk7QSYmVCYmKExbMV0rPUUpO3ZhciBDPWYuYW5ndWxhckF4aXMudGlja3NDb3VudHx8NDtDPjgmJihDPUMvKEMvOCkrQyU4KSxmLmFuZ3VsYXJBeGlzLnRpY2tzU3RlcCYmKEM9KExbMV0tTFswXSkvQyk7dmFyIFA9Zi5hbmd1bGFyQXhpcy50aWNrc1N0ZXB8fChMWzFdLUxbMF0pLyhDKihmLm1pbm9yVGlja3MrMSkpO3cmJihQPU1hdGgubWF4KE1hdGgucm91bmQoUCksMSkpLExbMl18fChMWzJdPVApO3ZhciBPPW4ucmFuZ2UuYXBwbHkodGhpcyxMKTtpZihPPU8ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHBhcnNlRmxvYXQodC50b1ByZWNpc2lvbigxMikpfSkscz1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihMLnNsaWNlKDAsMikpLnJhbmdlKCJjbG9ja3dpc2UiPT09Zi5kaXJlY3Rpb24/WzAsMzYwXTpbMzYwLDBdKSx1LmxheW91dC5hbmd1bGFyQXhpcy5kb21haW49cy5kb21haW4oKSx1LmxheW91dC5hbmd1bGFyQXhpcy5lbmRQYWRkaW5nPUE/RTowLCJ1bmRlZmluZWQiPT10eXBlb2YodD1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoInN2Zy5jaGFydC1yb290IikpfHx0LmVtcHR5KCkpe3ZhciB6PShuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoIjxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBjbGFzcz0nY2hhcnQtcm9vdCc+JyArICc8ZyBjbGFzcz0nb3V0ZXItZ3JvdXAnPicgKyAnPGcgY2xhc3M9J2NoYXJ0LWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J2JhY2tncm91bmQtY2lyY2xlJz48L2NpcmNsZT4nICsgJzxnIGNsYXNzPSdnZW9tZXRyeS1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3JhZGlhbCBheGlzLWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J291dHNpZGUtY2lyY2xlJz48L2NpcmNsZT4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdhbmd1bGFyIGF4aXMtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSdndWlkZXMtZ3JvdXAnPjxsaW5lPjwvbGluZT48Y2lyY2xlIHI9JzAnPjwvY2lyY2xlPjwvZz4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdsZWdlbmQtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSd0b29sdGlwcy1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3RpdGxlLWdyb3VwJz48dGV4dD48L3RleHQ+PC9nPicgKyAnPC9nPicgKyAnPC9zdmc+IiwiYXBwbGljYXRpb24veG1sIiksST10aGlzLmFwcGVuZENoaWxkKHRoaXMub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKHouZG9jdW1lbnRFbGVtZW50LCEwKSk7dD1uLnNlbGVjdChJKX10LnNlbGVjdCgiLmd1aWRlcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pLHQuc2VsZWN0KCIuYW5ndWxhci5heGlzLWdyb3VwIikuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSksdC5zZWxlY3QoIi5yYWRpYWwuYXhpcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pO3ZhciBELFI9dC5zZWxlY3QoIi5jaGFydC1ncm91cCIpLEY9e2ZpbGw6Im5vbmUiLHN0cm9rZTpmLnRpY2tDb2xvcn0sQj17ImZvbnQtc2l6ZSI6Zi5mb250LnNpemUsImZvbnQtZmFtaWx5IjpmLmZvbnQuZmFtaWx5LGZpbGw6Zi5mb250LmNvbG9yLCJ0ZXh0LXNoYWRvdyI6WyItMXB4IDBweCIsIjFweCAtMXB4IiwiLTFweCAxcHgiLCIxcHggMXB4Il0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIiAiK3QrIiAwICIrZi5mb250Lm91dGxpbmVDb2xvcn0pLmpvaW4oIiwiKX07aWYoZi5zaG93TGVnZW5kKXtEPXQuc2VsZWN0KCIubGVnZW5kLWdyb3VwIikuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbeCxmLm1hcmdpbi50b3BdKyIpIn0pLnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KTt2YXIgTj1wLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPW8udXRpbC5jbG9uZUpzb24odCk7cmV0dXJuIHIuc3ltYm9sPSJEb3RQbG90Ij09PXQuZ2VvbWV0cnk/dC5kb3RUeXBlfHwiY2lyY2xlIjoiTGluZVBsb3QiIT10Lmdlb21ldHJ5PyJzcXVhcmUiOiJsaW5lIixyLnZpc2libGVJbkxlZ2VuZD0idW5kZWZpbmVkIj09dHlwZW9mIHQudmlzaWJsZUluTGVnZW5kfHx0LnZpc2libGVJbkxlZ2VuZCxyLmNvbG9yPSJMaW5lUGxvdCI9PT10Lmdlb21ldHJ5P3Quc3Ryb2tlQ29sb3I6dC5jb2xvcixyfSk7by5MZWdlbmQoKS5jb25maWcoe2RhdGE6cC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5uYW1lfHwiRWxlbWVudCIrZX0pLGxlZ2VuZENvbmZpZzphKHt9LG8uTGVnZW5kLmRlZmF1bHRDb25maWcoKS5sZWdlbmRDb25maWcse2NvbnRhaW5lcjpELGVsZW1lbnRzOk4scmV2ZXJzZU9yZGVyOmYubGVnZW5kLnJldmVyc2VPcmRlcn0pfSkoKTt2YXIgaj1ELm5vZGUoKS5nZXRCQm94KCk7eD1NYXRoLm1pbihmLndpZHRoLWoud2lkdGgtZi5tYXJnaW4ubGVmdC1mLm1hcmdpbi5yaWdodCxmLmhlaWdodC1mLm1hcmdpbi50b3AtZi5tYXJnaW4uYm90dG9tKS8yLHg9TWF0aC5tYXgoMTAseCksXz1bZi5tYXJnaW4ubGVmdCt4LGYubWFyZ2luLnRvcCt4XSxyLnJhbmdlKFswLHhdKSx1LmxheW91dC5yYWRpYWxBeGlzLmRvbWFpbj1yLmRvbWFpbigpLEQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrW19bMF0reCxfWzFdLXhdKyIpIil9ZWxzZSBEPXQuc2VsZWN0KCIubGVnZW5kLWdyb3VwIikuc3R5bGUoe2Rpc3BsYXk6Im5vbmUifSk7dC5hdHRyKHt3aWR0aDpmLndpZHRoLGhlaWdodDpmLmhlaWdodH0pLnN0eWxlKHtvcGFjaXR5OmYub3BhY2l0eX0pLFIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXysiKSIpLnN0eWxlKHtjdXJzb3I6ImNyb3NzaGFpciJ9KTt2YXIgVj1bKGYud2lkdGgtKGYubWFyZ2luLmxlZnQrZi5tYXJnaW4ucmlnaHQrMip4KyhqP2oud2lkdGg6MCkpKS8yLChmLmhlaWdodC0oZi5tYXJnaW4udG9wK2YubWFyZ2luLmJvdHRvbSsyKngpKS8yXTtpZihWWzBdPU1hdGgubWF4KDAsVlswXSksVlsxXT1NYXRoLm1heCgwLFZbMV0pLHQuc2VsZWN0KCIub3V0ZXItZ3JvdXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitWKyIpIiksZi50aXRsZSYmZi50aXRsZS50ZXh0KXt2YXIgVT10LnNlbGVjdCgiZy50aXRsZS1ncm91cCB0ZXh0Iikuc3R5bGUoQikudGV4dChmLnRpdGxlLnRleHQpLHE9VS5ub2RlKCkuZ2V0QkJveCgpO1UuYXR0cih7eDpfWzBdLXEud2lkdGgvMix5Ol9bMV0teC0yMH0pfXZhciBIPXQuc2VsZWN0KCIucmFkaWFsLmF4aXMtZ3JvdXAiKTtpZihmLnJhZGlhbEF4aXMuZ3JpZExpbmVzVmlzaWJsZSl7dmFyIEc9SC5zZWxlY3RBbGwoImNpcmNsZS5ncmlkLWNpcmNsZSIpLmRhdGEoci50aWNrcyg1KSk7Ry5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuYXR0cih7Y2xhc3M6ImdyaWQtY2lyY2xlIn0pLnN0eWxlKEYpLEcuYXR0cigiciIsciksRy5leGl0KCkucmVtb3ZlKCl9SC5zZWxlY3QoImNpcmNsZS5vdXRzaWRlLWNpcmNsZSIpLmF0dHIoe3I6eH0pLnN0eWxlKEYpO3ZhciBZPXQuc2VsZWN0KCJjaXJjbGUuYmFja2dyb3VuZC1jaXJjbGUiKS5hdHRyKHtyOnh9KS5zdHlsZSh7ZmlsbDpmLmJhY2tncm91bmRDb2xvcixzdHJva2U6Zi5zdHJva2V9KTtmdW5jdGlvbiBXKHQsZSl7cmV0dXJuIHModCklMzYwK2Yub3JpZW50YXRpb259aWYoZi5yYWRpYWxBeGlzLnZpc2libGUpe3ZhciBYPW4uc3ZnLmF4aXMoKS5zY2FsZShyKS50aWNrcyg1KS50aWNrU2l6ZSg1KTtILmNhbGwoWCkuYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitmLnJhZGlhbEF4aXMub3JpZW50YXRpb24rIikifSksSC5zZWxlY3RBbGwoIi5kb21haW4iKS5zdHlsZShGKSxILnNlbGVjdEFsbCgiZz50ZXh0IikudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRleHRDb250ZW50K2YucmFkaWFsQXhpcy50aWNrc1N1ZmZpeH0pLnN0eWxlKEIpLnN0eWxlKHsidGV4dC1hbmNob3IiOiJzdGFydCJ9KS5hdHRyKHt4OjAseTowLGR4OjAsZHk6MCx0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4iaG9yaXpvbnRhbCI9PT1mLnJhZGlhbEF4aXMudGlja09yaWVudGF0aW9uPyJyb3RhdGUoIistZi5yYWRpYWxBeGlzLm9yaWVudGF0aW9uKyIpIHRyYW5zbGF0ZSgiK1swLEJbImZvbnQtc2l6ZSJdXSsiKSI6InRyYW5zbGF0ZSgiK1swLEJbImZvbnQtc2l6ZSJdXSsiKSJ9fSksSC5zZWxlY3RBbGwoImc+bGluZSIpLnN0eWxlKHtzdHJva2U6ImJsYWNrIn0pfXZhciBaPXQuc2VsZWN0KCIuYW5ndWxhci5heGlzLWdyb3VwIikuc2VsZWN0QWxsKCJnLmFuZ3VsYXItdGljayIpLmRhdGEoTyksSj1aLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ndWxhci10aWNrIiwhMCk7Wi5hdHRyKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4icm90YXRlKCIrVyh0KSsiKSJ9fSkuc3R5bGUoe2Rpc3BsYXk6Zi5hbmd1bGFyQXhpcy52aXNpYmxlPyJibG9jayI6Im5vbmUifSksWi5leGl0KCkucmVtb3ZlKCksSi5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJncmlkLWxpbmUiLCEwKS5jbGFzc2VkKCJtYWpvciIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZSUoZi5taW5vclRpY2tzKzEpPT0wfSkuY2xhc3NlZCgibWlub3IiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIShlJShmLm1pbm9yVGlja3MrMSk9PTApfSkuc3R5bGUoRiksSi5zZWxlY3RBbGwoIi5taW5vciIpLnN0eWxlKHtzdHJva2U6Zi5taW5vclRpY2tDb2xvcn0pLFouc2VsZWN0KCJsaW5lLmdyaWQtbGluZSIpLmF0dHIoe3gxOmYudGlja0xlbmd0aD94LWYudGlja0xlbmd0aDowLHgyOnh9KS5zdHlsZSh7ZGlzcGxheTpmLmFuZ3VsYXJBeGlzLmdyaWRMaW5lc1Zpc2libGU/ImJsb2NrIjoibm9uZSJ9KSxKLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImF4aXMtdGV4dCIsITApLnN0eWxlKEIpO3ZhciBLPVouc2VsZWN0KCJ0ZXh0LmF4aXMtdGV4dCIpLmF0dHIoe3g6eCtmLmxhYmVsT2Zmc2V0LGR5OmkrImVtIix0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXt2YXIgcj1XKHQpLG49eCtmLmxhYmVsT2Zmc2V0LGE9Zi5hbmd1bGFyQXhpcy50aWNrT3JpZW50YXRpb247cmV0dXJuImhvcml6b250YWwiPT1hPyJyb3RhdGUoIistcisiICIrbisiIDApIjoicmFkaWFsIj09YT9yPDI3MCYmcj45MD8icm90YXRlKDE4MCAiK24rIiAwKSI6bnVsbDoicm90YXRlKCIrKHI8PTE4MCYmcj4wPy05MDo5MCkrIiAiK24rIiAwKSJ9fSkuc3R5bGUoeyJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsZGlzcGxheTpmLmFuZ3VsYXJBeGlzLmxhYmVsc1Zpc2libGU/ImJsb2NrIjoibm9uZSJ9KS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGYubWlub3JUaWNrcysxKSE9MD8iIjp3P3dbdF0rZi5hbmd1bGFyQXhpcy50aWNrc1N1ZmZpeDp0K2YuYW5ndWxhckF4aXMudGlja3NTdWZmaXh9KS5zdHlsZShCKTtmLmFuZ3VsYXJBeGlzLnJld3JpdGVUaWNrcyYmSy50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGYubWlub3JUaWNrcysxKSE9MD8iIjpmLmFuZ3VsYXJBeGlzLnJld3JpdGVUaWNrcyh0aGlzLnRleHRDb250ZW50LGUpfSk7dmFyIFE9bi5tYXgoUi5zZWxlY3RBbGwoIi5hbmd1bGFyLXRpY2sgdGV4dCIpWzBdLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LmdldENUTSgpLmUrdC5nZXRCQm94KCkud2lkdGh9KSk7RC5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1t4K1EsZi5tYXJnaW4udG9wXSsiKSJ9KTt2YXIgJD10LnNlbGVjdCgiZy5nZW9tZXRyeS1ncm91cCIpLnNlbGVjdEFsbCgiZyIpLnNpemUoKT4wLHR0PXQuc2VsZWN0KCJnLmdlb21ldHJ5LWdyb3VwIikuc2VsZWN0QWxsKCJnLmdlb21ldHJ5IikuZGF0YShwKTtpZih0dC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoe2NsYXNzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuImdlb21ldHJ5IGdlb21ldHJ5IitlfX0pLHR0LmV4aXQoKS5yZW1vdmUoKSxwWzBdfHwkKXt2YXIgZXQ9W107cC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49e307bi5yYWRpYWxTY2FsZT1yLG4uYW5ndWxhclNjYWxlPXMsbi5jb250YWluZXI9dHQuZmlsdGVyKGZ1bmN0aW9uKHQscil7cmV0dXJuIHI9PWV9KSxuLmdlb21ldHJ5PXQuZ2VvbWV0cnksbi5vcmllbnRhdGlvbj1mLm9yaWVudGF0aW9uLG4uZGlyZWN0aW9uPWYuZGlyZWN0aW9uLG4uaW5kZXg9ZSxldC5wdXNoKHtkYXRhOnQsZ2VvbWV0cnlDb25maWc6bn0pfSk7dmFyIHJ0PW4ubmVzdCgpLmtleShmdW5jdGlvbih0LGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdC5kYXRhLmdyb3VwSWR8fCJ1bnN0YWNrZWQifSkuZW50cmllcyhldCksbnQ9W107cnQuZm9yRWFjaChmdW5jdGlvbih0LGUpeyJ1bnN0YWNrZWQiPT09dC5rZXk/bnQ9bnQuY29uY2F0KHQudmFsdWVzLm1hcChmdW5jdGlvbih0LGUpe3JldHVyblt0XX0pKTpudC5wdXNoKHQudmFsdWVzKX0pLG50LmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgcjtyPUFycmF5LmlzQXJyYXkodCk/dFswXS5nZW9tZXRyeUNvbmZpZy5nZW9tZXRyeTp0Lmdlb21ldHJ5Q29uZmlnLmdlb21ldHJ5O3ZhciBuPXQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEob1tyXS5kZWZhdWx0Q29uZmlnKCksdCl9KTtvW3JdKCkuY29uZmlnKG4pKCl9KX12YXIgYXQsaXQsb3Q9dC5zZWxlY3QoIi5ndWlkZXMtZ3JvdXAiKSxzdD10LnNlbGVjdCgiLnRvb2x0aXBzLWdyb3VwIiksbHQ9by50b29sdGlwUGFuZWwoKS5jb25maWcoe2NvbnRhaW5lcjpzdCxmb250U2l6ZTo4fSkoKSxjdD1vLnRvb2x0aXBQYW5lbCgpLmNvbmZpZyh7Y29udGFpbmVyOnN0LGZvbnRTaXplOjh9KSgpLHV0PW8udG9vbHRpcFBhbmVsKCkuY29uZmlnKHtjb250YWluZXI6c3QsaGFzVGljazohMH0pKCk7aWYoIVQpe3ZhciBodD1vdC5zZWxlY3QoImxpbmUiKS5hdHRyKHt4MTowLHkxOjAseTI6MH0pLnN0eWxlKHtzdHJva2U6ImdyZXkiLCJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSk7Ui5vbigibW91c2Vtb3ZlLmFuZ3VsYXItZ3VpZGUiLGZ1bmN0aW9uKHQsZSl7dmFyIHI9by51dGlsLmdldE1vdXNlUG9zKFkpLmFuZ2xlO2h0LmF0dHIoe3gyOi14LHRyYW5zZm9ybToicm90YXRlKCIrcisiKSJ9KS5zdHlsZSh7b3BhY2l0eTouNX0pO3ZhciBuPShyKzE4MCszNjAtZi5vcmllbnRhdGlvbiklMzYwO2F0PXMuaW52ZXJ0KG4pO3ZhciBhPW8udXRpbC5jb252ZXJ0VG9DYXJ0ZXNpYW4oeCsxMixyKzE4MCk7bHQudGV4dChvLnV0aWwucm91bmQoYXQpKS5tb3ZlKFthWzBdK19bMF0sYVsxXStfWzFdXSl9KS5vbigibW91c2VvdXQuYW5ndWxhci1ndWlkZSIsZnVuY3Rpb24odCxlKXtvdC5zZWxlY3QoImxpbmUiKS5zdHlsZSh7b3BhY2l0eTowfSl9KX12YXIgZnQ9b3Quc2VsZWN0KCJjaXJjbGUiKS5zdHlsZSh7c3Ryb2tlOiJncmV5IixmaWxsOiJub25lIn0pO1Iub24oIm1vdXNlbW92ZS5yYWRpYWwtZ3VpZGUiLGZ1bmN0aW9uKHQsZSl7dmFyIG49by51dGlsLmdldE1vdXNlUG9zKFkpLnJhZGl1cztmdC5hdHRyKHtyOm59KS5zdHlsZSh7b3BhY2l0eTouNX0pLGl0PXIuaW52ZXJ0KG8udXRpbC5nZXRNb3VzZVBvcyhZKS5yYWRpdXMpO3ZhciBhPW8udXRpbC5jb252ZXJ0VG9DYXJ0ZXNpYW4obixmLnJhZGlhbEF4aXMub3JpZW50YXRpb24pO2N0LnRleHQoby51dGlsLnJvdW5kKGl0KSkubW92ZShbYVswXStfWzBdLGFbMV0rX1sxXV0pfSkub24oIm1vdXNlb3V0LnJhZGlhbC1ndWlkZSIsZnVuY3Rpb24odCxlKXtmdC5zdHlsZSh7b3BhY2l0eTowfSksdXQuaGlkZSgpLGx0LmhpZGUoKSxjdC5oaWRlKCl9KSx0LnNlbGVjdEFsbCgiLmdlb21ldHJ5LWdyb3VwIC5tYXJrIikub24oIm1vdXNlb3Zlci50b29sdGlwIixmdW5jdGlvbihlLHIpe3ZhciBhPW4uc2VsZWN0KHRoaXMpLGk9dGhpcy5zdHlsZS5maWxsLHM9ImJsYWNrIixsPXRoaXMuc3R5bGUub3BhY2l0eXx8MTtpZihhLmF0dHIoeyJkYXRhLW9wYWNpdHkiOmx9KSxpJiYibm9uZSIhPT1pKXthLmF0dHIoeyJkYXRhLWZpbGwiOml9KSxzPW4uaHNsKGkpLmRhcmtlcigpLnRvU3RyaW5nKCksYS5zdHlsZSh7ZmlsbDpzLG9wYWNpdHk6MX0pO3ZhciBjPXt0Om8udXRpbC5yb3VuZChlWzBdKSxyOm8udXRpbC5yb3VuZChlWzFdKX07VCYmKGMudD13W2VbMF1dKTt2YXIgdT0idDogIitjLnQrIiwgcjogIitjLnIsaD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9dC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscD1baC5sZWZ0K2gud2lkdGgvMi1WWzBdLWYubGVmdCxoLnRvcCtoLmhlaWdodC8yLVZbMV0tZi50b3BdO3V0LmNvbmZpZyh7Y29sb3I6c30pLnRleHQodSksdXQubW92ZShwKX1lbHNlIGk9dGhpcy5zdHlsZS5zdHJva2V8fCJibGFjayIsYS5hdHRyKHsiZGF0YS1zdHJva2UiOml9KSxzPW4uaHNsKGkpLmRhcmtlcigpLnRvU3RyaW5nKCksYS5zdHlsZSh7c3Ryb2tlOnMsb3BhY2l0eToxfSl9KS5vbigibW91c2Vtb3ZlLnRvb2x0aXAiLGZ1bmN0aW9uKHQsZSl7aWYoMCE9bi5ldmVudC53aGljaClyZXR1cm4hMTtuLnNlbGVjdCh0aGlzKS5hdHRyKCJkYXRhLWZpbGwiKSYmdXQuc2hvdygpfSkub24oIm1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKHQsZSl7dXQuaGlkZSgpO3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9ci5hdHRyKCJkYXRhLWZpbGwiKTthP3Iuc3R5bGUoe2ZpbGw6YSxvcGFjaXR5OnIuYXR0cigiZGF0YS1vcGFjaXR5Iil9KTpyLnN0eWxlKHtzdHJva2U6ci5hdHRyKCJkYXRhLXN0cm9rZSIpLG9wYWNpdHk6ci5hdHRyKCJkYXRhLW9wYWNpdHkiKX0pfSl9KX0oYyksdGhpc30sZi5jb25maWc9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGw7dmFyIGU9by51dGlsLmNsb25lSnNvbih0KTtyZXR1cm4gZS5kYXRhLmZvckVhY2goZnVuY3Rpb24odCxlKXtsLmRhdGFbZV18fChsLmRhdGFbZV09e30pLGEobC5kYXRhW2VdLG8uQXhpcy5kZWZhdWx0Q29uZmlnKCkuZGF0YVswXSksYShsLmRhdGFbZV0sdCl9KSxhKGwubGF5b3V0LG8uQXhpcy5kZWZhdWx0Q29uZmlnKCkubGF5b3V0KSxhKGwubGF5b3V0LGUubGF5b3V0KSx0aGlzfSxmLmdldExpdmVDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gdX0sZi5nZXRpbnB1dENvbmZpZz1mdW5jdGlvbigpe3JldHVybiBjfSxmLnJhZGlhbFNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiByfSxmLmFuZ3VsYXJTY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gc30sZi5zdmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sbi5yZWJpbmQoZixoLCJvbiIpLGZ9LG8uQXhpcy5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2RhdGE6W3t0OlsxLDIsMyw0XSxyOlsxMCwxMSwxMiwxM10sbmFtZToiTGluZTEiLGdlb21ldHJ5OiJMaW5lUGxvdCIsY29sb3I6bnVsbCxzdHJva2VEYXNoOiJzb2xpZCIsc3Ryb2tlQ29sb3I6bnVsbCxzdHJva2VTaXplOiIxIix2aXNpYmxlSW5MZWdlbmQ6ITAsb3BhY2l0eToxfV0sbGF5b3V0OntkZWZhdWx0Q29sb3JSYW5nZTpuLnNjYWxlLmNhdGVnb3J5MTAoKS5yYW5nZSgpLHRpdGxlOm51bGwsaGVpZ2h0OjQ1MCx3aWR0aDo1MDAsbWFyZ2luOnt0b3A6NDAscmlnaHQ6NDAsYm90dG9tOjQwLGxlZnQ6NDB9LGZvbnQ6e3NpemU6MTIsY29sb3I6ImdyYXkiLG91dGxpbmVDb2xvcjoid2hpdGUiLGZhbWlseToiVGFob21hLCBzYW5zLXNlcmlmIn0sZGlyZWN0aW9uOiJjbG9ja3dpc2UiLG9yaWVudGF0aW9uOjAsbGFiZWxPZmZzZXQ6MTAscmFkaWFsQXhpczp7ZG9tYWluOm51bGwsb3JpZW50YXRpb246LTQ1LHRpY2tzU3VmZml4OiIiLHZpc2libGU6ITAsZ3JpZExpbmVzVmlzaWJsZTohMCx0aWNrT3JpZW50YXRpb246Imhvcml6b250YWwiLHJld3JpdGVUaWNrczpudWxsfSxhbmd1bGFyQXhpczp7ZG9tYWluOlswLDM2MF0sdGlja3NTdWZmaXg6IiIsdmlzaWJsZTohMCxncmlkTGluZXNWaXNpYmxlOiEwLGxhYmVsc1Zpc2libGU6ITAsdGlja09yaWVudGF0aW9uOiJob3Jpem9udGFsIixyZXdyaXRlVGlja3M6bnVsbCx0aWNrc0NvdW50Om51bGwsdGlja3NTdGVwOm51bGx9LG1pbm9yVGlja3M6MCx0aWNrTGVuZ3RoOm51bGwsdGlja0NvbG9yOiJzaWx2ZXIiLG1pbm9yVGlja0NvbG9yOiIjZWVlIixiYWNrZ3JvdW5kQ29sb3I6Im5vbmUiLG5lZWRzRW5kU3BhY2luZzpudWxsLHNob3dMZWdlbmQ6ITAsbGVnZW5kOntyZXZlcnNlT3JkZXI6ITF9LG9wYWNpdHk6MX19fSxvLnV0aWw9e30sby5EQVRBRVhURU5UPSJkYXRhRXh0ZW50IixvLkFSRUE9IkFyZWFDaGFydCIsby5MSU5FPSJMaW5lUGxvdCIsby5ET1Q9IkRvdFBsb3QiLG8uQkFSPSJCYXJDaGFydCIsby51dGlsLl9vdmVycmlkZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0KXIgaW4gZSYmKGVbcl09dFtyXSl9LG8udXRpbC5fZXh0ZW5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHQpZVtyXT10W3JdfSxvLnV0aWwuX3JuZFNuZD1mdW5jdGlvbigpe3JldHVybiAyKk1hdGgucmFuZG9tKCktMSsoMipNYXRoLnJhbmRvbSgpLTEpKygyKk1hdGgucmFuZG9tKCktMSl9LG8udXRpbC5kYXRhRnJvbUVxdWF0aW9uMj1mdW5jdGlvbih0LGUpe3ZhciByPWV8fDY7cmV0dXJuIG4ucmFuZ2UoMCwzNjArcixyKS5tYXAoZnVuY3Rpb24oZSxyKXt2YXIgbj1lKk1hdGguUEkvMTgwO3JldHVybltlLHQobildfSl9LG8udXRpbC5kYXRhRnJvbUVxdWF0aW9uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1lfHw2LGk9W10sbz1bXTtuLnJhbmdlKDAsMzYwK2EsYSkuZm9yRWFjaChmdW5jdGlvbihlLHIpe3ZhciBuPWUqTWF0aC5QSS8xODAsYT10KG4pO2kucHVzaChlKSxvLnB1c2goYSl9KTt2YXIgcz17dDppLHI6b307cmV0dXJuIHImJihzLm5hbWU9ciksc30sby51dGlsLmVuc3VyZUFycmF5PWZ1bmN0aW9uKHQsZSl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB0KXJldHVybiBudWxsO3ZhciByPVtdLmNvbmNhdCh0KTtyZXR1cm4gbi5yYW5nZShlKS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gcltlXXx8clswXX0pfSxvLnV0aWwuZmlsbEFycmF5cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLG4pe3RbZV09by51dGlsLmVuc3VyZUFycmF5KHRbZV0scil9KSx0fSxvLnV0aWwuY2xvbmVKc29uPWZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKX0sby51dGlsLnZhbGlkYXRlS2V5cz1mdW5jdGlvbih0LGUpeyJzdHJpbmciPT10eXBlb2YgZSYmKGU9ZS5zcGxpdCgiLiIpKTt2YXIgcj1lLnNoaWZ0KCk7cmV0dXJuIHRbcl0mJighZS5sZW5ndGh8fG9iakhhc0tleXModFtyXSxlKSl9LG8udXRpbC5zdW1BcnJheXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi56aXAodCxlKS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zdW0odCl9KX0sby51dGlsLmFycmF5TGFzdD1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Lmxlbmd0aC0xXX0sby51dGlsLmFycmF5RXF1YWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5tYXgodC5sZW5ndGgsZS5sZW5ndGgsMSk7ci0tID49MCYmdFtyXT09PWVbcl07KTtyZXR1cm4tMj09PXJ9LG8udXRpbC5mbGF0dGVuQXJyYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdOyFvLnV0aWwuYXJyYXlFcXVhbChlLHQpOyllPXQsdD1bXS5jb25jYXQuYXBwbHkoW10sdCk7cmV0dXJuIHR9LG8udXRpbC5kZWR1cGxpY2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24odCxlLHIpe3JldHVybiByLmluZGV4T2YodCk9PWV9KX0sby51dGlsLmNvbnZlcnRUb0NhcnRlc2lhbj1mdW5jdGlvbih0LGUpe3ZhciByPWUqTWF0aC5QSS8xODA7cmV0dXJuW3QqTWF0aC5jb3MociksdCpNYXRoLnNpbihyKV19LG8udXRpbC5yb3VuZD1mdW5jdGlvbih0LGUpe3ZhciByPWV8fDIsbj1NYXRoLnBvdygxMCxyKTtyZXR1cm4gTWF0aC5yb3VuZCh0Km4pL259LG8udXRpbC5nZXRNb3VzZVBvcz1mdW5jdGlvbih0KXt2YXIgZT1uLm1vdXNlKHQubm9kZSgpKSxyPWVbMF0sYT1lWzFdLGk9e307cmV0dXJuIGkueD1yLGkueT1hLGkucG9zPWUsaS5hbmdsZT0xODAqKE1hdGguYXRhbjIoYSxyKStNYXRoLlBJKS9NYXRoLlBJLGkucmFkaXVzPU1hdGguc3FydChyKnIrYSphKSxpfSxvLnV0aWwuZHVwbGljYXRlc0NvdW50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXt9LG49e30sYT0wLGk9dC5sZW5ndGg7YTxpO2ErKykoZT10W2FdKWluIHI/KHJbZV0rKyxuW2VdPXJbZV0pOnJbZV09MTtyZXR1cm4gbn0sby51dGlsLmR1cGxpY2F0ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKG8udXRpbC5kdXBsaWNhdGVzQ291bnQodCkpfSxvLnV0aWwudHJhbnNsYXRvcj1mdW5jdGlvbih0LGUscixuKXtpZihuKXt2YXIgYT1yLnNsaWNlKCk7cj1lLGU9YX12YXIgaT1lLnJlZHVjZShmdW5jdGlvbih0LGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdClyZXR1cm4gdFtlXX0sdCk7InVuZGVmaW5lZCIhPXR5cGVvZiBpJiYoZS5yZWR1Y2UoZnVuY3Rpb24odCxyLG4pe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdClyZXR1cm4gbj09PWUubGVuZ3RoLTEmJmRlbGV0ZSB0W3JdLHRbcl19LHQpLHIucmVkdWNlKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIHRbZV0mJih0W2VdPXt9KSxuPT09ci5sZW5ndGgtMSYmKHRbZV09aSksdFtlXX0sdCkpfSxvLlBvbHlDaGFydD1mdW5jdGlvbigpe3ZhciB0PVtvLlBvbHlDaGFydC5kZWZhdWx0Q29uZmlnKCldLGU9bi5kaXNwYXRjaCgiaG92ZXIiKSxyPXtzb2xpZDoibm9uZSIsZGFzaDpbNSwyXSxkb3Q6WzIsNV19O2Z1bmN0aW9uIGkoKXt2YXIgZT10WzBdLmdlb21ldHJ5Q29uZmlnLGE9ZS5jb250YWluZXI7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1uLnNlbGVjdChhKSksYS5kYXR1bSh0KS5lYWNoKGZ1bmN0aW9uKHQsYSl7dmFyIGk9ISF0WzBdLmRhdGEueVN0YWNrLG89dC5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gaT9uLnppcCh0LmRhdGEudFswXSx0LmRhdGEuclswXSx0LmRhdGEueVN0YWNrWzBdKTpuLnppcCh0LmRhdGEudFswXSx0LmRhdGEuclswXSl9KSxzPWUuYW5ndWxhclNjYWxlLGw9ZS5yYWRpYWxTY2FsZS5kb21haW4oKVswXSxjPXtiYXI6ZnVuY3Rpb24ocixhLGkpe3ZhciBvPXRbaV0uZGF0YSxsPWUucmFkaWFsU2NhbGUoclsxXSktZS5yYWRpYWxTY2FsZSgwKSxjPWUucmFkaWFsU2NhbGUoclsyXXx8MCksdT1vLmJhcldpZHRoO24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOiJtYXJrIGJhciIsZDoiTSIrW1tsK2MsLXUvMl0sW2wrYyx1LzJdLFtjLHUvMl0sW2MsLXUvMl1dLmpvaW4oIkwiKSsiWiIsdHJhbnNmb3JtOmZ1bmN0aW9uKHQscil7cmV0dXJuInJvdGF0ZSgiKyhlLm9yaWVudGF0aW9uK3ModFswXSkpKyIpIn19KX19O2MuZG90PWZ1bmN0aW9uKHIsYSxpKXt2YXIgbz1yWzJdP1tyWzBdLHJbMV0rclsyXV06cixzPW4uc3ZnLnN5bWJvbCgpLnNpemUodFtpXS5kYXRhLmRvdFNpemUpLnR5cGUodFtpXS5kYXRhLmRvdFR5cGUpKHIsYSk7bi5zZWxlY3QodGhpcykuYXR0cih7Y2xhc3M6Im1hcmsgZG90IixkOnMsdHJhbnNmb3JtOmZ1bmN0aW9uKHQscil7dmFyIG4sYSxpLHM9KG49ZnVuY3Rpb24odCxyKXt2YXIgbj1lLnJhZGlhbFNjYWxlKHRbMV0pLGE9KGUuYW5ndWxhclNjYWxlKHRbMF0pK2Uub3JpZW50YXRpb24pKk1hdGguUEkvMTgwO3JldHVybntyOm4sdDphfX0obyksYT1uLnIqTWF0aC5jb3Mobi50KSxpPW4ucipNYXRoLnNpbihuLnQpLHt4OmEseTppfSk7cmV0dXJuInRyYW5zbGF0ZSgiK1tzLngscy55XSsiKSJ9fSl9O3ZhciB1PW4uc3ZnLmxpbmUucmFkaWFsKCkuaW50ZXJwb2xhdGUodFswXS5kYXRhLmxpbmVJbnRlcnBvbGF0aW9uKS5yYWRpdXMoZnVuY3Rpb24odCl7cmV0dXJuIGUucmFkaWFsU2NhbGUodFsxXSl9KS5hbmdsZShmdW5jdGlvbih0KXtyZXR1cm4gZS5hbmd1bGFyU2NhbGUodFswXSkqTWF0aC5QSS8xODB9KTtjLmxpbmU9ZnVuY3Rpb24ocixhLGkpe3ZhciBzPXJbMl0/b1tpXS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm5bdFswXSx0WzFdK3RbMl1dfSk6b1tpXTtpZihuLnNlbGVjdCh0aGlzKS5lYWNoKGMuZG90KS5zdHlsZSh7b3BhY2l0eTpmdW5jdGlvbihlLHIpe3JldHVybit0W2ldLmRhdGEuZG90VmlzaWJsZX0sZmlsbDpkLnN0cm9rZShyLGEsaSl9KS5hdHRyKHtjbGFzczoibWFyayBkb3QifSksIShhPjApKXt2YXIgbD1uLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLnNlbGVjdEFsbCgicGF0aC5saW5lIikuZGF0YShbMF0pO2wuZW50ZXIoKS5pbnNlcnQoInBhdGgiKSxsLmF0dHIoe2NsYXNzOiJsaW5lIixkOnUocyksdHJhbnNmb3JtOmZ1bmN0aW9uKHQscil7cmV0dXJuInJvdGF0ZSgiKyhlLm9yaWVudGF0aW9uKzkwKSsiKSJ9LCJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSkuc3R5bGUoe2ZpbGw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZC5maWxsKHIsYSxpKX0sImZpbGwtb3BhY2l0eSI6MCxzdHJva2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZC5zdHJva2UocixhLGkpfSwic3Ryb2tlLXdpZHRoIjpmdW5jdGlvbih0LGUpe3JldHVybiBkWyJzdHJva2Utd2lkdGgiXShyLGEsaSl9LCJzdHJva2UtZGFzaGFycmF5IjpmdW5jdGlvbih0LGUpe3JldHVybiBkWyJzdHJva2UtZGFzaGFycmF5Il0ocixhLGkpfSxvcGFjaXR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGQub3BhY2l0eShyLGEsaSl9LGRpc3BsYXk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZC5kaXNwbGF5KHIsYSxpKX19KX19O3ZhciBoPWUuYW5ndWxhclNjYWxlLnJhbmdlKCksZj1NYXRoLmFicyhoWzFdLWhbMF0pL29bMF0ubGVuZ3RoKk1hdGguUEkvMTgwLHA9bi5zdmcuYXJjKCkuc3RhcnRBbmdsZShmdW5jdGlvbih0KXtyZXR1cm4tZi8yfSkuZW5kQW5nbGUoZnVuY3Rpb24odCl7cmV0dXJuIGYvMn0pLmlubmVyUmFkaXVzKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJhZGlhbFNjYWxlKGwrKHRbMl18fDApKX0pLm91dGVyUmFkaXVzKGZ1bmN0aW9uKHQpe3JldHVybiBlLnJhZGlhbFNjYWxlKGwrKHRbMl18fDApKStlLnJhZGlhbFNjYWxlKHRbMV0pfSk7Yy5hcmM9ZnVuY3Rpb24odCxyLGEpe24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOiJtYXJrIGFyYyIsZDpwLHRyYW5zZm9ybTpmdW5jdGlvbih0LHIpe3JldHVybiJyb3RhdGUoIisoZS5vcmllbnRhdGlvbitzKHRbMF0pKzkwKSsiKSJ9fSl9O3ZhciBkPXtmaWxsOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLmNvbG9yfSxzdHJva2U6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0W25dLmRhdGEuc3Ryb2tlQ29sb3J9LCJzdHJva2Utd2lkdGgiOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFtuXS5kYXRhLnN0cm9rZVNpemUrInB4In0sInN0cm9rZS1kYXNoYXJyYXkiOmZ1bmN0aW9uKGUsbixhKXtyZXR1cm4gclt0W2FdLmRhdGEuc3Ryb2tlRGFzaF19LG9wYWNpdHk6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0W25dLmRhdGEub3BhY2l0eX0sZGlzcGxheTpmdW5jdGlvbihlLHIsbil7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiB0W25dLmRhdGEudmlzaWJsZXx8dFtuXS5kYXRhLnZpc2libGU/ImJsb2NrIjoibm9uZSJ9fSxnPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5sYXllciIpLmRhdGEobyk7Zy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoe2NsYXNzOiJsYXllciJ9KTt2YXIgdj1nLnNlbGVjdEFsbCgicGF0aC5tYXJrIikuZGF0YShmdW5jdGlvbih0LGUpe3JldHVybiB0fSk7di5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2NsYXNzOiJtYXJrIn0pLHYuc3R5bGUoZCkuZWFjaChjW2UuZ2VvbWV0cnlUeXBlXSksdi5leGl0KCkucmVtb3ZlKCksZy5leGl0KCkucmVtb3ZlKCl9KX1yZXR1cm4gaS5jb25maWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUuZm9yRWFjaChmdW5jdGlvbihlLHIpe3Rbcl18fCh0W3JdPXt9KSxhKHRbcl0sby5Qb2x5Q2hhcnQuZGVmYXVsdENvbmZpZygpKSxhKHRbcl0sZSl9KSx0aGlzKTp0fSxpLmdldENvbG9yU2NhbGU9ZnVuY3Rpb24oKXt9LG4ucmViaW5kKGksZSwib24iKSxpfSxvLlBvbHlDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2RhdGE6e25hbWU6Imdlb20xIix0OltbMSwyLDMsNF1dLHI6W1sxLDIsMyw0XV0sZG90VHlwZToiY2lyY2xlIixkb3RTaXplOjY0LGRvdFZpc2libGU6ITEsYmFyV2lkdGg6MjAsY29sb3I6IiNmZmE1MDAiLHN0cm9rZVNpemU6MSxzdHJva2VDb2xvcjoic2lsdmVyIixzdHJva2VEYXNoOiJzb2xpZCIsb3BhY2l0eToxLGluZGV4OjAsdmlzaWJsZTohMCx2aXNpYmxlSW5MZWdlbmQ6ITB9LGdlb21ldHJ5Q29uZmlnOntnZW9tZXRyeToiTGluZVBsb3QiLGdlb21ldHJ5VHlwZToiYXJjIixkaXJlY3Rpb246ImNsb2Nrd2lzZSIsb3JpZW50YXRpb246MCxjb250YWluZXI6ImJvZHkiLHJhZGlhbFNjYWxlOm51bGwsYW5ndWxhclNjYWxlOm51bGwsY29sb3JTY2FsZTpuLnNjYWxlLmNhdGVnb3J5MjAoKX19fSxvLkJhckNoYXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG8uUG9seUNoYXJ0KCl9LG8uQmFyQ2hhcnQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOiJiYXIifX19LG8uQXJlYUNoYXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG8uUG9seUNoYXJ0KCl9LG8uQXJlYUNoYXJ0LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZToiYXJjIn19fSxvLkRvdFBsb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5Eb3RQbG90LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZToiZG90Iixkb3RUeXBlOiJjaXJjbGUifX19LG8uTGluZVBsb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5Q2hhcnQoKX0sby5MaW5lUGxvdC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6ImxpbmUifX19LG8uTGVnZW5kPWZ1bmN0aW9uKCl7dmFyIHQ9by5MZWdlbmQuZGVmYXVsdENvbmZpZygpLGU9bi5kaXNwYXRjaCgiaG92ZXIiKTtmdW5jdGlvbiByKCl7dmFyIGU9dC5sZWdlbmRDb25maWcsaT10LmRhdGEubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuW10uY29uY2F0KHQpLm1hcChmdW5jdGlvbih0LG4pe3ZhciBpPWEoe30sZS5lbGVtZW50c1tyXSk7cmV0dXJuIGkubmFtZT10LGkuY29sb3I9W10uY29uY2F0KGUuZWxlbWVudHNbcl0uY29sb3IpW25dLGl9KX0pLG89bi5tZXJnZShpKTtvPW8uZmlsdGVyKGZ1bmN0aW9uKHQscil7cmV0dXJuIGUuZWxlbWVudHNbcl0mJihlLmVsZW1lbnRzW3JdLnZpc2libGVJbkxlZ2VuZHx8InVuZGVmaW5lZCI9PXR5cGVvZiBlLmVsZW1lbnRzW3JdLnZpc2libGVJbkxlZ2VuZCl9KSxlLnJldmVyc2VPcmRlciYmKG89by5yZXZlcnNlKCkpO3ZhciBzPWUuY29udGFpbmVyOygic3RyaW5nIj09dHlwZW9mIHN8fHMubm9kZU5hbWUpJiYocz1uLnNlbGVjdChzKSk7dmFyIGw9by5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb2xvcn0pLGM9ZS5mb250U2l6ZSx1PW51bGw9PWUuaXNDb250aW51b3VzPyJudW1iZXIiPT10eXBlb2Ygb1swXTplLmlzQ29udGludW91cyxoPXU/ZS5oZWlnaHQ6YypvLmxlbmd0aCxmPXMuY2xhc3NlZCgibGVnZW5kLWdyb3VwIiwhMCkuc2VsZWN0QWxsKCJzdmciKS5kYXRhKFswXSkscD1mLmVudGVyKCkuYXBwZW5kKCJzdmciKS5hdHRyKHt3aWR0aDozMDAsaGVpZ2h0OmgrYyx4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ4bWxuczp4bGluayI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHZlcnNpb246IjEuMSJ9KTtwLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZC1heGlzIiwhMCkscC5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmQtbWFya3MiLCEwKTt2YXIgZD1uLnJhbmdlKG8ubGVuZ3RoKSxnPW4uc2NhbGVbdT8ibGluZWFyIjoib3JkaW5hbCJdKCkuZG9tYWluKGQpLnJhbmdlKGwpLHY9bi5zY2FsZVt1PyJsaW5lYXIiOiJvcmRpbmFsIl0oKS5kb21haW4oZClbdT8icmFuZ2UiOiJyYW5nZVBvaW50cyJdKFswLGhdKTtpZih1KXt2YXIgbT1mLnNlbGVjdCgiLmxlZ2VuZC1tYXJrcyIpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibGluZWFyR3JhZGllbnQiKS5hdHRyKHtpZDoiZ3JhZDEiLHgxOiIwJSIseTE6IjAlIix4MjoiMCUiLHkyOiIxMDAlIn0pLnNlbGVjdEFsbCgic3RvcCIpLmRhdGEobCk7bS5lbnRlcigpLmFwcGVuZCgic3RvcCIpLG0uYXR0cih7b2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUvKGwubGVuZ3RoLTEpKjEwMCsiJSJ9fSkuc3R5bGUoeyJzdG9wLWNvbG9yIjpmdW5jdGlvbih0LGUpe3JldHVybiB0fX0pLGYuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgibGVnZW5kLW1hcmsiLCEwKS5hdHRyKHtoZWlnaHQ6ZS5oZWlnaHQsd2lkdGg6ZS5jb2xvckJhbmRXaWR0aCxmaWxsOiJ1cmwoI2dyYWQxKSJ9KX1lbHNle3ZhciB5PWYuc2VsZWN0KCIubGVnZW5kLW1hcmtzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZC1tYXJrIikuZGF0YShvKTt5LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kLW1hcmsiLCEwKSx5LmF0dHIoe3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiJ0cmFuc2xhdGUoIitbYy8yLHYoZSkrYy8yXSsiKSJ9LGQ6ZnVuY3Rpb24odCxlKXt2YXIgcixhLGksbz10LnN5bWJvbDtyZXR1cm4gaT0zKihhPWMpLCJsaW5lIj09PShyPW8pPyJNIitbWy1hLzIsLWEvMTJdLFthLzIsLWEvMTJdLFthLzIsYS8xMl0sWy1hLzIsYS8xMl1dKyJaIjotMSE9bi5zdmcuc3ltYm9sVHlwZXMuaW5kZXhPZihyKT9uLnN2Zy5zeW1ib2woKS50eXBlKHIpLnNpemUoaSkoKTpuLnN2Zy5zeW1ib2woKS50eXBlKCJzcXVhcmUiKS5zaXplKGkpKCl9LGZpbGw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZyhlKX19KSx5LmV4aXQoKS5yZW1vdmUoKX12YXIgeD1uLnN2Zy5heGlzKCkuc2NhbGUodikub3JpZW50KCJyaWdodCIpLGI9Zi5zZWxlY3QoImcubGVnZW5kLWF4aXMiKS5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1t1P2UuY29sb3JCYW5kV2lkdGg6YyxjLzJdKyIpIn0pLmNhbGwoeCk7cmV0dXJuIGIuc2VsZWN0QWxsKCIuZG9tYWluIikuc3R5bGUoe2ZpbGw6Im5vbmUiLHN0cm9rZToibm9uZSJ9KSxiLnNlbGVjdEFsbCgibGluZSIpLnN0eWxlKHtmaWxsOiJub25lIixzdHJva2U6dT9lLnRleHRDb2xvcjoibm9uZSJ9KSxiLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKHtmaWxsOmUudGV4dENvbG9yLCJmb250LXNpemUiOmUuZm9udFNpemV9KS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG9bZV0ubmFtZX0pLHJ9cmV0dXJuIHIuY29uZmlnPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhKHQsZSksdGhpcyk6dH0sbi5yZWJpbmQocixlLCJvbiIpLHJ9LG8uTGVnZW5kLmRlZmF1bHRDb25maWc9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZGF0YTpbImEiLCJiIiwiYyJdLGxlZ2VuZENvbmZpZzp7ZWxlbWVudHM6W3tzeW1ib2w6ImxpbmUiLGNvbG9yOiJyZWQifSx7c3ltYm9sOiJzcXVhcmUiLGNvbG9yOiJ5ZWxsb3cifSx7c3ltYm9sOiJkaWFtb25kIixjb2xvcjoibGltZWdyZWVuIn1dLGhlaWdodDoxNTAsY29sb3JCYW5kV2lkdGg6MzAsZm9udFNpemU6MTIsY29udGFpbmVyOiJib2R5Iixpc0NvbnRpbnVvdXM6bnVsbCx0ZXh0Q29sb3I6ImdyZXkiLHJldmVyc2VPcmRlcjohMX19fSxvLnRvb2x0aXBQYW5lbD1mdW5jdGlvbigpe3ZhciB0LGUscixpPXtjb250YWluZXI6bnVsbCxoYXNUaWNrOiExLGZvbnRTaXplOjEyLGNvbG9yOiJ3aGl0ZSIscGFkZGluZzo1fSxzPSJ0b29sdGlwLSIrby50b29sdGlwUGFuZWwudWlkKyssbD0xMCxjPWZ1bmN0aW9uKCl7dmFyIG49KHQ9aS5jb250YWluZXIuc2VsZWN0QWxsKCJnLiIrcykuZGF0YShbMF0pKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQocywhMCkuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUiLGRpc3BsYXk6Im5vbmUifSk7cmV0dXJuIHI9bi5hcHBlbmQoInBhdGgiKS5zdHlsZSh7ZmlsbDoid2hpdGUiLCJmaWxsLW9wYWNpdHkiOi45fSkuYXR0cih7ZDoiTTAgMCJ9KSxlPW4uYXBwZW5kKCJ0ZXh0IikuYXR0cih7ZHg6aS5wYWRkaW5nK2wsZHk6LjMqK2kuZm9udFNpemV9KSxjfTtyZXR1cm4gYy50ZXh0PWZ1bmN0aW9uKGEpe3ZhciBvPW4uaHNsKGkuY29sb3IpLmwscz1vPj0uNT8iI2FhYSI6IndoaXRlIix1PW8+PS41PyJibGFjayI6IndoaXRlIixoPWF8fCIiO2Uuc3R5bGUoe2ZpbGw6dSwiZm9udC1zaXplIjppLmZvbnRTaXplKyJweCJ9KS50ZXh0KGgpO3ZhciBmPWkucGFkZGluZyxwPWUubm9kZSgpLmdldEJCb3goKSxkPXtmaWxsOmkuY29sb3Isc3Ryb2tlOnMsInN0cm9rZS13aWR0aCI6IjJweCJ9LGc9cC53aWR0aCsyKmYrbCx2PXAuaGVpZ2h0KzIqZjtyZXR1cm4gci5hdHRyKHtkOiJNIitbW2wsLXYvMl0sW2wsLXYvNF0sW2kuaGFzVGljaz8wOmwsMF0sW2wsdi80XSxbbCx2LzJdLFtnLHYvMl0sW2csLXYvMl1dLmpvaW4oIkwiKSsiWiJ9KS5zdHlsZShkKSx0LmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrW2wsLXYvMisyKmZdKyIpIn0pLHQuc3R5bGUoe2Rpc3BsYXk6ImJsb2NrIn0pLGN9LGMubW92ZT1mdW5jdGlvbihlKXtpZih0KXJldHVybiB0LmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrW2VbMF0sZVsxXV0rIikifSkuc3R5bGUoe2Rpc3BsYXk6ImJsb2NrIn0pLGN9LGMuaGlkZT1mdW5jdGlvbigpe2lmKHQpcmV0dXJuIHQuc3R5bGUoe2Rpc3BsYXk6Im5vbmUifSksY30sYy5zaG93PWZ1bmN0aW9uKCl7aWYodClyZXR1cm4gdC5zdHlsZSh7ZGlzcGxheToiYmxvY2sifSksY30sYy5jb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIGEoaSx0KSxjfSxjfSxvLnRvb2x0aXBQYW5lbC51aWQ9MSxvLmFkYXB0ZXI9e30sby5hZGFwdGVyLnBsb3RseT1mdW5jdGlvbigpe3ZhciB0PXtjb252ZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9e307aWYodC5kYXRhJiYoci5kYXRhPXQuZGF0YS5tYXAoZnVuY3Rpb24odCxyKXt2YXIgbj1hKHt9LHQpO3JldHVybltbbixbIm1hcmtlciIsImNvbG9yIl0sWyJjb2xvciJdXSxbbixbIm1hcmtlciIsIm9wYWNpdHkiXSxbIm9wYWNpdHkiXV0sW24sWyJtYXJrZXIiLCJsaW5lIiwiY29sb3IiXSxbInN0cm9rZUNvbG9yIl1dLFtuLFsibWFya2VyIiwibGluZSIsImRhc2giXSxbInN0cm9rZURhc2giXV0sW24sWyJtYXJrZXIiLCJsaW5lIiwid2lkdGgiXSxbInN0cm9rZVNpemUiXV0sW24sWyJtYXJrZXIiLCJzeW1ib2wiXSxbImRvdFR5cGUiXV0sW24sWyJtYXJrZXIiLCJzaXplIl0sWyJkb3RTaXplIl1dLFtuLFsibWFya2VyIiwiYmFyV2lkdGgiXSxbImJhcldpZHRoIl1dLFtuLFsibGluZSIsImludGVycG9sYXRpb24iXSxbImxpbmVJbnRlcnBvbGF0aW9uIl1dLFtuLFsic2hvd2xlZ2VuZCJdLFsidmlzaWJsZUluTGVnZW5kIl1dXS5mb3JFYWNoKGZ1bmN0aW9uKHQscil7by51dGlsLnRyYW5zbGF0b3IuYXBwbHkobnVsbCx0LmNvbmNhdChlKSl9KSxlfHxkZWxldGUgbi5tYXJrZXIsZSYmZGVsZXRlIG4uZ3JvdXBJZCxlPygiTGluZVBsb3QiPT09bi5nZW9tZXRyeT8obi50eXBlPSJzY2F0dGVyIiwhMD09PW4uZG90VmlzaWJsZT8oZGVsZXRlIG4uZG90VmlzaWJsZSxuLm1vZGU9ImxpbmVzK21hcmtlcnMiKTpuLm1vZGU9ImxpbmVzIik6IkRvdFBsb3QiPT09bi5nZW9tZXRyeT8obi50eXBlPSJzY2F0dGVyIixuLm1vZGU9Im1hcmtlcnMiKToiQXJlYUNoYXJ0Ij09PW4uZ2VvbWV0cnk/bi50eXBlPSJhcmVhIjoiQmFyQ2hhcnQiPT09bi5nZW9tZXRyeSYmKG4udHlwZT0iYmFyIiksZGVsZXRlIG4uZ2VvbWV0cnkpOigic2NhdHRlciI9PT1uLnR5cGU/ImxpbmVzIj09PW4ubW9kZT9uLmdlb21ldHJ5PSJMaW5lUGxvdCI6Im1hcmtlcnMiPT09bi5tb2RlP24uZ2VvbWV0cnk9IkRvdFBsb3QiOiJsaW5lcyttYXJrZXJzIj09PW4ubW9kZSYmKG4uZ2VvbWV0cnk9IkxpbmVQbG90IixuLmRvdFZpc2libGU9ITApOiJhcmVhIj09PW4udHlwZT9uLmdlb21ldHJ5PSJBcmVhQ2hhcnQiOiJiYXIiPT09bi50eXBlJiYobi5nZW9tZXRyeT0iQmFyQ2hhcnQiKSxkZWxldGUgbi5tb2RlLGRlbGV0ZSBuLnR5cGUpLG59KSwhZSYmdC5sYXlvdXQmJiJzdGFjayI9PT10LmxheW91dC5iYXJtb2RlKSl7dmFyIGk9by51dGlsLmR1cGxpY2F0ZXMoci5kYXRhLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmdlb21ldHJ5fSkpO3IuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49aS5pbmRleE9mKHQuZ2VvbWV0cnkpOy0xIT1uJiYoci5kYXRhW2VdLmdyb3VwSWQ9bil9KX1pZih0LmxheW91dCl7dmFyIHM9YSh7fSx0LmxheW91dCk7aWYoW1tzLFsicGxvdF9iZ2NvbG9yIl0sWyJiYWNrZ3JvdW5kQ29sb3IiXV0sW3MsWyJzaG93bGVnZW5kIl0sWyJzaG93TGVnZW5kIl1dLFtzLFsicmFkaWFsYXhpcyJdLFsicmFkaWFsQXhpcyJdXSxbcyxbImFuZ3VsYXJheGlzIl0sWyJhbmd1bGFyQXhpcyJdXSxbcy5hbmd1bGFyYXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtzLmFuZ3VsYXJheGlzLFsic2hvd3RpY2tsYWJlbHMiXSxbImxhYmVsc1Zpc2libGUiXV0sW3MuYW5ndWxhcmF4aXMsWyJudGlja3MiXSxbInRpY2tzQ291bnQiXV0sW3MuYW5ndWxhcmF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbcy5hbmd1bGFyYXhpcyxbInRpY2tzdWZmaXgiXSxbInRpY2tzU3VmZml4Il1dLFtzLmFuZ3VsYXJheGlzLFsicmFuZ2UiXSxbImRvbWFpbiJdXSxbcy5hbmd1bGFyYXhpcyxbImVuZHBhZGRpbmciXSxbImVuZFBhZGRpbmciXV0sW3MucmFkaWFsYXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtzLnJhZGlhbGF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbcy5yYWRpYWxheGlzLFsidGlja3N1ZmZpeCJdLFsidGlja3NTdWZmaXgiXV0sW3MucmFkaWFsYXhpcyxbInJhbmdlIl0sWyJkb21haW4iXV0sW3MuYW5ndWxhckF4aXMsWyJzaG93bGluZSJdLFsiZ3JpZExpbmVzVmlzaWJsZSJdXSxbcy5hbmd1bGFyQXhpcyxbInNob3d0aWNrbGFiZWxzIl0sWyJsYWJlbHNWaXNpYmxlIl1dLFtzLmFuZ3VsYXJBeGlzLFsibnRpY2tzIl0sWyJ0aWNrc0NvdW50Il1dLFtzLmFuZ3VsYXJBeGlzLFsidGlja29yaWVudGF0aW9uIl0sWyJ0aWNrT3JpZW50YXRpb24iXV0sW3MuYW5ndWxhckF4aXMsWyJ0aWNrc3VmZml4Il0sWyJ0aWNrc1N1ZmZpeCJdXSxbcy5hbmd1bGFyQXhpcyxbInJhbmdlIl0sWyJkb21haW4iXV0sW3MuYW5ndWxhckF4aXMsWyJlbmRwYWRkaW5nIl0sWyJlbmRQYWRkaW5nIl1dLFtzLnJhZGlhbEF4aXMsWyJzaG93bGluZSJdLFsiZ3JpZExpbmVzVmlzaWJsZSJdXSxbcy5yYWRpYWxBeGlzLFsidGlja29yaWVudGF0aW9uIl0sWyJ0aWNrT3JpZW50YXRpb24iXV0sW3MucmFkaWFsQXhpcyxbInRpY2tzdWZmaXgiXSxbInRpY2tzU3VmZml4Il1dLFtzLnJhZGlhbEF4aXMsWyJyYW5nZSJdLFsiZG9tYWluIl1dLFtzLmZvbnQsWyJvdXRsaW5lY29sb3IiXSxbIm91dGxpbmVDb2xvciJdXSxbcy5sZWdlbmQsWyJ0cmFjZW9yZGVyIl0sWyJyZXZlcnNlT3JkZXIiXV0sW3MsWyJsYWJlbG9mZnNldCJdLFsibGFiZWxPZmZzZXQiXV0sW3MsWyJkZWZhdWx0Y29sb3JyYW5nZSJdLFsiZGVmYXVsdENvbG9yUmFuZ2UiXV1dLmZvckVhY2goZnVuY3Rpb24odCxyKXtvLnV0aWwudHJhbnNsYXRvci5hcHBseShudWxsLHQuY29uY2F0KGUpKX0pLGU/KCJ1bmRlZmluZWQiIT10eXBlb2Ygcy50aWNrTGVuZ3RoJiYocy5hbmd1bGFyYXhpcy50aWNrbGVuPXMudGlja0xlbmd0aCxkZWxldGUgcy50aWNrTGVuZ3RoKSxzLnRpY2tDb2xvciYmKHMuYW5ndWxhcmF4aXMudGlja2NvbG9yPXMudGlja0NvbG9yLGRlbGV0ZSBzLnRpY2tDb2xvcikpOihzLmFuZ3VsYXJBeGlzJiYidW5kZWZpbmVkIiE9dHlwZW9mIHMuYW5ndWxhckF4aXMudGlja2xlbiYmKHMudGlja0xlbmd0aD1zLmFuZ3VsYXJBeGlzLnRpY2tsZW4pLHMuYW5ndWxhckF4aXMmJiJ1bmRlZmluZWQiIT10eXBlb2Ygcy5hbmd1bGFyQXhpcy50aWNrY29sb3ImJihzLnRpY2tDb2xvcj1zLmFuZ3VsYXJBeGlzLnRpY2tjb2xvcikpLHMubGVnZW5kJiYiYm9vbGVhbiIhPXR5cGVvZiBzLmxlZ2VuZC5yZXZlcnNlT3JkZXImJihzLmxlZ2VuZC5yZXZlcnNlT3JkZXI9Im5vcm1hbCIhPXMubGVnZW5kLnJldmVyc2VPcmRlcikscy5sZWdlbmQmJiJib29sZWFuIj09dHlwZW9mIHMubGVnZW5kLnRyYWNlb3JkZXImJihzLmxlZ2VuZC50cmFjZW9yZGVyPXMubGVnZW5kLnRyYWNlb3JkZXI/InJldmVyc2VkIjoibm9ybWFsIixkZWxldGUgcy5sZWdlbmQucmV2ZXJzZU9yZGVyKSxzLm1hcmdpbiYmInVuZGVmaW5lZCIhPXR5cGVvZiBzLm1hcmdpbi50KXt2YXIgbD1bInQiLCJyIiwiYiIsImwiLCJwYWQiXSxjPVsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicGFkIl0sdT17fTtuLmVudHJpZXMocy5tYXJnaW4pLmZvckVhY2goZnVuY3Rpb24odCxlKXt1W2NbbC5pbmRleE9mKHQua2V5KV1dPXQudmFsdWV9KSxzLm1hcmdpbj11fWUmJihkZWxldGUgcy5uZWVkc0VuZFNwYWNpbmcsZGVsZXRlIHMubWlub3JUaWNrQ29sb3IsZGVsZXRlIHMubWlub3JUaWNrcyxkZWxldGUgcy5hbmd1bGFyYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBzLmFuZ3VsYXJheGlzLnRpY2tzQ291bnQsZGVsZXRlIHMuYW5ndWxhcmF4aXMudGlja3NTdGVwLGRlbGV0ZSBzLmFuZ3VsYXJheGlzLnJld3JpdGVUaWNrcyxkZWxldGUgcy5hbmd1bGFyYXhpcy5udGlja3MsZGVsZXRlIHMucmFkaWFsYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBzLnJhZGlhbGF4aXMudGlja3NDb3VudCxkZWxldGUgcy5yYWRpYWxheGlzLnRpY2tzU3RlcCxkZWxldGUgcy5yYWRpYWxheGlzLnJld3JpdGVUaWNrcyxkZWxldGUgcy5yYWRpYWxheGlzLm50aWNrcyksci5sYXlvdXQ9c31yZXR1cm4gcn19O3JldHVybiB0fX0seyIuLi8uLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2ODYsIi4uLy4uLy4uL2xpYiI6NzE3LGQzOjE2NX1dLDgzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vLi4vLi4vbGliIiksaT10KCIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuL21pY3JvcG9sYXIiKSxzPXQoIi4vdW5kb19tYW5hZ2VyIiksbD1hLmV4dGVuZERlZXBBbGwsYz1lLmV4cG9ydHM9e307Yy5mcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGUscixhLGksdSxoPW5ldyBzO2Z1bmN0aW9uIGYocixzKXtyZXR1cm4gcyYmKHU9cyksbi5zZWxlY3Qobi5zZWxlY3QodSkubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXI+Kjpub3QoLmNoYXJ0LXJvb3QpIikucmVtb3ZlKCksZT1lP2woZSxyKTpyLGF8fChhPW8uQXhpcygpKSxpPW8uYWRhcHRlci5wbG90bHkoKS5jb252ZXJ0KGUpLGEuY29uZmlnKGkpLnJlbmRlcih1KSx0LmRhdGE9ZS5kYXRhLHQubGF5b3V0PWUubGF5b3V0LGMuZmlsbExheW91dCh0KSxlfXJldHVybiBmLmlzUG9sYXI9ITAsZi5zdmc9ZnVuY3Rpb24oKXtyZXR1cm4gYS5zdmcoKX0sZi5nZXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sZi5nZXRMaXZlQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIG8uYWRhcHRlci5wbG90bHkoKS5jb252ZXJ0KGEuZ2V0TGl2ZUNvbmZpZygpLCEwKX0sZi5nZXRMaXZlU2NhbGVzPWZ1bmN0aW9uKCl7cmV0dXJue3Q6YS5hbmd1bGFyU2NhbGUoKSxyOmEucmFkaWFsU2NhbGUoKX19LGYuc2V0VW5kb1BvaW50PWZ1bmN0aW9uKCl7dmFyIHQsbixhPXRoaXMsaT1vLnV0aWwuY2xvbmVKc29uKGUpO3Q9aSxuPXIsaC5hZGQoe3VuZG86ZnVuY3Rpb24oKXtuJiZhKG4pfSxyZWRvOmZ1bmN0aW9uKCl7YSh0KX19KSxyPW8udXRpbC5jbG9uZUpzb24oaSl9LGYudW5kbz1mdW5jdGlvbigpe2gudW5kbygpfSxmLnJlZG89ZnVuY3Rpb24oKXtoLnJlZG8oKX0sZn0sYy5maWxsTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnBsb3QtY29udGFpbmVyIikscj1lLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKSxhPXQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5zdmcmJnQuZnJhbWV3b3JrLnN2ZygpLG89e3dpZHRoOjgwMCxoZWlnaHQ6NjAwLHBhcGVyX2JnY29sb3I6aS5iYWNrZ3JvdW5kLF9jb250YWluZXI6ZSxfcGFwZXJkaXY6cixfcGFwZXI6YX07dC5fZnVsbExheW91dD1sKG8sdC5sYXlvdXQpfX0seyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uLy4uL2xpYiI6NzE3LCIuL21pY3JvcG9sYXIiOjgzNSwiLi91bmRvX21hbmFnZXIiOjgzNyxkMzoxNjV9XSw4Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZT1bXSxyPS0xLG49ITE7ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0PyhuPSEwLHRbZV0oKSxuPSExLHRoaXMpOnRoaXN9cmV0dXJue2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gbj90aGlzOihlLnNwbGljZShyKzEsZS5sZW5ndGgtciksZS5wdXNoKHQpLHI9ZS5sZW5ndGgtMSx0aGlzKX0sc2V0Q2FsbGJhY2s6ZnVuY3Rpb24oZSl7dD1lfSx1bmRvOmZ1bmN0aW9uKCl7dmFyIG49ZVtyXTtyZXR1cm4gbj8oYShuLCJ1bmRvIiksci09MSx0JiZ0KG4udW5kbyksdGhpcyk6dGhpc30scmVkbzpmdW5jdGlvbigpe3ZhciBuPWVbcisxXTtyZXR1cm4gbj8oYShuLCJyZWRvIikscis9MSx0JiZ0KG4ucmVkbyksdGhpcyk6dGhpc30sY2xlYXI6ZnVuY3Rpb24oKXtlPVtdLHI9LTF9LGhhc1VuZG86ZnVuY3Rpb24oKXtyZXR1cm4tMSE9PXJ9LGhhc1JlZG86ZnVuY3Rpb24oKXtyZXR1cm4gcjxlLmxlbmd0aC0xfSxnZXRDb21tYW5kczpmdW5jdGlvbigpe3JldHVybiBlfSxnZXRQcmV2aW91c0NvbW1hbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVtyLTFdfSxnZXRJbmRleDpmdW5jdGlvbigpe3JldHVybiByfX19fSx7fV0sODM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCJ0aW55Y29sb3IyIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uL3Bsb3RzIiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGg9dCgiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0IiksZj10KCIuL3NldF9jb252ZXJ0IikscD10KCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZG9BdXRvUmFuZ2UsZD10KCIuLi9jYXJ0ZXNpYW4vZHJhZ2JveCIpLGc9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLHY9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLG09dCgiLi4vLi4vY29tcG9uZW50cy90aXRsZXMiKSx5PXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5wcmVwU2VsZWN0LHg9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnNlbGVjdE9uQ2xpY2ssYj10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikuY2xlYXJTZWxlY3QsXz10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksdz10KCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiKSxrPXQoIi4uLy4uL3Bsb3RfYXBpL3N1YnJvdXRpbmVzIikucmVkcmF3UmVnbFRyYWNlcyxUPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5NSURfU0hJRlQsTT10KCIuL2NvbnN0YW50cyIpLEE9dCgiLi9oZWxwZXJzIiksUz1vLl8sRT1vLm1vZCxMPW8uZGVnMnJhZCxDPW8ucmFkMmRlZztmdW5jdGlvbiBQKHQsZSl7dGhpcy5pZD1lLHRoaXMuZ2Q9dCx0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9bnVsbCx0aGlzLnZhbmdsZXM9bnVsbCx0aGlzLnJhZGlhbEF4aXNBbmdsZT1udWxsLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJzPXt9LHRoaXMuY2xpcFBhdGhzPXt9LHRoaXMuY2xpcElkcz17fSx0aGlzLnZpZXdJbml0aWFsPXt9O3ZhciByPXQuX2Z1bGxMYXlvdXQsbj0iY2xpcCIrci5fdWlkK2U7dGhpcy5jbGlwSWRzLmZvclRyYWNlcz1uKyItZm9yLXRyYWNlcyIsdGhpcy5jbGlwUGF0aHMuZm9yVHJhY2VzPXIuX2NsaXBzLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsdGhpcy5jbGlwSWRzLmZvclRyYWNlcyksdGhpcy5jbGlwUGF0aHMuZm9yVHJhY2VzLmFwcGVuZCgicGF0aCIpLHRoaXMuZnJhbWV3b3JrPXIuX3BvbGFybGF5ZXIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGUpLHRoaXMucmFkaWFsVGlja0xheW91dD1udWxsLHRoaXMuYW5ndWxhclRpY2tMYXlvdXQ9bnVsbH12YXIgTz1QLnByb3RvdHlwZTtmdW5jdGlvbiB6KHQpe3ZhciBlPXQudGlja3MrU3RyaW5nKHQudGlja2xlbikrU3RyaW5nKHQuc2hvd3RpY2tsYWJlbHMpO3JldHVybiJzaWRlImluIHQmJihlKz10LnNpZGUpLGV9ZnVuY3Rpb24gSSh0LGUpe3JldHVybiBlW28uZmluZEluZGV4T2ZNaW4oZSxmdW5jdGlvbihlKXtyZXR1cm4gby5hbmdsZURpc3QodCxlKX0pXX1mdW5jdGlvbiBEKHQsZSxyKXtyZXR1cm4gZT8odC5hdHRyKCJkaXNwbGF5IixudWxsKSx0LmF0dHIocikpOnQmJnQuYXR0cigiZGlzcGxheSIsIm5vbmUiKSx0fWZ1bmN0aW9uIFIodCxlKXtyZXR1cm4idHJhbnNsYXRlKCIrdCsiLCIrZSsiKSJ9ZnVuY3Rpb24gRih0KXtyZXR1cm4icm90YXRlKCIrdCsiKSJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBQKHQsZSl9LE8ucGxvdD1mdW5jdGlvbih0LGUpe3ZhciByPWVbdGhpcy5pZF07dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXtpZighMT09PXRbbl1bMF0udHJhY2UuY2xpcG9uYXhpcyl7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX10aGlzLnVwZGF0ZUxheWVycyhlLHIpLHRoaXMudXBkYXRlTGF5b3V0KGUsciksYy5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGUodGhpcy5nZCx0aGlzLHQsciksdGhpcy51cGRhdGVGeChlLHIpfSxPLnVwZGF0ZUxheWVycz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGF5ZXJzLGE9ZS5yYWRpYWxheGlzLGk9ZS5hbmd1bGFyYXhpcyxvPU0ubGF5ZXJOYW1lcyxzPW8uaW5kZXhPZigiZnJvbnRwbG90IiksbD1vLnNsaWNlKDAscyksYz0iYmVsb3cgdHJhY2VzIj09PWkubGF5ZXIsdT0iYmVsb3cgdHJhY2VzIj09PWEubGF5ZXI7YyYmbC5wdXNoKCJhbmd1bGFyLWxpbmUiKSx1JiZsLnB1c2goInJhZGlhbC1saW5lIiksYyYmbC5wdXNoKCJhbmd1bGFyLWF4aXMiKSx1JiZsLnB1c2goInJhZGlhbC1heGlzIiksbC5wdXNoKCJmcm9udHBsb3QiKSxjfHxsLnB1c2goImFuZ3VsYXItbGluZSIpLHV8fGwucHVzaCgicmFkaWFsLWxpbmUiKSxjfHxsLnB1c2goImFuZ3VsYXItYXhpcyIpLHV8fGwucHVzaCgicmFkaWFsLWF4aXMiKTt2YXIgaD10aGlzLmZyYW1ld29yay5zZWxlY3RBbGwoIi5wb2xhcnN1YmxheWVyIikuZGF0YShsLFN0cmluZyk7aC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4icG9sYXJzdWJsYXllciAiK3R9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXJbdF09bi5zZWxlY3QodGhpcyk7c3dpdGNoKHQpe2Nhc2UiZnJvbnRwbG90IjplLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJhcmxheWVyIiwhMCksZS5hcHBlbmQoImciKS5jbGFzc2VkKCJzY2F0dGVybGF5ZXIiLCEwKTticmVhaztjYXNlImJhY2twbG90IjplLmFwcGVuZCgiZyIpLmNsYXNzZWQoIm1hcGxheWVyIiwhMCk7YnJlYWs7Y2FzZSJwbG90YmciOnIuYmc9ZS5hcHBlbmQoInBhdGgiKTticmVhaztjYXNlInJhZGlhbC1ncmlkIjpjYXNlImFuZ3VsYXItZ3JpZCI6ZS5zdHlsZSgiZmlsbCIsIm5vbmUiKTticmVhaztjYXNlInJhZGlhbC1saW5lIjplLmFwcGVuZCgibGluZSIpLnN0eWxlKCJmaWxsIiwibm9uZSIpO2JyZWFrO2Nhc2UiYW5ndWxhci1saW5lIjplLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJmaWxsIiwibm9uZSIpfX0pLGgub3JkZXIoKX0sTy51cGRhdGVMYXlvdXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheWVycyxuPXQuX3NpemUsYT1lLnJhZGlhbGF4aXMsaT1lLmFuZ3VsYXJheGlzLG89ZS5kb21haW4ueCxjPWUuZG9tYWluLnk7dGhpcy54T2Zmc2V0PW4ubCtuLncqb1swXSx0aGlzLnlPZmZzZXQ9bi50K24uaCooMS1jWzFdKTt2YXIgdT10aGlzLnhMZW5ndGg9bi53KihvWzFdLW9bMF0pLGg9dGhpcy55TGVuZ3RoPW4uaCooY1sxXS1jWzBdKSxmPWUuc2VjdG9yO3RoaXMuc2VjdG9ySW5SYWQ9Zi5tYXAoTCk7dmFyIHAsZCxnLHYsbSx5PXRoaXMuc2VjdG9yQkJveD1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxpPXRbMF0sbz10WzFdLWkscz1FKGksMzYwKSxsPXMrbyxjPU1hdGguY29zKEwocykpLHU9TWF0aC5zaW4oTChzKSksaD1NYXRoLmNvcyhMKGwpKSxmPU1hdGguc2luKEwobCkpO2E9czw9OTAmJmw+PTkwfHxzPjkwJiZsPj00NTA/MTp1PD0wJiZmPD0wPzA6TWF0aC5tYXgodSxmKTtlPXM8PTE4MCYmbD49MTgwfHxzPjE4MCYmbD49NTQwPy0xOmM+PTAmJmg+PTA/MDpNYXRoLm1pbihjLGgpO3I9czw9MjcwJiZsPj0yNzB8fHM+MjcwJiZsPj02MzA/LTE6dT49MCYmZj49MD8wOk1hdGgubWluKHUsZik7bj1sPj0zNjA/MTpjPD0wJiZoPD0wPzA6TWF0aC5tYXgoYyxoKTtyZXR1cm5bZSxyLG4sYV19KGYpLHg9eVsyXS15WzBdLGI9eVszXS15WzFdLF89aC91LHc9TWF0aC5hYnMoYi94KTtfPnc/KHA9dSxtPShoLShkPXUqdykpL24uaC8yLGc9W29bMF0sb1sxXV0sdj1bY1swXSttLGNbMV0tbV0pOihkPWgsbT0odS0ocD1oL3cpKS9uLncvMixnPVtvWzBdK20sb1sxXS1tXSx2PVtjWzBdLGNbMV1dKSx0aGlzLnhMZW5ndGgyPXAsdGhpcy55TGVuZ3RoMj1kLHRoaXMueERvbWFpbjI9Zyx0aGlzLnlEb21haW4yPXY7dmFyIGs9dGhpcy54T2Zmc2V0Mj1uLmwrbi53KmdbMF0sVD10aGlzLnlPZmZzZXQyPW4udCtuLmgqKDEtdlsxXSksTT10aGlzLnJhZGl1cz1wL3gsQT10aGlzLmlubmVyUmFkaXVzPWUuaG9sZSpNLFM9dGhpcy5jeD1rLU0qeVswXSxDPXRoaXMuY3k9VCtNKnlbM10sUD10aGlzLmN4eD1TLWssTz10aGlzLmN5eT1DLVQ7dGhpcy5yYWRpYWxBeGlzPXRoaXMubW9ja0F4aXModCxlLGEse19pZDoieCIsc2lkZTp7Y291bnRlcmNsb2Nrd2lzZToidG9wIixjbG9ja3dpc2U6ImJvdHRvbSJ9W2Euc2lkZV0sZG9tYWluOltBL24udyxNL24ud119KSx0aGlzLmFuZ3VsYXJBeGlzPXRoaXMubW9ja0F4aXModCxlLGkse3NpZGU6InJpZ2h0Iixkb21haW46WzAsTWF0aC5QSV0sYXV0b3JhbmdlOiExfSksdGhpcy5kb0F1dG9SYW5nZSh0LGUpLHRoaXMudXBkYXRlQW5ndWxhckF4aXModCxlKSx0aGlzLnVwZGF0ZVJhZGlhbEF4aXModCxlKSx0aGlzLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZSh0LGUpLHRoaXMueGF4aXM9dGhpcy5tb2NrQ2FydGVzaWFuQXhpcyh0LGUse19pZDoieCIsZG9tYWluOmd9KSx0aGlzLnlheGlzPXRoaXMubW9ja0NhcnRlc2lhbkF4aXModCxlLHtfaWQ6InkiLGRvbWFpbjp2fSk7dmFyIHo9dGhpcy5wYXRoU3VicGxvdCgpO3RoaXMuY2xpcFBhdGhzLmZvclRyYWNlcy5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIix6KS5hdHRyKCJ0cmFuc2Zvcm0iLFIoUCxPKSksci5mcm9udHBsb3QuYXR0cigidHJhbnNmb3JtIixSKGssVCkpLmNhbGwobC5zZXRDbGlwVXJsLHRoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT9udWxsOnRoaXMuY2xpcElkcy5mb3JUcmFjZXMsdGhpcy5nZCksci5iZy5hdHRyKCJkIix6KS5hdHRyKCJ0cmFuc2Zvcm0iLFIoUyxDKSkuY2FsbChzLmZpbGwsZS5iZ2NvbG9yKX0sTy5tb2NrQXhpcz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT1vLmV4dGVuZEZsYXQoe30scixuKTtyZXR1cm4gZihhLGUsdCksYX0sTy5tb2NrQ2FydGVzaWFuQXhpcz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxhPXIuX2lkLGk9by5leHRlbmRGbGF0KHt0eXBlOiJsaW5lYXIifSxyKTtoKGksdCk7dmFyIHM9e3g6WzAsMl0seTpbMSwzXX07cmV0dXJuIGkuc2V0UmFuZ2U9ZnVuY3Rpb24oKXt2YXIgdD1uLnNlY3RvckJCb3gscj1zW2FdLG89bi5yYWRpYWxBeGlzLl9ybCxsPShvWzFdLW9bMF0pLygxLWUuaG9sZSk7aS5yYW5nZT1bdFtyWzBdXSpsLHRbclsxXV0qbF19LGkuaXNQdFdpdGhpblJhbmdlPSJ4Ij09PWE/ZnVuY3Rpb24odCl7cmV0dXJuIG4uaXNQdEluc2lkZSh0KX06ZnVuY3Rpb24oKXtyZXR1cm4hMH0saS5zZXRSYW5nZSgpLGkuc2V0U2NhbGUoKSxpfSxPLmRvQXV0b1JhbmdlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nZCxuPXRoaXMucmFkaWFsQXhpcyxhPWUucmFkaWFsYXhpcztuLnNldFNjYWxlKCkscChyLG4pO3ZhciBpPW4ucmFuZ2U7YS5yYW5nZT1pLnNsaWNlKCksYS5faW5wdXQucmFuZ2U9aS5zbGljZSgpLG4uX3JsPVtuLnIybChpWzBdLG51bGwsImdyZWdvcmlhbiIpLG4ucjJsKGlbMV0sbnVsbCwiZ3JlZ29yaWFuIildfSxPLnVwZGF0ZVJhZGlhbEF4aXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5nZCxhPXIubGF5ZXJzLGk9ci5yYWRpdXMsbD1yLmlubmVyUmFkaXVzLGM9ci5jeCxoPXIuY3ksZj1lLnJhZGlhbGF4aXMscD1FKGUuc2VjdG9yWzBdLDM2MCksZD1yLnJhZGlhbEF4aXMsZz1sPGk7ci5maWxsVmlld0luaXRpYWxLZXkoInJhZGlhbGF4aXMuYW5nbGUiLGYuYW5nbGUpLHIuZmlsbFZpZXdJbml0aWFsS2V5KCJyYWRpYWxheGlzLnJhbmdlIixkLnJhbmdlLnNsaWNlKCkpLGQuc2V0R2VvbWV0cnkoKSwiYXV0byI9PT1kLnRpY2thbmdsZSYmcD45MCYmcDw9MjcwJiYoZC50aWNrYW5nbGU9MTgwKTt2YXIgdj1mdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrKGQubDJwKHQueCkrbCkrIiwwKSJ9LG09eihmKTtpZihyLnJhZGlhbFRpY2tMYXlvdXQhPT1tJiYoYVsicmFkaWFsLWF4aXMiXS5zZWxlY3RBbGwoIi54dGljayIpLnJlbW92ZSgpLHIucmFkaWFsVGlja0xheW91dD1tKSxnKXtkLnNldFNjYWxlKCk7dmFyIHk9dS5jYWxjVGlja3MoZCkseD11LmNsaXBFbmRzKGQseSksYj11LmdldFRpY2tTaWducyhkKVsyXTt1LmRyYXdUaWNrcyhuLGQse3ZhbHM6eSxsYXllcjphWyJyYWRpYWwtYXhpcyJdLHBhdGg6dS5tYWtlVGlja1BhdGgoZCwwLGIpLHRyYW5zRm46dixjcmlzcDohMX0pLHUuZHJhd0dyaWQobixkLHt2YWxzOngsbGF5ZXI6YVsicmFkaWFsLWdyaWQiXSxwYXRoOmZ1bmN0aW9uKHQpe3JldHVybiByLnBhdGhBcmMoZC5yMnAodC54KStsKX0sdHJhbnNGbjpvLm5vb3AsY3Jpc3A6ITF9KSx1LmRyYXdMYWJlbHMobixkLHt2YWxzOnksbGF5ZXI6YVsicmFkaWFsLWF4aXMiXSx0cmFuc0ZuOnYsbGFiZWxGbnM6dS5tYWtlTGFiZWxGbnMoZCwwKX0pfXZhciBfPXIucmFkaWFsQXhpc0FuZ2xlPXIudmFuZ2xlcz9DKEkoTChmLmFuZ2xlKSxyLnZhbmdsZXMpKTpmLmFuZ2xlLHc9UihjLGgpLGs9dytGKC1fKTtEKGFbInJhZGlhbC1heGlzIl0sZyYmKGYuc2hvd3RpY2tsYWJlbHN8fGYudGlja3MpLHt0cmFuc2Zvcm06a30pLEQoYVsicmFkaWFsLWdyaWQiXSxnJiZmLnNob3dncmlkLHt0cmFuc2Zvcm06d30pLEQoYVsicmFkaWFsLWxpbmUiXS5zZWxlY3QoImxpbmUiKSxnJiZmLnNob3dsaW5lLHt4MTpsLHkxOjAseDI6aSx5MjowLHRyYW5zZm9ybTprfSkuYXR0cigic3Ryb2tlLXdpZHRoIixmLmxpbmV3aWR0aCkuY2FsbChzLnN0cm9rZSxmLmxpbmVjb2xvcil9LE8udXBkYXRlUmFkaWFsQXhpc1RpdGxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmdkLGE9dGhpcy5yYWRpdXMsaT10aGlzLmN4LG89dGhpcy5jeSxzPWUucmFkaWFsYXhpcyxjPXRoaXMuaWQrInRpdGxlIix1PXZvaWQgMCE9PXI/cjp0aGlzLnJhZGlhbEF4aXNBbmdsZSxoPUwodSksZj1NYXRoLmNvcyhoKSxwPU1hdGguc2luKGgpLGQ9MDtpZihzLnRpdGxlKXt2YXIgZz1sLmJCb3godGhpcy5sYXllcnNbInJhZGlhbC1heGlzIl0ubm9kZSgpKS5oZWlnaHQsdj1zLnRpdGxlLmZvbnQuc2l6ZTtkPSJjb3VudGVyY2xvY2t3aXNlIj09PXMuc2lkZT8tZy0uNCp2OmcrLjgqdn10aGlzLmxheWVyc1sicmFkaWFsLWF4aXMtdGl0bGUiXT1tLmRyYXcobixjLHtwcm9wQ29udGFpbmVyOnMscHJvcE5hbWU6dGhpcy5pZCsiLnJhZGlhbGF4aXMudGl0bGUiLHBsYWNlaG9sZGVyOlMobiwiQ2xpY2sgdG8gZW50ZXIgcmFkaWFsIGF4aXMgdGl0bGUiKSxhdHRyaWJ1dGVzOnt4OmkrYS8yKmYrZCpwLHk6by1hLzIqcCtkKmYsInRleHQtYW5jaG9yIjoibWlkZGxlIn0sdHJhbnNmb3JtOntyb3RhdGU6LXV9fSl9LE8udXBkYXRlQW5ndWxhckF4aXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5nZCxhPXIubGF5ZXJzLGk9ci5yYWRpdXMsbD1yLmlubmVyUmFkaXVzLGM9ci5jeCxoPXIuY3ksZj1lLmFuZ3VsYXJheGlzLHA9ci5hbmd1bGFyQXhpcztyLmZpbGxWaWV3SW5pdGlhbEtleSgiYW5ndWxhcmF4aXMucm90YXRpb24iLGYucm90YXRpb24pLHAuc2V0R2VvbWV0cnkoKSxwLnNldFNjYWxlKCk7dmFyIGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHAudDJnKHQueCl9OyJsaW5lYXIiPT09cC50eXBlJiYicmFkaWFucyI9PT1wLnRoZXRhdW5pdCYmKHAudGljazA9QyhwLnRpY2swKSxwLmR0aWNrPUMocC5kdGljaykpO3ZhciBnPWZ1bmN0aW9uKHQpe3JldHVybiBSKGMraSpNYXRoLmNvcyh0KSxoLWkqTWF0aC5zaW4odCkpfSx2PXUubWFrZUxhYmVsRm5zKHAsMCkubGFiZWxTdGFuZG9mZixtPXt4Rm46ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KTtyZXR1cm4gTWF0aC5jb3MoZSkqdn0seUZuOmZ1bmN0aW9uKHQpe3ZhciBlPWQodCkscj1NYXRoLnNpbihlKT4wPy4yOjE7cmV0dXJuLU1hdGguc2luKGUpKih2K3QuZm9udFNpemUqcikrTWF0aC5hYnMoTWF0aC5jb3MoZSkpKih0LmZvbnRTaXplKlQpfSxhbmNob3JGbjpmdW5jdGlvbih0KXt2YXIgZT1kKHQpLHI9TWF0aC5jb3MoZSk7cmV0dXJuIE1hdGguYWJzKHIpPC4xPyJtaWRkbGUiOnI+MD8ic3RhcnQiOiJlbmQifSxoZWlnaHRGbjpmdW5jdGlvbih0LGUscil7dmFyIG49ZCh0KTtyZXR1cm4tLjUqKDErTWF0aC5zaW4obikpKnJ9fSx5PXooZik7ci5hbmd1bGFyVGlja0xheW91dCE9PXkmJihhWyJhbmd1bGFyLWF4aXMiXS5zZWxlY3RBbGwoIi4iK3AuX2lkKyJ0aWNrIikucmVtb3ZlKCksci5hbmd1bGFyVGlja0xheW91dD15KTt2YXIgeCxiPXUuY2FsY1RpY2tzKHApO2lmKCJsaW5lYXIiPT09ZS5ncmlkc2hhcGU/KHg9Yi5tYXAoZCksby5hbmdsZURlbHRhKHhbMF0seFsxXSk8MCYmKHg9eC5zbGljZSgpLnJldmVyc2UoKSkpOng9bnVsbCxyLnZhbmdsZXM9eCwiY2F0ZWdvcnkiPT09cC50eXBlJiYoYj1iLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gby5pc0FuZ2xlSW5zaWRlU2VjdG9yKGQodCksci5zZWN0b3JJblJhZCl9KSkscC52aXNpYmxlKXt2YXIgXz0iaW5zaWRlIj09PXAudGlja3M/LTE6MSx3PShwLmxpbmV3aWR0aHx8MSkvMjt1LmRyYXdUaWNrcyhuLHAse3ZhbHM6YixsYXllcjphWyJhbmd1bGFyLWF4aXMiXSxwYXRoOiJNIitfKncrIiwwaCIrXypwLnRpY2tsZW4sdHJhbnNGbjpmdW5jdGlvbih0KXt2YXIgZT1kKHQpO3JldHVybiBnKGUpK0YoLUMoZSkpfSxjcmlzcDohMX0pLHUuZHJhd0dyaWQobixwLHt2YWxzOmIsbGF5ZXI6YVsiYW5ndWxhci1ncmlkIl0scGF0aDpmdW5jdGlvbih0KXt2YXIgZT1kKHQpLHI9TWF0aC5jb3MoZSksbj1NYXRoLnNpbihlKTtyZXR1cm4iTSIrW2MrbCpyLGgtbCpuXSsiTCIrW2MraSpyLGgtaSpuXX0sdHJhbnNGbjpvLm5vb3AsY3Jpc3A6ITF9KSx1LmRyYXdMYWJlbHMobixwLHt2YWxzOmIsbGF5ZXI6YVsiYW5ndWxhci1heGlzIl0scmVwb3NpdGlvbk9uVXBkYXRlOiEwLHRyYW5zRm46ZnVuY3Rpb24odCl7cmV0dXJuIGcoZCh0KSl9LGxhYmVsRm5zOm19KX1EKGFbImFuZ3VsYXItbGluZSJdLnNlbGVjdCgicGF0aCIpLGYuc2hvd2xpbmUse2Q6ci5wYXRoU3VicGxvdCgpLHRyYW5zZm9ybTpSKGMsaCl9KS5hdHRyKCJzdHJva2Utd2lkdGgiLGYubGluZXdpZHRoKS5jYWxsKHMuc3Ryb2tlLGYubGluZWNvbG9yKX0sTy51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3RoaXMuZ2QuX2NvbnRleHQuc3RhdGljUGxvdHx8KHRoaXMudXBkYXRlQW5ndWxhckRyYWcodCksdGhpcy51cGRhdGVSYWRpYWxEcmFnKHQsZSwwKSx0aGlzLnVwZGF0ZVJhZGlhbERyYWcodCxlLDEpLHRoaXMudXBkYXRlTWFpbkRyYWcodCkpfSxPLnVwZGF0ZU1haW5EcmFnPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmdkLG89ZS5sYXllcnMscz10Ll96b29tbGF5ZXIsbD1NLk1JTlpPT00sYz1NLk9GRkVER0UsdT1lLnJhZGl1cyxoPWUuaW5uZXJSYWRpdXMsZj1lLmN4LHA9ZS5jeSxtPWUuY3h4LF89ZS5jeXksdz1lLnNlY3RvckluUmFkLGs9ZS52YW5nbGVzLFQ9ZS5yYWRpYWxBeGlzLFM9QS5jbGFtcFRpbnksRT1BLmZpbmRYWWF0TGVuZ3RoLEw9QS5maW5kRW5jbG9zaW5nVmVydGV4QW5nbGVzLEM9TS5jb3JuZXJIYWxmV2lkdGgsUD1NLmNvcm5lckxlbi8yLE89ZC5tYWtlRHJhZ2dlcihvLCJwYXRoIiwibWFpbmRyYWciLCJjcm9zc2hhaXIiKTtuLnNlbGVjdChPKS5hdHRyKCJkIixlLnBhdGhTdWJwbG90KCkpLmF0dHIoInRyYW5zZm9ybSIsUihmLHApKTt2YXIgeixJLEQsRixCLE4saixWLFUscT17ZWxlbWVudDpPLGdkOnIsc3VicGxvdDplLmlkLHBsb3RpbmZvOntpZDplLmlkLHhheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpc30seGF4ZXM6W2UueGF4aXNdLHlheGVzOltlLnlheGlzXX07ZnVuY3Rpb24gSCh0LGUpe3JldHVybiBNYXRoLnNxcnQodCp0K2UqZSl9ZnVuY3Rpb24gRyh0LGUpe3JldHVybiBIKHQtbSxlLV8pfWZ1bmN0aW9uIFkodCxlKXtyZXR1cm4gTWF0aC5hdGFuMihfLWUsdC1tKX1mdW5jdGlvbiBXKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksdCpNYXRoLnNpbigtZSldfWZ1bmN0aW9uIFgodCxyKXtpZigwPT09dClyZXR1cm4gZS5wYXRoU2VjdG9yKDIqQyk7dmFyIG49UC90LGE9ci1uLGk9cituLG89TWF0aC5tYXgoMCxNYXRoLm1pbih0LHUpKSxzPW8tQyxsPW8rQztyZXR1cm4iTSIrVyhzLGEpKyJBIitbcyxzXSsiIDAsMCwwICIrVyhzLGkpKyJMIitXKGwsaSkrIkEiK1tsLGxdKyIgMCwwLDEgIitXKGwsYSkrIloifWZ1bmN0aW9uIFoodCxyLG4pe2lmKDA9PT10KXJldHVybiBlLnBhdGhTZWN0b3IoMipDKTt2YXIgYSxpLG89Vyh0LHIpLHM9Vyh0LG4pLGw9Uygob1swXStzWzBdKS8yKSxjPVMoKG9bMV0rc1sxXSkvMik7aWYobCYmYyl7dmFyIHU9Yy9sLGg9LTEvdSxmPUUoQyx1LGwsYyk7YT1FKFAsaCxmWzBdWzBdLGZbMF1bMV0pLGk9RShQLGgsZlsxXVswXSxmWzFdWzFdKX1lbHNle3ZhciBwLGQ7Yz8ocD1QLGQ9Qyk6KHA9QyxkPVApLGE9W1tsLXAsYy1kXSxbbCtwLGMtZF1dLGk9W1tsLXAsYytkXSxbbCtwLGMrZF1dfXJldHVybiJNIithLmpvaW4oIkwiKSsiTCIraS5yZXZlcnNlKCkuam9pbigiTCIpKyJaIn1mdW5jdGlvbiBKKHQsZSl7cmV0dXJuIGU9TWF0aC5tYXgoTWF0aC5taW4oZSx1KSxoKSx0PGM/dD0wOnUtdDxjP3Q9dTplPGM/ZT0wOnUtZTxjJiYoZT11KSxNYXRoLmFicyhlLXQpPmw/KHQ8ZT8oRD10LEY9ZSk6KEQ9ZSxGPXQpLCEwKTooRD1udWxsLEY9bnVsbCwhMSl9ZnVuY3Rpb24gSyh0LGUpe3Q9dHx8QixlPWV8fCJNMCwwWiIsVi5hdHRyKCJkIix0KSxVLmF0dHIoImQiLGUpLGQudHJhbnNpdGlvblpvb21ib3goVixVLE4saiksTj0hMDt2YXIgbj17fTtydChuKSxyLmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsbil9ZnVuY3Rpb24gUSh0LHIpe3ZhciBuLGEsaT16K3Qsbz1JK3Iscz1HKHosSSksbD1NYXRoLm1pbihHKGksbyksdSksYz1ZKHosSSk7SihzLGwpJiYobj1CK2UucGF0aFNlY3RvcihGKSxEJiYobis9ZS5wYXRoU2VjdG9yKEQpKSxhPVgoRCxjKStYKEYsYykpLEsobixhKX1mdW5jdGlvbiAkKHQsZSxyLG4pe3ZhciBhPUEuZmluZEludGVyc2VjdGlvblhZKHIsbixyLFt0LW0sXy1lXSk7cmV0dXJuIEgoYVswXSxhWzFdKX1mdW5jdGlvbiB0dCh0LHIpe3ZhciBuLGEsaT16K3Qsbz1JK3Iscz1ZKHosSSksbD1ZKGksbyksYz1MKHMsayksaD1MKGwsayk7SigkKHosSSxjWzBdLGNbMV0pLE1hdGgubWluKCQoaSxvLGhbMF0saFsxXSksdSkpJiYobj1CK2UucGF0aFNlY3RvcihGKSxEJiYobis9ZS5wYXRoU2VjdG9yKEQpKSxhPVtaKEQsY1swXSxjWzFdKSxaKEYsY1swXSxjWzFdKV0uam9pbigiICIpKSxLKG4sYSl9ZnVuY3Rpb24gZXQoKXtpZihkLnJlbW92ZVpvb21ib3gociksbnVsbCE9PUQmJm51bGwhPT1GKXt2YXIgdD17fTtydCh0KSxkLnNob3dEb3VibGVDbGlja05vdGlmaWVyKHIpLGkuY2FsbCgiX2d1aVJlbGF5b3V0IixyLHQpfX1mdW5jdGlvbiBydCh0KXt2YXIgcj1ULl9ybCxuPShyWzFdLXJbMF0pLygxLWgvdSkvdSxhPVtyWzBdKyhELWgpKm4sclswXSsoRi1oKSpuXTt0W2UuaWQrIi5yYWRpYWxheGlzLnJhbmdlIl09YX1mdW5jdGlvbiBudCh0LG4pe3ZhciBhPXIuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO2lmKGQucmVtb3ZlWm9vbWJveChyKSwyPT09dCl7dmFyIG89e307Zm9yKHZhciBzIGluIGUudmlld0luaXRpYWwpb1tlLmlkKyIuIitzXT1lLnZpZXdJbml0aWFsW3NdO3IuZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKSxpLmNhbGwoIl9ndWlSZWxheW91dCIscixvKX1hLmluZGV4T2YoInNlbGVjdCIpPi0xJiYxPT09dCYmeChuLHIsW2UueGF4aXNdLFtlLnlheGlzXSxlLmlkLHEpLGEuaW5kZXhPZigiZXZlbnQiKT4tMSYmdi5jbGljayhyLG4sZS5pZCl9cS5wcmVwRm49ZnVuY3Rpb24odCxuLGkpe3ZhciBvPXIuX2Z1bGxMYXlvdXQuZHJhZ21vZGUsbD1PLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKHo9bi1sLmxlZnQsST1pLWwudG9wLGspe3ZhciBjPUEuZmluZFBvbHlnb25PZmZzZXQodSx3WzBdLHdbMV0sayk7eis9bStjWzBdLEkrPV8rY1sxXX1zd2l0Y2gobyl7Y2FzZSJ6b29tIjpxLm1vdmVGbj1rP3R0OlEscS5jbGlja0ZuPW50LHEuZG9uZUZuPWV0LGZ1bmN0aW9uKCl7RD1udWxsLEY9bnVsbCxCPWUucGF0aFN1YnBsb3QoKSxOPSExO3ZhciB0PXIuX2Z1bGxMYXlvdXRbZS5pZF07aj1hKHQuYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksKFY9ZC5tYWtlWm9vbWJveChzLGosZixwLEIpKS5hdHRyKCJmaWxsLXJ1bGUiLCJldmVub2RkIiksVT1kLm1ha2VDb3JuZXJzKHMsZixwKSxiKHIpfSgpO2JyZWFrO2Nhc2Uic2VsZWN0IjpjYXNlImxhc3NvIjp5KHQsbixpLHEsbyl9fSxPLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHQpe3YuaG92ZXIocix0LGUuaWQpLHIuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj1PLHIuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1lLmlkfSxPLm9ubW91c2VvdXQ9ZnVuY3Rpb24odCl7ci5fZHJhZ2dpbmd8fGcudW5ob3ZlcihyLHQpfSxnLmluaXQocSl9LE8udXBkYXRlUmFkaWFsRHJhZz1mdW5jdGlvbih0LGUscil7dmFyIGE9dGhpcyxzPWEuZ2QsbD1hLmxheWVycyxjPWEucmFkaXVzLHU9YS5pbm5lclJhZGl1cyxoPWEuY3gsZj1hLmN5LHA9YS5yYWRpYWxBeGlzLHY9TS5yYWRpYWxEcmFnQm94U2l6ZSxtPXYvMjtpZihwLnZpc2libGUpe3ZhciB5LHgsXyxUPUwoYS5yYWRpYWxBeGlzQW5nbGUpLEE9cC5fcmwsUz1BWzBdLEU9QVsxXSxQPUFbcl0sTz0uNzUqKEFbMV0tQVswXSkvKDEtZS5ob2xlKS9jO3I/KHk9aCsoYyttKSpNYXRoLmNvcyhUKSx4PWYtKGMrbSkqTWF0aC5zaW4oVCksXz0icmFkaWFsZHJhZyIpOih5PWgrKHUtbSkqTWF0aC5jb3MoVCkseD1mLSh1LW0pKk1hdGguc2luKFQpLF89InJhZGlhbGRyYWctaW5uZXIiKTt2YXIgeixCLE4saj1kLm1ha2VSZWN0RHJhZ2dlcihsLF8sImNyb3NzaGFpciIsLW0sLW0sdix2KSxWPXtlbGVtZW50OmosZ2Q6c307RChuLnNlbGVjdChqKSxwLnZpc2libGUmJnU8Yyx7dHJhbnNmb3JtOlIoeSx4KX0pLFYucHJlcEZuPWZ1bmN0aW9uKCl7ej1udWxsLEI9bnVsbCxOPW51bGwsVi5tb3ZlRm49VSxWLmRvbmVGbj1xLGIocyl9LFYuY2xhbXBGbj1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLnNxcnQodCp0K2UqZSk8TS5NSU5EUkFHJiYodD0wLGU9MCksW3QsZV19LGcuaW5pdChWKX1mdW5jdGlvbiBVKHQsZSl7aWYoeil6KHQsZSk7ZWxzZXt2YXIgbj1bdCwtZV0saT1bTWF0aC5jb3MoVCksTWF0aC5zaW4oVCldLGw9TWF0aC5hYnMoby5kb3QobixpKS9NYXRoLnNxcnQoby5kb3QobixuKSkpO2lzTmFOKGwpfHwoej1sPC41P0g6Ryl9dmFyIGM9e307IWZ1bmN0aW9uKHQpe251bGwhPT1CP3RbYS5pZCsiLnJhZGlhbGF4aXMuYW5nbGUiXT1COm51bGwhPT1OJiYodFthLmlkKyIucmFkaWFsYXhpcy5yYW5nZVsiK3IrIl0iXT1OKX0oYykscy5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGMpfWZ1bmN0aW9uIHEoKXtudWxsIT09Qj9pLmNhbGwoIl9ndWlSZWxheW91dCIscyxhLmlkKyIucmFkaWFsYXhpcy5hbmdsZSIsQik6bnVsbCE9PU4mJmkuY2FsbCgiX2d1aVJlbGF5b3V0IixzLGEuaWQrIi5yYWRpYWxheGlzLnJhbmdlWyIrcisiXSIsTil9ZnVuY3Rpb24gSCh0LGUpe2lmKDAhPT1yKXt2YXIgbj15K3QsaT14K2U7Qj1NYXRoLmF0YW4yKGYtaSxuLWgpLGEudmFuZ2xlcyYmKEI9SShCLGEudmFuZ2xlcykpLEI9QyhCKTt2YXIgbz1SKGgsZikrRigtQik7bFsicmFkaWFsLWF4aXMiXS5hdHRyKCJ0cmFuc2Zvcm0iLG8pLGxbInJhZGlhbC1saW5lIl0uc2VsZWN0KCJsaW5lIikuYXR0cigidHJhbnNmb3JtIixvKTt2YXIgcz1hLmdkLl9mdWxsTGF5b3V0LGM9c1thLmlkXTthLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZShzLGMsQil9fWZ1bmN0aW9uIEcodCxlKXt2YXIgbj1vLmRvdChbdCwtZV0sW01hdGguY29zKFQpLE1hdGguc2luKFQpXSk7aWYoTj1QLU8qbixPPjA9PShyP04+UzpOPEUpKXt2YXIgbD1zLl9mdWxsTGF5b3V0LGM9bFthLmlkXTtwLnJhbmdlW3JdPU4scC5fcmxbcl09TixhLnVwZGF0ZVJhZGlhbEF4aXMobCxjKSxhLnhheGlzLnNldFJhbmdlKCksYS54YXhpcy5zZXRTY2FsZSgpLGEueWF4aXMuc2V0UmFuZ2UoKSxhLnlheGlzLnNldFNjYWxlKCk7dmFyIHU9ITE7Zm9yKHZhciBoIGluIGEudHJhY2VIYXNoKXt2YXIgZj1hLnRyYWNlSGFzaFtoXSxkPW8uZmlsdGVyVmlzaWJsZShmKTtmWzBdWzBdLnRyYWNlLl9tb2R1bGUucGxvdChzLGEsZCxjKSxpLnRyYWNlSXMoaCwiZ2wiKSYmZC5sZW5ndGgmJih1PSEwKX11JiYodyhzKSxrKHMpKX1lbHNlIE49bnVsbH19LE8udXBkYXRlQW5ndWxhckRyYWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZ2QsYT1lLmxheWVycyxzPWUucmFkaXVzLGM9ZS5hbmd1bGFyQXhpcyx1PWUuY3gsaD1lLmN5LGY9ZS5jeHgscD1lLmN5eSx2PU0uYW5ndWxhckRyYWdCb3hTaXplLG09ZC5tYWtlRHJhZ2dlcihhLCJwYXRoIiwiYW5ndWxhcmRyYWciLCJtb3ZlIikseT17ZWxlbWVudDptLGdkOnJ9O2Z1bmN0aW9uIHgodCxlKXtyZXR1cm4gTWF0aC5hdGFuMihwK3YtZSx0LWYtdil9bi5zZWxlY3QobSkuYXR0cigiZCIsZS5wYXRoQW5udWx1cyhzLHMrdikpLmF0dHIoInRyYW5zZm9ybSIsUih1LGgpKS5jYWxsKF8sIm1vdmUiKTt2YXIgVCxBLFMsRSxMLFAsTz1hLmZyb250cGxvdC5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi50cmFjZSIpLHo9Ty5zZWxlY3RBbGwoIi5wb2ludCIpLEk9Ty5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKTtmdW5jdGlvbiBEKHQscyl7dmFyIGQ9ZS5nZC5fZnVsbExheW91dCxnPWRbZS5pZF0sdj14KFQrdCxBK3MpLG09Qyh2LVApO2lmKEU9UyttLGEuZnJvbnRwbG90LmF0dHIoInRyYW5zZm9ybSIsUihlLnhPZmZzZXQyLGUueU9mZnNldDIpK0YoWy1tLGYscF0pKSxlLnZhbmdsZXMpe0w9ZS5yYWRpYWxBeGlzQW5nbGUrbTt2YXIgeT1SKHUsaCkrRigtbSksYj1SKHUsaCkrRigtTCk7YS5iZy5hdHRyKCJ0cmFuc2Zvcm0iLHkpLGFbInJhZGlhbC1ncmlkIl0uYXR0cigidHJhbnNmb3JtIix5KSxhWyJyYWRpYWwtYXhpcyJdLmF0dHIoInRyYW5zZm9ybSIsYiksYVsicmFkaWFsLWxpbmUiXS5zZWxlY3QoImxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGIpLGUudXBkYXRlUmFkaWFsQXhpc1RpdGxlKGQsZyxMKX1lbHNlIGUuY2xpcFBhdGhzLmZvclRyYWNlcy5zZWxlY3QoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLFIoZixwKStGKG0pKTt6LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPWwuZ2V0VHJhbnNsYXRlKHQpO3QuYXR0cigidHJhbnNmb3JtIixSKGUueCxlLnkpK0YoW21dKSl9KSxJLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPXQuc2VsZWN0KCJ0ZXh0Iikscj1sLmdldFRyYW5zbGF0ZSh0KTt0LmF0dHIoInRyYW5zZm9ybSIsRihbbSxlLmF0dHIoIngiKSxlLmF0dHIoInkiKV0pK1Ioci54LHIueSkpfSksYy5yb3RhdGlvbj1vLm1vZEhhbGYoRSwzNjApLGUudXBkYXRlQW5ndWxhckF4aXMoZCxnKSxlLl9oYXNDbGlwT25BeGlzRmFsc2UmJiFvLmlzRnVsbENpcmNsZShlLnNlY3RvckluUmFkKSYmTy5jYWxsKGwuaGlkZU91dHNpZGVSYW5nZVBvaW50cyxlKTt2YXIgXz0hMTtmb3IodmFyIE0gaW4gZS50cmFjZUhhc2gpaWYoaS50cmFjZUlzKE0sImdsIikpe3ZhciBEPWUudHJhY2VIYXNoW01dLE49by5maWx0ZXJWaXNpYmxlKEQpO0RbMF1bMF0udHJhY2UuX21vZHVsZS5wbG90KHIsZSxOLGcpLE4ubGVuZ3RoJiYoXz0hMCl9XyYmKHcociksayhyKSk7dmFyIGo9e307QihqKSxyLmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsail9ZnVuY3Rpb24gQih0KXt0W2UuaWQrIi5hbmd1bGFyYXhpcy5yb3RhdGlvbiJdPUUsZS52YW5nbGVzJiYodFtlLmlkKyIucmFkaWFsYXhpcy5hbmdsZSJdPUwpfWZ1bmN0aW9uIE4oKXtJLnNlbGVjdCgidGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7dmFyIHQ9e307Qih0KSxpLmNhbGwoIl9ndWlSZWxheW91dCIscix0KX15LnByZXBGbj1mdW5jdGlvbihuLGEsaSl7dmFyIG89dFtlLmlkXTtTPW8uYW5ndWxhcmF4aXMucm90YXRpb247dmFyIHM9bS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtUPWEtcy5sZWZ0LEE9aS1zLnRvcCxQPXgoVCxBKSx5Lm1vdmVGbj1ELHkuZG9uZUZuPU4sYihyKX0sZS52YW5nbGVzJiYhby5pc0Z1bGxDaXJjbGUoZS5zZWN0b3JJblJhZCkmJih5LnByZXBGbj1vLm5vb3AsXyhuLnNlbGVjdChtKSxudWxsKSksZy5pbml0KHkpfSxPLmlzUHRJbnNpZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWN0b3JJblJhZCxyPXRoaXMudmFuZ2xlcyxuPXRoaXMuYW5ndWxhckF4aXMuYzJnKHQudGhldGEpLGE9dGhpcy5yYWRpYWxBeGlzLGk9YS5jMmwodC5yKSxzPWEuX3JsO3JldHVybihyP0EuaXNQdEluc2lkZVBvbHlnb246by5pc1B0SW5zaWRlU2VjdG9yKShpLG4scyxlLHIpfSxPLnBhdGhBcmM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWN0b3JJblJhZCxyPXRoaXMudmFuZ2xlcztyZXR1cm4ocj9BLnBhdGhQb2x5Z29uOm8ucGF0aEFyYykodCxlWzBdLGVbMV0scil9LE8ucGF0aFNlY3Rvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlY3RvckluUmFkLHI9dGhpcy52YW5nbGVzO3JldHVybihyP0EucGF0aFBvbHlnb246by5wYXRoU2VjdG9yKSh0LGVbMF0sZVsxXSxyKX0sTy5wYXRoQW5udWx1cz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuc2VjdG9ySW5SYWQsbj10aGlzLnZhbmdsZXM7cmV0dXJuKG4/QS5wYXRoUG9seWdvbkFubnVsdXM6by5wYXRoQW5udWx1cykodCxlLHJbMF0sclsxXSxuKX0sTy5wYXRoU3VicGxvdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaW5uZXJSYWRpdXMsZT10aGlzLnJhZGl1cztyZXR1cm4gdD90aGlzLnBhdGhBbm51bHVzKHQsZSk6dGhpcy5wYXRoU2VjdG9yKGUpfSxPLmZpbGxWaWV3SW5pdGlhbEtleT1mdW5jdGlvbih0LGUpe3QgaW4gdGhpcy52aWV3SW5pdGlhbHx8KHRoaXMudmlld0luaXRpYWxbdF09ZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjEwLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYxMywiLi4vLi4vY29tcG9uZW50cy9meCI6NjMwLCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6Njc5LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2ODYsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiOjcwMiwiLi4vLi4vbGliL3NldGN1cnNvciI6NzM3LCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyI6NzU2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo3NjQsIi4uL2NhcnRlc2lhbi9kcmFnYm94Ijo3NzMsIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjc4MiwiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo3ODMsIi4uL3Bsb3RzIjo4MjYsIi4vY29uc3RhbnRzIjo4MjcsIi4vaGVscGVycyI6ODI4LCIuL3NldF9jb252ZXJ0Ijo4MzksZDM6MTY1LHRpbnljb2xvcjI6NTM2fV0sODM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0IiksaT1uLmRlZzJyYWQsbz1uLnJhZDJkZWc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goYSh0LHIpLHQuX2lkKXtjYXNlIngiOmNhc2UicmFkaWFsYXhpcyI6IWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fc3VicGxvdDt0LnNldEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIGU9dC5fcmxbMF0sbj10Ll9ybFsxXSxhPXIuaW5uZXJSYWRpdXMsaT0oci5yYWRpdXMtYSkvKG4tZSksbz1hL2kscz1lPm4/ZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTB9OmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wfTt0LmMyZz1mdW5jdGlvbihyKXt2YXIgbj10LmMybChyKS1lO3JldHVybihzKG4pP246MCkrb30sdC5nMmM9ZnVuY3Rpb24ocil7cmV0dXJuIHQubDJjKHIrZS1vKX0sdC5nMnA9ZnVuY3Rpb24odCl7cmV0dXJuIHQqaX0sdC5jMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZzJwKHQuYzJnKGUpKX19fSh0LGUpO2JyZWFrO2Nhc2UiYW5ndWxhcmF4aXMiOiFmdW5jdGlvbih0LGUpe3ZhciByPXQudHlwZTtpZigibGluZWFyIj09PXIpe3ZhciBhPXQuZDJjLHM9dC5jMmQ7dC5kMmM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4iZGVncmVlcyI9PT1lP2kodCk6dH0oYSh0KSxlKX0sdC5jMmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcyhmdW5jdGlvbih0LGUpe3JldHVybiJkZWdyZWVzIj09PWU/byh0KTp0fSh0LGUpKX19dC5tYWtlQ2FsY2RhdGE9ZnVuY3Rpb24oZSxhKXt2YXIgaSxvLHM9ZVthXSxsPWUuX2xlbmd0aCxjPWZ1bmN0aW9uKHIpe3JldHVybiB0LmQyYyhyLGUudGhldGF1bml0KX07aWYocyl7aWYobi5pc1R5cGVkQXJyYXkocykmJiJsaW5lYXIiPT09cil7aWYobD09PXMubGVuZ3RoKXJldHVybiBzO2lmKHMuc3ViYXJyYXkpcmV0dXJuIHMuc3ViYXJyYXkoMCxsKX1mb3IoaT1uZXcgQXJyYXkobCksbz0wO288bDtvKyspaVtvXT1jKHNbb10pfWVsc2V7dmFyIHU9YSsiMCIsaD0iZCIrYSxmPXUgaW4gZT9jKGVbdV0pOjAscD1lW2hdP2MoZVtoXSk6KHQucGVyaW9kfHwyKk1hdGguUEkpL2w7Zm9yKGk9bmV3IEFycmF5KGwpLG89MDtvPGw7bysrKWlbb109ZitvKnB9cmV0dXJuIGl9LHQuc2V0R2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgYSxzLGwsYyx1PWUuc2VjdG9yLGg9dS5tYXAoaSksZj17Y2xvY2t3aXNlOi0xLGNvdW50ZXJjbG9ja3dpc2U6MX1bdC5kaXJlY3Rpb25dLHA9aSh0LnJvdGF0aW9uKSxkPWZ1bmN0aW9uKHQpe3JldHVybiBmKnQrcH0sZz1mdW5jdGlvbih0KXtyZXR1cm4odC1wKS9mfTtzd2l0Y2gocil7Y2FzZSJsaW5lYXIiOnM9YT1uLmlkZW50aXR5LGM9aSxsPW8sdC5yYW5nZT1uLmlzRnVsbENpcmNsZShoKT9bdVswXSx1WzBdKzM2MF06aC5tYXAoZykubWFwKG8pO2JyZWFrO2Nhc2UiY2F0ZWdvcnkiOnZhciB2PXQuX2NhdGVnb3JpZXMubGVuZ3RoLG09dC5wZXJpb2Q/TWF0aC5tYXgodC5wZXJpb2Qsdik6djswPT09bSYmKG09MSkscz1jPWZ1bmN0aW9uKHQpe3JldHVybiAyKnQqTWF0aC5QSS9tfSxhPWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQqbS9NYXRoLlBJLzJ9LHQucmFuZ2U9WzAsbV19dC5jMmc9ZnVuY3Rpb24odCl7cmV0dXJuIGQocyh0KSl9LHQuZzJjPWZ1bmN0aW9uKHQpe3JldHVybiBhKGcodCkpfSx0LnQyZz1mdW5jdGlvbih0KXtyZXR1cm4gZChjKHQpKX0sdC5nMnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwoZyh0KSl9fX0odCxlKX19fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjc4M31dLDg0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxhPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxpPXQoIi4vZG9tYWluIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGwsYz1vLnR5cGUsdT1vLmF0dHJpYnV0ZXMsaD1vLmhhbmRsZURlZmF1bHRzLGY9by5wYXJ0aXRpb258fCJ4IixwPWUuX3N1YnBsb3RzW2NdLGQ9cC5sZW5ndGgsZz1kJiZwWzBdLnJlcGxhY2UoL1xkKyQvLCIiKTtmdW5jdGlvbiB2KHQsZSl7cmV0dXJuIG4uY29lcmNlKHMsbCx1LHQsZSl9Zm9yKHZhciBtPTA7bTxkO20rKyl7dmFyIHk9cFttXTtzPXRbeV0/dFt5XTp0W3ldPXt9LGw9YS5uZXdDb250YWluZXIoZSx5LGcpLHYoInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbik7dmFyIHg9e307eFtmXT1bbS9kLChtKzEpL2RdLGkobCxlLHYseCksby5pZD15LGgocyxsLHYsbyl9fX0seyIuLi9saWIiOjcxNywiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzU1LCIuL2RvbWFpbiI6NzkwfV0sODQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO1snVmFyaWFibGVzIGFyZSBpbnNlcnRlZCB1c2luZyAle3ZhcmlhYmxlfSwgZm9yIGV4YW1wbGUgInk6ICV7eX0iLicsJ051bWJlcnMgYXJlIGZvcm1hdHRlZCB1c2luZyBkMy1mb3JtYXRcJ3Mgc3ludGF4ICV7dmFyaWFibGU6ZDMtZm9ybWF0fSwgZm9yIGV4YW1wbGUgIlByaWNlOiAle3k6JC4yZn0iLicsdCgiLi4vY29uc3RhbnRzL2RvY3MiKS5GT1JNQVRfTElOSywiZm9yIGRldGFpbHMgb24gdGhlIGZvcm1hdHRpbmcgc3ludGF4LiIsJ0RhdGVzIGFyZSBmb3JtYXR0ZWQgdXNpbmcgZDMtdGltZS1mb3JtYXRcJ3Mgc3ludGF4ICV7dmFyaWFibGV8ZDMtdGltZS1mb3JtYXR9LCBmb3IgZXhhbXBsZSAiRGF5OiAlezIwMTktMDEtMDF8JUF9Ii4nLHQoIi4uL2NvbnN0YW50cy9kb2NzIikuREFURV9GT1JNQVRfTElOSywiZm9yIGRldGFpbHMgb24gdGhlIGRhdGUgZm9ybWF0dGluZyBzeW50YXguIl0uam9pbigiICIpO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5kZXNjcmlwdGlvbj8iICIrdC5kZXNjcmlwdGlvbjoiIixyPXQua2V5c3x8W107aWYoci5sZW5ndGg+MCl7Zm9yKHZhciBuPVtdLGE9MDthPHIubGVuZ3RoO2ErKyluW2FdPSJgIityW2FdKyJgIjtlKz0iRmluYWxseSwgdGhlIHRlbXBsYXRlIHN0cmluZyBoYXMgYWNjZXNzIHRvICIsZT0xPT09ci5sZW5ndGg/InZhcmlhYmxlICIrblswXToidmFyaWFibGVzICIrbi5zbGljZSgwLC0xKS5qb2luKCIsICIpKyIgYW5kICIrbi5zbGljZSgtMSkrIi4ifXJldHVybiBlfXIuaG92ZXJ0ZW1wbGF0ZUF0dHJzPWZ1bmN0aW9uKHQsZSl7dD10fHx7fTtuKGU9ZXx8e30pO3ZhciByPXt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6dC5lZGl0VHlwZXx8Im5vbmUifTtyZXR1cm4hMSE9PXQuYXJyYXlPayYmKHIuYXJyYXlPaz0hMCkscn0sci50ZXh0dGVtcGxhdGVBdHRycz1mdW5jdGlvbih0LGUpe3Q9dHx8e307bihlPWV8fHt9KTt2YXIgcj17dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOnQuZWRpdFR5cGV8fCJjYWxjIn07cmV0dXJuITEhPT10LmFycmF5T2smJihyLmFycmF5T2s9ITApLHJ9fSx7Ii4uL2NvbnN0YW50cy9kb2NzIjo2ODh9XSw4NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi90ZXJuYXJ5IiksYT10KCIuLi8uLi9wbG90cy9nZXRfZGF0YSIpLmdldFN1YnBsb3RDYWxjRGF0YSxpPXQoIi4uLy4uL2xpYiIpLmNvdW50ZXJSZWdleDtyLm5hbWU9InRlcm5hcnkiO3ZhciBvPXIuYXR0cj0ic3VicGxvdCI7ci5pZFJvb3Q9InRlcm5hcnkiLHIuaWRSZWdleD1yLmF0dHJSZWdleD1pKCJ0ZXJuYXJ5IiksKHIuYXR0cmlidXRlcz17fSlbb109e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoidGVybmFyeSIsZWRpdFR5cGU6ImNhbGMifSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10LmNhbGNkYXRhLGk9ZS5fc3VicGxvdHMudGVybmFyeSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb10sbD1hKHIsInRlcm5hcnkiLHMpLGM9ZVtzXS5fc3VicGxvdDtjfHwoYz1uZXcgbih7aWQ6cyxncmFwaERpdjp0LGNvbnRhaW5lcjplLl90ZXJuYXJ5bGF5ZXIubm9kZSgpfSxlKSxlW3NdLl9zdWJwbG90PWMpLGMucGxvdChsLGUsdC5fcHJvbWlzZXMpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGE9bi5fc3VicGxvdHMudGVybmFyeXx8W10saT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgbz1hW2ldLHM9bltvXS5fc3VicGxvdDshZVtvXSYmcyYmKHMucGxvdENvbnRhaW5lci5yZW1vdmUoKSxzLmNsaXBEZWYucmVtb3ZlKCkscy5jbGlwRGVmUmVsYXRpdmUucmVtb3ZlKCkscy5sYXllcnNbImEtdGl0bGUiXS5yZW1vdmUoKSxzLmxheWVyc1siYi10aXRsZSJdLnJlbW92ZSgpLHMubGF5ZXJzWyJjLXRpdGxlIl0ucmVtb3ZlKCkpfX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4MDAsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0MywiLi9sYXlvdXRfZGVmYXVsdHMiOjg0NCwiLi90ZXJuYXJ5Ijo4NDV9XSw4NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi9kb21haW4iKS5hdHRyaWJ1dGVzLGk9dCgiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPXt0aXRsZTp7dGV4dDppLnRpdGxlLnRleHQsZm9udDppLnRpdGxlLmZvbnR9LGNvbG9yOmkuY29sb3IsdGlja21vZGU6aS50aWNrbW9kZSxudGlja3M6cyh7fSxpLm50aWNrcyx7ZGZsdDo2LG1pbjoxfSksdGljazA6aS50aWNrMCxkdGljazppLmR0aWNrLHRpY2t2YWxzOmkudGlja3ZhbHMsdGlja3RleHQ6aS50aWNrdGV4dCx0aWNrczppLnRpY2tzLHRpY2tsZW46aS50aWNrbGVuLHRpY2t3aWR0aDppLnRpY2t3aWR0aCx0aWNrY29sb3I6aS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6aS5zaG93dGlja2xhYmVscyxzaG93dGlja3ByZWZpeDppLnNob3d0aWNrcHJlZml4LHRpY2twcmVmaXg6aS50aWNrcHJlZml4LHNob3d0aWNrc3VmZml4Omkuc2hvd3RpY2tzdWZmaXgsdGlja3N1ZmZpeDppLnRpY2tzdWZmaXgsc2hvd2V4cG9uZW50Omkuc2hvd2V4cG9uZW50LGV4cG9uZW50Zm9ybWF0OmkuZXhwb25lbnRmb3JtYXQsc2VwYXJhdGV0aG91c2FuZHM6aS5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrZm9ybWF0OmkudGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6aS50aWNrZm9ybWF0c3RvcHMsaG92ZXJmb3JtYXQ6aS5ob3ZlcmZvcm1hdCxzaG93bGluZTpzKHt9LGkuc2hvd2xpbmUse2RmbHQ6ITB9KSxsaW5lY29sb3I6aS5saW5lY29sb3IsbGluZXdpZHRoOmkubGluZXdpZHRoLHNob3dncmlkOnMoe30saS5zaG93Z3JpZCx7ZGZsdDohMH0pLGdyaWRjb2xvcjppLmdyaWRjb2xvcixncmlkd2lkdGg6aS5ncmlkd2lkdGgsbGF5ZXI6aS5sYXllcixtaW46e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowfSxfZGVwcmVjYXRlZDp7dGl0bGU6aS5fZGVwcmVjYXRlZC50aXRsZSx0aXRsZWZvbnQ6aS5fZGVwcmVjYXRlZC50aXRsZWZvbnR9fSxjPWUuZXhwb3J0cz1vKHtkb21haW46YSh7bmFtZToidGVybmFyeSJ9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmR9LHN1bTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsbWluOjB9LGFheGlzOmwsYmF4aXM6bCxjYXhpczpsfSwicGxvdCIsImZyb20tcm9vdCIpO2MudWlyZXZpc2lvbj17dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGMuYWF4aXMudWlyZXZpc2lvbj1jLmJheGlzLnVpcmV2aXNpb249Yy5jYXhpcy51aXJldmlzaW9uPXt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo1OTEsIi4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzQ4LCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3NywiLi4vZG9tYWluIjo3OTB9XSw4NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGk9dCgiLi4vLi4vbGliIiksbz10KCIuLi9zdWJwbG90X2RlZmF1bHRzIikscz10KCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGw9dCgiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyIpLGM9dCgiLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSx1PXQoIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHMiKSxoPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxmPVsiYWF4aXMiLCJiYXhpcyIsImNheGlzIl07ZnVuY3Rpb24gcCh0LGUscixpKXt2YXIgbyxzLGwsYz1yKCJiZ2NvbG9yIiksdT1yKCJzdW0iKTtpLmJnQ29sb3I9bi5jb21iaW5lKGMsaS5wYXBlcl9iZ2NvbG9yKTtmb3IodmFyIGg9MDtoPGYubGVuZ3RoO2grKylzPXRbbz1mW2hdXXx8e30sKGw9YS5uZXdDb250YWluZXIoZSxvKSkuX25hbWU9byxkKHMsbCxpLGUpO3ZhciBwPWUuYWF4aXMsZz1lLmJheGlzLHY9ZS5jYXhpcztwLm1pbitnLm1pbit2Lm1pbj49dSYmKHAubWluPTAsZy5taW49MCx2Lm1pbj0wLHQuYWF4aXMmJmRlbGV0ZSB0LmFheGlzLm1pbix0LmJheGlzJiZkZWxldGUgdC5iYXhpcy5taW4sdC5jYXhpcyYmZGVsZXRlIHQuY2F4aXMubWluKX1mdW5jdGlvbiBkKHQsZSxyLG4pe3ZhciBhPWhbZS5fbmFtZV07ZnVuY3Rpb24gbyhyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYSxyLG4pfW8oInVpcmV2aXNpb24iLG4udWlyZXZpc2lvbiksZS50eXBlPSJsaW5lYXIiO3ZhciBmPW8oImNvbG9yIikscD1mIT09YS5jb2xvci5kZmx0P2Y6ci5mb250LmNvbG9yLGQ9ZS5fbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSxnPSJDb21wb25lbnQgIitkLHY9bygidGl0bGUudGV4dCIsZyk7ZS5faG92ZXJ0aXRsZT12PT09Zz92OmQsaS5jb2VyY2VGb250KG8sInRpdGxlLmZvbnQiLHtmYW1pbHk6ci5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQoMS4yKnIuZm9udC5zaXplKSxjb2xvcjpwfSksbygibWluIiksYyh0LGUsbywibGluZWFyIikscyh0LGUsbywibGluZWFyIix7fSksbCh0LGUsbyx7b3V0ZXJUaWNrczohMH0pLG8oInNob3d0aWNrbGFiZWxzIikmJihpLmNvZXJjZUZvbnQobywidGlja2ZvbnQiLHtmYW1pbHk6ci5mb250LmZhbWlseSxzaXplOnIuZm9udC5zaXplLGNvbG9yOnB9KSxvKCJ0aWNrYW5nbGUiKSxvKCJ0aWNrZm9ybWF0IikpLHUodCxlLG8se2RmbHRDb2xvcjpmLGJnQ29sb3I6ci5iZ0NvbG9yLGJsZW5kOjYwLHNob3dMaW5lOiEwLHNob3dHcmlkOiEwLG5vWmVyb0xpbmU6ITAsYXR0cmlidXRlczphfSksbygiaG92ZXJmb3JtYXQiKSxvKCJsYXllciIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7byh0LGUscix7dHlwZToidGVybmFyeSIsYXR0cmlidXRlczpoLGhhbmRsZURlZmF1bHRzOnAsZm9udDplLmZvbnQscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3J9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzU1LCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIjo3NzksIi4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo3ODQsIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjc4NSwiLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjc4NiwiLi4vc3VicGxvdF9kZWZhdWx0cyI6ODQwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDN9XSw4NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoInRpbnljb2xvcjIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9saWIiKSxzPW8uXyxsPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHU9dCgiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0IiksaD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxmPXQoIi4uL3Bsb3RzIikscD10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLGQ9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLGc9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLHY9dCgiLi4vLi4vY29tcG9uZW50cy90aXRsZXMiKSxtPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5wcmVwU2VsZWN0LHk9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnNlbGVjdE9uQ2xpY2sseD10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikuY2xlYXJTZWxlY3QsYj10KCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIik7ZnVuY3Rpb24gXyh0LGUpe3RoaXMuaWQ9dC5pZCx0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXYsdGhpcy5pbml0KGUpLHRoaXMubWFrZUZyYW1ld29yayhlKSx0aGlzLmFUaWNrTGF5b3V0PW51bGwsdGhpcy5iVGlja0xheW91dD1udWxsLHRoaXMuY1RpY2tMYXlvdXQ9bnVsbH1lLmV4cG9ydHM9Xzt2YXIgdz1fLnByb3RvdHlwZTt3LmluaXQ9ZnVuY3Rpb24odCl7dGhpcy5jb250YWluZXI9dC5fdGVybmFyeWxheWVyLHRoaXMuZGVmcz10Ll9kZWZzLHRoaXMubGF5b3V0SWQ9dC5fdWlkLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJzPXt9fSx3LnBsb3Q9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdLG49ZS5fc2l6ZTt0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9ITE7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspe2lmKCExPT09dFthXVswXS50cmFjZS5jbGlwb25heGlzKXt0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U9ITA7YnJlYWt9fXRoaXMudXBkYXRlTGF5ZXJzKHIpLHRoaXMuYWRqdXN0TGF5b3V0KHIsbiksZi5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGUodGhpcy5ncmFwaERpdix0aGlzLHQsciksdGhpcy5sYXllcnMucGxvdGJnLnNlbGVjdCgicGF0aCIpLmNhbGwobC5maWxsLHIuYmdjb2xvcil9LHcubWFrZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoRGl2LHI9dFt0aGlzLmlkXSxuPXRoaXMuY2xpcElkPSJjbGlwIit0aGlzLmxheW91dElkK3RoaXMuaWQsYT10aGlzLmNsaXBJZFJlbGF0aXZlPSJjbGlwLXJlbGF0aXZlIit0aGlzLmxheW91dElkK3RoaXMuaWQ7dGhpcy5jbGlwRGVmPW8uZW5zdXJlU2luZ2xlQnlJZCh0Ll9jbGlwcywiY2xpcFBhdGgiLG4sZnVuY3Rpb24odCl7dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTAsMFoiKX0pLHRoaXMuY2xpcERlZlJlbGF0aXZlPW8uZW5zdXJlU2luZ2xlQnlJZCh0Ll9jbGlwcywiY2xpcFBhdGgiLGEsZnVuY3Rpb24odCl7dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTAsMFoiKX0pLHRoaXMucGxvdENvbnRhaW5lcj1vLmVuc3VyZVNpbmdsZSh0aGlzLmNvbnRhaW5lciwiZyIsdGhpcy5pZCksdGhpcy51cGRhdGVMYXllcnMociksYy5zZXRDbGlwVXJsKHRoaXMubGF5ZXJzLmJhY2twbG90LG4sZSksYy5zZXRDbGlwVXJsKHRoaXMubGF5ZXJzLmdyaWRzLG4sZSl9LHcudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGF5ZXJzLHI9WyJkcmFnbGF5ZXIiLCJwbG90YmciLCJiYWNrcGxvdCIsImdyaWRzIl07ImJlbG93IHRyYWNlcyI9PT10LmFheGlzLmxheWVyJiZyLnB1c2goImFheGlzIiwiYWxpbmUiKSwiYmVsb3cgdHJhY2VzIj09PXQuYmF4aXMubGF5ZXImJnIucHVzaCgiYmF4aXMiLCJibGluZSIpLCJiZWxvdyB0cmFjZXMiPT09dC5jYXhpcy5sYXllciYmci5wdXNoKCJjYXhpcyIsImNsaW5lIiksci5wdXNoKCJmcm9udHBsb3QiKSwiYWJvdmUgdHJhY2VzIj09PXQuYWF4aXMubGF5ZXImJnIucHVzaCgiYWF4aXMiLCJhbGluZSIpLCJhYm92ZSB0cmFjZXMiPT09dC5iYXhpcy5sYXllciYmci5wdXNoKCJiYXhpcyIsImJsaW5lIiksImFib3ZlIHRyYWNlcyI9PT10LmNheGlzLmxheWVyJiZyLnB1c2goImNheGlzIiwiY2xpbmUiKTt2YXIgYT10aGlzLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCJnLnRvcGxldmVsIikuZGF0YShyLFN0cmluZyksaT1bImFncmlkIiwiYmdyaWQiLCJjZ3JpZCJdO2EuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuInRvcGxldmVsICIrdH0pLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7ZVt0XT1yLCJmcm9udHBsb3QiPT09dD9yLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNjYXR0ZXJsYXllciIsITApOiJiYWNrcGxvdCI9PT10P3IuYXBwZW5kKCJnIikuY2xhc3NlZCgibWFwbGF5ZXIiLCEwKToicGxvdGJnIj09PXQ/ci5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTAsMFoiKToiYWxpbmUiPT09dHx8ImJsaW5lIj09PXR8fCJjbGluZSI9PT10P3IuYXBwZW5kKCJwYXRoIik6ImdyaWRzIj09PXQmJmkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ3JpZCAiK3QsITApfSl9KSxhLm9yZGVyKCl9O3ZhciBrPU1hdGguc3FydCg0LzMpO3cuYWRqdXN0TGF5b3V0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhLGksbyxzLGY9dGhpcyxwPXQuZG9tYWluLGQ9KHAueFswXStwLnhbMV0pLzIsZz0ocC55WzBdK3AueVsxXSkvMix2PXAueFsxXS1wLnhbMF0sbT1wLnlbMV0tcC55WzBdLHk9diplLncseD1tKmUuaCxiPXQuc3VtLF89dC5hYXhpcy5taW4sdz10LmJheGlzLm1pbixUPXQuY2F4aXMubWluO3k+ayp4P2E9KGk9eCkqazppPShhPXkpL2ssbz12KmEveSxzPW0qaS94LHI9ZS5sK2UudypkLWEvMixuPWUudCtlLmgqKDEtZyktaS8yLGYueDA9cixmLnkwPW4sZi53PWEsZi5oPWksZi5zdW09YixmLnhheGlzPXt0eXBlOiJsaW5lYXIiLHJhbmdlOltfKzIqVC1iLGItXy0yKnddLGRvbWFpbjpbZC1vLzIsZCtvLzJdLF9pZDoieCJ9LHUoZi54YXhpcyxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxmLnhheGlzLnNldFNjYWxlKCksZi54YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQuYT49Zi5hYXhpcy5yYW5nZVswXSYmdC5hPD1mLmFheGlzLnJhbmdlWzFdJiZ0LmI+PWYuYmF4aXMucmFuZ2VbMV0mJnQuYjw9Zi5iYXhpcy5yYW5nZVswXSYmdC5jPj1mLmNheGlzLnJhbmdlWzFdJiZ0LmM8PWYuY2F4aXMucmFuZ2VbMF19LGYueWF4aXM9e3R5cGU6ImxpbmVhciIscmFuZ2U6W18sYi13LVRdLGRvbWFpbjpbZy1zLzIsZytzLzJdLF9pZDoieSJ9LHUoZi55YXhpcyxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxmLnlheGlzLnNldFNjYWxlKCksZi55YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4hMH07dmFyIE09Zi55YXhpcy5kb21haW5bMF0sQT1mLmFheGlzPWgoe30sdC5hYXhpcyx7cmFuZ2U6W18sYi13LVRdLHNpZGU6ImxlZnQiLHRpY2thbmdsZTooK3QuYWF4aXMudGlja2FuZ2xlfHwwKS0zMCxkb21haW46W00sTStzKmtdLGFuY2hvcjoiZnJlZSIscG9zaXRpb246MCxfaWQ6InkiLF9sZW5ndGg6YX0pO3UoQSxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxBLnNldFNjYWxlKCk7dmFyIFM9Zi5iYXhpcz1oKHt9LHQuYmF4aXMse3JhbmdlOltiLV8tVCx3XSxzaWRlOiJib3R0b20iLGRvbWFpbjpmLnhheGlzLmRvbWFpbixhbmNob3I6ImZyZWUiLHBvc2l0aW9uOjAsX2lkOiJ4IixfbGVuZ3RoOmF9KTt1KFMsZi5ncmFwaERpdi5fZnVsbExheW91dCksUy5zZXRTY2FsZSgpO3ZhciBFPWYuY2F4aXM9aCh7fSx0LmNheGlzLHtyYW5nZTpbYi1fLXcsVF0sc2lkZToicmlnaHQiLHRpY2thbmdsZTooK3QuY2F4aXMudGlja2FuZ2xlfHwwKSszMCxkb21haW46W00sTStzKmtdLGFuY2hvcjoiZnJlZSIscG9zaXRpb246MCxfaWQ6InkiLF9sZW5ndGg6YX0pO3UoRSxmLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxFLnNldFNjYWxlKCk7dmFyIEw9Ik0iK3IrIiwiKyhuK2kpKyJoIithKyJsLSIrYS8yKyIsLSIraSsiWiI7Zi5jbGlwRGVmLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEwpLGYubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixMKTt2YXIgQz0iTTAsIitpKyJoIithKyJsLSIrYS8yKyIsLSIraSsiWiI7Zi5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsQyk7dmFyIFA9InRyYW5zbGF0ZSgiK3IrIiwiK24rIikiO2YucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoIi5zY2F0dGVybGF5ZXIsLm1hcGxheWVyIikuYXR0cigidHJhbnNmb3JtIixQKSxmLmNsaXBEZWZSZWxhdGl2ZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpO3ZhciBPPSJ0cmFuc2xhdGUoIisoci1TLl9vZmZzZXQpKyIsIisobitpKSsiKSI7Zi5sYXllcnMuYmF4aXMuYXR0cigidHJhbnNmb3JtIixPKSxmLmxheWVycy5iZ3JpZC5hdHRyKCJ0cmFuc2Zvcm0iLE8pO3ZhciB6PSJ0cmFuc2xhdGUoIisocithLzIpKyIsIituKyIpcm90YXRlKDMwKXRyYW5zbGF0ZSgwLCIrLUEuX29mZnNldCsiKSI7Zi5sYXllcnMuYWF4aXMuYXR0cigidHJhbnNmb3JtIix6KSxmLmxheWVycy5hZ3JpZC5hdHRyKCJ0cmFuc2Zvcm0iLHopO3ZhciBJPSJ0cmFuc2xhdGUoIisocithLzIpKyIsIituKyIpcm90YXRlKC0zMCl0cmFuc2xhdGUoMCwiKy1FLl9vZmZzZXQrIikiO2YubGF5ZXJzLmNheGlzLmF0dHIoInRyYW5zZm9ybSIsSSksZi5sYXllcnMuY2dyaWQuYXR0cigidHJhbnNmb3JtIixJKSxmLmRyYXdBeGVzKCEwKSxmLmxheWVycy5hbGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixBLnNob3dsaW5lPyJNIityKyIsIisobitpKSsibCIrYS8yKyIsLSIraToiTTAsMCIpLmNhbGwobC5zdHJva2UsQS5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKEEubGluZXdpZHRofHwwKSsicHgiKSxmLmxheWVycy5ibGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixTLnNob3dsaW5lPyJNIityKyIsIisobitpKSsiaCIrYToiTTAsMCIpLmNhbGwobC5zdHJva2UsUy5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKFMubGluZXdpZHRofHwwKSsicHgiKSxmLmxheWVycy5jbGluZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixFLnNob3dsaW5lPyJNIisocithLzIpKyIsIituKyJsIithLzIrIiwiK2k6Ik0wLDAiKS5jYWxsKGwuc3Ryb2tlLEUubGluZWNvbG9yfHwiIzAwMCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChFLmxpbmV3aWR0aHx8MCkrInB4IiksZi5ncmFwaERpdi5fY29udGV4dC5zdGF0aWNQbG90fHxmLmluaXRJbnRlcmFjdGlvbnMoKSxjLnNldENsaXBVcmwoZi5sYXllcnMuZnJvbnRwbG90LGYuX2hhc0NsaXBPbkF4aXNGYWxzZT9udWxsOmYuY2xpcElkLGYuZ3JhcGhEaXYpfSx3LmRyYXdBeGVzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhEaXYscj10aGlzLmlkLnN1YnN0cig3KSsidGl0bGUiLG49dGhpcy5sYXllcnMsYT10aGlzLmFheGlzLGk9dGhpcy5iYXhpcyxvPXRoaXMuY2F4aXM7aWYodGhpcy5kcmF3QXgoYSksdGhpcy5kcmF3QXgoaSksdGhpcy5kcmF3QXgobyksdCl7dmFyIGw9TWF0aC5tYXgoYS5zaG93dGlja2xhYmVscz9hLnRpY2tmb250LnNpemUvMjowLChvLnNob3d0aWNrbGFiZWxzPy43NSpvLnRpY2tmb250LnNpemU6MCkrKCJvdXRzaWRlIj09PW8udGlja3M/Ljg3Km8udGlja2xlbjowKSksYz0oaS5zaG93dGlja2xhYmVscz9pLnRpY2tmb250LnNpemU6MCkrKCJvdXRzaWRlIj09PWkudGlja3M/aS50aWNrbGVuOjApKzM7blsiYS10aXRsZSJdPXYuZHJhdyhlLCJhIityLHtwcm9wQ29udGFpbmVyOmEscHJvcE5hbWU6dGhpcy5pZCsiLmFheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpzKGUsIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBBIHRpdGxlIiksYXR0cmlidXRlczp7eDp0aGlzLngwK3RoaXMudy8yLHk6dGhpcy55MC1hLnRpdGxlLmZvbnQuc2l6ZS8zLWwsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KSxuWyJiLXRpdGxlIl09di5kcmF3KGUsImIiK3Ise3Byb3BDb250YWluZXI6aSxwcm9wTmFtZTp0aGlzLmlkKyIuYmF4aXMudGl0bGUiLHBsYWNlaG9sZGVyOnMoZSwiQ2xpY2sgdG8gZW50ZXIgQ29tcG9uZW50IEIgdGl0bGUiKSxhdHRyaWJ1dGVzOnt4OnRoaXMueDAtYyx5OnRoaXMueTArdGhpcy5oKy44MyppLnRpdGxlLmZvbnQuc2l6ZStjLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSksblsiYy10aXRsZSJdPXYuZHJhdyhlLCJjIityLHtwcm9wQ29udGFpbmVyOm8scHJvcE5hbWU6dGhpcy5pZCsiLmNheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpzKGUsIkNsaWNrIHRvIGVudGVyIENvbXBvbmVudCBDIHRpdGxlIiksYXR0cmlidXRlczp7eDp0aGlzLngwK3RoaXMudytjLHk6dGhpcy55MCt0aGlzLmgrLjgzKm8udGl0bGUuZm9udC5zaXplK2MsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KX19LHcuZHJhd0F4PWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5ncmFwaERpdixuPXQuX25hbWUsYT1uLmNoYXJBdCgwKSxpPXQuX2lkLHM9dGhpcy5sYXllcnNbbl0sbD1hKyJ0aWNrTGF5b3V0IixjPShlPXQpLnRpY2tzK1N0cmluZyhlLnRpY2tsZW4pK1N0cmluZyhlLnNob3d0aWNrbGFiZWxzKTt0aGlzW2xdIT09YyYmKHMuc2VsZWN0QWxsKCIuIitpKyJ0aWNrIikucmVtb3ZlKCksdGhpc1tsXT1jKSx0LnNldFNjYWxlKCk7dmFyIHU9cC5jYWxjVGlja3ModCksaD1wLmNsaXBFbmRzKHQsdSksZj1wLm1ha2VUcmFuc0ZuKHQpLGQ9cC5nZXRUaWNrU2lnbnModClbMl0sZz1vLmRlZzJyYWQoMzApLHY9ZCoodC5saW5ld2lkdGh8fDEpLzIsbT1kKnQudGlja2xlbix5PXRoaXMudyx4PXRoaXMuaCxiPSJiIj09PWE/Ik0wLCIrdisibCIrTWF0aC5zaW4oZykqbSsiLCIrTWF0aC5jb3MoZykqbToiTSIrdisiLDBsIitNYXRoLmNvcyhnKSptKyIsIistTWF0aC5zaW4oZykqbSxfPXthOiJNMCwwbCIreCsiLC0iK3kvMixiOiJNMCwwbC0iK3kvMisiLC0iK3gsYzoiTTAsMGwtIit4KyIsIit5LzJ9W2FdO3AuZHJhd1RpY2tzKHIsdCx7dmFsczoiaW5zaWRlIj09PXQudGlja3M/aDp1LGxheWVyOnMscGF0aDpiLHRyYW5zRm46ZixjcmlzcDohMX0pLHAuZHJhd0dyaWQocix0LHt2YWxzOmgsbGF5ZXI6dGhpcy5sYXllcnNbYSsiZ3JpZCJdLHBhdGg6Xyx0cmFuc0ZuOmYsY3Jpc3A6ITF9KSxwLmRyYXdMYWJlbHMocix0LHt2YWxzOnUsbGF5ZXI6cyx0cmFuc0ZuOmYsbGFiZWxGbnM6cC5tYWtlTGFiZWxGbnModCwwLDMwKX0pfTt2YXIgVD1iLk1JTlpPT00vMisuODcsTT0ibS0wLjg3LC41aCIrVCsidjNoLSIrKFQrNS4yKSsibCIrKFQvMisyLjYpKyIsLSIrKC44NypUKzQuNSkrImwyLjYsMS41bC0iK1QvMisiLCIrLjg3KlQrIloiLEE9Im0wLjg3LC41aC0iK1QrInYzaCIrKFQrNS4yKSsibC0iKyhULzIrMi42KSsiLC0iKyguODcqVCs0LjUpKyJsLTIuNiwxLjVsIitULzIrIiwiKy44NypUKyJaIixTPSJtMCwxbCIrVC8yKyIsIisuODcqVCsibDIuNiwtMS41bC0iKyhULzIrMi42KSsiLC0iKyguODcqVCs0LjUpKyJsLSIrKFQvMisyLjYpKyIsIisoLjg3KlQrNC41KSsibDIuNiwxLjVsIitULzIrIiwtIisuODcqVCsiWiIsRT0ibTAuNSwwLjVoNXYtMmgtNXYtNWgtMnY1aC01djJoNXY1aDJaIixMPSEwO2Z1bmN0aW9uIEModCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuem9vbWJveCwuanMtem9vbWJveC1iYWNrZHJvcCwuanMtem9vbWJveC1tZW51LC56b29tYm94LWNvcm5lcnMiKS5yZW1vdmUoKX13LmluaXRJbnRlcmFjdGlvbnM9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbix1LGgsZixwLHYsXyx3PXRoaXMsVD13LmxheWVycy5wbG90Ymcuc2VsZWN0KCJwYXRoIikubm9kZSgpLFA9dy5ncmFwaERpdixPPVAuX2Z1bGxMYXlvdXQuX3pvb21sYXllcix6PXtlbGVtZW50OlQsZ2Q6UCxwbG90aW5mbzp7aWQ6dy5pZCx4YXhpczp3LnhheGlzLHlheGlzOncueWF4aXN9LHN1YnBsb3Q6dy5pZCxwcmVwRm46ZnVuY3Rpb24oaSxvLHMpe3oueGF4ZXM9W3cueGF4aXNdLHoueWF4ZXM9W3cueWF4aXNdO3ZhciBjPVAuX2Z1bGxMYXlvdXQuZHJhZ21vZGU7ei5taW5EcmFnPSJsYXNzbyI9PT1jPzE6dm9pZCAwLCJ6b29tIj09PWM/KHoubW92ZUZuPU4sei5jbGlja0ZuPUQsei5kb25lRm49aixmdW5jdGlvbihpLG8scyl7dmFyIGM9VC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0PW8tYy5sZWZ0LGU9cy1jLnRvcCxyPXthOncuYWF4aXMucmFuZ2VbMF0sYjp3LmJheGlzLnJhbmdlWzFdLGM6dy5jYXhpcy5yYW5nZVsxXX0sdT1yLG49dy5hYXhpcy5yYW5nZVsxXS1yLmEsaD1hKHcuZ3JhcGhEaXYuX2Z1bGxMYXlvdXRbdy5pZF0uYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksZj0iTTAsIit3LmgrIkwiK3cudy8yKyIsIDBMIit3LncrIiwiK3cuaCsiWiIscD0hMSx2PU8uYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94IikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdy54MCsiLCAiK3cueTArIikiKS5zdHlsZSh7ZmlsbDpoPi4yPyJyZ2JhKDAsMCwwLDApIjoicmdiYSgyNTUsMjU1LDI1NSwwKSIsInN0cm9rZS13aWR0aCI6MH0pLmF0dHIoImQiLGYpLF89Ty5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3cueDArIiwgIit3LnkwKyIpIikuc3R5bGUoe2ZpbGw6bC5iYWNrZ3JvdW5kLHN0cm9rZTpsLmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOjEsb3BhY2l0eTowfSkuYXR0cigiZCIsIk0wLDBaIikseChQKX0oMCxvLHMpKToicGFuIj09PWM/KHoubW92ZUZuPVYsei5jbGlja0ZuPUQsei5kb25lRm49VSxyPXthOncuYWF4aXMucmFuZ2VbMF0sYjp3LmJheGlzLnJhbmdlWzFdLGM6dy5jYXhpcy5yYW5nZVsxXX0sdT1yLHgoUCkpOiJzZWxlY3QiIT09YyYmImxhc3NvIiE9PWN8fG0oaSxvLHMseixjKX19O2Z1bmN0aW9uIEkodCl7dmFyIGU9e307cmV0dXJuIGVbdy5pZCsiLmFheGlzLm1pbiJdPXQuYSxlW3cuaWQrIi5iYXhpcy5taW4iXT10LmIsZVt3LmlkKyIuY2F4aXMubWluIl09dC5jLGV9ZnVuY3Rpb24gRCh0LGUpe3ZhciByPVAuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO0MoUCksMj09PXQmJihQLmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksaS5jYWxsKCJfZ3VpUmVsYXlvdXQiLFAsSSh7YTowLGI6MCxjOjB9KSkpLHIuaW5kZXhPZigic2VsZWN0Iik+LTEmJjE9PT10JiZ5KGUsUCxbdy54YXhpc10sW3cueWF4aXNdLHcuaWQseiksci5pbmRleE9mKCJldmVudCIpPi0xJiZnLmNsaWNrKFAsZSx3LmlkKX1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuIDEtZS93Lmh9ZnVuY3Rpb24gRih0LGUpe3JldHVybiAxLSh0Kyh3LmgtZSkvTWF0aC5zcXJ0KDMpKS93Lnd9ZnVuY3Rpb24gQih0LGUpe3JldHVybih0LSh3LmgtZSkvTWF0aC5zcXJ0KDMpKS93Lnd9ZnVuY3Rpb24gTihhLGkpe3ZhciBvPXQrYSxzPWUraSxsPU1hdGgubWF4KDAsTWF0aC5taW4oMSxSKDAsZSksUigwLHMpKSksYz1NYXRoLm1heCgwLE1hdGgubWluKDEsRih0LGUpLEYobyxzKSkpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLEIodCxlKSxCKG8scykpKSxnPShsLzIrZCkqdy53LG09KDEtbC8yLWMpKncudyx5PShnK20pLzIseD1tLWcsVD0oMS1sKSp3LmgsTD1ULXgvazt4PGIuTUlOWk9PTT8odT1yLHYuYXR0cigiZCIsZiksXy5hdHRyKCJkIiwiTTAsMFoiKSk6KHU9e2E6ci5hK2wqbixiOnIuYitjKm4sYzpyLmMrZCpufSx2LmF0dHIoImQiLGYrIk0iK2crIiwiK1QrIkgiK20rIkwiK3krIiwiK0wrIkwiK2crIiwiK1QrIloiKSxfLmF0dHIoImQiLCJNIit0KyIsIitlK0UrIk0iK2crIiwiK1QrTSsiTSIrbSsiLCIrVCtBKyJNIit5KyIsIitMK1MpKSxwfHwodi50cmFuc2l0aW9uKCkuc3R5bGUoImZpbGwiLGg+LjI/InJnYmEoMCwwLDAsMC40KSI6InJnYmEoMjU1LDI1NSwyNTUsMC4zKSIpLmR1cmF0aW9uKDIwMCksXy50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLmR1cmF0aW9uKDIwMCkscD0hMCksUC5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLEkodSkpfWZ1bmN0aW9uIGooKXtDKFApLHUhPT1yJiYoaS5jYWxsKCJfZ3VpUmVsYXlvdXQiLFAsSSh1KSksTCYmUC5kYXRhJiZQLl9jb250ZXh0LnNob3dUaXBzJiYoby5ub3RpZmllcihzKFAsIkRvdWJsZS1jbGljayB0byB6b29tIGJhY2sgb3V0IiksImxvbmciKSxMPSExKSl9ZnVuY3Rpb24gVih0LGUpe3ZhciBuPXQvdy54YXhpcy5fbSxhPWUvdy55YXhpcy5fbSxpPVsodT17YTpyLmEtYSxiOnIuYisobithKS8yLGM6ci5jLShuLWEpLzJ9KS5hLHUuYix1LmNdLnNvcnQoKSxvPWkuaW5kZXhPZih1LmEpLHM9aS5pbmRleE9mKHUuYiksbD1pLmluZGV4T2YodS5jKTtpWzBdPDAmJihpWzFdK2lbMF0vMjwwPyhpWzJdKz1pWzBdK2lbMV0saVswXT1pWzFdPTApOihpWzJdKz1pWzBdLzIsaVsxXSs9aVswXS8yLGlbMF09MCksdT17YTppW29dLGI6aVtzXSxjOmlbbF19LGU9KHIuYS11LmEpKncueWF4aXMuX20sdD0oci5jLXUuYy1yLmIrdS5iKSp3LnhheGlzLl9tKTt2YXIgaD0idHJhbnNsYXRlKCIrKHcueDArdCkrIiwiKyh3LnkwK2UpKyIpIjt3LnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyLC5tYXBsYXllciIpLmF0dHIoInRyYW5zZm9ybSIsaCk7dmFyIGY9InRyYW5zbGF0ZSgiKy10KyIsIistZSsiKSI7dy5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixmKSx3LmFheGlzLnJhbmdlPVt1LmEsdy5zdW0tdS5iLXUuY10sdy5iYXhpcy5yYW5nZT1bdy5zdW0tdS5hLXUuYyx1LmJdLHcuY2F4aXMucmFuZ2U9W3cuc3VtLXUuYS11LmIsdS5jXSx3LmRyYXdBeGVzKCExKSx3Ll9oYXNDbGlwT25BeGlzRmFsc2UmJncucGxvdENvbnRhaW5lci5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi50cmFjZSIpLmNhbGwoYy5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLHcpLFAuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixJKHUpKX1mdW5jdGlvbiBVKCl7aS5jYWxsKCJfZ3VpUmVsYXlvdXQiLFAsSSh1KSl9VC5vbm1vdXNlbW92ZT1mdW5jdGlvbih0KXtnLmhvdmVyKFAsdCx3LmlkKSxQLl9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9VCxQLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9dy5pZH0sVC5vbm1vdXNlb3V0PWZ1bmN0aW9uKHQpe1AuX2RyYWdnaW5nfHxkLnVuaG92ZXIoUCx0KX0sZC5pbml0KHopfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjYxMCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYzMCwiLi4vLi4vY29tcG9uZW50cy90aXRsZXMiOjY3OSwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi4vY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6NzcxLCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Ijo3ODIsIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCI6NzgzLCIuLi9wbG90cyI6ODI2LGQzOjE2NSx0aW55Y29sb3IyOjUzNn1dLDg0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9sb2dnZXJzIiksYT10KCIuL2xpYi9ub29wIiksaT10KCIuL2xpYi9wdXNoX3VuaXF1ZSIpLG89dCgiLi9saWIvaXNfcGxhaW5fb2JqZWN0Iikscz10KCIuL2xpYi9kb20iKS5hZGRTdHlsZVJ1bGUsbD10KCIuL2xpYi9leHRlbmQiKSxjPXQoIi4vcGxvdHMvYXR0cmlidXRlcyIpLHU9dCgiLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyIpLGg9bC5leHRlbmRGbGF0LGY9bC5leHRlbmREZWVwQWxsO2Z1bmN0aW9uIHAodCl7dmFyIGU9dC5uYW1lLGE9dC5jYXRlZ29yaWVzLGk9dC5tZXRhO2lmKHIubW9kdWxlc1tlXSluLmxvZygiVHlwZSAiK2UrIiBhbHJlYWR5IHJlZ2lzdGVyZWQiKTtlbHNle3Iuc3VicGxvdHNSZWdpc3RyeVt0LmJhc2VQbG90TW9kdWxlLm5hbWVdfHxmdW5jdGlvbih0KXt2YXIgZT10Lm5hbWU7aWYoci5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybiB2b2lkIG4ubG9nKCJQbG90IHR5cGUgIitlKyIgYWxyZWFkeSByZWdpc3RlcmVkLiIpO2Zvcih2YXIgYSBpbiBtKHQpLHIuc3VicGxvdHNSZWdpc3RyeVtlXT10LHIuY29tcG9uZW50c1JlZ2lzdHJ5KWIoYSx0Lm5hbWUpfSh0LmJhc2VQbG90TW9kdWxlKTtmb3IodmFyIG89e30sbD0wO2w8YS5sZW5ndGg7bCsrKW9bYVtsXV09ITAsci5hbGxDYXRlZ29yaWVzW2FbbF1dPSEwO2Zvcih2YXIgYyBpbiByLm1vZHVsZXNbZV09e19tb2R1bGU6dCxjYXRlZ29yaWVzOm99LGkmJk9iamVjdC5rZXlzKGkpLmxlbmd0aCYmKHIubW9kdWxlc1tlXS5tZXRhPWkpLHIuYWxsVHlwZXMucHVzaChlKSxyLmNvbXBvbmVudHNSZWdpc3RyeSl5KGMsZSk7dC5sYXlvdXRBdHRyaWJ1dGVzJiZoKHIudHJhY2VMYXlvdXRBdHRyaWJ1dGVzLHQubGF5b3V0QXR0cmlidXRlcyk7dmFyIHU9dC5iYXNlUGxvdE1vZHVsZSxmPXUubmFtZTtpZigibWFwYm94Ij09PWYpe3ZhciBwPXUuY29uc3RhbnRzLnN0eWxlUnVsZXM7Zm9yKHZhciBkIGluIHApcygiLmpzLXBsb3RseS1wbG90IC5wbG90bHkgLm1hcGJveGdsLSIrZCxwW2RdKX0iZ2VvIiE9PWYmJiJtYXBib3giIT09Znx8dm9pZCAwPT09dHlwZW9mIHdpbmRvd3x8dm9pZCAwIT09d2luZG93LlBsb3RseUdlb0Fzc2V0c3x8KHdpbmRvdy5QbG90bHlHZW9Bc3NldHM9e3RvcG9qc29uOnt9fSl9fWZ1bmN0aW9uIGQodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJDb21wb25lbnQgbW9kdWxlICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLiIpO3ZhciBlPXQubmFtZTtmb3IodmFyIG4gaW4gci5jb21wb25lbnRzUmVnaXN0cnlbZV09dCx0LmxheW91dEF0dHJpYnV0ZXMmJih0LmxheW91dEF0dHJpYnV0ZXMuX2lzTGlua2VkVG9BcnJheSYmaShyLmxheW91dEFycmF5Q29udGFpbmVycyxlKSxtKHQpKSxyLm1vZHVsZXMpeShlLG4pO2Zvcih2YXIgYSBpbiByLnN1YnBsb3RzUmVnaXN0cnkpYihlLGEpO2Zvcih2YXIgbyBpbiByLnRyYW5zZm9ybXNSZWdpc3RyeSl4KGUsbyk7dC5zY2hlbWEmJnQuc2NoZW1hLmxheW91dCYmZih1LHQuc2NoZW1hLmxheW91dCl9ZnVuY3Rpb24gZyh0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQubmFtZSl0aHJvdyBuZXcgRXJyb3IoIlRyYW5zZm9ybSBtb2R1bGUgKm5hbWUqIG11c3QgYmUgYSBzdHJpbmcuIik7dmFyIGU9IlRyYW5zZm9ybSBtb2R1bGUgIit0Lm5hbWUsYT0iZnVuY3Rpb24iPT10eXBlb2YgdC50cmFuc2Zvcm0saT0iZnVuY3Rpb24iPT10eXBlb2YgdC5jYWxjVHJhbnNmb3JtO2lmKCFhJiYhaSl0aHJvdyBuZXcgRXJyb3IoZSsiIGlzIG1pc3NpbmcgYSAqdHJhbnNmb3JtKiBvciAqY2FsY1RyYW5zZm9ybSogbWV0aG9kLiIpO2Zvcih2YXIgcyBpbiBhJiZpJiZuLmxvZyhbZSsiIGhhcyBib3RoIGEgKnRyYW5zZm9ybSogYW5kICpjYWxjVHJhbnNmb3JtKiBtZXRob2RzLiIsIlBsZWFzZSBub3RlIHRoYXQgYWxsICp0cmFuc2Zvcm0qIG1ldGhvZHMgYXJlIGV4ZWN1dGVkIiwiYmVmb3JlIGFsbCAqY2FsY1RyYW5zZm9ybSogbWV0aG9kcy4iXS5qb2luKCIgIikpLG8odC5hdHRyaWJ1dGVzKXx8bi5sb2coZSsiIHJlZ2lzdGVyZWQgd2l0aG91dCBhbiAqYXR0cmlidXRlcyogb2JqZWN0LiIpLCJmdW5jdGlvbiIhPXR5cGVvZiB0LnN1cHBseURlZmF1bHRzJiZuLmxvZyhlKyIgcmVnaXN0ZXJlZCB3aXRob3V0IGEgKnN1cHBseURlZmF1bHRzKiBtZXRob2QuIiksci50cmFuc2Zvcm1zUmVnaXN0cnlbdC5uYW1lXT10LHIuY29tcG9uZW50c1JlZ2lzdHJ5KXgocyx0Lm5hbWUpfWZ1bmN0aW9uIHYodCl7dmFyIGU9dC5uYW1lLG49ZS5zcGxpdCgiLSIpWzBdLGE9dC5kaWN0aW9uYXJ5LGk9dC5mb3JtYXQsbz1hJiZPYmplY3Qua2V5cyhhKS5sZW5ndGgscz1pJiZPYmplY3Qua2V5cyhpKS5sZW5ndGgsbD1yLmxvY2FsZVJlZ2lzdHJ5LGM9bFtlXTtpZihjfHwobFtlXT1jPXt9KSxuIT09ZSl7dmFyIHU9bFtuXTt1fHwobFtuXT11PXt9KSxvJiZ1LmRpY3Rpb25hcnk9PT1jLmRpY3Rpb25hcnkmJih1LmRpY3Rpb25hcnk9YSkscyYmdS5mb3JtYXQ9PT1jLmZvcm1hdCYmKHUuZm9ybWF0PWkpfW8mJihjLmRpY3Rpb25hcnk9YSkscyYmKGMuZm9ybWF0PWkpfWZ1bmN0aW9uIG0odCl7aWYodC5sYXlvdXRBdHRyaWJ1dGVzKXt2YXIgZT10LmxheW91dEF0dHJpYnV0ZXMuX2FycmF5QXR0clJlZ2V4cHM7aWYoZSlmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpKHIubGF5b3V0QXJyYXlSZWdleGVzLGVbbl0pfX1mdW5jdGlvbiB5KHQsZSl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbdF0uc2NoZW1hO2lmKG4mJm4udHJhY2VzKXt2YXIgYT1uLnRyYWNlc1tlXTthJiZmKHIubW9kdWxlc1tlXS5fbW9kdWxlLmF0dHJpYnV0ZXMsYSl9fWZ1bmN0aW9uIHgodCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi50cmFuc2Zvcm1zKXt2YXIgYT1uLnRyYW5zZm9ybXNbZV07YSYmZihyLnRyYW5zZm9ybXNSZWdpc3RyeVtlXS5hdHRyaWJ1dGVzLGEpfX1mdW5jdGlvbiBiKHQsZSl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbdF0uc2NoZW1hO2lmKG4mJm4uc3VicGxvdHMpe3ZhciBhPXIuc3VicGxvdHNSZWdpc3RyeVtlXSxpPWEubGF5b3V0QXR0cmlidXRlcyxvPSJzdWJwbG90Ij09PWEuYXR0cj9hLm5hbWU6YS5hdHRyO0FycmF5LmlzQXJyYXkobykmJihvPW9bMF0pO3ZhciBzPW4uc3VicGxvdHNbb107aSYmcyYmZihpLHMpfX1mdW5jdGlvbiBfKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmKHQ9dC50eXBlKSx0fXIubW9kdWxlcz17fSxyLmFsbENhdGVnb3JpZXM9e30sci5hbGxUeXBlcz1bXSxyLnN1YnBsb3RzUmVnaXN0cnk9e30sci50cmFuc2Zvcm1zUmVnaXN0cnk9e30sci5jb21wb25lbnRzUmVnaXN0cnk9e30sci5sYXlvdXRBcnJheUNvbnRhaW5lcnM9W10sci5sYXlvdXRBcnJheVJlZ2V4ZXM9W10sci50cmFjZUxheW91dEF0dHJpYnV0ZXM9e30sci5sb2NhbGVSZWdpc3RyeT17fSxyLmFwaU1ldGhvZFJlZ2lzdHJ5PXt9LHIuY29sbGVjdGFibGVTdWJwbG90VHlwZXM9bnVsbCxyLnJlZ2lzdGVyPWZ1bmN0aW9uKHQpe2lmKHIuY29sbGVjdGFibGVTdWJwbG90VHlwZXM9bnVsbCwhdCl0aHJvdyBuZXcgRXJyb3IoIk5vIGFyZ3VtZW50IHBhc3NlZCB0byBQbG90bHkucmVnaXN0ZXIuIik7dCYmIUFycmF5LmlzQXJyYXkodCkmJih0PVt0XSk7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBuPXRbZV07aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhIik7c3dpdGNoKG4ubW9kdWxlVHlwZSl7Y2FzZSJ0cmFjZSI6cChuKTticmVhaztjYXNlInRyYW5zZm9ybSI6ZyhuKTticmVhaztjYXNlImNvbXBvbmVudCI6ZChuKTticmVhaztjYXNlImxvY2FsZSI6dihuKTticmVhaztjYXNlImFwaU1ldGhvZCI6dmFyIGE9bi5uYW1lO3IuYXBpTWV0aG9kUmVnaXN0cnlbYV09bi5mbjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBtb2R1bGUgd2FzIGF0dGVtcHRlZCB0byBiZSByZWdpc3RlcmVkISIpfX19LHIuZ2V0TW9kdWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXIubW9kdWxlc1tfKHQpXTtyZXR1cm4hIWUmJmUuX21vZHVsZX0sci50cmFjZUlzPWZ1bmN0aW9uKHQsZSl7aWYoInZhcmlvdXMiPT09KHQ9Xyh0KSkpcmV0dXJuITE7dmFyIGE9ci5tb2R1bGVzW3RdO3JldHVybiBhfHwodCYmImFyZWEiIT09dCYmbi5sb2coIlVucmVjb2duaXplZCB0cmFjZSB0eXBlICIrdCsiLiIpLGE9ci5tb2R1bGVzW2MudHlwZS5kZmx0XSksISFhLmNhdGVnb3JpZXNbZV19LHIuZ2V0VHJhbnNmb3JtSW5kaWNlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXQudHJhbnNmb3Jtc3x8W10sYT0wO2E8bi5sZW5ndGg7YSsrKW5bYV0udHlwZT09PWUmJnIucHVzaChhKTtyZXR1cm4gcn0sci5oYXNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC50cmFuc2Zvcm1zfHxbXSxuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXS50eXBlPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sci5nZXRDb21wb25lbnRNZXRob2Q9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XTtyZXR1cm4gbiYmbltlXXx8YX0sci5jYWxsPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdLGU9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHIuYXBpTWV0aG9kUmVnaXN0cnlbdF0uYXBwbHkobnVsbCxlKX19LHsiLi9saWIvZG9tIjo3MDYsIi4vbGliL2V4dGVuZCI6NzA4LCIuL2xpYi9pc19wbGFpbl9vYmplY3QiOjcxOCwiLi9saWIvbG9nZ2VycyI6NzIxLCIuL2xpYi9ub29wIjo3MjYsIi4vbGliL3B1c2hfdW5pcXVlIjo3MzEsIi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIjo4MTd9XSw4NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKSxhPXQoIi4uL2xpYiIpLGk9YS5leHRlbmRGbGF0LG89YS5leHRlbmREZWVwO2Z1bmN0aW9uIHModCl7dmFyIGU7c3dpdGNoKHQpe2Nhc2UidGhlbWVzX190aHVtYiI6ZT17YXV0b3NpemU6ITAsd2lkdGg6MTUwLGhlaWdodDoxNTAsdGl0bGU6e3RleHQ6IiJ9LHNob3dsZWdlbmQ6ITEsbWFyZ2luOntsOjUscjo1LHQ6NSxiOjUscGFkOjB9LGFubm90YXRpb25zOltdfTticmVhaztjYXNlInRodW1ibmFpbCI6ZT17dGl0bGU6e3RleHQ6IiJ9LGhpZGVzb3VyY2VzOiEwLHNob3dsZWdlbmQ6ITEsYm9yZGVyd2lkdGg6MCxib3JkZXJjb2xvcjoiIixtYXJnaW46e2w6MSxyOjEsdDoxLGI6MSxwYWQ6MH0sYW5ub3RhdGlvbnM6W119O2JyZWFrO2RlZmF1bHQ6ZT17fX1yZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcjt0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhciYmKHQ9dC5mcmFtZXdvcmsuZ2V0Q29uZmlnKCkpO3ZhciBhLGw9dC5kYXRhLGM9dC5sYXlvdXQsdT1vKFtdLGwpLGg9byh7fSxjLHMoZS50aWxlQ2xhc3MpKSxmPXQuX2NvbnRleHR8fHt9O2lmKGUud2lkdGgmJihoLndpZHRoPWUud2lkdGgpLGUuaGVpZ2h0JiYoaC5oZWlnaHQ9ZS5oZWlnaHQpLCJ0aHVtYm5haWwiPT09ZS50aWxlQ2xhc3N8fCJ0aGVtZXNfX3RodW1iIj09PWUudGlsZUNsYXNzKXtoLmFubm90YXRpb25zPVtdO3ZhciBwPU9iamVjdC5rZXlzKGgpO2ZvcihyPTA7cjxwLmxlbmd0aDtyKyspYT1wW3JdLFsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl0uaW5kZXhPZihhLnNsaWNlKDAsNSkpPi0xJiYoaFtwW3JdXS50aXRsZT17dGV4dDoiIn0pO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspe3ZhciBkPXVbcl07ZC5zaG93c2NhbGU9ITEsZC5tYXJrZXImJihkLm1hcmtlci5zaG93c2NhbGU9ITEpLG4udHJhY2VJcyhkLCJwaWUtbGlrZSIpJiYoZC50ZXh0cG9zaXRpb249Im5vbmUiKX19aWYoQXJyYXkuaXNBcnJheShlLmFubm90YXRpb25zKSlmb3Iocj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKWguYW5ub3RhdGlvbnMucHVzaChlLmFubm90YXRpb25zW3JdKTt2YXIgZz1PYmplY3Qua2V5cyhoKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2goL15zY2VuZVxkKiQvKX0pO2lmKGcubGVuZ3RoKXt2YXIgdj17fTtmb3IoInRodW1ibmFpbCI9PT1lLnRpbGVDbGFzcyYmKHY9e3RpdGxlOnt0ZXh0OiIifSxzaG93YXhlc2xhYmVsczohMSxzaG93dGlja2xhYmVsczohMSxsaW5ldGlja2VuYWJsZTohMX0pLHI9MDtyPGcubGVuZ3RoO3IrKyl7dmFyIG09aFtnW3JdXTttLnhheGlzfHwobS54YXhpcz17fSksbS55YXhpc3x8KG0ueWF4aXM9e30pLG0uemF4aXN8fChtLnpheGlzPXt9KSxpKG0ueGF4aXMsdiksaShtLnlheGlzLHYpLGkobS56YXhpcyx2KSxtLl9zY2VuZT1udWxsfX12YXIgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLnRpbGVDbGFzcyYmKHkuY2xhc3NOYW1lPWUudGlsZUNsYXNzKTt2YXIgeD17Z2Q6eSx0ZDp5LGxheW91dDpoLGRhdGE6dSxjb25maWc6e3N0YXRpY1Bsb3Q6dm9pZCAwPT09ZS5zdGF0aWNQbG90fHxlLnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp2b2lkIDA9PT1lLnBsb3RHbFBpeGVsUmF0aW8/MjplLnBsb3RHbFBpeGVsUmF0aW8sZGlzcGxheWxvZ286ZS5kaXNwbGF5bG9nb3x8ITEsc2hvd0xpbms6ZS5zaG93TGlua3x8ITEsc2hvd1RpcHM6ZS5zaG93VGlwc3x8ITEsbWFwYm94QWNjZXNzVG9rZW46Zi5tYXBib3hBY2Nlc3NUb2tlbn19O3JldHVybiJ0cmFuc3BhcmVudCIhPT1lLnNldEJhY2tncm91bmQmJih4LmNvbmZpZy5zZXRCYWNrZ3JvdW5kPWUuc2V0QmFja2dyb3VuZHx8Im9wYXF1ZSIpLHguZ2QuZGVmYXVsdExheW91dD1zKGUudGlsZUNsYXNzKSx4fX0seyIuLi9saWIiOjcxNywiLi4vcmVnaXN0cnkiOjg0Nn1dLDg0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxhPXQoIi4uL3Bsb3RfYXBpL3RvX2ltYWdlIiksaT10KCIuL2ZpbGVzYXZlciIpLG89dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIG4uaXNQbGFpbk9iamVjdCh0KXx8KHI9bi5nZXRHcmFwaERpdih0KSksKGU9ZXx8e30pLmZvcm1hdD1lLmZvcm1hdHx8InBuZyIsZS5pbWFnZURhdGFPbmx5PSEwLG5ldyBQcm9taXNlKGZ1bmN0aW9uKHMsbCl7ciYmci5fc25hcHNob3RJblByb2dyZXNzJiZsKG5ldyBFcnJvcigiU25hcHNob3R0aW5nIGFscmVhZHkgaW4gcHJvZ3Jlc3MuIikpLG4uaXNJRSgpJiYic3ZnIiE9PWUuZm9ybWF0JiZsKG5ldyBFcnJvcihvLk1TR19JRV9CQURfRk9STUFUKSksciYmKHIuX3NuYXBzaG90SW5Qcm9ncmVzcz0hMCk7dmFyIGM9YSh0LGUpLHU9ZS5maWxlbmFtZXx8dC5mbnx8Im5ld3Bsb3QiO3UrPSIuIitlLmZvcm1hdCxjLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEpLGkodCx1LGUuZm9ybWF0KX0pLnRoZW4oZnVuY3Rpb24odCl7cyh0KX0pLmNhdGNoKGZ1bmN0aW9uKHQpe3ImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEpLGwodCl9KX0pfX0seyIuLi9saWIiOjcxNywiLi4vcGxvdF9hcGkvdG9faW1hZ2UiOjc1OCwiLi9maWxlc2F2ZXIiOjg0OSwiLi9oZWxwZXJzIjo4NTB9XSw4NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksYT10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxvPSJkb3dubG9hZCJpbiBpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihzLGwpe3ZhciBjLHU7aWYobi5pc0lFOW9yQmVsb3coKSYmbChuZXcgRXJyb3IoIklFIDwgMTAgdW5zdXBwb3J0ZWQiKSksbi5pc1NhZmFyaSgpKXt2YXIgaD0ic3ZnIj09PXI/IiwiOiI7YmFzZTY0LCI7cmV0dXJuIGEub2N0ZXRTdHJlYW0oaCtlbmNvZGVVUklDb21wb25lbnQodCkpLHMoZSl9cmV0dXJuIG4uaXNJRSgpPyhjPWEuY3JlYXRlQmxvYih0LCJzdmciKSx3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoYyxlKSxjPW51bGwscyhlKSk6bz8oYz1hLmNyZWF0ZUJsb2IodCxyKSx1PWEuY3JlYXRlT2JqZWN0VVJMKGMpLGkuaHJlZj11LGkuZG93bmxvYWQ9ZSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLGkuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGkpLGEucmV2b2tlT2JqZWN0VVJMKHUpLGM9bnVsbCxzKGUpKTp2b2lkIGwobmV3IEVycm9yKCJkb3dubG9hZCBlcnJvciIpKX0pfX0seyIuLi9saWIiOjcxNywiLi9oZWxwZXJzIjo4NTB9XSw4NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKTtyLmdldERlbGF5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9oYXMmJih0Ll9oYXMoImdsM2QiKXx8dC5faGFzKCJnbDJkIil8fHQuX2hhcygibWFwYm94IikpPzUwMDowfSxyLmdldFJlZHJhd0Z1bmM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5fZnVsbExheW91dHx8e307IShlLl9oYXMmJmUuX2hhcygicG9sYXIiKSkmJnQuZGF0YSYmdC5kYXRhWzBdJiZ0LmRhdGFbMF0ucnx8bi5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yYmFyIiwiZHJhdyIpKHQpfX0sci5lbmNvZGVTVkc9ZnVuY3Rpb24odCl7cmV0dXJuImRhdGE6aW1hZ2Uvc3ZnK3htbCwiK2VuY29kZVVSSUNvbXBvbmVudCh0KX07dmFyIGE9d2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTDtyLmNyZWF0ZU9iamVjdFVSTD1mdW5jdGlvbih0KXtyZXR1cm4gYS5jcmVhdGVPYmplY3RVUkwodCl9LHIucmV2b2tlT2JqZWN0VVJMPWZ1bmN0aW9uKHQpe3JldHVybiBhLnJldm9rZU9iamVjdFVSTCh0KX0sci5jcmVhdGVCbG9iPWZ1bmN0aW9uKHQsZSl7aWYoInN2ZyI9PT1lKXJldHVybiBuZXcgd2luZG93LkJsb2IoW3RdLHt0eXBlOiJpbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgifSk7dmFyIHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5QnVmZmVyKGUpLG49bmV3IFVpbnQ4QXJyYXkociksYT0wO2E8ZTthKyspblthXT10LmNoYXJDb2RlQXQoYSk7cmV0dXJuIHJ9KHdpbmRvdy5hdG9iKHQpKTtyZXR1cm4gbmV3IHdpbmRvdy5CbG9iKFtyXSx7dHlwZToiaW1hZ2UvIitlfSl9LHIub2N0ZXRTdHJlYW09ZnVuY3Rpb24odCl7ZG9jdW1lbnQubG9jYXRpb24uaHJlZj0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iK3R9LHIuSU1BR0VfVVJMX1BSRUZJWD0vXmRhdGE6aW1hZ2VcL1x3KztiYXNlNjQsLyxyLk1TR19JRV9CQURfRk9STUFUPSJTb3JyeSBJRSBkb2VzIG5vdCBzdXBwb3J0IGRvd25sb2FkaW5nIGZyb20gY2FudmFzLiBUcnkge2Zvcm1hdDonc3ZnJ30gaW5zdGVhZC4ifSx7Ii4uL3JlZ2lzdHJ5Ijo4NDZ9XSw4NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9oZWxwZXJzIiksYT17Z2V0RGVsYXk6bi5nZXREZWxheSxnZXRSZWRyYXdGdW5jOm4uZ2V0UmVkcmF3RnVuYyxjbG9uZTp0KCIuL2Nsb25lcGxvdCIpLHRvU1ZHOnQoIi4vdG9zdmciKSxzdmdUb0ltZzp0KCIuL3N2Z3RvaW1nIiksdG9JbWFnZTp0KCIuL3RvaW1hZ2UiKSxkb3dubG9hZEltYWdlOnQoIi4vZG93bmxvYWQiKX07ZS5leHBvcnRzPWF9LHsiLi9jbG9uZXBsb3QiOjg0NywiLi9kb3dubG9hZCI6ODQ4LCIuL2hlbHBlcnMiOjg1MCwiLi9zdmd0b2ltZyI6ODUyLCIuL3RvaW1hZ2UiOjg1MywiLi90b3N2ZyI6ODU0fV0sODUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGE9dCgiZXZlbnRzIikuRXZlbnRFbWl0dGVyLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZW1pdHRlcnx8bmV3IGEscj1uZXcgUHJvbWlzZShmdW5jdGlvbihhLG8pe3ZhciBzPXdpbmRvdy5JbWFnZSxsPXQuc3ZnLGM9dC5mb3JtYXR8fCJwbmciO2lmKG4uaXNJRSgpJiYic3ZnIiE9PWMpe3ZhciB1PW5ldyBFcnJvcihpLk1TR19JRV9CQURfRk9STUFUKTtyZXR1cm4gbyh1KSx0LnByb21pc2U/cjplLmVtaXQoImVycm9yIix1KX12YXIgaCxmLHA9dC5jYW52YXMsZD10LnNjYWxlfHwxLGc9dC53aWR0aHx8MzAwLHY9dC5oZWlnaHR8fDE1MCxtPWQqZyx5PWQqdix4PXAuZ2V0Q29udGV4dCgiMmQiKSxiPW5ldyBzOyJzdmciPT09Y3x8bi5pc0lFOW9yQmVsb3coKXx8bi5pc1NhZmFyaSgpP2Y9aS5lbmNvZGVTVkcobCk6KGg9aS5jcmVhdGVCbG9iKGwsInN2ZyIpLGY9aS5jcmVhdGVPYmplY3RVUkwoaCkpLHAud2lkdGg9bSxwLmhlaWdodD15LGIub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHI7c3dpdGNoKGg9bnVsbCxpLnJldm9rZU9iamVjdFVSTChmKSwic3ZnIiE9PWMmJnguZHJhd0ltYWdlKGIsMCwwLG0seSksYyl7Y2FzZSJqcGVnIjpyPXAudG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJwbmciOnI9cC50b0RhdGFVUkwoImltYWdlL3BuZyIpO2JyZWFrO2Nhc2Uid2VicCI6cj1wLnRvRGF0YVVSTCgiaW1hZ2Uvd2VicCIpO2JyZWFrO2Nhc2Uic3ZnIjpyPWY7YnJlYWs7ZGVmYXVsdDp2YXIgbj0iSW1hZ2UgZm9ybWF0IGlzIG5vdCBqcGVnLCBwbmcsIHN2ZyBvciB3ZWJwLiI7aWYobyhuZXcgRXJyb3IobikpLCF0LnByb21pc2UpcmV0dXJuIGUuZW1pdCgiZXJyb3IiLG4pfWEociksdC5wcm9taXNlfHxlLmVtaXQoInN1Y2Nlc3MiLHIpfSxiLm9uZXJyb3I9ZnVuY3Rpb24ocil7aWYoaD1udWxsLGkucmV2b2tlT2JqZWN0VVJMKGYpLG8ociksIXQucHJvbWlzZSlyZXR1cm4gZS5lbWl0KCJlcnJvciIscil9LGIuc3JjPWZ9KTtyZXR1cm4gdC5wcm9taXNlP3I6ZX19LHsiLi4vbGliIjo3MTcsIi4vaGVscGVycyI6ODUwLGV2ZW50czoxMDZ9XSw4NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXZlbnRzIikuRXZlbnRFbWl0dGVyLGE9dCgiLi4vcmVnaXN0cnkiKSxpPXQoIi4uL2xpYiIpLG89dCgiLi9oZWxwZXJzIikscz10KCIuL2Nsb25lcGxvdCIpLGw9dCgiLi90b3N2ZyIpLGM9dCgiLi9zdmd0b2ltZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBuLHU9cyh0LHtmb3JtYXQ6InBuZyJ9KSxoPXUuZ2Q7aC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGguc3R5bGUubGVmdD0iLTUwMDBweCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKTt2YXIgZj1vLmdldFJlZHJhd0Z1bmMoaCk7cmV0dXJuIGEuY2FsbCgicGxvdCIsaCx1LmRhdGEsdS5sYXlvdXQsdS5jb25maWcpLnRoZW4oZikudGhlbihmdW5jdGlvbigpe3ZhciB0PW8uZ2V0RGVsYXkoaC5fZnVsbExheW91dCk7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0PWwoaCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLmlkPWkucmFuZHN0cigpLChyPWMoe2Zvcm1hdDplLmZvcm1hdCx3aWR0aDpoLl9mdWxsTGF5b3V0LndpZHRoLGhlaWdodDpoLl9mdWxsTGF5b3V0LmhlaWdodCxjYW52YXM6bixlbWl0dGVyOnIsc3ZnOnR9KSkuY2xlYW49ZnVuY3Rpb24oKXtoJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGgpfX0sdCl9KS5jYXRjaChmdW5jdGlvbih0KXtyLmVtaXQoImVycm9yIix0KX0pLHJ9fSx7Ii4uL2xpYiI6NzE3LCIuLi9yZWdpc3RyeSI6ODQ2LCIuL2Nsb25lcGxvdCI6ODQ3LCIuL2hlbHBlcnMiOjg1MCwiLi9zdmd0b2ltZyI6ODUyLCIuL3Rvc3ZnIjo4NTQsZXZlbnRzOjEwNn1dLDg1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vbGliIiksaT10KCIuLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxzPXQoIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksbD0vIi9nLGM9bmV3IFJlZ0V4cCgnKCJUT0JFU1RSSVBQRUQpfChUT0JFU1RSSVBQRUQiKScsImciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciB1LGg9dC5fZnVsbExheW91dCxmPWguX3BhcGVyLHA9aC5fdG9wcGFwZXIsZD1oLndpZHRoLGc9aC5oZWlnaHQ7Zi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5jYWxsKGkuc2V0UmVjdCwwLDAsZCxnKS5jYWxsKG8uZmlsbCxoLnBhcGVyX2JnY29sb3IpO3ZhciB2PWguX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKHU9MDt1PHYubGVuZ3RoO3UrKyl7dmFyIG09dlt1XTttLnRvU1ZHJiZtLnRvU1ZHKHQpfWlmKHApe3ZhciB5PXAubm9kZSgpLmNoaWxkTm9kZXMseD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh5KTtmb3IodT0wO3U8eC5sZW5ndGg7dSsrKXt2YXIgYj14W3VdO2IuY2hpbGROb2Rlcy5sZW5ndGgmJmYubm9kZSgpLmFwcGVuZENoaWxkKGIpfX1pZihoLl9kcmFnZ2VycyYmaC5fZHJhZ2dlcnMucmVtb3ZlKCksZi5ub2RlKCkuc3R5bGUuYmFja2dyb3VuZD0iIixmLnNlbGVjdEFsbCgidGV4dCIpLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpudWxsLCJkYXRhLW1hdGgiOm51bGx9KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7aWYoImhpZGRlbiIhPT10aGlzLnN0eWxlLnZpc2liaWxpdHkmJiJub25lIiE9PXRoaXMuc3R5bGUuZGlzcGxheSl7dC5zdHlsZSh7dmlzaWJpbGl0eTpudWxsLGRpc3BsYXk6bnVsbH0pO3ZhciBlPXRoaXMuc3R5bGUuZm9udEZhbWlseTtlJiYtMSE9PWUuaW5kZXhPZignIicpJiZ0LnN0eWxlKCJmb250LWZhbWlseSIsZS5yZXBsYWNlKGwsIlRPQkVTVFJJUFBFRCIpKX1lbHNlIHQucmVtb3ZlKCl9KSxoLl9ncmFkaWVudFVybFF1ZXJ5UGFydHMpe3ZhciBfPVtdO2Zvcih2YXIgdyBpbiBoLl9ncmFkaWVudFVybFF1ZXJ5UGFydHMpXy5wdXNoKHcpO18ubGVuZ3RoJiZmLnNlbGVjdEFsbChfLmpvaW4oIiwiKSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dGhpcy5zdHlsZS5maWxsO2UmJi0xIT09ZS5pbmRleE9mKCJ1cmwoIikmJnQuc3R5bGUoImZpbGwiLGUucmVwbGFjZShsLCJUT0JFU1RSSVBQRUQiKSk7dmFyIHI9dGhpcy5zdHlsZS5zdHJva2U7ciYmLTEhPT1yLmluZGV4T2YoInVybCgiKSYmdC5zdHlsZSgic3Ryb2tlIixyLnJlcGxhY2UobCwiVE9CRVNUUklQUEVEIikpfSl9InBkZiIhPT1lJiYiZXBzIiE9PWV8fGYuc2VsZWN0QWxsKCIjTWF0aEpheF9TVkdfZ2x5cGhzIHBhdGgiKS5hdHRyKCJzdHJva2Utd2lkdGgiLDApLGYubm9kZSgpLnNldEF0dHJpYnV0ZU5TKHMueG1sbnMsInhtbG5zIixzLnN2ZyksZi5ub2RlKCkuc2V0QXR0cmlidXRlTlMocy54bWxucywieG1sbnM6eGxpbmsiLHMueGxpbmspLCJzdmciPT09ZSYmciYmKGYuYXR0cigid2lkdGgiLHIqZCksZi5hdHRyKCJoZWlnaHQiLHIqZyksZi5hdHRyKCJ2aWV3Qm94IiwiMCAwICIrZCsiICIrZykpO3ZhciBrPShuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIpLnNlcmlhbGl6ZVRvU3RyaW5nKGYubm9kZSgpKTtyZXR1cm4gaz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCgiYm9keSIpLmFwcGVuZCgiZGl2Iikuc3R5bGUoe2Rpc3BsYXk6Im5vbmUifSkuaHRtbCgiIikscj10LnJlcGxhY2UoLygmW147XSo7KS9naSxmdW5jdGlvbih0KXtyZXR1cm4iJmx0OyI9PT10PyImIzYwOyI6IiZydDsiPT09dD8iJiM2MjsiOi0xIT09dC5pbmRleE9mKCI8Iil8fC0xIT09dC5pbmRleE9mKCI+Iik/IiI6ZS5odG1sKHQpLnRleHQoKX0pO3JldHVybiBlLnJlbW92ZSgpLHJ9KGspLGs9KGs9ay5yZXBsYWNlKC8mKD8hXHcrO3xcI1swLTldKzt8IFwjeFswLTlBLUZdKzspL2csIiZhbXA7IikpLnJlcGxhY2UoYywiJyIpLGEuaXNJRSgpJiYoaz0oaz0oaz1rLnJlcGxhY2UoLyIvZ2ksIiciKSkucmVwbGFjZSgvKFwoJyMpKFteJ10qKSgnXCkpL2dpLCcoIiMkMiIpJykpLnJlcGxhY2UoLyhcXCcpL2dpLCciJykpLGt9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2OTQsIi4uL2xpYiI6NzE3LGQzOjE2NX1dLDg1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdLmk9cjtuLm1lcmdlQXJyYXkoZS50ZXh0LHQsInR4Iiksbi5tZXJnZUFycmF5KGUuaG92ZXJ0ZXh0LHQsImh0eCIpO3ZhciBhPWUubWFya2VyO2lmKGEpe24ubWVyZ2VBcnJheShhLm9wYWNpdHksdCwibW8iLCEwKSxuLm1lcmdlQXJyYXkoYS5jb2xvcix0LCJtYyIpO3ZhciBpPWEubGluZTtpJiYobi5tZXJnZUFycmF5KGkuY29sb3IsdCwibWxjIiksbi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGkud2lkdGgsdCwibWx3IikpfX19LHsiLi4vLi4vbGliIjo3MTd9XSw4NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGw9dCgiLi9jb25zdGFudHMiKSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9cyh7ZWRpdFR5cGU6ImNhbGMiLGFycmF5T2s6ITAsY29sb3JFZGl0VHlwZToic3R5bGUifSksaD1jKHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2RmbHQ6MH0pLGY9Yyh7d2lkdGg6aCxlZGl0VHlwZToiY2FsYyJ9LG8oIm1hcmtlci5saW5lIikpLHA9Yyh7bGluZTpmLGVkaXRUeXBlOiJjYWxjIn0sbygibWFya2VyIikse29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMCxkZmx0OjEsbWluOjAsbWF4OjEsZWRpdFR5cGU6InN0eWxlIn19KTtlLmV4cG9ydHM9e3g6bi54LHgwOm4ueDAsZHg6bi5keCx5Om4ueSx5MDpuLnkwLGR5Om4uZHksdGV4dDpuLnRleHQsdGV4dHRlbXBsYXRlOmkoe2VkaXRUeXBlOiJwbG90In0se2tleXM6bC5ldmVudERhdGFLZXlzfSksaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6YSh7fSx7a2V5czpsLmV2ZW50RGF0YUtleXN9KSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJhdXRvIiwibm9uZSJdLGRmbHQ6Im5vbmUiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxpbnNpZGV0ZXh0YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJlbmQiLCJtaWRkbGUiLCJzdGFydCJdLGRmbHQ6ImVuZCIsZWRpdFR5cGU6InBsb3QifSx0ZXh0YW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OiJhdXRvIixlZGl0VHlwZToicGxvdCJ9LHRleHRmb250OmMoe30sdSx7fSksaW5zaWRldGV4dGZvbnQ6Yyh7fSx1LHt9KSxvdXRzaWRldGV4dGZvbnQ6Yyh7fSx1LHt9KSxjb25zdHJhaW50ZXh0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbnNpZGUiLCJvdXRzaWRlIiwiYm90aCIsIm5vbmUiXSxkZmx0OiJib3RoIixlZGl0VHlwZToiY2FsYyJ9LGNsaXBvbmF4aXM6Yyh7fSxuLmNsaXBvbmF4aXMse30pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sYmFzZTp7dmFsVHlwZToiYW55IixkZmx0Om51bGwsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LG9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxtaW46MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sbWFya2VyOnAsb2Zmc2V0Z3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGFsaWdubWVudGdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Om4uc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksY29sb3I6bi5zZWxlY3RlZC5tYXJrZXIuY29sb3IsZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6bi5zZWxlY3RlZC50ZXh0Zm9udCxlZGl0VHlwZToic3R5bGUifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6bi51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGNvbG9yOm4udW5zZWxlY3RlZC5tYXJrZXIuY29sb3IsZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6bi51bnNlbGVjdGVkLnRleHRmb250LGVkaXRUeXBlOiJzdHlsZSJ9LHI6bi5yLHQ6bi50LF9kZXByZWNhdGVkOntiYXJkaXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGVkaXRUeXBlOiJjYWxjIix2YWx1ZXM6WyJ2IiwiaCJdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1OTksIi4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3OTEsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg0MSwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTIwLCIuL2NvbnN0YW50cyI6ODU4fV0sODU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLG89dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSxzPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixsLGM9bi5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLHU9bi5nZXRGcm9tSWQodCxlLnlheGlzfHwieSIpOyJoIj09PWUub3JpZW50YXRpb24/KHI9Yy5tYWtlQ2FsY2RhdGEoZSwieCIpLGw9dS5tYWtlQ2FsY2RhdGEoZSwieSIpKToocj11Lm1ha2VDYWxjZGF0YShlLCJ5IiksbD1jLm1ha2VDYWxjZGF0YShlLCJ4IikpO2Zvcih2YXIgaD1NYXRoLm1pbihsLmxlbmd0aCxyLmxlbmd0aCksZj1uZXcgQXJyYXkoaCkscD0wO3A8aDtwKyspZltwXT17cDpsW3BdLHM6cltwXX0sZS5pZHMmJihmW3BdLmlkPVN0cmluZyhlLmlkc1twXSkpO3JldHVybiBhKGUsIm1hcmtlciIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlciIsY0xldHRlcjoiYyJ9KSxhKGUsIm1hcmtlci5saW5lIikmJmkodCxlLHt2YWxzOmUubWFya2VyLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIubGluZSIsY0xldHRlcjoiYyJ9KSxvKGYsZSkscyhmLGUpLGZ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MDAsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo2MDMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjExMjIsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjo4NTV9XSw4NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtURVhUUEFEOjMsZXZlbnREYXRhS2V5czpbInZhbHVlIiwibGFiZWwiXX19LHt9XSw4NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKS5nZXRBeGlzR3JvdXAsYz10KCIuL3NpZXZlLmpzIik7ZnVuY3Rpb24gdSh0LGUscixvLHUpe2lmKG8ubGVuZ3RoKXt2YXIgYixfLHcsaztzd2l0Y2goZnVuY3Rpb24odCxlKXt2YXIgcixpO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBvLHM9ZVtyXSxsPXNbMF0udHJhY2UsYz0iZnVubmVsIj09PWwudHlwZT9sLl9iYXNlOmwuYmFzZSx1PSJoIj09PWwub3JpZW50YXRpb24/bC54Y2FsZW5kYXI6bC55Y2FsZW5kYXIsaD0iY2F0ZWdvcnkiPT09dC50eXBlfHwibXVsdGljYXRlZ29yeSI9PT10LnR5cGU/ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH06dC5kMmM7aWYoYShjKSl7Zm9yKGk9MDtpPE1hdGgubWluKGMubGVuZ3RoLHMubGVuZ3RoKTtpKyspbz1oKGNbaV0sMCx1KSxuKG8pPyhzW2ldLmI9K28sc1tpXS5oYXNCPTEpOnNbaV0uYj0wO2Zvcig7aTxzLmxlbmd0aDtpKyspc1tpXS5iPTB9ZWxzZXtvPWgoYywwLHUpO3ZhciBmPW4obyk7Zm9yKG89Zj9vOjAsaT0wO2k8cy5sZW5ndGg7aSsrKXNbaV0uYj1vLGYmJihzW2ldLmhhc0I9MSl9fX0ocixvKSx1Lm1vZGUpe2Nhc2Uib3ZlcmxheSI6aChlLHIsbyx1KTticmVhaztjYXNlImdyb3VwIjpmb3IoYj1bXSxfPVtdLHc9MDt3PG8ubGVuZ3RoO3crKyl2b2lkIDA9PT0oaz1vW3ddKVswXS50cmFjZS5vZmZzZXQ/Xy5wdXNoKGspOmIucHVzaChrKTtfLmxlbmd0aCYmZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbz1uZXcgYyhuLHtzZXBOZWdWYWw6ITEsb3ZlcmxhcE5vTWVyZ2U6IWEubm9ybX0pOyhmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGE9dC5fZnVsbExheW91dCxpPXIucG9zaXRpb25zLG89ci5kaXN0aW5jdFBvc2l0aW9ucyxzPXIubWluRGlmZixjPXIudHJhY2VzLHU9Yy5sZW5ndGgsaD1pLmxlbmd0aCE9PW8ubGVuZ3RoLGY9cyooMS1uLmdhcCksdj1sKGEsZS5faWQpK2NbMF1bMF0udHJhY2Uub3JpZW50YXRpb24sbT1hLl9hbGlnbm1lbnRPcHRzW3ZdfHx7fSx5PTA7eTx1O3krKyl7dmFyIHgsYixfPWNbeV0sdz1fWzBdLnRyYWNlLGs9bVt3LmFsaWdubWVudGdyb3VwXXx8e30sVD1PYmplY3Qua2V5cyhrLm9mZnNldEdyb3Vwc3x8e30pLmxlbmd0aCxNPSh4PVQ/Zi9UOmg/Zi91OmYpKigxLShuLmdyb3VwZ2FwfHwwKSk7Yj1UPygoMip3Ll9vZmZzZXRJbmRleCsxLVQpKngtTSkvMjpoPygoMip5KzEtdSkqeC1NKS8yOi1NLzI7dmFyIEE9X1swXS50O0EuYmFyd2lkdGg9TSxBLnBvZmZzZXQ9YixBLmJhcmdyb3Vwd2lkdGg9ZixBLmJhcmRlbHRhPXN9ci5iaW5XaWR0aD1jWzBdWzBdLnQuYmFyd2lkdGgvMTAwLHAociksZChlLHIpLGcoZSxyLGgpfSkodCxlLG8sYSksZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQudHJhY2VzLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxhPW5bMF0udHJhY2U7aWYodm9pZCAwPT09YS5iYXNlKWZvcih2YXIgbz1uZXcgYyhbbl0se3NlcE5lZ1ZhbDohMCxvdmVybGFwTm9NZXJnZTohMH0pLHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIGw9bltzXTtpZihsLnAhPT1pKXt2YXIgdT1vLnB1dChsLnAsbC5iK2wucyk7dSYmKGwuYj11KX19fX0obyksYS5ub3JtPyhtKG8pLHkocixvLGEpKTp2KHIsbyl9KHQsZSxyLF8sdSksYi5sZW5ndGgmJmgoZSxyLGIsdSk7YnJlYWs7Y2FzZSJzdGFjayI6Y2FzZSJyZWxhdGl2ZSI6Zm9yKGI9W10sXz1bXSx3PTA7dzxvLmxlbmd0aDt3Kyspdm9pZCAwPT09KGs9b1t3XSlbMF0udHJhY2UuYmFzZT9fLnB1c2goayk6Yi5wdXNoKGspO18ubGVuZ3RoJiZmdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPW5ldyBjKG4se3NlcE5lZ1ZhbDoicmVsYXRpdmUiPT09YS5tb2RlLG92ZXJsYXBOb01lcmdlOiEoYS5ub3JtfHwic3RhY2siPT09YS5tb2RlfHwicmVsYXRpdmUiPT09YS5tb2RlKX0pO2YoZSxvLGEpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLG8sbCxjLHUsaD14KHQpLGY9ZS50cmFjZXM7Zm9yKGw9MDtsPGYubGVuZ3RoO2wrKylpZihuPWZbbF0sImZ1bm5lbCI9PT0oYT1uWzBdLnRyYWNlKS50eXBlKWZvcihjPTA7YzxuLmxlbmd0aDtjKyspKHU9bltjXSkucyE9PWkmJmUucHV0KHUucCwtLjUqdS5zKTtmb3IobD0wO2w8Zi5sZW5ndGg7bCsrKXtuPWZbbF0sYT1uWzBdLnRyYWNlLG89ImZ1bm5lbCI9PT1hLnR5cGU7dmFyIHA9W107Zm9yKGM9MDtjPG4ubGVuZ3RoO2MrKylpZigodT1uW2NdKS5zIT09aSl7dmFyIGQ7ZD1vP3Uuczp1LnMrdS5iO3ZhciBnPWUucHV0KHUucCxkKSx2PWcrZDt1LmI9Zyx1W2hdPXYsci5ub3JtfHwocC5wdXNoKHYpLHUuaGFzQiYmcC5wdXNoKGcpKX1yLm5vcm18fChhLl9leHRyZW1lc1t0Ll9pZF09cy5maW5kRXh0cmVtZXModCxwLHt0b3plcm86ITAscGFkZGVkOiEwfSkpfX0ocixvLGEpO2Zvcih2YXIgbD0wO2w8bi5sZW5ndGg7bCsrKWZvcih2YXIgdT1uW2xdLGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIHA9dVtoXTtpZihwLnMhPT1pKXt2YXIgZD1wLmIrcC5zPT09by5nZXQocC5wLHAucyk7ZCYmKHAuX291dG1vc3Q9ITApfX1hLm5vcm0mJnkocixvLGEpfSgwLGUscixfLHUpLGIubGVuZ3RoJiZoKGUscixiLHUpfSFmdW5jdGlvbih0LGUpe3ZhciByLGEsaSxvPXgoZSkscz17fSxsPTEvMCxjPS0xLzA7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylmb3IoaT10W3JdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHU9aVthXS5wO24odSkmJihsPU1hdGgubWluKGwsdSksYz1NYXRoLm1heChjLHUpKX12YXIgaD0xZTQvKGMtbCksZj1zLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZChoKih0LWwpKSl9O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspeyhpPXRbcl0pWzBdLnQuZXh0ZW50cz1zO3ZhciBwPWlbMF0udC5wb2Zmc2V0LGQ9QXJyYXkuaXNBcnJheShwKTtmb3IoYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgZz1pW2FdLHY9Z1tvXS1nLncvMjtpZihuKHYpKXt2YXIgbT1nW29dK2cudy8yLHk9ZihnLnApO3NbeV0/c1t5XT1bTWF0aC5taW4odixzW3ldWzBdKSxNYXRoLm1heChtLHNbeV1bMV0pXTpzW3ldPVt2LG1dfWcucDA9Zy5wKyhkP3BbYV06cCksZy5wMT1nLnAwK2cudyxnLnMwPWcuYixnLnMxPWcuczArZy5zfX19KG8sZSl9fWZ1bmN0aW9uIGgodCxlLHIsbil7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBpPXJbYV0sbz1uZXcgYyhbaV0se3NlcE5lZ1ZhbDohMSxvdmVybGFwTm9NZXJnZTohbi5ub3JtfSk7Zih0LG8sbiksbi5ub3JtPyhtKG8pLHkoZSxvLG4pKTp2KGUsbyl9fWZ1bmN0aW9uIGYodCxlLHIpe2Zvcih2YXIgbj1lLm1pbkRpZmYsYT1lLnRyYWNlcyxpPW4qKDEtci5nYXApLG89aSooMS0oci5ncm91cGdhcHx8MCkpLHM9LW8vMixsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciBjPWFbbF1bMF0udDtjLmJhcndpZHRoPW8sYy5wb2Zmc2V0PXMsYy5iYXJncm91cHdpZHRoPWksYy5iYXJkZWx0YT1ufWUuYmluV2lkdGg9YVswXVswXS50LmJhcndpZHRoLzEwMCxwKGUpLGQodCxlKSxnKHQsZSl9ZnVuY3Rpb24gcCh0KXt2YXIgZSxyLGk9dC50cmFjZXM7Zm9yKGU9MDtlPGkubGVuZ3RoO2UrKyl7dmFyIG8scz1pW2VdLGw9c1swXSxjPWwudHJhY2UsdT1sLnQsaD1jLl9vZmZzZXR8fGMub2Zmc2V0LGY9dS5wb2Zmc2V0O2lmKGEoaCkpe2ZvcihvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGgsMCxzLmxlbmd0aCkscj0wO3I8by5sZW5ndGg7cisrKW4ob1tyXSl8fChvW3JdPWYpO2ZvcihyPW8ubGVuZ3RoO3I8cy5sZW5ndGg7cisrKW8ucHVzaChmKTt1LnBvZmZzZXQ9b31lbHNlIHZvaWQgMCE9PWgmJih1LnBvZmZzZXQ9aCk7dmFyIHA9Yy5fd2lkdGh8fGMud2lkdGgsZD11LmJhcndpZHRoO2lmKGEocCkpe3ZhciBnPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHAsMCxzLmxlbmd0aCk7Zm9yKHI9MDtyPGcubGVuZ3RoO3IrKyluKGdbcl0pfHwoZ1tyXT1kKTtmb3Iocj1nLmxlbmd0aDtyPHMubGVuZ3RoO3IrKylnLnB1c2goZCk7aWYodS5iYXJ3aWR0aD1nLHZvaWQgMD09PWgpe2ZvcihvPVtdLHI9MDtyPHMubGVuZ3RoO3IrKylvLnB1c2goZisoZC1nW3JdKS8yKTt1LnBvZmZzZXQ9b319ZWxzZSB2b2lkIDAhPT1wJiYodS5iYXJ3aWR0aD1wLHZvaWQgMD09PWgmJih1LnBvZmZzZXQ9ZisoZC1wKS8yKSl9fWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9ZS50cmFjZXMsbj14KHQpLGE9MDthPHIubGVuZ3RoO2ErKylmb3IodmFyIGk9clthXSxvPWlbMF0udCxzPW8ucG9mZnNldCxsPUFycmF5LmlzQXJyYXkocyksYz1vLmJhcndpZHRoLHU9QXJyYXkuaXNBcnJheShjKSxoPTA7aDxpLmxlbmd0aDtoKyspe3ZhciBmPWlbaF0scD1mLnc9dT9jW2hdOmM7ZltuXT1mLnArKGw/c1toXTpzKStwLzJ9fWZ1bmN0aW9uIGcodCxlLHIpe3ZhciBuPWUudHJhY2VzLGE9ZS5taW5EaWZmLzI7cy5taW5EdGljayh0LGUubWluRGlmZixlLmRpc3RpbmN0UG9zaXRpb25zWzBdLHIpO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbyxsLGMsdSxoPW5baV0sZj1oWzBdLHA9Zi50cmFjZSxkPVtdO2Zvcih1PTA7dTxoLmxlbmd0aDt1KyspbD0obz1oW3VdKS5wLWEsYz1vLnArYSxkLnB1c2gobCxjKTtpZihwLndpZHRofHxwLm9mZnNldCl7dmFyIGc9Zi50LHY9Zy5wb2Zmc2V0LG09Zy5iYXJ3aWR0aCx5PUFycmF5LmlzQXJyYXkodikseD1BcnJheS5pc0FycmF5KG0pO2Zvcih1PTA7dTxoLmxlbmd0aDt1Kyspe289aFt1XTt2YXIgYj15P3ZbdV06dixfPXg/bVt1XTptO2M9KGw9by5wK2IpK18sZC5wdXNoKGwsYyl9fXAuX2V4dHJlbWVzW3QuX2lkXT1zLmZpbmRFeHRyZW1lcyh0LGQse3BhZGRlZDohMX0pfX1mdW5jdGlvbiB2KHQsZSl7Zm9yKHZhciByPWUudHJhY2VzLG49eCh0KSxhPTA7YTxyLmxlbmd0aDthKyspe2Zvcih2YXIgaT1yW2FdLG89aVswXS50cmFjZSxsPVtdLGM9ITAsdT0wO3U8aS5sZW5ndGg7dSsrKXt2YXIgaD1pW3VdLGY9aC5iLHA9ZitoLnM7aFtuXT1wLGwucHVzaChwKSxoLmhhc0ImJmwucHVzaChmKSxoLmhhc0ImJmguYj4wJiZoLnM+MHx8KGM9ITEpfW8uX2V4dHJlbWVzW3QuX2lkXT1zLmZpbmRFeHRyZW1lcyh0LGwse3RvemVybzohYyxwYWRkZWQ6ITB9KX19ZnVuY3Rpb24gbSh0KXtmb3IodmFyIGU9dC50cmFjZXMscj0wO3I8ZS5sZW5ndGg7cisrKWZvcih2YXIgbj1lW3JdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXTtvLnMhPT1pJiZ0LnB1dChvLnAsby5iK28ucyl9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBhPWUudHJhY2VzLG89eCh0KSxsPSJmcmFjdGlvbiI9PT1yLm5vcm0/MToxMDAsYz1sLzFlOSx1PXQubDJjKHQuYzJsKDApKSxoPSJzdGFjayI9PT1yLm1vZGU/bDp1O2Z1bmN0aW9uIGYoZSl7cmV0dXJuIG4odC5jMmwoZSkpJiYoZTx1LWN8fGU+aCtjfHwhbih1KSl9Zm9yKHZhciBwPTA7cDxhLmxlbmd0aDtwKyspe2Zvcih2YXIgZD1hW3BdLGc9ZFswXS50cmFjZSx2PVtdLG09ITAseT0hMSxiPTA7YjxkLmxlbmd0aDtiKyspe3ZhciBfPWRbYl07aWYoXy5zIT09aSl7dmFyIHc9TWF0aC5hYnMobC9lLmdldChfLnAsXy5zKSk7Xy5iKj13LF8ucyo9dzt2YXIgaz1fLmIsVD1rK18ucztfW29dPVQsdi5wdXNoKFQpLHk9eXx8ZihUKSxfLmhhc0ImJih2LnB1c2goaykseT15fHxmKGspKSxfLmhhc0ImJl8uYj4wJiZfLnM+MHx8KG09ITEpfX1nLl9leHRyZW1lc1t0Ll9pZF09cy5maW5kRXh0cmVtZXModCx2LHt0b3plcm86IW0scGFkZGVkOnl9KX19ZnVuY3Rpb24geCh0KXtyZXR1cm4gdC5faWQuY2hhckF0KDApfWUuZXhwb3J0cz17Y3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS54YXhpcyxuPWUueWF4aXMsYT10Ll9mdWxsTGF5b3V0LGk9dC5fZnVsbERhdGEscz10LmNhbGNkYXRhLGw9W10sYz1bXSxoPTA7aDxpLmxlbmd0aDtoKyspe3ZhciBmPWlbaF07ITA9PT1mLnZpc2libGUmJm8udHJhY2VJcyhmLCJiYXIiKSYmZi54YXhpcz09PXIuX2lkJiZmLnlheGlzPT09bi5faWQmJigiaCI9PT1mLm9yaWVudGF0aW9uP2wucHVzaChzW2hdKTpjLnB1c2goc1toXSkpfXZhciBwPXttb2RlOmEuYmFybW9kZSxub3JtOmEuYmFybm9ybSxnYXA6YS5iYXJnYXAsZ3JvdXBnYXA6YS5iYXJncm91cGdhcH07dSh0LHIsbixjLHApLHUodCxuLHIsbCxwKX0sc2V0R3JvdXBQb3NpdGlvbnM6dX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NjgsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4vc2lldmUuanMiOjg2OSwiZmFzdC1pc251bWVyaWMiOjIyOH1dLDg2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIikscz10KCIuL3N0eWxlX2RlZmF1bHRzIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKS5nZXRBeGlzR3JvdXAsYz10KCIuL2F0dHJpYnV0ZXMiKSx1PW4uY29lcmNlRm9udDtmdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBhPWUub3JpZW50YXRpb24saT1lW3t2OiJ4IixoOiJ5In1bYV0rImF4aXMiXSxvPWwocixpKSthLHM9ci5fYWxpZ25tZW50T3B0c3x8e30sYz1uKCJhbGlnbm1lbnRncm91cCIpLHU9c1tvXTt1fHwodT1zW29dPXt9KTt2YXIgaD11W2NdO2g/aC50cmFjZXMucHVzaChlKTpoPXVbY109e3RyYWNlczpbZV0sYWxpZ25tZW50SW5kZXg6T2JqZWN0LmtleXModSkubGVuZ3RoLG9mZnNldEdyb3Vwczp7fX07dmFyIGY9bigib2Zmc2V0Z3JvdXAiKSxwPWgub2Zmc2V0R3JvdXBzLGQ9cFtmXTtmJiYoZHx8KGQ9cFtmXT17b2Zmc2V0SW5kZXg6T2JqZWN0LmtleXMocCkubGVuZ3RofSksZS5fb2Zmc2V0SW5kZXg9ZC5vZmZzZXRJbmRleCl9ZnVuY3Rpb24gZih0LGUscixhLGksbyl7dmFyIHM9ISghMT09PShvPW98fHt9KS5tb2R1bGVIYXNTZWxlY3RlZCksbD0hKCExPT09by5tb2R1bGVIYXNVbnNlbGVjdGVkKSxjPSEoITE9PT1vLm1vZHVsZUhhc0NvbnN0cmFpbiksaD0hKCExPT09by5tb2R1bGVIYXNDbGlwb25heGlzKSxmPSEoITE9PT1vLm1vZHVsZUhhc1RleHRhbmdsZSkscD0hKCExPT09by5tb2R1bGVIYXNJbnNpZGVhbmNob3IpLGQ9ISFvLmhhc1BhdGhiYXIsZz1BcnJheS5pc0FycmF5KGkpfHwiYXV0byI9PT1pLHY9Z3x8Imluc2lkZSI9PT1pLG09Z3x8Im91dHNpZGUiPT09aTtpZih2fHxtKXt2YXIgeT11KGEsInRleHRmb250IixyLmZvbnQpLHg9bi5leHRlbmRGbGF0KHt9LHkpLGI9ISh0LnRleHRmb250JiZ0LnRleHRmb250LmNvbG9yKTtpZihiJiZkZWxldGUgeC5jb2xvcix1KGEsImluc2lkZXRleHRmb250Iix4KSxkKXt2YXIgXz1uLmV4dGVuZEZsYXQoe30seSk7YiYmZGVsZXRlIF8uY29sb3IsdShhLCJwYXRoYmFyLnRleHRmb250IixfKX1tJiZ1KGEsIm91dHNpZGV0ZXh0Zm9udCIseSkscyYmYSgic2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSxsJiZhKCJ1bnNlbGVjdGVkLnRleHRmb250LmNvbG9yIiksYyYmYSgiY29uc3RyYWludGV4dCIpLGgmJmEoImNsaXBvbmF4aXMiKSxmJiZhKCJ0ZXh0YW5nbGUiKSxhKCJ0ZXh0dGVtcGxhdGUiKX12JiZwJiZhKCJpbnNpZGV0ZXh0YW5jaG9yIil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiB1KHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsYSl9aWYobyh0LGUsbCx1KSl7dSgib3JpZW50YXRpb24iLGUueCYmIWUueT8iaCI6InYiKSx1KCJiYXNlIiksdSgib2Zmc2V0IiksdSgid2lkdGgiKSx1KCJ0ZXh0IiksdSgiaG92ZXJ0ZXh0IiksdSgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBoPXUoInRleHRwb3NpdGlvbiIpO2YodCwwLGwsdSxoLHttb2R1bGVIYXNTZWxlY3RlZDohMCxtb2R1bGVIYXNVbnNlbGVjdGVkOiEwLG1vZHVsZUhhc0NvbnN0cmFpbjohMCxtb2R1bGVIYXNDbGlwb25heGlzOiEwLG1vZHVsZUhhc1RleHRhbmdsZTohMCxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITB9KSxzKHQsZSx1LHIsbCk7dmFyIHA9KGUubWFya2VyLmxpbmV8fHt9KS5jb2xvcixkPWkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO2QodCxlLHB8fGEuZGVmYXVsdExpbmUse2F4aXM6InkifSksZCh0LGUscHx8YS5kZWZhdWx0TGluZSx7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSx1KX1lbHNlIGUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbi5jb2VyY2Uoci5faW5wdXQscixjLHQpfWlmKCJncm91cCI9PT1lLmJhcm1vZGUpZm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspImJhciI9PT0ocj10W2ldKS50eXBlJiYoci5faW5wdXQsaCgwLHIsZSxhKSl9LGhhbmRsZUdyb3VwaW5nRGVmYXVsdHM6aCxoYW5kbGVUZXh0OmZ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzY4LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjoxMTQ2LCIuL2F0dHJpYnV0ZXMiOjg1NiwiLi9zdHlsZV9kZWZhdWx0cyI6ODcxfV0sODYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSwiaCI9PT1yLm9yaWVudGF0aW9uPyh0LmxhYmVsPXQueSx0LnZhbHVlPXQueCk6KHQubGFiZWw9dC54LHQudmFsdWU9dC55KSx0fX0se31dLDg2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgidGlueWNvbG9yMiIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtyLmNvZXJjZVN0cmluZz1mdW5jdGlvbih0LGUscil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZihlfHwhdC5ub0JsYW5rKXJldHVybiBlfWVsc2UgaWYoKCJudW1iZXIiPT10eXBlb2YgZXx8ITA9PT1lKSYmIXQuc3RyaWN0KXJldHVybiBTdHJpbmcoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlTnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXtpZihuKGUpKXtlPStlO3ZhciBhPXQubWluLGk9dC5tYXg7aWYoISh2b2lkIDAhPT1hJiZlPGF8fHZvaWQgMCE9PWkmJmU+aSkpcmV0dXJuIGV9cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlQ29sb3I9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBhKGUpLmlzVmFsaWQoKT9lOnZvaWQgMCE9PXI/cjp0LmRmbHR9LHIuY29lcmNlRW51bWVyYXRlZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQuY29lcmNlTnVtYmVyJiYoZT0rZSksLTEhPT10LnZhbHVlcy5pbmRleE9mKGUpP2U6dm9pZCAwIT09cj9yOnQuZGZsdH0sci5nZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U8dC5sZW5ndGgmJihyPXRbZV0pOnI9dCxyfSxyLmdldExpbmVXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiAwPGUubWx3P2UubWx3OmkodC5tYXJrZXIubGluZS53aWR0aCk/MDp0Lm1hcmtlci5saW5lLndpZHRofX0seyIuLi8uLi9saWIiOjcxNywiZmFzdC1pc251bWVyaWMiOjIyOCx0aW55Y29sb3IyOjUzNn1dLDg2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vbGliIikuZmlsbFRleHQscz10KCIuL2hlbHBlcnMiKS5nZXRMaW5lV2lkdGgsbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLmhvdmVyTGFiZWxUZXh0O2Z1bmN0aW9uIGModCxlLHIsYSl7dmFyIGkscyxjLHUsaCxmLHAsZD10LmNkLGc9ZFswXS50cmFjZSx2PWRbMF0udCxtPSJjbG9zZXN0Ij09PWEseT0id2F0ZXJmYWxsIj09PWcudHlwZSx4PXQubWF4SG92ZXJEaXN0YW5jZSxiPXQubWF4U3Bpa2VEaXN0YW5jZTtmdW5jdGlvbiBfKHQpe3JldHVybiB0W2NdLXQudy8yfWZ1bmN0aW9uIHcodCl7cmV0dXJuIHRbY10rdC53LzJ9dmFyIGs9bT9fOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1pbihfKHQpLHQucC12LmJhcmRlbHRhLzIpfSxUPW0/dzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgodyh0KSx0LnArdi5iYXJkZWx0YS8yKX07ZnVuY3Rpb24gTSh0LGUpe3JldHVybiBuLmluYm94KHQtaSxlLWkseCtNYXRoLm1pbigxLE1hdGguYWJzKGUtdCkvcCktMSl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gTShrKHQpLFQodCkpfWZ1bmN0aW9uIFModCl7dmFyIGU9cyxyPXQuYixhPXRbdV07aWYoeSl7dmFyIGk9TWF0aC5hYnModC5yYXdTKXx8MDtlPjA/YSs9aTplPDAmJihhLT1pKX1yZXR1cm4gbi5pbmJveChyLWUsYS1lLHgrKGEtZSkvKGEtciktMSl9ImgiPT09Zy5vcmllbnRhdGlvbj8oaT1yLHM9ZSxjPSJ5Iix1PSJ4IixoPVMsZj1BKTooaT1lLHM9cixjPSJ4Iix1PSJ5IixmPVMsaD1BKTt2YXIgRT10W2MrImEiXSxMPXRbdSsiYSJdO3A9TWF0aC5hYnMoRS5yMmMoRS5yYW5nZVsxXSktRS5yMmMoRS5yYW5nZVswXSkpO3ZhciBDPW4uZ2V0RGlzdGFuY2VGdW5jdGlvbihhLGgsZixmdW5jdGlvbih0KXtyZXR1cm4oaCh0KStmKHQpKS8yfSk7aWYobi5nZXRDbG9zZXN0KGQsQyx0KSwhMSE9PXQuaW5kZXgpe218fChrPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1pbihfKHQpLHQucC12LmJhcmdyb3Vwd2lkdGgvMil9LFQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KHcodCksdC5wK3YuYmFyZ3JvdXB3aWR0aC8yKX0pO3ZhciBQPWRbdC5pbmRleF0sTz1nLmJhc2U/UC5iK1AuczpQLnM7dFt1KyIwIl09dFt1KyIxIl09TC5jMnAoUFt1XSwhMCksdFt1KyJMYWJlbFZhbCJdPU87dmFyIHo9di5leHRlbnRzW3YuZXh0ZW50cy5yb3VuZChQLnApXTtyZXR1cm4gdFtjKyIwIl09RS5jMnAobT9rKFApOnpbMF0sITApLHRbYysiMSJdPUUuYzJwKG0/VChQKTp6WzFdLCEwKSx0W2MrIkxhYmVsVmFsIl09UC5wLHQubGFiZWxMYWJlbD1sKEUsdFtjKyJMYWJlbFZhbCJdKSx0LnZhbHVlTGFiZWw9bChMLHRbdSsiTGFiZWxWYWwiXSksdC5zcGlrZURpc3RhbmNlPShTKFApK2Z1bmN0aW9uKHQpe3JldHVybiBNKF8odCksdyh0KSl9KFApKS8yK2IteCx0W2MrIlNwaWtlIl09RS5jMnAoUC5wLCEwKSxvKFAsZyx0KSx0LmhvdmVydGVtcGxhdGU9Zy5ob3ZlcnRlbXBsYXRlLHR9fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1lLm1jY3x8dC5tYXJrZXIuY29sb3Isbj1lLm1sY2N8fHQubWFya2VyLmxpbmUuY29sb3IsYT1zKHQsZSk7cmV0dXJuIGkub3BhY2l0eShyKT9yOmkub3BhY2l0eShuKSYmYT9uOnZvaWQgMH1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWModCxlLHIsbik7aWYoaSl7dmFyIG89aS5jZCxzPW9bMF0udHJhY2UsbD1vW2kuaW5kZXhdO3JldHVybiBpLmNvbG9yPXUocyxsKSxhLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikobCxzLGkpLFtpXX19LGhvdmVyT25CYXJzOmMsZ2V0VHJhY2VDb2xvcjp1fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYzMCwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4vaGVscGVycyI6ODYyfV0sODY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLmNyb3NzVHJhY2VDYWxjLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksYXJyYXlzVG9DYWxjZGF0YTp0KCIuL2FycmF5c190b19jYWxjZGF0YSIpLHBsb3Q6dCgiLi9wbG90IikucGxvdCxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJiYXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJiYXItbGlrZSIsImNhcnRlc2lhbiIsInN2ZyIsImJhciIsIm9yaWVudGVkIiwiZXJyb3JCYXJzT0siLCJzaG93TGVnZW5kIiwiem9vbVNjYWxlIl0sYW5pbWF0YWJsZTohMCxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NiwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjExMzgsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjo4NTUsIi4vYXR0cmlidXRlcyI6ODU2LCIuL2NhbGMiOjg1NywiLi9jcm9zc190cmFjZV9jYWxjIjo4NTksIi4vZGVmYXVsdHMiOjg2MCwiLi9ldmVudF9kYXRhIjo4NjEsIi4vaG92ZXIiOjg2MywiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODY1LCIuL2xheW91dF9kZWZhdWx0cyI6ODY2LCIuL3Bsb3QiOjg2NywiLi9zZWxlY3QiOjg2OCwiLi9zdHlsZSI6ODcwfV0sODY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YmFybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhY2siLCJncm91cCIsIm92ZXJsYXkiLCJyZWxhdGl2ZSJdLGRmbHQ6Imdyb3VwIixlZGl0VHlwZToiY2FsYyJ9LGJhcm5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsImZyYWN0aW9uIiwicGVyY2VudCJdLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxiYXJnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifSxiYXJncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw4NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIiKSxvPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIHMocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLG8scixuKX1mb3IodmFyIGw9ITEsYz0hMSx1PSExLGg9e30sZj1zKCJiYXJtb2RlIikscD0wO3A8ci5sZW5ndGg7cCsrKXt2YXIgZD1yW3BdO2lmKG4udHJhY2VJcyhkLCJiYXIiKSYmZC52aXNpYmxlKXtpZihsPSEwLCJncm91cCI9PT1mKXt2YXIgZz1kLnhheGlzK2QueWF4aXM7aFtnXSYmKHU9ITApLGhbZ109ITB9aWYoZC52aXNpYmxlJiYiaGlzdG9ncmFtIj09PWQudHlwZSkiY2F0ZWdvcnkiIT09YS5nZXRGcm9tSWQoe19mdWxsTGF5b3V0OmV9LGRbInYiPT09ZC5vcmllbnRhdGlvbj8ieGF4aXMiOiJ5YXhpcyJdKS50eXBlJiYoYz0hMCl9fWw/KCJvdmVybGF5IiE9PWYmJnMoImJhcm5vcm0iKSxzKCJiYXJnYXAiLGMmJiF1PzA6LjIpLHMoImJhcmdyb3VwZ2FwIikpOmRlbGV0ZSBlLmJhcm1vZGV9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NjV9XSw4Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi8uLi9yZWdpc3RyeSIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS50aWNrVGV4dCxoPXQoIi4vdW5pZm9ybV90ZXh0IiksZj1oLnJlY29yZE1pblRleHRTaXplLHA9aC5jbGVhck1pblRleHRTaXplLGQ9dCgiLi9zdHlsZSIpLGc9dCgiLi9oZWxwZXJzIiksdj10KCIuL2NvbnN0YW50cyIpLG09dCgiLi9hdHRyaWJ1dGVzIikseT1tLnRleHQseD1tLnRleHRwb3NpdGlvbixiPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxfPXYuVEVYVFBBRDtmdW5jdGlvbiB3KHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIGsodCl7aWYodC5pZHMpcmV0dXJuIHd9ZnVuY3Rpb24gVCh0LGUpe3JldHVybiB0PGU/MTotMX1mdW5jdGlvbiBNKHQsZSxyLG4pe3ZhciBhO3JldHVybiFlLnVuaWZvcm10ZXh0Lm1vZGUmJkEocik/KG4mJihhPW4oKSksdC50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykuZWFjaCgiZW5kIixmdW5jdGlvbigpe2EmJmEoKX0pLmVhY2goImludGVycnVwdCIsZnVuY3Rpb24oKXthJiZhKCl9KSk6dH1mdW5jdGlvbiBBKHQpe3JldHVybiB0JiZ0LmR1cmF0aW9uPjB9ZnVuY3Rpb24gUyh0KXtyZXR1cm4iYXV0byI9PT10PzA6dH1mdW5jdGlvbiBFKHQsZSl7dmFyIHI9TWF0aC5QSS8xODAqZSxuPU1hdGguYWJzKE1hdGguc2luKHIpKSxhPU1hdGguYWJzKE1hdGguY29zKHIpKTtyZXR1cm57eDp0LndpZHRoKmErdC5oZWlnaHQqbix5OnQud2lkdGgqbit0LmhlaWdodCphfX1mdW5jdGlvbiBMKHQsZSxyLG4sYSxpKXt2YXIgbz0hIWkuaXNIb3Jpem9udGFsLHM9ISFpLmNvbnN0cmFpbmVkLGw9aS5hbmdsZXx8MCxjPWkuYW5jaG9yfHwiZW5kIix1PSJlbmQiPT09YyxoPSJzdGFydCI9PT1jLGY9KChpLmxlZnRUb1JpZ2h0fHwwKSsxKS8yLHA9MS1mLGQ9YS53aWR0aCxnPWEuaGVpZ2h0LHY9TWF0aC5hYnMoZS10KSxtPU1hdGguYWJzKG4tcikseT12PjIqXyYmbT4yKl8/XzowO3YtPTIqeSxtLT0yKnk7dmFyIHg9UyhsKTsiYXV0byIhPT1sfHxkPD12JiZnPD1tfHwhKGQ+dnx8Zz5tKXx8KGQ+bXx8Zz52KSYmZDxnPT12PG18fCh4Kz05MCk7dmFyIGI9RShhLHgpLHc9MTtzJiYodz1NYXRoLm1pbigxLHYvYi54LG0vYi55KSk7dmFyIGs9YS5sZWZ0KnArYS5yaWdodCpmLE09KGEudG9wK2EuYm90dG9tKS8yLEE9KHQrXykqcCsoZS1fKSpmLEw9KHIrbikvMixDPTAsUD0wO2lmKGh8fHUpe3ZhciBPPShvP2IueDpiLnkpLzIsej1vP1QodCxlKTpUKHIsbik7bz9oPyhBPXQreip5LEM9LXoqTyk6KEE9ZS16KnksQz16Kk8pOmg/KEw9cit6KnksUD0teipPKTooTD1uLXoqeSxQPXoqTyl9cmV0dXJue3RleHRYOmssdGV4dFk6TSx0YXJnZXRYOkEsdGFyZ2V0WTpMLGFuY2hvclg6QyxhbmNob3JZOlAsc2NhbGU6dyxyb3RhdGU6eH19ZS5leHBvcnRzPXtwbG90OmZ1bmN0aW9uKHQsZSxyLGgsdixtKXt2YXIgdz1lLnhheGlzLEM9ZS55YXhpcyxQPXQuX2Z1bGxMYXlvdXQ7dnx8KHY9e21vZGU6UC5iYXJtb2RlLG5vcm06UC5iYXJtb2RlLGdhcDpQLmJhcmdhcCxncm91cGdhcDpQLmJhcmdyb3VwZ2FwfSxwKCJiYXIiLFApKTt2YXIgTz1pLm1ha2VUcmFjZUdyb3VwcyhoLHIsInRyYWNlIGJhcnMiKS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBjPW4uc2VsZWN0KHRoaXMpLGg9clswXS50cmFjZSxwPSJ3YXRlcmZhbGwiPT09aC50eXBlLE89ImZ1bm5lbCI9PT1oLnR5cGUsej0iYmFyIj09PWgudHlwZXx8TyxJPTA7cCYmaC5jb25uZWN0b3IudmlzaWJsZSYmImJldHdlZW4iPT09aC5jb25uZWN0b3IubW9kZSYmKEk9aC5jb25uZWN0b3IubGluZS53aWR0aC8yKTt2YXIgRD0iaCI9PT1oLm9yaWVudGF0aW9uLFI9aS5lbnN1cmVTaW5nbGUoYywiZyIsInBvaW50cyIpLEY9ayhoKSxCPVIuc2VsZWN0QWxsKCJnLnBvaW50IikuZGF0YShpLmlkZW50aXR5LEYpO0IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludCIsITApLEIuZXhpdCgpLnJlbW92ZSgpLEIuZWFjaChmdW5jdGlvbihjLHApe3ZhciBrPW4uc2VsZWN0KHRoaXMpLE89ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9W10saT1bXSxvPW4/ZTpyLHM9bj9yOmU7cmV0dXJuIGFbMF09by5jMnAodC5zMCwhMCksaVswXT1zLmMycCh0LnAwLCEwKSxhWzFdPW8uYzJwKHQuczEsITApLGlbMV09cy5jMnAodC5wMSwhMCksbj9bYSxpXTpbaSxhXX0oYyx3LEMsRCksUj1PWzBdWzBdLEY9T1swXVsxXSxCPU9bMV1bMF0sTj1PWzFdWzFdLGo9IShSIT09RiYmQiE9PU4mJmEoUikmJmEoRikmJmEoQikmJmEoTikpO2omJnomJmcuZ2V0TGluZVdpZHRoKGgsYykmJihEP0YtUj09MDpOLUI9PTApJiYoaj0hMSksYy5pc0JsYW5rPWosaiYmRCYmKEY9UiksaiYmIUQmJihOPUIpO3ZhciBWLFUscT1EJiZSIT09RixIPSFEJiZCIT09TjtpZihJJiYhaiYmKEQ/KFItPVQoUixGKSpJLEYrPVQoUixGKSpJKTooQi09VChCLE4pKkksTis9VChCLE4pKkkpKSwid2F0ZXJmYWxsIj09PWgudHlwZSl7aWYoIWope3ZhciBHPWhbYy5kaXJdLm1hcmtlcjtWPUcubGluZS53aWR0aCxVPUcuY29sb3J9fWVsc2UgVj1nLmdldExpbmVXaWR0aChoLGMpLFU9Yy5tY3x8aC5tYXJrZXIuY29sb3I7dmFyIFk9bi5yb3VuZChWLzIlMSwyKTtmdW5jdGlvbiBXKHQpe3JldHVybiAwPT09di5nYXAmJjA9PT12Lmdyb3VwZ2FwP24ucm91bmQoTWF0aC5yb3VuZCh0KS1ZLDIpOnR9aWYoIXQuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIFg9cy5vcGFjaXR5KFUpPDF8fFY+LjAxP1c6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModC1lKT49Mj9XKHQpOnQ+ZT9NYXRoLmNlaWwodCk6TWF0aC5mbG9vcih0KX07cSYmKFI9WChSLEYpLEY9WChGLFIpKSxIJiYoQj1YKEIsTiksTj1YKE4sQikpfXZhciBaPU0oaS5lbnN1cmVTaW5nbGUoaywicGF0aCIpLFAsdixtKTtpZihaLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuYXR0cigiZCIsIk0iK1IrIiwiK0IrIlYiK04rIkgiK0YrIlYiK0IrIloiKS5jYWxsKGwuc2V0Q2xpcFVybCxlLmxheWVyQ2xpcElkLHQpLCFQLnVuaWZvcm10ZXh0Lm1vZGUmJkEodikpe3ZhciBKPWwubWFrZVBvaW50U3R5bGVGbnMoaCk7bC5zaW5nbGVQb2ludFN0eWxlKGMsWixoLEosdCl9IWZ1bmN0aW9uKHQsZSxyLG4sYSxzLGMsaCxwLHYsbSl7dmFyIHcsaz1lLnhheGlzLEE9ZS55YXhpcyxDPXQuX2Z1bGxMYXlvdXQ7ZnVuY3Rpb24gUChlLHIsbil7dmFyIGE9aS5lbnN1cmVTaW5nbGUoZSwidGV4dCIpLnRleHQocikuYXR0cih7Y2xhc3M6ImJhcnRleHQgYmFydGV4dC0iK3csInRleHQtYW5jaG9yIjoibWlkZGxlIiwiZGF0YS1ub3RleCI6MX0pLmNhbGwobC5mb250LG4pLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsdCk7cmV0dXJuIGF9dmFyIE89blswXS50cmFjZSx6PSJoIj09PU8ub3JpZW50YXRpb24sST1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvLHM9ZVswXS50cmFjZTtyZXR1cm4gbz1zLnRleHR0ZW1wbGF0ZT9mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPWVbMF0udHJhY2Uscz1pLmNhc3RPcHRpb24obyxyLCJ0ZXh0dGVtcGxhdGUiKTtpZighcylyZXR1cm4iIjt2YXIgbCxjLGgsZixwPSJ3YXRlcmZhbGwiPT09by50eXBlLGQ9ImZ1bm5lbCI9PT1vLnR5cGU7ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdShmLCt0LCEwKS50ZXh0fSJoIj09PW8ub3JpZW50YXRpb24/KGw9InkiLGM9YSxoPSJ4IixmPW4pOihsPSJ4IixjPW4saD0ieSIsZj1hKTt2YXIgdixtPWVbcl0seT17fTt5LmxhYmVsPW0ucCx5LmxhYmVsTGFiZWw9eVtsKyJMYWJlbCJdPSh2PW0ucCx1KGMsdiwhMCkudGV4dCk7dmFyIHg9aS5jYXN0T3B0aW9uKG8sbS5pLCJ0ZXh0Iik7KDA9PT14fHx4KSYmKHkudGV4dD14KSx5LnZhbHVlPW0ucyx5LnZhbHVlTGFiZWw9eVtoKyJMYWJlbCJdPWcobS5zKTt2YXIgXz17fTtiKF8sbyxtLmkpLHAmJih5LmRlbHRhPSttLnJhd1N8fG0ucyx5LmRlbHRhTGFiZWw9Zyh5LmRlbHRhKSx5LmZpbmFsPW0udix5LmZpbmFsTGFiZWw9Zyh5LmZpbmFsKSx5LmluaXRpYWw9eS5maW5hbC15LmRlbHRhLHkuaW5pdGlhbExhYmVsPWcoeS5pbml0aWFsKSksZCYmKHkudmFsdWU9bS5zLHkudmFsdWVMYWJlbD1nKHkudmFsdWUpLHkucGVyY2VudEluaXRpYWw9bS5iZWdSLHkucGVyY2VudEluaXRpYWxMYWJlbD1pLmZvcm1hdFBlcmNlbnQobS5iZWdSKSx5LnBlcmNlbnRQcmV2aW91cz1tLmRpZlIseS5wZXJjZW50UHJldmlvdXNMYWJlbD1pLmZvcm1hdFBlcmNlbnQobS5kaWZSKSx5LnBlcmNlbnRUb3RhbD1tLnN1bVIseS5wZXJjZW5Ub3RhbExhYmVsPWkuZm9ybWF0UGVyY2VudChtLnN1bVIpKTt2YXIgdz1pLmNhc3RPcHRpb24obyxtLmksImN1c3RvbWRhdGEiKTtyZXR1cm4gdyYmKHkuY3VzdG9tZGF0YT13KSxpLnRleHR0ZW1wbGF0ZVN0cmluZyhzLHksdC5fZDNsb2NhbGUsXyx5LG8uX21ldGF8fHt9KX0odCxlLHIsbixhKTpzLnRleHRpbmZvP2Z1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXRbMF0udHJhY2Usbz0iaCI9PT1hLm9yaWVudGF0aW9uLHM9IndhdGVyZmFsbCI9PT1hLnR5cGUsbD0iZnVubmVsIj09PWEudHlwZTtmdW5jdGlvbiBjKHQpe3ZhciBlPW8/cjpuO3JldHVybiB1KGUsK3QsITApLnRleHR9dmFyIGgsZixwPWEudGV4dGluZm8sZD10W2VdLGc9cC5zcGxpdCgiKyIpLHY9W10sbT1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PWcuaW5kZXhPZih0KX07aWYobSgibGFiZWwiKSYmdi5wdXNoKChmPXRbZV0ucCx1KG8/bjpyLGYsITApLnRleHQpKSxtKCJ0ZXh0IikmJigwPT09KGg9aS5jYXN0T3B0aW9uKGEsZC5pLCJ0ZXh0IikpfHxoKSYmdi5wdXNoKGgpLHMpe3ZhciB5PStkLnJhd1N8fGQucyx4PWQudixiPXgteTttKCJpbml0aWFsIikmJnYucHVzaChjKGIpKSxtKCJkZWx0YSIpJiZ2LnB1c2goYyh5KSksbSgiZmluYWwiKSYmdi5wdXNoKGMoeCkpfWlmKGwpe20oInZhbHVlIikmJnYucHVzaChjKGQucykpO3ZhciBfPTA7bSgicGVyY2VudCBpbml0aWFsIikmJl8rKyxtKCJwZXJjZW50IHByZXZpb3VzIikmJl8rKyxtKCJwZXJjZW50IHRvdGFsIikmJl8rKzt2YXIgdz1fPjE7bSgicGVyY2VudCBpbml0aWFsIikmJihoPWkuZm9ybWF0UGVyY2VudChkLmJlZ1IpLHcmJihoKz0iIG9mIGluaXRpYWwiKSx2LnB1c2goaCkpLG0oInBlcmNlbnQgcHJldmlvdXMiKSYmKGg9aS5mb3JtYXRQZXJjZW50KGQuZGlmUiksdyYmKGgrPSIgb2YgcHJldmlvdXMiKSx2LnB1c2goaCkpLG0oInBlcmNlbnQgdG90YWwiKSYmKGg9aS5mb3JtYXRQZXJjZW50KGQuc3VtUiksdyYmKGgrPSIgb2YgdG90YWwiKSx2LnB1c2goaCkpfXJldHVybiB2LmpvaW4oIjxicj4iKX0oZSxyLG4sYSk6Zy5nZXRWYWx1ZShzLnRleHQsciksZy5jb2VyY2VTdHJpbmcoeSxvKX0oQyxuLGEsayxBKTt3PWZ1bmN0aW9uKHQsZSl7dmFyIHI9Zy5nZXRWYWx1ZSh0LnRleHRwb3NpdGlvbixlKTtyZXR1cm4gZy5jb2VyY2VFbnVtZXJhdGVkKHgscil9KE8sYSk7dmFyIEQ9InN0YWNrIj09PXYubW9kZXx8InJlbGF0aXZlIj09PXYubW9kZSxSPW5bYV0sRj0hRHx8Ui5fb3V0bW9zdDtpZihJJiYibm9uZSIhPT13JiYoIVIuaXNCbGFuayYmcyE9PWMmJmghPT1wfHwiYXV0byIhPT13JiYiaW5zaWRlIiE9PXcpKXt2YXIgQj1DLmZvbnQsTj1kLmdldEJhckNvbG9yKG5bYV0sTyksaj1kLmdldEluc2lkZVRleHRGb250KE8sYSxCLE4pLFY9ZC5nZXRPdXRzaWRlVGV4dEZvbnQoTyxhLEIpLFU9ci5kYXR1bSgpO3o/ImxvZyI9PT1rLnR5cGUmJlUuczA8PTAmJihzPWsucmFuZ2VbMF08ay5yYW5nZVsxXT8wOmsuX2xlbmd0aCk6ImxvZyI9PT1BLnR5cGUmJlUuczA8PTAmJihoPUEucmFuZ2VbMF08QS5yYW5nZVsxXT9BLl9sZW5ndGg6MCk7dmFyIHEsSCxHLFksVyxYPU1hdGguYWJzKGMtcyktMipfLFo9TWF0aC5hYnMocC1oKS0yKl87aWYoIm91dHNpZGUiPT09dyYmKEZ8fFIuaGFzQnx8KHc9Imluc2lkZSIpKSwiYXV0byI9PT13KWlmKEYpe3c9Imluc2lkZSIsVz1pLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LGopLHE9UChyLEksVyksSD1sLmJCb3gocS5ub2RlKCkpLEc9SC53aWR0aCxZPUguaGVpZ2h0O3ZhciBKPUc+MCYmWT4wLEs9Rzw9WCYmWTw9WixRPUc8PVomJlk8PVgsJD16P1g+PUcqKFovWSk6Wj49WSooWC9HKTtKJiYoS3x8UXx8JCk/dz0iaW5zaWRlIjoodz0ib3V0c2lkZSIscS5yZW1vdmUoKSxxPW51bGwpfWVsc2Ugdz0iaW5zaWRlIjtpZighcSl7Vz1pLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LCJvdXRzaWRlIj09PXc/VjpqKTt2YXIgdHQ9KHE9UChyLEksVykpLmF0dHIoInRyYW5zZm9ybSIpO2lmKHEuYXR0cigidHJhbnNmb3JtIiwiIiksSD1sLmJCb3gocS5ub2RlKCkpLEc9SC53aWR0aCxZPUguaGVpZ2h0LHEuYXR0cigidHJhbnNmb3JtIix0dCksRzw9MHx8WTw9MClyZXR1cm4gdm9pZCBxLnJlbW92ZSgpfXZhciBldCxydCxudD1PLnRleHRhbmdsZTsib3V0c2lkZSI9PT13PyhydD0iYm90aCI9PT1PLmNvbnN0cmFpbnRleHR8fCJvdXRzaWRlIj09PU8uY29uc3RyYWludGV4dCxldD1mdW5jdGlvbih0LGUscixuLGEsaSl7dmFyIG8scz0hIWkuaXNIb3Jpem9udGFsLGw9ISFpLmNvbnN0cmFpbmVkLGM9aS5hbmdsZXx8MCx1PWEud2lkdGgsaD1hLmhlaWdodCxmPU1hdGguYWJzKGUtdCkscD1NYXRoLmFicyhuLXIpO289cz9wPjIqXz9fOjA6Zj4yKl8/XzowO3ZhciBkPTE7bCYmKGQ9cz9NYXRoLm1pbigxLHAvaCk6TWF0aC5taW4oMSxmL3UpKTt2YXIgZz1TKGMpLHY9RShhLGcpLG09KHM/di54OnYueSkvMix5PShhLmxlZnQrYS5yaWdodCkvMix4PShhLnRvcCthLmJvdHRvbSkvMixiPSh0K2UpLzIsdz0ocituKS8yLGs9MCxNPTAsQT1zP1QoZSx0KTpUKHIsbik7cmV0dXJuIHM/KGI9ZS1BKm8saz1BKm0pOih3PW4rQSpvLE09LUEqbSkse3RleHRYOnksdGV4dFk6eCx0YXJnZXRYOmIsdGFyZ2V0WTp3LGFuY2hvclg6ayxhbmNob3JZOk0sc2NhbGU6ZCxyb3RhdGU6Z319KHMsYyxoLHAsSCx7aXNIb3Jpem9udGFsOnosY29uc3RyYWluZWQ6cnQsYW5nbGU6bnR9KSk6KHJ0PSJib3RoIj09PU8uY29uc3RyYWludGV4dHx8Imluc2lkZSI9PT1PLmNvbnN0cmFpbnRleHQsZXQ9TChzLGMsaCxwLEgse2lzSG9yaXpvbnRhbDp6LGNvbnN0cmFpbmVkOnJ0LGFuZ2xlOm50LGFuY2hvcjpPLmluc2lkZXRleHRhbmNob3J9KSksZXQuZm9udFNpemU9Vy5zaXplLGYoTy50eXBlLGV0LEMpLFIudHJhbnNmb3JtPWV0LE0ocSxDLHYsbSkuYXR0cigidHJhbnNmb3JtIixpLmdldFRleHRUcmFuc2Zvcm0oZXQpKX1lbHNlIHIuc2VsZWN0KCJ0ZXh0IikucmVtb3ZlKCl9KHQsZSxrLHIscCxSLEYsQixOLHYsbSksZS5sYXllckNsaXBJZCYmbC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQoYyxrLnNlbGVjdCgidGV4dCIpLHcsQyxoLnhjYWxlbmRhcixoLnljYWxlbmRhcil9KTt2YXIgTj0hMT09PWguY2xpcG9uYXhpcztsLnNldENsaXBVcmwoYyxOP251bGw6ZS5sYXllckNsaXBJZCx0KX0pO2MuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJwbG90IikodCxPLGUsdil9LHRvTW92ZUluc2lkZUJhcjpMfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjYyNywiLi4vLi4vbGliIjo3MTcsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuL2F0dHJpYnV0ZXMiOjg1NiwiLi9jb25zdGFudHMiOjg1OCwiLi9oZWxwZXJzIjo4NjIsIi4vc3R5bGUiOjg3MCwiLi91bmlmb3JtX3RleHQiOjg3MixkMzoxNjUsImZhc3QtaXNudW1lcmljIjoyMjh9XSw4Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGEpe3ZhciBpPWUuYzJwKG4/dC5zMDp0LnAwLCEwKSxvPWUuYzJwKG4/dC5zMTp0LnAxLCEwKSxzPXIuYzJwKG4/dC5wMDp0LnMwLCEwKSxsPXIuYzJwKG4/dC5wMTp0LnMxLCEwKTtyZXR1cm4gYT9bKGkrbykvMiwocytsKS8yXTpuP1tvLChzK2wpLzJdOlsoaStvKS8yLGxdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGE9dC5jZCxpPXQueGF4aXMsbz10LnlheGlzLHM9YVswXS50cmFjZSxsPSJmdW5uZWwiPT09cy50eXBlLGM9ImgiPT09cy5vcmllbnRhdGlvbix1PVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8YS5sZW5ndGg7cisrKWFbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxhLmxlbmd0aDtyKyspe3ZhciBoPWFbcl0sZj0iY3QiaW4gaD9oLmN0Om4oaCxpLG8sYyxsKTtlLmNvbnRhaW5zKGYsITEscix0KT8odS5wdXNoKHtwb2ludE51bWJlcjpyLHg6aS5jMmQoaC54KSx5Om8uYzJkKGgueSl9KSxoLnNlbGVjdGVkPTEpOmguc2VsZWN0ZWQ9MH1yZXR1cm4gdX19LHt9XSw4Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWk7dmFyIG49dCgiLi4vLi4vbGliIikuZGlzdGluY3RWYWxzLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBpKHQsZSl7dGhpcy50cmFjZXM9dCx0aGlzLnNlcE5lZ1ZhbD1lLnNlcE5lZ1ZhbCx0aGlzLm92ZXJsYXBOb01lcmdlPWUub3ZlcmxhcE5vTWVyZ2U7Zm9yKHZhciByPTEvMCxpPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRbb10sbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgYz1zW2xdO2MucCE9PWEmJmkucHVzaChjLnApfXNbMF0mJnNbMF0ud2lkdGgxJiYocj1NYXRoLm1pbihzWzBdLndpZHRoMSxyKSl9dGhpcy5wb3NpdGlvbnM9aTt2YXIgdT1uKGkpO3RoaXMuZGlzdGluY3RQb3NpdGlvbnM9dS52YWxzLDE9PT11LnZhbHMubGVuZ3RoJiZyIT09MS8wP3RoaXMubWluRGlmZj1yOnRoaXMubWluRGlmZj1NYXRoLm1pbih1Lm1pbkRpZmYsciksdGhpcy5iaW5XaWR0aD10aGlzLm1pbkRpZmYsdGhpcy5iaW5zPXt9fWkucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0TGFiZWwodCxlKSxuPXRoaXMuYmluc1tyXXx8MDtyZXR1cm4gdGhpcy5iaW5zW3JdPW4rZSxufSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdldExhYmVsKHQsZSk7cmV0dXJuIHRoaXMuYmluc1tyXXx8MH0saS5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZTwwJiZ0aGlzLnNlcE5lZ1ZhbD8idiI6Il4iKSsodGhpcy5vdmVybGFwTm9NZXJnZT90Ok1hdGgucm91bmQodC90aGlzLmJpbldpZHRoKSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY5MywiLi4vLi4vbGliIjo3MTd9XSw4NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9yZWdpc3RyeSIpLGw9dCgiLi91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0LGM9dCgiLi9hdHRyaWJ1dGVzIiksdT1jLnRleHRmb250LGg9Yy5pbnNpZGV0ZXh0Zm9udCxmPWMub3V0c2lkZXRleHRmb250LHA9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gZCh0LGUscil7aS5wb2ludFN0eWxlKHQuc2VsZWN0QWxsKCJwYXRoIiksZSxyKSxnKHQsZSxyKX1mdW5jdGlvbiBnKHQsZSxyKXt0LnNlbGVjdEFsbCgidGV4dCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGE9bi5zZWxlY3QodGhpcykscz1vLmVuc3VyZVVuaWZvcm1Gb250U2l6ZShyLHYoYSx0LGUscikpO2kuZm9udChhLHMpfSl9ZnVuY3Rpb24gdih0LGUscixuKXt2YXIgYT1uLl9mdWxsTGF5b3V0LmZvbnQsaT1yLnRleHRmb250O2lmKHQuY2xhc3NlZCgiYmFydGV4dC1pbnNpZGUiKSl7dmFyIG89XyhlLHIpO2k9eShyLGUuaSxhLG8pfWVsc2UgdC5jbGFzc2VkKCJiYXJ0ZXh0LW91dHNpZGUiKSYmKGk9eChyLGUuaSxhKSk7cmV0dXJuIGl9ZnVuY3Rpb24gbSh0LGUscil7cmV0dXJuIGIodSx0LnRleHRmb250LGUscil9ZnVuY3Rpb24geSh0LGUscixuKXt2YXIgaT1tKHQsZSxyKTtyZXR1cm4odm9pZCAwPT09dC5faW5wdXQudGV4dGZvbnR8fHZvaWQgMD09PXQuX2lucHV0LnRleHRmb250LmNvbG9yfHxBcnJheS5pc0FycmF5KHQudGV4dGZvbnQuY29sb3IpJiZ2b2lkIDA9PT10LnRleHRmb250LmNvbG9yW2VdKSYmKGk9e2NvbG9yOmEuY29udHJhc3QobiksZmFtaWx5OmkuZmFtaWx5LHNpemU6aS5zaXplfSksYihoLHQuaW5zaWRldGV4dGZvbnQsZSxpKX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbj1tKHQsZSxyKTtyZXR1cm4gYihmLHQub3V0c2lkZXRleHRmb250LGUsbil9ZnVuY3Rpb24gYih0LGUscixuKXtlPWV8fHt9O3ZhciBhPXAuZ2V0VmFsdWUoZS5mYW1pbHksciksaT1wLmdldFZhbHVlKGUuc2l6ZSxyKSxvPXAuZ2V0VmFsdWUoZS5jb2xvcixyKTtyZXR1cm57ZmFtaWx5OnAuY29lcmNlU3RyaW5nKHQuZmFtaWx5LGEsbi5mYW1pbHkpLHNpemU6cC5jb2VyY2VOdW1iZXIodC5zaXplLGksbi5zaXplKSxjb2xvcjpwLmNvZXJjZUNvbG9yKHQuY29sb3IsbyxuLmNvbG9yKX19ZnVuY3Rpb24gXyh0LGUpe3JldHVybiJ3YXRlcmZhbGwiPT09ZS50eXBlP2VbdC5kaXJdLm1hcmtlci5jb2xvcjp0Lm1jfHxlLm1hcmtlci5jb2xvcn1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy5iYXJsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpO2wodCxlLCJiYXIiKTt2YXIgcj1lLnNpemUoKSxhPXQuX2Z1bGxMYXlvdXQ7ZS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLmVhY2goZnVuY3Rpb24odCl7KCJzdGFjayI9PT1hLmJhcm1vZGUmJnI+MXx8MD09PWEuYmFyZ2FwJiYwPT09YS5iYXJncm91cGdhcCYmIXRbMF0udHJhY2UubWFya2VyLmxpbmUud2lkdGgpJiZuLnNlbGVjdCh0aGlzKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIil9KSxlLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKGZ1bmN0aW9uKGUpe2Qobi5zZWxlY3QodGhpcyksZVswXS50cmFjZSx0KX0pLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdHlsZSIpKGUpfSxzdHlsZVRleHRQb2ludHM6ZyxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1lWzBdLnRyYWNlO2Euc2VsZWN0ZWRwb2ludHM/ZnVuY3Rpb24odCxlLHIpe2kuc2VsZWN0ZWRQb2ludFN0eWxlKHQuc2VsZWN0QWxsKCJwYXRoIiksZSksZnVuY3Rpb24odCxlLHIpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgYSxzPW4uc2VsZWN0KHRoaXMpO2lmKHQuc2VsZWN0ZWQpe2E9by5lbnN1cmVVbmlmb3JtRm9udFNpemUocix2KHMsdCxlLHIpKTt2YXIgbD1lLnNlbGVjdGVkLnRleHRmb250JiZlLnNlbGVjdGVkLnRleHRmb250LmNvbG9yO2wmJihhLmNvbG9yPWwpLGkuZm9udChzLGEpfWVsc2UgaS5zZWxlY3RlZFRleHRTdHlsZShzLGUpfSl9KHQuc2VsZWN0QWxsKCJ0ZXh0IiksZSxyKX0ocixhLHQpOihkKHIsYSx0KSxzLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3R5bGUiKShyKSl9LGdldEluc2lkZVRleHRGb250OnksZ2V0T3V0c2lkZVRleHRGb250OngsZ2V0QmFyQ29sb3I6XyxyZXNpemVUZXh0Omx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuL2F0dHJpYnV0ZXMiOjg1NiwiLi9oZWxwZXJzIjo4NjIsIi4vdW5pZm9ybV90ZXh0Ijo4NzIsZDM6MTY1fV0sODcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMpe3IoIm1hcmtlci5jb2xvciIsbyksYSh0LCJtYXJrZXIiKSYmaSh0LGUscyxyLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSkscigibWFya2VyLmxpbmUuY29sb3IiLG4uZGVmYXVsdExpbmUpLGEodCwibWFya2VyLmxpbmUiKSYmaSh0LGUscyxyLHtwcmVmaXg6Im1hcmtlci5saW5lLiIsY0xldHRlcjoiYyJ9KSxyKCJtYXJrZXIubGluZS53aWR0aCIpLHIoIm1hcmtlci5vcGFjaXR5Iikscigic2VsZWN0ZWQubWFya2VyLmNvbG9yIikscigidW5zZWxlY3RlZC5tYXJrZXIuY29sb3IiKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjYwM31dLDg3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4iXyIrdCsiVGV4dF9taW5zaXplIn1lLmV4cG9ydHM9e3JlY29yZE1pblRleHRTaXplOmZ1bmN0aW9uKHQsZSxyKXtpZihyLnVuaWZvcm10ZXh0Lm1vZGUpe3ZhciBuPWkodCksYT1yLnVuaWZvcm10ZXh0Lm1pbnNpemUsbz1lLnNjYWxlKmUuZm9udFNpemU7ZS5oaWRlPW88YSxyW25dPXJbbl18fDEvMCxlLmhpZGV8fChyW25dPU1hdGgubWluKHJbbl0sTWF0aC5tYXgobyxhKSkpfX0sY2xlYXJNaW5UZXh0U2l6ZTpmdW5jdGlvbih0LGUpe2VbaSh0KV09dm9pZCAwfSxyZXNpemVUZXh0OmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Ll9mdWxsTGF5b3V0LG89aVsiXyIrcisiVGV4dF9taW5zaXplIl07aWYobyl7dmFyIHMsbD0iaGlkZSI9PT1pLnVuaWZvcm10ZXh0Lm1vZGU7c3dpdGNoKHIpe2Nhc2UiZnVubmVsYXJlYSI6Y2FzZSJwaWUiOmNhc2Uic3VuYnVyc3QiOnM9Imcuc2xpY2UiO2JyZWFrO2Nhc2UidHJlZW1hcCI6cz0iZy5zbGljZSwgZy5wYXRoYmFyIjticmVhaztkZWZhdWx0OnM9ImcucG9pbnRzID4gZy5wb2ludCJ9ZS5zZWxlY3RBbGwocykuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnRyYW5zZm9ybTtlJiYoZS5zY2FsZT1sJiZlLmhpZGU/MDpvL2UuZm9udFNpemUsbi5zZWxlY3QodGhpcykuc2VsZWN0KCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIixhLmdldFRleHRUcmFuc2Zvcm0oZSkpKX0pfX19fSx7Ii4uLy4uL2xpYiI6NzE3LGQzOjE2NX1dLDg3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaT10KCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlcyIpLG89dCgiLi4vYmFyL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e3I6aS5yLHRoZXRhOmkudGhldGEscjA6aS5yMCxkcjppLmRyLHRoZXRhMDppLnRoZXRhMCxkdGhldGE6aS5kdGhldGEsdGhldGF1bml0OmkudGhldGF1bml0LGJhc2U6YSh7fSxvLmJhc2Use30pLG9mZnNldDphKHt9LG8ub2Zmc2V0LHt9KSx3aWR0aDphKHt9LG8ud2lkdGgse30pLHRleHQ6YSh7fSxvLnRleHQse30pLGhvdmVydGV4dDphKHt9LG8uaG92ZXJ0ZXh0LHt9KSxtYXJrZXI6by5tYXJrZXIsaG92ZXJpbmZvOmkuaG92ZXJpbmZvLGhvdmVydGVtcGxhdGU6bigpLHNlbGVjdGVkOm8uc2VsZWN0ZWQsdW5zZWxlY3RlZDpvLnVuc2VsZWN0ZWR9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODQxLCIuLi9iYXIvYXR0cmlidXRlcyI6ODU2LCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlcyI6MTE5M31dLDg3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLGk9dCgiLi4vYmFyL2FycmF5c190b19jYWxjZGF0YSIpLG89dCgiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiKS5zZXRHcm91cFBvc2l0aW9ucyxzPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxsPXQoIi4uLy4uL3JlZ2lzdHJ5IikudHJhY2VJcyxjPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQsbz1lLnN1YnBsb3QsbD1yW29dLnJhZGlhbGF4aXMsYz1yW29dLmFuZ3VsYXJheGlzLHU9bC5tYWtlQ2FsY2RhdGEoZSwiciIpLGg9Yy5tYWtlQ2FsY2RhdGEoZSwidGhldGEiKSxmPWUuX2xlbmd0aCxwPW5ldyBBcnJheShmKSxkPXUsZz1oLHY9MDt2PGY7disrKXBbdl09e3A6Z1t2XSxzOmRbdl19O2Z1bmN0aW9uIG0odCl7dmFyIHI9ZVt0XTt2b2lkIDAhPT1yJiYoZVsiXyIrdF09QXJyYXkuaXNBcnJheShyKT9jLm1ha2VDYWxjZGF0YShlLHQpOmMuZDJjKHIsZS50aGV0YXVuaXQpKX1yZXR1cm4ibGluZWFyIj09PWMudHlwZSYmKG0oIndpZHRoIiksbSgib2Zmc2V0IikpLG4oZSwibWFya2VyIikmJmEodCxlLHt2YWxzOmUubWFya2VyLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyIixjTGV0dGVyOiJjIn0pLG4oZSwibWFya2VyLmxpbmUiKSYmYSh0LGUse3ZhbHM6ZS5tYXJrZXIubGluZS5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlci5saW5lIixjTGV0dGVyOiJjIn0pLGkocCxlKSxzKHAsZSkscH0sY3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10LmNhbGNkYXRhLGE9W10saT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgcz1uW2ldLHU9c1swXS50cmFjZTshMD09PXUudmlzaWJsZSYmbCh1LCJiYXIiKSYmdS5zdWJwbG90PT09ciYmYS5wdXNoKHMpfXZhciBoPWMoe30sZS5yYWRpYWxheGlzLHtfaWQ6IngifSksZj1lLmFuZ3VsYXJheGlzO28odCxmLGgsYSx7bW9kZTplLmJhcm1vZGUsbm9ybTplLmJhcm5vcm0sZ2FwOmUuYmFyZ2FwLGdyb3VwZ2FwOmUuYmFyZ3JvdXBnYXB9KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MDAsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo2MDMsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIjo4NTUsIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIjo4NTksIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjExMjJ9XSw4NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi9zY2F0dGVycG9sYXIvZGVmYXVsdHMiKS5oYW5kbGVSVGhldGFEZWZhdWx0cyxpPXQoIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixhKX1hKHQsZSxzLGwpPyhsKCJ0aGV0YXVuaXQiKSxsKCJiYXNlIiksbCgib2Zmc2V0IiksbCgid2lkdGgiKSxsKCJ0ZXh0IiksbCgiaG92ZXJ0ZXh0IiksbCgiaG92ZXJ0ZW1wbGF0ZSIpLGkodCxlLGwscixzKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxsKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjcxNywiLi4vYmFyL3N0eWxlX2RlZmF1bHRzIjo4NzEsIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0cyI6MTE5NSwiLi9hdHRyaWJ1dGVzIjo4NzN9XSw4NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi9iYXIvaG92ZXIiKS5nZXRUcmFjZUNvbG9yLG89YS5maWxsVGV4dCxzPXQoIi4uL3NjYXR0ZXJwb2xhci9ob3ZlciIpLm1ha2VIb3ZlclBvaW50VGV4dCxsPXQoIi4uLy4uL3Bsb3RzL3BvbGFyL2hlbHBlcnMiKS5pc1B0SW5zaWRlUG9seWdvbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBjPXQuY2QsdT1jWzBdLnRyYWNlLGg9dC5zdWJwbG90LGY9aC5yYWRpYWxBeGlzLHA9aC5hbmd1bGFyQXhpcyxkPWgudmFuZ2xlcyxnPWQ/bDphLmlzUHRJbnNpZGVTZWN0b3Isdj10Lm1heEhvdmVyRGlzdGFuY2UsbT1wLl9wZXJpb2R8fDIqTWF0aC5QSSx5PU1hdGguYWJzKGYuZzJwKE1hdGguc3FydChlKmUrcipyKSkpLHg9TWF0aC5hdGFuMihyLGUpO2YucmFuZ2VbMF0+Zi5yYW5nZVsxXSYmKHgrPU1hdGguUEkpO2lmKG4uZ2V0Q2xvc2VzdChjLGZ1bmN0aW9uKHQpe3JldHVybiBnKHkseCxbdC5ycDAsdC5ycDFdLFt0LnRoZXRhZzAsdC50aGV0YWcxXSxkKT92K01hdGgubWluKDEsTWF0aC5hYnModC50aGV0YWcxLXQudGhldGFnMCkvbSktMSsodC5ycDEteSkvKHQucnAxLXQucnAwKS0xOjEvMH0sdCksITEhPT10LmluZGV4KXt2YXIgYj1jW3QuaW5kZXhdO3QueDA9dC54MT1iLmN0WzBdLHQueTA9dC55MT1iLmN0WzFdO3ZhciBfPWEuZXh0ZW5kRmxhdCh7fSxiLHtyOmIucyx0aGV0YTpiLnB9KTtyZXR1cm4gbyhiLHUsdCkscyhfLHUsaCx0KSx0LmhvdmVydGVtcGxhdGU9dS5ob3ZlcnRlbXBsYXRlLHQuY29sb3I9aSh1LGIpLHQueExhYmVsVmFsPXQueUxhYmVsVmFsPXZvaWQgMCxiLnM8MCYmKHQuaWRlYWxBbGlnbj0ibGVmdCIpLFt0XX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjYzMCwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL3BvbGFyL2hlbHBlcnMiOjgyOCwiLi4vYmFyL2hvdmVyIjo4NjMsIi4uL3NjYXR0ZXJwb2xhci9ob3ZlciI6MTE5N31dLDg3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJiYXJwb2xhciIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvcG9sYXIiKSxjYXRlZ29yaWVzOlsicG9sYXIiLCJiYXIiLCJzaG93TGVnZW5kIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuLi9zY2F0dGVycG9sYXIvZm9ybWF0X2xhYmVscyIpLHN0eWxlOnQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi4vYmFyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9wb2xhciI6ODI5LCIuLi9iYXIvc2VsZWN0Ijo4NjgsIi4uL2Jhci9zdHlsZSI6ODcwLCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTEzOCwiLi4vc2NhdHRlcnBvbGFyL2Zvcm1hdF9sYWJlbHMiOjExOTYsIi4vYXR0cmlidXRlcyI6ODczLCIuL2NhbGMiOjg3NCwiLi9kZWZhdWx0cyI6ODc1LCIuL2hvdmVyIjo4NzYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg3OCwiLi9sYXlvdXRfZGVmYXVsdHMiOjg3OSwiLi9wbG90Ijo4ODB9XSw4Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtiYXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFjayIsIm92ZXJsYXkiXSxkZmx0OiJzdGFjayIsZWRpdFR5cGU6ImNhbGMifSxiYXJnYXA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDouMSxtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDg3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLG89e307ZnVuY3Rpb24gcyhyLG8pe3JldHVybiBuLmNvZXJjZSh0W2ldfHx7fSxlW2ldLGEscixvKX1mb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9cltsXTsiYmFycG9sYXIiPT09Yy50eXBlJiYhMD09PWMudmlzaWJsZSYmKG9baT1jLnN1YnBsb3RdfHwocygiYmFybW9kZSIpLHMoImJhcmdhcCIpLG9baV09MSkpfX19LHsiLi4vLi4vbGliIjo3MTcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg3OH1dLDg4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcyx1PWUucmFkaWFsQXhpcyxoPWUuYW5ndWxhckF4aXMsZj1mdW5jdGlvbih0KXt2YXIgZT10LmN4eCxyPXQuY3l5O2lmKHQudmFuZ2xlcylyZXR1cm4gZnVuY3Rpb24obixhLG8sbCl7dmFyIGMsdTtpLmFuZ2xlRGVsdGEobyxsKT4wPyhjPW8sdT1sKTooYz1sLHU9byk7dmFyIGg9cy5maW5kRW5jbG9zaW5nVmVydGV4QW5nbGVzKGMsdC52YW5nbGVzKVswXSxmPXMuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyh1LHQudmFuZ2xlcylbMV0scD1baCwoYyt1KS8yLGZdO3JldHVybiBzLnBhdGhQb2x5Z29uQW5udWx1cyhuLGEsYyx1LHAsZSxyKX07cmV0dXJuIGZ1bmN0aW9uKHQsbixhLG8pe3JldHVybiBpLnBhdGhBbm51bHVzKHQsbixhLG8sZSxyKX19KGUpLHA9ZS5sYXllcnMuZnJvbnRwbG90LnNlbGVjdCgiZy5iYXJsYXllciIpO2kubWFrZVRyYWNlR3JvdXBzKHAsciwidHJhY2UgYmFycyIpLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxzPWkuZW5zdXJlU2luZ2xlKHIsImciLCJwb2ludHMiKS5zZWxlY3RBbGwoImcucG9pbnQiKS5kYXRhKGkuaWRlbnRpdHkpO3MuZW50ZXIoKS5hcHBlbmQoImciKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMikuY2xhc3NlZCgicG9pbnQiLCEwKSxzLmV4aXQoKS5yZW1vdmUoKSxzLmVhY2goZnVuY3Rpb24odCl7dmFyIGUscj1uLnNlbGVjdCh0aGlzKSxvPXQucnAwPXUuYzJwKHQuczApLHM9dC5ycDE9dS5jMnAodC5zMSkscD10LnRoZXRhZzA9aC5jMmcodC5wMCksZD10LnRoZXRhZzE9aC5jMmcodC5wMSk7aWYoYShvKSYmYShzKSYmYShwKSYmYShkKSYmbyE9PXMmJnAhPT1kKXt2YXIgZz11LmMyZyh0LnMxKSx2PShwK2QpLzI7dC5jdD1bbC5jMnAoZypNYXRoLmNvcyh2KSksYy5jMnAoZypNYXRoLnNpbih2KSldLGU9ZihvLHMscCxkKX1lbHNlIGU9Ik0wLDBaIjtpLmVuc3VyZVNpbmdsZShyLCJwYXRoIikuYXR0cigiZCIsZSl9KSxvLnNldENsaXBVcmwocixlLl9oYXNDbGlwT25BeGlzRmFsc2U/ZS5jbGlwSWRzLmZvclRyYWNlczpudWxsLHQpfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVycyI6ODI4LGQzOjE2NSwiZmFzdC1pc251bWVyaWMiOjIyOH1dLDg4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPW4ubWFya2VyLGM9bC5saW5lO2UuZXhwb3J0cz17eTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHgwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxkeDp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LGR5Ont2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHExOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LG1lZGlhbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxxMzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxsb3dlcmZlbmNlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHVwcGVyZmVuY2U6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbm90Y2hlZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxub3RjaHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDouNSxkZmx0Oi4yNSxlZGl0VHlwZToiY2FsYyJ9LG5vdGNoc3Bhbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxib3hwb2ludHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsIm91dGxpZXJzIiwic3VzcGVjdGVkb3V0bGllcnMiLCExXSxlZGl0VHlwZToiY2FsYyJ9LGppdHRlcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9LHBvaW50cG9zOnt2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MixlZGl0VHlwZToiY2FsYyJ9LGJveG1lYW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsInNkIiwhMV0sZWRpdFR5cGU6ImNhbGMifSxtZWFuOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHNkOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0scXVhcnRpbGVtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImV4Y2x1c2l2ZSIsImluY2x1c2l2ZSJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6ImNhbGMifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6e291dGxpZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwgMCwgMCwgMCkiLGVkaXRUeXBlOiJzdHlsZSJ9LHN5bWJvbDpzKHt9LGwuc3ltYm9sLHthcnJheU9rOiExLGVkaXRUeXBlOiJwbG90In0pLG9wYWNpdHk6cyh7fSxsLm9wYWNpdHkse2FycmF5T2s6ITEsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9KSxzaXplOnMoe30sbC5zaXplLHthcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0pLGNvbG9yOnMoe30sbC5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZToic3R5bGUifSksbGluZTp7Y29sb3I6cyh7fSxjLmNvbG9yLHthcnJheU9rOiExLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToic3R5bGUifSksd2lkdGg6cyh7fSxjLndpZHRoLHthcnJheU9rOiExLGRmbHQ6MCxlZGl0VHlwZToic3R5bGUifSksb3V0bGllcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sb3V0bGllcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToicGxvdCJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLHdoaXNrZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41LGVkaXRUeXBlOiJjYWxjIn0sb2Zmc2V0Z3JvdXA6YS5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDphLmFsaWdubWVudGdyb3VwLHNlbGVjdGVkOnttYXJrZXI6bi5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6InN0eWxlIn0sdW5zZWxlY3RlZDp7bWFya2VyOm4udW5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6InN0eWxlIn0sdGV4dDpzKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OnMoe30sbi5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6byh7fSksaG92ZXJvbjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiYm94ZXMiLCJwb2ludHMiXSxkZmx0OiJib3hlcytwb2ludHMiLGVkaXRUeXBlOiJzdHlsZSJ9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjU5MSwiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NDEsIi4uL2Jhci9hdHRyaWJ1dGVzIjo4NTYsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTEyMH1dLDg4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxzPWkuXztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixsLG0seSx4LGIsXz10Ll9mdWxsTGF5b3V0LHc9YS5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLGs9YS5nZXRGcm9tSWQodCxlLnlheGlzfHwieSIpLFQ9W10sTT0idmlvbGluIj09PWUudHlwZT8iX251bVZpb2xpbnMiOiJfbnVtQm94ZXMiOyJoIj09PWUub3JpZW50YXRpb24/KG09dyx5PSJ4Iix4PWssYj0ieSIpOihtPWsseT0ieSIseD13LGI9IngiKTt2YXIgQSxTLEUsTCxDLFAsTz1mdW5jdGlvbih0LGUscixhKXt2YXIgbyxzPWUrIjAiaW4gdCxsPSJkIitlIGluIHQ7aWYoZSBpbiB0fHxzJiZsKXJldHVybiByLm1ha2VDYWxjZGF0YSh0LGUpO289cz90W2UrIjAiXToibmFtZSJpbiB0JiYoImNhdGVnb3J5Ij09PXIudHlwZXx8bih0Lm5hbWUpJiYtMSE9PVsibGluZWFyIiwibG9nIl0uaW5kZXhPZihyLnR5cGUpfHxpLmlzRGF0ZVRpbWUodC5uYW1lKSYmImRhdGUiPT09ci50eXBlKT90Lm5hbWU6YTtmb3IodmFyIGM9Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlP3IucjJjX2p1c3RfaW5kaWNlcyhvKTpyLmQyYyhvLDAsdFtlKyJjYWxlbmRhciJdKSx1PXQuX2xlbmd0aCxoPW5ldyBBcnJheSh1KSxmPTA7Zjx1O2YrKyloW2ZdPWM7cmV0dXJuIGh9KGUsYix4LF9bTV0pLHo9aS5kaXN0aW5jdFZhbHMoTyksST16LnZhbHMsRD16Lm1pbkRpZmYvMixSPSJhbGwiPT09KGUuYm94cG9pbnRzfHxlLnBvaW50cyk/aS5pZGVudGl0eTpmdW5jdGlvbih0KXtyZXR1cm4gdC52PEEubGZ8fHQudj5BLnVmfTtpZihlLl9oYXNQcmVDb21wU3RhdHMpe3ZhciBGPWVbeV0sQj1mdW5jdGlvbih0KXtyZXR1cm4gbS5kMmMoKGVbdF18fFtdKVtyXSl9LE49MS8wLGo9LTEvMDtmb3Iocj0wO3I8ZS5fbGVuZ3RoO3IrKyl7dmFyIFY9T1tyXTtpZihuKFYpKXtpZigoQT17fSkucG9zPUFbYl09VixBLnExPUIoInExIiksQS5tZWQ9QigibWVkaWFuIiksQS5xMz1CKCJxMyIpLFM9W10sRiYmaS5pc0FycmF5T3JUeXBlZEFycmF5KEZbcl0pKWZvcihsPTA7bDxGW3JdLmxlbmd0aDtsKyspKFA9bS5kMmMoRltyXVtsXSkpIT09byYmKGMoQz17djpQLGk6W3IsbF19LGUsW3IsbF0pLFMucHVzaChDKSk7aWYoQS5wdHM9Uy5zb3J0KHUpLEw9KEU9QVt5XT1TLm1hcChoKSkubGVuZ3RoLEEubWVkIT09byYmQS5xMSE9PW8mJkEucTMhPT1vJiZBLm1lZD49QS5xMSYmQS5xMz49QS5tZWQpe3ZhciBVPUIoImxvd2VyZmVuY2UiKTtBLmxmPVUhPT1vJiZVPD1BLnExP1U6ZihBLEUsTCk7dmFyIHE9QigidXBwZXJmZW5jZSIpO0EudWY9cSE9PW8mJnE+PUEucTM/cTpwKEEsRSxMKTt2YXIgSD1CKCJtZWFuIik7QS5tZWFuPUghPT1vP0g6TD9pLm1lYW4oRSxMKTooQS5xMStBLnEzKS8yO3ZhciBHPUIoInNkIik7QS5zZD1IIT09byYmRz49MD9HOkw/aS5zdGRldihFLEwsQS5tZWFuKTpBLnEzLUEucTEsQS5sbz1kKEEpLEEudW89ZyhBKTt2YXIgWT1CKCJub3RjaHNwYW4iKTtZPVkhPT1vJiZZPjA/WTp2KEEsTCksQS5sbj1BLm1lZC1ZLEEudW49QS5tZWQrWTt2YXIgVz1BLmxmLFg9QS51ZjtlLmJveHBvaW50cyYmRS5sZW5ndGgmJihXPU1hdGgubWluKFcsRVswXSksWD1NYXRoLm1heChYLEVbTC0xXSkpLGUubm90Y2hlZCYmKFc9TWF0aC5taW4oVyxBLmxuKSxYPU1hdGgubWF4KFgsQS51bikpLEEubWluPVcsQS5tYXg9WH1lbHNle3ZhciBaO2kud2FybihbIkludmFsaWQgaW5wdXQgLSBtYWtlIHN1cmUgdGhhdCBxMSA8PSBtZWRpYW4gPD0gcTMiLCJxMSA9ICIrQS5xMSwibWVkaWFuID0gIitBLm1lZCwicTMgPSAiK0EucTNdLmpvaW4oIlxuIikpLFo9QS5tZWQhPT1vP0EubWVkOkEucTEhPT1vP0EucTMhPT1vPyhBLnExK0EucTMpLzI6QS5xMTpBLnEzIT09bz9BLnEzOjAsQS5tZWQ9WixBLnExPUEucTM9WixBLmxmPUEudWY9WixBLm1lYW49QS5zZD1aLEEubG49QS51bj1aLEEubWluPUEubWF4PVp9Tj1NYXRoLm1pbihOLEEubWluKSxqPU1hdGgubWF4KGosQS5tYXgpLEEucHRzMj1TLmZpbHRlcihSKSxULnB1c2goQSl9fWUuX2V4dHJlbWVzW20uX2lkXT1hLmZpbmRFeHRyZW1lcyhtLFtOLGpdLHtwYWRkZWQ6ITB9KX1lbHNle3ZhciBKPW0ubWFrZUNhbGNkYXRhKGUseSksSz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKzEpLGE9MDthPHI7YSsrKW5bYV09dFthXS1lO3JldHVybiBuW3JdPXRbci0xXStlLG59KEksRCksUT1JLmxlbmd0aCwkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT1bXTtyZXR1cm4gZX0oUSk7Zm9yKHI9MDtyPGUuX2xlbmd0aDtyKyspaWYoUD1KW3JdLG4oUCkpe3ZhciB0dD1pLmZpbmRCaW4oT1tyXSxLKTt0dD49MCYmdHQ8USYmKGMoQz17djpQLGk6cn0sZSxyKSwkW3R0XS5wdXNoKEMpKX12YXIgZXQ9MS8wLHJ0PS0xLzAsbnQ9ZS5xdWFydGlsZW1ldGhvZCxhdD0iZXhjbHVzaXZlIj09PW50LGl0PSJpbmNsdXNpdmUiPT09bnQ7Zm9yKHI9MDtyPFE7cisrKWlmKCRbcl0ubGVuZ3RoPjApe3ZhciBvdCxzdDtpZigoQT17fSkucG9zPUFbYl09SVtyXSxTPUEucHRzPSRbcl0uc29ydCh1KSxMPShFPUFbeV09Uy5tYXAoaCkpLmxlbmd0aCxBLm1pbj1FWzBdLEEubWF4PUVbTC0xXSxBLm1lYW49aS5tZWFuKEUsTCksQS5zZD1pLnN0ZGV2KEUsTCxBLm1lYW4pLEEubWVkPWkuaW50ZXJwKEUsLjUpLEwlMiYmKGF0fHxpdCkpYXQ/KG90PUUuc2xpY2UoMCxMLzIpLHN0PUUuc2xpY2UoTC8yKzEpKTppdCYmKG90PUUuc2xpY2UoMCxMLzIrMSksc3Q9RS5zbGljZShMLzIpKSxBLnExPWkuaW50ZXJwKG90LC41KSxBLnEzPWkuaW50ZXJwKHN0LC41KTtlbHNlIEEucTE9aS5pbnRlcnAoRSwuMjUpLEEucTM9aS5pbnRlcnAoRSwuNzUpO0EubGY9ZihBLEUsTCksQS51Zj1wKEEsRSxMKSxBLmxvPWQoQSksQS51bz1nKEEpO3ZhciBsdD12KEEsTCk7QS5sbj1BLm1lZC1sdCxBLnVuPUEubWVkK2x0LGV0PU1hdGgubWluKGV0LEEubG4pLHJ0PU1hdGgubWF4KHJ0LEEudW4pLEEucHRzMj1TLmZpbHRlcihSKSxULnB1c2goQSl9ZS5fZXh0cmVtZXNbbS5faWRdPWEuZmluZEV4dHJlbWVzKG0sZS5ub3RjaGVkP0ouY29uY2F0KFtldCxydF0pOkose3BhZGRlZDohMH0pfXJldHVybiBmdW5jdGlvbih0LGUpe2lmKGkuaXNBcnJheU9yVHlwZWRBcnJheShlLnNlbGVjdGVkcG9pbnRzKSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7Zm9yKHZhciBuPXRbcl0ucHRzfHxbXSxhPXt9LG89MDtvPG4ubGVuZ3RoO28rKylhW25bb10uaV09bztpLnRhZ1NlbGVjdGVkKG4sZSxhKX19KFQsZSksVC5sZW5ndGg+MD8oVFswXS50PXtudW06X1tNXSxkUG9zOkQscG9zTGV0dGVyOmIsdmFsTGV0dGVyOnksbGFiZWxzOnttZWQ6cyh0LCJtZWRpYW46IiksbWluOnModCwibWluOiIpLHExOnModCwicTE6IikscTM6cyh0LCJxMzoiKSxtYXg6cyh0LCJtYXg6IiksbWVhbjoic2QiPT09ZS5ib3htZWFuP3ModCwibWVhbiBceGIxIFx1MDNjMzoiKTpzKHQsIm1lYW46IiksbGY6cyh0LCJsb3dlciBmZW5jZToiKSx1ZjpzKHQsInVwcGVyIGZlbmNlOiIpfX0sX1tNXSsrLFQpOlt7dDp7ZW1wdHk6ITB9fV19O3ZhciBsPXt0ZXh0OiJ0eCIsaG92ZXJ0ZXh0OiJodHgifTtmdW5jdGlvbiBjKHQsZSxyKXtmb3IodmFyIG4gaW4gbClpLmlzQXJyYXlPclR5cGVkQXJyYXkoZVtuXSkmJihBcnJheS5pc0FycmF5KHIpP2kuaXNBcnJheU9yVHlwZWRBcnJheShlW25dW3JbMF1dKSYmKHRbbFtuXV09ZVtuXVtyWzBdXVtyWzFdXSk6dFtsW25dXT1lW25dW3JdKX1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHQudi1lLnZ9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC52fWZ1bmN0aW9uIGYodCxlLHIpe3JldHVybiAwPT09cj90LnExOk1hdGgubWluKHQucTEsZVtNYXRoLm1pbihpLmZpbmRCaW4oMi41KnQucTEtMS41KnQucTMsZSwhMCkrMSxyLTEpXSl9ZnVuY3Rpb24gcCh0LGUscil7cmV0dXJuIDA9PT1yP3QucTM6TWF0aC5tYXgodC5xMyxlW01hdGgubWF4KGkuZmluZEJpbigyLjUqdC5xMy0xLjUqdC5xMSxlKSwwKV0pfWZ1bmN0aW9uIGQodCl7cmV0dXJuIDQqdC5xMS0zKnQucTN9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gNCp0LnEzLTMqdC5xMX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIDA9PT1lPzA6MS41NyoodC5xMy10LnExKS9NYXRoLnNxcnQoZSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY5MywiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsImZhc3QtaXNudW1lcmljIjoyMjh9XSw4ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikuZ2V0QXhpc0dyb3VwLG89WyJ2IiwiaCJdO2Z1bmN0aW9uIHModCxlLHIsbyl7dmFyIHMsbCxjLHU9ZS5jYWxjZGF0YSxoPWUuX2Z1bGxMYXlvdXQsZj1vLl9pZCxwPWYuY2hhckF0KDApLGQ9W10sZz0wO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspZm9yKGM9dVtyW3NdXSxsPTA7bDxjLmxlbmd0aDtsKyspZC5wdXNoKG8uYzJsKGNbbF0ucG9zLCEwKSksZys9KGNbbF0ucHRzMnx8W10pLmxlbmd0aDtpZihkLmxlbmd0aCl7dmFyIHY9YS5kaXN0aW5jdFZhbHMoZCksbT12Lm1pbkRpZmYvMjtuLm1pbkR0aWNrKG8sdi5taW5EaWZmLHYudmFsc1swXSwhMCk7dmFyIHk9aFsidmlvbGluIj09PXQ/Il9udW1WaW9saW5zIjoiX251bUJveGVzIl0seD0iZ3JvdXAiPT09aFt0KyJtb2RlIl0mJnk+MSxiPTEtaFt0KyJnYXAiXSxfPTEtaFt0KyJncm91cGdhcCJdO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspe3ZhciB3LGssVCxNLEEsUyxFPShjPXVbcltzXV0pWzBdLnRyYWNlLEw9Y1swXS50LEM9RS53aWR0aCxQPUUuc2lkZTtpZihDKXc9az1NPUMvMixUPTA7ZWxzZSBpZih3PW0seCl7dmFyIE89aShoLG8uX2lkKStFLm9yaWVudGF0aW9uLHo9KGguX2FsaWdubWVudE9wdHNbT118fHt9KVtFLmFsaWdubWVudGdyb3VwXXx8e30sST1PYmplY3Qua2V5cyh6Lm9mZnNldEdyb3Vwc3x8e30pLmxlbmd0aCxEPUl8fHk7az13KmIqXy9ELFQ9Mip3KigoKEk/RS5fb2Zmc2V0SW5kZXg6TC5udW0pKy41KS9ELS41KSpiLE09dypiL0R9ZWxzZSBrPXcqYipfLFQ9MCxNPXc7TC5kUG9zPXcsTC5iUG9zPVQsTC5iZFBvcz1rLEwud0hvdmVyPU07dmFyIFIsRixCLE4saixWLFU9VCtrLHE9Qm9vbGVhbihDKTtpZigicG9zaXRpdmUiPT09UD8oQT13KihDPzE6LjUpLFI9VSxTPVI9VCk6Im5lZ2F0aXZlIj09PVA/KEE9Uj1ULFM9dyooQz8xOi41KSxGPVUpOihBPVM9dyxSPUY9VSksKEUuYm94cG9pbnRzfHxFLnBvaW50cykmJmc+MCl7dmFyIEg9RS5wb2ludHBvcyxHPUUuaml0dGVyLFk9RS5tYXJrZXIuc2l6ZS8yLFc9MDtIK0c+PTAmJigoVz1VKihIK0cpKT5BPyhxPSEwLGo9WSxCPVcpOlc+UiYmKGo9WSxCPUEpKSxXPD1BJiYoQj1BKTt2YXIgWD0wO0gtRzw9MCYmKChYPS1VKihILUcpKT5TPyhxPSEwLFY9WSxOPVgpOlg+RiYmKFY9WSxOPVMpKSxYPD1TJiYoTj1TKX1lbHNlIEI9QSxOPVM7dmFyIFo9bmV3IEFycmF5KGMubGVuZ3RoKTtmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKVpbbF09Y1tsXS5wb3M7RS5fZXh0cmVtZXNbZl09bi5maW5kRXh0cmVtZXMobyxaLHtwYWRkZWQ6cSx2cGFkbWludXM6Tix2cGFkcGx1czpCLHZwYWRMaW5lYXJpemVkOiEwLHBwYWRtaW51czp7eDpWLHk6an1bcF0scHBhZHBsdXM6e3g6aix5OlZ9W3BdfSl9fX1lLmV4cG9ydHM9e2Nyb3NzVHJhY2VDYWxjOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY2FsY2RhdGEsbj1lLnhheGlzLGE9ZS55YXhpcyxpPTA7aTxvLmxlbmd0aDtpKyspe2Zvcih2YXIgbD1vW2ldLGM9ImgiPT09bD9hOm4sdT1bXSxoPTA7aDxyLmxlbmd0aDtoKyspe3ZhciBmPXJbaF0scD1mWzBdLnQsZD1mWzBdLnRyYWNlOyEwIT09ZC52aXNpYmxlfHwiYm94IiE9PWQudHlwZSYmImNhbmRsZXN0aWNrIiE9PWQudHlwZXx8cC5lbXB0eXx8KGQub3JpZW50YXRpb258fCJ2IikhPT1sfHxkLnhheGlzIT09bi5faWR8fGQueWF4aXMhPT1hLl9pZHx8dS5wdXNoKGgpfXMoImJveCIsdCx1LGMpfX0sc2V0UG9zaXRpb25PZmZzZXQ6c319LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6NzY4fV0sODg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gYyh0LGUscixpKXtmdW5jdGlvbiBvKHQpe3ZhciBlPTA7cmV0dXJuIHQmJnQubGVuZ3RoJiYoZSs9MSxuLmlzQXJyYXlPclR5cGVkQXJyYXkodFswXSkmJnRbMF0ubGVuZ3RoJiYoZSs9MSkpLGV9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gbi52YWxpZGF0ZSh0W2VdLGxbZV0pfXZhciB1LGg9cigieSIpLGY9cigieCIpO2lmKCJib3giPT09ZS50eXBlKXt2YXIgcD1yKCJxMSIpLGQ9cigibWVkaWFuIiksZz1yKCJxMyIpO2UuX2hhc1ByZUNvbXBTdGF0cz1wJiZwLmxlbmd0aCYmZCYmZC5sZW5ndGgmJmcmJmcubGVuZ3RoLHU9TWF0aC5taW4obi5taW5Sb3dMZW5ndGgocCksbi5taW5Sb3dMZW5ndGgoZCksbi5taW5Sb3dMZW5ndGgoZykpfXZhciB2LG0seT1vKGgpLHg9byhmKSxiPXkmJm4ubWluUm93TGVuZ3RoKGgpLF89eCYmbi5taW5Sb3dMZW5ndGgoZik7aWYoZS5faGFzUHJlQ29tcFN0YXRzKXN3aXRjaChTdHJpbmcoeCkrU3RyaW5nKHkpKXtjYXNlIjAwIjp2YXIgdz1jKCJ4MCIpfHxjKCJkeCIpO3Y9KGMoInkwIil8fGMoImR5IikpJiYhdz8iaCI6InYiLG09dTticmVhaztjYXNlIjEwIjp2PSJ2IixtPU1hdGgubWluKHUsXyk7YnJlYWs7Y2FzZSIyMCI6dj0iaCIsbT1NYXRoLm1pbih1LGYubGVuZ3RoKTticmVhaztjYXNlIjAxIjp2PSJoIixtPU1hdGgubWluKHUsYik7YnJlYWs7Y2FzZSIwMiI6dj0idiIsbT1NYXRoLm1pbih1LGgubGVuZ3RoKTticmVhaztjYXNlIjEyIjp2PSJ2IixtPU1hdGgubWluKHUsXyxoLmxlbmd0aCk7YnJlYWs7Y2FzZSIyMSI6dj0iaCIsbT1NYXRoLm1pbih1LGYubGVuZ3RoLGIpO2JyZWFrO2Nhc2UiMTEiOm09MDticmVhaztjYXNlIjIyIjp2YXIgayxUPSExO2ZvcihrPTA7azxmLmxlbmd0aDtrKyspaWYoImNhdGVnb3J5Ij09PXMoZltrXSkpe1Q9ITA7YnJlYWt9aWYoVCl2PSJ2IixtPU1hdGgubWluKHUsXyxoLmxlbmd0aCk7ZWxzZXtmb3Ioaz0wO2s8aC5sZW5ndGg7aysrKWlmKCJjYXRlZ29yeSI9PT1zKGhba10pKXtUPSEwO2JyZWFrfVQ/KHY9ImgiLG09TWF0aC5taW4odSxmLmxlbmd0aCxiKSk6KHY9InYiLG09TWF0aC5taW4odSxfLGgubGVuZ3RoKSl9fWVsc2UgeT4wPyh2PSJ2IixtPXg+MD9NYXRoLm1pbihfLGIpOk1hdGgubWluKGIpKTp4PjA/KHY9ImgiLG09TWF0aC5taW4oXykpOm09MDtpZihtKXtlLl9sZW5ndGg9bTt2YXIgTT1yKCJvcmllbnRhdGlvbiIsdik7ZS5faGFzUHJlQ29tcFN0YXRzPyJ2Ij09PU0mJjA9PT14PyhyKCJ4MCIsMCkscigiZHgiLDEpKToiaCI9PT1NJiYwPT09eSYmKHIoInkwIiwwKSxyKCJkeSIsMSkpOiJ2Ij09PU0mJjA9PT14P3IoIngwIik6ImgiPT09TSYmMD09PXkmJnIoInkwIiksYS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGkpfWVsc2UgZS52aXNpYmxlPSExfWZ1bmN0aW9uIHUodCxlLHIsYSl7dmFyIGk9YS5wcmVmaXgsbz1uLmNvZXJjZTIodCxlLGwsIm1hcmtlci5vdXRsaWVyY29sb3IiKSxzPXIoIm1hcmtlci5saW5lLm91dGxpZXJjb2xvciIpLGM9Im91dGxpZXJzIjtlLl9oYXNQcmVDb21wU3RhdHM/Yz0iYWxsIjoob3x8cykmJihjPSJzdXNwZWN0ZWRvdXRsaWVycyIpO3ZhciB1PXIoaSsicG9pbnRzIixjKTt1PyhyKCJqaXR0ZXIiLCJhbGwiPT09dT8uMzowKSxyKCJwb2ludHBvcyIsImFsbCI9PT11Py0xLjU6MCkscigibWFya2VyLnN5bWJvbCIpLHIoIm1hcmtlci5vcGFjaXR5IikscigibWFya2VyLnNpemUiKSxyKCJtYXJrZXIuY29sb3IiLGUubGluZS5jb2xvcikscigibWFya2VyLmxpbmUuY29sb3IiKSxyKCJtYXJrZXIubGluZS53aWR0aCIpLCJzdXNwZWN0ZWRvdXRsaWVycyI9PT11JiYocigibWFya2VyLmxpbmUub3V0bGllcmNvbG9yIixlLm1hcmtlci5jb2xvcikscigibWFya2VyLmxpbmUub3V0bGllcndpZHRoIikpLHIoInNlbGVjdGVkLm1hcmtlci5jb2xvciIpLHIoInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yIikscigic2VsZWN0ZWQubWFya2VyLnNpemUiKSxyKCJ1bnNlbGVjdGVkLm1hcmtlci5zaXplIikscigidGV4dCIpLHIoImhvdmVydGV4dCIpKTpkZWxldGUgZS5tYXJrZXI7dmFyIGg9cigiaG92ZXJvbiIpOyJhbGwiIT09aCYmLTE9PT1oLmluZGV4T2YoInBvaW50cyIpfHxyKCJob3ZlcnRlbXBsYXRlIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUscil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixhKXtmdW5jdGlvbiBvKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsYSl9aWYoYyh0LGUsbyxhKSwhMSE9PWUudmlzaWJsZSl7dmFyIHM9ZS5faGFzUHJlQ29tcFN0YXRzO3MmJihvKCJsb3dlcmZlbmNlIiksbygidXBwZXJmZW5jZSIpKSxvKCJsaW5lLmNvbG9yIiwodC5tYXJrZXJ8fHt9KS5jb2xvcnx8ciksbygibGluZS53aWR0aCIpLG8oImZpbGxjb2xvciIsaS5hZGRPcGFjaXR5KGUubGluZS5jb2xvciwuNSkpO3ZhciBoPSExO2lmKHMpe3ZhciBmPW8oIm1lYW4iKSxwPW8oInNkIik7ZiYmZi5sZW5ndGgmJihoPSEwLHAmJnAubGVuZ3RoJiYoaD0ic2QiKSl9bygiYm94bWVhbiIsaCksbygid2hpc2tlcndpZHRoIiksbygid2lkdGgiKSxvKCJxdWFydGlsZW1ldGhvZCIpO3ZhciBkPSExO2lmKHMpe3ZhciBnPW8oIm5vdGNoc3BhbiIpO2cmJmcubGVuZ3RoJiYoZD0hMCl9ZWxzZSBuLnZhbGlkYXRlKHQubm90Y2h3aWR0aCxsLm5vdGNod2lkdGgpJiYoZD0hMCk7bygibm90Y2hlZCIsZCkmJm8oIm5vdGNod2lkdGgiKSx1KHQsZSxvLHtwcmVmaXg6ImJveCJ9KX19LGNyb3NzVHJhY2VEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByLGE7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbi5jb2VyY2UoYS5faW5wdXQsYSxsLHQpfWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgYz0oYT10W3NdKS50eXBlOyJib3giIT09YyYmInZpb2xpbiIhPT1jfHwocj1hLl9pbnB1dCwiZ3JvdXAiPT09ZVtjKyJtb2RlIl0mJm8ocixhLGUsaSkpfX0saGFuZGxlU2FtcGxlRGVmYXVsdHM6YyxoYW5kbGVQb2ludHNEZWZhdWx0czp1fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSI6NzY2LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuLi9iYXIvZGVmYXVsdHMiOjg2MCwiLi9hdHRyaWJ1dGVzIjo4ODF9XSw4ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuaG92ZXJPbkJveCYmKHQuaG92ZXJPbkJveD1lLmhvdmVyT25Cb3gpLCJ4VmFsImluIGUmJih0Lng9ZS54VmFsKSwieVZhbCJpbiBlJiYodC55PWUueVZhbCksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksdH19LHt9XSw4ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9YS5maWxsVGV4dDtmdW5jdGlvbiBsKHQsZSxyLHMpe3ZhciBsLGMsdSxoLGYscCxkLGcsdixtLHkseCxiLF8sdz10LmNkLGs9dC54YSxUPXQueWEsTT13WzBdLnRyYWNlLEE9d1swXS50LFM9InZpb2xpbiI9PT1NLnR5cGUsRT1bXSxMPUEuYmRQb3MsQz1BLndIb3ZlcixQPWZ1bmN0aW9uKHQpe3JldHVybiB1LmMybCh0LnBvcykrQS5iUG9zLXUuYzJsKHApfTtTJiYiYm90aCIhPT1NLnNpZGU/KCJwb3NpdGl2ZSI9PT1NLnNpZGUmJih2PWZ1bmN0aW9uKHQpe3ZhciBlPVAodCk7cmV0dXJuIGkuaW5ib3goZSxlK0MsbSl9LHg9TCxiPTApLCJuZWdhdGl2ZSI9PT1NLnNpZGUmJih2PWZ1bmN0aW9uKHQpe3ZhciBlPVAodCk7cmV0dXJuIGkuaW5ib3goZS1DLGUsbSl9LHg9MCxiPUwpKToodj1mdW5jdGlvbih0KXt2YXIgZT1QKHQpO3JldHVybiBpLmluYm94KGUtQyxlK0MsbSl9LHg9Yj1MKSxfPVM/ZnVuY3Rpb24odCl7cmV0dXJuIGkuaW5ib3godC5zcGFuWzBdLWYsdC5zcGFuWzFdLWYsbSl9OmZ1bmN0aW9uKHQpe3JldHVybiBpLmluYm94KHQubWluLWYsdC5tYXgtZixtKX0sImgiPT09TS5vcmllbnRhdGlvbj8oZj1lLHA9cixkPV8sZz12LGw9InkiLHU9VCxjPSJ4IixoPWspOihmPXIscD1lLGQ9dixnPV8sbD0ieCIsdT1rLGM9InkiLGg9VCk7dmFyIE89TWF0aC5taW4oMSxML01hdGguYWJzKHUucjJjKHUucmFuZ2VbMV0pLXUucjJjKHUucmFuZ2VbMF0pKSk7ZnVuY3Rpb24geih0KXtyZXR1cm4oZCh0KStnKHQpKS8yfW09dC5tYXhIb3ZlckRpc3RhbmNlLU8seT10Lm1heFNwaWtlRGlzdGFuY2UtTzt2YXIgST1pLmdldERpc3RhbmNlRnVuY3Rpb24ocyxkLGcseik7aWYoaS5nZXRDbG9zZXN0KHcsSSx0KSwhMT09PXQuaW5kZXgpcmV0dXJuW107dmFyIEQ9d1t0LmluZGV4XSxSPU0ubGluZS5jb2xvcixGPShNLm1hcmtlcnx8e30pLmNvbG9yO28ub3BhY2l0eShSKSYmTS5saW5lLndpZHRoP3QuY29sb3I9UjpvLm9wYWNpdHkoRikmJk0uYm94cG9pbnRzP3QuY29sb3I9Rjp0LmNvbG9yPU0uZmlsbGNvbG9yLHRbbCsiMCJdPXUuYzJwKEQucG9zK0EuYlBvcy1iLCEwKSx0W2wrIjEiXT11LmMycChELnBvcytBLmJQb3MreCwhMCksdFtsKyJMYWJlbFZhbCJdPUQucG9zO3ZhciBCPWwrIlNwaWtlIjt0LnNwaWtlRGlzdGFuY2U9eihEKSp5L20sdFtCXT11LmMycChELnBvcywhMCk7dmFyIE49e30saj1bIm1lZCIsInExIiwicTMiLCJtaW4iLCJtYXgiXTsoTS5ib3htZWFufHwoTS5tZWFubGluZXx8e30pLnZpc2libGUpJiZqLnB1c2goIm1lYW4iKSwoTS5ib3hwb2ludHN8fE0ucG9pbnRzKSYmai5wdXNoKCJsZiIsInVmIik7Zm9yKHZhciBWPTA7VjxqLmxlbmd0aDtWKyspe3ZhciBVPWpbVl07aWYoVSBpbiBEJiYhKERbVV1pbiBOKSl7TltEW1VdXT0hMDt2YXIgcT1EW1VdLEg9aC5jMnAocSwhMCksRz1hLmV4dGVuZEZsYXQoe30sdCk7Ry5hdHRyPVUsR1tjKyIwIl09R1tjKyIxIl09SCxHW2MrIkxhYmVsVmFsIl09cSxHW2MrIkxhYmVsIl09KEEubGFiZWxzP0EubGFiZWxzW1VdKyIgIjoiIikrbi5ob3ZlckxhYmVsVGV4dChoLHEpLEcuaG92ZXJPbkJveD0hMCwibWVhbiI9PT1VJiYic2QiaW4gRCYmInNkIj09PU0uYm94bWVhbiYmKEdbYysiZXJyIl09RC5zZCksdC5uYW1lPSIiLHQuc3Bpa2VEaXN0YW5jZT12b2lkIDAsdFtCXT12b2lkIDAsRy5ob3ZlcnRlbXBsYXRlPSExLEUucHVzaChHKX19cmV0dXJuIEV9ZnVuY3Rpb24gYyh0LGUscil7Zm9yKHZhciBuLG8sbCxjPXQuY2QsdT10LnhhLGg9dC55YSxmPWNbMF0udHJhY2UscD11LmMycChlKSxkPWguYzJwKHIpLGc9aS5xdWFkcmF0dXJlKGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLmFicyh1LmMycCh0LngpLXApLWUsMS0zL2UpfSxmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoaC5jMnAodC55KS1kKS1lLDEtMy9lKX0pLHY9ITEsbT0wO208Yy5sZW5ndGg7bSsrKXtvPWNbbV07Zm9yKHZhciB5PTA7eTwoby5wdHN8fFtdKS5sZW5ndGg7eSsrKXt2YXIgeD1nKGw9by5wdHNbeV0pO3g8PXQuZGlzdGFuY2UmJih0LmRpc3RhbmNlPXgsdj1bbSx5XSl9fWlmKCF2KXJldHVybiExO2w9KG89Y1t2WzBdXSkucHRzW3ZbMV1dO3ZhciBiLF89dS5jMnAobC54LCEwKSx3PWguYzJwKGwueSwhMCksaz1sLm1yY3x8MTtyZXR1cm4gbj1hLmV4dGVuZEZsYXQoe30sdCx7aW5kZXg6bC5pLGNvbG9yOihmLm1hcmtlcnx8e30pLmNvbG9yLG5hbWU6Zi5uYW1lLHgwOl8tayx4MTpfK2sseTA6dy1rLHkxOncrayxzcGlrZURpc3RhbmNlOnQuZGlzdGFuY2UsaG92ZXJ0ZW1wbGF0ZTpmLmhvdmVydGVtcGxhdGV9KSwiaCI9PT1mLm9yaWVudGF0aW9uPyhiPWgsbi54TGFiZWxWYWw9bC54LG4ueUxhYmVsVmFsPW8ucG9zKTooYj11LG4ueExhYmVsVmFsPW8ucG9zLG4ueUxhYmVsVmFsPWwueSksbltiLl9pZC5jaGFyQXQoMCkrIlNwaWtlIl09Yi5jMnAoby5wb3MsITApLHMobCxmLG4pLG59ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuKXt2YXIgYSxpPXQuY2RbMF0udHJhY2UuaG92ZXJvbixvPVtdO3JldHVybi0xIT09aS5pbmRleE9mKCJib3hlcyIpJiYobz1vLmNvbmNhdChsKHQsZSxyLG4pKSksLTEhPT1pLmluZGV4T2YoInBvaW50cyIpJiYoYT1jKHQsZSxyKSksImNsb3Nlc3QiPT09bj9hP1thXTpvOmE/KG8ucHVzaChhKSxvKTpvfSxob3Zlck9uQm94ZXM6bCxob3Zlck9uUG9pbnRzOmN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vY29tcG9uZW50cy9meCI6NjMwLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NX1dLDg4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLnN1cHBseURlZmF1bHRzLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuY3Jvc3NUcmFjZURlZmF1bHRzLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIikuc3VwcGx5TGF5b3V0RGVmYXVsdHMsY2FsYzp0KCIuL2NhbGMiKSxjcm9zc1RyYWNlQ2FsYzp0KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiYm94IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic3ltYm9scyIsIm9yaWVudGVkIiwiYm94LXZpb2xpbiIsInNob3dMZWdlbmQiLCJib3hMYXlvdXQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NiwiLi9hdHRyaWJ1dGVzIjo4ODEsIi4vY2FsYyI6ODgyLCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjg4MywiLi9kZWZhdWx0cyI6ODg0LCIuL2V2ZW50X2RhdGEiOjg4NSwiLi9ob3ZlciI6ODg2LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4ODgsIi4vbGF5b3V0X2RlZmF1bHRzIjo4ODksIi4vcGxvdCI6ODkwLCIuL3NlbGVjdCI6ODkxLCIuL3N0eWxlIjo4OTJ9XSw4ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtib3htb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJncm91cCIsIm92ZXJsYXkiXSxkZmx0OiJvdmVybGF5IixlZGl0VHlwZToiY2FsYyJ9LGJveGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4zLGVkaXRUeXBlOiJjYWxjIn0sYm94Z3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMyxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDg4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbyh0LGUscixhLGkpe2Zvcih2YXIgbz1pKyJMYXlvdXQiLHM9ITEsbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1yW2xdO2lmKG4udHJhY2VJcyhjLG8pKXtzPSEwO2JyZWFrfX1zJiYoYShpKyJtb2RlIiksYShpKyJnYXAiKSxhKGkrImdyb3VwZ2FwIikpfWUuZXhwb3J0cz17c3VwcGx5TGF5b3V0RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIpe28oMCwwLHIsZnVuY3Rpb24ocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLGkscixuKX0sImJveCIpfSxfc3VwcGx5Om99fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4ODh9XSw4OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz01LHM9LjAxO2Z1bmN0aW9uIGwodCxlLHIsaSl7dmFyIG8scyxsPWUucG9zLGM9ZS52YWwsdT1pLmJQb3MsaD1pLndkUG9zfHwwLGY9aS5iUG9zUHhPZmZzZXR8fDAscD1yLndoaXNrZXJ3aWR0aHx8MCxkPXIubm90Y2hlZHx8ITEsZz1kPzEtMipyLm5vdGNod2lkdGg6MTtBcnJheS5pc0FycmF5KGkuYmRQb3MpPyhvPWkuYmRQb3NbMF0scz1pLmJkUG9zWzFdKToobz1pLmJkUG9zLHM9aS5iZFBvcyk7dmFyIHY9dC5zZWxlY3RBbGwoInBhdGguYm94IikuZGF0YSgidmlvbGluIiE9PXIudHlwZXx8ci5ib3gudmlzaWJsZT9hLmlkZW50aXR5OltdKTt2LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJjbGFzcyIsImJveCIpLHYuZXhpdCgpLnJlbW92ZSgpLHYuZWFjaChmdW5jdGlvbih0KXtpZih0LmVtcHR5KXJldHVybiJNMCwwWiI7dmFyIGU9bC5jMmwodC5wb3MrdSwhMCksaT1sLmwycChlKStmLHY9bC5sMnAoZS1vKStmLG09bC5sMnAoZStzKStmLHk9bC5sMnAoZS1oKStmLHg9bC5sMnAoZStoKStmLGI9bC5sMnAoZS1vKmcpK2YsXz1sLmwycChlK3MqZykrZix3PWMuYzJwKHQucTEsITApLGs9Yy5jMnAodC5xMywhMCksVD1hLmNvbnN0cmFpbihjLmMycCh0Lm1lZCwhMCksTWF0aC5taW4odyxrKSsxLE1hdGgubWF4KHcsayktMSksTT12b2lkIDA9PT10LmxmfHwhMT09PXIuYm94cG9pbnRzLEE9Yy5jMnAoTT90Lm1pbjp0LmxmLCEwKSxTPWMuYzJwKE0/dC5tYXg6dC51ZiwhMCksRT1jLmMycCh0LmxuLCEwKSxMPWMuYzJwKHQudW4sITApOyJoIj09PXIub3JpZW50YXRpb24/bi5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK1QrIiwiK2IrIlYiK18rIk0iK3crIiwiK3YrIlYiK20rKGQ/IkgiK0UrIkwiK1QrIiwiK18rIkwiK0wrIiwiK206IiIpKyJIIitrKyJWIit2KyhkPyJIIitMKyJMIitUKyIsIitiKyJMIitFKyIsIit2OiIiKSsiWk0iK3crIiwiK2krIkgiK0ErIk0iK2srIiwiK2krIkgiK1MrKDA9PT1wPyIiOiJNIitBKyIsIit5KyJWIit4KyJNIitTKyIsIit5KyJWIit4KSk6bi5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK2IrIiwiK1QrIkgiK18rIk0iK3YrIiwiK3crIkgiK20rKGQ/IlYiK0UrIkwiK18rIiwiK1QrIkwiK20rIiwiK0w6IiIpKyJWIitrKyJIIit2KyhkPyJWIitMKyJMIitiKyIsIitUKyJMIit2KyIsIitFOiIiKSsiWk0iK2krIiwiK3crIlYiK0ErIk0iK2krIiwiK2srIlYiK1MrKDA9PT1wPyIiOiJNIit5KyIsIitBKyJIIit4KyJNIit5KyIsIitTKyJIIit4KSl9KX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBsPWUueCxjPWUueSx1PW4uYmRQb3MsaD1uLmJQb3MsZj1yLmJveHBvaW50c3x8ci5wb2ludHM7YS5zZWVkUHNldWRvUmFuZG9tKCk7dmFyIHA9dC5zZWxlY3RBbGwoImcucG9pbnRzIikuZGF0YShmP2Z1bmN0aW9uKHQpe3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7dC50PW4sdC50cmFjZT1yfSksdH06W10pO3AuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInBvaW50cyIpLHAuZXhpdCgpLnJlbW92ZSgpO3ZhciBkPXAuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShmdW5jdGlvbih0KXt2YXIgZSxuLGk9dC5wdHMyLGw9TWF0aC5tYXgoKHQubWF4LXQubWluKS8xMCx0LnEzLXQucTEpLGM9MWUtOSpsLHA9bCpzLGQ9W10sZz0wO2lmKHIuaml0dGVyKXtpZigwPT09bClmb3IoZz0xLGQ9bmV3IEFycmF5KGkubGVuZ3RoKSxlPTA7ZTxpLmxlbmd0aDtlKyspZFtlXT0xO2Vsc2UgZm9yKGU9MDtlPGkubGVuZ3RoO2UrKyl7dmFyIHY9TWF0aC5tYXgoMCxlLW8pLG09aVt2XS52LHk9TWF0aC5taW4oaS5sZW5ndGgtMSxlK28pLHg9aVt5XS52OyJhbGwiIT09ZiYmKGlbZV0udjx0LmxmP3g9TWF0aC5taW4oeCx0LmxmKTptPU1hdGgubWF4KG0sdC51ZikpO3ZhciBiPU1hdGguc3FydChwKih5LXYpLyh4LW0rYykpfHwwO2I9YS5jb25zdHJhaW4oTWF0aC5hYnMoYiksMCwxKSxkLnB1c2goYiksZz1NYXRoLm1heChiLGcpfW49MipyLmppdHRlci8oZ3x8MSl9Zm9yKGU9MDtlPGkubGVuZ3RoO2UrKyl7dmFyIF89aVtlXSx3PV8udixrPXIuaml0dGVyP24qZFtlXSooYS5wc2V1ZG9SYW5kb20oKS0uNSk6MCxUPXQucG9zK2grdSooci5wb2ludHBvcytrKTsiaCI9PT1yLm9yaWVudGF0aW9uPyhfLnk9VCxfLng9dyk6KF8ueD1ULF8ueT13KSwic3VzcGVjdGVkb3V0bGllcnMiPT09ZiYmdzx0LnVvJiZ3PnQubG8mJihfLnNvPSEwKX1yZXR1cm4gaX0pO2QuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJwb2ludCIsITApLGQuZXhpdCgpLnJlbW92ZSgpLGQuY2FsbChpLnRyYW5zbGF0ZVBvaW50cyxsLGMpfWZ1bmN0aW9uIHUodCxlLHIsaSl7dmFyIG8scyxsPWUucG9zLGM9ZS52YWwsdT1pLmJQb3MsaD1pLmJQb3NQeE9mZnNldHx8MCxmPXIuYm94bWVhbnx8KHIubWVhbmxpbmV8fHt9KS52aXNpYmxlO0FycmF5LmlzQXJyYXkoaS5iZFBvcyk/KG89aS5iZFBvc1swXSxzPWkuYmRQb3NbMV0pOihvPWkuYmRQb3Mscz1pLmJkUG9zKTt2YXIgcD10LnNlbGVjdEFsbCgicGF0aC5tZWFuIikuZGF0YSgiYm94Ij09PXIudHlwZSYmci5ib3htZWFufHwidmlvbGluIj09PXIudHlwZSYmci5ib3gudmlzaWJsZSYmci5tZWFubGluZS52aXNpYmxlP2EuaWRlbnRpdHk6W10pO3AuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1lYW4iKS5zdHlsZSh7ZmlsbDoibm9uZSIsInZlY3Rvci1lZmZlY3QiOiJub24tc2NhbGluZy1zdHJva2UifSkscC5leGl0KCkucmVtb3ZlKCkscC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWwuYzJsKHQucG9zK3UsITApLGE9bC5sMnAoZSkraCxpPWwubDJwKGUtbykraCxwPWwubDJwKGUrcykraCxkPWMuYzJwKHQubWVhbiwhMCksZz1jLmMycCh0Lm1lYW4tdC5zZCwhMCksdj1jLmMycCh0Lm1lYW4rdC5zZCwhMCk7ImgiPT09ci5vcmllbnRhdGlvbj9uLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrZCsiLCIraSsiViIrcCsoInNkIj09PWY/Im0wLDBMIitnKyIsIithKyJMIitkKyIsIitpKyJMIit2KyIsIithKyJaIjoiIikpOm4uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitpKyIsIitkKyJIIitwKygic2QiPT09Zj8ibTAsMEwiK2ErIiwiK2crIkwiK2krIiwiK2QrIkwiK2ErIiwiK3YrIloiOiIiKSl9KX1lLmV4cG9ydHM9e3Bsb3Q6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIG89ZS54YXhpcyxzPWUueWF4aXM7YS5tYWtlVHJhY2VHcm91cHMoaSxyLCJ0cmFjZSBib3hlcyIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGUscixhPW4uc2VsZWN0KHRoaXMpLGk9dFswXSxoPWkudCxmPWkudHJhY2U7aC53ZFBvcz1oLmJkUG9zKmYud2hpc2tlcndpZHRoLCEwIT09Zi52aXNpYmxlfHxoLmVtcHR5P2EucmVtb3ZlKCk6KCJoIj09PWYub3JpZW50YXRpb24/KGU9cyxyPW8pOihlPW8scj1zKSxsKGEse3BvczplLHZhbDpyfSxmLGgpLGMoYSx7eDpvLHk6c30sZixoKSx1KGEse3BvczplLHZhbDpyfSxmLGgpKX0pfSxwbG90Qm94QW5kV2hpc2tlcnM6bCxwbG90UG9pbnRzOmMscGxvdEJveE1lYW46dX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uLy4uL2xpYiI6NzE3LGQzOjE2NX1dLDg5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGE9dC5jZCxpPXQueGF4aXMsbz10LnlheGlzLHM9W107aWYoITE9PT1lKWZvcihyPTA7cjxhLmxlbmd0aDtyKyspZm9yKG49MDtuPChhW3JdLnB0c3x8W10pLmxlbmd0aDtuKyspYVtyXS5wdHNbbl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxhLmxlbmd0aDtyKyspZm9yKG49MDtuPChhW3JdLnB0c3x8W10pLmxlbmd0aDtuKyspe3ZhciBsPWFbcl0ucHRzW25dLGM9aS5jMnAobC54KSx1PW8uYzJwKGwueSk7ZS5jb250YWlucyhbYyx1XSxudWxsLGwuaSx0KT8ocy5wdXNoKHtwb2ludE51bWJlcjpsLmkseDppLmMyZChsLngpLHk6by5jMmQobC55KX0pLGwuc2VsZWN0ZWQ9MSk6bC5zZWxlY3RlZD0wfXJldHVybiBzfX0se31dLDg5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUscil7dmFyIG89cnx8bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLnRyYWNlLmJveGVzIik7by5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLG8uZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxvPWVbMF0udHJhY2Uscz1vLmxpbmUud2lkdGg7ZnVuY3Rpb24gbCh0LGUscixuKXt0LnN0eWxlKCJzdHJva2Utd2lkdGgiLGUrInB4IikuY2FsbChhLnN0cm9rZSxyKS5jYWxsKGEuZmlsbCxuKX12YXIgYz1yLnNlbGVjdEFsbCgicGF0aC5ib3giKTtpZigiY2FuZGxlc3RpY2siPT09by50eXBlKWMuZWFjaChmdW5jdGlvbih0KXtpZighdC5lbXB0eSl7dmFyIGU9bi5zZWxlY3QodGhpcykscj1vW3QuZGlyXTtsKGUsci5saW5lLndpZHRoLHIubGluZS5jb2xvcixyLmZpbGxjb2xvciksZS5zdHlsZSgib3BhY2l0eSIsby5zZWxlY3RlZHBvaW50cyYmIXQuc2VsZWN0ZWQ/LjM6MSl9fSk7ZWxzZXtsKGMscyxvLmxpbmUuY29sb3Isby5maWxsY29sb3IpLHIuc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6cywic3Ryb2tlLWRhc2hhcnJheSI6MipzKyJweCwiK3MrInB4In0pLmNhbGwoYS5zdHJva2Usby5saW5lLmNvbG9yKTt2YXIgdT1yLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpO2kucG9pbnRTdHlsZSh1LG8sdCl9fSl9LHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0udHJhY2UsYT1yLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpO24uc2VsZWN0ZWRwb2ludHM/aS5zZWxlY3RlZFBvaW50U3R5bGUoYSxuKTppLnBvaW50U3R5bGUoYSxuLHQpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYxMyxkMzoxNjV9XSw4OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdCxhPXQoIi4uL29obGMvYXR0cmlidXRlcyIpLGk9dCgiLi4vYm94L2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBvKHQpe3JldHVybntsaW5lOntjb2xvcjpuKHt9LGkubGluZS5jb2xvcix7ZGZsdDp0fSksd2lkdGg6aS5saW5lLndpZHRoLGVkaXRUeXBlOiJzdHlsZSJ9LGZpbGxjb2xvcjppLmZpbGxjb2xvcixlZGl0VHlwZToic3R5bGUifX1lLmV4cG9ydHM9e3g6YS54LG9wZW46YS5vcGVuLGhpZ2g6YS5oaWdoLGxvdzphLmxvdyxjbG9zZTphLmNsb3NlLGxpbmU6e3dpZHRoOm4oe30saS5saW5lLndpZHRoLHt9KSxlZGl0VHlwZToic3R5bGUifSxpbmNyZWFzaW5nOm8oYS5pbmNyZWFzaW5nLmxpbmUuY29sb3IuZGZsdCksZGVjcmVhc2luZzpvKGEuZGVjcmVhc2luZy5saW5lLmNvbG9yLmRmbHQpLHRleHQ6YS50ZXh0LGhvdmVydGV4dDphLmhvdmVydGV4dCx3aGlza2Vyd2lkdGg6bih7fSxpLndoaXNrZXJ3aWR0aCx7ZGZsdDowfSksaG92ZXJsYWJlbDphLmhvdmVybGFiZWx9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi9ib3gvYXR0cmlidXRlcyI6ODgxLCIuLi9vaGxjL2F0dHJpYnV0ZXMiOjEwNjZ9XSw4OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vb2hsYy9jYWxjIikuY2FsY0NvbW1vbjtmdW5jdGlvbiBvKHQsZSxyLG4pe3JldHVybnttaW46cixxMTpNYXRoLm1pbih0LG4pLG1lZDpuLHEzOk1hdGgubWF4KHQsbiksbWF4OmV9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQscz1hLmdldEZyb21JZCh0LGUueGF4aXMpLGw9YS5nZXRGcm9tSWQodCxlLnlheGlzKSxjPXMubWFrZUNhbGNkYXRhKGUsIngiKSx1PWkodCxlLGMsbCxvKTtyZXR1cm4gdS5sZW5ndGg/KG4uZXh0ZW5kRmxhdCh1WzBdLnQse251bTpyLl9udW1Cb3hlcyxkUG9zOm4uZGlzdGluY3RWYWxzKGMpLm1pbkRpZmYvMixwb3NMZXR0ZXI6IngiLHZhbExldHRlcjoieSJ9KSxyLl9udW1Cb3hlcysrLHUpOlt7dDp7ZW1wdHk6ITB9fV19fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi9vaGxjL2NhbGMiOjEwNjd9XSw4OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi9vaGxjL29obGNfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHModCxlLHIsbil7dmFyIGk9cihuKyIubGluZS5jb2xvciIpO3IobisiLmxpbmUud2lkdGgiLGUubGluZS53aWR0aCkscihuKyIuZmlsbGNvbG9yIixhLmFkZE9wYWNpdHkoaSwuNSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtmdW5jdGlvbiBsKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsYSl9aSh0LGUsbCxhKT8obCgibGluZS53aWR0aCIpLHModCxlLGwsImluY3JlYXNpbmciKSxzKHQsZSxsLCJkZWNyZWFzaW5nIiksbCgidGV4dCIpLGwoImhvdmVydGV4dCIpLGwoIndoaXNrZXJ3aWR0aCIpLGEuX3JlcXVlc3RSYW5nZXNsaWRlcltlLnhheGlzXT0hMCk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uL2xpYiI6NzE3LCIuLi9vaGxjL29obGNfZGVmYXVsdHMiOjEwNzEsIi4vYXR0cmlidXRlcyI6ODkzfV0sODk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNhbmRsZXN0aWNrIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic2hvd0xlZ2VuZCIsImNhbmRsZXN0aWNrIiwiYm94TGF5b3V0Il0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi4vYm94L2xheW91dF9kZWZhdWx0cyIpLnN1cHBseUxheW91dERlZmF1bHRzLGNyb3NzVHJhY2VDYWxjOnQoIi4uL2JveC9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMsc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuLi9ib3gvcGxvdCIpLnBsb3QsbGF5ZXJOYW1lOiJib3hsYXllciIsc3R5bGU6dCgiLi4vYm94L3N0eWxlIikuc3R5bGUsaG92ZXJQb2ludHM6dCgiLi4vb2hsYy9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9vaGxjL3NlbGVjdCIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NiwiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiOjg4MywiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIjo4ODgsIi4uL2JveC9sYXlvdXRfZGVmYXVsdHMiOjg4OSwiLi4vYm94L3Bsb3QiOjg5MCwiLi4vYm94L3N0eWxlIjo4OTIsIi4uL29obGMvaG92ZXIiOjEwNjksIi4uL29obGMvc2VsZWN0IjoxMDczLCIuL2F0dHJpYnV0ZXMiOjg5MywiLi9jYWxjIjo4OTQsIi4vZGVmYXVsdHMiOjg5NX1dLDg5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F4aXNfZGVmYXVsdHMiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxvKXtpKCJhIil8fChpKCJkYSIpLGkoImEwIikpLGkoImIiKXx8KGkoImRiIiksaSgiYjAiKSksZnVuY3Rpb24odCxlLHIsaSl7WyJhYXhpcyIsImJheGlzIl0uZm9yRWFjaChmdW5jdGlvbihvKXt2YXIgcz1vLmNoYXJBdCgwKSxsPXRbb118fHt9LGM9YS5uZXdDb250YWluZXIoZSxvKSx1PXt0aWNrZm9udDoieCIsaWQ6cysiYXhpcyIsbGV0dGVyOnMsZm9udDplLmZvbnQsbmFtZTpvLGRhdGE6dFtzXSxjYWxlbmRhcjplLmNhbGVuZGFyLGRmbHRDb2xvcjppLGJnQ29sb3I6ci5wYXBlcl9iZ2NvbG9yLGZ1bGxMYXlvdXQ6cn07bihsLGMsdSksYy5fY2F0ZWdvcmllcz1jLl9jYXRlZ29yaWVzfHxbXSx0W29dfHwiLSI9PT1sLnR5cGV8fCh0W29dPXt0eXBlOmwudHlwZX0pfSl9KHQsZSxyLG8pfX0seyIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3NTUsIi4vYXhpc19kZWZhdWx0cyI6OTAyfV0sODk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KGUscil7aWYoIW4oZSl8fHI+PTEwKXJldHVybiBudWxsO3ZhciBhPTEvMDt2YXIgaT0tMS8wO3ZhciBvPWUubGVuZ3RoO2Zvcih2YXIgcz0wO3M8bztzKyspe3ZhciBsPWVbc107aWYobihsKSl7dmFyIGM9dChsLHIrMSk7YyYmKGE9TWF0aC5taW4oY1swXSxhKSxpPU1hdGgubWF4KGNbMV0saSkpfWVsc2UgYT1NYXRoLm1pbihsLGEpLGk9TWF0aC5tYXgobCxpKX1yZXR1cm5bYSxpXX0odCwwKX19LHsiLi4vLi4vbGliIjo3MTd9XSw4OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuL2F4aXNfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz1uKHtlZGl0VHlwZToiY2FsYyJ9KTtvLmZhbWlseS5kZmx0PSciT3BlbiBTYW5zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG8uc2l6ZS5kZmx0PTEyLG8uY29sb3IuZGZsdD1pLmRlZmF1bHRMaW5lLGUuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYTA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZGE6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sYjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkYjp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxjaGVhdGVyc2xvcGU6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sYWF4aXM6YSxiYXhpczphLGZvbnQ6byxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LHRyYW5zZm9ybXM6dm9pZCAwfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjU5MSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3OTEsIi4vYXhpc19hdHRyaWJ1dGVzIjo5MDF9XSw5MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIGksbyxzLGwsYyx1LGgsZixwLGQsZyx2LG0seT1uKHIpPyJhIjoiYiIseD0oImEiPT09eT90LmFheGlzOnQuYmF4aXMpLnNtb290aGluZyxiPSJhIj09PXk/dC5hMmk6dC5iMmosXz0iYSI9PT15P3I6YSx3PSJhIj09PXk/YTpyLGs9ImEiPT09eT9lLmEubGVuZ3RoOmUuYi5sZW5ndGgsVD0iYSI9PT15P2UuYi5sZW5ndGg6ZS5hLmxlbmd0aCxNPU1hdGguZmxvb3IoImEiPT09eT90LmIyaih3KTp0LmEyaSh3KSksQT0iYSI9PT15P2Z1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxlLE0pfTpmdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sTSxlKX07eCYmKHM9TWF0aC5tYXgoMCxNYXRoLm1pbihULTIsTSkpLGw9TS1zLG89ImEiPT09eT9mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRpKFtdLGUscyxyLGwpfTpmdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRqKFtdLHMsZSxsLHIpfSk7dmFyIFM9YihfWzBdKSxFPWIoX1sxXSksTD1TPEU/MTotMSxDPTFlLTgqKEUtUyksUD1MPjA/TWF0aC5mbG9vcjpNYXRoLmNlaWwsTz1MPjA/TWF0aC5jZWlsOk1hdGguZmxvb3Isej1MPjA/TWF0aC5taW46TWF0aC5tYXgsST1MPjA/TWF0aC5tYXg6TWF0aC5taW4sRD1QKFMrQyksUj1PKEUtQyksRj1bW2g9QShTKV1dO2ZvcihpPUQ7aSpMPFIqTDtpKz1MKWM9W10sZz1JKFMsaSksbT0odj16KEUsaStMKSktZyx1PU1hdGgubWF4KDAsTWF0aC5taW4oay0yLE1hdGguZmxvb3IoLjUqKGcrdikpKSksZj1BKHYpLHgmJihwPW8odSxnLXUpLGQ9byh1LHYtdSksYy5wdXNoKFtoWzBdK3BbMF0vMyptLGhbMV0rcFsxXS8zKm1dKSxjLnB1c2goW2ZbMF0tZFswXS8zKm0sZlsxXS1kWzFdLzMqbV0pKSxjLnB1c2goZiksRi5wdXNoKGMpLGg9ZjtyZXR1cm4gRn19LHsiLi4vLi4vbGliIjo3MTd9XSw5MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsO3QoIi4uLy4uL2NvbnN0YW50cy9kb2NzIikuRk9STUFUX0xJTkssdCgiLi4vLi4vY29uc3RhbnRzL2RvY3MiKS5USU1FX0ZPUk1BVF9MSU5LO2UuZXhwb3J0cz17Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LHNtb290aGluZzp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsbWluOjAsbWF4OjEuMyxlZGl0VHlwZToiY2FsYyJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxmb250Om4oe2VkaXRUeXBlOiJjYWxjIn0pLG9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyItIiwibGluZWFyIiwiZGF0ZSIsImNhdGVnb3J5Il0sZGZsdDoiLSIsZWRpdFR5cGU6ImNhbGMifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsInJldmVyc2VkIl0sZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHJhbmdlbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9ybWFsIiwidG96ZXJvIiwibm9ubmVnYXRpdmUiXSxkZmx0OiJub3JtYWwiLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGVkaXRUeXBlOiJjYWxjIixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9XX0sZml4ZWRyYW5nZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNoZWF0ZXJ0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmRleCIsInZhbHVlIl0sZGZsdDoidmFsdWUiLGVkaXRUeXBlOiJjYWxjIn0sdGlja21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImFycmF5Il0sZGZsdDoiYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbnRpY2tzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx0aWNrdmFsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0aWNrdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhcnQiLCJlbmQiLCJib3RoIiwibm9uZSJdLGRmbHQ6InN0YXJ0IixlZGl0VHlwZToiY2FsYyJ9LHRpY2tmb250Om4oe2VkaXRUeXBlOiJjYWxjIn0pLHRpY2thbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJjYWxjIn0sdGlja3ByZWZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd3RpY2twcmVmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJjYWxjIn0sdGlja3N1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd3RpY2tzdWZmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2V4cG9uZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToiY2FsYyJ9LGV4cG9uZW50Zm9ybWF0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwiZSIsIkUiLCJwb3dlciIsIlNJIiwiQiJdLGRmbHQ6IkIiLGVkaXRUeXBlOiJjYWxjIn0sc2VwYXJhdGV0aG91c2FuZHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSx0aWNrZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSx0aWNrZm9ybWF0c3RvcHM6byhpLnRpY2tmb3JtYXRzdG9wcywiY2FsYyIsImZyb20tcm9vdCIpLGNhdGVnb3J5b3JkZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRyYWNlIiwiY2F0ZWdvcnkgYXNjZW5kaW5nIiwiY2F0ZWdvcnkgZGVzY2VuZGluZyIsImFycmF5Il0sZGZsdDoidHJhY2UiLGVkaXRUeXBlOiJjYWxjIn0sY2F0ZWdvcnlhcnJheTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsYWJlbHBhZGRpbmc6e3ZhbFR5cGU6ImludGVnZXIiLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSxsYWJlbHByZWZpeDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LGxhYmVsc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzaG93bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZToiY2FsYyJ9LGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LGdyaWR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LG1pbm9yZ3JpZGNvdW50Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxtaW5vcmdyaWR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxtaW5vcmdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5saWdodExpbmUsZWRpdFR5cGU6ImNhbGMifSxzdGFydGxpbmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnRsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0bGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGVuZGxpbmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJjYWxjIn0sZW5kbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGVuZGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sdGljazA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZHRpY2s6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sYXJyYXl0aWNrMDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sYXJyYXlkdGljazp7dmFsVHlwZToiaW50ZWdlciIsbWluOjEsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sdGl0bGVmb250Om4oe2VkaXRUeXBlOiJjYWxjIn0pLHRpdGxlb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifX0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjU5MSwiLi4vLi4vY29uc3RhbnRzL2RvY3MiOjY4OCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzQ4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3NywiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3OTF9XSw5MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikuYWRkT3BhY2l0eSxpPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiKSxoPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgZj1yLmxldHRlcixwPXIuZm9udHx8e30sZD1uW2YrImF4aXMiXTtmdW5jdGlvbiBnKHIsbil7cmV0dXJuIG8uY29lcmNlKHQsZSxkLHIsbil9ZnVuY3Rpb24gdihyLG4pe3JldHVybiBvLmNvZXJjZTIodCxlLGQscixuKX1yLm5hbWUmJihlLl9uYW1lPXIubmFtZSxlLl9pZD1yLm5hbWUpO3ZhciBtPWcoInR5cGUiKTsoIi0iPT09bSYmKHIuZGF0YSYmZnVuY3Rpb24odCxlKXtpZigiLSIhPT10LnR5cGUpcmV0dXJuO3ZhciByPXQuX2lkLmNoYXJBdCgwKSxuPXRbcisiY2FsZW5kYXIiXTt0LnR5cGU9aChlLG4pfShlLHIuZGF0YSksIi0iPT09ZS50eXBlP2UudHlwZT0ibGluZWFyIjptPXQudHlwZT1lLnR5cGUpLGcoInNtb290aGluZyIpLGcoImNoZWF0ZXJ0eXBlIiksZygic2hvd3RpY2tsYWJlbHMiKSxnKCJsYWJlbHByZWZpeCIsZisiID0gIiksZygibGFiZWxzdWZmaXgiKSxnKCJzaG93dGlja3ByZWZpeCIpLGcoInNob3d0aWNrc3VmZml4IiksZygic2VwYXJhdGV0aG91c2FuZHMiKSxnKCJ0aWNrZm9ybWF0IiksZygiZXhwb25lbnRmb3JtYXQiKSxnKCJzaG93ZXhwb25lbnQiKSxnKCJjYXRlZ29yeW9yZGVyIiksZygidGlja21vZGUiKSxnKCJ0aWNrdmFscyIpLGcoInRpY2t0ZXh0IiksZygidGljazAiKSxnKCJkdGljayIpLCJhcnJheSI9PT1lLnRpY2ttb2RlJiYoZygiYXJyYXl0aWNrMCIpLGcoImFycmF5ZHRpY2siKSksZygibGFiZWxwYWRkaW5nIiksZS5faG92ZXJ0aXRsZT1mLCJkYXRlIj09PW0pJiZpLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsImNhbGVuZGFyIixyLmNhbGVuZGFyKTt1KGUsci5mdWxsTGF5b3V0KSxlLmMycD1vLmlkZW50aXR5O3ZhciB5PWcoImNvbG9yIixyLmRmbHRDb2xvcikseD15PT09dC5jb2xvcj95OnAuY29sb3I7ZygidGl0bGUudGV4dCIpJiYoby5jb2VyY2VGb250KGcsInRpdGxlLmZvbnQiLHtmYW1pbHk6cC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuMipwLnNpemUpLGNvbG9yOnh9KSxnKCJ0aXRsZS5vZmZzZXQiKSksZygidGlja2FuZ2xlIiksZygiYXV0b3JhbmdlIiwhZS5pc1ZhbGlkUmFuZ2UodC5yYW5nZSkpJiZnKCJyYW5nZW1vZGUiKSxnKCJyYW5nZSIpLGUuY2xlYW5SYW5nZSgpLGcoImZpeGVkcmFuZ2UiKSxzKHQsZSxnLG0pLGwodCxlLGcsbSxyKSxjKHQsZSxnLHtkYXRhOnIuZGF0YSxkYXRhQXR0cjpmfSk7dmFyIGI9digiZ3JpZGNvbG9yIixhKHksLjMpKSxfPXYoImdyaWR3aWR0aCIpLHc9Zygic2hvd2dyaWQiKTt3fHwoZGVsZXRlIGUuZ3JpZGNvbG9yLGRlbGV0ZSBlLmdyaWR3aWR0aCk7dmFyIGs9digic3RhcnRsaW5lY29sb3IiLHkpLFQ9digic3RhcnRsaW5ld2lkdGgiLF8pO2coInN0YXJ0bGluZSIsZS5zaG93Z3JpZHx8ISFrfHwhIVQpfHwoZGVsZXRlIGUuc3RhcnRsaW5lY29sb3IsZGVsZXRlIGUuc3RhcnRsaW5ld2lkdGgpO3ZhciBNPXYoImVuZGxpbmVjb2xvciIseSksQT12KCJlbmRsaW5ld2lkdGgiLF8pO3JldHVybiBnKCJlbmRsaW5lIixlLnNob3dncmlkfHwhIU18fCEhQSl8fChkZWxldGUgZS5lbmRsaW5lY29sb3IsZGVsZXRlIGUuZW5kbGluZXdpZHRoKSx3PyhnKCJtaW5vcmdyaWRjb3VudCIpLGcoIm1pbm9yZ3JpZHdpZHRoIixfKSxnKCJtaW5vcmdyaWRjb2xvciIsYShiLC4wNikpLGUubWlub3JncmlkY291bnR8fChkZWxldGUgZS5taW5vcmdyaWR3aWR0aCxkZWxldGUgZS5taW5vcmdyaWRjb2xvcikpOihkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZFdpZHRoKSwibm9uZSI9PT1lLnNob3d0aWNrbGFiZWxzJiYoZGVsZXRlIGUudGlja2ZvbnQsZGVsZXRlIGUudGlja2FuZ2xlLGRlbGV0ZSBlLnNob3dleHBvbmVudCxkZWxldGUgZS5leHBvbmVudGZvcm1hdCxkZWxldGUgZS50aWNrZm9ybWF0LGRlbGV0ZSBlLnNob3d0aWNrc3VmZml4LGRlbGV0ZSBlLnNob3d0aWNrcHJlZml4KSxlLnNob3d0aWNrc3VmZml4fHxkZWxldGUgZS50aWNrc3VmZml4LGUuc2hvd3RpY2twcmVmaXh8fGRlbGV0ZSBlLnRpY2twcmVmaXgsZygidGlja21vZGUiKSxlfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSI6NzY2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiOjc2OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo3ODMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo3ODQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo3ODYsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4vYXR0cmlidXRlcyI6ODk5fV0sOTAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9saWIiKS5pc0FycmF5MUQsaT10KCIuL2NoZWF0ZXJfYmFzaXMiKSxvPXQoIi4vYXJyYXlfbWlubWF4Iikscz10KCIuL2NhbGNfZ3JpZGxpbmVzIiksbD10KCIuL2NhbGNfbGFiZWxzIiksYz10KCIuL2NhbGNfY2xpcHBhdGgiKSx1PXQoIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiKSxoPXQoIi4vc21vb3RoX2ZpbGxfMmRfYXJyYXkiKSxmPXQoIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6IikscD10KCIuL3NldF9jb252ZXJ0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5nZXRGcm9tSWQodCxlLnhheGlzKSxkPW4uZ2V0RnJvbUlkKHQsZS55YXhpcyksZz1lLmFheGlzLHY9ZS5iYXhpcyxtPWUueCx5PWUueSx4PVtdO20mJmEobSkmJngucHVzaCgieCIpLHkmJmEoeSkmJngucHVzaCgieSIpLHgubGVuZ3RoJiZmKGUsZyx2LCJhIiwiYiIseCk7dmFyIGI9ZS5fYT1lLl9hfHxlLmEsXz1lLl9iPWUuX2J8fGUuYjttPWUuX3h8fGUueCx5PWUuX3l8fGUueTt2YXIgdz17fTtpZihlLl9jaGVhdGVyKXt2YXIgaz0iaW5kZXgiPT09Zy5jaGVhdGVydHlwZT9iLmxlbmd0aDpiLFQ9ImluZGV4Ij09PXYuY2hlYXRlcnR5cGU/Xy5sZW5ndGg6XzttPWkoayxULGUuY2hlYXRlcnNsb3BlKX1lLl94PW09dShtKSxlLl95PXk9dSh5KSxoKG0sYixfKSxoKHksYixfKSxwKGUpLGUuc2V0U2NhbGUoKTt2YXIgTT1vKG0pLEE9byh5KSxTPS41KihNWzFdLU1bMF0pLEU9LjUqKE1bMV0rTVswXSksTD0uNSooQVsxXS1BWzBdKSxDPS41KihBWzFdK0FbMF0pO3JldHVybiBNPVtFLTEuMypTLEUrMS4zKlNdLEE9W0MtMS4zKkwsQysxLjMqTF0sZS5fZXh0cmVtZXNbci5faWRdPW4uZmluZEV4dHJlbWVzKHIsTSx7cGFkZGVkOiEwfSksZS5fZXh0cmVtZXNbZC5faWRdPW4uZmluZEV4dHJlbWVzKGQsQSx7cGFkZGVkOiEwfSkscyhlLCJhIiwiYiIpLHMoZSwiYiIsImEiKSxsKGUsZyksbChlLHYpLHcuY2xpcHNlZ21lbnRzPWMoZS5feGN0cmwsZS5feWN0cmwsZyx2KSx3Lng9bSx3Lnk9eSx3LmE9Yix3LmI9Xyxbd119fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5IjoxMDAyLCIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5eiI6MTAwNCwiLi9hcnJheV9taW5tYXgiOjg5OCwiLi9jYWxjX2NsaXBwYXRoIjo5MDQsIi4vY2FsY19ncmlkbGluZXMiOjkwNSwiLi9jYWxjX2xhYmVscyI6OTA2LCIuL2NoZWF0ZXJfYmFzaXMiOjkwOCwiLi9zZXRfY29udmVydCI6OTIxLCIuL3Ntb290aF9maWxsXzJkX2FycmF5Ijo5MjJ9XSw5MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGksbyxzPVtdLGw9ISFyLnNtb290aGluZyxjPSEhbi5zbW9vdGhpbmcsdT10WzBdLmxlbmd0aC0xLGg9dC5sZW5ndGgtMTtmb3IoYT0wLGk9W10sbz1bXTthPD11O2ErKylpW2FdPXRbMF1bYV0sb1thXT1lWzBdW2FdO2ZvcihzLnB1c2goe3g6aSx5Om8sYmljdWJpYzpsfSksYT0wLGk9W10sbz1bXTthPD1oO2ErKylpW2FdPXRbYV1bdV0sb1thXT1lW2FdW3VdO2ZvcihzLnB1c2goe3g6aSx5Om8sYmljdWJpYzpjfSksYT11LGk9W10sbz1bXTthPj0wO2EtLSlpW3UtYV09dFtoXVthXSxvW3UtYV09ZVtoXVthXTtmb3Iocy5wdXNoKHt4OmkseTpvLGJpY3ViaWM6bH0pLGE9aCxpPVtdLG89W107YT49MDthLS0paVtoLWFdPXRbYV1bMF0sb1toLWFdPWVbYV1bMF07cmV0dXJuIHMucHVzaCh7eDppLHk6byxiaWN1YmljOmN9KSxzfX0se31dLDkwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvLHMsbCxjLHUsaCxmLHAsZCxnLHYsbSx5LHg9dFsiXyIrZV0sYj10W2UrImF4aXMiXSxfPWIuX2dyaWRsaW5lcz1bXSx3PWIuX21pbm9yZ3JpZGxpbmVzPVtdLGs9Yi5fYm91bmRhcnlsaW5lcz1bXSxUPXRbIl8iK3JdLE09dFtyKyJheGlzIl07ImFycmF5Ij09PWIudGlja21vZGUmJihiLnRpY2t2YWxzPXguc2xpY2UoKSk7dmFyIEE9dC5feGN0cmwsUz10Ll95Y3RybCxFPUFbMF0ubGVuZ3RoLEw9QS5sZW5ndGgsQz10Ll9hLmxlbmd0aCxQPXQuX2IubGVuZ3RoO24ucHJlcFRpY2tzKGIpLCJhcnJheSI9PT1iLnRpY2ttb2RlJiZkZWxldGUgYi50aWNrdmFsczt2YXIgTz1iLnNtb290aGluZz8zOjE7ZnVuY3Rpb24geihuKXt2YXIgYSxpLG8scyxsLGMsdSxoLHAsZCxnLHYsbT1bXSx5PVtdLHg9e307aWYoImIiPT09ZSlmb3IoaT10LmIyaihuKSxvPU1hdGguZmxvb3IoTWF0aC5tYXgoMCxNYXRoLm1pbihQLTIsaSkpKSxzPWktbyx4Lmxlbmd0aD1QLHguY3Jvc3NMZW5ndGg9Qyx4Lnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxlLGkpfSx4LmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRpKFtdLGUsbyxyLHMpfSxhPTA7YTxDO2ErKyljPU1hdGgubWluKEMtMixhKSx1PWEtYyxoPXQuZXZhbHh5KFtdLGEsaSksTS5zbW9vdGhpbmcmJmE+MCYmKHA9dC5keHlkaShbXSxhLTEsbywwLHMpLG0ucHVzaChsWzBdK3BbMF0vMykseS5wdXNoKGxbMV0rcFsxXS8zKSxkPXQuZHh5ZGkoW10sYS0xLG8sMSxzKSxtLnB1c2goaFswXS1kWzBdLzMpLHkucHVzaChoWzFdLWRbMV0vMykpLG0ucHVzaChoWzBdKSx5LnB1c2goaFsxXSksbD1oO2Vsc2UgZm9yKGE9dC5hMmkobiksYz1NYXRoLmZsb29yKE1hdGgubWF4KDAsTWF0aC5taW4oQy0yLGEpKSksdT1hLWMseC5sZW5ndGg9Qyx4LmNyb3NzTGVuZ3RoPVAseC54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sYSxlKX0seC5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxjLGUsdSxyKX0saT0wO2k8UDtpKyspbz1NYXRoLm1pbihQLTIsaSkscz1pLW8saD10LmV2YWx4eShbXSxhLGkpLE0uc21vb3RoaW5nJiZpPjAmJihnPXQuZHh5ZGooW10sYyxpLTEsdSwwKSxtLnB1c2gobFswXStnWzBdLzMpLHkucHVzaChsWzFdK2dbMV0vMyksdj10LmR4eWRqKFtdLGMsaS0xLHUsMSksbS5wdXNoKGhbMF0tdlswXS8zKSx5LnB1c2goaFsxXS12WzFdLzMpKSxtLnB1c2goaFswXSkseS5wdXNoKGhbMV0pLGw9aDtyZXR1cm4geC5heGlzTGV0dGVyPWUseC5heGlzPWIseC5jcm9zc0F4aXM9TSx4LnZhbHVlPW4seC5jb25zdHZhcj1yLHguaW5kZXg9Zix4Lng9bSx4Lnk9eSx4LnNtb290aGluZz1NLnNtb290aGluZyx4fWZ1bmN0aW9uIEkobil7dmFyIGEsaSxvLHMsbCxjPVtdLHU9W10saD17fTtpZihoLmxlbmd0aD14Lmxlbmd0aCxoLmNyb3NzTGVuZ3RoPVQubGVuZ3RoLCJiIj09PWUpZm9yKG89TWF0aC5tYXgoMCxNYXRoLm1pbihQLTIsbikpLGw9TWF0aC5taW4oMSxNYXRoLm1heCgwLG4tbykpLGgueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsbil9LGguZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxvLHIsbCl9LGE9MDthPEU7YSsrKWNbYV09QVtuKk9dW2FdLHVbYV09U1tuKk9dW2FdO2Vsc2UgZm9yKGk9TWF0aC5tYXgoMCxNYXRoLm1pbihDLTIsbikpLHM9TWF0aC5taW4oMSxNYXRoLm1heCgwLG4taSkpLGgueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLG4sZSl9LGguZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10saSxlLHMscil9LGE9MDthPEw7YSsrKWNbYV09QVthXVtuKk9dLHVbYV09U1thXVtuKk9dO3JldHVybiBoLmF4aXNMZXR0ZXI9ZSxoLmF4aXM9YixoLmNyb3NzQXhpcz1NLGgudmFsdWU9eFtuXSxoLmNvbnN0dmFyPXIsaC5pbmRleD1uLGgueD1jLGgueT11LGguc21vb3RoaW5nPU0uc21vb3RoaW5nLGh9aWYoImFycmF5Ij09PWIudGlja21vZGUpe2ZvcihsPTVlLTE1LHU9KGM9W01hdGguZmxvb3IoKHgubGVuZ3RoLTEtYi5hcnJheXRpY2swKS9iLmFycmF5ZHRpY2sqKDErbCkpLE1hdGguY2VpbCgtYi5hcnJheXRpY2swL2IuYXJyYXlkdGljay8oMStsKSldLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpWzBdLTEsaD1jWzFdKzEsZj11O2Y8aDtmKyspKG89Yi5hcnJheXRpY2swK2IuYXJyYXlkdGljaypmKTwwfHxvPngubGVuZ3RoLTF8fF8ucHVzaChhKEkobykse2NvbG9yOmIuZ3JpZGNvbG9yLHdpZHRoOmIuZ3JpZHdpZHRofSkpO2ZvcihmPXU7ZjxoO2YrKylpZihzPWIuYXJyYXl0aWNrMCtiLmFycmF5ZHRpY2sqZixnPU1hdGgubWluKHMrYi5hcnJheWR0aWNrLHgubGVuZ3RoLTEpLCEoczwwfHxzPngubGVuZ3RoLTF8fGc8MHx8Zz54Lmxlbmd0aC0xKSlmb3Iodj14W3NdLG09eFtnXSxpPTA7aTxiLm1pbm9yZ3JpZGNvdW50O2krKykoeT1nLXMpPD0wfHwoZD12KyhtLXYpKihpKzEpLyhiLm1pbm9yZ3JpZGNvdW50KzEpKihiLmFycmF5ZHRpY2sveSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGEoeihkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZrLnB1c2goYShJKDApLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZrLnB1c2goYShJKHgubGVuZ3RoLTEpLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX1lbHNle2ZvcihsPTVlLTE1LHU9KGM9W01hdGguZmxvb3IoKHhbeC5sZW5ndGgtMV0tYi50aWNrMCkvYi5kdGljayooMStsKSksTWF0aC5jZWlsKCh4WzBdLWIudGljazApL2IuZHRpY2svKDErbCkpXS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKVswXSxoPWNbMV0sZj11O2Y8PWg7ZisrKXA9Yi50aWNrMCtiLmR0aWNrKmYsXy5wdXNoKGEoeihwKSx7Y29sb3I6Yi5ncmlkY29sb3Isd2lkdGg6Yi5ncmlkd2lkdGh9KSk7Zm9yKGY9dS0xO2Y8aCsxO2YrKylmb3IocD1iLnRpY2swK2IuZHRpY2sqZixpPTA7aTxiLm1pbm9yZ3JpZGNvdW50O2krKykoZD1wK2IuZHRpY2sqKGkrMSkvKGIubWlub3JncmlkY291bnQrMSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGEoeihkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZrLnB1c2goYSh6KHhbMF0pLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZrLnB1c2goYSh6KHhbeC5sZW5ndGgtMV0pLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NX1dLDkwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxvLHM9ZS5fbGFiZWxzPVtdLGw9ZS5fZ3JpZGxpbmVzO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspbz1sW3JdLC0xIT09WyJzdGFydCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoaT1uLnRpY2tUZXh0KGUsby52YWx1ZSksYShpLHtwcmVmaXg6dm9pZCAwLHN1ZmZpeDp2b2lkIDAsZW5kQW5jaG9yOiEwLHh5Om8ueHkoMCksZHh5Om8uZHh5KDAsMCksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChpKSksLTEhPT1bImVuZCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoaT1uLnRpY2tUZXh0KGUsby52YWx1ZSksYShpLHtlbmRBbmNob3I6ITEseHk6by54eShvLmNyb3NzTGVuZ3RoLTEpLGR4eTpvLmR4eShvLmNyb3NzTGVuZ3RoLTIsMSksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChpKSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NX1dLDkwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dFswXS1lWzBdLGk9dFsxXS1lWzFdLG89clswXS1lWzBdLHM9clsxXS1lWzFdLGw9TWF0aC5wb3coYSphK2kqaSwuMjUpLGM9TWF0aC5wb3cobypvK3MqcywuMjUpLHU9KGMqYyphLWwqbCpvKSpuLGg9KGMqYyppLWwqbCpzKSpuLGY9YyoobCtjKSozLHA9bCoobCtjKSozO3JldHVybltbZVswXSsoZiYmdS9mKSxlWzFdKyhmJiZoL2YpXSxbZVswXS0ocCYmdS9wKSxlWzFdLShwJiZoL3ApXV19fSx7fV0sOTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxpLG8scyxsLGMsdT1bXSxoPW4odCk/dC5sZW5ndGg6dCxmPW4oZSk/ZS5sZW5ndGg6ZSxwPW4odCk/dDpudWxsLGQ9bihlKT9lOm51bGw7cCYmKG89KHAubGVuZ3RoLTEpLyhwW3AubGVuZ3RoLTFdLXBbMF0pLyhoLTEpKSxkJiYocz0oZC5sZW5ndGgtMSkvKGRbZC5sZW5ndGgtMV0tZFswXSkvKGYtMSkpO3ZhciBnPTEvMCx2PS0xLzA7Zm9yKGk9MDtpPGY7aSsrKWZvcih1W2ldPVtdLGw9ZD8oZFtpXS1kWzBdKSpzOmkvKGYtMSksYT0wO2E8aDthKyspYz0ocD8ocFthXS1wWzBdKSpvOmEvKGgtMSkpLWwqcixnPU1hdGgubWluKGMsZyksdj1NYXRoLm1heChjLHYpLHVbaV1bYV09Yzt2YXIgbT0xLyh2LWcpLHk9LWcqbTtmb3IoaT0wO2k8ZjtpKyspZm9yKGE9MDthPGg7YSsrKXVbaV1bYV09bSp1W2ldW2FdK3k7cmV0dXJuIHV9fSx7Ii4uLy4uL2xpYiI6NzE3fV0sOTA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY2F0bXVsbF9yb20iKSxhPXQoIi4uLy4uL2xpYiIpLmVuc3VyZUFycmF5O2Z1bmN0aW9uIGkodCxlLHIpe3ZhciBuPS0uNSpyWzBdKzEuNSplWzBdLGE9LS41KnJbMV0rMS41KmVbMV07cmV0dXJuWygyKm4rdFswXSkvMywoMiphK3RbMV0pLzNdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGMsdSxoLGYscCxkLGcsdixtLHkseD1yWzBdLmxlbmd0aCxiPXIubGVuZ3RoLF89cz8zKngtMjp4LHc9bD8zKmItMjpiO2Zvcih0PWEodCx3KSxlPWEoZSx3KSxoPTA7aDx3O2grKyl0W2hdPWEodFtoXSxfKSxlW2hdPWEoZVtoXSxfKTtmb3IodT0wLGY9MDt1PGI7dSsrLGYrPWw/MzoxKWZvcihwPXRbZl0sZD1lW2ZdLGc9clt1XSx2PW9bdV0sYz0wLGg9MDtjPHg7YysrLGgrPXM/MzoxKXBbaF09Z1tjXSxkW2hdPXZbY107aWYocylmb3IodT0wLGY9MDt1PGI7dSsrLGYrPWw/MzoxKXtmb3IoYz0xLGg9MztjPHgtMTtjKyssaCs9MyltPW4oW3JbdV1bYy0xXSxvW3VdW2MtMV1dLFtyW3VdW2NdLG9bdV1bY11dLFtyW3VdW2MrMV0sb1t1XVtjKzFdXSxzKSx0W2ZdW2gtMV09bVswXVswXSxlW2ZdW2gtMV09bVswXVsxXSx0W2ZdW2grMV09bVsxXVswXSxlW2ZdW2grMV09bVsxXVsxXTt5PWkoW3RbZl1bMF0sZVtmXVswXV0sW3RbZl1bMl0sZVtmXVsyXV0sW3RbZl1bM10sZVtmXVszXV0pLHRbZl1bMV09eVswXSxlW2ZdWzFdPXlbMV0seT1pKFt0W2ZdW18tMV0sZVtmXVtfLTFdXSxbdFtmXVtfLTNdLGVbZl1bXy0zXV0sW3RbZl1bXy00XSxlW2ZdW18tNF1dKSx0W2ZdW18tMl09eVswXSxlW2ZdW18tMl09eVsxXX1pZihsKWZvcihoPTA7aDxfO2grKyl7Zm9yKGY9MztmPHctMztmKz0zKW09bihbdFtmLTNdW2hdLGVbZi0zXVtoXV0sW3RbZl1baF0sZVtmXVtoXV0sW3RbZiszXVtoXSxlW2YrM11baF1dLGwpLHRbZi0xXVtoXT1tWzBdWzBdLGVbZi0xXVtoXT1tWzBdWzFdLHRbZisxXVtoXT1tWzFdWzBdLGVbZisxXVtoXT1tWzFdWzFdO3k9aShbdFswXVtoXSxlWzBdW2hdXSxbdFsyXVtoXSxlWzJdW2hdXSxbdFszXVtoXSxlWzNdW2hdXSksdFsxXVtoXT15WzBdLGVbMV1baF09eVsxXSx5PWkoW3Rbdy0xXVtoXSxlW3ctMV1baF1dLFt0W3ctM11baF0sZVt3LTNdW2hdXSxbdFt3LTRdW2hdLGVbdy00XVtoXV0pLHRbdy0yXVtoXT15WzBdLGVbdy0yXVtoXT15WzFdfWlmKHMmJmwpZm9yKGY9MTtmPHc7Zis9KGYrMSklMz09MD8yOjEpe2ZvcihoPTM7aDxfLTM7aCs9MyltPW4oW3RbZl1baC0zXSxlW2ZdW2gtM11dLFt0W2ZdW2hdLGVbZl1baF1dLFt0W2ZdW2grM10sZVtmXVtoKzNdXSxzKSx0W2ZdW2gtMV09LjUqKHRbZl1baC0xXSttWzBdWzBdKSxlW2ZdW2gtMV09LjUqKGVbZl1baC0xXSttWzBdWzFdKSx0W2ZdW2grMV09LjUqKHRbZl1baCsxXSttWzFdWzBdKSxlW2ZdW2grMV09LjUqKGVbZl1baCsxXSttWzFdWzFdKTt5PWkoW3RbZl1bMF0sZVtmXVswXV0sW3RbZl1bMl0sZVtmXVsyXV0sW3RbZl1bM10sZVtmXVszXV0pLHRbZl1bMV09LjUqKHRbZl1bMV0reVswXSksZVtmXVsxXT0uNSooZVtmXVsxXSt5WzFdKSx5PWkoW3RbZl1bXy0xXSxlW2ZdW18tMV1dLFt0W2ZdW18tM10sZVtmXVtfLTNdXSxbdFtmXVtfLTRdLGVbZl1bXy00XV0pLHRbZl1bXy0yXT0uNSoodFtmXVtfLTJdK3lbMF0pLGVbZl1bXy0yXT0uNSooZVtmXVtfLTJdK3lbMV0pfXJldHVyblt0LGVdfX0seyIuLi8uLi9saWIiOjcxNywiLi9jYXRtdWxsX3JvbSI6OTA3fV0sOTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17UkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0U6MWUtNn19LHt9XSw5MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmcj9mdW5jdGlvbihlLHIsbixhLGkpe3ZhciBvLHMsbCxjLHUsaDtlfHwoZT1bXSkscio9MyxuKj0zO3ZhciBmPWEqYSxwPTEtYSxkPXAqcCxnPXAqYSoyLHY9LTMqZCxtPTMqKGQtZykseT0zKihnLWYpLHg9MypmLGI9aSppLF89YippLHc9MS1pLGs9dyp3LFQ9ayp3O2ZvcihoPTA7aDx0Lmxlbmd0aDtoKyspbz12Kih1PXRbaF0pW25dW3JdK20qdVtuXVtyKzFdK3kqdVtuXVtyKzJdK3gqdVtuXVtyKzNdLHM9dip1W24rMV1bcl0rbSp1W24rMV1bcisxXSt5KnVbbisxXVtyKzJdK3gqdVtuKzFdW3IrM10sbD12KnVbbisyXVtyXSttKnVbbisyXVtyKzFdK3kqdVtuKzJdW3IrMl0reCp1W24rMl1bciszXSxjPXYqdVtuKzNdW3JdK20qdVtuKzNdW3IrMV0reSp1W24rM11bcisyXSt4KnVbbiszXVtyKzNdLGVbaF09VCpvKzMqKGsqaSpzK3cqYipsKStfKmM7cmV0dXJuIGV9OmU/ZnVuY3Rpb24oZSxyLG4sYSxpKXt2YXIgbyxzLGwsYztlfHwoZT1bXSkscio9Mzt2YXIgdT1hKmEsaD0xLWEsZj1oKmgscD1oKmEqMixkPS0zKmYsZz0zKihmLXApLHY9MyoocC11KSxtPTMqdSx5PTEtaTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89ZCooYz10W2xdKVtuXVtyXStnKmNbbl1bcisxXSt2KmNbbl1bcisyXSttKmNbbl1bciszXSxzPWQqY1tuKzFdW3JdK2cqY1tuKzFdW3IrMV0rdipjW24rMV1bcisyXSttKmNbbisxXVtyKzNdLGVbbF09eSpvK2kqcztyZXR1cm4gZX06cj9mdW5jdGlvbihlLHIsbixhLGkpe3ZhciBvLHMsbCxjLHUsaDtlfHwoZT1bXSksbio9Mzt2YXIgZj1pKmkscD1mKmksZD0xLWksZz1kKmQsdj1nKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShoPXRbdV0pW25dW3IrMV0taFtuXVtyXSxzPWhbbisxXVtyKzFdLWhbbisxXVtyXSxsPWhbbisyXVtyKzFdLWhbbisyXVtyXSxjPWhbbiszXVtyKzFdLWhbbiszXVtyXSxlW3VdPXYqbyszKihnKmkqcytkKmYqbCkrcCpjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbixhLGkpe3ZhciBvLHMsbCxjO2V8fChlPVtdKTt2YXIgdT0xLWk7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPShjPXRbbF0pW25dW3IrMV0tY1tuXVtyXSxzPWNbbisxXVtyKzFdLWNbbisxXVtyXSxlW2xdPXUqbytpKnM7cmV0dXJuIGV9fX0se31dLDkxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlJiZyP2Z1bmN0aW9uKGUscixuLGEsaSl7dmFyIG8scyxsLGMsdSxoO2V8fChlPVtdKSxyKj0zLG4qPTM7dmFyIGY9YSphLHA9ZiphLGQ9MS1hLGc9ZCpkLHY9ZypkLG09aSppLHk9MS1pLHg9eSp5LGI9eSppKjIsXz0tMyp4LHc9MyooeC1iKSxrPTMqKGItbSksVD0zKm07Zm9yKGg9MDtoPHQubGVuZ3RoO2grKylvPV8qKHU9dFtoXSlbbl1bcl0rdyp1W24rMV1bcl0rayp1W24rMl1bcl0rVCp1W24rM11bcl0scz1fKnVbbl1bcisxXSt3KnVbbisxXVtyKzFdK2sqdVtuKzJdW3IrMV0rVCp1W24rM11bcisxXSxsPV8qdVtuXVtyKzJdK3cqdVtuKzFdW3IrMl0rayp1W24rMl1bcisyXStUKnVbbiszXVtyKzJdLGM9Xyp1W25dW3IrM10rdyp1W24rMV1bciszXStrKnVbbisyXVtyKzNdK1QqdVtuKzNdW3IrM10sZVtoXT12Km8rMyooZyphKnMrZCpmKmwpK3AqYztyZXR1cm4gZX06ZT9mdW5jdGlvbihlLHIsbixhLGkpe3ZhciBvLHMsbCxjLHUsaDtlfHwoZT1bXSkscio9Mzt2YXIgZj1pKmkscD1mKmksZD0xLWksZz1kKmQsdj1nKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShoPXRbdV0pW24rMV1bcl0taFtuXVtyXSxzPWhbbisxXVtyKzFdLWhbbl1bcisxXSxsPWhbbisxXVtyKzJdLWhbbl1bcisyXSxjPWhbbisxXVtyKzNdLWhbbl1bciszXSxlW3VdPXYqbyszKihnKmkqcytkKmYqbCkrcCpjO3JldHVybiBlfTpyP2Z1bmN0aW9uKGUscixuLGEsaSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pLG4qPTM7dmFyIHU9MS1hLGg9aSppLGY9MS1pLHA9ZipmLGQ9ZippKjIsZz0tMypwLHY9MyoocC1kKSxtPTMqKGQtaCkseT0zKmg7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPWcqKGM9dFtsXSlbbl1bcl0rdipjW24rMV1bcl0rbSpjW24rMl1bcl0reSpjW24rM11bcl0scz1nKmNbbl1bcisxXSt2KmNbbisxXVtyKzFdK20qY1tuKzJdW3IrMV0reSpjW24rM11bcisxXSxlW2xdPXUqbythKnM7cmV0dXJuIGV9OmZ1bmN0aW9uKGUscixuLGEsaSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pO3ZhciB1PTEtYTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89KGM9dFtsXSlbbisxXVtyXS1jW25dW3JdLHM9Y1tuKzFdW3IrMV0tY1tuXVtyKzFdLGVbbF09dSpvK2EqcztyZXR1cm4gZX19fSx7fV0sOTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGEpe3ZhciBpPWUtMixvPXItMjtyZXR1cm4gbiYmYT9mdW5jdGlvbihlLHIsbil7dmFyIGEscyxsLGMsdSxoO2V8fChlPVtdKTt2YXIgZj1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksaSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWYpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtmKj0zLHAqPTM7dmFyIHY9ZCpkLG09dipkLHk9MS1kLHg9eSp5LGI9eCp5LF89ZypnLHc9XypnLGs9MS1nLFQ9ayprLE09VCprO2ZvcihoPTA7aDx0Lmxlbmd0aDtoKyspYT1iKih1PXRbaF0pW3BdW2ZdKzMqKHgqZCp1W3BdW2YrMV0reSp2KnVbcF1bZisyXSkrbSp1W3BdW2YrM10scz1iKnVbcCsxXVtmXSszKih4KmQqdVtwKzFdW2YrMV0reSp2KnVbcCsxXVtmKzJdKSttKnVbcCsxXVtmKzNdLGw9Yip1W3ArMl1bZl0rMyooeCpkKnVbcCsyXVtmKzFdK3kqdip1W3ArMl1bZisyXSkrbSp1W3ArMl1bZiszXSxjPWIqdVtwKzNdW2ZdKzMqKHgqZCp1W3ArM11bZisxXSt5KnYqdVtwKzNdW2YrMl0pK20qdVtwKzNdW2YrM10sZVtoXT1NKmErMyooVCpnKnMraypfKmwpK3cqYztyZXR1cm4gZX06bj9mdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBhLHMsbCxjLHUsaCxmPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxpKSkscD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItZikpLGc9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4tcCkpO2YqPTM7dmFyIHY9ZCpkLG09dipkLHk9MS1kLHg9eSp5LGI9eCp5LF89MS1nO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspYT1fKihoPXRbdV0pW3BdW2ZdK2cqaFtwKzFdW2ZdLHM9XypoW3BdW2YrMV0rZypoW3ArMV1bZisxXSxsPV8qaFtwXVtmKzJdK2cqaFtwKzFdW2YrMV0sYz1fKmhbcF1bZiszXStnKmhbcCsxXVtmKzFdLGVbdV09YiphKzMqKHgqZCpzK3kqdipsKSttKmM7cmV0dXJuIGV9OmE/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgYSxzLGwsYyx1LGgsZj1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksaSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWYpKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtwKj0zO3ZhciB2PWcqZyxtPXYqZyx5PTEtZyx4PXkqeSxiPXgqeSxfPTEtZDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWE9XyooaD10W3VdKVtwXVtmXStkKmhbcF1bZisxXSxzPV8qaFtwKzFdW2ZdK2QqaFtwKzFdW2YrMV0sbD1fKmhbcCsyXVtmXStkKmhbcCsyXVtmKzFdLGM9XypoW3ArM11bZl0rZCpoW3ArM11bZisxXSxlW3VdPWIqYSszKih4Kmcqcyt5KnYqbCkrbSpjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBhLHMsbCxjLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGkpKSxoPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksZj1NYXRoLm1heCgwLE1hdGgubWluKDEsci11KSkscD1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1oKSksZD0xLXAsZz0xLWY7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylhPWcqKGM9dFtsXSlbaF1bdV0rZipjW2hdW3UrMV0scz1nKmNbaCsxXVt1XStmKmNbaCsxXVt1KzFdLGVbbF09ZCphK3AqcztyZXR1cm4gZX19fSx7fV0sOTE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi94eV9kZWZhdWx0cyIpLGk9dCgiLi9hYl9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGEpfWUuX2NsaXBQYXRoSWQ9ImNsaXAiK2UudWlkKyJjYXJwZXQiO3ZhciB1PWMoImNvbG9yIixzLmRlZmF1bHRMaW5lKTsobi5jb2VyY2VGb250KGMsImZvbnQiKSxjKCJjYXJwZXQiKSxpKHQsZSxsLGMsdSksZS5hJiZlLmIpPyhlLmEubGVuZ3RoPDMmJihlLmFheGlzLnNtb290aGluZz0wKSxlLmIubGVuZ3RoPDMmJihlLmJheGlzLnNtb290aGluZz0wKSxhKHQsZSxjKXx8KGUudmlzaWJsZT0hMSksZS5fY2hlYXRlciYmYygiY2hlYXRlcnNsb3BlIikpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo1OTEsIi4uLy4uL2xpYiI6NzE3LCIuL2FiX2RlZmF1bHRzIjo4OTcsIi4vYXR0cmlidXRlcyI6ODk5LCIuL3h5X2RlZmF1bHRzIjo5MjN9XSw5MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxwbG90OnQoIi4vcGxvdCIpLGNhbGM6dCgiLi9jYWxjIiksYW5pbWF0YWJsZTohMCxpc0NvbnRhaW5lcjohMCxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY2FycGV0IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiY2FycGV0IiwiY2FycGV0QXhpcyIsIm5vdExlZ2VuZElzb2xhdGFibGUiLCJub011bHRpQ2F0ZWdvcnkiLCJub0hvdmVyIiwibm9Tb3J0aW5nQnlWYWx1ZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6Nzc2LCIuL2F0dHJpYnV0ZXMiOjg5OSwiLi9jYWxjIjo5MDMsIi4vZGVmYXVsdHMiOjkxNCwiLi9wbG90Ijo5MjB9XSw5MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5fZnVsbERhdGEubGVuZ3RoLGE9MDthPG47YSsrKXt2YXIgaT10Ll9mdWxsRGF0YVthXTtpZihpLmluZGV4IT09ZS5pbmRleCYmKCJjYXJwZXQiPT09aS50eXBlJiYocnx8KHI9aSksaS5jYXJwZXQ9PT1lLmNhcnBldCkpKXJldHVybiBpfXJldHVybiByfX0se31dLDkxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4iIjt2YXIgbixhPVtdLGk9cj8zOjE7Zm9yKG49MDtuPHQubGVuZ3RoO24rPWkpYS5wdXNoKHRbbl0rIiwiK2Vbbl0pLHImJm48dC5sZW5ndGgtaSYmKGEucHVzaCgiQyIpLGEucHVzaChbdFtuKzFdKyIsIitlW24rMV0sdFtuKzJdKyIsIitlW24rMl0rIiAiXS5qb2luKCIgIikpKTtyZXR1cm4gYS5qb2luKHI/IiI6IkwiKX19LHt9XSw5MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhO2ZvcihuKHQpP3QubGVuZ3RoPmUubGVuZ3RoJiYodD10LnNsaWNlKDAsZS5sZW5ndGgpKTp0PVtdLGE9MDthPGUubGVuZ3RoO2ErKyl0W2FdPXIoZVthXSk7cmV0dXJuIHR9fSx7Ii4uLy4uL2xpYiI6NzE3fV0sOTE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGEsaSl7dmFyIG89YVswXSp0LmRwZHgoZSkscz1hWzFdKnQuZHBkeShyKSxsPTEsYz0xO2lmKGkpe3ZhciB1PU1hdGguc3FydChhWzBdKmFbMF0rYVsxXSphWzFdKSxoPU1hdGguc3FydChpWzBdKmlbMF0raVsxXSppWzFdKSxmPShhWzBdKmlbMF0rYVsxXSppWzFdKS91L2g7Yz1NYXRoLm1heCgwLGYpfXZhciBwPTE4MCpNYXRoLmF0YW4yKHMsbykvTWF0aC5QSTtyZXR1cm4gcDwtOTA/KHArPTE4MCxsPS1sKTpwPjkwJiYocC09MTgwLGw9LWwpLHthbmdsZTpwLGZsaXA6bCxwOnQuYzJwKG4sZSxyKSxvZmZzZXRNdWx0cGxpZXI6Y319fSx7fV0sOTIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxpPXQoIi4vbWFwXzFkX2FycmF5Iiksbz10KCIuL21ha2VwYXRoIikscz10KCIuL29yaWVudF90ZXh0IiksbD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxjPXQoIi4uLy4uL2xpYiIpLHU9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpO2Z1bmN0aW9uIGgodCxlLHIsYSxzLGwpe3ZhciBjPSJjb25zdC0iK3MrIi1saW5lcyIsdT1yLnNlbGVjdEFsbCgiLiIrYykuZGF0YShsKTt1LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChjLCEwKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLHUuZWFjaChmdW5jdGlvbihyKXt2YXIgYT1yLHM9YS54LGw9YS55LGM9aShbXSxzLHQuYzJwKSx1PWkoW10sbCxlLmMycCksaD0iTSIrbyhjLHUsYS5zbW9vdGhpbmcpO24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLGgpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGEud2lkdGgpLnN0eWxlKCJzdHJva2UiLGEuY29sb3IpLnN0eWxlKCJmaWxsIiwibm9uZSIpfSksdS5leGl0KCkucmVtb3ZlKCl9ZnVuY3Rpb24gZih0LGUscixpLG8sYyx1LGgpe3ZhciBmPWMuc2VsZWN0QWxsKCJ0ZXh0LiIraCkuZGF0YSh1KTtmLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChoLCEwKTt2YXIgcD0wLGQ9e307cmV0dXJuIGYuZWFjaChmdW5jdGlvbihvLGMpe3ZhciB1O2lmKCJhdXRvIj09PW8uYXhpcy50aWNrYW5nbGUpdT1zKGksZSxyLG8ueHksby5keHkpO2Vsc2V7dmFyIGg9KG8uYXhpcy50aWNrYW5nbGUrMTgwKSpNYXRoLlBJLzE4MDt1PXMoaSxlLHIsby54eSxbTWF0aC5jb3MoaCksTWF0aC5zaW4oaCldKX1jfHwoZD17YW5nbGU6dS5hbmdsZSxmbGlwOnUuZmxpcH0pO3ZhciBmPShvLmVuZEFuY2hvcj8tMToxKSp1LmZsaXAsZz1uLnNlbGVjdCh0aGlzKS5hdHRyKHsidGV4dC1hbmNob3IiOmY+MD8ic3RhcnQiOiJlbmQiLCJkYXRhLW5vdGV4IjoxfSkuY2FsbChhLmZvbnQsby5mb250KS50ZXh0KG8udGV4dCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSx2PWEuYkJveCh0aGlzKTtnLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UucFswXSsiLCIrdS5wWzFdKyIpIHJvdGF0ZSgiK3UuYW5nbGUrIil0cmFuc2xhdGUoIitvLmF4aXMubGFiZWxwYWRkaW5nKmYrIiwiKy4zKnYuaGVpZ2h0KyIpIikscD1NYXRoLm1heChwLHYud2lkdGgrby5heGlzLmxhYmVscGFkZGluZyl9KSxmLmV4aXQoKS5yZW1vdmUoKSxkLm1heEV4dGVudD1wLGR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBsPWUueGF4aXMsdT1lLnlheGlzLHA9dC5fZnVsbExheW91dC5fY2xpcHM7Yy5tYWtlVHJhY2VHcm91cHMoYSxyLCJ0cmFjZSIpLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT1lWzBdLGQ9YS50cmFjZSx2PWQuYWF4aXMsbT1kLmJheGlzLHk9Yy5lbnN1cmVTaW5nbGUociwiZyIsIm1pbm9ybGF5ZXIiKSx4PWMuZW5zdXJlU2luZ2xlKHIsImciLCJtYWpvcmxheWVyIiksYj1jLmVuc3VyZVNpbmdsZShyLCJnIiwiYm91bmRhcnlsYXllciIpLF89Yy5lbnN1cmVTaW5nbGUociwiZyIsImxhYmVsbGF5ZXIiKTtyLnN0eWxlKCJvcGFjaXR5IixkLm9wYWNpdHkpLGgobCx1LHgsdiwiYSIsdi5fZ3JpZGxpbmVzKSxoKGwsdSx4LG0sImIiLG0uX2dyaWRsaW5lcyksaChsLHUseSx2LCJhIix2Ll9taW5vcmdyaWRsaW5lcyksaChsLHUseSxtLCJiIixtLl9taW5vcmdyaWRsaW5lcyksaChsLHUsYix2LCJhLWJvdW5kYXJ5Iix2Ll9ib3VuZGFyeWxpbmVzKSxoKGwsdSxiLG0sImItYm91bmRhcnkiLG0uX2JvdW5kYXJ5bGluZXMpO3ZhciB3PWYodCxsLHUsZCxhLF8sdi5fbGFiZWxzLCJhLWxhYmVsIiksaz1mKHQsbCx1LGQsYSxfLG0uX2xhYmVscywiYi1sYWJlbCIpOyFmdW5jdGlvbih0LGUscixuLGEsaSxvLGwpe3ZhciB1LGgsZixwLGQ9Yy5hZ2dOdW1zKE1hdGgubWluLG51bGwsci5hKSx2PWMuYWdnTnVtcyhNYXRoLm1heCxudWxsLHIuYSksbT1jLmFnZ051bXMoTWF0aC5taW4sbnVsbCxyLmIpLHk9Yy5hZ2dOdW1zKE1hdGgubWF4LG51bGwsci5iKTt1PS41KihkK3YpLGg9bSxmPXIuYWIyeHkodSxoLCEwKSxwPXIuZHh5ZGFfcm91Z2godSxoKSx2b2lkIDA9PT1vLmFuZ2xlJiZjLmV4dGVuZEZsYXQobyxzKHIsYSxpLGYsci5keHlkYl9yb3VnaCh1LGgpKSk7Zyh0LGUscixuLGYscCxyLmFheGlzLGEsaSxvLCJhLXRpdGxlIiksdT1kLGg9LjUqKG0reSksZj1yLmFiMnh5KHUsaCwhMCkscD1yLmR4eWRiX3JvdWdoKHUsaCksdm9pZCAwPT09bC5hbmdsZSYmYy5leHRlbmRGbGF0KGwscyhyLGEsaSxmLHIuZHh5ZGFfcm91Z2godSxoKSkpO2codCxlLHIsbixmLHAsci5iYXhpcyxhLGksbCwiYi10aXRsZSIpfSh0LF8sZCxhLGwsdSx3LGspLGZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIHMsbCx1LGgsZj1yLnNlbGVjdCgiIyIrdC5fY2xpcFBhdGhJZCk7Zi5zaXplKCl8fChmPXIuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImNhcnBldGNsaXAiLCEwKSk7dmFyIHA9Yy5lbnN1cmVTaW5nbGUoZiwicGF0aCIsImNhcnBldGJvdW5kYXJ5IiksZD1lLmNsaXBzZWdtZW50cyxnPVtdO2ZvcihoPTA7aDxkLmxlbmd0aDtoKyspcz1kW2hdLGw9aShbXSxzLngsbi5jMnApLHU9aShbXSxzLnksYS5jMnApLGcucHVzaChvKGwsdSxzLmJpY3ViaWMpKTt2YXIgdj0iTSIrZy5qb2luKCJMIikrIloiO2YuYXR0cigiaWQiLHQuX2NsaXBQYXRoSWQpLHAuYXR0cigiZCIsdil9KGQsYSxwLGwsdSl9KX07dmFyIHA9dS5MSU5FX1NQQUNJTkcsZD0oMS11Lk1JRF9TSElGVCkvcCsxO2Z1bmN0aW9uIGcodCxlLHIsaSxvLGMsdSxoLGYsZyx2KXt2YXIgbT1bXTt1LnRpdGxlLnRleHQmJm0ucHVzaCh1LnRpdGxlLnRleHQpO3ZhciB5PWUuc2VsZWN0QWxsKCJ0ZXh0LiIrdikuZGF0YShtKSx4PWcubWF4RXh0ZW50O3kuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKHYsITApLHkuZWFjaChmdW5jdGlvbigpe3ZhciBlPXMocixoLGYsbyxjKTstMT09PVsic3RhcnQiLCJib3RoIl0uaW5kZXhPZih1LnNob3d0aWNrbGFiZWxzKSYmKHg9MCk7dmFyIGk9dS50aXRsZS5mb250LnNpemU7eCs9aSt1LnRpdGxlLm9mZnNldDt2YXIgdj0oZy5hbmdsZSsoZy5mbGlwPDA/MTgwOjApLWUuYW5nbGUrNDUwKSUzNjAsbT12PjkwJiZ2PDI3MCx5PW4uc2VsZWN0KHRoaXMpO3kudGV4dCh1LnRpdGxlLnRleHQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCksbSYmKHg9KC1sLmxpbmVDb3VudCh5KStkKSpwKmkteCkseS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLnBbMF0rIiwiK2UucFsxXSsiKSByb3RhdGUoIitlLmFuZ2xlKyIpIHRyYW5zbGF0ZSgwLCIreCsiKSIpLmNsYXNzZWQoInVzZXItc2VsZWN0LW5vbmUiLCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoYS5mb250LHUudGl0bGUuZm9udCl9KSx5LmV4aXQoKS5yZW1vdmUoKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY4NiwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQxLCIuL21ha2VwYXRoIjo5MTcsIi4vbWFwXzFkX2FycmF5Ijo5MTgsIi4vb3JpZW50X3RleHQiOjkxOSxkMzoxNjV9XSw5MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxhPXQoIi4uLy4uL2xpYi9zZWFyY2giKS5maW5kQmluLGk9dCgiLi9jb21wdXRlX2NvbnRyb2xfcG9pbnRzIiksbz10KCIuL2NyZWF0ZV9zcGxpbmVfZXZhbHVhdG9yIikscz10KCIuL2NyZWF0ZV9pX2Rlcml2YXRpdmVfZXZhbHVhdG9yIiksbD10KCIuL2NyZWF0ZV9qX2Rlcml2YXRpdmVfZXZhbHVhdG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Escj10Ll9iLGM9ZS5sZW5ndGgsdT1yLmxlbmd0aCxoPXQuYWF4aXMsZj10LmJheGlzLHA9ZVswXSxkPWVbYy0xXSxnPXJbMF0sdj1yW3UtMV0sbT1lW2UubGVuZ3RoLTFdLWVbMF0seT1yW3IubGVuZ3RoLTFdLXJbMF0seD1tKm4uUkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0UsYj15Km4uUkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0U7cC09eCxkKz14LGctPWIsdis9Yix0LmlzVmlzaWJsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0PnAmJnQ8ZCYmZT5nJiZlPHZ9LHQuaXNPY2NsdWRlZD1mdW5jdGlvbih0LGUpe3JldHVybiB0PHB8fHQ+ZHx8ZTxnfHxlPnZ9LHQuc2V0U2NhbGU9ZnVuY3Rpb24oKXt2YXIgZT10Ll94LHI9dC5feSxuPWkodC5feGN0cmwsdC5feWN0cmwsZSxyLGguc21vb3RoaW5nLGYuc21vb3RoaW5nKTt0Ll94Y3RybD1uWzBdLHQuX3ljdHJsPW5bMV0sdC5ldmFseHk9byhbdC5feGN0cmwsdC5feWN0cmxdLGMsdSxoLnNtb290aGluZyxmLnNtb290aGluZyksdC5keHlkaT1zKFt0Ll94Y3RybCx0Ll95Y3RybF0saC5zbW9vdGhpbmcsZi5zbW9vdGhpbmcpLHQuZHh5ZGo9bChbdC5feGN0cmwsdC5feWN0cmxdLGguc21vb3RoaW5nLGYuc21vb3RoaW5nKX0sdC5pMmE9ZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5tYXgoMCxNYXRoLmZsb29yKHRbMF0pLGMtMiksbj10WzBdLXI7cmV0dXJuKDEtbikqZVtyXStuKmVbcisxXX0sdC5qMmI9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLmZsb29yKHRbMV0pLGMtMiksbj10WzFdLWU7cmV0dXJuKDEtbikqcltlXStuKnJbZSsxXX0sdC5pajJhYj1mdW5jdGlvbihlKXtyZXR1cm5bdC5pMmEoZVswXSksdC5qMmIoZVsxXSldfSx0LmEyaT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGgubWluKGEodCxlKSxjLTIpKSxuPWVbcl0saT1lW3IrMV07cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oYy0xLHIrKHQtbikvKGktbikpKX0sdC5iMmo9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLm1pbihhKHQsciksdS0yKSksbj1yW2VdLGk9cltlKzFdO3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHUtMSxlKyh0LW4pLyhpLW4pKSl9LHQuYWIyaWo9ZnVuY3Rpb24oZSl7cmV0dXJuW3QuYTJpKGVbMF0pLHQuYjJqKGVbMV0pXX0sdC5pMmM9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5ldmFseHkoW10sZSxyKX0sdC5hYjJ4eT1mdW5jdGlvbihuLGEsaSl7aWYoIWkmJihuPGVbMF18fG4+ZVtjLTFdfGE8clswXXx8YT5yW3UtMV0pKXJldHVyblshMSwhMV07dmFyIG89dC5hMmkobikscz10LmIyaihhKSxsPXQuZXZhbHh5KFtdLG8scyk7aWYoaSl7dmFyIGgsZixwLGQsZz0wLHY9MCxtPVtdO248ZVswXT8oaD0wLGY9MCxnPShuLWVbMF0pLyhlWzFdLWVbMF0pKTpuPmVbYy0xXT8oaD1jLTIsZj0xLGc9KG4tZVtjLTFdKS8oZVtjLTFdLWVbYy0yXSkpOmY9by0oaD1NYXRoLm1heCgwLE1hdGgubWluKGMtMixNYXRoLmZsb29yKG8pKSkpLGE8clswXT8ocD0wLGQ9MCx2PShhLXJbMF0pLyhyWzFdLXJbMF0pKTphPnJbdS0xXT8ocD11LTIsZD0xLHY9KGEtclt1LTFdKS8oclt1LTFdLXJbdS0yXSkpOmQ9cy0ocD1NYXRoLm1heCgwLE1hdGgubWluKHUtMixNYXRoLmZsb29yKHMpKSkpLGcmJih0LmR4eWRpKG0saCxwLGYsZCksbFswXSs9bVswXSpnLGxbMV0rPW1bMV0qZyksdiYmKHQuZHh5ZGoobSxoLHAsZixkKSxsWzBdKz1tWzBdKnYsbFsxXSs9bVsxXSp2KX1yZXR1cm4gbH0sdC5jMnA9ZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmMycCh0WzBdKSxyLmMycCh0WzFdKV19LHQucDJ4PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5wMmModFswXSksci5wMmModFsxXSldfSx0LmRhZGk9ZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5tYXgoMCxNYXRoLm1pbihlLmxlbmd0aC0yLHQpKTtyZXR1cm4gZVtyKzFdLWVbcl19LHQuZGJkaj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHIubGVuZ3RoLTIsdCkpO3JldHVybiByW2UrMV0tcltlXX0sdC5keHlkYT1mdW5jdGlvbihlLHIsbixhKXt2YXIgaT10LmR4eWRpKG51bGwsZSxyLG4sYSksbz10LmRhZGkoZSxuKTtyZXR1cm5baVswXS9vLGlbMV0vb119LHQuZHh5ZGI9ZnVuY3Rpb24oZSxyLG4sYSl7dmFyIGk9dC5keHlkaihudWxsLGUscixuLGEpLG89dC5kYmRqKHIsYSk7cmV0dXJuW2lbMF0vbyxpWzFdL29dfSx0LmR4eWRhX3JvdWdoPWZ1bmN0aW9uKGUscixuKXt2YXIgYT1tKihufHwuMSksaT10LmFiMnh5KGUrYSxyLCEwKSxvPXQuYWIyeHkoZS1hLHIsITApO3JldHVyblsuNSooaVswXS1vWzBdKS9hLC41KihpWzFdLW9bMV0pL2FdfSx0LmR4eWRiX3JvdWdoPWZ1bmN0aW9uKGUscixuKXt2YXIgYT15KihufHwuMSksaT10LmFiMnh5KGUscithLCEwKSxvPXQuYWIyeHkoZSxyLWEsITApO3JldHVyblsuNSooaVswXS1vWzBdKS9hLC41KihpWzFdLW9bMV0pL2FdfSx0LmRwZHg9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX219LHQuZHBkeT1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbX19fSx7Ii4uLy4uL2xpYi9zZWFyY2giOjczNiwiLi9jb21wdXRlX2NvbnRyb2xfcG9pbnRzIjo5MDksIi4vY29uc3RhbnRzIjo5MTAsIi4vY3JlYXRlX2lfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiOjkxMSwiLi9jcmVhdGVfal9kZXJpdmF0aXZlX2V2YWx1YXRvciI6OTEyLCIuL2NyZWF0ZV9zcGxpbmVfZXZhbHVhdG9yIjo5MTN9XSw5MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxpLG8scz1bXSxsPVtdLGM9dFswXS5sZW5ndGgsdT10Lmxlbmd0aDtmdW5jdGlvbiBoKGUscil7dmFyIG4sYT0wLGk9MDtyZXR1cm4gZT4wJiZ2b2lkIDAhPT0obj10W3JdW2UtMV0pJiYoaSsrLGErPW4pLGU8Yy0xJiZ2b2lkIDAhPT0obj10W3JdW2UrMV0pJiYoaSsrLGErPW4pLHI+MCYmdm9pZCAwIT09KG49dFtyLTFdW2VdKSYmKGkrKyxhKz1uKSxyPHUtMSYmdm9pZCAwIT09KG49dFtyKzFdW2VdKSYmKGkrKyxhKz1uKSxhL01hdGgubWF4KDEsaSl9dmFyIGYscCxkLGcsdixtLHkseCxiLF8sdyxrPTA7Zm9yKGE9MDthPGM7YSsrKWZvcihpPTA7aTx1O2krKyl2b2lkIDA9PT10W2ldW2FdJiYocy5wdXNoKGEpLGwucHVzaChpKSx0W2ldW2FdPWgoYSxpKSksaz1NYXRoLm1heChrLE1hdGguYWJzKHRbaV1bYV0pKTtpZighcy5sZW5ndGgpcmV0dXJuIHQ7dmFyIFQ9MCxNPTAsQT1zLmxlbmd0aDtkb3tmb3IoVD0wLG89MDtvPEE7bysrKXthPXNbb10saT1sW29dO3ZhciBTLEUsTCxDLFAsTyx6PTAsST0wOzA9PT1hPyhMPWVbUD1NYXRoLm1pbihjLTEsMildLEM9ZVsxXSxTPXRbaV1bUF0sSSs9KEU9dFtpXVsxXSkrKEUtUykqKGVbMF0tQykvKEMtTCkseisrKTphPT09Yy0xJiYoTD1lW1A9TWF0aC5tYXgoMCxjLTMpXSxDPWVbYy0yXSxTPXRbaV1bUF0sSSs9KEU9dFtpXVtjLTJdKSsoRS1TKSooZVtjLTFdLUMpLyhDLUwpLHorKyksKDA9PT1hfHxhPT09Yy0xKSYmaT4wJiZpPHUtMSYmKGY9cltpKzFdLXJbaV0sSSs9KChwPXJbaV0tcltpLTFdKSp0W2krMV1bYV0rZip0W2ktMV1bYV0pLyhwK2YpLHorKyksMD09PWk/KEw9cltPPU1hdGgubWluKHUtMSwyKV0sQz1yWzFdLFM9dFtPXVthXSxJKz0oRT10WzFdW2FdKSsoRS1TKSooclswXS1DKS8oQy1MKSx6KyspOmk9PT11LTEmJihMPXJbTz1NYXRoLm1heCgwLHUtMyldLEM9clt1LTJdLFM9dFtPXVthXSxJKz0oRT10W3UtMl1bYV0pKyhFLVMpKihyW3UtMV0tQykvKEMtTCkseisrKSwoMD09PWl8fGk9PT11LTEpJiZhPjAmJmE8Yy0xJiYoZj1lW2ErMV0tZVthXSxJKz0oKHA9ZVthXS1lW2EtMV0pKnRbaV1bYSsxXStmKnRbaV1bYS0xXSkvKHArZikseisrKSx6P0kvPXo6KGQ9ZVthKzFdLWVbYV0sZz1lW2FdLWVbYS0xXSx4PSh2PXJbaSsxXS1yW2ldKSoobT1yW2ldLXJbaS0xXSkqKHYrbSksST0oKHk9ZCpnKihkK2cpKSoobSp0W2krMV1bYV0rdip0W2ktMV1bYV0pK3gqKGcqdFtpXVthKzFdK2QqdFtpXVthLTFdKSkvKHgqKGcrZCkreSoobSt2KSkpLFQrPShfPShiPUktdFtpXVthXSkvaykqXyx3PXo/MDouODUsdFtpXVthXSs9YiooMSt3KX1UPU1hdGguc3FydChUKX13aGlsZShNKys8MTAwJiZUPjFlLTUpO3JldHVybiBuLmxvZygiU21vb3RoZXIgY29udmVyZ2VkIHRvIixULCJhZnRlciIsTSwiaXRlcmF0aW9ucyIpLHR9fSx7Ii4uLy4uL2xpYiI6NzE3fV0sOTIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXkxRDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXIoIngiKSxpPWEmJmEubGVuZ3RoLG89cigieSIpLHM9byYmby5sZW5ndGg7aWYoIWkmJiFzKXJldHVybiExO2lmKGUuX2NoZWF0ZXI9IWEsaSYmIW4oYSl8fHMmJiFuKG8pKWUuX2xlbmd0aD1udWxsO2Vsc2V7dmFyIGw9aT9hLmxlbmd0aDoxLzA7cyYmKGw9TWF0aC5taW4obCxvLmxlbmd0aCkpLGUuYSYmZS5hLmxlbmd0aCYmKGw9TWF0aC5taW4obCxlLmEubGVuZ3RoKSksZS5iJiZlLmIubGVuZ3RoJiYobD1NYXRoLm1pbihsLGUuYi5sZW5ndGgpKSxlLl9sZW5ndGg9bH1yZXR1cm4hMH19LHsiLi4vLi4vbGliIjo3MTd9XSw5MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxhPXQoIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmRlZmF1bHRMaW5lLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYz1hLm1hcmtlci5saW5lO2UuZXhwb3J0cz1sKHtsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbG9jYXRpb25tb2RlOmEubG9jYXRpb25tb2RlLHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZ2VvanNvbjpsKHt9LGEuZ2VvanNvbix7fSksZmVhdHVyZWlka2V5OmEuZmVhdHVyZWlka2V5LHRleHQ6bCh7fSxhLnRleHQse30pLGhvdmVydGV4dDpsKHt9LGEuaG92ZXJ0ZXh0LHt9KSxtYXJrZXI6e2xpbmU6e2NvbG9yOmwoe30sYy5jb2xvcix7ZGZsdDpzfSksd2lkdGg6bCh7fSxjLndpZHRoLHtkZmx0OjF9KSxlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMCxtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6ImNhbGMifSxzZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5OmEuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTphLnVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGhvdmVyaW5mbzpsKHt9LG8uaG92ZXJpbmZvLHtlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJsb2NhdGlvbiIsInoiLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpuKCksc2hvd2xlZ2VuZDpsKHt9LG8uc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSxpKCIiLHtjTGV0dGVyOiJ6IixlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjU5MSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU5OSwiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg0MSwiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIjoxMTYxfV0sOTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxvPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIikscz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIik7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdCYmInN0cmluZyI9PXR5cGVvZiB0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGM9ZS5fbGVuZ3RoLHU9bmV3IEFycmF5KGMpO3I9ZS5nZW9qc29uP2Z1bmN0aW9uKHQpe3JldHVybiBsKHQpfHxuKHQpfTpsO2Zvcih2YXIgaD0wO2g8YztoKyspe3ZhciBmPXVbaF09e30scD1lLmxvY2F0aW9uc1toXSxkPWUueltoXTtyKHApJiZuKGQpPyhmLmxvYz1wLGYuej1kKTooZi5sb2M9bnVsbCxmLno9YSksZi5pbmRleD1ofXJldHVybiBvKHUsZSksaSh0LGUse3ZhbHM6ZS56LGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJ6In0pLHModSxlKSx1fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjAwLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2OTMsIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMTE5LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTIyLCJmYXN0LWlzbnVtZXJpYyI6MjI4fV0sOTI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksaT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBsPXMoImxvY2F0aW9ucyIpLGM9cygieiIpO2lmKGwmJmwubGVuZ3RoJiZuLmlzQXJyYXlPclR5cGVkQXJyYXkoYykmJmMubGVuZ3RoKXtlLl9sZW5ndGg9TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpO3ZhciB1LGg9cygiZ2VvanNvbiIpOygic3RyaW5nIj09dHlwZW9mIGgmJiIiIT09aHx8bi5pc1BsYWluT2JqZWN0KGgpKSYmKHU9Imdlb2pzb24taWQiKSwiZ2VvanNvbi1pZCI9PT1zKCJsb2NhdGlvbm1vZGUiLHUpJiZzKCJmZWF0dXJlaWRrZXkiKSxzKCJ0ZXh0IikscygiaG92ZXJ0ZXh0IikscygiaG92ZXJ0ZW1wbGF0ZSIpLHMoIm1hcmtlci5saW5lLndpZHRoIikmJnMoIm1hcmtlci5saW5lLmNvbG9yIikscygibWFya2VyLm9wYWNpdHkiKSxhKHQsZSxvLHMse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHMpfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYwMiwiLi4vLi4vbGliIjo3MTcsIi4vYXR0cmlidXRlcyI6OTI0fV0sOTI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGEpe3QubG9jYXRpb249ZS5sb2NhdGlvbix0Lno9ZS56O3ZhciBpPW5bYV07cmV0dXJuIGkuZkluJiZpLmZJbi5wcm9wZXJ0aWVzJiYodC5wcm9wZXJ0aWVzPWkuZkluLnByb3BlcnRpZXMpLHQuY3Q9aS5jdCx0fX0se31dLDkyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9saWIiKS5maWxsVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHMsbCxjLHU9dC5jZCxoPXVbMF0udHJhY2UsZj10LnN1YnBsb3Q7Zm9yKHM9MDtzPHUubGVuZ3RoO3MrKylpZihjPSExLChvPXVbc10pLl9wb2x5Z29ucyl7Zm9yKGw9MDtsPG8uX3BvbHlnb25zLmxlbmd0aDtsKyspby5fcG9seWdvbnNbbF0uY29udGFpbnMoW2Uscl0pJiYoYz0hYyksby5fcG9seWdvbnNbbF0uY29udGFpbnMoW2UrMzYwLHJdKSYmKGM9IWMpO2lmKGMpYnJlYWt9aWYoYyYmbylyZXR1cm4gdC54MD10LngxPXQueGEuYzJwKG8uY3QpLHQueTA9dC55MT10LnlhLmMycChvLmN0KSx0LmluZGV4PW8uaW5kZXgsdC5sb2NhdGlvbj1vLmxvYyx0Lno9by56LHQuekxhYmVsPW4udGlja1RleHQoZi5tb2NrQXhpcyxmLm1vY2tBeGlzLmMybChvLnopLCJob3ZlciIpLnRleHQsdC5ob3ZlcnRlbXBsYXRlPW8uaG92ZXJ0ZW1wbGF0ZSxmdW5jdGlvbih0LGUscil7aWYoZS5ob3ZlcnRlbXBsYXRlKXJldHVybjt2YXIgbj1yLmhpfHxlLmhvdmVyaW5mbyxvPVN0cmluZyhyLmxvYykscz0iYWxsIj09PW4/YS5ob3ZlcmluZm8uZmxhZ3M6bi5zcGxpdCgiKyIpLGw9LTEhPT1zLmluZGV4T2YoIm5hbWUiKSxjPS0xIT09cy5pbmRleE9mKCJsb2NhdGlvbiIpLHU9LTEhPT1zLmluZGV4T2YoInoiKSxoPS0xIT09cy5pbmRleE9mKCJ0ZXh0IiksZj1bXTshbCYmYz90Lm5hbWVPdmVycmlkZT1vOihsJiYodC5uYW1lT3ZlcnJpZGU9ZS5uYW1lKSxjJiZmLnB1c2gobykpO3UmJmYucHVzaCh0LnpMYWJlbCk7aCYmaShyLGUsZik7dC5leHRyYVRleHQ9Zi5qb2luKCI8YnI+Iil9KHQsaCxvLGYubW9ja0F4aXMpLFt0XX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsIi4vYXR0cmlidXRlcyI6OTI0fV0sOTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLGNhbGM6dCgiLi9jYWxjIiksY2FsY0dlb0pTT046dCgiLi9wbG90IikuY2FsY0dlb0pTT04scGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4vc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNob3JvcGxldGgiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dlbyIpLGNhdGVnb3JpZXM6WyJnZW8iLCJub09wYWNpdHkiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2VvIjo3OTUsIi4uL2hlYXRtYXAvY29sb3JiYXIiOjEwMDMsIi4vYXR0cmlidXRlcyI6OTI0LCIuL2NhbGMiOjkyNSwiLi9kZWZhdWx0cyI6OTI2LCIuL2V2ZW50X2RhdGEiOjkyNywiLi9ob3ZlciI6OTI4LCIuL3Bsb3QiOjkzMCwiLi9zZWxlY3QiOjkzMSwiLi9zdHlsZSI6OTMyfV0sOTMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiKSxvPXQoIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyIpLmdldFRvcG9qc29uRmVhdHVyZXMscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZmluZEV4dHJlbWVzLGw9dCgiLi9zdHlsZSIpLnN0eWxlO2UuZXhwb3J0cz17Y2FsY0dlb0pTT046ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dFswXS50cmFjZSxuPWVbci5nZW9dLGE9bi5fc3VicGxvdCxsPXIubG9jYXRpb25tb2RlLGM9ci5fbGVuZ3RoLHU9Imdlb2pzb24taWQiPT09bD9pLmV4dHJhY3RUcmFjZUZlYXR1cmUodCk6byhyLGEudG9wb2pzb24pLGg9W10sZj1bXSxwPTA7cDxjO3ArKyl7dmFyIGQ9dFtwXSxnPSJnZW9qc29uLWlkIj09PWw/ZC5mT3V0OmkubG9jYXRpb25Ub0ZlYXR1cmUobCxkLmxvYyx1KTtpZihnKXtkLmdlb2pzb249ZyxkLmN0PWcucHJvcGVydGllcy5jdCxkLl9wb2x5Z29ucz1pLmZlYXR1cmUycG9seWdvbnMoZyk7dmFyIHY9aS5jb21wdXRlQmJveChnKTtoLnB1c2godlswXSx2WzJdKSxmLnB1c2godlsxXSx2WzNdKX1lbHNlIGQuZ2VvanNvbj1udWxsfWlmKCJnZW9qc29uIj09PW4uZml0Ym91bmRzJiYiZ2VvanNvbi1pZCI9PT1sKXt2YXIgbT1pLmNvbXB1dGVCYm94KGkuZ2V0VHJhY2VHZW9qc29uKHIpKTtoPVttWzBdLG1bMl1dLGY9W21bMV0sbVszXV19dmFyIHk9e3BhZGRlZDohMH07ci5fZXh0cmVtZXMubG9uPXMobi5sb25heGlzLl9heCxoLHkpLHIuX2V4dHJlbWVzLmxhdD1zKG4ubGF0YXhpcy5fYXgsZix5KX0scGxvdDpmdW5jdGlvbih0LGUscil7dmFyIGk9ZS5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KCIuY2hvcm9wbGV0aGxheWVyIik7YS5tYWtlVHJhY2VHcm91cHMoaSxyLCJ0cmFjZSBjaG9yb3BsZXRoIikuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguY2hvcm9wbGV0aGxvY2F0aW9uIikuZGF0YShhLmlkZW50aXR5KTtyLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgiY2hvcm9wbGV0aGxvY2F0aW9uIiwhMCksci5leGl0KCkucmVtb3ZlKCksbCh0LGUpfSl9fX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyI6NzExLCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiOjc0NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6NzY0LCIuL3N0eWxlIjo5MzIsZDM6MTY1fV0sOTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxpLG8scz10LmNkLGw9dC54YXhpcyxjPXQueWF4aXMsdT1bXTtpZighMT09PWUpZm9yKHI9MDtyPHMubGVuZ3RoO3IrKylzW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8cy5sZW5ndGg7cisrKShhPShuPXNbcl0pLmN0KSYmKGk9bC5jMnAoYSksbz1jLmMycChhKSxlLmNvbnRhaW5zKFtpLG9dLG51bGwscix0KT8odS5wdXNoKHtwb2ludE51bWJlcjpyLGxvbjphWzBdLGxhdDphWzFdfSksbi5zZWxlY3RlZD0xKTpuLnNlbGVjdGVkPTApO3JldHVybiB1fX0se31dLDkzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKTtmdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxzPWVbMF0ubm9kZTMuc2VsZWN0QWxsKCIuY2hvcm9wbGV0aGxvY2F0aW9uIiksbD1yLm1hcmtlcnx8e30sYz1sLmxpbmV8fHt9LHU9by5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2Uocik7cy5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmF0dHIoImZpbGwiLHUodC56KSkuY2FsbChhLnN0cm9rZSx0Lm1sY3x8Yy5jb2xvcikuY2FsbChpLmRhc2hMaW5lLCIiLHQubWx3fHxjLndpZHRofHwwKS5zdHlsZSgib3BhY2l0eSIsbC5vcGFjaXR5KX0pLGkuc2VsZWN0ZWRQb2ludFN0eWxlKHMscix0KX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSl7ZSYmcyh0LGUpfSxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ub2RlMyxuPWVbMF0udHJhY2U7bi5zZWxlY3RlZHBvaW50cz9pLnNlbGVjdGVkUG9pbnRTdHlsZShyLnNlbGVjdEFsbCgiLmNob3JvcGxldGhsb2NhdGlvbiIpLG4sdCk6cyh0LGUpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYwNCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsZDM6MTY1fV0sOTMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Nob3JvcGxldGgvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9cyh7bG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZ2VvanNvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LGZlYXR1cmVpZGtleTpzKHt9LG4uZmVhdHVyZWlka2V5LHt9KSxiZWxvdzp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxtYXJrZXI6e2xpbmU6e2NvbG9yOnMoe30sbi5tYXJrZXIubGluZS5jb2xvcix7ZWRpdFR5cGU6InBsb3QifSksd2lkdGg6cyh7fSxuLm1hcmtlci5saW5lLndpZHRoLHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6cyh7fSxuLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6cyh7fSxuLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5OnMoe30sbi51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0saG92ZXJpbmZvOm4uaG92ZXJpbmZvLGhvdmVydGVtcGxhdGU6aSh7fSx7a2V5czpbInByb3BlcnRpZXMiXX0pLHNob3dsZWdlbmQ6cyh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0sYSgiIix7Y0xldHRlcjoieiIsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU5OSwiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg0MSwiLi4vY2hvcm9wbGV0aC9hdHRyaWJ1dGVzIjo5MjR9XSw5MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIikubWFrZUJsYW5rLGw9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpO2Z1bmN0aW9uIGModCl7dmFyIGUscj10WzBdLnRyYWNlLG49ci5fb3B0cztpZihyLnNlbGVjdGVkcG9pbnRzKXtmb3IodmFyIGk9by5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHIpLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXTtsLmZPdXQmJihsLmZPdXQucHJvcGVydGllcy5tbzI9aS5zZWxlY3RlZE9wYWNpdHlGbihsKSl9ZT17dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbzIifX1lbHNlIGU9YS5pc0FycmF5T3JUeXBlZEFycmF5KHIubWFya2VyLm9wYWNpdHkpP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1vIn06ci5tYXJrZXIub3BhY2l0eTtyZXR1cm4gYS5leHRlbmRGbGF0KG4uZmlsbC5wYWludCx7ImZpbGwtb3BhY2l0eSI6ZX0pLGEuZXh0ZW5kRmxhdChuLmxpbmUucGFpbnQseyJsaW5lLW9wYWNpdHkiOmV9KSxufWUuZXhwb3J0cz17Y29udmVydDpmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ITA9PT1lLnZpc2libGUmJjAhPT1lLl9sZW5ndGgsbz17bGF5b3V0Ont2aXNpYmlsaXR5OiJub25lIn0scGFpbnQ6e319LHU9e2xheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fSxoPWUuX29wdHM9e2ZpbGw6byxsaW5lOnUsZ2VvanNvbjpzKCl9O2lmKCFyKXJldHVybiBoO3ZhciBmPWwuZXh0cmFjdFRyYWNlRmVhdHVyZSh0KTtpZighZilyZXR1cm4gaDt2YXIgcCxkLGcsdj1pLm1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZShlKSxtPWUubWFya2VyLHk9bS5saW5lfHx7fTthLmlzQXJyYXlPclR5cGVkQXJyYXkobS5vcGFjaXR5KSYmKHA9ZnVuY3Rpb24odCl7dmFyIGU9dC5tbztyZXR1cm4gbihlKT8rYS5jb25zdHJhaW4oZSwwLDEpOjB9KSxhLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5jb2xvcikmJihkPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm1sY30pLGEuaXNBcnJheU9yVHlwZWRBcnJheSh5LndpZHRoKSYmKGc9ZnVuY3Rpb24odCl7cmV0dXJuIHQubWx3fSk7Zm9yKHZhciB4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBiPXRbeF0sXz1iLmZPdXQ7aWYoXyl7dmFyIHc9Xy5wcm9wZXJ0aWVzO3cuZmM9dihiLnopLHAmJih3Lm1vPXAoYikpLGQmJih3Lm1sYz1kKGIpKSxnJiYody5tbHc9ZyhiKSksYi5jdD13LmN0LGIuX3BvbHlnb25zPWwuZmVhdHVyZTJwb2x5Z29ucyhfKX19dmFyIGs9cD97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbyJ9Om0ub3BhY2l0eTtyZXR1cm4gYS5leHRlbmRGbGF0KG8ucGFpbnQseyJmaWxsLWNvbG9yIjp7dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJmYyJ9LCJmaWxsLW9wYWNpdHkiOmt9KSxhLmV4dGVuZEZsYXQodS5wYWludCx7ImxpbmUtY29sb3IiOmQ/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibWxjIn06eS5jb2xvciwibGluZS13aWR0aCI6Zz97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbHcifTp5LndpZHRoLCJsaW5lLW9wYWNpdHkiOmt9KSxvLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIix1LmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixoLmdlb2pzb249e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpmfSxjKHQpLGh9LGNvbnZlcnRPblNlbGVjdDpjfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYwNCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo3MTEsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo3MTIsImZhc3QtaXNudW1lcmljIjoyMjh9XSw5MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxpPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIGw9cygibG9jYXRpb25zIiksYz1zKCJ6IiksdT1zKCJnZW9qc29uIik7bi5pc0FycmF5T3JUeXBlZEFycmF5KGwpJiZsLmxlbmd0aCYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGMpJiZjLmxlbmd0aCYmKCJzdHJpbmciPT10eXBlb2YgdSYmIiIhPT11fHxuLmlzUGxhaW5PYmplY3QodSkpPyhzKCJmZWF0dXJlaWRrZXkiKSxlLl9sZW5ndGg9TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpLHMoImJlbG93IikscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxzKCJtYXJrZXIubGluZS53aWR0aCIpJiZzKCJtYXJrZXIubGluZS5jb2xvciIpLHMoIm1hcmtlci5vcGFjaXR5IiksYSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxzKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYwMiwiLi4vLi4vbGliIjo3MTcsIi4vYXR0cmlidXRlcyI6OTMzfV0sOTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLGNhbGM6dCgiLi4vY2hvcm9wbGV0aC9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuLi9jaG9yb3BsZXRoL2hvdmVyIiksZXZlbnREYXRhOnQoIi4uL2Nob3JvcGxldGgvZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuLi9jaG9yb3BsZXRoL3NlbGVjdCIpLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXtlJiZlWzBdLnRyYWNlLl9nbFRyYWNlLnVwZGF0ZU9uU2VsZWN0KGUpfSxnZXRCZWxvdzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmdldE1hcExheWVycygpLG49ci5sZW5ndGgtMjtuPj0wO24tLSl7dmFyIGE9cltuXS5pZDtpZigic3RyaW5nIj09dHlwZW9mIGEmJjA9PT1hLmluZGV4T2YoIndhdGVyIikpZm9yKHZhciBpPW4rMTtpPHIubGVuZ3RoO2krKylpZigic3RyaW5nIj09dHlwZW9mKGE9cltpXS5pZCkmJi0xPT09YS5pbmRleE9mKCJwbG90bHktIikpcmV0dXJuIGF9fSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY2hvcm9wbGV0aG1hcGJveCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvbWFwYm94IiksY2F0ZWdvcmllczpbIm1hcGJveCIsImdsIiwibm9PcGFjaXR5Iiwic2hvd0xlZ2VuZCJdLG1ldGE6e2hyX25hbWU6ImNob3JvcGxldGhfbWFwYm94In19fSx7Ii4uLy4uL3Bsb3RzL21hcGJveCI6ODIwLCIuLi9jaG9yb3BsZXRoL2NhbGMiOjkyNSwiLi4vY2hvcm9wbGV0aC9ldmVudF9kYXRhIjo5MjcsIi4uL2Nob3JvcGxldGgvaG92ZXIiOjkyOCwiLi4vY2hvcm9wbGV0aC9zZWxlY3QiOjkzMSwiLi4vaGVhdG1hcC9jb2xvcmJhciI6MTAwMywiLi9hdHRyaWJ1dGVzIjo5MzMsIi4vZGVmYXVsdHMiOjkzNSwiLi9wbG90Ijo5Mzd9XSw5Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb252ZXJ0IikuY29udmVydCxhPXQoIi4vY29udmVydCIpLmNvbnZlcnRPblNlbGVjdCxpPXQoIi4uLy4uL3Bsb3RzL21hcGJveC9jb25zdGFudHMiKS50cmFjZUxheWVyUHJlZml4O2Z1bmN0aW9uIG8odCxlKXt0aGlzLnR5cGU9ImNob3JvcGxldGhtYXBib3giLHRoaXMuc3VicGxvdD10LHRoaXMudWlkPWUsdGhpcy5zb3VyY2VJZD0ic291cmNlLSIrZSx0aGlzLmxheWVyTGlzdD1bWyJmaWxsIixpK2UrIi1maWxsIl0sWyJsaW5lIixpK2UrIi1saW5lIl1dLHRoaXMuYmVsb3c9bnVsbH12YXIgcz1vLnByb3RvdHlwZTtzLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGUobih0KSl9LHMudXBkYXRlT25TZWxlY3Q9ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlKGEodCkpfSxzLl91cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdWJwbG90LHI9dGhpcy5sYXllckxpc3Qsbj1lLmJlbG93TG9va3VwWyJ0cmFjZS0iK3RoaXMudWlkXTtlLm1hcC5nZXRTb3VyY2UodGhpcy5zb3VyY2VJZCkuc2V0RGF0YSh0Lmdlb2pzb24pLG4hPT10aGlzLmJlbG93JiYodGhpcy5fcmVtb3ZlTGF5ZXJzKCksdGhpcy5fYWRkTGF5ZXJzKHQsbiksdGhpcy5iZWxvdz1uKTtmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIGk9clthXSxvPWlbMF0scz1pWzFdLGw9dFtvXTtlLnNldE9wdGlvbnMocywic2V0TGF5b3V0UHJvcGVydHkiLGwubGF5b3V0KSwidmlzaWJsZSI9PT1sLmxheW91dC52aXNpYmlsaXR5JiZlLnNldE9wdGlvbnMocywic2V0UGFpbnRQcm9wZXJ0eSIsbC5wYWludCl9fSxzLl9hZGRMYXllcnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5zdWJwbG90LG49dGhpcy5sYXllckxpc3QsYT10aGlzLnNvdXJjZUlkLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXSxzPW9bMF0sbD10W3NdO3IuYWRkTGF5ZXIoe3R5cGU6cyxpZDpvWzFdLHNvdXJjZTphLGxheW91dDpsLmxheW91dCxwYWludDpsLnBhaW50fSxlKX19LHMuX3JlbW92ZUxheWVycz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN1YnBsb3QubWFwLGU9dGhpcy5sYXllckxpc3Qscj1lLmxlbmd0aC0xO3I+PTA7ci0tKXQucmVtb3ZlTGF5ZXIoZVtyXVsxXSl9LHMuZGlzcG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3VicGxvdC5tYXA7dGhpcy5fcmVtb3ZlTGF5ZXJzKCksdC5yZW1vdmVTb3VyY2UodGhpcy5zb3VyY2VJZCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2UsYT1uZXcgbyh0LHIudWlkKSxpPWEuc291cmNlSWQscz1uKGUpLGw9YS5iZWxvdz10LmJlbG93TG9va3VwWyJ0cmFjZS0iK3IudWlkXTtyZXR1cm4gdC5tYXAuYWRkU291cmNlKGkse3R5cGU6Imdlb2pzb24iLGRhdGE6cy5nZW9qc29ufSksYS5fYWRkTGF5ZXJzKHMsbCksZVswXS50cmFjZS5fZ2xUcmFjZT1hLGF9fSx7Ii4uLy4uL3Bsb3RzL21hcGJveC9jb25zdGFudHMiOjgxOCwiLi9jb252ZXJ0Ijo5MzR9XSw5Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi9tZXNoM2QvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbD17eDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sdTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx2Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHc6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNjYWxlZCIsImFic29sdXRlIl0sZWRpdFR5cGU6ImNhbGMiLGRmbHQ6InNjYWxlZCJ9LHNpemVyZWY6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLG1pbjowfSxhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGVkaXRUeXBlOiJjYWxjIix2YWx1ZXM6WyJ0aXAiLCJ0YWlsIiwiY20iLCJjZW50ZXIiXSxkZmx0OiJjbSJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGVtcGxhdGU6YSh7ZWRpdFR5cGU6ImNhbGMifSx7a2V5czpbIm5vcm0iXX0pLHNob3dsZWdlbmQ6cyh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX07cyhsLG4oIiIse2NvbG9yQXR0cjoidS92L3cgbm9ybSIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pKTtbIm9wYWNpdHkiLCJsaWdodHBvc2l0aW9uIiwibGlnaHRpbmciXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbdF09aVt0XX0pLGwuaG92ZXJpbmZvPXMoe30sby5ob3ZlcmluZm8se2VkaXRUeXBlOiJjYWxjIixmbGFnczpbIngiLCJ5IiwieiIsInUiLCJ2IiwidyIsIm5vcm0iLCJ0ZXh0IiwibmFtZSJdLGRmbHQ6IngreSt6K25vcm0rdGV4dCtuYW1lIn0pLGwudHJhbnNmb3Jtcz12b2lkIDAsZS5leHBvcnRzPWx9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU5OSwiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg0MSwiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiOjEwNjF9XSw5Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS51LGE9ZS52LGk9ZS53LG89TWF0aC5taW4oZS54Lmxlbmd0aCxlLnkubGVuZ3RoLGUuei5sZW5ndGgsci5sZW5ndGgsYS5sZW5ndGgsaS5sZW5ndGgpLHM9LTEvMCxsPTEvMCxjPTA7YzxvO2MrKyl7dmFyIHU9cltjXSxoPWFbY10sZj1pW2NdLHA9TWF0aC5zcXJ0KHUqdStoKmgrZipmKTtzPU1hdGgubWF4KHMscCksbD1NYXRoLm1pbihsLHApfWUuX2xlbj1vLGUuX25vcm1NYXg9cyxuKHQsZSx7dmFsczpbbCxzXSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoiYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYwMH1dLDk0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1jb25lM2QiKSxhPXQoImdsLWNvbmUzZCIpLmNyZWF0ZUNvbmVNZXNoLGk9dCgiLi4vLi4vbGliIikuc2ltcGxlTWFwLG89dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmV4dHJhY3RPcHRzLGw9dCgiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIik7ZnVuY3Rpb24gYyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubWVzaD1udWxsLHRoaXMuZGF0YT1udWxsfXZhciB1PWMucHJvdG90eXBlO3UuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5pbmRleD10LmRhdGEuaW5kZXgscj10aGlzLmRhdGEueFtlXSxuPXRoaXMuZGF0YS55W2VdLGE9dGhpcy5kYXRhLnpbZV0saT10aGlzLmRhdGEudVtlXSxvPXRoaXMuZGF0YS52W2VdLHM9dGhpcy5kYXRhLndbZV07dC50cmFjZUNvb3JkaW5hdGU9W3IsbixhLGksbyxzLE1hdGguc3FydChpKmkrbypvK3MqcyldO3ZhciBsPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KGwpJiZ2b2lkIDAhPT1sW2VdP3QudGV4dExhYmVsPWxbZV06bCYmKHQudGV4dExhYmVsPWwpLCEwfX07dmFyIGg9e3hheGlzOjAseWF4aXM6MSx6YXhpczoyfSxmPXt0aXA6MSx0YWlsOjAsY206LjI1LGNlbnRlcjouNX0scD17dGlwOjEsdGFpbDoxLGNtOi43NSxjZW50ZXI6LjV9O2Z1bmN0aW9uIGQodCxlKXt2YXIgcj10LmZ1bGxTY2VuZUxheW91dCxhPXQuZGF0YVNjYWxlLGM9e307ZnVuY3Rpb24gdSh0LGUpe3ZhciBuPXJbZV0sbz1hW2hbZV1dO3JldHVybiBpKHQsZnVuY3Rpb24odCl7cmV0dXJuIG4uZDJsKHQpKm99KX1jLnZlY3RvcnM9bCh1KGUudSwieGF4aXMiKSx1KGUudiwieWF4aXMiKSx1KGUudywiemF4aXMiKSxlLl9sZW4pLGMucG9zaXRpb25zPWwodShlLngsInhheGlzIiksdShlLnksInlheGlzIiksdShlLnosInpheGlzIiksZS5fbGVuKTt2YXIgZD1zKGUpO2MuY29sb3JtYXA9byhlKSxjLnZlcnRleEludGVuc2l0eUJvdW5kcz1bZC5taW4vZS5fbm9ybU1heCxkLm1heC9lLl9ub3JtTWF4XSxjLmNvbmVPZmZzZXQ9ZltlLmFuY2hvcl0sInNjYWxlZCI9PT1lLnNpemVtb2RlP2MuY29uZVNpemU9ZS5zaXplcmVmfHwuNTpjLmNvbmVTaXplPWUuc2l6ZXJlZiYmZS5fbm9ybU1heD9lLnNpemVyZWYvZS5fbm9ybU1heDouNTt2YXIgZz1uKGMpLHY9ZS5saWdodHBvc2l0aW9uO3JldHVybiBnLmxpZ2h0UG9zaXRpb249W3YueCx2Lnksdi56XSxnLmFtYmllbnQ9ZS5saWdodGluZy5hbWJpZW50LGcuZGlmZnVzZT1lLmxpZ2h0aW5nLmRpZmZ1c2UsZy5zcGVjdWxhcj1lLmxpZ2h0aW5nLnNwZWN1bGFyLGcucm91Z2huZXNzPWUubGlnaHRpbmcucm91Z2huZXNzLGcuZnJlc25lbD1lLmxpZ2h0aW5nLmZyZXNuZWwsZy5vcGFjaXR5PWUub3BhY2l0eSxlLl9wYWQ9cFtlLmFuY2hvcl0qZy52ZWN0b3JTY2FsZSpnLmNvbmVTY2FsZSplLl9ub3JtTWF4LGd9dS51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5kYXRhPXQ7dmFyIGU9ZCh0aGlzLnNjZW5lLHQpO3RoaXMubWVzaC51cGRhdGUoZSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLG49ZCh0LGUpLGk9YShyLG4pLG89bmV3IGModCxlLnVpZCk7cmV0dXJuIG8ubWVzaD1pLG8uZGF0YT1lLGkuX3RyYWNlPW8sdC5nbHBsb3QuYWRkKGkpLG99fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjA0LCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NzE0LCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiOjgxNiwiZ2wtY29uZTNkIjoyNDV9XSw5NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxpPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIGw9cygidSIpLGM9cygidiIpLHU9cygidyIpLGg9cygieCIpLGY9cygieSIpLHA9cygieiIpO2wmJmwubGVuZ3RoJiZjJiZjLmxlbmd0aCYmdSYmdS5sZW5ndGgmJmgmJmgubGVuZ3RoJiZmJiZmLmxlbmd0aCYmcCYmcC5sZW5ndGg/KHMoInNpemVyZWYiKSxzKCJzaXplbW9kZSIpLHMoImFuY2hvciIpLHMoImxpZ2h0aW5nLmFtYmllbnQiKSxzKCJsaWdodGluZy5kaWZmdXNlIikscygibGlnaHRpbmcuc3BlY3VsYXIiKSxzKCJsaWdodGluZy5yb3VnaG5lc3MiKSxzKCJsaWdodGluZy5mcmVzbmVsIikscygibGlnaHRwb3NpdGlvbi54IikscygibGlnaHRwb3NpdGlvbi55IikscygibGlnaHRwb3NpdGlvbi56IiksYSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxzKCJ0ZXh0IikscygiaG92ZXJ0ZXh0IikscygiaG92ZXJ0ZW1wbGF0ZSIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjAyLCIuLi8uLi9saWIiOjcxNywiLi9hdHRyaWJ1dGVzIjo5Mzh9XSw5NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY29uZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic2hvd0xlZ2VuZCJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnttaW46ImNtaW4iLG1heDoiY21heCJ9LGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL2NvbnZlcnQiKSxldmVudERhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5ub3JtPWUudHJhY2VDb29yZGluYXRlWzZdLHR9LG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjgwNSwiLi9hdHRyaWJ1dGVzIjo5MzgsIi4vY2FsYyI6OTM5LCIuL2NvbnZlcnQiOjk0MCwiLi9kZWZhdWx0cyI6OTQxfV0sOTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGE9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLHM9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXQoIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIiksdT1jLkNPTVBBUklTT05fT1BTMixoPWMuSU5URVJWQUxfT1BTLGY9KHQoIi4uLy4uL2NvbnN0YW50cy9kb2NzIikuRk9STUFUX0xJTkssYS5saW5lKTtlLmV4cG9ydHM9bCh7ejpuLnoseDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsdHJhbnNwb3NlOm4udHJhbnNwb3NlLHh0eXBlOm4ueHR5cGUseXR5cGU6bi55dHlwZSx6aG92ZXJmb3JtYXQ6bi56aG92ZXJmb3JtYXQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsaG92ZXJvbmdhcHM6bi5ob3Zlcm9uZ2Fwcyxjb25uZWN0Z2FwczpsKHt9LG4uY29ubmVjdGdhcHMse30pLGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sYXV0b2NvbnRvdXI6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7ImNvbnRvdXJzLnN0YXJ0Ijp2b2lkIDAsImNvbnRvdXJzLmVuZCI6dm9pZCAwLCJjb250b3Vycy5zaXplIjp2b2lkIDB9fSxuY29udG91cnM6e3ZhbFR5cGU6ImludGVnZXIiLGRmbHQ6MTUsbWluOjEsZWRpdFR5cGU6ImNhbGMifSxjb250b3Vyczp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGV2ZWxzIiwiY29uc3RyYWludCJdLGRmbHQ6ImxldmVscyIsZWRpdFR5cGU6ImNhbGMifSxzdGFydDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvY29udG91ciI6ITF9fSxlbmQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b2NvbnRvdXIiOiExfX0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsbWluOjAsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvY29udG91ciI6ITF9fSxjb2xvcmluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZmlsbCIsImhlYXRtYXAiLCJsaW5lcyIsIm5vbmUiXSxkZmx0OiJmaWxsIixlZGl0VHlwZToiY2FsYyJ9LHNob3dsaW5lczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LHNob3dsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxsYWJlbGZvbnQ6cyh7ZWRpdFR5cGU6InBsb3QiLGNvbG9yRWRpdFR5cGU6InN0eWxlIn0pLGxhYmVsZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxvcGVyYXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXS5jb25jYXQodSkuY29uY2F0KGgpLGRmbHQ6Ij0iLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7YXV0b2NvbnRvdXI6ITF9fSxsaW5lOntjb2xvcjpsKHt9LGYuY29sb3Ise2VkaXRUeXBlOiJzdHlsZStjb2xvcmJhcnMifSksd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlK2NvbG9yYmFycyJ9LGRhc2g6byxzbW9vdGhpbmc6bCh7fSxmLnNtb290aGluZyx7fSksZWRpdFR5cGU6InBsb3QifX0saSgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTk5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NjEyLCIuLi8uLi9jb25zdGFudHMvZG9jcyI6Njg4LCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6Njg5LCIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NzkxLCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjFlMywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTIwfV0sOTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGE9dCgiLi4vaGVhdG1hcC9jYWxjIiksaT10KCIuL3NldF9jb250b3VycyIpLG89dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWEodCxlKSxzPXJbMF0uejtpKGUscyk7dmFyIGwsYz1lLmNvbnRvdXJzLHU9bi5leHRyYWN0T3B0cyhlKTtpZigiaGVhdG1hcCI9PT1jLmNvbG9yaW5nJiZ1LmF1dG8mJiExPT09ZS5hdXRvY29udG91cil7dmFyIGg9Yy5zdGFydCxmPW8oYykscD1jLnNpemV8fDEsZD1NYXRoLmZsb29yKChmLWgpL3ApKzE7aXNGaW5pdGUocCl8fChwPTEsZD0xKTt2YXIgZz1oLXAvMjtsPVtnLGcrZCpwXX1lbHNlIGw9cztyZXR1cm4gbi5jYWxjKHQsZSx7dmFsczpsLGNMZXR0ZXI6InoifSkscn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MDQsIi4uL2hlYXRtYXAvY2FsYyI6MTAwMSwiLi9lbmRfcGx1cyI6OTU0LCIuL3NldF9jb250b3VycyI6OTYyfV0sOTQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49dFswXSxhPW4uejtzd2l0Y2goZS50eXBlKXtjYXNlImxldmVscyI6dmFyIGk9TWF0aC5taW4oYVswXVswXSxhWzBdWzFdKTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdO28ucHJlZml4Qm91bmRhcnk9IW8uZWRnZXBhdGhzLmxlbmd0aCYmKGk+by5sZXZlbHx8by5zdGFydHMubGVuZ3RoJiZpPT09by5sZXZlbCl9YnJlYWs7Y2FzZSJjb25zdHJhaW50IjppZihuLnByZWZpeEJvdW5kYXJ5PSExLG4uZWRnZXBhdGhzLmxlbmd0aClyZXR1cm47dmFyIHM9bi54Lmxlbmd0aCxsPW4ueS5sZW5ndGgsYz0tMS8wLHU9MS8wO2ZvcihyPTA7cjxsO3IrKyl1PU1hdGgubWluKHUsYVtyXVswXSksdT1NYXRoLm1pbih1LGFbcl1bcy0xXSksYz1NYXRoLm1heChjLGFbcl1bMF0pLGM9TWF0aC5tYXgoYyxhW3JdW3MtMV0pO2ZvcihyPTE7cjxzLTE7cisrKXU9TWF0aC5taW4odSxhWzBdW3JdKSx1PU1hdGgubWluKHUsYVtsLTFdW3JdKSxjPU1hdGgubWF4KGMsYVswXVtyXSksYz1NYXRoLm1heChjLGFbbC0xXVtyXSk7dmFyIGgsZixwPWUudmFsdWU7c3dpdGNoKGUuX29wZXJhdGlvbil7Y2FzZSI+IjpwPmMmJihuLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlIjwiOihwPHV8fG4uc3RhcnRzLmxlbmd0aCYmcD09PXUpJiYobi5wcmVmaXhCb3VuZGFyeT0hMCk7YnJlYWs7Y2FzZSJbXSI6aD1NYXRoLm1pbihwWzBdLHBbMV0pLCgoZj1NYXRoLm1heChwWzBdLHBbMV0pKTx1fHxoPmN8fG4uc3RhcnRzLmxlbmd0aCYmZj09PXUpJiYobi5wcmVmaXhCb3VuZGFyeT0hMCk7YnJlYWs7Y2FzZSJdWyI6aD1NYXRoLm1pbihwWzBdLHBbMV0pLGY9TWF0aC5tYXgocFswXSxwWzFdKSxoPHUmJmY+YyYmKG4ucHJlZml4Qm91bmRhcnk9ITApfX19fSx7fV0sOTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGE9dCgiLi9tYWtlX2NvbG9yX21hcCIpLGk9dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz17bWluOiJ6bWluIixtYXg6InptYXgiLGNhbGM6ZnVuY3Rpb24odCxlLHIpe3ZhciBvPWUuY29udG91cnMscz1lLmxpbmUsbD1vLnNpemV8fDEsYz1vLmNvbG9yaW5nLHU9YShlLHtpc0NvbG9yYmFyOiEwfSk7aWYoImhlYXRtYXAiPT09Yyl7dmFyIGg9bi5leHRyYWN0T3B0cyhlKTtyLl9maWxsZ3JhZGllbnQ9aC5yZXZlcnNlc2NhbGU/bi5mbGlwU2NhbGUoaC5jb2xvcnNjYWxlKTpoLmNvbG9yc2NhbGUsci5fenJhbmdlPVtoLm1pbixoLm1heF19ZWxzZSJmaWxsIj09PWMmJihyLl9maWxsY29sb3I9dSk7ci5fbGluZT17Y29sb3I6ImxpbmVzIj09PWM/dTpzLmNvbG9yLHdpZHRoOiExIT09by5zaG93bGluZXM/cy53aWR0aDowLGRhc2g6cy5kYXNofSxyLl9sZXZlbHM9e3N0YXJ0Om8uc3RhcnQsZW5kOmkobyksc2l6ZTpsfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjA0LCIuL2VuZF9wbHVzIjo5NTQsIi4vbWFrZV9jb2xvcl9tYXAiOjk1OX1dLDk0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0JPVFRPTVNUQVJUOlsxLDksMTMsMTA0LDcxM10sVE9QU1RBUlQ6WzQsNiw3LDEwNCw3MTNdLExFRlRTVEFSVDpbOCwxMiwxNCwyMDgsMTExNF0sUklHSFRTVEFSVDpbMiwzLDExLDIwOCwxMTE0XSxORVdERUxUQTpbbnVsbCxbLTEsMF0sWzAsLTFdLFstMSwwXSxbMSwwXSxudWxsLFswLC0xXSxbLTEsMF0sWzAsMV0sWzAsMV0sbnVsbCxbMCwxXSxbMSwwXSxbMSwwXSxbMCwtMV1dLENIT09TRVNBRERMRTp7MTA0Ols0LDFdLDIwODpbMiw4XSw3MTM6WzcsMTNdLDExMTQ6WzExLDE0XX0sU0FERExFUkVNQUlOREVSOnsxOjQsMjo4LDQ6MSw3OjEzLDg6MiwxMToxNCwxMzo3LDE0OjExfSxMQUJFTERJU1RBTkNFOjIsTEFCRUxJTkNSRUFTRToxMCxMQUJFTE1JTjozLExBQkVMTUFYOjEwLExBQkVMT1BUSU1JWkVSOntFREdFQ09TVDoxLEFOR0xFQ09TVDoxLE5FSUdIQk9SQ09TVDo1LFNBTUVMRVZFTEZBQ1RPUjoxMCxTQU1FTEVWRUxESVNUQU5DRTo1LE1BWENPU1Q6MTAwLElOSVRJQUxTRUFSQ0hQT0lOVFM6MTAsSVRFUkFUSU9OUzo1fX19LHt9XSw5NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4vbGFiZWxfZGVmYXVsdHMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPWkuYWRkT3BhY2l0eSxzPWkub3BhY2l0eSxsPXQoIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIiksYz1sLkNPTlNUUkFJTlRfUkVEVUNUSU9OLHU9bC5DT01QQVJJU09OX09QUzI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksbCxoKXt2YXIgZixwLGQsZz1lLmNvbnRvdXJzLHY9cigiY29udG91cnMub3BlcmF0aW9uIik7KGcuX29wZXJhdGlvbj1jW3ZdLGZ1bmN0aW9uKHQsZSl7dmFyIHI7LTE9PT11LmluZGV4T2YoZS5vcGVyYXRpb24pPyh0KCJjb250b3Vycy52YWx1ZSIsWzAsMV0pLEFycmF5LmlzQXJyYXkoZS52YWx1ZSk/ZS52YWx1ZS5sZW5ndGg+Mj9lLnZhbHVlPWUudmFsdWUuc2xpY2UoMik6MD09PWUubGVuZ3RoP2UudmFsdWU9WzAsMV06ZS5sZW5ndGg8Mj8ocj1wYXJzZUZsb2F0KGUudmFsdWVbMF0pLGUudmFsdWU9W3IscisxXSk6ZS52YWx1ZT1bcGFyc2VGbG9hdChlLnZhbHVlWzBdKSxwYXJzZUZsb2F0KGUudmFsdWVbMV0pXTpuKGUudmFsdWUpJiYocj1wYXJzZUZsb2F0KGUudmFsdWUpLGUudmFsdWU9W3IscisxXSkpOih0KCJjb250b3Vycy52YWx1ZSIsMCksbihlLnZhbHVlKXx8KEFycmF5LmlzQXJyYXkoZS52YWx1ZSk/ZS52YWx1ZT1wYXJzZUZsb2F0KGUudmFsdWVbMF0pOmUudmFsdWU9MCkpfShyLGcpLCI9Ij09PXY/Zj1nLnNob3dsaW5lcz0hMDooZj1yKCJjb250b3Vycy5zaG93bGluZXMiKSxkPXIoImZpbGxjb2xvciIsbygodC5saW5lfHx7fSkuY29sb3J8fGwsLjUpKSksZikmJihwPXIoImxpbmUuY29sb3IiLGQmJnMoZCk/byhlLmZpbGxjb2xvciwxKTpsKSxyKCJsaW5lLndpZHRoIiwyKSxyKCJsaW5lLmRhc2giKSk7cigibGluZS5zbW9vdGhpbmciKSxhKHIsaSxwLGgpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIjo2ODksIi4vbGFiZWxfZGVmYXVsdHMiOjk1OCwiZmFzdC1pc251bWVyaWMiOjIyOH1dLDk0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLGE9dCgiZmFzdC1pc251bWVyaWMiKTtmdW5jdGlvbiBpKHQsZSl7dmFyIHIsaT1BcnJheS5pc0FycmF5KGUpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGEodCk/K3Q6bnVsbH1yZXR1cm4tMSE9PW4uQ09NUEFSSVNPTl9PUFMyLmluZGV4T2YodCk/cj1vKGk/ZVswXTplKTotMSE9PW4uSU5URVJWQUxfT1BTLmluZGV4T2YodCk/cj1pP1tvKGVbMF0pLG8oZVsxXSldOltvKGUpLG8oZSldOi0xIT09bi5TRVRfT1BTLmluZGV4T2YodCkmJihyPWk/ZS5tYXAobyk6W28oZSldKSxyfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2U9aSh0LGUpO3ZhciByPU1hdGgubWluKGVbMF0sZVsxXSksbj1NYXRoLm1heChlWzBdLGVbMV0pO3JldHVybntzdGFydDpyLGVuZDpuLHNpemU6bi1yfX19ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJue3N0YXJ0OmU9aSh0LGUpLGVuZDoxLzAsc2l6ZToxLzB9fX1lLmV4cG9ydHM9eyJbXSI6bygiW10iKSwiXVsiOm8oIl1bIiksIj4iOnMoIj4iKSwiPCI6cygiPCIpLCI9IjpzKCI9Iil9fSx7Ii4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIjo2ODksImZhc3QtaXNudW1lcmljIjoyMjh9XSw5NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPW4oImNvbnRvdXJzLnN0YXJ0IiksaT1uKCJjb250b3Vycy5lbmQiKSxvPSExPT09YXx8ITE9PT1pLHM9cigiY29udG91cnMuc2l6ZSIpOyEobz9lLmF1dG9jb250b3VyPSEwOnIoImF1dG9jb250b3VyIiwhMSkpJiZzfHxyKCJuY29udG91cnMiKX19LHt9XSw5NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbi5leHRlbmRGbGF0KHt9LHQse2VkZ2VwYXRoczpuLmV4dGVuZERlZXAoW10sdC5lZGdlcGF0aHMpLHBhdGhzOm4uZXh0ZW5kRGVlcChbXSx0LnBhdGhzKSxzdGFydHM6bi5leHRlbmREZWVwKFtdLHQuc3RhcnRzKX0pfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksbyxzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJldmVyc2UoKX0sbD1mdW5jdGlvbih0KXtyZXR1cm4gdH07c3dpdGNoKGUpe2Nhc2UiPSI6Y2FzZSI8IjpyZXR1cm4gdDtjYXNlIj4iOmZvcigxIT09dC5sZW5ndGgmJm4ud2FybigiQ29udG91ciBkYXRhIGludmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgaW5lcXVhbGl0eSBvcGVyYXRpb24uIiksaT10WzBdLHI9MDtyPGkuZWRnZXBhdGhzLmxlbmd0aDtyKyspaS5lZGdlcGF0aHNbcl09cyhpLmVkZ2VwYXRoc1tyXSk7Zm9yKHI9MDtyPGkucGF0aHMubGVuZ3RoO3IrKylpLnBhdGhzW3JdPXMoaS5wYXRoc1tyXSk7Zm9yKHI9MDtyPGkuc3RhcnRzLmxlbmd0aDtyKyspaS5zdGFydHNbcl09cyhpLnN0YXJ0c1tyXSk7cmV0dXJuIHQ7Y2FzZSJdWyI6dmFyIGM9cztzPWwsbD1jO2Nhc2UiW10iOmZvcigyIT09dC5sZW5ndGgmJm4ud2FybigiQ29udG91ciBkYXRhIGludmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgaW5lcXVhbGl0eSByYW5nZSBvcGVyYXRpb24uIiksaT1hKHRbMF0pLG89YSh0WzFdKSxyPTA7cjxpLmVkZ2VwYXRocy5sZW5ndGg7cisrKWkuZWRnZXBhdGhzW3JdPXMoaS5lZGdlcGF0aHNbcl0pO2ZvcihyPTA7cjxpLnBhdGhzLmxlbmd0aDtyKyspaS5wYXRoc1tyXT1zKGkucGF0aHNbcl0pO2ZvcihyPTA7cjxpLnN0YXJ0cy5sZW5ndGg7cisrKWkuc3RhcnRzW3JdPXMoaS5zdGFydHNbcl0pO2Zvcig7by5lZGdlcGF0aHMubGVuZ3RoOylpLmVkZ2VwYXRocy5wdXNoKGwoby5lZGdlcGF0aHMuc2hpZnQoKSkpO2Zvcig7by5wYXRocy5sZW5ndGg7KWkucGF0aHMucHVzaChsKG8ucGF0aHMuc2hpZnQoKSkpO2Zvcig7by5zdGFydHMubGVuZ3RoOylpLnN0YXJ0cy5wdXNoKGwoby5zdGFydHMuc2hpZnQoKSkpO3JldHVybltpXX19fSx7Ii4uLy4uL2xpYiI6NzE3fV0sOTUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiKSxpPXQoIi4vY29uc3RyYWludF9kZWZhdWx0cyIpLG89dCgiLi9jb250b3Vyc19kZWZhdWx0cyIpLHM9dCgiLi9zdHlsZV9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixhKX1pZihhKHQsZSx1LGMpKXt1KCJ0ZXh0IiksdSgiaG92ZXJ0ZXh0IiksdSgiaG92ZXJ0ZW1wbGF0ZSIpLHUoImhvdmVyb25nYXBzIik7dmFyIGg9ImNvbnN0cmFpbnQiPT09dSgiY29udG91cnMudHlwZSIpO3UoImNvbm5lY3RnYXBzIixuLmlzQXJyYXkxRChlLnopKSxoP2kodCxlLHUsYyxyKToobyh0LGUsdSxmdW5jdGlvbihyKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxsLHIpfSkscyh0LGUsdSxjKSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyI6MTAxNCwiLi9hdHRyaWJ1dGVzIjo5NDMsIi4vY29uc3RyYWludF9kZWZhdWx0cyI6OTQ4LCIuL2NvbnRvdXJzX2RlZmF1bHRzIjo5NTAsIi4vc3R5bGVfZGVmYXVsdHMiOjk2NH1dLDk1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4vY29uc3RyYWludF9tYXBwaW5nIiksaT10KCIuL2VuZF9wbHVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG89ImNvbnN0cmFpbnQiPT09dC50eXBlP2FbdC5fb3BlcmF0aW9uXSh0LnZhbHVlKTp0LHM9by5zaXplLGw9W10sYz1pKG8pLHU9ci50cmFjZS5fY2FycGV0VHJhY2UsaD11P3t4YXhpczp1LmFheGlzLHlheGlzOnUuYmF4aXMseDpyLmEseTpyLmJ9Ont4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMseDpyLngseTpyLnl9LGY9by5zdGFydDtmPGM7Zis9cylpZihsLnB1c2gobi5leHRlbmRGbGF0KHtsZXZlbDpmLGNyb3NzaW5nczp7fSxzdGFydHM6W10sZWRnZXBhdGhzOltdLHBhdGhzOltdLHo6ci56LHNtb290aGluZzpyLnRyYWNlLmxpbmUuc21vb3RoaW5nfSxoKSksbC5sZW5ndGg+MWUzKXtuLndhcm4oIlRvbyBtYW55IGNvbnRvdXJzLCBjbGlwcGluZyBhdCAxMDAwIix0KTticmVha31yZXR1cm4gbH19LHsiLi4vLi4vbGliIjo3MTcsIi4vY29uc3RyYWludF9tYXBwaW5nIjo5NDksIi4vZW5kX3BsdXMiOjk1NH1dLDk1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZW5kK3Quc2l6ZS8xZTZ9fSx7fV0sOTU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF0pPHImJk1hdGguYWJzKHRbMV0tZVsxXSk8bn1mdW5jdGlvbiBvKHQsZSxyLG8sbCl7dmFyIGMsdT1lLmpvaW4oIiwiKSxoPXQuY3Jvc3NpbmdzW3VdLGY9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTAsaT0wO3Q+MjAmJmU/MjA4PT09dHx8MTExND09PXQ/bj0wPT09clswXT8xOi0xOmk9MD09PXJbMV0/MTotMTotMSE9PWEuQk9UVE9NU1RBUlQuaW5kZXhPZih0KT9pPTE6LTEhPT1hLkxFRlRTVEFSVC5pbmRleE9mKHQpP249MTotMSE9PWEuVE9QU1RBUlQuaW5kZXhPZih0KT9pPS0xOm49LTE7cmV0dXJuW24saV19KGgscixlKSxwPVtzKHQsZSxbLWZbMF0sLWZbMV1dKV0sZD10LnoubGVuZ3RoLGc9dC56WzBdLmxlbmd0aCx2PWUuc2xpY2UoKSxtPWYuc2xpY2UoKTtmb3IoYz0wO2M8MWU0O2MrKyl7aWYoaD4yMD8oaD1hLkNIT09TRVNBRERMRVtoXVsoZlswXXx8ZlsxXSk8MD8wOjFdLHQuY3Jvc3NpbmdzW3VdPWEuU0FERExFUkVNQUlOREVSW2hdKTpkZWxldGUgdC5jcm9zc2luZ3NbdV0sIShmPWEuTkVXREVMVEFbaF0pKXtuLmxvZygiRm91bmQgYmFkIG1hcmNoaW5nIGluZGV4OiIsaCxlLHQubGV2ZWwpO2JyZWFrfXAucHVzaChzKHQsZSxmKSksZVswXSs9ZlswXSxlWzFdKz1mWzFdLHU9ZS5qb2luKCIsIiksaShwW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMl0sbyxsKSYmcC5wb3AoKTt2YXIgeT1mWzBdJiYoZVswXTwwfHxlWzBdPmctMil8fGZbMV0mJihlWzFdPDB8fGVbMV0+ZC0yKTtpZihlWzBdPT09dlswXSYmZVsxXT09PXZbMV0mJmZbMF09PT1tWzBdJiZmWzFdPT09bVsxXXx8ciYmeSlicmVhaztoPXQuY3Jvc3NpbmdzW3VdfTFlND09PWMmJm4ubG9nKCJJbmZpbml0ZSBsb29wIGluIGNvbnRvdXI/Iik7dmFyIHgsYixfLHcsayxULE0sQSxTLEUsTCxDLFAsTyx6LEk9aShwWzBdLHBbcC5sZW5ndGgtMV0sbyxsKSxEPTAsUj0uMip0LnNtb290aGluZyxGPVtdLEI9MDtmb3IoYz0xO2M8cC5sZW5ndGg7YysrKUM9cFtjXSxQPXBbYy0xXSxPPXZvaWQgMCx6PXZvaWQgMCxPPUNbMl0tUFsyXSx6PUNbM10tUFszXSxEKz1NPU1hdGguc3FydChPKk8reip6KSxGLnB1c2goTSk7dmFyIE49RC9GLmxlbmd0aCpSO2Z1bmN0aW9uIGoodCl7cmV0dXJuIHBbdCVwLmxlbmd0aF19Zm9yKGM9cC5sZW5ndGgtMjtjPj1CO2MtLSlpZigoeD1GW2NdKTxOKXtmb3IoXz0wLGI9Yy0xO2I+PUImJngrRltiXTxOO2ItLSl4Kz1GW2JdO2lmKEkmJmM9PT1wLmxlbmd0aC0yKWZvcihfPTA7XzxiJiZ4K0ZbX108TjtfKyspeCs9RltfXTtrPWMtYitfKzEsVD1NYXRoLmZsb29yKChjK2IrXysyKS8yKSx3PUl8fGMhPT1wLmxlbmd0aC0yP0l8fC0xIT09Yj9rJTI/aihUKTpbKGooVClbMF0raihUKzEpWzBdKS8yLChqKFQpWzFdK2ooVCsxKVsxXSkvMl06cFswXTpwW3AubGVuZ3RoLTFdLHAuc3BsaWNlKGIrMSxjLWIrMSx3KSxjPWIrMSxfJiYoQj1fKSxJJiYoYz09PXAubGVuZ3RoLTI/cFtfXT1wW3AubGVuZ3RoLTFdOjA9PT1jJiYocFtwLmxlbmd0aC0xXT1wWzBdKSl9Zm9yKHAuc3BsaWNlKDAsQiksYz0wO2M8cC5sZW5ndGg7YysrKXBbY10ubGVuZ3RoPTI7aWYoIShwLmxlbmd0aDwyKSlpZihJKXAucG9wKCksdC5wYXRocy5wdXNoKHApO2Vsc2V7cnx8bi5sb2coIlVuY2xvc2VkIGludGVyaW9yIGNvbnRvdXI/Iix0LmxldmVsLHYuam9pbigiLCIpLHAuam9pbigiTCIpKTt2YXIgVj0hMTtmb3IoQT0wO0E8dC5lZGdlcGF0aHMubGVuZ3RoO0ErKylpZihFPXQuZWRnZXBhdGhzW0FdLCFWJiZpKEVbMF0scFtwLmxlbmd0aC0xXSxvLGwpKXtwLnBvcCgpLFY9ITA7dmFyIFU9ITE7Zm9yKFM9MDtTPHQuZWRnZXBhdGhzLmxlbmd0aDtTKyspaWYoaSgoTD10LmVkZ2VwYXRoc1tTXSlbTC5sZW5ndGgtMV0scFswXSxvLGwpKXtVPSEwLHAuc2hpZnQoKSx0LmVkZ2VwYXRocy5zcGxpY2UoQSwxKSxTPT09QT90LnBhdGhzLnB1c2gocC5jb25jYXQoTCkpOihTPkEmJlMtLSx0LmVkZ2VwYXRoc1tTXT1MLmNvbmNhdChwLEUpKTticmVha31VfHwodC5lZGdlcGF0aHNbQV09cC5jb25jYXQoRSkpfWZvcihBPTA7QTx0LmVkZ2VwYXRocy5sZW5ndGgmJiFWO0ErKylpKChFPXQuZWRnZXBhdGhzW0FdKVtFLmxlbmd0aC0xXSxwWzBdLG8sbCkmJihwLnNoaWZ0KCksdC5lZGdlcGF0aHNbQV09RS5jb25jYXQocCksVj0hMCk7Vnx8dC5lZGdlcGF0aHMucHVzaChwKX19ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49ZVswXStNYXRoLm1heChyWzBdLDApLGE9ZVsxXStNYXRoLm1heChyWzFdLDApLGk9dC56W2FdW25dLG89dC54YXhpcyxzPXQueWF4aXM7aWYoclsxXSl7dmFyIGw9KHQubGV2ZWwtaSkvKHQuelthXVtuKzFdLWkpO3JldHVybltvLmMycCgoMS1sKSp0Lnhbbl0rbCp0LnhbbisxXSwhMCkscy5jMnAodC55W2FdLCEwKSxuK2wsYV19dmFyIGM9KHQubGV2ZWwtaSkvKHQuelthKzFdW25dLWkpO3JldHVybltvLmMycCh0Lnhbbl0sITApLHMuYzJwKCgxLWMpKnQueVthXStjKnQueVthKzFdLCEwKSxuLGErY119ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxpLHMsbDtmb3IoZT1lfHwuMDEscj1yfHwuMDEsaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3Iocz10W2ldLGw9MDtsPHMuc3RhcnRzLmxlbmd0aDtsKyspbyhzLHMuc3RhcnRzW2xdLCJlZGdlIixlLHIpO2ZvcihhPTA7T2JqZWN0LmtleXMocy5jcm9zc2luZ3MpLmxlbmd0aCYmYTwxZTQ7KWErKyxvKHMsT2JqZWN0LmtleXMocy5jcm9zc2luZ3MpWzBdLnNwbGl0KCIsIikubWFwKE51bWJlciksdm9pZCAwLGUscik7MWU0PT09YSYmbi5sb2coIkluZmluaXRlIGxvb3AgaW4gY29udG91cj8iKX19fSx7Ii4uLy4uL2xpYiI6NzE3LCIuL2NvbnN0YW50cyI6OTQ3fV0sOTU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uL2hlYXRtYXAvaG92ZXIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxvKXt2YXIgcz1hKHQsZSxyLGksbywhMCk7cmV0dXJuIHMmJnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnRyYWNlOyJjb25zdHJhaW50Ij09PWUuY29udG91cnMudHlwZSYmKGUuZmlsbGNvbG9yJiZuLm9wYWNpdHkoZS5maWxsY29sb3IpP3QuY29sb3I9bi5hZGRPcGFjaXR5KGUuZmlsbGNvbG9yLDEpOmUuY29udG91cnMuc2hvd2xpbmVzJiZuLm9wYWNpdHkoZS5saW5lLmNvbG9yKSYmKHQuY29sb3I9bi5hZGRPcGFjaXR5KGUubGluZS5jb2xvciwxKSkpfSksc319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi9oZWF0bWFwL2hvdmVyIjoxMDA3fV0sOTU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLGNvbG9yYmFyOnQoIi4vY29sb3JiYXIiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNvbnRvdXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsImNvbnRvdXIiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzYsIi4vYXR0cmlidXRlcyI6OTQzLCIuL2NhbGMiOjk0NCwiLi9jb2xvcmJhciI6OTQ2LCIuL2RlZmF1bHRzIjo5NTIsIi4vaG92ZXIiOjk1NiwiLi9wbG90Ijo5NjEsIi4vc3R5bGUiOjk2M31dLDk1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7aWYoYXx8KGE9e30pLHQoImNvbnRvdXJzLnNob3dsYWJlbHMiKSl7dmFyIGk9ZS5mb250O24uY29lcmNlRm9udCh0LCJjb250b3Vycy5sYWJlbGZvbnQiLHtmYW1pbHk6aS5mYW1pbHksc2l6ZTppLnNpemUsY29sb3I6cn0pLHQoImNvbnRvdXJzLmxhYmVsZm9ybWF0Iil9ITEhPT1hLmhhc0hvdmVyJiZ0KCJ6aG92ZXJmb3JtYXQiKX19LHsiLi4vLi4vbGliIjo3MTd9XSw5NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGk9dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmNvbnRvdXJzLHI9ZS5zdGFydCxvPWkoZSkscz1lLnNpemV8fDEsbD1NYXRoLmZsb29yKChvLXIpL3MpKzEsYz0ibGluZXMiPT09ZS5jb2xvcmluZz8wOjEsdT1hLmV4dHJhY3RPcHRzKHQpO2lzRmluaXRlKHMpfHwocz0xLGw9MSk7dmFyIGgsZixwPXUucmV2ZXJzZXNjYWxlP2EuZmxpcFNjYWxlKHUuY29sb3JzY2FsZSk6dS5jb2xvcnNjYWxlLGQ9cC5sZW5ndGgsZz1uZXcgQXJyYXkoZCksdj1uZXcgQXJyYXkoZCk7aWYoImhlYXRtYXAiPT09ZS5jb2xvcmluZyl7dmFyIG09dS5taW4seT11Lm1heDtmb3IoZj0wO2Y8ZDtmKyspaD1wW2ZdLGdbZl09aFswXSooeS1tKSttLHZbZl09aFsxXTt2YXIgeD1uLmV4dGVudChbbSx5LGUuc3RhcnQsZS5zdGFydCtzKihsLTEpXSksYj14W208eT8wOjFdLF89eFttPHk/MTowXTtiIT09bSYmKGcuc3BsaWNlKDAsMCxiKSx2LnNwbGljZSgwLDAsdlswXSkpLF8hPT15JiYoZy5wdXNoKF8pLHYucHVzaCh2W3YubGVuZ3RoLTFdKSl9ZWxzZSBmb3IoZj0wO2Y8ZDtmKyspaD1wW2ZdLGdbZl09KGhbMF0qKGwrYy0xKS1jLzIpKnMrcix2W2ZdPWhbMV07cmV0dXJuIGEubWFrZUNvbG9yU2NhbGVGdW5jKHtkb21haW46ZyxyYW5nZTp2fSx7bm9OdW1lcmljQ2hlY2s6ITB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MDQsIi4vZW5kX3BsdXMiOjk1NCxkMzoxNjV9XSw5NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9KGVbMF1bMF0+dD8wOjEpKyhlWzBdWzFdPnQ/MDoyKSsoZVsxXVsxXT50PzA6NCkrKGVbMV1bMF0+dD8wOjgpO3JldHVybiA1PT09cnx8MTA9PT1yP3Q+KGVbMF1bMF0rZVswXVsxXStlWzFdWzBdK2VbMV1bMV0pLzQ/NT09PXI/NzEzOjExMTQ6NT09PXI/MTA0OjIwODoxNT09PXI/MDpyfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGksbyxzLGwsYyx1LGgsZj10WzBdLnoscD1mLmxlbmd0aCxkPWZbMF0ubGVuZ3RoLGc9Mj09PXB8fDI9PT1kO2ZvcihyPTA7cjxwLTE7cisrKWZvcihvPVtdLDA9PT1yJiYobz1vLmNvbmNhdChuLkJPVFRPTVNUQVJUKSkscj09PXAtMiYmKG89by5jb25jYXQobi5UT1BTVEFSVCkpLGU9MDtlPGQtMTtlKyspZm9yKGk9by5zbGljZSgpLDA9PT1lJiYoaT1pLmNvbmNhdChuLkxFRlRTVEFSVCkpLGU9PT1kLTImJihpPWkuY29uY2F0KG4uUklHSFRTVEFSVCkpLHM9ZSsiLCIrcixsPVtbZltyXVtlXSxmW3JdW2UrMV1dLFtmW3IrMV1bZV0sZltyKzFdW2UrMV1dXSxoPTA7aDx0Lmxlbmd0aDtoKyspKGM9YSgodT10W2hdKS5sZXZlbCxsKSkmJih1LmNyb3NzaW5nc1tzXT1jLC0xIT09aS5pbmRleE9mKGMpJiYodS5zdGFydHMucHVzaChbZSxyXSksZyYmLTEhPT1pLmluZGV4T2YoYyxpLmluZGV4T2YoYykrMSkmJnUuc3RhcnRzLnB1c2goW2Uscl0pKSl9fSx7Ii4vY29uc3RhbnRzIjo5NDd9XSw5NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxzPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLHU9dCgiLi4vaGVhdG1hcC9wbG90IiksaD10KCIuL21ha2VfY3Jvc3NpbmdzIiksZj10KCIuL2ZpbmRfYWxsX3BhdGhzIikscD10KCIuL2VtcHR5X3BhdGhpbmZvIiksZD10KCIuL2NvbnZlcnRfdG9fY29uc3RyYWludHMiKSxnPXQoIi4vY2xvc2VfYm91bmRhcmllcyIpLHY9dCgiLi9jb25zdGFudHMiKSxtPXYuTEFCRUxPUFRJTUlaRVI7ZnVuY3Rpb24geSh0LGUpe3ZhciByLG4sbyxzLGwsYyx1LGg9IiIsZj0wLHA9dC5lZGdlcGF0aHMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSxkPSEwO2Z1bmN0aW9uIGcodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tZVsyXVsxXSk8LjAxfWZ1bmN0aW9uIHYodCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXVswXSk8LjAxfWZ1bmN0aW9uIG0odCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVsyXVswXSk8LjAxfWZvcig7cC5sZW5ndGg7KXtmb3IoYz1pLnNtb290aG9wZW4odC5lZGdlcGF0aHNbZl0sdC5zbW9vdGhpbmcpLGgrPWQ/YzpjLnJlcGxhY2UoL15NLywiTCIpLHAuc3BsaWNlKHAuaW5kZXhPZihmKSwxKSxyPXQuZWRnZXBhdGhzW2ZdW3QuZWRnZXBhdGhzW2ZdLmxlbmd0aC0xXSxzPS0xLG89MDtvPDQ7bysrKXtpZighcil7YS5sb2coIk1pc3NpbmcgZW5kPyIsZix0KTticmVha31mb3IodT1yLE1hdGguYWJzKHVbMV0tZVswXVsxXSk8LjAxJiYhbShyKT9uPWVbMV06dihyKT9uPWVbMF06ZyhyKT9uPWVbM106bShyKSYmKG49ZVsyXSksbD0wO2w8dC5lZGdlcGF0aHMubGVuZ3RoO2wrKyl7dmFyIHk9dC5lZGdlcGF0aHNbbF1bMF07TWF0aC5hYnMoclswXS1uWzBdKTwuMDE/TWF0aC5hYnMoclswXS15WzBdKTwuMDEmJih5WzFdLXJbMV0pKihuWzFdLXlbMV0pPj0wJiYobj15LHM9bCk6TWF0aC5hYnMoclsxXS1uWzFdKTwuMDE/TWF0aC5hYnMoclsxXS15WzFdKTwuMDEmJih5WzBdLXJbMF0pKihuWzBdLXlbMF0pPj0wJiYobj15LHM9bCk6YS5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIscixuLHkpfWlmKHI9bixzPj0wKWJyZWFrO2grPSJMIitufWlmKHM9PT10LmVkZ2VwYXRocy5sZW5ndGgpe2EubG9nKCJ1bmNsb3NlZCBwZXJpbWV0ZXIgcGF0aCIpO2JyZWFrfWY9cywoZD0tMT09PXAuaW5kZXhPZihmKSkmJihmPXBbMF0saCs9IloiKX1mb3IoZj0wO2Y8dC5wYXRocy5sZW5ndGg7ZisrKWgrPWkuc21vb3RoY2xvc2VkKHQucGF0aHNbZl0sdC5zbW9vdGhpbmcpO3JldHVybiBofWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9ZS53aWR0aC8yLG89ZS5oZWlnaHQvMixzPXQueCxsPXQueSxjPXQudGhldGEsdT1NYXRoLmNvcyhjKSppLGg9TWF0aC5zaW4oYykqaSxmPShzPm4uY2VudGVyP24ucmlnaHQtczpzLW4ubGVmdCkvKHUrTWF0aC5hYnMoTWF0aC5zaW4oYykqbykpLHA9KGw+bi5taWRkbGU/bi5ib3R0b20tbDpsLW4udG9wKS8oTWF0aC5hYnMoaCkrTWF0aC5jb3MoYykqbyk7aWYoZjwxfHxwPDEpcmV0dXJuIDEvMDt2YXIgZD1tLkVER0VDT1NUKigxLyhmLTEpKzEvKHAtMSkpO2QrPW0uQU5HTEVDT1NUKmMqYztmb3IodmFyIGc9cy11LHY9bC1oLHk9cyt1LHg9bCtoLGI9MDtiPHIubGVuZ3RoO2IrKyl7dmFyIF89cltiXSx3PU1hdGguY29zKF8udGhldGEpKl8ud2lkdGgvMixrPU1hdGguc2luKF8udGhldGEpKl8ud2lkdGgvMixUPTIqYS5zZWdtZW50RGlzdGFuY2UoZyx2LHkseCxfLngtdyxfLnktayxfLngrdyxfLnkraykvKGUuaGVpZ2h0K18uaGVpZ2h0KSxNPV8ubGV2ZWw9PT1lLmxldmVsLEE9TT9tLlNBTUVMRVZFTERJU1RBTkNFOjE7aWYoVDw9QSlyZXR1cm4gMS8wO2QrPW0uTkVJR0hCT1JDT1NUKihNP20uU0FNRUxFVkVMRkFDVE9SOjEpLyhULUEpfXJldHVybiBkfWZ1bmN0aW9uIGIodCl7dmFyIGUscixuPXQudHJhY2UuX2VtcHR5cG9pbnRzLGE9W10saT10LnoubGVuZ3RoLG89dC56WzBdLmxlbmd0aCxzPVtdO2ZvcihlPTA7ZTxvO2UrKylzLnB1c2goMSk7Zm9yKGU9MDtlPGk7ZSsrKWEucHVzaChzLnNsaWNlKCkpO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspYVsocj1uW2VdKVswXV1bclsxXV09MDtyZXR1cm4gdC56bWFzaz1hLGF9ci5wbG90PWZ1bmN0aW9uKHQsZSxvLHMpe3ZhciBsPWUueGF4aXMsYz1lLnlheGlzO2EubWFrZVRyYWNlR3JvdXBzKHMsbywiY29udG91ciIpLmVhY2goZnVuY3Rpb24obyl7dmFyIHM9bi5zZWxlY3QodGhpcyksbT1vWzBdLHg9bS50cmFjZSxfPW0ueCx3PW0ueSxrPXguY29udG91cnMsVD1wKGssZSxtKSxNPWEuZW5zdXJlU2luZ2xlKHMsImciLCJoZWF0bWFwY29sb3JpbmciKSxBPVtdOyJoZWF0bWFwIj09PWsuY29sb3JpbmcmJihBPVtvXSksdSh0LGUsQSxNKSxoKFQpLGYoVCk7dmFyIFM9bC5jMnAoX1swXSwhMCksRT1sLmMycChfW18ubGVuZ3RoLTFdLCEwKSxMPWMuYzJwKHdbMF0sITApLEM9Yy5jMnAod1t3Lmxlbmd0aC0xXSwhMCksUD1bW1MsQ10sW0UsQ10sW0UsTF0sW1MsTF1dLE89VDsiY29uc3RyYWludCI9PT1rLnR5cGUmJihPPWQoVCxrLl9vcGVyYXRpb24pKSxmdW5jdGlvbih0LGUscil7dmFyIG49YS5lbnN1cmVTaW5nbGUodCwiZyIsImNvbnRvdXJiZyIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoImZpbGwiPT09ci5jb2xvcmluZz9bMF06W10pO24uZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxuLmV4aXQoKS5yZW1vdmUoKSxuLmF0dHIoImQiLCJNIitlLmpvaW4oIkwiKSsiWiIpLnN0eWxlKCJzdHJva2UiLCJub25lIil9KHMsUCxrKSxmdW5jdGlvbih0LGUscixpKXt2YXIgbz0iZmlsbCI9PT1pLmNvbG9yaW5nfHwiY29uc3RyYWludCI9PT1pLnR5cGUmJiI9IiE9PWkuX29wZXJhdGlvbixzPSJNIityLmpvaW4oIkwiKSsiWiI7byYmZyhlLGkpO3ZhciBsPWEuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VyZmlsbCIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEobz9lOltdKTtsLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksbC5leGl0KCkucmVtb3ZlKCksbC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPSh0LnByZWZpeEJvdW5kYXJ5P3M6IiIpK3kodCxyKTtlP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLGUpLnN0eWxlKCJzdHJva2UiLCJub25lIik6bi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KX0ocyxPLFAsayksZnVuY3Rpb24odCxlLG8scyxsKXt2YXIgYz1hLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmxpbmVzIiksdT0hMSE9PWwuc2hvd2xpbmVzLGg9bC5zaG93bGFiZWxzLGY9dSYmaCxwPXIuY3JlYXRlTGluZXMoYyx1fHxoLGUpLGQ9ci5jcmVhdGVMaW5lQ2xpcChjLGYsbyxzLnRyYWNlLnVpZCksZz10LnNlbGVjdEFsbCgiZy5jb250b3VybGFiZWxzIikuZGF0YShoP1swXTpbXSk7aWYoZy5leGl0KCkucmVtb3ZlKCksZy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXJsYWJlbHMiLCEwKSxoKXt2YXIgbT1bXSx5PVtdO2EuY2xlYXJMb2NhdGlvbkNhY2hlKCk7dmFyIHg9ci5sYWJlbEZvcm1hdHRlcihvLHMpLGI9aS50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChpLmZvbnQsbC5sYWJlbGZvbnQpLF89ZVswXS54YXhpcyx3PWVbMF0ueWF4aXMsaz1fLl9sZW5ndGgsVD13Ll9sZW5ndGgsTT1fLnJhbmdlLEE9dy5yYW5nZSxTPWEuYWdnTnVtcyhNYXRoLm1pbixudWxsLHMueCksRT1hLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxzLngpLEw9YS5hZ2dOdW1zKE1hdGgubWluLG51bGwscy55KSxDPWEuYWdnTnVtcyhNYXRoLm1heCxudWxsLHMueSksUD1NYXRoLm1heChfLmMycChTLCEwKSwwKSxPPU1hdGgubWluKF8uYzJwKEUsITApLGspLHo9TWF0aC5tYXgody5jMnAoQywhMCksMCksST1NYXRoLm1pbih3LmMycChMLCEwKSxUKSxEPXt9O01bMF08TVsxXT8oRC5sZWZ0PVAsRC5yaWdodD1PKTooRC5sZWZ0PU8sRC5yaWdodD1QKSxBWzBdPEFbMV0/KEQudG9wPXosRC5ib3R0b209SSk6KEQudG9wPUksRC5ib3R0b209eiksRC5taWRkbGU9KEQudG9wK0QuYm90dG9tKS8yLEQuY2VudGVyPShELmxlZnQrRC5yaWdodCkvMixtLnB1c2goW1tELmxlZnQsRC50b3BdLFtELnJpZ2h0LEQudG9wXSxbRC5yaWdodCxELmJvdHRvbV0sW0QubGVmdCxELmJvdHRvbV1dKTt2YXIgUj1NYXRoLnNxcnQoayprK1QqVCksRj12LkxBQkVMRElTVEFOQ0UqUi9NYXRoLm1heCgxLGUubGVuZ3RoL3YuTEFCRUxJTkNSRUFTRSk7cC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXIuY2FsY1RleHRPcHRzKHQubGV2ZWwseCxiLG8pO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1hLmdldFZpc2libGVTZWdtZW50KHRoaXMsRCxlLmhlaWdodC8yKTtpZih0JiYhKHQubGVuPChlLndpZHRoK2UuaGVpZ2h0KSp2LkxBQkVMTUlOKSlmb3IodmFyIG49TWF0aC5taW4oTWF0aC5jZWlsKHQubGVuL0YpLHYuTEFCRUxNQVgpLGk9MDtpPG47aSsrKXt2YXIgbz1yLmZpbmRCZXN0VGV4dExvY2F0aW9uKHRoaXMsdCxlLHksRCk7aWYoIW8pYnJlYWs7ci5hZGRMYWJlbERhdGEobyxlLHksbSl9fSl9KSxiLnJlbW92ZSgpLHIuZHJhd0xhYmVscyhnLHksbyxkLGY/bTpudWxsKX1oJiYhdSYmcC5yZW1vdmUoKX0ocyxULHQsbSxrKSxmdW5jdGlvbih0LGUscixuLG8pe3ZhciBzPW4udHJhY2UsbD1yLl9mdWxsTGF5b3V0Ll9jbGlwcyxjPSJjbGlwIitzLnVpZCx1PWwuc2VsZWN0QWxsKCIjIitjKS5kYXRhKHMuY29ubmVjdGdhcHM/W106WzBdKTtpZih1LmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImNvbnRvdXJjbGlwIiwhMCkuYXR0cigiaWQiLGMpLHUuZXhpdCgpLnJlbW92ZSgpLCExPT09cy5jb25uZWN0Z2Fwcyl7dmFyIHA9e2xldmVsOi45LGNyb3NzaW5nczp7fSxzdGFydHM6W10sZWRnZXBhdGhzOltdLHBhdGhzOltdLHhheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyx4Om4ueCx5Om4ueSx6OmIobiksc21vb3RoaW5nOjB9O2goW3BdKSxmKFtwXSksZyhbcF0se3R5cGU6ImxldmVscyJ9KTt2YXIgZD1hLmVuc3VyZVNpbmdsZSh1LCJwYXRoIiwiIik7ZC5hdHRyKCJkIiwocC5wcmVmaXhCb3VuZGFyeT8iTSIrby5qb2luKCJMIikrIloiOiIiKSt5KHAsbykpfWVsc2UgYz1udWxsO2kuc2V0Q2xpcFVybCh0LGMscil9KHMsZSx0LG0sUCl9KX0sci5jcmVhdGVMaW5lcz1mdW5jdGlvbih0LGUscil7dmFyIG49clswXS5zbW9vdGhpbmcsYT10LnNlbGVjdEFsbCgiZy5jb250b3VybGV2ZWwiKS5kYXRhKGU/cjpbXSk7aWYoYS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXJsZXZlbCIsITApLGUpe3ZhciBvPWEuc2VsZWN0QWxsKCJwYXRoLm9wZW5saW5lIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5wZWRnZXBhdGhzfHx0LmVkZ2VwYXRoc30pO28uZXhpdCgpLnJlbW92ZSgpLG8uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJvcGVubGluZSIsITApLG8uYXR0cigiZCIsZnVuY3Rpb24odCl7cmV0dXJuIGkuc21vb3Rob3Blbih0LG4pfSkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpO3ZhciBzPWEuc2VsZWN0QWxsKCJwYXRoLmNsb3NlZGxpbmUiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBwYXRoc3x8dC5wYXRoc30pO3MuZXhpdCgpLnJlbW92ZSgpLHMuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJjbG9zZWRsaW5lIiwhMCkscy5hdHRyKCJkIixmdW5jdGlvbih0KXtyZXR1cm4gaS5zbW9vdGhjbG9zZWQodCxuKX0pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKX1yZXR1cm4gYX0sci5jcmVhdGVMaW5lQ2xpcD1mdW5jdGlvbih0LGUscixuKXt2YXIgYT1lPyJjbGlwbGluZSIrbjpudWxsLG89ci5fZnVsbExheW91dC5fY2xpcHMuc2VsZWN0QWxsKCIjIithKS5kYXRhKGU/WzBdOltdKTtyZXR1cm4gby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJjb250b3VybGluZWNsaXAiLCEwKS5hdHRyKCJpZCIsYSksaS5zZXRDbGlwVXJsKHQsYSxyKSxvfSxyLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxuPWUudHJhY2UsYT1uLmNvbnRvdXJzO2lmKGEubGFiZWxmb3JtYXQpcmV0dXJuIHIuX2QzbG9jYWxlLm51bWJlckZvcm1hdChhLmxhYmVsZm9ybWF0KTt2YXIgaSxzPW8uZXh0cmFjdE9wdHMobik7aWYocyYmcy5jb2xvcmJhciYmcy5jb2xvcmJhci5fYXhpcylpPXMuY29sb3JiYXIuX2F4aXM7ZWxzZXtpZihpPXt0eXBlOiJsaW5lYXIiLF9pZDoieWNvbnRvdXIiLHNob3dleHBvbmVudDoiYWxsIixleHBvbmVudGZvcm1hdDoiQiJ9LCJjb25zdHJhaW50Ij09PWEudHlwZSl7dmFyIHU9YS52YWx1ZTtBcnJheS5pc0FycmF5KHUpP2kucmFuZ2U9W3VbMF0sdVt1Lmxlbmd0aC0xXV06aS5yYW5nZT1bdSx1XX1lbHNlIGkucmFuZ2U9W2Euc3RhcnQsYS5lbmRdLGkubnRpY2tzPShhLmVuZC1hLnN0YXJ0KS9hLnNpemU7aS5yYW5nZVswXT09PWkucmFuZ2VbMV0mJihpLnJhbmdlWzFdKz1pLnJhbmdlWzBdfHwxKSxpLm50aWNrc3x8KGkubnRpY2tzPTFlMyksYyhpLHIpLGwucHJlcFRpY2tzKGkpLGkuX3RtaW49bnVsbCxpLl90bWF4PW51bGx9cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBsLnRpY2tUZXh0KGksdCkudGV4dH19LHIuY2FsY1RleHRPcHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPWUodCk7ci50ZXh0KGEpLmNhbGwocy5jb252ZXJ0VG9Uc3BhbnMsbik7dmFyIG89aS5iQm94KHIubm9kZSgpLCEwKTtyZXR1cm57dGV4dDphLHdpZHRoOm8ud2lkdGgsaGVpZ2h0Om8uaGVpZ2h0LGxldmVsOnQsZHk6KG8udG9wK28uYm90dG9tKS8yfX0sci5maW5kQmVzdFRleHRMb2NhdGlvbj1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBvLHMsbCxjLHUsaD1yLndpZHRoO2UuaXNDbG9zZWQ/KHM9ZS5sZW4vbS5JTklUSUFMU0VBUkNIUE9JTlRTLG89ZS5taW4rcy8yLGw9ZS5tYXgpOihzPShlLmxlbi1oKS8obS5JTklUSUFMU0VBUkNIUE9JTlRTKzEpLG89ZS5taW4rcytoLzIsbD1lLm1heC0ocytoKS8yKTtmb3IodmFyIGY9MS8wLHA9MDtwPG0uSVRFUkFUSU9OUztwKyspe2Zvcih2YXIgZD1vO2Q8bDtkKz1zKXt2YXIgZz1hLmdldFRleHRMb2NhdGlvbih0LGUudG90YWwsZCxoKSx2PXgoZyxyLG4saSk7djxmJiYoZj12LHU9ZyxjPWQpfWlmKGY+MiptLk1BWENPU1QpYnJlYWs7cCYmKHMvPTIpLGw9KG89Yy1zLzIpKzEuNSpzfWlmKGY8PW0uTUFYQ09TVClyZXR1cm4gdX0sci5hZGRMYWJlbERhdGE9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9ZS53aWR0aC8yLGk9ZS5oZWlnaHQvMixvPXQueCxzPXQueSxsPXQudGhldGEsYz1NYXRoLnNpbihsKSx1PU1hdGguY29zKGwpLGg9YSp1LGY9aSpjLHA9YSpjLGQ9LWkqdSxnPVtbby1oLWYscy1wLWRdLFtvK2gtZixzK3AtZF0sW28raCtmLHMrcCtkXSxbby1oK2Yscy1wK2RdXTtyLnB1c2goe3RleHQ6ZS50ZXh0LHg6byx5OnMsZHk6ZS5keSx0aGV0YTpsLGxldmVsOmUubGV2ZWwsd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9KSxuLnB1c2goZyl9LHIuZHJhd0xhYmVscz1mdW5jdGlvbih0LGUscixpLG8pe3ZhciBsPXQuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShlLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHQrIiwiK3QueCsiLCIrdC55KyIsIit0LnRoZXRhfSk7aWYobC5leGl0KCkucmVtb3ZlKCksbC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoeyJkYXRhLW5vdGV4IjoxLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9KS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQueCtNYXRoLnNpbih0LnRoZXRhKSp0LmR5LGE9dC55LU1hdGguY29zKHQudGhldGEpKnQuZHk7bi5zZWxlY3QodGhpcykudGV4dCh0LnRleHQpLmF0dHIoe3g6ZSx5OmEsdHJhbnNmb3JtOiJyb3RhdGUoIisxODAqdC50aGV0YS9NYXRoLlBJKyIgIitlKyIgIithKyIpIn0pLmNhbGwocy5jb252ZXJ0VG9Uc3BhbnMscil9KSxvKXtmb3IodmFyIGM9IiIsdT0wO3U8by5sZW5ndGg7dSsrKWMrPSJNIitvW3VdLmpvaW4oIkwiKSsiWiI7YS5lbnN1cmVTaW5nbGUoaSwicGF0aCIsIiIpLmF0dHIoImQiLGMpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MDQsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NDEsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCI6NzgzLCIuLi9oZWF0bWFwL3Bsb3QiOjEwMTEsIi4vY2xvc2VfYm91bmRhcmllcyI6OTQ1LCIuL2NvbnN0YW50cyI6OTQ3LCIuL2NvbnZlcnRfdG9fY29uc3RyYWludHMiOjk1MSwiLi9lbXB0eV9wYXRoaW5mbyI6OTUzLCIuL2ZpbmRfYWxsX3BhdGhzIjo5NTUsIi4vbWFrZV9jcm9zc2luZ3MiOjk2MCxkMzoxNjV9XSw5NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIGkodCxlLHIpe3ZhciBhPXt0eXBlOiJsaW5lYXIiLHJhbmdlOlt0LGVdfTtyZXR1cm4gbi5hdXRvVGlja3MoYSwoZS10KS8ocnx8MTUpKSxhfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuY29udG91cnM7aWYodC5hdXRvY29udG91cil7dmFyIG89dC56bWluLHM9dC56bWF4Oyh0LnphdXRvfHx2b2lkIDA9PT1vKSYmKG89YS5hZ2dOdW1zKE1hdGgubWluLG51bGwsZSkpLCh0LnphdXRvfHx2b2lkIDA9PT1zKSYmKHM9YS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsZSkpO3ZhciBsPWkobyxzLHQubmNvbnRvdXJzKTtyLnNpemU9bC5kdGljayxyLnN0YXJ0PW4udGlja0ZpcnN0KGwpLGwucmFuZ2UucmV2ZXJzZSgpLHIuZW5kPW4udGlja0ZpcnN0KGwpLHIuc3RhcnQ9PT1vJiYoci5zdGFydCs9ci5zaXplKSxyLmVuZD09PXMmJihyLmVuZC09ci5zaXplKSxyLnN0YXJ0PnIuZW5kJiYoci5zdGFydD1yLmVuZD0oci5zdGFydCtyLmVuZCkvMiksdC5faW5wdXQuY29udG91cnN8fCh0Ll9pbnB1dC5jb250b3Vycz17fSksYS5leHRlbmRGbGF0KHQuX2lucHV0LmNvbnRvdXJzLHtzdGFydDpyLnN0YXJ0LGVuZDpyLmVuZCxzaXplOnIuc2l6ZX0pLHQuX2lucHV0LmF1dG9jb250b3VyPSEwfWVsc2UgaWYoImNvbnN0cmFpbnQiIT09ci50eXBlKXt2YXIgYyx1PXIuc3RhcnQsaD1yLmVuZCxmPXQuX2lucHV0LmNvbnRvdXJzO2lmKHU+aCYmKHIuc3RhcnQ9Zi5zdGFydD1oLGg9ci5lbmQ9Zi5lbmQ9dSx1PXIuc3RhcnQpLCEoci5zaXplPjApKWM9dT09PWg/MTppKHUsaCx0Lm5jb250b3VycykuZHRpY2ssZi5zaXplPXIuc2l6ZT1jfX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjV9XSw5NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGk9dCgiLi4vaGVhdG1hcC9zdHlsZSIpLG89dCgiLi9tYWtlX2NvbG9yX21hcCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcuY29udG91ciIpO2Uuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxlLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10WzBdLnRyYWNlLGk9ci5jb250b3VycyxzPXIubGluZSxsPWkuc2l6ZXx8MSxjPWkuc3RhcnQsdT0iY29uc3RyYWludCI9PT1pLnR5cGUsaD0hdSYmImxpbmVzIj09PWkuY29sb3JpbmcsZj0hdSYmImZpbGwiPT09aS5jb2xvcmluZyxwPWh8fGY/byhyKTpudWxsO2Uuc2VsZWN0QWxsKCJnLmNvbnRvdXJsZXZlbCIpLmVhY2goZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuY2FsbChhLmxpbmVHcm91cFN0eWxlLHMud2lkdGgsaD9wKHQubGV2ZWwpOnMuY29sb3Iscy5kYXNoKX0pO3ZhciBkPWkubGFiZWxmb250O2lmKGUuc2VsZWN0QWxsKCJnLmNvbnRvdXJsYWJlbHMgdGV4dCIpLmVhY2goZnVuY3Rpb24odCl7YS5mb250KG4uc2VsZWN0KHRoaXMpLHtmYW1pbHk6ZC5mYW1pbHksc2l6ZTpkLnNpemUsY29sb3I6ZC5jb2xvcnx8KGg/cCh0LmxldmVsKTpzLmNvbG9yKX0pfSksdSllLnNlbGVjdEFsbCgiZy5jb250b3VyZmlsbCBwYXRoIikuc3R5bGUoImZpbGwiLHIuZmlsbGNvbG9yKTtlbHNlIGlmKGYpe3ZhciBnO2Uuc2VsZWN0QWxsKCJnLmNvbnRvdXJmaWxsIHBhdGgiKS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PWcmJihnPXQubGV2ZWwpLHAodC5sZXZlbCsuNSpsKX0pLHZvaWQgMD09PWcmJihnPWMpLGUuc2VsZWN0QWxsKCJnLmNvbnRvdXJiZyBwYXRoIikuc3R5bGUoImZpbGwiLHAoZy0uNSpsKSl9fSksaSh0KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uL2hlYXRtYXAvc3R5bGUiOjEwMTIsIi4vbWFrZV9jb2xvcl9tYXAiOjk1OSxkMzoxNjV9XSw5NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksYT10KCIuL2xhYmVsX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksbyl7dmFyIHMsbD1yKCJjb250b3Vycy5jb2xvcmluZyIpLGM9IiI7ImZpbGwiPT09bCYmKHM9cigiY29udG91cnMuc2hvd2xpbmVzIikpLCExIT09cyYmKCJsaW5lcyIhPT1sJiYoYz1yKCJsaW5lLmNvbG9yIiwiIzAwMCIpKSxyKCJsaW5lLndpZHRoIiwuNSkscigibGluZS5kYXNoIikpLCJub25lIiE9PWwmJighMCE9PXQuc2hvd2xlZ2VuZCYmKGUuc2hvd2xlZ2VuZD0hMSksZS5fZGZsdFNob3dMZWdlbmQ9ITEsbih0LGUsaSxyLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSkscigibGluZS5zbW9vdGhpbmciKSxhKHIsaSxjLG8pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYwMiwiLi9sYWJlbF9kZWZhdWx0cyI6OTU4fV0sOTY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGE9dCgiLi4vY29udG91ci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscz1hLmNvbnRvdXJzO2UuZXhwb3J0cz1vKHtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx6Om4ueixhOm4ueCxhMDpuLngwLGRhOm4uZHgsYjpuLnksYjA6bi55MCxkYjpuLmR5LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCx0cmFuc3Bvc2U6bi50cmFuc3Bvc2UsYXR5cGU6bi54dHlwZSxidHlwZTpuLnl0eXBlLGZpbGxjb2xvcjphLmZpbGxjb2xvcixhdXRvY29udG91cjphLmF1dG9jb250b3VyLG5jb250b3VyczphLm5jb250b3Vycyxjb250b3Vyczp7dHlwZTpzLnR5cGUsc3RhcnQ6cy5zdGFydCxlbmQ6cy5lbmQsc2l6ZTpzLnNpemUsY29sb3Jpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZpbGwiLCJsaW5lcyIsIm5vbmUiXSxkZmx0OiJmaWxsIixlZGl0VHlwZToiY2FsYyJ9LHNob3dsaW5lczpzLnNob3dsaW5lcyxzaG93bGFiZWxzOnMuc2hvd2xhYmVscyxsYWJlbGZvbnQ6cy5sYWJlbGZvbnQsbGFiZWxmb3JtYXQ6cy5sYWJlbGZvcm1hdCxvcGVyYXRpb246cy5vcGVyYXRpb24sdmFsdWU6cy52YWx1ZSxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnthdXRvY29udG91cjohMX19LGxpbmU6e2NvbG9yOmEubGluZS5jb2xvcix3aWR0aDphLmxpbmUud2lkdGgsZGFzaDphLmxpbmUuZGFzaCxzbW9vdGhpbmc6YS5saW5lLnNtb290aGluZyxlZGl0VHlwZToicGxvdCJ9LHRyYW5zZm9ybXM6dm9pZCAwfSxpKCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1OTksIi4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vY29udG91ci9hdHRyaWJ1dGVzIjo5NDMsIi4uL2hlYXRtYXAvYXR0cmlidXRlcyI6MWUzfV0sOTY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6Iiksbz10KCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5Iikscz10KCIuLi9oZWF0bWFwL2ludGVycDJkIiksbD10KCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyIpLGM9dCgiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5IiksdT10KCIuL2RlZmF1bHRzIiksaD10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIiksZj10KCIuLi9jb250b3VyL3NldF9jb250b3VycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2NhcnBldFRyYWNlPWgodCxlKTtpZihyJiZyLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PXIudmlzaWJsZSl7aWYoIWUuYXx8IWUuYil7dmFyIHA9dC5kYXRhW3IuaW5kZXhdLGQ9dC5kYXRhW2UuaW5kZXhdO2QuYXx8KGQuYT1wLmEpLGQuYnx8KGQuYj1wLmIpLHUoZCxlLGUuX2RlZmF1bHRDb2xvcix0Ll9mdWxsTGF5b3V0KX12YXIgZz1mdW5jdGlvbih0LGUpe3ZhciByLHUsaCxmLHAsZCxnLHY9ZS5fY2FycGV0VHJhY2UsbT12LmFheGlzLHk9di5iYXhpczttLl9taW5EdGljaz0wLHkuX21pbkR0aWNrPTAsYS5pc0FycmF5MUQoZS56KSYmaShlLG0seSwiYSIsImIiLFsieiJdKTtyPWUuX2E9ZS5fYXx8ZS5hLGY9ZS5fYj1lLl9ifHxlLmIscj1yP20ubWFrZUNhbGNkYXRhKGUsIl9hIik6W10sZj1mP3kubWFrZUNhbGNkYXRhKGUsIl9iIik6W10sdT1lLmEwfHwwLGg9ZS5kYXx8MSxwPWUuYjB8fDAsZD1lLmRifHwxLGc9ZS5fej1vKGUuX3p8fGUueixlLnRyYW5zcG9zZSksZS5fZW1wdHlwb2ludHM9bChnKSxzKGcsZS5fZW1wdHlwb2ludHMpO3ZhciB4PWEubWF4Um93TGVuZ3RoKGcpLGI9InNjYWxlZCI9PT1lLnh0eXBlPyIiOnIsXz1jKGUsYix1LGgseCxtKSx3PSJzY2FsZWQiPT09ZS55dHlwZT8iIjpmLGs9YyhlLHcscCxkLGcubGVuZ3RoLHkpLFQ9e2E6XyxiOmssejpnfTsibGV2ZWxzIj09PWUuY29udG91cnMudHlwZSYmIm5vbmUiIT09ZS5jb250b3Vycy5jb2xvcmluZyYmbih0LGUse3ZhbHM6Zyxjb250YWluZXJTdHI6IiIsY0xldHRlcjoieiJ9KTtyZXR1cm5bVF19KHQsZSk7cmV0dXJuIGYoZSxlLl96KSxnfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYwMCwiLi4vLi4vbGliIjo3MTcsIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiOjkxNiwiLi4vY29udG91ci9zZXRfY29udG91cnMiOjk2MiwiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSI6MTAwMiwiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiOjEwMDQsIi4uL2hlYXRtYXAvZmluZF9lbXB0aWVzIjoxMDA2LCIuLi9oZWF0bWFwL2ludGVycDJkIjoxMDA5LCIuLi9oZWF0bWFwL21ha2VfYm91bmRfYXJyYXkiOjEwMTAsIi4vZGVmYXVsdHMiOjk2N31dLDk2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2NvbnRvdXIvY29uc3RyYWludF9kZWZhdWx0cyIpLHM9dCgiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyIpLGw9dCgiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXtmdW5jdGlvbiB1KHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9aWYodSgiY2FycGV0IiksdC5hJiZ0LmIpe2lmKCFhKHQsZSx1LGMsImEiLCJiIikpcmV0dXJuIHZvaWQoZS52aXNpYmxlPSExKTt1KCJ0ZXh0IiksImNvbnN0cmFpbnQiPT09dSgiY29udG91cnMudHlwZSIpP28odCxlLHUsYyxyLHtoYXNIb3ZlcjohMX0pOihzKHQsZSx1LGZ1bmN0aW9uKHIpe3JldHVybiBuLmNvZXJjZTIodCxlLGkscil9KSxsKHQsZSx1LGMse2hhc0hvdmVyOiExfSkpfWVsc2UgZS5fZGVmYXVsdENvbG9yPXIsZS5fbGVuZ3RoPW51bGx9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi9jb250b3VyL2NvbnN0cmFpbnRfZGVmYXVsdHMiOjk0OCwiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyI6OTUwLCIuLi9jb250b3VyL3N0eWxlX2RlZmF1bHRzIjo5NjQsIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIjoxMDE0LCIuL2F0dHJpYnV0ZXMiOjk2NX1dLDk2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL2NvbnRvdXIvY29sb3JiYXIiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi4vY29udG91ci9zdHlsZSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJjb250b3VyY2FycGV0IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiY2FycGV0IiwiY29udG91ciIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwiaGFzTGluZXMiLCJjYXJwZXREZXBlbmRlbnQiLCJub0hvdmVyIiwibm9Tb3J0aW5nQnlWYWx1ZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6Nzc2LCIuLi9jb250b3VyL2NvbG9yYmFyIjo5NDYsIi4uL2NvbnRvdXIvc3R5bGUiOjk2MywiLi9hdHRyaWJ1dGVzIjo5NjUsIi4vY2FsYyI6OTY2LCIuL2RlZmF1bHRzIjo5NjcsIi4vcGxvdCI6OTY5fV0sOTY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5IiksaT10KCIuLi9jYXJwZXQvbWFrZXBhdGgiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi9jb250b3VyL21ha2VfY3Jvc3NpbmdzIiksYz10KCIuLi9jb250b3VyL2ZpbmRfYWxsX3BhdGhzIiksdT10KCIuLi9jb250b3VyL3Bsb3QiKSxoPXQoIi4uL2NvbnRvdXIvY29uc3RhbnRzIiksZj10KCIuLi9jb250b3VyL2NvbnZlcnRfdG9fY29uc3RyYWludHMiKSxwPXQoIi4uL2NvbnRvdXIvZW1wdHlfcGF0aGluZm8iKSxkPXQoIi4uL2NvbnRvdXIvY2xvc2VfYm91bmRhcmllcyIpLGc9dCgiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCIpLHY9dCgiLi4vY2FycGV0L2F4aXNfYWxpZ25lZF9saW5lIik7ZnVuY3Rpb24gbSh0LGUscil7dmFyIG49dC5nZXRQb2ludEF0TGVuZ3RoKGUpLGE9dC5nZXRQb2ludEF0TGVuZ3RoKHIpLGk9YS54LW4ueCxvPWEueS1uLnkscz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuW2kvcyxvL3NdfWZ1bmN0aW9uIHkodCl7dmFyIGU9TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pO3JldHVyblt0WzBdL2UsdFsxXS9lXX1mdW5jdGlvbiB4KHQsZSl7dmFyIHI9TWF0aC5hYnModFswXSplWzBdK3RbMV0qZVsxXSk7cmV0dXJuIE1hdGguc3FydCgxLXIqcikvcn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYil7dmFyIF89ZS54YXhpcyx3PWUueWF4aXM7cy5tYWtlVHJhY2VHcm91cHMoYixyLCJjb250b3VyIikuZWFjaChmdW5jdGlvbihyKXt2YXIgYj1uLnNlbGVjdCh0aGlzKSxrPXJbMF0sVD1rLnRyYWNlLE09VC5fY2FycGV0VHJhY2U9Zyh0LFQpLEE9dC5jYWxjZGF0YVtNLmluZGV4XVswXTtpZihNLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PU0udmlzaWJsZSl7dmFyIFM9ay5hLEU9ay5iLEw9VC5jb250b3VycyxDPXAoTCxlLGspLFA9ImNvbnN0cmFpbnQiPT09TC50eXBlLE89TC5fb3BlcmF0aW9uLHo9UD8iPSI9PT1PPyJsaW5lcyI6ImZpbGwiOkwuY29sb3JpbmcsST1bW1NbMF0sRVtFLmxlbmd0aC0xXV0sW1NbUy5sZW5ndGgtMV0sRVtFLmxlbmd0aC0xXV0sW1NbUy5sZW5ndGgtMV0sRVswXV0sW1NbMF0sRVswXV1dO2woQyk7dmFyIEQ9MWUtOCooU1tTLmxlbmd0aC0xXS1TWzBdKSxSPTFlLTgqKEVbRS5sZW5ndGgtMV0tRVswXSk7YyhDLEQsUik7dmFyIEYsQixOLGosVj1DOyJjb25zdHJhaW50Ij09PUwudHlwZSYmKFY9ZihDLE8pKSxmdW5jdGlvbih0LGUpe3ZhciByLG4sYSxpLG8scyxsLGMsdTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtmb3IoaT10W3JdLG89aS5wZWRnZXBhdGhzPVtdLHM9aS5wcGF0aHM9W10sbj0wO248aS5lZGdlcGF0aHMubGVuZ3RoO24rKyl7Zm9yKHU9aS5lZGdlcGF0aHNbbl0sbD1bXSxhPTA7YTx1Lmxlbmd0aDthKyspbFthXT1lKHVbYV0pO28ucHVzaChsKX1mb3Iobj0wO248aS5wYXRocy5sZW5ndGg7bisrKXtmb3IodT1pLnBhdGhzW25dLGM9W10sYT0wO2E8dS5sZW5ndGg7YSsrKWNbYV09ZSh1W2FdKTtzLnB1c2goYyl9fX0oQyxIKTt2YXIgVT1bXTtmb3Ioaj1BLmNsaXBzZWdtZW50cy5sZW5ndGgtMTtqPj0wO2otLSlGPUEuY2xpcHNlZ21lbnRzW2pdLEI9YShbXSxGLngsXy5jMnApLE49YShbXSxGLnksdy5jMnApLEIucmV2ZXJzZSgpLE4ucmV2ZXJzZSgpLFUucHVzaChpKEIsTixGLmJpY3ViaWMpKTt2YXIgcT0iTSIrVS5qb2luKCJMIikrIloiOyFmdW5jdGlvbih0LGUscixuLG8sbCl7dmFyIGMsdSxoLGYscD1zLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmJnIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCIhPT1sfHxvP1tdOlswXSk7cC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLHAuZXhpdCgpLnJlbW92ZSgpO3ZhciBkPVtdO2ZvcihmPTA7ZjxlLmxlbmd0aDtmKyspYz1lW2ZdLHU9YShbXSxjLngsci5jMnApLGg9YShbXSxjLnksbi5jMnApLGQucHVzaChpKHUsaCxjLmJpY3ViaWMpKTtwLmF0dHIoImQiLCJNIitkLmpvaW4oIkwiKSsiWiIpLnN0eWxlKCJzdHJva2UiLCJub25lIil9KGIsQS5jbGlwc2VnbWVudHMsXyx3LFAseiksZnVuY3Rpb24odCxlLHIsYSxpLGwsYyx1LGgsZixwKXt2YXIgZz0iZmlsbCI9PT1mO2cmJmQoaSx0LmNvbnRvdXJzKTt2YXIgbT1zLmVuc3VyZVNpbmdsZShlLCJnIiwiY29udG91cmZpbGwiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKGc/aTpbXSk7bS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLG0uZXhpdCgpLnJlbW92ZSgpLG0uZWFjaChmdW5jdGlvbih0KXt2YXIgZT0odC5wcmVmaXhCb3VuZGFyeT9wOiIiKStmdW5jdGlvbih0LGUscixuLGEsaSxsLGMpe3ZhciB1LGgsZixwLGQsZyxtLHk9IiIseD1lLmVkZ2VwYXRocy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pLGI9ITAsXz0xZS00Kk1hdGguYWJzKHJbMF1bMF0tclsyXVswXSksdz0xZS00Kk1hdGguYWJzKHJbMF1bMV0tclsyXVsxXSk7ZnVuY3Rpb24gayh0KXtyZXR1cm4gTWF0aC5hYnModFsxXS1yWzBdWzFdKTx3fWZ1bmN0aW9uIFQodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tclsyXVsxXSk8d31mdW5jdGlvbiBNKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLXJbMF1bMF0pPF99ZnVuY3Rpb24gQSh0KXtyZXR1cm4gTWF0aC5hYnModFswXS1yWzJdWzBdKTxffWZ1bmN0aW9uIFModCxlKXt2YXIgcixuLG8scyx1PSIiO2ZvcihrKHQpJiYhQSh0KXx8VCh0KSYmIU0odCk/KHM9YS5hYXhpcyxvPXYoYSxpLFt0WzBdLGVbMF1dLC41Kih0WzFdK2VbMV0pKSk6KHM9YS5iYXhpcyxvPXYoYSxpLC41Kih0WzBdK2VbMF0pLFt0WzFdLGVbMV1dKSkscj0xO3I8by5sZW5ndGg7cisrKWZvcih1Kz1zLnNtb290aGluZz8iQyI6IkwiLG49MDtuPG9bcl0ubGVuZ3RoO24rKyl7dmFyIGg9b1tyXVtuXTt1Kz1bbC5jMnAoaFswXSksYy5jMnAoaFsxXSldKyIgIn1yZXR1cm4gdX11PTAsaD1udWxsO2Zvcig7eC5sZW5ndGg7KXt2YXIgRT1lLmVkZ2VwYXRoc1t1XVswXTtmb3IoaCYmKHkrPVMoaCxFKSksbT1vLnNtb290aG9wZW4oZS5lZGdlcGF0aHNbdV0ubWFwKG4pLGUuc21vb3RoaW5nKSx5Kz1iP206bS5yZXBsYWNlKC9eTS8sIkwiKSx4LnNwbGljZSh4LmluZGV4T2YodSksMSksaD1lLmVkZ2VwYXRoc1t1XVtlLmVkZ2VwYXRoc1t1XS5sZW5ndGgtMV0sZD0tMSxwPTA7cDw0O3ArKyl7aWYoIWgpe3MubG9nKCJNaXNzaW5nIGVuZD8iLHUsZSk7YnJlYWt9Zm9yKGsoaCkmJiFBKGgpP2Y9clsxXTpNKGgpP2Y9clswXTpUKGgpP2Y9clszXTpBKGgpJiYoZj1yWzJdKSxnPTA7ZzxlLmVkZ2VwYXRocy5sZW5ndGg7ZysrKXt2YXIgTD1lLmVkZ2VwYXRoc1tnXVswXTtNYXRoLmFicyhoWzBdLWZbMF0pPF8/TWF0aC5hYnMoaFswXS1MWzBdKTxfJiYoTFsxXS1oWzFdKSooZlsxXS1MWzFdKT49MCYmKGY9TCxkPWcpOk1hdGguYWJzKGhbMV0tZlsxXSk8dz9NYXRoLmFicyhoWzFdLUxbMV0pPHcmJihMWzBdLWhbMF0pKihmWzBdLUxbMF0pPj0wJiYoZj1MLGQ9Zyk6cy5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIsaCxmLEwpfWlmKGQ+PTApYnJlYWs7eSs9UyhoLGYpLGg9Zn1pZihkPT09ZS5lZGdlcGF0aHMubGVuZ3RoKXtzLmxvZygidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGgiKTticmVha311PWQsKGI9LTE9PT14LmluZGV4T2YodSkpJiYodT14WzBdLHkrPVMoaCxmKSsiWiIsaD1udWxsKX1mb3IodT0wO3U8ZS5wYXRocy5sZW5ndGg7dSsrKXkrPW8uc21vb3RoY2xvc2VkKGUucGF0aHNbdV0ubWFwKG4pLGUuc21vb3RoaW5nKTtyZXR1cm4geX0oMCx0LGwsYyx1LGgscixhKTtlP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLGUpLnN0eWxlKCJzdHJva2UiLCJub25lIik6bi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KX0oVCxiLF8sdyxWLEksSCxNLEEseixxKSxmdW5jdGlvbih0LGUscixhLGksbCxjKXt2YXIgZj1zLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmxpbmVzIikscD0hMSE9PWkuc2hvd2xpbmVzLGQ9aS5zaG93bGFiZWxzLGc9cCYmZCx2PXUuY3JlYXRlTGluZXMoZixwfHxkLGUpLGI9dS5jcmVhdGVMaW5lQ2xpcChmLGcscixhLnRyYWNlLnVpZCksXz10LnNlbGVjdEFsbCgiZy5jb250b3VybGFiZWxzIikuZGF0YShkP1swXTpbXSk7aWYoXy5leGl0KCkucmVtb3ZlKCksXy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXJsYWJlbHMiLCEwKSxkKXt2YXIgdz1sLnhheGlzLGs9bC55YXhpcyxUPXcuX2xlbmd0aCxNPWsuX2xlbmd0aCxBPVtbWzAsMF0sW1QsMF0sW1QsTV0sWzAsTV1dXSxTPVtdO3MuY2xlYXJMb2NhdGlvbkNhY2hlKCk7dmFyIEU9dS5sYWJlbEZvcm1hdHRlcihyLGEpLEw9by50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChvLmZvbnQsaS5sYWJlbGZvbnQpLEM9e2xlZnQ6MCxyaWdodDpULGNlbnRlcjpULzIsdG9wOjAsYm90dG9tOk0sbWlkZGxlOk0vMn0sUD1NYXRoLnNxcnQoVCpUK00qTSksTz1oLkxBQkVMRElTVEFOQ0UqUC9NYXRoLm1heCgxLGUubGVuZ3RoL2guTEFCRUxJTkNSRUFTRSk7di5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXUuY2FsY1RleHRPcHRzKHQubGV2ZWwsRSxMLHIpO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLmVhY2goZnVuY3Rpb24ocil7dmFyIG49cy5nZXRWaXNpYmxlU2VnbWVudCh0aGlzLEMsZS5oZWlnaHQvMik7aWYobiYmKGZ1bmN0aW9uKHQsZSxyLG4sYSxpKXtmb3IodmFyIG8scz0wO3M8ci5wZWRnZXBhdGhzLmxlbmd0aDtzKyspZT09PXIucGVkZ2VwYXRoc1tzXSYmKG89ci5lZGdlcGF0aHNbc10pO2lmKCFvKXJldHVybjt2YXIgbD1hLmFbMF0sYz1hLmFbYS5hLmxlbmd0aC0xXSx1PWEuYlswXSxoPWEuYlthLmIubGVuZ3RoLTFdO2Z1bmN0aW9uIGYodCxlKXt2YXIgcixuPTA7cmV0dXJuKE1hdGguYWJzKHRbMF0tbCk8LjF8fE1hdGguYWJzKHRbMF0tYyk8LjEpJiYocj15KGEuZHh5ZGJfcm91Z2godFswXSx0WzFdLC4xKSksbj1NYXRoLm1heChuLGkqeChlLHIpLzIpKSwoTWF0aC5hYnModFsxXS11KTwuMXx8TWF0aC5hYnModFsxXS1oKTwuMSkmJihyPXkoYS5keHlkYV9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4saSp4KGUscikvMikpLG59dmFyIHA9bSh0LDAsMSksZD1tKHQsbi50b3RhbCxuLnRvdGFsLTEpLGc9ZihvWzBdLHApLHY9bi50b3RhbC1mKG9bby5sZW5ndGgtMV0sZCk7bi5taW48ZyYmKG4ubWluPWcpO24ubWF4PnYmJihuLm1heD12KTtuLmxlbj1uLm1heC1uLm1pbn0odGhpcyxyLHQsbixjLGUuaGVpZ2h0KSwhKG4ubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpoLkxBQkVMTUlOKSkpZm9yKHZhciBhPU1hdGgubWluKE1hdGguY2VpbChuLmxlbi9PKSxoLkxBQkVMTUFYKSxpPTA7aTxhO2krKyl7dmFyIG89dS5maW5kQmVzdFRleHRMb2NhdGlvbih0aGlzLG4sZSxTLEMpO2lmKCFvKWJyZWFrO3UuYWRkTGFiZWxEYXRhKG8sZSxTLEEpfX0pfSksTC5yZW1vdmUoKSx1LmRyYXdMYWJlbHMoXyxTLHIsYixnP0E6bnVsbCl9ZCYmIXAmJnYucmVtb3ZlKCl9KGIsQyx0LGssTCxlLE0pLG8uc2V0Q2xpcFVybChiLE0uX2NsaXBQYXRoSWQsdCl9ZnVuY3Rpb24gSCh0KXt2YXIgZT1NLmFiMnh5KHRbMF0sdFsxXSwhMCk7cmV0dXJuW18uYzJwKGVbMF0pLHcuYzJwKGVbMV0pXX19KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uLy4uL2xpYiI6NzE3LCIuLi9jYXJwZXQvYXhpc19hbGlnbmVkX2xpbmUiOjkwMCwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCI6OTE2LCIuLi9jYXJwZXQvbWFrZXBhdGgiOjkxNywiLi4vY2FycGV0L21hcF8xZF9hcnJheSI6OTE4LCIuLi9jb250b3VyL2Nsb3NlX2JvdW5kYXJpZXMiOjk0NSwiLi4vY29udG91ci9jb25zdGFudHMiOjk0NywiLi4vY29udG91ci9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzIjo5NTEsIi4uL2NvbnRvdXIvZW1wdHlfcGF0aGluZm8iOjk1MywiLi4vY29udG91ci9maW5kX2FsbF9wYXRocyI6OTU1LCIuLi9jb250b3VyL21ha2VfY3Jvc3NpbmdzIjo5NjAsIi4uL2NvbnRvdXIvcGxvdCI6OTYxLGQzOjE2NX1dLDk3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3NjYXR0ZXJtYXBib3gvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXMoe2xvbjpvLmxvbixsYXQ6by5sYXQsejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxyYWRpdXM6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITAsbWluOjEsZGZsdDozMH0sYmVsb3c6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSx0ZXh0Om8udGV4dCxob3ZlcnRleHQ6by5ob3ZlcnRleHQsaG92ZXJpbmZvOnMoe30saS5ob3ZlcmluZm8se2ZsYWdzOlsibG9uIiwibGF0IiwieiIsInRleHQiLCJuYW1lIl19KSxob3ZlcnRlbXBsYXRlOmEoKSxzaG93bGVnZW5kOnMoe30saS5zaG93bGVnZW5kLHtkZmx0OiExfSl9LG4oIiIse2NMZXR0ZXI6InoiLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1OTksIi4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NDEsIi4uL3NjYXR0ZXJtYXBib3gvYXR0cmlidXRlcyI6MTE4NH1dLDk3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLHM9dCgiLi4vLi4vbGliIikuXztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5fbGVuZ3RoLGw9bmV3IEFycmF5KHIpLGM9ZS56LHU9YShjKSYmYy5sZW5ndGgsaD0wO2g8cjtoKyspe3ZhciBmPWxbaF09e30scD1lLmxvbltoXSxkPWUubGF0W2hdO2lmKGYubG9ubGF0PW4ocCkmJm4oZCk/WytwLCtkXTpbaSxpXSx1KXt2YXIgZz1jW2hdO2Yuej1uKGcpP2c6aX19cmV0dXJuIG8odCxlLHt2YWxzOnU/YzpbMCwxXSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoieiJ9KSxyJiYobFswXS50PXtsYWJlbHM6e2xhdDpzKHQsImxhdDoiKSsiICIsbG9uOnModCwibG9uOiIpKyIgIn19KSxsfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjAwLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2OTMsIi4uLy4uL2xpYiI6NzE3LCJmYXN0LWlzbnVtZXJpYyI6MjI4fV0sOTcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxsPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIikubWFrZUJsYW5rO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ITA9PT1lLnZpc2libGUmJjAhPT1lLl9sZW5ndGgsYz1lLl9vcHRzPXtoZWF0bWFwOntsYXlvdXQ6e3Zpc2liaWxpdHk6Im5vbmUifSxwYWludDp7fX0sZ2VvanNvbjpsKCl9O2lmKCFyKXJldHVybiBjO3ZhciB1LGg9W10sZj1lLnoscD1lLnJhZGl1cyxkPWEuaXNBcnJheU9yVHlwZWRBcnJheShmKSYmZi5sZW5ndGgsZz1hLmlzQXJyYXlPclR5cGVkQXJyYXkocCk7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKyl7dmFyIHY9dFt1XSxtPXYubG9ubGF0O2lmKG1bMF0hPT1zKXt2YXIgeT17fTtpZihkKXt2YXIgeD12Lno7eS56PXghPT1zP3g6MH1nJiYoeS5yPW4ocFt1XSkmJnBbdV0+MD8rcFt1XTowKSxoLnB1c2goe3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6bX0scHJvcGVydGllczp5fSl9fXZhciBiPW8uZXh0cmFjdE9wdHMoZSksXz1iLnJldmVyc2VzY2FsZT9vLmZsaXBTY2FsZShiLmNvbG9yc2NhbGUpOmIuY29sb3JzY2FsZSx3PV9bMF1bMV0saz1bImludGVycG9sYXRlIixbImxpbmVhciJdLFsiaGVhdG1hcC1kZW5zaXR5Il0sMCxpLm9wYWNpdHkodyk8MT93OmkuYWRkT3BhY2l0eSh3LDApXTtmb3IodT0xO3U8Xy5sZW5ndGg7dSsrKWsucHVzaChfW3VdWzBdLF9bdV1bMV0pO3ZhciBUPVsiaW50ZXJwb2xhdGUiLFsibGluZWFyIl0sWyJnZXQiLCJ6Il0sYi5taW4sMCxiLm1heCwxXTtyZXR1cm4gYS5leHRlbmRGbGF0KGMuaGVhdG1hcC5wYWludCx7ImhlYXRtYXAtd2VpZ2h0IjpkP1Q6MS8oYi5tYXgtYi5taW4pLCJoZWF0bWFwLWNvbG9yIjprLCJoZWF0bWFwLXJhZGl1cyI6Zz97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJyIn06ZS5yYWRpdXMsImhlYXRtYXAtb3BhY2l0eSI6ZS5vcGFjaXR5fSksYy5nZW9qc29uPXt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6aH0sYy5oZWF0bWFwLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixjfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjA0LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2OTMsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyI6NzEyLCJmYXN0LWlzbnVtZXJpYyI6MjI4fV0sOTczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksaT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBsPXMoImxvbiIpfHxbXSxjPXMoImxhdCIpfHxbXSx1PU1hdGgubWluKGwubGVuZ3RoLGMubGVuZ3RoKTt1PyhlLl9sZW5ndGg9dSxzKCJ6IikscygicmFkaXVzIikscygiYmVsb3ciKSxzKCJ0ZXh0IikscygiaG92ZXJ0ZXh0IikscygiaG92ZXJ0ZW1wbGF0ZSIpLGEodCxlLG8scyx7cHJlZml4OiIiLGNMZXR0ZXI6InoifSkpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MDIsIi4uLy4uL2xpYiI6NzE3LCIuL2F0dHJpYnV0ZXMiOjk3MH1dLDk3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb249ZS5sb24sdC5sYXQ9ZS5sYXQsdC56PWUueix0fX0se31dLDk3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi9zY2F0dGVybWFwYm94L2hvdmVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1pKHQsZSxyKTtpZihvKXt2YXIgcz1vWzBdLGw9cy5jZCxjPWxbMF0udHJhY2UsdT1sW3MuaW5kZXhdO2lmKGRlbGV0ZSBzLmNvbG9yLCJ6ImluIHUpe3ZhciBoPXMuc3VicGxvdC5tb2NrQXhpcztzLno9dS56LHMuekxhYmVsPWEudGlja1RleHQoaCxoLmMybCh1LnopLCJob3ZlciIpLnRleHR9cmV0dXJuIHMuZXh0cmFUZXh0PWZ1bmN0aW9uKHQsZSxyKXtpZih0LmhvdmVydGVtcGxhdGUpcmV0dXJuO3ZhciBhPShlLmhpfHx0LmhvdmVyaW5mbykuc3BsaXQoIisiKSxpPS0xIT09YS5pbmRleE9mKCJhbGwiKSxvPS0xIT09YS5pbmRleE9mKCJsb24iKSxzPS0xIT09YS5pbmRleE9mKCJsYXQiKSxsPWUubG9ubGF0LGM9W107ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdCsiXHhiMCJ9aXx8byYmcz9jLnB1c2goIigiK3UobFswXSkrIiwgIit1KGxbMV0pKyIpIik6bz9jLnB1c2goci5sb24rdShsWzBdKSk6cyYmYy5wdXNoKHIubGF0K3UobFsxXSkpOyhpfHwtMSE9PWEuaW5kZXhPZigidGV4dCIpKSYmbi5maWxsVGV4dChlLHQsYyk7cmV0dXJuIGMuam9pbigiPGJyPiIpfShjLHUsbFswXS50LmxhYmVscyksW3NdfX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsIi4uL3NjYXR0ZXJtYXBib3gvaG92ZXIiOjExODl9XSw5NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4uL3NjYXR0ZXJtYXBib3gvZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLGdldEJlbG93OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuZ2V0TWFwTGF5ZXJzKCksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgYT1yW25dLGk9YS5pZDtpZigic3ltYm9sIj09PWEudHlwZSYmInN0cmluZyI9PXR5cGVvZiBpJiYtMT09PWkuaW5kZXhPZigicGxvdGx5LSIpKXJldHVybiBpfX0sbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImRlbnNpdHltYXBib3giLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL21hcGJveCIpLGNhdGVnb3JpZXM6WyJtYXBib3giLCJnbCIsInNob3dMZWdlbmQiXSxtZXRhOntocl9uYW1lOiJkZW5zaXR5X21hcGJveCJ9fX0seyIuLi8uLi9wbG90cy9tYXBib3giOjgyMCwiLi4vaGVhdG1hcC9jb2xvcmJhciI6MTAwMywiLi4vc2NhdHRlcm1hcGJveC9mb3JtYXRfbGFiZWxzIjoxMTg4LCIuL2F0dHJpYnV0ZXMiOjk3MCwiLi9jYWxjIjo5NzEsIi4vZGVmYXVsdHMiOjk3MywiLi9ldmVudF9kYXRhIjo5NzQsIi4vaG92ZXIiOjk3NSwiLi9wbG90Ijo5Nzd9XSw5Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb252ZXJ0IiksYT10KCIuLi8uLi9wbG90cy9tYXBib3gvY29uc3RhbnRzIikudHJhY2VMYXllclByZWZpeDtmdW5jdGlvbiBpKHQsZSl7dGhpcy50eXBlPSJkZW5zaXR5bWFwYm94Iix0aGlzLnN1YnBsb3Q9dCx0aGlzLnVpZD1lLHRoaXMuc291cmNlSWQ9InNvdXJjZS0iK2UsdGhpcy5sYXllckxpc3Q9W1siaGVhdG1hcCIsYStlKyItaGVhdG1hcCJdXSx0aGlzLmJlbG93PW51bGx9dmFyIG89aS5wcm90b3R5cGU7by51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdWJwbG90LHI9dGhpcy5sYXllckxpc3QsYT1uKHQpLGk9ZS5iZWxvd0xvb2t1cFsidHJhY2UtIit0aGlzLnVpZF07ZS5tYXAuZ2V0U291cmNlKHRoaXMuc291cmNlSWQpLnNldERhdGEoYS5nZW9qc29uKSxpIT09dGhpcy5iZWxvdyYmKHRoaXMuX3JlbW92ZUxheWVycygpLHRoaXMuX2FkZExheWVycyhhLGkpLHRoaXMuYmVsb3c9aSk7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBzPXJbb10sbD1zWzBdLGM9c1sxXSx1PWFbbF07ZS5zZXRPcHRpb25zKGMsInNldExheW91dFByb3BlcnR5Iix1LmxheW91dCksInZpc2libGUiPT09dS5sYXlvdXQudmlzaWJpbGl0eSYmZS5zZXRPcHRpb25zKGMsInNldFBhaW50UHJvcGVydHkiLHUucGFpbnQpfX0sby5fYWRkTGF5ZXJzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuc3VicGxvdCxuPXRoaXMubGF5ZXJMaXN0LGE9dGhpcy5zb3VyY2VJZCxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBvPW5baV0scz1vWzBdLGw9dFtzXTtyLmFkZExheWVyKHt0eXBlOnMsaWQ6b1sxXSxzb3VyY2U6YSxsYXlvdXQ6bC5sYXlvdXQscGFpbnQ6bC5wYWludH0sZSl9fSxvLl9yZW1vdmVMYXllcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5zdWJwbG90Lm1hcCxlPXRoaXMubGF5ZXJMaXN0LHI9ZS5sZW5ndGgtMTtyPj0wO3ItLSl0LnJlbW92ZUxheWVyKGVbcl1bMV0pfSxvLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN1YnBsb3QubWFwO3RoaXMuX3JlbW92ZUxheWVycygpLHQucmVtb3ZlU291cmNlKHRoaXMuc291cmNlSWQpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLGE9bmV3IGkodCxyLnVpZCksbz1hLnNvdXJjZUlkLHM9bihlKSxsPWEuYmVsb3c9dC5iZWxvd0xvb2t1cFsidHJhY2UtIityLnVpZF07cmV0dXJuIHQubWFwLmFkZFNvdXJjZShvLHt0eXBlOiJnZW9qc29uIixkYXRhOnMuZ2VvanNvbn0pLGEuX2FkZExheWVycyhzLGwpLGF9fSx7Ii4uLy4uL3Bsb3RzL21hcGJveC9jb25zdGFudHMiOjgxOCwiLi9jb252ZXJ0Ijo5NzJ9XSw5Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bi5tZXJnZUFycmF5KGUudGV4dCx0LCJ0eCIpLG4ubWVyZ2VBcnJheShlLmhvdmVydGV4dCx0LCJodHgiKTt2YXIgYT1lLm1hcmtlcjtpZihhKXtuLm1lcmdlQXJyYXkoYS5vcGFjaXR5LHQsIm1vIiksbi5tZXJnZUFycmF5KGEuY29sb3IsdCwibWMiKTt2YXIgaT1hLmxpbmU7aSYmKG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsIm1sYyIpLG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShpLndpZHRoLHQsIm1sdyIpKX19fSx7Ii4uLy4uL2xpYiI6NzE3fV0sOTc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIiksYT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKS5saW5lLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxzPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxsPXQoIi4vY29uc3RhbnRzIiksYz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtlLmV4cG9ydHM9e3g6bi54LHgwOm4ueDAsZHg6bi5keCx5Om4ueSx5MDpuLnkwLGR5Om4uZHksaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6byh7fSx7a2V5czpsLmV2ZW50RGF0YUtleXN9KSxob3ZlcmluZm86Yyh7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6WyJuYW1lIiwieCIsInkiLCJ0ZXh0IiwicGVyY2VudCBpbml0aWFsIiwicGVyY2VudCBwcmV2aW91cyIsInBlcmNlbnQgdG90YWwiXX0pLHRleHRpbmZvOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJwZXJjZW50IGluaXRpYWwiLCJwZXJjZW50IHByZXZpb3VzIiwicGVyY2VudCB0b3RhbCIsInZhbHVlIl0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSx0ZXh0dGVtcGxhdGU6cyh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpsLmV2ZW50RGF0YUtleXMuY29uY2F0KFsibGFiZWwiLCJ2YWx1ZSJdKX0pLHRleHQ6bi50ZXh0LHRleHRwb3NpdGlvbjpjKHt9LG4udGV4dHBvc2l0aW9uLHtkZmx0OiJhdXRvIn0pLGluc2lkZXRleHRhbmNob3I6Yyh7fSxuLmluc2lkZXRleHRhbmNob3Ise2RmbHQ6Im1pZGRsZSJ9KSx0ZXh0YW5nbGU6Yyh7fSxuLnRleHRhbmdsZSx7ZGZsdDowfSksdGV4dGZvbnQ6bi50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDpuLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDpuLm91dHNpZGV0ZXh0Zm9udCxjb25zdHJhaW50ZXh0Om4uY29uc3RyYWludGV4dCxjbGlwb25heGlzOm4uY2xpcG9uYXhpcyxvcmllbnRhdGlvbjpjKHt9LG4ub3JpZW50YXRpb24se30pLG9mZnNldDpjKHt9LG4ub2Zmc2V0LHthcnJheU9rOiExfSksd2lkdGg6Yyh7fSxuLndpZHRoLHthcnJheU9rOiExfSksbWFya2VyOm4ubWFya2VyLGNvbm5lY3Rvcjp7ZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sbGluZTp7Y29sb3I6Yyh7fSxhLmNvbG9yLHtkZmx0OnUuZGVmYXVsdExpbmV9KSx3aWR0aDpjKHt9LGEud2lkdGgse2RmbHQ6MCxlZGl0VHlwZToicGxvdCJ9KSxkYXNoOmEuZGFzaCxlZGl0VHlwZToic3R5bGUifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxvZmZzZXRncm91cDpuLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOm4uYWxpZ25tZW50Z3JvdXB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg0MSwiLi4vYmFyL2F0dHJpYnV0ZXMiOjg1NiwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTIwLCIuL2NvbnN0YW50cyI6OTgxfV0sOTgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLGk9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBzKHQpe3JldHVybiB0PT09bz8wOnR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbCxjLHUsaD1uLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksZj1uLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iik7ImgiPT09ZS5vcmllbnRhdGlvbj8ocj1oLm1ha2VDYWxjZGF0YShlLCJ4IiksbD1mLm1ha2VDYWxjZGF0YShlLCJ5IikpOihyPWYubWFrZUNhbGNkYXRhKGUsInkiKSxsPWgubWFrZUNhbGNkYXRhKGUsIngiKSk7dmFyIHAsZD1NYXRoLm1pbihsLmxlbmd0aCxyLmxlbmd0aCksZz1uZXcgQXJyYXkoZCk7Zm9yKGUuX2Jhc2U9W10sYz0wO2M8ZDtjKyspe3JbY108MCYmKHJbY109byk7dmFyIHY9ITE7cltjXSE9PW8mJmMrMTxkJiZyW2MrMV0hPT1vJiYodj0hMCksdT1nW2NdPXtwOmxbY10sczpyW2NdLGNOZXh0OnZ9LGUuX2Jhc2VbY109LS41KnUucyxlLmlkcyYmKHUuaWQ9U3RyaW5nKGUuaWRzW2NdKSksMD09PWMmJihnWzBdLnZUb3RhbD0wKSxnWzBdLnZUb3RhbCs9cyh1LnMpLHUuYmVnUj1zKHUucykvcyhnWzBdLnMpfWZvcihjPTA7YzxkO2MrKykodT1nW2NdKS5zIT09byYmKHUuc3VtUj11LnMvZ1swXS52VG90YWwsdS5kaWZSPXZvaWQgMCE9PXA/dS5zL3A6MSxwPXUucyk7cmV0dXJuIGEoZyxlKSxpKGcsZSksZ319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTIyLCIuL2FycmF5c190b19jYWxjZGF0YSI6OTc4fV0sOTgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZXZlbnREYXRhS2V5czpbInBlcmNlbnRJbml0aWFsIiwicGVyY2VudFByZXZpb3VzIiwicGVyY2VudFRvdGFsIl19fSx7fV0sOTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Jhci9jcm9zc190cmFjZV9jYWxjIikuc2V0R3JvdXBQb3NpdGlvbnM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxpPXQuX2Z1bGxMYXlvdXQsbz10Ll9mdWxsRGF0YSxzPXQuY2FsY2RhdGEsbD1lLnhheGlzLGM9ZS55YXhpcyx1PVtdLGg9W10sZj1bXTtmb3IoYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgcD1vW2FdLGQ9ImgiPT09cC5vcmllbnRhdGlvbjshMD09PXAudmlzaWJsZSYmcC54YXhpcz09PWwuX2lkJiZwLnlheGlzPT09Yy5faWQmJiJmdW5uZWwiPT09cC50eXBlJiYocj1zW2FdLGQ/Zi5wdXNoKHIpOmgucHVzaChyKSx1LnB1c2gocikpfXZhciBnPXttb2RlOmkuZnVubmVsbW9kZSxub3JtOmkuZnVubmVsbm9ybSxnYXA6aS5mdW5uZWxnYXAsZ3JvdXBnYXA6aS5mdW5uZWxncm91cGdhcH07Zm9yKG4odCxsLGMsaCxnKSxuKHQsYyxsLGYsZyksYT0wO2E8dS5sZW5ndGg7YSsrKXtyPXVbYV07Zm9yKHZhciB2PTA7djxyLmxlbmd0aDt2KyspdisxPHIubGVuZ3RoJiYoclt2XS5uZXh0UDA9clt2KzFdLnAwLHJbdl0ubmV4dFMwPXJbdisxXS5zMCxyW3ZdLm5leHRQMT1yW3YrMV0ucDEsclt2XS5uZXh0UzE9clt2KzFdLnMxKX19fSx7Ii4uL2Jhci9jcm9zc190cmFjZV9jYWxjIjo4NTl9XSw5ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVHcm91cGluZ0RlZmF1bHRzLGk9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dCxvPXQoIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz17c3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsYSl7ZnVuY3Rpb24gYyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGEpfWlmKG8odCxlLGEsYykpe2MoIm9yaWVudGF0aW9uIixlLnkmJiFlLng/InYiOiJoIiksYygib2Zmc2V0IiksYygid2lkdGgiKTt2YXIgdT1jKCJ0ZXh0Iik7YygiaG92ZXJ0ZXh0IiksYygiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBoPWMoInRleHRwb3NpdGlvbiIpO2kodCxlLGEsYyxoLHttb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMCxtb2R1bGVIYXNDbGlwb25heGlzOiEwLG1vZHVsZUhhc1RleHRhbmdsZTohMCxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITB9KSwibm9uZSI9PT1lLnRleHRwb3NpdGlvbnx8ZS50ZXh0dGVtcGxhdGV8fGMoInRleHRpbmZvIixBcnJheS5pc0FycmF5KHUpPyJ0ZXh0K3ZhbHVlIjoidmFsdWUiKTt2YXIgZj1jKCJtYXJrZXIuY29sb3IiLHIpO2MoIm1hcmtlci5saW5lLmNvbG9yIixsLmRlZmF1bHRMaW5lKSxjKCJtYXJrZXIubGluZS53aWR0aCIpLGMoImNvbm5lY3Rvci52aXNpYmxlIikmJihjKCJjb25uZWN0b3IuZmlsbGNvbG9yIixmdW5jdGlvbih0KXt2YXIgZT1uLmlzQXJyYXlPclR5cGVkQXJyYXkodCk/IiMwMDAiOnQ7cmV0dXJuIGwuYWRkT3BhY2l0eShlLC41Kmwub3BhY2l0eShlKSl9KGYpKSxjKCJjb25uZWN0b3IubGluZS53aWR0aCIpJiYoYygiY29ubmVjdG9yLmxpbmUuY29sb3IiKSxjKCJjb25uZWN0b3IubGluZS5kYXNoIikpKX1lbHNlIGUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsaTtmdW5jdGlvbiBvKHQpe3JldHVybiBuLmNvZXJjZShpLl9pbnB1dCxpLHMsdCl9aWYoImdyb3VwIj09PWUuZnVubmVsbW9kZSlmb3IodmFyIGw9MDtsPHQubGVuZ3RoO2wrKylyPShpPXRbbF0pLl9pbnB1dCxhKHIsaSxlLG8pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9saWIiOjcxNywiLi4vYmFyL2RlZmF1bHRzIjo4NjAsIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiOjExNDYsIi4vYXR0cmlidXRlcyI6OTc5fV0sOTg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lng9InhWYWwiaW4gZT9lLnhWYWw6ZS54LHQueT0ieVZhbCJpbiBlP2UueVZhbDplLnksInBlcmNlbnRJbml0aWFsImluIGUmJih0LnBlcmNlbnRJbml0aWFsPWUucGVyY2VudEluaXRpYWwpLCJwZXJjZW50UHJldmlvdXMiaW4gZSYmKHQucGVyY2VudFByZXZpb3VzPWUucGVyY2VudFByZXZpb3VzKSwicGVyY2VudFRvdGFsImluIGUmJih0LnBlcmNlbnRUb3RhbD1lLnBlcmNlbnRUb3RhbCksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksdH19LHt9XSw5ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLm9wYWNpdHksYT10KCIuLi9iYXIvaG92ZXIiKS5ob3Zlck9uQmFycyxpPXQoIi4uLy4uL2xpYiIpLmZvcm1hdFBlcmNlbnQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPWEodCxlLHIsbyk7aWYocyl7dmFyIGw9cy5jZCxjPWxbMF0udHJhY2UsdT0iaCI9PT1jLm9yaWVudGF0aW9uLGg9bFtzLmluZGV4XTtzWyh1PyJ4IjoieSIpKyJMYWJlbFZhbCJdPWgucyxzLnBlcmNlbnRJbml0aWFsPWguYmVnUixzLnBlcmNlbnRJbml0aWFsTGFiZWw9aShoLmJlZ1IsMSkscy5wZXJjZW50UHJldmlvdXM9aC5kaWZSLHMucGVyY2VudFByZXZpb3VzTGFiZWw9aShoLmRpZlIsMSkscy5wZXJjZW50VG90YWw9aC5zdW1SLHMucGVyY2VudFRvdGFsTGFiZWw9aShoLnN1bVIsMSk7dmFyIGY9aC5oaXx8Yy5ob3ZlcmluZm8scD1bXTtpZihmJiYibm9uZSIhPT1mJiYic2tpcCIhPT1mKXt2YXIgZD0iYWxsIj09PWYsZz1mLnNwbGl0KCIrIiksdj1mdW5jdGlvbih0KXtyZXR1cm4gZHx8LTEhPT1nLmluZGV4T2YodCl9O3YoInBlcmNlbnQgaW5pdGlhbCIpJiZwLnB1c2gocy5wZXJjZW50SW5pdGlhbExhYmVsKyIgb2YgaW5pdGlhbCIpLHYoInBlcmNlbnQgcHJldmlvdXMiKSYmcC5wdXNoKHMucGVyY2VudFByZXZpb3VzTGFiZWwrIiBvZiBwcmV2aW91cyIpLHYoInBlcmNlbnQgdG90YWwiKSYmcC5wdXNoKHMucGVyY2VudFRvdGFsTGFiZWwrIiBvZiB0b3RhbCIpfXJldHVybiBzLmV4dHJhVGV4dD1wLmpvaW4oIjxicj4iKSxzLmNvbG9yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5tYXJrZXIsYT1lLm1jfHxyLmNvbG9yLGk9ZS5tbGN8fHIubGluZS5jb2xvcixvPWUubWx3fHxyLmxpbmUud2lkdGg7aWYobihhKSlyZXR1cm4gYTtpZihuKGkpJiZvKXJldHVybiBpfShjLGgpLFtzXX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vbGliIjo3MTcsIi4uL2Jhci9ob3ZlciI6ODYzfV0sOTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiZnVubmVsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJvcmllbnRlZCIsInNob3dMZWdlbmQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NiwiLi4vYmFyL3NlbGVjdCI6ODY4LCIuL2F0dHJpYnV0ZXMiOjk3OSwiLi9jYWxjIjo5ODAsIi4vY3Jvc3NfdHJhY2VfY2FsYyI6OTgyLCIuL2RlZmF1bHRzIjo5ODMsIi4vZXZlbnRfZGF0YSI6OTg0LCIuL2hvdmVyIjo5ODUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjk4NywiLi9sYXlvdXRfZGVmYXVsdHMiOjk4OCwiLi9wbG90Ijo5ODksIi4vc3R5bGUiOjk5MH1dLDk4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2Z1bm5lbG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInN0YWNrIiwiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoic3RhY2siLGVkaXRUeXBlOiJjYWxjIn0sZnVubmVsZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0sZnVubmVsZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sOTg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9ITE7ZnVuY3Rpb24gbyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfWZvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgbD1yW3NdO2lmKGwudmlzaWJsZSYmImZ1bm5lbCI9PT1sLnR5cGUpe2k9ITA7YnJlYWt9fWkmJihvKCJmdW5uZWxtb2RlIiksbygiZnVubmVsZ2FwIiwuMiksbygiZnVubmVsZ3JvdXBnYXAiKSl9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo5ODd9XSw5ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi9iYXIvcGxvdCIpLHM9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLmNsZWFyTWluVGV4dFNpemU7ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgYT1bXSxpPVtdLG89bj9lOnIscz1uP3I6ZTtyZXR1cm4gYVswXT1vLmMycCh0LnMwLCEwKSxpWzBdPXMuYzJwKHQucDAsITApLGFbMV09by5jMnAodC5zMSwhMCksaVsxXT1zLmMycCh0LnAxLCEwKSxhWzJdPW8uYzJwKHQubmV4dFMwLCEwKSxpWzJdPXMuYzJwKHQubmV4dFAwLCEwKSxhWzNdPW8uYzJwKHQubmV4dFMxLCEwKSxpWzNdPXMuYzJwKHQubmV4dFAxLCEwKSxuP1thLGldOltpLGFdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXt2YXIgdT10Ll9mdWxsTGF5b3V0O3MoImZ1bm5lbCIsdSksZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9ZS54YXhpcyxjPWUueWF4aXM7YS5tYWtlVHJhY2VHcm91cHMobyxyLCJ0cmFjZSBiYXJzIikuZWFjaChmdW5jdGlvbihyKXt2YXIgbz1uLnNlbGVjdCh0aGlzKSx1PXJbMF0udHJhY2UsaD1hLmVuc3VyZVNpbmdsZShvLCJnIiwicmVnaW9ucyIpO2lmKHUuY29ubmVjdG9yJiZ1LmNvbm5lY3Rvci52aXNpYmxlKXt2YXIgZj0iaCI9PT11Lm9yaWVudGF0aW9uLHA9aC5zZWxlY3RBbGwoImcucmVnaW9uIikuZGF0YShhLmlkZW50aXR5KTtwLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmVnaW9uIiwhMCkscC5leGl0KCkucmVtb3ZlKCk7dmFyIGQ9cC5zaXplKCk7cC5lYWNoKGZ1bmN0aW9uKHIsbyl7aWYobz09PWQtMXx8ci5jTmV4dCl7dmFyIHU9bChyLHMsYyxmKSxoPXVbMF0scD11WzFdLGc9IiI7dm9pZCAwIT09aFszXSYmdm9pZCAwIT09cFszXSYmKGcrPWY/Ik0iK2hbMF0rIiwiK3BbMV0rIkwiK2hbMl0rIiwiK3BbMl0rIkgiK2hbM10rIkwiK2hbMV0rIiwiK3BbMV0rIloiOiJNIitoWzFdKyIsIitwWzFdKyJMIitoWzJdKyIsIitwWzNdKyJWIitwWzJdKyJMIitoWzFdKyIsIitwWzBdKyJaIiksYS5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInBhdGgiKS5hdHRyKCJkIixnKS5jYWxsKGkuc2V0Q2xpcFVybCxlLmxheWVyQ2xpcElkLHQpfX0pfWVsc2UgaC5yZW1vdmUoKX0pfSh0LGUscixjKSxmdW5jdGlvbih0LGUscixvKXt2YXIgcz1lLnhheGlzLGM9ZS55YXhpczthLm1ha2VUcmFjZUdyb3VwcyhvLHIsInRyYWNlIGJhcnMiKS5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBvPW4uc2VsZWN0KHRoaXMpLHU9clswXS50cmFjZSxoPWEuZW5zdXJlU2luZ2xlKG8sImciLCJsaW5lcyIpO2lmKHUuY29ubmVjdG9yJiZ1LmNvbm5lY3Rvci52aXNpYmxlJiZ1LmNvbm5lY3Rvci5saW5lLndpZHRoKXt2YXIgZj0iaCI9PT11Lm9yaWVudGF0aW9uLHA9aC5zZWxlY3RBbGwoImcubGluZSIpLmRhdGEoYS5pZGVudGl0eSk7cC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxpbmUiLCEwKSxwLmV4aXQoKS5yZW1vdmUoKTt2YXIgZD1wLnNpemUoKTtwLmVhY2goZnVuY3Rpb24ocixvKXtpZihvPT09ZC0xfHxyLmNOZXh0KXt2YXIgdT1sKHIscyxjLGYpLGg9dVswXSxwPXVbMV0sZz0iIjt2b2lkIDAhPT1oWzNdJiZ2b2lkIDAhPT1wWzNdJiYoZj8oZys9Ik0iK2hbMF0rIiwiK3BbMV0rIkwiK2hbMl0rIiwiK3BbMl0sZys9Ik0iK2hbMV0rIiwiK3BbMV0rIkwiK2hbM10rIiwiK3BbMl0pOihnKz0iTSIraFsxXSsiLCIrcFsxXSsiTCIraFsyXSsiLCIrcFszXSxnKz0iTSIraFsxXSsiLCIrcFswXSsiTCIraFsyXSsiLCIrcFsyXSkpLCIiPT09ZyYmKGc9Ik0wLDBaIiksYS5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInBhdGgiKS5hdHRyKCJkIixnKS5jYWxsKGkuc2V0Q2xpcFVybCxlLmxheWVyQ2xpcElkLHQpfX0pfWVsc2UgaC5yZW1vdmUoKX0pfSh0LGUscixjKSxvLnBsb3QodCxlLHIsYyx7bW9kZTp1LmZ1bm5lbG1vZGUsbm9ybTp1LmZ1bm5lbG1vZGUsZ2FwOnUuZnVubmVsZ2FwLGdyb3VwZ2FwOnUuZnVubmVsZ3JvdXBnYXB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uLy4uL2xpYiI6NzE3LCIuLi9iYXIvcGxvdCI6ODY3LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo4NzIsZDM6MTY1fV0sOTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxzPXQoIi4uL2Jhci9zdHlsZSIpLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQsYz1zLnN0eWxlVGV4dFBvaW50cztlLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgcz1yfHxuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcuZnVubmVsbGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UiKTtsKHQscywiZnVubmVsIikscy5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLHMuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxzPWVbMF0udHJhY2U7ci5zZWxlY3RBbGwoIi5wb2ludCA+IHBhdGgiKS5lYWNoKGZ1bmN0aW9uKHQpe2lmKCF0LmlzQmxhbmspe3ZhciBlPXMubWFya2VyO24uc2VsZWN0KHRoaXMpLmNhbGwoaS5maWxsLHQubWN8fGUuY29sb3IpLmNhbGwoaS5zdHJva2UsdC5tbGN8fGUubGluZS5jb2xvcikuY2FsbChhLmRhc2hMaW5lLGUubGluZS5kYXNoLHQubWx3fHxlLmxpbmUud2lkdGgpLnN0eWxlKCJvcGFjaXR5IixzLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD9vOjEpfX0pLGMocixzLHQpLHIuc2VsZWN0QWxsKCIucmVnaW9ucyIpLmVhY2goZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwwKS5jYWxsKGkuZmlsbCxzLmNvbm5lY3Rvci5maWxsY29sb3IpfSksci5zZWxlY3RBbGwoIi5saW5lcyIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1zLmNvbm5lY3Rvci5saW5lO2EubGluZUdyb3VwU3R5bGUobi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIiksdC53aWR0aCx0LmNvbG9yLHQuZGFzaCl9KX0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYxMywiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NjkyLCIuLi9iYXIvc3R5bGUiOjg3MCwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6ODcyLGQzOjE2NX1dLDk5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9waWUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczpuLmxhYmVscyxsYWJlbDA6bi5sYWJlbDAsZGxhYmVsOm4uZGxhYmVsLHZhbHVlczpuLnZhbHVlcyxtYXJrZXI6e2NvbG9yczpuLm1hcmtlci5jb2xvcnMsbGluZTp7Y29sb3I6bCh7fSxuLm1hcmtlci5saW5lLmNvbG9yLHtkZmx0Om51bGx9KSx3aWR0aDpsKHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2RmbHQ6MX0pLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsc2NhbGVncm91cDpsKHt9LG4uc2NhbGVncm91cCx7fSksdGV4dGluZm86bCh7fSxuLnRleHRpbmZvLHtmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwicGVyY2VudCJdfSksdGV4dHRlbXBsYXRlOnMoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJsYWJlbCIsImNvbG9yIiwidmFsdWUiLCJ0ZXh0IiwicGVyY2VudCJdfSksaG92ZXJpbmZvOmwoe30sYS5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpvKHt9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwidGV4dCIsInBlcmNlbnQiXX0pLHRleHRwb3NpdGlvbjpsKHt9LG4udGV4dHBvc2l0aW9uLHt2YWx1ZXM6WyJpbnNpZGUiLCJub25lIl0sZGZsdDoiaW5zaWRlIn0pLHRleHRmb250Om4udGV4dGZvbnQsaW5zaWRldGV4dGZvbnQ6bi5pbnNpZGV0ZXh0Zm9udCx0aXRsZTp7dGV4dDpuLnRpdGxlLnRleHQsZm9udDpuLnRpdGxlLmZvbnQscG9zaXRpb246bCh7fSxuLnRpdGxlLnBvc2l0aW9uLHt2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiXSxkZmx0OiJ0b3AgY2VudGVyIn0pLGVkaXRUeXBlOiJwbG90In0sZG9tYWluOmkoe25hbWU6ImZ1bm5lbGFyZWEiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLGFzcGVjdHJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGJhc2VyYXRpbzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4zMzMsZWRpdFR5cGU6InBsb3QifX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzkwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NDEsIi4uL3BpZS9hdHRyaWJ1dGVzIjoxMDk0fV0sOTkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIik7ci5uYW1lPSJmdW5uZWxhcmVhIixyLnBsb3Q9ZnVuY3Rpb24odCxlLGEsaSl7bi5wbG90QmFzZVBsb3Qoci5uYW1lLHQsZSxhLGkpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxhLGkpe24uY2xlYW5CYXNlUGxvdChyLm5hbWUsdCxlLGEsaSl9fSx7Ii4uLy4uL3Bsb3RzL3Bsb3RzIjo4MjZ9XSw5OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcGllL2NhbGMiKTtlLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5jYWxjKHQsZSl9LGNyb3NzVHJhY2VDYWxjOmZ1bmN0aW9uKHQpe24uY3Jvc3NUcmFjZUNhbGModCx7dHlwZToiZnVubmVsYXJlYSJ9KX19fSx7Ii4uL3BpZS9jYWxjIjoxMDk2fV0sOTk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQscz10KCIuLi9waWUvZGVmYXVsdHMiKS5oYW5kbGVMYWJlbHNBbmRWYWx1ZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgdT1jKCJsYWJlbHMiKSxoPWMoInZhbHVlcyIpLGY9cyh1LGgpLHA9Zi5sZW47aWYoZS5faGFzTGFiZWxzPWYuaGFzTGFiZWxzLGUuX2hhc1ZhbHVlcz1mLmhhc1ZhbHVlcywhZS5faGFzTGFiZWxzJiZlLl9oYXNWYWx1ZXMmJihjKCJsYWJlbDAiKSxjKCJkbGFiZWwiKSkscCl7ZS5fbGVuZ3RoPXAsYygibWFya2VyLmxpbmUud2lkdGgiKSYmYygibWFya2VyLmxpbmUuY29sb3IiLGwucGFwZXJfYmdjb2xvciksYygibWFya2VyLmNvbG9ycyIpLGMoInNjYWxlZ3JvdXAiKTt2YXIgZCxnPWMoInRleHQiKSx2PWMoInRleHR0ZW1wbGF0ZSIpO2lmKHZ8fChkPWMoInRleHRpbmZvIixBcnJheS5pc0FycmF5KGcpPyJ0ZXh0K3BlcmNlbnQiOiJwZXJjZW50IikpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKSx2fHxkJiYibm9uZSIhPT1kKXt2YXIgbT1jKCJ0ZXh0cG9zaXRpb24iKTtvKHQsZSxsLGMsbSx7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSl9aShlLGwsYyksYygidGl0bGUudGV4dCIpJiYoYygidGl0bGUucG9zaXRpb24iKSxuLmNvZXJjZUZvbnQoYywidGl0bGUuZm9udCIsbC5mb250KSksYygiYXNwZWN0cmF0aW8iKSxjKCJiYXNlcmF0aW8iKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzkwLCIuLi9iYXIvZGVmYXVsdHMiOjg2MCwiLi4vcGllL2RlZmF1bHRzIjoxMDk3LCIuL2F0dHJpYnV0ZXMiOjk5MX1dLDk5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJmdW5uZWxhcmVhIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6WyJwaWUtbGlrZSIsImZ1bm5lbGFyZWEiLCJzaG93TGVnZW5kIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksc3R5bGVPbmU6dCgiLi4vcGllL3N0eWxlX29uZSIpLG1ldGE6e319fSx7Ii4uL3BpZS9zdHlsZV9vbmUiOjExMDUsIi4vYXR0cmlidXRlcyI6OTkxLCIuL2Jhc2VfcGxvdCI6OTkyLCIuL2NhbGMiOjk5MywiLi9kZWZhdWx0cyI6OTk0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo5OTYsIi4vbGF5b3V0X2RlZmF1bHRzIjo5OTcsIi4vcGxvdCI6OTk4LCIuL3N0eWxlIjo5OTl9XSw5OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcGllL2xheW91dF9hdHRyaWJ1dGVzIikuaGlkZGVubGFiZWxzO2UuZXhwb3J0cz17aGlkZGVubGFiZWxzOm4sZnVubmVsYXJlYWNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGVkaXRUeXBlOiJjYWxjIn0sZXh0ZW5kZnVubmVsYXJlYWNvbG9yczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9fX0seyIuLi9waWUvbGF5b3V0X2F0dHJpYnV0ZXMiOjExMDF9XSw5OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXIoImhpZGRlbmxhYmVscyIpLHIoImZ1bm5lbGFyZWFjb2xvcndheSIsZS5jb2xvcndheSkscigiZXh0ZW5kZnVubmVsYXJlYWNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjcxNywiLi9sYXlvdXRfYXR0cmlidXRlcyI6OTk2fV0sOTk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxpPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscz10KCIuLi9iYXIvcGxvdCIpLnRvTW92ZUluc2lkZUJhcixsPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKSxjPWwucmVjb3JkTWluVGV4dFNpemUsdT1sLmNsZWFyTWluVGV4dFNpemUsaD10KCIuLi9waWUvaGVscGVycyIpLGY9dCgiLi4vcGllL3Bsb3QiKSxwPWYuYXR0YWNoRnhIYW5kbGVycyxkPWYuZGV0ZXJtaW5lSW5zaWRlVGV4dEZvbnQsZz1mLmxheW91dEFyZWFzLHY9Zi5wcmVyZW5kZXJUaXRsZXMsbT1mLnBvc2l0aW9uVGl0bGVPdXRzaWRlLHk9Zi5mb3JtYXRTbGljZUxhYmVsO2Z1bmN0aW9uIHgodCxlKXtyZXR1cm4ibCIrKGVbMF0tdFswXSkrIiwiKyhlWzFdLXRbMV0pfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQ7dSgiZnVubmVsYXJlYSIsciksdihlLHQpLGcoZSxyLl9zaXplKSxpLm1ha2VUcmFjZUdyb3VwcyhyLl9mdW5uZWxhcmVhbGF5ZXIsZSwidHJhY2UiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBsPW4uc2VsZWN0KHRoaXMpLHU9ZVswXSxmPXUudHJhY2U7IWZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClyZXR1cm47dmFyIGU9dFswXSxyPWUudHJhY2Usbj1yLmFzcGVjdHJhdGlvLGE9ci5iYXNlcmF0aW87YT4uOTk5JiYoYT0uOTk5KTt2YXIgaSxvPU1hdGgucG93KGEsMikscz1lLnZUb3RhbCxsPXMsYz1zKm8vKDEtbykvcztmdW5jdGlvbiB1KCl7dmFyIHQsZT17eDp0PU1hdGguc3FydChjKSx5Oi10fTtyZXR1cm5bZS54LGUueV19dmFyIGgsZixwPVtdO2ZvcihwLnB1c2godSgpKSxoPXQubGVuZ3RoLTE7aD4tMTtoLS0paWYoIShmPXRbaF0pLmhpZGRlbil7dmFyIGQ9Zi52L2w7Yys9ZCxwLnB1c2godSgpKX12YXIgZz0xLzAsdj0tMS8wO2ZvcihoPTA7aDxwLmxlbmd0aDtoKyspaT1wW2hdLGc9TWF0aC5taW4oZyxpWzFdKSx2PU1hdGgubWF4KHYsaVsxXSk7Zm9yKGg9MDtoPHAubGVuZ3RoO2grKylwW2hdWzFdLT0oditnKS8yO3ZhciBtPXBbcC5sZW5ndGgtMV1bMF0seT1lLnIseD0odi1nKS8yLGI9eS9tLF89eS94Km47Zm9yKGUucj1fKngsaD0wO2g8cC5sZW5ndGg7aCsrKXBbaF1bMF0qPWIscFtoXVsxXSo9Xzt2YXIgdz1bLShpPXBbMF0pWzBdLGlbMV1dLGs9W2lbMF0saVsxXV0sVD0wO2ZvcihoPXQubGVuZ3RoLTE7aD4tMTtoLS0paWYoIShmPXRbaF0pLmhpZGRlbil7dmFyIE09cFtUKz0xXVswXSxBPXBbVF1bMV07Zi5UTD1bLU0sQV0sZi5UUj1bTSxBXSxmLkJMPXcsZi5CUj1rLGYucHhtaWQ9KFM9Zi5UUixFPWYuQlIsWy41KihTWzBdK0VbMF0pLC41KihTWzFdK0VbMV0pXSksdz1mLlRMLGs9Zi5UUn12YXIgUyxFfShlKSxsLmVhY2goZnVuY3Rpb24oKXt2YXIgbD1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuc2xpY2UiKS5kYXRhKGUpO2wuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZSIsITApLGwuZXhpdCgpLnJlbW92ZSgpLGwuZWFjaChmdW5jdGlvbihsLGcpe2lmKGwuaGlkZGVuKW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCxnIikucmVtb3ZlKCk7ZWxzZXtsLnBvaW50TnVtYmVyPWwuaSxsLmN1cnZlTnVtYmVyPWYuaW5kZXg7dmFyIHY9dS5jeCxtPXUuY3ksYj1uLnNlbGVjdCh0aGlzKSxfPWIuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5kYXRhKFtsXSk7Xy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInN1cmZhY2UiLCEwKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoiYWxsIn0pLGIuY2FsbChwLHQsZSk7dmFyIHc9Ik0iKyh2K2wuVFJbMF0pKyIsIisobStsLlRSWzFdKSt4KGwuVFIsbC5CUikreChsLkJSLGwuQkwpK3gobC5CTCxsLlRMKSsiWiI7Xy5hdHRyKCJkIix3KSx5KHQsbCx1KTt2YXIgaz1oLmNhc3RPcHRpb24oZi50ZXh0cG9zaXRpb24sbC5wdHMpLFQ9Yi5zZWxlY3RBbGwoImcuc2xpY2V0ZXh0IikuZGF0YShsLnRleHQmJiJub25lIiE9PWs/WzBdOltdKTtULmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2V0ZXh0IiwhMCksVC5leGl0KCkucmVtb3ZlKCksVC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHU9aS5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInRleHQiLCIiLGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSxoPWkuZW5zdXJlVW5pZm9ybUZvbnRTaXplKHQsZChmLGwsci5mb250KSk7dS50ZXh0KGwudGV4dCkuYXR0cih7Y2xhc3M6InNsaWNldGV4dCIsdHJhbnNmb3JtOiIiLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9KS5jYWxsKGEuZm9udCxoKS5jYWxsKG8uY29udmVydFRvVHNwYW5zLHQpO3ZhciBwLHkseCxiPWEuYkJveCh1Lm5vZGUoKSksXz1NYXRoLm1pbihsLkJMWzFdLGwuQlJbMV0pK20sdz1NYXRoLm1heChsLlRMWzFdLGwuVFJbMV0pK207eT1NYXRoLm1heChsLlRMWzBdLGwuQkxbMF0pK3YseD1NYXRoLm1pbihsLlRSWzBdLGwuQlJbMF0pK3YsKHA9cyh5LHgsXyx3LGIse2lzSG9yaXpvbnRhbDohMCxjb25zdHJhaW5lZDohMCxhbmdsZTowLGFuY2hvcjoibWlkZGxlIn0pKS5mb250U2l6ZT1oLnNpemUsYyhmLnR5cGUscCxyKSxlW2ddLnRyYW5zZm9ybT1wLHUuYXR0cigidHJhbnNmb3JtIixpLmdldFRleHRUcmFuc2Zvcm0ocCkpfSl9fSk7dmFyIGc9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnRpdGxldGV4dCIpLmRhdGEoZi50aXRsZS50ZXh0P1swXTpbXSk7Zy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRpdGxldGV4dCIsITApLGcuZXhpdCgpLnJlbW92ZSgpLGcuZWFjaChmdW5jdGlvbigpe3ZhciBlPWkuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJ0ZXh0IiwiIixmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkscz1mLnRpdGxlLnRleHQ7Zi5fbWV0YSYmKHM9aS50ZW1wbGF0ZVN0cmluZyhzLGYuX21ldGEpKSxlLnRleHQocykuYXR0cih7Y2xhc3M6InRpdGxldGV4dCIsdHJhbnNmb3JtOiIiLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9KS5jYWxsKGEuZm9udCxmLnRpdGxlLmZvbnQpLmNhbGwoby5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIGw9bSh1LHIuX3NpemUpO2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbC54KyIsIitsLnkrIikiKyhsLnNjYWxlPDE/InNjYWxlKCIrbC5zY2FsZSsiKSI6IiIpKyJ0cmFuc2xhdGUoIitsLnR4KyIsIitsLnR5KyIpIil9KX0pfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NDEsIi4uL2Jhci9wbG90Ijo4NjcsIi4uL2Jhci91bmlmb3JtX3RleHQiOjg3MiwiLi4vcGllL2hlbHBlcnMiOjEwOTksIi4uL3BpZS9wbG90IjoxMTAzLGQzOjE2NX1dLDk5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vcGllL3N0eWxlX29uZSIpLGk9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2Z1bm5lbGFyZWFsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpO2kodCxlLCJmdW5uZWxhcmVhIiksZS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKTtyLnN0eWxlKHtvcGFjaXR5OmUub3BhY2l0eX0pLHIuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwoYSx0LGUpfSl9KX19LHsiLi4vYmFyL3VuaWZvcm1fdGV4dCI6ODcyLCIuLi9waWUvc3R5bGVfb25lIjoxMTA1LGQzOjE2NX1dLDEwMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxzPSh0KCIuLi8uLi9jb25zdGFudHMvZG9jcyIpLkZPUk1BVF9MSU5LLHQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0KTtlLmV4cG9ydHM9cyh7ejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx4OnMoe30sbi54LHtpbXBsaWVkRWRpdHM6e3h0eXBlOiJhcnJheSJ9fSkseDA6cyh7fSxuLngwLHtpbXBsaWVkRWRpdHM6e3h0eXBlOiJzY2FsZWQifX0pLGR4OnMoe30sbi5keCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSx5OnMoe30sbi55LHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJhcnJheSJ9fSkseTA6cyh7fSxuLnkwLHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJzY2FsZWQifX0pLGR5OnMoe30sbi5keSx7aW1wbGllZEVkaXRzOnt5dHlwZToic2NhbGVkIn19KSx0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0cmFuc3Bvc2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSx4dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXJyYXkiLCJzY2FsZWQiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHl0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhcnJheSIsInNjYWxlZCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0senNtb290aDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZmFzdCIsImJlc3QiLCExXSxkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJvbmdhcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6Im5vbmUifSxjb25uZWN0Z2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSx4Z2FwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZToicGxvdCJ9LHlnYXA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowLGVkaXRUeXBlOiJwbG90In0semhvdmVyZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6Im5vbmUifSxob3ZlcnRlbXBsYXRlOmkoKSxzaG93bGVnZW5kOnMoe30sYS5zaG93bGVnZW5kLHtkZmx0OiExfSl9LHt0cmFuc2Zvcm1zOnZvaWQgMH0sbygiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTk5LCIuLi8uLi9jb25zdGFudHMvZG9jcyI6Njg4LCIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc2MiwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODQxLCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExMjB9XSwxMDAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi9oaXN0b2dyYW0yZC9jYWxjIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLGw9dCgiLi9jb252ZXJ0X2NvbHVtbl94eXoiKSxjPXQoIi4vY2xlYW5fMmRfYXJyYXkiKSx1PXQoIi4vaW50ZXJwMmQiKSxoPXQoIi4vZmluZF9lbXB0aWVzIiksZj10KCIuL21ha2VfYm91bmRfYXJyYXkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixwLGQsZyx2LG0seSx4LGIsXz1pLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4Iiksdz1pLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iiksaz1uLnRyYWNlSXMoZSwiY29udG91ciIpLFQ9bi50cmFjZUlzKGUsImhpc3RvZ3JhbSIpLE09bi50cmFjZUlzKGUsImdsMmQiKSxBPWs/ImJlc3QiOmUuenNtb290aDtpZihfLl9taW5EdGljaz0wLHcuX21pbkR0aWNrPTAsVClyPShiPW8odCxlKSkueCxwPWIueDAsZD1iLmR4LGc9Yi55LHY9Yi55MCxtPWIuZHkseT1iLno7ZWxzZXt2YXIgUz1lLno7YS5pc0FycmF5MUQoUyk/KGwoZSxfLHcsIngiLCJ5IixbInoiXSkscj1lLl94LGc9ZS5feSxTPWUuX3opOihyPWUuX3g9ZS54P18ubWFrZUNhbGNkYXRhKGUsIngiKTpbXSxnPWUuX3k9ZS55P3cubWFrZUNhbGNkYXRhKGUsInkiKTpbXSkscD1lLngwLGQ9ZS5keCx2PWUueTAsbT1lLmR5LHk9YyhTLGUsXyx3KSwoa3x8ZS5jb25uZWN0Z2FwcykmJihlLl9lbXB0eXBvaW50cz1oKHkpLHUoeSxlLl9lbXB0eXBvaW50cykpfWZ1bmN0aW9uIEUodCl7QT1lLl9pbnB1dC56c21vb3RoPWUuenNtb290aD0hMSxhLndhcm4oJ2Nhbm5vdCB1c2UgenNtb290aDogImZhc3QiOiAnK3QpfWlmKCJmYXN0Ij09PUEpaWYoImxvZyI9PT1fLnR5cGV8fCJsb2ciPT09dy50eXBlKUUoImxvZyBheGlzIGZvdW5kIik7ZWxzZSBpZighVCl7aWYoci5sZW5ndGgpe3ZhciBMPShyW3IubGVuZ3RoLTFdLXJbMF0pLyhyLmxlbmd0aC0xKSxDPU1hdGguYWJzKEwvMTAwKTtmb3IoeD0wO3g8ci5sZW5ndGgtMTt4KyspaWYoTWF0aC5hYnMoclt4KzFdLXJbeF0tTCk+Qyl7RSgieCBzY2FsZSBpcyBub3QgbGluZWFyIik7YnJlYWt9fWlmKGcubGVuZ3RoJiYiZmFzdCI9PT1BKXt2YXIgUD0oZ1tnLmxlbmd0aC0xXS1nWzBdKS8oZy5sZW5ndGgtMSksTz1NYXRoLmFicyhQLzEwMCk7Zm9yKHg9MDt4PGcubGVuZ3RoLTE7eCsrKWlmKE1hdGguYWJzKGdbeCsxXS1nW3hdLVApPk8pe0UoInkgc2NhbGUgaXMgbm90IGxpbmVhciIpO2JyZWFrfX19dmFyIHo9YS5tYXhSb3dMZW5ndGgoeSksST0ic2NhbGVkIj09PWUueHR5cGU/IiI6cixEPWYoZSxJLHAsZCx6LF8pLFI9InNjYWxlZCI9PT1lLnl0eXBlPyIiOmcsRj1mKGUsUix2LG0seS5sZW5ndGgsdyk7TXx8KGUuX2V4dHJlbWVzW18uX2lkXT1pLmZpbmRFeHRyZW1lcyhfLEQpLGUuX2V4dHJlbWVzW3cuX2lkXT1pLmZpbmRFeHRyZW1lcyh3LEYpKTt2YXIgQj17eDpELHk6Rix6OnksdGV4dDplLl90ZXh0fHxlLnRleHQsaG92ZXJ0ZXh0OmUuX2hvdmVydGV4dHx8ZS5ob3ZlcnRleHR9O2lmKEkmJkkubGVuZ3RoPT09RC5sZW5ndGgtMSYmKEIueENlbnRlcj1JKSxSJiZSLmxlbmd0aD09PUYubGVuZ3RoLTEmJihCLnlDZW50ZXI9UiksVCYmKEIueFJhbmdlcz1iLnhSYW5nZXMsQi55UmFuZ2VzPWIueVJhbmdlcyxCLnB0cz1iLnB0cyksa3x8cyh0LGUse3ZhbHM6eSxjTGV0dGVyOiJ6In0pLGsmJmUuY29udG91cnMmJiJoZWF0bWFwIj09PWUuY29udG91cnMuY29sb3Jpbmcpe3ZhciBOPXt0eXBlOiJjb250b3VyIj09PWUudHlwZT8iaGVhdG1hcCI6Imhpc3RvZ3JhbTJkIix4Y2FsZW5kYXI6ZS54Y2FsZW5kYXIseWNhbGVuZGFyOmUueWNhbGVuZGFyfTtCLnhmaWxsPWYoTixJLHAsZCx6LF8pLEIueWZpbGw9ZihOLFIsdixtLHkubGVuZ3RoLHcpfXJldHVybltCXX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYwMCwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4uL2hpc3RvZ3JhbTJkL2NhbGMiOjEwMzIsIi4vY2xlYW5fMmRfYXJyYXkiOjEwMDIsIi4vY29udmVydF9jb2x1bW5feHl6IjoxMDA0LCIuL2ZpbmRfZW1wdGllcyI6MTAwNiwiLi9pbnRlcnAyZCI6MTAwOSwiLi9tYWtlX2JvdW5kX2FycmF5IjoxMDEwfV0sMTAwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsLGMsdSxoLGY7ZnVuY3Rpb24gcCh0KXtpZihuKHQpKXJldHVybit0fWlmKGUmJmUudHJhbnNwb3NlKXtmb3Iocz0wLGg9MDtoPHQubGVuZ3RoO2grKylzPU1hdGgubWF4KHMsdFtoXS5sZW5ndGgpO2lmKDA9PT1zKXJldHVybiExO2M9ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSx1PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odFtyXXx8W10pW2VdfX1lbHNlIHM9dC5sZW5ndGgsYz1mdW5jdGlvbih0LGUpe3JldHVybiB0W2VdLmxlbmd0aH0sdT1mdW5jdGlvbih0LGUscil7cmV0dXJuKHRbZV18fFtdKVtyXX07dmFyIGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPT09aXx8cj09PWk/aTp1KHQsZSxyKX07ZnVuY3Rpb24gZyh0KXtpZihlJiYiY2FycGV0IiE9PWUudHlwZSYmImNvbnRvdXJjYXJwZXQiIT09ZS50eXBlJiZ0JiYiY2F0ZWdvcnkiPT09dC50eXBlJiZlWyJfIit0Ll9pZC5jaGFyQXQoMCldLmxlbmd0aCl7dmFyIHI9dC5faWQuY2hhckF0KDApLG49e30sbz1lWyJfIityKyJDYXRlZ29yeU1hcCJdfHxlW3JdO2ZvcihoPTA7aDxvLmxlbmd0aDtoKyspbltvW2hdXT1oO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1uW3QuX2NhdGVnb3JpZXNbZV1dO3JldHVybiByKzE/cjppfX1yZXR1cm4gYS5pZGVudGl0eX12YXIgdj1nKHIpLG09ZyhvKTtvJiYiY2F0ZWdvcnkiPT09by50eXBlJiYocz1vLl9jYXRlZ29yaWVzLmxlbmd0aCk7dmFyIHk9bmV3IEFycmF5KHMpO2ZvcihoPTA7aDxzO2grKylmb3IobD1yJiYiY2F0ZWdvcnkiPT09ci50eXBlP3IuX2NhdGVnb3JpZXMubGVuZ3RoOmModCxoKSx5W2hdPW5ldyBBcnJheShsKSxmPTA7ZjxsO2YrKyl5W2hdW2ZdPXAoZCh0LG0oaCksdihmKSkpO3JldHVybiB5fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2OTMsIi4uLy4uL2xpYiI6NzE3LCJmYXN0LWlzbnVtZXJpYyI6MjI4fV0sMTAwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21pbjoiem1pbiIsbWF4OiJ6bWF4In19LHt9XSwxMDA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxvLHMpe3ZhciBsLGMsdSxoLGY9dC5fbGVuZ3RoLHA9ZS5tYWtlQ2FsY2RhdGEodCxpKSxkPXIubWFrZUNhbGNkYXRhKHQsbyksZz10LnRleHQsdj12b2lkIDAhPT1nJiZuLmlzQXJyYXkxRChnKSxtPXQuaG92ZXJ0ZXh0LHk9dm9pZCAwIT09bSYmbi5pc0FycmF5MUQobSkseD1uLmRpc3RpbmN0VmFscyhwKSxiPXgudmFscyxfPW4uZGlzdGluY3RWYWxzKGQpLHc9Xy52YWxzLGs9W107Zm9yKGw9MDtsPHMubGVuZ3RoO2wrKylrW2xdPW4uaW5pdDJkQXJyYXkody5sZW5ndGgsYi5sZW5ndGgpO3YmJih1PW4uaW5pdDJkQXJyYXkody5sZW5ndGgsYi5sZW5ndGgpKSx5JiYoaD1uLmluaXQyZEFycmF5KHcubGVuZ3RoLGIubGVuZ3RoKSk7dmFyIFQ9bi5pbml0MmRBcnJheSh3Lmxlbmd0aCxiLmxlbmd0aCk7Zm9yKGw9MDtsPGY7bCsrKWlmKHBbbF0hPT1hJiZkW2xdIT09YSl7dmFyIE09bi5maW5kQmluKHBbbF0reC5taW5EaWZmLzIsYiksQT1uLmZpbmRCaW4oZFtsXStfLm1pbkRpZmYvMix3KTtmb3IoYz0wO2M8cy5sZW5ndGg7YysrKXt2YXIgUz10W3NbY11dO2tbY11bQV1bTV09U1tsXSxUW0FdW01dPWx9diYmKHVbQV1bTV09Z1tsXSkseSYmKGhbQV1bTV09bVtsXSl9Zm9yKHRbIl8iK2ldPWIsdFsiXyIrb109dyxjPTA7YzxzLmxlbmd0aDtjKyspdFsiXyIrc1tjXV09a1tjXTt2JiYodC5fdGV4dD11KSx5JiYodC5faG92ZXJ0ZXh0PWgpLGUmJiJjYXRlZ29yeSI9PT1lLnR5cGUmJih0WyJfIitpKyJDYXRlZ29yeU1hcCJdPWIubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9jYXRlZ29yaWVzW3RdfSkpLHImJiJjYXRlZ29yeSI9PT1yLnR5cGUmJih0WyJfIitvKyJDYXRlZ29yeU1hcCJdPXcubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByLl9jYXRlZ29yaWVzW3RdfSkpLHQuX2FmdGVyMmJlZm9yZT1UfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2OTMsIi4uLy4uL2xpYiI6NzE3fV0sMTAwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4veHl6X2RlZmF1bHRzIiksaT10KCIuL3N0eWxlX2RlZmF1bHRzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsYSl9YSh0LGUsYyxsKT8oYygidGV4dCIpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKSxpKHQsZSxjLGwpLGMoImhvdmVyb25nYXBzIiksYygiY29ubmVjdGdhcHMiLG4uaXNBcnJheTFEKGUueikmJiExIT09ZS56c21vb3RoKSxvKHQsZSxsLGMse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjAyLCIuLi8uLi9saWIiOjcxNywiLi9hdHRyaWJ1dGVzIjoxZTMsIi4vc3R5bGVfZGVmYXVsdHMiOjEwMTMsIi4veHl6X2RlZmF1bHRzIjoxMDE0fV0sMTAwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5tYXhSb3dMZW5ndGg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYSxpLG8scyxsLGMsdT1bXSxoPXt9LGY9W10scD10WzBdLGQ9W10sZz1bMCwwLDBdLHY9bih0KTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihlPWQsZD1wLHA9dFtyKzFdfHxbXSxhPTA7YTx2O2ErKyl2b2lkIDA9PT1kW2FdJiYoKHM9KHZvaWQgMCE9PWRbYS0xXT8xOjApKyh2b2lkIDAhPT1kW2ErMV0/MTowKSsodm9pZCAwIT09ZVthXT8xOjApKyh2b2lkIDAhPT1wW2FdPzE6MCkpPygwPT09ciYmcysrLDA9PT1hJiZzKysscj09PXQubGVuZ3RoLTEmJnMrKyxhPT09ZC5sZW5ndGgtMSYmcysrLHM8NCYmKGhbW3IsYV1dPVtyLGEsc10pLHUucHVzaChbcixhLHNdKSk6Zi5wdXNoKFtyLGFdKSk7Zm9yKDtmLmxlbmd0aDspe2ZvcihsPXt9LGM9ITEsbz1mLmxlbmd0aC0xO28+PTA7by0tKShzPSgoaFtbKHI9KGk9ZltvXSlbMF0pLTEsYT1pWzFdXV18fGcpWzJdKyhoW1tyKzEsYV1dfHxnKVsyXSsoaFtbcixhLTFdXXx8ZylbMl0rKGhbW3IsYSsxXV18fGcpWzJdKS8yMCkmJihsW2ldPVtyLGEsc10sZi5zcGxpY2UobywxKSxjPSEwKTtpZighYyl0aHJvdyJmaW5kRW1wdGllcyBpdGVyYXRlZCB3aXRoIG5vIG5ldyBuZWlnaGJvcnMiO2ZvcihpIGluIGwpaFtpXT1sW2ldLHUucHVzaChsW2ldKX1yZXR1cm4gdS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMl0tdFsyXX0pfX0seyIuLi8uLi9saWIiOjcxN31dLDEwMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCxjKXt2YXIgdSxoLGYscCxkPXQuY2RbMF0sZz1kLnRyYWNlLHY9dC54YSxtPXQueWEseT1kLngseD1kLnksYj1kLnosXz1kLnhDZW50ZXIsdz1kLnlDZW50ZXIsaz1kLnptYXNrLFQ9Zy56aG92ZXJmb3JtYXQsTT15LEE9eDtpZighMSE9PXQuaW5kZXgpe3RyeXtmPU1hdGgucm91bmQodC5pbmRleFsxXSkscD1NYXRoLnJvdW5kKHQuaW5kZXhbMF0pfWNhdGNoKGUpe3JldHVybiB2b2lkIGEuZXJyb3IoIkVycm9yIGhvdmVyaW5nIG9uIGhlYXRtYXAsIHBvaW50TnVtYmVyIG11c3QgYmUgW3Jvdyxjb2xdLCBmb3VuZDoiLHQuaW5kZXgpfWlmKGY8MHx8Zj49YlswXS5sZW5ndGh8fHA8MHx8cD5iLmxlbmd0aClyZXR1cm59ZWxzZXtpZihuLmluYm94KGUteVswXSxlLXlbeS5sZW5ndGgtMV0sMCk+MHx8bi5pbmJveChyLXhbMF0sci14W3gubGVuZ3RoLTFdLDApPjApcmV0dXJuO2lmKGMpe3ZhciBTO2ZvcihNPVsyKnlbMF0teVsxXV0sUz0xO1M8eS5sZW5ndGg7UysrKU0ucHVzaCgoeVtTXSt5W1MtMV0pLzIpO2ZvcihNLnB1c2goWzIqeVt5Lmxlbmd0aC0xXS15W3kubGVuZ3RoLTJdXSksQT1bMip4WzBdLXhbMV1dLFM9MTtTPHgubGVuZ3RoO1MrKylBLnB1c2goKHhbU10reFtTLTFdKS8yKTtBLnB1c2goWzIqeFt4Lmxlbmd0aC0xXS14W3gubGVuZ3RoLTJdXSl9Zj1NYXRoLm1heCgwLE1hdGgubWluKE0ubGVuZ3RoLTIsYS5maW5kQmluKGUsTSkpKSxwPU1hdGgubWF4KDAsTWF0aC5taW4oQS5sZW5ndGgtMixhLmZpbmRCaW4ocixBKSkpfXZhciBFPXYuYzJwKHlbZl0pLEw9di5jMnAoeVtmKzFdKSxDPW0uYzJwKHhbcF0pLFA9bS5jMnAoeFtwKzFdKTtjPyhMPUUsdT15W2ZdLFA9QyxoPXhbcF0pOih1PV8/X1tmXTooeVtmXSt5W2YrMV0pLzIsaD13P3dbcF06KHhbcF0reFtwKzFdKS8yLHYmJiJjYXRlZ29yeSI9PT12LnR5cGUmJih1PXlbZl0pLG0mJiJjYXRlZ29yeSI9PT1tLnR5cGUmJihoPXhbcF0pLGcuenNtb290aCYmKEU9TD12LmMycCh1KSxDPVA9bS5jMnAoaCkpKTt2YXIgTz1iW3BdW2ZdO2lmKGsmJiFrW3BdW2ZdJiYoTz12b2lkIDApLHZvaWQgMCE9PU98fGcuaG92ZXJvbmdhcHMpe3ZhciB6O0FycmF5LmlzQXJyYXkoZC5ob3ZlcnRleHQpJiZBcnJheS5pc0FycmF5KGQuaG92ZXJ0ZXh0W3BdKT96PWQuaG92ZXJ0ZXh0W3BdW2ZdOkFycmF5LmlzQXJyYXkoZC50ZXh0KSYmQXJyYXkuaXNBcnJheShkLnRleHRbcF0pJiYoej1kLnRleHRbcF1bZl0pO3ZhciBJPW8oZyksRD17dHlwZToibGluZWFyIixyYW5nZTpbSS5taW4sSS5tYXhdLGhvdmVyZm9ybWF0OlQsX3NlcGFyYXRvcnM6di5fc2VwYXJhdG9ycyxfbnVtRm9ybWF0OnYuX251bUZvcm1hdH0sUj1pLnRpY2tUZXh0KEQsTywiaG92ZXIiKS50ZXh0O3JldHVyblthLmV4dGVuZEZsYXQodCx7aW5kZXg6Zy5fYWZ0ZXIyYmVmb3JlP2cuX2FmdGVyMmJlZm9yZVtwXVtmXTpbcCxmXSxkaXN0YW5jZTp0Lm1heEhvdmVyRGlzdGFuY2Usc3Bpa2VEaXN0YW5jZTp0Lm1heFNwaWtlRGlzdGFuY2UseDA6RSx4MTpMLHkwOkMseTE6UCx4TGFiZWxWYWw6dSx5TGFiZWxWYWw6aCx6TGFiZWxWYWw6Tyx6TGFiZWw6Uix0ZXh0Onp9KV19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYwNCwiLi4vLi4vY29tcG9uZW50cy9meCI6NjMwLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NX1dLDEwMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksY29sb3JiYXI6dCgiLi9jb2xvcmJhciIpLHN0eWxlOnQoIi4vc3R5bGUiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImhlYXRtYXAiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NiwiLi9hdHRyaWJ1dGVzIjoxZTMsIi4vY2FsYyI6MTAwMSwiLi9jb2xvcmJhciI6MTAwMywiLi9kZWZhdWx0cyI6MTAwNSwiLi9ob3ZlciI6MTAwNywiLi9wbG90IjoxMDExLCIuL3N0eWxlIjoxMDEyfV0sMTAwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPVtbLTEsMF0sWzEsMF0sWzAsLTFdLFswLDFdXTtmdW5jdGlvbiBpKHQpe3JldHVybi41LS4yNSpNYXRoLm1pbigxLC41KnQpfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuLGksbyxzLGwsYyx1LGgsZixwLGQsZyx2LG09MDtmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKXtmb3IoaT0obj1lW3NdKVswXSxvPW5bMV0sZD10W2ldW29dLHA9MCxmPTAsbD0wO2w8NDtsKyspKHU9dFtpKyhjPWFbbF0pWzBdXSkmJnZvaWQgMCE9PShoPXVbbytjWzFdXSkmJigwPT09cD9nPXY9aDooZz1NYXRoLm1pbihnLGgpLHY9TWF0aC5tYXgodixoKSksZisrLHArPWgpO2lmKDA9PT1mKXRocm93Iml0ZXJhdGVJbnRlcnAyZCBvcmRlciBpcyB3cm9uZzogbm8gZGVmaW5lZCBuZWlnaGJvcnMiO3RbaV1bb109cC9mLHZvaWQgMD09PWQ/Zjw0JiYobT0xKToodFtpXVtvXT0oMStyKSp0W2ldW29dLXIqZCx2PmcmJihtPU1hdGgubWF4KG0sTWF0aC5hYnModFtpXVtvXS1kKS8odi1nKSkpKX1yZXR1cm4gbX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhPTE7Zm9yKG8odCxlKSxyPTA7cjxlLmxlbmd0aCYmIShlW3JdWzJdPDQpO3IrKyk7Zm9yKGU9ZS5zbGljZShyKSxyPTA7cjwxMDAmJmE+LjAxO3IrKylhPW8odCxlLGkoYSkpO3JldHVybiBhPi4wMSYmbi5sb2coImludGVycDJkIGRpZG4ndCBjb252ZXJnZSBxdWlja2x5IixhKSx0fX0seyIuLi8uLi9saWIiOjcxN31dLDEwMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksbyxzKXt2YXIgbCxjLHUsaD1bXSxmPW4udHJhY2VJcyh0LCJjb250b3VyIikscD1uLnRyYWNlSXModCwiaGlzdG9ncmFtIiksZD1uLnRyYWNlSXModCwiZ2wyZCIpO2lmKGEoZSkmJmUubGVuZ3RoPjEmJiFwJiYiY2F0ZWdvcnkiIT09cy50eXBlKXt2YXIgZz1lLmxlbmd0aDtpZighKGc8PW8pKXJldHVybiBmP2Uuc2xpY2UoMCxvKTplLnNsaWNlKDAsbysxKTtpZihmfHxkKWg9ZS5zbGljZSgwLG8pO2Vsc2UgaWYoMT09PW8paD1bZVswXS0uNSxlWzBdKy41XTtlbHNle2ZvcihoPVsxLjUqZVswXS0uNSplWzFdXSx1PTE7dTxnO3UrKyloLnB1c2goLjUqKGVbdS0xXStlW3VdKSk7aC5wdXNoKDEuNSplW2ctMV0tLjUqZVtnLTJdKX1pZihnPG8pe3ZhciB2PWhbaC5sZW5ndGgtMV0sbT12LWhbaC5sZW5ndGgtMl07Zm9yKHU9Zzt1PG87dSsrKXYrPW0saC5wdXNoKHYpfX1lbHNle3ZhciB5PXRbcy5faWQuY2hhckF0KDApKyJjYWxlbmRhciJdO2lmKHApbD1zLnIyYyhyLDAseSk7ZWxzZSBpZihhKGUpJiYxPT09ZS5sZW5ndGgpbD1lWzBdO2Vsc2UgaWYodm9pZCAwPT09cilsPTA7ZWxzZXtsPSgibG9nIj09PXMudHlwZT9zLmQyYzpzLnIyYykociwwLHkpfWZvcihjPWl8fDEsdT1mfHxkPzA6LS41O3U8bzt1KyspaC5wdXNoKGwrYyp1KX1yZXR1cm4gaH19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDZ9XSwxMDExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCJ0aW55Y29sb3IyIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2UsbD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO2Z1bmN0aW9uIGModCxlKXt2YXIgcj1lLmxlbmd0aC0yLG49by5jb25zdHJhaW4oby5maW5kQmluKHQsZSksMCxyKSxhPWVbbl0saT1lW24rMV0scz1vLmNvbnN0cmFpbihuKyh0LWEpLyhpLWEpLS41LDAsciksbD1NYXRoLnJvdW5kKHMpLGM9TWF0aC5hYnMocy1sKTtyZXR1cm4gcyYmcyE9PXImJmM/e2JpbjA6bCxmcmFjOmMsYmluMTpNYXRoLnJvdW5kKGwrYy8ocy1sKSl9OntiaW4wOmwsYmluMTpsLGZyYWM6MH19ZnVuY3Rpb24gdSh0LGUpe3ZhciByPWUubGVuZ3RoLTEsbj1vLmNvbnN0cmFpbihvLmZpbmRCaW4odCxlKSwwLHIpLGE9ZVtuXSxpPSh0LWEpLyhlW24rMV0tYSl8fDA7cmV0dXJuIGk8PTA/e2JpbjA6bixiaW4xOm4sZnJhYzowfTppPC41P3tiaW4wOm4sYmluMTpuKzEsZnJhYzppfTp7YmluMDpuKzEsYmluMTpuLGZyYWM6MS1pfX1mdW5jdGlvbiBoKHQsZSxyKXt0W2VdPXJbMF0sdFtlKzFdPXJbMV0sdFtlKzJdPXJbMl0sdFtlKzNdPU1hdGgucm91bmQoMjU1KnJbM10pfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXt2YXIgcD1lLnhheGlzLGQ9ZS55YXhpcztvLm1ha2VUcmFjZUdyb3VwcyhmLHIsImhtIikuZWFjaChmdW5jdGlvbihlKXt2YXIgcixmLGcsdixtLHkseD1uLnNlbGVjdCh0aGlzKSxiPWVbMF0sXz1iLnRyYWNlLHc9Yi56LGs9Yi54LFQ9Yi55LE09Yi54Q2VudGVyLEE9Yi55Q2VudGVyLFM9aS50cmFjZUlzKF8sImNvbnRvdXIiKSxFPVM/ImJlc3QiOl8uenNtb290aCxMPXcubGVuZ3RoLEM9by5tYXhSb3dMZW5ndGgodyksUD0hMSxPPSExO2Zvcih5PTA7dm9pZCAwPT09ciYmeTxrLmxlbmd0aC0xOylyPXAuYzJwKGtbeV0pLHkrKztmb3IoeT1rLmxlbmd0aC0xO3ZvaWQgMD09PWYmJnk+MDspZj1wLmMycChrW3ldKSx5LS07Zm9yKGY8ciYmKGc9ZixmPXIscj1nLFA9ITApLHk9MDt2b2lkIDA9PT12JiZ5PFQubGVuZ3RoLTE7KXY9ZC5jMnAoVFt5XSkseSsrO2Zvcih5PVQubGVuZ3RoLTE7dm9pZCAwPT09bSYmeT4wOyltPWQuYzJwKFRbeV0pLHktLTtpZihtPHYmJihnPXYsdj1tLG09ZyxPPSEwKSxTJiYoTT1rLEE9VCxrPWIueGZpbGwsVD1iLnlmaWxsKSwiZmFzdCIhPT1FKXt2YXIgej0iYmVzdCI9PT1FPzA6LjU7cj1NYXRoLm1heCgteipwLl9sZW5ndGgsciksZj1NYXRoLm1pbigoMSt6KSpwLl9sZW5ndGgsZiksdj1NYXRoLm1heCgteipkLl9sZW5ndGgsdiksbT1NYXRoLm1pbigoMSt6KSpkLl9sZW5ndGgsbSl9dmFyIEk9TWF0aC5yb3VuZChmLXIpLEQ9TWF0aC5yb3VuZChtLXYpO2lmKEk8PTB8fEQ8PTApe3guc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoW10pLmV4aXQoKS5yZW1vdmUoKX1lbHNle3ZhciBSLEY7ImZhc3QiPT09RT8oUj1DLEY9TCk6KFI9SSxGPUQpO3ZhciBCPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO0Iud2lkdGg9UixCLmhlaWdodD1GO3ZhciBOLGosVj1CLmdldENvbnRleHQoIjJkIiksVT1zKF8se25vTnVtZXJpY0NoZWNrOiEwLHJldHVybkFycmF5OiEwfSk7ImZhc3QiPT09RT8oTj1QP2Z1bmN0aW9uKHQpe3JldHVybiBDLTEtdH06by5pZGVudGl0eSxqPU8/ZnVuY3Rpb24odCl7cmV0dXJuIEwtMS10fTpvLmlkZW50aXR5KTooTj1mdW5jdGlvbih0KXtyZXR1cm4gby5jb25zdHJhaW4oTWF0aC5yb3VuZChwLmMycChrW3RdKS1yKSwwLEkpfSxqPWZ1bmN0aW9uKHQpe3JldHVybiBvLmNvbnN0cmFpbihNYXRoLnJvdW5kKGQuYzJwKFRbdF0pLXYpLDAsRCl9KTt2YXIgcSxILEcsWSxXLFg9aigwKSxaPVtYLFhdLEo9UD8wOjEsSz1PPzA6MSxRPTAsJD0wLHR0PTAsZXQ9MDtpZihFKXt2YXIgcnQsbnQ9MDt0cnl7cnQ9bmV3IFVpbnQ4QXJyYXkoSSpEKjQpfWNhdGNoKHQpe3J0PW5ldyBBcnJheShJKkQqNCl9aWYoImJlc3QiPT09RSl7dmFyIGF0LGl0LG90LHN0PU18fGssbHQ9QXx8VCxjdD1uZXcgQXJyYXkoc3QubGVuZ3RoKSx1dD1uZXcgQXJyYXkobHQubGVuZ3RoKSxodD1uZXcgQXJyYXkoSSksZnQ9TT91OmMscHQ9QT91OmM7Zm9yKHk9MDt5PHN0Lmxlbmd0aDt5KyspY3RbeV09TWF0aC5yb3VuZChwLmMycChzdFt5XSktcik7Zm9yKHk9MDt5PGx0Lmxlbmd0aDt5KyspdXRbeV09TWF0aC5yb3VuZChkLmMycChsdFt5XSktdik7Zm9yKHk9MDt5PEk7eSsrKWh0W3ldPWZ0KHksY3QpO2ZvcihIPTA7SDxEO0grKylmb3IoaXQ9d1soYXQ9cHQoSCx1dCkpLmJpbjBdLG90PXdbYXQuYmluMV0seT0wO3k8STt5KyssbnQrPTQpaChydCxudCxXPVR0KGl0LG90LGh0W3ldLGF0KSl9ZWxzZSBmb3IoSD0wO0g8TDtIKyspZm9yKFk9d1tIXSxaPWooSCkseT0wO3k8STt5KyspVz1rdChZW3ldLDEpLGgocnQsbnQ9NCooWipJK04oeSkpLFcpO3ZhciBkdD1WLmNyZWF0ZUltYWdlRGF0YShJLEQpO3RyeXtkdC5kYXRhLnNldChydCl9Y2F0Y2godCl7dmFyIGd0PWR0LmRhdGEsdnQ9Z3QubGVuZ3RoO2ZvcihIPTA7SDx2dDtIKyspZ3RbSF09cnRbSF19Vi5wdXRJbWFnZURhdGEoZHQsMCwwKX1lbHNle3ZhciBtdD1fLnhnYXAseXQ9Xy55Z2FwLHh0PU1hdGguZmxvb3IobXQvMiksYnQ9TWF0aC5mbG9vcih5dC8yKTtmb3IoSD0wO0g8TDtIKyspaWYoWT13W0hdLFoucmV2ZXJzZSgpLFpbS109aihIKzEpLFpbMF0hPT1aWzFdJiZ2b2lkIDAhPT1aWzBdJiZ2b2lkIDAhPT1aWzFdKWZvcihxPVtHPU4oMCksR10seT0wO3k8Qzt5KyspcS5yZXZlcnNlKCkscVtKXT1OKHkrMSkscVswXSE9PXFbMV0mJnZvaWQgMCE9PXFbMF0mJnZvaWQgMCE9PXFbMV0mJihXPWt0KFlbeV0sKHFbMV0tcVswXSkqKFpbMV0tWlswXSkpLFYuZmlsbFN0eWxlPSJyZ2JhKCIrVy5qb2luKCIsIikrIikiLFYuZmlsbFJlY3QocVswXSt4dCxaWzBdK2J0LHFbMV0tcVswXS1tdCxaWzFdLVpbMF0teXQpKX0kPU1hdGgucm91bmQoJC9RKSx0dD1NYXRoLnJvdW5kKHR0L1EpLGV0PU1hdGgucm91bmQoZXQvUSk7dmFyIF90PWEoInJnYigiKyQrIiwiK3R0KyIsIitldCsiKSIpO3QuX2htcGl4Y291bnQ9KHQuX2htcGl4Y291bnR8fDApK1EsdC5faG1sdW1jb3VudD0odC5faG1sdW1jb3VudHx8MCkrUSpfdC5nZXRMdW1pbmFuY2UoKTt2YXIgd3Q9eC5zZWxlY3RBbGwoImltYWdlIikuZGF0YShlKTt3dC5lbnRlcigpLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6bC5zdmcscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSx3dC5hdHRyKHtoZWlnaHQ6RCx3aWR0aDpJLHg6cix5OnYsInhsaW5rOmhyZWYiOkIudG9EYXRhVVJMKCJpbWFnZS9wbmciKX0pfWZ1bmN0aW9uIGt0KHQsZSl7aWYodm9pZCAwIT09dCl7dmFyIHI9VSh0KTtyZXR1cm4gclswXT1NYXRoLnJvdW5kKHJbMF0pLHJbMV09TWF0aC5yb3VuZChyWzFdKSxyWzJdPU1hdGgucm91bmQoclsyXSksUSs9ZSwkKz1yWzBdKmUsdHQrPXJbMV0qZSxldCs9clsyXSplLHJ9cmV0dXJuWzAsMCwwLDBdfWZ1bmN0aW9uIFR0KHQsZSxyLG4pe3ZhciBhPXRbci5iaW4wXTtpZih2b2lkIDA9PT1hKXJldHVybiBrdCh2b2lkIDAsMSk7dmFyIGksbz10W3IuYmluMV0scz1lW3IuYmluMF0sbD1lW3IuYmluMV0sYz1vLWF8fDAsdT1zLWF8fDA7cmV0dXJuIGk9dm9pZCAwPT09bz92b2lkIDA9PT1sPzA6dm9pZCAwPT09cz8yKihsLWEpOjIqKDIqbC1zLWEpLzM6dm9pZCAwPT09bD92b2lkIDA9PT1zPzA6MiooMiphLW8tcykvMzp2b2lkIDA9PT1zPzIqKDIqbC1vLWEpLzM6bCthLW8tcyxrdChhK3IuZnJhYypjK24uZnJhYyoodStyLmZyYWMqaSkpfX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYwNCwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjY5NCwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsZDM6MTY1LHRpbnljb2xvcjI6NTM2fV0sMTAxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5obSBpbWFnZSIpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC50cmFjZS5vcGFjaXR5fSl9fSx7ZDM6MTY1fV0sMTAxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyExPT09cigienNtb290aCIpJiYocigieGdhcCIpLHIoInlnYXAiKSkscigiemhvdmVyZm9ybWF0Iil9fSx7fV0sMTAxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIG8odCxlKXt2YXIgcj1lKHQpO3JldHVybiJzY2FsZWQiPT09KHI/ZSh0KyJ0eXBlIiwiYXJyYXkiKToic2NhbGVkIikmJihlKHQrIjAiKSxlKCJkIit0KSkscn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsLGMpe3ZhciB1LGgsZj1yKCJ6Iik7aWYobD1sfHwieCIsYz1jfHwieSIsdm9pZCAwPT09Znx8IWYubGVuZ3RoKXJldHVybiAwO2lmKGEuaXNBcnJheTFEKHQueikpe3U9cihsKSxoPXIoYyk7dmFyIHA9YS5taW5Sb3dMZW5ndGgodSksZD1hLm1pblJvd0xlbmd0aChoKTtpZigwPT09cHx8MD09PWQpcmV0dXJuIDA7ZS5fbGVuZ3RoPU1hdGgubWluKHAsZCxmLmxlbmd0aCl9ZWxzZXtpZih1PW8obCxyKSxoPW8oYyxyKSwhZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9ITAsaT0hMSxvPSExLHM9MDtzPHQubGVuZ3RoO3MrKyl7aWYoZT10W3NdLCFhLmlzQXJyYXlPclR5cGVkQXJyYXkoZSkpe3I9ITE7YnJlYWt9ZS5sZW5ndGg+MCYmKGk9ITApO2Zvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKWlmKG4oZVtsXSkpe289ITA7YnJlYWt9fXJldHVybiByJiZpJiZvfShmKSlyZXR1cm4gMDtyKCJ0cmFuc3Bvc2UiKSxlLl9sZW5ndGg9bnVsbH1yZXR1cm4gaS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsW2wsY10scyksITB9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCJmYXN0LWlzbnVtZXJpYyI6MjI4fV0sMTAxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIG49dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwscz1bInoiLCJ4IiwieDAiLCJkeCIsInkiLCJ5MCIsImR5IiwidGV4dCIsInRyYW5zcG9zZSIsInh0eXBlIiwieXR5cGUiXSxsPXt9LGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHU9c1tjXTtsW3VdPW5bdV19aShsLGEoIiIse2NMZXR0ZXI6InoiLGF1dG9Db2xvckRmbHQ6ITF9KSksZS5leHBvcnRzPW8obCwiY2FsYyIsIm5lc3RlZCIpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1OTksIi4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzQ4LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjFlM31dLDEwMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtaGVhdG1hcDJkIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpO2Z1bmN0aW9uIG8odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9ImhlYXRtYXBnbCIsdGhpcy5uYW1lPSIiLHRoaXMuaG92ZXJpbmZvPSJhbGwiLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnpEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmlkVG9JbmRleD1bXSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5vcHRpb25zPXt6OltdLHg6W10seTpbXSxzaGFwZTpbMCwwXSxjb2xvckxldmVsczpbMF0sY29sb3JWYWx1ZXM6WzAsMCwwLDFdfSx0aGlzLmhlYXRtYXA9bih0LmdscGxvdCx0aGlzLm9wdGlvbnMpLHRoaXMuaGVhdG1hcC5fdHJhY2U9dGhpc312YXIgcz1vLnByb3RvdHlwZTtzLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLHI9ZS5zaGFwZSxuPXQucG9pbnRJZCxhPW4lclswXSxpPU1hdGguZmxvb3Iobi9yWzBdKSxvPW47cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6W2UueFthXSxlLnlbaV0sZS56W29dXSx0ZXh0TGFiZWw6dGhpcy50ZXh0TGFiZWxzW25dLG5hbWU6dGhpcy5uYW1lLHBvaW50SW5kZXg6W2ksYV0saG92ZXJpbmZvOnRoaXMuaG92ZXJpbmZvfX0scy51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaG92ZXJpbmZvPXQuaG92ZXJpbmZvO3ZhciBuPXIuejt0aGlzLm9wdGlvbnMuej1bXS5jb25jYXQuYXBwbHkoW10sbik7dmFyIG89blswXS5sZW5ndGgscz1uLmxlbmd0aDt0aGlzLm9wdGlvbnMuc2hhcGU9W28sc10sdGhpcy5vcHRpb25zLng9ci54LHRoaXMub3B0aW9ucy55PXIueTt2YXIgbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jb2xvcnNjYWxlLHI9dC56bWluLG49dC56bWF4LGE9ZS5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz1uZXcgQXJyYXkoNCphKSxsPTA7bDxhO2wrKyl7dmFyIGM9ZVtsXSx1PWkoY1sxXSk7b1tsXT1yK2NbMF0qKG4tcik7Zm9yKHZhciBoPTA7aDw0O2grKylzWzQqbCtoXT11W2hdfXJldHVybntjb2xvckxldmVsczpvLGNvbG9yVmFsdWVzOnN9fSh0KTt0aGlzLm9wdGlvbnMuY29sb3JMZXZlbHM9bC5jb2xvckxldmVscyx0aGlzLm9wdGlvbnMuY29sb3JWYWx1ZXM9bC5jb2xvclZhbHVlcyx0aGlzLnRleHRMYWJlbHM9W10uY29uY2F0LmFwcGx5KFtdLHQudGV4dCksdGhpcy5oZWF0bWFwLnVwZGF0ZSh0aGlzLm9wdGlvbnMpO3ZhciBjPXRoaXMuc2NlbmUueGF4aXMsdT10aGlzLnNjZW5lLnlheGlzO3QuX2V4dHJlbWVzW2MuX2lkXT1hLmZpbmRFeHRyZW1lcyhjLHIueCksdC5fZXh0cmVtZXNbdS5faWRdPWEuZmluZEV4dHJlbWVzKHUsci55KX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5oZWF0bWFwLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgbyh0LGUudWlkKTtyZXR1cm4gbi51cGRhdGUoZSxyKSxufX0seyIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsImdsLWhlYXRtYXAyZCI6MjU0fV0sMTAxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi4vaGVhdG1hcC9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL2hlYXRtYXAvY29sb3JiYXIiKSxjYWxjOnQoIi4uL2hlYXRtYXAvY2FsYyIpLHBsb3Q6dCgiLi9jb252ZXJ0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImhlYXRtYXBnbCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wyZCIpLGNhdGVnb3JpZXM6WyJnbCIsImdsMmQiLCIyZE1hcCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsMmQiOjgwMywiLi4vaGVhdG1hcC9jYWxjIjoxMDAxLCIuLi9oZWF0bWFwL2NvbG9yYmFyIjoxMDAzLCIuLi9oZWF0bWFwL2RlZmF1bHRzIjoxMDA1LCIuL2F0dHJpYnV0ZXMiOjEwMTUsIi4vY29udmVydCI6MTAxNn1dLDEwMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuL2Jpbl9hdHRyaWJ1dGVzIiksbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sdGV4dDpzKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OnMoe30sbi5ob3ZlcnRleHQse30pLG9yaWVudGF0aW9uOm4ub3JpZW50YXRpb24saGlzdGZ1bmM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50Iiwic3VtIiwiYXZnIiwibWluIiwibWF4Il0sZGZsdDoiY291bnQiLGVkaXRUeXBlOiJjYWxjIn0saGlzdG5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsInBlcmNlbnQiLCJwcm9iYWJpbGl0eSIsImRlbnNpdHkiLCJwcm9iYWJpbGl0eSBkZW5zaXR5Il0sZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGN1bXVsYXRpdmU6e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluY3JlYXNpbmciLCJkZWNyZWFzaW5nIl0sZGZsdDoiaW5jcmVhc2luZyIsZWRpdFR5cGU6ImNhbGMifSxjdXJyZW50YmluOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmNsdWRlIiwiZXhjbHVkZSIsImhhbGYiXSxkZmx0OiJpbmNsdWRlIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbmJpbnN4Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx4YmluczppKCJ4IiwhMCksbmJpbnN5Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx5YmluczppKCJ5IiwhMCksYXV0b2Jpbng6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9LGF1dG9iaW55Ont2YWxUeXBlOiJib29sZWFuIixkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMifSxiaW5ncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZW1wbGF0ZTphKHt9LHtrZXlzOm8uZXZlbnREYXRhS2V5c30pLG1hcmtlcjpuLm1hcmtlcixvZmZzZXRncm91cDpuLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOm4uYWxpZ25tZW50Z3JvdXAsc2VsZWN0ZWQ6bi5zZWxlY3RlZCx1bnNlbGVjdGVkOm4udW5zZWxlY3RlZCxfZGVwcmVjYXRlZDp7YmFyZGlyOm4uX2RlcHJlY2F0ZWQuYmFyZGlyfX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NDEsIi4uL2Jhci9hdHRyaWJ1dGVzIjo4NTYsIi4vYmluX2F0dHJpYnV0ZXMiOjEwMjAsIi4vY29uc3RhbnRzIjoxMDI0fV0sMTAxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wLGE9MDthPHI7YSsrKWVbYV0/KHRbYV0vPWVbYV0sbis9dFthXSk6dFthXT1udWxsO3JldHVybiBufX0se31dLDEwMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3N0YXJ0Ont2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sZW5kOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTAyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpO2UuZXhwb3J0cz17Y291bnQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiByW3RdKyssMX0sc3VtOmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBpPWFbZV07cmV0dXJuIG4oaSk/KGk9TnVtYmVyKGkpLHJbdF0rPWksaSk6MH0sYXZnOmZ1bmN0aW9uKHQsZSxyLGEsaSl7dmFyIG89YVtlXTtyZXR1cm4gbihvKSYmKG89TnVtYmVyKG8pLHJbdF0rPW8saVt0XSsrKSwwfSxtaW46ZnVuY3Rpb24odCxlLHIsYSl7dmFyIGk9YVtlXTtpZihuKGkpKXtpZihpPU51bWJlcihpKSwhbihyW3RdKSlyZXR1cm4gclt0XT1pLGk7aWYoclt0XT5pKXt2YXIgbz1pLXJbdF07cmV0dXJuIHJbdF09aSxvfX1yZXR1cm4gMH0sbWF4OmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBpPWFbZV07aWYobihpKSl7aWYoaT1OdW1iZXIoaSksIW4oclt0XSkpcmV0dXJuIHJbdF09aSxpO2lmKHJbdF08aSl7dmFyIG89aS1yW3RdO3JldHVybiByW3RdPWksb319cmV0dXJuIDB9fX0seyJmYXN0LWlzbnVtZXJpYyI6MjI4fV0sMTAyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksYT1uLk9ORUFWR1lFQVIsaT1uLk9ORUFWR01PTlRILG89bi5PTkVEQVkscz1uLk9ORUhPVVIsbD1uLk9ORU1JTixjPW4uT05FU0VDLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS50aWNrSW5jcmVtZW50O2Z1bmN0aW9uIGgodCxlLHIsbil7aWYodCplPD0wKXJldHVybiAxLzA7Zm9yKHZhciBhPU1hdGguYWJzKGUtdCksaT0iZGF0ZSI9PT1yLnR5cGUsbz1mKGEsaSkscz0wO3M8MTA7cysrKXt2YXIgbD1mKDgwKm8saSk7aWYobz09PWwpYnJlYWs7aWYoIXAobCx0LGUsaSxyLG4pKWJyZWFrO289bH1yZXR1cm4gb31mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGUmJnQ+Yz90Pm8/dD4xLjEqYT9hOnQ+MS4xKmk/aTpvOnQ+cz9zOnQ+bD9sOmM6TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMTApKX1mdW5jdGlvbiBwKHQsZSxyLG4saSxzKXtpZihuJiZ0Pm8pe3ZhciBsPWQoZSxpLHMpLGM9ZChyLGkscyksdT10PT09YT8wOjE7cmV0dXJuIGxbdV0hPT1jW3VdfXJldHVybiBNYXRoLmZsb29yKHIvdCktTWF0aC5mbG9vcihlL3QpPi4xfWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPWUuYzJkKHQsYSxyKS5zcGxpdCgiLSIpO3JldHVybiIiPT09blswXSYmKG4udW5zaGlmdCgpLG5bMF09Ii0iK25bMF0pLG59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIHMsbCxjPS0xLjEqZSxmPS0uMSplLHA9dC1mLGQ9clswXSxnPXJbMV0sdj1NYXRoLm1pbihoKGQrZixkK3AsbixpKSxoKGcrZixnK3AsbixpKSksbT1NYXRoLm1pbihoKGQrYyxkK2YsbixpKSxoKGcrYyxnK2YsbixpKSk7aWYodj5tJiZtPE1hdGguYWJzKGctZCkvNGUzPyhzPXYsbD0hMSk6KHM9TWF0aC5taW4odixtKSxsPSEwKSwiZGF0ZSI9PT1uLnR5cGUmJnM+byl7dmFyIHk9cz09PWE/MTo2LHg9cz09PWE/Ik0xMiI6Ik0xIjtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbz1uLmMyZChlLGEsaSkscz1vLmluZGV4T2YoIi0iLHkpO3M+MCYmKG89by5zdWJzdHIoMCxzKSk7dmFyIGM9bi5kMmMobywwLGkpO2lmKGM8ZSl7dmFyIGg9dShjLHgsITEsaSk7KGMraCkvMjxlK3QmJihjPWgpfXJldHVybiByJiZsP3UoYyx4LCEwLGkpOmN9fXJldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuPXMqTWF0aC5yb3VuZChlL3MpO3JldHVybiBuK3MvMTA8ZSYmbisuOSpzPGUrdCYmKG4rPXMpLHImJmwmJihuLT1zKSxufX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1fV0sMTAyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPXQoIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGEiKSxsPXQoIi4vYmluX2Z1bmN0aW9ucyIpLGM9dCgiLi9ub3JtX2Z1bmN0aW9ucyIpLHU9dCgiLi9hdmVyYWdlIiksaD10KCIuL2Jpbl9sYWJlbF92YWxzIik7ZnVuY3Rpb24gZih0LGUscixzLGwpe3ZhciBjLHUsaCxwLGQsZyx2LG09cysiYmlucyIseT10Ll9mdWxsTGF5b3V0LHg9ZVsiXyIrcysiYmluZ3JvdXAiXSxiPXkuX2hpc3RvZ3JhbUJpbk9wdHNbeF0sXz0ib3ZlcmxheSI9PT15LmJhcm1vZGUsdz1mdW5jdGlvbih0KXtyZXR1cm4gci5yMmModCwwLHApfSxrPWZ1bmN0aW9uKHQpe3JldHVybiByLmMycih0LDAscCl9LFQ9ImRhdGUiPT09ci50eXBlP2Z1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dD9hLmNsZWFuRGF0ZSh0LG51bGwscCk6bnVsbH06ZnVuY3Rpb24odCl7cmV0dXJuIG4odCk/TnVtYmVyKHQpOm51bGx9O2Z1bmN0aW9uIE0odCxlLHIpe2VbdCsiRm91bmQiXT8oZVt0XT1UKGVbdF0pLG51bGw9PT1lW3RdJiYoZVt0XT1yW3RdKSk6KGdbdF09ZVt0XT1yW3RdLGEubmVzdGVkUHJvcGVydHkodVswXSxtKyIuIit0KS5zZXQoclt0XSkpfWlmKGVbIl8iK3MrImF1dG9CaW5GaW5pc2hlZCJdKWRlbGV0ZSBlWyJfIitzKyJhdXRvQmluRmluaXNoZWQiXTtlbHNle3U9Yi50cmFjZXM7dmFyIEE9W10sUz0hMCxFPSExLEw9ITE7Zm9yKGM9MDtjPHUubGVuZ3RoO2MrKylpZigoaD11W2NdKS52aXNpYmxlKXt2YXIgQz1iLmRpcnNbY107ZD1oWyJfIitDKyJwb3MwIl09ci5tYWtlQ2FsY2RhdGEoaCxDKSxBPWEuY29uY2F0KEEsZCksZGVsZXRlIGhbIl8iK3MrImF1dG9CaW5GaW5pc2hlZCJdLCEwPT09ZS52aXNpYmxlJiYoUz9TPSExOihkZWxldGUgaC5fYXV0b0JpbixoWyJfIitzKyJhdXRvQmluRmluaXNoZWQiXT0xKSxpLnRyYWNlSXMoaCwiMmRNYXAiKSYmKEU9ITApLCJoaXN0b2dyYW0yZGNvbnRvdXIiPT09aC50eXBlJiYoTD0hMCkpfXA9dVswXVtzKyJjYWxlbmRhciJdO3ZhciBQPW8uYXV0b0JpbihBLHIsYi5uYmlucyxFLHAsYi5zaXplRm91bmQmJmIuc2l6ZSksTz11WzBdLl9hdXRvQmluPXt9O2lmKGc9T1tiLmRpcnNbMF1dPXt9LEwmJihiLnNpemV8fChQLnN0YXJ0PWsoby50aWNrSW5jcmVtZW50KHcoUC5zdGFydCksUC5zaXplLCEwLHApKSksdm9pZCAwPT09Yi5lbmQmJihQLmVuZD1rKG8udGlja0luY3JlbWVudCh3KFAuZW5kKSxQLnNpemUsITEscCkpKSksXyYmIWkudHJhY2VJcyhlLCIyZE1hcCIpJiYwPT09UC5fZGF0YVNwYW4mJiJjYXRlZ29yeSIhPT1yLnR5cGUmJiJtdWx0aWNhdGVnb3J5IiE9PXIudHlwZSl7aWYobClyZXR1cm5bUCxkLCEwXTtQPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG8scyxsLGM9dC5fZnVsbExheW91dCx1PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUueGF4aXMsbj1lLnlheGlzLGE9ZS5vcmllbnRhdGlvbixpPVtdLG89dC5fZnVsbERhdGEscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdOyJoaXN0b2dyYW0iPT09bC50eXBlJiYhMD09PWwudmlzaWJsZSYmbC5vcmllbnRhdGlvbj09PWEmJmwueGF4aXM9PT1yJiZsLnlheGlzPT09biYmaS5wdXNoKGwpfXJldHVybiBpfSh0LGUpLGg9ITEscD0xLzAsZD1bZV07Zm9yKG89MDtvPHUubGVuZ3RoO28rKylpZigocz11W29dKT09PWUpaD0hMDtlbHNlIGlmKGgpe3ZhciBnPWYodCxzLHIsbiwhMCksdj1nWzBdLG09Z1syXTtzWyJfIituKyJhdXRvQmluRmluaXNoZWQiXT0xLHNbIl8iK24rInBvczAiXT1nWzFdLG0/ZC5wdXNoKHMpOnA9TWF0aC5taW4ocCx2LnNpemUpfWVsc2UgbD1jLl9oaXN0b2dyYW1CaW5PcHRzW3NbIl8iK24rImJpbmdyb3VwIl1dLHA9TWF0aC5taW4ocCxsLnNpemV8fHNbaV0uc2l6ZSk7dmFyIHk9bmV3IEFycmF5KGQubGVuZ3RoKTtmb3Iobz0wO288ZC5sZW5ndGg7bysrKWZvcih2YXIgeD1kW29dWyJfIituKyJwb3MwIl0sYj0wO2I8eC5sZW5ndGg7YisrKWlmKHZvaWQgMCE9PXhbYl0pe3lbb109eFtiXTticmVha31pc0Zpbml0ZShwKXx8KHA9YS5kaXN0aW5jdFZhbHMoeSkubWluRGlmZik7Zm9yKG89MDtvPGQubGVuZ3RoO28rKyl7dmFyIF89KHM9ZFtvXSlbbisiY2FsZW5kYXIiXSx3PXtzdGFydDpyLmMycih5W29dLXAvMiwwLF8pLGVuZDpyLmMycih5W29dK3AvMiwwLF8pLHNpemU6cH07cy5faW5wdXRbaV09c1tpXT13LChsPWMuX2hpc3RvZ3JhbUJpbk9wdHNbc1siXyIrbisiYmluZ3JvdXAiXV0pJiZhLmV4dGVuZEZsYXQobCx3KX1yZXR1cm4gZVtpXX0odCxlLHIscyxtKX0odj1oLmN1bXVsYXRpdmV8fHt9KS5lbmFibGVkJiYiaW5jbHVkZSIhPT12LmN1cnJlbnRiaW4mJigiZGVjcmVhc2luZyI9PT12LmRpcmVjdGlvbj9QLnN0YXJ0PWsoby50aWNrSW5jcmVtZW50KHcoUC5zdGFydCksUC5zaXplLCEwLHApKTpQLmVuZD1rKG8udGlja0luY3JlbWVudCh3KFAuZW5kKSxQLnNpemUsITEscCkpKSxiLnNpemU9UC5zaXplLGIuc2l6ZUZvdW5kfHwoZy5zaXplPVAuc2l6ZSxhLm5lc3RlZFByb3BlcnR5KHVbMF0sbSsiLnNpemUiKS5zZXQoUC5zaXplKSksTSgic3RhcnQiLGIsUCksTSgiZW5kIixiLFApfWQ9ZVsiXyIrcysicG9zMCJdLGRlbGV0ZSBlWyJfIitzKyJwb3MwIl07dmFyIHo9ZS5faW5wdXRbbV18fHt9LEk9YS5leHRlbmRGbGF0KHt9LGIpLEQ9Yi5zdGFydCxSPXIucjJsKHouc3RhcnQpLEY9dm9pZCAwIT09UjtpZigoYi5zdGFydEZvdW5kfHxGKSYmUiE9PXIucjJsKEQpKXt2YXIgQj1GP1I6YS5hZ2dOdW1zKE1hdGgubWluLG51bGwsZCksTj17dHlwZToiY2F0ZWdvcnkiPT09ci50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1yLnR5cGU/ImxpbmVhciI6ci50eXBlLHIybDpyLnIybCxkdGljazpiLnNpemUsdGljazA6RCxjYWxlbmRhcjpwLHJhbmdlOltCLG8udGlja0luY3JlbWVudChCLGIuc2l6ZSwhMSxwKV0ubWFwKHIubDJyKX0saj1vLnRpY2tGaXJzdChOKTtqPnIucjJsKEIpJiYoaj1vLnRpY2tJbmNyZW1lbnQoaixiLnNpemUsITAscCkpLEkuc3RhcnQ9ci5sMnIoaiksRnx8YS5uZXN0ZWRQcm9wZXJ0eShlLG0rIi5zdGFydCIpLnNldChJLnN0YXJ0KX12YXIgVj1iLmVuZCxVPXIucjJsKHouZW5kKSxxPXZvaWQgMCE9PVU7aWYoKGIuZW5kRm91bmR8fHEpJiZVIT09ci5yMmwoVikpe3ZhciBIPXE/VTphLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxkKTtJLmVuZD1yLmwycihIKSxxfHxhLm5lc3RlZFByb3BlcnR5KGUsbSsiLnN0YXJ0Iikuc2V0KEkuZW5kKX12YXIgRz0iYXV0b2JpbiIrcztyZXR1cm4hMT09PWUuX2lucHV0W0ddJiYoZS5faW5wdXRbbV09YS5leHRlbmRGbGF0KHt9LGVbbV18fHt9KSxkZWxldGUgZS5faW5wdXRbR10sZGVsZXRlIGVbR10pLFtJLGRdfWUuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLGkscCxkLGc9W10sdj1bXSxtPW8uZ2V0RnJvbUlkKHQsImgiPT09ZS5vcmllbnRhdGlvbj9lLnlheGlzOmUueGF4aXMpLHk9ImgiPT09ZS5vcmllbnRhdGlvbj8ieSI6IngiLHg9e3g6InkiLHk6IngifVt5XSxiPWVbeSsiY2FsZW5kYXIiXSxfPWUuY3VtdWxhdGl2ZSx3PWYodCxlLG0seSksaz13WzBdLFQ9d1sxXSxNPSJzdHJpbmciPT10eXBlb2Ygay5zaXplLEE9W10sUz1NP0E6ayxFPVtdLEw9W10sQz1bXSxQPTAsTz1lLmhpc3Rub3JtLHo9ZS5oaXN0ZnVuYyxJPS0xIT09Ty5pbmRleE9mKCJkZW5zaXR5Iik7Xy5lbmFibGVkJiZJJiYoTz1PLnJlcGxhY2UoLyA/ZGVuc2l0eSQvLCIiKSxJPSExKTt2YXIgRCxSPSJtYXgiPT09enx8Im1pbiI9PT16P251bGw6MCxGPWwuY291bnQsQj1jW09dLE49ITEsaj1mdW5jdGlvbih0KXtyZXR1cm4gbS5yMmModCwwLGIpfTtmb3IoYS5pc0FycmF5T3JUeXBlZEFycmF5KGVbeF0pJiYiY291bnQiIT09eiYmKEQ9ZVt4XSxOPSJhdmciPT09eixGPWxbel0pLHI9aihrLnN0YXJ0KSxwPWooay5lbmQpKyhyLW8udGlja0luY3JlbWVudChyLGsuc2l6ZSwhMSxiKSkvMWU2O3I8cCYmZy5sZW5ndGg8MWU2JiYoaT1vLnRpY2tJbmNyZW1lbnQocixrLnNpemUsITEsYiksZy5wdXNoKChyK2kpLzIpLHYucHVzaChSKSxDLnB1c2goW10pLEEucHVzaChyKSxJJiZFLnB1c2goMS8oaS1yKSksTiYmTC5wdXNoKDApLCEoaTw9cikpOylyPWk7QS5wdXNoKHIpLE18fCJkYXRlIiE9PW0udHlwZXx8KFM9e3N0YXJ0OmooUy5zdGFydCksZW5kOmooUy5lbmQpLHNpemU6Uy5zaXplfSk7dmFyIFYsVT12Lmxlbmd0aCxxPSEwLEg9MS8wLEc9MS8wLFk9e307Zm9yKHI9MDtyPFQubGVuZ3RoO3IrKyl7dmFyIFc9VFtyXTsoZD1hLmZpbmRCaW4oVyxTKSk+PTAmJmQ8VSYmKFArPUYoZCxyLHYsRCxMKSxxJiZDW2RdLmxlbmd0aCYmVyE9PVRbQ1tkXVswXV0mJihxPSExKSxDW2RdLnB1c2gociksWVtyXT1kLEg9TWF0aC5taW4oSCxXLUFbZF0pLEc9TWF0aC5taW4oRyxBW2QrMV0tVykpfXF8fChWPWgoSCxHLEEsbSxiKSksTiYmKFA9dSh2LEwpKSxCJiZCKHYsUCxFKSxfLmVuYWJsZWQmJmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLGk7ZnVuY3Rpb24gbyhlKXtpPXRbZV0sdFtlXS89Mn1mdW5jdGlvbiBzKGUpe2E9dFtlXSx0W2VdPWkrYS8yLGkrPWF9aWYoImhhbGYiPT09cilpZigiaW5jcmVhc2luZyI9PT1lKWZvcihvKDApLG49MTtuPHQubGVuZ3RoO24rKylzKG4pO2Vsc2UgZm9yKG8odC5sZW5ndGgtMSksbj10Lmxlbmd0aC0yO24+PTA7bi0tKXMobik7ZWxzZSBpZigiaW5jcmVhc2luZyI9PT1lKXtmb3Iobj0xO248dC5sZW5ndGg7bisrKXRbbl0rPXRbbi0xXTsiZXhjbHVkZSI9PT1yJiYodC51bnNoaWZ0KDApLHQucG9wKCkpfWVsc2V7Zm9yKG49dC5sZW5ndGgtMjtuPj0wO24tLSl0W25dKz10W24rMV07ImV4Y2x1ZGUiPT09ciYmKHQucHVzaCgwKSx0LnNoaWZ0KCkpfX0odixfLmRpcmVjdGlvbixfLmN1cnJlbnRiaW4pO3ZhciBYPU1hdGgubWluKGcubGVuZ3RoLHYubGVuZ3RoKSxaPVtdLEo9MCxLPVgtMTtmb3Iocj0wO3I8WDtyKyspaWYodltyXSl7Sj1yO2JyZWFrfWZvcihyPVgtMTtyPj1KO3ItLSlpZih2W3JdKXtLPXI7YnJlYWt9Zm9yKHI9SjtyPD1LO3IrKylpZihuKGdbcl0pJiZuKHZbcl0pKXt2YXIgUT17cDpnW3JdLHM6dltyXSxiOjB9O18uZW5hYmxlZHx8KFEucHRzPUNbcl0scT9RLnBoMD1RLnBoMT1DW3JdLmxlbmd0aD9UW0Nbcl1bMF1dOmdbcl06KFEucGgwPVYoQVtyXSksUS5waDE9VihBW3IrMV0sITApKSksWi5wdXNoKFEpfXJldHVybiAxPT09Wi5sZW5ndGgmJihaWzBdLndpZHRoMT1vLnRpY2tJbmNyZW1lbnQoWlswXS5wLGsuc2l6ZSwhMSxiKS1aWzBdLnApLHMoWixlKSxhLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykmJmEudGFnU2VsZWN0ZWQoWixlLFkpLFp9LGNhbGNBbGxBdXRvQmluczpmfX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi4vYmFyL2FycmF5c190b19jYWxjZGF0YSI6ODU1LCIuL2F2ZXJhZ2UiOjEwMTksIi4vYmluX2Z1bmN0aW9ucyI6MTAyMSwiLi9iaW5fbGFiZWxfdmFscyI6MTAyMiwiLi9ub3JtX2Z1bmN0aW9ucyI6MTAzMCwiZmFzdC1pc251bWVyaWMiOjIyOH1dLDEwMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtldmVudERhdGFLZXlzOlsiYmluTnVtYmVyIl19fSx7fV0sMTAyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKS50cmFjZUlzLG89dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlR3JvdXBpbmdEZWZhdWx0cyxzPW4ubmVzdGVkUHJvcGVydHksbD1hLmdldEF4aXNHcm91cCxjPVt7YVN0cjp7eDoieGJpbnMuc3RhcnQiLHk6InliaW5zLnN0YXJ0In0sbmFtZToic3RhcnQifSx7YVN0cjp7eDoieGJpbnMuZW5kIix5OiJ5Ymlucy5lbmQifSxuYW1lOiJlbmQifSx7YVN0cjp7eDoieGJpbnMuc2l6ZSIseToieWJpbnMuc2l6ZSJ9LG5hbWU6InNpemUifSx7YVN0cjp7eDoibmJpbnN4Iix5OiJuYmluc3kifSxuYW1lOiJuYmlucyJ9XSx1PVsieCIsInkiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixoLGYscCxkLGcsdixtPWUuX2hpc3RvZ3JhbUJpbk9wdHM9e30seT1bXSx4PXt9LGI9W107ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBuLmNvZXJjZShyLl9pbnB1dCxyLHIuX21vZHVsZS5hdHRyaWJ1dGVzLHQsZSl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4idiI9PT10Lm9yaWVudGF0aW9uPyJ4IjoieSJ9ZnVuY3Rpb24gayh0LHIsaSl7dmFyIG89dC51aWQrIl9fIitpO3J8fChyPW8pO3ZhciBzPWZ1bmN0aW9uKHQscil7cmV0dXJuIGEuZ2V0RnJvbVRyYWNlKHtfZnVsbExheW91dDplfSx0LHIpLnR5cGV9KHQsaSksbD10W2krImNhbGVuZGFyIl18fCIiLGM9bVtyXSx1PSEwO2MmJihzPT09Yy5heFR5cGUmJmw9PT1jLmNhbGVuZGFyPyh1PSExLGMudHJhY2VzLnB1c2godCksYy5kaXJzLnB1c2goaSkpOihyPW8scyE9PWMuYXhUeXBlJiZuLndhcm4oWyJBdHRlbXB0ZWQgdG8gZ3JvdXAgdGhlIGJpbnMgb2YgdHJhY2UiLHQuaW5kZXgsInNldCBvbiBhIiwidHlwZToiK3MsImF4aXMiLCJ3aXRoIGJpbnMgb24iLCJ0eXBlOiIrYy5heFR5cGUsImF4aXMuIl0uam9pbigiICIpKSxsIT09Yy5jYWxlbmRhciYmbi53YXJuKFsiQXR0ZW1wdGVkIHRvIGdyb3VwIHRoZSBiaW5zIG9mIHRyYWNlIix0LmluZGV4LCJzZXQgd2l0aCBhIixsLCJjYWxlbmRhciIsIndpdGggYmlucyIsYy5jYWxlbmRhcj8ib24gYSAiK2MuY2FsZW5kYXIrIiBjYWxlbmRhciI6IncvbyBhIHNldCBjYWxlbmRhciJdLmpvaW4oIiAiKSkpKSx1JiYobVtyXT17dHJhY2VzOlt0XSxkaXJzOltpXSxheFR5cGU6cyxjYWxlbmRhcjp0W2krImNhbGVuZGFyIl18fCIifSksdFsiXyIraSsiYmluZ3JvdXAiXT1yfWZvcihkPTA7ZDx0Lmxlbmd0aDtkKyspcj10W2RdLGkociwiaGlzdG9ncmFtIikmJih5LnB1c2gociksZGVsZXRlIHIuX3hhdXRvQmluRmluaXNoZWQsZGVsZXRlIHIuX3lhdXRvQmluRmluaXNoZWQsaShyLCIyZE1hcCIpfHxvKHIuX2lucHV0LHIsZSxfKSk7dmFyIFQ9ZS5fYWxpZ25tZW50T3B0c3x8e307Zm9yKGQ9MDtkPHkubGVuZ3RoO2QrKyl7aWYocj15W2RdLGY9IiIsIWkociwiMmRNYXAiKSl7aWYocD13KHIpLCJncm91cCI9PT1lLmJhcm1vZGUmJnIuYWxpZ25tZW50Z3JvdXApe3ZhciBNPXJbcCsiYXhpcyJdLEE9bChlLE0pK3Iub3JpZW50YXRpb247KFRbQV18fHt9KVtyLmFsaWdubWVudGdyb3VwXSYmKGY9QSl9Znx8Im92ZXJsYXkiPT09ZS5iYXJtb2RlfHwoZj1sKGUsci54YXhpcykrbChlLHIueWF4aXMpK3cocikpfWY/KHhbZl18fCh4W2ZdPVtdKSx4W2ZdLnB1c2gocikpOmIucHVzaChyKX1mb3IoZiBpbiB4KWlmKDEhPT0oaD14W2ZdKS5sZW5ndGgpe3ZhciBTPSExO2ZvcihkPTA7ZDxoLmxlbmd0aDtkKyspe3I9aFtkXSxTPV8oImJpbmdyb3VwIik7YnJlYWt9Zm9yKGY9U3x8ZixkPTA7ZDxoLmxlbmd0aDtkKyspe3ZhciBFPShyPWhbZF0pLl9pbnB1dC5iaW5ncm91cDtFJiZFIT09ZiYmbi53YXJuKFsiVHJhY2UiLHIuaW5kZXgsIm11c3QgbWF0Y2giLCJ3aXRoaW4gYmluZ3JvdXAiLGYrIi4iLCJJZ25vcmluZyBpdHMgYmluZ3JvdXA6IixFLCJzZXR0aW5nLiJdLmpvaW4oIiAiKSksci5iaW5ncm91cD1mLGsocixmLHcocikpfX1lbHNlIGIucHVzaChoWzBdKTtmb3IoZD0wO2Q8Yi5sZW5ndGg7ZCsrKXtyPWJbZF07dmFyIEw9XygiYmluZ3JvdXAiKTtpZihpKHIsIjJkTWFwIikpZm9yKHY9MDt2PDI7disrKXt2YXIgQz1fKChwPXVbdl0pKyJiaW5ncm91cCIsTD9MKyJfXyIrcDpudWxsKTtrKHIsQyxwKX1lbHNlIGsocixMLHcocikpfWZvcihmIGluIG0pe3ZhciBQPW1bZl07Zm9yKGg9UC50cmFjZXMsZz0wO2c8Yy5sZW5ndGg7ZysrKXt2YXIgTyx6LEk9Y1tnXSxEPUkubmFtZTtpZigibmJpbnMiIT09RHx8IVAuc2l6ZUZvdW5kKXtmb3IoZD0wO2Q8aC5sZW5ndGg7ZCsrKXtpZihyPWhbZF0scD1QLmRpcnNbZF0sTz1JLmFTdHJbcF0sdm9pZCAwIT09cyhyLl9pbnB1dCxPKS5nZXQoKSl7UFtEXT1fKE8pLFBbRCsiRm91bmQiXT0hMDticmVha30oej0oci5fYXV0b0Jpbnx8e30pW3BdfHx7fSlbRF0mJnMocixPKS5zZXQoeltEXSl9aWYoInN0YXJ0Ij09PUR8fCJlbmQiPT09RClmb3IoO2Q8aC5sZW5ndGg7ZCsrKShyPWhbZF0pWyJfIitwKyJiaW5ncm91cCJdJiZfKE8sKHo9KHIuX2F1dG9CaW58fHt9KVtwXXx8e30pW0RdKTsibmJpbnMiIT09RHx8UC5zaXplRm91bmR8fFAubmJpbnNGb3VuZHx8KHI9aFswXSxQW0RdPV8oTykpfX19fX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NjgsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4uL2Jhci9kZWZhdWx0cyI6ODYwfV0sMTAyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxzLHIsbil9dmFyIHU9YygieCIpLGg9YygieSIpO2MoImN1bXVsYXRpdmUuZW5hYmxlZCIpJiYoYygiY3VtdWxhdGl2ZS5kaXJlY3Rpb24iKSxjKCJjdW11bGF0aXZlLmN1cnJlbnRiaW4iKSksYygidGV4dCIpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKTt2YXIgZj1jKCJvcmllbnRhdGlvbiIsaCYmIXU/ImgiOiJ2IikscD0idiI9PT1mPyJ4IjoieSIsZD0idiI9PT1mPyJ5IjoieCIsZz11JiZoP01hdGgubWluKGEubWluUm93TGVuZ3RoKHUpJiZhLm1pblJvd0xlbmd0aChoKSk6YS5taW5Sb3dMZW5ndGgoZVtwXXx8W10pO2lmKGcpe2UuX2xlbmd0aD1nLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiXSxsKSxlW2RdJiZjKCJoaXN0ZnVuYyIpLGMoImhpc3Rub3JtIiksYygiYXV0b2JpbiIrcCksbyh0LGUsYyxyLGwpLGEuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGMpO3ZhciB2PShlLm1hcmtlci5saW5lfHx7fSkuY29sb3IsbT1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTttKHQsZSx2fHxpLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLG0odCxlLHZ8fGkuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyI6ODcxLCIuL2F0dHJpYnV0ZXMiOjEwMTh9XSwxMDI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGEpe2lmKHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSwiekxhYmVsVmFsImluIGUmJih0Lno9ZS56TGFiZWxWYWwpLGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLCEoci5jdW11bGF0aXZlfHx7fSkuZW5hYmxlZCl7dmFyIGksbz1BcnJheS5pc0FycmF5KGEpP25bMF0ucHRzW2FbMF1dW2FbMV1dOm5bYV0ucHRzO2lmKHQucG9pbnROdW1iZXJzPW8sdC5iaW5OdW1iZXI9dC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludEluZGV4LHIuX2luZGV4VG9Qb2ludHMpe2k9W107Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspaT1pLmNvbmNhdChyLl9pbmRleFRvUG9pbnRzW29bc11dKX1lbHNlIGk9bzt0LnBvaW50SW5kaWNlcz1pfXJldHVybiB0fX0se31dLDEwMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2hvdmVyIikuaG92ZXJQb2ludHMsYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLmhvdmVyTGFiZWxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgbz1uKHQsZSxyLGkpO2lmKG8pe3ZhciBzPSh0PW9bMF0pLmNkW3QuaW5kZXhdLGw9dC5jZFswXS50cmFjZTtpZighbC5jdW11bGF0aXZlLmVuYWJsZWQpe3ZhciBjPSJoIj09PWwub3JpZW50YXRpb24/InkiOiJ4Ijt0W2MrIkxhYmVsIl09YSh0W2MrImEiXSxzLnBoMCxzLnBoMSl9cmV0dXJuIGwuaG92ZXJtcGxhdGUmJih0LmhvdmVydGVtcGxhdGU9bC5ob3ZlcnRlbXBsYXRlKSxvfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi4vYmFyL2hvdmVyIjo4NjN9XSwxMDI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4uL2Jhci9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4uL2Jhci9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4uL2Jhci9wbG90IikucGxvdCxsYXllck5hbWU6ImJhcmxheWVyIixzdHlsZTp0KCIuLi9iYXIvc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlT25TZWxlY3QsY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6Imhpc3RvZ3JhbSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImJhci1saWtlIiwiY2FydGVzaWFuIiwic3ZnIiwiYmFyIiwiaGlzdG9ncmFtIiwib3JpZW50ZWQiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NiwiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiOjg1OSwiLi4vYmFyL2xheW91dF9hdHRyaWJ1dGVzIjo4NjUsIi4uL2Jhci9sYXlvdXRfZGVmYXVsdHMiOjg2NiwiLi4vYmFyL3Bsb3QiOjg2NywiLi4vYmFyL3NlbGVjdCI6ODY4LCIuLi9iYXIvc3R5bGUiOjg3MCwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjExMzgsIi4vYXR0cmlidXRlcyI6MTAxOCwiLi9jYWxjIjoxMDIzLCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjoxMDI1LCIuL2RlZmF1bHRzIjoxMDI2LCIuL2V2ZW50X2RhdGEiOjEwMjcsIi4vaG92ZXIiOjEwMjh9XSwxMDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17cGVyY2VudDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTEwMC9lLGE9MDthPHI7YSsrKXRbYV0qPW59LHByb2JhYmlsaXR5OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MDtuPHI7bisrKXRbbl0vPWV9LGRlbnNpdHk6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dC5sZW5ndGg7bj1ufHwxO2Zvcih2YXIgaT0wO2k8YTtpKyspdFtpXSo9cltpXSpufSwicHJvYmFiaWxpdHkgZGVuc2l0eSI6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dC5sZW5ndGg7biYmKGUvPW4pO2Zvcih2YXIgaT0wO2k8YTtpKyspdFtpXSo9cltpXS9lfX19LHt9XSwxMDMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hpc3RvZ3JhbS9hdHRyaWJ1dGVzIiksYT10KCIuLi9oaXN0b2dyYW0vYmluX2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxsPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9Yyh7eDpuLngseTpuLnksejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6e2NvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0saGlzdG5vcm06bi5oaXN0bm9ybSxoaXN0ZnVuYzpuLmhpc3RmdW5jLG5iaW5zeDpuLm5iaW5zeCx4YmluczphKCJ4IiksbmJpbnN5Om4ubmJpbnN5LHliaW5zOmEoInkiKSxhdXRvYmlueDpuLmF1dG9iaW54LGF1dG9iaW55Om4uYXV0b2JpbnksYmluZ3JvdXA6Yyh7fSxuLmJpbmdyb3VwLHt9KSx4YmluZ3JvdXA6Yyh7fSxuLmJpbmdyb3VwLHt9KSx5YmluZ3JvdXA6Yyh7fSxuLmJpbmdyb3VwLHt9KSx4Z2FwOmkueGdhcCx5Z2FwOmkueWdhcCx6c21vb3RoOmkuenNtb290aCx6aG92ZXJmb3JtYXQ6aS56aG92ZXJmb3JtYXQsaG92ZXJ0ZW1wbGF0ZTpzKHt9LHtrZXlzOiJ6In0pLHNob3dsZWdlbmQ6Yyh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0sbCgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTk5LCIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc2MiwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODQxLCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjFlMywiLi4vaGlzdG9ncmFtL2F0dHJpYnV0ZXMiOjEwMTgsIi4uL2hpc3RvZ3JhbS9iaW5fYXR0cmlidXRlcyI6MTAyMH1dLDEwMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vaGlzdG9ncmFtL2Jpbl9mdW5jdGlvbnMiKSxvPXQoIi4uL2hpc3RvZ3JhbS9ub3JtX2Z1bmN0aW9ucyIpLHM9dCgiLi4vaGlzdG9ncmFtL2F2ZXJhZ2UiKSxsPXQoIi4uL2hpc3RvZ3JhbS9iaW5fbGFiZWxfdmFscyIpLGM9dCgiLi4vaGlzdG9ncmFtL2NhbGMiKS5jYWxjQWxsQXV0b0JpbnM7ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgYSxpPW5ldyBBcnJheSh0KTtpZihuKWZvcihhPTA7YTx0O2ErKylpW2FdPTEvKGVbYSsxXS1lW2FdKTtlbHNle3ZhciBvPTEvcjtmb3IoYT0wO2E8dDthKyspaVthXT1vfXJldHVybiBpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm57c3RhcnQ6dChlLnN0YXJ0KSxlbmQ6dChlLmVuZCksc2l6ZTplLnNpemV9fWZ1bmN0aW9uIGYodCxlLHIsbixhLGkpe3ZhciBvLHM9dC5sZW5ndGgtMSxjPW5ldyBBcnJheShzKSx1PWwocixuLHQsYSxpKTtmb3Iobz0wO288cztvKyspe3ZhciBoPShlfHxbXSlbb107Y1tvXT12b2lkIDA9PT1oP1t1KHRbb10pLHUodFtvKzFdLCEwKV06W2gsaF19cmV0dXJuIGN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbCxwLGQsZz1hLmdldEZyb21JZCh0LGUueGF4aXMpLHY9YS5nZXRGcm9tSWQodCxlLnlheGlzKSxtPWUueGNhbGVuZGFyLHk9ZS55Y2FsZW5kYXIseD1mdW5jdGlvbih0KXtyZXR1cm4gZy5yMmModCwwLG0pfSxiPWZ1bmN0aW9uKHQpe3JldHVybiB2LnIyYyh0LDAseSl9LF89Yyh0LGUsZywieCIpLHc9X1swXSxrPV9bMV0sVD1jKHQsZSx2LCJ5IiksTT1UWzBdLEE9VFsxXSxTPWUuX2xlbmd0aDtrLmxlbmd0aD5TJiZrLnNwbGljZShTLGsubGVuZ3RoLVMpLEEubGVuZ3RoPlMmJkEuc3BsaWNlKFMsQS5sZW5ndGgtUyk7dmFyIEU9W10sTD1bXSxDPVtdLFA9InN0cmluZyI9PXR5cGVvZiB3LnNpemUsTz0ic3RyaW5nIj09dHlwZW9mIE0uc2l6ZSx6PVtdLEk9W10sRD1QP3o6dyxSPU8/STpNLEY9MCxCPVtdLE49W10saj1lLmhpc3Rub3JtLFY9ZS5oaXN0ZnVuYyxVPS0xIT09ai5pbmRleE9mKCJkZW5zaXR5IikscT0ibWF4Ij09PVZ8fCJtaW4iPT09Vj9udWxsOjAsSD1pLmNvdW50LEc9b1tqXSxZPSExLFc9W10sWD1bXSxaPSJ6ImluIGU/ZS56OiJtYXJrZXIiaW4gZSYmQXJyYXkuaXNBcnJheShlLm1hcmtlci5jb2xvcik/ZS5tYXJrZXIuY29sb3I6IiI7WiYmImNvdW50IiE9PVYmJihZPSJhdmciPT09VixIPWlbVl0pO3ZhciBKPXcuc2l6ZSxLPXgody5zdGFydCksUT14KHcuZW5kKSsoSy1hLnRpY2tJbmNyZW1lbnQoSyxKLCExLG0pKS8xZTY7Zm9yKHI9SztyPFE7cj1hLnRpY2tJbmNyZW1lbnQocixKLCExLG0pKUwucHVzaChxKSx6LnB1c2gociksWSYmQy5wdXNoKDApO3oucHVzaChyKTt2YXIgJCx0dD1MLmxlbmd0aCxldD0oci1LKS90dCxydD0oJD1LK2V0LzIsZy5jMnIoJCwwLG0pKSxudD1NLnNpemUsYXQ9YihNLnN0YXJ0KSxpdD1iKE0uZW5kKSsoYXQtYS50aWNrSW5jcmVtZW50KGF0LG50LCExLHkpKS8xZTY7Zm9yKHI9YXQ7cjxpdDtyPWEudGlja0luY3JlbWVudChyLG50LCExLHkpKXtFLnB1c2goTC5zbGljZSgpKSxJLnB1c2gocik7dmFyIG90PW5ldyBBcnJheSh0dCk7Zm9yKGw9MDtsPHR0O2wrKylvdFtsXT1bXTtOLnB1c2gob3QpLFkmJkIucHVzaChDLnNsaWNlKCkpfUkucHVzaChyKTt2YXIgc3Q9RS5sZW5ndGgsbHQ9KHItYXQpL3N0LGN0PWZ1bmN0aW9uKHQpe3JldHVybiB2LmMycih0LDAseSl9KGF0K2x0LzIpO1UmJihXPXUoTC5sZW5ndGgsRCxldCxQKSxYPXUoRS5sZW5ndGgsUixsdCxPKSksUHx8ImRhdGUiIT09Zy50eXBlfHwoRD1oKHgsRCkpLE98fCJkYXRlIiE9PXYudHlwZXx8KFI9aChiLFIpKTt2YXIgdXQ9ITAsaHQ9ITAsZnQ9bmV3IEFycmF5KHR0KSxwdD1uZXcgQXJyYXkoc3QpLGR0PTEvMCxndD0xLzAsdnQ9MS8wLG10PTEvMDtmb3Iocj0wO3I8UztyKyspe3ZhciB5dD1rW3JdLHh0PUFbcl07cD1uLmZpbmRCaW4oeXQsRCksZD1uLmZpbmRCaW4oeHQsUikscD49MCYmcDx0dCYmZD49MCYmZDxzdCYmKEYrPUgocCxyLEVbZF0sWixCW2RdKSxOW2RdW3BdLnB1c2gociksdXQmJih2b2lkIDA9PT1mdFtwXT9mdFtwXT15dDpmdFtwXSE9PXl0JiYodXQ9ITEpKSxodCYmKHZvaWQgMD09PXB0W2RdP3B0W2RdPXh0OnB0W2RdIT09eHQmJihodD0hMSkpLGR0PU1hdGgubWluKGR0LHl0LXpbcF0pLGd0PU1hdGgubWluKGd0LHpbcCsxXS15dCksdnQ9TWF0aC5taW4odnQseHQtSVtkXSksbXQ9TWF0aC5taW4obXQsSVtkKzFdLXh0KSl9aWYoWSlmb3IoZD0wO2Q8c3Q7ZCsrKUYrPXMoRVtkXSxCW2RdKTtpZihHKWZvcihkPTA7ZDxzdDtkKyspRyhFW2RdLEYsVyxYW2RdKTtyZXR1cm57eDprLHhSYW5nZXM6Zih6LHV0JiZmdCxkdCxndCxnLG0pLHgwOnJ0LGR4OmV0LHk6QSx5UmFuZ2VzOmYoSSxodCYmcHQsdnQsbXQsdix5KSx5MDpjdCxkeTpsdCx6OkUscHRzOk59fX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi4vaGlzdG9ncmFtL2F2ZXJhZ2UiOjEwMTksIi4uL2hpc3RvZ3JhbS9iaW5fZnVuY3Rpb25zIjoxMDIxLCIuLi9oaXN0b2dyYW0vYmluX2xhYmVsX3ZhbHMiOjEwMjIsIi4uL2hpc3RvZ3JhbS9jYWxjIjoxMDIzLCIuLi9oaXN0b2dyYW0vbm9ybV9mdW5jdGlvbnMiOjEwMzB9XSwxMDMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9zYW1wbGVfZGVmYXVsdHMiKSxpPXQoIi4uL2hlYXRtYXAvc3R5bGVfZGVmYXVsdHMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixhKX1hKHQsZSxjLGwpLCExIT09ZS52aXNpYmxlJiYoaSh0LGUsYyxsKSxvKHQsZSxsLGMse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pLGMoImhvdmVydGVtcGxhdGUiKSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjAyLCIuLi8uLi9saWIiOjcxNywiLi4vaGVhdG1hcC9zdHlsZV9kZWZhdWx0cyI6MTAxMywiLi9hdHRyaWJ1dGVzIjoxMDMxLCIuL3NhbXBsZV9kZWZhdWx0cyI6MTAzNn1dLDEwMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGVhdG1hcC9ob3ZlciIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5ob3ZlckxhYmVsVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxvLHMpe3ZhciBsPW4odCxlLHIsaSxvLHMpO2lmKGwpe3ZhciBjPSh0PWxbMF0pLmluZGV4LHU9Y1swXSxoPWNbMV0sZj10LmNkWzBdLHA9Zi54UmFuZ2VzW2hdLGQ9Zi55UmFuZ2VzW3VdO3JldHVybiB0LnhMYWJlbD1hKHQueGEscFswXSxwWzFdKSx0LnlMYWJlbD1hKHQueWEsZFswXSxkWzFdKSxsfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi4vaGVhdG1hcC9ob3ZlciI6MTAwN31dLDEwMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi4vaGlzdG9ncmFtL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY2FsYzp0KCIuLi9oZWF0bWFwL2NhbGMiKSxwbG90OnQoIi4uL2hlYXRtYXAvcGxvdCIpLGxheWVyTmFtZToiaGVhdG1hcGxheWVyIixjb2xvcmJhcjp0KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksc3R5bGU6dCgiLi4vaGVhdG1hcC9zdHlsZSIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi4vaGlzdG9ncmFtL2V2ZW50X2RhdGEiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaGlzdG9ncmFtMmQiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsImhpc3RvZ3JhbSIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NiwiLi4vaGVhdG1hcC9jYWxjIjoxMDAxLCIuLi9oZWF0bWFwL2NvbG9yYmFyIjoxMDAzLCIuLi9oZWF0bWFwL3Bsb3QiOjEwMTEsIi4uL2hlYXRtYXAvc3R5bGUiOjEwMTIsIi4uL2hpc3RvZ3JhbS9jcm9zc190cmFjZV9kZWZhdWx0cyI6MTAyNSwiLi4vaGlzdG9ncmFtL2V2ZW50X2RhdGEiOjEwMjcsIi4vYXR0cmlidXRlcyI6MTAzMSwiLi9kZWZhdWx0cyI6MTAzMywiLi9ob3ZlciI6MTAzNH1dLDEwMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgbz1yKCJ4Iikscz1yKCJ5IiksbD1hLm1pblJvd0xlbmd0aChvKSxjPWEubWluUm93TGVuZ3RoKHMpO2wmJmM/KGUuX2xlbmd0aD1NYXRoLm1pbihsLGMpLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiXSxpKSwocigieiIpfHxyKCJtYXJrZXIuY29sb3IiKSkmJnIoImhpc3RmdW5jIikscigiaGlzdG5vcm0iKSxyKCJhdXRvYmlueCIpLHIoImF1dG9iaW55IikpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDZ9XSwxMDM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hpc3RvZ3JhbTJkL2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2NvbnRvdXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1vKHt4Om4ueCx5Om4ueSx6Om4ueixtYXJrZXI6bi5tYXJrZXIsaGlzdG5vcm06bi5oaXN0bm9ybSxoaXN0ZnVuYzpuLmhpc3RmdW5jLG5iaW5zeDpuLm5iaW5zeCx4YmluczpuLnhiaW5zLG5iaW5zeTpuLm5iaW5zeSx5YmluczpuLnliaW5zLGF1dG9iaW54Om4uYXV0b2JpbngsYXV0b2Jpbnk6bi5hdXRvYmlueSxiaW5ncm91cDpuLmJpbmdyb3VwLHhiaW5ncm91cDpuLnhiaW5ncm91cCx5YmluZ3JvdXA6bi55YmluZ3JvdXAsYXV0b2NvbnRvdXI6YS5hdXRvY29udG91cixuY29udG91cnM6YS5uY29udG91cnMsY29udG91cnM6YS5jb250b3VycyxsaW5lOntjb2xvcjphLmxpbmUuY29sb3Isd2lkdGg6byh7fSxhLmxpbmUud2lkdGgse2RmbHQ6LjV9KSxkYXNoOmEubGluZS5kYXNoLHNtb290aGluZzphLmxpbmUuc21vb3RoaW5nLGVkaXRUeXBlOiJwbG90In0semhvdmVyZm9ybWF0Om4uemhvdmVyZm9ybWF0LGhvdmVydGVtcGxhdGU6bi5ob3ZlcnRlbXBsYXRlfSxpKCIiLHtjTGV0dGVyOiJ6IixlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTk5LCIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uL2NvbnRvdXIvYXR0cmlidXRlcyI6OTQzLCIuLi9oaXN0b2dyYW0yZC9hdHRyaWJ1dGVzIjoxMDMxfV0sMTAzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2hpc3RvZ3JhbTJkL3NhbXBsZV9kZWZhdWx0cyIpLGk9dCgiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyIpLG89dCgiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixhKX1hKHQsZSxjLGwpLCExIT09ZS52aXNpYmxlJiYoaSh0LGUsYyxmdW5jdGlvbihyKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxzLHIpfSksbyh0LGUsYyxsKSxjKCJob3ZlcnRlbXBsYXRlIikpfX0seyIuLi8uLi9saWIiOjcxNywiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyI6OTUwLCIuLi9jb250b3VyL3N0eWxlX2RlZmF1bHRzIjo5NjQsIi4uL2hpc3RvZ3JhbTJkL3NhbXBsZV9kZWZhdWx0cyI6MTAzNiwiLi9hdHRyaWJ1dGVzIjoxMDM3fV0sMTAzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuLi9oaXN0b2dyYW0vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiKSxjYWxjOnQoIi4uL2NvbnRvdXIvY2FsYyIpLHBsb3Q6dCgiLi4vY29udG91ci9wbG90IikucGxvdCxsYXllck5hbWU6ImNvbnRvdXJsYXllciIsc3R5bGU6dCgiLi4vY29udG91ci9zdHlsZSIpLGNvbG9yYmFyOnQoIi4uL2NvbnRvdXIvY29sb3JiYXIiKSxob3ZlclBvaW50czp0KCIuLi9jb250b3VyL2hvdmVyIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6Imhpc3RvZ3JhbTJkY29udG91ciIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsIjJkTWFwIiwiY29udG91ciIsImhpc3RvZ3JhbSIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NiwiLi4vY29udG91ci9jYWxjIjo5NDQsIi4uL2NvbnRvdXIvY29sb3JiYXIiOjk0NiwiLi4vY29udG91ci9ob3ZlciI6OTU2LCIuLi9jb250b3VyL3Bsb3QiOjk2MSwiLi4vY29udG91ci9zdHlsZSI6OTYzLCIuLi9oaXN0b2dyYW0vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjEwMjUsIi4vYXR0cmlidXRlcyI6MTAzNywiLi9kZWZhdWx0cyI6MTAzOH1dLDEwNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7Zm9yKHZhciBuPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4vY29uc3RhbnRzIikuY29sb3Jtb2RlbCxzPVsicmdiIiwicmdiYSIsImhzbCIsImhzbGEiXSxsPVtdLGM9W10sdT0wO3U8cy5sZW5ndGg7dSsrKWwucHVzaCgiRm9yIHRoZSBgIitzW3VdKyJgIGNvbG9ybW9kZWwsIGl0IGlzIFsiK29bc1t1XV0ubWluLmpvaW4oIiwgIikrIl0uIiksYy5wdXNoKCJGb3IgdGhlIGAiK3NbdV0rImAgY29sb3Jtb2RlbCwgaXQgaXMgWyIrb1tzW3VdXS5tYXguam9pbigiLCAiKSsiXS4iKTtlLmV4cG9ydHM9aSh7ejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxjb2xvcm1vZGVsOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cyxkZmx0OiJyZ2IiLGVkaXRUeXBlOiJjYWxjIn0sem1pbjp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn1dLGVkaXRUeXBlOiJjYWxjIn0sem1heDp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn1dLGVkaXRUeXBlOiJjYWxjIn0seDA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZHk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6InBsb3QifSxob3ZlcnRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJwbG90In0saG92ZXJpbmZvOmkoe30sbi5ob3ZlcmluZm8se2ZsYWdzOlsieCIsInkiLCJ6IiwiY29sb3IiLCJuYW1lIiwidGV4dCJdLGRmbHQ6IngreSt6K3RleHQrbmFtZSJ9KSxob3ZlcnRlbXBsYXRlOmEoe30se2tleXM6WyJ6IiwiY29sb3IiLCJjb2xvcm1vZGVsIl19KSx0cmFuc2Zvcm1zOnZvaWQgMH0pfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NDEsIi4vY29uc3RhbnRzIjoxMDQyfV0sMTA0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4vY29uc3RhbnRzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPXQoIi4uLy4uL2xpYiIpLm1heFJvd0xlbmd0aDtmdW5jdGlvbiBsKHQsZSxyLGEpe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5jb25zdHJhaW4oKGktdCkqZSxyLGEpfX1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBuLmNvbnN0cmFpbihyLHQsZSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49by5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLHU9by5nZXRGcm9tSWQodCxlLnlheGlzfHwieSIpLGg9bi5kMmMoZS54MCktZS5keC8yLGY9dS5kMmMoZS55MCktZS5keS8yLHA9ZS56Lmxlbmd0aCxkPXMoZS56KSxnPVtoLGgrZCplLmR4XSx2PVtmLGYrcCplLmR5XTtpZihuJiYibG9nIj09PW4udHlwZSlmb3Iocj0wO3I8ZDtyKyspZy5wdXNoKGgrciplLmR4KTtpZih1JiYibG9nIj09PXUudHlwZSlmb3Iocj0wO3I8cDtyKyspdi5wdXNoKGYrciplLmR5KTtyZXR1cm4gZS5fZXh0cmVtZXNbbi5faWRdPW8uZmluZEV4dHJlbWVzKG4sZyksZS5fZXh0cmVtZXNbdS5faWRdPW8uZmluZEV4dHJlbWVzKHUsdiksZS5fc2NhbGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY29sb3Jtb2RlbCxyPWUubGVuZ3RoLG49YS5jb2xvcm1vZGVsW2VdO3QuX3NBcnJheT1bXTtmb3IodmFyIG89MDtvPHI7bysrKW4ubWluW29dIT09dC56bWluW29dfHxuLm1heFtvXSE9PXQuem1heFtvXT90Ll9zQXJyYXkucHVzaChsKHQuem1pbltvXSwobi5tYXhbb10tbi5taW5bb10pLyh0LnptYXhbb10tdC56bWluW29dKSxuLm1pbltvXSxuLm1heFtvXSkpOnQuX3NBcnJheS5wdXNoKGMobi5taW5bb10sbi5tYXhbb10pKTtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWUuc2xpY2UoMCxyKSxhPTA7YTxyO2ErKyl7dmFyIG89blthXTtpZighaShvKSlyZXR1cm4hMTtuW2FdPXQuX3NBcnJheVthXShvKX1yZXR1cm4gbn19KGUpLFt7eDA6aCx5MDpmLHo6ZS56LHc6ZCxoOnB9XX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsIi4vY29uc3RhbnRzIjoxMDQyLCJmYXN0LWlzbnVtZXJpYyI6MjI4fV0sMTA0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NvbG9ybW9kZWw6e3JnYjp7bWluOlswLDAsMF0sbWF4OlsyNTUsMjU1LDI1NV0sZm10OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKDAsMyl9LHN1ZmZpeDpbIiIsIiIsIiJdfSxyZ2JhOnttaW46WzAsMCwwLDBdLG1heDpbMjU1LDI1NSwyNTUsMV0sZm10OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKDAsNCl9LHN1ZmZpeDpbIiIsIiIsIiIsIiJdfSxoc2w6e21pbjpbMCwwLDBdLG1heDpbMzYwLDEwMCwxMDBdLGZtdDpmdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKDAsMyk7cmV0dXJuIGVbMV09ZVsxXSsiJSIsZVsyXT1lWzJdKyIlIixlfSxzdWZmaXg6WyJceGIwIiwiJSIsIiUiXX0saHNsYTp7bWluOlswLDAsMCwwXSxtYXg6WzM2MCwxMDAsMTAwLDFdLGZtdDpmdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKDAsNCk7cmV0dXJuIGVbMV09ZVsxXSsiJSIsZVsyXT1lWzJdKyIlIixlfSxzdWZmaXg6WyJceGIwIiwiJSIsIiUiLCIiXX19fX0se31dLDEwNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxpPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBvPXIoInoiKTtpZih2b2lkIDAhPT1vJiZvLmxlbmd0aCYmb1swXSYmb1swXS5sZW5ndGgpe3IoIngwIikscigieTAiKSxyKCJkeCIpLHIoImR5Iik7dmFyIHM9cigiY29sb3Jtb2RlbCIpO3IoInptaW4iLGkuY29sb3Jtb2RlbFtzXS5taW4pLHIoInptYXgiLGkuY29sb3Jtb2RlbFtzXS5tYXgpLHIoInRleHQiKSxyKCJob3ZlcnRleHQiKSxyKCJob3ZlcnRlbXBsYXRlIiksZS5fbGVuZ3RoPW51bGx9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuL2F0dHJpYnV0ZXMiOjEwNDAsIi4vY29uc3RhbnRzIjoxMDQyfV0sMTA0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4ieFZhbCJpbiBlJiYodC54PWUueFZhbCksInlWYWwiaW4gZSYmKHQueT1lLnlWYWwpLGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLHQuY29sb3I9ZS5jb2xvcix0LmNvbG9ybW9kZWw9ZS50cmFjZS5jb2xvcm1vZGVsLHR9fSx7fV0sMTA0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYT10KCIuLi8uLi9saWIiKSxpPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz10LmNkWzBdLHM9by50cmFjZSxsPXQueGEsYz10LnlhO2lmKCEobi5pbmJveChlLW8ueDAsZS0oby54MCtvLncqcy5keCksMCk+MHx8bi5pbmJveChyLW8ueTAsci0oby55MCtvLmgqcy5keSksMCk+MCkpe3ZhciB1PU1hdGguZmxvb3IoKGUtby54MCkvcy5keCksaD1NYXRoLmZsb29yKE1hdGguYWJzKHItby55MCkvcy5keSk7aWYoby56W2hdW3VdKXt2YXIgZixwPW8uaGl8fHMuaG92ZXJpbmZvO2lmKHApe3ZhciBkPXAuc3BsaXQoIisiKTstMSE9PWQuaW5kZXhPZigiYWxsIikmJihkPVsiY29sb3IiXSksLTEhPT1kLmluZGV4T2YoImNvbG9yIikmJihmPSEwKX12YXIgZyx2PXMuY29sb3Jtb2RlbCxtPXYubGVuZ3RoLHk9cy5fc2NhbGVyKG8ueltoXVt1XSkseD1pLmNvbG9ybW9kZWxbdl0uc3VmZml4LGI9W107KHMuaG92ZXJ0ZW1wbGF0ZXx8ZikmJihiLnB1c2goIlsiK1t5WzBdK3hbMF0seVsxXSt4WzFdLHlbMl0reFsyXV0uam9pbigiLCAiKSksND09PW0mJmIucHVzaCgiLCAiK3lbM10reFszXSksYi5wdXNoKCJdIiksYj1iLmpvaW4oIiIpLHQuZXh0cmFUZXh0PXYudG9VcHBlckNhc2UoKSsiOiAiK2IpLEFycmF5LmlzQXJyYXkocy5ob3ZlcnRleHQpJiZBcnJheS5pc0FycmF5KHMuaG92ZXJ0ZXh0W2hdKT9nPXMuaG92ZXJ0ZXh0W2hdW3VdOkFycmF5LmlzQXJyYXkocy50ZXh0KSYmQXJyYXkuaXNBcnJheShzLnRleHRbaF0pJiYoZz1zLnRleHRbaF1bdV0pO3ZhciBfPWMuYzJwKG8ueTArKGgrLjUpKnMuZHkpLHc9by54MCsodSsuNSkqcy5keCxrPW8ueTArKGgrLjUpKnMuZHksVD0iWyIrby56W2hdW3VdLnNsaWNlKDAscy5jb2xvcm1vZGVsLmxlbmd0aCkuam9pbigiLCAiKSsiXSI7cmV0dXJuW2EuZXh0ZW5kRmxhdCh0LHtpbmRleDpbaCx1XSx4MDpsLmMycChvLngwK3Uqcy5keCkseDE6bC5jMnAoby54MCsodSsxKSpzLmR4KSx5MDpfLHkxOl8sY29sb3I6eSx4VmFsOncseExhYmVsVmFsOncseVZhbDprLHlMYWJlbFZhbDprLHpMYWJlbFZhbDpULHRleHQ6Zyxob3ZlcnRlbXBsYXRlTGFiZWxzOnt6TGFiZWw6VCxjb2xvckxhYmVsOmIsImNvbG9yWzBdTGFiZWwiOnlbMF0reFswXSwiY29sb3JbMV1MYWJlbCI6eVsxXSt4WzFdLCJjb2xvclsyXUxhYmVsIjp5WzJdK3hbMl0sImNvbG9yWzNdTGFiZWwiOnlbM10reFszXX19KV19fX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NjMwLCIuLi8uLi9saWIiOjcxNywiLi9jb25zdGFudHMiOjEwNDJ9XSwxMDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJpbWFnZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsIjJkTWFwIiwibm9Tb3J0aW5nQnlWYWx1ZSJdLGFuaW1hdGFibGU6ITEsbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzYsIi4vYXR0cmlidXRlcyI6MTA0MCwiLi9jYWxjIjoxMDQxLCIuL2RlZmF1bHRzIjoxMDQzLCIuL2V2ZW50X2RhdGEiOjEwNDQsIi4vaG92ZXIiOjEwNDUsIi4vcGxvdCI6MTA0NywiLi9zdHlsZSI6MTA0OH1dLDEwNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxvPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3ZhciBsPWUueGF4aXMsYz1lLnlheGlzO2EubWFrZVRyYWNlR3JvdXBzKHMsciwiaW0iKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHIscyx1LGgsZixwPW4uc2VsZWN0KHRoaXMpLGQ9dFswXSxnPWQudHJhY2Usdj1kLnosbT1kLngwLHk9ZC55MCx4PWQudyxiPWQuaCxfPWcuZHgsdz1nLmR5O2ZvcihmPTA7dm9pZCAwPT09ZSYmZjx4OyllPWwuYzJwKG0rZipfKSxmKys7Zm9yKGY9eDt2b2lkIDA9PT1yJiZmPjA7KXI9bC5jMnAobStmKl8pLGYtLTtmb3IoZj0wO3ZvaWQgMD09PXUmJmY8YjspdT1jLmMycCh5K2YqdyksZisrO2ZvcihmPWI7dm9pZCAwPT09aCYmZj4wOyloPWMuYzJwKHkrZip3KSxmLS07cjxlJiYocz1yLHI9ZSxlPXMpLGg8dSYmKHM9dSx1PWgsaD1zKTtlPU1hdGgubWF4KC0uNSpsLl9sZW5ndGgsZSkscj1NYXRoLm1pbigxLjUqbC5fbGVuZ3RoLHIpLHU9TWF0aC5tYXgoLS41KmMuX2xlbmd0aCx1KSxoPU1hdGgubWluKDEuNSpjLl9sZW5ndGgsaCk7dmFyIGs9TWF0aC5yb3VuZChyLWUpLFQ9TWF0aC5yb3VuZChoLXUpO2lmKGs8PTB8fFQ8PTApe3Auc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoW10pLmV4aXQoKS5yZW1vdmUoKX1lbHNle3ZhciBNPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO00ud2lkdGg9ayxNLmhlaWdodD1UO3ZhciBBLFM9TS5nZXRDb250ZXh0KCIyZCIpLEU9ZnVuY3Rpb24odCl7cmV0dXJuIGEuY29uc3RyYWluKE1hdGgucm91bmQobC5jMnAobSt0Kl8pLWUpLDAsayl9LEw9ZnVuY3Rpb24odCl7cmV0dXJuIGEuY29uc3RyYWluKE1hdGgucm91bmQoYy5jMnAoeSt0KncpLXUpLDAsVCl9LEM9by5jb2xvcm1vZGVsW2cuY29sb3Jtb2RlbF0uZm10O2ZvcihmPTA7ZjxkLnc7ZisrKXt2YXIgUD1FKGYpLE89RShmKzEpO2lmKE8hPT1QJiYhaXNOYU4oTykmJiFpc05hTihQKSlmb3IodmFyIHo9MDt6PGQuaDt6Kyspe3ZhciBJPUwoeiksRD1MKHorMSk7RD09PUl8fGlzTmFOKEQpfHxpc05hTihJKXx8IXZbel1bZl18fChBPWcuX3NjYWxlcih2W3pdW2ZdKSxTLmZpbGxTdHlsZT1BP2cuY29sb3Jtb2RlbCsiKCIrQyhBKS5qb2luKCIsIikrIikiOiJyZ2JhKDAsMCwwLDApIixTLmZpbGxSZWN0KFAsSSxPLVAsRC1JKSl9fXZhciBSPXAuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEodCk7Ui5lbnRlcigpLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6aS5zdmcscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSxSLmF0dHIoe2hlaWdodDpULHdpZHRoOmsseDplLHk6dSwieGxpbms6aHJlZiI6TS50b0RhdGFVUkwoImltYWdlL3BuZyIpfSl9fSl9fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2OTQsIi4uLy4uL2xpYiI6NzE3LCIuL2NvbnN0YW50cyI6MTA0MixkMzoxNjV9XSwxMDQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLmltIGltYWdlIikuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYWNlLm9wYWNpdHl9KX19LHtkMzoxNjV9XSwxMDQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZERlZXAsaT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbz10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLHU9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGg9dCgiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIiksZj0odCgiLi4vLi4vY29uc3RhbnRzL2RvY3MiKS5GT1JNQVRfTElOSyxvKHtlZGl0VHlwZToicGxvdCIsY29sb3JFZGl0VHlwZToicGxvdCJ9KSkscD17Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToicGxvdCJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpzLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJwbG90In0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMifSxkPXt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9XSxlZGl0VHlwZToicGxvdCJ9LGc9dSgic3RlcCIsYSh7fSxwLHtyYW5nZTpkfSkpO2UuZXhwb3J0cz17bW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGVkaXRUeXBlOiJjYWxjIixmbGFnczpbIm51bWJlciIsImRlbHRhIiwiZ2F1Z2UiXSxkZmx0OiJudW1iZXIifSx2YWx1ZTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0sYWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGVkaXRUeXBlOiJwbG90In0sZG9tYWluOmwoe25hbWU6ImluZGljYXRvciIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QifSxhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZWRpdFR5cGU6InBsb3QifSxmb250Om4oe30sZix7fSksZWRpdFR5cGU6InBsb3QifSxudW1iZXI6e3ZhbHVlZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxmb250Om4oe30sZix7fSkscHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sZGVsdGE6e3JlZmVyZW5jZTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSxkZmx0OiJib3R0b20iLGVkaXRUeXBlOiJwbG90In0scmVsYXRpdmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJwbG90IixkZmx0OiExfSx2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LGluY3JlYXNpbmc6e3N5bWJvbDp7dmFsVHlwZToic3RyaW5nIixkZmx0OmguSU5DUkVBU0lORy5TWU1CT0wsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aC5JTkNSRUFTSU5HLkNPTE9SLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxkZWNyZWFzaW5nOntzeW1ib2w6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDpoLkRFQ1JFQVNJTkcuU1lNQk9MLGVkaXRUeXBlOiJwbG90In0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmguREVDUkVBU0lORy5DT0xPUixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sZm9udDpuKHt9LGYse30pLGVkaXRUeXBlOiJjYWxjIn0sZ2F1Z2U6e3NoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixlZGl0VHlwZToicGxvdCIsZGZsdDoiYW5ndWxhciIsdmFsdWVzOlsiYW5ndWxhciIsImJ1bGxldCJdfSxiYXI6YSh7fSxwLHtjb2xvcjp7ZGZsdDoiZ3JlZW4ifX0pLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToicGxvdCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpzLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sYXhpczppKHtyYW5nZTpkLHZpc2libGU6bih7fSxjLnZpc2libGUse2RmbHQ6ITB9KSx0aWNrbW9kZTpjLnRpY2ttb2RlLG50aWNrczpjLm50aWNrcyx0aWNrMDpjLnRpY2swLGR0aWNrOmMuZHRpY2ssdGlja3ZhbHM6Yy50aWNrdmFscyx0aWNrdGV4dDpjLnRpY2t0ZXh0LHRpY2tzOm4oe30sYy50aWNrcyx7ZGZsdDoib3V0c2lkZSJ9KSx0aWNrbGVuOmMudGlja2xlbix0aWNrd2lkdGg6Yy50aWNrd2lkdGgsdGlja2NvbG9yOmMudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmMuc2hvd3RpY2tsYWJlbHMsdGlja2ZvbnQ6byh7fSksdGlja2FuZ2xlOmMudGlja2FuZ2xlLHRpY2tmb3JtYXQ6Yy50aWNrZm9ybWF0LHRpY2tmb3JtYXRzdG9wczpjLnRpY2tmb3JtYXRzdG9wcyx0aWNrcHJlZml4OmMudGlja3ByZWZpeCxzaG93dGlja3ByZWZpeDpjLnNob3d0aWNrcHJlZml4LHRpY2tzdWZmaXg6Yy50aWNrc3VmZml4LHNob3d0aWNrc3VmZml4OmMuc2hvd3RpY2tzdWZmaXgsc2VwYXJhdGV0aG91c2FuZHM6Yy5zZXBhcmF0ZXRob3VzYW5kcyxleHBvbmVudGZvcm1hdDpjLmV4cG9uZW50Zm9ybWF0LHNob3dleHBvbmVudDpjLnNob3dleHBvbmVudCxlZGl0VHlwZToicGxvdCJ9LCJwbG90Iiksc3RlcHM6Zyx0aHJlc2hvbGQ6e2xpbmU6e2NvbG9yOm4oe30scC5saW5lLmNvbG9yLHt9KSx3aWR0aDpuKHt9LHAubGluZS53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6InBsb3QifSx0aGlja25lc3M6bih7fSxwLnRoaWNrbmVzcyx7ZGZsdDouODV9KSx2YWx1ZTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsZGZsdDohMX0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjU5MSwiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIjo2ODcsIi4uLy4uL2NvbnN0YW50cy9kb2NzIjo2ODgsIi4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzQ4LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo3NTUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc3LCIuLi8uLi9wbG90cy9kb21haW4iOjc5MCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3OTF9XSwxMDUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIik7ci5uYW1lPSJpbmRpY2F0b3IiLHIucGxvdD1mdW5jdGlvbih0LGUsYSxpKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGEsaSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGEsaSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsYSxpKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNn1dLDEwNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj1lLnZhbHVlOyJudW1iZXIiIT10eXBlb2YgZS5fbGFzdFZhbHVlJiYoZS5fbGFzdFZhbHVlPWUudmFsdWUpO3ZhciBhPWUuX2xhc3RWYWx1ZSxpPWE7cmV0dXJuIGUuX2hhc0RlbHRhJiYibnVtYmVyIj09dHlwZW9mIGUuZGVsdGEucmVmZXJlbmNlJiYoaT1lLmRlbHRhLnJlZmVyZW5jZSksclswXT17eTpuLGxhc3RZOmEsZGVsdGE6bi1pLHJlbGF0aXZlRGVsdGE6KG4taSkvaX0scn19fSx7fV0sMTA1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2RlZmF1bHROdW1iZXJGb250U2l6ZTo4MCxidWxsZXROdW1iZXJEb21haW5TaXplOi4yNSxidWxsZXRQYWRkaW5nOi4wMjUsaW5uZXJSYWRpdXM6Ljc1LHZhbHVlVGhpY2tuZXNzOi41LHRpdGxlUGFkZGluZzo1LGhvcml6b250YWxQYWRkaW5nOjEwfX0se31dLDEwNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLG89dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLHM9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbD10KCIuL2NvbnN0YW50cy5qcyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxoPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIik7ZnVuY3Rpb24gZih0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEuZ2F1Z2Uuc3RlcHMscixpKX1yKCJjb2xvciIpLHIoImxpbmUuY29sb3IiKSxyKCJsaW5lLndpZHRoIikscigicmFuZ2UiKSxyKCJ0aGlja25lc3MiKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLHApe2Z1bmN0aW9uIGQocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1pKGUscCxkKSxkKCJtb2RlIiksZS5faGFzTnVtYmVyPS0xIT09ZS5tb2RlLmluZGV4T2YoIm51bWJlciIpLGUuX2hhc0RlbHRhPS0xIT09ZS5tb2RlLmluZGV4T2YoImRlbHRhIiksZS5faGFzR2F1Z2U9LTEhPT1lLm1vZGUuaW5kZXhPZigiZ2F1Z2UiKTt2YXIgZz1kKCJ2YWx1ZSIpO2UuX3JhbmdlPVswLCJudW1iZXIiPT10eXBlb2YgZz8xLjUqZzoxXTt2YXIgdixtLHkseCxiLF8sdz1uZXcgQXJyYXkoMik7ZnVuY3Rpb24gayh0LGUpe3JldHVybiBuLmNvZXJjZSh5LHgsYS5nYXVnZSx0LGUpfWZ1bmN0aW9uIFQodCxlKXtyZXR1cm4gbi5jb2VyY2UoYixfLGEuZ2F1Z2UuYXhpcyx0LGUpfWlmKGUuX2hhc051bWJlciYmKGQoIm51bWJlci52YWx1ZWZvcm1hdCIpLGQoIm51bWJlci5mb250LmNvbG9yIixwLmZvbnQuY29sb3IpLGQoIm51bWJlci5mb250LmZhbWlseSIscC5mb250LmZhbWlseSksZCgibnVtYmVyLmZvbnQuc2l6ZSIpLHZvaWQgMD09PWUubnVtYmVyLmZvbnQuc2l6ZSYmKGUubnVtYmVyLmZvbnQuc2l6ZT1sLmRlZmF1bHROdW1iZXJGb250U2l6ZSx3WzBdPSEwKSxkKCJudW1iZXIucHJlZml4IiksZCgibnVtYmVyLnN1ZmZpeCIpLHY9ZS5udW1iZXIuZm9udC5zaXplKSxlLl9oYXNEZWx0YSYmKGQoImRlbHRhLmZvbnQuY29sb3IiLHAuZm9udC5jb2xvciksZCgiZGVsdGEuZm9udC5mYW1pbHkiLHAuZm9udC5mYW1pbHkpLGQoImRlbHRhLmZvbnQuc2l6ZSIpLHZvaWQgMD09PWUuZGVsdGEuZm9udC5zaXplJiYoZS5kZWx0YS5mb250LnNpemU9KGUuX2hhc051bWJlcj8uNToxKSoodnx8bC5kZWZhdWx0TnVtYmVyRm9udFNpemUpLHdbMV09ITApLGQoImRlbHRhLnJlZmVyZW5jZSIsZS52YWx1ZSksZCgiZGVsdGEucmVsYXRpdmUiKSxkKCJkZWx0YS52YWx1ZWZvcm1hdCIsZS5kZWx0YS5yZWxhdGl2ZT8iMiUiOiIiKSxkKCJkZWx0YS5pbmNyZWFzaW5nLnN5bWJvbCIpLGQoImRlbHRhLmluY3JlYXNpbmcuY29sb3IiKSxkKCJkZWx0YS5kZWNyZWFzaW5nLnN5bWJvbCIpLGQoImRlbHRhLmRlY3JlYXNpbmcuY29sb3IiKSxkKCJkZWx0YS5wb3NpdGlvbiIpLG09ZS5kZWx0YS5mb250LnNpemUpLGUuX3NjYWxlTnVtYmVycz0oIWUuX2hhc051bWJlcnx8d1swXSkmJighZS5faGFzRGVsdGF8fHdbMV0pfHwhMSxkKCJ0aXRsZS5mb250LmNvbG9yIixwLmZvbnQuY29sb3IpLGQoInRpdGxlLmZvbnQuZmFtaWx5IixwLmZvbnQuZmFtaWx5KSxkKCJ0aXRsZS5mb250LnNpemUiLC4yNSoodnx8bXx8bC5kZWZhdWx0TnVtYmVyRm9udFNpemUpKSxkKCJ0aXRsZS50ZXh0IiksZS5faGFzR2F1Z2Upeyh5PXQuZ2F1Z2UpfHwoeT17fSkseD1vLm5ld0NvbnRhaW5lcihlLCJnYXVnZSIpLGsoInNoYXBlIiksKGUuX2lzQnVsbGV0PSJidWxsZXQiPT09ZS5nYXVnZS5zaGFwZSl8fGQoInRpdGxlLmFsaWduIiwiY2VudGVyIiksKGUuX2lzQW5ndWxhcj0iYW5ndWxhciI9PT1lLmdhdWdlLnNoYXBlKXx8ZCgiYWxpZ24iLCJjZW50ZXIiKSxrKCJiZ2NvbG9yIixwLnBhcGVyX2JnY29sb3IpLGsoImJvcmRlcndpZHRoIiksaygiYm9yZGVyY29sb3IiKSxrKCJiYXIuY29sb3IiKSxrKCJiYXIubGluZS5jb2xvciIpLGsoImJhci5saW5lLndpZHRoIiksaygiYmFyLnRoaWNrbmVzcyIsbC52YWx1ZVRoaWNrbmVzcyooImJ1bGxldCI9PT1lLmdhdWdlLnNoYXBlPy41OjEpKSxzKHkseCx7bmFtZToic3RlcHMiLGhhbmRsZUl0ZW1EZWZhdWx0czpmfSksaygidGhyZXNob2xkLnZhbHVlIiksaygidGhyZXNob2xkLnRoaWNrbmVzcyIpLGsoInRocmVzaG9sZC5saW5lLndpZHRoIiksaygidGhyZXNob2xkLmxpbmUuY29sb3IiKSxiPXt9LHkmJihiPXkuYXhpc3x8e30pLF89by5uZXdDb250YWluZXIoeCwiYXhpcyIpLFQoInZpc2libGUiKSxlLl9yYW5nZT1UKCJyYW5nZSIsZS5fcmFuZ2UpO3ZhciBNPXtvdXRlclRpY2tzOiEwfTtjKGIsXyxULCJsaW5lYXIiKSxoKGIsXyxULCJsaW5lYXIiLE0pLHUoYixfLFQsTSl9ZWxzZSBkKCJ0aXRsZS5hbGlnbiIsImNlbnRlciIpLGQoImFsaWduIiwiY2VudGVyIiksZS5faXNBbmd1bGFyPWUuX2lzQnVsbGV0PSExO2UuX2xlbmd0aD1udWxsfX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc1NSwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NjEsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo3ODQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjc4NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjc4NiwiLi4vLi4vcGxvdHMvZG9tYWluIjo3OTAsIi4vYXR0cmlidXRlcyI6MTA0OSwiLi9jb25zdGFudHMuanMiOjEwNTJ9XSwxMDU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImluZGljYXRvciIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsic3ZnIiwibm9PcGFjaXR5Iiwibm9Ib3ZlciJdLGFuaW1hdGFibGU6ITAsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY2FsYzp0KCIuL2NhbGMiKS5jYWxjLHBsb3Q6dCgiLi9wbG90IiksbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjoxMDQ5LCIuL2Jhc2VfcGxvdCI6MTA1MCwiLi9jYWxjIjoxMDUxLCIuL2RlZmF1bHRzIjoxMDUzLCIuL3Bsb3QiOjEwNTV9XSwxMDU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9saWIiKSxpPWEucmFkMmRlZyxvPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5NSURfU0hJRlQscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4vY29uc3RhbnRzIiksYz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx1PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyIpLGY9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzIikscD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxkPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxnPXtsZWZ0OiJzdGFydCIsY2VudGVyOiJtaWRkbGUiLHJpZ2h0OiJlbmQifSx2PXtsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjF9LG09L1t5emFmcG5ceGI1bWtNR1RQRVpZXS87ZnVuY3Rpb24geSh0KXtyZXR1cm4gdCYmdC5kdXJhdGlvbj4wfWZ1bmN0aW9uIHgodCl7dC5lYWNoKGZ1bmN0aW9uKHQpe2Quc3Ryb2tlKG4uc2VsZWN0KHRoaXMpLHQubGluZS5jb2xvcil9KS5lYWNoKGZ1bmN0aW9uKHQpe2QuZmlsbChuLnNlbGVjdCh0aGlzKSx0LmNvbG9yKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmUud2lkdGh9KX1mdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0LGk9YS5leHRlbmRGbGF0KHt0eXBlOiJsaW5lYXIiLHRpY2tzOiJvdXRzaWRlIixyYW5nZTpyLHNob3dsaW5lOiEwfSxlKSxvPXt0eXBlOiJsaW5lYXIiLF9pZDoieCIrZS5faWR9LHM9e2xldHRlcjoieCIsZm9udDpuLmZvbnQsbm9Ib3ZlcjohMCxub1RpY2tzb246ITB9O2Z1bmN0aW9uIGwodCxlKXtyZXR1cm4gYS5jb2VyY2UoaSxvLHAsdCxlKX1yZXR1cm4gaChpLG8sbCxzLG4pLGYoaSxvLGwscyksb31mdW5jdGlvbiBfKHQsZSl7cmV0dXJuInRyYW5zbGF0ZSgiK3QrIiwiK2UrIikifWZ1bmN0aW9uIHcodCxlLHIpe3JldHVybltNYXRoLm1pbihlL3Qud2lkdGgsci90LmhlaWdodCksdCxlKyJ4IityXX1mdW5jdGlvbiBrKHQsZSxyLGEpe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iiksbz1uLnNlbGVjdChpKTtyZXR1cm4gby50ZXh0KHQpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoInRleHQtYW5jaG9yIixyKS5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIix0KS5jYWxsKGMuY29udmVydFRvVHNwYW5zLGEpLmNhbGwocy5mb250LGUpLHMuYkJveChvLm5vZGUoKSl9ZnVuY3Rpb24gVCh0LGUscixuLGksbyl7dmFyIHM9Il9jYWNoZSIrZTt0W3NdJiZ0W3NdLmtleT09PWl8fCh0W3NdPXtrZXk6aSx2YWx1ZTpyfSk7dmFyIGw9YS5hZ2dOdW1zKG8sbnVsbCxbdFtzXS52YWx1ZSxuXSwyKTtyZXR1cm4gdFtzXS52YWx1ZT1sLGx9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe3ZhciBmLHA9dC5fZnVsbExheW91dDt5KHIpJiZoJiYoZj1oKCkpLGEubWFrZVRyYWNlR3JvdXBzKHAuX2luZGljYXRvcmxheWVyLGUsInRyYWNlIikuZWFjaChmdW5jdGlvbihlKXt2YXIgaCxNLEEsUyxFLEw9ZVswXS50cmFjZSxDPW4uc2VsZWN0KHRoaXMpLFA9TC5faGFzR2F1Z2UsTz1MLl9pc0FuZ3VsYXIsej1MLl9pc0J1bGxldCxJPUwuZG9tYWluLEQ9e3c6cC5fc2l6ZS53KihJLnhbMV0tSS54WzBdKSxoOnAuX3NpemUuaCooSS55WzFdLUkueVswXSksbDpwLl9zaXplLmwrcC5fc2l6ZS53KkkueFswXSxyOnAuX3NpemUucitwLl9zaXplLncqKDEtSS54WzFdKSx0OnAuX3NpemUudCtwLl9zaXplLmgqKDEtSS55WzFdKSxiOnAuX3NpemUuYitwLl9zaXplLmgqSS55WzBdfSxSPUQubCtELncvMixGPUQudCtELmgvMixCPU1hdGgubWluKEQudy8yLEQuaCksTj1sLmlubmVyUmFkaXVzKkIsaj1MLmFsaWdufHwiY2VudGVyIjtpZihNPUYsUCl7aWYoTyYmKGg9UixNPUYrQi8yLEE9ZnVuY3Rpb24odCl7cmV0dXJuIGU9dCxyPS45Kk4sbj1NYXRoLnNxcnQoZS53aWR0aC8yKihlLndpZHRoLzIpK2UuaGVpZ2h0KmUuaGVpZ2h0KSxbci9uLGUscl07dmFyIGUscixufSkseil7dmFyIFY9bC5idWxsZXRQYWRkaW5nLFU9MS1sLmJ1bGxldE51bWJlckRvbWFpblNpemUrVjtoPUQubCsoVSsoMS1VKSp2W2pdKSpELncsQT1mdW5jdGlvbih0KXtyZXR1cm4gdyh0LChsLmJ1bGxldE51bWJlckRvbWFpblNpemUtVikqRC53LEQuaCl9fX1lbHNlIGg9RC5sK3Zbal0qRC53LEE9ZnVuY3Rpb24odCl7cmV0dXJuIHcodCxELncsRC5oKX07IWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBvLGwsaCxmPXJbMF0udHJhY2UscD1pLm51bWJlcnNYLHg9aS5udW1iZXJzWSx3PWYuYWxpZ258fCJjZW50ZXIiLE09Z1t3XSxBPWkudHJhbnNpdGlvbk9wdHMsUz1pLm9uQ29tcGxldGUsRT1hLmVuc3VyZVNpbmdsZShlLCJnIiwibnVtYmVycyIpLEw9W107Zi5faGFzTnVtYmVyJiZMLnB1c2goIm51bWJlciIpO2YuX2hhc0RlbHRhJiYoTC5wdXNoKCJkZWx0YSIpLCJsZWZ0Ij09PWYuZGVsdGEucG9zaXRpb24mJkwucmV2ZXJzZSgpKTt2YXIgQz1FLnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoTCk7ZnVuY3Rpb24gUChlLHIsbixhKXtpZighZS5tYXRjaCgicyIpfHxuPj0wPT1hPj0wfHxyKG4pLnNsaWNlKC0xKS5tYXRjaChtKXx8cihhKS5zbGljZSgtMSkubWF0Y2gobSkpcmV0dXJuIHI7dmFyIGk9ZS5zbGljZSgpLnJlcGxhY2UoInMiLCJmIikucmVwbGFjZSgvXGQrLyxmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VJbnQodCktMX0pLG89Yih0LHt0aWNrZm9ybWF0Oml9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQpPDE/dS50aWNrVGV4dChvLHQpLnRleHQ6cih0KX19Qy5lbnRlcigpLmFwcGVuZCgidGV4dCIpLEMuYXR0cigidGV4dC1hbmNob3IiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuIHR9KS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJkeCIsbnVsbCkuYXR0cigiZHkiLG51bGwpLEMuZXhpdCgpLnJlbW92ZSgpO3ZhciBPLHo9Zi5tb2RlK2YuYWxpZ247Zi5faGFzRGVsdGEmJihPPWZ1bmN0aW9uKCl7dmFyIGU9Yih0LHt0aWNrZm9ybWF0OmYuZGVsdGEudmFsdWVmb3JtYXR9LGYuX3JhbmdlKTtlLnNldFNjYWxlKCksdS5wcmVwVGlja3MoZSk7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHUudGlja1RleHQoZSx0KS50ZXh0fSxpPWZ1bmN0aW9uKHQpe3ZhciBlPWYuZGVsdGEucmVsYXRpdmU/dC5yZWxhdGl2ZURlbHRhOnQuZGVsdGE7cmV0dXJuIGV9LG89ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXR8fCJudW1iZXIiIT10eXBlb2YgdHx8aXNOYU4odCk/Ii0iOih0PjA/Zi5kZWx0YS5pbmNyZWFzaW5nLnN5bWJvbDpmLmRlbHRhLmRlY3JlYXNpbmcuc3ltYm9sKStlKHQpfSxoPWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlbHRhPj0wP2YuZGVsdGEuaW5jcmVhc2luZy5jb2xvcjpmLmRlbHRhLmRlY3JlYXNpbmcuY29sb3J9O3ZvaWQgMD09PWYuX2RlbHRhTGFzdFZhbHVlJiYoZi5fZGVsdGFMYXN0VmFsdWU9aShyWzBdKSk7dmFyIHA9RS5zZWxlY3QoInRleHQuZGVsdGEiKTtmdW5jdGlvbiBnKCl7cC50ZXh0KG8oaShyWzBdKSxhKSkuY2FsbChkLmZpbGwsaChyWzBdKSkuY2FsbChjLmNvbnZlcnRUb1RzcGFucyx0KX1wLmNhbGwocy5mb250LGYuZGVsdGEuZm9udCkuY2FsbChkLmZpbGwsaCh7ZGVsdGE6Zi5fZGVsdGFMYXN0VmFsdWV9KSkseShBKT9wLnRyYW5zaXRpb24oKS5kdXJhdGlvbihBLmR1cmF0aW9uKS5lYXNlKEEuZWFzaW5nKS50d2VlbigidGV4dCIsZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPWkoclswXSkscz1mLl9kZWx0YUxhc3RWYWx1ZSxsPVAoZi5kZWx0YS52YWx1ZWZvcm1hdCxhLHMsZSksYz1uLmludGVycG9sYXRlTnVtYmVyKHMsZSk7cmV0dXJuIGYuX2RlbHRhTGFzdFZhbHVlPWUsZnVuY3Rpb24oZSl7dC50ZXh0KG8oYyhlKSxsKSksdC5jYWxsKGQuZmlsbCxoKHtkZWx0YTpjKGUpfSkpfX0pLmVhY2goImVuZCIsZnVuY3Rpb24oKXtnKCksUyYmUygpfSkuZWFjaCgiaW50ZXJydXB0IixmdW5jdGlvbigpe2coKSxTJiZTKCl9KTpnKCk7cmV0dXJuIGw9ayhvKGkoclswXSksYSksZi5kZWx0YS5mb250LE0sdCkscH0oKSx6Kz1mLmRlbHRhLnBvc2l0aW9uK2YuZGVsdGEuZm9udC5zaXplK2YuZGVsdGEuZm9udC5mYW1pbHkrZi5kZWx0YS52YWx1ZWZvcm1hdCx6Kz1mLmRlbHRhLmluY3JlYXNpbmcuc3ltYm9sK2YuZGVsdGEuZGVjcmVhc2luZy5zeW1ib2wsaD1sKTtmLl9oYXNOdW1iZXImJighZnVuY3Rpb24oKXt2YXIgZT1iKHQse3RpY2tmb3JtYXQ6Zi5udW1iZXIudmFsdWVmb3JtYXR9LGYuX3JhbmdlKTtlLnNldFNjYWxlKCksdS5wcmVwVGlja3MoZSk7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHUudGlja1RleHQoZSx0KS50ZXh0fSxpPWYubnVtYmVyLnN1ZmZpeCxsPWYubnVtYmVyLnByZWZpeCxoPUUuc2VsZWN0KCJ0ZXh0Lm51bWJlciIpO2Z1bmN0aW9uIHAoKXt2YXIgZT0ibnVtYmVyIj09dHlwZW9mIHJbMF0ueT9sK2EoclswXS55KStpOiItIjtoLnRleHQoZSkuY2FsbChzLmZvbnQsZi5udW1iZXIuZm9udCkuY2FsbChjLmNvbnZlcnRUb1RzcGFucyx0KX15KEEpP2gudHJhbnNpdGlvbigpLmR1cmF0aW9uKEEuZHVyYXRpb24pLmVhc2UoQS5lYXNpbmcpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtwKCksUyYmUygpfSkuZWFjaCgiaW50ZXJydXB0IixmdW5jdGlvbigpe3AoKSxTJiZTKCl9KS5hdHRyVHdlZW4oInRleHQiLGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT1uLmludGVycG9sYXRlTnVtYmVyKHJbMF0ubGFzdFksclswXS55KTtmLl9sYXN0VmFsdWU9clswXS55O3ZhciBvPVAoZi5udW1iZXIudmFsdWVmb3JtYXQsYSxyWzBdLmxhc3RZLHJbMF0ueSk7cmV0dXJuIGZ1bmN0aW9uKHIpe3QudGV4dChsK28oZShyKSkraSl9fSk6cCgpO289ayhsK2EoclswXS55KStpLGYubnVtYmVyLmZvbnQsTSx0KX0oKSx6Kz1mLm51bWJlci5mb250LnNpemUrZi5udW1iZXIuZm9udC5mYW1pbHkrZi5udW1iZXIudmFsdWVmb3JtYXQrZi5udW1iZXIuc3VmZml4K2YubnVtYmVyLnByZWZpeCxoPW8pO2lmKGYuX2hhc0RlbHRhJiZmLl9oYXNOdW1iZXIpe3ZhciBJLEQsUj1bKG8ubGVmdCtvLnJpZ2h0KS8yLChvLnRvcCtvLmJvdHRvbSkvMl0sRj1bKGwubGVmdCtsLnJpZ2h0KS8yLChsLnRvcCtsLmJvdHRvbSkvMl0sQj0uNzUqZi5kZWx0YS5mb250LnNpemU7ImxlZnQiPT09Zi5kZWx0YS5wb3NpdGlvbiYmKEk9VChmLCJkZWx0YVBvcyIsMCwtMSooby53aWR0aCp2W2YuYWxpZ25dK2wud2lkdGgqKDEtdltmLmFsaWduXSkrQikseixNYXRoLm1pbiksRD1SWzFdLUZbMV0saD17d2lkdGg6by53aWR0aCtsLndpZHRoK0IsaGVpZ2h0Ok1hdGgubWF4KG8uaGVpZ2h0LGwuaGVpZ2h0KSxsZWZ0OmwubGVmdCtJLHJpZ2h0Om8ucmlnaHQsdG9wOk1hdGgubWluKG8udG9wLGwudG9wK0QpLGJvdHRvbTpNYXRoLm1heChvLmJvdHRvbSxsLmJvdHRvbStEKX0pLCJyaWdodCI9PT1mLmRlbHRhLnBvc2l0aW9uJiYoST1UKGYsImRlbHRhUG9zIiwwLG8ud2lkdGgqKDEtdltmLmFsaWduXSkrbC53aWR0aCp2W2YuYWxpZ25dK0IseixNYXRoLm1heCksRD1SWzFdLUZbMV0saD17d2lkdGg6by53aWR0aCtsLndpZHRoK0IsaGVpZ2h0Ok1hdGgubWF4KG8uaGVpZ2h0LGwuaGVpZ2h0KSxsZWZ0Om8ubGVmdCxyaWdodDpsLnJpZ2h0K0ksdG9wOk1hdGgubWluKG8udG9wLGwudG9wK0QpLGJvdHRvbTpNYXRoLm1heChvLmJvdHRvbSxsLmJvdHRvbStEKX0pLCJib3R0b20iPT09Zi5kZWx0YS5wb3NpdGlvbiYmKEk9bnVsbCxEPWwuaGVpZ2h0LGg9e3dpZHRoOk1hdGgubWF4KG8ud2lkdGgsbC53aWR0aCksaGVpZ2h0Om8uaGVpZ2h0K2wuaGVpZ2h0LGxlZnQ6TWF0aC5taW4oby5sZWZ0LGwubGVmdCkscmlnaHQ6TWF0aC5tYXgoby5yaWdodCxsLnJpZ2h0KSx0b3A6by5ib3R0b20tby5oZWlnaHQsYm90dG9tOm8uYm90dG9tK2wuaGVpZ2h0fSksInRvcCI9PT1mLmRlbHRhLnBvc2l0aW9uJiYoST1udWxsLEQ9by50b3AsaD17d2lkdGg6TWF0aC5tYXgoby53aWR0aCxsLndpZHRoKSxoZWlnaHQ6by5oZWlnaHQrbC5oZWlnaHQsbGVmdDpNYXRoLm1pbihvLmxlZnQsbC5sZWZ0KSxyaWdodDpNYXRoLm1heChvLnJpZ2h0LGwucmlnaHQpLHRvcDpvLmJvdHRvbS1vLmhlaWdodC1sLmhlaWdodCxib3R0b206by5ib3R0b219KSxPLmF0dHIoe2R4OkksZHk6RH0pfShmLl9oYXNOdW1iZXJ8fGYuX2hhc0RlbHRhKSYmRS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7dmFyIHQ9aS5udW1iZXJzU2NhbGVyKGgpO3orPXRbMl07dmFyIGUscj1UKGYsIm51bWJlcnNTY2FsZSIsMSx0WzBdLHosTWF0aC5taW4pO2YuX3NjYWxlTnVtYmVyc3x8KHI9MSksZT1mLl9pc0FuZ3VsYXI/eC1yKmguYm90dG9tOngtciooaC50b3AraC5ib3R0b20pLzIsZi5fbnVtYmVyc1RvcD1yKmgudG9wK2U7dmFyIG49aFt3XTsiY2VudGVyIj09PXcmJihuPShoLmxlZnQraC5yaWdodCkvMik7dmFyIGE9cC1yKm47cmV0dXJuIF8oYT1UKGYsIm51bWJlcnNUcmFuc2xhdGUiLDAsYSx6LE1hdGgubWF4KSxlKSsiIHNjYWxlKCIrcisiKSJ9KX0odCxDLGUse251bWJlcnNYOmgsbnVtYmVyc1k6TSxudW1iZXJzU2NhbGVyOkEsdHJhbnNpdGlvbk9wdHM6cixvbkNvbXBsZXRlOmZ9KSxQJiYoUz17cmFuZ2U6TC5nYXVnZS5heGlzLnJhbmdlLGNvbG9yOkwuZ2F1Z2UuYmdjb2xvcixsaW5lOntjb2xvcjpMLmdhdWdlLmJvcmRlcmNvbG9yLHdpZHRoOjB9LHRoaWNrbmVzczoxfSxFPXtyYW5nZTpMLmdhdWdlLmF4aXMucmFuZ2UsY29sb3I6InJnYmEoMCwgMCwgMCwgMCkiLGxpbmU6e2NvbG9yOkwuZ2F1Z2UuYm9yZGVyY29sb3Isd2lkdGg6TC5nYXVnZS5ib3JkZXJ3aWR0aH0sdGhpY2tuZXNzOjF9KTt2YXIgcT1DLnNlbGVjdEFsbCgiZy5hbmd1bGFyIikuZGF0YShPP2U6W10pO3EuZXhpdCgpLnJlbW92ZSgpO3ZhciBIPUMuc2VsZWN0QWxsKCJnLmFuZ3VsYXJheGlzIikuZGF0YShPP2U6W10pO0guZXhpdCgpLnJlbW92ZSgpLE8mJmZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBzLGwsYyxoLGY9clswXS50cmFjZSxwPWEuc2l6ZSxkPWEucmFkaXVzLGc9YS5pbm5lclJhZGl1cyx2PWEuZ2F1Z2VCZyxtPWEuZ2F1Z2VPdXRsaW5lLHc9W3AubCtwLncvMixwLnQrcC5oLzIrZC8yXSxrPWEuZ2F1Z2UsVD1hLmxheWVyLE09YS50cmFuc2l0aW9uT3B0cyxBPWEub25Db21wbGV0ZSxTPU1hdGguUEkvMjtmdW5jdGlvbiBFKHQpe3ZhciBlPWYuZ2F1Z2UuYXhpcy5yYW5nZVswXSxyPWYuZ2F1Z2UuYXhpcy5yYW5nZVsxXSxuPSh0LWUpLyhyLWUpKk1hdGguUEktUztyZXR1cm4gbjwtUz8tUzpuPlM/UzpufWZ1bmN0aW9uIEwodCl7cmV0dXJuIG4uc3ZnLmFyYygpLmlubmVyUmFkaXVzKChnK2QpLzItdC8yKihkLWcpKS5vdXRlclJhZGl1cygoZytkKS8yK3QvMiooZC1nKSkuc3RhcnRBbmdsZSgtUyl9ZnVuY3Rpb24gQyh0KXt0LmF0dHIoImQiLGZ1bmN0aW9uKHQpe3JldHVybiBMKHQudGhpY2tuZXNzKS5zdGFydEFuZ2xlKEUodC5yYW5nZVswXSkpLmVuZEFuZ2xlKEUodC5yYW5nZVsxXSkpKCl9KX1rLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ndWxhciIsITApLGsuYXR0cigidHJhbnNmb3JtIixfKHdbMF0sd1sxXSkpLFQuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbmd1bGFyYXhpcyIsITApLmNsYXNzZWQoImNyaXNwIiwhMCksVC5zZWxlY3RBbGwoImcueGFuZ3VsYXJheGlzdGljayxwYXRoLHRleHQiKS5yZW1vdmUoKSwocz1iKHQsZi5nYXVnZS5heGlzKSkudHlwZT0ibGluZWFyIixzLnJhbmdlPWYuZ2F1Z2UuYXhpcy5yYW5nZSxzLl9pZD0ieGFuZ3VsYXJheGlzIixzLnNldFNjYWxlKCk7dmFyIFA9ZnVuY3Rpb24odCl7cmV0dXJuKHMucmFuZ2VbMF0tdC54KS8ocy5yYW5nZVsxXS1zLnJhbmdlWzBdKSpNYXRoLlBJK01hdGguUEl9LE89e30sej11Lm1ha2VMYWJlbEZucyhzLDApLmxhYmVsU3RhbmRvZmY7Ty54Rm49ZnVuY3Rpb24odCl7dmFyIGU9UCh0KTtyZXR1cm4gTWF0aC5jb3MoZSkqen0sTy55Rm49ZnVuY3Rpb24odCl7dmFyIGU9UCh0KSxyPU1hdGguc2luKGUpPjA/LjI6MTtyZXR1cm4tTWF0aC5zaW4oZSkqKHordC5mb250U2l6ZSpyKStNYXRoLmFicyhNYXRoLmNvcyhlKSkqKHQuZm9udFNpemUqbyl9LE8uYW5jaG9yRm49ZnVuY3Rpb24odCl7dmFyIGU9UCh0KSxyPU1hdGguY29zKGUpO3JldHVybiBNYXRoLmFicyhyKTwuMT8ibWlkZGxlIjpyPjA/InN0YXJ0IjoiZW5kIn0sTy5oZWlnaHRGbj1mdW5jdGlvbih0LGUscil7dmFyIG49UCh0KTtyZXR1cm4tLjUqKDErTWF0aC5zaW4obikpKnJ9O3ZhciBJPWZ1bmN0aW9uKHQpe3JldHVybiBfKHdbMF0rZCpNYXRoLmNvcyh0KSx3WzFdLWQqTWF0aC5zaW4odCkpfTtjPWZ1bmN0aW9uKHQpe3JldHVybiBJKFAodCkpfTtpZihsPXUuY2FsY1RpY2tzKHMpLGg9dS5nZXRUaWNrU2lnbnMocylbMl0scy52aXNpYmxlKXtoPSJpbnNpZGUiPT09cy50aWNrcz8tMToxO3ZhciBEPShzLmxpbmV3aWR0aHx8MSkvMjt1LmRyYXdUaWNrcyh0LHMse3ZhbHM6bCxsYXllcjpULHBhdGg6Ik0iK2gqRCsiLDBoIitoKnMudGlja2xlbix0cmFuc0ZuOmZ1bmN0aW9uKHQpe3ZhciBlPVAodCk7cmV0dXJuIEkoZSkrInJvdGF0ZSgiKy1pKGUpKyIpIn19KSx1LmRyYXdMYWJlbHModCxzLHt2YWxzOmwsbGF5ZXI6VCx0cmFuc0ZuOmMsbGFiZWxGbnM6T30pfXZhciBSPVt2XS5jb25jYXQoZi5nYXVnZS5zdGVwcyksRj1rLnNlbGVjdEFsbCgiZy5iZy1hcmMiKS5kYXRhKFIpO0YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJiZy1hcmMiLCEwKS5hcHBlbmQoInBhdGgiKSxGLnNlbGVjdCgicGF0aCIpLmNhbGwoQykuY2FsbCh4KSxGLmV4aXQoKS5yZW1vdmUoKTt2YXIgQj1MKGYuZ2F1Z2UuYmFyLnRoaWNrbmVzcyksTj1rLnNlbGVjdEFsbCgiZy52YWx1ZS1hcmMiKS5kYXRhKFtmLmdhdWdlLmJhcl0pO04uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ2YWx1ZS1hcmMiLCEwKS5hcHBlbmQoInBhdGgiKTt2YXIgaj1OLnNlbGVjdCgicGF0aCIpO3koTSk/KGoudHJhbnNpdGlvbigpLmR1cmF0aW9uKE0uZHVyYXRpb24pLmVhc2UoTS5lYXNpbmcpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtBJiZBKCl9KS5lYWNoKCJpbnRlcnJ1cHQiLGZ1bmN0aW9uKCl7QSYmQSgpfSkuYXR0clR3ZWVuKCJkIiwoVj1CLFU9RShyWzBdLmxhc3RZKSxxPUUoclswXS55KSxmdW5jdGlvbigpe3ZhciB0PW4uaW50ZXJwb2xhdGUoVSxxKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFYuZW5kQW5nbGUodChlKSkoKX19KSksZi5fbGFzdFZhbHVlPXJbMF0ueSk6ai5hdHRyKCJkIiwibnVtYmVyIj09dHlwZW9mIHJbMF0ueT9CLmVuZEFuZ2xlKEUoclswXS55KSk6Ik0wLDBaIik7dmFyIFYsVSxxO2ouY2FsbCh4KSxOLmV4aXQoKS5yZW1vdmUoKSxSPVtdO3ZhciBIPWYuZ2F1Z2UudGhyZXNob2xkLnZhbHVlO0gmJlIucHVzaCh7cmFuZ2U6W0gsSF0sY29sb3I6Zi5nYXVnZS50aHJlc2hvbGQuY29sb3IsbGluZTp7Y29sb3I6Zi5nYXVnZS50aHJlc2hvbGQubGluZS5jb2xvcix3aWR0aDpmLmdhdWdlLnRocmVzaG9sZC5saW5lLndpZHRofSx0aGlja25lc3M6Zi5nYXVnZS50aHJlc2hvbGQudGhpY2tuZXNzfSk7dmFyIEc9ay5zZWxlY3RBbGwoImcudGhyZXNob2xkLWFyYyIpLmRhdGEoUik7Ry5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRocmVzaG9sZC1hcmMiLCEwKS5hcHBlbmQoInBhdGgiKSxHLnNlbGVjdCgicGF0aCIpLmNhbGwoQykuY2FsbCh4KSxHLmV4aXQoKS5yZW1vdmUoKTt2YXIgWT1rLnNlbGVjdEFsbCgiZy5nYXVnZS1vdXRsaW5lIikuZGF0YShbbV0pO1kuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJnYXVnZS1vdXRsaW5lIiwhMCkuYXBwZW5kKCJwYXRoIiksWS5zZWxlY3QoInBhdGgiKS5jYWxsKEMpLmNhbGwoeCksWS5leGl0KCkucmVtb3ZlKCl9KHQsMCxlLHtyYWRpdXM6Qixpbm5lclJhZGl1czpOLGdhdWdlOnEsbGF5ZXI6SCxzaXplOkQsZ2F1Z2VCZzpTLGdhdWdlT3V0bGluZTpFLHRyYW5zaXRpb25PcHRzOnIsb25Db21wbGV0ZTpmfSk7dmFyIEc9Qy5zZWxlY3RBbGwoImcuYnVsbGV0IikuZGF0YSh6P2U6W10pO0cuZXhpdCgpLnJlbW92ZSgpO3ZhciBZPUMuc2VsZWN0QWxsKCJnLmJ1bGxldGF4aXMiKS5kYXRhKHo/ZTpbXSk7WS5leGl0KCkucmVtb3ZlKCkseiYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGEsaSxvLHMsYyxoPXJbMF0udHJhY2UsZj1uLmdhdWdlLHA9bi5sYXllcixnPW4uZ2F1Z2VCZyx2PW4uZ2F1Z2VPdXRsaW5lLG09bi5zaXplLF89aC5kb21haW4sdz1uLnRyYW5zaXRpb25PcHRzLGs9bi5vbkNvbXBsZXRlO2YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidWxsZXQiLCEwKSxmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK20ubCsiLCAiK20udCsiKSIpLHAuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidWxsZXRheGlzIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxwLnNlbGVjdEFsbCgiZy54YnVsbGV0YXhpc3RpY2sscGF0aCx0ZXh0IikucmVtb3ZlKCk7dmFyIFQ9bS5oLE09aC5nYXVnZS5iYXIudGhpY2tuZXNzKlQsQT1fLnhbMF0sUz1fLnhbMF0rKF8ueFsxXS1fLnhbMF0pKihoLl9oYXNOdW1iZXJ8fGguX2hhc0RlbHRhPzEtbC5idWxsZXROdW1iZXJEb21haW5TaXplOjEpOyhhPWIodCxoLmdhdWdlLmF4aXMpKS5faWQ9InhidWxsZXRheGlzIixhLmRvbWFpbj1bQSxTXSxhLnNldFNjYWxlKCksaT11LmNhbGNUaWNrcyhhKSxvPXUubWFrZVRyYW5zRm4oYSkscz11LmdldFRpY2tTaWducyhhKVsyXSxjPW0udCttLmgsYS52aXNpYmxlJiYodS5kcmF3VGlja3ModCxhLHt2YWxzOiJpbnNpZGUiPT09YS50aWNrcz91LmNsaXBFbmRzKGEsaSk6aSxsYXllcjpwLHBhdGg6dS5tYWtlVGlja1BhdGgoYSxjLHMpLHRyYW5zRm46b30pLHUuZHJhd0xhYmVscyh0LGEse3ZhbHM6aSxsYXllcjpwLHRyYW5zRm46byxsYWJlbEZuczp1Lm1ha2VMYWJlbEZucyhhLGMpfSkpO2Z1bmN0aW9uIEUodCl7dC5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsYS5jMnAodC5yYW5nZVsxXSktYS5jMnAodC5yYW5nZVswXSkpfSkuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuIGEuYzJwKHQucmFuZ2VbMF0pfSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuLjUqKDEtdC50aGlja25lc3MpKlR9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRoaWNrbmVzcypUfSl9dmFyIEw9W2ddLmNvbmNhdChoLmdhdWdlLnN0ZXBzKSxDPWYuc2VsZWN0QWxsKCJnLmJnLWJ1bGxldCIpLmRhdGEoTCk7Qy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJnLWJ1bGxldCIsITApLmFwcGVuZCgicmVjdCIpLEMuc2VsZWN0KCJyZWN0IikuY2FsbChFKS5jYWxsKHgpLEMuZXhpdCgpLnJlbW92ZSgpO3ZhciBQPWYuc2VsZWN0QWxsKCJnLnZhbHVlLWJ1bGxldCIpLmRhdGEoW2guZ2F1Z2UuYmFyXSk7UC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInZhbHVlLWJ1bGxldCIsITApLmFwcGVuZCgicmVjdCIpLFAuc2VsZWN0KCJyZWN0IikuYXR0cigiaGVpZ2h0IixNKS5hdHRyKCJ5IiwoVC1NKS8yKS5jYWxsKHgpLHkodyk/UC5zZWxlY3QoInJlY3QiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24ody5kdXJhdGlvbikuZWFzZSh3LmVhc2luZykuZWFjaCgiZW5kIixmdW5jdGlvbigpe2smJmsoKX0pLmVhY2goImludGVycnVwdCIsZnVuY3Rpb24oKXtrJiZrKCl9KS5hdHRyKCJ3aWR0aCIsTWF0aC5tYXgoMCxhLmMycChNYXRoLm1pbihoLmdhdWdlLmF4aXMucmFuZ2VbMV0sclswXS55KSkpKTpQLnNlbGVjdCgicmVjdCIpLmF0dHIoIndpZHRoIiwibnVtYmVyIj09dHlwZW9mIHJbMF0ueT9NYXRoLm1heCgwLGEuYzJwKE1hdGgubWluKGguZ2F1Z2UuYXhpcy5yYW5nZVsxXSxyWzBdLnkpKSk6MCk7UC5leGl0KCkucmVtb3ZlKCk7dmFyIE89ci5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gaC5nYXVnZS50aHJlc2hvbGQudmFsdWV9KSx6PWYuc2VsZWN0QWxsKCJnLnRocmVzaG9sZC1idWxsZXQiKS5kYXRhKE8pO3ouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0aHJlc2hvbGQtYnVsbGV0IiwhMCkuYXBwZW5kKCJsaW5lIiksei5zZWxlY3QoImxpbmUiKS5hdHRyKCJ4MSIsYS5jMnAoaC5nYXVnZS50aHJlc2hvbGQudmFsdWUpKS5hdHRyKCJ4MiIsYS5jMnAoaC5nYXVnZS50aHJlc2hvbGQudmFsdWUpKS5hdHRyKCJ5MSIsKDEtaC5nYXVnZS50aHJlc2hvbGQudGhpY2tuZXNzKS8yKlQpLmF0dHIoInkyIiwoMS0oMS1oLmdhdWdlLnRocmVzaG9sZC50aGlja25lc3MpLzIpKlQpLmNhbGwoZC5zdHJva2UsaC5nYXVnZS50aHJlc2hvbGQubGluZS5jb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsaC5nYXVnZS50aHJlc2hvbGQubGluZS53aWR0aCksei5leGl0KCkucmVtb3ZlKCk7dmFyIEk9Zi5zZWxlY3RBbGwoImcuZ2F1Z2Utb3V0bGluZSIpLmRhdGEoW3ZdKTtJLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ2F1Z2Utb3V0bGluZSIsITApLmFwcGVuZCgicmVjdCIpLEkuc2VsZWN0KCJyZWN0IikuY2FsbChFKS5jYWxsKHgpLEkuZXhpdCgpLnJlbW92ZSgpfSh0LDAsZSx7Z2F1Z2U6RyxsYXllcjpZLHNpemU6RCxnYXVnZUJnOlMsZ2F1Z2VPdXRsaW5lOkUsdHJhbnNpdGlvbk9wdHM6cixvbkNvbXBsZXRlOmZ9KTt2YXIgVz1DLnNlbGVjdEFsbCgidGV4dC50aXRsZSIpLmRhdGEoZSk7Vy5leGl0KCkucmVtb3ZlKCksVy5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoInRpdGxlIiwhMCksVy5hdHRyKCJ0ZXh0LWFuY2hvciIsZnVuY3Rpb24oKXtyZXR1cm4gej9nLnJpZ2h0OmdbTC50aXRsZS5hbGlnbl19KS50ZXh0KEwudGl0bGUudGV4dCkuY2FsbChzLmZvbnQsTC50aXRsZS5mb250KS5jYWxsKGMuY29udmVydFRvVHNwYW5zLHQpLFcuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbigpe3ZhciB0LGU9RC5sK0Qudyp2W0wudGl0bGUuYWxpZ25dLHI9bC50aXRsZVBhZGRpbmcsbj1zLmJCb3goVy5ub2RlKCkpO2lmKFApe2lmKE8paWYoTC5nYXVnZS5heGlzLnZpc2libGUpdD1zLmJCb3goSC5ub2RlKCkpLnRvcC1yLW4uYm90dG9tO2Vsc2UgdD1ELnQrRC5oLzItQi8yLW4uYm90dG9tLXI7eiYmKHQ9TS0obi50b3Arbi5ib3R0b20pLzIsZT1ELmwtbC5idWxsZXRQYWRkaW5nKkQudyl9ZWxzZSB0PUwuX251bWJlcnNUb3Atci1uLmJvdHRvbTtyZXR1cm4gXyhlLHQpfSl9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYxMywiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6Njg2LCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NDEsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIjo3NjcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiOjc4MCwiLi9jb25zdGFudHMiOjEwNTIsZDM6MTY1fV0sMTA1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uL21lc2gzZC9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDt2YXIgYz1lLmV4cG9ydHM9bChzKHt4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx2YWx1ZTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGlzb21pbjp7dmFsVHlwZToibnVtYmVyIn0saXNvbWF4Ont2YWxUeXBlOiJudW1iZXIifSxzdXJmYWNlOntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxjb3VudDp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoyLG1pbjoxfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0scGF0dGVybjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiQSIsIkIiLCJDIiwiRCIsIkUiXSxleHRyYXM6WyJhbGwiLCJvZGQiLCJldmVuIl0sZGZsdDoiYWxsIn19LHNwYWNlZnJhbWU6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMTV9fSxzbGljZXM6e3g6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fSx5OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0sejp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19fSxjYXBzOnt4OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19LHk6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0sejp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fX0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGVtcGxhdGU6YSgpLHNob3dsZWdlbmQ6cyh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0sbigiIix7Y29sb3JBdHRyOiJgdmFsdWVgIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse29wYWNpdHk6aS5vcGFjaXR5LGxpZ2h0cG9zaXRpb246aS5saWdodHBvc2l0aW9uLGxpZ2h0aW5nOmkubGlnaHRpbmcsZmxhdHNoYWRpbmc6aS5mbGF0c2hhZGluZyxjb250b3VyOmkuY29udG91cixob3ZlcmluZm86cyh7fSxvLmhvdmVyaW5mbyl9KSwiY2FsYyIsIm5lc3RlZCIpO2MuZmxhdHNoYWRpbmcuZGZsdD0hMCxjLmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbi5kZmx0PTAsYy54LmVkaXRUeXBlPWMueS5lZGl0VHlwZT1jLnouZWRpdFR5cGU9Yy52YWx1ZS5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyIsYy50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTk5LCIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc0OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NDEsIi4uL21lc2gzZC9hdHRyaWJ1dGVzIjoxMDYxfV0sMTA1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLGE9dCgiLi4vc3RyZWFtdHViZS9jYWxjIikucHJvY2Vzc0dyaWQsaT10KCIuLi9zdHJlYW10dWJlL2NhbGMiKS5maWx0ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5fbGVuPU1hdGgubWluKGUueC5sZW5ndGgsZS55Lmxlbmd0aCxlLnoubGVuZ3RoLGUudmFsdWUubGVuZ3RoKSxlLl94PWkoZS54LGUuX2xlbiksZS5feT1pKGUueSxlLl9sZW4pLGUuX3o9aShlLnosZS5fbGVuKSxlLl92YWx1ZT1pKGUudmFsdWUsZS5fbGVuKTt2YXIgcj1hKGUpO2UuX2dyaWRGaWxsPXIuZmlsbCxlLl9Ycz1yLlhzLGUuX1lzPXIuWXMsZS5fWnM9ci5acyxlLl9sZW49ci5sZW47Zm9yKHZhciBvPTEvMCxzPS0xLzAsbD0wO2w8ZS5fbGVuO2wrKyl7dmFyIGM9ZS5fdmFsdWVbbF07bz1NYXRoLm1pbihvLGMpLHM9TWF0aC5tYXgocyxjKX1lLl9taW5WYWx1ZXM9byxlLl9tYXhWYWx1ZXM9cyxlLl92TWluPXZvaWQgMD09PWUuaXNvbWlufHxudWxsPT09ZS5pc29taW4/bzplLmlzb21pbixlLl92TWF4PXZvaWQgMD09PWUuaXNvbWF4fHxudWxsPT09ZS5pc29taW4/czplLmlzb21heCxuKHQsZSx7dmFsczpbZS5fdk1pbixlLl92TWF4XSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoiYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYwMCwiLi4vc3RyZWFtdHViZS9jYWxjIjoxMjI3fV0sMTA1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1tZXNoM2QiKSxhPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsaT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cyxzPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpLGw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgtMTtyPjA7ci0tKXt2YXIgbj1NYXRoLm1pbihlW3JdLGVbci0xXSksYT1NYXRoLm1heChlW3JdLGVbci0xXSk7aWYoYT5uJiZuPHQmJnQ8PWEpcmV0dXJue2lkOnIsZGlzdFJhdGlvOihhLXQpLyhhLW4pfX1yZXR1cm57aWQ6MCxkaXN0UmF0aW86MH19O2Z1bmN0aW9uIGModCxlLHIpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1yLHRoaXMubWVzaD1lLHRoaXMubmFtZT0iIix0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPSExfXZhciB1PWMucHJvdG90eXBlO3UuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5kYXRhLmluZGV4LHI9dGhpcy5kYXRhLl9tZXNoWFtlXSxuPXRoaXMuZGF0YS5fbWVzaFlbZV0sYT10aGlzLmRhdGEuX21lc2haW2VdLGk9dGhpcy5kYXRhLl9Zcy5sZW5ndGgsbz10aGlzLmRhdGEuX1pzLmxlbmd0aCxzPWwocix0aGlzLmRhdGEuX1hzKS5pZCxjPWwobix0aGlzLmRhdGEuX1lzKS5pZCx1PWwoYSx0aGlzLmRhdGEuX1pzKS5pZCxoPXQuaW5kZXg9dStvKmMrbyppKnM7dC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS5fbWVzaFhbaF0sdGhpcy5kYXRhLl9tZXNoWVtoXSx0aGlzLmRhdGEuX21lc2haW2hdLHRoaXMuZGF0YS5fdmFsdWVbaF1dO3ZhciBmPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KGYpJiZ2b2lkIDAhPT1mW2hdP3QudGV4dExhYmVsPWZbaF06ZiYmKHQudGV4dExhYmVsPWYpLCEwfX0sdS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbFNjZW5lTGF5b3V0O2Z1bmN0aW9uIG4odCxlLHIsbil7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmQybChlLDAsbikqcn0pfXRoaXMuZGF0YT1mKHQpO3ZhciBsPXtwb3NpdGlvbnM6cyhuKHIueGF4aXMsdC5fbWVzaFgsZS5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLG4oci55YXhpcyx0Ll9tZXNoWSxlLmRhdGFTY2FsZVsxXSx0LnljYWxlbmRhciksbihyLnpheGlzLHQuX21lc2haLGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSksY2VsbHM6cyh0Ll9tZXNoSSx0Ll9tZXNoSix0Ll9tZXNoSyksbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LGNvbnRvdXJFbmFibGU6dC5jb250b3VyLnNob3csY29udG91ckNvbG9yOmkodC5jb250b3VyLmNvbG9yKS5zbGljZSgwLDMpLGNvbnRvdXJXaWR0aDp0LmNvbnRvdXIud2lkdGgsdXNlRmFjZXROb3JtYWxzOnQuZmxhdHNoYWRpbmd9LGM9byh0KTtsLnZlcnRleEludGVuc2l0eT10Ll9tZXNoSW50ZW5zaXR5LGwudmVydGV4SW50ZW5zaXR5Qm91bmRzPVtjLm1pbixjLm1heF0sbC5jb2xvcm1hcD1hKHQpLHRoaXMubWVzaC51cGRhdGUobCl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9O3ZhciBoPVsieHl6IiwieHp5IiwieXh6IiwieXp4Iiwienh5Iiwienl4Il07ZnVuY3Rpb24gZih0KXt0Ll9tZXNoST1bXSx0Ll9tZXNoSj1bXSx0Ll9tZXNoSz1bXTt2YXIgZSxyLG4sYSxpLG8scyxjPXQuc3VyZmFjZS5zaG93LHU9dC5zcGFjZWZyYW1lLnNob3csZj10LnN1cmZhY2UuZmlsbCxwPXQuc3BhY2VmcmFtZS5maWxsLGQ9ITEsZz0hMSx2PTAsbT10Ll9Ycyx5PXQuX1lzLHg9dC5fWnMsYj1tLmxlbmd0aCxfPXkubGVuZ3RoLHc9eC5sZW5ndGgsaz1oLmluZGV4T2YodC5fZ3JpZEZpbGwucmVwbGFjZSgvLS9nLCIiKS5yZXBsYWNlKC9cKy9nLCIiKSksVD1mdW5jdGlvbih0LGUscil7c3dpdGNoKGspe2Nhc2UgNTpyZXR1cm4gcit3KmUrdypfKnQ7Y2FzZSA0OnJldHVybiByK3cqdCt3KmIqZTtjYXNlIDM6cmV0dXJuIGUrXypyK18qdyp0O2Nhc2UgMjpyZXR1cm4gZStfKnQrXypiKnI7Y2FzZSAxOnJldHVybiB0K2IqcitiKncqZTtkZWZhdWx0OnJldHVybiB0K2IqZStiKl8qcn19LE09dC5fbWluVmFsdWVzLEE9dC5fbWF4VmFsdWVzLFM9dC5fdk1pbixFPXQuX3ZNYXg7ZnVuY3Rpb24gTCh0LGUscyl7Zm9yKHZhciBsPW8ubGVuZ3RoLGM9cjtjPGw7YysrKWlmKHQ9PT1uW2NdJiZlPT09YVtjXSYmcz09PWlbY10pcmV0dXJuIGM7cmV0dXJuLTF9ZnVuY3Rpb24gQygpe3I9ZX1mdW5jdGlvbiBQKCl7bj1bXSxhPVtdLGk9W10sbz1bXSxlPTAsQygpfWZ1bmN0aW9uIE8odCxyLHMsbCl7cmV0dXJuIG4ucHVzaCh0KSxhLnB1c2gociksaS5wdXNoKHMpLG8ucHVzaChsKSwrK2UtMX1mdW5jdGlvbiB6KHQsZSxyKXtmb3IodmFyIG49W10sYT0wO2E8dC5sZW5ndGg7YSsrKW5bYV09dFthXSooMS1yKStyKmVbYV07cmV0dXJuIG59ZnVuY3Rpb24gSSh0KXtzPXR9ZnVuY3Rpb24gRCh0LGUpe3JldHVybiJhbGwiPT09dHx8bnVsbD09PXR8fHQuaW5kZXhPZihlKT4tMX1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuIG51bGw9PT10P2U6dH1mdW5jdGlvbiBGKGUscixuKXtDKCk7dmFyIGEsaSxvLGw9W3JdLGM9W25dO2lmKHM+PTEpbD1bcl0sYz1bbl07ZWxzZSBpZihzPjApe3ZhciB1PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0sYT10WzJdLGk9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxhPTA7YTx0Lmxlbmd0aDthKyspblthXT0odFthXStlW2FdK3JbYV0pLzM7cmV0dXJuIG59KHIsbixhKSxvPU1hdGguc3FydCgxLXMpLGw9eihpLHIsbyksYz16KGksbixvKSx1PXooaSxhLG8pLGg9ZVswXSxmPWVbMV0scD1lWzJdO3JldHVybnt4eXp2OltbcixuLGNdLFtjLGwscl0sW24sYSx1XSxbdSxjLG5dLFthLHIsbF0sW2wsdSxhXV0sYWJjOltbaCxmLC0xXSxbLTEsLTEsaF0sW2YscCwtMV0sWy0xLC0xLGZdLFtwLGgsLTFdLFstMSwtMSxwXV19fShyLG4pO2w9dS54eXp2LGM9dS5hYmN9Zm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspe3I9bFtoXSxuPWNbaF07Zm9yKHZhciBmPVtdLHA9MDtwPDM7cCsrKXt2YXIgZD1yW3BdWzBdLGc9cltwXVsxXSxtPXJbcF1bMl0seT1yW3BdWzNdLHg9bltwXT4tMT9uW3BdOkwoZCxnLG0pO2ZbcF09eD4tMT94Ok8oZCxnLG0sUihlLHkpKX1hPWZbMF0saT1mWzFdLG89ZlsyXSx0Ll9tZXNoSS5wdXNoKGEpLHQuX21lc2hKLnB1c2goaSksdC5fbWVzaEsucHVzaChvKSwrK3Z9fWZ1bmN0aW9uIEIodCxlLHIsbil7dmFyIGE9dFszXTthPHImJihhPXIpLGE+biYmKGE9bik7Zm9yKHZhciBpPSh0WzNdLWEpLyh0WzNdLWVbM10rMWUtOSksbz1bXSxzPTA7czw0O3MrKylvW3NdPSgxLWkpKnRbc10raSplW3NdO3JldHVybiBvfWZ1bmN0aW9uIE4odCxlLHIpe3JldHVybiB0Pj1lJiZ0PD1yfWZ1bmN0aW9uIGoodCl7dmFyIGU9LjAwMSooRS1TKTtyZXR1cm4gdD49Uy1lJiZ0PD1FK2V9ZnVuY3Rpb24gVihlKXtmb3IodmFyIHI9W10sbj0wO248NDtuKyspe3ZhciBhPWVbbl07ci5wdXNoKFt0Ll94W2FdLHQuX3lbYV0sdC5felthXSx0Ll92YWx1ZVthXV0pfXJldHVybiByfXZhciBVPTM7ZnVuY3Rpb24gcSh0LGUscixuLGEsaSl7aXx8KGk9MSkscj1bLTEsLTEsLTFdO3ZhciBvPSExLHM9W04oZVswXVszXSxuLGEpLE4oZVsxXVszXSxuLGEpLE4oZVsyXVszXSxuLGEpXTtpZighc1swXSYmIXNbMV0mJiFzWzJdKXJldHVybiExO3ZhciBsPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaihlWzBdWzNdKSYmaihlWzFdWzNdKSYmaihlWzJdWzNdKT8oRih0LGUsciksITApOmk8VSYmcSh0LGUscixTLEUsKytpKX07aWYoc1swXSYmc1sxXSYmc1syXSlyZXR1cm4gbCh0LGUscil8fG87dmFyIGM9ITE7cmV0dXJuW1swLDEsMl0sWzIsMCwxXSxbMSwyLDBdXS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2lmKHNbaVswXV0mJnNbaVsxXV0mJiFzW2lbMl1dKXt2YXIgdT1lW2lbMF1dLGg9ZVtpWzFdXSxmPWVbaVsyXV0scD1CKGYsdSxuLGEpLGQ9QihmLGgsbixhKTtvPWwodCxbZCxwLHVdLFstMSwtMSxyW2lbMF1dXSl8fG8sbz1sKHQsW3UsaCxkXSxbcltpWzBdXSxyW2lbMV1dLC0xXSl8fG8sYz0hMH19KSxjP286KFtbMCwxLDJdLFsxLDIsMF0sWzIsMCwxXV0uZm9yRWFjaChmdW5jdGlvbihpKXtpZihzW2lbMF1dJiYhc1tpWzFdXSYmIXNbaVsyXV0pe3ZhciB1PWVbaVswXV0saD1lW2lbMV1dLGY9ZVtpWzJdXSxwPUIoaCx1LG4sYSksZD1CKGYsdSxuLGEpO289bCh0LFtkLHAsdV0sWy0xLC0xLHJbaVswXV1dKXx8byxjPSEwfX0pLG8pfWZ1bmN0aW9uIEgodCxlLHIsbil7dmFyIGE9ITEsaT1WKGUpLG89W04oaVswXVszXSxyLG4pLE4oaVsxXVszXSxyLG4pLE4oaVsyXVszXSxyLG4pLE4oaVszXVszXSxyLG4pXTtpZighKG9bMF18fG9bMV18fG9bMl18fG9bM10pKXJldHVybiBhO2lmKG9bMF0mJm9bMV0mJm9bMl0mJm9bM10pcmV0dXJuIGcmJihhPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbihuLGEsaSl7Rih0LFtlW25dLGVbYV0sZVtpXV0sW3Jbbl0sclthXSxyW2ldXSl9O24oMCwxLDIpLG4oMywwLDEpLG4oMiwzLDApLG4oMSwyLDMpfSh0LGksZSl8fGEpLGE7dmFyIHM9ITE7cmV0dXJuW1swLDEsMiwzXSxbMywwLDEsMl0sWzIsMywwLDFdLFsxLDIsMywwXV0uZm9yRWFjaChmdW5jdGlvbihsKXtpZihvW2xbMF1dJiZvW2xbMV1dJiZvW2xbMl1dJiYhb1tsWzNdXSl7dmFyIGM9aVtsWzBdXSx1PWlbbFsxXV0saD1pW2xbMl1dLGY9aVtsWzNdXTtpZihnKWE9Rih0LFtjLHUsaF0sW2VbbFswXV0sZVtsWzFdXSxlW2xbMl1dXSl8fGE7ZWxzZXt2YXIgcD1CKGYsYyxyLG4pLGQ9QihmLHUscixuKSx2PUIoZixoLHIsbik7YT1GKG51bGwsW3AsZCx2XSxbLTEsLTEsLTFdKXx8YX1zPSEwfX0pLHM/YTooW1swLDEsMiwzXSxbMSwyLDMsMF0sWzIsMywwLDFdLFszLDAsMSwyXSxbMCwyLDMsMV0sWzEsMywyLDBdXS5mb3JFYWNoKGZ1bmN0aW9uKGwpe2lmKG9bbFswXV0mJm9bbFsxXV0mJiFvW2xbMl1dJiYhb1tsWzNdXSl7dmFyIGM9aVtsWzBdXSx1PWlbbFsxXV0saD1pW2xbMl1dLGY9aVtsWzNdXSxwPUIoaCxjLHIsbiksZD1CKGgsdSxyLG4pLHY9QihmLHUscixuKSxtPUIoZixjLHIsbik7Zz8oYT1GKHQsW2MsbSxwXSxbZVtsWzBdXSwtMSwtMV0pfHxhLGE9Rih0LFt1LGQsdl0sW2VbbFsxXV0sLTEsLTFdKXx8YSk6YT1mdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24obixhLGkpe0YodCxbZVtuXSxlW2FdLGVbaV1dLFtyW25dLHJbYV0scltpXV0pfTtuKDAsMSwyKSxuKDIsMywwKX0obnVsbCxbcCxkLHYsbV0sWy0xLC0xLC0xLC0xXSl8fGEscz0hMH19KSxzP2E6KFtbMCwxLDIsM10sWzEsMiwzLDBdLFsyLDMsMCwxXSxbMywwLDEsMl1dLmZvckVhY2goZnVuY3Rpb24obCl7aWYob1tsWzBdXSYmIW9bbFsxXV0mJiFvW2xbMl1dJiYhb1tsWzNdXSl7dmFyIGM9aVtsWzBdXSx1PWlbbFsxXV0saD1pW2xbMl1dLGY9aVtsWzNdXSxwPUIodSxjLHIsbiksZD1CKGgsYyxyLG4pLHY9QihmLGMscixuKTtnPyhhPUYodCxbYyxwLGRdLFtlW2xbMF1dLC0xLC0xXSl8fGEsYT1GKHQsW2MsZCx2XSxbZVtsWzBdXSwtMSwtMV0pfHxhLGE9Rih0LFtjLHYscF0sW2VbbFswXV0sLTEsLTFdKXx8YSk6YT1GKG51bGwsW3AsZCx2XSxbLTEsLTEsLTFdKXx8YSxzPSEwfX0pLGEpKX1mdW5jdGlvbiBHKHQsZSxyLG4sYSxpLG8scyxsLGMsdSl7dmFyIGg9ITE7cmV0dXJuIGQmJihEKHQsIkEiKSYmKGg9SChudWxsLFtlLHIsbixpXSxjLHUpfHxoKSxEKHQsIkIiKSYmKGg9SChudWxsLFtyLG4sYSxsXSxjLHUpfHxoKSxEKHQsIkMiKSYmKGg9SChudWxsLFtyLGksbyxsXSxjLHUpfHxoKSxEKHQsIkQiKSYmKGg9SChudWxsLFtuLGkscyxsXSxjLHUpfHxoKSxEKHQsIkUiKSYmKGg9SChudWxsLFtyLG4saSxsXSxjLHUpfHxoKSksZyYmKGg9SCh0LFtyLG4saSxsXSxjLHUpfHxoKSxofWZ1bmN0aW9uIFkodCxlLHIsbixhLGksbyxzKXtyZXR1cm5bITA9PT1zWzBdfHxxKHQsVihbZSxyLG5dKSxbZSxyLG5dLGksbyksITA9PT1zWzFdfHxxKHQsVihbbixhLGVdKSxbbixhLGVdLGksbyldfWZ1bmN0aW9uIFcodCxlLHIsbixhLGksbyxzLGwpe3JldHVybiBzP1kodCxlLHIsYSxuLGksbyxsKTpZKHQscixhLG4sZSxpLG8sbCl9ZnVuY3Rpb24gWCh0LGUscixuLGEsaSxvKXt2YXIgcyxsLGMsdSxoPSExLGY9ZnVuY3Rpb24oKXtoPXEodCxbcyxsLGNdLFstMSwtMSwtMV0sYSxpKXx8aCxoPXEodCxbYyx1LHNdLFstMSwtMSwtMV0sYSxpKXx8aH0scD1vWzBdLGQ9b1sxXSxnPW9bMl07cmV0dXJuIHAmJihzPXooVihbVChlLHItMCxuLTApXSlbMF0sVihbVChlLTEsci0wLG4tMCldKVswXSxwKSxsPXooVihbVChlLHItMCxuLTEpXSlbMF0sVihbVChlLTEsci0wLG4tMSldKVswXSxwKSxjPXooVihbVChlLHItMSxuLTEpXSlbMF0sVihbVChlLTEsci0xLG4tMSldKVswXSxwKSx1PXooVihbVChlLHItMSxuLTApXSlbMF0sVihbVChlLTEsci0xLG4tMCldKVswXSxwKSxmKCkpLGQmJihzPXooVihbVChlLTAscixuLTApXSlbMF0sVihbVChlLTAsci0xLG4tMCldKVswXSxkKSxsPXooVihbVChlLTAscixuLTEpXSlbMF0sVihbVChlLTAsci0xLG4tMSldKVswXSxkKSxjPXooVihbVChlLTEscixuLTEpXSlbMF0sVihbVChlLTEsci0xLG4tMSldKVswXSxkKSx1PXooVihbVChlLTEscixuLTApXSlbMF0sVihbVChlLTEsci0xLG4tMCldKVswXSxkKSxmKCkpLGcmJihzPXooVihbVChlLTAsci0wLG4pXSlbMF0sVihbVChlLTAsci0wLG4tMSldKVswXSxnKSxsPXooVihbVChlLTAsci0xLG4pXSlbMF0sVihbVChlLTAsci0xLG4tMSldKVswXSxnKSxjPXooVihbVChlLTEsci0xLG4pXSlbMF0sVihbVChlLTEsci0xLG4tMSldKVswXSxnKSx1PXooVihbVChlLTEsci0wLG4pXSlbMF0sVihbVChlLTEsci0wLG4tMSldKVswXSxnKSxmKCkpLGh9ZnVuY3Rpb24gWih0LGUscixuLGEsaSxvLHMsbCxjLHUsaCl7dmFyIGY9dDtyZXR1cm4gaD8oZCYmImV2ZW4iPT09dCYmKGY9bnVsbCksRyhmLGUscixuLGEsaSxvLHMsbCxjLHUpKTooZCYmIm9kZCI9PT10JiYoZj1udWxsKSxHKGYsbCxzLG8saSxhLG4scixlLGMsdSkpfWZ1bmN0aW9uIEoodCxlLHIsbixhKXtmb3IodmFyIGk9W10sbz0wLHM9MDtzPGUubGVuZ3RoO3MrKylmb3IodmFyIGw9ZVtzXSxjPTE7Yzx3O2MrKylmb3IodmFyIHU9MTt1PF87dSsrKWkucHVzaChXKHQsVChsLHUtMSxjLTEpLFQobCx1LTEsYyksVChsLHUsYy0xKSxUKGwsdSxjKSxyLG4sKGwrdStjKSUyLGEmJmFbb10/YVtvXTpbXSkpLG8rKztyZXR1cm4gaX1mdW5jdGlvbiBLKHQsZSxyLG4sYSl7Zm9yKHZhciBpPVtdLG89MCxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz0xO2M8YjtjKyspZm9yKHZhciB1PTE7dTx3O3UrKylpLnB1c2goVyh0LFQoYy0xLGwsdS0xKSxUKGMsbCx1LTEpLFQoYy0xLGwsdSksVChjLGwsdSkscixuLChjK2wrdSklMixhJiZhW29dP2Fbb106W10pKSxvKys7cmV0dXJuIGl9ZnVuY3Rpb24gUSh0LGUscixuLGEpe2Zvcih2YXIgaT1bXSxvPTAscz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9MTtjPF87YysrKWZvcih2YXIgdT0xO3U8Yjt1KyspaS5wdXNoKFcodCxUKHUtMSxjLTEsbCksVCh1LTEsYyxsKSxUKHUsYy0xLGwpLFQodSxjLGwpLHIsbiwodStjK2wpJTIsYSYmYVtvXT9hW29dOltdKSksbysrO3JldHVybiBpfWZ1bmN0aW9uICQodCxlLHIpe2Zvcih2YXIgbj0xO248dztuKyspZm9yKHZhciBhPTE7YTxfO2ErKylmb3IodmFyIGk9MTtpPGI7aSsrKVoodCxUKGktMSxhLTEsbi0xKSxUKGktMSxhLTEsbiksVChpLTEsYSxuLTEpLFQoaS0xLGEsbiksVChpLGEtMSxuLTEpLFQoaSxhLTEsbiksVChpLGEsbi0xKSxUKGksYSxuKSxlLHIsKGkrYStuKSUyKX1mdW5jdGlvbiB0dCh0LGUscil7ZD0hMCwkKHQsZSxyKSxkPSExfWZ1bmN0aW9uIGV0KHQsZSxyLG4sYSxpKXtmb3IodmFyIG89W10scz0wLGw9MDtsPGUubGVuZ3RoO2wrKylmb3IodmFyIGM9ZVtsXSx1PTE7dTx3O3UrKylmb3IodmFyIGg9MTtoPF87aCsrKW8ucHVzaChYKHQsYyxoLHUscixuLGFbbF0saSYmaVtzXSYmaVtzXSkpLHMrKztyZXR1cm4gb31mdW5jdGlvbiBydCh0LGUscixuLGEsaSl7Zm9yKHZhciBvPVtdLHM9MCxsPTA7bDxlLmxlbmd0aDtsKyspZm9yKHZhciBjPWVbbF0sdT0xO3U8Yjt1KyspZm9yKHZhciBoPTE7aDx3O2grKylvLnB1c2goWCh0LHUsYyxoLHIsbixhW2xdLGkmJmlbc10mJmlbc10pKSxzKys7cmV0dXJuIG99ZnVuY3Rpb24gbnQodCxlLHIsbixhLGkpe2Zvcih2YXIgbz1bXSxzPTAsbD0wO2w8ZS5sZW5ndGg7bCsrKWZvcih2YXIgYz1lW2xdLHU9MTt1PF87dSsrKWZvcih2YXIgaD0xO2g8YjtoKyspby5wdXNoKFgodCxoLHUsYyxyLG4sYVtsXSxpJiZpW3NdJiZpW3NdKSkscysrO3JldHVybiBvfWZ1bmN0aW9uIGF0KHQsZSl7Zm9yKHZhciByPVtdLG49dDtuPGU7bisrKXIucHVzaChuKTtyZXR1cm4gcn1yZXR1cm4gZnVuY3Rpb24oKXtpZihQKCksZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPGI7ZSsrKWZvcih2YXIgcj0wO3I8XztyKyspZm9yKHZhciBuPTA7bjx3O24rKyl7dmFyIGE9VChlLHIsbik7Tyh0Ll94W2FdLHQuX3lbYV0sdC5felthXSx0Ll92YWx1ZVthXSl9fSgpLHUmJnAmJihJKHApLGc9ITAsJChudWxsLFMsRSksZz0hMSksYyYmZil7SShmKTtmb3IodmFyIGU9dC5zdXJmYWNlLnBhdHRlcm4scj10LnN1cmZhY2UuY291bnQscz0wO3M8cjtzKyspe3ZhciBoPTE9PT1yPy41OnMvKHItMSksZD0oMS1oKSpTK2gqRSxrPU1hdGguYWJzKGQtTSk+TWF0aC5hYnMoZC1BKT9bTSxkXTpbZCxBXTt0dChlLGtbMF0sa1sxXSl9fXZhciBMPVtbTWF0aC5taW4oUyxBKSxNYXRoLm1heChTLEEpXSxbTWF0aC5taW4oTSxFKSxNYXRoLm1heChNLEUpXV07WyJ4IiwieSIsInoiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bXSxuPTA7bjxMLmxlbmd0aDtuKyspe3ZhciBhPTAsaT1MW25dWzBdLG89TFtuXVsxXSxzPXQuc2xpY2VzW2VdO2lmKHMuc2hvdyYmcy5maWxsKXtJKHMuZmlsbCk7dmFyIGM9W10sdT1bXSxoPVtdO2lmKHMubG9jYXRpb25zLmxlbmd0aClmb3IodmFyIGY9MDtmPHMubG9jYXRpb25zLmxlbmd0aDtmKyspe3ZhciBwPWwocy5sb2NhdGlvbnNbZl0sIngiPT09ZT9tOiJ5Ij09PWU/eTp4KTswPT09cC5kaXN0UmF0aW8/Yy5wdXNoKHAuaWQpOnAuaWQ+MCYmKHUucHVzaChwLmlkKSwieCI9PT1lP2gucHVzaChbcC5kaXN0UmF0aW8sMCwwXSk6InkiPT09ZT9oLnB1c2goWzAscC5kaXN0UmF0aW8sMF0pOmgucHVzaChbMCwwLHAuZGlzdFJhdGlvXSkpfWVsc2UgYz1hdCgxLCJ4Ij09PWU/Yi0xOiJ5Ij09PWU/Xy0xOnctMSk7dS5sZW5ndGg+MCYmKHJbYV09IngiPT09ZT9ldChudWxsLHUsaSxvLGgsclthXSk6InkiPT09ZT9ydChudWxsLHUsaSxvLGgsclthXSk6bnQobnVsbCx1LGksbyxoLHJbYV0pLGErKyksYy5sZW5ndGg+MCYmKHJbYV09IngiPT09ZT9KKG51bGwsYyxpLG8sclthXSk6InkiPT09ZT9LKG51bGwsYyxpLG8sclthXSk6UShudWxsLGMsaSxvLHJbYV0pLGErKyl9dmFyIGQ9dC5jYXBzW2VdO2Quc2hvdyYmZC5maWxsJiYoSShkLmZpbGwpLHJbYV09IngiPT09ZT9KKG51bGwsWzAsYi0xXSxpLG8sclthXSk6InkiPT09ZT9LKG51bGwsWzAsXy0xXSxpLG8sclthXSk6UShudWxsLFswLHctMV0saSxvLHJbYV0pLGErKyl9fSksMD09PXYmJlAoKSx0Ll9tZXNoWD1uLHQuX21lc2hZPWEsdC5fbWVzaFo9aSx0Ll9tZXNoSW50ZW5zaXR5PW8sdC5fWHM9bSx0Ll9Zcz15LHQuX1pzPXh9KCksdH1lLmV4cG9ydHM9e2ZpbmROZWFyZXN0T25BeGlzOmwsZ2VuZXJhdGVJc29NZXNoZXM6ZixjcmVhdGVJc29zdXJmYWNlVHJhY2U6ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxhPW4oe2dsOnJ9KSxpPW5ldyBjKHQsYSxlLnVpZCk7cmV0dXJuIGEuX3RyYWNlPWksaS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGEpLGl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYwNCwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NzE0LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDAsIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6ODE2LCJnbC1tZXNoM2QiOjI4M31dLDEwNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKTtmdW5jdGlvbiBzKHQsZSxyLG4saSl7dmFyIHM9aSgiaXNvbWluIiksbD1pKCJpc29tYXgiKTtudWxsIT1sJiZudWxsIT1zJiZzPmwmJihlLmlzb21pbj1udWxsLGUuaXNvbWF4PW51bGwpO3ZhciBjPWkoIngiKSx1PWkoInkiKSxoPWkoInoiKSxmPWkoInZhbHVlIik7YyYmYy5sZW5ndGgmJnUmJnUubGVuZ3RoJiZoJiZoLmxlbmd0aCYmZiYmZi5sZW5ndGg/KGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiLCJ6Il0sbiksWyJ4IiwieSIsInoiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPSJjYXBzLiIrdDtpKGUrIi5zaG93IikmJmkoZSsiLmZpbGwiKTt2YXIgcj0ic2xpY2VzLiIrdDtpKHIrIi5zaG93IikmJihpKHIrIi5maWxsIiksaShyKyIubG9jYXRpb25zIikpfSksaSgic3BhY2VmcmFtZS5zaG93IikmJmkoInNwYWNlZnJhbWUuZmlsbCIpLGkoInN1cmZhY2Uuc2hvdyIpJiYoaSgic3VyZmFjZS5jb3VudCIpLGkoInN1cmZhY2UuZmlsbCIpLGkoInN1cmZhY2UucGF0dGVybiIpKSxpKCJjb250b3VyLnNob3ciKSYmKGkoImNvbnRvdXIuY29sb3IiKSxpKCJjb250b3VyLndpZHRoIikpLFsidGV4dCIsImhvdmVydGV4dCIsImhvdmVydGVtcGxhdGUiLCJsaWdodGluZy5hbWJpZW50IiwibGlnaHRpbmcuZGlmZnVzZSIsImxpZ2h0aW5nLnNwZWN1bGFyIiwibGlnaHRpbmcucm91Z2huZXNzIiwibGlnaHRpbmcuZnJlc25lbCIsImxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uIiwibGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uIiwibGlnaHRwb3NpdGlvbi54IiwibGlnaHRwb3NpdGlvbi55IiwibGlnaHRwb3NpdGlvbi56IiwiZmxhdHNoYWRpbmciLCJvcGFjaXR5Il0uZm9yRWFjaChmdW5jdGlvbih0KXtpKHQpfSksbyh0LGUsbixpLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfWUuZXhwb3J0cz17c3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsYSl7cyh0LGUsMCxhLGZ1bmN0aW9uKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9KX0sc3VwcGx5SXNvRGVmYXVsdHM6c319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MDIsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuL2F0dHJpYnV0ZXMiOjEwNTZ9XSwxMDYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY2FsYzp0KCIuL2NhbGMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxwbG90OnQoIi4vY29udmVydCIpLmNyZWF0ZUlzb3N1cmZhY2VUcmFjZSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaXNvc3VyZmFjZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjgwNSwiLi9hdHRyaWJ1dGVzIjoxMDU2LCIuL2NhbGMiOjEwNTcsIi4vY29udmVydCI6MTA1OCwiLi9kZWZhdWx0cyI6MTA1OX1dLDEwNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi9zdXJmYWNlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1zKHt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxpOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sazp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmEoe2VkaXRUeXBlOiJjYWxjIn0pLGRlbGF1bmF5YXhpczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsieCIsInkiLCJ6Il0sZGZsdDoieiIsZWRpdFR5cGU6ImNhbGMifSxhbHBoYWh1bGw6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDotMSxlZGl0VHlwZToiY2FsYyJ9LGludGVuc2l0eTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxpbnRlbnNpdHltb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2ZXJ0ZXgiLCJjZWxsIl0sZGZsdDoidmVydGV4IixlZGl0VHlwZToiY2FsYyJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSx2ZXJ0ZXhjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxmYWNlY29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdHJhbnNmb3Jtczp2b2lkIDB9LG4oIiIse2NvbG9yQXR0cjoiYGludGVuc2l0eWAiLHNob3dTY2FsZURmbHQ6ITAsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7b3BhY2l0eTppLm9wYWNpdHksZmxhdHNoYWRpbmc6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxjb250b3VyOntzaG93OnMoe30saS5jb250b3Vycy54LnNob3cse30pLGNvbG9yOmkuY29udG91cnMueC5jb2xvcix3aWR0aDppLmNvbnRvdXJzLngud2lkdGgsZWRpdFR5cGU6ImNhbGMifSxsaWdodHBvc2l0aW9uOnt4OnMoe30saS5saWdodHBvc2l0aW9uLngse2RmbHQ6MWU1fSkseTpzKHt9LGkubGlnaHRwb3NpdGlvbi55LHtkZmx0OjFlNX0pLHo6cyh7fSxpLmxpZ2h0cG9zaXRpb24ueix7ZGZsdDowfSksZWRpdFR5cGU6ImNhbGMifSxsaWdodGluZzpzKHt2ZXJ0ZXhub3JtYWxzZXBzaWxvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjFlLTEyLGVkaXRUeXBlOiJjYWxjIn0sZmFjZW5vcm1hbHNlcHNpbG9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MWUtNixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0saS5saWdodGluZyksaG92ZXJpbmZvOnMoe30sby5ob3ZlcmluZm8se2VkaXRUeXBlOiJjYWxjIn0pLHNob3dsZWdlbmQ6cyh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1OTksIi4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NDEsIi4uL3N1cmZhY2UvYXR0cmlidXRlcyI6MTI0M31dLDEwNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlLmludGVuc2l0eSYmbih0LGUse3ZhbHM6ZS5pbnRlbnNpdHksY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MDB9XSwxMDYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLW1lc2gzZCIpLGE9dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxpPXQoImFscGhhLXNoYXBlIiksbz10KCJjb252ZXgtaHVsbCIpLHM9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSxsPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmV4dHJhY3RPcHRzLHU9dCgiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIik7ZnVuY3Rpb24gaCh0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5tZXNoPWUsdGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9IiNmZmYiLHRoaXMuZGF0YT1udWxsLHRoaXMuc2hvd0NvbnRvdXI9ITF9dmFyIGY9aC5wcm90b3R5cGU7ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU9W10scj10Lmxlbmd0aCxuPTA7bjxyO24rKyllW25dPWwodFtuXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZCh0LGUscixuKXtmb3IodmFyIGE9W10saT1lLmxlbmd0aCxvPTA7bzxpO28rKylhW29dPXQuZDJsKGVbb10sMCxuKSpyO3JldHVybiBhfWZ1bmN0aW9uIGcodCl7Zm9yKHZhciBlPVtdLHI9dC5sZW5ndGgsbj0wO248cjtuKyspZVtuXT1NYXRoLnJvdW5kKHRbbl0pO3JldHVybiBlfWZ1bmN0aW9uIHYodCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wO248cjtuKyspaWYodFtuXTw9LS41fHx0W25dPj1lLS41KXJldHVybiExO3JldHVybiEwfWYuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5pbmRleD10LmRhdGEuaW5kZXg7dC5kYXRhLl9jZWxsQ2VudGVyP3QudHJhY2VDb29yZGluYXRlPXQuZGF0YS5kYXRhQ29vcmRpbmF0ZTp0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5kYXRhLnhbZV0sdGhpcy5kYXRhLnlbZV0sdGhpcy5kYXRhLnpbZV1dO3ZhciByPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KHIpJiZ2b2lkIDAhPT1yW2VdP3QudGV4dExhYmVsPXJbZV06ciYmKHQudGV4dExhYmVsPXIpLCEwfX0sZi51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbFNjZW5lTGF5b3V0O3RoaXMuZGF0YT10O3ZhciBuLGg9dC54Lmxlbmd0aCxmPXUoZChyLnhheGlzLHQueCxlLmRhdGFTY2FsZVswXSx0LnhjYWxlbmRhciksZChyLnlheGlzLHQueSxlLmRhdGFTY2FsZVsxXSx0LnljYWxlbmRhciksZChyLnpheGlzLHQueixlLmRhdGFTY2FsZVsyXSx0LnpjYWxlbmRhcikpO2lmKHQuaSYmdC5qJiZ0Lmspe2lmKHQuaS5sZW5ndGghPT10LmoubGVuZ3RofHx0LmoubGVuZ3RoIT09dC5rLmxlbmd0aHx8IXYodC5pLGgpfHwhdih0LmosaCl8fCF2KHQuayxoKSlyZXR1cm47bj11KGcodC5pKSxnKHQuaiksZyh0LmspKX1lbHNlIG49MD09PXQuYWxwaGFodWxsP28oZik6dC5hbHBoYWh1bGw+MD9pKHQuYWxwaGFodWxsLGYpOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVsieCIsInkiLCJ6Il0uaW5kZXhPZih0KSxuPVtdLGk9ZS5sZW5ndGgsbz0wO288aTtvKyspbltvXT1bZVtvXVsocisxKSUzXSxlW29dWyhyKzIpJTNdXTtyZXR1cm4gYShuKX0odC5kZWxhdW5heWF4aXMsZik7dmFyIG09e3Bvc2l0aW9uczpmLGNlbGxzOm4sbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LGNvbnRvdXJFbmFibGU6dC5jb250b3VyLnNob3csY29udG91ckNvbG9yOmwodC5jb250b3VyLmNvbG9yKS5zbGljZSgwLDMpLGNvbnRvdXJXaWR0aDp0LmNvbnRvdXIud2lkdGgsdXNlRmFjZXROb3JtYWxzOnQuZmxhdHNoYWRpbmd9O2lmKHQuaW50ZW5zaXR5KXt2YXIgeT1jKHQpO3RoaXMuY29sb3I9IiNmZmYiO3ZhciB4PXQuaW50ZW5zaXR5bW9kZTttW3grIkludGVuc2l0eSJdPXQuaW50ZW5zaXR5LG1beCsiSW50ZW5zaXR5Qm91bmRzIl09W3kubWluLHkubWF4XSxtLmNvbG9ybWFwPXModCl9ZWxzZSB0LnZlcnRleGNvbG9yPyh0aGlzLmNvbG9yPXQudmVydGV4Y29sb3JbMF0sbS52ZXJ0ZXhDb2xvcnM9cCh0LnZlcnRleGNvbG9yKSk6dC5mYWNlY29sb3I/KHRoaXMuY29sb3I9dC5mYWNlY29sb3JbMF0sbS5jZWxsQ29sb3JzPXAodC5mYWNlY29sb3IpKToodGhpcy5jb2xvcj10LmNvbG9yLG0ubWVzaENvbG9yPWwodC5jb2xvcikpO3RoaXMubWVzaC51cGRhdGUobSl9LGYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLGE9bih7Z2w6cn0pLGk9bmV3IGgodCxhLGUudWlkKTtyZXR1cm4gYS5fdHJhY2U9aSxpLnVwZGF0ZShlKSx0LmdscGxvdC5hZGQoYSksaX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MDQsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjcxNCwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzQwLCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiOjgxNiwiYWxwaGEtc2hhcGUiOjY3LCJjb252ZXgtaHVsbCI6MTMyLCJkZWxhdW5heS10cmlhbmd1bGF0ZSI6MTY3LCJnbC1tZXNoM2QiOjI4M31dLDEwNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLG4pe3JldHVybiBhLmNvZXJjZSh0LGUsbyxyLG4pfWZ1bmN0aW9uIGModCl7dmFyIGU9dC5tYXAoZnVuY3Rpb24odCl7dmFyIGU9bCh0KTtyZXR1cm4gZSYmYS5pc0FycmF5T3JUeXBlZEFycmF5KGUpP2U6bnVsbH0pO3JldHVybiBlLmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD09PWVbMF0ubGVuZ3RofSkmJmV9YyhbIngiLCJ5IiwieiJdKT8oYyhbImkiLCJqIiwiayJdKSwoIWUuaXx8ZS5qJiZlLmspJiYoIWUuanx8ZS5rJiZlLmkpJiYoIWUua3x8ZS5pJiZlLmopPyhuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5IiwieiJdLHMpLFsibGlnaHRpbmcuYW1iaWVudCIsImxpZ2h0aW5nLmRpZmZ1c2UiLCJsaWdodGluZy5zcGVjdWxhciIsImxpZ2h0aW5nLnJvdWdobmVzcyIsImxpZ2h0aW5nLmZyZXNuZWwiLCJsaWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbiIsImxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbiIsImxpZ2h0cG9zaXRpb24ueCIsImxpZ2h0cG9zaXRpb24ueSIsImxpZ2h0cG9zaXRpb24ueiIsImZsYXRzaGFkaW5nIiwiYWxwaGFodWxsIiwiZGVsYXVuYXlheGlzIiwib3BhY2l0eSJdLmZvckVhY2goZnVuY3Rpb24odCl7bCh0KX0pLGwoImNvbnRvdXIuc2hvdyIpJiYobCgiY29udG91ci5jb2xvciIpLGwoImNvbnRvdXIud2lkdGgiKSksImludGVuc2l0eSJpbiB0PyhsKCJpbnRlbnNpdHkiKSxsKCJpbnRlbnNpdHltb2RlIiksaSh0LGUscyxsLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSk6KGUuc2hvd3NjYWxlPSExLCJmYWNlY29sb3IiaW4gdD9sKCJmYWNlY29sb3IiKToidmVydGV4Y29sb3IiaW4gdD9sKCJ2ZXJ0ZXhjb2xvciIpOmwoImNvbG9yIixyKSksbCgidGV4dCIpLGwoImhvdmVydGV4dCIpLGwoImhvdmVydGVtcGxhdGUiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjAyLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi9hdHRyaWJ1dGVzIjoxMDYxfV0sMTA2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0scGxvdDp0KCIuL2NvbnZlcnQiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToibWVzaDNkIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6ODA1LCIuL2F0dHJpYnV0ZXMiOjEwNjEsIi4vY2FsYyI6MTA2MiwiLi9jb252ZXJ0IjoxMDYzLCIuL2RlZmF1bHRzIjoxMDY0fV0sMTA2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0LGE9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyIpLGw9cy5JTkNSRUFTSU5HLkNPTE9SLGM9cy5ERUNSRUFTSU5HLkNPTE9SLHU9YS5saW5lO2Z1bmN0aW9uIGgodCl7cmV0dXJue2xpbmU6e2NvbG9yOm4oe30sdS5jb2xvcix7ZGZsdDp0fSksd2lkdGg6dS53aWR0aCxkYXNoOmksZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn19ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LG9wZW46e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0saGlnaDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsb3c6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sY2xvc2U6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbGluZTp7d2lkdGg6bih7fSx1LndpZHRoLHt9KSxkYXNoOm4oe30saSx7fSksZWRpdFR5cGU6InN0eWxlIn0saW5jcmVhc2luZzpoKGwpLGRlY3JlYXNpbmc6aChjKSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx0aWNrd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4Oi41LGRmbHQ6LjMsZWRpdFR5cGU6ImNhbGMifSxob3ZlcmxhYmVsOm4oe30sby5ob3ZlcmxhYmVsLHtzcGxpdDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToic3R5bGUifX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NjEyLCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiOjYyMiwiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIjo2ODcsIi4uLy4uL2xpYiI6NzE3LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExMjB9XSwxMDY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9bi5fLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gcyh0LGUscixuKXtyZXR1cm57bzp0LGg6ZSxsOnIsYzpufX1mdW5jdGlvbiBsKHQsZSxyLHMsbCl7Zm9yKHZhciBjPXMubWFrZUNhbGNkYXRhKGUsIm9wZW4iKSx1PXMubWFrZUNhbGNkYXRhKGUsImhpZ2giKSxoPXMubWFrZUNhbGNkYXRhKGUsImxvdyIpLGY9cy5tYWtlQ2FsY2RhdGEoZSwiY2xvc2UiKSxwPUFycmF5LmlzQXJyYXkoZS50ZXh0KSxkPUFycmF5LmlzQXJyYXkoZS5ob3ZlcnRleHQpLGc9ITAsdj1udWxsLG09W10seT0wO3k8ci5sZW5ndGg7eSsrKXt2YXIgeD1yW3ldLGI9Y1t5XSxfPXVbeV0sdz1oW3ldLGs9Zlt5XTtpZih4IT09byYmYiE9PW8mJl8hPT1vJiZ3IT09byYmayE9PW8pe2s9PT1iP251bGwhPT12JiZrIT09diYmKGc9az52KTpnPWs+Yix2PWs7dmFyIFQ9bChiLF8sdyxrKTtULnBvcz14LFQueWM9KGIraykvMixULmk9eSxULmRpcj1nPyJpbmNyZWFzaW5nIjoiZGVjcmVhc2luZyIsVC54PVQucG9zLFQueT1bdyxfXSxwJiYoVC50eD1lLnRleHRbeV0pLGQmJihULmh0eD1lLmhvdmVydGV4dFt5XSksbS5wdXNoKFQpfWVsc2UgbS5wdXNoKHtwb3M6eCxlbXB0eTohMH0pfXJldHVybiBlLl9leHRyZW1lc1tzLl9pZF09aS5maW5kRXh0cmVtZXMocyxuLmNvbmNhdChoLHUpLHtwYWRkZWQ6ITB9KSxtLmxlbmd0aCYmKG1bMF0udD17bGFiZWxzOntvcGVuOmEodCwib3BlbjoiKSsiICIsaGlnaDphKHQsImhpZ2g6IikrIiAiLGxvdzphKHQsImxvdzoiKSsiICIsY2xvc2U6YSh0LCJjbG9zZToiKSsiICJ9fSksbX1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcj1pLmdldEZyb21JZCh0LGUueGF4aXMpLGE9aS5nZXRGcm9tSWQodCxlLnlheGlzKSxvPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1yLl9taW5EaWZmO2lmKCFhKXt2YXIgaSxvPXQuX2Z1bGxEYXRhLHM9W107Zm9yKGE9MS8wLGk9MDtpPG8ubGVuZ3RoO2krKyl7dmFyIGw9b1tpXTtpZigib2hsYyI9PT1sLnR5cGUmJiEwPT09bC52aXNpYmxlJiZsLnhheGlzPT09ZS5faWQpe3MucHVzaChsKTt2YXIgYz1lLm1ha2VDYWxjZGF0YShsLCJ4Iik7bC5feGNhbGM9Yzt2YXIgdT1uLmRpc3RpbmN0VmFscyhjKS5taW5EaWZmO3UmJmlzRmluaXRlKHUpJiYoYT1NYXRoLm1pbihhLHUpKX19Zm9yKGE9PT0xLzAmJihhPTEpLGk9MDtpPHMubGVuZ3RoO2krKylzW2ldLl9taW5EaWZmPWF9cmV0dXJuIGEqci50aWNrd2lkdGh9KHQscixlKSxjPWUuX21pbkRpZmY7ZS5fbWluRGlmZj1udWxsO3ZhciB1PWUuX3hjYWxjO2UuX3hjYWxjPW51bGw7dmFyIGg9bCh0LGUsdSxhLHMpO3JldHVybiBlLl9leHRyZW1lc1tyLl9pZF09aS5maW5kRXh0cmVtZXMocix1LHt2cGFkOmMvMn0pLGgubGVuZ3RoPyhuLmV4dGVuZEZsYXQoaFswXS50LHt3SG92ZXI6Yy8yLHRpY2tMZW46b30pLGgpOlt7dDp7ZW1wdHk6ITB9fV19LGNhbGNDb21tb246bH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NX1dLDEwNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuL29obGNfZGVmYXVsdHMiKSxpPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIG8odCxlLHIsbil7cihuKyIubGluZS5jb2xvciIpLHIobisiLmxpbmUud2lkdGgiLGUubGluZS53aWR0aCkscihuKyIubGluZS5kYXNoIixlLmxpbmUuZGFzaCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKHQsZSxsLHMpPyhsKCJsaW5lLndpZHRoIiksbCgibGluZS5kYXNoIiksbyh0LGUsbCwiaW5jcmVhc2luZyIpLG8odCxlLGwsImRlY3JlYXNpbmciKSxsKCJ0ZXh0IiksbCgiaG92ZXJ0ZXh0IiksbCgidGlja3dpZHRoIikscy5fcmVxdWVzdFJhbmdlc2xpZGVyW2UueGF4aXNdPSEwKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuL2F0dHJpYnV0ZXMiOjEwNjYsIi4vb2hsY19kZWZhdWx0cyI6MTA3MX1dLDEwNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vLi4vbGliIikuZmlsbFRleHQsbD10KCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiKSxjPXtpbmNyZWFzaW5nOmwuSU5DUkVBU0lORy5TWU1CT0wsZGVjcmVhc2luZzpsLkRFQ1JFQVNJTkcuU1lNQk9MfTtmdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBhLHMsbD10LmNkLGM9dC54YSx1PWxbMF0udHJhY2UsaD1sWzBdLnQsZj11LnR5cGUscD0ib2hsYyI9PT1mPyJsIjoibWluIixkPSJvaGxjIj09PWY/ImgiOiJtYXgiLGc9aC5iUG9zfHwwLHY9ZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zK2ctZX0sbT1oLmJkUG9zfHxoLnRpY2tMZW4seT1oLndIb3Zlcix4PU1hdGgubWluKDEsbS9NYXRoLmFicyhjLnIyYyhjLnJhbmdlWzFdKS1jLnIyYyhjLnJhbmdlWzBdKSkpO2Z1bmN0aW9uIGIodCl7dmFyIGU9dih0KTtyZXR1cm4gaS5pbmJveChlLXksZSt5LGEpfWZ1bmN0aW9uIF8odCl7dmFyIGU9dFtwXSxuPXRbZF07cmV0dXJuIGU9PT1ufHxpLmluYm94KGUtcixuLXIsYSl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4oYih0KStfKHQpKS8yfWE9dC5tYXhIb3ZlckRpc3RhbmNlLXgscz10Lm1heFNwaWtlRGlzdGFuY2UteDt2YXIgaz1pLmdldERpc3RhbmNlRnVuY3Rpb24obixiLF8sdyk7aWYoaS5nZXRDbG9zZXN0KGwsayx0KSwhMT09PXQuaW5kZXgpcmV0dXJuIG51bGw7dmFyIFQ9bFt0LmluZGV4XTtpZihULmVtcHR5KXJldHVybiBudWxsO3ZhciBNPXVbVC5kaXJdLEE9TS5saW5lLmNvbG9yO3JldHVybiBvLm9wYWNpdHkoQSkmJk0ubGluZS53aWR0aD90LmNvbG9yPUE6dC5jb2xvcj1NLmZpbGxjb2xvcix0LngwPWMuYzJwKFQucG9zK2ctbSwhMCksdC54MT1jLmMycChULnBvcytnK20sITApLHQueExhYmVsVmFsPVQucG9zLHQuc3Bpa2VEaXN0YW5jZT13KFQpKnMvYSx0LnhTcGlrZT1jLmMycChULnBvcywhMCksdH1mdW5jdGlvbiBoKHQsZSxyLGkpe3ZhciBvPXQuY2Qscz10LnlhLGw9b1swXS50cmFjZSxjPW9bMF0udCxoPVtdLGY9dSh0LGUscixpKTtpZighZilyZXR1cm5bXTt2YXIgcD1vW2YuaW5kZXhdLmhpfHxsLmhvdmVyaW5mbyxkPXAuc3BsaXQoIisiKTtpZighKCJhbGwiPT09cHx8LTEhPT1kLmluZGV4T2YoInkiKSkpcmV0dXJuW107Zm9yKHZhciBnPVsiaGlnaCIsIm9wZW4iLCJjbG9zZSIsImxvdyJdLHY9e30sbT0wO208Zy5sZW5ndGg7bSsrKXt2YXIgeSx4PWdbbV0sYj1sW3hdW2YuaW5kZXhdLF89cy5jMnAoYiwhMCk7YiBpbiB2Pyh5PXZbYl0pLnlMYWJlbCs9Ijxicj4iK2MubGFiZWxzW3hdK24uaG92ZXJMYWJlbFRleHQocyxiKTooKHk9YS5leHRlbmRGbGF0KHt9LGYpKS55MD15LnkxPV8seS55TGFiZWxWYWw9Yix5LnlMYWJlbD1jLmxhYmVsc1t4XStuLmhvdmVyTGFiZWxUZXh0KHMsYikseS5uYW1lPSIiLGgucHVzaCh5KSx2W2JdPXkpfXJldHVybiBofWZ1bmN0aW9uIGYodCxlLHIsYSl7dmFyIGk9dC5jZCxvPXQueWEsbD1pWzBdLnRyYWNlLGg9aVswXS50LGY9dSh0LGUscixhKTtpZighZilyZXR1cm5bXTt2YXIgcD1pW2YuaW5kZXhdLGQ9Zi5pbmRleD1wLmksZz1wLmRpcjtmdW5jdGlvbiB2KHQpe3JldHVybiBoLmxhYmVsc1t0XStuLmhvdmVyTGFiZWxUZXh0KG8sbFt0XVtkXSl9dmFyIG09cC5oaXx8bC5ob3ZlcmluZm8seT1tLnNwbGl0KCIrIikseD0iYWxsIj09PW0sYj14fHwtMSE9PXkuaW5kZXhPZigieSIpLF89eHx8LTEhPT15LmluZGV4T2YoInRleHQiKSx3PWI/W3YoIm9wZW4iKSx2KCJoaWdoIiksdigibG93IiksdigiY2xvc2UiKSsiICAiK2NbZ11dOltdO3JldHVybiBfJiZzKHAsbCx3KSxmLmV4dHJhVGV4dD13LmpvaW4oIjxicj4iKSxmLnkwPWYueTE9by5jMnAocC55YywhMCksW2ZdfWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuY2RbMF0udHJhY2UuaG92ZXJsYWJlbC5zcGxpdD9oKHQsZSxyLG4pOmYodCxlLHIsbil9LGhvdmVyU3BsaXQ6aCxob3Zlck9uUG9pbnRzOmZ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vY29tcG9uZW50cy9meCI6NjMwLCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiOjY4NywiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjV9XSwxMDcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6Im9obGMiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJzaG93TGVnZW5kIl0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NiwiLi9hdHRyaWJ1dGVzIjoxMDY2LCIuL2NhbGMiOjEwNjcsIi4vZGVmYXVsdHMiOjEwNjgsIi4vaG92ZXIiOjEwNjksIi4vcGxvdCI6MTA3MiwiLi9zZWxlY3QiOjEwNzMsIi4vc3R5bGUiOjEwNzR9XSwxMDcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIG89cigieCIpLHM9cigib3BlbiIpLGw9cigiaGlnaCIpLGM9cigibG93IiksdT1yKCJjbG9zZSIpO2lmKHIoImhvdmVybGFiZWwuc3BsaXQiKSxuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiXSxpKSxzJiZsJiZjJiZ1KXt2YXIgaD1NYXRoLm1pbihzLmxlbmd0aCxsLmxlbmd0aCxjLmxlbmd0aCx1Lmxlbmd0aCk7cmV0dXJuIG8mJihoPU1hdGgubWluKGgsYS5taW5Sb3dMZW5ndGgobykpKSxlLl9sZW5ndGg9aCxofX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDZ9XSwxMDcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIG89ZS54YXhpcyxzPWUueWF4aXM7YS5tYWtlVHJhY2VHcm91cHMoaSxyLCJ0cmFjZSBvaGxjIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXRbMF0saT1yLnQ7aWYoITAhPT1yLnRyYWNlLnZpc2libGV8fGkuZW1wdHkpZS5yZW1vdmUoKTtlbHNle3ZhciBsPWkudGlja0xlbixjPWUuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShhLmlkZW50aXR5KTtjLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksYy5leGl0KCkucmVtb3ZlKCksYy5hdHRyKCJkIixmdW5jdGlvbih0KXtpZih0LmVtcHR5KXJldHVybiJNMCwwWiI7dmFyIGU9by5jMnAodC5wb3MsITApLHI9by5jMnAodC5wb3MtbCwhMCksbj1vLmMycCh0LnBvcytsLCEwKTtyZXR1cm4iTSIrcisiLCIrcy5jMnAodC5vLCEwKSsiSCIrZSsiTSIrZSsiLCIrcy5jMnAodC5oLCEwKSsiViIrcy5jMnAodC5sLCEwKSsiTSIrbisiLCIrcy5jMnAodC5jLCEwKSsiSCIrZX0pfX0pfX0seyIuLi8uLi9saWIiOjcxNyxkMzoxNjV9XSwxMDczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5jZCxhPXQueGF4aXMsaT10LnlheGlzLG89W10scz1uWzBdLnQuYlBvc3x8MDtpZighMT09PWUpZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLnNlbGVjdGVkPTA7ZWxzZSBmb3Iocj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbD1uW3JdO2UuY29udGFpbnMoW2EuYzJwKGwucG9zK3MpLGkuYzJwKGwueWMpXSxudWxsLGwuaSx0KT8oby5wdXNoKHtwb2ludE51bWJlcjpsLmkseDphLmMyZChsLnBvcykseTppLmMyZChsLnljKX0pLGwuc2VsZWN0ZWQ9MSk6bC5zZWxlY3RlZD0wfXJldHVybiBvfX0se31dLDEwNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG89cnx8bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLm9obGNsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpO28uc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxvLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5lYWNoKGZ1bmN0aW9uKHQpe2lmKCF0LmVtcHR5KXt2YXIgcj1lW3QuZGlyXS5saW5lO24uc2VsZWN0KHRoaXMpLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNhbGwoaS5zdHJva2Usci5jb2xvcikuY2FsbChhLmRhc2hMaW5lLHIuZGFzaCxyLndpZHRoKS5zdHlsZSgib3BhY2l0eSIsZS5zZWxlY3RlZHBvaW50cyYmIXQuc2VsZWN0ZWQ/LjM6MSl9fSl9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYxMyxkMzoxNjV9XSwxMDc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGE9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxsPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYz1uKHtlZGl0VHlwZToiY2FsYyJ9LG8oImxpbmUiLHtlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiaHNwbGluZSJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6InBsb3QifSxob3ZlcnRlbXBsYXRlOnMoe2VkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSx7a2V5czpbImNvdW50IiwicHJvYmFiaWxpdHkiXX0pfSk7ZS5leHBvcnRzPXtkb21haW46bCh7bmFtZToicGFyY2F0cyIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksaG92ZXJpbmZvOm4oe30sYS5ob3ZlcmluZm8se2ZsYWdzOlsiY291bnQiLCJwcm9iYWJpbGl0eSJdLGVkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSksaG92ZXJvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2F0ZWdvcnkiLCJjb2xvciIsImRpbWVuc2lvbiJdLGRmbHQ6ImNhdGVnb3J5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVydGVtcGxhdGU6cyh7ZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITF9LHtrZXlzOlsiY291bnQiLCJwcm9iYWJpbGl0eSIsImNhdGVnb3J5IiwiY2F0ZWdvcnljb3VudCIsImNvbG9yY291bnQiLCJiYW5kY29sb3Jjb3VudCJdfSksYXJyYW5nZW1lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBlcnBlbmRpY3VsYXIiLCJmcmVlZm9ybSIsImZpeGVkIl0sZGZsdDoicGVycGVuZGljdWxhciIsZWRpdFR5cGU6InBsb3QifSxidW5kbGVjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzb3J0cGF0aHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZvcndhcmQiLCJiYWNrd2FyZCJdLGRmbHQ6ImZvcndhcmQiLGVkaXRUeXBlOiJwbG90In0sbGFiZWxmb250Omkoe2VkaXRUeXBlOiJjYWxjIn0pLHRpY2tmb250Omkoe2VkaXRUeXBlOiJjYWxjIn0pLGRpbWVuc2lvbnM6e19pc0xpbmtlZFRvQXJyYXk6ImRpbWVuc2lvbiIsbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNhdGVnb3J5IGFzY2VuZGluZyIsImNhdGVnb3J5IGRlc2NlbmRpbmciLCJhcnJheSJdLGRmbHQ6InRyYWNlIixlZGl0VHlwZToiY2FsYyJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGVkaXRUeXBlOiJjYWxjIn0sZGlzcGxheWluZGV4Ont2YWxUeXBlOiJpbnRlZ2VyIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIix2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19LGxpbmU6Yyxjb3VudHM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxjdXN0b21kYXRhOnZvaWQgMCxob3ZlcmxhYmVsOnZvaWQgMCxpZHM6dm9pZCAwLGxlZ2VuZGdyb3VwOnZvaWQgMCxvcGFjaXR5OnZvaWQgMCxzZWxlY3RlZHBvaW50czp2b2lkIDAsc2hvd2xlZ2VuZDp2b2lkIDB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1OTksIi4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi8uLi9wbG90cy9kb21haW4iOjc5MCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3OTEsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg0MX1dLDEwNzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxhPXQoIi4vcGxvdCIpO3IubmFtZT0icGFyY2F0cyIsci5wbG90PWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBvPW4odC5jYWxjZGF0YSwicGFyY2F0cyIpO2lmKG8ubGVuZ3RoKXt2YXIgcz1vWzBdO2EodCxzLHIsaSl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPW4uX2hhcyYmbi5faGFzKCJwYXJjYXRzIiksaT1lLl9oYXMmJmUuX2hhcygicGFyY2F0cyIpO2EmJiFpJiZuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5wYXJjYXRzIikucmVtb3ZlKCl9fSx7Ii4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4MDAsIi4vcGxvdCI6MTA4MX1dLDEwNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2d1cCIpLndyYXAsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLG89dCgiLi4vLi4vbGliL2ZpbHRlcl91bmlxdWUuanMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gYyh0LGUscil7dC52YWx1ZUluZHMucHVzaChlKSx0LmNvdW50Kz1yfWZ1bmN0aW9uIHUodCxlLHIpe3JldHVybntjYXRlZ29yeUluZHM6dCxjb2xvcjplLHJhd0NvbG9yOnIsdmFsdWVJbmRzOltdLGNvdW50OjB9fWZ1bmN0aW9uIGgodCxlLHIpe3QudmFsdWVJbmRzLnB1c2goZSksdC5jb3VudCs9cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1sLmZpbHRlclZpc2libGUoZS5kaW1lbnNpb25zKTtpZigwPT09ci5sZW5ndGgpcmV0dXJuW107dmFyIGYscCxkLGc9ci5tYXAoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuInRyYWNlIj09PXQuY2F0ZWdvcnlvcmRlcj9lPW51bGw6ImFycmF5Ij09PXQuY2F0ZWdvcnlvcmRlcj9lPXQuY2F0ZWdvcnlhcnJheTooZT1vKHQudmFsdWVzKS5zb3J0KCksImNhdGVnb3J5IGRlc2NlbmRpbmciPT09dC5jYXRlZ29yeW9yZGVyJiYoZT1lLnJldmVyc2UoKSkpLGZ1bmN0aW9uKHQsZSl7ZT1udWxsPT1lP1tdOmUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0fSk7dmFyIHI9e30sbj17fSxhPVtdO2UuZm9yRWFjaChmdW5jdGlvbih0LGUpe3JbdF09MCxuW3RdPWV9KTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG8scz10W2ldO3ZvaWQgMD09PXJbc10/KHJbc109MSxvPWUucHVzaChzKS0xLG5bc109byk6KHJbc10rKyxvPW5bc10pLGEucHVzaChvKX12YXIgbD1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gclt0XX0pO3JldHVybnt1bmlxdWVWYWx1ZXM6ZSx1bmlxdWVDb3VudHM6bCxpbmRzOmF9fSh0LnZhbHVlcyxlKX0pO2Y9bC5pc0FycmF5T3JUeXBlZEFycmF5KGUuY291bnRzKT9lLmNvdW50czpbZS5jb3VudHNdLGZ1bmN0aW9uKHQpe3ZhciBlO2lmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoO3IrKyl7aWYodFtyXTwwfHx0W3JdPj10Lmxlbmd0aClyZXR1cm4hMTtpZih2b2lkIDAhPT1lW3Rbcl1dKXJldHVybiExO2VbdFtyXV09ITB9cmV0dXJuITB9KHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlpbmRleH0pKSlmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uX2Rpc3BsYXlpbmRleD10W2VdLmRpc3BsYXlpbmRleDtlbHNlIGZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5fZGlzcGxheWluZGV4PWV9KHIpLHIuZm9yRWFjaChmdW5jdGlvbih0LGUpeyFmdW5jdGlvbih0LGUpe3QuX2NhdGVnb3J5YXJyYXk9ZS51bmlxdWVWYWx1ZXMsbnVsbD09PXQudGlja3RleHR8fHZvaWQgMD09PXQudGlja3RleHQ/dC5fdGlja3RleHQ9W106dC5fdGlja3RleHQ9dC50aWNrdGV4dC5zbGljZSgpO2Zvcih2YXIgcj10Ll90aWNrdGV4dC5sZW5ndGg7cjxlLnVuaXF1ZVZhbHVlcy5sZW5ndGg7cisrKXQuX3RpY2t0ZXh0LnB1c2goZS51bmlxdWVWYWx1ZXNbcl0pfSh0LGdbZV0pfSk7dmFyIHYsbT1lLmxpbmU7bT8oYShlLCJsaW5lIikmJmkodCxlLHt2YWxzOmUubGluZS5jb2xvcixjb250YWluZXJTdHI6ImxpbmUiLGNMZXR0ZXI6ImMifSksdj1zLnRyeUNvbG9yc2NhbGUobSkpOnY9bC5pZGVudGl0eTt2YXIgeSx4LGIsXyx3LGs9clswXS52YWx1ZXMubGVuZ3RoLFQ9e30sTT1nLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbmRzfSk7Zm9yKGQ9MCx5PTA7eTxrO3krKyl7dmFyIEE9W107Zm9yKHg9MDt4PE0ubGVuZ3RoO3grKylBLnB1c2goTVt4XVt5XSk7cD1mW3klZi5sZW5ndGhdLGQrPXA7dmFyIFM9KGI9eSxfPXZvaWQgMCx3PXZvaWQgMCxsLmlzQXJyYXlPclR5cGVkQXJyYXkobS5jb2xvcik/dz1fPW0uY29sb3JbYiVtLmNvbG9yLmxlbmd0aF06Xz1tLmNvbG9yLHtjb2xvcjp2KF8pLHJhd0NvbG9yOnd9KSxFPUErIi0iK1MucmF3Q29sb3I7dm9pZCAwPT09VFtFXSYmKFRbRV09dShBLFMuY29sb3IsUy5yYXdDb2xvcikpLGgoVFtFXSx5LHApfXZhciBMLEM9ci5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gcj1lLG49dC5faW5kZXgsYT10Ll9kaXNwbGF5aW5kZXgsaT10LmxhYmVsLHtkaW1lbnNpb25JbmQ6cixjb250YWluZXJJbmQ6bixkaXNwbGF5SW5kOmEsZGltZW5zaW9uTGFiZWw6aSxjb3VudDpkLGNhdGVnb3JpZXM6W10sZHJhZ1g6bnVsbH07dmFyIHIsbixhLGl9KTtmb3IoeT0wO3k8azt5KyspZm9yKHA9Zlt5JWYubGVuZ3RoXSx4PTA7eDxDLmxlbmd0aDt4Kyspe3ZhciBQPUNbeF0uY29udGFpbmVySW5kLE89Z1t4XS5pbmRzW3ldLHo9Q1t4XS5jYXRlZ29yaWVzO2lmKHZvaWQgMD09PXpbT10pe3ZhciBJPWUuZGltZW5zaW9uc1tQXS5fY2F0ZWdvcnlhcnJheVtPXSxEPWUuZGltZW5zaW9uc1tQXS5fdGlja3RleHRbT107eltPXT17ZGltZW5zaW9uSW5kOngsY2F0ZWdvcnlJbmQ6TD1PLGNhdGVnb3J5VmFsdWU6SSxkaXNwbGF5SW5kOkwsY2F0ZWdvcnlMYWJlbDpELHZhbHVlSW5kczpbXSxjb3VudDowLGRyYWdZOm51bGx9fWMoeltPXSx5LHApfXJldHVybiBuKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzLmxlbmd0aH0pLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUpfSk7cmV0dXJue2RpbWVuc2lvbnM6dCxwYXRoczplLHRyYWNlOnZvaWQgMCxtYXhDYXRzOm4sY291bnQ6cn19KEMsVCxkKSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MDAsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo2MDMsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL2ZpbHRlcl91bmlxdWUuanMiOjcwOSwiLi4vLi4vbGliL2d1cCI6NzE1fV0sMTA3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHMscz10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxsPXQoIi4vYXR0cmlidXRlcyIpLGM9dCgiLi4vcGFyY29vcmRzL21lcmdlX2xlbmd0aCIpO2Z1bmN0aW9uIHUodCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLmRpbWVuc2lvbnMscixhKX12YXIgYT1yKCJ2YWx1ZXMiKSxpPXIoInZpc2libGUiKTtpZihhJiZhLmxlbmd0aHx8KGk9ZS52aXNpYmxlPSExKSxpKXtyKCJsYWJlbCIpLHIoImRpc3BsYXlpbmRleCIsZS5faW5kZXgpO3ZhciBvLHM9dC5jYXRlZ29yeWFycmF5LGM9QXJyYXkuaXNBcnJheShzKSYmcy5sZW5ndGg+MDtjJiYobz0iYXJyYXkiKTt2YXIgdT1yKCJjYXRlZ29yeW9yZGVyIixvKTsiYXJyYXkiPT09dT8ocigiY2F0ZWdvcnlhcnJheSIpLHIoInRpY2t0ZXh0IikpOihkZWxldGUgdC5jYXRlZ29yeWFycmF5LGRlbGV0ZSB0LnRpY2t0ZXh0KSxjfHwiYXJyYXkiIT09dXx8KGUuY2F0ZWdvcnlvcmRlcj0idHJhY2UiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2Z1bmN0aW9uIGYocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixhKX12YXIgcD1zKHQsZSx7bmFtZToiZGltZW5zaW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOnV9KSxkPWZ1bmN0aW9uKHQsZSxyLG8scyl7cygibGluZS5zaGFwZSIpLHMoImxpbmUuaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBsPXMoImxpbmUuY29sb3IiLG8uY29sb3J3YXlbMF0pO2lmKGEodCwibGluZSIpJiZuLmlzQXJyYXlPclR5cGVkQXJyYXkobCkpe2lmKGwubGVuZ3RoKXJldHVybiBzKCJsaW5lLmNvbG9yc2NhbGUiKSxpKHQsZSxvLHMse3ByZWZpeDoibGluZS4iLGNMZXR0ZXI6ImMifSksbC5sZW5ndGg7ZS5saW5lLmNvbG9yPXJ9cmV0dXJuIDEvMH0odCxlLHIsaCxmKTtvKGUsaCxmKSxBcnJheS5pc0FycmF5KHApJiZwLmxlbmd0aHx8KGUudmlzaWJsZT0hMSksYyhlLHAsInZhbHVlcyIsZCksZigiaG92ZXJvbiIpLGYoImhvdmVydGVtcGxhdGUiKSxmKCJhcnJhbmdlbWVudCIpLGYoImJ1bmRsZWNvbG9ycyIpLGYoInNvcnRwYXRocyIpLGYoImNvdW50cyIpO3ZhciBnPXtmYW1pbHk6aC5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQoaC5mb250LnNpemUpLGNvbG9yOmguZm9udC5jb2xvcn07bi5jb2VyY2VGb250KGYsImxhYmVsZm9udCIsZyk7dmFyIHY9e2ZhbWlseTpoLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZChoLmZvbnQuc2l6ZS8xLjIpLGNvbG9yOmguZm9udC5jb2xvcn07bi5jb2VyY2VGb250KGYsInRpY2tmb250Iix2KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo2MDMsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc2MSwiLi4vLi4vcGxvdHMvZG9tYWluIjo3OTAsIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGgiOjEwOTEsIi4vYXR0cmlidXRlcyI6MTA3NX1dLDEwNzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksY29sb3JiYXI6e2NvbnRhaW5lcjoibGluZSIsbWluOiJjbWluIixtYXg6ImNtYXgifSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToicGFyY2F0cyIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsibm9PcGFjaXR5Il0sbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjoxMDc1LCIuL2Jhc2VfcGxvdCI6MTA3NiwiLi9jYWxjIjoxMDc3LCIuL2RlZmF1bHRzIjoxMDc4LCIuL3Bsb3QiOjEwODF9XSwxMDgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X2FwaSIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoInRpbnljb2xvcjIiKSxjPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpO2Z1bmN0aW9uIHUodCxlLHIsYSl7dmFyIGk9dC5tYXAoZnVuY3Rpb24odCxlLHIpe3ZhciBuLGE9clswXSxpPWUubWFyZ2lufHx7bDo4MCxyOjgwLHQ6MTAwLGI6ODB9LG89YS50cmFjZSxzPW8uZG9tYWluLGw9ZS53aWR0aCxjPWUuaGVpZ2h0LHU9TWF0aC5mbG9vcihsKihzLnhbMV0tcy54WzBdKSksaD1NYXRoLmZsb29yKGMqKHMueVsxXS1zLnlbMF0pKSxmPXMueFswXSpsK2kubCxwPWUuaGVpZ2h0LXMueVsxXSplLmhlaWdodCtpLnQsZD1vLmxpbmUuc2hhcGU7bj0iYWxsIj09PW8uaG92ZXJpbmZvP1siY291bnQiLCJwcm9iYWJpbGl0eSJdOihvLmhvdmVyaW5mb3x8IiIpLnNwbGl0KCIrIik7dmFyIGc9e3RyYWNlOm8sa2V5Om8udWlkLG1vZGVsOmEseDpmLHk6cCx3aWR0aDp1LGhlaWdodDpoLGhvdmVyb246by5ob3Zlcm9uLGhvdmVyaW5mb0l0ZW1zOm4sYXJyYW5nZW1lbnQ6by5hcnJhbmdlbWVudCxidW5kbGVjb2xvcnM6by5idW5kbGVjb2xvcnMsc29ydHBhdGhzOm8uc29ydHBhdGhzLGxhYmVsZm9udDpvLmxhYmVsZm9udCxjYXRlZ29yeWxhYmVsZm9udDpvLnRpY2tmb250LHBhdGhTaGFwZTpkLGRyYWdEaW1lbnNpb246bnVsbCxtYXJnaW46aSxwYXRoczpbXSxkaW1lbnNpb25zOltdLGdyYXBoRGl2OnQsdHJhY2VTZWxlY3Rpb246bnVsbCxwYXRoU2VsZWN0aW9uOm51bGwsZGltZW5zaW9uU2VsZWN0aW9uOm51bGx9O2EuZGltZW5zaW9ucyYmKEYoZyksUihnKSk7cmV0dXJuIGd9LmJpbmQoMCxlLHIpKSxsPWEuc2VsZWN0QWxsKCJnLnBhcmNhdHNsYXllciIpLmRhdGEoW251bGxdKTtsLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwYXJjYXRzbGF5ZXIiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKTt2YXIgdT1sLnNlbGVjdEFsbCgiZy50cmFjZS5wYXJjYXRzIikuZGF0YShpLGgpLHY9dS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2UgcGFyY2F0cyIpO3UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC54KyIsICIrdC55KyIpIn0pLHYuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwYXRocyIpO3ZhciBtPXUuc2VsZWN0KCJnLnBhdGhzIikuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdGhzfSxoKTttLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSk7dmFyIGI9bS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwicGF0aCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKS5hdHRyKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jb2xvcn0pLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7eChiKSxtLmF0dHIoImQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnN2Z0R9KSxiLmVtcHR5KCl8fG0uc29ydChwKSxtLmV4aXQoKS5yZW1vdmUoKSxtLm9uKCJtb3VzZW92ZXIiLGQpLm9uKCJtb3VzZW91dCIsZykub24oImNsaWNrIix5KSx2LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGltZW5zaW9ucyIpO3ZhciBrPXUuc2VsZWN0KCJnLmRpbWVuc2lvbnMiKS5zZWxlY3RBbGwoImcuZGltZW5zaW9uIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSxoKTtrLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkaW1lbnNpb24iKSxrLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiLCAwKSJ9KSxrLmV4aXQoKS5yZW1vdmUoKTt2YXIgVD1rLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllc30saCksTT1ULmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXRlZ29yeSIpO1QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKDAsICIrdC55KyIpIn0pLE0uYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJjYXRyZWN0IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksVC5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSxfKE0pO3ZhciBBPVQuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5iYW5kc30saCk7QS5lYWNoKGZ1bmN0aW9uKCl7by5yYWlzZVRvVG9wKHRoaXMpfSksQS5hdHRyKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pO3ZhciBPPUEuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhbmRyZWN0IikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTtBLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkuYXR0cigiY3Vyc29yIixmdW5jdGlvbih0KXtyZXR1cm4iZml4ZWQiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50PyJkZWZhdWx0IjoicGVycGVuZGljdWxhciI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/Im5zLXJlc2l6ZSI6Im1vdmUifSksdyhPKSxBLmV4aXQoKS5yZW1vdmUoKSxNLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiY2F0bGFiZWwiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKTt2YXIgej1lLl9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3I7VC5zZWxlY3QoInRleHQuY2F0bGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZnVuY3Rpb24odCl7cmV0dXJuIGYodCk/InN0YXJ0IjoiZW5kIn0pLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LXNoYWRvdyIseisiIC0xcHggIDFweCAycHgsICIreisiIDFweCAgMXB4IDJweCwgIit6KyIgIDFweCAtMXB4IDJweCwgIit6KyIgLTFweCAtMXB4IDJweCIpLnN0eWxlKCJmaWxsIiwicmdiKDAsIDAsIDApIikuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuIGYodCk/dC53aWR0aCs1Oi01fSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0LzJ9KS50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNhdGVnb3J5TGFiZWx9KS5lYWNoKGZ1bmN0aW9uKHQpe3MuZm9udChuLnNlbGVjdCh0aGlzKSx0LnBhcmNhdHNWaWV3TW9kZWwuY2F0ZWdvcnlsYWJlbGZvbnQpLGMuY29udmVydFRvVHNwYW5zKG4uc2VsZWN0KHRoaXMpLGUpfSksTS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImRpbWxhYmVsIiksVC5zZWxlY3QoInRleHQuZGltbGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImJhc2VsaW5lIikuYXR0cigiY3Vyc29yIixmdW5jdGlvbih0KXtyZXR1cm4iZml4ZWQiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50PyJkZWZhdWx0IjoiZXctcmVzaXplIn0pLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRoLzJ9KS5hdHRyKCJ5IiwtNSkudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZT90LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1t0Lm1vZGVsLmRpbWVuc2lvbkluZF0uZGltZW5zaW9uTGFiZWw6bnVsbH0pLmVhY2goZnVuY3Rpb24odCl7cy5mb250KG4uc2VsZWN0KHRoaXMpLHQucGFyY2F0c1ZpZXdNb2RlbC5sYWJlbGZvbnQpfSksVC5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5vbigibW91c2VvdmVyIixTKS5vbigibW91c2VvdXQiLEUpLFQuZXhpdCgpLnJlbW92ZSgpLGsuY2FsbChuLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24odCl7cmV0dXJue3g6dC54LHk6MH19KS5vbigiZHJhZ3N0YXJ0IixMKS5vbigiZHJhZyIsQykub24oImRyYWdlbmQiLFApKSx1LmVhY2goZnVuY3Rpb24odCl7dC50cmFjZVNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKSx0LnBhdGhTZWxlY3Rpb249bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnBhdGhzIikuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKSx0LmRpbWVuc2lvblNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuZGltZW5zaW9ucyIpLnNlbGVjdEFsbCgiZy5kaW1lbnNpb24iKX0pLHUuZXhpdCgpLnJlbW92ZSgpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQua2V5fWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnMubGVuZ3RoLHI9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbZS0xXS5tb2RlbC5kaW1lbnNpb25JbmQ7cmV0dXJuIHQubW9kZWwuZGltZW5zaW9uSW5kPT09cn1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHQubW9kZWwucmF3Q29sb3I+ZS5tb2RlbC5yYXdDb2xvcj8xOnQubW9kZWwucmF3Q29sb3I8ZS5tb2RlbC5yYXdDb2xvcj8tMTowfWZ1bmN0aW9uIGQodCl7aWYoIXQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uJiYtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpe28ucmFpc2VUb1RvcCh0aGlzKSxiKG4uc2VsZWN0KHRoaXMpKTt2YXIgZT12KHQpLHI9bSh0KTtpZih0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X2hvdmVyIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudCxjb25zdHJhaW50czpyfSksLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigibm9uZSIpKXt2YXIgYSxzLGMsdT1uLm1vdXNlKHRoaXMpWzBdLGg9dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGY9dC5wYXJjYXRzVmlld01vZGVsLnRyYWNlLHA9aC5fZnVsbExheW91dCxkPXAuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPXQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmb3IoYz0wO2M8dC5sZWZ0WHMubGVuZ3RoLTE7YysrKWlmKHQubGVmdFhzW2NdK3QuZGltV2lkdGhzW2NdLTI8PXUmJnU8PXQubGVmdFhzW2MrMV0rMil7dmFyIHk9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbY10seD10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tjKzFdO2E9KHkueCt5LndpZHRoK3gueCkvMixzPSh0LnRvcFlzW2NdK3QudG9wWXNbYysxXSt0LmhlaWdodCkvMjticmVha312YXIgXz10LnBhcmNhdHNWaWV3TW9kZWwueCthLHc9dC5wYXJjYXRzVmlld01vZGVsLnkrcyxrPWwubW9zdFJlYWRhYmxlKHQubW9kZWwuY29sb3IsWyJibGFjayIsIndoaXRlIl0pLFQ9dC5tb2RlbC5jb3VudCxNPVQvdC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LEE9e2NvdW50TGFiZWw6VCxwcm9iYWJpbGl0eUxhYmVsOk0udG9GaXhlZCgzKX0sUz1bXTstMSE9PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJjb3VudCIpJiZTLnB1c2goWyJDb3VudDoiLEEuY291bnRMYWJlbF0uam9pbigiICIpKSwtMSE9PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJwcm9iYWJpbGl0eSIpJiZTLnB1c2goWyJQOiIsQS5wcm9iYWJpbGl0eUxhYmVsXS5qb2luKCIgIikpO3ZhciBFPVMuam9pbigiPGJyPiIpLEw9bi5tb3VzZShoKVswXTtpLmxvbmVIb3Zlcih7dHJhY2U6Zix4Ol8tZC5sZWZ0K2cubGVmdCx5OnctZC50b3ArZy50b3AsdGV4dDpFLGNvbG9yOnQubW9kZWwuY29sb3IsYm9yZGVyQ29sb3I6ImJsYWNrIixmb250RmFtaWx5OidNb25hY28sICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZScsZm9udFNpemU6MTAsZm9udENvbG9yOmssaWRlYWxBbGlnbjpMPF8/InJpZ2h0IjoibGVmdCIsaG92ZXJ0ZW1wbGF0ZTooZi5saW5lfHx7fSkuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOkEsZXZlbnREYXRhOlt7ZGF0YTpmLl9pbnB1dCxmdWxsRGF0YTpmLGNvdW50OlQscHJvYmFiaWxpdHk6TX1dfSx7Y29udGFpbmVyOnAuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnAuX3BhcGVyLm5vZGUoKSxnZDpofSl9fX1mdW5jdGlvbiBnKHQpe2lmKCF0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbiYmKHgobi5zZWxlY3QodGhpcykpLGkubG9uZVVuaG92ZXIodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9ob3ZlcmxheWVyLm5vZGUoKSksdC5wYXJjYXRzVmlld01vZGVsLnBhdGhTZWxlY3Rpb24uc29ydChwKSwtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpKXt2YXIgZT12KHQpLHI9bSh0KTt0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtwb2ludHM6ZSxldmVudDpuLmV2ZW50LGNvbnN0cmFpbnRzOnJ9KX19ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9W10scj1PKHQucGFyY2F0c1ZpZXdNb2RlbCksbj0wO248dC5tb2RlbC52YWx1ZUluZHMubGVuZ3RoO24rKyl7dmFyIGE9dC5tb2RlbC52YWx1ZUluZHNbbl07ZS5wdXNoKHtjdXJ2ZU51bWJlcjpyLHBvaW50TnVtYmVyOmF9KX1yZXR1cm4gZX1mdW5jdGlvbiBtKHQpe2Zvcih2YXIgZT17fSxyPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGE9cltuXSxpPWEuY2F0ZWdvcmllc1t0Lm1vZGVsLmNhdGVnb3J5SW5kc1tuXV07ZVthLmNvbnRhaW5lckluZF09aS5jYXRlZ29yeVZhbHVlfXJldHVybiB2b2lkIDAhPT10Lm1vZGVsLnJhd0NvbG9yJiYoZS5jb2xvcj10Lm1vZGVsLnJhd0NvbG9yKSxlfWZ1bmN0aW9uIHkodCl7aWYoLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpKXt2YXIgZT12KHQpLHI9bSh0KTt0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X2NsaWNrIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudCxjb25zdHJhaW50czpyfSl9fWZ1bmN0aW9uIHgodCl7dC5hdHRyKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jb2xvcn0pLmF0dHIoImZpbGwtb3BhY2l0eSIsLjYpLmF0dHIoInN0cm9rZSIsImxpZ2h0Z3JheSIpLmF0dHIoInN0cm9rZS13aWR0aCIsLjIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwxKX1mdW5jdGlvbiBiKHQpe3QuYXR0cigiZmlsbC1vcGFjaXR5IiwuOCkuYXR0cigic3Ryb2tlIixmdW5jdGlvbih0KXtyZXR1cm4gbC5tb3N0UmVhZGFibGUodC5tb2RlbC5jb2xvcixbImJsYWNrIiwid2hpdGUiXSl9KS5hdHRyKCJzdHJva2Utd2lkdGgiLC4zKX1mdW5jdGlvbiBfKHQpe3Quc2VsZWN0KCJyZWN0LmNhdHJlY3QiKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSkuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDEpfWZ1bmN0aW9uIHcodCl7dC5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS13aWR0aCIsLjIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwxKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDEpfWZ1bmN0aW9uIGsodCl7dmFyIGU9dC5wYXJjYXRzVmlld01vZGVsLnBhdGhTZWxlY3Rpb24scj10LmNhdGVnb3J5Vmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbkluZCxuPXQuY2F0ZWdvcnlWaWV3TW9kZWwubW9kZWwuY2F0ZWdvcnlJbmQ7cmV0dXJuIGUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLm1vZGVsLmNhdGVnb3J5SW5kc1tyXT09PW4mJmUubW9kZWwuY29sb3I9PT10LmNvbG9yfSl9ZnVuY3Rpb24gVCh0LGUscil7dmFyIGE9bi5zZWxlY3QodCkuZGF0dW0oKSxpPWEuY2F0ZWdvcnlWaWV3TW9kZWwubW9kZWwsbz1hLnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYscz1uLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLGw9W107cy5lYWNoKGZ1bmN0aW9uKHQpe2sodCkuZWFjaChmdW5jdGlvbih0KXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsLHYodCkpfSl9KTt2YXIgYz17fTtjW2kuZGltZW5zaW9uSW5kXT1pLmNhdGVnb3J5VmFsdWUsby5lbWl0KGUse3BvaW50czpsLGV2ZW50OnIsY29uc3RyYWludHM6Y30pfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBhPW4uc2VsZWN0KHQpLmRhdHVtKCksaT1hLmNhdGVnb3J5Vmlld01vZGVsLm1vZGVsLG89YS5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LHM9ayhhKSxsPVtdO3MuZWFjaChmdW5jdGlvbih0KXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsLHYodCkpfSk7dmFyIGM9e307Y1tpLmRpbWVuc2lvbkluZF09aS5jYXRlZ29yeVZhbHVlLHZvaWQgMCE9PWEucmF3Q29sb3ImJihjLmNvbG9yPWEucmF3Q29sb3IpLG8uZW1pdChlLHtwb2ludHM6bCxldmVudDpyLGNvbnN0cmFpbnRzOmN9KX1mdW5jdGlvbiBBKHQsZSl7dmFyIHIsYSxpPW4uc2VsZWN0KGUucGFyZW50Tm9kZSkuc2VsZWN0KCJyZWN0LmNhdHJlY3QiKSxvPWkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9aS5kYXR1bSgpLGw9cy5wYXJjYXRzVmlld01vZGVsLGM9bC5tb2RlbC5kaW1lbnNpb25zW3MubW9kZWwuZGltZW5zaW9uSW5kXSx1PWwudHJhY2UsaD1vLnRvcCtvLmhlaWdodC8yO2wuZGltZW5zaW9ucy5sZW5ndGg+MSYmYy5kaXNwbGF5SW5kPT09bC5kaW1lbnNpb25zLmxlbmd0aC0xPyhyPW8ubGVmdCxhPSJsZWZ0Iik6KHI9by5sZWZ0K28ud2lkdGgsYT0icmlnaHQiKTt2YXIgZj1zLm1vZGVsLmNvdW50LHA9cy5tb2RlbC5jYXRlZ29yeUxhYmVsLGQ9Zi9zLnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuY291bnQsZz17Y291bnRMYWJlbDpmLGNhdGVnb3J5TGFiZWw6cCxwcm9iYWJpbGl0eUxhYmVsOmQudG9GaXhlZCgzKX0sdj1bXTstMSE9PXMucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJjb3VudCIpJiZ2LnB1c2goWyJDb3VudDoiLGcuY291bnRMYWJlbF0uam9pbigiICIpKSwtMSE9PXMucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJwcm9iYWJpbGl0eSIpJiZ2LnB1c2goWyJQKCIrZy5jYXRlZ29yeUxhYmVsKyIpOiIsZy5wcm9iYWJpbGl0eUxhYmVsXS5qb2luKCIgIikpO3ZhciBtPXYuam9pbigiPGJyPiIpO3JldHVybnt0cmFjZTp1LHg6ci10LmxlZnQseTpoLXQudG9wLHRleHQ6bSxjb2xvcjoibGlnaHRncmF5Iixib3JkZXJDb2xvcjoiYmxhY2siLGZvbnRGYW1pbHk6J01vbmFjbywgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlJyxmb250U2l6ZToxMixmb250Q29sb3I6ImJsYWNrIixpZGVhbEFsaWduOmEsaG92ZXJ0ZW1wbGF0ZTp1LmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczpnLGV2ZW50RGF0YTpbe2RhdGE6dS5faW5wdXQsZnVsbERhdGE6dSxjb3VudDpmLGNhdGVnb3J5OnAscHJvYmFiaWxpdHk6ZH1dfX1mdW5jdGlvbiBTKHQpe2lmKCF0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbiYmLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpKXtpZihuLm1vdXNlKHRoaXMpWzFdPC0xKXJldHVybjt2YXIgZSxyPXQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixhPXIuX2Z1bGxMYXlvdXQscz1hLl9wYXBlcmRpdi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJvbjtpZigiY29sb3IiPT09Yz8oIWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLmRhdHVtKCkscj1rKGUpO2Iociksci5lYWNoKGZ1bmN0aW9uKCl7by5yYWlzZVRvVG9wKHRoaXMpfSksbi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3I9PT1lLmNvbG9yfSkuZWFjaChmdW5jdGlvbigpe28ucmFpc2VUb1RvcCh0aGlzKSxuLnNlbGVjdCh0aGlzKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS13aWR0aCIsMS41KX0pfSh0aGlzKSxNKHRoaXMsInBsb3RseV9ob3ZlciIsbi5ldmVudCkpOighZnVuY3Rpb24odCl7bi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWsodCk7YihlKSxlLmVhY2goZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyl9KX0pLG4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0KCJyZWN0LmNhdHJlY3QiKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS13aWR0aCIsMi41KX0odGhpcyksVCh0aGlzLCJwbG90bHlfaG92ZXIiLG4uZXZlbnQpKSwtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJub25lIikpImNhdGVnb3J5Ij09PWM/ZT1BKHMsdGhpcyk6ImNvbG9yIj09PWM/ZT1mdW5jdGlvbih0LGUpe3ZhciByLGEsaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89bi5zZWxlY3QoZSkuZGF0dW0oKSxzPW8uY2F0ZWdvcnlWaWV3TW9kZWwsYz1zLnBhcmNhdHNWaWV3TW9kZWwsdT1jLm1vZGVsLmRpbWVuc2lvbnNbcy5tb2RlbC5kaW1lbnNpb25JbmRdLGg9Yy50cmFjZSxmPWkueStpLmhlaWdodC8yO2MuZGltZW5zaW9ucy5sZW5ndGg+MSYmdS5kaXNwbGF5SW5kPT09Yy5kaW1lbnNpb25zLmxlbmd0aC0xPyhyPWkubGVmdCxhPSJsZWZ0Iik6KHI9aS5sZWZ0K2kud2lkdGgsYT0icmlnaHQiKTt2YXIgcD1zLm1vZGVsLmNhdGVnb3J5TGFiZWwsZD1vLnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuY291bnQsZz0wO28uY2F0ZWdvcnlWaWV3TW9kZWwuYmFuZHMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNvbG9yPT09by5jb2xvciYmKGcrPXQuY291bnQpfSk7dmFyIHY9cy5tb2RlbC5jb3VudCxtPTA7Yy5wYXRoU2VsZWN0aW9uLmVhY2goZnVuY3Rpb24odCl7dC5tb2RlbC5jb2xvcj09PW8uY29sb3ImJihtKz10Lm1vZGVsLmNvdW50KX0pO3ZhciB5PWcvZCx4PWcvbSxiPWcvdixfPXtjb3VudExhYmVsOmQsY2F0ZWdvcnlMYWJlbDpwLHByb2JhYmlsaXR5TGFiZWw6eS50b0ZpeGVkKDMpfSx3PVtdOy0xIT09cy5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoImNvdW50IikmJncucHVzaChbIkNvdW50OiIsXy5jb3VudExhYmVsXS5qb2luKCIgIikpLC0xIT09cy5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInByb2JhYmlsaXR5IikmJih3LnB1c2goIlAoY29sb3IgXHUyMjI5ICIrcCsiKTogIitfLnByb2JhYmlsaXR5TGFiZWwpLHcucHVzaCgiUCgiK3ArIiB8IGNvbG9yKTogIit4LnRvRml4ZWQoMykpLHcucHVzaCgiUChjb2xvciB8ICIrcCsiKTogIitiLnRvRml4ZWQoMykpKTt2YXIgaz13LmpvaW4oIjxicj4iKSxUPWwubW9zdFJlYWRhYmxlKG8uY29sb3IsWyJibGFjayIsIndoaXRlIl0pO3JldHVybnt0cmFjZTpoLHg6ci10LmxlZnQseTpmLXQudG9wLHRleHQ6ayxjb2xvcjpvLmNvbG9yLGJvcmRlckNvbG9yOiJibGFjayIsZm9udEZhbWlseTonTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UnLGZvbnRDb2xvcjpULGZvbnRTaXplOjEwLGlkZWFsQWxpZ246YSxob3ZlcnRlbXBsYXRlOmguaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOl8sZXZlbnREYXRhOlt7ZGF0YTpoLl9pbnB1dCxmdWxsRGF0YTpoLGNhdGVnb3J5OnAsY291bnQ6ZCxwcm9iYWJpbGl0eTp5LGNhdGVnb3J5Y291bnQ6dixjb2xvcmNvdW50Om0sYmFuZGNvbG9yY291bnQ6Z31dfX0ocyx0aGlzKToiZGltZW5zaW9uIj09PWMmJihlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107cmV0dXJuIG4uc2VsZWN0KGUucGFyZW50Tm9kZS5wYXJlbnROb2RlKS5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmVhY2goZnVuY3Rpb24oKXtyLnB1c2goQSh0LHRoaXMpKX0pLHJ9KHMsdGhpcykpLGUmJmkubG9uZUhvdmVyKGUse2NvbnRhaW5lcjphLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjphLl9wYXBlci5ub2RlKCksZ2Q6cn0pfX1mdW5jdGlvbiBFKHQpe3ZhciBlPXQucGFyY2F0c1ZpZXdNb2RlbDtpZighZS5kcmFnRGltZW5zaW9uJiYoeChlLnBhdGhTZWxlY3Rpb24pLF8oZS5kaW1lbnNpb25TZWxlY3Rpb24uc2VsZWN0QWxsKCJnLmNhdGVnb3J5IikpLHcoZS5kaW1lbnNpb25TZWxlY3Rpb24uc2VsZWN0QWxsKCJnLmNhdGVnb3J5Iikuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikpLGkubG9uZVVuaG92ZXIoZS5ncmFwaERpdi5fZnVsbExheW91dC5faG92ZXJsYXllci5ub2RlKCkpLGUucGF0aFNlbGVjdGlvbi5zb3J0KHApLC0xPT09ZS5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpKXsiY29sb3IiPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyb24/TSh0aGlzLCJwbG90bHlfdW5ob3ZlciIsbi5ldmVudCk6VCh0aGlzLCJwbG90bHlfdW5ob3ZlciIsbi5ldmVudCl9fWZ1bmN0aW9uIEwodCl7ImZpeGVkIiE9PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudCYmKHQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQ9dC5tb2RlbC5kaXNwbGF5SW5kLHQuaW5pdGlhbERyYWdEaW1lbnNpb25EaXNwbGF5SW5kcz10LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pLHQuZHJhZ0hhc01vdmVkPSExLHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1udWxsLG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLnNlbGVjdCgicmVjdC5jYXRyZWN0IikuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLm1vdXNlKHRoaXMpWzBdLGE9bi5tb3VzZSh0aGlzKVsxXTstMjw9ciYmcjw9ZS53aWR0aCsyJiYtMjw9YSYmYTw9ZS5oZWlnaHQrMiYmKHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1lLm1vZGVsLmRpc3BsYXlJbmQsdC5pbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHM9dC5tb2RlbC5jYXRlZ29yaWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSksZS5tb2RlbC5kcmFnWT1lLnksby5yYWlzZVRvVG9wKHRoaXMucGFyZW50Tm9kZSksbi5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5lYWNoKGZ1bmN0aW9uKGUpe2UueTxhJiZhPD1lLnkrZS5oZWlnaHQmJih0LnBvdGVudGlhbENsaWNrQmFuZD10aGlzKX0pKX0pLHQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uPXQsaS5sb25lVW5ob3Zlcih0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2hvdmVybGF5ZXIubm9kZSgpKSl9ZnVuY3Rpb24gQyh0KXtpZigiZml4ZWQiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiYodC5kcmFnSGFzTW92ZWQ9ITAsbnVsbCE9PXQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQpKXt2YXIgZT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kLHI9ZS0xLGE9ZSsxLGk9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbZV07aWYobnVsbCE9PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZCl7dmFyIG89aS5jYXRlZ29yaWVzW3QuZHJhZ0NhdGVnb3J5RGlzcGxheUluZF07by5tb2RlbC5kcmFnWSs9bi5ldmVudC5keTt2YXIgcz1vLm1vZGVsLmRyYWdZLGw9by5tb2RlbC5kaXNwbGF5SW5kLGM9aS5jYXRlZ29yaWVzLHU9Y1tsLTFdLGg9Y1tsKzFdO3ZvaWQgMCE9PXUmJnM8dS55K3UuaGVpZ2h0LzImJihvLm1vZGVsLmRpc3BsYXlJbmQ9dS5tb2RlbC5kaXNwbGF5SW5kLHUubW9kZWwuZGlzcGxheUluZD1sKSx2b2lkIDAhPT1oJiZzK28uaGVpZ2h0PmgueStoLmhlaWdodC8yJiYoby5tb2RlbC5kaXNwbGF5SW5kPWgubW9kZWwuZGlzcGxheUluZCxoLm1vZGVsLmRpc3BsYXlJbmQ9bCksdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPW8ubW9kZWwuZGlzcGxheUluZH1pZihudWxsPT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kfHwiZnJlZWZvcm0iPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50KXtpLm1vZGVsLmRyYWdYPW4uZXZlbnQueDt2YXIgZj10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tyXSxwPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2FdO3ZvaWQgMCE9PWYmJmkubW9kZWwuZHJhZ1g8Zi54K2Yud2lkdGgmJihpLm1vZGVsLmRpc3BsYXlJbmQ9Zi5tb2RlbC5kaXNwbGF5SW5kLGYubW9kZWwuZGlzcGxheUluZD1lKSx2b2lkIDAhPT1wJiZpLm1vZGVsLmRyYWdYK2kud2lkdGg+cC54JiYoaS5tb2RlbC5kaXNwbGF5SW5kPXAubW9kZWwuZGlzcGxheUluZCxwLm1vZGVsLmRpc3BsYXlJbmQ9dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCksdC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD1pLm1vZGVsLmRpc3BsYXlJbmR9Rih0LnBhcmNhdHNWaWV3TW9kZWwpLFIodC5wYXJjYXRzVmlld01vZGVsKSxJKHQucGFyY2F0c1ZpZXdNb2RlbCkseih0LnBhcmNhdHNWaWV3TW9kZWwpfX1mdW5jdGlvbiBQKHQpe2lmKCJmaXhlZCIhPT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQmJm51bGwhPT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInRleHQiKS5hdHRyKCJmb250LXdlaWdodCIsIm5vcm1hbCIpO3ZhciBlPXt9LHI9Tyh0LnBhcmNhdHNWaWV3TW9kZWwpLGk9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSxvPXQuaW5pdGlhbERyYWdEaW1lbnNpb25EaXNwbGF5SW5kcy5zb21lKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQhPT1pW2VdfSk7byYmaS5mb3JFYWNoKGZ1bmN0aW9uKHIsbil7dmFyIGE9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnNbbl0uY29udGFpbmVySW5kO2VbImRpbWVuc2lvbnNbIithKyJdLmRpc3BsYXlpbmRleCJdPXJ9KTt2YXIgcz0hMTtpZihudWxsIT09dC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kKXt2YXIgbD10Lm1vZGVsLmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KTtpZihzPXQuaW5pdGlhbERyYWdDYXRlZ29yeURpc3BsYXlJbmRzLnNvbWUoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCE9PWxbZV19KSl7dmFyIGM9dC5tb2RlbC5jYXRlZ29yaWVzLnNsaWNlKCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSksdT1jLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yeVZhbHVlfSksaD1jLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yeUxhYmVsfSk7ZVsiZGltZW5zaW9uc1siK3QubW9kZWwuY29udGFpbmVySW5kKyJdLmNhdGVnb3J5YXJyYXkiXT1bdV0sZVsiZGltZW5zaW9uc1siK3QubW9kZWwuY29udGFpbmVySW5kKyJdLnRpY2t0ZXh0Il09W2hdLGVbImRpbWVuc2lvbnNbIit0Lm1vZGVsLmNvbnRhaW5lckluZCsiXS5jYXRlZ29yeW9yZGVyIl09ImFycmF5In19aWYoLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpJiYhdC5kcmFnSGFzTW92ZWQmJnQucG90ZW50aWFsQ2xpY2tCYW5kJiYoImNvbG9yIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3Zlcm9uP00odC5wb3RlbnRpYWxDbGlja0JhbmQsInBsb3RseV9jbGljayIsbi5ldmVudC5zb3VyY2VFdmVudCk6VCh0LnBvdGVudGlhbENsaWNrQmFuZCwicGxvdGx5X2NsaWNrIixuLmV2ZW50LnNvdXJjZUV2ZW50KSksdC5tb2RlbC5kcmFnWD1udWxsLG51bGwhPT10LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQpdC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbdC5kcmFnRGltZW5zaW9uRGlzcGxheUluZF0uY2F0ZWdvcmllc1t0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmRdLm1vZGVsLmRyYWdZPW51bGwsdC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPW51bGw7dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD1udWxsLHQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uPW51bGwsdC5kcmFnSGFzTW92ZWQ9bnVsbCx0LnBvdGVudGlhbENsaWNrQmFuZD1udWxsLEYodC5wYXJjYXRzVmlld01vZGVsKSxSKHQucGFyY2F0c1ZpZXdNb2RlbCksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oMzAwKS5lYXNlKCJjdWJpYy1pbi1vdXQiKS5lYWNoKGZ1bmN0aW9uKCl7SSh0LnBhcmNhdHNWaWV3TW9kZWwsITApLHoodC5wYXJjYXRzVmlld01vZGVsLCEwKX0pLmVhY2goImVuZCIsZnVuY3Rpb24oKXsob3x8cykmJmEucmVzdHlsZSh0LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYsZSxbcl0pfSl9fWZ1bmN0aW9uIE8odCl7Zm9yKHZhciBlLHI9dC5ncmFwaERpdi5fZnVsbERhdGEsbj0wO248ci5sZW5ndGg7bisrKWlmKHQua2V5PT09cltuXS51aWQpe2U9bjticmVha31yZXR1cm4gZX1mdW5jdGlvbiB6KHQsZSl7dmFyIHI7dm9pZCAwPT09ZSYmKGU9ITEpLHQucGF0aFNlbGVjdGlvbi5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdGhzfSxoKSwocj10LnBhdGhTZWxlY3Rpb24sZT9yLnRyYW5zaXRpb24oKTpyKS5hdHRyKCJkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdEfSl9ZnVuY3Rpb24gSSh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGU/dC50cmFuc2l0aW9uKCk6dH12b2lkIDA9PT1lJiYoZT0hMSksdC5kaW1lbnNpb25TZWxlY3Rpb24uZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSxoKTt2YXIgYT10LmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXN9LGgpO3IodC5kaW1lbnNpb25TZWxlY3Rpb24pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiLCAwKSJ9KSxyKGEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgwLCAiK3QueSsiKSJ9KSxhLnNlbGVjdCgiLmRpbWxhYmVsIikudGV4dChmdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZT90LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1t0Lm1vZGVsLmRpbWVuc2lvbkluZF0uZGltZW5zaW9uTGFiZWw6bnVsbH0pLGEuc2VsZWN0KCIuY2F0bGFiZWwiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZnVuY3Rpb24odCl7cmV0dXJuIGYodCk/InN0YXJ0IjoiZW5kIn0pLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpP3Qud2lkdGgrNTotNX0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGUscjtmKHQpPyhlPXQud2lkdGgrNSxyPSJzdGFydCIpOihlPS01LHI9ImVuZCIpLG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgidHNwYW4iKS5hdHRyKCJ4IixlKS5hdHRyKCJ0ZXh0LWFuY2hvciIscil9KTt2YXIgaT1hLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuYmFuZHN9LGgpLHM9aS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFuZHJlY3QiKS5hdHRyKCJjdXJzb3IiLCJtb3ZlIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTtpLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdC55fSksdyhzKSxpLmVhY2goZnVuY3Rpb24oKXtvLnJhaXNlVG9Ub3AodGhpcyl9KSxpLmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBEKHQsZSxyLGEsaSl7dmFyIG8scyxsPVtdLGM9W107Zm9yKHM9MDtzPHIubGVuZ3RoLTE7cysrKW89bi5pbnRlcnBvbGF0ZU51bWJlcihyW3NdK3Rbc10sdFtzKzFdKSxsLnB1c2gobyhpKSksYy5wdXNoKG8oMS1pKSk7dmFyIHU9Ik0gIit0WzBdKyIsIitlWzBdO2Zvcih1Kz0ibCIrclswXSsiLDAgIixzPTE7czxyLmxlbmd0aDtzKyspdSs9IkMiK2xbcy0xXSsiLCIrZVtzLTFdKyIgIitjW3MtMV0rIiwiK2Vbc10rIiAiK3Rbc10rIiwiK2Vbc10sdSs9ImwiK3Jbc10rIiwwICI7Zm9yKHUrPSJsMCwiK2ErIiAiLHUrPSJsIC0iK3Jbci5sZW5ndGgtMV0rIiwwICIscz1yLmxlbmd0aC0yO3M+PTA7cy0tKXUrPSJDIitjW3NdKyIsIisoZVtzKzFdK2EpKyIgIitsW3NdKyIsIisoZVtzXSthKSsiICIrKHRbc10rcltzXSkrIiwiKyhlW3NdK2EpLHUrPSJsLSIrcltzXSsiLDAgIjtyZXR1cm4gdSs9IloifWZ1bmN0aW9uIFIodCl7dmFyIGU9dC5kaW1lbnNpb25zLHI9dC5tb2RlbCxuPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KX0pLGE9dC5tb2RlbC5kaW1lbnNpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSl9KSxpPXQubW9kZWwuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pLG89dC5kaW1lbnNpb25zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5kaW1lbnNpb25JbmR9KSxzPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSxsPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSksYz1bXTtmb3IodmFyIHUgaW4gci5wYXRocylyLnBhdGhzLmhhc093blByb3BlcnR5KHUpJiZjLnB1c2goci5wYXRoc1t1XSk7ZnVuY3Rpb24gaCh0KXt2YXIgZT10LmNhdGVnb3J5SW5kcy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gYVtlXVt0XX0pO3JldHVybiBvLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pfWMuc29ydChmdW5jdGlvbihlLHIpe3ZhciBuPWgoZSksYT1oKHIpO3JldHVybiJiYWNrd2FyZCI9PT10LnNvcnRwYXRocyYmKG4ucmV2ZXJzZSgpLGEucmV2ZXJzZSgpKSxuLnB1c2goZS52YWx1ZUluZHNbMF0pLGEucHVzaChyLnZhbHVlSW5kc1swXSksdC5idW5kbGVjb2xvcnMmJihuLnVuc2hpZnQoZS5yYXdDb2xvciksYS51bnNoaWZ0KHIucmF3Q29sb3IpKSxuPGE/LTE6bj5hPzE6MH0pO2Zvcih2YXIgZj1uZXcgQXJyYXkoYy5sZW5ndGgpLHA9ZVswXS5tb2RlbC5jb3VudCxkPWVbMF0uY2F0ZWdvcmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLGc9MDtnPGMubGVuZ3RoO2crKyl7dmFyIHYsbT1jW2ddO3Y9cD4wP2QqKG0uY291bnQvcCk6MDtmb3IodmFyIHkseD1uZXcgQXJyYXkobi5sZW5ndGgpLGI9MDtiPG0uY2F0ZWdvcnlJbmRzLmxlbmd0aDtiKyspe3ZhciBfPW0uY2F0ZWdvcnlJbmRzW2JdLHc9YVtiXVtfXSxrPWlbYl07eFtrXT1uW2tdW3ddLG5ba11bd10rPXY7dmFyIFQ9dC5kaW1lbnNpb25zW2tdLmNhdGVnb3JpZXNbd10sTT1ULmJhbmRzLmxlbmd0aCxBPVQuYmFuZHNbTS0xXTtpZih2b2lkIDA9PT1BfHxtLnJhd0NvbG9yIT09QS5yYXdDb2xvcil7dmFyIFM9dm9pZCAwPT09QT8wOkEueStBLmhlaWdodDtULmJhbmRzLnB1c2goe2tleTpTLGNvbG9yOm0uY29sb3IscmF3Q29sb3I6bS5yYXdDb2xvcixoZWlnaHQ6dix3aWR0aDpULndpZHRoLGNvdW50Om0uY291bnQseTpTLGNhdGVnb3J5Vmlld01vZGVsOlQscGFyY2F0c1ZpZXdNb2RlbDp0fSl9ZWxzZXt2YXIgRT1ULmJhbmRzW00tMV07RS5oZWlnaHQrPXYsRS5jb3VudCs9bS5jb3VudH19eT0iaHNwbGluZSI9PT10LnBhdGhTaGFwZT9EKHMseCxsLHYsLjUpOkQocyx4LGwsdiwwKSxmW2ddPXtrZXk6bS52YWx1ZUluZHNbMF0sbW9kZWw6bSxoZWlnaHQ6dixsZWZ0WHM6cyx0b3BZczp4LGRpbVdpZHRoczpsLHN2Z0Q6eSxwYXJjYXRzVmlld01vZGVsOnR9fXQucGF0aHM9Zn1mdW5jdGlvbiBGKHQpe3ZhciBlPXQubW9kZWwuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJue2Rpc3BsYXlJbmQ6dC5kaXNwbGF5SW5kLGRpbWVuc2lvbkluZDp0LmRpbWVuc2lvbkluZH19KTtlLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXNwbGF5SW5kLWUuZGlzcGxheUluZH0pO3ZhciByPVtdO2Zvcih2YXIgbiBpbiBlKXt2YXIgYT1lW25dLmRpbWVuc2lvbkluZCxpPXQubW9kZWwuZGltZW5zaW9uc1thXTtyLnB1c2goQih0LGkpKX10LmRpbWVuc2lvbnM9cn1mdW5jdGlvbiBCKHQsZSl7dmFyIHIsbj10Lm1vZGVsLmRpbWVuc2lvbnMubGVuZ3RoLGE9ZS5kaXNwbGF5SW5kO3I9NDArKG4+MT8odC53aWR0aC04MC0xNikvKG4tMSk6MCkqYTt2YXIgaSxvLHMsbCxjLHU9W10saD10Lm1vZGVsLm1heENhdHMsZj1lLmNhdGVnb3JpZXMubGVuZ3RoLHA9ZS5jb3VudCxkPXQuaGVpZ2h0LTgqKGgtMSksZz04KihoLWYpLzIsdj1lLmNhdGVnb3JpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybntkaXNwbGF5SW5kOnQuZGlzcGxheUluZCxjYXRlZ29yeUluZDp0LmNhdGVnb3J5SW5kfX0pO2Zvcih2LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXNwbGF5SW5kLWUuZGlzcGxheUluZH0pLGM9MDtjPGY7YysrKWw9dltjXS5jYXRlZ29yeUluZCxvPWUuY2F0ZWdvcmllc1tsXSxpPXA+MD9vLmNvdW50L3AqZDowLHM9e2tleTpvLnZhbHVlSW5kc1swXSxtb2RlbDpvLHdpZHRoOjE2LGhlaWdodDppLHk6bnVsbCE9PW8uZHJhZ1k/by5kcmFnWTpnLGJhbmRzOltdLHBhcmNhdHNWaWV3TW9kZWw6dH0sZz1nK2krOCx1LnB1c2gocyk7cmV0dXJue2tleTplLmRpbWVuc2lvbkluZCx4Om51bGwhPT1lLmRyYWdYP2UuZHJhZ1g6cix5OjAsd2lkdGg6MTYsbW9kZWw6ZSxjYXRlZ29yaWVzOnUscGFyY2F0c1ZpZXdNb2RlbDp0LGRyYWdDYXRlZ29yeURpc3BsYXlJbmQ6bnVsbCxkcmFnRGltZW5zaW9uRGlzcGxheUluZDpudWxsLGluaXRpYWxEcmFnRGltZW5zaW9uRGlzcGxheUluZHM6bnVsbCxpbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHM6bnVsbCxkcmFnSGFzTW92ZWQ6bnVsbCxwb3RlbnRpYWxDbGlja0JhbmQ6bnVsbH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3Uocix0LG4sZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MzAsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MSwiLi4vLi4vcGxvdF9hcGkvcGxvdF9hcGkiOjc1MixkMzoxNjUsdGlueWNvbG9yMjo1MzZ9XSwxMDgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcGFyY2F0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgaT10Ll9mdWxsTGF5b3V0LG89aS5fcGFwZXIscz1pLl9zaXplO24odCxvLGUse3dpZHRoOnMudyxoZWlnaHQ6cy5oLG1hcmdpbjp7dDpzLnQscjpzLnIsYjpzLmIsbDpzLmx9fSxyLGEpfX0seyIuL3BhcmNhdHMiOjEwODB9XSwxMDgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz17ZG9tYWluOm8oe25hbWU6InBhcmNvb3JkcyIsdHJhY2U6ITAsZWRpdFR5cGU6InBsb3QifSksbGFiZWxhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGxhYmVsc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwiYm90dG9tIl0sZGZsdDoidG9wIixlZGl0VHlwZToicGxvdCJ9LGxhYmVsZm9udDppKHtlZGl0VHlwZToicGxvdCJ9KSx0aWNrZm9udDppKHtlZGl0VHlwZToicGxvdCJ9KSxyYW5nZWZvbnQ6aSh7ZWRpdFR5cGU6InBsb3QifSksZGltZW5zaW9uczpsKCJkaW1lbnNpb24iLHtsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LHRpY2t2YWxzOnMoe30sYS50aWNrdmFscyx7ZWRpdFR5cGU6InBsb3QifSksdGlja3RleHQ6cyh7fSxhLnRpY2t0ZXh0LHtlZGl0VHlwZToicGxvdCJ9KSx0aWNrZm9ybWF0OnMoe30sYS50aWNrZm9ybWF0LHtlZGl0VHlwZToicGxvdCJ9KSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In1dLGVkaXRUeXBlOiJwbG90In0sY29uc3RyYWludHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGRpbWVuc2lvbnM6IjEtMiIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifV0sZWRpdFR5cGU6InBsb3QifSxtdWx0aXNlbGVjdDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9KSxsaW5lOnMoe2VkaXRUeXBlOiJjYWxjIn0sbigibGluZSIse2NvbG9yc2NhbGVEZmx0OiJWaXJpZGlzIixhdXRvQ29sb3JEZmx0OiExLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTk5LCIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc1NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NzcsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzkwLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc5MX1dLDEwODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxhPXQoImQzIiksaT10KCIuLi8uLi9saWIvZ3VwIikua2V5RnVuLG89dCgiLi4vLi4vbGliL2d1cCIpLnJlcGVhdCxzPXQoIi4uLy4uL2xpYiIpLnNvcnRlckFzYyxsPW4uYmFyLnNuYXBSYXRpbztmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQqKDEtbCkrZSpsfXZhciB1PW4uYmFyLnNuYXBDbG9zZTtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQqKDEtdSkrZSp1fWZ1bmN0aW9uIGYodCxlLHIsbil7aWYoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZih0Pj1lW3JdWzBdJiZ0PD1lW3JdWzFdKXJldHVybiEwO3JldHVybiExfShyLG4pKXJldHVybiByO3ZhciBhPXQ/LTE6MSxpPTAsbz1lLmxlbmd0aC0xO2lmKGE8MCl7dmFyIHM9aTtpPW8sbz1zfWZvcih2YXIgbD1lW2ldLHU9bCxmPWk7YSpmPGEqbztmKz1hKXt2YXIgcD1mK2EsZD1lW3BdO2lmKGEqcjxhKmgobCxkKSlyZXR1cm4gYyhsLHUpO2lmKGEqcjxhKmR8fHA9PT1vKXJldHVybiBjKGQsbCk7dT1sLGw9ZH19ZnVuY3Rpb24gcCh0KXt0LmF0dHIoIngiLC1uLmJhci5jYXB0dXJlV2lkdGgvMikuYXR0cigid2lkdGgiLG4uYmFyLmNhcHR1cmVXaWR0aCl9ZnVuY3Rpb24gZCh0KXt0LmF0dHIoInZpc2liaWxpdHkiLCJ2aXNpYmxlIikuc3R5bGUoInZpc2liaWxpdHkiLCJ2aXNpYmxlIikuYXR0cigiZmlsbCIsInllbGxvdyIpLmF0dHIoIm9wYWNpdHkiLDApfWZ1bmN0aW9uIGcodCl7aWYoIXQuYnJ1c2guZmlsdGVyU3BlY2lmaWVkKXJldHVybiIwLCIrdC5oZWlnaHQ7Zm9yKHZhciBlLHIsbixhPXYodC5icnVzaC5maWx0ZXIuZ2V0Q29uc29saWRhdGVkKCksdC5oZWlnaHQpLGk9WzBdLG89YS5sZW5ndGg/YVswXVswXTpudWxsLHM9MDtzPGEubGVuZ3RoO3MrKylyPShlPWFbc10pWzFdLWVbMF0saS5wdXNoKG8pLGkucHVzaChyKSwobj1zKzEpPGEubGVuZ3RoJiYobz1hW25dWzBdLWVbMV0pO3JldHVybiBpLnB1c2godC5oZWlnaHQpLGl9ZnVuY3Rpb24gdih0LGUpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsdCplKX0pLnNvcnQocyl9KX1mdW5jdGlvbiBtKCl7YS5zZWxlY3QoZG9jdW1lbnQuYm9keSkuc3R5bGUoImN1cnNvciIsbnVsbCl9ZnVuY3Rpb24geSh0KXt0LmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLGcpfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj1hLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5oaWdobGlnaHQsIC5oaWdobGlnaHQtc2hhZG93Iik7eShlP3IudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4uYmFyLnNuYXBEdXJhdGlvbikuZWFjaCgiZW5kIixlKTpyKX1mdW5jdGlvbiBiKHQsZSl7dmFyIHIsYT10LmJydXNoLGk9TmFOLG89e307aWYoYS5maWx0ZXJTcGVjaWZpZWQpe3ZhciBzPXQuaGVpZ2h0LGw9YS5maWx0ZXIuZ2V0Q29uc29saWRhdGVkKCksYz12KGwscyksdT1OYU4saD1OYU4sZj1OYU47Zm9yKHI9MDtyPD1jLmxlbmd0aDtyKyspe3ZhciBwPWNbcl07aWYocCYmcFswXTw9ZSYmZTw9cFsxXSl7dT1yO2JyZWFrfWlmKGg9cj9yLTE6TmFOLHAmJnBbMF0+ZSl7Zj1yO2JyZWFrfX1pZihpPXUsaXNOYU4oaSkmJihpPWlzTmFOKGgpfHxpc05hTihmKT9pc05hTihoKT9mOmg6ZS1jW2hdWzFdPGNbZl1bMF0tZT9oOmYpLCFpc05hTihpKSl7dmFyIGQ9Y1tpXSxnPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5iYXIuaGFuZGxlSGVpZ2h0O2lmKCEoZT50WzFdK3J8fGU8dFswXS1yKSlyZXR1cm4gZT49LjkqdFsxXSsuMSp0WzBdPyJuIjplPD0uOSp0WzBdKy4xKnRbMV0/InMiOiJucyJ9KGQsZSk7ZyYmKG8uaW50ZXJ2YWw9bFtpXSxvLmludGVydmFsUGl4PWQsby5yZWdpb249Zyl9fWlmKHQub3JkaW5hbCYmIW8ucmVnaW9uKXt2YXIgbT10LnVuaXRUaWNrdmFscyx5PXQudW5pdFRvUGFkZGVkUHguaW52ZXJ0KGUpO2ZvcihyPTA7cjxtLmxlbmd0aDtyKyspe3ZhciB4PVsuMjUqbVtNYXRoLm1heChyLTEsMCldKy43NSptW3JdLC4yNSptW01hdGgubWluKHIrMSxtLmxlbmd0aC0xKV0rLjc1Km1bcl1dO2lmKHk+PXhbMF0mJnk8PXhbMV0pe28uY2xpY2thYmxlT3JkaW5hbFJhbmdlPXg7YnJlYWt9fX1yZXR1cm4gb31mdW5jdGlvbiBfKHQsZSl7YS5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgcj1lLmhlaWdodC1hLm1vdXNlKHQpWzFdLTIqbi52ZXJ0aWNhbFBhZGRpbmcsaT1lLmJydXNoLnN2Z0JydXNoO2kud2FzRHJhZ2dlZD0hMCxpLl9kcmFnZ2luZz0hMCxpLmdyYWJiaW5nQmFyP2kubmV3RXh0ZW50PVtyLWkuZ3JhYlBvaW50LHIraS5iYXJMZW5ndGgtaS5ncmFiUG9pbnRdLm1hcChlLnVuaXRUb1BhZGRlZFB4LmludmVydCk6aS5uZXdFeHRlbnQ9W2kuc3RhcnRFeHRlbnQsZS51bml0VG9QYWRkZWRQeC5pbnZlcnQocildLnNvcnQocyksZS5icnVzaC5maWx0ZXJTcGVjaWZpZWQ9ITAsaS5leHRlbnQ9aS5zdGF5aW5nSW50ZXJ2YWxzLmNvbmNhdChbaS5uZXdFeHRlbnRdKSxpLmJydXNoQ2FsbGJhY2soZSkseCh0LnBhcmVudE5vZGUpfWZ1bmN0aW9uIHcodCxlKXt2YXIgcj1iKGUsZS5oZWlnaHQtYS5tb3VzZSh0KVsxXS0yKm4udmVydGljYWxQYWRkaW5nKSxpPSJjcm9zc2hhaXIiO3IuY2xpY2thYmxlT3JkaW5hbFJhbmdlP2k9InBvaW50ZXIiOnIucmVnaW9uJiYoaT1yLnJlZ2lvbisiLXJlc2l6ZSIpLGEuc2VsZWN0KGRvY3VtZW50LmJvZHkpLnN0eWxlKCJjdXJzb3IiLGkpfWZ1bmN0aW9uIGsodCl7dC5vbigibW91c2Vtb3ZlIixmdW5jdGlvbih0KXthLmV2ZW50LnByZXZlbnREZWZhdWx0KCksdC5wYXJlbnQuaW5CcnVzaERyYWd8fHcodGhpcyx0KX0pLm9uKCJtb3VzZWxlYXZlIixmdW5jdGlvbih0KXt0LnBhcmVudC5pbkJydXNoRHJhZ3x8bSgpfSkuY2FsbChhLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXthLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3ZhciByPWUuaGVpZ2h0LWEubW91c2UodClbMV0tMipuLnZlcnRpY2FsUGFkZGluZyxpPWUudW5pdFRvUGFkZGVkUHguaW52ZXJ0KHIpLG89ZS5icnVzaCxzPWIoZSxyKSxsPXMuaW50ZXJ2YWwsYz1vLnN2Z0JydXNoO2lmKGMud2FzRHJhZ2dlZD0hMSxjLmdyYWJiaW5nQmFyPSJucyI9PT1zLnJlZ2lvbixjLmdyYWJiaW5nQmFyKXt2YXIgdT1sLm1hcChlLnVuaXRUb1BhZGRlZFB4KTtjLmdyYWJQb2ludD1yLXVbMF0tbi52ZXJ0aWNhbFBhZGRpbmcsYy5iYXJMZW5ndGg9dVsxXS11WzBdfWMuY2xpY2thYmxlT3JkaW5hbFJhbmdlPXMuY2xpY2thYmxlT3JkaW5hbFJhbmdlLGMuc3RheWluZ0ludGVydmFscz1lLm11bHRpc2VsZWN0JiZvLmZpbHRlclNwZWNpZmllZD9vLmZpbHRlci5nZXRDb25zb2xpZGF0ZWQoKTpbXSxsJiYoYy5zdGF5aW5nSW50ZXJ2YWxzPWMuc3RheWluZ0ludGVydmFscy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0hPT1sWzBdJiZ0WzFdIT09bFsxXX0pKSxjLnN0YXJ0RXh0ZW50PXMucmVnaW9uP2xbInMiPT09cy5yZWdpb24/MTowXTppLGUucGFyZW50LmluQnJ1c2hEcmFnPSEwLGMuYnJ1c2hTdGFydENhbGxiYWNrKCl9KHRoaXMsdCl9KS5vbigiZHJhZyIsZnVuY3Rpb24odCl7Xyh0aGlzLHQpfSkub24oImRyYWdlbmQiLGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe3ZhciByPWUuYnJ1c2gsbj1yLmZpbHRlcixpPXIuc3ZnQnJ1c2g7aS5fZHJhZ2dpbmd8fCh3KHQsZSksXyh0LGUpLGUuYnJ1c2guc3ZnQnJ1c2gud2FzRHJhZ2dlZD0hMSksaS5fZHJhZ2dpbmc9ITEsYS5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgbz1pLmdyYWJiaW5nQmFyO2lmKGkuZ3JhYmJpbmdCYXI9ITEsaS5ncmFiTG9jYXRpb249dm9pZCAwLGUucGFyZW50LmluQnJ1c2hEcmFnPSExLG0oKSwhaS53YXNEcmFnZ2VkKXJldHVybiBpLndhc0RyYWdnZWQ9dm9pZCAwLGkuY2xpY2thYmxlT3JkaW5hbFJhbmdlP3IuZmlsdGVyU3BlY2lmaWVkJiZlLm11bHRpc2VsZWN0P2kuZXh0ZW50LnB1c2goaS5jbGlja2FibGVPcmRpbmFsUmFuZ2UpOihpLmV4dGVudD1baS5jbGlja2FibGVPcmRpbmFsUmFuZ2VdLHIuZmlsdGVyU3BlY2lmaWVkPSEwKTpvPyhpLmV4dGVudD1pLnN0YXlpbmdJbnRlcnZhbHMsMD09PWkuZXh0ZW50Lmxlbmd0aCYmTShyKSk6TShyKSxpLmJydXNoQ2FsbGJhY2soZSkseCh0LnBhcmVudE5vZGUpLHZvaWQgaS5icnVzaEVuZENhbGxiYWNrKHIuZmlsdGVyU3BlY2lmaWVkP24uZ2V0Q29uc29saWRhdGVkKCk6W10pO3ZhciBzPWZ1bmN0aW9uKCl7bi5zZXQobi5nZXRDb25zb2xpZGF0ZWQoKSl9O2lmKGUub3JkaW5hbCl7dmFyIGw9ZS51bml0VGlja3ZhbHM7bFtsLmxlbmd0aC0xXTxsWzBdJiZsLnJldmVyc2UoKSxpLm5ld0V4dGVudD1bZigwLGwsaS5uZXdFeHRlbnRbMF0saS5zdGF5aW5nSW50ZXJ2YWxzKSxmKDEsbCxpLm5ld0V4dGVudFsxXSxpLnN0YXlpbmdJbnRlcnZhbHMpXTt2YXIgYz1pLm5ld0V4dGVudFsxXT5pLm5ld0V4dGVudFswXTtpLmV4dGVudD1pLnN0YXlpbmdJbnRlcnZhbHMuY29uY2F0KGM/W2kubmV3RXh0ZW50XTpbXSksaS5leHRlbnQubGVuZ3RofHxNKHIpLGkuYnJ1c2hDYWxsYmFjayhlKSxjP3godC5wYXJlbnROb2RlLHMpOihzKCkseCh0LnBhcmVudE5vZGUpKX1lbHNlIHMoKTtpLmJydXNoRW5kQ2FsbGJhY2soci5maWx0ZXJTcGVjaWZpZWQ/bi5nZXRDb25zb2xpZGF0ZWQoKTpbXSl9KHRoaXMsdCl9KSl9ZnVuY3Rpb24gVCh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gTSh0KXt0LmZpbHRlclNwZWNpZmllZD0hMSx0LnN2Z0JydXNoLmV4dGVudD1bWy0xLzAsMS8wXV19ZnVuY3Rpb24gQSh0KXtmb3IodmFyIGUscj10LnNsaWNlKCksbj1bXSxhPXIuc2hpZnQoKTthOyl7Zm9yKGU9YS5zbGljZSgpOyhhPXIuc2hpZnQoKSkmJmFbMF08PWVbMV07KWVbMV09TWF0aC5tYXgoZVsxXSxhWzFdKTtuLnB1c2goZSl9cmV0dXJuIG59ZS5leHBvcnRzPXttYWtlQnJ1c2g6ZnVuY3Rpb24odCxlLHIsbixhLGkpe3ZhciBvLGw9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9W107cmV0dXJue3NldDpmdW5jdGlvbihuKXsxPT09KHI9bi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKS5zb3J0KHMpfSkuc29ydChUKSkubGVuZ3RoJiZyWzBdWzBdPT09LTEvMCYmclswXVsxXT09PTEvMCYmKHI9W1swLC0xXV0pLHQ9QShyKSxlPXIucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW01hdGgubWluKHRbMF0sZVswXSksTWF0aC5tYXgodFsxXSxlWzFdKV19LFsxLzAsLTEvMF0pfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxnZXRDb25zb2xpZGF0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIGV9fX0oKTtyZXR1cm4gbC5zZXQocikse2ZpbHRlcjpsLGZpbHRlclNwZWNpZmllZDplLHN2Z0JydXNoOntleHRlbnQ6W10sYnJ1c2hTdGFydENhbGxiYWNrOm4sYnJ1c2hDYWxsYmFjazoobz1hLGZ1bmN0aW9uKHQpe3ZhciBlPXQuYnJ1c2gscj1mdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdCcnVzaC5leHRlbnQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCl9KX0oZSkuc2xpY2UoKTtlLmZpbHRlci5zZXQociksbygpfSksYnJ1c2hFbmRDYWxsYmFjazppfX19LGVuc3VyZUF4aXNCcnVzaDpmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5heGlzQnJ1c2gpLmRhdGEobyxpKTtlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmF4aXNCcnVzaCwhMCksZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi5iYWNrZ3JvdW5kIikuZGF0YShvKTtlLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgiYmFja2dyb3VuZCIsITApLmNhbGwocCkuY2FsbChkKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAgIituLnZlcnRpY2FsUGFkZGluZysiKSIpLGUuY2FsbChrKS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodC1uLnZlcnRpY2FsUGFkZGluZ30pO3ZhciByPXQuc2VsZWN0QWxsKCIuaGlnaGxpZ2h0LXNoYWRvdyIpLmRhdGEobyk7ci5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImhpZ2hsaWdodC1zaGFkb3ciLCEwKS5hdHRyKCJ4Iiwtbi5iYXIud2lkdGgvMikuYXR0cigic3Ryb2tlLXdpZHRoIixuLmJhci53aWR0aCtuLmJhci5zdHJva2VXaWR0aCkuYXR0cigic3Ryb2tlIixuLmJhci5zdHJva2VDb2xvcikuYXR0cigib3BhY2l0eSIsbi5iYXIuc3Ryb2tlT3BhY2l0eSkuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJidXR0Iiksci5hdHRyKCJ5MSIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkuY2FsbCh5KTt2YXIgYT10LnNlbGVjdEFsbCgiLmhpZ2hsaWdodCIpLmRhdGEobyk7YS5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImhpZ2hsaWdodCIsITApLmF0dHIoIngiLC1uLmJhci53aWR0aC8yKS5hdHRyKCJzdHJva2Utd2lkdGgiLG4uYmFyLndpZHRoLW4uYmFyLnN0cm9rZVdpZHRoKS5hdHRyKCJzdHJva2UiLG4uYmFyLmZpbGxDb2xvcikuYXR0cigib3BhY2l0eSIsbi5iYXIuZmlsbE9wYWNpdHkpLmF0dHIoInN0cm9rZS1saW5lY2FwIiwiYnV0dCIpLGEuYXR0cigieTEiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pLmNhbGwoeSl9KGUpfSxjbGVhblJhbmdlczpmdW5jdGlvbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodFswXSk/KHQ9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc29ydChzKX0pLHQ9ZS5tdWx0aXNlbGVjdD9BKHQuc29ydChUKSk6W3RbMF1dKTp0PVt0LnNvcnQocyldLGUudGlja3ZhbHMpe3ZhciByPWUudGlja3ZhbHMuc2xpY2UoKS5zb3J0KHMpO2lmKCEodD10Lm1hcChmdW5jdGlvbih0KXt2YXIgZT1bZigwLHIsdFswXSxbXSksZigxLHIsdFsxXSxbXSldO2lmKGVbMV0+ZVswXSlyZXR1cm4gZX0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5sZW5ndGgpcmV0dXJufXJldHVybiB0Lmxlbmd0aD4xP3Q6dFswXX19fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvZ3VwIjo3MTUsIi4vY29uc3RhbnRzIjoxMDg2LGQzOjE2NX1dLDEwODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsaT10KCIuL3Bsb3QiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIik7ci5uYW1lPSJwYXJjb29yZHMiLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1hKHQuY2FsY2RhdGEsInBhcmNvb3JkcyIpWzBdO2UubGVuZ3RoJiZpKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9bi5faGFzJiZuLl9oYXMoInBhcmNvb3JkcyIpLGk9ZS5faGFzJiZlLl9oYXMoInBhcmNvb3JkcyIpO2EmJiFpJiYobi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIucGFyY29vcmRzIikucmVtb3ZlKCksbi5fZ2xpbWFnZXMuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLHI9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO3IuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1yLnNpemUoKS0xfSkuc2VsZWN0QWxsKCIuZ2wtY2FudmFzLWNvbnRleHQsIC5nbC1jYW52YXMtZm9jdXMiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoImltYWdlL3BuZyIpO2UuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpvLnN2ZywieGxpbms6aHJlZiI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIix4OjAseTowLHdpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSl9KSx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe24uc2VsZWN0QWxsKCIjZmlsdGVyQmFyUGF0dGVybiIpLmF0dHIoImlkIiwiZmlsdGVyQmFyUGF0dGVybiIpfSw2MCl9fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo2OTQsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4MDAsIi4vcGxvdCI6MTA5MyxkMzoxNjV9XSwxMDg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxpPXQoIi4uLy4uL2xpYi9ndXAiKS53cmFwO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG87cmV0dXJuIGEuaGFzQ29sb3JzY2FsZShlLCJsaW5lIikmJm4oZS5saW5lLmNvbG9yKT8ocj1lLmxpbmUuY29sb3Isbz1hLmV4dHJhY3RPcHRzKGUubGluZSkuY29sb3JzY2FsZSxhLmNhbGModCxlLHt2YWxzOnIsY29udGFpbmVyU3RyOiJsaW5lIixjTGV0dGVyOiJjIn0pKToocj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09LjU7cmV0dXJuIGV9KGUuX2xlbmd0aCksbz1bWzAsZS5saW5lLmNvbG9yXSxbMSxlLmxpbmUuY29sb3JdXSksaSh7bGluZUNvbG9yOnIsY3NjYWxlOm99KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MDQsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvZ3VwIjo3MTV9XSwxMDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bWF4RGltZW5zaW9uQ291bnQ6NjAsb3ZlcmRyYWc6NDUsdmVydGljYWxQYWRkaW5nOjIsdGlja0Rpc3RhbmNlOjUwLGNhbnZhc1BpeGVsUmF0aW86MSxibG9ja0xpbmVDb3VudDo1ZTMsbGF5ZXJzOlsiY29udGV4dExpbmVMYXllciIsImZvY3VzTGluZUxheWVyIiwicGlja0xpbmVMYXllciJdLGF4aXNUaXRsZU9mZnNldDoyOCxheGlzRXh0ZW50T2Zmc2V0OjEwLGRlc2VsZWN0ZWRMaW5lQ29sb3I6IiM3NzciLGJhcjp7d2lkdGg6NCxjYXB0dXJlV2lkdGg6MTAsZmlsbENvbG9yOiJtYWdlbnRhIixmaWxsT3BhY2l0eToxLHNuYXBEdXJhdGlvbjoxNTAsc25hcFJhdGlvOi4yNSxzbmFwQ2xvc2U6LjAxLHN0cm9rZUNvbG9yOiJ3aGl0ZSIsc3Ryb2tlT3BhY2l0eToxLHN0cm9rZVdpZHRoOjEsaGFuZGxlSGVpZ2h0OjgsaGFuZGxlT3BhY2l0eToxLGhhbmRsZU92ZXJsYXA6MH0sY246e2F4aXNFeHRlbnRUZXh0OiJheGlzLWV4dGVudC10ZXh0IixwYXJjb29yZHNMaW5lTGF5ZXJzOiJwYXJjb29yZHMtbGluZS1sYXllcnMiLHBhcmNvb3Jkc0xpbmVMYXllcjoicGFyY29vcmRzLWxpbmVzIixwYXJjb29yZHM6InBhcmNvb3JkcyIscGFyY29vcmRzQ29udHJvbFZpZXc6InBhcmNvb3Jkcy1jb250cm9sLXZpZXciLHlBeGlzOiJ5LWF4aXMiLGF4aXNPdmVybGF5czoiYXhpcy1vdmVybGF5cyIsYXhpczoiYXhpcyIsYXhpc0hlYWRpbmc6ImF4aXMtaGVhZGluZyIsYXhpc1RpdGxlOiJheGlzLXRpdGxlIixheGlzRXh0ZW50OiJheGlzLWV4dGVudCIsYXhpc0V4dGVudFRvcDoiYXhpcy1leHRlbnQtdG9wIixheGlzRXh0ZW50VG9wVGV4dDoiYXhpcy1leHRlbnQtdG9wLXRleHQiLGF4aXNFeHRlbnRCb3R0b206ImF4aXMtZXh0ZW50LWJvdHRvbSIsYXhpc0V4dGVudEJvdHRvbVRleHQ6ImF4aXMtZXh0ZW50LWJvdHRvbS10ZXh0IixheGlzQnJ1c2g6ImF4aXMtYnJ1c2gifSxpZDp7ZmlsdGVyQmFyUGF0dGVybjoiZmlsdGVyLWJhci1wYXR0ZXJuIn19fSx7fV0sMTA4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHMscz10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYz10KCIuL2F0dHJpYnV0ZXMiKSx1PXQoIi4vYXhpc2JydXNoIiksaD10KCIuL2NvbnN0YW50cyIpLm1heERpbWVuc2lvbkNvdW50LGY9dCgiLi9tZXJnZV9sZW5ndGgiKTtmdW5jdGlvbiBwKHQsZSxyLGEpe2Z1bmN0aW9uIGkocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMuZGltZW5zaW9ucyxyLGEpfXZhciBvPWkoInZhbHVlcyIpLHM9aSgidmlzaWJsZSIpO2lmKG8mJm8ubGVuZ3RofHwocz1lLnZpc2libGU9ITEpLHMpe2koImxhYmVsIiksaSgidGlja3ZhbHMiKSxpKCJ0aWNrdGV4dCIpLGkoInRpY2tmb3JtYXQiKTt2YXIgaD1pKCJyYW5nZSIpO2UuX2F4PXtfaWQ6InkiLHR5cGU6ImxpbmVhciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIixyYW5nZTpofSxsLnNldENvbnZlcnQoZS5fYXgsYS5sYXlvdXQpLGkoIm11bHRpc2VsZWN0Iik7dmFyIGY9aSgiY29uc3RyYWludHJhbmdlIik7ZiYmKGUuY29uc3RyYWludHJhbmdlPXUuY2xlYW5SYW5nZXMoZixlKSl9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiB1KHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsYSl9dmFyIGQ9dC5kaW1lbnNpb25zO0FycmF5LmlzQXJyYXkoZCkmJmQubGVuZ3RoPmgmJihuLmxvZygicGFyY29vcmRzIHRyYWNlcyBzdXBwb3J0IHVwIHRvICIraCsiIGRpbWVuc2lvbnMgYXQgdGhlIG1vbWVudCIpLGQuc3BsaWNlKGgpKTt2YXIgZz1zKHQsZSx7bmFtZToiZGltZW5zaW9ucyIsbGF5b3V0OmwsaGFuZGxlSXRlbURlZmF1bHRzOnB9KSx2PWZ1bmN0aW9uKHQsZSxyLG8scyl7dmFyIGw9cygibGluZS5jb2xvciIscik7aWYoYSh0LCJsaW5lIikmJm4uaXNBcnJheU9yVHlwZWRBcnJheShsKSl7aWYobC5sZW5ndGgpcmV0dXJuIHMoImxpbmUuY29sb3JzY2FsZSIpLGkodCxlLG8scyx7cHJlZml4OiJsaW5lLiIsY0xldHRlcjoiYyJ9KSxsLmxlbmd0aDtlLmxpbmUuY29sb3I9cn1yZXR1cm4gMS8wfSh0LGUscixsLHUpO28oZSxsLHUpLEFycmF5LmlzQXJyYXkoZykmJmcubGVuZ3RofHwoZS52aXNpYmxlPSExKSxmKGUsZywidmFsdWVzIix2KTt2YXIgbT17ZmFtaWx5OmwuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGwuZm9udC5zaXplLzEuMiksY29sb3I6bC5mb250LmNvbG9yfTtuLmNvZXJjZUZvbnQodSwibGFiZWxmb250IixtKSxuLmNvZXJjZUZvbnQodSwidGlja2ZvbnQiLG0pLG4uY29lcmNlRm9udCh1LCJyYW5nZWZvbnQiLG0pLHUoImxhYmVsYW5nbGUiKSx1KCJsYWJlbHNpZGUiKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo2MDMsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc2MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi4vLi4vcGxvdHMvZG9tYWluIjo3OTAsIi4vYXR0cmlidXRlcyI6MTA4MiwiLi9heGlzYnJ1c2giOjEwODMsIi4vY29uc3RhbnRzIjoxMDg2LCIuL21lcmdlX2xlbmd0aCI6MTA5MX1dLDEwODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNUeXBlZEFycmF5O3IuY29udmVydFR5cGVkQXJyYXk9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCk/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCk6dH0sci5pc09yZGluYWw9ZnVuY3Rpb24odCl7cmV0dXJuISF0LnRpY2t2YWxzfSxyLmlzVmlzaWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlfHwhKCJ2aXNpYmxlImluIHQpfX0seyIuLi8uLi9saWIiOjcxN31dLDEwODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksY29sb3JiYXI6e2NvbnRhaW5lcjoibGluZSIsbWluOiJjbWluIixtYXg6ImNtYXgifSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToicGFyY29vcmRzIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6WyJnbCIsInJlZ2wiLCJub09wYWNpdHkiLCJub0hvdmVyIl0sbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjoxMDgyLCIuL2Jhc2VfcGxvdCI6MTA4NCwiLi9jYWxjIjoxMDg1LCIuL2RlZmF1bHRzIjoxMDg3LCIuL3Bsb3QiOjEwOTN9XSwxMDkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxhPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG5hdHRyaWJ1dGUgdmVjNCBwMDFfMDQsIHAwNV8wOCwgcDA5XzEyLCBwMTNfMTYsXG4gICAgICAgICAgICAgICBwMTdfMjAsIHAyMV8yNCwgcDI1XzI4LCBwMjlfMzIsXG4gICAgICAgICAgICAgICBwMzNfMzYsIHAzN180MCwgcDQxXzQ0LCBwNDVfNDgsXG4gICAgICAgICAgICAgICBwNDlfNTIsIHA1M181NiwgcDU3XzYwLCBjb2xvcnM7XG5cbnVuaWZvcm0gbWF0NCBkaW0wQSwgZGltMUEsIGRpbTBCLCBkaW0xQiwgZGltMEMsIGRpbTFDLCBkaW0wRCwgZGltMUQsXG4gICAgICAgICAgICAgbG9BLCBoaUEsIGxvQiwgaGlCLCBsb0MsIGhpQywgbG9ELCBoaUQ7XG5cbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uLCB2aWV3Qm94UG9zLCB2aWV3Qm94U2l6ZTtcbnVuaWZvcm0gc2FtcGxlcjJEIG1hc2ssIHBhbGV0dGU7XG51bmlmb3JtIGZsb2F0IG1hc2tIZWlnaHQ7XG51bmlmb3JtIGZsb2F0IGRyd0xheWVyOyAvLyAwOiBjb250ZXh0LCAxOiBmb2N1cywgMjogcGlja1xudW5pZm9ybSB2ZWM0IGNvbnRleHRDb2xvcjtcblxuYm9vbCBpc1BpY2sgICAgPSAoZHJ3TGF5ZXIgPiAxLjUpO1xuYm9vbCBpc0NvbnRleHQgPSAoZHJ3TGF5ZXIgPCAwLjUpO1xuXG5jb25zdCB2ZWM0IFpFUk9TID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuY29uc3QgdmVjNCBVTklUUyA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcblxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XG4gICAgcmV0dXJuIGRvdChtYXRyaXhDb21wTXVsdChwLCB2KSAqIFVOSVRTLCBVTklUUyk7XG59XG5cbmZsb2F0IGF4aXNZKGZsb2F0IHJhdGlvLCBtYXQ0IEEsIG1hdDQgQiwgbWF0NCBDLCBtYXQ0IEQpIHtcbiAgICBmbG9hdCB5MSA9IHZhbChBLCBkaW0wQSkgKyB2YWwoQiwgZGltMEIpICsgdmFsKEMsIGRpbTBDKSArIHZhbChELCBkaW0wRCk7XG4gICAgZmxvYXQgeTIgPSB2YWwoQSwgZGltMUEpICsgdmFsKEIsIGRpbTFCKSArIHZhbChDLCBkaW0xQykgKyB2YWwoRCwgZGltMUQpO1xuICAgIHJldHVybiB5MSAqICgxLjAgLSByYXRpbykgKyB5MiAqIHJhdGlvO1xufVxuXG5pbnQgaU1vZChpbnQgYSwgaW50IGIpIHtcbiAgICByZXR1cm4gYSAtIGIgKiAoYSAvIGIpO1xufVxuXG5ib29sIGZPdXRzaWRlKGZsb2F0IHAsIGZsb2F0IGxvLCBmbG9hdCBoaSkge1xuICAgIHJldHVybiAobG8gPCBoaSkgJiYgKGxvID4gcCB8fCBwID4gaGkpO1xufVxuXG5ib29sIHZPdXRzaWRlKHZlYzQgcCwgdmVjNCBsbywgdmVjNCBoaSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIGZPdXRzaWRlKHBbMF0sIGxvWzBdLCBoaVswXSkgfHxcbiAgICAgICAgZk91dHNpZGUocFsxXSwgbG9bMV0sIGhpWzFdKSB8fFxuICAgICAgICBmT3V0c2lkZShwWzJdLCBsb1syXSwgaGlbMl0pIHx8XG4gICAgICAgIGZPdXRzaWRlKHBbM10sIGxvWzNdLCBoaVszXSlcbiAgICApO1xufVxuXG5ib29sIG1PdXRzaWRlKG1hdDQgcCwgbWF0NCBsbywgbWF0NCBoaSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIHZPdXRzaWRlKHBbMF0sIGxvWzBdLCBoaVswXSkgfHxcbiAgICAgICAgdk91dHNpZGUocFsxXSwgbG9bMV0sIGhpWzFdKSB8fFxuICAgICAgICB2T3V0c2lkZShwWzJdLCBsb1syXSwgaGlbMl0pIHx8XG4gICAgICAgIHZPdXRzaWRlKHBbM10sIGxvWzNdLCBoaVszXSlcbiAgICApO1xufVxuXG5ib29sIG91dHNpZGVCb3VuZGluZ0JveChtYXQ0IEEsIG1hdDQgQiwgbWF0NCBDLCBtYXQ0IEQpIHtcbiAgICByZXR1cm4gbU91dHNpZGUoQSwgbG9BLCBoaUEpIHx8XG4gICAgICAgICAgIG1PdXRzaWRlKEIsIGxvQiwgaGlCKSB8fFxuICAgICAgICAgICBtT3V0c2lkZShDLCBsb0MsIGhpQykgfHxcbiAgICAgICAgICAgbU91dHNpZGUoRCwgbG9ELCBoaUQpO1xufVxuXG5ib29sIG91dHNpZGVSYXN0ZXJNYXNrKG1hdDQgQSwgbWF0NCBCLCBtYXQ0IEMsIG1hdDQgRCkge1xuICAgIG1hdDQgcG50c1s0XTtcbiAgICBwbnRzWzBdID0gQTtcbiAgICBwbnRzWzFdID0gQjtcbiAgICBwbnRzWzJdID0gQztcbiAgICBwbnRzWzNdID0gRDtcblxuICAgIGZvcihpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IDQ7ICsraikge1xuICAgICAgICAgICAgZm9yKGludCBrID0gMDsgayA8IDQ7ICsraykge1xuICAgICAgICAgICAgICAgIGlmKDAgPT0gaU1vZChcbiAgICAgICAgICAgICAgICAgICAgaW50KDI1NS4wICogdGV4dHVyZTJEKG1hc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZWMyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdChpICogMiArIGogLyAyKSArIDAuNSkgLyA4LjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBudHNbaV1bal1ba10gKiAobWFza0hlaWdodCAtIDEuMCkgKyAxLjApIC8gbWFza0hlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgKSlbM11cbiAgICAgICAgICAgICAgICAgICAgKSAvIGludChwb3coMi4wLCBmbG9hdChpTW9kKGogKiA0ICsgaywgOCkpKSksXG4gICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICApKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZlYzQgcG9zaXRpb24oYm9vbCBpc0NvbnRleHQsIGZsb2F0IHYsIG1hdDQgQSwgbWF0NCBCLCBtYXQ0IEMsIG1hdDQgRCkge1xuICAgIGZsb2F0IHggPSAwLjUgKiBzaWduKHYpICsgMC41O1xuICAgIGZsb2F0IHkgPSBheGlzWSh4LCBBLCBCLCBDLCBEKTtcbiAgICBmbG9hdCB6ID0gMS4wIC0gYWJzKHYpO1xuXG4gICAgeiArPSBpc0NvbnRleHQgPyAwLjAgOiAyLjAgKiBmbG9hdChcbiAgICAgICAgb3V0c2lkZUJvdW5kaW5nQm94KEEsIEIsIEMsIEQpIHx8XG4gICAgICAgIG91dHNpZGVSYXN0ZXJNYXNrKEEsIEIsIEMsIEQpXG4gICAgKTtcblxuICAgIHJldHVybiB2ZWM0KFxuICAgICAgICAyLjAgKiAodmVjMih4LCB5KSAqIHZpZXdCb3hTaXplICsgdmlld0JveFBvcykgLyByZXNvbHV0aW9uIC0gMS4wLFxuICAgICAgICB6LFxuICAgICAgICAxLjBcbiAgICApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gICAgbWF0NCBBID0gbWF0NChwMDFfMDQsIHAwNV8wOCwgcDA5XzEyLCBwMTNfMTYpO1xuICAgIG1hdDQgQiA9IG1hdDQocDE3XzIwLCBwMjFfMjQsIHAyNV8yOCwgcDI5XzMyKTtcbiAgICBtYXQ0IEMgPSBtYXQ0KHAzM18zNiwgcDM3XzQwLCBwNDFfNDQsIHA0NV80OCk7XG4gICAgbWF0NCBEID0gbWF0NChwNDlfNTIsIHA1M181NiwgcDU3XzYwLCBaRVJPUyk7XG5cbiAgICBmbG9hdCB2ID0gY29sb3JzWzNdO1xuXG4gICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbihpc0NvbnRleHQsIHYsIEEsIEIsIEMsIEQpO1xuXG4gICAgZnJhZ0NvbG9yID1cbiAgICAgICAgaXNDb250ZXh0ID8gdmVjNChjb250ZXh0Q29sb3IpIDpcbiAgICAgICAgaXNQaWNrID8gdmVjNChjb2xvcnMucmdiLCAxLjApIDogdGV4dHVyZTJEKHBhbGV0dGUsIHZlYzIoYWJzKHYpLCAwLjUpKTtcbn1cbiJdKSxpPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xufVxuIl0pLG89dCgiLi9jb25zdGFudHMiKS5tYXhEaW1lbnNpb25Db3VudCxzPXQoIi4uLy4uL2xpYiIpLGw9MWUtNixjPTIwNDgsdT1uZXcgVWludDhBcnJheSg0KSxoPW5ldyBVaW50OEFycmF5KDQpLGY9e3NoYXBlOlsyNTYsMV0sZm9ybWF0OiJyZ2JhIix0eXBlOiJ1aW50OCIsbWFnOiJuZWFyZXN0IixtaW46Im5lYXJlc3QifTtmdW5jdGlvbiBwKHQsZSxyLG4sYSl7dmFyIGk9dC5fZ2w7aS5lbmFibGUoaS5TQ0lTU09SX1RFU1QpLGkuc2Npc3NvcihlLHIsbixhKSx0LmNsZWFyKHtjb2xvcjpbMCwwLDAsMF0sZGVwdGg6MX0pfWZ1bmN0aW9uIGQodCxlLHIsbixhLGkpe3ZhciBvPWkua2V5O3IuZHJhd0NvbXBsZXRlZHx8KCFmdW5jdGlvbih0KXt0LnJlYWQoe3g6MCx5OjAsd2lkdGg6MSxoZWlnaHQ6MSxkYXRhOnV9KX0odCksci5kcmF3Q29tcGxldGVkPSEwKSxmdW5jdGlvbiBzKGwpe3ZhciBjPU1hdGgubWluKG4sYS1sKm4pOzA9PT1sJiYod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHIuY3VycmVudFJhZnNbb10pLGRlbGV0ZSByLmN1cnJlbnRSYWZzW29dLHAodCxpLnNjaXNzb3JYLGkuc2Npc3NvclksaS5zY2lzc29yV2lkdGgsaS52aWV3Qm94U2l6ZVsxXSkpLHIuY2xlYXJPbmx5fHwoaS5jb3VudD0yKmMsaS5vZmZzZXQ9MipsKm4sZShpKSxsKm4rYzxhJiYoci5jdXJyZW50UmFmc1tvXT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cyhsKzEpfSkpLHIuZHJhd0NvbXBsZXRlZD0hMSl9KDApfWZ1bmN0aW9uIGcodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KDI1Niksbj0wO248MjU2O24rKylyW25dPXQobi8yNTUpLmNvbmNhdChlKTtyZXR1cm4gcn1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuKHQ+Pj44KmUpJTI1Ni8yNTV9ZnVuY3Rpb24gbSh0LGUscil7Zm9yKHZhciBuPW5ldyBBcnJheSg4KmUpLGE9MCxpPTA7aTxlO2krKylmb3IodmFyIG89MDtvPDI7bysrKWZvcih2YXIgcz0wO3M8NDtzKyspe3ZhciBsPTQqdCtzLGM9cls2NCppK2xdOzYzPT09bCYmMD09PW8mJihjKj0tMSksblthKytdPWN9cmV0dXJuIG59ZnVuY3Rpb24geSh0KXt2YXIgZT0iMCIrdDtyZXR1cm4gZS5zdWJzdHIoZS5sZW5ndGgtMil9ZnVuY3Rpb24geCh0KXtyZXR1cm4gdDxvPyJwIit5KHQrMSkrIl8iK3kodCs0KToiY29sb3JzIn1mdW5jdGlvbiBiKHQsZSxyLG4sYSxpLG8sbCxjLHUsaCxmLHApe2Zvcih2YXIgZD1bW10sW11dLGc9MDtnPDY0O2crKylkWzBdW2ddPWc9PT1hPzE6MCxkWzFdW2ddPWc9PT1pPzE6MDt2YXIgdj10LmxpbmVzLmNhbnZhc092ZXJkcmFnLG09dC5kb21haW4seT10LmNhbnZhc1dpZHRoLHg9dC5jYW52YXNIZWlnaHQsYj10LmRlc2VsZWN0ZWRMaW5lcy5jb2xvcjtyZXR1cm4gcy5leHRlbmRGbGF0KHtrZXk6aCxyZXNvbHV0aW9uOlt5LHhdLHZpZXdCb3hQb3M6W28rdixsXSx2aWV3Qm94U2l6ZTpbYyx1XSxpMDphLGkxOmksZGltMEE6ZFswXS5zbGljZSgwLDE2KSxkaW0wQjpkWzBdLnNsaWNlKDE2LDMyKSxkaW0wQzpkWzBdLnNsaWNlKDMyLDQ4KSxkaW0wRDpkWzBdLnNsaWNlKDQ4LDY0KSxkaW0xQTpkWzFdLnNsaWNlKDAsMTYpLGRpbTFCOmRbMV0uc2xpY2UoMTYsMzIpLGRpbTFDOmRbMV0uc2xpY2UoMzIsNDgpLGRpbTFEOmRbMV0uc2xpY2UoNDgsNjQpLGRyd0xheWVyOmYsY29udGV4dENvbG9yOltiWzBdLzI1NSxiWzFdLzI1NSxiWzJdLzI1NSxiWzNdPDE/YlszXTpNYXRoLm1heCgxLzI1NSxNYXRoLnBvdygxL3QubGluZXMuY29sb3IubGVuZ3RoLDEvMykpXSxzY2lzc29yWDoobj09PWU/MDpvK3YpKyh0LnBhZC5sLXYpK3QubGF5b3V0V2lkdGgqbS54WzBdLHNjaXNzb3JXaWR0aDoobj09PXI/eS1vK3Y6YysuNSkrKG49PT1lP28rdjowKSxzY2lzc29yWTpsK3QucGFkLmIrdC5sYXlvdXRIZWlnaHQqbS55WzBdLHNjaXNzb3JIZWlnaHQ6dSx2aWV3cG9ydFg6dC5wYWQubC12K3QubGF5b3V0V2lkdGgqbS54WzBdLHZpZXdwb3J0WTp0LnBhZC5iK3QubGF5b3V0SGVpZ2h0Km0ueVswXSx2aWV3cG9ydFdpZHRoOnksdmlld3BvcnRIZWlnaHQ6eH0scCl9ZnVuY3Rpb24gXyh0KXt2YXIgZT1jLTEscj1NYXRoLm1heCgwLE1hdGguZmxvb3IodFswXSplKSwwKSxuPU1hdGgubWluKGUsTWF0aC5jZWlsKHRbMV0qZSksZSk7cmV0dXJuW01hdGgubWluKHIsbiksTWF0aC5tYXgocixuKV19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbix1LHksdyxrPWUuY29udGV4dCxUPWUucGljayxNPWUucmVnbCxBPXtjdXJyZW50UmFmczp7fSxkcmF3Q29tcGxldGVkOiEwLGNsZWFyT25seTohMX0sUz1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj0wO3I8PW87cis9NCllW3gocildPXQuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9KTtyZXR1cm4gZX0oTSksRT1NLnRleHR1cmUoZiksTD1bXTtQKGUpO3ZhciBDPU0oe3Byb2ZpbGU6ITEsYmxlbmQ6e2VuYWJsZTprLGZ1bmM6e3NyY1JHQjoic3JjIGFscGhhIixkc3RSR0I6Im9uZSBtaW51cyBzcmMgYWxwaGEiLHNyY0FscGhhOjEsZHN0QWxwaGE6MX0sZXF1YXRpb246e3JnYjoiYWRkIixhbHBoYToiYWRkIn0sY29sb3I6WzAsMCwwLDBdfSxkZXB0aDp7ZW5hYmxlOiFrLG1hc2s6ITAsZnVuYzoibGVzcyIscmFuZ2U6WzAsMV19LGN1bGw6e2VuYWJsZTohMCxmYWNlOiJiYWNrIn0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp7eDpNLnByb3AoInNjaXNzb3JYIikseTpNLnByb3AoInNjaXNzb3JZIiksd2lkdGg6TS5wcm9wKCJzY2lzc29yV2lkdGgiKSxoZWlnaHQ6TS5wcm9wKCJzY2lzc29ySGVpZ2h0Iil9fSx2aWV3cG9ydDp7eDpNLnByb3AoInZpZXdwb3J0WCIpLHk6TS5wcm9wKCJ2aWV3cG9ydFkiKSx3aWR0aDpNLnByb3AoInZpZXdwb3J0V2lkdGgiKSxoZWlnaHQ6TS5wcm9wKCJ2aWV3cG9ydEhlaWdodCIpfSxkaXRoZXI6ITEsdmVydDphLGZyYWc6aSxwcmltaXRpdmU6ImxpbmVzIixsaW5lV2lkdGg6MSxhdHRyaWJ1dGVzOlMsdW5pZm9ybXM6e3Jlc29sdXRpb246TS5wcm9wKCJyZXNvbHV0aW9uIiksdmlld0JveFBvczpNLnByb3AoInZpZXdCb3hQb3MiKSx2aWV3Qm94U2l6ZTpNLnByb3AoInZpZXdCb3hTaXplIiksZGltMEE6TS5wcm9wKCJkaW0wQSIpLGRpbTFBOk0ucHJvcCgiZGltMUEiKSxkaW0wQjpNLnByb3AoImRpbTBCIiksZGltMUI6TS5wcm9wKCJkaW0xQiIpLGRpbTBDOk0ucHJvcCgiZGltMEMiKSxkaW0xQzpNLnByb3AoImRpbTFDIiksZGltMEQ6TS5wcm9wKCJkaW0wRCIpLGRpbTFEOk0ucHJvcCgiZGltMUQiKSxsb0E6TS5wcm9wKCJsb0EiKSxoaUE6TS5wcm9wKCJoaUEiKSxsb0I6TS5wcm9wKCJsb0IiKSxoaUI6TS5wcm9wKCJoaUIiKSxsb0M6TS5wcm9wKCJsb0MiKSxoaUM6TS5wcm9wKCJoaUMiKSxsb0Q6TS5wcm9wKCJsb0QiKSxoaUQ6TS5wcm9wKCJoaUQiKSxwYWxldHRlOkUsY29udGV4dENvbG9yOk0ucHJvcCgiY29udGV4dENvbG9yIiksbWFzazpNLnByb3AoIm1hc2tUZXh0dXJlIiksZHJ3TGF5ZXI6TS5wcm9wKCJkcndMYXllciIpLG1hc2tIZWlnaHQ6TS5wcm9wKCJtYXNrSGVpZ2h0Iil9LG9mZnNldDpNLnByb3AoIm9mZnNldCIpLGNvdW50Ok0ucHJvcCgiY291bnQiKX0pO2Z1bmN0aW9uIFAodCl7cj10Lm1vZGVsLG49dC52aWV3TW9kZWwsdT1uLmRpbWVuc2lvbnMuc2xpY2UoKSx5PXVbMF0/dVswXS52YWx1ZXMubGVuZ3RoOjA7dmFyIGU9ci5saW5lcyxhPVQ/ZS5jb2xvci5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gci9lLmNvbG9yLmxlbmd0aH0pOmUuY29sb3IsaT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGE9bmV3IEFycmF5KHQqKG8rNCkpLGk9MCxzPTA7czx0O3MrKyl7Zm9yKHZhciBjPTA7YzxvO2MrKylhW2krK109YzxlLmxlbmd0aD9lW2NdLnBhZGRlZFVuaXRWYWx1ZXNbc106LjU7YVtpKytdPXYocywyKSxhW2krK109dihzLDEpLGFbaSsrXT12KHMsMCksYVtpKytdPShuPXJbc10sTWF0aC5tYXgobCxNYXRoLm1pbigxLWwsbikpKX1yZXR1cm4gYX0oeSx1LGEpOyFmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjw9bztuKz00KXRbeChuKV0obShuLzQsZSxyKSl9KFMseSxpKSxrfHxUfHwoRT1NLnRleHR1cmUocy5leHRlbmRGbGF0KHtkYXRhOmcoci51bml0VG9Db2xvciwyNTUpfSxmKSkpfXJldHVybntyZW5kZXI6ZnVuY3Rpb24odCxlLG4pe3ZhciBhLGksbyxzPXQubGVuZ3RoLGw9MS8wLGg9LTEvMDtmb3IoYT0wO2E8czthKyspdFthXS5kaW0wLmNhbnZhc1g8bCYmKGw9dFthXS5kaW0wLmNhbnZhc1gsaT1hKSx0W2FdLmRpbTEuY2FudmFzWD5oJiYoaD10W2FdLmRpbTEuY2FudmFzWCxvPWEpOzA9PT1zJiZwKE0sMCwwLHIuY2FudmFzV2lkdGgsci5jYW52YXNIZWlnaHQpO3ZhciBmPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhPVtbXSxbXV07Zm9yKG49MDtuPDY0O24rKyl7dmFyIGk9IXQmJm48dS5sZW5ndGg/dVtuXS5icnVzaC5maWx0ZXIuZ2V0Qm91bmRzKCk6Wy0xLzAsMS8wXTthWzBdW25dPWlbMF0sYVsxXVtuXT1pWzFdfXZhciBvPTgqYyxzPW5ldyBBcnJheShvKTtmb3IoZT0wO2U8bztlKyspc1tlXT0yNTU7aWYoIXQpZm9yKGU9MDtlPHUubGVuZ3RoO2UrKyl7dmFyIGw9ZSU4LGg9KGUtbCkvOCxmPU1hdGgucG93KDIsbCkscD11W2VdLmJydXNoLmZpbHRlci5nZXQoKTtpZighKHAubGVuZ3RoPDIpKXt2YXIgZD1fKHBbMF0pWzFdO2ZvcihyPTE7cjxwLmxlbmd0aDtyKyspe3ZhciBnPV8ocFtyXSk7Zm9yKG49ZCsxO248Z1swXTtuKyspc1s4Km4raF0mPX5mO2Q9TWF0aC5tYXgoZCxnWzFdKX19fXZhciB2PXtzaGFwZTpbOCxjXSxmb3JtYXQ6ImFscGhhIix0eXBlOiJ1aW50OCIsbWFnOiJuZWFyZXN0IixtaW46Im5lYXJlc3QiLGRhdGE6c307cmV0dXJuIHc/dyh2KTp3PU0udGV4dHVyZSh2KSx7bWFza1RleHR1cmU6dyxtYXNrSGVpZ2h0OmMsbG9BOmFbMF0uc2xpY2UoMCwxNiksbG9COmFbMF0uc2xpY2UoMTYsMzIpLGxvQzphWzBdLnNsaWNlKDMyLDQ4KSxsb0Q6YVswXS5zbGljZSg0OCw2NCksaGlBOmFbMV0uc2xpY2UoMCwxNiksaGlCOmFbMV0uc2xpY2UoMTYsMzIpLGhpQzphWzFdLnNsaWNlKDMyLDQ4KSxoaUQ6YVsxXS5zbGljZSg0OCw2NCl9fShrKTtmb3IoYT0wO2E8czthKyspe3ZhciBnPXRbYV0sdj1nLmRpbTAuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleCxtPWcuZGltMS5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LHg9Zy5jYW52YXNYLFM9Zy5jYW52YXNZLEU9eCtnLnBhbmVsU2l6ZVg7aWYoZXx8IUxbdl18fExbdl1bMF0hPT14fHxMW3ZdWzFdIT09RSl7TFt2XT1beCxFXTt2YXIgUD1iKHIsaSxvLGEsdixtLHgsUyxnLnBhbmVsU2l6ZVgsZy5wYW5lbFNpemVZLGcuZGltMC5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LGs/MDpUPzI6MSxmKTtBLmNsZWFyT25seT1uO3ZhciBPPWU/ci5saW5lcy5ibG9ja0xpbmVDb3VudDp5O2QoTSxDLEEsTyx5LFApfX19LHJlYWRQaXhlbDpmdW5jdGlvbih0LGUpe3JldHVybiBNLnJlYWQoe3g6dCx5OmUsd2lkdGg6MSxoZWlnaHQ6MSxkYXRhOmh9KSxofSxyZWFkUGl4ZWxzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPW5ldyBVaW50OEFycmF5KDQqcipuKTtyZXR1cm4gTS5yZWFkKHt4OnQseTplLHdpZHRoOnIsaGVpZ2h0Om4sZGF0YTphfSksYX0sZGVzdHJveTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0LnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIixFLmRlc3Ryb3koKSx3JiZ3LmRlc3Ryb3koKSxTKVNbZV0uZGVzdHJveSgpfSx1cGRhdGU6UH19fSx7Ii4uLy4uL2xpYiI6NzE3LCIuL2NvbnN0YW50cyI6MTA4NixnbHNsaWZ5OjQxMX1dLDEwOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGk7Zm9yKG58fChuPTEvMCksYT0wO2E8ZS5sZW5ndGg7YSsrKShpPWVbYV0pLnZpc2libGUmJihuPU1hdGgubWluKG4saVtyXS5sZW5ndGgpKTtmb3Iobj09PTEvMCYmKG49MCksdC5fbGVuZ3RoPW4sYT0wO2E8ZS5sZW5ndGg7YSsrKShpPWVbYV0pLnZpc2libGUmJihpLl9sZW5ndGg9bik7cmV0dXJuIG59fSx7fV0sMTA5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiY29sb3ItcmdiYSIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHU9dCgiLi4vLi4vbGliL2d1cCIpLGg9dS5rZXlGdW4sZj11LnJlcGVhdCxwPXUudW53cmFwLGQ9dCgiLi9oZWxwZXJzIiksZz10KCIuL2NvbnN0YW50cyIpLHY9dCgiLi9heGlzYnJ1c2giKSxtPXQoIi4vbGluZXMiKTtmdW5jdGlvbiB5KHQsZSxyKXtyZXR1cm4gby5hZ2dOdW1zKHQsbnVsbCxlLHIpfWZ1bmN0aW9uIHgodCxlKXtyZXR1cm4gXyh5KE1hdGgubWluLHQsZSkseShNYXRoLm1heCx0LGUpKX1mdW5jdGlvbiBiKHQpe3ZhciBlPXQucmFuZ2U7cmV0dXJuIGU/XyhlWzBdLGVbMV0pOngodC52YWx1ZXMsdC5fbGVuZ3RoKX1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIWlzTmFOKHQpJiZpc0Zpbml0ZSh0KXx8KHQ9MCksIWlzTmFOKGUpJiZpc0Zpbml0ZShlKXx8KGU9MCksdD09PWUmJigwPT09dD8odC09MSxlKz0xKToodCo9LjksZSo9MS4xKSksW3QsZV19ZnVuY3Rpb24gdyh0LGUscixhLGkpe3ZhciBvLHMsbD1iKHIpO3JldHVybiBhP24uc2NhbGUub3JkaW5hbCgpLmRvbWFpbihhLm1hcCgobz1uLmZvcm1hdChyLnRpY2tmb3JtYXQpLHM9aSxzP2Z1bmN0aW9uKHQsZSl7dmFyIHI9c1tlXTtyZXR1cm4gbnVsbD09cj9vKHQpOnJ9Om8pKSkucmFuZ2UoYS5tYXAoZnVuY3Rpb24ocil7dmFyIG49KHItbFswXSkvKGxbMV0tbFswXSk7cmV0dXJuIHQtZStuKigyKmUtdCl9KSk6bi5zY2FsZS5saW5lYXIoKS5kb21haW4obCkucmFuZ2UoW3QtZSxlXSl9ZnVuY3Rpb24gayh0KXtpZih0LnRpY2t2YWxzKXt2YXIgZT1iKHQpO3JldHVybiBuLnNjYWxlLm9yZGluYWwoKS5kb21haW4odC50aWNrdmFscykucmFuZ2UodC50aWNrdmFscy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtZVswXSkvKGVbMV0tZVswXSl9KSl9fWZ1bmN0aW9uIFQodCl7dmFyIGU9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxyPXQubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPWEodFsxXSk7cmV0dXJuIG4ucmdiKCJyZ2IoIitlWzBdKyIsIitlWzFdKyIsIitlWzJdKyIpIil9KSxpPSJyZ2IiLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG4uc2NhbGUubGluZWFyKCkuY2xhbXAoITApLmRvbWFpbihlKS5yYW5nZShyLm1hcCgoYT10LGZ1bmN0aW9uKHQpe3JldHVybiB0W2FdfSkpKTt2YXIgYX0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KX19ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdC5kaW1lbnNpb25zLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQuYnJ1c2guZmlsdGVyU3BlY2lmaWVkfSl9ZnVuY3Rpb24gQSh0LGUscil7dmFyIGE9ci53aWR0aCxpPXIuaGVpZ2h0LHM9ci5kaW1lbnNpb25zLGw9ci5jYW52YXNQaXhlbFJhdGlvLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGEqdC9NYXRoLm1heCgxLHIuY29sQ291bnQtMSl9LHU9Zy52ZXJ0aWNhbFBhZGRpbmcvaSxoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2NhbGUubGluZWFyKCkucmFuZ2UoW2UsdC1lXSl9KGksZy52ZXJ0aWNhbFBhZGRpbmcpLGY9e2tleTpyLmtleSx4U2NhbGU6Yyxtb2RlbDpyLGluQnJ1c2hEcmFnOiExfSxwPXt9O3JldHVybiBmLmRpbWVuc2lvbnM9cy5maWx0ZXIoZC5pc1Zpc2libGUpLm1hcChmdW5jdGlvbihhLHMpe3ZhciBtPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2NhbGUubGluZWFyKCkuZG9tYWluKGIodCkpLnJhbmdlKFtlLDEtZV0pfShhLHUpLHk9cFthLmxhYmVsXTtwW2EubGFiZWxdPSh5fHwwKSsxO3ZhciB4PWEubGFiZWwrKHk/Il9fIit5OiIiKSxfPWEuY29uc3RyYWludHJhbmdlLFQ9XyYmXy5sZW5ndGg7VCYmIUFycmF5LmlzQXJyYXkoX1swXSkmJihfPVtfXSk7dmFyIEE9VD9fLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAobSl9KTpbWy0xLzAsMS8wXV0sUz1hLnZhbHVlcztTLmxlbmd0aD5hLl9sZW5ndGgmJihTPVMuc2xpY2UoMCxhLl9sZW5ndGgpKTt2YXIgRSxMPWEudGlja3ZhbHM7ZnVuY3Rpb24gQyh0LGUpe3JldHVybnt2YWw6dCx0ZXh0OkVbZV19fWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4gdC52YWwtZS52YWx9aWYoQXJyYXkuaXNBcnJheShMKSYmTC5sZW5ndGgpe0U9YS50aWNrdGV4dCxBcnJheS5pc0FycmF5KEUpJiZFLmxlbmd0aD9FLmxlbmd0aD5MLmxlbmd0aD9FPUUuc2xpY2UoMCxMLmxlbmd0aCk6TC5sZW5ndGg+RS5sZW5ndGgmJihMPUwuc2xpY2UoMCxFLmxlbmd0aCkpOkU9TC5tYXAobi5mb3JtYXQoYS50aWNrZm9ybWF0KSk7Zm9yKHZhciBPPTE7TzxMLmxlbmd0aDtPKyspaWYoTFtPXTxMW08tMV0pe2Zvcih2YXIgej1MLm1hcChDKS5zb3J0KFApLEk9MDtJPEwubGVuZ3RoO0krKylMW0ldPXpbSV0udmFsLEVbSV09eltJXS50ZXh0O2JyZWFrfX1lbHNlIEw9dm9pZCAwO3JldHVybiBTPWQuY29udmVydFR5cGVkQXJyYXkoUykse2tleTp4LGxhYmVsOmEubGFiZWwsdGlja0Zvcm1hdDphLnRpY2tmb3JtYXQsdGlja3ZhbHM6TCx0aWNrdGV4dDpFLG9yZGluYWw6ZC5pc09yZGluYWwoYSksbXVsdGlzZWxlY3Q6YS5tdWx0aXNlbGVjdCx4SW5kZXg6cyxjcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4OnMsdmlzaWJsZUluZGV4OmEuX2luZGV4LGhlaWdodDppLHZhbHVlczpTLHBhZGRlZFVuaXRWYWx1ZXM6Uy5tYXAobSksdW5pdFRpY2t2YWxzOkwmJkwubWFwKG0pLHhTY2FsZTpjLHg6YyhzKSxjYW52YXNYOmMocykqbCx1bml0VG9QYWRkZWRQeDpoLGRvbWFpblNjYWxlOncoaSxnLnZlcnRpY2FsUGFkZGluZyxhLEwsRSksb3JkaW5hbFNjYWxlOmsoYSkscGFyZW50OmYsbW9kZWw6cixicnVzaDp2Lm1ha2VCcnVzaCh0LFQsQSxmdW5jdGlvbigpe3QubGluZVBpY2tBY3RpdmUoITEpfSxmdW5jdGlvbigpe3ZhciBlPWY7ZS5mb2N1c0xheWVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKTt2YXIgcj1NKGUpOyF0LmNvbnRleHRTaG93bigpJiZyPyhlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSx0LmNvbnRleHRTaG93bighMCkpOnQuY29udGV4dFNob3duKCkmJiFyJiYoZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMCwhMCksdC5jb250ZXh0U2hvd24oITEpKX0sZnVuY3Rpb24ocil7aWYoZi5mb2N1c0xheWVyLnJlbmRlcihmLnBhbmVscywhMCksZi5waWNrTGF5ZXImJmYucGlja0xheWVyLnJlbmRlcihmLnBhbmVscywhMCksdC5saW5lUGlja0FjdGl2ZSghMCksZSYmZS5maWx0ZXJDaGFuZ2VkKXt2YXIgbj1tLmludmVydCxpPXIubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChuKS5zb3J0KG8uc29ydGVyQXNjKX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSk7ZS5maWx0ZXJDaGFuZ2VkKGYua2V5LGEuX2luZGV4LGkpfX0pfX0pLGZ9ZnVuY3Rpb24gUyh0KXt0LmNsYXNzZWQoZy5jbi5heGlzRXh0ZW50VGV4dCwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpLnN0eWxlKCJ1c2VyLXNlbGVjdCIsIm5vbmUiKX1mdW5jdGlvbiBFKHQsZSl7dmFyIHI9InRvcCI9PT1lPzE6LTEsbj10Kk1hdGguUEkvMTgwO3JldHVybntkaXI6cixkeDpNYXRoLnNpbihuKSxkeTpNYXRoLmNvcyhuKSxkZWdyZWVzOnR9fWZ1bmN0aW9uIEwodCxlKXtmb3IodmFyIHI9ZS5wYW5lbHN8fChlLnBhbmVscz1bXSksbj10LmRhdGEoKSxhPTA7YTxuLmxlbmd0aC0xO2ErKyl7dmFyIGk9clthXXx8KHJbYV09e30pLG89blthXSxzPW5bYSsxXTtpLmRpbTA9byxpLmRpbTE9cyxpLmNhbnZhc1g9by5jYW52YXNYLGkucGFuZWxTaXplWD1zLmNhbnZhc1gtby5jYW52YXNYLGkucGFuZWxTaXplWT1lLm1vZGVsLmNhbnZhc0hlaWdodCxpLnk9MCxpLmNhbnZhc1k9MH19ZnVuY3Rpb24gQyh0LGUpe3JldHVybiBpLnRpY2tUZXh0KHQuX2F4LGUsITEpLnRleHR9ZnVuY3Rpb24gUCh0LGUpe2lmKHQub3JkaW5hbClyZXR1cm4iIjt2YXIgcj10LmRvbWFpblNjYWxlLmRvbWFpbigpLG49cltlP3IubGVuZ3RoLTE6MF07cmV0dXJuIEModC5tb2RlbC5kaW1lbnNpb25zW3QudmlzaWJsZUluZGV4XSxuKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7dmFyIHk9dC5fZnVsbExheW91dCx3PXkuX3RvcHBhcGVyLGs9eS5fZ2xjb250YWluZXI7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWZvcih2YXIgcj0wO3I8dFtlXS5sZW5ndGg7cisrKWZvcih2YXIgbj10W2VdW3JdLnRyYWNlLGE9bi5kaW1lbnNpb25zLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXS52YWx1ZXMsbD1hW29dLl9heDtsJiYobC5yYW5nZT9sLnJhbmdlPV8obC5yYW5nZVswXSxsLnJhbmdlWzFdKTpsLnJhbmdlPXgocyxuLl9sZW5ndGgpLGwuZHRpY2t8fChsLmR0aWNrPS4wMSooTWF0aC5hYnMobC5yYW5nZVsxXS1sLnJhbmdlWzBdKXx8MSkpLGwudGlja2Zvcm1hdD1hW29dLnRpY2tmb3JtYXQsaS5jYWxjVGlja3MobCksbC5jbGVhblJhbmdlKCkpfX0oZSk7dmFyIE8seixJPShPPSEwLHo9ITEse2xpbmVQaWNrQWN0aXZlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP089ISF0Ok99LGNvbnRleHRTaG93bjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD96PSEhdDp6fX0pLEQ9ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHAodCkudHJhY2UudmlzaWJsZX0pLm1hcChmdW5jdGlvbih0LGUscil7dmFyIGk9cChlKSxzPWkudHJhY2UsbD1kLmNvbnZlcnRUeXBlZEFycmF5KGkubGluZUNvbG9yKSx1PXMubGluZSxoPXtjb2xvcjphKGcuZGVzZWxlY3RlZExpbmVDb2xvcil9LGY9Yy5leHRyYWN0T3B0cyh1KSx2PWYucmV2ZXJzZXNjYWxlP2MuZmxpcFNjYWxlKGkuY3NjYWxlKTppLmNzY2FsZSxtPXMuZG9tYWluLHk9cy5kaW1lbnNpb25zLHg9dC53aWR0aCxfPXMubGFiZWxhbmdsZSx3PXMubGFiZWxzaWRlLGs9cy5sYWJlbGZvbnQsTT1zLnRpY2tmb250LEE9cy5yYW5nZWZvbnQsUz1vLmV4dGVuZERlZXBOb0FycmF5cyh7fSx1LHtjb2xvcjpsLm1hcChuLnNjYWxlLmxpbmVhcigpLmRvbWFpbihiKHt2YWx1ZXM6bCxyYW5nZTpbZi5taW4sZi5tYXhdLF9sZW5ndGg6cy5fbGVuZ3RofSkpKSxibG9ja0xpbmVDb3VudDpnLmJsb2NrTGluZUNvdW50LGNhbnZhc092ZXJkcmFnOmcub3ZlcmRyYWcqZy5jYW52YXNQaXhlbFJhdGlvfSksRT1NYXRoLmZsb29yKHgqKG0ueFsxXS1tLnhbMF0pKSxMPU1hdGguZmxvb3IodC5oZWlnaHQqKG0ueVsxXS1tLnlbMF0pKSxDPXQubWFyZ2lufHx7bDo4MCxyOjgwLHQ6MTAwLGI6ODB9LFA9RSxPPUw7cmV0dXJue2tleTpyLGNvbENvdW50OnkuZmlsdGVyKGQuaXNWaXNpYmxlKS5sZW5ndGgsZGltZW5zaW9uczp5LHRpY2tEaXN0YW5jZTpnLnRpY2tEaXN0YW5jZSx1bml0VG9Db2xvcjpUKHYpLGxpbmVzOlMsZGVzZWxlY3RlZExpbmVzOmgsbGFiZWxBbmdsZTpfLGxhYmVsU2lkZTp3LGxhYmVsRm9udDprLHRpY2tGb250Ok0scmFuZ2VGb250OkEsbGF5b3V0V2lkdGg6eCxsYXlvdXRIZWlnaHQ6dC5oZWlnaHQsZG9tYWluOm0sdHJhbnNsYXRlWDptLnhbMF0qeCx0cmFuc2xhdGVZOnQuaGVpZ2h0LW0ueVsxXSp0LmhlaWdodCxwYWQ6QyxjYW52YXNXaWR0aDpQKmcuY2FudmFzUGl4ZWxSYXRpbysyKlMuY2FudmFzT3ZlcmRyYWcsY2FudmFzSGVpZ2h0Ok8qZy5jYW52YXNQaXhlbFJhdGlvLHdpZHRoOlAsaGVpZ2h0Ok8sY2FudmFzUGl4ZWxSYXRpbzpnLmNhbnZhc1BpeGVsUmF0aW99fS5iaW5kKDAscikpLm1hcChBLmJpbmQoMCxJLHUpKTtrLmVhY2goZnVuY3Rpb24odCxlKXtyZXR1cm4gby5leHRlbmRGbGF0KHQsRFtlXSl9KTt2YXIgUj1rLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLmVhY2goZnVuY3Rpb24odCl7dC52aWV3TW9kZWw9RFswXSx0Lm1vZGVsPXQudmlld01vZGVsP3Qudmlld01vZGVsLm1vZGVsOm51bGx9KSxGPW51bGw7Ui5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQucGlja30pLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImF1dG8iKS5vbigibW91c2Vtb3ZlIixmdW5jdGlvbih0KXtpZihJLmxpbmVQaWNrQWN0aXZlKCkmJnQubGluZUxheWVyJiZ1JiZ1LmhvdmVyKXt2YXIgZT1uLmV2ZW50LHI9dGhpcy53aWR0aCxhPXRoaXMuaGVpZ2h0LGk9bi5tb3VzZSh0aGlzKSxvPWlbMF0scz1pWzFdO2lmKG88MHx8czwwfHxvPj1yfHxzPj1hKXJldHVybjt2YXIgbD10LmxpbmVMYXllci5yZWFkUGl4ZWwobyxhLTEtcyksYz0wIT09bFszXSxoPWM/bFsyXSsyNTYqKGxbMV0rMjU2KmxbMF0pOm51bGwsZj17eDpvLHk6cyxjbGllbnRYOmUuY2xpZW50WCxjbGllbnRZOmUuY2xpZW50WSxkYXRhSW5kZXg6dC5tb2RlbC5rZXksY3VydmVOdW1iZXI6aH07aCE9PUYmJihjP3UuaG92ZXIoZik6dS51bmhvdmVyJiZ1LnVuaG92ZXIoZiksRj1oKX19KSxSLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC5waWNrPzA6MX0pLHcuc3R5bGUoImJhY2tncm91bmQiLCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDApIik7dmFyIEI9dy5zZWxlY3RBbGwoIi4iK2cuY24ucGFyY29vcmRzKS5kYXRhKEQsaCk7Qi5leGl0KCkucmVtb3ZlKCksQi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZy5jbi5wYXJjb29yZHMsITApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEIuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC5tb2RlbC50cmFuc2xhdGVYKyIsIit0Lm1vZGVsLnRyYW5zbGF0ZVkrIikifSk7dmFyIE49Qi5zZWxlY3RBbGwoIi4iK2cuY24ucGFyY29vcmRzQ29udHJvbFZpZXcpLmRhdGEoZixoKTtOLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChnLmNuLnBhcmNvb3Jkc0NvbnRyb2xWaWV3LCEwKSxOLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QubW9kZWwucGFkLmwrIiwiK3QubW9kZWwucGFkLnQrIikifSk7dmFyIGo9Ti5zZWxlY3RBbGwoIi4iK2cuY24ueUF4aXMpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGltZW5zaW9uc30saCk7ai5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZy5jbi55QXhpcywhMCksTi5lYWNoKGZ1bmN0aW9uKHQpe0woaix0KX0pLFIuZWFjaChmdW5jdGlvbih0KXtpZih0LnZpZXdNb2RlbCl7IXQubGluZUxheWVyfHx1P3QubGluZUxheWVyPW0odGhpcyx0KTp0LmxpbmVMYXllci51cGRhdGUodCksKHQua2V5fHwwPT09dC5rZXkpJiYodC52aWV3TW9kZWxbdC5rZXldPXQubGluZUxheWVyKTt2YXIgZT0hdC5jb250ZXh0fHx1O3QubGluZUxheWVyLnJlbmRlcih0LnZpZXdNb2RlbC5wYW5lbHMsZSl9fSksai5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnhTY2FsZSh0LnhJbmRleCkrIiwgMCkifSksai5jYWxsKG4uYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm4gdH0pLm9uKCJkcmFnIixmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudDtJLmxpbmVQaWNrQWN0aXZlKCExKSx0Lng9TWF0aC5tYXgoLWcub3ZlcmRyYWcsTWF0aC5taW4odC5tb2RlbC53aWR0aCtnLm92ZXJkcmFnLG4uZXZlbnQueCkpLHQuY2FudmFzWD10LngqdC5tb2RlbC5jYW52YXNQaXhlbFJhdGlvLGouc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LngtZS54fSkuZWFjaChmdW5jdGlvbihlLHIpe2UueEluZGV4PXIsZS54PXQ9PT1lP2UueDplLnhTY2FsZShlLnhJbmRleCksZS5jYW52YXNYPWUueCplLm1vZGVsLmNhbnZhc1BpeGVsUmF0aW99KSxMKGosZSksai5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIDAhPT1NYXRoLmFicyh0LnhJbmRleC1lLnhJbmRleCl9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnhTY2FsZSh0LnhJbmRleCkrIiwgMCkifSksbi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC54KyIsIDApIiksai5lYWNoKGZ1bmN0aW9uKHIsbixhKXthPT09dC5wYXJlbnQua2V5JiYoZS5kaW1lbnNpb25zW25dPXIpfSksZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMSwhTShlKSksZS5mb2N1c0xheWVyLnJlbmRlciYmZS5mb2N1c0xheWVyLnJlbmRlcihlLnBhbmVscyl9KS5vbigiZHJhZ2VuZCIsZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJlbnQ7dC54PXQueFNjYWxlKHQueEluZGV4KSx0LmNhbnZhc1g9dC54KnQubW9kZWwuY2FudmFzUGl4ZWxSYXRpbyxMKGosZSksbi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC54KyIsIDApIn0pLGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIU0oZSkpLGUuZm9jdXNMYXllciYmZS5mb2N1c0xheWVyLnJlbmRlcihlLnBhbmVscyksZS5waWNrTGF5ZXImJmUucGlja0xheWVyLnJlbmRlcihlLnBhbmVscywhMCksSS5saW5lUGlja0FjdGl2ZSghMCksdSYmdS5heGVzTW92ZWQmJnUuYXhlc01vdmVkKGUua2V5LGUuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleH0pKX0pKSxqLmV4aXQoKS5yZW1vdmUoKTt2YXIgVj1qLnNlbGVjdEFsbCgiLiIrZy5jbi5heGlzT3ZlcmxheXMpLmRhdGEoZixoKTtWLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChnLmNuLmF4aXNPdmVybGF5cywhMCksVi5zZWxlY3RBbGwoIi4iK2cuY24uYXhpcykucmVtb3ZlKCk7dmFyIFU9Vi5zZWxlY3RBbGwoIi4iK2cuY24uYXhpcykuZGF0YShmLGgpO1UuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGcuY24uYXhpcywhMCksVS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubW9kZWwuaGVpZ2h0L3QubW9kZWwudGlja0Rpc3RhbmNlLHI9dC5kb21haW5TY2FsZSxhPXIuZG9tYWluKCk7bi5zZWxlY3QodGhpcykuY2FsbChuLnN2Zy5heGlzKCkub3JpZW50KCJsZWZ0IikudGlja1NpemUoNCkub3V0ZXJUaWNrU2l6ZSgyKS50aWNrcyhlLHQudGlja0Zvcm1hdCkudGlja1ZhbHVlcyh0Lm9yZGluYWw/YTpudWxsKS50aWNrRm9ybWF0KGZ1bmN0aW9uKGUpe3JldHVybiBkLmlzT3JkaW5hbCh0KT9lOkModC5tb2RlbC5kaW1lbnNpb25zW3QudmlzaWJsZUluZGV4XSxlKX0pLnNjYWxlKHIpKSxsLmZvbnQoVS5zZWxlY3RBbGwoInRleHQiKSx0Lm1vZGVsLnRpY2tGb250KX0pLFUuc2VsZWN0QWxsKCIuZG9tYWluLCAudGljaz5saW5lIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwuMjUpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLFUuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtc2hhZG93IiwiMXB4IDFweCAxcHggI2ZmZiwgLTFweCAtMXB4IDFweCAjZmZmLCAxcHggLTFweCAxcHggI2ZmZiwgLTFweCAxcHggMXB4ICNmZmYiKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpLnN0eWxlKCJ1c2VyLXNlbGVjdCIsIm5vbmUiKTt2YXIgcT1WLnNlbGVjdEFsbCgiLiIrZy5jbi5heGlzSGVhZGluZykuZGF0YShmLGgpO3EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGcuY24uYXhpc0hlYWRpbmcsITApO3ZhciBIPXEuc2VsZWN0QWxsKCIuIitnLmNuLmF4aXNUaXRsZSkuZGF0YShmLGgpO0guZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKGcuY24uYXhpc1RpdGxlLCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKS5zdHlsZSgidXNlci1zZWxlY3QiLCJub25lIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYXV0byIpLEgudGV4dChmdW5jdGlvbih0KXtyZXR1cm4gdC5sYWJlbH0pLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7bC5mb250KHIsZS5tb2RlbC5sYWJlbEZvbnQpLHMuY29udmVydFRvVHNwYW5zKHIsdCl9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBlPUUodC5tb2RlbC5sYWJlbEFuZ2xlLHQubW9kZWwubGFiZWxTaWRlKSxyPWcuYXhpc1RpdGxlT2Zmc2V0O3JldHVybihlLmRpcj4wPyIiOiJ0cmFuc2xhdGUoMCwiKygyKnIrdC5tb2RlbC5oZWlnaHQpKyIpIikrInJvdGF0ZSgiK2UuZGVncmVlcysiKXRyYW5zbGF0ZSgiKy1yKmUuZHgrIiwiKy1yKmUuZHkrIikifSkuYXR0cigidGV4dC1hbmNob3IiLGZ1bmN0aW9uKHQpe3ZhciBlPUUodC5tb2RlbC5sYWJlbEFuZ2xlLHQubW9kZWwubGFiZWxTaWRlKTtyZXR1cm4gMipNYXRoLmFicyhlLmR4KT5NYXRoLmFicyhlLmR5KT9lLmRpciplLmR4PDA/InN0YXJ0IjoiZW5kIjoibWlkZGxlIn0pO3ZhciBHPVYuc2VsZWN0QWxsKCIuIitnLmNuLmF4aXNFeHRlbnQpLmRhdGEoZixoKTtHLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChnLmNuLmF4aXNFeHRlbnQsITApO3ZhciBZPUcuc2VsZWN0QWxsKCIuIitnLmNuLmF4aXNFeHRlbnRUb3ApLmRhdGEoZixoKTtZLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChnLmNuLmF4aXNFeHRlbnRUb3AsITApLFkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIistZy5heGlzRXh0ZW50T2Zmc2V0KyIpIik7dmFyIFc9WS5zZWxlY3RBbGwoIi4iK2cuY24uYXhpc0V4dGVudFRvcFRleHQpLmRhdGEoZixoKTtXLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChnLmNuLmF4aXNFeHRlbnRUb3BUZXh0LCEwKS5jYWxsKFMpLFcudGV4dChmdW5jdGlvbih0KXtyZXR1cm4gUCh0LCEwKX0pLmVhY2goZnVuY3Rpb24odCl7bC5mb250KG4uc2VsZWN0KHRoaXMpLHQubW9kZWwucmFuZ2VGb250KX0pO3ZhciBYPUcuc2VsZWN0QWxsKCIuIitnLmNuLmF4aXNFeHRlbnRCb3R0b20pLmRhdGEoZixoKTtYLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChnLmNuLmF4aXNFeHRlbnRCb3R0b20sITApLFguYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKDAsIisodC5tb2RlbC5oZWlnaHQrZy5heGlzRXh0ZW50T2Zmc2V0KSsiKSJ9KTt2YXIgWj1YLnNlbGVjdEFsbCgiLiIrZy5jbi5heGlzRXh0ZW50Qm90dG9tVGV4dCkuZGF0YShmLGgpO1ouZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKGcuY24uYXhpc0V4dGVudEJvdHRvbVRleHQsITApLmF0dHIoImR5IiwiMC43NWVtIikuY2FsbChTKSxaLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIFAodCwhMSl9KS5lYWNoKGZ1bmN0aW9uKHQpe2wuZm9udChuLnNlbGVjdCh0aGlzKSx0Lm1vZGVsLnJhbmdlRm9udCl9KSx2LmVuc3VyZUF4aXNCcnVzaChWKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MDQsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL2d1cCI6NzE1LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi9heGlzYnJ1c2giOjEwODMsIi4vY29uc3RhbnRzIjoxMDg2LCIuL2hlbHBlcnMiOjEwODgsIi4vbGluZXMiOjEwOTAsImNvbG9yLXJnYmEiOjEyNCxkMzoxNjV9XSwxMDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcGFyY29vcmRzIiksYT10KCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsIiksaT10KCIuL2hlbHBlcnMiKS5pc1Zpc2libGU7ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49ZS5pbmRleE9mKHIpLGE9dC5pbmRleE9mKG4pO3JldHVybi0xPT09YSYmKGErPWUubGVuZ3RoKSxhfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQ7aWYoYSh0KSl7dmFyIHM9e30sbD17fSxjPXt9LHU9e30saD1yLl9zaXplO2UuZm9yRWFjaChmdW5jdGlvbihlLHIpe3ZhciBuPWVbMF0udHJhY2U7Y1tyXT1uLmluZGV4O3ZhciBhPXVbcl09bi5fZnVsbElucHV0LmluZGV4O3Nbcl09dC5kYXRhW2FdLmRpbWVuc2lvbnMsbFtyXT10LmRhdGFbYV0uZGltZW5zaW9ucy5zbGljZSgpfSk7bih0LGUse3dpZHRoOmgudyxoZWlnaHQ6aC5oLG1hcmdpbjp7dDpoLnQscjpoLnIsYjpoLmIsbDpoLmx9fSx7ZmlsdGVyQ2hhbmdlZDpmdW5jdGlvbihlLG4sYSl7dmFyIGk9bFtlXVtuXSxvPWEubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCl9KSxzPSJkaW1lbnNpb25zWyIrbisiXS5jb25zdHJhaW50cmFuZ2UiLGg9ci5fdHJhY2VQcmVHVUlbdC5fZnVsbERhdGFbY1tlXV0uX2Z1bGxJbnB1dC51aWRdO2lmKHZvaWQgMD09PWhbc10pe3ZhciBmPWkuY29uc3RyYWludHJhbmdlO2hbc109Znx8bnVsbH12YXIgcD10Ll9mdWxsRGF0YVtjW2VdXS5kaW1lbnNpb25zW25dO28ubGVuZ3RoPygxPT09by5sZW5ndGgmJihvPW9bMF0pLGkuY29uc3RyYWludHJhbmdlPW8scC5jb25zdHJhaW50cmFuZ2U9by5zbGljZSgpLG89W29dKTooZGVsZXRlIGkuY29uc3RyYWludHJhbmdlLGRlbGV0ZSBwLmNvbnN0cmFpbnRyYW5nZSxvPW51bGwpO3ZhciBkPXt9O2Rbc109byx0LmVtaXQoInBsb3RseV9yZXN0eWxlIixbZCxbdVtlXV1dKX0saG92ZXI6ZnVuY3Rpb24oZSl7dC5lbWl0KCJwbG90bHlfaG92ZXIiLGUpfSx1bmhvdmVyOmZ1bmN0aW9uKGUpe3QuZW1pdCgicGxvdGx5X3VuaG92ZXIiLGUpfSxheGVzTW92ZWQ6ZnVuY3Rpb24oZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBvKHQsZSxyKS1vKHQsZSxuKX19KHIsbFtlXS5maWx0ZXIoaSkpO3NbZV0uc29ydChuKSxsW2VdLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4haSh0KX0pLnNvcnQoZnVuY3Rpb24odCl7cmV0dXJuIGxbZV0uaW5kZXhPZih0KX0pLmZvckVhY2goZnVuY3Rpb24odCl7c1tlXS5zcGxpY2Uoc1tlXS5pbmRleE9mKHQpLDEpLHNbZV0uc3BsaWNlKGxbZV0uaW5kZXhPZih0KSwwLHQpfSksdC5lbWl0KCJwbG90bHlfcmVzdHlsZSIsW3tkaW1lbnNpb25zOltzW2VdXX0sW3VbZV1dXSl9fSl9fX0seyIuLi8uLi9saWIvcHJlcGFyZV9yZWdsIjo3MzAsIi4vaGVscGVycyI6MTA4OCwiLi9wYXJjb29yZHMiOjEwOTJ9XSwxMDk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxsPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9aSh7ZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITAsY29sb3JFZGl0VHlwZToicGxvdCJ9KTtlLmV4cG9ydHM9e2xhYmVsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsYWJlbDA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZGxhYmVsOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6e2NvbG9yczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6by5kZWZhdWx0TGluZSxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sc2NhbGVncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sdGV4dGluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwicGVyY2VudCJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToiY2FsYyJ9LGhvdmVyaW5mbzpjKHt9LG4uaG92ZXJpbmZvLHtmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwicGVyY2VudCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6cyh7fSx7a2V5czpbImxhYmVsIiwiY29sb3IiLCJ2YWx1ZSIsInBlcmNlbnQiLCJ0ZXh0Il19KSx0ZXh0dGVtcGxhdGU6bCh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbImxhYmVsIiwiY29sb3IiLCJ2YWx1ZSIsInBlcmNlbnQiLCJ0ZXh0Il19KSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJhdXRvIiwibm9uZSJdLGRmbHQ6ImF1dG8iLGFycmF5T2s6ITAsZWRpdFR5cGU6InBsb3QifSx0ZXh0Zm9udDpjKHt9LHUse30pLGluc2lkZXRleHRvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaG9yaXpvbnRhbCIsInJhZGlhbCIsInRhbmdlbnRpYWwiLCJhdXRvIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6InBsb3QifSxpbnNpZGV0ZXh0Zm9udDpjKHt9LHUse30pLG91dHNpZGV0ZXh0Zm9udDpjKHt9LHUse30pLGF1dG9tYXJnaW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90In0sZm9udDpjKHt9LHUse30pLHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgY2VudGVyIiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjphKHtuYW1lOiJwaWUiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLGhvbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sc29ydDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdLGRmbHQ6ImNvdW50ZXJjbG9ja3dpc2UiLGVkaXRUeXBlOiJjYWxjIn0scm90YXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOi0zNjAsbWF4OjM2MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxwdWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sX2RlcHJlY2F0ZWQ6e3RpdGxlOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSx0aXRsZWZvbnQ6Yyh7fSx1LHt9KSx0aXRsZXBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgY2VudGVyIiwiYm90dG9tIGxlZnQiLCJib3R0b20gY2VudGVyIiwiYm90dG9tIHJpZ2h0Il0sZWRpdFR5cGU6ImNhbGMifX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTkxLCIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc2MiwiLi4vLi4vcGxvdHMvZG9tYWluIjo3OTAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NzkxLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NDF9XSwxMDk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIik7ci5uYW1lPSJwaWUiLHIucGxvdD1mdW5jdGlvbih0LGUsYSxpKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGEsaSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGEsaSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsYSxpKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNn1dLDEwOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoInRpbnljb2xvcjIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXt9O2Z1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuISFlJiYoISEoZT1hKGUpKS5pc1ZhbGlkKCkmJihlPWkuYWRkT3BhY2l0eShlLGUuZ2V0QWxwaGEoKSksdFtyXXx8KHRbcl09ZSksZSkpfX1mdW5jdGlvbiBsKHQsZSl7dmFyIHIsbj1KU09OLnN0cmluZ2lmeSh0KSxpPWVbbl07aWYoIWkpe2ZvcihpPXQuc2xpY2UoKSxyPTA7cjx0Lmxlbmd0aDtyKyspaS5wdXNoKGEodFtyXSkubGlnaHRlbigyMCkudG9IZXhTdHJpbmcoKSk7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylpLnB1c2goYSh0W3JdKS5kYXJrZW4oMjApLnRvSGV4U3RyaW5nKCkpO2Vbbl09aX1yZXR1cm4gaX1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcixhLGk9W10sbz10Ll9mdWxsTGF5b3V0LGw9by5oaWRkZW5sYWJlbHN8fFtdLGM9ZS5sYWJlbHMsdT1lLm1hcmtlci5jb2xvcnN8fFtdLGg9ZS52YWx1ZXMsZj1lLl9sZW5ndGgscD1lLl9oYXNWYWx1ZXMmJmY7aWYoZS5kbGFiZWwpZm9yKGM9bmV3IEFycmF5KGYpLHI9MDtyPGY7cisrKWNbcl09U3RyaW5nKGUubGFiZWwwK3IqZS5kbGFiZWwpO3ZhciBkPXt9LGc9cyhvWyJfIitlLnR5cGUrImNvbG9ybWFwIl0pLHY9MCxtPSExO2ZvcihyPTA7cjxmO3IrKyl7dmFyIHkseCxiO2lmKHApe2lmKHk9aFtyXSwhbih5KSljb250aW51ZTtpZigoeT0reSk8MCljb250aW51ZX1lbHNlIHk9MTt2b2lkIDAhPT0oeD1jW3JdKSYmIiIhPT14fHwoeD1yKTt2YXIgXz1kW3g9U3RyaW5nKHgpXTt2b2lkIDA9PT1fPyhkW3hdPWkubGVuZ3RoLChiPS0xIT09bC5pbmRleE9mKHgpKXx8KHYrPXkpLGkucHVzaCh7djp5LGxhYmVsOngsY29sb3I6Zyh1W3JdLHgpLGk6cixwdHM6W3JdLGhpZGRlbjpifSkpOihtPSEwLChhPWlbX10pLnYrPXksYS5wdHMucHVzaChyKSxhLmhpZGRlbnx8KHYrPXkpLCExPT09YS5jb2xvciYmdVtyXSYmKGEuY29sb3I9Zyh1W3JdLHgpKSl9cmV0dXJuKCJmdW5uZWxhcmVhIj09PWUudHlwZT9tOmUuc29ydCkmJmkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlLnYtdC52fSksaVswXSYmKGlbMF0udlRvdGFsPXYpLGl9LGNyb3NzVHJhY2VDYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHI9KGV8fHt9KS50eXBlO3J8fChyPSJwaWUiKTt2YXIgbj10Ll9mdWxsTGF5b3V0LGE9dC5jYWxjZGF0YSxpPW5bcisiY29sb3J3YXkiXSxzPW5bIl8iK3IrImNvbG9ybWFwIl07blsiZXh0ZW5kIityKyJjb2xvcnMiXSYmKGk9bChpLG8pKTtmb3IodmFyIGM9MCx1PTA7dTxhLmxlbmd0aDt1Kyspe3ZhciBoPWFbdV07aWYoaFswXS50cmFjZS50eXBlPT09cilmb3IodmFyIGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIHA9aFtmXTshMT09PXAuY29sb3ImJihzW3AubGFiZWxdP3AuY29sb3I9c1twLmxhYmVsXTooc1twLmxhYmVsXT1wLmNvbG9yPWlbYyVpLmxlbmd0aF0sYysrKSl9fX0sbWFrZVB1bGxDb2xvckZuOnMsZ2VuZXJhdGVFeHRlbmRlZENvbG9yczpsfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsImZhc3QtaXNudW1lcmljIjoyMjgsdGlueWNvbG9yMjo1MzZ9XSwxMDk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHMscz10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVUZXh0O2Z1bmN0aW9uIGwodCxlKXt2YXIgcj1BcnJheS5pc0FycmF5KHQpLGk9YS5pc0FycmF5T3JUeXBlZEFycmF5KGUpLG89TWF0aC5taW4ocj90Lmxlbmd0aDoxLzAsaT9lLmxlbmd0aDoxLzApO2lmKGlzRmluaXRlKG8pfHwobz0wKSxvJiZpKXtmb3IodmFyIHMsbD0wO2w8bztsKyspe3ZhciBjPWVbbF07aWYobihjKSYmYz4wKXtzPSEwO2JyZWFrfX1zfHwobz0wKX1yZXR1cm57aGFzTGFiZWxzOnIsaGFzVmFsdWVzOmksbGVuOm99fWUuZXhwb3J0cz17aGFuZGxlTGFiZWxzQW5kVmFsdWVzOmwsc3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIsbil7ZnVuY3Rpb24gYyhyLG4pe3JldHVybiBhLmNvZXJjZSh0LGUsaSxyLG4pfXZhciB1PWwoYygibGFiZWxzIiksYygidmFsdWVzIikpLGg9dS5sZW47aWYoZS5faGFzTGFiZWxzPXUuaGFzTGFiZWxzLGUuX2hhc1ZhbHVlcz11Lmhhc1ZhbHVlcywhZS5faGFzTGFiZWxzJiZlLl9oYXNWYWx1ZXMmJihjKCJsYWJlbDAiKSxjKCJkbGFiZWwiKSksaCl7ZS5fbGVuZ3RoPWgsYygibWFya2VyLmxpbmUud2lkdGgiKSYmYygibWFya2VyLmxpbmUuY29sb3IiKSxjKCJtYXJrZXIuY29sb3JzIiksYygic2NhbGVncm91cCIpO3ZhciBmLHA9YygidGV4dCIpLGQ9YygidGV4dHRlbXBsYXRlIik7aWYoZHx8KGY9YygidGV4dGluZm8iLEFycmF5LmlzQXJyYXkocCk/InRleHQrcGVyY2VudCI6InBlcmNlbnQiKSksYygiaG92ZXJ0ZXh0IiksYygiaG92ZXJ0ZW1wbGF0ZSIpLGR8fGYmJiJub25lIiE9PWYpe3ZhciBnPWMoInRleHRwb3NpdGlvbiIpO3ModCxlLG4sYyxnLHttb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMSxtb2R1bGVIYXNDbGlwb25heGlzOiExLG1vZHVsZUhhc1RleHRhbmdsZTohMSxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITF9KSwoQXJyYXkuaXNBcnJheShnKXx8ImF1dG8iPT09Z3x8Im91dHNpZGUiPT09ZykmJmMoImF1dG9tYXJnaW4iKSwoImluc2lkZSI9PT1nfHwiYXV0byI9PT1nfHxBcnJheS5pc0FycmF5KGcpKSYmYygiaW5zaWRldGV4dG9yaWVudGF0aW9uIil9byhlLG4sYyk7dmFyIHY9YygiaG9sZSIpO2lmKGMoInRpdGxlLnRleHQiKSl7dmFyIG09YygidGl0bGUucG9zaXRpb24iLHY/Im1pZGRsZSBjZW50ZXIiOiJ0b3AgY2VudGVyIik7dnx8Im1pZGRsZSBjZW50ZXIiIT09bXx8KGUudGl0bGUucG9zaXRpb249InRvcCBjZW50ZXIiKSxhLmNvZXJjZUZvbnQoYywidGl0bGUuZm9udCIsbi5mb250KX1jKCJzb3J0IiksYygiZGlyZWN0aW9uIiksYygicm90YXRpb24iKSxjKCJwdWxsIil9ZWxzZSBlLnZpc2libGU9ITF9fX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvZG9tYWluIjo3OTAsIi4uL2Jhci9kZWZhdWx0cyI6ODYwLCIuL2F0dHJpYnV0ZXMiOjEwOTQsImZhc3QtaXNudW1lcmljIjoyMjh9XSwxMDk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5TXVsdGlQb2ludFZhbHVlcztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17Y3VydmVOdW1iZXI6ZS5pbmRleCxwb2ludE51bWJlcnM6dC5wdHMsZGF0YTplLl9pbnB1dCxmdWxsRGF0YTplLGxhYmVsOnQubGFiZWwsY29sb3I6dC5jb2xvcix2YWx1ZTp0LnYscGVyY2VudDp0LnBlcmNlbnQsdGV4dDp0LnRleHQsdjp0LnZ9O3JldHVybiAxPT09dC5wdHMubGVuZ3RoJiYoci5wb2ludE51bWJlcj1yLmk9dC5wdHNbMF0pLG4ocixlLHQucHRzKSwiZnVubmVsYXJlYSI9PT1lLnR5cGUmJihkZWxldGUgci52LGRlbGV0ZSByLmkpLHJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6NjI3fV0sMTA5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtyLmZvcm1hdFBpZVBlcmNlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0oMTAwKnQpLnRvUHJlY2lzaW9uKDMpO3JldHVybi0xIT09ci5sYXN0SW5kZXhPZigiLiIpJiYocj1yLnJlcGxhY2UoL1suXT8wKyQvLCIiKSksbi5udW1TZXBhcmF0ZShyLGUpKyIlIn0sci5mb3JtYXRQaWVWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciByPXQudG9QcmVjaXNpb24oMTApO3JldHVybi0xIT09ci5sYXN0SW5kZXhPZigiLiIpJiYocj1yLnJlcGxhY2UoL1suXT8wKyQvLCIiKSksbi5udW1TZXBhcmF0ZShyLGUpfSxyLmdldEZpcnN0RmlsbGVkPWZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49dFtlW3JdXTtpZihufHwwPT09bnx8IiI9PT1uKXJldHVybiBufX0sci5jYXN0T3B0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ci5nZXRGaXJzdEZpbGxlZCh0LGUpOnR8fHZvaWQgMH19LHsiLi4vLi4vbGliIjo3MTd9XSwxMTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uZTp0KCIuL3N0eWxlX29uZSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJwaWUiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbInBpZS1saWtlIiwicGllIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6MTA5NCwiLi9iYXNlX3Bsb3QiOjEwOTUsIi4vY2FsYyI6MTA5NiwiLi9kZWZhdWx0cyI6MTA5NywiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTEwMSwiLi9sYXlvdXRfZGVmYXVsdHMiOjExMDIsIi4vcGxvdCI6MTEwMywiLi9zdHlsZSI6MTEwNCwiLi9zdHlsZV9vbmUiOjExMDV9XSwxMTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aGlkZGVubGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHBpZWNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGVkaXRUeXBlOiJjYWxjIn0sZXh0ZW5kcGllY29sb3JzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTEwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9cigiaGlkZGVubGFiZWxzIikscigicGllY29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHBpZWNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjcxNywiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTEwMX1dLDExMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdT10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IiksaD11LnJlY29yZE1pblRleHRTaXplLGY9dS5jbGVhck1pblRleHRTaXplLHA9dCgiLi9oZWxwZXJzIiksZD10KCIuL2V2ZW50X2RhdGEiKSxnPXQoIi4uLy4uL2xpYiIpLmlzVmFsaWRUZXh0VmFsdWU7ZnVuY3Rpb24gdih0LGUscil7dmFyIGE9clswXSxvPWEudHJhY2Uscz1hLmN4LGM9YS5jeTsiX2hhc0hvdmVyTGFiZWwiaW4gb3x8KG8uX2hhc0hvdmVyTGFiZWw9ITEpLCJfaGFzSG92ZXJFdmVudCJpbiBvfHwoby5faGFzSG92ZXJFdmVudD0hMSksdC5vbigibW91c2VvdmVyIixmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LHU9ZS5fZnVsbERhdGFbby5pbmRleF07aWYoIWUuX2RyYWdnaW5nJiYhMSE9PXIuaG92ZXJtb2RlKXt2YXIgaD11LmhvdmVyaW5mbztpZihBcnJheS5pc0FycmF5KGgpJiYoaD1pLmNhc3RIb3ZlcmluZm8oe2hvdmVyaW5mbzpbcC5jYXN0T3B0aW9uKGgsdC5wdHMpXSxfbW9kdWxlOm8uX21vZHVsZX0sciwwKSksImFsbCI9PT1oJiYoaD0ibGFiZWwrdGV4dCt2YWx1ZStwZXJjZW50K25hbWUiKSx1LmhvdmVydGVtcGxhdGV8fCJub25lIiE9PWgmJiJza2lwIiE9PWgmJmgpe3ZhciBmPXQuckluc2NyaWJlZHx8MCxnPXMrdC5weG1pZFswXSooMS1mKSx2PWMrdC5weG1pZFsxXSooMS1mKSxtPXIuc2VwYXJhdG9ycyx5PVtdO2lmKGgmJi0xIT09aC5pbmRleE9mKCJsYWJlbCIpJiZ5LnB1c2godC5sYWJlbCksdC50ZXh0PXAuY2FzdE9wdGlvbih1LmhvdmVydGV4dHx8dS50ZXh0LHQucHRzKSxoJiYtMSE9PWguaW5kZXhPZigidGV4dCIpKXt2YXIgeD10LnRleHQ7bC5pc1ZhbGlkVGV4dFZhbHVlKHgpJiZ5LnB1c2goeCl9dC52YWx1ZT10LnYsdC52YWx1ZUxhYmVsPXAuZm9ybWF0UGllVmFsdWUodC52LG0pLGgmJi0xIT09aC5pbmRleE9mKCJ2YWx1ZSIpJiZ5LnB1c2godC52YWx1ZUxhYmVsKSx0LnBlcmNlbnQ9dC52L2EudlRvdGFsLHQucGVyY2VudExhYmVsPXAuZm9ybWF0UGllUGVyY2VudCh0LnBlcmNlbnQsbSksaCYmLTEhPT1oLmluZGV4T2YoInBlcmNlbnQiKSYmeS5wdXNoKHQucGVyY2VudExhYmVsKTt2YXIgYj11LmhvdmVybGFiZWwsXz1iLmZvbnQ7aS5sb25lSG92ZXIoe3RyYWNlOm8seDA6Zy1mKmEucix4MTpnK2YqYS5yLHk6dix0ZXh0Onkuam9pbigiPGJyPiIpLG5hbWU6dS5ob3ZlcnRlbXBsYXRlfHwtMSE9PWguaW5kZXhPZigibmFtZSIpP3UubmFtZTp2b2lkIDAsaWRlYWxBbGlnbjp0LnB4bWlkWzBdPDA/ImxlZnQiOiJyaWdodCIsY29sb3I6cC5jYXN0T3B0aW9uKGIuYmdjb2xvcix0LnB0cyl8fHQuY29sb3IsYm9yZGVyQ29sb3I6cC5jYXN0T3B0aW9uKGIuYm9yZGVyY29sb3IsdC5wdHMpLGZvbnRGYW1pbHk6cC5jYXN0T3B0aW9uKF8uZmFtaWx5LHQucHRzKSxmb250U2l6ZTpwLmNhc3RPcHRpb24oXy5zaXplLHQucHRzKSxmb250Q29sb3I6cC5jYXN0T3B0aW9uKF8uY29sb3IsdC5wdHMpLG5hbWVMZW5ndGg6cC5jYXN0T3B0aW9uKGIubmFtZWxlbmd0aCx0LnB0cyksdGV4dEFsaWduOnAuY2FzdE9wdGlvbihiLmFsaWduLHQucHRzKSxob3ZlcnRlbXBsYXRlOnAuY2FzdE9wdGlvbih1LmhvdmVydGVtcGxhdGUsdC5wdHMpLGhvdmVydGVtcGxhdGVMYWJlbHM6dCxldmVudERhdGE6W2QodCx1KV19LHtjb250YWluZXI6ci5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6ci5fcGFwZXIubm9kZSgpLGdkOmV9KSxvLl9oYXNIb3ZlckxhYmVsPSEwfW8uX2hhc0hvdmVyRXZlbnQ9ITAsZS5lbWl0KCJwbG90bHlfaG92ZXIiLHtwb2ludHM6W2QodCx1KV0sZXZlbnQ6bi5ldmVudH0pfX0pLHQub24oIm1vdXNlb3V0IixmdW5jdGlvbih0KXt2YXIgcj1lLl9mdWxsTGF5b3V0LGE9ZS5fZnVsbERhdGFbby5pbmRleF0scz1uLnNlbGVjdCh0aGlzKS5kYXR1bSgpO28uX2hhc0hvdmVyRXZlbnQmJih0Lm9yaWdpbmFsRXZlbnQ9bi5ldmVudCxlLmVtaXQoInBsb3RseV91bmhvdmVyIix7cG9pbnRzOltkKHMsYSldLGV2ZW50Om4uZXZlbnR9KSxvLl9oYXNIb3ZlckV2ZW50PSExKSxvLl9oYXNIb3ZlckxhYmVsJiYoaS5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSksby5faGFzSG92ZXJMYWJlbD0hMSl9KSx0Lm9uKCJjbGljayIsZnVuY3Rpb24odCl7dmFyIHI9ZS5fZnVsbExheW91dCxhPWUuX2Z1bGxEYXRhW28uaW5kZXhdO2UuX2RyYWdnaW5nfHwhMT09PXIuaG92ZXJtb2RlfHwoZS5faG92ZXJkYXRhPVtkKHQsYSldLGkuY2xpY2soZSxuLmV2ZW50KSl9KX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgbj1wLmNhc3RPcHRpb24odC5pbnNpZGV0ZXh0Zm9udC5jb2xvcixlLnB0cyk7IW4mJnQuX2lucHV0LnRleHRmb250JiYobj1wLmNhc3RPcHRpb24odC5faW5wdXQudGV4dGZvbnQuY29sb3IsZS5wdHMpKTt2YXIgYT1wLmNhc3RPcHRpb24odC5pbnNpZGV0ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxwLmNhc3RPcHRpb24odC50ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxyLmZhbWlseSxpPXAuY2FzdE9wdGlvbih0Lmluc2lkZXRleHRmb250LnNpemUsZS5wdHMpfHxwLmNhc3RPcHRpb24odC50ZXh0Zm9udC5zaXplLGUucHRzKXx8ci5zaXplO3JldHVybntjb2xvcjpufHxvLmNvbnRyYXN0KGUuY29sb3IpLGZhbWlseTphLHNpemU6aX19ZnVuY3Rpb24geSh0LGUpe2Zvcih2YXIgcixuLGE9MDthPHQubGVuZ3RoO2ErKylpZigobj0ocj10W2FdWzBdKS50cmFjZSkudGl0bGUudGV4dCl7dmFyIGk9bi50aXRsZS50ZXh0O24uX21ldGEmJihpPWwudGVtcGxhdGVTdHJpbmcoaSxuLl9tZXRhKSk7dmFyIG89cy50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkudGV4dChpKS5jYWxsKHMuZm9udCxuLnRpdGxlLmZvbnQpLmNhbGwoYy5jb252ZXJ0VG9Uc3BhbnMsZSksdT1zLmJCb3goby5ub2RlKCksITApO3IudGl0bGVCb3g9e3dpZHRoOnUud2lkdGgsaGVpZ2h0OnUuaGVpZ2h0fSxvLnJlbW92ZSgpfX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbixhPU1hdGguc3FydCh0LndpZHRoKnQud2lkdGgrdC5oZWlnaHQqdC5oZWlnaHQpLGk9ZS5oYWxmYW5nbGUsbz1lLm1pZGFuZ2xlLHM9ZS5yaW5nLGw9ZS5ySW5zY3JpYmVkLGM9ci5yfHxlLnJweDEsdT1yLnRyYWNlLmluc2lkZXRleHRvcmllbnRhdGlvbixoPSJob3Jpem9udGFsIj09PXUsZj0idGFuZ2VudGlhbCI9PT11LHA9InJhZGlhbCI9PT11LGQ9ImF1dG8iPT09dSxnPTE9PT1zJiZNYXRoLmFicyhlLnN0YXJ0YW5nbGUtZS5zdG9wYW5nbGUpPT09MipNYXRoLlBJLHY9W107aWYoIWQpe3ZhciBtLHk9ZnVuY3Rpb24ocixhKXtpZihmdW5jdGlvbih0LGUpe3ZhciByPXQuc3RhcnRhbmdsZSxuPXQuc3RvcGFuZ2xlO3JldHVybiByPmUmJmU+bnx8cjxlJiZlPG59KGUscikpe3ZhciBpPU1hdGguYWJzKHItZS5zdGFydGFuZ2xlKSxvPU1hdGguYWJzKHItZS5zdG9wYW5nbGUpLGw9aTxvP2k6bzsobj0idGFuIj09PWE/Xyh0LGMscyxsLDApOmIodCxjLHMsbCxNYXRoLlBJLzIpKS50ZXh0UG9zQW5nbGU9cix2LnB1c2gobil9fTtpZihofHxmKXtmb3IobT00O20+PS00O20tPTIpeShNYXRoLlBJKm0sInRhbiIpO2ZvcihtPTQ7bT49LTQ7bS09Mil5KE1hdGguUEkqKG0rMSksInRhbiIpfWlmKGh8fHApe2ZvcihtPTQ7bT49LTQ7bS09Mil5KE1hdGguUEkqKG0rMS41KSwicmFkIik7Zm9yKG09NDttPj0tNDttLT0yKXkoTWF0aC5QSSoobSsuNSksInJhZCIpfX1pZihnfHxkfHxoKXtpZigobj17c2NhbGU6bCpjKjIvYSxyQ2VudGVyOjEtbCxyb3RhdGU6MH0pLnRleHRQb3NBbmdsZT0oZS5zdGFydGFuZ2xlK2Uuc3RvcGFuZ2xlKS8yLG4uc2NhbGU+PTEpcmV0dXJuIG47di5wdXNoKG4pfShkfHxwKSYmKChuPWIodCxjLHMsaSxvKSkudGV4dFBvc0FuZ2xlPShlLnN0YXJ0YW5nbGUrZS5zdG9wYW5nbGUpLzIsdi5wdXNoKG4pKSwoZHx8ZikmJigobj1fKHQsYyxzLGksbykpLnRleHRQb3NBbmdsZT0oZS5zdGFydGFuZ2xlK2Uuc3RvcGFuZ2xlKS8yLHYucHVzaChuKSk7Zm9yKHZhciB4PTAsdz0wLGs9MDtrPHYubGVuZ3RoO2srKyl7dmFyIFQ9dltrXS5zY2FsZTtpZih3PFQmJih3PVQseD1rKSwhZCYmdz49MSlicmVha31yZXR1cm4gdlt4XX1mdW5jdGlvbiBiKHQsZSxyLG4sYSl7dmFyIGk9dC53aWR0aC90LmhlaWdodCxvPVQoaSxuLGUscik7cmV0dXJue3NjYWxlOjIqby90LmhlaWdodCxyQ2VudGVyOncoaSxvL2UpLHJvdGF0ZTprKGEpfX1mdW5jdGlvbiBfKHQsZSxyLG4sYSl7dmFyIGk9dC5oZWlnaHQvdC53aWR0aCxvPVQoaSxuLGUscik7cmV0dXJue3NjYWxlOjIqby90LndpZHRoLHJDZW50ZXI6dyhpLG8vZSkscm90YXRlOmsoYStNYXRoLlBJLzIpfX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIE1hdGguY29zKGUpLXQqZX1mdW5jdGlvbiBrKHQpe3JldHVybigxODAvTWF0aC5QSSp0KzcyMCklMTgwLTkwfWZ1bmN0aW9uIFQodCxlLHIsbil7dmFyIGE9dCsxLygyKk1hdGgudGFuKGUpKTtyZXR1cm4gcipNYXRoLm1pbigxLyhNYXRoLnNxcnQoYSphKy41KSthKSxuLyhNYXRoLnNxcnQodCp0K24vMikrdCkpfWZ1bmN0aW9uIE0odCxlKXtyZXR1cm4gdC52IT09ZS52VG90YWx8fGUudHJhY2UuaG9sZT9NYXRoLm1pbigxLygxKzEvTWF0aC5zaW4odC5oYWxmYW5nbGUpKSx0LnJpbmcvMik6MX1mdW5jdGlvbiBBKHQsZSl7dmFyIHI9ZS5weG1pZFswXSxuPWUucHhtaWRbMV0sYT10LndpZHRoLzIsaT10LmhlaWdodC8yO3JldHVybiByPDAmJihhKj0tMSksbjwwJiYoaSo9LTEpLHtzY2FsZToxLHJDZW50ZXI6MSxyb3RhdGU6MCx4OmErTWF0aC5hYnMoaSkqKGE+MD8xOi0xKS8yLHk6aS8oMStyKnIvKG4qbikpLG91dHNpZGU6ITB9fWZ1bmN0aW9uIFModCxlKXt2YXIgcixuLGEsaT10LnRyYWNlLG89e3g6dC5jeCx5OnQuY3l9LHM9e3R4OjAsdHk6MH07cy50eSs9aS50aXRsZS5mb250LnNpemUsYT1MKGkpLC0xIT09aS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJ0b3AiKT8oby55LT0oMSthKSp0LnIscy50eS09dC50aXRsZUJveC5oZWlnaHQpOi0xIT09aS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSYmKG8ueSs9KDErYSkqdC5yKTt2YXIgbCxjLHU9KGw9dC5yLGM9dC50cmFjZS5hc3BlY3RyYXRpbyxsLyh2b2lkIDA9PT1jPzE6YykpLGg9ZS53KihpLmRvbWFpbi54WzFdLWkuZG9tYWluLnhbMF0pLzI7cmV0dXJuLTEhPT1pLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImxlZnQiKT8oaCs9dSxvLngtPSgxK2EpKnUscy50eCs9dC50aXRsZUJveC53aWR0aC8yKTotMSE9PWkudGl0bGUucG9zaXRpb24uaW5kZXhPZigiY2VudGVyIik/aCo9MjotMSE9PWkudGl0bGUucG9zaXRpb24uaW5kZXhPZigicmlnaHQiKSYmKGgrPXUsby54Kz0oMSthKSp1LHMudHgtPXQudGl0bGVCb3gud2lkdGgvMikscj1oL3QudGl0bGVCb3gud2lkdGgsbj1FKHQsZSkvdC50aXRsZUJveC5oZWlnaHQse3g6by54LHk6by55LHNjYWxlOk1hdGgubWluKHIsbiksdHg6cy50eCx0eTpzLnR5fX1mdW5jdGlvbiBFKHQsZSl7dmFyIHI9dC50cmFjZSxuPWUuaCooci5kb21haW4ueVsxXS1yLmRvbWFpbi55WzBdKTtyZXR1cm4gTWF0aC5taW4odC50aXRsZUJveC5oZWlnaHQsbi8yKX1mdW5jdGlvbiBMKHQpe3ZhciBlLHI9dC5wdWxsO2lmKCFyKXJldHVybiAwO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHI9MCxlPTA7ZTx0LnB1bGwubGVuZ3RoO2UrKyl0LnB1bGxbZV0+ciYmKHI9dC5wdWxsW2VdKTtyZXR1cm4gcn1mdW5jdGlvbiBDKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGE9dFtuXVswXSxpPWEudHJhY2Usbz1pLmRvbWFpbixzPWUudyooby54WzFdLW8ueFswXSksbD1lLmgqKG8ueVsxXS1vLnlbMF0pO2kudGl0bGUudGV4dCYmIm1pZGRsZSBjZW50ZXIiIT09aS50aXRsZS5wb3NpdGlvbiYmKGwtPUUoYSxlKSk7dmFyIGM9cy8yLHU9bC8yOyJmdW5uZWxhcmVhIiE9PWkudHlwZXx8aS5zY2FsZWdyb3VwfHwodS89aS5hc3BlY3RyYXRpbyksYS5yPU1hdGgubWluKGMsdSkvKDErTChpKSksYS5jeD1lLmwrZS53KihpLmRvbWFpbi54WzFdK2kuZG9tYWluLnhbMF0pLzIsYS5jeT1lLnQrZS5oKigxLWkuZG9tYWluLnlbMF0pLWwvMixpLnRpdGxlLnRleHQmJi0xIT09aS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSYmKGEuY3ktPUUoYSxlKSksaS5zY2FsZWdyb3VwJiYtMT09PXIuaW5kZXhPZihpLnNjYWxlZ3JvdXApJiZyLnB1c2goaS5zY2FsZWdyb3VwKX0hZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixhLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89MS8wLHM9ZVtpXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKHI9dFtuXVswXSwoYT1yLnRyYWNlKS5zY2FsZWdyb3VwPT09cyl7dmFyIGw7aWYoInBpZSI9PT1hLnR5cGUpbD1yLnIqci5yO2Vsc2UgaWYoImZ1bm5lbGFyZWEiPT09YS50eXBlKXt2YXIgYyx1O2EuYXNwZWN0cmF0aW8+MT8oYz1yLnIsdT1jL2EuYXNwZWN0cmF0aW8pOih1PXIucixjPXUqYS5hc3BlY3RyYXRpbyksYyo9KDErYS5iYXNlcmF0aW8pLzIsbD1jKnV9bz1NYXRoLm1pbihvLGwvci52VG90YWwpfWZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaWYocj10W25dWzBdLChhPXIudHJhY2UpLnNjYWxlZ3JvdXA9PT1zKXt2YXIgaD1vKnIudlRvdGFsOyJmdW5uZWxhcmVhIj09PWEudHlwZSYmKGgvPSgxK2EuYmFzZXJhdGlvKS8yLGgvPWEuYXNwZWN0cmF0aW8pLHIucj1NYXRoLnNxcnQoaCl9fX0odCxyKX1mdW5jdGlvbiBQKHQsZSl7cmV0dXJuW3QqTWF0aC5zaW4oZSksLXQqTWF0aC5jb3MoZSldfWZ1bmN0aW9uIE8odCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsYT1yLnRyYWNlLGk9YS50ZXh0dGVtcGxhdGUsbz1hLnRleHRpbmZvO2lmKCFpJiZvJiYibm9uZSIhPT1vKXt2YXIgcyxjPW8uc3BsaXQoIisiKSx1PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09Yy5pbmRleE9mKHQpfSxoPXUoImxhYmVsIiksZj11KCJ0ZXh0IiksZD11KCJ2YWx1ZSIpLHY9dSgicGVyY2VudCIpLG09bi5zZXBhcmF0b3JzO2lmKHM9aD9bZS5sYWJlbF06W10sZil7dmFyIHk9cC5nZXRGaXJzdEZpbGxlZChhLnRleHQsZS5wdHMpO2coeSkmJnMucHVzaCh5KX1kJiZzLnB1c2gocC5mb3JtYXRQaWVWYWx1ZShlLnYsbSkpLHYmJnMucHVzaChwLmZvcm1hdFBpZVBlcmNlbnQoZS52L3IudlRvdGFsLG0pKSxlLnRleHQ9cy5qb2luKCI8YnI+Iil9aWYoaSl7dmFyIHg9bC5jYXN0T3B0aW9uKGEsZS5pLCJ0ZXh0dGVtcGxhdGUiKTtpZih4KXt2YXIgYj1mdW5jdGlvbih0KXtyZXR1cm57bGFiZWw6dC5sYWJlbCx2YWx1ZTp0LnYsdmFsdWVMYWJlbDpwLmZvcm1hdFBpZVZhbHVlKHQudixuLnNlcGFyYXRvcnMpLHBlcmNlbnQ6dC52L3IudlRvdGFsLHBlcmNlbnRMYWJlbDpwLmZvcm1hdFBpZVBlcmNlbnQodC52L3IudlRvdGFsLG4uc2VwYXJhdG9ycyksY29sb3I6dC5jb2xvcix0ZXh0OnQudGV4dCxjdXN0b21kYXRhOmwuY2FzdE9wdGlvbihhLHQuaSwiY3VzdG9tZGF0YSIpfX0oZSksXz1wLmdldEZpcnN0RmlsbGVkKGEudGV4dCxlLnB0cyk7KGcoXyl8fCIiPT09XykmJihiLnRleHQ9XyksZS50ZXh0PWwudGV4dHRlbXBsYXRlU3RyaW5nKHgsYix0Ll9mdWxsTGF5b3V0Ll9kM2xvY2FsZSxiLGEuX21ldGF8fHt9KX1lbHNlIGUudGV4dD0iIn19ZnVuY3Rpb24geih0LGUpe3ZhciByPXQucm90YXRlLG49dC5zY2FsZTtuPjEmJihuPTEpO3ZhciBhPXIqTWF0aC5QSS8xODAsaT1NYXRoLmNvcyhhKSxvPU1hdGguc2luKGEpLHM9KGUubGVmdCtlLnJpZ2h0KS8yLGw9KGUudG9wK2UuYm90dG9tKS8yO3QudGV4dFg9cyppLWwqbyx0LnRleHRZPXMqbytsKmksdC5ub0NlbnRlcj0hMH1lLmV4cG9ydHM9e3Bsb3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGk9ci5fc2l6ZTtmKCJwaWUiLHIpLHkoZSx0KSxDKGUsaSk7dmFyIHU9bC5tYWtlVHJhY2VHcm91cHMoci5fcGllbGF5ZXIsZSwidHJhY2UiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciB1PW4uc2VsZWN0KHRoaXMpLGY9ZVswXSxkPWYudHJhY2U7IWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhPXRbMF0saT1hLnIsbz1hLnRyYWNlLHM9by5yb3RhdGlvbipNYXRoLlBJLzE4MCxsPTIqTWF0aC5QSS9hLnZUb3RhbCxjPSJweDAiLHU9InB4MSI7aWYoImNvdW50ZXJjbG9ja3dpc2UiPT09by5kaXJlY3Rpb24pe2ZvcihlPTA7ZTx0Lmxlbmd0aCYmdFtlXS5oaWRkZW47ZSsrKTtpZihlPT09dC5sZW5ndGgpcmV0dXJuO3MrPWwqdFtlXS52LGwqPS0xLGM9InB4MSIsdT0icHgwIn1mb3Iobj1QKGkscyksZT0wO2U8dC5sZW5ndGg7ZSsrKShyPXRbZV0pLmhpZGRlbnx8KHJbY109bixyLnN0YXJ0YW5nbGU9cyxzKz1sKnIudi8yLHIucHhtaWQ9UChpLHMpLHIubWlkYW5nbGU9cyxzKz1sKnIudi8yLG49UChpLHMpLHIuc3RvcGFuZ2xlPXMsclt1XT1uLHIubGFyZ2VBcmM9ci52PmEudlRvdGFsLzI/MTowLHIuaGFsZmFuZ2xlPU1hdGguUEkqTWF0aC5taW4oci52L2EudlRvdGFsLC41KSxyLnJpbmc9MS1vLmhvbGUsci5ySW5zY3JpYmVkPU0ocixhKSl9KGUpLHUuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKSx1LmVhY2goZnVuY3Rpb24oKXt2YXIgZz1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuc2xpY2UiKS5kYXRhKGUpO2cuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZSIsITApLGcuZXhpdCgpLnJlbW92ZSgpO3ZhciB5PVtbW10sW11dLFtbXSxbXV1dLGI9ITE7Zy5lYWNoKGZ1bmN0aW9uKGEsaSl7aWYoYS5oaWRkZW4pbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLGciKS5yZW1vdmUoKTtlbHNle2EucG9pbnROdW1iZXI9YS5pLGEuY3VydmVOdW1iZXI9ZC5pbmRleCx5W2EucHhtaWRbMV08MD8wOjFdW2EucHhtaWRbMF08MD8wOjFdLnB1c2goYSk7dmFyIG89Zi5jeCx1PWYuY3ksZz1uLnNlbGVjdCh0aGlzKSxfPWcuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5kYXRhKFthXSk7aWYoXy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInN1cmZhY2UiLCEwKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoiYWxsIn0pLGcuY2FsbCh2LHQsZSksZC5wdWxsKXt2YXIgdz0rcC5jYXN0T3B0aW9uKGQucHVsbCxhLnB0cyl8fDA7dz4wJiYobys9dyphLnB4bWlkWzBdLHUrPXcqYS5weG1pZFsxXSl9YS5jeEZpbmFsPW8sYS5jeUZpbmFsPXU7dmFyIGs9ZC5ob2xlO2lmKGEudj09PWYudlRvdGFsKXt2YXIgVD0iTSIrKG8rYS5weDBbMF0pKyIsIisodSthLnB4MFsxXSkrQyhhLnB4MCxhLnB4bWlkLCEwLDEpK0MoYS5weG1pZCxhLnB4MCwhMCwxKSsiWiI7az9fLmF0dHIoImQiLCJNIisobytrKmEucHgwWzBdKSsiLCIrKHUrayphLnB4MFsxXSkrQyhhLnB4MCxhLnB4bWlkLCExLGspK0MoYS5weG1pZCxhLnB4MCwhMSxrKSsiWiIrVCk6Xy5hdHRyKCJkIixUKX1lbHNle3ZhciBNPUMoYS5weDAsYS5weDEsITAsMSk7aWYoayl7dmFyIFM9MS1rO18uYXR0cigiZCIsIk0iKyhvK2sqYS5weDFbMF0pKyIsIisodStrKmEucHgxWzFdKStDKGEucHgxLGEucHgwLCExLGspKyJsIitTKmEucHgwWzBdKyIsIitTKmEucHgwWzFdK00rIloiKX1lbHNlIF8uYXR0cigiZCIsIk0iK28rIiwiK3UrImwiK2EucHgwWzBdKyIsIithLnB4MFsxXStNKyJaIil9Tyh0LGEsZik7dmFyIEU9cC5jYXN0T3B0aW9uKGQudGV4dHBvc2l0aW9uLGEucHRzKSxMPWcuc2VsZWN0QWxsKCJnLnNsaWNldGV4dCIpLmRhdGEoYS50ZXh0JiYibm9uZSIhPT1FP1swXTpbXSk7TC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLEwuZXhpdCgpLnJlbW92ZSgpLEwuZWFjaChmdW5jdGlvbigpe3ZhciBnPWwuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJ0ZXh0IiwiIixmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSksdj1sLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LCJvdXRzaWRlIj09PUU/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXAuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5jb2xvcixlLnB0cyl8fHAuY2FzdE9wdGlvbih0LnRleHRmb250LmNvbG9yLGUucHRzKXx8ci5jb2xvcixhPXAuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxwLmNhc3RPcHRpb24odC50ZXh0Zm9udC5mYW1pbHksZS5wdHMpfHxyLmZhbWlseSxpPXAuY2FzdE9wdGlvbih0Lm91dHNpZGV0ZXh0Zm9udC5zaXplLGUucHRzKXx8cC5jYXN0T3B0aW9uKHQudGV4dGZvbnQuc2l6ZSxlLnB0cyl8fHIuc2l6ZTtyZXR1cm57Y29sb3I6bixmYW1pbHk6YSxzaXplOml9fShkLGEsci5mb250KTptKGQsYSxyLmZvbnQpKTtnLnRleHQoYS50ZXh0KS5hdHRyKHtjbGFzczoic2xpY2V0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwocy5mb250LHYpLmNhbGwoYy5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIHksXz1zLmJCb3goZy5ub2RlKCkpO2lmKCJvdXRzaWRlIj09PUUpeT1BKF8sYSk7ZWxzZSBpZih5PXgoXyxhLGYpLCJhdXRvIj09PUUmJnkuc2NhbGU8MSl7dmFyIHc9bC5lbnN1cmVVbmlmb3JtRm9udFNpemUodCxkLm91dHNpZGV0ZXh0Zm9udCk7Zy5jYWxsKHMuZm9udCx3KSx5PUEoXz1zLmJCb3goZy5ub2RlKCkpLGEpfXZhciBrPXkudGV4dFBvc0FuZ2xlLFQ9dm9pZCAwPT09az9hLnB4bWlkOlAoZi5yLGspO2lmKHkudGFyZ2V0WD1vK1RbMF0qeS5yQ2VudGVyKyh5Lnh8fDApLHkudGFyZ2V0WT11K1RbMV0qeS5yQ2VudGVyKyh5Lnl8fDApLHooeSxfKSx5Lm91dHNpZGUpe3ZhciBNPXkudGFyZ2V0WTthLnlMYWJlbE1pbj1NLV8uaGVpZ2h0LzIsYS55TGFiZWxNaWQ9TSxhLnlMYWJlbE1heD1NK18uaGVpZ2h0LzIsYS5sYWJlbEV4dHJhWD0wLGEubGFiZWxFeHRyYVk9MCxiPSEwfXkuZm9udFNpemU9di5zaXplLGgoZC50eXBlLHksciksZVtpXS50cmFuc2Zvcm09eSxnLmF0dHIoInRyYW5zZm9ybSIsbC5nZXRUZXh0VHJhbnNmb3JtKHkpKX0pfWZ1bmN0aW9uIEModCxlLHIsbil7dmFyIGk9biooZVswXS10WzBdKSxvPW4qKGVbMV0tdFsxXSk7cmV0dXJuImEiK24qZi5yKyIsIituKmYucisiIDAgIithLmxhcmdlQXJjKyhyPyIgMSAiOiIgMCAiKStpKyIsIitvfX0pO3ZhciBfPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy50aXRsZXRleHQiKS5kYXRhKGQudGl0bGUudGV4dD9bMF06W10pO2lmKF8uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0aXRsZXRleHQiLCEwKSxfLmV4aXQoKS5yZW1vdmUoKSxfLmVhY2goZnVuY3Rpb24oKXt2YXIgZSxyPWwuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJ0ZXh0IiwiIixmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSksYT1kLnRpdGxlLnRleHQ7ZC5fbWV0YSYmKGE9bC50ZW1wbGF0ZVN0cmluZyhhLGQuX21ldGEpKSxyLnRleHQoYSkuYXR0cih7Y2xhc3M6InRpdGxldGV4dCIsdHJhbnNmb3JtOiIiLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9KS5jYWxsKHMuZm9udCxkLnRpdGxlLmZvbnQpLmNhbGwoYy5jb252ZXJ0VG9Uc3BhbnMsdCksZT0ibWlkZGxlIGNlbnRlciI9PT1kLnRpdGxlLnBvc2l0aW9uP2Z1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0LnRpdGxlQm94LndpZHRoKnQudGl0bGVCb3gud2lkdGgrdC50aXRsZUJveC5oZWlnaHQqdC50aXRsZUJveC5oZWlnaHQpO3JldHVybnt4OnQuY3gseTp0LmN5LHNjYWxlOnQudHJhY2UuaG9sZSp0LnIqMi9lLHR4OjAsdHk6LXQudGl0bGVCb3guaGVpZ2h0LzIrdC50cmFjZS50aXRsZS5mb250LnNpemV9fShmKTpTKGYsaSksci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLngrIiwiK2UueSsiKSIrKGUuc2NhbGU8MT8ic2NhbGUoIitlLnNjYWxlKyIpIjoiIikrInRyYW5zbGF0ZSgiK2UudHgrIiwiK2UudHkrIikiKX0pLGImJmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhLGksbyxzLGwsYyx1LGgsZixkLGc7ZnVuY3Rpb24gdih0LGUpe3JldHVybiB0LnB4bWlkWzFdLWUucHhtaWRbMV19ZnVuY3Rpb24gbSh0LGUpe3JldHVybiBlLnB4bWlkWzFdLXQucHhtaWRbMV19ZnVuY3Rpb24geSh0LHIpe3J8fChyPXt9KTt2YXIgYSxjLHUsZixkLGcsdj1yLmxhYmVsRXh0cmFZKyhuP3IueUxhYmVsTWF4OnIueUxhYmVsTWluKSxtPW4/dC55TGFiZWxNaW46dC55TGFiZWxNYXgseT1uP3QueUxhYmVsTWF4OnQueUxhYmVsTWluLHg9dC5jeUZpbmFsK28odC5weDBbMV0sdC5weDFbMV0pLGI9di1tO2lmKGIqbD4wJiYodC5sYWJlbEV4dHJhWT1iKSxBcnJheS5pc0FycmF5KGUucHVsbCkpZm9yKGM9MDtjPGgubGVuZ3RoO2MrKykodT1oW2NdKT09PXR8fChwLmNhc3RPcHRpb24oZS5wdWxsLHQucHRzKXx8MCk+PShwLmNhc3RPcHRpb24oZS5wdWxsLHUucHRzKXx8MCl8fCgodC5weG1pZFsxXS11LnB4bWlkWzFdKSpsPjA/KGY9dS5jeUZpbmFsK28odS5weDBbMV0sdS5weDFbMV0pLChiPWYtbS10LmxhYmVsRXh0cmFZKSpsPjAmJih0LmxhYmVsRXh0cmFZKz1iKSk6KHkrdC5sYWJlbEV4dHJhWS14KSpsPjAmJihhPTMqcypNYXRoLmFicyhjLWguaW5kZXhPZih0KSksZD11LmN4RmluYWwraSh1LnB4MFswXSx1LnB4MVswXSksKGc9ZCthLSh0LmN4RmluYWwrdC5weG1pZFswXSktdC5sYWJlbEV4dHJhWCkqcz4wJiYodC5sYWJlbEV4dHJhWCs9ZykpKX1mb3Iobj0wO248MjtuKyspZm9yKGE9bj92Om0sbz1uP01hdGgubWF4Ok1hdGgubWluLGw9bj8xOi0xLHI9MDtyPDI7cisrKXtmb3IoaT1yP01hdGgubWF4Ok1hdGgubWluLHM9cj8xOi0xLChjPXRbbl1bcl0pLnNvcnQoYSksdT10WzEtbl1bcl0saD11LmNvbmNhdChjKSxkPVtdLGY9MDtmPGMubGVuZ3RoO2YrKyl2b2lkIDAhPT1jW2ZdLnlMYWJlbE1pZCYmZC5wdXNoKGNbZl0pO2ZvcihnPSExLGY9MDtuJiZmPHUubGVuZ3RoO2YrKylpZih2b2lkIDAhPT11W2ZdLnlMYWJlbE1pZCl7Zz11W2ZdO2JyZWFrfWZvcihmPTA7ZjxkLmxlbmd0aDtmKyspe3ZhciB4PWYmJmRbZi0xXTtnJiYhZiYmKHg9ZykseShkW2ZdLHgpfX19KHksZCksZnVuY3Rpb24odCxlKXt0LmVhY2goZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7aWYodC5sYWJlbEV4dHJhWHx8dC5sYWJlbEV4dHJhWSl7dmFyIGE9ci5zZWxlY3QoImcuc2xpY2V0ZXh0IHRleHQiKTt0LnRyYW5zZm9ybS50YXJnZXRYKz10LmxhYmVsRXh0cmFYLHQudHJhbnNmb3JtLnRhcmdldFkrPXQubGFiZWxFeHRyYVksYS5hdHRyKCJ0cmFuc2Zvcm0iLGwuZ2V0VGV4dFRyYW5zZm9ybSh0LnRyYW5zZm9ybSkpO3ZhciBpPXQuY3hGaW5hbCt0LnB4bWlkWzBdLHM9dC5jeUZpbmFsK3QucHhtaWRbMV0sYz0iTSIraSsiLCIrcyx1PSh0LnlMYWJlbE1heC10LnlMYWJlbE1pbikqKHQucHhtaWRbMF08MD8tMToxKS80O2lmKHQubGFiZWxFeHRyYVgpe3ZhciBoPXQubGFiZWxFeHRyYVgqdC5weG1pZFsxXS90LnB4bWlkWzBdLGY9dC55TGFiZWxNaWQrdC5sYWJlbEV4dHJhWS0odC5jeUZpbmFsK3QucHhtaWRbMV0pO01hdGguYWJzKGgpPk1hdGguYWJzKGYpP2MrPSJsIitmKnQucHhtaWRbMF0vdC5weG1pZFsxXSsiLCIrZisiSCIrKGkrdC5sYWJlbEV4dHJhWCt1KTpjKz0ibCIrdC5sYWJlbEV4dHJhWCsiLCIraCsidiIrKGYtaCkrImgiK3V9ZWxzZSBjKz0iViIrKHQueUxhYmVsTWlkK3QubGFiZWxFeHRyYVkpKyJoIit1O2wuZW5zdXJlU2luZ2xlKHIsInBhdGgiLCJ0ZXh0bGluZSIpLmNhbGwoby5zdHJva2UsZS5vdXRzaWRldGV4dGZvbnQuY29sb3IpLmF0dHIoeyJzdHJva2Utd2lkdGgiOk1hdGgubWluKDIsZS5vdXRzaWRldGV4dGZvbnQuc2l6ZS84KSxkOmMsZmlsbDoibm9uZSJ9KX1lbHNlIHIuc2VsZWN0KCJwYXRoLnRleHRsaW5lIikucmVtb3ZlKCl9KX0oZyxkKSxiJiZkLmF1dG9tYXJnaW4pe3ZhciB3PXMuYkJveCh1Lm5vZGUoKSksaz1kLmRvbWFpbixUPWkudyooay54WzFdLWsueFswXSksTT1pLmgqKGsueVsxXS1rLnlbMF0pLEU9KC41KlQtZi5yKS9pLncsTD0oLjUqTS1mLnIpL2kuaDthLmF1dG9NYXJnaW4odCwicGllLiIrZC51aWQrIi5hdXRvbWFyZ2luIix7eGw6ay54WzBdLUUseHI6ay54WzFdK0UseWI6ay55WzBdLUwseXQ6ay55WzFdK0wsbDpNYXRoLm1heChmLmN4LWYuci13LmxlZnQsMCkscjpNYXRoLm1heCh3LnJpZ2h0LShmLmN4K2YuciksMCksYjpNYXRoLm1heCh3LmJvdHRvbS0oZi5jeStmLnIpLDApLHQ6TWF0aC5tYXgoZi5jeS1mLnItdy50b3AsMCkscGFkOjV9KX19KX0pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt1LnNlbGVjdEFsbCgidHNwYW4iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5hdHRyKCJkeSIpJiZ0LmF0dHIoImR5Iix0LmF0dHIoImR5IikpfSl9LDApfSxmb3JtYXRTbGljZUxhYmVsOk8sdHJhbnNmb3JtSW5zaWRlVGV4dDp4LGRldGVybWluZUluc2lkZVRleHRGb250Om0scG9zaXRpb25UaXRsZU91dHNpZGU6UyxwcmVyZW5kZXJUaXRsZXM6eSxsYXlvdXRBcmVhczpDLGF0dGFjaEZ4SGFuZGxlcnM6dixjb21wdXRlVHJhbnNmb3JtOnp9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uLy4uL2NvbXBvbmVudHMvZngiOjYzMCwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQxLCIuLi8uLi9wbG90cy9wbG90cyI6ODI2LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo4NzIsIi4vZXZlbnRfZGF0YSI6MTA5OCwiLi9oZWxwZXJzIjoxMDk5LGQzOjE2NX1dLDExMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4vc3R5bGVfb25lIiksaT10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVzaXplVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fcGllbGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKTtpKHQsZSwicGllIiksZS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKTtyLnN0eWxlKHtvcGFjaXR5OmUub3BhY2l0eX0pLHIuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwoYSx0LGUpfSl9KX19LHsiLi4vYmFyL3VuaWZvcm1fdGV4dCI6ODcyLCIuL3N0eWxlX29uZSI6MTEwNSxkMzoxNjV9XSwxMTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4vaGVscGVycyIpLmNhc3RPcHRpb247ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yLm1hcmtlci5saW5lLG89YShpLmNvbG9yLGUucHRzKXx8bi5kZWZhdWx0TGluZSxzPWEoaS53aWR0aCxlLnB0cyl8fDA7dC5zdHlsZSgic3Ryb2tlLXdpZHRoIixzKS5jYWxsKG4uZmlsbCxlLmNvbG9yKS5jYWxsKG4uc3Ryb2tlLG8pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4vaGVscGVycyI6MTA5OX1dLDExMDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXt4Om4ueCx5Om4ueSx4eTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxpbmRpY2VzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHhib3VuZHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seWJvdW5kczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Om4udGV4dCxtYXJrZXI6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMSxlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSxibGVuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1pbjp7dmFsVHlwZToibnVtYmVyIixtaW46LjEsbWF4OjIsZGZsdDouNSxlZGl0VHlwZToiY2FsYyJ9LHNpemVtYXg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4xLGRmbHQ6MjAsZWRpdFR5cGU6ImNhbGMifSxib3JkZXI6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMSxlZGl0VHlwZToiY2FsYyJ9LGFyZWFyYXRpbzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sdHJhbnNmb3Jtczp2b2lkIDB9fSx7Ii4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTEyMH1dLDExMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtcG9pbnRjbG91ZDJkIiksYT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZmluZEV4dHJlbWVzLG89dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKTtmdW5jdGlvbiBzKHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy50eXBlPSJwb2ludGNsb3VkIix0aGlzLnBpY2tYRGF0YT1bXSx0aGlzLnBpY2tZRGF0YT1bXSx0aGlzLnhEYXRhPVtdLHRoaXMueURhdGE9W10sdGhpcy50ZXh0TGFiZWxzPVtdLHRoaXMuY29sb3I9InJnYigwLCAwLCAwKSIsdGhpcy5uYW1lPSIiLHRoaXMuaG92ZXJpbmZvPSJhbGwiLHRoaXMuaWRUb0luZGV4PW5ldyBJbnQzMkFycmF5KDApLHRoaXMuYm91bmRzPVswLDAsMCwwXSx0aGlzLnBvaW50Y2xvdWRPcHRpb25zPXtwb3NpdGlvbnM6bmV3IEZsb2F0MzJBcnJheSgwKSxpZFRvSW5kZXg6dGhpcy5pZFRvSW5kZXgsc2l6ZW1pbjouNSxzaXplbWF4OjEyLGNvbG9yOlswLDAsMCwxXSxhcmVhUmF0aW86MSxib3JkZXJDb2xvcjpbMCwwLDAsMV19LHRoaXMucG9pbnRjbG91ZD1uKHQuZ2xwbG90LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMpLHRoaXMucG9pbnRjbG91ZC5fdHJhY2U9dGhpc312YXIgbD1zLnByb3RvdHlwZTtsLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZFRvSW5kZXhbdC5wb2ludElkXTtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDp0aGlzLnBpY2tYWURhdGE/W3RoaXMucGlja1hZRGF0YVsyKmVdLHRoaXMucGlja1hZRGF0YVsyKmUrMV1dOlt0aGlzLnBpY2tYRGF0YVtlXSx0aGlzLnBpY2tZRGF0YVtlXV0sdGV4dExhYmVsOkFycmF5LmlzQXJyYXkodGhpcy50ZXh0TGFiZWxzKT90aGlzLnRleHRMYWJlbHNbZV06dGhpcy50ZXh0TGFiZWxzLGNvbG9yOnRoaXMuY29sb3IsbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDplLGhvdmVyaW5mbzp0aGlzLmhvdmVyaW5mb319LGwudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLnRleHRMYWJlbHM9dC50ZXh0LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm8sdGhpcy5ib3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnVwZGF0ZUZhc3QodCksdGhpcy5jb2xvcj1vKHQse30pfSxsLnVwZGF0ZUZhc3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLG8scyxsLGM9dGhpcy54RGF0YT10aGlzLnBpY2tYRGF0YT10LngsdT10aGlzLnlEYXRhPXRoaXMucGlja1lEYXRhPXQueSxoPXRoaXMucGlja1hZRGF0YT10Lnh5LGY9dC54Ym91bmRzJiZ0Lnlib3VuZHMscD10LmluZGljZXMsZD10aGlzLmJvdW5kcztpZihoKXtpZihuPWgsZT1oLmxlbmd0aD4+PjEsZilkWzBdPXQueGJvdW5kc1swXSxkWzJdPXQueGJvdW5kc1sxXSxkWzFdPXQueWJvdW5kc1swXSxkWzNdPXQueWJvdW5kc1sxXTtlbHNlIGZvcihsPTA7bDxlO2wrKylvPW5bMipsXSxzPW5bMipsKzFdLG88ZFswXSYmKGRbMF09byksbz5kWzJdJiYoZFsyXT1vKSxzPGRbMV0mJihkWzFdPXMpLHM+ZFszXSYmKGRbM109cyk7aWYocClyPXA7ZWxzZSBmb3Iocj1uZXcgSW50MzJBcnJheShlKSxsPTA7bDxlO2wrKylyW2xdPWx9ZWxzZSBmb3IoZT1jLmxlbmd0aCxuPW5ldyBGbG9hdDMyQXJyYXkoMiplKSxyPW5ldyBJbnQzMkFycmF5KGUpLGw9MDtsPGU7bCsrKW89Y1tsXSxzPXVbbF0scltsXT1sLG5bMipsXT1vLG5bMipsKzFdPXMsbzxkWzBdJiYoZFswXT1vKSxvPmRbMl0mJihkWzJdPW8pLHM8ZFsxXSYmKGRbMV09cykscz5kWzNdJiYoZFszXT1zKTt0aGlzLmlkVG9JbmRleD1yLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuaWRUb0luZGV4PXIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5wb3NpdGlvbnM9bjt2YXIgZz1hKHQubWFya2VyLmNvbG9yKSx2PWEodC5tYXJrZXIuYm9yZGVyLmNvbG9yKSxtPXQub3BhY2l0eSp0Lm1hcmtlci5vcGFjaXR5O2dbM10qPW0sdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5jb2xvcj1nO3ZhciB5PXQubWFya2VyLmJsZW5kO2lmKG51bGw9PT15KXt5PWMubGVuZ3RoPDEwMHx8dS5sZW5ndGg8MTAwfXRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYmxlbmQ9eSx2WzNdKj1tLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYm9yZGVyQ29sb3I9djt2YXIgeD10Lm1hcmtlci5zaXplbWluLGI9TWF0aC5tYXgodC5tYXJrZXIuc2l6ZW1heCx0Lm1hcmtlci5zaXplbWluKTt0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNaW49eCx0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNYXg9Yix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmFyZWFSYXRpbz10Lm1hcmtlci5ib3JkZXIuYXJlYXJhdGlvLHRoaXMucG9pbnRjbG91ZC51cGRhdGUodGhpcy5wb2ludGNsb3VkT3B0aW9ucyk7dmFyIF89dGhpcy5zY2VuZS54YXhpcyx3PXRoaXMuc2NlbmUueWF4aXMsaz1iLzJ8fC41O3QuX2V4dHJlbWVzW18uX2lkXT1pKF8sW2RbMF0sZFsyXV0se3BwYWQ6a30pLHQuX2V4dHJlbWVzW3cuX2lkXT1pKHcsW2RbMV0sZFszXV0se3BwYWQ6a30pfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBvaW50Y2xvdWQuZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgcyh0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHsiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzQwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo3NjQsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMTMwLCJnbC1wb2ludGNsb3VkMmQiOjI5NX1dLDExMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGkocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX1pKCJ4IiksaSgieSIpLGkoInhib3VuZHMiKSxpKCJ5Ym91bmRzIiksdC54eSYmdC54eSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmKGUueHk9dC54eSksdC5pbmRpY2VzJiZ0LmluZGljZXMgaW5zdGFuY2VvZiBJbnQzMkFycmF5JiYoZS5pbmRpY2VzPXQuaW5kaWNlcyksaSgidGV4dCIpLGkoIm1hcmtlci5jb2xvciIsciksaSgibWFya2VyLm9wYWNpdHkiKSxpKCJtYXJrZXIuYmxlbmQiKSxpKCJtYXJrZXIuc2l6ZW1pbiIpLGkoIm1hcmtlci5zaXplbWF4IiksaSgibWFya2VyLmJvcmRlci5jb2xvciIsciksaSgibWFya2VyLmJvcmRlci5hcmVhcmF0aW8iKSxlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vbGliIjo3MTcsIi4vYXR0cmlidXRlcyI6MTEwNn1dLDExMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4uL3NjYXR0ZXIzZC9jYWxjIikscGxvdDp0KCIuL2NvbnZlcnQiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToicG9pbnRjbG91ZCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wyZCIpLGNhdGVnb3JpZXM6WyJnbCIsImdsMmQiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wyZCI6ODAzLCIuLi9zY2F0dGVyM2QvY2FsYyI6MTE0OCwiLi9hdHRyaWJ1dGVzIjoxMTA2LCIuL2NvbnZlcnQiOjExMDcsIi4vZGVmYXVsdHMiOjExMDh9XSwxMTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbD10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxoPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGY9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsO3QoIi4uLy4uL2NvbnN0YW50cy9kb2NzIikuRk9STUFUX0xJTks7KGUuZXhwb3J0cz1mKHtob3ZlcmluZm86aCh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6W10sYXJyYXlPazohMX0pLGhvdmVybGFiZWw6by5ob3ZlcmxhYmVsLGRvbWFpbjpzKHtuYW1lOiJzYW5rZXkiLHRyYWNlOiEwfSksb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZGZsdDoiaCJ9LHZhbHVlZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6Ii4zcyJ9LHZhbHVlc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGFycmFuZ2VtZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzbmFwIiwicGVycGVuZGljdWxhciIsImZyZWVmb3JtIiwiZml4ZWQiXSxkZmx0OiJzbmFwIn0sdGV4dGZvbnQ6bih7fSksbm9kZTp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGdyb3Vwczp7dmFsVHlwZToiaW5mb19hcnJheSIsaW1wbGllZEVkaXRzOnt4OltdLHk6W119LGRpbWVuc2lvbnM6MixmcmVlTGVuZ3RoOiEwLGRmbHQ6W10saXRlbXM6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifX0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwfSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0Oi41LGFycmF5T2s6ITB9fSxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MCxkZmx0OjIwfSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MSxkZmx0OjIwfSxob3ZlcmluZm86e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsIm5vbmUiLCJza2lwIl0sZGZsdDoiYWxsIn0saG92ZXJsYWJlbDpvLmhvdmVybGFiZWwsaG92ZXJ0ZW1wbGF0ZTpsKHt9LHtrZXlzOlsidmFsdWUiLCJsYWJlbCJdfSl9LGxpbms6e2xhYmVsOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITB9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGFycmF5T2s6ITB9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxhcnJheU9rOiEwfX0sc291cmNlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSx0YXJnZXQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LHZhbHVlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxob3ZlcmluZm86e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsIm5vbmUiLCJza2lwIl0sZGZsdDoiYWxsIn0saG92ZXJsYWJlbDpvLmhvdmVybGFiZWwsaG92ZXJ0ZW1wbGF0ZTpsKHt9LHtrZXlzOlsidmFsdWUiLCJsYWJlbCJdfSksY29sb3JzY2FsZXM6dSgiY29uY2VudHJhdGlvbnNjYWxlcyIse2VkaXRUeXBlOiJjYWxjIixsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyIsZGZsdDoiIn0sY21heDp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsZGZsdDoxfSxjbWluOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixkZmx0OjB9LGNvbG9yc2NhbGU6aChjKCkuY29sb3JzY2FsZSx7ZGZsdDpbWzAsIndoaXRlIl0sWzEsImJsYWNrIl1dfSl9KX19LCJjYWxjIiwibmVzdGVkIikpLnRyYW5zZm9ybXM9dm9pZCAwfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NTkxLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTk5LCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiOjYyMiwiLi4vLi4vY29uc3RhbnRzL2RvY3MiOjY4OCwiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3NDgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc1NSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi8uLi9wbG90cy9kb21haW4iOjc5MCwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3OTEsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg0MX1dLDExMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGE9dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxpPXQoIi4vcGxvdCIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NlbGVjdCIpLnByZXBTZWxlY3QsdT10KCIuLi8uLi9saWIiKSxoPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gZih0LGUpe3ZhciByPXQuX2Z1bGxEYXRhW2VdLG49dC5fZnVsbExheW91dCxhPW4uZHJhZ21vZGUsaT0icGFuIj09PW4uZHJhZ21vZGU/Im1vdmUiOiJjcm9zc2hhaXIiLG89ci5fYmdSZWN0O2lmKCJwYW4iIT09YSYmInpvb20iIT09YSl7cyhvLGkpO3ZhciBmPXtfaWQ6IngiLGMycDp1LmlkZW50aXR5LF9vZmZzZXQ6ci5fc2Fua2V5LnRyYW5zbGF0ZVgsX2xlbmd0aDpyLl9zYW5rZXkud2lkdGh9LHA9e19pZDoieSIsYzJwOnUuaWRlbnRpdHksX29mZnNldDpyLl9zYW5rZXkudHJhbnNsYXRlWSxfbGVuZ3RoOnIuX3NhbmtleS5oZWlnaHR9LGQ9e2dkOnQsZWxlbWVudDpvLm5vZGUoKSxwbG90aW5mbzp7aWQ6ZSx4YXhpczpmLHlheGlzOnAsZmlsbFJhbmdlSXRlbXM6dS5ub29wfSxzdWJwbG90OmUseGF4ZXM6W2ZdLHlheGVzOltwXSxkb25lRm5Db21wbGV0ZWQ6ZnVuY3Rpb24ocil7dmFyIG4sYT10Ll9mdWxsRGF0YVtlXSxpPWEubm9kZS5ncm91cHMuc2xpY2UoKSxvPVtdO2Z1bmN0aW9uIHModCl7Zm9yKHZhciBlPWEuX3NhbmtleS5ncmFwaC5ub2RlcyxyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5wb2ludE51bWJlcj09PXQpcmV0dXJuIGVbcl19Zm9yKHZhciBsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXMocltsXS5wb2ludE51bWJlcik7aWYoYylpZihjLmdyb3VwKXtmb3IodmFyIHU9MDt1PGMuY2hpbGRyZW5Ob2Rlcy5sZW5ndGg7dSsrKW8ucHVzaChjLmNoaWxkcmVuTm9kZXNbdV0ucG9pbnROdW1iZXIpO2lbYy5wb2ludE51bWJlci1hLm5vZGUuX2NvdW50XT0hMX1lbHNlIG8ucHVzaChjLnBvaW50TnVtYmVyKX1uPWkuZmlsdGVyKEJvb2xlYW4pLmNvbmNhdChbb10pLGguY2FsbCgiX2d1aVJlc3R5bGUiLHQseyJub2RlLmdyb3VwcyI6W25dfSxlKX0scHJlcEZuOmZ1bmN0aW9uKHQsZSxyKXtjKHQsZSxyLGQsYSl9fTtsLmluaXQoZCl9fXIubmFtZT0ic2Fua2V5IixyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe2hvdmVybGFiZWw6by5ob3ZlcmxhYmVsfSwicGxvdCIsIm5lc3RlZCIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT1hKHQuY2FsY2RhdGEsInNhbmtleSIpWzBdO2kodCxlKSxyLnVwZGF0ZUZ4KHQpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPW4uX2hhcyYmbi5faGFzKCJzYW5rZXkiKSxpPWUuX2hhcyYmZS5faGFzKCJzYW5rZXkiKTthJiYhaSYmKG4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnNhbmtleSIpLnJlbW92ZSgpLG4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLmJnc2Fua2V5IikucmVtb3ZlKCkpfSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5fZnVsbERhdGEubGVuZ3RoO2UrKylmKHQsZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjYxMCwiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyI6NjMxLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL3NldGN1cnNvciI6NzM3LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3NDgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3QiOjc4MiwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjgwMCwiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi9wbG90IjoxMTE2fV0sMTExMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJzdHJvbmdseS1jb25uZWN0ZWQtY29tcG9uZW50cyIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9saWIvZ3VwIikud3JhcCxvPWEuaXNBcnJheU9yVHlwZWRBcnJheSxzPWEuaXNJbmRleCxsPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpO2Z1bmN0aW9uIGModCl7dmFyIGUscj10Lm5vZGUsaT10LmxpbmssYz1bXSx1PW8oaS5jb2xvciksaD17fSxmPXt9LHA9aS5jb2xvcnNjYWxlcy5sZW5ndGg7Zm9yKGU9MDtlPHA7ZSsrKXt2YXIgZD1pLmNvbG9yc2NhbGVzW2VdLGc9bC5leHRyYWN0U2NhbGUoZCx7Y0xldHRlcjoiYyJ9KSx2PWwubWFrZUNvbG9yU2NhbGVGdW5jKGcpO2ZbZC5sYWJlbF09dn12YXIgbT0wO2ZvcihlPTA7ZTxpLnZhbHVlLmxlbmd0aDtlKyspaS5zb3VyY2VbZV0+bSYmKG09aS5zb3VyY2VbZV0pLGkudGFyZ2V0W2VdPm0mJihtPWkudGFyZ2V0W2VdKTt2YXIgeSx4PW0rMTt0Lm5vZGUuX2NvdW50PXg7dmFyIGI9dC5ub2RlLmdyb3VwcyxfPXt9O2ZvcihlPTA7ZTxiLmxlbmd0aDtlKyspe3ZhciB3PWJbZV07Zm9yKHk9MDt5PHcubGVuZ3RoO3krKyl7dmFyIGs9d1t5XSxUPXgrZTtfLmhhc093blByb3BlcnR5KGspP2Eud2FybigiTm9kZSAiK2srIiBpcyBhbHJlYWR5IHBhcnQgb2YgYSBncm91cC4iKTpfW2tdPVR9fXZhciBNPXtzb3VyY2U6W10sdGFyZ2V0OltdfTtmb3IoZT0wO2U8aS52YWx1ZS5sZW5ndGg7ZSsrKXt2YXIgQT1pLnZhbHVlW2VdLFM9aS5zb3VyY2VbZV0sRT1pLnRhcmdldFtlXTtpZihBPjAmJnMoUyx4KSYmcyhFLHgpJiYoIV8uaGFzT3duUHJvcGVydHkoUyl8fCFfLmhhc093blByb3BlcnR5KEUpfHxfW1NdIT09X1tFXSkpe18uaGFzT3duUHJvcGVydHkoRSkmJihFPV9bRV0pLF8uaGFzT3duUHJvcGVydHkoUykmJihTPV9bU10pLEU9K0UsaFtTPStTXT1oW0VdPSEwO3ZhciBMPSIiO2kubGFiZWwmJmkubGFiZWxbZV0mJihMPWkubGFiZWxbZV0pO3ZhciBDPW51bGw7TCYmZi5oYXNPd25Qcm9wZXJ0eShMKSYmKEM9ZltMXSksYy5wdXNoKHtwb2ludE51bWJlcjplLGxhYmVsOkwsY29sb3I6dT9pLmNvbG9yW2VdOmkuY29sb3IsY29uY2VudHJhdGlvbnNjYWxlOkMsc291cmNlOlMsdGFyZ2V0OkUsdmFsdWU6K0F9KSxNLnNvdXJjZS5wdXNoKFMpLE0udGFyZ2V0LnB1c2goRSl9fXZhciBQPXgrYi5sZW5ndGgsTz1vKHIuY29sb3IpLHo9W107Zm9yKGU9MDtlPFA7ZSsrKWlmKGhbZV0pe3ZhciBJPXIubGFiZWxbZV07ei5wdXNoKHtncm91cDplPngtMSxjaGlsZHJlbk5vZGVzOltdLHBvaW50TnVtYmVyOmUsbGFiZWw6SSxjb2xvcjpPP3IuY29sb3JbZV06ci5jb2xvcn0pfXZhciBEPSExO3JldHVybiBmdW5jdGlvbih0LGUscil7Zm9yKHZhciBpPWEuaW5pdDJkQXJyYXkodCwwKSxvPTA7bzxNYXRoLm1pbihlLmxlbmd0aCxyLmxlbmd0aCk7bysrKWlmKGEuaXNJbmRleChlW29dLHQpJiZhLmlzSW5kZXgocltvXSx0KSl7aWYoZVtvXT09PXJbb10pcmV0dXJuITA7aVtlW29dXS5wdXNoKHJbb10pfXJldHVybiBuKGkpLmNvbXBvbmVudHMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MX0pfShQLE0uc291cmNlLE0udGFyZ2V0KSYmKEQ9ITApLHtjaXJjdWxhcjpELGxpbmtzOmMsbm9kZXM6eixncm91cHM6Yixncm91cExvb2t1cDpffX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1jKGUpO3JldHVybiBpKHtjaXJjdWxhcjpyLmNpcmN1bGFyLF9ub2RlczpyLm5vZGVzLF9saW5rczpyLmxpbmtzLF9ncm91cHM6ci5ncm91cHMsX2dyb3VwTG9va3VwOnIuZ3JvdXBMb29rdXB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MDQsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvZ3VwIjo3MTUsInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIjo1Mjl9XSwxMTEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bm9kZVRleHRPZmZzZXRIb3Jpem9udGFsOjQsbm9kZVRleHRPZmZzZXRWZXJ0aWNhbDozLG5vZGVQYWRBY3Jvc3M6MTAsc2Fua2V5SXRlcmF0aW9uczo1MCxmb3JjZUl0ZXJhdGlvbnM6NSxmb3JjZVRpY2tzUGVyRnJhbWU6MTAsZHVyYXRpb246NTAwLGVhc2U6ImxpbmVhciIsY246e3NhbmtleToic2Fua2V5IixzYW5rZXlMaW5rczoic2Fua2V5LWxpbmtzIixzYW5rZXlMaW5rOiJzYW5rZXktbGluayIsc2Fua2V5Tm9kZVNldDoic2Fua2V5LW5vZGUtc2V0IixzYW5rZXlOb2RlOiJzYW5rZXktbm9kZSIsbm9kZVJlY3Q6Im5vZGUtcmVjdCIsbm9kZUNhcHR1cmU6Im5vZGUtY2FwdHVyZSIsbm9kZUNlbnRlcmVkOiJub2RlLWVudGVyZWQiLG5vZGVMYWJlbEd1aWRlOiJub2RlLWxhYmVsLWd1aWRlIixub2RlTGFiZWw6Im5vZGUtbGFiZWwiLG5vZGVMYWJlbFRleHRQYXRoOiJub2RlLWxhYmVsLXRleHQtcGF0aCJ9fX0se31dLDExMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoInRpbnljb2xvcjIiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLGw9dCgiLi4vLi4vY29tcG9uZW50cy9meC9ob3ZlcmxhYmVsX2RlZmF1bHRzIiksYz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksdT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKTtmdW5jdGlvbiBoKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYS5saW5rLmNvbG9yc2NhbGVzLHIsaSl9cigibGFiZWwiKSxyKCJjbWluIikscigiY21heCIpLHIoImNvbG9yc2NhbGUiKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBkPW4uZXh0ZW5kRGVlcChmLmhvdmVybGFiZWwsdC5ob3ZlcmxhYmVsKSxnPXQubm9kZSx2PWMubmV3Q29udGFpbmVyKGUsIm5vZGUiKTtmdW5jdGlvbiBtKHQsZSl7cmV0dXJuIG4uY29lcmNlKGcsdixhLm5vZGUsdCxlKX1tKCJsYWJlbCIpLG0oImdyb3VwcyIpLG0oIngiKSxtKCJ5IiksbSgicGFkIiksbSgidGhpY2tuZXNzIiksbSgibGluZS5jb2xvciIpLG0oImxpbmUud2lkdGgiKSxtKCJob3ZlcmluZm8iLHQuaG92ZXJpbmZvKSxsKGcsdixtLGQpLG0oImhvdmVydGVtcGxhdGUiKTt2YXIgeT1mLmNvbG9yd2F5O20oImNvbG9yIix2LmxhYmVsLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBpLmFkZE9wYWNpdHkoZnVuY3Rpb24odCl7cmV0dXJuIHlbdCV5Lmxlbmd0aF19KGUpLC44KX0pKTt2YXIgeD10Lmxpbmt8fHt9LGI9Yy5uZXdDb250YWluZXIoZSwibGluayIpO2Z1bmN0aW9uIF8odCxlKXtyZXR1cm4gbi5jb2VyY2UoeCxiLGEubGluayx0LGUpfV8oImxhYmVsIiksXygic291cmNlIiksXygidGFyZ2V0IiksXygidmFsdWUiKSxfKCJsaW5lLmNvbG9yIiksXygibGluZS53aWR0aCIpLF8oImhvdmVyaW5mbyIsdC5ob3ZlcmluZm8pLGwoeCxiLF8sZCksXygiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB3LGs9byhmLnBhcGVyX2JnY29sb3IpLmdldEx1bWluYW5jZSgpPC4zMzM/InJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSI6InJnYmEoMCwgMCwgMCwgMC4yKSI7XygiY29sb3IiLG4ucmVwZWF0KGssYi52YWx1ZS5sZW5ndGgpKSx1KHgsYix7bmFtZToiY29sb3JzY2FsZXMiLGhhbmRsZUl0ZW1EZWZhdWx0czpofSkscyhlLGYscCkscCgib3JpZW50YXRpb24iKSxwKCJ2YWx1ZWZvcm1hdCIpLHAoInZhbHVlc3VmZml4Iiksdi54Lmxlbmd0aCYmdi55Lmxlbmd0aCYmKHc9ImZyZWVmb3JtIikscCgiYXJyYW5nZW1lbnQiLHcpLG4uY29lcmNlRm9udChwLCJ0ZXh0Zm9udCIsbi5leHRlbmRGbGF0KHt9LGYuZm9udCkpLGUuX2xlbmd0aD1udWxsfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJsYWJlbF9kZWZhdWx0cyI6NjI5LCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6NzU1LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc2MSwiLi4vLi4vcGxvdHMvZG9tYWluIjo3OTAsIi4vYXR0cmlidXRlcyI6MTExMCx0aW55Y29sb3IyOjUzNn1dLDExMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNhbmtleSIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QuanMiKSxjYXRlZ29yaWVzOlsibm9PcGFjaXR5Il0sbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjoxMTEwLCIuL2Jhc2VfcGxvdCI6MTExMSwiLi9jYWxjIjoxMTEyLCIuL2RlZmF1bHRzIjoxMTE0LCIuL3Bsb3QiOjExMTYsIi4vc2VsZWN0LmpzIjoxMTE4fV0sMTExNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi9yZW5kZXIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi9jb25zdGFudHMiKS5jbixjPXMuXztmdW5jdGlvbiB1KHQpe3JldHVybiIiIT09dH1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleT09PWUudHJhY2VJZH0pfWZ1bmN0aW9uIGYodCxlKXtuLnNlbGVjdCh0KS5zZWxlY3QoInBhdGgiKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixlKSxuLnNlbGVjdCh0KS5zZWxlY3QoInJlY3QiKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixlKX1mdW5jdGlvbiBwKHQpe24uc2VsZWN0KHQpLnNlbGVjdCgidGV4dC5uYW1lIikuc3R5bGUoImZpbGwiLCJibGFjayIpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi0xIT09dC5ub2RlLnNvdXJjZUxpbmtzLmluZGV4T2YoZS5saW5rKXx8LTEhPT10Lm5vZGUudGFyZ2V0TGlua3MuaW5kZXhPZihlLmxpbmspfX1mdW5jdGlvbiBnKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PWUubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKHQubGluayl8fC0xIT09ZS5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YodC5saW5rKX19ZnVuY3Rpb24gdih0LGUscil7ZSYmciYmaChyLGUpLnNlbGVjdEFsbCgiLiIrbC5zYW5rZXlMaW5rKS5maWx0ZXIoZChlKSkuY2FsbCh5LmJpbmQoMCxlLHIsITEpKX1mdW5jdGlvbiBtKHQsZSxyKXtlJiZyJiZoKHIsZSkuc2VsZWN0QWxsKCIuIitsLnNhbmtleUxpbmspLmZpbHRlcihkKGUpKS5jYWxsKHguYmluZCgwLGUsciwhMSkpfWZ1bmN0aW9uIHkodCxlLHIsbil7dmFyIGE9bi5kYXR1bSgpLmxpbmsubGFiZWw7bi5zdHlsZSgiZmlsbC1vcGFjaXR5IixmdW5jdGlvbih0KXtpZighdC5saW5rLmNvbmNlbnRyYXRpb25zY2FsZSlyZXR1cm4uNH0pLGEmJmgoZSx0KS5zZWxlY3RBbGwoIi4iK2wuc2Fua2V5TGluaykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsubGFiZWw9PT1hfSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24odCl7aWYoIXQubGluay5jb25jZW50cmF0aW9uc2NhbGUpcmV0dXJuLjR9KSxyJiZoKGUsdCkuc2VsZWN0QWxsKCIuIitsLnNhbmtleU5vZGUpLmZpbHRlcihnKHQpKS5jYWxsKHYpfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGE9bi5kYXR1bSgpLmxpbmsubGFiZWw7bi5zdHlsZSgiZmlsbC1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLGEmJmgoZSx0KS5zZWxlY3RBbGwoIi4iK2wuc2Fua2V5TGluaykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsubGFiZWw9PT1hfSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSxyJiZoKGUsdCkuc2VsZWN0QWxsKGwuc2Fua2V5Tm9kZSkuZmlsdGVyKGcodCkpLmNhbGwobSl9ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQuaG92ZXJsYWJlbHx8e30sbj1zLm5lc3RlZFByb3BlcnR5KHIsZSkuZ2V0KCk7cmV0dXJuIUFycmF5LmlzQXJyYXkobikmJm59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQscz1yLl9wYXBlcixoPXIuX3NpemUsZD0wO2Q8dC5fZnVsbERhdGEubGVuZ3RoO2QrKylpZih0Ll9mdWxsRGF0YVtkXS52aXNpYmxlJiZ0Ll9mdWxsRGF0YVtkXS50eXBlPT09bC5zYW5rZXkmJiF0Ll9mdWxsRGF0YVtkXS5fdmlld0luaXRpYWwpe3ZhciBnPXQuX2Z1bGxEYXRhW2RdLm5vZGU7dC5fZnVsbERhdGFbZF0uX3ZpZXdJbml0aWFsPXtub2RlOntncm91cHM6Zy5ncm91cHMuc2xpY2UoKSx4OmcueC5zbGljZSgpLHk6Zy55LnNsaWNlKCl9fX12YXIgXz1jKHQsInNvdXJjZToiKSsiICIsdz1jKHQsInRhcmdldDoiKSsiICIsaz1jKHQsImNvbmNlbnRyYXRpb246IikrIiAiLFQ9Yyh0LCJpbmNvbWluZyBmbG93IGNvdW50OiIpKyIgIixNPWModCwib3V0Z29pbmcgZmxvdyBjb3VudDoiKSsiICI7YSh0LHMsZSx7d2lkdGg6aC53LGhlaWdodDpoLmgsbWFyZ2luOnt0OmgudCxyOmgucixiOmguYixsOmgubH19LHtsaW5rRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsYSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwoeS5iaW5kKDAscixhLCEwKSksInNraXAiIT09ci5saW5rLnRyYWNlLmxpbmsuaG92ZXJpbmZvJiYoci5saW5rLmZ1bGxEYXRhPXIubGluay50cmFjZSx0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50Om4uZXZlbnQscG9pbnRzOltyLmxpbmtdfSkpKX0sZm9sbG93OmZ1bmN0aW9uKGUsYSl7aWYoITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSl7dmFyIHM9YS5saW5rLnRyYWNlLmxpbms7aWYoIm5vbmUiIT09cy5ob3ZlcmluZm8mJiJza2lwIiE9PXMuaG92ZXJpbmZvKXtmb3IodmFyIGw9W10sYz0wLGg9MDtoPGEuZmxvdy5saW5rcy5sZW5ndGg7aCsrKXt2YXIgZD1hLmZsb3cubGlua3NbaF07aWYoImNsb3Nlc3QiIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGV8fGEubGluay5wb2ludE51bWJlcj09PWQucG9pbnROdW1iZXIpe2EubGluay5wb2ludE51bWJlcj09PWQucG9pbnROdW1iZXImJihjPWgpLGQuZnVsbERhdGE9ZC50cmFjZSxzPWEubGluay50cmFjZS5saW5rO3ZhciBnPW0oZCksdj17dmFsdWVMYWJlbDpuLmZvcm1hdChhLnZhbHVlRm9ybWF0KShkLnZhbHVlKSthLnZhbHVlU3VmZml4fTtsLnB1c2goe3g6Z1swXSx5OmdbMV0sbmFtZTp2LnZhbHVlTGFiZWwsdGV4dDpbZC5sYWJlbHx8IiIsXytkLnNvdXJjZS5sYWJlbCx3K2QudGFyZ2V0LmxhYmVsLGQuY29uY2VudHJhdGlvbnNjYWxlP2srbi5mb3JtYXQoIiUwLjJmIikoZC5mbG93LmxhYmVsQ29uY2VudHJhdGlvbik6IiJdLmZpbHRlcih1KS5qb2luKCI8YnI+IiksY29sb3I6YihzLCJiZ2NvbG9yIil8fG8uYWRkT3BhY2l0eShkLmNvbG9yLDEpLGJvcmRlckNvbG9yOmIocywiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OmIocywiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpiKHMsImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjpiKHMsImZvbnQuY29sb3IiKSxuYW1lTGVuZ3RoOmIocywibmFtZWxlbmd0aCIpLHRleHRBbGlnbjpiKHMsImFsaWduIiksaWRlYWxBbGlnbjpuLmV2ZW50Lng8Z1swXT8icmlnaHQiOiJsZWZ0Iixob3ZlcnRlbXBsYXRlOnMuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOnYsZXZlbnREYXRhOltkXX0pfX1pLmxvbmVIb3ZlcihsLHtjb250YWluZXI6ci5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6ci5fcGFwZXIubm9kZSgpLGdkOnQsYW5jaG9ySW5kZXg6Y30pLmVhY2goZnVuY3Rpb24oKXthLmxpbmsuY29uY2VudHJhdGlvbnNjYWxlfHxmKHRoaXMsLjY1KSxwKHRoaXMpfSl9fWZ1bmN0aW9uIG0odCl7dmFyIGUscjt0LmNpcmN1bGFyPyhlPSh0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50K3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KS8yLHI9dC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCk6KGU9KHQuc291cmNlLngxK3QudGFyZ2V0LngwKS8yLHI9KHQueTArdC55MSkvMik7dmFyIG49W2Uscl07cmV0dXJuInYiPT09dC50cmFjZS5vcmllbnRhdGlvbiYmbi5yZXZlcnNlKCksblswXSs9YS5wYXJlbnQudHJhbnNsYXRlWCxuWzFdKz1hLnBhcmVudC50cmFuc2xhdGVZLG59fSx1bmhvdmVyOmZ1bmN0aW9uKGUsYSxvKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbCh4LmJpbmQoMCxhLG8sITApKSwic2tpcCIhPT1hLmxpbmsudHJhY2UubGluay5ob3ZlcmluZm8mJihhLmxpbmsuZnVsbERhdGE9YS5saW5rLnRyYWNlLHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbYS5saW5rXX0pKSxpLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSl9LHNlbGVjdDpmdW5jdGlvbihlLHIpe3ZhciBhPXIubGluazthLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W2FdLGkuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fSxub2RlRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsYSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwodixyLGEpLCJza2lwIiE9PXIubm9kZS50cmFjZS5ub2RlLmhvdmVyaW5mbyYmKHIubm9kZS5mdWxsRGF0YT1yLm5vZGUudHJhY2UsdC5lbWl0KCJwbG90bHlfaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbci5ub2RlXX0pKSl9LGZvbGxvdzpmdW5jdGlvbihlLGEpe2lmKCExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUpe3ZhciBvPWEubm9kZS50cmFjZS5ub2RlO2lmKCJub25lIiE9PW8uaG92ZXJpbmZvJiYic2tpcCIhPT1vLmhvdmVyaW5mbyl7dmFyIHM9bi5zZWxlY3QoZSkuc2VsZWN0KCIuIitsLm5vZGVSZWN0KSxjPXQuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9aC5sZWZ0LTItYy5sZWZ0LGc9aC5yaWdodCsyLWMubGVmdCx2PWgudG9wK2guaGVpZ2h0LzQtYy50b3AsbT17dmFsdWVMYWJlbDpuLmZvcm1hdChhLnZhbHVlRm9ybWF0KShhLm5vZGUudmFsdWUpK2EudmFsdWVTdWZmaXh9O2Eubm9kZS5mdWxsRGF0YT1hLm5vZGUudHJhY2U7dmFyIHk9aS5sb25lSG92ZXIoe3gwOmQseDE6Zyx5OnYsbmFtZTpuLmZvcm1hdChhLnZhbHVlRm9ybWF0KShhLm5vZGUudmFsdWUpK2EudmFsdWVTdWZmaXgsdGV4dDpbYS5ub2RlLmxhYmVsLFQrYS5ub2RlLnRhcmdldExpbmtzLmxlbmd0aCxNK2Eubm9kZS5zb3VyY2VMaW5rcy5sZW5ndGhdLmZpbHRlcih1KS5qb2luKCI8YnI+IiksY29sb3I6YihvLCJiZ2NvbG9yIil8fGEudGlueUNvbG9ySHVlLGJvcmRlckNvbG9yOmIobywiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OmIobywiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpiKG8sImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjpiKG8sImZvbnQuY29sb3IiKSxuYW1lTGVuZ3RoOmIobywibmFtZWxlbmd0aCIpLHRleHRBbGlnbjpiKG8sImFsaWduIiksaWRlYWxBbGlnbjoibGVmdCIsaG92ZXJ0ZW1wbGF0ZTpvLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczptLGV2ZW50RGF0YTpbYS5ub2RlXX0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6dH0pO2YoeSwuODUpLHAoeSl9fX0sdW5ob3ZlcjpmdW5jdGlvbihlLGEsbyl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwobSxhLG8pLCJza2lwIiE9PWEubm9kZS50cmFjZS5ub2RlLmhvdmVyaW5mbyYmKGEubm9kZS5mdWxsRGF0YT1hLm5vZGUudHJhY2UsdC5lbWl0KCJwbG90bHlfdW5ob3ZlciIse2V2ZW50Om4uZXZlbnQscG9pbnRzOlthLm5vZGVdfSkpLGkubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpKX0sc2VsZWN0OmZ1bmN0aW9uKGUscixhKXt2YXIgbz1yLm5vZGU7by5vcmlnaW5hbEV2ZW50PW4uZXZlbnQsdC5faG92ZXJkYXRhPVtvXSxuLnNlbGVjdChlKS5jYWxsKG0scixhKSxpLmNsaWNrKHQse3RhcmdldDohMH0pfX19KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MzAsIi4uLy4uL2xpYiI6NzE3LCIuL2NvbnN0YW50cyI6MTExMywiLi9yZW5kZXIiOjExMTcsZDM6MTY1fV0sMTExNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGE9dCgiZDMiKSxpPXQoInRpbnljb2xvcjIiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiQHBsb3RseS9kMy1zYW5rZXkiKSxjPXQoIkBwbG90bHkvZDMtc2Fua2V5LWNpcmN1bGFyIiksdT10KCJkMy1mb3JjZSIpLGg9dCgiLi4vLi4vbGliIiksZj10KCIuLi8uLi9saWIvZ3VwIikscD1mLmtleUZ1bixkPWYucmVwZWF0LGc9Zi51bndyYXAsdj10KCJkMy1pbnRlcnBvbGF0ZSIpLmludGVycG9sYXRlTnVtYmVyLG09dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiB5KCl7dmFyIHQ9LjU7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKGUubGluay5jaXJjdWxhcilyZXR1cm4gcj1lLmxpbmssbj1yLndpZHRoLzIsYT1yLmNpcmN1bGFyUGF0aERhdGEsInRvcCI9PT1yLmNpcmN1bGFyTGlua1R5cGU/Ik0gIithLnRhcmdldFgrIiAiKyhhLnRhcmdldFkrbikrIiBMIithLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhhLnRhcmdldFkrbikrIkEiKyhhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrbikrIiAiKyhhLnJpZ2h0U21hbGxBcmNSYWRpdXMrbikrIiAwIDAgMSAiKyhhLnJpZ2h0RnVsbEV4dGVudC1uKSsiICIrKGEudGFyZ2V0WS1hLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyJMIisoYS5yaWdodEZ1bGxFeHRlbnQtbikrIiAiK2EudmVydGljYWxSaWdodElubmVyRXh0ZW50KyJBIisoYS5yaWdodExhcmdlQXJjUmFkaXVzK24pKyIgIisoYS5yaWdodExhcmdlQXJjUmFkaXVzK24pKyIgMCAwIDEgIithLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhhLnZlcnRpY2FsRnVsbEV4dGVudC1uKSsiTCIrYS5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhhLnZlcnRpY2FsRnVsbEV4dGVudC1uKSsiQSIrKGEubGVmdExhcmdlQXJjUmFkaXVzK24pKyIgIisoYS5sZWZ0TGFyZ2VBcmNSYWRpdXMrbikrIiAwIDAgMSAiKyhhLmxlZnRGdWxsRXh0ZW50K24pKyIgIithLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyJMIisoYS5sZWZ0RnVsbEV4dGVudCtuKSsiICIrKGEuc291cmNlWS1hLmxlZnRTbWFsbEFyY1JhZGl1cykrIkEiKyhhLmxlZnRMYXJnZUFyY1JhZGl1cytuKSsiICIrKGEubGVmdFNtYWxsQXJjUmFkaXVzK24pKyIgMCAwIDEgIithLmxlZnRJbm5lckV4dGVudCsiICIrKGEuc291cmNlWStuKSsiTCIrYS5zb3VyY2VYKyIgIisoYS5zb3VyY2VZK24pKyJMIithLnNvdXJjZVgrIiAiKyhhLnNvdXJjZVktbikrIkwiK2EubGVmdElubmVyRXh0ZW50KyIgIisoYS5zb3VyY2VZLW4pKyJBIisoYS5sZWZ0TGFyZ2VBcmNSYWRpdXMtbikrIiAiKyhhLmxlZnRTbWFsbEFyY1JhZGl1cy1uKSsiIDAgMCAwICIrKGEubGVmdEZ1bGxFeHRlbnQtbikrIiAiKyhhLnNvdXJjZVktYS5sZWZ0U21hbGxBcmNSYWRpdXMpKyJMIisoYS5sZWZ0RnVsbEV4dGVudC1uKSsiICIrYS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiQSIrKGEubGVmdExhcmdlQXJjUmFkaXVzLW4pKyIgIisoYS5sZWZ0TGFyZ2VBcmNSYWRpdXMtbikrIiAwIDAgMCAiK2EubGVmdElubmVyRXh0ZW50KyIgIisoYS52ZXJ0aWNhbEZ1bGxFeHRlbnQrbikrIkwiK2EucmlnaHRJbm5lckV4dGVudCsiICIrKGEudmVydGljYWxGdWxsRXh0ZW50K24pKyJBIisoYS5yaWdodExhcmdlQXJjUmFkaXVzLW4pKyIgIisoYS5yaWdodExhcmdlQXJjUmFkaXVzLW4pKyIgMCAwIDAgIisoYS5yaWdodEZ1bGxFeHRlbnQrbikrIiAiK2EudmVydGljYWxSaWdodElubmVyRXh0ZW50KyJMIisoYS5yaWdodEZ1bGxFeHRlbnQrbikrIiAiKyhhLnRhcmdldFktYS5yaWdodFNtYWxsQXJjUmFkaXVzKSsiQSIrKGEucmlnaHRMYXJnZUFyY1JhZGl1cy1uKSsiICIrKGEucmlnaHRTbWFsbEFyY1JhZGl1cy1uKSsiIDAgMCAwICIrYS5yaWdodElubmVyRXh0ZW50KyIgIisoYS50YXJnZXRZLW4pKyJMIithLnRhcmdldFgrIiAiKyhhLnRhcmdldFktbikrIloiOiJNICIrYS50YXJnZXRYKyIgIisoYS50YXJnZXRZLW4pKyIgTCIrYS5yaWdodElubmVyRXh0ZW50KyIgIisoYS50YXJnZXRZLW4pKyJBIisoYS5yaWdodExhcmdlQXJjUmFkaXVzK24pKyIgIisoYS5yaWdodFNtYWxsQXJjUmFkaXVzK24pKyIgMCAwIDAgIisoYS5yaWdodEZ1bGxFeHRlbnQtbikrIiAiKyhhLnRhcmdldFkrYS5yaWdodFNtYWxsQXJjUmFkaXVzKSsiTCIrKGEucmlnaHRGdWxsRXh0ZW50LW4pKyIgIithLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiQSIrKGEucmlnaHRMYXJnZUFyY1JhZGl1cytuKSsiICIrKGEucmlnaHRMYXJnZUFyY1JhZGl1cytuKSsiIDAgMCAwICIrYS5yaWdodElubmVyRXh0ZW50KyIgIisoYS52ZXJ0aWNhbEZ1bGxFeHRlbnQrbikrIkwiK2EubGVmdElubmVyRXh0ZW50KyIgIisoYS52ZXJ0aWNhbEZ1bGxFeHRlbnQrbikrIkEiKyhhLmxlZnRMYXJnZUFyY1JhZGl1cytuKSsiICIrKGEubGVmdExhcmdlQXJjUmFkaXVzK24pKyIgMCAwIDAgIisoYS5sZWZ0RnVsbEV4dGVudCtuKSsiICIrYS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiTCIrKGEubGVmdEZ1bGxFeHRlbnQrbikrIiAiKyhhLnNvdXJjZVkrYS5sZWZ0U21hbGxBcmNSYWRpdXMpKyJBIisoYS5sZWZ0TGFyZ2VBcmNSYWRpdXMrbikrIiAiKyhhLmxlZnRTbWFsbEFyY1JhZGl1cytuKSsiIDAgMCAwICIrYS5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhhLnNvdXJjZVktbikrIkwiK2Euc291cmNlWCsiICIrKGEuc291cmNlWS1uKSsiTCIrYS5zb3VyY2VYKyIgIisoYS5zb3VyY2VZK24pKyJMIithLmxlZnRJbm5lckV4dGVudCsiICIrKGEuc291cmNlWStuKSsiQSIrKGEubGVmdExhcmdlQXJjUmFkaXVzLW4pKyIgIisoYS5sZWZ0U21hbGxBcmNSYWRpdXMtbikrIiAwIDAgMSAiKyhhLmxlZnRGdWxsRXh0ZW50LW4pKyIgIisoYS5zb3VyY2VZK2EubGVmdFNtYWxsQXJjUmFkaXVzKSsiTCIrKGEubGVmdEZ1bGxFeHRlbnQtbikrIiAiK2EudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIkEiKyhhLmxlZnRMYXJnZUFyY1JhZGl1cy1uKSsiICIrKGEubGVmdExhcmdlQXJjUmFkaXVzLW4pKyIgMCAwIDEgIithLmxlZnRJbm5lckV4dGVudCsiICIrKGEudmVydGljYWxGdWxsRXh0ZW50LW4pKyJMIithLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhhLnZlcnRpY2FsRnVsbEV4dGVudC1uKSsiQSIrKGEucmlnaHRMYXJnZUFyY1JhZGl1cy1uKSsiICIrKGEucmlnaHRMYXJnZUFyY1JhZGl1cy1uKSsiIDAgMCAxICIrKGEucmlnaHRGdWxsRXh0ZW50K24pKyIgIithLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiTCIrKGEucmlnaHRGdWxsRXh0ZW50K24pKyIgIisoYS50YXJnZXRZK2EucmlnaHRTbWFsbEFyY1JhZGl1cykrIkEiKyhhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtbikrIiAiKyhhLnJpZ2h0U21hbGxBcmNSYWRpdXMtbikrIiAwIDAgMSAiK2EucmlnaHRJbm5lckV4dGVudCsiICIrKGEudGFyZ2V0WStuKSsiTCIrYS50YXJnZXRYKyIgIisoYS50YXJnZXRZK24pKyJaIjt2YXIgcixuLGEsaT1lLmxpbmsuc291cmNlLngxLG89ZS5saW5rLnRhcmdldC54MCxzPXYoaSxvKSxsPXModCksYz1zKDEtdCksdT1lLmxpbmsueTAtZS5saW5rLndpZHRoLzIsaD1lLmxpbmsueTArZS5saW5rLndpZHRoLzIsZj1lLmxpbmsueTEtZS5saW5rLndpZHRoLzIscD1lLmxpbmsueTErZS5saW5rLndpZHRoLzI7cmV0dXJuIk0iK2krIiwiK3UrIkMiK2wrIiwiK3UrIiAiK2MrIiwiK2YrIiAiK28rIiwiK2YrIkwiK28rIiwiK3ArIkMiK2MrIiwiK3ArIiAiK2wrIiwiK2grIiAiK2krIiwiK2grIloifX1mdW5jdGlvbiB4KHQpe3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC5ub2RlLngwLnRvRml4ZWQoMykrIiwgIit0Lm5vZGUueTAudG9GaXhlZCgzKSsiKSJ9KX1mdW5jdGlvbiBiKHQpe3QuY2FsbCh4KX1mdW5jdGlvbiBfKHQsZSl7dC5jYWxsKGIpLGUuYXR0cigiZCIseSgpKX1mdW5jdGlvbiB3KHQpe3QuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGUueDEtdC5ub2RlLngwfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlSGVpZ2h0fSl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdC5saW5rLndpZHRoPjF8fHQubGlua0xpbmVXaWR0aD4wfWZ1bmN0aW9uIFQodCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QudHJhbnNsYXRlWCsiLCIrdC50cmFuc2xhdGVZKyIpIisodC5ob3Jpem9udGFsPyJtYXRyaXgoMSAwIDAgMSAwIDApIjoibWF0cml4KDAgMSAxIDAgMCAwKSIpfWZ1bmN0aW9uIE0odCl7cmV0dXJuInRyYW5zbGF0ZSgiKyh0Lmhvcml6b250YWw/MDp0LmxhYmVsWSkrIiAiKyh0Lmhvcml6b250YWw/dC5sYWJlbFk6MCkrIikifWZ1bmN0aW9uIEEodCl7cmV0dXJuIGEuc3ZnLmxpbmUoKShbW3QuaG9yaXpvbnRhbD90LmxlZnQ/LXQuc2l6ZUFjcm9zczp0LnZpc2libGVXaWR0aCtuLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbDpuLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbCwwXSxbdC5ob3Jpem9udGFsP3QubGVmdD8tbi5ub2RlVGV4dE9mZnNldEhvcml6b250YWw6dC5zaXplQWNyb3NzOnQudmlzaWJsZUhlaWdodC1uLm5vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbCwwXV0pfWZ1bmN0aW9uIFModCl7cmV0dXJuIHQuaG9yaXpvbnRhbD8ibWF0cml4KDEgMCAwIDEgMCAwKSI6Im1hdHJpeCgwIDEgMSAwIDAgMCkifWZ1bmN0aW9uIEUodCl7cmV0dXJuIHQuaG9yaXpvbnRhbD8ic2NhbGUoMSAxKSI6InNjYWxlKC0xIDEpIn1mdW5jdGlvbiBMKHQpe3JldHVybiB0LmRhcmtCYWNrZ3JvdW5kJiYhdC5ob3Jpem9udGFsPyJyZ2IoMjU1LDI1NSwyNTUpIjoicmdiKDAsMCwwKSJ9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdC5ob3Jpem9udGFsJiZ0LmxlZnQ/IjEwMCUiOiIwJSJ9ZnVuY3Rpb24gUCh0LGUscil7dC5vbigiLmJhc2ljIixudWxsKS5vbigibW91c2VvdmVyLmJhc2ljIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD1bdGhpcyx0XSl9KS5vbigibW91c2Vtb3ZlLmJhc2ljIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLmZvbGxvdyh0aGlzLHQpLHQuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPVt0aGlzLHRdKX0pLm9uKCJtb3VzZW91dC5iYXNpYyIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHwoci51bmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSl9KS5vbigiY2xpY2suYmFzaWMiLGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkJiYoci51bmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksdC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHxyLnNlbGVjdCh0aGlzLHQsZSl9KX1mdW5jdGlvbiBPKHQsZSxyLGkpe3ZhciBvPWEuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihmdW5jdGlvbih0KXtyZXR1cm57eDp0Lm5vZGUueDArdC52aXNpYmxlV2lkdGgvMix5OnQubm9kZS55MCt0LnZpc2libGVIZWlnaHQvMn19KS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbihhKXtpZigiZml4ZWQiIT09YS5hcnJhbmdlbWVudCYmKGguZW5zdXJlU2luZ2xlKGkuX2Z1bGxMYXlvdXQuX2luZm9sYXllciwiZyIsImRyYWdjb3ZlciIsZnVuY3Rpb24odCl7aS5fZnVsbExheW91dC5fZHJhZ0NvdmVyPXR9KSxoLnJhaXNlVG9Ub3AodGhpcyksYS5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPWEubm9kZSxJKGEubm9kZSksYS5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQmJihyLm5vZGVFdmVudHMudW5ob3Zlci5hcHBseSgwLGEuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkKSxhLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksInNuYXAiPT09YS5hcnJhbmdlbWVudCkpe3ZhciBvPWEudHJhY2VJZCsifCIrYS5rZXk7YS5mb3JjZUxheW91dHNbb10/YS5mb3JjZUxheW91dHNbb10uYWxwaGEoMSk6ZnVuY3Rpb24odCxlLHIsYSl7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ueT0odFtlXS55MCt0W2VdLnkxKS8yLHRbZV0ueD0odFtlXS54MCt0W2VdLngxKS8yfShyLmdyYXBoLm5vZGVzKTt2YXIgaT1yLmdyYXBoLm5vZGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5vcmlnaW5hbFg9PT1yLm5vZGUub3JpZ2luYWxYfSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LnBhcnRPZkdyb3VwfSk7ci5mb3JjZUxheW91dHNbZV09dS5mb3JjZVNpbXVsYXRpb24oaSkuYWxwaGFEZWNheSgwKS5mb3JjZSgiY29sbGlkZSIsdS5mb3JjZUNvbGxpZGUoKS5yYWRpdXMoZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkvMityLm5vZGVQYWQvMn0pLnN0cmVuZ3RoKDEpLml0ZXJhdGlvbnMobi5mb3JjZUl0ZXJhdGlvbnMpKS5mb3JjZSgiY29uc3RyYWluIixmdW5jdGlvbih0LGUscixhKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXJbaV07bz09PWEuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz8oby54PW8ubGFzdERyYWdnZWRYLG8ueT1vLmxhc3REcmFnZ2VkWSk6KG8udng9KG8ub3JpZ2luYWxYLW8ueCkvbi5mb3JjZVRpY2tzUGVyRnJhbWUsby55PU1hdGgubWluKGEuc2l6ZS1vLmR5LzIsTWF0aC5tYXgoby5keS8yLG8ueSkpKSx0PU1hdGgubWF4KHQsTWF0aC5hYnMoby52eCksTWF0aC5hYnMoby52eSkpfSFhLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3MmJnQ8LjEmJmEuZm9yY2VMYXlvdXRzW2VdLmFscGhhKCk+MCYmYS5mb3JjZUxheW91dHNbZV0uYWxwaGEoMCl9fSgwLGUsaSxyKSkuc3RvcCgpfSgwLG8sYSksZnVuY3Rpb24odCxlLHIsYSxpKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIG8oKXt2YXIgcztmb3Iocz0wO3M8bi5mb3JjZVRpY2tzUGVyRnJhbWU7cysrKXIuZm9yY2VMYXlvdXRzW2FdLnRpY2soKTt2YXIgbD1yLmdyYXBoLm5vZGVzO2lmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ueTA9dFtlXS55LXRbZV0uZHkvMix0W2VdLnkxPXRbZV0ueTArdFtlXS5keSx0W2VdLngwPXRbZV0ueC10W2VdLmR4LzIsdFtlXS54MT10W2VdLngwK3RbZV0uZHh9KGwpLHIuc2Fua2V5LnVwZGF0ZShyLmdyYXBoKSxfKHQuZmlsdGVyKEQocikpLGUpLHIuZm9yY2VMYXlvdXRzW2FdLmFscGhhKCk+MCl3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG8pO2Vsc2V7dmFyIGM9ci5ub2RlLm9yaWdpbmFsWDtyLm5vZGUueDA9Yy1yLnZpc2libGVXaWR0aC8yLHIubm9kZS54MT1jK3IudmlzaWJsZVdpZHRoLzIseihyLGkpfX0pfSh0LGUsYSxvLGkpfX0pLm9uKCJkcmFnIixmdW5jdGlvbihyKXtpZigiZml4ZWQiIT09ci5hcnJhbmdlbWVudCl7dmFyIG49YS5ldmVudC54LGk9YS5ldmVudC55OyJzbmFwIj09PXIuYXJyYW5nZW1lbnQ/KHIubm9kZS54MD1uLXIudmlzaWJsZVdpZHRoLzIsci5ub2RlLngxPW4rci52aXNpYmxlV2lkdGgvMixyLm5vZGUueTA9aS1yLnZpc2libGVIZWlnaHQvMixyLm5vZGUueTE9aStyLnZpc2libGVIZWlnaHQvMik6KCJmcmVlZm9ybSI9PT1yLmFycmFuZ2VtZW50JiYoci5ub2RlLngwPW4tci52aXNpYmxlV2lkdGgvMixyLm5vZGUueDE9bityLnZpc2libGVXaWR0aC8yKSxpPU1hdGgubWF4KDAsTWF0aC5taW4oci5zaXplLXIudmlzaWJsZUhlaWdodC8yLGkpKSxyLm5vZGUueTA9aS1yLnZpc2libGVIZWlnaHQvMixyLm5vZGUueTE9aStyLnZpc2libGVIZWlnaHQvMiksSShyLm5vZGUpLCJzbmFwIiE9PXIuYXJyYW5nZW1lbnQmJihyLnNhbmtleS51cGRhdGUoci5ncmFwaCksXyh0LmZpbHRlcihEKHIpKSxlKSl9fSkub24oImRyYWdlbmQiLGZ1bmN0aW9uKHQpe2lmKCJmaXhlZCIhPT10LmFycmFuZ2VtZW50KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3M9ITE7Zm9yKHZhciBlPTA7ZTx0Lm5vZGUuY2hpbGRyZW5Ob2Rlcy5sZW5ndGg7ZSsrKXQubm9kZS5jaGlsZHJlbk5vZGVzW2VdLng9dC5ub2RlLngsdC5ub2RlLmNoaWxkcmVuTm9kZXNbZV0ueT10Lm5vZGUueTsic25hcCIhPT10LmFycmFuZ2VtZW50JiZ6KHQsaSl9fSk7dC5vbigiLmRyYWciLG51bGwpLmNhbGwobyl9ZnVuY3Rpb24geih0LGUpe2Zvcih2YXIgcj1bXSxuPVtdLGE9MDthPHQuZ3JhcGgubm9kZXMubGVuZ3RoO2ErKyl7dmFyIGk9KHQuZ3JhcGgubm9kZXNbYV0ueDArdC5ncmFwaC5ub2Rlc1thXS54MSkvMixvPSh0LmdyYXBoLm5vZGVzW2FdLnkwK3QuZ3JhcGgubm9kZXNbYV0ueTEpLzI7ci5wdXNoKGkvdC5maWd1cmUud2lkdGgpLG4ucHVzaChvL3QuZmlndXJlLmhlaWdodCl9bS5jYWxsKCJfZ3VpUmVzdHlsZSIsZSx7Im5vZGUueCI6W3JdLCJub2RlLnkiOltuXX0sdC50cmFjZS5pbmRleCkudGhlbihmdW5jdGlvbigpe2UuX2Z1bGxMYXlvdXQuX2RyYWdDb3ZlciYmZS5fZnVsbExheW91dC5fZHJhZ0NvdmVyLnJlbW92ZSgpfSl9ZnVuY3Rpb24gSSh0KXt0Lmxhc3REcmFnZ2VkWD10LngwK3QuZHgvMix0Lmxhc3REcmFnZ2VkWT10LnkwK3QuZHkvMn1mdW5jdGlvbiBEKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlLm9yaWdpbmFsWD09PXQubm9kZS5vcmlnaW5hbFh9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1LGYpe3ZhciB2PSExO2guZW5zdXJlU2luZ2xlKHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllciwiZyIsImZpcnN0LXJlbmRlciIsZnVuY3Rpb24oKXt2PSEwfSk7dmFyIG09dC5fZnVsbExheW91dC5fZHJhZ0NvdmVyLGI9ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGcodCkudHJhY2UudmlzaWJsZX0pLm1hcChmdW5jdGlvbih0LGUscil7dmFyIGEsbz1nKGUpLHM9by50cmFjZSx1PXMuZG9tYWluLGY9ImgiPT09cy5vcmllbnRhdGlvbixwPXMubm9kZS5wYWQsZD1zLm5vZGUudGhpY2tuZXNzLHY9dC53aWR0aCoodS54WzFdLXUueFswXSksbT10LmhlaWdodCoodS55WzFdLXUueVswXSkseT1vLl9ub2Rlcyx4PW8uX2xpbmtzLGI9by5jaXJjdWxhcjsoYT1iP2Muc2Fua2V5Q2lyY3VsYXIoKS5jaXJjdWxhckxpbmtHYXAoMCk6bC5zYW5rZXkoKSkuaXRlcmF0aW9ucyhuLnNhbmtleUl0ZXJhdGlvbnMpLnNpemUoZj9bdixtXTpbbSx2XSkubm9kZVdpZHRoKGQpLm5vZGVQYWRkaW5nKHApLm5vZGVJZChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb2ludE51bWJlcn0pLm5vZGVzKHkpLmxpbmtzKHgpO3ZhciBfLHcsayxUPWEoKTtmb3IodmFyIE0gaW4gYS5ub2RlUGFkZGluZygpPHAmJmgud2Fybigibm9kZS5wYWQgd2FzIHJlZHVjZWQgdG8gIixhLm5vZGVQYWRkaW5nKCksIiB0byBmaXQgd2l0aGluIHRoZSBmaWd1cmUuIiksby5fZ3JvdXBMb29rdXApe3ZhciBBLFM9cGFyc2VJbnQoby5fZ3JvdXBMb29rdXBbTV0pO2ZvcihfPTA7XzxULm5vZGVzLmxlbmd0aDtfKyspaWYoVC5ub2Rlc1tfXS5wb2ludE51bWJlcj09PVMpe0E9VC5ub2Rlc1tfXTticmVha31pZihBKXt2YXIgRT17cG9pbnROdW1iZXI6cGFyc2VJbnQoTSkseDA6QS54MCx4MTpBLngxLHkwOkEueTAseTE6QS55MSxwYXJ0T2ZHcm91cDohMCxzb3VyY2VMaW5rczpbXSx0YXJnZXRMaW5rczpbXX07VC5ub2Rlcy51bnNoaWZ0KEUpLEEuY2hpbGRyZW5Ob2Rlcy51bnNoaWZ0KEUpfX1pZihmdW5jdGlvbigpe2ZvcihfPTA7XzxULm5vZGVzLmxlbmd0aDtfKyspe3ZhciB0LGUscj1ULm5vZGVzW19dLG49e307Zm9yKHc9MDt3PHIudGFyZ2V0TGlua3MubGVuZ3RoO3crKyl0PShlPXIudGFyZ2V0TGlua3Nbd10pLnNvdXJjZS5wb2ludE51bWJlcisiOiIrZS50YXJnZXQucG9pbnROdW1iZXIsbi5oYXNPd25Qcm9wZXJ0eSh0KXx8KG5bdF09W10pLG5bdF0ucHVzaChlKTt2YXIgYT1PYmplY3Qua2V5cyhuKTtmb3Iodz0wO3c8YS5sZW5ndGg7dysrKXt2YXIgbz1uW3Q9YVt3XV0scz0wLGw9e307Zm9yKGs9MDtrPG8ubGVuZ3RoO2srKylsWyhlPW9ba10pLmxhYmVsXXx8KGxbZS5sYWJlbF09MCksbFtlLmxhYmVsXSs9ZS52YWx1ZSxzKz1lLnZhbHVlO2ZvcihrPTA7azxvLmxlbmd0aDtrKyspKGU9b1trXSkuZmxvdz17dmFsdWU6cyxsYWJlbENvbmNlbnRyYXRpb246bFtlLmxhYmVsXS9zLGNvbmNlbnRyYXRpb246ZS52YWx1ZS9zLGxpbmtzOm99LGUuY29uY2VudHJhdGlvbnNjYWxlJiYoZS5jb2xvcj1pKGUuY29uY2VudHJhdGlvbnNjYWxlKGUuZmxvdy5sYWJlbENvbmNlbnRyYXRpb24pKSl9dmFyIGM9MDtmb3Iodz0wO3c8ci5zb3VyY2VMaW5rcy5sZW5ndGg7dysrKWMrPXIuc291cmNlTGlua3Nbd10udmFsdWU7Zm9yKHc9MDt3PHIuc291cmNlTGlua3MubGVuZ3RoO3crKykoZT1yLnNvdXJjZUxpbmtzW3ddKS5jb25jZW50cmF0aW9uT3V0PWUudmFsdWUvYzt2YXIgdT0wO2Zvcih3PTA7dzxyLnRhcmdldExpbmtzLmxlbmd0aDt3KyspdSs9ci50YXJnZXRMaW5rc1t3XS52YWx1ZTtmb3Iodz0wO3c8ci50YXJnZXRMaW5rcy5sZW5ndGg7dysrKShlPXIudGFyZ2V0TGlua3Nbd10pLmNvbmNlbnJhdGlvbkluPWUudmFsdWUvdX19KCkscy5ub2RlLngubGVuZ3RoJiZzLm5vZGUueS5sZW5ndGgpe2ZvcihfPTA7XzxNYXRoLm1pbihzLm5vZGUueC5sZW5ndGgscy5ub2RlLnkubGVuZ3RoLFQubm9kZXMubGVuZ3RoKTtfKyspaWYocy5ub2RlLnhbX10mJnMubm9kZS55W19dKXt2YXIgTD1bcy5ub2RlLnhbX10qdixzLm5vZGUueVtfXSptXTtULm5vZGVzW19dLngwPUxbMF0tZC8yLFQubm9kZXNbX10ueDE9TFswXStkLzI7dmFyIEM9VC5ub2Rlc1tfXS55MS1ULm5vZGVzW19dLnkwO1Qubm9kZXNbX10ueTA9TFsxXS1DLzIsVC5ub2Rlc1tfXS55MT1MWzFdK0MvMn0ic25hcCI9PT1zLmFycmFuZ2VtZW50JiZmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGUscixuLGE9MCxpPXQubGVuZ3RoO2Zvcih0LnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55MC1lLnkwfSksbj0wO248aTsrK24pKGU9dFtuXSkueTA+PWF8fChyPWEtZS55MCk+MWUtNiYmKGUueTArPXIsZS55MSs9ciksYT1lLnkxK3B9KX0oZnVuY3Rpb24odCl7dmFyIGUscixuPXQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3gwOnQueDAsaW5kZXg6ZX19KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueDAtZS54MH0pLGE9W10saT0tMSxvPS0xLzA7Zm9yKF89MDtfPG4ubGVuZ3RoO18rKyl7dmFyIHM9dFtuW19dLmluZGV4XTtzLngwPm8rZCYmKGkrPTEsZT1zLngwKSxvPXMueDAsYVtpXXx8KGFbaV09W10pLGFbaV0ucHVzaChzKSxyPWUtcy54MCxzLngwKz1yLHMueDErPXJ9cmV0dXJuIGF9KHk9VC5ub2RlcykpLGEudXBkYXRlKFQpfXJldHVybntjaXJjdWxhcjpiLGtleTpyLHRyYWNlOnMsZ3VpZDpoLnJhbmRzdHIoKSxob3Jpem9udGFsOmYsd2lkdGg6dixoZWlnaHQ6bSxub2RlUGFkOnMubm9kZS5wYWQsbm9kZUxpbmVDb2xvcjpzLm5vZGUubGluZS5jb2xvcixub2RlTGluZVdpZHRoOnMubm9kZS5saW5lLndpZHRoLGxpbmtMaW5lQ29sb3I6cy5saW5rLmxpbmUuY29sb3IsbGlua0xpbmVXaWR0aDpzLmxpbmsubGluZS53aWR0aCx2YWx1ZUZvcm1hdDpzLnZhbHVlZm9ybWF0LHZhbHVlU3VmZml4OnMudmFsdWVzdWZmaXgsdGV4dEZvbnQ6cy50ZXh0Zm9udCx0cmFuc2xhdGVYOnUueFswXSp0LndpZHRoK3QubWFyZ2luLmwsdHJhbnNsYXRlWTp0LmhlaWdodC11LnlbMV0qdC5oZWlnaHQrdC5tYXJnaW4udCxkcmFnUGFyYWxsZWw6Zj9tOnYsZHJhZ1BlcnBlbmRpY3VsYXI6Zj92Om0sYXJyYW5nZW1lbnQ6cy5hcnJhbmdlbWVudCxzYW5rZXk6YSxncmFwaDpULGZvcmNlTGF5b3V0czp7fSxpbnRlcmFjdGlvblN0YXRlOntkcmFnSW5Qcm9ncmVzczohMSxob3ZlcmVkOiExfX19LmJpbmQobnVsbCx1KSksXz1lLnNlbGVjdEFsbCgiLiIrbi5jbi5zYW5rZXkpLmRhdGEoYixwKTtfLmV4aXQoKS5yZW1vdmUoKSxfLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnNhbmtleSwhMCkuc3R5bGUoImJveC1zaXppbmciLCJjb250ZW50LWJveCIpLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJnZW9tZXRyaWNQcmVjaXNpb24iKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIikuYXR0cigidHJhbnNmb3JtIixUKSxfLmVhY2goZnVuY3Rpb24oZSxyKXt0Ll9mdWxsRGF0YVtyXS5fc2Fua2V5PWU7dmFyIG49ImJnc2Fua2V5LSIrZS50cmFjZS51aWQrIi0iK3I7aC5lbnN1cmVTaW5nbGUodC5fZnVsbExheW91dC5fZHJhZ2dlcnMsInJlY3QiLG4pLHQuX2Z1bGxEYXRhW3JdLl9iZ1JlY3Q9YS5zZWxlY3QoIi4iK24pLHQuX2Z1bGxEYXRhW3JdLl9iZ1JlY3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigid2lkdGgiLGUud2lkdGgpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpLmF0dHIoIngiLGUudHJhbnNsYXRlWCkuYXR0cigieSIsZS50cmFuc2xhdGVZKS5jbGFzc2VkKCJiZ3NhbmtleSIsITApLnN0eWxlKHtmaWxsOiJ0cmFuc3BhcmVudCIsInN0cm9rZS13aWR0aCI6MH0pfSksXy50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsVCk7dmFyIHo9Xy5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5TGlua3MpLmRhdGEoZCxwKTt6LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnNhbmtleUxpbmtzLCEwKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTt2YXIgST16LnNlbGVjdEFsbCgiLiIrbi5jbi5zYW5rZXlMaW5rKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdyYXBoLmxpbmtzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pLm1hcChmdW5jdGlvbih0LGUscil7dmFyIG49aShlLmNvbG9yKSxhPWUuc291cmNlLmxhYmVsKyJ8IitlLnRhcmdldC5sYWJlbCsiX18iK3I7cmV0dXJuIGUudHJhY2U9dC50cmFjZSxlLmN1cnZlTnVtYmVyPXQudHJhY2UuaW5kZXgse2NpcmN1bGFyOnQuY2lyY3VsYXIsa2V5OmEsdHJhY2VJZDp0LmtleSxwb2ludE51bWJlcjplLnBvaW50TnVtYmVyLGxpbms6ZSx0aW55Q29sb3JIdWU6by50aW55UkdCKG4pLHRpbnlDb2xvckFscGhhOm4uZ2V0QWxwaGEoKSxsaW5rUGF0aDp5LGxpbmtMaW5lQ29sb3I6dC5saW5rTGluZUNvbG9yLGxpbmtMaW5lV2lkdGg6dC5saW5rTGluZVdpZHRoLHZhbHVlRm9ybWF0OnQudmFsdWVGb3JtYXQsdmFsdWVTdWZmaXg6dC52YWx1ZVN1ZmZpeCxzYW5rZXk6dC5zYW5rZXkscGFyZW50OnQsaW50ZXJhY3Rpb25TdGF0ZTp0LmludGVyYWN0aW9uU3RhdGUsZmxvdzplLmZsb3d9fS5iaW5kKG51bGwsdCkpfSxwKTtJLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChuLmNuLnNhbmtleUxpbmssITApLmNhbGwoUCxfLGYubGlua0V2ZW50cyksSS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbih0KXtyZXR1cm4gayh0KT9vLnRpbnlSR0IoaSh0LmxpbmtMaW5lQ29sb3IpKTp0LnRpbnlDb2xvckh1ZX0pLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIGsodCk/by5vcGFjaXR5KHQubGlua0xpbmVDb2xvcik6dC50aW55Q29sb3JBbHBoYX0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KS5zdHlsZSgiZmlsbC1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiBrKHQpP3QubGlua0xpbmVXaWR0aDoxfSkuYXR0cigiZCIseSgpKSxJLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbigpe3JldHVybiB0Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fHZ8fG0/MTowfSkudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMSksSS5leGl0KCkudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk7dmFyIEQ9Xy5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5Tm9kZVNldCkuZGF0YShkLHApO0QuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Fua2V5Tm9kZVNldCwhMCksRC5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbih0KXtzd2l0Y2godC5hcnJhbmdlbWVudCl7Y2FzZSJmaXhlZCI6cmV0dXJuImRlZmF1bHQiO2Nhc2UicGVycGVuZGljdWxhciI6cmV0dXJuIm5zLXJlc2l6ZSI7ZGVmYXVsdDpyZXR1cm4ibW92ZSJ9fSk7dmFyIFI9RC5zZWxlY3RBbGwoIi4iK24uY24uc2Fua2V5Tm9kZSkuZGF0YShmdW5jdGlvbih0KXt2YXIgZT10LmdyYXBoLm5vZGVzO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZSxyPVtdO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5vcmlnaW5hbFg9KHRbZV0ueDArdFtlXS54MSkvMix0W2VdLm9yaWdpbmFsWT0odFtlXS55MCt0W2VdLnkxKS8yLC0xPT09ci5pbmRleE9mKHRbZV0ub3JpZ2luYWxYKSYmci5wdXNoKHRbZV0ub3JpZ2luYWxYKTtmb3Ioci5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLm9yaWdpbmFsTGF5ZXJJbmRleD1yLmluZGV4T2YodFtlXS5vcmlnaW5hbFgpLHRbZV0ub3JpZ2luYWxMYXllcj10W2VdLm9yaWdpbmFsTGF5ZXJJbmRleC8oci5sZW5ndGgtMSl9KGUpLGUubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9aShlLmNvbG9yKSxhPW4ubm9kZVBhZEFjcm9zcyxzPXQubm9kZVBhZC8yO2UuZHg9ZS54MS1lLngwLGUuZHk9ZS55MS1lLnkwO3ZhciBsPWUuZHgsYz1NYXRoLm1heCguNSxlLmR5KSx1PSJub2RlXyIrZS5wb2ludE51bWJlcjtyZXR1cm4gZS5ncm91cCYmKHU9aC5yYW5kc3RyKCkpLGUudHJhY2U9dC50cmFjZSxlLmN1cnZlTnVtYmVyPXQudHJhY2UuaW5kZXgse2luZGV4OmUucG9pbnROdW1iZXIsa2V5OnUscGFydE9mR3JvdXA6ZS5wYXJ0T2ZHcm91cHx8ITEsZ3JvdXA6ZS5ncm91cCx0cmFjZUlkOnQua2V5LHRyYWNlOnQudHJhY2Usbm9kZTplLG5vZGVQYWQ6dC5ub2RlUGFkLG5vZGVMaW5lQ29sb3I6dC5ub2RlTGluZUNvbG9yLG5vZGVMaW5lV2lkdGg6dC5ub2RlTGluZVdpZHRoLHRleHRGb250OnQudGV4dEZvbnQsc2l6ZTp0Lmhvcml6b250YWw/dC5oZWlnaHQ6dC53aWR0aCx2aXNpYmxlV2lkdGg6TWF0aC5jZWlsKGwpLHZpc2libGVIZWlnaHQ6Yyx6b25lWDotYSx6b25lWTotcyx6b25lV2lkdGg6bCsyKmEsem9uZUhlaWdodDpjKzIqcyxsYWJlbFk6dC5ob3Jpem9udGFsP2UuZHkvMisxOmUuZHgvMisxLGxlZnQ6MT09PWUub3JpZ2luYWxMYXllcixzaXplQWNyb3NzOnQud2lkdGgsZm9yY2VMYXlvdXRzOnQuZm9yY2VMYXlvdXRzLGhvcml6b250YWw6dC5ob3Jpem9udGFsLGRhcmtCYWNrZ3JvdW5kOnIuZ2V0QnJpZ2h0bmVzcygpPD0xMjgsdGlueUNvbG9ySHVlOm8udGlueVJHQihyKSx0aW55Q29sb3JBbHBoYTpyLmdldEFscGhhKCksdmFsdWVGb3JtYXQ6dC52YWx1ZUZvcm1hdCx2YWx1ZVN1ZmZpeDp0LnZhbHVlU3VmZml4LHNhbmtleTp0LnNhbmtleSxncmFwaDp0LmdyYXBoLGFycmFuZ2VtZW50OnQuYXJyYW5nZW1lbnQsdW5pcXVlTm9kZUxhYmVsUGF0aElkOlt0Lmd1aWQsdC5rZXksdV0uam9pbigiXyIpLGludGVyYWN0aW9uU3RhdGU6dC5pbnRlcmFjdGlvblN0YXRlLGZpZ3VyZTp0fX0uYmluZChudWxsLHQpKX0scCk7Ui5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zYW5rZXlOb2RlLCEwKS5jYWxsKHgpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbihlKXtyZXR1cm4hdC5fY29udGV4dC5zdGF0aWNQbG90JiYhdnx8ZS5wYXJ0T2ZHcm91cD8wOjF9KSxSLmNhbGwoUCxfLGYubm9kZUV2ZW50cykuY2FsbChPLEksZix0KSxSLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuY2FsbCh4KS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucGFydE9mR3JvdXA/MDoxfSksUi5leGl0KCkudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk7dmFyIEY9Ui5zZWxlY3RBbGwoIi4iK24uY24ubm9kZVJlY3QpLmRhdGEoZCk7Ri5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobi5jbi5ub2RlUmVjdCwhMCkuY2FsbCh3KSxGLnN0eWxlKCJzdHJva2Utd2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVMaW5lV2lkdGh9KS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbih0KXtyZXR1cm4gby50aW55UkdCKGkodC5ub2RlTGluZUNvbG9yKSl9KS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiBvLm9wYWNpdHkodC5ub2RlTGluZUNvbG9yKX0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KS5zdHlsZSgiZmlsbC1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pLEYudHJhbnNpdGlvbigpLmVhc2Uobi5lYXNlKS5kdXJhdGlvbihuLmR1cmF0aW9uKS5jYWxsKHcpO3ZhciBCPVIuc2VsZWN0QWxsKCIuIituLmNuLm5vZGVDYXB0dXJlKS5kYXRhKGQpO0IuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24ubm9kZUNhcHR1cmUsITApLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApLEIuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuem9uZVh9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lWX0pLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lV2lkdGh9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVIZWlnaHR9KTt2YXIgTj1SLnNlbGVjdEFsbCgiLiIrbi5jbi5ub2RlQ2VudGVyZWQpLmRhdGEoZCk7Ti5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5ub2RlQ2VudGVyZWQsITApLmF0dHIoInRyYW5zZm9ybSIsTSksTi50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsTSk7dmFyIGo9Ti5zZWxlY3RBbGwoIi4iK24uY24ubm9kZUxhYmVsR3VpZGUpLmRhdGEoZCk7ai5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobi5jbi5ub2RlTGFiZWxHdWlkZSwhMCkuYXR0cigiaWQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnVuaXF1ZU5vZGVMYWJlbFBhdGhJZH0pLmF0dHIoImQiLEEpLmF0dHIoInRyYW5zZm9ybSIsUyksai50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoImQiLEEpLmF0dHIoInRyYW5zZm9ybSIsUyk7dmFyIFY9Ti5zZWxlY3RBbGwoIi4iK24uY24ubm9kZUxhYmVsKS5kYXRhKGQpO1YuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKG4uY24ubm9kZUxhYmVsLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLEUpLnN0eWxlKCJ1c2VyLXNlbGVjdCIsIm5vbmUiKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKSxWLnN0eWxlKCJ0ZXh0LXNoYWRvdyIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbD8iLTFweCAxcHggMXB4ICNmZmYsIDFweCAxcHggMXB4ICNmZmYsIDFweCAtMXB4IDFweCAjZmZmLCAtMXB4IC0xcHggMXB4ICNmZmYiOiJub25lIn0pLmVhY2goZnVuY3Rpb24odCl7cy5mb250KFYsdC50ZXh0Rm9udCl9KSxWLnRyYW5zaXRpb24oKS5lYXNlKG4uZWFzZSkuZHVyYXRpb24obi5kdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIixFKTt2YXIgVT1WLnNlbGVjdEFsbCgiLiIrbi5jbi5ub2RlTGFiZWxUZXh0UGF0aCkuZGF0YShkKTtVLmVudGVyKCkuYXBwZW5kKCJ0ZXh0UGF0aCIpLmNsYXNzZWQobi5jbi5ub2RlTGFiZWxUZXh0UGF0aCwhMCkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigieGxpbms6aHJlZiIsZnVuY3Rpb24odCl7cmV0dXJuIiMiK3QudW5pcXVlTm9kZUxhYmVsUGF0aElkfSkuYXR0cigic3RhcnRPZmZzZXQiLEMpLnN0eWxlKCJmaWxsIixMKSxVLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHQuaG9yaXpvbnRhbHx8dC5ub2RlLmR5PjU/dC5ub2RlLmxhYmVsOiIifSkuYXR0cigidGV4dC1hbmNob3IiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvcml6b250YWwmJnQubGVmdD8iZW5kIjoic3RhcnQifSksVS50cmFuc2l0aW9uKCkuZWFzZShuLmVhc2UpLmR1cmF0aW9uKG4uZHVyYXRpb24pLmF0dHIoInN0YXJ0T2Zmc2V0IixDKS5zdHlsZSgiZmlsbCIsTCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvZ3VwIjo3MTUsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4vY29uc3RhbnRzIjoxMTEzLCJAcGxvdGx5L2QzLXNhbmtleSI6NTYsIkBwbG90bHkvZDMtc2Fua2V5LWNpcmN1bGFyIjo1NSxkMzoxNjUsImQzLWZvcmNlIjoxNTgsImQzLWludGVycG9sYXRlIjoxNjAsdGlueWNvbG9yMjo1MzZ9XSwxMTE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXQuY2RbMF0udHJhY2UsYT1uLl9zYW5rZXkuZ3JhcGgubm9kZXMsaT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgbz1hW2ldO2lmKCFvLnBhcnRPZkdyb3VwKXt2YXIgcz1bKG8ueDArby54MSkvMiwoby55MCtvLnkxKS8yXTsidiI9PT1uLm9yaWVudGF0aW9uJiZzLnJldmVyc2UoKSxlJiZlLmNvbnRhaW5zKHMsITEsaSx0KSYmci5wdXNoKHtwb2ludE51bWJlcjpvLnBvaW50TnVtYmVyfSl9fXJldHVybiByfX0se31dLDExMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5pPXI7bi5tZXJnZUFycmF5KGUudGV4dCx0LCJ0eCIpLG4ubWVyZ2VBcnJheShlLnRleHR0ZW1wbGF0ZSx0LCJ0eHQiKSxuLm1lcmdlQXJyYXkoZS5ob3ZlcnRleHQsdCwiaHR4Iiksbi5tZXJnZUFycmF5KGUuY3VzdG9tZGF0YSx0LCJkYXRhIiksbi5tZXJnZUFycmF5KGUudGV4dHBvc2l0aW9uLHQsInRwIiksZS50ZXh0Zm9udCYmKG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShlLnRleHRmb250LnNpemUsdCwidHMiKSxuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5jb2xvcix0LCJ0YyIpLG4ubWVyZ2VBcnJheShlLnRleHRmb250LmZhbWlseSx0LCJ0ZiIpKTt2YXIgYT1lLm1hcmtlcjtpZihhKXtuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoYS5zaXplLHQsIm1zIiksbi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGEub3BhY2l0eSx0LCJtbyIpLG4ubWVyZ2VBcnJheShhLnN5bWJvbCx0LCJteCIpLG4ubWVyZ2VBcnJheShhLmNvbG9yLHQsIm1jIik7dmFyIGk9YS5saW5lO2EubGluZSYmKG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsIm1sYyIpLG4ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShpLndpZHRoLHQsIm1sdyIpKTt2YXIgbz1hLmdyYWRpZW50O28mJiJub25lIiE9PW8udHlwZSYmKG4ubWVyZ2VBcnJheShvLnR5cGUsdCwibWd0Iiksbi5tZXJnZUFycmF5KG8uY29sb3IsdCwibWdjIikpfX19LHsiLi4vLi4vbGliIjo3MTd9XSwxMTIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSx4MDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGFuaW06ITB9LGR4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGFuaW06ITB9LHkwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsYW5pbTohMH0sZHk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIixhbmltOiEwfSxzdGFja2dyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxlZGl0VHlwZToiY2FsYyJ9LGdyb3Vwbm9ybTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiIiwiZnJhY3Rpb24iLCJwZXJjZW50Il0sZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHN0YWNrZ2Fwczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5mZXIgemVybyIsImludGVycG9sYXRlIl0sZGZsdDoiaW5mZXIgemVybyIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LHRleHR0ZW1wbGF0ZTpuKHt9LHt9KSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LG1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxpbmVzIiwibWFya2VycyIsInRleHQiXSxleHRyYXM6WyJub25lIl0sZWRpdFR5cGU6ImNhbGMifSxob3Zlcm9uOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJwb2ludHMiLCJmaWxscyJdLGVkaXRUeXBlOiJzdHlsZSJ9LGhvdmVydGVtcGxhdGU6YSh7fSx7a2V5czpjLmV2ZW50RGF0YUtleXN9KSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sc2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsInNwbGluZSIsImh2IiwidmgiLCJodmgiLCJ2aHYiXSxkZmx0OiJsaW5lYXIiLGVkaXRUeXBlOiJwbG90In0sc21vb3RoaW5nOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLjMsZGZsdDoxLGVkaXRUeXBlOiJwbG90In0sZGFzaDp1KHt9LHMse2VkaXRUeXBlOiJzdHlsZSJ9KSxzaW1wbGlmeTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sY29ubmVjdGdhcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxjbGlwb25heGlzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZmlsbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsInRvemVyb3kiLCJ0b3plcm94IiwidG9uZXh0eSIsInRvbmV4dHgiLCJ0b3NlbGYiLCJ0b25leHQiXSxlZGl0VHlwZToiY2FsYyJ9LGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sbWFya2VyOnUoe3N5bWJvbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOmwuc3ltYm9sTGlzdCxkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjYsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LHNpemVyZWY6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1pbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZGlhbWV0ZXIiLCJhcmVhIl0sZGZsdDoiZGlhbWV0ZXIiLGVkaXRUeXBlOiJjYWxjIn0sbGluZTp1KHt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSIsYW5pbTohMH0sZWRpdFR5cGU6ImNhbGMifSxpKCJtYXJrZXIubGluZSIse2FuaW06ITB9KSksZ3JhZGllbnQ6e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhZGlhbCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIm5vbmUiXSxhcnJheU9rOiEwLGRmbHQ6Im5vbmUiLGVkaXRUeXBlOiJjYWxjIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGkoIm1hcmtlciIse2FuaW06ITB9KSksc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToic3R5bGUifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJzdHlsZSJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBsZWZ0IiwibWlkZGxlIGNlbnRlciIsIm1pZGRsZSByaWdodCIsImJvdHRvbSBsZWZ0IiwiYm90dG9tIGNlbnRlciIsImJvdHRvbSByaWdodCJdLGRmbHQ6Im1pZGRsZSBjZW50ZXIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx0ZXh0Zm9udDpvKHtlZGl0VHlwZToiY2FsYyIsY29sb3JFZGl0VHlwZToic3R5bGUiLGFycmF5T2s6ITB9KSxyOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1OTksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NjEyLCIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NzkxLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NDEsIi4vY29uc3RhbnRzIjoxMTI0fV0sMTEyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxzPXQoIi4vc3VidHlwZXMiKSxsPXQoIi4vY29sb3JzY2FsZV9jYWxjIiksYz10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLHU9dCgiLi9jYWxjX3NlbGVjdGlvbiIpO2Z1bmN0aW9uIGgodCxlLHIsbixhLG8sbCl7dmFyIGM9ZS5fbGVuZ3RoLHU9dC5fZnVsbExheW91dCxoPXIuX2lkLGY9bi5faWQscD11Ll9maXJzdFNjYXR0ZXJbZChlKV09PT1lLnVpZCx2PShnKGUsdSxyLG4pfHx7fSkub3JpZW50YXRpb24sbT1lLmZpbGw7ci5fbWluRHRpY2s9MCxuLl9taW5EdGljaz0wO3ZhciB5PXtwYWRkZWQ6ITB9LHg9e3BhZGRlZDohMH07bCYmKHkucHBhZD14LnBwYWQ9bCk7dmFyIGI9YzwyfHxhWzBdIT09YVtjLTFdfHxvWzBdIT09b1tjLTFdO2ImJigidG96ZXJveCI9PT1tfHwidG9uZXh0eCI9PT1tJiYocHx8ImgiPT09dikpP3kudG96ZXJvPSEwOihlLmVycm9yX3l8fHt9KS52aXNpYmxlfHwidG9uZXh0eSIhPT1tJiYidG96ZXJveSIhPT1tJiYocy5oYXNNYXJrZXJzKGUpfHxzLmhhc1RleHQoZSkpfHwoeS5wYWRkZWQ9ITEseS5wcGFkPTApLGImJigidG96ZXJveSI9PT1tfHwidG9uZXh0eSI9PT1tJiYocHx8InYiPT09dikpP3gudG96ZXJvPSEwOiJ0b25leHR4IiE9PW0mJiJ0b3plcm94IiE9PW18fCh4LnBhZGRlZD0hMSksaCYmKGUuX2V4dHJlbWVzW2hdPWkuZmluZEV4dHJlbWVzKHIsYSx5KSksZiYmKGUuX2V4dHJlbWVzW2ZdPWkuZmluZEV4dHJlbWVzKG4sbyx4KSl9ZnVuY3Rpb24gZih0LGUpe2lmKHMuaGFzTWFya2Vycyh0KSl7dmFyIHIsbj10Lm1hcmtlcixvPTEuNioodC5tYXJrZXIuc2l6ZXJlZnx8MSk7aWYocj0iYXJlYSI9PT10Lm1hcmtlci5zaXplbW9kZT9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KCh0fHwwKS9vKSwzKX06ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KCh0fHwwKS9vLDMpfSxhLmlzQXJyYXlPclR5cGVkQXJyYXkobi5zaXplKSl7dmFyIGw9e3R5cGU6ImxpbmVhciJ9O2kuc2V0Q29udmVydChsKTtmb3IodmFyIGM9bC5tYWtlQ2FsY2RhdGEodC5tYXJrZXIsInNpemUiKSx1PW5ldyBBcnJheShlKSxoPTA7aDxlO2grKyl1W2hdPXIoY1toXSk7cmV0dXJuIHV9cmV0dXJuIHIobi5zaXplKX19ZnVuY3Rpb24gcCh0LGUpe3ZhciByPWQoZSksbj10Ll9maXJzdFNjYXR0ZXI7bltyXXx8KG5bcl09ZS51aWQpfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5zdGFja2dyb3VwO3JldHVybiB0LnhheGlzK3QueWF4aXMrdC50eXBlKyhlPyItIitlOiIiKX1mdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBhPXQuc3RhY2tncm91cDtpZihhKXt2YXIgaT1lLl9zY2F0dGVyU3RhY2tPcHRzW3IuX2lkK24uX2lkXVthXSxvPSJ2Ij09PWkub3JpZW50YXRpb24/bjpyO3JldHVybiJsaW5lYXIiPT09by50eXBlfHwibG9nIj09PW8udHlwZT9pOnZvaWQgMH19ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIscyxkLHYsbSx5LHg9dC5fZnVsbExheW91dCxiPWkuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxfPWkuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSx3PWIubWFrZUNhbGNkYXRhKGUsIngiKSxrPV8ubWFrZUNhbGNkYXRhKGUsInkiKSxUPWUuX2xlbmd0aCxNPW5ldyBBcnJheShUKSxBPWUuaWRzLFM9ZyhlLHgsYixfKSxFPSExO3AoeCxlKTt2YXIgTCxDPSJ4IixQPSJ5Ijtmb3IoUz8oYS5wdXNoVW5pcXVlKFMudHJhY2VJbmRpY2VzLGUuX2V4cGFuZGVkSW5kZXgpLChyPSJ2Ij09PVMub3JpZW50YXRpb24pPyhQPSJzIixMPSJ4Iik6KEM9InMiLEw9InkiKSxtPSJpbnRlcnBvbGF0ZSI9PT1TLnN0YWNrZ2Fwcyk6aCh0LGUsYixfLHcsayxmKGUsVCkpLHM9MDtzPFQ7cysrKXt2YXIgTz1NW3NdPXt9LHo9bih3W3NdKSxJPW4oa1tzXSk7eiYmST8oT1tDXT13W3NdLE9bUF09a1tzXSk6UyYmKHI/ejpJKT8oT1tMXT1yP3dbc106a1tzXSxPLmdhcD0hMCxtPyhPLnM9byxFPSEwKTpPLnM9MCk6T1tDXT1PW1BdPW8sQSYmKE8uaWQ9U3RyaW5nKEFbc10pKX1pZihjKE0sZSksbCh0LGUpLHUoTSxlKSxTKXtmb3Iocz0wO3M8TS5sZW5ndGg7KU1bc11bTF09PT1vP00uc3BsaWNlKHMsMSk6cysrO2lmKGEuc29ydChNLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbTF0tZVtMXXx8dC5pLWUuaX0pLEUpe2ZvcihzPTA7czxNLmxlbmd0aC0xJiZNW3NdLmdhcDspcysrO2ZvcigoeT1NW3NdLnMpfHwoeT1NW3NdLnM9MCksZD0wO2Q8cztkKyspTVtkXS5zPXk7Zm9yKHY9TS5sZW5ndGgtMTt2PnMmJk1bdl0uZ2FwOyl2LS07Zm9yKHk9TVt2XS5zLGQ9TS5sZW5ndGgtMTtkPnY7ZC0tKU1bZF0ucz15O2Zvcig7czx2OylpZihNWysrc10uZ2FwKXtmb3IoZD1zKzE7TVtkXS5nYXA7KWQrKztmb3IodmFyIEQ9TVtzLTFdW0xdLFI9TVtzLTFdLnMsRj0oTVtkXS5zLVIpLyhNW2RdW0xdLUQpO3M8ZDspTVtzXS5zPVIrKE1bc11bTF0tRCkqRixzKyt9fX1yZXR1cm4gTX0sY2FsY01hcmtlclNpemU6ZixjYWxjQXhpc0V4cGFuc2lvbjpoLHNldEZpcnN0U2NhdHRlcjpwLGdldFN0YWNrT3B0czpnfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2OTMsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuL2FycmF5c190b19jYWxjZGF0YSI6MTExOSwiLi9jYWxjX3NlbGVjdGlvbiI6MTEyMiwiLi9jb2xvcnNjYWxlX2NhbGMiOjExMjMsIi4vc3VidHlwZXMiOjExNDQsImZhc3QtaXNudW1lcmljIjoyMjh9XSwxMTIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe24uaXNBcnJheU9yVHlwZWRBcnJheShlLnNlbGVjdGVkcG9pbnRzKSYmbi50YWdTZWxlY3RlZCh0LGUpfX0seyIuLi8uLi9saWIiOjcxN31dLDExMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxpPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpLmhhc0xpbmVzKGUpJiZuKGUsImxpbmUiKSYmYSh0LGUse3ZhbHM6ZS5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibGluZSIsY0xldHRlcjoiYyJ9KSxpLmhhc01hcmtlcnMoZSkmJihuKGUsIm1hcmtlciIpJiZhKHQsZSx7dmFsczplLm1hcmtlci5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlciIsY0xldHRlcjoiYyJ9KSxuKGUsIm1hcmtlci5saW5lIikmJmEodCxlLHt2YWxzOmUubWFya2VyLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIubGluZSIsY0xldHRlcjoiYyJ9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MDAsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo2MDMsIi4vc3VidHlwZXMiOjExNDR9XSwxMTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17UFRTX0xJTkVTT05MWToyMCxtaW5Ub2xlcmFuY2U6LjIsdG9sZXJhbmNlR3Jvd3RoOjEwLG1heFNjcmVlbnNBd2F5OjIwLGV2ZW50RGF0YUtleXM6W119fSx7fV0sMTEyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhbGMiKTtmdW5jdGlvbiBhKHQsZSxyLG4sYSxpLG8pe2Fbbl09ITA7dmFyIHM9e2k6bnVsbCxnYXA6ITAsczowfTtpZihzW29dPXIsdC5zcGxpY2UoZSwwLHMpLGUmJnI9PT10W2UtMV1bb10pe3ZhciBsPXRbZS0xXTtzLnM9bC5zLHMuaT1sLmkscy5nYXA9bC5nYXB9ZWxzZSBpJiYocy5zPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXRbZS0xXSxpPXRbZSsxXTtyZXR1cm4gaT9hP2EucysoaS5zLWEucykqKHItYVtuXSkvKGlbbl0tYVtuXSk6aS5zOmEuc30odCxlLHIsbykpO2V8fCh0WzBdLnQ9dFsxXS50LHRbMF0udHJhY2U9dFsxXS50cmFjZSxkZWxldGUgdFsxXS50LGRlbGV0ZSB0WzFdLnRyYWNlKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnhheGlzLGk9ZS55YXhpcyxvPXIuX2lkK2kuX2lkLHM9dC5fZnVsbExheW91dC5fc2NhdHRlclN0YWNrT3B0c1tvXTtpZihzKXt2YXIgbCxjLHUsaCxmLHAsZCxnLHYsbSx5LHgsYixfLHcsaz10LmNhbGNkYXRhO2Zvcih2YXIgVCBpbiBzKXt2YXIgTT0obT1zW1RdKS50cmFjZUluZGljZXM7aWYoTS5sZW5ndGgpe2Zvcih5PSJpbnRlcnBvbGF0ZSI9PT1tLnN0YWNrZ2Fwcyx4PW0uZ3JvdXBub3JtLCJ2Ij09PW0ub3JpZW50YXRpb24/KGI9IngiLF89InkiKTooYj0ieSIsXz0ieCIpLHc9bmV3IEFycmF5KE0ubGVuZ3RoKSxsPTA7bDx3Lmxlbmd0aDtsKyspd1tsXT0hMTtwPWtbTVswXV07dmFyIEE9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IobD0wO2w8cC5sZW5ndGg7bCsrKUFbbF09cFtsXVtiXTtmb3IobD0xO2w8TS5sZW5ndGg7bCsrKXtmb3IoZj1rW01bbF1dLGM9dT0wO2M8Zi5sZW5ndGg7YysrKXtmb3IoZD1mW2NdW2JdO2Q+QVt1XSYmdTxBLmxlbmd0aDt1KyspYShmLGMsQVt1XSxsLHcseSxiKSxjKys7aWYoZCE9PUFbdV0pe2ZvcihoPTA7aDxsO2grKylhKGtbTVtoXV0sdSxkLGgsdyx5LGIpO0Euc3BsaWNlKHUsMCxkKX11Kyt9Zm9yKDt1PEEubGVuZ3RoO3UrKylhKGYsYyxBW3VdLGwsdyx5LGIpLGMrK312YXIgUz1BLmxlbmd0aDtmb3IoYz0wO2M8cC5sZW5ndGg7YysrKXtmb3IoZz1wW2NdW19dPXBbY10ucyxsPTE7bDxNLmxlbmd0aDtsKyspKGY9a1tNW2xdXSlbMF0udHJhY2UuX3Jhd0xlbmd0aD1mWzBdLnRyYWNlLl9sZW5ndGgsZlswXS50cmFjZS5fbGVuZ3RoPVMsZys9ZltjXS5zLGZbY11bX109ZztpZih4KWZvcih2PSgiZnJhY3Rpb24iPT09eD9nOmcvMTAwKXx8MSxsPTA7bDxNLmxlbmd0aDtsKyspe3ZhciBFPWtbTVtsXV1bY107RVtfXS89dixFLnNOb3JtPUUucy92fX1mb3IobD0wO2w8TS5sZW5ndGg7bCsrKXt2YXIgTD0oZj1rW01bbF1dKVswXS50cmFjZSxDPW4uY2FsY01hcmtlclNpemUoTCxMLl9yYXdMZW5ndGgpLFA9QXJyYXkuaXNBcnJheShDKTtpZihDJiZ3W2xdfHxQKXt2YXIgTz1DO2ZvcihDPW5ldyBBcnJheShTKSxjPTA7YzxTO2MrKylDW2NdPWZbY10uZ2FwPzA6UD9PW2ZbY10uaV06T312YXIgej1uZXcgQXJyYXkoUyksST1uZXcgQXJyYXkoUyk7Zm9yKGM9MDtjPFM7YysrKXpbY109ZltjXS54LElbY109ZltjXS55O24uY2FsY0F4aXNFeHBhbnNpb24odCxMLHIsaSx6LEksQyksZlswXS50Lm9yaWVudGF0aW9uPW0ub3JpZW50YXRpb259fX19fX0seyIuL2NhbGMiOjExMjF9XSwxMTI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIHI9dFtlXTtpZigic2NhdHRlciI9PT1yLnR5cGUpe3ZhciBuPXIuZmlsbDtpZigibm9uZSIhPT1uJiYidG9zZWxmIiE9PW4mJihyLm9wYWNpdHk9dm9pZCAwLCJ0b25leHR5Ij09PW58fCJ0b25leHR4Ij09PW4pKWZvcih2YXIgYT1lLTE7YT49MDthLS0pe3ZhciBpPXRbYV07aWYoInNjYXR0ZXIiPT09aS50eXBlJiZpLnhheGlzPT09ci54YXhpcyYmaS55YXhpcz09PXIueWF4aXMpe2kub3BhY2l0eT12b2lkIDA7YnJlYWt9fX19fX0se31dLDExMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiLi9zdWJ0eXBlcyIpLGw9dCgiLi94eV9kZWZhdWx0cyIpLGM9dCgiLi9zdGFja19kZWZhdWx0cyIpLHU9dCgiLi9tYXJrZXJfZGVmYXVsdHMiKSxoPXQoIi4vbGluZV9kZWZhdWx0cyIpLGY9dCgiLi9saW5lX3NoYXBlX2RlZmF1bHRzIikscD10KCIuL3RleHRfZGVmYXVsdHMiKSxkPXQoIi4vZmlsbGNvbG9yX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGcpe2Z1bmN0aW9uIHYocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgbT1sKHQsZSxnLHYpO2lmKG18fChlLnZpc2libGU9ITEpLGUudmlzaWJsZSl7dmFyIHk9Yyh0LGUsZyx2KSx4PSF5JiZtPG8uUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIjt2KCJ0ZXh0IiksdigiaG92ZXJ0ZXh0IiksdigibW9kZSIseCkscy5oYXNMaW5lcyhlKSYmKGgodCxlLHIsZyx2KSxmKHQsZSx2KSx2KCJjb25uZWN0Z2FwcyIpLHYoImxpbmUuc2ltcGxpZnkiKSkscy5oYXNNYXJrZXJzKGUpJiZ1KHQsZSxyLGcsdix7Z3JhZGllbnQ6ITB9KSxzLmhhc1RleHQoZSkmJih2KCJ0ZXh0dGVtcGxhdGUiKSxwKHQsZSxnLHYpKTt2YXIgYj1bXTsocy5oYXNNYXJrZXJzKGUpfHxzLmhhc1RleHQoZSkpJiYodigiY2xpcG9uYXhpcyIpLHYoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSxiLnB1c2goInBvaW50cyIpKSx2KCJmaWxsIix5P3kuZmlsbERmbHQ6Im5vbmUiKSwibm9uZSIhPT1lLmZpbGwmJihkKHQsZSxyLHYpLHMuaGFzTGluZXMoZSl8fGYodCxlLHYpKTt2YXIgXz0oZS5saW5lfHx7fSkuY29sb3Isdz0oZS5tYXJrZXJ8fHt9KS5jb2xvcjsidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fGIucHVzaCgiZmlsbHMiKSx2KCJob3Zlcm9uIixiLmpvaW4oIisiKXx8InBvaW50cyIpLCJmaWxscyIhPT1lLmhvdmVyb24mJnYoImhvdmVydGVtcGxhdGUiKTt2YXIgaz1hLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTtrKHQsZSxffHx3fHxyLHtheGlzOiJ5In0pLGsodCxlLF98fHd8fHIse2F4aXM6IngiLGluaGVyaXQ6InkifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsdil9fX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi9hdHRyaWJ1dGVzIjoxMTIwLCIuL2NvbnN0YW50cyI6MTEyNCwiLi9maWxsY29sb3JfZGVmYXVsdHMiOjExMjgsIi4vbGluZV9kZWZhdWx0cyI6MTEzMywiLi9saW5lX3NoYXBlX2RlZmF1bHRzIjoxMTM1LCIuL21hcmtlcl9kZWZhdWx0cyI6MTEzOSwiLi9zdGFja19kZWZhdWx0cyI6MTE0MiwiLi9zdWJ0eXBlcyI6MTE0NCwiLi90ZXh0X2RlZmF1bHRzIjoxMTQ1LCIuL3h5X2RlZmF1bHRzIjoxMTQ2fV0sMTEyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgbz0hMTtpZihlLm1hcmtlcil7dmFyIHM9ZS5tYXJrZXIuY29sb3IsbD0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yO3MmJiFhKHMpP289czpsJiYhYShsKSYmKG89bCl9aSgiZmlsbGNvbG9yIixuLmFkZE9wYWNpdHkoKGUubGluZXx8e30pLmNvbG9yfHxvfHxyLC41KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vbGliIjo3MTd9XSwxMTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT17fSxpPXtfZnVsbExheW91dDpyfSxvPW4uZ2V0RnJvbVRyYWNlKGksZSwieCIpLHM9bi5nZXRGcm9tVHJhY2UoaSxlLCJ5Iik7cmV0dXJuIGEueExhYmVsPW4udGlja1RleHQobyx0LngsITApLnRleHQsYS55TGFiZWw9bi50aWNrVGV4dChzLHQueSwhMCkudGV4dCxhfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1fV0sMTEzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaTtpZigibGluZXMiPT09dC5tb2RlKXJldHVybihyPXQubGluZS5jb2xvcikmJm4ub3BhY2l0eShyKT9yOnQuZmlsbGNvbG9yO2lmKCJub25lIj09PXQubW9kZSlyZXR1cm4gdC5maWxsP3QuZmlsbGNvbG9yOiIiO3ZhciBvPWUubWNjfHwodC5tYXJrZXJ8fHt9KS5jb2xvcixzPWUubWxjY3x8KCh0Lm1hcmtlcnx8e30pLmxpbmV8fHt9KS5jb2xvcjtyZXR1cm4oaT1vJiZuLm9wYWNpdHkobyk/bzpzJiZuLm9wYWNpdHkocykmJihlLm1sd3x8KCh0Lm1hcmtlcnx8e30pLmxpbmV8fHt9KS53aWR0aCk/czoiIik/bi5vcGFjaXR5KGkpPC4zP24uYWRkT3BhY2l0eShpLC4zKTppOihyPSh0LmxpbmV8fHt9KS5jb2xvcikmJm4ub3BhY2l0eShyKSYmYS5oYXNMaW5lcyh0KSYmdC5saW5lLndpZHRoP3I6dC5maWxsY29sb3J9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi9zdWJ0eXBlcyI6MTE0NH1dLDExMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi9nZXRfdHJhY2VfY29sb3IiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxsPW4uZmlsbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuY2QsaD11WzBdLnRyYWNlLGY9dC54YSxwPXQueWEsZD1mLmMycChlKSxnPXAuYzJwKHIpLHY9W2QsZ10sbT1oLmhvdmVyb258fCIiLHk9LTEhPT1oLm1vZGUuaW5kZXhPZigibWFya2VycyIpPzM6LjU7aWYoLTEhPT1tLmluZGV4T2YoInBvaW50cyIpKXt2YXIgeD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCh5LHQubXJjfHwwKSxyPWYuYzJwKHQueCktZCxuPXAuYzJwKHQueSktZztyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KHIqcituKm4pLWUsMS15L2UpfSxiPWEuZ2V0RGlzdGFuY2VGdW5jdGlvbihjLGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApLHI9MS0xL2Usbj1NYXRoLmFicyhmLmMycCh0LngpLWQpO3JldHVybiBuPGU/cipuL2U6bi1lK3J9LGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDMsdC5tcmN8fDApLHI9MS0xL2Usbj1NYXRoLmFicyhwLmMycCh0LnkpLWcpO3JldHVybiBuPGU/cipuL2U6bi1lK3J9LHgpO2lmKGEuZ2V0Q2xvc2VzdCh1LGIsdCksITEhPT10LmluZGV4KXt2YXIgXz11W3QuaW5kZXhdLHc9Zi5jMnAoXy54LCEwKSxrPXAuYzJwKF8ueSwhMCksVD1fLm1yY3x8MTt0LmluZGV4PV8uaTt2YXIgTT11WzBdLnQub3JpZW50YXRpb24sQT1NJiYoXy5zTm9ybXx8Xy5zKSxTPSJoIj09PU0/QTpfLngsRT0idiI9PT1NP0E6Xy55O3JldHVybiBuLmV4dGVuZEZsYXQodCx7Y29sb3I6byhoLF8pLHgwOnctVCx4MTp3K1QseExhYmVsVmFsOlMseTA6ay1ULHkxOmsrVCx5TGFiZWxWYWw6RSxzcGlrZURpc3RhbmNlOngoXyksaG92ZXJ0ZW1wbGF0ZTpoLmhvdmVydGVtcGxhdGV9KSxsKF8saCx0KSxpLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikoXyxoLHQpLFt0XX19aWYoLTEhPT1tLmluZGV4T2YoImZpbGxzIikmJmguX3BvbHlnb25zKXt2YXIgTCxDLFAsTyx6LEksRCxSLEYsQj1oLl9wb2x5Z29ucyxOPVtdLGo9ITEsVj0xLzAsVT0tMS8wLHE9MS8wLEg9LTEvMDtmb3IoTD0wO0w8Qi5sZW5ndGg7TCsrKShQPUJbTF0pLmNvbnRhaW5zKHYpJiYoaj0haixOLnB1c2goUCkscT1NYXRoLm1pbihxLFAueW1pbiksSD1NYXRoLm1heChILFAueW1heCkpO2lmKGope3ZhciBHPSgocT1NYXRoLm1heChxLDApKSsoSD1NYXRoLm1pbihILHAuX2xlbmd0aCkpKS8yO2ZvcihMPTA7TDxOLmxlbmd0aDtMKyspZm9yKE89TltMXS5wdHMsQz0xO0M8Ty5sZW5ndGg7QysrKShSPU9bQy0xXVsxXSk+RyE9KEY9T1tDXVsxXSk+PUcmJihJPU9bQy0xXVswXSxEPU9bQ11bMF0sRi1SJiYoej1JKyhELUkpKihHLVIpLyhGLVIpLFY9TWF0aC5taW4oVix6KSxVPU1hdGgubWF4KFUseikpKTtWPU1hdGgubWF4KFYsMCksVT1NYXRoLm1pbihVLGYuX2xlbmd0aCk7dmFyIFk9cy5kZWZhdWx0TGluZTtyZXR1cm4gcy5vcGFjaXR5KGguZmlsbGNvbG9yKT9ZPWguZmlsbGNvbG9yOnMub3BhY2l0eSgoaC5saW5lfHx7fSkuY29sb3IpJiYoWT1oLmxpbmUuY29sb3IpLG4uZXh0ZW5kRmxhdCh0LHtkaXN0YW5jZTp0Lm1heEhvdmVyRGlzdGFuY2UseDA6Vix4MTpVLHkwOkcseTE6Ryxjb2xvcjpZLGhvdmVydGVtcGxhdGU6ITF9KSxkZWxldGUgdC5pbmRleCxoLnRleHQmJiFBcnJheS5pc0FycmF5KGgudGV4dCk/dC50ZXh0PVN0cmluZyhoLnRleHQpOnQudGV4dD1oLm5hbWUsW3RdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vY29tcG9uZW50cy9meCI6NjMwLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi9nZXRfdHJhY2VfY29sb3IiOjExMzB9XSwxMTMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9e2hhc0xpbmVzOm4uaGFzTGluZXMsaGFzTWFya2VyczpuLmhhc01hcmtlcnMsaGFzVGV4dDpuLmhhc1RleHQsaXNCdWJibGU6bi5pc0J1YmJsZSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKSxhcnJheXNUb0NhbGNkYXRhOnQoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIikscGxvdDp0KCIuL3Bsb3QiKSxjb2xvcmJhcjp0KCIuL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuL2Zvcm1hdF9sYWJlbHMiKSxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksYW5pbWF0YWJsZTohMCxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlciIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsInN5bWJvbHMiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NiwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjExMTksIi4vYXR0cmlidXRlcyI6MTEyMCwiLi9jYWxjIjoxMTIxLCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjExMjUsIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjExMjYsIi4vZGVmYXVsdHMiOjExMjcsIi4vZm9ybWF0X2xhYmVscyI6MTEyOSwiLi9ob3ZlciI6MTEzMSwiLi9tYXJrZXJfY29sb3JiYXIiOjExMzgsIi4vcGxvdCI6MTE0MCwiLi9zZWxlY3QiOjExNDEsIi4vc3R5bGUiOjExNDMsIi4vc3VidHlwZXMiOjExNDR9XSwxMTMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjPSh0Lm1hcmtlcnx8e30pLmNvbG9yOyhzKCJsaW5lLmNvbG9yIixyKSxhKHQsImxpbmUiKSk/aSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pOnMoImxpbmUuY29sb3IiLCFuKGMpJiZjfHxyKTtzKCJsaW5lLndpZHRoIiksKGx8fHt9KS5ub0Rhc2h8fHMoImxpbmUuZGFzaCIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjYwMywiLi4vLi4vbGliIjo3MTd9XSwxMTM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxhPW4uQkFETlVNLGk9bi5MT0dfQ0xJUCxvPWkrLjUscz1pLS41LGw9dCgiLi4vLi4vbGliIiksYz1sLnNlZ21lbnRzSW50ZXJzZWN0LHU9bC5jb25zdHJhaW4saD10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxmLHAsZCxnLHYsbSx5LHgsYixfLHcsayxULE0sQSxTPWUueGF4aXMsRT1lLnlheGlzLEw9ImxvZyI9PT1TLnR5cGUsQz0ibG9nIj09PUUudHlwZSxQPVMuX2xlbmd0aCxPPUUuX2xlbmd0aCx6PWUuY29ubmVjdEdhcHMsST1lLmJhc2VUb2xlcmFuY2UsRD1lLnNoYXBlLFI9ImxpbmVhciI9PT1ELEY9ZS5maWxsJiYibm9uZSIhPT1lLmZpbGwsQj1bXSxOPWgubWluVG9sZXJhbmNlLGo9dC5sZW5ndGgsVj1uZXcgQXJyYXkoaiksVT0wO2Z1bmN0aW9uIHEocil7dmFyIG49dFtyXTtpZighbilyZXR1cm4hMTt2YXIgaT1lLmxpbmVhcml6ZWQ/Uy5sMnAobi54KTpTLmMycChuLngpLGw9ZS5saW5lYXJpemVkP0UubDJwKG4ueSk6RS5jMnAobi55KTtpZihpPT09YSl7aWYoTCYmKGk9Uy5jMnAobi54LCEwKSksaT09PWEpcmV0dXJuITE7QyYmbD09PWEmJihpKj1NYXRoLmFicyhTLl9tKk8qKFMuX20+MD9vOnMpLyhFLl9tKlAqKEUuX20+MD9vOnMpKSkpLGkqPTFlM31pZihsPT09YSl7aWYoQyYmKGw9RS5jMnAobi55LCEwKSksbD09PWEpcmV0dXJuITE7bCo9MWUzfXJldHVybltpLGxdfWZ1bmN0aW9uIEgodCxlLHIsbil7dmFyIGE9ci10LGk9bi1lLG89LjUtdCxzPS41LWUsbD1hKmEraSppLGM9YSpvK2kqcztpZihjPjAmJmM8bCl7dmFyIHU9byppLXMqYTtpZih1KnU8bClyZXR1cm4hMH19ZnVuY3Rpb24gRyh0LGUpe3ZhciByPXRbMF0vUCxuPXRbMV0vTyxhPU1hdGgubWF4KDAsLXIsci0xLC1uLG4tMSk7cmV0dXJuIGEmJnZvaWQgMCE9PU0mJkgocixuLE0sQSkmJihhPTApLGEmJmUmJkgocixuLGVbMF0vUCxlWzFdL08pJiYoYT0wKSwoMStoLnRvbGVyYW5jZUdyb3d0aCphKSpJfWZ1bmN0aW9uIFkodCxlKXt2YXIgcj10WzBdLWVbMF0sbj10WzFdLWVbMV07cmV0dXJuIE1hdGguc3FydChyKnIrbipuKX12YXIgVyxYLFosSixLLFEsJCx0dD1oLm1heFNjcmVlbnNBd2F5LGV0PS1QKnR0LHJ0PVAqKDErdHQpLG50PS1PKnR0LGF0PU8qKDErdHQpLGl0PVtbZXQsbnQscnQsbnRdLFtydCxudCxydCxhdF0sW3J0LGF0LGV0LGF0XSxbZXQsYXQsZXQsbnRdXTtmdW5jdGlvbiBvdCh0KXtpZih0WzBdPGV0fHx0WzBdPnJ0fHx0WzFdPG50fHx0WzFdPmF0KXJldHVyblt1KHRbMF0sZXQscnQpLHUodFsxXSxudCxhdCldfWZ1bmN0aW9uIHN0KHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiYodFswXT09PWV0fHx0WzBdPT09cnQpfHwodFsxXT09PWVbMV0mJih0WzFdPT09bnR8fHRbMV09PT1hdCl8fHZvaWQgMCl9ZnVuY3Rpb24gbHQodCxlLHIpe3JldHVybiBmdW5jdGlvbihuLGEpe3ZhciBpPW90KG4pLG89b3QoYSkscz1bXTtpZihpJiZvJiZzdChpLG8pKXJldHVybiBzO2kmJnMucHVzaChpKSxvJiZzLnB1c2gobyk7dmFyIGM9MipsLmNvbnN0cmFpbigoblt0XSthW3RdKS8yLGUsciktKChpfHxuKVt0XSsob3x8YSlbdF0pO2MmJigoaSYmbz9jPjA9PWlbdF0+b1t0XT9pOm86aXx8bylbdF0rPWMpO3JldHVybiBzfX1mdW5jdGlvbiBjdCh0KXt2YXIgZT10WzBdLHI9dFsxXSxuPWU9PT1WW1UtMV1bMF0sYT1yPT09VltVLTFdWzFdO2lmKCFufHwhYSlpZihVPjEpe3ZhciBpPWU9PT1WW1UtMl1bMF0sbz1yPT09VltVLTJdWzFdO24mJihlPT09ZXR8fGU9PT1ydCkmJmk/bz9VLS06VltVLTFdPXQ6YSYmKHI9PT1udHx8cj09PWF0KSYmbz9pP1UtLTpWW1UtMV09dDpWW1UrK109dH1lbHNlIFZbVSsrXT10fWZ1bmN0aW9uIHV0KHQpe1ZbVS0xXVswXSE9PXRbMF0mJlZbVS0xXVsxXSE9PXRbMV0mJmN0KFtaLEpdKSxjdCh0KSxLPW51bGwsWj1KPTB9ZnVuY3Rpb24gaHQodCl7aWYoTT10WzBdL1AsQT10WzFdL08sVz10WzBdPGV0P2V0OnRbMF0+cnQ/cnQ6MCxYPXRbMV08bnQ/bnQ6dFsxXT5hdD9hdDowLFd8fFgpe2lmKFUpaWYoSyl7dmFyIGU9JChLLHQpO2UubGVuZ3RoPjEmJih1dChlWzBdKSxWW1UrK109ZVsxXSl9ZWxzZSBRPSQoVltVLTFdLHQpWzBdLFZbVSsrXT1RO2Vsc2UgVltVKytdPVtXfHx0WzBdLFh8fHRbMV1dO3ZhciByPVZbVS0xXTtXJiZYJiYoclswXSE9PVd8fHJbMV0hPT1YKT8oSyYmKFohPT1XJiZKIT09WD9jdChaJiZKPyhuPUssaT0oYT10KVswXS1uWzBdLG89KGFbMV0tblsxXSkvaSwoblsxXSphWzBdLWFbMV0qblswXSkvaT4wP1tvPjA/ZXQ6cnQsYXRdOltvPjA/cnQ6ZXQsbnRdKTpbWnx8VyxKfHxYXSk6WiYmSiYmY3QoW1osSl0pKSxjdChbVyxYXSkpOlotVyYmSi1YJiZjdChbV3x8WixYfHxKXSksSz10LFo9VyxKPVh9ZWxzZSBLJiZ1dCgkKEssdClbMF0pLFZbVSsrXT10O3ZhciBuLGEsaSxvfWZvcigibGluZWFyIj09PUR8fCJzcGxpbmUiPT09RD8kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MCxhPTA7YTw0O2ErKyl7dmFyIGk9aXRbYV0sbz1jKHRbMF0sdFsxXSxlWzBdLGVbMV0saVswXSxpWzFdLGlbMl0saVszXSk7byYmKCFufHxNYXRoLmFicyhvLngtclswXVswXSk+MXx8TWF0aC5hYnMoby55LXJbMF1bMV0pPjEpJiYobz1bby54LG8ueV0sbiYmWShvLHQpPFkoclswXSx0KT9yLnVuc2hpZnQobyk6ci5wdXNoKG8pLG4rKyl9cmV0dXJuIHJ9OiJodiI9PT1EfHwidmgiPT09RD8kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj1vdCh0KSxhPW90KGUpO3JldHVybiBuJiZhJiZzdChuLGEpP3I6KG4mJnIucHVzaChuKSxhJiZyLnB1c2goYSkscil9OiJodmgiPT09RD8kPWx0KDAsZXQscnQpOiJ2aHYiPT09RCYmKCQ9bHQoMSxudCxhdCkpLHI9MDtyPGo7cisrKWlmKG49cShyKSl7Zm9yKFU9MCxLPW51bGwsaHQobikscisrO3I8ajtyKyspe2lmKCEoZj1xKHIpKSl7aWYoeiljb250aW51ZTticmVha31pZihSJiZlLnNpbXBsaWZ5KXt2YXIgZnQ9cShyKzEpO2lmKHk9WShmLG4pLEYmJigwPT09VXx8VT09PWotMSl8fCEoeTxHKGYsZnQpKk4pKXtmb3Iodj1bKGZbMF0tblswXSkveSwoZlsxXS1uWzFdKS95XSxwPW4seD15LGI9dz1rPTAsZz0hMSxpPWYscisrO3I8dC5sZW5ndGg7cisrKXtpZihkPWZ0LGZ0PXEocisxKSwhZCl7aWYoeiljb250aW51ZTticmVha31pZihUPShtPVtkWzBdLW5bMF0sZFsxXS1uWzFdXSlbMF0qdlsxXS1tWzFdKnZbMF0sdz1NYXRoLm1pbih3LFQpLChrPU1hdGgubWF4KGssVCkpLXc+RyhkLGZ0KSlicmVhaztpPWQsKF89bVswXSp2WzBdK21bMV0qdlsxXSk+eD8oeD1fLGY9ZCxnPSExKTpfPGImJihiPV8scD1kLGc9ITApfWlmKGc/KGh0KGYpLGkhPT1wJiZodChwKSk6KHAhPT1uJiZodChwKSxpIT09ZiYmaHQoZikpLGh0KGkpLHI+PXQubGVuZ3RofHwhZClicmVhaztodChkKSxuPWR9fWVsc2UgaHQoZil9SyYmY3QoW1p8fEtbMF0sSnx8S1sxXV0pLEIucHVzaChWLnNsaWNlKDAsVSkpfXJldHVybiBCfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2OTMsIi4uLy4uL2xpYiI6NzE3LCIuL2NvbnN0YW50cyI6MTEyNH1dLDExMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXsic3BsaW5lIj09PXIoImxpbmUuc2hhcGUiKSYmcigibGluZS5zbW9vdGhpbmciKX19LHt9XSwxMTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt0b25leHR4OjEsdG9uZXh0eToxLHRvbmV4dDoxfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLGksbyxzLGwsYz17fSx1PSExLGg9LTEsZj0wLHA9LTE7Zm9yKGk9MDtpPHIubGVuZ3RoO2krKykobz0oYT1yW2ldWzBdLnRyYWNlKS5zdGFja2dyb3VwfHwiIik/byBpbiBjP2w9Y1tvXToobD1jW29dPWYsZisrKTphLmZpbGwgaW4gbiYmcD49MD9sPXA6KGw9cD1mLGYrKyksbDxoJiYodT0hMCksYS5fZ3JvdXBJbmRleD1oPWw7dmFyIGQ9ci5zbGljZSgpO3UmJmQuc29ydChmdW5jdGlvbih0LGUpe3ZhciByPXRbMF0udHJhY2Usbj1lWzBdLnRyYWNlO3JldHVybiByLl9ncm91cEluZGV4LW4uX2dyb3VwSW5kZXh8fHIuaW5kZXgtbi5pbmRleH0pO3ZhciBnPXt9O2ZvcihpPTA7aTxkLmxlbmd0aDtpKyspbz0oYT1kW2ldWzBdLnRyYWNlKS5zdGFja2dyb3VwfHwiIiwhMD09PWEudmlzaWJsZT8oYS5fbmV4dHRyYWNlPW51bGwsYS5maWxsIGluIG4mJihzPWdbb10sYS5fcHJldnRyYWNlPXN8fG51bGwscyYmKHMuX25leHR0cmFjZT1hKSksYS5fb3duZmlsbD1hLmZpbGwmJigidG96ZXJvIj09PWEuZmlsbC5zdWJzdHIoMCw2KXx8InRvc2VsZiI9PT1hLmZpbGx8fCJ0byI9PT1hLmZpbGwuc3Vic3RyKDAsMikmJiFhLl9wcmV2dHJhY2UpLGdbb109YSk6YS5fcHJldnRyYWNlPWEuX25leHR0cmFjZT1hLl9vd25maWxsPW51bGw7cmV0dXJuIGR9fSx7fV0sMTEzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lm1hcmtlcixyPWUuc2l6ZXJlZnx8MSxhPWUuc2l6ZW1pbnx8MCxpPSJhcmVhIj09PWUuc2l6ZW1vZGU/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0L3IpfTpmdW5jdGlvbih0KXtyZXR1cm4gdC9yfTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aSh0LzIpO3JldHVybiBuKGUpJiZlPjA/TWF0aC5tYXgoZSxhKTowfX19LHsiZmFzdC1pc251bWVyaWMiOjIyOH1dLDExMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjb250YWluZXI6Im1hcmtlciIsbWluOiJjbWluIixtYXg6ImNtYXgifX0se31dLDExMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCxjKXt2YXIgdT1vLmlzQnViYmxlKHQpLGg9KHQubGluZXx8e30pLmNvbG9yOyhjPWN8fHt9LGgmJihyPWgpLGwoIm1hcmtlci5zeW1ib2wiKSxsKCJtYXJrZXIub3BhY2l0eSIsdT8uNzoxKSxsKCJtYXJrZXIuc2l6ZSIpLGwoIm1hcmtlci5jb2xvciIsciksYSh0LCJtYXJrZXIiKSYmaSh0LGUscyxsLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSksYy5ub1NlbGVjdHx8KGwoInNlbGVjdGVkLm1hcmtlci5jb2xvciIpLGwoInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yIiksbCgic2VsZWN0ZWQubWFya2VyLnNpemUiKSxsKCJ1bnNlbGVjdGVkLm1hcmtlci5zaXplIikpLGMubm9MaW5lfHwobCgibWFya2VyLmxpbmUuY29sb3IiLGgmJiFBcnJheS5pc0FycmF5KGgpJiZlLm1hcmtlci5jb2xvciE9PWg/aDp1P24uYmFja2dyb3VuZDpuLmRlZmF1bHRMaW5lKSxhKHQsIm1hcmtlci5saW5lIikmJmkodCxlLHMsbCx7cHJlZml4OiJtYXJrZXIubGluZS4iLGNMZXR0ZXI6ImMifSksbCgibWFya2VyLmxpbmUud2lkdGgiLHU/MTowKSksdSYmKGwoIm1hcmtlci5zaXplcmVmIiksbCgibWFya2VyLnNpemVtaW4iKSxsKCJtYXJrZXIuc2l6ZW1vZGUiKSksYy5ncmFkaWVudCkmJigibm9uZSIhPT1sKCJtYXJrZXIuZ3JhZGllbnQudHlwZSIpJiZsKCJtYXJrZXIuZ3JhZGllbnQuY29sb3IiKSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo2MDMsIi4vc3VidHlwZXMiOjExNDR9XSwxMTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksbz1pLmVuc3VyZVNpbmdsZSxzPWkuaWRlbnRpdHksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4vc3VidHlwZXMiKSx1PXQoIi4vbGluZV9wb2ludHMiKSxoPXQoIi4vbGlua190cmFjZXMiKSxmPXQoIi4uLy4uL2xpYi9wb2x5Z29uIikudGVzdGVyO2Z1bmN0aW9uIHAodCxlLHIsaCxwLGQsZyl7dmFyIHY7IWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM9ci54YXhpcyxsPXIueWF4aXMsdT1uLmV4dGVudChpLnNpbXBsZU1hcChzLnJhbmdlLHMucjJjKSksaD1uLmV4dGVudChpLnNpbXBsZU1hcChsLnJhbmdlLGwucjJjKSksZj1hWzBdLnRyYWNlO2lmKCFjLmhhc01hcmtlcnMoZikpcmV0dXJuO3ZhciBwPWYubWFya2VyLm1heGRpc3BsYXllZDtpZigwPT09cClyZXR1cm47dmFyIGQ9YS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueD49dVswXSYmdC54PD11WzFdJiZ0Lnk+PWhbMF0mJnQueTw9aFsxXX0pLGc9TWF0aC5jZWlsKGQubGVuZ3RoL3ApLHY9MDtvLmZvckVhY2goZnVuY3Rpb24odCxyKXt2YXIgbj10WzBdLnRyYWNlO2MuaGFzTWFya2VycyhuKSYmbi5tYXJrZXIubWF4ZGlzcGxheWVkPjAmJnI8ZSYmdisrfSk7dmFyIG09TWF0aC5yb3VuZCh2KmcvMytNYXRoLmZsb29yKHYvMykqZy83LjEpO2EuZm9yRWFjaChmdW5jdGlvbih0KXtkZWxldGUgdC52aXN9KSxkLmZvckVhY2goZnVuY3Rpb24odCxlKXswPT09TWF0aC5yb3VuZCgoZSttKSVnKSYmKHQudmlzPSEwKX0pfSgwLGUscixoLHApO3ZhciBtPSEhZyYmZy5kdXJhdGlvbj4wO2Z1bmN0aW9uIHkodCl7cmV0dXJuIG0/dC50cmFuc2l0aW9uKCk6dH12YXIgeD1yLnhheGlzLGI9ci55YXhpcyxfPWhbMF0udHJhY2Usdz1fLmxpbmUsaz1uLnNlbGVjdChkKSxUPW8oaywiZyIsImVycm9yYmFycyIpLE09byhrLCJnIiwibGluZXMiKSxBPW8oaywiZyIsInBvaW50cyIpLFM9byhrLCJnIiwidGV4dCIpO2lmKGEuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJwbG90IikodCxULHIsZyksITA9PT1fLnZpc2libGUpe3ZhciBFLEw7eShrKS5zdHlsZSgib3BhY2l0eSIsXy5vcGFjaXR5KTt2YXIgQz1fLmZpbGwuY2hhckF0KF8uZmlsbC5sZW5ndGgtMSk7IngiIT09QyYmInkiIT09QyYmKEM9IiIpLGhbMF1bci5pc1JhbmdlUGxvdD8ibm9kZVJhbmdlUGxvdDMiOiJub2RlMyJdPWs7dmFyIFAsTyx6PSIiLEk9W10sRD1fLl9wcmV2dHJhY2U7RCYmKHo9RC5fcHJldlJldnBhdGh8fCIiLEw9RC5fbmV4dEZpbGwsST1ELl9wb2x5Z29ucyk7dmFyIFIsRixCLE4saixWLFUscT0iIixIPSIiLEc9W10sWT1pLm5vb3A7aWYoRT1fLl9vd25GaWxsLGMuaGFzTGluZXMoXyl8fCJub25lIiE9PV8uZmlsbCl7Zm9yKEwmJkwuZGF0dW0oaCksLTEhPT1bImh2IiwidmgiLCJodmgiLCJ2aHYiXS5pbmRleE9mKHcuc2hhcGUpPyhSPWwuc3RlcHMody5zaGFwZSksRj1sLnN0ZXBzKHcuc2hhcGUuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSkpOlI9Rj0ic3BsaW5lIj09PXcuc2hhcGU/ZnVuY3Rpb24odCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gdC5sZW5ndGg+MSYmdFswXVswXT09PWVbMF0mJnRbMF1bMV09PT1lWzFdP2wuc21vb3RoY2xvc2VkKHQuc2xpY2UoMSksdy5zbW9vdGhpbmcpOmwuc21vb3Rob3Blbih0LHcuc21vb3RoaW5nKX06ZnVuY3Rpb24odCl7cmV0dXJuIk0iK3Quam9pbigiTCIpfSxCPWZ1bmN0aW9uKHQpe3JldHVybiBGKHQucmV2ZXJzZSgpKX0sRz11KGgse3hheGlzOngseWF4aXM6Yixjb25uZWN0R2FwczpfLmNvbm5lY3RnYXBzLGJhc2VUb2xlcmFuY2U6TWF0aC5tYXgody53aWR0aHx8MSwzKS80LHNoYXBlOncuc2hhcGUsc2ltcGxpZnk6dy5zaW1wbGlmeSxmaWxsOl8uZmlsbH0pLFU9Xy5fcG9seWdvbnM9bmV3IEFycmF5KEcubGVuZ3RoKSx2PTA7djxHLmxlbmd0aDt2KyspXy5fcG9seWdvbnNbdl09ZihHW3ZdKTtHLmxlbmd0aCYmKE49R1swXVswXSxWPShqPUdbRy5sZW5ndGgtMV0pW2oubGVuZ3RoLTFdKSxZPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihQPVIoZSksTz1CKGUpLHE/Qz8ocSs9IkwiK1Auc3Vic3RyKDEpLEg9TysiTCIrSC5zdWJzdHIoMSkpOihxKz0iWiIrUCxIPU8rIloiK0gpOihxPVAsSD1PKSxjLmhhc0xpbmVzKF8pJiZlLmxlbmd0aD4xKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZihyLmRhdHVtKGgpLHQpeShyLnN0eWxlKCJvcGFjaXR5IiwwKS5hdHRyKCJkIixQKS5jYWxsKGwubGluZUdyb3VwU3R5bGUpKS5zdHlsZSgib3BhY2l0eSIsMSk7ZWxzZXt2YXIgYT15KHIpO2EuYXR0cigiZCIsUCksbC5zaW5nbGVMaW5lU3R5bGUoaCxhKX19fX19dmFyIFc9TS5zZWxlY3RBbGwoIi5qcy1saW5lIikuZGF0YShHKTt5KFcuZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksVy5lYWNoKFkoITEpKSxXLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgianMtbGluZSIsITApLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuY2FsbChsLmxpbmVHcm91cFN0eWxlKS5lYWNoKFkoITApKSxsLnNldENsaXBVcmwoVyxyLmxheWVyQ2xpcElkLHQpLEcubGVuZ3RoPyhFPyhFLmRhdHVtKGgpLE4mJlYmJihDPygieSI9PT1DP05bMV09VlsxXT1iLmMycCgwLCEwKToieCI9PT1DJiYoTlswXT1WWzBdPXguYzJwKDAsITApKSx5KEUpLmF0dHIoImQiLCJNIitWKyJMIitOKyJMIitxLnN1YnN0cigxKSkuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSkpOnkoRSkuYXR0cigiZCIscSsiWiIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpKSk6TCYmKCJ0b25leHQiPT09Xy5maWxsLnN1YnN0cigwLDYpJiZxJiZ6PygidG9uZXh0Ij09PV8uZmlsbD95KEwpLmF0dHIoImQiLHErIloiK3orIloiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKTp5KEwpLmF0dHIoImQiLHErIkwiK3ouc3Vic3RyKDEpKyJaIikuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSksXy5fcG9seWdvbnM9Xy5fcG9seWdvbnMuY29uY2F0KEkpKTooWihMKSxfLl9wb2x5Z29ucz1udWxsKSksXy5fcHJldlJldnBhdGg9SCxfLl9wcmV2UG9seWdvbnM9VSk6KEU/WihFKTpMJiZaKEwpLF8uX3BvbHlnb25zPV8uX3ByZXZSZXZwYXRoPV8uX3ByZXZQb2x5Z29ucz1udWxsKSxBLmRhdHVtKGgpLFMuZGF0dW0oaCksZnVuY3Rpb24oZSxhLGkpe3ZhciBvLHU9aVswXS50cmFjZSxoPWMuaGFzTWFya2Vycyh1KSxmPWMuaGFzVGV4dCh1KSxwPXR0KHUpLGQ9ZXQsZz1ldDtpZihofHxmKXt2YXIgdj1zLF89dS5zdGFja2dyb3VwLHc9XyYmImluZmVyIHplcm8iPT09dC5fZnVsbExheW91dC5fc2NhdHRlclN0YWNrT3B0c1t4Ll9pZCtiLl9pZF1bX10uc3RhY2tnYXBzO3UubWFya2VyLm1heGRpc3BsYXllZHx8dS5fbmVlZHNDdWxsP3Y9dz9LOko6XyYmIXcmJih2PVEpLGgmJihkPXYpLGYmJihnPXYpfXZhciBrLFQ9KG89ZS5zZWxlY3RBbGwoInBhdGgucG9pbnQiKS5kYXRhKGQscCkpLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgicG9pbnQiLCEwKTttJiZULmNhbGwobC5wb2ludFN0eWxlLHUsdCkuY2FsbChsLnRyYW5zbGF0ZVBvaW50cyx4LGIpLnN0eWxlKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLG8ub3JkZXIoKSxoJiYoaz1sLm1ha2VQb2ludFN0eWxlRm5zKHUpKSxvLmVhY2goZnVuY3Rpb24oZSl7dmFyIGE9bi5zZWxlY3QodGhpcyksaT15KGEpO2wudHJhbnNsYXRlUG9pbnQoZSxpLHgsYik/KGwuc2luZ2xlUG9pbnRTdHlsZShlLGksdSxrLHQpLHIubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KGUsaSx4LGIsdS54Y2FsZW5kYXIsdS55Y2FsZW5kYXIpLHUuY3VzdG9tZGF0YSYmYS5jbGFzc2VkKCJwbG90bHktY3VzdG9tZGF0YSIsbnVsbCE9PWUuZGF0YSYmdm9pZCAwIT09ZS5kYXRhKSk6aS5yZW1vdmUoKX0pLG0/by5leGl0KCkudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKTpvLmV4aXQoKS5yZW1vdmUoKSwobz1hLnNlbGVjdEFsbCgiZyIpLmRhdGEoZyxwKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXh0cG9pbnQiLCEwKS5hcHBlbmQoInRleHQiKSxvLm9yZGVyKCksby5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGE9eShlLnNlbGVjdCgidGV4dCIpKTtsLnRyYW5zbGF0ZVBvaW50KHQsYSx4LGIpP3IubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KHQsZSx4LGIsdS54Y2FsZW5kYXIsdS55Y2FsZW5kYXIpOmUucmVtb3ZlKCl9KSxvLnNlbGVjdEFsbCgidGV4dCIpLmNhbGwobC50ZXh0UG9pbnRTdHlsZSx1LHQpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9eC5jMnAodC54KSxyPWIuYzJwKHQueSk7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuZWFjaChmdW5jdGlvbigpe3kobi5zZWxlY3QodGhpcykpLmF0dHIoe3g6ZSx5OnJ9KX0pfSksby5leGl0KCkucmVtb3ZlKCl9KEEsUyxoKTt2YXIgWD0hMT09PV8uY2xpcG9uYXhpcz9udWxsOnIubGF5ZXJDbGlwSWQ7bC5zZXRDbGlwVXJsKEEsWCx0KSxsLnNldENsaXBVcmwoUyxYLHQpfWZ1bmN0aW9uIFoodCl7eSh0KS5hdHRyKCJkIiwiTTAsMFoiKX1mdW5jdGlvbiBKKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5nYXAmJnQudmlzfSl9ZnVuY3Rpb24gSyh0KXtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzfSl9ZnVuY3Rpb24gUSh0KXtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuZ2FwfSl9ZnVuY3Rpb24gJCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiB0dCh0KXtpZih0LmlkcylyZXR1cm4gJH1mdW5jdGlvbiBldCgpe3JldHVybiExfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxpLGMpe3ZhciB1LGYsZD0haSxnPSEhaSYmaS5kdXJhdGlvbj4wLHY9aCh0LGUscik7KCh1PWEuc2VsZWN0QWxsKCJnLnRyYWNlIikuZGF0YSh2LGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4idHJhY2Ugc2NhdHRlciB0cmFjZSIrdFswXS50cmFjZS51aWR9KS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDIpLHUub3JkZXIoKSxmdW5jdGlvbih0LGUscil7ZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBhPW8obi5zZWxlY3QodGhpcyksImciLCJmaWxscyIpO2wuc2V0Q2xpcFVybChhLHIubGF5ZXJDbGlwSWQsdCk7dmFyIGk9ZVswXS50cmFjZSxjPVtdO2kuX293bmZpbGwmJmMucHVzaCgiX293bkZpbGwiKSxpLl9uZXh0dHJhY2UmJmMucHVzaCgiX25leHRGaWxsIik7dmFyIHU9YS5zZWxlY3RBbGwoImciKS5kYXRhKGMscyk7dS5lbnRlcigpLmFwcGVuZCgiZyIpLHUuZXhpdCgpLmVhY2goZnVuY3Rpb24odCl7aVt0XT1udWxsfSkucmVtb3ZlKCksdS5vcmRlcigpLmVhY2goZnVuY3Rpb24odCl7aVt0XT1vKG4uc2VsZWN0KHRoaXMpLCJwYXRoIiwianMtZmlsbCIpfSl9KX0odCx1LGUpLGcpPyhjJiYoZj1jKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKGkuZHVyYXRpb24pLmVhc2UoaS5lYXNpbmcpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtmJiZmKCl9KS5lYWNoKCJpbnRlcnJ1cHQiLGZ1bmN0aW9uKCl7ZiYmZigpfSkuZWFjaChmdW5jdGlvbigpe2Euc2VsZWN0QWxsKCJnLnRyYWNlIikuZWFjaChmdW5jdGlvbihyLG4pe3AodCxuLGUscix2LHRoaXMsaSl9KX0pKTp1LmVhY2goZnVuY3Rpb24ocixuKXtwKHQsbixlLHIsdix0aGlzLGkpfSk7ZCYmdS5leGl0KCkucmVtb3ZlKCksYS5zZWxlY3RBbGwoInBhdGg6bm90KFtkXSkiKS5yZW1vdmUoKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvcG9seWdvbiI6NzI5LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuL2xpbmVfcG9pbnRzIjoxMTM0LCIuL2xpbmtfdHJhY2VzIjoxMTM2LCIuL3N1YnR5cGVzIjoxMTQ0LGQzOjE2NX1dLDExNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsaSxvLHM9dC5jZCxsPXQueGF4aXMsYz10LnlheGlzLHU9W10saD1zWzBdLnRyYWNlO2lmKCFuLmhhc01hcmtlcnMoaCkmJiFuLmhhc1RleHQoaCkpcmV0dXJuW107aWYoITE9PT1lKWZvcihyPTA7cjxzLmxlbmd0aDtyKyspc1tyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPHMubGVuZ3RoO3IrKylhPXNbcl0saT1sLmMycChhLngpLG89Yy5jMnAoYS55KSxudWxsIT09YS5pJiZlLmNvbnRhaW5zKFtpLG9dLCExLHIsdCk/KHUucHVzaCh7cG9pbnROdW1iZXI6YS5pLHg6bC5jMmQoYS54KSx5OmMuYzJkKGEueSl9KSxhLnNlbGVjdGVkPTEpOmEuc2VsZWN0ZWQ9MDtyZXR1cm4gdX19LHsiLi9zdWJ0eXBlcyI6MTE0NH1dLDExNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49WyJvcmllbnRhdGlvbiIsImdyb3Vwbm9ybSIsInN0YWNrZ2FwcyJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgaT1yLl9zY2F0dGVyU3RhY2tPcHRzLG89YSgic3RhY2tncm91cCIpO2lmKG8pe3ZhciBzPWUueGF4aXMrZS55YXhpcyxsPWlbc107bHx8KGw9aVtzXT17fSk7dmFyIGM9bFtvXSx1PSExO2M/Yy50cmFjZXMucHVzaChlKTooYz1sW29dPXt0cmFjZUluZGljZXM6W10sdHJhY2VzOltlXX0sdT0hMCk7Zm9yKHZhciBoPXtvcmllbnRhdGlvbjplLngmJiFlLnk/ImgiOiJ2In0sZj0wO2Y8bi5sZW5ndGg7ZisrKXt2YXIgcD1uW2ZdLGQ9cCsiRm91bmQiO2lmKCFjW2RdKXt2YXIgZz12b2lkIDAhPT10W3BdLHY9Im9yaWVudGF0aW9uIj09PXA7aWYoKGd8fHUpJiYoY1twXT1hKHAsaFtwXSksdiYmKGMuZmlsbERmbHQ9ImgiPT09Y1twXT8idG9uZXh0eCI6InRvbmV4dHkiKSxnJiYoY1tkXT0hMCwhdSYmKGRlbGV0ZSBjLnRyYWNlc1swXVtwXSx2KSkpKWZvcih2YXIgbT0wO208Yy50cmFjZXMubGVuZ3RoLTE7bSsrKXt2YXIgeT1jLnRyYWNlc1ttXTt5Ll9pbnB1dC5maWxsIT09eS5maWxsJiYoeS5maWxsPWMuZmlsbERmbHQpfX19cmV0dXJuIGN9fX0se31dLDExNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBvKHQsZSxyKXthLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxlLHIpfWZ1bmN0aW9uIHModCxlLHIpe2EudGV4dFBvaW50U3R5bGUodC5zZWxlY3RBbGwoInRleHQiKSxlLHIpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLnRyYWNlLnNjYXR0ZXIiKTtlLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksZS5zZWxlY3RBbGwoImcucG9pbnRzIikuZWFjaChmdW5jdGlvbihlKXtvKG4uc2VsZWN0KHRoaXMpLGUudHJhY2V8fGVbMF0udHJhY2UsdCl9KSxlLnNlbGVjdEFsbCgiZy50ZXh0IikuZWFjaChmdW5jdGlvbihlKXtzKG4uc2VsZWN0KHRoaXMpLGUudHJhY2V8fGVbMF0udHJhY2UsdCl9KSxlLnNlbGVjdEFsbCgiZy50cmFjZSBwYXRoLmpzLWxpbmUiKS5jYWxsKGEubGluZUdyb3VwU3R5bGUpLGUuc2VsZWN0QWxsKCJnLnRyYWNlIHBhdGguanMtZmlsbCIpLmNhbGwoYS5maWxsR3JvdXBTdHlsZSksaS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN0eWxlIikoZSl9LHN0eWxlUG9pbnRzOm8sc3R5bGVUZXh0OnMsc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXS50cmFjZTtuLnNlbGVjdGVkcG9pbnRzPyhhLnNlbGVjdGVkUG9pbnRTdHlsZShyLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLG4pLGEuc2VsZWN0ZWRUZXh0U3R5bGUoci5zZWxlY3RBbGwoInRleHQiKSxuKSk6KG8ocixuLHQpLHMocixuLHQpKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9yZWdpc3RyeSI6ODQ2LGQzOjE2NX1dLDExNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPXtoYXNMaW5lczpmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlJiZ0Lm1vZGUmJi0xIT09dC5tb2RlLmluZGV4T2YoImxpbmVzIil9LGhhc01hcmtlcnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmKHQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZigibWFya2VycyIpfHwic3Bsb20iPT09dC50eXBlKX0saGFzVGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlJiZ0Lm1vZGUmJi0xIT09dC5tb2RlLmluZGV4T2YoInRleHQiKX0saXNCdWJibGU6ZnVuY3Rpb24odCl7cmV0dXJuIG4uaXNQbGFpbk9iamVjdCh0Lm1hcmtlcikmJm4uaXNBcnJheU9yVHlwZWRBcnJheSh0Lm1hcmtlci5zaXplKX19fSx7Ii4uLy4uL2xpYiI6NzE3fV0sMTE0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxpKXtpPWl8fHt9LGEoInRleHRwb3NpdGlvbiIpLG4uY29lcmNlRm9udChhLCJ0ZXh0Zm9udCIsci5mb250KSxpLm5vU2VsZWN0fHwoYSgic2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSxhKCJ1bnNlbGVjdGVkLnRleHRmb250LmNvbG9yIikpfX0seyIuLi8uLi9saWIiOjcxN31dLDExNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgbyxzPWkoIngiKSxsPWkoInkiKTtpZihhLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5Il0scikscyl7dmFyIGM9bi5taW5Sb3dMZW5ndGgocyk7bD9vPU1hdGgubWluKGMsbi5taW5Sb3dMZW5ndGgobCkpOihvPWMsaSgieTAiKSxpKCJkeSIpKX1lbHNle2lmKCFsKXJldHVybiAwO289bi5taW5Sb3dMZW5ndGgobCksaSgieDAiKSxpKCJkeCIpfXJldHVybiBlLl9sZW5ndGg9byxvfX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcmVnaXN0cnkiOjg0Nn1dLDExNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxzPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyIpLGM9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsZj1uLmxpbmUscD1uLm1hcmtlcixkPXAubGluZSxnPXUoe3dpZHRoOmYud2lkdGgsZGFzaDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGwpLGRmbHQ6InNvbGlkIn19LGEoImxpbmUiKSk7dmFyIHY9ZS5leHBvcnRzPWgoe3g6bi54LHk6bi55LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx0ZXh0OnUoe30sbi50ZXh0LHt9KSx0ZXh0dGVtcGxhdGU6byh7fSx7fSksaG92ZXJ0ZXh0OnUoe30sbi5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6aSgpLG1vZGU6dSh7fSxuLm1vZGUse2RmbHQ6ImxpbmVzK21hcmtlcnMifSksc3VyZmFjZWF4aXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbLTEsMCwxLDJdLGRmbHQ6LTF9LHN1cmZhY2Vjb2xvcjp7dmFsVHlwZToiY29sb3IifSxwcm9qZWN0aW9uOnt4OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEwLGRmbHQ6Mi8zfX0seTp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxMCxkZmx0OjIvM319LHo6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fX0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxsaW5lOmcsbWFya2VyOnUoe3N5bWJvbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGMpLGRmbHQ6ImNpcmNsZSIsYXJyYXlPazohMH0sc2l6ZTp1KHt9LHAuc2l6ZSx7ZGZsdDo4fSksc2l6ZXJlZjpwLnNpemVyZWYsc2l6ZW1pbjpwLnNpemVtaW4sc2l6ZW1vZGU6cC5zaXplbW9kZSxvcGFjaXR5OnUoe30scC5vcGFjaXR5LHthcnJheU9rOiExfSksY29sb3JiYXI6cC5jb2xvcmJhcixsaW5lOnUoe3dpZHRoOnUoe30sZC53aWR0aCx7YXJyYXlPazohMX0pfSxhKCJtYXJrZXIubGluZSIpKX0sYSgibWFya2VyIikpLHRleHRwb3NpdGlvbjp1KHt9LG4udGV4dHBvc2l0aW9uLHtkZmx0OiJ0b3AgY2VudGVyIn0pLHRleHRmb250Ontjb2xvcjpuLnRleHRmb250LmNvbG9yLHNpemU6bi50ZXh0Zm9udC5zaXplLGZhbWlseTp1KHt9LG4udGV4dGZvbnQuZmFtaWx5LHthcnJheU9rOiExfSl9LGhvdmVyaW5mbzp1KHt9LHMuaG92ZXJpbmZvKX0sImNhbGMiLCJuZXN0ZWQiKTt2LnguZWRpdFR5cGU9di55LmVkaXRUeXBlPXYuei5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyJ9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU5OSwiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIjo2OTAsIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjY5MSwiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3NDgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc2MiwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODQxLCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExMjB9XSwxMTQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksYT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVt7eDohMSx5OiExLHRyYWNlOmUsdDp7fX1dO3JldHVybiBuKHIsZSksYSh0LGUpLHJ9fSx7Ii4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMTE5LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTEyM31dLDExNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBhKHQsZSxyLGEpe2lmKCFlfHwhZS52aXNpYmxlKXJldHVybiBudWxsO2Zvcih2YXIgaT1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwibWFrZUNvbXB1dGVFcnJvciIpKGUpLG89bmV3IEFycmF5KHQubGVuZ3RoKSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPWkoK3Rbc10scyk7aWYoImxvZyI9PT1hLnR5cGUpe3ZhciBjPWEuYzJsKHRbc10pLHU9dFtzXS1sWzBdLGg9dFtzXStsWzFdO2lmKG9bc109WyhhLmMybCh1LCEwKS1jKSpyLChhLmMybChoLCEwKS1jKSpyXSx1PjApe3ZhciBmPWEuYzJsKHUpO2EuX2xvd2VyTG9nRXJyb3JCb3VuZHx8KGEuX2xvd2VyTG9nRXJyb3JCb3VuZD1mKSxhLl9sb3dlckVycm9yQm91bmQ9TWF0aC5taW4oYS5fbG93ZXJMb2dFcnJvckJvdW5kLGYpfX1lbHNlIG9bc109Wy1sWzBdKnIsbFsxXSpyXX1yZXR1cm4gb31lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVthKHQueCx0LmVycm9yX3gsZVswXSxyLnhheGlzKSxhKHQueSx0LmVycm9yX3ksZVsxXSxyLnlheGlzKSxhKHQueix0LmVycm9yX3osZVsyXSxyLnpheGlzKV0saT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdKXJldHVybiB0W2VdLmxlbmd0aDtyZXR1cm4gMH0obik7aWYoMD09PWkpcmV0dXJuIG51bGw7Zm9yKHZhciBvPW5ldyBBcnJheShpKSxzPTA7czxpO3MrKyl7Zm9yKHZhciBsPVtbMCwwLDBdLFswLDAsMF1dLGM9MDtjPDM7YysrKWlmKG5bY10pZm9yKHZhciB1PTA7dTwyO3UrKylsW3VdW2NdPW5bY11bc11bdV07b1tzXT1sfXJldHVybiBvfX0seyIuLi8uLi9yZWdpc3RyeSI6ODQ2fV0sMTE1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1saW5lM2QiKSxhPXQoImdsLXNjYXR0ZXIzZCIpLGk9dCgiZ2wtZXJyb3IzZCIpLG89dCgiZ2wtbWVzaDNkIikscz10KCJkZWxhdW5heS10cmlhbmd1bGF0ZSIpLGw9dCgiLi4vLi4vbGliIiksYz10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksdT10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikuZm9ybWF0Q29sb3IsaD10KCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLGY9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIikscD10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIiksZD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGc9dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlLHY9dCgiLi9jYWxjX2Vycm9ycyIpO2Z1bmN0aW9uIG0odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLmxpbmVQbG90PW51bGwsdGhpcy5zY2F0dGVyUGxvdD1udWxsLHRoaXMuZXJyb3JCYXJzPW51bGwsdGhpcy50ZXh0TWFya2Vycz1udWxsLHRoaXMuZGVsYXVuYXlNZXNoPW51bGwsdGhpcy5jb2xvcj1udWxsLHRoaXMubW9kZT0iIix0aGlzLmRhdGFQb2ludHM9W10sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMudGV4dExhYmVscz1udWxsLHRoaXMuZGF0YT1udWxsfXZhciB5PW0ucHJvdG90eXBlO2Z1bmN0aW9uIHgodCl7cmV0dXJuIG51bGw9PXQ/MDp0LmluZGV4T2YoImxlZnQiKT4tMT8tMTp0LmluZGV4T2YoInJpZ2h0Iik+LTE/MTowfWZ1bmN0aW9uIGIodCl7cmV0dXJuIG51bGw9PXQ/MDp0LmluZGV4T2YoInRvcCIpPi0xPy0xOnQuaW5kZXhPZigiYm90dG9tIik+LTE/MTowfWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4gZSg0KnQpfWZ1bmN0aW9uIHcodCl7cmV0dXJuIHBbdF19ZnVuY3Rpb24gayh0LGUscixuLGEpe3ZhciBpPW51bGw7aWYobC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKXtpPVtdO2Zvcih2YXIgbz0wO288ZTtvKyspdm9pZCAwPT09dFtvXT9pW29dPW46aVtvXT1yKHRbb10sYSl9ZWxzZSBpPXIodCxsLmlkZW50aXR5KTtyZXR1cm4gaX1mdW5jdGlvbiBUKHQsZSl7dmFyIHIsbixhLGksbyxzLGY9W10scD10LmZ1bGxTY2VuZUxheW91dCxtPXQuZGF0YVNjYWxlLHk9cC54YXhpcyxUPXAueWF4aXMsTT1wLnpheGlzLEE9ZS5tYXJrZXIsUz1lLmxpbmUsRT1lLnh8fFtdLEw9ZS55fHxbXSxDPWUuenx8W10sUD1FLmxlbmd0aCxPPWUueGNhbGVuZGFyLHo9ZS55Y2FsZW5kYXIsST1lLnpjYWxlbmRhcjtmb3Iobz0wO288UDtvKyspcj15LmQybChFW29dLDAsTykqbVswXSxuPVQuZDJsKExbb10sMCx6KSptWzFdLGE9TS5kMmwoQ1tvXSwwLEkpKm1bMl0sZltvXT1bcixuLGFdO2lmKEFycmF5LmlzQXJyYXkoZS50ZXh0KSlzPWUudGV4dDtlbHNlIGlmKHZvaWQgMCE9PWUudGV4dClmb3Iocz1uZXcgQXJyYXkoUCksbz0wO288UDtvKyspc1tvXT1lLnRleHQ7ZnVuY3Rpb24gRCh0LGUpe3ZhciByPXBbdF07cmV0dXJuIGQudGlja1RleHQocixyLmQybChlKSwhMCkudGV4dH12YXIgUj1lLnRleHR0ZW1wbGF0ZTtpZihSKXt2YXIgRj10LmZ1bGxMYXlvdXQuX2QzbG9jYWxlLEI9QXJyYXkuaXNBcnJheShSKSxOPUI/TWF0aC5taW4oUi5sZW5ndGgsUCk6UCxqPUI/ZnVuY3Rpb24odCl7cmV0dXJuIFJbdF19OmZ1bmN0aW9uKCl7cmV0dXJuIFJ9O2ZvcihzPW5ldyBBcnJheShOKSxvPTA7bzxOO28rKyl7dmFyIFY9e3g6RVtvXSx5Okxbb10sejpDW29dfSxVPXt4TGFiZWw6RCgieGF4aXMiLEVbb10pLHlMYWJlbDpEKCJ5YXhpcyIsTFtvXSksekxhYmVsOkQoInpheGlzIixDW29dKX0scT17fTtnKHEsZSxvKTt2YXIgSD1lLl9tZXRhfHx7fTtzW29dPWwudGV4dHRlbXBsYXRlU3RyaW5nKGoobyksVSxGLHEsVixIKX19aWYoaT17cG9zaXRpb246Zixtb2RlOmUubW9kZSx0ZXh0OnN9LCJsaW5lImluIGUmJihpLmxpbmVDb2xvcj11KFMsMSxQKSxpLmxpbmVXaWR0aD1TLndpZHRoLGkubGluZURhc2hlcz1TLmRhc2gpLCJtYXJrZXIiaW4gZSl7dmFyIEc9aChlKTtpLnNjYXR0ZXJDb2xvcj11KEEsMSxQKSxpLnNjYXR0ZXJTaXplPWsoQS5zaXplLFAsXywyMCxHKSxpLnNjYXR0ZXJNYXJrZXI9ayhBLnN5bWJvbCxQLHcsIlx1MjVjZiIpLGkuc2NhdHRlckxpbmVXaWR0aD1BLmxpbmUud2lkdGgsaS5zY2F0dGVyTGluZUNvbG9yPXUoQS5saW5lLDEsUCksaS5zY2F0dGVyQW5nbGU9MH0idGV4dHBvc2l0aW9uImluIGUmJihpLnRleHRPZmZzZXQ9ZnVuY3Rpb24odCl7dmFyIGU9WzAsMF07aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllW3JdPVswLDBdLHRbcl0mJihlW3JdWzBdPXgodFtyXSksZVtyXVsxXT1iKHRbcl0pKTtlbHNlIGVbMF09eCh0KSxlWzFdPWIodCk7cmV0dXJuIGV9KGUudGV4dHBvc2l0aW9uKSxpLnRleHRDb2xvcj11KGUudGV4dGZvbnQsMSxQKSxpLnRleHRTaXplPWsoZS50ZXh0Zm9udC5zaXplLFAsbC5pZGVudGl0eSwxMiksaS50ZXh0Rm9udD1lLnRleHRmb250LmZhbWlseSxpLnRleHRBbmdsZT0wKTt2YXIgWT1bIngiLCJ5IiwieiJdO2ZvcihpLnByb2plY3Q9WyExLCExLCExXSxpLnByb2plY3RTY2FsZT1bMSwxLDFdLGkucHJvamVjdE9wYWNpdHk9WzEsMSwxXSxvPTA7bzwzOysrbyl7dmFyIFc9ZS5wcm9qZWN0aW9uW1lbb11dOyhpLnByb2plY3Rbb109Vy5zaG93KSYmKGkucHJvamVjdE9wYWNpdHlbb109Vy5vcGFjaXR5LGkucHJvamVjdFNjYWxlW29dPVcuc2NhbGUpfWkuZXJyb3JCb3VuZHM9dihlLG0scCk7dmFyIFg9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVswLDAsMF0scj1bWzAsMCwwXSxbMCwwLDBdLFswLDAsMF1dLG49WzEsMSwxXSxhPTA7YTwzO2ErKyl7dmFyIGk9dFthXTtpJiYhMSE9PWkuY29weV96c3R5bGUmJiExIT09dFsyXS52aXNpYmxlJiYoaT10WzJdKSxpJiZpLnZpc2libGUmJihlW2FdPWkud2lkdGgvMixyW2FdPWMoaS5jb2xvciksblthXT1pLnRoaWNrbmVzcyl9cmV0dXJue2NhcFNpemU6ZSxjb2xvcjpyLGxpbmVXaWR0aDpufX0oW2UuZXJyb3JfeCxlLmVycm9yX3ksZS5lcnJvcl96XSk7cmV0dXJuIGkuZXJyb3JDb2xvcj1YLmNvbG9yLGkuZXJyb3JMaW5lV2lkdGg9WC5saW5lV2lkdGgsaS5lcnJvckNhcFNpemU9WC5jYXBTaXplLGkuZGVsYXVuYXlBeGlzPWUuc3VyZmFjZWF4aXMsaS5kZWxhdW5heUNvbG9yPWMoZS5zdXJmYWNlY29sb3IpLGl9ZnVuY3Rpb24gTSh0KXtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgZT10WzBdO3JldHVybiBBcnJheS5pc0FycmF5KGUpJiYodD1lKSwicmdiKCIrdC5zbGljZSgwLDMpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqdCl9KSsiKSJ9cmV0dXJuIG51bGx9eS5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0JiYodC5vYmplY3Q9PT10aGlzLmxpbmVQbG90fHx0Lm9iamVjdD09PXRoaXMuZGVsYXVuYXlNZXNofHx0Lm9iamVjdD09PXRoaXMudGV4dE1hcmtlcnN8fHQub2JqZWN0PT09dGhpcy5zY2F0dGVyUGxvdCkpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4O3JldHVybiB0Lm9iamVjdC5oaWdobGlnaHQmJnQub2JqZWN0LmhpZ2hsaWdodChudWxsKSx0aGlzLnNjYXR0ZXJQbG90JiYodC5vYmplY3Q9dGhpcy5zY2F0dGVyUGxvdCx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodCh0LmRhdGEpKSx0LnRleHRMYWJlbD0iIix0aGlzLnRleHRMYWJlbHMmJihBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/KHRoaXMudGV4dExhYmVsc1tlXXx8MD09PXRoaXMudGV4dExhYmVsc1tlXSkmJih0LnRleHRMYWJlbD10aGlzLnRleHRMYWJlbHNbZV0pOnQudGV4dExhYmVsPXRoaXMudGV4dExhYmVscyksdC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS54W2VdLHRoaXMuZGF0YS55W2VdLHRoaXMuZGF0YS56W2VdXSwhMH19LHkudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHU9dGhpcy5zY2VuZS5nbHBsb3QuZ2wsaD1mLnNvbGlkO3RoaXMuZGF0YT10O3ZhciBwPVQodGhpcy5zY2VuZSx0KTsibW9kZSJpbiBwJiYodGhpcy5tb2RlPXAubW9kZSksImxpbmVEYXNoZXMiaW4gcCYmcC5saW5lRGFzaGVzIGluIGYmJihoPWZbcC5saW5lRGFzaGVzXSksdGhpcy5jb2xvcj1NKHAuc2NhdHRlckNvbG9yKXx8TShwLmxpbmVDb2xvciksdGhpcy5kYXRhUG9pbnRzPXAucG9zaXRpb24sZT17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixjb2xvcjpwLmxpbmVDb2xvcixsaW5lV2lkdGg6cC5saW5lV2lkdGh8fDEsZGFzaGVzOmhbMF0sZGFzaFNjYWxlOmhbMV0sb3BhY2l0eTp0Lm9wYWNpdHksY29ubmVjdEdhcHM6dC5jb25uZWN0Z2Fwc30sLTEhPT10aGlzLm1vZGUuaW5kZXhPZigibGluZXMiKT90aGlzLmxpbmVQbG90P3RoaXMubGluZVBsb3QudXBkYXRlKGUpOih0aGlzLmxpbmVQbG90PW4oZSksdGhpcy5saW5lUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5saW5lUGxvdCkpOnRoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCksdGhpcy5saW5lUGxvdD1udWxsKTt2YXIgZD10Lm9wYWNpdHk7aWYodC5tYXJrZXImJnQubWFya2VyLm9wYWNpdHkmJihkKj10Lm1hcmtlci5vcGFjaXR5KSxyPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGNvbG9yOnAuc2NhdHRlckNvbG9yLHNpemU6cC5zY2F0dGVyU2l6ZSxnbHlwaDpwLnNjYXR0ZXJNYXJrZXIsb3BhY2l0eTpkLG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6cC5zY2F0dGVyTGluZVdpZHRoLGxpbmVDb2xvcjpwLnNjYXR0ZXJMaW5lQ29sb3IscHJvamVjdDpwLnByb2plY3QscHJvamVjdFNjYWxlOnAucHJvamVjdFNjYWxlLHByb2plY3RPcGFjaXR5OnAucHJvamVjdE9wYWNpdHl9LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKT90aGlzLnNjYXR0ZXJQbG90P3RoaXMuc2NhdHRlclBsb3QudXBkYXRlKHIpOih0aGlzLnNjYXR0ZXJQbG90PWEociksdGhpcy5zY2F0dGVyUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodFNjYWxlPTEsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuc2NhdHRlclBsb3QpKTp0aGlzLnNjYXR0ZXJQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc2NhdHRlclBsb3QpLHRoaXMuc2NhdHRlclBsb3QuZGlzcG9zZSgpLHRoaXMuc2NhdHRlclBsb3Q9bnVsbCksYz17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixnbHlwaDpwLnRleHQsY29sb3I6cC50ZXh0Q29sb3Isc2l6ZTpwLnRleHRTaXplLGFuZ2xlOnAudGV4dEFuZ2xlLGFsaWdubWVudDpwLnRleHRPZmZzZXQsZm9udDpwLnRleHRGb250LG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6MCxwcm9qZWN0OiExLG9wYWNpdHk6dC5vcGFjaXR5fSx0aGlzLnRleHRMYWJlbHM9dC5ob3ZlcnRleHR8fHQudGV4dCwtMSE9PXRoaXMubW9kZS5pbmRleE9mKCJ0ZXh0Iik/dGhpcy50ZXh0TWFya2Vycz90aGlzLnRleHRNYXJrZXJzLnVwZGF0ZShjKToodGhpcy50ZXh0TWFya2Vycz1hKGMpLHRoaXMudGV4dE1hcmtlcnMuX3RyYWNlPXRoaXMsdGhpcy50ZXh0TWFya2Vycy5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnRleHRNYXJrZXJzKSk6dGhpcy50ZXh0TWFya2VycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnRleHRNYXJrZXJzKSx0aGlzLnRleHRNYXJrZXJzLmRpc3Bvc2UoKSx0aGlzLnRleHRNYXJrZXJzPW51bGwpLGw9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5lcnJvckNvbG9yLGVycm9yOnAuZXJyb3JCb3VuZHMsbGluZVdpZHRoOnAuZXJyb3JMaW5lV2lkdGgsY2FwU2l6ZTpwLmVycm9yQ2FwU2l6ZSxvcGFjaXR5OnQub3BhY2l0eX0sdGhpcy5lcnJvckJhcnM/cC5lcnJvckJvdW5kcz90aGlzLmVycm9yQmFycy51cGRhdGUobCk6KHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmVycm9yQmFycyksdGhpcy5lcnJvckJhcnMuZGlzcG9zZSgpLHRoaXMuZXJyb3JCYXJzPW51bGwpOnAuZXJyb3JCb3VuZHMmJih0aGlzLmVycm9yQmFycz1pKGwpLHRoaXMuZXJyb3JCYXJzLl90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmVycm9yQmFycykpLHAuZGVsYXVuYXlBeGlzPj0wKXt2YXIgZz1mdW5jdGlvbih0LGUscil7dmFyIG4sYT0ocisxKSUzLGk9KHIrMiklMyxvPVtdLGw9W107Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGM9dFtuXTshaXNOYU4oY1thXSkmJmlzRmluaXRlKGNbYV0pJiYhaXNOYU4oY1tpXSkmJmlzRmluaXRlKGNbaV0pJiYoby5wdXNoKFtjW2FdLGNbaV1dKSxsLnB1c2gobikpfXZhciB1PXMobyk7Zm9yKG49MDtuPHUubGVuZ3RoOysrbilmb3IodmFyIGg9dVtuXSxmPTA7ZjxoLmxlbmd0aDsrK2YpaFtmXT1sW2hbZl1dO3JldHVybntwb3NpdGlvbnM6dCxjZWxsczp1LG1lc2hDb2xvcjplfX0ocC5wb3NpdGlvbixwLmRlbGF1bmF5Q29sb3IscC5kZWxhdW5heUF4aXMpO2cub3BhY2l0eT10Lm9wYWNpdHksdGhpcy5kZWxhdW5heU1lc2g/dGhpcy5kZWxhdW5heU1lc2gudXBkYXRlKGcpOihnLmdsPXUsdGhpcy5kZWxhdW5heU1lc2g9byhnKSx0aGlzLmRlbGF1bmF5TWVzaC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5kZWxhdW5heU1lc2gpKX1lbHNlIHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCksdGhpcy5kZWxhdW5heU1lc2g9bnVsbCl9LHkuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCkpLHRoaXMuc2NhdHRlclBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zY2F0dGVyUGxvdCksdGhpcy5zY2F0dGVyUGxvdC5kaXNwb3NlKCkpLHRoaXMuZXJyb3JCYXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZXJyb3JCYXJzKSx0aGlzLmVycm9yQmFycy5kaXNwb3NlKCkpLHRoaXMudGV4dE1hcmtlcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy50ZXh0TWFya2VycyksdGhpcy50ZXh0TWFya2Vycy5kaXNwb3NlKCkpLHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCkpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgbSh0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHsiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2MjcsIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyI6NjkwLCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIjo2OTEsIi4uLy4uL2xpYiI6NzE3LCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo3MTQsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjc0MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjExMzcsIi4vY2FsY19lcnJvcnMiOjExNDksImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxNjcsImdsLWVycm9yM2QiOjI1MCwiZ2wtbGluZTNkIjoyNTgsImdsLW1lc2gzZCI6MjgzLCJnbC1zY2F0dGVyM2QiOjMwMH1dLDExNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gaChyLG4pe3JldHVybiBhLmNvZXJjZSh0LGUsYyxyLG4pfWlmKGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBpPTAsbz1yKCJ4Iikscz1yKCJ5IiksbD1yKCJ6Iik7bi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxhKSxvJiZzJiZsJiYoaT1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCxsLmxlbmd0aCksZS5fbGVuZ3RoPWUuX3hsZW5ndGg9ZS5feWxlbmd0aD1lLl96bGVuZ3RoPWkpO3JldHVybiBpfSh0LGUsaCx1KSl7aCgidGV4dCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVydGVtcGxhdGUiKSxoKCJtb2RlIiksaS5oYXNMaW5lcyhlKSYmKGgoImNvbm5lY3RnYXBzIikscyh0LGUscix1LGgpKSxpLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsdSxoLHtub1NlbGVjdDohMH0pLGkuaGFzVGV4dChlKSYmKGgoInRleHR0ZW1wbGF0ZSIpLGwodCxlLHUsaCx7bm9TZWxlY3Q6ITB9KSk7dmFyIGY9KGUubGluZXx8e30pLmNvbG9yLHA9KGUubWFya2VyfHx7fSkuY29sb3I7aCgic3VyZmFjZWF4aXMiKT49MCYmaCgic3VyZmFjZWNvbG9yIixmfHxwKTtmb3IodmFyIGQ9WyJ4IiwieSIsInoiXSxnPTA7ZzwzOysrZyl7dmFyIHY9InByb2plY3Rpb24uIitkW2ddO2godisiLnNob3ciKSYmKGgodisiLm9wYWNpdHkiKSxoKHYrIi5zY2FsZSIpKX12YXIgbT1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTttKHQsZSxmfHxwfHxyLHtheGlzOiJ6In0pLG0odCxlLGZ8fHB8fHIse2F4aXM6InkiLGluaGVyaXQ6InoifSksbSh0LGUsZnx8cHx8cix7YXhpczoieCIsaW5oZXJpdDoieiJ9KX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTEzMywiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjExMzksIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjExNDQsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTE0NSwiLi9hdHRyaWJ1dGVzIjoxMTQ3fV0sMTE1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3Bsb3Q6dCgiLi9jb252ZXJ0IiksYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxtYXJrZXJTeW1ib2xzOnQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6W3tjb250YWluZXI6Im1hcmtlciIsbWluOiJjbWluIixtYXg6ImNtYXgifSx7Y29udGFpbmVyOiJsaW5lIixtaW46ImNtaW4iLG1heDoiY21heCJ9XSxjYWxjOnQoIi4vY2FsYyIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVyM2QiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbWV0YTp7fX19LHsiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyI6NjkxLCIuLi8uLi9wbG90cy9nbDNkIjo4MDUsIi4vYXR0cmlidXRlcyI6MTE0NywiLi9jYWxjIjoxMTQ4LCIuL2NvbnZlcnQiOjExNTAsIi4vZGVmYXVsdHMiOjExNTF9XSwxMTUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPW4ubWFya2VyLHU9bi5saW5lLGg9Yy5saW5lO2UuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sYTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1vZGU6bCh7fSxuLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpsKHt9LG4udGV4dCx7fSksdGV4dHRlbXBsYXRlOm8oe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJhIiwiYiIsInRleHQiXX0pLGhvdmVydGV4dDpsKHt9LG4uaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjp1LmNvbG9yLHdpZHRoOnUud2lkdGgsZGFzaDp1LmRhc2gsc2hhcGU6bCh7fSx1LnNoYXBlLHt2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiXX0pLHNtb290aGluZzp1LnNtb290aGluZyxlZGl0VHlwZToiY2FsYyJ9LGNvbm5lY3RnYXBzOm4uY29ubmVjdGdhcHMsZmlsbDpsKHt9LG4uZmlsbCx7dmFsdWVzOlsibm9uZSIsInRvc2VsZiIsInRvbmV4dCJdLGRmbHQ6Im5vbmUifSksZmlsbGNvbG9yOm4uZmlsbGNvbG9yLG1hcmtlcjpsKHtzeW1ib2w6Yy5zeW1ib2wsb3BhY2l0eTpjLm9wYWNpdHksbWF4ZGlzcGxheWVkOmMubWF4ZGlzcGxheWVkLHNpemU6Yy5zaXplLHNpemVyZWY6Yy5zaXplcmVmLHNpemVtaW46Yy5zaXplbWluLHNpemVtb2RlOmMuc2l6ZW1vZGUsbGluZTpsKHt3aWR0aDpoLndpZHRoLGVkaXRUeXBlOiJjYWxjIn0scygibWFya2VyLmxpbmUiKSksZ3JhZGllbnQ6Yy5ncmFkaWVudCxlZGl0VHlwZToiY2FsYyJ9LHMoIm1hcmtlciIpKSx0ZXh0Zm9udDpuLnRleHRmb250LHRleHRwb3NpdGlvbjpuLnRleHRwb3NpdGlvbixzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyaW5mbzpsKHt9LGEuaG92ZXJpbmZvLHtmbGFnczpbImEiLCJiIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246bi5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6aSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTk5LCIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc2MiwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODQxLCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExMjB9XSwxMTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGk9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxvPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxzPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGw9dCgiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2NhcnBldFRyYWNlPWwodCxlKTtpZihyJiZyLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PXIudmlzaWJsZSl7dmFyIGM7ZS54YXhpcz1yLnhheGlzLGUueWF4aXM9ci55YXhpczt2YXIgdSxoLGY9ZS5fbGVuZ3RoLHA9bmV3IEFycmF5KGYpLGQ9ITE7Zm9yKGM9MDtjPGY7YysrKWlmKHU9ZS5hW2NdLGg9ZS5iW2NdLG4odSkmJm4oaCkpe3ZhciBnPXIuYWIyeHkoK3UsK2gsITApLHY9ci5pc1Zpc2libGUoK3UsK2gpO3Z8fChkPSEwKSxwW2NdPXt4OmdbMF0seTpnWzFdLGE6dSxiOmgsdmlzOnZ9fWVsc2UgcFtjXT17eDohMSx5OiExfTtyZXR1cm4gZS5fbmVlZHNDdWxsPWQscFswXS5jYXJwZXQ9cixwWzBdLnRyYWNlPWUscyhlLGYpLGEodCxlKSxpKHAsZSksbyhwLGUpLHB9fX0seyIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo5MTYsIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMTE5LCIuLi9zY2F0dGVyL2NhbGMiOjExMjEsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjExMjIsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMTIzLCJmYXN0LWlzbnVtZXJpYyI6MjI4fV0sMTE1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxoPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBwKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxoLHIsYSl9cCgiY2FycGV0IiksZS54YXhpcz0ieCIsZS55YXhpcz0ieSI7dmFyIGQ9cCgiYSIpLGc9cCgiYiIpLHY9TWF0aC5taW4oZC5sZW5ndGgsZy5sZW5ndGgpO2lmKHYpe2UuX2xlbmd0aD12LHAoInRleHQiKSxwKCJ0ZXh0dGVtcGxhdGUiKSxwKCJob3ZlcnRleHQiKSxwKCJtb2RlIix2PGEuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksaS5oYXNMaW5lcyhlKSYmKHModCxlLHIsZixwKSxsKHQsZSxwKSxwKCJjb25uZWN0Z2FwcyIpKSxpLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsZixwLHtncmFkaWVudDohMH0pLGkuaGFzVGV4dChlKSYmYyh0LGUsZixwKTt2YXIgbT1bXTsoaS5oYXNNYXJrZXJzKGUpfHxpLmhhc1RleHQoZSkpJiYocCgibWFya2VyLm1heGRpc3BsYXllZCIpLG0ucHVzaCgicG9pbnRzIikpLHAoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJih1KHQsZSxyLHApLGkuaGFzTGluZXMoZSl8fGwodCxlLHApKSwidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fG0ucHVzaCgiZmlsbHMiKSwiZmlsbHMiIT09cCgiaG92ZXJvbiIsbS5qb2luKCIrIil8fCJwb2ludHMiKSYmcCgiaG92ZXJ0ZW1wbGF0ZSIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjcxNywiLi4vc2NhdHRlci9jb25zdGFudHMiOjExMjQsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMTI4LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjExMzMsIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyI6MTEzNSwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjExMzksIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjExNDQsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTE0NSwiLi9hdHRyaWJ1dGVzIjoxMTUzfV0sMTE1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgaT1uW2FdO3JldHVybiB0LmE9aS5hLHQuYj1pLmIsdC55PWkueSx0fX0se31dLDExNTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e30sbj1lLl9jYXJwZXQsYT1uLmFiMmlqKFt0LmEsdC5iXSksaT1NYXRoLmZsb29yKGFbMF0pLG89YVswXS1pLHM9TWF0aC5mbG9vcihhWzFdKSxsPWFbMV0tcyxjPW4uZXZhbHh5KFtdLGkscyxvLGwpO3JldHVybiByLnlMYWJlbD1jWzFdLnRvRml4ZWQoMykscn19LHt9XSwxMTU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvaG92ZXIiKSxhPXQoIi4uLy4uL2xpYiIpLmZpbGxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgbz1uKHQsZSxyLGkpO2lmKG8mJiExIT09b1swXS5pbmRleCl7dmFyIHM9b1swXTtpZih2b2lkIDA9PT1zLmluZGV4KXt2YXIgbD0xLXMueTAvdC55YS5fbGVuZ3RoLGM9dC54YS5fbGVuZ3RoLHU9YypsLzIsaD1jLXU7cmV0dXJuIHMueDA9TWF0aC5tYXgoTWF0aC5taW4ocy54MCxoKSx1KSxzLngxPU1hdGgubWF4KE1hdGgubWluKHMueDEsaCksdSksb312YXIgZj1zLmNkW3MuaW5kZXhdO3MuYT1mLmEscy5iPWYuYixzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwO3ZhciBwPXMudHJhY2UsZD1wLl9jYXJwZXQsZz1wLl9tb2R1bGUuZm9ybWF0TGFiZWxzKGYscCk7cy55TGFiZWw9Zy55TGFiZWwsZGVsZXRlIHMudGV4dDt2YXIgdj1bXTtpZighcC5ob3ZlcnRlbXBsYXRlKXt2YXIgbT0oZi5oaXx8cC5ob3ZlcmluZm8pLnNwbGl0KCIrIik7LTEhPT1tLmluZGV4T2YoImFsbCIpJiYobT1bImEiLCJiIiwidGV4dCJdKSwtMSE9PW0uaW5kZXhPZigiYSIpJiZ5KGQuYWF4aXMsZi5hKSwtMSE9PW0uaW5kZXhPZigiYiIpJiZ5KGQuYmF4aXMsZi5iKSx2LnB1c2goInk6ICIrcy55TGFiZWwpLC0xIT09bS5pbmRleE9mKCJ0ZXh0IikmJmEoZixwLHYpLHMuZXh0cmFUZXh0PXYuam9pbigiPGJyPiIpfXJldHVybiBvfWZ1bmN0aW9uIHkodCxlKXt2YXIgcjtyPXQubGFiZWxwcmVmaXgmJnQubGFiZWxwcmVmaXgubGVuZ3RoPjA/dC5sYWJlbHByZWZpeC5yZXBsYWNlKC8gPSAkLywiIik6dC5faG92ZXJ0aXRsZSx2LnB1c2gocisiOiAiK2UudG9GaXhlZCgzKSt0LmxhYmVsc3VmZml4KX19fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi9zY2F0dGVyL2hvdmVyIjoxMTMxfV0sMTE1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL3NjYXR0ZXIvc2VsZWN0IiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVyY2FycGV0IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsic3ZnIiwiY2FycGV0Iiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJjYXJwZXREZXBlbmRlbnQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NiwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjExMzgsIi4uL3NjYXR0ZXIvc2VsZWN0IjoxMTQxLCIuLi9zY2F0dGVyL3N0eWxlIjoxMTQzLCIuL2F0dHJpYnV0ZXMiOjExNTMsIi4vY2FsYyI6MTE1NCwiLi9kZWZhdWx0cyI6MTE1NSwiLi9ldmVudF9kYXRhIjoxMTU2LCIuL2Zvcm1hdF9sYWJlbHMiOjExNTcsIi4vaG92ZXIiOjExNTgsIi4vcGxvdCI6MTE2MH1dLDExNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90IiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGwsYyx1PXJbMF1bMF0uY2FycGV0LGg9e3hheGlzOmEuZ2V0RnJvbUlkKHQsdS54YXhpc3x8IngiKSx5YXhpczphLmdldEZyb21JZCh0LHUueWF4aXN8fCJ5IikscGxvdDplLnBsb3R9O2ZvcihuKHQsaCxyLG8pLHM9MDtzPHIubGVuZ3RoO3MrKylsPXJbc11bMF0udHJhY2UsYz1vLnNlbGVjdEFsbCgiZy50cmFjZSIrbC51aWQrIiAuanMtbGluZSIpLGkuc2V0Q2xpcFVybChjLHJbc11bMF0uY2FycGV0Ll9jbGlwUGF0aElkLHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYxMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi4vc2NhdHRlci9wbG90IjoxMTQwfV0sMTE2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGk9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaD1pLm1hcmtlcixmPWkubGluZSxwPWgubGluZTtlLmV4cG9ydHM9dSh7bG9uOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sbGF0Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sbG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sbG9jYXRpb25tb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJJU08tMyIsIlVTQS1zdGF0ZXMiLCJjb3VudHJ5IG5hbWVzIiwiZ2VvanNvbi1pZCJdLGRmbHQ6IklTTy0zIn0sZ2VvanNvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LGZlYXR1cmVpZGtleTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyIsZGZsdDoiaWQifSxtb2RlOmMoe30saS5tb2RlLHtkZmx0OiJtYXJrZXJzIn0pLHRleHQ6Yyh7fSxpLnRleHQse30pLHRleHR0ZW1wbGF0ZTphKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsibGF0IiwibG9uIiwibG9jYXRpb24iLCJ0ZXh0Il19KSxob3ZlcnRleHQ6Yyh7fSxpLmhvdmVydGV4dCx7fSksdGV4dGZvbnQ6aS50ZXh0Zm9udCx0ZXh0cG9zaXRpb246aS50ZXh0cG9zaXRpb24sbGluZTp7Y29sb3I6Zi5jb2xvcix3aWR0aDpmLndpZHRoLGRhc2g6bH0sY29ubmVjdGdhcHM6aS5jb25uZWN0Z2FwcyxtYXJrZXI6Yyh7c3ltYm9sOmguc3ltYm9sLG9wYWNpdHk6aC5vcGFjaXR5LHNpemU6aC5zaXplLHNpemVyZWY6aC5zaXplcmVmLHNpemVtaW46aC5zaXplbWluLHNpemVtb2RlOmguc2l6ZW1vZGUsY29sb3JiYXI6aC5jb2xvcmJhcixsaW5lOmMoe3dpZHRoOnAud2lkdGh9LHMoIm1hcmtlci5saW5lIikpLGdyYWRpZW50OmguZ3JhZGllbnR9LHMoIm1hcmtlciIpKSxmaWxsOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwidG9zZWxmIl0sZGZsdDoibm9uZSJ9LGZpbGxjb2xvcjppLmZpbGxjb2xvcixzZWxlY3RlZDppLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6aS51bnNlbGVjdGVkLGhvdmVyaW5mbzpjKHt9LG8uaG92ZXJpbmZvLHtmbGFnczpbImxvbiIsImxhdCIsImxvY2F0aW9uIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6bigpfSwiY2FsYyIsIm5lc3RlZCIpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1OTksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2MTIsIi4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzQ4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg0MSwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTIwfV0sMTE2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxpPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksbz10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLGw9dCgiLi4vLi4vbGliIikuXztmdW5jdGlvbiBjKHQpe3JldHVybiB0JiYic3RyaW5nIj09dHlwZW9mIHR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdT1BcnJheS5pc0FycmF5KGUubG9jYXRpb25zKSxoPXU/ZS5sb2NhdGlvbnMubGVuZ3RoOmUuX2xlbmd0aCxmPW5ldyBBcnJheShoKTtyPWUuZ2VvanNvbj9mdW5jdGlvbih0KXtyZXR1cm4gYyh0KXx8bih0KX06Yztmb3IodmFyIHA9MDtwPGg7cCsrKXt2YXIgZD1mW3BdPXt9O2lmKHUpe3ZhciBnPWUubG9jYXRpb25zW3BdO2QubG9jPXIoZyk/ZzpudWxsfWVsc2V7dmFyIHY9ZS5sb25bcF0sbT1lLmxhdFtwXTtuKHYpJiZuKG0pP2QubG9ubGF0PVsrdiwrbV06ZC5sb25sYXQ9W2EsYV19fXJldHVybiBvKGYsZSksaSh0LGUpLHMoZixlKSxoJiYoZlswXS50PXtsYWJlbHM6e2xhdDpsKHQsImxhdDoiKSsiICIsbG9uOmwodCwibG9uOiIpKyIgIn19KSxmfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2OTMsIi4uLy4uL2xpYiI6NzE3LCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTExOSwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTEyMiwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExMjMsImZhc3QtaXNudW1lcmljIjoyMjh9XSwxMTYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGk9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGgocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixhKX12YXIgZixwPWgoImxvY2F0aW9ucyIpO2lmKHAmJnAubGVuZ3RoKXt2YXIgZCxnPWgoImdlb2pzb24iKTsoInN0cmluZyI9PXR5cGVvZiBnJiYiIiE9PWd8fG4uaXNQbGFpbk9iamVjdChnKSkmJihkPSJnZW9qc29uLWlkIiksImdlb2pzb24taWQiPT09aCgibG9jYXRpb25tb2RlIixkKSYmaCgiZmVhdHVyZWlka2V5IiksZj1wLmxlbmd0aH1lbHNle3ZhciB2PWgoImxvbiIpfHxbXSxtPWgoImxhdCIpfHxbXTtmPU1hdGgubWluKHYubGVuZ3RoLG0ubGVuZ3RoKX1mPyhlLl9sZW5ndGg9ZixoKCJ0ZXh0IiksaCgiaG92ZXJ0ZXh0IiksaCgiaG92ZXJ0ZW1wbGF0ZSIpLGgoIm1vZGUiKSxhLmhhc0xpbmVzKGUpJiYobyh0LGUscix1LGgpLGgoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSYmaSh0LGUscix1LGgse2dyYWRpZW50OiEwfSksYS5oYXNUZXh0KGUpJiYoaCgidGV4dHRlbXBsYXRlIikscyh0LGUsdSxoKSksaCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmbCh0LGUscixoKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxoKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjcxNywiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjExMjgsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTEzMywiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjExMzksIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjExNDQsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTE0NSwiLi9hdHRyaWJ1dGVzIjoxMTYxfV0sMTE2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixhKXt0Lmxvbj1lLmxvbix0LmxhdD1lLmxhdCx0LmxvY2F0aW9uPWUubG9jP2UubG9jOm51bGw7dmFyIGk9blthXTtyZXR1cm4gaS5mSW4mJmkuZkluLnByb3BlcnRpZXMmJih0LnByb3BlcnRpZXM9aS5mSW4ucHJvcGVydGllcyksdH19LHt9XSwxMTY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT17fSxpPXJbZS5nZW9dLl9zdWJwbG90Lm1vY2tBeGlzLG89dC5sb25sYXQ7cmV0dXJuIGEubG9uTGFiZWw9bi50aWNrVGV4dChpLGkuYzJsKG9bMF0pLCEwKS50ZXh0LGEubGF0TGFiZWw9bi50aWNrVGV4dChpLGkuYzJsKG9bMV0pLCEwKS50ZXh0LGF9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjV9XSwxMTY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0saT10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpLG89dCgiLi4vLi4vbGliIikuZmlsbFRleHQscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBsPXQuY2QsYz1sWzBdLnRyYWNlLHU9dC54YSxoPXQueWEsZj10LnN1YnBsb3QscD1mLnByb2plY3Rpb24uaXNMb25MYXRPdmVyRWRnZXMsZD1mLnByb2plY3Q7aWYobi5nZXRDbG9zZXN0KGwsZnVuY3Rpb24odCl7dmFyIG49dC5sb25sYXQ7aWYoblswXT09PWEpcmV0dXJuIDEvMDtpZihwKG4pKXJldHVybiAxLzA7dmFyIGk9ZChuKSxvPWQoW2Uscl0pLHM9TWF0aC5hYnMoaVswXS1vWzBdKSxsPU1hdGguYWJzKGlbMV0tb1sxXSksYz1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KHMqcytsKmwpLWMsMS0zL2MpfSx0KSwhMSE9PXQuaW5kZXgpe3ZhciBnPWxbdC5pbmRleF0sdj1nLmxvbmxhdCxtPVt1LmMycCh2KSxoLmMycCh2KV0seT1nLm1yY3x8MTt0LngwPW1bMF0teSx0LngxPW1bMF0reSx0LnkwPW1bMV0teSx0LnkxPW1bMV0reSx0LmxvYz1nLmxvYyx0Lmxvbj12WzBdLHQubGF0PXZbMV07dmFyIHg9e307eFtjLmdlb109e19zdWJwbG90OmZ9O3ZhciBiPWMuX21vZHVsZS5mb3JtYXRMYWJlbHMoZyxjLHgpO3JldHVybiB0LmxvbkxhYmVsPWIubG9uTGFiZWwsdC5sYXRMYWJlbD1iLmxhdExhYmVsLHQuY29sb3I9aShjLGcpLHQuZXh0cmFUZXh0PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQuaG92ZXJ0ZW1wbGF0ZSlyZXR1cm47dmFyIGE9ZS5oaXx8dC5ob3ZlcmluZm8saT0iYWxsIj09PWE/cy5ob3ZlcmluZm8uZmxhZ3M6YS5zcGxpdCgiKyIpLGw9LTEhPT1pLmluZGV4T2YoImxvY2F0aW9uIikmJkFycmF5LmlzQXJyYXkodC5sb2NhdGlvbnMpLGM9LTEhPT1pLmluZGV4T2YoImxvbiIpLHU9LTEhPT1pLmluZGV4T2YoImxhdCIpLGg9LTEhPT1pLmluZGV4T2YoInRleHQiKSxmPVtdO2Z1bmN0aW9uIHAodCl7cmV0dXJuIHQrIlx4YjAifWw/Zi5wdXNoKGUubG9jKTpjJiZ1P2YucHVzaCgiKCIrcChyLmxvbkxhYmVsKSsiLCAiK3Aoci5sYXRMYWJlbCkrIikiKTpjP2YucHVzaChuLmxvbitwKHIubG9uTGFiZWwpKTp1JiZmLnB1c2gobi5sYXQrcChyLmxhdExhYmVsKSk7aCYmbyhlLHQsZik7cmV0dXJuIGYuam9pbigiPGJyPiIpfShjLGcsdCxsWzBdLnQubGFiZWxzKSx0LmhvdmVydGVtcGxhdGU9Yy5ob3ZlcnRlbXBsYXRlLFt0XX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjYzMCwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzLCIuLi8uLi9saWIiOjcxNywiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjExMzAsIi4vYXR0cmlidXRlcyI6MTE2MX1dLDExNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuL2Zvcm1hdF9sYWJlbHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNhbGNHZW9KU09OOnQoIi4vcGxvdCIpLmNhbGNHZW9KU09OLHBsb3Q6dCgiLi9wbG90IikucGxvdCxzdHlsZTp0KCIuL3N0eWxlIiksc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVyZ2VvIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nZW8iKSxjYXRlZ29yaWVzOlsiZ2VvIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nZW8iOjc5NSwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjExMzgsIi4uL3NjYXR0ZXIvc3R5bGUiOjExNDMsIi4vYXR0cmlidXRlcyI6MTE2MSwiLi9jYWxjIjoxMTYyLCIuL2RlZmF1bHRzIjoxMTYzLCIuL2V2ZW50X2RhdGEiOjExNjQsIi4vZm9ybWF0X2xhYmVscyI6MTE2NSwiLi9ob3ZlciI6MTE2NiwiLi9wbG90IjoxMTY4LCIuL3NlbGVjdCI6MTE2OSwiLi9zdHlsZSI6MTE3MH1dLDExNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIikuZ2V0VG9wb2pzb25GZWF0dXJlcyxvPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIikscz10KCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZmluZEV4dHJlbWVzLGM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSx1PXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGg9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGY9dCgiLi9zdHlsZSIpO2UuZXhwb3J0cz17Y2FsY0dlb0pTT046ZnVuY3Rpb24odCxlKXt2YXIgcixuLGE9dFswXS50cmFjZSxvPWVbYS5nZW9dLGg9by5fc3VicGxvdCxmPWEuX2xlbmd0aDtpZihBcnJheS5pc0FycmF5KGEubG9jYXRpb25zKSl7dmFyIHA9YS5sb2NhdGlvbm1vZGUsZD0iZ2VvanNvbi1pZCI9PT1wP3MuZXh0cmFjdFRyYWNlRmVhdHVyZSh0KTppKGEsaC50b3BvanNvbik7Zm9yKHI9MDtyPGY7cisrKXtuPXRbcl07dmFyIGc9Imdlb2pzb24taWQiPT09cD9uLmZPdXQ6cy5sb2NhdGlvblRvRmVhdHVyZShwLG4ubG9jLGQpO24ubG9ubGF0PWc/Zy5wcm9wZXJ0aWVzLmN0OltjLGNdfX12YXIgdixtLHk9e3BhZGRlZDohMH07aWYoImdlb2pzb24iPT09by5maXRib3VuZHMmJiJnZW9qc29uLWlkIj09PWEubG9jYXRpb25tb2RlKXt2YXIgeD1zLmNvbXB1dGVCYm94KHMuZ2V0VHJhY2VHZW9qc29uKGEpKTt2PVt4WzBdLHhbMl1dLG09W3hbMV0seFszXV19ZWxzZXtmb3Iodj1uZXcgQXJyYXkoZiksbT1uZXcgQXJyYXkoZikscj0wO3I8ZjtyKyspbj10W3JdLHZbcl09bi5sb25sYXRbMF0sbVtyXT1uLmxvbmxhdFsxXTt5LnBwYWQ9dShhLGYpfWEuX2V4dHJlbWVzLmxvbj1sKG8ubG9uYXhpcy5fYXgsdix5KSxhLl9leHRyZW1lcy5sYXQ9bChvLmxhdGF4aXMuX2F4LG0seSl9LHBsb3Q6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKSxzPWEubWFrZVRyYWNlR3JvdXBzKGksciwidHJhY2Ugc2NhdHRlcmdlbyIpO2Z1bmN0aW9uIGwodCxlKXt0LmxvbmxhdFswXT09PWMmJm4uc2VsZWN0KGUpLnJlbW92ZSgpfXMuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkscy5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ZVswXS50cmFjZTtpZihoLmhhc0xpbmVzKGkpfHwibm9uZSIhPT1pLmZpbGwpe3ZhciBzPW8uY2FsY1RyYWNlVG9MaW5lQ29vcmRzKGUpLGM9Im5vbmUiIT09aS5maWxsP28ubWFrZVBvbHlnb24ocyk6by5tYWtlTGluZShzKTtyLnNlbGVjdEFsbCgicGF0aC5qcy1saW5lIikuZGF0YShbe2dlb2pzb246Yyx0cmFjZTppfV0pLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgianMtbGluZSIsITApLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMil9aC5oYXNNYXJrZXJzKGkpJiZyLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLmRhdGEoYS5pZGVudGl0eSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJwb2ludCIsITApLmVhY2goZnVuY3Rpb24odCl7bCh0LHRoaXMpfSksaC5oYXNUZXh0KGkpJiZyLnNlbGVjdEFsbCgiZyIpLmRhdGEoYS5pZGVudGl0eSkuZW50ZXIoKS5hcHBlbmQoImciKS5hcHBlbmQoInRleHQiKS5lYWNoKGZ1bmN0aW9uKHQpe2wodCx0aGlzKX0pLGYodCxlKX0pfX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyI6NzExLCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyI6NzEyLCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiOjc0NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6NzY0LCIuLi9zY2F0dGVyL2NhbGMiOjExMjEsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjExNDQsIi4vc3R5bGUiOjExNzAsZDM6MTY1fV0sMTE2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksbyxzLGwsYz10LmNkLHU9dC54YXhpcyxoPXQueWF4aXMsZj1bXSxwPWNbMF0udHJhY2U7aWYoIW4uaGFzTWFya2VycyhwKSYmIW4uaGFzVGV4dChwKSlyZXR1cm5bXTtpZighMT09PWUpZm9yKGw9MDtsPGMubGVuZ3RoO2wrKyljW2xdLnNlbGVjdGVkPTA7ZWxzZSBmb3IobD0wO2w8Yy5sZW5ndGg7bCsrKShpPShyPWNbbF0pLmxvbmxhdClbMF0hPT1hJiYobz11LmMycChpKSxzPWguYzJwKGkpLGUuY29udGFpbnMoW28sc10sbnVsbCxsLHQpPyhmLnB1c2goe3BvaW50TnVtYmVyOmwsbG9uOmlbMF0sbGF0OmlbMV19KSxyLnNlbGVjdGVkPTEpOnIuc2VsZWN0ZWQ9MCk7cmV0dXJuIGZ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY5MywiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTE0NH1dLDExNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vc2NhdHRlci9zdHlsZSIpLHM9by5zdHlsZVBvaW50cyxsPW8uc3R5bGVUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxvPWVbMF0ubm9kZTM7by5zdHlsZSgib3BhY2l0eSIsZVswXS50cmFjZS5vcGFjaXR5KSxzKG8scix0KSxsKG8scix0KSxvLnNlbGVjdEFsbCgicGF0aC5qcy1saW5lIikuc3R5bGUoImZpbGwiLCJub25lIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXQudHJhY2Usbz1yLmxpbmV8fHt9O2UuY2FsbChpLnN0cm9rZSxvLmNvbG9yKS5jYWxsKGEuZGFzaExpbmUsby5kYXNofHwiIixvLndpZHRofHwwKSwibm9uZSIhPT1yLmZpbGwmJmUuY2FsbChpLmZpbGwsci5maWxsY29sb3IpfSl9KHQsZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MTMsIi4uL3NjYXR0ZXIvc3R5bGUiOjExNDMsZDM6MTY1fV0sMTE3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxzPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxsPXQoIi4vY29uc3RhbnRzIikuREFTSEVTLGM9YS5saW5lLHU9YS5tYXJrZXIsaD11LmxpbmUsZj1lLmV4cG9ydHM9cyh7eDphLngseDA6YS54MCxkeDphLmR4LHk6YS55LHkwOmEueTAsZHk6YS5keSx0ZXh0OmEudGV4dCxob3ZlcnRleHQ6YS5ob3ZlcnRleHQsdGV4dHBvc2l0aW9uOmEudGV4dHBvc2l0aW9uLHRleHRmb250OmEudGV4dGZvbnQsbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGluZXMiLCJtYXJrZXJzIiwidGV4dCJdLGV4dHJhczpbIm5vbmUiXX0sbGluZTp7Y29sb3I6Yy5jb2xvcix3aWR0aDpjLndpZHRoLHNoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJodiIsInZoIiwiaHZoIiwidmh2Il0sZGZsdDoibGluZWFyIixlZGl0VHlwZToicGxvdCJ9LGRhc2g6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhsKSxkZmx0OiJzb2xpZCJ9fSxtYXJrZXI6byh7fSxpKCJtYXJrZXIiKSx7c3ltYm9sOnUuc3ltYm9sLHNpemU6dS5zaXplLHNpemVyZWY6dS5zaXplcmVmLHNpemVtaW46dS5zaXplbWluLHNpemVtb2RlOnUuc2l6ZW1vZGUsb3BhY2l0eTp1Lm9wYWNpdHksY29sb3JiYXI6dS5jb2xvcmJhcixsaW5lOm8oe30saSgibWFya2VyLmxpbmUiKSx7d2lkdGg6aC53aWR0aH0pfSksY29ubmVjdGdhcHM6YS5jb25uZWN0Z2FwcyxmaWxsOm8oe30sYS5maWxsLHtkZmx0OiJub25lIn0pLGZpbGxjb2xvcjphLmZpbGxjb2xvcixzZWxlY3RlZDp7bWFya2VyOmEuc2VsZWN0ZWQubWFya2VyLHRleHRmb250OmEuc2VsZWN0ZWQudGV4dGZvbnR9LHVuc2VsZWN0ZWQ6e21hcmtlcjphLnVuc2VsZWN0ZWQubWFya2VyLHRleHRmb250OmEudW5zZWxlY3RlZC50ZXh0Zm9udH0sb3BhY2l0eTpuLm9wYWNpdHl9LCJjYWxjIiwibmVzdGVkIik7Zi54LmVkaXRUeXBlPWYueS5lZGl0VHlwZT1mLngwLmVkaXRUeXBlPWYueTAuZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGYuaG92ZXJ0ZW1wbGF0ZT1hLmhvdmVydGVtcGxhdGUsZi50ZXh0dGVtcGxhdGU9YS50ZXh0dGVtcGxhdGV9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU5OSwiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3NDgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc2MiwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTIwLCIuL2NvbnN0YW50cyI6MTE3M31dLDExNzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicG9pbnQtY2x1c3RlciIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5maW5kRXh0cmVtZXMscz10KCIuLi9zY2F0dGVyL2NhbGMiKSxsPXMuY2FsY01hcmtlclNpemUsYz1zLmNhbGNBeGlzRXhwYW5zaW9uLHU9cy5zZXRGaXJzdFNjYXR0ZXIsaD10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGY9dCgiLi9jb252ZXJ0IikscD10KCIuL3NjZW5lX3VwZGF0ZSIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxnPXQoIi4vY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2Z1bmN0aW9uIHYodCxlLHIpe3ZhciBuPXQuX2V4dHJlbWVzW2UuX2lkXSxhPW8oZSxyLl9ibmRzLHtwYWRkZWQ6ITB9KTtuLm1pbj1uLm1pbi5jb25jYXQoYS5taW4pLG4ubWF4PW4ubWF4LmNvbmNhdChhLm1heCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbyxzLG09dC5fZnVsbExheW91dCx5PWkuZ2V0RnJvbUlkKHQsZS54YXhpcykseD1pLmdldEZyb21JZCh0LGUueWF4aXMpLGI9bS5fcGxvdHNbZS54YXhpcytlLnlheGlzXSxfPWUuX2xlbmd0aCx3PV8+PWcsaz0yKl8sVD17fSxNPWUuX3g9eS5tYWtlQ2FsY2RhdGEoZSwieCIpLEE9ZS5feT14Lm1ha2VDYWxjZGF0YShlLCJ5IiksUz1uZXcgQXJyYXkoayk7Zm9yKHI9MDtyPF87cisrKW89TVtyXSxzPUFbcl0sU1syKnJdPW89PT1kP05hTjpvLFNbMipyKzFdPXM9PT1kP05hTjpzO2lmKCJsb2ciPT09eS50eXBlKWZvcihyPTA7cjxrO3IrPTIpU1tyXT15LmMybChTW3JdKTtpZigibG9nIj09PXgudHlwZSlmb3Iocj0xO3I8aztyKz0yKVNbcl09eC5jMmwoU1tyXSk7aWYodyYmImxvZyIhPT15LnR5cGUmJiJsb2ciIT09eC50eXBlKVQudHJlZT1uKFMpO2Vsc2V7dmFyIEU9VC5pZHM9bmV3IEFycmF5KF8pO2ZvcihyPTA7cjxfO3IrKylFW3JdPXJ9aCh0LGUpO3ZhciBMLEM9ZnVuY3Rpb24odCxlLHIsbixpLG8pe3ZhciBzPWYuc3R5bGUodCxyKTtzLm1hcmtlciYmKHMubWFya2VyLnBvc2l0aW9ucz1uKTtzLmxpbmUmJm4ubGVuZ3RoPjEmJmEuZXh0ZW5kRmxhdChzLmxpbmUsZi5saW5lUG9zaXRpb25zKHQscixuKSk7aWYocy5lcnJvclh8fHMuZXJyb3JZKXt2YXIgbD1mLmVycm9yQmFyUG9zaXRpb25zKHQscixuLGksbyk7cy5lcnJvclgmJmEuZXh0ZW5kRmxhdChzLmVycm9yWCxsLngpLHMuZXJyb3JZJiZhLmV4dGVuZEZsYXQocy5lcnJvclksbC55KX1zLnRleHQmJihhLmV4dGVuZEZsYXQocy50ZXh0LHtwb3NpdGlvbnM6bn0sZi50ZXh0UG9zaXRpb24odCxyLHMudGV4dCxzLm1hcmtlcikpLGEuZXh0ZW5kRmxhdChzLnRleHRTZWwse3Bvc2l0aW9uczpufSxmLnRleHRQb3NpdGlvbih0LHIscy50ZXh0LHMubWFya2VyU2VsKSksYS5leHRlbmRGbGF0KHMudGV4dFVuc2VsLHtwb3NpdGlvbnM6bn0sZi50ZXh0UG9zaXRpb24odCxyLHMudGV4dCxzLm1hcmtlclVuc2VsKSkpO3JldHVybiBzfSh0LDAsZSxTLE0sQSksUD1wKHQsYik7cmV0dXJuIHUobSxlKSx3P0MubWFya2VyJiYoTD0yKihDLm1hcmtlci5zaXplQXZnfHxNYXRoLm1heChDLm1hcmtlci5zaXplLDMpKSk6TD1sKGUsXyksYyh0LGUseSx4LE0sQSxMKSxDLmVycm9yWCYmdihlLHksQy5lcnJvclgpLEMuZXJyb3JZJiZ2KGUseCxDLmVycm9yWSksQy5maWxsJiYhUC5maWxsMmQmJihQLmZpbGwyZD0hMCksQy5tYXJrZXImJiFQLnNjYXR0ZXIyZCYmKFAuc2NhdHRlcjJkPSEwKSxDLmxpbmUmJiFQLmxpbmUyZCYmKFAubGluZTJkPSEwKSwhQy5lcnJvclgmJiFDLmVycm9yWXx8UC5lcnJvcjJkfHwoUC5lcnJvcjJkPSEwKSxDLnRleHQmJiFQLmdsVGV4dCYmKFAuZ2xUZXh0PSEwKSxDLm1hcmtlciYmKEMubWFya2VyLnNuYXA9XyksUC5saW5lT3B0aW9ucy5wdXNoKEMubGluZSksUC5lcnJvclhPcHRpb25zLnB1c2goQy5lcnJvclgpLFAuZXJyb3JZT3B0aW9ucy5wdXNoKEMuZXJyb3JZKSxQLmZpbGxPcHRpb25zLnB1c2goQy5maWxsKSxQLm1hcmtlck9wdGlvbnMucHVzaChDLm1hcmtlciksUC5tYXJrZXJTZWxlY3RlZE9wdGlvbnMucHVzaChDLm1hcmtlclNlbCksUC5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKEMubWFya2VyVW5zZWwpLFAudGV4dE9wdGlvbnMucHVzaChDLnRleHQpLFAudGV4dFNlbGVjdGVkT3B0aW9ucy5wdXNoKEMudGV4dFNlbCksUC50ZXh0VW5zZWxlY3RlZE9wdGlvbnMucHVzaChDLnRleHRVbnNlbCksUC5zZWxlY3RCYXRjaC5wdXNoKFtdKSxQLnVuc2VsZWN0QmF0Y2gucHVzaChbXSksVC5fc2NlbmU9UCxULmluZGV4PVAuY291bnQsVC54PU0sVC55PUEsVC5wb3NpdGlvbnM9UyxQLmNvdW50KyssW3t4OiExLHk6ITEsdDpULHRyYWNlOmV9XX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6NzY0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc2OCwiLi4vc2NhdHRlci9jYWxjIjoxMTIxLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTEyMywiLi9jb25zdGFudHMiOjExNzMsIi4vY29udmVydCI6MTE3NCwiLi9zY2VuZV91cGRhdGUiOjExODIsInBvaW50LWNsdXN0ZXIiOjQ3MX1dLDExNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtUT09fTUFOWV9QT0lOVFM6MWU1LFNZTUJPTF9TREZfU0laRToyMDAsU1lNQk9MX1NJWkU6MjAsU1lNQk9MX1NUUk9LRToxLERPVF9SRTovLWRvdC8sT1BFTl9SRTovLW9wZW4vLERBU0hFUzp7c29saWQ6WzFdLGRvdDpbMSwxXSxkYXNoOls0LDFdLGxvbmdkYXNoOls4LDFdLGRhc2hkb3Q6WzQsMSwxLDFdLGxvbmdkYXNoZG90Ols4LDEsMSwxXX19fSx7fV0sMTE3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgic3ZnLXBhdGgtc2RmIiksaT10KCJjb2xvci1ub3JtYWxpemUiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksdT10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikuZm9ybWF0Q29sb3IsaD10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksZj10KCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLHA9dCgiLi9oZWxwZXJzIiksZD10KCIuL2NvbnN0YW50cyIpLGc9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLHY9e3N0YXJ0OjEsbGVmdDoxLGVuZDotMSxyaWdodDotMSxtaWRkbGU6MCxjZW50ZXI6MCxib3R0b206MSx0b3A6LTF9LG09dCgiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIikuYXBwZW5kQXJyYXlQb2ludFZhbHVlO2Z1bmN0aW9uIHkodCxlKXt2YXIgcixhPXQuX2Z1bGxMYXlvdXQsaT1lLl9sZW5ndGgsbz1lLnRleHRmb250LGw9ZS50ZXh0cG9zaXRpb24sYz1BcnJheS5pc0FycmF5KGwpP2w6W2xdLHU9by5jb2xvcixoPW8uc2l6ZSxmPW8uZmFtaWx5LHA9e30sZD1lLnRleHR0ZW1wbGF0ZTtpZihkKXtwLnRleHQ9W107dmFyIGc9YS5fZDNsb2NhbGUsdj1BcnJheS5pc0FycmF5KGQpLHk9dj9NYXRoLm1pbihkLmxlbmd0aCxpKTppLHg9dj9mdW5jdGlvbih0KXtyZXR1cm4gZFt0XX06ZnVuY3Rpb24oKXtyZXR1cm4gZH07Zm9yKHI9MDtyPHk7cisrKXt2YXIgYj17aTpyfSxfPWUuX21vZHVsZS5mb3JtYXRMYWJlbHMoYixlLGEpLHc9e307bSh3LGUscik7dmFyIGs9ZS5fbWV0YXx8e307cC50ZXh0LnB1c2gocy50ZXh0dGVtcGxhdGVTdHJpbmcoeChyKSxfLGcsdyxiLGspKX19ZWxzZSBBcnJheS5pc0FycmF5KGUudGV4dCkmJmUudGV4dC5sZW5ndGg8aT9wLnRleHQ9ZS50ZXh0LnNsaWNlKCk6cC50ZXh0PWUudGV4dDtpZihBcnJheS5pc0FycmF5KHAudGV4dCkpZm9yKHI9cC50ZXh0Lmxlbmd0aDtyPGk7cisrKXAudGV4dFtyXT0iIjtmb3IocC5vcGFjaXR5PWUub3BhY2l0eSxwLmZvbnQ9e30scC5hbGlnbj1bXSxwLmJhc2VsaW5lPVtdLHI9MDtyPGMubGVuZ3RoO3IrKyl7dmFyIFQ9Y1tyXS5zcGxpdCgvXHMrLyk7c3dpdGNoKFRbMV0pe2Nhc2UibGVmdCI6cC5hbGlnbi5wdXNoKCJyaWdodCIpO2JyZWFrO2Nhc2UicmlnaHQiOnAuYWxpZ24ucHVzaCgibGVmdCIpO2JyZWFrO2RlZmF1bHQ6cC5hbGlnbi5wdXNoKFRbMV0pfXN3aXRjaChUWzBdKXtjYXNlInRvcCI6cC5iYXNlbGluZS5wdXNoKCJib3R0b20iKTticmVhaztjYXNlImJvdHRvbSI6cC5iYXNlbGluZS5wdXNoKCJ0b3AiKTticmVhaztkZWZhdWx0OnAuYmFzZWxpbmUucHVzaChUWzBdKX19aWYoQXJyYXkuaXNBcnJheSh1KSlmb3IocC5jb2xvcj1uZXcgQXJyYXkoaSkscj0wO3I8aTtyKyspcC5jb2xvcltyXT11W3JdO2Vsc2UgcC5jb2xvcj11O2lmKHMuaXNBcnJheU9yVHlwZWRBcnJheShoKXx8QXJyYXkuaXNBcnJheShmKSlmb3IocC5mb250PW5ldyBBcnJheShpKSxyPTA7cjxpO3IrKyl7dmFyIE09cC5mb250W3JdPXt9O00uc2l6ZT1zLmlzVHlwZWRBcnJheShoKT9oW3JdOkFycmF5LmlzQXJyYXkoaCk/bihoW3JdKT9oW3JdOjA6aCxNLmZhbWlseT1BcnJheS5pc0FycmF5KGYpP2Zbcl06Zn1lbHNlIHAuZm9udD17c2l6ZTpoLGZhbWlseTpmfTtyZXR1cm4gcH1mdW5jdGlvbiB4KHQpe3ZhciBlLHIsbj10Ll9sZW5ndGgsYT10Lm1hcmtlcixvPXt9LGw9cy5pc0FycmF5T3JUeXBlZEFycmF5KGEuc3ltYm9sKSxjPXMuaXNBcnJheU9yVHlwZWRBcnJheShhLmNvbG9yKSxoPXMuaXNBcnJheU9yVHlwZWRBcnJheShhLmxpbmUuY29sb3IpLGQ9cy5pc0FycmF5T3JUeXBlZEFycmF5KGEub3BhY2l0eSksZz1zLmlzQXJyYXlPclR5cGVkQXJyYXkoYS5zaXplKSx2PXMuaXNBcnJheU9yVHlwZWRBcnJheShhLmxpbmUud2lkdGgpO2lmKGx8fChyPXAuaXNPcGVuU3ltYm9sKGEuc3ltYm9sKSksbHx8Y3x8aHx8ZCl7by5jb2xvcnM9bmV3IEFycmF5KG4pLG8uYm9yZGVyQ29sb3JzPW5ldyBBcnJheShuKTt2YXIgbT11KGEsYS5vcGFjaXR5LG4pLHk9dShhLmxpbmUsYS5vcGFjaXR5LG4pO2lmKCFBcnJheS5pc0FycmF5KHlbMF0pKXt2YXIgeD15O2Zvcih5PUFycmF5KG4pLGU9MDtlPG47ZSsrKXlbZV09eH1pZighQXJyYXkuaXNBcnJheShtWzBdKSl7dmFyIGI9bTtmb3IobT1BcnJheShuKSxlPTA7ZTxuO2UrKyltW2VdPWJ9Zm9yKG8uY29sb3JzPW0sby5ib3JkZXJDb2xvcnM9eSxlPTA7ZTxuO2UrKyl7aWYobCl7dmFyIF89YS5zeW1ib2xbZV07cj1wLmlzT3BlblN5bWJvbChfKX1yJiYoeVtlXT1tW2VdLnNsaWNlKCksbVtlXT1tW2VdLnNsaWNlKCksbVtlXVszXT0wKX1vLm9wYWNpdHk9dC5vcGFjaXR5fWVsc2Ugcj8oby5jb2xvcj1pKGEuY29sb3IsInVpbnQ4Iiksby5jb2xvclszXT0wLG8uYm9yZGVyQ29sb3I9aShhLmNvbG9yLCJ1aW50OCIpKTooby5jb2xvcj1pKGEuY29sb3IsInVpbnQ4Iiksby5ib3JkZXJDb2xvcj1pKGEubGluZS5jb2xvciwidWludDgiKSksby5vcGFjaXR5PXQub3BhY2l0eSphLm9wYWNpdHk7aWYobClmb3Ioby5tYXJrZXJzPW5ldyBBcnJheShuKSxlPTA7ZTxuO2UrKylvLm1hcmtlcnNbZV09RShhLnN5bWJvbFtlXSk7ZWxzZSBvLm1hcmtlcj1FKGEuc3ltYm9sKTt2YXIgdyxrPWYodCk7aWYoZ3x8dil7dmFyIFQsTT1vLnNpemVzPW5ldyBBcnJheShuKSxBPW8uYm9yZGVyU2l6ZXM9bmV3IEFycmF5KG4pLFM9MDtpZihnKXtmb3IoZT0wO2U8bjtlKyspTVtlXT1rKGEuc2l6ZVtlXSksUys9TVtlXTtUPVMvbn1lbHNlIGZvcih3PWsoYS5zaXplKSxlPTA7ZTxuO2UrKylNW2VdPXc7aWYodilmb3IoZT0wO2U8bjtlKyspQVtlXT1hLmxpbmUud2lkdGhbZV0vMjtlbHNlIGZvcih3PWEubGluZS53aWR0aC8yLGU9MDtlPG47ZSsrKUFbZV09dztvLnNpemVBdmc9VH1lbHNlIG8uc2l6ZT1rKGEmJmEuc2l6ZXx8MTApLG8uYm9yZGVyU2l6ZXM9ayhhLmxpbmUud2lkdGgpO3JldHVybiBvfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj10Lm1hcmtlcixuPXt9O3JldHVybiBlPyhlLm1hcmtlciYmZS5tYXJrZXIuc3ltYm9sP249eChzLmV4dGVuZEZsYXQoe30scixlLm1hcmtlcikpOmUubWFya2VyJiYoZS5tYXJrZXIuc2l6ZSYmKG4uc2l6ZT1lLm1hcmtlci5zaXplLzIpLGUubWFya2VyLmNvbG9yJiYobi5jb2xvcnM9ZS5tYXJrZXIuY29sb3IpLHZvaWQgMCE9PWUubWFya2VyLm9wYWNpdHkmJihuLm9wYWNpdHk9ZS5tYXJrZXIub3BhY2l0eSkpLG4pOm59ZnVuY3Rpb24gXyh0LGUscil7dmFyIG49e307aWYoIXIpcmV0dXJuIG47aWYoci50ZXh0Zm9udCl7dmFyIGE9e29wYWNpdHk6MSx0ZXh0OmUudGV4dCx0ZXh0dGVtcGxhdGU6ZS50ZXh0dGVtcGxhdGUsdGV4dHBvc2l0aW9uOmUudGV4dHBvc2l0aW9uLHRleHRmb250OnMuZXh0ZW5kRmxhdCh7fSxlLnRleHRmb250KX07ci50ZXh0Zm9udCYmcy5leHRlbmRGbGF0KGEudGV4dGZvbnQsci50ZXh0Zm9udCksbj15KHQsYSl9cmV0dXJuIG59ZnVuY3Rpb24gdyh0LGUpe3ZhciByPXtjYXBTaXplOjIqZS53aWR0aCxsaW5lV2lkdGg6ZS50aGlja25lc3MsY29sb3I6ZS5jb2xvcn07cmV0dXJuIGUuY29weV95c3R5bGUmJihyPXQuZXJyb3JfeSkscn12YXIgaz1kLlNZTUJPTF9TREZfU0laRSxUPWQuU1lNQk9MX1NJWkUsTT1kLlNZTUJPTF9TVFJPS0UsQT17fSxTPWwuc3ltYm9sRnVuY3NbMF0oLjA1KlQpO2Z1bmN0aW9uIEUodCl7aWYoImNpcmNsZSI9PT10KXJldHVybiBudWxsO3ZhciBlLHIsbj1sLnN5bWJvbE51bWJlcih0KSxpPWwuc3ltYm9sRnVuY3NbbiUxMDBdLG89ISFsLnN5bWJvbE5vRG90W24lMTAwXSxzPSEhbC5zeW1ib2xOb0ZpbGxbbiUxMDBdLGM9cC5pc0RvdFN5bWJvbCh0KTtyZXR1cm4gQVt0XT9BW3RdOihlPWMmJiFvP2koMS4xKlQpK1M6aShUKSxyPWEoZSx7dzprLGg6ayx2aWV3Qm94OlstVCwtVCxULFRdLHN0cm9rZTpzP006LU19KSxBW3RdPXIscnx8bnVsbCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByLG49e21hcmtlcjp2b2lkIDAsbWFya2VyU2VsOnZvaWQgMCxtYXJrZXJVbnNlbDp2b2lkIDAsbGluZTp2b2lkIDAsZmlsbDp2b2lkIDAsZXJyb3JYOnZvaWQgMCxlcnJvclk6dm9pZCAwLHRleHQ6dm9pZCAwLHRleHRTZWw6dm9pZCAwLHRleHRVbnNlbDp2b2lkIDB9O2lmKCEwIT09ZS52aXNpYmxlKXJldHVybiBuO2lmKGguaGFzVGV4dChlKSYmKG4udGV4dD15KHQsZSksbi50ZXh0U2VsPV8odCxlLGUuc2VsZWN0ZWQpLG4udGV4dFVuc2VsPV8odCxlLGUudW5zZWxlY3RlZCkpLGguaGFzTWFya2VycyhlKSYmKG4ubWFya2VyPXgoZSksbi5tYXJrZXJTZWw9YihlLGUuc2VsZWN0ZWQpLG4ubWFya2VyVW5zZWw9YihlLGUudW5zZWxlY3RlZCksIWUudW5zZWxlY3RlZCYmcy5pc0FycmF5T3JUeXBlZEFycmF5KGUubWFya2VyLm9wYWNpdHkpKSl7dmFyIGE9ZS5tYXJrZXIub3BhY2l0eTtmb3Iobi5tYXJrZXJVbnNlbC5vcGFjaXR5PW5ldyBBcnJheShhLmxlbmd0aCkscj0wO3I8YS5sZW5ndGg7cisrKW4ubWFya2VyVW5zZWwub3BhY2l0eVtyXT1nKmFbcl19aWYoaC5oYXNMaW5lcyhlKSl7bi5saW5lPXtvdmVybGF5OiEwLHRoaWNrbmVzczplLmxpbmUud2lkdGgsY29sb3I6ZS5saW5lLmNvbG9yLG9wYWNpdHk6ZS5vcGFjaXR5fTt2YXIgaT0oZC5EQVNIRVNbZS5saW5lLmRhc2hdfHxbMV0pLnNsaWNlKCk7Zm9yKHI9MDtyPGkubGVuZ3RoOysrcilpW3JdKj1lLmxpbmUud2lkdGg7bi5saW5lLmRhc2hlcz1pfXJldHVybiBlLmVycm9yX3gmJmUuZXJyb3JfeC52aXNpYmxlJiYobi5lcnJvclg9dyhlLGUuZXJyb3JfeCkpLGUuZXJyb3JfeSYmZS5lcnJvcl95LnZpc2libGUmJihuLmVycm9yWT13KGUsZS5lcnJvcl95KSksZS5maWxsJiYibm9uZSIhPT1lLmZpbGwmJihuLmZpbGw9e2Nsb3NlZDohMCxmaWxsOmUuZmlsbGNvbG9yLHRoaWNrbmVzczowfSksbn0sbWFya2VyU3R5bGU6eCxtYXJrZXJTZWxlY3Rpb246YixsaW5lUG9zaXRpb25zOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixhLGk9ci5sZW5ndGgsbz1pLzI7aWYoaC5oYXNMaW5lcyhlKSYmbylpZigiaHYiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxhPTA7YTxvLTE7YSsrKWlzTmFOKHJbMiphXSl8fGlzTmFOKHJbMiphKzFdKT9uLnB1c2goTmFOLE5hTixOYU4sTmFOKToobi5wdXNoKHJbMiphXSxyWzIqYSsxXSksaXNOYU4oclsyKmErMl0pfHxpc05hTihyWzIqYSszXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqYSsyXSxyWzIqYSsxXSkpO24ucHVzaChyW2ktMl0scltpLTFdKX1lbHNlIGlmKCJodmgiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxhPTA7YTxvLTE7YSsrKWlmKGlzTmFOKHJbMiphXSl8fGlzTmFOKHJbMiphKzFdKXx8aXNOYU4oclsyKmErMl0pfHxpc05hTihyWzIqYSszXSkpaXNOYU4oclsyKmFdKXx8aXNOYU4oclsyKmErMV0pP24ucHVzaChOYU4sTmFOKTpuLnB1c2goclsyKmFdLHJbMiphKzFdKSxuLnB1c2goTmFOLE5hTik7ZWxzZXt2YXIgcz0oclsyKmFdK3JbMiphKzJdKS8yO24ucHVzaChyWzIqYV0sclsyKmErMV0scyxyWzIqYSsxXSxzLHJbMiphKzNdKX1uLnB1c2gocltpLTJdLHJbaS0xXSl9ZWxzZSBpZigidmh2Ij09PWUubGluZS5zaGFwZSl7Zm9yKG49W10sYT0wO2E8by0xO2ErKylpZihpc05hTihyWzIqYV0pfHxpc05hTihyWzIqYSsxXSl8fGlzTmFOKHJbMiphKzJdKXx8aXNOYU4oclsyKmErM10pKWlzTmFOKHJbMiphXSl8fGlzTmFOKHJbMiphKzFdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMiphXSxyWzIqYSsxXSksbi5wdXNoKE5hTixOYU4pO2Vsc2V7dmFyIGw9KHJbMiphKzFdK3JbMiphKzNdKS8yO24ucHVzaChyWzIqYV0sclsyKmErMV0sclsyKmFdLGwsclsyKmErMl0sbCl9bi5wdXNoKHJbaS0yXSxyW2ktMV0pfWVsc2UgaWYoInZoIj09PWUubGluZS5zaGFwZSl7Zm9yKG49W10sYT0wO2E8by0xO2ErKylpc05hTihyWzIqYV0pfHxpc05hTihyWzIqYSsxXSk/bi5wdXNoKE5hTixOYU4sTmFOLE5hTik6KG4ucHVzaChyWzIqYV0sclsyKmErMV0pLGlzTmFOKHJbMiphKzJdKXx8aXNOYU4oclsyKmErM10pP24ucHVzaChOYU4sTmFOKTpuLnB1c2goclsyKmFdLHJbMiphKzNdKSk7bi5wdXNoKHJbaS0yXSxyW2ktMV0pfWVsc2Ugbj1yO3ZhciBjPSExO2ZvcihhPTA7YTxuLmxlbmd0aDthKyspaWYoaXNOYU4oblthXSkpe2M9ITA7YnJlYWt9dmFyIHU9Y3x8bi5sZW5ndGg+ZC5UT09fTUFOWV9QT0lOVFM/InJlY3QiOmguaGFzTWFya2VycyhlKT8icmVjdCI6InJvdW5kIjtpZihjJiZlLmNvbm5lY3RnYXBzKXt2YXIgZj1uWzBdLHA9blsxXTtmb3IoYT0wO2E8bi5sZW5ndGg7YSs9Milpc05hTihuW2FdKXx8aXNOYU4oblthKzFdKT8oblthXT1mLG5bYSsxXT1wKTooZj1uW2FdLHA9blthKzFdKX1yZXR1cm57am9pbjp1LHBvc2l0aW9uczpufX0sZXJyb3JCYXJQb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIsYSxpKXt2YXIgcz1vLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwibWFrZUNvbXB1dGVFcnJvciIpLGw9Yy5nZXRGcm9tSWQodCxlLnhheGlzKSx1PWMuZ2V0RnJvbUlkKHQsZS55YXhpcyksaD1yLmxlbmd0aC8yLGY9e307ZnVuY3Rpb24gcCh0LGEpe3ZhciBpPWEuX2lkLmNoYXJBdCgwKSxvPWVbImVycm9yXyIraV07aWYobyYmby52aXNpYmxlJiYoImxpbmVhciI9PT1hLnR5cGV8fCJsb2ciPT09YS50eXBlKSl7Zm9yKHZhciBsPXMobyksYz17eDowLHk6MX1baV0sdT17eDpbMCwxLDIsM10seTpbMiwzLDAsMV19W2ldLHA9bmV3IEZsb2F0NjRBcnJheSg0KmgpLGQ9MS8wLGc9LTEvMCx2PTAsbT0wO3Y8aDt2KyssbSs9NCl7dmFyIHk9dFt2XTtpZihuKHkpKXt2YXIgeD1yWzIqditjXSxiPWwoeSx2KSxfPWJbMF0sdz1iWzFdO2lmKG4oXykmJm4odykpe3ZhciBrPXktXyxUPXkrdztwW20rdVswXV09eC1hLmMybChrKSxwW20rdVsxXV09YS5jMmwoVCkteCxwW20rdVsyXV09MCxwW20rdVszXV09MCxkPU1hdGgubWluKGQseS1fKSxnPU1hdGgubWF4KGcseSt3KX19fWZbaV09e3Bvc2l0aW9uczpyLGVycm9yczpwLF9ibmRzOltkLGddfX19cmV0dXJuIHAoYSxsKSxwKGksdSksZn0sdGV4dFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGk9ZS5fbGVuZ3RoLG89e307aWYoaC5oYXNNYXJrZXJzKGUpKXt2YXIgcz1yLmZvbnQsbD1yLmFsaWduLGM9ci5iYXNlbGluZTtmb3Ioby5vZmZzZXQ9bmV3IEFycmF5KGkpLGE9MDthPGk7YSsrKXt2YXIgdT1uLnNpemVzP24uc2l6ZXNbYV06bi5zaXplLGY9QXJyYXkuaXNBcnJheShzKT9zW2FdLnNpemU6cy5zaXplLHA9QXJyYXkuaXNBcnJheShsKT9sLmxlbmd0aD4xP2xbYV06bFswXTpsLGQ9QXJyYXkuaXNBcnJheShjKT9jLmxlbmd0aD4xP2NbYV06Y1swXTpjLGc9dltwXSxtPXZbZF0seT11P3UvLjgrMTowLHg9LW0qeS0uNSptO28ub2Zmc2V0W2FdPVtnKnkvZix4L2ZdfX1yZXR1cm4gb319fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjYyNywiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NjkyLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NzE0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc2OCwiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjExMzcsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjExNDQsIi4vY29uc3RhbnRzIjoxMTczLCIuL2hlbHBlcnMiOjExNzgsImNvbG9yLW5vcm1hbGl6ZSI6MTIyLCJmYXN0LWlzbnVtZXJpYyI6MjI4LCJzdmctcGF0aC1zZGYiOjUzNH1dLDExNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9oZWxwZXJzIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIiksbD10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYz10KCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLGg9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksZj10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLHA9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGQpe2Z1bmN0aW9uIGcocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixhKX12YXIgdj0hIXQubWFya2VyJiZpLmlzT3BlblN5bWJvbCh0Lm1hcmtlci5zeW1ib2wpLG09bC5pc0J1YmJsZSh0KSx5PWModCxlLGQsZyk7aWYoeSl7dmFyIHg9eTxzLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyI7ZygidGV4dCIpLGcoImhvdmVydGV4dCIpLGcoImhvdmVydGVtcGxhdGUiKSxnKCJtb2RlIix4KSxsLmhhc0xpbmVzKGUpJiYoZygiY29ubmVjdGdhcHMiKSxoKHQsZSxyLGQsZyksZygibGluZS5zaGFwZSIpKSxsLmhhc01hcmtlcnMoZSkmJih1KHQsZSxyLGQsZyksZygibWFya2VyLmxpbmUud2lkdGgiLHZ8fG0/MTowKSksbC5oYXNUZXh0KGUpJiYoZygidGV4dHRlbXBsYXRlIikscCh0LGUsZCxnKSk7dmFyIGI9KGUubGluZXx8e30pLmNvbG9yLF89KGUubWFya2VyfHx7fSkuY29sb3I7ZygiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmZih0LGUscixnKTt2YXIgdz1hLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTt3KHQsZSxifHxffHxyLHtheGlzOiJ5In0pLHcodCxlLGJ8fF98fHIse2F4aXM6IngiLGluaGVyaXQ6InkifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsZyl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6MTEyNCwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjExMjgsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTEzMywiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjExMzksIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjExNDQsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTE0NSwiLi4vc2NhdHRlci94eV9kZWZhdWx0cyI6MTE0NiwiLi9hdHRyaWJ1dGVzIjoxMTcxLCIuL2hlbHBlcnMiOjExNzh9XSwxMTc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNO2UuZXhwb3J0cz17c3R5bGVUZXh0U2VsZWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbz10WzBdLHM9by50cmFjZSxsPW8udCxjPWwuX3NjZW5lLHU9bC5pbmRleCxoPWMuc2VsZWN0QmF0Y2hbdV0sZj1jLnVuc2VsZWN0QmF0Y2hbdV0scD1jLnRleHRPcHRpb25zW3VdLGQ9Yy50ZXh0U2VsZWN0ZWRPcHRpb25zW3VdfHx7fSxnPWMudGV4dFVuc2VsZWN0ZWRPcHRpb25zW3VdfHx7fSx2PW4uZXh0ZW5kRmxhdCh7fSxwKTtpZihoLmxlbmd0aHx8Zi5sZW5ndGgpe3ZhciBtPWQuY29sb3IseT1nLmNvbG9yLHg9cC5jb2xvcixiPUFycmF5LmlzQXJyYXkoeCk7Zm9yKHYuY29sb3I9bmV3IEFycmF5KHMuX2xlbmd0aCksZT0wO2U8aC5sZW5ndGg7ZSsrKXI9aFtlXSx2LmNvbG9yW3JdPW18fChiP3hbcl06eCk7Zm9yKGU9MDtlPGYubGVuZ3RoO2UrKyl7cj1mW2VdO3ZhciBfPWI/eFtyXTp4O3YuY29sb3Jbcl09eXx8KG0/XzphLmFkZE9wYWNpdHkoXyxpKSl9fWMuZ2xUZXh0W3VdLnVwZGF0ZSh2KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NjkyLCIuLi8uLi9saWIiOjcxN31dLDExNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9mb3JtYXRfbGFiZWxzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10Lmk7cmV0dXJuIngiaW4gdHx8KHQueD1lLl94W2FdKSwieSJpbiB0fHwodC55PWUuX3lbYV0pLG4odCxlLHIpfX0seyIuLi9zY2F0dGVyL2Zvcm1hdF9sYWJlbHMiOjExMjl9XSwxMTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIik7ci5pc09wZW5TeW1ib2w9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P24uT1BFTl9SRS50ZXN0KHQpOnQlMjAwPjEwMH0sci5pc0RvdFN5bWJvbD1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bi5ET1RfUkUudGVzdCh0KTp0PjIwMH19LHsiLi9jb25zdGFudHMiOjExNzN9XSwxMTc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIik7ZnVuY3Rpb24gbyh0LGUscixvKXt2YXIgcz10LnhhLGw9dC55YSxjPXQuZGlzdGFuY2UsdT10LmR4eSxoPXQuaW5kZXgsZj17cG9pbnROdW1iZXI6aCx4OmVbaF0seTpyW2hdfTtmLnR4PUFycmF5LmlzQXJyYXkoby50ZXh0KT9vLnRleHRbaF06by50ZXh0LGYuaHR4PUFycmF5LmlzQXJyYXkoby5ob3ZlcnRleHQpP28uaG92ZXJ0ZXh0W2hdOm8uaG92ZXJ0ZXh0LGYuZGF0YT1BcnJheS5pc0FycmF5KG8uY3VzdG9tZGF0YSk/by5jdXN0b21kYXRhW2hdOm8uY3VzdG9tZGF0YSxmLnRwPUFycmF5LmlzQXJyYXkoby50ZXh0cG9zaXRpb24pP28udGV4dHBvc2l0aW9uW2hdOm8udGV4dHBvc2l0aW9uO3ZhciBwPW8udGV4dGZvbnQ7cCYmKGYudHM9YS5pc0FycmF5T3JUeXBlZEFycmF5KHAuc2l6ZSk/cC5zaXplW2hdOnAuc2l6ZSxmLnRjPUFycmF5LmlzQXJyYXkocC5jb2xvcik/cC5jb2xvcltoXTpwLmNvbG9yLGYudGY9QXJyYXkuaXNBcnJheShwLmZhbWlseSk/cC5mYW1pbHlbaF06cC5mYW1pbHkpO3ZhciBkPW8ubWFya2VyO2QmJihmLm1zPWEuaXNBcnJheU9yVHlwZWRBcnJheShkLnNpemUpP2Quc2l6ZVtoXTpkLnNpemUsZi5tbz1hLmlzQXJyYXlPclR5cGVkQXJyYXkoZC5vcGFjaXR5KT9kLm9wYWNpdHlbaF06ZC5vcGFjaXR5LGYubXg9YS5pc0FycmF5T3JUeXBlZEFycmF5KGQuc3ltYm9sKT9kLnN5bWJvbFtoXTpkLnN5bWJvbCxmLm1jPWEuaXNBcnJheU9yVHlwZWRBcnJheShkLmNvbG9yKT9kLmNvbG9yW2hdOmQuY29sb3IpO3ZhciBnPWQmJmQubGluZTtnJiYoZi5tbGM9QXJyYXkuaXNBcnJheShnLmNvbG9yKT9nLmNvbG9yW2hdOmcuY29sb3IsZi5tbHc9YS5pc0FycmF5T3JUeXBlZEFycmF5KGcud2lkdGgpP2cud2lkdGhbaF06Zy53aWR0aCk7dmFyIHY9ZCYmZC5ncmFkaWVudDt2JiYibm9uZSIhPT12LnR5cGUmJihmLm1ndD1BcnJheS5pc0FycmF5KHYudHlwZSk/di50eXBlW2hdOnYudHlwZSxmLm1nYz1BcnJheS5pc0FycmF5KHYuY29sb3IpP3YuY29sb3JbaF06di5jb2xvcik7dmFyIG09cy5jMnAoZi54LCEwKSx5PWwuYzJwKGYueSwhMCkseD1mLm1yY3x8MSxiPW8uaG92ZXJsYWJlbDtiJiYoZi5oYmc9QXJyYXkuaXNBcnJheShiLmJnY29sb3IpP2IuYmdjb2xvcltoXTpiLmJnY29sb3IsZi5oYmM9QXJyYXkuaXNBcnJheShiLmJvcmRlcmNvbG9yKT9iLmJvcmRlcmNvbG9yW2hdOmIuYm9yZGVyY29sb3IsZi5odHM9YS5pc0FycmF5T3JUeXBlZEFycmF5KGIuZm9udC5zaXplKT9iLmZvbnQuc2l6ZVtoXTpiLmZvbnQuc2l6ZSxmLmh0Yz1BcnJheS5pc0FycmF5KGIuZm9udC5jb2xvcik/Yi5mb250LmNvbG9yW2hdOmIuZm9udC5jb2xvcixmLmh0Zj1BcnJheS5pc0FycmF5KGIuZm9udC5mYW1pbHkpP2IuZm9udC5mYW1pbHlbaF06Yi5mb250LmZhbWlseSxmLmhubD1hLmlzQXJyYXlPclR5cGVkQXJyYXkoYi5uYW1lbGVuZ3RoKT9iLm5hbWVsZW5ndGhbaF06Yi5uYW1lbGVuZ3RoKTt2YXIgXz1vLmhvdmVyaW5mbztfJiYoZi5oaT1BcnJheS5pc0FycmF5KF8pP19baF06Xyk7dmFyIHc9by5ob3ZlcnRlbXBsYXRlO3cmJihmLmh0PUFycmF5LmlzQXJyYXkodyk/d1toXTp3KTt2YXIgaz17fTtrW3QuaW5kZXhdPWY7dmFyIFQ9YS5leHRlbmRGbGF0KHt9LHQse2NvbG9yOmkobyxmKSx4MDptLXgseDE6bSt4LHhMYWJlbFZhbDpmLngseTA6eS14LHkxOnkreCx5TGFiZWxWYWw6Zi55LGNkOmssZGlzdGFuY2U6YyxzcGlrZURpc3RhbmNlOnUsaG92ZXJ0ZW1wbGF0ZTpmLmh0fSk7cmV0dXJuIGYuaHR4P1QudGV4dD1mLmh0eDpmLnR4P1QudGV4dD1mLnR4Om8udGV4dCYmKFQudGV4dD1vLnRleHQpLGEuZmlsbFRleHQoZixvLFQpLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJob3ZlckluZm8iKShmLG8sVCksVH1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGkscyxsLGMsdSxoLGYscCxkPXQuY2QsZz1kWzBdLnQsdj1kWzBdLnRyYWNlLG09dC54YSx5PXQueWEseD1nLngsYj1nLnksXz1tLmMycChlKSx3PXkuYzJwKHIpLGs9dC5kaXN0YW5jZTtpZihnLnRyZWUpe3ZhciBUPW0ucDJjKF8tayksTT1tLnAyYyhfK2spLEE9eS5wMmMody1rKSxTPXkucDJjKHcrayk7YT0ieCI9PT1uP2cudHJlZS5yYW5nZShNYXRoLm1pbihULE0pLE1hdGgubWluKHkuX3JsWzBdLHkuX3JsWzFdKSxNYXRoLm1heChULE0pLE1hdGgubWF4KHkuX3JsWzBdLHkuX3JsWzFdKSk6Zy50cmVlLnJhbmdlKE1hdGgubWluKFQsTSksTWF0aC5taW4oQSxTKSxNYXRoLm1heChULE0pLE1hdGgubWF4KEEsUykpfWVsc2UgYT1nLmlkczt2YXIgRT1rO2lmKCJ4Ij09PW4pZm9yKGM9MDtjPGEubGVuZ3RoO2MrKylzPXhbYVtjXV0sKHU9TWF0aC5hYnMobS5jMnAocyktXykpPEUmJihFPXUsaD15LmMycChiW2FbY11dKS13LHA9TWF0aC5zcXJ0KHUqdStoKmgpLGk9YVtjXSk7ZWxzZSBmb3IoYz1hLmxlbmd0aC0xO2M+LTE7Yy0tKXM9eFthW2NdXSxsPWJbYVtjXV0sdT1tLmMycChzKS1fLGg9eS5jMnAobCktdywoZj1NYXRoLnNxcnQodSp1K2gqaCkpPEUmJihFPXA9ZixpPWFbY10pO3JldHVybiB0LmluZGV4PWksdC5kaXN0YW5jZT1FLHQuZHh5PXAsdm9pZCAwPT09aT9bdF06W28odCx4LGIsdildfSxjYWxjSG92ZXI6b319LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDYsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMTMwfV0sMTE4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2hvdmVyIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcmdsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiZ2wiLCJyZWdsIiwiY2FydGVzaWFuIiwic3ltYm9scyIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuLi9zY2F0dGVyL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGhvdmVyUG9pbnRzOm4uaG92ZXJQb2ludHMsc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzYsIi4uL3NjYXR0ZXIvY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjExMjYsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMTM4LCIuL2F0dHJpYnV0ZXMiOjExNzEsIi4vY2FsYyI6MTE3MiwiLi9kZWZhdWx0cyI6MTE3NSwiLi9mb3JtYXRfbGFiZWxzIjoxMTc3LCIuL2hvdmVyIjoxMTc5LCIuL3Bsb3QiOjExODEsIi4vc2VsZWN0IjoxMTgzfV0sMTE4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyZWdsLXNjYXR0ZXIyZCIpLGE9dCgicmVnbC1saW5lMmQiKSxpPXQoInJlZ2wtZXJyb3IyZCIpLG89dCgiZ2wtdGV4dCIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9saWIvcHJlcGFyZV9yZWdsIiksYz10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksdT10KCIuLi9zY2F0dGVyL2xpbmtfdHJhY2VzIiksaD10KCIuL2VkaXRfc3R5bGUiKS5zdHlsZVRleHRTZWxlY3Rpb247ZnVuY3Rpb24gZih0LGUscil7dmFyIG49dC5fc2l6ZSxhPXQud2lkdGgsaT10LmhlaWdodDtyZXR1cm5bbi5sK2UuZG9tYWluWzBdKm4udyxuLmIrci5kb21haW5bMF0qbi5oLGEtbi5yLSgxLWUuZG9tYWluWzFdKSpuLncsaS1uLnQtKDEtci5kb21haW5bMV0pKm4uaF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmxlbmd0aCl7dmFyIHAsZCxnPXQuX2Z1bGxMYXlvdXQsdj1lLl9zY2VuZSxtPWUueGF4aXMseT1lLnlheGlzO2lmKHYpaWYobCh0LFsiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIsIk9FU19lbGVtZW50X2luZGV4X3VpbnQiXSkpe3ZhciB4PXYuY291bnQsYj1nLl9nbGNhbnZhcy5kYXRhKClbMF0ucmVnbDtpZih1KHQsZSxyKSx2LmRpcnR5KXtpZighMD09PXYuZXJyb3IyZCYmKHYuZXJyb3IyZD1pKGIpKSwhMD09PXYubGluZTJkJiYodi5saW5lMmQ9YShiKSksITA9PT12LnNjYXR0ZXIyZCYmKHYuc2NhdHRlcjJkPW4oYikpLCEwPT09di5maWxsMmQmJih2LmZpbGwyZD1hKGIpKSwhMD09PXYuZ2xUZXh0KWZvcih2LmdsVGV4dD1uZXcgQXJyYXkoeCkscD0wO3A8eDtwKyspdi5nbFRleHRbcF09bmV3IG8oYik7aWYodi5nbFRleHQpe2lmKHg+di5nbFRleHQubGVuZ3RoKXt2YXIgXz14LXYuZ2xUZXh0Lmxlbmd0aDtmb3IocD0wO3A8XztwKyspdi5nbFRleHQucHVzaChuZXcgbyhiKSl9ZWxzZSBpZih4PHYuZ2xUZXh0Lmxlbmd0aCl7dmFyIHc9di5nbFRleHQubGVuZ3RoLXg7di5nbFRleHQuc3BsaWNlKHgsdykuZm9yRWFjaChmdW5jdGlvbih0KXt0LmRlc3Ryb3koKX0pfWZvcihwPTA7cDx4O3ArKyl2LmdsVGV4dFtwXS51cGRhdGUodi50ZXh0T3B0aW9uc1twXSl9aWYodi5saW5lMmQmJih2LmxpbmUyZC51cGRhdGUodi5saW5lT3B0aW9ucyksdi5saW5lT3B0aW9ucz12LmxpbmVPcHRpb25zLm1hcChmdW5jdGlvbih0KXtpZih0JiZ0LnBvc2l0aW9ucyl7Zm9yKHZhciBlPXQucG9zaXRpb25zLHI9MDtyPGUubGVuZ3RoJiYoaXNOYU4oZVtyXSl8fGlzTmFOKGVbcisxXSkpOylyKz0yO2Zvcih2YXIgbj1lLmxlbmd0aC0yO24+ciYmKGlzTmFOKGVbbl0pfHxpc05hTihlW24rMV0pKTspbi09Mjt0LnBvc2l0aW9ucz1lLnNsaWNlKHIsbisyKX1yZXR1cm4gdH0pLHYubGluZTJkLnVwZGF0ZSh2LmxpbmVPcHRpb25zKSksdi5lcnJvcjJkKXt2YXIgaz0odi5lcnJvclhPcHRpb25zfHxbXSkuY29uY2F0KHYuZXJyb3JZT3B0aW9uc3x8W10pO3YuZXJyb3IyZC51cGRhdGUoayl9di5zY2F0dGVyMmQmJnYuc2NhdHRlcjJkLnVwZGF0ZSh2Lm1hcmtlck9wdGlvbnMpLHYuZmlsbE9yZGVyPXMucmVwZWF0KG51bGwseCksdi5maWxsMmQmJih2LmZpbGxPcHRpb25zPXYuZmlsbE9wdGlvbnMubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIG49cltlXTtpZih0JiZuJiZuWzBdJiZuWzBdLnRyYWNlKXt2YXIgYSxpLG89blswXSxzPW8udHJhY2UsbD1vLnQsYz12LmxpbmVPcHRpb25zW2VdLHU9W107cy5fb3duZmlsbCYmdS5wdXNoKGUpLHMuX25leHR0cmFjZSYmdS5wdXNoKGUrMSksdS5sZW5ndGgmJih2LmZpbGxPcmRlcltlXT11KTt2YXIgaCxmLHA9W10sZD1jJiZjLnBvc2l0aW9uc3x8bC5wb3NpdGlvbnM7aWYoInRvemVyb3kiPT09cy5maWxsKXtmb3IoaD0wO2g8ZC5sZW5ndGgmJmlzTmFOKGRbaCsxXSk7KWgrPTI7Zm9yKGY9ZC5sZW5ndGgtMjtmPmgmJmlzTmFOKGRbZisxXSk7KWYtPTI7MCE9PWRbaCsxXSYmKHA9W2RbaF0sMF0pLHA9cC5jb25jYXQoZC5zbGljZShoLGYrMikpLDAhPT1kW2YrMV0mJihwPXAuY29uY2F0KFtkW2ZdLDBdKSl9ZWxzZSBpZigidG96ZXJveCI9PT1zLmZpbGwpe2ZvcihoPTA7aDxkLmxlbmd0aCYmaXNOYU4oZFtoXSk7KWgrPTI7Zm9yKGY9ZC5sZW5ndGgtMjtmPmgmJmlzTmFOKGRbZl0pOylmLT0yOzAhPT1kW2hdJiYocD1bMCxkW2grMV1dKSxwPXAuY29uY2F0KGQuc2xpY2UoaCxmKzIpKSwwIT09ZFtmXSYmKHA9cC5jb25jYXQoWzAsZFtmKzFdXSkpfWVsc2UgaWYoInRvc2VsZiI9PT1zLmZpbGx8fCJ0b25leHQiPT09cy5maWxsKXtmb3IocD1bXSxhPTAsaT0wO2k8ZC5sZW5ndGg7aSs9MikoaXNOYU4oZFtpXSl8fGlzTmFOKGRbaSsxXSkpJiYoKHA9cC5jb25jYXQoZC5zbGljZShhLGkpKSkucHVzaChkW2FdLGRbYSsxXSksYT1pKzIpO3A9cC5jb25jYXQoZC5zbGljZShhKSksYSYmcC5wdXNoKGRbYV0sZFthKzFdKX1lbHNle3ZhciBnPXMuX25leHR0cmFjZTtpZihnKXt2YXIgbT12LmxpbmVPcHRpb25zW2UrMV07aWYobSl7dmFyIHk9bS5wb3NpdGlvbnM7aWYoInRvbmV4dHkiPT09cy5maWxsKXtmb3IocD1kLnNsaWNlKCksZT1NYXRoLmZsb29yKHkubGVuZ3RoLzIpO2UtLTspe3ZhciB4PXlbMiplXSxiPXlbMiplKzFdO2lzTmFOKHgpfHxpc05hTihiKXx8cC5wdXNoKHgsYil9dC5maWxsPWcuZmlsbGNvbG9yfX19fWlmKHMuX3ByZXZ0cmFjZSYmInRvbmV4dCI9PT1zLl9wcmV2dHJhY2UuZmlsbCl7dmFyIF89di5saW5lT3B0aW9uc1tlLTFdLnBvc2l0aW9ucyx3PXAubGVuZ3RoLzIsaz1bYT13XTtmb3IoaT0wO2k8Xy5sZW5ndGg7aSs9MikoaXNOYU4oX1tpXSl8fGlzTmFOKF9baSsxXSkpJiYoay5wdXNoKGkvMit3KzEpLGE9aSsyKTtwPXAuY29uY2F0KF8pLHQuaG9sZT1rfXJldHVybiB0LmZpbGxtb2RlPXMuZmlsbCx0Lm9wYWNpdHk9cy5vcGFjaXR5LHQucG9zaXRpb25zPXAsdH19KSx2LmZpbGwyZC51cGRhdGUodi5maWxsT3B0aW9ucykpfXZhciBUPWcuZHJhZ21vZGUsTT0ibGFzc28iPT09VHx8InNlbGVjdCI9PT1ULEE9Zy5jbGlja21vZGUuaW5kZXhPZigic2VsZWN0Iik+LTE7Zm9yKHA9MDtwPHg7cCsrKXt2YXIgUz1yW3BdWzBdLEU9Uy50cmFjZSxMPVMudCxDPUwuaW5kZXgsUD1FLl9sZW5ndGgsTz1MLngsej1MLnk7aWYoRS5zZWxlY3RlZHBvaW50c3x8TXx8QSl7aWYoTXx8KE09ITApLEUuc2VsZWN0ZWRwb2ludHMpe3ZhciBJPXYuc2VsZWN0QmF0Y2hbQ109cy5zZWxJbmRpY2VzMnNlbFBvaW50cyhFKSxEPXt9O2ZvcihkPTA7ZDxJLmxlbmd0aDtkKyspRFtJW2RdXT0xO3ZhciBSPVtdO2ZvcihkPTA7ZDxQO2QrKylEW2RdfHxSLnB1c2goZCk7di51bnNlbGVjdEJhdGNoW0NdPVJ9dmFyIEY9TC54cHg9bmV3IEFycmF5KFApLEI9TC55cHg9bmV3IEFycmF5KFApO2ZvcihkPTA7ZDxQO2QrKylGW2RdPW0uYzJwKE9bZF0pLEJbZF09eS5jMnAoeltkXSl9ZWxzZSBMLnhweD1MLnlweD1udWxsfWlmKE0pe2lmKHYuc2VsZWN0MmR8fCh2LnNlbGVjdDJkPW4oZy5fZ2xjYW52YXMuZGF0YSgpWzFdLnJlZ2wpKSx2LnNjYXR0ZXIyZCl7dmFyIE49bmV3IEFycmF5KHgpO2ZvcihwPTA7cDx4O3ArKylOW3BdPXYuc2VsZWN0QmF0Y2hbcF0ubGVuZ3RofHx2LnVuc2VsZWN0QmF0Y2hbcF0ubGVuZ3RoP3YubWFya2VyVW5zZWxlY3RlZE9wdGlvbnNbcF06e307di5zY2F0dGVyMmQudXBkYXRlKE4pfXYuc2VsZWN0MmQmJih2LnNlbGVjdDJkLnVwZGF0ZSh2Lm1hcmtlck9wdGlvbnMpLHYuc2VsZWN0MmQudXBkYXRlKHYubWFya2VyU2VsZWN0ZWRPcHRpb25zKSksdi5nbFRleHQmJnIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT0oKHR8fFtdKVswXXx8e30pLnRyYWNlfHx7fTtjLmhhc1RleHQoZSkmJmgodCl9KX1lbHNlIHYuc2NhdHRlcjJkJiZ2LnNjYXR0ZXIyZC51cGRhdGUodi5tYXJrZXJPcHRpb25zKTt2YXIgaj17dmlld3BvcnQ6ZihnLG0seSkscmFuZ2U6WyhtLl9ybHx8bS5yYW5nZSlbMF0sKHkuX3JsfHx5LnJhbmdlKVswXSwobS5fcmx8fG0ucmFuZ2UpWzFdLCh5Ll9ybHx8eS5yYW5nZSlbMV1dfSxWPXMucmVwZWF0KGosdi5jb3VudCk7di5maWxsMmQmJnYuZmlsbDJkLnVwZGF0ZShWKSx2LmxpbmUyZCYmdi5saW5lMmQudXBkYXRlKFYpLHYuZXJyb3IyZCYmdi5lcnJvcjJkLnVwZGF0ZShWLmNvbmNhdChWKSksdi5zY2F0dGVyMmQmJnYuc2NhdHRlcjJkLnVwZGF0ZShWKSx2LnNlbGVjdDJkJiZ2LnNlbGVjdDJkLnVwZGF0ZShWKSx2LmdsVGV4dCYmdi5nbFRleHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVwZGF0ZShqKX0pfWVsc2Ugdi5pbml0KCl9fX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCI6NzMwLCIuLi9zY2F0dGVyL2xpbmtfdHJhY2VzIjoxMTM2LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMTQ0LCIuL2VkaXRfc3R5bGUiOjExNzYsImdsLXRleHQiOjMxOSwicmVnbC1lcnJvcjJkIjo0OTIsInJlZ2wtbGluZTJkIjo0OTMsInJlZ2wtc2NhdHRlcjJkIjo0OTl9XSwxMTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX3NjZW5lLGE9e2NvdW50OjAsZGlydHk6ITAsbGluZU9wdGlvbnM6W10sZmlsbE9wdGlvbnM6W10sbWFya2VyT3B0aW9uczpbXSxtYXJrZXJTZWxlY3RlZE9wdGlvbnM6W10sbWFya2VyVW5zZWxlY3RlZE9wdGlvbnM6W10sZXJyb3JYT3B0aW9uczpbXSxlcnJvcllPcHRpb25zOltdLHRleHRPcHRpb25zOltdLHRleHRTZWxlY3RlZE9wdGlvbnM6W10sdGV4dFVuc2VsZWN0ZWRPcHRpb25zOltdLHNlbGVjdEJhdGNoOltdLHVuc2VsZWN0QmF0Y2g6W119LGk9e2ZpbGwyZDohMSxzY2F0dGVyMmQ6ITEsZXJyb3IyZDohMSxsaW5lMmQ6ITEsZ2xUZXh0OiExLHNlbGVjdDJkOiExfTtyZXR1cm4gZS5fc2NlbmV8fCgocj1lLl9zY2VuZT17fSkuaW5pdD1mdW5jdGlvbigpe24uZXh0ZW5kRmxhdChyLGksYSl9LHIuaW5pdCgpLHIudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPW4ucmVwZWF0KHQsci5jb3VudCk7aWYoci5maWxsMmQmJnIuZmlsbDJkLnVwZGF0ZShlKSxyLnNjYXR0ZXIyZCYmci5zY2F0dGVyMmQudXBkYXRlKGUpLHIubGluZTJkJiZyLmxpbmUyZC51cGRhdGUoZSksci5lcnJvcjJkJiZyLmVycm9yMmQudXBkYXRlKGUuY29uY2F0KGUpKSxyLnNlbGVjdDJkJiZyLnNlbGVjdDJkLnVwZGF0ZShlKSxyLmdsVGV4dClmb3IodmFyIGE9MDthPHIuY291bnQ7YSsrKXIuZ2xUZXh0W2FdLnVwZGF0ZSh0KX0sci5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXIuY291bnQsZT1yLmZpbGwyZCxhPXIuZXJyb3IyZCxpPXIubGluZTJkLG89ci5zY2F0dGVyMmQscz1yLmdsVGV4dCxsPXIuc2VsZWN0MmQsYz1yLnNlbGVjdEJhdGNoLHU9ci51bnNlbGVjdEJhdGNoLGg9MDtoPHQ7aCsrKXtpZihlJiZyLmZpbGxPcmRlcltoXSYmZS5kcmF3KHIuZmlsbE9yZGVyW2hdKSxpJiZyLmxpbmVPcHRpb25zW2hdJiZpLmRyYXcoaCksYSYmKHIuZXJyb3JYT3B0aW9uc1toXSYmYS5kcmF3KGgpLHIuZXJyb3JZT3B0aW9uc1toXSYmYS5kcmF3KGgrdCkpLG8mJnIubWFya2VyT3B0aW9uc1toXSlpZih1W2hdLmxlbmd0aCl7dmFyIGY9bi5yZXBlYXQoW10sci5jb3VudCk7ZltoXT11W2hdLG8uZHJhdyhmKX1lbHNlIGNbaF0ubGVuZ3RofHxvLmRyYXcoaCk7c1toXSYmci50ZXh0T3B0aW9uc1toXSYmc1toXS5yZW5kZXIoKX1sJiZsLmRyYXcoYyksci5kaXJ0eT0hMX0sci5kZXN0cm95PWZ1bmN0aW9uKCl7ci5maWxsMmQmJnIuZmlsbDJkLmRlc3Ryb3kmJnIuZmlsbDJkLmRlc3Ryb3koKSxyLnNjYXR0ZXIyZCYmci5zY2F0dGVyMmQuZGVzdHJveSYmci5zY2F0dGVyMmQuZGVzdHJveSgpLHIuZXJyb3IyZCYmci5lcnJvcjJkLmRlc3Ryb3kmJnIuZXJyb3IyZC5kZXN0cm95KCksci5saW5lMmQmJnIubGluZTJkLmRlc3Ryb3kmJnIubGluZTJkLmRlc3Ryb3koKSxyLnNlbGVjdDJkJiZyLnNlbGVjdDJkLmRlc3Ryb3kmJnIuc2VsZWN0MmQuZGVzdHJveSgpLHIuZ2xUZXh0JiZyLmdsVGV4dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSYmdC5kZXN0cm95KCl9KSxyLmxpbmVPcHRpb25zPW51bGwsci5maWxsT3B0aW9ucz1udWxsLHIubWFya2VyT3B0aW9ucz1udWxsLHIubWFya2VyU2VsZWN0ZWRPcHRpb25zPW51bGwsci5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucz1udWxsLHIuZXJyb3JYT3B0aW9ucz1udWxsLHIuZXJyb3JZT3B0aW9ucz1udWxsLHIudGV4dE9wdGlvbnM9bnVsbCxyLnRleHRTZWxlY3RlZE9wdGlvbnM9bnVsbCxyLnRleHRVbnNlbGVjdGVkT3B0aW9ucz1udWxsLHIuc2VsZWN0QmF0Y2g9bnVsbCxyLnVuc2VsZWN0QmF0Y2g9bnVsbCxlLl9zY2VuZT1udWxsfSksci5kaXJ0eXx8bi5leHRlbmRGbGF0KHIsYSkscn19LHsiLi4vLi4vbGliIjo3MTd9XSwxMTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4vZWRpdF9zdHlsZSIpLnN0eWxlVGV4dFNlbGVjdGlvbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNkLGk9W10sbz1yWzBdLnRyYWNlLHM9clswXS50LGw9by5fbGVuZ3RoLGM9cy54LHU9cy55LGg9cy5fc2NlbmUsZj1zLmluZGV4O2lmKCFoKXJldHVybiBpO3ZhciBwPW4uaGFzVGV4dChvKSxkPW4uaGFzTWFya2VycyhvKSxnPSFkJiYhcDtpZighMCE9PW8udmlzaWJsZXx8ZylyZXR1cm4gaTt2YXIgdj1bXSxtPVtdO2lmKCExIT09ZSYmIWUuZGVnZW5lcmF0ZSlmb3IodmFyIHk9MDt5PGw7eSsrKWUuY29udGFpbnMoW3MueHB4W3ldLHMueXB4W3ldXSwhMSx5LHQpPyh2LnB1c2goeSksaS5wdXNoKHtwb2ludE51bWJlcjp5LHg6Y1t5XSx5OnVbeV19KSk6bS5wdXNoKHkpO2lmKGQpe3ZhciB4PWguc2NhdHRlcjJkO2lmKHYubGVuZ3RofHxtLmxlbmd0aCl7aWYoIWguc2VsZWN0QmF0Y2hbZl0ubGVuZ3RoJiYhaC51bnNlbGVjdEJhdGNoW2ZdLmxlbmd0aCl7dmFyIGI9bmV3IEFycmF5KGguY291bnQpO2JbZl09aC5tYXJrZXJVbnNlbGVjdGVkT3B0aW9uc1tmXSx4LnVwZGF0ZS5hcHBseSh4LGIpfX1lbHNle3ZhciBfPW5ldyBBcnJheShoLmNvdW50KTtfW2ZdPWgubWFya2VyT3B0aW9uc1tmXSx4LnVwZGF0ZS5hcHBseSh4LF8pfX1yZXR1cm4gaC5zZWxlY3RCYXRjaFtmXT12LGgudW5zZWxlY3RCYXRjaFtmXT1tLHAmJmEociksaX19LHsiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTE0NCwiLi9lZGl0X3N0eWxlIjoxMTc2fV0sMTE4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGk9dCgiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIiksbz10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL21hcGJveC9sYXlvdXRfYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGg9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGY9aS5saW5lLHA9aS5tYXJrZXI7ZS5leHBvcnRzPWgoe2xvbjppLmxvbixsYXQ6aS5sYXQsbW9kZTp1KHt9LG8ubW9kZSx7ZGZsdDoibWFya2VycyJ9KSx0ZXh0OnUoe30sby50ZXh0LHt9KSx0ZXh0dGVtcGxhdGU6YSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbImxhdCIsImxvbiIsInRleHQiXX0pLGhvdmVydGV4dDp1KHt9LG8uaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjpmLmNvbG9yLHdpZHRoOmYud2lkdGh9LGNvbm5lY3RnYXBzOm8uY29ubmVjdGdhcHMsbWFya2VyOnUoe3N5bWJvbDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITB9LG9wYWNpdHk6cC5vcGFjaXR5LHNpemU6cC5zaXplLHNpemVyZWY6cC5zaXplcmVmLHNpemVtaW46cC5zaXplbWluLHNpemVtb2RlOnAuc2l6ZW1vZGV9LGMoIm1hcmtlciIpKSxmaWxsOmkuZmlsbCxmaWxsY29sb3I6by5maWxsY29sb3IsdGV4dGZvbnQ6cy5sYXllcnMuc3ltYm9sLnRleHRmb250LHRleHRwb3NpdGlvbjpzLmxheWVycy5zeW1ib2wudGV4dHBvc2l0aW9uLGJlbG93Ont2YWxUeXBlOiJzdHJpbmcifSxzZWxlY3RlZDp7bWFya2VyOm8uc2VsZWN0ZWQubWFya2VyfSx1bnNlbGVjdGVkOnttYXJrZXI6by51bnNlbGVjdGVkLm1hcmtlcn0saG92ZXJpbmZvOnUoe30sbC5ob3ZlcmluZm8se2ZsYWdzOlsibG9uIiwibGF0IiwidGV4dCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6bigpfSwiY2FsYyIsIm5lc3RlZCIpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1OTksIi4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6NzQ4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4uLy4uL3Bsb3RzL21hcGJveC9sYXlvdXRfYXR0cmlidXRlcyI6ODIyLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NDEsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTEyMCwiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIjoxMTYxfV0sMTE4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLG89dCgiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLHU9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGg9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnZlcnRfdGV4dF9vcHRzIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWUscD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKS5ORVdMSU5FUyxkPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLkJSX1RBR19BTEw7ZnVuY3Rpb24gZygpe3JldHVybntnZW9qc29uOm8ubWFrZUJsYW5rKCksbGF5b3V0Ont2aXNpYmlsaXR5OiJub25lIn0scGFpbnQ6e319fWZ1bmN0aW9uIHYodCl7cmV0dXJuIGEuaXNBcnJheU9yVHlwZWRBcnJheSh0KT9mdW5jdGlvbih0KXtyZXR1cm4gdH06dD9mdW5jdGlvbigpe3JldHVybiB0fTptfWZ1bmN0aW9uIG0oKXtyZXR1cm4iIn1mdW5jdGlvbiB5KHQpe3JldHVybiB0WzBdPT09aX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpPWVbMF0udHJhY2UseD0hMD09PWkudmlzaWJsZSYmMCE9PWkuX2xlbmd0aCxiPSJub25lIiE9PWkuZmlsbCxfPXUuaGFzTGluZXMoaSksdz11Lmhhc01hcmtlcnMoaSksaz11Lmhhc1RleHQoaSksVD13JiYiY2lyY2xlIj09PWkubWFya2VyLnN5bWJvbCxNPXcmJiJjaXJjbGUiIT09aS5tYXJrZXIuc3ltYm9sLEE9ZygpLFM9ZygpLEU9ZygpLEw9ZygpLEM9e2ZpbGw6QSxsaW5lOlMsY2lyY2xlOkUsc3ltYm9sOkx9O2lmKCF4KXJldHVybiBDO2lmKChifHxfKSYmKHI9by5jYWxjVHJhY2VUb0xpbmVDb29yZHMoZSkpLGImJihBLmdlb2pzb249by5tYWtlUG9seWdvbihyKSxBLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixhLmV4dGVuZEZsYXQoQS5wYWludCx7ImZpbGwtY29sb3IiOmkuZmlsbGNvbG9yfSkpLF8mJihTLmdlb2pzb249by5tYWtlTGluZShyKSxTLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixhLmV4dGVuZEZsYXQoUy5wYWludCx7ImxpbmUtd2lkdGgiOmkubGluZS53aWR0aCwibGluZS1jb2xvciI6aS5saW5lLmNvbG9yLCJsaW5lLW9wYWNpdHkiOmkub3BhY2l0eX0pKSxUKXt2YXIgUD1mdW5jdGlvbih0KXt2YXIgZSxyLGksbyx1PXRbMF0udHJhY2UsaD11Lm1hcmtlcixmPXUuc2VsZWN0ZWRwb2ludHMscD1hLmlzQXJyYXlPclR5cGVkQXJyYXkoaC5jb2xvciksZD1hLmlzQXJyYXlPclR5cGVkQXJyYXkoaC5zaXplKSxnPWEuaXNBcnJheU9yVHlwZWRBcnJheShoLm9wYWNpdHkpO2Z1bmN0aW9uIHYodCl7cmV0dXJuIHUub3BhY2l0eSp0fXAmJihyPXMuaGFzQ29sb3JzY2FsZSh1LCJtYXJrZXIiKT9zLm1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZShoKTphLmlkZW50aXR5KTtkJiYoaT1jKHUpKTtnJiYobz1mdW5jdGlvbih0KXt2YXIgZT1uKHQpPythLmNvbnN0cmFpbih0LDAsMSk6MDtyZXR1cm4gdihlKX0pO3ZhciBtLHg9W107Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIGI9dFtlXSxfPWIubG9ubGF0O2lmKCF5KF8pKXt2YXIgdz17fTtyJiYody5tY2M9Yi5tY2M9cihiLm1jKSksaSYmKHcubXJjPWIubXJjPWkoYi5tcykpLG8mJih3Lm1vPW8oYi5tbykpLGYmJih3LnNlbGVjdGVkPWIuc2VsZWN0ZWR8fDApLHgucHVzaCh7dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpffSxwcm9wZXJ0aWVzOnd9KX19aWYoZilmb3IobT1sLm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnModSksZT0wO2U8eC5sZW5ndGg7ZSsrKXt2YXIgaz14W2VdLnByb3BlcnRpZXM7bS5zZWxlY3RlZE9wYWNpdHlGbiYmKGsubW89dihtLnNlbGVjdGVkT3BhY2l0eUZuKGspKSksbS5zZWxlY3RlZENvbG9yRm4mJihrLm1jYz1tLnNlbGVjdGVkQ29sb3JGbihrKSksbS5zZWxlY3RlZFNpemVGbiYmKGsubXJjPW0uc2VsZWN0ZWRTaXplRm4oaykpfXJldHVybntnZW9qc29uOnt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6eH0sbWNjOnB8fG0mJm0uc2VsZWN0ZWRDb2xvckZuP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1jYyJ9OmguY29sb3IsbXJjOmR8fG0mJm0uc2VsZWN0ZWRTaXplRm4/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibXJjIn06KFQ9aC5zaXplLFQvMiksbW86Z3x8bSYmbS5zZWxlY3RlZE9wYWNpdHlGbj97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbyJ9OnYoaC5vcGFjaXR5KX07dmFyIFR9KGUpO0UuZ2VvanNvbj1QLmdlb2pzb24sRS5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIsYS5leHRlbmRGbGF0KEUucGFpbnQseyJjaXJjbGUtY29sb3IiOlAubWNjLCJjaXJjbGUtcmFkaXVzIjpQLm1yYywiY2lyY2xlLW9wYWNpdHkiOlAubW99KX1pZigoTXx8aykmJihMLmdlb2pzb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5fZnVsbExheW91dCxuPXRbMF0udHJhY2UsaT0obi5tYXJrZXJ8fHt9KS5zeW1ib2wsbz0iY2lyY2xlIiE9PWk/dihpKTptLHM9dS5oYXNUZXh0KG4pP3Yobi50ZXh0KTptLGw9W10sYz0wO2M8dC5sZW5ndGg7YysrKXt2YXIgaD10W2NdO2lmKCF5KGgubG9ubGF0KSl7dmFyIGcseD1uLnRleHR0ZW1wbGF0ZTtpZih4KXt2YXIgYj1BcnJheS5pc0FycmF5KHgpP3hbY118fCIiOngsXz1uLl9tb2R1bGUuZm9ybWF0TGFiZWxzKGgsbixyKSx3PXt9O2YodyxuLGguaSk7dmFyIGs9bi5fbWV0YXx8e307Zz1hLnRleHR0ZW1wbGF0ZVN0cmluZyhiLF8sci5fZDNsb2NhbGUsdyxoLGspfWVsc2UgZz1zKGgudHgpO2cmJihnPWcucmVwbGFjZShwLCIiKS5yZXBsYWNlKGQsIlxuIikpLGwucHVzaCh7dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpoLmxvbmxhdH0scHJvcGVydGllczp7c3ltYm9sOm8oaC5teCksdGV4dDpnfX0pfX1yZXR1cm57dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOmx9fShlLHQpLGEuZXh0ZW5kRmxhdChMLmxheW91dCx7dmlzaWJpbGl0eToidmlzaWJsZSIsImljb24taW1hZ2UiOiJ7c3ltYm9sfS0xNSIsInRleHQtZmllbGQiOiJ7dGV4dH0ifSksTSYmKGEuZXh0ZW5kRmxhdChMLmxheW91dCx7Imljb24tc2l6ZSI6aS5tYXJrZXIuc2l6ZS8xMH0pLGEuZXh0ZW5kRmxhdChMLnBhaW50LHsiaWNvbi1vcGFjaXR5IjppLm9wYWNpdHkqaS5tYXJrZXIub3BhY2l0eSwiaWNvbi1jb2xvciI6aS5tYXJrZXIuY29sb3J9KSksaykpe3ZhciBPPShpLm1hcmtlcnx8e30pLnNpemUsej1oKGkudGV4dHBvc2l0aW9uLE8pO2EuZXh0ZW5kRmxhdChMLmxheW91dCx7InRleHQtc2l6ZSI6aS50ZXh0Zm9udC5zaXplLCJ0ZXh0LWFuY2hvciI6ei5hbmNob3IsInRleHQtb2Zmc2V0Ijp6Lm9mZnNldH0pLGEuZXh0ZW5kRmxhdChMLnBhaW50LHsidGV4dC1jb2xvciI6aS50ZXh0Zm9udC5jb2xvciwidGV4dC1vcGFjaXR5IjppLm9wYWNpdHl9KX1yZXR1cm4gQ319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MDQsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjYyNywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiOjcxMiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NDEsIi4uLy4uL3Bsb3RzL21hcGJveC9jb252ZXJ0X3RleHRfb3B0cyI6ODE5LCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTEzNywiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTE0NCwiZmFzdC1pc251bWVyaWMiOjIyOH1dLDExODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksaT10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLG89dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gaChyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGEpfWlmKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKCJsb24iKXx8W10sYT1yKCJsYXQiKXx8W10saT1NYXRoLm1pbihuLmxlbmd0aCxhLmxlbmd0aCk7cmV0dXJuIGUuX2xlbmd0aD1pLGl9KDAsZSxoKSl7aWYoaCgidGV4dCIpLGgoInRleHR0ZW1wbGF0ZSIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVydGVtcGxhdGUiKSxoKCJtb2RlIiksaCgiYmVsb3ciKSxhLmhhc0xpbmVzKGUpJiYobyh0LGUscix1LGgse25vRGFzaDohMH0pLGgoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSl7aSh0LGUscix1LGgse25vTGluZTohMH0pO3ZhciBmPWUubWFya2VyOyJjaXJjbGUiIT09Zi5zeW1ib2wmJihuLmlzQXJyYXlPclR5cGVkQXJyYXkoZi5zaXplKSYmKGYuc2l6ZT1mLnNpemVbMF0pLG4uaXNBcnJheU9yVHlwZWRBcnJheShmLmNvbG9yKSYmKGYuY29sb3I9Zi5jb2xvclswXSkpfWEuaGFzVGV4dChlKSYmcyh0LGUsdSxoLHtub1NlbGVjdDohMH0pLGgoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJmwodCxlLHIsaCksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsaCl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTEyOCwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMTMzLCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTEzOSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTE0NCwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMTQ1LCIuL2F0dHJpYnV0ZXMiOjExODR9XSwxMTg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmxvbj1lLmxvbix0LmxhdD1lLmxhdCx0fX0se31dLDExODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXt9LGk9cltlLnN1YnBsb3RdLl9zdWJwbG90Lm1vY2tBeGlzLG89dC5sb25sYXQ7cmV0dXJuIGEubG9uTGFiZWw9bi50aWNrVGV4dChpLGkuYzJsKG9bMF0pLCEwKS50ZXh0LGEubGF0TGFiZWw9bi50aWNrVGV4dChpLGkuYzJsKG9bMV0pLCEwKS50ZXh0LGF9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjV9XSwxMTg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKSxvPWEuZmlsbFRleHQscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGw9dC5jZCxjPWxbMF0udHJhY2UsdT10LnhhLGg9dC55YSxmPXQuc3VicGxvdCxwPTM2MCooZT49MD9NYXRoLmZsb29yKChlKzE4MCkvMzYwKTpNYXRoLmNlaWwoKGUtMTgwKS8zNjApKSxkPWUtcDtpZihuLmdldENsb3Nlc3QobCxmdW5jdGlvbih0KXt2YXIgZT10LmxvbmxhdDtpZihlWzBdPT09cylyZXR1cm4gMS8wO3ZhciBuPWEubW9kSGFsZihlWzBdLDM2MCksaT1lWzFdLG89Zi5wcm9qZWN0KFtuLGldKSxsPW8ueC11LmMycChbZCxpXSksYz1vLnktaC5jMnAoW24scl0pLHA9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChsKmwrYypjKS1wLDEtMy9wKX0sdCksITEhPT10LmluZGV4KXt2YXIgZz1sW3QuaW5kZXhdLHY9Zy5sb25sYXQsbT1bYS5tb2RIYWxmKHZbMF0sMzYwKStwLHZbMV1dLHk9dS5jMnAobSkseD1oLmMycChtKSxiPWcubXJjfHwxO3QueDA9eS1iLHQueDE9eStiLHQueTA9eC1iLHQueTE9eCtiO3ZhciBfPXt9O19bYy5zdWJwbG90XT17X3N1YnBsb3Q6Zn07dmFyIHc9Yy5fbW9kdWxlLmZvcm1hdExhYmVscyhnLGMsXyk7cmV0dXJuIHQubG9uTGFiZWw9dy5sb25MYWJlbCx0LmxhdExhYmVsPXcubGF0TGFiZWwsdC5jb2xvcj1pKGMsZyksdC5leHRyYVRleHQ9ZnVuY3Rpb24odCxlLHIpe2lmKHQuaG92ZXJ0ZW1wbGF0ZSlyZXR1cm47dmFyIG49KGUuaGl8fHQuaG92ZXJpbmZvKS5zcGxpdCgiKyIpLGE9LTEhPT1uLmluZGV4T2YoImFsbCIpLGk9LTEhPT1uLmluZGV4T2YoImxvbiIpLHM9LTEhPT1uLmluZGV4T2YoImxhdCIpLGw9ZS5sb25sYXQsYz1bXTtmdW5jdGlvbiB1KHQpe3JldHVybiB0KyJceGIwIn1hfHxpJiZzP2MucHVzaCgiKCIrdShsWzBdKSsiLCAiK3UobFsxXSkrIikiKTppP2MucHVzaChyLmxvbit1KGxbMF0pKTpzJiZjLnB1c2goci5sYXQrdShsWzFdKSk7KGF8fC0xIT09bi5pbmRleE9mKCJ0ZXh0IikpJiZvKGUsdCxjKTtyZXR1cm4gYy5qb2luKCI8YnI+Iil9KGMsZyxsWzBdLnQubGFiZWxzKSx0LmhvdmVydGVtcGxhdGU9Yy5ob3ZlcnRlbXBsYXRlLFt0XX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjYzMCwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzLCIuLi8uLi9saWIiOjcxNywiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjExMzB9XSwxMTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuLi9zY2F0dGVyZ2VvL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0Iiksc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUpe2UmJmVbMF0udHJhY2UuX2dsVHJhY2UudXBkYXRlKGUpfSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcm1hcGJveCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvbWFwYm94IiksY2F0ZWdvcmllczpbIm1hcGJveCIsImdsIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9tYXBib3giOjgyMCwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjExMzgsIi4uL3NjYXR0ZXJnZW8vY2FsYyI6MTE2MiwiLi9hdHRyaWJ1dGVzIjoxMTg0LCIuL2RlZmF1bHRzIjoxMTg2LCIuL2V2ZW50X2RhdGEiOjExODcsIi4vZm9ybWF0X2xhYmVscyI6MTE4OCwiLi9ob3ZlciI6MTE4OSwiLi9wbG90IjoxMTkxLCIuL3NlbGVjdCI6MTE5Mn1dLDExOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb252ZXJ0IiksYT10KCIuLi8uLi9wbG90cy9tYXBib3gvY29uc3RhbnRzIikudHJhY2VMYXllclByZWZpeCxpPVsiZmlsbCIsImxpbmUiLCJjaXJjbGUiLCJzeW1ib2wiXTtmdW5jdGlvbiBvKHQsZSl7dGhpcy50eXBlPSJzY2F0dGVybWFwYm94Iix0aGlzLnN1YnBsb3Q9dCx0aGlzLnVpZD1lLHRoaXMuc291cmNlSWRzPXtmaWxsOiJzb3VyY2UtIitlKyItZmlsbCIsbGluZToic291cmNlLSIrZSsiLWxpbmUiLGNpcmNsZToic291cmNlLSIrZSsiLWNpcmNsZSIsc3ltYm9sOiJzb3VyY2UtIitlKyItc3ltYm9sIn0sdGhpcy5sYXllcklkcz17ZmlsbDphK2UrIi1maWxsIixsaW5lOmErZSsiLWxpbmUiLGNpcmNsZTphK2UrIi1jaXJjbGUiLHN5bWJvbDphK2UrIi1zeW1ib2wifSx0aGlzLmJlbG93PW51bGx9dmFyIHM9by5wcm90b3R5cGU7cy5hZGRTb3VyY2U9ZnVuY3Rpb24odCxlKXt0aGlzLnN1YnBsb3QubWFwLmFkZFNvdXJjZSh0aGlzLnNvdXJjZUlkc1t0XSx7dHlwZToiZ2VvanNvbiIsZGF0YTplLmdlb2pzb259KX0scy5zZXRTb3VyY2VEYXRhPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdWJwbG90Lm1hcC5nZXRTb3VyY2UodGhpcy5zb3VyY2VJZHNbdF0pLnNldERhdGEoZS5nZW9qc29uKX0scy5hZGRMYXllcj1mdW5jdGlvbih0LGUscil7dGhpcy5zdWJwbG90LmFkZExheWVyKHt0eXBlOnQsaWQ6dGhpcy5sYXllcklkc1t0XSxzb3VyY2U6dGhpcy5zb3VyY2VJZHNbdF0sbGF5b3V0OmUubGF5b3V0LHBhaW50OmUucGFpbnR9LHIpfSxzLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLGEsbz10aGlzLnN1YnBsb3Qscz1vLm1hcCxsPW4oby5nZCx0KSxjPW8uYmVsb3dMb29rdXBbInRyYWNlLSIrdGhpcy51aWRdO2lmKGMhPT10aGlzLmJlbG93KXtmb3IoZT1pLmxlbmd0aC0xO2U+PTA7ZS0tKXI9aVtlXSxzLnJlbW92ZUxheWVyKHRoaXMubGF5ZXJJZHNbcl0pO2ZvcihlPTA7ZTxpLmxlbmd0aDtlKyspYT1sW3I9aVtlXV0sdGhpcy5hZGRMYXllcihyLGEsYyk7dGhpcy5iZWxvdz1jfWZvcihlPTA7ZTxpLmxlbmd0aDtlKyspYT1sW3I9aVtlXV0sby5zZXRPcHRpb25zKHRoaXMubGF5ZXJJZHNbcl0sInNldExheW91dFByb3BlcnR5IixhLmxheW91dCksInZpc2libGUiPT09YS5sYXlvdXQudmlzaWJpbGl0eSYmKHRoaXMuc2V0U291cmNlRGF0YShyLGEpLG8uc2V0T3B0aW9ucyh0aGlzLmxheWVySWRzW3JdLCJzZXRQYWludFByb3BlcnR5IixhLnBhaW50KSk7dFswXS50cmFjZS5fZ2xUcmFjZT10aGlzfSxzLmRpc3Bvc2U9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5zdWJwbG90Lm1hcCxlPWkubGVuZ3RoLTE7ZT49MDtlLS0pe3ZhciByPWlbZV07dC5yZW1vdmVMYXllcih0aGlzLmxheWVySWRzW3JdKSx0LnJlbW92ZVNvdXJjZSh0aGlzLnNvdXJjZUlkc1tyXSl9fSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZVswXS50cmFjZSxhPW5ldyBvKHQsci51aWQpLHM9bih0LmdkLGUpLGw9YS5iZWxvdz10LmJlbG93TG9va3VwWyJ0cmFjZS0iK3IudWlkXSxjPTA7YzxpLmxlbmd0aDtjKyspe3ZhciB1PWlbY10saD1zW3VdO2EuYWRkU291cmNlKHUsaCksYS5hZGRMYXllcih1LGgsbCl9cmV0dXJuIGVbMF0udHJhY2UuX2dsVHJhY2U9YSxhfX0seyIuLi8uLi9wbG90cy9tYXBib3gvY29uc3RhbnRzIjo4MTgsIi4vY29udmVydCI6MTE4NX1dLDExOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG89dC5jZCxzPXQueGF4aXMsbD10LnlheGlzLGM9W10sdT1vWzBdLnRyYWNlO2lmKCFhLmhhc01hcmtlcnModSkpcmV0dXJuW107aWYoITE9PT1lKWZvcihyPTA7cjxvLmxlbmd0aDtyKyspb1tyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyl7dmFyIGg9b1tyXSxmPWgubG9ubGF0O2lmKGZbMF0hPT1pKXt2YXIgcD1bbi5tb2RIYWxmKGZbMF0sMzYwKSxmWzFdXSxkPVtzLmMycChwKSxsLmMycChwKV07ZS5jb250YWlucyhkLG51bGwscix0KT8oYy5wdXNoKHtwb2ludE51bWJlcjpyLGxvbjpmWzBdLGxhdDpmWzFdfSksaC5zZWxlY3RlZD0xKTpoLnNlbGVjdGVkPTB9fXJldHVybiBjfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2OTMsIi4uLy4uL2xpYiI6NzE3LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMTQ0fV0sMTE5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxsPW8ubGluZTtlLmV4cG9ydHM9e21vZGU6by5tb2RlLHI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sdGhldGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0scjA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZHI6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sdGhldGEwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGR0aGV0YTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHRoZXRhdW5pdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmFkaWFucyIsImRlZ3JlZXMiLCJncmFkaWFucyJdLGRmbHQ6ImRlZ3JlZXMiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sdGV4dDpvLnRleHQsdGV4dHRlbXBsYXRlOmEoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJyIiwidGhldGEiLCJ0ZXh0Il19KSxob3ZlcnRleHQ6by5ob3ZlcnRleHQsbGluZTp7Y29sb3I6bC5jb2xvcix3aWR0aDpsLndpZHRoLGRhc2g6bC5kYXNoLHNoYXBlOmkoe30sbC5zaGFwZSx7dmFsdWVzOlsibGluZWFyIiwic3BsaW5lIl19KSxzbW9vdGhpbmc6bC5zbW9vdGhpbmcsZWRpdFR5cGU6ImNhbGMifSxjb25uZWN0Z2FwczpvLmNvbm5lY3RnYXBzLG1hcmtlcjpvLm1hcmtlcixjbGlwb25heGlzOmkoe30sby5jbGlwb25heGlzLHtkZmx0OiExfSksdGV4dHBvc2l0aW9uOm8udGV4dHBvc2l0aW9uLHRleHRmb250Om8udGV4dGZvbnQsZmlsbDppKHt9LG8uZmlsbCx7dmFsdWVzOlsibm9uZSIsInRvc2VsZiIsInRvbmV4dCJdLGRmbHQ6Im5vbmUifSksZmlsbGNvbG9yOm8uZmlsbGNvbG9yLGhvdmVyaW5mbzppKHt9LHMuaG92ZXJpbmZvLHtmbGFnczpbInIiLCJ0aGV0YSIsInRleHQiLCJuYW1lIl19KSxob3Zlcm9uOm8uaG92ZXJvbixob3ZlcnRlbXBsYXRlOm4oKSxzZWxlY3RlZDpvLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6by51bnNlbGVjdGVkfX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc2MiwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODQxLCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExMjB9XSwxMTk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIikscz10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLGw9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLGM9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQsdT1lLnN1YnBsb3QsaD1yW3VdLnJhZGlhbGF4aXMsZj1yW3VdLmFuZ3VsYXJheGlzLHA9aC5tYWtlQ2FsY2RhdGEoZSwiciIpLGQ9Zi5tYWtlQ2FsY2RhdGEoZSwidGhldGEiKSxnPWUuX2xlbmd0aCx2PW5ldyBBcnJheShnKSxtPTA7bTxnO20rKyl7dmFyIHk9cFttXSx4PWRbbV0sYj12W21dPXt9O24oeSkmJm4oeCk/KGIucj15LGIudGhldGE9eCk6Yi5yPWF9dmFyIF89YyhlLGcpO3JldHVybiBlLl9leHRyZW1lcy54PWkuZmluZEV4dHJlbWVzKGgscCx7cHBhZDpffSksbyh0LGUpLHModixlKSxsKHYsZSksdn19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTExOSwiLi4vc2NhdHRlci9jYWxjIjoxMTIxLCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTIyLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTEyMywiZmFzdC1pc251bWVyaWMiOjIyOH1dLDExOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksaT10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLG89dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIikuUFRTX0xJTkVTT05MWSxoPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIGYodCxlLHIsbil7dmFyIGEsaT1uKCJyIiksbz1uKCJ0aGV0YSIpO2lmKGkpbz9hPU1hdGgubWluKGkubGVuZ3RoLG8ubGVuZ3RoKTooYT1pLmxlbmd0aCxuKCJ0aGV0YTAiKSxuKCJkdGhldGEiKSk7ZWxzZXtpZighbylyZXR1cm4gMDthPWUudGhldGEubGVuZ3RoLG4oInIwIiksbigiZHIiKX1yZXR1cm4gZS5fbGVuZ3RoPWEsYX1lLmV4cG9ydHM9e2hhbmRsZVJUaGV0YURlZmF1bHRzOmYsc3VwcGx5RGVmYXVsdHM6ZnVuY3Rpb24odCxlLHIscCl7ZnVuY3Rpb24gZChyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaCxyLGEpfXZhciBnPWYoMCxlLDAsZCk7aWYoZyl7ZCgidGhldGF1bml0IiksZCgibW9kZSIsZzx1PyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxkKCJ0ZXh0IiksZCgiaG92ZXJ0ZXh0IiksImZpbGxzIiE9PWUuaG92ZXJvbiYmZCgiaG92ZXJ0ZW1wbGF0ZSIpLGEuaGFzTGluZXMoZSkmJihvKHQsZSxyLHAsZCkscyh0LGUsZCksZCgiY29ubmVjdGdhcHMiKSksYS5oYXNNYXJrZXJzKGUpJiZpKHQsZSxyLHAsZCx7Z3JhZGllbnQ6ITB9KSxhLmhhc1RleHQoZSkmJihkKCJ0ZXh0dGVtcGxhdGUiKSxsKHQsZSxwLGQpKTt2YXIgdj1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYoZCgiY2xpcG9uYXhpcyIpLGQoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSx2LnB1c2goInBvaW50cyIpKSxkKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiYoYyh0LGUscixkKSxhLmhhc0xpbmVzKGUpfHxzKHQsZSxkKSksInRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHx2LnB1c2goImZpbGxzIiksZCgiaG92ZXJvbiIsdi5qb2luKCIrIil8fCJwb2ludHMiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxkKX1lbHNlIGUudmlzaWJsZT0hMX19fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6MTEyNCwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjExMjgsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTEzMywiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIjoxMTM1LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTEzOSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTE0NCwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMTQ1LCIuL2F0dHJpYnV0ZXMiOjExOTN9XSwxMTk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLG8scz17fSxsPXJbZS5zdWJwbG90XS5fc3VicGxvdDtsPyhpPWwucmFkaWFsQXhpcyxvPWwuYW5ndWxhckF4aXMpOihpPShsPXJbZS5zdWJwbG90XSkucmFkaWFsYXhpcyxvPWwuYW5ndWxhcmF4aXMpO3ZhciBjPWkuYzJsKHQucik7cy5yTGFiZWw9YS50aWNrVGV4dChpLGMsITApLnRleHQ7dmFyIHU9ImRlZ3JlZXMiPT09by50aGV0YXVuaXQ/bi5yYWQyZGVnKHQudGhldGEpOnQudGhldGE7cmV0dXJuIHMudGhldGFMYWJlbD1hLnRpY2tUZXh0KG8sdSwhMCkudGV4dCxzfX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NX1dLDExOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9ob3ZlciIpO2Z1bmN0aW9uIGEodCxlLHIsbil7dmFyIGE9ci5yYWRpYWxBeGlzLGk9ci5hbmd1bGFyQXhpczthLl9ob3ZlcnRpdGxlPSJyIixpLl9ob3ZlcnRpdGxlPSJcdTAzYjgiO3ZhciBvPXt9O29bZS5zdWJwbG90XT17X3N1YnBsb3Q6cn07dmFyIHM9ZS5fbW9kdWxlLmZvcm1hdExhYmVscyh0LGUsbyk7bi5yTGFiZWw9cy5yTGFiZWwsbi50aGV0YUxhYmVsPXMudGhldGFMYWJlbDt2YXIgbD10LmhpfHxlLmhvdmVyaW5mbyxjPVtdO2Z1bmN0aW9uIHUodCxlKXtjLnB1c2godC5faG92ZXJ0aXRsZSsiOiAiK2UpfWlmKCFlLmhvdmVydGVtcGxhdGUpe3ZhciBoPWwuc3BsaXQoIisiKTstMSE9PWguaW5kZXhPZigiYWxsIikmJihoPVsiciIsInRoZXRhIiwidGV4dCJdKSwtMSE9PWguaW5kZXhPZigiciIpJiZ1KGEsbi5yTGFiZWwpLC0xIT09aC5pbmRleE9mKCJ0aGV0YSIpJiZ1KGksbi50aGV0YUxhYmVsKSwtMSE9PWguaW5kZXhPZigidGV4dCIpJiZuLnRleHQmJihjLnB1c2gobi50ZXh0KSxkZWxldGUgbi50ZXh0KSxuLmV4dHJhVGV4dD1jLmpvaW4oIjxicj4iKX19ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixpKXt2YXIgbz1uKHQsZSxyLGkpO2lmKG8mJiExIT09b1swXS5pbmRleCl7dmFyIHM9b1swXTtpZih2b2lkIDA9PT1zLmluZGV4KXJldHVybiBvO3ZhciBsPXQuc3VicGxvdCxjPXMuY2Rbcy5pbmRleF0sdT1zLnRyYWNlO2lmKGwuaXNQdEluc2lkZShjKSlyZXR1cm4gcy54TGFiZWxWYWw9dm9pZCAwLHMueUxhYmVsVmFsPXZvaWQgMCxhKGMsdSxsLHMpLHMuaG92ZXJ0ZW1wbGF0ZT11LmhvdmVydGVtcGxhdGUsb319LG1ha2VIb3ZlclBvaW50VGV4dDphfX0seyIuLi9zY2F0dGVyL2hvdmVyIjoxMTMxfV0sMTE5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVycG9sYXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3BvbGFyIiksY2F0ZWdvcmllczpbInBvbGFyIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuL2Zvcm1hdF9sYWJlbHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi4vc2NhdHRlci9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9zY2F0dGVyL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3BvbGFyIjo4MjksIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMTM4LCIuLi9zY2F0dGVyL3NlbGVjdCI6MTE0MSwiLi4vc2NhdHRlci9zdHlsZSI6MTE0MywiLi9hdHRyaWJ1dGVzIjoxMTkzLCIuL2NhbGMiOjExOTQsIi4vZGVmYXVsdHMiOjExOTUsIi4vZm9ybWF0X2xhYmVscyI6MTE5NiwiLi9ob3ZlciI6MTE5NywiLi9wbG90IjoxMTk5fV0sMTE5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL3Bsb3QiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGk9ZS5sYXllcnMuZnJvbnRwbG90LnNlbGVjdCgiZy5zY2F0dGVybGF5ZXIiKSxvPXt4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMscGxvdDplLmZyYW1ld29yayxsYXllckNsaXBJZDplLl9oYXNDbGlwT25BeGlzRmFsc2U/ZS5jbGlwSWRzLmZvclRyYWNlczpudWxsfSxzPWUucmFkaWFsQXhpcyxsPWUuYW5ndWxhckF4aXMsYz0wO2M8ci5sZW5ndGg7YysrKWZvcih2YXIgdT1yW2NdLGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGY9dVtoXSxwPWYucjtpZihwPT09YSlmLng9Zi55PWE7ZWxzZXt2YXIgZD1zLmMyZyhwKSxnPWwuYzJnKGYudGhldGEpO2YueD1kKk1hdGguY29zKGcpLGYueT1kKk1hdGguc2luKGcpfX1uKHQsbyxyLGkpfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2OTMsIi4uL3NjYXR0ZXIvcGxvdCI6MTE0MH1dLDEyMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlcnBvbGFyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnM7ZS5leHBvcnRzPXttb2RlOm4ubW9kZSxyOm4ucix0aGV0YTpuLnRoZXRhLHIwOm4ucjAsZHI6bi5kcix0aGV0YTA6bi50aGV0YTAsZHRoZXRhOm4uZHRoZXRhLHRoZXRhdW5pdDpuLnRoZXRhdW5pdCx0ZXh0Om4udGV4dCx0ZXh0dGVtcGxhdGU6aSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpbInIiLCJ0aGV0YSIsInRleHQiXX0pLGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSxsaW5lOmEubGluZSxjb25uZWN0Z2FwczphLmNvbm5lY3RnYXBzLG1hcmtlcjphLm1hcmtlcixmaWxsOmEuZmlsbCxmaWxsY29sb3I6YS5maWxsY29sb3IsdGV4dHBvc2l0aW9uOmEudGV4dHBvc2l0aW9uLHRleHRmb250OmEudGV4dGZvbnQsaG92ZXJpbmZvOm4uaG92ZXJpbmZvLHNlbGVjdGVkOm4uc2VsZWN0ZWQsdW5zZWxlY3RlZDpuLnVuc2VsZWN0ZWR9fSx7Ii4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg0MSwiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiOjExNzEsIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIjoxMTkzfV0sMTIwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGE9dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY01hcmtlclNpemUsaT10KCIuLi9zY2F0dGVyZ2wvY29udmVydCIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPXQoIi4uL3NjYXR0ZXJnbC9jb25zdGFudHMiKS5UT09fTUFOWV9QT0lOVFM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxsPWUuc3VicGxvdCxjPXJbbF0ucmFkaWFsYXhpcyx1PXJbbF0uYW5ndWxhcmF4aXMsaD1lLl9yPWMubWFrZUNhbGNkYXRhKGUsInIiKSxmPWUuX3RoZXRhPXUubWFrZUNhbGNkYXRhKGUsInRoZXRhIikscD1lLl9sZW5ndGgsZD17fTtwPGgubGVuZ3RoJiYoaD1oLnNsaWNlKDAscCkpLHA8Zi5sZW5ndGgmJihmPWYuc2xpY2UoMCxwKSksZC5yPWgsZC50aGV0YT1mLG4odCxlKTt2YXIgZyx2PWQub3B0cz1pLnN0eWxlKHQsZSk7cmV0dXJuIHA8cz9nPWEoZSxwKTp2Lm1hcmtlciYmKGc9Mioodi5tYXJrZXIuc2l6ZUF2Z3x8TWF0aC5tYXgodi5tYXJrZXIuc2l6ZSwzKSkpLGUuX2V4dHJlbWVzLng9by5maW5kRXh0cmVtZXMoYyxoLHtwcGFkOmd9KSxbe3g6ITEseTohMSx0OmQsdHJhY2U6ZX1dfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi9zY2F0dGVyL2NhbGMiOjExMjEsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMTIzLCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIjoxMTczLCIuLi9zY2F0dGVyZ2wvY29udmVydCI6MTE3NH1dLDEyMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksaT10KCIuLi9zY2F0dGVycG9sYXIvZGVmYXVsdHMiKS5oYW5kbGVSVGhldGFEZWZhdWx0cyxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLGM9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIikuUFRTX0xJTkVTT05MWSxoPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBwKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxoLHIsYSl9dmFyIGQ9aSh0LGUsZixwKTtkPyhwKCJ0aGV0YXVuaXQiKSxwKCJtb2RlIixkPHU/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyIpLHAoInRleHQiKSxwKCJob3ZlcnRleHQiKSwiZmlsbHMiIT09ZS5ob3Zlcm9uJiZwKCJob3ZlcnRlbXBsYXRlIiksYS5oYXNMaW5lcyhlKSYmKHModCxlLHIsZixwKSxwKCJjb25uZWN0Z2FwcyIpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsZixwKSxhLmhhc1RleHQoZSkmJihwKCJ0ZXh0dGVtcGxhdGUiKSxsKHQsZSxmLHApKSxwKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZjKHQsZSxyLHApLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6MTEyNCwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjExMjgsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTEzMywiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjExMzksIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjExNDQsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTE0NSwiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIjoxMTk1LCIuL2F0dHJpYnV0ZXMiOjEyMDB9XSwxMjAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJwb2xhci9mb3JtYXRfbGFiZWxzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10Lmk7cmV0dXJuInIiaW4gdHx8KHQucj1lLl9yW2FdKSwidGhldGEiaW4gdHx8KHQudGhldGE9ZS5fdGhldGFbYV0pLG4odCxlLHIpfX0seyIuLi9zY2F0dGVycG9sYXIvZm9ybWF0X2xhYmVscyI6MTE5Nn1dLDEyMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlcmdsL2hvdmVyIiksYT10KCIuLi9zY2F0dGVycG9sYXIvaG92ZXIiKS5tYWtlSG92ZXJQb2ludFRleHQ7ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixpKXt2YXIgbz10LmNkWzBdLnQscz1vLnIsbD1vLnRoZXRhLGM9bi5ob3ZlclBvaW50cyh0LGUscixpKTtpZihjJiYhMSE9PWNbMF0uaW5kZXgpe3ZhciB1PWNbMF07aWYodm9pZCAwPT09dS5pbmRleClyZXR1cm4gYzt2YXIgaD10LnN1YnBsb3QsZj11LmNkW3UuaW5kZXhdLHA9dS50cmFjZTtpZihmLnI9c1t1LmluZGV4XSxmLnRoZXRhPWxbdS5pbmRleF0saC5pc1B0SW5zaWRlKGYpKXJldHVybiB1LnhMYWJlbFZhbD12b2lkIDAsdS55TGFiZWxWYWw9dm9pZCAwLGEoZixwLGgsdSksY319fX0seyIuLi9zY2F0dGVyZ2wvaG92ZXIiOjExNzksIi4uL3NjYXR0ZXJwb2xhci9ob3ZlciI6MTE5N31dLDEyMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcnBvbGFyZ2wiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3BvbGFyIiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsInBvbGFyIiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuL2Zvcm1hdF9sYWJlbHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9zY2F0dGVyZ2wvc2VsZWN0IiksbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvcG9sYXIiOjgyOSwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjExMzgsIi4uL3NjYXR0ZXJnbC9zZWxlY3QiOjExODMsIi4vYXR0cmlidXRlcyI6MTIwMCwiLi9jYWxjIjoxMjAxLCIuL2RlZmF1bHRzIjoxMjAyLCIuL2Zvcm1hdF9sYWJlbHMiOjEyMDMsIi4vaG92ZXIiOjEyMDQsIi4vcGxvdCI6MTIwNn1dLDEyMDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicG9pbnQtY2x1c3RlciIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uL3NjYXR0ZXJnbC9wbG90Iiksbz10KCIuLi9zY2F0dGVyZ2wvc2NlbmVfdXBkYXRlIikscz10KCIuLi9zY2F0dGVyZ2wvY29udmVydCIpLGw9dCgiLi4vLi4vbGliIiksYz10KCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpe3ZhciB1PWUucmFkaWFsQXhpcyxoPWUuYW5ndWxhckF4aXMsZj1vKHQsZSk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihyKXtpZihyJiZyWzBdJiZyWzBdLnRyYWNlKXt2YXIgaSxvPXJbMF0scD1vLnRyYWNlLGQ9by50LGc9cC5fbGVuZ3RoLHY9ZC5yLG09ZC50aGV0YSx5PWQub3B0cyx4PXYuc2xpY2UoKSxiPW0uc2xpY2UoKTtmb3IoaT0wO2k8di5sZW5ndGg7aSsrKWUuaXNQdEluc2lkZSh7cjp2W2ldLHRoZXRhOm1baV19KXx8KHhbaV09TmFOLGJbaV09TmFOKTt2YXIgXz1uZXcgQXJyYXkoMipnKSx3PUFycmF5KGcpLGs9QXJyYXkoZyk7Zm9yKGk9MDtpPGc7aSsrKXt2YXIgVCxNLEE9eFtpXTtpZihhKEEpKXt2YXIgUz11LmMyZyhBKSxFPWguYzJnKGJbaV0scC50aGV0YXVuaXQpO1Q9UypNYXRoLmNvcyhFKSxNPVMqTWF0aC5zaW4oRSl9ZWxzZSBUPU09TmFOO3dbaV09X1syKmldPVQsa1tpXT1fWzIqaSsxXT1NfWQudHJlZT1uKF8pLHkubWFya2VyJiZnPj1jJiYoeS5tYXJrZXIuY2x1c3Rlcj1kLnRyZWUpLHkubWFya2VyJiYoeS5tYXJrZXJTZWwucG9zaXRpb25zPXkubWFya2VyVW5zZWwucG9zaXRpb25zPXkubWFya2VyLnBvc2l0aW9ucz1fKSx5LmxpbmUmJl8ubGVuZ3RoPjEmJmwuZXh0ZW5kRmxhdCh5LmxpbmUscy5saW5lUG9zaXRpb25zKHQscCxfKSkseS50ZXh0JiYobC5leHRlbmRGbGF0KHkudGV4dCx7cG9zaXRpb25zOl99LHMudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXIpKSxsLmV4dGVuZEZsYXQoeS50ZXh0U2VsLHtwb3NpdGlvbnM6X30scy50ZXh0UG9zaXRpb24odCxwLHkudGV4dCx5Lm1hcmtlclNlbCkpLGwuZXh0ZW5kRmxhdCh5LnRleHRVbnNlbCx7cG9zaXRpb25zOl99LHMudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXJVbnNlbCkpKSx5LmZpbGwmJiFmLmZpbGwyZCYmKGYuZmlsbDJkPSEwKSx5Lm1hcmtlciYmIWYuc2NhdHRlcjJkJiYoZi5zY2F0dGVyMmQ9ITApLHkubGluZSYmIWYubGluZTJkJiYoZi5saW5lMmQ9ITApLHkudGV4dCYmIWYuZ2xUZXh0JiYoZi5nbFRleHQ9ITApLGYubGluZU9wdGlvbnMucHVzaCh5LmxpbmUpLGYuZmlsbE9wdGlvbnMucHVzaCh5LmZpbGwpLGYubWFya2VyT3B0aW9ucy5wdXNoKHkubWFya2VyKSxmLm1hcmtlclNlbGVjdGVkT3B0aW9ucy5wdXNoKHkubWFya2VyU2VsKSxmLm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zLnB1c2goeS5tYXJrZXJVbnNlbCksZi50ZXh0T3B0aW9ucy5wdXNoKHkudGV4dCksZi50ZXh0U2VsZWN0ZWRPcHRpb25zLnB1c2goeS50ZXh0U2VsKSxmLnRleHRVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHkudGV4dFVuc2VsKSxmLnNlbGVjdEJhdGNoLnB1c2goW10pLGYudW5zZWxlY3RCYXRjaC5wdXNoKFtdKSxkLng9dyxkLnk9ayxkLnJhd3g9dyxkLnJhd3k9ayxkLnI9dixkLnRoZXRhPW0sZC5wb3NpdGlvbnM9XyxkLl9zY2VuZT1mLGQuaW5kZXg9Zi5jb3VudCxmLmNvdW50Kyt9fSksaSh0LGUscil9fX0seyIuLi8uLi9saWIiOjcxNywiLi4vc2NhdHRlcmdsL2NvbnN0YW50cyI6MTE3MywiLi4vc2NhdHRlcmdsL2NvbnZlcnQiOjExNzQsIi4uL3NjYXR0ZXJnbC9wbG90IjoxMTgxLCIuLi9zY2F0dGVyZ2wvc2NlbmVfdXBkYXRlIjoxMTgyLCJmYXN0LWlzbnVtZXJpYyI6MjI4LCJwb2ludC1jbHVzdGVyIjo0NzF9XSwxMjA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsYz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PWkubWFya2VyLGg9aS5saW5lLGY9dS5saW5lO2UuZXhwb3J0cz17YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sc3VtOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZToiY2FsYyJ9LG1vZGU6Yyh7fSxpLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpjKHt9LGkudGV4dCx7fSksdGV4dHRlbXBsYXRlOmEoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJhIiwiYiIsImMiLCJ0ZXh0Il19KSxob3ZlcnRleHQ6Yyh7fSxpLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6aC5jb2xvcix3aWR0aDpoLndpZHRoLGRhc2g6bCxzaGFwZTpjKHt9LGguc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOmguc21vb3RoaW5nLGVkaXRUeXBlOiJjYWxjIn0sY29ubmVjdGdhcHM6aS5jb25uZWN0Z2FwcyxjbGlwb25heGlzOmkuY2xpcG9uYXhpcyxmaWxsOmMoe30saS5maWxsLHt2YWx1ZXM6WyJub25lIiwidG9zZWxmIiwidG9uZXh0Il0sZGZsdDoibm9uZSJ9KSxmaWxsY29sb3I6aS5maWxsY29sb3IsbWFya2VyOmMoe3N5bWJvbDp1LnN5bWJvbCxvcGFjaXR5OnUub3BhY2l0eSxtYXhkaXNwbGF5ZWQ6dS5tYXhkaXNwbGF5ZWQsc2l6ZTp1LnNpemUsc2l6ZXJlZjp1LnNpemVyZWYsc2l6ZW1pbjp1LnNpemVtaW4sc2l6ZW1vZGU6dS5zaXplbW9kZSxsaW5lOmMoe3dpZHRoOmYud2lkdGgsZWRpdFR5cGU6ImNhbGMifSxzKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDp1LmdyYWRpZW50LGVkaXRUeXBlOiJjYWxjIn0scygibWFya2VyIikpLHRleHRmb250OmkudGV4dGZvbnQsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLHNlbGVjdGVkOmkuc2VsZWN0ZWQsdW5zZWxlY3RlZDppLnVuc2VsZWN0ZWQsaG92ZXJpbmZvOmMoe30sby5ob3ZlcmluZm8se2ZsYWdzOlsiYSIsImIiLCJjIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246aS5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6bigpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTk5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NjEyLCIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc2MiwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODQxLCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExMjB9XSwxMjA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGk9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxvPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxzPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGw9WyJhIiwiYiIsImMiXSxjPXthOlsiYiIsImMiXSxiOlsiYSIsImMiXSxjOlsiYSIsImIiXX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxoLGYscCxkLGc9dC5fZnVsbExheW91dFtlLnN1YnBsb3RdLnN1bSx2PWUuc3VtfHxnLG09e2E6ZS5hLGI6ZS5iLGM6ZS5jfTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWlmKCFtW2g9bFtyXV0pe2ZvcihwPW1bY1toXVswXV0sZD1tW2NbaF1bMV1dLGY9bmV3IEFycmF5KHAubGVuZ3RoKSx1PTA7dTxwLmxlbmd0aDt1KyspZlt1XT12LXBbdV0tZFt1XTttW2hdPWZ9dmFyIHkseCxiLF8sdyxrLFQ9ZS5fbGVuZ3RoLE09bmV3IEFycmF5KFQpO2ZvcihyPTA7cjxUO3IrKyl5PW0uYVtyXSx4PW0uYltyXSxiPW0uY1tyXSxuKHkpJiZuKHgpJiZuKGIpPygxIT09KF89Zy8oKHk9K3kpKyh4PSt4KSsoYj0rYikpKSYmKHkqPV8seCo9XyxiKj1fKSxrPXksdz1iLXgsTVtyXT17eDp3LHk6ayxhOnksYjp4LGM6Yn0pOk1bcl09e3g6ITEseTohMX07cmV0dXJuIHMoZSxUKSxhKHQsZSksaShNLGUpLG8oTSxlKSxNfX0seyIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTExOSwiLi4vc2NhdHRlci9jYWxjIjoxMTIxLCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTIyLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTEyMywiZmFzdC1pc251bWVyaWMiOjIyOH1dLDEyMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksaD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7ZnVuY3Rpb24gcChyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaCxyLGEpfXZhciBkLGc9cCgiYSIpLHY9cCgiYiIpLG09cCgiYyIpO2lmKGc/KGQ9Zy5sZW5ndGgsdj8oZD1NYXRoLm1pbihkLHYubGVuZ3RoKSxtJiYoZD1NYXRoLm1pbihkLG0ubGVuZ3RoKSkpOmQ9bT9NYXRoLm1pbihkLG0ubGVuZ3RoKTowKTp2JiZtJiYoZD1NYXRoLm1pbih2Lmxlbmd0aCxtLmxlbmd0aCkpLGQpe2UuX2xlbmd0aD1kLHAoInN1bSIpLHAoInRleHQiKSxwKCJob3ZlcnRleHQiKSwiZmlsbHMiIT09ZS5ob3Zlcm9uJiZwKCJob3ZlcnRlbXBsYXRlIikscCgibW9kZSIsZDxhLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyIpLGkuaGFzTGluZXMoZSkmJihzKHQsZSxyLGYscCksbCh0LGUscCkscCgiY29ubmVjdGdhcHMiKSksaS5oYXNNYXJrZXJzKGUpJiZvKHQsZSxyLGYscCx7Z3JhZGllbnQ6ITB9KSxpLmhhc1RleHQoZSkmJihwKCJ0ZXh0dGVtcGxhdGUiKSxjKHQsZSxmLHApKTt2YXIgeT1bXTsoaS5oYXNNYXJrZXJzKGUpfHxpLmhhc1RleHQoZSkpJiYocCgiY2xpcG9uYXhpcyIpLHAoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSx5LnB1c2goInBvaW50cyIpKSxwKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiYodSh0LGUscixwKSxpLmhhc0xpbmVzKGUpfHxsKHQsZSxwKSksInRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHx5LnB1c2goImZpbGxzIikscCgiaG92ZXJvbiIseS5qb2luKCIrIil8fCJwb2ludHMiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxwKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3MTcsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMTI0LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTEyOCwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMTMzLCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjExMzUsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMTM5LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMTQ0LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjExNDUsIi4vYXR0cmlidXRlcyI6MTIwN31dLDEyMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4sYSl7aWYoZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksblthXSl7dmFyIGk9blthXTt0LmE9aS5hLHQuYj1pLmIsdC5jPWkuY31lbHNlIHQuYT1lLmEsdC5iPWUuYix0LmM9ZS5jO3JldHVybiB0fX0se31dLDEyMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXt9LGk9cltlLnN1YnBsb3RdLl9zdWJwbG90O3JldHVybiBhLmFMYWJlbD1uLnRpY2tUZXh0KGkuYWF4aXMsdC5hLCEwKS50ZXh0LGEuYkxhYmVsPW4udGlja1RleHQoaS5iYXhpcyx0LmIsITApLnRleHQsYS5jTGFiZWw9bi50aWNrVGV4dChpLmNheGlzLHQuYywhMCkudGV4dCxhfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1fV0sMTIxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2hvdmVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBpPW4odCxlLHIsYSk7aWYoaSYmITEhPT1pWzBdLmluZGV4KXt2YXIgbz1pWzBdO2lmKHZvaWQgMD09PW8uaW5kZXgpe3ZhciBzPTEtby55MC90LnlhLl9sZW5ndGgsbD10LnhhLl9sZW5ndGgsYz1sKnMvMix1PWwtYztyZXR1cm4gby54MD1NYXRoLm1heChNYXRoLm1pbihvLngwLHUpLGMpLG8ueDE9TWF0aC5tYXgoTWF0aC5taW4oby54MSx1KSxjKSxpfXZhciBoPW8uY2Rbby5pbmRleF0sZj1vLnRyYWNlLHA9by5zdWJwbG90O28uYT1oLmEsby5iPWguYixvLmM9aC5jLG8ueExhYmVsVmFsPXZvaWQgMCxvLnlMYWJlbFZhbD12b2lkIDA7dmFyIGQ9e307ZFtmLnN1YnBsb3RdPXtfc3VicGxvdDpwfTt2YXIgZz1mLl9tb2R1bGUuZm9ybWF0TGFiZWxzKGgsZixkKTtvLmFMYWJlbD1nLmFMYWJlbCxvLmJMYWJlbD1nLmJMYWJlbCxvLmNMYWJlbD1nLmNMYWJlbDt2YXIgdj1oLmhpfHxmLmhvdmVyaW5mbyxtPVtdO2lmKCFmLmhvdmVydGVtcGxhdGUpe3ZhciB5PXYuc3BsaXQoIisiKTstMSE9PXkuaW5kZXhPZigiYWxsIikmJih5PVsiYSIsImIiLCJjIl0pLC0xIT09eS5pbmRleE9mKCJhIikmJngocC5hYXhpcyxvLmFMYWJlbCksLTEhPT15LmluZGV4T2YoImIiKSYmeChwLmJheGlzLG8uYkxhYmVsKSwtMSE9PXkuaW5kZXhPZigiYyIpJiZ4KHAuY2F4aXMsby5jTGFiZWwpfXJldHVybiBvLmV4dHJhVGV4dD1tLmpvaW4oIjxicj4iKSxvLmhvdmVydGVtcGxhdGU9Zi5ob3ZlcnRlbXBsYXRlLGl9ZnVuY3Rpb24geCh0LGUpe20ucHVzaCh0Ll9ob3ZlcnRpdGxlKyI6ICIrZSl9fX0seyIuLi9zY2F0dGVyL2hvdmVyIjoxMTMxfV0sMTIxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL3NjYXR0ZXIvc2VsZWN0IiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVydGVybmFyeSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvdGVybmFyeSIpLGNhdGVnb3JpZXM6WyJ0ZXJuYXJ5Iiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy90ZXJuYXJ5Ijo4NDIsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMTM4LCIuLi9zY2F0dGVyL3NlbGVjdCI6MTE0MSwiLi4vc2NhdHRlci9zdHlsZSI6MTE0MywiLi9hdHRyaWJ1dGVzIjoxMjA3LCIuL2NhbGMiOjEyMDgsIi4vZGVmYXVsdHMiOjEyMDksIi4vZXZlbnRfZGF0YSI6MTIxMCwiLi9mb3JtYXRfbGFiZWxzIjoxMjExLCIuL2hvdmVyIjoxMjEyLCIuL3Bsb3QiOjEyMTR9XSwxMjE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvcGxvdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ZS5wbG90Q29udGFpbmVyO2Euc2VsZWN0KCIuc2NhdHRlcmxheWVyIikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7dmFyIGk9e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxwbG90OmEsbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkUmVsYXRpdmU6bnVsbH0sbz1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCJnLnNjYXR0ZXJsYXllciIpO24odCxpLHIsbyl9fSx7Ii4uL3NjYXR0ZXIvcGxvdCI6MTE0MH1dLDEyMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuaWRSZWdleCxsPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxjPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9bi5tYXJrZXIsaD11LmxpbmUsZj1jKGEoIm1hcmtlci5saW5lIix7ZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSx7d2lkdGg6Yyh7fSxoLndpZHRoLHtlZGl0VHlwZToiY2FsYyJ9KSxlZGl0VHlwZToiY2FsYyJ9KSxwPWMoYSgibWFya2VyIikse3N5bWJvbDp1LnN5bWJvbCxzaXplOmMoe30sdS5zaXplLHtlZGl0VHlwZToibWFya2VyU2l6ZSJ9KSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLG9wYWNpdHk6dS5vcGFjaXR5LGNvbG9yYmFyOnUuY29sb3JiYXIsbGluZTpmLGVkaXRUeXBlOiJjYWxjIn0pO2Z1bmN0aW9uIGQodCl7cmV0dXJue3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsZWRpdFR5cGU6ImNhbGMiLGl0ZW1zOnt2YWxUeXBlOiJzdWJwbG90aWQiLHJlZ2V4OnNbdF0sZWRpdFR5cGU6InBsb3QifX19cC5jb2xvci5lZGl0VHlwZT1wLmNtaW4uZWRpdFR5cGU9cC5jbWF4LmVkaXRUeXBlPSJzdHlsZSIsZS5leHBvcnRzPXtkaW1lbnNpb25zOmwoImRpbWVuc2lvbiIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxheGlzOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiXSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LG1hdGNoZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0pLHRleHQ6Yyh7fSxvLnRleHQse30pLGhvdmVydGV4dDpjKHt9LG8uaG92ZXJ0ZXh0LHt9KSxob3ZlcnRlbXBsYXRlOmkoKSxtYXJrZXI6cCx4YXhlczpkKCJ4IikseWF4ZXM6ZCgieSIpLGRpYWdvbmFsOnt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxzaG93dXBwZXJoYWxmOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xvd2VyaGFsZjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6by5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6ImNhbGMifSx1bnNlbGVjdGVkOnttYXJrZXI6by51bnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6by5vcGFjaXR5fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTk5LCIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjc1NSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NzcxLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NDEsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTEyMCwiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiOjExNzF9XSwxMjE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlZ2wtbGluZTJkIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCIpLG89dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikuZ2V0RnJvbUlkLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5zaG91bGRTaG93WmVyb0xpbmUsdT0ic3Bsb20iO2Z1bmN0aW9uIGgodCxlLHIpe2Zvcih2YXIgbj1yLm1hdHJpeE9wdGlvbnMuZGF0YS5sZW5ndGgsYT1lLl92aXNpYmxlRGltcyxpPXIudmlld09wdHMucmFuZ2VzPW5ldyBBcnJheShuKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb10sYz1pW29dPW5ldyBBcnJheSg0KSx1PWwodCxlLl9kaWFnW3NdWzBdKTt1JiYoY1swXT11LnIybCh1LnJhbmdlWzBdKSxjWzJdPXUucjJsKHUucmFuZ2VbMV0pKTt2YXIgaD1sKHQsZS5fZGlhZ1tzXVsxXSk7aCYmKGNbMV09aC5yMmwoaC5yYW5nZVswXSksY1szXT1oLnIybChoLnJhbmdlWzFdKSl9ci5zZWxlY3RCYXRjaC5sZW5ndGh8fHIudW5zZWxlY3RCYXRjaC5sZW5ndGg/ci5tYXRyaXgudXBkYXRlKHtyYW5nZXM6aX0se3JhbmdlczppfSk6ci5tYXRyaXgudXBkYXRlKHtyYW5nZXM6aX0pfWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWUuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsLGE9ZS5fc3Bsb21HcmlkO2F8fChhPWUuX3NwbG9tR3JpZD1uKHIpKSxhLnVwZGF0ZShmdW5jdGlvbih0KXt2YXIgZSxyPXQuX2Z1bGxMYXlvdXQsbj1yLl9zaXplLGE9WzAsMCxyLndpZHRoLHIuaGVpZ2h0XSxpPXt9O2Z1bmN0aW9uIG8odCxlLHIsbixvLHMpe3ZhciBsPWVbdCsiY29sb3IiXSxjPWVbdCsid2lkdGgiXSx1PVN0cmluZyhsK2MpO3UgaW4gaT9pW3VdLmRhdGEucHVzaChOYU4sTmFOLHIsbixvLHMpOmlbdV09e2RhdGE6W3IsbixvLHNdLGpvaW46InJlY3QiLHRoaWNrbmVzczpjLGNvbG9yOmwsdmlld3BvcnQ6YSxyYW5nZTphLG92ZXJsYXk6ITF9fWZvcihlIGluIHIuX3NwbG9tU3VicGxvdHMpe3ZhciBzLGwsdT1yLl9wbG90c1tlXSxoPXUueGF4aXMsZj11LnlheGlzLHA9aC5fZ3JpZFZhbHMsZD1mLl9ncmlkVmFscyxnPW4uYitmLmRvbWFpblswXSpuLmgsdj0tZi5fbSxtPS12KmYucjJsKGYucmFuZ2VbMF0sZi5jYWxlbmRhcik7aWYoaC5zaG93Z3JpZClmb3IoZT0wO2U8cC5sZW5ndGg7ZSsrKXM9aC5fb2Zmc2V0K2gubDJwKHBbZV0ueCksbygiZ3JpZCIsaCxzLGcscyxnK2YuX2xlbmd0aCk7aWYoZi5zaG93Z3JpZClmb3IoZT0wO2U8ZC5sZW5ndGg7ZSsrKWw9ZyttK3YqZFtlXS54LG8oImdyaWQiLGYsaC5fb2Zmc2V0LGwsaC5fb2Zmc2V0K2guX2xlbmd0aCxsKTtjKHQsaCxmKSYmKHM9aC5fb2Zmc2V0K2gubDJwKDApLG8oInplcm9saW5lIixoLHMsZyxzLGcrZi5fbGVuZ3RoKSksYyh0LGYsaCkmJihsPWcrbSswLG8oInplcm9saW5lIixmLGguX29mZnNldCxsLGguX29mZnNldCtoLl9sZW5ndGgsbCkpfXZhciB5PVtdO2ZvcihlIGluIGkpeS5wdXNoKGlbZV0pO3JldHVybiB5fSh0KSl9ZS5leHBvcnRzPXtuYW1lOnUsYXR0cjpzLmF0dHIsYXR0clJlZ2V4OnMuYXR0clJlZ2V4LGxheW91dEF0dHJpYnV0ZXM6cy5sYXlvdXRBdHRyaWJ1dGVzLHN1cHBseUxheW91dERlZmF1bHRzOnMuc3VwcGx5TGF5b3V0RGVmYXVsdHMsZHJhd0ZyYW1ld29yazpzLmRyYXdGcmFtZXdvcmsscGxvdDpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9YS5nZXRNb2R1bGUodSksbj1vKHQuY2FsY2RhdGEscilbMF07aSh0LFsiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIsIk9FU19lbGVtZW50X2luZGV4X3VpbnQiXSkmJihlLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJmYodCksci5wbG90KHQse30sbikpfSxkcmFnOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2FsY2RhdGEscj10Ll9mdWxsTGF5b3V0O3IuX2hhc09ubHlMYXJnZVNwbG9tcyYmZih0KTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXVswXS50cmFjZSxpPXIuX3NwbG9tU2NlbmVzW2EudWlkXTsic3Bsb20iPT09YS50eXBlJiZpJiZpLm1hdHJpeCYmaCh0LGEsaSl9fSx1cGRhdGVHcmlkOmYsY2xlYW46ZnVuY3Rpb24odCxlLHIsbil7dmFyIGEsaT17fTtpZihuLl9zcGxvbVNjZW5lcyl7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXTsic3Bsb20iPT09by50eXBlJiYoaVtvLnVpZF09MSl9Zm9yKGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIGw9clthXTtpZighaVtsLnVpZF0pe3ZhciBjPW4uX3NwbG9tU2NlbmVzW2wudWlkXTtjJiZjLmRlc3Ryb3kmJmMuZGVzdHJveSgpLG4uX3NwbG9tU2NlbmVzW2wudWlkXT1udWxsLGRlbGV0ZSBuLl9zcGxvbVNjZW5lc1tsLnVpZF19fX0wPT09T2JqZWN0LmtleXMobi5fc3Bsb21TY2VuZXN8fHt9KS5sZW5ndGgmJmRlbGV0ZSBuLl9zcGxvbVNjZW5lcyxuLl9zcGxvbUdyaWQmJiFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJm4uX2hhc09ubHlMYXJnZVNwbG9tcyYmKG4uX3NwbG9tR3JpZC5kZXN0cm95KCksbi5fc3Bsb21HcmlkPW51bGwsZGVsZXRlIG4uX3NwbG9tR3JpZCkscy5jbGVhbih0LGUscixuKX0sdXBkYXRlRng6cy51cGRhdGVGeCx0b1NWRzpzLnRvU1ZHfX0seyIuLi8uLi9saWIvcHJlcGFyZV9yZWdsIjo3MzAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc2OCwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjgwMCwiLi4vLi4vcmVnaXN0cnkiOjg0NiwicmVnbC1saW5lMmQiOjQ5M31dLDEyMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxpPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLG89dCgiLi4vc2NhdHRlci9jYWxjIikuY2FsY0F4aXNFeHBhbnNpb24scz10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGw9dCgiLi4vc2NhdHRlcmdsL2NvbnZlcnQiKS5tYXJrZXJTZWxlY3Rpb24sYz10KCIuLi9zY2F0dGVyZ2wvY29udmVydCIpLm1hcmtlclN0eWxlLHU9dCgiLi9zY2VuZV91cGRhdGUiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sZj10KCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLHAsZCxnLHYsbSx5PWUuZGltZW5zaW9ucyx4PWUuX2xlbmd0aCxiPXt9LF89Yi5jZGF0YT1bXSx3PWIuZGF0YT1bXSxrPWUuX3Zpc2libGVEaW1zPVtdO2Z1bmN0aW9uIFQodCxyKXtmb3IodmFyIGE9dC5tYWtlQ2FsY2RhdGEoe3Y6ci52YWx1ZXMsdmNhbGVuZGFyOmUuY2FsZW5kYXJ9LCJ2IiksaT0wO2k8YS5sZW5ndGg7aSsrKWFbaV09YVtpXT09PWg/TmFOOmFbaV07Xy5wdXNoKGEpLHcucHVzaCgibG9nIj09PXQudHlwZT9uLnNpbXBsZU1hcChhLHQuYzJsKTphKX1mb3Iocj0wO3I8eS5sZW5ndGg7cisrKWlmKChkPXlbcl0pLnZpc2libGUpe2lmKGc9YS5nZXRGcm9tSWQodCxlLl9kaWFnW3JdWzBdKSx2PWEuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVsxXSksZyYmdiYmZy50eXBlIT09di50eXBlKXtuLmxvZygiU2tpcHBpbmcgc3Bsb20gZGltZW5zaW9uICIrcisiIHdpdGggY29uZmxpY3RpbmcgYXhpcyB0eXBlcyIpO2NvbnRpbnVlfWc/KFQoZyxkKSx2JiYiY2F0ZWdvcnkiPT09di50eXBlJiYodi5fY2F0ZWdvcmllcz1nLl9jYXRlZ29yaWVzLnNsaWNlKCkpKTpUKHYsZCksay5wdXNoKHIpfWZvcihzKHQsZSksbi5leHRlbmRGbGF0KGIsYyhlKSksbT1fLmxlbmd0aCp4PmY/MiooYi5zaXplQXZnfHxNYXRoLm1heChiLnNpemUsMykpOmkoZSx4KSxwPTA7cDxrLmxlbmd0aDtwKyspZD15W3I9a1twXV0sZz1hLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMF0pfHx7fSx2PWEuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVsxXSl8fHt9LG8odCxlLGcsdixfW3BdLF9bcF0sbSk7dmFyIE09dSh0LGUpO3JldHVybiBNLm1hdHJpeHx8KE0ubWF0cml4PSEwKSxNLm1hdHJpeE9wdGlvbnM9YixNLnNlbGVjdGVkT3B0aW9ucz1sKGUsZS5zZWxlY3RlZCksTS51bnNlbGVjdGVkT3B0aW9ucz1sKGUsZS51bnNlbGVjdGVkKSxbe3g6ITEseTohMSx0Ont9LHRyYWNlOmV9XX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NjgsIi4uL3NjYXR0ZXIvY2FsYyI6MTEyMSwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExMjMsIi4uL3NjYXR0ZXJnbC9jb25zdGFudHMiOjExNzMsIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IjoxMTc0LCIuL3NjZW5lX3VwZGF0ZSI6MTIyNH1dLDEyMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxpPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLHM9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxsPXQoIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGgiKSxjPXQoIi4uL3NjYXR0ZXJnbC9oZWxwZXJzIikuaXNPcGVuU3ltYm9sO2Z1bmN0aW9uIHUodCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLmRpbWVuc2lvbnMscixhKX1yKCJsYWJlbCIpO3ZhciBhPXIoInZhbHVlcyIpO2EmJmEubGVuZ3RoP3IoInZpc2libGUiKTplLnZpc2libGU9ITEscigiYXhpcy50eXBlIikscigiYXhpcy5tYXRjaGVzIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgpe2Z1bmN0aW9uIGYocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgcD1hKHQsZSx7bmFtZToiZGltZW5zaW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOnV9KSxkPWYoImRpYWdvbmFsLnZpc2libGUiKSxnPWYoInNob3d1cHBlcmhhbGYiKSx2PWYoInNob3dsb3dlcmhhbGYiKTtpZihsKGUscCwidmFsdWVzIikmJihkfHxnfHx2KSl7ZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxzKHQsZSxyLGgsZik7dmFyIG09YyhlLm1hcmtlci5zeW1ib2wpLHk9by5pc0J1YmJsZShlKTtmKCJtYXJrZXIubGluZS53aWR0aCIsbXx8eT8xOjApLGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGksbz1lLmRpbWVuc2lvbnMscz1vLmxlbmd0aCxsPWUuc2hvd3VwcGVyaGFsZixjPWUuc2hvd2xvd2VyaGFsZix1PWUuZGlhZ29uYWwudmlzaWJsZSxoPW5ldyBBcnJheShzKSxmPW5ldyBBcnJheShzKTtmb3IoYT0wO2E8czthKyspe3ZhciBwPWE/YSsxOiIiO2hbYV09IngiK3AsZlthXT0ieSIrcH12YXIgZD1uKCJ4YXhlcyIsaCksZz1uKCJ5YXhlcyIsZiksdj1lLl9kaWFnPW5ldyBBcnJheShzKTtlLl94YXhlcz17fSxlLl95YXhlcz17fTt2YXIgbT1bXSx5PVtdO2Z1bmN0aW9uIHgodCxuLGEsaSl7aWYodCl7dmFyIG89dC5jaGFyQXQoMCkscz1yLl9zcGxvbUF4ZXNbb107aWYoZVsiXyIrbysiYXhlcyJdW3RdPTEsaS5wdXNoKHQpLCEodCBpbiBzKSl7dmFyIGw9c1t0XT17fTthJiYobC5sYWJlbD1hLmxhYmVsfHwiIixhLnZpc2libGUmJmEuYXhpcyYmKGEuYXhpcy50eXBlJiYobC50eXBlPWEuYXhpcy50eXBlKSxhLmF4aXMubWF0Y2hlcyYmKGwubWF0Y2hlcz1uKSkpfX19dmFyIGI9IXUmJiFjLF89IXUmJiFsO2ZvcihlLl9heGVzRGltPXt9LGE9MDthPHM7YSsrKXt2YXIgdz1vW2FdLGs9MD09PWEsVD1hPT09cy0xLE09ayYmYnx8VCYmXz92b2lkIDA6ZFthXSxBPWsmJl98fFQmJmI/dm9pZCAwOmdbYV07eChNLEEsdyxtKSx4KEEsTSx3LHkpLHZbYV09W00sQV0sZS5fYXhlc0RpbVtNXT1hLGUuX2F4ZXNEaW1bQV09YX1mb3IoYT0wO2E8bS5sZW5ndGg7YSsrKWZvcihpPTA7aTx5Lmxlbmd0aDtpKyspe3ZhciBTPW1bYV0reVtpXTthPmkmJmw/ci5fc3Bsb21TdWJwbG90c1tTXT0xOmE8aSYmYz9yLl9zcGxvbVN1YnBsb3RzW1NdPTE6YSE9PWl8fCF1JiZjJiZsfHwoci5fc3Bsb21TdWJwbG90c1tTXT0xKX0oIWN8fCF1JiZsJiZjKSYmKHIuX3NwbG9tR3JpZERmbHQueHNpZGU9ImJvdHRvbSIsci5fc3Bsb21HcmlkRGZsdC55c2lkZT0ibGVmdCIpfSgwLGUsaCxmKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxmKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzYxLCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoIjoxMDkxLCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTEzOSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTE0NCwiLi4vc2NhdHRlcmdsL2hlbHBlcnMiOjExNzgsIi4vYXR0cmlidXRlcyI6MTIxNX1dLDEyMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGk9dCgiLi4vc2NhdHRlcmdsL2NvbnZlcnQiKS5tYXJrZXJTdHlsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRyYWNlLG89dC5fZnVsbExheW91dC5fc3Bsb21TY2VuZXNbci51aWRdO2lmKG8pe2EodCxyKSxuLmV4dGVuZEZsYXQoby5tYXRyaXhPcHRpb25zLGkocikpO3ZhciBzPW4uZXh0ZW5kRmxhdCh7fSxvLm1hdHJpeE9wdGlvbnMsby52aWV3T3B0cyk7by5tYXRyaXgudXBkYXRlKHMsbnVsbCl9fX0seyIuLi8uLi9saWIiOjcxNywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExMjMsIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IjoxMTc0fV0sMTIyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmdldERpbUluZGV4PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuX2lkLG49e3g6MCx5OjF9W3IuY2hhckF0KDApXSxhPXQuX3Zpc2libGVEaW1zLGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIG89YVtpXTtpZih0Ll9kaWFnW29dW25dPT09cilyZXR1cm4gaX1yZXR1cm4hMX19LHt9XSwxMjIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaGVscGVycyIpLGE9dCgiLi4vc2NhdHRlcmdsL2hvdmVyIikuY2FsY0hvdmVyO2UuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuY2RbMF0udHJhY2Usbz10LnNjZW5lLm1hdHJpeE9wdGlvbnMuY2RhdGEscz10LnhhLGw9dC55YSxjPXMuYzJwKGUpLHU9bC5jMnAociksaD10LmRpc3RhbmNlLGY9bi5nZXREaW1JbmRleChpLHMpLHA9bi5nZXREaW1JbmRleChpLGwpO2lmKCExPT09Znx8ITE9PT1wKXJldHVyblt0XTtmb3IodmFyIGQsZyx2PW9bZl0sbT1vW3BdLHk9aCx4PTA7eDx2Lmxlbmd0aDt4Kyspe3ZhciBiPXZbeF0sXz1tW3hdLHc9cy5jMnAoYiktYyxrPWwuYzJwKF8pLXUsVD1NYXRoLnNxcnQodyp3K2sqayk7VDx5JiYoeT1nPVQsZD14KX1yZXR1cm4gdC5pbmRleD1kLHQuZGlzdGFuY2U9eSx0LmR4eT1nLHZvaWQgMD09PWQ/W3RdOlthKHQsdixtLGkpXX19fSx7Ii4uL3NjYXR0ZXJnbC9ob3ZlciI6MTE3OSwiLi9oZWxwZXJzIjoxMjIwfV0sMTIyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9ncmlkIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic3Bsb20iLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsImNhcnRlc2lhbiIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLGVkaXRTdHlsZTp0KCIuL2VkaXRfc3R5bGUiKSxtZXRhOnt9fSxuLnJlZ2lzdGVyKGEpfSx7Ii4uLy4uL2NvbXBvbmVudHMvZ3JpZCI6NjM0LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTEzOCwiLi9hdHRyaWJ1dGVzIjoxMjE1LCIuL2Jhc2VfcGxvdCI6MTIxNiwiLi9jYWxjIjoxMjE3LCIuL2RlZmF1bHRzIjoxMjE4LCIuL2VkaXRfc3R5bGUiOjEyMTksIi4vaG92ZXIiOjEyMjEsIi4vcGxvdCI6MTIyMywiLi9zZWxlY3QiOjEyMjV9XSwxMjIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlZ2wtc3Bsb20iKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIik7ZnVuY3Rpb24gbyh0LGUpe3ZhciByLG8scyxsLGMsdT10Ll9mdWxsTGF5b3V0LGg9dS5fc2l6ZSxmPWUudHJhY2UscD1lLnQsZD11Ll9zcGxvbVNjZW5lc1tmLnVpZF0sZz1kLm1hdHJpeE9wdGlvbnMsdj1nLmNkYXRhLG09dS5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2wseT11LmRyYWdtb2RlO2lmKDAhPT12Lmxlbmd0aCl7Zy5sb3dlcj1mLnNob3d1cHBlcmhhbGYsZy51cHBlcj1mLnNob3dsb3dlcmhhbGYsZy5kaWFnb25hbD1mLmRpYWdvbmFsLnZpc2libGU7dmFyIHg9Zi5fdmlzaWJsZURpbXMsYj12Lmxlbmd0aCxfPWQudmlld09wdHM9e307Zm9yKF8ucmFuZ2VzPW5ldyBBcnJheShiKSxfLmRvbWFpbnM9bmV3IEFycmF5KGIpLGM9MDtjPHgubGVuZ3RoO2MrKyl7cz14W2NdO3ZhciB3PV8ucmFuZ2VzW2NdPW5ldyBBcnJheSg0KSxrPV8uZG9tYWluc1tjXT1uZXcgQXJyYXkoNCk7KHI9aS5nZXRGcm9tSWQodCxmLl9kaWFnW3NdWzBdKSkmJih3WzBdPXIuX3JsWzBdLHdbMl09ci5fcmxbMV0sa1swXT1yLmRvbWFpblswXSxrWzJdPXIuZG9tYWluWzFdKSwobz1pLmdldEZyb21JZCh0LGYuX2RpYWdbc11bMV0pKSYmKHdbMV09by5fcmxbMF0sd1szXT1vLl9ybFsxXSxrWzFdPW8uZG9tYWluWzBdLGtbM109by5kb21haW5bMV0pfV8udmlld3BvcnQ9W2gubCxoLmIsaC53K2gubCxoLmgraC5iXSwhMD09PWQubWF0cml4JiYoZC5tYXRyaXg9bihtKSk7dmFyIFQ9dS5jbGlja21vZGUuaW5kZXhPZigic2VsZWN0Iik+LTEsTT0hMDtpZigibGFzc28iPT09eXx8InNlbGVjdCI9PT15fHwhIWYuc2VsZWN0ZWRwb2ludHN8fFQpe3ZhciBBPWYuX2xlbmd0aDtpZihmLnNlbGVjdGVkcG9pbnRzKXtkLnNlbGVjdEJhdGNoPWYuc2VsZWN0ZWRwb2ludHM7dmFyIFM9Zi5zZWxlY3RlZHBvaW50cyxFPXt9O2ZvcihzPTA7czxTLmxlbmd0aDtzKyspRVtTW3NdXT0hMDt2YXIgTD1bXTtmb3Iocz0wO3M8QTtzKyspRVtzXXx8TC5wdXNoKHMpO2QudW5zZWxlY3RCYXRjaD1MfXZhciBDPXAueHB4PW5ldyBBcnJheShiKSxQPXAueXB4PW5ldyBBcnJheShiKTtmb3IoYz0wO2M8eC5sZW5ndGg7YysrKXtpZihzPXhbY10scj1pLmdldEZyb21JZCh0LGYuX2RpYWdbc11bMF0pKWZvcihDW2NdPW5ldyBBcnJheShBKSxsPTA7bDxBO2wrKylDW2NdW2xdPXIuYzJwKHZbY11bbF0pO2lmKG89aS5nZXRGcm9tSWQodCxmLl9kaWFnW3NdWzFdKSlmb3IoUFtjXT1uZXcgQXJyYXkoQSksbD0wO2w8QTtsKyspUFtjXVtsXT1vLmMycCh2W2NdW2xdKX1pZihkLnNlbGVjdEJhdGNoLmxlbmd0aHx8ZC51bnNlbGVjdEJhdGNoLmxlbmd0aCl7dmFyIE89YS5leHRlbmRGbGF0KHt9LGcsZC51bnNlbGVjdGVkT3B0aW9ucyxfKSx6PWEuZXh0ZW5kRmxhdCh7fSxnLGQuc2VsZWN0ZWRPcHRpb25zLF8pO2QubWF0cml4LnVwZGF0ZShPLHopLE09ITF9fWVsc2UgcC54cHg9cC55cHg9bnVsbDtpZihNKXt2YXIgST1hLmV4dGVuZEZsYXQoe30sZyxfKTtkLm1hdHJpeC51cGRhdGUoSSxudWxsKX19fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspbyh0LHJbbl1bMF0pfX0seyIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NjgsInJlZ2wtc3Bsb20iOjUwMH1dLDEyMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxhPWUudWlkLGk9ci5fc3Bsb21TY2VuZXM7aXx8KGk9ci5fc3Bsb21TY2VuZXM9e30pO3ZhciBvPXtkaXJ0eTohMH0scz1pW2UudWlkXTtyZXR1cm4gc3x8KChzPWlbYV09bi5leHRlbmRGbGF0KHt9LG8se21hdHJpeDohMSxzZWxlY3RCYXRjaDpbXSx1bnNlbGVjdEJhdGNoOltdfSkpLmRyYXc9ZnVuY3Rpb24oKXtzLm1hdHJpeCYmcy5tYXRyaXguZHJhdyYmKHMuc2VsZWN0QmF0Y2gubGVuZ3RofHxzLnVuc2VsZWN0QmF0Y2gubGVuZ3RoP3MubWF0cml4LmRyYXcocy51bnNlbGVjdEJhdGNoLHMuc2VsZWN0QmF0Y2gpOnMubWF0cml4LmRyYXcoKSkscy5kaXJ0eT0hMX0scy5kZXN0cm95PWZ1bmN0aW9uKCl7cy5tYXRyaXgmJnMubWF0cml4LmRlc3Ryb3kmJnMubWF0cml4LmRlc3Ryb3koKSxzLm1hdHJpeE9wdGlvbnM9bnVsbCxzLnNlbGVjdEJhdGNoPW51bGwscy51bnNlbGVjdEJhdGNoPW51bGwscz1udWxsfSkscy5kaXJ0eXx8bi5leHRlbmRGbGF0KHMsbyksc319LHsiLi4vLi4vbGliIjo3MTd9XSwxMjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jZCxvPXJbMF0udHJhY2Uscz1yWzBdLnQsbD10LnNjZW5lLGM9bC5tYXRyaXhPcHRpb25zLmNkYXRhLHU9dC54YXhpcyxoPXQueWF4aXMsZj1bXTtpZighbClyZXR1cm4gZjt2YXIgcD0hYS5oYXNNYXJrZXJzKG8pJiYhYS5oYXNUZXh0KG8pO2lmKCEwIT09by52aXNpYmxlfHxwKXJldHVybiBmO3ZhciBkPWkuZ2V0RGltSW5kZXgobyx1KSxnPWkuZ2V0RGltSW5kZXgobyxoKTtpZighMT09PWR8fCExPT09ZylyZXR1cm4gZjt2YXIgdj1zLnhweFtkXSxtPXMueXB4W2ddLHk9Y1tkXSx4PWNbZ10sYj1bXSxfPVtdO2lmKCExIT09ZSYmIWUuZGVnZW5lcmF0ZSlmb3IodmFyIHc9MDt3PHkubGVuZ3RoO3crKyllLmNvbnRhaW5zKFt2W3ddLG1bd11dLG51bGwsdyx0KT8oYi5wdXNoKHcpLGYucHVzaCh7cG9pbnROdW1iZXI6dyx4Onlbd10seTp4W3ddfSkpOl8ucHVzaCh3KTt2YXIgaz1sLm1hdHJpeE9wdGlvbnM7cmV0dXJuIGIubGVuZ3RofHxfLmxlbmd0aD9sLnNlbGVjdEJhdGNoLmxlbmd0aHx8bC51bnNlbGVjdEJhdGNoLmxlbmd0aHx8bC5tYXRyaXgudXBkYXRlKGwudW5zZWxlY3RlZE9wdGlvbnMsbi5leHRlbmRGbGF0KHt9LGssbC5zZWxlY3RlZE9wdGlvbnMsbC52aWV3T3B0cykpOmwubWF0cml4LnVwZGF0ZShrLG51bGwpLGwuc2VsZWN0QmF0Y2g9YixsLnVuc2VsZWN0QmF0Y2g9XyxmfX0seyIuLi8uLi9saWIiOjcxNywiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTE0NCwiLi9oZWxwZXJzIjoxMjIwfV0sMTIyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uL21lc2gzZC9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx1Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHY6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzdGFydHM6e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjFlMyxlZGl0VHlwZToiY2FsYyJ9LHNpemVyZWY6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLG1pbjowLGRmbHQ6MX0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmEoe2VkaXRUeXBlOiJjYWxjIn0se2tleXM6WyJ0dWJleCIsInR1YmV5IiwidHViZXoiLCJ0dWJldSIsInR1YmV2IiwidHViZXciLCJub3JtIiwiZGl2ZXJnZW5jZSJdfSksc2hvd2xlZ2VuZDpzKHt9LG8uc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfTtzKGwsbigiIix7Y29sb3JBdHRyOiJ1L3YvdyBub3JtIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpO1sib3BhY2l0eSIsImxpZ2h0cG9zaXRpb24iLCJsaWdodGluZyJdLmZvckVhY2goZnVuY3Rpb24odCl7bFt0XT1pW3RdfSksbC5ob3ZlcmluZm89cyh7fSxvLmhvdmVyaW5mbyx7ZWRpdFR5cGU6ImNhbGMiLGZsYWdzOlsieCIsInkiLCJ6IiwidSIsInYiLCJ3Iiwibm9ybSIsImRpdmVyZ2VuY2UiLCJ0ZXh0IiwibmFtZSJdLGRmbHQ6IngreSt6K25vcm0rdGV4dCtuYW1lIn0pLGwudHJhbnNmb3Jtcz12b2lkIDAsZS5leHBvcnRzPWx9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU5OSwiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg0MSwiLi4vbWVzaDNkL2F0dHJpYnV0ZXMiOjEwNjF9XSwxMjI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKTtmdW5jdGlvbiBpKHQpe3ZhciBlLHIsYSxpLHMsbCxjLHUsaCxmLHAsZCxnPXQuX3gsdj10Ll95LG09dC5feix5PXQuX2xlbix4PS0xLzAsYj0xLzAsXz0tMS8wLHc9MS8wLGs9LTEvMCxUPTEvMCxNPSIiO2Zvcih5JiYoYz1nWzBdLGg9dlswXSxwPW1bMF0pLHk+MSYmKHU9Z1t5LTFdLGY9dlt5LTFdLGQ9bVt5LTFdKSxlPTA7ZTx5O2UrKyl4PU1hdGgubWF4KHgsZ1tlXSksYj1NYXRoLm1pbihiLGdbZV0pLF89TWF0aC5tYXgoXyx2W2VdKSx3PU1hdGgubWluKHcsdltlXSksaz1NYXRoLm1heChrLG1bZV0pLFQ9TWF0aC5taW4oVCxtW2VdKSxpfHxnW2VdPT09Y3x8KGk9ITAsTSs9IngiKSxzfHx2W2VdPT09aHx8KHM9ITAsTSs9InkiKSxsfHxtW2VdPT09cHx8KGw9ITAsTSs9InoiKTtpfHwoTSs9IngiKSxzfHwoTSs9InkiKSxsfHwoTSs9InoiKTt2YXIgQT1vKHQuX3gpLFM9byh0Ll95KSxFPW8odC5feik7TT0oTT0oTT1NLnJlcGxhY2UoIngiLChjPnU/Ii0iOiIrIikrIngiKSkucmVwbGFjZSgieSIsKGg+Zj8iLSI6IisiKSsieSIpKS5yZXBsYWNlKCJ6IiwocD5kPyItIjoiKyIpKyJ6Iik7dmFyIEw9ZnVuY3Rpb24oKXt5PTAsQT1bXSxTPVtdLEU9W119OygheXx8eTxBLmxlbmd0aCpTLmxlbmd0aCpFLmxlbmd0aCkmJkwoKTt2YXIgQz1mdW5jdGlvbih0KXtyZXR1cm4ieCI9PT10P2c6InkiPT09dD92Om19LFA9ZnVuY3Rpb24odCl7cmV0dXJuIngiPT09dD9BOiJ5Ij09PXQ/UzpFfSxPPWZ1bmN0aW9uKHQpe3JldHVybiB0W3ktMV08dFswXT8tMToxfSx6PUMoTVsxXSksST1DKE1bM10pLEQ9QyhNWzVdKSxSPVAoTVsxXSkubGVuZ3RoLEY9UChNWzNdKS5sZW5ndGgsQj1QKE1bNV0pLmxlbmd0aCxOPSExLGo9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBSKihGKnQrZSkrcn0sVj1PKEMoTVsxXSkpLFU9TyhDKE1bM10pKSxxPU8oQyhNWzVdKSk7Zm9yKGU9MDtlPEItMTtlKyspe2ZvcihyPTA7cjxGLTE7cisrKXtmb3IoYT0wO2E8Ui0xO2ErKyl7dmFyIEg9aihlLHIsYSksRz1qKGUscixhKzEpLFk9aihlLHIrMSxhKSxXPWooZSsxLHIsYSk7aWYoeltIXSpWPHpbR10qViYmSVtIXSpVPElbWV0qVSYmRFtIXSpxPERbV10qcXx8KE49ITApLE4pYnJlYWt9aWYoTilicmVha31pZihOKWJyZWFrfXJldHVybiBOJiYobi53YXJuKCJFbmNvdW50ZXJlZCBhcmJpdHJhcnkgY29vcmRpbmF0ZXMhIFVuYWJsZSB0byBpbnB1dCBkYXRhIGdyaWQuIiksTCgpKSx7eE1pbjpiLHlNaW46dyx6TWluOlQseE1heDp4LHlNYXg6Xyx6TWF4OmssWHM6QSxZczpTLFpzOkUsbGVuOnksZmlsbDpNfX1mdW5jdGlvbiBvKHQpe3JldHVybiBuLmRpc3RpbmN0VmFscyh0KS52YWxzfWZ1bmN0aW9uIHModCxlKXtpZih2b2lkIDA9PT1lJiYoZT10Lmxlbmd0aCksbi5pc1R5cGVkQXJyYXkodCkpcmV0dXJuIHQuc3ViYXJyYXkoMCxlKTtmb3IodmFyIHI9W10sYT0wO2E8ZTthKyspclthXT0rdFthXTtyZXR1cm4gcn1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXtlLl9sZW49TWF0aC5taW4oZS51Lmxlbmd0aCxlLnYubGVuZ3RoLGUudy5sZW5ndGgsZS54Lmxlbmd0aCxlLnkubGVuZ3RoLGUuei5sZW5ndGgpLGUuX3U9cyhlLnUsZS5fbGVuKSxlLl92PXMoZS52LGUuX2xlbiksZS5fdz1zKGUudyxlLl9sZW4pLGUuX3g9cyhlLngsZS5fbGVuKSxlLl95PXMoZS55LGUuX2xlbiksZS5fej1zKGUueixlLl9sZW4pO3ZhciByPWkoZSk7ZS5fZ3JpZEZpbGw9ci5maWxsLGUuX1hzPXIuWHMsZS5fWXM9ci5ZcyxlLl9acz1yLlpzLGUuX2xlbj1yLmxlbjt2YXIgbixvLGwsYz0wO2Uuc3RhcnRzJiYobj1zKGUuc3RhcnRzLnh8fFtdKSxvPXMoZS5zdGFydHMueXx8W10pLGw9cyhlLnN0YXJ0cy56fHxbXSksYz1NYXRoLm1pbihuLmxlbmd0aCxvLmxlbmd0aCxsLmxlbmd0aCkpLGUuX3N0YXJ0c1g9bnx8W10sZS5fc3RhcnRzWT1vfHxbXSxlLl9zdGFydHNaPWx8fFtdO3ZhciB1LGg9MCxmPTEvMDtmb3IodT0wO3U8ZS5fbGVuO3UrKyl7dmFyIHA9ZS5fdVt1XSxkPWUuX3ZbdV0sZz1lLl93W3VdLHY9TWF0aC5zcXJ0KHAqcCtkKmQrZypnKTtoPU1hdGgubWF4KGgsdiksZj1NYXRoLm1pbihmLHYpfWZvcihhKHQsZSx7dmFsczpbZixoXSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoiYyJ9KSx1PTA7dTxjO3UrKyl7dmFyIG09blt1XTtyLnhNYXg9TWF0aC5tYXgoci54TWF4LG0pLHIueE1pbj1NYXRoLm1pbihyLnhNaW4sbSk7dmFyIHk9b1t1XTtyLnlNYXg9TWF0aC5tYXgoci55TWF4LHkpLHIueU1pbj1NYXRoLm1pbihyLnlNaW4seSk7dmFyIHg9bFt1XTtyLnpNYXg9TWF0aC5tYXgoci56TWF4LHgpLHIuek1pbj1NYXRoLm1pbihyLnpNaW4seCl9ZS5fc2xlbj1jLGUuX25vcm1NYXg9aCxlLl94Ym5kcz1bci54TWluLHIueE1heF0sZS5feWJuZHM9W3IueU1pbixyLnlNYXhdLGUuX3pibmRzPVtyLnpNaW4sci56TWF4XX0sZmlsdGVyOnMscHJvY2Vzc0dyaWQ6aX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYwMCwiLi4vLi4vbGliIjo3MTd9XSwxMjI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXN0cmVhbXR1YmUzZCIpLGE9bi5jcmVhdGVUdWJlTWVzaCxpPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmV4dHJhY3RPcHRzLGw9dCgiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIiksYz17eGF4aXM6MCx5YXhpczoxLHpheGlzOjJ9O2Z1bmN0aW9uIHUodCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLm1lc2g9bnVsbCx0aGlzLmRhdGE9bnVsbH12YXIgaD11LnByb3RvdHlwZTtmdW5jdGlvbiBmKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBlPjI/dC5zbGljZSgxLGUtMSk6Mj09PWU/Wyh0WzBdK3RbMV0pLzJdOnR9ZnVuY3Rpb24gcCh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gMT09PWU/Wy41LC41XTpbdFsxXS10WzBdLHRbZS0xXS10W2UtMl1dfWZ1bmN0aW9uIGQodCxlKXt2YXIgcj10LmZ1bGxTY2VuZUxheW91dCxhPXQuZGF0YVNjYWxlLHU9ZS5fbGVuLGg9e307ZnVuY3Rpb24gZCh0LGUpe3ZhciBuPXJbZV0sbz1hW2NbZV1dO3JldHVybiBpLnNpbXBsZU1hcCh0LGZ1bmN0aW9uKHQpe3JldHVybiBuLmQybCh0KSpvfSl9aWYoaC52ZWN0b3JzPWwoZChlLl91LCJ4YXhpcyIpLGQoZS5fdiwieWF4aXMiKSxkKGUuX3csInpheGlzIiksdSksIXUpcmV0dXJue3Bvc2l0aW9uczpbXSxjZWxsczpbXX07dmFyIGc9ZChlLl9YcywieGF4aXMiKSx2PWQoZS5fWXMsInlheGlzIiksbT1kKGUuX1pzLCJ6YXhpcyIpO2lmKGgubWVzaGdyaWQ9W2csdixtXSxoLmdyaWRGaWxsPWUuX2dyaWRGaWxsLGUuX3NsZW4paC5zdGFydGluZ1Bvc2l0aW9ucz1sKGQoZS5fc3RhcnRzWCwieGF4aXMiKSxkKGUuX3N0YXJ0c1ksInlheGlzIiksZChlLl9zdGFydHNaLCJ6YXhpcyIpKTtlbHNle2Zvcih2YXIgeT12WzBdLHg9ZihnKSxiPWYobSksXz1uZXcgQXJyYXkoeC5sZW5ndGgqYi5sZW5ndGgpLHc9MCxrPTA7azx4Lmxlbmd0aDtrKyspZm9yKHZhciBUPTA7VDxiLmxlbmd0aDtUKyspX1t3KytdPVt4W2tdLHksYltUXV07aC5zdGFydGluZ1Bvc2l0aW9ucz1ffWguY29sb3JtYXA9byhlKSxoLnR1YmVTaXplPWUuc2l6ZXJlZixoLm1heExlbmd0aD1lLm1heGRpc3BsYXllZDt2YXIgTT1kKGUuX3hibmRzLCJ4YXhpcyIpLEE9ZChlLl95Ym5kcywieWF4aXMiKSxTPWQoZS5femJuZHMsInpheGlzIiksRT1wKGcpLEw9cCh2KSxDPXAobSksUD1bW01bMF0tRVswXSxBWzBdLUxbMF0sU1swXS1DWzBdXSxbTVsxXStFWzFdLEFbMV0rTFsxXSxTWzFdK0NbMV1dXSxPPW4oaCxQKSx6PXMoZSk7Ty52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W3oubWluL2UuX25vcm1NYXgsei5tYXgvZS5fbm9ybU1heF07dmFyIEk9ZS5saWdodHBvc2l0aW9uO3JldHVybiBPLmxpZ2h0UG9zaXRpb249W0kueCxJLnksSS56XSxPLmFtYmllbnQ9ZS5saWdodGluZy5hbWJpZW50LE8uZGlmZnVzZT1lLmxpZ2h0aW5nLmRpZmZ1c2UsTy5zcGVjdWxhcj1lLmxpZ2h0aW5nLnNwZWN1bGFyLE8ucm91Z2huZXNzPWUubGlnaHRpbmcucm91Z2huZXNzLE8uZnJlc25lbD1lLmxpZ2h0aW5nLmZyZXNuZWwsTy5vcGFjaXR5PWUub3BhY2l0eSxlLl9wYWQ9Ty50dWJlU2NhbGUqZS5zaXplcmVmKjIsT31oLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQscj10aGlzLnNjZW5lLmRhdGFTY2FsZTtmdW5jdGlvbiBuKHQsbil7dmFyIGE9ZVtuXSxpPXJbY1tuXV07cmV0dXJuIGEubDJjKHQpL2l9aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBhPXQuZGF0YS5wb3NpdGlvbixpPXQuZGF0YS52ZWxvY2l0eTtyZXR1cm4gdC50cmFjZUNvb3JkaW5hdGU9W24oYVswXSwieGF4aXMiKSxuKGFbMV0sInlheGlzIiksbihhWzJdLCJ6YXhpcyIpLG4oaVswXSwieGF4aXMiKSxuKGlbMV0sInlheGlzIiksbihpWzJdLCJ6YXhpcyIpLHQuZGF0YS5pbnRlbnNpdHkqdGhpcy5kYXRhLl9ub3JtTWF4LHQuZGF0YS5kaXZlcmdlbmNlXSx0LnRleHRMYWJlbD10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dCwhMH19LGgudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGF0YT10O3ZhciBlPWQodGhpcy5zY2VuZSx0KTt0aGlzLm1lc2gudXBkYXRlKGUpfSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxuPWQodCxlKSxpPWEocixuKSxvPW5ldyB1KHQsZS51aWQpO3JldHVybiBvLm1lc2g9aSxvLmRhdGE9ZSxpLl90cmFjZT1vLHQuZ2xwbG90LmFkZChpKSxvfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYwNCwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjcxNCwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo4MTYsImdsLXN0cmVhbXR1YmUzZCI6MzE1fV0sMTIyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGk9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgbD1zKCJ1IiksYz1zKCJ2IiksdT1zKCJ3IiksaD1zKCJ4IiksZj1zKCJ5IikscD1zKCJ6Iik7bCYmbC5sZW5ndGgmJmMmJmMubGVuZ3RoJiZ1JiZ1Lmxlbmd0aCYmaCYmaC5sZW5ndGgmJmYmJmYubGVuZ3RoJiZwJiZwLmxlbmd0aD8ocygic3RhcnRzLngiKSxzKCJzdGFydHMueSIpLHMoInN0YXJ0cy56IikscygibWF4ZGlzcGxheWVkIikscygic2l6ZXJlZiIpLHMoImxpZ2h0aW5nLmFtYmllbnQiKSxzKCJsaWdodGluZy5kaWZmdXNlIikscygibGlnaHRpbmcuc3BlY3VsYXIiKSxzKCJsaWdodGluZy5yb3VnaG5lc3MiKSxzKCJsaWdodGluZy5mcmVzbmVsIikscygibGlnaHRwb3NpdGlvbi54IikscygibGlnaHRwb3NpdGlvbi55IikscygibGlnaHRwb3NpdGlvbi56IiksYSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxzKCJ0ZXh0IikscygiaG92ZXJ0ZXh0IikscygiaG92ZXJ0ZW1wbGF0ZSIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjAyLCIuLi8uLi9saWIiOjcxNywiLi9hdHRyaWJ1dGVzIjoxMjI2fV0sMTIzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzdHJlYW10dWJlIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiLCJzaG93TGVnZW5kIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0sY2FsYzp0KCIuL2NhbGMiKS5jYWxjLHBsb3Q6dCgiLi9jb252ZXJ0IiksZXZlbnREYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudHViZXg9dC54LHQudHViZXk9dC55LHQudHViZXo9dC56LHQudHViZXU9ZS50cmFjZUNvb3JkaW5hdGVbM10sdC50dWJldj1lLnRyYWNlQ29vcmRpbmF0ZVs0XSx0LnR1YmV3PWUudHJhY2VDb29yZGluYXRlWzVdLHQubm9ybT1lLnRyYWNlQ29vcmRpbmF0ZVs2XSx0LmRpdmVyZ2VuY2U9ZS50cmFjZUNvb3JkaW5hdGVbN10sZGVsZXRlIHQueCxkZWxldGUgdC55LGRlbGV0ZSB0LnosdH0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6ODA1LCIuL2F0dHJpYnV0ZXMiOjEyMjYsIi4vY2FsYyI6MTIyNywiLi9jb252ZXJ0IjoxMjI4LCIuL2RlZmF1bHRzIjoxMjI5fV0sMTIzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbD10KCIuLi9waWUvYXR0cmlidXRlcyIpLGM9dCgiLi9jb25zdGFudHMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17bGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHBhcmVudHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGJyYW5jaHZhbHVlczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmVtYWluZGVyIiwidG90YWwiXSxkZmx0OiJyZW1haW5kZXIiLGVkaXRUeXBlOiJjYWxjIn0sY291bnQ6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImJyYW5jaGVzIiwibGVhdmVzIl0sZGZsdDoibGVhdmVzIixlZGl0VHlwZToiY2FsYyJ9LGxldmVsOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixhbmltOiEwfSxtYXhkZXB0aDp7dmFsVHlwZToiaW50ZWdlciIsZWRpdFR5cGU6InBsb3QiLGRmbHQ6LTF9LG1hcmtlcjp1KHtjb2xvcnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbGluZTp7Y29sb3I6dSh7fSxsLm1hcmtlci5saW5lLmNvbG9yLHtkZmx0Om51bGx9KSx3aWR0aDp1KHt9LGwubWFya2VyLmxpbmUud2lkdGgse2RmbHQ6MX0pLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxvKCJtYXJrZXIiLHtjb2xvckF0dHI6ImNvbG9ycyIsYW5pbTohMX0pKSxsZWFmOntvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJzdHlsZSIsbWluOjAsbWF4OjF9LGVkaXRUeXBlOiJwbG90In0sdGV4dDpsLnRleHQsdGV4dGluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwiY3VycmVudCBwYXRoIiwicGVyY2VudCByb290IiwicGVyY2VudCBlbnRyeSIsInBlcmNlbnQgcGFyZW50Il0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJwbG90In0sdGV4dHRlbXBsYXRlOmkoe2VkaXRUeXBlOiJwbG90In0se2tleXM6Yy5ldmVudERhdGFLZXlzLmNvbmNhdChbImxhYmVsIiwidmFsdWUiXSl9KSxob3ZlcnRleHQ6bC5ob3ZlcnRleHQsaG92ZXJpbmZvOnUoe30sbi5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJuYW1lIiwiY3VycmVudCBwYXRoIiwicGVyY2VudCByb290IiwicGVyY2VudCBlbnRyeSIsInBlcmNlbnQgcGFyZW50Il0sZGZsdDoibGFiZWwrdGV4dCt2YWx1ZStuYW1lIn0pLGhvdmVydGVtcGxhdGU6YSh7fSx7a2V5czpjLmV2ZW50RGF0YUtleXN9KSx0ZXh0Zm9udDpsLnRleHRmb250LGluc2lkZXRleHRvcmllbnRhdGlvbjpsLmluc2lkZXRleHRvcmllbnRhdGlvbixpbnNpZGV0ZXh0Zm9udDpsLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDp1KHt9LGwub3V0c2lkZXRleHRmb250LHt9KSxkb21haW46cyh7bmFtZToic3VuYnVyc3QiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTk5LCIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc2MiwiLi4vLi4vcGxvdHMvZG9tYWluIjo3OTAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg0MSwiLi4vcGllL2F0dHJpYnV0ZXMiOjEwOTQsIi4vY29uc3RhbnRzIjoxMjM0fV0sMTIzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0ic3VuYnVyc3QiLHIucGxvdD1mdW5jdGlvbih0LGUsYSxpKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGEsaSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGEsaSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsYSxpKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNn1dLDEyMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMtaGllcmFyY2h5IiksYT10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2Uscz10KCIuLi9waWUvY2FsYyIpLm1ha2VQdWxsQ29sb3JGbixsPXQoIi4uL3BpZS9jYWxjIikuZ2VuZXJhdGVFeHRlbmRlZENvbG9ycyxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmNhbGMsdT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQUxNT1NUX0VRVUFMLGg9e30sZj17fTtyLmNhbGM9ZnVuY3Rpb24odCxlKXt2YXIgcixsLGgsZixwLGQsZz10Ll9mdWxsTGF5b3V0LHY9ZS5pZHMsbT1pLmlzQXJyYXlPclR5cGVkQXJyYXkodikseT1lLmxhYmVscyx4PWUucGFyZW50cyxiPWUudmFsdWVzLF89aS5pc0FycmF5T3JUeXBlZEFycmF5KGIpLHc9W10saz17fSxUPXt9LE09ZnVuY3Rpb24odCl7cmV0dXJuIHR8fCJudW1iZXIiPT10eXBlb2YgdH0sQT1mdW5jdGlvbih0KXtyZXR1cm4hX3x8YShiW3RdKSYmYlt0XT49MH07bT8ocj1NYXRoLm1pbih2Lmxlbmd0aCx4Lmxlbmd0aCksbD1mdW5jdGlvbih0KXtyZXR1cm4gTSh2W3RdKSYmQSh0KX0saD1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHZbdF0pfSk6KHI9TWF0aC5taW4oeS5sZW5ndGgseC5sZW5ndGgpLGw9ZnVuY3Rpb24odCl7cmV0dXJuIE0oeVt0XSkmJkEodCl9LGg9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh5W3RdKX0pLF8mJihyPU1hdGgubWluKHIsYi5sZW5ndGgpKTtmb3IodmFyIFM9MDtTPHI7UysrKWlmKGwoUykpe3ZhciBFPWgoUyksTD1NKHhbU10pP1N0cmluZyh4W1NdKToiIixDPXtpOlMsaWQ6RSxwaWQ6TCxsYWJlbDpNKHlbU10pP1N0cmluZyh5W1NdKToiIn07XyYmKEMudj0rYltTXSksdy5wdXNoKEMpLHA9RSxrW2Y9TF0/a1tmXS5wdXNoKHApOmtbZl09W3BdLFRbcF09MX1pZihrWyIiXSl7aWYoa1siIl0ubGVuZ3RoPjEpe2Zvcih2YXIgUD1pLnJhbmRzdHIoKSxPPTA7Tzx3Lmxlbmd0aDtPKyspIiI9PT13W09dLnBpZCYmKHdbT10ucGlkPVApO3cudW5zaGlmdCh7aGFzTXVsdGlwbGVSb290czohMCxpZDpQLHBpZDoiIixsYWJlbDoiIn0pfX1lbHNle3ZhciB6LEk9W107Zm9yKHogaW4gaylUW3pdfHxJLnB1c2goeik7aWYoMSE9PUkubGVuZ3RoKXJldHVybiBpLndhcm4oIk11bHRpcGxlIGltcGxpZWQgcm9vdHMsIGNhbm5vdCBidWlsZCAiK2UudHlwZSsiIGhpZXJhcmNoeS4iKTt6PUlbMF0sdy51bnNoaWZ0KHtoYXNJbXBsaWVkUm9vdDohMCxpZDp6LHBpZDoiIixsYWJlbDp6fSl9dHJ5e2Q9bi5zdHJhdGlmeSgpLmlkKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkucGFyZW50SWQoZnVuY3Rpb24odCl7cmV0dXJuIHQucGlkfSkodyl9Y2F0Y2godCl7cmV0dXJuIGkud2FybigiRmFpbGVkIHRvIGJ1aWxkICIrZS50eXBlKyIgaGllcmFyY2h5LiBFcnJvcjogIit0Lm1lc3NhZ2UpfXZhciBEPW4uaGllcmFyY2h5KGQpLFI9ITE7aWYoXylzd2l0Y2goZS5icmFuY2h2YWx1ZXMpe2Nhc2UicmVtYWluZGVyIjpELnN1bShmdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhLnZ9KTticmVhaztjYXNlInRvdGFsIjpELmVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhLmRhdGEscj1lLnY7aWYodC5jaGlsZHJlbil7dmFyIG49dC5jaGlsZHJlbi5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLmRhdGEuZGF0YS52fSwwKTtpZigoZS5oYXNJbXBsaWVkUm9vdHx8ZS5oYXNNdWx0aXBsZVJvb3RzKSYmKHI9bikscjxuKnUpcmV0dXJuIFI9ITAsaS53YXJuKFsiVG90YWwgdmFsdWUgZm9yIG5vZGUiLHQuZGF0YS5kYXRhLmlkLCJpcyBzbWFsbGVyIHRoYW4gdGhlIHN1bSBvZiBpdHMgY2hpbGRyZW4uIiwiXG5wYXJlbnQgdmFsdWUgPSIsciwiXG5jaGlsZHJlbiBzdW0gPSIsbl0uam9pbigiICIpKX10LnZhbHVlPXJ9KX1lbHNlIWZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBhPTA7dmFyIGk9ZS5jaGlsZHJlbjtpZihpKXtmb3IodmFyIG89aS5sZW5ndGgscz0wO3M8bztzKyspYSs9dChpW3NdLHIsbik7bi5icmFuY2hlcyYmYSsrfWVsc2Ugbi5sZWF2ZXMmJmErKztlLnZhbHVlPWUuZGF0YS5kYXRhLnZhbHVlPWE7ci5fdmFsdWVzfHwoci5fdmFsdWVzPVtdKTtyLl92YWx1ZXNbZS5kYXRhLmRhdGEuaV09YTtyZXR1cm4gYX0oRCxlLHticmFuY2hlczotMSE9PWUuY291bnQuaW5kZXhPZigiYnJhbmNoZXMiKSxsZWF2ZXM6LTEhPT1lLmNvdW50LmluZGV4T2YoImxlYXZlcyIpfSk7aWYoIVIpe3ZhciBGLEI7RC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudmFsdWUtdC52YWx1ZX0pO3ZhciBOPWUubWFya2VyLmNvbG9yc3x8W10saj0hIU4ubGVuZ3RoO3JldHVybiBlLl9oYXNDb2xvcnNjYWxlPyhqfHwoTj1fP2UudmFsdWVzOmUuX3ZhbHVlcyksYyh0LGUse3ZhbHM6Tixjb250YWluZXJTdHI6Im1hcmtlciIsY0xldHRlcjoiYyJ9KSxCPW8oZS5tYXJrZXIpKTpGPXMoZ1siXyIrZS50eXBlKyJjb2xvcm1hcCJdKSxELmVhY2goZnVuY3Rpb24odCl7dmFyIHI9dC5kYXRhLmRhdGE7ci5jb2xvcj1lLl9oYXNDb2xvcnNjYWxlP0IoTltyLmldKTpGKE5bci5pXSxyLmlkKX0pLHdbMF0uaGllcmFyY2h5PUQsd319LHIuX3J1bkNyb3NzVHJhY2VDYWxjPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fZnVsbExheW91dCxuPWUuY2FsY2RhdGEsYT1yW3QrImNvbG9yd2F5Il0saT1yWyJfIit0KyJjb2xvcm1hcCJdO3JbImV4dGVuZCIrdCsiY29sb3JzIl0mJihhPWwoYSwidHJlZW1hcCI9PT10P2Y6aCkpO3ZhciBvPTA7ZnVuY3Rpb24gcyh0KXt2YXIgZT10LmRhdGEuZGF0YSxyPWUuaWQ7ITE9PT1lLmNvbG9yJiYoaVtyXT9lLmNvbG9yPWlbcl06dC5wYXJlbnQ/dC5wYXJlbnQucGFyZW50P2UuY29sb3I9dC5wYXJlbnQuZGF0YS5kYXRhLmNvbG9yOihpW3JdPWUuY29sb3I9YVtvJWEubGVuZ3RoXSxvKyspOmUuY29sb3I9InJnYmEoMCwwLDAsMCkiKX1mb3IodmFyIGM9MDtjPG4ubGVuZ3RoO2MrKyl7dmFyIHU9bltjXVswXTt1LnRyYWNlLnR5cGU9PT10JiZ1LmhpZXJhcmNoeSYmdS5oaWVyYXJjaHkuZWFjaChzKX19LHIuY3Jvc3NUcmFjZUNhbGM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuX3J1bkNyb3NzVHJhY2VDYWxjKCJzdW5idXJzdCIsdCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjA0LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2OTMsIi4uLy4uL2xpYiI6NzE3LCIuLi9waWUvY2FsYyI6MTA5NiwiZDMtaGllcmFyY2h5IjoxNTksImZhc3QtaXNudW1lcmljIjoyMjh9XSwxMjM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Q0xJQ0tfVFJBTlNJVElPTl9USU1FOjc1MCxDTElDS19UUkFOU0lUSU9OX0VBU0lORzoibGluZWFyIixldmVudERhdGFLZXlzOlsiY3VycmVudFBhdGgiLCJyb290IiwiZW50cnkiLCJwZXJjZW50Um9vdCIsInBlcmNlbnRFbnRyeSIsInBlcmNlbnRQYXJlbnQiXX19LHt9XSwxMjM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxsPXMuaGFzQ29sb3JzY2FsZSxjPXMuaGFuZGxlRGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgaD11KCJsYWJlbHMiKSxmPXUoInBhcmVudHMiKTtpZihoJiZoLmxlbmd0aCYmZiYmZi5sZW5ndGgpe3ZhciBwPXUoInZhbHVlcyIpO3AmJnAubGVuZ3RoP3UoImJyYW5jaHZhbHVlcyIpOnUoImNvdW50IiksdSgibGV2ZWwiKSx1KCJtYXhkZXB0aCIpLHUoIm1hcmtlci5saW5lLndpZHRoIikmJnUoIm1hcmtlci5saW5lLmNvbG9yIixzLnBhcGVyX2JnY29sb3IpLHUoIm1hcmtlci5jb2xvcnMiKTt2YXIgZD1lLl9oYXNDb2xvcnNjYWxlPWwodCwibWFya2VyIiwiY29sb3JzIil8fCh0Lm1hcmtlcnx8e30pLmNvbG9yYXhpcztkJiZjKHQsZSxzLHUse3ByZWZpeDoibWFya2VyLiIsY0xldHRlcjoiYyJ9KSx1KCJsZWFmLm9wYWNpdHkiLGQ/MTouNyk7dmFyIGc9dSgidGV4dCIpO3UoInRleHR0ZW1wbGF0ZSIpLGUudGV4dHRlbXBsYXRlfHx1KCJ0ZXh0aW5mbyIsQXJyYXkuaXNBcnJheShnKT8idGV4dCtsYWJlbCI6ImxhYmVsIiksdSgiaG92ZXJ0ZXh0IiksdSgiaG92ZXJ0ZW1wbGF0ZSIpO28odCxlLHMsdSwiYXV0byIse21vZHVsZUhhc1NlbGVjdGVkOiExLG1vZHVsZUhhc1Vuc2VsZWN0ZWQ6ITEsbW9kdWxlSGFzQ29uc3RyYWluOiExLG1vZHVsZUhhc0NsaXBvbmF4aXM6ITEsbW9kdWxlSGFzVGV4dGFuZ2xlOiExLG1vZHVsZUhhc0luc2lkZWFuY2hvcjohMX0pLHUoImluc2lkZXRleHRvcmllbnRhdGlvbiIpLGkoZSxzLHUpLGUuX2xlbmd0aD1udWxsfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYwNCwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzkwLCIuLi9iYXIvZGVmYXVsdHMiOjg2MCwiLi9hdHRyaWJ1dGVzIjoxMjMxfV0sMTIzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vbGliL2V2ZW50cyIpLGM9dCgiLi9oZWxwZXJzIiksdT10KCIuLi9waWUvaGVscGVycyIpLmZvcm1hdFBpZVZhbHVlO2Z1bmN0aW9uIGgodCxlLHIpe2Zvcih2YXIgbj10LmRhdGEuZGF0YSxhPXtjdXJ2ZU51bWJlcjplLmluZGV4LHBvaW50TnVtYmVyOm4uaSxkYXRhOmUuX2lucHV0LGZ1bGxEYXRhOmV9LG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIHM9cltvXTtzIGluIHQmJihhW3NdPXRbc10pfXJldHVybiJwYXJlbnRTdHJpbmciaW4gdCYmIWMuaXNIaWVyYXJjaHlSb290KHQpJiYoYS5wYXJlbnQ9dC5wYXJlbnRTdHJpbmcpLGkoYSxlLG4uaSksYX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxmKXt2YXIgcD1pWzBdLGQ9cC50cmFjZSxnPXAuaGllcmFyY2h5LHY9InN1bmJ1cnN0Ij09PWQudHlwZSxtPSJ0cmVlbWFwIj09PWQudHlwZTsiX2hhc0hvdmVyTGFiZWwiaW4gZHx8KGQuX2hhc0hvdmVyTGFiZWw9ITEpLCJfaGFzSG92ZXJFdmVudCJpbiBkfHwoZC5faGFzSG92ZXJFdmVudD0hMSk7dC5vbigibW91c2VvdmVyIixmdW5jdGlvbihhKXt2YXIgaT1yLl9mdWxsTGF5b3V0O2lmKCFyLl9kcmFnZ2luZyYmITEhPT1pLmhvdmVybW9kZSl7dmFyIGw9ci5fZnVsbERhdGFbZC5pbmRleF0seT1hLmRhdGEuZGF0YSx4PXkuaSxiPWMuaXNIaWVyYXJjaHlSb290KGEpLF89Yy5nZXRQYXJlbnQoZyxhKSx3PWMuZ2V0VmFsdWUoYSksaz1mdW5jdGlvbih0KXtyZXR1cm4gcy5jYXN0T3B0aW9uKGwseCx0KX0sVD1rKCJob3ZlcnRlbXBsYXRlIiksTT1vLmNhc3RIb3ZlcmluZm8obCxpLHgpLEE9aS5zZXBhcmF0b3JzO2lmKFR8fE0mJiJub25lIiE9PU0mJiJza2lwIiE9PU0pe3ZhciBTLEU7diYmKFM9cC5jeCthLnB4bWlkWzBdKigxLWEuckluc2NyaWJlZCksRT1wLmN5K2EucHhtaWRbMV0qKDEtYS5ySW5zY3JpYmVkKSksbSYmKFM9YS5faG92ZXJYLEU9YS5faG92ZXJZKTt2YXIgTCxDPXt9LFA9W10sTz1bXSx6PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09UC5pbmRleE9mKHQpfTtNJiYoUD0iYWxsIj09PU0/bC5fbW9kdWxlLmF0dHJpYnV0ZXMuaG92ZXJpbmZvLmZsYWdzOk0uc3BsaXQoIisiKSksQy5sYWJlbD15LmxhYmVsLHooImxhYmVsIikmJkMubGFiZWwmJk8ucHVzaChDLmxhYmVsKSx5Lmhhc093blByb3BlcnR5KCJ2IikmJihDLnZhbHVlPXkudixDLnZhbHVlTGFiZWw9dShDLnZhbHVlLEEpLHooInZhbHVlIikmJk8ucHVzaChDLnZhbHVlTGFiZWwpKSxDLmN1cnJlbnRQYXRoPWEuY3VycmVudFBhdGg9Yy5nZXRQYXRoKGEuZGF0YSkseigiY3VycmVudCBwYXRoIikmJiFiJiZPLnB1c2goQy5jdXJyZW50UGF0aCk7dmFyIEk9W10sRD1mdW5jdGlvbigpey0xPT09SS5pbmRleE9mKEwpJiYoTy5wdXNoKEwpLEkucHVzaChMKSl9O0MucGVyY2VudFBhcmVudD1hLnBlcmNlbnRQYXJlbnQ9dy9jLmdldFZhbHVlKF8pLEMucGFyZW50PWEucGFyZW50U3RyaW5nPWMuZ2V0UHRMYWJlbChfKSx6KCJwZXJjZW50IHBhcmVudCIpJiYoTD1jLmZvcm1hdFBlcmNlbnQoQy5wZXJjZW50UGFyZW50LEEpKyIgb2YgIitDLnBhcmVudCxEKCkpLEMucGVyY2VudEVudHJ5PWEucGVyY2VudEVudHJ5PXcvYy5nZXRWYWx1ZShlKSxDLmVudHJ5PWEuZW50cnk9Yy5nZXRQdExhYmVsKGUpLCF6KCJwZXJjZW50IGVudHJ5Iil8fGJ8fGEub25QYXRoYmFyfHwoTD1jLmZvcm1hdFBlcmNlbnQoQy5wZXJjZW50RW50cnksQSkrIiBvZiAiK0MuZW50cnksRCgpKSxDLnBlcmNlbnRSb290PWEucGVyY2VudFJvb3Q9dy9jLmdldFZhbHVlKGcpLEMucm9vdD1hLnJvb3Q9Yy5nZXRQdExhYmVsKGcpLHooInBlcmNlbnQgcm9vdCIpJiYhYiYmKEw9Yy5mb3JtYXRQZXJjZW50KEMucGVyY2VudFJvb3QsQSkrIiBvZiAiK0Mucm9vdCxEKCkpLEMudGV4dD1rKCJob3ZlcnRleHQiKXx8aygidGV4dCIpLHooInRleHQiKSYmKEw9Qy50ZXh0LHMuaXNWYWxpZFRleHRWYWx1ZShMKSYmTy5wdXNoKEwpKTt2YXIgUj17dHJhY2U6bCx5OkUsdGV4dDpPLmpvaW4oIjxicj4iKSxuYW1lOlR8fHooIm5hbWUiKT9sLm5hbWU6dm9pZCAwLGNvbG9yOmsoImhvdmVybGFiZWwuYmdjb2xvciIpfHx5LmNvbG9yLGJvcmRlckNvbG9yOmsoImhvdmVybGFiZWwuYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OmsoImhvdmVybGFiZWwuZm9udC5mYW1pbHkiKSxmb250U2l6ZTprKCJob3ZlcmxhYmVsLmZvbnQuc2l6ZSIpLGZvbnRDb2xvcjprKCJob3ZlcmxhYmVsLmZvbnQuY29sb3IiKSxuYW1lTGVuZ3RoOmsoImhvdmVybGFiZWwubmFtZWxlbmd0aCIpLHRleHRBbGlnbjprKCJob3ZlcmxhYmVsLmFsaWduIiksaG92ZXJ0ZW1wbGF0ZTpULGhvdmVydGVtcGxhdGVMYWJlbHM6QyxldmVudERhdGE6W2goYSxsLGYuZXZlbnREYXRhS2V5cyldfTt2JiYoUi54MD1TLWEuckluc2NyaWJlZCphLnJweDEsUi54MT1TK2Euckluc2NyaWJlZCphLnJweDEsUi5pZGVhbEFsaWduPWEucHhtaWRbMF08MD8ibGVmdCI6InJpZ2h0IiksbSYmKFIueD1TLFIuaWRlYWxBbGlnbj1TPDA/ImxlZnQiOiJyaWdodCIpLG8ubG9uZUhvdmVyKFIse2NvbnRhaW5lcjppLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjppLl9wYXBlci5ub2RlKCksZ2Q6cn0pLGQuX2hhc0hvdmVyTGFiZWw9ITB9aWYobSl7dmFyIEY9dC5zZWxlY3QoInBhdGguc3VyZmFjZSIpO2Yuc3R5bGVPbmUoRixhLGwse2hvdmVyZWQ6ITB9KX1kLl9oYXNIb3ZlckV2ZW50PSEwLHIuZW1pdCgicGxvdGx5X2hvdmVyIix7cG9pbnRzOltoKGEsbCxmLmV2ZW50RGF0YUtleXMpXSxldmVudDpuLmV2ZW50fSl9fSksdC5vbigibW91c2VvdXQiLGZ1bmN0aW9uKGUpe3ZhciBhPXIuX2Z1bGxMYXlvdXQsaT1yLl9mdWxsRGF0YVtkLmluZGV4XSxzPW4uc2VsZWN0KHRoaXMpLmRhdHVtKCk7aWYoZC5faGFzSG92ZXJFdmVudCYmKGUub3JpZ2luYWxFdmVudD1uLmV2ZW50LHIuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtwb2ludHM6W2gocyxpLGYuZXZlbnREYXRhS2V5cyldLGV2ZW50Om4uZXZlbnR9KSxkLl9oYXNIb3ZlckV2ZW50PSExKSxkLl9oYXNIb3ZlckxhYmVsJiYoby5sb25lVW5ob3ZlcihhLl9ob3ZlcmxheWVyLm5vZGUoKSksZC5faGFzSG92ZXJMYWJlbD0hMSksbSl7dmFyIGw9dC5zZWxlY3QoInBhdGguc3VyZmFjZSIpO2Yuc3R5bGVPbmUobCxzLGkse2hvdmVyZWQ6ITF9KX19KSx0Lm9uKCJjbGljayIsZnVuY3Rpb24odCl7dmFyIGU9ci5fZnVsbExheW91dCxpPXIuX2Z1bGxEYXRhW2QuaW5kZXhdLHM9diYmKGMuaXNIaWVyYXJjaHlSb290KHQpfHxjLmlzTGVhZih0KSksdT1jLmdldFB0SWQodCkscD1jLmlzRW50cnkodCk/Yy5maW5kRW50cnlXaXRoQ2hpbGQoZyx1KTpjLmZpbmRFbnRyeVdpdGhMZXZlbChnLHUpLG09Yy5nZXRQdElkKHApLHk9e3BvaW50czpbaCh0LGksZi5ldmVudERhdGFLZXlzKV0sZXZlbnQ6bi5ldmVudH07c3x8KHkubmV4dExldmVsPW0pO3ZhciB4PWwudHJpZ2dlckhhbmRsZXIociwicGxvdGx5XyIrZC50eXBlKyJjbGljayIseSk7aWYoITEhPT14JiZlLmhvdmVybW9kZSYmKHIuX2hvdmVyZGF0YT1baCh0LGksZi5ldmVudERhdGFLZXlzKV0sby5jbGljayhyLG4uZXZlbnQpKSwhcyYmITEhPT14JiYhci5fZHJhZ2dpbmcmJiFyLl90cmFuc2l0aW9uaW5nKXthLmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLGksZS5fdHJhY2VQcmVHVUlbaS51aWRdLHtsZXZlbDppLmxldmVsfSk7dmFyIGI9e2RhdGE6W3tsZXZlbDptfV0sdHJhY2VzOltkLmluZGV4XX0sXz17ZnJhbWU6e3JlZHJhdzohMSxkdXJhdGlvbjpmLnRyYW5zaXRpb25UaW1lfSx0cmFuc2l0aW9uOntkdXJhdGlvbjpmLnRyYW5zaXRpb25UaW1lLGVhc2luZzpmLnRyYW5zaXRpb25FYXNpbmd9LG1vZGU6ImltbWVkaWF0ZSIsZnJvbWN1cnJlbnQ6ITB9O28ubG9uZVVuaG92ZXIoZS5faG92ZXJsYXllci5ub2RlKCkpLGEuY2FsbCgiYW5pbWF0ZSIscixiLF8pfX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2MzAsIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6NjI3LCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL2V2ZW50cyI6NzA3LCIuLi8uLi9yZWdpc3RyeSI6ODQ2LCIuLi9waWUvaGVscGVycyI6MTA5OSwiLi9oZWxwZXJzIjoxMjM3LGQzOjE2NX1dLDEyMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksbz10KCIuLi9waWUvaGVscGVycyIpO2Z1bmN0aW9uIHModCl7cmV0dXJuIHQuZGF0YS5kYXRhLnBpZH1yLmZpbmRFbnRyeVdpdGhMZXZlbD1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiBlJiZ0LmVhY2hBZnRlcihmdW5jdGlvbih0KXtpZihyLmdldFB0SWQodCk9PT1lKXJldHVybiBuPXQuY29weSgpfSksbnx8dH0sci5maW5kRW50cnlXaXRoQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gdC5lYWNoQWZ0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciBhPXQuY2hpbGRyZW58fFtdLGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIG89YVtpXTtpZihyLmdldFB0SWQobyk9PT1lKXJldHVybiBuPXQuY29weSgpfX0pLG58fHR9LHIuaXNFbnRyeT1mdW5jdGlvbih0KXtyZXR1cm4hdC5wYXJlbnR9LHIuaXNMZWFmPWZ1bmN0aW9uKHQpe3JldHVybiF0LmNoaWxkcmVufSxyLmdldFB0SWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YS5kYXRhLmlkfSxyLmdldFB0TGFiZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YS5kYXRhLmxhYmVsfSxyLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSxyLmlzSGllcmFyY2h5Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4iIj09PXModCl9LHIuc2V0U2xpY2VDdXJzb3I9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPW4uaXNUcmFuc2l0aW9uaW5nO2lmKCFhKXt2YXIgbz10LmRhdHVtKCk7YT1uLmhpZGVPblJvb3QmJnIuaXNIaWVyYXJjaHlSb290KG8pfHxuLmhpZGVPbkxlYXZlcyYmci5pc0xlYWYobyl9aSh0LGE/bnVsbDoicG9pbnRlciIpfSxyLmdldEluc2lkZVRleHRGb250S2V5PWZ1bmN0aW9uKHQsZSxyLGEsaSl7dmFyIG89KGl8fHt9KS5vblBhdGhiYXI/InBhdGhiYXIudGV4dGZvbnQiOiJpbnNpZGV0ZXh0Zm9udCIscz1yLmRhdGEuZGF0YS5pO3JldHVybiBuLmNhc3RPcHRpb24oZSxzLG8rIi4iK3QpfHxuLmNhc3RPcHRpb24oZSxzLCJ0ZXh0Zm9udC4iK3QpfHxhLnNpemV9LHIuZ2V0T3V0c2lkZVRleHRGb250S2V5PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBpPXIuZGF0YS5kYXRhLmk7cmV0dXJuIG4uY2FzdE9wdGlvbihlLGksIm91dHNpZGV0ZXh0Zm9udC4iK3QpfHxuLmNhc3RPcHRpb24oZSxpLCJ0ZXh0Zm9udC4iK3QpfHxhLnNpemV9LHIuaXNPdXRzaWRlVGV4dD1mdW5jdGlvbih0LGUpe3JldHVybiF0Ll9oYXNDb2xvcnNjYWxlJiZyLmlzSGllcmFyY2h5Um9vdChlKX0sci5kZXRlcm1pbmVUZXh0Rm9udD1mdW5jdGlvbih0LGUsaSxvKXtyZXR1cm4gci5pc091dHNpZGVUZXh0KHQsZSk/ZnVuY3Rpb24odCxlLG4pe3JldHVybntjb2xvcjpyLmdldE91dHNpZGVUZXh0Rm9udEtleSgiY29sb3IiLHQsZSxuKSxmYW1pbHk6ci5nZXRPdXRzaWRlVGV4dEZvbnRLZXkoImZhbWlseSIsdCxlLG4pLHNpemU6ci5nZXRPdXRzaWRlVGV4dEZvbnRLZXkoInNpemUiLHQsZSxuKX19KHQsZSxpKTpmdW5jdGlvbih0LGUsaSxvKXt2YXIgcz0ob3x8e30pLm9uUGF0aGJhcixsPWUuZGF0YS5kYXRhLGM9bC5pLHU9bi5jYXN0T3B0aW9uKHQsYywocz8icGF0aGJhci50ZXh0Zm9udCI6Imluc2lkZXRleHRmb250IikrIi5jb2xvciIpO3JldHVybiF1JiZ0Ll9pbnB1dC50ZXh0Zm9udCYmKHU9bi5jYXN0T3B0aW9uKHQuX2lucHV0LGMsInRleHRmb250LmNvbG9yIikpLHtjb2xvcjp1fHxhLmNvbnRyYXN0KGwuY29sb3IpLGZhbWlseTpyLmdldEluc2lkZVRleHRGb250S2V5KCJmYW1pbHkiLHQsZSxpLG8pLHNpemU6ci5nZXRJbnNpZGVUZXh0Rm9udEtleSgic2l6ZSIsdCxlLGksbyl9fSh0LGUsaSxvKX0sci5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiEhKHQmJnQuZHVyYXRpb24+MCl9LHIuZ2V0TWF4RGVwdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHQubWF4ZGVwdGg+PTA/dC5tYXhkZXB0aDoxLzB9LHIuaXNIZWFkZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKHIuaXNMZWFmKHQpfHx0LmRlcHRoPT09ZS5fbWF4RGVwdGgtMSl9LHIuZ2V0UGFyZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZmluZEVudHJ5V2l0aExldmVsKHQscyhlKSl9LHIubGlzdFBhdGg9ZnVuY3Rpb24odCxlKXt2YXIgbj10LnBhcmVudDtpZighbilyZXR1cm5bXTt2YXIgYT1lP1tuLmRhdGFbZV1dOltuXTtyZXR1cm4gci5saXN0UGF0aChuLGUpLmNvbmNhdChhKX0sci5nZXRQYXRoPWZ1bmN0aW9uKHQpe3JldHVybiByLmxpc3RQYXRoKHQsImxhYmVsIikuam9pbigiLyIpKyIvIn0sci5mb3JtYXRWYWx1ZT1vLmZvcm1hdFBpZVZhbHVlLHIuZm9ybWF0UGVyY2VudD1mdW5jdGlvbih0LGUpe3ZhciByPW4uZm9ybWF0UGVyY2VudCh0LDApO3JldHVybiIwJSI9PT1yJiYocj1vLmZvcm1hdFBpZVBlcmNlbnQodCxlKSkscn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL3NldGN1cnNvciI6NzM3LCIuLi9waWUvaGVscGVycyI6MTA5OX1dLDEyMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic3VuYnVyc3QiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbXSxhbmltYXRhYmxlOiEwLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKS5jYWxjLGNyb3NzVHJhY2VDYWxjOnQoIi4vY2FsYyIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dCgiLi9wbG90IikucGxvdCxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxtZXRhOnt9fX0seyIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTEzOCwiLi9hdHRyaWJ1dGVzIjoxMjMxLCIuL2Jhc2VfcGxvdCI6MTIzMiwiLi9jYWxjIjoxMjMzLCIuL2RlZmF1bHRzIjoxMjM1LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMjM5LCIuL2xheW91dF9kZWZhdWx0cyI6MTI0MCwiLi9wbG90IjoxMjQxLCIuL3N0eWxlIjoxMjQyfV0sMTIzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3N1bmJ1cnN0Y29sb3J3YXk6e3ZhbFR5cGU6ImNvbG9ybGlzdCIsZWRpdFR5cGU6ImNhbGMifSxleHRlbmRzdW5idXJzdGNvbG9yczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDEyNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXIoInN1bmJ1cnN0Y29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHN1bmJ1cnN0Y29sb3JzIil9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMjM5fV0sMTI0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiZDMtaGllcmFyY2h5IiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksbD10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IiksYz1sLnJlY29yZE1pblRleHRTaXplLHU9bC5jbGVhck1pblRleHRTaXplLGg9dCgiLi4vcGllL3Bsb3QiKSxmPWguY29tcHV0ZVRyYW5zZm9ybSxwPWgudHJhbnNmb3JtSW5zaWRlVGV4dCxkPXQoIi4vc3R5bGUiKS5zdHlsZU9uZSxnPXQoIi4uL2Jhci9zdHlsZSIpLnJlc2l6ZVRleHQsdj10KCIuL2Z4IiksbT10KCIuL2NvbnN0YW50cyIpLHk9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24geCh0LGUsbCx1KXt2YXIgaD10Ll9mdWxsTGF5b3V0LGc9IWgudW5pZm9ybXRleHQubW9kZSYmeS5oYXNUcmFuc2l0aW9uKHUpLHg9bi5zZWxlY3QobCkuc2VsZWN0QWxsKCJnLnNsaWNlIiksXz1lWzBdLHc9Xy50cmFjZSxrPV8uaGllcmFyY2h5LFQ9eS5maW5kRW50cnlXaXRoTGV2ZWwoayx3LmxldmVsKSxNPXkuZ2V0TWF4RGVwdGgodyksQT1oLl9zaXplLFM9dy5kb21haW4sRT1BLncqKFMueFsxXS1TLnhbMF0pLEw9QS5oKihTLnlbMV0tUy55WzBdKSxDPS41Kk1hdGgubWluKEUsTCksUD1fLmN4PUEubCtBLncqKFMueFsxXStTLnhbMF0pLzIsTz1fLmN5PUEudCtBLmgqKDEtUy55WzBdKS1MLzI7aWYoIVQpcmV0dXJuIHgucmVtb3ZlKCk7dmFyIHo9bnVsbCxJPXt9O2cmJnguZWFjaChmdW5jdGlvbih0KXtJW3kuZ2V0UHRJZCh0KV09e3JweDA6dC5ycHgwLHJweDE6dC5ycHgxLHgwOnQueDAseDE6dC54MSx0cmFuc2Zvcm06dC50cmFuc2Zvcm19LCF6JiZ5LmlzRW50cnkodCkmJih6PXQpfSk7dmFyIEQ9ZnVuY3Rpb24odCl7cmV0dXJuIGEucGFydGl0aW9uKCkuc2l6ZShbMipNYXRoLlBJLHQuaGVpZ2h0KzFdKSh0KX0oVCkuZGVzY2VuZGFudHMoKSxSPVQuaGVpZ2h0KzEsRj0wLEI9TTtfLmhhc011bHRpcGxlUm9vdHMmJnkuaXNIaWVyYXJjaHlSb290KFQpJiYoRD1ELnNsaWNlKDEpLFItPTEsRj0xLEIrPTEpLEQ9RC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueTE8PUJ9KTt2YXIgTj1NYXRoLm1pbihSLE0pLGo9ZnVuY3Rpb24odCl7cmV0dXJuKHQtRikvTipDfSxWPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QqTWF0aC5jb3MoZSksLXQqTWF0aC5zaW4oZSldfSxVPWZ1bmN0aW9uKHQpe3JldHVybiBvLnBhdGhBbm51bHVzKHQucnB4MCx0LnJweDEsdC54MCx0LngxLFAsTyl9LHE9ZnVuY3Rpb24odCl7cmV0dXJuIFArYih0KVswXSoodC50cmFuc2Zvcm0uckNlbnRlcnx8MCkrKHQudHJhbnNmb3JtLnh8fDApfSxIPWZ1bmN0aW9uKHQpe3JldHVybiBPK2IodClbMV0qKHQudHJhbnNmb3JtLnJDZW50ZXJ8fDApKyh0LnRyYW5zZm9ybS55fHwwKX07KHg9eC5kYXRhKEQseS5nZXRQdElkKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZSIsITApLGc/eC5leGl0KCkudHJhbnNpdGlvbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LnNlbGVjdCgicGF0aC5zdXJmYWNlIikudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGUscj15LmdldFB0SWQodCksYT1JW3JdLGk9SVt5LmdldFB0SWQoVCldO2lmKGkpe3ZhciBvPXQueDE+aS54MT8yKk1hdGguUEk6MDtlPXQucnB4MTxpLnJweDE/e3JweDA6MCxycHgxOjB9Ont4MDpvLHgxOm99fWVsc2V7dmFyIHMsbD15LmdldFB0SWQodC5wYXJlbnQpO3guZWFjaChmdW5jdGlvbih0KXtpZih5LmdldFB0SWQodCk9PT1sKXJldHVybiBzPXR9KTt2YXIgYyx1PXMuY2hpbGRyZW47dS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7aWYoeS5nZXRQdElkKHQpPT09cilyZXR1cm4gYz1lfSk7dmFyIGg9dS5sZW5ndGgsZj1uLmludGVycG9sYXRlKHMueDAscy54MSk7ZT17cnB4MDpDLHJweDE6Qyx4MDpmKGMvaCkseDE6ZigoYysxKS9oKX19cmV0dXJuIG4uaW50ZXJwb2xhdGUoYSxlKX0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBVKGUodCkpfX0pLHQuc2VsZWN0KCJnLnNsaWNldGV4dCIpLmF0dHIoIm9wYWNpdHkiLDApfSkucmVtb3ZlKCk6eC5leGl0KCkucmVtb3ZlKCkseC5vcmRlcigpO3ZhciBHPW51bGw7aWYoZyYmeil7dmFyIFk9eS5nZXRQdElkKHopO3guZWFjaChmdW5jdGlvbih0KXtudWxsPT09RyYmeS5nZXRQdElkKHQpPT09WSYmKEc9dC54MSl9KX12YXIgVz14O2Z1bmN0aW9uIFgodCl7dmFyIGU9dC5wYXJlbnQscj1JW3kuZ2V0UHRJZChlKV0sYT17fTtpZihyKXt2YXIgaT1lLmNoaWxkcmVuLG89aS5pbmRleE9mKHQpLHM9aS5sZW5ndGgsbD1uLmludGVycG9sYXRlKHIueDAsci54MSk7YS54MD1sKG8vcyksYS54MT1sKG8vcyl9ZWxzZSBhLngwPWEueDE9MDtyZXR1cm4gYX1nJiYoVz1XLnRyYW5zaXRpb24oKS5lYWNoKCJlbmQiLGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7eS5zZXRTbGljZUN1cnNvcihlLHQse2hpZGVPblJvb3Q6ITAsaGlkZU9uTGVhdmVzOiEwLGlzVHJhbnNpdGlvbmluZzohMX0pfSkpLFcuZWFjaChmdW5jdGlvbihhKXt2YXIgbD1uLnNlbGVjdCh0aGlzKSx1PW8uZW5zdXJlU2luZ2xlKGwsInBhdGgiLCJzdXJmYWNlIixmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSk7YS5ycHgwPWooYS55MCksYS5ycHgxPWooYS55MSksYS54bWlkPShhLngwK2EueDEpLzIsYS5weG1pZD1WKGEucnB4MSxhLnhtaWQpLGEubWlkYW5nbGU9LShhLnhtaWQtTWF0aC5QSS8yKSxhLnN0YXJ0YW5nbGU9LShhLngwLU1hdGguUEkvMiksYS5zdG9wYW5nbGU9LShhLngxLU1hdGguUEkvMiksYS5oYWxmYW5nbGU9LjUqTWF0aC5taW4oby5hbmdsZURlbHRhKGEueDAsYS54MSl8fE1hdGguUEksTWF0aC5QSSksYS5yaW5nPTEtYS5ycHgwL2EucnB4MSxhLnJJbnNjcmliZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10LnJweDAmJm8uaXNGdWxsQ2lyY2xlKFt0LngwLHQueDFdKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMS8oMSsxL01hdGguc2luKHQuaGFsZmFuZ2xlKSksdC5yaW5nLzIpKX0oYSksZz91LnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9SVt5LmdldFB0SWQodCldLGE9e3gwOnQueDAseDE6dC54MSxycHgwOnQucnB4MCxycHgxOnQucnB4MX07aWYocillPXI7ZWxzZSBpZih6KWlmKHQucGFyZW50KWlmKEcpe3ZhciBpPXQueDE+Rz8yKk1hdGguUEk6MDtlPXt4MDppLHgxOml9fWVsc2UgZT17cnB4MDpDLHJweDE6Q30sby5leHRlbmRGbGF0KGUsWCh0KSk7ZWxzZSBlPXtycHgwOjAscnB4MTowfTtlbHNlIGU9e3gwOjAseDE6MH07cmV0dXJuIG4uaW50ZXJwb2xhdGUoZSxhKX0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBVKGUodCkpfX0pOnUuYXR0cigiZCIsVSksbC5jYWxsKHYsVCx0LGUse2V2ZW50RGF0YUtleXM6bS5ldmVudERhdGFLZXlzLHRyYW5zaXRpb25UaW1lOm0uQ0xJQ0tfVFJBTlNJVElPTl9USU1FLHRyYW5zaXRpb25FYXNpbmc6bS5DTElDS19UUkFOU0lUSU9OX0VBU0lOR30pLmNhbGwoeS5zZXRTbGljZUN1cnNvcix0LHtoaWRlT25Sb290OiEwLGhpZGVPbkxlYXZlczohMCxpc1RyYW5zaXRpb25pbmc6dC5fdHJhbnNpdGlvbmluZ30pLHUuY2FsbChkLGEsdyk7dmFyIHg9by5lbnN1cmVTaW5nbGUobCwiZyIsInNsaWNldGV4dCIpLGI9by5lbnN1cmVTaW5nbGUoeCwidGV4dCIsIiIsZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pLGs9by5lbnN1cmVVbmlmb3JtRm9udFNpemUodCx5LmRldGVybWluZVRleHRGb250KHcsYSxoLmZvbnQpKTtiLnRleHQoci5mb3JtYXRTbGljZUxhYmVsKGEsVCx3LGUsaCkpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChpLmZvbnQsaykuY2FsbChzLmNvbnZlcnRUb1RzcGFucyx0KTt2YXIgTT1pLmJCb3goYi5ub2RlKCkpO2EudHJhbnNmb3JtPXAoTSxhLF8pLGEudHJhbnNmb3JtLnRhcmdldFg9cShhKSxhLnRyYW5zZm9ybS50YXJnZXRZPUgoYSk7dmFyIEE9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRyYW5zZm9ybTtyZXR1cm4gZihyLGUpLHIuZm9udFNpemU9ay5zaXplLGMody50eXBlLHIsaCksby5nZXRUZXh0VHJhbnNmb3JtKHIpfTtnP2IudHJhbnNpdGlvbigpLmF0dHJUd2VlbigidHJhbnNmb3JtIixmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZSxyPUlbeS5nZXRQdElkKHQpXSxhPXQudHJhbnNmb3JtO2lmKHIpZT1yO2Vsc2UgaWYoZT17cnB4MTp0LnJweDEsdHJhbnNmb3JtOnt0ZXh0UG9zQW5nbGU6YS50ZXh0UG9zQW5nbGUsc2NhbGU6MCxyb3RhdGU6YS5yb3RhdGUsckNlbnRlcjphLnJDZW50ZXIseDphLngseTphLnl9fSx6KWlmKHQucGFyZW50KWlmKEcpe3ZhciBpPXQueDE+Rz8yKk1hdGguUEk6MDtlLngwPWUueDE9aX1lbHNlIG8uZXh0ZW5kRmxhdChlLFgodCkpO2Vsc2UgZS54MD1lLngxPTA7ZWxzZSBlLngwPWUueDE9MDt2YXIgcz1uLmludGVycG9sYXRlKGUudHJhbnNmb3JtLnRleHRQb3NBbmdsZSx0LnRyYW5zZm9ybS50ZXh0UG9zQW5nbGUpLGw9bi5pbnRlcnBvbGF0ZShlLnJweDEsdC5ycHgxKSx1PW4uaW50ZXJwb2xhdGUoZS54MCx0LngwKSxmPW4uaW50ZXJwb2xhdGUoZS54MSx0LngxKSxwPW4uaW50ZXJwb2xhdGUoZS50cmFuc2Zvcm0uc2NhbGUsYS5zY2FsZSksZD1uLmludGVycG9sYXRlKGUudHJhbnNmb3JtLnJvdGF0ZSxhLnJvdGF0ZSksZz0wPT09YS5yQ2VudGVyPzM6MD09PWUudHJhbnNmb3JtLnJDZW50ZXI/MS8zOjEsdj1uLmludGVycG9sYXRlKGUudHJhbnNmb3JtLnJDZW50ZXIsYS5yQ2VudGVyKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bCh0KSxyPXUodCksbj1mKHQpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIHYoTWF0aC5wb3codCxnKSl9KHQpLG89VihlLChyK24pLzIpLG09cyh0KSx5PXtweG1pZDpvLHJweDE6ZSx0cmFuc2Zvcm06e3RleHRQb3NBbmdsZTptLHJDZW50ZXI6aSx4OmEueCx5OmEueX19O3JldHVybiBjKHcudHlwZSxhLGgpLHt0cmFuc2Zvcm06e3RhcmdldFg6cSh5KSx0YXJnZXRZOkgoeSksc2NhbGU6cCh0KSxyb3RhdGU6ZCh0KSxyQ2VudGVyOml9fX19KHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQShlKHQpLE0pfX0pOmIuYXR0cigidHJhbnNmb3JtIixBKGEsTSkpfSl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gZT10LnJweDEscj10LnRyYW5zZm9ybS50ZXh0UG9zQW5nbGUsW2UqTWF0aC5zaW4ociksLWUqTWF0aC5jb3MocildO3ZhciBlLHJ9ci5wbG90PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBpLG8scz10Ll9mdWxsTGF5b3V0LGw9cy5fc3VuYnVyc3RsYXllcixjPSFyLGg9IXMudW5pZm9ybXRleHQubW9kZSYmeS5oYXNUcmFuc2l0aW9uKHIpOyh1KCJzdW5idXJzdCIscyksKGk9bC5zZWxlY3RBbGwoImcudHJhY2Uuc3VuYnVyc3QiKS5kYXRhKGUsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2UudWlkfSkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidHJhY2UiLCEwKS5jbGFzc2VkKCJzdW5idXJzdCIsITApLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIiksaS5vcmRlcigpLGgpPyhhJiYobz1hKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLmVhc2Uoci5lYXNpbmcpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtvJiZvKCl9KS5lYWNoKCJpbnRlcnJ1cHQiLGZ1bmN0aW9uKCl7byYmbygpfSkuZWFjaChmdW5jdGlvbigpe2wuc2VsZWN0QWxsKCJnLnRyYWNlIikuZWFjaChmdW5jdGlvbihlKXt4KHQsZSx0aGlzLHIpfSl9KSk6KGkuZWFjaChmdW5jdGlvbihlKXt4KHQsZSx0aGlzLHIpfSkscy51bmlmb3JtdGV4dC5tb2RlJiZnKHQscy5fc3VuYnVyc3RsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpLCJzdW5idXJzdCIpKTtjJiZpLmV4aXQoKS5yZW1vdmUoKX0sci5mb3JtYXRTbGljZUxhYmVsPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIGk9ci50ZXh0dGVtcGxhdGUscz1yLnRleHRpbmZvO2lmKCEoaXx8cyYmIm5vbmUiIT09cykpcmV0dXJuIiI7dmFyIGw9YS5zZXBhcmF0b3JzLGM9blswXSx1PXQuZGF0YS5kYXRhLGg9Yy5oaWVyYXJjaHksZj15LmlzSGllcmFyY2h5Um9vdCh0KSxwPXkuZ2V0UGFyZW50KGgsdCksZD15LmdldFZhbHVlKHQpO2lmKCFpKXt2YXIgZyx2PXMuc3BsaXQoIisiKSxtPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09di5pbmRleE9mKHQpfSx4PVtdO2lmKG0oImxhYmVsIikmJnUubGFiZWwmJngucHVzaCh1LmxhYmVsKSx1Lmhhc093blByb3BlcnR5KCJ2IikmJm0oInZhbHVlIikmJngucHVzaCh5LmZvcm1hdFZhbHVlKHUudixsKSksIWYpe20oImN1cnJlbnQgcGF0aCIpJiZ4LnB1c2goeS5nZXRQYXRoKHQuZGF0YSkpO3ZhciBiPTA7bSgicGVyY2VudCBwYXJlbnQiKSYmYisrLG0oInBlcmNlbnQgZW50cnkiKSYmYisrLG0oInBlcmNlbnQgcm9vdCIpJiZiKys7dmFyIF89Yj4xO2lmKGIpe3ZhciB3LGs9ZnVuY3Rpb24odCl7Zz15LmZvcm1hdFBlcmNlbnQodyxsKSxfJiYoZys9IiBvZiAiK3QpLHgucHVzaChnKX07bSgicGVyY2VudCBwYXJlbnQiKSYmIWYmJih3PWQveS5nZXRWYWx1ZShwKSxrKCJwYXJlbnQiKSksbSgicGVyY2VudCBlbnRyeSIpJiYodz1kL3kuZ2V0VmFsdWUoZSksaygiZW50cnkiKSksbSgicGVyY2VudCByb290IikmJih3PWQveS5nZXRWYWx1ZShoKSxrKCJyb290IikpfX1yZXR1cm4gbSgidGV4dCIpJiYoZz1vLmNhc3RPcHRpb24ocix1LmksInRleHQiKSxvLmlzVmFsaWRUZXh0VmFsdWUoZykmJngucHVzaChnKSkseC5qb2luKCI8YnI+Iil9dmFyIFQ9by5jYXN0T3B0aW9uKHIsdS5pLCJ0ZXh0dGVtcGxhdGUiKTtpZighVClyZXR1cm4iIjt2YXIgTT17fTt1LmxhYmVsJiYoTS5sYWJlbD11LmxhYmVsKSx1Lmhhc093blByb3BlcnR5KCJ2IikmJihNLnZhbHVlPXUudixNLnZhbHVlTGFiZWw9eS5mb3JtYXRWYWx1ZSh1LnYsbCkpLE0uY3VycmVudFBhdGg9eS5nZXRQYXRoKHQuZGF0YSksZnx8KE0ucGVyY2VudFBhcmVudD1kL3kuZ2V0VmFsdWUocCksTS5wZXJjZW50UGFyZW50TGFiZWw9eS5mb3JtYXRQZXJjZW50KE0ucGVyY2VudFBhcmVudCxsKSxNLnBhcmVudD15LmdldFB0TGFiZWwocCkpLE0ucGVyY2VudEVudHJ5PWQveS5nZXRWYWx1ZShlKSxNLnBlcmNlbnRFbnRyeUxhYmVsPXkuZm9ybWF0UGVyY2VudChNLnBlcmNlbnRFbnRyeSxsKSxNLmVudHJ5PXkuZ2V0UHRMYWJlbChlKSxNLnBlcmNlbnRSb290PWQveS5nZXRWYWx1ZShoKSxNLnBlcmNlbnRSb290TGFiZWw9eS5mb3JtYXRQZXJjZW50KE0ucGVyY2VudFJvb3QsbCksTS5yb290PXkuZ2V0UHRMYWJlbChoKSx1Lmhhc093blByb3BlcnR5KCJjb2xvciIpJiYoTS5jb2xvcj11LmNvbG9yKTt2YXIgQT1vLmNhc3RPcHRpb24ocix1LmksInRleHQiKTtyZXR1cm4oby5pc1ZhbGlkVGV4dFZhbHVlKEEpfHwiIj09PUEpJiYoTS50ZXh0PUEpLE0uY3VzdG9tZGF0YT1vLmNhc3RPcHRpb24ocix1LmksImN1c3RvbWRhdGEiKSxvLnRleHR0ZW1wbGF0ZVN0cmluZyhULE0sYS5fZDNsb2NhbGUsTSxyLl9tZXRhfHx7fSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NDEsIi4uL2Jhci9zdHlsZSI6ODcwLCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo4NzIsIi4uL3BpZS9wbG90IjoxMTAzLCIuL2NvbnN0YW50cyI6MTIzNCwiLi9meCI6MTIzNiwiLi9oZWxwZXJzIjoxMjM3LCIuL3N0eWxlIjoxMjQyLGQzOjE2NSwiZDMtaGllcmFyY2h5IjoxNTl9XSwxMjQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0O2Z1bmN0aW9uIHModCxlLHIpe3ZhciBuPWUuZGF0YS5kYXRhLG89IWUuY2hpbGRyZW4scz1uLmksbD1pLmNhc3RPcHRpb24ocixzLCJtYXJrZXIubGluZS5jb2xvciIpfHxhLmRlZmF1bHRMaW5lLGM9aS5jYXN0T3B0aW9uKHIscywibWFya2VyLmxpbmUud2lkdGgiKXx8MDt0LnN0eWxlKCJzdHJva2Utd2lkdGgiLGMpLmNhbGwoYS5maWxsLG4uY29sb3IpLmNhbGwoYS5zdHJva2UsbCkuc3R5bGUoIm9wYWNpdHkiLG8/ci5sZWFmLm9wYWNpdHk6bnVsbCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9zdW5idXJzdGxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIik7byh0LGUsInN1bmJ1cnN0IiksZS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZTtlLnN0eWxlKCJvcGFjaXR5IixyLm9wYWNpdHkpLGUuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwocyx0LHIpfSl9KX0sc3R5bGVPbmU6c319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9saWIiOjcxNywiLi4vYmFyL3VuaWZvcm1fdGV4dCI6ODcyLGQzOjE2NX1dLDEyNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtmdW5jdGlvbiBjKHQpe3JldHVybntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzdGFydDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6InBsb3QifSxlbmQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJwbG90In0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsbWluOjAsZWRpdFR5cGU6InBsb3QifSxwcm9qZWN0Ont4Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx5Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx6Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LHVzZWNvbG9ybWFwOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfSxoaWdobGlnaHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGhpZ2hsaWdodGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxoaWdobGlnaHR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfX19dmFyIHU9ZS5leHBvcnRzPWwocyh7ejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHg6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGVtcGxhdGU6aSgpLGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sc3VyZmFjZWNvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5In19LGEoIiIse2NvbG9yQXR0cjoieiBvciBzdXJmYWNlY29sb3IiLHNob3dTY2FsZURmbHQ6ITAsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb250b3Vyczp7eDpjKCkseTpjKCksejpjKCl9LGhpZGVzdXJmYWNlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsaWdodHBvc2l0aW9uOnt4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTFlNSxtYXg6MWU1LGRmbHQ6MWU0fSx6Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDowfX0sbGlnaHRpbmc6e2FtYmllbnQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouOH0sZGlmZnVzZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi44fSxzcGVjdWxhcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MixkZmx0Oi4wNX0scm91Z2huZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjV9LGZyZXNuZWw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjUsZGZsdDouMn19LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxfZGVwcmVjYXRlZDp7emF1dG86cyh7fSxhLnphdXRvLHt9KSx6bWluOnMoe30sYS56bWluLHt9KSx6bWF4OnMoe30sYS56bWF4LHt9KX0saG92ZXJpbmZvOnMoe30sby5ob3ZlcmluZm8pLHNob3dsZWdlbmQ6cyh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0pLCJjYWxjIiwibmVzdGVkIik7dS54LmVkaXRUeXBlPXUueS5lZGl0VHlwZT11LnouZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMiLHUudHJhbnNmb3Jtcz12b2lkIDB9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NTk5LCIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc0OCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NDF9XSwxMjQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5zdXJmYWNlY29sb3I/bih0LGUse3ZhbHM6ZS5zdXJmYWNlY29sb3IsY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSk6bih0LGUse3ZhbHM6ZS56LGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjAwfV0sMTI0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zdXJmYWNlM2QiKSxhPXQoIm5kYXJyYXkiKSxpPXQoIm5kYXJyYXktaG9tb2dyYXBoeSIpLG89dCgibmRhcnJheS1maWxsIikscz10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGw9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLnBhcnNlQ29sb3JTY2FsZSxjPXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmV4dHJhY3RPcHRzLGg9dCgiLi4vaGVhdG1hcC9pbnRlcnAyZCIpLGY9dCgiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXMiKTtmdW5jdGlvbiBwKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLnN1cmZhY2U9ZSx0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPVshMSwhMSwhMV0sdGhpcy5jb250b3VyU3RhcnQ9W251bGwsbnVsbCxudWxsXSx0aGlzLmNvbnRvdXJFbmQ9W251bGwsbnVsbCxudWxsXSx0aGlzLmNvbnRvdXJTaXplPVswLDAsMF0sdGhpcy5taW5WYWx1ZXM9WzEvMCwxLzAsMS8wXSx0aGlzLm1heFZhbHVlcz1bLTEvMCwtMS8wLC0xLzBdLHRoaXMuZGF0YVNjYWxlWD0xLHRoaXMuZGF0YVNjYWxlWT0xLHRoaXMucmVmaW5lRGF0YT0hMCx0aGlzLm9iamVjdE9mZnNldD1bMCwwLDBdfXZhciBkPXAucHJvdG90eXBlO2QuZ2V0WGF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXModGhpcy5kYXRhLngpP3ModGhpcy5kYXRhLnhbMF0pP3RoaXMuZGF0YS54W2VdW3RdOnRoaXMuZGF0YS54W3RdOnQ7cmV0dXJuIHZvaWQgMD09PXI/YTpuLmQybChhLDAscil9LGQuZ2V0WWF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXModGhpcy5kYXRhLnkpP3ModGhpcy5kYXRhLnlbMF0pP3RoaXMuZGF0YS55W2VdW3RdOnRoaXMuZGF0YS55W2VdOmU7cmV0dXJuIHZvaWQgMD09PXI/YTpuLmQybChhLDAscil9LGQuZ2V0WmF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXRoaXMuZGF0YS56W2VdW3RdO3JldHVybiBudWxsPT09YSYmdGhpcy5kYXRhLmNvbm5lY3RnYXBzJiZ0aGlzLmRhdGEuX2ludGVycG9sYXRlZFomJihhPXRoaXMuZGF0YS5faW50ZXJwb2xhdGVkWltlXVt0XSksdm9pZCAwPT09cj9hOm4uZDJsKGEsMCxyKX0sZC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5zdXJmYWNlKXt2YXIgZT0odC5kYXRhLmluZGV4WzBdLTEpL3RoaXMuZGF0YVNjYWxlWC0xLHI9KHQuZGF0YS5pbmRleFsxXS0xKS90aGlzLmRhdGFTY2FsZVktMSxuPU1hdGgubWF4KE1hdGgubWluKE1hdGgucm91bmQoZSksdGhpcy5kYXRhLnpbMF0ubGVuZ3RoLTEpLDApLGE9TWF0aC5tYXgoTWF0aC5taW4oTWF0aC5yb3VuZChyKSx0aGlzLmRhdGEuX3lsZW5ndGgtMSksMCk7dC5pbmRleD1bbixhXSx0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5nZXRYYXQobixhKSx0aGlzLmdldFlhdChuLGEpLHRoaXMuZ2V0WmF0KG4sYSldLHQuZGF0YUNvb3JkaW5hdGU9W3RoaXMuZ2V0WGF0KG4sYSx0aGlzLmRhdGEueGNhbGVuZGFyLHRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LnhheGlzKSx0aGlzLmdldFlhdChuLGEsdGhpcy5kYXRhLnljYWxlbmRhcix0aGlzLnNjZW5lLmZ1bGxTY2VuZUxheW91dC55YXhpcyksdGhpcy5nZXRaYXQobixhLHRoaXMuZGF0YS56Y2FsZW5kYXIsdGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQuemF4aXMpXTtmb3IodmFyIGk9MDtpPDM7aSsrKXt2YXIgbz10LmRhdGFDb29yZGluYXRlW2ldO251bGwhPW8mJih0LmRhdGFDb29yZGluYXRlW2ldKj10aGlzLnNjZW5lLmRhdGFTY2FsZVtpXSl9dmFyIHM9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkocykmJnNbYV0mJnZvaWQgMCE9PXNbYV1bbl0/dC50ZXh0TGFiZWw9c1thXVtuXTp0LnRleHRMYWJlbD1zfHwiIix0LmRhdGEuZGF0YUNvb3JkaW5hdGU9dC5kYXRhQ29vcmRpbmF0ZS5zbGljZSgpLHRoaXMuc3VyZmFjZS5oaWdobGlnaHQodC5kYXRhKSx0aGlzLnNjZW5lLmdscGxvdC5zcGlrZXMucG9zaXRpb249dC5kYXRhQ29vcmRpbmF0ZSwhMH19O3ZhciBnPVsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTcsMTAwOSwxMDEzLDEwMTksMTAyMSwxMDMxLDEwMzMsMTAzOSwxMDQ5LDEwNTEsMTA2MSwxMDYzLDEwNjksMTA4NywxMDkxLDEwOTMsMTA5NywxMTAzLDExMDksMTExNywxMTIzLDExMjksMTE1MSwxMTUzLDExNjMsMTE3MSwxMTgxLDExODcsMTE5MywxMjAxLDEyMTMsMTIxNywxMjIzLDEyMjksMTIzMSwxMjM3LDEyNDksMTI1OSwxMjc3LDEyNzksMTI4MywxMjg5LDEyOTEsMTI5NywxMzAxLDEzMDMsMTMwNywxMzE5LDEzMjEsMTMyNywxMzYxLDEzNjcsMTM3MywxMzgxLDEzOTksMTQwOSwxNDIzLDE0MjcsMTQyOSwxNDMzLDE0MzksMTQ0NywxNDUxLDE0NTMsMTQ1OSwxNDcxLDE0ODEsMTQ4MywxNDg3LDE0ODksMTQ5MywxNDk5LDE1MTEsMTUyMywxNTMxLDE1NDMsMTU0OSwxNTUzLDE1NTksMTU2NywxNTcxLDE1NzksMTU4MywxNTk3LDE2MDEsMTYwNywxNjA5LDE2MTMsMTYxOSwxNjIxLDE2MjcsMTYzNywxNjU3LDE2NjMsMTY2NywxNjY5LDE2OTMsMTY5NywxNjk5LDE3MDksMTcyMSwxNzIzLDE3MzMsMTc0MSwxNzQ3LDE3NTMsMTc1OSwxNzc3LDE3ODMsMTc4NywxNzg5LDE4MDEsMTgxMSwxODIzLDE4MzEsMTg0NywxODYxLDE4NjcsMTg3MSwxODczLDE4NzcsMTg3OSwxODg5LDE5MDEsMTkwNywxOTEzLDE5MzEsMTkzMywxOTQ5LDE5NTEsMTk3MywxOTc5LDE5ODcsMTk5MywxOTk3LDE5OTksMjAwMywyMDExLDIwMTcsMjAyNywyMDI5LDIwMzksMjA1MywyMDYzLDIwNjksMjA4MSwyMDgzLDIwODcsMjA4OSwyMDk5LDIxMTEsMjExMywyMTI5LDIxMzEsMjEzNywyMTQxLDIxNDMsMjE1MywyMTYxLDIxNzksMjIwMywyMjA3LDIyMTMsMjIyMSwyMjM3LDIyMzksMjI0MywyMjUxLDIyNjcsMjI2OSwyMjczLDIyODEsMjI4NywyMjkzLDIyOTcsMjMwOSwyMzExLDIzMzMsMjMzOSwyMzQxLDIzNDcsMjM1MSwyMzU3LDIzNzEsMjM3NywyMzgxLDIzODMsMjM4OSwyMzkzLDIzOTksMjQxMSwyNDE3LDI0MjMsMjQzNywyNDQxLDI0NDcsMjQ1OSwyNDY3LDI0NzMsMjQ3NywyNTAzLDI1MjEsMjUzMSwyNTM5LDI1NDMsMjU0OSwyNTUxLDI1NTcsMjU3OSwyNTkxLDI1OTMsMjYwOSwyNjE3LDI2MjEsMjYzMywyNjQ3LDI2NTcsMjY1OSwyNjYzLDI2NzEsMjY3NywyNjgzLDI2ODcsMjY4OSwyNjkzLDI2OTksMjcwNywyNzExLDI3MTMsMjcxOSwyNzI5LDI3MzEsMjc0MSwyNzQ5LDI3NTMsMjc2NywyNzc3LDI3ODksMjc5MSwyNzk3LDI4MDEsMjgwMywyODE5LDI4MzMsMjgzNywyODQzLDI4NTEsMjg1NywyODYxLDI4NzksMjg4NywyODk3LDI5MDMsMjkwOSwyOTE3LDI5MjcsMjkzOSwyOTUzLDI5NTcsMjk2MywyOTY5LDI5NzEsMjk5OV07ZnVuY3Rpb24gdih0LGUpe2lmKHQ8ZSlyZXR1cm4gMDtmb3IodmFyIHI9MDswPT09TWF0aC5mbG9vcih0JWUpOyl0Lz1lLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBtKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjxnLmxlbmd0aDtyKyspe3ZhciBuPWdbcl07ZS5wdXNoKHYodCxuKSl9cmV0dXJuIGV9ZnVuY3Rpb24geSh0KXtmb3IodmFyIGU9bSh0KSxyPXQsbj0wO248Zy5sZW5ndGg7bisrKWlmKGVbbl0+MCl7cj1nW25dO2JyZWFrfXJldHVybiByfWZ1bmN0aW9uIHgodCxlKXtpZighKHQ8MXx8ZTwxKSl7Zm9yKHZhciByPW0odCksbj1tKGUpLGE9MSxpPTA7aTxnLmxlbmd0aDtpKyspYSo9TWF0aC5wb3coZ1tpXSxNYXRoLm1heChyW2ldLG5baV0pKTtyZXR1cm4gYX19ZC5jYWxjWG51bXM9ZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0xO2U8dDtlKyspe3ZhciBuPXRoaXMuZ2V0WGF0KGUtMSwwKSxhPXRoaXMuZ2V0WGF0KGUsMCk7cltlLTFdPWEhPT1uJiZudWxsIT1uJiZudWxsIT1hP01hdGguYWJzKGEtbik6MH12YXIgaT0wO2ZvcihlPTE7ZTx0O2UrKylpKz1yW2UtMV07Zm9yKGU9MTtlPHQ7ZSsrKTA9PT1yW2UtMV0/cltlLTFdPTE6cltlLTFdPU1hdGgucm91bmQoaS9yW2UtMV0pO3JldHVybiByfSxkLmNhbGNZbnVtcz1mdW5jdGlvbih0KXt2YXIgZSxyPVtdO2ZvcihlPTE7ZTx0O2UrKyl7dmFyIG49dGhpcy5nZXRZYXQoMCxlLTEpLGE9dGhpcy5nZXRZYXQoMCxlKTtyW2UtMV09YSE9PW4mJm51bGwhPW4mJm51bGwhPWE/TWF0aC5hYnMoYS1uKTowfXZhciBpPTA7Zm9yKGU9MTtlPHQ7ZSsrKWkrPXJbZS0xXTtmb3IoZT0xO2U8dDtlKyspMD09PXJbZS0xXT9yW2UtMV09MTpyW2UtMV09TWF0aC5yb3VuZChpL3JbZS0xXSk7cmV0dXJuIHJ9O3ZhciBiPVsxLDIsNCw2LDEyLDI0LDM2LDQ4LDYwLDEyMCwxODAsMjQwLDM2MCw3MjAsODQwLDEyNjBdLF89Yls5XSx3PWJbMTNdO2Z1bmN0aW9uIGsodCxlKXtmb3IodmFyIHI9ITEsbj0wO248dC5sZW5ndGg7bisrKWlmKGU9PT10W25dKXtyPSEwO2JyZWFrfSExPT09ciYmdC5wdXNoKGUpfWQuZXN0aW1hdGVTY2FsZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xK2Z1bmN0aW9uKHQpe2lmKDAhPT10Lmxlbmd0aCl7Zm9yKHZhciBlPTEscj0wO3I8dC5sZW5ndGg7cisrKWU9eChlLHRbcl0pO3JldHVybiBlfX0oMD09PWU/dGhpcy5jYWxjWG51bXModCk6dGhpcy5jYWxjWW51bXModCkpO3I8Xzspcio9Mjtmb3IoO3I+dzspci0tLHIvPXkociksKytyPF8mJihyPXcpO3ZhciBuPU1hdGgucm91bmQoci90KTtyZXR1cm4gbj4xP246MX0sZC5yZWZpbmVDb29yZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YVNjYWxlWCxyPXRoaXMuZGF0YVNjYWxlWSxuPXRbMF0uc2hhcGVbMF0sbz10WzBdLnNoYXBlWzFdLHM9MHxNYXRoLmZsb29yKHRbMF0uc2hhcGVbMF0qZSsxKSxsPTB8TWF0aC5mbG9vcih0WzBdLnNoYXBlWzFdKnIrMSksYz0xK24rMSx1PTErbysxLGg9YShuZXcgRmxvYXQzMkFycmF5KGMqdSksW2MsdV0pLGY9MDtmPHQubGVuZ3RoOysrZil7dGhpcy5zdXJmYWNlLnBhZEZpZWxkKGgsdFtmXSk7dmFyIHA9YShuZXcgRmxvYXQzMkFycmF5KHMqbCksW3MsbF0pO2kocCxoLFtlLDAsMCwwLHIsMCwwLDAsMV0pLHRbZl09cH19LGQuc2V0Q29udG91ckxldmVscz1mdW5jdGlvbigpe3ZhciB0LGUscixuPVtbXSxbXSxbXV0sYT1bITEsITEsITFdLGk9ITE7Zm9yKHQ9MDt0PDM7Kyt0KWlmKHRoaXMuc2hvd0NvbnRvdXJbdF0mJihpPSEwLHRoaXMuY29udG91clNpemVbdF0+MCYmbnVsbCE9PXRoaXMuY29udG91clN0YXJ0W3RdJiZudWxsIT09dGhpcy5jb250b3VyRW5kW3RdJiZ0aGlzLmNvbnRvdXJFbmRbdF0+dGhpcy5jb250b3VyU3RhcnRbdF0pKWZvcihhW3RdPSEwLGU9dGhpcy5jb250b3VyU3RhcnRbdF07ZTx0aGlzLmNvbnRvdXJFbmRbdF07ZSs9dGhpcy5jb250b3VyU2l6ZVt0XSlyPWUqdGhpcy5zY2VuZS5kYXRhU2NhbGVbdF0sayhuW3RdLHIpO2lmKGkpe3ZhciBvPVtbXSxbXSxbXV07Zm9yKHQ9MDt0PDM7Kyt0KXRoaXMuc2hvd0NvbnRvdXJbdF0mJihvW3RdPWFbdF0/blt0XTp0aGlzLnNjZW5lLmNvbnRvdXJMZXZlbHNbdF0pO3RoaXMuc3VyZmFjZS51cGRhdGUoe2xldmVsczpvfSl9fSxkLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxzPXRoaXMuc2NlbmUscD1zLmZ1bGxTY2VuZUxheW91dCxkPXRoaXMuc3VyZmFjZSxnPXQub3BhY2l0eSx2PWwodCxnKSxtPXMuZGF0YVNjYWxlLHk9dC56WzBdLmxlbmd0aCx4PXQuX3lsZW5ndGgsYj1zLmNvbnRvdXJMZXZlbHM7dGhpcy5kYXRhPXQ7dmFyIF89W107Zm9yKGU9MDtlPDM7ZSsrKWZvcihfW2VdPVtdLHI9MDtyPHk7cisrKV9bZV1bcl09W107Zm9yKHI9MDtyPHk7cisrKWZvcihuPTA7bjx4O24rKylfWzBdW3JdW25dPXRoaXMuZ2V0WGF0KHIsbix0LnhjYWxlbmRhcixwLnhheGlzKSxfWzFdW3JdW25dPXRoaXMuZ2V0WWF0KHIsbix0LnljYWxlbmRhcixwLnlheGlzKSxfWzJdW3JdW25dPXRoaXMuZ2V0WmF0KHIsbix0LnpjYWxlbmRhcixwLnpheGlzKTtpZih0LmNvbm5lY3RnYXBzKWZvcih0Ll9lbXB0eXBvaW50cz1mKF9bMl0pLGgoX1syXSx0Ll9lbXB0eXBvaW50cyksdC5faW50ZXJwb2xhdGVkWj1bXSxyPTA7cjx5O3IrKylmb3IodC5faW50ZXJwb2xhdGVkWltyXT1bXSxuPTA7bjx4O24rKyl0Ll9pbnRlcnBvbGF0ZWRaW3JdW25dPV9bMl1bcl1bbl07Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjx5O3IrKylmb3Iobj0wO248eDtuKyspbnVsbD09KGk9X1tlXVtyXVtuXSk/X1tlXVtyXVtuXT1OYU46aT1fW2VdW3JdW25dKj1tW2VdO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8eTtyKyspZm9yKG49MDtuPHg7bisrKW51bGwhPShpPV9bZV1bcl1bbl0pJiYodGhpcy5taW5WYWx1ZXNbZV0+aSYmKHRoaXMubWluVmFsdWVzW2VdPWkpLHRoaXMubWF4VmFsdWVzW2VdPGkmJih0aGlzLm1heFZhbHVlc1tlXT1pKSk7Zm9yKGU9MDtlPDM7ZSsrKXRoaXMub2JqZWN0T2Zmc2V0W2VdPS41Kih0aGlzLm1pblZhbHVlc1tlXSt0aGlzLm1heFZhbHVlc1tlXSk7Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjx5O3IrKylmb3Iobj0wO248eDtuKyspbnVsbCE9KGk9X1tlXVtyXVtuXSkmJihfW2VdW3JdW25dLT10aGlzLm9iamVjdE9mZnNldFtlXSk7dmFyIGs9W2EobmV3IEZsb2F0MzJBcnJheSh5KngpLFt5LHhdKSxhKG5ldyBGbG9hdDMyQXJyYXkoeSp4KSxbeSx4XSksYShuZXcgRmxvYXQzMkFycmF5KHkqeCksW3kseF0pXTtvKGtbMF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gX1swXVt0XVtlXX0pLG8oa1sxXSxmdW5jdGlvbih0LGUpe3JldHVybiBfWzFdW3RdW2VdfSksbyhrWzJdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIF9bMl1bdF1bZV19KSxfPVtdO3ZhciBUPXtjb2xvcm1hcDp2LGxldmVsczpbW10sW10sW11dLHNob3dDb250b3VyOlshMCwhMCwhMF0sc2hvd1N1cmZhY2U6IXQuaGlkZXN1cmZhY2UsY29udG91clByb2plY3Q6W1shMSwhMSwhMV0sWyExLCExLCExXSxbITEsITEsITFdXSxjb250b3VyV2lkdGg6WzEsMSwxXSxjb250b3VyQ29sb3I6W1sxLDEsMSwxXSxbMSwxLDEsMV0sWzEsMSwxLDFdXSxjb250b3VyVGludDpbMSwxLDFdLGR5bmFtaWNDb2xvcjpbWzEsMSwxLDFdLFsxLDEsMSwxXSxbMSwxLDEsMV1dLGR5bmFtaWNXaWR0aDpbMSwxLDFdLGR5bmFtaWNUaW50OlsxLDEsMV0sb3BhY2l0eTp0Lm9wYWNpdHl9LE09dSh0KTtpZihULmludGVuc2l0eUJvdW5kcz1bTS5taW4sTS5tYXhdLHQuc3VyZmFjZWNvbG9yKXt2YXIgQT1hKG5ldyBGbG9hdDMyQXJyYXkoeSp4KSxbeSx4XSk7byhBLGZ1bmN0aW9uKGUscil7cmV0dXJuIHQuc3VyZmFjZWNvbG9yW3JdW2VdfSksay5wdXNoKEEpfWVsc2UgVC5pbnRlbnNpdHlCb3VuZHNbMF0qPW1bMl0sVC5pbnRlbnNpdHlCb3VuZHNbMV0qPW1bMl07KHc8a1swXS5zaGFwZVswXXx8dzxrWzBdLnNoYXBlWzFdKSYmKHRoaXMucmVmaW5lRGF0YT0hMSksITA9PT10aGlzLnJlZmluZURhdGEmJih0aGlzLmRhdGFTY2FsZVg9dGhpcy5lc3RpbWF0ZVNjYWxlKGtbMF0uc2hhcGVbMF0sMCksdGhpcy5kYXRhU2NhbGVZPXRoaXMuZXN0aW1hdGVTY2FsZShrWzBdLnNoYXBlWzFdLDEpLDE9PT10aGlzLmRhdGFTY2FsZVgmJjE9PT10aGlzLmRhdGFTY2FsZVl8fHRoaXMucmVmaW5lQ29vcmRzKGspKSx0LnN1cmZhY2Vjb2xvciYmKFQuaW50ZW5zaXR5PWsucG9wKCkpO3ZhciBTPVshMCwhMCwhMF0sRT1bIngiLCJ5IiwieiJdO2ZvcihlPTA7ZTwzOysrZSl7dmFyIEw9dC5jb250b3Vyc1tFW2VdXTtTW2VdPUwuaGlnaGxpZ2h0LFQuc2hvd0NvbnRvdXJbZV09TC5zaG93fHxMLmhpZ2hsaWdodCxULnNob3dDb250b3VyW2VdJiYoVC5jb250b3VyUHJvamVjdFtlXT1bTC5wcm9qZWN0LngsTC5wcm9qZWN0LnksTC5wcm9qZWN0LnpdLEwuc2hvdz8odGhpcy5zaG93Q29udG91cltlXT0hMCxULmxldmVsc1tlXT1iW2VdLGQuaGlnaGxpZ2h0Q29sb3JbZV09VC5jb250b3VyQ29sb3JbZV09YyhMLmNvbG9yKSxMLnVzZWNvbG9ybWFwP2QuaGlnaGxpZ2h0VGludFtlXT1ULmNvbnRvdXJUaW50W2VdPTA6ZC5oaWdobGlnaHRUaW50W2VdPVQuY29udG91clRpbnRbZV09MSxULmNvbnRvdXJXaWR0aFtlXT1MLndpZHRoLHRoaXMuY29udG91clN0YXJ0W2VdPUwuc3RhcnQsdGhpcy5jb250b3VyRW5kW2VdPUwuZW5kLHRoaXMuY29udG91clNpemVbZV09TC5zaXplKToodGhpcy5zaG93Q29udG91cltlXT0hMSx0aGlzLmNvbnRvdXJTdGFydFtlXT1udWxsLHRoaXMuY29udG91ckVuZFtlXT1udWxsLHRoaXMuY29udG91clNpemVbZV09MCksTC5oaWdobGlnaHQmJihULmR5bmFtaWNDb2xvcltlXT1jKEwuaGlnaGxpZ2h0Y29sb3IpLFQuZHluYW1pY1dpZHRoW2VdPUwuaGlnaGxpZ2h0d2lkdGgpKX0oZnVuY3Rpb24odCl7dmFyIGU9dFswXS5yZ2Iscj10W3QubGVuZ3RoLTFdLnJnYjtyZXR1cm4gZVswXT09PXJbMF0mJmVbMV09PT1yWzFdJiZlWzJdPT09clsyXSYmZVszXT09PXJbM119KSh2KSYmKFQudmVydGV4Q29sb3I9ITApLFQub2JqZWN0T2Zmc2V0PXRoaXMub2JqZWN0T2Zmc2V0LFQuY29vcmRzPWssZC51cGRhdGUoVCksZC52aXNpYmxlPXQudmlzaWJsZSxkLmVuYWJsZUR5bmFtaWM9UyxkLmVuYWJsZUhpZ2hsaWdodD1TLGQuc25hcFRvRGF0YT0hMCwibGlnaHRpbmciaW4gdCYmKGQuYW1iaWVudExpZ2h0PXQubGlnaHRpbmcuYW1iaWVudCxkLmRpZmZ1c2VMaWdodD10LmxpZ2h0aW5nLmRpZmZ1c2UsZC5zcGVjdWxhckxpZ2h0PXQubGlnaHRpbmcuc3BlY3VsYXIsZC5yb3VnaG5lc3M9dC5saWdodGluZy5yb3VnaG5lc3MsZC5mcmVzbmVsPXQubGlnaHRpbmcuZnJlc25lbCksImxpZ2h0cG9zaXRpb24iaW4gdCYmKGQubGlnaHRQb3NpdGlvbj1bdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdKSxnJiZnPDEmJihkLnN1cHBvcnRzVHJhbnNwYXJlbmN5PSEwKX0sZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc3VyZmFjZSksdGhpcy5zdXJmYWNlLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsYT1uKHtnbDpyfSksaT1uZXcgcCh0LGEsZS51aWQpO3JldHVybiBhLl90cmFjZT1pLGkudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChhKSxpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYwNCwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjcxNCwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzQwLCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyI6MTAwNiwiLi4vaGVhdG1hcC9pbnRlcnAyZCI6MTAwOSwiZ2wtc3VyZmFjZTNkIjozMTgsbmRhcnJheTo0NTIsIm5kYXJyYXktZmlsbCI6NDQyLCJuZGFycmF5LWhvbW9ncmFwaHkiOjQ0NH1dLDEyNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBzKHQsZSxyKXtlIGluIHQmJiEociBpbiB0KSYmKHRbcl09dFtlXSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe3ZhciBjLHU7ZnVuY3Rpb24gaChyLG4pe3JldHVybiBhLmNvZXJjZSh0LGUsbyxyLG4pfXZhciBmPWgoIngiKSxwPWgoInkiKSxkPWgoInoiKTtpZighZHx8IWQubGVuZ3RofHxmJiZmLmxlbmd0aDwxfHxwJiZwLmxlbmd0aDwxKWUudmlzaWJsZT0hMTtlbHNle2UuX3hsZW5ndGg9QXJyYXkuaXNBcnJheShmKSYmYS5pc0FycmF5T3JUeXBlZEFycmF5KGZbMF0pP2QubGVuZ3RoOmRbMF0ubGVuZ3RoLGUuX3lsZW5ndGg9ZC5sZW5ndGgsbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxsKSxoKCJ0ZXh0IiksaCgiaG92ZXJ0ZXh0IiksaCgiaG92ZXJ0ZW1wbGF0ZSIpLFsibGlnaHRpbmcuYW1iaWVudCIsImxpZ2h0aW5nLmRpZmZ1c2UiLCJsaWdodGluZy5zcGVjdWxhciIsImxpZ2h0aW5nLnJvdWdobmVzcyIsImxpZ2h0aW5nLmZyZXNuZWwiLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJoaWRlc3VyZmFjZSIsImNvbm5lY3RnYXBzIiwib3BhY2l0eSJdLmZvckVhY2goZnVuY3Rpb24odCl7aCh0KX0pO3ZhciBnPWgoInN1cmZhY2Vjb2xvciIpLHY9WyJ4IiwieSIsInoiXTtmb3IoYz0wO2M8MzsrK2Mpe3ZhciBtPSJjb250b3Vycy4iK3ZbY10seT1oKG0rIi5zaG93IikseD1oKG0rIi5oaWdobGlnaHQiKTtpZih5fHx4KWZvcih1PTA7dTwzOysrdSloKG0rIi5wcm9qZWN0LiIrdlt1XSk7eSYmKGgobSsiLmNvbG9yIiksaChtKyIud2lkdGgiKSxoKG0rIi51c2Vjb2xvcm1hcCIpKSx4JiYoaChtKyIuaGlnaGxpZ2h0Y29sb3IiKSxoKG0rIi5oaWdobGlnaHR3aWR0aCIpKSxoKG0rIi5zdGFydCIpLGgobSsiLmVuZCIpLGgobSsiLnNpemUiKX1nfHwocyh0LCJ6bWluIiwiY21pbiIpLHModCwiem1heCIsImNtYXgiKSxzKHQsInphdXRvIiwiY2F1dG8iKSksaSh0LGUsbCxoLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxlLl9sZW5ndGg9bnVsbH19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjAyLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcmVnaXN0cnkiOjg0NiwiLi9hdHRyaWJ1dGVzIjoxMjQzfV0sMTI0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnttaW46ImNtaW4iLG1heDoiY21heCJ9LGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL2NvbnZlcnQiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic3VyZmFjZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwiMmRNYXAiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6ODA1LCIuL2F0dHJpYnV0ZXMiOjEyNDMsIi4vY2FsYyI6MTI0NCwiLi9jb252ZXJ0IjoxMjQ1LCIuL2RlZmF1bHRzIjoxMjQ2fV0sMTI0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGk9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLG89dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzO3QoIi4uLy4uL2NvbnN0YW50cy9kb2NzIikuRk9STUFUX0xJTks7KGUuZXhwb3J0cz1pKHtkb21haW46cyh7bmFtZToidGFibGUiLHRyYWNlOiEwfSksY29sdW1ud2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMCxkZmx0Om51bGx9LGNvbHVtbm9yZGVyOnt2YWxUeXBlOiJkYXRhX2FycmF5In0saGVhZGVyOnt2YWx1ZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZvcm1hdDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0scHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDpudWxsfSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjI4fSxhbGlnbjphKHt9LG4uYWxpZ24se2FycmF5T2s6ITB9KSxsaW5lOnt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6ImdyZXkifX0sZmlsbDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6IndoaXRlIn19LGZvbnQ6YSh7fSxvKHthcnJheU9rOiEwfSkpfSxjZWxsczp7dmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxmb3JtYXQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LHByZWZpeDp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDpudWxsfSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoyMH0sYWxpZ246YSh7fSxuLmFsaWduLHthcnJheU9rOiEwfSksbGluZTp7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMCxkZmx0OjF9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxkZmx0OiJncmV5In19LGZpbGw6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxkZmx0OiJ3aGl0ZSJ9fSxmb250OmEoe30sbyh7YXJyYXlPazohMH0pKX19LCJjYWxjIiwiZnJvbS1yb290IikpLnRyYW5zZm9ybXM9dm9pZCAwfSx7Ii4uLy4uL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMvYXR0cmlidXRlcyI6NTc1LCIuLi8uLi9jb25zdGFudHMvZG9jcyI6Njg4LCIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjc0OCwiLi4vLi4vcGxvdHMvZG9tYWluIjo3OTAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6NzkxfV0sMTI0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9nZXRfZGF0YSIpLmdldE1vZHVsZUNhbGNEYXRhLGE9dCgiLi9wbG90Iik7ci5uYW1lPSJ0YWJsZSIsci5wbG90PWZ1bmN0aW9uKHQpe3ZhciBlPW4odC5jYWxjZGF0YSwidGFibGUiKVswXTtlLmxlbmd0aCYmYSh0LGUpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPW4uX2hhcyYmbi5faGFzKCJ0YWJsZSIpLGk9ZS5faGFzJiZlLl9oYXMoInRhYmxlIik7YSYmIWkmJm4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnRhYmxlIikucmVtb3ZlKCl9fSx7Ii4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4MDAsIi4vcGxvdCI6MTI1Nn1dLDEyNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2d1cCIpLndyYXA7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIG4oe30pfX0seyIuLi8uLi9saWIvZ3VwIjo3MTV9XSwxMjUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y2VsbFBhZDo4LGNvbHVtbkV4dGVudE9mZnNldDoxMCxjb2x1bW5UaXRsZU9mZnNldDoyOCxlbXB0eUhlYWRlckhlaWdodDoxNixsYXRleENoZWNrOi9eXCQuKlwkJC8sZ29sZGVuUmF0aW86MS42MTgsbGluZUJyZWFrZXI6Ijxicj4iLG1heERpbWVuc2lvbkNvdW50OjYwLG92ZXJkcmFnOjQ1LHJlbGVhc2VUcmFuc2l0aW9uRHVyYXRpb246MTIwLHJlbGVhc2VUcmFuc2l0aW9uRWFzZToiY3ViaWMtb3V0IixzY3JvbGxiYXJDYXB0dXJlV2lkdGg6MTgsc2Nyb2xsYmFySGlkZURlbGF5OjFlMyxzY3JvbGxiYXJIaWRlRHVyYXRpb246MWUzLHNjcm9sbGJhck9mZnNldDo1LHNjcm9sbGJhcldpZHRoOjgsdHJhbnNpdGlvbkR1cmF0aW9uOjEwMCx0cmFuc2l0aW9uRWFzZToiY3ViaWMtb3V0Iix1cGxpZnQ6NSx3cmFwU3BhY2VyOiIgIix3cmFwU3BsaXRDaGFyYWN0ZXI6IiAiLGNuOnt0YWJsZToidGFibGUiLHRhYmxlQ29udHJvbFZpZXc6InRhYmxlLWNvbnRyb2wtdmlldyIsc2Nyb2xsQmFja2dyb3VuZDoic2Nyb2xsLWJhY2tncm91bmQiLHlDb2x1bW46InktY29sdW1uIixjb2x1bW5CbG9jazoiY29sdW1uLWJsb2NrIixzY3JvbGxBcmVhQ2xpcDoic2Nyb2xsLWFyZWEtY2xpcCIsc2Nyb2xsQXJlYUNsaXBSZWN0OiJzY3JvbGwtYXJlYS1jbGlwLXJlY3QiLGNvbHVtbkJvdW5kYXJ5OiJjb2x1bW4tYm91bmRhcnkiLGNvbHVtbkJvdW5kYXJ5Q2xpcHBhdGg6ImNvbHVtbi1ib3VuZGFyeS1jbGlwcGF0aCIsY29sdW1uQm91bmRhcnlSZWN0OiJjb2x1bW4tYm91bmRhcnktcmVjdCIsY29sdW1uQ2VsbHM6ImNvbHVtbi1jZWxscyIsY29sdW1uQ2VsbDoiY29sdW1uLWNlbGwiLGNlbGxSZWN0OiJjZWxsLXJlY3QiLGNlbGxUZXh0OiJjZWxsLXRleHQiLGNlbGxUZXh0SG9sZGVyOiJjZWxsLXRleHQtaG9sZGVyIixzY3JvbGxiYXJLaXQ6InNjcm9sbGJhci1raXQiLHNjcm9sbGJhcjoic2Nyb2xsYmFyIixzY3JvbGxiYXJTbGlkZXI6InNjcm9sbGJhci1zbGlkZXIiLHNjcm9sbGJhckdseXBoOiJzY3JvbGxiYXItZ2x5cGgiLHNjcm9sbGJhckNhcHR1cmVab25lOiJzY3JvbGxiYXItY2FwdHVyZS16b25lIn19fSx7fV0sMTI1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaT10KCJmYXN0LWlzbnVtZXJpYyIpO2Z1bmN0aW9uIG8odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKWU9TWF0aC5tYXgoZSxvKHRbcl0pKTtyZXR1cm4gZX1yZXR1cm4gdH1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHQrZX1mdW5jdGlvbiBsKHQpe3ZhciBlLHI9dC5zbGljZSgpLG49MS8wLGE9MDtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKUFycmF5LmlzQXJyYXkocltlXSl8fChyW2VdPVtyW2VdXSksbj1NYXRoLm1pbihuLHJbZV0ubGVuZ3RoKSxhPU1hdGgubWF4KGEscltlXS5sZW5ndGgpO2lmKG4hPT1hKWZvcihlPTA7ZTxyLmxlbmd0aDtlKyspe3ZhciBpPWEtcltlXS5sZW5ndGg7aSYmKHJbZV09cltlXS5jb25jYXQoYyhpKSkpfXJldHVybiByfWZ1bmN0aW9uIGModCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPSIiO3JldHVybiBlfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHQuY2FsY2RhdGEuY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24oZSxyKXtyZXR1cm4gci54SW5kZXg8dC54SW5kZXg/ZStyLmNvbHVtbldpZHRoOmV9LDApfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBhKHt9LHRbcl0se2F1eGlsaWFyeUJsb2NrczplfSl9KX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByLG49e30sYT0wLGk9MCxvPXtmaXJzdFJvd0luZGV4Om51bGwsbGFzdFJvd0luZGV4Om51bGwscm93czpbXX0scz0wLGw9MCxjPTA7Yzx0Lmxlbmd0aDtjKyspcj10W2NdLG8ucm93cy5wdXNoKHtyb3dJbmRleDpjLHJvd0hlaWdodDpyfSksKChpKz1yKT49ZXx8Yz09PXQubGVuZ3RoLTEpJiYoblthXT1vLG8ua2V5PWwrKyxvLmZpcnN0Um93SW5kZXg9cyxvLmxhc3RSb3dJbmRleD1jLG89e2ZpcnN0Um93SW5kZXg6bnVsbCxsYXN0Um93SW5kZXg6bnVsbCxyb3dzOltdfSxhKz1pLHM9YysxLGk9MCk7cmV0dXJuIG59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bChlLmNlbGxzLnZhbHVlcykscD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZShlLmhlYWRlci52YWx1ZXMubGVuZ3RoLHQubGVuZ3RoKX0sZD1sKGUuaGVhZGVyLnZhbHVlcyk7ZC5sZW5ndGgmJiFkWzBdLmxlbmd0aCYmKGRbMF09WyIiXSxkPWwoZCkpO3ZhciBnPWQuY29uY2F0KHAocikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGMoKGRbMF18fFsiIl0pLmxlbmd0aCl9KSksdj1lLmRvbWFpbixtPU1hdGguZmxvb3IodC5fZnVsbExheW91dC5fc2l6ZS53Kih2LnhbMV0tdi54WzBdKSkseT1NYXRoLmZsb29yKHQuX2Z1bGxMYXlvdXQuX3NpemUuaCoodi55WzFdLXYueVswXSkpLHg9ZS5oZWFkZXIudmFsdWVzLmxlbmd0aD9nWzBdLm1hcChmdW5jdGlvbigpe3JldHVybiBlLmhlYWRlci5oZWlnaHR9KTpbbi5lbXB0eUhlYWRlckhlaWdodF0sYj1yLmxlbmd0aD9yWzBdLm1hcChmdW5jdGlvbigpe3JldHVybiBlLmNlbGxzLmhlaWdodH0pOltdLF89eC5yZWR1Y2UocywwKSx3PWYoYix5LV8rbi51cGxpZnQpLGs9aChmKHgsXyksW10pLFQ9aCh3LGspLE09e30sQT1lLl9mdWxsSW5wdXQuY29sdW1ub3JkZXIuY29uY2F0KHAoci5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKSksUz1nLm1hcChmdW5jdGlvbih0LHIpe3ZhciBuPUFycmF5LmlzQXJyYXkoZS5jb2x1bW53aWR0aCk/ZS5jb2x1bW53aWR0aFtNYXRoLm1pbihyLGUuY29sdW1ud2lkdGgubGVuZ3RoLTEpXTplLmNvbHVtbndpZHRoO3JldHVybiBpKG4pP051bWJlcihuKToxfSksRT1TLnJlZHVjZShzLDApO1M9Uy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQvRSptfSk7dmFyIEw9TWF0aC5tYXgobyhlLmhlYWRlci5saW5lLndpZHRoKSxvKGUuY2VsbHMubGluZS53aWR0aCkpLEM9e2tleTplLnVpZCt0Ll9jb250ZXh0LnN0YXRpY1Bsb3QsdHJhbnNsYXRlWDp2LnhbMF0qdC5fZnVsbExheW91dC5fc2l6ZS53LHRyYW5zbGF0ZVk6dC5fZnVsbExheW91dC5fc2l6ZS5oKigxLXYueVsxXSksc2l6ZTp0Ll9mdWxsTGF5b3V0Ll9zaXplLHdpZHRoOm0sbWF4TGluZVdpZHRoOkwsaGVpZ2h0OnksY29sdW1uT3JkZXI6QSxncm91cEhlaWdodDp5LHJvd0Jsb2NrczpULGhlYWRlclJvd0Jsb2NrczprLHNjcm9sbFk6MCxjZWxsczphKHt9LGUuY2VsbHMse3ZhbHVlczpyfSksaGVhZGVyQ2VsbHM6YSh7fSxlLmhlYWRlcix7dmFsdWVzOmd9KSxnZENvbHVtbnM6Zy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSxnZENvbHVtbnNPcmlnaW5hbE9yZGVyOmcubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkscHJldlBhZ2VzOlswLDBdLHNjcm9sbGJhclN0YXRlOntzY3JvbGxiYXJTY3JvbGxJblByb2dyZXNzOiExfSxjb2x1bW5zOmcubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIHI9TVt0XTtyZXR1cm4gTVt0XT0ocnx8MCkrMSx7a2V5OnQrIl9fIitNW3RdLGxhYmVsOnQsc3BlY0luZGV4OmUseEluZGV4OkFbZV0seFNjYWxlOnUseDp2b2lkIDAsY2FsY2RhdGE6dm9pZCAwLGNvbHVtbldpZHRoOlNbZV19fSl9O3JldHVybiBDLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNhbGNkYXRhPUMsdC54PXUodCl9KSxDfX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MDgsIi4vY29uc3RhbnRzIjoxMjUxLCJmYXN0LWlzbnVtZXJpYyI6MjI4fV0sMTI1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtyLnNwbGl0VG9QYW5lbHM9ZnVuY3Rpb24odCl7dmFyIGU9WzAsMF0scj1uKHt9LHQse2tleToiaGVhZGVyIix0eXBlOiJoZWFkZXIiLHBhZ2U6MCxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiEwLHZhbHVlczp0LmNhbGNkYXRhLmhlYWRlckNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEuaGVhZGVyUm93QmxvY2tzLGNhbGNkYXRhOm4oe30sdC5jYWxjZGF0YSx7Y2VsbHM6dC5jYWxjZGF0YS5oZWFkZXJDZWxsc30pfSk7cmV0dXJuW24oe30sdCx7a2V5OiJjZWxsczEiLHR5cGU6ImNlbGxzIixwYWdlOjAscHJldlBhZ2VzOmUsY3VycmVudFJlcGFpbnQ6W251bGwsbnVsbF0sZHJhZ0hhbmRsZTohMSx2YWx1ZXM6dC5jYWxjZGF0YS5jZWxscy52YWx1ZXNbdC5zcGVjSW5kZXhdLHJvd0Jsb2Nrczp0LmNhbGNkYXRhLnJvd0Jsb2Nrc30pLG4oe30sdCx7a2V5OiJjZWxsczIiLHR5cGU6ImNlbGxzIixwYWdlOjEscHJldlBhZ2VzOmUsY3VycmVudFJlcGFpbnQ6W251bGwsbnVsbF0sZHJhZ0hhbmRsZTohMSx2YWx1ZXM6dC5jYWxjZGF0YS5jZWxscy52YWx1ZXNbdC5zcGVjSW5kZXhdLHJvd0Jsb2Nrczp0LmNhbGNkYXRhLnJvd0Jsb2Nrc30pLHJdfSxyLnNwbGl0VG9DZWxscz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT10LnJvd0Jsb2Nrc1t0LnBhZ2VdLHI9ZT9lLnJvd3NbMF0ucm93SW5kZXg6MCxuPWU/citlLnJvd3MubGVuZ3RoOjA7cmV0dXJuW3Isbl19KHQpO3JldHVybih0LnZhbHVlc3x8W10pLnNsaWNlKGVbMF0sZVsxXSkubWFwKGZ1bmN0aW9uKHIsbil7cmV0dXJue2tleVdpdGhpbkJsb2NrOm4rKCJzdHJpbmciPT10eXBlb2YgciYmci5tYXRjaCgvWzwkJj4gXS8pPyJfa2V5YnVzdGVyXyIrTWF0aC5yYW5kb20oKToiIiksa2V5OmVbMF0rbixjb2x1bW46dCxjYWxjZGF0YTp0LmNhbGNkYXRhLHBhZ2U6dC5wYWdlLHJvd0Jsb2Nrczp0LnJvd0Jsb2Nrcyx2YWx1ZTpyfX0pfX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MDh9XSwxMjU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfWkoZSxvLHMpLHMoImNvbHVtbndpZHRoIikscygiaGVhZGVyLnZhbHVlcyIpLHMoImhlYWRlci5mb3JtYXQiKSxzKCJoZWFkZXIuYWxpZ24iKSxzKCJoZWFkZXIucHJlZml4IikscygiaGVhZGVyLnN1ZmZpeCIpLHMoImhlYWRlci5oZWlnaHQiKSxzKCJoZWFkZXIubGluZS53aWR0aCIpLHMoImhlYWRlci5saW5lLmNvbG9yIikscygiaGVhZGVyLmZpbGwuY29sb3IiKSxuLmNvZXJjZUZvbnQocywiaGVhZGVyLmZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxvLmZvbnQpKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvbHVtbm9yZGVyfHxbXSxuPXQuaGVhZGVyLnZhbHVlcy5sZW5ndGgsYT1yLnNsaWNlKDAsbiksaT1hLnNsaWNlKCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSxvPWEubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpLmluZGV4T2YodCl9KSxzPW8ubGVuZ3RoO3M8bjtzKyspby5wdXNoKHMpO2UoImNvbHVtbm9yZGVyIixvKX0oZSxzKSxzKCJjZWxscy52YWx1ZXMiKSxzKCJjZWxscy5mb3JtYXQiKSxzKCJjZWxscy5hbGlnbiIpLHMoImNlbGxzLnByZWZpeCIpLHMoImNlbGxzLnN1ZmZpeCIpLHMoImNlbGxzLmhlaWdodCIpLHMoImNlbGxzLmxpbmUud2lkdGgiKSxzKCJjZWxscy5saW5lLmNvbG9yIikscygiY2VsbHMuZmlsbC5jb2xvciIpLG4uY29lcmNlRm9udChzLCJjZWxscy5mb250IixuLmV4dGVuZEZsYXQoe30sby5mb250KSksZS5fbGVuZ3RoPW51bGx9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi8uLi9wbG90cy9kb21haW4iOjc5MCwiLi9hdHRyaWJ1dGVzIjoxMjQ4fV0sMTI1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToidGFibGUiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbIm5vT3BhY2l0eSJdLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6MTI0OCwiLi9iYXNlX3Bsb3QiOjEyNDksIi4vY2FsYyI6MTI1MCwiLi9kZWZhdWx0cyI6MTI1NCwiLi9wbG90IjoxMjU2fV0sMTI1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0YW50cyIpLGE9dCgiZDMiKSxpPXQoIi4uLy4uL2xpYi9ndXAiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLHM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksbD10KCIuLi8uLi9saWIiKS5yYWlzZVRvVG9wLGM9dCgiLi4vLi4vbGliIikuY2FuY2VsVHJhbnNpdGlvbix1PXQoIi4vZGF0YV9wcmVwYXJhdGlvbl9oZWxwZXIiKSxoPXQoIi4vZGF0YV9zcGxpdF9oZWxwZXJzIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIik7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gTWF0aC5jZWlsKHQuY2FsY2RhdGEubWF4TGluZVdpZHRoLzIpfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4iY2xpcCIrdC5fZnVsbExheW91dC5fdWlkKyJfc2Nyb2xsQXJlYUJvdHRvbUNsaXBfIitlLmtleX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuImNsaXAiK3QuX2Z1bGxMYXlvdXQuX3VpZCsiX2NvbHVtbkJvdW5kYXJ5Q2xpcHBhdGhfIitlLmNhbGNkYXRhLmtleSsiXyIrZS5zcGVjSW5kZXh9ZnVuY3Rpb24gdih0KXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fZGF0YV9ffSl9ZnVuY3Rpb24gbSh0LGUscil7dmFyIG89dC5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyS2l0KS5kYXRhKGkucmVwZWF0LGkua2V5RnVuKTtvLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhcktpdCwhMCkuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImdlb21ldHJpY1ByZWNpc2lvbiIpLG8uZWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnNjcm9sbGJhclN0YXRlO2UudG90YWxIZWlnaHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5yb3dCbG9ja3M7cmV0dXJuIHooZSxlLmxlbmd0aC0xKSsoZS5sZW5ndGg/SShlW2UubGVuZ3RoLTFdLDEvMCk6MSl9KHQpLGUuc2Nyb2xsYWJsZUFyZWFIZWlnaHQ9dC5ncm91cEhlaWdodC1NKHQpLGUuY3VycmVudGx5VmlzaWJsZUhlaWdodD1NYXRoLm1pbihlLnRvdGFsSGVpZ2h0LGUuc2Nyb2xsYWJsZUFyZWFIZWlnaHQpLGUucmF0aW89ZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0L2UudG90YWxIZWlnaHQsZS5iYXJMZW5ndGg9TWF0aC5tYXgoZS5yYXRpbyplLmN1cnJlbnRseVZpc2libGVIZWlnaHQsbi5nb2xkZW5SYXRpbypuLnNjcm9sbGJhcldpZHRoKSxlLmJhcldpZ2dsZVJvb209ZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0LWUuYmFyTGVuZ3RoLGUud2lnZ2xlUm9vbT1NYXRoLm1heCgwLGUudG90YWxIZWlnaHQtZS5zY3JvbGxhYmxlQXJlYUhlaWdodCksZS50b3BZPTA9PT1lLmJhcldpZ2dsZVJvb20/MDp0LnNjcm9sbFkvZS53aWdnbGVSb29tKmUuYmFyV2lnZ2xlUm9vbSxlLmJvdHRvbVk9ZS50b3BZK2UuYmFyTGVuZ3RoLGUuZHJhZ011bHRpcGxpZXI9ZS53aWdnbGVSb29tL2UuYmFyV2lnZ2xlUm9vbX0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiKyh0LndpZHRoK24uc2Nyb2xsYmFyV2lkdGgvMituLnNjcm9sbGJhck9mZnNldCkrIiAiK00odCkrIikifSk7dmFyIHM9by5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyKS5kYXRhKGkucmVwZWF0LGkua2V5RnVuKTtzLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhciwhMCk7dmFyIGw9cy5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsYmFyU2xpZGVyKS5kYXRhKGkucmVwZWF0LGkua2V5RnVuKTtsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhclNsaWRlciwhMCksbC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoMCAiKyh0LnNjcm9sbGJhclN0YXRlLnRvcFl8fDApKyIpIn0pO3ZhciBjPWwuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhckdseXBoKS5kYXRhKGkucmVwZWF0LGkua2V5RnVuKTtjLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhckdseXBoLCEwKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS13aWR0aCIsbi5zY3JvbGxiYXJXaWR0aCkuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJyb3VuZCIpLmF0dHIoInkxIixuLnNjcm9sbGJhcldpZHRoLzIpLGMuYXR0cigieTIiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNjcm9sbGJhclN0YXRlLmJhckxlbmd0aC1uLnNjcm9sbGJhcldpZHRoLzJ9KS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uRHJhZ0luUHJvZ3Jlc3N8fCF0LnNjcm9sbGJhclN0YXRlLmJhcldpZ2dsZVJvb218fHI/MDouNH0pLGMudHJhbnNpdGlvbigpLmRlbGF5KDApLmR1cmF0aW9uKDApLGMudHJhbnNpdGlvbigpLmRlbGF5KG4uc2Nyb2xsYmFySGlkZURlbGF5KS5kdXJhdGlvbihuLnNjcm9sbGJhckhpZGVEdXJhdGlvbikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApO3ZhciB1PXMuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhckNhcHR1cmVab25lKS5kYXRhKGkucmVwZWF0LGkua2V5RnVuKTt1LmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhckNhcHR1cmVab25lLCEwKS5hdHRyKCJzdHJva2UiLCJ3aGl0ZSIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwuMDEpLmF0dHIoInN0cm9rZS13aWR0aCIsbi5zY3JvbGxiYXJDYXB0dXJlV2lkdGgpLmF0dHIoInN0cm9rZS1saW5lY2FwIiwiYnV0dCIpLmF0dHIoInkxIiwwKS5vbigibW91c2Vkb3duIixmdW5jdGlvbihyKXt2YXIgbj1hLmV2ZW50LnksaT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ci5zY3JvbGxiYXJTdGF0ZSxzPW4taS50b3AsbD1hLnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCxvLnNjcm9sbGFibGVBcmVhSGVpZ2h0XSkucmFuZ2UoWzAsby50b3RhbEhlaWdodF0pLmNsYW1wKCEwKTtvLnRvcFk8PXMmJnM8PW8uYm90dG9tWXx8UyhlLHQsbnVsbCxsKHMtby5iYXJMZW5ndGgvMikpKHIpfSkuY2FsbChhLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24odCl7cmV0dXJuIGEuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksdC5zY3JvbGxiYXJTdGF0ZS5zY3JvbGxiYXJTY3JvbGxJblByb2dyZXNzPSEwLHR9KS5vbigiZHJhZyIsUyhlLHQpKS5vbigiZHJhZ2VuZCIsZnVuY3Rpb24oKXt9KSksdS5hdHRyKCJ5MiIsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2Nyb2xsYmFyU3RhdGUuc2Nyb2xsYWJsZUFyZWFIZWlnaHR9KSxlLl9jb250ZXh0LnN0YXRpY1Bsb3QmJihjLnJlbW92ZSgpLHUucmVtb3ZlKCkpfWZ1bmN0aW9uIHkodCxlLHIscyl7dmFyIGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQ2VsbCkuZGF0YShoLnNwbGl0VG9DZWxscyxmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNvbHVtbkNlbGwsITApLGUuZXhpdCgpLnJlbW92ZSgpLGV9KGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkNlbGxzKS5kYXRhKGkucmVwZWF0LGkua2V5RnVuKTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5jb2x1bW5DZWxscywhMCksZS5leGl0KCkucmVtb3ZlKCksZX0ocikpOyFmdW5jdGlvbih0KXt0LmVhY2goZnVuY3Rpb24odCxlKXt2YXIgcj10LmNhbGNkYXRhLmNlbGxzLmZvbnQsbj10LmNvbHVtbi5zcGVjSW5kZXgsYT17c2l6ZTpfKHIuc2l6ZSxuLGUpLGNvbG9yOl8oci5jb2xvcixuLGUpLGZhbWlseTpfKHIuZmFtaWx5LG4sZSl9O3Qucm93TnVtYmVyPXQua2V5LHQuYWxpZ249Xyh0LmNhbGNkYXRhLmNlbGxzLmFsaWduLG4sZSksdC5jZWxsQm9yZGVyV2lkdGg9Xyh0LmNhbGNkYXRhLmNlbGxzLmxpbmUud2lkdGgsbixlKSx0LmZvbnQ9YX0pfShsKSxmdW5jdGlvbih0KXt0LmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW4uY29sdW1uV2lkdGh9KS5hdHRyKCJzdHJva2Utd2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNlbGxCb3JkZXJXaWR0aH0pLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9YS5zZWxlY3QodGhpcyk7Zi5zdHJva2UoZSxfKHQuY2FsY2RhdGEuY2VsbHMubGluZS5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKSxmLmZpbGwoZSxfKHQuY2FsY2RhdGEuY2VsbHMuZmlsbC5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKX0pfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsUmVjdCkuZGF0YShpLnJlcGVhdCxmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLmNlbGxSZWN0LCEwKSxlfShsKSk7dmFyIGM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY2VsbFRleHQpLmRhdGEoaS5yZXBlYXQsZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KTtyZXR1cm4gZS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQobi5jbi5jZWxsVGV4dCwhMCkuc3R5bGUoImN1cnNvciIsZnVuY3Rpb24oKXtyZXR1cm4iYXV0byJ9KS5vbigibW91c2Vkb3duIixmdW5jdGlvbigpe2EuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9KSxlfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsVGV4dEhvbGRlcikuZGF0YShpLnJlcGVhdCxmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlXaXRoaW5CbG9ja30pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNlbGxUZXh0SG9sZGVyLCEwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIiksZX0obCkpOyFmdW5jdGlvbih0KXt0LmVhY2goZnVuY3Rpb24odCl7by5mb250KGEuc2VsZWN0KHRoaXMpLHQuZm9udCl9KX0oYykseChjLGUscyx0KSxPKGwpfWZ1bmN0aW9uIHgodCxlLHIsaSl7dC50ZXh0KGZ1bmN0aW9uKHQpe3ZhciBlPXQuY29sdW1uLnNwZWNJbmRleCxyPXQucm93TnVtYmVyLGk9dC52YWx1ZSxvPSJzdHJpbmciPT10eXBlb2YgaSxzPW8mJmkubWF0Y2goLzxicj4vaSksbD0hb3x8czt0Lm1heUhhdmVNYXJrdXA9byYmaS5tYXRjaCgvWzwmPl0vKTt2YXIgYyx1PSJzdHJpbmciPT10eXBlb2YoYz1pKSYmYy5tYXRjaChuLmxhdGV4Q2hlY2spO3QubGF0ZXg9dTt2YXIgaCxmLHA9dT8iIjpfKHQuY2FsY2RhdGEuY2VsbHMucHJlZml4LGUscil8fCIiLGQ9dT8iIjpfKHQuY2FsY2RhdGEuY2VsbHMuc3VmZml4LGUscil8fCIiLGc9dT9udWxsOl8odC5jYWxjZGF0YS5jZWxscy5mb3JtYXQsZSxyKXx8bnVsbCx2PXArKGc/YS5mb3JtYXQoZykodC52YWx1ZSk6dC52YWx1ZSkrZDtpZih0LndyYXBwaW5nTmVlZGVkPSF0LndyYXBwZWQmJiFsJiYhdSYmKGg9Yih2KSksdC5jZWxsSGVpZ2h0TWF5SW5jcmVhc2U9c3x8dXx8dC5tYXlIYXZlTWFya3VwfHwodm9pZCAwPT09aD9iKHYpOmgpLHQubmVlZHNDb252ZXJ0VG9Uc3BhbnM9dC5tYXlIYXZlTWFya3VwfHx0LndyYXBwaW5nTmVlZGVkfHx0LmxhdGV4LHQud3JhcHBpbmdOZWVkZWQpe3ZhciBtPSgiICI9PT1uLndyYXBTcGxpdENoYXJhY3Rlcj92LnJlcGxhY2UoLzxhIGhyZWY9L2dpLCI8YV9ocmVmPSIpOnYpLnNwbGl0KG4ud3JhcFNwbGl0Q2hhcmFjdGVyKSx5PSIgIj09PW4ud3JhcFNwbGl0Q2hhcmFjdGVyP20ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoLzxhX2hyZWY9L2dpLCI8YSBocmVmPSIpfSk6bTt0LmZyYWdtZW50cz15Lm1hcChmdW5jdGlvbih0KXtyZXR1cm57dGV4dDp0LHdpZHRoOm51bGx9fSksdC5mcmFnbWVudHMucHVzaCh7ZnJhZ21lbnQ6bi53cmFwU3BhY2VyLHdpZHRoOm51bGx9KSxmPXkuam9pbihuLmxpbmVCcmVha2VyKStuLmxpbmVCcmVha2VyK24ud3JhcFNwYWNlcn1lbHNlIGRlbGV0ZSB0LmZyYWdtZW50cyxmPXY7cmV0dXJuIGZ9KS5hdHRyKCJkeSIsZnVuY3Rpb24odCl7cmV0dXJuIHQubmVlZHNDb252ZXJ0VG9Uc3BhbnM/MDoiMC43NWVtIn0pLmVhY2goZnVuY3Rpb24odCl7dmFyIG89YS5zZWxlY3QodGhpcyksbD10LndyYXBwaW5nTmVlZGVkP0w6Qzt0Lm5lZWRzQ29udmVydFRvVHNwYW5zP3MuY29udmVydFRvVHNwYW5zKG8saSxsKHIsdGhpcyxlLGksdCkpOmEuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrUCh0KSsiICIrbi5jZWxsUGFkKyIpIn0pLmF0dHIoInRleHQtYW5jaG9yIixmdW5jdGlvbih0KXtyZXR1cm57bGVmdDoic3RhcnQiLGNlbnRlcjoibWlkZGxlIixyaWdodDoiZW5kIn1bdC5hbGlnbl19KX0pfWZ1bmN0aW9uIGIodCl7cmV0dXJuLTEhPT10LmluZGV4T2Yobi53cmFwU3BsaXRDaGFyYWN0ZXIpfWZ1bmN0aW9uIF8odCxlLHIpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuPXRbTWF0aC5taW4oZSx0Lmxlbmd0aC0xKV07cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bltNYXRoLm1pbihyLG4ubGVuZ3RoLTEpXTpufXJldHVybiB0fWZ1bmN0aW9uIHcodCxlLHIpe3QudHJhbnNpdGlvbigpLmVhc2Uobi5yZWxlYXNlVHJhbnNpdGlvbkVhc2UpLmR1cmF0aW9uKG4ucmVsZWFzZVRyYW5zaXRpb25EdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS54KyIgIityKyIpIil9ZnVuY3Rpb24gayh0KXtyZXR1cm4iY2VsbHMiPT09dC50eXBlfWZ1bmN0aW9uIFQodCl7cmV0dXJuImhlYWRlciI9PT10LnR5cGV9ZnVuY3Rpb24gTSh0KXtyZXR1cm4odC5yb3dCbG9ja3MubGVuZ3RoP3Qucm93QmxvY2tzWzBdLmF1eGlsaWFyeUJsb2NrczpbXSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrSShlLDEvMCl9LDApfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPXYoZSlbMF07aWYodm9pZCAwIT09bil7dmFyIGE9bi5yb3dCbG9ja3MsaT1uLmNhbGNkYXRhLG89eihhLGEubGVuZ3RoKSxzPW4uY2FsY2RhdGEuZ3JvdXBIZWlnaHQtTShuKSxsPWkuc2Nyb2xsWT1NYXRoLm1heCgwLE1hdGgubWluKG8tcyxpLnNjcm9sbFkpKSxjPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49W10sYT0wLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBvPXRbaV0scz1vLnJvd3MsbD0wLGM9MDtjPHMubGVuZ3RoO2MrKylsKz1zW2NdLnJvd0hlaWdodDtvLmFsbFJvd3NIZWlnaHQ9bCxlPGErbCYmZStyPmEmJm4ucHVzaChpKSxhKz1sfXJldHVybiBufShhLGwscyk7MT09PWMubGVuZ3RoJiYoY1swXT09PWEubGVuZ3RoLTE/Yy51bnNoaWZ0KGNbMF0tMSk6Yy5wdXNoKGNbMF0rMSkpLGNbMF0lMiYmYy5yZXZlcnNlKCksZS5lYWNoKGZ1bmN0aW9uKHQsZSl7dC5wYWdlPWNbZV0sdC5zY3JvbGxZPWx9KSxlLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgwICIrKHoodC5yb3dCbG9ja3MsdC5wYWdlKS10LnNjcm9sbFkpKyIpIn0pLHQmJihFKHQscixlLGMsbi5wcmV2UGFnZXMsbiwwKSxFKHQscixlLGMsbi5wcmV2UGFnZXMsbiwxKSxtKHIsdCkpfX1mdW5jdGlvbiBTKHQsZSxyLGkpe3JldHVybiBmdW5jdGlvbihvKXt2YXIgcz1vLmNhbGNkYXRhP28uY2FsY2RhdGE6byxsPWUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBzLmtleT09PXQua2V5fSksYz1yfHxzLnNjcm9sbGJhclN0YXRlLmRyYWdNdWx0aXBsaWVyLHU9cy5zY3JvbGxZO3Muc2Nyb2xsWT12b2lkIDA9PT1pP3Muc2Nyb2xsWStjKmEuZXZlbnQuZHk6aTt2YXIgaD1sLnNlbGVjdEFsbCgiLiIrbi5jbi55Q29sdW1uKS5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQmxvY2spLmZpbHRlcihrKTtyZXR1cm4gQSh0LGgsbCkscy5zY3JvbGxZPT09dX19ZnVuY3Rpb24gRSh0LGUscixuLGEsaSxvKXtuW29dIT09YVtvXSYmKGNsZWFyVGltZW91dChpLmN1cnJlbnRSZXBhaW50W29dKSxpLmN1cnJlbnRSZXBhaW50W29dPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgaT1yLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVybiBlPT09byYmbltlXSE9PWFbZV19KTt5KHQsZSxpLHIpLGFbb109bltvXX0pKX1mdW5jdGlvbiBMKHQsZSxyLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBvPWEuc2VsZWN0KGUucGFyZW50Tm9kZSk7by5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZnJhZ21lbnRzO28uc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuZWFjaChmdW5jdGlvbih0LHIpe2Vbcl0ud2lkdGg9dGhpcy5nZXRDb21wdXRlZFRleHRMZW5ndGgoKX0pO3ZhciByLGEsaT1lW2UubGVuZ3RoLTFdLndpZHRoLHM9ZS5zbGljZSgwLC0xKSxsPVtdLGM9MCx1PXQuY29sdW1uLmNvbHVtbldpZHRoLTIqbi5jZWxsUGFkO2Zvcih0LnZhbHVlPSIiO3MubGVuZ3RoOyljKyhhPShyPXMuc2hpZnQoKSkud2lkdGgraSk+dSYmKHQudmFsdWUrPWwuam9pbihuLndyYXBTcGFjZXIpK24ubGluZUJyZWFrZXIsbD1bXSxjPTApLGwucHVzaChyLnRleHQpLGMrPWE7YyYmKHQudmFsdWUrPWwuam9pbihuLndyYXBTcGFjZXIpKSx0LndyYXBwZWQ9ITB9KSxvLnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLnJlbW92ZSgpLHgoby5zZWxlY3QoIi4iK24uY24uY2VsbFRleHQpLHIsdCxpKSxhLnNlbGVjdChlLnBhcmVudE5vZGUucGFyZW50Tm9kZSkuY2FsbChPKX19ZnVuY3Rpb24gQyh0LGUscixpLG8pe3JldHVybiBmdW5jdGlvbigpe2lmKCFvLnNldHRsZWRZKXt2YXIgcz1hLnNlbGVjdChlLnBhcmVudE5vZGUpLGw9UihvKSxjPW8ua2V5LWwuZmlyc3RSb3dJbmRleCx1PWwucm93c1tjXS5yb3dIZWlnaHQsaD1vLmNlbGxIZWlnaHRNYXlJbmNyZWFzZT9lLnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KzIqbi5jZWxsUGFkOnUsZj1NYXRoLm1heChoLHUpO2YtbC5yb3dzW2NdLnJvd0hlaWdodCYmKGwucm93c1tjXS5yb3dIZWlnaHQ9Zix0LnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5DZWxsKS5jYWxsKE8pLEEobnVsbCx0LmZpbHRlcihrKSwwKSxtKHIsaSwhMCkpLHMuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPWEuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0KCIuIituLmNuLmNlbGxSZWN0KS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10aGlzLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCksaT1lLnRvcC10LnRvcCsocj9yLm1hdHJpeC5mOm4uY2VsbFBhZCk7cmV0dXJuInRyYW5zbGF0ZSgiK1AobyxhLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLnNlbGVjdCgiLiIrbi5jbi5jZWxsVGV4dEhvbGRlcikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKSsiICIraSsiKSJ9KSxvLnNldHRsZWRZPSEwfX19ZnVuY3Rpb24gUCh0LGUpe3N3aXRjaCh0LmFsaWduKXtjYXNlImxlZnQiOnJldHVybiBuLmNlbGxQYWQ7Y2FzZSJyaWdodCI6cmV0dXJuIHQuY29sdW1uLmNvbHVtbldpZHRoLShlfHwwKS1uLmNlbGxQYWQ7Y2FzZSJjZW50ZXIiOnJldHVybih0LmNvbHVtbi5jb2x1bW5XaWR0aC0oZXx8MCkpLzI7ZGVmYXVsdDpyZXR1cm4gbi5jZWxsUGFkfX1mdW5jdGlvbiBPKHQpe3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXt2YXIgZT10LnJvd0Jsb2Nrc1swXS5hdXhpbGlhcnlCbG9ja3MucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrSShlLDEvMCl9LDApO3JldHVybiJ0cmFuc2xhdGUoMCAiKyhJKFIodCksdC5rZXkpK2UpKyIpIn0pLnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsUmVjdCkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4oZT1SKHQpLHI9dC5rZXksZS5yb3dzW3ItZS5maXJzdFJvd0luZGV4XSkucm93SGVpZ2h0O3ZhciBlLHJ9KX1mdW5jdGlvbiB6KHQsZSl7Zm9yKHZhciByPTAsbj1lLTE7bj49MDtuLS0pcis9RCh0W25dKTtyZXR1cm4gcn1mdW5jdGlvbiBJKHQsZSl7Zm9yKHZhciByPTAsbj0wO248dC5yb3dzLmxlbmd0aCYmdC5yb3dzW25dLnJvd0luZGV4PGU7bisrKXIrPXQucm93c1tuXS5yb3dIZWlnaHQ7cmV0dXJuIHJ9ZnVuY3Rpb24gRCh0KXt2YXIgZT10LmFsbFJvd3NIZWlnaHQ7aWYodm9pZCAwIT09ZSlyZXR1cm4gZTtmb3IodmFyIHI9MCxuPTA7bjx0LnJvd3MubGVuZ3RoO24rKylyKz10LnJvd3Nbbl0ucm93SGVpZ2h0O3JldHVybiB0LmFsbFJvd3NIZWlnaHQ9cixyfWZ1bmN0aW9uIFIodCl7cmV0dXJuIHQucm93QmxvY2tzW3QucGFnZV19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9IXQuX2NvbnRleHQuc3RhdGljUGxvdCxzPXQuX2Z1bGxMYXlvdXQuX3BhcGVyLnNlbGVjdEFsbCgiLiIrbi5jbi50YWJsZSkuZGF0YShlLm1hcChmdW5jdGlvbihlKXt2YXIgcj1pLnVud3JhcChlKS50cmFjZTtyZXR1cm4gdSh0LHIpfSksaS5rZXlGdW4pO3MuZXhpdCgpLnJlbW92ZSgpLHMuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24udGFibGUsITApLmF0dHIoIm92ZXJmbG93IiwidmlzaWJsZSIpLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKS5zdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgib3ZlcmZsb3ciLCJ2aXNpYmxlIikuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKSxzLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aCt0LnNpemUubCt0LnNpemUucn0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0K3Quc2l6ZS50K3Quc2l6ZS5ifSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC50cmFuc2xhdGVYKyIsIit0LnRyYW5zbGF0ZVkrIikifSk7dmFyIGY9cy5zZWxlY3RBbGwoIi4iK24uY24udGFibGVDb250cm9sVmlldykuZGF0YShpLnJlcGVhdCxpLmtleUZ1bikseD1mLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLnRhYmxlQ29udHJvbFZpZXcsITApLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKTtyJiZ4Lm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKGUpe2YuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dH0pLmNhbGwobSx0KX0pLm9uKCJtb3VzZXdoZWVsIixmdW5jdGlvbihlKXtpZighZS5zY3JvbGxiYXJTdGF0ZS53aGVlbGluZyl7ZS5zY3JvbGxiYXJTdGF0ZS53aGVlbGluZz0hMDt2YXIgcj1lLnNjcm9sbFkrYS5ldmVudC5kZWx0YVk7Uyh0LGYsbnVsbCxyKShlKXx8KGEuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksYS5ldmVudC5wcmV2ZW50RGVmYXVsdCgpKSxlLnNjcm9sbGJhclN0YXRlLndoZWVsaW5nPSExfX0pLmNhbGwobSx0LCEwKSxmLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3Quc2l6ZS5sKyIgIit0LnNpemUudCsiKSJ9KTt2YXIgYj1mLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxCYWNrZ3JvdW5kKS5kYXRhKGkucmVwZWF0LGkua2V5RnVuKTtiLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLnNjcm9sbEJhY2tncm91bmQsITApLmF0dHIoImZpbGwiLCJub25lIiksYi5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pLGYuZWFjaChmdW5jdGlvbihlKXtvLnNldENsaXBVcmwoYS5zZWxlY3QodGhpcyksZCh0LGUpLHQpfSk7dmFyIF89Zi5zZWxlY3RBbGwoIi4iK24uY24ueUNvbHVtbikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5zfSxpLmtleUZ1bik7Xy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi55Q29sdW1uLCEwKSxfLmV4aXQoKS5yZW1vdmUoKSxfLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiIDApIn0pLHImJl8uY2FsbChhLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24oZSl7cmV0dXJuIHcoYS5zZWxlY3QodGhpcyksZSwtbi51cGxpZnQpLGwodGhpcyksZS5jYWxjZGF0YS5jb2x1bW5EcmFnSW5Qcm9ncmVzcz0hMCxtKGYuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGNkYXRhLmtleT09PXQua2V5fSksdCksZX0pLm9uKCJkcmFnIixmdW5jdGlvbih0KXt2YXIgZT1hLnNlbGVjdCh0aGlzKSxyPWZ1bmN0aW9uKGUpe3JldHVybih0PT09ZT9hLmV2ZW50Lng6ZS54KStlLmNvbHVtbldpZHRoLzJ9O3QueD1NYXRoLm1heCgtbi5vdmVyZHJhZyxNYXRoLm1pbih0LmNhbGNkYXRhLndpZHRoK24ub3ZlcmRyYWctdC5jb2x1bW5XaWR0aCxhLmV2ZW50LngpKSx2KF8pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5jYWxjZGF0YS5rZXk9PT10LmNhbGNkYXRhLmtleX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0KS1yKGUpfSkuZm9yRWFjaChmdW5jdGlvbihlLHIpe2UueEluZGV4PXIsZS54PXQ9PT1lP2UueDplLnhTY2FsZShlKX0pLF8uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0IT09ZX0pLnRyYW5zaXRpb24oKS5lYXNlKG4udHJhbnNpdGlvbkVhc2UpLmR1cmF0aW9uKG4udHJhbnNpdGlvbkR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LngrIiAwKSJ9KSxlLmNhbGwoYykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC54KyIgLSIrbi51cGxpZnQrIiApIil9KS5vbigiZHJhZ2VuZCIsZnVuY3Rpb24oZSl7dmFyIHI9YS5zZWxlY3QodGhpcyksbj1lLmNhbGNkYXRhO2UueD1lLnhTY2FsZShlKSxlLmNhbGNkYXRhLmNvbHVtbkRyYWdJblByb2dyZXNzPSExLHcocixlLDApLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLmdkQ29sdW1uc09yaWdpbmFsT3JkZXI7ZS5nZENvbHVtbnMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiByW24uaW5kZXhPZih0KV0tcltuLmluZGV4T2YoZSldfSksZS5jb2x1bW5vcmRlcj1yLHQuZW1pdCgicGxvdGx5X3Jlc3R5bGUiKX0odCxuLG4uY29sdW1ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQueEluZGV4fSkpfSkpLF8uZWFjaChmdW5jdGlvbihlKXtvLnNldENsaXBVcmwoYS5zZWxlY3QodGhpcyksZyh0LGUpLHQpfSk7dmFyIE09Xy5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQmxvY2spLmRhdGEoaC5zcGxpdFRvUGFuZWxzLGkua2V5RnVuKTtNLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNvbHVtbkJsb2NrLCEwKS5hdHRyKCJpZCIsZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSksTS5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbih0KXtyZXR1cm4gdC5kcmFnSGFuZGxlPyJldy1yZXNpemUiOnQuY2FsY2RhdGEuc2Nyb2xsYmFyU3RhdGUuYmFyV2lnZ2xlUm9vbT8ibnMtcmVzaXplIjoiZGVmYXVsdCJ9KTt2YXIgRT1NLmZpbHRlcihUKSxMPU0uZmlsdGVyKGspO3ImJkwuY2FsbChhLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oZnVuY3Rpb24odCl7cmV0dXJuIGEuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksdH0pLm9uKCJkcmFnIixTKHQsZiwtMSkpLm9uKCJkcmFnZW5kIixmdW5jdGlvbigpe30pKSx5KHQsZixFLE0pLHkodCxmLEwsTSk7dmFyIEM9Zi5zZWxlY3RBbGwoIi4iK24uY24uc2Nyb2xsQXJlYUNsaXApLmRhdGEoaS5yZXBlYXQsaS5rZXlGdW4pO0MuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZChuLmNuLnNjcm9sbEFyZWFDbGlwLCEwKS5hdHRyKCJpZCIsZnVuY3Rpb24oZSl7cmV0dXJuIGQodCxlKX0pO3ZhciBQPUMuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbEFyZWFDbGlwUmVjdCkuZGF0YShpLnJlcGVhdCxpLmtleUZ1bik7UC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQobi5jbi5zY3JvbGxBcmVhQ2xpcFJlY3QsITApLmF0dHIoIngiLC1uLm92ZXJkcmFnKS5hdHRyKCJ5Iiwtbi51cGxpZnQpLmF0dHIoImZpbGwiLCJub25lIiksUC5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGgrMipuLm92ZXJkcmFnfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQrbi51cGxpZnR9KSxfLnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5Cb3VuZGFyeSkuZGF0YShpLnJlcGVhdCxpLmtleUZ1bikuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY29sdW1uQm91bmRhcnksITApO3ZhciBPPV8uc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkJvdW5kYXJ5Q2xpcHBhdGgpLmRhdGEoaS5yZXBlYXQsaS5rZXlGdW4pO08uZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZChuLmNuLmNvbHVtbkJvdW5kYXJ5Q2xpcHBhdGgsITApLE8uYXR0cigiaWQiLGZ1bmN0aW9uKGUpe3JldHVybiBnKHQsZSl9KTt2YXIgej1PLnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5Cb3VuZGFyeVJlY3QpLmRhdGEoaS5yZXBlYXQsaS5rZXlGdW4pO3ouZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uY29sdW1uQm91bmRhcnlSZWN0LCEwKS5hdHRyKCJmaWxsIiwibm9uZSIpLHouYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbldpZHRoKzIqcCh0KX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuY2FsY2RhdGEuaGVpZ2h0KzIqcCh0KStuLnVwbGlmdH0pLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybi1wKHQpfSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuLXAodCl9KSxBKG51bGwsTCxmKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYxMywiLi4vLi4vbGliIjo3MTcsIi4uLy4uL2xpYi9ndXAiOjcxNSwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NDEsIi4vY29uc3RhbnRzIjoxMjUxLCIuL2RhdGFfcHJlcGFyYXRpb25faGVscGVyIjoxMjUyLCIuL2RhdGFfc3BsaXRfaGVscGVycyI6MTI1MyxkMzoxNjV9XSwxMjU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxzPXQoIi4uL3BpZS9hdHRyaWJ1dGVzIiksbD10KCIuLi9zdW5idXJzdC9hdHRyaWJ1dGVzIiksYz10KCIuL2NvbnN0YW50cyIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtsYWJlbHM6bC5sYWJlbHMscGFyZW50czpsLnBhcmVudHMsdmFsdWVzOmwudmFsdWVzLGJyYW5jaHZhbHVlczpsLmJyYW5jaHZhbHVlcyxjb3VudDpsLmNvdW50LGxldmVsOmwubGV2ZWwsbWF4ZGVwdGg6bC5tYXhkZXB0aCx0aWxpbmc6e3BhY2tpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNxdWFyaWZ5IiwiYmluYXJ5IiwiZGljZSIsInNsaWNlIiwic2xpY2UtZGljZSIsImRpY2Utc2xpY2UiXSxkZmx0OiJzcXVhcmlmeSIsZWRpdFR5cGU6InBsb3QifSxzcXVhcmlmeXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGZsaXA6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbIngiLCJ5Il0sZGZsdDoiIixlZGl0VHlwZToicGxvdCJ9LHBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjMsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp1KHtwYWQ6e3Q6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90In0scjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCJ9LGI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyJ9LGNvbG9yczpsLm1hcmtlci5jb2xvcnMsZGVwdGhmYWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCExLCJyZXZlcnNlZCJdLGVkaXRUeXBlOiJzdHlsZSJ9LGxpbmU6bC5tYXJrZXIubGluZSxlZGl0VHlwZToiY2FsYyJ9LGkoIm1hcmtlciIse2NvbG9yQXR0cjoiY29sb3JzIixhbmltOiExfSkpLHBhdGhiYXI6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iXSxkZmx0OiJ0b3AiLGVkaXRUeXBlOiJwbG90In0sZWRnZXNoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyI+IiwiPCIsInwiLCIvIiwiXFwiXSxkZmx0OiI+IixlZGl0VHlwZToicGxvdCJ9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MTIsZWRpdFR5cGU6InBsb3QifSx0ZXh0Zm9udDp1KHt9LHMudGV4dGZvbnQse30pLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDpzLnRleHQsdGV4dGluZm86bC50ZXh0aW5mbyx0ZXh0dGVtcGxhdGU6YSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpjLmV2ZW50RGF0YUtleXMuY29uY2F0KFsibGFiZWwiLCJ2YWx1ZSJdKX0pLGhvdmVydGV4dDpzLmhvdmVydGV4dCxob3ZlcmluZm86bC5ob3ZlcmluZm8saG92ZXJ0ZW1wbGF0ZTpuKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLHRleHRmb250OnMudGV4dGZvbnQsaW5zaWRldGV4dGZvbnQ6cy5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6dSh7fSxzLm91dHNpZGV0ZXh0Zm9udCx7fSksdGV4dHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgbGVmdCIsIm1pZGRsZSBjZW50ZXIiLCJtaWRkbGUgcmlnaHQiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxkZmx0OiJ0b3AgbGVmdCIsZWRpdFR5cGU6InBsb3QifSxkb21haW46byh7bmFtZToidHJlZW1hcCIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo1OTksIi4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdHMvZG9tYWluIjo3OTAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg0MSwiLi4vcGllL2F0dHJpYnV0ZXMiOjEwOTQsIi4uL3N1bmJ1cnN0L2F0dHJpYnV0ZXMiOjEyMzEsIi4vY29uc3RhbnRzIjoxMjYwfV0sMTI1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0idHJlZW1hcCIsci5wbG90PWZ1bmN0aW9uKHQsZSxhLGkpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsYSxpKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsYSxpKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxhLGkpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6ODI2fV0sMTI1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zdW5idXJzdC9jYWxjIik7ci5jYWxjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uY2FsYyh0LGUpfSxyLmNyb3NzVHJhY2VDYWxjPWZ1bmN0aW9uKHQpe3JldHVybiBuLl9ydW5Dcm9zc1RyYWNlQ2FsYygidHJlZW1hcCIsdCl9fSx7Ii4uL3N1bmJ1cnN0L2NhbGMiOjEyMzN9XSwxMjYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Q0xJQ0tfVFJBTlNJVElPTl9USU1FOjc1MCxDTElDS19UUkFOU0lUSU9OX0VBU0lORzoicG9seSIsZXZlbnREYXRhS2V5czpbImN1cnJlbnRQYXRoIiwicm9vdCIsImVudHJ5IiwicGVyY2VudFJvb3QiLCJwZXJjZW50RW50cnkiLCJwZXJjZW50UGFyZW50Il0sZ2FwV2l0aFBhdGhiYXI6MX19LHt9XSwxMjYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxzPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQsbD10KCIuLi9iYXIvY29uc3RhbnRzIikuVEVYVFBBRCxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHU9Yy5oYXNDb2xvcnNjYWxlLGg9Yy5oYW5kbGVEZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gZihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXZhciBwPWYoImxhYmVscyIpLGQ9ZigicGFyZW50cyIpO2lmKHAmJnAubGVuZ3RoJiZkJiZkLmxlbmd0aCl7dmFyIGc9ZigidmFsdWVzIik7ZyYmZy5sZW5ndGg/ZigiYnJhbmNodmFsdWVzIik6ZigiY291bnQiKSxmKCJsZXZlbCIpLGYoIm1heGRlcHRoIiksInNxdWFyaWZ5Ij09PWYoInRpbGluZy5wYWNraW5nIikmJmYoInRpbGluZy5zcXVhcmlmeXJhdGlvIiksZigidGlsaW5nLmZsaXAiKSxmKCJ0aWxpbmcucGFkIik7dmFyIHY9ZigidGV4dCIpO2YoInRleHR0ZW1wbGF0ZSIpLGUudGV4dHRlbXBsYXRlfHxmKCJ0ZXh0aW5mbyIsQXJyYXkuaXNBcnJheSh2KT8idGV4dCtsYWJlbCI6ImxhYmVsIiksZigiaG92ZXJ0ZXh0IiksZigiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBtPWYoInBhdGhiYXIudmlzaWJsZSIpO3ModCxlLGMsZiwiYXV0byIse2hhc1BhdGhiYXI6bSxtb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMSxtb2R1bGVIYXNDbGlwb25heGlzOiExLG1vZHVsZUhhc1RleHRhbmdsZTohMSxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITF9KSxmKCJ0ZXh0cG9zaXRpb24iKTt2YXIgeT0tMSE9PWUudGV4dHBvc2l0aW9uLmluZGV4T2YoImJvdHRvbSIpO2YoIm1hcmtlci5saW5lLndpZHRoIikmJmYoIm1hcmtlci5saW5lLmNvbG9yIixjLnBhcGVyX2JnY29sb3IpO3ZhciB4PWYoIm1hcmtlci5jb2xvcnMiKSxiPWUuX2hhc0NvbG9yc2NhbGU9dSh0LCJtYXJrZXIiLCJjb2xvcnMiKXx8KHQubWFya2VyfHx7fSkuY29sb3JheGlzO2I/aCh0LGUsYyxmLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSk6ZigibWFya2VyLmRlcHRoZmFkZSIsISh4fHxbXSkubGVuZ3RoKTt2YXIgXz0yKmUudGV4dGZvbnQuc2l6ZTtmKCJtYXJrZXIucGFkLnQiLHk/Xy80Ol8pLGYoIm1hcmtlci5wYWQubCIsXy80KSxmKCJtYXJrZXIucGFkLnIiLF8vNCksZigibWFya2VyLnBhZC5iIix5P186Xy80KSxiJiZoKHQsZSxjLGYse3ByZWZpeDoibWFya2VyLiIsY0xldHRlcjoiYyJ9KSxlLl9ob3ZlcmVkPXttYXJrZXI6e2xpbmU6e3dpZHRoOjIsY29sb3I6aS5jb250cmFzdChjLnBhcGVyX2JnY29sb3IpfX19LG0mJihmKCJwYXRoYmFyLnRoaWNrbmVzcyIsZS5wYXRoYmFyLnRleHRmb250LnNpemUrMipsKSxmKCJwYXRoYmFyLnNpZGUiKSxmKCJwYXRoYmFyLmVkZ2VzaGFwZSIpKSxvKGUsYyxmKSxlLl9sZW5ndGg9bnVsbH1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYwNCwiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6NzkwLCIuLi9iYXIvY29uc3RhbnRzIjo4NTgsIi4uL2Jhci9kZWZhdWx0cyI6ODYwLCIuL2F0dHJpYnV0ZXMiOjEyNTd9XSwxMjYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscz10KCIuL3BhcnRpdGlvbiIpLGw9dCgiLi9zdHlsZSIpLnN0eWxlT25lLGM9dCgiLi9jb25zdGFudHMiKSx1PXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxoPXQoIi4uL3N1bmJ1cnN0L2Z4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYscCl7dmFyIGQ9cC5iYXJEaWZZLGc9cC53aWR0aCx2PXAuaGVpZ2h0LG09cC52aWV3WCx5PXAudmlld1kseD1wLnBhdGhTbGljZSxiPXAudG9Nb3ZlSW5zaWRlU2xpY2UsXz1wLnN0clRyYW5zZm9ybSx3PXAuaGFzVHJhbnNpdGlvbixrPXAuaGFuZGxlU2xpY2VzRXhpdCxUPXAubWFrZVVwZGF0ZVNsaWNlSW50ZXJwb2xhdG9yLE09cC5tYWtlVXBkYXRlVGV4dEludGVycG9sYXRvcixBPXt9LFM9dC5fZnVsbExheW91dCxFPWVbMF0sTD1FLnRyYWNlLEM9RS5oaWVyYXJjaHksUD1nL0wuX2VudHJ5RGVwdGgsTz11Lmxpc3RQYXRoKHIuZGF0YSwiaWQiKSx6PXMoQy5jb3B5KCksW2csdl0se3BhY2tpbmc6ImRpY2UiLHBhZDp7aW5uZXI6MCx0b3A6MCxsZWZ0OjAscmlnaHQ6MCxib3R0b206MH19KS5kZXNjZW5kYW50cygpOyh6PXouZmlsdGVyKGZ1bmN0aW9uKHQpe3ZhciBlPU8uaW5kZXhPZih0LmRhdGEuaWQpO3JldHVybi0xIT09ZSYmKHQueDA9UCplLHQueDE9UCooZSsxKSx0LnkwPWQsdC55MT1kK3YsdC5vblBhdGhiYXI9ITAsITApfSkpLnJldmVyc2UoKSwoZj1mLmRhdGEoeix1LmdldFB0SWQpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBhdGhiYXIiLCEwKSxrKGYsITAsQSxbZyx2XSx4KSxmLm9yZGVyKCk7dmFyIEk9Zjt3JiYoST1JLnRyYW5zaXRpb24oKS5lYWNoKCJlbmQiLGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7dS5zZXRTbGljZUN1cnNvcihlLHQse2hpZGVPblJvb3Q6ITEsaGlkZU9uTGVhdmVzOiExLGlzVHJhbnNpdGlvbmluZzohMX0pfSkpLEkuZWFjaChmdW5jdGlvbihzKXtzLl9ob3Zlclg9bShzLngxLU1hdGgubWluKGcsdikvMikscy5faG92ZXJZPXkocy55MS12LzIpO3ZhciBmPW4uc2VsZWN0KHRoaXMpLHA9YS5lbnN1cmVTaW5nbGUoZiwicGF0aCIsInN1cmZhY2UiLGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KTt3P3AudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsZnVuY3Rpb24odCl7dmFyIGU9VCh0LCEwLEEsW2csdl0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4geChlKHQpKX19KTpwLmF0dHIoImQiLHgpLGYuY2FsbChoLHIsdCxlLHtzdHlsZU9uZTpsLGV2ZW50RGF0YUtleXM6Yy5ldmVudERhdGFLZXlzLHRyYW5zaXRpb25UaW1lOmMuQ0xJQ0tfVFJBTlNJVElPTl9USU1FLHRyYW5zaXRpb25FYXNpbmc6Yy5DTElDS19UUkFOU0lUSU9OX0VBU0lOR30pLmNhbGwodS5zZXRTbGljZUN1cnNvcix0LHtoaWRlT25Sb290OiExLGhpZGVPbkxlYXZlczohMSxpc1RyYW5zaXRpb25pbmc6dC5fdHJhbnNpdGlvbmluZ30pLHAuY2FsbChsLHMsTCx7aG92ZXJlZDohMX0pLHMuX3RleHQ9KHUuZ2V0UHRMYWJlbChzKXx8IiIpLnNwbGl0KCI8YnI+Iikuam9pbigiICIpfHwiIjt2YXIgZD1hLmVuc3VyZVNpbmdsZShmLCJnIiwic2xpY2V0ZXh0Iiksaz1hLmVuc3VyZVNpbmdsZShkLCJ0ZXh0IiwiIixmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSksRT1hLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LHUuZGV0ZXJtaW5lVGV4dEZvbnQoTCxzLFMuZm9udCx7b25QYXRoYmFyOiEwfSkpO2sudGV4dChzLl90ZXh0fHwiICIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKS5jYWxsKGkuZm9udCxFKS5jYWxsKG8uY29udmVydFRvVHNwYW5zLHQpLHMudGV4dEJCPWkuYkJveChrLm5vZGUoKSkscy50cmFuc2Zvcm09YihzLHtmb250U2l6ZTpFLnNpemUsb25QYXRoYmFyOiEwfSkscy50cmFuc2Zvcm0uZm9udFNpemU9RS5zaXplLHc/ay50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBlPU0odCwhMCxBLFtnLHZdKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIF8oZSh0KSl9fSk6ay5hdHRyKCJ0cmFuc2Zvcm0iLF8ocykpfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NDEsIi4uL3N1bmJ1cnN0L2Z4IjoxMjM2LCIuLi9zdW5idXJzdC9oZWxwZXJzIjoxMjM3LCIuL2NvbnN0YW50cyI6MTI2MCwiLi9wYXJ0aXRpb24iOjEyNjcsIi4vc3R5bGUiOjEyNjksZDM6MTY1fV0sMTI2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi9wYXJ0aXRpb24iKSxsPXQoIi4vc3R5bGUiKS5zdHlsZU9uZSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi9zdW5idXJzdC9oZWxwZXJzIiksaD10KCIuLi9zdW5idXJzdC9meCIpLGY9dCgiLi4vc3VuYnVyc3QvcGxvdCIpLmZvcm1hdFNsaWNlTGFiZWw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHAsZCl7dmFyIGc9ZC53aWR0aCx2PWQuaGVpZ2h0LG09ZC52aWV3WCx5PWQudmlld1kseD1kLnBhdGhTbGljZSxiPWQudG9Nb3ZlSW5zaWRlU2xpY2UsXz1kLnN0clRyYW5zZm9ybSx3PWQuaGFzVHJhbnNpdGlvbixrPWQuaGFuZGxlU2xpY2VzRXhpdCxUPWQubWFrZVVwZGF0ZVNsaWNlSW50ZXJwb2xhdG9yLE09ZC5tYWtlVXBkYXRlVGV4dEludGVycG9sYXRvcixBPWQucHJldkVudHJ5LFM9dC5fZnVsbExheW91dCxFPWVbMF0udHJhY2UsTD0tMSE9PUUudGV4dHBvc2l0aW9uLmluZGV4T2YoImxlZnQiKSxDPS0xIT09RS50ZXh0cG9zaXRpb24uaW5kZXhPZigicmlnaHQiKSxQPS0xIT09RS50ZXh0cG9zaXRpb24uaW5kZXhPZigiYm90dG9tIiksTz0hUCYmIUUubWFya2VyLnBhZC50fHxQJiYhRS5tYXJrZXIucGFkLmIsej1zKHIsW2csdl0se3BhY2tpbmc6RS50aWxpbmcucGFja2luZyxzcXVhcmlmeXJhdGlvOkUudGlsaW5nLnNxdWFyaWZ5cmF0aW8sZmxpcFg6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ4Iik+LTEsZmxpcFk6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ5Iik+LTEscGFkOntpbm5lcjpFLnRpbGluZy5wYWQsdG9wOkUubWFya2VyLnBhZC50LGxlZnQ6RS5tYXJrZXIucGFkLmwscmlnaHQ6RS5tYXJrZXIucGFkLnIsYm90dG9tOkUubWFya2VyLnBhZC5ifX0pLmRlc2NlbmRhbnRzKCksST0xLzAsRD0tMS8wO3ouZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmRlcHRoO2U+PUUuX21heERlcHRoPyh0LngwPXQueDE9KHQueDArdC54MSkvMix0LnkwPXQueTE9KHQueTArdC55MSkvMik6KEk9TWF0aC5taW4oSSxlKSxEPU1hdGgubWF4KEQsZSkpfSkscD1wLmRhdGEoeix1LmdldFB0SWQpLEUuX21heFZpc2libGVMYXllcnM9aXNGaW5pdGUoRCk/RC1JKzE6MCxwLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2UiLCEwKSxrKHAsITEse30sW2csdl0seCkscC5vcmRlcigpO3ZhciBSPW51bGw7aWYodyYmQSl7dmFyIEY9dS5nZXRQdElkKEEpO3AuZWFjaChmdW5jdGlvbih0KXtudWxsPT09UiYmdS5nZXRQdElkKHQpPT09RiYmKFI9e3gwOnQueDAseDE6dC54MSx5MDp0LnkwLHkxOnQueTF9KX0pfXZhciBCPWZ1bmN0aW9uKCl7cmV0dXJuIFJ8fHt4MDowLHgxOmcseTA6MCx5MTp2fX0sTj1wO3JldHVybiB3JiYoTj1OLnRyYW5zaXRpb24oKS5lYWNoKCJlbmQiLGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7dS5zZXRTbGljZUN1cnNvcihlLHQse2hpZGVPblJvb3Q6ITAsaGlkZU9uTGVhdmVzOiExLGlzVHJhbnNpdGlvbmluZzohMX0pfSkpLE4uZWFjaChmdW5jdGlvbihzKXt2YXIgcD11LmlzSGVhZGVyKHMsRSk7cy5faG92ZXJYPW0ocy54MS1FLm1hcmtlci5wYWQucikscy5faG92ZXJZPXkoUD9zLnkxLUUubWFya2VyLnBhZC5iLzI6cy55MCtFLm1hcmtlci5wYWQudC8yKTt2YXIgZD1uLnNlbGVjdCh0aGlzKSxrPWEuZW5zdXJlU2luZ2xlKGQsInBhdGgiLCJzdXJmYWNlIixmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSk7dz9rLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLGZ1bmN0aW9uKHQpe3ZhciBlPVQodCwhMSxCKCksW2csdl0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4geChlKHQpKX19KTprLmF0dHIoImQiLHgpLGQuY2FsbChoLHIsdCxlLHtzdHlsZU9uZTpsLGV2ZW50RGF0YUtleXM6Yy5ldmVudERhdGFLZXlzLHRyYW5zaXRpb25UaW1lOmMuQ0xJQ0tfVFJBTlNJVElPTl9USU1FLHRyYW5zaXRpb25FYXNpbmc6Yy5DTElDS19UUkFOU0lUSU9OX0VBU0lOR30pLmNhbGwodS5zZXRTbGljZUN1cnNvcix0LHtpc1RyYW5zaXRpb25pbmc6dC5fdHJhbnNpdGlvbmluZ30pLGsuY2FsbChsLHMsRSx7aG92ZXJlZDohMX0pLHMueDA9PT1zLngxfHxzLnkwPT09cy55MT9zLl90ZXh0PSIiOnMuX3RleHQ9cD9PPyIiOnUuZ2V0UHRMYWJlbChzKXx8IiI6ZihzLHIsRSxlLFMpfHwiIjt2YXIgQT1hLmVuc3VyZVNpbmdsZShkLCJnIiwic2xpY2V0ZXh0Iiksej1hLmVuc3VyZVNpbmdsZShBLCJ0ZXh0IiwiIixmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSksST1hLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LHUuZGV0ZXJtaW5lVGV4dEZvbnQoRSxzLFMuZm9udCkpO3oudGV4dChzLl90ZXh0fHwiICIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLmF0dHIoInRleHQtYW5jaG9yIixDPyJlbmQiOkx8fHA/InN0YXJ0IjoibWlkZGxlIikuY2FsbChpLmZvbnQsSSkuY2FsbChvLmNvbnZlcnRUb1RzcGFucyx0KSxzLnRleHRCQj1pLmJCb3goei5ub2RlKCkpLHMudHJhbnNmb3JtPWIocyx7Zm9udFNpemU6SS5zaXplLGlzSGVhZGVyOnB9KSxzLnRyYW5zZm9ybS5mb250U2l6ZT1JLnNpemUsdz96LnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7dmFyIGU9TSh0LCExLEIoKSxbZyx2XSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBfKGUodCkpfX0pOnouYXR0cigidHJhbnNmb3JtIixfKHMpKX0pLFJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjEzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NDEsIi4uL3N1bmJ1cnN0L2Z4IjoxMjM2LCIuLi9zdW5idXJzdC9oZWxwZXJzIjoxMjM3LCIuLi9zdW5idXJzdC9wbG90IjoxMjQxLCIuL2NvbnN0YW50cyI6MTI2MCwiLi9wYXJ0aXRpb24iOjEyNjcsIi4vc3R5bGUiOjEyNjksZDM6MTY1fV0sMTI2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJ0cmVlbWFwIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6W10sYW5pbWF0YWJsZTohMCxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLG1ldGE6e319fSx7Ii4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMTM4LCIuL2F0dHJpYnV0ZXMiOjEyNTcsIi4vYmFzZV9wbG90IjoxMjU4LCIuL2NhbGMiOjEyNTksIi4vZGVmYXVsdHMiOjEyNjEsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEyNjUsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMjY2LCIuL3Bsb3QiOjEyNjgsIi4vc3R5bGUiOjEyNjl9XSwxMjY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17dHJlZW1hcGNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGVkaXRUeXBlOiJjYWxjIn0sZXh0ZW5kdHJlZW1hcGNvbG9yczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDEyNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfXIoInRyZWVtYXBjb2xvcndheSIsZS5jb2xvcndheSkscigiZXh0ZW5kdHJlZW1hcGNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjcxNywiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTI2NX1dLDEyNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMtaGllcmFyY2h5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxpPXIuZmxpcFgsbz1yLmZsaXBZLHM9ImRpY2Utc2xpY2UiPT09ci5wYWNraW5nLGw9ci5wYWRbbz8iYm90dG9tIjoidG9wIl0sYz1yLnBhZFtpPyJyaWdodCI6ImxlZnQiXSx1PXIucGFkW2k/ImxlZnQiOiJyaWdodCJdLGg9ci5wYWRbbz8idG9wIjoiYm90dG9tIl07cyYmKGE9YyxjPWwsbD1hLGE9dSx1PWgsaD1hKTt2YXIgZj1uLnRyZWVtYXAoKS50aWxlKGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQpe2Nhc2Uic3F1YXJpZnkiOnJldHVybiBuLnRyZWVtYXBTcXVhcmlmeS5yYXRpbyhlKTtjYXNlImJpbmFyeSI6cmV0dXJuIG4udHJlZW1hcEJpbmFyeTtjYXNlImRpY2UiOnJldHVybiBuLnRyZWVtYXBEaWNlO2Nhc2Uic2xpY2UiOnJldHVybiBuLnRyZWVtYXBTbGljZTtkZWZhdWx0OnJldHVybiBuLnRyZWVtYXBTbGljZURpY2V9fShyLnBhY2tpbmcsci5zcXVhcmlmeXJhdGlvKSkucGFkZGluZ0lubmVyKHIucGFkLmlubmVyKS5wYWRkaW5nTGVmdChjKS5wYWRkaW5nUmlnaHQodSkucGFkZGluZ1RvcChsKS5wYWRkaW5nQm90dG9tKGgpLnNpemUocz9bZVsxXSxlWzBdXTplKSh0KTtyZXR1cm4oc3x8aXx8bykmJmZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBhO24uc3dhcFhZJiYoYT1lLngwLGUueDA9ZS55MCxlLnkwPWEsYT1lLngxLGUueDE9ZS55MSxlLnkxPWEpO24uZmxpcFgmJihhPWUueDAsZS54MD1yWzBdLWUueDEsZS54MT1yWzBdLWEpO24uZmxpcFkmJihhPWUueTAsZS55MD1yWzFdLWUueTEsZS55MT1yWzFdLWEpO3ZhciBpPWUuY2hpbGRyZW47aWYoaSlmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl0KGlbb10scixuKX0oZixlLHtzd2FwWFk6cyxmbGlwWDppLGZsaXBZOm99KSxmfX0seyJkMy1oaWVyYXJjaHkiOjE1OX1dLDEyNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxpPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vYmFyL2NvbnN0YW50cyIpLlRFWFRQQUQscz10KCIuLi9iYXIvcGxvdCIpLnRvTW92ZUluc2lkZUJhcixsPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKSxjPWwucmVjb3JkTWluVGV4dFNpemUsdT1sLmNsZWFyTWluVGV4dFNpemUsaD10KCIuLi9iYXIvc3R5bGUiKS5yZXNpemVUZXh0LGY9dCgiLi9jb25zdGFudHMiKSxwPXQoIi4vZHJhd19kZXNjZW5kYW50cyIpLGQ9dCgiLi9kcmF3X2FuY2VzdG9ycyIpO2Z1bmN0aW9uIGcodCl7cmV0dXJuIGEuaXNIaWVyYXJjaHlSb290KHQpPyIiOmEuZ2V0UHRJZCh0KX1mdW5jdGlvbiB2KHQsZSxyLGwpe3ZhciB1PXQuX2Z1bGxMYXlvdXQsaD1lWzBdLHY9aC50cmFjZSxtPWguaGllcmFyY2h5LHk9YS5maW5kRW50cnlXaXRoTGV2ZWwobSx2LmxldmVsKSx4PW4uc2VsZWN0KHIpLGI9eC5zZWxlY3RBbGwoImcucGF0aGJhciIpLF89eC5zZWxlY3RBbGwoImcuc2xpY2UiKTtpZigheSlyZXR1cm4gYi5yZW1vdmUoKSx2b2lkIF8ucmVtb3ZlKCk7dmFyIHc9YS5pc0hpZXJhcmNoeVJvb3QoeSksaz0hdS51bmlmb3JtdGV4dC5tb2RlJiZhLmhhc1RyYW5zaXRpb24obCksVD1hLmdldE1heERlcHRoKHYpLE09dS5fc2l6ZSxBPXYuZG9tYWluLFM9TS53KihBLnhbMV0tQS54WzBdKSxFPU0uaCooQS55WzFdLUEueVswXSksTD1TLEM9di5wYXRoYmFyLnRoaWNrbmVzcyxQPXYubWFya2VyLmxpbmUud2lkdGgrZi5nYXBXaXRoUGF0aGJhcixPPXYucGF0aGJhci52aXNpYmxlP3YucGF0aGJhci5zaWRlLmluZGV4T2YoImJvdHRvbSIpPi0xP0UrUDotKEMrUCk6MCx6PXt4MDpMLHgxOkwseTA6Tyx5MTpPK0N9LEk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXYudGlsaW5nLnBhZCxhPWZ1bmN0aW9uKHQpe3JldHVybiB0LW48PWUueDB9LGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQrbj49ZS54MX0sbz1mdW5jdGlvbih0KXtyZXR1cm4gdC1uPD1lLnkwfSxzPWZ1bmN0aW9uKHQpe3JldHVybiB0K24+PWUueTF9O3JldHVybnt4MDphKHQueDAtbik/MDppKHQueDAtbik/clswXTp0LngwLHgxOmEodC54MStuKT8wOmkodC54MStuKT9yWzBdOnQueDEseTA6byh0LnkwLW4pPzA6cyh0LnkwLW4pP3JbMV06dC55MCx5MTpvKHQueTErbik/MDpzKHQueTErbik/clsxXTp0LnkxfX0sRD1udWxsLFI9e30sRj17fSxCPW51bGwsTj1mdW5jdGlvbih0LGUpe3JldHVybiBlP1JbZyh0KV06RltnKHQpXX0saj1mdW5jdGlvbih0LGUscixuKXtpZihlKXJldHVybiBSW2cobSldfHx6O3ZhciBhPUZbdi5sZXZlbF18fHI7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LmRhdGEuZGVwdGgteS5kYXRhLmRlcHRoPFR9KHQpP0kodCxhLG4pOnt9fTtoLmhhc011bHRpcGxlUm9vdHMmJncmJlQrKyx2Ll9tYXhEZXB0aD1ULHYuX2JhY2tncm91bmRDb2xvcj11LnBhcGVyX2JnY29sb3Isdi5fZW50cnlEZXB0aD15LmRhdGEuZGVwdGgsdi5fYXRSb290TGV2ZWw9dzt2YXIgVj0tUy8yK00ubCtNLncqKEEueFsxXStBLnhbMF0pLzIsVT0tRS8yK00udCtNLmgqKDEtKEEueVsxXStBLnlbMF0pLzIpLHE9ZnVuY3Rpb24odCl7cmV0dXJuIFYrdH0sSD1mdW5jdGlvbih0KXtyZXR1cm4gVSt0fSxHPUgoMCksWT1xKDApLFc9ZnVuY3Rpb24odCl7cmV0dXJuIFkrdH0sWD1mdW5jdGlvbih0KXtyZXR1cm4gRyt0fTtmdW5jdGlvbiBaKHQsZSl7cmV0dXJuIHQrIiwiK2V9dmFyIEo9VygwKSxLPWZ1bmN0aW9uKHQpe3QueD1NYXRoLm1heChKLHQueCl9LFE9di5wYXRoYmFyLmVkZ2VzaGFwZSwkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54MCxuPXQueDEsYT10LnkwLGk9dC55MSxsPXQudGV4dEJCLGg9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT12LnRleHRwb3NpdGlvbi5pbmRleE9mKHQpfSxmPWgoImJvdHRvbSIpLHA9aCgidG9wIil8fGUuaXNIZWFkZXImJiFmPyJzdGFydCI6Zj8iZW5kIjoibWlkZGxlIixkPWgoInJpZ2h0IiksZz1oKCJsZWZ0Iil8fGUub25QYXRoYmFyPy0xOmQ/MTowLG09di5tYXJrZXIucGFkO2lmKGUuaXNIZWFkZXIpe2lmKChyKz1tLmwtbyk+PShuLT1tLnItbykpe3ZhciB5PShyK24pLzI7cj15LG49eX12YXIgeDtmP2E8KHg9aS1tLmIpJiZ4PGkmJihhPXgpOmE8KHg9YSttLnQpJiZ4PGkmJihpPXgpfXZhciBiPXMocixuLGEsaSxsLHtpc0hvcml6b250YWw6ITEsY29uc3RyYWluZWQ6ITAsYW5nbGU6MCxhbmNob3I6cCxsZWZ0VG9SaWdodDpnfSk7cmV0dXJuIGIuZm9udFNpemU9ZS5mb250U2l6ZSxiLnRhcmdldFg9cShiLnRhcmdldFgpLGIudGFyZ2V0WT1IKGIudGFyZ2V0WSksaXNOYU4oYi50YXJnZXRYKXx8aXNOYU4oYi50YXJnZXRZKT97fToociE9PW4mJmEhPT1pJiZjKHYudHlwZSxiLHUpLHtzY2FsZTpiLnNjYWxlLHJvdGF0ZTpiLnJvdGF0ZSx0ZXh0WDpiLnRleHRYLHRleHRZOmIudGV4dFksYW5jaG9yWDpiLmFuY2hvclgsYW5jaG9yWTpiLmFuY2hvclksdGFyZ2V0WDpiLnRhcmdldFgsdGFyZ2V0WTpiLnRhcmdldFl9KX0sdHQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj0wLGE9dDshciYmbjxUOyluKyssKGE9YS5wYXJlbnQpP3I9TihhLGUpOm49VDtyZXR1cm4gcnx8e319LGV0PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHM9Tih0LGUpO2lmKHMpbz1zO2Vsc2UgaWYoZSlvPXo7ZWxzZSBpZihEKWlmKHQucGFyZW50KXt2YXIgbD1CfHxyO2wmJiFlP289SSh0LGwsYSk6KG89e30saS5leHRlbmRGbGF0KG8sdHQodCxlKSkpfWVsc2Ugbz10O2Vsc2Ugbz17fTtyZXR1cm4gbi5pbnRlcnBvbGF0ZShvLHt4MDp0LngwLHgxOnQueDEseTA6dC55MCx5MTp0LnkxfSl9LHJ0PWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPU4odCxlKSxsPXt9LGg9aih0LGUscixvKTtpLmV4dGVuZEZsYXQobCx7dHJhbnNmb3JtOiQoe3gwOmgueDAseDE6aC54MSx5MDpoLnkwLHkxOmgueTEsdGV4dEJCOnQudGV4dEJCLF90ZXh0OnQuX3RleHR9LHtpc0hlYWRlcjphLmlzSGVhZGVyKHQsdil9KX0pLHM/bD1zOnQucGFyZW50JiZpLmV4dGVuZEZsYXQobCx0dCh0LGUpKTt2YXIgZj10LnRyYW5zZm9ybTtyZXR1cm4gdC54MCE9PXQueDEmJnQueTAhPT10LnkxJiZjKHYudHlwZSxmLHUpLG4uaW50ZXJwb2xhdGUobCx7dHJhbnNmb3JtOntzY2FsZTpmLnNjYWxlLHJvdGF0ZTpmLnJvdGF0ZSx0ZXh0WDpmLnRleHRYLHRleHRZOmYudGV4dFksYW5jaG9yWDpmLmFuY2hvclgsYW5jaG9yWTpmLmFuY2hvclksdGFyZ2V0WDpmLnRhcmdldFgsdGFyZ2V0WTpmLnRhcmdldFl9fSl9LG50PWZ1bmN0aW9uKHQsZSxyLGEsaSl7dmFyIG89YVswXSxzPWFbMV07az90LmV4aXQoKS50cmFuc2l0aW9uKCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3Quc2VsZWN0KCJwYXRoLnN1cmZhY2UiKS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJkIixmdW5jdGlvbih0KXt2YXIgcj1mdW5jdGlvbih0LGUscixhKXt2YXIgaSxvPU4odCxlKTtpZihlKWk9ejtlbHNle3ZhciBzPU4oeSxlKTtpPXM/SSh0LHMsYSk6e319cmV0dXJuIG4uaW50ZXJwb2xhdGUobyxpKX0odCxlLDAsW28sc10pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaShyKHQpKX19KSx0LnNlbGVjdCgiZy5zbGljZXRleHQiKS5hdHRyKCJvcGFjaXR5IiwwKX0pLnJlbW92ZSgpOnQuZXhpdCgpLnJlbW92ZSgpfSxhdD1mdW5jdGlvbih0KXt2YXIgZT10LnRyYW5zZm9ybTtyZXR1cm4gdC54MCE9PXQueDEmJnQueTAhPT10LnkxJiZjKHYudHlwZSxlLHUpLGkuZ2V0VGV4dFRyYW5zZm9ybSh7dGV4dFg6ZS50ZXh0WCx0ZXh0WTplLnRleHRZLGFuY2hvclg6ZS5hbmNob3JYLGFuY2hvclk6ZS5hbmNob3JZLHRhcmdldFg6ZS50YXJnZXRYLHRhcmdldFk6ZS50YXJnZXRZLHNjYWxlOmUuc2NhbGUscm90YXRlOmUucm90YXRlfSl9O2smJihiLmVhY2goZnVuY3Rpb24odCl7UltnKHQpXT17eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX0sdC50cmFuc2Zvcm0mJihSW2codCldLnRyYW5zZm9ybT17dGV4dFg6dC50cmFuc2Zvcm0udGV4dFgsdGV4dFk6dC50cmFuc2Zvcm0udGV4dFksYW5jaG9yWDp0LnRyYW5zZm9ybS5hbmNob3JYLGFuY2hvclk6dC50cmFuc2Zvcm0uYW5jaG9yWSx0YXJnZXRYOnQudHJhbnNmb3JtLnRhcmdldFgsdGFyZ2V0WTp0LnRyYW5zZm9ybS50YXJnZXRZLHNjYWxlOnQudHJhbnNmb3JtLnNjYWxlLHJvdGF0ZTp0LnRyYW5zZm9ybS5yb3RhdGV9KX0pLF8uZWFjaChmdW5jdGlvbih0KXtGW2codCldPXt4MDp0LngwLHgxOnQueDEseTA6dC55MCx5MTp0LnkxfSx0LnRyYW5zZm9ybSYmKEZbZyh0KV0udHJhbnNmb3JtPXt0ZXh0WDp0LnRyYW5zZm9ybS50ZXh0WCx0ZXh0WTp0LnRyYW5zZm9ybS50ZXh0WSxhbmNob3JYOnQudHJhbnNmb3JtLmFuY2hvclgsYW5jaG9yWTp0LnRyYW5zZm9ybS5hbmNob3JZLHRhcmdldFg6dC50cmFuc2Zvcm0udGFyZ2V0WCx0YXJnZXRZOnQudHJhbnNmb3JtLnRhcmdldFksc2NhbGU6dC50cmFuc2Zvcm0uc2NhbGUscm90YXRlOnQudHJhbnNmb3JtLnJvdGF0ZX0pLCFEJiZhLmlzRW50cnkodCkmJihEPXQpfSkpLEI9cCh0LGUseSxfLHt3aWR0aDpTLGhlaWdodDpFLHZpZXdYOnEsdmlld1k6SCxwYXRoU2xpY2U6ZnVuY3Rpb24odCl7dmFyIGU9cSh0LngwKSxyPXEodC54MSksbj1IKHQueTApLGE9SCh0LnkxKSxpPXItZSxvPWEtbjtpZighaXx8IW8pcmV0dXJuIiI7cmV0dXJuIk0iK1ooZSxuKzApKyJMIitaKHItMCxuKSsiTCIrWihyLGEtMCkrIkwiK1ooZSswLGEpKyJaIn0sdG9Nb3ZlSW5zaWRlU2xpY2U6JCxwcmV2RW50cnk6RCxtYWtlVXBkYXRlU2xpY2VJbnRlcnBvbGF0b3I6ZXQsbWFrZVVwZGF0ZVRleHRJbnRlcnBvbGF0b3I6cnQsaGFuZGxlU2xpY2VzRXhpdDpudCxoYXNUcmFuc2l0aW9uOmssc3RyVHJhbnNmb3JtOmF0fSksdi5wYXRoYmFyLnZpc2libGU/ZCh0LGUseSxiLHtiYXJEaWZZOk8sd2lkdGg6TCxoZWlnaHQ6Qyx2aWV3WDpXLHZpZXdZOlgscGF0aFNsaWNlOmZ1bmN0aW9uKHQpe3ZhciBlPVcoTWF0aC5tYXgoTWF0aC5taW4odC54MCx0LngwKSwwKSkscj1XKE1hdGgubWluKE1hdGgubWF4KHQueDEsdC54MSksTCkpLG49WCh0LnkwKSxhPVgodC55MSksaT1DLzIsbz17fSxzPXt9O28ueD1lLHMueD1yLG8ueT1zLnk9KG4rYSkvMjt2YXIgbD17eDplLHk6bn0sYz17eDpyLHk6bn0sdT17eDpyLHk6YX0saD17eDplLHk6YX07cmV0dXJuIj4iPT09UT8obC54LT1pLGMueC09aSx1LngtPWksaC54LT1pKToiLyI9PT1RPyh1LngtPWksaC54LT1pLG8ueC09aS8yLHMueC09aS8yKToiXFwiPT09UT8obC54LT1pLGMueC09aSxvLngtPWkvMixzLngtPWkvMik6IjwiPT09USYmKG8ueC09aSxzLngtPWkpLEsobCksSyhoKSxLKG8pLEsoYyksSyh1KSxLKHMpLCJNIitaKGwueCxsLnkpKyJMIitaKGMueCxjLnkpKyJMIitaKHMueCxzLnkpKyJMIitaKHUueCx1LnkpKyJMIitaKGgueCxoLnkpKyJMIitaKG8ueCxvLnkpKyJaIn0sdG9Nb3ZlSW5zaWRlU2xpY2U6JCxtYWtlVXBkYXRlU2xpY2VJbnRlcnBvbGF0b3I6ZXQsbWFrZVVwZGF0ZVRleHRJbnRlcnBvbGF0b3I6cnQsaGFuZGxlU2xpY2VzRXhpdDpudCxoYXNUcmFuc2l0aW9uOmssc3RyVHJhbnNmb3JtOmF0fSk6Yi5yZW1vdmUoKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIG8scyxsPXQuX2Z1bGxMYXlvdXQsYz1sLl90cmVlbWFwbGF5ZXIsZj0hcjsodSgidHJlZW1hcCIsbCksKG89Yy5zZWxlY3RBbGwoImcudHJhY2UudHJlZW1hcCIpLmRhdGEoZSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0cmFjZSIsITApLmNsYXNzZWQoInRyZWVtYXAiLCEwKSxvLm9yZGVyKCksIWwudW5pZm9ybXRleHQubW9kZSYmYS5oYXNUcmFuc2l0aW9uKHIpKT8oaSYmKHM9aSgpKSxuLnRyYW5zaXRpb24oKS5kdXJhdGlvbihyLmR1cmF0aW9uKS5lYXNlKHIuZWFzaW5nKS5lYWNoKCJlbmQiLGZ1bmN0aW9uKCl7cyYmcygpfSkuZWFjaCgiaW50ZXJydXB0IixmdW5jdGlvbigpe3MmJnMoKX0pLmVhY2goZnVuY3Rpb24oKXtjLnNlbGVjdEFsbCgiZy50cmFjZSIpLmVhY2goZnVuY3Rpb24oZSl7dih0LGUsdGhpcyxyKX0pfSkpOihvLmVhY2goZnVuY3Rpb24oZSl7dih0LGUsdGhpcyxyKX0pLGwudW5pZm9ybXRleHQubW9kZSYmaCh0LGwuX3RyZWVtYXBsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpLCJ0cmVlbWFwIikpO2YmJm8uZXhpdCgpLnJlbW92ZSgpfX0seyIuLi8uLi9saWIiOjcxNywiLi4vYmFyL2NvbnN0YW50cyI6ODU4LCIuLi9iYXIvcGxvdCI6ODY3LCIuLi9iYXIvc3R5bGUiOjg3MCwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6ODcyLCIuLi9zdW5idXJzdC9oZWxwZXJzIjoxMjM3LCIuL2NvbnN0YW50cyI6MTI2MCwiLi9kcmF3X2FuY2VzdG9ycyI6MTI2MiwiLi9kcmF3X2Rlc2NlbmRhbnRzIjoxMjYzLGQzOjE2NX1dLDEyNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vc3VuYnVyc3QvaGVscGVycyIpLHM9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQ7ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgcyxsLGM9KG58fHt9KS5ob3ZlcmVkLHU9ZS5kYXRhLmRhdGEsaD11LmksZj11LmNvbG9yLHA9by5pc0hpZXJhcmNoeVJvb3QoZSksZD0xO2lmKGMpcz1yLl9ob3ZlcmVkLm1hcmtlci5saW5lLmNvbG9yLGw9ci5faG92ZXJlZC5tYXJrZXIubGluZS53aWR0aDtlbHNlIGlmKHAmJiJyZ2JhKDAsMCwwLDApIj09PWYpZD0wLHM9InJnYmEoMCwwLDAsMCkiLGw9MDtlbHNlIGlmKHM9aS5jYXN0T3B0aW9uKHIsaCwibWFya2VyLmxpbmUuY29sb3IiKXx8YS5kZWZhdWx0TGluZSxsPWkuY2FzdE9wdGlvbihyLGgsIm1hcmtlci5saW5lLndpZHRoIil8fDAsIXIuX2hhc0NvbG9yc2NhbGUmJiFlLm9uUGF0aGJhcil7dmFyIGc9ci5tYXJrZXIuZGVwdGhmYWRlO2lmKGcpe3ZhciB2LG09YS5jb21iaW5lKGEuYWRkT3BhY2l0eShyLl9iYWNrZ3JvdW5kQ29sb3IsLjc1KSxmKTtpZighMD09PWcpe3ZhciB5PW8uZ2V0TWF4RGVwdGgocik7dj1pc0Zpbml0ZSh5KT9vLmlzTGVhZihlKT8wOnIuX21heFZpc2libGVMYXllcnMtKGUuZGF0YS5kZXB0aC1yLl9lbnRyeURlcHRoKTplLmRhdGEuaGVpZ2h0KzF9ZWxzZSB2PWUuZGF0YS5kZXB0aC1yLl9lbnRyeURlcHRoLHIuX2F0Um9vdExldmVsfHx2Kys7aWYodj4wKWZvcih2YXIgeD0wO3g8djt4Kyspe3ZhciBiPS41KngvdjtmPWEuY29tYmluZShhLmFkZE9wYWNpdHkobSxiKSxmKX19fXQuc3R5bGUoInN0cm9rZS13aWR0aCIsbCkuY2FsbChhLmZpbGwsZikuY2FsbChhLnN0cm9rZSxzKS5zdHlsZSgib3BhY2l0eSIsZCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll90cmVlbWFwbGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKTtzKHQsZSwidHJlZW1hcCIpLGUuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXRbMF0udHJhY2U7ZS5zdHlsZSgib3BhY2l0eSIsci5vcGFjaXR5KSxlLnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5jYWxsKGwsdCxyLHtob3ZlcmVkOiExfSl9KX0pfSxzdHlsZU9uZTpsfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uL2xpYiI6NzE3LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo4NzIsIi4uL3N1bmJ1cnN0L2hlbHBlcnMiOjEyMzcsZDM6MTY1fV0sMTI3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9ib3gvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt5Om4ueSx4Om4ueCx4MDpuLngwLHkwOm4ueTAsbmFtZTphKHt9LG4ubmFtZSx7fSksb3JpZW50YXRpb246YSh7fSxuLm9yaWVudGF0aW9uLHt9KSxiYW5kd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6ImNhbGMifSxzY2FsZWdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzY2FsZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIndpZHRoIiwiY291bnQiXSxkZmx0OiJ3aWR0aCIsZWRpdFR5cGU6ImNhbGMifSxzcGFubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic29mdCIsImhhcmQiLCJtYW51YWwiXSxkZmx0OiJzb2Z0IixlZGl0VHlwZToiY2FsYyJ9LHNwYW46e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn1dLGVkaXRUeXBlOiJjYWxjIn0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjIsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InBsb3QifSxmaWxsY29sb3I6bi5maWxsY29sb3IscG9pbnRzOmEoe30sbi5ib3hwb2ludHMse30pLGppdHRlcjphKHt9LG4uaml0dGVyLHt9KSxwb2ludHBvczphKHt9LG4ucG9pbnRwb3Mse30pLHdpZHRoOmEoe30sbi53aWR0aCx7fSksbWFya2VyOm4ubWFya2VyLHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSxib3g6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4yNSxlZGl0VHlwZToicGxvdCJ9LGZpbGxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InBsb3QifSxtZWFubGluZTp7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InBsb3QifSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJib3RoIiwicG9zaXRpdmUiLCJuZWdhdGl2ZSJdLGRmbHQ6ImJvdGgiLGVkaXRUeXBlOiJjYWxjIn0sb2Zmc2V0Z3JvdXA6bi5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDpuLmFsaWdubWVudGdyb3VwLHNlbGVjdGVkOm4uc2VsZWN0ZWQsdW5zZWxlY3RlZDpuLnVuc2VsZWN0ZWQsaG92ZXJvbjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsidmlvbGlucyIsInBvaW50cyIsImtkZSJdLGRmbHQ6InZpb2xpbnMrcG9pbnRzK2tkZSIsZXh0cmFzOlsiYWxsIl0sZWRpdFR5cGU6InN0eWxlIn19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vYm94L2F0dHJpYnV0ZXMiOjg4MX1dLDEyNzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vYm94L2NhbGMiKSxvPXQoIi4vaGVscGVycyIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBsKHQsZSxyKXt2YXIgYT1lLm1heC1lLm1pbjtpZighYSlyZXR1cm4gdC5iYW5kd2lkdGg/dC5iYW5kd2lkdGg6MDtpZih0LmJhbmR3aWR0aClyZXR1cm4gTWF0aC5tYXgodC5iYW5kd2lkdGgsYS8xZTQpO3ZhciBpPXIubGVuZ3RoLG89bi5zdGRldihyLGktMSxlLm1lYW4pO3JldHVybiBNYXRoLm1heChmdW5jdGlvbih0LGUscil7cmV0dXJuIDEuMDU5Kk1hdGgubWluKGUsci8xLjM0OSkqTWF0aC5wb3codCwtLjIpfShpLG8sZS5xMy1lLnExKSxhLzEwMCl9ZnVuY3Rpb24gYyh0LGUscixuKXt2YXIgaSxvPXQuc3Bhbm1vZGUsbD10LnNwYW58fFtdLGM9W2UubWluLGUubWF4XSx1PVtlLm1pbi0yKm4sZS5tYXgrMipuXTtmdW5jdGlvbiBoKG4pe3ZhciBhPWxbbl0saT0ibXVsdGljYXRlZ29yeSI9PT1yLnR5cGU/ci5yMmMoYSk6ci5kMmMoYSwwLHRbZS52YWxMZXR0ZXIrImNhbGVuZGFyIl0pO3JldHVybiBpPT09cz91W25dOml9dmFyIGY9e3R5cGU6ImxpbmVhciIscmFuZ2U6aT0ic29mdCI9PT1vP3U6ImhhcmQiPT09bz9jOltoKDApLGgoMSldfTtyZXR1cm4gYS5zZXRDb252ZXJ0KGYpLGYuY2xlYW5SYW5nZSgpLGl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSh0LGUpO2lmKHJbMF0udC5lbXB0eSlyZXR1cm4gcjtmb3IodmFyIHM9dC5fZnVsbExheW91dCx1PWEuZ2V0RnJvbUlkKHQsZVsiaCI9PT1lLm9yaWVudGF0aW9uPyJ4YXhpcyI6InlheGlzIl0pLGg9MS8wLGY9LTEvMCxwPTAsZD0wLGc9MDtnPHIubGVuZ3RoO2crKyl7dmFyIHY9cltnXSxtPXYucHRzLm1hcChvLmV4dHJhY3RWYWwpLHk9di5iYW5kd2lkdGg9bChlLHYsbSkseD12LnNwYW49YyhlLHYsdSx5KTtpZih2Lm1pbj09PXYubWF4JiYwPT09eSl4PXYuc3Bhbj1bdi5taW4sdi5tYXhdLHYuZGVuc2l0eT1be3Y6MSx0OnhbMF19XSx2LmJhbmR3aWR0aD15LHA9TWF0aC5tYXgocCwxKTtlbHNle3ZhciBiPXhbMV0teFswXSxfPU1hdGguY2VpbChiLyh5LzMpKSx3PWIvXztpZighaXNGaW5pdGUodyl8fCFpc0Zpbml0ZShfKSlyZXR1cm4gbi5lcnJvcigiU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBjb21wdXRpbmcgdGhlIHZpb2xpbiBzcGFuIiksclswXS50LmVtcHR5PSEwLHI7dmFyIGs9by5tYWtlS0RFKHYsZSxtKTt2LmRlbnNpdHk9bmV3IEFycmF5KF8pO2Zvcih2YXIgVD0wLE09eFswXTtNPHhbMV0rdy8yO1QrKyxNKz13KXt2YXIgQT1rKE0pO3YuZGVuc2l0eVtUXT17djpBLHQ6TX0scD1NYXRoLm1heChwLEEpfX1kPU1hdGgubWF4KGQsbS5sZW5ndGgpLGg9TWF0aC5taW4oaCx4WzBdKSxmPU1hdGgubWF4KGYseFsxXSl9dmFyIFM9YS5maW5kRXh0cmVtZXModSxbaCxmXSx7cGFkZGVkOiEwfSk7aWYoZS5fZXh0cmVtZXNbdS5faWRdPVMsZS53aWR0aClyWzBdLnQubWF4S0RFPXA7ZWxzZXt2YXIgRT1zLl92aW9saW5TY2FsZUdyb3VwU3RhdHMsTD1lLnNjYWxlZ3JvdXAsQz1FW0xdO0M/KEMubWF4S0RFPU1hdGgubWF4KEMubWF4S0RFLHApLEMubWF4Q291bnQ9TWF0aC5tYXgoQy5tYXhDb3VudCxkKSk6RVtMXT17bWF4S0RFOnAsbWF4Q291bnQ6ZH19cmV0dXJuIHJbMF0udC5sYWJlbHMua2RlPW4uXyh0LCJrZGU6Iikscn19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NjkzLCIuLi8uLi9saWIiOjcxNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NSwiLi4vYm94L2NhbGMiOjg4MiwiLi9oZWxwZXJzIjoxMjc0fV0sMTI3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9ib3gvY3Jvc3NfdHJhY2VfY2FsYyIpLnNldFBvc2l0aW9uT2Zmc2V0LGE9WyJ2IiwiaCJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNhbGNkYXRhLGk9ZS54YXhpcyxvPWUueWF4aXMscz0wO3M8YS5sZW5ndGg7cysrKXtmb3IodmFyIGw9YVtzXSxjPSJoIj09PWw/bzppLHU9W10saD0wO2g8ci5sZW5ndGg7aCsrKXt2YXIgZj1yW2hdLHA9ZlswXS50LGQ9ZlswXS50cmFjZTshMCE9PWQudmlzaWJsZXx8InZpb2xpbiIhPT1kLnR5cGV8fHAuZW1wdHl8fGQub3JpZW50YXRpb24hPT1sfHxkLnhheGlzIT09aS5faWR8fGQueWF4aXMhPT1vLl9pZHx8dS5wdXNoKGgpfW4oInZpb2xpbiIsdCx1LGMpfX19LHsiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiOjg4M31dLDEyNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi9ib3gvZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxvLHIsYSl9ZnVuY3Rpb24gYyhyLGEpe3JldHVybiBuLmNvZXJjZTIodCxlLG8scixhKX1pZihpLmhhbmRsZVNhbXBsZURlZmF1bHRzKHQsZSxsLHMpLCExIT09ZS52aXNpYmxlKXtsKCJiYW5kd2lkdGgiKSxsKCJzaWRlIiksbCgid2lkdGgiKXx8KGwoInNjYWxlZ3JvdXAiLGUubmFtZSksbCgic2NhbGVtb2RlIikpO3ZhciB1LGg9bCgic3BhbiIpO0FycmF5LmlzQXJyYXkoaCkmJih1PSJtYW51YWwiKSxsKCJzcGFubW9kZSIsdSk7dmFyIGY9bCgibGluZS5jb2xvciIsKHQubWFya2VyfHx7fSkuY29sb3J8fHIpLHA9bCgibGluZS53aWR0aCIpLGQ9bCgiZmlsbGNvbG9yIixhLmFkZE9wYWNpdHkoZS5saW5lLmNvbG9yLC41KSk7aS5oYW5kbGVQb2ludHNEZWZhdWx0cyh0LGUsbCx7cHJlZml4OiIifSk7dmFyIGc9YygiYm94LndpZHRoIiksdj1jKCJib3guZmlsbGNvbG9yIixkKSxtPWMoImJveC5saW5lLmNvbG9yIixmKSx5PWMoImJveC5saW5lLndpZHRoIixwKTtsKCJib3gudmlzaWJsZSIsQm9vbGVhbihnfHx2fHxtfHx5KSl8fChlLmJveD17dmlzaWJsZTohMX0pO3ZhciB4PWMoIm1lYW5saW5lLmNvbG9yIixmKSxiPWMoIm1lYW5saW5lLndpZHRoIixwKTtsKCJtZWFubGluZS52aXNpYmxlIixCb29sZWFuKHh8fGIpKXx8KGUubWVhbmxpbmU9e3Zpc2libGU6ITF9KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vbGliIjo3MTcsIi4uL2JveC9kZWZhdWx0cyI6ODg0LCIuL2F0dHJpYnV0ZXMiOjEyNzB9XSwxMjc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIDEvTWF0aC5zcXJ0KDIqTWF0aC5QSSkqTWF0aC5leHAoLS41KnQqdCl9O3IubWFrZUtERT1mdW5jdGlvbih0LGUscil7dmFyIG49ci5sZW5ndGgsaT1hLG89dC5iYW5kd2lkdGgscz0xLyhuKm8pO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxhPTA7YTxuO2ErKyllKz1pKCh0LXJbYV0pL28pO3JldHVybiBzKmV9fSxyLmdldFBvc2l0aW9uT25LZGVQYXRoPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxpOyJoIj09PWUub3JpZW50YXRpb24/KGE9InkiLGk9IngiKTooYT0ieCIsaT0ieSIpO3ZhciBvPW4uZmluZFBvaW50T25QYXRoKHQucGF0aCxyLGkse3BhdGhMZW5ndGg6dC5wYXRoTGVuZ3RofSkscz10LnBvc0NlbnRlclB4LGw9b1thXTtyZXR1cm5bbCwiYm90aCI9PT1lLnNpZGU/MipzLWw6c119LHIuZ2V0S2RlVmFsdWU9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPXQucHRzLm1hcChyLmV4dHJhY3RWYWwpO3JldHVybiByLm1ha2VLREUodCxlLGEpKG4pL3QucG9zRGVuc2l0eVNjYWxlfSxyLmV4dHJhY3RWYWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQudn19LHsiLi4vLi4vbGliIjo3MTd9XSwxMjc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uL2JveC9ob3ZlciIpLG89dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7dmFyIGMsdSxoPXQuY2QsZj1oWzBdLnRyYWNlLHA9Zi5ob3Zlcm9uLGQ9LTEhPT1wLmluZGV4T2YoInZpb2xpbnMiKSxnPS0xIT09cC5pbmRleE9mKCJrZGUiKSx2PVtdO2lmKGR8fGcpe3ZhciBtPWkuaG92ZXJPbkJveGVzKHQsZSxyLHMpO2lmKGcmJm0ubGVuZ3RoPjApe3ZhciB5LHgsYixfLHcsaz10LnhhLFQ9dC55YTsiaCI9PT1mLm9yaWVudGF0aW9uPyh3PWUseT0ieSIsYj1ULHg9IngiLF89ayk6KHc9cix5PSJ4IixiPWsseD0ieSIsXz1UKTt2YXIgTT1oW3QuaW5kZXhdO2lmKHc+PU0uc3BhblswXSYmdzw9TS5zcGFuWzFdKXt2YXIgQT1uLmV4dGVuZEZsYXQoe30sdCksUz1fLmMycCh3LCEwKSxFPW8uZ2V0S2RlVmFsdWUoTSxmLHcpLEw9by5nZXRQb3NpdGlvbk9uS2RlUGF0aChNLGYsUyksQz1iLl9vZmZzZXQsUD1iLl9sZW5ndGg7QVt5KyIwIl09TFswXSxBW3krIjEiXT1MWzFdLEFbeCsiMCJdPUFbeCsiMSJdPVMsQVt4KyJMYWJlbCJdPXgrIjogIithLmhvdmVyTGFiZWxUZXh0KF8sdykrIiwgIitoWzBdLnQubGFiZWxzLmtkZSsiICIrRS50b0ZpeGVkKDMpLEEuc3Bpa2VEaXN0YW5jZT1tWzBdLnNwaWtlRGlzdGFuY2U7dmFyIE89eSsiU3Bpa2UiO0FbT109bVswXVtPXSxtWzBdLnNwaWtlRGlzdGFuY2U9dm9pZCAwLG1bMF1bT109dm9pZCAwLEEuaG92ZXJ0ZW1wbGF0ZT0hMSx2LnB1c2goQSksKHU9e3N0cm9rZTp0LmNvbG9yfSlbeSsiMSJdPW4uY29uc3RyYWluKEMrTFswXSxDLEMrUCksdVt5KyIyIl09bi5jb25zdHJhaW4oQytMWzFdLEMsQytQKSx1W3grIjEiXT11W3grIjIiXT1fLl9vZmZzZXQrU319ZCYmKHY9di5jb25jYXQobSkpfS0xIT09cC5pbmRleE9mKCJwb2ludHMiKSYmKGM9aS5ob3Zlck9uUG9pbnRzKHQsZSxyKSk7dmFyIHo9bC5zZWxlY3RBbGwoIi52aW9saW5saW5lLSIrZi51aWQpLmRhdGEodT9bMF06W10pO3JldHVybiB6LmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgidmlvbGlubGluZS0iK2YudWlkLCEwKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEuNSksei5leGl0KCkucmVtb3ZlKCksei5hdHRyKHUpLCJjbG9zZXN0Ij09PXM/Yz9bY106djpjPyh2LnB1c2goYyksdik6dn19LHsiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsIi4uL2JveC9ob3ZlciI6ODg2LCIuL2hlbHBlcnMiOjEyNzR9XSwxMjc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4uL2JveC9kZWZhdWx0cyIpLmNyb3NzVHJhY2VEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksY3Jvc3NUcmFjZUNhbGM6dCgiLi9jcm9zc190cmFjZV9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL2JveC9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToidmlvbGluIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic3ltYm9scyIsIm9yaWVudGVkIiwiYm94LXZpb2xpbiIsInNob3dMZWdlbmQiLCJ2aW9saW5MYXlvdXQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NiwiLi4vYm94L2RlZmF1bHRzIjo4ODQsIi4uL2JveC9zZWxlY3QiOjg5MSwiLi4vc2NhdHRlci9zdHlsZSI6MTE0MywiLi9hdHRyaWJ1dGVzIjoxMjcwLCIuL2NhbGMiOjEyNzEsIi4vY3Jvc3NfdHJhY2VfY2FsYyI6MTI3MiwiLi9kZWZhdWx0cyI6MTI3MywiLi9ob3ZlciI6MTI3NSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTI3NywiLi9sYXlvdXRfZGVmYXVsdHMiOjEyNzgsIi4vcGxvdCI6MTI3OSwiLi9zdHlsZSI6MTI4MH1dLDEyNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17dmlvbGlubW9kZTphKHt9LG4uYm94bW9kZSx7fSksdmlvbGluZ2FwOmEoe30sbi5ib3hnYXAse30pLHZpb2xpbmdyb3VwZ2FwOmEoe30sbi5ib3hncm91cGdhcCx7fSl9fSx7Ii4uLy4uL2xpYiI6NzE3LCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiOjg4OH1dLDEyNzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpLl9zdXBwbHkodCxlLHIsZnVuY3Rpb24ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX0sInZpb2xpbiIpfX0seyIuLi8uLi9saWIiOjcxNywiLi4vYm94L2xheW91dF9kZWZhdWx0cyI6ODg5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMjc3fV0sMTI3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGE9dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uL2JveC9wbG90Iikscz10KCIuLi9zY2F0dGVyL2xpbmVfcG9pbnRzIiksbD10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7dmFyIHU9dC5fZnVsbExheW91dCxoPWUueGF4aXMsZj1lLnlheGlzO2Z1bmN0aW9uIHAodCl7dmFyIGU9cyh0LHt4YXhpczpoLHlheGlzOmYsY29ubmVjdEdhcHM6ITAsYmFzZVRvbGVyYW5jZTouNzUsc2hhcGU6InNwbGluZSIsc2ltcGxpZnk6ITAsbGluZWFyaXplZDohMH0pO3JldHVybiBpLnNtb290aG9wZW4oZVswXSwxKX1hLm1ha2VUcmFjZUdyb3VwcyhjLHIsInRyYWNlIHZpb2xpbnMiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9dFswXSxzPWkudCxjPWkudHJhY2U7aWYoITAhPT1jLnZpc2libGV8fHMuZW1wdHkpci5yZW1vdmUoKTtlbHNle3ZhciBkPXMuYlBvcyxnPXMuYmRQb3Msdj1lW3MudmFsTGV0dGVyKyJheGlzIl0sbT1lW3MucG9zTGV0dGVyKyJheGlzIl0seT0iYm90aCI9PT1jLnNpZGUseD15fHwicG9zaXRpdmUiPT09Yy5zaWRlLGI9eXx8Im5lZ2F0aXZlIj09PWMuc2lkZSxfPXIuc2VsZWN0QWxsKCJwYXRoLnZpb2xpbiIpLmRhdGEoYS5pZGVudGl0eSk7Xy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuYXR0cigiY2xhc3MiLCJ2aW9saW4iKSxfLmV4aXQoKS5yZW1vdmUoKSxfLmVhY2goZnVuY3Rpb24odCl7dmFyIGUscixhLGksbyxsLGgsZixfPW4uc2VsZWN0KHRoaXMpLHc9dC5kZW5zaXR5LGs9dy5sZW5ndGgsVD1tLmMybCh0LnBvcytkLCEwKSxNPW0ubDJwKFQpO2lmKGMud2lkdGgpZT1zLm1heEtERS9nO2Vsc2V7dmFyIEE9dS5fdmlvbGluU2NhbGVHcm91cFN0YXRzW2Muc2NhbGVncm91cF07ZT0iY291bnQiPT09Yy5zY2FsZW1vZGU/QS5tYXhLREUvZyooQS5tYXhDb3VudC90LnB0cy5sZW5ndGgpOkEubWF4S0RFL2d9aWYoeCl7Zm9yKGg9bmV3IEFycmF5KGspLG89MDtvPGs7bysrKShmPWhbb109e30pW3MucG9zTGV0dGVyXT1UK3dbb10udi9lLGZbcy52YWxMZXR0ZXJdPXYuYzJsKHdbb10udCwhMCk7cj1wKGgpfWlmKGIpe2ZvcihoPW5ldyBBcnJheShrKSxsPTAsbz1rLTE7bDxrO2wrKyxvLS0pKGY9aFtsXT17fSlbcy5wb3NMZXR0ZXJdPVQtd1tvXS52L2UsZltzLnZhbExldHRlcl09di5jMmwod1tvXS50LCEwKTthPXAoaCl9aWYoeSlpPXIrIkwiK2Euc3Vic3RyKDEpKyJaIjtlbHNle3ZhciBTPVtNLHYuYzJwKHdbMF0udCldLEU9W00sdi5jMnAod1trLTFdLnQpXTsiaCI9PT1jLm9yaWVudGF0aW9uJiYoUy5yZXZlcnNlKCksRS5yZXZlcnNlKCkpLGk9eD8iTSIrUysiTCIrci5zdWJzdHIoMSkrIkwiK0U6Ik0iK0UrIkwiK2Euc3Vic3RyKDEpKyJMIitTfV8uYXR0cigiZCIsaSksdC5wb3NDZW50ZXJQeD1NLHQucG9zRGVuc2l0eVNjYWxlPWUqZyx0LnBhdGg9Xy5ub2RlKCksdC5wYXRoTGVuZ3RoPXQucGF0aC5nZXRUb3RhbExlbmd0aCgpLyh5PzI6MSl9KTt2YXIgdyxrLFQsTT1jLmJveCxBPU0ud2lkdGgsUz0oTS5saW5lfHx7fSkud2lkdGg7eT8odz1nKkEsaz0wKTp4Pyh3PVswLGcqQS8yXSxrPVMqe3g6MSx5Oi0xfVtzLnBvc0xldHRlcl0pOih3PVtnKkEvMiwwXSxrPVMqe3g6LTEseToxfVtzLnBvc0xldHRlcl0pLG8ucGxvdEJveEFuZFdoaXNrZXJzKHIse3BvczptLHZhbDp2fSxjLHtiUG9zOmQsYmRQb3M6dyxiUG9zUHhPZmZzZXQ6a30pLG8ucGxvdEJveE1lYW4ocix7cG9zOm0sdmFsOnZ9LGMse2JQb3M6ZCxiZFBvczp3LGJQb3NQeE9mZnNldDprfSksIWMuYm94LnZpc2libGUmJmMubWVhbmxpbmUudmlzaWJsZSYmKFQ9YS5pZGVudGl0eSk7dmFyIEU9ci5zZWxlY3RBbGwoInBhdGgubWVhbmxpbmUiKS5kYXRhKFR8fFtdKTtFLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtZWFubGluZSIpLnN0eWxlKCJmaWxsIiwibm9uZSIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIiksRS5leGl0KCkucmVtb3ZlKCksRS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXYuYzJwKHQubWVhbiwhMCkscj1sLmdldFBvc2l0aW9uT25LZGVQYXRoKHQsYyxlKTtuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiaCI9PT1jLm9yaWVudGF0aW9uPyJNIitlKyIsIityWzBdKyJWIityWzFdOiJNIityWzBdKyIsIitlKyJIIityWzFdKX0pLG8ucGxvdFBvaW50cyhyLHt4OmgseTpmfSxjLHMpfX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYxMywiLi4vLi4vbGliIjo3MTcsIi4uL2JveC9wbG90Ijo4OTAsIi4uL3NjYXR0ZXIvbGluZV9wb2ludHMiOjExMzQsIi4vaGVscGVycyI6MTI3NCxkMzoxNjV9XSwxMjgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVQb2ludHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy50cmFjZS52aW9saW5zIik7ZS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLGUuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLnRyYWNlLG89bi5zZWxlY3QodGhpcykscz1yLmJveHx8e30sbD1zLmxpbmV8fHt9LGM9ci5tZWFubGluZXx8e30sdT1jLndpZHRoO28uc2VsZWN0QWxsKCJwYXRoLnZpb2xpbiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIubGluZS53aWR0aCsicHgiKS5jYWxsKGEuc3Ryb2tlLHIubGluZS5jb2xvcikuY2FsbChhLmZpbGwsci5maWxsY29sb3IpLG8uc2VsZWN0QWxsKCJwYXRoLmJveCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGwud2lkdGgrInB4IikuY2FsbChhLnN0cm9rZSxsLmNvbG9yKS5jYWxsKGEuZmlsbCxzLmZpbGxjb2xvcik7dmFyIGg9eyJzdHJva2Utd2lkdGgiOnUrInB4Iiwic3Ryb2tlLWRhc2hhcnJheSI6Mip1KyJweCwiK3UrInB4In07by5zZWxlY3RBbGwoInBhdGgubWVhbiIpLnN0eWxlKGgpLmNhbGwoYS5zdHJva2UsYy5jb2xvciksby5zZWxlY3RBbGwoInBhdGgubWVhbmxpbmUiKS5zdHlsZShoKS5jYWxsKGEuc3Ryb2tlLGMuY29sb3IpLGkobyxyLHQpfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vc2NhdHRlci9zdHlsZSI6MTE0MyxkMzoxNjV9XSwxMjgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi9pc29zdXJmYWNlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGw9ZS5leHBvcnRzPXMobyh7eDphLngseTphLnksejphLnosdmFsdWU6YS52YWx1ZSxpc29taW46YS5pc29taW4saXNvbWF4OmEuaXNvbWF4LHN1cmZhY2U6YS5zdXJmYWNlLHNwYWNlZnJhbWU6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0sc2xpY2VzOmEuc2xpY2VzLGNhcHM6YS5jYXBzLHRleHQ6YS50ZXh0LGhvdmVydGV4dDphLmhvdmVydGV4dCxob3ZlcnRlbXBsYXRlOmEuaG92ZXJ0ZW1wbGF0ZX0sbigiIix7Y29sb3JBdHRyOiJgdmFsdWVgIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse2NvbG9yYmFyOmEuY29sb3JiYXIsb3BhY2l0eTphLm9wYWNpdHksb3BhY2l0eXNjYWxlOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sbGlnaHRwb3NpdGlvbjphLmxpZ2h0cG9zaXRpb24sbGlnaHRpbmc6YS5saWdodGluZyxmbGF0c2hhZGluZzphLmZsYXRzaGFkaW5nLGNvbnRvdXI6YS5jb250b3VyLGhvdmVyaW5mbzpvKHt9LGkuaG92ZXJpbmZvKSxzaG93bGVnZW5kOm8oe30saS5zaG93bGVnZW5kLHtkZmx0OiExfSl9KSwiY2FsYyIsIm5lc3RlZCIpO2wueC5lZGl0VHlwZT1sLnkuZWRpdFR5cGU9bC56LmVkaXRUeXBlPWwudmFsdWUuZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGwudHJhbnNmb3Jtcz12b2lkIDB9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjU5OSwiLi4vLi4vbGliL2V4dGVuZCI6NzA4LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo3NDgsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc2MiwiLi4vaXNvc3VyZmFjZS9hdHRyaWJ1dGVzIjoxMDU2fV0sMTI4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1tZXNoM2QiKSxhPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsaT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cyxzPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpLGw9dCgiLi4vaXNvc3VyZmFjZS9jb252ZXJ0IikuZmluZE5lYXJlc3RPbkF4aXMsYz10KCIuLi9pc29zdXJmYWNlL2NvbnZlcnQiKS5nZW5lcmF0ZUlzb01lc2hlcztmdW5jdGlvbiB1KHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgaD11LnByb3RvdHlwZTtoLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuZGF0YS5pbmRleCxyPXRoaXMuZGF0YS5fbWVzaFhbZV0sbj10aGlzLmRhdGEuX21lc2hZW2VdLGE9dGhpcy5kYXRhLl9tZXNoWltlXSxpPXRoaXMuZGF0YS5fWXMubGVuZ3RoLG89dGhpcy5kYXRhLl9acy5sZW5ndGgscz1sKHIsdGhpcy5kYXRhLl9YcykuaWQsYz1sKG4sdGhpcy5kYXRhLl9ZcykuaWQsdT1sKGEsdGhpcy5kYXRhLl9acykuaWQsaD10LmluZGV4PXUrbypjK28qaSpzO3QudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEuX21lc2hYW2hdLHRoaXMuZGF0YS5fbWVzaFlbaF0sdGhpcy5kYXRhLl9tZXNoWltoXSx0aGlzLmRhdGEuX3ZhbHVlW2hdXTt2YXIgZj10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShmKSYmdm9pZCAwIT09ZltoXT90LnRleHRMYWJlbD1mW2hdOmYmJih0LnRleHRMYWJlbD1mKSwhMH19LGgudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxTY2VuZUxheW91dDtmdW5jdGlvbiBuKHQsZSxyLG4pe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5kMmwoZSwwLG4pKnJ9KX10aGlzLmRhdGE9Yyh0KTt2YXIgbD17cG9zaXRpb25zOnMobihyLnhheGlzLHQuX21lc2hYLGUuZGF0YVNjYWxlWzBdLHQueGNhbGVuZGFyKSxuKHIueWF4aXMsdC5fbWVzaFksZS5kYXRhU2NhbGVbMV0sdC55Y2FsZW5kYXIpLG4oci56YXhpcyx0Ll9tZXNoWixlLmRhdGFTY2FsZVsyXSx0LnpjYWxlbmRhcikpLGNlbGxzOnModC5fbWVzaEksdC5fbWVzaEosdC5fbWVzaEspLGxpZ2h0UG9zaXRpb246W3QubGlnaHRwb3NpdGlvbi54LHQubGlnaHRwb3NpdGlvbi55LHQubGlnaHRwb3NpdGlvbi56XSxhbWJpZW50OnQubGlnaHRpbmcuYW1iaWVudCxkaWZmdXNlOnQubGlnaHRpbmcuZGlmZnVzZSxzcGVjdWxhcjp0LmxpZ2h0aW5nLnNwZWN1bGFyLHJvdWdobmVzczp0LmxpZ2h0aW5nLnJvdWdobmVzcyxmcmVzbmVsOnQubGlnaHRpbmcuZnJlc25lbCx2ZXJ0ZXhOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLnZlcnRleG5vcm1hbHNlcHNpbG9uLGZhY2VOb3JtYWxzRXBzaWxvbjp0LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbixvcGFjaXR5OnQub3BhY2l0eSxvcGFjaXR5c2NhbGU6dC5vcGFjaXR5c2NhbGUsY29udG91ckVuYWJsZTp0LmNvbnRvdXIuc2hvdyxjb250b3VyQ29sb3I6aSh0LmNvbnRvdXIuY29sb3IpLnNsaWNlKDAsMyksY29udG91cldpZHRoOnQuY29udG91ci53aWR0aCx1c2VGYWNldE5vcm1hbHM6dC5mbGF0c2hhZGluZ30sdT1vKHQpO2wudmVydGV4SW50ZW5zaXR5PXQuX21lc2hJbnRlbnNpdHksbC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W3UubWluLHUubWF4XSxsLmNvbG9ybWFwPWEodCksdGhpcy5tZXNoLnVwZGF0ZShsKX0saC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsYT1uKHtnbDpyfSksaT1uZXcgdSh0LGEsZS51aWQpO3JldHVybiBhLl90cmFjZT1pLGkudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChhKSxpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYwNCwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NzE0LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDAsIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6ODE2LCIuLi9pc29zdXJmYWNlL2NvbnZlcnQiOjEwNTgsImdsLW1lc2gzZCI6MjgzfV0sMTI4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxhPXQoIi4vYXR0cmlidXRlcyIpLGk9dCgiLi4vaXNvc3VyZmFjZS9kZWZhdWx0cyIpLnN1cHBseUlzb0RlZmF1bHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9aSh0LGUscixvLHMpO3ZhciBsPXMoIm9wYWNpdHlzY2FsZSIpOyJtYXgiPT09bD9lLm9wYWNpdHlzY2FsZT1bWzAsLjFdLFsxLDFdXToibWluIj09PWw/ZS5vcGFjaXR5c2NhbGU9W1swLDFdLFsxLC4xXV06ImV4dHJlbWVzIj09PWw/ZS5vcGFjaXR5c2NhbGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj0wO248MzI7bisrKXt2YXIgYT1uLzMxLGk9ZSsoMS1lKSooMS1NYXRoLnBvdyhNYXRoLnNpbih0KmEqTWF0aC5QSSksMikpO3IucHVzaChbYSxNYXRoLm1heCgxLE1hdGgubWluKDAsaSkpXSl9cmV0dXJuIHJ9KDEsLjEpOmZ1bmN0aW9uKHQpe3ZhciBlPTA7aWYoIUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDIpcmV0dXJuITE7aWYoIXRbMF18fCF0W3QubGVuZ3RoLTFdKXJldHVybiExO2lmKDAhPSt0WzBdWzBdfHwxIT0rdFt0Lmxlbmd0aC0xXVswXSlyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtpZigyIT09bi5sZW5ndGh8fCtuWzBdPGUpcmV0dXJuITE7ZT0rblswXX1yZXR1cm4hMH0obCl8fChlLm9wYWNpdHlzY2FsZT12b2lkIDApfX0seyIuLi8uLi9saWIiOjcxNywiLi4vaXNvc3VyZmFjZS9kZWZhdWx0cyI6MTA1OSwiLi9hdHRyaWJ1dGVzIjoxMjgxfV0sMTI4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi4vaXNvc3VyZmFjZS9jYWxjIiksY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0scGxvdDp0KCIuL2NvbnZlcnQiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToidm9sdW1lIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wzZCI6ODA1LCIuLi9pc29zdXJmYWNlL2NhbGMiOjEwNTcsIi4vYXR0cmlidXRlcyI6MTI4MSwiLi9jb252ZXJ0IjoxMjgyLCIuL2RlZmF1bHRzIjoxMjgzfV0sMTI4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9iYXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikubGluZSxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsbD10KCIuL2NvbnN0YW50cyIpLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIik7ZnVuY3Rpb24gaCh0KXtyZXR1cm57bWFya2VyOntjb2xvcjpjKHt9LG4ubWFya2VyLmNvbG9yLHthcnJheU9rOiExLGVkaXRUeXBlOiJzdHlsZSJ9KSxsaW5lOntjb2xvcjpjKHt9LG4ubWFya2VyLmxpbmUuY29sb3Ise2FycmF5T2s6ITEsZWRpdFR5cGU6InN0eWxlIn0pLHdpZHRoOmMoe30sbi5tYXJrZXIubGluZS53aWR0aCx7YXJyYXlPazohMSxlZGl0VHlwZToic3R5bGUifSksZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn19ZS5leHBvcnRzPXttZWFzdXJlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGVkaXRUeXBlOiJjYWxjIn0sYmFzZTp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsYXJyYXlPazohMSxlZGl0VHlwZToiY2FsYyJ9LHg6bi54LHgwOm4ueDAsZHg6bi5keCx5Om4ueSx5MDpuLnkwLGR5Om4uZHksaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVydGVtcGxhdGU6byh7fSx7a2V5czpsLmV2ZW50RGF0YUtleXN9KSxob3ZlcmluZm86Yyh7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6WyJuYW1lIiwieCIsInkiLCJ0ZXh0IiwiaW5pdGlhbCIsImRlbHRhIiwiZmluYWwiXX0pLHRleHRpbmZvOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJpbml0aWFsIiwiZGVsdGEiLCJmaW5hbCJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMX0sdGV4dHRlbXBsYXRlOnMoe2VkaXRUeXBlOiJwbG90In0se2tleXM6bC5ldmVudERhdGFLZXlzLmNvbmNhdChbImxhYmVsIl0pfSksdGV4dDpuLnRleHQsdGV4dHBvc2l0aW9uOm4udGV4dHBvc2l0aW9uLGluc2lkZXRleHRhbmNob3I6bi5pbnNpZGV0ZXh0YW5jaG9yLHRleHRhbmdsZTpuLnRleHRhbmdsZSx0ZXh0Zm9udDpuLnRleHRmb250LGluc2lkZXRleHRmb250Om4uaW5zaWRldGV4dGZvbnQsb3V0c2lkZXRleHRmb250Om4ub3V0c2lkZXRleHRmb250LGNvbnN0cmFpbnRleHQ6bi5jb25zdHJhaW50ZXh0LGNsaXBvbmF4aXM6bi5jbGlwb25heGlzLG9yaWVudGF0aW9uOm4ub3JpZW50YXRpb24sb2Zmc2V0Om4ub2Zmc2V0LHdpZHRoOm4ud2lkdGgsaW5jcmVhc2luZzpoKCksZGVjcmVhc2luZzpoKCksdG90YWxzOmgoKSxjb25uZWN0b3I6e2xpbmU6e2NvbG9yOmMoe30sYS5jb2xvcix7ZGZsdDp1LmRlZmF1bHRMaW5lfSksd2lkdGg6Yyh7fSxhLndpZHRoLHtlZGl0VHlwZToicGxvdCJ9KSxkYXNoOmEuZGFzaCxlZGl0VHlwZToicGxvdCJ9LG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNwYW5uaW5nIiwiYmV0d2VlbiJdLGRmbHQ6ImJldHdlZW4iLGVkaXRUeXBlOiJwbG90In0sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sb2Zmc2V0Z3JvdXA6bi5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDpuLmFsaWdubWVudGdyb3VwfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uL2xpYi9leHRlbmQiOjcwOCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4NDEsIi4uL2Jhci9hdHRyaWJ1dGVzIjo4NTYsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTEyMCwiLi9jb25zdGFudHMiOjEyODd9XSwxMjg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9saWIiKS5tZXJnZUFycmF5LGk9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBzKHQpe3JldHVybiJhIj09PXR8fCJhYnNvbHV0ZSI9PT10fWZ1bmN0aW9uIGwodCl7cmV0dXJuInQiPT09dHx8InRvdGFsIj09PXR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYyx1PW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxoPW4uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKTsiaCI9PT1lLm9yaWVudGF0aW9uPyhyPXUubWFrZUNhbGNkYXRhKGUsIngiKSxjPWgubWFrZUNhbGNkYXRhKGUsInkiKSk6KHI9aC5tYWtlQ2FsY2RhdGEoZSwieSIpLGM9dS5tYWtlQ2FsY2RhdGEoZSwieCIpKTtmb3IodmFyIGYscD1NYXRoLm1pbihjLmxlbmd0aCxyLmxlbmd0aCksZD1uZXcgQXJyYXkocCksZz0wLHY9ITEsbT0wO208cDttKyspe3ZhciB5PXJbbV18fDAseD0hMTsoclttXSE9PW98fGwoZS5tZWFzdXJlW21dKXx8cyhlLm1lYXN1cmVbbV0pKSYmbSsxPHAmJihyW20rMV0hPT1vfHxsKGUubWVhc3VyZVttKzFdKXx8cyhlLm1lYXN1cmVbbSsxXSkpJiYoeD0hMCk7dmFyIGI9ZFttXT17aTptLHA6Y1ttXSxzOnkscmF3Uzp5LGNOZXh0Onh9O3MoZS5tZWFzdXJlW21dKT8oZz1iLnMsYi5pc1N1bT0hMCxiLmRpcj0idG90YWxzIixiLnM9Zyk6bChlLm1lYXN1cmVbbV0pPyhiLmlzU3VtPSEwLGIuZGlyPSJ0b3RhbHMiLGIucz1nKTooYi5pc1N1bT0hMSxiLmRpcj1iLnJhd1M8MD8iZGVjcmVhc2luZyI6ImluY3JlYXNpbmciLGY9Yi5zLGIucz1nK2YsZys9ZiksInRvdGFscyI9PT1iLmRpciYmKHY9ITApLGUuaWRzJiYoYi5pZD1TdHJpbmcoZS5pZHNbbV0pKSxiLnY9KGUuYmFzZXx8MCkrZ31yZXR1cm4gZC5sZW5ndGgmJihkWzBdLmhhc1RvdGFscz12KSxhKGUudGV4dCxkLCJ0eCIpLGEoZS5ob3ZlcnRleHQsZCwiaHR4IiksaShkLGUpLGR9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjY5MywiLi4vLi4vbGliIjo3MTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjExMjJ9XSwxMjg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZXZlbnREYXRhS2V5czpbImluaXRpYWwiLCJkZWx0YSIsImZpbmFsIl19fSx7fV0sMTI4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyIpLnNldEdyb3VwUG9zaXRpb25zO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsaT10Ll9mdWxsTGF5b3V0LG89dC5fZnVsbERhdGEscz10LmNhbGNkYXRhLGw9ZS54YXhpcyxjPWUueWF4aXMsdT1bXSxoPVtdLGY9W107Zm9yKGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIHA9b1thXTshMD09PXAudmlzaWJsZSYmcC54YXhpcz09PWwuX2lkJiZwLnlheGlzPT09Yy5faWQmJiJ3YXRlcmZhbGwiPT09cC50eXBlJiYocj1zW2FdLCJoIj09PXAub3JpZW50YXRpb24/Zi5wdXNoKHIpOmgucHVzaChyKSx1LnB1c2gocikpfXZhciBkPXttb2RlOmkud2F0ZXJmYWxsbW9kZSxub3JtOmkud2F0ZXJmYWxsbm9ybSxnYXA6aS53YXRlcmZhbGxnYXAsZ3JvdXBnYXA6aS53YXRlcmZhbGxncm91cGdhcH07Zm9yKG4odCxsLGMsaCxkKSxuKHQsYyxsLGYsZCksYT0wO2E8dS5sZW5ndGg7YSsrKXtyPXVbYV07Zm9yKHZhciBnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciB2PXJbZ107ITE9PT12LmlzU3VtJiYodi5zMCs9MD09PWc/MDpyW2ctMV0ucyksZysxPHIubGVuZ3RoJiYocltnXS5uZXh0UDA9cltnKzFdLnAwLHJbZ10ubmV4dFMwPXJbZysxXS5zMCl9fX19LHsiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiOjg1OX1dLDEyODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVHcm91cGluZ0RlZmF1bHRzLGk9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dCxvPXQoIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGM9dCgiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIiksdT1jLklOQ1JFQVNJTkcuQ09MT1IsaD1jLkRFQ1JFQVNJTkcuQ09MT1IsZj0iIzQ0OTlGRiI7ZnVuY3Rpb24gcCh0LGUscil7dChlKyIubWFya2VyLmNvbG9yIixyKSx0KGUrIi5tYXJrZXIubGluZS5jb2xvciIsbC5kZWZhdWx0TGluZSksdChlKyIubWFya2VyLmxpbmUud2lkdGgiKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGEpe2Z1bmN0aW9uIGwocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixhKX1pZihvKHQsZSxhLGwpKXtsKCJtZWFzdXJlIiksbCgib3JpZW50YXRpb24iLGUueCYmIWUueT8iaCI6InYiKSxsKCJiYXNlIiksbCgib2Zmc2V0IiksbCgid2lkdGgiKSxsKCJ0ZXh0IiksbCgiaG92ZXJ0ZXh0IiksbCgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBjPWwoInRleHRwb3NpdGlvbiIpO2kodCxlLGEsbCxjLHttb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMCxtb2R1bGVIYXNDbGlwb25heGlzOiEwLG1vZHVsZUhhc1RleHRhbmdsZTohMCxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITB9KSwibm9uZSIhPT1lLnRleHRwb3NpdGlvbiYmKGwoInRleHR0ZW1wbGF0ZSIpLGUudGV4dHRlbXBsYXRlfHxsKCJ0ZXh0aW5mbyIpKSxwKGwsImluY3JlYXNpbmciLHUpLHAobCwiZGVjcmVhc2luZyIsaCkscChsLCJ0b3RhbHMiLGYpLGwoImNvbm5lY3Rvci52aXNpYmxlIikmJihsKCJjb25uZWN0b3IubW9kZSIpLGwoImNvbm5lY3Rvci5saW5lLndpZHRoIikmJihsKCJjb25uZWN0b3IubGluZS5jb2xvciIpLGwoImNvbm5lY3Rvci5saW5lLmRhc2giKSkpfWVsc2UgZS52aXNpYmxlPSExfSxjcm9zc1RyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcixpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIG4uY29lcmNlKGkuX2lucHV0LGkscyx0KX1pZigiZ3JvdXAiPT09ZS53YXRlcmZhbGxtb2RlKWZvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCsrKXI9KGk9dFtsXSkuX2lucHV0LGEocixpLGUsbyl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo1OTIsIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyI6Njg3LCIuLi8uLi9saWIiOjcxNywiLi4vYmFyL2RlZmF1bHRzIjo4NjAsIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiOjExNDYsIi4vYXR0cmlidXRlcyI6MTI4NX1dLDEyOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSwiaW5pdGlhbCJpbiBlJiYodC5pbml0aWFsPWUuaW5pdGlhbCksImRlbHRhImluIGUmJih0LmRlbHRhPWUuZGVsdGEpLCJmaW5hbCJpbiBlJiYodC5maW5hbD1lLmZpbmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0fX0se31dLDEyOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5ob3ZlckxhYmVsVGV4dCxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5vcGFjaXR5LGk9dCgiLi4vYmFyL2hvdmVyIikuaG92ZXJPbkJhcnMsbz10KCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiKSxzPW8uSU5DUkVBU0lORy5TWU1CT0wsbD1vLkRFQ1JFQVNJTkcuU1lNQk9MO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgYz1pKHQsZSxyLG8pO2lmKGMpe3ZhciB1PWMuY2QsaD11WzBdLnRyYWNlLGY9ImgiPT09aC5vcmllbnRhdGlvbixwPWY/dC54YTp0LnlhLGQ9dVtjLmluZGV4XSxnPWQuaXNTdW0/ZC5iK2QuczpkLnJhd1M7aWYoIWQuaXNTdW0pe2MuaW5pdGlhbD1kLmIrZC5zLWcsYy5kZWx0YT1nLGMuZmluYWw9Yy5pbml0aWFsK2MuZGVsdGE7dmFyIHY9dyhNYXRoLmFicyhjLmRlbHRhKSk7Yy5kZWx0YUxhYmVsPWc8MD8iKCIrdisiKSI6dixjLmZpbmFsTGFiZWw9dyhjLmZpbmFsKSxjLmluaXRpYWxMYWJlbD13KGMuaW5pdGlhbCl9dmFyIG09ZC5oaXx8aC5ob3ZlcmluZm8seT1bXTtpZihtJiYibm9uZSIhPT1tJiYic2tpcCIhPT1tKXt2YXIgeD0iYWxsIj09PW0sYj1tLnNwbGl0KCIrIiksXz1mdW5jdGlvbih0KXtyZXR1cm4geHx8LTEhPT1iLmluZGV4T2YodCl9O2QuaXNTdW18fCghXygiZmluYWwiKXx8XyhmPyJ4IjoieSIpfHx5LnB1c2goYy5maW5hbExhYmVsKSxfKCJkZWx0YSIpJiYoZzwwP3kucHVzaChjLmRlbHRhTGFiZWwrIiAiK2wpOnkucHVzaChjLmRlbHRhTGFiZWwrIiAiK3MpKSxfKCJpbml0aWFsIikmJnkucHVzaCgiSW5pdGlhbDogIitjLmluaXRpYWxMYWJlbCkpfXJldHVybiB5Lmxlbmd0aCYmKGMuZXh0cmFUZXh0PXkuam9pbigiPGJyPiIpKSxjLmNvbG9yPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFtlLmRpcl0ubWFya2VyLG49ci5jb2xvcixpPXIubGluZS5jb2xvcixvPXIubGluZS53aWR0aDtpZihhKG4pKXJldHVybiBuO2lmKGEoaSkmJm8pcmV0dXJuIGl9KGgsZCksW2NdfWZ1bmN0aW9uIHcodCl7cmV0dXJuIG4ocCx0KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjU5MiwiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIjo2ODcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjUsIi4uL2Jhci9ob3ZlciI6ODYzfV0sMTI5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLnN1cHBseURlZmF1bHRzLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuY3Jvc3NUcmFjZURlZmF1bHRzLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxjcm9zc1RyYWNlQ2FsYzp0KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuLi9iYXIvc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6IndhdGVyZmFsbCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImJhci1saWtlIiwiY2FydGVzaWFuIiwic3ZnIiwib3JpZW50ZWQiLCJzaG93TGVnZW5kIiwiem9vbVNjYWxlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzYsIi4uL2Jhci9zZWxlY3QiOjg2OCwiLi9hdHRyaWJ1dGVzIjoxMjg1LCIuL2NhbGMiOjEyODYsIi4vY3Jvc3NfdHJhY2VfY2FsYyI6MTI4OCwiLi9kZWZhdWx0cyI6MTI4OSwiLi9ldmVudF9kYXRhIjoxMjkwLCIuL2hvdmVyIjoxMjkxLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMjkzLCIuL2xheW91dF9kZWZhdWx0cyI6MTI5NCwiLi9wbG90IjoxMjk1LCIuL3N0eWxlIjoxMjk2fV0sMTI5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3dhdGVyZmFsbG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImdyb3VwIiwib3ZlcmxheSJdLGRmbHQ6Imdyb3VwIixlZGl0VHlwZToiY2FsYyJ9LHdhdGVyZmFsbGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9LHdhdGVyZmFsbGdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9fX0se31dLDEyOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT0hMTtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9Zm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspe3ZhciBsPXJbc107aWYobC52aXNpYmxlJiYid2F0ZXJmYWxsIj09PWwudHlwZSl7aT0hMDticmVha319aSYmKG8oIndhdGVyZmFsbG1vZGUiKSxvKCJ3YXRlcmZhbGxnYXAiLC4yKSxvKCJ3YXRlcmZhbGxncm91cGdhcCIpKX19LHsiLi4vLi4vbGliIjo3MTcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEyOTN9XSwxMjk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vYmFyL3Bsb3QiKSxzPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5jbGVhck1pblRleHRTaXplO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz10Ll9mdWxsTGF5b3V0O3MoIndhdGVyZmFsbCIsYyksby5wbG90KHQsZSxyLGwse21vZGU6Yy53YXRlcmZhbGxtb2RlLG5vcm06Yy53YXRlcmZhbGxtb2RlLGdhcDpjLndhdGVyZmFsbGdhcCxncm91cGdhcDpjLndhdGVyZmFsbGdyb3VwZ2FwfSksZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9ZS54YXhpcyxsPWUueWF4aXM7YS5tYWtlVHJhY2VHcm91cHMobyxyLCJ0cmFjZSBiYXJzIikuZWFjaChmdW5jdGlvbihyKXt2YXIgbz1uLnNlbGVjdCh0aGlzKSxjPXJbMF0udHJhY2UsdT1hLmVuc3VyZVNpbmdsZShvLCJnIiwibGluZXMiKTtpZihjLmNvbm5lY3RvciYmYy5jb25uZWN0b3IudmlzaWJsZSl7dmFyIGg9ImgiPT09Yy5vcmllbnRhdGlvbixmPWMuY29ubmVjdG9yLm1vZGUscD11LnNlbGVjdEFsbCgiZy5saW5lIikuZGF0YShhLmlkZW50aXR5KTtwLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGluZSIsITApLHAuZXhpdCgpLnJlbW92ZSgpO3ZhciBkPXAuc2l6ZSgpO3AuZWFjaChmdW5jdGlvbihyLG8pe2lmKG89PT1kLTF8fHIuY05leHQpe3ZhciBjPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPVtdLGk9W10sbz1uP2U6cixzPW4/cjplO3JldHVybiBhWzBdPW8uYzJwKHQuczAsITApLGlbMF09cy5jMnAodC5wMCwhMCksYVsxXT1vLmMycCh0LnMxLCEwKSxpWzFdPXMuYzJwKHQucDEsITApLGFbMl09by5jMnAodC5uZXh0UzAsITApLGlbMl09cy5jMnAodC5uZXh0UDAsITApLG4/W2EsaV06W2ksYV19KHIscyxsLGgpLHU9Y1swXSxwPWNbMV0sZz0iIjsic3Bhbm5pbmciPT09ZiYmIXIuaXNTdW0mJm8+MCYmKGcrPWg/Ik0iK3VbMF0rIiwiK3BbMV0rIlYiK3BbMF06Ik0iK3VbMV0rIiwiK3BbMF0rIkgiK3VbMF0pLCJiZXR3ZWVuIiE9PWYmJihyLmlzU3VtfHxvPGQtMSkmJihnKz1oPyJNIit1WzFdKyIsIitwWzBdKyJWIitwWzFdOiJNIit1WzBdKyIsIitwWzFdKyJIIit1WzFdKSx2b2lkIDAhPT11WzJdJiZ2b2lkIDAhPT1wWzJdJiYoZys9aD8iTSIrdVsxXSsiLCIrcFsxXSsiViIrcFsyXToiTSIrdVsxXSsiLCIrcFsxXSsiSCIrdVsyXSksIiI9PT1nJiYoZz0iTTAsMFoiKSxhLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwicGF0aCIpLmF0dHIoImQiLGcpLmNhbGwoaS5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCl9fSl9ZWxzZSB1LnJlbW92ZSgpfSl9KHQsZSxyLGwpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYxMywiLi4vLi4vbGliIjo3MTcsIi4uL2Jhci9wbG90Ijo4NjcsIi4uL2Jhci91bmlmb3JtX3RleHQiOjg3MixkMzoxNjV9XSwxMjk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxzPXQoIi4uL2Jhci9zdHlsZSIpLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQsYz1zLnN0eWxlVGV4dFBvaW50cztlLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgcz1yfHxuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcud2F0ZXJmYWxsbGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UiKTtsKHQscywid2F0ZXJmYWxsIikscy5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLHMuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxzPWVbMF0udHJhY2U7ci5zZWxlY3RBbGwoIi5wb2ludCA+IHBhdGgiKS5lYWNoKGZ1bmN0aW9uKHQpe2lmKCF0LmlzQmxhbmspe3ZhciBlPXNbdC5kaXJdLm1hcmtlcjtuLnNlbGVjdCh0aGlzKS5jYWxsKGkuZmlsbCxlLmNvbG9yKS5jYWxsKGkuc3Ryb2tlLGUubGluZS5jb2xvcikuY2FsbChhLmRhc2hMaW5lLGUubGluZS5kYXNoLGUubGluZS53aWR0aCkuc3R5bGUoIm9wYWNpdHkiLHMuc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkP286MSl9fSksYyhyLHMsdCksci5zZWxlY3RBbGwoIi5saW5lcyIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1zLmNvbm5lY3Rvci5saW5lO2EubGluZUdyb3VwU3R5bGUobi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIiksdC53aWR0aCx0LmNvbG9yLHQuZGFzaCl9KX0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NTkyLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYxMywiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NjkyLCIuLi9iYXIvc3R5bGUiOjg3MCwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6ODcyLGQzOjE2NX1dLDEyOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiKSxvPXQoIi4vaGVscGVycyIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb24scz10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO3IubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9ImFnZ3JlZ2F0ZSI7dmFyIGw9ci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZ3JvdXBzOnt2YWxUeXBlOiJzdHJpbmciLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDoieCIsZWRpdFR5cGU6ImNhbGMifSxhZ2dyZWdhdGlvbnM6e19pc0xpbmtlZFRvQXJyYXk6ImFnZ3JlZ2F0aW9uIix0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxmdW5jOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjb3VudCIsInN1bSIsImF2ZyIsIm1lZGlhbiIsIm1vZGUiLCJybXMiLCJzdGRkZXYiLCJtaW4iLCJtYXgiLCJmaXJzdCIsImxhc3QiLCJjaGFuZ2UiLCJyYW5nZSJdLGRmbHQ6ImZpcnN0IixlZGl0VHlwZToiY2FsYyJ9LGZ1bmNtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzYW1wbGUiLCJwb3B1bGF0aW9uIl0sZGZsdDoic2FtcGxlIixlZGl0VHlwZToiY2FsYyJ9LGVuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sYz1sLmFnZ3JlZ2F0aW9ucztmdW5jdGlvbiB1KHQsZSxyLGkpe2lmKGkuZW5hYmxlZCl7Zm9yKHZhciBvPWkudGFyZ2V0LGw9YS5uZXN0ZWRQcm9wZXJ0eShlLG8pLGM9bC5nZXQoKSx1PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5mdW5jLG49ZS5kMmMsYT1lLmMyZDtzd2l0Y2gocil7Y2FzZSJjb3VudCI6cmV0dXJuIGg7Y2FzZSJmaXJzdCI6cmV0dXJuIGY7Y2FzZSJsYXN0IjpyZXR1cm4gcDtjYXNlInN1bSI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1uKHRbZVtpXV0pO28hPT1zJiYocis9byl9cmV0dXJuIGEocil9O2Nhc2UiYXZnIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxpPTAsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgbD1uKHRbZVtvXV0pO2whPT1zJiYocis9bCxpKyspfXJldHVybiBpP2Eoci9pKTpzfTtjYXNlIm1pbiI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEvMCxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPW4odFtlW2ldXSk7byE9PXMmJihyPU1hdGgubWluKHIsbykpfXJldHVybiByPT09MS8wP3M6YShyKX07Y2FzZSJtYXgiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMS8wLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89bih0W2VbaV1dKTtvIT09cyYmKHI9TWF0aC5tYXgocixvKSl9cmV0dXJuIHI9PT0tMS8wP3M6YShyKX07Y2FzZSJyYW5nZSI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTEvMCxpPS0xLzAsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgbD1uKHRbZVtvXV0pO2whPT1zJiYocj1NYXRoLm1pbihyLGwpLGk9TWF0aC5tYXgoaSxsKSl9cmV0dXJuIGk9PT0tMS8wfHxyPT09MS8wP3M6YShpLXIpfTtjYXNlImNoYW5nZSI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0W2VbMF1dKSxpPW4odFtlW2UubGVuZ3RoLTFdXSk7cmV0dXJuIHI9PT1zfHxpPT09cz9zOmEoaS1yKX07Y2FzZSJtZWRpYW4iOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPW4odFtlW2ldXSk7byE9PXMmJnIucHVzaChvKX1pZighci5sZW5ndGgpcmV0dXJuIHM7ci5zb3J0KCk7dmFyIGw9KHIubGVuZ3RoLTEpLzI7cmV0dXJuIGEoKHJbTWF0aC5mbG9vcihsKV0rcltNYXRoLmNlaWwobCldKS8yKX07Y2FzZSJtb2RlIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30saT0wLG89cyxsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBjPW4odFtlW2xdXSk7aWYoYyE9PXMpe3ZhciB1PXJbY109KHJbY118fDApKzE7dT5pJiYoaT11LG89Yyl9fXJldHVybiBpP2Eobyk6c307Y2FzZSJybXMiOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGk9MCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyKz1sKmwsaSsrKX1yZXR1cm4gaT9hKE1hdGguc3FydChyL2kpKTpzfTtjYXNlInN0ZGRldiI6cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIGEsaT0wLG89MCxsPTEsYz1zO2ZvcihhPTA7YTxyLmxlbmd0aCYmYz09PXM7YSsrKWM9bihlW3JbYV1dKTtpZihjPT09cylyZXR1cm4gcztmb3IoO2E8ci5sZW5ndGg7YSsrKXt2YXIgdT1uKGVbclthXV0pO2lmKHUhPT1zKXt2YXIgaD11LWM7aSs9aCxvKz1oKmgsbCsrfX12YXIgZj0ic2FtcGxlIj09PXQuZnVuY21vZGU/bC0xOmw7cmV0dXJuIGY/TWF0aC5zcXJ0KChvLWkqaS9sKS9mKTowfX19KGksbi5nZXREYXRhQ29udmVyc2lvbnModCxlLG8sYykpLGQ9bmV3IEFycmF5KHIubGVuZ3RoKSxnPTA7ZzxyLmxlbmd0aDtnKyspZFtnXT11KGMscltnXSk7bC5zZXQoZCksImNvdW50Ij09PWkuZnVuYyYmYS5wdXNoVW5pcXVlKGUuX2FycmF5QXR0cnMsbyl9fWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gZS5sZW5ndGh9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0W2VbMF1dfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdFtlW2UubGVuZ3RoLTFdXX1yLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj17fTtmdW5jdGlvbiBvKGUscil7cmV0dXJuIGEuY29lcmNlKHQsbixsLGUscil9aWYoIW8oImVuYWJsZWQiKSlyZXR1cm4gbjt2YXIgcz1pLmZpbmRBcnJheUF0dHJpYnV0ZXMoZSksdT17fTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXVbc1tyXV09MTt2YXIgaD1vKCJncm91cHMiKTtpZighQXJyYXkuaXNBcnJheShoKSl7aWYoIXVbaF0pcmV0dXJuIG4uZW5hYmxlZD0hMSxuO3VbaF09MH12YXIgZixwPXQuYWdncmVnYXRpb25zfHxbXSxkPW4uYWdncmVnYXRpb25zPW5ldyBBcnJheShwLmxlbmd0aCk7ZnVuY3Rpb24gZyh0LGUpe3JldHVybiBhLmNvZXJjZShwW3JdLGYsYyx0LGUpfWZvcihyPTA7cjxwLmxlbmd0aDtyKyspe2Y9e19pbmRleDpyfTt2YXIgdj1nKCJ0YXJnZXQiKSxtPWcoImZ1bmMiKTtnKCJlbmFibGVkIikmJnYmJih1W3ZdfHwiY291bnQiPT09bSYmdm9pZCAwPT09dVt2XSk/KCJzdGRkZXYiPT09bSYmZygiZnVuY21vZGUiKSx1W3ZdPTAsZFtyXT1mKTpkW3JdPXtlbmFibGVkOiExLF9pbmRleDpyfX1mb3Iocj0wO3I8cy5sZW5ndGg7cisrKXVbc1tyXV0mJmQucHVzaCh7dGFyZ2V0OnNbcl0sZnVuYzpjLmZ1bmMuZGZsdCxlbmFibGVkOiEwLF9pbmRleDotMX0pO3JldHVybiBufSxyLmNhbGNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe2lmKHIuZW5hYmxlZCl7dmFyIG49ci5ncm91cHMsaT1hLmdldFRhcmdldEFycmF5KGUse3RhcmdldDpufSk7aWYoaSl7dmFyIHMsbCxjLGgsZj17fSxwPXt9LGQ9W10sZz1vKGUudHJhbnNmb3JtcyxyKSx2PWkubGVuZ3RoO2ZvcihlLl9sZW5ndGgmJih2PU1hdGgubWluKHYsZS5fbGVuZ3RoKSkscz0wO3M8djtzKyspdm9pZCAwPT09KGM9ZltsPWlbc11dKT8oZltsXT1kLmxlbmd0aCxoPVtzXSxkLnB1c2goaCkscFtmW2xdXT1nKHMpKTooZFtjXS5wdXNoKHMpLHBbZltsXV09KHBbZltsXV18fFtdKS5jb25jYXQoZyhzKSkpO3IuX2luZGV4VG9Qb2ludHM9cDt2YXIgbT1yLmFnZ3JlZ2F0aW9ucztmb3Iocz0wO3M8bS5sZW5ndGg7cysrKXUodCxlLGQsbVtzXSk7InN0cmluZyI9PXR5cGVvZiBuJiZ1KHQsZSxkLHt0YXJnZXQ6bixmdW5jOiJmaXJzdCIsZW5hYmxlZDohMH0pLGUuX2xlbmd0aD1kLmxlbmd0aH19fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo2OTMsIi4uL2xpYiI6NzE3LCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6NzU0LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuL2hlbHBlcnMiOjEzMDB9XSwxMjk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGE9dCgiLi4vcmVnaXN0cnkiKSxpPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuL2hlbHBlcnMiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uLHM9dCgiLi4vY29uc3RhbnRzL2ZpbHRlcl9vcHMiKSxsPXMuQ09NUEFSSVNPTl9PUFMsYz1zLklOVEVSVkFMX09QUyx1PXMuU0VUX09QUztyLm1vZHVsZVR5cGU9InRyYW5zZm9ybSIsci5uYW1lPSJmaWx0ZXIiLHIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHRhcmdldDp7dmFsVHlwZToic3RyaW5nIixzdHJpY3Q6ITAsbm9CbGFuazohMCxhcnJheU9rOiEwLGRmbHQ6IngiLGVkaXRUeXBlOiJjYWxjIn0sb3BlcmF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W10uY29uY2F0KGwpLmNvbmNhdChjKS5jb25jYXQodSksZGZsdDoiPSIsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZTp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxwcmVzZXJ2ZWdhcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gaShhLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsci5hdHRyaWJ1dGVzLGEsaSl9aWYoaSgiZW5hYmxlZCIpKXt2YXIgbz1pKCJ0YXJnZXQiKTtpZihuLmlzQXJyYXlPclR5cGVkQXJyYXkobykmJjA9PT1vLmxlbmd0aClyZXR1cm4gZS5lbmFibGVkPSExLGU7aSgicHJlc2VydmVnYXBzIiksaSgib3BlcmF0aW9uIiksaSgidmFsdWUiKTt2YXIgcz1hLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKTtzKHQsZSwidmFsdWVjYWxlbmRhciIsbnVsbCkscyh0LGUsInRhcmdldGNhbGVuZGFyIixudWxsKX1yZXR1cm4gZX0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBhPW4uZ2V0VGFyZ2V0QXJyYXkoZSxyKTtpZihhKXt2YXIgcz1yLnRhcmdldCxoPWEubGVuZ3RoO2UuX2xlbmd0aCYmKGg9TWF0aC5taW4oaCxlLl9sZW5ndGgpKTt2YXIgZj1yLnRhcmdldGNhbGVuZGFyLHA9ZS5fYXJyYXlBdHRycyxkPXIucHJlc2VydmVnYXBzO2lmKCJzdHJpbmciPT10eXBlb2Ygcyl7dmFyIGc9bi5uZXN0ZWRQcm9wZXJ0eShlLHMrImNhbGVuZGFyIikuZ2V0KCk7ZyYmKGY9Zyl9dmFyIHYsbSx5PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lm9wZXJhdGlvbixhPXQudmFsdWUsaT1BcnJheS5pc0FycmF5KGEpO2Z1bmN0aW9uIG8odCl7cmV0dXJuLTEhPT10LmluZGV4T2Yobil9dmFyIHMsaD1mdW5jdGlvbihyKXtyZXR1cm4gZShyLDAsdC52YWx1ZWNhbGVuZGFyKX0sZj1mdW5jdGlvbih0KXtyZXR1cm4gZSh0LDAscil9O28obCk/cz1oKGk/YVswXTphKTpvKGMpP3M9aT9baChhWzBdKSxoKGFbMV0pXTpbaChhKSxoKGEpXTpvKHUpJiYocz1pP2EubWFwKGgpOltoKGEpXSk7c3dpdGNoKG4pe2Nhc2UiPSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPT09c307Y2FzZSIhPSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpIT09c307Y2FzZSI8IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk8c307Y2FzZSI8PSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPD1zfTtjYXNlIj4iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZih0KT5zfTtjYXNlIj49IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk+PXN9O2Nhc2UiW10iOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPj1zWzBdJiZlPD1zWzFdfTtjYXNlIigpIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZT5zWzBdJiZlPHNbMV19O2Nhc2UiWykiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPj1zWzBdJiZlPHNbMV19O2Nhc2UiKF0iOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPnNbMF0mJmU8PXNbMV19O2Nhc2UiXVsiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPD1zWzBdfHxlPj1zWzFdfTtjYXNlIikoIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZTxzWzBdfHxlPnNbMV19O2Nhc2UiXSgiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPD1zWzBdfHxlPnNbMV19O2Nhc2UiKVsiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPHNbMF18fGU+PXNbMV19O2Nhc2Uie30iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tMSE9PXMuaW5kZXhPZihmKHQpKX07Y2FzZSJ9eyI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi0xPT09cy5pbmRleE9mKGYodCkpfX19KHIsaS5nZXREYXRhVG9Db29yZEZ1bmModCxlLHMsYSksZikseD17fSxiPXt9LF89MDtkPyh2PWZ1bmN0aW9uKHQpe3hbdC5hc3RyXT1uLmV4dGVuZERlZXAoW10sdC5nZXQoKSksdC5zZXQobmV3IEFycmF5KGgpKX0sbT1mdW5jdGlvbih0LGUpe3ZhciByPXhbdC5hc3RyXVtlXTt0LmdldCgpW2VdPXJ9KToodj1mdW5jdGlvbih0KXt4W3QuYXN0cl09bi5leHRlbmREZWVwKFtdLHQuZ2V0KCkpLHQuc2V0KFtdKX0sbT1mdW5jdGlvbih0LGUpe3ZhciByPXhbdC5hc3RyXVtlXTt0LmdldCgpLnB1c2gocil9KSxUKHYpO2Zvcih2YXIgdz1vKGUudHJhbnNmb3JtcyxyKSxrPTA7azxoO2srKyl7eShhW2tdKT8oVChtLGspLGJbXysrXT13KGspKTpkJiZfKyt9ci5faW5kZXhUb1BvaW50cz1iLGUuX2xlbmd0aD1ffX1mdW5jdGlvbiBUKHQscil7Zm9yKHZhciBhPTA7YTxwLmxlbmd0aDthKyspe3Qobi5uZXN0ZWRQcm9wZXJ0eShlLHBbYV0pLHIpfX19fSx7Ii4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIjo2ODksIi4uL2xpYiI6NzE3LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuLi9yZWdpc3RyeSI6ODQ2LCIuL2hlbHBlcnMiOjEzMDB9XSwxMjk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGE9dCgiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiKSxpPXQoIi4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuL2hlbHBlcnMiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uO2Z1bmN0aW9uIHModCxlKXt2YXIgcixzLGwsYyx1LGgsZixwLGQsZyx2PWUudHJhbnNmb3JtLG09ZS50cmFuc2Zvcm1JbmRleCx5PXQudHJhbnNmb3Jtc1ttXS5ncm91cHMseD1vKHQudHJhbnNmb3Jtcyx2KTtpZighbi5pc0FycmF5T3JUeXBlZEFycmF5KHkpfHwwPT09eS5sZW5ndGgpcmV0dXJuW3RdO3ZhciBiPW4uZmlsdGVyVW5pcXVlKHkpLF89bmV3IEFycmF5KGIubGVuZ3RoKSx3PXkubGVuZ3RoLGs9YS5maW5kQXJyYXlBdHRyaWJ1dGVzKHQpLFQ9di5zdHlsZXN8fFtdLE09e307Zm9yKHI9MDtyPFQubGVuZ3RoO3IrKylNW1Rbcl0udGFyZ2V0XT1UW3JdLnZhbHVlO3Yuc3R5bGVzJiYoZz1uLmtleWVkQ29udGFpbmVyKHYsInN0eWxlcyIsInRhcmdldCIsInZhbHVlLm5hbWUiKSk7dmFyIEE9e30sUz17fTtmb3Iocj0wO3I8Yi5sZW5ndGg7cisrKXtBW2g9YltyXV09cixTW2hdPTAsKGY9X1tyXT1uLmV4dGVuZERlZXBOb0FycmF5cyh7fSx0KSkuX2dyb3VwPWgsZi50cmFuc2Zvcm1zW21dLl9pbmRleFRvUG9pbnRzPXt9O3ZhciBFPW51bGw7Zm9yKGcmJihFPWcuZ2V0KGgpKSxmLm5hbWU9RXx8IiI9PT1FP0U6bi50ZW1wbGF0ZVN0cmluZyh2Lm5hbWVmb3JtYXQse3RyYWNlOnQubmFtZSxncm91cDpofSkscD1mLnRyYW5zZm9ybXMsZi50cmFuc2Zvcm1zPVtdLHM9MDtzPHAubGVuZ3RoO3MrKylmLnRyYW5zZm9ybXNbc109bi5leHRlbmREZWVwTm9BcnJheXMoe30scFtzXSk7Zm9yKHM9MDtzPGsubGVuZ3RoO3MrKyluLm5lc3RlZFByb3BlcnR5KGYsa1tzXSkuc2V0KFtdKX1mb3IobD0wO2w8ay5sZW5ndGg7bCsrKXtmb3IoYz1rW2xdLHM9MCxkPVtdO3M8Yi5sZW5ndGg7cysrKWRbc109bi5uZXN0ZWRQcm9wZXJ0eShfW3NdLGMpLmdldCgpO2Zvcih1PW4ubmVzdGVkUHJvcGVydHkodCxjKS5nZXQoKSxzPTA7czx3O3MrKylkW0FbeVtzXV1dLnB1c2godVtzXSl9Zm9yKHM9MDtzPHc7cysrKXsoZj1fW0FbeVtzXV1dKS50cmFuc2Zvcm1zW21dLl9pbmRleFRvUG9pbnRzW1NbeVtzXV1dPXgocyksU1t5W3NdXSsrfWZvcihyPTA7cjxiLmxlbmd0aDtyKyspaD1iW3JdLGY9X1tyXSxpLmNsZWFyRXhwYW5kZWRUcmFjZURlZmF1bHRDb2xvcnMoZiksZj1uLmV4dGVuZERlZXBOb0FycmF5cyhmLE1baF18fHt9KTtyZXR1cm4gX31yLm1vZHVsZVR5cGU9InRyYW5zZm9ybSIsci5uYW1lPSJncm91cGJ5IixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxncm91cHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W10sZWRpdFR5cGU6ImNhbGMifSxuYW1lZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sc3R5bGVzOntfaXNMaW5rZWRUb0FycmF5OiJzdHlsZSIsdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDp7fSxlZGl0VHlwZToiY2FsYyIsX2NvbXBhcmVBc0pTT046ITB9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxhKXt2YXIgaSxvPXt9O2Z1bmN0aW9uIHMoZSxhKXtyZXR1cm4gbi5jb2VyY2UodCxvLHIuYXR0cmlidXRlcyxlLGEpfWlmKCFzKCJlbmFibGVkIikpcmV0dXJuIG87cygiZ3JvdXBzIikscygibmFtZWZvcm1hdCIsYS5fZGF0YUxlbmd0aD4xPyIle2dyb3VwfSAoJXt0cmFjZX0pIjoiJXtncm91cH0iKTt2YXIgbD10LnN0eWxlcyxjPW8uc3R5bGVzPVtdO2lmKGwpZm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIHU9Y1tpXT17fTtuLmNvZXJjZShsW2ldLGNbaV0sci5hdHRyaWJ1dGVzLnN0eWxlcywidGFyZ2V0Iik7dmFyIGg9bi5jb2VyY2UobFtpXSxjW2ldLHIuYXR0cmlidXRlcy5zdHlsZXMsInZhbHVlIik7bi5pc1BsYWluT2JqZWN0KGgpP3UudmFsdWU9bi5leHRlbmREZWVwKHt9LGgpOmgmJmRlbGV0ZSB1LnZhbHVlfXJldHVybiBvfSxyLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxpPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspZm9yKHI9cyh0W25dLGUpLGE9MDthPHIubGVuZ3RoO2ErKylpLnB1c2goclthXSk7cmV0dXJuIGl9fSx7Ii4uL2xpYiI6NzE3LCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6NzU0LCIuLi9wbG90cy9wbG90cyI6ODI2LCIuL2hlbHBlcnMiOjEzMDB9XSwxMzAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IucG9pbnRzQWNjZXNzb3JGdW5jdGlvbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGE9MDthPHQubGVuZ3RoJiYocj10W2FdKSE9PWU7YSsrKXIuX2luZGV4VG9Qb2ludHMmJiExIT09ci5lbmFibGVkJiYobj1yLl9pbmRleFRvUG9pbnRzKTtyZXR1cm4gbj9mdW5jdGlvbih0KXtyZXR1cm4gblt0XX06ZnVuY3Rpb24odCl7cmV0dXJuW3RdfX19LHt9XSwxMzAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGE9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4vaGVscGVycyIpLnBvaW50c0FjY2Vzc29yRnVuY3Rpb247ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0ic29ydCIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDoieCIsZWRpdFR5cGU6ImNhbGMifSxvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXNjZW5kaW5nIiwiZGVzY2VuZGluZyJdLGRmbHQ6ImFzY2VuZGluZyIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gYShhLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsci5hdHRyaWJ1dGVzLGEsaSl9cmV0dXJuIGEoImVuYWJsZWQiKSYmKGEoInRhcmdldCIpLGEoIm9yZGVyIikpLGV9LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgbz1uLmdldFRhcmdldEFycmF5KGUscik7aWYobyl7dmFyIHM9ci50YXJnZXQsbD1vLmxlbmd0aDtlLl9sZW5ndGgmJihsPU1hdGgubWluKGwsZS5fbGVuZ3RoKSk7dmFyIGMsdSxoPWUuX2FycmF5QXR0cnMsZj1mdW5jdGlvbih0LGUscixuKXt2YXIgYSxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKTtmb3IoYT0wO2E8bjthKyspaVthXT17djplW2FdLGk6YX07Zm9yKGkuc29ydChmdW5jdGlvbih0LGUpe3N3aXRjaCh0Lm9yZGVyKXtjYXNlImFzY2VuZGluZyI6cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodC52KS1lKHIudil9O2Nhc2UiZGVzY2VuZGluZyI6cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIGUoci52KS1lKHQudil9fX0odCxyKSksYT0wO2E8bjthKyspb1thXT1pW2FdLmk7cmV0dXJuIG99KHIsbyxhLmdldERhdGFUb0Nvb3JkRnVuYyh0LGUscyxvKSxsKSxwPWkoZS50cmFuc2Zvcm1zLHIpLGQ9e307Zm9yKGM9MDtjPGgubGVuZ3RoO2MrKyl7dmFyIGc9bi5uZXN0ZWRQcm9wZXJ0eShlLGhbY10pLHY9Zy5nZXQoKSxtPW5ldyBBcnJheShsKTtmb3IodT0wO3U8bDt1KyspbVt1XT12W2ZbdV1dO2cuc2V0KG0pfWZvcih1PTA7dTxsO3UrKylkW3VdPXAoZlt1XSk7ci5faW5kZXhUb1BvaW50cz1kLGUuX2xlbmd0aD1sfX19fSx7Ii4uL2xpYiI6NzE3LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY1LCIuL2hlbHBlcnMiOjEzMDB9XX0se30sWzI2XSkoMjYpfSk7"></script>

<style type="text/css">
  code{white-space: pre-wrap;}
  span.smallcaps{font-variant: small-caps;}
  span.underline{text-decoration: underline;}
  div.column{display: inline-block; vertical-align: top; width: 50%;}
  div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
  ul.task-list{list-style: none;}
    </style>


<style type="text/css">
  code {
    white-space: pre;
  }
  .sourceCode {
    overflow: visible;
  }
</style>
<style type="text/css" data-origin="pandoc">
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
  { counter-reset: source-line 0; }
pre.numberSource code > span
  { position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
  { content: counter(source-line);
    position: relative; left: -1em; text-align: right; vertical-align: baseline;
    border: none; display: inline-block;
    -webkit-touch-callout: none; -webkit-user-select: none;
    -khtml-user-select: none; -moz-user-select: none;
    -ms-user-select: none; user-select: none;
    padding: 0 4px; width: 4em;
    color: #aaaaaa;
  }
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-left: 4px; }
div.sourceCode
  {   }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ff0000; } /* Alert */
code span.an { color: #008000; } /* Annotation */
code span.at { } /* Attribute */
code span.bu { } /* BuiltIn */
code span.cf { color: #0000ff; } /* ControlFlow */
code span.ch { color: #008080; } /* Char */
code span.cn { } /* Constant */
code span.co { color: #008000; } /* Comment */
code span.cv { color: #008000; } /* CommentVar */
code span.do { color: #008000; } /* Documentation */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.im { } /* Import */
code span.in { color: #008000; } /* Information */
code span.kw { color: #0000ff; } /* Keyword */
code span.op { } /* Operator */
code span.ot { color: #ff4000; } /* Other */
code span.pp { color: #ff4000; } /* Preprocessor */
code span.sc { color: #008080; } /* SpecialChar */
code span.ss { color: #008080; } /* SpecialString */
code span.st { color: #008080; } /* String */
code span.va { } /* Variable */
code span.vs { color: #008080; } /* VerbatimString */
code span.wa { color: #008000; font-weight: bold; } /* Warning */

.sourceCode .row {
  width: 100%;
}
.sourceCode {
  overflow-x: auto;
}
.code-folding-btn {
  margin-right: -30px;
}
</style>
<script>
// apply pandoc div.sourceCode style to pre.sourceCode instead
(function() {
  var sheets = document.styleSheets;
  for (var i = 0; i < sheets.length; i++) {
    if (sheets[i].ownerNode.dataset["origin"] !== "pandoc") continue;
    try { var rules = sheets[i].cssRules; } catch (e) { continue; }
    for (var j = 0; j < rules.length; j++) {
      var rule = rules[j];
      // check if there is a div.sourceCode rule
      if (rule.type !== rule.STYLE_RULE || rule.selectorText !== "div.sourceCode") continue;
      var style = rule.style.cssText;
      // check if color or background-color is set
      if (rule.style.color === '' && rule.style.backgroundColor === '') continue;
      // replace div.sourceCode by a pre.sourceCode rule
      sheets[i].deleteRule(j);
      sheets[i].insertRule('pre.sourceCode{' + style + '}', j);
    }
  }
})();
</script>




<link rel="stylesheet" href="data:text/css,body%20%7B%0Afont%2Dfamily%3A%20%22%E6%B8%B8%E3%82%B4%E3%82%B7%E3%83%83%E3%82%AF%22%2C%20%22Yu%20Gothic%20UI%22%2C%20%22Meiryo%20UI%22%2C%20%22Hiragino%20Kaku%20Gothic%20ProN%22%2C%20%22sans%2Dserif%22%3B%0Afont%2Dsize%3A12pt%3B%0A%7D%0Ah1%2Ch2%2Ch3%2Ch4%2Ch5%2Ch6%20%7B%0Afont%2Dweight%3Abold%3B%09margin%3A%202em%200%200%2E3em%200%3B%0A%7D%0Ah1%20%7B%0Afont%2Dsize%3A%2020px%3B%0A%7D%0Ah2%20%7B%0Afont%2Dsize%3A%2020px%3B%0A%7D%0Ah3%20%7B%0Afont%2Dsize%3A%2018px%3B%0A%7D%0Ah4%20%7B%0Afont%2Dsize%3A%2016px%3B%0A%7D%0A%2Emath%20%7B%0Afont%2Dsize%3A%2012px%3B%0A%7D%0Att%2C%20code%2C%20pre%20%7B%0Afont%2Dfamily%3A%20%27DejaVu%20Sans%20Mono%27%2C%20%27Droid%20Sans%20Mono%27%2C%20%27Lucida%20Console%27%2C%20Consolas%2C%20Monaco%2C%20monospace%3B%0A%7D%0A%0Aspan%2Eco%20%7B%0Afont%2Dfamily%3A%20%22%E6%B8%B8%E3%82%B4%E3%82%B7%E3%83%83%E3%82%AF%22%2C%20%22Yu%20Gothic%20UI%22%2C%20%22Meiryo%20UI%22%2C%20%22Hiragino%20Kaku%20Gothic%20ProN%22%2C%20%22sans%2Dserif%22%3B%0Acolor%3A%20%230B6138%3B%0Afont%2Dstyle%3A%20normal%3B%0A%7D%0A%20blockquote%20%7B%0Afont%2Dsize%3A%2014px%3B%0A%7D%0A%0Aem%20%7B%0Afont%2Dstyle%3A%20normal%3B%0A%7D%0A%0A" type="text/css" />



<style type="text/css">
.main-container {
  max-width: 940px;
  margin-left: auto;
  margin-right: auto;
}
img {
  max-width:100%;
}
.tabbed-pane {
  padding-top: 12px;
}
.html-widget {
  margin-bottom: 20px;
}
button.code-folding-btn:focus {
  outline: none;
}
summary {
  display: list-item;
}
pre code {
  padding: 0;
}
</style>



<!-- tabsets -->

<style type="text/css">
.tabset-dropdown > .nav-tabs {
  display: inline-table;
  max-height: 500px;
  min-height: 44px;
  overflow-y: auto;
  border: 1px solid #ddd;
  border-radius: 4px;
}

.tabset-dropdown > .nav-tabs > li.active:before {
  content: "";
  font-family: 'Glyphicons Halflings';
  display: inline-block;
  padding: 10px;
  border-right: 1px solid #ddd;
}

.tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before {
  content: "";
  border: none;
}

.tabset-dropdown > .nav-tabs.nav-tabs-open:before {
  content: "";
  font-family: 'Glyphicons Halflings';
  display: inline-block;
  padding: 10px;
  border-right: 1px solid #ddd;
}

.tabset-dropdown > .nav-tabs > li.active {
  display: block;
}

.tabset-dropdown > .nav-tabs > li > a,
.tabset-dropdown > .nav-tabs > li > a:focus,
.tabset-dropdown > .nav-tabs > li > a:hover {
  border: none;
  display: inline-block;
  border-radius: 4px;
  background-color: transparent;
}

.tabset-dropdown > .nav-tabs.nav-tabs-open > li {
  display: block;
  float: none;
}

.tabset-dropdown > .nav-tabs > li {
  display: none;
}
</style>

<!-- code folding -->
<style type="text/css">
.code-folding-btn { margin-bottom: 4px; }
</style>



<style type="text/css">

#TOC {
  margin: 25px 0px 20px 0px;
}
@media (max-width: 768px) {
#TOC {
  position: relative;
  width: 100%;
}
}

@media print {
.toc-content {
  /* see https://github.com/w3c/csswg-drafts/issues/4434 */
  float: right;
}
}

.toc-content {
  padding-left: 30px;
  padding-right: 40px;
}

div.main-container {
  max-width: 1200px;
}

div.tocify {
  width: 20%;
  max-width: 260px;
  max-height: 85%;
}

@media (min-width: 768px) and (max-width: 991px) {
  div.tocify {
    width: 25%;
  }
}

@media (max-width: 767px) {
  div.tocify {
    width: 100%;
    max-width: none;
  }
}

.tocify ul, .tocify li {
  line-height: 20px;
}

.tocify-subheader .tocify-item {
  font-size: 0.90em;
}

.tocify .list-group-item {
  border-radius: 0px;
}


</style>



</head>

<body>


<div class="container-fluid main-container">


<!-- setup 3col/9col grid for toc_float and main content  -->
<div class="row">
<div class="col-xs-12 col-sm-4 col-md-3">
<div id="TOC" class="tocify">
</div>
</div>

<div class="toc-content col-xs-12 col-sm-8 col-md-9">




<div id="header">

<div class="btn-group pull-right float-right">
<button type="button" class="btn btn-default btn-xs btn-secondary btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span>Code</span> <span class="caret"></span></button>
<ul class="dropdown-menu dropdown-menu-right" style="min-width: 50px;">
<li><a id="rmd-show-all-code" href="#">Show All Code</a></li>
<li><a id="rmd-hide-all-code" href="#">Hide All Code</a></li>
</ul>
</div>



<h1 class="title toc-ignore">COVID-19, Infection, Death, and Mobility</h1>
<h4 class="author"></h4>
<h4 class="date">2022-01-24</h4>

</div>


<div id="contents内容" class="section level1" number="1">
<h1><span class="header-section-number">1</span> Contents/内容</h1>
<p>以下のデータを整理</p>
<p>・The google mobility index. source:google mobility report(Accessed 25 July 2021)/<a href="https://www.google.com/covid19/mobility/" class="uri">https://www.google.com/covid19/mobility/</a></p>
<p>・The number of infected people and Coronavirus (COVID-19) Deaths/ COVID19 感染・死亡データ source:<a href="https://covid19.mhlw.go.jp/(Accessed" class="uri">https://covid19.mhlw.go.jp/(Accessed</a> 25 July 2021)</p>
</div>
<div id="packages" class="section level1" number="2">
<h1><span class="header-section-number">2</span> packages</h1>
<div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">rm</span>(<span class="at">list =</span> <span class="fu">ls</span>())</span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a>path <span class="ot">&lt;-</span> <span class="fu">getwd</span>()</span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a><span class="fu">setwd</span>(path)</span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a><span class="co"># packages</span></span>
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a>pacman<span class="sc">::</span><span class="fu">p_load</span>(tidyverse, plotly,readxl,DT, lubridate, extrafont)</span>
<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-10"><a href="#cb1-10" aria-hidden="true" tabindex="-1"></a><span class="co"># Font for windows and mac</span></span>
<span id="cb1-11"><a href="#cb1-11" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> (stringr<span class="sc">::</span><span class="fu">str_detect</span>(path, <span class="at">pattern=</span><span class="st">&quot;Users&quot;</span>)){ </span>
<span id="cb1-12"><a href="#cb1-12" aria-hidden="true" tabindex="-1"></a>  </span>
<span id="cb1-13"><a href="#cb1-13" aria-hidden="true" tabindex="-1"></a>   <span class="fu">theme_set</span>(<span class="fu">theme_classic</span>(<span class="at">base_size =</span> <span class="dv">10</span>, <span class="at">base_family =</span> <span class="st">&quot;HiraginoSans-W3&quot;</span>))  <span class="co"># For Mac OS</span></span>
<span id="cb1-14"><a href="#cb1-14" aria-hidden="true" tabindex="-1"></a>   base_family <span class="ot">&lt;-</span> <span class="st">&quot;HiraginoSans-W3&quot;</span></span>
<span id="cb1-15"><a href="#cb1-15" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-16"><a href="#cb1-16" aria-hidden="true" tabindex="-1"></a> } <span class="cf">else</span>{</span>
<span id="cb1-17"><a href="#cb1-17" aria-hidden="true" tabindex="-1"></a>  </span>
<span id="cb1-18"><a href="#cb1-18" aria-hidden="true" tabindex="-1"></a>    <span class="fu">theme_set</span>(<span class="fu">theme_classic</span>(<span class="at">base_size =</span> <span class="dv">10</span>, <span class="at">base_family =</span> <span class="st">&quot;Arial&quot;</span>)) <span class="co"># For Windows</span></span>
<span id="cb1-19"><a href="#cb1-19" aria-hidden="true" tabindex="-1"></a>   base_family <span class="ot">&lt;-</span> <span class="st">&quot;Arial&quot;</span></span>
<span id="cb1-20"><a href="#cb1-20" aria-hidden="true" tabindex="-1"></a>}    </span></code></pre></div>
</div>
<div id="read-data" class="section level1" number="3">
<h1><span class="header-section-number">3</span> Read data</h1>
<div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a>newly_confirmed_cases_daily <span class="ot">&lt;-</span> readr<span class="sc">::</span><span class="fu">read_csv</span>(<span class="st">&quot;input/newly_confirmed_cases_daily.csv&quot;</span>,<span class="at">col_types =</span> <span class="fu">cols</span>(<span class="at">Date=</span> <span class="fu">col_date</span>(<span class="at">format=</span><span class="st">&quot;%Y/%m/%d&quot;</span>)))</span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a>confirmed_cases_cumulative_daily <span class="ot">&lt;-</span>readr<span class="sc">::</span><span class="fu">read_csv</span>(<span class="st">&quot;input/confirmed_cases_cumulative_daily.csv&quot;</span>,<span class="at">col_types =</span> <span class="fu">cols</span>(<span class="at">Date=</span> <span class="fu">col_date</span>(<span class="at">format=</span><span class="st">&quot;%Y/%m/%d&quot;</span>)))</span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a>deaths_cumulative_daily <span class="ot">&lt;-</span> readr<span class="sc">::</span><span class="fu">read_csv</span>(<span class="st">&quot;input/deaths_cumulative_daily.csv&quot;</span>,<span class="at">col_types =</span> <span class="fu">cols</span>(<span class="at">Date=</span> <span class="fu">col_date</span>(<span class="at">format=</span><span class="st">&quot;%Y/%m/%d&quot;</span>)))</span>
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a>JP_Mobility_Report <span class="ot">&lt;-</span> readr<span class="sc">::</span><span class="fu">read_csv</span>(<span class="st">&quot;input/2020_JP_Region_Mobility_Report.csv&quot;</span>)</span></code></pre></div>
<pre><code>## Parsed with column specification:
## cols(
##   country_region_code = col_character(),
##   country_region = col_character(),
##   sub_region_1 = col_character(),
##   sub_region_2 = col_logical(),
##   metro_area = col_logical(),
##   iso_3166_2_code = col_character(),
##   census_fips_code = col_logical(),
##   place_id = col_character(),
##   date = col_date(format = &quot;&quot;),
##   retail_and_recreation_percent_change_from_baseline = col_double(),
##   grocery_and_pharmacy_percent_change_from_baseline = col_double(),
##   parks_percent_change_from_baseline = col_double(),
##   transit_stations_percent_change_from_baseline = col_double(),
##   workplaces_percent_change_from_baseline = col_double(),
##   residential_percent_change_from_baseline = col_double()
## )</code></pre>
</div>
<div id="load-prefec_id" class="section level1" number="4">
<h1><span class="header-section-number">4</span> load prefec_id</h1>
<div class="sourceCode" id="cb4"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a>prefec_id <span class="ot">&lt;-</span> <span class="fu">read_excel</span>(<span class="st">&quot;input/prefec_id.xlsx&quot;</span>)</span></code></pre></div>
</div>
<div id="the-number-of-cumulative-confirmed-casesdeaths-at-the-end-of-june-2020-covid19-累積感染者数6月30日累積死者6月30日" class="section level1" number="5">
<h1><span class="header-section-number">5</span> The number of cumulative confirmed cases/deaths at the end of June 2020/ COVID19　累積感染者数（6月30日）、累積死者（6月30日）</h1>
<div class="sourceCode" id="cb5"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Data on the number of cumulative deaths at the end of June 2020</span></span>
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a>cum_deaths_20200630 <span class="ot">&lt;-</span> deaths_cumulative_daily <span class="sc">%&gt;%</span> </span>
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a>  <span class="fu">mutate</span>(<span class="at">year =</span> <span class="fu">year</span>(Date),<span class="at">month=</span><span class="fu">month</span>(Date),<span class="at">day=</span><span class="fu">day</span>(Date)) <span class="sc">%&gt;%</span> </span>
<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a>  <span class="fu">filter</span>(Date <span class="sc">==</span> <span class="st">&quot;2020-06-30&quot;</span>) <span class="sc">%&gt;%</span> </span>
<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a>  <span class="fu">mutate</span>(.,<span class="at">month =</span> <span class="dv">6</span>,<span class="at">year=</span><span class="dv">2020</span>)</span>
<span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb5-7"><a href="#cb5-7" aria-hidden="true" tabindex="-1"></a><span class="co"># Recode &quot;prefecture&quot; to &quot;prerec&quot; and &quot;All&quot; to &quot;zenkoku&quot;/後のleft_joinのためにprefectureをprerecに、Allをzenkokuにrecode</span></span>
<span id="cb5-8"><a href="#cb5-8" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb5-9"><a href="#cb5-9" aria-hidden="true" tabindex="-1"></a>cum_deaths_20200630<span class="ot">&lt;-</span> cum_deaths_20200630 <span class="sc">%&gt;%</span> </span>
<span id="cb5-10"><a href="#cb5-10" aria-hidden="true" tabindex="-1"></a>  <span class="fu">mutate</span>(.,<span class="at">prefec =</span> <span class="fu">recode</span>(Prefecture, <span class="at">ALL =</span> <span class="st">&quot;zenkoku&quot;</span>))</span>
<span id="cb5-11"><a href="#cb5-11" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb5-12"><a href="#cb5-12" aria-hidden="true" tabindex="-1"></a><span class="co"># cumulative confirmed cases </span></span>
<span id="cb5-13"><a href="#cb5-13" aria-hidden="true" tabindex="-1"></a>cum_confirmed_cases_20200630 <span class="ot">&lt;-</span> confirmed_cases_cumulative_daily <span class="sc">%&gt;%</span> </span>
<span id="cb5-14"><a href="#cb5-14" aria-hidden="true" tabindex="-1"></a>  <span class="fu">mutate</span>(<span class="at">year =</span> <span class="fu">year</span>(Date),<span class="at">month=</span><span class="fu">month</span>(Date),<span class="at">day=</span><span class="fu">day</span>(Date)) <span class="sc">%&gt;%</span> </span>
<span id="cb5-15"><a href="#cb5-15" aria-hidden="true" tabindex="-1"></a>  <span class="fu">filter</span>(Date <span class="sc">==</span> <span class="st">&quot;2020-06-30&quot;</span>) <span class="sc">%&gt;%</span> </span>
<span id="cb5-16"><a href="#cb5-16" aria-hidden="true" tabindex="-1"></a>  <span class="fu">mutate</span>(.,<span class="at">month =</span> <span class="dv">6</span>,<span class="at">year=</span><span class="dv">2020</span>)</span>
<span id="cb5-17"><a href="#cb5-17" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb5-18"><a href="#cb5-18" aria-hidden="true" tabindex="-1"></a><span class="co"># Recode &quot;prefecture&quot; to &quot;prerec&quot; and &quot;All&quot; to &quot;zenkoku&quot;/後のleft_joinのためにprefectureをprerecに、Allをzenkokuにrecode</span></span>
<span id="cb5-19"><a href="#cb5-19" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb5-20"><a href="#cb5-20" aria-hidden="true" tabindex="-1"></a>cum_confirmed_cases_20200630<span class="ot">&lt;-</span> cum_confirmed_cases_20200630 <span class="sc">%&gt;%</span> </span>
<span id="cb5-21"><a href="#cb5-21" aria-hidden="true" tabindex="-1"></a>  <span class="fu">mutate</span>(.,<span class="at">prefec =</span> <span class="fu">recode</span>(Prefecture, <span class="at">ALL =</span> <span class="st">&quot;zenkoku&quot;</span>))</span></code></pre></div>
</div>
<div id="the-number-of-cumulative-confirmed-casesdeaths-at-the-end-of-may-2020covid19-累積感染者数5月31日累積死者5月31日" class="section level1" number="6">
<h1><span class="header-section-number">6</span> The number of cumulative confirmed cases/deaths at the end of May 2020/COVID19　累積感染者数（5月31日）、累積死者（5月31日）</h1>
<div class="sourceCode" id="cb6"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Data on the number of cumulative deaths at the end of may 2020</span></span>
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a>cum_deaths_20200531 <span class="ot">&lt;-</span> deaths_cumulative_daily <span class="sc">%&gt;%</span> </span>
<span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a>  <span class="fu">mutate</span>(<span class="at">year =</span> <span class="fu">year</span>(Date),<span class="at">month=</span><span class="fu">month</span>(Date),<span class="at">day=</span><span class="fu">day</span>(Date)) <span class="sc">%&gt;%</span> </span>
<span id="cb6-4"><a href="#cb6-4" aria-hidden="true" tabindex="-1"></a>  <span class="fu">filter</span>(Date <span class="sc">==</span> <span class="st">&quot;2020-05-31&quot;</span>) <span class="sc">%&gt;%</span> </span>
<span id="cb6-5"><a href="#cb6-5" aria-hidden="true" tabindex="-1"></a>  <span class="fu">mutate</span>(.,<span class="at">month =</span> <span class="dv">5</span>,<span class="at">year=</span><span class="dv">2020</span>)</span>
<span id="cb6-6"><a href="#cb6-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-7"><a href="#cb6-7" aria-hidden="true" tabindex="-1"></a><span class="co"># Recode &quot;prefecture&quot; to &quot;prerec&quot; and &quot;All&quot; to &quot;zenkoku&quot;/後のleft_joinのためにprefectureをprerecに、Allをzenkokuにrecode</span></span>
<span id="cb6-8"><a href="#cb6-8" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-9"><a href="#cb6-9" aria-hidden="true" tabindex="-1"></a>cum_deaths_20200531<span class="ot">&lt;-</span> cum_deaths_20200531 <span class="sc">%&gt;%</span> </span>
<span id="cb6-10"><a href="#cb6-10" aria-hidden="true" tabindex="-1"></a>  <span class="fu">mutate</span>(.,<span class="at">prefec =</span> <span class="fu">recode</span>(Prefecture, <span class="at">ALL =</span> <span class="st">&quot;zenkoku&quot;</span>))</span>
<span id="cb6-11"><a href="#cb6-11" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-12"><a href="#cb6-12" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-13"><a href="#cb6-13" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-14"><a href="#cb6-14" aria-hidden="true" tabindex="-1"></a><span class="co"># cumulative confirmed cases </span></span>
<span id="cb6-15"><a href="#cb6-15" aria-hidden="true" tabindex="-1"></a>cum_confirmed_cases_20200531 <span class="ot">&lt;-</span> confirmed_cases_cumulative_daily <span class="sc">%&gt;%</span> </span>
<span id="cb6-16"><a href="#cb6-16" aria-hidden="true" tabindex="-1"></a>  <span class="fu">mutate</span>(<span class="at">year =</span> <span class="fu">year</span>(Date),<span class="at">month=</span><span class="fu">month</span>(Date),<span class="at">day=</span><span class="fu">day</span>(Date)) <span class="sc">%&gt;%</span> </span>
<span id="cb6-17"><a href="#cb6-17" aria-hidden="true" tabindex="-1"></a>  <span class="fu">filter</span>(Date <span class="sc">==</span> <span class="st">&quot;2020-05-31&quot;</span>) <span class="sc">%&gt;%</span> </span>
<span id="cb6-18"><a href="#cb6-18" aria-hidden="true" tabindex="-1"></a>  <span class="fu">mutate</span>(.,<span class="at">month =</span> <span class="dv">5</span>,<span class="at">year=</span><span class="dv">2020</span>)</span>
<span id="cb6-19"><a href="#cb6-19" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-20"><a href="#cb6-20" aria-hidden="true" tabindex="-1"></a><span class="co">#  Recode &quot;prefecture&quot; to &quot;prerec&quot; and &quot;All&quot; to &quot;zenkoku後のleft_joinのためにprefectureをprerecに、Allをzenkokuにrecode</span></span>
<span id="cb6-21"><a href="#cb6-21" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-22"><a href="#cb6-22" aria-hidden="true" tabindex="-1"></a>cum_confirmed_cases_20200531<span class="ot">&lt;-</span> cum_confirmed_cases_20200531 <span class="sc">%&gt;%</span> </span>
<span id="cb6-23"><a href="#cb6-23" aria-hidden="true" tabindex="-1"></a>  <span class="fu">mutate</span>(.,<span class="at">prefec =</span> <span class="fu">recode</span>(Prefecture, <span class="at">ALL =</span> <span class="st">&quot;zenkoku&quot;</span>))</span></code></pre></div>
</div>
<div id="moblity-index-for-japan" class="section level1" number="7">
<h1><span class="header-section-number">7</span> moblity index for Japan</h1>
<div class="sourceCode" id="cb7"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>google_mobility_Japan2020  <span class="ot">&lt;-</span> JP_Mobility_Report <span class="sc">%&gt;%</span> </span>
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a>  <span class="fu">mutate</span>(<span class="at">year =</span> <span class="fu">year</span>(date),<span class="at">month=</span><span class="fu">month</span>(date),<span class="at">day=</span><span class="fu">day</span>(date)) <span class="sc">%&gt;%</span> </span>
<span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a>  <span class="co"># 2020年にデータを限定</span></span>
<span id="cb7-4"><a href="#cb7-4" aria-hidden="true" tabindex="-1"></a>  <span class="fu">filter</span>(year<span class="sc">==</span><span class="dv">2020</span>) <span class="sc">%&gt;%</span> </span>
<span id="cb7-5"><a href="#cb7-5" aria-hidden="true" tabindex="-1"></a>  <span class="co"># 日本全国のsub_region1がnaなのでreplace_na</span></span>
<span id="cb7-6"><a href="#cb7-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">replace_na</span>(<span class="fu">list</span>(<span class="at">sub_region_1=</span><span class="st">&quot;zenkoku&quot;</span>)) <span class="sc">%&gt;%</span> </span>
<span id="cb7-7"><a href="#cb7-7" aria-hidden="true" tabindex="-1"></a>  <span class="co"># sub_region1と月次で集計</span></span>
<span id="cb7-8"><a href="#cb7-8" aria-hidden="true" tabindex="-1"></a>  <span class="fu">group_by</span>(sub_region_1,month) <span class="sc">%&gt;%</span> </span>
<span id="cb7-9"><a href="#cb7-9" aria-hidden="true" tabindex="-1"></a>  <span class="fu">summarise</span>(</span>
<span id="cb7-10"><a href="#cb7-10" aria-hidden="true" tabindex="-1"></a>    <span class="at">retail_and_recreation =</span> <span class="fu">mean</span>(retail_and_recreation_percent_change_from_baseline),</span>
<span id="cb7-11"><a href="#cb7-11" aria-hidden="true" tabindex="-1"></a>    <span class="at">grocery_and_pharmacy =</span> <span class="fu">mean</span>(grocery_and_pharmacy_percent_change_from_baseline),</span>
<span id="cb7-12"><a href="#cb7-12" aria-hidden="true" tabindex="-1"></a>    <span class="at">parks =</span> <span class="fu">mean</span>(parks_percent_change_from_baseline),</span>
<span id="cb7-13"><a href="#cb7-13" aria-hidden="true" tabindex="-1"></a>    <span class="at">transit_stations =</span> <span class="fu">mean</span>(transit_stations_percent_change_from_baseline),</span>
<span id="cb7-14"><a href="#cb7-14" aria-hidden="true" tabindex="-1"></a>    <span class="at">workplaces =</span> <span class="fu">mean</span>(workplaces_percent_change_from_baseline),</span>
<span id="cb7-15"><a href="#cb7-15" aria-hidden="true" tabindex="-1"></a>    <span class="at">residential =</span> <span class="fu">mean</span>(residential_percent_change_from_baseline)</span>
<span id="cb7-16"><a href="#cb7-16" aria-hidden="true" tabindex="-1"></a>  )</span></code></pre></div>
<pre><code>## `summarise()` regrouping output by &#39;sub_region_1&#39; (override with `.groups` argument)</code></pre>
<div class="sourceCode" id="cb9"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a>  <span class="co"># make mobility index</span></span>
<span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a>  <span class="co">#  year=2020代入、sub_region1をprefecに変換。</span></span>
<span id="cb9-3"><a href="#cb9-3" aria-hidden="true" tabindex="-1"></a>google_mobility_Japan2020 <span class="ot">&lt;-</span>google_mobility_Japan2020 <span class="sc">%&gt;%</span> </span>
<span id="cb9-4"><a href="#cb9-4" aria-hidden="true" tabindex="-1"></a>  <span class="fu">mutate</span>(.,<span class="at">prefec=</span>sub_region_1,</span>
<span id="cb9-5"><a href="#cb9-5" aria-hidden="true" tabindex="-1"></a>         <span class="at">year=</span><span class="dv">2020</span>,</span>
<span id="cb9-6"><a href="#cb9-6" aria-hidden="true" tabindex="-1"></a>         <span class="at">google_mobility_index_4vari_average =</span> (retail_and_recreation<span class="sc">+</span>grocery_and_pharmacy<span class="sc">+</span>transit_stations<span class="sc">+</span>workplaces)<span class="sc">/</span><span class="dv">4</span>,</span>
<span id="cb9-7"><a href="#cb9-7" aria-hidden="true" tabindex="-1"></a>         <span class="at">mobility_index_6vari_average =</span>(retail_and_recreation<span class="sc">+</span>grocery_and_pharmacy<span class="sc">+</span>transit_stations<span class="sc">+</span>workplaces<span class="sc">+</span>parks<span class="sc">+</span>residential)<span class="sc">/</span><span class="dv">6</span>)</span></code></pre></div>
</div>
<div id="left_join-2020_may" class="section level1" number="8">
<h1><span class="header-section-number">8</span> left_join 2020_may</h1>
<div class="sourceCode" id="cb10"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a>covariates2020may <span class="ot">&lt;-</span><span class="fu">left_join</span>(cum_confirmed_cases_20200531, cum_deaths_20200531,<span class="at">by =</span> <span class="fu">c</span>(<span class="st">&quot;prefec&quot;</span>,<span class="st">&quot;year&quot;</span>,<span class="st">&quot;month&quot;</span>,<span class="st">&quot;day&quot;</span>,<span class="st">&quot;Date&quot;</span>,<span class="st">&quot;Prefecture&quot;</span>))</span>
<span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb10-3"><a href="#cb10-3" aria-hidden="true" tabindex="-1"></a>covariates2020may <span class="ot">&lt;-</span> <span class="fu">left_join</span>(google_mobility_Japan2020, covariates2020may,<span class="at">by =</span> <span class="fu">c</span>(<span class="st">&quot;prefec&quot;</span>,<span class="st">&quot;month&quot;</span>,<span class="st">&quot;year&quot;</span>))</span>
<span id="cb10-4"><a href="#cb10-4" aria-hidden="true" tabindex="-1"></a>covariates2020may <span class="ot">&lt;-</span> <span class="fu">left_join</span>(covariates2020may,prefec_id,<span class="at">by=</span><span class="st">&quot;prefec&quot;</span>)</span></code></pre></div>
</div>
<div id="left_join-2020_jun" class="section level1" number="9">
<h1><span class="header-section-number">9</span> left_join 2020_jun</h1>
<div class="sourceCode" id="cb11"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a>covariates <span class="ot">&lt;-</span><span class="fu">left_join</span>(cum_confirmed_cases_20200630, cum_deaths_20200630,<span class="at">by =</span> <span class="fu">c</span>(<span class="st">&quot;prefec&quot;</span>,<span class="st">&quot;year&quot;</span>,<span class="st">&quot;month&quot;</span>,<span class="st">&quot;day&quot;</span>,<span class="st">&quot;Date&quot;</span>,<span class="st">&quot;Prefecture&quot;</span>))</span>
<span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb11-3"><a href="#cb11-3" aria-hidden="true" tabindex="-1"></a>covariates2020 <span class="ot">&lt;-</span> <span class="fu">left_join</span>(google_mobility_Japan2020, covariates,<span class="at">by =</span> <span class="fu">c</span>(<span class="st">&quot;prefec&quot;</span>,<span class="st">&quot;month&quot;</span>,<span class="st">&quot;year&quot;</span>))</span>
<span id="cb11-4"><a href="#cb11-4" aria-hidden="true" tabindex="-1"></a>covariates2020 <span class="ot">&lt;-</span> <span class="fu">left_join</span>(covariates2020,prefec_id,<span class="at">by=</span><span class="st">&quot;prefec&quot;</span>)</span></code></pre></div>
</div>
<div id="save-the-data-for-may-2020.2020年5月を残してcsv保存" class="section level1" number="10">
<h1><span class="header-section-number">10</span> Save the data for May 2020./2020年5月を残して、csv保存</h1>
<div class="sourceCode" id="cb12"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a>covariates202005 <span class="ot">&lt;-</span> covariates2020may <span class="sc">%&gt;%</span> </span>
<span id="cb12-2"><a href="#cb12-2" aria-hidden="true" tabindex="-1"></a><span class="co"># sub_region_1をドロップするために、ungroupを使う。googlemobliity indexの箇所でgroup_byを使っているため。</span></span>
<span id="cb12-3"><a href="#cb12-3" aria-hidden="true" tabindex="-1"></a>  <span class="fu">filter</span>(month<span class="sc">==</span><span class="dv">5</span>) <span class="sc">%&gt;%</span> </span>
<span id="cb12-4"><a href="#cb12-4" aria-hidden="true" tabindex="-1"></a>  <span class="fu">ungroup</span>() <span class="sc">%&gt;%</span> </span>
<span id="cb12-5"><a href="#cb12-5" aria-hidden="true" tabindex="-1"></a>    <span class="fu">select</span>(<span class="sc">-</span><span class="fu">c</span>(sub_region_1,Prefecture ))</span>
<span id="cb12-6"><a href="#cb12-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb12-7"><a href="#cb12-7" aria-hidden="true" tabindex="-1"></a>covariates202005 <span class="ot">&lt;-</span> covariates202005 <span class="sc">%&gt;%</span> </span>
<span id="cb12-8"><a href="#cb12-8" aria-hidden="true" tabindex="-1"></a>    <span class="fu">rename</span>(<span class="at">confirmed_cases_cumulative=</span><span class="st">&quot;Confirmed cases(Cumulative)&quot;</span>,<span class="at">deaths_cumulative=</span><span class="st">&quot;Deaths(Cumulative)&quot;</span>)</span></code></pre></div>
<div id="write-csvデータ保存" class="section level2" number="10.1">
<h2><span class="header-section-number">10.1</span> Write csv/データ保存</h2>
<div class="sourceCode" id="cb13"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="fu">write_csv</span>(covariates202005,<span class="st">&quot;output/infection_death_mobility2020may.csv&quot;</span>)</span></code></pre></div>
</div>
</div>
<div id="save-the-data-for-june-2020.2020年6月を残してcsv保存" class="section level1" number="11">
<h1><span class="header-section-number">11</span> Save the data for June 2020./2020年6月を残して、csv保存</h1>
<div class="sourceCode" id="cb14"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a>covariates202006 <span class="ot">&lt;-</span> covariates2020 <span class="sc">%&gt;%</span> </span>
<span id="cb14-2"><a href="#cb14-2" aria-hidden="true" tabindex="-1"></a>  <span class="co"># sub_region_1をドロップするために、ungroupを使う。googlemobliity indexの箇所でgroup_byを使っているため。</span></span>
<span id="cb14-3"><a href="#cb14-3" aria-hidden="true" tabindex="-1"></a>  <span class="fu">filter</span>(month<span class="sc">==</span><span class="dv">6</span>) <span class="sc">%&gt;%</span> </span>
<span id="cb14-4"><a href="#cb14-4" aria-hidden="true" tabindex="-1"></a>  <span class="fu">ungroup</span>() <span class="sc">%&gt;%</span> </span>
<span id="cb14-5"><a href="#cb14-5" aria-hidden="true" tabindex="-1"></a>    <span class="fu">select</span>(<span class="sc">-</span><span class="fu">c</span>(sub_region_1,Prefecture ))</span>
<span id="cb14-6"><a href="#cb14-6" aria-hidden="true" tabindex="-1"></a>covariates202006 <span class="ot">&lt;-</span> covariates202006 <span class="sc">%&gt;%</span> </span>
<span id="cb14-7"><a href="#cb14-7" aria-hidden="true" tabindex="-1"></a>    <span class="fu">rename</span>(<span class="at">confirmed_cases_cumulative=</span><span class="st">&quot;Confirmed cases(Cumulative)&quot;</span>,<span class="at">deaths_cumulative=</span><span class="st">&quot;Deaths(Cumulative)&quot;</span>)</span></code></pre></div>
<div id="write_csvデータ保存" class="section level2" number="11.1">
<h2><span class="header-section-number">11.1</span> write_csv/データ保存</h2>
<div class="sourceCode" id="cb15"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="fu">write_csv</span>(covariates202006,<span class="st">&quot;output/infection_death_mobility2020Jun.csv&quot;</span>)</span></code></pre></div>
</div>
</div>
<div id="data-checkデータ確認" class="section level1" number="12">
<h1><span class="header-section-number">12</span> Data check/データ確認</h1>
<div class="sourceCode" id="cb16"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="fu">datatable</span>(<span class="fu">head</span>(covariates2020))</span></code></pre></div>
<div id="htmlwidget-ac9571ecba109806ecf6" style="width:100%;height:auto;" class="datatables html-widget"></div>
<script type="application/json" data-for="htmlwidget-ac9571ecba109806ecf6">{"x":{"filter":"none","data":[["1","2","3","4","5","6"],["Aichi","Aichi","Aichi","Aichi","Aichi","Aichi"],[2,3,4,5,6,7],[-0.8,-7.45161290322581,-25.6666666666667,-24.7096774193548,-10.3666666666667,-9.51612903225806],[3,2.29032258064516,0.133333333333333,-2,-0.0333333333333333,-0.903225806451613],[-0.933333333333333,4.48387096774194,6.63333333333333,1.12903225806452,-4.8,-11.9032258064516],[-8.73333333333333,-23.3870967741935,-43.4,-48.0645161290323,-25.9,-24.9677419354839],[-2.46666666666667,-5.2258064516129,-18.6666666666667,-26.3870967741935,-11.8,-13.0967741935484],[2.2,4.67741935483871,11.2333333333333,14.0645161290323,6.6,6.80645161290323],["Aichi","Aichi","Aichi","Aichi","Aichi","Aichi"],[2020,2020,2020,2020,2020,2020],[-2.25,-8.44354838709677,-21.9,-25.2903225806452,-12.025,-12.1209677419355],[-1.28888888888889,-4.10215053763441,-11.6222222222222,-14.3279569892473,-7.71666666666667,-8.93010752688172],[null,null,null,null,"2020-06-30",null],[null,null,null,null,"Aichi",null],[null,null,null,null,524,null],[null,null,null,null,30,null],[null,null,null,null,34,null],["愛知","愛知","愛知","愛知","愛知","愛知"],[23,23,23,23,23,23]],"container":"<table class=\"display\">\n  <thead>\n    <tr>\n      <th> <\/th>\n      <th>sub_region_1<\/th>\n      <th>month<\/th>\n      <th>retail_and_recreation<\/th>\n      <th>grocery_and_pharmacy<\/th>\n      <th>parks<\/th>\n      <th>transit_stations<\/th>\n      <th>workplaces<\/th>\n      <th>residential<\/th>\n      <th>prefec<\/th>\n      <th>year<\/th>\n      <th>google_mobility_index_4vari_average<\/th>\n      <th>mobility_index_6vari_average<\/th>\n      <th>Date<\/th>\n      <th>Prefecture<\/th>\n      <th>Confirmed cases(Cumulative)<\/th>\n      <th>day<\/th>\n      <th>Deaths(Cumulative)<\/th>\n      <th>prefec_kanji<\/th>\n      <th>id<\/th>\n    <\/tr>\n  <\/thead>\n<\/table>","options":{"columnDefs":[{"className":"dt-right","targets":[2,3,4,5,6,7,8,10,11,12,15,16,17,19]},{"orderable":false,"targets":0}],"order":[],"autoWidth":false,"orderClasses":false}},"evals":[],"jsHooks":[]}</script>
<div class="sourceCode" id="cb17"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="fu">summary</span>(covariates2020)</span></code></pre></div>
<pre><code>##  sub_region_1           month    retail_and_recreation grocery_and_pharmacy
##  Length:528         Min.   : 2   Min.   :-52.419       Min.   :-10.767     
##  Class :character   1st Qu.: 4   1st Qu.:-11.797       1st Qu.: -0.500     
##  Mode  :character   Median : 7   Median : -5.525       Median :  1.403     
##                     Mean   : 7   Mean   : -7.880       Mean   :  1.346     
##                     3rd Qu.:10   3rd Qu.: -1.767       3rd Qu.:  3.363     
##                     Max.   :12   Max.   :  6.645       Max.   :  9.333     
##                                                                            
##      parks          transit_stations   workplaces        residential     
##  Min.   :-46.6129   Min.   :-58.16   Min.   :-42.3871   Min.   : 0.8387  
##  1st Qu.: -7.3473   1st Qu.:-27.40   1st Qu.:-14.8097   1st Qu.: 3.5667  
##  Median :  0.5333   Median :-19.84   Median :-10.3441   Median : 4.9000  
##  Mean   :  1.5555   Mean   :-20.45   Mean   :-11.1204   Mean   : 5.6391  
##  3rd Qu.:  8.8667   3rd Qu.:-11.25   3rd Qu.: -6.3169   3rd Qu.: 6.8065  
##  Max.   : 80.3226   Max.   : 15.57   Max.   : -0.3548   Max.   :21.4194  
##  NA&#39;s   :37         NA&#39;s   :2                                            
##     prefec               year      google_mobility_index_4vari_average
##  Length:528         Min.   :2020   Min.   :-39.048                    
##  Class :character   1st Qu.:2020   1st Qu.:-13.019                    
##  Mode  :character   Median :2020   Median : -8.440                    
##                     Mean   :2020   Mean   : -9.525                    
##                     3rd Qu.:2020   3rd Qu.: -4.445                    
##                     Max.   :2020   Max.   :  3.142                    
##                                    NA&#39;s   :2                          
##  mobility_index_6vari_average      Date             Prefecture       
##  Min.   :-25.995              Min.   :2020-06-30   Length:528        
##  1st Qu.: -8.739              1st Qu.:2020-06-30   Class :character  
##  Median : -5.317              Median :2020-06-30   Mode  :character  
##  Mean   : -5.330              Mean   :2020-06-30                     
##  3rd Qu.: -1.113              3rd Qu.:2020-06-30                     
##  Max.   : 14.952              Max.   :2020-06-30                     
##  NA&#39;s   :37                   NA&#39;s   :480                            
##  Confirmed cases(Cumulative)      day      Deaths(Cumulative)
##  Min.   :    0.00            Min.   :30    Min.   :  0.00    
##  1st Qu.:   43.75            1st Qu.:30    1st Qu.:  0.00    
##  Median :   82.00            Median :30    Median :  1.50    
##  Mean   :  763.31            Mean   :30    Mean   : 40.54    
##  3rd Qu.:  245.25            3rd Qu.:30    3rd Qu.: 19.75    
##  Max.   :18394.00            Max.   :30    Max.   :973.00    
##  NA&#39;s   :480                 NA&#39;s   :480   NA&#39;s   :480       
##  prefec_kanji             id       
##  Length:528         Min.   : 1.00  
##  Class :character   1st Qu.:12.75  
##  Mode  :character   Median :24.50  
##                     Mean   :25.56  
##                     3rd Qu.:36.25  
##                     Max.   :99.00  
## </code></pre>
<div class="sourceCode" id="cb19"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a><span class="fu">datatable</span>(<span class="fu">head</span>(covariates202006))</span></code></pre></div>
<div id="htmlwidget-841f0a1e49eae79ff44e" style="width:100%;height:auto;" class="datatables html-widget"></div>
<script type="application/json" data-for="htmlwidget-841f0a1e49eae79ff44e">{"x":{"filter":"none","data":[["1","2","3","4","5","6"],[6,6,6,6,6,6],[-10.3666666666667,2.86666666666667,-1,-15.2333333333333,-7.53333333333333,-7.33333333333333],[-0.0333333333333333,5.13333333333333,3.66666666666667,0.2,0.6,3.06666666666667],[-4.8,56.5,28.9333333333333,0.1,0.533333333333333,19.0666666666667],[-25.9,-12.8,-16.5333333333333,-28.6333333333333,-23.3333333333333,-12.4],[-11.8,-5.43333333333333,-5.63333333333333,-15.2333333333333,-6.66666666666667,-9.26666666666667],[6.6,2.3,2.06666666666667,8.86666666666667,4.6,4.8],["Aichi","Akita","Aomori","Chiba","Ehime","Fukui"],[2020,2020,2020,2020,2020,2020],[-12.025,-2.55833333333333,-4.875,-14.725,-9.23333333333333,-6.48333333333333],[-7.71666666666667,8.09444444444444,1.91666666666667,-8.32222222222222,-5.3,-0.344444444444444],["2020-06-30","2020-06-30","2020-06-30","2020-06-30","2020-06-30","2020-06-30"],[524,16,27,960,82,122],[30,30,30,30,30,30],[34,0,1,45,4,8],["愛知","秋田","青森","千葉","愛媛","福井"],[23,5,2,12,38,18]],"container":"<table class=\"display\">\n  <thead>\n    <tr>\n      <th> <\/th>\n      <th>month<\/th>\n      <th>retail_and_recreation<\/th>\n      <th>grocery_and_pharmacy<\/th>\n      <th>parks<\/th>\n      <th>transit_stations<\/th>\n      <th>workplaces<\/th>\n      <th>residential<\/th>\n      <th>prefec<\/th>\n      <th>year<\/th>\n      <th>google_mobility_index_4vari_average<\/th>\n      <th>mobility_index_6vari_average<\/th>\n      <th>Date<\/th>\n      <th>confirmed_cases_cumulative<\/th>\n      <th>day<\/th>\n      <th>deaths_cumulative<\/th>\n      <th>prefec_kanji<\/th>\n      <th>id<\/th>\n    <\/tr>\n  <\/thead>\n<\/table>","options":{"columnDefs":[{"className":"dt-right","targets":[1,2,3,4,5,6,7,9,10,11,13,14,15,17]},{"orderable":false,"targets":0}],"order":[],"autoWidth":false,"orderClasses":false}},"evals":[],"jsHooks":[]}</script>
<div class="sourceCode" id="cb20"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb20-1"><a href="#cb20-1" aria-hidden="true" tabindex="-1"></a><span class="fu">summary</span>(covariates202006)</span></code></pre></div>
<pre><code>##      month   retail_and_recreation grocery_and_pharmacy     parks        
##  Min.   :6   Min.   :-30.667       Min.   :-4.8667      Min.   :-33.767  
##  1st Qu.:6   1st Qu.:-10.442       1st Qu.:-0.1833      1st Qu.:-10.575  
##  Median :6   Median : -8.317       Median : 0.6667      Median : -3.517  
##  Mean   :6   Mean   : -9.025       Mean   : 0.9833      Mean   : -0.291  
##  3rd Qu.:6   3rd Qu.: -6.800       3rd Qu.: 2.1667      3rd Qu.:  9.100  
##  Max.   :6   Max.   :  2.867       Max.   : 5.4333      Max.   : 56.500  
##  transit_stations   workplaces       residential        prefec         
##  Min.   :-38.50   Min.   :-23.700   Min.   : 2.067   Length:48         
##  1st Qu.:-26.39   1st Qu.:-10.633   1st Qu.: 4.225   Class :character  
##  Median :-23.80   Median : -8.717   Median : 4.900   Mode  :character  
##  Mean   :-23.68   Mean   : -9.453   Mean   : 5.354                     
##  3rd Qu.:-19.57   3rd Qu.: -7.133   3rd Qu.: 5.983                     
##  Max.   :-12.40   Max.   : -5.433   Max.   :12.467                     
##       year      google_mobility_index_4vari_average
##  Min.   :2020   Min.   :-23.025                    
##  1st Qu.:2020   1st Qu.:-11.894                    
##  Median :2020   Median :-10.100                    
##  Mean   :2020   Mean   :-10.292                    
##  3rd Qu.:2020   3rd Qu.: -8.671                    
##  Max.   :2020   Max.   : -2.558                    
##  mobility_index_6vari_average      Date            confirmed_cases_cumulative
##  Min.   :-16.167              Min.   :2020-06-30   Min.   :    0.00          
##  1st Qu.: -8.375              1st Qu.:2020-06-30   1st Qu.:   43.75          
##  Median : -6.814              Median :2020-06-30   Median :   82.00          
##  Mean   : -6.018              Mean   :2020-06-30   Mean   :  763.31          
##  3rd Qu.: -4.300              3rd Qu.:2020-06-30   3rd Qu.:  245.25          
##  Max.   :  8.094              Max.   :2020-06-30   Max.   :18394.00          
##       day     deaths_cumulative prefec_kanji             id       
##  Min.   :30   Min.   :  0.00    Length:48          Min.   : 1.00  
##  1st Qu.:30   1st Qu.:  0.00    Class :character   1st Qu.:12.75  
##  Median :30   Median :  1.50    Mode  :character   Median :24.50  
##  Mean   :30   Mean   : 40.54                       Mean   :25.56  
##  3rd Qu.:30   3rd Qu.: 19.75                       3rd Qu.:36.25  
##  Max.   :30   Max.   :973.00                       Max.   :99.00</code></pre>
</div>
<div id="graph-mobility-index-old" class="section level1" number="13">
<h1><span class="header-section-number">13</span> graph mobility index old</h1>
<div class="sourceCode" id="cb22"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb22-1"><a href="#cb22-1" aria-hidden="true" tabindex="-1"></a>moblity_jp_zenkoku<span class="ot">&lt;-</span>google_mobility_Japan2020 <span class="sc">%&gt;%</span> </span>
<span id="cb22-2"><a href="#cb22-2" aria-hidden="true" tabindex="-1"></a>  <span class="fu">filter</span>(., sub_region_1<span class="sc">==</span><span class="st">&quot;zenkoku&quot;</span>) </span>
<span id="cb22-3"><a href="#cb22-3" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb22-4"><a href="#cb22-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb22-5"><a href="#cb22-5" aria-hidden="true" tabindex="-1"></a>graph_mobility <span class="ot">&lt;-</span> <span class="fu">ggplot</span>(<span class="at">data =</span> moblity_jp_zenkoku, <span class="at">mapping =</span> <span class="fu">aes</span>(<span class="at">x =</span> month)) <span class="sc">+</span></span>
<span id="cb22-6"><a href="#cb22-6" aria-hidden="true" tabindex="-1"></a>    <span class="fu">theme_classic</span>() <span class="sc">+</span></span>
<span id="cb22-7"><a href="#cb22-7" aria-hidden="true" tabindex="-1"></a>      <span class="fu">geom_line</span>(<span class="fu">aes</span>(<span class="at">y=</span> google_mobility_index_4vari_average, <span class="at">color =</span> <span class="st">&quot;Google mobility index（average of four mobility index）&quot;</span>))<span class="sc">+</span></span>
<span id="cb22-8"><a href="#cb22-8" aria-hidden="true" tabindex="-1"></a>      <span class="fu">geom_line</span>(<span class="fu">aes</span>(<span class="at">y=</span> mobility_index_6vari_average, <span class="at">color =</span> <span class="st">&quot;Google mobility index（average of six mobility index）&quot;</span>))<span class="sc">+</span></span>
<span id="cb22-9"><a href="#cb22-9" aria-hidden="true" tabindex="-1"></a>        <span class="fu">scale_x_continuous</span>(<span class="at">breaks =</span> <span class="fu">seq</span>(<span class="dv">2</span>,<span class="dv">12</span>,<span class="at">by=</span><span class="dv">1</span>)) <span class="sc">+</span></span>
<span id="cb22-10"><a href="#cb22-10" aria-hidden="true" tabindex="-1"></a>   <span class="co">#凡例調整</span></span>
<span id="cb22-11"><a href="#cb22-11" aria-hidden="true" tabindex="-1"></a>      <span class="fu">theme</span>(<span class="at">legend.position=</span><span class="st">&quot;bottom&quot;</span>)<span class="sc">+</span></span>
<span id="cb22-12"><a href="#cb22-12" aria-hidden="true" tabindex="-1"></a>      <span class="fu">theme</span>(<span class="at">legend.background =</span> <span class="fu">element_rect</span>(<span class="at">fill =</span> <span class="cn">NA</span>))<span class="sc">+</span></span>
<span id="cb22-13"><a href="#cb22-13" aria-hidden="true" tabindex="-1"></a>      <span class="fu">theme</span>(<span class="at">legend.direction  =</span><span class="st">&quot;vertical&quot;</span>)<span class="sc">+</span></span>
<span id="cb22-14"><a href="#cb22-14" aria-hidden="true" tabindex="-1"></a>      <span class="fu">labs</span>(<span class="at">title=</span><span class="st">&quot;Google mobility index &quot;</span>,<span class="at">x =</span> <span class="st">&quot;month （in 2020）&quot;</span>, <span class="at">y =</span> <span class="st">&quot;&quot;</span>,<span class="at">color=</span><span class="st">&quot;&quot;</span>) </span>
<span id="cb22-15"><a href="#cb22-15" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb22-16"><a href="#cb22-16" aria-hidden="true" tabindex="-1"></a>  <span class="fu">ggplotly</span>(graph_mobility)</span></code></pre></div>
<div id="htmlwidget-8a143b97857e6a80d2e2" style="width:672px;height:480px;" class="plotly html-widget"></div>
<script type="application/json" data-for="htmlwidget-8a143b97857e6a80d2e2">{"x":{"data":[{"x":[2,3,4,5,6,7,8,9,10,11,12],"y":[-1.68333333333333,-7.29032258064516,-23.6833333333333,-26.0725806451613,-12.9083333333333,-12.5241935483871,-13.6129032258065,-11.325,-8.48387096774194,-9.05833333333333,-10.4032258064516],"text":["google_mobility_index_4vari_average:  -1.683333<br />colour: Google mobility index（average of four mobility index）<br />month:  2","google_mobility_index_4vari_average:  -7.290323<br />colour: Google mobility index（average of four mobility index）<br />month:  3","google_mobility_index_4vari_average: -23.683333<br />colour: Google mobility index（average of four mobility index）<br />month:  4","google_mobility_index_4vari_average: -26.072581<br />colour: Google mobility index（average of four mobility index）<br />month:  5","google_mobility_index_4vari_average: -12.908333<br />colour: Google mobility index（average of four mobility index）<br />month:  6","google_mobility_index_4vari_average: -12.524194<br />colour: Google mobility index（average of four mobility index）<br />month:  7","google_mobility_index_4vari_average: -13.612903<br />colour: Google mobility index（average of four mobility index）<br />month:  8","google_mobility_index_4vari_average: -11.325000<br />colour: Google mobility index（average of four mobility index）<br />month:  9","google_mobility_index_4vari_average:  -8.483871<br />colour: Google mobility index（average of four mobility index）<br />month: 10","google_mobility_index_4vari_average:  -9.058333<br />colour: Google mobility index（average of four mobility index）<br />month: 11","google_mobility_index_4vari_average: -10.403226<br />colour: Google mobility index（average of four mobility index）<br />month: 12"],"type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(248,118,109,1)","dash":"solid"},"hoveron":"points","name":"Google mobility index（average of four mobility index）","legendgroup":"Google mobility index（average of four mobility index）","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[2,3,4,5,6,7,8,9,10,11,12],"y":[-0.655555555555556,-3.60215053763441,-13.9611111111111,-15.9623655913978,-8.35,-8.74193548387097,-7.18817204301075,-6.53888888888889,-5.10215053763441,-4.96111111111111,-8.40322580645161],"text":["mobility_index_6vari_average:  -0.6555556<br />colour: Google mobility index（average of six mobility index）<br />month:  2","mobility_index_6vari_average:  -3.6021505<br />colour: Google mobility index（average of six mobility index）<br />month:  3","mobility_index_6vari_average: -13.9611111<br />colour: Google mobility index（average of six mobility index）<br />month:  4","mobility_index_6vari_average: -15.9623656<br />colour: Google mobility index（average of six mobility index）<br />month:  5","mobility_index_6vari_average:  -8.3500000<br />colour: Google mobility index（average of six mobility index）<br />month:  6","mobility_index_6vari_average:  -8.7419355<br />colour: Google mobility index（average of six mobility index）<br />month:  7","mobility_index_6vari_average:  -7.1881720<br />colour: Google mobility index（average of six mobility index）<br />month:  8","mobility_index_6vari_average:  -6.5388889<br />colour: Google mobility index（average of six mobility index）<br />month:  9","mobility_index_6vari_average:  -5.1021505<br />colour: Google mobility index（average of six mobility index）<br />month: 10","mobility_index_6vari_average:  -4.9611111<br />colour: Google mobility index（average of six mobility index）<br />month: 11","mobility_index_6vari_average:  -8.4032258<br />colour: Google mobility index（average of six mobility index）<br />month: 12"],"type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(0,191,196,1)","dash":"solid"},"hoveron":"points","name":"Google mobility index（average of six mobility index）","legendgroup":"Google mobility index（average of six mobility index）","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":43.7625570776256,"r":7.30593607305936,"b":40.1826484018265,"l":28.4931506849315},"plot_bgcolor":"rgba(255,255,255,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"title":{"text":"Google mobility index ","font":{"color":"rgba(0,0,0,1)","family":"","size":17.5342465753425},"x":0,"xref":"paper"},"xaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[1.5,12.5],"tickmode":"array","ticktext":["2","3","4","5","6","7","8","9","10","11","12"],"tickvals":[2,3,4,5,6,7,8,9,10,11,12],"categoryorder":"array","categoryarray":["2","3","4","5","6","7","8","9","10","11","12"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"y","title":{"text":"month （in 2020）","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-27.3434318996416,0.615295698924731],"tickmode":"array","ticktext":["-20","-10","0"],"tickvals":[-20,-10,0],"categoryorder":"array","categoryarray":["-20","-10","0"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"x","title":{"text":"","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":true,"legend":{"bgcolor":"transparent","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895},"y":0.913385826771654},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","showSendToCloud":false},"source":"A","attrs":{"c47163024552":{"y":{},"colour":{},"x":{},"type":"scatter"},"c4712a153d46":{"y":{},"colour":{},"x":{}}},"cur_data":"c47163024552","visdat":{"c47163024552":["function (y) ","x"],"c4712a153d46":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1},"debounce":0},"shinyEvents":["plotly_hover","plotly_click","plotly_selected","plotly_relayout","plotly_brushed","plotly_brushing","plotly_clickannotation","plotly_doubleclick","plotly_deselect","plotly_afterplot","plotly_sunburstclick"],"base_url":"https://plot.ly"},"evals":[],"jsHooks":[]}</script>
</div>
<div id="save" class="section level1" number="14">
<h1><span class="header-section-number">14</span> save</h1>
<div class="sourceCode" id="cb23"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb23-1"><a href="#cb23-1" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> (stringr<span class="sc">::</span><span class="fu">str_detect</span>(path, <span class="at">pattern=</span><span class="st">&quot;Users&quot;</span>)){ </span>
<span id="cb23-2"><a href="#cb23-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb23-3"><a href="#cb23-3" aria-hidden="true" tabindex="-1"></a>  <span class="fu">quartz</span>(<span class="at">file =</span> <span class="st">&quot;output/graph_trends_graph_mobility_oldver.pdf&quot;</span>, <span class="at">type =</span> <span class="st">&quot;pdf&quot;</span>, </span>
<span id="cb23-4"><a href="#cb23-4" aria-hidden="true" tabindex="-1"></a>         <span class="at">family =</span> base_family, <span class="at">width =</span> <span class="dv">7</span>, <span class="at">height =</span> <span class="dv">5</span>,<span class="at">dpi=</span><span class="dv">300</span>, <span class="co"># for mac</span></span>
<span id="cb23-5"><a href="#cb23-5" aria-hidden="true" tabindex="-1"></a>        <span class="at">pointsize =</span> <span class="dv">10</span>)</span>
<span id="cb23-6"><a href="#cb23-6" aria-hidden="true" tabindex="-1"></a><span class="fu">print</span>(graph_mobility)</span>
<span id="cb23-7"><a href="#cb23-7" aria-hidden="true" tabindex="-1"></a><span class="fu">dev.off</span>()} <span class="cf">else</span>{</span>
<span id="cb23-8"><a href="#cb23-8" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb23-9"><a href="#cb23-9" aria-hidden="true" tabindex="-1"></a><span class="fu">ggsave</span>(graph_mobility,<span class="at">filename =</span> <span class="st">&quot;output/graph_trends_graph_mobility_oldver.pdf&quot;</span>, </span>
<span id="cb23-10"><a href="#cb23-10" aria-hidden="true" tabindex="-1"></a>       <span class="at">width =</span> <span class="dv">7</span>, <span class="at">height =</span> <span class="dv">5</span>,<span class="at">dpi=</span><span class="dv">300</span>) <span class="co"># for windows</span></span>
<span id="cb23-11"><a href="#cb23-11" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb23-12"><a href="#cb23-12" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div>
<pre><code>## quartz_off_screen 
##                 2</code></pre>
</div>
<div id="graph-mobility-index" class="section level1" number="15">
<h1><span class="header-section-number">15</span> graph mobility index</h1>
<div class="sourceCode" id="cb25"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true" tabindex="-1"></a><span class="co">#2021Sep30 Waki</span></span>
<span id="cb25-2"><a href="#cb25-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb25-3"><a href="#cb25-3" aria-hidden="true" tabindex="-1"></a>moblity_jp_zenkoku <span class="ot">&lt;-</span> google_mobility_Japan2020 <span class="sc">%&gt;%</span> </span>
<span id="cb25-4"><a href="#cb25-4" aria-hidden="true" tabindex="-1"></a>  <span class="fu">filter</span>(., sub_region_1<span class="sc">==</span><span class="st">&quot;zenkoku&quot;</span>) </span>
<span id="cb25-5"><a href="#cb25-5" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb25-6"><a href="#cb25-6" aria-hidden="true" tabindex="-1"></a>graph_mobility <span class="ot">&lt;-</span> <span class="fu">ggplot</span>(<span class="at">data =</span> moblity_jp_zenkoku, <span class="at">mapping =</span> <span class="fu">aes</span>(<span class="at">x =</span> month)) <span class="sc">+</span></span>
<span id="cb25-7"><a href="#cb25-7" aria-hidden="true" tabindex="-1"></a>    <span class="fu">theme_classic</span>() <span class="sc">+</span></span>
<span id="cb25-8"><a href="#cb25-8" aria-hidden="true" tabindex="-1"></a>      <span class="fu">geom_line</span>(<span class="fu">aes</span>(<span class="at">y=</span> mobility_index_6vari_average, <span class="at">color =</span> <span class="st">&quot;Google mobility index（average of six mobility index)&quot;</span>))<span class="sc">+</span></span>
<span id="cb25-9"><a href="#cb25-9" aria-hidden="true" tabindex="-1"></a>        <span class="fu">scale_x_continuous</span>(<span class="at">breaks =</span> <span class="fu">seq</span>(<span class="dv">2</span>,<span class="dv">12</span>,<span class="at">by=</span><span class="dv">1</span>)) <span class="sc">+</span></span>
<span id="cb25-10"><a href="#cb25-10" aria-hidden="true" tabindex="-1"></a>   <span class="co">#凡例調整</span></span>
<span id="cb25-11"><a href="#cb25-11" aria-hidden="true" tabindex="-1"></a>      <span class="fu">theme</span>(<span class="at">legend.position=</span><span class="st">&quot;none&quot;</span>)<span class="sc">+</span></span>
<span id="cb25-12"><a href="#cb25-12" aria-hidden="true" tabindex="-1"></a>      <span class="fu">labs</span>(<span class="at">title=</span><span class="st">&quot;&quot;</span>,<span class="at">x =</span> <span class="st">&quot;Month in 2020&quot;</span>, <span class="at">y =</span> <span class="st">&quot;&quot;</span>,<span class="at">color=</span><span class="st">&quot;&quot;</span>) <span class="sc">+</span></span>
<span id="cb25-13"><a href="#cb25-13" aria-hidden="true" tabindex="-1"></a>      <span class="fu">scale_color_manual</span>(<span class="at">values =</span> <span class="st">&quot;black&quot;</span>) <span class="sc">+</span></span>
<span id="cb25-14"><a href="#cb25-14" aria-hidden="true" tabindex="-1"></a>      <span class="fu">annotate</span>(<span class="st">&quot;rect&quot;</span>,<span class="at">xmin =</span> <span class="dv">4</span>,<span class="at">xmax =</span> <span class="dv">5</span>,<span class="at">ymin =</span> <span class="sc">-</span><span class="cn">Inf</span>,<span class="at">ymax =</span> <span class="cn">Inf</span>, <span class="at">alpha =</span> .<span class="dv">3</span>, <span class="at">fill =</span> <span class="st">&quot;gray&quot;</span>) <span class="sc">+</span></span>
<span id="cb25-15"><a href="#cb25-15" aria-hidden="true" tabindex="-1"></a>    　<span class="fu">annotate</span>(<span class="at">geom =</span> <span class="st">&quot;text&quot;</span>, <span class="at">x =</span> <span class="dv">5</span>, <span class="at">y =</span> <span class="dv">0</span>,</span>
<span id="cb25-16"><a href="#cb25-16" aria-hidden="true" tabindex="-1"></a>             <span class="at">label =</span> <span class="st">&quot;←The first state of emergency&quot;</span>, <span class="at">size =</span> <span class="dv">5</span>, <span class="at">hjust =</span> <span class="dv">0</span>) <span class="sc">+</span> </span>
<span id="cb25-17"><a href="#cb25-17" aria-hidden="true" tabindex="-1"></a>    <span class="fu">theme</span>(<span class="at">text =</span> <span class="fu">element_text</span>(<span class="at">family =</span> base_family))</span>
<span id="cb25-18"><a href="#cb25-18" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb25-19"><a href="#cb25-19" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb25-20"><a href="#cb25-20" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb25-21"><a href="#cb25-21" aria-hidden="true" tabindex="-1"></a><span class="fu">ggplotly</span>(graph_mobility)</span></code></pre></div>
<div id="htmlwidget-8cf911d85255c50eedd3" style="width:672px;height:480px;" class="plotly html-widget"></div>
<script type="application/json" data-for="htmlwidget-8cf911d85255c50eedd3">{"x":{"data":[{"x":[2,3,4,5,6,7,8,9,10,11,12],"y":[-0.655555555555556,-3.60215053763441,-13.9611111111111,-15.9623655913978,-8.35,-8.74193548387097,-7.18817204301075,-6.53888888888889,-5.10215053763441,-4.96111111111111,-8.40322580645161],"text":["mobility_index_6vari_average:  -0.6555556<br />colour: Google mobility index（average of six mobility index)<br />month:  2","mobility_index_6vari_average:  -3.6021505<br />colour: Google mobility index（average of six mobility index)<br />month:  3","mobility_index_6vari_average: -13.9611111<br />colour: Google mobility index（average of six mobility index)<br />month:  4","mobility_index_6vari_average: -15.9623656<br />colour: Google mobility index（average of six mobility index)<br />month:  5","mobility_index_6vari_average:  -8.3500000<br />colour: Google mobility index（average of six mobility index)<br />month:  6","mobility_index_6vari_average:  -8.7419355<br />colour: Google mobility index（average of six mobility index)<br />month:  7","mobility_index_6vari_average:  -7.1881720<br />colour: Google mobility index（average of six mobility index)<br />month:  8","mobility_index_6vari_average:  -6.5388889<br />colour: Google mobility index（average of six mobility index)<br />month:  9","mobility_index_6vari_average:  -5.1021505<br />colour: Google mobility index（average of six mobility index)<br />month: 10","mobility_index_6vari_average:  -4.9611111<br />colour: Google mobility index（average of six mobility index)<br />month: 11","mobility_index_6vari_average:  -8.4032258<br />colour: Google mobility index（average of six mobility index)<br />month: 12"],"type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(0,0,0,1)","dash":"solid"},"hoveron":"points","name":"Google mobility index（average of six mobility index)","legendgroup":"Google mobility index（average of six mobility index)","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[4,4,5,5,4],"y":[null,null,null,null,null],"text":"","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"transparent","dash":"solid"},"fill":"toself","fillcolor":"rgba(190,190,190,0.3)","hoveron":"fills","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[5],"y":[0],"text":"←The first state of emergency","hovertext":"x: 5<br />y: 0","textfont":{"size":18.8976377952756,"color":"rgba(0,0,0,1)"},"type":"scatter","mode":"text","hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":26.2283105022831,"r":7.30593607305936,"b":40.1826484018265,"l":28.4931506849315},"plot_bgcolor":"rgba(255,255,255,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"HiraginoSans-W3","size":14.6118721461187},"xaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[1.5,12.5],"tickmode":"array","ticktext":["2","3","4","5","6","7","8","9","10","11","12"],"tickvals":[2,3,4,5,6,7,8,9,10,11,12],"categoryorder":"array","categoryarray":["2","3","4","5","6","7","8","9","10","11","12"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"HiraginoSans-W3","size":11.689497716895},"tickangle":-0,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"y","title":{"text":"Month in 2020","font":{"color":"rgba(0,0,0,1)","family":"HiraginoSans-W3","size":14.6118721461187}},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-16.7604838709677,0.798118279569892],"tickmode":"array","ticktext":["-15","-10","-5","0"],"tickvals":[-15,-10,-5,0],"categoryorder":"array","categoryarray":["-15","-10","-5","0"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"HiraginoSans-W3","size":11.689497716895},"tickangle":-0,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"x","title":{"text":"","font":{"color":"rgba(0,0,0,1)","family":"HiraginoSans-W3","size":14.6118721461187}},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":false,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"HiraginoSans-W3","size":11.689497716895}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","showSendToCloud":false},"source":"A","attrs":{"c471224159ba":{"y":{},"colour":{},"x":{},"type":"scatter"},"c4717069d3e7":{"xmin":{},"xmax":{},"ymin":{},"ymax":{}},"c47133d71c59":{"x":{},"y":{}}},"cur_data":"c471224159ba","visdat":{"c471224159ba":["function (y) ","x"],"c4717069d3e7":["function (y) ","x"],"c47133d71c59":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1},"debounce":0},"shinyEvents":["plotly_hover","plotly_click","plotly_selected","plotly_relayout","plotly_brushed","plotly_brushing","plotly_clickannotation","plotly_doubleclick","plotly_deselect","plotly_afterplot","plotly_sunburstclick"],"base_url":"https://plot.ly"},"evals":[],"jsHooks":[]}</script>
</div>
<div id="save-1" class="section level1" number="16">
<h1><span class="header-section-number">16</span> save</h1>
<div class="sourceCode" id="cb26"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb26-1"><a href="#cb26-1" aria-hidden="true" tabindex="-1"></a><span class="co">#2021Sep30 Waki</span></span>
<span id="cb26-2"><a href="#cb26-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb26-3"><a href="#cb26-3" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> (stringr<span class="sc">::</span><span class="fu">str_detect</span>(path, <span class="at">pattern=</span><span class="st">&quot;Users&quot;</span>)){ </span>
<span id="cb26-4"><a href="#cb26-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb26-5"><a href="#cb26-5" aria-hidden="true" tabindex="-1"></a>  <span class="fu">quartz</span>(<span class="at">file =</span> <span class="st">&quot;output/graph_trends_graph_mobility.pdf&quot;</span>, <span class="at">type =</span> <span class="st">&quot;pdf&quot;</span>, </span>
<span id="cb26-6"><a href="#cb26-6" aria-hidden="true" tabindex="-1"></a>         <span class="at">family =</span> base_family, <span class="at">width =</span> <span class="dv">7</span>, <span class="at">height =</span> <span class="dv">5</span>,<span class="at">dpi=</span><span class="dv">300</span>, <span class="co"># for mac</span></span>
<span id="cb26-7"><a href="#cb26-7" aria-hidden="true" tabindex="-1"></a>        <span class="at">pointsize =</span> <span class="dv">10</span>)</span>
<span id="cb26-8"><a href="#cb26-8" aria-hidden="true" tabindex="-1"></a><span class="fu">print</span>(graph_mobility)</span>
<span id="cb26-9"><a href="#cb26-9" aria-hidden="true" tabindex="-1"></a><span class="fu">dev.off</span>()} <span class="cf">else</span>{</span>
<span id="cb26-10"><a href="#cb26-10" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb26-11"><a href="#cb26-11" aria-hidden="true" tabindex="-1"></a><span class="fu">ggsave</span>(graph_mobility,<span class="at">filename =</span> <span class="st">&quot;output/graph_trends_graph_mobility.pdf&quot;</span>, </span>
<span id="cb26-12"><a href="#cb26-12" aria-hidden="true" tabindex="-1"></a>       <span class="at">width =</span> <span class="dv">7</span>, <span class="at">height =</span> <span class="dv">5</span>,<span class="at">dpi=</span><span class="dv">300</span>) <span class="co"># for windows</span></span>
<span id="cb26-13"><a href="#cb26-13" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb26-14"><a href="#cb26-14" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div>
<pre><code>## quartz_off_screen 
##                 2</code></pre>
</div>
<div id="data-checkデータ確認-1" class="section level1" number="17">
<h1><span class="header-section-number">17</span> Data checkデータ確認</h1>
<div class="sourceCode" id="cb28"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb28-1"><a href="#cb28-1" aria-hidden="true" tabindex="-1"></a><span class="fu">datatable</span>(moblity_jp_zenkoku)</span></code></pre></div>
<div id="htmlwidget-64e0f74f55ca902ccfee" style="width:100%;height:auto;" class="datatables html-widget"></div>
<script type="application/json" data-for="htmlwidget-64e0f74f55ca902ccfee">{"x":{"filter":"none","data":[["1","2","3","4","5","6","7","8","9","10","11"],["zenkoku","zenkoku","zenkoku","zenkoku","zenkoku","zenkoku","zenkoku","zenkoku","zenkoku","zenkoku","zenkoku"],[2,3,4,5,6,7,8,9,10,11,12],[-1.06666666666667,-6.80645161290323,-29.2,-29.7741935483871,-13.8,-11.3870967741935,-9.74193548387097,-9.23333333333333,-8.12903225806452,-6.73333333333333,-6.45161290322581],[3.73333333333333,2.93548387096774,-0.366666666666667,-2.06451612903226,0.166666666666667,-0.32258064516129,1.41935483870968,-0.933333333333333,-0.290322580645161,-0.166666666666667,2.35483870967742],[0.8,2.83870967741935,-1.06666666666667,-5.25806451612903,-5.33333333333333,-9.41935483870968,3.83870967741935,0.566666666666667,-0.774193548387097,1.66666666666667,-15.5161290322581],[-6.2,-19.2258064516129,-43.2333333333333,-45.8064516129032,-25.4,-23.8064516129032,-26.6129032258065,-21.2,-16.5483870967742,-18.4,-24.1290322580645],[-3.2,-6.06451612903226,-21.9333333333333,-26.6451612903226,-12.6,-14.5806451612903,-19.5161290322581,-13.9333333333333,-8.96774193548387,-10.9333333333333,-13.3870967741935],[2,4.70967741935484,12.0333333333333,13.7741935483871,6.86666666666667,7.06451612903226,7.48387096774194,5.5,4.09677419354839,4.8,6.70967741935484],["zenkoku","zenkoku","zenkoku","zenkoku","zenkoku","zenkoku","zenkoku","zenkoku","zenkoku","zenkoku","zenkoku"],[2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020],[-1.68333333333333,-7.29032258064516,-23.6833333333333,-26.0725806451613,-12.9083333333333,-12.5241935483871,-13.6129032258065,-11.325,-8.48387096774194,-9.05833333333333,-10.4032258064516],[-0.655555555555556,-3.60215053763441,-13.9611111111111,-15.9623655913978,-8.35,-8.74193548387097,-7.18817204301075,-6.53888888888889,-5.10215053763441,-4.96111111111111,-8.40322580645161]],"container":"<table class=\"display\">\n  <thead>\n    <tr>\n      <th> <\/th>\n      <th>sub_region_1<\/th>\n      <th>month<\/th>\n      <th>retail_and_recreation<\/th>\n      <th>grocery_and_pharmacy<\/th>\n      <th>parks<\/th>\n      <th>transit_stations<\/th>\n      <th>workplaces<\/th>\n      <th>residential<\/th>\n      <th>prefec<\/th>\n      <th>year<\/th>\n      <th>google_mobility_index_4vari_average<\/th>\n      <th>mobility_index_6vari_average<\/th>\n    <\/tr>\n  <\/thead>\n<\/table>","options":{"columnDefs":[{"className":"dt-right","targets":[2,3,4,5,6,7,8,10,11,12]},{"orderable":false,"targets":0}],"order":[],"autoWidth":false,"orderClasses":false}},"evals":[],"jsHooks":[]}</script>
</div>



</div>
</div>

</div>

<script>

// add bootstrap table styles to pandoc tables
function bootstrapStylePandocTables() {
  $('tr.odd').parent('tbody').parent('table').addClass('table table-condensed');
}
$(document).ready(function () {
  bootstrapStylePandocTables();
});


</script>

<!-- tabsets -->

<script>
$(document).ready(function () {
  window.buildTabsets("TOC");
});

$(document).ready(function () {
  $('.tabset-dropdown > .nav-tabs > li').click(function () {
    $(this).parent().toggleClass('nav-tabs-open');
  });
});
</script>

<!-- code folding -->
<script>
$(document).ready(function () {
  window.initializeCodeFolding("hide" === "show");
});
</script>

<script>
$(document).ready(function ()  {

    // temporarily add toc-ignore selector to headers for the consistency with Pandoc
    $('.unlisted.unnumbered').addClass('toc-ignore')

    // move toc-ignore selectors from section div to header
    $('div.section.toc-ignore')
        .removeClass('toc-ignore')
        .children('h1,h2,h3,h4,h5').addClass('toc-ignore');

    // establish options
    var options = {
      selectors: "h1,h2,h3",
      theme: "bootstrap3",
      context: '.toc-content',
      hashGenerator: function (text) {
        return text.replace(/[.\\/?&!#<>]/g, '').replace(/\s/g, '_');
      },
      ignoreSelector: ".toc-ignore",
      scrollTo: 0
    };
    options.showAndHide = true;
    options.smoothScroll = true;

    // tocify
    var toc = $("#TOC").tocify(options).data("toc-tocify");
});
</script>

<!-- dynamically load mathjax for compatibility with self-contained -->
<script>
  (function () {
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src  = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
    document.getElementsByTagName("head")[0].appendChild(script);
  })();
</script>

</body>
</html>
